From a501e632867b65bbae7b668f98956672294bdcba Mon Sep 17 00:00:00 2001 From: Matt Knight Date: Tue, 7 Jun 2022 01:18:02 -0700 Subject: [PATCH 001/286] init --- .gitignore | 2 + .gitmodules | 3 + build.zig | 51 + microzig | 1 + rp2040.ld | 58 + src/hal.zig | 20 + src/hal/clocks.zig | 438 + src/hal/gpio.zig | 153 + src/hal/pll.zig | 97 + src/raspberry_pi_pico.zig | 38 + src/rp2040.zig | 29422 ++++++++++++++++++++++++++++++++++++ 11 files changed, 30283 insertions(+) create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 build.zig create mode 160000 microzig create mode 100644 rp2040.ld create mode 100644 src/hal.zig create mode 100644 src/hal/clocks.zig create mode 100644 src/hal/gpio.zig create mode 100644 src/hal/pll.zig create mode 100644 src/raspberry_pi_pico.zig create mode 100644 src/rp2040.zig diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..4c82b07c0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +zig-cache +zig-out diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..fdd0dab01 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "microzig"] + path = microzig + url = git@github.com:ZigEmbeddedGroup/microzig.git diff --git a/build.zig b/build.zig new file mode 100644 index 000000000..7bf7beaf8 --- /dev/null +++ b/build.zig @@ -0,0 +1,51 @@ +const std = @import("std"); + +const Builder = std.build.Builder; +const Pkg = std.build.Pkg; + +pub const BuildOptions = struct { + packages: ?[]const Pkg = null, +}; + +pub fn addPiPicoExecutable( + comptime microzig: type, + builder: *Builder, + name: []const u8, + source: []const u8, + options: BuildOptions, +) *std.build.LibExeObjStep { + const rp2040 = microzig.Chip{ + .name = "RP2040", + .path = root() ++ "src/rp2040.zig", + .cpu = microzig.cpus.cortex_m0plus, + .memory_regions = &.{ + .{ .kind = .flash, .offset = 0x10000100, .length = (2048 * 1024) - 256 }, + .{ .kind = .flash, .offset = 0x10000000, .length = 256 }, + .{ .kind = .ram, .offset = 0x20000000, .length = 256 * 1024 }, + }, + }; + + const raspberry_pi_pico = microzig.Board{ + .name = "Raspberry Pi Pico", + .path = root() ++ "src/raspberry_pi_pico.zig", + .chip = rp2040, + }; + + const ret = microzig.addEmbeddedExecutable( + builder, + name, + source, + .{ .board = raspberry_pi_pico }, + .{ + .packages = options.packages, + .hal_package_path = .{ .path = root() ++ "src/hal.zig" }, + }, + ) catch @panic("failed to create embedded executable"); + ret.setLinkerScriptPath(.{ .path = root() ++ "rp2040.ld" }); + + return ret; +} + +fn root() []const u8 { + return (std.fs.path.dirname(@src().file) orelse unreachable) ++ "/"; +} diff --git a/microzig b/microzig new file mode 160000 index 000000000..ac19b7de8 --- /dev/null +++ b/microzig @@ -0,0 +1 @@ +Subproject commit ac19b7de8eb1551e603b3ce23a4aab69c71d1216 diff --git a/rp2040.ld b/rp2040.ld new file mode 100644 index 000000000..f293543dc --- /dev/null +++ b/rp2040.ld @@ -0,0 +1,58 @@ +/* + * This file was auto-generated by microzig + * + * Target CPU: ARM Cortex-M0+ + * Target Chip: RP2040 + */ + +ENTRY(microzig_main); + +MEMORY +{ + flash0 (rx!w) : ORIGIN = 0x10000000, LENGTH = 0x00200000 + ram0 (rw!x) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .boot2 : { + __boot2_start__ = .; + KEEP (*(.boot2)) + __boot2_end__ = .; + } > flash0 + + ASSERT(__boot2_end__ - __boot2_start__ == 256, + "ERROR: Pico second stage bootloader must be 256 bytes in size") + + .text : + { + KEEP(*(microzig_flash_start)) + *(.text*) + *(.rodata*) + } > flash0 + + .ARM.exidx : { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } >flash0 + + .flash1 : + { + *(.flash1) + } > flash1 + + .data : + { + microzig_data_start = .; + *(.data*) + microzig_data_end = .; + } > ram0 AT> flash0 + + .bss (NOLOAD) : + { + microzig_bss_start = .; + *(.bss*) + microzig_bss_end = .; + } > ram0 + + microzig_data_load_start = LOADADDR(.data); +} diff --git a/src/hal.zig b/src/hal.zig new file mode 100644 index 000000000..41f474420 --- /dev/null +++ b/src/hal.zig @@ -0,0 +1,20 @@ +const microzig = @import("microzig"); +const regs = microzig.chip.regsisters; +pub const gpio = @import("hal/gpio.zig"); +pub const clocks = @import("hal/clocks.zig"); + +pub const default_clock_config = clocks.GlobalConfiguration.init(.{ + //.ref = .{ .source = .src_xosc }, + .sys = .{ + .source = .pll_sys, + .freq = 125_000_000, + }, + .usb = .{ .source = .pll_usb }, + //.adc = .{ .source = .pll_usb }, + //.rtc = .{ .source = .pll_usb }, + .peri = .{ .source = .clk_sys }, +}); + +pub fn getCpuId() u32 { + return regs.SIO.CPUID.*; +} diff --git a/src/hal/clocks.zig b/src/hal/clocks.zig new file mode 100644 index 000000000..7f266e299 --- /dev/null +++ b/src/hal/clocks.zig @@ -0,0 +1,438 @@ +const std = @import("std"); +const microzig = @import("microzig"); +const pll = @import("pll.zig"); +const assert = std.debug.assert; + +const regs = microzig.chip.registers; +const xosc_freq = microzig.board.xosc_freq; +// TODO: move to board file +/// this is only nominal, very imprecise and prone to drift over time +const rosc_freq = 6_500_000; + +comptime { + assert(xosc_freq <= 15_000_000 and xosc_freq >= 1_000_000); // xosc limits +} + +pub const xosc = struct { + const startup_delay_ms = 1; + const startup_delay_value = xosc_freq * startup_delay_ms / 1000 / 256; + + pub fn init() void { + regs.XOSC.STARTUP.modify(.{ .DELAY = startup_delay_value }); + regs.XOSC.CTRL.modify(.{ .ENABLE = 4011 }); + + // wait for xosc startup to complete: + while (regs.XOSC.STATUS.read().STABLE == 0) {} + } + + pub fn waitCycles(value: u8) void { + assert(is_enabled: { + const status = regs.XOSC.STATUS.read(); + break :is_enabled status.STABLE != 0 and status.ENABLED != 0; + }); + + regs.XOSC.COUNT.modify(value); + while (regs.XOSC.COUNT.read() != 0) {} + } +}; + +fn formatUppercase( + bytes: []const u8, + comptime fmt: []const u8, + options: std.fmt.FormatOptions, + writer: anytype, +) !void { + _ = fmt; + _ = options; + for (bytes) |c| + try writer.writeByte(std.ascii.toUpper(c)); +} + +fn uppercase(bytes: []const u8) std.fmt.Formatter(formatUppercase) { + return .{ .data = bytes }; +} + +pub const Generator = enum { + gpout0, + gpout1, + gpout2, + gpout3, + ref, + sys, + peri, + usb, + adc, + rtc, + + // source directly from register definitions + const Source = enum { + rosc_clksrc_ph, + clksrc_clk_ref_aux, + xosc_clksrc, + clk_ref, + clksrc_clk_sys_aux, + }; + + // aux sources directly from register definitions + const AuxilarySource = enum { + clksrc_pll_sys, + clksrc_gpin0, + clksrc_gpin1, + clksrc_pll_usb, + rosc_clksrc, + xosc_clksrc, + clk_sys, + clk_usb, + clk_adc, + clk_rtc, + clk_ref, + rosc_clksrc_ph, + }; + + const source_map = struct { + const ref = [_]Generator.Source{ .rosc_clksrc_ph, .clksrc_clk_ref, .xosc_clksrc }; + const sys = [_]Generator.Source{ .clk_ref, .clksrc_clk_sys_aux }; + }; + + const aux_map = struct {}; + + pub fn hasGlitchlessMux(generator: Generator) bool { + return switch (generator) { + .sys, .ref => true, + else => false, + }; + } + + pub fn enable(generator: Generator) void { + inline for (std.meta.fields(Generator)) |field| { + if (generator == @field(Generator, field.name)) { + const reg_name = comptime std.fmt.comptimePrint("CLK_{s}_CTRL", .{ + uppercase(field.name), + }); + + if (@hasField(@TypeOf(@field(regs.CLOCKS, reg_name).*).underlying_type, "ENABLE")) + @field(regs.CLOCKS, reg_name).modify(.{ .ENABLE = 1 }); + } + } + } + + pub fn setDiv(generator: Generator, div: u32) void { + inline for (std.meta.fields(Generator)) |field| { + if (generator == @field(Generator, field.name)) { + const reg_name = comptime std.fmt.comptimePrint("CLK_{s}_DIV", .{ + uppercase(field.name), + }); + + if (@hasDecl(regs.CLOCKS, reg_name)) + @field(regs.CLOCKS, reg_name).raw = div + else + assert(false); // doesn't have a divider + } + } + } + + pub fn getDiv(generator: Generator) u32 { + return inline for (std.meta.fields(Generator)) |field| { + if (generator == @field(Generator, field.name)) { + const reg_name = comptime std.fmt.comptimePrint("CLK_{s}_DIV", .{ + uppercase(field.name), + }); + + break if (@hasDecl(regs.CLOCKS, reg_name)) + @field(regs.CLOCKS, reg_name).raw + else + 1; + } + } else unreachable; + } + + // The bitfields for the *_SELECTED registers are actually a mask of which + // source is selected. While switching sources it may read as 0, and that's + // what this function is indended for: checking if the new source has + // switched over yet. + // + // Some mention that this is only for the glitchless mux, so if it is non-glitchless then return true + pub fn selected(generator: Generator) bool { + inline for (std.meta.fields(Generator)) |field| { + if (generator == @field(Generator, field.name)) { + return if (@field(Generator, field.name).hasGlitchlessMux()) ret: { + const reg_name = comptime std.fmt.comptimePrint("CLK_{s}_SELECTED", .{ + uppercase(field.name), + }); + + break :ret @field(regs.CLOCKS, reg_name).* != 0; + } else true; + } + } else unreachable; + } +}; + +pub const Source = enum { + src_rosc, + src_xosc, + src_aux, + pll_sys, + pll_usb, + clk_sys, +}; + +pub const GlobalConfiguration = struct { + xosc_configured: bool, + sys: ?Configuration, + ref: ?Configuration, + usb: ?Configuration, + adc: ?Configuration, + rtc: ?Configuration, + peri: ?Configuration, + + pll_sys: ?pll.Configuration, + pll_usb: ?pll.Configuration, + + pub const Option = struct { + source: Source, + freq: ?u32 = null, + }; + + pub const Options = struct { + sys: ?Option = null, + ref: ?Option = null, + usb: ?Option = null, + adc: ?Option = null, + rtc: ?Option = null, + peri: ?Option = null, + // TODO: allow user to configure PLLs to optimize for low-jitter, low-power, or manually specify + }; + + /// this function reasons about how to configure the clock system. It will + /// assert if the configuration is invalid + pub fn init(comptime opts: Options) GlobalConfiguration { + var xosc_configured = false; + var pll_sys: ?pll.Configuration = null; + var pll_usb: ?pll.Configuration = null; + + return GlobalConfiguration{ + // the system clock can either use rosc, xosc, or the sys PLL + .sys = if (opts.sys) |sys_opts| sys_config: { + var output_freq: ?u32 = null; + break :sys_config .{ + .generator = .sys, + .input = switch (sys_opts.source) { + .src_rosc => input: { + output_freq = sys_opts.freq orelse rosc_freq; + assert(output_freq.? <= rosc_freq); + break :input .{ + .source = .rosc, + .freq = rosc_freq, + }; + }, + .src_xosc => input: { + xosc_configured = true; + output_freq = sys_opts.freq orelse xosc_freq; + assert(output_freq.? <= xosc_freq); + break :input .{ + .source = .xosc, + .freq = xosc_freq, + }; + }, + .pll_sys => input: { + xosc_configured = true; + output_freq = sys_opts.freq orelse 125_000_000; + assert(output_freq.? <= 125_000_000); + + // TODO: proper values for 125MHz + pll_sys = .{ + .refdiv = 2, + .vco_freq = 1_440_000_000, + .postdiv1 = 6, + .postdiv2 = 5, + }; + + break :input .{ + .source = .pll_sys, + // TODO: not really sure what frequency to + // drive pll at yet, but this is an okay start + .freq = 125_000_000, + }; + }, + + else => unreachable, // not an available input + }, + .output_freq = output_freq.?, + }; + } else null, + + // to keep things simple for now, we'll make it so that the usb + // generator can only be hooked up to the usb PLL, and only have + // one configuration for the usb PLL + .usb = if (opts.usb) |usb_opts| usb_config: { + assert(pll_usb == null); + assert(usb_opts.source == .pll_usb); + + xosc_configured = true; + pll_usb = .{ + .refdiv = 1, + .vco_freq = 1_440_000_000, + .postdiv1 = 6, + .postdiv2 = 5, + }; + + break :usb_config .{ + .generator = .usb, + .input = .{ + .source = .pll_usb, + .freq = 48_000_000, + }, + .output_freq = 48_000_000, + }; + } else null, + + // I THINK that if either pll is configured here, then that means + // that the ref clock generator MUST use xosc to feed the PLLs? + .ref = if (opts.ref) |_| + unreachable // don't explicitly configure for now + else if (pll_sys != null or pll_usb != null) ref_config: { + xosc_configured = true; + break :ref_config .{ + .generator = .ref, + .input = .{ + .source = .src_xosc, + .freq = xosc_freq, + }, + .output_freq = xosc_freq, + }; + } else null, + + // for the rest of the generators we'll make it so that they can + // either use the ROSC, XOSC, or sys PLL, with whatever dividing + // they need + + .adc = if (opts.adc) |_| + unreachable // TODO + else + null, + + .rtc = if (opts.rtc) |_| + unreachable // TODO + else + null, + + .peri = if (opts.peri) |peri_opts| peri_config: { + if (peri_opts.source == .src_xosc) + xosc_configured = true; + + // TODO + break :peri_config .{ + .generator = .peri, + .input = .{ + .source = peri_opts.source, + .freq = xosc_freq, + }, + .output_freq = xosc_freq, + }; + } else null, + + .xosc_configured = xosc_configured, + .pll_sys = pll_sys, + .pll_usb = pll_usb, + }; + } + + /// this is explicitly comptime to encourage the user to have separate + /// clock configuration declarations instead of mutating them at runtime + pub fn apply(comptime config: GlobalConfiguration) !void { + + // disable resus if it has been turned on elsewhere + regs.CLOCKS.CLK_SYS_RESUS_CTRL.raw = 0; + + if (config.xosc_configured) { + regs.WATCHDOG.TICK.modify(.{ + .CYCLES = xosc_freq / 1_000_000, + .ENABLE = 1, + }); + xosc.init(); + } + + // switch sys and ref cleanly away from aux sources if they're + // configured to use/be used from PLLs + if (config.sys) |sys| switch (sys.input.source) { + .pll_usb, .pll_sys => { + regs.CLOCKS.CLK_SYS_CTRL.modify(.{ .SRC = 0 }); + while (regs.CLOCKS.CLK_SYS_SELECTED.* != 1) {} + }, + else => {}, + }; + + if (config.ref) |ref| switch (ref.input.source) { + .pll_usb, .pll_sys => { + regs.CLOCKS.CLK_REF_CTRL.modify(.{ .SRC = 0 }); + while (regs.CLOCKS.CLK_REF_SELECTED.* != 1) {} + }, + else => {}, + }; + + // initialize PLLs + if (config.pll_sys) |pll_sys_config| pll.sys.apply(pll_sys_config); + if (config.pll_usb) |pll_usb_config| pll.usb.apply(pll_usb_config); + + // initialize clock generators + if (config.ref) |ref| try ref.apply(); + if (config.usb) |usb| try usb.apply(); + if (config.adc) |adc| try adc.apply(); + if (config.rtc) |rtc| try rtc.apply(); + if (config.peri) |peri| try peri.apply(); + } + + /// returns frequency of a clock or pll, if unconfigured it returns null + pub fn getFrequency(config: GlobalConfiguration) ?u32 { + _ = config; + return null; + } +}; + +pub const Configuration = struct { + generator: Generator, + input: struct { + source: Source, + freq: u32, + }, + output_freq: u32, + + pub fn apply(config: Configuration) !void { + const generator = config.generator; + const input = config.input; + const output_freq = config.output_freq; + + // source frequency has to be faster because dividing will always reduce. + assert(input.freq >= output_freq); + if (output_freq < input.freq) + return error.InvalidArgs; + + const div = @intCast(u32, (@intCast(u64, input.freq) << 8) / 8); + + // check divisor + if (div > generator.getDiv()) + generator.setDiv(div); + + if (generator.hasGlitchlessMux() and input.source == .src_aux) { + // TODO: clear bits + while (!generator.selected()) { + // TODO: is leaving this empty good enough? pico sdk has `tight_loop_contents()` + } + } else { + // uh stuff + } + + // set aux mux first and then glitchless mex if this clock has one + if (generator.hasGlitchlessMux()) { + // write to clock ctrl + while (!generator.selected()) {} + } + + generator.enable(); + generator.setDiv(div); + // should we store global state on configured clocks? + } +}; + +//pub fn countFrequencyKhz(source: Source) u32 {} + diff --git a/src/hal/gpio.zig b/src/hal/gpio.zig new file mode 100644 index 000000000..ab0f66696 --- /dev/null +++ b/src/hal/gpio.zig @@ -0,0 +1,153 @@ +//! ### Function Select Table +//! +//! GPIO | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 +//! -------|----------|-----------|----------|--------|-----|------|------|---------------|---- +//! 0 | SPI0 RX | UART0 TX | I2C0 SDA | PWM0 A | SIO | PIO0 | PIO1 | | USB OVCUR DET +//! 1 | SPI0 CSn | UART0 RX | I2C0 SCL | PWM0 B | SIO | PIO0 | PIO1 | | USB VBUS DET +//! 2 | SPI0 SCK | UART0 CTS | I2C1 SDA | PWM1 A | SIO | PIO0 | PIO1 | | USB VBUS EN +//! 3 | SPI0 TX | UART0 RTS | I2C1 SCL | PWM1 B | SIO | PIO0 | PIO1 | | USB OVCUR DET +//! 4 | SPI0 RX | UART1 TX | I2C0 SDA | PWM2 A | SIO | PIO0 | PIO1 | | USB VBUS DET +//! 5 | SPI0 CSn | UART1 RX | I2C0 SCL | PWM2 B | SIO | PIO0 | PIO1 | | USB VBUS EN +//! 6 | SPI0 SCK | UART1 CTS | I2C1 SDA | PWM3 A | SIO | PIO0 | PIO1 | | USB OVCUR DET +//! 7 | SPI0 TX | UART1 RTS | I2C1 SCL | PWM3 B | SIO | PIO0 | PIO1 | | USB VBUS DET +//! 8 | SPI1 RX | UART1 TX | I2C0 SDA | PWM4 A | SIO | PIO0 | PIO1 | | USB VBUS EN +//! 9 | SPI1 CSn | UART1 RX | I2C0 SCL | PWM4 B | SIO | PIO0 | PIO1 | | USB OVCUR DET +//! 10 | SPI1 SCK | UART1 CTS | I2C1 SDA | PWM5 A | SIO | PIO0 | PIO1 | | USB VBUS DET +//! 11 | SPI1 TX | UART1 RTS | I2C1 SCL | PWM5 B | SIO | PIO0 | PIO1 | | USB VBUS EN +//! 12 | SPI1 RX | UART0 TX | I2C0 SDA | PWM6 A | SIO | PIO0 | PIO1 | | USB OVCUR DET +//! 13 | SPI1 CSn | UART0 RX | I2C0 SCL | PWM6 B | SIO | PIO0 | PIO1 | | USB VBUS DET +//! 14 | SPI1 SCK | UART0 CTS | I2C1 SDA | PWM7 A | SIO | PIO0 | PIO1 | | USB VBUS EN +//! 15 | SPI1 TX | UART0 RTS | I2C1 SCL | PWM7 B | SIO | PIO0 | PIO1 | | USB OVCUR DET +//! 16 | SPI0 RX | UART0 TX | I2C0 SDA | PWM0 A | SIO | PIO0 | PIO1 | | USB VBUS DET +//! 17 | SPI0 CSn | UART0 RX | I2C0 SCL | PWM0 B | SIO | PIO0 | PIO1 | | USB VBUS EN +//! 18 | SPI0 SCK | UART0 CTS | I2C1 SDA | PWM1 A | SIO | PIO0 | PIO1 | | USB OVCUR DET +//! 19 | SPI0 TX | UART0 RTS | I2C1 SCL | PWM1 B | SIO | PIO0 | PIO1 | | USB VBUS DET +//! 20 | SPI0 RX | UART1 TX | I2C0 SDA | PWM2 A | SIO | PIO0 | PIO1 | CLOCK GPIN0 | USB VBUS EN +//! 21 | SPI0 CSn | UART1 RX | I2C0 SCL | PWM2 B | SIO | PIO0 | PIO1 | CLOCK GPOUT0 | USB OVCUR DET +//! 22 | SPI0 SCK | UART1 CTS | I2C1 SDA | PWM3 A | SIO | PIO0 | PIO1 | CLOCK GPIN1 | USB VBUS DET +//! 23 | SPI0 TX | UART1 RTS | I2C1 SCL | PWM3 B | SIO | PIO0 | PIO1 | CLOCK GPOUT1 | USB VBUS EN +//! 24 | SPI1 RX | UART1 TX | I2C0 SDA | PWM4 A | SIO | PIO0 | PIO1 | CLOCK GPOUT2 | USB OVCUR DET +//! 25 | SPI1 CSn | UART1 RX | I2C0 SCL | PWM4 B | SIO | PIO0 | PIO1 | CLOCK GPOUT3 | USB VBUS DET +//! 26 | SPI1 SCK | UART1 CTS | I2C1 SDA | PWM5 A | SIO | PIO0 | PIO1 | | USB VBUS EN +//! 27 | SPI1 TX | UART1 RTS | I2C1 SCL | PWM5 B | SIO | PIO0 | PIO1 | | USB OVCUR DET +//! 28 | SPI1 RX | UART0 TX | I2C0 SDA | PWM6 A | SIO | PIO0 | PIO1 | | USB VBUS DET +//! 29 | SPI1 CSn | UART0 RX | I2C0 SCL | PWM6 B | SIO | PIO0 | PIO1 | | USB VBUS EN + +const std = @import("std"); +const microzig = @import("microzig"); +const regs = microzig.chip.registers; +const assert = std.debug.assert; + +pub const Function = enum(u5) { + xip, + spi, + uart, + i2c, + pwm, + sio, + pio0, + pio1, + gpck, + usb, + @"null" = 0x1f, +}; + +pub const Direction = enum(u1) { + in, + out, +}; + +pub const IrqLevel = enum(u2) { + low, + high, + fall, + rise, +}; + +pub const IrqCallback = fn (gpio: u32, events: u32) callconv(.C) void; + +pub const Override = enum { + normal, + invert, + low, + high, +}; + +pub const SlewRate = enum { + slow, + fast, +}; + +pub const DriveStrength = enum { + ma_2, + ma_4, + ma_8, + ma_12, +}; + +pub const Enabled = enum { + disabled, + enabled, +}; + +//const gpio_num = gpio_num: { +// // calculate max gpios using comptime parsing +//}; + +/// Initialize a GPIO, set func to SIO +pub inline fn init(comptime gpio: u32) void { + regs.SIO.GPIO_OE_CLR.raw = 1 << gpio; + regs.SIO.GPIO_OUT_CLR.raw = 1 << gpio; + setFunction(gpio, .sio); +} + +/// Reset GPIO back to null function (disables it) +pub inline fn deinit(comptime gpio: u32) void { + setFunction(gpio, .@"null"); +} + +pub inline fn setDir(comptime gpio: u32, direction: Direction) void { + switch (direction) { + .in => regs.SIO.GPIO_OE_CLR.raw |= (1 << gpio), + .out => regs.SIO.GPIO_OE_SET.raw &= (1 << gpio), + } +} + +/// Drive a single GPIO high/low +pub inline fn put(comptime gpio: u32, value: u1) void { + switch (value) { + 0 => regs.SIO.GPIO_OUT.raw &= ~@as(u32, 1 << gpio), + 1 => regs.SIO.GPIO_OUT.raw |= (1 << gpio), + } +} + +pub inline fn setFunction(comptime gpio: u32, function: Function) void { + const reg_name = comptime std.fmt.comptimePrint("GPIO{}_CTRL", .{gpio}); + @field(regs.IO_BANK0, reg_name).write(.{ + .FUNCSEL = @enumToInt(function), + .OUTOVER = 0, + .INOVER = 0, + .IRQOVER = 0, + .OEOVER = 0, + }); +} + +// setting both uplls enables a "bus keep" function, a weak pull to whatever +// is current high/low state of GPIO +//pub fn setPulls(gpio: u32, up: bool, down: bool) void {} +// +//pub fn pullUp(gpio: u32) void {} +// +//pub fn pullDown(gpio: u32) void {} +//pub fn disablePulls(gpio: u32) void {} +//pub fn setIrqOver(gpio: u32, value: u32) void {} +//pub fn setOutOver(gpio: u32, value: u32) void {} +//pub fn setInOver(gpio: u32, value: u32) void {} +//pub fn setOeOver(gpio: u32, value: u32) void {} +//pub fn setInputEnabled(gpio: u32, enabled: Enabled) void {} +//pub fn setinputHysteresisEnabled(gpio: u32, enabled: Enabled) void {} +//pub fn setSlewRate(gpio: u32, slew_rate: SlewRate) void {} +//pub fn setDriveStrength(gpio: u32, drive: DriveStrength) void {} +//pub fn setIrqEnabled(gpio: u32, events: IrqEvents) void {} +//pub fn acknowledgeIrq(gpio: u32, events: IrqEvents) void {} + diff --git a/src/hal/pll.zig b/src/hal/pll.zig new file mode 100644 index 000000000..16fb3086d --- /dev/null +++ b/src/hal/pll.zig @@ -0,0 +1,97 @@ +const std = @import("std"); +const microzig = @import("microzig"); +const assert = std.debug.assert; + +const regs = microzig.chip.registers; +const xosc_freq = microzig.board.xosc_freq; + +pub const Configuration = struct { + refdiv: u6, + vco_freq: u32, + postdiv1: u3, + postdiv2: u3, +}; + +pub const sys = @intToPtr(*volatile PLL, regs.PLL_SYS.base_address); +pub const usb = @intToPtr(*volatile PLL, regs.PLL_USB.base_address); + +pub const PLL = packed struct { + cs: @TypeOf(regs.PLL_SYS.CS), + pwr: @TypeOf(regs.PLL_SYS.PWR), + fbdiv_int: @TypeOf(regs.PLL_SYS.FBDIV_INT), + prim: @TypeOf(regs.PLL_SYS.PRIM), + + comptime { + // bunch of comptime checks in here to validate the layout + assert(0 == @bitOffsetOf(PLL, "cs")); + assert(32 == @bitOffsetOf(PLL, "pwr")); + assert(64 == @bitOffsetOf(PLL, "fbdiv_int")); + assert(96 == @bitOffsetOf(PLL, "prim")); + } + + pub fn isLocked(pll: *const volatile PLL) bool { + return pll.cs.read().LOCK == 1; + } + + pub fn reset(pll: *const volatile PLL) void { + switch (pll) { + sys => { + regs.RESETS.RESET.modify(.{ .pll_sys = 1 }); + regs.RESETS.RESET.modify(.{ .pll_sys = 0 }); + while (regs.RESETS.RESET_DONE.read().pll_sys == 1) {} + }, + usb => { + regs.RESETS.RESET.modify(.{ .pll_usb = 1 }); + regs.RESETS.RESET.modify(.{ .pll_usb = 0 }); + while (regs.RESETS.RESET_DONE.read().pll_usb == 1) {} + }, + else => unreachable, + } + } + + pub fn apply(pll: *volatile PLL, comptime config: Configuration) void { + const ref_freq = xosc_freq / @as(u32, config.refdiv); + const fbdiv = @intCast(u12, config.vco_freq / ref_freq); + + assert(fbdiv >= 16 and fbdiv <= 320); + assert(config.postdiv1 >= 1 and config.postdiv1 <= 7); + assert(config.postdiv2 >= 1 and config.postdiv2 <= 7); + assert(config.postdiv2 <= config.postdiv1); + assert(ref_freq <= config.vco_freq / 16); + + // 1. program reference clock divider + // 2. program feedback divider + // 3. turn on the main power and vco + // 4. wait for vco to lock + // 5. set up post dividers and turn them on + + // do not bother a PLL which is already configured + if (pll.isLocked() and + config.refdiv == pll.cs.read().REFDIV and + fbdiv == pll.fbdiv_int.read() and + config.postdiv1 == pll.prim.read().POSTDIV1 and + config.postdiv2 == pll.prim.read().POSTDIV2) + { + return; + } + + pll.reset(); + + // load vco related dividers + pll.cs.modify(.{ .REFDIV = config.refdiv }); + pll.fbdiv_int.modify(fbdiv); + + // turn on PLL + pll.pwr.modify(.{ .PD = 0, .VCOPD = 0 }); + + // wait for PLL to lock + while (!pll.isLocked()) {} + + pll.prim.modify(.{ + .POSTDIV1 = config.postdiv1, + .POSTDIV2 = config.postdiv2, + }); + + pll.pwr.modify(.{ .POSTDIVPD = 0 }); + } +}; diff --git a/src/raspberry_pi_pico.zig b/src/raspberry_pi_pico.zig new file mode 100644 index 000000000..ca1a9014d --- /dev/null +++ b/src/raspberry_pi_pico.zig @@ -0,0 +1,38 @@ +pub const xosc_freq = 12_000_000; + +// TODO: improve interface so that user can use a custom implementation and +// automatically checksum it. +pub export const _BOOT2: [256]u8 linksection(".boot2") = [_]u8{ + 0x00, 0xb5, 0x32, 0x4b, 0x21, 0x20, 0x58, 0x60, + 0x98, 0x68, 0x02, 0x21, 0x88, 0x43, 0x98, 0x60, + 0xd8, 0x60, 0x18, 0x61, 0x58, 0x61, 0x2e, 0x4b, + 0x00, 0x21, 0x99, 0x60, 0x02, 0x21, 0x59, 0x61, + 0x01, 0x21, 0xf0, 0x22, 0x99, 0x50, 0x2b, 0x49, + 0x19, 0x60, 0x01, 0x21, 0x99, 0x60, 0x35, 0x20, + 0x00, 0xf0, 0x44, 0xf8, 0x02, 0x22, 0x90, 0x42, + 0x14, 0xd0, 0x06, 0x21, 0x19, 0x66, 0x00, 0xf0, + 0x34, 0xf8, 0x19, 0x6e, 0x01, 0x21, 0x19, 0x66, + 0x00, 0x20, 0x18, 0x66, 0x1a, 0x66, 0x00, 0xf0, + 0x2c, 0xf8, 0x19, 0x6e, 0x19, 0x6e, 0x19, 0x6e, + 0x05, 0x20, 0x00, 0xf0, 0x2f, 0xf8, 0x01, 0x21, + 0x08, 0x42, 0xf9, 0xd1, 0x00, 0x21, 0x99, 0x60, + 0x1b, 0x49, 0x19, 0x60, 0x00, 0x21, 0x59, 0x60, + 0x1a, 0x49, 0x1b, 0x48, 0x01, 0x60, 0x01, 0x21, + 0x99, 0x60, 0xeb, 0x21, 0x19, 0x66, 0xa0, 0x21, + 0x19, 0x66, 0x00, 0xf0, 0x12, 0xf8, 0x00, 0x21, + 0x99, 0x60, 0x16, 0x49, 0x14, 0x48, 0x01, 0x60, + 0x01, 0x21, 0x99, 0x60, 0x01, 0xbc, 0x00, 0x28, + 0x00, 0xd0, 0x00, 0x47, 0x12, 0x48, 0x13, 0x49, + 0x08, 0x60, 0x03, 0xc8, 0x80, 0xf3, 0x08, 0x88, + 0x08, 0x47, 0x03, 0xb5, 0x99, 0x6a, 0x04, 0x20, + 0x01, 0x42, 0xfb, 0xd0, 0x01, 0x20, 0x01, 0x42, + 0xf8, 0xd1, 0x03, 0xbd, 0x02, 0xb5, 0x18, 0x66, + 0x18, 0x66, 0xff, 0xf7, 0xf2, 0xff, 0x18, 0x6e, + 0x18, 0x6e, 0x02, 0xbd, 0x00, 0x00, 0x02, 0x40, + 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x03, 0x5f, 0x00, 0x21, 0x22, 0x00, 0x00, + 0xf4, 0x00, 0x00, 0x18, 0x22, 0x20, 0x00, 0xa0, + 0x00, 0x01, 0x00, 0x10, 0x08, 0xed, 0x00, 0xe0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x74, 0xb2, 0x4e, 0x7a, +}; diff --git a/src/rp2040.zig b/src/rp2040.zig new file mode 100644 index 000000000..e96b90134 --- /dev/null +++ b/src/rp2040.zig @@ -0,0 +1,29422 @@ +// this file was generated by regz: https://github.com/ZigEmbeddedGroup/regz +// commit: 09c331e02d8037bf2e5133eaa40b1d762637b441 +// +// vendor: Raspberry Pi +// device: RP2040 +// cpu: CM0PLUS + +pub const VectorTable = extern struct { + initial_stack_pointer: u32, + Reset: InterruptVector = unhandled, + NMI: InterruptVector = unhandled, + HardFault: InterruptVector = unhandled, + reserved0: [7]u32 = undefined, + SVCall: InterruptVector = unhandled, + reserved1: [2]u32 = undefined, + PendSV: InterruptVector = unhandled, + SysTick: InterruptVector = unhandled, + TIMER_IRQ_0: InterruptVector = unhandled, + TIMER_IRQ_1: InterruptVector = unhandled, + TIMER_IRQ_2: InterruptVector = unhandled, + TIMER_IRQ_3: InterruptVector = unhandled, + PWM_IRQ_WRAP: InterruptVector = unhandled, + USBCTRL_IRQ: InterruptVector = unhandled, + XIP_IRQ: InterruptVector = unhandled, + PIO0_IRQ_0: InterruptVector = unhandled, + PIO0_IRQ_1: InterruptVector = unhandled, + PIO1_IRQ_0: InterruptVector = unhandled, + PIO1_IRQ_1: InterruptVector = unhandled, + DMA_IRQ_0: InterruptVector = unhandled, + DMA_IRQ_1: InterruptVector = unhandled, + IO_IRQ_BANK0: InterruptVector = unhandled, + IO_IRQ_QSPI: InterruptVector = unhandled, + SIO_IRQ_PROC0: InterruptVector = unhandled, + SIO_IRQ_PROC1: InterruptVector = unhandled, + CLOCKS_IRQ: InterruptVector = unhandled, + SPI0_IRQ: InterruptVector = unhandled, + SPI1_IRQ: InterruptVector = unhandled, + UART0_IRQ: InterruptVector = unhandled, + UART1_IRQ: InterruptVector = unhandled, + ADC_IRQ_FIFO: InterruptVector = unhandled, + I2C0_IRQ: InterruptVector = unhandled, + I2C1_IRQ: InterruptVector = unhandled, + RTC_IRQ: InterruptVector = unhandled, +}; + +pub const registers = struct { + + /// System Control Space + pub const SCS = struct { + pub const base_address = 0xe000e000; + + /// System Tick Timer + pub const SysTick = struct { + + /// address: 0xe000e010 + /// SysTick Control and Status Register + pub const CTRL = @intToPtr(*volatile Mmio(32, packed struct { + ENABLE: u1, + TICKINT: u1, + CLKSOURCE: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + COUNTFLAG: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + }), base_address + 0x10); + + /// address: 0xe000e014 + /// SysTick Reload Value Register + pub const LOAD = @intToPtr(*volatile Mmio(32, packed struct { + RELOAD: u24, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x14); + + /// address: 0xe000e018 + /// SysTick Current Value Register + pub const VAL = @intToPtr(*volatile Mmio(32, packed struct { + CURRENT: u24, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x18); + + /// address: 0xe000e01c + /// SysTick Calibration Register + pub const CALIB = @intToPtr(*volatile Mmio(32, packed struct { + TENMS: u24, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + SKEW: u1, + NOREF: u1, + }), base_address + 0x1c); + }; + + /// Nested Vectored Interrupt Controller + pub const NVIC = struct { + + /// address: 0xe000e100 + /// Interrupt Set Enable Register + pub const ISER = @intToPtr(*volatile u32, base_address + 0x100); + + /// address: 0xe000e180 + /// Interrupt Clear Enable Register + pub const ICER = @intToPtr(*volatile u32, base_address + 0x180); + + /// address: 0xe000e200 + /// Interrupt Set Pending Register + pub const ISPR = @intToPtr(*volatile u32, base_address + 0x200); + + /// address: 0xe000e280 + /// Interrupt Clear Pending Register + pub const ICPR = @intToPtr(*volatile u32, base_address + 0x280); + + /// address: 0xe000e400 + /// Interrupt Priority Register + pub const IP = @intToPtr(*volatile u32, base_address + 0x400); + }; + + /// System Control Block + pub const SCB = struct { + + /// address: 0xe000ed00 + pub const CPUID = @intToPtr(*volatile Mmio(32, packed struct { + REVISION: u4, + PARTNO: u12, + ARCHITECTURE: u4, + VARIANT: u4, + IMPLEMENTER: u8, + }), base_address + 0xd00); + + /// address: 0xe000ed04 + /// Interrupt Control and State Register + pub const ICSR = @intToPtr(*volatile Mmio(32, packed struct { + VECTACTIVE: u9, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + VECTPENDING: u9, + reserved3: u1 = 0, + ISRPENDING: u1, + ISRPREEMPT: u1, + reserved4: u1 = 0, + PENDSTCLR: u1, + PENDSTSET: u1, + PENDSVCLR: u1, + PENDSVSET: u1, + reserved5: u1 = 0, + reserved6: u1 = 0, + NMIPENDSET: u1, + }), base_address + 0xd04); + + /// address: 0xe000ed0c + /// Application Interrupt and Reset Control Register + pub const AIRCR = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + VECTCLRACTIVE: u1, + SYSRESETREQ: u1, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + ENDIANESS: u1, + VECTKEY: u16, + }), base_address + 0xd0c); + + /// address: 0xe000ed10 + /// System Control Register + pub const SCR = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + SLEEPONEXIT: u1, + SLEEPDEEP: u1, + reserved1: u1 = 0, + SEVONPEND: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + }), base_address + 0xd10); + + /// address: 0xe000ed14 + /// Configuration Control Register + pub const CCR = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + UNALIGN_TRP: u1, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + STKALIGN: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + }), base_address + 0xd14); + + /// address: 0xe000ed1c + /// System Handlers Priority Registers. [0] is RESERVED + pub const SHP = @intToPtr(*volatile u32, base_address + 0xd1c); + + /// address: 0xe000ed24 + /// System Handler Control and State Register + pub const SHCSR = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + SVCALLPENDED: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + }), base_address + 0xd24); + + /// address: 0xe000ed08 + /// Vector Table Offset Register + pub const VTOR = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + TBLOFF: u24, + }), base_address + 0xd08); + }; + + /// Memory Protection Unit + pub const MPU = struct { + + /// address: 0xe000ed90 + /// MPU Type Register + pub const TYPE = @intToPtr(*volatile Mmio(32, packed struct { + SEPARATE: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + DREGION: u8, + IREGION: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0xd90); + + /// address: 0xe000ed94 + /// MPU Control Register + pub const CTRL = @intToPtr(*volatile Mmio(32, packed struct { + ENABLE: u1, + HFNMIENA: u1, + PRIVDEFENA: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + }), base_address + 0xd94); + + /// address: 0xe000ed98 + /// MPU Region RNRber Register + pub const RNR = @intToPtr(*volatile Mmio(32, packed struct { + REGION: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0xd98); + + /// address: 0xe000ed9c + /// MPU Region Base Address Register + pub const RBAR = @intToPtr(*volatile Mmio(32, packed struct { + REGION: u4, + VALID: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + ADDR: u24, + }), base_address + 0xd9c); + + /// address: 0xe000eda0 + /// MPU Region Attribute and Size Register + pub const RASR = @intToPtr(*volatile Mmio(32, packed struct { + ENABLE: u1, + SIZE: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + SRD: u8, + B: u1, + C: u1, + S: u1, + TEX: u3, + reserved2: u1 = 0, + reserved3: u1 = 0, + AP: u3, + reserved4: u1 = 0, + XN: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + }), base_address + 0xda0); + }; + }; + + /// QSPI flash execute-in-place block + pub const XIP_CTRL = struct { + pub const base_address = 0x14000000; + pub const version = "1"; + + /// address: 0x14000000 + /// Cache control + pub const CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// When 1, enable the cache. When the cache is disabled, all XIP accesses\n + /// will go straight to the flash, without querying the cache. When enabled,\n + /// cacheable XIP accesses will query the cache, and the flash will\n + /// not be accessed if the tag matches and the valid bit is set.\n\n + /// If the cache is enabled, cache-as-SRAM accesses have no effect on the\n + /// cache data RAM, and will produce a bus error response. + EN: u1, + /// When 1, writes to any alias other than 0x0 (caching, allocating)\n + /// will produce a bus fault. When 0, these writes are silently ignored.\n + /// In either case, writes to the 0x0 alias will deallocate on tag match,\n + /// as usual. + ERR_BADWRITE: u1, + reserved0: u1 = 0, + /// When 1, the cache memories are powered down. They retain state,\n + /// but can not be accessed. This reduces static power dissipation.\n + /// Writing 1 to this bit forces CTRL_EN to 0, i.e. the cache cannot\n + /// be enabled when powered down.\n + /// Cache-as-SRAM accesses will produce a bus error response when\n + /// the cache is powered down. + POWER_DOWN: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + }), base_address + 0x0); + + /// address: 0x14000004 + /// Cache Flush control + pub const FLUSH = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x4); + + /// address: 0x14000008 + /// Cache Status + pub const STAT = @intToPtr(*volatile Mmio(32, packed struct { + /// Reads as 0 while a cache flush is in progress, and 1 otherwise.\n + /// The cache is flushed whenever the XIP block is reset, and also\n + /// when requested via the FLUSH register. + FLUSH_READY: u1, + /// When 1, indicates the XIP streaming FIFO is completely empty. + FIFO_EMPTY: u1, + /// When 1, indicates the XIP streaming FIFO is completely full.\n + /// The streaming FIFO is 2 entries deep, so the full and empty\n + /// flag allow its level to be ascertained. + FIFO_FULL: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + }), base_address + 0x8); + + /// address: 0x1400000c + /// Cache Hit counter\n + /// A 32 bit saturating counter that increments upon each cache hit,\n + /// i.e. when an XIP access is serviced directly from cached data.\n + /// Write any value to clear. + pub const CTR_HIT = @intToPtr(*volatile u32, base_address + 0xc); + + /// address: 0x14000010 + /// Cache Access counter\n + /// A 32 bit saturating counter that increments upon each XIP access,\n + /// whether the cache is hit or not. This includes noncacheable accesses.\n + /// Write any value to clear. + pub const CTR_ACC = @intToPtr(*volatile u32, base_address + 0x10); + + /// address: 0x14000014 + /// FIFO stream address + pub const STREAM_ADDR = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x14); + + /// address: 0x14000018 + /// FIFO stream control + pub const STREAM_CTR = @intToPtr(*volatile MmioInt(32, u22), base_address + 0x18); + + /// address: 0x1400001c + /// FIFO stream data\n + /// Streamed data is buffered here, for retrieval by the system DMA.\n + /// This FIFO can also be accessed via the XIP_AUX slave, to avoid exposing\n + /// the DMA to bus stalls caused by other XIP traffic. + pub const STREAM_FIFO = @intToPtr(*volatile u32, base_address + 0x1c); + }; + + /// DW_apb_ssi has the following features:\n + /// * APB interface – Allows for easy integration into a DesignWare Synthesizable + /// Components for AMBA 2 implementation.\n + /// * APB3 and APB4 protocol support.\n + /// * Scalable APB data bus width – Supports APB data bus widths of 8, 16, and 32 + /// bits.\n + /// * Serial-master or serial-slave operation – Enables serial communication with + /// serial-master or serial-slave peripheral devices.\n + /// * Programmable Dual/Quad/Octal SPI support in Master Mode.\n + /// * Dual Data Rate (DDR) and Read Data Strobe (RDS) Support - Enables the + /// DW_apb_ssi master to perform operations with the device in DDR and RDS modes + /// when working in Dual/Quad/Octal mode of operation.\n + /// * Data Mask Support - Enables the DW_apb_ssi to selectively update the bytes in + /// the device. This feature is applicable only in enhanced SPI modes.\n + /// * eXecute-In-Place (XIP) support - Enables the DW_apb_ssi master to behave as a + /// memory mapped I/O and fetches the data from the device based on the APB read + /// request. This feature is applicable only in enhanced SPI modes.\n + /// * DMA Controller Interface – Enables the DW_apb_ssi to interface to a DMA + /// controller over the bus using a handshaking interface for transfer requests.\n + /// * Independent masking of interrupts – Master collision, transmit FIFO + /// overflow, transmit FIFO empty, receive FIFO full, receive FIFO underflow, and + /// receive FIFO overflow interrupts can all be masked independently.\n + /// * Multi-master contention detection – Informs the processor of multiple + /// serial-master accesses on the serial bus.\n + /// * Bypass of meta-stability flip-flops for synchronous clocks – When the APB + /// clock (pclk) and the DW_apb_ssi serial clock (ssi_clk) are synchronous, + /// meta-stable flip-flops are not used when transferring control signals across + /// these clock domains.\n + /// * Programmable delay on the sample time of the received serial data bit (rxd); + /// enables programmable control of routing delays resulting in higher serial + /// data-bit rates.\n + /// * Programmable features:\n + /// - Serial interface operation – Choice of Motorola SPI, Texas Instruments + /// Synchronous Serial Protocol or National Semiconductor Microwire.\n + /// - Clock bit-rate – Dynamic control of the serial bit rate of the data + /// transfer; used in only serial-master mode of operation.\n + /// - Data Item size (4 to 32 bits) – Item size of each data transfer under the + /// control of the programmer.\n + /// * Configured features:\n + /// - FIFO depth – 16 words deep. The FIFO width is fixed at 32 bits.\n + /// - 1 slave select output.\n + /// - Hardware slave-select – Dedicated hardware slave-select line.\n + /// - Combined interrupt line - one combined interrupt line from the DW_apb_ssi to + /// the interrupt controller.\n + /// - Interrupt polarity – active high interrupt lines.\n + /// - Serial clock polarity – low serial-clock polarity directly after reset.\n + /// - Serial clock phase – capture on first edge of serial-clock directly after + /// reset. + pub const XIP_SSI = struct { + pub const base_address = 0x18000000; + pub const version = "1"; + + /// address: 0x18000000 + /// Control register 0 + pub const CTRLR0 = @intToPtr(*volatile Mmio(32, packed struct { + /// Data frame size + DFS: u4, + /// Frame format + FRF: u2, + /// Serial clock phase + SCPH: u1, + /// Serial clock polarity + SCPOL: u1, + /// Transfer mode + TMOD: u2, + /// Slave output enable + SLV_OE: u1, + /// Shift register loop (test mode) + SRL: u1, + /// Control frame size\n + /// Value of n -> n+1 clocks per frame. + CFS: u4, + /// Data frame size in 32b transfer mode\n + /// Value of n -> n+1 clocks per frame. + DFS_32: u5, + /// SPI frame format + SPI_FRF: u2, + reserved0: u1 = 0, + /// Slave select toggle enable + SSTE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + }), base_address + 0x0); + + /// address: 0x18000004 + /// Master Control register 1 + pub const CTRLR1 = @intToPtr(*volatile Mmio(32, packed struct { + /// Number of data frames + NDF: u16, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + }), base_address + 0x4); + + /// address: 0x18000008 + /// SSI Enable + pub const SSIENR = @intToPtr(*volatile Mmio(32, packed struct { + /// SSI enable + SSI_EN: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x8); + + /// address: 0x1800000c + /// Microwire Control + pub const MWCR = @intToPtr(*volatile Mmio(32, packed struct { + /// Microwire transfer mode + MWMOD: u1, + /// Microwire control + MDD: u1, + /// Microwire handshaking + MHS: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + }), base_address + 0xc); + + /// address: 0x18000010 + /// Slave enable + pub const SER = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x10); + + /// address: 0x18000014 + /// Baud rate + pub const BAUDR = @intToPtr(*volatile Mmio(32, packed struct { + /// SSI clock divider + SCKDV: u16, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + }), base_address + 0x14); + + /// address: 0x18000018 + /// TX FIFO threshold level + pub const TXFTLR = @intToPtr(*volatile Mmio(32, packed struct { + /// Transmit FIFO threshold + TFT: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x18); + + /// address: 0x1800001c + /// RX FIFO threshold level + pub const RXFTLR = @intToPtr(*volatile Mmio(32, packed struct { + /// Receive FIFO threshold + RFT: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x1c); + + /// address: 0x18000020 + /// TX FIFO level + pub const TXFLR = @intToPtr(*volatile Mmio(32, packed struct { + /// Transmit FIFO level + TFTFL: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x20); + + /// address: 0x18000024 + /// RX FIFO level + pub const RXFLR = @intToPtr(*volatile Mmio(32, packed struct { + /// Receive FIFO level + RXTFL: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x24); + + /// address: 0x18000028 + /// Status register + pub const SR = @intToPtr(*volatile Mmio(32, packed struct { + /// SSI busy flag + BUSY: u1, + /// Transmit FIFO not full + TFNF: u1, + /// Transmit FIFO empty + TFE: u1, + /// Receive FIFO not empty + RFNE: u1, + /// Receive FIFO full + RFF: u1, + /// Transmission error + TXE: u1, + /// Data collision error + DCOL: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + }), base_address + 0x28); + + /// address: 0x1800002c + /// Interrupt mask + pub const IMR = @intToPtr(*volatile Mmio(32, packed struct { + /// Transmit FIFO empty interrupt mask + TXEIM: u1, + /// Transmit FIFO overflow interrupt mask + TXOIM: u1, + /// Receive FIFO underflow interrupt mask + RXUIM: u1, + /// Receive FIFO overflow interrupt mask + RXOIM: u1, + /// Receive FIFO full interrupt mask + RXFIM: u1, + /// Multi-master contention interrupt mask + MSTIM: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + }), base_address + 0x2c); + + /// address: 0x18000030 + /// Interrupt status + pub const ISR = @intToPtr(*volatile Mmio(32, packed struct { + /// Transmit FIFO empty interrupt status + TXEIS: u1, + /// Transmit FIFO overflow interrupt status + TXOIS: u1, + /// Receive FIFO underflow interrupt status + RXUIS: u1, + /// Receive FIFO overflow interrupt status + RXOIS: u1, + /// Receive FIFO full interrupt status + RXFIS: u1, + /// Multi-master contention interrupt status + MSTIS: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + }), base_address + 0x30); + + /// address: 0x18000034 + /// Raw interrupt status + pub const RISR = @intToPtr(*volatile Mmio(32, packed struct { + /// Transmit FIFO empty raw interrupt status + TXEIR: u1, + /// Transmit FIFO overflow raw interrupt status + TXOIR: u1, + /// Receive FIFO underflow raw interrupt status + RXUIR: u1, + /// Receive FIFO overflow raw interrupt status + RXOIR: u1, + /// Receive FIFO full raw interrupt status + RXFIR: u1, + /// Multi-master contention raw interrupt status + MSTIR: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + }), base_address + 0x34); + + /// address: 0x18000038 + /// TX FIFO overflow interrupt clear + pub const TXOICR = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x38); + + /// address: 0x1800003c + /// RX FIFO overflow interrupt clear + pub const RXOICR = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x3c); + + /// address: 0x18000040 + /// RX FIFO underflow interrupt clear + pub const RXUICR = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x40); + + /// address: 0x18000044 + /// Multi-master interrupt clear + pub const MSTICR = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x44); + + /// address: 0x18000048 + /// Interrupt clear + pub const ICR = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x48); + + /// address: 0x1800004c + /// DMA control + pub const DMACR = @intToPtr(*volatile Mmio(32, packed struct { + /// Receive DMA enable + RDMAE: u1, + /// Transmit DMA enable + TDMAE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + }), base_address + 0x4c); + + /// address: 0x18000050 + /// DMA TX data level + pub const DMATDLR = @intToPtr(*volatile Mmio(32, packed struct { + /// Transmit data watermark level + DMATDL: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x50); + + /// address: 0x18000054 + /// DMA RX data level + pub const DMARDLR = @intToPtr(*volatile Mmio(32, packed struct { + /// Receive data watermark level (DMARDLR+1) + DMARDL: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x54); + + /// address: 0x18000058 + /// Identification register + pub const IDR = @intToPtr(*volatile Mmio(32, packed struct { + /// Peripheral dentification code + IDCODE: u32, + }), base_address + 0x58); + + /// address: 0x1800005c + /// Version ID + pub const SSI_VERSION_ID = @intToPtr(*volatile Mmio(32, packed struct { + /// SNPS component version (format X.YY) + SSI_COMP_VERSION: u32, + }), base_address + 0x5c); + + /// address: 0x18000060 + /// Data Register 0 (of 36) + pub const DR0 = @intToPtr(*volatile Mmio(32, packed struct { + /// First data register of 36 + DR: u32, + }), base_address + 0x60); + + /// address: 0x180000f0 + /// RX sample delay + pub const RX_SAMPLE_DLY = @intToPtr(*volatile Mmio(32, packed struct { + /// RXD sample delay (in SCLK cycles) + RSD: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0xf0); + + /// address: 0x180000f4 + /// SPI control + pub const SPI_CTRLR0 = @intToPtr(*volatile Mmio(32, packed struct { + /// Address and instruction transfer format + TRANS_TYPE: u2, + /// Address length (0b-60b in 4b increments) + ADDR_L: u4, + reserved0: u1 = 0, + reserved1: u1 = 0, + /// Instruction length (0/4/8/16b) + INST_L: u2, + reserved2: u1 = 0, + /// Wait cycles between control frame transmit and data reception (in SCLK cycles) + WAIT_CYCLES: u5, + /// SPI DDR transfer enable + SPI_DDR_EN: u1, + /// Instruction DDR transfer enable + INST_DDR_EN: u1, + /// Read data strobe enable + SPI_RXDS_EN: u1, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// SPI Command to send in XIP mode (INST_L = 8-bit) or to append to Address (INST_L + /// = 0-bit) + XIP_CMD: u8, + }), base_address + 0xf4); + + /// address: 0x180000f8 + /// TX drive edge + pub const TXD_DRIVE_EDGE = @intToPtr(*volatile Mmio(32, packed struct { + /// TXD drive edge + TDE: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0xf8); + }; + pub const SYSINFO = struct { + pub const base_address = 0x40000000; + pub const version = "1"; + + /// address: 0x40000000 + /// JEDEC JEP-106 compliant chip identifier. + pub const CHIP_ID = @intToPtr(*volatile Mmio(32, packed struct { + MANUFACTURER: u12, + PART: u16, + REVISION: u4, + }), base_address + 0x0); + + /// address: 0x40000004 + /// Platform register. Allows software to know what environment it is running in. + pub const PLATFORM = @intToPtr(*volatile Mmio(32, packed struct { + FPGA: u1, + ASIC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + }), base_address + 0x4); + + /// address: 0x40000040 + /// Git hash of the chip source. Used to identify chip version. + pub const GITREF_RP2040 = @intToPtr(*volatile u32, base_address + 0x40); + }; + + /// Register block for various chip control signals + pub const SYSCFG = struct { + pub const base_address = 0x40004000; + pub const version = "1"; + + /// address: 0x40004000 + /// Processor core 0 NMI source mask\n + /// Set a bit high to enable NMI from that IRQ + pub const PROC0_NMI_MASK = @intToPtr(*volatile u32, base_address + 0x0); + + /// address: 0x40004004 + /// Processor core 1 NMI source mask\n + /// Set a bit high to enable NMI from that IRQ + pub const PROC1_NMI_MASK = @intToPtr(*volatile u32, base_address + 0x4); + + /// address: 0x40004008 + /// Configuration for processors + pub const PROC_CONFIG = @intToPtr(*volatile Mmio(32, packed struct { + /// Indication that proc0 has halted + PROC0_HALTED: u1, + /// Indication that proc1 has halted + PROC1_HALTED: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + reserved18: u1 = 0, + reserved19: u1 = 0, + reserved20: u1 = 0, + reserved21: u1 = 0, + /// Configure proc0 DAP instance ID.\n + /// Recommend that this is NOT changed until you require debug access in multi-chip + /// environment\n + /// WARNING: do not set to 15 as this is reserved for RescueDP + PROC0_DAP_INSTID: u4, + /// Configure proc1 DAP instance ID.\n + /// Recommend that this is NOT changed until you require debug access in multi-chip + /// environment\n + /// WARNING: do not set to 15 as this is reserved for RescueDP + PROC1_DAP_INSTID: u4, + }), base_address + 0x8); + + /// address: 0x4000400c + /// For each bit, if 1, bypass the input synchronizer between that GPIO\n + /// and the GPIO input register in the SIO. The input synchronizers should\n + /// generally be unbypassed, to avoid injecting metastabilities into processors.\n + /// If you're feeling brave, you can bypass to save two cycles of input\n + /// latency. This register applies to GPIO 0...29. + pub const PROC_IN_SYNC_BYPASS = @intToPtr(*volatile MmioInt(32, u30), base_address + 0xc); + + /// address: 0x40004010 + /// For each bit, if 1, bypass the input synchronizer between that GPIO\n + /// and the GPIO input register in the SIO. The input synchronizers should\n + /// generally be unbypassed, to avoid injecting metastabilities into processors.\n + /// If you're feeling brave, you can bypass to save two cycles of input\n + /// latency. This register applies to GPIO 30...35 (the QSPI IOs). + pub const PROC_IN_SYNC_BYPASS_HI = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x10); + + /// address: 0x40004014 + /// Directly control the SWD debug port of either processor + pub const DBGFORCE = @intToPtr(*volatile Mmio(32, packed struct { + /// Observe the value of processor 0 SWDIO output. + PROC0_SWDO: u1, + /// Directly drive processor 0 SWDIO input, if PROC0_ATTACH is set + PROC0_SWDI: u1, + /// Directly drive processor 0 SWCLK, if PROC0_ATTACH is set + PROC0_SWCLK: u1, + /// Attach processor 0 debug port to syscfg controls, and disconnect it from + /// external SWD pads. + PROC0_ATTACH: u1, + /// Observe the value of processor 1 SWDIO output. + PROC1_SWDO: u1, + /// Directly drive processor 1 SWDIO input, if PROC1_ATTACH is set + PROC1_SWDI: u1, + /// Directly drive processor 1 SWCLK, if PROC1_ATTACH is set + PROC1_SWCLK: u1, + /// Attach processor 1 debug port to syscfg controls, and disconnect it from + /// external SWD pads. + PROC1_ATTACH: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x14); + + /// address: 0x40004018 + /// Control power downs to memories. Set high to power down memories.\n + /// Use with extreme caution + pub const MEMPOWERDOWN = @intToPtr(*volatile Mmio(32, packed struct { + SRAM0: u1, + SRAM1: u1, + SRAM2: u1, + SRAM3: u1, + SRAM4: u1, + SRAM5: u1, + USB: u1, + ROM: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x18); + }; + pub const CLOCKS = struct { + pub const base_address = 0x40008000; + pub const version = "1"; + + /// address: 0x40008000 + /// Clock control, can be changed on-the-fly (except for auxsrc) + pub const CLK_GPOUT0_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + /// Selects the auxiliary clock source, will glitch when switching + AUXSRC: u4, + reserved5: u1 = 0, + /// Asynchronously kills the clock generator + KILL: u1, + /// Starts and stops the clock generator cleanly + ENABLE: u1, + /// Enables duty cycle correction for odd divisors + DC50: u1, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + /// This delays the enable signal by up to 3 cycles of the input clock\n + /// This must be set before the clock is enabled to have any effect + PHASE: u2, + reserved9: u1 = 0, + reserved10: u1 = 0, + /// An edge on this signal shifts the phase of the output by 1 cycle of the input + /// clock\n + /// This can be done at any time + NUDGE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + }), base_address + 0x0); + + /// address: 0x40008004 + /// Clock divisor, can be changed on-the-fly + pub const CLK_GPOUT0_DIV = @intToPtr(*volatile Mmio(32, packed struct { + /// Fractional component of the divisor + FRAC: u8, + /// Integer component of the divisor, 0 -> divide by 2^16 + INT: u24, + }), base_address + 0x4); + + /// address: 0x40008008 + /// Indicates which SRC is currently selected by the glitchless mux (one-hot).\n + /// This slice does not have a glitchless mux (only the AUX_SRC field is present, + /// not SRC) so this register is hardwired to 0x1. + pub const CLK_GPOUT0_SELECTED = @intToPtr(*volatile u32, base_address + 0x8); + + /// address: 0x4000800c + /// Clock control, can be changed on-the-fly (except for auxsrc) + pub const CLK_GPOUT1_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + /// Selects the auxiliary clock source, will glitch when switching + AUXSRC: u4, + reserved5: u1 = 0, + /// Asynchronously kills the clock generator + KILL: u1, + /// Starts and stops the clock generator cleanly + ENABLE: u1, + /// Enables duty cycle correction for odd divisors + DC50: u1, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + /// This delays the enable signal by up to 3 cycles of the input clock\n + /// This must be set before the clock is enabled to have any effect + PHASE: u2, + reserved9: u1 = 0, + reserved10: u1 = 0, + /// An edge on this signal shifts the phase of the output by 1 cycle of the input + /// clock\n + /// This can be done at any time + NUDGE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + }), base_address + 0xc); + + /// address: 0x40008010 + /// Clock divisor, can be changed on-the-fly + pub const CLK_GPOUT1_DIV = @intToPtr(*volatile Mmio(32, packed struct { + /// Fractional component of the divisor + FRAC: u8, + /// Integer component of the divisor, 0 -> divide by 2^16 + INT: u24, + }), base_address + 0x10); + + /// address: 0x40008014 + /// Indicates which SRC is currently selected by the glitchless mux (one-hot).\n + /// This slice does not have a glitchless mux (only the AUX_SRC field is present, + /// not SRC) so this register is hardwired to 0x1. + pub const CLK_GPOUT1_SELECTED = @intToPtr(*volatile u32, base_address + 0x14); + + /// address: 0x40008018 + /// Clock control, can be changed on-the-fly (except for auxsrc) + pub const CLK_GPOUT2_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + /// Selects the auxiliary clock source, will glitch when switching + AUXSRC: u4, + reserved5: u1 = 0, + /// Asynchronously kills the clock generator + KILL: u1, + /// Starts and stops the clock generator cleanly + ENABLE: u1, + /// Enables duty cycle correction for odd divisors + DC50: u1, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + /// This delays the enable signal by up to 3 cycles of the input clock\n + /// This must be set before the clock is enabled to have any effect + PHASE: u2, + reserved9: u1 = 0, + reserved10: u1 = 0, + /// An edge on this signal shifts the phase of the output by 1 cycle of the input + /// clock\n + /// This can be done at any time + NUDGE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + }), base_address + 0x18); + + /// address: 0x4000801c + /// Clock divisor, can be changed on-the-fly + pub const CLK_GPOUT2_DIV = @intToPtr(*volatile Mmio(32, packed struct { + /// Fractional component of the divisor + FRAC: u8, + /// Integer component of the divisor, 0 -> divide by 2^16 + INT: u24, + }), base_address + 0x1c); + + /// address: 0x40008020 + /// Indicates which SRC is currently selected by the glitchless mux (one-hot).\n + /// This slice does not have a glitchless mux (only the AUX_SRC field is present, + /// not SRC) so this register is hardwired to 0x1. + pub const CLK_GPOUT2_SELECTED = @intToPtr(*volatile u32, base_address + 0x20); + + /// address: 0x40008024 + /// Clock control, can be changed on-the-fly (except for auxsrc) + pub const CLK_GPOUT3_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + /// Selects the auxiliary clock source, will glitch when switching + AUXSRC: u4, + reserved5: u1 = 0, + /// Asynchronously kills the clock generator + KILL: u1, + /// Starts and stops the clock generator cleanly + ENABLE: u1, + /// Enables duty cycle correction for odd divisors + DC50: u1, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + /// This delays the enable signal by up to 3 cycles of the input clock\n + /// This must be set before the clock is enabled to have any effect + PHASE: u2, + reserved9: u1 = 0, + reserved10: u1 = 0, + /// An edge on this signal shifts the phase of the output by 1 cycle of the input + /// clock\n + /// This can be done at any time + NUDGE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + }), base_address + 0x24); + + /// address: 0x40008028 + /// Clock divisor, can be changed on-the-fly + pub const CLK_GPOUT3_DIV = @intToPtr(*volatile Mmio(32, packed struct { + /// Fractional component of the divisor + FRAC: u8, + /// Integer component of the divisor, 0 -> divide by 2^16 + INT: u24, + }), base_address + 0x28); + + /// address: 0x4000802c + /// Indicates which SRC is currently selected by the glitchless mux (one-hot).\n + /// This slice does not have a glitchless mux (only the AUX_SRC field is present, + /// not SRC) so this register is hardwired to 0x1. + pub const CLK_GPOUT3_SELECTED = @intToPtr(*volatile u32, base_address + 0x2c); + + /// address: 0x40008030 + /// Clock control, can be changed on-the-fly (except for auxsrc) + pub const CLK_REF_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// Selects the clock source glitchlessly, can be changed on-the-fly + SRC: u2, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + /// Selects the auxiliary clock source, will glitch when switching + AUXSRC: u2, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + }), base_address + 0x30); + + /// address: 0x40008034 + /// Clock divisor, can be changed on-the-fly + pub const CLK_REF_DIV = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// Integer component of the divisor, 0 -> divide by 2^16 + INT: u2, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + }), base_address + 0x34); + + /// address: 0x40008038 + /// Indicates which SRC is currently selected by the glitchless mux (one-hot).\n + /// The glitchless multiplexer does not switch instantaneously (to avoid glitches), + /// so software should poll this register to wait for the switch to complete. This + /// register contains one decoded bit for each of the clock sources enumerated in + /// the CTRL SRC field. At most one of these bits will be set at any time, + /// indicating that clock is currently present at the output of the glitchless mux. + /// Whilst switching is in progress, this register may briefly show all-0s. + pub const CLK_REF_SELECTED = @intToPtr(*volatile u32, base_address + 0x38); + + /// address: 0x4000803c + /// Clock control, can be changed on-the-fly (except for auxsrc) + pub const CLK_SYS_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// Selects the clock source glitchlessly, can be changed on-the-fly + SRC: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + /// Selects the auxiliary clock source, will glitch when switching + AUXSRC: u3, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x3c); + + /// address: 0x40008040 + /// Clock divisor, can be changed on-the-fly + pub const CLK_SYS_DIV = @intToPtr(*volatile Mmio(32, packed struct { + /// Fractional component of the divisor + FRAC: u8, + /// Integer component of the divisor, 0 -> divide by 2^16 + INT: u24, + }), base_address + 0x40); + + /// address: 0x40008044 + /// Indicates which SRC is currently selected by the glitchless mux (one-hot).\n + /// The glitchless multiplexer does not switch instantaneously (to avoid glitches), + /// so software should poll this register to wait for the switch to complete. This + /// register contains one decoded bit for each of the clock sources enumerated in + /// the CTRL SRC field. At most one of these bits will be set at any time, + /// indicating that clock is currently present at the output of the glitchless mux. + /// Whilst switching is in progress, this register may briefly show all-0s. + pub const CLK_SYS_SELECTED = @intToPtr(*volatile u32, base_address + 0x44); + + /// address: 0x40008048 + /// Clock control, can be changed on-the-fly (except for auxsrc) + pub const CLK_PERI_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + /// Selects the auxiliary clock source, will glitch when switching + AUXSRC: u3, + reserved5: u1 = 0, + reserved6: u1 = 0, + /// Asynchronously kills the clock generator + KILL: u1, + /// Starts and stops the clock generator cleanly + ENABLE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x48); + + /// address: 0x40008050 + /// Indicates which SRC is currently selected by the glitchless mux (one-hot).\n + /// This slice does not have a glitchless mux (only the AUX_SRC field is present, + /// not SRC) so this register is hardwired to 0x1. + pub const CLK_PERI_SELECTED = @intToPtr(*volatile u32, base_address + 0x50); + + /// address: 0x40008054 + /// Clock control, can be changed on-the-fly (except for auxsrc) + pub const CLK_USB_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + /// Selects the auxiliary clock source, will glitch when switching + AUXSRC: u3, + reserved5: u1 = 0, + reserved6: u1 = 0, + /// Asynchronously kills the clock generator + KILL: u1, + /// Starts and stops the clock generator cleanly + ENABLE: u1, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + /// This delays the enable signal by up to 3 cycles of the input clock\n + /// This must be set before the clock is enabled to have any effect + PHASE: u2, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// An edge on this signal shifts the phase of the output by 1 cycle of the input + /// clock\n + /// This can be done at any time + NUDGE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + }), base_address + 0x54); + + /// address: 0x40008058 + /// Clock divisor, can be changed on-the-fly + pub const CLK_USB_DIV = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// Integer component of the divisor, 0 -> divide by 2^16 + INT: u2, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + }), base_address + 0x58); + + /// address: 0x4000805c + /// Indicates which SRC is currently selected by the glitchless mux (one-hot).\n + /// This slice does not have a glitchless mux (only the AUX_SRC field is present, + /// not SRC) so this register is hardwired to 0x1. + pub const CLK_USB_SELECTED = @intToPtr(*volatile u32, base_address + 0x5c); + + /// address: 0x40008060 + /// Clock control, can be changed on-the-fly (except for auxsrc) + pub const CLK_ADC_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + /// Selects the auxiliary clock source, will glitch when switching + AUXSRC: u3, + reserved5: u1 = 0, + reserved6: u1 = 0, + /// Asynchronously kills the clock generator + KILL: u1, + /// Starts and stops the clock generator cleanly + ENABLE: u1, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + /// This delays the enable signal by up to 3 cycles of the input clock\n + /// This must be set before the clock is enabled to have any effect + PHASE: u2, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// An edge on this signal shifts the phase of the output by 1 cycle of the input + /// clock\n + /// This can be done at any time + NUDGE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + }), base_address + 0x60); + + /// address: 0x40008064 + /// Clock divisor, can be changed on-the-fly + pub const CLK_ADC_DIV = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// Integer component of the divisor, 0 -> divide by 2^16 + INT: u2, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + }), base_address + 0x64); + + /// address: 0x40008068 + /// Indicates which SRC is currently selected by the glitchless mux (one-hot).\n + /// This slice does not have a glitchless mux (only the AUX_SRC field is present, + /// not SRC) so this register is hardwired to 0x1. + pub const CLK_ADC_SELECTED = @intToPtr(*volatile u32, base_address + 0x68); + + /// address: 0x4000806c + /// Clock control, can be changed on-the-fly (except for auxsrc) + pub const CLK_RTC_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + /// Selects the auxiliary clock source, will glitch when switching + AUXSRC: u3, + reserved5: u1 = 0, + reserved6: u1 = 0, + /// Asynchronously kills the clock generator + KILL: u1, + /// Starts and stops the clock generator cleanly + ENABLE: u1, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + /// This delays the enable signal by up to 3 cycles of the input clock\n + /// This must be set before the clock is enabled to have any effect + PHASE: u2, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// An edge on this signal shifts the phase of the output by 1 cycle of the input + /// clock\n + /// This can be done at any time + NUDGE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + }), base_address + 0x6c); + + /// address: 0x40008070 + /// Clock divisor, can be changed on-the-fly + pub const CLK_RTC_DIV = @intToPtr(*volatile Mmio(32, packed struct { + /// Fractional component of the divisor + FRAC: u8, + /// Integer component of the divisor, 0 -> divide by 2^16 + INT: u24, + }), base_address + 0x70); + + /// address: 0x40008074 + /// Indicates which SRC is currently selected by the glitchless mux (one-hot).\n + /// This slice does not have a glitchless mux (only the AUX_SRC field is present, + /// not SRC) so this register is hardwired to 0x1. + pub const CLK_RTC_SELECTED = @intToPtr(*volatile u32, base_address + 0x74); + + /// address: 0x40008078 + pub const CLK_SYS_RESUS_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// This is expressed as a number of clk_ref cycles\n + /// and must be >= 2x clk_ref_freq/min_clk_tst_freq + TIMEOUT: u8, + /// Enable resus + ENABLE: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + /// Force a resus, for test purposes only + FRCE: u1, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + /// For clearing the resus after the fault that triggered it has been corrected + CLEAR: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + }), base_address + 0x78); + + /// address: 0x4000807c + pub const CLK_SYS_RESUS_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + /// Clock has been resuscitated, correct the error then send ctrl_clear=1 + RESUSSED: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x7c); + + /// address: 0x40008080 + /// Reference clock frequency in kHz + pub const FC0_REF_KHZ = @intToPtr(*volatile MmioInt(32, u20), base_address + 0x80); + + /// address: 0x40008084 + /// Minimum pass frequency in kHz. This is optional. Set to 0 if you are not using + /// the pass/fail flags + pub const FC0_MIN_KHZ = @intToPtr(*volatile MmioInt(32, u25), base_address + 0x84); + + /// address: 0x40008088 + /// Maximum pass frequency in kHz. This is optional. Set to 0x1ffffff if you are not + /// using the pass/fail flags + pub const FC0_MAX_KHZ = @intToPtr(*volatile MmioInt(32, u25), base_address + 0x88); + + /// address: 0x4000808c + /// Delays the start of frequency counting to allow the mux to settle\n + /// Delay is measured in multiples of the reference clock period + pub const FC0_DELAY = @intToPtr(*volatile MmioInt(32, u3), base_address + 0x8c); + + /// address: 0x40008090 + /// The test interval is 0.98us * 2**interval, but let's call it 1us * 2**interval\n + /// The default gives a test interval of 250us + pub const FC0_INTERVAL = @intToPtr(*volatile MmioInt(32, u4), base_address + 0x90); + + /// address: 0x40008094 + /// Clock sent to frequency counter, set to 0 when not required\n + /// Writing to this register initiates the frequency count + pub const FC0_SRC = @intToPtr(*volatile MmioInt(32, u8), base_address + 0x94); + + /// address: 0x40008098 + /// Frequency counter status + pub const FC0_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + /// Test passed + PASS: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + /// Test complete + DONE: u1, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + /// Test running + RUNNING: u1, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + /// Waiting for test clock to start + WAITING: u1, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + /// Test failed + FAIL: u1, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + /// Test clock slower than expected, only valid when status_done=1 + SLOW: u1, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// Test clock faster than expected, only valid when status_done=1 + FAST: u1, + reserved18: u1 = 0, + reserved19: u1 = 0, + reserved20: u1 = 0, + /// Test clock stopped during test + DIED: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + }), base_address + 0x98); + + /// address: 0x4000809c + /// Result of frequency measurement, only valid when status_done=1 + pub const FC0_RESULT = @intToPtr(*volatile Mmio(32, packed struct { + FRAC: u5, + KHZ: u25, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0x9c); + + /// address: 0x400080a0 + /// enable clock in wake mode + pub const WAKE_EN0 = @intToPtr(*volatile Mmio(32, packed struct { + clk_sys_clocks: u1, + clk_adc_adc: u1, + clk_sys_adc: u1, + clk_sys_busctrl: u1, + clk_sys_busfabric: u1, + clk_sys_dma: u1, + clk_sys_i2c0: u1, + clk_sys_i2c1: u1, + clk_sys_io: u1, + clk_sys_jtag: u1, + clk_sys_vreg_and_chip_reset: u1, + clk_sys_pads: u1, + clk_sys_pio0: u1, + clk_sys_pio1: u1, + clk_sys_pll_sys: u1, + clk_sys_pll_usb: u1, + clk_sys_psm: u1, + clk_sys_pwm: u1, + clk_sys_resets: u1, + clk_sys_rom: u1, + clk_sys_rosc: u1, + clk_rtc_rtc: u1, + clk_sys_rtc: u1, + clk_sys_sio: u1, + clk_peri_spi0: u1, + clk_sys_spi0: u1, + clk_peri_spi1: u1, + clk_sys_spi1: u1, + clk_sys_sram0: u1, + clk_sys_sram1: u1, + clk_sys_sram2: u1, + clk_sys_sram3: u1, + }), base_address + 0xa0); + + /// address: 0x400080a4 + /// enable clock in wake mode + pub const WAKE_EN1 = @intToPtr(*volatile Mmio(32, packed struct { + clk_sys_sram4: u1, + clk_sys_sram5: u1, + clk_sys_syscfg: u1, + clk_sys_sysinfo: u1, + clk_sys_tbman: u1, + clk_sys_timer: u1, + clk_peri_uart0: u1, + clk_sys_uart0: u1, + clk_peri_uart1: u1, + clk_sys_uart1: u1, + clk_sys_usbctrl: u1, + clk_usb_usbctrl: u1, + clk_sys_watchdog: u1, + clk_sys_xip: u1, + clk_sys_xosc: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + }), base_address + 0xa4); + + /// address: 0x400080a8 + /// enable clock in sleep mode + pub const SLEEP_EN0 = @intToPtr(*volatile Mmio(32, packed struct { + clk_sys_clocks: u1, + clk_adc_adc: u1, + clk_sys_adc: u1, + clk_sys_busctrl: u1, + clk_sys_busfabric: u1, + clk_sys_dma: u1, + clk_sys_i2c0: u1, + clk_sys_i2c1: u1, + clk_sys_io: u1, + clk_sys_jtag: u1, + clk_sys_vreg_and_chip_reset: u1, + clk_sys_pads: u1, + clk_sys_pio0: u1, + clk_sys_pio1: u1, + clk_sys_pll_sys: u1, + clk_sys_pll_usb: u1, + clk_sys_psm: u1, + clk_sys_pwm: u1, + clk_sys_resets: u1, + clk_sys_rom: u1, + clk_sys_rosc: u1, + clk_rtc_rtc: u1, + clk_sys_rtc: u1, + clk_sys_sio: u1, + clk_peri_spi0: u1, + clk_sys_spi0: u1, + clk_peri_spi1: u1, + clk_sys_spi1: u1, + clk_sys_sram0: u1, + clk_sys_sram1: u1, + clk_sys_sram2: u1, + clk_sys_sram3: u1, + }), base_address + 0xa8); + + /// address: 0x400080ac + /// enable clock in sleep mode + pub const SLEEP_EN1 = @intToPtr(*volatile Mmio(32, packed struct { + clk_sys_sram4: u1, + clk_sys_sram5: u1, + clk_sys_syscfg: u1, + clk_sys_sysinfo: u1, + clk_sys_tbman: u1, + clk_sys_timer: u1, + clk_peri_uart0: u1, + clk_sys_uart0: u1, + clk_peri_uart1: u1, + clk_sys_uart1: u1, + clk_sys_usbctrl: u1, + clk_usb_usbctrl: u1, + clk_sys_watchdog: u1, + clk_sys_xip: u1, + clk_sys_xosc: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + }), base_address + 0xac); + + /// address: 0x400080b0 + /// indicates the state of the clock enable + pub const ENABLED0 = @intToPtr(*volatile Mmio(32, packed struct { + clk_sys_clocks: u1, + clk_adc_adc: u1, + clk_sys_adc: u1, + clk_sys_busctrl: u1, + clk_sys_busfabric: u1, + clk_sys_dma: u1, + clk_sys_i2c0: u1, + clk_sys_i2c1: u1, + clk_sys_io: u1, + clk_sys_jtag: u1, + clk_sys_vreg_and_chip_reset: u1, + clk_sys_pads: u1, + clk_sys_pio0: u1, + clk_sys_pio1: u1, + clk_sys_pll_sys: u1, + clk_sys_pll_usb: u1, + clk_sys_psm: u1, + clk_sys_pwm: u1, + clk_sys_resets: u1, + clk_sys_rom: u1, + clk_sys_rosc: u1, + clk_rtc_rtc: u1, + clk_sys_rtc: u1, + clk_sys_sio: u1, + clk_peri_spi0: u1, + clk_sys_spi0: u1, + clk_peri_spi1: u1, + clk_sys_spi1: u1, + clk_sys_sram0: u1, + clk_sys_sram1: u1, + clk_sys_sram2: u1, + clk_sys_sram3: u1, + }), base_address + 0xb0); + + /// address: 0x400080b4 + /// indicates the state of the clock enable + pub const ENABLED1 = @intToPtr(*volatile Mmio(32, packed struct { + clk_sys_sram4: u1, + clk_sys_sram5: u1, + clk_sys_syscfg: u1, + clk_sys_sysinfo: u1, + clk_sys_tbman: u1, + clk_sys_timer: u1, + clk_peri_uart0: u1, + clk_sys_uart0: u1, + clk_peri_uart1: u1, + clk_sys_uart1: u1, + clk_sys_usbctrl: u1, + clk_usb_usbctrl: u1, + clk_sys_watchdog: u1, + clk_sys_xip: u1, + clk_sys_xosc: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + }), base_address + 0xb4); + + /// address: 0x400080b8 + /// Raw Interrupts + pub const INTR = @intToPtr(*volatile Mmio(32, packed struct { + CLK_SYS_RESUS: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0xb8); + + /// address: 0x400080bc + /// Interrupt Enable + pub const INTE = @intToPtr(*volatile Mmio(32, packed struct { + CLK_SYS_RESUS: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0xbc); + + /// address: 0x400080c0 + /// Interrupt Force + pub const INTF = @intToPtr(*volatile Mmio(32, packed struct { + CLK_SYS_RESUS: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0xc0); + + /// address: 0x400080c4 + /// Interrupt status after masking & forcing + pub const INTS = @intToPtr(*volatile Mmio(32, packed struct { + CLK_SYS_RESUS: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0xc4); + }; + pub const RESETS = struct { + pub const base_address = 0x4000c000; + pub const version = "1"; + + /// address: 0x4000c000 + /// Reset control. If a bit is set it means the peripheral is in reset. 0 means the + /// peripheral's reset is deasserted. + pub const RESET = @intToPtr(*volatile Mmio(32, packed struct { + adc: u1, + busctrl: u1, + dma: u1, + i2c0: u1, + i2c1: u1, + io_bank0: u1, + io_qspi: u1, + jtag: u1, + pads_bank0: u1, + pads_qspi: u1, + pio0: u1, + pio1: u1, + pll_sys: u1, + pll_usb: u1, + pwm: u1, + rtc: u1, + spi0: u1, + spi1: u1, + syscfg: u1, + sysinfo: u1, + tbman: u1, + timer: u1, + uart0: u1, + uart1: u1, + usbctrl: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + }), base_address + 0x0); + + /// address: 0x4000c004 + /// Watchdog select. If a bit is set then the watchdog will reset this peripheral + /// when the watchdog fires. + pub const WDSEL = @intToPtr(*volatile Mmio(32, packed struct { + adc: u1, + busctrl: u1, + dma: u1, + i2c0: u1, + i2c1: u1, + io_bank0: u1, + io_qspi: u1, + jtag: u1, + pads_bank0: u1, + pads_qspi: u1, + pio0: u1, + pio1: u1, + pll_sys: u1, + pll_usb: u1, + pwm: u1, + rtc: u1, + spi0: u1, + spi1: u1, + syscfg: u1, + sysinfo: u1, + tbman: u1, + timer: u1, + uart0: u1, + uart1: u1, + usbctrl: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + }), base_address + 0x4); + + /// address: 0x4000c008 + /// Reset done. If a bit is set then a reset done signal has been returned by the + /// peripheral. This indicates that the peripheral's registers are ready to be + /// accessed. + pub const RESET_DONE = @intToPtr(*volatile Mmio(32, packed struct { + adc: u1, + busctrl: u1, + dma: u1, + i2c0: u1, + i2c1: u1, + io_bank0: u1, + io_qspi: u1, + jtag: u1, + pads_bank0: u1, + pads_qspi: u1, + pio0: u1, + pio1: u1, + pll_sys: u1, + pll_usb: u1, + pwm: u1, + rtc: u1, + spi0: u1, + spi1: u1, + syscfg: u1, + sysinfo: u1, + tbman: u1, + timer: u1, + uart0: u1, + uart1: u1, + usbctrl: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + }), base_address + 0x8); + }; + pub const PSM = struct { + pub const base_address = 0x40010000; + pub const version = "1"; + + /// address: 0x40010000 + /// Force block out of reset (i.e. power it on) + pub const FRCE_ON = @intToPtr(*volatile Mmio(32, packed struct { + rosc: u1, + xosc: u1, + clocks: u1, + resets: u1, + busfabric: u1, + rom: u1, + sram0: u1, + sram1: u1, + sram2: u1, + sram3: u1, + sram4: u1, + sram5: u1, + xip: u1, + vreg_and_chip_reset: u1, + sio: u1, + proc0: u1, + proc1: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + }), base_address + 0x0); + + /// address: 0x40010004 + /// Force into reset (i.e. power it off) + pub const FRCE_OFF = @intToPtr(*volatile Mmio(32, packed struct { + rosc: u1, + xosc: u1, + clocks: u1, + resets: u1, + busfabric: u1, + rom: u1, + sram0: u1, + sram1: u1, + sram2: u1, + sram3: u1, + sram4: u1, + sram5: u1, + xip: u1, + vreg_and_chip_reset: u1, + sio: u1, + proc0: u1, + proc1: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + }), base_address + 0x4); + + /// address: 0x40010008 + /// Set to 1 if this peripheral should be reset when the watchdog fires. + pub const WDSEL = @intToPtr(*volatile Mmio(32, packed struct { + rosc: u1, + xosc: u1, + clocks: u1, + resets: u1, + busfabric: u1, + rom: u1, + sram0: u1, + sram1: u1, + sram2: u1, + sram3: u1, + sram4: u1, + sram5: u1, + xip: u1, + vreg_and_chip_reset: u1, + sio: u1, + proc0: u1, + proc1: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + }), base_address + 0x8); + + /// address: 0x4001000c + /// Indicates the peripheral's registers are ready to access. + pub const DONE = @intToPtr(*volatile Mmio(32, packed struct { + rosc: u1, + xosc: u1, + clocks: u1, + resets: u1, + busfabric: u1, + rom: u1, + sram0: u1, + sram1: u1, + sram2: u1, + sram3: u1, + sram4: u1, + sram5: u1, + xip: u1, + vreg_and_chip_reset: u1, + sio: u1, + proc0: u1, + proc1: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + }), base_address + 0xc); + }; + pub const IO_BANK0 = struct { + pub const base_address = 0x40014000; + pub const version = "1"; + + /// address: 0x40014000 + /// GPIO status + pub const GPIO0_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x0); + + /// address: 0x40014004 + /// GPIO control including function select and overrides. + pub const GPIO0_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0x4); + + /// address: 0x40014008 + /// GPIO status + pub const GPIO1_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x8); + + /// address: 0x4001400c + /// GPIO control including function select and overrides. + pub const GPIO1_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0xc); + + /// address: 0x40014010 + /// GPIO status + pub const GPIO2_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x10); + + /// address: 0x40014014 + /// GPIO control including function select and overrides. + pub const GPIO2_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0x14); + + /// address: 0x40014018 + /// GPIO status + pub const GPIO3_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x18); + + /// address: 0x4001401c + /// GPIO control including function select and overrides. + pub const GPIO3_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0x1c); + + /// address: 0x40014020 + /// GPIO status + pub const GPIO4_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x20); + + /// address: 0x40014024 + /// GPIO control including function select and overrides. + pub const GPIO4_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0x24); + + /// address: 0x40014028 + /// GPIO status + pub const GPIO5_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x28); + + /// address: 0x4001402c + /// GPIO control including function select and overrides. + pub const GPIO5_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0x2c); + + /// address: 0x40014030 + /// GPIO status + pub const GPIO6_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x30); + + /// address: 0x40014034 + /// GPIO control including function select and overrides. + pub const GPIO6_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0x34); + + /// address: 0x40014038 + /// GPIO status + pub const GPIO7_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x38); + + /// address: 0x4001403c + /// GPIO control including function select and overrides. + pub const GPIO7_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0x3c); + + /// address: 0x40014040 + /// GPIO status + pub const GPIO8_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x40); + + /// address: 0x40014044 + /// GPIO control including function select and overrides. + pub const GPIO8_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0x44); + + /// address: 0x40014048 + /// GPIO status + pub const GPIO9_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x48); + + /// address: 0x4001404c + /// GPIO control including function select and overrides. + pub const GPIO9_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0x4c); + + /// address: 0x40014050 + /// GPIO status + pub const GPIO10_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x50); + + /// address: 0x40014054 + /// GPIO control including function select and overrides. + pub const GPIO10_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0x54); + + /// address: 0x40014058 + /// GPIO status + pub const GPIO11_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x58); + + /// address: 0x4001405c + /// GPIO control including function select and overrides. + pub const GPIO11_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0x5c); + + /// address: 0x40014060 + /// GPIO status + pub const GPIO12_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x60); + + /// address: 0x40014064 + /// GPIO control including function select and overrides. + pub const GPIO12_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0x64); + + /// address: 0x40014068 + /// GPIO status + pub const GPIO13_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x68); + + /// address: 0x4001406c + /// GPIO control including function select and overrides. + pub const GPIO13_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0x6c); + + /// address: 0x40014070 + /// GPIO status + pub const GPIO14_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x70); + + /// address: 0x40014074 + /// GPIO control including function select and overrides. + pub const GPIO14_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0x74); + + /// address: 0x40014078 + /// GPIO status + pub const GPIO15_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x78); + + /// address: 0x4001407c + /// GPIO control including function select and overrides. + pub const GPIO15_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0x7c); + + /// address: 0x40014080 + /// GPIO status + pub const GPIO16_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x80); + + /// address: 0x40014084 + /// GPIO control including function select and overrides. + pub const GPIO16_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0x84); + + /// address: 0x40014088 + /// GPIO status + pub const GPIO17_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x88); + + /// address: 0x4001408c + /// GPIO control including function select and overrides. + pub const GPIO17_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0x8c); + + /// address: 0x40014090 + /// GPIO status + pub const GPIO18_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x90); + + /// address: 0x40014094 + /// GPIO control including function select and overrides. + pub const GPIO18_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0x94); + + /// address: 0x40014098 + /// GPIO status + pub const GPIO19_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x98); + + /// address: 0x4001409c + /// GPIO control including function select and overrides. + pub const GPIO19_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0x9c); + + /// address: 0x400140a0 + /// GPIO status + pub const GPIO20_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0xa0); + + /// address: 0x400140a4 + /// GPIO control including function select and overrides. + pub const GPIO20_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0xa4); + + /// address: 0x400140a8 + /// GPIO status + pub const GPIO21_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0xa8); + + /// address: 0x400140ac + /// GPIO control including function select and overrides. + pub const GPIO21_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0xac); + + /// address: 0x400140b0 + /// GPIO status + pub const GPIO22_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0xb0); + + /// address: 0x400140b4 + /// GPIO control including function select and overrides. + pub const GPIO22_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0xb4); + + /// address: 0x400140b8 + /// GPIO status + pub const GPIO23_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0xb8); + + /// address: 0x400140bc + /// GPIO control including function select and overrides. + pub const GPIO23_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0xbc); + + /// address: 0x400140c0 + /// GPIO status + pub const GPIO24_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0xc0); + + /// address: 0x400140c4 + /// GPIO control including function select and overrides. + pub const GPIO24_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0xc4); + + /// address: 0x400140c8 + /// GPIO status + pub const GPIO25_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0xc8); + + /// address: 0x400140cc + /// GPIO control including function select and overrides. + pub const GPIO25_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0xcc); + + /// address: 0x400140d0 + /// GPIO status + pub const GPIO26_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0xd0); + + /// address: 0x400140d4 + /// GPIO control including function select and overrides. + pub const GPIO26_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0xd4); + + /// address: 0x400140d8 + /// GPIO status + pub const GPIO27_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0xd8); + + /// address: 0x400140dc + /// GPIO control including function select and overrides. + pub const GPIO27_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0xdc); + + /// address: 0x400140e0 + /// GPIO status + pub const GPIO28_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0xe0); + + /// address: 0x400140e4 + /// GPIO control including function select and overrides. + pub const GPIO28_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0xe4); + + /// address: 0x400140e8 + /// GPIO status + pub const GPIO29_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0xe8); + + /// address: 0x400140ec + /// GPIO control including function select and overrides. + pub const GPIO29_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0xec); + + /// address: 0x400140f0 + /// Raw Interrupts + pub const INTR0 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO0_LEVEL_LOW: u1, + GPIO0_LEVEL_HIGH: u1, + GPIO0_EDGE_LOW: u1, + GPIO0_EDGE_HIGH: u1, + GPIO1_LEVEL_LOW: u1, + GPIO1_LEVEL_HIGH: u1, + GPIO1_EDGE_LOW: u1, + GPIO1_EDGE_HIGH: u1, + GPIO2_LEVEL_LOW: u1, + GPIO2_LEVEL_HIGH: u1, + GPIO2_EDGE_LOW: u1, + GPIO2_EDGE_HIGH: u1, + GPIO3_LEVEL_LOW: u1, + GPIO3_LEVEL_HIGH: u1, + GPIO3_EDGE_LOW: u1, + GPIO3_EDGE_HIGH: u1, + GPIO4_LEVEL_LOW: u1, + GPIO4_LEVEL_HIGH: u1, + GPIO4_EDGE_LOW: u1, + GPIO4_EDGE_HIGH: u1, + GPIO5_LEVEL_LOW: u1, + GPIO5_LEVEL_HIGH: u1, + GPIO5_EDGE_LOW: u1, + GPIO5_EDGE_HIGH: u1, + GPIO6_LEVEL_LOW: u1, + GPIO6_LEVEL_HIGH: u1, + GPIO6_EDGE_LOW: u1, + GPIO6_EDGE_HIGH: u1, + GPIO7_LEVEL_LOW: u1, + GPIO7_LEVEL_HIGH: u1, + GPIO7_EDGE_LOW: u1, + GPIO7_EDGE_HIGH: u1, + }), base_address + 0xf0); + + /// address: 0x400140f4 + /// Raw Interrupts + pub const INTR1 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO8_LEVEL_LOW: u1, + GPIO8_LEVEL_HIGH: u1, + GPIO8_EDGE_LOW: u1, + GPIO8_EDGE_HIGH: u1, + GPIO9_LEVEL_LOW: u1, + GPIO9_LEVEL_HIGH: u1, + GPIO9_EDGE_LOW: u1, + GPIO9_EDGE_HIGH: u1, + GPIO10_LEVEL_LOW: u1, + GPIO10_LEVEL_HIGH: u1, + GPIO10_EDGE_LOW: u1, + GPIO10_EDGE_HIGH: u1, + GPIO11_LEVEL_LOW: u1, + GPIO11_LEVEL_HIGH: u1, + GPIO11_EDGE_LOW: u1, + GPIO11_EDGE_HIGH: u1, + GPIO12_LEVEL_LOW: u1, + GPIO12_LEVEL_HIGH: u1, + GPIO12_EDGE_LOW: u1, + GPIO12_EDGE_HIGH: u1, + GPIO13_LEVEL_LOW: u1, + GPIO13_LEVEL_HIGH: u1, + GPIO13_EDGE_LOW: u1, + GPIO13_EDGE_HIGH: u1, + GPIO14_LEVEL_LOW: u1, + GPIO14_LEVEL_HIGH: u1, + GPIO14_EDGE_LOW: u1, + GPIO14_EDGE_HIGH: u1, + GPIO15_LEVEL_LOW: u1, + GPIO15_LEVEL_HIGH: u1, + GPIO15_EDGE_LOW: u1, + GPIO15_EDGE_HIGH: u1, + }), base_address + 0xf4); + + /// address: 0x400140f8 + /// Raw Interrupts + pub const INTR2 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO16_LEVEL_LOW: u1, + GPIO16_LEVEL_HIGH: u1, + GPIO16_EDGE_LOW: u1, + GPIO16_EDGE_HIGH: u1, + GPIO17_LEVEL_LOW: u1, + GPIO17_LEVEL_HIGH: u1, + GPIO17_EDGE_LOW: u1, + GPIO17_EDGE_HIGH: u1, + GPIO18_LEVEL_LOW: u1, + GPIO18_LEVEL_HIGH: u1, + GPIO18_EDGE_LOW: u1, + GPIO18_EDGE_HIGH: u1, + GPIO19_LEVEL_LOW: u1, + GPIO19_LEVEL_HIGH: u1, + GPIO19_EDGE_LOW: u1, + GPIO19_EDGE_HIGH: u1, + GPIO20_LEVEL_LOW: u1, + GPIO20_LEVEL_HIGH: u1, + GPIO20_EDGE_LOW: u1, + GPIO20_EDGE_HIGH: u1, + GPIO21_LEVEL_LOW: u1, + GPIO21_LEVEL_HIGH: u1, + GPIO21_EDGE_LOW: u1, + GPIO21_EDGE_HIGH: u1, + GPIO22_LEVEL_LOW: u1, + GPIO22_LEVEL_HIGH: u1, + GPIO22_EDGE_LOW: u1, + GPIO22_EDGE_HIGH: u1, + GPIO23_LEVEL_LOW: u1, + GPIO23_LEVEL_HIGH: u1, + GPIO23_EDGE_LOW: u1, + GPIO23_EDGE_HIGH: u1, + }), base_address + 0xf8); + + /// address: 0x400140fc + /// Raw Interrupts + pub const INTR3 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO24_LEVEL_LOW: u1, + GPIO24_LEVEL_HIGH: u1, + GPIO24_EDGE_LOW: u1, + GPIO24_EDGE_HIGH: u1, + GPIO25_LEVEL_LOW: u1, + GPIO25_LEVEL_HIGH: u1, + GPIO25_EDGE_LOW: u1, + GPIO25_EDGE_HIGH: u1, + GPIO26_LEVEL_LOW: u1, + GPIO26_LEVEL_HIGH: u1, + GPIO26_EDGE_LOW: u1, + GPIO26_EDGE_HIGH: u1, + GPIO27_LEVEL_LOW: u1, + GPIO27_LEVEL_HIGH: u1, + GPIO27_EDGE_LOW: u1, + GPIO27_EDGE_HIGH: u1, + GPIO28_LEVEL_LOW: u1, + GPIO28_LEVEL_HIGH: u1, + GPIO28_EDGE_LOW: u1, + GPIO28_EDGE_HIGH: u1, + GPIO29_LEVEL_LOW: u1, + GPIO29_LEVEL_HIGH: u1, + GPIO29_EDGE_LOW: u1, + GPIO29_EDGE_HIGH: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0xfc); + + /// address: 0x40014100 + /// Interrupt Enable for proc0 + pub const PROC0_INTE0 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO0_LEVEL_LOW: u1, + GPIO0_LEVEL_HIGH: u1, + GPIO0_EDGE_LOW: u1, + GPIO0_EDGE_HIGH: u1, + GPIO1_LEVEL_LOW: u1, + GPIO1_LEVEL_HIGH: u1, + GPIO1_EDGE_LOW: u1, + GPIO1_EDGE_HIGH: u1, + GPIO2_LEVEL_LOW: u1, + GPIO2_LEVEL_HIGH: u1, + GPIO2_EDGE_LOW: u1, + GPIO2_EDGE_HIGH: u1, + GPIO3_LEVEL_LOW: u1, + GPIO3_LEVEL_HIGH: u1, + GPIO3_EDGE_LOW: u1, + GPIO3_EDGE_HIGH: u1, + GPIO4_LEVEL_LOW: u1, + GPIO4_LEVEL_HIGH: u1, + GPIO4_EDGE_LOW: u1, + GPIO4_EDGE_HIGH: u1, + GPIO5_LEVEL_LOW: u1, + GPIO5_LEVEL_HIGH: u1, + GPIO5_EDGE_LOW: u1, + GPIO5_EDGE_HIGH: u1, + GPIO6_LEVEL_LOW: u1, + GPIO6_LEVEL_HIGH: u1, + GPIO6_EDGE_LOW: u1, + GPIO6_EDGE_HIGH: u1, + GPIO7_LEVEL_LOW: u1, + GPIO7_LEVEL_HIGH: u1, + GPIO7_EDGE_LOW: u1, + GPIO7_EDGE_HIGH: u1, + }), base_address + 0x100); + + /// address: 0x40014104 + /// Interrupt Enable for proc0 + pub const PROC0_INTE1 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO8_LEVEL_LOW: u1, + GPIO8_LEVEL_HIGH: u1, + GPIO8_EDGE_LOW: u1, + GPIO8_EDGE_HIGH: u1, + GPIO9_LEVEL_LOW: u1, + GPIO9_LEVEL_HIGH: u1, + GPIO9_EDGE_LOW: u1, + GPIO9_EDGE_HIGH: u1, + GPIO10_LEVEL_LOW: u1, + GPIO10_LEVEL_HIGH: u1, + GPIO10_EDGE_LOW: u1, + GPIO10_EDGE_HIGH: u1, + GPIO11_LEVEL_LOW: u1, + GPIO11_LEVEL_HIGH: u1, + GPIO11_EDGE_LOW: u1, + GPIO11_EDGE_HIGH: u1, + GPIO12_LEVEL_LOW: u1, + GPIO12_LEVEL_HIGH: u1, + GPIO12_EDGE_LOW: u1, + GPIO12_EDGE_HIGH: u1, + GPIO13_LEVEL_LOW: u1, + GPIO13_LEVEL_HIGH: u1, + GPIO13_EDGE_LOW: u1, + GPIO13_EDGE_HIGH: u1, + GPIO14_LEVEL_LOW: u1, + GPIO14_LEVEL_HIGH: u1, + GPIO14_EDGE_LOW: u1, + GPIO14_EDGE_HIGH: u1, + GPIO15_LEVEL_LOW: u1, + GPIO15_LEVEL_HIGH: u1, + GPIO15_EDGE_LOW: u1, + GPIO15_EDGE_HIGH: u1, + }), base_address + 0x104); + + /// address: 0x40014108 + /// Interrupt Enable for proc0 + pub const PROC0_INTE2 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO16_LEVEL_LOW: u1, + GPIO16_LEVEL_HIGH: u1, + GPIO16_EDGE_LOW: u1, + GPIO16_EDGE_HIGH: u1, + GPIO17_LEVEL_LOW: u1, + GPIO17_LEVEL_HIGH: u1, + GPIO17_EDGE_LOW: u1, + GPIO17_EDGE_HIGH: u1, + GPIO18_LEVEL_LOW: u1, + GPIO18_LEVEL_HIGH: u1, + GPIO18_EDGE_LOW: u1, + GPIO18_EDGE_HIGH: u1, + GPIO19_LEVEL_LOW: u1, + GPIO19_LEVEL_HIGH: u1, + GPIO19_EDGE_LOW: u1, + GPIO19_EDGE_HIGH: u1, + GPIO20_LEVEL_LOW: u1, + GPIO20_LEVEL_HIGH: u1, + GPIO20_EDGE_LOW: u1, + GPIO20_EDGE_HIGH: u1, + GPIO21_LEVEL_LOW: u1, + GPIO21_LEVEL_HIGH: u1, + GPIO21_EDGE_LOW: u1, + GPIO21_EDGE_HIGH: u1, + GPIO22_LEVEL_LOW: u1, + GPIO22_LEVEL_HIGH: u1, + GPIO22_EDGE_LOW: u1, + GPIO22_EDGE_HIGH: u1, + GPIO23_LEVEL_LOW: u1, + GPIO23_LEVEL_HIGH: u1, + GPIO23_EDGE_LOW: u1, + GPIO23_EDGE_HIGH: u1, + }), base_address + 0x108); + + /// address: 0x4001410c + /// Interrupt Enable for proc0 + pub const PROC0_INTE3 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO24_LEVEL_LOW: u1, + GPIO24_LEVEL_HIGH: u1, + GPIO24_EDGE_LOW: u1, + GPIO24_EDGE_HIGH: u1, + GPIO25_LEVEL_LOW: u1, + GPIO25_LEVEL_HIGH: u1, + GPIO25_EDGE_LOW: u1, + GPIO25_EDGE_HIGH: u1, + GPIO26_LEVEL_LOW: u1, + GPIO26_LEVEL_HIGH: u1, + GPIO26_EDGE_LOW: u1, + GPIO26_EDGE_HIGH: u1, + GPIO27_LEVEL_LOW: u1, + GPIO27_LEVEL_HIGH: u1, + GPIO27_EDGE_LOW: u1, + GPIO27_EDGE_HIGH: u1, + GPIO28_LEVEL_LOW: u1, + GPIO28_LEVEL_HIGH: u1, + GPIO28_EDGE_LOW: u1, + GPIO28_EDGE_HIGH: u1, + GPIO29_LEVEL_LOW: u1, + GPIO29_LEVEL_HIGH: u1, + GPIO29_EDGE_LOW: u1, + GPIO29_EDGE_HIGH: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x10c); + + /// address: 0x40014110 + /// Interrupt Force for proc0 + pub const PROC0_INTF0 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO0_LEVEL_LOW: u1, + GPIO0_LEVEL_HIGH: u1, + GPIO0_EDGE_LOW: u1, + GPIO0_EDGE_HIGH: u1, + GPIO1_LEVEL_LOW: u1, + GPIO1_LEVEL_HIGH: u1, + GPIO1_EDGE_LOW: u1, + GPIO1_EDGE_HIGH: u1, + GPIO2_LEVEL_LOW: u1, + GPIO2_LEVEL_HIGH: u1, + GPIO2_EDGE_LOW: u1, + GPIO2_EDGE_HIGH: u1, + GPIO3_LEVEL_LOW: u1, + GPIO3_LEVEL_HIGH: u1, + GPIO3_EDGE_LOW: u1, + GPIO3_EDGE_HIGH: u1, + GPIO4_LEVEL_LOW: u1, + GPIO4_LEVEL_HIGH: u1, + GPIO4_EDGE_LOW: u1, + GPIO4_EDGE_HIGH: u1, + GPIO5_LEVEL_LOW: u1, + GPIO5_LEVEL_HIGH: u1, + GPIO5_EDGE_LOW: u1, + GPIO5_EDGE_HIGH: u1, + GPIO6_LEVEL_LOW: u1, + GPIO6_LEVEL_HIGH: u1, + GPIO6_EDGE_LOW: u1, + GPIO6_EDGE_HIGH: u1, + GPIO7_LEVEL_LOW: u1, + GPIO7_LEVEL_HIGH: u1, + GPIO7_EDGE_LOW: u1, + GPIO7_EDGE_HIGH: u1, + }), base_address + 0x110); + + /// address: 0x40014114 + /// Interrupt Force for proc0 + pub const PROC0_INTF1 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO8_LEVEL_LOW: u1, + GPIO8_LEVEL_HIGH: u1, + GPIO8_EDGE_LOW: u1, + GPIO8_EDGE_HIGH: u1, + GPIO9_LEVEL_LOW: u1, + GPIO9_LEVEL_HIGH: u1, + GPIO9_EDGE_LOW: u1, + GPIO9_EDGE_HIGH: u1, + GPIO10_LEVEL_LOW: u1, + GPIO10_LEVEL_HIGH: u1, + GPIO10_EDGE_LOW: u1, + GPIO10_EDGE_HIGH: u1, + GPIO11_LEVEL_LOW: u1, + GPIO11_LEVEL_HIGH: u1, + GPIO11_EDGE_LOW: u1, + GPIO11_EDGE_HIGH: u1, + GPIO12_LEVEL_LOW: u1, + GPIO12_LEVEL_HIGH: u1, + GPIO12_EDGE_LOW: u1, + GPIO12_EDGE_HIGH: u1, + GPIO13_LEVEL_LOW: u1, + GPIO13_LEVEL_HIGH: u1, + GPIO13_EDGE_LOW: u1, + GPIO13_EDGE_HIGH: u1, + GPIO14_LEVEL_LOW: u1, + GPIO14_LEVEL_HIGH: u1, + GPIO14_EDGE_LOW: u1, + GPIO14_EDGE_HIGH: u1, + GPIO15_LEVEL_LOW: u1, + GPIO15_LEVEL_HIGH: u1, + GPIO15_EDGE_LOW: u1, + GPIO15_EDGE_HIGH: u1, + }), base_address + 0x114); + + /// address: 0x40014118 + /// Interrupt Force for proc0 + pub const PROC0_INTF2 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO16_LEVEL_LOW: u1, + GPIO16_LEVEL_HIGH: u1, + GPIO16_EDGE_LOW: u1, + GPIO16_EDGE_HIGH: u1, + GPIO17_LEVEL_LOW: u1, + GPIO17_LEVEL_HIGH: u1, + GPIO17_EDGE_LOW: u1, + GPIO17_EDGE_HIGH: u1, + GPIO18_LEVEL_LOW: u1, + GPIO18_LEVEL_HIGH: u1, + GPIO18_EDGE_LOW: u1, + GPIO18_EDGE_HIGH: u1, + GPIO19_LEVEL_LOW: u1, + GPIO19_LEVEL_HIGH: u1, + GPIO19_EDGE_LOW: u1, + GPIO19_EDGE_HIGH: u1, + GPIO20_LEVEL_LOW: u1, + GPIO20_LEVEL_HIGH: u1, + GPIO20_EDGE_LOW: u1, + GPIO20_EDGE_HIGH: u1, + GPIO21_LEVEL_LOW: u1, + GPIO21_LEVEL_HIGH: u1, + GPIO21_EDGE_LOW: u1, + GPIO21_EDGE_HIGH: u1, + GPIO22_LEVEL_LOW: u1, + GPIO22_LEVEL_HIGH: u1, + GPIO22_EDGE_LOW: u1, + GPIO22_EDGE_HIGH: u1, + GPIO23_LEVEL_LOW: u1, + GPIO23_LEVEL_HIGH: u1, + GPIO23_EDGE_LOW: u1, + GPIO23_EDGE_HIGH: u1, + }), base_address + 0x118); + + /// address: 0x4001411c + /// Interrupt Force for proc0 + pub const PROC0_INTF3 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO24_LEVEL_LOW: u1, + GPIO24_LEVEL_HIGH: u1, + GPIO24_EDGE_LOW: u1, + GPIO24_EDGE_HIGH: u1, + GPIO25_LEVEL_LOW: u1, + GPIO25_LEVEL_HIGH: u1, + GPIO25_EDGE_LOW: u1, + GPIO25_EDGE_HIGH: u1, + GPIO26_LEVEL_LOW: u1, + GPIO26_LEVEL_HIGH: u1, + GPIO26_EDGE_LOW: u1, + GPIO26_EDGE_HIGH: u1, + GPIO27_LEVEL_LOW: u1, + GPIO27_LEVEL_HIGH: u1, + GPIO27_EDGE_LOW: u1, + GPIO27_EDGE_HIGH: u1, + GPIO28_LEVEL_LOW: u1, + GPIO28_LEVEL_HIGH: u1, + GPIO28_EDGE_LOW: u1, + GPIO28_EDGE_HIGH: u1, + GPIO29_LEVEL_LOW: u1, + GPIO29_LEVEL_HIGH: u1, + GPIO29_EDGE_LOW: u1, + GPIO29_EDGE_HIGH: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x11c); + + /// address: 0x40014120 + /// Interrupt status after masking & forcing for proc0 + pub const PROC0_INTS0 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO0_LEVEL_LOW: u1, + GPIO0_LEVEL_HIGH: u1, + GPIO0_EDGE_LOW: u1, + GPIO0_EDGE_HIGH: u1, + GPIO1_LEVEL_LOW: u1, + GPIO1_LEVEL_HIGH: u1, + GPIO1_EDGE_LOW: u1, + GPIO1_EDGE_HIGH: u1, + GPIO2_LEVEL_LOW: u1, + GPIO2_LEVEL_HIGH: u1, + GPIO2_EDGE_LOW: u1, + GPIO2_EDGE_HIGH: u1, + GPIO3_LEVEL_LOW: u1, + GPIO3_LEVEL_HIGH: u1, + GPIO3_EDGE_LOW: u1, + GPIO3_EDGE_HIGH: u1, + GPIO4_LEVEL_LOW: u1, + GPIO4_LEVEL_HIGH: u1, + GPIO4_EDGE_LOW: u1, + GPIO4_EDGE_HIGH: u1, + GPIO5_LEVEL_LOW: u1, + GPIO5_LEVEL_HIGH: u1, + GPIO5_EDGE_LOW: u1, + GPIO5_EDGE_HIGH: u1, + GPIO6_LEVEL_LOW: u1, + GPIO6_LEVEL_HIGH: u1, + GPIO6_EDGE_LOW: u1, + GPIO6_EDGE_HIGH: u1, + GPIO7_LEVEL_LOW: u1, + GPIO7_LEVEL_HIGH: u1, + GPIO7_EDGE_LOW: u1, + GPIO7_EDGE_HIGH: u1, + }), base_address + 0x120); + + /// address: 0x40014124 + /// Interrupt status after masking & forcing for proc0 + pub const PROC0_INTS1 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO8_LEVEL_LOW: u1, + GPIO8_LEVEL_HIGH: u1, + GPIO8_EDGE_LOW: u1, + GPIO8_EDGE_HIGH: u1, + GPIO9_LEVEL_LOW: u1, + GPIO9_LEVEL_HIGH: u1, + GPIO9_EDGE_LOW: u1, + GPIO9_EDGE_HIGH: u1, + GPIO10_LEVEL_LOW: u1, + GPIO10_LEVEL_HIGH: u1, + GPIO10_EDGE_LOW: u1, + GPIO10_EDGE_HIGH: u1, + GPIO11_LEVEL_LOW: u1, + GPIO11_LEVEL_HIGH: u1, + GPIO11_EDGE_LOW: u1, + GPIO11_EDGE_HIGH: u1, + GPIO12_LEVEL_LOW: u1, + GPIO12_LEVEL_HIGH: u1, + GPIO12_EDGE_LOW: u1, + GPIO12_EDGE_HIGH: u1, + GPIO13_LEVEL_LOW: u1, + GPIO13_LEVEL_HIGH: u1, + GPIO13_EDGE_LOW: u1, + GPIO13_EDGE_HIGH: u1, + GPIO14_LEVEL_LOW: u1, + GPIO14_LEVEL_HIGH: u1, + GPIO14_EDGE_LOW: u1, + GPIO14_EDGE_HIGH: u1, + GPIO15_LEVEL_LOW: u1, + GPIO15_LEVEL_HIGH: u1, + GPIO15_EDGE_LOW: u1, + GPIO15_EDGE_HIGH: u1, + }), base_address + 0x124); + + /// address: 0x40014128 + /// Interrupt status after masking & forcing for proc0 + pub const PROC0_INTS2 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO16_LEVEL_LOW: u1, + GPIO16_LEVEL_HIGH: u1, + GPIO16_EDGE_LOW: u1, + GPIO16_EDGE_HIGH: u1, + GPIO17_LEVEL_LOW: u1, + GPIO17_LEVEL_HIGH: u1, + GPIO17_EDGE_LOW: u1, + GPIO17_EDGE_HIGH: u1, + GPIO18_LEVEL_LOW: u1, + GPIO18_LEVEL_HIGH: u1, + GPIO18_EDGE_LOW: u1, + GPIO18_EDGE_HIGH: u1, + GPIO19_LEVEL_LOW: u1, + GPIO19_LEVEL_HIGH: u1, + GPIO19_EDGE_LOW: u1, + GPIO19_EDGE_HIGH: u1, + GPIO20_LEVEL_LOW: u1, + GPIO20_LEVEL_HIGH: u1, + GPIO20_EDGE_LOW: u1, + GPIO20_EDGE_HIGH: u1, + GPIO21_LEVEL_LOW: u1, + GPIO21_LEVEL_HIGH: u1, + GPIO21_EDGE_LOW: u1, + GPIO21_EDGE_HIGH: u1, + GPIO22_LEVEL_LOW: u1, + GPIO22_LEVEL_HIGH: u1, + GPIO22_EDGE_LOW: u1, + GPIO22_EDGE_HIGH: u1, + GPIO23_LEVEL_LOW: u1, + GPIO23_LEVEL_HIGH: u1, + GPIO23_EDGE_LOW: u1, + GPIO23_EDGE_HIGH: u1, + }), base_address + 0x128); + + /// address: 0x4001412c + /// Interrupt status after masking & forcing for proc0 + pub const PROC0_INTS3 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO24_LEVEL_LOW: u1, + GPIO24_LEVEL_HIGH: u1, + GPIO24_EDGE_LOW: u1, + GPIO24_EDGE_HIGH: u1, + GPIO25_LEVEL_LOW: u1, + GPIO25_LEVEL_HIGH: u1, + GPIO25_EDGE_LOW: u1, + GPIO25_EDGE_HIGH: u1, + GPIO26_LEVEL_LOW: u1, + GPIO26_LEVEL_HIGH: u1, + GPIO26_EDGE_LOW: u1, + GPIO26_EDGE_HIGH: u1, + GPIO27_LEVEL_LOW: u1, + GPIO27_LEVEL_HIGH: u1, + GPIO27_EDGE_LOW: u1, + GPIO27_EDGE_HIGH: u1, + GPIO28_LEVEL_LOW: u1, + GPIO28_LEVEL_HIGH: u1, + GPIO28_EDGE_LOW: u1, + GPIO28_EDGE_HIGH: u1, + GPIO29_LEVEL_LOW: u1, + GPIO29_LEVEL_HIGH: u1, + GPIO29_EDGE_LOW: u1, + GPIO29_EDGE_HIGH: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x12c); + + /// address: 0x40014130 + /// Interrupt Enable for proc1 + pub const PROC1_INTE0 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO0_LEVEL_LOW: u1, + GPIO0_LEVEL_HIGH: u1, + GPIO0_EDGE_LOW: u1, + GPIO0_EDGE_HIGH: u1, + GPIO1_LEVEL_LOW: u1, + GPIO1_LEVEL_HIGH: u1, + GPIO1_EDGE_LOW: u1, + GPIO1_EDGE_HIGH: u1, + GPIO2_LEVEL_LOW: u1, + GPIO2_LEVEL_HIGH: u1, + GPIO2_EDGE_LOW: u1, + GPIO2_EDGE_HIGH: u1, + GPIO3_LEVEL_LOW: u1, + GPIO3_LEVEL_HIGH: u1, + GPIO3_EDGE_LOW: u1, + GPIO3_EDGE_HIGH: u1, + GPIO4_LEVEL_LOW: u1, + GPIO4_LEVEL_HIGH: u1, + GPIO4_EDGE_LOW: u1, + GPIO4_EDGE_HIGH: u1, + GPIO5_LEVEL_LOW: u1, + GPIO5_LEVEL_HIGH: u1, + GPIO5_EDGE_LOW: u1, + GPIO5_EDGE_HIGH: u1, + GPIO6_LEVEL_LOW: u1, + GPIO6_LEVEL_HIGH: u1, + GPIO6_EDGE_LOW: u1, + GPIO6_EDGE_HIGH: u1, + GPIO7_LEVEL_LOW: u1, + GPIO7_LEVEL_HIGH: u1, + GPIO7_EDGE_LOW: u1, + GPIO7_EDGE_HIGH: u1, + }), base_address + 0x130); + + /// address: 0x40014134 + /// Interrupt Enable for proc1 + pub const PROC1_INTE1 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO8_LEVEL_LOW: u1, + GPIO8_LEVEL_HIGH: u1, + GPIO8_EDGE_LOW: u1, + GPIO8_EDGE_HIGH: u1, + GPIO9_LEVEL_LOW: u1, + GPIO9_LEVEL_HIGH: u1, + GPIO9_EDGE_LOW: u1, + GPIO9_EDGE_HIGH: u1, + GPIO10_LEVEL_LOW: u1, + GPIO10_LEVEL_HIGH: u1, + GPIO10_EDGE_LOW: u1, + GPIO10_EDGE_HIGH: u1, + GPIO11_LEVEL_LOW: u1, + GPIO11_LEVEL_HIGH: u1, + GPIO11_EDGE_LOW: u1, + GPIO11_EDGE_HIGH: u1, + GPIO12_LEVEL_LOW: u1, + GPIO12_LEVEL_HIGH: u1, + GPIO12_EDGE_LOW: u1, + GPIO12_EDGE_HIGH: u1, + GPIO13_LEVEL_LOW: u1, + GPIO13_LEVEL_HIGH: u1, + GPIO13_EDGE_LOW: u1, + GPIO13_EDGE_HIGH: u1, + GPIO14_LEVEL_LOW: u1, + GPIO14_LEVEL_HIGH: u1, + GPIO14_EDGE_LOW: u1, + GPIO14_EDGE_HIGH: u1, + GPIO15_LEVEL_LOW: u1, + GPIO15_LEVEL_HIGH: u1, + GPIO15_EDGE_LOW: u1, + GPIO15_EDGE_HIGH: u1, + }), base_address + 0x134); + + /// address: 0x40014138 + /// Interrupt Enable for proc1 + pub const PROC1_INTE2 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO16_LEVEL_LOW: u1, + GPIO16_LEVEL_HIGH: u1, + GPIO16_EDGE_LOW: u1, + GPIO16_EDGE_HIGH: u1, + GPIO17_LEVEL_LOW: u1, + GPIO17_LEVEL_HIGH: u1, + GPIO17_EDGE_LOW: u1, + GPIO17_EDGE_HIGH: u1, + GPIO18_LEVEL_LOW: u1, + GPIO18_LEVEL_HIGH: u1, + GPIO18_EDGE_LOW: u1, + GPIO18_EDGE_HIGH: u1, + GPIO19_LEVEL_LOW: u1, + GPIO19_LEVEL_HIGH: u1, + GPIO19_EDGE_LOW: u1, + GPIO19_EDGE_HIGH: u1, + GPIO20_LEVEL_LOW: u1, + GPIO20_LEVEL_HIGH: u1, + GPIO20_EDGE_LOW: u1, + GPIO20_EDGE_HIGH: u1, + GPIO21_LEVEL_LOW: u1, + GPIO21_LEVEL_HIGH: u1, + GPIO21_EDGE_LOW: u1, + GPIO21_EDGE_HIGH: u1, + GPIO22_LEVEL_LOW: u1, + GPIO22_LEVEL_HIGH: u1, + GPIO22_EDGE_LOW: u1, + GPIO22_EDGE_HIGH: u1, + GPIO23_LEVEL_LOW: u1, + GPIO23_LEVEL_HIGH: u1, + GPIO23_EDGE_LOW: u1, + GPIO23_EDGE_HIGH: u1, + }), base_address + 0x138); + + /// address: 0x4001413c + /// Interrupt Enable for proc1 + pub const PROC1_INTE3 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO24_LEVEL_LOW: u1, + GPIO24_LEVEL_HIGH: u1, + GPIO24_EDGE_LOW: u1, + GPIO24_EDGE_HIGH: u1, + GPIO25_LEVEL_LOW: u1, + GPIO25_LEVEL_HIGH: u1, + GPIO25_EDGE_LOW: u1, + GPIO25_EDGE_HIGH: u1, + GPIO26_LEVEL_LOW: u1, + GPIO26_LEVEL_HIGH: u1, + GPIO26_EDGE_LOW: u1, + GPIO26_EDGE_HIGH: u1, + GPIO27_LEVEL_LOW: u1, + GPIO27_LEVEL_HIGH: u1, + GPIO27_EDGE_LOW: u1, + GPIO27_EDGE_HIGH: u1, + GPIO28_LEVEL_LOW: u1, + GPIO28_LEVEL_HIGH: u1, + GPIO28_EDGE_LOW: u1, + GPIO28_EDGE_HIGH: u1, + GPIO29_LEVEL_LOW: u1, + GPIO29_LEVEL_HIGH: u1, + GPIO29_EDGE_LOW: u1, + GPIO29_EDGE_HIGH: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x13c); + + /// address: 0x40014140 + /// Interrupt Force for proc1 + pub const PROC1_INTF0 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO0_LEVEL_LOW: u1, + GPIO0_LEVEL_HIGH: u1, + GPIO0_EDGE_LOW: u1, + GPIO0_EDGE_HIGH: u1, + GPIO1_LEVEL_LOW: u1, + GPIO1_LEVEL_HIGH: u1, + GPIO1_EDGE_LOW: u1, + GPIO1_EDGE_HIGH: u1, + GPIO2_LEVEL_LOW: u1, + GPIO2_LEVEL_HIGH: u1, + GPIO2_EDGE_LOW: u1, + GPIO2_EDGE_HIGH: u1, + GPIO3_LEVEL_LOW: u1, + GPIO3_LEVEL_HIGH: u1, + GPIO3_EDGE_LOW: u1, + GPIO3_EDGE_HIGH: u1, + GPIO4_LEVEL_LOW: u1, + GPIO4_LEVEL_HIGH: u1, + GPIO4_EDGE_LOW: u1, + GPIO4_EDGE_HIGH: u1, + GPIO5_LEVEL_LOW: u1, + GPIO5_LEVEL_HIGH: u1, + GPIO5_EDGE_LOW: u1, + GPIO5_EDGE_HIGH: u1, + GPIO6_LEVEL_LOW: u1, + GPIO6_LEVEL_HIGH: u1, + GPIO6_EDGE_LOW: u1, + GPIO6_EDGE_HIGH: u1, + GPIO7_LEVEL_LOW: u1, + GPIO7_LEVEL_HIGH: u1, + GPIO7_EDGE_LOW: u1, + GPIO7_EDGE_HIGH: u1, + }), base_address + 0x140); + + /// address: 0x40014144 + /// Interrupt Force for proc1 + pub const PROC1_INTF1 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO8_LEVEL_LOW: u1, + GPIO8_LEVEL_HIGH: u1, + GPIO8_EDGE_LOW: u1, + GPIO8_EDGE_HIGH: u1, + GPIO9_LEVEL_LOW: u1, + GPIO9_LEVEL_HIGH: u1, + GPIO9_EDGE_LOW: u1, + GPIO9_EDGE_HIGH: u1, + GPIO10_LEVEL_LOW: u1, + GPIO10_LEVEL_HIGH: u1, + GPIO10_EDGE_LOW: u1, + GPIO10_EDGE_HIGH: u1, + GPIO11_LEVEL_LOW: u1, + GPIO11_LEVEL_HIGH: u1, + GPIO11_EDGE_LOW: u1, + GPIO11_EDGE_HIGH: u1, + GPIO12_LEVEL_LOW: u1, + GPIO12_LEVEL_HIGH: u1, + GPIO12_EDGE_LOW: u1, + GPIO12_EDGE_HIGH: u1, + GPIO13_LEVEL_LOW: u1, + GPIO13_LEVEL_HIGH: u1, + GPIO13_EDGE_LOW: u1, + GPIO13_EDGE_HIGH: u1, + GPIO14_LEVEL_LOW: u1, + GPIO14_LEVEL_HIGH: u1, + GPIO14_EDGE_LOW: u1, + GPIO14_EDGE_HIGH: u1, + GPIO15_LEVEL_LOW: u1, + GPIO15_LEVEL_HIGH: u1, + GPIO15_EDGE_LOW: u1, + GPIO15_EDGE_HIGH: u1, + }), base_address + 0x144); + + /// address: 0x40014148 + /// Interrupt Force for proc1 + pub const PROC1_INTF2 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO16_LEVEL_LOW: u1, + GPIO16_LEVEL_HIGH: u1, + GPIO16_EDGE_LOW: u1, + GPIO16_EDGE_HIGH: u1, + GPIO17_LEVEL_LOW: u1, + GPIO17_LEVEL_HIGH: u1, + GPIO17_EDGE_LOW: u1, + GPIO17_EDGE_HIGH: u1, + GPIO18_LEVEL_LOW: u1, + GPIO18_LEVEL_HIGH: u1, + GPIO18_EDGE_LOW: u1, + GPIO18_EDGE_HIGH: u1, + GPIO19_LEVEL_LOW: u1, + GPIO19_LEVEL_HIGH: u1, + GPIO19_EDGE_LOW: u1, + GPIO19_EDGE_HIGH: u1, + GPIO20_LEVEL_LOW: u1, + GPIO20_LEVEL_HIGH: u1, + GPIO20_EDGE_LOW: u1, + GPIO20_EDGE_HIGH: u1, + GPIO21_LEVEL_LOW: u1, + GPIO21_LEVEL_HIGH: u1, + GPIO21_EDGE_LOW: u1, + GPIO21_EDGE_HIGH: u1, + GPIO22_LEVEL_LOW: u1, + GPIO22_LEVEL_HIGH: u1, + GPIO22_EDGE_LOW: u1, + GPIO22_EDGE_HIGH: u1, + GPIO23_LEVEL_LOW: u1, + GPIO23_LEVEL_HIGH: u1, + GPIO23_EDGE_LOW: u1, + GPIO23_EDGE_HIGH: u1, + }), base_address + 0x148); + + /// address: 0x4001414c + /// Interrupt Force for proc1 + pub const PROC1_INTF3 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO24_LEVEL_LOW: u1, + GPIO24_LEVEL_HIGH: u1, + GPIO24_EDGE_LOW: u1, + GPIO24_EDGE_HIGH: u1, + GPIO25_LEVEL_LOW: u1, + GPIO25_LEVEL_HIGH: u1, + GPIO25_EDGE_LOW: u1, + GPIO25_EDGE_HIGH: u1, + GPIO26_LEVEL_LOW: u1, + GPIO26_LEVEL_HIGH: u1, + GPIO26_EDGE_LOW: u1, + GPIO26_EDGE_HIGH: u1, + GPIO27_LEVEL_LOW: u1, + GPIO27_LEVEL_HIGH: u1, + GPIO27_EDGE_LOW: u1, + GPIO27_EDGE_HIGH: u1, + GPIO28_LEVEL_LOW: u1, + GPIO28_LEVEL_HIGH: u1, + GPIO28_EDGE_LOW: u1, + GPIO28_EDGE_HIGH: u1, + GPIO29_LEVEL_LOW: u1, + GPIO29_LEVEL_HIGH: u1, + GPIO29_EDGE_LOW: u1, + GPIO29_EDGE_HIGH: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x14c); + + /// address: 0x40014150 + /// Interrupt status after masking & forcing for proc1 + pub const PROC1_INTS0 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO0_LEVEL_LOW: u1, + GPIO0_LEVEL_HIGH: u1, + GPIO0_EDGE_LOW: u1, + GPIO0_EDGE_HIGH: u1, + GPIO1_LEVEL_LOW: u1, + GPIO1_LEVEL_HIGH: u1, + GPIO1_EDGE_LOW: u1, + GPIO1_EDGE_HIGH: u1, + GPIO2_LEVEL_LOW: u1, + GPIO2_LEVEL_HIGH: u1, + GPIO2_EDGE_LOW: u1, + GPIO2_EDGE_HIGH: u1, + GPIO3_LEVEL_LOW: u1, + GPIO3_LEVEL_HIGH: u1, + GPIO3_EDGE_LOW: u1, + GPIO3_EDGE_HIGH: u1, + GPIO4_LEVEL_LOW: u1, + GPIO4_LEVEL_HIGH: u1, + GPIO4_EDGE_LOW: u1, + GPIO4_EDGE_HIGH: u1, + GPIO5_LEVEL_LOW: u1, + GPIO5_LEVEL_HIGH: u1, + GPIO5_EDGE_LOW: u1, + GPIO5_EDGE_HIGH: u1, + GPIO6_LEVEL_LOW: u1, + GPIO6_LEVEL_HIGH: u1, + GPIO6_EDGE_LOW: u1, + GPIO6_EDGE_HIGH: u1, + GPIO7_LEVEL_LOW: u1, + GPIO7_LEVEL_HIGH: u1, + GPIO7_EDGE_LOW: u1, + GPIO7_EDGE_HIGH: u1, + }), base_address + 0x150); + + /// address: 0x40014154 + /// Interrupt status after masking & forcing for proc1 + pub const PROC1_INTS1 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO8_LEVEL_LOW: u1, + GPIO8_LEVEL_HIGH: u1, + GPIO8_EDGE_LOW: u1, + GPIO8_EDGE_HIGH: u1, + GPIO9_LEVEL_LOW: u1, + GPIO9_LEVEL_HIGH: u1, + GPIO9_EDGE_LOW: u1, + GPIO9_EDGE_HIGH: u1, + GPIO10_LEVEL_LOW: u1, + GPIO10_LEVEL_HIGH: u1, + GPIO10_EDGE_LOW: u1, + GPIO10_EDGE_HIGH: u1, + GPIO11_LEVEL_LOW: u1, + GPIO11_LEVEL_HIGH: u1, + GPIO11_EDGE_LOW: u1, + GPIO11_EDGE_HIGH: u1, + GPIO12_LEVEL_LOW: u1, + GPIO12_LEVEL_HIGH: u1, + GPIO12_EDGE_LOW: u1, + GPIO12_EDGE_HIGH: u1, + GPIO13_LEVEL_LOW: u1, + GPIO13_LEVEL_HIGH: u1, + GPIO13_EDGE_LOW: u1, + GPIO13_EDGE_HIGH: u1, + GPIO14_LEVEL_LOW: u1, + GPIO14_LEVEL_HIGH: u1, + GPIO14_EDGE_LOW: u1, + GPIO14_EDGE_HIGH: u1, + GPIO15_LEVEL_LOW: u1, + GPIO15_LEVEL_HIGH: u1, + GPIO15_EDGE_LOW: u1, + GPIO15_EDGE_HIGH: u1, + }), base_address + 0x154); + + /// address: 0x40014158 + /// Interrupt status after masking & forcing for proc1 + pub const PROC1_INTS2 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO16_LEVEL_LOW: u1, + GPIO16_LEVEL_HIGH: u1, + GPIO16_EDGE_LOW: u1, + GPIO16_EDGE_HIGH: u1, + GPIO17_LEVEL_LOW: u1, + GPIO17_LEVEL_HIGH: u1, + GPIO17_EDGE_LOW: u1, + GPIO17_EDGE_HIGH: u1, + GPIO18_LEVEL_LOW: u1, + GPIO18_LEVEL_HIGH: u1, + GPIO18_EDGE_LOW: u1, + GPIO18_EDGE_HIGH: u1, + GPIO19_LEVEL_LOW: u1, + GPIO19_LEVEL_HIGH: u1, + GPIO19_EDGE_LOW: u1, + GPIO19_EDGE_HIGH: u1, + GPIO20_LEVEL_LOW: u1, + GPIO20_LEVEL_HIGH: u1, + GPIO20_EDGE_LOW: u1, + GPIO20_EDGE_HIGH: u1, + GPIO21_LEVEL_LOW: u1, + GPIO21_LEVEL_HIGH: u1, + GPIO21_EDGE_LOW: u1, + GPIO21_EDGE_HIGH: u1, + GPIO22_LEVEL_LOW: u1, + GPIO22_LEVEL_HIGH: u1, + GPIO22_EDGE_LOW: u1, + GPIO22_EDGE_HIGH: u1, + GPIO23_LEVEL_LOW: u1, + GPIO23_LEVEL_HIGH: u1, + GPIO23_EDGE_LOW: u1, + GPIO23_EDGE_HIGH: u1, + }), base_address + 0x158); + + /// address: 0x4001415c + /// Interrupt status after masking & forcing for proc1 + pub const PROC1_INTS3 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO24_LEVEL_LOW: u1, + GPIO24_LEVEL_HIGH: u1, + GPIO24_EDGE_LOW: u1, + GPIO24_EDGE_HIGH: u1, + GPIO25_LEVEL_LOW: u1, + GPIO25_LEVEL_HIGH: u1, + GPIO25_EDGE_LOW: u1, + GPIO25_EDGE_HIGH: u1, + GPIO26_LEVEL_LOW: u1, + GPIO26_LEVEL_HIGH: u1, + GPIO26_EDGE_LOW: u1, + GPIO26_EDGE_HIGH: u1, + GPIO27_LEVEL_LOW: u1, + GPIO27_LEVEL_HIGH: u1, + GPIO27_EDGE_LOW: u1, + GPIO27_EDGE_HIGH: u1, + GPIO28_LEVEL_LOW: u1, + GPIO28_LEVEL_HIGH: u1, + GPIO28_EDGE_LOW: u1, + GPIO28_EDGE_HIGH: u1, + GPIO29_LEVEL_LOW: u1, + GPIO29_LEVEL_HIGH: u1, + GPIO29_EDGE_LOW: u1, + GPIO29_EDGE_HIGH: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x15c); + + /// address: 0x40014160 + /// Interrupt Enable for dormant_wake + pub const DORMANT_WAKE_INTE0 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO0_LEVEL_LOW: u1, + GPIO0_LEVEL_HIGH: u1, + GPIO0_EDGE_LOW: u1, + GPIO0_EDGE_HIGH: u1, + GPIO1_LEVEL_LOW: u1, + GPIO1_LEVEL_HIGH: u1, + GPIO1_EDGE_LOW: u1, + GPIO1_EDGE_HIGH: u1, + GPIO2_LEVEL_LOW: u1, + GPIO2_LEVEL_HIGH: u1, + GPIO2_EDGE_LOW: u1, + GPIO2_EDGE_HIGH: u1, + GPIO3_LEVEL_LOW: u1, + GPIO3_LEVEL_HIGH: u1, + GPIO3_EDGE_LOW: u1, + GPIO3_EDGE_HIGH: u1, + GPIO4_LEVEL_LOW: u1, + GPIO4_LEVEL_HIGH: u1, + GPIO4_EDGE_LOW: u1, + GPIO4_EDGE_HIGH: u1, + GPIO5_LEVEL_LOW: u1, + GPIO5_LEVEL_HIGH: u1, + GPIO5_EDGE_LOW: u1, + GPIO5_EDGE_HIGH: u1, + GPIO6_LEVEL_LOW: u1, + GPIO6_LEVEL_HIGH: u1, + GPIO6_EDGE_LOW: u1, + GPIO6_EDGE_HIGH: u1, + GPIO7_LEVEL_LOW: u1, + GPIO7_LEVEL_HIGH: u1, + GPIO7_EDGE_LOW: u1, + GPIO7_EDGE_HIGH: u1, + }), base_address + 0x160); + + /// address: 0x40014164 + /// Interrupt Enable for dormant_wake + pub const DORMANT_WAKE_INTE1 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO8_LEVEL_LOW: u1, + GPIO8_LEVEL_HIGH: u1, + GPIO8_EDGE_LOW: u1, + GPIO8_EDGE_HIGH: u1, + GPIO9_LEVEL_LOW: u1, + GPIO9_LEVEL_HIGH: u1, + GPIO9_EDGE_LOW: u1, + GPIO9_EDGE_HIGH: u1, + GPIO10_LEVEL_LOW: u1, + GPIO10_LEVEL_HIGH: u1, + GPIO10_EDGE_LOW: u1, + GPIO10_EDGE_HIGH: u1, + GPIO11_LEVEL_LOW: u1, + GPIO11_LEVEL_HIGH: u1, + GPIO11_EDGE_LOW: u1, + GPIO11_EDGE_HIGH: u1, + GPIO12_LEVEL_LOW: u1, + GPIO12_LEVEL_HIGH: u1, + GPIO12_EDGE_LOW: u1, + GPIO12_EDGE_HIGH: u1, + GPIO13_LEVEL_LOW: u1, + GPIO13_LEVEL_HIGH: u1, + GPIO13_EDGE_LOW: u1, + GPIO13_EDGE_HIGH: u1, + GPIO14_LEVEL_LOW: u1, + GPIO14_LEVEL_HIGH: u1, + GPIO14_EDGE_LOW: u1, + GPIO14_EDGE_HIGH: u1, + GPIO15_LEVEL_LOW: u1, + GPIO15_LEVEL_HIGH: u1, + GPIO15_EDGE_LOW: u1, + GPIO15_EDGE_HIGH: u1, + }), base_address + 0x164); + + /// address: 0x40014168 + /// Interrupt Enable for dormant_wake + pub const DORMANT_WAKE_INTE2 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO16_LEVEL_LOW: u1, + GPIO16_LEVEL_HIGH: u1, + GPIO16_EDGE_LOW: u1, + GPIO16_EDGE_HIGH: u1, + GPIO17_LEVEL_LOW: u1, + GPIO17_LEVEL_HIGH: u1, + GPIO17_EDGE_LOW: u1, + GPIO17_EDGE_HIGH: u1, + GPIO18_LEVEL_LOW: u1, + GPIO18_LEVEL_HIGH: u1, + GPIO18_EDGE_LOW: u1, + GPIO18_EDGE_HIGH: u1, + GPIO19_LEVEL_LOW: u1, + GPIO19_LEVEL_HIGH: u1, + GPIO19_EDGE_LOW: u1, + GPIO19_EDGE_HIGH: u1, + GPIO20_LEVEL_LOW: u1, + GPIO20_LEVEL_HIGH: u1, + GPIO20_EDGE_LOW: u1, + GPIO20_EDGE_HIGH: u1, + GPIO21_LEVEL_LOW: u1, + GPIO21_LEVEL_HIGH: u1, + GPIO21_EDGE_LOW: u1, + GPIO21_EDGE_HIGH: u1, + GPIO22_LEVEL_LOW: u1, + GPIO22_LEVEL_HIGH: u1, + GPIO22_EDGE_LOW: u1, + GPIO22_EDGE_HIGH: u1, + GPIO23_LEVEL_LOW: u1, + GPIO23_LEVEL_HIGH: u1, + GPIO23_EDGE_LOW: u1, + GPIO23_EDGE_HIGH: u1, + }), base_address + 0x168); + + /// address: 0x4001416c + /// Interrupt Enable for dormant_wake + pub const DORMANT_WAKE_INTE3 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO24_LEVEL_LOW: u1, + GPIO24_LEVEL_HIGH: u1, + GPIO24_EDGE_LOW: u1, + GPIO24_EDGE_HIGH: u1, + GPIO25_LEVEL_LOW: u1, + GPIO25_LEVEL_HIGH: u1, + GPIO25_EDGE_LOW: u1, + GPIO25_EDGE_HIGH: u1, + GPIO26_LEVEL_LOW: u1, + GPIO26_LEVEL_HIGH: u1, + GPIO26_EDGE_LOW: u1, + GPIO26_EDGE_HIGH: u1, + GPIO27_LEVEL_LOW: u1, + GPIO27_LEVEL_HIGH: u1, + GPIO27_EDGE_LOW: u1, + GPIO27_EDGE_HIGH: u1, + GPIO28_LEVEL_LOW: u1, + GPIO28_LEVEL_HIGH: u1, + GPIO28_EDGE_LOW: u1, + GPIO28_EDGE_HIGH: u1, + GPIO29_LEVEL_LOW: u1, + GPIO29_LEVEL_HIGH: u1, + GPIO29_EDGE_LOW: u1, + GPIO29_EDGE_HIGH: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x16c); + + /// address: 0x40014170 + /// Interrupt Force for dormant_wake + pub const DORMANT_WAKE_INTF0 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO0_LEVEL_LOW: u1, + GPIO0_LEVEL_HIGH: u1, + GPIO0_EDGE_LOW: u1, + GPIO0_EDGE_HIGH: u1, + GPIO1_LEVEL_LOW: u1, + GPIO1_LEVEL_HIGH: u1, + GPIO1_EDGE_LOW: u1, + GPIO1_EDGE_HIGH: u1, + GPIO2_LEVEL_LOW: u1, + GPIO2_LEVEL_HIGH: u1, + GPIO2_EDGE_LOW: u1, + GPIO2_EDGE_HIGH: u1, + GPIO3_LEVEL_LOW: u1, + GPIO3_LEVEL_HIGH: u1, + GPIO3_EDGE_LOW: u1, + GPIO3_EDGE_HIGH: u1, + GPIO4_LEVEL_LOW: u1, + GPIO4_LEVEL_HIGH: u1, + GPIO4_EDGE_LOW: u1, + GPIO4_EDGE_HIGH: u1, + GPIO5_LEVEL_LOW: u1, + GPIO5_LEVEL_HIGH: u1, + GPIO5_EDGE_LOW: u1, + GPIO5_EDGE_HIGH: u1, + GPIO6_LEVEL_LOW: u1, + GPIO6_LEVEL_HIGH: u1, + GPIO6_EDGE_LOW: u1, + GPIO6_EDGE_HIGH: u1, + GPIO7_LEVEL_LOW: u1, + GPIO7_LEVEL_HIGH: u1, + GPIO7_EDGE_LOW: u1, + GPIO7_EDGE_HIGH: u1, + }), base_address + 0x170); + + /// address: 0x40014174 + /// Interrupt Force for dormant_wake + pub const DORMANT_WAKE_INTF1 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO8_LEVEL_LOW: u1, + GPIO8_LEVEL_HIGH: u1, + GPIO8_EDGE_LOW: u1, + GPIO8_EDGE_HIGH: u1, + GPIO9_LEVEL_LOW: u1, + GPIO9_LEVEL_HIGH: u1, + GPIO9_EDGE_LOW: u1, + GPIO9_EDGE_HIGH: u1, + GPIO10_LEVEL_LOW: u1, + GPIO10_LEVEL_HIGH: u1, + GPIO10_EDGE_LOW: u1, + GPIO10_EDGE_HIGH: u1, + GPIO11_LEVEL_LOW: u1, + GPIO11_LEVEL_HIGH: u1, + GPIO11_EDGE_LOW: u1, + GPIO11_EDGE_HIGH: u1, + GPIO12_LEVEL_LOW: u1, + GPIO12_LEVEL_HIGH: u1, + GPIO12_EDGE_LOW: u1, + GPIO12_EDGE_HIGH: u1, + GPIO13_LEVEL_LOW: u1, + GPIO13_LEVEL_HIGH: u1, + GPIO13_EDGE_LOW: u1, + GPIO13_EDGE_HIGH: u1, + GPIO14_LEVEL_LOW: u1, + GPIO14_LEVEL_HIGH: u1, + GPIO14_EDGE_LOW: u1, + GPIO14_EDGE_HIGH: u1, + GPIO15_LEVEL_LOW: u1, + GPIO15_LEVEL_HIGH: u1, + GPIO15_EDGE_LOW: u1, + GPIO15_EDGE_HIGH: u1, + }), base_address + 0x174); + + /// address: 0x40014178 + /// Interrupt Force for dormant_wake + pub const DORMANT_WAKE_INTF2 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO16_LEVEL_LOW: u1, + GPIO16_LEVEL_HIGH: u1, + GPIO16_EDGE_LOW: u1, + GPIO16_EDGE_HIGH: u1, + GPIO17_LEVEL_LOW: u1, + GPIO17_LEVEL_HIGH: u1, + GPIO17_EDGE_LOW: u1, + GPIO17_EDGE_HIGH: u1, + GPIO18_LEVEL_LOW: u1, + GPIO18_LEVEL_HIGH: u1, + GPIO18_EDGE_LOW: u1, + GPIO18_EDGE_HIGH: u1, + GPIO19_LEVEL_LOW: u1, + GPIO19_LEVEL_HIGH: u1, + GPIO19_EDGE_LOW: u1, + GPIO19_EDGE_HIGH: u1, + GPIO20_LEVEL_LOW: u1, + GPIO20_LEVEL_HIGH: u1, + GPIO20_EDGE_LOW: u1, + GPIO20_EDGE_HIGH: u1, + GPIO21_LEVEL_LOW: u1, + GPIO21_LEVEL_HIGH: u1, + GPIO21_EDGE_LOW: u1, + GPIO21_EDGE_HIGH: u1, + GPIO22_LEVEL_LOW: u1, + GPIO22_LEVEL_HIGH: u1, + GPIO22_EDGE_LOW: u1, + GPIO22_EDGE_HIGH: u1, + GPIO23_LEVEL_LOW: u1, + GPIO23_LEVEL_HIGH: u1, + GPIO23_EDGE_LOW: u1, + GPIO23_EDGE_HIGH: u1, + }), base_address + 0x178); + + /// address: 0x4001417c + /// Interrupt Force for dormant_wake + pub const DORMANT_WAKE_INTF3 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO24_LEVEL_LOW: u1, + GPIO24_LEVEL_HIGH: u1, + GPIO24_EDGE_LOW: u1, + GPIO24_EDGE_HIGH: u1, + GPIO25_LEVEL_LOW: u1, + GPIO25_LEVEL_HIGH: u1, + GPIO25_EDGE_LOW: u1, + GPIO25_EDGE_HIGH: u1, + GPIO26_LEVEL_LOW: u1, + GPIO26_LEVEL_HIGH: u1, + GPIO26_EDGE_LOW: u1, + GPIO26_EDGE_HIGH: u1, + GPIO27_LEVEL_LOW: u1, + GPIO27_LEVEL_HIGH: u1, + GPIO27_EDGE_LOW: u1, + GPIO27_EDGE_HIGH: u1, + GPIO28_LEVEL_LOW: u1, + GPIO28_LEVEL_HIGH: u1, + GPIO28_EDGE_LOW: u1, + GPIO28_EDGE_HIGH: u1, + GPIO29_LEVEL_LOW: u1, + GPIO29_LEVEL_HIGH: u1, + GPIO29_EDGE_LOW: u1, + GPIO29_EDGE_HIGH: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x17c); + + /// address: 0x40014180 + /// Interrupt status after masking & forcing for dormant_wake + pub const DORMANT_WAKE_INTS0 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO0_LEVEL_LOW: u1, + GPIO0_LEVEL_HIGH: u1, + GPIO0_EDGE_LOW: u1, + GPIO0_EDGE_HIGH: u1, + GPIO1_LEVEL_LOW: u1, + GPIO1_LEVEL_HIGH: u1, + GPIO1_EDGE_LOW: u1, + GPIO1_EDGE_HIGH: u1, + GPIO2_LEVEL_LOW: u1, + GPIO2_LEVEL_HIGH: u1, + GPIO2_EDGE_LOW: u1, + GPIO2_EDGE_HIGH: u1, + GPIO3_LEVEL_LOW: u1, + GPIO3_LEVEL_HIGH: u1, + GPIO3_EDGE_LOW: u1, + GPIO3_EDGE_HIGH: u1, + GPIO4_LEVEL_LOW: u1, + GPIO4_LEVEL_HIGH: u1, + GPIO4_EDGE_LOW: u1, + GPIO4_EDGE_HIGH: u1, + GPIO5_LEVEL_LOW: u1, + GPIO5_LEVEL_HIGH: u1, + GPIO5_EDGE_LOW: u1, + GPIO5_EDGE_HIGH: u1, + GPIO6_LEVEL_LOW: u1, + GPIO6_LEVEL_HIGH: u1, + GPIO6_EDGE_LOW: u1, + GPIO6_EDGE_HIGH: u1, + GPIO7_LEVEL_LOW: u1, + GPIO7_LEVEL_HIGH: u1, + GPIO7_EDGE_LOW: u1, + GPIO7_EDGE_HIGH: u1, + }), base_address + 0x180); + + /// address: 0x40014184 + /// Interrupt status after masking & forcing for dormant_wake + pub const DORMANT_WAKE_INTS1 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO8_LEVEL_LOW: u1, + GPIO8_LEVEL_HIGH: u1, + GPIO8_EDGE_LOW: u1, + GPIO8_EDGE_HIGH: u1, + GPIO9_LEVEL_LOW: u1, + GPIO9_LEVEL_HIGH: u1, + GPIO9_EDGE_LOW: u1, + GPIO9_EDGE_HIGH: u1, + GPIO10_LEVEL_LOW: u1, + GPIO10_LEVEL_HIGH: u1, + GPIO10_EDGE_LOW: u1, + GPIO10_EDGE_HIGH: u1, + GPIO11_LEVEL_LOW: u1, + GPIO11_LEVEL_HIGH: u1, + GPIO11_EDGE_LOW: u1, + GPIO11_EDGE_HIGH: u1, + GPIO12_LEVEL_LOW: u1, + GPIO12_LEVEL_HIGH: u1, + GPIO12_EDGE_LOW: u1, + GPIO12_EDGE_HIGH: u1, + GPIO13_LEVEL_LOW: u1, + GPIO13_LEVEL_HIGH: u1, + GPIO13_EDGE_LOW: u1, + GPIO13_EDGE_HIGH: u1, + GPIO14_LEVEL_LOW: u1, + GPIO14_LEVEL_HIGH: u1, + GPIO14_EDGE_LOW: u1, + GPIO14_EDGE_HIGH: u1, + GPIO15_LEVEL_LOW: u1, + GPIO15_LEVEL_HIGH: u1, + GPIO15_EDGE_LOW: u1, + GPIO15_EDGE_HIGH: u1, + }), base_address + 0x184); + + /// address: 0x40014188 + /// Interrupt status after masking & forcing for dormant_wake + pub const DORMANT_WAKE_INTS2 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO16_LEVEL_LOW: u1, + GPIO16_LEVEL_HIGH: u1, + GPIO16_EDGE_LOW: u1, + GPIO16_EDGE_HIGH: u1, + GPIO17_LEVEL_LOW: u1, + GPIO17_LEVEL_HIGH: u1, + GPIO17_EDGE_LOW: u1, + GPIO17_EDGE_HIGH: u1, + GPIO18_LEVEL_LOW: u1, + GPIO18_LEVEL_HIGH: u1, + GPIO18_EDGE_LOW: u1, + GPIO18_EDGE_HIGH: u1, + GPIO19_LEVEL_LOW: u1, + GPIO19_LEVEL_HIGH: u1, + GPIO19_EDGE_LOW: u1, + GPIO19_EDGE_HIGH: u1, + GPIO20_LEVEL_LOW: u1, + GPIO20_LEVEL_HIGH: u1, + GPIO20_EDGE_LOW: u1, + GPIO20_EDGE_HIGH: u1, + GPIO21_LEVEL_LOW: u1, + GPIO21_LEVEL_HIGH: u1, + GPIO21_EDGE_LOW: u1, + GPIO21_EDGE_HIGH: u1, + GPIO22_LEVEL_LOW: u1, + GPIO22_LEVEL_HIGH: u1, + GPIO22_EDGE_LOW: u1, + GPIO22_EDGE_HIGH: u1, + GPIO23_LEVEL_LOW: u1, + GPIO23_LEVEL_HIGH: u1, + GPIO23_EDGE_LOW: u1, + GPIO23_EDGE_HIGH: u1, + }), base_address + 0x188); + + /// address: 0x4001418c + /// Interrupt status after masking & forcing for dormant_wake + pub const DORMANT_WAKE_INTS3 = @intToPtr(*volatile Mmio(32, packed struct { + GPIO24_LEVEL_LOW: u1, + GPIO24_LEVEL_HIGH: u1, + GPIO24_EDGE_LOW: u1, + GPIO24_EDGE_HIGH: u1, + GPIO25_LEVEL_LOW: u1, + GPIO25_LEVEL_HIGH: u1, + GPIO25_EDGE_LOW: u1, + GPIO25_EDGE_HIGH: u1, + GPIO26_LEVEL_LOW: u1, + GPIO26_LEVEL_HIGH: u1, + GPIO26_EDGE_LOW: u1, + GPIO26_EDGE_HIGH: u1, + GPIO27_LEVEL_LOW: u1, + GPIO27_LEVEL_HIGH: u1, + GPIO27_EDGE_LOW: u1, + GPIO27_EDGE_HIGH: u1, + GPIO28_LEVEL_LOW: u1, + GPIO28_LEVEL_HIGH: u1, + GPIO28_EDGE_LOW: u1, + GPIO28_EDGE_HIGH: u1, + GPIO29_LEVEL_LOW: u1, + GPIO29_LEVEL_HIGH: u1, + GPIO29_EDGE_LOW: u1, + GPIO29_EDGE_HIGH: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x18c); + }; + pub const IO_QSPI = struct { + pub const base_address = 0x40018000; + pub const version = "1"; + + /// address: 0x40018000 + /// GPIO status + pub const GPIO_QSPI_SCLK_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x0); + + /// address: 0x40018004 + /// GPIO control including function select and overrides. + pub const GPIO_QSPI_SCLK_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0x4); + + /// address: 0x40018008 + /// GPIO status + pub const GPIO_QSPI_SS_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x8); + + /// address: 0x4001800c + /// GPIO control including function select and overrides. + pub const GPIO_QSPI_SS_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0xc); + + /// address: 0x40018010 + /// GPIO status + pub const GPIO_QSPI_SD0_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x10); + + /// address: 0x40018014 + /// GPIO control including function select and overrides. + pub const GPIO_QSPI_SD0_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0x14); + + /// address: 0x40018018 + /// GPIO status + pub const GPIO_QSPI_SD1_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x18); + + /// address: 0x4001801c + /// GPIO control including function select and overrides. + pub const GPIO_QSPI_SD1_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0x1c); + + /// address: 0x40018020 + /// GPIO status + pub const GPIO_QSPI_SD2_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x20); + + /// address: 0x40018024 + /// GPIO control including function select and overrides. + pub const GPIO_QSPI_SD2_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0x24); + + /// address: 0x40018028 + /// GPIO status + pub const GPIO_QSPI_SD3_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// output signal from selected peripheral, before register override is applied + OUTFROMPERI: u1, + /// output signal to pad after register override is applied + OUTTOPAD: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// output enable from selected peripheral, before register override is applied + OEFROMPERI: u1, + /// output enable to pad after register override is applied + OETOPAD: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// input signal from pad, before override is applied + INFROMPAD: u1, + reserved13: u1 = 0, + /// input signal to peripheral, after override is applied + INTOPERI: u1, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// interrupt from pad before override is applied + IRQFROMPAD: u1, + reserved18: u1 = 0, + /// interrupt to processors, after override is applied + IRQTOPROC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x28); + + /// address: 0x4001802c + /// GPIO control including function select and overrides. + pub const GPIO_QSPI_SD3_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// 0-31 -> selects pin function according to the gpio table\n + /// 31 == NULL + FUNCSEL: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + OUTOVER: u2, + reserved3: u1 = 0, + reserved4: u1 = 0, + OEOVER: u2, + reserved5: u1 = 0, + reserved6: u1 = 0, + INOVER: u2, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + IRQOVER: u2, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0x2c); + + /// address: 0x40018030 + /// Raw Interrupts + pub const INTR = @intToPtr(*volatile Mmio(32, packed struct { + GPIO_QSPI_SCLK_LEVEL_LOW: u1, + GPIO_QSPI_SCLK_LEVEL_HIGH: u1, + GPIO_QSPI_SCLK_EDGE_LOW: u1, + GPIO_QSPI_SCLK_EDGE_HIGH: u1, + GPIO_QSPI_SS_LEVEL_LOW: u1, + GPIO_QSPI_SS_LEVEL_HIGH: u1, + GPIO_QSPI_SS_EDGE_LOW: u1, + GPIO_QSPI_SS_EDGE_HIGH: u1, + GPIO_QSPI_SD0_LEVEL_LOW: u1, + GPIO_QSPI_SD0_LEVEL_HIGH: u1, + GPIO_QSPI_SD0_EDGE_LOW: u1, + GPIO_QSPI_SD0_EDGE_HIGH: u1, + GPIO_QSPI_SD1_LEVEL_LOW: u1, + GPIO_QSPI_SD1_LEVEL_HIGH: u1, + GPIO_QSPI_SD1_EDGE_LOW: u1, + GPIO_QSPI_SD1_EDGE_HIGH: u1, + GPIO_QSPI_SD2_LEVEL_LOW: u1, + GPIO_QSPI_SD2_LEVEL_HIGH: u1, + GPIO_QSPI_SD2_EDGE_LOW: u1, + GPIO_QSPI_SD2_EDGE_HIGH: u1, + GPIO_QSPI_SD3_LEVEL_LOW: u1, + GPIO_QSPI_SD3_LEVEL_HIGH: u1, + GPIO_QSPI_SD3_EDGE_LOW: u1, + GPIO_QSPI_SD3_EDGE_HIGH: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x30); + + /// address: 0x40018034 + /// Interrupt Enable for proc0 + pub const PROC0_INTE = @intToPtr(*volatile Mmio(32, packed struct { + GPIO_QSPI_SCLK_LEVEL_LOW: u1, + GPIO_QSPI_SCLK_LEVEL_HIGH: u1, + GPIO_QSPI_SCLK_EDGE_LOW: u1, + GPIO_QSPI_SCLK_EDGE_HIGH: u1, + GPIO_QSPI_SS_LEVEL_LOW: u1, + GPIO_QSPI_SS_LEVEL_HIGH: u1, + GPIO_QSPI_SS_EDGE_LOW: u1, + GPIO_QSPI_SS_EDGE_HIGH: u1, + GPIO_QSPI_SD0_LEVEL_LOW: u1, + GPIO_QSPI_SD0_LEVEL_HIGH: u1, + GPIO_QSPI_SD0_EDGE_LOW: u1, + GPIO_QSPI_SD0_EDGE_HIGH: u1, + GPIO_QSPI_SD1_LEVEL_LOW: u1, + GPIO_QSPI_SD1_LEVEL_HIGH: u1, + GPIO_QSPI_SD1_EDGE_LOW: u1, + GPIO_QSPI_SD1_EDGE_HIGH: u1, + GPIO_QSPI_SD2_LEVEL_LOW: u1, + GPIO_QSPI_SD2_LEVEL_HIGH: u1, + GPIO_QSPI_SD2_EDGE_LOW: u1, + GPIO_QSPI_SD2_EDGE_HIGH: u1, + GPIO_QSPI_SD3_LEVEL_LOW: u1, + GPIO_QSPI_SD3_LEVEL_HIGH: u1, + GPIO_QSPI_SD3_EDGE_LOW: u1, + GPIO_QSPI_SD3_EDGE_HIGH: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x34); + + /// address: 0x40018038 + /// Interrupt Force for proc0 + pub const PROC0_INTF = @intToPtr(*volatile Mmio(32, packed struct { + GPIO_QSPI_SCLK_LEVEL_LOW: u1, + GPIO_QSPI_SCLK_LEVEL_HIGH: u1, + GPIO_QSPI_SCLK_EDGE_LOW: u1, + GPIO_QSPI_SCLK_EDGE_HIGH: u1, + GPIO_QSPI_SS_LEVEL_LOW: u1, + GPIO_QSPI_SS_LEVEL_HIGH: u1, + GPIO_QSPI_SS_EDGE_LOW: u1, + GPIO_QSPI_SS_EDGE_HIGH: u1, + GPIO_QSPI_SD0_LEVEL_LOW: u1, + GPIO_QSPI_SD0_LEVEL_HIGH: u1, + GPIO_QSPI_SD0_EDGE_LOW: u1, + GPIO_QSPI_SD0_EDGE_HIGH: u1, + GPIO_QSPI_SD1_LEVEL_LOW: u1, + GPIO_QSPI_SD1_LEVEL_HIGH: u1, + GPIO_QSPI_SD1_EDGE_LOW: u1, + GPIO_QSPI_SD1_EDGE_HIGH: u1, + GPIO_QSPI_SD2_LEVEL_LOW: u1, + GPIO_QSPI_SD2_LEVEL_HIGH: u1, + GPIO_QSPI_SD2_EDGE_LOW: u1, + GPIO_QSPI_SD2_EDGE_HIGH: u1, + GPIO_QSPI_SD3_LEVEL_LOW: u1, + GPIO_QSPI_SD3_LEVEL_HIGH: u1, + GPIO_QSPI_SD3_EDGE_LOW: u1, + GPIO_QSPI_SD3_EDGE_HIGH: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x38); + + /// address: 0x4001803c + /// Interrupt status after masking & forcing for proc0 + pub const PROC0_INTS = @intToPtr(*volatile Mmio(32, packed struct { + GPIO_QSPI_SCLK_LEVEL_LOW: u1, + GPIO_QSPI_SCLK_LEVEL_HIGH: u1, + GPIO_QSPI_SCLK_EDGE_LOW: u1, + GPIO_QSPI_SCLK_EDGE_HIGH: u1, + GPIO_QSPI_SS_LEVEL_LOW: u1, + GPIO_QSPI_SS_LEVEL_HIGH: u1, + GPIO_QSPI_SS_EDGE_LOW: u1, + GPIO_QSPI_SS_EDGE_HIGH: u1, + GPIO_QSPI_SD0_LEVEL_LOW: u1, + GPIO_QSPI_SD0_LEVEL_HIGH: u1, + GPIO_QSPI_SD0_EDGE_LOW: u1, + GPIO_QSPI_SD0_EDGE_HIGH: u1, + GPIO_QSPI_SD1_LEVEL_LOW: u1, + GPIO_QSPI_SD1_LEVEL_HIGH: u1, + GPIO_QSPI_SD1_EDGE_LOW: u1, + GPIO_QSPI_SD1_EDGE_HIGH: u1, + GPIO_QSPI_SD2_LEVEL_LOW: u1, + GPIO_QSPI_SD2_LEVEL_HIGH: u1, + GPIO_QSPI_SD2_EDGE_LOW: u1, + GPIO_QSPI_SD2_EDGE_HIGH: u1, + GPIO_QSPI_SD3_LEVEL_LOW: u1, + GPIO_QSPI_SD3_LEVEL_HIGH: u1, + GPIO_QSPI_SD3_EDGE_LOW: u1, + GPIO_QSPI_SD3_EDGE_HIGH: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x3c); + + /// address: 0x40018040 + /// Interrupt Enable for proc1 + pub const PROC1_INTE = @intToPtr(*volatile Mmio(32, packed struct { + GPIO_QSPI_SCLK_LEVEL_LOW: u1, + GPIO_QSPI_SCLK_LEVEL_HIGH: u1, + GPIO_QSPI_SCLK_EDGE_LOW: u1, + GPIO_QSPI_SCLK_EDGE_HIGH: u1, + GPIO_QSPI_SS_LEVEL_LOW: u1, + GPIO_QSPI_SS_LEVEL_HIGH: u1, + GPIO_QSPI_SS_EDGE_LOW: u1, + GPIO_QSPI_SS_EDGE_HIGH: u1, + GPIO_QSPI_SD0_LEVEL_LOW: u1, + GPIO_QSPI_SD0_LEVEL_HIGH: u1, + GPIO_QSPI_SD0_EDGE_LOW: u1, + GPIO_QSPI_SD0_EDGE_HIGH: u1, + GPIO_QSPI_SD1_LEVEL_LOW: u1, + GPIO_QSPI_SD1_LEVEL_HIGH: u1, + GPIO_QSPI_SD1_EDGE_LOW: u1, + GPIO_QSPI_SD1_EDGE_HIGH: u1, + GPIO_QSPI_SD2_LEVEL_LOW: u1, + GPIO_QSPI_SD2_LEVEL_HIGH: u1, + GPIO_QSPI_SD2_EDGE_LOW: u1, + GPIO_QSPI_SD2_EDGE_HIGH: u1, + GPIO_QSPI_SD3_LEVEL_LOW: u1, + GPIO_QSPI_SD3_LEVEL_HIGH: u1, + GPIO_QSPI_SD3_EDGE_LOW: u1, + GPIO_QSPI_SD3_EDGE_HIGH: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x40); + + /// address: 0x40018044 + /// Interrupt Force for proc1 + pub const PROC1_INTF = @intToPtr(*volatile Mmio(32, packed struct { + GPIO_QSPI_SCLK_LEVEL_LOW: u1, + GPIO_QSPI_SCLK_LEVEL_HIGH: u1, + GPIO_QSPI_SCLK_EDGE_LOW: u1, + GPIO_QSPI_SCLK_EDGE_HIGH: u1, + GPIO_QSPI_SS_LEVEL_LOW: u1, + GPIO_QSPI_SS_LEVEL_HIGH: u1, + GPIO_QSPI_SS_EDGE_LOW: u1, + GPIO_QSPI_SS_EDGE_HIGH: u1, + GPIO_QSPI_SD0_LEVEL_LOW: u1, + GPIO_QSPI_SD0_LEVEL_HIGH: u1, + GPIO_QSPI_SD0_EDGE_LOW: u1, + GPIO_QSPI_SD0_EDGE_HIGH: u1, + GPIO_QSPI_SD1_LEVEL_LOW: u1, + GPIO_QSPI_SD1_LEVEL_HIGH: u1, + GPIO_QSPI_SD1_EDGE_LOW: u1, + GPIO_QSPI_SD1_EDGE_HIGH: u1, + GPIO_QSPI_SD2_LEVEL_LOW: u1, + GPIO_QSPI_SD2_LEVEL_HIGH: u1, + GPIO_QSPI_SD2_EDGE_LOW: u1, + GPIO_QSPI_SD2_EDGE_HIGH: u1, + GPIO_QSPI_SD3_LEVEL_LOW: u1, + GPIO_QSPI_SD3_LEVEL_HIGH: u1, + GPIO_QSPI_SD3_EDGE_LOW: u1, + GPIO_QSPI_SD3_EDGE_HIGH: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x44); + + /// address: 0x40018048 + /// Interrupt status after masking & forcing for proc1 + pub const PROC1_INTS = @intToPtr(*volatile Mmio(32, packed struct { + GPIO_QSPI_SCLK_LEVEL_LOW: u1, + GPIO_QSPI_SCLK_LEVEL_HIGH: u1, + GPIO_QSPI_SCLK_EDGE_LOW: u1, + GPIO_QSPI_SCLK_EDGE_HIGH: u1, + GPIO_QSPI_SS_LEVEL_LOW: u1, + GPIO_QSPI_SS_LEVEL_HIGH: u1, + GPIO_QSPI_SS_EDGE_LOW: u1, + GPIO_QSPI_SS_EDGE_HIGH: u1, + GPIO_QSPI_SD0_LEVEL_LOW: u1, + GPIO_QSPI_SD0_LEVEL_HIGH: u1, + GPIO_QSPI_SD0_EDGE_LOW: u1, + GPIO_QSPI_SD0_EDGE_HIGH: u1, + GPIO_QSPI_SD1_LEVEL_LOW: u1, + GPIO_QSPI_SD1_LEVEL_HIGH: u1, + GPIO_QSPI_SD1_EDGE_LOW: u1, + GPIO_QSPI_SD1_EDGE_HIGH: u1, + GPIO_QSPI_SD2_LEVEL_LOW: u1, + GPIO_QSPI_SD2_LEVEL_HIGH: u1, + GPIO_QSPI_SD2_EDGE_LOW: u1, + GPIO_QSPI_SD2_EDGE_HIGH: u1, + GPIO_QSPI_SD3_LEVEL_LOW: u1, + GPIO_QSPI_SD3_LEVEL_HIGH: u1, + GPIO_QSPI_SD3_EDGE_LOW: u1, + GPIO_QSPI_SD3_EDGE_HIGH: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x48); + + /// address: 0x4001804c + /// Interrupt Enable for dormant_wake + pub const DORMANT_WAKE_INTE = @intToPtr(*volatile Mmio(32, packed struct { + GPIO_QSPI_SCLK_LEVEL_LOW: u1, + GPIO_QSPI_SCLK_LEVEL_HIGH: u1, + GPIO_QSPI_SCLK_EDGE_LOW: u1, + GPIO_QSPI_SCLK_EDGE_HIGH: u1, + GPIO_QSPI_SS_LEVEL_LOW: u1, + GPIO_QSPI_SS_LEVEL_HIGH: u1, + GPIO_QSPI_SS_EDGE_LOW: u1, + GPIO_QSPI_SS_EDGE_HIGH: u1, + GPIO_QSPI_SD0_LEVEL_LOW: u1, + GPIO_QSPI_SD0_LEVEL_HIGH: u1, + GPIO_QSPI_SD0_EDGE_LOW: u1, + GPIO_QSPI_SD0_EDGE_HIGH: u1, + GPIO_QSPI_SD1_LEVEL_LOW: u1, + GPIO_QSPI_SD1_LEVEL_HIGH: u1, + GPIO_QSPI_SD1_EDGE_LOW: u1, + GPIO_QSPI_SD1_EDGE_HIGH: u1, + GPIO_QSPI_SD2_LEVEL_LOW: u1, + GPIO_QSPI_SD2_LEVEL_HIGH: u1, + GPIO_QSPI_SD2_EDGE_LOW: u1, + GPIO_QSPI_SD2_EDGE_HIGH: u1, + GPIO_QSPI_SD3_LEVEL_LOW: u1, + GPIO_QSPI_SD3_LEVEL_HIGH: u1, + GPIO_QSPI_SD3_EDGE_LOW: u1, + GPIO_QSPI_SD3_EDGE_HIGH: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x4c); + + /// address: 0x40018050 + /// Interrupt Force for dormant_wake + pub const DORMANT_WAKE_INTF = @intToPtr(*volatile Mmio(32, packed struct { + GPIO_QSPI_SCLK_LEVEL_LOW: u1, + GPIO_QSPI_SCLK_LEVEL_HIGH: u1, + GPIO_QSPI_SCLK_EDGE_LOW: u1, + GPIO_QSPI_SCLK_EDGE_HIGH: u1, + GPIO_QSPI_SS_LEVEL_LOW: u1, + GPIO_QSPI_SS_LEVEL_HIGH: u1, + GPIO_QSPI_SS_EDGE_LOW: u1, + GPIO_QSPI_SS_EDGE_HIGH: u1, + GPIO_QSPI_SD0_LEVEL_LOW: u1, + GPIO_QSPI_SD0_LEVEL_HIGH: u1, + GPIO_QSPI_SD0_EDGE_LOW: u1, + GPIO_QSPI_SD0_EDGE_HIGH: u1, + GPIO_QSPI_SD1_LEVEL_LOW: u1, + GPIO_QSPI_SD1_LEVEL_HIGH: u1, + GPIO_QSPI_SD1_EDGE_LOW: u1, + GPIO_QSPI_SD1_EDGE_HIGH: u1, + GPIO_QSPI_SD2_LEVEL_LOW: u1, + GPIO_QSPI_SD2_LEVEL_HIGH: u1, + GPIO_QSPI_SD2_EDGE_LOW: u1, + GPIO_QSPI_SD2_EDGE_HIGH: u1, + GPIO_QSPI_SD3_LEVEL_LOW: u1, + GPIO_QSPI_SD3_LEVEL_HIGH: u1, + GPIO_QSPI_SD3_EDGE_LOW: u1, + GPIO_QSPI_SD3_EDGE_HIGH: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x50); + + /// address: 0x40018054 + /// Interrupt status after masking & forcing for dormant_wake + pub const DORMANT_WAKE_INTS = @intToPtr(*volatile Mmio(32, packed struct { + GPIO_QSPI_SCLK_LEVEL_LOW: u1, + GPIO_QSPI_SCLK_LEVEL_HIGH: u1, + GPIO_QSPI_SCLK_EDGE_LOW: u1, + GPIO_QSPI_SCLK_EDGE_HIGH: u1, + GPIO_QSPI_SS_LEVEL_LOW: u1, + GPIO_QSPI_SS_LEVEL_HIGH: u1, + GPIO_QSPI_SS_EDGE_LOW: u1, + GPIO_QSPI_SS_EDGE_HIGH: u1, + GPIO_QSPI_SD0_LEVEL_LOW: u1, + GPIO_QSPI_SD0_LEVEL_HIGH: u1, + GPIO_QSPI_SD0_EDGE_LOW: u1, + GPIO_QSPI_SD0_EDGE_HIGH: u1, + GPIO_QSPI_SD1_LEVEL_LOW: u1, + GPIO_QSPI_SD1_LEVEL_HIGH: u1, + GPIO_QSPI_SD1_EDGE_LOW: u1, + GPIO_QSPI_SD1_EDGE_HIGH: u1, + GPIO_QSPI_SD2_LEVEL_LOW: u1, + GPIO_QSPI_SD2_LEVEL_HIGH: u1, + GPIO_QSPI_SD2_EDGE_LOW: u1, + GPIO_QSPI_SD2_EDGE_HIGH: u1, + GPIO_QSPI_SD3_LEVEL_LOW: u1, + GPIO_QSPI_SD3_LEVEL_HIGH: u1, + GPIO_QSPI_SD3_EDGE_LOW: u1, + GPIO_QSPI_SD3_EDGE_HIGH: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x54); + }; + pub const PADS_BANK0 = struct { + pub const base_address = 0x4001c000; + pub const version = "1"; + + /// address: 0x4001c000 + /// Voltage select. Per bank control + pub const VOLTAGE_SELECT = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x0); + + /// address: 0x4001c004 + /// Pad control register + pub const GPIO0 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x4); + + /// address: 0x4001c008 + /// Pad control register + pub const GPIO1 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x8); + + /// address: 0x4001c00c + /// Pad control register + pub const GPIO2 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0xc); + + /// address: 0x4001c010 + /// Pad control register + pub const GPIO3 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x10); + + /// address: 0x4001c014 + /// Pad control register + pub const GPIO4 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x14); + + /// address: 0x4001c018 + /// Pad control register + pub const GPIO5 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x18); + + /// address: 0x4001c01c + /// Pad control register + pub const GPIO6 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x1c); + + /// address: 0x4001c020 + /// Pad control register + pub const GPIO7 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x20); + + /// address: 0x4001c024 + /// Pad control register + pub const GPIO8 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x24); + + /// address: 0x4001c028 + /// Pad control register + pub const GPIO9 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x28); + + /// address: 0x4001c02c + /// Pad control register + pub const GPIO10 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x2c); + + /// address: 0x4001c030 + /// Pad control register + pub const GPIO11 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x30); + + /// address: 0x4001c034 + /// Pad control register + pub const GPIO12 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x34); + + /// address: 0x4001c038 + /// Pad control register + pub const GPIO13 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x38); + + /// address: 0x4001c03c + /// Pad control register + pub const GPIO14 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x3c); + + /// address: 0x4001c040 + /// Pad control register + pub const GPIO15 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x40); + + /// address: 0x4001c044 + /// Pad control register + pub const GPIO16 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x44); + + /// address: 0x4001c048 + /// Pad control register + pub const GPIO17 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x48); + + /// address: 0x4001c04c + /// Pad control register + pub const GPIO18 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x4c); + + /// address: 0x4001c050 + /// Pad control register + pub const GPIO19 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x50); + + /// address: 0x4001c054 + /// Pad control register + pub const GPIO20 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x54); + + /// address: 0x4001c058 + /// Pad control register + pub const GPIO21 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x58); + + /// address: 0x4001c05c + /// Pad control register + pub const GPIO22 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x5c); + + /// address: 0x4001c060 + /// Pad control register + pub const GPIO23 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x60); + + /// address: 0x4001c064 + /// Pad control register + pub const GPIO24 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x64); + + /// address: 0x4001c068 + /// Pad control register + pub const GPIO25 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x68); + + /// address: 0x4001c06c + /// Pad control register + pub const GPIO26 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x6c); + + /// address: 0x4001c070 + /// Pad control register + pub const GPIO27 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x70); + + /// address: 0x4001c074 + /// Pad control register + pub const GPIO28 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x74); + + /// address: 0x4001c078 + /// Pad control register + pub const GPIO29 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x78); + + /// address: 0x4001c07c + /// Pad control register + pub const SWCLK = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x7c); + + /// address: 0x4001c080 + /// Pad control register + pub const SWD = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x80); + }; + pub const PADS_QSPI = struct { + pub const base_address = 0x40020000; + pub const version = "1"; + + /// address: 0x40020000 + /// Voltage select. Per bank control + pub const VOLTAGE_SELECT = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x0); + + /// address: 0x40020004 + /// Pad control register + pub const GPIO_QSPI_SCLK = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x4); + + /// address: 0x40020008 + /// Pad control register + pub const GPIO_QSPI_SD0 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x8); + + /// address: 0x4002000c + /// Pad control register + pub const GPIO_QSPI_SD1 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0xc); + + /// address: 0x40020010 + /// Pad control register + pub const GPIO_QSPI_SD2 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x10); + + /// address: 0x40020014 + /// Pad control register + pub const GPIO_QSPI_SD3 = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x14); + + /// address: 0x40020018 + /// Pad control register + pub const GPIO_QSPI_SS = @intToPtr(*volatile Mmio(32, packed struct { + /// Slew rate control. 1 = Fast, 0 = Slow + SLEWFAST: u1, + /// Enable schmitt trigger + SCHMITT: u1, + /// Pull down enable + PDE: u1, + /// Pull up enable + PUE: u1, + /// Drive strength. + DRIVE: u2, + /// Input enable + IE: u1, + /// Output disable. Has priority over output enable from peripherals + OD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x18); + }; + + /// Controls the crystal oscillator + pub const XOSC = struct { + pub const base_address = 0x40024000; + pub const version = "1"; + + /// address: 0x40024000 + /// Crystal Oscillator Control + pub const CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// Frequency range. This resets to 0xAA0 and cannot be changed. + FREQ_RANGE: u12, + /// On power-up this field is initialised to DISABLE and the chip runs from the + /// ROSC.\n + /// If the chip has subsequently been programmed to run from the XOSC then setting + /// this field to DISABLE may lock-up the chip. If this is a concern then run the + /// clk_ref from the ROSC and enable the clk_sys RESUS feature.\n + /// The 12-bit code is intended to give some protection against accidental writes. + /// An invalid setting will enable the oscillator. + ENABLE: u12, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x0); + + /// address: 0x40024004 + /// Crystal Oscillator Status + pub const STATUS = @intToPtr(*volatile Mmio(32, packed struct { + /// The current frequency range setting, always reads 0 + FREQ_RANGE: u2, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + /// Oscillator is enabled but not necessarily running and stable, resets to 0 + ENABLED: u1, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + reserved18: u1 = 0, + reserved19: u1 = 0, + reserved20: u1 = 0, + /// An invalid value has been written to CTRL_ENABLE or CTRL_FREQ_RANGE or DORMANT + BADWRITE: u1, + reserved21: u1 = 0, + reserved22: u1 = 0, + reserved23: u1 = 0, + reserved24: u1 = 0, + reserved25: u1 = 0, + reserved26: u1 = 0, + /// Oscillator is running and stable + STABLE: u1, + }), base_address + 0x4); + + /// address: 0x40024008 + /// Crystal Oscillator pause control\n + /// This is used to save power by pausing the XOSC\n + /// On power-up this field is initialised to WAKE\n + /// An invalid write will also select WAKE\n + /// WARNING: stop the PLLs before selecting dormant mode\n + /// WARNING: setup the irq before selecting dormant mode + pub const DORMANT = @intToPtr(*volatile u32, base_address + 0x8); + + /// address: 0x4002400c + /// Controls the startup delay + pub const STARTUP = @intToPtr(*volatile Mmio(32, packed struct { + /// in multiples of 256*xtal_period. The reset value of 0xc4 corresponds to approx + /// 50 000 cycles. + DELAY: u14, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + /// Multiplies the startup_delay by 4. This is of little value to the user given + /// that the delay can be programmed directly. + X4: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + }), base_address + 0xc); + + /// address: 0x4002401c + /// A down counter running at the xosc frequency which counts to zero and stops.\n + /// To start the counter write a non-zero value.\n + /// Can be used for short software pauses when setting up time sensitive hardware. + pub const COUNT = @intToPtr(*volatile MmioInt(32, u8), base_address + 0x1c); + }; + pub const PLL_SYS = struct { + pub const base_address = 0x40028000; + pub const version = "1"; + + /// address: 0x40028000 + /// Control and Status\n + /// GENERAL CONSTRAINTS:\n + /// Reference clock frequency min=5MHz, max=800MHz\n + /// Feedback divider min=16, max=320\n + /// VCO frequency min=400MHz, max=1600MHz + pub const CS = @intToPtr(*volatile Mmio(32, packed struct { + /// Divides the PLL input reference clock.\n + /// Behaviour is undefined for div=0.\n + /// PLL output will be unpredictable during refdiv changes, wait for lock=1 before + /// using it. + REFDIV: u6, + reserved0: u1 = 0, + reserved1: u1 = 0, + /// Passes the reference clock to the output instead of the divided VCO. The VCO + /// continues to run so the user can switch between the reference clock and the + /// divided VCO but the output will glitch when doing so. + BYPASS: u1, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + reserved18: u1 = 0, + reserved19: u1 = 0, + reserved20: u1 = 0, + reserved21: u1 = 0, + reserved22: u1 = 0, + reserved23: u1 = 0, + /// PLL is locked + LOCK: u1, + }), base_address + 0x0); + + /// address: 0x40028004 + /// Controls the PLL power modes. + pub const PWR = @intToPtr(*volatile Mmio(32, packed struct { + /// PLL powerdown\n + /// To save power set high when PLL output not required. + PD: u1, + reserved0: u1 = 0, + /// PLL DSM powerdown\n + /// Nothing is achieved by setting this low. + DSMPD: u1, + /// PLL post divider powerdown\n + /// To save power set high when PLL output not required or bypass=1. + POSTDIVPD: u1, + reserved1: u1 = 0, + /// PLL VCO powerdown\n + /// To save power set high when PLL output not required or bypass=1. + VCOPD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + }), base_address + 0x4); + + /// address: 0x40028008 + /// Feedback divisor\n + /// (note: this PLL does not support fractional division) + pub const FBDIV_INT = @intToPtr(*volatile MmioInt(32, u12), base_address + 0x8); + + /// address: 0x4002800c + /// Controls the PLL post dividers for the primary output\n + /// (note: this PLL does not have a secondary output)\n + /// the primary output is driven from VCO divided by postdiv1*postdiv2 + pub const PRIM = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + /// divide by 1-7 + POSTDIV2: u3, + reserved12: u1 = 0, + /// divide by 1-7 + POSTDIV1: u3, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + }), base_address + 0xc); + }; + pub const PLL_USB = struct { + pub const base_address = 0x4002c000; + + /// address: 0x4002c000 + /// Control and Status\n + /// GENERAL CONSTRAINTS:\n + /// Reference clock frequency min=5MHz, max=800MHz\n + /// Feedback divider min=16, max=320\n + /// VCO frequency min=400MHz, max=1600MHz + pub const CS = @intToPtr(*volatile Mmio(32, packed struct { + /// Divides the PLL input reference clock.\n + /// Behaviour is undefined for div=0.\n + /// PLL output will be unpredictable during refdiv changes, wait for lock=1 before + /// using it. + REFDIV: u6, + reserved0: u1 = 0, + reserved1: u1 = 0, + /// Passes the reference clock to the output instead of the divided VCO. The VCO + /// continues to run so the user can switch between the reference clock and the + /// divided VCO but the output will glitch when doing so. + BYPASS: u1, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + reserved18: u1 = 0, + reserved19: u1 = 0, + reserved20: u1 = 0, + reserved21: u1 = 0, + reserved22: u1 = 0, + reserved23: u1 = 0, + /// PLL is locked + LOCK: u1, + }), base_address + 0x0); + + /// address: 0x4002c004 + /// Controls the PLL power modes. + pub const PWR = @intToPtr(*volatile Mmio(32, packed struct { + /// PLL powerdown\n + /// To save power set high when PLL output not required. + PD: u1, + reserved0: u1 = 0, + /// PLL DSM powerdown\n + /// Nothing is achieved by setting this low. + DSMPD: u1, + /// PLL post divider powerdown\n + /// To save power set high when PLL output not required or bypass=1. + POSTDIVPD: u1, + reserved1: u1 = 0, + /// PLL VCO powerdown\n + /// To save power set high when PLL output not required or bypass=1. + VCOPD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + }), base_address + 0x4); + + /// address: 0x4002c008 + /// Feedback divisor\n + /// (note: this PLL does not support fractional division) + pub const FBDIV_INT = @intToPtr(*volatile MmioInt(32, u12), base_address + 0x8); + + /// address: 0x4002c00c + /// Controls the PLL post dividers for the primary output\n + /// (note: this PLL does not have a secondary output)\n + /// the primary output is driven from VCO divided by postdiv1*postdiv2 + pub const PRIM = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + /// divide by 1-7 + POSTDIV2: u3, + reserved12: u1 = 0, + /// divide by 1-7 + POSTDIV1: u3, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + }), base_address + 0xc); + }; + + /// Register block for busfabric control signals and performance counters + pub const BUSCTRL = struct { + pub const base_address = 0x40030000; + pub const version = "1"; + + /// address: 0x40030000 + /// Set the priority of each master for bus arbitration. + pub const BUS_PRIORITY = @intToPtr(*volatile Mmio(32, packed struct { + /// 0 - low priority, 1 - high priority + PROC0: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + /// 0 - low priority, 1 - high priority + PROC1: u1, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + /// 0 - low priority, 1 - high priority + DMA_R: u1, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + /// 0 - low priority, 1 - high priority + DMA_W: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + }), base_address + 0x0); + + /// address: 0x40030004 + /// Bus priority acknowledge + pub const BUS_PRIORITY_ACK = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x4); + + /// address: 0x40030008 + /// Bus fabric performance counter 0 + pub const PERFCTR0 = @intToPtr(*volatile MmioInt(32, u24), base_address + 0x8); + + /// address: 0x4003000c + /// Bus fabric performance event select for PERFCTR0 + pub const PERFSEL0 = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xc); + + /// address: 0x40030010 + /// Bus fabric performance counter 1 + pub const PERFCTR1 = @intToPtr(*volatile MmioInt(32, u24), base_address + 0x10); + + /// address: 0x40030014 + /// Bus fabric performance event select for PERFCTR1 + pub const PERFSEL1 = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x14); + + /// address: 0x40030018 + /// Bus fabric performance counter 2 + pub const PERFCTR2 = @intToPtr(*volatile MmioInt(32, u24), base_address + 0x18); + + /// address: 0x4003001c + /// Bus fabric performance event select for PERFCTR2 + pub const PERFSEL2 = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x1c); + + /// address: 0x40030020 + /// Bus fabric performance counter 3 + pub const PERFCTR3 = @intToPtr(*volatile MmioInt(32, u24), base_address + 0x20); + + /// address: 0x40030024 + /// Bus fabric performance event select for PERFCTR3 + pub const PERFSEL3 = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x24); + }; + pub const UART0 = struct { + pub const base_address = 0x40034000; + pub const version = "1"; + + /// address: 0x40034000 + /// Data Register, UARTDR + pub const UARTDR = @intToPtr(*volatile Mmio(32, packed struct { + /// Receive (read) data character. Transmit (write) data character. + DATA: u8, + /// Framing error. When set to 1, it indicates that the received character did not + /// have a valid stop bit (a valid stop bit is 1). In FIFO mode, this error is + /// associated with the character at the top of the FIFO. + FE: u1, + /// Parity error. When set to 1, it indicates that the parity of the received data + /// character does not match the parity that the EPS and SPS bits in the Line + /// Control Register, UARTLCR_H. In FIFO mode, this error is associated with the + /// character at the top of the FIFO. + PE: u1, + /// Break error. This bit is set to 1 if a break condition was detected, indicating + /// that the received data input was held LOW for longer than a full-word + /// transmission time (defined as start, data, parity and stop bits). In FIFO mode, + /// this error is associated with the character at the top of the FIFO. When a break + /// occurs, only one 0 character is loaded into the FIFO. The next character is only + /// enabled after the receive data input goes to a 1 (marking state), and the next + /// valid start bit is received. + BE: u1, + /// Overrun error. This bit is set to 1 if data is received and the receive FIFO is + /// already full. This is cleared to 0 once there is an empty space in the FIFO and + /// a new character can be written to it. + OE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x0); + + /// address: 0x40034004 + /// Receive Status Register/Error Clear Register, UARTRSR/UARTECR + pub const UARTRSR = @intToPtr(*volatile Mmio(32, packed struct { + /// Framing error. When set to 1, it indicates that the received character did not + /// have a valid stop bit (a valid stop bit is 1). This bit is cleared to 0 by a + /// write to UARTECR. In FIFO mode, this error is associated with the character at + /// the top of the FIFO. + FE: u1, + /// Parity error. When set to 1, it indicates that the parity of the received data + /// character does not match the parity that the EPS and SPS bits in the Line + /// Control Register, UARTLCR_H. This bit is cleared to 0 by a write to UARTECR. In + /// FIFO mode, this error is associated with the character at the top of the FIFO. + PE: u1, + /// Break error. This bit is set to 1 if a break condition was detected, indicating + /// that the received data input was held LOW for longer than a full-word + /// transmission time (defined as start, data, parity, and stop bits). This bit is + /// cleared to 0 after a write to UARTECR. In FIFO mode, this error is associated + /// with the character at the top of the FIFO. When a break occurs, only one 0 + /// character is loaded into the FIFO. The next character is only enabled after the + /// receive data input goes to a 1 (marking state) and the next valid start bit is + /// received. + BE: u1, + /// Overrun error. This bit is set to 1 if data is received and the FIFO is already + /// full. This bit is cleared to 0 by a write to UARTECR. The FIFO contents remain + /// valid because no more data is written when the FIFO is full, only the contents + /// of the shift register are overwritten. The CPU must now read the data, to empty + /// the FIFO. + OE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + }), base_address + 0x4); + + /// address: 0x40034018 + /// Flag Register, UARTFR + pub const UARTFR = @intToPtr(*volatile Mmio(32, packed struct { + /// Clear to send. This bit is the complement of the UART clear to send, nUARTCTS, + /// modem status input. That is, the bit is 1 when nUARTCTS is LOW. + CTS: u1, + /// Data set ready. This bit is the complement of the UART data set ready, nUARTDSR, + /// modem status input. That is, the bit is 1 when nUARTDSR is LOW. + DSR: u1, + /// Data carrier detect. This bit is the complement of the UART data carrier detect, + /// nUARTDCD, modem status input. That is, the bit is 1 when nUARTDCD is LOW. + DCD: u1, + /// UART busy. If this bit is set to 1, the UART is busy transmitting data. This bit + /// remains set until the complete byte, including all the stop bits, has been sent + /// from the shift register. This bit is set as soon as the transmit FIFO becomes + /// non-empty, regardless of whether the UART is enabled or not. + BUSY: u1, + /// Receive FIFO empty. The meaning of this bit depends on the state of the FEN bit + /// in the UARTLCR_H Register. If the FIFO is disabled, this bit is set when the + /// receive holding register is empty. If the FIFO is enabled, the RXFE bit is set + /// when the receive FIFO is empty. + RXFE: u1, + /// Transmit FIFO full. The meaning of this bit depends on the state of the FEN bit + /// in the UARTLCR_H Register. If the FIFO is disabled, this bit is set when the + /// transmit holding register is full. If the FIFO is enabled, the TXFF bit is set + /// when the transmit FIFO is full. + TXFF: u1, + /// Receive FIFO full. The meaning of this bit depends on the state of the FEN bit + /// in the UARTLCR_H Register. If the FIFO is disabled, this bit is set when the + /// receive holding register is full. If the FIFO is enabled, the RXFF bit is set + /// when the receive FIFO is full. + RXFF: u1, + /// Transmit FIFO empty. The meaning of this bit depends on the state of the FEN bit + /// in the Line Control Register, UARTLCR_H. If the FIFO is disabled, this bit is + /// set when the transmit holding register is empty. If the FIFO is enabled, the + /// TXFE bit is set when the transmit FIFO is empty. This bit does not indicate if + /// there is data in the transmit shift register. + TXFE: u1, + /// Ring indicator. This bit is the complement of the UART ring indicator, nUARTRI, + /// modem status input. That is, the bit is 1 when nUARTRI is LOW. + RI: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + }), base_address + 0x18); + + /// address: 0x40034020 + /// IrDA Low-Power Counter Register, UARTILPR + pub const UARTILPR = @intToPtr(*volatile Mmio(32, packed struct { + /// 8-bit low-power divisor value. These bits are cleared to 0 at reset. + ILPDVSR: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x20); + + /// address: 0x40034024 + /// Integer Baud Rate Register, UARTIBRD + pub const UARTIBRD = @intToPtr(*volatile Mmio(32, packed struct { + /// The integer baud rate divisor. These bits are cleared to 0 on reset. + BAUD_DIVINT: u16, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + }), base_address + 0x24); + + /// address: 0x40034028 + /// Fractional Baud Rate Register, UARTFBRD + pub const UARTFBRD = @intToPtr(*volatile Mmio(32, packed struct { + /// The fractional baud rate divisor. These bits are cleared to 0 on reset. + BAUD_DIVFRAC: u6, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + }), base_address + 0x28); + + /// address: 0x4003402c + /// Line Control Register, UARTLCR_H + pub const UARTLCR_H = @intToPtr(*volatile Mmio(32, packed struct { + /// Send break. If this bit is set to 1, a low-level is continually output on the + /// UARTTXD output, after completing transmission of the current character. For the + /// proper execution of the break command, the software must set this bit for at + /// least two complete frames. For normal use, this bit must be cleared to 0. + BRK: u1, + /// Parity enable: 0 = parity is disabled and no parity bit added to the data frame + /// 1 = parity checking and generation is enabled. + PEN: u1, + /// Even parity select. Controls the type of parity the UART uses during + /// transmission and reception: 0 = odd parity. The UART generates or checks for an + /// odd number of 1s in the data and parity bits. 1 = even parity. The UART + /// generates or checks for an even number of 1s in the data and parity bits. This + /// bit has no effect when the PEN bit disables parity checking and generation. + EPS: u1, + /// Two stop bits select. If this bit is set to 1, two stop bits are transmitted at + /// the end of the frame. The receive logic does not check for two stop bits being + /// received. + STP2: u1, + /// Enable FIFOs: 0 = FIFOs are disabled (character mode) that is, the FIFOs become + /// 1-byte-deep holding registers 1 = transmit and receive FIFO buffers are enabled + /// (FIFO mode). + FEN: u1, + /// Word length. These bits indicate the number of data bits transmitted or received + /// in a frame as follows: b11 = 8 bits b10 = 7 bits b01 = 6 bits b00 = 5 bits. + WLEN: u2, + /// Stick parity select. 0 = stick parity is disabled 1 = either: * if the EPS bit + /// is 0 then the parity bit is transmitted and checked as a 1 * if the EPS bit is 1 + /// then the parity bit is transmitted and checked as a 0. This bit has no effect + /// when the PEN bit disables parity checking and generation. + SPS: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x2c); + + /// address: 0x40034030 + /// Control Register, UARTCR + pub const UARTCR = @intToPtr(*volatile Mmio(32, packed struct { + /// UART enable: 0 = UART is disabled. If the UART is disabled in the middle of + /// transmission or reception, it completes the current character before stopping. 1 + /// = the UART is enabled. Data transmission and reception occurs for either UART + /// signals or SIR signals depending on the setting of the SIREN bit. + UARTEN: u1, + /// SIR enable: 0 = IrDA SIR ENDEC is disabled. nSIROUT remains LOW (no light pulse + /// generated), and signal transitions on SIRIN have no effect. 1 = IrDA SIR ENDEC + /// is enabled. Data is transmitted and received on nSIROUT and SIRIN. UARTTXD + /// remains HIGH, in the marking state. Signal transitions on UARTRXD or modem + /// status inputs have no effect. This bit has no effect if the UARTEN bit disables + /// the UART. + SIREN: u1, + /// SIR low-power IrDA mode. This bit selects the IrDA encoding mode. If this bit is + /// cleared to 0, low-level bits are transmitted as an active high pulse with a + /// width of 3 / 16th of the bit period. If this bit is set to 1, low-level bits are + /// transmitted with a pulse width that is 3 times the period of the IrLPBaud16 + /// input signal, regardless of the selected bit rate. Setting this bit uses less + /// power, but might reduce transmission distances. + SIRLP: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + /// Loopback enable. If this bit is set to 1 and the SIREN bit is set to 1 and the + /// SIRTEST bit in the Test Control Register, UARTTCR is set to 1, then the nSIROUT + /// path is inverted, and fed through to the SIRIN path. The SIRTEST bit in the test + /// register must be set to 1 to override the normal half-duplex SIR operation. This + /// must be the requirement for accessing the test registers during normal + /// operation, and SIRTEST must be cleared to 0 when loopback testing is finished. + /// This feature reduces the amount of external coupling required during system + /// test. If this bit is set to 1, and the SIRTEST bit is set to 0, the UARTTXD path + /// is fed through to the UARTRXD path. In either SIR mode or UART mode, when this + /// bit is set, the modem outputs are also fed through to the modem inputs. This bit + /// is cleared to 0 on reset, to disable loopback. + LBE: u1, + /// Transmit enable. If this bit is set to 1, the transmit section of the UART is + /// enabled. Data transmission occurs for either UART signals, or SIR signals + /// depending on the setting of the SIREN bit. When the UART is disabled in the + /// middle of transmission, it completes the current character before stopping. + TXE: u1, + /// Receive enable. If this bit is set to 1, the receive section of the UART is + /// enabled. Data reception occurs for either UART signals or SIR signals depending + /// on the setting of the SIREN bit. When the UART is disabled in the middle of + /// reception, it completes the current character before stopping. + RXE: u1, + /// Data transmit ready. This bit is the complement of the UART data transmit ready, + /// nUARTDTR, modem status output. That is, when the bit is programmed to a 1 then + /// nUARTDTR is LOW. + DTR: u1, + /// Request to send. This bit is the complement of the UART request to send, + /// nUARTRTS, modem status output. That is, when the bit is programmed to a 1 then + /// nUARTRTS is LOW. + RTS: u1, + /// This bit is the complement of the UART Out1 (nUARTOut1) modem status output. + /// That is, when the bit is programmed to a 1 the output is 0. For DTE this can be + /// used as Data Carrier Detect (DCD). + OUT1: u1, + /// This bit is the complement of the UART Out2 (nUARTOut2) modem status output. + /// That is, when the bit is programmed to a 1, the output is 0. For DTE this can be + /// used as Ring Indicator (RI). + OUT2: u1, + /// RTS hardware flow control enable. If this bit is set to 1, RTS hardware flow + /// control is enabled. Data is only requested when there is space in the receive + /// FIFO for it to be received. + RTSEN: u1, + /// CTS hardware flow control enable. If this bit is set to 1, CTS hardware flow + /// control is enabled. Data is only transmitted when the nUARTCTS signal is + /// asserted. + CTSEN: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + }), base_address + 0x30); + + /// address: 0x40034034 + /// Interrupt FIFO Level Select Register, UARTIFLS + pub const UARTIFLS = @intToPtr(*volatile Mmio(32, packed struct { + /// Transmit interrupt FIFO level select. The trigger points for the transmit + /// interrupt are as follows: b000 = Transmit FIFO becomes <= 1 / 8 full b001 = + /// Transmit FIFO becomes <= 1 / 4 full b010 = Transmit FIFO becomes <= 1 / 2 full + /// b011 = Transmit FIFO becomes <= 3 / 4 full b100 = Transmit FIFO becomes <= 7 / 8 + /// full b101-b111 = reserved. + TXIFLSEL: u3, + /// Receive interrupt FIFO level select. The trigger points for the receive + /// interrupt are as follows: b000 = Receive FIFO becomes >= 1 / 8 full b001 = + /// Receive FIFO becomes >= 1 / 4 full b010 = Receive FIFO becomes >= 1 / 2 full + /// b011 = Receive FIFO becomes >= 3 / 4 full b100 = Receive FIFO becomes >= 7 / 8 + /// full b101-b111 = reserved. + RXIFLSEL: u3, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + }), base_address + 0x34); + + /// address: 0x40034038 + /// Interrupt Mask Set/Clear Register, UARTIMSC + pub const UARTIMSC = @intToPtr(*volatile Mmio(32, packed struct { + /// nUARTRI modem interrupt mask. A read returns the current mask for the UARTRIINTR + /// interrupt. On a write of 1, the mask of the UARTRIINTR interrupt is set. A write + /// of 0 clears the mask. + RIMIM: u1, + /// nUARTCTS modem interrupt mask. A read returns the current mask for the + /// UARTCTSINTR interrupt. On a write of 1, the mask of the UARTCTSINTR interrupt is + /// set. A write of 0 clears the mask. + CTSMIM: u1, + /// nUARTDCD modem interrupt mask. A read returns the current mask for the + /// UARTDCDINTR interrupt. On a write of 1, the mask of the UARTDCDINTR interrupt is + /// set. A write of 0 clears the mask. + DCDMIM: u1, + /// nUARTDSR modem interrupt mask. A read returns the current mask for the + /// UARTDSRINTR interrupt. On a write of 1, the mask of the UARTDSRINTR interrupt is + /// set. A write of 0 clears the mask. + DSRMIM: u1, + /// Receive interrupt mask. A read returns the current mask for the UARTRXINTR + /// interrupt. On a write of 1, the mask of the UARTRXINTR interrupt is set. A write + /// of 0 clears the mask. + RXIM: u1, + /// Transmit interrupt mask. A read returns the current mask for the UARTTXINTR + /// interrupt. On a write of 1, the mask of the UARTTXINTR interrupt is set. A write + /// of 0 clears the mask. + TXIM: u1, + /// Receive timeout interrupt mask. A read returns the current mask for the + /// UARTRTINTR interrupt. On a write of 1, the mask of the UARTRTINTR interrupt is + /// set. A write of 0 clears the mask. + RTIM: u1, + /// Framing error interrupt mask. A read returns the current mask for the UARTFEINTR + /// interrupt. On a write of 1, the mask of the UARTFEINTR interrupt is set. A write + /// of 0 clears the mask. + FEIM: u1, + /// Parity error interrupt mask. A read returns the current mask for the UARTPEINTR + /// interrupt. On a write of 1, the mask of the UARTPEINTR interrupt is set. A write + /// of 0 clears the mask. + PEIM: u1, + /// Break error interrupt mask. A read returns the current mask for the UARTBEINTR + /// interrupt. On a write of 1, the mask of the UARTBEINTR interrupt is set. A write + /// of 0 clears the mask. + BEIM: u1, + /// Overrun error interrupt mask. A read returns the current mask for the UARTOEINTR + /// interrupt. On a write of 1, the mask of the UARTOEINTR interrupt is set. A write + /// of 0 clears the mask. + OEIM: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + }), base_address + 0x38); + + /// address: 0x4003403c + /// Raw Interrupt Status Register, UARTRIS + pub const UARTRIS = @intToPtr(*volatile Mmio(32, packed struct { + /// nUARTRI modem interrupt status. Returns the raw interrupt state of the + /// UARTRIINTR interrupt. + RIRMIS: u1, + /// nUARTCTS modem interrupt status. Returns the raw interrupt state of the + /// UARTCTSINTR interrupt. + CTSRMIS: u1, + /// nUARTDCD modem interrupt status. Returns the raw interrupt state of the + /// UARTDCDINTR interrupt. + DCDRMIS: u1, + /// nUARTDSR modem interrupt status. Returns the raw interrupt state of the + /// UARTDSRINTR interrupt. + DSRRMIS: u1, + /// Receive interrupt status. Returns the raw interrupt state of the UARTRXINTR + /// interrupt. + RXRIS: u1, + /// Transmit interrupt status. Returns the raw interrupt state of the UARTTXINTR + /// interrupt. + TXRIS: u1, + /// Receive timeout interrupt status. Returns the raw interrupt state of the + /// UARTRTINTR interrupt. a + RTRIS: u1, + /// Framing error interrupt status. Returns the raw interrupt state of the + /// UARTFEINTR interrupt. + FERIS: u1, + /// Parity error interrupt status. Returns the raw interrupt state of the UARTPEINTR + /// interrupt. + PERIS: u1, + /// Break error interrupt status. Returns the raw interrupt state of the UARTBEINTR + /// interrupt. + BERIS: u1, + /// Overrun error interrupt status. Returns the raw interrupt state of the + /// UARTOEINTR interrupt. + OERIS: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + }), base_address + 0x3c); + + /// address: 0x40034040 + /// Masked Interrupt Status Register, UARTMIS + pub const UARTMIS = @intToPtr(*volatile Mmio(32, packed struct { + /// nUARTRI modem masked interrupt status. Returns the masked interrupt state of the + /// UARTRIINTR interrupt. + RIMMIS: u1, + /// nUARTCTS modem masked interrupt status. Returns the masked interrupt state of + /// the UARTCTSINTR interrupt. + CTSMMIS: u1, + /// nUARTDCD modem masked interrupt status. Returns the masked interrupt state of + /// the UARTDCDINTR interrupt. + DCDMMIS: u1, + /// nUARTDSR modem masked interrupt status. Returns the masked interrupt state of + /// the UARTDSRINTR interrupt. + DSRMMIS: u1, + /// Receive masked interrupt status. Returns the masked interrupt state of the + /// UARTRXINTR interrupt. + RXMIS: u1, + /// Transmit masked interrupt status. Returns the masked interrupt state of the + /// UARTTXINTR interrupt. + TXMIS: u1, + /// Receive timeout masked interrupt status. Returns the masked interrupt state of + /// the UARTRTINTR interrupt. + RTMIS: u1, + /// Framing error masked interrupt status. Returns the masked interrupt state of the + /// UARTFEINTR interrupt. + FEMIS: u1, + /// Parity error masked interrupt status. Returns the masked interrupt state of the + /// UARTPEINTR interrupt. + PEMIS: u1, + /// Break error masked interrupt status. Returns the masked interrupt state of the + /// UARTBEINTR interrupt. + BEMIS: u1, + /// Overrun error masked interrupt status. Returns the masked interrupt state of the + /// UARTOEINTR interrupt. + OEMIS: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + }), base_address + 0x40); + + /// address: 0x40034044 + /// Interrupt Clear Register, UARTICR + pub const UARTICR = @intToPtr(*volatile Mmio(32, packed struct { + /// nUARTRI modem interrupt clear. Clears the UARTRIINTR interrupt. + RIMIC: u1, + /// nUARTCTS modem interrupt clear. Clears the UARTCTSINTR interrupt. + CTSMIC: u1, + /// nUARTDCD modem interrupt clear. Clears the UARTDCDINTR interrupt. + DCDMIC: u1, + /// nUARTDSR modem interrupt clear. Clears the UARTDSRINTR interrupt. + DSRMIC: u1, + /// Receive interrupt clear. Clears the UARTRXINTR interrupt. + RXIC: u1, + /// Transmit interrupt clear. Clears the UARTTXINTR interrupt. + TXIC: u1, + /// Receive timeout interrupt clear. Clears the UARTRTINTR interrupt. + RTIC: u1, + /// Framing error interrupt clear. Clears the UARTFEINTR interrupt. + FEIC: u1, + /// Parity error interrupt clear. Clears the UARTPEINTR interrupt. + PEIC: u1, + /// Break error interrupt clear. Clears the UARTBEINTR interrupt. + BEIC: u1, + /// Overrun error interrupt clear. Clears the UARTOEINTR interrupt. + OEIC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + }), base_address + 0x44); + + /// address: 0x40034048 + /// DMA Control Register, UARTDMACR + pub const UARTDMACR = @intToPtr(*volatile Mmio(32, packed struct { + /// Receive DMA enable. If this bit is set to 1, DMA for the receive FIFO is + /// enabled. + RXDMAE: u1, + /// Transmit DMA enable. If this bit is set to 1, DMA for the transmit FIFO is + /// enabled. + TXDMAE: u1, + /// DMA on error. If this bit is set to 1, the DMA receive request outputs, + /// UARTRXDMASREQ or UARTRXDMABREQ, are disabled when the UART error interrupt is + /// asserted. + DMAONERR: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + }), base_address + 0x48); + + /// address: 0x40034fe0 + /// UARTPeriphID0 Register + pub const UARTPERIPHID0 = @intToPtr(*volatile Mmio(32, packed struct { + /// These bits read back as 0x11 + PARTNUMBER0: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0xfe0); + + /// address: 0x40034fe4 + /// UARTPeriphID1 Register + pub const UARTPERIPHID1 = @intToPtr(*volatile Mmio(32, packed struct { + /// These bits read back as 0x0 + PARTNUMBER1: u4, + /// These bits read back as 0x1 + DESIGNER0: u4, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0xfe4); + + /// address: 0x40034fe8 + /// UARTPeriphID2 Register + pub const UARTPERIPHID2 = @intToPtr(*volatile Mmio(32, packed struct { + /// These bits read back as 0x4 + DESIGNER1: u4, + /// This field depends on the revision of the UART: r1p0 0x0 r1p1 0x1 r1p3 0x2 r1p4 + /// 0x2 r1p5 0x3 + REVISION: u4, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0xfe8); + + /// address: 0x40034fec + /// UARTPeriphID3 Register + pub const UARTPERIPHID3 = @intToPtr(*volatile Mmio(32, packed struct { + /// These bits read back as 0x00 + CONFIGURATION: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0xfec); + + /// address: 0x40034ff0 + /// UARTPCellID0 Register + pub const UARTPCELLID0 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xff0); + + /// address: 0x40034ff4 + /// UARTPCellID1 Register + pub const UARTPCELLID1 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xff4); + + /// address: 0x40034ff8 + /// UARTPCellID2 Register + pub const UARTPCELLID2 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xff8); + + /// address: 0x40034ffc + /// UARTPCellID3 Register + pub const UARTPCELLID3 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xffc); + }; + pub const UART1 = struct { + pub const base_address = 0x40038000; + + /// address: 0x40038000 + /// Data Register, UARTDR + pub const UARTDR = @intToPtr(*volatile Mmio(32, packed struct { + /// Receive (read) data character. Transmit (write) data character. + DATA: u8, + /// Framing error. When set to 1, it indicates that the received character did not + /// have a valid stop bit (a valid stop bit is 1). In FIFO mode, this error is + /// associated with the character at the top of the FIFO. + FE: u1, + /// Parity error. When set to 1, it indicates that the parity of the received data + /// character does not match the parity that the EPS and SPS bits in the Line + /// Control Register, UARTLCR_H. In FIFO mode, this error is associated with the + /// character at the top of the FIFO. + PE: u1, + /// Break error. This bit is set to 1 if a break condition was detected, indicating + /// that the received data input was held LOW for longer than a full-word + /// transmission time (defined as start, data, parity and stop bits). In FIFO mode, + /// this error is associated with the character at the top of the FIFO. When a break + /// occurs, only one 0 character is loaded into the FIFO. The next character is only + /// enabled after the receive data input goes to a 1 (marking state), and the next + /// valid start bit is received. + BE: u1, + /// Overrun error. This bit is set to 1 if data is received and the receive FIFO is + /// already full. This is cleared to 0 once there is an empty space in the FIFO and + /// a new character can be written to it. + OE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x0); + + /// address: 0x40038004 + /// Receive Status Register/Error Clear Register, UARTRSR/UARTECR + pub const UARTRSR = @intToPtr(*volatile Mmio(32, packed struct { + /// Framing error. When set to 1, it indicates that the received character did not + /// have a valid stop bit (a valid stop bit is 1). This bit is cleared to 0 by a + /// write to UARTECR. In FIFO mode, this error is associated with the character at + /// the top of the FIFO. + FE: u1, + /// Parity error. When set to 1, it indicates that the parity of the received data + /// character does not match the parity that the EPS and SPS bits in the Line + /// Control Register, UARTLCR_H. This bit is cleared to 0 by a write to UARTECR. In + /// FIFO mode, this error is associated with the character at the top of the FIFO. + PE: u1, + /// Break error. This bit is set to 1 if a break condition was detected, indicating + /// that the received data input was held LOW for longer than a full-word + /// transmission time (defined as start, data, parity, and stop bits). This bit is + /// cleared to 0 after a write to UARTECR. In FIFO mode, this error is associated + /// with the character at the top of the FIFO. When a break occurs, only one 0 + /// character is loaded into the FIFO. The next character is only enabled after the + /// receive data input goes to a 1 (marking state) and the next valid start bit is + /// received. + BE: u1, + /// Overrun error. This bit is set to 1 if data is received and the FIFO is already + /// full. This bit is cleared to 0 by a write to UARTECR. The FIFO contents remain + /// valid because no more data is written when the FIFO is full, only the contents + /// of the shift register are overwritten. The CPU must now read the data, to empty + /// the FIFO. + OE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + }), base_address + 0x4); + + /// address: 0x40038018 + /// Flag Register, UARTFR + pub const UARTFR = @intToPtr(*volatile Mmio(32, packed struct { + /// Clear to send. This bit is the complement of the UART clear to send, nUARTCTS, + /// modem status input. That is, the bit is 1 when nUARTCTS is LOW. + CTS: u1, + /// Data set ready. This bit is the complement of the UART data set ready, nUARTDSR, + /// modem status input. That is, the bit is 1 when nUARTDSR is LOW. + DSR: u1, + /// Data carrier detect. This bit is the complement of the UART data carrier detect, + /// nUARTDCD, modem status input. That is, the bit is 1 when nUARTDCD is LOW. + DCD: u1, + /// UART busy. If this bit is set to 1, the UART is busy transmitting data. This bit + /// remains set until the complete byte, including all the stop bits, has been sent + /// from the shift register. This bit is set as soon as the transmit FIFO becomes + /// non-empty, regardless of whether the UART is enabled or not. + BUSY: u1, + /// Receive FIFO empty. The meaning of this bit depends on the state of the FEN bit + /// in the UARTLCR_H Register. If the FIFO is disabled, this bit is set when the + /// receive holding register is empty. If the FIFO is enabled, the RXFE bit is set + /// when the receive FIFO is empty. + RXFE: u1, + /// Transmit FIFO full. The meaning of this bit depends on the state of the FEN bit + /// in the UARTLCR_H Register. If the FIFO is disabled, this bit is set when the + /// transmit holding register is full. If the FIFO is enabled, the TXFF bit is set + /// when the transmit FIFO is full. + TXFF: u1, + /// Receive FIFO full. The meaning of this bit depends on the state of the FEN bit + /// in the UARTLCR_H Register. If the FIFO is disabled, this bit is set when the + /// receive holding register is full. If the FIFO is enabled, the RXFF bit is set + /// when the receive FIFO is full. + RXFF: u1, + /// Transmit FIFO empty. The meaning of this bit depends on the state of the FEN bit + /// in the Line Control Register, UARTLCR_H. If the FIFO is disabled, this bit is + /// set when the transmit holding register is empty. If the FIFO is enabled, the + /// TXFE bit is set when the transmit FIFO is empty. This bit does not indicate if + /// there is data in the transmit shift register. + TXFE: u1, + /// Ring indicator. This bit is the complement of the UART ring indicator, nUARTRI, + /// modem status input. That is, the bit is 1 when nUARTRI is LOW. + RI: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + }), base_address + 0x18); + + /// address: 0x40038020 + /// IrDA Low-Power Counter Register, UARTILPR + pub const UARTILPR = @intToPtr(*volatile Mmio(32, packed struct { + /// 8-bit low-power divisor value. These bits are cleared to 0 at reset. + ILPDVSR: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x20); + + /// address: 0x40038024 + /// Integer Baud Rate Register, UARTIBRD + pub const UARTIBRD = @intToPtr(*volatile Mmio(32, packed struct { + /// The integer baud rate divisor. These bits are cleared to 0 on reset. + BAUD_DIVINT: u16, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + }), base_address + 0x24); + + /// address: 0x40038028 + /// Fractional Baud Rate Register, UARTFBRD + pub const UARTFBRD = @intToPtr(*volatile Mmio(32, packed struct { + /// The fractional baud rate divisor. These bits are cleared to 0 on reset. + BAUD_DIVFRAC: u6, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + }), base_address + 0x28); + + /// address: 0x4003802c + /// Line Control Register, UARTLCR_H + pub const UARTLCR_H = @intToPtr(*volatile Mmio(32, packed struct { + /// Send break. If this bit is set to 1, a low-level is continually output on the + /// UARTTXD output, after completing transmission of the current character. For the + /// proper execution of the break command, the software must set this bit for at + /// least two complete frames. For normal use, this bit must be cleared to 0. + BRK: u1, + /// Parity enable: 0 = parity is disabled and no parity bit added to the data frame + /// 1 = parity checking and generation is enabled. + PEN: u1, + /// Even parity select. Controls the type of parity the UART uses during + /// transmission and reception: 0 = odd parity. The UART generates or checks for an + /// odd number of 1s in the data and parity bits. 1 = even parity. The UART + /// generates or checks for an even number of 1s in the data and parity bits. This + /// bit has no effect when the PEN bit disables parity checking and generation. + EPS: u1, + /// Two stop bits select. If this bit is set to 1, two stop bits are transmitted at + /// the end of the frame. The receive logic does not check for two stop bits being + /// received. + STP2: u1, + /// Enable FIFOs: 0 = FIFOs are disabled (character mode) that is, the FIFOs become + /// 1-byte-deep holding registers 1 = transmit and receive FIFO buffers are enabled + /// (FIFO mode). + FEN: u1, + /// Word length. These bits indicate the number of data bits transmitted or received + /// in a frame as follows: b11 = 8 bits b10 = 7 bits b01 = 6 bits b00 = 5 bits. + WLEN: u2, + /// Stick parity select. 0 = stick parity is disabled 1 = either: * if the EPS bit + /// is 0 then the parity bit is transmitted and checked as a 1 * if the EPS bit is 1 + /// then the parity bit is transmitted and checked as a 0. This bit has no effect + /// when the PEN bit disables parity checking and generation. + SPS: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x2c); + + /// address: 0x40038030 + /// Control Register, UARTCR + pub const UARTCR = @intToPtr(*volatile Mmio(32, packed struct { + /// UART enable: 0 = UART is disabled. If the UART is disabled in the middle of + /// transmission or reception, it completes the current character before stopping. 1 + /// = the UART is enabled. Data transmission and reception occurs for either UART + /// signals or SIR signals depending on the setting of the SIREN bit. + UARTEN: u1, + /// SIR enable: 0 = IrDA SIR ENDEC is disabled. nSIROUT remains LOW (no light pulse + /// generated), and signal transitions on SIRIN have no effect. 1 = IrDA SIR ENDEC + /// is enabled. Data is transmitted and received on nSIROUT and SIRIN. UARTTXD + /// remains HIGH, in the marking state. Signal transitions on UARTRXD or modem + /// status inputs have no effect. This bit has no effect if the UARTEN bit disables + /// the UART. + SIREN: u1, + /// SIR low-power IrDA mode. This bit selects the IrDA encoding mode. If this bit is + /// cleared to 0, low-level bits are transmitted as an active high pulse with a + /// width of 3 / 16th of the bit period. If this bit is set to 1, low-level bits are + /// transmitted with a pulse width that is 3 times the period of the IrLPBaud16 + /// input signal, regardless of the selected bit rate. Setting this bit uses less + /// power, but might reduce transmission distances. + SIRLP: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + /// Loopback enable. If this bit is set to 1 and the SIREN bit is set to 1 and the + /// SIRTEST bit in the Test Control Register, UARTTCR is set to 1, then the nSIROUT + /// path is inverted, and fed through to the SIRIN path. The SIRTEST bit in the test + /// register must be set to 1 to override the normal half-duplex SIR operation. This + /// must be the requirement for accessing the test registers during normal + /// operation, and SIRTEST must be cleared to 0 when loopback testing is finished. + /// This feature reduces the amount of external coupling required during system + /// test. If this bit is set to 1, and the SIRTEST bit is set to 0, the UARTTXD path + /// is fed through to the UARTRXD path. In either SIR mode or UART mode, when this + /// bit is set, the modem outputs are also fed through to the modem inputs. This bit + /// is cleared to 0 on reset, to disable loopback. + LBE: u1, + /// Transmit enable. If this bit is set to 1, the transmit section of the UART is + /// enabled. Data transmission occurs for either UART signals, or SIR signals + /// depending on the setting of the SIREN bit. When the UART is disabled in the + /// middle of transmission, it completes the current character before stopping. + TXE: u1, + /// Receive enable. If this bit is set to 1, the receive section of the UART is + /// enabled. Data reception occurs for either UART signals or SIR signals depending + /// on the setting of the SIREN bit. When the UART is disabled in the middle of + /// reception, it completes the current character before stopping. + RXE: u1, + /// Data transmit ready. This bit is the complement of the UART data transmit ready, + /// nUARTDTR, modem status output. That is, when the bit is programmed to a 1 then + /// nUARTDTR is LOW. + DTR: u1, + /// Request to send. This bit is the complement of the UART request to send, + /// nUARTRTS, modem status output. That is, when the bit is programmed to a 1 then + /// nUARTRTS is LOW. + RTS: u1, + /// This bit is the complement of the UART Out1 (nUARTOut1) modem status output. + /// That is, when the bit is programmed to a 1 the output is 0. For DTE this can be + /// used as Data Carrier Detect (DCD). + OUT1: u1, + /// This bit is the complement of the UART Out2 (nUARTOut2) modem status output. + /// That is, when the bit is programmed to a 1, the output is 0. For DTE this can be + /// used as Ring Indicator (RI). + OUT2: u1, + /// RTS hardware flow control enable. If this bit is set to 1, RTS hardware flow + /// control is enabled. Data is only requested when there is space in the receive + /// FIFO for it to be received. + RTSEN: u1, + /// CTS hardware flow control enable. If this bit is set to 1, CTS hardware flow + /// control is enabled. Data is only transmitted when the nUARTCTS signal is + /// asserted. + CTSEN: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + }), base_address + 0x30); + + /// address: 0x40038034 + /// Interrupt FIFO Level Select Register, UARTIFLS + pub const UARTIFLS = @intToPtr(*volatile Mmio(32, packed struct { + /// Transmit interrupt FIFO level select. The trigger points for the transmit + /// interrupt are as follows: b000 = Transmit FIFO becomes <= 1 / 8 full b001 = + /// Transmit FIFO becomes <= 1 / 4 full b010 = Transmit FIFO becomes <= 1 / 2 full + /// b011 = Transmit FIFO becomes <= 3 / 4 full b100 = Transmit FIFO becomes <= 7 / 8 + /// full b101-b111 = reserved. + TXIFLSEL: u3, + /// Receive interrupt FIFO level select. The trigger points for the receive + /// interrupt are as follows: b000 = Receive FIFO becomes >= 1 / 8 full b001 = + /// Receive FIFO becomes >= 1 / 4 full b010 = Receive FIFO becomes >= 1 / 2 full + /// b011 = Receive FIFO becomes >= 3 / 4 full b100 = Receive FIFO becomes >= 7 / 8 + /// full b101-b111 = reserved. + RXIFLSEL: u3, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + }), base_address + 0x34); + + /// address: 0x40038038 + /// Interrupt Mask Set/Clear Register, UARTIMSC + pub const UARTIMSC = @intToPtr(*volatile Mmio(32, packed struct { + /// nUARTRI modem interrupt mask. A read returns the current mask for the UARTRIINTR + /// interrupt. On a write of 1, the mask of the UARTRIINTR interrupt is set. A write + /// of 0 clears the mask. + RIMIM: u1, + /// nUARTCTS modem interrupt mask. A read returns the current mask for the + /// UARTCTSINTR interrupt. On a write of 1, the mask of the UARTCTSINTR interrupt is + /// set. A write of 0 clears the mask. + CTSMIM: u1, + /// nUARTDCD modem interrupt mask. A read returns the current mask for the + /// UARTDCDINTR interrupt. On a write of 1, the mask of the UARTDCDINTR interrupt is + /// set. A write of 0 clears the mask. + DCDMIM: u1, + /// nUARTDSR modem interrupt mask. A read returns the current mask for the + /// UARTDSRINTR interrupt. On a write of 1, the mask of the UARTDSRINTR interrupt is + /// set. A write of 0 clears the mask. + DSRMIM: u1, + /// Receive interrupt mask. A read returns the current mask for the UARTRXINTR + /// interrupt. On a write of 1, the mask of the UARTRXINTR interrupt is set. A write + /// of 0 clears the mask. + RXIM: u1, + /// Transmit interrupt mask. A read returns the current mask for the UARTTXINTR + /// interrupt. On a write of 1, the mask of the UARTTXINTR interrupt is set. A write + /// of 0 clears the mask. + TXIM: u1, + /// Receive timeout interrupt mask. A read returns the current mask for the + /// UARTRTINTR interrupt. On a write of 1, the mask of the UARTRTINTR interrupt is + /// set. A write of 0 clears the mask. + RTIM: u1, + /// Framing error interrupt mask. A read returns the current mask for the UARTFEINTR + /// interrupt. On a write of 1, the mask of the UARTFEINTR interrupt is set. A write + /// of 0 clears the mask. + FEIM: u1, + /// Parity error interrupt mask. A read returns the current mask for the UARTPEINTR + /// interrupt. On a write of 1, the mask of the UARTPEINTR interrupt is set. A write + /// of 0 clears the mask. + PEIM: u1, + /// Break error interrupt mask. A read returns the current mask for the UARTBEINTR + /// interrupt. On a write of 1, the mask of the UARTBEINTR interrupt is set. A write + /// of 0 clears the mask. + BEIM: u1, + /// Overrun error interrupt mask. A read returns the current mask for the UARTOEINTR + /// interrupt. On a write of 1, the mask of the UARTOEINTR interrupt is set. A write + /// of 0 clears the mask. + OEIM: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + }), base_address + 0x38); + + /// address: 0x4003803c + /// Raw Interrupt Status Register, UARTRIS + pub const UARTRIS = @intToPtr(*volatile Mmio(32, packed struct { + /// nUARTRI modem interrupt status. Returns the raw interrupt state of the + /// UARTRIINTR interrupt. + RIRMIS: u1, + /// nUARTCTS modem interrupt status. Returns the raw interrupt state of the + /// UARTCTSINTR interrupt. + CTSRMIS: u1, + /// nUARTDCD modem interrupt status. Returns the raw interrupt state of the + /// UARTDCDINTR interrupt. + DCDRMIS: u1, + /// nUARTDSR modem interrupt status. Returns the raw interrupt state of the + /// UARTDSRINTR interrupt. + DSRRMIS: u1, + /// Receive interrupt status. Returns the raw interrupt state of the UARTRXINTR + /// interrupt. + RXRIS: u1, + /// Transmit interrupt status. Returns the raw interrupt state of the UARTTXINTR + /// interrupt. + TXRIS: u1, + /// Receive timeout interrupt status. Returns the raw interrupt state of the + /// UARTRTINTR interrupt. a + RTRIS: u1, + /// Framing error interrupt status. Returns the raw interrupt state of the + /// UARTFEINTR interrupt. + FERIS: u1, + /// Parity error interrupt status. Returns the raw interrupt state of the UARTPEINTR + /// interrupt. + PERIS: u1, + /// Break error interrupt status. Returns the raw interrupt state of the UARTBEINTR + /// interrupt. + BERIS: u1, + /// Overrun error interrupt status. Returns the raw interrupt state of the + /// UARTOEINTR interrupt. + OERIS: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + }), base_address + 0x3c); + + /// address: 0x40038040 + /// Masked Interrupt Status Register, UARTMIS + pub const UARTMIS = @intToPtr(*volatile Mmio(32, packed struct { + /// nUARTRI modem masked interrupt status. Returns the masked interrupt state of the + /// UARTRIINTR interrupt. + RIMMIS: u1, + /// nUARTCTS modem masked interrupt status. Returns the masked interrupt state of + /// the UARTCTSINTR interrupt. + CTSMMIS: u1, + /// nUARTDCD modem masked interrupt status. Returns the masked interrupt state of + /// the UARTDCDINTR interrupt. + DCDMMIS: u1, + /// nUARTDSR modem masked interrupt status. Returns the masked interrupt state of + /// the UARTDSRINTR interrupt. + DSRMMIS: u1, + /// Receive masked interrupt status. Returns the masked interrupt state of the + /// UARTRXINTR interrupt. + RXMIS: u1, + /// Transmit masked interrupt status. Returns the masked interrupt state of the + /// UARTTXINTR interrupt. + TXMIS: u1, + /// Receive timeout masked interrupt status. Returns the masked interrupt state of + /// the UARTRTINTR interrupt. + RTMIS: u1, + /// Framing error masked interrupt status. Returns the masked interrupt state of the + /// UARTFEINTR interrupt. + FEMIS: u1, + /// Parity error masked interrupt status. Returns the masked interrupt state of the + /// UARTPEINTR interrupt. + PEMIS: u1, + /// Break error masked interrupt status. Returns the masked interrupt state of the + /// UARTBEINTR interrupt. + BEMIS: u1, + /// Overrun error masked interrupt status. Returns the masked interrupt state of the + /// UARTOEINTR interrupt. + OEMIS: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + }), base_address + 0x40); + + /// address: 0x40038044 + /// Interrupt Clear Register, UARTICR + pub const UARTICR = @intToPtr(*volatile Mmio(32, packed struct { + /// nUARTRI modem interrupt clear. Clears the UARTRIINTR interrupt. + RIMIC: u1, + /// nUARTCTS modem interrupt clear. Clears the UARTCTSINTR interrupt. + CTSMIC: u1, + /// nUARTDCD modem interrupt clear. Clears the UARTDCDINTR interrupt. + DCDMIC: u1, + /// nUARTDSR modem interrupt clear. Clears the UARTDSRINTR interrupt. + DSRMIC: u1, + /// Receive interrupt clear. Clears the UARTRXINTR interrupt. + RXIC: u1, + /// Transmit interrupt clear. Clears the UARTTXINTR interrupt. + TXIC: u1, + /// Receive timeout interrupt clear. Clears the UARTRTINTR interrupt. + RTIC: u1, + /// Framing error interrupt clear. Clears the UARTFEINTR interrupt. + FEIC: u1, + /// Parity error interrupt clear. Clears the UARTPEINTR interrupt. + PEIC: u1, + /// Break error interrupt clear. Clears the UARTBEINTR interrupt. + BEIC: u1, + /// Overrun error interrupt clear. Clears the UARTOEINTR interrupt. + OEIC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + }), base_address + 0x44); + + /// address: 0x40038048 + /// DMA Control Register, UARTDMACR + pub const UARTDMACR = @intToPtr(*volatile Mmio(32, packed struct { + /// Receive DMA enable. If this bit is set to 1, DMA for the receive FIFO is + /// enabled. + RXDMAE: u1, + /// Transmit DMA enable. If this bit is set to 1, DMA for the transmit FIFO is + /// enabled. + TXDMAE: u1, + /// DMA on error. If this bit is set to 1, the DMA receive request outputs, + /// UARTRXDMASREQ or UARTRXDMABREQ, are disabled when the UART error interrupt is + /// asserted. + DMAONERR: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + }), base_address + 0x48); + + /// address: 0x40038fe0 + /// UARTPeriphID0 Register + pub const UARTPERIPHID0 = @intToPtr(*volatile Mmio(32, packed struct { + /// These bits read back as 0x11 + PARTNUMBER0: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0xfe0); + + /// address: 0x40038fe4 + /// UARTPeriphID1 Register + pub const UARTPERIPHID1 = @intToPtr(*volatile Mmio(32, packed struct { + /// These bits read back as 0x0 + PARTNUMBER1: u4, + /// These bits read back as 0x1 + DESIGNER0: u4, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0xfe4); + + /// address: 0x40038fe8 + /// UARTPeriphID2 Register + pub const UARTPERIPHID2 = @intToPtr(*volatile Mmio(32, packed struct { + /// These bits read back as 0x4 + DESIGNER1: u4, + /// This field depends on the revision of the UART: r1p0 0x0 r1p1 0x1 r1p3 0x2 r1p4 + /// 0x2 r1p5 0x3 + REVISION: u4, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0xfe8); + + /// address: 0x40038fec + /// UARTPeriphID3 Register + pub const UARTPERIPHID3 = @intToPtr(*volatile Mmio(32, packed struct { + /// These bits read back as 0x00 + CONFIGURATION: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0xfec); + + /// address: 0x40038ff0 + /// UARTPCellID0 Register + pub const UARTPCELLID0 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xff0); + + /// address: 0x40038ff4 + /// UARTPCellID1 Register + pub const UARTPCELLID1 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xff4); + + /// address: 0x40038ff8 + /// UARTPCellID2 Register + pub const UARTPCELLID2 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xff8); + + /// address: 0x40038ffc + /// UARTPCellID3 Register + pub const UARTPCELLID3 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xffc); + }; + pub const SPI0 = struct { + pub const base_address = 0x4003c000; + pub const version = "1"; + + /// address: 0x4003c000 + /// Control register 0, SSPCR0 on page 3-4 + pub const SSPCR0 = @intToPtr(*volatile Mmio(32, packed struct { + /// Data Size Select: 0000 Reserved, undefined operation. 0001 Reserved, undefined + /// operation. 0010 Reserved, undefined operation. 0011 4-bit data. 0100 5-bit data. + /// 0101 6-bit data. 0110 7-bit data. 0111 8-bit data. 1000 9-bit data. 1001 10-bit + /// data. 1010 11-bit data. 1011 12-bit data. 1100 13-bit data. 1101 14-bit data. + /// 1110 15-bit data. 1111 16-bit data. + DSS: u4, + /// Frame format: 00 Motorola SPI frame format. 01 TI synchronous serial frame + /// format. 10 National Microwire frame format. 11 Reserved, undefined operation. + FRF: u2, + /// SSPCLKOUT polarity, applicable to Motorola SPI frame format only. See Motorola + /// SPI frame format on page 2-10. + SPO: u1, + /// SSPCLKOUT phase, applicable to Motorola SPI frame format only. See Motorola SPI + /// frame format on page 2-10. + SPH: u1, + /// Serial clock rate. The value SCR is used to generate the transmit and receive + /// bit rate of the PrimeCell SSP. The bit rate is: F SSPCLK CPSDVSR x (1+SCR) where + /// CPSDVSR is an even value from 2-254, programmed through the SSPCPSR register and + /// SCR is a value from 0-255. + SCR: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + }), base_address + 0x0); + + /// address: 0x4003c004 + /// Control register 1, SSPCR1 on page 3-5 + pub const SSPCR1 = @intToPtr(*volatile Mmio(32, packed struct { + /// Loop back mode: 0 Normal serial port operation enabled. 1 Output of transmit + /// serial shifter is connected to input of receive serial shifter internally. + LBM: u1, + /// Synchronous serial port enable: 0 SSP operation disabled. 1 SSP operation + /// enabled. + SSE: u1, + /// Master or slave mode select. This bit can be modified only when the PrimeCell + /// SSP is disabled, SSE=0: 0 Device configured as master, default. 1 Device + /// configured as slave. + MS: u1, + /// Slave-mode output disable. This bit is relevant only in the slave mode, MS=1. In + /// multiple-slave systems, it is possible for an PrimeCell SSP master to broadcast + /// a message to all slaves in the system while ensuring that only one slave drives + /// data onto its serial output line. In such systems the RXD lines from multiple + /// slaves could be tied together. To operate in such systems, the SOD bit can be + /// set if the PrimeCell SSP slave is not supposed to drive the SSPTXD line: 0 SSP + /// can drive the SSPTXD output in slave mode. 1 SSP must not drive the SSPTXD + /// output in slave mode. + SOD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + }), base_address + 0x4); + + /// address: 0x4003c008 + /// Data register, SSPDR on page 3-6 + pub const SSPDR = @intToPtr(*volatile Mmio(32, packed struct { + /// Transmit/Receive FIFO: Read Receive FIFO. Write Transmit FIFO. You must + /// right-justify data when the PrimeCell SSP is programmed for a data size that is + /// less than 16 bits. Unused bits at the top are ignored by transmit logic. The + /// receive logic automatically right-justifies. + DATA: u16, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + }), base_address + 0x8); + + /// address: 0x4003c00c + /// Status register, SSPSR on page 3-7 + pub const SSPSR = @intToPtr(*volatile Mmio(32, packed struct { + /// Transmit FIFO empty, RO: 0 Transmit FIFO is not empty. 1 Transmit FIFO is empty. + TFE: u1, + /// Transmit FIFO not full, RO: 0 Transmit FIFO is full. 1 Transmit FIFO is not + /// full. + TNF: u1, + /// Receive FIFO not empty, RO: 0 Receive FIFO is empty. 1 Receive FIFO is not + /// empty. + RNE: u1, + /// Receive FIFO full, RO: 0 Receive FIFO is not full. 1 Receive FIFO is full. + RFF: u1, + /// PrimeCell SSP busy flag, RO: 0 SSP is idle. 1 SSP is currently transmitting + /// and/or receiving a frame or the transmit FIFO is not empty. + BSY: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + }), base_address + 0xc); + + /// address: 0x4003c010 + /// Clock prescale register, SSPCPSR on page 3-8 + pub const SSPCPSR = @intToPtr(*volatile Mmio(32, packed struct { + /// Clock prescale divisor. Must be an even number from 2-254, depending on the + /// frequency of SSPCLK. The least significant bit always returns zero on reads. + CPSDVSR: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x10); + + /// address: 0x4003c014 + /// Interrupt mask set or clear register, SSPIMSC on page 3-9 + pub const SSPIMSC = @intToPtr(*volatile Mmio(32, packed struct { + /// Receive overrun interrupt mask: 0 Receive FIFO written to while full condition + /// interrupt is masked. 1 Receive FIFO written to while full condition interrupt is + /// not masked. + RORIM: u1, + /// Receive timeout interrupt mask: 0 Receive FIFO not empty and no read prior to + /// timeout period interrupt is masked. 1 Receive FIFO not empty and no read prior + /// to timeout period interrupt is not masked. + RTIM: u1, + /// Receive FIFO interrupt mask: 0 Receive FIFO half full or less condition + /// interrupt is masked. 1 Receive FIFO half full or less condition interrupt is not + /// masked. + RXIM: u1, + /// Transmit FIFO interrupt mask: 0 Transmit FIFO half empty or less condition + /// interrupt is masked. 1 Transmit FIFO half empty or less condition interrupt is + /// not masked. + TXIM: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + }), base_address + 0x14); + + /// address: 0x4003c018 + /// Raw interrupt status register, SSPRIS on page 3-10 + pub const SSPRIS = @intToPtr(*volatile Mmio(32, packed struct { + /// Gives the raw interrupt state, prior to masking, of the SSPRORINTR interrupt + RORRIS: u1, + /// Gives the raw interrupt state, prior to masking, of the SSPRTINTR interrupt + RTRIS: u1, + /// Gives the raw interrupt state, prior to masking, of the SSPRXINTR interrupt + RXRIS: u1, + /// Gives the raw interrupt state, prior to masking, of the SSPTXINTR interrupt + TXRIS: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + }), base_address + 0x18); + + /// address: 0x4003c01c + /// Masked interrupt status register, SSPMIS on page 3-11 + pub const SSPMIS = @intToPtr(*volatile Mmio(32, packed struct { + /// Gives the receive over run masked interrupt status, after masking, of the + /// SSPRORINTR interrupt + RORMIS: u1, + /// Gives the receive timeout masked interrupt state, after masking, of the + /// SSPRTINTR interrupt + RTMIS: u1, + /// Gives the receive FIFO masked interrupt state, after masking, of the SSPRXINTR + /// interrupt + RXMIS: u1, + /// Gives the transmit FIFO masked interrupt state, after masking, of the SSPTXINTR + /// interrupt + TXMIS: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + }), base_address + 0x1c); + + /// address: 0x4003c020 + /// Interrupt clear register, SSPICR on page 3-11 + pub const SSPICR = @intToPtr(*volatile Mmio(32, packed struct { + /// Clears the SSPRORINTR interrupt + RORIC: u1, + /// Clears the SSPRTINTR interrupt + RTIC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + }), base_address + 0x20); + + /// address: 0x4003c024 + /// DMA control register, SSPDMACR on page 3-12 + pub const SSPDMACR = @intToPtr(*volatile Mmio(32, packed struct { + /// Receive DMA Enable. If this bit is set to 1, DMA for the receive FIFO is + /// enabled. + RXDMAE: u1, + /// Transmit DMA Enable. If this bit is set to 1, DMA for the transmit FIFO is + /// enabled. + TXDMAE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + }), base_address + 0x24); + + /// address: 0x4003cfe0 + /// Peripheral identification registers, SSPPeriphID0-3 on page 3-13 + pub const SSPPERIPHID0 = @intToPtr(*volatile Mmio(32, packed struct { + /// These bits read back as 0x22 + PARTNUMBER0: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0xfe0); + + /// address: 0x4003cfe4 + /// Peripheral identification registers, SSPPeriphID0-3 on page 3-13 + pub const SSPPERIPHID1 = @intToPtr(*volatile Mmio(32, packed struct { + /// These bits read back as 0x0 + PARTNUMBER1: u4, + /// These bits read back as 0x1 + DESIGNER0: u4, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0xfe4); + + /// address: 0x4003cfe8 + /// Peripheral identification registers, SSPPeriphID0-3 on page 3-13 + pub const SSPPERIPHID2 = @intToPtr(*volatile Mmio(32, packed struct { + /// These bits read back as 0x4 + DESIGNER1: u4, + /// These bits return the peripheral revision + REVISION: u4, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0xfe8); + + /// address: 0x4003cfec + /// Peripheral identification registers, SSPPeriphID0-3 on page 3-13 + pub const SSPPERIPHID3 = @intToPtr(*volatile Mmio(32, packed struct { + /// These bits read back as 0x00 + CONFIGURATION: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0xfec); + + /// address: 0x4003cff0 + /// PrimeCell identification registers, SSPPCellID0-3 on page 3-16 + pub const SSPPCELLID0 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xff0); + + /// address: 0x4003cff4 + /// PrimeCell identification registers, SSPPCellID0-3 on page 3-16 + pub const SSPPCELLID1 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xff4); + + /// address: 0x4003cff8 + /// PrimeCell identification registers, SSPPCellID0-3 on page 3-16 + pub const SSPPCELLID2 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xff8); + + /// address: 0x4003cffc + /// PrimeCell identification registers, SSPPCellID0-3 on page 3-16 + pub const SSPPCELLID3 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xffc); + }; + pub const SPI1 = struct { + pub const base_address = 0x40040000; + + /// address: 0x40040000 + /// Control register 0, SSPCR0 on page 3-4 + pub const SSPCR0 = @intToPtr(*volatile Mmio(32, packed struct { + /// Data Size Select: 0000 Reserved, undefined operation. 0001 Reserved, undefined + /// operation. 0010 Reserved, undefined operation. 0011 4-bit data. 0100 5-bit data. + /// 0101 6-bit data. 0110 7-bit data. 0111 8-bit data. 1000 9-bit data. 1001 10-bit + /// data. 1010 11-bit data. 1011 12-bit data. 1100 13-bit data. 1101 14-bit data. + /// 1110 15-bit data. 1111 16-bit data. + DSS: u4, + /// Frame format: 00 Motorola SPI frame format. 01 TI synchronous serial frame + /// format. 10 National Microwire frame format. 11 Reserved, undefined operation. + FRF: u2, + /// SSPCLKOUT polarity, applicable to Motorola SPI frame format only. See Motorola + /// SPI frame format on page 2-10. + SPO: u1, + /// SSPCLKOUT phase, applicable to Motorola SPI frame format only. See Motorola SPI + /// frame format on page 2-10. + SPH: u1, + /// Serial clock rate. The value SCR is used to generate the transmit and receive + /// bit rate of the PrimeCell SSP. The bit rate is: F SSPCLK CPSDVSR x (1+SCR) where + /// CPSDVSR is an even value from 2-254, programmed through the SSPCPSR register and + /// SCR is a value from 0-255. + SCR: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + }), base_address + 0x0); + + /// address: 0x40040004 + /// Control register 1, SSPCR1 on page 3-5 + pub const SSPCR1 = @intToPtr(*volatile Mmio(32, packed struct { + /// Loop back mode: 0 Normal serial port operation enabled. 1 Output of transmit + /// serial shifter is connected to input of receive serial shifter internally. + LBM: u1, + /// Synchronous serial port enable: 0 SSP operation disabled. 1 SSP operation + /// enabled. + SSE: u1, + /// Master or slave mode select. This bit can be modified only when the PrimeCell + /// SSP is disabled, SSE=0: 0 Device configured as master, default. 1 Device + /// configured as slave. + MS: u1, + /// Slave-mode output disable. This bit is relevant only in the slave mode, MS=1. In + /// multiple-slave systems, it is possible for an PrimeCell SSP master to broadcast + /// a message to all slaves in the system while ensuring that only one slave drives + /// data onto its serial output line. In such systems the RXD lines from multiple + /// slaves could be tied together. To operate in such systems, the SOD bit can be + /// set if the PrimeCell SSP slave is not supposed to drive the SSPTXD line: 0 SSP + /// can drive the SSPTXD output in slave mode. 1 SSP must not drive the SSPTXD + /// output in slave mode. + SOD: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + }), base_address + 0x4); + + /// address: 0x40040008 + /// Data register, SSPDR on page 3-6 + pub const SSPDR = @intToPtr(*volatile Mmio(32, packed struct { + /// Transmit/Receive FIFO: Read Receive FIFO. Write Transmit FIFO. You must + /// right-justify data when the PrimeCell SSP is programmed for a data size that is + /// less than 16 bits. Unused bits at the top are ignored by transmit logic. The + /// receive logic automatically right-justifies. + DATA: u16, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + }), base_address + 0x8); + + /// address: 0x4004000c + /// Status register, SSPSR on page 3-7 + pub const SSPSR = @intToPtr(*volatile Mmio(32, packed struct { + /// Transmit FIFO empty, RO: 0 Transmit FIFO is not empty. 1 Transmit FIFO is empty. + TFE: u1, + /// Transmit FIFO not full, RO: 0 Transmit FIFO is full. 1 Transmit FIFO is not + /// full. + TNF: u1, + /// Receive FIFO not empty, RO: 0 Receive FIFO is empty. 1 Receive FIFO is not + /// empty. + RNE: u1, + /// Receive FIFO full, RO: 0 Receive FIFO is not full. 1 Receive FIFO is full. + RFF: u1, + /// PrimeCell SSP busy flag, RO: 0 SSP is idle. 1 SSP is currently transmitting + /// and/or receiving a frame or the transmit FIFO is not empty. + BSY: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + }), base_address + 0xc); + + /// address: 0x40040010 + /// Clock prescale register, SSPCPSR on page 3-8 + pub const SSPCPSR = @intToPtr(*volatile Mmio(32, packed struct { + /// Clock prescale divisor. Must be an even number from 2-254, depending on the + /// frequency of SSPCLK. The least significant bit always returns zero on reads. + CPSDVSR: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x10); + + /// address: 0x40040014 + /// Interrupt mask set or clear register, SSPIMSC on page 3-9 + pub const SSPIMSC = @intToPtr(*volatile Mmio(32, packed struct { + /// Receive overrun interrupt mask: 0 Receive FIFO written to while full condition + /// interrupt is masked. 1 Receive FIFO written to while full condition interrupt is + /// not masked. + RORIM: u1, + /// Receive timeout interrupt mask: 0 Receive FIFO not empty and no read prior to + /// timeout period interrupt is masked. 1 Receive FIFO not empty and no read prior + /// to timeout period interrupt is not masked. + RTIM: u1, + /// Receive FIFO interrupt mask: 0 Receive FIFO half full or less condition + /// interrupt is masked. 1 Receive FIFO half full or less condition interrupt is not + /// masked. + RXIM: u1, + /// Transmit FIFO interrupt mask: 0 Transmit FIFO half empty or less condition + /// interrupt is masked. 1 Transmit FIFO half empty or less condition interrupt is + /// not masked. + TXIM: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + }), base_address + 0x14); + + /// address: 0x40040018 + /// Raw interrupt status register, SSPRIS on page 3-10 + pub const SSPRIS = @intToPtr(*volatile Mmio(32, packed struct { + /// Gives the raw interrupt state, prior to masking, of the SSPRORINTR interrupt + RORRIS: u1, + /// Gives the raw interrupt state, prior to masking, of the SSPRTINTR interrupt + RTRIS: u1, + /// Gives the raw interrupt state, prior to masking, of the SSPRXINTR interrupt + RXRIS: u1, + /// Gives the raw interrupt state, prior to masking, of the SSPTXINTR interrupt + TXRIS: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + }), base_address + 0x18); + + /// address: 0x4004001c + /// Masked interrupt status register, SSPMIS on page 3-11 + pub const SSPMIS = @intToPtr(*volatile Mmio(32, packed struct { + /// Gives the receive over run masked interrupt status, after masking, of the + /// SSPRORINTR interrupt + RORMIS: u1, + /// Gives the receive timeout masked interrupt state, after masking, of the + /// SSPRTINTR interrupt + RTMIS: u1, + /// Gives the receive FIFO masked interrupt state, after masking, of the SSPRXINTR + /// interrupt + RXMIS: u1, + /// Gives the transmit FIFO masked interrupt state, after masking, of the SSPTXINTR + /// interrupt + TXMIS: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + }), base_address + 0x1c); + + /// address: 0x40040020 + /// Interrupt clear register, SSPICR on page 3-11 + pub const SSPICR = @intToPtr(*volatile Mmio(32, packed struct { + /// Clears the SSPRORINTR interrupt + RORIC: u1, + /// Clears the SSPRTINTR interrupt + RTIC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + }), base_address + 0x20); + + /// address: 0x40040024 + /// DMA control register, SSPDMACR on page 3-12 + pub const SSPDMACR = @intToPtr(*volatile Mmio(32, packed struct { + /// Receive DMA Enable. If this bit is set to 1, DMA for the receive FIFO is + /// enabled. + RXDMAE: u1, + /// Transmit DMA Enable. If this bit is set to 1, DMA for the transmit FIFO is + /// enabled. + TXDMAE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + }), base_address + 0x24); + + /// address: 0x40040fe0 + /// Peripheral identification registers, SSPPeriphID0-3 on page 3-13 + pub const SSPPERIPHID0 = @intToPtr(*volatile Mmio(32, packed struct { + /// These bits read back as 0x22 + PARTNUMBER0: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0xfe0); + + /// address: 0x40040fe4 + /// Peripheral identification registers, SSPPeriphID0-3 on page 3-13 + pub const SSPPERIPHID1 = @intToPtr(*volatile Mmio(32, packed struct { + /// These bits read back as 0x0 + PARTNUMBER1: u4, + /// These bits read back as 0x1 + DESIGNER0: u4, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0xfe4); + + /// address: 0x40040fe8 + /// Peripheral identification registers, SSPPeriphID0-3 on page 3-13 + pub const SSPPERIPHID2 = @intToPtr(*volatile Mmio(32, packed struct { + /// These bits read back as 0x4 + DESIGNER1: u4, + /// These bits return the peripheral revision + REVISION: u4, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0xfe8); + + /// address: 0x40040fec + /// Peripheral identification registers, SSPPeriphID0-3 on page 3-13 + pub const SSPPERIPHID3 = @intToPtr(*volatile Mmio(32, packed struct { + /// These bits read back as 0x00 + CONFIGURATION: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0xfec); + + /// address: 0x40040ff0 + /// PrimeCell identification registers, SSPPCellID0-3 on page 3-16 + pub const SSPPCELLID0 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xff0); + + /// address: 0x40040ff4 + /// PrimeCell identification registers, SSPPCellID0-3 on page 3-16 + pub const SSPPCELLID1 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xff4); + + /// address: 0x40040ff8 + /// PrimeCell identification registers, SSPPCellID0-3 on page 3-16 + pub const SSPPCELLID2 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xff8); + + /// address: 0x40040ffc + /// PrimeCell identification registers, SSPPCellID0-3 on page 3-16 + pub const SSPPCELLID3 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xffc); + }; + + /// DW_apb_i2c address block\n\n + /// List of configuration constants for the Synopsys I2C hardware (you may see + /// references to these in I2C register header; these are *fixed* values, set at + /// hardware design time):\n\n + /// IC_ULTRA_FAST_MODE ................ 0x0\n + /// IC_UFM_TBUF_CNT_DEFAULT ........... 0x8\n + /// IC_UFM_SCL_LOW_COUNT .............. 0x0008\n + /// IC_UFM_SCL_HIGH_COUNT ............. 0x0006\n + /// IC_TX_TL .......................... 0x0\n + /// IC_TX_CMD_BLOCK ................... 0x1\n + /// IC_HAS_DMA ........................ 0x1\n + /// IC_HAS_ASYNC_FIFO ................. 0x0\n + /// IC_SMBUS_ARP ...................... 0x0\n + /// IC_FIRST_DATA_BYTE_STATUS ......... 0x1\n + /// IC_INTR_IO ........................ 0x1\n + /// IC_MASTER_MODE .................... 0x1\n + /// IC_DEFAULT_ACK_GENERAL_CALL ....... 0x1\n + /// IC_INTR_POL ....................... 0x1\n + /// IC_OPTIONAL_SAR ................... 0x0\n + /// IC_DEFAULT_TAR_SLAVE_ADDR ......... 0x055\n + /// IC_DEFAULT_SLAVE_ADDR ............. 0x055\n + /// IC_DEFAULT_HS_SPKLEN .............. 0x1\n + /// IC_FS_SCL_HIGH_COUNT .............. 0x0006\n + /// IC_HS_SCL_LOW_COUNT ............... 0x0008\n + /// IC_DEVICE_ID_VALUE ................ 0x0\n + /// IC_10BITADDR_MASTER ............... 0x0\n + /// IC_CLK_FREQ_OPTIMIZATION .......... 0x0\n + /// IC_DEFAULT_FS_SPKLEN .............. 0x7\n + /// IC_ADD_ENCODED_PARAMS ............. 0x0\n + /// IC_DEFAULT_SDA_HOLD ............... 0x000001\n + /// IC_DEFAULT_SDA_SETUP .............. 0x64\n + /// IC_AVOID_RX_FIFO_FLUSH_ON_TX_ABRT . 0x0\n + /// IC_CLOCK_PERIOD ................... 100\n + /// IC_EMPTYFIFO_HOLD_MASTER_EN ....... 1\n + /// IC_RESTART_EN ..................... 0x1\n + /// IC_TX_CMD_BLOCK_DEFAULT ........... 0x0\n + /// IC_BUS_CLEAR_FEATURE .............. 0x0\n + /// IC_CAP_LOADING .................... 100\n + /// IC_FS_SCL_LOW_COUNT ............... 0x000d\n + /// APB_DATA_WIDTH .................... 32\n + /// IC_SDA_STUCK_TIMEOUT_DEFAULT ...... 0xffffffff\n + /// IC_SLV_DATA_NACK_ONLY ............. 0x1\n + /// IC_10BITADDR_SLAVE ................ 0x0\n + /// IC_CLK_TYPE ....................... 0x0\n + /// IC_SMBUS_UDID_MSB ................. 0x0\n + /// IC_SMBUS_SUSPEND_ALERT ............ 0x0\n + /// IC_HS_SCL_HIGH_COUNT .............. 0x0006\n + /// IC_SLV_RESTART_DET_EN ............. 0x1\n + /// IC_SMBUS .......................... 0x0\n + /// IC_OPTIONAL_SAR_DEFAULT ........... 0x0\n + /// IC_PERSISTANT_SLV_ADDR_DEFAULT .... 0x0\n + /// IC_USE_COUNTS ..................... 0x0\n + /// IC_RX_BUFFER_DEPTH ................ 16\n + /// IC_SCL_STUCK_TIMEOUT_DEFAULT ...... 0xffffffff\n + /// IC_RX_FULL_HLD_BUS_EN ............. 0x1\n + /// IC_SLAVE_DISABLE .................. 0x1\n + /// IC_RX_TL .......................... 0x0\n + /// IC_DEVICE_ID ...................... 0x0\n + /// IC_HC_COUNT_VALUES ................ 0x0\n + /// I2C_DYNAMIC_TAR_UPDATE ............ 0\n + /// IC_SMBUS_CLK_LOW_MEXT_DEFAULT ..... 0xffffffff\n + /// IC_SMBUS_CLK_LOW_SEXT_DEFAULT ..... 0xffffffff\n + /// IC_HS_MASTER_CODE ................. 0x1\n + /// IC_SMBUS_RST_IDLE_CNT_DEFAULT ..... 0xffff\n + /// IC_SMBUS_UDID_LSB_DEFAULT ......... 0xffffffff\n + /// IC_SS_SCL_HIGH_COUNT .............. 0x0028\n + /// IC_SS_SCL_LOW_COUNT ............... 0x002f\n + /// IC_MAX_SPEED_MODE ................. 0x2\n + /// IC_STAT_FOR_CLK_STRETCH ........... 0x0\n + /// IC_STOP_DET_IF_MASTER_ACTIVE ...... 0x0\n + /// IC_DEFAULT_UFM_SPKLEN ............. 0x1\n + /// IC_TX_BUFFER_DEPTH ................ 16 + pub const I2C0 = struct { + pub const base_address = 0x40044000; + pub const version = "1"; + + /// address: 0x40044000 + /// I2C Control Register. This register can be written only when the DW_apb_i2c is + /// disabled, which corresponds to the IC_ENABLE[0] register being set to 0. Writes + /// at other times have no effect.\n\n + /// Read/Write Access: - bit 10 is read only. - bit 11 is read only - bit 16 is read + /// only - bit 17 is read only - bits 18 and 19 are read only. + pub const IC_CON = @intToPtr(*volatile Mmio(32, packed struct { + /// This bit controls whether the DW_apb_i2c master is enabled.\n\n + /// NOTE: Software should ensure that if this bit is written with '1' then bit 6 + /// should also be written with a '1'. + MASTER_MODE: u1, + /// These bits control at which speed the DW_apb_i2c operates; its setting is + /// relevant only if one is operating the DW_apb_i2c in master mode. Hardware + /// protects against illegal values being programmed by software. These bits must be + /// programmed appropriately for slave mode also, as it is used to capture correct + /// value of spike filter as per the speed mode.\n\n + /// This register should be programmed only with a value in the range of 1 to + /// IC_MAX_SPEED_MODE; otherwise, hardware updates this register with the value of + /// IC_MAX_SPEED_MODE.\n\n + /// 1: standard mode (100 kbit/s)\n\n + /// 2: fast mode (<=400 kbit/s) or fast mode plus (<=1000Kbit/s)\n\n + /// 3: high speed mode (3.4 Mbit/s)\n\n + /// Note: This field is not applicable when IC_ULTRA_FAST_MODE=1 + SPEED: u2, + /// When acting as a slave, this bit controls whether the DW_apb_i2c responds to 7- + /// or 10-bit addresses. - 0: 7-bit addressing. The DW_apb_i2c ignores transactions + /// that involve 10-bit addressing; for 7-bit addressing, only the lower 7 bits of + /// the IC_SAR register are compared. - 1: 10-bit addressing. The DW_apb_i2c + /// responds to only 10-bit addressing transfers that match the full 10 bits of the + /// IC_SAR register. + IC_10BITADDR_SLAVE: u1, + /// Controls whether the DW_apb_i2c starts its transfers in 7- or 10-bit addressing + /// mode when acting as a master. - 0: 7-bit addressing - 1: 10-bit addressing + IC_10BITADDR_MASTER: u1, + /// Determines whether RESTART conditions may be sent when acting as a master. Some + /// older slaves do not support handling RESTART conditions; however, RESTART + /// conditions are used in several DW_apb_i2c operations. When RESTART is disabled, + /// the master is prohibited from performing the following functions: - Sending a + /// START BYTE - Performing any high-speed mode operation - High-speed mode + /// operation - Performing direction changes in combined format mode - Performing a + /// read operation with a 10-bit address By replacing RESTART condition followed by + /// a STOP and a subsequent START condition, split operations are broken down into + /// multiple DW_apb_i2c transfers. If the above operations are performed, it will + /// result in setting bit 6 (TX_ABRT) of the IC_RAW_INTR_STAT register.\n\n + /// Reset value: ENABLED + IC_RESTART_EN: u1, + /// This bit controls whether I2C has its slave disabled, which means once the + /// presetn signal is applied, then this bit is set and the slave is disabled.\n\n + /// If this bit is set (slave is disabled), DW_apb_i2c functions only as a master + /// and does not perform any action that requires a slave.\n\n + /// NOTE: Software should ensure that if this bit is written with 0, then bit 0 + /// should also be written with a 0. + IC_SLAVE_DISABLE: u1, + /// In slave mode: - 1'b1: issues the STOP_DET interrupt only when it is addressed. + /// - 1'b0: issues the STOP_DET irrespective of whether it's addressed or not. Reset + /// value: 0x0\n\n + /// NOTE: During a general call address, this slave does not issue the STOP_DET + /// interrupt if STOP_DET_IF_ADDRESSED = 1'b1, even if the slave responds to the + /// general call address by generating ACK. The STOP_DET interrupt is generated only + /// when the transmitted address matches the slave address (SAR). + STOP_DET_IFADDRESSED: u1, + /// This bit controls the generation of the TX_EMPTY interrupt, as described in the + /// IC_RAW_INTR_STAT register.\n\n + /// Reset value: 0x0. + TX_EMPTY_CTRL: u1, + /// This bit controls whether DW_apb_i2c should hold the bus when the Rx FIFO is + /// physically full to its RX_BUFFER_DEPTH, as described in the + /// IC_RX_FULL_HLD_BUS_EN parameter.\n\n + /// Reset value: 0x0. + RX_FIFO_FULL_HLD_CTRL: u1, + /// Master issues the STOP_DET interrupt irrespective of whether master is active or + /// not + STOP_DET_IF_MASTER_ACTIVE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + }), base_address + 0x0); + + /// address: 0x40044004 + /// I2C Target Address Register\n\n + /// This register is 12 bits wide, and bits 31:12 are reserved. This register can be + /// written to only when IC_ENABLE[0] is set to 0.\n\n + /// Note: If the software or application is aware that the DW_apb_i2c is not using + /// the TAR address for the pending commands in the Tx FIFO, then it is possible to + /// update the TAR address even while the Tx FIFO has entries (IC_STATUS[2]= 0). - + /// It is not necessary to perform any write to this register if DW_apb_i2c is + /// enabled as an I2C slave only. + pub const IC_TAR = @intToPtr(*volatile Mmio(32, packed struct { + /// This is the target address for any master transaction. When transmitting a + /// General Call, these bits are ignored. To generate a START BYTE, the CPU needs to + /// write only once into these bits.\n\n + /// If the IC_TAR and IC_SAR are the same, loopback exists but the FIFOs are shared + /// between master and slave, so full loopback is not feasible. Only one direction + /// loopback mode is supported (simplex), not duplex. A master cannot transmit to + /// itself; it can transmit to only a slave. + IC_TAR: u10, + /// If bit 11 (SPECIAL) is set to 1 and bit 13(Device-ID) is set to 0, then this bit + /// indicates whether a General Call or START byte command is to be performed by the + /// DW_apb_i2c. - 0: General Call Address - after issuing a General Call, only + /// writes may be performed. Attempting to issue a read command results in setting + /// bit 6 (TX_ABRT) of the IC_RAW_INTR_STAT register. The DW_apb_i2c remains in + /// General Call mode until the SPECIAL bit value (bit 11) is cleared. - 1: START + /// BYTE Reset value: 0x0 + GC_OR_START: u1, + /// This bit indicates whether software performs a Device-ID or General Call or + /// START BYTE command. - 0: ignore bit 10 GC_OR_START and use IC_TAR normally - 1: + /// perform special I2C command as specified in Device_ID or GC_OR_START bit Reset + /// value: 0x0 + SPECIAL: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x4); + + /// address: 0x40044008 + /// I2C Slave Address Register + pub const IC_SAR = @intToPtr(*volatile MmioInt(32, u10), base_address + 0x8); + + /// address: 0x40044010 + /// I2C Rx/Tx Data Buffer and Command Register; this is the register the CPU writes + /// to when filling the TX FIFO and the CPU reads from when retrieving bytes from RX + /// FIFO.\n\n + /// The size of the register changes as follows:\n\n + /// Write: - 11 bits when IC_EMPTYFIFO_HOLD_MASTER_EN=1 - 9 bits when + /// IC_EMPTYFIFO_HOLD_MASTER_EN=0 Read: - 12 bits when IC_FIRST_DATA_BYTE_STATUS = 1 + /// - 8 bits when IC_FIRST_DATA_BYTE_STATUS = 0 Note: In order for the DW_apb_i2c to + /// continue acknowledging reads, a read command should be written for every byte + /// that is to be received; otherwise the DW_apb_i2c will stop acknowledging. + pub const IC_DATA_CMD = @intToPtr(*volatile Mmio(32, packed struct { + /// This register contains the data to be transmitted or received on the I2C bus. If + /// you are writing to this register and want to perform a read, bits 7:0 (DAT) are + /// ignored by the DW_apb_i2c. However, when you read this register, these bits + /// return the value of data received on the DW_apb_i2c interface.\n\n + /// Reset value: 0x0 + DAT: u8, + /// This bit controls whether a read or a write is performed. This bit does not + /// control the direction when the DW_apb_i2con acts as a slave. It controls only + /// the direction when it acts as a master.\n\n + /// When a command is entered in the TX FIFO, this bit distinguishes the write and + /// read commands. In slave-receiver mode, this bit is a 'don't care' because writes + /// to this register are not required. In slave-transmitter mode, a '0' indicates + /// that the data in IC_DATA_CMD is to be transmitted.\n\n + /// When programming this bit, you should remember the following: attempting to + /// perform a read operation after a General Call command has been sent results in a + /// TX_ABRT interrupt (bit 6 of the IC_RAW_INTR_STAT register), unless bit 11 + /// (SPECIAL) in the IC_TAR register has been cleared. If a '1' is written to this + /// bit after receiving a RD_REQ interrupt, then a TX_ABRT interrupt occurs.\n\n + /// Reset value: 0x0 + CMD: u1, + /// This bit controls whether a STOP is issued after the byte is sent or + /// received.\n\n + /// - 1 - STOP is issued after this byte, regardless of whether or not the Tx FIFO + /// is empty. If the Tx FIFO is not empty, the master immediately tries to start a + /// new transfer by issuing a START and arbitrating for the bus. - 0 - STOP is not + /// issued after this byte, regardless of whether or not the Tx FIFO is empty. If + /// the Tx FIFO is not empty, the master continues the current transfer by + /// sending/receiving data bytes according to the value of the CMD bit. If the Tx + /// FIFO is empty, the master holds the SCL line low and stalls the bus until a new + /// command is available in the Tx FIFO. Reset value: 0x0 + STOP: u1, + /// This bit controls whether a RESTART is issued before the byte is sent or + /// received.\n\n + /// 1 - If IC_RESTART_EN is 1, a RESTART is issued before the data is sent/received + /// (according to the value of CMD), regardless of whether or not the transfer + /// direction is changing from the previous command; if IC_RESTART_EN is 0, a STOP + /// followed by a START is issued instead.\n\n + /// 0 - If IC_RESTART_EN is 1, a RESTART is issued only if the transfer direction is + /// changing from the previous command; if IC_RESTART_EN is 0, a STOP followed by a + /// START is issued instead.\n\n + /// Reset value: 0x0 + RESTART: u1, + /// Indicates the first data byte received after the address phase for receive + /// transfer in Master receiver or Slave receiver mode.\n\n + /// Reset value : 0x0\n\n + /// NOTE: In case of APB_DATA_WIDTH=8,\n\n + /// 1. The user has to perform two APB Reads to IC_DATA_CMD in order to get status + /// on 11 bit.\n\n + /// 2. In order to read the 11 bit, the user has to perform the first data byte read + /// [7:0] (offset 0x10) and then perform the second read [15:8] (offset 0x11) in + /// order to know the status of 11 bit (whether the data received in previous read + /// is a first data byte or not).\n\n + /// 3. The 11th bit is an optional read field, user can ignore 2nd byte read [15:8] + /// (offset 0x11) if not interested in FIRST_DATA_BYTE status. + FIRST_DATA_BYTE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x10); + + /// address: 0x40044014 + /// Standard Speed I2C Clock SCL High Count Register + pub const IC_SS_SCL_HCNT = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x14); + + /// address: 0x40044018 + /// Standard Speed I2C Clock SCL Low Count Register + pub const IC_SS_SCL_LCNT = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x18); + + /// address: 0x4004401c + /// Fast Mode or Fast Mode Plus I2C Clock SCL High Count Register + pub const IC_FS_SCL_HCNT = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x1c); + + /// address: 0x40044020 + /// Fast Mode or Fast Mode Plus I2C Clock SCL Low Count Register + pub const IC_FS_SCL_LCNT = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x20); + + /// address: 0x4004402c + /// I2C Interrupt Status Register\n\n + /// Each bit in this register has a corresponding mask bit in the IC_INTR_MASK + /// register. These bits are cleared by reading the matching interrupt clear + /// register. The unmasked raw versions of these bits are available in the + /// IC_RAW_INTR_STAT register. + pub const IC_INTR_STAT = @intToPtr(*volatile Mmio(32, packed struct { + /// See IC_RAW_INTR_STAT for a detailed description of R_RX_UNDER bit.\n\n + /// Reset value: 0x0 + R_RX_UNDER: u1, + /// See IC_RAW_INTR_STAT for a detailed description of R_RX_OVER bit.\n\n + /// Reset value: 0x0 + R_RX_OVER: u1, + /// See IC_RAW_INTR_STAT for a detailed description of R_RX_FULL bit.\n\n + /// Reset value: 0x0 + R_RX_FULL: u1, + /// See IC_RAW_INTR_STAT for a detailed description of R_TX_OVER bit.\n\n + /// Reset value: 0x0 + R_TX_OVER: u1, + /// See IC_RAW_INTR_STAT for a detailed description of R_TX_EMPTY bit.\n\n + /// Reset value: 0x0 + R_TX_EMPTY: u1, + /// See IC_RAW_INTR_STAT for a detailed description of R_RD_REQ bit.\n\n + /// Reset value: 0x0 + R_RD_REQ: u1, + /// See IC_RAW_INTR_STAT for a detailed description of R_TX_ABRT bit.\n\n + /// Reset value: 0x0 + R_TX_ABRT: u1, + /// See IC_RAW_INTR_STAT for a detailed description of R_RX_DONE bit.\n\n + /// Reset value: 0x0 + R_RX_DONE: u1, + /// See IC_RAW_INTR_STAT for a detailed description of R_ACTIVITY bit.\n\n + /// Reset value: 0x0 + R_ACTIVITY: u1, + /// See IC_RAW_INTR_STAT for a detailed description of R_STOP_DET bit.\n\n + /// Reset value: 0x0 + R_STOP_DET: u1, + /// See IC_RAW_INTR_STAT for a detailed description of R_START_DET bit.\n\n + /// Reset value: 0x0 + R_START_DET: u1, + /// See IC_RAW_INTR_STAT for a detailed description of R_GEN_CALL bit.\n\n + /// Reset value: 0x0 + R_GEN_CALL: u1, + /// See IC_RAW_INTR_STAT for a detailed description of R_RESTART_DET bit.\n\n + /// Reset value: 0x0 + R_RESTART_DET: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + }), base_address + 0x2c); + + /// address: 0x40044030 + /// I2C Interrupt Mask Register.\n\n + /// These bits mask their corresponding interrupt status bits. This register is + /// active low; a value of 0 masks the interrupt, whereas a value of 1 unmasks the + /// interrupt. + pub const IC_INTR_MASK = @intToPtr(*volatile Mmio(32, packed struct { + /// This bit masks the R_RX_UNDER interrupt in IC_INTR_STAT register.\n\n + /// Reset value: 0x1 + M_RX_UNDER: u1, + /// This bit masks the R_RX_OVER interrupt in IC_INTR_STAT register.\n\n + /// Reset value: 0x1 + M_RX_OVER: u1, + /// This bit masks the R_RX_FULL interrupt in IC_INTR_STAT register.\n\n + /// Reset value: 0x1 + M_RX_FULL: u1, + /// This bit masks the R_TX_OVER interrupt in IC_INTR_STAT register.\n\n + /// Reset value: 0x1 + M_TX_OVER: u1, + /// This bit masks the R_TX_EMPTY interrupt in IC_INTR_STAT register.\n\n + /// Reset value: 0x1 + M_TX_EMPTY: u1, + /// This bit masks the R_RD_REQ interrupt in IC_INTR_STAT register.\n\n + /// Reset value: 0x1 + M_RD_REQ: u1, + /// This bit masks the R_TX_ABRT interrupt in IC_INTR_STAT register.\n\n + /// Reset value: 0x1 + M_TX_ABRT: u1, + /// This bit masks the R_RX_DONE interrupt in IC_INTR_STAT register.\n\n + /// Reset value: 0x1 + M_RX_DONE: u1, + /// This bit masks the R_ACTIVITY interrupt in IC_INTR_STAT register.\n\n + /// Reset value: 0x0 + M_ACTIVITY: u1, + /// This bit masks the R_STOP_DET interrupt in IC_INTR_STAT register.\n\n + /// Reset value: 0x0 + M_STOP_DET: u1, + /// This bit masks the R_START_DET interrupt in IC_INTR_STAT register.\n\n + /// Reset value: 0x0 + M_START_DET: u1, + /// This bit masks the R_GEN_CALL interrupt in IC_INTR_STAT register.\n\n + /// Reset value: 0x1 + M_GEN_CALL: u1, + /// This bit masks the R_RESTART_DET interrupt in IC_INTR_STAT register.\n\n + /// Reset value: 0x0 + M_RESTART_DET: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + }), base_address + 0x30); + + /// address: 0x40044034 + /// I2C Raw Interrupt Status Register\n\n + /// Unlike the IC_INTR_STAT register, these bits are not masked so they always show + /// the true status of the DW_apb_i2c. + pub const IC_RAW_INTR_STAT = @intToPtr(*volatile Mmio(32, packed struct { + /// Set if the processor attempts to read the receive buffer when it is empty by + /// reading from the IC_DATA_CMD register. If the module is disabled + /// (IC_ENABLE[0]=0), this bit keeps its level until the master or slave state + /// machines go into idle, and when ic_en goes to 0, this interrupt is cleared.\n\n + /// Reset value: 0x0 + RX_UNDER: u1, + /// Set if the receive buffer is completely filled to IC_RX_BUFFER_DEPTH and an + /// additional byte is received from an external I2C device. The DW_apb_i2c + /// acknowledges this, but any data bytes received after the FIFO is full are lost. + /// If the module is disabled (IC_ENABLE[0]=0), this bit keeps its level until the + /// master or slave state machines go into idle, and when ic_en goes to 0, this + /// interrupt is cleared.\n\n + /// Note: If bit 9 of the IC_CON register (RX_FIFO_FULL_HLD_CTRL) is programmed to + /// HIGH, then the RX_OVER interrupt never occurs, because the Rx FIFO never + /// overflows.\n\n + /// Reset value: 0x0 + RX_OVER: u1, + /// Set when the receive buffer reaches or goes above the RX_TL threshold in the + /// IC_RX_TL register. It is automatically cleared by hardware when buffer level + /// goes below the threshold. If the module is disabled (IC_ENABLE[0]=0), the RX + /// FIFO is flushed and held in reset; therefore the RX FIFO is not full. So this + /// bit is cleared once the IC_ENABLE bit 0 is programmed with a 0, regardless of + /// the activity that continues.\n\n + /// Reset value: 0x0 + RX_FULL: u1, + /// Set during transmit if the transmit buffer is filled to IC_TX_BUFFER_DEPTH and + /// the processor attempts to issue another I2C command by writing to the + /// IC_DATA_CMD register. When the module is disabled, this bit keeps its level + /// until the master or slave state machines go into idle, and when ic_en goes to 0, + /// this interrupt is cleared.\n\n + /// Reset value: 0x0 + TX_OVER: u1, + /// The behavior of the TX_EMPTY interrupt status differs based on the TX_EMPTY_CTRL + /// selection in the IC_CON register. - When TX_EMPTY_CTRL = 0: This bit is set to 1 + /// when the transmit buffer is at or below the threshold value set in the IC_TX_TL + /// register. - When TX_EMPTY_CTRL = 1: This bit is set to 1 when the transmit + /// buffer is at or below the threshold value set in the IC_TX_TL register and the + /// transmission of the address/data from the internal shift register for the most + /// recently popped command is completed. It is automatically cleared by hardware + /// when the buffer level goes above the threshold. When IC_ENABLE[0] is set to 0, + /// the TX FIFO is flushed and held in reset. There the TX FIFO looks like it has no + /// data within it, so this bit is set to 1, provided there is activity in the + /// master or slave state machines. When there is no longer any activity, then with + /// ic_en=0, this bit is set to 0.\n\n + /// Reset value: 0x0. + TX_EMPTY: u1, + /// This bit is set to 1 when DW_apb_i2c is acting as a slave and another I2C master + /// is attempting to read data from DW_apb_i2c. The DW_apb_i2c holds the I2C bus in + /// a wait state (SCL=0) until this interrupt is serviced, which means that the + /// slave has been addressed by a remote master that is asking for data to be + /// transferred. The processor must respond to this interrupt and then write the + /// requested data to the IC_DATA_CMD register. This bit is set to 0 just after the + /// processor reads the IC_CLR_RD_REQ register.\n\n + /// Reset value: 0x0 + RD_REQ: u1, + /// This bit indicates if DW_apb_i2c, as an I2C transmitter, is unable to complete + /// the intended actions on the contents of the transmit FIFO. This situation can + /// occur both as an I2C master or an I2C slave, and is referred to as a 'transmit + /// abort'. When this bit is set to 1, the IC_TX_ABRT_SOURCE register indicates the + /// reason why the transmit abort takes places.\n\n + /// Note: The DW_apb_i2c flushes/resets/empties the TX_FIFO and RX_FIFO whenever + /// there is a transmit abort caused by any of the events tracked by the + /// IC_TX_ABRT_SOURCE register. The FIFOs remains in this flushed state until the + /// register IC_CLR_TX_ABRT is read. Once this read is performed, the Tx FIFO is + /// then ready to accept more data bytes from the APB interface.\n\n + /// Reset value: 0x0 + TX_ABRT: u1, + /// When the DW_apb_i2c is acting as a slave-transmitter, this bit is set to 1 if + /// the master does not acknowledge a transmitted byte. This occurs on the last byte + /// of the transmission, indicating that the transmission is done.\n\n + /// Reset value: 0x0 + RX_DONE: u1, + /// This bit captures DW_apb_i2c activity and stays set until it is cleared. There + /// are four ways to clear it: - Disabling the DW_apb_i2c - Reading the + /// IC_CLR_ACTIVITY register - Reading the IC_CLR_INTR register - System reset Once + /// this bit is set, it stays set unless one of the four methods is used to clear + /// it. Even if the DW_apb_i2c module is idle, this bit remains set until cleared, + /// indicating that there was activity on the bus.\n\n + /// Reset value: 0x0 + ACTIVITY: u1, + /// Indicates whether a STOP condition has occurred on the I2C interface regardless + /// of whether DW_apb_i2c is operating in slave or master mode.\n\n + /// In Slave Mode: - If IC_CON[7]=1'b1 (STOP_DET_IFADDRESSED), the STOP_DET + /// interrupt will be issued only if slave is addressed. Note: During a general call + /// address, this slave does not issue a STOP_DET interrupt if + /// STOP_DET_IF_ADDRESSED=1'b1, even if the slave responds to the general call + /// address by generating ACK. The STOP_DET interrupt is generated only when the + /// transmitted address matches the slave address (SAR). - If IC_CON[7]=1'b0 + /// (STOP_DET_IFADDRESSED), the STOP_DET interrupt is issued irrespective of whether + /// it is being addressed. In Master Mode: - If IC_CON[10]=1'b1 + /// (STOP_DET_IF_MASTER_ACTIVE),the STOP_DET interrupt will be issued only if Master + /// is active. - If IC_CON[10]=1'b0 (STOP_DET_IFADDRESSED),the STOP_DET interrupt + /// will be issued irrespective of whether master is active or not. Reset value: 0x0 + STOP_DET: u1, + /// Indicates whether a START or RESTART condition has occurred on the I2C interface + /// regardless of whether DW_apb_i2c is operating in slave or master mode.\n\n + /// Reset value: 0x0 + START_DET: u1, + /// Set only when a General Call address is received and it is acknowledged. It + /// stays set until it is cleared either by disabling DW_apb_i2c or when the CPU + /// reads bit 0 of the IC_CLR_GEN_CALL register. DW_apb_i2c stores the received data + /// in the Rx buffer.\n\n + /// Reset value: 0x0 + GEN_CALL: u1, + /// Indicates whether a RESTART condition has occurred on the I2C interface when + /// DW_apb_i2c is operating in Slave mode and the slave is being addressed. Enabled + /// only when IC_SLV_RESTART_DET_EN=1.\n\n + /// Note: However, in high-speed mode or during a START BYTE transfer, the RESTART + /// comes before the address field as per the I2C protocol. In this case, the slave + /// is not the addressed slave when the RESTART is issued, therefore DW_apb_i2c does + /// not generate the RESTART_DET interrupt.\n\n + /// Reset value: 0x0 + RESTART_DET: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + }), base_address + 0x34); + + /// address: 0x40044038 + /// I2C Receive FIFO Threshold Register + pub const IC_RX_TL = @intToPtr(*volatile Mmio(32, packed struct { + /// Receive FIFO Threshold Level.\n\n + /// Controls the level of entries (or above) that triggers the RX_FULL interrupt + /// (bit 2 in IC_RAW_INTR_STAT register). The valid range is 0-255, with the + /// additional restriction that hardware does not allow this value to be set to a + /// value larger than the depth of the buffer. If an attempt is made to do that, the + /// actual value set will be the maximum depth of the buffer. A value of 0 sets the + /// threshold for 1 entry, and a value of 255 sets the threshold for 256 entries. + RX_TL: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x38); + + /// address: 0x4004403c + /// I2C Transmit FIFO Threshold Register + pub const IC_TX_TL = @intToPtr(*volatile Mmio(32, packed struct { + /// Transmit FIFO Threshold Level.\n\n + /// Controls the level of entries (or below) that trigger the TX_EMPTY interrupt + /// (bit 4 in IC_RAW_INTR_STAT register). The valid range is 0-255, with the + /// additional restriction that it may not be set to value larger than the depth of + /// the buffer. If an attempt is made to do that, the actual value set will be the + /// maximum depth of the buffer. A value of 0 sets the threshold for 0 entries, and + /// a value of 255 sets the threshold for 255 entries. + TX_TL: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x3c); + + /// address: 0x40044040 + /// Clear Combined and Individual Interrupt Register + pub const IC_CLR_INTR = @intToPtr(*volatile Mmio(32, packed struct { + /// Read this register to clear the combined interrupt, all individual interrupts, + /// and the IC_TX_ABRT_SOURCE register. This bit does not clear hardware clearable + /// interrupts but software clearable interrupts. Refer to Bit 9 of the + /// IC_TX_ABRT_SOURCE register for an exception to clearing IC_TX_ABRT_SOURCE.\n\n + /// Reset value: 0x0 + CLR_INTR: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x40); + + /// address: 0x40044044 + /// Clear RX_UNDER Interrupt Register + pub const IC_CLR_RX_UNDER = @intToPtr(*volatile Mmio(32, packed struct { + /// Read this register to clear the RX_UNDER interrupt (bit 0) of the + /// IC_RAW_INTR_STAT register.\n\n + /// Reset value: 0x0 + CLR_RX_UNDER: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x44); + + /// address: 0x40044048 + /// Clear RX_OVER Interrupt Register + pub const IC_CLR_RX_OVER = @intToPtr(*volatile Mmio(32, packed struct { + /// Read this register to clear the RX_OVER interrupt (bit 1) of the + /// IC_RAW_INTR_STAT register.\n\n + /// Reset value: 0x0 + CLR_RX_OVER: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x48); + + /// address: 0x4004404c + /// Clear TX_OVER Interrupt Register + pub const IC_CLR_TX_OVER = @intToPtr(*volatile Mmio(32, packed struct { + /// Read this register to clear the TX_OVER interrupt (bit 3) of the + /// IC_RAW_INTR_STAT register.\n\n + /// Reset value: 0x0 + CLR_TX_OVER: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x4c); + + /// address: 0x40044050 + /// Clear RD_REQ Interrupt Register + pub const IC_CLR_RD_REQ = @intToPtr(*volatile Mmio(32, packed struct { + /// Read this register to clear the RD_REQ interrupt (bit 5) of the IC_RAW_INTR_STAT + /// register.\n\n + /// Reset value: 0x0 + CLR_RD_REQ: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x50); + + /// address: 0x40044054 + /// Clear TX_ABRT Interrupt Register + pub const IC_CLR_TX_ABRT = @intToPtr(*volatile Mmio(32, packed struct { + /// Read this register to clear the TX_ABRT interrupt (bit 6) of the + /// IC_RAW_INTR_STAT register, and the IC_TX_ABRT_SOURCE register. This also + /// releases the TX FIFO from the flushed/reset state, allowing more writes to the + /// TX FIFO. Refer to Bit 9 of the IC_TX_ABRT_SOURCE register for an exception to + /// clearing IC_TX_ABRT_SOURCE.\n\n + /// Reset value: 0x0 + CLR_TX_ABRT: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x54); + + /// address: 0x40044058 + /// Clear RX_DONE Interrupt Register + pub const IC_CLR_RX_DONE = @intToPtr(*volatile Mmio(32, packed struct { + /// Read this register to clear the RX_DONE interrupt (bit 7) of the + /// IC_RAW_INTR_STAT register.\n\n + /// Reset value: 0x0 + CLR_RX_DONE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x58); + + /// address: 0x4004405c + /// Clear ACTIVITY Interrupt Register + pub const IC_CLR_ACTIVITY = @intToPtr(*volatile Mmio(32, packed struct { + /// Reading this register clears the ACTIVITY interrupt if the I2C is not active + /// anymore. If the I2C module is still active on the bus, the ACTIVITY interrupt + /// bit continues to be set. It is automatically cleared by hardware if the module + /// is disabled and if there is no further activity on the bus. The value read from + /// this register to get status of the ACTIVITY interrupt (bit 8) of the + /// IC_RAW_INTR_STAT register.\n\n + /// Reset value: 0x0 + CLR_ACTIVITY: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x5c); + + /// address: 0x40044060 + /// Clear STOP_DET Interrupt Register + pub const IC_CLR_STOP_DET = @intToPtr(*volatile Mmio(32, packed struct { + /// Read this register to clear the STOP_DET interrupt (bit 9) of the + /// IC_RAW_INTR_STAT register.\n\n + /// Reset value: 0x0 + CLR_STOP_DET: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x60); + + /// address: 0x40044064 + /// Clear START_DET Interrupt Register + pub const IC_CLR_START_DET = @intToPtr(*volatile Mmio(32, packed struct { + /// Read this register to clear the START_DET interrupt (bit 10) of the + /// IC_RAW_INTR_STAT register.\n\n + /// Reset value: 0x0 + CLR_START_DET: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x64); + + /// address: 0x40044068 + /// Clear GEN_CALL Interrupt Register + pub const IC_CLR_GEN_CALL = @intToPtr(*volatile Mmio(32, packed struct { + /// Read this register to clear the GEN_CALL interrupt (bit 11) of IC_RAW_INTR_STAT + /// register.\n\n + /// Reset value: 0x0 + CLR_GEN_CALL: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x68); + + /// address: 0x4004406c + /// I2C Enable Register + pub const IC_ENABLE = @intToPtr(*volatile Mmio(32, packed struct { + /// Controls whether the DW_apb_i2c is enabled. - 0: Disables DW_apb_i2c (TX and RX + /// FIFOs are held in an erased state) - 1: Enables DW_apb_i2c Software can disable + /// DW_apb_i2c while it is active. However, it is important that care be taken to + /// ensure that DW_apb_i2c is disabled properly. A recommended procedure is + /// described in 'Disabling DW_apb_i2c'.\n\n + /// When DW_apb_i2c is disabled, the following occurs: - The TX FIFO and RX FIFO get + /// flushed. - Status bits in the IC_INTR_STAT register are still active until + /// DW_apb_i2c goes into IDLE state. If the module is transmitting, it stops as well + /// as deletes the contents of the transmit buffer after the current transfer is + /// complete. If the module is receiving, the DW_apb_i2c stops the current transfer + /// at the end of the current byte and does not acknowledge the transfer.\n\n + /// In systems with asynchronous pclk and ic_clk when IC_CLK_TYPE parameter set to + /// asynchronous (1), there is a two ic_clk delay when enabling or disabling the + /// DW_apb_i2c. For a detailed description on how to disable DW_apb_i2c, refer to + /// 'Disabling DW_apb_i2c'\n\n + /// Reset value: 0x0 + ENABLE: u1, + /// When set, the controller initiates the transfer abort. - 0: ABORT not initiated + /// or ABORT done - 1: ABORT operation in progress The software can abort the I2C + /// transfer in master mode by setting this bit. The software can set this bit only + /// when ENABLE is already set; otherwise, the controller ignores any write to ABORT + /// bit. The software cannot clear the ABORT bit once set. In response to an ABORT, + /// the controller issues a STOP and flushes the Tx FIFO after completing the + /// current transfer, then sets the TX_ABORT interrupt after the abort operation. + /// The ABORT bit is cleared automatically after the abort operation.\n\n + /// For a detailed description on how to abort I2C transfers, refer to 'Aborting I2C + /// Transfers'.\n\n + /// Reset value: 0x0 + ABORT: u1, + /// In Master mode: - 1'b1: Blocks the transmission of data on I2C bus even if Tx + /// FIFO has data to transmit. - 1'b0: The transmission of data starts on I2C bus + /// automatically, as soon as the first data is available in the Tx FIFO. Note: To + /// block the execution of Master commands, set the TX_CMD_BLOCK bit only when Tx + /// FIFO is empty (IC_STATUS[2]==1) and Master is in Idle state (IC_STATUS[5] == 0). + /// Any further commands put in the Tx FIFO are not executed until TX_CMD_BLOCK bit + /// is unset. Reset value: IC_TX_CMD_BLOCK_DEFAULT + TX_CMD_BLOCK: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + }), base_address + 0x6c); + + /// address: 0x40044070 + /// I2C Status Register\n\n + /// This is a read-only register used to indicate the current transfer status and + /// FIFO status. The status register may be read at any time. None of the bits in + /// this register request an interrupt.\n\n + /// When the I2C is disabled by writing 0 in bit 0 of the IC_ENABLE register: - Bits + /// 1 and 2 are set to 1 - Bits 3 and 10 are set to 0 When the master or slave state + /// machines goes to idle and ic_en=0: - Bits 5 and 6 are set to 0 + pub const IC_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + /// I2C Activity Status. Reset value: 0x0 + ACTIVITY: u1, + /// Transmit FIFO Not Full. Set when the transmit FIFO contains one or more empty + /// locations, and is cleared when the FIFO is full. - 0: Transmit FIFO is full - 1: + /// Transmit FIFO is not full Reset value: 0x1 + TFNF: u1, + /// Transmit FIFO Completely Empty. When the transmit FIFO is completely empty, this + /// bit is set. When it contains one or more valid entries, this bit is cleared. + /// This bit field does not request an interrupt. - 0: Transmit FIFO is not empty - + /// 1: Transmit FIFO is empty Reset value: 0x1 + TFE: u1, + /// Receive FIFO Not Empty. This bit is set when the receive FIFO contains one or + /// more entries; it is cleared when the receive FIFO is empty. - 0: Receive FIFO is + /// empty - 1: Receive FIFO is not empty Reset value: 0x0 + RFNE: u1, + /// Receive FIFO Completely Full. When the receive FIFO is completely full, this bit + /// is set. When the receive FIFO contains one or more empty location, this bit is + /// cleared. - 0: Receive FIFO is not full - 1: Receive FIFO is full Reset value: + /// 0x0 + RFF: u1, + /// Master FSM Activity Status. When the Master Finite State Machine (FSM) is not in + /// the IDLE state, this bit is set. - 0: Master FSM is in IDLE state so the Master + /// part of DW_apb_i2c is not Active - 1: Master FSM is not in IDLE state so the + /// Master part of DW_apb_i2c is Active Note: IC_STATUS[0]-that is, ACTIVITY bit-is + /// the OR of SLV_ACTIVITY and MST_ACTIVITY bits.\n\n + /// Reset value: 0x0 + MST_ACTIVITY: u1, + /// Slave FSM Activity Status. When the Slave Finite State Machine (FSM) is not in + /// the IDLE state, this bit is set. - 0: Slave FSM is in IDLE state so the Slave + /// part of DW_apb_i2c is not Active - 1: Slave FSM is not in IDLE state so the + /// Slave part of DW_apb_i2c is Active Reset value: 0x0 + SLV_ACTIVITY: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + }), base_address + 0x70); + + /// address: 0x40044074 + /// I2C Transmit FIFO Level Register This register contains the number of valid data + /// entries in the transmit FIFO buffer. It is cleared whenever: - The I2C is + /// disabled - There is a transmit abort - that is, TX_ABRT bit is set in the + /// IC_RAW_INTR_STAT register - The slave bulk transmit mode is aborted The register + /// increments whenever data is placed into the transmit FIFO and decrements when + /// data is taken from the transmit FIFO. + pub const IC_TXFLR = @intToPtr(*volatile Mmio(32, packed struct { + /// Transmit FIFO Level. Contains the number of valid data entries in the transmit + /// FIFO.\n\n + /// Reset value: 0x0 + TXFLR: u5, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + }), base_address + 0x74); + + /// address: 0x40044078 + /// I2C Receive FIFO Level Register This register contains the number of valid data + /// entries in the receive FIFO buffer. It is cleared whenever: - The I2C is + /// disabled - Whenever there is a transmit abort caused by any of the events + /// tracked in IC_TX_ABRT_SOURCE The register increments whenever data is placed + /// into the receive FIFO and decrements when data is taken from the receive FIFO. + pub const IC_RXFLR = @intToPtr(*volatile Mmio(32, packed struct { + /// Receive FIFO Level. Contains the number of valid data entries in the receive + /// FIFO.\n\n + /// Reset value: 0x0 + RXFLR: u5, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + }), base_address + 0x78); + + /// address: 0x4004407c + /// I2C SDA Hold Time Length Register\n\n + /// The bits [15:0] of this register are used to control the hold time of SDA during + /// transmit in both slave and master mode (after SCL goes from HIGH to LOW).\n\n + /// The bits [23:16] of this register are used to extend the SDA transition (if any) + /// whenever SCL is HIGH in the receiver in either master or slave mode.\n\n + /// Writes to this register succeed only when IC_ENABLE[0]=0.\n\n + /// The values in this register are in units of ic_clk period. The value programmed + /// in IC_SDA_TX_HOLD must be greater than the minimum hold time in each mode (one + /// cycle in master mode, seven cycles in slave mode) for the value to be + /// implemented.\n\n + /// The programmed SDA hold time during transmit (IC_SDA_TX_HOLD) cannot exceed at + /// any time the duration of the low part of scl. Therefore the programmed value + /// cannot be larger than N_SCL_LOW-2, where N_SCL_LOW is the duration of the low + /// part of the scl period measured in ic_clk cycles. + pub const IC_SDA_HOLD = @intToPtr(*volatile Mmio(32, packed struct { + /// Sets the required SDA hold time in units of ic_clk period, when DW_apb_i2c acts + /// as a transmitter.\n\n + /// Reset value: IC_DEFAULT_SDA_HOLD[15:0]. + IC_SDA_TX_HOLD: u16, + /// Sets the required SDA hold time in units of ic_clk period, when DW_apb_i2c acts + /// as a receiver.\n\n + /// Reset value: IC_DEFAULT_SDA_HOLD[23:16]. + IC_SDA_RX_HOLD: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x7c); + + /// address: 0x40044080 + /// I2C Transmit Abort Source Register\n\n + /// This register has 32 bits that indicate the source of the TX_ABRT bit. Except + /// for Bit 9, this register is cleared whenever the IC_CLR_TX_ABRT register or the + /// IC_CLR_INTR register is read. To clear Bit 9, the source of the + /// ABRT_SBYTE_NORSTRT must be fixed first; RESTART must be enabled (IC_CON[5]=1), + /// the SPECIAL bit must be cleared (IC_TAR[11]), or the GC_OR_START bit must be + /// cleared (IC_TAR[10]).\n\n + /// Once the source of the ABRT_SBYTE_NORSTRT is fixed, then this bit can be cleared + /// in the same manner as other bits in this register. If the source of the + /// ABRT_SBYTE_NORSTRT is not fixed before attempting to clear this bit, Bit 9 + /// clears for one cycle and is then re-asserted. + pub const IC_TX_ABRT_SOURCE = @intToPtr(*volatile Mmio(32, packed struct { + /// This field indicates that the Master is in 7-bit addressing mode and the address + /// sent was not acknowledged by any slave.\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master-Transmitter or Master-Receiver + ABRT_7B_ADDR_NOACK: u1, + /// This field indicates that the Master is in 10-bit address mode and the first + /// 10-bit address byte was not acknowledged by any slave.\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master-Transmitter or Master-Receiver + ABRT_10ADDR1_NOACK: u1, + /// This field indicates that the Master is in 10-bit address mode and that the + /// second address byte of the 10-bit address was not acknowledged by any slave.\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master-Transmitter or Master-Receiver + ABRT_10ADDR2_NOACK: u1, + /// This field indicates the master-mode only bit. When the master receives an + /// acknowledgement for the address, but when it sends data byte(s) following the + /// address, it did not receive an acknowledge from the remote slave(s).\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master-Transmitter + ABRT_TXDATA_NOACK: u1, + /// This field indicates that DW_apb_i2c in master mode has sent a General Call and + /// no slave on the bus acknowledged the General Call.\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master-Transmitter + ABRT_GCALL_NOACK: u1, + /// This field indicates that DW_apb_i2c in the master mode has sent a General Call + /// but the user programmed the byte following the General Call to be a read from + /// the bus (IC_DATA_CMD[9] is set to 1).\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master-Transmitter + ABRT_GCALL_READ: u1, + /// This field indicates that the Master is in High Speed mode and the High Speed + /// Master code was acknowledged (wrong behavior).\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master + ABRT_HS_ACKDET: u1, + /// This field indicates that the Master has sent a START Byte and the START Byte + /// was acknowledged (wrong behavior).\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master + ABRT_SBYTE_ACKDET: u1, + /// This field indicates that the restart is disabled (IC_RESTART_EN bit (IC_CON[5]) + /// =0) and the user is trying to use the master to transfer data in High Speed + /// mode.\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master-Transmitter or Master-Receiver + ABRT_HS_NORSTRT: u1, + /// To clear Bit 9, the source of the ABRT_SBYTE_NORSTRT must be fixed first; + /// restart must be enabled (IC_CON[5]=1), the SPECIAL bit must be cleared + /// (IC_TAR[11]), or the GC_OR_START bit must be cleared (IC_TAR[10]). Once the + /// source of the ABRT_SBYTE_NORSTRT is fixed, then this bit can be cleared in the + /// same manner as other bits in this register. If the source of the + /// ABRT_SBYTE_NORSTRT is not fixed before attempting to clear this bit, bit 9 + /// clears for one cycle and then gets reasserted. When this field is set to 1, the + /// restart is disabled (IC_RESTART_EN bit (IC_CON[5]) =0) and the user is trying to + /// send a START Byte.\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master + ABRT_SBYTE_NORSTRT: u1, + /// This field indicates that the restart is disabled (IC_RESTART_EN bit (IC_CON[5]) + /// =0) and the master sends a read command in 10-bit addressing mode.\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master-Receiver + ABRT_10B_RD_NORSTRT: u1, + /// This field indicates that the User tries to initiate a Master operation with the + /// Master mode disabled.\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master-Transmitter or Master-Receiver + ABRT_MASTER_DIS: u1, + /// This field specifies that the Master has lost arbitration, or if + /// IC_TX_ABRT_SOURCE[14] is also set, then the slave transmitter has lost + /// arbitration.\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master-Transmitter or Slave-Transmitter + ARB_LOST: u1, + /// This field specifies that the Slave has received a read command and some data + /// exists in the TX FIFO, so the slave issues a TX_ABRT interrupt to flush old data + /// in TX FIFO.\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Slave-Transmitter + ABRT_SLVFLUSH_TXFIFO: u1, + /// This field indicates that a Slave has lost the bus while transmitting data to a + /// remote master. IC_TX_ABRT_SOURCE[12] is set at the same time. Note: Even though + /// the slave never 'owns' the bus, something could go wrong on the bus. This is a + /// fail safe check. For instance, during a data transmission at the low-to-high + /// transition of SCL, if what is on the data bus is not what is supposed to be + /// transmitted, then DW_apb_i2c no longer own the bus.\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Slave-Transmitter + ABRT_SLV_ARBLOST: u1, + /// 1: When the processor side responds to a slave mode request for data to be + /// transmitted to a remote master and user writes a 1 in CMD (bit 8) of IC_DATA_CMD + /// register.\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Slave-Transmitter + ABRT_SLVRD_INTX: u1, + /// This is a master-mode-only bit. Master has detected the transfer abort + /// (IC_ENABLE[1])\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master-Transmitter + ABRT_USER_ABRT: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + /// This field indicates the number of Tx FIFO Data Commands which are flushed due + /// to TX_ABRT interrupt. It is cleared whenever I2C is disabled.\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master-Transmitter or Slave-Transmitter + TX_FLUSH_CNT: u9, + }), base_address + 0x80); + + /// address: 0x40044084 + /// Generate Slave Data NACK Register\n\n + /// The register is used to generate a NACK for the data part of a transfer when + /// DW_apb_i2c is acting as a slave-receiver. This register only exists when the + /// IC_SLV_DATA_NACK_ONLY parameter is set to 1. When this parameter disabled, this + /// register does not exist and writing to the register's address has no effect.\n\n + /// A write can occur on this register if both of the following conditions are met: + /// - DW_apb_i2c is disabled (IC_ENABLE[0] = 0) - Slave part is inactive + /// (IC_STATUS[6] = 0) Note: The IC_STATUS[6] is a register read-back location for + /// the internal slv_activity signal; the user should poll this before writing the + /// ic_slv_data_nack_only bit. + pub const IC_SLV_DATA_NACK_ONLY = @intToPtr(*volatile Mmio(32, packed struct { + /// Generate NACK. This NACK generation only occurs when DW_apb_i2c is a + /// slave-receiver. If this register is set to a value of 1, it can only generate a + /// NACK after a data byte is received; hence, the data transfer is aborted and the + /// data received is not pushed to the receive buffer.\n\n + /// When the register is set to a value of 0, it generates NACK/ACK, depending on + /// normal criteria. - 1: generate NACK after data byte received - 0: generate + /// NACK/ACK normally Reset value: 0x0 + NACK: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x84); + + /// address: 0x40044088 + /// DMA Control Register\n\n + /// The register is used to enable the DMA Controller interface operation. There is + /// a separate bit for transmit and receive. This can be programmed regardless of + /// the state of IC_ENABLE. + pub const IC_DMA_CR = @intToPtr(*volatile Mmio(32, packed struct { + /// Receive DMA Enable. This bit enables/disables the receive FIFO DMA channel. + /// Reset value: 0x0 + RDMAE: u1, + /// Transmit DMA Enable. This bit enables/disables the transmit FIFO DMA channel. + /// Reset value: 0x0 + TDMAE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + }), base_address + 0x88); + + /// address: 0x4004408c + /// DMA Transmit Data Level Register + pub const IC_DMA_TDLR = @intToPtr(*volatile Mmio(32, packed struct { + /// Transmit Data Level. This bit field controls the level at which a DMA request is + /// made by the transmit logic. It is equal to the watermark level; that is, the + /// dma_tx_req signal is generated when the number of valid data entries in the + /// transmit FIFO is equal to or below this field value, and TDMAE = 1.\n\n + /// Reset value: 0x0 + DMATDL: u4, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + }), base_address + 0x8c); + + /// address: 0x40044090 + /// I2C Receive Data Level Register + pub const IC_DMA_RDLR = @intToPtr(*volatile Mmio(32, packed struct { + /// Receive Data Level. This bit field controls the level at which a DMA request is + /// made by the receive logic. The watermark level = DMARDL+1; that is, dma_rx_req + /// is generated when the number of valid data entries in the receive FIFO is equal + /// to or more than this field value + 1, and RDMAE =1. For instance, when DMARDL is + /// 0, then dma_rx_req is asserted when 1 or more data entries are present in the + /// receive FIFO.\n\n + /// Reset value: 0x0 + DMARDL: u4, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + }), base_address + 0x90); + + /// address: 0x40044094 + /// I2C SDA Setup Register\n\n + /// This register controls the amount of time delay (in terms of number of ic_clk + /// clock periods) introduced in the rising edge of SCL - relative to SDA changing - + /// when DW_apb_i2c services a read request in a slave-transmitter operation. The + /// relevant I2C requirement is tSU:DAT (note 4) as detailed in the I2C Bus + /// Specification. This register must be programmed with a value equal to or greater + /// than 2.\n\n + /// Writes to this register succeed only when IC_ENABLE[0] = 0.\n\n + /// Note: The length of setup time is calculated using [(IC_SDA_SETUP - 1) * + /// (ic_clk_period)], so if the user requires 10 ic_clk periods of setup time, they + /// should program a value of 11. The IC_SDA_SETUP register is only used by the + /// DW_apb_i2c when operating as a slave transmitter. + pub const IC_SDA_SETUP = @intToPtr(*volatile Mmio(32, packed struct { + /// SDA Setup. It is recommended that if the required delay is 1000ns, then for an + /// ic_clk frequency of 10 MHz, IC_SDA_SETUP should be programmed to a value of 11. + /// IC_SDA_SETUP must be programmed with a minimum value of 2. + SDA_SETUP: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x94); + + /// address: 0x40044098 + /// I2C ACK General Call Register\n\n + /// The register controls whether DW_apb_i2c responds with a ACK or NACK when it + /// receives an I2C General Call address.\n\n + /// This register is applicable only when the DW_apb_i2c is in slave mode. + pub const IC_ACK_GENERAL_CALL = @intToPtr(*volatile Mmio(32, packed struct { + /// ACK General Call. When set to 1, DW_apb_i2c responds with a ACK (by asserting + /// ic_data_oe) when it receives a General Call. Otherwise, DW_apb_i2c responds with + /// a NACK (by negating ic_data_oe). + ACK_GEN_CALL: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x98); + + /// address: 0x4004409c + /// I2C Enable Status Register\n\n + /// The register is used to report the DW_apb_i2c hardware status when the + /// IC_ENABLE[0] register is set from 1 to 0; that is, when DW_apb_i2c is + /// disabled.\n\n + /// If IC_ENABLE[0] has been set to 1, bits 2:1 are forced to 0, and bit 0 is forced + /// to 1.\n\n + /// If IC_ENABLE[0] has been set to 0, bits 2:1 is only be valid as soon as bit 0 is + /// read as '0'.\n\n + /// Note: When IC_ENABLE[0] has been set to 0, a delay occurs for bit 0 to be read + /// as 0 because disabling the DW_apb_i2c depends on I2C bus activities. + pub const IC_ENABLE_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + /// ic_en Status. This bit always reflects the value driven on the output port + /// ic_en. - When read as 1, DW_apb_i2c is deemed to be in an enabled state. - When + /// read as 0, DW_apb_i2c is deemed completely inactive. Note: The CPU can safely + /// read this bit anytime. When this bit is read as 0, the CPU can safely read + /// SLV_RX_DATA_LOST (bit 2) and SLV_DISABLED_WHILE_BUSY (bit 1).\n\n + /// Reset value: 0x0 + IC_EN: u1, + /// Slave Disabled While Busy (Transmit, Receive). This bit indicates if a potential + /// or active Slave operation has been aborted due to the setting bit 0 of the + /// IC_ENABLE register from 1 to 0. This bit is set when the CPU writes a 0 to the + /// IC_ENABLE register while:\n\n + /// (a) DW_apb_i2c is receiving the address byte of the Slave-Transmitter operation + /// from a remote master;\n\n + /// OR,\n\n + /// (b) address and data bytes of the Slave-Receiver operation from a remote + /// master.\n\n + /// When read as 1, DW_apb_i2c is deemed to have forced a NACK during any part of an + /// I2C transfer, irrespective of whether the I2C address matches the slave address + /// set in DW_apb_i2c (IC_SAR register) OR if the transfer is completed before + /// IC_ENABLE is set to 0 but has not taken effect.\n\n + /// Note: If the remote I2C master terminates the transfer with a STOP condition + /// before the DW_apb_i2c has a chance to NACK a transfer, and IC_ENABLE[0] has been + /// set to 0, then this bit will also be set to 1.\n\n + /// When read as 0, DW_apb_i2c is deemed to have been disabled when there is master + /// activity, or when the I2C bus is idle.\n\n + /// Note: The CPU can safely read this bit when IC_EN (bit 0) is read as 0.\n\n + /// Reset value: 0x0 + SLV_DISABLED_WHILE_BUSY: u1, + /// Slave Received Data Lost. This bit indicates if a Slave-Receiver operation has + /// been aborted with at least one data byte received from an I2C transfer due to + /// the setting bit 0 of IC_ENABLE from 1 to 0. When read as 1, DW_apb_i2c is deemed + /// to have been actively engaged in an aborted I2C transfer (with matching address) + /// and the data phase of the I2C transfer has been entered, even though a data byte + /// has been responded with a NACK.\n\n + /// Note: If the remote I2C master terminates the transfer with a STOP condition + /// before the DW_apb_i2c has a chance to NACK a transfer, and IC_ENABLE[0] has been + /// set to 0, then this bit is also set to 1.\n\n + /// When read as 0, DW_apb_i2c is deemed to have been disabled without being + /// actively involved in the data phase of a Slave-Receiver transfer.\n\n + /// Note: The CPU can safely read this bit when IC_EN (bit 0) is read as 0.\n\n + /// Reset value: 0x0 + SLV_RX_DATA_LOST: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + }), base_address + 0x9c); + + /// address: 0x400440a0 + /// I2C SS, FS or FM+ spike suppression limit\n\n + /// This register is used to store the duration, measured in ic_clk cycles, of the + /// longest spike that is filtered out by the spike suppression logic when the + /// component is operating in SS, FS or FM+ modes. The relevant I2C requirement is + /// tSP (table 4) as detailed in the I2C Bus Specification. This register must be + /// programmed with a minimum value of 1. + pub const IC_FS_SPKLEN = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xa0); + + /// address: 0x400440a8 + /// Clear RESTART_DET Interrupt Register + pub const IC_CLR_RESTART_DET = @intToPtr(*volatile Mmio(32, packed struct { + /// Read this register to clear the RESTART_DET interrupt (bit 12) of + /// IC_RAW_INTR_STAT register.\n\n + /// Reset value: 0x0 + CLR_RESTART_DET: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0xa8); + + /// address: 0x400440f4 + /// Component Parameter Register 1\n\n + /// Note This register is not implemented and therefore reads as 0. If it was + /// implemented it would be a constant read-only register that contains encoded + /// information about the component's parameter settings. Fields shown below are the + /// settings for those parameters + pub const IC_COMP_PARAM_1 = @intToPtr(*volatile Mmio(32, packed struct { + /// APB data bus width is 32 bits + APB_DATA_WIDTH: u2, + /// MAX SPEED MODE = FAST MODE + MAX_SPEED_MODE: u2, + /// Programmable count values for each mode. + HC_COUNT_VALUES: u1, + /// COMBINED Interrupt outputs + INTR_IO: u1, + /// DMA handshaking signals are enabled + HAS_DMA: u1, + /// Encoded parameters not visible + ADD_ENCODED_PARAMS: u1, + /// RX Buffer Depth = 16 + RX_BUFFER_DEPTH: u8, + /// TX Buffer Depth = 16 + TX_BUFFER_DEPTH: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0xf4); + + /// address: 0x400440f8 + /// I2C Component Version Register + pub const IC_COMP_VERSION = @intToPtr(*volatile u32, base_address + 0xf8); + + /// address: 0x400440fc + /// I2C Component Type Register + pub const IC_COMP_TYPE = @intToPtr(*volatile u32, base_address + 0xfc); + }; + pub const I2C1 = struct { + pub const base_address = 0x40048000; + + /// address: 0x40048000 + /// I2C Control Register. This register can be written only when the DW_apb_i2c is + /// disabled, which corresponds to the IC_ENABLE[0] register being set to 0. Writes + /// at other times have no effect.\n\n + /// Read/Write Access: - bit 10 is read only. - bit 11 is read only - bit 16 is read + /// only - bit 17 is read only - bits 18 and 19 are read only. + pub const IC_CON = @intToPtr(*volatile Mmio(32, packed struct { + /// This bit controls whether the DW_apb_i2c master is enabled.\n\n + /// NOTE: Software should ensure that if this bit is written with '1' then bit 6 + /// should also be written with a '1'. + MASTER_MODE: u1, + /// These bits control at which speed the DW_apb_i2c operates; its setting is + /// relevant only if one is operating the DW_apb_i2c in master mode. Hardware + /// protects against illegal values being programmed by software. These bits must be + /// programmed appropriately for slave mode also, as it is used to capture correct + /// value of spike filter as per the speed mode.\n\n + /// This register should be programmed only with a value in the range of 1 to + /// IC_MAX_SPEED_MODE; otherwise, hardware updates this register with the value of + /// IC_MAX_SPEED_MODE.\n\n + /// 1: standard mode (100 kbit/s)\n\n + /// 2: fast mode (<=400 kbit/s) or fast mode plus (<=1000Kbit/s)\n\n + /// 3: high speed mode (3.4 Mbit/s)\n\n + /// Note: This field is not applicable when IC_ULTRA_FAST_MODE=1 + SPEED: u2, + /// When acting as a slave, this bit controls whether the DW_apb_i2c responds to 7- + /// or 10-bit addresses. - 0: 7-bit addressing. The DW_apb_i2c ignores transactions + /// that involve 10-bit addressing; for 7-bit addressing, only the lower 7 bits of + /// the IC_SAR register are compared. - 1: 10-bit addressing. The DW_apb_i2c + /// responds to only 10-bit addressing transfers that match the full 10 bits of the + /// IC_SAR register. + IC_10BITADDR_SLAVE: u1, + /// Controls whether the DW_apb_i2c starts its transfers in 7- or 10-bit addressing + /// mode when acting as a master. - 0: 7-bit addressing - 1: 10-bit addressing + IC_10BITADDR_MASTER: u1, + /// Determines whether RESTART conditions may be sent when acting as a master. Some + /// older slaves do not support handling RESTART conditions; however, RESTART + /// conditions are used in several DW_apb_i2c operations. When RESTART is disabled, + /// the master is prohibited from performing the following functions: - Sending a + /// START BYTE - Performing any high-speed mode operation - High-speed mode + /// operation - Performing direction changes in combined format mode - Performing a + /// read operation with a 10-bit address By replacing RESTART condition followed by + /// a STOP and a subsequent START condition, split operations are broken down into + /// multiple DW_apb_i2c transfers. If the above operations are performed, it will + /// result in setting bit 6 (TX_ABRT) of the IC_RAW_INTR_STAT register.\n\n + /// Reset value: ENABLED + IC_RESTART_EN: u1, + /// This bit controls whether I2C has its slave disabled, which means once the + /// presetn signal is applied, then this bit is set and the slave is disabled.\n\n + /// If this bit is set (slave is disabled), DW_apb_i2c functions only as a master + /// and does not perform any action that requires a slave.\n\n + /// NOTE: Software should ensure that if this bit is written with 0, then bit 0 + /// should also be written with a 0. + IC_SLAVE_DISABLE: u1, + /// In slave mode: - 1'b1: issues the STOP_DET interrupt only when it is addressed. + /// - 1'b0: issues the STOP_DET irrespective of whether it's addressed or not. Reset + /// value: 0x0\n\n + /// NOTE: During a general call address, this slave does not issue the STOP_DET + /// interrupt if STOP_DET_IF_ADDRESSED = 1'b1, even if the slave responds to the + /// general call address by generating ACK. The STOP_DET interrupt is generated only + /// when the transmitted address matches the slave address (SAR). + STOP_DET_IFADDRESSED: u1, + /// This bit controls the generation of the TX_EMPTY interrupt, as described in the + /// IC_RAW_INTR_STAT register.\n\n + /// Reset value: 0x0. + TX_EMPTY_CTRL: u1, + /// This bit controls whether DW_apb_i2c should hold the bus when the Rx FIFO is + /// physically full to its RX_BUFFER_DEPTH, as described in the + /// IC_RX_FULL_HLD_BUS_EN parameter.\n\n + /// Reset value: 0x0. + RX_FIFO_FULL_HLD_CTRL: u1, + /// Master issues the STOP_DET interrupt irrespective of whether master is active or + /// not + STOP_DET_IF_MASTER_ACTIVE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + }), base_address + 0x0); + + /// address: 0x40048004 + /// I2C Target Address Register\n\n + /// This register is 12 bits wide, and bits 31:12 are reserved. This register can be + /// written to only when IC_ENABLE[0] is set to 0.\n\n + /// Note: If the software or application is aware that the DW_apb_i2c is not using + /// the TAR address for the pending commands in the Tx FIFO, then it is possible to + /// update the TAR address even while the Tx FIFO has entries (IC_STATUS[2]= 0). - + /// It is not necessary to perform any write to this register if DW_apb_i2c is + /// enabled as an I2C slave only. + pub const IC_TAR = @intToPtr(*volatile Mmio(32, packed struct { + /// This is the target address for any master transaction. When transmitting a + /// General Call, these bits are ignored. To generate a START BYTE, the CPU needs to + /// write only once into these bits.\n\n + /// If the IC_TAR and IC_SAR are the same, loopback exists but the FIFOs are shared + /// between master and slave, so full loopback is not feasible. Only one direction + /// loopback mode is supported (simplex), not duplex. A master cannot transmit to + /// itself; it can transmit to only a slave. + IC_TAR: u10, + /// If bit 11 (SPECIAL) is set to 1 and bit 13(Device-ID) is set to 0, then this bit + /// indicates whether a General Call or START byte command is to be performed by the + /// DW_apb_i2c. - 0: General Call Address - after issuing a General Call, only + /// writes may be performed. Attempting to issue a read command results in setting + /// bit 6 (TX_ABRT) of the IC_RAW_INTR_STAT register. The DW_apb_i2c remains in + /// General Call mode until the SPECIAL bit value (bit 11) is cleared. - 1: START + /// BYTE Reset value: 0x0 + GC_OR_START: u1, + /// This bit indicates whether software performs a Device-ID or General Call or + /// START BYTE command. - 0: ignore bit 10 GC_OR_START and use IC_TAR normally - 1: + /// perform special I2C command as specified in Device_ID or GC_OR_START bit Reset + /// value: 0x0 + SPECIAL: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x4); + + /// address: 0x40048008 + /// I2C Slave Address Register + pub const IC_SAR = @intToPtr(*volatile MmioInt(32, u10), base_address + 0x8); + + /// address: 0x40048010 + /// I2C Rx/Tx Data Buffer and Command Register; this is the register the CPU writes + /// to when filling the TX FIFO and the CPU reads from when retrieving bytes from RX + /// FIFO.\n\n + /// The size of the register changes as follows:\n\n + /// Write: - 11 bits when IC_EMPTYFIFO_HOLD_MASTER_EN=1 - 9 bits when + /// IC_EMPTYFIFO_HOLD_MASTER_EN=0 Read: - 12 bits when IC_FIRST_DATA_BYTE_STATUS = 1 + /// - 8 bits when IC_FIRST_DATA_BYTE_STATUS = 0 Note: In order for the DW_apb_i2c to + /// continue acknowledging reads, a read command should be written for every byte + /// that is to be received; otherwise the DW_apb_i2c will stop acknowledging. + pub const IC_DATA_CMD = @intToPtr(*volatile Mmio(32, packed struct { + /// This register contains the data to be transmitted or received on the I2C bus. If + /// you are writing to this register and want to perform a read, bits 7:0 (DAT) are + /// ignored by the DW_apb_i2c. However, when you read this register, these bits + /// return the value of data received on the DW_apb_i2c interface.\n\n + /// Reset value: 0x0 + DAT: u8, + /// This bit controls whether a read or a write is performed. This bit does not + /// control the direction when the DW_apb_i2con acts as a slave. It controls only + /// the direction when it acts as a master.\n\n + /// When a command is entered in the TX FIFO, this bit distinguishes the write and + /// read commands. In slave-receiver mode, this bit is a 'don't care' because writes + /// to this register are not required. In slave-transmitter mode, a '0' indicates + /// that the data in IC_DATA_CMD is to be transmitted.\n\n + /// When programming this bit, you should remember the following: attempting to + /// perform a read operation after a General Call command has been sent results in a + /// TX_ABRT interrupt (bit 6 of the IC_RAW_INTR_STAT register), unless bit 11 + /// (SPECIAL) in the IC_TAR register has been cleared. If a '1' is written to this + /// bit after receiving a RD_REQ interrupt, then a TX_ABRT interrupt occurs.\n\n + /// Reset value: 0x0 + CMD: u1, + /// This bit controls whether a STOP is issued after the byte is sent or + /// received.\n\n + /// - 1 - STOP is issued after this byte, regardless of whether or not the Tx FIFO + /// is empty. If the Tx FIFO is not empty, the master immediately tries to start a + /// new transfer by issuing a START and arbitrating for the bus. - 0 - STOP is not + /// issued after this byte, regardless of whether or not the Tx FIFO is empty. If + /// the Tx FIFO is not empty, the master continues the current transfer by + /// sending/receiving data bytes according to the value of the CMD bit. If the Tx + /// FIFO is empty, the master holds the SCL line low and stalls the bus until a new + /// command is available in the Tx FIFO. Reset value: 0x0 + STOP: u1, + /// This bit controls whether a RESTART is issued before the byte is sent or + /// received.\n\n + /// 1 - If IC_RESTART_EN is 1, a RESTART is issued before the data is sent/received + /// (according to the value of CMD), regardless of whether or not the transfer + /// direction is changing from the previous command; if IC_RESTART_EN is 0, a STOP + /// followed by a START is issued instead.\n\n + /// 0 - If IC_RESTART_EN is 1, a RESTART is issued only if the transfer direction is + /// changing from the previous command; if IC_RESTART_EN is 0, a STOP followed by a + /// START is issued instead.\n\n + /// Reset value: 0x0 + RESTART: u1, + /// Indicates the first data byte received after the address phase for receive + /// transfer in Master receiver or Slave receiver mode.\n\n + /// Reset value : 0x0\n\n + /// NOTE: In case of APB_DATA_WIDTH=8,\n\n + /// 1. The user has to perform two APB Reads to IC_DATA_CMD in order to get status + /// on 11 bit.\n\n + /// 2. In order to read the 11 bit, the user has to perform the first data byte read + /// [7:0] (offset 0x10) and then perform the second read [15:8] (offset 0x11) in + /// order to know the status of 11 bit (whether the data received in previous read + /// is a first data byte or not).\n\n + /// 3. The 11th bit is an optional read field, user can ignore 2nd byte read [15:8] + /// (offset 0x11) if not interested in FIRST_DATA_BYTE status. + FIRST_DATA_BYTE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x10); + + /// address: 0x40048014 + /// Standard Speed I2C Clock SCL High Count Register + pub const IC_SS_SCL_HCNT = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x14); + + /// address: 0x40048018 + /// Standard Speed I2C Clock SCL Low Count Register + pub const IC_SS_SCL_LCNT = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x18); + + /// address: 0x4004801c + /// Fast Mode or Fast Mode Plus I2C Clock SCL High Count Register + pub const IC_FS_SCL_HCNT = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x1c); + + /// address: 0x40048020 + /// Fast Mode or Fast Mode Plus I2C Clock SCL Low Count Register + pub const IC_FS_SCL_LCNT = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x20); + + /// address: 0x4004802c + /// I2C Interrupt Status Register\n\n + /// Each bit in this register has a corresponding mask bit in the IC_INTR_MASK + /// register. These bits are cleared by reading the matching interrupt clear + /// register. The unmasked raw versions of these bits are available in the + /// IC_RAW_INTR_STAT register. + pub const IC_INTR_STAT = @intToPtr(*volatile Mmio(32, packed struct { + /// See IC_RAW_INTR_STAT for a detailed description of R_RX_UNDER bit.\n\n + /// Reset value: 0x0 + R_RX_UNDER: u1, + /// See IC_RAW_INTR_STAT for a detailed description of R_RX_OVER bit.\n\n + /// Reset value: 0x0 + R_RX_OVER: u1, + /// See IC_RAW_INTR_STAT for a detailed description of R_RX_FULL bit.\n\n + /// Reset value: 0x0 + R_RX_FULL: u1, + /// See IC_RAW_INTR_STAT for a detailed description of R_TX_OVER bit.\n\n + /// Reset value: 0x0 + R_TX_OVER: u1, + /// See IC_RAW_INTR_STAT for a detailed description of R_TX_EMPTY bit.\n\n + /// Reset value: 0x0 + R_TX_EMPTY: u1, + /// See IC_RAW_INTR_STAT for a detailed description of R_RD_REQ bit.\n\n + /// Reset value: 0x0 + R_RD_REQ: u1, + /// See IC_RAW_INTR_STAT for a detailed description of R_TX_ABRT bit.\n\n + /// Reset value: 0x0 + R_TX_ABRT: u1, + /// See IC_RAW_INTR_STAT for a detailed description of R_RX_DONE bit.\n\n + /// Reset value: 0x0 + R_RX_DONE: u1, + /// See IC_RAW_INTR_STAT for a detailed description of R_ACTIVITY bit.\n\n + /// Reset value: 0x0 + R_ACTIVITY: u1, + /// See IC_RAW_INTR_STAT for a detailed description of R_STOP_DET bit.\n\n + /// Reset value: 0x0 + R_STOP_DET: u1, + /// See IC_RAW_INTR_STAT for a detailed description of R_START_DET bit.\n\n + /// Reset value: 0x0 + R_START_DET: u1, + /// See IC_RAW_INTR_STAT for a detailed description of R_GEN_CALL bit.\n\n + /// Reset value: 0x0 + R_GEN_CALL: u1, + /// See IC_RAW_INTR_STAT for a detailed description of R_RESTART_DET bit.\n\n + /// Reset value: 0x0 + R_RESTART_DET: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + }), base_address + 0x2c); + + /// address: 0x40048030 + /// I2C Interrupt Mask Register.\n\n + /// These bits mask their corresponding interrupt status bits. This register is + /// active low; a value of 0 masks the interrupt, whereas a value of 1 unmasks the + /// interrupt. + pub const IC_INTR_MASK = @intToPtr(*volatile Mmio(32, packed struct { + /// This bit masks the R_RX_UNDER interrupt in IC_INTR_STAT register.\n\n + /// Reset value: 0x1 + M_RX_UNDER: u1, + /// This bit masks the R_RX_OVER interrupt in IC_INTR_STAT register.\n\n + /// Reset value: 0x1 + M_RX_OVER: u1, + /// This bit masks the R_RX_FULL interrupt in IC_INTR_STAT register.\n\n + /// Reset value: 0x1 + M_RX_FULL: u1, + /// This bit masks the R_TX_OVER interrupt in IC_INTR_STAT register.\n\n + /// Reset value: 0x1 + M_TX_OVER: u1, + /// This bit masks the R_TX_EMPTY interrupt in IC_INTR_STAT register.\n\n + /// Reset value: 0x1 + M_TX_EMPTY: u1, + /// This bit masks the R_RD_REQ interrupt in IC_INTR_STAT register.\n\n + /// Reset value: 0x1 + M_RD_REQ: u1, + /// This bit masks the R_TX_ABRT interrupt in IC_INTR_STAT register.\n\n + /// Reset value: 0x1 + M_TX_ABRT: u1, + /// This bit masks the R_RX_DONE interrupt in IC_INTR_STAT register.\n\n + /// Reset value: 0x1 + M_RX_DONE: u1, + /// This bit masks the R_ACTIVITY interrupt in IC_INTR_STAT register.\n\n + /// Reset value: 0x0 + M_ACTIVITY: u1, + /// This bit masks the R_STOP_DET interrupt in IC_INTR_STAT register.\n\n + /// Reset value: 0x0 + M_STOP_DET: u1, + /// This bit masks the R_START_DET interrupt in IC_INTR_STAT register.\n\n + /// Reset value: 0x0 + M_START_DET: u1, + /// This bit masks the R_GEN_CALL interrupt in IC_INTR_STAT register.\n\n + /// Reset value: 0x1 + M_GEN_CALL: u1, + /// This bit masks the R_RESTART_DET interrupt in IC_INTR_STAT register.\n\n + /// Reset value: 0x0 + M_RESTART_DET: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + }), base_address + 0x30); + + /// address: 0x40048034 + /// I2C Raw Interrupt Status Register\n\n + /// Unlike the IC_INTR_STAT register, these bits are not masked so they always show + /// the true status of the DW_apb_i2c. + pub const IC_RAW_INTR_STAT = @intToPtr(*volatile Mmio(32, packed struct { + /// Set if the processor attempts to read the receive buffer when it is empty by + /// reading from the IC_DATA_CMD register. If the module is disabled + /// (IC_ENABLE[0]=0), this bit keeps its level until the master or slave state + /// machines go into idle, and when ic_en goes to 0, this interrupt is cleared.\n\n + /// Reset value: 0x0 + RX_UNDER: u1, + /// Set if the receive buffer is completely filled to IC_RX_BUFFER_DEPTH and an + /// additional byte is received from an external I2C device. The DW_apb_i2c + /// acknowledges this, but any data bytes received after the FIFO is full are lost. + /// If the module is disabled (IC_ENABLE[0]=0), this bit keeps its level until the + /// master or slave state machines go into idle, and when ic_en goes to 0, this + /// interrupt is cleared.\n\n + /// Note: If bit 9 of the IC_CON register (RX_FIFO_FULL_HLD_CTRL) is programmed to + /// HIGH, then the RX_OVER interrupt never occurs, because the Rx FIFO never + /// overflows.\n\n + /// Reset value: 0x0 + RX_OVER: u1, + /// Set when the receive buffer reaches or goes above the RX_TL threshold in the + /// IC_RX_TL register. It is automatically cleared by hardware when buffer level + /// goes below the threshold. If the module is disabled (IC_ENABLE[0]=0), the RX + /// FIFO is flushed and held in reset; therefore the RX FIFO is not full. So this + /// bit is cleared once the IC_ENABLE bit 0 is programmed with a 0, regardless of + /// the activity that continues.\n\n + /// Reset value: 0x0 + RX_FULL: u1, + /// Set during transmit if the transmit buffer is filled to IC_TX_BUFFER_DEPTH and + /// the processor attempts to issue another I2C command by writing to the + /// IC_DATA_CMD register. When the module is disabled, this bit keeps its level + /// until the master or slave state machines go into idle, and when ic_en goes to 0, + /// this interrupt is cleared.\n\n + /// Reset value: 0x0 + TX_OVER: u1, + /// The behavior of the TX_EMPTY interrupt status differs based on the TX_EMPTY_CTRL + /// selection in the IC_CON register. - When TX_EMPTY_CTRL = 0: This bit is set to 1 + /// when the transmit buffer is at or below the threshold value set in the IC_TX_TL + /// register. - When TX_EMPTY_CTRL = 1: This bit is set to 1 when the transmit + /// buffer is at or below the threshold value set in the IC_TX_TL register and the + /// transmission of the address/data from the internal shift register for the most + /// recently popped command is completed. It is automatically cleared by hardware + /// when the buffer level goes above the threshold. When IC_ENABLE[0] is set to 0, + /// the TX FIFO is flushed and held in reset. There the TX FIFO looks like it has no + /// data within it, so this bit is set to 1, provided there is activity in the + /// master or slave state machines. When there is no longer any activity, then with + /// ic_en=0, this bit is set to 0.\n\n + /// Reset value: 0x0. + TX_EMPTY: u1, + /// This bit is set to 1 when DW_apb_i2c is acting as a slave and another I2C master + /// is attempting to read data from DW_apb_i2c. The DW_apb_i2c holds the I2C bus in + /// a wait state (SCL=0) until this interrupt is serviced, which means that the + /// slave has been addressed by a remote master that is asking for data to be + /// transferred. The processor must respond to this interrupt and then write the + /// requested data to the IC_DATA_CMD register. This bit is set to 0 just after the + /// processor reads the IC_CLR_RD_REQ register.\n\n + /// Reset value: 0x0 + RD_REQ: u1, + /// This bit indicates if DW_apb_i2c, as an I2C transmitter, is unable to complete + /// the intended actions on the contents of the transmit FIFO. This situation can + /// occur both as an I2C master or an I2C slave, and is referred to as a 'transmit + /// abort'. When this bit is set to 1, the IC_TX_ABRT_SOURCE register indicates the + /// reason why the transmit abort takes places.\n\n + /// Note: The DW_apb_i2c flushes/resets/empties the TX_FIFO and RX_FIFO whenever + /// there is a transmit abort caused by any of the events tracked by the + /// IC_TX_ABRT_SOURCE register. The FIFOs remains in this flushed state until the + /// register IC_CLR_TX_ABRT is read. Once this read is performed, the Tx FIFO is + /// then ready to accept more data bytes from the APB interface.\n\n + /// Reset value: 0x0 + TX_ABRT: u1, + /// When the DW_apb_i2c is acting as a slave-transmitter, this bit is set to 1 if + /// the master does not acknowledge a transmitted byte. This occurs on the last byte + /// of the transmission, indicating that the transmission is done.\n\n + /// Reset value: 0x0 + RX_DONE: u1, + /// This bit captures DW_apb_i2c activity and stays set until it is cleared. There + /// are four ways to clear it: - Disabling the DW_apb_i2c - Reading the + /// IC_CLR_ACTIVITY register - Reading the IC_CLR_INTR register - System reset Once + /// this bit is set, it stays set unless one of the four methods is used to clear + /// it. Even if the DW_apb_i2c module is idle, this bit remains set until cleared, + /// indicating that there was activity on the bus.\n\n + /// Reset value: 0x0 + ACTIVITY: u1, + /// Indicates whether a STOP condition has occurred on the I2C interface regardless + /// of whether DW_apb_i2c is operating in slave or master mode.\n\n + /// In Slave Mode: - If IC_CON[7]=1'b1 (STOP_DET_IFADDRESSED), the STOP_DET + /// interrupt will be issued only if slave is addressed. Note: During a general call + /// address, this slave does not issue a STOP_DET interrupt if + /// STOP_DET_IF_ADDRESSED=1'b1, even if the slave responds to the general call + /// address by generating ACK. The STOP_DET interrupt is generated only when the + /// transmitted address matches the slave address (SAR). - If IC_CON[7]=1'b0 + /// (STOP_DET_IFADDRESSED), the STOP_DET interrupt is issued irrespective of whether + /// it is being addressed. In Master Mode: - If IC_CON[10]=1'b1 + /// (STOP_DET_IF_MASTER_ACTIVE),the STOP_DET interrupt will be issued only if Master + /// is active. - If IC_CON[10]=1'b0 (STOP_DET_IFADDRESSED),the STOP_DET interrupt + /// will be issued irrespective of whether master is active or not. Reset value: 0x0 + STOP_DET: u1, + /// Indicates whether a START or RESTART condition has occurred on the I2C interface + /// regardless of whether DW_apb_i2c is operating in slave or master mode.\n\n + /// Reset value: 0x0 + START_DET: u1, + /// Set only when a General Call address is received and it is acknowledged. It + /// stays set until it is cleared either by disabling DW_apb_i2c or when the CPU + /// reads bit 0 of the IC_CLR_GEN_CALL register. DW_apb_i2c stores the received data + /// in the Rx buffer.\n\n + /// Reset value: 0x0 + GEN_CALL: u1, + /// Indicates whether a RESTART condition has occurred on the I2C interface when + /// DW_apb_i2c is operating in Slave mode and the slave is being addressed. Enabled + /// only when IC_SLV_RESTART_DET_EN=1.\n\n + /// Note: However, in high-speed mode or during a START BYTE transfer, the RESTART + /// comes before the address field as per the I2C protocol. In this case, the slave + /// is not the addressed slave when the RESTART is issued, therefore DW_apb_i2c does + /// not generate the RESTART_DET interrupt.\n\n + /// Reset value: 0x0 + RESTART_DET: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + }), base_address + 0x34); + + /// address: 0x40048038 + /// I2C Receive FIFO Threshold Register + pub const IC_RX_TL = @intToPtr(*volatile Mmio(32, packed struct { + /// Receive FIFO Threshold Level.\n\n + /// Controls the level of entries (or above) that triggers the RX_FULL interrupt + /// (bit 2 in IC_RAW_INTR_STAT register). The valid range is 0-255, with the + /// additional restriction that hardware does not allow this value to be set to a + /// value larger than the depth of the buffer. If an attempt is made to do that, the + /// actual value set will be the maximum depth of the buffer. A value of 0 sets the + /// threshold for 1 entry, and a value of 255 sets the threshold for 256 entries. + RX_TL: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x38); + + /// address: 0x4004803c + /// I2C Transmit FIFO Threshold Register + pub const IC_TX_TL = @intToPtr(*volatile Mmio(32, packed struct { + /// Transmit FIFO Threshold Level.\n\n + /// Controls the level of entries (or below) that trigger the TX_EMPTY interrupt + /// (bit 4 in IC_RAW_INTR_STAT register). The valid range is 0-255, with the + /// additional restriction that it may not be set to value larger than the depth of + /// the buffer. If an attempt is made to do that, the actual value set will be the + /// maximum depth of the buffer. A value of 0 sets the threshold for 0 entries, and + /// a value of 255 sets the threshold for 255 entries. + TX_TL: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x3c); + + /// address: 0x40048040 + /// Clear Combined and Individual Interrupt Register + pub const IC_CLR_INTR = @intToPtr(*volatile Mmio(32, packed struct { + /// Read this register to clear the combined interrupt, all individual interrupts, + /// and the IC_TX_ABRT_SOURCE register. This bit does not clear hardware clearable + /// interrupts but software clearable interrupts. Refer to Bit 9 of the + /// IC_TX_ABRT_SOURCE register for an exception to clearing IC_TX_ABRT_SOURCE.\n\n + /// Reset value: 0x0 + CLR_INTR: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x40); + + /// address: 0x40048044 + /// Clear RX_UNDER Interrupt Register + pub const IC_CLR_RX_UNDER = @intToPtr(*volatile Mmio(32, packed struct { + /// Read this register to clear the RX_UNDER interrupt (bit 0) of the + /// IC_RAW_INTR_STAT register.\n\n + /// Reset value: 0x0 + CLR_RX_UNDER: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x44); + + /// address: 0x40048048 + /// Clear RX_OVER Interrupt Register + pub const IC_CLR_RX_OVER = @intToPtr(*volatile Mmio(32, packed struct { + /// Read this register to clear the RX_OVER interrupt (bit 1) of the + /// IC_RAW_INTR_STAT register.\n\n + /// Reset value: 0x0 + CLR_RX_OVER: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x48); + + /// address: 0x4004804c + /// Clear TX_OVER Interrupt Register + pub const IC_CLR_TX_OVER = @intToPtr(*volatile Mmio(32, packed struct { + /// Read this register to clear the TX_OVER interrupt (bit 3) of the + /// IC_RAW_INTR_STAT register.\n\n + /// Reset value: 0x0 + CLR_TX_OVER: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x4c); + + /// address: 0x40048050 + /// Clear RD_REQ Interrupt Register + pub const IC_CLR_RD_REQ = @intToPtr(*volatile Mmio(32, packed struct { + /// Read this register to clear the RD_REQ interrupt (bit 5) of the IC_RAW_INTR_STAT + /// register.\n\n + /// Reset value: 0x0 + CLR_RD_REQ: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x50); + + /// address: 0x40048054 + /// Clear TX_ABRT Interrupt Register + pub const IC_CLR_TX_ABRT = @intToPtr(*volatile Mmio(32, packed struct { + /// Read this register to clear the TX_ABRT interrupt (bit 6) of the + /// IC_RAW_INTR_STAT register, and the IC_TX_ABRT_SOURCE register. This also + /// releases the TX FIFO from the flushed/reset state, allowing more writes to the + /// TX FIFO. Refer to Bit 9 of the IC_TX_ABRT_SOURCE register for an exception to + /// clearing IC_TX_ABRT_SOURCE.\n\n + /// Reset value: 0x0 + CLR_TX_ABRT: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x54); + + /// address: 0x40048058 + /// Clear RX_DONE Interrupt Register + pub const IC_CLR_RX_DONE = @intToPtr(*volatile Mmio(32, packed struct { + /// Read this register to clear the RX_DONE interrupt (bit 7) of the + /// IC_RAW_INTR_STAT register.\n\n + /// Reset value: 0x0 + CLR_RX_DONE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x58); + + /// address: 0x4004805c + /// Clear ACTIVITY Interrupt Register + pub const IC_CLR_ACTIVITY = @intToPtr(*volatile Mmio(32, packed struct { + /// Reading this register clears the ACTIVITY interrupt if the I2C is not active + /// anymore. If the I2C module is still active on the bus, the ACTIVITY interrupt + /// bit continues to be set. It is automatically cleared by hardware if the module + /// is disabled and if there is no further activity on the bus. The value read from + /// this register to get status of the ACTIVITY interrupt (bit 8) of the + /// IC_RAW_INTR_STAT register.\n\n + /// Reset value: 0x0 + CLR_ACTIVITY: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x5c); + + /// address: 0x40048060 + /// Clear STOP_DET Interrupt Register + pub const IC_CLR_STOP_DET = @intToPtr(*volatile Mmio(32, packed struct { + /// Read this register to clear the STOP_DET interrupt (bit 9) of the + /// IC_RAW_INTR_STAT register.\n\n + /// Reset value: 0x0 + CLR_STOP_DET: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x60); + + /// address: 0x40048064 + /// Clear START_DET Interrupt Register + pub const IC_CLR_START_DET = @intToPtr(*volatile Mmio(32, packed struct { + /// Read this register to clear the START_DET interrupt (bit 10) of the + /// IC_RAW_INTR_STAT register.\n\n + /// Reset value: 0x0 + CLR_START_DET: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x64); + + /// address: 0x40048068 + /// Clear GEN_CALL Interrupt Register + pub const IC_CLR_GEN_CALL = @intToPtr(*volatile Mmio(32, packed struct { + /// Read this register to clear the GEN_CALL interrupt (bit 11) of IC_RAW_INTR_STAT + /// register.\n\n + /// Reset value: 0x0 + CLR_GEN_CALL: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x68); + + /// address: 0x4004806c + /// I2C Enable Register + pub const IC_ENABLE = @intToPtr(*volatile Mmio(32, packed struct { + /// Controls whether the DW_apb_i2c is enabled. - 0: Disables DW_apb_i2c (TX and RX + /// FIFOs are held in an erased state) - 1: Enables DW_apb_i2c Software can disable + /// DW_apb_i2c while it is active. However, it is important that care be taken to + /// ensure that DW_apb_i2c is disabled properly. A recommended procedure is + /// described in 'Disabling DW_apb_i2c'.\n\n + /// When DW_apb_i2c is disabled, the following occurs: - The TX FIFO and RX FIFO get + /// flushed. - Status bits in the IC_INTR_STAT register are still active until + /// DW_apb_i2c goes into IDLE state. If the module is transmitting, it stops as well + /// as deletes the contents of the transmit buffer after the current transfer is + /// complete. If the module is receiving, the DW_apb_i2c stops the current transfer + /// at the end of the current byte and does not acknowledge the transfer.\n\n + /// In systems with asynchronous pclk and ic_clk when IC_CLK_TYPE parameter set to + /// asynchronous (1), there is a two ic_clk delay when enabling or disabling the + /// DW_apb_i2c. For a detailed description on how to disable DW_apb_i2c, refer to + /// 'Disabling DW_apb_i2c'\n\n + /// Reset value: 0x0 + ENABLE: u1, + /// When set, the controller initiates the transfer abort. - 0: ABORT not initiated + /// or ABORT done - 1: ABORT operation in progress The software can abort the I2C + /// transfer in master mode by setting this bit. The software can set this bit only + /// when ENABLE is already set; otherwise, the controller ignores any write to ABORT + /// bit. The software cannot clear the ABORT bit once set. In response to an ABORT, + /// the controller issues a STOP and flushes the Tx FIFO after completing the + /// current transfer, then sets the TX_ABORT interrupt after the abort operation. + /// The ABORT bit is cleared automatically after the abort operation.\n\n + /// For a detailed description on how to abort I2C transfers, refer to 'Aborting I2C + /// Transfers'.\n\n + /// Reset value: 0x0 + ABORT: u1, + /// In Master mode: - 1'b1: Blocks the transmission of data on I2C bus even if Tx + /// FIFO has data to transmit. - 1'b0: The transmission of data starts on I2C bus + /// automatically, as soon as the first data is available in the Tx FIFO. Note: To + /// block the execution of Master commands, set the TX_CMD_BLOCK bit only when Tx + /// FIFO is empty (IC_STATUS[2]==1) and Master is in Idle state (IC_STATUS[5] == 0). + /// Any further commands put in the Tx FIFO are not executed until TX_CMD_BLOCK bit + /// is unset. Reset value: IC_TX_CMD_BLOCK_DEFAULT + TX_CMD_BLOCK: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + }), base_address + 0x6c); + + /// address: 0x40048070 + /// I2C Status Register\n\n + /// This is a read-only register used to indicate the current transfer status and + /// FIFO status. The status register may be read at any time. None of the bits in + /// this register request an interrupt.\n\n + /// When the I2C is disabled by writing 0 in bit 0 of the IC_ENABLE register: - Bits + /// 1 and 2 are set to 1 - Bits 3 and 10 are set to 0 When the master or slave state + /// machines goes to idle and ic_en=0: - Bits 5 and 6 are set to 0 + pub const IC_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + /// I2C Activity Status. Reset value: 0x0 + ACTIVITY: u1, + /// Transmit FIFO Not Full. Set when the transmit FIFO contains one or more empty + /// locations, and is cleared when the FIFO is full. - 0: Transmit FIFO is full - 1: + /// Transmit FIFO is not full Reset value: 0x1 + TFNF: u1, + /// Transmit FIFO Completely Empty. When the transmit FIFO is completely empty, this + /// bit is set. When it contains one or more valid entries, this bit is cleared. + /// This bit field does not request an interrupt. - 0: Transmit FIFO is not empty - + /// 1: Transmit FIFO is empty Reset value: 0x1 + TFE: u1, + /// Receive FIFO Not Empty. This bit is set when the receive FIFO contains one or + /// more entries; it is cleared when the receive FIFO is empty. - 0: Receive FIFO is + /// empty - 1: Receive FIFO is not empty Reset value: 0x0 + RFNE: u1, + /// Receive FIFO Completely Full. When the receive FIFO is completely full, this bit + /// is set. When the receive FIFO contains one or more empty location, this bit is + /// cleared. - 0: Receive FIFO is not full - 1: Receive FIFO is full Reset value: + /// 0x0 + RFF: u1, + /// Master FSM Activity Status. When the Master Finite State Machine (FSM) is not in + /// the IDLE state, this bit is set. - 0: Master FSM is in IDLE state so the Master + /// part of DW_apb_i2c is not Active - 1: Master FSM is not in IDLE state so the + /// Master part of DW_apb_i2c is Active Note: IC_STATUS[0]-that is, ACTIVITY bit-is + /// the OR of SLV_ACTIVITY and MST_ACTIVITY bits.\n\n + /// Reset value: 0x0 + MST_ACTIVITY: u1, + /// Slave FSM Activity Status. When the Slave Finite State Machine (FSM) is not in + /// the IDLE state, this bit is set. - 0: Slave FSM is in IDLE state so the Slave + /// part of DW_apb_i2c is not Active - 1: Slave FSM is not in IDLE state so the + /// Slave part of DW_apb_i2c is Active Reset value: 0x0 + SLV_ACTIVITY: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + }), base_address + 0x70); + + /// address: 0x40048074 + /// I2C Transmit FIFO Level Register This register contains the number of valid data + /// entries in the transmit FIFO buffer. It is cleared whenever: - The I2C is + /// disabled - There is a transmit abort - that is, TX_ABRT bit is set in the + /// IC_RAW_INTR_STAT register - The slave bulk transmit mode is aborted The register + /// increments whenever data is placed into the transmit FIFO and decrements when + /// data is taken from the transmit FIFO. + pub const IC_TXFLR = @intToPtr(*volatile Mmio(32, packed struct { + /// Transmit FIFO Level. Contains the number of valid data entries in the transmit + /// FIFO.\n\n + /// Reset value: 0x0 + TXFLR: u5, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + }), base_address + 0x74); + + /// address: 0x40048078 + /// I2C Receive FIFO Level Register This register contains the number of valid data + /// entries in the receive FIFO buffer. It is cleared whenever: - The I2C is + /// disabled - Whenever there is a transmit abort caused by any of the events + /// tracked in IC_TX_ABRT_SOURCE The register increments whenever data is placed + /// into the receive FIFO and decrements when data is taken from the receive FIFO. + pub const IC_RXFLR = @intToPtr(*volatile Mmio(32, packed struct { + /// Receive FIFO Level. Contains the number of valid data entries in the receive + /// FIFO.\n\n + /// Reset value: 0x0 + RXFLR: u5, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + }), base_address + 0x78); + + /// address: 0x4004807c + /// I2C SDA Hold Time Length Register\n\n + /// The bits [15:0] of this register are used to control the hold time of SDA during + /// transmit in both slave and master mode (after SCL goes from HIGH to LOW).\n\n + /// The bits [23:16] of this register are used to extend the SDA transition (if any) + /// whenever SCL is HIGH in the receiver in either master or slave mode.\n\n + /// Writes to this register succeed only when IC_ENABLE[0]=0.\n\n + /// The values in this register are in units of ic_clk period. The value programmed + /// in IC_SDA_TX_HOLD must be greater than the minimum hold time in each mode (one + /// cycle in master mode, seven cycles in slave mode) for the value to be + /// implemented.\n\n + /// The programmed SDA hold time during transmit (IC_SDA_TX_HOLD) cannot exceed at + /// any time the duration of the low part of scl. Therefore the programmed value + /// cannot be larger than N_SCL_LOW-2, where N_SCL_LOW is the duration of the low + /// part of the scl period measured in ic_clk cycles. + pub const IC_SDA_HOLD = @intToPtr(*volatile Mmio(32, packed struct { + /// Sets the required SDA hold time in units of ic_clk period, when DW_apb_i2c acts + /// as a transmitter.\n\n + /// Reset value: IC_DEFAULT_SDA_HOLD[15:0]. + IC_SDA_TX_HOLD: u16, + /// Sets the required SDA hold time in units of ic_clk period, when DW_apb_i2c acts + /// as a receiver.\n\n + /// Reset value: IC_DEFAULT_SDA_HOLD[23:16]. + IC_SDA_RX_HOLD: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x7c); + + /// address: 0x40048080 + /// I2C Transmit Abort Source Register\n\n + /// This register has 32 bits that indicate the source of the TX_ABRT bit. Except + /// for Bit 9, this register is cleared whenever the IC_CLR_TX_ABRT register or the + /// IC_CLR_INTR register is read. To clear Bit 9, the source of the + /// ABRT_SBYTE_NORSTRT must be fixed first; RESTART must be enabled (IC_CON[5]=1), + /// the SPECIAL bit must be cleared (IC_TAR[11]), or the GC_OR_START bit must be + /// cleared (IC_TAR[10]).\n\n + /// Once the source of the ABRT_SBYTE_NORSTRT is fixed, then this bit can be cleared + /// in the same manner as other bits in this register. If the source of the + /// ABRT_SBYTE_NORSTRT is not fixed before attempting to clear this bit, Bit 9 + /// clears for one cycle and is then re-asserted. + pub const IC_TX_ABRT_SOURCE = @intToPtr(*volatile Mmio(32, packed struct { + /// This field indicates that the Master is in 7-bit addressing mode and the address + /// sent was not acknowledged by any slave.\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master-Transmitter or Master-Receiver + ABRT_7B_ADDR_NOACK: u1, + /// This field indicates that the Master is in 10-bit address mode and the first + /// 10-bit address byte was not acknowledged by any slave.\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master-Transmitter or Master-Receiver + ABRT_10ADDR1_NOACK: u1, + /// This field indicates that the Master is in 10-bit address mode and that the + /// second address byte of the 10-bit address was not acknowledged by any slave.\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master-Transmitter or Master-Receiver + ABRT_10ADDR2_NOACK: u1, + /// This field indicates the master-mode only bit. When the master receives an + /// acknowledgement for the address, but when it sends data byte(s) following the + /// address, it did not receive an acknowledge from the remote slave(s).\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master-Transmitter + ABRT_TXDATA_NOACK: u1, + /// This field indicates that DW_apb_i2c in master mode has sent a General Call and + /// no slave on the bus acknowledged the General Call.\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master-Transmitter + ABRT_GCALL_NOACK: u1, + /// This field indicates that DW_apb_i2c in the master mode has sent a General Call + /// but the user programmed the byte following the General Call to be a read from + /// the bus (IC_DATA_CMD[9] is set to 1).\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master-Transmitter + ABRT_GCALL_READ: u1, + /// This field indicates that the Master is in High Speed mode and the High Speed + /// Master code was acknowledged (wrong behavior).\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master + ABRT_HS_ACKDET: u1, + /// This field indicates that the Master has sent a START Byte and the START Byte + /// was acknowledged (wrong behavior).\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master + ABRT_SBYTE_ACKDET: u1, + /// This field indicates that the restart is disabled (IC_RESTART_EN bit (IC_CON[5]) + /// =0) and the user is trying to use the master to transfer data in High Speed + /// mode.\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master-Transmitter or Master-Receiver + ABRT_HS_NORSTRT: u1, + /// To clear Bit 9, the source of the ABRT_SBYTE_NORSTRT must be fixed first; + /// restart must be enabled (IC_CON[5]=1), the SPECIAL bit must be cleared + /// (IC_TAR[11]), or the GC_OR_START bit must be cleared (IC_TAR[10]). Once the + /// source of the ABRT_SBYTE_NORSTRT is fixed, then this bit can be cleared in the + /// same manner as other bits in this register. If the source of the + /// ABRT_SBYTE_NORSTRT is not fixed before attempting to clear this bit, bit 9 + /// clears for one cycle and then gets reasserted. When this field is set to 1, the + /// restart is disabled (IC_RESTART_EN bit (IC_CON[5]) =0) and the user is trying to + /// send a START Byte.\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master + ABRT_SBYTE_NORSTRT: u1, + /// This field indicates that the restart is disabled (IC_RESTART_EN bit (IC_CON[5]) + /// =0) and the master sends a read command in 10-bit addressing mode.\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master-Receiver + ABRT_10B_RD_NORSTRT: u1, + /// This field indicates that the User tries to initiate a Master operation with the + /// Master mode disabled.\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master-Transmitter or Master-Receiver + ABRT_MASTER_DIS: u1, + /// This field specifies that the Master has lost arbitration, or if + /// IC_TX_ABRT_SOURCE[14] is also set, then the slave transmitter has lost + /// arbitration.\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master-Transmitter or Slave-Transmitter + ARB_LOST: u1, + /// This field specifies that the Slave has received a read command and some data + /// exists in the TX FIFO, so the slave issues a TX_ABRT interrupt to flush old data + /// in TX FIFO.\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Slave-Transmitter + ABRT_SLVFLUSH_TXFIFO: u1, + /// This field indicates that a Slave has lost the bus while transmitting data to a + /// remote master. IC_TX_ABRT_SOURCE[12] is set at the same time. Note: Even though + /// the slave never 'owns' the bus, something could go wrong on the bus. This is a + /// fail safe check. For instance, during a data transmission at the low-to-high + /// transition of SCL, if what is on the data bus is not what is supposed to be + /// transmitted, then DW_apb_i2c no longer own the bus.\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Slave-Transmitter + ABRT_SLV_ARBLOST: u1, + /// 1: When the processor side responds to a slave mode request for data to be + /// transmitted to a remote master and user writes a 1 in CMD (bit 8) of IC_DATA_CMD + /// register.\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Slave-Transmitter + ABRT_SLVRD_INTX: u1, + /// This is a master-mode-only bit. Master has detected the transfer abort + /// (IC_ENABLE[1])\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master-Transmitter + ABRT_USER_ABRT: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + /// This field indicates the number of Tx FIFO Data Commands which are flushed due + /// to TX_ABRT interrupt. It is cleared whenever I2C is disabled.\n\n + /// Reset value: 0x0\n\n + /// Role of DW_apb_i2c: Master-Transmitter or Slave-Transmitter + TX_FLUSH_CNT: u9, + }), base_address + 0x80); + + /// address: 0x40048084 + /// Generate Slave Data NACK Register\n\n + /// The register is used to generate a NACK for the data part of a transfer when + /// DW_apb_i2c is acting as a slave-receiver. This register only exists when the + /// IC_SLV_DATA_NACK_ONLY parameter is set to 1. When this parameter disabled, this + /// register does not exist and writing to the register's address has no effect.\n\n + /// A write can occur on this register if both of the following conditions are met: + /// - DW_apb_i2c is disabled (IC_ENABLE[0] = 0) - Slave part is inactive + /// (IC_STATUS[6] = 0) Note: The IC_STATUS[6] is a register read-back location for + /// the internal slv_activity signal; the user should poll this before writing the + /// ic_slv_data_nack_only bit. + pub const IC_SLV_DATA_NACK_ONLY = @intToPtr(*volatile Mmio(32, packed struct { + /// Generate NACK. This NACK generation only occurs when DW_apb_i2c is a + /// slave-receiver. If this register is set to a value of 1, it can only generate a + /// NACK after a data byte is received; hence, the data transfer is aborted and the + /// data received is not pushed to the receive buffer.\n\n + /// When the register is set to a value of 0, it generates NACK/ACK, depending on + /// normal criteria. - 1: generate NACK after data byte received - 0: generate + /// NACK/ACK normally Reset value: 0x0 + NACK: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x84); + + /// address: 0x40048088 + /// DMA Control Register\n\n + /// The register is used to enable the DMA Controller interface operation. There is + /// a separate bit for transmit and receive. This can be programmed regardless of + /// the state of IC_ENABLE. + pub const IC_DMA_CR = @intToPtr(*volatile Mmio(32, packed struct { + /// Receive DMA Enable. This bit enables/disables the receive FIFO DMA channel. + /// Reset value: 0x0 + RDMAE: u1, + /// Transmit DMA Enable. This bit enables/disables the transmit FIFO DMA channel. + /// Reset value: 0x0 + TDMAE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + }), base_address + 0x88); + + /// address: 0x4004808c + /// DMA Transmit Data Level Register + pub const IC_DMA_TDLR = @intToPtr(*volatile Mmio(32, packed struct { + /// Transmit Data Level. This bit field controls the level at which a DMA request is + /// made by the transmit logic. It is equal to the watermark level; that is, the + /// dma_tx_req signal is generated when the number of valid data entries in the + /// transmit FIFO is equal to or below this field value, and TDMAE = 1.\n\n + /// Reset value: 0x0 + DMATDL: u4, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + }), base_address + 0x8c); + + /// address: 0x40048090 + /// I2C Receive Data Level Register + pub const IC_DMA_RDLR = @intToPtr(*volatile Mmio(32, packed struct { + /// Receive Data Level. This bit field controls the level at which a DMA request is + /// made by the receive logic. The watermark level = DMARDL+1; that is, dma_rx_req + /// is generated when the number of valid data entries in the receive FIFO is equal + /// to or more than this field value + 1, and RDMAE =1. For instance, when DMARDL is + /// 0, then dma_rx_req is asserted when 1 or more data entries are present in the + /// receive FIFO.\n\n + /// Reset value: 0x0 + DMARDL: u4, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + }), base_address + 0x90); + + /// address: 0x40048094 + /// I2C SDA Setup Register\n\n + /// This register controls the amount of time delay (in terms of number of ic_clk + /// clock periods) introduced in the rising edge of SCL - relative to SDA changing - + /// when DW_apb_i2c services a read request in a slave-transmitter operation. The + /// relevant I2C requirement is tSU:DAT (note 4) as detailed in the I2C Bus + /// Specification. This register must be programmed with a value equal to or greater + /// than 2.\n\n + /// Writes to this register succeed only when IC_ENABLE[0] = 0.\n\n + /// Note: The length of setup time is calculated using [(IC_SDA_SETUP - 1) * + /// (ic_clk_period)], so if the user requires 10 ic_clk periods of setup time, they + /// should program a value of 11. The IC_SDA_SETUP register is only used by the + /// DW_apb_i2c when operating as a slave transmitter. + pub const IC_SDA_SETUP = @intToPtr(*volatile Mmio(32, packed struct { + /// SDA Setup. It is recommended that if the required delay is 1000ns, then for an + /// ic_clk frequency of 10 MHz, IC_SDA_SETUP should be programmed to a value of 11. + /// IC_SDA_SETUP must be programmed with a minimum value of 2. + SDA_SETUP: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x94); + + /// address: 0x40048098 + /// I2C ACK General Call Register\n\n + /// The register controls whether DW_apb_i2c responds with a ACK or NACK when it + /// receives an I2C General Call address.\n\n + /// This register is applicable only when the DW_apb_i2c is in slave mode. + pub const IC_ACK_GENERAL_CALL = @intToPtr(*volatile Mmio(32, packed struct { + /// ACK General Call. When set to 1, DW_apb_i2c responds with a ACK (by asserting + /// ic_data_oe) when it receives a General Call. Otherwise, DW_apb_i2c responds with + /// a NACK (by negating ic_data_oe). + ACK_GEN_CALL: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x98); + + /// address: 0x4004809c + /// I2C Enable Status Register\n\n + /// The register is used to report the DW_apb_i2c hardware status when the + /// IC_ENABLE[0] register is set from 1 to 0; that is, when DW_apb_i2c is + /// disabled.\n\n + /// If IC_ENABLE[0] has been set to 1, bits 2:1 are forced to 0, and bit 0 is forced + /// to 1.\n\n + /// If IC_ENABLE[0] has been set to 0, bits 2:1 is only be valid as soon as bit 0 is + /// read as '0'.\n\n + /// Note: When IC_ENABLE[0] has been set to 0, a delay occurs for bit 0 to be read + /// as 0 because disabling the DW_apb_i2c depends on I2C bus activities. + pub const IC_ENABLE_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + /// ic_en Status. This bit always reflects the value driven on the output port + /// ic_en. - When read as 1, DW_apb_i2c is deemed to be in an enabled state. - When + /// read as 0, DW_apb_i2c is deemed completely inactive. Note: The CPU can safely + /// read this bit anytime. When this bit is read as 0, the CPU can safely read + /// SLV_RX_DATA_LOST (bit 2) and SLV_DISABLED_WHILE_BUSY (bit 1).\n\n + /// Reset value: 0x0 + IC_EN: u1, + /// Slave Disabled While Busy (Transmit, Receive). This bit indicates if a potential + /// or active Slave operation has been aborted due to the setting bit 0 of the + /// IC_ENABLE register from 1 to 0. This bit is set when the CPU writes a 0 to the + /// IC_ENABLE register while:\n\n + /// (a) DW_apb_i2c is receiving the address byte of the Slave-Transmitter operation + /// from a remote master;\n\n + /// OR,\n\n + /// (b) address and data bytes of the Slave-Receiver operation from a remote + /// master.\n\n + /// When read as 1, DW_apb_i2c is deemed to have forced a NACK during any part of an + /// I2C transfer, irrespective of whether the I2C address matches the slave address + /// set in DW_apb_i2c (IC_SAR register) OR if the transfer is completed before + /// IC_ENABLE is set to 0 but has not taken effect.\n\n + /// Note: If the remote I2C master terminates the transfer with a STOP condition + /// before the DW_apb_i2c has a chance to NACK a transfer, and IC_ENABLE[0] has been + /// set to 0, then this bit will also be set to 1.\n\n + /// When read as 0, DW_apb_i2c is deemed to have been disabled when there is master + /// activity, or when the I2C bus is idle.\n\n + /// Note: The CPU can safely read this bit when IC_EN (bit 0) is read as 0.\n\n + /// Reset value: 0x0 + SLV_DISABLED_WHILE_BUSY: u1, + /// Slave Received Data Lost. This bit indicates if a Slave-Receiver operation has + /// been aborted with at least one data byte received from an I2C transfer due to + /// the setting bit 0 of IC_ENABLE from 1 to 0. When read as 1, DW_apb_i2c is deemed + /// to have been actively engaged in an aborted I2C transfer (with matching address) + /// and the data phase of the I2C transfer has been entered, even though a data byte + /// has been responded with a NACK.\n\n + /// Note: If the remote I2C master terminates the transfer with a STOP condition + /// before the DW_apb_i2c has a chance to NACK a transfer, and IC_ENABLE[0] has been + /// set to 0, then this bit is also set to 1.\n\n + /// When read as 0, DW_apb_i2c is deemed to have been disabled without being + /// actively involved in the data phase of a Slave-Receiver transfer.\n\n + /// Note: The CPU can safely read this bit when IC_EN (bit 0) is read as 0.\n\n + /// Reset value: 0x0 + SLV_RX_DATA_LOST: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + }), base_address + 0x9c); + + /// address: 0x400480a0 + /// I2C SS, FS or FM+ spike suppression limit\n\n + /// This register is used to store the duration, measured in ic_clk cycles, of the + /// longest spike that is filtered out by the spike suppression logic when the + /// component is operating in SS, FS or FM+ modes. The relevant I2C requirement is + /// tSP (table 4) as detailed in the I2C Bus Specification. This register must be + /// programmed with a minimum value of 1. + pub const IC_FS_SPKLEN = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xa0); + + /// address: 0x400480a8 + /// Clear RESTART_DET Interrupt Register + pub const IC_CLR_RESTART_DET = @intToPtr(*volatile Mmio(32, packed struct { + /// Read this register to clear the RESTART_DET interrupt (bit 12) of + /// IC_RAW_INTR_STAT register.\n\n + /// Reset value: 0x0 + CLR_RESTART_DET: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0xa8); + + /// address: 0x400480f4 + /// Component Parameter Register 1\n\n + /// Note This register is not implemented and therefore reads as 0. If it was + /// implemented it would be a constant read-only register that contains encoded + /// information about the component's parameter settings. Fields shown below are the + /// settings for those parameters + pub const IC_COMP_PARAM_1 = @intToPtr(*volatile Mmio(32, packed struct { + /// APB data bus width is 32 bits + APB_DATA_WIDTH: u2, + /// MAX SPEED MODE = FAST MODE + MAX_SPEED_MODE: u2, + /// Programmable count values for each mode. + HC_COUNT_VALUES: u1, + /// COMBINED Interrupt outputs + INTR_IO: u1, + /// DMA handshaking signals are enabled + HAS_DMA: u1, + /// Encoded parameters not visible + ADD_ENCODED_PARAMS: u1, + /// RX Buffer Depth = 16 + RX_BUFFER_DEPTH: u8, + /// TX Buffer Depth = 16 + TX_BUFFER_DEPTH: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0xf4); + + /// address: 0x400480f8 + /// I2C Component Version Register + pub const IC_COMP_VERSION = @intToPtr(*volatile u32, base_address + 0xf8); + + /// address: 0x400480fc + /// I2C Component Type Register + pub const IC_COMP_TYPE = @intToPtr(*volatile u32, base_address + 0xfc); + }; + + /// Control and data interface to SAR ADC + pub const ADC = struct { + pub const base_address = 0x4004c000; + pub const version = "2"; + + /// address: 0x4004c000 + /// ADC Control and Status + pub const CS = @intToPtr(*volatile Mmio(32, packed struct { + /// Power on ADC and enable its clock.\n + /// 1 - enabled. 0 - disabled. + EN: u1, + /// Power on temperature sensor. 1 - enabled. 0 - disabled. + TS_EN: u1, + /// Start a single conversion. Self-clearing. Ignored if start_many is asserted. + START_ONCE: u1, + /// Continuously perform conversions whilst this bit is 1. A new conversion will + /// start immediately after the previous finishes. + START_MANY: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + /// 1 if the ADC is ready to start a new conversion. Implies any previous conversion + /// has completed.\n + /// 0 whilst conversion in progress. + READY: u1, + /// The most recent ADC conversion encountered an error; result is undefined or + /// noisy. + ERR: u1, + /// Some past ADC conversion encountered an error. Write 1 to clear. + ERR_STICKY: u1, + reserved4: u1 = 0, + /// Select analog mux input. Updated automatically in round-robin mode. + AINSEL: u3, + reserved5: u1 = 0, + /// Round-robin sampling. 1 bit per channel. Set all bits to 0 to disable.\n + /// Otherwise, the ADC will cycle through each enabled channel in a round-robin + /// fashion.\n + /// The first channel to be sampled will be the one currently indicated by AINSEL.\n + /// AINSEL will be updated after each conversion with the newly-selected channel. + RROBIN: u5, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + }), base_address + 0x0); + + /// address: 0x4004c004 + /// Result of most recent ADC conversion + pub const RESULT = @intToPtr(*volatile MmioInt(32, u12), base_address + 0x4); + + /// address: 0x4004c008 + /// FIFO control and status + pub const FCS = @intToPtr(*volatile Mmio(32, packed struct { + /// If 1: write result to the FIFO after each conversion. + EN: u1, + /// If 1: FIFO results are right-shifted to be one byte in size. Enables DMA to byte + /// buffers. + SHIFT: u1, + /// If 1: conversion error bit appears in the FIFO alongside the result + ERR: u1, + /// If 1: assert DMA requests when FIFO contains data + DREQ_EN: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + EMPTY: u1, + FULL: u1, + /// 1 if the FIFO has been underflowed. Write 1 to clear. + UNDER: u1, + /// 1 if the FIFO has been overflowed. Write 1 to clear. + OVER: u1, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// The number of conversion results currently waiting in the FIFO + LEVEL: u4, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + /// DREQ/IRQ asserted when level >= threshold + THRESH: u4, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + }), base_address + 0x8); + + /// address: 0x4004c00c + /// Conversion result FIFO + pub const FIFO = @intToPtr(*volatile Mmio(32, packed struct { + VAL: u12, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + /// 1 if this particular sample experienced a conversion error. Remains in the same + /// location if the sample is shifted. + ERR: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + }), base_address + 0xc); + + /// address: 0x4004c010 + /// Clock divider. If non-zero, CS_START_MANY will start conversions\n + /// at regular intervals rather than back-to-back.\n + /// The divider is reset when either of these fields are written.\n + /// Total period is 1 + INT + FRAC / 256 + pub const DIV = @intToPtr(*volatile Mmio(32, packed struct { + /// Fractional part of clock divisor. First-order delta-sigma. + FRAC: u8, + /// Integer part of clock divisor. + INT: u16, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x10); + + /// address: 0x4004c014 + /// Raw Interrupts + pub const INTR = @intToPtr(*volatile Mmio(32, packed struct { + /// Triggered when the sample FIFO reaches a certain level.\n + /// This level can be programmed via the FCS_THRESH field. + FIFO: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x14); + + /// address: 0x4004c018 + /// Interrupt Enable + pub const INTE = @intToPtr(*volatile Mmio(32, packed struct { + /// Triggered when the sample FIFO reaches a certain level.\n + /// This level can be programmed via the FCS_THRESH field. + FIFO: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x18); + + /// address: 0x4004c01c + /// Interrupt Force + pub const INTF = @intToPtr(*volatile Mmio(32, packed struct { + /// Triggered when the sample FIFO reaches a certain level.\n + /// This level can be programmed via the FCS_THRESH field. + FIFO: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x1c); + + /// address: 0x4004c020 + /// Interrupt status after masking & forcing + pub const INTS = @intToPtr(*volatile Mmio(32, packed struct { + /// Triggered when the sample FIFO reaches a certain level.\n + /// This level can be programmed via the FCS_THRESH field. + FIFO: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x20); + }; + + /// Simple PWM + pub const PWM = struct { + pub const base_address = 0x40050000; + pub const version = "1"; + + /// address: 0x40050000 + /// Control and status register + pub const CH0_CSR = @intToPtr(*volatile Mmio(32, packed struct { + /// Enable the PWM channel. + EN: u1, + /// 1: Enable phase-correct modulation. 0: Trailing-edge + PH_CORRECT: u1, + /// Invert output A + A_INV: u1, + /// Invert output B + B_INV: u1, + DIVMODE: u2, + /// Retard the phase of the counter by 1 count, while it is running.\n + /// Self-clearing. Write a 1, and poll until low. Counter must be running. + PH_RET: u1, + /// Advance the phase of the counter by 1 count, while it is running.\n + /// Self-clearing. Write a 1, and poll until low. Counter must be running\n + /// at less than full speed (div_int + div_frac / 16 > 1) + PH_ADV: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x0); + + /// address: 0x40050004 + /// INT and FRAC form a fixed-point fractional number.\n + /// Counting rate is system clock frequency divided by this number.\n + /// Fractional division uses simple 1st-order sigma-delta. + pub const CH0_DIV = @intToPtr(*volatile Mmio(32, packed struct { + FRAC: u4, + INT: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x4); + + /// address: 0x40050008 + /// Direct access to the PWM counter + pub const CH0_CTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x8); + + /// address: 0x4005000c + /// Counter compare values + pub const CH0_CC = @intToPtr(*volatile Mmio(32, packed struct { + A: u16, + B: u16, + }), base_address + 0xc); + + /// address: 0x40050010 + /// Counter wrap value + pub const CH0_TOP = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x10); + + /// address: 0x40050014 + /// Control and status register + pub const CH1_CSR = @intToPtr(*volatile Mmio(32, packed struct { + /// Enable the PWM channel. + EN: u1, + /// 1: Enable phase-correct modulation. 0: Trailing-edge + PH_CORRECT: u1, + /// Invert output A + A_INV: u1, + /// Invert output B + B_INV: u1, + DIVMODE: u2, + /// Retard the phase of the counter by 1 count, while it is running.\n + /// Self-clearing. Write a 1, and poll until low. Counter must be running. + PH_RET: u1, + /// Advance the phase of the counter by 1 count, while it is running.\n + /// Self-clearing. Write a 1, and poll until low. Counter must be running\n + /// at less than full speed (div_int + div_frac / 16 > 1) + PH_ADV: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x14); + + /// address: 0x40050018 + /// INT and FRAC form a fixed-point fractional number.\n + /// Counting rate is system clock frequency divided by this number.\n + /// Fractional division uses simple 1st-order sigma-delta. + pub const CH1_DIV = @intToPtr(*volatile Mmio(32, packed struct { + FRAC: u4, + INT: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x18); + + /// address: 0x4005001c + /// Direct access to the PWM counter + pub const CH1_CTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x1c); + + /// address: 0x40050020 + /// Counter compare values + pub const CH1_CC = @intToPtr(*volatile Mmio(32, packed struct { + A: u16, + B: u16, + }), base_address + 0x20); + + /// address: 0x40050024 + /// Counter wrap value + pub const CH1_TOP = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x24); + + /// address: 0x40050028 + /// Control and status register + pub const CH2_CSR = @intToPtr(*volatile Mmio(32, packed struct { + /// Enable the PWM channel. + EN: u1, + /// 1: Enable phase-correct modulation. 0: Trailing-edge + PH_CORRECT: u1, + /// Invert output A + A_INV: u1, + /// Invert output B + B_INV: u1, + DIVMODE: u2, + /// Retard the phase of the counter by 1 count, while it is running.\n + /// Self-clearing. Write a 1, and poll until low. Counter must be running. + PH_RET: u1, + /// Advance the phase of the counter by 1 count, while it is running.\n + /// Self-clearing. Write a 1, and poll until low. Counter must be running\n + /// at less than full speed (div_int + div_frac / 16 > 1) + PH_ADV: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x28); + + /// address: 0x4005002c + /// INT and FRAC form a fixed-point fractional number.\n + /// Counting rate is system clock frequency divided by this number.\n + /// Fractional division uses simple 1st-order sigma-delta. + pub const CH2_DIV = @intToPtr(*volatile Mmio(32, packed struct { + FRAC: u4, + INT: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x2c); + + /// address: 0x40050030 + /// Direct access to the PWM counter + pub const CH2_CTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x30); + + /// address: 0x40050034 + /// Counter compare values + pub const CH2_CC = @intToPtr(*volatile Mmio(32, packed struct { + A: u16, + B: u16, + }), base_address + 0x34); + + /// address: 0x40050038 + /// Counter wrap value + pub const CH2_TOP = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x38); + + /// address: 0x4005003c + /// Control and status register + pub const CH3_CSR = @intToPtr(*volatile Mmio(32, packed struct { + /// Enable the PWM channel. + EN: u1, + /// 1: Enable phase-correct modulation. 0: Trailing-edge + PH_CORRECT: u1, + /// Invert output A + A_INV: u1, + /// Invert output B + B_INV: u1, + DIVMODE: u2, + /// Retard the phase of the counter by 1 count, while it is running.\n + /// Self-clearing. Write a 1, and poll until low. Counter must be running. + PH_RET: u1, + /// Advance the phase of the counter by 1 count, while it is running.\n + /// Self-clearing. Write a 1, and poll until low. Counter must be running\n + /// at less than full speed (div_int + div_frac / 16 > 1) + PH_ADV: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x3c); + + /// address: 0x40050040 + /// INT and FRAC form a fixed-point fractional number.\n + /// Counting rate is system clock frequency divided by this number.\n + /// Fractional division uses simple 1st-order sigma-delta. + pub const CH3_DIV = @intToPtr(*volatile Mmio(32, packed struct { + FRAC: u4, + INT: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x40); + + /// address: 0x40050044 + /// Direct access to the PWM counter + pub const CH3_CTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x44); + + /// address: 0x40050048 + /// Counter compare values + pub const CH3_CC = @intToPtr(*volatile Mmio(32, packed struct { + A: u16, + B: u16, + }), base_address + 0x48); + + /// address: 0x4005004c + /// Counter wrap value + pub const CH3_TOP = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x4c); + + /// address: 0x40050050 + /// Control and status register + pub const CH4_CSR = @intToPtr(*volatile Mmio(32, packed struct { + /// Enable the PWM channel. + EN: u1, + /// 1: Enable phase-correct modulation. 0: Trailing-edge + PH_CORRECT: u1, + /// Invert output A + A_INV: u1, + /// Invert output B + B_INV: u1, + DIVMODE: u2, + /// Retard the phase of the counter by 1 count, while it is running.\n + /// Self-clearing. Write a 1, and poll until low. Counter must be running. + PH_RET: u1, + /// Advance the phase of the counter by 1 count, while it is running.\n + /// Self-clearing. Write a 1, and poll until low. Counter must be running\n + /// at less than full speed (div_int + div_frac / 16 > 1) + PH_ADV: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x50); + + /// address: 0x40050054 + /// INT and FRAC form a fixed-point fractional number.\n + /// Counting rate is system clock frequency divided by this number.\n + /// Fractional division uses simple 1st-order sigma-delta. + pub const CH4_DIV = @intToPtr(*volatile Mmio(32, packed struct { + FRAC: u4, + INT: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x54); + + /// address: 0x40050058 + /// Direct access to the PWM counter + pub const CH4_CTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x58); + + /// address: 0x4005005c + /// Counter compare values + pub const CH4_CC = @intToPtr(*volatile Mmio(32, packed struct { + A: u16, + B: u16, + }), base_address + 0x5c); + + /// address: 0x40050060 + /// Counter wrap value + pub const CH4_TOP = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x60); + + /// address: 0x40050064 + /// Control and status register + pub const CH5_CSR = @intToPtr(*volatile Mmio(32, packed struct { + /// Enable the PWM channel. + EN: u1, + /// 1: Enable phase-correct modulation. 0: Trailing-edge + PH_CORRECT: u1, + /// Invert output A + A_INV: u1, + /// Invert output B + B_INV: u1, + DIVMODE: u2, + /// Retard the phase of the counter by 1 count, while it is running.\n + /// Self-clearing. Write a 1, and poll until low. Counter must be running. + PH_RET: u1, + /// Advance the phase of the counter by 1 count, while it is running.\n + /// Self-clearing. Write a 1, and poll until low. Counter must be running\n + /// at less than full speed (div_int + div_frac / 16 > 1) + PH_ADV: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x64); + + /// address: 0x40050068 + /// INT and FRAC form a fixed-point fractional number.\n + /// Counting rate is system clock frequency divided by this number.\n + /// Fractional division uses simple 1st-order sigma-delta. + pub const CH5_DIV = @intToPtr(*volatile Mmio(32, packed struct { + FRAC: u4, + INT: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x68); + + /// address: 0x4005006c + /// Direct access to the PWM counter + pub const CH5_CTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x6c); + + /// address: 0x40050070 + /// Counter compare values + pub const CH5_CC = @intToPtr(*volatile Mmio(32, packed struct { + A: u16, + B: u16, + }), base_address + 0x70); + + /// address: 0x40050074 + /// Counter wrap value + pub const CH5_TOP = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x74); + + /// address: 0x40050078 + /// Control and status register + pub const CH6_CSR = @intToPtr(*volatile Mmio(32, packed struct { + /// Enable the PWM channel. + EN: u1, + /// 1: Enable phase-correct modulation. 0: Trailing-edge + PH_CORRECT: u1, + /// Invert output A + A_INV: u1, + /// Invert output B + B_INV: u1, + DIVMODE: u2, + /// Retard the phase of the counter by 1 count, while it is running.\n + /// Self-clearing. Write a 1, and poll until low. Counter must be running. + PH_RET: u1, + /// Advance the phase of the counter by 1 count, while it is running.\n + /// Self-clearing. Write a 1, and poll until low. Counter must be running\n + /// at less than full speed (div_int + div_frac / 16 > 1) + PH_ADV: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x78); + + /// address: 0x4005007c + /// INT and FRAC form a fixed-point fractional number.\n + /// Counting rate is system clock frequency divided by this number.\n + /// Fractional division uses simple 1st-order sigma-delta. + pub const CH6_DIV = @intToPtr(*volatile Mmio(32, packed struct { + FRAC: u4, + INT: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x7c); + + /// address: 0x40050080 + /// Direct access to the PWM counter + pub const CH6_CTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x80); + + /// address: 0x40050084 + /// Counter compare values + pub const CH6_CC = @intToPtr(*volatile Mmio(32, packed struct { + A: u16, + B: u16, + }), base_address + 0x84); + + /// address: 0x40050088 + /// Counter wrap value + pub const CH6_TOP = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x88); + + /// address: 0x4005008c + /// Control and status register + pub const CH7_CSR = @intToPtr(*volatile Mmio(32, packed struct { + /// Enable the PWM channel. + EN: u1, + /// 1: Enable phase-correct modulation. 0: Trailing-edge + PH_CORRECT: u1, + /// Invert output A + A_INV: u1, + /// Invert output B + B_INV: u1, + DIVMODE: u2, + /// Retard the phase of the counter by 1 count, while it is running.\n + /// Self-clearing. Write a 1, and poll until low. Counter must be running. + PH_RET: u1, + /// Advance the phase of the counter by 1 count, while it is running.\n + /// Self-clearing. Write a 1, and poll until low. Counter must be running\n + /// at less than full speed (div_int + div_frac / 16 > 1) + PH_ADV: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x8c); + + /// address: 0x40050090 + /// INT and FRAC form a fixed-point fractional number.\n + /// Counting rate is system clock frequency divided by this number.\n + /// Fractional division uses simple 1st-order sigma-delta. + pub const CH7_DIV = @intToPtr(*volatile Mmio(32, packed struct { + FRAC: u4, + INT: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x90); + + /// address: 0x40050094 + /// Direct access to the PWM counter + pub const CH7_CTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x94); + + /// address: 0x40050098 + /// Counter compare values + pub const CH7_CC = @intToPtr(*volatile Mmio(32, packed struct { + A: u16, + B: u16, + }), base_address + 0x98); + + /// address: 0x4005009c + /// Counter wrap value + pub const CH7_TOP = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x9c); + + /// address: 0x400500a0 + /// This register aliases the CSR_EN bits for all channels.\n + /// Writing to this register allows multiple channels to be enabled\n + /// or disabled simultaneously, so they can run in perfect sync.\n + /// For each channel, there is only one physical EN register bit,\n + /// which can be accessed through here or CHx_CSR. + pub const EN = @intToPtr(*volatile Mmio(32, packed struct { + CH0: u1, + CH1: u1, + CH2: u1, + CH3: u1, + CH4: u1, + CH5: u1, + CH6: u1, + CH7: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0xa0); + + /// address: 0x400500a4 + /// Raw Interrupts + pub const INTR = @intToPtr(*volatile Mmio(32, packed struct { + CH0: u1, + CH1: u1, + CH2: u1, + CH3: u1, + CH4: u1, + CH5: u1, + CH6: u1, + CH7: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0xa4); + + /// address: 0x400500a8 + /// Interrupt Enable + pub const INTE = @intToPtr(*volatile Mmio(32, packed struct { + CH0: u1, + CH1: u1, + CH2: u1, + CH3: u1, + CH4: u1, + CH5: u1, + CH6: u1, + CH7: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0xa8); + + /// address: 0x400500ac + /// Interrupt Force + pub const INTF = @intToPtr(*volatile Mmio(32, packed struct { + CH0: u1, + CH1: u1, + CH2: u1, + CH3: u1, + CH4: u1, + CH5: u1, + CH6: u1, + CH7: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0xac); + + /// address: 0x400500b0 + /// Interrupt status after masking & forcing + pub const INTS = @intToPtr(*volatile Mmio(32, packed struct { + CH0: u1, + CH1: u1, + CH2: u1, + CH3: u1, + CH4: u1, + CH5: u1, + CH6: u1, + CH7: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0xb0); + }; + + /// Controls time and alarms\n + /// time is a 64 bit value indicating the time in usec since power-on\n + /// timeh is the top 32 bits of time & timel is the bottom 32 bits\n + /// to change time write to timelw before timehw\n + /// to read time read from timelr before timehr\n + /// An alarm is set by setting alarm_enable and writing to the corresponding alarm + /// register\n + /// When an alarm is pending, the corresponding alarm_running signal will be high\n + /// An alarm can be cancelled before it has finished by clearing the alarm_enable\n + /// When an alarm fires, the corresponding alarm_irq is set and alarm_running is + /// cleared\n + /// To clear the interrupt write a 1 to the corresponding alarm_irq + pub const TIMER = struct { + pub const base_address = 0x40054000; + pub const version = "1"; + + /// address: 0x40054000 + /// Write to bits 63:32 of time\n + /// always write timelw before timehw + pub const TIMEHW = @intToPtr(*volatile u32, base_address + 0x0); + + /// address: 0x40054004 + /// Write to bits 31:0 of time\n + /// writes do not get copied to time until timehw is written + pub const TIMELW = @intToPtr(*volatile u32, base_address + 0x4); + + /// address: 0x40054008 + /// Read from bits 63:32 of time\n + /// always read timelr before timehr + pub const TIMEHR = @intToPtr(*volatile u32, base_address + 0x8); + + /// address: 0x4005400c + /// Read from bits 31:0 of time + pub const TIMELR = @intToPtr(*volatile u32, base_address + 0xc); + + /// address: 0x40054010 + /// Arm alarm 0, and configure the time it will fire.\n + /// Once armed, the alarm fires when TIMER_ALARM0 == TIMELR.\n + /// The alarm will disarm itself once it fires, and can\n + /// be disarmed early using the ARMED status register. + pub const ALARM0 = @intToPtr(*volatile u32, base_address + 0x10); + + /// address: 0x40054014 + /// Arm alarm 1, and configure the time it will fire.\n + /// Once armed, the alarm fires when TIMER_ALARM1 == TIMELR.\n + /// The alarm will disarm itself once it fires, and can\n + /// be disarmed early using the ARMED status register. + pub const ALARM1 = @intToPtr(*volatile u32, base_address + 0x14); + + /// address: 0x40054018 + /// Arm alarm 2, and configure the time it will fire.\n + /// Once armed, the alarm fires when TIMER_ALARM2 == TIMELR.\n + /// The alarm will disarm itself once it fires, and can\n + /// be disarmed early using the ARMED status register. + pub const ALARM2 = @intToPtr(*volatile u32, base_address + 0x18); + + /// address: 0x4005401c + /// Arm alarm 3, and configure the time it will fire.\n + /// Once armed, the alarm fires when TIMER_ALARM3 == TIMELR.\n + /// The alarm will disarm itself once it fires, and can\n + /// be disarmed early using the ARMED status register. + pub const ALARM3 = @intToPtr(*volatile u32, base_address + 0x1c); + + /// address: 0x40054020 + /// Indicates the armed/disarmed status of each alarm.\n + /// A write to the corresponding ALARMx register arms the alarm.\n + /// Alarms automatically disarm upon firing, but writing ones here\n + /// will disarm immediately without waiting to fire. + pub const ARMED = @intToPtr(*volatile MmioInt(32, u4), base_address + 0x20); + + /// address: 0x40054024 + /// Raw read from bits 63:32 of time (no side effects) + pub const TIMERAWH = @intToPtr(*volatile u32, base_address + 0x24); + + /// address: 0x40054028 + /// Raw read from bits 31:0 of time (no side effects) + pub const TIMERAWL = @intToPtr(*volatile u32, base_address + 0x28); + + /// address: 0x4005402c + /// Set bits high to enable pause when the corresponding debug ports are active + pub const DBGPAUSE = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + /// Pause when processor 0 is in debug mode + DBG0: u1, + /// Pause when processor 1 is in debug mode + DBG1: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + }), base_address + 0x2c); + + /// address: 0x40054030 + /// Set high to pause the timer + pub const PAUSE = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x30); + + /// address: 0x40054034 + /// Raw Interrupts + pub const INTR = @intToPtr(*volatile Mmio(32, packed struct { + ALARM_0: u1, + ALARM_1: u1, + ALARM_2: u1, + ALARM_3: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + }), base_address + 0x34); + + /// address: 0x40054038 + /// Interrupt Enable + pub const INTE = @intToPtr(*volatile Mmio(32, packed struct { + ALARM_0: u1, + ALARM_1: u1, + ALARM_2: u1, + ALARM_3: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + }), base_address + 0x38); + + /// address: 0x4005403c + /// Interrupt Force + pub const INTF = @intToPtr(*volatile Mmio(32, packed struct { + ALARM_0: u1, + ALARM_1: u1, + ALARM_2: u1, + ALARM_3: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + }), base_address + 0x3c); + + /// address: 0x40054040 + /// Interrupt status after masking & forcing + pub const INTS = @intToPtr(*volatile Mmio(32, packed struct { + ALARM_0: u1, + ALARM_1: u1, + ALARM_2: u1, + ALARM_3: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + }), base_address + 0x40); + }; + pub const WATCHDOG = struct { + pub const base_address = 0x40058000; + pub const version = "1"; + + /// address: 0x40058000 + /// Watchdog control\n + /// The rst_wdsel register determines which subsystems are reset when the watchdog + /// is triggered.\n + /// The watchdog can be triggered in software. + pub const CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// Indicates the number of ticks / 2 (see errata RP2040-E1) before a watchdog reset + /// will be triggered + TIME: u24, + /// Pause the watchdog timer when JTAG is accessing the bus fabric + PAUSE_JTAG: u1, + /// Pause the watchdog timer when processor 0 is in debug mode + PAUSE_DBG0: u1, + /// Pause the watchdog timer when processor 1 is in debug mode + PAUSE_DBG1: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + /// When not enabled the watchdog timer is paused + ENABLE: u1, + /// Trigger a watchdog reset + TRIGGER: u1, + }), base_address + 0x0); + + /// address: 0x40058004 + /// Load the watchdog timer. The maximum setting is 0xffffff which corresponds to + /// 0xffffff / 2 ticks before triggering a watchdog reset (see errata RP2040-E1). + pub const LOAD = @intToPtr(*volatile MmioInt(32, u24), base_address + 0x4); + + /// address: 0x40058008 + /// Logs the reason for the last reset. Both bits are zero for the case of a + /// hardware reset. + pub const REASON = @intToPtr(*volatile Mmio(32, packed struct { + TIMER: u1, + FORCE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + }), base_address + 0x8); + + /// address: 0x4005800c + /// Scratch register. Information persists through soft reset of the chip. + pub const SCRATCH0 = @intToPtr(*volatile u32, base_address + 0xc); + + /// address: 0x40058010 + /// Scratch register. Information persists through soft reset of the chip. + pub const SCRATCH1 = @intToPtr(*volatile u32, base_address + 0x10); + + /// address: 0x40058014 + /// Scratch register. Information persists through soft reset of the chip. + pub const SCRATCH2 = @intToPtr(*volatile u32, base_address + 0x14); + + /// address: 0x40058018 + /// Scratch register. Information persists through soft reset of the chip. + pub const SCRATCH3 = @intToPtr(*volatile u32, base_address + 0x18); + + /// address: 0x4005801c + /// Scratch register. Information persists through soft reset of the chip. + pub const SCRATCH4 = @intToPtr(*volatile u32, base_address + 0x1c); + + /// address: 0x40058020 + /// Scratch register. Information persists through soft reset of the chip. + pub const SCRATCH5 = @intToPtr(*volatile u32, base_address + 0x20); + + /// address: 0x40058024 + /// Scratch register. Information persists through soft reset of the chip. + pub const SCRATCH6 = @intToPtr(*volatile u32, base_address + 0x24); + + /// address: 0x40058028 + /// Scratch register. Information persists through soft reset of the chip. + pub const SCRATCH7 = @intToPtr(*volatile u32, base_address + 0x28); + + /// address: 0x4005802c + /// Controls the tick generator + pub const TICK = @intToPtr(*volatile Mmio(32, packed struct { + /// Total number of clk_tick cycles before the next tick. + CYCLES: u9, + /// start / stop tick generation + ENABLE: u1, + /// Is the tick generator running? + RUNNING: u1, + /// Count down timer: the remaining number clk_tick cycles before the next tick is + /// generated. + COUNT: u9, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + }), base_address + 0x2c); + }; + + /// Register block to control RTC + pub const RTC = struct { + pub const base_address = 0x4005c000; + pub const version = "1"; + + /// address: 0x4005c000 + /// Divider minus 1 for the 1 second counter. Safe to change the value when RTC is + /// not enabled. + pub const CLKDIV_M1 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x0); + + /// address: 0x4005c004 + /// RTC setup register 0 + pub const SETUP_0 = @intToPtr(*volatile Mmio(32, packed struct { + /// Day of the month (1..31) + DAY: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + /// Month (1..12) + MONTH: u4, + /// Year + YEAR: u12, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x4); + + /// address: 0x4005c008 + /// RTC setup register 1 + pub const SETUP_1 = @intToPtr(*volatile Mmio(32, packed struct { + /// Seconds + SEC: u6, + reserved0: u1 = 0, + reserved1: u1 = 0, + /// Minutes + MIN: u6, + reserved2: u1 = 0, + reserved3: u1 = 0, + /// Hours + HOUR: u5, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + /// Day of the week: 1-Monday...0-Sunday ISO 8601 mod 7 + DOTW: u3, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x8); + + /// address: 0x4005c00c + /// RTC Control and status + pub const CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// Enable RTC + RTC_ENABLE: u1, + /// RTC enabled (running) + RTC_ACTIVE: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + /// Load RTC + LOAD: u1, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + /// If set, leapyear is forced off.\n + /// Useful for years divisible by 100 but not by 400 + FORCE_NOTLEAPYEAR: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + }), base_address + 0xc); + + /// address: 0x4005c010 + /// Interrupt setup register 0 + pub const IRQ_SETUP_0 = @intToPtr(*volatile Mmio(32, packed struct { + /// Day of the month (1..31) + DAY: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + /// Month (1..12) + MONTH: u4, + /// Year + YEAR: u12, + /// Enable day matching + DAY_ENA: u1, + /// Enable month matching + MONTH_ENA: u1, + /// Enable year matching + YEAR_ENA: u1, + reserved3: u1 = 0, + /// Global match enable. Don't change any other value while this one is enabled + MATCH_ENA: u1, + MATCH_ACTIVE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + }), base_address + 0x10); + + /// address: 0x4005c014 + /// Interrupt setup register 1 + pub const IRQ_SETUP_1 = @intToPtr(*volatile Mmio(32, packed struct { + /// Seconds + SEC: u6, + reserved0: u1 = 0, + reserved1: u1 = 0, + /// Minutes + MIN: u6, + reserved2: u1 = 0, + reserved3: u1 = 0, + /// Hours + HOUR: u5, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + /// Day of the week + DOTW: u3, + reserved7: u1 = 0, + /// Enable second matching + SEC_ENA: u1, + /// Enable minute matching + MIN_ENA: u1, + /// Enable hour matching + HOUR_ENA: u1, + /// Enable day of the week matching + DOTW_ENA: u1, + }), base_address + 0x14); + + /// address: 0x4005c018 + /// RTC register 1. + pub const RTC_1 = @intToPtr(*volatile Mmio(32, packed struct { + /// Day of the month (1..31) + DAY: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + /// Month (1..12) + MONTH: u4, + /// Year + YEAR: u12, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x18); + + /// address: 0x4005c01c + /// RTC register 0\n + /// Read this before RTC 1! + pub const RTC_0 = @intToPtr(*volatile Mmio(32, packed struct { + /// Seconds + SEC: u6, + reserved0: u1 = 0, + reserved1: u1 = 0, + /// Minutes + MIN: u6, + reserved2: u1 = 0, + reserved3: u1 = 0, + /// Hours + HOUR: u5, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + /// Day of the week + DOTW: u3, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x1c); + + /// address: 0x4005c020 + /// Raw Interrupts + pub const INTR = @intToPtr(*volatile Mmio(32, packed struct { + RTC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x20); + + /// address: 0x4005c024 + /// Interrupt Enable + pub const INTE = @intToPtr(*volatile Mmio(32, packed struct { + RTC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x24); + + /// address: 0x4005c028 + /// Interrupt Force + pub const INTF = @intToPtr(*volatile Mmio(32, packed struct { + RTC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x28); + + /// address: 0x4005c02c + /// Interrupt status after masking & forcing + pub const INTS = @intToPtr(*volatile Mmio(32, packed struct { + RTC: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + padding30: u1 = 0, + }), base_address + 0x2c); + }; + pub const ROSC = struct { + pub const base_address = 0x40060000; + pub const version = "1"; + + /// address: 0x40060000 + /// Ring Oscillator control + pub const CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// Controls the number of delay stages in the ROSC ring\n + /// LOW uses stages 0 to 7\n + /// MEDIUM uses stages 0 to 5\n + /// HIGH uses stages 0 to 3\n + /// TOOHIGH uses stages 0 to 1 and should not be used because its frequency exceeds + /// design specifications\n + /// The clock output will not glitch when changing the range up one step at a time\n + /// The clock output will glitch when changing the range down\n + /// Note: the values here are gray coded which is why HIGH comes before TOOHIGH + FREQ_RANGE: u12, + /// On power-up this field is initialised to ENABLE\n + /// The system clock must be switched to another source before setting this field to + /// DISABLE otherwise the chip will lock up\n + /// The 12-bit code is intended to give some protection against accidental writes. + /// An invalid setting will enable the oscillator. + ENABLE: u12, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x0); + + /// address: 0x40060004 + /// The FREQA & FREQB registers control the frequency by controlling the drive + /// strength of each stage\n + /// The drive strength has 4 levels determined by the number of bits set\n + /// Increasing the number of bits set increases the drive strength and increases the + /// oscillation frequency\n + /// 0 bits set is the default drive strength\n + /// 1 bit set doubles the drive strength\n + /// 2 bits set triples drive strength\n + /// 3 bits set quadruples drive strength + pub const FREQA = @intToPtr(*volatile Mmio(32, packed struct { + /// Stage 0 drive strength + DS0: u3, + reserved0: u1 = 0, + /// Stage 1 drive strength + DS1: u3, + reserved1: u1 = 0, + /// Stage 2 drive strength + DS2: u3, + reserved2: u1 = 0, + /// Stage 3 drive strength + DS3: u3, + reserved3: u1 = 0, + /// Set to 0x9696 to apply the settings\n + /// Any other value in this field will set all drive strengths to 0 + PASSWD: u16, + }), base_address + 0x4); + + /// address: 0x40060008 + /// For a detailed description see freqa register + pub const FREQB = @intToPtr(*volatile Mmio(32, packed struct { + /// Stage 4 drive strength + DS4: u3, + reserved0: u1 = 0, + /// Stage 5 drive strength + DS5: u3, + reserved1: u1 = 0, + /// Stage 6 drive strength + DS6: u3, + reserved2: u1 = 0, + /// Stage 7 drive strength + DS7: u3, + reserved3: u1 = 0, + /// Set to 0x9696 to apply the settings\n + /// Any other value in this field will set all drive strengths to 0 + PASSWD: u16, + }), base_address + 0x8); + + /// address: 0x4006000c + /// Ring Oscillator pause control\n + /// This is used to save power by pausing the ROSC\n + /// On power-up this field is initialised to WAKE\n + /// An invalid write will also select WAKE\n + /// Warning: setup the irq before selecting dormant mode + pub const DORMANT = @intToPtr(*volatile u32, base_address + 0xc); + + /// address: 0x40060010 + /// Controls the output divider + pub const DIV = @intToPtr(*volatile MmioInt(32, u12), base_address + 0x10); + + /// address: 0x40060014 + /// Controls the phase shifted output + pub const PHASE = @intToPtr(*volatile Mmio(32, packed struct { + /// phase shift the phase-shifted output by SHIFT input clocks\n + /// this can be changed on-the-fly\n + /// must be set to 0 before setting div=1 + SHIFT: u2, + /// invert the phase-shifted output\n + /// this is ignored when div=1 + FLIP: u1, + /// enable the phase-shifted output\n + /// this can be changed on-the-fly + ENABLE: u1, + /// set to 0xaa\n + /// any other value enables the output with shift=0 + PASSWD: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x14); + + /// address: 0x40060018 + /// Ring Oscillator Status + pub const STATUS = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + /// Oscillator is enabled but not necessarily running and stable\n + /// this resets to 0 but transitions to 1 during chip startup + ENABLED: u1, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + /// post-divider is running\n + /// this resets to 0 but transitions to 1 during chip startup + DIV_RUNNING: u1, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + reserved18: u1 = 0, + reserved19: u1 = 0, + reserved20: u1 = 0, + reserved21: u1 = 0, + /// An invalid value has been written to CTRL_ENABLE or CTRL_FREQ_RANGE or FREQA or + /// FREQB or DIV or PHASE or DORMANT + BADWRITE: u1, + reserved22: u1 = 0, + reserved23: u1 = 0, + reserved24: u1 = 0, + reserved25: u1 = 0, + reserved26: u1 = 0, + reserved27: u1 = 0, + /// Oscillator is running and stable + STABLE: u1, + }), base_address + 0x18); + + /// address: 0x4006001c + /// This just reads the state of the oscillator output so randomness is compromised + /// if the ring oscillator is stopped or run at a harmonic of the bus frequency + pub const RANDOMBIT = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x1c); + + /// address: 0x40060020 + /// A down counter running at the ROSC frequency which counts to zero and stops.\n + /// To start the counter write a non-zero value.\n + /// Can be used for short software pauses when setting up time sensitive hardware. + pub const COUNT = @intToPtr(*volatile MmioInt(32, u8), base_address + 0x20); + }; + + /// control and status for on-chip voltage regulator and chip level reset subsystem + pub const VREG_AND_CHIP_RESET = struct { + pub const base_address = 0x40064000; + pub const version = "1"; + + /// address: 0x40064000 + /// Voltage regulator control and status + pub const VREG = @intToPtr(*volatile Mmio(32, packed struct { + /// enable\n + /// 0=not enabled, 1=enabled + EN: u1, + /// high impedance mode select\n + /// 0=not in high impedance mode, 1=in high impedance mode + HIZ: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + /// output voltage select\n + /// 0000 to 0101 - 0.80V\n + /// 0110 - 0.85V\n + /// 0111 - 0.90V\n + /// 1000 - 0.95V\n + /// 1001 - 1.00V\n + /// 1010 - 1.05V\n + /// 1011 - 1.10V (default)\n + /// 1100 - 1.15V\n + /// 1101 - 1.20V\n + /// 1110 - 1.25V\n + /// 1111 - 1.30V + VSEL: u4, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + /// regulation status\n + /// 0=not in regulation, 1=in regulation + ROK: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + }), base_address + 0x0); + + /// address: 0x40064004 + /// brown-out detection control + pub const BOD = @intToPtr(*volatile Mmio(32, packed struct { + /// enable\n + /// 0=not enabled, 1=enabled + EN: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + /// threshold select\n + /// 0000 - 0.473V\n + /// 0001 - 0.516V\n + /// 0010 - 0.559V\n + /// 0011 - 0.602V\n + /// 0100 - 0.645V\n + /// 0101 - 0.688V\n + /// 0110 - 0.731V\n + /// 0111 - 0.774V\n + /// 1000 - 0.817V\n + /// 1001 - 0.860V (default)\n + /// 1010 - 0.903V\n + /// 1011 - 0.946V\n + /// 1100 - 0.989V\n + /// 1101 - 1.032V\n + /// 1110 - 1.075V\n + /// 1111 - 1.118V + VSEL: u4, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + }), base_address + 0x4); + + /// address: 0x40064008 + /// Chip reset control and status + pub const CHIP_RESET = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// Last reset was from the power-on reset or brown-out detection blocks + HAD_POR: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + /// Last reset was from the RUN pin + HAD_RUN: u1, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// Last reset was from the debug port + HAD_PSM_RESTART: u1, + reserved18: u1 = 0, + reserved19: u1 = 0, + reserved20: u1 = 0, + /// This is set by psm_restart from the debugger.\n + /// Its purpose is to branch bootcode to a safe mode when the debugger has issued a + /// psm_restart in order to recover from a boot lock-up.\n + /// In the safe mode the debugger can repair the boot code, clear this flag then + /// reboot the processor. + PSM_RESTART_FLAG: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + }), base_address + 0x8); + }; + + /// Testbench manager. Allows the programmer to know what platform their software is + /// running on. + pub const TBMAN = struct { + pub const base_address = 0x4006c000; + pub const version = "1"; + + /// address: 0x4006c000 + /// Indicates the type of platform in use + pub const PLATFORM = @intToPtr(*volatile Mmio(32, packed struct { + /// Indicates the platform is an ASIC + ASIC: u1, + /// Indicates the platform is an FPGA + FPGA: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + }), base_address + 0x0); + }; + + /// DMA with separate read and write masters + pub const DMA = struct { + pub const base_address = 0x50000000; + pub const version = "1"; + + /// address: 0x50000000 + /// DMA Channel 0 Read Address pointer\n + /// This register updates automatically each time a read completes. The current + /// value is the next address to be read by this channel. + pub const CH0_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x0); + + /// address: 0x50000004 + /// DMA Channel 0 Write Address pointer\n + /// This register updates automatically each time a write completes. The current + /// value is the next address to be written by this channel. + pub const CH0_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x4); + + /// address: 0x50000008 + /// DMA Channel 0 Transfer Count\n + /// Program the number of bus transfers a channel will perform before halting. Note + /// that, if transfers are larger than one byte in size, this is not equal to the + /// number of bytes transferred (see CTRL_DATA_SIZE).\n\n + /// When the channel is active, reading this register shows the number of transfers + /// remaining, updating automatically each time a write transfer completes.\n\n + /// Writing this register sets the RELOAD value for the transfer counter. Each time + /// this channel is triggered, the RELOAD value is copied into the live transfer + /// counter. The channel can be started multiple times, and will perform the same + /// number of transfers each time, as programmed by most recent write.\n\n + /// The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a + /// trigger, the written value is used immediately as the length of the new transfer + /// sequence, as well as being written to RELOAD. + pub const CH0_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x8); + + /// address: 0x5000000c + /// DMA Channel 0 Control and Status + pub const CH0_CTRL_TRIG = @intToPtr(*volatile Mmio(32, packed struct { + /// DMA Channel Enable.\n + /// When 1, the channel will respond to triggering events, which will cause it to + /// become BUSY and start transferring data. When 0, the channel will ignore + /// triggers, stop issuing transfers, and pause the current transfer sequence (i.e. + /// BUSY will remain high if already high) + EN: u1, + /// HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in + /// each scheduling round, all high priority channels are considered first, and then + /// only a single low priority channel, before returning to the high priority + /// channels.\n\n + /// This only affects the order in which the DMA schedules channels. The DMA's bus + /// priority is not changed. If the DMA is not saturated then a low priority channel + /// will see no loss of throughput. + HIGH_PRIORITY: u1, + /// Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR + /// advance by this amount (1/2/4 bytes) with each transfer. + DATA_SIZE: u2, + /// If 1, the read address increments with each transfer. If 0, each read is + /// directed to the same, initial address.\n\n + /// Generally this should be disabled for peripheral-to-memory transfers. + INCR_READ: u1, + /// If 1, the write address increments with each transfer. If 0, each write is + /// directed to the same, initial address.\n\n + /// Generally this should be disabled for memory-to-peripheral transfers. + INCR_WRITE: u1, + /// Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower + /// n bits of the address will change. This wraps the address on a (1 << n) byte + /// boundary, facilitating access to naturally-aligned ring buffers.\n\n + /// Ring sizes between 2 and 32768 bytes are possible. This can apply to either read + /// or write addresses, based on value of RING_SEL. + RING_SIZE: u4, + /// Select whether RING_SIZE applies to read or write addresses.\n + /// If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write + /// addresses are wrapped. + RING_SEL: u1, + /// When this channel completes, it will trigger the channel indicated by CHAIN_TO. + /// Disable by setting CHAIN_TO = _(this channel)_.\n + /// Reset value is equal to channel number (0). + CHAIN_TO: u4, + /// Select a Transfer Request signal.\n + /// The channel uses the transfer request signal to pace its data transfer rate. + /// Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request + /// from the system).\n + /// 0x0 to 0x3a -> select DREQ n as TREQ + TREQ_SEL: u6, + /// In QUIET mode, the channel does not generate IRQs at the end of every transfer + /// block. Instead, an IRQ is raised when NULL is written to a trigger register, + /// indicating the end of a control block chain.\n\n + /// This reduces the number of interrupts to be serviced by the CPU when + /// transferring a DMA chain of many small control blocks. + IRQ_QUIET: u1, + /// Apply byte-swap transformation to DMA data.\n + /// For byte data, this has no effect. For halfword data, the two bytes of each + /// halfword are swapped. For word data, the four bytes of each word are swapped to + /// reverse order. + BSWAP: u1, + /// If 1, this channel's data transfers are visible to the sniff hardware, and each + /// transfer will advance the state of the checksum. This only applies if the sniff + /// hardware is enabled, and has this channel selected.\n\n + /// This allows checksum to be enabled or disabled on a per-control- block basis. + SNIFF_EN: u1, + /// This flag goes high when the channel starts a new transfer sequence, and low + /// when the last transfer of that sequence completes. Clearing EN while BUSY is + /// high pauses the channel, and BUSY will stay high while paused.\n\n + /// To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT. + BUSY: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + /// If 1, the channel received a write bus error. Write one to clear.\n + /// WRITE_ADDR shows the approximate address where the bus error was encountered + /// (will not to be earlier, or more than 5 transfers later) + WRITE_ERROR: u1, + /// If 1, the channel received a read bus error. Write one to clear.\n + /// READ_ADDR shows the approximate address where the bus error was encountered + /// (will not to be earlier, or more than 3 transfers later) + READ_ERROR: u1, + /// Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it + /// encounters any bus error, and always raises its channel IRQ flag. + AHB_ERROR: u1, + }), base_address + 0xc); + + /// address: 0x50000010 + /// Alias for channel 0 CTRL register + pub const CH0_AL1_CTRL = @intToPtr(*volatile u32, base_address + 0x10); + + /// address: 0x50000014 + /// Alias for channel 0 READ_ADDR register + pub const CH0_AL1_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x14); + + /// address: 0x50000018 + /// Alias for channel 0 WRITE_ADDR register + pub const CH0_AL1_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x18); + + /// address: 0x5000001c + /// Alias for channel 0 TRANS_COUNT register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH0_AL1_TRANS_COUNT_TRIG = @intToPtr(*volatile u32, base_address + 0x1c); + + /// address: 0x50000020 + /// Alias for channel 0 CTRL register + pub const CH0_AL2_CTRL = @intToPtr(*volatile u32, base_address + 0x20); + + /// address: 0x50000024 + /// Alias for channel 0 TRANS_COUNT register + pub const CH0_AL2_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x24); + + /// address: 0x50000028 + /// Alias for channel 0 READ_ADDR register + pub const CH0_AL2_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x28); + + /// address: 0x5000002c + /// Alias for channel 0 WRITE_ADDR register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH0_AL2_WRITE_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x2c); + + /// address: 0x50000030 + /// Alias for channel 0 CTRL register + pub const CH0_AL3_CTRL = @intToPtr(*volatile u32, base_address + 0x30); + + /// address: 0x50000034 + /// Alias for channel 0 WRITE_ADDR register + pub const CH0_AL3_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x34); + + /// address: 0x50000038 + /// Alias for channel 0 TRANS_COUNT register + pub const CH0_AL3_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x38); + + /// address: 0x5000003c + /// Alias for channel 0 READ_ADDR register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH0_AL3_READ_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x3c); + + /// address: 0x50000040 + /// DMA Channel 1 Read Address pointer\n + /// This register updates automatically each time a read completes. The current + /// value is the next address to be read by this channel. + pub const CH1_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x40); + + /// address: 0x50000044 + /// DMA Channel 1 Write Address pointer\n + /// This register updates automatically each time a write completes. The current + /// value is the next address to be written by this channel. + pub const CH1_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x44); + + /// address: 0x50000048 + /// DMA Channel 1 Transfer Count\n + /// Program the number of bus transfers a channel will perform before halting. Note + /// that, if transfers are larger than one byte in size, this is not equal to the + /// number of bytes transferred (see CTRL_DATA_SIZE).\n\n + /// When the channel is active, reading this register shows the number of transfers + /// remaining, updating automatically each time a write transfer completes.\n\n + /// Writing this register sets the RELOAD value for the transfer counter. Each time + /// this channel is triggered, the RELOAD value is copied into the live transfer + /// counter. The channel can be started multiple times, and will perform the same + /// number of transfers each time, as programmed by most recent write.\n\n + /// The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a + /// trigger, the written value is used immediately as the length of the new transfer + /// sequence, as well as being written to RELOAD. + pub const CH1_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x48); + + /// address: 0x5000004c + /// DMA Channel 1 Control and Status + pub const CH1_CTRL_TRIG = @intToPtr(*volatile Mmio(32, packed struct { + /// DMA Channel Enable.\n + /// When 1, the channel will respond to triggering events, which will cause it to + /// become BUSY and start transferring data. When 0, the channel will ignore + /// triggers, stop issuing transfers, and pause the current transfer sequence (i.e. + /// BUSY will remain high if already high) + EN: u1, + /// HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in + /// each scheduling round, all high priority channels are considered first, and then + /// only a single low priority channel, before returning to the high priority + /// channels.\n\n + /// This only affects the order in which the DMA schedules channels. The DMA's bus + /// priority is not changed. If the DMA is not saturated then a low priority channel + /// will see no loss of throughput. + HIGH_PRIORITY: u1, + /// Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR + /// advance by this amount (1/2/4 bytes) with each transfer. + DATA_SIZE: u2, + /// If 1, the read address increments with each transfer. If 0, each read is + /// directed to the same, initial address.\n\n + /// Generally this should be disabled for peripheral-to-memory transfers. + INCR_READ: u1, + /// If 1, the write address increments with each transfer. If 0, each write is + /// directed to the same, initial address.\n\n + /// Generally this should be disabled for memory-to-peripheral transfers. + INCR_WRITE: u1, + /// Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower + /// n bits of the address will change. This wraps the address on a (1 << n) byte + /// boundary, facilitating access to naturally-aligned ring buffers.\n\n + /// Ring sizes between 2 and 32768 bytes are possible. This can apply to either read + /// or write addresses, based on value of RING_SEL. + RING_SIZE: u4, + /// Select whether RING_SIZE applies to read or write addresses.\n + /// If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write + /// addresses are wrapped. + RING_SEL: u1, + /// When this channel completes, it will trigger the channel indicated by CHAIN_TO. + /// Disable by setting CHAIN_TO = _(this channel)_.\n + /// Reset value is equal to channel number (1). + CHAIN_TO: u4, + /// Select a Transfer Request signal.\n + /// The channel uses the transfer request signal to pace its data transfer rate. + /// Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request + /// from the system).\n + /// 0x0 to 0x3a -> select DREQ n as TREQ + TREQ_SEL: u6, + /// In QUIET mode, the channel does not generate IRQs at the end of every transfer + /// block. Instead, an IRQ is raised when NULL is written to a trigger register, + /// indicating the end of a control block chain.\n\n + /// This reduces the number of interrupts to be serviced by the CPU when + /// transferring a DMA chain of many small control blocks. + IRQ_QUIET: u1, + /// Apply byte-swap transformation to DMA data.\n + /// For byte data, this has no effect. For halfword data, the two bytes of each + /// halfword are swapped. For word data, the four bytes of each word are swapped to + /// reverse order. + BSWAP: u1, + /// If 1, this channel's data transfers are visible to the sniff hardware, and each + /// transfer will advance the state of the checksum. This only applies if the sniff + /// hardware is enabled, and has this channel selected.\n\n + /// This allows checksum to be enabled or disabled on a per-control- block basis. + SNIFF_EN: u1, + /// This flag goes high when the channel starts a new transfer sequence, and low + /// when the last transfer of that sequence completes. Clearing EN while BUSY is + /// high pauses the channel, and BUSY will stay high while paused.\n\n + /// To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT. + BUSY: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + /// If 1, the channel received a write bus error. Write one to clear.\n + /// WRITE_ADDR shows the approximate address where the bus error was encountered + /// (will not to be earlier, or more than 5 transfers later) + WRITE_ERROR: u1, + /// If 1, the channel received a read bus error. Write one to clear.\n + /// READ_ADDR shows the approximate address where the bus error was encountered + /// (will not to be earlier, or more than 3 transfers later) + READ_ERROR: u1, + /// Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it + /// encounters any bus error, and always raises its channel IRQ flag. + AHB_ERROR: u1, + }), base_address + 0x4c); + + /// address: 0x50000050 + /// Alias for channel 1 CTRL register + pub const CH1_AL1_CTRL = @intToPtr(*volatile u32, base_address + 0x50); + + /// address: 0x50000054 + /// Alias for channel 1 READ_ADDR register + pub const CH1_AL1_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x54); + + /// address: 0x50000058 + /// Alias for channel 1 WRITE_ADDR register + pub const CH1_AL1_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x58); + + /// address: 0x5000005c + /// Alias for channel 1 TRANS_COUNT register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH1_AL1_TRANS_COUNT_TRIG = @intToPtr(*volatile u32, base_address + 0x5c); + + /// address: 0x50000060 + /// Alias for channel 1 CTRL register + pub const CH1_AL2_CTRL = @intToPtr(*volatile u32, base_address + 0x60); + + /// address: 0x50000064 + /// Alias for channel 1 TRANS_COUNT register + pub const CH1_AL2_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x64); + + /// address: 0x50000068 + /// Alias for channel 1 READ_ADDR register + pub const CH1_AL2_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x68); + + /// address: 0x5000006c + /// Alias for channel 1 WRITE_ADDR register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH1_AL2_WRITE_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x6c); + + /// address: 0x50000070 + /// Alias for channel 1 CTRL register + pub const CH1_AL3_CTRL = @intToPtr(*volatile u32, base_address + 0x70); + + /// address: 0x50000074 + /// Alias for channel 1 WRITE_ADDR register + pub const CH1_AL3_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x74); + + /// address: 0x50000078 + /// Alias for channel 1 TRANS_COUNT register + pub const CH1_AL3_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x78); + + /// address: 0x5000007c + /// Alias for channel 1 READ_ADDR register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH1_AL3_READ_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x7c); + + /// address: 0x50000080 + /// DMA Channel 2 Read Address pointer\n + /// This register updates automatically each time a read completes. The current + /// value is the next address to be read by this channel. + pub const CH2_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x80); + + /// address: 0x50000084 + /// DMA Channel 2 Write Address pointer\n + /// This register updates automatically each time a write completes. The current + /// value is the next address to be written by this channel. + pub const CH2_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x84); + + /// address: 0x50000088 + /// DMA Channel 2 Transfer Count\n + /// Program the number of bus transfers a channel will perform before halting. Note + /// that, if transfers are larger than one byte in size, this is not equal to the + /// number of bytes transferred (see CTRL_DATA_SIZE).\n\n + /// When the channel is active, reading this register shows the number of transfers + /// remaining, updating automatically each time a write transfer completes.\n\n + /// Writing this register sets the RELOAD value for the transfer counter. Each time + /// this channel is triggered, the RELOAD value is copied into the live transfer + /// counter. The channel can be started multiple times, and will perform the same + /// number of transfers each time, as programmed by most recent write.\n\n + /// The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a + /// trigger, the written value is used immediately as the length of the new transfer + /// sequence, as well as being written to RELOAD. + pub const CH2_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x88); + + /// address: 0x5000008c + /// DMA Channel 2 Control and Status + pub const CH2_CTRL_TRIG = @intToPtr(*volatile Mmio(32, packed struct { + /// DMA Channel Enable.\n + /// When 1, the channel will respond to triggering events, which will cause it to + /// become BUSY and start transferring data. When 0, the channel will ignore + /// triggers, stop issuing transfers, and pause the current transfer sequence (i.e. + /// BUSY will remain high if already high) + EN: u1, + /// HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in + /// each scheduling round, all high priority channels are considered first, and then + /// only a single low priority channel, before returning to the high priority + /// channels.\n\n + /// This only affects the order in which the DMA schedules channels. The DMA's bus + /// priority is not changed. If the DMA is not saturated then a low priority channel + /// will see no loss of throughput. + HIGH_PRIORITY: u1, + /// Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR + /// advance by this amount (1/2/4 bytes) with each transfer. + DATA_SIZE: u2, + /// If 1, the read address increments with each transfer. If 0, each read is + /// directed to the same, initial address.\n\n + /// Generally this should be disabled for peripheral-to-memory transfers. + INCR_READ: u1, + /// If 1, the write address increments with each transfer. If 0, each write is + /// directed to the same, initial address.\n\n + /// Generally this should be disabled for memory-to-peripheral transfers. + INCR_WRITE: u1, + /// Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower + /// n bits of the address will change. This wraps the address on a (1 << n) byte + /// boundary, facilitating access to naturally-aligned ring buffers.\n\n + /// Ring sizes between 2 and 32768 bytes are possible. This can apply to either read + /// or write addresses, based on value of RING_SEL. + RING_SIZE: u4, + /// Select whether RING_SIZE applies to read or write addresses.\n + /// If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write + /// addresses are wrapped. + RING_SEL: u1, + /// When this channel completes, it will trigger the channel indicated by CHAIN_TO. + /// Disable by setting CHAIN_TO = _(this channel)_.\n + /// Reset value is equal to channel number (2). + CHAIN_TO: u4, + /// Select a Transfer Request signal.\n + /// The channel uses the transfer request signal to pace its data transfer rate. + /// Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request + /// from the system).\n + /// 0x0 to 0x3a -> select DREQ n as TREQ + TREQ_SEL: u6, + /// In QUIET mode, the channel does not generate IRQs at the end of every transfer + /// block. Instead, an IRQ is raised when NULL is written to a trigger register, + /// indicating the end of a control block chain.\n\n + /// This reduces the number of interrupts to be serviced by the CPU when + /// transferring a DMA chain of many small control blocks. + IRQ_QUIET: u1, + /// Apply byte-swap transformation to DMA data.\n + /// For byte data, this has no effect. For halfword data, the two bytes of each + /// halfword are swapped. For word data, the four bytes of each word are swapped to + /// reverse order. + BSWAP: u1, + /// If 1, this channel's data transfers are visible to the sniff hardware, and each + /// transfer will advance the state of the checksum. This only applies if the sniff + /// hardware is enabled, and has this channel selected.\n\n + /// This allows checksum to be enabled or disabled on a per-control- block basis. + SNIFF_EN: u1, + /// This flag goes high when the channel starts a new transfer sequence, and low + /// when the last transfer of that sequence completes. Clearing EN while BUSY is + /// high pauses the channel, and BUSY will stay high while paused.\n\n + /// To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT. + BUSY: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + /// If 1, the channel received a write bus error. Write one to clear.\n + /// WRITE_ADDR shows the approximate address where the bus error was encountered + /// (will not to be earlier, or more than 5 transfers later) + WRITE_ERROR: u1, + /// If 1, the channel received a read bus error. Write one to clear.\n + /// READ_ADDR shows the approximate address where the bus error was encountered + /// (will not to be earlier, or more than 3 transfers later) + READ_ERROR: u1, + /// Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it + /// encounters any bus error, and always raises its channel IRQ flag. + AHB_ERROR: u1, + }), base_address + 0x8c); + + /// address: 0x50000090 + /// Alias for channel 2 CTRL register + pub const CH2_AL1_CTRL = @intToPtr(*volatile u32, base_address + 0x90); + + /// address: 0x50000094 + /// Alias for channel 2 READ_ADDR register + pub const CH2_AL1_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x94); + + /// address: 0x50000098 + /// Alias for channel 2 WRITE_ADDR register + pub const CH2_AL1_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x98); + + /// address: 0x5000009c + /// Alias for channel 2 TRANS_COUNT register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH2_AL1_TRANS_COUNT_TRIG = @intToPtr(*volatile u32, base_address + 0x9c); + + /// address: 0x500000a0 + /// Alias for channel 2 CTRL register + pub const CH2_AL2_CTRL = @intToPtr(*volatile u32, base_address + 0xa0); + + /// address: 0x500000a4 + /// Alias for channel 2 TRANS_COUNT register + pub const CH2_AL2_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0xa4); + + /// address: 0x500000a8 + /// Alias for channel 2 READ_ADDR register + pub const CH2_AL2_READ_ADDR = @intToPtr(*volatile u32, base_address + 0xa8); + + /// address: 0x500000ac + /// Alias for channel 2 WRITE_ADDR register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH2_AL2_WRITE_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0xac); + + /// address: 0x500000b0 + /// Alias for channel 2 CTRL register + pub const CH2_AL3_CTRL = @intToPtr(*volatile u32, base_address + 0xb0); + + /// address: 0x500000b4 + /// Alias for channel 2 WRITE_ADDR register + pub const CH2_AL3_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0xb4); + + /// address: 0x500000b8 + /// Alias for channel 2 TRANS_COUNT register + pub const CH2_AL3_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0xb8); + + /// address: 0x500000bc + /// Alias for channel 2 READ_ADDR register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH2_AL3_READ_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0xbc); + + /// address: 0x500000c0 + /// DMA Channel 3 Read Address pointer\n + /// This register updates automatically each time a read completes. The current + /// value is the next address to be read by this channel. + pub const CH3_READ_ADDR = @intToPtr(*volatile u32, base_address + 0xc0); + + /// address: 0x500000c4 + /// DMA Channel 3 Write Address pointer\n + /// This register updates automatically each time a write completes. The current + /// value is the next address to be written by this channel. + pub const CH3_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0xc4); + + /// address: 0x500000c8 + /// DMA Channel 3 Transfer Count\n + /// Program the number of bus transfers a channel will perform before halting. Note + /// that, if transfers are larger than one byte in size, this is not equal to the + /// number of bytes transferred (see CTRL_DATA_SIZE).\n\n + /// When the channel is active, reading this register shows the number of transfers + /// remaining, updating automatically each time a write transfer completes.\n\n + /// Writing this register sets the RELOAD value for the transfer counter. Each time + /// this channel is triggered, the RELOAD value is copied into the live transfer + /// counter. The channel can be started multiple times, and will perform the same + /// number of transfers each time, as programmed by most recent write.\n\n + /// The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a + /// trigger, the written value is used immediately as the length of the new transfer + /// sequence, as well as being written to RELOAD. + pub const CH3_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0xc8); + + /// address: 0x500000cc + /// DMA Channel 3 Control and Status + pub const CH3_CTRL_TRIG = @intToPtr(*volatile Mmio(32, packed struct { + /// DMA Channel Enable.\n + /// When 1, the channel will respond to triggering events, which will cause it to + /// become BUSY and start transferring data. When 0, the channel will ignore + /// triggers, stop issuing transfers, and pause the current transfer sequence (i.e. + /// BUSY will remain high if already high) + EN: u1, + /// HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in + /// each scheduling round, all high priority channels are considered first, and then + /// only a single low priority channel, before returning to the high priority + /// channels.\n\n + /// This only affects the order in which the DMA schedules channels. The DMA's bus + /// priority is not changed. If the DMA is not saturated then a low priority channel + /// will see no loss of throughput. + HIGH_PRIORITY: u1, + /// Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR + /// advance by this amount (1/2/4 bytes) with each transfer. + DATA_SIZE: u2, + /// If 1, the read address increments with each transfer. If 0, each read is + /// directed to the same, initial address.\n\n + /// Generally this should be disabled for peripheral-to-memory transfers. + INCR_READ: u1, + /// If 1, the write address increments with each transfer. If 0, each write is + /// directed to the same, initial address.\n\n + /// Generally this should be disabled for memory-to-peripheral transfers. + INCR_WRITE: u1, + /// Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower + /// n bits of the address will change. This wraps the address on a (1 << n) byte + /// boundary, facilitating access to naturally-aligned ring buffers.\n\n + /// Ring sizes between 2 and 32768 bytes are possible. This can apply to either read + /// or write addresses, based on value of RING_SEL. + RING_SIZE: u4, + /// Select whether RING_SIZE applies to read or write addresses.\n + /// If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write + /// addresses are wrapped. + RING_SEL: u1, + /// When this channel completes, it will trigger the channel indicated by CHAIN_TO. + /// Disable by setting CHAIN_TO = _(this channel)_.\n + /// Reset value is equal to channel number (3). + CHAIN_TO: u4, + /// Select a Transfer Request signal.\n + /// The channel uses the transfer request signal to pace its data transfer rate. + /// Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request + /// from the system).\n + /// 0x0 to 0x3a -> select DREQ n as TREQ + TREQ_SEL: u6, + /// In QUIET mode, the channel does not generate IRQs at the end of every transfer + /// block. Instead, an IRQ is raised when NULL is written to a trigger register, + /// indicating the end of a control block chain.\n\n + /// This reduces the number of interrupts to be serviced by the CPU when + /// transferring a DMA chain of many small control blocks. + IRQ_QUIET: u1, + /// Apply byte-swap transformation to DMA data.\n + /// For byte data, this has no effect. For halfword data, the two bytes of each + /// halfword are swapped. For word data, the four bytes of each word are swapped to + /// reverse order. + BSWAP: u1, + /// If 1, this channel's data transfers are visible to the sniff hardware, and each + /// transfer will advance the state of the checksum. This only applies if the sniff + /// hardware is enabled, and has this channel selected.\n\n + /// This allows checksum to be enabled or disabled on a per-control- block basis. + SNIFF_EN: u1, + /// This flag goes high when the channel starts a new transfer sequence, and low + /// when the last transfer of that sequence completes. Clearing EN while BUSY is + /// high pauses the channel, and BUSY will stay high while paused.\n\n + /// To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT. + BUSY: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + /// If 1, the channel received a write bus error. Write one to clear.\n + /// WRITE_ADDR shows the approximate address where the bus error was encountered + /// (will not to be earlier, or more than 5 transfers later) + WRITE_ERROR: u1, + /// If 1, the channel received a read bus error. Write one to clear.\n + /// READ_ADDR shows the approximate address where the bus error was encountered + /// (will not to be earlier, or more than 3 transfers later) + READ_ERROR: u1, + /// Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it + /// encounters any bus error, and always raises its channel IRQ flag. + AHB_ERROR: u1, + }), base_address + 0xcc); + + /// address: 0x500000d0 + /// Alias for channel 3 CTRL register + pub const CH3_AL1_CTRL = @intToPtr(*volatile u32, base_address + 0xd0); + + /// address: 0x500000d4 + /// Alias for channel 3 READ_ADDR register + pub const CH3_AL1_READ_ADDR = @intToPtr(*volatile u32, base_address + 0xd4); + + /// address: 0x500000d8 + /// Alias for channel 3 WRITE_ADDR register + pub const CH3_AL1_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0xd8); + + /// address: 0x500000dc + /// Alias for channel 3 TRANS_COUNT register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH3_AL1_TRANS_COUNT_TRIG = @intToPtr(*volatile u32, base_address + 0xdc); + + /// address: 0x500000e0 + /// Alias for channel 3 CTRL register + pub const CH3_AL2_CTRL = @intToPtr(*volatile u32, base_address + 0xe0); + + /// address: 0x500000e4 + /// Alias for channel 3 TRANS_COUNT register + pub const CH3_AL2_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0xe4); + + /// address: 0x500000e8 + /// Alias for channel 3 READ_ADDR register + pub const CH3_AL2_READ_ADDR = @intToPtr(*volatile u32, base_address + 0xe8); + + /// address: 0x500000ec + /// Alias for channel 3 WRITE_ADDR register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH3_AL2_WRITE_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0xec); + + /// address: 0x500000f0 + /// Alias for channel 3 CTRL register + pub const CH3_AL3_CTRL = @intToPtr(*volatile u32, base_address + 0xf0); + + /// address: 0x500000f4 + /// Alias for channel 3 WRITE_ADDR register + pub const CH3_AL3_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0xf4); + + /// address: 0x500000f8 + /// Alias for channel 3 TRANS_COUNT register + pub const CH3_AL3_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0xf8); + + /// address: 0x500000fc + /// Alias for channel 3 READ_ADDR register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH3_AL3_READ_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0xfc); + + /// address: 0x50000100 + /// DMA Channel 4 Read Address pointer\n + /// This register updates automatically each time a read completes. The current + /// value is the next address to be read by this channel. + pub const CH4_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x100); + + /// address: 0x50000104 + /// DMA Channel 4 Write Address pointer\n + /// This register updates automatically each time a write completes. The current + /// value is the next address to be written by this channel. + pub const CH4_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x104); + + /// address: 0x50000108 + /// DMA Channel 4 Transfer Count\n + /// Program the number of bus transfers a channel will perform before halting. Note + /// that, if transfers are larger than one byte in size, this is not equal to the + /// number of bytes transferred (see CTRL_DATA_SIZE).\n\n + /// When the channel is active, reading this register shows the number of transfers + /// remaining, updating automatically each time a write transfer completes.\n\n + /// Writing this register sets the RELOAD value for the transfer counter. Each time + /// this channel is triggered, the RELOAD value is copied into the live transfer + /// counter. The channel can be started multiple times, and will perform the same + /// number of transfers each time, as programmed by most recent write.\n\n + /// The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a + /// trigger, the written value is used immediately as the length of the new transfer + /// sequence, as well as being written to RELOAD. + pub const CH4_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x108); + + /// address: 0x5000010c + /// DMA Channel 4 Control and Status + pub const CH4_CTRL_TRIG = @intToPtr(*volatile Mmio(32, packed struct { + /// DMA Channel Enable.\n + /// When 1, the channel will respond to triggering events, which will cause it to + /// become BUSY and start transferring data. When 0, the channel will ignore + /// triggers, stop issuing transfers, and pause the current transfer sequence (i.e. + /// BUSY will remain high if already high) + EN: u1, + /// HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in + /// each scheduling round, all high priority channels are considered first, and then + /// only a single low priority channel, before returning to the high priority + /// channels.\n\n + /// This only affects the order in which the DMA schedules channels. The DMA's bus + /// priority is not changed. If the DMA is not saturated then a low priority channel + /// will see no loss of throughput. + HIGH_PRIORITY: u1, + /// Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR + /// advance by this amount (1/2/4 bytes) with each transfer. + DATA_SIZE: u2, + /// If 1, the read address increments with each transfer. If 0, each read is + /// directed to the same, initial address.\n\n + /// Generally this should be disabled for peripheral-to-memory transfers. + INCR_READ: u1, + /// If 1, the write address increments with each transfer. If 0, each write is + /// directed to the same, initial address.\n\n + /// Generally this should be disabled for memory-to-peripheral transfers. + INCR_WRITE: u1, + /// Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower + /// n bits of the address will change. This wraps the address on a (1 << n) byte + /// boundary, facilitating access to naturally-aligned ring buffers.\n\n + /// Ring sizes between 2 and 32768 bytes are possible. This can apply to either read + /// or write addresses, based on value of RING_SEL. + RING_SIZE: u4, + /// Select whether RING_SIZE applies to read or write addresses.\n + /// If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write + /// addresses are wrapped. + RING_SEL: u1, + /// When this channel completes, it will trigger the channel indicated by CHAIN_TO. + /// Disable by setting CHAIN_TO = _(this channel)_.\n + /// Reset value is equal to channel number (4). + CHAIN_TO: u4, + /// Select a Transfer Request signal.\n + /// The channel uses the transfer request signal to pace its data transfer rate. + /// Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request + /// from the system).\n + /// 0x0 to 0x3a -> select DREQ n as TREQ + TREQ_SEL: u6, + /// In QUIET mode, the channel does not generate IRQs at the end of every transfer + /// block. Instead, an IRQ is raised when NULL is written to a trigger register, + /// indicating the end of a control block chain.\n\n + /// This reduces the number of interrupts to be serviced by the CPU when + /// transferring a DMA chain of many small control blocks. + IRQ_QUIET: u1, + /// Apply byte-swap transformation to DMA data.\n + /// For byte data, this has no effect. For halfword data, the two bytes of each + /// halfword are swapped. For word data, the four bytes of each word are swapped to + /// reverse order. + BSWAP: u1, + /// If 1, this channel's data transfers are visible to the sniff hardware, and each + /// transfer will advance the state of the checksum. This only applies if the sniff + /// hardware is enabled, and has this channel selected.\n\n + /// This allows checksum to be enabled or disabled on a per-control- block basis. + SNIFF_EN: u1, + /// This flag goes high when the channel starts a new transfer sequence, and low + /// when the last transfer of that sequence completes. Clearing EN while BUSY is + /// high pauses the channel, and BUSY will stay high while paused.\n\n + /// To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT. + BUSY: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + /// If 1, the channel received a write bus error. Write one to clear.\n + /// WRITE_ADDR shows the approximate address where the bus error was encountered + /// (will not to be earlier, or more than 5 transfers later) + WRITE_ERROR: u1, + /// If 1, the channel received a read bus error. Write one to clear.\n + /// READ_ADDR shows the approximate address where the bus error was encountered + /// (will not to be earlier, or more than 3 transfers later) + READ_ERROR: u1, + /// Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it + /// encounters any bus error, and always raises its channel IRQ flag. + AHB_ERROR: u1, + }), base_address + 0x10c); + + /// address: 0x50000110 + /// Alias for channel 4 CTRL register + pub const CH4_AL1_CTRL = @intToPtr(*volatile u32, base_address + 0x110); + + /// address: 0x50000114 + /// Alias for channel 4 READ_ADDR register + pub const CH4_AL1_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x114); + + /// address: 0x50000118 + /// Alias for channel 4 WRITE_ADDR register + pub const CH4_AL1_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x118); + + /// address: 0x5000011c + /// Alias for channel 4 TRANS_COUNT register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH4_AL1_TRANS_COUNT_TRIG = @intToPtr(*volatile u32, base_address + 0x11c); + + /// address: 0x50000120 + /// Alias for channel 4 CTRL register + pub const CH4_AL2_CTRL = @intToPtr(*volatile u32, base_address + 0x120); + + /// address: 0x50000124 + /// Alias for channel 4 TRANS_COUNT register + pub const CH4_AL2_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x124); + + /// address: 0x50000128 + /// Alias for channel 4 READ_ADDR register + pub const CH4_AL2_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x128); + + /// address: 0x5000012c + /// Alias for channel 4 WRITE_ADDR register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH4_AL2_WRITE_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x12c); + + /// address: 0x50000130 + /// Alias for channel 4 CTRL register + pub const CH4_AL3_CTRL = @intToPtr(*volatile u32, base_address + 0x130); + + /// address: 0x50000134 + /// Alias for channel 4 WRITE_ADDR register + pub const CH4_AL3_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x134); + + /// address: 0x50000138 + /// Alias for channel 4 TRANS_COUNT register + pub const CH4_AL3_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x138); + + /// address: 0x5000013c + /// Alias for channel 4 READ_ADDR register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH4_AL3_READ_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x13c); + + /// address: 0x50000140 + /// DMA Channel 5 Read Address pointer\n + /// This register updates automatically each time a read completes. The current + /// value is the next address to be read by this channel. + pub const CH5_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x140); + + /// address: 0x50000144 + /// DMA Channel 5 Write Address pointer\n + /// This register updates automatically each time a write completes. The current + /// value is the next address to be written by this channel. + pub const CH5_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x144); + + /// address: 0x50000148 + /// DMA Channel 5 Transfer Count\n + /// Program the number of bus transfers a channel will perform before halting. Note + /// that, if transfers are larger than one byte in size, this is not equal to the + /// number of bytes transferred (see CTRL_DATA_SIZE).\n\n + /// When the channel is active, reading this register shows the number of transfers + /// remaining, updating automatically each time a write transfer completes.\n\n + /// Writing this register sets the RELOAD value for the transfer counter. Each time + /// this channel is triggered, the RELOAD value is copied into the live transfer + /// counter. The channel can be started multiple times, and will perform the same + /// number of transfers each time, as programmed by most recent write.\n\n + /// The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a + /// trigger, the written value is used immediately as the length of the new transfer + /// sequence, as well as being written to RELOAD. + pub const CH5_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x148); + + /// address: 0x5000014c + /// DMA Channel 5 Control and Status + pub const CH5_CTRL_TRIG = @intToPtr(*volatile Mmio(32, packed struct { + /// DMA Channel Enable.\n + /// When 1, the channel will respond to triggering events, which will cause it to + /// become BUSY and start transferring data. When 0, the channel will ignore + /// triggers, stop issuing transfers, and pause the current transfer sequence (i.e. + /// BUSY will remain high if already high) + EN: u1, + /// HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in + /// each scheduling round, all high priority channels are considered first, and then + /// only a single low priority channel, before returning to the high priority + /// channels.\n\n + /// This only affects the order in which the DMA schedules channels. The DMA's bus + /// priority is not changed. If the DMA is not saturated then a low priority channel + /// will see no loss of throughput. + HIGH_PRIORITY: u1, + /// Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR + /// advance by this amount (1/2/4 bytes) with each transfer. + DATA_SIZE: u2, + /// If 1, the read address increments with each transfer. If 0, each read is + /// directed to the same, initial address.\n\n + /// Generally this should be disabled for peripheral-to-memory transfers. + INCR_READ: u1, + /// If 1, the write address increments with each transfer. If 0, each write is + /// directed to the same, initial address.\n\n + /// Generally this should be disabled for memory-to-peripheral transfers. + INCR_WRITE: u1, + /// Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower + /// n bits of the address will change. This wraps the address on a (1 << n) byte + /// boundary, facilitating access to naturally-aligned ring buffers.\n\n + /// Ring sizes between 2 and 32768 bytes are possible. This can apply to either read + /// or write addresses, based on value of RING_SEL. + RING_SIZE: u4, + /// Select whether RING_SIZE applies to read or write addresses.\n + /// If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write + /// addresses are wrapped. + RING_SEL: u1, + /// When this channel completes, it will trigger the channel indicated by CHAIN_TO. + /// Disable by setting CHAIN_TO = _(this channel)_.\n + /// Reset value is equal to channel number (5). + CHAIN_TO: u4, + /// Select a Transfer Request signal.\n + /// The channel uses the transfer request signal to pace its data transfer rate. + /// Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request + /// from the system).\n + /// 0x0 to 0x3a -> select DREQ n as TREQ + TREQ_SEL: u6, + /// In QUIET mode, the channel does not generate IRQs at the end of every transfer + /// block. Instead, an IRQ is raised when NULL is written to a trigger register, + /// indicating the end of a control block chain.\n\n + /// This reduces the number of interrupts to be serviced by the CPU when + /// transferring a DMA chain of many small control blocks. + IRQ_QUIET: u1, + /// Apply byte-swap transformation to DMA data.\n + /// For byte data, this has no effect. For halfword data, the two bytes of each + /// halfword are swapped. For word data, the four bytes of each word are swapped to + /// reverse order. + BSWAP: u1, + /// If 1, this channel's data transfers are visible to the sniff hardware, and each + /// transfer will advance the state of the checksum. This only applies if the sniff + /// hardware is enabled, and has this channel selected.\n\n + /// This allows checksum to be enabled or disabled on a per-control- block basis. + SNIFF_EN: u1, + /// This flag goes high when the channel starts a new transfer sequence, and low + /// when the last transfer of that sequence completes. Clearing EN while BUSY is + /// high pauses the channel, and BUSY will stay high while paused.\n\n + /// To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT. + BUSY: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + /// If 1, the channel received a write bus error. Write one to clear.\n + /// WRITE_ADDR shows the approximate address where the bus error was encountered + /// (will not to be earlier, or more than 5 transfers later) + WRITE_ERROR: u1, + /// If 1, the channel received a read bus error. Write one to clear.\n + /// READ_ADDR shows the approximate address where the bus error was encountered + /// (will not to be earlier, or more than 3 transfers later) + READ_ERROR: u1, + /// Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it + /// encounters any bus error, and always raises its channel IRQ flag. + AHB_ERROR: u1, + }), base_address + 0x14c); + + /// address: 0x50000150 + /// Alias for channel 5 CTRL register + pub const CH5_AL1_CTRL = @intToPtr(*volatile u32, base_address + 0x150); + + /// address: 0x50000154 + /// Alias for channel 5 READ_ADDR register + pub const CH5_AL1_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x154); + + /// address: 0x50000158 + /// Alias for channel 5 WRITE_ADDR register + pub const CH5_AL1_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x158); + + /// address: 0x5000015c + /// Alias for channel 5 TRANS_COUNT register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH5_AL1_TRANS_COUNT_TRIG = @intToPtr(*volatile u32, base_address + 0x15c); + + /// address: 0x50000160 + /// Alias for channel 5 CTRL register + pub const CH5_AL2_CTRL = @intToPtr(*volatile u32, base_address + 0x160); + + /// address: 0x50000164 + /// Alias for channel 5 TRANS_COUNT register + pub const CH5_AL2_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x164); + + /// address: 0x50000168 + /// Alias for channel 5 READ_ADDR register + pub const CH5_AL2_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x168); + + /// address: 0x5000016c + /// Alias for channel 5 WRITE_ADDR register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH5_AL2_WRITE_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x16c); + + /// address: 0x50000170 + /// Alias for channel 5 CTRL register + pub const CH5_AL3_CTRL = @intToPtr(*volatile u32, base_address + 0x170); + + /// address: 0x50000174 + /// Alias for channel 5 WRITE_ADDR register + pub const CH5_AL3_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x174); + + /// address: 0x50000178 + /// Alias for channel 5 TRANS_COUNT register + pub const CH5_AL3_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x178); + + /// address: 0x5000017c + /// Alias for channel 5 READ_ADDR register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH5_AL3_READ_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x17c); + + /// address: 0x50000180 + /// DMA Channel 6 Read Address pointer\n + /// This register updates automatically each time a read completes. The current + /// value is the next address to be read by this channel. + pub const CH6_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x180); + + /// address: 0x50000184 + /// DMA Channel 6 Write Address pointer\n + /// This register updates automatically each time a write completes. The current + /// value is the next address to be written by this channel. + pub const CH6_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x184); + + /// address: 0x50000188 + /// DMA Channel 6 Transfer Count\n + /// Program the number of bus transfers a channel will perform before halting. Note + /// that, if transfers are larger than one byte in size, this is not equal to the + /// number of bytes transferred (see CTRL_DATA_SIZE).\n\n + /// When the channel is active, reading this register shows the number of transfers + /// remaining, updating automatically each time a write transfer completes.\n\n + /// Writing this register sets the RELOAD value for the transfer counter. Each time + /// this channel is triggered, the RELOAD value is copied into the live transfer + /// counter. The channel can be started multiple times, and will perform the same + /// number of transfers each time, as programmed by most recent write.\n\n + /// The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a + /// trigger, the written value is used immediately as the length of the new transfer + /// sequence, as well as being written to RELOAD. + pub const CH6_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x188); + + /// address: 0x5000018c + /// DMA Channel 6 Control and Status + pub const CH6_CTRL_TRIG = @intToPtr(*volatile Mmio(32, packed struct { + /// DMA Channel Enable.\n + /// When 1, the channel will respond to triggering events, which will cause it to + /// become BUSY and start transferring data. When 0, the channel will ignore + /// triggers, stop issuing transfers, and pause the current transfer sequence (i.e. + /// BUSY will remain high if already high) + EN: u1, + /// HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in + /// each scheduling round, all high priority channels are considered first, and then + /// only a single low priority channel, before returning to the high priority + /// channels.\n\n + /// This only affects the order in which the DMA schedules channels. The DMA's bus + /// priority is not changed. If the DMA is not saturated then a low priority channel + /// will see no loss of throughput. + HIGH_PRIORITY: u1, + /// Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR + /// advance by this amount (1/2/4 bytes) with each transfer. + DATA_SIZE: u2, + /// If 1, the read address increments with each transfer. If 0, each read is + /// directed to the same, initial address.\n\n + /// Generally this should be disabled for peripheral-to-memory transfers. + INCR_READ: u1, + /// If 1, the write address increments with each transfer. If 0, each write is + /// directed to the same, initial address.\n\n + /// Generally this should be disabled for memory-to-peripheral transfers. + INCR_WRITE: u1, + /// Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower + /// n bits of the address will change. This wraps the address on a (1 << n) byte + /// boundary, facilitating access to naturally-aligned ring buffers.\n\n + /// Ring sizes between 2 and 32768 bytes are possible. This can apply to either read + /// or write addresses, based on value of RING_SEL. + RING_SIZE: u4, + /// Select whether RING_SIZE applies to read or write addresses.\n + /// If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write + /// addresses are wrapped. + RING_SEL: u1, + /// When this channel completes, it will trigger the channel indicated by CHAIN_TO. + /// Disable by setting CHAIN_TO = _(this channel)_.\n + /// Reset value is equal to channel number (6). + CHAIN_TO: u4, + /// Select a Transfer Request signal.\n + /// The channel uses the transfer request signal to pace its data transfer rate. + /// Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request + /// from the system).\n + /// 0x0 to 0x3a -> select DREQ n as TREQ + TREQ_SEL: u6, + /// In QUIET mode, the channel does not generate IRQs at the end of every transfer + /// block. Instead, an IRQ is raised when NULL is written to a trigger register, + /// indicating the end of a control block chain.\n\n + /// This reduces the number of interrupts to be serviced by the CPU when + /// transferring a DMA chain of many small control blocks. + IRQ_QUIET: u1, + /// Apply byte-swap transformation to DMA data.\n + /// For byte data, this has no effect. For halfword data, the two bytes of each + /// halfword are swapped. For word data, the four bytes of each word are swapped to + /// reverse order. + BSWAP: u1, + /// If 1, this channel's data transfers are visible to the sniff hardware, and each + /// transfer will advance the state of the checksum. This only applies if the sniff + /// hardware is enabled, and has this channel selected.\n\n + /// This allows checksum to be enabled or disabled on a per-control- block basis. + SNIFF_EN: u1, + /// This flag goes high when the channel starts a new transfer sequence, and low + /// when the last transfer of that sequence completes. Clearing EN while BUSY is + /// high pauses the channel, and BUSY will stay high while paused.\n\n + /// To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT. + BUSY: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + /// If 1, the channel received a write bus error. Write one to clear.\n + /// WRITE_ADDR shows the approximate address where the bus error was encountered + /// (will not to be earlier, or more than 5 transfers later) + WRITE_ERROR: u1, + /// If 1, the channel received a read bus error. Write one to clear.\n + /// READ_ADDR shows the approximate address where the bus error was encountered + /// (will not to be earlier, or more than 3 transfers later) + READ_ERROR: u1, + /// Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it + /// encounters any bus error, and always raises its channel IRQ flag. + AHB_ERROR: u1, + }), base_address + 0x18c); + + /// address: 0x50000190 + /// Alias for channel 6 CTRL register + pub const CH6_AL1_CTRL = @intToPtr(*volatile u32, base_address + 0x190); + + /// address: 0x50000194 + /// Alias for channel 6 READ_ADDR register + pub const CH6_AL1_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x194); + + /// address: 0x50000198 + /// Alias for channel 6 WRITE_ADDR register + pub const CH6_AL1_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x198); + + /// address: 0x5000019c + /// Alias for channel 6 TRANS_COUNT register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH6_AL1_TRANS_COUNT_TRIG = @intToPtr(*volatile u32, base_address + 0x19c); + + /// address: 0x500001a0 + /// Alias for channel 6 CTRL register + pub const CH6_AL2_CTRL = @intToPtr(*volatile u32, base_address + 0x1a0); + + /// address: 0x500001a4 + /// Alias for channel 6 TRANS_COUNT register + pub const CH6_AL2_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x1a4); + + /// address: 0x500001a8 + /// Alias for channel 6 READ_ADDR register + pub const CH6_AL2_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x1a8); + + /// address: 0x500001ac + /// Alias for channel 6 WRITE_ADDR register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH6_AL2_WRITE_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x1ac); + + /// address: 0x500001b0 + /// Alias for channel 6 CTRL register + pub const CH6_AL3_CTRL = @intToPtr(*volatile u32, base_address + 0x1b0); + + /// address: 0x500001b4 + /// Alias for channel 6 WRITE_ADDR register + pub const CH6_AL3_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x1b4); + + /// address: 0x500001b8 + /// Alias for channel 6 TRANS_COUNT register + pub const CH6_AL3_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x1b8); + + /// address: 0x500001bc + /// Alias for channel 6 READ_ADDR register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH6_AL3_READ_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x1bc); + + /// address: 0x500001c0 + /// DMA Channel 7 Read Address pointer\n + /// This register updates automatically each time a read completes. The current + /// value is the next address to be read by this channel. + pub const CH7_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x1c0); + + /// address: 0x500001c4 + /// DMA Channel 7 Write Address pointer\n + /// This register updates automatically each time a write completes. The current + /// value is the next address to be written by this channel. + pub const CH7_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x1c4); + + /// address: 0x500001c8 + /// DMA Channel 7 Transfer Count\n + /// Program the number of bus transfers a channel will perform before halting. Note + /// that, if transfers are larger than one byte in size, this is not equal to the + /// number of bytes transferred (see CTRL_DATA_SIZE).\n\n + /// When the channel is active, reading this register shows the number of transfers + /// remaining, updating automatically each time a write transfer completes.\n\n + /// Writing this register sets the RELOAD value for the transfer counter. Each time + /// this channel is triggered, the RELOAD value is copied into the live transfer + /// counter. The channel can be started multiple times, and will perform the same + /// number of transfers each time, as programmed by most recent write.\n\n + /// The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a + /// trigger, the written value is used immediately as the length of the new transfer + /// sequence, as well as being written to RELOAD. + pub const CH7_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x1c8); + + /// address: 0x500001cc + /// DMA Channel 7 Control and Status + pub const CH7_CTRL_TRIG = @intToPtr(*volatile Mmio(32, packed struct { + /// DMA Channel Enable.\n + /// When 1, the channel will respond to triggering events, which will cause it to + /// become BUSY and start transferring data. When 0, the channel will ignore + /// triggers, stop issuing transfers, and pause the current transfer sequence (i.e. + /// BUSY will remain high if already high) + EN: u1, + /// HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in + /// each scheduling round, all high priority channels are considered first, and then + /// only a single low priority channel, before returning to the high priority + /// channels.\n\n + /// This only affects the order in which the DMA schedules channels. The DMA's bus + /// priority is not changed. If the DMA is not saturated then a low priority channel + /// will see no loss of throughput. + HIGH_PRIORITY: u1, + /// Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR + /// advance by this amount (1/2/4 bytes) with each transfer. + DATA_SIZE: u2, + /// If 1, the read address increments with each transfer. If 0, each read is + /// directed to the same, initial address.\n\n + /// Generally this should be disabled for peripheral-to-memory transfers. + INCR_READ: u1, + /// If 1, the write address increments with each transfer. If 0, each write is + /// directed to the same, initial address.\n\n + /// Generally this should be disabled for memory-to-peripheral transfers. + INCR_WRITE: u1, + /// Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower + /// n bits of the address will change. This wraps the address on a (1 << n) byte + /// boundary, facilitating access to naturally-aligned ring buffers.\n\n + /// Ring sizes between 2 and 32768 bytes are possible. This can apply to either read + /// or write addresses, based on value of RING_SEL. + RING_SIZE: u4, + /// Select whether RING_SIZE applies to read or write addresses.\n + /// If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write + /// addresses are wrapped. + RING_SEL: u1, + /// When this channel completes, it will trigger the channel indicated by CHAIN_TO. + /// Disable by setting CHAIN_TO = _(this channel)_.\n + /// Reset value is equal to channel number (7). + CHAIN_TO: u4, + /// Select a Transfer Request signal.\n + /// The channel uses the transfer request signal to pace its data transfer rate. + /// Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request + /// from the system).\n + /// 0x0 to 0x3a -> select DREQ n as TREQ + TREQ_SEL: u6, + /// In QUIET mode, the channel does not generate IRQs at the end of every transfer + /// block. Instead, an IRQ is raised when NULL is written to a trigger register, + /// indicating the end of a control block chain.\n\n + /// This reduces the number of interrupts to be serviced by the CPU when + /// transferring a DMA chain of many small control blocks. + IRQ_QUIET: u1, + /// Apply byte-swap transformation to DMA data.\n + /// For byte data, this has no effect. For halfword data, the two bytes of each + /// halfword are swapped. For word data, the four bytes of each word are swapped to + /// reverse order. + BSWAP: u1, + /// If 1, this channel's data transfers are visible to the sniff hardware, and each + /// transfer will advance the state of the checksum. This only applies if the sniff + /// hardware is enabled, and has this channel selected.\n\n + /// This allows checksum to be enabled or disabled on a per-control- block basis. + SNIFF_EN: u1, + /// This flag goes high when the channel starts a new transfer sequence, and low + /// when the last transfer of that sequence completes. Clearing EN while BUSY is + /// high pauses the channel, and BUSY will stay high while paused.\n\n + /// To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT. + BUSY: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + /// If 1, the channel received a write bus error. Write one to clear.\n + /// WRITE_ADDR shows the approximate address where the bus error was encountered + /// (will not to be earlier, or more than 5 transfers later) + WRITE_ERROR: u1, + /// If 1, the channel received a read bus error. Write one to clear.\n + /// READ_ADDR shows the approximate address where the bus error was encountered + /// (will not to be earlier, or more than 3 transfers later) + READ_ERROR: u1, + /// Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it + /// encounters any bus error, and always raises its channel IRQ flag. + AHB_ERROR: u1, + }), base_address + 0x1cc); + + /// address: 0x500001d0 + /// Alias for channel 7 CTRL register + pub const CH7_AL1_CTRL = @intToPtr(*volatile u32, base_address + 0x1d0); + + /// address: 0x500001d4 + /// Alias for channel 7 READ_ADDR register + pub const CH7_AL1_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x1d4); + + /// address: 0x500001d8 + /// Alias for channel 7 WRITE_ADDR register + pub const CH7_AL1_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x1d8); + + /// address: 0x500001dc + /// Alias for channel 7 TRANS_COUNT register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH7_AL1_TRANS_COUNT_TRIG = @intToPtr(*volatile u32, base_address + 0x1dc); + + /// address: 0x500001e0 + /// Alias for channel 7 CTRL register + pub const CH7_AL2_CTRL = @intToPtr(*volatile u32, base_address + 0x1e0); + + /// address: 0x500001e4 + /// Alias for channel 7 TRANS_COUNT register + pub const CH7_AL2_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x1e4); + + /// address: 0x500001e8 + /// Alias for channel 7 READ_ADDR register + pub const CH7_AL2_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x1e8); + + /// address: 0x500001ec + /// Alias for channel 7 WRITE_ADDR register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH7_AL2_WRITE_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x1ec); + + /// address: 0x500001f0 + /// Alias for channel 7 CTRL register + pub const CH7_AL3_CTRL = @intToPtr(*volatile u32, base_address + 0x1f0); + + /// address: 0x500001f4 + /// Alias for channel 7 WRITE_ADDR register + pub const CH7_AL3_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x1f4); + + /// address: 0x500001f8 + /// Alias for channel 7 TRANS_COUNT register + pub const CH7_AL3_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x1f8); + + /// address: 0x500001fc + /// Alias for channel 7 READ_ADDR register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH7_AL3_READ_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x1fc); + + /// address: 0x50000200 + /// DMA Channel 8 Read Address pointer\n + /// This register updates automatically each time a read completes. The current + /// value is the next address to be read by this channel. + pub const CH8_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x200); + + /// address: 0x50000204 + /// DMA Channel 8 Write Address pointer\n + /// This register updates automatically each time a write completes. The current + /// value is the next address to be written by this channel. + pub const CH8_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x204); + + /// address: 0x50000208 + /// DMA Channel 8 Transfer Count\n + /// Program the number of bus transfers a channel will perform before halting. Note + /// that, if transfers are larger than one byte in size, this is not equal to the + /// number of bytes transferred (see CTRL_DATA_SIZE).\n\n + /// When the channel is active, reading this register shows the number of transfers + /// remaining, updating automatically each time a write transfer completes.\n\n + /// Writing this register sets the RELOAD value for the transfer counter. Each time + /// this channel is triggered, the RELOAD value is copied into the live transfer + /// counter. The channel can be started multiple times, and will perform the same + /// number of transfers each time, as programmed by most recent write.\n\n + /// The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a + /// trigger, the written value is used immediately as the length of the new transfer + /// sequence, as well as being written to RELOAD. + pub const CH8_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x208); + + /// address: 0x5000020c + /// DMA Channel 8 Control and Status + pub const CH8_CTRL_TRIG = @intToPtr(*volatile Mmio(32, packed struct { + /// DMA Channel Enable.\n + /// When 1, the channel will respond to triggering events, which will cause it to + /// become BUSY and start transferring data. When 0, the channel will ignore + /// triggers, stop issuing transfers, and pause the current transfer sequence (i.e. + /// BUSY will remain high if already high) + EN: u1, + /// HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in + /// each scheduling round, all high priority channels are considered first, and then + /// only a single low priority channel, before returning to the high priority + /// channels.\n\n + /// This only affects the order in which the DMA schedules channels. The DMA's bus + /// priority is not changed. If the DMA is not saturated then a low priority channel + /// will see no loss of throughput. + HIGH_PRIORITY: u1, + /// Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR + /// advance by this amount (1/2/4 bytes) with each transfer. + DATA_SIZE: u2, + /// If 1, the read address increments with each transfer. If 0, each read is + /// directed to the same, initial address.\n\n + /// Generally this should be disabled for peripheral-to-memory transfers. + INCR_READ: u1, + /// If 1, the write address increments with each transfer. If 0, each write is + /// directed to the same, initial address.\n\n + /// Generally this should be disabled for memory-to-peripheral transfers. + INCR_WRITE: u1, + /// Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower + /// n bits of the address will change. This wraps the address on a (1 << n) byte + /// boundary, facilitating access to naturally-aligned ring buffers.\n\n + /// Ring sizes between 2 and 32768 bytes are possible. This can apply to either read + /// or write addresses, based on value of RING_SEL. + RING_SIZE: u4, + /// Select whether RING_SIZE applies to read or write addresses.\n + /// If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write + /// addresses are wrapped. + RING_SEL: u1, + /// When this channel completes, it will trigger the channel indicated by CHAIN_TO. + /// Disable by setting CHAIN_TO = _(this channel)_.\n + /// Reset value is equal to channel number (8). + CHAIN_TO: u4, + /// Select a Transfer Request signal.\n + /// The channel uses the transfer request signal to pace its data transfer rate. + /// Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request + /// from the system).\n + /// 0x0 to 0x3a -> select DREQ n as TREQ + TREQ_SEL: u6, + /// In QUIET mode, the channel does not generate IRQs at the end of every transfer + /// block. Instead, an IRQ is raised when NULL is written to a trigger register, + /// indicating the end of a control block chain.\n\n + /// This reduces the number of interrupts to be serviced by the CPU when + /// transferring a DMA chain of many small control blocks. + IRQ_QUIET: u1, + /// Apply byte-swap transformation to DMA data.\n + /// For byte data, this has no effect. For halfword data, the two bytes of each + /// halfword are swapped. For word data, the four bytes of each word are swapped to + /// reverse order. + BSWAP: u1, + /// If 1, this channel's data transfers are visible to the sniff hardware, and each + /// transfer will advance the state of the checksum. This only applies if the sniff + /// hardware is enabled, and has this channel selected.\n\n + /// This allows checksum to be enabled or disabled on a per-control- block basis. + SNIFF_EN: u1, + /// This flag goes high when the channel starts a new transfer sequence, and low + /// when the last transfer of that sequence completes. Clearing EN while BUSY is + /// high pauses the channel, and BUSY will stay high while paused.\n\n + /// To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT. + BUSY: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + /// If 1, the channel received a write bus error. Write one to clear.\n + /// WRITE_ADDR shows the approximate address where the bus error was encountered + /// (will not to be earlier, or more than 5 transfers later) + WRITE_ERROR: u1, + /// If 1, the channel received a read bus error. Write one to clear.\n + /// READ_ADDR shows the approximate address where the bus error was encountered + /// (will not to be earlier, or more than 3 transfers later) + READ_ERROR: u1, + /// Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it + /// encounters any bus error, and always raises its channel IRQ flag. + AHB_ERROR: u1, + }), base_address + 0x20c); + + /// address: 0x50000210 + /// Alias for channel 8 CTRL register + pub const CH8_AL1_CTRL = @intToPtr(*volatile u32, base_address + 0x210); + + /// address: 0x50000214 + /// Alias for channel 8 READ_ADDR register + pub const CH8_AL1_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x214); + + /// address: 0x50000218 + /// Alias for channel 8 WRITE_ADDR register + pub const CH8_AL1_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x218); + + /// address: 0x5000021c + /// Alias for channel 8 TRANS_COUNT register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH8_AL1_TRANS_COUNT_TRIG = @intToPtr(*volatile u32, base_address + 0x21c); + + /// address: 0x50000220 + /// Alias for channel 8 CTRL register + pub const CH8_AL2_CTRL = @intToPtr(*volatile u32, base_address + 0x220); + + /// address: 0x50000224 + /// Alias for channel 8 TRANS_COUNT register + pub const CH8_AL2_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x224); + + /// address: 0x50000228 + /// Alias for channel 8 READ_ADDR register + pub const CH8_AL2_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x228); + + /// address: 0x5000022c + /// Alias for channel 8 WRITE_ADDR register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH8_AL2_WRITE_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x22c); + + /// address: 0x50000230 + /// Alias for channel 8 CTRL register + pub const CH8_AL3_CTRL = @intToPtr(*volatile u32, base_address + 0x230); + + /// address: 0x50000234 + /// Alias for channel 8 WRITE_ADDR register + pub const CH8_AL3_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x234); + + /// address: 0x50000238 + /// Alias for channel 8 TRANS_COUNT register + pub const CH8_AL3_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x238); + + /// address: 0x5000023c + /// Alias for channel 8 READ_ADDR register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH8_AL3_READ_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x23c); + + /// address: 0x50000240 + /// DMA Channel 9 Read Address pointer\n + /// This register updates automatically each time a read completes. The current + /// value is the next address to be read by this channel. + pub const CH9_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x240); + + /// address: 0x50000244 + /// DMA Channel 9 Write Address pointer\n + /// This register updates automatically each time a write completes. The current + /// value is the next address to be written by this channel. + pub const CH9_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x244); + + /// address: 0x50000248 + /// DMA Channel 9 Transfer Count\n + /// Program the number of bus transfers a channel will perform before halting. Note + /// that, if transfers are larger than one byte in size, this is not equal to the + /// number of bytes transferred (see CTRL_DATA_SIZE).\n\n + /// When the channel is active, reading this register shows the number of transfers + /// remaining, updating automatically each time a write transfer completes.\n\n + /// Writing this register sets the RELOAD value for the transfer counter. Each time + /// this channel is triggered, the RELOAD value is copied into the live transfer + /// counter. The channel can be started multiple times, and will perform the same + /// number of transfers each time, as programmed by most recent write.\n\n + /// The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a + /// trigger, the written value is used immediately as the length of the new transfer + /// sequence, as well as being written to RELOAD. + pub const CH9_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x248); + + /// address: 0x5000024c + /// DMA Channel 9 Control and Status + pub const CH9_CTRL_TRIG = @intToPtr(*volatile Mmio(32, packed struct { + /// DMA Channel Enable.\n + /// When 1, the channel will respond to triggering events, which will cause it to + /// become BUSY and start transferring data. When 0, the channel will ignore + /// triggers, stop issuing transfers, and pause the current transfer sequence (i.e. + /// BUSY will remain high if already high) + EN: u1, + /// HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in + /// each scheduling round, all high priority channels are considered first, and then + /// only a single low priority channel, before returning to the high priority + /// channels.\n\n + /// This only affects the order in which the DMA schedules channels. The DMA's bus + /// priority is not changed. If the DMA is not saturated then a low priority channel + /// will see no loss of throughput. + HIGH_PRIORITY: u1, + /// Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR + /// advance by this amount (1/2/4 bytes) with each transfer. + DATA_SIZE: u2, + /// If 1, the read address increments with each transfer. If 0, each read is + /// directed to the same, initial address.\n\n + /// Generally this should be disabled for peripheral-to-memory transfers. + INCR_READ: u1, + /// If 1, the write address increments with each transfer. If 0, each write is + /// directed to the same, initial address.\n\n + /// Generally this should be disabled for memory-to-peripheral transfers. + INCR_WRITE: u1, + /// Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower + /// n bits of the address will change. This wraps the address on a (1 << n) byte + /// boundary, facilitating access to naturally-aligned ring buffers.\n\n + /// Ring sizes between 2 and 32768 bytes are possible. This can apply to either read + /// or write addresses, based on value of RING_SEL. + RING_SIZE: u4, + /// Select whether RING_SIZE applies to read or write addresses.\n + /// If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write + /// addresses are wrapped. + RING_SEL: u1, + /// When this channel completes, it will trigger the channel indicated by CHAIN_TO. + /// Disable by setting CHAIN_TO = _(this channel)_.\n + /// Reset value is equal to channel number (9). + CHAIN_TO: u4, + /// Select a Transfer Request signal.\n + /// The channel uses the transfer request signal to pace its data transfer rate. + /// Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request + /// from the system).\n + /// 0x0 to 0x3a -> select DREQ n as TREQ + TREQ_SEL: u6, + /// In QUIET mode, the channel does not generate IRQs at the end of every transfer + /// block. Instead, an IRQ is raised when NULL is written to a trigger register, + /// indicating the end of a control block chain.\n\n + /// This reduces the number of interrupts to be serviced by the CPU when + /// transferring a DMA chain of many small control blocks. + IRQ_QUIET: u1, + /// Apply byte-swap transformation to DMA data.\n + /// For byte data, this has no effect. For halfword data, the two bytes of each + /// halfword are swapped. For word data, the four bytes of each word are swapped to + /// reverse order. + BSWAP: u1, + /// If 1, this channel's data transfers are visible to the sniff hardware, and each + /// transfer will advance the state of the checksum. This only applies if the sniff + /// hardware is enabled, and has this channel selected.\n\n + /// This allows checksum to be enabled or disabled on a per-control- block basis. + SNIFF_EN: u1, + /// This flag goes high when the channel starts a new transfer sequence, and low + /// when the last transfer of that sequence completes. Clearing EN while BUSY is + /// high pauses the channel, and BUSY will stay high while paused.\n\n + /// To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT. + BUSY: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + /// If 1, the channel received a write bus error. Write one to clear.\n + /// WRITE_ADDR shows the approximate address where the bus error was encountered + /// (will not to be earlier, or more than 5 transfers later) + WRITE_ERROR: u1, + /// If 1, the channel received a read bus error. Write one to clear.\n + /// READ_ADDR shows the approximate address where the bus error was encountered + /// (will not to be earlier, or more than 3 transfers later) + READ_ERROR: u1, + /// Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it + /// encounters any bus error, and always raises its channel IRQ flag. + AHB_ERROR: u1, + }), base_address + 0x24c); + + /// address: 0x50000250 + /// Alias for channel 9 CTRL register + pub const CH9_AL1_CTRL = @intToPtr(*volatile u32, base_address + 0x250); + + /// address: 0x50000254 + /// Alias for channel 9 READ_ADDR register + pub const CH9_AL1_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x254); + + /// address: 0x50000258 + /// Alias for channel 9 WRITE_ADDR register + pub const CH9_AL1_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x258); + + /// address: 0x5000025c + /// Alias for channel 9 TRANS_COUNT register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH9_AL1_TRANS_COUNT_TRIG = @intToPtr(*volatile u32, base_address + 0x25c); + + /// address: 0x50000260 + /// Alias for channel 9 CTRL register + pub const CH9_AL2_CTRL = @intToPtr(*volatile u32, base_address + 0x260); + + /// address: 0x50000264 + /// Alias for channel 9 TRANS_COUNT register + pub const CH9_AL2_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x264); + + /// address: 0x50000268 + /// Alias for channel 9 READ_ADDR register + pub const CH9_AL2_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x268); + + /// address: 0x5000026c + /// Alias for channel 9 WRITE_ADDR register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH9_AL2_WRITE_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x26c); + + /// address: 0x50000270 + /// Alias for channel 9 CTRL register + pub const CH9_AL3_CTRL = @intToPtr(*volatile u32, base_address + 0x270); + + /// address: 0x50000274 + /// Alias for channel 9 WRITE_ADDR register + pub const CH9_AL3_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x274); + + /// address: 0x50000278 + /// Alias for channel 9 TRANS_COUNT register + pub const CH9_AL3_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x278); + + /// address: 0x5000027c + /// Alias for channel 9 READ_ADDR register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH9_AL3_READ_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x27c); + + /// address: 0x50000280 + /// DMA Channel 10 Read Address pointer\n + /// This register updates automatically each time a read completes. The current + /// value is the next address to be read by this channel. + pub const CH10_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x280); + + /// address: 0x50000284 + /// DMA Channel 10 Write Address pointer\n + /// This register updates automatically each time a write completes. The current + /// value is the next address to be written by this channel. + pub const CH10_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x284); + + /// address: 0x50000288 + /// DMA Channel 10 Transfer Count\n + /// Program the number of bus transfers a channel will perform before halting. Note + /// that, if transfers are larger than one byte in size, this is not equal to the + /// number of bytes transferred (see CTRL_DATA_SIZE).\n\n + /// When the channel is active, reading this register shows the number of transfers + /// remaining, updating automatically each time a write transfer completes.\n\n + /// Writing this register sets the RELOAD value for the transfer counter. Each time + /// this channel is triggered, the RELOAD value is copied into the live transfer + /// counter. The channel can be started multiple times, and will perform the same + /// number of transfers each time, as programmed by most recent write.\n\n + /// The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a + /// trigger, the written value is used immediately as the length of the new transfer + /// sequence, as well as being written to RELOAD. + pub const CH10_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x288); + + /// address: 0x5000028c + /// DMA Channel 10 Control and Status + pub const CH10_CTRL_TRIG = @intToPtr(*volatile Mmio(32, packed struct { + /// DMA Channel Enable.\n + /// When 1, the channel will respond to triggering events, which will cause it to + /// become BUSY and start transferring data. When 0, the channel will ignore + /// triggers, stop issuing transfers, and pause the current transfer sequence (i.e. + /// BUSY will remain high if already high) + EN: u1, + /// HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in + /// each scheduling round, all high priority channels are considered first, and then + /// only a single low priority channel, before returning to the high priority + /// channels.\n\n + /// This only affects the order in which the DMA schedules channels. The DMA's bus + /// priority is not changed. If the DMA is not saturated then a low priority channel + /// will see no loss of throughput. + HIGH_PRIORITY: u1, + /// Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR + /// advance by this amount (1/2/4 bytes) with each transfer. + DATA_SIZE: u2, + /// If 1, the read address increments with each transfer. If 0, each read is + /// directed to the same, initial address.\n\n + /// Generally this should be disabled for peripheral-to-memory transfers. + INCR_READ: u1, + /// If 1, the write address increments with each transfer. If 0, each write is + /// directed to the same, initial address.\n\n + /// Generally this should be disabled for memory-to-peripheral transfers. + INCR_WRITE: u1, + /// Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower + /// n bits of the address will change. This wraps the address on a (1 << n) byte + /// boundary, facilitating access to naturally-aligned ring buffers.\n\n + /// Ring sizes between 2 and 32768 bytes are possible. This can apply to either read + /// or write addresses, based on value of RING_SEL. + RING_SIZE: u4, + /// Select whether RING_SIZE applies to read or write addresses.\n + /// If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write + /// addresses are wrapped. + RING_SEL: u1, + /// When this channel completes, it will trigger the channel indicated by CHAIN_TO. + /// Disable by setting CHAIN_TO = _(this channel)_.\n + /// Reset value is equal to channel number (10). + CHAIN_TO: u4, + /// Select a Transfer Request signal.\n + /// The channel uses the transfer request signal to pace its data transfer rate. + /// Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request + /// from the system).\n + /// 0x0 to 0x3a -> select DREQ n as TREQ + TREQ_SEL: u6, + /// In QUIET mode, the channel does not generate IRQs at the end of every transfer + /// block. Instead, an IRQ is raised when NULL is written to a trigger register, + /// indicating the end of a control block chain.\n\n + /// This reduces the number of interrupts to be serviced by the CPU when + /// transferring a DMA chain of many small control blocks. + IRQ_QUIET: u1, + /// Apply byte-swap transformation to DMA data.\n + /// For byte data, this has no effect. For halfword data, the two bytes of each + /// halfword are swapped. For word data, the four bytes of each word are swapped to + /// reverse order. + BSWAP: u1, + /// If 1, this channel's data transfers are visible to the sniff hardware, and each + /// transfer will advance the state of the checksum. This only applies if the sniff + /// hardware is enabled, and has this channel selected.\n\n + /// This allows checksum to be enabled or disabled on a per-control- block basis. + SNIFF_EN: u1, + /// This flag goes high when the channel starts a new transfer sequence, and low + /// when the last transfer of that sequence completes. Clearing EN while BUSY is + /// high pauses the channel, and BUSY will stay high while paused.\n\n + /// To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT. + BUSY: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + /// If 1, the channel received a write bus error. Write one to clear.\n + /// WRITE_ADDR shows the approximate address where the bus error was encountered + /// (will not to be earlier, or more than 5 transfers later) + WRITE_ERROR: u1, + /// If 1, the channel received a read bus error. Write one to clear.\n + /// READ_ADDR shows the approximate address where the bus error was encountered + /// (will not to be earlier, or more than 3 transfers later) + READ_ERROR: u1, + /// Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it + /// encounters any bus error, and always raises its channel IRQ flag. + AHB_ERROR: u1, + }), base_address + 0x28c); + + /// address: 0x50000290 + /// Alias for channel 10 CTRL register + pub const CH10_AL1_CTRL = @intToPtr(*volatile u32, base_address + 0x290); + + /// address: 0x50000294 + /// Alias for channel 10 READ_ADDR register + pub const CH10_AL1_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x294); + + /// address: 0x50000298 + /// Alias for channel 10 WRITE_ADDR register + pub const CH10_AL1_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x298); + + /// address: 0x5000029c + /// Alias for channel 10 TRANS_COUNT register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH10_AL1_TRANS_COUNT_TRIG = @intToPtr(*volatile u32, base_address + 0x29c); + + /// address: 0x500002a0 + /// Alias for channel 10 CTRL register + pub const CH10_AL2_CTRL = @intToPtr(*volatile u32, base_address + 0x2a0); + + /// address: 0x500002a4 + /// Alias for channel 10 TRANS_COUNT register + pub const CH10_AL2_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x2a4); + + /// address: 0x500002a8 + /// Alias for channel 10 READ_ADDR register + pub const CH10_AL2_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x2a8); + + /// address: 0x500002ac + /// Alias for channel 10 WRITE_ADDR register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH10_AL2_WRITE_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x2ac); + + /// address: 0x500002b0 + /// Alias for channel 10 CTRL register + pub const CH10_AL3_CTRL = @intToPtr(*volatile u32, base_address + 0x2b0); + + /// address: 0x500002b4 + /// Alias for channel 10 WRITE_ADDR register + pub const CH10_AL3_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x2b4); + + /// address: 0x500002b8 + /// Alias for channel 10 TRANS_COUNT register + pub const CH10_AL3_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x2b8); + + /// address: 0x500002bc + /// Alias for channel 10 READ_ADDR register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH10_AL3_READ_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x2bc); + + /// address: 0x500002c0 + /// DMA Channel 11 Read Address pointer\n + /// This register updates automatically each time a read completes. The current + /// value is the next address to be read by this channel. + pub const CH11_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x2c0); + + /// address: 0x500002c4 + /// DMA Channel 11 Write Address pointer\n + /// This register updates automatically each time a write completes. The current + /// value is the next address to be written by this channel. + pub const CH11_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x2c4); + + /// address: 0x500002c8 + /// DMA Channel 11 Transfer Count\n + /// Program the number of bus transfers a channel will perform before halting. Note + /// that, if transfers are larger than one byte in size, this is not equal to the + /// number of bytes transferred (see CTRL_DATA_SIZE).\n\n + /// When the channel is active, reading this register shows the number of transfers + /// remaining, updating automatically each time a write transfer completes.\n\n + /// Writing this register sets the RELOAD value for the transfer counter. Each time + /// this channel is triggered, the RELOAD value is copied into the live transfer + /// counter. The channel can be started multiple times, and will perform the same + /// number of transfers each time, as programmed by most recent write.\n\n + /// The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a + /// trigger, the written value is used immediately as the length of the new transfer + /// sequence, as well as being written to RELOAD. + pub const CH11_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x2c8); + + /// address: 0x500002cc + /// DMA Channel 11 Control and Status + pub const CH11_CTRL_TRIG = @intToPtr(*volatile Mmio(32, packed struct { + /// DMA Channel Enable.\n + /// When 1, the channel will respond to triggering events, which will cause it to + /// become BUSY and start transferring data. When 0, the channel will ignore + /// triggers, stop issuing transfers, and pause the current transfer sequence (i.e. + /// BUSY will remain high if already high) + EN: u1, + /// HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in + /// each scheduling round, all high priority channels are considered first, and then + /// only a single low priority channel, before returning to the high priority + /// channels.\n\n + /// This only affects the order in which the DMA schedules channels. The DMA's bus + /// priority is not changed. If the DMA is not saturated then a low priority channel + /// will see no loss of throughput. + HIGH_PRIORITY: u1, + /// Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR + /// advance by this amount (1/2/4 bytes) with each transfer. + DATA_SIZE: u2, + /// If 1, the read address increments with each transfer. If 0, each read is + /// directed to the same, initial address.\n\n + /// Generally this should be disabled for peripheral-to-memory transfers. + INCR_READ: u1, + /// If 1, the write address increments with each transfer. If 0, each write is + /// directed to the same, initial address.\n\n + /// Generally this should be disabled for memory-to-peripheral transfers. + INCR_WRITE: u1, + /// Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower + /// n bits of the address will change. This wraps the address on a (1 << n) byte + /// boundary, facilitating access to naturally-aligned ring buffers.\n\n + /// Ring sizes between 2 and 32768 bytes are possible. This can apply to either read + /// or write addresses, based on value of RING_SEL. + RING_SIZE: u4, + /// Select whether RING_SIZE applies to read or write addresses.\n + /// If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write + /// addresses are wrapped. + RING_SEL: u1, + /// When this channel completes, it will trigger the channel indicated by CHAIN_TO. + /// Disable by setting CHAIN_TO = _(this channel)_.\n + /// Reset value is equal to channel number (11). + CHAIN_TO: u4, + /// Select a Transfer Request signal.\n + /// The channel uses the transfer request signal to pace its data transfer rate. + /// Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request + /// from the system).\n + /// 0x0 to 0x3a -> select DREQ n as TREQ + TREQ_SEL: u6, + /// In QUIET mode, the channel does not generate IRQs at the end of every transfer + /// block. Instead, an IRQ is raised when NULL is written to a trigger register, + /// indicating the end of a control block chain.\n\n + /// This reduces the number of interrupts to be serviced by the CPU when + /// transferring a DMA chain of many small control blocks. + IRQ_QUIET: u1, + /// Apply byte-swap transformation to DMA data.\n + /// For byte data, this has no effect. For halfword data, the two bytes of each + /// halfword are swapped. For word data, the four bytes of each word are swapped to + /// reverse order. + BSWAP: u1, + /// If 1, this channel's data transfers are visible to the sniff hardware, and each + /// transfer will advance the state of the checksum. This only applies if the sniff + /// hardware is enabled, and has this channel selected.\n\n + /// This allows checksum to be enabled or disabled on a per-control- block basis. + SNIFF_EN: u1, + /// This flag goes high when the channel starts a new transfer sequence, and low + /// when the last transfer of that sequence completes. Clearing EN while BUSY is + /// high pauses the channel, and BUSY will stay high while paused.\n\n + /// To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT. + BUSY: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + /// If 1, the channel received a write bus error. Write one to clear.\n + /// WRITE_ADDR shows the approximate address where the bus error was encountered + /// (will not to be earlier, or more than 5 transfers later) + WRITE_ERROR: u1, + /// If 1, the channel received a read bus error. Write one to clear.\n + /// READ_ADDR shows the approximate address where the bus error was encountered + /// (will not to be earlier, or more than 3 transfers later) + READ_ERROR: u1, + /// Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it + /// encounters any bus error, and always raises its channel IRQ flag. + AHB_ERROR: u1, + }), base_address + 0x2cc); + + /// address: 0x500002d0 + /// Alias for channel 11 CTRL register + pub const CH11_AL1_CTRL = @intToPtr(*volatile u32, base_address + 0x2d0); + + /// address: 0x500002d4 + /// Alias for channel 11 READ_ADDR register + pub const CH11_AL1_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x2d4); + + /// address: 0x500002d8 + /// Alias for channel 11 WRITE_ADDR register + pub const CH11_AL1_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x2d8); + + /// address: 0x500002dc + /// Alias for channel 11 TRANS_COUNT register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH11_AL1_TRANS_COUNT_TRIG = @intToPtr(*volatile u32, base_address + 0x2dc); + + /// address: 0x500002e0 + /// Alias for channel 11 CTRL register + pub const CH11_AL2_CTRL = @intToPtr(*volatile u32, base_address + 0x2e0); + + /// address: 0x500002e4 + /// Alias for channel 11 TRANS_COUNT register + pub const CH11_AL2_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x2e4); + + /// address: 0x500002e8 + /// Alias for channel 11 READ_ADDR register + pub const CH11_AL2_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x2e8); + + /// address: 0x500002ec + /// Alias for channel 11 WRITE_ADDR register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH11_AL2_WRITE_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x2ec); + + /// address: 0x500002f0 + /// Alias for channel 11 CTRL register + pub const CH11_AL3_CTRL = @intToPtr(*volatile u32, base_address + 0x2f0); + + /// address: 0x500002f4 + /// Alias for channel 11 WRITE_ADDR register + pub const CH11_AL3_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x2f4); + + /// address: 0x500002f8 + /// Alias for channel 11 TRANS_COUNT register + pub const CH11_AL3_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x2f8); + + /// address: 0x500002fc + /// Alias for channel 11 READ_ADDR register\n + /// This is a trigger register (0xc). Writing a nonzero value will\n + /// reload the channel counter and start the channel. + pub const CH11_AL3_READ_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x2fc); + + /// address: 0x50000400 + /// Interrupt Status (raw) + pub const INTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x400); + + /// address: 0x50000404 + /// Interrupt Enables for IRQ 0 + pub const INTE0 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x404); + + /// address: 0x50000408 + /// Force Interrupts + pub const INTF0 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x408); + + /// address: 0x5000040c + /// Interrupt Status for IRQ 0 + pub const INTS0 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x40c); + + /// address: 0x50000414 + /// Interrupt Enables for IRQ 1 + pub const INTE1 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x414); + + /// address: 0x50000418 + /// Force Interrupts for IRQ 1 + pub const INTF1 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x418); + + /// address: 0x5000041c + /// Interrupt Status (masked) for IRQ 1 + pub const INTS1 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x41c); + + /// address: 0x50000420 + /// Pacing (X/Y) Fractional Timer\n + /// The pacing timer produces TREQ assertions at a rate set by ((X/Y) * sys_clk). + /// This equation is evaluated every sys_clk cycles and therefore can only generate + /// TREQs at a rate of 1 per sys_clk (i.e. permanent TREQ) or less. + pub const TIMER0 = @intToPtr(*volatile Mmio(32, packed struct { + /// Pacing Timer Divisor. Specifies the Y value for the (X/Y) fractional timer. + Y: u16, + /// Pacing Timer Dividend. Specifies the X value for the (X/Y) fractional timer. + X: u16, + }), base_address + 0x420); + + /// address: 0x50000424 + /// Pacing (X/Y) Fractional Timer\n + /// The pacing timer produces TREQ assertions at a rate set by ((X/Y) * sys_clk). + /// This equation is evaluated every sys_clk cycles and therefore can only generate + /// TREQs at a rate of 1 per sys_clk (i.e. permanent TREQ) or less. + pub const TIMER1 = @intToPtr(*volatile Mmio(32, packed struct { + /// Pacing Timer Divisor. Specifies the Y value for the (X/Y) fractional timer. + Y: u16, + /// Pacing Timer Dividend. Specifies the X value for the (X/Y) fractional timer. + X: u16, + }), base_address + 0x424); + + /// address: 0x50000428 + /// Pacing (X/Y) Fractional Timer\n + /// The pacing timer produces TREQ assertions at a rate set by ((X/Y) * sys_clk). + /// This equation is evaluated every sys_clk cycles and therefore can only generate + /// TREQs at a rate of 1 per sys_clk (i.e. permanent TREQ) or less. + pub const TIMER2 = @intToPtr(*volatile Mmio(32, packed struct { + /// Pacing Timer Divisor. Specifies the Y value for the (X/Y) fractional timer. + Y: u16, + /// Pacing Timer Dividend. Specifies the X value for the (X/Y) fractional timer. + X: u16, + }), base_address + 0x428); + + /// address: 0x5000042c + /// Pacing (X/Y) Fractional Timer\n + /// The pacing timer produces TREQ assertions at a rate set by ((X/Y) * sys_clk). + /// This equation is evaluated every sys_clk cycles and therefore can only generate + /// TREQs at a rate of 1 per sys_clk (i.e. permanent TREQ) or less. + pub const TIMER3 = @intToPtr(*volatile Mmio(32, packed struct { + /// Pacing Timer Divisor. Specifies the Y value for the (X/Y) fractional timer. + Y: u16, + /// Pacing Timer Dividend. Specifies the X value for the (X/Y) fractional timer. + X: u16, + }), base_address + 0x42c); + + /// address: 0x50000430 + /// Trigger one or more channels simultaneously + pub const MULTI_CHAN_TRIGGER = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x430); + + /// address: 0x50000434 + /// Sniffer Control + pub const SNIFF_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// Enable sniffer + EN: u1, + /// DMA channel for Sniffer to observe + DMACH: u4, + CALC: u4, + /// Locally perform a byte reverse on the sniffed data, before feeding into + /// checksum.\n\n + /// Note that the sniff hardware is downstream of the DMA channel byteswap performed + /// in the read master: if channel CTRL_BSWAP and SNIFF_CTRL_BSWAP are both enabled, + /// their effects cancel from the sniffer's point of view. + BSWAP: u1, + /// If set, the result appears bit-reversed when read. This does not affect the way + /// the checksum is calculated; the result is transformed on-the-fly between the + /// result register and the bus. + OUT_REV: u1, + /// If set, the result appears inverted (bitwise complement) when read. This does + /// not affect the way the checksum is calculated; the result is transformed + /// on-the-fly between the result register and the bus. + OUT_INV: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x434); + + /// address: 0x50000438 + /// Data accumulator for sniff hardware\n + /// Write an initial seed value here before starting a DMA transfer on the channel + /// indicated by SNIFF_CTRL_DMACH. The hardware will update this register each time + /// it observes a read from the indicated channel. Once the channel completes, the + /// final result can be read from this register. + pub const SNIFF_DATA = @intToPtr(*volatile u32, base_address + 0x438); + + /// address: 0x50000440 + /// Debug RAF, WAF, TDF levels + pub const FIFO_LEVELS = @intToPtr(*volatile Mmio(32, packed struct { + /// Current Transfer-Data-FIFO fill level + TDF_LVL: u8, + /// Current Write-Address-FIFO fill level + WAF_LVL: u8, + /// Current Read-Address-FIFO fill level + RAF_LVL: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0x440); + + /// address: 0x50000444 + /// Abort an in-progress transfer sequence on one or more channels + pub const CHAN_ABORT = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x444); + + /// address: 0x50000448 + /// The number of channels this DMA instance is equipped with. This DMA supports up + /// to 16 hardware channels, but can be configured with as few as one, to minimise + /// silicon area. + pub const N_CHANNELS = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x448); + + /// address: 0x50000800 + /// Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can + /// perform on the peripheral without overflow/underflow. Write any value: clears + /// the counter, and cause channel to re-initiate DREQ handshake. + pub const CH0_DBG_CTDREQ = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x800); + + /// address: 0x50000804 + /// Read to get channel TRANS_COUNT reload value, i.e. the length of the next + /// transfer + pub const CH0_DBG_TCR = @intToPtr(*volatile u32, base_address + 0x804); + + /// address: 0x50000840 + /// Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can + /// perform on the peripheral without overflow/underflow. Write any value: clears + /// the counter, and cause channel to re-initiate DREQ handshake. + pub const CH1_DBG_CTDREQ = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x840); + + /// address: 0x50000844 + /// Read to get channel TRANS_COUNT reload value, i.e. the length of the next + /// transfer + pub const CH1_DBG_TCR = @intToPtr(*volatile u32, base_address + 0x844); + + /// address: 0x50000880 + /// Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can + /// perform on the peripheral without overflow/underflow. Write any value: clears + /// the counter, and cause channel to re-initiate DREQ handshake. + pub const CH2_DBG_CTDREQ = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x880); + + /// address: 0x50000884 + /// Read to get channel TRANS_COUNT reload value, i.e. the length of the next + /// transfer + pub const CH2_DBG_TCR = @intToPtr(*volatile u32, base_address + 0x884); + + /// address: 0x500008c0 + /// Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can + /// perform on the peripheral without overflow/underflow. Write any value: clears + /// the counter, and cause channel to re-initiate DREQ handshake. + pub const CH3_DBG_CTDREQ = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x8c0); + + /// address: 0x500008c4 + /// Read to get channel TRANS_COUNT reload value, i.e. the length of the next + /// transfer + pub const CH3_DBG_TCR = @intToPtr(*volatile u32, base_address + 0x8c4); + + /// address: 0x50000900 + /// Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can + /// perform on the peripheral without overflow/underflow. Write any value: clears + /// the counter, and cause channel to re-initiate DREQ handshake. + pub const CH4_DBG_CTDREQ = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x900); + + /// address: 0x50000904 + /// Read to get channel TRANS_COUNT reload value, i.e. the length of the next + /// transfer + pub const CH4_DBG_TCR = @intToPtr(*volatile u32, base_address + 0x904); + + /// address: 0x50000940 + /// Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can + /// perform on the peripheral without overflow/underflow. Write any value: clears + /// the counter, and cause channel to re-initiate DREQ handshake. + pub const CH5_DBG_CTDREQ = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x940); + + /// address: 0x50000944 + /// Read to get channel TRANS_COUNT reload value, i.e. the length of the next + /// transfer + pub const CH5_DBG_TCR = @intToPtr(*volatile u32, base_address + 0x944); + + /// address: 0x50000980 + /// Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can + /// perform on the peripheral without overflow/underflow. Write any value: clears + /// the counter, and cause channel to re-initiate DREQ handshake. + pub const CH6_DBG_CTDREQ = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x980); + + /// address: 0x50000984 + /// Read to get channel TRANS_COUNT reload value, i.e. the length of the next + /// transfer + pub const CH6_DBG_TCR = @intToPtr(*volatile u32, base_address + 0x984); + + /// address: 0x500009c0 + /// Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can + /// perform on the peripheral without overflow/underflow. Write any value: clears + /// the counter, and cause channel to re-initiate DREQ handshake. + pub const CH7_DBG_CTDREQ = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x9c0); + + /// address: 0x500009c4 + /// Read to get channel TRANS_COUNT reload value, i.e. the length of the next + /// transfer + pub const CH7_DBG_TCR = @intToPtr(*volatile u32, base_address + 0x9c4); + + /// address: 0x50000a00 + /// Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can + /// perform on the peripheral without overflow/underflow. Write any value: clears + /// the counter, and cause channel to re-initiate DREQ handshake. + pub const CH8_DBG_CTDREQ = @intToPtr(*volatile MmioInt(32, u6), base_address + 0xa00); + + /// address: 0x50000a04 + /// Read to get channel TRANS_COUNT reload value, i.e. the length of the next + /// transfer + pub const CH8_DBG_TCR = @intToPtr(*volatile u32, base_address + 0xa04); + + /// address: 0x50000a40 + /// Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can + /// perform on the peripheral without overflow/underflow. Write any value: clears + /// the counter, and cause channel to re-initiate DREQ handshake. + pub const CH9_DBG_CTDREQ = @intToPtr(*volatile MmioInt(32, u6), base_address + 0xa40); + + /// address: 0x50000a44 + /// Read to get channel TRANS_COUNT reload value, i.e. the length of the next + /// transfer + pub const CH9_DBG_TCR = @intToPtr(*volatile u32, base_address + 0xa44); + + /// address: 0x50000a80 + /// Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can + /// perform on the peripheral without overflow/underflow. Write any value: clears + /// the counter, and cause channel to re-initiate DREQ handshake. + pub const CH10_DBG_CTDREQ = @intToPtr(*volatile MmioInt(32, u6), base_address + 0xa80); + + /// address: 0x50000a84 + /// Read to get channel TRANS_COUNT reload value, i.e. the length of the next + /// transfer + pub const CH10_DBG_TCR = @intToPtr(*volatile u32, base_address + 0xa84); + + /// address: 0x50000ac0 + /// Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can + /// perform on the peripheral without overflow/underflow. Write any value: clears + /// the counter, and cause channel to re-initiate DREQ handshake. + pub const CH11_DBG_CTDREQ = @intToPtr(*volatile MmioInt(32, u6), base_address + 0xac0); + + /// address: 0x50000ac4 + /// Read to get channel TRANS_COUNT reload value, i.e. the length of the next + /// transfer + pub const CH11_DBG_TCR = @intToPtr(*volatile u32, base_address + 0xac4); + }; + + /// DPRAM layout for USB device. + pub const USBCTRL_DPRAM = struct { + pub const base_address = 0x50100000; + pub const version = "1"; + + /// address: 0x50100000 + /// Bytes 0-3 of the SETUP packet from the host. + pub const SETUP_PACKET_LOW = @intToPtr(*volatile Mmio(32, packed struct { + BMREQUESTTYPE: u8, + BREQUEST: u8, + WVALUE: u16, + }), base_address + 0x0); + + /// address: 0x50100004 + /// Bytes 4-7 of the setup packet from the host. + pub const SETUP_PACKET_HIGH = @intToPtr(*volatile Mmio(32, packed struct { + WINDEX: u16, + WLENGTH: u16, + }), base_address + 0x4); + + /// address: 0x50100008 + pub const EP1_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x8); + + /// address: 0x5010000c + pub const EP1_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0xc); + + /// address: 0x50100010 + pub const EP2_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x10); + + /// address: 0x50100014 + pub const EP2_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x14); + + /// address: 0x50100018 + pub const EP3_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x18); + + /// address: 0x5010001c + pub const EP3_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x1c); + + /// address: 0x50100020 + pub const EP4_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x20); + + /// address: 0x50100024 + pub const EP4_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x24); + + /// address: 0x50100028 + pub const EP5_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x28); + + /// address: 0x5010002c + pub const EP5_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x2c); + + /// address: 0x50100030 + pub const EP6_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x30); + + /// address: 0x50100034 + pub const EP6_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x34); + + /// address: 0x50100038 + pub const EP7_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x38); + + /// address: 0x5010003c + pub const EP7_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x3c); + + /// address: 0x50100040 + pub const EP8_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x40); + + /// address: 0x50100044 + pub const EP8_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x44); + + /// address: 0x50100048 + pub const EP9_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x48); + + /// address: 0x5010004c + pub const EP9_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x4c); + + /// address: 0x50100050 + pub const EP10_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x50); + + /// address: 0x50100054 + pub const EP10_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x54); + + /// address: 0x50100058 + pub const EP11_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x58); + + /// address: 0x5010005c + pub const EP11_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x5c); + + /// address: 0x50100060 + pub const EP12_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x60); + + /// address: 0x50100064 + pub const EP12_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x64); + + /// address: 0x50100068 + pub const EP13_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x68); + + /// address: 0x5010006c + pub const EP13_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x6c); + + /// address: 0x50100070 + pub const EP14_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x70); + + /// address: 0x50100074 + pub const EP14_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x74); + + /// address: 0x50100078 + pub const EP15_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x78); + + /// address: 0x5010007c + pub const EP15_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to + /// the start of the DPRAM. + BUFFER_ADDRESS: u16, + /// Trigger an interrupt if a NAK is sent. Intended for debug only. + INTERRUPT_ON_NAK: u1, + /// Trigger an interrupt if a STALL is sent. Intended for debug only. + INTERRUPT_ON_STALL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + ENDPOINT_TYPE: u2, + /// Trigger an interrupt each time both buffers are done. Only valid in double + /// buffered mode. + INTERRUPT_PER_DOUBLE_BUFF: u1, + /// Trigger an interrupt each time a buffer is done. + INTERRUPT_PER_BUFF: u1, + /// This endpoint is double buffered. + DOUBLE_BUFFERED: u1, + /// Enable this endpoint. The device will not reply to any packets for this endpoint + /// if this bit is not set. + ENABLE: u1, + }), base_address + 0x7c); + + /// address: 0x50100080 + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP0_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0x80); + + /// address: 0x50100084 + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP0_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0x84); + + /// address: 0x50100088 + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP1_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0x88); + + /// address: 0x5010008c + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP1_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0x8c); + + /// address: 0x50100090 + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP2_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0x90); + + /// address: 0x50100094 + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP2_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0x94); + + /// address: 0x50100098 + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP3_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0x98); + + /// address: 0x5010009c + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP3_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0x9c); + + /// address: 0x501000a0 + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP4_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0xa0); + + /// address: 0x501000a4 + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP4_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0xa4); + + /// address: 0x501000a8 + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP5_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0xa8); + + /// address: 0x501000ac + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP5_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0xac); + + /// address: 0x501000b0 + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP6_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0xb0); + + /// address: 0x501000b4 + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP6_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0xb4); + + /// address: 0x501000b8 + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP7_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0xb8); + + /// address: 0x501000bc + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP7_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0xbc); + + /// address: 0x501000c0 + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP8_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0xc0); + + /// address: 0x501000c4 + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP8_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0xc4); + + /// address: 0x501000c8 + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP9_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0xc8); + + /// address: 0x501000cc + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP9_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0xcc); + + /// address: 0x501000d0 + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP10_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0xd0); + + /// address: 0x501000d4 + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP10_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0xd4); + + /// address: 0x501000d8 + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP11_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0xd8); + + /// address: 0x501000dc + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP11_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0xdc); + + /// address: 0x501000e0 + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP12_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0xe0); + + /// address: 0x501000e4 + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP12_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0xe4); + + /// address: 0x501000e8 + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP13_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0xe8); + + /// address: 0x501000ec + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP13_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0xec); + + /// address: 0x501000f0 + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP14_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0xf0); + + /// address: 0x501000f4 + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP14_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0xf4); + + /// address: 0x501000f8 + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP15_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0xf8); + + /// address: 0x501000fc + /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for + /// buffer 1.\n + /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the + /// endpoint is in double buffered mode. + pub const EP15_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct { + /// The length of the data in buffer 0. + LENGTH_0: u10, + /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_0: u1, + /// Reply with a stall (valid for both buffers). + STALL: u1, + /// Reset the buffer selector to buffer 0. + RESET: u1, + /// The data pid of buffer 0. + PID_0: u1, + /// Buffer 0 is the last buffer of the transfer. + LAST_0: u1, + /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_0: u1, + /// The length of the data in buffer 1. + LENGTH_1: u10, + /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the + /// controller. The controller clears the available bit when writing the status + /// back. + AVAILABLE_1: u1, + /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only + /// valid in double buffered mode for an Isochronous endpoint.\n + /// For a non Isochronous endpoint the offset is always 64 bytes. + DOUBLE_BUFFER_ISO_OFFSET: u2, + /// The data pid of buffer 1. + PID_1: u1, + /// Buffer 1 is the last buffer of the transfer. + LAST_1: u1, + /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate + /// the data is valid. For an OUT transfer (RX from the host) this bit should be + /// left as a 0. The host will set it when it has filled the buffer with data. + FULL_1: u1, + }), base_address + 0xfc); + }; + + /// USB FS/LS controller device registers + pub const USBCTRL_REGS = struct { + pub const base_address = 0x50110000; + pub const version = "1"; + + /// address: 0x50110000 + /// Device address and endpoint control + pub const ADDR_ENDP = @intToPtr(*volatile Mmio(32, packed struct { + /// In device mode, the address that the device should respond to. Set in response + /// to a SET_ADDR setup packet from the host. In host mode set to the address of the + /// device to communicate with. + ADDRESS: u7, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + /// Device endpoint to send data to. Only valid for HOST mode. + ENDPOINT: u4, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + }), base_address + 0x0); + + /// address: 0x50110004 + /// Interrupt endpoint 1. Only valid for HOST mode. + pub const ADDR_ENDP1 = @intToPtr(*volatile Mmio(32, packed struct { + /// Device address + ADDRESS: u7, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + /// Endpoint number of the interrupt endpoint + ENDPOINT: u4, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + /// Direction of the interrupt endpoint. In=0, Out=1 + INTEP_DIR: u1, + /// Interrupt EP requires preamble (is a low speed device on a full speed hub) + INTEP_PREAMBLE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x4); + + /// address: 0x50110008 + /// Interrupt endpoint 2. Only valid for HOST mode. + pub const ADDR_ENDP2 = @intToPtr(*volatile Mmio(32, packed struct { + /// Device address + ADDRESS: u7, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + /// Endpoint number of the interrupt endpoint + ENDPOINT: u4, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + /// Direction of the interrupt endpoint. In=0, Out=1 + INTEP_DIR: u1, + /// Interrupt EP requires preamble (is a low speed device on a full speed hub) + INTEP_PREAMBLE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x8); + + /// address: 0x5011000c + /// Interrupt endpoint 3. Only valid for HOST mode. + pub const ADDR_ENDP3 = @intToPtr(*volatile Mmio(32, packed struct { + /// Device address + ADDRESS: u7, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + /// Endpoint number of the interrupt endpoint + ENDPOINT: u4, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + /// Direction of the interrupt endpoint. In=0, Out=1 + INTEP_DIR: u1, + /// Interrupt EP requires preamble (is a low speed device on a full speed hub) + INTEP_PREAMBLE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0xc); + + /// address: 0x50110010 + /// Interrupt endpoint 4. Only valid for HOST mode. + pub const ADDR_ENDP4 = @intToPtr(*volatile Mmio(32, packed struct { + /// Device address + ADDRESS: u7, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + /// Endpoint number of the interrupt endpoint + ENDPOINT: u4, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + /// Direction of the interrupt endpoint. In=0, Out=1 + INTEP_DIR: u1, + /// Interrupt EP requires preamble (is a low speed device on a full speed hub) + INTEP_PREAMBLE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x10); + + /// address: 0x50110014 + /// Interrupt endpoint 5. Only valid for HOST mode. + pub const ADDR_ENDP5 = @intToPtr(*volatile Mmio(32, packed struct { + /// Device address + ADDRESS: u7, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + /// Endpoint number of the interrupt endpoint + ENDPOINT: u4, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + /// Direction of the interrupt endpoint. In=0, Out=1 + INTEP_DIR: u1, + /// Interrupt EP requires preamble (is a low speed device on a full speed hub) + INTEP_PREAMBLE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x14); + + /// address: 0x50110018 + /// Interrupt endpoint 6. Only valid for HOST mode. + pub const ADDR_ENDP6 = @intToPtr(*volatile Mmio(32, packed struct { + /// Device address + ADDRESS: u7, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + /// Endpoint number of the interrupt endpoint + ENDPOINT: u4, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + /// Direction of the interrupt endpoint. In=0, Out=1 + INTEP_DIR: u1, + /// Interrupt EP requires preamble (is a low speed device on a full speed hub) + INTEP_PREAMBLE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x18); + + /// address: 0x5011001c + /// Interrupt endpoint 7. Only valid for HOST mode. + pub const ADDR_ENDP7 = @intToPtr(*volatile Mmio(32, packed struct { + /// Device address + ADDRESS: u7, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + /// Endpoint number of the interrupt endpoint + ENDPOINT: u4, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + /// Direction of the interrupt endpoint. In=0, Out=1 + INTEP_DIR: u1, + /// Interrupt EP requires preamble (is a low speed device on a full speed hub) + INTEP_PREAMBLE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x1c); + + /// address: 0x50110020 + /// Interrupt endpoint 8. Only valid for HOST mode. + pub const ADDR_ENDP8 = @intToPtr(*volatile Mmio(32, packed struct { + /// Device address + ADDRESS: u7, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + /// Endpoint number of the interrupt endpoint + ENDPOINT: u4, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + /// Direction of the interrupt endpoint. In=0, Out=1 + INTEP_DIR: u1, + /// Interrupt EP requires preamble (is a low speed device on a full speed hub) + INTEP_PREAMBLE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x20); + + /// address: 0x50110024 + /// Interrupt endpoint 9. Only valid for HOST mode. + pub const ADDR_ENDP9 = @intToPtr(*volatile Mmio(32, packed struct { + /// Device address + ADDRESS: u7, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + /// Endpoint number of the interrupt endpoint + ENDPOINT: u4, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + /// Direction of the interrupt endpoint. In=0, Out=1 + INTEP_DIR: u1, + /// Interrupt EP requires preamble (is a low speed device on a full speed hub) + INTEP_PREAMBLE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x24); + + /// address: 0x50110028 + /// Interrupt endpoint 10. Only valid for HOST mode. + pub const ADDR_ENDP10 = @intToPtr(*volatile Mmio(32, packed struct { + /// Device address + ADDRESS: u7, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + /// Endpoint number of the interrupt endpoint + ENDPOINT: u4, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + /// Direction of the interrupt endpoint. In=0, Out=1 + INTEP_DIR: u1, + /// Interrupt EP requires preamble (is a low speed device on a full speed hub) + INTEP_PREAMBLE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x28); + + /// address: 0x5011002c + /// Interrupt endpoint 11. Only valid for HOST mode. + pub const ADDR_ENDP11 = @intToPtr(*volatile Mmio(32, packed struct { + /// Device address + ADDRESS: u7, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + /// Endpoint number of the interrupt endpoint + ENDPOINT: u4, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + /// Direction of the interrupt endpoint. In=0, Out=1 + INTEP_DIR: u1, + /// Interrupt EP requires preamble (is a low speed device on a full speed hub) + INTEP_PREAMBLE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x2c); + + /// address: 0x50110030 + /// Interrupt endpoint 12. Only valid for HOST mode. + pub const ADDR_ENDP12 = @intToPtr(*volatile Mmio(32, packed struct { + /// Device address + ADDRESS: u7, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + /// Endpoint number of the interrupt endpoint + ENDPOINT: u4, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + /// Direction of the interrupt endpoint. In=0, Out=1 + INTEP_DIR: u1, + /// Interrupt EP requires preamble (is a low speed device on a full speed hub) + INTEP_PREAMBLE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x30); + + /// address: 0x50110034 + /// Interrupt endpoint 13. Only valid for HOST mode. + pub const ADDR_ENDP13 = @intToPtr(*volatile Mmio(32, packed struct { + /// Device address + ADDRESS: u7, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + /// Endpoint number of the interrupt endpoint + ENDPOINT: u4, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + /// Direction of the interrupt endpoint. In=0, Out=1 + INTEP_DIR: u1, + /// Interrupt EP requires preamble (is a low speed device on a full speed hub) + INTEP_PREAMBLE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x34); + + /// address: 0x50110038 + /// Interrupt endpoint 14. Only valid for HOST mode. + pub const ADDR_ENDP14 = @intToPtr(*volatile Mmio(32, packed struct { + /// Device address + ADDRESS: u7, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + /// Endpoint number of the interrupt endpoint + ENDPOINT: u4, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + /// Direction of the interrupt endpoint. In=0, Out=1 + INTEP_DIR: u1, + /// Interrupt EP requires preamble (is a low speed device on a full speed hub) + INTEP_PREAMBLE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x38); + + /// address: 0x5011003c + /// Interrupt endpoint 15. Only valid for HOST mode. + pub const ADDR_ENDP15 = @intToPtr(*volatile Mmio(32, packed struct { + /// Device address + ADDRESS: u7, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + /// Endpoint number of the interrupt endpoint + ENDPOINT: u4, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + /// Direction of the interrupt endpoint. In=0, Out=1 + INTEP_DIR: u1, + /// Interrupt EP requires preamble (is a low speed device on a full speed hub) + INTEP_PREAMBLE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + }), base_address + 0x3c); + + /// address: 0x50110040 + /// Main control register + pub const MAIN_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// Enable controller + CONTROLLER_EN: u1, + /// Device mode = 0, Host mode = 1 + HOST_NDEVICE: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + reserved18: u1 = 0, + reserved19: u1 = 0, + reserved20: u1 = 0, + reserved21: u1 = 0, + reserved22: u1 = 0, + reserved23: u1 = 0, + reserved24: u1 = 0, + reserved25: u1 = 0, + reserved26: u1 = 0, + reserved27: u1 = 0, + reserved28: u1 = 0, + /// Reduced timings for simulation + SIM_TIMING: u1, + }), base_address + 0x40); + + /// address: 0x50110044 + /// Set the SOF (Start of Frame) frame number in the host controller. The SOF packet + /// is sent every 1ms and the host will increment the frame number by 1 each time. + pub const SOF_WR = @intToPtr(*volatile Mmio(32, packed struct { + COUNT: u11, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + }), base_address + 0x44); + + /// address: 0x50110048 + /// Read the last SOF (Start of Frame) frame number seen. In device mode the last + /// SOF received from the host. In host mode the last SOF sent by the host. + pub const SOF_RD = @intToPtr(*volatile Mmio(32, packed struct { + COUNT: u11, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + }), base_address + 0x48); + + /// address: 0x5011004c + /// SIE control register + pub const SIE_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// Host: Start transaction + START_TRANS: u1, + /// Host: Send Setup packet + SEND_SETUP: u1, + /// Host: Send transaction (OUT from host) + SEND_DATA: u1, + /// Host: Receive transaction (IN to host) + RECEIVE_DATA: u1, + /// Host: Stop transaction + STOP_TRANS: u1, + reserved0: u1 = 0, + /// Host: Preable enable for LS device on FS hub + PREAMBLE_EN: u1, + reserved1: u1 = 0, + /// Host: Delay packet(s) until after SOF + SOF_SYNC: u1, + /// Host: Enable SOF generation (for full speed bus) + SOF_EN: u1, + /// Host: Enable keep alive packet (for low speed bus) + KEEP_ALIVE_EN: u1, + /// Host: Enable VBUS + VBUS_EN: u1, + /// Device: Remote wakeup. Device can initiate its own resume after suspend. + RESUME: u1, + /// Host: Reset bus + RESET_BUS: u1, + reserved2: u1 = 0, + /// Host: Enable pull down resistors + PULLDOWN_EN: u1, + /// Device: Enable pull up resistor + PULLUP_EN: u1, + /// Device: Pull-up strength (0=1K2, 1=2k3) + RPU_OPT: u1, + /// Power down bus transceiver + TRANSCEIVER_PD: u1, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// Direct control of DM + DIRECT_DM: u1, + /// Direct control of DP + DIRECT_DP: u1, + /// Direct bus drive enable + DIRECT_EN: u1, + /// Device: Set bit in EP_STATUS_STALL_NAK when EP0 sends a NAK + EP0_INT_NAK: u1, + /// Device: Set bit in BUFF_STATUS for every 2 buffers completed on EP0 + EP0_INT_2BUF: u1, + /// Device: Set bit in BUFF_STATUS for every buffer completed on EP0 + EP0_INT_1BUF: u1, + /// Device: EP0 single buffered = 0, double buffered = 1 + EP0_DOUBLE_BUF: u1, + /// Device: Set bit in EP_STATUS_STALL_NAK when EP0 sends a STALL + EP0_INT_STALL: u1, + }), base_address + 0x4c); + + /// address: 0x50110050 + /// SIE status register + pub const SIE_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + /// Device: VBUS Detected + VBUS_DETECTED: u1, + reserved0: u1 = 0, + /// USB bus line state + LINE_STATE: u2, + /// Bus in suspended state. Valid for device and host. Host and device will go into + /// suspend if neither Keep Alive / SOF frames are enabled. + SUSPENDED: u1, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + /// Host: device speed. Disconnected = 00, LS = 01, FS = 10 + SPEED: u2, + /// VBUS over current detected + VBUS_OVER_CURR: u1, + /// Host: Device has initiated a remote resume. Device: host has initiated a resume. + RESUME: u1, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// Device: connected + CONNECTED: u1, + /// Device: Setup packet received + SETUP_REC: u1, + /// Transaction complete.\n\n + /// Raised by device if:\n\n + /// * An IN or OUT packet is sent with the `LAST_BUFF` bit set in the buffer control + /// register\n\n + /// Raised by host if:\n\n + /// * A setup packet is sent when no data in or data out transaction follows * An IN + /// packet is received and the `LAST_BUFF` bit is set in the buffer control register + /// * An IN packet is received with zero length * An OUT packet is sent and the + /// `LAST_BUFF` bit is set + TRANS_COMPLETE: u1, + /// Device: bus reset received + BUS_RESET: u1, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + /// CRC Error. Raised by the Serial RX engine. + CRC_ERROR: u1, + /// Bit Stuff Error. Raised by the Serial RX engine. + BIT_STUFF_ERROR: u1, + /// RX overflow is raised by the Serial RX engine if the incoming data is too fast. + RX_OVERFLOW: u1, + /// RX timeout is raised by both the host and device if an ACK is not received in + /// the maximum time specified by the USB spec. + RX_TIMEOUT: u1, + /// Host: NAK received + NAK_REC: u1, + /// Host: STALL received + STALL_REC: u1, + /// ACK received. Raised by both host and device. + ACK_REC: u1, + /// Data Sequence Error.\n\n + /// The device can raise a sequence error in the following conditions:\n\n + /// * A SETUP packet is received followed by a DATA1 packet (data phase should + /// always be DATA0) * An OUT packet is received from the host but doesn't match the + /// data pid in the buffer control register read from DPSRAM\n\n + /// The host can raise a data sequence error in the following conditions:\n\n + /// * An IN packet from the device has the wrong data PID + DATA_SEQ_ERROR: u1, + }), base_address + 0x50); + + /// address: 0x50110054 + /// interrupt endpoint control register + pub const INT_EP_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + /// Host: Enable interrupt endpoint 1 -> 15 + INT_EP_ACTIVE: u15, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + }), base_address + 0x54); + + /// address: 0x50110058 + /// Buffer status register. A bit set here indicates that a buffer has completed on + /// the endpoint (if the buffer interrupt is enabled). It is possible for 2 buffers + /// to be completed, so clearing the buffer status bit may instantly re set it on + /// the next clock cycle. + pub const BUFF_STATUS = @intToPtr(*volatile Mmio(32, packed struct { + EP0_IN: u1, + EP0_OUT: u1, + EP1_IN: u1, + EP1_OUT: u1, + EP2_IN: u1, + EP2_OUT: u1, + EP3_IN: u1, + EP3_OUT: u1, + EP4_IN: u1, + EP4_OUT: u1, + EP5_IN: u1, + EP5_OUT: u1, + EP6_IN: u1, + EP6_OUT: u1, + EP7_IN: u1, + EP7_OUT: u1, + EP8_IN: u1, + EP8_OUT: u1, + EP9_IN: u1, + EP9_OUT: u1, + EP10_IN: u1, + EP10_OUT: u1, + EP11_IN: u1, + EP11_OUT: u1, + EP12_IN: u1, + EP12_OUT: u1, + EP13_IN: u1, + EP13_OUT: u1, + EP14_IN: u1, + EP14_OUT: u1, + EP15_IN: u1, + EP15_OUT: u1, + }), base_address + 0x58); + + /// address: 0x5011005c + /// Which of the double buffers should be handled. Only valid if using an interrupt + /// per buffer (i.e. not per 2 buffers). Not valid for host interrupt endpoint + /// polling because they are only single buffered. + pub const BUFF_CPU_SHOULD_HANDLE = @intToPtr(*volatile Mmio(32, packed struct { + EP0_IN: u1, + EP0_OUT: u1, + EP1_IN: u1, + EP1_OUT: u1, + EP2_IN: u1, + EP2_OUT: u1, + EP3_IN: u1, + EP3_OUT: u1, + EP4_IN: u1, + EP4_OUT: u1, + EP5_IN: u1, + EP5_OUT: u1, + EP6_IN: u1, + EP6_OUT: u1, + EP7_IN: u1, + EP7_OUT: u1, + EP8_IN: u1, + EP8_OUT: u1, + EP9_IN: u1, + EP9_OUT: u1, + EP10_IN: u1, + EP10_OUT: u1, + EP11_IN: u1, + EP11_OUT: u1, + EP12_IN: u1, + EP12_OUT: u1, + EP13_IN: u1, + EP13_OUT: u1, + EP14_IN: u1, + EP14_OUT: u1, + EP15_IN: u1, + EP15_OUT: u1, + }), base_address + 0x5c); + + /// address: 0x50110060 + /// Device only: Can be set to ignore the buffer control register for this endpoint + /// in case you would like to revoke a buffer. A NAK will be sent for every access + /// to the endpoint until this bit is cleared. A corresponding bit in + /// `EP_ABORT_DONE` is set when it is safe to modify the buffer control register. + pub const EP_ABORT = @intToPtr(*volatile Mmio(32, packed struct { + EP0_IN: u1, + EP0_OUT: u1, + EP1_IN: u1, + EP1_OUT: u1, + EP2_IN: u1, + EP2_OUT: u1, + EP3_IN: u1, + EP3_OUT: u1, + EP4_IN: u1, + EP4_OUT: u1, + EP5_IN: u1, + EP5_OUT: u1, + EP6_IN: u1, + EP6_OUT: u1, + EP7_IN: u1, + EP7_OUT: u1, + EP8_IN: u1, + EP8_OUT: u1, + EP9_IN: u1, + EP9_OUT: u1, + EP10_IN: u1, + EP10_OUT: u1, + EP11_IN: u1, + EP11_OUT: u1, + EP12_IN: u1, + EP12_OUT: u1, + EP13_IN: u1, + EP13_OUT: u1, + EP14_IN: u1, + EP14_OUT: u1, + EP15_IN: u1, + EP15_OUT: u1, + }), base_address + 0x60); + + /// address: 0x50110064 + /// Device only: Used in conjunction with `EP_ABORT`. Set once an endpoint is idle + /// so the programmer knows it is safe to modify the buffer control register. + pub const EP_ABORT_DONE = @intToPtr(*volatile Mmio(32, packed struct { + EP0_IN: u1, + EP0_OUT: u1, + EP1_IN: u1, + EP1_OUT: u1, + EP2_IN: u1, + EP2_OUT: u1, + EP3_IN: u1, + EP3_OUT: u1, + EP4_IN: u1, + EP4_OUT: u1, + EP5_IN: u1, + EP5_OUT: u1, + EP6_IN: u1, + EP6_OUT: u1, + EP7_IN: u1, + EP7_OUT: u1, + EP8_IN: u1, + EP8_OUT: u1, + EP9_IN: u1, + EP9_OUT: u1, + EP10_IN: u1, + EP10_OUT: u1, + EP11_IN: u1, + EP11_OUT: u1, + EP12_IN: u1, + EP12_OUT: u1, + EP13_IN: u1, + EP13_OUT: u1, + EP14_IN: u1, + EP14_OUT: u1, + EP15_IN: u1, + EP15_OUT: u1, + }), base_address + 0x64); + + /// address: 0x50110068 + /// Device: this bit must be set in conjunction with the `STALL` bit in the buffer + /// control register to send a STALL on EP0. The device controller clears these bits + /// when a SETUP packet is received because the USB spec requires that a STALL + /// condition is cleared when a SETUP packet is received. + pub const EP_STALL_ARM = @intToPtr(*volatile Mmio(32, packed struct { + EP0_IN: u1, + EP0_OUT: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + }), base_address + 0x68); + + /// address: 0x5011006c + /// Used by the host controller. Sets the wait time in microseconds before trying + /// again if the device replies with a NAK. + pub const NAK_POLL = @intToPtr(*volatile Mmio(32, packed struct { + /// NAK polling interval for a low speed device + DELAY_LS: u10, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + /// NAK polling interval for a full speed device + DELAY_FS: u10, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + }), base_address + 0x6c); + + /// address: 0x50110070 + /// Device: bits are set when the `IRQ_ON_NAK` or `IRQ_ON_STALL` bits are set. For + /// EP0 this comes from `SIE_CTRL`. For all other endpoints it comes from the + /// endpoint control register. + pub const EP_STATUS_STALL_NAK = @intToPtr(*volatile Mmio(32, packed struct { + EP0_IN: u1, + EP0_OUT: u1, + EP1_IN: u1, + EP1_OUT: u1, + EP2_IN: u1, + EP2_OUT: u1, + EP3_IN: u1, + EP3_OUT: u1, + EP4_IN: u1, + EP4_OUT: u1, + EP5_IN: u1, + EP5_OUT: u1, + EP6_IN: u1, + EP6_OUT: u1, + EP7_IN: u1, + EP7_OUT: u1, + EP8_IN: u1, + EP8_OUT: u1, + EP9_IN: u1, + EP9_OUT: u1, + EP10_IN: u1, + EP10_OUT: u1, + EP11_IN: u1, + EP11_OUT: u1, + EP12_IN: u1, + EP12_OUT: u1, + EP13_IN: u1, + EP13_OUT: u1, + EP14_IN: u1, + EP14_OUT: u1, + EP15_IN: u1, + EP15_OUT: u1, + }), base_address + 0x70); + + /// address: 0x50110074 + /// Where to connect the USB controller. Should be to_phy by default. + pub const USB_MUXING = @intToPtr(*volatile Mmio(32, packed struct { + TO_PHY: u1, + TO_EXTPHY: u1, + TO_DIGITAL_PAD: u1, + SOFTCON: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + }), base_address + 0x74); + + /// address: 0x50110078 + /// Overrides for the power signals in the event that the VBUS signals are not + /// hooked up to GPIO. Set the value of the override and then the override enable to + /// switch over to the override value. + pub const USB_PWR = @intToPtr(*volatile Mmio(32, packed struct { + VBUS_EN: u1, + VBUS_EN_OVERRIDE_EN: u1, + VBUS_DETECT: u1, + VBUS_DETECT_OVERRIDE_EN: u1, + OVERCURR_DETECT: u1, + OVERCURR_DETECT_EN: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + }), base_address + 0x78); + + /// address: 0x5011007c + /// This register allows for direct control of the USB phy. Use in conjunction with + /// usbphy_direct_override register to enable each override bit. + pub const USBPHY_DIRECT = @intToPtr(*volatile Mmio(32, packed struct { + /// Enable the second DP pull up resistor. 0 - Pull = Rpu2; 1 - Pull = Rpu1 + Rpu2 + DP_PULLUP_HISEL: u1, + /// DP pull up enable + DP_PULLUP_EN: u1, + /// DP pull down enable + DP_PULLDN_EN: u1, + reserved0: u1 = 0, + /// Enable the second DM pull up resistor. 0 - Pull = Rpu2; 1 - Pull = Rpu1 + Rpu2 + DM_PULLUP_HISEL: u1, + /// DM pull up enable + DM_PULLUP_EN: u1, + /// DM pull down enable + DM_PULLDN_EN: u1, + reserved1: u1 = 0, + /// Output enable. If TX_DIFFMODE=1, OE for DPP/DPM diff pair. 0 - DPP/DPM in Hi-Z + /// state; 1 - DPP/DPM driving\n + /// If TX_DIFFMODE=0, OE for DPP only. 0 - DPP in Hi-Z state; 1 - DPP driving + TX_DP_OE: u1, + /// Output enable. If TX_DIFFMODE=1, Ignored.\n + /// If TX_DIFFMODE=0, OE for DPM only. 0 - DPM in Hi-Z state; 1 - DPM driving + TX_DM_OE: u1, + /// Output data. If TX_DIFFMODE=1, Drives DPP/DPM diff pair. TX_DP_OE=1 to enable + /// drive. DPP=TX_DP, DPM=~TX_DP\n + /// If TX_DIFFMODE=0, Drives DPP only. TX_DP_OE=1 to enable drive. DPP=TX_DP + TX_DP: u1, + /// Output data. TX_DIFFMODE=1, Ignored\n + /// TX_DIFFMODE=0, Drives DPM only. TX_DM_OE=1 to enable drive. DPM=TX_DM + TX_DM: u1, + /// RX power down override (if override enable is set). 1 = powered down. + RX_PD: u1, + /// TX power down override (if override enable is set). 1 = powered down. + TX_PD: u1, + /// TX_FSSLEW=0: Low speed slew rate\n + /// TX_FSSLEW=1: Full speed slew rate + TX_FSSLEW: u1, + /// TX_DIFFMODE=0: Single ended mode\n + /// TX_DIFFMODE=1: Differential drive mode (TX_DM, TX_DM_OE ignored) + TX_DIFFMODE: u1, + /// Differential RX + RX_DD: u1, + /// DPP pin state + RX_DP: u1, + /// DPM pin state + RX_DM: u1, + /// DP overcurrent + DP_OVCN: u1, + /// DM overcurrent + DM_OVCN: u1, + /// DP over voltage + DP_OVV: u1, + /// DM over voltage + DM_OVV: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + }), base_address + 0x7c); + + /// address: 0x50110080 + /// Override enable for each control in usbphy_direct + pub const USBPHY_DIRECT_OVERRIDE = @intToPtr(*volatile Mmio(32, packed struct { + DP_PULLUP_HISEL_OVERRIDE_EN: u1, + DM_PULLUP_HISEL_OVERRIDE_EN: u1, + DP_PULLUP_EN_OVERRIDE_EN: u1, + DP_PULLDN_EN_OVERRIDE_EN: u1, + DM_PULLDN_EN_OVERRIDE_EN: u1, + TX_DP_OE_OVERRIDE_EN: u1, + TX_DM_OE_OVERRIDE_EN: u1, + TX_DP_OVERRIDE_EN: u1, + TX_DM_OVERRIDE_EN: u1, + RX_PD_OVERRIDE_EN: u1, + TX_PD_OVERRIDE_EN: u1, + TX_FSSLEW_OVERRIDE_EN: u1, + DM_PULLUP_OVERRIDE_EN: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + TX_DIFFMODE_OVERRIDE_EN: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + }), base_address + 0x80); + + /// address: 0x50110084 + /// Used to adjust trim values of USB phy pull down resistors. + pub const USBPHY_TRIM = @intToPtr(*volatile Mmio(32, packed struct { + /// Value to drive to USB PHY\n + /// DP pulldown resistor trim control\n + /// Experimental data suggests that the reset value will work, but this register + /// allows adjustment if required + DP_PULLDN_TRIM: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + /// Value to drive to USB PHY\n + /// DM pulldown resistor trim control\n + /// Experimental data suggests that the reset value will work, but this register + /// allows adjustment if required + DM_PULLDN_TRIM: u5, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + }), base_address + 0x84); + + /// address: 0x5011008c + /// Raw Interrupts + pub const INTR = @intToPtr(*volatile Mmio(32, packed struct { + /// Host: raised when a device is connected or disconnected (i.e. when + /// SIE_STATUS.SPEED changes). Cleared by writing to SIE_STATUS.SPEED + HOST_CONN_DIS: u1, + /// Host: raised when a device wakes up the host. Cleared by writing to + /// SIE_STATUS.RESUME + HOST_RESUME: u1, + /// Host: raised every time the host sends a SOF (Start of Frame). Cleared by + /// reading SOF_RD + HOST_SOF: u1, + /// Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by writing to this + /// bit. + TRANS_COMPLETE: u1, + /// Raised when any bit in BUFF_STATUS is set. Clear by clearing all bits in + /// BUFF_STATUS. + BUFF_STATUS: u1, + /// Source: SIE_STATUS.DATA_SEQ_ERROR + ERROR_DATA_SEQ: u1, + /// Source: SIE_STATUS.RX_TIMEOUT + ERROR_RX_TIMEOUT: u1, + /// Source: SIE_STATUS.RX_OVERFLOW + ERROR_RX_OVERFLOW: u1, + /// Source: SIE_STATUS.BIT_STUFF_ERROR + ERROR_BIT_STUFF: u1, + /// Source: SIE_STATUS.CRC_ERROR + ERROR_CRC: u1, + /// Source: SIE_STATUS.STALL_REC + STALL: u1, + /// Source: SIE_STATUS.VBUS_DETECTED + VBUS_DETECT: u1, + /// Source: SIE_STATUS.BUS_RESET + BUS_RESET: u1, + /// Set when the device connection state changes. Cleared by writing to + /// SIE_STATUS.CONNECTED + DEV_CONN_DIS: u1, + /// Set when the device suspend state changes. Cleared by writing to + /// SIE_STATUS.SUSPENDED + DEV_SUSPEND: u1, + /// Set when the device receives a resume from the host. Cleared by writing to + /// SIE_STATUS.RESUME + DEV_RESUME_FROM_HOST: u1, + /// Device. Source: SIE_STATUS.SETUP_REC + SETUP_REQ: u1, + /// Set every time the device receives a SOF (Start of Frame) packet. Cleared by + /// reading SOF_RD + DEV_SOF: u1, + /// Raised when any bit in ABORT_DONE is set. Clear by clearing all bits in + /// ABORT_DONE. + ABORT_DONE: u1, + /// Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by clearing all bits in + /// EP_STATUS_STALL_NAK. + EP_STALL_NAK: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + }), base_address + 0x8c); + + /// address: 0x50110090 + /// Interrupt Enable + pub const INTE = @intToPtr(*volatile Mmio(32, packed struct { + /// Host: raised when a device is connected or disconnected (i.e. when + /// SIE_STATUS.SPEED changes). Cleared by writing to SIE_STATUS.SPEED + HOST_CONN_DIS: u1, + /// Host: raised when a device wakes up the host. Cleared by writing to + /// SIE_STATUS.RESUME + HOST_RESUME: u1, + /// Host: raised every time the host sends a SOF (Start of Frame). Cleared by + /// reading SOF_RD + HOST_SOF: u1, + /// Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by writing to this + /// bit. + TRANS_COMPLETE: u1, + /// Raised when any bit in BUFF_STATUS is set. Clear by clearing all bits in + /// BUFF_STATUS. + BUFF_STATUS: u1, + /// Source: SIE_STATUS.DATA_SEQ_ERROR + ERROR_DATA_SEQ: u1, + /// Source: SIE_STATUS.RX_TIMEOUT + ERROR_RX_TIMEOUT: u1, + /// Source: SIE_STATUS.RX_OVERFLOW + ERROR_RX_OVERFLOW: u1, + /// Source: SIE_STATUS.BIT_STUFF_ERROR + ERROR_BIT_STUFF: u1, + /// Source: SIE_STATUS.CRC_ERROR + ERROR_CRC: u1, + /// Source: SIE_STATUS.STALL_REC + STALL: u1, + /// Source: SIE_STATUS.VBUS_DETECTED + VBUS_DETECT: u1, + /// Source: SIE_STATUS.BUS_RESET + BUS_RESET: u1, + /// Set when the device connection state changes. Cleared by writing to + /// SIE_STATUS.CONNECTED + DEV_CONN_DIS: u1, + /// Set when the device suspend state changes. Cleared by writing to + /// SIE_STATUS.SUSPENDED + DEV_SUSPEND: u1, + /// Set when the device receives a resume from the host. Cleared by writing to + /// SIE_STATUS.RESUME + DEV_RESUME_FROM_HOST: u1, + /// Device. Source: SIE_STATUS.SETUP_REC + SETUP_REQ: u1, + /// Set every time the device receives a SOF (Start of Frame) packet. Cleared by + /// reading SOF_RD + DEV_SOF: u1, + /// Raised when any bit in ABORT_DONE is set. Clear by clearing all bits in + /// ABORT_DONE. + ABORT_DONE: u1, + /// Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by clearing all bits in + /// EP_STATUS_STALL_NAK. + EP_STALL_NAK: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + }), base_address + 0x90); + + /// address: 0x50110094 + /// Interrupt Force + pub const INTF = @intToPtr(*volatile Mmio(32, packed struct { + /// Host: raised when a device is connected or disconnected (i.e. when + /// SIE_STATUS.SPEED changes). Cleared by writing to SIE_STATUS.SPEED + HOST_CONN_DIS: u1, + /// Host: raised when a device wakes up the host. Cleared by writing to + /// SIE_STATUS.RESUME + HOST_RESUME: u1, + /// Host: raised every time the host sends a SOF (Start of Frame). Cleared by + /// reading SOF_RD + HOST_SOF: u1, + /// Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by writing to this + /// bit. + TRANS_COMPLETE: u1, + /// Raised when any bit in BUFF_STATUS is set. Clear by clearing all bits in + /// BUFF_STATUS. + BUFF_STATUS: u1, + /// Source: SIE_STATUS.DATA_SEQ_ERROR + ERROR_DATA_SEQ: u1, + /// Source: SIE_STATUS.RX_TIMEOUT + ERROR_RX_TIMEOUT: u1, + /// Source: SIE_STATUS.RX_OVERFLOW + ERROR_RX_OVERFLOW: u1, + /// Source: SIE_STATUS.BIT_STUFF_ERROR + ERROR_BIT_STUFF: u1, + /// Source: SIE_STATUS.CRC_ERROR + ERROR_CRC: u1, + /// Source: SIE_STATUS.STALL_REC + STALL: u1, + /// Source: SIE_STATUS.VBUS_DETECTED + VBUS_DETECT: u1, + /// Source: SIE_STATUS.BUS_RESET + BUS_RESET: u1, + /// Set when the device connection state changes. Cleared by writing to + /// SIE_STATUS.CONNECTED + DEV_CONN_DIS: u1, + /// Set when the device suspend state changes. Cleared by writing to + /// SIE_STATUS.SUSPENDED + DEV_SUSPEND: u1, + /// Set when the device receives a resume from the host. Cleared by writing to + /// SIE_STATUS.RESUME + DEV_RESUME_FROM_HOST: u1, + /// Device. Source: SIE_STATUS.SETUP_REC + SETUP_REQ: u1, + /// Set every time the device receives a SOF (Start of Frame) packet. Cleared by + /// reading SOF_RD + DEV_SOF: u1, + /// Raised when any bit in ABORT_DONE is set. Clear by clearing all bits in + /// ABORT_DONE. + ABORT_DONE: u1, + /// Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by clearing all bits in + /// EP_STATUS_STALL_NAK. + EP_STALL_NAK: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + }), base_address + 0x94); + + /// address: 0x50110098 + /// Interrupt status after masking & forcing + pub const INTS = @intToPtr(*volatile Mmio(32, packed struct { + /// Host: raised when a device is connected or disconnected (i.e. when + /// SIE_STATUS.SPEED changes). Cleared by writing to SIE_STATUS.SPEED + HOST_CONN_DIS: u1, + /// Host: raised when a device wakes up the host. Cleared by writing to + /// SIE_STATUS.RESUME + HOST_RESUME: u1, + /// Host: raised every time the host sends a SOF (Start of Frame). Cleared by + /// reading SOF_RD + HOST_SOF: u1, + /// Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by writing to this + /// bit. + TRANS_COMPLETE: u1, + /// Raised when any bit in BUFF_STATUS is set. Clear by clearing all bits in + /// BUFF_STATUS. + BUFF_STATUS: u1, + /// Source: SIE_STATUS.DATA_SEQ_ERROR + ERROR_DATA_SEQ: u1, + /// Source: SIE_STATUS.RX_TIMEOUT + ERROR_RX_TIMEOUT: u1, + /// Source: SIE_STATUS.RX_OVERFLOW + ERROR_RX_OVERFLOW: u1, + /// Source: SIE_STATUS.BIT_STUFF_ERROR + ERROR_BIT_STUFF: u1, + /// Source: SIE_STATUS.CRC_ERROR + ERROR_CRC: u1, + /// Source: SIE_STATUS.STALL_REC + STALL: u1, + /// Source: SIE_STATUS.VBUS_DETECTED + VBUS_DETECT: u1, + /// Source: SIE_STATUS.BUS_RESET + BUS_RESET: u1, + /// Set when the device connection state changes. Cleared by writing to + /// SIE_STATUS.CONNECTED + DEV_CONN_DIS: u1, + /// Set when the device suspend state changes. Cleared by writing to + /// SIE_STATUS.SUSPENDED + DEV_SUSPEND: u1, + /// Set when the device receives a resume from the host. Cleared by writing to + /// SIE_STATUS.RESUME + DEV_RESUME_FROM_HOST: u1, + /// Device. Source: SIE_STATUS.SETUP_REC + SETUP_REQ: u1, + /// Set every time the device receives a SOF (Start of Frame) packet. Cleared by + /// reading SOF_RD + DEV_SOF: u1, + /// Raised when any bit in ABORT_DONE is set. Clear by clearing all bits in + /// ABORT_DONE. + ABORT_DONE: u1, + /// Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by clearing all bits in + /// EP_STATUS_STALL_NAK. + EP_STALL_NAK: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + }), base_address + 0x98); + }; + + /// Programmable IO block + pub const PIO0 = struct { + pub const base_address = 0x50200000; + pub const version = "1"; + + /// address: 0x50200000 + /// PIO control register + pub const CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// Enable/disable each of the four state machines by writing 1/0 to each of these + /// four bits. When disabled, a state machine will cease executing instructions, + /// except those written directly to SMx_INSTR by the system. Multiple bits can be + /// set/cleared at once to run/halt multiple state machines simultaneously. + SM_ENABLE: u4, + /// Write 1 to instantly clear internal SM state which may be otherwise difficult to + /// access and will affect future execution.\n\n + /// Specifically, the following are cleared: input and output shift counters; the + /// contents of the input shift register; the delay counter; the waiting-on-IRQ + /// state; any stalled instruction written to SMx_INSTR or run by OUT/MOV EXEC; any + /// pin write left asserted due to OUT_STICKY. + SM_RESTART: u4, + /// Restart a state machine's clock divider from an initial phase of 0. Clock + /// dividers are free-running, so once started, their output (including fractional + /// jitter) is completely determined by the integer/fractional divisor configured in + /// SMx_CLKDIV. This means that, if multiple clock dividers with the same divisor + /// are restarted simultaneously, by writing multiple 1 bits to this field, the + /// execution clocks of those state machines will run in precise lockstep.\n\n + /// Note that setting/clearing SM_ENABLE does not stop the clock divider from + /// running, so once multiple state machines' clocks are synchronised, it is safe to + /// disable/reenable a state machine, whilst keeping the clock dividers in sync.\n\n + /// Note also that CLKDIV_RESTART can be written to whilst the state machine is + /// running, and this is useful to resynchronise clock dividers after the divisors + /// (SMx_CLKDIV) have been changed on-the-fly. + CLKDIV_RESTART: u4, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x0); + + /// address: 0x50200004 + /// FIFO status register + pub const FSTAT = @intToPtr(*volatile Mmio(32, packed struct { + /// State machine RX FIFO is full + RXFULL: u4, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + /// State machine RX FIFO is empty + RXEMPTY: u4, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// State machine TX FIFO is full + TXFULL: u4, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + /// State machine TX FIFO is empty + TXEMPTY: u4, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + }), base_address + 0x4); + + /// address: 0x50200008 + /// FIFO debug register + pub const FDEBUG = @intToPtr(*volatile Mmio(32, packed struct { + /// State machine has stalled on full RX FIFO during a blocking PUSH, or an IN with + /// autopush enabled. This flag is also set when a nonblocking PUSH to a full FIFO + /// took place, in which case the state machine has dropped data. Write 1 to clear. + RXSTALL: u4, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + /// RX FIFO underflow (i.e. read-on-empty by the system) has occurred. Write 1 to + /// clear. Note that read-on-empty does not perturb the state of the FIFO in any + /// way, but the data returned by reading from an empty FIFO is undefined, so this + /// flag generally only becomes set due to some kind of software error. + RXUNDER: u4, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// TX FIFO overflow (i.e. write-on-full by the system) has occurred. Write 1 to + /// clear. Note that write-on-full does not alter the state or contents of the FIFO + /// in any way, but the data that the system attempted to write is dropped, so if + /// this flag is set, your software has quite likely dropped some data on the floor. + TXOVER: u4, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + /// State machine has stalled on empty TX FIFO during a blocking PULL, or an OUT + /// with autopull enabled. Write 1 to clear. + TXSTALL: u4, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + }), base_address + 0x8); + + /// address: 0x5020000c + /// FIFO levels + pub const FLEVEL = @intToPtr(*volatile Mmio(32, packed struct { + TX0: u4, + RX0: u4, + TX1: u4, + RX1: u4, + TX2: u4, + RX2: u4, + TX3: u4, + RX3: u4, + }), base_address + 0xc); + + /// address: 0x50200010 + /// Direct write access to the TX FIFO for this state machine. Each write pushes one + /// word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO + /// state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO. + pub const TXF0 = @intToPtr(*volatile u32, base_address + 0x10); + + /// address: 0x50200014 + /// Direct write access to the TX FIFO for this state machine. Each write pushes one + /// word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO + /// state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO. + pub const TXF1 = @intToPtr(*volatile u32, base_address + 0x14); + + /// address: 0x50200018 + /// Direct write access to the TX FIFO for this state machine. Each write pushes one + /// word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO + /// state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO. + pub const TXF2 = @intToPtr(*volatile u32, base_address + 0x18); + + /// address: 0x5020001c + /// Direct write access to the TX FIFO for this state machine. Each write pushes one + /// word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO + /// state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO. + pub const TXF3 = @intToPtr(*volatile u32, base_address + 0x1c); + + /// address: 0x50200020 + /// Direct read access to the RX FIFO for this state machine. Each read pops one + /// word from the FIFO. Attempting to read from an empty FIFO has no effect on the + /// FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The + /// data returned to the system on a read from an empty FIFO is undefined. + pub const RXF0 = @intToPtr(*volatile u32, base_address + 0x20); + + /// address: 0x50200024 + /// Direct read access to the RX FIFO for this state machine. Each read pops one + /// word from the FIFO. Attempting to read from an empty FIFO has no effect on the + /// FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The + /// data returned to the system on a read from an empty FIFO is undefined. + pub const RXF1 = @intToPtr(*volatile u32, base_address + 0x24); + + /// address: 0x50200028 + /// Direct read access to the RX FIFO for this state machine. Each read pops one + /// word from the FIFO. Attempting to read from an empty FIFO has no effect on the + /// FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The + /// data returned to the system on a read from an empty FIFO is undefined. + pub const RXF2 = @intToPtr(*volatile u32, base_address + 0x28); + + /// address: 0x5020002c + /// Direct read access to the RX FIFO for this state machine. Each read pops one + /// word from the FIFO. Attempting to read from an empty FIFO has no effect on the + /// FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The + /// data returned to the system on a read from an empty FIFO is undefined. + pub const RXF3 = @intToPtr(*volatile u32, base_address + 0x2c); + + /// address: 0x50200030 + /// State machine IRQ flags register. Write 1 to clear. There are 8 state machine + /// IRQ flags, which can be set, cleared, and waited on by the state machines. + /// There's no fixed association between flags and state machines -- any state + /// machine can use any flag.\n\n + /// Any of the 8 flags can be used for timing synchronisation between state + /// machines, using IRQ and WAIT instructions. The lower four of these flags are + /// also routed out to system-level interrupt requests, alongside FIFO status + /// interrupts -- see e.g. IRQ0_INTE. + pub const IRQ = @intToPtr(*volatile MmioInt(32, u8), base_address + 0x30); + + /// address: 0x50200034 + /// Writing a 1 to each of these bits will forcibly assert the corresponding IRQ. + /// Note this is different to the INTF register: writing here affects PIO internal + /// state. INTF just asserts the processor-facing IRQ signal for testing ISRs, and + /// is not visible to the state machines. + pub const IRQ_FORCE = @intToPtr(*volatile MmioInt(32, u8), base_address + 0x34); + + /// address: 0x50200038 + /// There is a 2-flipflop synchronizer on each GPIO input, which protects PIO logic + /// from metastabilities. This increases input delay, and for fast synchronous IO + /// (e.g. SPI) these synchronizers may need to be bypassed. Each bit in this + /// register corresponds to one GPIO.\n + /// 0 -> input is synchronized (default)\n + /// 1 -> synchronizer is bypassed\n + /// If in doubt, leave this register as all zeroes. + pub const INPUT_SYNC_BYPASS = @intToPtr(*volatile u32, base_address + 0x38); + + /// address: 0x5020003c + /// Read to sample the pad output values PIO is currently driving to the GPIOs. On + /// RP2040 there are 30 GPIOs, so the two most significant bits are hardwired to 0. + pub const DBG_PADOUT = @intToPtr(*volatile u32, base_address + 0x3c); + + /// address: 0x50200040 + /// Read to sample the pad output enables (direction) PIO is currently driving to + /// the GPIOs. On RP2040 there are 30 GPIOs, so the two most significant bits are + /// hardwired to 0. + pub const DBG_PADOE = @intToPtr(*volatile u32, base_address + 0x40); + + /// address: 0x50200044 + /// The PIO hardware has some free parameters that may vary between chip products.\n + /// These should be provided in the chip datasheet, but are also exposed here. + pub const DBG_CFGINFO = @intToPtr(*volatile Mmio(32, packed struct { + /// The depth of the state machine TX/RX FIFOs, measured in words.\n + /// Joining fifos via SHIFTCTRL_FJOIN gives one FIFO with double\n + /// this depth. + FIFO_DEPTH: u6, + reserved0: u1 = 0, + reserved1: u1 = 0, + /// The number of state machines this PIO instance is equipped with. + SM_COUNT: u4, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + /// The size of the instruction memory, measured in units of one instruction + IMEM_SIZE: u6, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + }), base_address + 0x44); + + /// address: 0x50200048 + /// Write-only access to instruction memory location 0 + pub const INSTR_MEM0 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x48); + + /// address: 0x5020004c + /// Write-only access to instruction memory location 1 + pub const INSTR_MEM1 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x4c); + + /// address: 0x50200050 + /// Write-only access to instruction memory location 2 + pub const INSTR_MEM2 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x50); + + /// address: 0x50200054 + /// Write-only access to instruction memory location 3 + pub const INSTR_MEM3 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x54); + + /// address: 0x50200058 + /// Write-only access to instruction memory location 4 + pub const INSTR_MEM4 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x58); + + /// address: 0x5020005c + /// Write-only access to instruction memory location 5 + pub const INSTR_MEM5 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x5c); + + /// address: 0x50200060 + /// Write-only access to instruction memory location 6 + pub const INSTR_MEM6 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x60); + + /// address: 0x50200064 + /// Write-only access to instruction memory location 7 + pub const INSTR_MEM7 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x64); + + /// address: 0x50200068 + /// Write-only access to instruction memory location 8 + pub const INSTR_MEM8 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x68); + + /// address: 0x5020006c + /// Write-only access to instruction memory location 9 + pub const INSTR_MEM9 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x6c); + + /// address: 0x50200070 + /// Write-only access to instruction memory location 10 + pub const INSTR_MEM10 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x70); + + /// address: 0x50200074 + /// Write-only access to instruction memory location 11 + pub const INSTR_MEM11 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x74); + + /// address: 0x50200078 + /// Write-only access to instruction memory location 12 + pub const INSTR_MEM12 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x78); + + /// address: 0x5020007c + /// Write-only access to instruction memory location 13 + pub const INSTR_MEM13 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x7c); + + /// address: 0x50200080 + /// Write-only access to instruction memory location 14 + pub const INSTR_MEM14 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x80); + + /// address: 0x50200084 + /// Write-only access to instruction memory location 15 + pub const INSTR_MEM15 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x84); + + /// address: 0x50200088 + /// Write-only access to instruction memory location 16 + pub const INSTR_MEM16 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x88); + + /// address: 0x5020008c + /// Write-only access to instruction memory location 17 + pub const INSTR_MEM17 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x8c); + + /// address: 0x50200090 + /// Write-only access to instruction memory location 18 + pub const INSTR_MEM18 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x90); + + /// address: 0x50200094 + /// Write-only access to instruction memory location 19 + pub const INSTR_MEM19 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x94); + + /// address: 0x50200098 + /// Write-only access to instruction memory location 20 + pub const INSTR_MEM20 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x98); + + /// address: 0x5020009c + /// Write-only access to instruction memory location 21 + pub const INSTR_MEM21 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x9c); + + /// address: 0x502000a0 + /// Write-only access to instruction memory location 22 + pub const INSTR_MEM22 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xa0); + + /// address: 0x502000a4 + /// Write-only access to instruction memory location 23 + pub const INSTR_MEM23 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xa4); + + /// address: 0x502000a8 + /// Write-only access to instruction memory location 24 + pub const INSTR_MEM24 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xa8); + + /// address: 0x502000ac + /// Write-only access to instruction memory location 25 + pub const INSTR_MEM25 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xac); + + /// address: 0x502000b0 + /// Write-only access to instruction memory location 26 + pub const INSTR_MEM26 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xb0); + + /// address: 0x502000b4 + /// Write-only access to instruction memory location 27 + pub const INSTR_MEM27 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xb4); + + /// address: 0x502000b8 + /// Write-only access to instruction memory location 28 + pub const INSTR_MEM28 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xb8); + + /// address: 0x502000bc + /// Write-only access to instruction memory location 29 + pub const INSTR_MEM29 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xbc); + + /// address: 0x502000c0 + /// Write-only access to instruction memory location 30 + pub const INSTR_MEM30 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xc0); + + /// address: 0x502000c4 + /// Write-only access to instruction memory location 31 + pub const INSTR_MEM31 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xc4); + + /// address: 0x502000c8 + /// Clock divisor register for state machine 0\n + /// Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256) + pub const SM0_CLKDIV = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// Fractional part of clock divisor + FRAC: u8, + /// Effective frequency is sysclk/(int + frac/256).\n + /// Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0. + INT: u16, + }), base_address + 0xc8); + + /// address: 0x502000cc + /// Execution/behavioural settings for state machine 0 + pub const SM0_EXECCTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// Comparison level for the MOV x, STATUS instruction + STATUS_N: u4, + /// Comparison used for the MOV x, STATUS instruction. + STATUS_SEL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + /// After reaching wrap_top, execution is wrapped to this address. + WRAP_BOTTOM: u5, + /// After reaching this address, execution is wrapped to wrap_bottom.\n + /// If the instruction is a jump, and the jump condition is true, the jump takes + /// priority. + WRAP_TOP: u5, + /// Continuously assert the most recent OUT/SET to the pins + OUT_STICKY: u1, + /// If 1, use a bit of OUT data as an auxiliary write enable\n + /// When used in conjunction with OUT_STICKY, writes with an enable of 0 will\n + /// deassert the latest pin write. This can create useful masking/override + /// behaviour\n + /// due to the priority ordering of state machine pin writes (SM0 < SM1 < ...) + INLINE_OUT_EN: u1, + /// Which data bit to use for inline OUT enable + OUT_EN_SEL: u5, + /// The GPIO number to use as condition for JMP PIN. Unaffected by input mapping. + JMP_PIN: u5, + /// If 1, side-set data is asserted to pin directions, instead of pin values + SIDE_PINDIR: u1, + /// If 1, the MSB of the Delay/Side-set instruction field is used as side-set + /// enable, rather than a side-set data bit. This allows instructions to perform + /// side-set optionally, rather than on every instruction, but the maximum possible + /// side-set width is reduced from 5 to 4. Note that the value of + /// PINCTRL_SIDESET_COUNT is inclusive of this enable bit. + SIDE_EN: u1, + /// If 1, an instruction written to SMx_INSTR is stalled, and latched by the state + /// machine. Will clear to 0 once this instruction completes. + EXEC_STALLED: u1, + }), base_address + 0xcc); + + /// address: 0x502000d0 + /// Control behaviour of the input/output shift registers for state machine 0 + pub const SM0_SHIFTCTRL = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + /// Push automatically when the input shift register is filled, i.e. on an IN + /// instruction which causes the input shift counter to reach or exceed PUSH_THRESH. + AUTOPUSH: u1, + /// Pull automatically when the output shift register is emptied, i.e. on or + /// following an OUT instruction which causes the output shift counter to reach or + /// exceed PULL_THRESH. + AUTOPULL: u1, + /// 1 = shift input shift register to right (data enters from left). 0 = to left. + IN_SHIFTDIR: u1, + /// 1 = shift out of output shift register to right. 0 = to left. + OUT_SHIFTDIR: u1, + /// Number of bits shifted into ISR before autopush, or conditional push (PUSH + /// IFFULL), will take place.\n + /// Write 0 for value of 32. + PUSH_THRESH: u5, + /// Number of bits shifted out of OSR before autopull, or conditional pull (PULL + /// IFEMPTY), will take place.\n + /// Write 0 for value of 32. + PULL_THRESH: u5, + /// When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.\n + /// RX FIFO is disabled as a result (always reads as both full and empty).\n + /// FIFOs are flushed when this bit is changed. + FJOIN_TX: u1, + /// When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.\n + /// TX FIFO is disabled as a result (always reads as both full and empty).\n + /// FIFOs are flushed when this bit is changed. + FJOIN_RX: u1, + }), base_address + 0xd0); + + /// address: 0x502000d4 + /// Current instruction address of state machine 0 + pub const SM0_ADDR = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xd4); + + /// address: 0x502000d8 + /// Read to see the instruction currently addressed by state machine 0's program + /// counter\n + /// Write to execute an instruction immediately (including jumps) and then resume + /// execution. + pub const SM0_INSTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xd8); + + /// address: 0x502000dc + /// State machine pin control + pub const SM0_PINCTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV + /// PINS instruction. The data written to this pin will always be the + /// least-significant bit of the OUT or MOV data. + OUT_BASE: u5, + /// The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS + /// instruction. The data written to this pin is the least-significant bit of the + /// SET data. + SET_BASE: u5, + /// The lowest-numbered pin that will be affected by a side-set operation. The MSBs + /// of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT) + /// are used for side-set data, with the remaining LSBs used for delay. The + /// least-significant bit of the side-set portion is the bit written to this pin, + /// with more-significant bits written to higher-numbered pins. + SIDESET_BASE: u5, + /// The pin which is mapped to the least-significant bit of a state machine's IN + /// data bus. Higher-numbered pins are mapped to consecutively more-significant data + /// bits, with a modulo of 32 applied to pin number. + IN_BASE: u5, + /// The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction. + /// In the range 0 to 32 inclusive. + OUT_COUNT: u6, + /// The number of pins asserted by a SET. In the range 0 to 5 inclusive. + SET_COUNT: u3, + /// The number of MSBs of the Delay/Side-set instruction field which are used for + /// side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits, + /// no side-set) and maximum of 5 (all side-set, no delay). + SIDESET_COUNT: u3, + }), base_address + 0xdc); + + /// address: 0x502000e0 + /// Clock divisor register for state machine 1\n + /// Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256) + pub const SM1_CLKDIV = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// Fractional part of clock divisor + FRAC: u8, + /// Effective frequency is sysclk/(int + frac/256).\n + /// Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0. + INT: u16, + }), base_address + 0xe0); + + /// address: 0x502000e4 + /// Execution/behavioural settings for state machine 1 + pub const SM1_EXECCTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// Comparison level for the MOV x, STATUS instruction + STATUS_N: u4, + /// Comparison used for the MOV x, STATUS instruction. + STATUS_SEL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + /// After reaching wrap_top, execution is wrapped to this address. + WRAP_BOTTOM: u5, + /// After reaching this address, execution is wrapped to wrap_bottom.\n + /// If the instruction is a jump, and the jump condition is true, the jump takes + /// priority. + WRAP_TOP: u5, + /// Continuously assert the most recent OUT/SET to the pins + OUT_STICKY: u1, + /// If 1, use a bit of OUT data as an auxiliary write enable\n + /// When used in conjunction with OUT_STICKY, writes with an enable of 0 will\n + /// deassert the latest pin write. This can create useful masking/override + /// behaviour\n + /// due to the priority ordering of state machine pin writes (SM0 < SM1 < ...) + INLINE_OUT_EN: u1, + /// Which data bit to use for inline OUT enable + OUT_EN_SEL: u5, + /// The GPIO number to use as condition for JMP PIN. Unaffected by input mapping. + JMP_PIN: u5, + /// If 1, side-set data is asserted to pin directions, instead of pin values + SIDE_PINDIR: u1, + /// If 1, the MSB of the Delay/Side-set instruction field is used as side-set + /// enable, rather than a side-set data bit. This allows instructions to perform + /// side-set optionally, rather than on every instruction, but the maximum possible + /// side-set width is reduced from 5 to 4. Note that the value of + /// PINCTRL_SIDESET_COUNT is inclusive of this enable bit. + SIDE_EN: u1, + /// If 1, an instruction written to SMx_INSTR is stalled, and latched by the state + /// machine. Will clear to 0 once this instruction completes. + EXEC_STALLED: u1, + }), base_address + 0xe4); + + /// address: 0x502000e8 + /// Control behaviour of the input/output shift registers for state machine 1 + pub const SM1_SHIFTCTRL = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + /// Push automatically when the input shift register is filled, i.e. on an IN + /// instruction which causes the input shift counter to reach or exceed PUSH_THRESH. + AUTOPUSH: u1, + /// Pull automatically when the output shift register is emptied, i.e. on or + /// following an OUT instruction which causes the output shift counter to reach or + /// exceed PULL_THRESH. + AUTOPULL: u1, + /// 1 = shift input shift register to right (data enters from left). 0 = to left. + IN_SHIFTDIR: u1, + /// 1 = shift out of output shift register to right. 0 = to left. + OUT_SHIFTDIR: u1, + /// Number of bits shifted into ISR before autopush, or conditional push (PUSH + /// IFFULL), will take place.\n + /// Write 0 for value of 32. + PUSH_THRESH: u5, + /// Number of bits shifted out of OSR before autopull, or conditional pull (PULL + /// IFEMPTY), will take place.\n + /// Write 0 for value of 32. + PULL_THRESH: u5, + /// When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.\n + /// RX FIFO is disabled as a result (always reads as both full and empty).\n + /// FIFOs are flushed when this bit is changed. + FJOIN_TX: u1, + /// When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.\n + /// TX FIFO is disabled as a result (always reads as both full and empty).\n + /// FIFOs are flushed when this bit is changed. + FJOIN_RX: u1, + }), base_address + 0xe8); + + /// address: 0x502000ec + /// Current instruction address of state machine 1 + pub const SM1_ADDR = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xec); + + /// address: 0x502000f0 + /// Read to see the instruction currently addressed by state machine 1's program + /// counter\n + /// Write to execute an instruction immediately (including jumps) and then resume + /// execution. + pub const SM1_INSTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xf0); + + /// address: 0x502000f4 + /// State machine pin control + pub const SM1_PINCTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV + /// PINS instruction. The data written to this pin will always be the + /// least-significant bit of the OUT or MOV data. + OUT_BASE: u5, + /// The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS + /// instruction. The data written to this pin is the least-significant bit of the + /// SET data. + SET_BASE: u5, + /// The lowest-numbered pin that will be affected by a side-set operation. The MSBs + /// of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT) + /// are used for side-set data, with the remaining LSBs used for delay. The + /// least-significant bit of the side-set portion is the bit written to this pin, + /// with more-significant bits written to higher-numbered pins. + SIDESET_BASE: u5, + /// The pin which is mapped to the least-significant bit of a state machine's IN + /// data bus. Higher-numbered pins are mapped to consecutively more-significant data + /// bits, with a modulo of 32 applied to pin number. + IN_BASE: u5, + /// The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction. + /// In the range 0 to 32 inclusive. + OUT_COUNT: u6, + /// The number of pins asserted by a SET. In the range 0 to 5 inclusive. + SET_COUNT: u3, + /// The number of MSBs of the Delay/Side-set instruction field which are used for + /// side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits, + /// no side-set) and maximum of 5 (all side-set, no delay). + SIDESET_COUNT: u3, + }), base_address + 0xf4); + + /// address: 0x502000f8 + /// Clock divisor register for state machine 2\n + /// Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256) + pub const SM2_CLKDIV = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// Fractional part of clock divisor + FRAC: u8, + /// Effective frequency is sysclk/(int + frac/256).\n + /// Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0. + INT: u16, + }), base_address + 0xf8); + + /// address: 0x502000fc + /// Execution/behavioural settings for state machine 2 + pub const SM2_EXECCTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// Comparison level for the MOV x, STATUS instruction + STATUS_N: u4, + /// Comparison used for the MOV x, STATUS instruction. + STATUS_SEL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + /// After reaching wrap_top, execution is wrapped to this address. + WRAP_BOTTOM: u5, + /// After reaching this address, execution is wrapped to wrap_bottom.\n + /// If the instruction is a jump, and the jump condition is true, the jump takes + /// priority. + WRAP_TOP: u5, + /// Continuously assert the most recent OUT/SET to the pins + OUT_STICKY: u1, + /// If 1, use a bit of OUT data as an auxiliary write enable\n + /// When used in conjunction with OUT_STICKY, writes with an enable of 0 will\n + /// deassert the latest pin write. This can create useful masking/override + /// behaviour\n + /// due to the priority ordering of state machine pin writes (SM0 < SM1 < ...) + INLINE_OUT_EN: u1, + /// Which data bit to use for inline OUT enable + OUT_EN_SEL: u5, + /// The GPIO number to use as condition for JMP PIN. Unaffected by input mapping. + JMP_PIN: u5, + /// If 1, side-set data is asserted to pin directions, instead of pin values + SIDE_PINDIR: u1, + /// If 1, the MSB of the Delay/Side-set instruction field is used as side-set + /// enable, rather than a side-set data bit. This allows instructions to perform + /// side-set optionally, rather than on every instruction, but the maximum possible + /// side-set width is reduced from 5 to 4. Note that the value of + /// PINCTRL_SIDESET_COUNT is inclusive of this enable bit. + SIDE_EN: u1, + /// If 1, an instruction written to SMx_INSTR is stalled, and latched by the state + /// machine. Will clear to 0 once this instruction completes. + EXEC_STALLED: u1, + }), base_address + 0xfc); + + /// address: 0x50200100 + /// Control behaviour of the input/output shift registers for state machine 2 + pub const SM2_SHIFTCTRL = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + /// Push automatically when the input shift register is filled, i.e. on an IN + /// instruction which causes the input shift counter to reach or exceed PUSH_THRESH. + AUTOPUSH: u1, + /// Pull automatically when the output shift register is emptied, i.e. on or + /// following an OUT instruction which causes the output shift counter to reach or + /// exceed PULL_THRESH. + AUTOPULL: u1, + /// 1 = shift input shift register to right (data enters from left). 0 = to left. + IN_SHIFTDIR: u1, + /// 1 = shift out of output shift register to right. 0 = to left. + OUT_SHIFTDIR: u1, + /// Number of bits shifted into ISR before autopush, or conditional push (PUSH + /// IFFULL), will take place.\n + /// Write 0 for value of 32. + PUSH_THRESH: u5, + /// Number of bits shifted out of OSR before autopull, or conditional pull (PULL + /// IFEMPTY), will take place.\n + /// Write 0 for value of 32. + PULL_THRESH: u5, + /// When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.\n + /// RX FIFO is disabled as a result (always reads as both full and empty).\n + /// FIFOs are flushed when this bit is changed. + FJOIN_TX: u1, + /// When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.\n + /// TX FIFO is disabled as a result (always reads as both full and empty).\n + /// FIFOs are flushed when this bit is changed. + FJOIN_RX: u1, + }), base_address + 0x100); + + /// address: 0x50200104 + /// Current instruction address of state machine 2 + pub const SM2_ADDR = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x104); + + /// address: 0x50200108 + /// Read to see the instruction currently addressed by state machine 2's program + /// counter\n + /// Write to execute an instruction immediately (including jumps) and then resume + /// execution. + pub const SM2_INSTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x108); + + /// address: 0x5020010c + /// State machine pin control + pub const SM2_PINCTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV + /// PINS instruction. The data written to this pin will always be the + /// least-significant bit of the OUT or MOV data. + OUT_BASE: u5, + /// The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS + /// instruction. The data written to this pin is the least-significant bit of the + /// SET data. + SET_BASE: u5, + /// The lowest-numbered pin that will be affected by a side-set operation. The MSBs + /// of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT) + /// are used for side-set data, with the remaining LSBs used for delay. The + /// least-significant bit of the side-set portion is the bit written to this pin, + /// with more-significant bits written to higher-numbered pins. + SIDESET_BASE: u5, + /// The pin which is mapped to the least-significant bit of a state machine's IN + /// data bus. Higher-numbered pins are mapped to consecutively more-significant data + /// bits, with a modulo of 32 applied to pin number. + IN_BASE: u5, + /// The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction. + /// In the range 0 to 32 inclusive. + OUT_COUNT: u6, + /// The number of pins asserted by a SET. In the range 0 to 5 inclusive. + SET_COUNT: u3, + /// The number of MSBs of the Delay/Side-set instruction field which are used for + /// side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits, + /// no side-set) and maximum of 5 (all side-set, no delay). + SIDESET_COUNT: u3, + }), base_address + 0x10c); + + /// address: 0x50200110 + /// Clock divisor register for state machine 3\n + /// Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256) + pub const SM3_CLKDIV = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// Fractional part of clock divisor + FRAC: u8, + /// Effective frequency is sysclk/(int + frac/256).\n + /// Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0. + INT: u16, + }), base_address + 0x110); + + /// address: 0x50200114 + /// Execution/behavioural settings for state machine 3 + pub const SM3_EXECCTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// Comparison level for the MOV x, STATUS instruction + STATUS_N: u4, + /// Comparison used for the MOV x, STATUS instruction. + STATUS_SEL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + /// After reaching wrap_top, execution is wrapped to this address. + WRAP_BOTTOM: u5, + /// After reaching this address, execution is wrapped to wrap_bottom.\n + /// If the instruction is a jump, and the jump condition is true, the jump takes + /// priority. + WRAP_TOP: u5, + /// Continuously assert the most recent OUT/SET to the pins + OUT_STICKY: u1, + /// If 1, use a bit of OUT data as an auxiliary write enable\n + /// When used in conjunction with OUT_STICKY, writes with an enable of 0 will\n + /// deassert the latest pin write. This can create useful masking/override + /// behaviour\n + /// due to the priority ordering of state machine pin writes (SM0 < SM1 < ...) + INLINE_OUT_EN: u1, + /// Which data bit to use for inline OUT enable + OUT_EN_SEL: u5, + /// The GPIO number to use as condition for JMP PIN. Unaffected by input mapping. + JMP_PIN: u5, + /// If 1, side-set data is asserted to pin directions, instead of pin values + SIDE_PINDIR: u1, + /// If 1, the MSB of the Delay/Side-set instruction field is used as side-set + /// enable, rather than a side-set data bit. This allows instructions to perform + /// side-set optionally, rather than on every instruction, but the maximum possible + /// side-set width is reduced from 5 to 4. Note that the value of + /// PINCTRL_SIDESET_COUNT is inclusive of this enable bit. + SIDE_EN: u1, + /// If 1, an instruction written to SMx_INSTR is stalled, and latched by the state + /// machine. Will clear to 0 once this instruction completes. + EXEC_STALLED: u1, + }), base_address + 0x114); + + /// address: 0x50200118 + /// Control behaviour of the input/output shift registers for state machine 3 + pub const SM3_SHIFTCTRL = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + /// Push automatically when the input shift register is filled, i.e. on an IN + /// instruction which causes the input shift counter to reach or exceed PUSH_THRESH. + AUTOPUSH: u1, + /// Pull automatically when the output shift register is emptied, i.e. on or + /// following an OUT instruction which causes the output shift counter to reach or + /// exceed PULL_THRESH. + AUTOPULL: u1, + /// 1 = shift input shift register to right (data enters from left). 0 = to left. + IN_SHIFTDIR: u1, + /// 1 = shift out of output shift register to right. 0 = to left. + OUT_SHIFTDIR: u1, + /// Number of bits shifted into ISR before autopush, or conditional push (PUSH + /// IFFULL), will take place.\n + /// Write 0 for value of 32. + PUSH_THRESH: u5, + /// Number of bits shifted out of OSR before autopull, or conditional pull (PULL + /// IFEMPTY), will take place.\n + /// Write 0 for value of 32. + PULL_THRESH: u5, + /// When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.\n + /// RX FIFO is disabled as a result (always reads as both full and empty).\n + /// FIFOs are flushed when this bit is changed. + FJOIN_TX: u1, + /// When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.\n + /// TX FIFO is disabled as a result (always reads as both full and empty).\n + /// FIFOs are flushed when this bit is changed. + FJOIN_RX: u1, + }), base_address + 0x118); + + /// address: 0x5020011c + /// Current instruction address of state machine 3 + pub const SM3_ADDR = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x11c); + + /// address: 0x50200120 + /// Read to see the instruction currently addressed by state machine 3's program + /// counter\n + /// Write to execute an instruction immediately (including jumps) and then resume + /// execution. + pub const SM3_INSTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x120); + + /// address: 0x50200124 + /// State machine pin control + pub const SM3_PINCTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV + /// PINS instruction. The data written to this pin will always be the + /// least-significant bit of the OUT or MOV data. + OUT_BASE: u5, + /// The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS + /// instruction. The data written to this pin is the least-significant bit of the + /// SET data. + SET_BASE: u5, + /// The lowest-numbered pin that will be affected by a side-set operation. The MSBs + /// of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT) + /// are used for side-set data, with the remaining LSBs used for delay. The + /// least-significant bit of the side-set portion is the bit written to this pin, + /// with more-significant bits written to higher-numbered pins. + SIDESET_BASE: u5, + /// The pin which is mapped to the least-significant bit of a state machine's IN + /// data bus. Higher-numbered pins are mapped to consecutively more-significant data + /// bits, with a modulo of 32 applied to pin number. + IN_BASE: u5, + /// The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction. + /// In the range 0 to 32 inclusive. + OUT_COUNT: u6, + /// The number of pins asserted by a SET. In the range 0 to 5 inclusive. + SET_COUNT: u3, + /// The number of MSBs of the Delay/Side-set instruction field which are used for + /// side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits, + /// no side-set) and maximum of 5 (all side-set, no delay). + SIDESET_COUNT: u3, + }), base_address + 0x124); + + /// address: 0x50200128 + /// Raw Interrupts + pub const INTR = @intToPtr(*volatile Mmio(32, packed struct { + SM0_RXNEMPTY: u1, + SM1_RXNEMPTY: u1, + SM2_RXNEMPTY: u1, + SM3_RXNEMPTY: u1, + SM0_TXNFULL: u1, + SM1_TXNFULL: u1, + SM2_TXNFULL: u1, + SM3_TXNFULL: u1, + SM0: u1, + SM1: u1, + SM2: u1, + SM3: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x128); + + /// address: 0x5020012c + /// Interrupt Enable for irq0 + pub const IRQ0_INTE = @intToPtr(*volatile Mmio(32, packed struct { + SM0_RXNEMPTY: u1, + SM1_RXNEMPTY: u1, + SM2_RXNEMPTY: u1, + SM3_RXNEMPTY: u1, + SM0_TXNFULL: u1, + SM1_TXNFULL: u1, + SM2_TXNFULL: u1, + SM3_TXNFULL: u1, + SM0: u1, + SM1: u1, + SM2: u1, + SM3: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x12c); + + /// address: 0x50200130 + /// Interrupt Force for irq0 + pub const IRQ0_INTF = @intToPtr(*volatile Mmio(32, packed struct { + SM0_RXNEMPTY: u1, + SM1_RXNEMPTY: u1, + SM2_RXNEMPTY: u1, + SM3_RXNEMPTY: u1, + SM0_TXNFULL: u1, + SM1_TXNFULL: u1, + SM2_TXNFULL: u1, + SM3_TXNFULL: u1, + SM0: u1, + SM1: u1, + SM2: u1, + SM3: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x130); + + /// address: 0x50200134 + /// Interrupt status after masking & forcing for irq0 + pub const IRQ0_INTS = @intToPtr(*volatile Mmio(32, packed struct { + SM0_RXNEMPTY: u1, + SM1_RXNEMPTY: u1, + SM2_RXNEMPTY: u1, + SM3_RXNEMPTY: u1, + SM0_TXNFULL: u1, + SM1_TXNFULL: u1, + SM2_TXNFULL: u1, + SM3_TXNFULL: u1, + SM0: u1, + SM1: u1, + SM2: u1, + SM3: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x134); + + /// address: 0x50200138 + /// Interrupt Enable for irq1 + pub const IRQ1_INTE = @intToPtr(*volatile Mmio(32, packed struct { + SM0_RXNEMPTY: u1, + SM1_RXNEMPTY: u1, + SM2_RXNEMPTY: u1, + SM3_RXNEMPTY: u1, + SM0_TXNFULL: u1, + SM1_TXNFULL: u1, + SM2_TXNFULL: u1, + SM3_TXNFULL: u1, + SM0: u1, + SM1: u1, + SM2: u1, + SM3: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x138); + + /// address: 0x5020013c + /// Interrupt Force for irq1 + pub const IRQ1_INTF = @intToPtr(*volatile Mmio(32, packed struct { + SM0_RXNEMPTY: u1, + SM1_RXNEMPTY: u1, + SM2_RXNEMPTY: u1, + SM3_RXNEMPTY: u1, + SM0_TXNFULL: u1, + SM1_TXNFULL: u1, + SM2_TXNFULL: u1, + SM3_TXNFULL: u1, + SM0: u1, + SM1: u1, + SM2: u1, + SM3: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x13c); + + /// address: 0x50200140 + /// Interrupt status after masking & forcing for irq1 + pub const IRQ1_INTS = @intToPtr(*volatile Mmio(32, packed struct { + SM0_RXNEMPTY: u1, + SM1_RXNEMPTY: u1, + SM2_RXNEMPTY: u1, + SM3_RXNEMPTY: u1, + SM0_TXNFULL: u1, + SM1_TXNFULL: u1, + SM2_TXNFULL: u1, + SM3_TXNFULL: u1, + SM0: u1, + SM1: u1, + SM2: u1, + SM3: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x140); + }; + pub const PIO1 = struct { + pub const base_address = 0x50300000; + + /// address: 0x50300000 + /// PIO control register + pub const CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// Enable/disable each of the four state machines by writing 1/0 to each of these + /// four bits. When disabled, a state machine will cease executing instructions, + /// except those written directly to SMx_INSTR by the system. Multiple bits can be + /// set/cleared at once to run/halt multiple state machines simultaneously. + SM_ENABLE: u4, + /// Write 1 to instantly clear internal SM state which may be otherwise difficult to + /// access and will affect future execution.\n\n + /// Specifically, the following are cleared: input and output shift counters; the + /// contents of the input shift register; the delay counter; the waiting-on-IRQ + /// state; any stalled instruction written to SMx_INSTR or run by OUT/MOV EXEC; any + /// pin write left asserted due to OUT_STICKY. + SM_RESTART: u4, + /// Restart a state machine's clock divider from an initial phase of 0. Clock + /// dividers are free-running, so once started, their output (including fractional + /// jitter) is completely determined by the integer/fractional divisor configured in + /// SMx_CLKDIV. This means that, if multiple clock dividers with the same divisor + /// are restarted simultaneously, by writing multiple 1 bits to this field, the + /// execution clocks of those state machines will run in precise lockstep.\n\n + /// Note that setting/clearing SM_ENABLE does not stop the clock divider from + /// running, so once multiple state machines' clocks are synchronised, it is safe to + /// disable/reenable a state machine, whilst keeping the clock dividers in sync.\n\n + /// Note also that CLKDIV_RESTART can be written to whilst the state machine is + /// running, and this is useful to resynchronise clock dividers after the divisors + /// (SMx_CLKDIV) have been changed on-the-fly. + CLKDIV_RESTART: u4, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x0); + + /// address: 0x50300004 + /// FIFO status register + pub const FSTAT = @intToPtr(*volatile Mmio(32, packed struct { + /// State machine RX FIFO is full + RXFULL: u4, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + /// State machine RX FIFO is empty + RXEMPTY: u4, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// State machine TX FIFO is full + TXFULL: u4, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + /// State machine TX FIFO is empty + TXEMPTY: u4, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + }), base_address + 0x4); + + /// address: 0x50300008 + /// FIFO debug register + pub const FDEBUG = @intToPtr(*volatile Mmio(32, packed struct { + /// State machine has stalled on full RX FIFO during a blocking PUSH, or an IN with + /// autopush enabled. This flag is also set when a nonblocking PUSH to a full FIFO + /// took place, in which case the state machine has dropped data. Write 1 to clear. + RXSTALL: u4, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + /// RX FIFO underflow (i.e. read-on-empty by the system) has occurred. Write 1 to + /// clear. Note that read-on-empty does not perturb the state of the FIFO in any + /// way, but the data returned by reading from an empty FIFO is undefined, so this + /// flag generally only becomes set due to some kind of software error. + RXUNDER: u4, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// TX FIFO overflow (i.e. write-on-full by the system) has occurred. Write 1 to + /// clear. Note that write-on-full does not alter the state or contents of the FIFO + /// in any way, but the data that the system attempted to write is dropped, so if + /// this flag is set, your software has quite likely dropped some data on the floor. + TXOVER: u4, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + /// State machine has stalled on empty TX FIFO during a blocking PULL, or an OUT + /// with autopull enabled. Write 1 to clear. + TXSTALL: u4, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + }), base_address + 0x8); + + /// address: 0x5030000c + /// FIFO levels + pub const FLEVEL = @intToPtr(*volatile Mmio(32, packed struct { + TX0: u4, + RX0: u4, + TX1: u4, + RX1: u4, + TX2: u4, + RX2: u4, + TX3: u4, + RX3: u4, + }), base_address + 0xc); + + /// address: 0x50300010 + /// Direct write access to the TX FIFO for this state machine. Each write pushes one + /// word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO + /// state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO. + pub const TXF0 = @intToPtr(*volatile u32, base_address + 0x10); + + /// address: 0x50300014 + /// Direct write access to the TX FIFO for this state machine. Each write pushes one + /// word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO + /// state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO. + pub const TXF1 = @intToPtr(*volatile u32, base_address + 0x14); + + /// address: 0x50300018 + /// Direct write access to the TX FIFO for this state machine. Each write pushes one + /// word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO + /// state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO. + pub const TXF2 = @intToPtr(*volatile u32, base_address + 0x18); + + /// address: 0x5030001c + /// Direct write access to the TX FIFO for this state machine. Each write pushes one + /// word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO + /// state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO. + pub const TXF3 = @intToPtr(*volatile u32, base_address + 0x1c); + + /// address: 0x50300020 + /// Direct read access to the RX FIFO for this state machine. Each read pops one + /// word from the FIFO. Attempting to read from an empty FIFO has no effect on the + /// FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The + /// data returned to the system on a read from an empty FIFO is undefined. + pub const RXF0 = @intToPtr(*volatile u32, base_address + 0x20); + + /// address: 0x50300024 + /// Direct read access to the RX FIFO for this state machine. Each read pops one + /// word from the FIFO. Attempting to read from an empty FIFO has no effect on the + /// FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The + /// data returned to the system on a read from an empty FIFO is undefined. + pub const RXF1 = @intToPtr(*volatile u32, base_address + 0x24); + + /// address: 0x50300028 + /// Direct read access to the RX FIFO for this state machine. Each read pops one + /// word from the FIFO. Attempting to read from an empty FIFO has no effect on the + /// FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The + /// data returned to the system on a read from an empty FIFO is undefined. + pub const RXF2 = @intToPtr(*volatile u32, base_address + 0x28); + + /// address: 0x5030002c + /// Direct read access to the RX FIFO for this state machine. Each read pops one + /// word from the FIFO. Attempting to read from an empty FIFO has no effect on the + /// FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The + /// data returned to the system on a read from an empty FIFO is undefined. + pub const RXF3 = @intToPtr(*volatile u32, base_address + 0x2c); + + /// address: 0x50300030 + /// State machine IRQ flags register. Write 1 to clear. There are 8 state machine + /// IRQ flags, which can be set, cleared, and waited on by the state machines. + /// There's no fixed association between flags and state machines -- any state + /// machine can use any flag.\n\n + /// Any of the 8 flags can be used for timing synchronisation between state + /// machines, using IRQ and WAIT instructions. The lower four of these flags are + /// also routed out to system-level interrupt requests, alongside FIFO status + /// interrupts -- see e.g. IRQ0_INTE. + pub const IRQ = @intToPtr(*volatile MmioInt(32, u8), base_address + 0x30); + + /// address: 0x50300034 + /// Writing a 1 to each of these bits will forcibly assert the corresponding IRQ. + /// Note this is different to the INTF register: writing here affects PIO internal + /// state. INTF just asserts the processor-facing IRQ signal for testing ISRs, and + /// is not visible to the state machines. + pub const IRQ_FORCE = @intToPtr(*volatile MmioInt(32, u8), base_address + 0x34); + + /// address: 0x50300038 + /// There is a 2-flipflop synchronizer on each GPIO input, which protects PIO logic + /// from metastabilities. This increases input delay, and for fast synchronous IO + /// (e.g. SPI) these synchronizers may need to be bypassed. Each bit in this + /// register corresponds to one GPIO.\n + /// 0 -> input is synchronized (default)\n + /// 1 -> synchronizer is bypassed\n + /// If in doubt, leave this register as all zeroes. + pub const INPUT_SYNC_BYPASS = @intToPtr(*volatile u32, base_address + 0x38); + + /// address: 0x5030003c + /// Read to sample the pad output values PIO is currently driving to the GPIOs. On + /// RP2040 there are 30 GPIOs, so the two most significant bits are hardwired to 0. + pub const DBG_PADOUT = @intToPtr(*volatile u32, base_address + 0x3c); + + /// address: 0x50300040 + /// Read to sample the pad output enables (direction) PIO is currently driving to + /// the GPIOs. On RP2040 there are 30 GPIOs, so the two most significant bits are + /// hardwired to 0. + pub const DBG_PADOE = @intToPtr(*volatile u32, base_address + 0x40); + + /// address: 0x50300044 + /// The PIO hardware has some free parameters that may vary between chip products.\n + /// These should be provided in the chip datasheet, but are also exposed here. + pub const DBG_CFGINFO = @intToPtr(*volatile Mmio(32, packed struct { + /// The depth of the state machine TX/RX FIFOs, measured in words.\n + /// Joining fifos via SHIFTCTRL_FJOIN gives one FIFO with double\n + /// this depth. + FIFO_DEPTH: u6, + reserved0: u1 = 0, + reserved1: u1 = 0, + /// The number of state machines this PIO instance is equipped with. + SM_COUNT: u4, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + /// The size of the instruction memory, measured in units of one instruction + IMEM_SIZE: u6, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + }), base_address + 0x44); + + /// address: 0x50300048 + /// Write-only access to instruction memory location 0 + pub const INSTR_MEM0 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x48); + + /// address: 0x5030004c + /// Write-only access to instruction memory location 1 + pub const INSTR_MEM1 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x4c); + + /// address: 0x50300050 + /// Write-only access to instruction memory location 2 + pub const INSTR_MEM2 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x50); + + /// address: 0x50300054 + /// Write-only access to instruction memory location 3 + pub const INSTR_MEM3 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x54); + + /// address: 0x50300058 + /// Write-only access to instruction memory location 4 + pub const INSTR_MEM4 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x58); + + /// address: 0x5030005c + /// Write-only access to instruction memory location 5 + pub const INSTR_MEM5 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x5c); + + /// address: 0x50300060 + /// Write-only access to instruction memory location 6 + pub const INSTR_MEM6 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x60); + + /// address: 0x50300064 + /// Write-only access to instruction memory location 7 + pub const INSTR_MEM7 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x64); + + /// address: 0x50300068 + /// Write-only access to instruction memory location 8 + pub const INSTR_MEM8 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x68); + + /// address: 0x5030006c + /// Write-only access to instruction memory location 9 + pub const INSTR_MEM9 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x6c); + + /// address: 0x50300070 + /// Write-only access to instruction memory location 10 + pub const INSTR_MEM10 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x70); + + /// address: 0x50300074 + /// Write-only access to instruction memory location 11 + pub const INSTR_MEM11 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x74); + + /// address: 0x50300078 + /// Write-only access to instruction memory location 12 + pub const INSTR_MEM12 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x78); + + /// address: 0x5030007c + /// Write-only access to instruction memory location 13 + pub const INSTR_MEM13 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x7c); + + /// address: 0x50300080 + /// Write-only access to instruction memory location 14 + pub const INSTR_MEM14 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x80); + + /// address: 0x50300084 + /// Write-only access to instruction memory location 15 + pub const INSTR_MEM15 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x84); + + /// address: 0x50300088 + /// Write-only access to instruction memory location 16 + pub const INSTR_MEM16 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x88); + + /// address: 0x5030008c + /// Write-only access to instruction memory location 17 + pub const INSTR_MEM17 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x8c); + + /// address: 0x50300090 + /// Write-only access to instruction memory location 18 + pub const INSTR_MEM18 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x90); + + /// address: 0x50300094 + /// Write-only access to instruction memory location 19 + pub const INSTR_MEM19 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x94); + + /// address: 0x50300098 + /// Write-only access to instruction memory location 20 + pub const INSTR_MEM20 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x98); + + /// address: 0x5030009c + /// Write-only access to instruction memory location 21 + pub const INSTR_MEM21 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x9c); + + /// address: 0x503000a0 + /// Write-only access to instruction memory location 22 + pub const INSTR_MEM22 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xa0); + + /// address: 0x503000a4 + /// Write-only access to instruction memory location 23 + pub const INSTR_MEM23 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xa4); + + /// address: 0x503000a8 + /// Write-only access to instruction memory location 24 + pub const INSTR_MEM24 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xa8); + + /// address: 0x503000ac + /// Write-only access to instruction memory location 25 + pub const INSTR_MEM25 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xac); + + /// address: 0x503000b0 + /// Write-only access to instruction memory location 26 + pub const INSTR_MEM26 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xb0); + + /// address: 0x503000b4 + /// Write-only access to instruction memory location 27 + pub const INSTR_MEM27 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xb4); + + /// address: 0x503000b8 + /// Write-only access to instruction memory location 28 + pub const INSTR_MEM28 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xb8); + + /// address: 0x503000bc + /// Write-only access to instruction memory location 29 + pub const INSTR_MEM29 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xbc); + + /// address: 0x503000c0 + /// Write-only access to instruction memory location 30 + pub const INSTR_MEM30 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xc0); + + /// address: 0x503000c4 + /// Write-only access to instruction memory location 31 + pub const INSTR_MEM31 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xc4); + + /// address: 0x503000c8 + /// Clock divisor register for state machine 0\n + /// Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256) + pub const SM0_CLKDIV = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// Fractional part of clock divisor + FRAC: u8, + /// Effective frequency is sysclk/(int + frac/256).\n + /// Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0. + INT: u16, + }), base_address + 0xc8); + + /// address: 0x503000cc + /// Execution/behavioural settings for state machine 0 + pub const SM0_EXECCTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// Comparison level for the MOV x, STATUS instruction + STATUS_N: u4, + /// Comparison used for the MOV x, STATUS instruction. + STATUS_SEL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + /// After reaching wrap_top, execution is wrapped to this address. + WRAP_BOTTOM: u5, + /// After reaching this address, execution is wrapped to wrap_bottom.\n + /// If the instruction is a jump, and the jump condition is true, the jump takes + /// priority. + WRAP_TOP: u5, + /// Continuously assert the most recent OUT/SET to the pins + OUT_STICKY: u1, + /// If 1, use a bit of OUT data as an auxiliary write enable\n + /// When used in conjunction with OUT_STICKY, writes with an enable of 0 will\n + /// deassert the latest pin write. This can create useful masking/override + /// behaviour\n + /// due to the priority ordering of state machine pin writes (SM0 < SM1 < ...) + INLINE_OUT_EN: u1, + /// Which data bit to use for inline OUT enable + OUT_EN_SEL: u5, + /// The GPIO number to use as condition for JMP PIN. Unaffected by input mapping. + JMP_PIN: u5, + /// If 1, side-set data is asserted to pin directions, instead of pin values + SIDE_PINDIR: u1, + /// If 1, the MSB of the Delay/Side-set instruction field is used as side-set + /// enable, rather than a side-set data bit. This allows instructions to perform + /// side-set optionally, rather than on every instruction, but the maximum possible + /// side-set width is reduced from 5 to 4. Note that the value of + /// PINCTRL_SIDESET_COUNT is inclusive of this enable bit. + SIDE_EN: u1, + /// If 1, an instruction written to SMx_INSTR is stalled, and latched by the state + /// machine. Will clear to 0 once this instruction completes. + EXEC_STALLED: u1, + }), base_address + 0xcc); + + /// address: 0x503000d0 + /// Control behaviour of the input/output shift registers for state machine 0 + pub const SM0_SHIFTCTRL = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + /// Push automatically when the input shift register is filled, i.e. on an IN + /// instruction which causes the input shift counter to reach or exceed PUSH_THRESH. + AUTOPUSH: u1, + /// Pull automatically when the output shift register is emptied, i.e. on or + /// following an OUT instruction which causes the output shift counter to reach or + /// exceed PULL_THRESH. + AUTOPULL: u1, + /// 1 = shift input shift register to right (data enters from left). 0 = to left. + IN_SHIFTDIR: u1, + /// 1 = shift out of output shift register to right. 0 = to left. + OUT_SHIFTDIR: u1, + /// Number of bits shifted into ISR before autopush, or conditional push (PUSH + /// IFFULL), will take place.\n + /// Write 0 for value of 32. + PUSH_THRESH: u5, + /// Number of bits shifted out of OSR before autopull, or conditional pull (PULL + /// IFEMPTY), will take place.\n + /// Write 0 for value of 32. + PULL_THRESH: u5, + /// When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.\n + /// RX FIFO is disabled as a result (always reads as both full and empty).\n + /// FIFOs are flushed when this bit is changed. + FJOIN_TX: u1, + /// When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.\n + /// TX FIFO is disabled as a result (always reads as both full and empty).\n + /// FIFOs are flushed when this bit is changed. + FJOIN_RX: u1, + }), base_address + 0xd0); + + /// address: 0x503000d4 + /// Current instruction address of state machine 0 + pub const SM0_ADDR = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xd4); + + /// address: 0x503000d8 + /// Read to see the instruction currently addressed by state machine 0's program + /// counter\n + /// Write to execute an instruction immediately (including jumps) and then resume + /// execution. + pub const SM0_INSTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xd8); + + /// address: 0x503000dc + /// State machine pin control + pub const SM0_PINCTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV + /// PINS instruction. The data written to this pin will always be the + /// least-significant bit of the OUT or MOV data. + OUT_BASE: u5, + /// The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS + /// instruction. The data written to this pin is the least-significant bit of the + /// SET data. + SET_BASE: u5, + /// The lowest-numbered pin that will be affected by a side-set operation. The MSBs + /// of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT) + /// are used for side-set data, with the remaining LSBs used for delay. The + /// least-significant bit of the side-set portion is the bit written to this pin, + /// with more-significant bits written to higher-numbered pins. + SIDESET_BASE: u5, + /// The pin which is mapped to the least-significant bit of a state machine's IN + /// data bus. Higher-numbered pins are mapped to consecutively more-significant data + /// bits, with a modulo of 32 applied to pin number. + IN_BASE: u5, + /// The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction. + /// In the range 0 to 32 inclusive. + OUT_COUNT: u6, + /// The number of pins asserted by a SET. In the range 0 to 5 inclusive. + SET_COUNT: u3, + /// The number of MSBs of the Delay/Side-set instruction field which are used for + /// side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits, + /// no side-set) and maximum of 5 (all side-set, no delay). + SIDESET_COUNT: u3, + }), base_address + 0xdc); + + /// address: 0x503000e0 + /// Clock divisor register for state machine 1\n + /// Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256) + pub const SM1_CLKDIV = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// Fractional part of clock divisor + FRAC: u8, + /// Effective frequency is sysclk/(int + frac/256).\n + /// Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0. + INT: u16, + }), base_address + 0xe0); + + /// address: 0x503000e4 + /// Execution/behavioural settings for state machine 1 + pub const SM1_EXECCTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// Comparison level for the MOV x, STATUS instruction + STATUS_N: u4, + /// Comparison used for the MOV x, STATUS instruction. + STATUS_SEL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + /// After reaching wrap_top, execution is wrapped to this address. + WRAP_BOTTOM: u5, + /// After reaching this address, execution is wrapped to wrap_bottom.\n + /// If the instruction is a jump, and the jump condition is true, the jump takes + /// priority. + WRAP_TOP: u5, + /// Continuously assert the most recent OUT/SET to the pins + OUT_STICKY: u1, + /// If 1, use a bit of OUT data as an auxiliary write enable\n + /// When used in conjunction with OUT_STICKY, writes with an enable of 0 will\n + /// deassert the latest pin write. This can create useful masking/override + /// behaviour\n + /// due to the priority ordering of state machine pin writes (SM0 < SM1 < ...) + INLINE_OUT_EN: u1, + /// Which data bit to use for inline OUT enable + OUT_EN_SEL: u5, + /// The GPIO number to use as condition for JMP PIN. Unaffected by input mapping. + JMP_PIN: u5, + /// If 1, side-set data is asserted to pin directions, instead of pin values + SIDE_PINDIR: u1, + /// If 1, the MSB of the Delay/Side-set instruction field is used as side-set + /// enable, rather than a side-set data bit. This allows instructions to perform + /// side-set optionally, rather than on every instruction, but the maximum possible + /// side-set width is reduced from 5 to 4. Note that the value of + /// PINCTRL_SIDESET_COUNT is inclusive of this enable bit. + SIDE_EN: u1, + /// If 1, an instruction written to SMx_INSTR is stalled, and latched by the state + /// machine. Will clear to 0 once this instruction completes. + EXEC_STALLED: u1, + }), base_address + 0xe4); + + /// address: 0x503000e8 + /// Control behaviour of the input/output shift registers for state machine 1 + pub const SM1_SHIFTCTRL = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + /// Push automatically when the input shift register is filled, i.e. on an IN + /// instruction which causes the input shift counter to reach or exceed PUSH_THRESH. + AUTOPUSH: u1, + /// Pull automatically when the output shift register is emptied, i.e. on or + /// following an OUT instruction which causes the output shift counter to reach or + /// exceed PULL_THRESH. + AUTOPULL: u1, + /// 1 = shift input shift register to right (data enters from left). 0 = to left. + IN_SHIFTDIR: u1, + /// 1 = shift out of output shift register to right. 0 = to left. + OUT_SHIFTDIR: u1, + /// Number of bits shifted into ISR before autopush, or conditional push (PUSH + /// IFFULL), will take place.\n + /// Write 0 for value of 32. + PUSH_THRESH: u5, + /// Number of bits shifted out of OSR before autopull, or conditional pull (PULL + /// IFEMPTY), will take place.\n + /// Write 0 for value of 32. + PULL_THRESH: u5, + /// When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.\n + /// RX FIFO is disabled as a result (always reads as both full and empty).\n + /// FIFOs are flushed when this bit is changed. + FJOIN_TX: u1, + /// When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.\n + /// TX FIFO is disabled as a result (always reads as both full and empty).\n + /// FIFOs are flushed when this bit is changed. + FJOIN_RX: u1, + }), base_address + 0xe8); + + /// address: 0x503000ec + /// Current instruction address of state machine 1 + pub const SM1_ADDR = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xec); + + /// address: 0x503000f0 + /// Read to see the instruction currently addressed by state machine 1's program + /// counter\n + /// Write to execute an instruction immediately (including jumps) and then resume + /// execution. + pub const SM1_INSTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xf0); + + /// address: 0x503000f4 + /// State machine pin control + pub const SM1_PINCTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV + /// PINS instruction. The data written to this pin will always be the + /// least-significant bit of the OUT or MOV data. + OUT_BASE: u5, + /// The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS + /// instruction. The data written to this pin is the least-significant bit of the + /// SET data. + SET_BASE: u5, + /// The lowest-numbered pin that will be affected by a side-set operation. The MSBs + /// of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT) + /// are used for side-set data, with the remaining LSBs used for delay. The + /// least-significant bit of the side-set portion is the bit written to this pin, + /// with more-significant bits written to higher-numbered pins. + SIDESET_BASE: u5, + /// The pin which is mapped to the least-significant bit of a state machine's IN + /// data bus. Higher-numbered pins are mapped to consecutively more-significant data + /// bits, with a modulo of 32 applied to pin number. + IN_BASE: u5, + /// The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction. + /// In the range 0 to 32 inclusive. + OUT_COUNT: u6, + /// The number of pins asserted by a SET. In the range 0 to 5 inclusive. + SET_COUNT: u3, + /// The number of MSBs of the Delay/Side-set instruction field which are used for + /// side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits, + /// no side-set) and maximum of 5 (all side-set, no delay). + SIDESET_COUNT: u3, + }), base_address + 0xf4); + + /// address: 0x503000f8 + /// Clock divisor register for state machine 2\n + /// Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256) + pub const SM2_CLKDIV = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// Fractional part of clock divisor + FRAC: u8, + /// Effective frequency is sysclk/(int + frac/256).\n + /// Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0. + INT: u16, + }), base_address + 0xf8); + + /// address: 0x503000fc + /// Execution/behavioural settings for state machine 2 + pub const SM2_EXECCTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// Comparison level for the MOV x, STATUS instruction + STATUS_N: u4, + /// Comparison used for the MOV x, STATUS instruction. + STATUS_SEL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + /// After reaching wrap_top, execution is wrapped to this address. + WRAP_BOTTOM: u5, + /// After reaching this address, execution is wrapped to wrap_bottom.\n + /// If the instruction is a jump, and the jump condition is true, the jump takes + /// priority. + WRAP_TOP: u5, + /// Continuously assert the most recent OUT/SET to the pins + OUT_STICKY: u1, + /// If 1, use a bit of OUT data as an auxiliary write enable\n + /// When used in conjunction with OUT_STICKY, writes with an enable of 0 will\n + /// deassert the latest pin write. This can create useful masking/override + /// behaviour\n + /// due to the priority ordering of state machine pin writes (SM0 < SM1 < ...) + INLINE_OUT_EN: u1, + /// Which data bit to use for inline OUT enable + OUT_EN_SEL: u5, + /// The GPIO number to use as condition for JMP PIN. Unaffected by input mapping. + JMP_PIN: u5, + /// If 1, side-set data is asserted to pin directions, instead of pin values + SIDE_PINDIR: u1, + /// If 1, the MSB of the Delay/Side-set instruction field is used as side-set + /// enable, rather than a side-set data bit. This allows instructions to perform + /// side-set optionally, rather than on every instruction, but the maximum possible + /// side-set width is reduced from 5 to 4. Note that the value of + /// PINCTRL_SIDESET_COUNT is inclusive of this enable bit. + SIDE_EN: u1, + /// If 1, an instruction written to SMx_INSTR is stalled, and latched by the state + /// machine. Will clear to 0 once this instruction completes. + EXEC_STALLED: u1, + }), base_address + 0xfc); + + /// address: 0x50300100 + /// Control behaviour of the input/output shift registers for state machine 2 + pub const SM2_SHIFTCTRL = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + /// Push automatically when the input shift register is filled, i.e. on an IN + /// instruction which causes the input shift counter to reach or exceed PUSH_THRESH. + AUTOPUSH: u1, + /// Pull automatically when the output shift register is emptied, i.e. on or + /// following an OUT instruction which causes the output shift counter to reach or + /// exceed PULL_THRESH. + AUTOPULL: u1, + /// 1 = shift input shift register to right (data enters from left). 0 = to left. + IN_SHIFTDIR: u1, + /// 1 = shift out of output shift register to right. 0 = to left. + OUT_SHIFTDIR: u1, + /// Number of bits shifted into ISR before autopush, or conditional push (PUSH + /// IFFULL), will take place.\n + /// Write 0 for value of 32. + PUSH_THRESH: u5, + /// Number of bits shifted out of OSR before autopull, or conditional pull (PULL + /// IFEMPTY), will take place.\n + /// Write 0 for value of 32. + PULL_THRESH: u5, + /// When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.\n + /// RX FIFO is disabled as a result (always reads as both full and empty).\n + /// FIFOs are flushed when this bit is changed. + FJOIN_TX: u1, + /// When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.\n + /// TX FIFO is disabled as a result (always reads as both full and empty).\n + /// FIFOs are flushed when this bit is changed. + FJOIN_RX: u1, + }), base_address + 0x100); + + /// address: 0x50300104 + /// Current instruction address of state machine 2 + pub const SM2_ADDR = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x104); + + /// address: 0x50300108 + /// Read to see the instruction currently addressed by state machine 2's program + /// counter\n + /// Write to execute an instruction immediately (including jumps) and then resume + /// execution. + pub const SM2_INSTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x108); + + /// address: 0x5030010c + /// State machine pin control + pub const SM2_PINCTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV + /// PINS instruction. The data written to this pin will always be the + /// least-significant bit of the OUT or MOV data. + OUT_BASE: u5, + /// The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS + /// instruction. The data written to this pin is the least-significant bit of the + /// SET data. + SET_BASE: u5, + /// The lowest-numbered pin that will be affected by a side-set operation. The MSBs + /// of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT) + /// are used for side-set data, with the remaining LSBs used for delay. The + /// least-significant bit of the side-set portion is the bit written to this pin, + /// with more-significant bits written to higher-numbered pins. + SIDESET_BASE: u5, + /// The pin which is mapped to the least-significant bit of a state machine's IN + /// data bus. Higher-numbered pins are mapped to consecutively more-significant data + /// bits, with a modulo of 32 applied to pin number. + IN_BASE: u5, + /// The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction. + /// In the range 0 to 32 inclusive. + OUT_COUNT: u6, + /// The number of pins asserted by a SET. In the range 0 to 5 inclusive. + SET_COUNT: u3, + /// The number of MSBs of the Delay/Side-set instruction field which are used for + /// side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits, + /// no side-set) and maximum of 5 (all side-set, no delay). + SIDESET_COUNT: u3, + }), base_address + 0x10c); + + /// address: 0x50300110 + /// Clock divisor register for state machine 3\n + /// Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256) + pub const SM3_CLKDIV = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// Fractional part of clock divisor + FRAC: u8, + /// Effective frequency is sysclk/(int + frac/256).\n + /// Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0. + INT: u16, + }), base_address + 0x110); + + /// address: 0x50300114 + /// Execution/behavioural settings for state machine 3 + pub const SM3_EXECCTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// Comparison level for the MOV x, STATUS instruction + STATUS_N: u4, + /// Comparison used for the MOV x, STATUS instruction. + STATUS_SEL: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + /// After reaching wrap_top, execution is wrapped to this address. + WRAP_BOTTOM: u5, + /// After reaching this address, execution is wrapped to wrap_bottom.\n + /// If the instruction is a jump, and the jump condition is true, the jump takes + /// priority. + WRAP_TOP: u5, + /// Continuously assert the most recent OUT/SET to the pins + OUT_STICKY: u1, + /// If 1, use a bit of OUT data as an auxiliary write enable\n + /// When used in conjunction with OUT_STICKY, writes with an enable of 0 will\n + /// deassert the latest pin write. This can create useful masking/override + /// behaviour\n + /// due to the priority ordering of state machine pin writes (SM0 < SM1 < ...) + INLINE_OUT_EN: u1, + /// Which data bit to use for inline OUT enable + OUT_EN_SEL: u5, + /// The GPIO number to use as condition for JMP PIN. Unaffected by input mapping. + JMP_PIN: u5, + /// If 1, side-set data is asserted to pin directions, instead of pin values + SIDE_PINDIR: u1, + /// If 1, the MSB of the Delay/Side-set instruction field is used as side-set + /// enable, rather than a side-set data bit. This allows instructions to perform + /// side-set optionally, rather than on every instruction, but the maximum possible + /// side-set width is reduced from 5 to 4. Note that the value of + /// PINCTRL_SIDESET_COUNT is inclusive of this enable bit. + SIDE_EN: u1, + /// If 1, an instruction written to SMx_INSTR is stalled, and latched by the state + /// machine. Will clear to 0 once this instruction completes. + EXEC_STALLED: u1, + }), base_address + 0x114); + + /// address: 0x50300118 + /// Control behaviour of the input/output shift registers for state machine 3 + pub const SM3_SHIFTCTRL = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + /// Push automatically when the input shift register is filled, i.e. on an IN + /// instruction which causes the input shift counter to reach or exceed PUSH_THRESH. + AUTOPUSH: u1, + /// Pull automatically when the output shift register is emptied, i.e. on or + /// following an OUT instruction which causes the output shift counter to reach or + /// exceed PULL_THRESH. + AUTOPULL: u1, + /// 1 = shift input shift register to right (data enters from left). 0 = to left. + IN_SHIFTDIR: u1, + /// 1 = shift out of output shift register to right. 0 = to left. + OUT_SHIFTDIR: u1, + /// Number of bits shifted into ISR before autopush, or conditional push (PUSH + /// IFFULL), will take place.\n + /// Write 0 for value of 32. + PUSH_THRESH: u5, + /// Number of bits shifted out of OSR before autopull, or conditional pull (PULL + /// IFEMPTY), will take place.\n + /// Write 0 for value of 32. + PULL_THRESH: u5, + /// When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.\n + /// RX FIFO is disabled as a result (always reads as both full and empty).\n + /// FIFOs are flushed when this bit is changed. + FJOIN_TX: u1, + /// When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.\n + /// TX FIFO is disabled as a result (always reads as both full and empty).\n + /// FIFOs are flushed when this bit is changed. + FJOIN_RX: u1, + }), base_address + 0x118); + + /// address: 0x5030011c + /// Current instruction address of state machine 3 + pub const SM3_ADDR = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x11c); + + /// address: 0x50300120 + /// Read to see the instruction currently addressed by state machine 3's program + /// counter\n + /// Write to execute an instruction immediately (including jumps) and then resume + /// execution. + pub const SM3_INSTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x120); + + /// address: 0x50300124 + /// State machine pin control + pub const SM3_PINCTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV + /// PINS instruction. The data written to this pin will always be the + /// least-significant bit of the OUT or MOV data. + OUT_BASE: u5, + /// The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS + /// instruction. The data written to this pin is the least-significant bit of the + /// SET data. + SET_BASE: u5, + /// The lowest-numbered pin that will be affected by a side-set operation. The MSBs + /// of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT) + /// are used for side-set data, with the remaining LSBs used for delay. The + /// least-significant bit of the side-set portion is the bit written to this pin, + /// with more-significant bits written to higher-numbered pins. + SIDESET_BASE: u5, + /// The pin which is mapped to the least-significant bit of a state machine's IN + /// data bus. Higher-numbered pins are mapped to consecutively more-significant data + /// bits, with a modulo of 32 applied to pin number. + IN_BASE: u5, + /// The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction. + /// In the range 0 to 32 inclusive. + OUT_COUNT: u6, + /// The number of pins asserted by a SET. In the range 0 to 5 inclusive. + SET_COUNT: u3, + /// The number of MSBs of the Delay/Side-set instruction field which are used for + /// side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits, + /// no side-set) and maximum of 5 (all side-set, no delay). + SIDESET_COUNT: u3, + }), base_address + 0x124); + + /// address: 0x50300128 + /// Raw Interrupts + pub const INTR = @intToPtr(*volatile Mmio(32, packed struct { + SM0_RXNEMPTY: u1, + SM1_RXNEMPTY: u1, + SM2_RXNEMPTY: u1, + SM3_RXNEMPTY: u1, + SM0_TXNFULL: u1, + SM1_TXNFULL: u1, + SM2_TXNFULL: u1, + SM3_TXNFULL: u1, + SM0: u1, + SM1: u1, + SM2: u1, + SM3: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x128); + + /// address: 0x5030012c + /// Interrupt Enable for irq0 + pub const IRQ0_INTE = @intToPtr(*volatile Mmio(32, packed struct { + SM0_RXNEMPTY: u1, + SM1_RXNEMPTY: u1, + SM2_RXNEMPTY: u1, + SM3_RXNEMPTY: u1, + SM0_TXNFULL: u1, + SM1_TXNFULL: u1, + SM2_TXNFULL: u1, + SM3_TXNFULL: u1, + SM0: u1, + SM1: u1, + SM2: u1, + SM3: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x12c); + + /// address: 0x50300130 + /// Interrupt Force for irq0 + pub const IRQ0_INTF = @intToPtr(*volatile Mmio(32, packed struct { + SM0_RXNEMPTY: u1, + SM1_RXNEMPTY: u1, + SM2_RXNEMPTY: u1, + SM3_RXNEMPTY: u1, + SM0_TXNFULL: u1, + SM1_TXNFULL: u1, + SM2_TXNFULL: u1, + SM3_TXNFULL: u1, + SM0: u1, + SM1: u1, + SM2: u1, + SM3: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x130); + + /// address: 0x50300134 + /// Interrupt status after masking & forcing for irq0 + pub const IRQ0_INTS = @intToPtr(*volatile Mmio(32, packed struct { + SM0_RXNEMPTY: u1, + SM1_RXNEMPTY: u1, + SM2_RXNEMPTY: u1, + SM3_RXNEMPTY: u1, + SM0_TXNFULL: u1, + SM1_TXNFULL: u1, + SM2_TXNFULL: u1, + SM3_TXNFULL: u1, + SM0: u1, + SM1: u1, + SM2: u1, + SM3: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x134); + + /// address: 0x50300138 + /// Interrupt Enable for irq1 + pub const IRQ1_INTE = @intToPtr(*volatile Mmio(32, packed struct { + SM0_RXNEMPTY: u1, + SM1_RXNEMPTY: u1, + SM2_RXNEMPTY: u1, + SM3_RXNEMPTY: u1, + SM0_TXNFULL: u1, + SM1_TXNFULL: u1, + SM2_TXNFULL: u1, + SM3_TXNFULL: u1, + SM0: u1, + SM1: u1, + SM2: u1, + SM3: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x138); + + /// address: 0x5030013c + /// Interrupt Force for irq1 + pub const IRQ1_INTF = @intToPtr(*volatile Mmio(32, packed struct { + SM0_RXNEMPTY: u1, + SM1_RXNEMPTY: u1, + SM2_RXNEMPTY: u1, + SM3_RXNEMPTY: u1, + SM0_TXNFULL: u1, + SM1_TXNFULL: u1, + SM2_TXNFULL: u1, + SM3_TXNFULL: u1, + SM0: u1, + SM1: u1, + SM2: u1, + SM3: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x13c); + + /// address: 0x50300140 + /// Interrupt status after masking & forcing for irq1 + pub const IRQ1_INTS = @intToPtr(*volatile Mmio(32, packed struct { + SM0_RXNEMPTY: u1, + SM1_RXNEMPTY: u1, + SM2_RXNEMPTY: u1, + SM3_RXNEMPTY: u1, + SM0_TXNFULL: u1, + SM1_TXNFULL: u1, + SM2_TXNFULL: u1, + SM3_TXNFULL: u1, + SM0: u1, + SM1: u1, + SM2: u1, + SM3: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + }), base_address + 0x140); + }; + + /// Single-cycle IO block\n + /// Provides core-local and inter-core hardware for the two processors, with + /// single-cycle access. + pub const SIO = struct { + pub const base_address = 0xd0000000; + pub const version = "1"; + + /// address: 0xd0000000 + /// Processor core identifier\n + /// Value is 0 when read from processor core 0, and 1 when read from processor core + /// 1. + pub const CPUID = @intToPtr(*volatile u32, base_address + 0x0); + + /// address: 0xd0000004 + /// Input value for GPIO pins + pub const GPIO_IN = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x4); + + /// address: 0xd0000008 + /// Input value for QSPI pins + pub const GPIO_HI_IN = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x8); + + /// address: 0xd0000010 + /// GPIO output value + pub const GPIO_OUT = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x10); + + /// address: 0xd0000014 + /// GPIO output value set + pub const GPIO_OUT_SET = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x14); + + /// address: 0xd0000018 + /// GPIO output value clear + pub const GPIO_OUT_CLR = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x18); + + /// address: 0xd000001c + /// GPIO output value XOR + pub const GPIO_OUT_XOR = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x1c); + + /// address: 0xd0000020 + /// GPIO output enable + pub const GPIO_OE = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x20); + + /// address: 0xd0000024 + /// GPIO output enable set + pub const GPIO_OE_SET = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x24); + + /// address: 0xd0000028 + /// GPIO output enable clear + pub const GPIO_OE_CLR = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x28); + + /// address: 0xd000002c + /// GPIO output enable XOR + pub const GPIO_OE_XOR = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x2c); + + /// address: 0xd0000030 + /// QSPI output value + pub const GPIO_HI_OUT = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x30); + + /// address: 0xd0000034 + /// QSPI output value set + pub const GPIO_HI_OUT_SET = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x34); + + /// address: 0xd0000038 + /// QSPI output value clear + pub const GPIO_HI_OUT_CLR = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x38); + + /// address: 0xd000003c + /// QSPI output value XOR + pub const GPIO_HI_OUT_XOR = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x3c); + + /// address: 0xd0000040 + /// QSPI output enable + pub const GPIO_HI_OE = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x40); + + /// address: 0xd0000044 + /// QSPI output enable set + pub const GPIO_HI_OE_SET = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x44); + + /// address: 0xd0000048 + /// QSPI output enable clear + pub const GPIO_HI_OE_CLR = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x48); + + /// address: 0xd000004c + /// QSPI output enable XOR + pub const GPIO_HI_OE_XOR = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x4c); + + /// address: 0xd0000050 + /// Status register for inter-core FIFOs (mailboxes).\n + /// There is one FIFO in the core 0 -> core 1 direction, and one core 1 -> core 0. + /// Both are 32 bits wide and 8 words deep.\n + /// Core 0 can see the read side of the 1->0 FIFO (RX), and the write side of 0->1 + /// FIFO (TX).\n + /// Core 1 can see the read side of the 0->1 FIFO (RX), and the write side of 1->0 + /// FIFO (TX).\n + /// The SIO IRQ for each core is the logical OR of the VLD, WOF and ROE fields of + /// its FIFO_ST register. + pub const FIFO_ST = @intToPtr(*volatile Mmio(32, packed struct { + /// Value is 1 if this core's RX FIFO is not empty (i.e. if FIFO_RD is valid) + VLD: u1, + /// Value is 1 if this core's TX FIFO is not full (i.e. if FIFO_WR is ready for more + /// data) + RDY: u1, + /// Sticky flag indicating the TX FIFO was written when full. This write was ignored + /// by the FIFO. + WOF: u1, + /// Sticky flag indicating the RX FIFO was read when empty. This read was ignored by + /// the FIFO. + ROE: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + }), base_address + 0x50); + + /// address: 0xd0000054 + /// Write access to this core's TX FIFO + pub const FIFO_WR = @intToPtr(*volatile u32, base_address + 0x54); + + /// address: 0xd0000058 + /// Read access to this core's RX FIFO + pub const FIFO_RD = @intToPtr(*volatile u32, base_address + 0x58); + + /// address: 0xd000005c + /// Spinlock state\n + /// A bitmap containing the state of all 32 spinlocks (1=locked).\n + /// Mainly intended for debugging. + pub const SPINLOCK_ST = @intToPtr(*volatile u32, base_address + 0x5c); + + /// address: 0xd0000060 + /// Divider unsigned dividend\n + /// Write to the DIVIDEND operand of the divider, i.e. the p in `p / q`.\n + /// Any operand write starts a new calculation. The results appear in QUOTIENT, + /// REMAINDER.\n + /// UDIVIDEND/SDIVIDEND are aliases of the same internal register. The U alias + /// starts an\n + /// unsigned calculation, and the S alias starts a signed calculation. + pub const DIV_UDIVIDEND = @intToPtr(*volatile u32, base_address + 0x60); + + /// address: 0xd0000064 + /// Divider unsigned divisor\n + /// Write to the DIVISOR operand of the divider, i.e. the q in `p / q`.\n + /// Any operand write starts a new calculation. The results appear in QUOTIENT, + /// REMAINDER.\n + /// UDIVIDEND/SDIVIDEND are aliases of the same internal register. The U alias + /// starts an\n + /// unsigned calculation, and the S alias starts a signed calculation. + pub const DIV_UDIVISOR = @intToPtr(*volatile u32, base_address + 0x64); + + /// address: 0xd0000068 + /// Divider signed dividend\n + /// The same as UDIVIDEND, but starts a signed calculation, rather than unsigned. + pub const DIV_SDIVIDEND = @intToPtr(*volatile u32, base_address + 0x68); + + /// address: 0xd000006c + /// Divider signed divisor\n + /// The same as UDIVISOR, but starts a signed calculation, rather than unsigned. + pub const DIV_SDIVISOR = @intToPtr(*volatile u32, base_address + 0x6c); + + /// address: 0xd0000070 + /// Divider result quotient\n + /// The result of `DIVIDEND / DIVISOR` (division). Contents undefined while + /// CSR_READY is low.\n + /// For signed calculations, QUOTIENT is negative when the signs of DIVIDEND and + /// DIVISOR differ.\n + /// This register can be written to directly, for context save/restore purposes. + /// This halts any\n + /// in-progress calculation and sets the CSR_READY and CSR_DIRTY flags.\n + /// Reading from QUOTIENT clears the CSR_DIRTY flag, so should read results in the + /// order\n + /// REMAINDER, QUOTIENT if CSR_DIRTY is used. + pub const DIV_QUOTIENT = @intToPtr(*volatile u32, base_address + 0x70); + + /// address: 0xd0000074 + /// Divider result remainder\n + /// The result of `DIVIDEND % DIVISOR` (modulo). Contents undefined while CSR_READY + /// is low.\n + /// For signed calculations, REMAINDER is negative only when DIVIDEND is negative.\n + /// This register can be written to directly, for context save/restore purposes. + /// This halts any\n + /// in-progress calculation and sets the CSR_READY and CSR_DIRTY flags. + pub const DIV_REMAINDER = @intToPtr(*volatile u32, base_address + 0x74); + + /// address: 0xd0000078 + /// Control and status register for divider. + pub const DIV_CSR = @intToPtr(*volatile Mmio(32, packed struct { + /// Reads as 0 when a calculation is in progress, 1 otherwise.\n + /// Writing an operand (xDIVIDEND, xDIVISOR) will immediately start a new + /// calculation, no\n + /// matter if one is already in progress.\n + /// Writing to a result register will immediately terminate any in-progress + /// calculation\n + /// and set the READY and DIRTY flags. + READY: u1, + /// Changes to 1 when any register is written, and back to 0 when QUOTIENT is + /// read.\n + /// Software can use this flag to make save/restore more efficient (skip if not + /// DIRTY).\n + /// If the flag is used in this way, it's recommended to either read QUOTIENT + /// only,\n + /// or REMAINDER and then QUOTIENT, to prevent data loss on context switch. + DIRTY: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + padding29: u1 = 0, + }), base_address + 0x78); + + /// address: 0xd0000080 + /// Read/write access to accumulator 0 + pub const INTERP0_ACCUM0 = @intToPtr(*volatile u32, base_address + 0x80); + + /// address: 0xd0000084 + /// Read/write access to accumulator 1 + pub const INTERP0_ACCUM1 = @intToPtr(*volatile u32, base_address + 0x84); + + /// address: 0xd0000088 + /// Read/write access to BASE0 register. + pub const INTERP0_BASE0 = @intToPtr(*volatile u32, base_address + 0x88); + + /// address: 0xd000008c + /// Read/write access to BASE1 register. + pub const INTERP0_BASE1 = @intToPtr(*volatile u32, base_address + 0x8c); + + /// address: 0xd0000090 + /// Read/write access to BASE2 register. + pub const INTERP0_BASE2 = @intToPtr(*volatile u32, base_address + 0x90); + + /// address: 0xd0000094 + /// Read LANE0 result, and simultaneously write lane results to both accumulators + /// (POP). + pub const INTERP0_POP_LANE0 = @intToPtr(*volatile u32, base_address + 0x94); + + /// address: 0xd0000098 + /// Read LANE1 result, and simultaneously write lane results to both accumulators + /// (POP). + pub const INTERP0_POP_LANE1 = @intToPtr(*volatile u32, base_address + 0x98); + + /// address: 0xd000009c + /// Read FULL result, and simultaneously write lane results to both accumulators + /// (POP). + pub const INTERP0_POP_FULL = @intToPtr(*volatile u32, base_address + 0x9c); + + /// address: 0xd00000a0 + /// Read LANE0 result, without altering any internal state (PEEK). + pub const INTERP0_PEEK_LANE0 = @intToPtr(*volatile u32, base_address + 0xa0); + + /// address: 0xd00000a4 + /// Read LANE1 result, without altering any internal state (PEEK). + pub const INTERP0_PEEK_LANE1 = @intToPtr(*volatile u32, base_address + 0xa4); + + /// address: 0xd00000a8 + /// Read FULL result, without altering any internal state (PEEK). + pub const INTERP0_PEEK_FULL = @intToPtr(*volatile u32, base_address + 0xa8); + + /// address: 0xd00000ac + /// Control register for lane 0 + pub const INTERP0_CTRL_LANE0 = @intToPtr(*volatile Mmio(32, packed struct { + /// Logical right-shift applied to accumulator before masking + SHIFT: u5, + /// The least-significant bit allowed to pass by the mask (inclusive) + MASK_LSB: u5, + /// The most-significant bit allowed to pass by the mask (inclusive)\n + /// Setting MSB < LSB may cause chip to turn inside-out + MASK_MSB: u5, + /// If SIGNED is set, the shifted and masked accumulator value is sign-extended to + /// 32 bits\n + /// before adding to BASE0, and LANE0 PEEK/POP appear extended to 32 bits when read + /// by processor. + SIGNED: u1, + /// If 1, feed the opposite lane's accumulator into this lane's shift + mask + /// hardware.\n + /// Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is before the + /// shift+mask bypass) + CROSS_INPUT: u1, + /// If 1, feed the opposite lane's result into this lane's accumulator on POP. + CROSS_RESULT: u1, + /// If 1, mask + shift is bypassed for LANE0 result. This does not affect FULL + /// result. + ADD_RAW: u1, + /// ORed into bits 29:28 of the lane result presented to the processor on the bus.\n + /// No effect on the internal 32-bit datapath. Handy for using a lane to generate + /// sequence\n + /// of pointers into flash or SRAM. + FORCE_MSB: u2, + /// Only present on INTERP0 on each core. If BLEND mode is enabled:\n + /// - LANE1 result is a linear interpolation between BASE0 and BASE1, controlled\n + /// by the 8 LSBs of lane 1 shift and mask value (a fractional number between\n + /// 0 and 255/256ths)\n + /// - LANE0 result does not have BASE0 added (yields only the 8 LSBs of lane 1 + /// shift+mask value)\n + /// - FULL result does not have lane 1 shift+mask value added (BASE2 + lane 0 + /// shift+mask)\n + /// LANE1 SIGNED flag controls whether the interpolation is signed or unsigned. + BLEND: u1, + reserved0: u1 = 0, + /// Indicates if any masked-off MSBs in ACCUM0 are set. + OVERF0: u1, + /// Indicates if any masked-off MSBs in ACCUM1 are set. + OVERF1: u1, + /// Set if either OVERF0 or OVERF1 is set. + OVERF: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + }), base_address + 0xac); + + /// address: 0xd00000b0 + /// Control register for lane 1 + pub const INTERP0_CTRL_LANE1 = @intToPtr(*volatile Mmio(32, packed struct { + /// Logical right-shift applied to accumulator before masking + SHIFT: u5, + /// The least-significant bit allowed to pass by the mask (inclusive) + MASK_LSB: u5, + /// The most-significant bit allowed to pass by the mask (inclusive)\n + /// Setting MSB < LSB may cause chip to turn inside-out + MASK_MSB: u5, + /// If SIGNED is set, the shifted and masked accumulator value is sign-extended to + /// 32 bits\n + /// before adding to BASE1, and LANE1 PEEK/POP appear extended to 32 bits when read + /// by processor. + SIGNED: u1, + /// If 1, feed the opposite lane's accumulator into this lane's shift + mask + /// hardware.\n + /// Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is before the + /// shift+mask bypass) + CROSS_INPUT: u1, + /// If 1, feed the opposite lane's result into this lane's accumulator on POP. + CROSS_RESULT: u1, + /// If 1, mask + shift is bypassed for LANE1 result. This does not affect FULL + /// result. + ADD_RAW: u1, + /// ORed into bits 29:28 of the lane result presented to the processor on the bus.\n + /// No effect on the internal 32-bit datapath. Handy for using a lane to generate + /// sequence\n + /// of pointers into flash or SRAM. + FORCE_MSB: u2, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + }), base_address + 0xb0); + + /// address: 0xd00000b4 + /// Values written here are atomically added to ACCUM0\n + /// Reading yields lane 0's raw shift and mask value (BASE0 not added). + pub const INTERP0_ACCUM0_ADD = @intToPtr(*volatile MmioInt(32, u24), base_address + 0xb4); + + /// address: 0xd00000b8 + /// Values written here are atomically added to ACCUM1\n + /// Reading yields lane 1's raw shift and mask value (BASE1 not added). + pub const INTERP0_ACCUM1_ADD = @intToPtr(*volatile MmioInt(32, u24), base_address + 0xb8); + + /// address: 0xd00000bc + /// On write, the lower 16 bits go to BASE0, upper bits to BASE1 simultaneously.\n + /// Each half is sign-extended to 32 bits if that lane's SIGNED flag is set. + pub const INTERP0_BASE_1AND0 = @intToPtr(*volatile u32, base_address + 0xbc); + + /// address: 0xd00000c0 + /// Read/write access to accumulator 0 + pub const INTERP1_ACCUM0 = @intToPtr(*volatile u32, base_address + 0xc0); + + /// address: 0xd00000c4 + /// Read/write access to accumulator 1 + pub const INTERP1_ACCUM1 = @intToPtr(*volatile u32, base_address + 0xc4); + + /// address: 0xd00000c8 + /// Read/write access to BASE0 register. + pub const INTERP1_BASE0 = @intToPtr(*volatile u32, base_address + 0xc8); + + /// address: 0xd00000cc + /// Read/write access to BASE1 register. + pub const INTERP1_BASE1 = @intToPtr(*volatile u32, base_address + 0xcc); + + /// address: 0xd00000d0 + /// Read/write access to BASE2 register. + pub const INTERP1_BASE2 = @intToPtr(*volatile u32, base_address + 0xd0); + + /// address: 0xd00000d4 + /// Read LANE0 result, and simultaneously write lane results to both accumulators + /// (POP). + pub const INTERP1_POP_LANE0 = @intToPtr(*volatile u32, base_address + 0xd4); + + /// address: 0xd00000d8 + /// Read LANE1 result, and simultaneously write lane results to both accumulators + /// (POP). + pub const INTERP1_POP_LANE1 = @intToPtr(*volatile u32, base_address + 0xd8); + + /// address: 0xd00000dc + /// Read FULL result, and simultaneously write lane results to both accumulators + /// (POP). + pub const INTERP1_POP_FULL = @intToPtr(*volatile u32, base_address + 0xdc); + + /// address: 0xd00000e0 + /// Read LANE0 result, without altering any internal state (PEEK). + pub const INTERP1_PEEK_LANE0 = @intToPtr(*volatile u32, base_address + 0xe0); + + /// address: 0xd00000e4 + /// Read LANE1 result, without altering any internal state (PEEK). + pub const INTERP1_PEEK_LANE1 = @intToPtr(*volatile u32, base_address + 0xe4); + + /// address: 0xd00000e8 + /// Read FULL result, without altering any internal state (PEEK). + pub const INTERP1_PEEK_FULL = @intToPtr(*volatile u32, base_address + 0xe8); + + /// address: 0xd00000ec + /// Control register for lane 0 + pub const INTERP1_CTRL_LANE0 = @intToPtr(*volatile Mmio(32, packed struct { + /// Logical right-shift applied to accumulator before masking + SHIFT: u5, + /// The least-significant bit allowed to pass by the mask (inclusive) + MASK_LSB: u5, + /// The most-significant bit allowed to pass by the mask (inclusive)\n + /// Setting MSB < LSB may cause chip to turn inside-out + MASK_MSB: u5, + /// If SIGNED is set, the shifted and masked accumulator value is sign-extended to + /// 32 bits\n + /// before adding to BASE0, and LANE0 PEEK/POP appear extended to 32 bits when read + /// by processor. + SIGNED: u1, + /// If 1, feed the opposite lane's accumulator into this lane's shift + mask + /// hardware.\n + /// Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is before the + /// shift+mask bypass) + CROSS_INPUT: u1, + /// If 1, feed the opposite lane's result into this lane's accumulator on POP. + CROSS_RESULT: u1, + /// If 1, mask + shift is bypassed for LANE0 result. This does not affect FULL + /// result. + ADD_RAW: u1, + /// ORed into bits 29:28 of the lane result presented to the processor on the bus.\n + /// No effect on the internal 32-bit datapath. Handy for using a lane to generate + /// sequence\n + /// of pointers into flash or SRAM. + FORCE_MSB: u2, + reserved0: u1 = 0, + /// Only present on INTERP1 on each core. If CLAMP mode is enabled:\n + /// - LANE0 result is shifted and masked ACCUM0, clamped by a lower bound of\n + /// BASE0 and an upper bound of BASE1.\n + /// - Signedness of these comparisons is determined by LANE0_CTRL_SIGNED + CLAMP: u1, + /// Indicates if any masked-off MSBs in ACCUM0 are set. + OVERF0: u1, + /// Indicates if any masked-off MSBs in ACCUM1 are set. + OVERF1: u1, + /// Set if either OVERF0 or OVERF1 is set. + OVERF: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + }), base_address + 0xec); + + /// address: 0xd00000f0 + /// Control register for lane 1 + pub const INTERP1_CTRL_LANE1 = @intToPtr(*volatile Mmio(32, packed struct { + /// Logical right-shift applied to accumulator before masking + SHIFT: u5, + /// The least-significant bit allowed to pass by the mask (inclusive) + MASK_LSB: u5, + /// The most-significant bit allowed to pass by the mask (inclusive)\n + /// Setting MSB < LSB may cause chip to turn inside-out + MASK_MSB: u5, + /// If SIGNED is set, the shifted and masked accumulator value is sign-extended to + /// 32 bits\n + /// before adding to BASE1, and LANE1 PEEK/POP appear extended to 32 bits when read + /// by processor. + SIGNED: u1, + /// If 1, feed the opposite lane's accumulator into this lane's shift + mask + /// hardware.\n + /// Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is before the + /// shift+mask bypass) + CROSS_INPUT: u1, + /// If 1, feed the opposite lane's result into this lane's accumulator on POP. + CROSS_RESULT: u1, + /// If 1, mask + shift is bypassed for LANE1 result. This does not affect FULL + /// result. + ADD_RAW: u1, + /// ORed into bits 29:28 of the lane result presented to the processor on the bus.\n + /// No effect on the internal 32-bit datapath. Handy for using a lane to generate + /// sequence\n + /// of pointers into flash or SRAM. + FORCE_MSB: u2, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + }), base_address + 0xf0); + + /// address: 0xd00000f4 + /// Values written here are atomically added to ACCUM0\n + /// Reading yields lane 0's raw shift and mask value (BASE0 not added). + pub const INTERP1_ACCUM0_ADD = @intToPtr(*volatile MmioInt(32, u24), base_address + 0xf4); + + /// address: 0xd00000f8 + /// Values written here are atomically added to ACCUM1\n + /// Reading yields lane 1's raw shift and mask value (BASE1 not added). + pub const INTERP1_ACCUM1_ADD = @intToPtr(*volatile MmioInt(32, u24), base_address + 0xf8); + + /// address: 0xd00000fc + /// On write, the lower 16 bits go to BASE0, upper bits to BASE1 simultaneously.\n + /// Each half is sign-extended to 32 bits if that lane's SIGNED flag is set. + pub const INTERP1_BASE_1AND0 = @intToPtr(*volatile u32, base_address + 0xfc); + + /// address: 0xd0000100 + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK0 = @intToPtr(*volatile u32, base_address + 0x100); + + /// address: 0xd0000104 + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK1 = @intToPtr(*volatile u32, base_address + 0x104); + + /// address: 0xd0000108 + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK2 = @intToPtr(*volatile u32, base_address + 0x108); + + /// address: 0xd000010c + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK3 = @intToPtr(*volatile u32, base_address + 0x10c); + + /// address: 0xd0000110 + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK4 = @intToPtr(*volatile u32, base_address + 0x110); + + /// address: 0xd0000114 + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK5 = @intToPtr(*volatile u32, base_address + 0x114); + + /// address: 0xd0000118 + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK6 = @intToPtr(*volatile u32, base_address + 0x118); + + /// address: 0xd000011c + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK7 = @intToPtr(*volatile u32, base_address + 0x11c); + + /// address: 0xd0000120 + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK8 = @intToPtr(*volatile u32, base_address + 0x120); + + /// address: 0xd0000124 + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK9 = @intToPtr(*volatile u32, base_address + 0x124); + + /// address: 0xd0000128 + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK10 = @intToPtr(*volatile u32, base_address + 0x128); + + /// address: 0xd000012c + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK11 = @intToPtr(*volatile u32, base_address + 0x12c); + + /// address: 0xd0000130 + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK12 = @intToPtr(*volatile u32, base_address + 0x130); + + /// address: 0xd0000134 + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK13 = @intToPtr(*volatile u32, base_address + 0x134); + + /// address: 0xd0000138 + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK14 = @intToPtr(*volatile u32, base_address + 0x138); + + /// address: 0xd000013c + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK15 = @intToPtr(*volatile u32, base_address + 0x13c); + + /// address: 0xd0000140 + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK16 = @intToPtr(*volatile u32, base_address + 0x140); + + /// address: 0xd0000144 + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK17 = @intToPtr(*volatile u32, base_address + 0x144); + + /// address: 0xd0000148 + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK18 = @intToPtr(*volatile u32, base_address + 0x148); + + /// address: 0xd000014c + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK19 = @intToPtr(*volatile u32, base_address + 0x14c); + + /// address: 0xd0000150 + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK20 = @intToPtr(*volatile u32, base_address + 0x150); + + /// address: 0xd0000154 + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK21 = @intToPtr(*volatile u32, base_address + 0x154); + + /// address: 0xd0000158 + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK22 = @intToPtr(*volatile u32, base_address + 0x158); + + /// address: 0xd000015c + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK23 = @intToPtr(*volatile u32, base_address + 0x15c); + + /// address: 0xd0000160 + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK24 = @intToPtr(*volatile u32, base_address + 0x160); + + /// address: 0xd0000164 + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK25 = @intToPtr(*volatile u32, base_address + 0x164); + + /// address: 0xd0000168 + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK26 = @intToPtr(*volatile u32, base_address + 0x168); + + /// address: 0xd000016c + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK27 = @intToPtr(*volatile u32, base_address + 0x16c); + + /// address: 0xd0000170 + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK28 = @intToPtr(*volatile u32, base_address + 0x170); + + /// address: 0xd0000174 + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK29 = @intToPtr(*volatile u32, base_address + 0x174); + + /// address: 0xd0000178 + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK30 = @intToPtr(*volatile u32, base_address + 0x178); + + /// address: 0xd000017c + /// Reading from a spinlock address will:\n + /// - Return 0 if lock is already locked\n + /// - Otherwise return nonzero, and simultaneously claim the lock\n\n + /// Writing (any value) releases the lock.\n + /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 + /// wins.\n + /// The value returned on success is 0x1 << lock number. + pub const SPINLOCK31 = @intToPtr(*volatile u32, base_address + 0x17c); + }; + pub const PPB = struct { + pub const base_address = 0xe0000000; + pub const version = "1"; + + /// address: 0xe000e010 + /// Use the SysTick Control and Status Register to enable the SysTick features. + pub const SYST_CSR = @intToPtr(*volatile Mmio(32, packed struct { + /// Enable SysTick counter:\n + /// 0 = Counter disabled.\n + /// 1 = Counter enabled. + ENABLE: u1, + /// Enables SysTick exception request:\n + /// 0 = Counting down to zero does not assert the SysTick exception request.\n + /// 1 = Counting down to zero to asserts the SysTick exception request. + TICKINT: u1, + /// SysTick clock source. Always reads as one if SYST_CALIB reports NOREF.\n + /// Selects the SysTick timer clock source:\n + /// 0 = External reference clock.\n + /// 1 = Processor clock. + CLKSOURCE: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// Returns 1 if timer counted to 0 since last time this was read. Clears on read by + /// application or debugger. + COUNTFLAG: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + }), base_address + 0xe010); + + /// address: 0xe000e014 + /// Use the SysTick Reload Value Register to specify the start value to load into + /// the current value register when the counter reaches 0. It can be any value + /// between 0 and 0x00FFFFFF. A start value of 0 is possible, but has no effect + /// because the SysTick interrupt and COUNTFLAG are activated when counting from 1 + /// to 0. The reset value of this register is UNKNOWN.\n + /// To generate a multi-shot timer with a period of N processor clock cycles, use a + /// RELOAD value of N-1. For example, if the SysTick interrupt is required every 100 + /// clock pulses, set RELOAD to 99. + pub const SYST_RVR = @intToPtr(*volatile Mmio(32, packed struct { + /// Value to load into the SysTick Current Value Register when the counter reaches + /// 0. + RELOAD: u24, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0xe014); + + /// address: 0xe000e018 + /// Use the SysTick Current Value Register to find the current value in the + /// register. The reset value of this register is UNKNOWN. + pub const SYST_CVR = @intToPtr(*volatile Mmio(32, packed struct { + /// Reads return the current value of the SysTick counter. This register is + /// write-clear. Writing to it with any value clears the register to 0. Clearing + /// this register also clears the COUNTFLAG bit of the SysTick Control and Status + /// Register. + CURRENT: u24, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0xe018); + + /// address: 0xe000e01c + /// Use the SysTick Calibration Value Register to enable software to scale to any + /// required speed using divide and multiply. + pub const SYST_CALIB = @intToPtr(*volatile Mmio(32, packed struct { + /// An optional Reload value to be used for 10ms (100Hz) timing, subject to system + /// clock skew errors. If the value reads as 0, the calibration value is not known. + TENMS: u24, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + /// If reads as 1, the calibration value for 10ms is inexact (due to clock + /// frequency). + SKEW: u1, + /// If reads as 1, the Reference clock is not provided - the CLKSOURCE bit of the + /// SysTick Control and Status register will be forced to 1 and cannot be cleared to + /// 0. + NOREF: u1, + }), base_address + 0xe01c); + + /// address: 0xe000e100 + /// Use the Interrupt Set-Enable Register to enable interrupts and determine which + /// interrupts are currently enabled.\n + /// If a pending interrupt is enabled, the NVIC activates the interrupt based on its + /// priority. If an interrupt is not enabled, asserting its interrupt signal changes + /// the interrupt state to pending, but the NVIC never activates the interrupt, + /// regardless of its priority. + pub const NVIC_ISER = @intToPtr(*volatile Mmio(32, packed struct { + /// Interrupt set-enable bits.\n + /// Write:\n + /// 0 = No effect.\n + /// 1 = Enable interrupt.\n + /// Read:\n + /// 0 = Interrupt disabled.\n + /// 1 = Interrupt enabled. + SETENA: u32, + }), base_address + 0xe100); + + /// address: 0xe000e180 + /// Use the Interrupt Clear-Enable Registers to disable interrupts and determine + /// which interrupts are currently enabled. + pub const NVIC_ICER = @intToPtr(*volatile Mmio(32, packed struct { + /// Interrupt clear-enable bits.\n + /// Write:\n + /// 0 = No effect.\n + /// 1 = Disable interrupt.\n + /// Read:\n + /// 0 = Interrupt disabled.\n + /// 1 = Interrupt enabled. + CLRENA: u32, + }), base_address + 0xe180); + + /// address: 0xe000e200 + /// The NVIC_ISPR forces interrupts into the pending state, and shows which + /// interrupts are pending. + pub const NVIC_ISPR = @intToPtr(*volatile Mmio(32, packed struct { + /// Interrupt set-pending bits.\n + /// Write:\n + /// 0 = No effect.\n + /// 1 = Changes interrupt state to pending.\n + /// Read:\n + /// 0 = Interrupt is not pending.\n + /// 1 = Interrupt is pending.\n + /// Note: Writing 1 to the NVIC_ISPR bit corresponding to:\n + /// An interrupt that is pending has no effect.\n + /// A disabled interrupt sets the state of that interrupt to pending. + SETPEND: u32, + }), base_address + 0xe200); + + /// address: 0xe000e280 + /// Use the Interrupt Clear-Pending Register to clear pending interrupts and + /// determine which interrupts are currently pending. + pub const NVIC_ICPR = @intToPtr(*volatile Mmio(32, packed struct { + /// Interrupt clear-pending bits.\n + /// Write:\n + /// 0 = No effect.\n + /// 1 = Removes pending state and interrupt.\n + /// Read:\n + /// 0 = Interrupt is not pending.\n + /// 1 = Interrupt is pending. + CLRPEND: u32, + }), base_address + 0xe280); + + /// address: 0xe000e400 + /// Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of + /// the available interrupts. 0 is the highest priority, and 3 is the lowest.\n + /// Note: Writing 1 to an NVIC_ICPR bit does not affect the active state of the + /// corresponding interrupt.\n + /// These registers are only word-accessible + pub const NVIC_IPR0 = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + /// Priority of interrupt 0 + IP_0: u2, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + /// Priority of interrupt 1 + IP_1: u2, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// Priority of interrupt 2 + IP_2: u2, + reserved18: u1 = 0, + reserved19: u1 = 0, + reserved20: u1 = 0, + reserved21: u1 = 0, + reserved22: u1 = 0, + reserved23: u1 = 0, + /// Priority of interrupt 3 + IP_3: u2, + }), base_address + 0xe400); + + /// address: 0xe000e404 + /// Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of + /// the available interrupts. 0 is the highest priority, and 3 is the lowest. + pub const NVIC_IPR1 = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + /// Priority of interrupt 4 + IP_4: u2, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + /// Priority of interrupt 5 + IP_5: u2, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// Priority of interrupt 6 + IP_6: u2, + reserved18: u1 = 0, + reserved19: u1 = 0, + reserved20: u1 = 0, + reserved21: u1 = 0, + reserved22: u1 = 0, + reserved23: u1 = 0, + /// Priority of interrupt 7 + IP_7: u2, + }), base_address + 0xe404); + + /// address: 0xe000e408 + /// Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of + /// the available interrupts. 0 is the highest priority, and 3 is the lowest. + pub const NVIC_IPR2 = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + /// Priority of interrupt 8 + IP_8: u2, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + /// Priority of interrupt 9 + IP_9: u2, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// Priority of interrupt 10 + IP_10: u2, + reserved18: u1 = 0, + reserved19: u1 = 0, + reserved20: u1 = 0, + reserved21: u1 = 0, + reserved22: u1 = 0, + reserved23: u1 = 0, + /// Priority of interrupt 11 + IP_11: u2, + }), base_address + 0xe408); + + /// address: 0xe000e40c + /// Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of + /// the available interrupts. 0 is the highest priority, and 3 is the lowest. + pub const NVIC_IPR3 = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + /// Priority of interrupt 12 + IP_12: u2, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + /// Priority of interrupt 13 + IP_13: u2, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// Priority of interrupt 14 + IP_14: u2, + reserved18: u1 = 0, + reserved19: u1 = 0, + reserved20: u1 = 0, + reserved21: u1 = 0, + reserved22: u1 = 0, + reserved23: u1 = 0, + /// Priority of interrupt 15 + IP_15: u2, + }), base_address + 0xe40c); + + /// address: 0xe000e410 + /// Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of + /// the available interrupts. 0 is the highest priority, and 3 is the lowest. + pub const NVIC_IPR4 = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + /// Priority of interrupt 16 + IP_16: u2, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + /// Priority of interrupt 17 + IP_17: u2, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// Priority of interrupt 18 + IP_18: u2, + reserved18: u1 = 0, + reserved19: u1 = 0, + reserved20: u1 = 0, + reserved21: u1 = 0, + reserved22: u1 = 0, + reserved23: u1 = 0, + /// Priority of interrupt 19 + IP_19: u2, + }), base_address + 0xe410); + + /// address: 0xe000e414 + /// Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of + /// the available interrupts. 0 is the highest priority, and 3 is the lowest. + pub const NVIC_IPR5 = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + /// Priority of interrupt 20 + IP_20: u2, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + /// Priority of interrupt 21 + IP_21: u2, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// Priority of interrupt 22 + IP_22: u2, + reserved18: u1 = 0, + reserved19: u1 = 0, + reserved20: u1 = 0, + reserved21: u1 = 0, + reserved22: u1 = 0, + reserved23: u1 = 0, + /// Priority of interrupt 23 + IP_23: u2, + }), base_address + 0xe414); + + /// address: 0xe000e418 + /// Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of + /// the available interrupts. 0 is the highest priority, and 3 is the lowest. + pub const NVIC_IPR6 = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + /// Priority of interrupt 24 + IP_24: u2, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + /// Priority of interrupt 25 + IP_25: u2, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// Priority of interrupt 26 + IP_26: u2, + reserved18: u1 = 0, + reserved19: u1 = 0, + reserved20: u1 = 0, + reserved21: u1 = 0, + reserved22: u1 = 0, + reserved23: u1 = 0, + /// Priority of interrupt 27 + IP_27: u2, + }), base_address + 0xe418); + + /// address: 0xe000e41c + /// Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of + /// the available interrupts. 0 is the highest priority, and 3 is the lowest. + pub const NVIC_IPR7 = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + /// Priority of interrupt 28 + IP_28: u2, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + /// Priority of interrupt 29 + IP_29: u2, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + /// Priority of interrupt 30 + IP_30: u2, + reserved18: u1 = 0, + reserved19: u1 = 0, + reserved20: u1 = 0, + reserved21: u1 = 0, + reserved22: u1 = 0, + reserved23: u1 = 0, + /// Priority of interrupt 31 + IP_31: u2, + }), base_address + 0xe41c); + + /// address: 0xe000ed00 + /// Read the CPU ID Base Register to determine: the ID number of the processor core, + /// the version number of the processor core, the implementation details of the + /// processor core. + pub const CPUID = @intToPtr(*volatile Mmio(32, packed struct { + /// Minor revision number m in the rnpm revision status:\n + /// 0x1 = Patch 1. + REVISION: u4, + /// Number of processor within family: 0xC60 = Cortex-M0+ + PARTNO: u12, + /// Constant that defines the architecture of the processor:\n + /// 0xC = ARMv6-M architecture. + ARCHITECTURE: u4, + /// Major revision number n in the rnpm revision status:\n + /// 0x0 = Revision 0. + VARIANT: u4, + /// Implementor code: 0x41 = ARM + IMPLEMENTER: u8, + }), base_address + 0xed00); + + /// address: 0xe000ed04 + /// Use the Interrupt Control State Register to set a pending Non-Maskable Interrupt + /// (NMI), set or clear a pending PendSV, set or clear a pending SysTick, check for + /// pending exceptions, check the vector number of the highest priority pended + /// exception, check the vector number of the active exception. + pub const ICSR = @intToPtr(*volatile Mmio(32, packed struct { + /// Active exception number field. Reset clears the VECTACTIVE field. + VECTACTIVE: u9, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + /// Indicates the exception number for the highest priority pending exception: 0 = + /// no pending exceptions. Non zero = The pending state includes the effect of + /// memory-mapped enable and mask registers. It does not include the PRIMASK + /// special-purpose register qualifier. + VECTPENDING: u9, + reserved3: u1 = 0, + /// External interrupt pending flag + ISRPENDING: u1, + /// The system can only access this bit when the core is halted. It indicates that a + /// pending interrupt is to be taken in the next running cycle. If C_MASKINTS is + /// clear in the Debug Halting Control and Status Register, the interrupt is + /// serviced. + ISRPREEMPT: u1, + reserved4: u1 = 0, + /// SysTick exception clear-pending bit.\n + /// Write:\n + /// 0 = No effect.\n + /// 1 = Removes the pending state from the SysTick exception.\n + /// This bit is WO. On a register read its value is Unknown. + PENDSTCLR: u1, + /// SysTick exception set-pending bit.\n + /// Write:\n + /// 0 = No effect.\n + /// 1 = Changes SysTick exception state to pending.\n + /// Read:\n + /// 0 = SysTick exception is not pending.\n + /// 1 = SysTick exception is pending. + PENDSTSET: u1, + /// PendSV clear-pending bit.\n + /// Write:\n + /// 0 = No effect.\n + /// 1 = Removes the pending state from the PendSV exception. + PENDSVCLR: u1, + /// PendSV set-pending bit.\n + /// Write:\n + /// 0 = No effect.\n + /// 1 = Changes PendSV exception state to pending.\n + /// Read:\n + /// 0 = PendSV exception is not pending.\n + /// 1 = PendSV exception is pending.\n + /// Writing 1 to this bit is the only way to set the PendSV exception state to + /// pending. + PENDSVSET: u1, + reserved5: u1 = 0, + reserved6: u1 = 0, + /// Setting this bit will activate an NMI. Since NMI is the highest priority + /// exception, it will activate as soon as it is registered.\n + /// NMI set-pending bit.\n + /// Write:\n + /// 0 = No effect.\n + /// 1 = Changes NMI exception state to pending.\n + /// Read:\n + /// 0 = NMI exception is not pending.\n + /// 1 = NMI exception is pending.\n + /// Because NMI is the highest-priority exception, normally the processor enters the + /// NMI\n + /// exception handler as soon as it detects a write of 1 to this bit. Entering the + /// handler then clears\n + /// this bit to 0. This means a read of this bit by the NMI exception handler + /// returns 1 only if the\n + /// NMI signal is reasserted while the processor is executing that handler. + NMIPENDSET: u1, + }), base_address + 0xed04); + + /// address: 0xe000ed08 + /// The VTOR holds the vector table offset address. + pub const VTOR = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// Bits [31:8] of the indicate the vector table offset address. + TBLOFF: u24, + }), base_address + 0xed08); + + /// address: 0xe000ed0c + /// Use the Application Interrupt and Reset Control Register to: determine data + /// endianness, clear all active state information from debug halt mode, request a + /// system reset. + pub const AIRCR = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + /// Clears all active state information for fixed and configurable exceptions. This + /// bit: is self-clearing, can only be set by the DAP when the core is halted. When + /// set: clears all active exception status of the processor, forces a return to + /// Thread mode, forces an IPSR of 0. A debugger must re-initialize the stack. + VECTCLRACTIVE: u1, + /// Writing 1 to this bit causes the SYSRESETREQ signal to the outer system to be + /// asserted to request a reset. The intention is to force a large system reset of + /// all major components except for debug. The C_HALT bit in the DHCSR is cleared as + /// a result of the system reset requested. The debugger does not lose contact with + /// the device. + SYSRESETREQ: u1, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + /// Data endianness implemented:\n + /// 0 = Little-endian. + ENDIANESS: u1, + /// Register key:\n + /// Reads as Unknown\n + /// On writes, write 0x05FA to VECTKEY, otherwise the write is ignored. + VECTKEY: u16, + }), base_address + 0xed0c); + + /// address: 0xe000ed10 + /// System Control Register. Use the System Control Register for power-management + /// functions: signal to the system when the processor can enter a low power state, + /// control how the processor enters and exits low power states. + pub const SCR = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + /// Indicates sleep-on-exit when returning from Handler mode to Thread mode:\n + /// 0 = Do not sleep when returning to Thread mode.\n + /// 1 = Enter sleep, or deep sleep, on return from an ISR to Thread mode.\n + /// Setting this bit to 1 enables an interrupt driven application to avoid returning + /// to an empty main application. + SLEEPONEXIT: u1, + /// Controls whether the processor uses sleep or deep sleep as its low power mode:\n + /// 0 = Sleep.\n + /// 1 = Deep sleep. + SLEEPDEEP: u1, + reserved1: u1 = 0, + /// Send Event on Pending bit:\n + /// 0 = Only enabled interrupts or events can wakeup the processor, disabled + /// interrupts are excluded.\n + /// 1 = Enabled events and all interrupts, including disabled interrupts, can wakeup + /// the processor.\n + /// When an event or interrupt becomes pending, the event signal wakes up the + /// processor from WFE. If the\n + /// processor is not waiting for an event, the event is registered and affects the + /// next WFE.\n + /// The processor also wakes up on execution of an SEV instruction or an external + /// event. + SEVONPEND: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + }), base_address + 0xed10); + + /// address: 0xe000ed14 + /// The Configuration and Control Register permanently enables stack alignment and + /// causes unaligned accesses to result in a Hard Fault. + pub const CCR = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + /// Always reads as one, indicates that all unaligned accesses generate a HardFault. + UNALIGN_TRP: u1, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + /// Always reads as one, indicates 8-byte stack alignment on exception entry. On + /// exception entry, the processor uses bit[9] of the stacked PSR to indicate the + /// stack alignment. On return from the exception it uses this stacked bit to + /// restore the correct stack alignment. + STKALIGN: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + }), base_address + 0xed14); + + /// address: 0xe000ed1c + /// System handlers are a special class of exception handler that can have their + /// priority set to any of the priority levels. Use the System Handler Priority + /// Register 2 to set the priority of SVCall. + pub const SHPR2 = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + reserved18: u1 = 0, + reserved19: u1 = 0, + reserved20: u1 = 0, + reserved21: u1 = 0, + reserved22: u1 = 0, + reserved23: u1 = 0, + reserved24: u1 = 0, + reserved25: u1 = 0, + reserved26: u1 = 0, + reserved27: u1 = 0, + reserved28: u1 = 0, + reserved29: u1 = 0, + /// Priority of system handler 11, SVCall + PRI_11: u2, + }), base_address + 0xed1c); + + /// address: 0xe000ed20 + /// System handlers are a special class of exception handler that can have their + /// priority set to any of the priority levels. Use the System Handler Priority + /// Register 3 to set the priority of PendSV and SysTick. + pub const SHPR3 = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + reserved18: u1 = 0, + reserved19: u1 = 0, + reserved20: u1 = 0, + reserved21: u1 = 0, + /// Priority of system handler 14, PendSV + PRI_14: u2, + reserved22: u1 = 0, + reserved23: u1 = 0, + reserved24: u1 = 0, + reserved25: u1 = 0, + reserved26: u1 = 0, + reserved27: u1 = 0, + /// Priority of system handler 15, SysTick + PRI_15: u2, + }), base_address + 0xed20); + + /// address: 0xe000ed24 + /// Use the System Handler Control and State Register to determine or clear the + /// pending status of SVCall. + pub const SHCSR = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + /// Reads as 1 if SVCall is Pending. Write 1 to set pending SVCall, write 0 to clear + /// pending SVCall. + SVCALLPENDED: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + }), base_address + 0xed24); + + /// address: 0xe000ed90 + /// Read the MPU Type Register to determine if the processor implements an MPU, and + /// how many regions the MPU supports. + pub const MPU_TYPE = @intToPtr(*volatile Mmio(32, packed struct { + /// Indicates support for separate instruction and data address maps. Reads as 0 as + /// ARMv6-M only supports a unified MPU. + SEPARATE: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + reserved6: u1 = 0, + /// Number of regions supported by the MPU. + DREGION: u8, + /// Instruction region. Reads as zero as ARMv6-M only supports a unified MPU. + IREGION: u8, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + }), base_address + 0xed90); + + /// address: 0xe000ed94 + /// Use the MPU Control Register to enable and disable the MPU, and to control + /// whether the default memory map is enabled as a background region for privileged + /// accesses, and whether the MPU is enabled for HardFaults and NMIs. + pub const MPU_CTRL = @intToPtr(*volatile Mmio(32, packed struct { + /// Enables the MPU. If the MPU is disabled, privileged and unprivileged accesses + /// use the default memory map.\n + /// 0 = MPU disabled.\n + /// 1 = MPU enabled. + ENABLE: u1, + /// Controls the use of the MPU for HardFaults and NMIs. Setting this bit when + /// ENABLE is clear results in UNPREDICTABLE behaviour.\n + /// When the MPU is enabled:\n + /// 0 = MPU is disabled during HardFault and NMI handlers, regardless of the value + /// of the ENABLE bit.\n + /// 1 = the MPU is enabled during HardFault and NMI handlers. + HFNMIENA: u1, + /// Controls whether the default memory map is enabled as a background region for + /// privileged accesses. This bit is ignored when ENABLE is clear.\n + /// 0 = If the MPU is enabled, disables use of the default memory map. Any memory + /// access to a location not\n + /// covered by any enabled region causes a fault.\n + /// 1 = If the MPU is enabled, enables use of the default memory map as a background + /// region for privileged software accesses.\n + /// When enabled, the background region acts as if it is region number -1. Any + /// region that is defined and enabled has priority over this default map. + PRIVDEFENA: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + padding28: u1 = 0, + }), base_address + 0xed94); + + /// address: 0xe000ed98 + /// Use the MPU Region Number Register to select the region currently accessed by + /// MPU_RBAR and MPU_RASR. + pub const MPU_RNR = @intToPtr(*volatile Mmio(32, packed struct { + /// Indicates the MPU region referenced by the MPU_RBAR and MPU_RASR registers.\n + /// The MPU supports 8 memory regions, so the permitted values of this field are + /// 0-7. + REGION: u4, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + padding16: u1 = 0, + padding17: u1 = 0, + padding18: u1 = 0, + padding19: u1 = 0, + padding20: u1 = 0, + padding21: u1 = 0, + padding22: u1 = 0, + padding23: u1 = 0, + padding24: u1 = 0, + padding25: u1 = 0, + padding26: u1 = 0, + padding27: u1 = 0, + }), base_address + 0xed98); + + /// address: 0xe000ed9c + /// Read the MPU Region Base Address Register to determine the base address of the + /// region identified by MPU_RNR. Write to update the base address of said region or + /// that of a specified region, with whose number MPU_RNR will also be updated. + pub const MPU_RBAR = @intToPtr(*volatile Mmio(32, packed struct { + /// On writes, specifies the number of the region whose base address to update + /// provided VALID is set written as 1. On reads, returns bits [3:0] of MPU_RNR. + REGION: u4, + /// On writes, indicates whether the write must update the base address of the + /// region identified by the REGION field, updating the MPU_RNR to indicate this new + /// region.\n + /// Write:\n + /// 0 = MPU_RNR not changed, and the processor:\n + /// Updates the base address for the region specified in the MPU_RNR.\n + /// Ignores the value of the REGION field.\n + /// 1 = The processor:\n + /// Updates the value of the MPU_RNR to the value of the REGION field.\n + /// Updates the base address for the region specified in the REGION field.\n + /// Always reads as zero. + VALID: u1, + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + /// Base address of the region. + ADDR: u24, + }), base_address + 0xed9c); + + /// address: 0xe000eda0 + /// Use the MPU Region Attribute and Size Register to define the size, access + /// behaviour and memory type of the region identified by MPU_RNR, and enable that + /// region. + pub const MPU_RASR = @intToPtr(*volatile Mmio(32, packed struct { + /// Enables the region. + ENABLE: u1, + /// Indicates the region size. Region size in bytes = 2^(SIZE+1). The minimum + /// permitted value is 7 (b00111) = 256Bytes + SIZE: u5, + reserved0: u1 = 0, + reserved1: u1 = 0, + /// Subregion Disable. For regions of 256 bytes or larger, each bit of this field + /// controls whether one of the eight equal subregions is enabled. + SRD: u8, + /// The MPU Region Attribute field. Use to define the region attribute control.\n + /// 28 = XN: Instruction access disable bit:\n + /// 0 = Instruction fetches enabled.\n + /// 1 = Instruction fetches disabled.\n + /// 26:24 = AP: Access permission field\n + /// 18 = S: Shareable bit\n + /// 17 = C: Cacheable bit\n + /// 16 = B: Bufferable bit + ATTRS: u16, + }), base_address + 0xeda0); + }; +}; + +const std = @import("std"); + +pub fn mmio(addr: usize, comptime size: u8, comptime PackedT: type) *volatile Mmio(size, PackedT) { + return @intToPtr(*volatile Mmio(size, PackedT), addr); +} + +pub fn Mmio(comptime size: u8, comptime PackedT: type) type { + if ((size % 8) != 0) + @compileError("size must be divisible by 8!"); + + if (!std.math.isPowerOfTwo(size / 8)) + @compileError("size must encode a power of two number of bytes!"); + + const IntT = std.meta.Int(.unsigned, size); + + if (@sizeOf(PackedT) != (size / 8)) + @compileError(std.fmt.comptimePrint("IntT and PackedT must have the same size!, they are {} and {} bytes respectively", .{ size / 8, @sizeOf(PackedT) })); + + return extern struct { + const Self = @This(); + + raw: IntT, + + pub const underlying_type = PackedT; + + pub inline fn read(addr: *volatile Self) PackedT { + return @bitCast(PackedT, addr.raw); + } + + pub inline fn write(addr: *volatile Self, val: PackedT) void { + // This is a workaround for a compiler bug related to miscompilation + // If the tmp var is not used, result location will fuck things up + var tmp = @bitCast(IntT, val); + addr.raw = tmp; + } + + pub inline fn modify(addr: *volatile Self, fields: anytype) void { + var val = read(addr); + inline for (@typeInfo(@TypeOf(fields)).Struct.fields) |field| { + @field(val, field.name) = @field(fields, field.name); + } + write(addr, val); + } + + pub inline fn toggle(addr: *volatile Self, fields: anytype) void { + var val = read(addr); + inline for (@typeInfo(@TypeOf(fields)).Struct.fields) |field| { + @field(val, @tagName(field.default_value.?)) = !@field(val, @tagName(field.default_value.?)); + } + write(addr, val); + } + }; +} + +pub fn MmioInt(comptime size: u8, comptime T: type) type { + return extern struct { + const Self = @This(); + + raw: std.meta.Int(.unsigned, size), + + pub inline fn read(addr: *volatile Self) T { + return @truncate(T, addr.raw); + } + + pub inline fn modify(addr: *volatile Self, val: T) void { + const Int = std.meta.Int(.unsigned, size); + const mask = ~@as(Int, (1 << @bitSizeOf(T)) - 1); + + var tmp = addr.raw; + addr.raw = (tmp & mask) | val; + } + }; +} + +pub fn mmioInt(addr: usize, comptime size: usize, comptime T: type) *volatile MmioInt(size, T) { + return @intToPtr(*volatile MmioInt(size, T), addr); +} + +const InterruptVector = extern union { + C: fn () callconv(.C) void, + Naked: fn () callconv(.Naked) void, + // Interrupt is not supported on arm +}; + +const unhandled = InterruptVector{ + .C = struct { + fn tmp() callconv(.C) noreturn { + @panic("unhandled interrupt"); + } + }.tmp, +}; From c2a6b718e7fd8fc9d161ddfe95523e3dde602637 Mon Sep 17 00:00:00 2001 From: Matt Knight Date: Tue, 7 Jun 2022 01:20:38 -0700 Subject: [PATCH 002/286] add license remove microzig submodule remove submodule --- .gitmodules | 3 --- LICENSE | 11 +++++++++++ microzig | 1 - 3 files changed, 11 insertions(+), 4 deletions(-) delete mode 100644 .gitmodules create mode 100644 LICENSE delete mode 160000 microzig diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index fdd0dab01..000000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "microzig"] - path = microzig - url = git@github.com:ZigEmbeddedGroup/microzig.git diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..8df59b21f --- /dev/null +++ b/LICENSE @@ -0,0 +1,11 @@ +Copyright (c) 2022 Zig Embedded Group contributors + +This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source distribution. diff --git a/microzig b/microzig deleted file mode 160000 index ac19b7de8..000000000 --- a/microzig +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ac19b7de8eb1551e603b3ce23a4aab69c71d1216 From 7d68b0bcbad63501235ea6a25f483d04678000f9 Mon Sep 17 00:00:00 2001 From: Matt Knight Date: Sun, 3 Jul 2022 07:52:26 -0700 Subject: [PATCH 003/286] pads bank bits set when setting gpio function --- src/hal/gpio.zig | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/hal/gpio.zig b/src/hal/gpio.zig index ab0f66696..defc71962 100644 --- a/src/hal/gpio.zig +++ b/src/hal/gpio.zig @@ -90,6 +90,12 @@ pub const Enabled = enum { enabled, }; +pub inline fn reset() void { + regs.RESETS.RESET.modify(.{ .io_bank0 = 1, .pads_bank0 = 1 }); + while (regs.RESETS.RESET_DONE.read().io_bank0 == 1) {} + while (regs.RESETS.RESET_DONE.read().pads_bank0 == 1) {} +} + //const gpio_num = gpio_num: { // // calculate max gpios using comptime parsing //}; @@ -122,8 +128,14 @@ pub inline fn put(comptime gpio: u32, value: u1) void { } pub inline fn setFunction(comptime gpio: u32, function: Function) void { - const reg_name = comptime std.fmt.comptimePrint("GPIO{}_CTRL", .{gpio}); - @field(regs.IO_BANK0, reg_name).write(.{ + const pad_bank_reg = comptime std.fmt.comptimePrint("GPIO{}", .{gpio}); + @field(regs.PADS_BANK0, pad_bank_reg).modify(.{ + .IE = 1, + .OD = 0, + }); + + const io_bank_reg = comptime std.fmt.comptimePrint("GPIO{}_CTRL", .{gpio}); + @field(regs.IO_BANK0, io_bank_reg).write(.{ .FUNCSEL = @enumToInt(function), .OUTOVER = 0, .INOVER = 0, From e541f966d42004acbcba9a939c0acfb604a3b4d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20=27vesim=27=20Kuli=C5=84ski?= Date: Wed, 6 Jul 2022 21:29:36 +0200 Subject: [PATCH 004/286] multicore: add initial support --- src/hal.zig | 1 + src/hal/multicore.zig | 109 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 src/hal/multicore.zig diff --git a/src/hal.zig b/src/hal.zig index 41f474420..ae181dad4 100644 --- a/src/hal.zig +++ b/src/hal.zig @@ -2,6 +2,7 @@ const microzig = @import("microzig"); const regs = microzig.chip.regsisters; pub const gpio = @import("hal/gpio.zig"); pub const clocks = @import("hal/clocks.zig"); +pub const multicore = @import("hal/multicore.zig"); pub const default_clock_config = clocks.GlobalConfiguration.init(.{ //.ref = .{ .source = .src_xosc }, diff --git a/src/hal/multicore.zig b/src/hal/multicore.zig new file mode 100644 index 000000000..5c95c1334 --- /dev/null +++ b/src/hal/multicore.zig @@ -0,0 +1,109 @@ +const std = @import("std"); +const microzig = @import("microzig"); +const regs = microzig.chip.registers; +const assert = std.debug.assert; + +pub const fifo = struct { + /// Check if the FIFO has valid data for reading. + pub fn is_read_ready() bool { + return regs.SIO.FIFO_ST.read().VLD == 1; + } + + /// Read from the FIFO + /// Will return null if it is empty. + pub fn read() ?u32 { + if (!is_read_ready()) + return null; + + return regs.SIO.FIFO_RD.*; + } + + /// Read from the FIFO, waiting for data if there is none. + pub fn read_blocking() u32 { + while (true) { + if (read()) |value| return value; + microzig.cpu.wfe(); + } + } + + /// Read from the FIFO, and throw everyting away. + pub fn drain() void { + while (read()) |_| {} + } + + /// Check if the FIFO is ready to receive data. + pub fn is_write_ready() bool { + return regs.SIO.FIFO_ST.read().RDY == 1; + } + + /// Write to the FIFO + /// You must check if there is space by calling is_write_ready + pub fn write(value: u32) void { + regs.SIO.FIFO_WR.* = value; + microzig.cpu.sev(); + } + + /// Write to the FIFO, waiting for room if it is full. + pub fn write_blocking(value: u32) void { + while (!is_write_ready()) + std.mem.doNotOptimizeAway(value); + + write(value); + } +}; + +var core1_stack: [128]u32 = undefined; + +/// Runs `entrypoint` on the second core. +pub fn launchCore1(entrypoint: fn () void) void { + launchCore1WithStack(entrypoint, &core1_stack); +} + +pub fn launchCore1WithStack(entrypoint: fn () void, stack: []u32) void { + // TODO: disable SIO interrupts + + const wrapper = struct { + fn wrapper(_: u32, _: u32, _: u32, _: u32, entry: u32, stack_base: [*]u32) callconv(.C) void { + // TODO: protect stack using MPU + _ = stack_base; + @intToPtr(fn () void, entry)(); + } + }.wrapper; + + // reset the second core + regs.PSM.FRCE_OFF.modify(.{ .proc1 = 1 }); + while (regs.PSM.FRCE_OFF.read().proc1 != 1) microzig.cpu.nop(); + regs.PSM.FRCE_OFF.modify(.{ .proc1 = 0 }); + + stack[stack.len - 2] = @ptrToInt(entrypoint); + stack[stack.len - 1] = @ptrToInt(stack.ptr); + + // calculate top of the stack + const stack_ptr: u32 = + @ptrToInt(stack.ptr) + + (stack.len - 2) * @sizeOf(u32); // pop the two elements we "pushed" above + + // after reseting core1 is waiting for this specific sequence + const cmds: [6]u32 = .{ + 0, + 0, + 1, + regs.PPB.VTOR.raw, + stack_ptr, + @ptrToInt(wrapper), + }; + + var seq: usize = 0; + while (seq < cmds.len) { + const cmd = cmds[seq]; + if (cmd == 0) { + // always drain the fifo before sending zero + fifo.drain(); + microzig.cpu.sev(); + } + + fifo.write_blocking(cmd); + // the second core should respond with the same value, if it doesnt't lets start over + seq = if (cmd == fifo.read_blocking()) seq + 1 else 0; + } +} From 0659bcd8c6296fcb10f2e0532ce9ff332ca2afbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20=27vesim=27=20Kuli=C5=84ski?= Date: Thu, 7 Jul 2022 00:05:56 +0200 Subject: [PATCH 005/286] multicore: use camelCase for function names --- src/hal/multicore.zig | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/hal/multicore.zig b/src/hal/multicore.zig index 5c95c1334..dd90d17d5 100644 --- a/src/hal/multicore.zig +++ b/src/hal/multicore.zig @@ -5,21 +5,21 @@ const assert = std.debug.assert; pub const fifo = struct { /// Check if the FIFO has valid data for reading. - pub fn is_read_ready() bool { + pub fn isReadReady() bool { return regs.SIO.FIFO_ST.read().VLD == 1; } /// Read from the FIFO /// Will return null if it is empty. pub fn read() ?u32 { - if (!is_read_ready()) + if (!isReadReady()) return null; return regs.SIO.FIFO_RD.*; } /// Read from the FIFO, waiting for data if there is none. - pub fn read_blocking() u32 { + pub fn readBloacking() u32 { while (true) { if (read()) |value| return value; microzig.cpu.wfe(); @@ -32,7 +32,7 @@ pub const fifo = struct { } /// Check if the FIFO is ready to receive data. - pub fn is_write_ready() bool { + pub fn isWriteReady() bool { return regs.SIO.FIFO_ST.read().RDY == 1; } @@ -44,8 +44,8 @@ pub const fifo = struct { } /// Write to the FIFO, waiting for room if it is full. - pub fn write_blocking(value: u32) void { - while (!is_write_ready()) + pub fn writeBlocking(value: u32) void { + while (!isWriteReady()) std.mem.doNotOptimizeAway(value); write(value); @@ -102,8 +102,8 @@ pub fn launchCore1WithStack(entrypoint: fn () void, stack: []u32) void { microzig.cpu.sev(); } - fifo.write_blocking(cmd); + fifo.writeBlocking(cmd); // the second core should respond with the same value, if it doesnt't lets start over - seq = if (cmd == fifo.read_blocking()) seq + 1 else 0; + seq = if (cmd == fifo.readBloacking()) seq + 1 else 0; } } From 303c9f183f8456edea52ab17f513f4acc8a2df4c Mon Sep 17 00:00:00 2001 From: Matt Knight Date: Thu, 7 Jul 2022 21:38:40 -0700 Subject: [PATCH 006/286] add busy sleep functions --- src/hal.zig | 1 + src/hal/time.zig | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 src/hal/time.zig diff --git a/src/hal.zig b/src/hal.zig index ae181dad4..1a793b1b3 100644 --- a/src/hal.zig +++ b/src/hal.zig @@ -3,6 +3,7 @@ const regs = microzig.chip.regsisters; pub const gpio = @import("hal/gpio.zig"); pub const clocks = @import("hal/clocks.zig"); pub const multicore = @import("hal/multicore.zig"); +pub const time = @import("hal/time.zig"); pub const default_clock_config = clocks.GlobalConfiguration.init(.{ //.ref = .{ .source = .src_xosc }, diff --git a/src/hal/time.zig b/src/hal/time.zig new file mode 100644 index 000000000..2ed49aeb8 --- /dev/null +++ b/src/hal/time.zig @@ -0,0 +1,44 @@ +const microzig = @import("microzig"); +const TIMER = microzig.chip.registers.TIMER; + +pub const Absolute = struct { + us_since_boot: u64, +}; + +pub fn getTimeSinceBoot() Absolute { + var high_word = TIMER.TIMERAWH.*; + + return while (true) { + var low_word = TIMER.TIMERAWL.*; + const next_high_word = TIMER.TIMERAWH.*; + if (next_high_word == high_word) + break Absolute{ + .us_since_boot = @intCast(u64, high_word) << 32 | low_word, + }; + + high_word = next_high_word; + } else unreachable; +} + +pub fn makeTimeoutUs(timeout_us: u64) Absolute { + return Absolute{ + .us_since_boot = getTimeSinceBoot().us_since_boot + timeout_us, + }; +} + +pub fn reached(time: Absolute) bool { + const now = getTimeSinceBoot(); + return now.us_since_boot >= time.us_since_boot; +} + +pub fn sleepMs(time_ms: u32) void { + sleepUs(time_ms * 1000); +} + +pub fn sleepUs(time_us: u64) void { + const end_time = Absolute{ + .us_since_boot = time_us + getTimeSinceBoot().us_since_boot, + }; + + while (!reached(end_time)) {} +} From ed05258e7ee4f0475bccd10110587e29602df9a7 Mon Sep 17 00:00:00 2001 From: Matt Knight Date: Fri, 8 Jul 2022 16:52:14 -0700 Subject: [PATCH 007/286] clean up gpios --- src/hal/gpio.zig | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/src/hal/gpio.zig b/src/hal/gpio.zig index defc71962..416b1559c 100644 --- a/src/hal/gpio.zig +++ b/src/hal/gpio.zig @@ -79,10 +79,10 @@ pub const SlewRate = enum { }; pub const DriveStrength = enum { - ma_2, - ma_4, - ma_8, - ma_12, + @"2mA", + @"4mA", + @"8mA", + @"12mA", }; pub const Enabled = enum { @@ -92,18 +92,20 @@ pub const Enabled = enum { pub inline fn reset() void { regs.RESETS.RESET.modify(.{ .io_bank0 = 1, .pads_bank0 = 1 }); - while (regs.RESETS.RESET_DONE.read().io_bank0 == 1) {} - while (regs.RESETS.RESET_DONE.read().pads_bank0 == 1) {} -} + regs.RESETS.RESET.modify(.{ .io_bank0 = 0, .pads_bank0 = 0 }); -//const gpio_num = gpio_num: { -// // calculate max gpios using comptime parsing -//}; + while (true) { + const reset_done = regs.RESETS.RESET_DONE.read(); + if (reset_done.io_bank0 == 1 and reset_done.pads_bank0 == 1) + break; + } +} /// Initialize a GPIO, set func to SIO pub inline fn init(comptime gpio: u32) void { - regs.SIO.GPIO_OE_CLR.raw = 1 << gpio; - regs.SIO.GPIO_OUT_CLR.raw = 1 << gpio; + const mask = 1 << gpio; + regs.SIO.GPIO_OE_CLR.raw = mask; + regs.SIO.GPIO_OUT_CLR.raw = mask; setFunction(gpio, .sio); } @@ -113,17 +115,19 @@ pub inline fn deinit(comptime gpio: u32) void { } pub inline fn setDir(comptime gpio: u32, direction: Direction) void { + const mask = 1 << gpio; switch (direction) { - .in => regs.SIO.GPIO_OE_CLR.raw |= (1 << gpio), - .out => regs.SIO.GPIO_OE_SET.raw &= (1 << gpio), + .in => regs.SIO.GPIO_OE_CLR.raw = mask, + .out => regs.SIO.GPIO_OE_SET.raw = mask, } } /// Drive a single GPIO high/low pub inline fn put(comptime gpio: u32, value: u1) void { + const mask = 1 << gpio; switch (value) { - 0 => regs.SIO.GPIO_OUT.raw &= ~@as(u32, 1 << gpio), - 1 => regs.SIO.GPIO_OUT.raw |= (1 << gpio), + 0 => regs.SIO.GPIO_OUT_CLR.raw = mask, + 1 => regs.SIO.GPIO_OUT_SET.raw = mask, } } From 8751f6753d9a187ed6902f075914b77de6ce64e4 Mon Sep 17 00:00:00 2001 From: Matt Knight Date: Sun, 10 Jul 2022 16:26:47 -0700 Subject: [PATCH 008/286] Clock config (#5) * use array access for better codegen * frequency counter * wip * wip * refactor clock config and plls to reduce binary size --- src/hal.zig | 21 ++- src/hal/clocks.zig | 358 +++++++++++++++++++++++++++++++-------------- src/hal/pll.zig | 79 +++++----- src/hal/util.zig | 18 +++ 4 files changed, 323 insertions(+), 153 deletions(-) create mode 100644 src/hal/util.zig diff --git a/src/hal.zig b/src/hal.zig index 1a793b1b3..3db067744 100644 --- a/src/hal.zig +++ b/src/hal.zig @@ -5,18 +5,23 @@ pub const clocks = @import("hal/clocks.zig"); pub const multicore = @import("hal/multicore.zig"); pub const time = @import("hal/time.zig"); -pub const default_clock_config = clocks.GlobalConfiguration.init(.{ - //.ref = .{ .source = .src_xosc }, - .sys = .{ - .source = .pll_sys, - .freq = 125_000_000, - }, - .usb = .{ .source = .pll_usb }, +pub const clock_config = clocks.GlobalConfiguration.init(.{ + .sys = .{ .source = .src_xosc }, + .peri = .{ .source = .clk_sys }, + //.sys = .{ + // .source = .pll_sys, + // .freq = 125_000_000, + //}, + //.usb = .{ .source = .pll_usb }, //.adc = .{ .source = .pll_usb }, //.rtc = .{ .source = .pll_usb }, - .peri = .{ .source = .clk_sys }, + //.peri = .{ .source = .clk_sys }, }); +pub fn init() void { + clock_config.apply(); +} + pub fn getCpuId() u32 { return regs.SIO.CPUID.*; } diff --git a/src/hal/clocks.zig b/src/hal/clocks.zig index 7f266e299..fc28c1903 100644 --- a/src/hal/clocks.zig +++ b/src/hal/clocks.zig @@ -1,11 +1,12 @@ const std = @import("std"); const microzig = @import("microzig"); const pll = @import("pll.zig"); +const util = @import("util.zig"); const assert = std.debug.assert; const regs = microzig.chip.registers; +const CLOCKS = regs.CLOCKS; const xosc_freq = microzig.board.xosc_freq; -// TODO: move to board file /// this is only nominal, very imprecise and prone to drift over time const rosc_freq = 6_500_000; @@ -64,37 +65,23 @@ pub const Generator = enum { adc, rtc, - // source directly from register definitions - const Source = enum { - rosc_clksrc_ph, - clksrc_clk_ref_aux, - xosc_clksrc, - clk_ref, - clksrc_clk_sys_aux, + // in some cases we can pretend the Generators are a homogenous array of + // register clusters for the sake of smaller codegen + const GeneratorRegs = packed struct { + ctrl: u32, + div: u32, + selected: u32, }; - // aux sources directly from register definitions - const AuxilarySource = enum { - clksrc_pll_sys, - clksrc_gpin0, - clksrc_gpin1, - clksrc_pll_usb, - rosc_clksrc, - xosc_clksrc, - clk_sys, - clk_usb, - clk_adc, - clk_rtc, - clk_ref, - rosc_clksrc_ph, - }; - - const source_map = struct { - const ref = [_]Generator.Source{ .rosc_clksrc_ph, .clksrc_clk_ref, .xosc_clksrc }; - const sys = [_]Generator.Source{ .clk_ref, .clksrc_clk_sys_aux }; - }; + comptime { + assert(12 == @sizeOf(GeneratorRegs)); + assert(24 == @sizeOf([2]GeneratorRegs)); + } - const aux_map = struct {}; + const generators = @intToPtr( + *volatile [9]GeneratorRegs, + regs.CLOCKS.base_address, + ); pub fn hasGlitchlessMux(generator: Generator) bool { return switch (generator) { @@ -104,46 +91,24 @@ pub const Generator = enum { } pub fn enable(generator: Generator) void { - inline for (std.meta.fields(Generator)) |field| { - if (generator == @field(Generator, field.name)) { - const reg_name = comptime std.fmt.comptimePrint("CLK_{s}_CTRL", .{ - uppercase(field.name), - }); - - if (@hasField(@TypeOf(@field(regs.CLOCKS, reg_name).*).underlying_type, "ENABLE")) - @field(regs.CLOCKS, reg_name).modify(.{ .ENABLE = 1 }); - } + switch (generator) { + .ref, .sys => {}, + else => generators[@enumToInt(generator)].ctrl |= (1 << 11), } } pub fn setDiv(generator: Generator, div: u32) void { - inline for (std.meta.fields(Generator)) |field| { - if (generator == @field(Generator, field.name)) { - const reg_name = comptime std.fmt.comptimePrint("CLK_{s}_DIV", .{ - uppercase(field.name), - }); - - if (@hasDecl(regs.CLOCKS, reg_name)) - @field(regs.CLOCKS, reg_name).raw = div - else - assert(false); // doesn't have a divider - } - } + if (generator == .peri) + return; + + generators[@enumToInt(generator)].div = div; } pub fn getDiv(generator: Generator) u32 { - return inline for (std.meta.fields(Generator)) |field| { - if (generator == @field(Generator, field.name)) { - const reg_name = comptime std.fmt.comptimePrint("CLK_{s}_DIV", .{ - uppercase(field.name), - }); - - break if (@hasDecl(regs.CLOCKS, reg_name)) - @field(regs.CLOCKS, reg_name).raw - else - 1; - } - } else unreachable; + if (generator == .peri) + return 1; + + return generators[@enumToInt(generator)].div; } // The bitfields for the *_SELECTED registers are actually a mask of which @@ -153,29 +118,151 @@ pub const Generator = enum { // // Some mention that this is only for the glitchless mux, so if it is non-glitchless then return true pub fn selected(generator: Generator) bool { - inline for (std.meta.fields(Generator)) |field| { - if (generator == @field(Generator, field.name)) { - return if (@field(Generator, field.name).hasGlitchlessMux()) ret: { - const reg_name = comptime std.fmt.comptimePrint("CLK_{s}_SELECTED", .{ - uppercase(field.name), - }); - - break :ret @field(regs.CLOCKS, reg_name).* != 0; - } else true; - } - } else unreachable; + return (0 != generators[@enumToInt(generator)].selected); + } + + pub fn clearSource(generator: Generator) void { + generators[@enumToInt(generator)].ctrl &= ~@as(u32, 0x3); + } + + pub fn disable(generator: Generator) void { + switch (generator) { + .sys, .ref => {}, + else => generators[@enumToInt(generator)].ctrl &= ~@as(u32, 1 << 11), + } + } + + pub fn isAuxSource(generator: Generator, source: Source) bool { + return switch (generator) { + .sys => switch (source) { + .clk_ref => false, + else => true, + }, + .ref => switch (source) { + .src_rosc, .src_xosc => false, + else => true, + }, + else => true, + }; + } + + pub fn setSource(generator: Generator, src: u32) void { + const mask = ~@as(u32, 0x3); + const ctrl_value = generators[@enumToInt(generator)].ctrl; + generators[@enumToInt(generator)].ctrl = (ctrl_value & mask) | src; + } + + pub fn setAuxSource(generator: Generator, auxsrc: u32) void { + const mask = ~@as(u32, 0x1e0); + const ctrl_value = generators[@enumToInt(generator)].ctrl; + generators[@enumToInt(generator)].ctrl = (ctrl_value & mask) | (auxsrc << 5); } }; pub const Source = enum { src_rosc, src_xosc, - src_aux, + src_gpin0, + src_gpin1, pll_sys, pll_usb, clk_sys, + clk_ref, + clk_usb, + clk_adc, + clk_rtc, }; +fn srcValue(generator: Generator, source: Source) u32 { + return switch (generator) { + .sys => src: { + const ret: u32 = switch (source) { + .clk_ref => 0, + else => 1, + }; + break :src ret; + }, + .ref => src: { + const ret: u32 = switch (source) { + .src_rosc => 0, + .src_xosc => 2, + else => 1, + }; + break :src ret; + }, + else => 0, + }; +} + +fn auxSrcValue(generator: Generator, source: Source) u32 { + return switch (generator) { + .sys => auxsrc: { + const ret: u32 = switch (source) { + .pll_sys => 0, + .pll_usb => 1, + .src_rosc => 2, + .src_xosc => 3, + .src_gpin0 => 4, + .src_gpin1 => 5, + else => @panic("invalid source for generator"), + }; + break :auxsrc ret; + }, + .ref => auxsrc: { + const ret: u32 = switch (source) { + // zero'd out because it is a src option + .src_xosc => 0, + .pll_sys => 0, + .src_gpin0 => 1, + .src_gpin1 => 2, + else => @panic("invalid source for generator"), + }; + break :auxsrc ret; + }, + .peri => auxsrc: { + const ret: u32 = switch (source) { + .clk_sys => 0, + .pll_sys => 1, + .pll_usb => 2, + .src_rosc => 3, + .src_xosc => 4, + .src_gpin0 => 5, + .src_gpin1 => 6, + else => @panic("invalid source for generator"), + }; + break :auxsrc ret; + }, + .usb, .adc, .rtc => auxsrc: { + const ret: u32 = switch (source) { + .pll_usb => 0, + .pll_sys => 1, + .src_rosc => 2, + .src_xosc => 3, + .src_gpin0 => 4, + .src_gpin1 => 5, + else => @panic("invalid source for generator"), + }; + break :auxsrc ret; + }, + .gpout0, .gpout1, .gpout2, .gpout3 => auxsrc: { + const ret: u32 = switch (source) { + .pll_sys => 0, + .src_gpin0 => 1, + .src_gpin1 => 2, + .pll_usb => 3, + .src_rosc => 4, + .src_xosc => 5, + .clk_sys => 6, + .clk_usb => 7, + .clk_adc => 8, + .clk_rtc => 9, + .clk_ref => 10, + }; + break :auxsrc ret; + }, + }; +} + pub const GlobalConfiguration = struct { xosc_configured: bool, sys: ?Configuration, @@ -221,8 +308,10 @@ pub const GlobalConfiguration = struct { output_freq = sys_opts.freq orelse rosc_freq; assert(output_freq.? <= rosc_freq); break :input .{ - .source = .rosc, + .source = .src_rosc, .freq = rosc_freq, + .src_value = srcValue(.sys, .src_rosc), + .auxsrc_value = auxSrcValue(.sys, .src_rosc), }; }, .src_xosc => input: { @@ -230,8 +319,10 @@ pub const GlobalConfiguration = struct { output_freq = sys_opts.freq orelse xosc_freq; assert(output_freq.? <= xosc_freq); break :input .{ - .source = .xosc, + .source = .src_xosc, .freq = xosc_freq, + .src_value = srcValue(.sys, .src_xosc), + .auxsrc_value = auxSrcValue(.sys, .src_xosc), }; }, .pll_sys => input: { @@ -252,6 +343,8 @@ pub const GlobalConfiguration = struct { // TODO: not really sure what frequency to // drive pll at yet, but this is an okay start .freq = 125_000_000, + .src_value = srcValue(.sys, .pll_sys), + .auxsrc_value = auxSrcValue(.sys, .pll_sys), }; }, @@ -281,6 +374,8 @@ pub const GlobalConfiguration = struct { .input = .{ .source = .pll_usb, .freq = 48_000_000, + .src_value = srcValue(.usb, .pll_usb), + .auxsrc_value = auxSrcValue(.usb, .pll_usb), }, .output_freq = 48_000_000, }; @@ -297,6 +392,8 @@ pub const GlobalConfiguration = struct { .input = .{ .source = .src_xosc, .freq = xosc_freq, + .src_value = srcValue(.ref, .src_xosc), + .auxsrc_value = auxSrcValue(.ref, .src_xosc), }, .output_freq = xosc_freq, }; @@ -306,10 +403,31 @@ pub const GlobalConfiguration = struct { // either use the ROSC, XOSC, or sys PLL, with whatever dividing // they need - .adc = if (opts.adc) |_| - unreachable // TODO - else - null, + // adc requires a 48MHz clock, so only ever let it get hooked up to + // the usb PLL + .adc = if (opts.adc) |adc_opts| adc_config: { + assert(adc_opts.source == .pll_usb); + xosc_configured = true; + + // TODO: some safety checks for overwriting this + pll_usb = .{ + .refdiv = 1, + .vco_freq = 1_440_000_000, + .postdiv1 = 6, + .postdiv2 = 5, + }; + + break :adc_config .{ + .generator = .usb, + .input = .{ + .source = .pll_usb, + .freq = 48_000_000, + .src_value = srcValue(.adc, .pll_usb), + .auxsrc_value = auxSrcValue(.adc, .pll_usb), + }, + .output_freq = 48_000_000, + }; + } else null, .rtc = if (opts.rtc) |_| unreachable // TODO @@ -320,12 +438,13 @@ pub const GlobalConfiguration = struct { if (peri_opts.source == .src_xosc) xosc_configured = true; - // TODO break :peri_config .{ .generator = .peri, .input = .{ .source = peri_opts.source, .freq = xosc_freq, + .src_value = srcValue(.peri, peri_opts.source), + .auxsrc_value = auxSrcValue(.peri, peri_opts.source), }, .output_freq = xosc_freq, }; @@ -339,7 +458,7 @@ pub const GlobalConfiguration = struct { /// this is explicitly comptime to encourage the user to have separate /// clock configuration declarations instead of mutating them at runtime - pub fn apply(comptime config: GlobalConfiguration) !void { + pub fn apply(comptime config: GlobalConfiguration) void { // disable resus if it has been turned on elsewhere regs.CLOCKS.CLK_SYS_RESUS_CTRL.raw = 0; @@ -357,7 +476,7 @@ pub const GlobalConfiguration = struct { if (config.sys) |sys| switch (sys.input.source) { .pll_usb, .pll_sys => { regs.CLOCKS.CLK_SYS_CTRL.modify(.{ .SRC = 0 }); - while (regs.CLOCKS.CLK_SYS_SELECTED.* != 1) {} + while (regs.CLOCKS.CLK_SYS_SELECTED.* == 0) {} }, else => {}, }; @@ -365,27 +484,21 @@ pub const GlobalConfiguration = struct { if (config.ref) |ref| switch (ref.input.source) { .pll_usb, .pll_sys => { regs.CLOCKS.CLK_REF_CTRL.modify(.{ .SRC = 0 }); - while (regs.CLOCKS.CLK_REF_SELECTED.* != 1) {} + while (regs.CLOCKS.CLK_REF_SELECTED.* == 0) {} }, else => {}, }; - // initialize PLLs - if (config.pll_sys) |pll_sys_config| pll.sys.apply(pll_sys_config); - if (config.pll_usb) |pll_usb_config| pll.usb.apply(pll_usb_config); - - // initialize clock generators - if (config.ref) |ref| try ref.apply(); - if (config.usb) |usb| try usb.apply(); - if (config.adc) |adc| try adc.apply(); - if (config.rtc) |rtc| try rtc.apply(); - if (config.peri) |peri| try peri.apply(); - } + //// initialize PLLs + if (config.pll_sys) |pll_sys_config| pll.PLL.apply(.sys, pll_sys_config); + if (config.pll_usb) |pll_usb_config| pll.PLL.apply(.usb, pll_usb_config); - /// returns frequency of a clock or pll, if unconfigured it returns null - pub fn getFrequency(config: GlobalConfiguration) ?u32 { - _ = config; - return null; + //// initialize clock generators + if (config.ref) |ref| ref.apply(config.sys); + if (config.usb) |usb| usb.apply(config.sys); + if (config.adc) |adc| adc.apply(config.sys); + if (config.rtc) |rtc| rtc.apply(config.sys); + if (config.peri) |peri| peri.apply(config.sys); } }; @@ -393,19 +506,21 @@ pub const Configuration = struct { generator: Generator, input: struct { source: Source, + src_value: u32, + auxsrc_value: u32, freq: u32, }, output_freq: u32, - pub fn apply(config: Configuration) !void { + pub fn apply(comptime config: Configuration, comptime sys_config_opt: ?Configuration) void { const generator = config.generator; const input = config.input; const output_freq = config.output_freq; + const sys_config = sys_config_opt.?; // sys clock config needs to be set! + // source frequency has to be faster because dividing will always reduce. assert(input.freq >= output_freq); - if (output_freq < input.freq) - return error.InvalidArgs; const div = @intCast(u32, (@intCast(u64, input.freq) << 8) / 8); @@ -413,26 +528,47 @@ pub const Configuration = struct { if (div > generator.getDiv()) generator.setDiv(div); - if (generator.hasGlitchlessMux() and input.source == .src_aux) { - // TODO: clear bits - while (!generator.selected()) { - // TODO: is leaving this empty good enough? pico sdk has `tight_loop_contents()` - } + // TODO what _is_ an aux source? + if (generator.hasGlitchlessMux() and input.src_value == 1) { + generator.clearSource(); + while (!generator.selected()) {} } else { - // uh stuff + generator.disable(); + var delay_cycles = sys_config.output_freq / config.output_freq + 1; + asm volatile ( + \\1: + \\subs %[cycles], #1 + \\bne 1b + : [cycles] "=r" (delay_cycles), + ); } + generator.setAuxSource(input.auxsrc_value); + // set aux mux first and then glitchless mex if this clock has one if (generator.hasGlitchlessMux()) { - // write to clock ctrl + generator.setSource(input.src_value); while (!generator.selected()) {} } generator.enable(); generator.setDiv(div); - // should we store global state on configured clocks? } }; -//pub fn countFrequencyKhz(source: Source) u32 {} +pub fn countFrequencyKhz(source: Source, comptime clock_config: GlobalConfiguration) u32 { + const ref_freq = clock_config.ref.?.output_freq; + + // wait for counter to be done + while (CLOCKS.FC0_STATUS.read().RUNNING == 1) {} + CLOCKS.FC0_REF_KHZ.* = ref_freq / 1000; + CLOCKS.FC0_INTERVAL.* = 10; + CLOCKS.FC0_MIN_KHZ.* = 0; + CLOCKS.FC0_MAX_KHZ.* = std.math.maxInt(u32); + CLOCKS.FC0_SRC.* = @enumToInt(source); + + while (CLOCKS.FC0_STATUS.read().DONE != 1) {} + + return CLOCKS.FC0_RESULT.read().KHZ; +} diff --git a/src/hal/pll.zig b/src/hal/pll.zig index 16fb3086d..eb16a63a9 100644 --- a/src/hal/pll.zig +++ b/src/hal/pll.zig @@ -12,44 +12,36 @@ pub const Configuration = struct { postdiv2: u3, }; -pub const sys = @intToPtr(*volatile PLL, regs.PLL_SYS.base_address); -pub const usb = @intToPtr(*volatile PLL, regs.PLL_USB.base_address); - -pub const PLL = packed struct { - cs: @TypeOf(regs.PLL_SYS.CS), - pwr: @TypeOf(regs.PLL_SYS.PWR), - fbdiv_int: @TypeOf(regs.PLL_SYS.FBDIV_INT), - prim: @TypeOf(regs.PLL_SYS.PRIM), - - comptime { - // bunch of comptime checks in here to validate the layout - assert(0 == @bitOffsetOf(PLL, "cs")); - assert(32 == @bitOffsetOf(PLL, "pwr")); - assert(64 == @bitOffsetOf(PLL, "fbdiv_int")); - assert(96 == @bitOffsetOf(PLL, "prim")); - } +pub const PLL = enum { + sys, + usb, - pub fn isLocked(pll: *const volatile PLL) bool { - return pll.cs.read().LOCK == 1; + fn getRegs(pll: PLL) *volatile PllRegs { + return &plls[@enumToInt(pll)]; } - pub fn reset(pll: *const volatile PLL) void { + pub fn reset(pll: PLL) void { switch (pll) { - sys => { + .sys => { regs.RESETS.RESET.modify(.{ .pll_sys = 1 }); regs.RESETS.RESET.modify(.{ .pll_sys = 0 }); - while (regs.RESETS.RESET_DONE.read().pll_sys == 1) {} + while (regs.RESETS.RESET_DONE.read().pll_sys != 1) {} }, - usb => { + .usb => { regs.RESETS.RESET.modify(.{ .pll_usb = 1 }); regs.RESETS.RESET.modify(.{ .pll_usb = 0 }); - while (regs.RESETS.RESET_DONE.read().pll_usb == 1) {} + while (regs.RESETS.RESET_DONE.read().pll_usb != 1) {} }, - else => unreachable, } } - pub fn apply(pll: *volatile PLL, comptime config: Configuration) void { + pub fn isLocked(pll: PLL) bool { + const pll_regs = pll.getRegs(); + return pll_regs.cs.read().LOCK == 1; + } + + pub fn apply(pll: PLL, comptime config: Configuration) void { + const pll_regs = pll.getRegs(); const ref_freq = xosc_freq / @as(u32, config.refdiv); const fbdiv = @intCast(u12, config.vco_freq / ref_freq); @@ -67,10 +59,10 @@ pub const PLL = packed struct { // do not bother a PLL which is already configured if (pll.isLocked() and - config.refdiv == pll.cs.read().REFDIV and - fbdiv == pll.fbdiv_int.read() and - config.postdiv1 == pll.prim.read().POSTDIV1 and - config.postdiv2 == pll.prim.read().POSTDIV2) + config.refdiv == pll_regs.cs.read().REFDIV and + fbdiv == pll_regs.fbdiv_int.read() and + config.postdiv1 == pll_regs.prim.read().POSTDIV1 and + config.postdiv2 == pll_regs.prim.read().POSTDIV2) { return; } @@ -78,20 +70,39 @@ pub const PLL = packed struct { pll.reset(); // load vco related dividers - pll.cs.modify(.{ .REFDIV = config.refdiv }); - pll.fbdiv_int.modify(fbdiv); + pll_regs.cs.modify(.{ .REFDIV = config.refdiv }); + pll_regs.fbdiv_int.modify(fbdiv); // turn on PLL - pll.pwr.modify(.{ .PD = 0, .VCOPD = 0 }); + pll_regs.pwr.modify(.{ .PD = 0, .VCOPD = 0 }); // wait for PLL to lock while (!pll.isLocked()) {} - pll.prim.modify(.{ + pll_regs.prim.modify(.{ .POSTDIV1 = config.postdiv1, .POSTDIV2 = config.postdiv2, }); - pll.pwr.modify(.{ .POSTDIVPD = 0 }); + pll_regs.pwr.modify(.{ .POSTDIVPD = 0 }); } }; + +const plls = @intToPtr(*volatile [2]PllRegs, regs.PLL_SYS.base_address); +comptime { + assert(@sizeOf(PllRegs) == (regs.PLL_USB.base_address - regs.PLL_SYS.base_address)); +} + +const CsReg = @typeInfo(@TypeOf(regs.PLL_SYS.CS)).Pointer.child; +const PwrReg = @typeInfo(@TypeOf(regs.PLL_SYS.PWR)).Pointer.child; +const FbdivIntReg = @typeInfo(@TypeOf(regs.PLL_SYS.FBDIV_INT)).Pointer.child; +const PrimReg = @typeInfo(@TypeOf(regs.PLL_SYS.PRIM)).Pointer.child; + +pub const PllRegs = extern struct { + cs: CsReg, + pwr: PwrReg, + fbdiv_int: FbdivIntReg, + prim: PrimReg, + + padding: [4092]u32, +}; diff --git a/src/hal/util.zig b/src/hal/util.zig new file mode 100644 index 000000000..9d7863c17 --- /dev/null +++ b/src/hal/util.zig @@ -0,0 +1,18 @@ +pub fn xorAlias(ptr: anytype) @TypeOf(ptr) { + const xor_addr = @ptrToInt(ptr) | (1 << 12); + return @ptrCast(@TypeOf(ptr), xor_addr); +} + +pub fn setAlias(ptr: anytype) @TypeOf(ptr) { + const set_addr = @ptrToInt(ptr) | (2 << 12); + return @ptrCast(@TypeOf(ptr), set_addr); +} + +pub fn clearAlias(ptr: anytype) @TypeOf(ptr) { + const clear_addr = @ptrToInt(ptr) | (3 << 12); + return @ptrCast(@TypeOf(ptr), clear_addr); +} + +pub inline fn tightLoopContents() void { + asm volatile ("" ::: "memory"); +} From 2d894103050d2f58fbd5dafcf1a741d2eed0ed72 Mon Sep 17 00:00:00 2001 From: Matt Knight Date: Sun, 10 Jul 2022 17:10:54 -0700 Subject: [PATCH 009/286] add directive to inline asm (#6) --- src/hal/clocks.zig | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hal/clocks.zig b/src/hal/clocks.zig index fc28c1903..fef6e6150 100644 --- a/src/hal/clocks.zig +++ b/src/hal/clocks.zig @@ -536,6 +536,7 @@ pub const Configuration = struct { generator.disable(); var delay_cycles = sys_config.output_freq / config.output_freq + 1; asm volatile ( + \\.syntax unified \\1: \\subs %[cycles], #1 \\bne 1b From f75a019aa5e1bd915d1d9458df60f65908b156cb Mon Sep 17 00:00:00 2001 From: Matt Knight Date: Sun, 10 Jul 2022 17:31:17 -0700 Subject: [PATCH 010/286] try lf endings to fix windows compile error (#7) --- .gitattributes | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..ef01f6142 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.zig text eol=lf From f0e51f8302904877c9ebc2ef2b689e4db37491c8 Mon Sep 17 00:00:00 2001 From: Matt Knight Date: Thu, 14 Jul 2022 00:09:47 -0700 Subject: [PATCH 011/286] Uart (#8) * refined clock configuration, uart works with clk_peri at xosc frequency * fix pll_sys configuration --- src/hal.zig | 20 +-- src/hal/clocks.zig | 424 ++++++++++++++++++++++++++------------------- src/hal/gpio.zig | 4 + src/hal/pll.zig | 22 ++- src/hal/uart.zig | 212 +++++++++++++++++++++++ src/rp2040.zig | 5 - 6 files changed, 482 insertions(+), 205 deletions(-) create mode 100644 src/hal/uart.zig diff --git a/src/hal.zig b/src/hal.zig index 3db067744..92539f374 100644 --- a/src/hal.zig +++ b/src/hal.zig @@ -1,25 +1,25 @@ const microzig = @import("microzig"); -const regs = microzig.chip.regsisters; +const regs = microzig.chip.registers; + pub const gpio = @import("hal/gpio.zig"); pub const clocks = @import("hal/clocks.zig"); pub const multicore = @import("hal/multicore.zig"); pub const time = @import("hal/time.zig"); +pub const uart = @import("hal/uart.zig"); pub const clock_config = clocks.GlobalConfiguration.init(.{ - .sys = .{ .source = .src_xosc }, + .sys = .{ + .source = .pll_sys, + .freq = 125_000_000, + }, + .ref = .{ .source = .src_xosc }, .peri = .{ .source = .clk_sys }, - //.sys = .{ - // .source = .pll_sys, - // .freq = 125_000_000, - //}, - //.usb = .{ .source = .pll_usb }, - //.adc = .{ .source = .pll_usb }, - //.rtc = .{ .source = .pll_usb }, - //.peri = .{ .source = .clk_sys }, }); pub fn init() void { + // TODO: resets need to be reviewed here clock_config.apply(); + gpio.reset(); } pub fn getCpuId() u32 { diff --git a/src/hal/clocks.zig b/src/hal/clocks.zig index fef6e6150..e81f1ea07 100644 --- a/src/hal/clocks.zig +++ b/src/hal/clocks.zig @@ -83,6 +83,10 @@ pub const Generator = enum { regs.CLOCKS.base_address, ); + fn getRegs(generator: Generator) *volatile GeneratorRegs { + return &generators[@enumToInt(generator)]; + } + pub fn hasGlitchlessMux(generator: Generator) bool { return switch (generator) { .sys, .ref => true, @@ -93,7 +97,7 @@ pub const Generator = enum { pub fn enable(generator: Generator) void { switch (generator) { .ref, .sys => {}, - else => generators[@enumToInt(generator)].ctrl |= (1 << 11), + else => generator.getRegs().ctrl |= (1 << 11), } } @@ -101,14 +105,14 @@ pub const Generator = enum { if (generator == .peri) return; - generators[@enumToInt(generator)].div = div; + generator.getRegs().div = div; } pub fn getDiv(generator: Generator) u32 { if (generator == .peri) return 1; - return generators[@enumToInt(generator)].div; + return generator.getRegs().div; } // The bitfields for the *_SELECTED registers are actually a mask of which @@ -118,17 +122,17 @@ pub const Generator = enum { // // Some mention that this is only for the glitchless mux, so if it is non-glitchless then return true pub fn selected(generator: Generator) bool { - return (0 != generators[@enumToInt(generator)].selected); + return (0 != generator.getRegs().selected); } pub fn clearSource(generator: Generator) void { - generators[@enumToInt(generator)].ctrl &= ~@as(u32, 0x3); + generator.getRegs().ctrl &= ~@as(u32, 0x3); } pub fn disable(generator: Generator) void { switch (generator) { .sys, .ref => {}, - else => generators[@enumToInt(generator)].ctrl &= ~@as(u32, 1 << 11), + else => generator.getRegs().ctrl &= ~@as(u32, 1 << 11), } } @@ -147,15 +151,17 @@ pub const Generator = enum { } pub fn setSource(generator: Generator, src: u32) void { + const gen_regs = generator.getRegs(); const mask = ~@as(u32, 0x3); - const ctrl_value = generators[@enumToInt(generator)].ctrl; - generators[@enumToInt(generator)].ctrl = (ctrl_value & mask) | src; + const ctrl_value = gen_regs.ctrl; + gen_regs.ctrl = (ctrl_value & mask) | src; } pub fn setAuxSource(generator: Generator, auxsrc: u32) void { + const gen_regs = generator.getRegs(); const mask = ~@as(u32, 0x1e0); - const ctrl_value = generators[@enumToInt(generator)].ctrl; - generators[@enumToInt(generator)].ctrl = (ctrl_value & mask) | (auxsrc << 5); + const ctrl_value = gen_regs.ctrl; + gen_regs.ctrl = (ctrl_value & mask) | (auxsrc << 5); } }; @@ -264,16 +270,20 @@ fn auxSrcValue(generator: Generator, source: Source) u32 { } pub const GlobalConfiguration = struct { - xosc_configured: bool, - sys: ?Configuration, - ref: ?Configuration, - usb: ?Configuration, - adc: ?Configuration, - rtc: ?Configuration, - peri: ?Configuration, - - pll_sys: ?pll.Configuration, - pll_usb: ?pll.Configuration, + xosc_configured: bool = false, + sys: ?Configuration = null, + ref: ?Configuration = null, + usb: ?Configuration = null, + adc: ?Configuration = null, + rtc: ?Configuration = null, + peri: ?Configuration = null, + gpout0: ?Configuration = null, + gpout1: ?Configuration = null, + gpout2: ?Configuration = null, + gpout3: ?Configuration = null, + + pll_sys: ?pll.Configuration = null, + pll_usb: ?pll.Configuration = null, pub const Option = struct { source: Source, @@ -287,173 +297,220 @@ pub const GlobalConfiguration = struct { adc: ?Option = null, rtc: ?Option = null, peri: ?Option = null, + gpout0: ?Option = null, + gpout1: ?Option = null, + gpout2: ?Option = null, + gpout3: ?Option = null, // TODO: allow user to configure PLLs to optimize for low-jitter, low-power, or manually specify }; + pub fn getFrequency(config: GlobalConfiguration, source: Source) ?u32 { + return switch (source) { + .src_xosc => xosc_freq, + .src_rosc => rosc_freq, + .clk_sys => if (config.sys) |sys_config| sys_config.output_freq else null, + .clk_usb => if (config.usb) |usb_config| usb_config.output_freq else null, + .clk_ref => if (config.ref) |ref_config| ref_config.output_freq else null, + .pll_sys => if (config.pll_sys) |pll_sys_config| pll_sys_config.frequency() else null, + .pll_usb => if (config.pll_usb) |pll_usb_config| pll_usb_config.frequency() else null, + else => null, + }; + } + /// this function reasons about how to configure the clock system. It will /// assert if the configuration is invalid pub fn init(comptime opts: Options) GlobalConfiguration { - var xosc_configured = false; - var pll_sys: ?pll.Configuration = null; - var pll_usb: ?pll.Configuration = null; - - return GlobalConfiguration{ - // the system clock can either use rosc, xosc, or the sys PLL - .sys = if (opts.sys) |sys_opts| sys_config: { - var output_freq: ?u32 = null; - break :sys_config .{ - .generator = .sys, - .input = switch (sys_opts.source) { - .src_rosc => input: { - output_freq = sys_opts.freq orelse rosc_freq; - assert(output_freq.? <= rosc_freq); - break :input .{ - .source = .src_rosc, - .freq = rosc_freq, - .src_value = srcValue(.sys, .src_rosc), - .auxsrc_value = auxSrcValue(.sys, .src_rosc), - }; - }, - .src_xosc => input: { - xosc_configured = true; - output_freq = sys_opts.freq orelse xosc_freq; - assert(output_freq.? <= xosc_freq); - break :input .{ - .source = .src_xosc, - .freq = xosc_freq, - .src_value = srcValue(.sys, .src_xosc), - .auxsrc_value = auxSrcValue(.sys, .src_xosc), - }; - }, - .pll_sys => input: { - xosc_configured = true; - output_freq = sys_opts.freq orelse 125_000_000; - assert(output_freq.? <= 125_000_000); - - // TODO: proper values for 125MHz - pll_sys = .{ - .refdiv = 2, - .vco_freq = 1_440_000_000, - .postdiv1 = 6, - .postdiv2 = 5, - }; - - break :input .{ - .source = .pll_sys, - // TODO: not really sure what frequency to - // drive pll at yet, but this is an okay start - .freq = 125_000_000, - .src_value = srcValue(.sys, .pll_sys), - .auxsrc_value = auxSrcValue(.sys, .pll_sys), - }; - }, - - else => unreachable, // not an available input + var config = GlobalConfiguration{}; + + // I THINK that if either pll is configured here, then that means + // that the ref clock generator MUST use xosc to feed the PLLs? + config.ref = if (opts.ref) |ref_opts| ref_config: { + assert(ref_opts.source == .src_xosc); + break :ref_config .{ + .generator = .ref, + .input = .{ + .source = ref_opts.source, + .freq = config.getFrequency(ref_opts.source).?, + .src_value = srcValue(.ref, ref_opts.source), + .auxsrc_value = auxSrcValue(.ref, ref_opts.source), + }, + .output_freq = config.getFrequency(ref_opts.source).?, + }; + } else if (config.pll_sys != null or config.pll_usb != null) ref_config: { + config.xosc_configured = true; + break :ref_config .{ + .generator = .ref, + .input = .{ + .source = .src_xosc, + .freq = xosc_freq, + .src_value = srcValue(.ref, .src_xosc), + .auxsrc_value = auxSrcValue(.ref, .src_xosc), + }, + .output_freq = xosc_freq, + }; + } else null; + + // the system clock can either use rosc, xosc, or the sys PLL + config.sys = if (opts.sys) |sys_opts| sys_config: { + var output_freq: ?u32 = null; + break :sys_config .{ + .generator = .sys, + .input = switch (sys_opts.source) { + .src_rosc => input: { + output_freq = sys_opts.freq orelse rosc_freq; + assert(output_freq.? <= rosc_freq); + break :input .{ + .source = .src_rosc, + .freq = rosc_freq, + .src_value = srcValue(.sys, .src_rosc), + .auxsrc_value = auxSrcValue(.sys, .src_rosc), + }; }, - .output_freq = output_freq.?, - }; - } else null, - - // to keep things simple for now, we'll make it so that the usb - // generator can only be hooked up to the usb PLL, and only have - // one configuration for the usb PLL - .usb = if (opts.usb) |usb_opts| usb_config: { - assert(pll_usb == null); - assert(usb_opts.source == .pll_usb); - - xosc_configured = true; - pll_usb = .{ - .refdiv = 1, - .vco_freq = 1_440_000_000, - .postdiv1 = 6, - .postdiv2 = 5, - }; - - break :usb_config .{ - .generator = .usb, - .input = .{ - .source = .pll_usb, - .freq = 48_000_000, - .src_value = srcValue(.usb, .pll_usb), - .auxsrc_value = auxSrcValue(.usb, .pll_usb), + .src_xosc => input: { + config.xosc_configured = true; + output_freq = sys_opts.freq orelse xosc_freq; + assert(output_freq.? <= xosc_freq); + break :input .{ + .source = .src_xosc, + .freq = xosc_freq, + .src_value = srcValue(.sys, .src_xosc), + .auxsrc_value = auxSrcValue(.sys, .src_xosc), + }; }, - .output_freq = 48_000_000, - }; - } else null, - - // I THINK that if either pll is configured here, then that means - // that the ref clock generator MUST use xosc to feed the PLLs? - .ref = if (opts.ref) |_| - unreachable // don't explicitly configure for now - else if (pll_sys != null or pll_usb != null) ref_config: { - xosc_configured = true; - break :ref_config .{ - .generator = .ref, - .input = .{ - .source = .src_xosc, - .freq = xosc_freq, - .src_value = srcValue(.ref, .src_xosc), - .auxsrc_value = auxSrcValue(.ref, .src_xosc), + .pll_sys => input: { + config.xosc_configured = true; + output_freq = sys_opts.freq orelse 125_000_000; + assert(output_freq.? == 125_000_000); // if using pll use 125MHz for now + + // TODO: proper values for 125MHz + config.pll_sys = .{ + .refdiv = 1, + .fbdiv = 125, + .postdiv1 = 6, + .postdiv2 = 2, + }; + + break :input .{ + .source = .pll_sys, + // TODO: not really sure what frequency to + // drive pll at yet, but this is an okay start + .freq = 125_000_000, + .src_value = srcValue(.sys, .pll_sys), + .auxsrc_value = auxSrcValue(.sys, .pll_sys), + }; }, - .output_freq = xosc_freq, - }; - } else null, - - // for the rest of the generators we'll make it so that they can - // either use the ROSC, XOSC, or sys PLL, with whatever dividing - // they need - // adc requires a 48MHz clock, so only ever let it get hooked up to - // the usb PLL - .adc = if (opts.adc) |adc_opts| adc_config: { - assert(adc_opts.source == .pll_usb); - xosc_configured = true; + else => unreachable, // not an available input + }, + .output_freq = output_freq.?, + }; + } else null; + + // to keep things simple for now, we'll make it so that the usb + // generator can only be hooked up to the usb PLL, and only have + // one configuration for the usb PLL + config.usb = if (opts.usb) |usb_opts| usb_config: { + assert(config.pll_usb == null); + assert(usb_opts.source == .pll_usb); + + config.xosc_configured = true; + config.pll_usb = .{ + .refdiv = 1, + .fbdiv = 40, + .postdiv1 = 5, + .postdiv2 = 2, + }; - // TODO: some safety checks for overwriting this - pll_usb = .{ + break :usb_config .{ + .generator = .usb, + .input = .{ + .source = .pll_usb, + .freq = 48_000_000, + .src_value = srcValue(.usb, .pll_usb), + .auxsrc_value = auxSrcValue(.usb, .pll_usb), + }, + .output_freq = 48_000_000, + }; + } else null; + + // for the rest of the generators we'll make it so that they can + // either use the ROSC, XOSC, or sys PLL, with whatever dividing + // they need + + // adc requires a 48MHz clock, so only ever let it get hooked up to + // the usb PLL + config.adc = if (opts.adc) |adc_opts| adc_config: { + assert(adc_opts.source == .pll_usb); + config.xosc_configured = true; + + // TODO: some safety checks for overwriting this + if (config.pll_usb) |pll_usb| { + assert(pll_usb.refdiv == 1); + assert(pll_usb.fbdiv == 40); + assert(pll_usb.postdiv1 == 5); + assert(pll_usb.postdiv2 == 2); + } else { + config.pll_usb = .{ .refdiv = 1, - .vco_freq = 1_440_000_000, - .postdiv1 = 6, - .postdiv2 = 5, - }; - - break :adc_config .{ - .generator = .usb, - .input = .{ - .source = .pll_usb, - .freq = 48_000_000, - .src_value = srcValue(.adc, .pll_usb), - .auxsrc_value = auxSrcValue(.adc, .pll_usb), - }, - .output_freq = 48_000_000, + .fbdiv = 40, + .postdiv1 = 5, + .postdiv2 = 2, }; - } else null, - - .rtc = if (opts.rtc) |_| - unreachable // TODO + } + + break :adc_config .{ + .generator = .usb, + .input = .{ + .source = .pll_usb, + .freq = 48_000_000, + .src_value = srcValue(.adc, .pll_usb), + .auxsrc_value = auxSrcValue(.adc, .pll_usb), + }, + .output_freq = 48_000_000, + }; + } else null; + + config.rtc = if (opts.rtc) |_| + unreachable // TODO + else + null; + + config.peri = if (opts.peri) |peri_opts| peri_config: { + if (peri_opts.source == .src_xosc) + config.xosc_configured = true; + + break :peri_config .{ + .generator = .peri, + .input = .{ + .source = peri_opts.source, + .freq = config.getFrequency(peri_opts.source) orelse + @compileError("you need to configure the source: " ++ @tagName(peri_opts.source)), + .src_value = srcValue(.peri, peri_opts.source), + .auxsrc_value = auxSrcValue(.peri, peri_opts.source), + }, + .output_freq = if (peri_opts.freq) |output_freq| + output_freq + else + config.getFrequency(peri_opts.source).?, + }; + } else null; + + config.gpout0 = if (opts.gpout0) |gpout0_opts| .{ + .generator = .gpout0, + .input = .{ + .source = gpout0_opts.source, + .freq = config.getFrequency(gpout0_opts.source) orelse + @compileError("you need to configure the source: " ++ @tagName(gpout0_opts.source)), + .src_value = srcValue(.gpout0, gpout0_opts.source), + .auxsrc_value = auxSrcValue(.gpout0, gpout0_opts.source), + }, + .output_freq = if (gpout0_opts.freq) |output_freq| + output_freq else - null, - - .peri = if (opts.peri) |peri_opts| peri_config: { - if (peri_opts.source == .src_xosc) - xosc_configured = true; - - break :peri_config .{ - .generator = .peri, - .input = .{ - .source = peri_opts.source, - .freq = xosc_freq, - .src_value = srcValue(.peri, peri_opts.source), - .auxsrc_value = auxSrcValue(.peri, peri_opts.source), - }, - .output_freq = xosc_freq, - }; - } else null, + config.getFrequency(gpout0_opts.source).?, + } else null; - .xosc_configured = xosc_configured, - .pll_sys = pll_sys, - .pll_usb = pll_usb, - }; + return config; } /// this is explicitly comptime to encourage the user to have separate @@ -476,7 +533,7 @@ pub const GlobalConfiguration = struct { if (config.sys) |sys| switch (sys.input.source) { .pll_usb, .pll_sys => { regs.CLOCKS.CLK_SYS_CTRL.modify(.{ .SRC = 0 }); - while (regs.CLOCKS.CLK_SYS_SELECTED.* == 0) {} + while (!Generator.sys.selected()) {} }, else => {}, }; @@ -484,7 +541,7 @@ pub const GlobalConfiguration = struct { if (config.ref) |ref| switch (ref.input.source) { .pll_usb, .pll_sys => { regs.CLOCKS.CLK_REF_CTRL.modify(.{ .SRC = 0 }); - while (regs.CLOCKS.CLK_REF_SELECTED.* == 0) {} + while (!Generator.ref.selected()) {} }, else => {}, }; @@ -495,10 +552,15 @@ pub const GlobalConfiguration = struct { //// initialize clock generators if (config.ref) |ref| ref.apply(config.sys); + if (config.sys) |sys| sys.apply(config.sys); if (config.usb) |usb| usb.apply(config.sys); if (config.adc) |adc| adc.apply(config.sys); if (config.rtc) |rtc| rtc.apply(config.sys); if (config.peri) |peri| peri.apply(config.sys); + if (config.gpout0) |gpout0| gpout0.apply(config.sys); + if (config.gpout1) |gpout1| gpout1.apply(config.sys); + if (config.gpout2) |gpout2| gpout2.apply(config.sys); + if (config.gpout3) |gpout3| gpout3.apply(config.sys); } }; @@ -522,13 +584,12 @@ pub const Configuration = struct { // source frequency has to be faster because dividing will always reduce. assert(input.freq >= output_freq); - const div = @intCast(u32, (@intCast(u64, input.freq) << 8) / 8); + const div = @intCast(u32, (@intCast(u64, input.freq) << 8) / output_freq); // check divisor if (div > generator.getDiv()) generator.setDiv(div); - // TODO what _is_ an aux source? if (generator.hasGlitchlessMux() and input.src_value == 1) { generator.clearSource(); while (!generator.selected()) {} @@ -557,17 +618,18 @@ pub const Configuration = struct { } }; +// NOTE: untested pub fn countFrequencyKhz(source: Source, comptime clock_config: GlobalConfiguration) u32 { const ref_freq = clock_config.ref.?.output_freq; // wait for counter to be done while (CLOCKS.FC0_STATUS.read().RUNNING == 1) {} - CLOCKS.FC0_REF_KHZ.* = ref_freq / 1000; - CLOCKS.FC0_INTERVAL.* = 10; - CLOCKS.FC0_MIN_KHZ.* = 0; - CLOCKS.FC0_MAX_KHZ.* = std.math.maxInt(u32); - CLOCKS.FC0_SRC.* = @enumToInt(source); + CLOCKS.FC0_REF_KHZ.raw = ref_freq / 1000; + CLOCKS.FC0_INTERVAL.raw = 10; + CLOCKS.FC0_MIN_KHZ.raw = 0; + CLOCKS.FC0_MAX_KHZ.raw = std.math.maxInt(u32); + CLOCKS.FC0_SRC.raw = @enumToInt(source); while (CLOCKS.FC0_STATUS.read().DONE != 1) {} diff --git a/src/hal/gpio.zig b/src/hal/gpio.zig index 416b1559c..1aa0e6b45 100644 --- a/src/hal/gpio.zig +++ b/src/hal/gpio.zig @@ -131,6 +131,10 @@ pub inline fn put(comptime gpio: u32, value: u1) void { } } +pub inline fn toggle(comptime gpio: u32) void { + regs.SIO.GPIO_OUT_XOR.raw = (1 << gpio); +} + pub inline fn setFunction(comptime gpio: u32, function: Function) void { const pad_bank_reg = comptime std.fmt.comptimePrint("GPIO{}", .{gpio}); @field(regs.PADS_BANK0, pad_bank_reg).modify(.{ diff --git a/src/hal/pll.zig b/src/hal/pll.zig index eb16a63a9..4481abded 100644 --- a/src/hal/pll.zig +++ b/src/hal/pll.zig @@ -7,9 +7,13 @@ const xosc_freq = microzig.board.xosc_freq; pub const Configuration = struct { refdiv: u6, - vco_freq: u32, + fbdiv: u32, postdiv1: u3, postdiv2: u3, + + pub fn frequency(config: Configuration) u32 { + return @as(u32, xosc_freq) / config.refdiv * config.fbdiv / config.postdiv1 / config.postdiv2; + } }; pub const PLL = enum { @@ -41,15 +45,15 @@ pub const PLL = enum { } pub fn apply(pll: PLL, comptime config: Configuration) void { - const pll_regs = pll.getRegs(); - const ref_freq = xosc_freq / @as(u32, config.refdiv); - const fbdiv = @intCast(u12, config.vco_freq / ref_freq); - - assert(fbdiv >= 16 and fbdiv <= 320); + assert(config.fbdiv >= 16 and config.fbdiv <= 320); assert(config.postdiv1 >= 1 and config.postdiv1 <= 7); assert(config.postdiv2 >= 1 and config.postdiv2 <= 7); assert(config.postdiv2 <= config.postdiv1); - assert(ref_freq <= config.vco_freq / 16); + + const pll_regs = pll.getRegs(); + const ref_freq = xosc_freq / @as(u32, config.refdiv); + const vco_freq = ref_freq * config.fbdiv; + assert(ref_freq <= vco_freq / 16); // 1. program reference clock divider // 2. program feedback divider @@ -60,7 +64,7 @@ pub const PLL = enum { // do not bother a PLL which is already configured if (pll.isLocked() and config.refdiv == pll_regs.cs.read().REFDIV and - fbdiv == pll_regs.fbdiv_int.read() and + config.fbdiv == pll_regs.fbdiv_int.read() and config.postdiv1 == pll_regs.prim.read().POSTDIV1 and config.postdiv2 == pll_regs.prim.read().POSTDIV2) { @@ -71,7 +75,7 @@ pub const PLL = enum { // load vco related dividers pll_regs.cs.modify(.{ .REFDIV = config.refdiv }); - pll_regs.fbdiv_int.modify(fbdiv); + pll_regs.fbdiv_int.modify(config.fbdiv); // turn on PLL pll_regs.pwr.modify(.{ .PD = 0, .VCOPD = 0 }); diff --git a/src/hal/uart.zig b/src/hal/uart.zig new file mode 100644 index 000000000..18163992f --- /dev/null +++ b/src/hal/uart.zig @@ -0,0 +1,212 @@ +const std = @import("std"); +const microzig = @import("microzig"); +const gpio = @import("gpio.zig"); +const clocks = @import("clocks.zig"); + +const assert = std.debug.assert; +const regs = microzig.chip.registers; + +pub const WordBits = enum { + five, + six, + seven, + eight, +}; + +pub const StopBits = enum { + one, + two, +}; + +pub const Parity = enum { + none, + even, + odd, +}; + +pub const Config = struct { + clock_config: clocks.GlobalConfiguration, + tx_pin: u32, + rx_pin: u32, + baud_rate: u32, + word_bits: WordBits = .eight, + stop_bits: StopBits = .one, + parity: Parity = .none, +}; + +pub const UartRegs = extern struct { + dr: u32, + rsr: u32, + reserved0: [4]u32, + fr: @typeInfo(@TypeOf(regs.UART0.UARTFR)).Pointer.child, + resertev1: [1]u32, + ilpr: u32, + ibrd: u32, + fbrd: u32, + lcr_h: @typeInfo(@TypeOf(regs.UART0.UARTLCR_H)).Pointer.child, + cr: @typeInfo(@TypeOf(regs.UART0.UARTCR)).Pointer.child, + ifls: u32, + imsc: u32, + ris: u32, + mis: u32, + icr: u32, + dmacr: @typeInfo(@TypeOf(regs.UART0.UARTDMACR)).Pointer.child, + periphid0: u32, + periphid1: u32, + periphid2: u32, + periphid3: u32, + cellid0: u32, + cellid1: u32, + cellid2: u32, + cellid3: u32, + + padding: [4069]u32, +}; + +const uarts = @intToPtr(*volatile [2]UartRegs, regs.UART0.base_address); +comptime { + assert(@sizeOf(UartRegs) == (regs.UART1.base_address - regs.UART0.base_address)); +} + +pub const UART = enum { + uart0, + uart1, + + const WriteError = error{}; + pub const Writer = std.io.Writer(UART, WriteError, write); + + pub fn writer(uart: UART) Writer { + return .{ .context = uart }; + } + + fn getRegs(uart: UART) *volatile UartRegs { + return &uarts[@enumToInt(uart)]; + } + + pub fn init(comptime id: u32, comptime config: Config) UART { + const uart: UART = switch (id) { + 0 => .uart0, + 1 => .uart1, + else => @compileError("there is only uart0 and uart1"), + }; + + assert(config.baud_rate > 0); + + uart.reset(); + + const uart_regs = uart.getRegs(); + const peri_freq = config.clock_config.peri.?.output_freq; + uart.setBaudRate(config.baud_rate, peri_freq); + uart.setFormat(config.word_bits, config.stop_bits, config.parity); + + uart_regs.cr.modify(.{ + .UARTEN = 1, + .TXE = 1, + .RXE = 1, + }); + + uart_regs.lcr_h.modify(.{ .FEN = 1 }); + + // - always enable DREQ signals -- no harm if dma isn't listening + uart_regs.dmacr.modify(.{ + .TXDMAE = 1, + .RXDMAE = 1, + }); + + // TODO comptime assertions + gpio.setFunction(config.tx_pin, .uart); + gpio.setFunction(config.rx_pin, .uart); + + return uart; + } + + pub fn isReadable(uart: UART) bool { + return (0 == uart.getRegs().fr.read().RXFE); + } + + pub fn isWritable(uart: UART) bool { + return (0 == uart.getRegs().fr.read().TXFF); + } + + // TODO: implement tx fifo + pub fn write(uart: UART, payload: []const u8) WriteError!usize { + const uart_regs = uart.getRegs(); + for (payload) |byte| { + while (!uart.isWritable()) {} + + uart_regs.dr = byte; + } + + return payload.len; + } + + pub fn readWord(uart: UART) u8 { + const uart_regs = uart.getRegs(); + while (!uart.isReadable()) {} + + return @truncate(u8, uart_regs.dr); + } + + pub fn reset(uart: UART) void { + switch (uart) { + .uart0 => { + regs.RESETS.RESET.modify(.{ .uart0 = 1 }); + regs.RESETS.RESET.modify(.{ .uart0 = 0 }); + while (regs.RESETS.RESET_DONE.read().uart0 != 1) {} + }, + .uart1 => { + regs.RESETS.RESET.modify(.{ .uart1 = 1 }); + regs.RESETS.RESET.modify(.{ .uart1 = 0 }); + while (regs.RESETS.RESET_DONE.read().uart1 != 1) {} + }, + } + } + + pub fn setFormat( + uart: UART, + word_bits: WordBits, + stop_bits: StopBits, + parity: Parity, + ) void { + const uart_regs = uart.getRegs(); + uart_regs.lcr_h.modify(.{ + .WLEN = switch (word_bits) { + .eight => @as(u2, 0b11), + .seven => @as(u2, 0b10), + .six => @as(u2, 0b01), + .five => @as(u2, 0b00), + }, + .STP2 = switch (stop_bits) { + .one => @as(u1, 0), + .two => @as(u1, 1), + }, + .PEN = if (parity != .none) @as(u1, 1) else @as(u1, 0), + .EPS = switch (parity) { + .even => @as(u1, 1), + .odd => @as(u1, 0), + else => @as(u1, 0), + }, + }); + } + + fn setBaudRate(uart: UART, baud_rate: u32, peri_freq: u32) void { + assert(baud_rate > 0); + const uart_regs = uart.getRegs(); + const baud_rate_div = (8 * peri_freq / baud_rate); + var baud_ibrd = baud_rate_div >> 7; + + const baud_fbrd = if (baud_ibrd == 0) baud_fbrd: { + baud_ibrd = 1; + break :baud_fbrd 0; + } else if (baud_ibrd >= 65535) baud_fbrd: { + baud_ibrd = 65535; + break :baud_fbrd 0; + } else ((baud_rate_div & 0x7f) + 1) / 2; + + uart_regs.ibrd = baud_ibrd; + uart_regs.fbrd = baud_fbrd; + + // just want a write, don't want to change these values + uart_regs.lcr_h.modify(.{}); + } +}; diff --git a/src/rp2040.zig b/src/rp2040.zig index e96b90134..571b6489e 100644 --- a/src/rp2040.zig +++ b/src/rp2040.zig @@ -44,14 +44,12 @@ pub const VectorTable = extern struct { }; pub const registers = struct { - /// System Control Space pub const SCS = struct { pub const base_address = 0xe000e000; /// System Tick Timer pub const SysTick = struct { - /// address: 0xe000e010 /// SysTick Control and Status Register pub const CTRL = @intToPtr(*volatile Mmio(32, packed struct { @@ -134,7 +132,6 @@ pub const registers = struct { /// Nested Vectored Interrupt Controller pub const NVIC = struct { - /// address: 0xe000e100 /// Interrupt Set Enable Register pub const ISER = @intToPtr(*volatile u32, base_address + 0x100); @@ -158,7 +155,6 @@ pub const registers = struct { /// System Control Block pub const SCB = struct { - /// address: 0xe000ed00 pub const CPUID = @intToPtr(*volatile Mmio(32, packed struct { REVISION: u4, @@ -343,7 +339,6 @@ pub const registers = struct { /// Memory Protection Unit pub const MPU = struct { - /// address: 0xe000ed90 /// MPU Type Register pub const TYPE = @intToPtr(*volatile Mmio(32, packed struct { From 1dd837ae43a4cc4943e9753684ea5e620745c746 Mon Sep 17 00:00:00 2001 From: Matt Knight Date: Mon, 1 Aug 2022 00:26:02 -0700 Subject: [PATCH 012/286] Initial commit --- LICENSE | 21 +++++++++++++++++++++ README.md | 2 ++ 2 files changed, 23 insertions(+) create mode 100644 LICENSE create mode 100644 README.md diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..4818f98dd --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Zig Embedded Group + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 000000000..88015b53c --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# stm32 +HAL for stm32 (STMicro) devices From 2ae5eb6d028328a75cd9af9ed7e6214d572b73f3 Mon Sep 17 00:00:00 2001 From: Matt Knight Date: Mon, 1 Aug 2022 00:27:17 -0700 Subject: [PATCH 013/286] init with empty test --- README.md => README.adoc | 3 ++- tests/stm32f103.robot | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) rename README.md => README.adoc (78%) create mode 100644 tests/stm32f103.robot diff --git a/README.md b/README.adoc similarity index 78% rename from README.md rename to README.adoc index 88015b53c..df1b5ccb9 100644 --- a/README.md +++ b/README.adoc @@ -1,2 +1,3 @@ -# stm32 += stm32 + HAL for stm32 (STMicro) devices diff --git a/tests/stm32f103.robot b/tests/stm32f103.robot new file mode 100644 index 000000000..28c77fe96 --- /dev/null +++ b/tests/stm32f103.robot @@ -0,0 +1,10 @@ +*** Settings *** +Suite Setup Setup +Suite Teardown Teardown +Test Teardown Test Teardown +Resource ${RENODEKEYWORDS} + +*** Test Cases *** +Should Print Help + ${x}= Execute Command help + Should Contain ${x} Available commands: From a6f532476962b11f5dc6ceb4be52e8e5907dba96 Mon Sep 17 00:00:00 2001 From: Matt Knight Date: Mon, 1 Aug 2022 00:34:39 -0700 Subject: [PATCH 014/286] add list of boards in renode --- README.adoc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.adoc b/README.adoc index df1b5ccb9..d3f2f4097 100644 --- a/README.adoc +++ b/README.adoc @@ -1,3 +1,10 @@ = stm32 HAL for stm32 (STMicro) devices + +== stm32 boards that renode supports: + +- blue pill (stm32f103) +- nucleo 64 (stm32f103) +- f4 discovery +- f7 discovery From 9fa748ff13982950a58fb4ce45815ac5556f1fcc Mon Sep 17 00:00:00 2001 From: Matt Knight Date: Fri, 2 Sep 2022 14:45:21 -0700 Subject: [PATCH 015/286] Pin config (#9) * pin config * wip * wip * try some experimental pwm stuff --- build.zig | 27 +-- src/hal.zig | 9 +- src/hal/clocks.zig | 48 ++++- src/hal/gpio.zig | 45 +---- src/hal/pins.zig | 438 +++++++++++++++++++++++++++++++++++++++++++++ src/hal/pll.zig | 3 + src/hal/pwm.zig | 116 ++++++++++++ src/hal/resets.zig | 47 +++++ 8 files changed, 668 insertions(+), 65 deletions(-) create mode 100644 src/hal/pins.zig create mode 100644 src/hal/pwm.zig create mode 100644 src/hal/resets.zig diff --git a/build.zig b/build.zig index 7bf7beaf8..f4675dddd 100644 --- a/build.zig +++ b/build.zig @@ -2,21 +2,25 @@ const std = @import("std"); const Builder = std.build.Builder; const Pkg = std.build.Pkg; +const comptimePrint = std.fmt.comptimePrint; -pub const BuildOptions = struct { - packages: ?[]const Pkg = null, -}; +const chip_path = comptimePrint("{s}/src/rp2040.zig", .{root()}); +const board_path = comptimePrint("{s}/src/raspberry_pi_pico.zig", .{root()}); +const hal_path = comptimePrint("{s}/src/hal.zig", .{root()}); +const linkerscript_path = comptimePrint("{s}/rp2040.ld", .{root()}); + +pub const BuildOptions = struct {}; pub fn addPiPicoExecutable( comptime microzig: type, builder: *Builder, name: []const u8, source: []const u8, - options: BuildOptions, -) *std.build.LibExeObjStep { + _: BuildOptions, +) microzig.EmbeddedExecutable { const rp2040 = microzig.Chip{ .name = "RP2040", - .path = root() ++ "src/rp2040.zig", + .path = chip_path, .cpu = microzig.cpus.cortex_m0plus, .memory_regions = &.{ .{ .kind = .flash, .offset = 0x10000100, .length = (2048 * 1024) - 256 }, @@ -27,7 +31,7 @@ pub fn addPiPicoExecutable( const raspberry_pi_pico = microzig.Board{ .name = "Raspberry Pi Pico", - .path = root() ++ "src/raspberry_pi_pico.zig", + .path = board_path, .chip = rp2040, }; @@ -37,15 +41,14 @@ pub fn addPiPicoExecutable( source, .{ .board = raspberry_pi_pico }, .{ - .packages = options.packages, - .hal_package_path = .{ .path = root() ++ "src/hal.zig" }, + .hal_package_path = .{ .path = hal_path }, }, - ) catch @panic("failed to create embedded executable"); - ret.setLinkerScriptPath(.{ .path = root() ++ "rp2040.ld" }); + ); + ret.inner.setLinkerScriptPath(.{ .path = linkerscript_path }); return ret; } fn root() []const u8 { - return (std.fs.path.dirname(@src().file) orelse unreachable) ++ "/"; + return std.fs.path.dirname(@src().file) orelse "."; } diff --git a/src/hal.zig b/src/hal.zig index 92539f374..1dc50e6b0 100644 --- a/src/hal.zig +++ b/src/hal.zig @@ -1,25 +1,28 @@ const microzig = @import("microzig"); const regs = microzig.chip.registers; +pub const pins = @import("hal/pins.zig"); pub const gpio = @import("hal/gpio.zig"); pub const clocks = @import("hal/clocks.zig"); pub const multicore = @import("hal/multicore.zig"); pub const time = @import("hal/time.zig"); pub const uart = @import("hal/uart.zig"); +pub const pwm = @import("hal/pwm.zig"); pub const clock_config = clocks.GlobalConfiguration.init(.{ + .ref = .{ .source = .src_xosc }, .sys = .{ .source = .pll_sys, .freq = 125_000_000, }, - .ref = .{ .source = .src_xosc }, .peri = .{ .source = .clk_sys }, + .usb = .{ .source = .pll_usb }, + .adc = .{ .source = .pll_usb }, + .rtc = .{ .source = .pll_usb }, }); pub fn init() void { - // TODO: resets need to be reviewed here clock_config.apply(); - gpio.reset(); } pub fn getCpuId() u32 { diff --git a/src/hal/clocks.zig b/src/hal/clocks.zig index e81f1ea07..3553572cf 100644 --- a/src/hal/clocks.zig +++ b/src/hal/clocks.zig @@ -4,6 +4,9 @@ const pll = @import("pll.zig"); const util = @import("util.zig"); const assert = std.debug.assert; +// TODO: remove +const gpio = @import("gpio.zig"); + const regs = microzig.chip.registers; const CLOCKS = regs.CLOCKS; const xosc_freq = microzig.board.xosc_freq; @@ -470,10 +473,36 @@ pub const GlobalConfiguration = struct { }; } else null; - config.rtc = if (opts.rtc) |_| - unreachable // TODO - else - null; + config.rtc = if (opts.rtc) |rtc_opts| rtc_config: { + assert(rtc_opts.source == .pll_usb); + config.xosc_configured = true; + + // TODO: some safety checks for overwriting this + if (config.pll_usb) |pll_usb| { + assert(pll_usb.refdiv == 1); + assert(pll_usb.fbdiv == 40); + assert(pll_usb.postdiv1 == 5); + assert(pll_usb.postdiv2 == 2); + } else { + config.pll_usb = .{ + .refdiv = 1, + .fbdiv = 40, + .postdiv1 = 5, + .postdiv2 = 2, + }; + } + + break :rtc_config .{ + .generator = .usb, + .input = .{ + .source = .pll_usb, + .freq = 48_000_000, + .src_value = srcValue(.rtc, .pll_usb), + .auxsrc_value = auxSrcValue(.rtc, .pll_usb), + }, + .output_freq = 48_000_000, + }; + } else null; config.peri = if (opts.peri) |peri_opts| peri_config: { if (peri_opts.source == .src_xosc) @@ -557,6 +586,7 @@ pub const GlobalConfiguration = struct { if (config.adc) |adc| adc.apply(config.sys); if (config.rtc) |rtc| rtc.apply(config.sys); if (config.peri) |peri| peri.apply(config.sys); + if (config.gpout0) |gpout0| gpout0.apply(config.sys); if (config.gpout1) |gpout1| gpout1.apply(config.sys); if (config.gpout2) |gpout2| gpout2.apply(config.sys); @@ -592,16 +622,20 @@ pub const Configuration = struct { if (generator.hasGlitchlessMux() and input.src_value == 1) { generator.clearSource(); + while (!generator.selected()) {} } else { generator.disable(); - var delay_cycles = sys_config.output_freq / config.output_freq + 1; + const delay_cycles: u32 = sys_config.output_freq / config.output_freq + 1; asm volatile ( \\.syntax unified + \\movs r1, %[cycles] \\1: - \\subs %[cycles], #1 + \\subs r1, #1 \\bne 1b - : [cycles] "=r" (delay_cycles), + : + : [cycles] "i" (delay_cycles), + : "{r1}" ); } diff --git a/src/hal/gpio.zig b/src/hal/gpio.zig index 1aa0e6b45..ec48f114b 100644 --- a/src/hal/gpio.zig +++ b/src/hal/gpio.zig @@ -1,40 +1,6 @@ -//! ### Function Select Table -//! -//! GPIO | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 -//! -------|----------|-----------|----------|--------|-----|------|------|---------------|---- -//! 0 | SPI0 RX | UART0 TX | I2C0 SDA | PWM0 A | SIO | PIO0 | PIO1 | | USB OVCUR DET -//! 1 | SPI0 CSn | UART0 RX | I2C0 SCL | PWM0 B | SIO | PIO0 | PIO1 | | USB VBUS DET -//! 2 | SPI0 SCK | UART0 CTS | I2C1 SDA | PWM1 A | SIO | PIO0 | PIO1 | | USB VBUS EN -//! 3 | SPI0 TX | UART0 RTS | I2C1 SCL | PWM1 B | SIO | PIO0 | PIO1 | | USB OVCUR DET -//! 4 | SPI0 RX | UART1 TX | I2C0 SDA | PWM2 A | SIO | PIO0 | PIO1 | | USB VBUS DET -//! 5 | SPI0 CSn | UART1 RX | I2C0 SCL | PWM2 B | SIO | PIO0 | PIO1 | | USB VBUS EN -//! 6 | SPI0 SCK | UART1 CTS | I2C1 SDA | PWM3 A | SIO | PIO0 | PIO1 | | USB OVCUR DET -//! 7 | SPI0 TX | UART1 RTS | I2C1 SCL | PWM3 B | SIO | PIO0 | PIO1 | | USB VBUS DET -//! 8 | SPI1 RX | UART1 TX | I2C0 SDA | PWM4 A | SIO | PIO0 | PIO1 | | USB VBUS EN -//! 9 | SPI1 CSn | UART1 RX | I2C0 SCL | PWM4 B | SIO | PIO0 | PIO1 | | USB OVCUR DET -//! 10 | SPI1 SCK | UART1 CTS | I2C1 SDA | PWM5 A | SIO | PIO0 | PIO1 | | USB VBUS DET -//! 11 | SPI1 TX | UART1 RTS | I2C1 SCL | PWM5 B | SIO | PIO0 | PIO1 | | USB VBUS EN -//! 12 | SPI1 RX | UART0 TX | I2C0 SDA | PWM6 A | SIO | PIO0 | PIO1 | | USB OVCUR DET -//! 13 | SPI1 CSn | UART0 RX | I2C0 SCL | PWM6 B | SIO | PIO0 | PIO1 | | USB VBUS DET -//! 14 | SPI1 SCK | UART0 CTS | I2C1 SDA | PWM7 A | SIO | PIO0 | PIO1 | | USB VBUS EN -//! 15 | SPI1 TX | UART0 RTS | I2C1 SCL | PWM7 B | SIO | PIO0 | PIO1 | | USB OVCUR DET -//! 16 | SPI0 RX | UART0 TX | I2C0 SDA | PWM0 A | SIO | PIO0 | PIO1 | | USB VBUS DET -//! 17 | SPI0 CSn | UART0 RX | I2C0 SCL | PWM0 B | SIO | PIO0 | PIO1 | | USB VBUS EN -//! 18 | SPI0 SCK | UART0 CTS | I2C1 SDA | PWM1 A | SIO | PIO0 | PIO1 | | USB OVCUR DET -//! 19 | SPI0 TX | UART0 RTS | I2C1 SCL | PWM1 B | SIO | PIO0 | PIO1 | | USB VBUS DET -//! 20 | SPI0 RX | UART1 TX | I2C0 SDA | PWM2 A | SIO | PIO0 | PIO1 | CLOCK GPIN0 | USB VBUS EN -//! 21 | SPI0 CSn | UART1 RX | I2C0 SCL | PWM2 B | SIO | PIO0 | PIO1 | CLOCK GPOUT0 | USB OVCUR DET -//! 22 | SPI0 SCK | UART1 CTS | I2C1 SDA | PWM3 A | SIO | PIO0 | PIO1 | CLOCK GPIN1 | USB VBUS DET -//! 23 | SPI0 TX | UART1 RTS | I2C1 SCL | PWM3 B | SIO | PIO0 | PIO1 | CLOCK GPOUT1 | USB VBUS EN -//! 24 | SPI1 RX | UART1 TX | I2C0 SDA | PWM4 A | SIO | PIO0 | PIO1 | CLOCK GPOUT2 | USB OVCUR DET -//! 25 | SPI1 CSn | UART1 RX | I2C0 SCL | PWM4 B | SIO | PIO0 | PIO1 | CLOCK GPOUT3 | USB VBUS DET -//! 26 | SPI1 SCK | UART1 CTS | I2C1 SDA | PWM5 A | SIO | PIO0 | PIO1 | | USB VBUS EN -//! 27 | SPI1 TX | UART1 RTS | I2C1 SCL | PWM5 B | SIO | PIO0 | PIO1 | | USB OVCUR DET -//! 28 | SPI1 RX | UART0 TX | I2C0 SDA | PWM6 A | SIO | PIO0 | PIO1 | | USB VBUS DET -//! 29 | SPI1 CSn | UART0 RX | I2C0 SCL | PWM6 B | SIO | PIO0 | PIO1 | | USB VBUS EN - const std = @import("std"); const microzig = @import("microzig"); +const resets = @import("resets.zig"); const regs = microzig.chip.registers; const assert = std.debug.assert; @@ -91,14 +57,7 @@ pub const Enabled = enum { }; pub inline fn reset() void { - regs.RESETS.RESET.modify(.{ .io_bank0 = 1, .pads_bank0 = 1 }); - regs.RESETS.RESET.modify(.{ .io_bank0 = 0, .pads_bank0 = 0 }); - - while (true) { - const reset_done = regs.RESETS.RESET_DONE.read(); - if (reset_done.io_bank0 == 1 and reset_done.pads_bank0 == 1) - break; - } + resets.reset(&.{ .io_bank0, .pads_bank0 }); } /// Initialize a GPIO, set func to SIO diff --git a/src/hal/pins.zig b/src/hal/pins.zig new file mode 100644 index 000000000..ed075944b --- /dev/null +++ b/src/hal/pins.zig @@ -0,0 +1,438 @@ +const std = @import("std"); +const gpio = @import("gpio.zig"); +const pwm = @import("pwm.zig"); +const regs = @import("microzig").chip.registers; + +const assert = std.debug.assert; +const comptimePrint = std.fmt.comptimePrint; +const StructField = std.builtin.TypeInfo.StructField; + +pub const Pin = enum { + GPIO0, + GPIO1, + GPIO2, + GPIO3, + GPIO4, + GPIO5, + GPIO6, + GPIO7, + GPIO8, + GPIO9, + GPIO10, + GPIO11, + GPIO12, + GPIO13, + GPIO14, + GPIO15, + GPIO16, + GPIO17, + GPIO18, + GPIO19, + GPIO20, + GPIO21, + GPIO22, + GPIO23, + GPIO24, + GPIO25, + GPIO26, + GPIO27, + GPIO28, + GPIO29, + + pub const Configuration = struct { + name: ?[]const u8 = null, + function: Function = .SIO, + direction: ?gpio.Direction = null, + drive_strength: ?gpio.DriveStrength = null, + pull: ?enum { up, down } = null, + slew_rate: ?gpio.SlewRate = null, + // input/output enable + // schmitt trigger + // hysteresis + + pub fn getDirection(config: Configuration) gpio.Direction { + return if (config.direction) |direction| + direction + else if (config.function.isPwm()) + .out + else + @panic("TODO"); + } + }; +}; + +pub const Function = enum { + SIO, + + PIO0, + PIO1, + + SPI0_RX, + SPI0_CSn, + SPI0_SCK, + SPI0_TX, + + SPI1_RX, + SPI1_CSn, + SPI1_SCK, + SPI1_TX, + + UART0_TX, + UART0_RX, + UART0_CTS, + UART0_RTS, + + UART1_TX, + UART1_RX, + UART1_CTS, + UART1_RTS, + + I2C0_SDA, + I2C0_SCL, + + I2C1_SDA, + I2C1_SCL, + + PWM0_A, + PWM0_B, + + PWM1_A, + PWM1_B, + + PWM2_A, + PWM2_B, + + PWM3_A, + PWM3_B, + + PWM4_A, + PWM4_B, + + PWM5_A, + PWM5_B, + + PWM6_A, + PWM6_B, + + PWM7_A, + PWM7_B, + + CLOCK_GPIN0, + CLOCK_GPIN1, + + CLOCK_GPOUT0, + CLOCK_GPOUT1, + CLOCK_GPOUT2, + CLOCK_GPOUT3, + + USB_OVCUR_DET, + USB_VBUS_DET, + USB_VBUS_EN, + + ADC0, + ADC1, + ADC2, + ADC3, + + pub fn isPwm(function: Function) bool { + return switch (function) { + .PWM0_A, + .PWM0_B, + .PWM1_A, + .PWM1_B, + .PWM2_A, + .PWM2_B, + .PWM3_A, + .PWM3_B, + .PWM4_A, + .PWM4_B, + .PWM5_A, + .PWM5_B, + .PWM6_A, + .PWM6_B, + .PWM7_A, + .PWM7_B, + => true, + else => false, + }; + } + + pub fn pwmSlice(comptime function: Function) u32 { + return switch (function) { + .PWM0_A, .PWM0_B => 0, + .PWM1_A, .PWM1_B => 1, + .PWM2_A, .PWM2_B => 2, + .PWM3_A, .PWM3_B => 3, + .PWM4_A, .PWM4_B => 4, + .PWM5_A, .PWM5_B => 5, + .PWM6_A, .PWM6_B => 6, + .PWM7_A, .PWM7_B => 7, + else => @compileError("not pwm"), + }; + } + + pub fn pwmChannel(comptime function: Function) pwm.Channel { + return switch (function) { + .PWM0_A, + .PWM1_A, + .PWM2_A, + .PWM3_A, + .PWM4_A, + .PWM5_A, + .PWM6_A, + .PWM7_A, + => .a, + .PWM0_B, + .PWM1_B, + .PWM2_B, + .PWM3_B, + .PWM4_B, + .PWM5_B, + .PWM6_B, + .PWM7_B, + => .b, + else => @compileError("not pwm"), + }; + } +}; + +fn all() [30]u1 { + var ret: [30]u1 = undefined; + for (ret) |*elem| + elem.* = 1; + + return ret; +} + +fn list(gpio_list: []const u5) [30]u1 { + var ret = std.mem.zeroes([30]u1); + for (gpio_list) |num| + ret[num] = 1; + + return ret; +} + +fn single(gpio_num: u5) [30]u1 { + var ret = std.mem.zeroes([30]u1); + ret[gpio_num] = 1; + return ret; +} + +const function_table = [@typeInfo(Function).Enum.fields.len][30]u1{ + all(), // SIO + all(), // PIO0 + all(), // PIO1 + list(&.{ 0, 4, 16, 20 }), // SPI0_RX + list(&.{ 1, 5, 17, 21 }), // SPI0_CSn + list(&.{ 2, 6, 18, 22 }), // SPI0_SCK + list(&.{ 3, 7, 19, 23 }), // SPI0_TX + list(&.{ 8, 12, 24, 28 }), // SPI1_RX + list(&.{ 9, 13, 25, 29 }), // SPI1_CSn + list(&.{ 10, 14, 26 }), // SPI1_SCK + list(&.{ 11, 15, 27 }), // SPI1_TX + list(&.{ 0, 11, 16, 28 }), // UART0_TX + list(&.{ 1, 13, 17, 29 }), // UART0_RX + list(&.{ 2, 14, 18 }), // UART0_CTS + list(&.{ 3, 15, 19 }), // UART0_RTS + list(&.{ 4, 8, 20, 24 }), // UART1_TX + list(&.{ 5, 9, 21, 25 }), // UART1_RX + list(&.{ 6, 10, 22, 26 }), // UART1_CTS + list(&.{ 7, 11, 23, 27 }), // UART1_RTS + list(&.{ 0, 4, 8, 12, 16, 20, 24, 28 }), // I2C0_SDA + list(&.{ 1, 5, 9, 13, 17, 21, 25, 29 }), // I2C0_SCL + list(&.{ 2, 6, 10, 14, 18, 22, 26 }), // I2C1_SDA + list(&.{ 3, 7, 11, 15, 19, 23, 27 }), // I2C1_SCL + list(&.{ 0, 16 }), // PWM0_A + list(&.{ 1, 17 }), // PWM0_B + list(&.{ 2, 18 }), // PWM1_A + list(&.{ 3, 19 }), // PWM1_B + list(&.{ 4, 20 }), // PWM2_A + list(&.{ 5, 21 }), // PWM2_B + list(&.{ 6, 22 }), // PWM3_A + list(&.{ 7, 23 }), // PWM3_B + list(&.{ 8, 24 }), // PWM4_A + list(&.{ 9, 25 }), // PWM4_B + list(&.{ 10, 26 }), // PWM5_A + list(&.{ 11, 27 }), // PWM5_B + list(&.{ 12, 28 }), // PWM6_A + list(&.{ 13, 29 }), // PWM6_B + single(14), // PWM7_A + single(15), // PWM7_B + single(20), // CLOCK_GPIN0 + single(22), // CLOCK_GPIN1 + single(21), // CLOCK_GPOUT0 + single(23), // CLOCK_GPOUT1 + single(24), // CLOCK_GPOUT2 + single(25), // CLOCK_GPOUT3 + list(&.{ 0, 3, 6, 9, 12, 15, 18, 21, 24, 27 }), // USB_OVCUR_DET + list(&.{ 1, 4, 7, 10, 13, 16, 19, 22, 25, 28 }), // USB_VBUS_DET + list(&.{ 2, 5, 8, 11, 14, 17, 20, 23, 26, 29 }), // USB_VBUS_EN + single(26), // ADC0 + single(27), // ADC1 + single(28), // ADC2 + single(29), // ADC3 +}; + +pub fn GPIO(comptime num: u5, comptime direction: gpio.Direction) type { + return switch (direction) { + .in => struct { + const gpio_num = num; + + pub inline fn read(self: @This()) u1 { + _ = self; + @compileError("TODO"); + } + }, + .out => struct { + const gpio_num = num; + + pub inline fn put(self: @This(), value: u1) void { + _ = self; + gpio.put(gpio_num, value); + } + + pub inline fn toggle(self: @This()) void { + _ = self; + gpio.toggle(gpio_num); + } + }, + }; +} + +pub fn Pins(comptime config: GlobalConfiguration) type { + const count = count: { + var ret: usize = 0; + inline for (@typeInfo(GlobalConfiguration).Struct.fields) |field| { + if (@field(config, field.name)) |pin_config| + if (pin_config.function == .SIO or pin_config.function.isPwm()) { + ret += 1; + }; + } + + break :count ret; + }; + + var i: usize = 0; + var fields: [count]StructField = undefined; + inline for (@typeInfo(GlobalConfiguration).Struct.fields) |field| { + if (@field(config, field.name)) |pin_config| + if (pin_config.function == .SIO) { + fields[i] = StructField{ + .name = pin_config.name orelse field.name, + .field_type = GPIO(@enumToInt(@field(Pin, field.name)), pin_config.direction orelse .in), + .is_comptime = false, + .default_value = null, + .alignment = 1, + }; + + i += 1; + } else if (pin_config.function.isPwm()) { + fields[i] = StructField{ + .name = pin_config.name orelse @tagName(pin_config.function), + .field_type = pwm.PWM(pin_config.function.pwmSlice(), pin_config.function.pwmChannel()), + .is_comptime = false, + .default_value = null, + .alignment = 1, + }; + + i += 1; + }; + } + + return @Type(.{ + .Struct = .{ + .layout = .Auto, + .is_tuple = false, + .fields = &fields, + .decls = &.{}, + }, + }); +} + +pub const GlobalConfiguration = struct { + GPIO0: ?Pin.Configuration = null, + GPIO1: ?Pin.Configuration = null, + GPIO2: ?Pin.Configuration = null, + GPIO3: ?Pin.Configuration = null, + GPIO4: ?Pin.Configuration = null, + GPIO5: ?Pin.Configuration = null, + GPIO6: ?Pin.Configuration = null, + GPIO7: ?Pin.Configuration = null, + GPIO8: ?Pin.Configuration = null, + GPIO9: ?Pin.Configuration = null, + GPIO10: ?Pin.Configuration = null, + GPIO11: ?Pin.Configuration = null, + GPIO12: ?Pin.Configuration = null, + GPIO13: ?Pin.Configuration = null, + GPIO14: ?Pin.Configuration = null, + GPIO15: ?Pin.Configuration = null, + GPIO16: ?Pin.Configuration = null, + GPIO17: ?Pin.Configuration = null, + GPIO18: ?Pin.Configuration = null, + GPIO19: ?Pin.Configuration = null, + GPIO20: ?Pin.Configuration = null, + GPIO21: ?Pin.Configuration = null, + GPIO22: ?Pin.Configuration = null, + GPIO23: ?Pin.Configuration = null, + GPIO24: ?Pin.Configuration = null, + GPIO25: ?Pin.Configuration = null, + GPIO26: ?Pin.Configuration = null, + GPIO27: ?Pin.Configuration = null, + GPIO28: ?Pin.Configuration = null, + GPIO29: ?Pin.Configuration = null, + + comptime { + const pin_field_count = @typeInfo(Pin).Enum.fields.len; + const config_field_count = @typeInfo(GlobalConfiguration).Struct.fields.len; + if (pin_field_count != config_field_count) + @compileError(comptimePrint("{} {}", .{ pin_field_count, config_field_count })); + } + + pub fn apply(comptime config: GlobalConfiguration) Pins(config) { + comptime var input_gpios: u32 = 0; + comptime var output_gpios: u32 = 0; + + // validate selected function + comptime { + inline for (@typeInfo(GlobalConfiguration).Struct.fields) |field| + if (@field(config, field.name)) |pin_config| { + const gpio_num = @enumToInt(@field(Pin, field.name)); + if (0 == function_table[@enumToInt(pin_config.function)][gpio_num]) + @compileError(comptimePrint("{s} cannot be configured for {}", .{ field.name, pin_config.function })); + + switch (pin_config.getDirection()) { + .in => input_gpios |= 1 << gpio_num, + .out => output_gpios |= 1 << gpio_num, + } + }; + } + // TODO: ensure only one instance of an input function exists + + const used_gpios = comptime input_gpios | output_gpios; + gpio.reset(); + + if (used_gpios != 0) { + regs.SIO.GPIO_OE_CLR.raw = used_gpios; + regs.SIO.GPIO_OUT_CLR.raw = used_gpios; + + comptime var i: u32 = 0; + inline while (i < 32) : (i += 1) + if (0 != used_gpios & 1 << i) + gpio.setFunction(i, .sio); + } + + if (output_gpios != 0) + regs.SIO.GPIO_OE_SET.raw = output_gpios; + + // TODO: pwm initialization + + // fields in the Pins(config) type should be zero sized, so we just + // default build them all (wasn't sure how to do that cleanly in + // `Pins()` + var ret: Pins(config) = undefined; + inline for (@typeInfo(Pins(config)).Struct.fields) |field| + @field(ret, field.name) = .{}; + + return ret; + } +}; diff --git a/src/hal/pll.zig b/src/hal/pll.zig index 4481abded..117a42c14 100644 --- a/src/hal/pll.zig +++ b/src/hal/pll.zig @@ -2,6 +2,9 @@ const std = @import("std"); const microzig = @import("microzig"); const assert = std.debug.assert; +// TODO: remove +const gpio = @import("gpio.zig"); + const regs = microzig.chip.registers; const xosc_freq = microzig.board.xosc_freq; diff --git a/src/hal/pwm.zig b/src/hal/pwm.zig new file mode 100644 index 000000000..457fd2c2c --- /dev/null +++ b/src/hal/pwm.zig @@ -0,0 +1,116 @@ +const microzig = @import("microzig"); +const regs = microzig.chip.registers; + +pub const Config = struct {}; + +fn getRegs(comptime slice: u32) *volatile Regs { + @import("std").debug.assert(slice < 8); + return @intToPtr(*volatile Regs, regs.PWM.base_address); // + (slice * 0x14)); +} + +pub fn PWM(comptime slice_num: u32, comptime chan: Channel) type { + return struct { + pub const slice_number = slice_num; + pub const channel = chan; + + pub inline fn setLevel(_: @This(), level: u16) void { + setChannelLevel(slice_number, channel, level); + } + + pub fn slice(_: @This()) Slice(slice_number) { + return .{}; + } + }; +} + +pub fn Slice(comptime slice_num: u32) type { + return struct { + const slice_number = slice_num; + + pub inline fn setWrap(_: @This(), wrap: u16) void { + setSliceWrap(slice_number, wrap); + } + + pub inline fn enable(_: @This()) void { + getRegs(slice_number).csr.modify(.{ .EN = 1 }); + } + + pub inline fn disable(_: @This()) void { + getRegs(slice_number).csr.modify(.{ .EN = 0 }); + } + + pub inline fn setPhaseCorrect(_: @This(), phase_correct: bool) void { + setSlicePhaseCorrect(slice_number, phase_correct); + } + + pub inline fn setClkDiv(_: @This(), integer: u8, fraction: u4) void { + setSliceClkDiv(slice_number, integer, fraction); + } + }; +} + +pub const ClkDivMode = enum(u2) { + free_running, + b_high, + b_rising, + b_falling, +}; + +pub const Channel = enum(u1) { a, b }; + +const Regs = extern struct { + csr: @typeInfo(@TypeOf(regs.PWM.CH0_CSR)).Pointer.child, + div: @typeInfo(@TypeOf(regs.PWM.CH0_DIV)).Pointer.child, + ctr: @typeInfo(@TypeOf(regs.PWM.CH0_CTR)).Pointer.child, + cc: @typeInfo(@TypeOf(regs.PWM.CH0_CC)).Pointer.child, + top: @typeInfo(@TypeOf(regs.PWM.CH0_TOP)).Pointer.child, +}; + +pub inline fn setSlicePhaseCorrect(comptime slice: u32, phase_correct: bool) void { + getRegs(slice).csr.modify(.{ + .PH_CORRECT = if (phase_correct) 1 else 0, + }); +} + +pub inline fn setSliceClkDiv(comptime slice: u32, integer: u8, fraction: u4) void { + getRegs(slice).div.modify(.{ + .INT = integer, + .FRAC = fraction, + }); +} + +pub inline fn setSliceClkDivMode(comptime slice: u32, mode: ClkDivMode) void { + getRegs(slice).csr.modify(.{ + .DIVMODE = @enumToInt(mode), + }); +} + +pub inline fn setChannelInversion( + comptime slice: u32, + comptime channel: Channel, + invert: bool, +) void { + switch (channel) { + .a => getRegs(slice).csr.modify(.{ + .A_INV = if (invert) 1 else 0, + }), + .b => getRegs(slice).csr.modifi(.{ + .B_INV = if (invert) 1 else 0, + }), + } +} + +pub inline fn setSliceWrap(comptime slice: u32, wrap: u16) void { + getRegs(slice).top.raw = wrap; +} + +pub inline fn setChannelLevel( + comptime slice: u32, + comptime channel: Channel, + level: u16, +) void { + switch (channel) { + .a => getRegs(slice).cc.modify(.{ .A = level }), + .b => getRegs(slice).cc.modify(.{ .B = level }), + } +} diff --git a/src/hal/resets.zig b/src/hal/resets.zig new file mode 100644 index 000000000..0e0ea2bce --- /dev/null +++ b/src/hal/resets.zig @@ -0,0 +1,47 @@ +const std = @import("std"); +const microzig = @import("microzig"); + +const regs = microzig.chip.registers; +const EnumField = std.builtin.TypeInfo.EnumField; +const Mask = @typeInfo(@TypeOf(regs.RESETS.RESET)).Pointer.child.underlying_type; + +pub const Module = enum { + adc, + busctrl, + dma, + i2c0, + i2c1, + io_bank0, + io_qspi, + jtag, + pads_bank0, + pads_qspi, + pio0, + pio1, + pll_sys, + pll_usb, + pwm, + rtc, + spi0, + spi1, + syscfg, + sysinfo, + tbman, + timer, + uart0, + uart1, + usbctrl, +}; + +pub inline fn reset(comptime modules: []const Module) void { + comptime var mask = std.mem.zeroes(Mask); + + inline for (modules) |module| + @field(mask, @tagName(module)) = 1; + + const raw_mask = @bitCast(u32, mask); + regs.RESETS.RESET.raw = raw_mask; + regs.RESETS.RESET.raw = 0; + + while (regs.RESETS.RESET_DONE.raw & raw_mask != raw_mask) {} +} From d4a74cb4f3287fa05156d3aaea049264f4597692 Mon Sep 17 00:00:00 2001 From: Matt Knight Date: Sat, 17 Sep 2022 16:54:45 -0700 Subject: [PATCH 016/286] move examples in here (#12) --- .gitmodules | 3 + build.zig | 42 +- deps/microzig | 1 + examples/blinky.zig | 20 + examples/blinky_core1.zig | 29 + examples/gpio_clk.zig | 21 + examples/pwm.zig | 23 + examples/uart.zig | 48 ++ src/hal.zig | 2 + src/hal/gpio.zig | 3 + src/hal/irq.zig | 20 + src/hal/multicore.zig | 2 +- src/hal/pwm.zig | 8 + src/hal/uart.zig | 51 +- src/rp2040.zig | 1381 ++++++++++--------------------------- 15 files changed, 635 insertions(+), 1019 deletions(-) create mode 100644 .gitmodules create mode 160000 deps/microzig create mode 100644 examples/blinky.zig create mode 100644 examples/blinky_core1.zig create mode 100644 examples/gpio_clk.zig create mode 100644 examples/pwm.zig create mode 100644 examples/uart.zig create mode 100644 src/hal/irq.zig diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..32e895ccb --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "deps/microzig"] + path = deps/microzig + url = https://github.com/ZigEmbeddedGroup/microzig.git diff --git a/build.zig b/build.zig index f4675dddd..01a26ae6e 100644 --- a/build.zig +++ b/build.zig @@ -1,9 +1,10 @@ const std = @import("std"); - const Builder = std.build.Builder; const Pkg = std.build.Pkg; const comptimePrint = std.fmt.comptimePrint; +const microzig = @import("deps/microzig/src/main.zig"); + const chip_path = comptimePrint("{s}/src/rp2040.zig", .{root()}); const board_path = comptimePrint("{s}/src/raspberry_pi_pico.zig", .{root()}); const hal_path = comptimePrint("{s}/src/hal.zig", .{root()}); @@ -12,7 +13,6 @@ const linkerscript_path = comptimePrint("{s}/rp2040.ld", .{root()}); pub const BuildOptions = struct {}; pub fn addPiPicoExecutable( - comptime microzig: type, builder: *Builder, name: []const u8, source: []const u8, @@ -49,6 +49,44 @@ pub fn addPiPicoExecutable( return ret; } +// this build script is mostly for testing and verification of this +// package. In an attempt to modularize -- designing for a case where a +// project requires multiple HALs, it accepts microzig as a param +pub fn build(b: *Builder) !void { + const mode = b.standardReleaseOptions(); + var examples = Examples.init(b, mode); + examples.install(); +} + fn root() []const u8 { return std.fs.path.dirname(@src().file) orelse "."; } + +pub const Examples = struct { + blinky: microzig.EmbeddedExecutable, + blinky_core1: microzig.EmbeddedExecutable, + gpio_clk: microzig.EmbeddedExecutable, + pwm: microzig.EmbeddedExecutable, + uart: microzig.EmbeddedExecutable, + //uart_pins: microzig.EmbeddedExecutable, + + pub fn init(b: *Builder, mode: std.builtin.Mode) Examples { + var ret: Examples = undefined; + inline for (@typeInfo(Examples).Struct.fields) |field| { + @field(ret, field.name) = addPiPicoExecutable( + b, + field.name, + comptime root() ++ "/examples/" ++ field.name ++ ".zig", + .{}, + ); + @field(ret, field.name).setBuildMode(mode); + } + + return ret; + } + + pub fn install(examples: *Examples) void { + inline for (@typeInfo(Examples).Struct.fields) |field| + @field(examples, field.name).install(); + } +}; diff --git a/deps/microzig b/deps/microzig new file mode 160000 index 000000000..4159581b4 --- /dev/null +++ b/deps/microzig @@ -0,0 +1 @@ +Subproject commit 4159581b4848bfb8bbdf91dabdebd15ecd503427 diff --git a/examples/blinky.zig b/examples/blinky.zig new file mode 100644 index 000000000..ea3f2d8fd --- /dev/null +++ b/examples/blinky.zig @@ -0,0 +1,20 @@ +const std = @import("std"); +const microzig = @import("microzig"); +const rp2040 = microzig.hal; +const time = rp2040.time; + +const pin_config = rp2040.pins.GlobalConfiguration{ + .GPIO25 = .{ + .name = "led", + .direction = .out, + }, +}; + +pub fn main() !void { + const pins = pin_config.apply(); + + while (true) { + pins.led.toggle(); + time.sleepMs(250); + } +} diff --git a/examples/blinky_core1.zig b/examples/blinky_core1.zig new file mode 100644 index 000000000..a549f3094 --- /dev/null +++ b/examples/blinky_core1.zig @@ -0,0 +1,29 @@ +const std = @import("std"); + +const microzig = @import("microzig"); +const rp2040 = microzig.hal; +const gpio = rp2040.gpio; +const time = rp2040.time; +const multicore = rp2040.multicore; + +const led = 25; + +fn core1() void { + while (true) { + gpio.put(led, 1); + time.sleepMs(250); + gpio.put(led, 0); + time.sleepMs(250); + } +} + +pub fn main() !void { + gpio.init(led); + gpio.setDir(led, .out); + + multicore.launchCore1(core1); + + while (true) { + microzig.cpu.wfi(); + } +} diff --git a/examples/gpio_clk.zig b/examples/gpio_clk.zig new file mode 100644 index 000000000..52280e4a6 --- /dev/null +++ b/examples/gpio_clk.zig @@ -0,0 +1,21 @@ +const std = @import("std"); +const microzig = @import("microzig"); +const rp2040 = microzig.hal; +const gpio = rp2040.gpio; +const clocks = rp2040.clocks; + +const gpout0_pin = 21; +const clock_config = clocks.GlobalConfiguration.init(.{ + .sys = .{ .source = .src_xosc }, + .gpout0 = .{ .source = .clk_sys }, +}); + +pub fn init() void { + clock_config.apply(); + gpio.reset(); +} + +pub fn main() !void { + gpio.setFunction(gpout0_pin, .gpck); + while (true) {} +} diff --git a/examples/pwm.zig b/examples/pwm.zig new file mode 100644 index 000000000..9eff04393 --- /dev/null +++ b/examples/pwm.zig @@ -0,0 +1,23 @@ +const std = @import("std"); +const microzig = @import("microzig"); +const rp2040 = microzig.hal; +const gpio = rp2040.gpio; +const clocks = rp2040.clocks; +const time = rp2040.time; +const regs = microzig.chip.registers; +const multicore = rp2040.multicore; + +const pin_config = rp2040.pins.GlobalConfiguration{ + .GPIO25 = .{ .name = "led", .function = .PWM4_B }, +}; + +pub fn main() !void { + const pins = pin_config.apply(); + pins.led.slice().setWrap(100); + pins.led.setLevel(10); + pins.led.slice().enable(); + + while (true) { + time.sleepMs(250); + } +} diff --git a/examples/uart.zig b/examples/uart.zig new file mode 100644 index 000000000..ed29280b5 --- /dev/null +++ b/examples/uart.zig @@ -0,0 +1,48 @@ +const std = @import("std"); +const microzig = @import("microzig"); + +const rp2040 = microzig.hal; +const time = rp2040.time; +const gpio = rp2040.gpio; +const clocks = rp2040.clocks; + +const led = 25; +const uart_id = 0; +const baud_rate = 115200; +const uart_tx_pin = 0; +const uart_rx_pin = 1; + +pub fn panic(message: []const u8, _: ?*std.builtin.StackTrace) noreturn { + std.log.err("panic: {s}", .{message}); + @breakpoint(); + while (true) {} +} + +pub const log_level = .debug; +pub const log = rp2040.uart.log; + +pub fn main() !void { + gpio.reset(); + gpio.init(led); + gpio.setDir(led, .out); + gpio.put(led, 1); + + const uart = rp2040.uart.UART.init(uart_id, .{ + .baud_rate = baud_rate, + .tx_pin = uart_tx_pin, + .rx_pin = uart_rx_pin, + .clock_config = rp2040.clock_config, + }); + + rp2040.uart.initLogger(uart); + + var i: u32 = 0; + while (true) : (i += 1) { + gpio.put(led, 1); + std.log.info("what {}", .{i}); + time.sleepMs(500); + + gpio.put(led, 0); + time.sleepMs(500); + } +} diff --git a/src/hal.zig b/src/hal.zig index 1dc50e6b0..61132bd86 100644 --- a/src/hal.zig +++ b/src/hal.zig @@ -8,6 +8,8 @@ pub const multicore = @import("hal/multicore.zig"); pub const time = @import("hal/time.zig"); pub const uart = @import("hal/uart.zig"); pub const pwm = @import("hal/pwm.zig"); +pub const resets = @import("hal/resets.zig"); +pub const irq = @import("hal/irq.zig"); pub const clock_config = clocks.GlobalConfiguration.init(.{ .ref = .{ .source = .src_xosc }, diff --git a/src/hal/gpio.zig b/src/hal/gpio.zig index ec48f114b..18624eea9 100644 --- a/src/hal/gpio.zig +++ b/src/hal/gpio.zig @@ -4,6 +4,8 @@ const resets = @import("resets.zig"); const regs = microzig.chip.registers; const assert = std.debug.assert; +const log = std.log.scoped(.gpio); + pub const Function = enum(u5) { xip, spi, @@ -83,6 +85,7 @@ pub inline fn setDir(comptime gpio: u32, direction: Direction) void { /// Drive a single GPIO high/low pub inline fn put(comptime gpio: u32, value: u1) void { + std.log.debug("GPIO{} put: {}", .{ gpio, value }); const mask = 1 << gpio; switch (value) { 0 => regs.SIO.GPIO_OUT_CLR.raw = mask, diff --git a/src/hal/irq.zig b/src/hal/irq.zig new file mode 100644 index 000000000..7d57c7854 --- /dev/null +++ b/src/hal/irq.zig @@ -0,0 +1,20 @@ +const microzig = @import("microzig"); +const regs = microzig.chip.registers; + +// TODO: the register definitions are improved now, use them instead of raw +// writes/reads +fn getInterruptMask(comptime interrupt_name: []const u8) u32 { + const offset = @offsetOf(microzig.chip.VectorTable, interrupt_name); + + return (1 << ((offset / 4) - 16)); +} +pub fn enable(comptime interrupt_name: []const u8) void { + const mask = comptime getInterruptMask(interrupt_name); + regs.SCS.NVIC.ICPR.raw = mask; + regs.SCS.NVIC.ISER.raw = mask; +} + +pub fn disable(comptime interrupt_name: []const u8) void { + const mask = comptime getInterruptMask(interrupt_name); + regs.SCS.NVIC.ICER.raw = mask; +} diff --git a/src/hal/multicore.zig b/src/hal/multicore.zig index dd90d17d5..76811cf2a 100644 --- a/src/hal/multicore.zig +++ b/src/hal/multicore.zig @@ -88,7 +88,7 @@ pub fn launchCore1WithStack(entrypoint: fn () void, stack: []u32) void { 0, 0, 1, - regs.PPB.VTOR.raw, + regs.SCS.SCB.VTOR.raw, stack_ptr, @ptrToInt(wrapper), }; diff --git a/src/hal/pwm.zig b/src/hal/pwm.zig index 457fd2c2c..45cf90b37 100644 --- a/src/hal/pwm.zig +++ b/src/hal/pwm.zig @@ -1,6 +1,9 @@ +const std = @import("std"); const microzig = @import("microzig"); const regs = microzig.chip.registers; +const log = std.log.scoped(.pwm); + pub const Config = struct {}; fn getRegs(comptime slice: u32) *volatile Regs { @@ -67,12 +70,14 @@ const Regs = extern struct { }; pub inline fn setSlicePhaseCorrect(comptime slice: u32, phase_correct: bool) void { + log.debug("PWM{} set phase correct: {}", .{ slice, phase_correct }); getRegs(slice).csr.modify(.{ .PH_CORRECT = if (phase_correct) 1 else 0, }); } pub inline fn setSliceClkDiv(comptime slice: u32, integer: u8, fraction: u4) void { + log.debug("PWM{} set clk div: {}.{}", .{ slice, integer, fraction }); getRegs(slice).div.modify(.{ .INT = integer, .FRAC = fraction, @@ -80,6 +85,7 @@ pub inline fn setSliceClkDiv(comptime slice: u32, integer: u8, fraction: u4) voi } pub inline fn setSliceClkDivMode(comptime slice: u32, mode: ClkDivMode) void { + log.debug("PWM{} set clk div mode: {}", .{ slice, mode }); getRegs(slice).csr.modify(.{ .DIVMODE = @enumToInt(mode), }); @@ -101,6 +107,7 @@ pub inline fn setChannelInversion( } pub inline fn setSliceWrap(comptime slice: u32, wrap: u16) void { + log.debug("PWM{} set wrap: {}", .{ slice, wrap }); getRegs(slice).top.raw = wrap; } @@ -109,6 +116,7 @@ pub inline fn setChannelLevel( comptime channel: Channel, level: u16, ) void { + log.debug("PWM{} {} set level: {}", .{ slice, channel, level }); switch (channel) { .a => getRegs(slice).cc.modify(.{ .A = level }), .b => getRegs(slice).cc.modify(.{ .B = level }), diff --git a/src/hal/uart.zig b/src/hal/uart.zig index 18163992f..5f3f8c61f 100644 --- a/src/hal/uart.zig +++ b/src/hal/uart.zig @@ -2,6 +2,8 @@ const std = @import("std"); const microzig = @import("microzig"); const gpio = @import("gpio.zig"); const clocks = @import("clocks.zig"); +const resets = @import("resets.zig"); +const time = @import("time.zig"); const assert = std.debug.assert; const regs = microzig.chip.registers; @@ -39,7 +41,7 @@ pub const UartRegs = extern struct { rsr: u32, reserved0: [4]u32, fr: @typeInfo(@TypeOf(regs.UART0.UARTFR)).Pointer.child, - resertev1: [1]u32, + reserved1: [1]u32, ilpr: u32, ibrd: u32, fbrd: u32, @@ -149,16 +151,8 @@ pub const UART = enum { pub fn reset(uart: UART) void { switch (uart) { - .uart0 => { - regs.RESETS.RESET.modify(.{ .uart0 = 1 }); - regs.RESETS.RESET.modify(.{ .uart0 = 0 }); - while (regs.RESETS.RESET_DONE.read().uart0 != 1) {} - }, - .uart1 => { - regs.RESETS.RESET.modify(.{ .uart1 = 1 }); - regs.RESETS.RESET.modify(.{ .uart1 = 0 }); - while (regs.RESETS.RESET_DONE.read().uart1 != 1) {} - }, + .uart0 => resets.reset(&.{.uart0}), + .uart1 => resets.reset(&.{.uart1}), } } @@ -180,11 +174,13 @@ pub const UART = enum { .one => @as(u1, 0), .two => @as(u1, 1), }, - .PEN = if (parity != .none) @as(u1, 1) else @as(u1, 0), + .PEN = switch (parity) { + .none => @as(u1, 0), + .even, .odd => @as(u1, 1), + }, .EPS = switch (parity) { .even => @as(u1, 1), - .odd => @as(u1, 0), - else => @as(u1, 0), + .odd, .none => @as(u1, 0), }, }); } @@ -210,3 +206,30 @@ pub const UART = enum { uart_regs.lcr_h.modify(.{}); } }; + +var uart_logger: ?UART.Writer = null; + +pub fn initLogger(uart: UART) void { + uart_logger = uart.writer(); +} + +pub fn log( + comptime level: std.log.Level, + comptime scope: @TypeOf(.EnumLiteral), + comptime format: []const u8, + args: anytype, +) void { + const level_prefix = comptime "[{}.{:0>6}] " ++ level.asText(); + const prefix = comptime level_prefix ++ switch (scope) { + .default => ": ", + else => " (" ++ @tagName(scope) ++ "): ", + }; + + if (uart_logger) |uart| { + const current_time = time.getTimeSinceBoot(); + const seconds = current_time.us_since_boot / std.time.us_per_s; + const microseconds = current_time.us_since_boot % std.time.us_per_s; + + uart.print(prefix ++ format ++ "\r\n", .{ seconds, microseconds } ++ args) catch {}; + } +} diff --git a/src/rp2040.zig b/src/rp2040.zig index 571b6489e..6301bf235 100644 --- a/src/rp2040.zig +++ b/src/rp2040.zig @@ -1,5 +1,5 @@ // this file was generated by regz: https://github.com/ZigEmbeddedGroup/regz -// commit: 09c331e02d8037bf2e5133eaa40b1d762637b441 +// commit: 644b9d6f61ba1e49d90e4f606f82727f3d6581f2 // // vendor: Raspberry Pi // device: RP2040 @@ -134,23 +134,388 @@ pub const registers = struct { pub const NVIC = struct { /// address: 0xe000e100 /// Interrupt Set Enable Register - pub const ISER = @intToPtr(*volatile u32, base_address + 0x100); + pub const ISER = @intToPtr(*volatile Mmio(32, packed struct { + TIMER_IRQ_0: u1, + TIMER_IRQ_1: u1, + TIMER_IRQ_2: u1, + TIMER_IRQ_3: u1, + PWM_IRQ_WRAP: u1, + USBCTRL_IRQ: u1, + XIP_IRQ: u1, + PIO0_IRQ_0: u1, + PIO0_IRQ_1: u1, + PIO1_IRQ_0: u1, + PIO1_IRQ_1: u1, + DMA_IRQ_0: u1, + DMA_IRQ_1: u1, + IO_IRQ_BANK0: u1, + IO_IRQ_QSPI: u1, + SIO_IRQ_PROC0: u1, + SIO_IRQ_PROC1: u1, + CLOCKS_IRQ: u1, + SPI0_IRQ: u1, + SPI1_IRQ: u1, + UART0_IRQ: u1, + UART1_IRQ: u1, + ADC_IRQ_FIFO: u1, + I2C0_IRQ: u1, + I2C1_IRQ: u1, + RTC_IRQ: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + }), base_address + 0x100); /// address: 0xe000e180 /// Interrupt Clear Enable Register - pub const ICER = @intToPtr(*volatile u32, base_address + 0x180); + pub const ICER = @intToPtr(*volatile Mmio(32, packed struct { + TIMER_IRQ_0: u1, + TIMER_IRQ_1: u1, + TIMER_IRQ_2: u1, + TIMER_IRQ_3: u1, + PWM_IRQ_WRAP: u1, + USBCTRL_IRQ: u1, + XIP_IRQ: u1, + PIO0_IRQ_0: u1, + PIO0_IRQ_1: u1, + PIO1_IRQ_0: u1, + PIO1_IRQ_1: u1, + DMA_IRQ_0: u1, + DMA_IRQ_1: u1, + IO_IRQ_BANK0: u1, + IO_IRQ_QSPI: u1, + SIO_IRQ_PROC0: u1, + SIO_IRQ_PROC1: u1, + CLOCKS_IRQ: u1, + SPI0_IRQ: u1, + SPI1_IRQ: u1, + UART0_IRQ: u1, + UART1_IRQ: u1, + ADC_IRQ_FIFO: u1, + I2C0_IRQ: u1, + I2C1_IRQ: u1, + RTC_IRQ: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + }), base_address + 0x180); /// address: 0xe000e200 /// Interrupt Set Pending Register - pub const ISPR = @intToPtr(*volatile u32, base_address + 0x200); + pub const ISPR = @intToPtr(*volatile Mmio(32, packed struct { + TIMER_IRQ_0: u1, + TIMER_IRQ_1: u1, + TIMER_IRQ_2: u1, + TIMER_IRQ_3: u1, + PWM_IRQ_WRAP: u1, + USBCTRL_IRQ: u1, + XIP_IRQ: u1, + PIO0_IRQ_0: u1, + PIO0_IRQ_1: u1, + PIO1_IRQ_0: u1, + PIO1_IRQ_1: u1, + DMA_IRQ_0: u1, + DMA_IRQ_1: u1, + IO_IRQ_BANK0: u1, + IO_IRQ_QSPI: u1, + SIO_IRQ_PROC0: u1, + SIO_IRQ_PROC1: u1, + CLOCKS_IRQ: u1, + SPI0_IRQ: u1, + SPI1_IRQ: u1, + UART0_IRQ: u1, + UART1_IRQ: u1, + ADC_IRQ_FIFO: u1, + I2C0_IRQ: u1, + I2C1_IRQ: u1, + RTC_IRQ: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + }), base_address + 0x200); /// address: 0xe000e280 /// Interrupt Clear Pending Register - pub const ICPR = @intToPtr(*volatile u32, base_address + 0x280); + pub const ICPR = @intToPtr(*volatile Mmio(32, packed struct { + TIMER_IRQ_0: u1, + TIMER_IRQ_1: u1, + TIMER_IRQ_2: u1, + TIMER_IRQ_3: u1, + PWM_IRQ_WRAP: u1, + USBCTRL_IRQ: u1, + XIP_IRQ: u1, + PIO0_IRQ_0: u1, + PIO0_IRQ_1: u1, + PIO1_IRQ_0: u1, + PIO1_IRQ_1: u1, + DMA_IRQ_0: u1, + DMA_IRQ_1: u1, + IO_IRQ_BANK0: u1, + IO_IRQ_QSPI: u1, + SIO_IRQ_PROC0: u1, + SIO_IRQ_PROC1: u1, + CLOCKS_IRQ: u1, + SPI0_IRQ: u1, + SPI1_IRQ: u1, + UART0_IRQ: u1, + UART1_IRQ: u1, + ADC_IRQ_FIFO: u1, + I2C0_IRQ: u1, + I2C1_IRQ: u1, + RTC_IRQ: u1, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + }), base_address + 0x280); /// address: 0xe000e400 /// Interrupt Priority Register - pub const IP = @intToPtr(*volatile u32, base_address + 0x400); + pub const IP0 = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + TIMER_IRQ_0: u2, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + TIMER_IRQ_1: u2, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + TIMER_IRQ_2: u2, + reserved18: u1 = 0, + reserved19: u1 = 0, + reserved20: u1 = 0, + reserved21: u1 = 0, + reserved22: u1 = 0, + reserved23: u1 = 0, + TIMER_IRQ_3: u2, + }), base_address + 0x400); + + /// address: 0xe000e404 + /// Interrupt Priority Register + pub const IP1 = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + PWM_IRQ_WRAP: u2, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + USBCTRL_IRQ: u2, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + XIP_IRQ: u2, + reserved18: u1 = 0, + reserved19: u1 = 0, + reserved20: u1 = 0, + reserved21: u1 = 0, + reserved22: u1 = 0, + reserved23: u1 = 0, + PIO0_IRQ_0: u2, + }), base_address + 0x404); + + /// address: 0xe000e408 + /// Interrupt Priority Register + pub const IP2 = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + PIO0_IRQ_1: u2, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + PIO1_IRQ_0: u2, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + PIO1_IRQ_1: u2, + reserved18: u1 = 0, + reserved19: u1 = 0, + reserved20: u1 = 0, + reserved21: u1 = 0, + reserved22: u1 = 0, + reserved23: u1 = 0, + DMA_IRQ_0: u2, + }), base_address + 0x408); + + /// address: 0xe000e40c + /// Interrupt Priority Register + pub const IP3 = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + DMA_IRQ_1: u2, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + IO_IRQ_BANK0: u2, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + IO_IRQ_QSPI: u2, + reserved18: u1 = 0, + reserved19: u1 = 0, + reserved20: u1 = 0, + reserved21: u1 = 0, + reserved22: u1 = 0, + reserved23: u1 = 0, + SIO_IRQ_PROC0: u2, + }), base_address + 0x40c); + + /// address: 0xe000e410 + /// Interrupt Priority Register + pub const IP4 = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + SIO_IRQ_PROC1: u2, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + CLOCKS_IRQ: u2, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + SPI0_IRQ: u2, + reserved18: u1 = 0, + reserved19: u1 = 0, + reserved20: u1 = 0, + reserved21: u1 = 0, + reserved22: u1 = 0, + reserved23: u1 = 0, + SPI1_IRQ: u2, + }), base_address + 0x410); + + /// address: 0xe000e414 + /// Interrupt Priority Register + pub const IP5 = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + UART0_IRQ: u2, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + UART1_IRQ: u2, + reserved12: u1 = 0, + reserved13: u1 = 0, + reserved14: u1 = 0, + reserved15: u1 = 0, + reserved16: u1 = 0, + reserved17: u1 = 0, + ADC_IRQ_FIFO: u2, + reserved18: u1 = 0, + reserved19: u1 = 0, + reserved20: u1 = 0, + reserved21: u1 = 0, + reserved22: u1 = 0, + reserved23: u1 = 0, + I2C0_IRQ: u2, + }), base_address + 0x414); + + /// address: 0xe000e418 + /// Interrupt Priority Register + pub const IP6 = @intToPtr(*volatile Mmio(32, packed struct { + reserved0: u1 = 0, + reserved1: u1 = 0, + reserved2: u1 = 0, + reserved3: u1 = 0, + reserved4: u1 = 0, + reserved5: u1 = 0, + I2C1_IRQ: u2, + reserved6: u1 = 0, + reserved7: u1 = 0, + reserved8: u1 = 0, + reserved9: u1 = 0, + reserved10: u1 = 0, + reserved11: u1 = 0, + RTC_IRQ: u2, + padding0: u1 = 0, + padding1: u1 = 0, + padding2: u1 = 0, + padding3: u1 = 0, + padding4: u1 = 0, + padding5: u1 = 0, + padding6: u1 = 0, + padding7: u1 = 0, + padding8: u1 = 0, + padding9: u1 = 0, + padding10: u1 = 0, + padding11: u1 = 0, + padding12: u1 = 0, + padding13: u1 = 0, + padding14: u1 = 0, + padding15: u1 = 0, + }), base_address + 0x418); + + /// address: 0xe000e41c + /// Interrupt Priority Register + pub const IP7 = @intToPtr(*volatile u32, base_address + 0x41c); }; /// System Control Block @@ -28295,806 +28660,35 @@ pub const registers = struct { pub const base_address = 0xe0000000; pub const version = "1"; - /// address: 0xe000e010 - /// Use the SysTick Control and Status Register to enable the SysTick features. - pub const SYST_CSR = @intToPtr(*volatile Mmio(32, packed struct { - /// Enable SysTick counter:\n - /// 0 = Counter disabled.\n - /// 1 = Counter enabled. - ENABLE: u1, - /// Enables SysTick exception request:\n - /// 0 = Counting down to zero does not assert the SysTick exception request.\n - /// 1 = Counting down to zero to asserts the SysTick exception request. - TICKINT: u1, - /// SysTick clock source. Always reads as one if SYST_CALIB reports NOREF.\n - /// Selects the SysTick timer clock source:\n - /// 0 = External reference clock.\n - /// 1 = Processor clock. - CLKSOURCE: u1, - reserved0: u1 = 0, - reserved1: u1 = 0, - reserved2: u1 = 0, - reserved3: u1 = 0, - reserved4: u1 = 0, - reserved5: u1 = 0, - reserved6: u1 = 0, - reserved7: u1 = 0, - reserved8: u1 = 0, - reserved9: u1 = 0, - reserved10: u1 = 0, - reserved11: u1 = 0, - reserved12: u1 = 0, - /// Returns 1 if timer counted to 0 since last time this was read. Clears on read by - /// application or debugger. - COUNTFLAG: u1, - padding0: u1 = 0, - padding1: u1 = 0, - padding2: u1 = 0, - padding3: u1 = 0, - padding4: u1 = 0, - padding5: u1 = 0, - padding6: u1 = 0, - padding7: u1 = 0, - padding8: u1 = 0, - padding9: u1 = 0, - padding10: u1 = 0, - padding11: u1 = 0, - padding12: u1 = 0, - padding13: u1 = 0, - padding14: u1 = 0, - }), base_address + 0xe010); - - /// address: 0xe000e014 - /// Use the SysTick Reload Value Register to specify the start value to load into - /// the current value register when the counter reaches 0. It can be any value - /// between 0 and 0x00FFFFFF. A start value of 0 is possible, but has no effect - /// because the SysTick interrupt and COUNTFLAG are activated when counting from 1 - /// to 0. The reset value of this register is UNKNOWN.\n - /// To generate a multi-shot timer with a period of N processor clock cycles, use a - /// RELOAD value of N-1. For example, if the SysTick interrupt is required every 100 - /// clock pulses, set RELOAD to 99. - pub const SYST_RVR = @intToPtr(*volatile Mmio(32, packed struct { - /// Value to load into the SysTick Current Value Register when the counter reaches - /// 0. - RELOAD: u24, - padding0: u1 = 0, - padding1: u1 = 0, - padding2: u1 = 0, - padding3: u1 = 0, - padding4: u1 = 0, - padding5: u1 = 0, - padding6: u1 = 0, - padding7: u1 = 0, - }), base_address + 0xe014); - - /// address: 0xe000e018 - /// Use the SysTick Current Value Register to find the current value in the - /// register. The reset value of this register is UNKNOWN. - pub const SYST_CVR = @intToPtr(*volatile Mmio(32, packed struct { - /// Reads return the current value of the SysTick counter. This register is - /// write-clear. Writing to it with any value clears the register to 0. Clearing - /// this register also clears the COUNTFLAG bit of the SysTick Control and Status - /// Register. - CURRENT: u24, - padding0: u1 = 0, - padding1: u1 = 0, - padding2: u1 = 0, - padding3: u1 = 0, - padding4: u1 = 0, - padding5: u1 = 0, - padding6: u1 = 0, - padding7: u1 = 0, - }), base_address + 0xe018); - - /// address: 0xe000e01c - /// Use the SysTick Calibration Value Register to enable software to scale to any - /// required speed using divide and multiply. - pub const SYST_CALIB = @intToPtr(*volatile Mmio(32, packed struct { - /// An optional Reload value to be used for 10ms (100Hz) timing, subject to system - /// clock skew errors. If the value reads as 0, the calibration value is not known. - TENMS: u24, - reserved0: u1 = 0, - reserved1: u1 = 0, - reserved2: u1 = 0, - reserved3: u1 = 0, - reserved4: u1 = 0, - reserved5: u1 = 0, - /// If reads as 1, the calibration value for 10ms is inexact (due to clock - /// frequency). - SKEW: u1, - /// If reads as 1, the Reference clock is not provided - the CLKSOURCE bit of the - /// SysTick Control and Status register will be forced to 1 and cannot be cleared to - /// 0. - NOREF: u1, - }), base_address + 0xe01c); - - /// address: 0xe000e100 - /// Use the Interrupt Set-Enable Register to enable interrupts and determine which - /// interrupts are currently enabled.\n - /// If a pending interrupt is enabled, the NVIC activates the interrupt based on its - /// priority. If an interrupt is not enabled, asserting its interrupt signal changes - /// the interrupt state to pending, but the NVIC never activates the interrupt, - /// regardless of its priority. - pub const NVIC_ISER = @intToPtr(*volatile Mmio(32, packed struct { - /// Interrupt set-enable bits.\n - /// Write:\n - /// 0 = No effect.\n - /// 1 = Enable interrupt.\n - /// Read:\n - /// 0 = Interrupt disabled.\n - /// 1 = Interrupt enabled. - SETENA: u32, - }), base_address + 0xe100); - - /// address: 0xe000e180 - /// Use the Interrupt Clear-Enable Registers to disable interrupts and determine - /// which interrupts are currently enabled. - pub const NVIC_ICER = @intToPtr(*volatile Mmio(32, packed struct { - /// Interrupt clear-enable bits.\n - /// Write:\n - /// 0 = No effect.\n - /// 1 = Disable interrupt.\n - /// Read:\n - /// 0 = Interrupt disabled.\n - /// 1 = Interrupt enabled. - CLRENA: u32, - }), base_address + 0xe180); - - /// address: 0xe000e200 - /// The NVIC_ISPR forces interrupts into the pending state, and shows which - /// interrupts are pending. - pub const NVIC_ISPR = @intToPtr(*volatile Mmio(32, packed struct { - /// Interrupt set-pending bits.\n - /// Write:\n - /// 0 = No effect.\n - /// 1 = Changes interrupt state to pending.\n - /// Read:\n - /// 0 = Interrupt is not pending.\n - /// 1 = Interrupt is pending.\n - /// Note: Writing 1 to the NVIC_ISPR bit corresponding to:\n - /// An interrupt that is pending has no effect.\n - /// A disabled interrupt sets the state of that interrupt to pending. - SETPEND: u32, - }), base_address + 0xe200); - - /// address: 0xe000e280 - /// Use the Interrupt Clear-Pending Register to clear pending interrupts and - /// determine which interrupts are currently pending. - pub const NVIC_ICPR = @intToPtr(*volatile Mmio(32, packed struct { - /// Interrupt clear-pending bits.\n - /// Write:\n - /// 0 = No effect.\n - /// 1 = Removes pending state and interrupt.\n - /// Read:\n - /// 0 = Interrupt is not pending.\n - /// 1 = Interrupt is pending. - CLRPEND: u32, - }), base_address + 0xe280); - - /// address: 0xe000e400 - /// Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of - /// the available interrupts. 0 is the highest priority, and 3 is the lowest.\n - /// Note: Writing 1 to an NVIC_ICPR bit does not affect the active state of the - /// corresponding interrupt.\n - /// These registers are only word-accessible - pub const NVIC_IPR0 = @intToPtr(*volatile Mmio(32, packed struct { - reserved0: u1 = 0, - reserved1: u1 = 0, - reserved2: u1 = 0, - reserved3: u1 = 0, - reserved4: u1 = 0, - reserved5: u1 = 0, - /// Priority of interrupt 0 - IP_0: u2, - reserved6: u1 = 0, - reserved7: u1 = 0, - reserved8: u1 = 0, - reserved9: u1 = 0, - reserved10: u1 = 0, - reserved11: u1 = 0, - /// Priority of interrupt 1 - IP_1: u2, - reserved12: u1 = 0, - reserved13: u1 = 0, - reserved14: u1 = 0, - reserved15: u1 = 0, - reserved16: u1 = 0, - reserved17: u1 = 0, - /// Priority of interrupt 2 - IP_2: u2, - reserved18: u1 = 0, - reserved19: u1 = 0, - reserved20: u1 = 0, - reserved21: u1 = 0, - reserved22: u1 = 0, - reserved23: u1 = 0, - /// Priority of interrupt 3 - IP_3: u2, - }), base_address + 0xe400); - - /// address: 0xe000e404 - /// Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of - /// the available interrupts. 0 is the highest priority, and 3 is the lowest. - pub const NVIC_IPR1 = @intToPtr(*volatile Mmio(32, packed struct { + /// address: 0xe000ed20 + /// System handlers are a special class of exception handler that can have their + /// priority set to any of the priority levels. Use the System Handler Priority + /// Register 3 to set the priority of PendSV and SysTick. + pub const SHPR3 = @intToPtr(*volatile Mmio(32, packed struct { reserved0: u1 = 0, reserved1: u1 = 0, reserved2: u1 = 0, reserved3: u1 = 0, reserved4: u1 = 0, reserved5: u1 = 0, - /// Priority of interrupt 4 - IP_4: u2, reserved6: u1 = 0, reserved7: u1 = 0, reserved8: u1 = 0, reserved9: u1 = 0, reserved10: u1 = 0, reserved11: u1 = 0, - /// Priority of interrupt 5 - IP_5: u2, reserved12: u1 = 0, reserved13: u1 = 0, reserved14: u1 = 0, reserved15: u1 = 0, reserved16: u1 = 0, reserved17: u1 = 0, - /// Priority of interrupt 6 - IP_6: u2, reserved18: u1 = 0, reserved19: u1 = 0, reserved20: u1 = 0, reserved21: u1 = 0, - reserved22: u1 = 0, - reserved23: u1 = 0, - /// Priority of interrupt 7 - IP_7: u2, - }), base_address + 0xe404); - - /// address: 0xe000e408 - /// Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of - /// the available interrupts. 0 is the highest priority, and 3 is the lowest. - pub const NVIC_IPR2 = @intToPtr(*volatile Mmio(32, packed struct { - reserved0: u1 = 0, - reserved1: u1 = 0, - reserved2: u1 = 0, - reserved3: u1 = 0, - reserved4: u1 = 0, - reserved5: u1 = 0, - /// Priority of interrupt 8 - IP_8: u2, - reserved6: u1 = 0, - reserved7: u1 = 0, - reserved8: u1 = 0, - reserved9: u1 = 0, - reserved10: u1 = 0, - reserved11: u1 = 0, - /// Priority of interrupt 9 - IP_9: u2, - reserved12: u1 = 0, - reserved13: u1 = 0, - reserved14: u1 = 0, - reserved15: u1 = 0, - reserved16: u1 = 0, - reserved17: u1 = 0, - /// Priority of interrupt 10 - IP_10: u2, - reserved18: u1 = 0, - reserved19: u1 = 0, - reserved20: u1 = 0, - reserved21: u1 = 0, - reserved22: u1 = 0, - reserved23: u1 = 0, - /// Priority of interrupt 11 - IP_11: u2, - }), base_address + 0xe408); - - /// address: 0xe000e40c - /// Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of - /// the available interrupts. 0 is the highest priority, and 3 is the lowest. - pub const NVIC_IPR3 = @intToPtr(*volatile Mmio(32, packed struct { - reserved0: u1 = 0, - reserved1: u1 = 0, - reserved2: u1 = 0, - reserved3: u1 = 0, - reserved4: u1 = 0, - reserved5: u1 = 0, - /// Priority of interrupt 12 - IP_12: u2, - reserved6: u1 = 0, - reserved7: u1 = 0, - reserved8: u1 = 0, - reserved9: u1 = 0, - reserved10: u1 = 0, - reserved11: u1 = 0, - /// Priority of interrupt 13 - IP_13: u2, - reserved12: u1 = 0, - reserved13: u1 = 0, - reserved14: u1 = 0, - reserved15: u1 = 0, - reserved16: u1 = 0, - reserved17: u1 = 0, - /// Priority of interrupt 14 - IP_14: u2, - reserved18: u1 = 0, - reserved19: u1 = 0, - reserved20: u1 = 0, - reserved21: u1 = 0, - reserved22: u1 = 0, - reserved23: u1 = 0, - /// Priority of interrupt 15 - IP_15: u2, - }), base_address + 0xe40c); - - /// address: 0xe000e410 - /// Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of - /// the available interrupts. 0 is the highest priority, and 3 is the lowest. - pub const NVIC_IPR4 = @intToPtr(*volatile Mmio(32, packed struct { - reserved0: u1 = 0, - reserved1: u1 = 0, - reserved2: u1 = 0, - reserved3: u1 = 0, - reserved4: u1 = 0, - reserved5: u1 = 0, - /// Priority of interrupt 16 - IP_16: u2, - reserved6: u1 = 0, - reserved7: u1 = 0, - reserved8: u1 = 0, - reserved9: u1 = 0, - reserved10: u1 = 0, - reserved11: u1 = 0, - /// Priority of interrupt 17 - IP_17: u2, - reserved12: u1 = 0, - reserved13: u1 = 0, - reserved14: u1 = 0, - reserved15: u1 = 0, - reserved16: u1 = 0, - reserved17: u1 = 0, - /// Priority of interrupt 18 - IP_18: u2, - reserved18: u1 = 0, - reserved19: u1 = 0, - reserved20: u1 = 0, - reserved21: u1 = 0, - reserved22: u1 = 0, - reserved23: u1 = 0, - /// Priority of interrupt 19 - IP_19: u2, - }), base_address + 0xe410); - - /// address: 0xe000e414 - /// Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of - /// the available interrupts. 0 is the highest priority, and 3 is the lowest. - pub const NVIC_IPR5 = @intToPtr(*volatile Mmio(32, packed struct { - reserved0: u1 = 0, - reserved1: u1 = 0, - reserved2: u1 = 0, - reserved3: u1 = 0, - reserved4: u1 = 0, - reserved5: u1 = 0, - /// Priority of interrupt 20 - IP_20: u2, - reserved6: u1 = 0, - reserved7: u1 = 0, - reserved8: u1 = 0, - reserved9: u1 = 0, - reserved10: u1 = 0, - reserved11: u1 = 0, - /// Priority of interrupt 21 - IP_21: u2, - reserved12: u1 = 0, - reserved13: u1 = 0, - reserved14: u1 = 0, - reserved15: u1 = 0, - reserved16: u1 = 0, - reserved17: u1 = 0, - /// Priority of interrupt 22 - IP_22: u2, - reserved18: u1 = 0, - reserved19: u1 = 0, - reserved20: u1 = 0, - reserved21: u1 = 0, - reserved22: u1 = 0, - reserved23: u1 = 0, - /// Priority of interrupt 23 - IP_23: u2, - }), base_address + 0xe414); - - /// address: 0xe000e418 - /// Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of - /// the available interrupts. 0 is the highest priority, and 3 is the lowest. - pub const NVIC_IPR6 = @intToPtr(*volatile Mmio(32, packed struct { - reserved0: u1 = 0, - reserved1: u1 = 0, - reserved2: u1 = 0, - reserved3: u1 = 0, - reserved4: u1 = 0, - reserved5: u1 = 0, - /// Priority of interrupt 24 - IP_24: u2, - reserved6: u1 = 0, - reserved7: u1 = 0, - reserved8: u1 = 0, - reserved9: u1 = 0, - reserved10: u1 = 0, - reserved11: u1 = 0, - /// Priority of interrupt 25 - IP_25: u2, - reserved12: u1 = 0, - reserved13: u1 = 0, - reserved14: u1 = 0, - reserved15: u1 = 0, - reserved16: u1 = 0, - reserved17: u1 = 0, - /// Priority of interrupt 26 - IP_26: u2, - reserved18: u1 = 0, - reserved19: u1 = 0, - reserved20: u1 = 0, - reserved21: u1 = 0, - reserved22: u1 = 0, - reserved23: u1 = 0, - /// Priority of interrupt 27 - IP_27: u2, - }), base_address + 0xe418); - - /// address: 0xe000e41c - /// Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of - /// the available interrupts. 0 is the highest priority, and 3 is the lowest. - pub const NVIC_IPR7 = @intToPtr(*volatile Mmio(32, packed struct { - reserved0: u1 = 0, - reserved1: u1 = 0, - reserved2: u1 = 0, - reserved3: u1 = 0, - reserved4: u1 = 0, - reserved5: u1 = 0, - /// Priority of interrupt 28 - IP_28: u2, - reserved6: u1 = 0, - reserved7: u1 = 0, - reserved8: u1 = 0, - reserved9: u1 = 0, - reserved10: u1 = 0, - reserved11: u1 = 0, - /// Priority of interrupt 29 - IP_29: u2, - reserved12: u1 = 0, - reserved13: u1 = 0, - reserved14: u1 = 0, - reserved15: u1 = 0, - reserved16: u1 = 0, - reserved17: u1 = 0, - /// Priority of interrupt 30 - IP_30: u2, - reserved18: u1 = 0, - reserved19: u1 = 0, - reserved20: u1 = 0, - reserved21: u1 = 0, - reserved22: u1 = 0, - reserved23: u1 = 0, - /// Priority of interrupt 31 - IP_31: u2, - }), base_address + 0xe41c); - - /// address: 0xe000ed00 - /// Read the CPU ID Base Register to determine: the ID number of the processor core, - /// the version number of the processor core, the implementation details of the - /// processor core. - pub const CPUID = @intToPtr(*volatile Mmio(32, packed struct { - /// Minor revision number m in the rnpm revision status:\n - /// 0x1 = Patch 1. - REVISION: u4, - /// Number of processor within family: 0xC60 = Cortex-M0+ - PARTNO: u12, - /// Constant that defines the architecture of the processor:\n - /// 0xC = ARMv6-M architecture. - ARCHITECTURE: u4, - /// Major revision number n in the rnpm revision status:\n - /// 0x0 = Revision 0. - VARIANT: u4, - /// Implementor code: 0x41 = ARM - IMPLEMENTER: u8, - }), base_address + 0xed00); - - /// address: 0xe000ed04 - /// Use the Interrupt Control State Register to set a pending Non-Maskable Interrupt - /// (NMI), set or clear a pending PendSV, set or clear a pending SysTick, check for - /// pending exceptions, check the vector number of the highest priority pended - /// exception, check the vector number of the active exception. - pub const ICSR = @intToPtr(*volatile Mmio(32, packed struct { - /// Active exception number field. Reset clears the VECTACTIVE field. - VECTACTIVE: u9, - reserved0: u1 = 0, - reserved1: u1 = 0, - reserved2: u1 = 0, - /// Indicates the exception number for the highest priority pending exception: 0 = - /// no pending exceptions. Non zero = The pending state includes the effect of - /// memory-mapped enable and mask registers. It does not include the PRIMASK - /// special-purpose register qualifier. - VECTPENDING: u9, - reserved3: u1 = 0, - /// External interrupt pending flag - ISRPENDING: u1, - /// The system can only access this bit when the core is halted. It indicates that a - /// pending interrupt is to be taken in the next running cycle. If C_MASKINTS is - /// clear in the Debug Halting Control and Status Register, the interrupt is - /// serviced. - ISRPREEMPT: u1, - reserved4: u1 = 0, - /// SysTick exception clear-pending bit.\n - /// Write:\n - /// 0 = No effect.\n - /// 1 = Removes the pending state from the SysTick exception.\n - /// This bit is WO. On a register read its value is Unknown. - PENDSTCLR: u1, - /// SysTick exception set-pending bit.\n - /// Write:\n - /// 0 = No effect.\n - /// 1 = Changes SysTick exception state to pending.\n - /// Read:\n - /// 0 = SysTick exception is not pending.\n - /// 1 = SysTick exception is pending. - PENDSTSET: u1, - /// PendSV clear-pending bit.\n - /// Write:\n - /// 0 = No effect.\n - /// 1 = Removes the pending state from the PendSV exception. - PENDSVCLR: u1, - /// PendSV set-pending bit.\n - /// Write:\n - /// 0 = No effect.\n - /// 1 = Changes PendSV exception state to pending.\n - /// Read:\n - /// 0 = PendSV exception is not pending.\n - /// 1 = PendSV exception is pending.\n - /// Writing 1 to this bit is the only way to set the PendSV exception state to - /// pending. - PENDSVSET: u1, - reserved5: u1 = 0, - reserved6: u1 = 0, - /// Setting this bit will activate an NMI. Since NMI is the highest priority - /// exception, it will activate as soon as it is registered.\n - /// NMI set-pending bit.\n - /// Write:\n - /// 0 = No effect.\n - /// 1 = Changes NMI exception state to pending.\n - /// Read:\n - /// 0 = NMI exception is not pending.\n - /// 1 = NMI exception is pending.\n - /// Because NMI is the highest-priority exception, normally the processor enters the - /// NMI\n - /// exception handler as soon as it detects a write of 1 to this bit. Entering the - /// handler then clears\n - /// this bit to 0. This means a read of this bit by the NMI exception handler - /// returns 1 only if the\n - /// NMI signal is reasserted while the processor is executing that handler. - NMIPENDSET: u1, - }), base_address + 0xed04); - - /// address: 0xe000ed08 - /// The VTOR holds the vector table offset address. - pub const VTOR = @intToPtr(*volatile Mmio(32, packed struct { - reserved0: u1 = 0, - reserved1: u1 = 0, - reserved2: u1 = 0, - reserved3: u1 = 0, - reserved4: u1 = 0, - reserved5: u1 = 0, - reserved6: u1 = 0, - reserved7: u1 = 0, - /// Bits [31:8] of the indicate the vector table offset address. - TBLOFF: u24, - }), base_address + 0xed08); - - /// address: 0xe000ed0c - /// Use the Application Interrupt and Reset Control Register to: determine data - /// endianness, clear all active state information from debug halt mode, request a - /// system reset. - pub const AIRCR = @intToPtr(*volatile Mmio(32, packed struct { - reserved0: u1 = 0, - /// Clears all active state information for fixed and configurable exceptions. This - /// bit: is self-clearing, can only be set by the DAP when the core is halted. When - /// set: clears all active exception status of the processor, forces a return to - /// Thread mode, forces an IPSR of 0. A debugger must re-initialize the stack. - VECTCLRACTIVE: u1, - /// Writing 1 to this bit causes the SYSRESETREQ signal to the outer system to be - /// asserted to request a reset. The intention is to force a large system reset of - /// all major components except for debug. The C_HALT bit in the DHCSR is cleared as - /// a result of the system reset requested. The debugger does not lose contact with - /// the device. - SYSRESETREQ: u1, - reserved1: u1 = 0, - reserved2: u1 = 0, - reserved3: u1 = 0, - reserved4: u1 = 0, - reserved5: u1 = 0, - reserved6: u1 = 0, - reserved7: u1 = 0, - reserved8: u1 = 0, - reserved9: u1 = 0, - reserved10: u1 = 0, - reserved11: u1 = 0, - reserved12: u1 = 0, - /// Data endianness implemented:\n - /// 0 = Little-endian. - ENDIANESS: u1, - /// Register key:\n - /// Reads as Unknown\n - /// On writes, write 0x05FA to VECTKEY, otherwise the write is ignored. - VECTKEY: u16, - }), base_address + 0xed0c); - - /// address: 0xe000ed10 - /// System Control Register. Use the System Control Register for power-management - /// functions: signal to the system when the processor can enter a low power state, - /// control how the processor enters and exits low power states. - pub const SCR = @intToPtr(*volatile Mmio(32, packed struct { - reserved0: u1 = 0, - /// Indicates sleep-on-exit when returning from Handler mode to Thread mode:\n - /// 0 = Do not sleep when returning to Thread mode.\n - /// 1 = Enter sleep, or deep sleep, on return from an ISR to Thread mode.\n - /// Setting this bit to 1 enables an interrupt driven application to avoid returning - /// to an empty main application. - SLEEPONEXIT: u1, - /// Controls whether the processor uses sleep or deep sleep as its low power mode:\n - /// 0 = Sleep.\n - /// 1 = Deep sleep. - SLEEPDEEP: u1, - reserved1: u1 = 0, - /// Send Event on Pending bit:\n - /// 0 = Only enabled interrupts or events can wakeup the processor, disabled - /// interrupts are excluded.\n - /// 1 = Enabled events and all interrupts, including disabled interrupts, can wakeup - /// the processor.\n - /// When an event or interrupt becomes pending, the event signal wakes up the - /// processor from WFE. If the\n - /// processor is not waiting for an event, the event is registered and affects the - /// next WFE.\n - /// The processor also wakes up on execution of an SEV instruction or an external - /// event. - SEVONPEND: u1, - padding0: u1 = 0, - padding1: u1 = 0, - padding2: u1 = 0, - padding3: u1 = 0, - padding4: u1 = 0, - padding5: u1 = 0, - padding6: u1 = 0, - padding7: u1 = 0, - padding8: u1 = 0, - padding9: u1 = 0, - padding10: u1 = 0, - padding11: u1 = 0, - padding12: u1 = 0, - padding13: u1 = 0, - padding14: u1 = 0, - padding15: u1 = 0, - padding16: u1 = 0, - padding17: u1 = 0, - padding18: u1 = 0, - padding19: u1 = 0, - padding20: u1 = 0, - padding21: u1 = 0, - padding22: u1 = 0, - padding23: u1 = 0, - padding24: u1 = 0, - padding25: u1 = 0, - padding26: u1 = 0, - }), base_address + 0xed10); - - /// address: 0xe000ed14 - /// The Configuration and Control Register permanently enables stack alignment and - /// causes unaligned accesses to result in a Hard Fault. - pub const CCR = @intToPtr(*volatile Mmio(32, packed struct { - reserved0: u1 = 0, - reserved1: u1 = 0, - reserved2: u1 = 0, - /// Always reads as one, indicates that all unaligned accesses generate a HardFault. - UNALIGN_TRP: u1, - reserved3: u1 = 0, - reserved4: u1 = 0, - reserved5: u1 = 0, - reserved6: u1 = 0, - reserved7: u1 = 0, - /// Always reads as one, indicates 8-byte stack alignment on exception entry. On - /// exception entry, the processor uses bit[9] of the stacked PSR to indicate the - /// stack alignment. On return from the exception it uses this stacked bit to - /// restore the correct stack alignment. - STKALIGN: u1, - padding0: u1 = 0, - padding1: u1 = 0, - padding2: u1 = 0, - padding3: u1 = 0, - padding4: u1 = 0, - padding5: u1 = 0, - padding6: u1 = 0, - padding7: u1 = 0, - padding8: u1 = 0, - padding9: u1 = 0, - padding10: u1 = 0, - padding11: u1 = 0, - padding12: u1 = 0, - padding13: u1 = 0, - padding14: u1 = 0, - padding15: u1 = 0, - padding16: u1 = 0, - padding17: u1 = 0, - padding18: u1 = 0, - padding19: u1 = 0, - padding20: u1 = 0, - padding21: u1 = 0, - }), base_address + 0xed14); - - /// address: 0xe000ed1c - /// System handlers are a special class of exception handler that can have their - /// priority set to any of the priority levels. Use the System Handler Priority - /// Register 2 to set the priority of SVCall. - pub const SHPR2 = @intToPtr(*volatile Mmio(32, packed struct { - reserved0: u1 = 0, - reserved1: u1 = 0, - reserved2: u1 = 0, - reserved3: u1 = 0, - reserved4: u1 = 0, - reserved5: u1 = 0, - reserved6: u1 = 0, - reserved7: u1 = 0, - reserved8: u1 = 0, - reserved9: u1 = 0, - reserved10: u1 = 0, - reserved11: u1 = 0, - reserved12: u1 = 0, - reserved13: u1 = 0, - reserved14: u1 = 0, - reserved15: u1 = 0, - reserved16: u1 = 0, - reserved17: u1 = 0, - reserved18: u1 = 0, - reserved19: u1 = 0, - reserved20: u1 = 0, - reserved21: u1 = 0, - reserved22: u1 = 0, - reserved23: u1 = 0, - reserved24: u1 = 0, - reserved25: u1 = 0, - reserved26: u1 = 0, - reserved27: u1 = 0, - reserved28: u1 = 0, - reserved29: u1 = 0, - /// Priority of system handler 11, SVCall - PRI_11: u2, - }), base_address + 0xed1c); - - /// address: 0xe000ed20 - /// System handlers are a special class of exception handler that can have their - /// priority set to any of the priority levels. Use the System Handler Priority - /// Register 3 to set the priority of PendSV and SysTick. - pub const SHPR3 = @intToPtr(*volatile Mmio(32, packed struct { - reserved0: u1 = 0, - reserved1: u1 = 0, - reserved2: u1 = 0, - reserved3: u1 = 0, - reserved4: u1 = 0, - reserved5: u1 = 0, - reserved6: u1 = 0, - reserved7: u1 = 0, - reserved8: u1 = 0, - reserved9: u1 = 0, - reserved10: u1 = 0, - reserved11: u1 = 0, - reserved12: u1 = 0, - reserved13: u1 = 0, - reserved14: u1 = 0, - reserved15: u1 = 0, - reserved16: u1 = 0, - reserved17: u1 = 0, - reserved18: u1 = 0, - reserved19: u1 = 0, - reserved20: u1 = 0, - reserved21: u1 = 0, - /// Priority of system handler 14, PendSV - PRI_14: u2, + /// Priority of system handler 14, PendSV + PRI_14: u2, reserved22: u1 = 0, reserved23: u1 = 0, reserved24: u1 = 0, @@ -29104,223 +28698,6 @@ pub const registers = struct { /// Priority of system handler 15, SysTick PRI_15: u2, }), base_address + 0xed20); - - /// address: 0xe000ed24 - /// Use the System Handler Control and State Register to determine or clear the - /// pending status of SVCall. - pub const SHCSR = @intToPtr(*volatile Mmio(32, packed struct { - reserved0: u1 = 0, - reserved1: u1 = 0, - reserved2: u1 = 0, - reserved3: u1 = 0, - reserved4: u1 = 0, - reserved5: u1 = 0, - reserved6: u1 = 0, - reserved7: u1 = 0, - reserved8: u1 = 0, - reserved9: u1 = 0, - reserved10: u1 = 0, - reserved11: u1 = 0, - reserved12: u1 = 0, - reserved13: u1 = 0, - reserved14: u1 = 0, - /// Reads as 1 if SVCall is Pending. Write 1 to set pending SVCall, write 0 to clear - /// pending SVCall. - SVCALLPENDED: u1, - padding0: u1 = 0, - padding1: u1 = 0, - padding2: u1 = 0, - padding3: u1 = 0, - padding4: u1 = 0, - padding5: u1 = 0, - padding6: u1 = 0, - padding7: u1 = 0, - padding8: u1 = 0, - padding9: u1 = 0, - padding10: u1 = 0, - padding11: u1 = 0, - padding12: u1 = 0, - padding13: u1 = 0, - padding14: u1 = 0, - padding15: u1 = 0, - }), base_address + 0xed24); - - /// address: 0xe000ed90 - /// Read the MPU Type Register to determine if the processor implements an MPU, and - /// how many regions the MPU supports. - pub const MPU_TYPE = @intToPtr(*volatile Mmio(32, packed struct { - /// Indicates support for separate instruction and data address maps. Reads as 0 as - /// ARMv6-M only supports a unified MPU. - SEPARATE: u1, - reserved0: u1 = 0, - reserved1: u1 = 0, - reserved2: u1 = 0, - reserved3: u1 = 0, - reserved4: u1 = 0, - reserved5: u1 = 0, - reserved6: u1 = 0, - /// Number of regions supported by the MPU. - DREGION: u8, - /// Instruction region. Reads as zero as ARMv6-M only supports a unified MPU. - IREGION: u8, - padding0: u1 = 0, - padding1: u1 = 0, - padding2: u1 = 0, - padding3: u1 = 0, - padding4: u1 = 0, - padding5: u1 = 0, - padding6: u1 = 0, - padding7: u1 = 0, - }), base_address + 0xed90); - - /// address: 0xe000ed94 - /// Use the MPU Control Register to enable and disable the MPU, and to control - /// whether the default memory map is enabled as a background region for privileged - /// accesses, and whether the MPU is enabled for HardFaults and NMIs. - pub const MPU_CTRL = @intToPtr(*volatile Mmio(32, packed struct { - /// Enables the MPU. If the MPU is disabled, privileged and unprivileged accesses - /// use the default memory map.\n - /// 0 = MPU disabled.\n - /// 1 = MPU enabled. - ENABLE: u1, - /// Controls the use of the MPU for HardFaults and NMIs. Setting this bit when - /// ENABLE is clear results in UNPREDICTABLE behaviour.\n - /// When the MPU is enabled:\n - /// 0 = MPU is disabled during HardFault and NMI handlers, regardless of the value - /// of the ENABLE bit.\n - /// 1 = the MPU is enabled during HardFault and NMI handlers. - HFNMIENA: u1, - /// Controls whether the default memory map is enabled as a background region for - /// privileged accesses. This bit is ignored when ENABLE is clear.\n - /// 0 = If the MPU is enabled, disables use of the default memory map. Any memory - /// access to a location not\n - /// covered by any enabled region causes a fault.\n - /// 1 = If the MPU is enabled, enables use of the default memory map as a background - /// region for privileged software accesses.\n - /// When enabled, the background region acts as if it is region number -1. Any - /// region that is defined and enabled has priority over this default map. - PRIVDEFENA: u1, - padding0: u1 = 0, - padding1: u1 = 0, - padding2: u1 = 0, - padding3: u1 = 0, - padding4: u1 = 0, - padding5: u1 = 0, - padding6: u1 = 0, - padding7: u1 = 0, - padding8: u1 = 0, - padding9: u1 = 0, - padding10: u1 = 0, - padding11: u1 = 0, - padding12: u1 = 0, - padding13: u1 = 0, - padding14: u1 = 0, - padding15: u1 = 0, - padding16: u1 = 0, - padding17: u1 = 0, - padding18: u1 = 0, - padding19: u1 = 0, - padding20: u1 = 0, - padding21: u1 = 0, - padding22: u1 = 0, - padding23: u1 = 0, - padding24: u1 = 0, - padding25: u1 = 0, - padding26: u1 = 0, - padding27: u1 = 0, - padding28: u1 = 0, - }), base_address + 0xed94); - - /// address: 0xe000ed98 - /// Use the MPU Region Number Register to select the region currently accessed by - /// MPU_RBAR and MPU_RASR. - pub const MPU_RNR = @intToPtr(*volatile Mmio(32, packed struct { - /// Indicates the MPU region referenced by the MPU_RBAR and MPU_RASR registers.\n - /// The MPU supports 8 memory regions, so the permitted values of this field are - /// 0-7. - REGION: u4, - padding0: u1 = 0, - padding1: u1 = 0, - padding2: u1 = 0, - padding3: u1 = 0, - padding4: u1 = 0, - padding5: u1 = 0, - padding6: u1 = 0, - padding7: u1 = 0, - padding8: u1 = 0, - padding9: u1 = 0, - padding10: u1 = 0, - padding11: u1 = 0, - padding12: u1 = 0, - padding13: u1 = 0, - padding14: u1 = 0, - padding15: u1 = 0, - padding16: u1 = 0, - padding17: u1 = 0, - padding18: u1 = 0, - padding19: u1 = 0, - padding20: u1 = 0, - padding21: u1 = 0, - padding22: u1 = 0, - padding23: u1 = 0, - padding24: u1 = 0, - padding25: u1 = 0, - padding26: u1 = 0, - padding27: u1 = 0, - }), base_address + 0xed98); - - /// address: 0xe000ed9c - /// Read the MPU Region Base Address Register to determine the base address of the - /// region identified by MPU_RNR. Write to update the base address of said region or - /// that of a specified region, with whose number MPU_RNR will also be updated. - pub const MPU_RBAR = @intToPtr(*volatile Mmio(32, packed struct { - /// On writes, specifies the number of the region whose base address to update - /// provided VALID is set written as 1. On reads, returns bits [3:0] of MPU_RNR. - REGION: u4, - /// On writes, indicates whether the write must update the base address of the - /// region identified by the REGION field, updating the MPU_RNR to indicate this new - /// region.\n - /// Write:\n - /// 0 = MPU_RNR not changed, and the processor:\n - /// Updates the base address for the region specified in the MPU_RNR.\n - /// Ignores the value of the REGION field.\n - /// 1 = The processor:\n - /// Updates the value of the MPU_RNR to the value of the REGION field.\n - /// Updates the base address for the region specified in the REGION field.\n - /// Always reads as zero. - VALID: u1, - reserved0: u1 = 0, - reserved1: u1 = 0, - reserved2: u1 = 0, - /// Base address of the region. - ADDR: u24, - }), base_address + 0xed9c); - - /// address: 0xe000eda0 - /// Use the MPU Region Attribute and Size Register to define the size, access - /// behaviour and memory type of the region identified by MPU_RNR, and enable that - /// region. - pub const MPU_RASR = @intToPtr(*volatile Mmio(32, packed struct { - /// Enables the region. - ENABLE: u1, - /// Indicates the region size. Region size in bytes = 2^(SIZE+1). The minimum - /// permitted value is 7 (b00111) = 256Bytes - SIZE: u5, - reserved0: u1 = 0, - reserved1: u1 = 0, - /// Subregion Disable. For regions of 256 bytes or larger, each bit of this field - /// controls whether one of the eight equal subregions is enabled. - SRD: u8, - /// The MPU Region Attribute field. Use to define the region attribute control.\n - /// 28 = XN: Instruction access disable bit:\n - /// 0 = Instruction fetches enabled.\n - /// 1 = Instruction fetches disabled.\n - /// 26:24 = AP: Access permission field\n - /// 18 = S: Shareable bit\n - /// 17 = C: Cacheable bit\n - /// 16 = B: Bufferable bit - ATTRS: u16, - }), base_address + 0xeda0); }; }; @@ -29402,7 +28779,7 @@ pub fn mmioInt(addr: usize, comptime size: usize, comptime T: type) *volatile Mm return @intToPtr(*volatile MmioInt(size, T), addr); } -const InterruptVector = extern union { +pub const InterruptVector = extern union { C: fn () callconv(.C) void, Naked: fn () callconv(.Naked) void, // Interrupt is not supported on arm From 29aee14fd24e50f9f526d19bfdeb643a7665b509 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Quei=C3=9Fner?= Date: Fri, 30 Sep 2022 15:47:46 +0200 Subject: [PATCH 017/286] Update to latest master. (#13) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Felix "xq" Queißner --- deps/microzig | 2 +- examples/uart.zig | 2 +- src/hal/pins.zig | 2 +- src/hal/resets.zig | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/deps/microzig b/deps/microzig index 4159581b4..681b3b0d7 160000 --- a/deps/microzig +++ b/deps/microzig @@ -1 +1 @@ -Subproject commit 4159581b4848bfb8bbdf91dabdebd15ecd503427 +Subproject commit 681b3b0d7a6b2fc5d0f8918c583c790c646a31f1 diff --git a/examples/uart.zig b/examples/uart.zig index ed29280b5..7ccbe694a 100644 --- a/examples/uart.zig +++ b/examples/uart.zig @@ -12,7 +12,7 @@ const baud_rate = 115200; const uart_tx_pin = 0; const uart_rx_pin = 1; -pub fn panic(message: []const u8, _: ?*std.builtin.StackTrace) noreturn { +pub fn panic(message: []const u8, _: ?*std.builtin.StackTrace, _: ?usize) noreturn { std.log.err("panic: {s}", .{message}); @breakpoint(); while (true) {} diff --git a/src/hal/pins.zig b/src/hal/pins.zig index ed075944b..baa24799f 100644 --- a/src/hal/pins.zig +++ b/src/hal/pins.zig @@ -5,7 +5,7 @@ const regs = @import("microzig").chip.registers; const assert = std.debug.assert; const comptimePrint = std.fmt.comptimePrint; -const StructField = std.builtin.TypeInfo.StructField; +const StructField = std.builtin.Type.StructField; pub const Pin = enum { GPIO0, diff --git a/src/hal/resets.zig b/src/hal/resets.zig index 0e0ea2bce..5dbd81e1e 100644 --- a/src/hal/resets.zig +++ b/src/hal/resets.zig @@ -2,7 +2,7 @@ const std = @import("std"); const microzig = @import("microzig"); const regs = microzig.chip.registers; -const EnumField = std.builtin.TypeInfo.EnumField; +const EnumField = std.builtin.Type.EnumField; const Mask = @typeInfo(@TypeOf(regs.RESETS.RESET)).Pointer.child.underlying_type; pub const Module = enum { From 7c8d4302378be7d12f7af3f417e04c9a263de722 Mon Sep 17 00:00:00 2001 From: Matt Knight Date: Fri, 30 Sep 2022 12:27:00 -0700 Subject: [PATCH 018/286] adc bindings, mostly there but not quite (#14) --- build.zig | 1 + examples/adc.zig | 38 ++++++++++ src/hal.zig | 1 + src/hal/adc.zig | 194 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 234 insertions(+) create mode 100644 examples/adc.zig create mode 100644 src/hal/adc.zig diff --git a/build.zig b/build.zig index 01a26ae6e..889455dbb 100644 --- a/build.zig +++ b/build.zig @@ -63,6 +63,7 @@ fn root() []const u8 { } pub const Examples = struct { + adc: microzig.EmbeddedExecutable, blinky: microzig.EmbeddedExecutable, blinky_core1: microzig.EmbeddedExecutable, gpio_clk: microzig.EmbeddedExecutable, diff --git a/examples/adc.zig b/examples/adc.zig new file mode 100644 index 000000000..f8e8c6618 --- /dev/null +++ b/examples/adc.zig @@ -0,0 +1,38 @@ +//! This example takes periodic samples of the temperature sensor and +//! prints it to the UART using the stdlib logging facility. +const std = @import("std"); +const microzig = @import("microzig"); +const rp2040 = microzig.hal; +const adc = rp2040.adc; +const time = rp2040.time; + +const temp_sensor: adc.Input = .temperature_sensor; +const uart_id = 0; +const baud_rate = 115200; +const uart_tx_pin = 0; +const uart_rx_pin = 1; + +pub const log = rp2040.uart.log; + +pub fn init() void { + rp2040.clock_config.apply(); + rp2040.gpio.reset(); + adc.init(); + temp_sensor.init(); + + const uart = rp2040.uart.UART.init(uart_id, .{ + .baud_rate = baud_rate, + .tx_pin = uart_tx_pin, + .rx_pin = uart_rx_pin, + .clock_config = rp2040.clock_config, + }); + + rp2040.uart.initLogger(uart); +} + +pub fn main() void { + while (true) : (time.sleepMs(1000)) { + const sample = temp_sensor.read(); + std.log.info("temp value: {}", .{sample}); + } +} diff --git a/src/hal.zig b/src/hal.zig index 61132bd86..06c0cdd9d 100644 --- a/src/hal.zig +++ b/src/hal.zig @@ -1,6 +1,7 @@ const microzig = @import("microzig"); const regs = microzig.chip.registers; +pub const adc = @import("hal/adc.zig"); pub const pins = @import("hal/pins.zig"); pub const gpio = @import("hal/gpio.zig"); pub const clocks = @import("hal/clocks.zig"); diff --git a/src/hal/adc.zig b/src/hal/adc.zig new file mode 100644 index 000000000..a700651bd --- /dev/null +++ b/src/hal/adc.zig @@ -0,0 +1,194 @@ +//! NOTE: no settling time is needed when switching analog inputs + +const std = @import("std"); +const assert = std.debug.assert; + +const microzig = @import("microzig"); +const ADC = microzig.chip.registers.ADC; +const rp2040 = microzig.hal; +const gpio = rp2040.gpio; +const resets = rp2040.resets; + +pub const temperature_sensor = struct { + pub inline fn init() void { + setTempSensorEnabled(true); + } + + pub inline fn deinit() void { + setTempSensorEnabled(false); + } + + pub inline fn readRaw() u16 { + return Input.read(.temperature_sensor); + } + + // One-shot conversion returning the temperature in Celcius + pub inline fn read(comptime T: type, comptime Vref: T) T { + // TODO: consider fixed-point + const raw = @intToFloat(T, readRaw()); + const voltage: T = Vref * raw / 0x0fff; + return (27.0 - ((voltage - 0.706) / 0.001721)); + } +}; + +pub const Input = enum(u3) { + ain0, + ain1, + ain2, + ain3, + temperature_sensor, + + /// Setup the GPIO pin as an ADC input + pub fn init(comptime input: Input) void { + switch (input) { + .temperature_sensor => setTempSensorEnabled(true), + else => { + const gpio_num = @as(u32, @enumToInt(input)) + 26; + + gpio.setFunction(gpio_num, .@"null"); + // TODO: implement these, otherwise adc isn't going to work. + //gpio.disablePulls(gpio_num); + //gpio.setInputEnabled(gpio_num, false); + }, + } + } + + /// Disables temp sensor, otherwise it does nothing if the input is + /// one of the others. + pub inline fn deinit(input: Input) void { + switch (input) { + .temperature_sensor => setTempSensorEnabled(true), + else => {}, + } + } + + /// Single-shot, blocking conversion + pub fn read(input: Input) u12 { + // TODO: not sure if setting these during the same write is + // correct + ADC.CS.modify(.{ + .AINSEL = @enumToInt(input), + .START_ONCE = 1, + }); + + // wait for the + while (ADC.CS.read().READY == 0) {} + + return ADC.RESULT.read(); + } +}; + +pub const InputMask = InputMask: { + const enum_fields = @typeInfo(Input).Enum.fields; + var fields: [enum_fields.len]std.builtin.Type.StructField = undefined; + + const default_value: u1 = 0; + for (enum_fields) |enum_field, i| + fields[i] = std.builtin.Type.StructField{ + .name = enum_field.name, + .field_type = u1, + .default_value = &default_value, + .is_comptime = false, + .alignment = 1, + }; + + break :InputMask @Type(.{ + .Struct = .{ + .layout = .Packed, + .fields = &fields, + .backing_integer = std.meta.Int(.Unsigned, enum_fields.len), + .decls = &.{}, + .is_tuple = false, + }, + }); +}; + +/// Initialize ADC hardware +pub fn init() void { + resets.reset(&.{.adc}); + ADC.CS.write(.{ + .EN = 1, + .TS_EN = 0, + .START_ONCE = 0, + .START_MANY = 0, + .READY = 0, + .ERR = 0, + .ERR_STICKY = 0, + .AINSEL = 0, + .RROBIN = 0, + }); + + while (ADC.CS.read().READY == 0) {} +} + +/// Enable/disable ADC interrupt +pub inline fn irqSetEnabled(enable: bool) void { + // TODO: check if this works + ADC.INTE.write(.{ .FIFO = if (enable) @as(u1, 1) else @as(u1, 0) }); +} + +/// Select analog input for next conversion. +pub inline fn selectInput(input: Input) void { + ADC.CS.modify(.{ .AINSEL = @enumToInt(input) }); +} + +/// Get the currently selected analog input. 0..3 are GPIO 26..29 respectively, +/// 4 is the temperature sensor. +pub inline fn getSelectedInput() Input { + // TODO: ensure that the field shouldn't have other values + return @intToEnum(Input, ADC.CS.read().AINSEL); +} + +/// Set to true to power on the temperature sensor. +pub inline fn setTempSensorEnabled(enable: bool) void { + ADC.CS.modify(.{ .TS_EN = if (enable) @as(u1, 1) else @as(u1, 0) }); +} + +/// Sets which of the inputs are to be run in round-robin mode. Setting all to +/// 0 will disable round-robin mode but `disableRoundRobin()` is provided so +/// the user may be explicit. +pub inline fn setRoundRobin(comptime enabled_inputs: InputMask) void { + ADC.CS.modify(.{ .RROBIN = @bitCast(u5, enabled_inputs) }); +} + +/// Disable round-robin sample mode. +pub inline fn disableRoundRobin() void { + ADC.CS.modify(.{ .RROBIN = 0 }); +} + +/// Enable free-running sample mode. +pub inline fn run(enable: bool) void { + ADC.CS.modify(.{ .START_MANY = if (enable) @as(u1, 1) else @as(u1, 0) }); +} + +/// TODO: implement +pub inline fn setClkDiv() void {} + +/// The fifo is 4 samples long, if a conversion is completed and the FIFO is +/// full, the result is dropped. +pub const fifo = struct { + /// TODO: implement + pub inline fn setup() void { + // There are a number of considerations wrt DMA and error detection + } + + /// TODO: implement + /// Return true if FIFO is empty. + pub inline fn isEmpty() bool {} + + /// TODO: implement + /// Read how many samples are in the FIFO. + pub inline fn getLevel() u8 {} + + /// TODO: implement + /// Pop latest result from FIFO. + pub inline fn get() u16 {} + + /// TODO: implement + /// Block until result is available in FIFO, then pop it. + pub inline fn getBlocking() u16 {} + + /// TODO: implement + /// Wait for conversion to complete then discard results in FIFO. + pub inline fn drain() void {} +}; From 5c853fd23ad400ecb748fba7acb2cc2c0a77c053 Mon Sep 17 00:00:00 2001 From: Matt Knight Date: Fri, 30 Sep 2022 12:32:37 -0700 Subject: [PATCH 019/286] use compile errors instead of comments (#15) --- src/hal/adc.zig | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/hal/adc.zig b/src/hal/adc.zig index a700651bd..84b99a7d1 100644 --- a/src/hal/adc.zig +++ b/src/hal/adc.zig @@ -161,34 +161,40 @@ pub inline fn run(enable: bool) void { ADC.CS.modify(.{ .START_MANY = if (enable) @as(u1, 1) else @as(u1, 0) }); } -/// TODO: implement -pub inline fn setClkDiv() void {} +pub inline fn setClkDiv() void { + @compileError("todo"); +} /// The fifo is 4 samples long, if a conversion is completed and the FIFO is /// full, the result is dropped. pub const fifo = struct { - /// TODO: implement pub inline fn setup() void { + @compileError("todo"); // There are a number of considerations wrt DMA and error detection } - /// TODO: implement /// Return true if FIFO is empty. - pub inline fn isEmpty() bool {} + pub inline fn isEmpty() bool { + @compileError("todo"); + } - /// TODO: implement /// Read how many samples are in the FIFO. - pub inline fn getLevel() u8 {} + pub inline fn getLevel() u8 { + @compileError("todo"); + } - /// TODO: implement /// Pop latest result from FIFO. - pub inline fn get() u16 {} + pub inline fn get() u16 { + @compileError("todo"); + } - /// TODO: implement /// Block until result is available in FIFO, then pop it. - pub inline fn getBlocking() u16 {} + pub inline fn getBlocking() u16 { + @compileError("todo"); + } - /// TODO: implement /// Wait for conversion to complete then discard results in FIFO. - pub inline fn drain() void {} + pub inline fn drain() void { + @compileError("todo"); + } }; From fe14d4f03b3f2cd5a989bcf497182cd0a140c4ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Sat, 1 Oct 2022 14:05:57 +0200 Subject: [PATCH 020/286] Implements input, pull up/down and uart routing. --- build.zig | 2 +- src/hal/gpio.zig | 8 ++++++++ src/hal/pins.zig | 43 ++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 49 insertions(+), 4 deletions(-) diff --git a/build.zig b/build.zig index 889455dbb..d00c9621b 100644 --- a/build.zig +++ b/build.zig @@ -3,7 +3,7 @@ const Builder = std.build.Builder; const Pkg = std.build.Pkg; const comptimePrint = std.fmt.comptimePrint; -const microzig = @import("deps/microzig/src/main.zig"); +pub const microzig = @import("deps/microzig/src/main.zig"); const chip_path = comptimePrint("{s}/src/rp2040.zig", .{root()}); const board_path = comptimePrint("{s}/src/raspberry_pi_pico.zig", .{root()}); diff --git a/src/hal/gpio.zig b/src/hal/gpio.zig index 18624eea9..90e214177 100644 --- a/src/hal/gpio.zig +++ b/src/hal/gpio.zig @@ -97,6 +97,14 @@ pub inline fn toggle(comptime gpio: u32) void { regs.SIO.GPIO_OUT_XOR.raw = (1 << gpio); } +pub inline fn read(comptime gpio: u32) u1 { + const mask = 1 << gpio; + return if ((regs.SIO.GPIO_IN.raw & mask) != 0) + 1 + else + 0; +} + pub inline fn setFunction(comptime gpio: u32, function: Function) void { const pad_bank_reg = comptime std.fmt.comptimePrint("GPIO{}", .{gpio}); @field(regs.PADS_BANK0, pad_bank_reg).modify(.{ diff --git a/src/hal/pins.zig b/src/hal/pins.zig index baa24799f..6980bfc2b 100644 --- a/src/hal/pins.zig +++ b/src/hal/pins.zig @@ -50,11 +50,15 @@ pub const Pin = enum { // schmitt trigger // hysteresis - pub fn getDirection(config: Configuration) gpio.Direction { + pub fn getDirection(comptime config: Configuration) gpio.Direction { return if (config.direction) |direction| direction - else if (config.function.isPwm()) + else if (comptime config.function.isPwm()) .out + else if (comptime config.function.isUartTx()) + .out + else if (comptime config.function.isUartRx()) + .in else @panic("TODO"); } @@ -157,6 +161,24 @@ pub const Function = enum { }; } + pub fn isUartTx(function: Function) bool { + return switch (function) { + .UART0_TX, + .UART1_TX, + => true, + else => false, + }; + } + + pub fn isUartRx(function: Function) bool { + return switch (function) { + .UART0_RX, + .UART1_RX, + => true, + else => false, + }; + } + pub fn pwmSlice(comptime function: Function) u32 { return switch (function) { .PWM0_A, .PWM0_B => 0, @@ -280,7 +302,7 @@ pub fn GPIO(comptime num: u5, comptime direction: gpio.Direction) type { pub inline fn read(self: @This()) u1 { _ = self; - @compileError("TODO"); + return gpio.read(gpio_num); } }, .out => struct { @@ -424,6 +446,21 @@ pub const GlobalConfiguration = struct { if (output_gpios != 0) regs.SIO.GPIO_OE_SET.raw = output_gpios; + if (input_gpios != 0) { + inline for (@typeInfo(GlobalConfiguration).Struct.fields) |field| + if (@field(config, field.name)) |pin_config| { + const pull = pin_config.pull orelse continue; + if (comptime pin_config.getDirection() != .in) + @compileError("Only input pins can have pull up/down enabled"); + + const gpio_regs = @field(regs.PADS_BANK0, field.name); + gpio_regs.modify(comptime .{ + .PUE = @boolToInt(pull == .up), + .PDE = @boolToInt(pull == .down), + }); + }; + } + // TODO: pwm initialization // fields in the Pins(config) type should be zero sized, so we just From a55df1b52c28a4d0f4eff6e2abfcdeddbf6e5eed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Sat, 1 Oct 2022 21:03:21 +0200 Subject: [PATCH 021/286] Some debug logs in adc.reset() and resets.reset(), fixes some bugs with booleans. --- src/hal/adc.zig | 5 ++++- src/hal/pwm.zig | 9 +++++---- src/hal/resets.zig | 26 +++++++++++++++++++++++++- 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/src/hal/adc.zig b/src/hal/adc.zig index 84b99a7d1..92869fcf9 100644 --- a/src/hal/adc.zig +++ b/src/hal/adc.zig @@ -105,7 +105,9 @@ pub const InputMask = InputMask: { /// Initialize ADC hardware pub fn init() void { + std.log.info("init.a", .{}); resets.reset(&.{.adc}); + std.log.info("init.b", .{}); ADC.CS.write(.{ .EN = 1, .TS_EN = 0, @@ -117,8 +119,9 @@ pub fn init() void { .AINSEL = 0, .RROBIN = 0, }); - + std.log.info("init.c", .{}); while (ADC.CS.read().READY == 0) {} + std.log.info("init.d", .{}); } /// Enable/disable ADC interrupt diff --git a/src/hal/pwm.zig b/src/hal/pwm.zig index 45cf90b37..8d2857300 100644 --- a/src/hal/pwm.zig +++ b/src/hal/pwm.zig @@ -8,7 +8,8 @@ pub const Config = struct {}; fn getRegs(comptime slice: u32) *volatile Regs { @import("std").debug.assert(slice < 8); - return @intToPtr(*volatile Regs, regs.PWM.base_address); // + (slice * 0x14)); + const reg_diff = comptime (@ptrToInt(regs.PWM.CH1_CSR) - @ptrToInt(regs.PWM.CH0_CSR)); + return @intToPtr(*volatile Regs, regs.PWM.base_address + reg_diff * slice); } pub fn PWM(comptime slice_num: u32, comptime chan: Channel) type { @@ -72,7 +73,7 @@ const Regs = extern struct { pub inline fn setSlicePhaseCorrect(comptime slice: u32, phase_correct: bool) void { log.debug("PWM{} set phase correct: {}", .{ slice, phase_correct }); getRegs(slice).csr.modify(.{ - .PH_CORRECT = if (phase_correct) 1 else 0, + .PH_CORRECT = @boolToInt(phase_correct), }); } @@ -98,10 +99,10 @@ pub inline fn setChannelInversion( ) void { switch (channel) { .a => getRegs(slice).csr.modify(.{ - .A_INV = if (invert) 1 else 0, + .A_INV = @boolToInt(invert), }), .b => getRegs(slice).csr.modifi(.{ - .B_INV = if (invert) 1 else 0, + .B_INV = @boolToInt(invert), }), } } diff --git a/src/hal/resets.zig b/src/hal/resets.zig index 5dbd81e1e..a4aae840f 100644 --- a/src/hal/resets.zig +++ b/src/hal/resets.zig @@ -40,8 +40,32 @@ pub inline fn reset(comptime modules: []const Module) void { @field(mask, @tagName(module)) = 1; const raw_mask = @bitCast(u32, mask); + + // std.log.info("resets done before: {X:0>8} ", .{regs.RESETS.RESET_DONE.raw}); + + // std.log.info("reset on", .{}); regs.RESETS.RESET.raw = raw_mask; + // std.log.info("=> {X:0>8}\n", .{regs.RESETS.RESET.raw}); + // std.log.info("reset off", .{}); + asm volatile ("nop" ::: "memory"); // delay at least a bit regs.RESETS.RESET.raw = 0; + // std.log.info("=> {X:0>8}\n", .{regs.RESETS.RESET.raw}); + + // std.log.info("reset wait", .{}); + + var last: u32 = 0; + while (true) { + const raw = regs.RESETS.RESET_DONE.raw; + if (last != raw) { + // std.log.info("raw: {X:0>8} {X:0>8}", .{ raw, raw & raw_mask }); + last = raw; + } + if ((raw & raw_mask) == raw_mask) + break; + asm volatile ("" ::: "memory"); + } + + // std.log.info("resets done after: {X:0>8}", .{regs.RESETS.RESET_DONE.raw}); - while (regs.RESETS.RESET_DONE.raw & raw_mask != raw_mask) {} + // std.log.info("reset done", .{}); } From c899778c875d103ab243046c6aa64bbddd839e5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Sun, 2 Oct 2022 00:10:13 +0200 Subject: [PATCH 022/286] Clock setup fixes. --- src/hal/clocks.zig | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/hal/clocks.zig b/src/hal/clocks.zig index 3553572cf..eae16a804 100644 --- a/src/hal/clocks.zig +++ b/src/hal/clocks.zig @@ -56,8 +56,8 @@ fn uppercase(bytes: []const u8) std.fmt.Formatter(formatUppercase) { return .{ .data = bytes }; } -pub const Generator = enum { - gpout0, +pub const Generator = enum(u32) { + gpout0 = 0, gpout1, gpout2, gpout3, @@ -70,7 +70,7 @@ pub const Generator = enum { // in some cases we can pretend the Generators are a homogenous array of // register clusters for the sake of smaller codegen - const GeneratorRegs = packed struct { + const GeneratorRegs = extern struct { ctrl: u32, div: u32, selected: u32, @@ -82,7 +82,7 @@ pub const Generator = enum { } const generators = @intToPtr( - *volatile [9]GeneratorRegs, + *volatile [10]GeneratorRegs, regs.CLOCKS.base_address, ); @@ -154,6 +154,7 @@ pub const Generator = enum { } pub fn setSource(generator: Generator, src: u32) void { + std.debug.assert(generator.hasGlitchlessMux()); const gen_regs = generator.getRegs(); const mask = ~@as(u32, 0x3); const ctrl_value = gen_regs.ctrl; @@ -314,9 +315,12 @@ pub const GlobalConfiguration = struct { .clk_sys => if (config.sys) |sys_config| sys_config.output_freq else null, .clk_usb => if (config.usb) |usb_config| usb_config.output_freq else null, .clk_ref => if (config.ref) |ref_config| ref_config.output_freq else null, + .clk_adc => if (config.adc) |adc_config| adc_config.output_freq else null, + .clk_rtc => if (config.rtc) |rtc_config| rtc_config.output_freq else null, .pll_sys => if (config.pll_sys) |pll_sys_config| pll_sys_config.frequency() else null, .pll_usb => if (config.pll_usb) |pll_usb_config| pll_usb_config.frequency() else null, - else => null, + + .src_gpin0, .src_gpin1 => null, }; } @@ -462,7 +466,7 @@ pub const GlobalConfiguration = struct { } break :adc_config .{ - .generator = .usb, + .generator = .adc, .input = .{ .source = .pll_usb, .freq = 48_000_000, @@ -493,7 +497,7 @@ pub const GlobalConfiguration = struct { } break :rtc_config .{ - .generator = .usb, + .generator = .rtc, .input = .{ .source = .pll_usb, .freq = 48_000_000, From 5c07800cdbf9b4369f6442482729e766a180a97b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Sun, 2 Oct 2022 00:14:52 +0200 Subject: [PATCH 023/286] Removes debug code. --- src/hal/adc.zig | 4 ---- src/hal/resets.zig | 25 +------------------------ 2 files changed, 1 insertion(+), 28 deletions(-) diff --git a/src/hal/adc.zig b/src/hal/adc.zig index 92869fcf9..3cf29fab0 100644 --- a/src/hal/adc.zig +++ b/src/hal/adc.zig @@ -105,9 +105,7 @@ pub const InputMask = InputMask: { /// Initialize ADC hardware pub fn init() void { - std.log.info("init.a", .{}); resets.reset(&.{.adc}); - std.log.info("init.b", .{}); ADC.CS.write(.{ .EN = 1, .TS_EN = 0, @@ -119,9 +117,7 @@ pub fn init() void { .AINSEL = 0, .RROBIN = 0, }); - std.log.info("init.c", .{}); while (ADC.CS.read().READY == 0) {} - std.log.info("init.d", .{}); } /// Enable/disable ADC interrupt diff --git a/src/hal/resets.zig b/src/hal/resets.zig index a4aae840f..45b22305a 100644 --- a/src/hal/resets.zig +++ b/src/hal/resets.zig @@ -41,31 +41,8 @@ pub inline fn reset(comptime modules: []const Module) void { const raw_mask = @bitCast(u32, mask); - // std.log.info("resets done before: {X:0>8} ", .{regs.RESETS.RESET_DONE.raw}); - - // std.log.info("reset on", .{}); regs.RESETS.RESET.raw = raw_mask; - // std.log.info("=> {X:0>8}\n", .{regs.RESETS.RESET.raw}); - // std.log.info("reset off", .{}); - asm volatile ("nop" ::: "memory"); // delay at least a bit regs.RESETS.RESET.raw = 0; - // std.log.info("=> {X:0>8}\n", .{regs.RESETS.RESET.raw}); - - // std.log.info("reset wait", .{}); - - var last: u32 = 0; - while (true) { - const raw = regs.RESETS.RESET_DONE.raw; - if (last != raw) { - // std.log.info("raw: {X:0>8} {X:0>8}", .{ raw, raw & raw_mask }); - last = raw; - } - if ((raw & raw_mask) == raw_mask) - break; - asm volatile ("" ::: "memory"); - } - - // std.log.info("resets done after: {X:0>8}", .{regs.RESETS.RESET_DONE.raw}); - // std.log.info("reset done", .{}); + while ((regs.RESETS.RESET_DONE.raw & raw_mask) != raw_mask) {} } From 86d383e67366dd691974f3688cb40759169f41c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Sun, 2 Oct 2022 16:57:26 +0200 Subject: [PATCH 024/286] Implements ADC and PWM support in pin config, simplifies Pins() type. --- src/hal/gpio.zig | 2 +- src/hal/pins.zig | 180 +++++++++++++++++++++++++++++++++-------------- src/hal/uart.zig | 8 +-- 3 files changed, 134 insertions(+), 56 deletions(-) diff --git a/src/hal/gpio.zig b/src/hal/gpio.zig index 90e214177..eebb0933b 100644 --- a/src/hal/gpio.zig +++ b/src/hal/gpio.zig @@ -7,7 +7,7 @@ const assert = std.debug.assert; const log = std.log.scoped(.gpio); pub const Function = enum(u5) { - xip, + xip = 0, spi, uart, i2c, diff --git a/src/hal/pins.zig b/src/hal/pins.zig index 6980bfc2b..9194a016a 100644 --- a/src/hal/pins.zig +++ b/src/hal/pins.zig @@ -1,6 +1,8 @@ const std = @import("std"); const gpio = @import("gpio.zig"); const pwm = @import("pwm.zig"); +const adc = @import("adc.zig"); +const resets = @import("resets.zig"); const regs = @import("microzig").chip.registers; const assert = std.debug.assert; @@ -59,6 +61,8 @@ pub const Pin = enum { .out else if (comptime config.function.isUartRx()) .in + else if (comptime config.function.isAdc()) + .in else @panic("TODO"); } @@ -193,6 +197,17 @@ pub const Function = enum { }; } + pub fn isAdc(function: Function) bool { + return switch (function) { + .ADC0, + .ADC1, + .ADC2, + .ADC3, + => true, + else => false, + }; + } + pub fn pwmChannel(comptime function: Function) pwm.Channel { return switch (function) { .PWM0_A, @@ -322,53 +337,66 @@ pub fn GPIO(comptime num: u5, comptime direction: gpio.Direction) type { } pub fn Pins(comptime config: GlobalConfiguration) type { - const count = count: { - var ret: usize = 0; - inline for (@typeInfo(GlobalConfiguration).Struct.fields) |field| { - if (@field(config, field.name)) |pin_config| - if (pin_config.function == .SIO or pin_config.function.isPwm()) { - ret += 1; - }; - } - - break :count ret; - }; - - var i: usize = 0; - var fields: [count]StructField = undefined; - inline for (@typeInfo(GlobalConfiguration).Struct.fields) |field| { - if (@field(config, field.name)) |pin_config| - if (pin_config.function == .SIO) { - fields[i] = StructField{ - .name = pin_config.name orelse field.name, - .field_type = GPIO(@enumToInt(@field(Pin, field.name)), pin_config.direction orelse .in), + comptime { + var fields: []const StructField = &.{}; + for (@typeInfo(GlobalConfiguration).Struct.fields) |field| { + if (@field(config, field.name)) |pin_config| { + var pin_field = StructField{ .is_comptime = false, .default_value = null, - .alignment = 1, - }; - i += 1; - } else if (pin_config.function.isPwm()) { - fields[i] = StructField{ - .name = pin_config.name orelse @tagName(pin_config.function), - .field_type = pwm.PWM(pin_config.function.pwmSlice(), pin_config.function.pwmChannel()), - .is_comptime = false, - .default_value = null, - .alignment = 1, + // initialized below: + .name = undefined, + .field_type = undefined, + .alignment = undefined, }; - i += 1; - }; - } + if (pin_config.function == .SIO) { + pin_field.name = pin_config.name orelse field.name; + pin_field.field_type = GPIO(@enumToInt(@field(Pin, field.name)), pin_config.direction orelse .in); + } else if (pin_config.function.isPwm()) { + pin_field.name = pin_config.name orelse @tagName(pin_config.function); + pin_field.field_type = pwm.PWM(pin_config.function.pwmSlice(), pin_config.function.pwmChannel()); + } else if (pin_config.function.isAdc()) { + pin_field.name = pin_config.name orelse @tagName(pin_config.function); + pin_field.field_type = adc.Input; + pin_field.default_value = @ptrCast(?*const anyopaque, switch (pin_config.function) { + .ADC0 => &adc.Input.ain0, + .ADC1 => &adc.Input.ain1, + .ADC2 => &adc.Input.ain2, + .ADC3 => &adc.Input.ain3, + else => unreachable, + }); + } else { + continue; + } + + // if (pin_field.default_value == null) { + // if (@sizeOf(pin_field.field_type) > 0) { + // pin_field.default_value = @ptrCast(?*const anyopaque, &pin_field.field_type{}); + // } else { + // const Struct = struct { + // magic_field: pin_field.field_type = .{}, + // }; + // pin_field.default_value = @typeInfo(Struct).Struct.fields[0].default_value; + // } + // } + + pin_field.alignment = @alignOf(field.field_type); + + fields = fields ++ &[_]StructField{pin_field}; + } + } - return @Type(.{ - .Struct = .{ - .layout = .Auto, - .is_tuple = false, - .fields = &fields, - .decls = &.{}, - }, - }); + return @Type(.{ + .Struct = .{ + .layout = .Auto, + .is_tuple = false, + .fields = fields, + .decls = &.{}, + }, + }); + } } pub const GlobalConfiguration = struct { @@ -413,6 +441,8 @@ pub const GlobalConfiguration = struct { pub fn apply(comptime config: GlobalConfiguration) Pins(config) { comptime var input_gpios: u32 = 0; comptime var output_gpios: u32 = 0; + comptime var has_adc = false; + comptime var has_pwm = false; // validate selected function comptime { @@ -422,12 +452,22 @@ pub const GlobalConfiguration = struct { if (0 == function_table[@enumToInt(pin_config.function)][gpio_num]) @compileError(comptimePrint("{s} cannot be configured for {}", .{ field.name, pin_config.function })); - switch (pin_config.getDirection()) { - .in => input_gpios |= 1 << gpio_num, - .out => output_gpios |= 1 << gpio_num, + if (pin_config.function == .SIO) { + switch (pin_config.getDirection()) { + .in => input_gpios |= 1 << gpio_num, + .out => output_gpios |= 1 << gpio_num, + } + } + + if (pin_config.function.isAdc()) { + has_adc = true; + } + if (pin_config.function.isPwm()) { + has_pwm = true; } }; } + // TODO: ensure only one instance of an input function exists const used_gpios = comptime input_gpios | output_gpios; @@ -436,11 +476,38 @@ pub const GlobalConfiguration = struct { if (used_gpios != 0) { regs.SIO.GPIO_OE_CLR.raw = used_gpios; regs.SIO.GPIO_OUT_CLR.raw = used_gpios; + } - comptime var i: u32 = 0; - inline while (i < 32) : (i += 1) - if (0 != used_gpios & 1 << i) - gpio.setFunction(i, .sio); + inline for (@typeInfo(GlobalConfiguration).Struct.fields) |field| { + if (@field(config, field.name)) |pin_config| { + const gpio_num = @enumToInt(@field(Pin, field.name)); + const func = pin_config.function; + + // xip = 0, + // spi, + // uart, + // i2c, + // pio0, + // pio1, + // gpck, + // usb, + // @"null" = 0x1f, + + if (func == .SIO) { + gpio.setFunction(gpio_num, .sio); + } else if (comptime func.isPwm()) { + gpio.setFunction(gpio_num, .pwm); + } else if (comptime func.isAdc()) { + gpio.setFunction(gpio_num, .@"null"); + } else if (comptime func.isUartTx() or func.isUartRx()) { + gpio.setFunction(gpio_num, .uart); + } else { + @compileError(comptime std.fmt.comptimePrint("Unimplemented pin function. Please implement setting pin function {s} for GPIO {}", .{ + @tagName(func), + gpio_num, + })); + } + } } if (output_gpios != 0) @@ -461,14 +528,25 @@ pub const GlobalConfiguration = struct { }; } - // TODO: pwm initialization + if (has_pwm) { + resets.reset(&.{.pwm}); + } + + if (has_adc) { + adc.init(); + } // fields in the Pins(config) type should be zero sized, so we just // default build them all (wasn't sure how to do that cleanly in // `Pins()` var ret: Pins(config) = undefined; - inline for (@typeInfo(Pins(config)).Struct.fields) |field| - @field(ret, field.name) = .{}; + inline for (@typeInfo(Pins(config)).Struct.fields) |field| { + if (field.default_value) |default_value| { + @field(ret, field.name) = @ptrCast(*const field.field_type, default_value).*; + } else { + @field(ret, field.name) = .{}; + } + } return ret; } diff --git a/src/hal/uart.zig b/src/hal/uart.zig index 5f3f8c61f..49de5fc28 100644 --- a/src/hal/uart.zig +++ b/src/hal/uart.zig @@ -28,8 +28,8 @@ pub const Parity = enum { pub const Config = struct { clock_config: clocks.GlobalConfiguration, - tx_pin: u32, - rx_pin: u32, + tx_pin: ?u32 = null, + rx_pin: ?u32 = null, baud_rate: u32, word_bits: WordBits = .eight, stop_bits: StopBits = .one, @@ -116,8 +116,8 @@ pub const UART = enum { }); // TODO comptime assertions - gpio.setFunction(config.tx_pin, .uart); - gpio.setFunction(config.rx_pin, .uart); + if (config.tx_pin) |tx_pin| gpio.setFunction(tx_pin, .uart); + if (config.rx_pin) |rx_pin| gpio.setFunction(rx_pin, .uart); return uart; } From 7b69211d4113cf2914a3e5c400357cea46b81ffa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Mon, 3 Oct 2022 18:14:37 +0200 Subject: [PATCH 025/286] Implements gpio.setPullUpDown --- src/hal/gpio.zig | 17 +++++++++++++++++ src/hal/pins.zig | 9 +++------ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/hal/gpio.zig b/src/hal/gpio.zig index eebb0933b..e725d79fa 100644 --- a/src/hal/gpio.zig +++ b/src/hal/gpio.zig @@ -75,6 +75,23 @@ pub inline fn deinit(comptime gpio: u32) void { setFunction(gpio, .@"null"); } +pub const PullUpDown = enum { + up, + down, +}; + +pub inline fn setPullUpDown(comptime gpio: u32, mode: ?PullUpDown) void { + const gpio_name = comptime std.fmt.comptimePrint("GPIO{d}", .{gpio}); + const gpio_regs = @field(regs.PADS_BANK0, gpio_name); + + if (mode == null) { + gpio_regs.modify(.{ .PUE = 0, .PDE = 0 }); + } else switch (mode.?) { + .up => gpio_regs.modify(.{ .PUE = 1, .PDE = 0 }), + .down => gpio_regs.modify(.{ .PUE = 0, .PDE = 1 }), + } +} + pub inline fn setDir(comptime gpio: u32, direction: Direction) void { const mask = 1 << gpio; switch (direction) { diff --git a/src/hal/pins.zig b/src/hal/pins.zig index 9194a016a..94f6caa5d 100644 --- a/src/hal/pins.zig +++ b/src/hal/pins.zig @@ -46,7 +46,7 @@ pub const Pin = enum { function: Function = .SIO, direction: ?gpio.Direction = null, drive_strength: ?gpio.DriveStrength = null, - pull: ?enum { up, down } = null, + pull: ?gpio.PullUpDown = null, slew_rate: ?gpio.SlewRate = null, // input/output enable // schmitt trigger @@ -516,15 +516,12 @@ pub const GlobalConfiguration = struct { if (input_gpios != 0) { inline for (@typeInfo(GlobalConfiguration).Struct.fields) |field| if (@field(config, field.name)) |pin_config| { + const gpio_num = @enumToInt(@field(Pin, field.name)); const pull = pin_config.pull orelse continue; if (comptime pin_config.getDirection() != .in) @compileError("Only input pins can have pull up/down enabled"); - const gpio_regs = @field(regs.PADS_BANK0, field.name); - gpio_regs.modify(comptime .{ - .PUE = @boolToInt(pull == .up), - .PDE = @boolToInt(pull == .down), - }); + gpio.setPullUpDown(gpio_num, pull); }; } From b0b90a7cf07704dfef94b17b8be2393479c68192 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Mon, 3 Oct 2022 19:11:42 +0200 Subject: [PATCH 026/286] Implements UART.reader() --- deps/microzig | 2 +- src/hal/uart.zig | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/deps/microzig b/deps/microzig index 681b3b0d7..15bc1fc06 160000 --- a/deps/microzig +++ b/deps/microzig @@ -1 +1 @@ -Subproject commit 681b3b0d7a6b2fc5d0f8918c583c790c646a31f1 +Subproject commit 15bc1fc06da3b6c622a21fa438e40be247d9dee1 diff --git a/src/hal/uart.zig b/src/hal/uart.zig index 49de5fc28..328524987 100644 --- a/src/hal/uart.zig +++ b/src/hal/uart.zig @@ -75,12 +75,18 @@ pub const UART = enum { uart1, const WriteError = error{}; + const ReadError = error{}; pub const Writer = std.io.Writer(UART, WriteError, write); + pub const Reader = std.io.Reader(UART, ReadError, read); pub fn writer(uart: UART) Writer { return .{ .context = uart }; } + pub fn reader(uart: UART) Reader { + return .{ .context = uart }; + } + fn getRegs(uart: UART) *volatile UartRegs { return &uarts[@enumToInt(uart)]; } @@ -142,6 +148,15 @@ pub const UART = enum { return payload.len; } + pub fn read(uart: UART, buffer: []u8) ReadError!usize { + const uart_regs = uart.getRegs(); + for (buffer) |*byte| { + while (!uart.isReadable()) {} + byte.* = @truncate(u8, uart_regs.dr); + } + return buffer.len; + } + pub fn readWord(uart: UART) u8 { const uart_regs = uart.getRegs(); while (!uart.isReadable()) {} From e9af302b69a58a50b25cda9c75580702df859b5d Mon Sep 17 00:00:00 2001 From: Matt Knight Date: Wed, 5 Oct 2022 10:58:03 +0200 Subject: [PATCH 027/286] uart improvements and improved definition of how many clock units there are (#16) --- src/hal/clocks.zig | 2 +- src/hal/uart.zig | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/hal/clocks.zig b/src/hal/clocks.zig index eae16a804..e703db46a 100644 --- a/src/hal/clocks.zig +++ b/src/hal/clocks.zig @@ -82,7 +82,7 @@ pub const Generator = enum(u32) { } const generators = @intToPtr( - *volatile [10]GeneratorRegs, + *volatile [@typeInfo(Generator).Enum.fields.len]GeneratorRegs, regs.CLOCKS.base_address, ); diff --git a/src/hal/uart.zig b/src/hal/uart.zig index 328524987..6616452cd 100644 --- a/src/hal/uart.zig +++ b/src/hal/uart.zig @@ -226,6 +226,7 @@ var uart_logger: ?UART.Writer = null; pub fn initLogger(uart: UART) void { uart_logger = uart.writer(); + uart_logger.?.writeAll("\r\n================ STARTING NEW LOGGER ================\r\n") catch {}; } pub fn log( @@ -248,3 +249,16 @@ pub fn log( uart.print(prefix ++ format ++ "\r\n", .{ seconds, microseconds } ++ args) catch {}; } } + +pub fn panic( + message: []const u8, + _: ?*std.builtin.StackTrace, + _: ?usize, +) noreturn { + if (uart_logger) |writer| { + writer.print("PANIC: {s}\r\n", .{message}) catch {}; + } + + @breakpoint(); + while (true) {} +} From 0f10a5d8f5be3a9dc23411fe9c05987f7f80384b Mon Sep 17 00:00:00 2001 From: Matt Knight Date: Sat, 8 Oct 2022 10:10:30 +0200 Subject: [PATCH 028/286] Initial commit --- LICENSE | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..4818f98dd --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Zig Embedded Group + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From 58cfb98e80f8826980338a7c557d6fde6f9801f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Sat, 8 Oct 2022 10:16:46 +0200 Subject: [PATCH 029/286] Initial vomit: not working at all, basic docs. --- .gitattributes | 1 + .github/FUNDING.yml | 1 + .gitignore | 2 ++ .gitmodules | 3 +++ README.md | 1 + build.zig | 34 ++++++++++++++++++++++++++++++++++ docs/esp32-c3-32s-pinout.png | Bin 0 -> 228243 bytes docs/esp32-c3-32s-pinout.xcf | Bin 0 -> 937723 bytes src/main.zig | 24 ++++++++++++++++++++++++ vendor/microzig | 1 + zpm.zig | 8 ++++++++ 11 files changed, 75 insertions(+) create mode 100644 .gitattributes create mode 100644 .github/FUNDING.yml create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 README.md create mode 100644 build.zig create mode 100644 docs/esp32-c3-32s-pinout.png create mode 100644 docs/esp32-c3-32s-pinout.xcf create mode 100644 src/main.zig create mode 160000 vendor/microzig create mode 100644 zpm.zig diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..0cb064aeb --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.zig text=auto eol=lf diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000..85b5393bb --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +github: MasterQ32 diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..e73c965f8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +zig-cache/ +zig-out/ diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..54620ef7a --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "vendor/microzig"] + path = vendor/microzig + url = https://github.com/ZigEmbeddedGroup/microzig diff --git a/README.md b/README.md new file mode 100644 index 000000000..2cd0dfa3e --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# esp32-c3-bringup diff --git a/build.zig b/build.zig new file mode 100644 index 000000000..035b12a74 --- /dev/null +++ b/build.zig @@ -0,0 +1,34 @@ +const std = @import("std"); + +pub fn build(b: *std.build.Builder) void { + // Standard target options allows the person running `zig build` to choose + // what target to build for. Here we do not override the defaults, which + // means any target is allowed, and the default is native. Other options + // for restricting supported target set are available. + const target = b.standardTargetOptions(.{}); + + // Standard release options allow the person running `zig build` to select + // between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall. + const mode = b.standardReleaseOptions(); + + const exe = b.addExecutable("esp32-c3-bringup", "src/main.zig"); + exe.setTarget(target); + exe.setBuildMode(mode); + exe.install(); + + const run_cmd = exe.run(); + run_cmd.step.dependOn(b.getInstallStep()); + if (b.args) |args| { + run_cmd.addArgs(args); + } + + const run_step = b.step("run", "Run the app"); + run_step.dependOn(&run_cmd.step); + + const exe_tests = b.addTest("src/main.zig"); + exe_tests.setTarget(target); + exe_tests.setBuildMode(mode); + + const test_step = b.step("test", "Run unit tests"); + test_step.dependOn(&exe_tests.step); +} diff --git a/docs/esp32-c3-32s-pinout.png b/docs/esp32-c3-32s-pinout.png new file mode 100644 index 0000000000000000000000000000000000000000..2221abbe0692de7bdf25fb0ced047254d7750d17 GIT binary patch literal 228243 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¨NzTk#E`Wqk$+C$u#>k_dDSY zDH-dJsNL*b2LZg#$^3&bvK!ZUVo&DQ^bvGr?swDxmAvz%g^Nq%tXU~Swejn(QW;zR zE>(LWh;cWmxqV{}6cnrEe-2tx;b9c+5-sr@9e_kzzbC8$&5E5m`kW=WPeJR6#353` z3-DWT*ykA~Ya6mGjcT}&abHSbFcpLMQ&wV|I{b!NS!RxogkO0#xXIr*8HQ(-OxQhg z_@o<`)!Czcyd<3M;K`uprcKn`%#n)Q;_J=(9W*~A1@y$THaWmj_ z(MvZ^XXq}u9K7yA-q;CIbZW?+3GqE!h$e4j6Lyv;$axaL`tRQ%G*XuJS(I97rc7jzP&_S6~QrvfonRry8KIS7j;cdhUehF9VL9qN2-c6WR~v zqI4*+QMY6-3nr=BXGhpS0;U0N{~F!ysWgIVa`k2Cu2VenbO@;%VxlyvHFq*0`!vSv|g-z*0?#m+h2s~r9&9oe24Za%K9TjPfAQTCx)QqmSwD4wr<(sG!^8#HGRj|R0i?BJlJ zfCd+=1NR!uEq$SEsWV-~@L1@XB+6}2BS-uHW<#Z@qc`&zZkW7@lJ9umaq?wQOZq~r z)R|bG)j9O<(p+&lCc9cea@(^rnv5CkQ2M^PxK$3d~mcdX`^2Lp|ty;i+|NI0&v^zQj+H|??FuV!>1@tif5d-7sR=muA+m-tAyy}CUXr|yy&R~T7C z*p3SnL=|7(sdB27O>{RIP4K$!D@?y1#s2Vy@UqtQ7)ntLrT(SX>GNxo;m3bx6=vPg zIoOHij|^ETtXX?MrbF(Jl6ubv3lZN2o`LZXHN(f(6Z=K=^;SndqH?h~TdT=%7Wv-0 z4}AUmk@BfHm7=dsRdphA7Ndh%=-Dw} z(#7#oI^>bcnneO9!C9tJ!*a>at%B_=^FVaK=*F3Wwc+@n5%mC*U3T@i-L0w0DF@q{ zg>M}ep5I3H19oP18~crHYCL0#J4`Yhjx);%bCTPv`&}b3?^O;G;@`a#yE4pj=9RyG zFXTMEPdS2tut-o1SJLVa1OUV!7tnv=d)wK~!8|`VoX2X6vJZ2=QIX&vGFLXznh}1r z?gy#`2z$c)I)1Sx)y==NJ?+27Rq(qMUp%ato;n=9x2u+J8u{Ui3CM*8CHK^%Xva^PL6{+ z9FB40z(1!nV8}PArU$C5Vf&jg`u#E|mpKRJCxouv^htsYB)I3w@;tM%v66SqJd
  • wg}#y(^===H8wxyDZ!V-yR?1FSzdRc@)8gKmKGW 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%0D)yAM|W0nH}KU@a+Yn%72#b$k~pb9Ps7s#TkM zUedvzL>zW?r4_Xu$}r%Dd*gq^4<@kk0B;YxKEUssRji!KWur-4;(#m5I-1Fy_<&!` z;5bbdg@dS3G~=(a82Z_O6y{-^J)p|L2PUM<=%ZIM8ef;tS)3^VYA*6%chz8Egc1CMgcC*hZ zq$$K%aju0X5MY`eW#u!ZmeCK|rI3}dgm0mYj@!iqXzGQ+YvP508#irA58oxPiJ^dk z;_kg*lM2D0UMLNQ2=a5^f=TALwvwz74$CN}yY5{wS)YrLS&<{n*7||hsk0*nRIK2H zz=I!#t9t`)wGXW+Lqzh}v`0$#)zj-T`wd-99z80H1w&!|ws*8YyZ|&z;3CQJ5)ovC<37$M$WK6E*8*}TBX}phaerm#5Y@xXKcK`5C^hUkGq3YjH>kI*h zS4|H1a`2p;z_a+U;9q+fyd}6bo220!Zi5m|z=X_`OcDxY9*WUFUAgTrdF0{YdS$WI zPgrslh|HjorW+u_CmQn}*?6rcq|+k>qt!pzkSY)|f0D+L4?zB?M3>C4vj_%ox{v#5 zKfMMiFR?Ld9=5fb?=tQ5T3xy41eqdJID8n2u}2%?d6>|i*{}4dC;oWf(LJLk)(;q( zkvo4~UES+k_jpvr9|>MDx#KF!;>ap=;oarZ;Wx>$V3?YuXBtOrp%nGiITSzuV$?Pz zT#pqxI?!Zaq$$`G#DZ6okSt+Au^0SH&&sA-Qr+65^sBI^QQDspt8<~WwWkjSUr4N8 z%ZyMlZery3rH4?W%G{ZmFn!V)M%hF`2w@>m>QkT}Hc8vU2YoT0=w|}xg z$)1*LgPH^~{J-0Oj|iR3I~+ZegG~;bdglWb)wPxvM4&l*->$0L*(F#*hC(?wUl}tL zM}g3MMW~=_(2Wx7aJ6^Bu`?#W8@}rMwSlV0o=lVd^4N@;Xoy4BSh_%r?|A>kK1m4@ zitohCU?gL)8Hho){9C)f-ROK2MtJlCuZpyfeIKr0`}5}eScQ)~M8%CTdQDc9>96%gD%X-4{X4AJ8=pZ|GpJd)*o4g>pT9P!q&e(R|XMa8l2=vuaAF!1sS>g zX#9Elmy@n1oF-D<_syExwX1J5ct)I~4;RG0El73(w8!I2AD(>`$o4BZrwAL5I}NT154KZefPCPNUK@y@jYsYO9190s-orUQy^_AH^F zz^G>i^o|0@9Wdx&V5H)fL?qLgD=LMTAyVw(g)pGd0U&GXyshv4Ox~ZLaemQYG*g&N z7j6d1dj@+es5U?f+NwW<7@T_&1BM|;q@e*enVxg3;FHh;&hzSOCA?{IpiL&5-sBJP z+{PTVB1(SRLCUD9Q-|R6<6aq1zOdGGav?!(Yjk1uSaTPi5V;}%u;r!t9TODE7LhJs zpxj�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 z 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/VP9Nn@0!`EJ2rhhTG?4=j*_oWwKG{2NV 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%0D6@ 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ൢscX39X}BCG#x*X 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

    AmvTp%bm< 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

    ;0eJ6u2Yo!h+$$ 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

    K0V|# zqwb2Fqm`S!-csX%O5o};7P}sjyb}f~$Y!xJ@rN+LImD#3Y7Lg!t}RjcYBuO0?LfGJt0?ITxGcsWWd3V&XS{aNZK{Phh31CwJZ3%J=rx%25JaHR zAV^5fgr*pc$(Ke@OW}rQxY`=_Pv40+gdstGjET0Z#hMT$=2$!08e$*p z_Cc-$2hBdj5p@oA&}=jZ%{jXiMm?pSR5II$}^ms4-CYP1c>*o2)M1>a2SPTf#=m z#~F7Fwude5H9bZQa)!VY-0%m&K!Dikc6$hZ92g3xt0%=)kgE_Uz%qGU;Gl8U6{EE| ze8l*MKYI}vd#b$6fp0bkv8ok8#G$Ua{lO5CNa!%)U9Pg;R^tl7mPfe;U9Ph1y{RiI z{9vw}t|GV$QN?HTyA&>U1gJapx^yuo{l#@}o%OgKPMf>erDi5gP`H06^}!qnqhA_j zkc>Z;bhF~^rK)UO8?ikxRoyi+iYNibzkk2OSZ{{lH_V*K#-o!zw7$coCs?#_ z{;WmvfCKhLx4nxq46~#YAYix;bW1o?Pk{XhdAxEKgPZZNChRcTY@V)8uifU>n;_}B zJqR~v?|P}ydmf)L@fCHw&EkZ;v)lQmY^O~XX_xnv0b{mM3FO8U`i6quen;7uX z=nde=TCP%E^}GN@WT11X+W!%=PdSN zM-#e&b|nR07~pZZ*|*#=bE!g+2%h7r@}6d7XEkB^=*kALXWre2i-&_=d;}f3gldRL zBcnb!Z2{7VsY0Pl0Lvaycy}QVUlJNhz!L3vQZ7ROAyV6fA9O*2k)+imT}_uJa)9&B zX0atXkNjapY)_D#)6-RSHBHr`!e(5@@tdu|x<;H3j~=nXR(BO$3$Vy9bwLE6Azs@Akd>C5KuvITc-s|!c{bvT#abkvrhio#XsauYLfxTy+fAy~P& zuT}&RJTHo1kkRM~t5ObwE@9T=okIu_Tth4n4gJB_*dZD@X;ac=fvZUnoCC*&@86Bc zldV!D@qt!a$5b{8Of2so1b`T7uI-vC~)snt7C%@qiG z&aY`epnt?0qDR`GqwyM~++Hur5YCN`6X1=F*W45lHoD^Z{XC9Tlsn^y6Q_KW+MpvC z-N23K+YtFdDtU0T0YQ;KieO3M)~dZkPUHEwqTGS+tK7iVX=(~0=wNH)INt)7^Ljo< zl$-b55etDaBamQilhXK3sYp8dOASGviIM{nQj{{o>NAjDlL!Hd^30S!jasJrP&KLm=0MMsvtL}!=@H8BF@e1?CzJH|3 zSch7#r4sOcyuABX>{3}hk)~F&g?#a_+20(vsMNNaEfVsw2R!)d$D96aHJig0;PCn_ zcRv2ywb^`r81OKFW*3E|1-)C#_agKPPW}ToQ6i=C{qZT1&EsHL(0K&zI*IS)u^CJr zS@Oi$EvoVSmCZ#^fJ;=sq^IJp@ae*q-E|dJ6Nyn5L7*Huzg4Ov_(an9H{tAh>UHqc zZwQe6pK;y)Ex7ph!qP{6{XLW%Mo0in(0)e1&k_shT;R3x1-XMq+&y}H(#Ytj#L+=S zwj)3E(X>&~k%^<4#*R_CI?gViAr`2m*k{VRN&yf%cq&14YR~>|#JuLmZ-1 zW4*TVa2^890eKj1+6Wvc7V5w{Cz--Ek)s8Y4uHQUyIOo()Kgg@DhvB|i~SG|d#2{= zM*}V0^;scqu9x_biNKYW7 zrC{H)^29v8RLpDM_q--Z773;Xqakv*mxM1$!=`7scGI)M7DCC2!OL`MBI`Aqp3-#{ z8SgTbar2gU2Exe|b#a@)k(>9s<5ySJrPa;uqEB~aWrXbNoz8WJP*L(zy!pw(ES#is zFr_(jHHh4RMV9QbXMK8{n+ZV7x=fZXNDyL$1^jXUuN;7tp<#z{o%O*sNJ)BE(IL2= zaP+nS3GvnjT^hyXBw)0JIAY0Tr-La?v}kJ;5<+Yp!Uncj^1Ko_iAik|(kXt6CJ1r_ z*)Lc5BOThPFhoW;-y_v+a5T=7=?l#}N&C<1bmQy^h}6cp_1K(S~H6 zo-Y~k#?A}nRW673nx-ZrE`Wg}9ldzd@e;XK*GfL0Z{+a$Py6tfy@yV>l8xd5E|c5y zuBVr-+0c4ELe7EJ&$)H{qpjvQ3HWp_jbTU3s8;i7A{xiS!@k8}U6J2Yj37_g{F3B_@FLt%9c;z_-M~)2{=?PC(reeg%i{ z1pff)-iVXuf;Pe7>&USWL>a_PZyROai|CM83kb?Q8r~XMJp$(;&>RI;-zMUH{bj^^ zy1glOTqZcP*I5?m;Tua`(1xp{^Vnz@zP*>EoPE8sj0h*~;a^FUCy%)jJ z8Y341P((ucb#=`>gjEoEC5#;LfVDM%&;>^3xQN++AUG9(&=@1cU6ZjrP_+{rv=E(f89W*uu=#B0R zusfpNP$XT^fub$~K)i#aLcm91j)>oPmDYpkOi5uBfJ>Ou4HNd&1zcd}piF=fFgsg# z$2x=wqel|2SHKxBAj}qJ3m*JS4;bj=NSin4EN}`DrWL5eSe^>0Gavk}57i~Z<6nIn8%dI!3f)DL=L27AJm^VU#Pa@2Ko zH(egZoqPBFy+1>iD*jMQe_z}ep zyLlToyQ&-y@kldy&uqJ3bbApt_ml%x+x;lUDt4q*Mzq*0!1`OoMKq z5)*;ku6uIE=;hyT{Of{T-zGhWuVyZI@ zuoJ>l-g4*oiEWZ`$@b4-bxTg}$d_D?N-Pm_8C^T3q;$Lv6)oF@1C@vo%Mn~f1Bz>LLzY|gQYN&d5K_d(w3BmdkNSH6rnIq7{s9!tSE?Zd&Ts-mXIbilb&WWGJCXD zV-laqYd|nt76RdQUz$jQxI(Ey@X`ALF1-bM`Zc)f*8;D%fzaM2qWg7F;IE4we_h=9 z>jBoc4Ri0Hkd&Vs(MKf8D=a9QuLofJ-P_N z$vuW6?~cjO?v;J>gzu`bX)Z_X7}uM^E2D^2ntD5TgXDJ&0qs! zuJ4|i-&dMHaPAo=QIJs?kuc(!H`$L)x|N?V9sa%A8_S?KAkzkgA<#9Y zV>ap#wlj7a$Pd14{SXGZ-%@2`0WNlkdV*&k$mWWAKYxm7mdOJVfN^(I#0Z>jao)tg zya=FA9)?2UK%h={Q^@&F4ktT%Y>3RBE4|}e#6oQnqdG)HMJ#ZV z=L_rJFOcTu-nPaLNhTZjMtIW32E+-cBerT|#XA6q$s72I9V_Lf%z7-FB(uKsm3*l% zzyB%%86M9J2dF^4b&c)=Q*v`9c>_MO1#>P{is%mjB=H-+9zkpf%~^JUBVi$qMqDK? z^v)4V#QiUqLP&K)1dm31hTrd$7I1~4mRVsE0k__8WN~43K8M>ftBLR$0o}=!cjxC} zk_wtjk?6>E_L`$VJS6Cq&j5N#zYlG}o>4~_KF8-*Pb$ih0MVW!?DwIS8WTdiVJiVL zGOPD~@K6!(D!@S^`vYr`jx1r62Jdqm^SE%}n>i!<1-`;~r zm=d870OEig0iIE!AS`aq^${#*93v;Ov3Z%f+i*0qIpem#`* z>w&A|MB?>u*<*`X+qmx62Zg^5nmhn4u&lL>MK8r{Y7@#nhZ?TFzh(%tv)K7F4(r|E ziz8sVo0{?vZn`n*IPyS2I)^!EZK){$K!iptR%AWIG7<5tzq1F#`RO}#z}}_DGcb?B z5$EEb90|Yw$0{!YE~X)XnT6C@@5LH-WHR)g*-!2Agn1GP7o}-ktW}t10^ES&GXLt5QP{GAUI5(riQZcPan#j^i zA{e6|8Uqz?XG1N2>xX(kNF-2MiRd+NFd%ya<~(8Vcl9K|Z@diZYitU-PCqXeutmLA zpgz)NB5E;q01B%yVBGnjP{5#Y5%ba>FKJN8r_ zgsv+y%@it1W24ug_yYw6+&@;@^~?*iXHFZ}Kc6t?SqLBx{Y-=4ayCsG&dtjaB8pKW zLLOa_$Xs@+d|2{F0}SP z;d1{Yu=n+G!LJJ`Zfz5YyiMqGjJQ_8&VjzsCPI3fu$=$i;BSQcCiih-q#poyTAZGP9SKS?a)( zNiN5ucLLbKS$pE;OeT*ZoL^=^Y_4o7GYqEyCvYB(ReNVx$#T`+JluB)d%aa zw){RJJu8dJda)E0qbO-Dv^b8iAFvXq)(q;(gnT=v)a-A-bi-N<6g+zvxR1JXf4?F@ zG;k*8QYM9DXA1%EO0PJwZg|)3tZXLtQYL^Z5WybDCoJj{e=cDrv6$K1%bD06ft^r? zQwtY&t{Rh&#OAMPTgZtQMYaoOfk5Tnb>FZ5^znjDoinmvy}i_6Nz`@d*xAza+dli?ow@hrbWF>H zSSe~?#GgkJr6XL(qD6~eo_tGY$1a&D31qV7!um(1PPu>7*s+5Jos!d7Pyit8csBd; zt!eq*Trr1{k(SyiJ&TDD=JdS!oaSsjh0&3kn%14c7D%MIdAYec(&lWM*e}h?gAsx# zn)2v5b%1AS(QtikejzX@Vc{gGgM?uOi<(KjrC>x7jj(~?f>oE8oJhRvIwHwtuwE!L z*OBaCMtXX;bOtw(N8{2sb!;XxE1h{cGre24uHCXY3EU{~&}ggxlaYS8HJIl zEdJeV%5d0W`LG@YSf~4=dwv+fWeaBPQ7U&l6DwRG&gnhmo(bc}3@Z|GxGB7o9PV8Q zJ~PaEA=h@z)r zMfne$4gEd5ca}sGEV)C{>-q9v`0y~M=v43*aqe=W2tt#4^&B>N?nmo3e7$1Eh@1|W zO7cE(RSXvZ=yez{=(<0kk{>Ycxm$R%B{+vCxhK{$i+bIB&+JdPoj!l?hb0ddcDU5s zA-f}+hIH=E6=v=W{*^sx*E5R^hllg~)HaRdvHMbRna+hp112v0`JBtE-L>k8zEG3K zn>*%M;KRNWjgLNg zz5i6x0#OeR1kNv-E)IZq%>w=5Vqw-AzjE?ZD#A~oWYI16&Hv%J&92z`?jt>^?&aTg zz_aYmU7_{8h(%EHXYlVVo{;^rao_D+!Og$xtXdgyFl%%yD$Kuq#s{1J{`-$FUmlr5 zin4@v@AtgP`OtH5G$V(>8fEr;DG)Mo*8_L)Ib&vg^7j0fyrigmah|x(xLI#~{>6uL z@9PU}Hr@$t7W=M)-nTf9o%L>*D&XD!XJgru0QO|PVmv&Y!8ls?N$>nOfm%ymO)gh_ z%ZN$O&YU*7H=hGMF&g(YpF3i|=M8r5+%n_21&hxI&c7hSMBvXe?j6S9Ew$CGTBAQh z-FQhpoEq}_4j9-kpU+7lw-s`Se0yfDkXbO}>$3B*vd<@@!2%|C=FxA5^4PiWpDB~? zd72b;EiQok1LzbCaa5g*+n(exvhR6pFdO&k{m^rdKPl)T5U>P1_JGIl7V%KYV~@@l z!-$uKT?_^eBD2BLp3FNhw7ln~dPb zTt4Pa1T!s(cNTRpg^;vh`5masH^41~&1E^5m5G2|y$DklnV`4< zWqD$9Sqvd;Tqp;iI%Ke6y5Y8X))ZbAHHT;#?B(clFbKD5Qk08BR8h6pzzjV zci&ZfOD>88>kwI}q!)3UR=^F|)^F6;SAaDN|84^cL= z-2V%6%JFyJs@ZibpZ!Isd`RzYvF&eue!q!}f4blg)&BX>^xkN(kii*o!1w0pBat7Bc3-O zJ{5iquaUtKuMJ)3&E)iW#d2gAhq27vwEaL0#V5EH)`>u%1V#GpM})bO>Bc zCL6~VIH%cJJbv*J&oWNoHx9?4;YB;^ZEJa1@J*Yo-#d)c?+{7*z9DE2Jnr2pLz2>Hk&UTxb*FJR{&&Fn8nD<8oO+IK4yh*!J8{z<}{;w(s*{@ ze-h6x*kp;<54IApZ3+A+7Css$dIg?okOwG7@B#_KMshzon+6YOK2a_b?hiX{OQ_T^ ze6D%$-)-U(n=i$V(uD|%&c!5WUP0N!6Lf@QSr}FGp$Tmuc3u`EM&pSD9Sd^!d~x0_ zgZlL;5O*YuRPn}=xgsY2uFp%<hMwquyE>|S&J#_3fEF&w%GVX4jWsDWg%jq+G z@(b-`8Dm8Y3U8bI%BuFUjHIM(UP0e6vsbs1Wh5o7uNC&6uyo`3cCw7rP3QOQKk=#!436JZ}EF6YXRfNm0wZyu9KWA8u|Z%Seja=SzjX$34HIy(}Xs>sXM@5#4gv zRSK3~G(32BZ~=lV~H>UCj*jr zQSh2AU|R+7>jP5?Sa>j)P#Q{!Lk(0839Jb899g{j%QeykHQ@JRI!o};=oge@F;IUd zj4ZI;2(Cbn74Vt34ud>cRzimxz}v5TMh~#pqU_upVGo{})LlDU0MBs(HCqJZKdkJi zna(}|S#Zd@GcSMzy?bqWrMh*UW4t_k!iJ5T7}q(%;LU}s*sOM}YD?`HD=ifD96n{v z;`XT>V@1U|gC@WB$@+Gw9ZAXR=Osk!+Hs~`YDZF1J1e{I_@$dKdfKOUq;C3xwD0}P zev?JorFM*!%W#k|8rz{ko@pYDZGE<^?{daNO*7zG$b~k(8~S z&CBB5I&#X)_NpDJ8_(uvF(rk!4s4&=krb_dLC9kB`S9jwpV~2Amd(KtB_h0GV%@OX zG2Ub#p97@2ojhc$tN>+6n+Xqj{)TwSSbH&VAqrwiAzY;Izu_9;AFsaef9ExCybl;m zoO31u^(CF8`*H?YePVaHq?Bx52H_=JEpeR;!b`SM<{z@Cp4C3jXTnVgu^=uhC;z8i zcTt@?Tad*NX6NO%lj|g9YcS#2|A)Bu0FR<FDvF3=Lo8TO zItbD`h#)N}s0fOR6hV6Ly|>UIA#HmvGrQAgwx>hBGeNBQivRU}*MF@h%Vh4Er`}IF z=ebYYCwsp7UpFdcW5@W6)Rxcn9X|d)ZdBGJdVFS+F7HfS^uvGMsH{o#gsfK2k6N9{5x-^t#mt@w`{m9i}{HnYRqb9Wb){9O-2>; z-AgWZX`G4aZVJ%&hkR`XUJEsaC}W9k5N6==@caM4mYgn6$Pq~4p>3<^pv#B-rx#K9Y zzfE!`!Wkgl4`Hs;>&$A$rQz?-o<4K#^bcO$L-tQf&%_D{Mg1`5#YU^fb$RNf?^dpv z^`t8CkeHg<1l=D;Zy&}SYBFY{z4&wyQj0Bhvu_ z|FaF-Y*!17X{z*xd84e=VsYp! zuwr?K)oijooS~%C*osUxjh(dQ>^+ssnAO_ow1;@1WGRHYQL&vlI1b_Ga2b~Z@qKKYIR;8(_%08u$Fq0#$qN9Pd>=89xhNka;52^EF+9wgT`WU z9-4Q-W3y>U)1qG-4`rw{N@zR?>Uw$6>SC+aW!yUK0Q*puc%>Gtoiwfa?1IZ;-O=N@ zbDoDX#4C|jgVssh*nQDvE!;5X(|qT{SlX0E(NJtQs7*Gz(_*wj@JX#V0fwxpl*qKw z6!i5UtcV^bhhcUg`kT>OI4pXY(WZrZAo?{#jEr_WLg6)c~zcV>1})>lE7R2j49Ie)AwbVYH|X2E@&))?=*D!{mO#9{Bu$kps1a z!KB521OY}PEXoj37otSQ|7}<}q~1pwMyEa?KY?G9SomS|NHgb( zv`1L0ZP9jx?SXgS&wb&LxKUajQYkf3gDP6-dEo8R{f7^ad2HmcfrCd38x}buT$9YZ^SoZ$NtSWpp(=Lw-nL{8(`3Js1 z;uEtD*y5dt&)6pxXa18?lCbGJb=S7-J9a2{Dt5THY}<4|eQ)ko6Z%>Hfj)&FdO3dg zCICSxWvPj&i3u&+w^g=Nv=6sy-=@{0ZH8U8n-Ox-he+CT67d!}u%Hp)(yMpJrk2Ss z%1X;>poHF;Eh17;tCphYc^jT7m%XfUhoUeWbogqNFYc(HT879n$&C}Unnr@RZhx$P zErsfpOHc$eTdfwnLjEnk$ASuhsHvrI{nXNw_>APt^r0(%QLb0~qFcB6wb)t_y|26M zkS>Afg$Ip8TYGUL$F}W z)Zx2|bZVW0v5%^!to_cdQ_saux}^O%Bh?~&pIWQsHg?Id^X>%=qgP+m4g;?P{G-OI zl$(eMkpO~H{L9Nv-@17%_u81G$U1%Yk5s*Mi59G%zInZH>#G^67Y}Y*p2w|BZn{T2 z)v+-uJ2^>}T#=d)45s=*F^D%gYxjZ-slDh!+F$yr%RGGVYe*oV!UCCd|0?CQ(p z-$$DK-p}~WAOAh~F&>Dk z{kpz-2!r}m>HQ^DM&z%@SSo%mT*Ds=7n(;bqMp-k2e?cKGbB1~?EMv0Y9uCezv@f> zRyBXICcRGDBbaty&=(hJESe)Z{`(86l!vfJ_;c1FVekA zKc}368k|$SJ^Pat>ozWUzCn}omG_rZQU9KBL?pyC(sD`1c`lAlY0$SIbbm30S*(k@;I~IsTk%MwYDdT9!PO)$+M9 z^G3XSxEzb2C^V6hn!~C8WQHK{EI~O=ZrXid&!M9~&Acc+*o^=4+c*MpfTSmaEn^_| zQ*5QM4*K_(dEC4cl39>!mO>>QLJ#r}Hgo>@WhfK}#n~Cbee1*(U66JVv479kUu*;? z!#eG3;M~Y|DeXsJ3v$i}*g!b?cV9%)0^t^+$#S`01Es36_LJv0Uvyd&W*j)4@u!mi zQ>91HJ}AZoso4pg`wt%8GkHW&#e=Q>l0Y{Pd4SN3{sT`#hp%{gr&DDQHv7}dl(ZKm zPkYaOb}AU~hAOR7x6ltZ`^(!{25M}=*{^OuO3*I3f7mTPl$qQ*Xes}@O=ek9?!bhz zr4MC>Ql;Hq_m(eiK+EB9@7}k94`l`&Ny;UN#Yb*Zw0ZaRMP}*2X1}%k@gy7^jjU0~ zE_5RZ#$$Iu0}M-vC~O>*$l!m*8c09Xj66^tbJM(SLfkl#BN&uELCu{va#w{dbH_9B+kU9s{-TYPSmW``CL~{{02N z-TG0339cZAFrF$dnpH4=yYcswB#pNO1CqbKPbvNLUE}MuA3J8m$KzGws>iBEE5}5q zMx`iH!`Phr{oN|Ml-kfPs$NV?qsV9oEB@0x>NVp>4eCE?xN20Lj~{$bnDPlO$bSeT zBukmv^n>pzp-2z!4f$Etr}EeK{nJel(Q~>nxFA|=HRc_qvi^I`=RpS1w8B$CI-!lh z$rY(U%~bsHZcqmA=UA4pSJ0IZ&|tA@tjAO!04qadE*yn*Uj${OA-YMxSJb;X#$}q6Y z7RUz#T(Q>i{JPdziwJkJkO1_dgdh|K_52g@S%%PNkl^Kg^-ow$l`0w1=##?snfATWczT3&Ye4SdUA5H$TDz*44N3` zc?cIP>$K1wB_l6%LiZOs3M_GyifUy(=9>gdLE1kl7 zE1k^rWcheOTE?RdBBJZPoriIml}iLEgajbM`9cx~a&WkWwa$%uYn{Q%SFHGH<;qp7 zSH4z1LiKh&$NNgkE6PiQ0w1g_6Fg!`c|Zz5yQB24Yn`z-35VTjwF}g^y2_}xZ}VZ{ z+`3;*lSNei&%4f%fxO*Yj-1)Kf8XX!e_!i7zZFv1dR=~jWthCyx#`dOu*1Mfy&s=y zIN3YC%Sz!=?%_gV^!Sy_7q49!nV_ii`u@=|uU_N5&N+Q^H9KE#67$N@ zT`LO3HR+EW@cq8lxqff01EKYY0(i0OK zXCya%&{_v^EmE4M$EPIVB#1H zlN!NQ^Gc}CL2l+g_Vlo(${N!Msl@x+LMi&!Iq+{4@|U6&ArmTy3@Ist&|M5O9{>Gi z5~inEB+1ji-)s$kPA^{y^=7~Az!eMjY#gRDH_PrXk}yH|t1U$K{*YItMDsq6zi{&K z#S6ap=JU}5E|lG0B0a#?_$OP)%t!$$STt|e>W$kLzm(AOO7;B(QuN2Y0WTvzq>j9TvAYz z71)sD+wPCFd12C`v2UKL#0sZ2P-1zq@((rvC=xL|d2aiGqlZqMSv&tm=m9qJ5c`J? z8sL0Bj$tFE@?eQ%a(mMn{_l4{MU>(y(}{c51R0T#ah z^DSO4;}go*c_~j088P~m%<;zRe>D*x8q1gG4IXv@g0}kEPv=zqs|n&Q`@~Sr{PU%y z;gTxX>^;7JHSv2{pA@*bG#7f1?hyC$;gWwfk*i(|7O&Xu;Di8sY{r#;&kN#ANnD88 z@%3%Ua-Mwqo#KDbi%;-F;M}h}na>N(gR_?rrGHP@Z=P|2Ti~FA%lSo*pp>AeE(ws6 z=6$IRu*8wi6#q6lI-mn81>92;C%K{Y4)rXkq#`mgG>=7ZAPhNDIF{OJrSkE!Uv2yt zKWl8JC5|V3Y%m6DRd@e>8wAFFy)9`X84|pdN~jhir3!icl~No2>5;$PJ1JoT8Q=uE zzMv5A{^MO!)26r}1um%AXyy)PcQL6ke|p^g6p~{SrnyVKLNtWgqA?Tr>wWiMOHN9g zY%d81f~r7uP!(1N|MAADah)fQA2nuD{Rzs64Y1DtW4WlLQgK`7+EDsVj8?@|*REaX zL3bF|PaZpT@YoTmG1X&hk9*J^As-DLFuz~LR|~bpzuploDfkNLt(8ckDpVb=UGn!E z%3w}G0ZjbICkPcR#X-M0ioa8%+ExKUVtnLB1!`&H;E;)};x zip8xwi?4!w@%Pn9dgBK5YDYyVBN}2|Q|CRcgc3v$a0sZQXe6w+@fHjccsW)l+Iy>$ z{-4j8IepUjaT6xBtyL?!zd7g)mRD9)Rg`$8lB#m}(Xz_0zf@UOQt{W-$%uoe5AWT* zb^FOvuhyy+Gss?2DqUE=;jBl^6#la3f+v)}ciXXZyAK}Ny5;YylcyJN+OTHLs^zQq z^{Az&H`sFb>VQszr}XJM-E_K7;uEW-D}A2)e$RmBPY!zX0jra^9#el@`TdHG2M+YA zRjb}G%Z=AEX64zpwrb%iS=%hK-GShWaW|wT$#I(t{=PbC5RozXs}(=|@XLnYDn-2y z&P|DZ{U-Fx=f9V)-}7d(y1h^AU8R=RWj%WM0jrbL`cX+37CgJ;ETA`kKw@s*Lt;{s6XF`B#KqLF(;y)+ISs_Pl%@#hk1{wMxC9Gnri{XC1u#PVMf;%|ESITdg`>y!>>X&g68R7}=+-s>9Bl zUay=dWf@zeR;zPrKIzpfIquVI)1O^yw3)On!2Gv#ffP+CX1>J+ASXTYKLhwjU^I4KfS({;r|MR$)|_G)5hig^f<)WZm=6kyFn(C@rwtb%2gUZ(*xtuaCs*sM3)x=IH)RxEX0)>$lO8I3j< zX^XGvN;paklKBPq3}xj%1@Po(Fe1!)oym4&$<9+}&mOzD>x-)vJ)mDRC{XU}U;cRJ z*oos84zAdL-z*XkuM#LO%GRRQTAbUSY66`>tXaDqrfOhnR6m>dMoP1$h*^@}{;T_T z$f2>yY_;2!wrVKUWh)|3LP(usOQ*QRxQ2<16T2K?EWmh;W{Z*3^lsR=VZ*q_iLIC3 zdw>OquMyC+*6MZ=75N8Z#(2dacQxKYiS)IU~mZ zv}EFXT}>%Fij8Q7hQcie@^0qlsI{99A&WXFQ(JCcbp9Z7n2pfv+-pb?&msf;!h5kzB1oXTS2d*vS~-MkMccSm zORTPZt1RFQ#zC>sZeT9Fl8`#+veRzFo#;Pcu2^(uZaCdJGn=R$-Q&`Lre?Ar8+L=s zxMKS9TP~~I{fx+{6>82-9dZ2A1!tT#kP&1`fYwx8XfWG-%!!Yi)qQP4u|utcjx>tf zZZ(jE$!T+GK#@_SxY6_tMjbYOD67SZGKW2`8PsyK_EMb_3oZGoh zB|Ll3bNhx`)}=is)){VT0N>+j217pnXuC4KL*3Yq4qshyJkJQyi^*Z$ zH)q-UUw&D){@c0dZD>CR3o`4>T{v&!FPm4aUzxoF)u%<7Xw1m2QTt7Yv}Rp~%pTft zsk2y?CA1Jbo=R6X-O}WdjBckmv>q+IiP3H7m(rqXtER28IxIKYz@jkf!21E+sNmqH zt(!M(*t&M&YA4!~#%yAJv zku}*-0r)L*yvU2AA5G8dvzaGvS`FwD7F*7dV%lwU^13~FAOWIR>d>$O0$%xQ(4_4} zN{hmft;jYRw4lLg4aFAb%AkgzXeb|B<-(nMy~*m@)%Tr|BZiHhI_SewPBay*L5q%L z^X%&uRjXFrch9p9nO~wUDni51+U;}Fo4xwsuwJp9F1ZSIa;ds^w8b81B>wAkoU`gR zS_@pI(|55|ZO|tgHXeN0B^RI$?HG>Rd286Kn~V;JW@g&A77$N#7OQK|%bmJ+f3|y% zC;Ods$o{<;euUQ!Y&Lb>mW|8a@3Qiqe|O6M!rTT&w=!#MunSPhLvx$Zr$m*?Pjn!(Jl-Y+u={InFiLcUB7Nj%P-JR za-v)K$b6H!>4uU8x3!wpK4i?CeUxNdKb+kv`+$G{k!ci6(+ocMHy4zDh~ zZI3Wj8ui6mbENL3-im6oYn`N7iymx{dxy^IhEMmH!PJpEAUIEEjnV4X9on+}yw!=K zmkCDE+Gt&bHbN(}pel?Oxh*L{vs3CL4P`Ey#pbjda6zey*VhJ%uC_sCEQ5c5)n9I1>YCX_VF z0iXL%LPC+UD2)Bacw3CU!s&839k%-RDyQ86Hm%AY?@>XfUY4q_4?ILcReNHn_@Sy{ zcZUv%7<_jKzC{l$A2MwCkbwh-sD|}W^cdK~T3JI&i*ko+etRDHuizj42K;w`cwRyV4M0tU{HTVvW_N2EYDa z&)5TUvJr-7P2KPP@fl;KOdvCKGgi4Vtm2<1?QW~3o3Wzh*h0o&i7*E(sP5lB|NieX z+}lm{))k?SrP|uy*Z=ETDt~O4@RhAwQ6;wN6EeD`RHP!1cUs!hsa5eA&9a_Ji>I}e z8|xJD^q-b^D%CgCV&B#+2{1TYW^%WqI=xpHp1ZU2vDgW>_wKPW0E2P6zyq(L$OAtW?PwDo10=RDPkOIQ-7fpCy#DU(0DyOj1|!c) zEb9AOTH@T?**&+pdB(%>F=#wWu!6KeswkGHw)ISUYJ=sQ_ZH{+CAXX5J&cPg(SDec zF-3iB@YqvsU|KXA4WkGEX$o2gjd~9yN|*PXp+flB4UM2jyi_NCY(N@#u^Ecf!HayFwv~ADjvls)KZD$-5z6NtI+Y-LphOJqovi1Z3;c!VFou zxbn!A>(?&aI{Lka18|OuBpuYP+<5Im&c$12Hk`h17$b{gdUQx6CmnwAu}9l=YSy~- zD>-470@%i|e3^OBBW)k+@@VUpPp!Cbb5|C;RLF22qhv7$Wjr)eCLVk`B`pzAAX9r@ zDwX9fX_lh{ME}NFn3iUwc3gGOoCP8Y5)r_4iRZD6LAp6WbtKF1r)Pe>Vcvx0o0m<= z=Vc}c1Ja9V{ruBSizj}v@uyk4h?-K895ltVly(0}O;OQJvwiWyc*?_)r1^w4fRgkhwjMbp1qyKQOD#Jaly zbfYY?l`R0hdPHG;=cIP4c%PMLfeX`&+e!0;?`Ge$rXvePfd(AOu_O>pfw-FQrY_HJ zUboZfAPO6(BS2A>5Qz2j*6MvcL6HQFG(oZ5$vcFc&%e1QaHtiuJQ~O?0VueXJNa?* z`h9mh{T??s?kHD|CM3Bvc?mEpTFJ zZtuQ5yLTMe@!5_5nzzh7-P<{>MP_np^Msc#1mt^YP;-OUegH928#Za!>SvHMYH|g@ zmy+C+Nb^CO5I{zl(dn8 zSED?3k_+(H_g=7yA&;FSJOZkea`U{;i;5B$)RmISR_tLZCofpAt4rIxVPu`eYrvoJ zc;M?;U+&aSk38D%Kv~c%$=;7)^Uj$ip7i*vNA*Y&i{^)dB{=csvf(rK8If?g{NV~H zk|KoCqS1*l(WUObIrmgWb>tf5Vw5bdFX5*Am zd1z&*YIrClz^kA5?j9Gz*gt>t7m)*RhGoU$Z+Gj}tLF>7o*Q}{yatwWfqxUS4Qn}b z)6Q)x20pbB^iGoIBo9e&pkd8DB$Nb#2oLqGD?kDIr}_PJ&X^0d2K|Xy`EUzplr$Su z&+56cl&UPH4a+y$8I%Ys60D12Lsu7H^pOs`ShjL4C6GMjriD|}w_;L7TE6=z7ovrr zmeCxyG^3Nb99R*}AH;wq`v8wiq+M9R{P2UBbFjWEqj!iNw~{{1cy*(@^qn(v;s=c< z7=3OK4;V@+dcXNg^RC(~X4~Ego6v31CDGi`iz#~Ff-|g-${EuB2)Gm^N|5KaJyWlq zQdQLTs323?Fev)YzxUa)7Ozj9JY{^hmk!s^6W~0YaF7gZIho_)9H(ZD%TsdMwe}LI zYLDRB@P4~CkH5GNiaQLv7|rn)78clt#@CN;Sg*}85}q042q(ojkrA3lK@ft)Zo-(s zqH0jNg6G!GEk~{kNGW_UNEdG7S+~D%`twh8ee);1oPE$YWG`C77J-9sb1uox!!e-6 z!{d;wU*fzz8p8*TaT4v10inq2IKThMEk*(@3fF0QN(Z_Li)~HHtpZ)Q%rDBjnzTEL ziuc5VM-xq{=t?+C4%8PFbqAg&TDG|Ni2;eG93u>#MAfCsLDXVM!mXm?$va>LH-5~=ALCl1s0OO~Q7V-xI^pAbqZ;D>9&~~);Frzh zA2pu_zVdtDe34#G`Zdugus?jFWkKjaeE#qimnoH}vgWT*9wrj{o zSIJzUXr>%LFD3{`oV^)f6jcbs7g68PP-_6K?4Zl20j@rg@G%sjJNBqe5LJe^sI01?S) z-7+fUQgC#%TSg;EBXTqt!Txh&ztLas6W?pV=eJ9}yia0%Ubfu*`Jh{l1)0tIP1w(1 zJ6rO`Nos7e)AFwQ(Vq(FRQ;h}?sjeN9Cn-c6yaD1CxIS&b z({bI7P|BR?g*1`4_fa z_|;hHi-E|iRucRi>kXZJrG48@U0Sqh_r?vN%t(aS7pQWLXw$Ln6K&c(_UxJ(qeyRr zjPL-a@?|R+uOI=)2psR8k%i+8S(&fgs6dyOOHe9jhov`1ETE>DkFUG;IzM0(KsO>I zl>|e+P?+Zc*zp{y?&6$fn-@;{Ve9uZwE@=W0~*PBL*$ZqTfdq-YwMc1`x$^T5=Kgl z%o681b^*)HLV`GY6}jbQzhu#gRrw3Hn72*L4F~WFz?8g~yGfM>e)>{#X2A{$NDkgB z27r2%>Shg@vt-HA#WP;oCX`50K%h}LR4FyI?Fa3KnJUBpASQ+vg8@(2UB04q-yS^= zBiYClUL^on*MBo-)z=;K$r~pco{$90ohaj+;_7c z8KVw@&>(|eoX^Yos9X&z<}Q3JuIu>{pg+hM;3JXpc{VQCU@Z->c$g&dzJM=Gd0o=w zFTcCx_u&?~SqOf4;UkoZ7bZTI&~HB(WO%=imzfDX74UjMnP8y_MoftQN2pNdZyf3A4T4F|wxuM`w7E?tLt+s@s;EY}3lc0{1)-V*1k z<@+)!~jqo^}089?W&H0E+hmRgUbl}*&?7by|Phcf~;P8`8TDM5g zY?b=P^)i$`kF1Ino?*?Kw8%_o*|_Zn9#CG5q%VpwzzRVr5Efa#K^yP}(4#}rxo_6) z+qGfy{$IW<2mn~R9_13`bE&YWG(-y)14|No0Igx`}BG>c`f7c6S&}P3~NQ z)5C^Noji8RXJg0Yg}pN1$_2bAnbW=Mt7<0>%PRxS3459j;C7$%UF(h?j+ydaQZHR8 z*3c-fl9Nxy){Bj;T{pJpjY>3k0o-8LUzPuO9HL66XN@loppjz`K-L-d@TVxc;MwrQ@^+5 z(&r}v6=h|W{sljJO3|&+;Epc5=mb1uI=4WN;TpRLlCQ$Du+OeauCiRP{>xa�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Êqk%U^O~O)t^E0`m2xL~XD{0F(ScCT1bf-E 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
    ~`Y*VIDOs(MXEIo+c_XJ0X@Ui5b4htkT&*;ZR#u
    zP@>1tVN&G-N;@pE8%0@3cBp(wMDa_EqnD_4h8hPF^{VP|8sl7d9?d|j(TQeEa$+)v
    zOOn9^$zxWR1MCCu7i2hS5UPw;v*SmaDTujEa6rXPNan@IO?pf1gQDU=dOKk9-a0?F
    zw{{PL%h6NZ3v}nz+aU=o
    zjy4c?!E0R~Kz3@a*HU&Y4eJ0QCK71@f;}$dz8!ibWqG}|0Pa{?8Q+}4U1L%0mhvft
    zUXly|+2PxhI92|mhiqEtCOGH(^*%dbBXA~S*bdVU0a;zih@v78fgmOp>_zVs>-9#5
    z9Z+^ht=|I&9r2J=`>Zb8&k_-jV#QYxYb%kR95ej>tp+E_aK_{2rg~>}Boc($k`UjNVL;Kq7!!lg%C%d{fy6?RFYq_Wc7ewg9#A+A0q3zB(P!+|h!h=&ZlX8|@c08ZC;7%A@5*tMYV(&sS2gVdK%RI&W1i_zP;P
    z0gc$7fkmUa>Yc}L{8p(nxjYVw-r_VFf!zAhrbelildICZ|;4C+wom$Ye
    z)jRDz?~yI)4u1>qK*Ry=^P1J4QkWI{NPzc3
    zs5$XVB*bGVXv?DeT0}~Nf&!UZph#XO#l)_)U^lvE=R@BICvtYVs8Z|Rd!e)o
    z^lnY8=7<(wQ(K*n@QF4MX13ZoBvRQl+b5(jYpSL`==^fS_CSZP5iMh)5gci4?|_!=
    zZD>HI6rvGUqvo?ToTro)OR~1Qq|(vTQQJmX66(>1K(MvR2a*p0H6!^r7LD$Cp@>gu
    z2@bEWtFs2HwyqjHiKvUPPh)3$ZA&xwGfCbMa&3z)l_cYQfDi)w5l(WGuBwJGvDJVq
    z7vIEF-vUYkf+F=e_0~_*BuVH8s6YriM{QkaeRWgAFpvc_1e+|!J}vV#;yu_pF1Nb$
    zPC$iFR#W9i&k!X7S6wq0BZ1*bCh$C^Q1CNT8qgOa3`f`*pneky80wuzBDijq+m_Rl|
    zbwiD%SW#c^0V$60(4yg7t_W%Q*uRZHqrrqg-WNE6Xevo$Amlm+)~rGrlY)N+_lr2a5~$
    zZu_B3z3;n2r6+gnE;#)8OSfM+R+x&rkKrZavZx*ruw`ax{^$&@Xu=dRH)m{KnouSa
    z(HsE{C>fWQky|%J$PyM)7B1ov_*ncTwuoZ$Il!_7!D|#dVWKD=$mhsnJR3a{N0G#QZmRbOZ3an47Qn8h2sRSoOSdRdVa4;B*
    z0ctAj6!P(_Ol2Q3YAS$PjMB%H{EeFGu#qq@jt|Y}jG77!jseH?mA+6-C6Pn~x;=LL
    zZbnUoW0c8iz~8P5wN#BAiKGNJ?LNq8sR>ae{~_KEeR80dYE&TI7(BmTuf_ID7SU1@
    zph_|WBre+DXsI@Jg@Xtpi}5=|Z=i?AMgcQ{=^${F3$;{-OJAn6kZ7NIo0upaKy?7t
    zLGW6rkt~u4poIV+pZ{&8+Gw(RJ-RZj%L|{(_hRT(QE^5B?IF55nvNZoB8tk|Xi#bp
    z00b%9$wDw8BIkWLkIzNX9^n5HY)N3GB2yR}EqGR;)*_h`24>KKv}jn!xZ9p7idNCv
    zL~y0U+~6kUuPA||0*SLo7KBpi)|vE{o!FqHRU^6ypK4Mv?2729aj#dpRYs@NhZJGA
    z#RdE+a>joo@h~c~FTo_vM)do*MBcOw7058Mf=mwG
    z91$K+5>**0c8N$I)MRNU5v&=>kBA@s;IAg7#R0wyk1y!4AQle44YCF-x@}z2v^p^*
    zE-DT{F+d>W;-{`ZtyUuk(BpMl{XRITptO=Wt;uHk0n{Q~igY0&(I20Z6rFSL7L5&b
    zEO4jczz^EIkv>*co2SZR(EKdrlBVOM;yH2fN=GGJ^JSSz3)37pThLmAs|%+P$&7}U
    zX3?VKU<;=rlC%l&!y;4TWsiPeVNe6`0*$Vka6DP6>X9vrSUFT=t68-jM-FK{8me{#
    zYxYh9lCJAOpWWEl>L$jCFbl@~FYK%4nqAb=L$MKGD-ua}X
    z3EY5ymOw2rSc^xK;*HOp+PKka(0e^#<1{;n_6mx5MtiNm@oLA><*%)R8)GZZY|W>i
    ze0dni-zrOy8aRef<+a^ck2D83^N{6iQf*?6Kh3d9_(kE9(K%}2&J9&xK|Sk4ZaLh$
    z9+U1{DcOmxDirqNcmT@Wfo&3^zSiOxf;Nw%z@fJv8UgE4WAlOJ)Zuj2G{U!N8KAzx
    z@e8N~$>#aFBU
    zxOiGv+VIZdKog2X3j}j7
    zNdu^beqUP?iKgL-bZHIG5xlhqhNZjc$2G5)H3PU0Zg5nA`a_Zi2q1@a+mG#_*55-k
    zj%L6%+zR!E=L*~Fk<{S^Cl+Yq{H`XP7U&mQ+x(
    z3#0A_Ye0P5>P2ch(e#k}4wiN8rgTRCg7e?+EiAKkwfbSYV4Fa}t**f)fP)ee3+dz@
    zr&+6CA|iI2hM+n=G0uK;!wpV5=w?BH+Zv!O`QejrH}F-!|4mc?G+q@yMN$v+8T03I;n8@R^(h5-UKA0vuRH
    zAHP}BL^`au7|LHfr@pp;CJhNCK`cFzWrNE!0RQp(3VtZ6udW7s29$%J&N-*P!nTL+
    zm+`?PHUaOe-Uj8s;kKBtd307&x#sXf={fba7?2gG0k8&DMR|FtLRo>(KbQ!N1?9nj
    zT?abF{g38=l=rOq3a2w>-vNIryi)dIj(Vrb>8rDMPW1o5k($zu{m&B-2ZHXvjc}|YC^)4%}DnHi;BakD}IlB0xc9k;!z~N
    zLK62Sf2C5f;@AXsoNU=?0JR8ti`}UF6dcYPsDE$(_7?`^2DHd=TmbE(I5UqcG4qIW
    z!8EY!lEGWm%cS2TxfP**CvilgY8)>n5gl2pD^{2sUI*+5y=`A+A_{{ml@zs;3{Fs{
    za#Cnys7m9mErltg(Rp1)oc6{ad1%Bi8N>ls
    zoLEfD8NtP7_P7ixMaB1UWl??Wu2<>C`Gff|2oVae{sv!Aa%m
    z{bVi(UcyLb0;)9pp9v|mzb;prG=^F?!YdAw2aHZ8uT6V;KQW(4;fSOjq&>$u5)-22
    zcW+hcH6%LdwptZ63})D1c4!s&9K;E5u7_dI;GQ>
    z78mU~Ual%Uc*<%$eq`Ny`9Xg$MH+TUl&D`~mUiVE|nHJDSZKYCMQGv7;
    zm+?^Z7jM4bSOcy&!j=PErKteE0;=)p;~#%))2dwdO07j_WZ5Fnohps`_`25$LAI>N
    zFg;)vS8KNrRZa8Z2b=bTSj1&GRf#k^xMhMqOty9Jr=|4{r2X1J4-E04tM~*FBTAz<
    zR0;>D9pr)*Cx<18z)*2`+NrQ}Km#s;@=F?6kR17(8h%e-K0y#bt$uPpRP3
    z^O)R0uTF1bLYYpB+WafAXFzzRT(MbGu>O>FcVESgnTD1A`iAPdWWUjL;5=avs4RUAfEgo)i?z;jqM
    zs-L--@6Le7;`Rkt-g>C&9^KAe8Ya^j))33xKsao0#JOz_O<55Itp|ynU|#YV%+Q;0
    z$l6^9pI5W008)UZ-~x`7uoBtrrm|zq=?bn
    zi+3fE`6do*;6CyYgzMg1zu#9!ii33&(F%sF4o5l3A4k*(un(o?
    zZyd5>;Uu@8+PP|NQ9W?&eqiU(ap>|GEJjI)<(N2lrFtP7rJE6lwv|@A@zjYXf6Xv|
    z1o%{Iz1CVnng}QXKr;@D(NOu#n0V4MY$T8IlXYKWZsA~qZw(m@
    zpjB6XEJ0o(R*A#wb(|jA7Lm|+A%AWKeOB#bAeNx&bO5eB=e!Uq2V$)Ps`I}I|*04_~~
    zR^zalmBtSx!Z_@lCRl>--g>JVeGY&1umIrI9>3<-cTd^D1ca~Puvp6r|BS26NXs^?
    z3Of{X%v}I0!t2ENP0rJMAAA2`T@~QhaHtx~-_3(!MM{@x^y=bbtq}kNi%MtEt4a$_
    zo9vZ_HA}yOst>IQ8s33F3&FEbBu|yo4jM|5g#yeqdytS9}+_g+0+2O>+e%AhHJ
    zAqxzBjQ$T95b!Wqc34%2m4W=ITJLoo|L&w8PDL|P=rkW*0dokBF|-XQ4*Uy%5@0V`
    z%nrL=Wvs$yvFWuS%LBnniE{t#;*@^>>nXsa0GZS%Ks>8f
    zs#SX*%1Xt>5EN;<(ZrBNK}cKmdXs6Gxz?h!xM~dLR`4IF%D#JeB*+kX-IRy~@9Y4J
    z6Lf>m0|gVG$pLSX$F5LSD$EK+iF)^4NQ{LBORk4SX|D~(ATUvY))2fCU>5|Xq1Bfc
    z>XqfXO*iHwLMx@WL?e$6=*wp9yXmQJTq>hvs4wNhhJmR1%Q6_=}v
    zKfiYpSY-R1um+>15}>fkl1hNJ)aB~ZBKVUletl^MJ5_vMg>~#bb>gQj-xXHu{$^jn
    zk!`z9?EiH6EtietCGtcZz^~7#u)>@X(q!J~@l;BBevXt!Bj%jUrT8GPrz9axSVI4a
    zOki#TjJ6bRDoQ}}2Y!I!r{X@pekUv(z&sv)DF6b2kje77sRFP#!A!ulyTl1Aqr|*S
    z<|ma(5=2rFf(T*N+Q7-lkGFJQCKO6|;wz7Ju6;-mc2}R8>*hl%F7s)zpT}q9a84Cy3-jl
    z*|dt5wqSLK{kgQvY#~p)yum67DRcj)FJBC@+fldd+`exmf&!dmsVHvlSD%YR%A}@A
    zsT_7zjD!{og@SY%kb7BN(Z9cZbSlk8yoJt66o~{hwl1+yo*i6CBAxj{gZr-!nM`-)hPu|nmxYvB>pwc-p_b-bX$dV5TzUG;D{IXqAFche)f!Uf
    zl|aFyr%ee^9ce$`r{u}lq!CHXoi5!
    zy61@?oE>#x6ICMBgMJi(>2ub(Fl6`7Fa0&p(~adwIXB8fl*
    z*(nu^Ihp6%smEpLa1G(SB=<03bwmogBs49M_80lrmm@>x$I$uFCpP}|*XqAx4gHSKhVi
    zqb(o3c>4s|fD+e=WLz4!3R<2u?(zi>KJnM9CuK?olt`Cy#k5Eyq$QH{ypdC8PRNl<
    zbc{Gk(lVfLL%&Pw9h!r`Zw?&Th(f7A
    zBo)v(qbJUoF?IZi^nq)$D>fIbBrHiaoiTFky!PaRi5UY*q>-zz(?p`2NmH(RMp0dL
    z`irIW#||hVr)BW2(9#i8X5RX`ySvA*>y;Zv4Ja|1mVm62mgY>nEg8#}D~-nwnf
    zfD#*|GBHrnqVzEr-TLD8B4hD)tLEhlDDedxSbQ10IKwB-d*H1tySA;rf9imp=vWVL
    zkXR}fN;2}MU-$3}FE6?K^5N0}ZQLZ0(rFTGWLaA7#F=xipFJ^qphR%U5ZjPK@<3il
    zGt#qjv*lvR0IAZInl6&cSfXk%TuOKw-YAg{DA5K_y+|yAjAV&}bedQomPrT7j59Pl
    zLl`NJpd%zfT8?qaE_jIpJ}uN211^pqBE2O40b<7$?r<3~@+Eg`cW-x3Mz1T}(UKnW
    zJlw$|33(pwSfN9nhdWfHA2w7YGhk-xzFbG}y;f{ig^J~u)?jT4Dc^>W<7#;FF+#!%3@;uxTFe>DE
    zxC0<7;Xa-d@;r=iPfrbb9!9u}L+ghT
    z?h;-|{V>8^5>h{$aHm6_yTS-}I;4H_1&2vmL#qt^s(*0|&BXsQ6Rt3#pJtz5x#2{=
    zIOY6vR~XShS`hL)jOZWF4|yI&^k0`5@;r>_pPwG`JdEhSH6!GC7}0+<9r8Sk=${<2
    zv%-n~oRIl(g%SOsJ3E}{7l*VTPV|R94=4IVpNA3sbm;Vk5&bmx{P6#c_Qs0nKlS$i
    z%;-JS1BcPjU;lnn(9_c$(Q{F6Z_ma5#Xk|f82y?5-k(36sqeuA)Gi$%lL3h%l}aS=
    zSV$toadeC*Sr{!Cdi+nAmX`iGmrChjl6K<%f$QhooOh7Nb<0Muq`fpt(h9#epl_iC
    z8qXGxNhEMpOIflADJ$fgF^|b7m52o*8ooo;fKS@o|8|L(60sz`Viw&s;QdSiydR4}
    zNDqTPdwx0iNZtBnBP4KU$>6kN+*hGpV+u4Z&lOAL@~qtK3>opCg%+?gEv(3)(}s^4
    zGj-y)QQ5$Ckpl3(3*iovvP3MQ8dy?zMJb_x2GN8NKyI2R;K4;NN+s0;FJ{X}jF~p=
    z(u-zH9hDx5{;}vnnNTRAbFW+e-iCMA{3V0WeR{(SV?aJQN;*0Lom~R|k
    z(&c8AeO+(=j?}MRo;7ab%mq)pvTn&;^QLF@cV3i6ja=ccdjHnz=6%!TxjF6Yjx)*|
    z1=729_8Uejnm1j0)x2f;I#R!3W#;5*^Pm2rSh08QJy+x~^;z`lG$H?@vii>^2>8Mo
    z$2vYs-*e_n?XFS6dkof_awJOL5M^3-`<^|Wy%)^T7tG`~%70f!^xNE9VoSE~Ew=jEe+c#3-
    z^~K$19Jh{C^t{E%kcofjX2!oX7v5S~CRVsaM8oUbw|L>~rEYPxD;7_D;zV1^0nyj(
    z-=+vNmR7fDZyj0D^Lg$?Gxndc_0=DNB@fIZi|!`tomswW30IOKpZxvB9>*1$Rkb{amS3MnY&L;?`F`k}d^4lX%=|o>+vRbg-Wg_$Dab`FwEi
    zNm9^)^z7h=PMQJYc<6-vC!DZ<-=s1JU~p+J_O_6Y!~xAjsLvnJ%ppe(Sn?c76aMZy
    z!}_%*rT|V*oWO`GlZ|pg0Y;G5FV7!!i(?++JE9^Ko8M@05xxDd$59eai(|%y_v4u;YQXwo
    zdKP#-M~p;&c{nAGDG*$eO^fAe2#)?%iHqoUc6S7pW{Tv)M~@wZ5(k(`hwp_9S?-wW
    zgHYl~ZSQj#BgRg+bnal3I8wi6N&46cGjDlvFiIS$A6%9;Y3lrEz8s7a$Gm@;eC8$h
    zy?%5sN*t;0TP~Y<@#1$+4@QY&-oH{jY2u>yjtxeMBlZ1Dva_ZvT=m6ZlsKmTbJ?HhP>acqbr
    zgHYl~b!=XVRNkk9{ZS>ZuYNYM;9%~DDsh_Mqr{yZ{Ltw_yd!_#`7v}(|D&`P9EH`-
    zW#c3kK^6Lqy2c!5%t?xaHk`WFe^iq*I;^@D(c6Yiw`4f%Hc?o0jVTaZG93E}3gbX^
    zjX9|UOLBlUlE{9euGM$8HP_k}$%G=QR1QV*0)1`h@jqc&n$FHSaCew<)^Bw;A1Pp8
    zEEfn-0L$t(x?4+M0r;FGP_lpHfb0LJ;8Oy`>_P|Jxo;|DaAhcPfdh`|pM9}RfYznb
    z$N|b5(>2Fp86}X((g}tQ3wD6zz!Y#kCc`Dw8N)|}QQqvNcaA5JuReV2`00P#14pV`
    z9;ZcFV=tO<`5*Sck=mw3;;fMqFTeWcL3rSpseMe8KW65i|F&ij9yn6p`J`~{#QD#C
    zRWb+<9P|Dsg;QtT_vZ1oL3rRuealmVsnZv~U)VMX4;=IUXLw`BF8bhvV-OxVQs4fV
    zOg>@Z%UgaOga?kPzepy^o%_H`n+D;5>#Hy2)1ziyyI_C^?ycYDfn&zM2sj>TdX8)m
    z9=N{xasdS&USx;^uKaiDZcOhN%Y`C>MQ8nS4;-nF%_{)inp}#r=#MII{q=>wxWjh<
    z$@GUjaD9UxI%_V7aSct&znbd7oPgFvI04~2fs6b%IvsNWLv12QWTdq1w;nk1O>u;h
    z1Df%5U+97BJ4YYGJ)!WuU@MaN(|~idjEKMMQsf0+Ic)&5tbkOmbTp*Cj(rDI&
    zPPiDs6zU)O(=H}#KX9o}p*neBM&OI4QSFmCz{=x-(dcxzg$9y4f79yN8iE<8~O(7=1P2uCv=zAQ&_VFZX
    zAYT_JBMm^n;j$6o;HQ92iK$&pi&GO*(%0z>$EPGFP-2Pj!9xA3BWM=$G=dutius~X
    zJA0bfNN9>mO?|$$=Uqu;Usc3Oz!vmHXK%Crel|#Ms1d=b#N6*3e_J&r(
    z6lzFDgzm6^#}%<6`CY1w&k>T?DW8`_H3&Eyv4Be_3HfZA;t9dZ#u0%}i)s@{!4j9k
    zmD5R74UJ3HlBi5jnx#-;1Y05PAQ(ARH$OFnCF~ZYprsl%7YsScaXg+hotuO!D1|f8+8qmK@ih5RXlzCco0t^#BU-AlwD<
    zvl@GPI`&ZsTmg@r{#{28)2DPPXJu#SgDAwM2<_*!&0Xz1*115!OJwuQdm2{!=@ga3
    zABP`YX2D;Pbm@QeXopdW!d?MJi$BMn{j*n?AnFm~pS{9ZQ5W3DA{2-ew1GMe=PmyG
    zPoESD*RA)6cr12=Kn@+GgG=B&6i<$$w+&o-xYPlpd*lgp3S6dw8);;?JEmPoxQjul
    zJ&fB8638Ux&uFfY3WCayaPx)!7s+cH@NX7RPRaQz5|2_%{1i+$DGMq@UL?N(DuVz7
    zf5~9@V{^r#D0HrqC_6ks45bw$@qy3<6`+*j(&8l001DV(SN52%j{_ef
    zDq^UVWcJDG=GHC~oJbsA?5O=+ot@R+eOlJq)a}1KElI%U-B8wBI2RSuG+n0KK_Ny*
    zQ>{X2qG;6jXL?!{A>Xr?f;Qg&MftF>&wo+;OGtJ0eNiaX=e{RJe&2ES8?H!78~Q^3
    z)Gsvk+}DBr-oM*m9dt2Y1{OvCHbcRokMhslHq3QS%qcjYis$z5@W0XAPKY*K7&V@1
    z3KeJgcRZw53-(5;faawL>0}Y$kbJ6k(>jT6cN-S{0ZzR9ZDU1%d5|ipi?E6JhT4&_gBx)1Y|nnp*P-n
    zcd4NNd!e0G{-a}rq6ZHyyoL(05bdt`#}w(>KFZ&`5lhJb6;
    z@Y~h4$FF*;!yi)S74VJn_H-1?0JL+`XKg30`M7T9)P!-r9tttc^u2~^v*7}c(U)bFA2n_{5a8+s7JHMQ1RG)U$?F}sxESUPY*6v9Z
    zCF4r3IMlVhu-kQQ-rN>XNST-XC&nzU>v#En+z4H)Qk@-^b#jm{bVRm##86G@K>0Egd2qs_{fc1t=ODTBPL?LCM
    zuK}&g18x^`9{5^9&jDW*6w0$)wEw7eIMmJ%A@dMT>2G(zkbEAJ&qMP0xBFt~H$&&e
    zzruMjB%g=m^N@TVlE%MR8WRqV|1Ofx2yrBh>}Mp1H%l(yHYJa`#3Z$iCBBgNl;m5Z
    z8j{Nzfqof4BpF5bq9QWSP_5|#s@8Y{b4AVpdD{R^$2b~=OmxV$X+fa;D+iYGx1hEymY
    zIeyAi!mK$W?E+rdG%oUB0YSuy~z@1pzx!*z^DUb6^nl1ZWZRk|n^!5Bze&CFx=U;3Viru>`yUzoFJlWv7b;@;+`&V7mal7m5e8@!z-E
    z|5Jn;kxWFuG?0Z9Mrs8aS@K&+LZnutxSqh}2U5BA$*eP2N@%%xV3YCZWZA$a7)N)b
    z8J4gC>v-UkzJ>Ll$Y^=~v}l!tkSaz&Xq-PQ1`hoENzsgxB7_Pt^qgps$U-<2&z};l
    zk`QjhIJ)nXO$O(BK?lcJL-`TUEX24k>3aKCNBnTzq40jHM
    zlKh4{1w!U8{+?@OK#Y2L_4^8pWt{&`lGw}v*>FUebQGMrz?{c^mC$ngQ~{5KGJhDh{*l%?cB
    z9i#n2@g6`^I6$JyLa1FsC3=Je@bGh_u>BG}Qrs5ORH#6ghLjE!=mTq9AkRa498R7~
    zLtYk6p36enBg4q^5ux;rVdVJ);rSuD!pQU4X(7+U$n)z$*)zk)^V_mQ>W7i%^Ti?0
    z!^rcQA?%;wLq5JMj69cw%wITpE)M-ZVdQxzuWmSbE*h|C
    z{u{RIzxNnJrMxJFQ+c424`pi}Ams->2$k}ojrB`;NT87A6)NRJNn87AOv&Fv9H#$%
    z9HwWTr>mg4_19YHI}!JKW{iJ_O#&>#^hz=mKdf0
    zE^!e>z*>wDB9l)D0!nhXdz*kH%n@Wh3wON-D2BdnWfq+?X8P1irca-eFM|_;a7PvZ
    zeuHL)kDoqf%-HO-)KL>BO_?}q%Ct;4p2p4)3Dd@o6Q+;KBlT;R<>ZVRH~r!{S6((_
    zJnp1o>IX$snjrn^FP(M4HqFzcbC>pXRkP|={%M>4m+R$E*d6mzZ*T3Mp0=llwBTQw
    zJ$B;MtM6R&*uC>FpOksF`yyn1%-q?g_;k&;uIA;^XL^Eb-g@N&L)*@A4_LjkB)6h|
    z{?Rs4zkWsL#L06Xdh7c=pFjKOOSAjyi)j8W)#itR?|##KaP*5k<_s=Z{zOo-@G*;P
    zI(19ynW?#l8<_epWz3j)=jva4wd#$Fuj*%yTrHOJ7dWl!uFDr(_v~LXm-eWUgd(}k
    zX@Bs3Q((66w&sqB*+*JQ{lH5Zmt6YD+b28Dcy_#S{WesEz8aesib>A119Q@>oIsNRLCo)qc
    z0`8PYmu}U!wC~Sf-raRlsi`=$W~%5BOVt(pzcl0hN6zx1=4OnW|M(l@m&
    z#1aB~rieH4@lWm*iY71oF4!>n=tw=Y;QCzDUzXY^emy1l7mQrbag{_BHc<_eF8GY=NNIj+HZ#V%Z4#IG~AQ+3@Su9yxaS#W@+mKkxqxNu{8^HGGjXMT8))F-TXG9(1SZ;Mbs-~Pn+OB3@XQflOgk#H#E%D74SDSY4_k)|XXF^a=a
    z%gs)ubBB}q;FiU!Ny;w##vqp^{g0$81Zk;aDN-LO;2+r;{De$N3MC?`s>lu%@Q_-;
    z7qZU|AKeFOADOt$zSqNf1qVHm0rf)QE0H2{cIOL(EI}1y0EJuzLEru#B1*oHpr(IT
    zhxnsInFaqo0?PlRHbW3yyEK<2?V%+x1K32*J(9pR!W@5asgOO=e+HhTrj&v#NeV7j
    za@}EQ0j7oE3nN&vZt%I1`^&n1+W_H0l92{T)GquRa`6P$#q~WO&_W*z@{1!N0`Qzf
    zXF}O6&vtM)ob;gh8q3}
    z)#<$Z4)5Q8@W9@mmQCf)`+Dm{$()}K=5u+OWX0Am$w?n|@%;OqdUDa7vqq*fVvvv+
    z%VeWg*=kA;X=@bs2$uHLo;r4-(&Kn_)FNxmEb6vk_XJ-08fL{W89sdaEl;ldXyZFe
    z7hWXqCn1)IIrA)mHKV6Z-`#Q`V`Wp_IrCSODjg~!c-#3PtVT^#A&Ar~%rQUc&3NK5Ny0%A~og@+8QR95@
    zVXNaZ`nIMsW5(6jkP*}^9X0vZRXdd3-PH%*xpx%P1JoBvQb)e+Z|mr6IsWI&5s&wn
    zBtuOR&(@J@%R&Yu^myPq^WQFHY4q*?w97*YW)`D3nQf84LF~8r!>T
    zpO&xg?x}C|Ebeo5%|3Yr&#GC*2#wQ!!Uw+%<
    z^!|fTke>fV*XL%jhsy(7bQrNDLf9mHh*LH2pYm&Im_v*7)F?h}sV83J6xO3~tlCkkd!Hz^z=g}kv$
    z|Ci>00tRO+A*T{Dswj(A%lHVbW-oZ+@h7iL7t)iSe2|CqN~jXTQTIHQLuEetWGY`m
    zpPfFItP{xu2)wh-DzX(KzDxpT7Hv`#Vz?r1CL5oVMu?j$mT`qNhf3p65~ladauKW-
    z4a1a`_Afn=n8I+ttOMG1z5w<3@EsEFTx4~UlqE@uwC@yUxb1sHcxxNE{`KtC^+*K6
    zL`tGINI-ExgUkWc6o9|u0LKt0Nir=-A+P?QFDp1pYzn0o+*siZfQVinpA>GX8@2Es-DXjJz?s+g@Z8wNd3UlvQL|@5EpX08-z-EIohH
    zeXs2ri~+#Ze?B{H?EEJNWdJbspUaYDPMJ3-1E8;dHce-Y7&jOLfYb*OA|Yy*4#ogr
    z>VvwJ5G@YI0ATw6d=5zU0LU1G0YK`5ml%XRFdhaN0Gi)p0Gu5@OWKXz|6T*2{+t1D
    zuKEzM_7L^yKnk&cCJ`*d^NlqRlB$8a{#jnrY-|L8pop4(fhK;Q*OXYiVRZe7-WCYd
    zXR#r1qeB>7pJ~ANOcr(<;kobAe~bD5I#k&~|&jIK}iY~Y#9w2>FzaQ|R*eP+);la({=mZx4DjIPhT
    z|GAuzvmaf*b8xyoX(9Ohh;j3mepNUaU7ytVKbJS@mQ_1dgVFW-W*~Rm{1?7FJs4e|
    z)USRfXVjd<8wRE8GxeX%&X{oX({Bz&*YB&JCCQ#X|GvTK`po#B%cAMb{KTUq7kuctSXO+}uYu{4fY#KU4oH
    z;iRbx*Zf*D2wy*`51!j;Gah}nplcAmep281G=IXx#UGri8HBH&)VDt=${Bax8$T8e
    z!q?B#Un~=kod4ANZG-UjGxZlq1@bA^-u>hteEnzZ^Qnyd31bK0>nHWWk4f=y6B~g+
    z_uo|Ydwu;(eK6e;0#12f8UXQc{%&7C(|^L0D@XM~sQRQnSgZv?L<`_2`J=x6v%~La
    z`2M55{Byf0WXrcb`*={G(egtMP{|04PD%O8Dv*U3RS`m%~vvlhR*>*yey{Y?EwWzsP>Kl|3F
    zgK+lu)t3m;r{DO%vx9KN7*34rY4RaH*vy9v5+rL0HM+;W{B+0aY(9#DSo3VjGjFoRSsyjEYmW!d
    zY|KL(Y2Idpv#5C|JD<kgl3ZD{GN<0#`?Fk1!q42u0lU@epy3KW7~(h}(4=%+
    z9_}CA-r4;c=x~MOK5Osp?)qeeh%KeIi+E%HR@VG(9*-iFcOsM(@^E+QS8Y8YGzWm=
    z=98W69iOGqVz$g*aH_)F_~RvF5=cVl`IJ#0#-|i*>F8Z0W~cIa=}$O1&ujsKZj$(?
    z1N(p6c~6d<#Qa2*7Q~z)O15P0kGCO=MF|8GU)uToq7f2dTJ*@A{Jb&QDQvLrf;JqC
    zqLh|T(R6B}IDagi%m+aii1o&e0su!KP6RPKpPNLuO~K2~RB)ju09bL@$zo7C;kV$?
    zr37Mrst8~c25%NgMPdy{@_Q*3KZ5Gz1B1r@f9$;nd{ouCHhvQj1d`0m?tNN%BlO-u
    zq=SHff~fQ=HhM=<5mbr-iYO{7O^O9kRC@2dCL{rpklto8HUDQ%C^Ins?@G?O=R4=S
    z^AjYQwbovHuf5j$zVnvnaWkHOg8l(8@pvYPv|>3Go}vh)IvdZFB3MUhLaK+$6kVN7
    zU@U+J)boZZSypRBGe^*pj{P9tb;r{T096$XxcEq{+Kj8Q49vlWB}YY1Gey%nikw||
    z2EVEor$`_Va_<(M3$3^~z)@-Dor3c^?_Y~kCj0#Aa`^n3w!-Jv6SDWOdFKfA*W1W;
    zs<<-!%<|uV{q@V|6cy){2Vi|Ta|?T)0$SGlB^Qa4*%$ZTEJ|5Y2N14WfFegQ89V`i
    zSKZv=Q)1rg)=7!)rsPc(4O$(`M=}|JR%LX|M}?Ln>mtKw(fobEfh1OEpmh<Wx!D|VI$44Lh
    ze&c#dN@_vMd=yJ;MaH?+Mqb
    zeDilMXK8MJskL}c48B40=3k1P_S_yk6+M-kWDM^u%<_!A7*ASX^1%
    zkZam;yVEvID{*00+}71&#*G=eJi~dgGuS+yDt4q9zH!~0C{DanGVR6d4%cCwgl|62
    zpL1XCKxo_Aoyj_Ifkb_1wT-11DZJ3(40Z&$X9u@&x}4{`Q#{+g*m+BN$y)Mx-8Ie&
    zJ)ga9cO0ZOC`##f+HnmokEhG+msBSJHOFQff$vz23T?KNr;eXFb^64qtsQ~$->Inl
    zveYQWzWa@1?zMHEO?Ep@G$DYdKlGygQfpdHwA-&X#&=!A5|?u*&1oYGtYy>sJ@b6O
    zetr6NkE1AUmpuCwy3S_zjlXh>ri#6sheADZ5)Mgt(
    z3p(+!DI(9{w?be*8kuU79xYyRz5W2Q`j;jLMBE8t{SYMy+cfE5)URm;A
    zhq9dZeeHCLR^RYiS@E?!#|!K(+i*ckvMr7}9hnDrUoCQ87{nPkvU`#JI>Xo7W^-gt
    z6u9TE7`onexKaOE_;X(qHn2|H_f(0??aIw|Ifr}b;5uz70Yy=X<@;
    zopHL`b)pZ&K7WPKC-vRBY0I}SMJuevNErz7=_x;K-!x&&<_+!P2@&a45K*>K(RPNBlE0A6bK!*4o-RSUGIWt#v633R$+Ab4okoTK++Vr
    zZ4Scs$l(Zwu@a5jmUyjNp#?;Gxq3KiCp1Vj52YlYud1ghtwz>U8iCM+%3%UnYJvzy
    z2*ViZYSz5M?OpINArz~5eRG+$=-Qt{gPB}eTT6(_wpuNPxkaS~JBGzVwsDw}5*2u2
    zLTxA_D6v?ryL*zza+9?Oolcvz$nMJjrkNIgH&JV`*idL-wc1>1ZzqPL@JtPUBG!^jYj{e0`nUl_>~4OXX>tf~iMD;-^K9WH3tFy^U^rPsSFp$xcj4zhZ#
    zIz2lboPu~#4c>r3s2NTd6wTK1gi%pu6`brA2KT01UOJRinY8#0zquAAVmY_4x)fBpK*wqUpfm*8EI#MLHBoj(3EcvZASdXfKmIYE}
    zQQlvy7|d=^X+0=3_`+;8ye+Qh
    ziQ?CQ*Ps&MGun+9Hgd=-uf8(8G5k9s720WAmbL8i@2iG&Pr$~3SBx&V43XgRA!|>$STtNA
    zX;4(Eo+*fb;?3J<+BwTzWiDG;)@vjbK!`*&n!5J%HM=YK#L6}lYV;V^WnVjK!W%Ot
    zuSzN0&=lpD45y)Z_3jqIH99r(aJ%>4`(V++k3O8!R`rO}EEt&d&kuj^>#O=ZhM$@>b4R
    z_^KGO%)ajRnRDk%89%T-trZw;ho#GxFIhIfBh7FluH9-04?89frst`=Xws}N#)R<%
    zkNZekSGp(y8(*+nMsey9At{|iX$|xkd%4@?P8|<_bjO25V@O`Bz9E%j3N#MCTlT3h
    zj1&lZq4V21kg>eefo1zYU>32%@tnad&Vl6TC=hNs-fr!8>V?c^yI4;A#PjkmnV$8eTA^(Hfs%v}&;q_`Sk#ci0iA
    z$00)D2Svpz{Uj}D4WYC-3=c+zaN#_m0$MfTpbufe{-y5sFi^4*SaxAnkPW;^cncy;fk8>FykWGEuK|lLV9^CE
    zx`0I&u;>C7UBIFXSabo4E@08YN(}hu0zSHck1pV&qnUt@F5sgJ_~-&Yx`2=F|B{dH
    zhU-!!(#VDSUpejBQz=0v$LG4U&Q+J;!R>v_dH8A2vK!LeHwMv~T8L#_5VRVxhrQtZ
    z5KZ~nm@r8S>yTWQHeO(O_#VdTh>f~kfJrQz*osBXv04`T3D!zE|(vv71Hp_`?UkR8T{
    zgbzw{Tlb7`U(zEPx$b`V)uF+39&mOjqfXCoa3j;*kGs{u2Mm|p$1B8~C7l?;@Nmw<1MVCN`EW@yys_-9nH`o
    z2yiv~>`ac`b;XE)LhVDY%P+%E3seyuxiK7auk7GOrBkFI#lGxJgRiLOsD4r8YKTCZSwc2LmNT$jt~
    za$VtRP27xGqhe{=b>58di2hBh?U$x->SLMNKV0^oNQx3W?I}+i04iQBCA71+F0|B9
    z%*b6wj~zdD{Q&H;D+r|}y1MLmN}pntE(mbPwqEZuY2WxM-VBi!1Y
    z{A#A_=9(^&)M9at>(09>;FFq>j?3WnY0WcB9XHnwbY75HLSl7|*H~=DSO45`F4y8Z
    z-4zM^G{LssWU&{X{Oz}6Ic23g>#zip^s6yunNPA+h}1%u&dk=
    z>`dR;8gVQ1)QP>m%5pn_8s{oo(~;B2$TwiC(DNBqr;xnZ_Pg5-*H0_-AgtHHPj8H$
    zu<@H8)_>aGEF&^PE3Cv2F-;e2-MD4znud*QN$}Sr(t~?KR0A%5z(ASWzOlhrFAUyy
    zhSU<06l;o#tYZ?zngGZox#}cM3xY8rDmoEK{XnS-VWjHJenG2eYefo_5-pR0L8nCo
    z1X&I>5w!$Yy(d^AhA9Y?0JTy_;SbNEK0?&uf1U*UJb?}~^N7Uqgy(x24z8MhUyj&m
    z5dIBjGF31Cy(Z63ch9!kEr@Zd9|a?6UyZch(9(oXABMsgq>AIDkq94z8AFX)2Bj-9
    zB6QW5Y#s<>$O}i=0IGWk4#@Nf5(m>Mi1!$EH4&f&;Sw35(=swwRiJ8VP+r0qLn(&D
    zIiD4?aoM`w
    zi0GFmk{nLOZ?&I((fIV&cZxe{6m5)tjxA$xeYXFXkqxSZn6+(>m2OI)!nB5+j&%sb
    zXh)Tv>VR04z^fBi(|0Sq^b$jB8XmDujnK)p;w~00MbI!TzB*FZ1)cG=tiQTKHZYAxx0Lc2_jp+f9FeT49}=&)XD}n?)5$pcND8b
    za9bi;d}sS94)A4&4tc_>Gy--EDk7NJSCjMlBYK3`xL%93M~J*SVp}AVO<06^$roP!
    zE$_f!2H|wXL)GdRMA;ChzB2&TA-AWI`cagb0Ryk~xBTX&PA&^j9laoX%OJW`AW5UJjYMe*0+`s0Loa15G(qBGGKR!n
    zr4a5?Ba~c|?~6~jP-_e{*jrIUj;LextsAScHY^R#hwAj^ckF*O63DufKUuzX>Bldt
    z9}|Ru(F*i4m#l-N5K%`eWcY+rnR<+^yY$ClMoNd&A+0FYG7#Mz`#RHfx5KV-ByoI(
    z6bFvvc_caL42Rq^fF%o+m^k;!?GF>HAwayMOG?HJ;JEi){e84np>^_vvOO(HE~fAB
    zVK2Wp{ArRgPv7{4y69xnBCYh-1~39@bj){I)6Sng^ZeQ@
    zgi{Mv_B10Y0}z*7?Imfq-6d;Zj=+n>zV{qPiZu4!blYa%Gq(`}m#lGWaY>OII!tFa
    zOK}EDgTxVvQfQoVQm7j%8S&O>3MmZg;4p;=G0XAsbxgFL){u-&j*2$Nm?MlFV&__&
    z!2mjXSSnahLDbaZMJ>k@h~cwHvN(j@PlmE#Rce4=E{tKrj8HR(Jkw#wf}s_HUM5JrqMj@UA#B(%
    z+E7Iwic%t-1~n+vm<*v7cCDLo#4U1`Nr7AsH|v1BPV4kPH}-0gq(B
    zBN^~W20W4hk7U3j8SqF3Jdy#Ae#fPFfIC6H->TqB-sy#SEq}db^2~aGZ$VJB>NR3XcY({-?IC$02
    zho(h})O4Ej`53?!p-QdJn-|NR&dhc7^;9GBYIdZcKZH^nw7?cn;_`zYZ78R7tGIG@AGD~~J
    z{pfaE@~yWsOKk4c+Au75C1vlD!L91)ST0nSW8NyZr)+xbvom?FeI^7U<2JdRxm#AO
    z=|phCRcmQS1aFcS<&~wZoAvpLGRseq5~Zo*K-A&vS3NK~B&@@6SH|23lIe1>%rz7a
    zx%QiP=P@=?9H{8YTbpp}(xGU{-z$^8+ROCb)ifOUydZESXINYt4#LN8(oTuju
    zeQETFQ~CBE5#x*B=qi2}j(1?w>5|=+4q90|pulzFtue0*8MEJE{e~i?2JJ^L`Z3?;
    z-l_(3Un+OnZ4P&t-R*E}V>CkDtT}C(SL4pzvz-@TrgW_M%4eSqLV0(cZLYL2D0Bs^
    z8-2-TX@gvV7w*{4JHLy>Z!Ye}!b^
    zq|L6h35eU0B&$nzm$pOwRfhv^%k~$d8_&DxbdAtNhP2=P^Zsi#*YzewGEC8rOLyd7
    z{Oe%4)wMSYm0C$ZxNeMB;~gxoyXh!s&mvegJ-w{t(qBh2t?u0hfb~VW99YUfpEhVD
    zQA*gPx
    zi3PeELDMEVIz~i{%v=>5oV+efpBNsW6dF-YFjW`n@R&Fgp+WG2(#A&`WK=jxVko7=
    zhR2#XPG6lyB!pGe@Tf5?)TkiB6U-Kcp=eRia!MHDE}S-)Ob3D;A}^@1RBP1$u!nPt
    z@Csnyuq_a+R$=DU;B_#5F0Ke?tLGojS_Pj3(Z#B~s1O}5sQdxmIgRtF^>#?t(^utJT{Kdm32R9c}L?<>uG%7D69
    z-Lua8P0ukz+^nm`ds`|}STw0YOiV{DFWeg;Qrg5H+_wF_uy2hb0OIghAf9b~(77r?
    z&{2l3GqxhGiR!|B7o3B1j7CpXXU=iV2L*fCT0)a;j{LnnSjZCrWsMzchG
    zer4GlM^kdx*0R4^hHHRGhgw-Blme9xs=L(!^4Y;n82bH!U2MZOuCm`dBI+v<*tNTC
    zD-nLHeW0}Ip0Y(I1S!eaax4dDb#K!^QY*(1stXTQ>xgkfG)FEf{Hw+1Adl;eu(Ara
    zNYeZ4D@mHue|%u(&1-!Hwa8alcExHigAu6<6%e%30XmPu|5oH>m$_3*
    zvnK$t5mEb!@tmk-sb0k^64aa$K_EkTea8_~SMSbp9qq1QD+)kjfOy3Ha|-}id}{K=
    z(z7oC9s;33&;8?vP^sUSjnuF$3F(LEG-iwL^!6p&8WUJf=Y6>NlaH771qJ}SB+tF8
    zyEv|}bXOsM6!6T{ZdK#PRh_~?&vPe-woe9q;x0Y8(*30{)i6h_DlEBi;ryBFCAZ(J7b0?Do=Sb5U7mAN
    zVTf9CNW=n5@#;Fr7dl}7MpR!xXLpJHVjGm4YmISTHzzwwtvA{MuqOcf<1QKo;$O(vthY2(R98T~%
    zYH6gJ$UK1rB~)vJN{7JQwUFT<3KT);B%M}ZLurht#-!^QBs$@+A)ACi6q{xBp)^kt
    zD6P3s`&si!WgD1uVXRk1yck3;6f~KE8mDFW}<~
    z`1k@ozJQPKKikKrMeSu3CWx)URpYC0L3|a#$?%4V;7Ge!uZC>Y@JvOIV6G4)FZjd3
    zAC5m9tM(5P@_Bvl9r>VNy8L}Z6c5vIZ+fm6#9fGvOJY!mX>J_TuwhaZqchd1U%OHL
    zrj2V4yzX!m+$plUjtFKHrAc?Ez>s(H_BWM68&5w_mRFRvv`a*@pYsX|Z&@t%FYSeA
    zR!sfwTGs6*9AZy!*58|DPWH}Nrty0Btqt!jIbL{ZaN_8B?|t;~ZFkBZXWslqGV$WX
    zSK8E+5t^Xy4|zX#cO&+r!ke#?Mxy&6+tyZ`$mnKg7mokd=}g@`yGIup(I<`r_UXML
    z7vIjlh}oy
    z&TYXZb^9>enun-5iWct=dFR%j4IAdT-<3pK68oRcd6j2A&N~+=2qzu6Up3b?{5Z#c
    zB?17kYB`p=H}G2C&Dz_5-R?eCpAfhPU*(_eFLK+tMXG_sz1M!@2s)GIKtNW9uAqPsc1R))hHzPM16H+YTY50s!CpLl)#72-lnX
    zUn)u8cR1(f!g!YJe9qlpF9?Rj=a+BVvgMOrb+y=cC|ivUKg>|c^qsVhm
    z)C0q#XjgdjsQqvGq^e*;uny#4?2~ub=z+MgAeb(L*9$7f2)F?5`O$%8g~wiLYcjGLKX-~q
    z{@xB67SO+sUbD=dyZfW2S{^mD4^LO-*xeC9Y)bcNlf}NPJ%F<*+23titcRXPWE}-U-#*TIg6zyW9c{)9nX;fSpt$DnMv
    z&nJKW{>z4!!-M(!4l95E^Oq@{^};}ekC05@)%*JVJNp{)`Z*U1()U~`y|S_u+2ZHo
    zgZr~@zjw`gbz5iD(0lhzo}YW59yK)AzO_l?xQVw4K1q1v>a~tdmpe`_JZHcDvP6ea
    z_nt0@OJ0z_H<3Hy`ZJc%m}8ceo#_8w?w;247-yleehlJaVch-K8N^+GH~07YZ3_xM
    zV7>_+WW0ZC
    zPt$(Ir4td<7U^d$luY@)cvBr#$tt^d`h&QP1-ZMDq^r4GObE;B$LFTLy3I8$N@Pyh
    zy!y<``K_UTeqrXwdXjO-Y0LJmUze;&WE$Tn^y)J=dsiYEyEd=jn*nbgF5cab7;`y$
    z@zC$=`@H&0Kf5_jk&`~!n|veXm03&MN#E{%<~hlRRXq3z*Y&^D*vFZQdOwJ
    z-w{Mf)+@3k3W8Ga-E4b#xy$8t8_FHTuK)C2U*8_UVg;0_C`Ht7J#fK+tdi?HKI|9oa}700fY^X&N^JJ*
    zw6AuZIq?1Try{(2R2726OhF%2_vs<;f4S+K`2*|vESIMl{A7{!It&^&aZK;VX32N-
    zZBb%@WM_A%MV24FuzE@SRsW}es?w(!L&YGWsu&~{i;~atJb_w;C#2HAXaCk~5F}O+s))f-
    ziR`l@o)FxU7_7cqsQ}wX_T6mNg>nqZl@&!2v8{Ywadn}p6ojGJ4n9|`hG}vHUY4xu6nmw1gT$A?f6KOBKnFCN>7V2r^u`j
    znb@$^Q|&r5GE1WO!AK1;^Q4i7crYZj?D5j8ufG0b>ja+%N@X~s9EOS+C9YY|aq~V~
    z{n`ANTlm~WDngH-_T_kU{dR-i`ELKgKR3KPAl7FV!NABygaxCTbs4?#Oi}LT-CvBV
    zN=uZq#kuCzq`S*Y~U(n&i`CoG2)$
    z`V#et9bSIxo4@w_vF@$j(LOysCS*u4L6E{5^%^mM$*R>0hBWj!&-T|1vLaH!;vFTn
    zMc1L@-x%M&naOv>q97&ocvU(%&YRl$jnwiwKp%HH>B2^S=FP0bYr3!Pa)bxkPJYmw?oZb#UhV!g
    zo!8~l{pq=Iukrr0T!dG&6;s}Q#pKmcp_cORsU@!q
    zRTZ#jAyFPEC9h$38@*JL_c`~ckoX5XE#03w@|ro_pEB~A93}XVs-kGG>-$qgwY}Q?
    zsiAnUc7IAJ(W~8`3X1e<_osloUfzB6ljEg+yw}H{^6_3Df2zkzW<08Rtm1>adr0jR
    zt7^yV*jq`PO++Tyk5ZXp@;yj{m
    zj2iEe52+h4gWO+r&(ZZ(H=zBv-}r=(<@FT`rmxp}`|2Cu#@`=>OZw^?Aot&I^wu}P
    zqrd;Tx>c%5mcU2l|0XMOUkQm`Fa2R92-W#8t{NL?4lGMxJN$#kAYVOW
    z`O{-0Nw1h9fd2#!qDB
    zyq`-pwV7}=w*wWo&3660H>P^#pB59@sMpAu3qN{yLf<9^HM)cQpZ#AhnW6gMzBY^%
    z4euS_7BS1319~uNOxEca#$L(n$h}&UJps&J>J&t=g5Gern@8&&S;x
    z&lq$~w-o1G*t&d5D_NNW8cB|-_qF9{kI~7QZMpMh-!ee(Q^yxfiEa4otnW|TY&U;f
    zIwbMlcuwJ@PD{=fIqX@#K4Y5hF8uz7^*eLY=SPjWn$v+zwtfy|z>4vcqwDvb{_RPd
    zJ$3uyAqjU^;E+Ta1TL}jvr7);+xADyDzpD_c=zs2Lz1|W*Kf9?lS{tblYX>*GUJnHUqb_E4r1#kW
    z;tUnfpFb@oqVe-HSFT&X=G`GJ!qxG?!d``{|E_CSdjP<_e)~@QnT`S$wMRg{V_r?Y
    z(~g)^R?=T9v7X1D5hX{p>NkG&+{uHQhgWQ%U}2s_>U&-&`m?(*WJmGdq&MwpfENQe
    z7_S|6J-wY2el+jaA|k;v9u-$oRNdCydp_O3i0{02HxLP*=?iH^**V3Ii_Nuoec`O2
    zdeX(w$?07xqyli}eLsi1O)%XVi{WU!2{adObzZF|Mtj7QUNhx&MvL{E1qF!&V
    zguRB0CtLQE2wsY*+pIG7nmYc@qzEOtdDrJFW3PGUpA;F?7DdA#dtNxX;*F57Vn|U$1UYp9;Yo5oS6e)?w?W&Bu
    zrjE~=7zIlUpbZ{-ZQf(qYo7ThMj($!z*nZnx7XD1*^^-8!s2|yUc35#w%6`Hdq9V(
    z?w^2`{AX#&0=u;&FJ&xBoMlh8&_l*qpgFKC-hQ^gZmGm60Zx8N-i>hz!|II@k&o|Z
    z^9&!aP+Uy?7VRtHXRCN=G9TW&`=H^K@Uwa5AFCMZ_8K#LQKkHB>J`$)8KPPbd*`d4
    zD&c4Ij2~-E>^kX-Jt>v&v#H}#M;mJQnziAay%K&l&-hVtV$bR8&e$vAXH&~Ew?AHDOs$@qFxSV=_Tk_1vw6mklPEU2LAxH6
    z@UwXyf2_i?iryToSRdQZrjAb@qlbNX%60AV0R={TSzOH%PY
    z2lj{|DbT-A1}62+_Tk}O4;MenvNXak+e<#>n8^95#T%RJkSfB_=&?2b@ZesDi=PK$
    zmfFMed05h%)V%d=!UXVZiRv{v9WP!u@TjE^Q_-XJ^XS>BB|kK$2p~>zG>IOjL9=^3
    zd)#`jN6Ciy>4h6xQyilu!RDez51{#R-HwzExO*SA1?ng@c-@QP2;h%e~r|}z4@Jy(z-UQp|&7p&jSo+go
    zRN{o4CBHQre9rcB3s%s{xP%rxYJYt5y9vi^&w@(Ipy=0^tYOVl@`~2f1D%PE(<$h&
    zv*gy~-iHf&0W2&`FK^0SE{8N&Z%ZGgB53I~>S8#OCm5eO=qSm{FUY?fxx3_Zk!E@w
    zcU|tr2s%ayLyrmZCQXC4*R9>Wb@RF}o?N);6)nhzhJLlVm4*)^47k%EC7lTYRFOcC
    zjMk*rhlZ0H0~Ud=K?*WgOI-}QhN7rEK?)nj*Ca#rIxd6+un}c2VL3u%^Z;lVr7kL1
    zjd1%sZ~(<%1DiV_xdW2>AC<068030_u1jdl*i>Ls
    z*wOe%B~v8SA2@*|WnB{{h;wR1lNOzz**PIZQGen@QV4w&KhdFDP80t-eo|zL);7ma
    zL4|>Xl(ZFi`30XP{>T>L2D;mGgi_
    z>PIZY>$;xDNBBXJmf{DIszob})J_agJhk|t0t|Il&Djio2|N~-?LXsfod)fy$dG~v
    zhEJ7vmjp#BSPzkvLct7Du|x?F!!bZN4h2yitF1-_=~7^EG9)+`sW63l5|>@U0dAs@2K!JSucyRAQUe)MAi^5P%AR9z>{)1k@);^(gf&ad=d!
    zQPzs>PSd~wmY-w~o2${_CuNw3*++A-FD$4X0_H`TuVrZW`K`>G*Jev5h5%h3OAI}F
    zE92Hj>ItY-OM3fG^_=tR-^wcTHNz||29>MZ@_S!KAb3g|o#Jvj-EPaVh6(_KX==$$
    zOR(EgmeLl7Okid?tGO51ojXH8l!{f#F8hXNXJ4^w5|t2I>Ttq!wkL0#Us$$9CbR-E
    z@|t~9tU#?Px!6RYG&*q13R)elTj#zQL-C{rbK6!$(>3`~uG4Kp1TJ(z#)-O0m^R^6
    zYsx^DrW3!hY;8=C+Ugtg=LB=JgB0~}(^&F1i;ITw90}u;VXkxpk*eIY=xl!hL^cb~
    zeCM@+|h7N4?0$dsT`F8fn6X0q_^ouww-l3
    zf>sEE1_>!ut6pL9o1jj9{(Ra1Y#?ooc*nJPEj9pNJkKmIz1gs)Ap{0H<`>zpKK=eE
    zIW&S4QN#f5L6Akt@=({6XMmg9=VZn+I+hR7v~s3*r&ylRf{?c9`LbD{5yqx~w89q9
    zmf4+oAJ@lA1_A;t(>jKzyRUR(w1#I|?Q%_!kh5l0S&<#ZA|Bqejc43u2(Eo%6N?>jEMgaRJWaCY8Va^l^Y@89~vnbr-AnjAxt
    z^D|PL2|%o-g6S%Zg=VxOrF>}LUN@MzNaGdMUt5?ml)`btIikD&n(c6;|J2`=(t^V3
    z(WHKB**7s1U4uCyh7nqhf7WrdBgs(suJhdb+|=h}3NY0w1uxU~mFZK*G#+L<7mhW@
    zYwCF1J_InkPclb8k0ixfk~G1wzl~OaIvIVS>{NeJ19WQ$`iR%Q8mtEiYK@K7t)NW>
    zaVkF{ExEB!lR0W15lPZQ{CCA`O)7Zxm}4csw8Qqs>zAldc}2Bp*Tvqs7eTKmi
    zra6#?#&c{9=IFlS)MLl?9G_ZG5g%cV+_k0w%w!*s&Xe_rK^uh~+1`qC$1hSfH>?IDtBS9PU
    z^7gds8<{tMdNER%Uu2!bvs8=y*>fYma24IWmXde%)5aB@bs{0l{nJYK%o{g-XYr}0
    zi4}RayzU&^^g!0U$j_XI-p4zr
    z^wx$AKdhfwdwI^Oj#sSv`t8b|ZT`ZssX5@+^!q`bg4N*h9i3V2I!Tj_mhInt!Lq%{
    z;)0Xp$db&Rhtl7Q`rNg-32J-5X;pC>@HTLRT-W*veC?*qmt_CZcv;CIHg=u0C^z%1
    z*wyZ>jp5DUZd$d7%w1+kR;YizcugXRP54Cxzcu?H?;uCFJ?OM&&kJ8xvZN14`1~uPMLVa
    zR!~r4FWAt9f4}&Iq~l^gE6Vc^fFP+C;;5TaCTRC_1Btk+g&)n&7#m;UAHd8X*2c;1t*ZOsGb0
    z43$C+o+}G7!I2sYJ`oM6;ROx+Zt#VO953mGFqzcLU}Q4N=88=R#w)ENX=D-pIN)!J
    zqK49w$hHzey#(AfhDIr&o}{IK5c6iy3#>+9H7fWN|9LwhpezE)BA_gM$V&fthwEY1
    zzQC0O0{ovX!2gwdETAj`$|9gF0?OhptM}hgXBE(;0Vw}}XF7wbDipd0%pYj!iopkN
    zT}3js0%#Dp`+6B*MWsGi>J^BTRfG~>Ab$@yspJ+x?f@X%hp^LCtePC2)1#Ufm-WHR
    zuecEpGP@AW7Xg{ZXY4&df7xJ;2sar}RpQf}3eSuHmJ5j!O)-hhTQ+T!U=V$XFdPaY
    zOLVZD#me!GJM-cb1;WRg%HNZLHI}
    z|BRJCZQrtLN;e;}j?_&YzCbkjvy|WFUQ|}0gyW^@3W08
    z8YIaWk^Z7$_UEbK$H3+BxetdX0u;;On~;L|0yHbWtP)mpjc`F{#7H3a%Y{H4l6(;T
    z15(J~!NdLcl0pGg{0f4Iirx9IS&av>9+Fuxc;TBrEa|=P=boImh+cr{UQ)gk*Lr}3
    zu3jlv$h$A&y~g-T_!3BXuW|Qai66*!uf}wL(%p*;;+|~J_Ll8l?dkp`yZ80|$#pN9
    zigbTc-J1r(pG^0LxA!N}z1#iC^Oy&Vs?Pt2G&gy*`;+C~&+ku?djZ&|`;+5d*Y}m;
    zg%wiV3*p{Jh8NtG;a>B5OYkC(1owu&_mSVls{Hn9{a2ok|Lt=Hu;Wz@1$7tvUtbAd
    zQLT8PfU5#F`@T^Q)5{BC{l2L7{?JEMdvgptB&xk>10E68en8@d`=Z*r(VwX1y@(Y2
    ziE6X<0m!*OQQgoBi9FqpsP5uL@!(HXzvN9J;YU;t^9F(UBdUjZxBC&*0~D|O_amxX
    zv0m+dM0KRs`lS02)uQ+M_z~48vbYZt?<=ZZ5Y@q~)oY9R6V;s8^&b({-t+{%rnV}o
    zefQJ9!NK{rIKBV+o4AL>ul^f=;s4Kr;lInD5J2Mx3qb&l{~v?fFL{79%!^eXLKw?b
    z8v#NN;AOxsd-!=(Xgu*g)W1#bP%u3vSS;ey1`iwKBOUUl0Y=#=$~<2M_J}t+nrD2@
    z)Rvf}4(*sjoI3uxs
    zpPAntEwtR&zIf<;lyjtiJ$>4KW7~+vwWC;Sp8G<$RxrPsclE_l$?0u`i_Wby3Io+U
    zD43Smu;1MEr|gc5-#&UN!LvhDVosTioOJY#)nPp~wO-Wg?)2`xpBjIysxGM=tpG=bhV@z0%QqcLnB&Y)Ae7#p4;73;A+zWEz3g`L+R-h(l
    zl(d>-FF^GdgVH&6+|@fzQLF9AO+dI)F+N&0*K7ams9^)zC+gwS^}v)LQi#|QnJEkE
    z^Uas%o@+YAk%e+l3dM%xm>aj-vYl^~uJ6g2)bRx~VkJQzo=~rDLOAd<@9iL#m1{4~
    zPFwfUuW2_Y%F~@G3Ud9_q_+{*(>e;=tJm$v-dp7vKQmqr2ywWy6-lKty}N@XhLIXi
    z*>v>Csjo*zGDA;n(Sx>+rFpT>mY-XqVtUBxlSeM9<8!B}FzFoJ%%ESs3)8N`rL!o}
    zR9bcG-nG7o;iGzV*8(CPwWX|~V|RsBNTczY?p;0Or$)ois?wmsn*+xyFzWXJkAxLu
    zi3RT_>Nhz_YoHCX3X(1|D1u{Y)b;|JL>-+!JxT@b6jfg?roX#-=Oh*`Yk@;iFE8tW
    z?~Xy73Y3moK?YRYS^*gOci&zNfH%PiT&CWD`s`JNa;_?GXOSW(Fjcs6CYTN8g4i+?
    z@1oF|9C%nXbU5S)0asef!cl&WXoE}2f%hxG4V1s4m|%ZW9-ro5}zVxVzZL5+{8
    zq#o+lzo*zd^a=UXqY*gcArru|%{x42<6Z}k=FJ7af#MXA)>{R-|AFH5j8+w|jQV&<
    zdcsF5-@V~zOvhEY3my!-YcNC!lF<|$9}BK*h$Zj)@^nCgw`7c~*ZS%9ts6z%rB$dZ
    z9N`4@~F7qTDCz?H&}H&>)eIR>)&HR(O}
    zt!2v>O?s|r1trPDqm^w1H>P*%HtS^Z`W6YN+~4=?+Ihf!yE?jHT5Q5oqZWMk$KIbl
    znb;F%1y=mw(a&4cW|%lGe0qA`#KuQm3lx?yjB|T#d`3dOUQ@r^myvUE^ZPGVsM&`{
    zZ*ix9^O0d&{OtU$`##5Vfg<(OEuOijt4emm83&Z?;+HFwth#94&wbdw0dHH+avxcb
    zy?DyGh%?YV4|wi8e`-Sg-ZQ>ATx3c6^~0BHt19Nfg%U)8l06?ex>>
    zSvj}Vslh^$)b+KGx9vN=`^#xP!#x(%!=ulYZD(PmNz5Y0Ujt6N&;9njEAK`pb#(sp
    zxQIsmCM{m|)#~{#HZ|VWPFE#b>XUY5v;qo_UmagYuW}s?M@7Bvsa?+1ZBLbd7%oqA
    z74G~eVF^Py_)=5_mEZB8wSy*}7yTKwo(?&aBcM?{7Vjg5ZBTiM2XGy#3wY6w7`8#>
    z#V%Xs#0VKg=PE^(uVEWhUaEp!MlqKj5>9KeGKQ@>K5LSS
    zC(l>Pu=R|e7>;-)+@gd3+mI
    zJ=(dG!VPiFy1n?=HmpZ3OpJ(Z+{`Ze>!+LIfN^ISpQ`hW&
    zd>hs?_heO{Zmfh2Tk+g6^`4or_Q+$~u}k9581Jq9`x&RdX|OX2zidG2iE6no~J|VIE4lXnhZbcBX(?2
    z#r0)|1Aeyfh#gy~HeVkD3JL`-o`>yN&&?&Hl@*aa_^2IQaeHHdK8p+@Mg6w)u!B~;
    ze5#6G9v)k-sXqs;+97?M%;}R_b?^Q74qDIk$4GK~yXPj%u7rbD9e-ntVs1KU`o~{a
    z!a=K!Pa9{9d1}J)UrtuaLF>7~cynTpnd?pzSHeN-S%I2gH|1%GR7F+
    zb;_E3w<_VFRma~LYlv($a?$s{RKh{)89z=h#djO`_R>l?Xe-9UUsb+
    zJ*^-Bfrf^PebVcuyp%8UpZs}g?;a1D0nM}M$HMh!XH~)Sih>Z&Ltfg7qpfh9>W+WN
    z!o7FT3@if)zCPc$>s`A6de;~cm*CG&t6n>8oWw|R4cm2kY(K4M^jJwPTX=cg~6I@S=?X4Infe?7LJ)^p?IO$lA6etj_OvHi53xyOY=*Zy!$
    z)wPf3r>%HyQ)2fS-yJJ{TtBTk7%Voi9ba4V^Zv*7(|V>JXVBN}H+9+SO89C2E(~>Q
    z%EAVc#0)!8SW;8#;B6_XM
    zc5cV9f|3ml^+HXR%wfQd?Ae|76wfq8SAWlTr(xsKmh`C#LA{ygS}pORDn&w_l@}Kd
    zJYMi(G;Jc5EQyQTSMsS4#z^cZg+)y?V9y4L0?&#qezM)(GrDb~cmvTqFJm&ri=<{`
    zit`OVOy#~{bs8P};@+$>yX)+iP3d+;S4Sdt%Zd$7+ZTzPO83B`K80jDOxyf(s>OA#
    zesAZsQ4|FT-@0e)3m8Sc25Ek}X@?j4MoEzqK6O}Uw#ZMN1SnTdH$1&?0+375!#sZ1
    z(oeE3cAz*NlVkg+!S2HK4Z&$)T#=tvm(!>{W}eUgVBG1#CG8Z`=={Q$jIZ6yTG5Pe
    zI6JxIlSl?^)lBNm>@DqM-$}{Yvt;G1lC4HMe&O{y+ur~2X4W?i5j2(1W8=g&ye?tr
    zwo_-0>>K$M2teXqUU}fu+4XNWrfEJz?a@pQ;|zq*taGojB?+_Z?~gqUDB+Nh5?nPHdFA5
    zH0*l8r;RCQQEuUIj-+cdg?}|pSeBDIF?{G1*Ovx@PGSl!KTkFJ(Q#nzQR^=)G%Sx!
    z1s4Vg?C?vLjDoCAI*#Nhe6+W*A{*ys*l)k8gho{r2z>N9S&QPP-*%LA=kx^drtuLH
    z1DL)?9B%vBq?!`J@%TuuW8mL?>cANboUyqGM-VE-cy8RhU?Gk=Jn)7xh-&Tl$%ovx^T8<2SAY3&~zKZD_b
    zA78ZVnN7A2W9ek~k6I>-y&>>a+@!@FbqTv2E5imBU2iXOO*a#IE7@uBdwJocdkY;4?CX7CwZNJvDX4I>e-Eoog
    ziq^zP5>aJ?2TZfFWni{=Gcu1Fl*VClV==p9I3bz$?8be
    zDJ;EtCo54WeO$C@q-A?kK?1EC!wxM4d?D5Wx5XvCIJyDDj=Gs2&r#iOXZ)EvpW*8b
    zdNq;bTiF1Jh$lo=Pv?EPQChA99$)O$s+j6&MMzl27k$krk8M`p!0~Ks`1XTm
    zc8_Rt_trr+!x`H2?Anr-Il?FiZ95ogN)`#BV~;MaNB|S!rog$t>IIe~2vGv#2q^WC
    zn8wpaGAGz})Jr`K-5L0#23PGd&_({=TEi+_76?EVEJaS-(q&8Mv}^R{
    z;*qhGBJ}i}V|A|tA*<*P$EUiIkDWeo{LIF#y$;*1JVz?RZ1=sT2<9@8nnoqNS9W=}
    zOXogq!+RZc*ndu9*|+X@3F3m7ELPOsalZl%5P-89x&wx^_&t+6&#O-cz6Da6oYIew
    z_9n0r+xf6PGxy4i^elj%R_xOtE<>b{x_h%U^~|~RXOAqDyB{oFcCK_!%xv#I;1?03
    z+pf#M{<-6~A72aWcBEk7!hGw;3%utdWKhFox~3WpVw9N^dhW9i5PmGOeB#}Q)&Yn#
    z%{_(J86;5SbUS1lOw>Dze5iZ(^PjeN0%|3oRsw1T!Ri0h1N@(%z5{9{pjHCkRs!Ev
    z0^e2wisqk)T^Ud-l~XGf2t$7d5i=NRJuVNXU5PIcVl^QXIe#dvMjAU{1ciq{6oYuR
    z+&TwI=ExsF=HMgEWopWgh~n>H6`#=uDGwNno=R7>;8a!-8htSqpAa(cCM&^%fth{p
    z3urP@7H&*2;>M7c`0!Xyt89*L+@wKbgd+N20H)GZIKFX8GAqT@YxY!+ZoOJZDLxp0
    zsR~;|G+<6Kyk48$qo>c9HKt2_vk#sjYczq=l@|?(&7XPo-8J8=Sv0z>FM6XXl+yDi
    zP6%(<;l=m2o;gv=?(-|w!mE28#%2taL4tw`xQJ%GUSE^p
    za-9ISv&hPyA#YCT3x{I6{RkV^4+xmqWU;Ogh&ugZ3_C=BG
    z$8!p!;4Pc#bs0SSgXK%7_D=GBmbMHla|&`l1#`VNeTR&DsY9IJ=Uu0&NR_ODS_@7v
    zMkmy%Uprj(ech>AyhNn9V4q;=4H7a^42sV+Y`jE*A4IH%EmeqIRoSQ2N(0!jqC{BA
    z1(Ku!kWjr3fT&eL!7w%+KDG_^p^rR3ZWHg3Q>ep3
    zhSWn6u&Q8D2dhF*#kVN&-PN9n;kbpP8b|EmiSJ1%QBjNP@yF-3?zT$C$hd^KC?mGB
    z&$*ok@3)$Z&55XgYW-BZw)IVtkCbvJi^2SDWM^^4q~@KTA2o99fM#*N*GPu!0Q{>U
    z$2RRcZ2FRqm(6~mxsMP|y{?{0^f1+H_uT9?fA0GA>)Fpl`P|1<$Zw=)^ASzEjQZqw
    zPR98^J{{_dF?$u#A0_&HMDu4}Uz4dysV_$QBFJ9lQGkIZG&bxpVdXVjQS#nZ!|V9W
    zlFV@+(3V9d@u{KjY&dvm*T(t1BYk?LgTWYzMwBC(^cnrZr(b>j;jkt?=fC3odV@*&
    z`{aSDvv?yyRuk^{C^{b`$qF@>cVEpt)aa$;08i-!CkU8H&)#{U;=EuWpAfQq6`W67
    zkd*DM-X3jxpxnHm5!3ytHZN$zbbpG?=mqWQPpx^)o$gPmMR||+qtd*gC;cfj?{H_@6JM?&p*C~75d163XwTCE%#7%JtrGSUp@U$
    z3SK+VOBWSZ=pwJ<`;aE`5l|25A&a-1@rV*{E#x(!s%2DBa$g5M+V(&Lc|AnBKmFq+
    zN<7*JUk-e)TzP|bY*!vDRsfuj<>7E=r-JEZy>B)(ll?5{(
    zCREH31yNA}0l}OT>Y{5x1=FssKJ}R+uDa$mV;~I~CWr3n`2Xtm0Jov{?F{?=u5WjK
    zIxtk7bE|IMs&h`AI`y5sD^2>wA_b{EaEw_(r&-@vMRVoe`o`RwU6W+jb}AKU(U?HH
    z^^M@z(_lJ%Bb)Ih)99N9#>AgS-;6W8P&$1xO)~TEt8Y^9HPh&ul=?LK<`gr2XBvHT
    zuo?d|jlQWiedWe9`UcqxcjITK(>Id&{nO|h1Y+#w-&@~^rn+?c2DkKf^P2SylnO)y
    zWR;13Z-ry7>+9t2+Y%X|>g@R^v4DHEQ0h18BKBpk7D5(H)4beA3vs4JouY-ZQe;Sq
    z63R-EJ=p@9+pU9Ao7*K`cIhB9gl})%ZXINPg>*VdG>MmVI;hMvg&Wi8ppoX~l|}~v
    z@ptzUNvDI(FpGyYI_PY#nSbAX&za`>G&*Q1;ETT6nw$`gX>`y~6FTz%4r`(p%Jl#A
    zUjsO-130XSjOa54RMvuk5*Tyzc~@R>;k1!n!XnY06oxzK+t3x<_$^)c
    z`b9A?cYFJ3BR=Z6T`Tb39ceSbvK9fd&096%px=$C)RIt;R^e(*W^0#qZ@cM$EiUbHY@FMz<>{EfJXyLwx
    z_iV~_H{CX~(o5-zL#|wO<87DyjwE3||JnmI8|7!tChR*2o?H+vT)0}WWk~{Ae#Ub;
    zCyO+0Fbk^S5^YWjVP^^t?>kRZf+D+IoWM{<^9xD|-i~N+5Ku-70)Su0J{z(8;)!Bm@7|Nr~WP
    zaKi~^vO^LPndwS4UWOe%oZA?+RJ5>v4&ZNqdtgv8m3ILz{&Ulz7p|EgLMG942-GSg
    z3N(`5Q}ALlGAkfT+~p)tr#$Dx;hXG4$TedC)dHy*i^4#R#0uFBwF>YZUE&xSH;Hi<
    z4`?17CkhnJxe&AIvb$(RI6I9c(z-BU6=O*9Wfelm^KQ7ZtioE+QHZl02Cee&iMWvS
    zOyB@j%Tg5bcZqh8yPA?fzY78c5D#EJkPZgoqy-3uv`1H*02P#ddNG)3nsQOB$nvT}
    ziF7e9QwXUxaDD+4trDDBynOEpwFpZx-U5dUi=Lra2j|cc&#fQ|RVpsTdUs$%7?(?s
    z9Yw|x2c#t#D}oFQm%bq)&=WsLF=#|lSly%BH3u+iDIPDvs~(IUM3#zs(uCi@npR{@
    zBXC7v>=myz!OfMG%SEh|@AUzz$i@0gWj)|$OYEf;-b$^^FIJTien3%+vcIf;)Uf(;
    zHzK{0BI>WIlRxH%^)q;xm;O8WM@4cT@l1Pn*QU45lJ!5eb#->fyPMiSGx!&K{hs=o
    z5#z^=8CIbZ0l6E7kr&w)!%w-XIW0TCdhp>7Ten=|IpeOo?re{~wDk7NjlM7Pm6eS<
    z_@oPFoqhDUO4aE5-rQ9icK+7^v^-)(XXCMcn_c-fwnQjW2zT?M(yH1iXJ7x&BX?bT
    z+(>s??qxk2#v!<$n)KKB-Bk!~-x8lEI0b|Iin97)Cog&C)34sTd*;DjW8UoD_SoBoD%45yBGPg_r1RlKPKR^smNd3
    z_0a?;&+G_Y4!vS?8FW~v?w{dtJMQrp6dDJ}_1y|Aoe
    z(4_Njer(0P3yvGQ3;1%Co01RtXv?LT;PtB_OSKEyww+D^Jm8dX+ZXtd?Qdh`3a3Vs
    zo&%QIT`_v{nU`HUbK2Md4vBk}@hyX%4!wPhXYh?%HXTLlt2(~ExW;$hn=S7gAmMK9
    zrue)P!D+AqJWnfY7&l?U*g<}hXb|kM1?;M*n^#tCXuKmJv6Eg4Z+P>awHu#5
    zU1KoSx5Ve;B&c`b0BE54yk0jJO;Q_wuJ8`Ociau{tXj3=jG7|8P^>@YD3|O6M65&cF?Pr{L4tK5%0(I9dpe2`(t<;2w(GoGv}?|AH$ol!}7&xfuQV<;Z69r&kK+VzmMVl$v-x{340Q0
    z7GA*pFuaZC=X#M~4{L=?_x>2(gc%ThIM#(&PBFZ{>677|Y}^k3_W{Vs0m#Yygq*a>
    zmc4dteTS?3A9;lWEQdZ@*kmpP&k`V82A-wK!v4HZ7Iu=~fSkrc?7xMbTuVNLib=|T
    zSlEPp>t%ibec`Zie=KaHeFADN0OeypENsHRW3HF9uJ4b9P55`tL;4SYdBgr#*arUs
    z-RrKe9ob(C+vxjzcOWqCkdymwVH57{^SzZdQ_i`e{}#5veYwAG=*d^^hlQPNyL8By
    z^X~en{}#5vJ4XvxU7R_g>0z$
    zX=5k(0dH;a_us}Q{7sj`Y>;^5;U+@XFtNYslZoBi`2m}ugv{%iwO>;gc~BDvPV{r6`R_Vu%MmPRnJqdg(
    zK^dC-*`N2#pKUZh6DRgisKlb~k5x^04b)A7nwer%_syN1Y}>#qgypf1JA0s79vGHA
    z4(Wg4bm&E?Orl%M1Us|O);8(&`dPr`6$M$xB;VuD?whrp;>7^&PM$bfgwOlt%{E#;Ux7!819FIkUy^ZsKmFO{3F~Ic6su?+
    zeLwu!gn#`k90B?(2anzlf40GYA(B_s*N^^PKmFN8-!Bk7-f@SWI=kQgY{I?v0;#lO
    z%8Z*H?zcbN;GV5iHk@+xpFiujKRemBRyX3jd;Z$dZ-2JIJxi$@dEVV0_uHRMnAgn|
    zs|TNa%}ZbR*Pm@L&r*FglV{zwazFgpgn!LUP4bVPdd}Sb`?C#pOn0$-$bkp#hd-O}
    zuO-4laR+=RfA$xB@@FTxH4djrO4c5C_L7Vj`($hz?7#=c4GFlh`)_O~`GLU=e)53+
    zI_?mvI4OkGb79k9M;80b^pXn1KJE!_xLZK)ig%);XR(bcAN`tOszTKh8LH
    zb!hpplJOr#zNn@12}Eeq7w)eMPFUOWXPknd==$pxUUdjZA++L>8y34H16!1F
    z@eF91u%(QUvTBK(o>SY84$WO6)t_XkTGTchR-th!CM0
    zG){AimZbrR1(hsKg`ZzA$nbQ2Z2|$
    zIT(8ZrK(P@#AQ(p#8tN{C?45aY!@i6CKZxVu_Z#I*J}_Y<;B0rnz4V
    zf9w^Vx(!8>?&#dUK=$6>vhy;nSd<7dwyuFqyHY3#f~FVJv83?Nt+b@VqqAAQ#L
    z(rCse)Am}%!nOOa-57~}HW_2*0FYNL)5ZytKMKa~E8|=Wg@YwL32%Dox@h>_iM$gy
    zVs_Finwj)L=hquUE6T|EHFq}mG$?xJzNQ>n|YebxXyS#NnDV$Fd
    zMu(k+p~3(`DPMB(auHsKlerR}m>jr4YIlj4Xc%${AaImZDMfu*aS3Yro3M5NW$zHi;s+S1h8x_05@x0+87)uPc~wd{G$
    z7NWkn`8V8p<1JU;eDkeS0_R=Tz-vzCteZ_V433Rx8R+lV(fMZ$KGW+jeN0I(_UqWQlD0Qi3c
    zKWzU-)xvd%z^7nb1ZM;v)5-;TiFLsyWa(Ys%fi7zrIEr2W-3n(7ZF^{hb2XDY4RSL
    zEuzj8(1Md8>54#)03U*AAv2PR#>J2z2~=TjI7BzXixE31V+TFS-a1Ni`mX#X*cJQp2vdJ<+_9>jFMA@k$nrnA_P)9x3wfzd@FgWsy(6b}1-uZmJc2@W&GtJJA2CHl0Paz0fS1;YM
    z;k<`~xA|pxXIl!*dxIvo$LF&uB{EaL?7HT~_=T#({}49OT;Kdw#hlLQ6auueW)~;E7rO1`=((jV|C5>KhHdW;8@@Tdgu`0qkN>%4
    z?vs)E9!}h7paUmiOt;*!{Vz4r%klSzBiBXQ-JzdOxU=KFN?}-Am#IHDZ~d^IKJk-|
    zCr=hCZr{{=TiyIk-yiS(L-acn&GlQ~A5LrYR(JmN+Iw3z+%=RP`Pa^`UvF-@!$fob
    z>-PsZmpXCYyRX0g&=d_@lJSqc{obpWG?-}gAq`Fqmni)WRbvBA1z)}-FsN=cZ{I~j
    za8(hpMnfzyoR4;5Qfsm*NSvncB7x*ZQd_5;S9q6LTmk?c(M9WplHj17CK?w^ddXD;
    zw}-&1n5+`bxOv0~?S9VwEx6x4*MMdkz`FbmKwb}MrUA_~pqU0VlSvp4XeQHO{Pqor
    zf7c!kXr=+pG@zLVG!umJ`k#26#}z2}Im$*)nsNCx^QR4UrvN0b|DJ{$1Zadf!1mV;
    zJK&Hp<&u~JBN+Re%vyylB)v0l++dLuRZRgqTtAl*Sp=5jax_k$alsPspK?koLDl7@
    zaBq|xFgL-!qTnLAlF~|;k=+0RwBlA(3=uN`W8AAAJ;aWf;CmVf|)p3NW?p$V0;uY(LE7lqnw6MO-6Bj0aqcF_C7he8*lu
    zr0W&0gFz#tpQ=aIbPa)_DbHA+r2>qXHwb*?!$%FPE7hcwS-iej!8$_JHltS74H`6d
    z;@H6zdo9;t5+XHl(@-p}9em)l8JEmFVfavUqR(u*nNw`tpZWE3P;!kn)Tpfj!Cq2~{f}
    zbkJ$nKk(GU*Pc2&6^Xfmczwyoa952w==9n1=A1OvpE_caPT*HDB9gnJVf6Tk2Mj8e
    z<&;*OzZDu`!)$GNBA6
    z71Op<#biQ2Y)q$?OwTtfrIuYv$@KhvR8qHMuHB`OT6QTU)1#B0asZ-p7iQ+a5{z_T
    z6_bL!*_ckjm_Frh_0qIQy_ldd_f;-kSk`->CU>irohH>{nxy+GmaY^`(Z+OY#l+v3
    zPN|r>-w#snx3CdeVD{RV>;zwu1}{rOyiqIadgY3?`u{YExXi)ss7(p(xg)k0AJYy
    zpO;2C01{+(eLCeJo9fdk2hsHWbjkt8cDtXymvTtOON23-+^p=<4aoGmo0EL8zJSXP
    zQ2o=$nfp0}X*7lzP&b{%Fk@`)))+m#8Y2}jb6<@CpkLF>N~bZ*&F`x*EGhV(=`@BJ
    zlrx>iNWuM0qcJoy@Mao~QEtK?O{X!2n{jp1XpF=3J?o<}jm9|EZ>mqDF^=|_>eFb9
    zLqt=38jUg3gq_=%Mq_wQ>$fqD#y~3H-RrwCjm9ubj&vHsjLF=XMq`+PQ`2b-K-=tY
    zKb^)f;|~8P$e#i5)B*6+F#sO@clfa+@D|bk+@Fl-KY)1p=c>En7+nG>hD+dCQts}X
    zujcYxDM!o|a(Qy6{$EwzL;BgWu-vL71k#_@WMU%ttPltWdsDEoNOi)%ehTD(>u?G(;Q*y-*WlE`A+O}>%!|)+jZtFOfdp_2-?i@-x^@lY_
    zmwg$3xNd0m)bE>(VOoTIREM58_vSmUK6mmk9nF4-@YMspX}is>2=w6hLoZ4%2XPZ=
    zFn#*ZKOa@~xA;9YB2({-7`#^mY6l%Z_u*IHefGMuCU`K^9{_Dvn%=c~I<9OvoqRbX
    zJ|Ajq-+H?+ef5t=)qWYjRi+(s!_Fjg`H<1)-2U#?*6&x&o9s83d9M1p#Jh*e4zH>^
    z{0_$p!IxGU2<}zBZT_mJd5{*6%-y#|w98hr+Q>lTsJ?n6QJxVXuynpWR@`qIxjH{I)cF1Ugb_zTy>e>uMN^Vn@uwf2o005v8Bk+H;HU!9LQ=^RMC>y>@Y00yFTUj1QYX(HciwRhhG#}yIHQU=
    z^`eVr&R%%BE*rcAl~Kkrw@NV_!jP5pB`2sfMGj=Jq8QQPp>Riy!R0-KaPtfayml8Q
    z5gjjw(;m>TSzsk%=5qz{()b~`%%Z|kv>OrBoQq?5nWYfF4@79qX5c!vE+nAPI2ZyV
    zqYUZ21q+;{5`z<;NEqA_U}TEtajVeEYoc>CcB+=oQYtk(w+B`68oV`=~}_Pc$&B
    zkuMJduRzE_=l{Klc7GZrO5nTm@wJn$Z76amR8>{PT+D)8sQ3~-hx@ISCk6L{fU3L6
    z{ciXafQ8ZM<|Gx^rMdqQ4G>23}8
    zT_wNnbjro#jsolC-Mozh41Er7h_1FprNnU|;S{St+Tbr09MHIeuGm~|omCVUD|iIH
    zgjU=JrYG^-*q0Fnb)KGy+^m6zSJtOD{_r%F^w1sa7^f+Qk}!v^4+Y~FY;
    zz}Q0C;M5HVXM&I?t(Q4Y7NFoIWCX<;W`SYFV0i<;no)p|pUsCzdo2qq(7T|9F#(jl
    zjCX6)0SV3PI+{~C#YZU|Edc|*h}T@aP?DSMX6vGIS@xFIH8j+g>9U-Q<`{)_A9d=f
    z$By)Sjy$6b3QgrI&OV~La`Ne?o^YVt+sn4arJB38Zur=7BkIbuJn1Ku6Uwhz-Lh@d
    zi-*>K9$bjrq^x$~wwI5;diBmNZSPElWX3_?{}RsNKft~;+pOjm%{J@5t~^K(Kyix%
    zOAHIIZ#FA|@Y*@QlxPzp&EDU&S%2BfW;KAr=9glL7-#rEed)W+YBV~}Z{Q=Qu~~om
    zJ2op}+dkK?C@O%U`eU>v8Ocj>y+-TjeKT4KBZd@!s-giM)eoc9c*prb*!GrI_t$78
    zyiE(-ZmqgvaDR-PDc^2$S}&+D(zYVcm}t7$lX-tvAMtx4w6
    zL8H#OcjsJB_26SJeYn3yYqHM)
    zcjfrwFY2$+N_e*c?@+HDJGtLRtHC_iC-7QnO@EEnWT*X55`cm0r_pNg5|~3Qr2ZPM
    z2JdBFLt6CDXeFFG=Mg|<2#o$2tw~lN!D3eaN27I1iqT5gdIg4I>+Z2yEs5^mTvg_7
    z+tsYJ2oP^N)Aiq%W{={unrv3%eRs?&g%e0J+pNF6@(|IBK1FjAM4?!pY*u4BCf5ei
    zyZ6~4I?(P{w00(X(b>GjoSwIrI!LJL6F
    zD0<&*R->D+ge1vZUf&O!)#zo@0=QLb>qqp@W^MidiCokR=x3ls5#hJT*_v9D4O4NK
    zyY)9xvu+k(2npII>095-STd69FVHw7+`=ULA6&0{o3Vs(!v!jVA8
    zptP^+_3xRn$*->RK-@!%#P|AH-+ZsT7?Hk9l(GyD>SukkV+rTFSqdC7fH)*Vq92B=
    z@s=0JH0Ld=9nw$lE8*R6A!7EbtA>v5r}x$9^K3zPj~qAUr2ctd2`g{~eSt$yzWmmH
    zdS4CR*-ClM@s~gPT7SK-NoK8P*f~qz-`-#EtHC@=tsgV%zAt0_^u7|_bu*>fVQ1d*
    z_QrmCUkUH}nPOSpF>@dJ?|yn;lYQ3Y!1xpA+|*C+E8$&pKJv%a9&qIJ{(4^x=9w~0
    z>t%Iy{q(*jJFT(|BGV1LO{wqRSA!Q&%w#1&s_yc>e$f~2tHFCd0V2kgjm&(Ap7?Fm8L~~q
    z7uoHNHAWj>ibww;*wdP{`)J^FcJKdLqW0cTNR%mtV2?L;*Z1R*X-!qKP5#*5a!q&g
    zi^@QNu_}GFbB&LOl|vwFu=&J=fWG-=Nn0DB^?+Zas(tg#_D(pKS2efR4?DM+Fs_-Y
    z@;u}MI@w3x>`ubAZkEPz1UIjf>JwZ)VO~6X8Q(L
    zIE={w(nKa*!xXRy*CgY!>U#`JvHT>*Ar6RRWSJ`nGg=1->wx{Vj9AGnSrcoK%b~QAP
    zlNFP+!Jkiq&zxm(qz}&UtF?&y0KTg!xIDm2B?6rY2C1f2lc{4~Vi1$6A>
    z^ndH9(-|Mm19$!8azoj_|C7t+GNo(@-aYm2T9nnIg8}0w!J|>u(MNR3fzLefnFm($
    zZ+|r}E*i%y&b)|?0g5;ilE}hZAO`@cOWEwKhyVeH6M$kOm!!J{qC1Nn1PtCzByonc
    zBauxmI$3!!SgmY`A;Jy9u8wKLHXT`UDF-XLid}p!*(s3MQ6lJ|1=uX6m{pi263Zkb
    z&7%WA$^vrVB3dd7UCCjRPd*K_RyLb)0=2H4MR*hP)go%h<#bY3^as7BvwKO$;prlN
    z60{YMCrJIIQ<+dGapcuyw$Ki{(}mvgIMdX0TquPOpj;5hRz6O;w76gdlT8md{VdLS
    z9c_#-eimn5%a$YW?f)j#F8s0oYtR`a7_OT@OCt~kGa-}f0e~Qa&hT3lL1BRRv$5;R
    z0>E^@Q8PJH7ia{?;RqUsh{$;i_(AgSYk`anph^a;0wvp=@Xa7^IGzNpLqbj@14MEw
    z0?rt~Bm)|gwR=!QYpMk+Ujk?&AM?;UF6)RW5z@OwT2+zy8W=Z@%#0L8W$>J3qKYCj#xR~%phhIWZ2Md>fW}rzJBO+
    zTboXBE$!?G&M%SbKG}Y?Z&~EUg9il;{!8pdgP10Zplnm;A5>9s)jZw$NY(u<;rON_
    z?4#dky4w4P=rcq86f-Bf!ytzHiF2JE`(?81U|7{(s%W>gtqXO%sgHks`<0cCbUZnh
    zlQsL=NRrr&;GO5f-^xzElcJCz*KtGp`*+9NuO0lwwyVn?Nc{Im8*J^jq6RT%bJ|_6
    zZ~cxfnDA~-xToX2!OOZnrB}r^&wZ!mD($}RKaG?)r{`Tj5n?o8`qIM9-9M^q#jJam
    zzq#{;!OL1d^p0E|`tFnFE8UMopBVuwivGDf4`y8!VL+N%mbk<%vP-tUH+*UH
    z=PGl<)^K#wHRZn#KR+1P2kJUI34;YI{Ra-|YANx(t`Co_IfZ+Uyv?d_lNT;SnQ
    zbj#JH7?t4)HSGE5rriwqK8W4?-CtY3UpD>vFIpP!uD-qXVF5GPzbYtBU%&l=*--`#*k?^7OBCGLhe-#kQUqQ&w)w0=Df}J=iY-@C(Hll?>YPyO2)?mGCxEn;$so_qwsDQVs(Uk2wBv#
    zM0PTQ0Nv%*kY9iUe5NE931V+O!gKKoh}LkHI9Pae1TXf)9^H+PXz&Y8g#TzFi$v3!
    z0=!HoN$0~koE)jo<+svEChw*peIb5H-g<-zI$ds2+r`eQ`0$PqlP67@dekAqMju)x
    zx>fXY%IWawBbHq
    zDwtgeTYKCK2An6k0*An_)By+*NIrOWkcdUfl-meAUkYkp2reAl1QLLQ(+uwoxzd#K
    zwmrDS1m`-E*GB-!hZNO&jRsEI;oh;Ld+^>8^vKRsG`?1(i@{w%(k^@lbhK8DQFD`JTzy=mkDqs}h{F2M6arI~PkSf2LN->BfZZ6y!^i>M=?}>9DcK-`Wz3Z+`Q(6H>t%pFrR#
    zoX5Ox(1@v5e!6AH-=4W&;I0h^SDL$K$e|bB^XwbX-hI)5-jr4vFqpWFi5t&#
    z2TZzX$<5czI$eyyQn%YVq
    z?uDhaqQV&uC_a$j3J>y|R$AM7V8{N1^rYOm+AUbZR2$_Oehk#!5qz%akNI(Knh{0yW
    zG-0}>*0&;FtxU%e5*QITF3DDmj4;oF;%3Qw~_BxXZE^M(N?a4*;fsVn7EF
    zLGJZvd&$i8YpXe2%*3jZ6n}O7ph2~z$Sh>;=lbU(4;u1}|?O!d2z)DE+fG67gN
    zrc+U6CV<3r3aZvrpH4lQ0U*;UC-d{usV2AS`RNps34qbUY}!{XnE@WtDJ9eAX-ub*
    zOyiSAA*JApHt(yBta8ZI|8&a8G`03sMO`U#I;nKbGv+_1WS6orzx^(y@>?itOs8B-
    z-*%5`Y2K|`OiRWq^TCu3+iIq;Nm=;E3I+bGTTw^+gVy;i8PD~5upTLFsVU}ke
    zx#4{@3beDCJDo~NL4Zu7Qe-m%Vj7j=Grf2^l~Qj)xJ;)~CMbKpY-1Xga
    zG>WF%{P4y!iYBE#jiND6w{(ieJY5^pC>q(x&HQ>>5+L~B6zp>p@GBSRU6mkzkNFjU
    zMkg}kBX_}vCgRrENHo6ppV4?Uh6?hRLEQTnwvnR}*0evP6PEbmtalQ4m45}8Wo&Wg
    z!bB_{i;Xh=T%7f8!ay!+U*an(8#Q?Jp_3+#9$K#D$R8r)NIQPh`UjSL(D`8X;~juc
    zW95eDb}pUy%f@Ak-VMHqeW6p34Ai4Vfx7DPlV&VfGV7QL^&Y~@d%WjLz3`R)fV-aT`iH&_19V|N3sNs)%W6I&GE25oIUciVS|@gmDXJ*sbaKZTU=qA|`*
    zi^|<)6VJTr_Yd54+2m@O^jXoWZ~tj*p=SrU>JstU``zg2NS^Vt{RVx2>_AcgOJ;
    zZryT5A?J~e7Y5dwEW5o`g9q36WWeI($ltg{dE(R2j^?Ic=2RkFS9m@80TBA!L;leE
    z^QP{tw+3v2B0G)Aae2V1bR$WS?$&{eg)40zNEF38yvO|c*(VMwb7;I*I_1Ih;nYE<
    zvRQw6`mqsi+9#GU2CQB4scZ1(
    z0u)74;p)nkk!DGRqu;CGz9y|&rFTS|hEQsFqBVxrX~a$A7L+?V(u>M9!mJ~&4lael
    z*(yt_Dyqaa3x^i`%J7Zx1f(s8|E~AD5(dQlVSF_mAa3x*BW4u%3h=0-eFZVndKv~<
    z*YQBZCrr9(oDe8H(mtuc@C0(%-Yp>V9sn^K{u5Q;ZdO!RmTDLoJOGY3nKKv!bC+<<
    zPDY2|t1BIT^u;&cb<53*&OB_8hHzy>1gpsw_F@oKx6CVLhg`n$!!=Di+gdh$_1Yb$
    z3?iTb@HXa1C1T3+H9>L9o>B8&Skn=V#>3HgEF9eO@oh(Vc)S5#xkT*6ysNNk>j?IM
    zqPh>c@5hc{B+rQiBkd~=(&W8qWGQgQUt^u!
    zane?}C%WmnN{-MZA?1?&QPfe7wT2^cTcRfpALYA8vwJ^9DLeP;V0$3<5^G^(XcfX?ZGf-L4(D*e>gJ-FJeiwgLFx$M;CS92_N*tvq2f@$pq|4G@b)@
    z>X!Mt$vSST(7cLTdd}*eSWY|<&5k6ZS!g;IZ@-lgSrZ-c&OZ!SkeRCT{B_-toLFu=
    z6Q9Wn_1e8mDaH)2;ypT_n~nKX>|AX4!*Xu2Gr2xTVPW1FuFXg;~>#5X%ZoEfq7J{6>~c%o~=!ri1z
    zvF>MwdfYW8aFh&KG
    zuo~j=Xw#F2=-En%jMgLZZTALLuT($d^(}4DY=a6UiA1F9hwE$iP<4HLxKyfF9(322
    zJHpOHxO>x|r+a&AE%A=n&U*rSsjvFfr`L2u@SX5!EwSuGPtW%E=hk~v(pFZY4ZT=B
    zRnxq_k&E70*AdH1gp==(mFNj?|Mc#IWnYd#xHBA21Rou*`aD&Wu6t`ua}a5aFbU#4
    zQEMU??cVb7{U=uI-Xtx~+Y;gC1=X7DFFo}4Z-3L+oEdEG!H~ye!KSr;T{)vtEf)!C
    zrZLslc0|9tQ0INs<>QyU^y&BOwuhqlc+vLeE#JR$_c66)0dKBaqGTn03diG-M9=HT
    zRr6|~cFftgzxe4lKQ(S^+`eVa*YB)cIHk^4>i6h52JO$GSRCY?Zy&Gu%2aQ|E?%4R>*Pk$~+#`#bYL}ww5N=4zrf9U1kJXuoWk=hBo8Eh1
    z!KsIh9WtoCwx+f|yDnB=S4-6tV1;DGEYY?|PiNEmzrFSRQ%^qm#N&@YnfpXyCAFd;
    zksa@jMWf+RPb3l!TVcfJfq{w@Byup7deF^SBor!1&@l({u-c!cjvs);iFEz=B@r3pa$=J-_QeR-t%#P4ba~A
    ztsgye>D&D_Kne5K1*Mhsr(X3`KMhdAx@~@`9+-GmzYS2ryJLQ-tk+LGzTXC@!AyW2
    z-M;EQ2Iz-U-r!aO)`6BRkzAL{WL%g-g!P8r{m7XE&~)6cV7%p
    z;?sF^`cH9(1l3wxO)hcg+VW(I991GJ_p0CQ$9
    z1Jum0w*h+VEmxd%_}&JnnSmJIW&^anWz*NM-I-#5rjTn$q?u}fM)op5Er}lp;8`ie
    zIi?Z*^rSUFWj$$t8c*LoFJRTW2`Y%@KXT>fT?S|+?gu4}vk2xip-ISAHSC@E;P!B@
    z0s7vF7{FATZkXV{A=j_%3H2JF9V-vkmAz?HrTnaqcNw6OaBS1{ReQA+#55kWvK>m=
    z2DeD;y<-dm74~&+U(im)dEbOOBRw!XGKq;84MVGKyQ9o#3%`bU%ul{o!_qAf{ypeV
    z5Oxss#mi&lV%VtGcyp{}QJ_@iJ-$gVbi$TGWf8Hgqv2TBPv;mWB4~)Usqw1!qz_R=
    z3@*?R?HP+~Tact_iNVxVJ(BD{>-+8q>R?!-KQVY|T5lmF#E2)RrtH(@z&Ss)hlmB2
    znaD!FVb8@P@t)SDB`_gD2YceVNs`Ac1>uvOPe|qPOpSQNO2P2VSXX}o2-+cJO(i7dhU)W=s{$iM>
    zg16i=^x_q-tor1;jaxTw-m>PKzkTxNQ;UD+24JaZm}6OqAA60{<7;`KY1dD?V);vN
    zy!+8dZ~f&jZ@#$lwsXgMd9uCkCEjJ7zH@@+@p3}xn9~>CcK=g$LNoSrwwsE6V=C6Q`YV&Wy89JbZMuB59f%dv`andNEC+KO4qrEYkh)
    z!qINX4Md8SmIh!#Ispy-5;d@L`);;~Qe(?llijtAYS^dsIaSjoah(xnXs>
    zJ(`px1{vsKz{eAjo$uXr)F6)nR|6a|1UelIZmS-LYsBb9cD&gjOvJl3zk1V2BP)HH
    zqGxGAbO3@3e6-?Bv_`gl_{fs8ri>plsII2Ermj}1aS`a%_RZhD|I$-WuCzWDTe;#<
    z{JG+>$LJNraBRb5!NeuTG?53Gj%4K#qcSVr6AOn>K@81E7Rp>$5M-@mnv-oK%um!Z
    z@dE6IG3zs9@lY@mi_01%TU{CkEq2M68^k8fglP+63B-jcAp2cxaj}|f(az$G#}iEi
    zVW;sT!Q&k@Y}{e}bdeI?wHGMmW#f;Wxv-xuQiFGvR#!7=)&uYK(?v>n*UwT14LkX|
    zciQ^tA~kp~Q0m9bT=r>KKV77~?^`u|=H2f$_SZ#9n18uYEv-KFnm?}UpNo{RuDL*!
    zya%0g&9Z*FND1${3sg?7KlsG6`|Bb#m%5ZWn3aEL6g~7D#(=mm>16pDxlQ
    zGcuu*RfZ+m9~Y^?I}84BBoBb(NxDe;XrUS}e1Q)4w1S=IE(`S|6{g!ibde@`k-|Y$
    zJ@B2v&8p5P4a3;V6J+7q-~gMhKE$<1crc7knmptX5=pa
    zrHR3<=-7Q@Z*6!;MdUG&j6_W^JK;0-^g29E3?9`3(TF7Jh?+(A2IO2~0E2<6>%0mq
    z0BBjmLuzJlBZ5-Zm86H%UsfJ)V^59*GVl#+YSLyFzB4hn@unsZ>76%RH~-Xw>HsBS
    z_K<#WV$k6o)g?|29Bg<NEH_xa1Wom7ulM?^K}5(jAtHTR!Q4F@Tax3NfY!?V*>9_b+n`F29S7UXyz
    z1vxgf!>6NnsBq0#7=FFrrGX9MD{l>0v41zTavNjkAx4(HD$!oJW
    zDg4lti+<>6hrcdA0e3=ASEzaUcqGHwn^30ZX>WHmx4~{O2qVF+(7G#2seK9Ax_dXb
    zb%fxFN)m=K4sT3$8H79byb$K%Ngp+B>uB!|ThYzTcy}}u3U`Gz-r(U$<69!3t`=ar
    zVI!#uo+Uqa2E$#!o-j-RD_$RN)G!i8!DrI>bUkO#M|-;38ZRPq#U~B^!^RG%8rU3N
    zJ)m!k_jGj-r*$G4-u}T+Y&LAtEwOM{`=(1U-vnJ4^YrHK82po=u1;8ypbvGlwFik2
    z7uxyx=}a$uuygAb9sxT&VdBdhI-sWEc@0I3=ZAw`-LQKSvEcTvFQ$|9kx=LMJ8C%{
    z({AFcKQ~9v0P!b*J`B^bCya)|k;vF8ZV=zgV}kqX!)$HUPFE!C0_)(+_W7s!+sgZG%$S~?-D0nyZnW}uHM!Kdd#9|w5P4{n^n&)J;Rg9
    z@Ps@wu`M19N7^13C1{LYJ?OG~o>}$NPMrJ0`042B-1y}iE3QAOqOe#HlhmuRwTg6Y
    zyR<^3ORVfs^Y47}%`blVW!=Wcb?erA|KW=dUwdXvUbaX}N$MYA@aM+x+lV{AGH*ewM`Bz`F
    zc>b*Eqm_a@8om~dxK2Tw^vU9E1PMO!GIRN%lct?^{>2wwGW+x+NBV48xlUPi`wZee
    zUfEdps@dg0D*?Sztr|Rh?C1tBSCpAk?81Y6W%@3!EIG!`Ol$~!v3N8N((L)U1qFpg
    zB_##9c||35C#!f%%PZVTV)EhegSp-q+3?u$l`?@vv6tXK2OzO<%K|oYdBE38ZH@no
    zbpf*z3#j@1o2S-8;u-iV#%&8YIy_##&(quMY^-bSXyTi@H@|Y@^x>5rC;?(}1Njl=
    zGJLbTO2I4JXdFKkARS65jp6V+5re(y>QXJJ~mZT@c6
    zOHV)Xgmq>2<0~I~Wcfo6KKRh1)QWsEy~91$uqDzR?&-lIkHH5^ysaS=2fI4EBUCJ(
    z>?9$QVwg&qhRe1a^Mt$*io>Dqt{{jCAh+P7jklAQ~@C3d4H;0+aON7*)T%nRL;E>)5dZ%Qs-$;LG!N%vKzEUXQbHyr>I1DIK#YmG?BGw|;
    zB=SiSiof%l3?-E-CI4h#f0TeP7de}fza=Cu>XEDf_&&L!4R_o2{XI`CLAejtZTz@{
    zlq)kh?k-}h*^VMC}AiD4tpR-*(d;m*=o5q9(xg8!?uO!
    zH^yGe1x0V5)Qdd|$?}6_n4nPt4W}--@AmVC>#7HFGbqukZo1>NhM{w=KeE;*(K1Th
    zbMBvr{bl93S5EZe${{IvXpYwbNUn+3p6vIt5-Is)jN)`KYW1ZT_;iXq$Nk^F^5`XeW?l(5?uz4NnzFmO1aB2G`E0IDoBGhR)aJAW*$h1qo;d1$Q!
    zN?k;KE2mV>yzzobCoG(QNI6`ItedxpAso3P28iVMZ5Q<+Q)b_E-RWb?6xFMumW#6}
    zw-Pu>D#D3wpWj-V@LAn4RbcUKmdT?ME~~SX)>X2P!In^ytPH84@?2TYc0jiQoDk?}
    z0Ij6x-5irJ@Y&aOvE3UPd-ToMfPz
    zpaY~L4a`kICr5$9#_C*)=+`|ypWCft?}pvCfJa#f1|uwJd=`IQS!tjmfQTM)-vLP~
    zg-k9?D&ZvHV*V#qTA%4&`Oqm|LLf_4C5~^(hf$A9dpf^8@ch`?nyT81W_WRkOfJe{
    z&r8NKN(fM2{(`TpDj=V69&XQ(E2bp%3vLaf>p|j$JYC#u;^Um`~80HYtjN5Z=ZE6=>T&5Dw2~W!EULPd81kVK*mBSkhpMY2-=~XQUyfH}QCC}`IBZm$iI;5te
    zvZzXbtmRLCx#H597hbaL!!^=t>3i19mg54NvpA~B(^l!
    zCF8enSEMMW6qIgw~@4jE;LHoy)l*h$JdTf;?h
    zHy&hxxf>+T-b5nY6RS<+;|PP8p0_3-E^*(Ua@Z&VH}4sTogyWYNZX4MtqP<>EK`&K
    zp_FwLIYe9|C7G;i*>+sEW}G$(-XKy^$F>n9a)6H$lMV%tX%@BvDBy@SB&osyObeOD
    z0%{k@d2u`5`~Ig?5&&zU=lE3vsq33J%&(h`@G
    zKl1EK8|@?#mA!OAjN}byP7R)OCIXK@ub|>kzTPV&?^iHe&kRIa4a=B0I`;
    zzK4XXLIhi-gqS6?JAk31j<*pDajmkU>>|9eY69#Uh#$
    zpB)&jR4)>-g@sI~Ak$ks58ktE*&pt`=NOjAaw!^a?XP2S~s*4%>p<4*^ICz7K>tm5%R16l}%u`aZ@?YDii(S-9LtcQ0hm2sCbXz`
    z7MD2eMMoS(BbS5>3{r^OU!zRh)hf+LP*k
    zlNUX{^3jJMcyPtzD~cY|V=a-@KWzAJ_0Qio#o^lP#@@XeWufk#o?tK(#R(rGN)rhp
    zZCfH;U2r9$6wz5-By(^zTx1AJ&5Q(z*AV5T2wp0L#gRj6V`mTExNiKDNN#Jq4uY3N
    zmo3h?gNRvPM^1E!#*Ke_rj0j*stV0frrRmemRUdxMDU7CvCvQfNodO}fb3)2fbVP<
    zE4?VO7dj;mDIv(KdRp^6I&t=5d59NJx06DS6a
    zD=Vvd^0_C}EehiwoJC<3B_3%8I_gUErLe3X5>SKHxB(F`rDf$l_{kBuq%*l0-tpy<
    zK4c_s7d$eA=my4#bQMVQ>~L_J*Uc7LG94A;5AYV{m55#yPiS^#TeI`9tcyxqn7ce(
    zl$({&V=d%#U4$4feXH11`<3h`^!qbdZxBh1b8|nRg|hs
    zVP0M_1u4zIz}_Iay}H;Fke1Zij4#M#H|OmmvF?j2sMmWo4dL%mDY~#B_oz(XYs)At&G$C==t4|cMfZB)9*6G3)k0xI-icPGn!ywD^-7(x*%+*E
    zw+Gt>NN--$g^hW~S&F6NjM~~fPUWDlh`2`NxMB3e;LSTGBbP18sISkZan^)z1xVmu
    zy9|p;R}2Z9zq>b#NK?2V015nSlx0uOfNKkblnZDN&h1kT37j=PBVTi5R8{3E6#-vG
    zxdsWGHNoO67c#N%#B#se=OspP?onClV0Ug+mDQyJ^O)gD*^ySZT+FJfve+fY4)X(&
    zI_uz!Y^ErqqQc@tf&fvdky>(&%*dsSEHyRRoX<-_WWic|s-;MBSO*WzlLDpW01jnE
    zCud}rSsC56g9^p6ic+_`%rJPbJI*(9*r*YQ&b<7#haP?8
    zf%}&ma=7uHn;%>L_>;@u{JA9pM|w}BI@Z~_dBcwFJ9li^fpZ^gA|5uZUJLAD!v#yC
    zjbey_F)Uoj-gr3JO^$bB?ae(kctpq=?&@l5$7x0)(!8^W$YDg$MsdoN^!SEC(V9d7
    z7&8r{H%38&F`H;7C3`%wqo@#utxT8LoMgQq;|`0g3^6AKnw^xxiQR={%g?vtA`e|$
    z0van_z{G7X5w&(Zr>KIhz<2^SwC$*@Nu
    zdt0y1N7f(K4-caaSs;i3<)lHi9_ZQ*nN!R3@?&p!@UHWRsUF}zTAK2ioq3bU(L*ggWa%3
    zRg4hUH8%h7pnz;0PvnePS@F>EI=O>1Z0=Ehoak~6LIx3Hq$Lu$pLiUf(v0GNeRQQ0
    zK;ZTBPl1#Xagsu0mGLy#q5|kth(KB{d$~cA3muYY&S@Tx&bx@Y+DnJ$irgroNI_=o$i?2S=gH#Dtx(h}n&*I7x#$4fl!Hys289x6}7vFZx+2i~=
    z5z`d1EFt#-MfQ%!*&*;h!AK@wNYP8R@`|eR@_^}w`$-*
    zFvLE-AB3Vn>Nr;~9aIHL=|Kw|aHkMlipSvnL|hQVP63Z_5V|PRN4Tt%1sMW@4v~f4
    zMYpVU4=y(0A`8Yp%42gT5DPjNG*&u7j_C1s56m^hQphl`MIFu{G9;9h?gS`5=>>MO
    zrCzHV!CV)4iJ0L8zzuUUli7(a3=I;1wTm8Hk&sj`oatN~N#@~)*-WO8k)6t*LC92v
    zj*sZ^so3Dec{x+HAYvc>8h!^RC3z4lmW+J(p~qG}{P?4%$vC9wfd__!6p;Lc#N~n=
    z4UOHXr|$9EfKRWz=t4MT@Ir!=jpoSiz#`xpJWe}gE%35j=4F&Q7yEED(TY7F3d`!B
    zq!520&sgXaazUGbm!?ZnMn739+C=@l*-$vxYH&!ZQ8wyD%~rrD=g+CapdbeT>!i!Z
    zzN{5wQ_}et|4L<2D=^PE7h`G|uz6OY<6luGx02WlRtSuKSu4t=r1LJSlA7VN6Lg=Z
    zmk)nYcN9`$Zz0cWaGjP7eqMLMh%yS1bc9kMt^5tosg5F-c>Wxy5*SCKt|*@RXJvbV
    zOPqNL9x1Xo^F=hayY3mqUg(l8xU9DjxOpgiR&|yz%IwR)%{y#_&{O}s&Nz8(HX(#0
    zaTt#r@*Ar3WFr@o)&i
    zlwoq0BN45NH{(WCTPV`q*$VyC*@i+;HY2hCF%^hshy~-p&M1xvtIB6bRwakeZ+Q678xWMVTzn8M8qzXk*_oF;1_UXiPU
    zvEO6Qv1b?Bicg-3W}J2|Nd?uQ;z>l?$kfG$mgE-}+Xv4$5TXw{&FB@h2mIaWRWnJK
    z=i-aTEv#cHw(PVsd>F1Cq+lgt(ik?h3^C3kQ5Ca|o3!w-u@lZdug0+P@tKK_396e<
    z08tU=y3A&J%t@D?cPNtAz>fhdfM^2p3v{vqA$hZ(HXoL`c!Eadc{Cc=Zi1!MKgOC*nsryJLFg_%w6wzK99~Xgg
    zXBE47Bx`}oAN3GX$OcHf4=dlT=QDRiPUP#gw<=;tz*ee-bTGI6?xpuVbl(H_9EDdSS`^a=iMx!)WV0O{?^~v$
    zJML3XW;qE*-dX%kc%;biaI~O0
    z6O|Zlsh#jS0(Uq|vI>f(P7A=(pMX!Qi)WR4iXHHP9DNdW3(n_JCa}ugB`&yKezh{9
    zNUf<2LpLV~4ytJC%&$;ZDK=pQlf%razb|pX$#c~7DhXrAx08h+c-
    z()xlto1g{+&WXMPN0_JxJnt7*PNo*{N*M=d!QGabkyY=_wQ+6_(oxxLw2Yf!(BIt8
    zv?GsG1bfD!jEo%KnO$(u;EX)@-&IgKSkA81kTWd#xfzZjQbr*!dlbBb6Sq0M
    zwRvGN1e`bvVX4bjLclbn5FjNfOG1Ld0h5rpge0VGNC29{fqRbR*rrbi+D>33_wMJNWB|IgbjJ_dcs;@N~=gzCBoLfb@CN&q-0lVYk
    z7Xv2q>N$>8h59nnn7O_|cK@=labgIcO>yCo1RL?Cb
    zxODQWl6g%L30{$0gp9^vI8R)h+vD@taa@=ynzO_&4cJcXL&ws2sre8uAg97zw^f%{
    zoKRC=UrP+3&SZDh%_G&&!A835?`S?=H@B>!s8Wc%}wJKWm>x0;Bf8m8cWJ9Jo|!6zHr4A^C{$E
    z*`|TXa18olUrSqy%cv{=Qf1|wIdd2HvT)?UR1QTIW?XxJ|WQPo?3D249=4Y|#>qwbh(p^E8+O
    zzPaU>8{CZ+eeXgU*J=;8dDIsF9K)shx`sI=J-yo5?EWUV+U%_;zf3o;#!%ALBWJ^w
    zRjgK@YAFA*?gZ8V3a#v62|&AS`tq-o7|L}e3m0{^kF>V5v~{)A*I!nm)0LF;EG_t7
    zn>KFT^w5L1U;FjbmYs3Zi5GvnjVhw@d@Ot5)oqXd>d{SGp8P#)G|9-QticQ&+A{!;
    z!M^>6+j2vc;~hH^qjfAoIbA9|JQBjo$|i~aNh4{VxKv{aqJvr7Ej{VVxr8`vsj);S
    zp~Mu4uzV7v#QEw35@j*Gh3!1ctkeFsn5-?9rR;<^pPyB_yRk%1mWkaX)*-e?S~JSK
    zn5CNWM+&F>UQWbL{ykZ1*W1a==@oy-mIjxcjxMo2wa;P_=J^~kSyfC?QKd{J#cHyp
    zVIHa1Y~CzZI9Z`A3r2zpS(oDDh*e!^i@F^?Uky<)Dd3VG)k8!ED6Mu
    z*mD+zhRB}mZuR2&0e(7DPCUSJN0mL<<_bWwqv3GQV)GLrDYGYAQG2)*dM*}6k(Nla
    zL@eCN`#C|U7DJ?X?gFQ9=pKYs|
    zI_vmx?NjF*Z)tNFCcedZ3k5b%8%CPZO_)g-_?)xQmS~|3P;ly9c@=&o28&KKNwrR)
    zDbea?MH##(9M!-HV(lIk3zHC@OYLOvY=_USccjs=5_mW8+3(RilQQ}7h)7gW%2e9C
    zT5&yX1O>FVNIUE;XgBd_
    zSS4>_rWovTiQCdgwh1jv6sV*e7&YP%%e2-e&x|&0qD*UR=LL-xcWmQy(;CL7#I#=1
    z+pyX(&nG*|L@ivMaboa4+f*}g#)+e}DWaWkqD7k`(^?AC0jHJVgSfvC6KInr;Sg$k
    zTw>W2#H>vaog;E{{Nsf}VIW0zDCJ)@;OrrKkm7^t39zmIs#vYQ~IQeAY6VVrR
    zl9q#KDa-^)LnJ!}%|wW|Fgwy>?P7L_W2?&KNVm6kG&Sm*)2(bI(b?6W{>1|i-v4v`
    z1L<`eHg4L~wIMx5F8`Q5MK!rT*GD|JQ^_32
    zWP530qL2)LK-QTg1E4_Ivi*NC9oAq5^5R;$tfV2CS*o^Ti?YACHQXSc2l_>_tjv}L
    zwlFzVMq%_TGyolh@(3>#J~K-qywzxD;yCnZ=wdb**!D#1YR9N7kv%xG$5R?KK}YI7`H
    z-r%#Lof<4&H;GGy#)zSsxR*GiK#EeBd8yJ$mfe|m8H#QclQtWZ`bx=oVp$=Jmr|H}
    zW4a1?YM=~z#@iijOuul6!KC{9JP&c#?5)ftn#_>f!Tm%C)?%kC7$uFK#-;$#cjAAO
    zjTLrZGb=XO_B3jpO=`!2zQqf>+L{7^#|kXXFq1PxG(wRi&vg?{jLN5gW3gfboySG|aR~tI+$*gO$p83aP
    z*Bv>s*e=q;_@bl`egAj&HCRu2EPRj48T?sjPy9Kro$8+oIlwB}8t&EEBbS?2?%RE(
    z)8YQ|{$%!il^Mw#ucp+8F+ii*(>Fzr>_5E!pIglyOUFy;*E=XTn><8ri@UaV$yc9v
    zdi^Ch_#UP1x=okyZcH9>gcy+Buhug?{8md{gWF1KS2MvEWsY{1W3sb7(8qeP-R|>P
    z&>`;H8n<52aeJ!l{g^$noxRoWH}lSVtS*}gzDzS`D9G_iC8*Y5uM6UQTN&Ntq4Zkh
    z%+z_S@w+L_PVDU
    zp@vaq#~!<4qztN>vKDgYQIwLu(m2r+mt}CLd;X~_ub+eF(vET^Z1#=|);{^xzKN!|
    z>hvzVM_Aeo%!3oit4J?0Q658Oi
    zJafx&vLpCk6F`^ZAkwZVi+?(hj-=s&$>)uXQ|%0SEKIege|$3`P$WgHP4L2H#y4|9Q_xa}`X$DeynNT36``W&2zA|TZ
    z7@eh#VdzM`O*bCmLgoAO9|DLH0s6Q@wfkCbI3VSM86uh4ER|d)M64x{^vd#j`?c?;
    z^VxD1(liNfmH`38C2g1fXDo{#pE1&dcCjwwlrOZLxowCzDTtoRq%&ey&r@=-m?%oTv3vpCRmB*zzEonE#yX^L~UGv+)6u_<%VmIkbAuHDa4Z6qW34Hdx4`OH<
    z7#K5Fr;&>dVL$o;^RIlWUmQ{i-dd?gD@+m-h`u6Ikb(xL=ARu}C30_1j4o=)CY}FTK}46wPGF2!I%-LNT}^9$))e
    zYqr0&=V&B7(OT|``hCGqeq-ZrcJA6g)fo4A)Zmg8H~eJllUBv78iX0o|a$LaQsx~Nj4ysh=xuRHjLSx`>3N}w`CPa?k>J4}UN+s8$s5(~oQ(i#d
    zAE<0E@9=kK<}c{#D(lX5^%*z#H|95&Ka|_Jr5CrqGGF++j{tx!W6T8zfg3Qq`gjQq
    z@=SUqjLm_4tddIb`mZ|tuR8oMR)-TnWmWFK)8nP&GQ|Zi0)0Oj7Dt9GJG9og8lQ*C
    zk^t-&_CbSh#WUe-dWZuEqnd7rep{MWu8qcx9uZg6Jtp7pLVvN&KGdm}pDZYJw$B7Whv2hM+XFj<*5
    z;wiHKlCUR{AE(;A%hr8FJvJyQVF}T^RZ71m7Vc=A@UA;{4nk{I0L+4B&LY>l2jP2g
    z*nO8jcQBF`G58|l8YQP94QpJ{%IQCTa{%TD+%_u`9p7?T#fpaKZROT?j*dw55m<88
    zD#sX;Fbkflt>>Fhzk7HD=+5U+&htRdJgR-z<#3bp>so%>8niie6Qd-JgF`?&!lEqw03;M`gQ9beDHw>ezAUW7952}Be^)MgZqrc
    z&Bd@u!98KjHS*r+xNq4LHBekd!Sr8M_Fq-@U#!Z;A5lle?EYZ7**ynUu46I9=kRym
    zeUyynk6GP%Mbbv_*aHsV=eHeYge5sU*0p6DTN**pAzAauy9JssMAHD|KeZo
    zI!1Oj#&a&E+1vEh#KamYTRQvEoyQlT$!)Eh*K++6e>^Y%iy;SCIRRpcZQwt$yMd*qe%YOmy|Q!v5cD&M
    ztCYjs5^+I^j=Ai071nd^cyP377`6$hI$#YUKM@8Xc;Y4Hg_ty?qOpEMIo=(UtB
    zM*E4-;CJF%boMU#)ZgE@>gy}d>hl-L>wFZ+sZO=IZ_(+OZ+`K`^|xPjMpKd8QAZV!
    z>Qq{noOI4@d!vyzH-BeEN0D5$5&XoIXkL8Eg?E3L%@<~JUE{`LQO;KpUaqW<)iJZ6W}+i}K4-~QnPKfC3;
    z1@7LvWD`}nJ_A-q$jK(jr$AhJ>6yJ=Rb&!GcIV3#_J@UEIMCJG4PB1nof4Jdf9hO>
    z62ycO&)glD5|(3+gk2t19JL!aB`_#Ca=o2lNs+>r$4Q-%F`}Bqh1V-lTv4gn@=pl~
    z;9#nhsyauU2?j&^lqi7*D)AD=75mTNN*4*kGS_6*NW!|Xvlk2Xn3R}Q(9pTmifNKa
    zOLJ>mv!5?1BbQH;g}?j5AKrPx7nZ`HFPk(>A2NJ=WaQ}HHy^*_+;*04W(s*LS@DV<
    zdf~QD!ZXFqQzOUJ29;=sd~_+XczddcVN8-GrL{4t64XF`u%+U#_&xv$&X_x-{n
    z4B)g5=EqXG(9;)Ckfplq!RaEF4zl3~Pg9^ea`>i1GGLAbuk3-q1&1q1STd#ZV66gg`svNOZ+n#e{zu$uxL-vz?+2L
    z7u^my(MTq?^J2f#=UMRG5RsJ}W#UZR(u^qKNM_%4KGo~$T|1P{Wc|$8JQDeur4V@y
    ztns*guEjqcl8j|9FE7Q99ENN(b@U#|?LTRKh*>K`$`=6-(pcSeO%2@b_XRwkd_0`t
    zYl>7)>RLeoG
    zo!jaQ^!%WoT?ZzlU~F3K&(X0X8&355eP=xtE|&6`OCeYt+I2&#&+WVULoRQ;t8kej
    z3h&>x+}Gq@v?WeiKB6|7L&?Lhe7!di3|_O7n+Qy2+wzfA{Meg6IknrTF8yVk3z7(y
    zk5G?{L23Tr!B_6Ppmn~d^Y-0R)34XAOee3=*x-S8U;grpI^Vat7t!Q_(dOx>=8{d*2JTfqFXwR;sMX0{L~I_u-Sj^mP8hcfY$tAM|*3tKiJaJ+2riK
    z>e=I&R6duYxk-2)eT~7!&d+`SjgfSEgt&QYewZjU`qn@H(>Ff0FFrPw8OycjLj)#0
    zjlJjI^zi$!bRrGaTt_~%_R(8pLeSoaMTO&^nb8F%*KGJX6v%a77(bjHA`1W>L({;+J>FhGj!+SD_$GUls-u&zF>(AjW)R^W
    z#|+QZK;wWB83zpSxMT_~Vj5aZ4D~UnNKHsSh7*&L=^!!LJQE=%1s{WlDalN1n3Bu{
    zhDpi6*-%04_)g*OH|7Uspn|(|Ql!fq%O^mEXD)OqUhb-Yx=2D6k#(OSZ0d1(rbN8n
    z`rJ@5k^Sg9lvJsHWkS@%J3q)12Nae8`i;&BL34g6E5VIau77p2lVUDSP^wj=8}i3+
    z({stOr`RpX>YIOiKZ|8dAP_+h7U**$`Al@@B>^Si?OZdMPQj9xZ9?A(^K&GwGi>yRwmaCu@0
    z9vVx=Bcq|C`*yzi%-XYkE|>R$Jpe4hExZ>QAb(K*QE1<;KfL-Mn{WASqoc_UMC33D
    z0{Ow$UVr1Y-~9TSO?O|pQ1vz2PJTEk3VvwoBac4(;E!&-YFSIL(c}B{=4ck+8vM$&
    zU%mSBGyB?=23OGcHxH+B@dO|N^HXq`z1nPEm$mom9m6>mSl|tB&L3l&9Vs@ot1X{d
    z`&OLIhuGCBD*~))lHk>rGp>Ie2K00m<<3180Y!Kni_f{~m%AnRjvcPFn~z}OX=i`=
    z+yC~`0s12ll`c1^IUjrYi5K5K5CWHk`nK?nwB$pnM1sy7%HcQ|fPc0Ha|@S(x4H}%
    zrmYN+gvEh@(#cE(aKfT6?|7ESo@A9v@-#X$aMrW!4ht$gA~|OV@y#-x%R&uD9-9?M
    z0wx=qhQ?S#n;l1btVQx!a0EWyss6Lz$hn>(`7AiH!d)bv1xL;;md}DCXV{AR&w?YJ
    zCi^vi8juXH0*(w8;fSYhT;>Bwju#_|(>y6DV9C%Fmbk2wGI2se6KGP@XB-aK}HLR;<8N2rZ9!bC~RO;Ut$KTl)1)~Dd7xYnJz5Gmhx%cro)S2nrsHbOdm3;
    zfz0oJb^AGOq_hxeH`@xg*vGC5;(nmJcC0$X=OD3S%rPY#2bx4GzHiIL9!S7QmUm4&
    zf*e32espT+(MuZbHn-Ek6<%9-a)>g?bTpni{^SY^`DfHcO^AZ|BbZO=F^Eove||Dy
    zZ6`_B~$q#RFlhvRaXUaI?Sn@eGy0&?0ie-?V#uCt-CiZ>H*Wk3(PRJSw
    z@#s^7P^=`QqmOo5-L-N$Y{4uSfR;0)N5?{M{H@CZ`^i7PKNL>pny`n($jhS`BRj7k
    zt*BnT;e(+_%Fj?jl`84FqtFw-bG^ytGWl=aJrqsjmoWWN<01@Y!w28EvD)UfG_Tzo
    z5_I$C^~rPsTN6V(lnw2E>FRk6K1c8U2g9ODykK%7F&2*t|M5uX_@5p>ud2@H{q&Oq
    z5s0sSXc7kIjxqE|>cGqEPpPi)w|?=J;b=iBdPNdVkj8gCbC-9nDbRiEu5c8L3X0mo
    z4A$pE>EnNR;_51cg_zwD7-Z8~F%&R>(NH7r|9aE1(m7`D&F{rvGAM{-F+Ox;_kTWe
    zvr=ldE!x7CV;oDbBa9e5{=x5G+IG*f`f9u9>YbR`jFRR$@?i2nW-PS#cTaA(>tZui
    zmM1+N#Sj2JMSPH_&UKFNf92sH-}pD~GKa1Gjt_Ven#vXVo&){;hxYw($ELM6p6x0%
    zD#43(MM(hF&>8u$hyH#0j^{V8UH#1~mwV=(;PZU`1-aws@NcaC?poaCZPQAzRZBi^XhG30WWEa$r8@{bzL>J~p6i36{*Nl3(VF_n}^8EXn_$
    z{**KR#7`N&|6l&-Zq2V6|0$uqgHn;olER-ge5RU6`*S*fuO9#1!@sAE|8C@8xBUKJ
    DjLf+c
    
    literal 0
    HcmV?d00001
    
    diff --git a/src/main.zig b/src/main.zig
    new file mode 100644
    index 000000000..c8a3f67dd
    --- /dev/null
    +++ b/src/main.zig
    @@ -0,0 +1,24 @@
    +const std = @import("std");
    +
    +pub fn main() !void {
    +    // Prints to stderr (it's a shortcut based on `std.io.getStdErr()`)
    +    std.debug.print("All your {s} are belong to us.\n", .{"codebase"});
    +
    +    // stdout is for the actual output of your application, for example if you
    +    // are implementing gzip, then only the compressed bytes should be sent to
    +    // stdout, not any debugging messages.
    +    const stdout_file = std.io.getStdOut().writer();
    +    var bw = std.io.bufferedWriter(stdout_file);
    +    const stdout = bw.writer();
    +
    +    try stdout.print("Run `zig build test` to run the tests.\n", .{});
    +
    +    try bw.flush(); // don't forget to flush!
    +}
    +
    +test "simple test" {
    +    var list = std.ArrayList(i32).init(std.testing.allocator);
    +    defer list.deinit(); // try commenting this out and see if zig detects the memory leak!
    +    try list.append(42);
    +    try std.testing.expectEqual(@as(i32, 42), list.pop());
    +}
    diff --git a/vendor/microzig b/vendor/microzig
    new file mode 160000
    index 000000000..15bc1fc06
    --- /dev/null
    +++ b/vendor/microzig
    @@ -0,0 +1 @@
    +Subproject commit 15bc1fc06da3b6c622a21fa438e40be247d9dee1
    diff --git a/zpm.zig b/zpm.zig
    new file mode 100644
    index 000000000..1dcd7b385
    --- /dev/null
    +++ b/zpm.zig
    @@ -0,0 +1,8 @@
    +//! This file is auto-generated by zpm-update and *should*
    +//! not be changed. This file can be checked into your VCS
    +//! and is able to work standalone.
    +const std = @import("std");
    +
    +pub const sdks = struct {
    +    pub const microzig = @import("vendor/microzig/src/main.zig");
    +};
    
    From e1e525a50d562ec1d1687491f7cdd0a109343ccf Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sat, 8 Oct 2022 11:25:01 +0200
    Subject: [PATCH 030/286] conflict fixed
    
    ---
     .gitignore      |     4 +-
     README.adoc     |     5 +
     esp32c3.svd     | 36932 ++++++++++++++++++++++++++++++++++++++++++++
     src/esp32c3.zig | 37956 ++++++++++++++++++++++++++++++++++++++++++++++
     4 files changed, 74895 insertions(+), 2 deletions(-)
     create mode 100644 README.adoc
     create mode 100644 esp32c3.svd
     create mode 100644 src/esp32c3.zig
    
    diff --git a/.gitignore b/.gitignore
    index e73c965f8..c26d4af28 100644
    --- a/.gitignore
    +++ b/.gitignore
    @@ -1,2 +1,2 @@
    -zig-cache/
    -zig-out/
    +zig-out
    +zig-cache
    diff --git a/README.adoc b/README.adoc
    new file mode 100644
    index 000000000..65801a9ae
    --- /dev/null
    +++ b/README.adoc
    @@ -0,0 +1,5 @@
    += ESP MicroZig Package
    +
    +[WIP]
    +
    +SVD is copied from https://github.com/esp-rs/esp-pacs
    diff --git a/esp32c3.svd b/esp32c3.svd
    new file mode 100644
    index 000000000..ab064fa93
    --- /dev/null
    +++ b/esp32c3.svd
    @@ -0,0 +1,36932 @@
    +
    +
    +  ESPRESSIF SYSTEMS (SHANGHAI) CO., LTD.
    +  ESPRESSIF
    +  ESP32-C3
    +  ESP32-C3
    +  8
    +  32-bit RISC-V MCU & 2.4 GHz Wi-Fi & Bluetooth 5 (LE)
    +  
    +    Copyright 2022 Espressif Systems (Shanghai) PTE LTD
    +
    +    Licensed under the Apache License, Version 2.0 (the "License");
    +    you may not use this file except in compliance with the License.
    +    You may obtain a copy of the License at
    +
    +        http://www.apache.org/licenses/LICENSE-2.0
    +
    +    Unless required by applicable law or agreed to in writing, software
    +    distributed under the License is distributed on an "AS IS" BASIS,
    +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +    See the License for the specific language governing permissions and
    +    limitations under the License.
    +
    +  
    +    RV32IMC
    +    r0p0
    +    little
    +    false
    +    false
    +    4
    +    false
    +  
    +  32
    +  32
    +  0x00000000
    +  0xFFFFFFFF
    +  
    +    
    +      AES
    +      AES (Advanced Encryption Standard) Accelerator
    +      AES
    +      0x6003A000
    +      
    +        0x0
    +        0xBC
    +        registers
    +      
    +      
    +        AES
    +        48
    +      
    +      
    +        
    +          KEY_0
    +          Key material key_0 configure register
    +          0x0
    +          0x20
    +          
    +            
    +              KEY_0
    +              This bits stores key_0 that is a part of key material.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          KEY_1
    +          Key material key_1 configure register
    +          0x4
    +          0x20
    +          
    +            
    +              KEY_1
    +              This bits stores key_1 that is a part of key material.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          KEY_2
    +          Key material key_2 configure register
    +          0x8
    +          0x20
    +          
    +            
    +              KEY_2
    +              This bits stores key_2 that is a part of key material.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          KEY_3
    +          Key material key_3 configure register
    +          0xC
    +          0x20
    +          
    +            
    +              KEY_3
    +              This bits stores key_3 that is a part of key material.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          KEY_4
    +          Key material key_4 configure register
    +          0x10
    +          0x20
    +          
    +            
    +              KEY_4
    +              This bits stores key_4 that is a part of key material.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          KEY_5
    +          Key material key_5 configure register
    +          0x14
    +          0x20
    +          
    +            
    +              KEY_5
    +              This bits stores key_5 that is a part of key material.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          KEY_6
    +          Key material key_6 configure register
    +          0x18
    +          0x20
    +          
    +            
    +              KEY_6
    +              This bits stores key_6 that is a part of key material.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          KEY_7
    +          Key material key_7 configure register
    +          0x1C
    +          0x20
    +          
    +            
    +              KEY_7
    +              This bits stores key_7 that is a part of key material.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          TEXT_IN_0
    +          source text material text_in_0 configure register
    +          0x20
    +          0x20
    +          
    +            
    +              TEXT_IN_0
    +              This bits stores text_in_0 that is a part of source text material.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          TEXT_IN_1
    +          source text material text_in_1 configure register
    +          0x24
    +          0x20
    +          
    +            
    +              TEXT_IN_1
    +              This bits stores text_in_1 that is a part of source text material.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          TEXT_IN_2
    +          source text material text_in_2 configure register
    +          0x28
    +          0x20
    +          
    +            
    +              TEXT_IN_2
    +              This bits stores text_in_2 that is a part of source text material.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          TEXT_IN_3
    +          source text material text_in_3 configure register
    +          0x2C
    +          0x20
    +          
    +            
    +              TEXT_IN_3
    +              This bits stores text_in_3 that is a part of source text material.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          TEXT_OUT_0
    +          result text material text_out_0 configure register
    +          0x30
    +          0x20
    +          
    +            
    +              TEXT_OUT_0
    +              This bits stores text_out_0 that is a part of result text material.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          TEXT_OUT_1
    +          result text material text_out_1 configure register
    +          0x34
    +          0x20
    +          
    +            
    +              TEXT_OUT_1
    +              This bits stores text_out_1 that is a part of result text material.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          TEXT_OUT_2
    +          result text material text_out_2 configure register
    +          0x38
    +          0x20
    +          
    +            
    +              TEXT_OUT_2
    +              This bits stores text_out_2 that is a part of result text material.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          TEXT_OUT_3
    +          result text material text_out_3 configure register
    +          0x3C
    +          0x20
    +          
    +            
    +              TEXT_OUT_3
    +              This bits stores text_out_3 that is a part of result text material.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          MODE
    +          AES Mode register
    +          0x40
    +          0x20
    +          
    +            
    +              MODE
    +              This bits decides which one operation mode will be used. 3'd0: AES-EN-128, 3'd1: AES-EN-192, 3'd2: AES-EN-256, 3'd4: AES-DE-128, 3'd5: AES-DE-192, 3'd6: AES-DE-256.
    +              0
    +              3
    +              read-write
    +            
    +          
    +        
    +        
    +          ENDIAN
    +          AES Endian configure register
    +          0x44
    +          0x20
    +          
    +            
    +              ENDIAN
    +              endian. [1:0] key endian, [3:2] text_in endian or in_stream endian,  [5:4] text_out endian or out_stream endian
    +              0
    +              6
    +              read-write
    +            
    +          
    +        
    +        
    +          TRIGGER
    +          AES trigger register
    +          0x48
    +          0x20
    +          
    +            
    +              TRIGGER
    +              Set this bit to start AES calculation.
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          STATE
    +          AES state register
    +          0x4C
    +          0x20
    +          
    +            
    +              STATE
    +              Those bits shows AES status. For typical AES, 0: idle, 1: busy. For DMA-AES, 0: idle, 1: busy, 2: calculation_done.
    +              0
    +              2
    +              read-only
    +            
    +          
    +        
    +        
    +          16
    +          0x1
    +          IV_MEM[%s]
    +          The memory that stores initialization vector
    +          0x50
    +          0x8
    +        
    +        
    +          16
    +          0x1
    +          H_MEM[%s]
    +          The memory that stores GCM hash subkey
    +          0x60
    +          0x8
    +        
    +        
    +          16
    +          0x1
    +          J0_MEM[%s]
    +          The memory that stores J0
    +          0x70
    +          0x8
    +        
    +        
    +          16
    +          0x1
    +          T0_MEM[%s]
    +          The memory that stores T0
    +          0x80
    +          0x8
    +        
    +        
    +          DMA_ENABLE
    +          DMA-AES working mode register
    +          0x90
    +          0x20
    +          
    +            
    +              DMA_ENABLE
    +              1'b0: typical AES working mode, 1'b1: DMA-AES working mode.
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          BLOCK_MODE
    +          AES cipher block mode register
    +          0x94
    +          0x20
    +          
    +            
    +              BLOCK_MODE
    +              Those bits decides which block mode will be used. 0x0: ECB, 0x1: CBC, 0x2: OFB, 0x3: CTR, 0x4: CFB-8, 0x5: CFB-128, 0x6: GCM, 0x7: reserved.
    +              0
    +              3
    +              read-write
    +            
    +          
    +        
    +        
    +          BLOCK_NUM
    +          AES block number register
    +          0x98
    +          0x20
    +          
    +            
    +              BLOCK_NUM
    +              Those bits stores the number of Plaintext/ciphertext block.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          INC_SEL
    +          Standard incrementing function configure register
    +          0x9C
    +          0x20
    +          
    +            
    +              INC_SEL
    +              This bit decides the standard incrementing function. 0: INC32. 1: INC128.
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          AAD_BLOCK_NUM
    +          Additional Authential Data block number register
    +          0xA0
    +          0x20
    +          
    +            
    +              AAD_BLOCK_NUM
    +              Those bits stores the number of AAD block.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          REMAINDER_BIT_NUM
    +          AES remainder bit number register
    +          0xA4
    +          0x20
    +          
    +            
    +              REMAINDER_BIT_NUM
    +              Those bits stores the number of remainder bit.
    +              0
    +              7
    +              read-write
    +            
    +          
    +        
    +        
    +          CONTINUE
    +          AES continue register
    +          0xA8
    +          0x20
    +          
    +            
    +              CONTINUE
    +              Set this bit to continue GCM operation.
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          INT_CLEAR
    +          AES Interrupt clear register
    +          0xAC
    +          0x20
    +          
    +            
    +              INT_CLEAR
    +              Set this bit to clear the AES interrupt.
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          INT_ENA
    +          AES Interrupt enable register
    +          0xB0
    +          0x20
    +          
    +            
    +              INT_ENA
    +              Set this bit to enable interrupt that occurs when DMA-AES calculation is done.
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DATE
    +          AES version control register
    +          0xB4
    +          0x20
    +          0x20191210
    +          
    +            
    +              DATE
    +              This bits stores the version information of AES.
    +              0
    +              30
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_EXIT
    +          AES-DMA exit config
    +          0xB8
    +          0x20
    +          
    +            
    +              DMA_EXIT
    +              Set this register to leave calculation done stage. Recommend to use it after software finishes reading DMA's output buffer.
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +      
    +    
    +    
    +      APB_CTRL
    +      Advanced Peripheral Bus Controller
    +      APB_CTRL
    +      0x60026000
    +      
    +        0x0
    +        0xA0
    +        registers
    +      
    +      
    +        
    +          SYSCLK_CONF
    +          APB_CTRL_SYSCLK_CONF_REG
    +          0x0
    +          0x20
    +          0x00000001
    +          
    +            
    +              PRE_DIV_CNT
    +              reg_pre_div_cnt
    +              0
    +              10
    +              read-write
    +            
    +            
    +              CLK_320M_EN
    +              reg_clk_320m_en
    +              10
    +              1
    +              read-write
    +            
    +            
    +              CLK_EN
    +              reg_clk_en
    +              11
    +              1
    +              read-write
    +            
    +            
    +              RST_TICK_CNT
    +              reg_rst_tick_cnt
    +              12
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          TICK_CONF
    +          APB_CTRL_TICK_CONF_REG
    +          0x4
    +          0x20
    +          0x00010727
    +          
    +            
    +              XTAL_TICK_NUM
    +              reg_xtal_tick_num
    +              0
    +              8
    +              read-write
    +            
    +            
    +              CK8M_TICK_NUM
    +              reg_ck8m_tick_num
    +              8
    +              8
    +              read-write
    +            
    +            
    +              TICK_ENABLE
    +              reg_tick_enable
    +              16
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CLK_OUT_EN
    +          APB_CTRL_CLK_OUT_EN_REG
    +          0x8
    +          0x20
    +          0x000007FF
    +          
    +            
    +              CLK20_OEN
    +              reg_clk20_oen
    +              0
    +              1
    +              read-write
    +            
    +            
    +              CLK22_OEN
    +              reg_clk22_oen
    +              1
    +              1
    +              read-write
    +            
    +            
    +              CLK44_OEN
    +              reg_clk44_oen
    +              2
    +              1
    +              read-write
    +            
    +            
    +              CLK_BB_OEN
    +              reg_clk_bb_oen
    +              3
    +              1
    +              read-write
    +            
    +            
    +              CLK80_OEN
    +              reg_clk80_oen
    +              4
    +              1
    +              read-write
    +            
    +            
    +              CLK160_OEN
    +              reg_clk160_oen
    +              5
    +              1
    +              read-write
    +            
    +            
    +              CLK_320M_OEN
    +              reg_clk_320m_oen
    +              6
    +              1
    +              read-write
    +            
    +            
    +              CLK_ADC_INF_OEN
    +              reg_clk_adc_inf_oen
    +              7
    +              1
    +              read-write
    +            
    +            
    +              CLK_DAC_CPU_OEN
    +              reg_clk_dac_cpu_oen
    +              8
    +              1
    +              read-write
    +            
    +            
    +              CLK40X_BB_OEN
    +              reg_clk40x_bb_oen
    +              9
    +              1
    +              read-write
    +            
    +            
    +              CLK_XTAL_OEN
    +              reg_clk_xtal_oen
    +              10
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          WIFI_BB_CFG
    +          APB_CTRL_WIFI_BB_CFG_REG
    +          0xC
    +          0x20
    +          
    +            
    +              WIFI_BB_CFG
    +              reg_wifi_bb_cfg
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          WIFI_BB_CFG_2
    +          APB_CTRL_WIFI_BB_CFG_2_REG
    +          0x10
    +          0x20
    +          
    +            
    +              WIFI_BB_CFG_2
    +              reg_wifi_bb_cfg_2
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          WIFI_CLK_EN
    +          APB_CTRL_WIFI_CLK_EN_REG
    +          0x14
    +          0x20
    +          0xFFFCE030
    +          
    +            
    +              WIFI_CLK_EN
    +              reg_wifi_clk_en
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          WIFI_RST_EN
    +          APB_CTRL_WIFI_RST_EN_REG
    +          0x18
    +          0x20
    +          
    +            
    +              WIFI_RST
    +              reg_wifi_rst
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          HOST_INF_SEL
    +          APB_CTRL_HOST_INF_SEL_REG
    +          0x1C
    +          0x20
    +          
    +            
    +              PERI_IO_SWAP
    +              reg_peri_io_swap
    +              0
    +              8
    +              read-write
    +            
    +          
    +        
    +        
    +          EXT_MEM_PMS_LOCK
    +          APB_CTRL_EXT_MEM_PMS_LOCK_REG
    +          0x20
    +          0x20
    +          
    +            
    +              EXT_MEM_PMS_LOCK
    +              reg_ext_mem_pms_lock
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          FLASH_ACE0_ATTR
    +          APB_CTRL_FLASH_ACE0_ATTR_REG
    +          0x28
    +          0x20
    +          0x00000003
    +          
    +            
    +              FLASH_ACE0_ATTR
    +              reg_flash_ace0_attr
    +              0
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          FLASH_ACE1_ATTR
    +          APB_CTRL_FLASH_ACE1_ATTR_REG
    +          0x2C
    +          0x20
    +          0x00000003
    +          
    +            
    +              FLASH_ACE1_ATTR
    +              reg_flash_ace1_attr
    +              0
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          FLASH_ACE2_ATTR
    +          APB_CTRL_FLASH_ACE2_ATTR_REG
    +          0x30
    +          0x20
    +          0x00000003
    +          
    +            
    +              FLASH_ACE2_ATTR
    +              reg_flash_ace2_attr
    +              0
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          FLASH_ACE3_ATTR
    +          APB_CTRL_FLASH_ACE3_ATTR_REG
    +          0x34
    +          0x20
    +          0x00000003
    +          
    +            
    +              FLASH_ACE3_ATTR
    +              reg_flash_ace3_attr
    +              0
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          FLASH_ACE0_ADDR
    +          APB_CTRL_FLASH_ACE0_ADDR_REG
    +          0x38
    +          0x20
    +          
    +            
    +              S
    +              reg_flash_ace0_addr_s
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          FLASH_ACE1_ADDR
    +          APB_CTRL_FLASH_ACE1_ADDR_REG
    +          0x3C
    +          0x20
    +          0x00400000
    +          
    +            
    +              S
    +              reg_flash_ace1_addr_s
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          FLASH_ACE2_ADDR
    +          APB_CTRL_FLASH_ACE2_ADDR_REG
    +          0x40
    +          0x20
    +          0x00800000
    +          
    +            
    +              S
    +              reg_flash_ace2_addr_s
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          FLASH_ACE3_ADDR
    +          APB_CTRL_FLASH_ACE3_ADDR_REG
    +          0x44
    +          0x20
    +          0x00C00000
    +          
    +            
    +              S
    +              reg_flash_ace3_addr_s
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          FLASH_ACE0_SIZE
    +          APB_CTRL_FLASH_ACE0_SIZE_REG
    +          0x48
    +          0x20
    +          0x00000400
    +          
    +            
    +              FLASH_ACE0_SIZE
    +              reg_flash_ace0_size
    +              0
    +              13
    +              read-write
    +            
    +          
    +        
    +        
    +          FLASH_ACE1_SIZE
    +          APB_CTRL_FLASH_ACE1_SIZE_REG
    +          0x4C
    +          0x20
    +          0x00000400
    +          
    +            
    +              FLASH_ACE1_SIZE
    +              reg_flash_ace1_size
    +              0
    +              13
    +              read-write
    +            
    +          
    +        
    +        
    +          FLASH_ACE2_SIZE
    +          APB_CTRL_FLASH_ACE2_SIZE_REG
    +          0x50
    +          0x20
    +          0x00000400
    +          
    +            
    +              FLASH_ACE2_SIZE
    +              reg_flash_ace2_size
    +              0
    +              13
    +              read-write
    +            
    +          
    +        
    +        
    +          FLASH_ACE3_SIZE
    +          APB_CTRL_FLASH_ACE3_SIZE_REG
    +          0x54
    +          0x20
    +          0x00000400
    +          
    +            
    +              FLASH_ACE3_SIZE
    +              reg_flash_ace3_size
    +              0
    +              13
    +              read-write
    +            
    +          
    +        
    +        
    +          SPI_MEM_PMS_CTRL
    +          APB_CTRL_SPI_MEM_PMS_CTRL_REG
    +          0x88
    +          0x20
    +          
    +            
    +              SPI_MEM_REJECT_INT
    +              reg_spi_mem_reject_int
    +              0
    +              1
    +              read-only
    +            
    +            
    +              SPI_MEM_REJECT_CLR
    +              reg_spi_mem_reject_clr
    +              1
    +              1
    +              write-only
    +            
    +            
    +              SPI_MEM_REJECT_CDE
    +              reg_spi_mem_reject_cde
    +              2
    +              5
    +              read-only
    +            
    +          
    +        
    +        
    +          SPI_MEM_REJECT_ADDR
    +          APB_CTRL_SPI_MEM_REJECT_ADDR_REG
    +          0x8C
    +          0x20
    +          
    +            
    +              SPI_MEM_REJECT_ADDR
    +              reg_spi_mem_reject_addr
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          SDIO_CTRL
    +          APB_CTRL_SDIO_CTRL_REG
    +          0x90
    +          0x20
    +          
    +            
    +              SDIO_WIN_ACCESS_EN
    +              reg_sdio_win_access_en
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          REDCY_SIG0
    +          APB_CTRL_REDCY_SIG0_REG
    +          0x94
    +          0x20
    +          
    +            
    +              REDCY_SIG0
    +              reg_redcy_sig0
    +              0
    +              31
    +              read-write
    +            
    +            
    +              REDCY_ANDOR
    +              reg_redcy_andor
    +              31
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          REDCY_SIG1
    +          APB_CTRL_REDCY_SIG1_REG
    +          0x98
    +          0x20
    +          
    +            
    +              REDCY_SIG1
    +              reg_redcy_sig1
    +              0
    +              31
    +              read-write
    +            
    +            
    +              REDCY_NANDOR
    +              reg_redcy_nandor
    +              31
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          FRONT_END_MEM_PD
    +          APB_CTRL_FRONT_END_MEM_PD_REG
    +          0x9C
    +          0x20
    +          0x00000015
    +          
    +            
    +              AGC_MEM_FORCE_PU
    +              reg_agc_mem_force_pu
    +              0
    +              1
    +              read-write
    +            
    +            
    +              AGC_MEM_FORCE_PD
    +              reg_agc_mem_force_pd
    +              1
    +              1
    +              read-write
    +            
    +            
    +              PBUS_MEM_FORCE_PU
    +              reg_pbus_mem_force_pu
    +              2
    +              1
    +              read-write
    +            
    +            
    +              PBUS_MEM_FORCE_PD
    +              reg_pbus_mem_force_pd
    +              3
    +              1
    +              read-write
    +            
    +            
    +              DC_MEM_FORCE_PU
    +              reg_dc_mem_force_pu
    +              4
    +              1
    +              read-write
    +            
    +            
    +              DC_MEM_FORCE_PD
    +              reg_dc_mem_force_pd
    +              5
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          RETENTION_CTRL
    +          APB_CTRL_RETENTION_CTRL_REG
    +          0xA0
    +          0x20
    +          
    +            
    +              RETENTION_LINK_ADDR
    +              reg_retention_link_addr
    +              0
    +              27
    +              read-write
    +            
    +            
    +              NOBYPASS_CPU_ISO_RST
    +              reg_nobypass_cpu_iso_rst
    +              27
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CLKGATE_FORCE_ON
    +          APB_CTRL_CLKGATE_FORCE_ON_REG
    +          0xA4
    +          0x20
    +          0x0000003F
    +          
    +            
    +              ROM_CLKGATE_FORCE_ON
    +              reg_rom_clkgate_force_on
    +              0
    +              2
    +              read-write
    +            
    +            
    +              SRAM_CLKGATE_FORCE_ON
    +              reg_sram_clkgate_force_on
    +              2
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          MEM_POWER_DOWN
    +          APB_CTRL_MEM_POWER_DOWN_REG
    +          0xA8
    +          0x20
    +          
    +            
    +              ROM_POWER_DOWN
    +              reg_rom_power_down
    +              0
    +              2
    +              read-write
    +            
    +            
    +              SRAM_POWER_DOWN
    +              reg_sram_power_down
    +              2
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          MEM_POWER_UP
    +          APB_CTRL_MEM_POWER_UP_REG
    +          0xAC
    +          0x20
    +          0x0000003F
    +          
    +            
    +              ROM_POWER_UP
    +              reg_rom_power_up
    +              0
    +              2
    +              read-write
    +            
    +            
    +              SRAM_POWER_UP
    +              reg_sram_power_up
    +              2
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          RND_DATA
    +          APB_CTRL_RND_DATA_REG
    +          0xB0
    +          0x20
    +          
    +            
    +              RND_DATA
    +              reg_rnd_data
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          PERI_BACKUP_CONFIG
    +          APB_CTRL_PERI_BACKUP_CONFIG_REG
    +          0xB4
    +          0x20
    +          0x00006480
    +          
    +            
    +              PERI_BACKUP_FLOW_ERR
    +              reg_peri_backup_flow_err
    +              1
    +              2
    +              read-only
    +            
    +            
    +              PERI_BACKUP_BURST_LIMIT
    +              reg_peri_backup_burst_limit
    +              4
    +              5
    +              read-write
    +            
    +            
    +              PERI_BACKUP_TOUT_THRES
    +              reg_peri_backup_tout_thres
    +              9
    +              10
    +              read-write
    +            
    +            
    +              PERI_BACKUP_SIZE
    +              reg_peri_backup_size
    +              19
    +              10
    +              read-write
    +            
    +            
    +              PERI_BACKUP_START
    +              reg_peri_backup_start
    +              29
    +              1
    +              write-only
    +            
    +            
    +              PERI_BACKUP_TO_MEM
    +              reg_peri_backup_to_mem
    +              30
    +              1
    +              read-write
    +            
    +            
    +              PERI_BACKUP_ENA
    +              reg_peri_backup_ena
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          PERI_BACKUP_APB_ADDR
    +          APB_CTRL_PERI_BACKUP_APB_ADDR_REG
    +          0xB8
    +          0x20
    +          
    +            
    +              BACKUP_APB_START_ADDR
    +              reg_backup_apb_start_addr
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          PERI_BACKUP_MEM_ADDR
    +          APB_CTRL_PERI_BACKUP_MEM_ADDR_REG
    +          0xBC
    +          0x20
    +          
    +            
    +              BACKUP_MEM_START_ADDR
    +              reg_backup_mem_start_addr
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          PERI_BACKUP_INT_RAW
    +          APB_CTRL_PERI_BACKUP_INT_RAW_REG
    +          0xC0
    +          0x20
    +          
    +            
    +              PERI_BACKUP_DONE_INT_RAW
    +              reg_peri_backup_done_int_raw
    +              0
    +              1
    +              read-only
    +            
    +            
    +              PERI_BACKUP_ERR_INT_RAW
    +              reg_peri_backup_err_int_raw
    +              1
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          PERI_BACKUP_INT_ST
    +          APB_CTRL_PERI_BACKUP_INT_ST_REG
    +          0xC4
    +          0x20
    +          
    +            
    +              PERI_BACKUP_DONE_INT_ST
    +              reg_peri_backup_done_int_st
    +              0
    +              1
    +              read-only
    +            
    +            
    +              PERI_BACKUP_ERR_INT_ST
    +              reg_peri_backup_err_int_st
    +              1
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          PERI_BACKUP_INT_ENA
    +          APB_CTRL_PERI_BACKUP_INT_ENA_REG
    +          0xC8
    +          0x20
    +          
    +            
    +              PERI_BACKUP_DONE_INT_ENA
    +              reg_peri_backup_done_int_ena
    +              0
    +              1
    +              read-write
    +            
    +            
    +              PERI_BACKUP_ERR_INT_ENA
    +              reg_peri_backup_err_int_ena
    +              1
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          PERI_BACKUP_INT_CLR
    +          APB_CTRL_PERI_BACKUP_INT_CLR_REG
    +          0xD0
    +          0x20
    +          
    +            
    +              PERI_BACKUP_DONE_INT_CLR
    +              reg_peri_backup_done_int_clr
    +              0
    +              1
    +              write-only
    +            
    +            
    +              PERI_BACKUP_ERR_INT_CLR
    +              reg_peri_backup_err_int_clr
    +              1
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          DATE
    +          APB_CTRL_DATE_REG
    +          0x3FC
    +          0x20
    +          0x02007210
    +          
    +            
    +              DATE
    +              reg_dateVersion control
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      APB_SARADC
    +      Successive Approximation Register Analog to Digital Converter
    +      APB_SARADC
    +      0x60040000
    +      
    +        0x0
    +        0x68
    +        registers
    +      
    +      
    +        APB_ADC
    +        43
    +      
    +      
    +        
    +          CTRL
    +          digital saradc configure register
    +          0x0
    +          0x20
    +          0x40038240
    +          
    +            
    +              SARADC_START_FORCE
    +              select software enable saradc sample
    +              0
    +              1
    +              read-write
    +            
    +            
    +              SARADC_START
    +              software enable saradc sample
    +              1
    +              1
    +              read-write
    +            
    +            
    +              SARADC_SAR_CLK_GATED
    +              SAR clock gated
    +              6
    +              1
    +              read-write
    +            
    +            
    +              SARADC_SAR_CLK_DIV
    +              SAR clock divider
    +              7
    +              8
    +              read-write
    +            
    +            
    +              SARADC_SAR_PATT_LEN
    +              0 ~ 15 means length 1 ~ 16
    +              15
    +              3
    +              read-write
    +            
    +            
    +              SARADC_SAR_PATT_P_CLEAR
    +              clear the pointer of pattern table for DIG ADC1 CTRL
    +              23
    +              1
    +              read-write
    +            
    +            
    +              SARADC_XPD_SAR_FORCE
    +              force option to xpd sar blocks
    +              27
    +              2
    +              read-write
    +            
    +            
    +              SARADC_WAIT_ARB_CYCLE
    +              wait arbit signal stable after sar_done
    +              30
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          CTRL2
    +          digital saradc configure register
    +          0x4
    +          0x20
    +          0x0000A1FE
    +          
    +            
    +              SARADC_MEAS_NUM_LIMIT
    +              enable max meas num
    +              0
    +              1
    +              read-write
    +            
    +            
    +              SARADC_MAX_MEAS_NUM
    +              max conversion number
    +              1
    +              8
    +              read-write
    +            
    +            
    +              SARADC_SAR1_INV
    +              1: data to DIG ADC1 CTRL is inverted, otherwise not
    +              9
    +              1
    +              read-write
    +            
    +            
    +              SARADC_SAR2_INV
    +              1: data to DIG ADC2 CTRL is inverted, otherwise not
    +              10
    +              1
    +              read-write
    +            
    +            
    +              SARADC_TIMER_TARGET
    +              to set saradc timer target
    +              12
    +              12
    +              read-write
    +            
    +            
    +              SARADC_TIMER_EN
    +              to enable saradc timer trigger
    +              24
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          FILTER_CTRL1
    +          digital saradc configure register
    +          0x8
    +          0x20
    +          
    +            
    +              APB_SARADC_FILTER_FACTOR1
    +              Factor of saradc filter1
    +              26
    +              3
    +              read-write
    +            
    +            
    +              APB_SARADC_FILTER_FACTOR0
    +              Factor of saradc filter0
    +              29
    +              3
    +              read-write
    +            
    +          
    +        
    +        
    +          FSM_WAIT
    +          digital saradc configure register
    +          0xC
    +          0x20
    +          0x00FF0808
    +          
    +            
    +              SARADC_XPD_WAIT
    +              saradc_xpd_wait
    +              0
    +              8
    +              read-write
    +            
    +            
    +              SARADC_RSTB_WAIT
    +              saradc_rstb_wait
    +              8
    +              8
    +              read-write
    +            
    +            
    +              SARADC_STANDBY_WAIT
    +              saradc_standby_wait
    +              16
    +              8
    +              read-write
    +            
    +          
    +        
    +        
    +          SAR1_STATUS
    +          digital saradc configure register
    +          0x10
    +          0x20
    +          
    +            
    +              SARADC_SAR1_STATUS
    +              saradc1 status about data and channel
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          SAR2_STATUS
    +          digital saradc configure register
    +          0x14
    +          0x20
    +          
    +            
    +              SARADC_SAR2_STATUS
    +              saradc2 status about data and channel
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          SAR_PATT_TAB1
    +          digital saradc configure register
    +          0x18
    +          0x20
    +          
    +            
    +              SARADC_SAR_PATT_TAB1
    +              item 0 ~ 3 for pattern table 1 (each item one byte)
    +              0
    +              24
    +              read-write
    +            
    +          
    +        
    +        
    +          SAR_PATT_TAB2
    +          digital saradc configure register
    +          0x1C
    +          0x20
    +          
    +            
    +              SARADC_SAR_PATT_TAB2
    +              Item 4 ~ 7 for pattern table 1 (each item one byte)
    +              0
    +              24
    +              read-write
    +            
    +          
    +        
    +        
    +          ONETIME_SAMPLE
    +          digital saradc configure register
    +          0x20
    +          0x20
    +          0x1A000000
    +          
    +            
    +              SARADC_ONETIME_ATTEN
    +              configure onetime atten
    +              23
    +              2
    +              read-write
    +            
    +            
    +              SARADC_ONETIME_CHANNEL
    +              configure onetime channel
    +              25
    +              4
    +              read-write
    +            
    +            
    +              SARADC_ONETIME_START
    +              trigger adc onetime sample
    +              29
    +              1
    +              read-write
    +            
    +            
    +              SARADC2_ONETIME_SAMPLE
    +              enable adc2 onetime sample
    +              30
    +              1
    +              read-write
    +            
    +            
    +              SARADC1_ONETIME_SAMPLE
    +              enable adc1 onetime sample
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          ARB_CTRL
    +          digital saradc configure register
    +          0x24
    +          0x20
    +          0x00000900
    +          
    +            
    +              ADC_ARB_APB_FORCE
    +              adc2 arbiter force to enableapb controller
    +              2
    +              1
    +              read-write
    +            
    +            
    +              ADC_ARB_RTC_FORCE
    +              adc2 arbiter force to enable rtc controller
    +              3
    +              1
    +              read-write
    +            
    +            
    +              ADC_ARB_WIFI_FORCE
    +              adc2 arbiter force to enable wifi controller
    +              4
    +              1
    +              read-write
    +            
    +            
    +              ADC_ARB_GRANT_FORCE
    +              adc2 arbiter force grant
    +              5
    +              1
    +              read-write
    +            
    +            
    +              ADC_ARB_APB_PRIORITY
    +              Set adc2 arbiterapb priority
    +              6
    +              2
    +              read-write
    +            
    +            
    +              ADC_ARB_RTC_PRIORITY
    +              Set adc2 arbiter rtc priority
    +              8
    +              2
    +              read-write
    +            
    +            
    +              ADC_ARB_WIFI_PRIORITY
    +              Set adc2 arbiter wifi priority
    +              10
    +              2
    +              read-write
    +            
    +            
    +              ADC_ARB_FIX_PRIORITY
    +              adc2 arbiter uses fixed priority
    +              12
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          FILTER_CTRL0
    +          digital saradc configure register
    +          0x28
    +          0x20
    +          0x03740000
    +          
    +            
    +              APB_SARADC_FILTER_CHANNEL1
    +              configure filter1 to adc channel
    +              18
    +              4
    +              read-write
    +            
    +            
    +              APB_SARADC_FILTER_CHANNEL0
    +              configure filter0 to adc channel
    +              22
    +              4
    +              read-write
    +            
    +            
    +              APB_SARADC_FILTER_RESET
    +              enable apb_adc1_filter
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          SAR1DATA_STATUS
    +          digital saradc configure register
    +          0x2C
    +          0x20
    +          
    +            
    +              APB_SARADC1_DATA
    +              saradc1 data
    +              0
    +              17
    +              read-only
    +            
    +          
    +        
    +        
    +          SAR2DATA_STATUS
    +          digital saradc configure register
    +          0x30
    +          0x20
    +          
    +            
    +              APB_SARADC2_DATA
    +              saradc2 data
    +              0
    +              17
    +              read-only
    +            
    +          
    +        
    +        
    +          THRES0_CTRL
    +          digital saradc configure register
    +          0x34
    +          0x20
    +          0x0003FFED
    +          
    +            
    +              APB_SARADC_THRES0_CHANNEL
    +              configure thres0 to adc channel
    +              0
    +              4
    +              read-write
    +            
    +            
    +              APB_SARADC_THRES0_HIGH
    +              saradc thres0 monitor thres
    +              5
    +              13
    +              read-write
    +            
    +            
    +              APB_SARADC_THRES0_LOW
    +              saradc thres0 monitor thres
    +              18
    +              13
    +              read-write
    +            
    +          
    +        
    +        
    +          THRES1_CTRL
    +          digital saradc configure register
    +          0x38
    +          0x20
    +          0x0003FFED
    +          
    +            
    +              APB_SARADC_THRES1_CHANNEL
    +              configure thres1 to adc channel
    +              0
    +              4
    +              read-write
    +            
    +            
    +              APB_SARADC_THRES1_HIGH
    +              saradc thres1 monitor thres
    +              5
    +              13
    +              read-write
    +            
    +            
    +              APB_SARADC_THRES1_LOW
    +              saradc thres1 monitor thres
    +              18
    +              13
    +              read-write
    +            
    +          
    +        
    +        
    +          THRES_CTRL
    +          digital saradc configure register
    +          0x3C
    +          0x20
    +          
    +            
    +              APB_SARADC_THRES_ALL_EN
    +              enable thres to all channel
    +              27
    +              1
    +              read-write
    +            
    +            
    +              APB_SARADC_THRES1_EN
    +              enable thres1
    +              30
    +              1
    +              read-write
    +            
    +            
    +              APB_SARADC_THRES0_EN
    +              enable thres0
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          INT_ENA
    +          digital saradc int register
    +          0x40
    +          0x20
    +          
    +            
    +              APB_SARADC_THRES1_LOW_INT_ENA
    +              saradc thres1 low  interrupt enable
    +              26
    +              1
    +              read-write
    +            
    +            
    +              APB_SARADC_THRES0_LOW_INT_ENA
    +              saradc thres0 low interrupt enable
    +              27
    +              1
    +              read-write
    +            
    +            
    +              APB_SARADC_THRES1_HIGH_INT_ENA
    +              saradc thres1 high interrupt enable
    +              28
    +              1
    +              read-write
    +            
    +            
    +              APB_SARADC_THRES0_HIGH_INT_ENA
    +              saradc thres0 high interrupt enable
    +              29
    +              1
    +              read-write
    +            
    +            
    +              APB_SARADC2_DONE_INT_ENA
    +              saradc2 done interrupt enable
    +              30
    +              1
    +              read-write
    +            
    +            
    +              APB_SARADC1_DONE_INT_ENA
    +              saradc1 done interrupt enable
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          INT_RAW
    +          digital saradc int register
    +          0x44
    +          0x20
    +          
    +            
    +              APB_SARADC_THRES1_LOW_INT_RAW
    +              saradc thres1 low  interrupt raw
    +              26
    +              1
    +              read-only
    +            
    +            
    +              APB_SARADC_THRES0_LOW_INT_RAW
    +              saradc thres0 low interrupt raw
    +              27
    +              1
    +              read-only
    +            
    +            
    +              APB_SARADC_THRES1_HIGH_INT_RAW
    +              saradc thres1 high interrupt raw
    +              28
    +              1
    +              read-only
    +            
    +            
    +              APB_SARADC_THRES0_HIGH_INT_RAW
    +              saradc thres0 high interrupt raw
    +              29
    +              1
    +              read-only
    +            
    +            
    +              APB_SARADC2_DONE_INT_RAW
    +              saradc2 done interrupt raw
    +              30
    +              1
    +              read-only
    +            
    +            
    +              APB_SARADC1_DONE_INT_RAW
    +              saradc1 done interrupt raw
    +              31
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_ST
    +          digital saradc int register
    +          0x48
    +          0x20
    +          
    +            
    +              APB_SARADC_THRES1_LOW_INT_ST
    +              saradc thres1 low  interrupt state
    +              26
    +              1
    +              read-only
    +            
    +            
    +              APB_SARADC_THRES0_LOW_INT_ST
    +              saradc thres0 low interrupt state
    +              27
    +              1
    +              read-only
    +            
    +            
    +              APB_SARADC_THRES1_HIGH_INT_ST
    +              saradc thres1 high interrupt state
    +              28
    +              1
    +              read-only
    +            
    +            
    +              APB_SARADC_THRES0_HIGH_INT_ST
    +              saradc thres0 high interrupt state
    +              29
    +              1
    +              read-only
    +            
    +            
    +              APB_SARADC2_DONE_INT_ST
    +              saradc2 done interrupt state
    +              30
    +              1
    +              read-only
    +            
    +            
    +              APB_SARADC1_DONE_INT_ST
    +              saradc1 done interrupt state
    +              31
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_CLR
    +          digital saradc int register
    +          0x4C
    +          0x20
    +          
    +            
    +              APB_SARADC_THRES1_LOW_INT_CLR
    +              saradc thres1 low  interrupt clear
    +              26
    +              1
    +              write-only
    +            
    +            
    +              APB_SARADC_THRES0_LOW_INT_CLR
    +              saradc thres0 low interrupt clear
    +              27
    +              1
    +              write-only
    +            
    +            
    +              APB_SARADC_THRES1_HIGH_INT_CLR
    +              saradc thres1 high interrupt clear
    +              28
    +              1
    +              write-only
    +            
    +            
    +              APB_SARADC_THRES0_HIGH_INT_CLR
    +              saradc thres0 high interrupt clear
    +              29
    +              1
    +              write-only
    +            
    +            
    +              APB_SARADC2_DONE_INT_CLR
    +              saradc2 done interrupt clear
    +              30
    +              1
    +              write-only
    +            
    +            
    +              APB_SARADC1_DONE_INT_CLR
    +              saradc1 done interrupt clear
    +              31
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          DMA_CONF
    +          digital saradc configure register
    +          0x50
    +          0x20
    +          0x000000FF
    +          
    +            
    +              APB_ADC_EOF_NUM
    +              the dma_in_suc_eof gen when sample cnt = spi_eof_num
    +              0
    +              16
    +              read-write
    +            
    +            
    +              APB_ADC_RESET_FSM
    +              reset_apb_adc_state
    +              30
    +              1
    +              read-write
    +            
    +            
    +              APB_ADC_TRANS
    +              enable apb_adc use spi_dma
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CLKM_CONF
    +          digital saradc configure register
    +          0x54
    +          0x20
    +          0x00000004
    +          
    +            
    +              CLKM_DIV_NUM
    +              Integral I2S clock divider value
    +              0
    +              8
    +              read-write
    +            
    +            
    +              CLKM_DIV_B
    +              Fractional clock divider numerator value
    +              8
    +              6
    +              read-write
    +            
    +            
    +              CLKM_DIV_A
    +              Fractional clock divider denominator value
    +              14
    +              6
    +              read-write
    +            
    +            
    +              CLK_EN
    +              reg clk en
    +              20
    +              1
    +              read-write
    +            
    +            
    +              CLK_SEL
    +              Set this bit to enable clk_apll
    +              21
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          APB_TSENS_CTRL
    +          digital tsens configure register
    +          0x58
    +          0x20
    +          0x00018000
    +          
    +            
    +              TSENS_OUT
    +              temperature sensor data out
    +              0
    +              8
    +              read-only
    +            
    +            
    +              TSENS_IN_INV
    +              invert temperature sensor data
    +              13
    +              1
    +              read-write
    +            
    +            
    +              TSENS_CLK_DIV
    +              temperature sensor clock divider
    +              14
    +              8
    +              read-write
    +            
    +            
    +              TSENS_PU
    +              temperature sensor power up
    +              22
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          TSENS_CTRL2
    +          digital tsens configure register
    +          0x5C
    +          0x20
    +          0x00004002
    +          
    +            
    +              TSENS_XPD_WAIT
    +              the time that power up tsens need wait
    +              0
    +              12
    +              read-write
    +            
    +            
    +              TSENS_XPD_FORCE
    +              force power up tsens
    +              12
    +              2
    +              read-write
    +            
    +            
    +              TSENS_CLK_INV
    +              inv tsens clk
    +              14
    +              1
    +              read-write
    +            
    +            
    +              TSENS_CLK_SEL
    +              tsens clk select
    +              15
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CALI
    +          digital saradc configure register
    +          0x60
    +          0x20
    +          0x00008000
    +          
    +            
    +              APB_SARADC_CALI_CFG
    +              saradc cali factor
    +              0
    +              17
    +              read-write
    +            
    +          
    +        
    +        
    +          CTRL_DATE
    +          version
    +          0x3FC
    +          0x20
    +          0x02007171
    +          
    +            
    +              DATE
    +              version
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      ASSIST_DEBUG
    +      Debug Assist
    +      ASSIST_DEBUG
    +      0x600CE000
    +      
    +        0x0
    +        0xA0
    +        registers
    +      
    +      
    +        ASSIST_DEBUG
    +        54
    +      
    +      
    +        
    +          C0RE_0_MONTR_ENA
    +          ASSIST_DEBUG_C0RE_0_MONTR_ENA_REG
    +          0x0
    +          0x20
    +          
    +            
    +              CORE_0_AREA_DRAM0_0_RD_ENA
    +              reg_core_0_area_dram0_0_rd_ena
    +              0
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_AREA_DRAM0_0_WR_ENA
    +              reg_core_0_area_dram0_0_wr_ena
    +              1
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_AREA_DRAM0_1_RD_ENA
    +              reg_core_0_area_dram0_1_rd_ena
    +              2
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_AREA_DRAM0_1_WR_ENA
    +              reg_core_0_area_dram0_1_wr_ena
    +              3
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_AREA_PIF_0_RD_ENA
    +              reg_core_0_area_pif_0_rd_ena
    +              4
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_AREA_PIF_0_WR_ENA
    +              reg_core_0_area_pif_0_wr_ena
    +              5
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_AREA_PIF_1_RD_ENA
    +              reg_core_0_area_pif_1_rd_ena
    +              6
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_AREA_PIF_1_WR_ENA
    +              reg_core_0_area_pif_1_wr_ena
    +              7
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_SP_SPILL_MIN_ENA
    +              reg_core_0_sp_spill_min_ena
    +              8
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_SP_SPILL_MAX_ENA
    +              reg_core_0_sp_spill_max_ena
    +              9
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_IRAM0_EXCEPTION_MONITOR_ENA
    +              reg_core_0_iram0_exception_monitor_ena
    +              10
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_DRAM0_EXCEPTION_MONITOR_ENA
    +              reg_core_0_dram0_exception_monitor_ena
    +              11
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_INTR_RAW
    +          ASSIST_DEBUG_CORE_0_INTR_RAW_REG
    +          0x4
    +          0x20
    +          
    +            
    +              CORE_0_AREA_DRAM0_0_RD_RAW
    +              reg_core_0_area_dram0_0_rd_raw
    +              0
    +              1
    +              read-only
    +            
    +            
    +              CORE_0_AREA_DRAM0_0_WR_RAW
    +              reg_core_0_area_dram0_0_wr_raw
    +              1
    +              1
    +              read-only
    +            
    +            
    +              CORE_0_AREA_DRAM0_1_RD_RAW
    +              reg_core_0_area_dram0_1_rd_raw
    +              2
    +              1
    +              read-only
    +            
    +            
    +              CORE_0_AREA_DRAM0_1_WR_RAW
    +              reg_core_0_area_dram0_1_wr_raw
    +              3
    +              1
    +              read-only
    +            
    +            
    +              CORE_0_AREA_PIF_0_RD_RAW
    +              reg_core_0_area_pif_0_rd_raw
    +              4
    +              1
    +              read-only
    +            
    +            
    +              CORE_0_AREA_PIF_0_WR_RAW
    +              reg_core_0_area_pif_0_wr_raw
    +              5
    +              1
    +              read-only
    +            
    +            
    +              CORE_0_AREA_PIF_1_RD_RAW
    +              reg_core_0_area_pif_1_rd_raw
    +              6
    +              1
    +              read-only
    +            
    +            
    +              CORE_0_AREA_PIF_1_WR_RAW
    +              reg_core_0_area_pif_1_wr_raw
    +              7
    +              1
    +              read-only
    +            
    +            
    +              CORE_0_SP_SPILL_MIN_RAW
    +              reg_core_0_sp_spill_min_raw
    +              8
    +              1
    +              read-only
    +            
    +            
    +              CORE_0_SP_SPILL_MAX_RAW
    +              reg_core_0_sp_spill_max_raw
    +              9
    +              1
    +              read-only
    +            
    +            
    +              CORE_0_IRAM0_EXCEPTION_MONITOR_RAW
    +              reg_core_0_iram0_exception_monitor_raw
    +              10
    +              1
    +              read-only
    +            
    +            
    +              CORE_0_DRAM0_EXCEPTION_MONITOR_RAW
    +              reg_core_0_dram0_exception_monitor_raw
    +              11
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          CORE_0_INTR_ENA
    +          ASSIST_DEBUG_CORE_0_INTR_ENA_REG
    +          0x8
    +          0x20
    +          
    +            
    +              CORE_0_AREA_DRAM0_0_RD_INTR_ENA
    +              reg_core_0_area_dram0_0_rd_intr_ena
    +              0
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_AREA_DRAM0_0_WR_INTR_ENA
    +              reg_core_0_area_dram0_0_wr_intr_ena
    +              1
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_AREA_DRAM0_1_RD_INTR_ENA
    +              reg_core_0_area_dram0_1_rd_intr_ena
    +              2
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_AREA_DRAM0_1_WR_INTR_ENA
    +              reg_core_0_area_dram0_1_wr_intr_ena
    +              3
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_AREA_PIF_0_RD_INTR_ENA
    +              reg_core_0_area_pif_0_rd_intr_ena
    +              4
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_AREA_PIF_0_WR_INTR_ENA
    +              reg_core_0_area_pif_0_wr_intr_ena
    +              5
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_AREA_PIF_1_RD_INTR_ENA
    +              reg_core_0_area_pif_1_rd_intr_ena
    +              6
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_AREA_PIF_1_WR_INTR_ENA
    +              reg_core_0_area_pif_1_wr_intr_ena
    +              7
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_SP_SPILL_MIN_INTR_ENA
    +              reg_core_0_sp_spill_min_intr_ena
    +              8
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_SP_SPILL_MAX_INTR_ENA
    +              reg_core_0_sp_spill_max_intr_ena
    +              9
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_IRAM0_EXCEPTION_MONITOR_RLS
    +              reg_core_0_iram0_exception_monitor_ena
    +              10
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_DRAM0_EXCEPTION_MONITOR_RLS
    +              reg_core_0_dram0_exception_monitor_ena
    +              11
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_INTR_CLR
    +          ASSIST_DEBUG_CORE_0_INTR_CLR_REG
    +          0xC
    +          0x20
    +          
    +            
    +              CORE_0_AREA_DRAM0_0_RD_CLR
    +              reg_core_0_area_dram0_0_rd_clr
    +              0
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_AREA_DRAM0_0_WR_CLR
    +              reg_core_0_area_dram0_0_wr_clr
    +              1
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_AREA_DRAM0_1_RD_CLR
    +              reg_core_0_area_dram0_1_rd_clr
    +              2
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_AREA_DRAM0_1_WR_CLR
    +              reg_core_0_area_dram0_1_wr_clr
    +              3
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_AREA_PIF_0_RD_CLR
    +              reg_core_0_area_pif_0_rd_clr
    +              4
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_AREA_PIF_0_WR_CLR
    +              reg_core_0_area_pif_0_wr_clr
    +              5
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_AREA_PIF_1_RD_CLR
    +              reg_core_0_area_pif_1_rd_clr
    +              6
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_AREA_PIF_1_WR_CLR
    +              reg_core_0_area_pif_1_wr_clr
    +              7
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_SP_SPILL_MIN_CLR
    +              reg_core_0_sp_spill_min_clr
    +              8
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_SP_SPILL_MAX_CLR
    +              reg_core_0_sp_spill_max_clr
    +              9
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_IRAM0_EXCEPTION_MONITOR_CLR
    +              reg_core_0_iram0_exception_monitor_clr
    +              10
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_DRAM0_EXCEPTION_MONITOR_CLR
    +              reg_core_0_dram0_exception_monitor_clr
    +              11
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_AREA_DRAM0_0_MIN
    +          ASSIST_DEBUG_CORE_0_AREA_DRAM0_0_MIN_REG
    +          0x10
    +          0x20
    +          0xFFFFFFFF
    +          
    +            
    +              CORE_0_AREA_DRAM0_0_MIN
    +              reg_core_0_area_dram0_0_min
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_AREA_DRAM0_0_MAX
    +          ASSIST_DEBUG_CORE_0_AREA_DRAM0_0_MAX_REG
    +          0x14
    +          0x20
    +          
    +            
    +              CORE_0_AREA_DRAM0_0_MAX
    +              reg_core_0_area_dram0_0_max
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_AREA_DRAM0_1_MIN
    +          ASSIST_DEBUG_CORE_0_AREA_DRAM0_1_MIN_REG
    +          0x18
    +          0x20
    +          0xFFFFFFFF
    +          
    +            
    +              CORE_0_AREA_DRAM0_1_MIN
    +              reg_core_0_area_dram0_1_min
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_AREA_DRAM0_1_MAX
    +          ASSIST_DEBUG_CORE_0_AREA_DRAM0_1_MAX_REG
    +          0x1C
    +          0x20
    +          
    +            
    +              CORE_0_AREA_DRAM0_1_MAX
    +              reg_core_0_area_dram0_1_max
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_AREA_PIF_0_MIN
    +          ASSIST_DEBUG_CORE_0_AREA_PIF_0_MIN_REG
    +          0x20
    +          0x20
    +          0xFFFFFFFF
    +          
    +            
    +              CORE_0_AREA_PIF_0_MIN
    +              reg_core_0_area_pif_0_min
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_AREA_PIF_0_MAX
    +          ASSIST_DEBUG_CORE_0_AREA_PIF_0_MAX_REG
    +          0x24
    +          0x20
    +          
    +            
    +              CORE_0_AREA_PIF_0_MAX
    +              reg_core_0_area_pif_0_max
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_AREA_PIF_1_MIN
    +          ASSIST_DEBUG_CORE_0_AREA_PIF_1_MIN_REG
    +          0x28
    +          0x20
    +          0xFFFFFFFF
    +          
    +            
    +              CORE_0_AREA_PIF_1_MIN
    +              reg_core_0_area_pif_1_min
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_AREA_PIF_1_MAX
    +          ASSIST_DEBUG_CORE_0_AREA_PIF_1_MAX_REG
    +          0x2C
    +          0x20
    +          
    +            
    +              CORE_0_AREA_PIF_1_MAX
    +              reg_core_0_area_pif_1_max
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_AREA_PC
    +          ASSIST_DEBUG_CORE_0_AREA_PC_REG
    +          0x30
    +          0x20
    +          
    +            
    +              CORE_0_AREA_PC
    +              reg_core_0_area_pc
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          CORE_0_AREA_SP
    +          ASSIST_DEBUG_CORE_0_AREA_SP_REG
    +          0x34
    +          0x20
    +          
    +            
    +              CORE_0_AREA_SP
    +              reg_core_0_area_sp
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          CORE_0_SP_MIN
    +          ASSIST_DEBUG_CORE_0_SP_MIN_REG
    +          0x38
    +          0x20
    +          
    +            
    +              CORE_0_SP_MIN
    +              reg_core_0_sp_min
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_SP_MAX
    +          ASSIST_DEBUG_CORE_0_SP_MAX_REG
    +          0x3C
    +          0x20
    +          0xFFFFFFFF
    +          
    +            
    +              CORE_0_SP_MAX
    +              reg_core_0_sp_max
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_SP_PC
    +          ASSIST_DEBUG_CORE_0_SP_PC_REG
    +          0x40
    +          0x20
    +          
    +            
    +              CORE_0_SP_PC
    +              reg_core_0_sp_pc
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          CORE_0_RCD_EN
    +          ASSIST_DEBUG_CORE_0_RCD_EN_REG
    +          0x44
    +          0x20
    +          
    +            
    +              CORE_0_RCD_RECORDEN
    +              reg_core_0_rcd_recorden
    +              0
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_RCD_PDEBUGEN
    +              reg_core_0_rcd_pdebugen
    +              1
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_RCD_PDEBUGPC
    +          ASSIST_DEBUG_CORE_0_RCD_PDEBUGPC_REG
    +          0x48
    +          0x20
    +          
    +            
    +              CORE_0_RCD_PDEBUGPC
    +              reg_core_0_rcd_pdebugpc
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          CORE_0_RCD_PDEBUGSP
    +          ASSIST_DEBUG_CORE_0_RCD_PDEBUGSP_REG
    +          0x4C
    +          0x20
    +          
    +            
    +              CORE_0_RCD_PDEBUGSP
    +              reg_core_0_rcd_pdebugsp
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          CORE_0_IRAM0_EXCEPTION_MONITOR_0
    +          ASSIST_DEBUG_CORE_0_RCD_PDEBUGSP_REG
    +          0x50
    +          0x20
    +          
    +            
    +              CORE_0_IRAM0_RECORDING_ADDR_0
    +              reg_core_0_iram0_recording_addr_0
    +              0
    +              24
    +              read-only
    +            
    +            
    +              CORE_0_IRAM0_RECORDING_WR_0
    +              reg_core_0_iram0_recording_wr_0
    +              24
    +              1
    +              read-only
    +            
    +            
    +              CORE_0_IRAM0_RECORDING_LOADSTORE_0
    +              reg_core_0_iram0_recording_loadstore_0
    +              25
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          CORE_0_IRAM0_EXCEPTION_MONITOR_1
    +          ASSIST_DEBUG_CORE_0_IRAM0_EXCEPTION_MONITOR_1_REG
    +          0x54
    +          0x20
    +          
    +            
    +              CORE_0_IRAM0_RECORDING_ADDR_1
    +              reg_core_0_iram0_recording_addr_1
    +              0
    +              24
    +              read-only
    +            
    +            
    +              CORE_0_IRAM0_RECORDING_WR_1
    +              reg_core_0_iram0_recording_wr_1
    +              24
    +              1
    +              read-only
    +            
    +            
    +              CORE_0_IRAM0_RECORDING_LOADSTORE_1
    +              reg_core_0_iram0_recording_loadstore_1
    +              25
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          CORE_0_DRAM0_EXCEPTION_MONITOR_0
    +          ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_0_REG
    +          0x58
    +          0x20
    +          
    +            
    +              CORE_0_DRAM0_RECORDING_ADDR_0
    +              reg_core_0_dram0_recording_addr_0
    +              0
    +              24
    +              read-only
    +            
    +            
    +              CORE_0_DRAM0_RECORDING_WR_0
    +              reg_core_0_dram0_recording_wr_0
    +              24
    +              1
    +              read-only
    +            
    +            
    +              CORE_0_DRAM0_RECORDING_BYTEEN_0
    +              reg_core_0_dram0_recording_byteen_0
    +              25
    +              4
    +              read-only
    +            
    +          
    +        
    +        
    +          CORE_0_DRAM0_EXCEPTION_MONITOR_1
    +          ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_1_REG
    +          0x5C
    +          0x20
    +          
    +            
    +              CORE_0_DRAM0_RECORDING_PC_0
    +              reg_core_0_dram0_recording_pc_0
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          CORE_0_DRAM0_EXCEPTION_MONITOR_2
    +          ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_1_REG
    +          0x60
    +          0x20
    +          
    +            
    +              CORE_0_DRAM0_RECORDING_ADDR_1
    +              reg_core_0_dram0_recording_addr_1
    +              0
    +              24
    +              read-only
    +            
    +            
    +              CORE_0_DRAM0_RECORDING_WR_1
    +              reg_core_0_dram0_recording_wr_1
    +              24
    +              1
    +              read-only
    +            
    +            
    +              CORE_0_DRAM0_RECORDING_BYTEEN_1
    +              reg_core_0_dram0_recording_byteen_1
    +              25
    +              4
    +              read-only
    +            
    +          
    +        
    +        
    +          CORE_0_DRAM0_EXCEPTION_MONITOR_3
    +          ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_3_REG
    +          0x64
    +          0x20
    +          
    +            
    +              CORE_0_DRAM0_RECORDING_PC_1
    +              reg_core_0_dram0_recording_pc_1
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_0
    +          ASSIST_DEBUG_CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_0_REG
    +          0x68
    +          0x20
    +          
    +            
    +              CORE_X_IRAM0_DRAM0_LIMIT_CYCLE_0
    +              reg_core_x_iram0_dram0_limit_cycle_0
    +              0
    +              20
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_1
    +          ASSIST_DEBUG_CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_1_REG
    +          0x6C
    +          0x20
    +          
    +            
    +              CORE_X_IRAM0_DRAM0_LIMIT_CYCLE_1
    +              reg_core_x_iram0_dram0_limit_cycle_1
    +              0
    +              20
    +              read-write
    +            
    +          
    +        
    +        
    +          LOG_SETTING
    +          ASSIST_DEBUG_LOG_SETTING
    +          0x70
    +          0x20
    +          0x00000080
    +          
    +            
    +              LOG_ENA
    +              reg_log_ena
    +              0
    +              3
    +              read-write
    +            
    +            
    +              LOG_MODE
    +              reg_log_mode
    +              3
    +              4
    +              read-write
    +            
    +            
    +              LOG_MEM_LOOP_ENABLE
    +              reg_log_mem_loop_enable
    +              7
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          LOG_DATA_0
    +          ASSIST_DEBUG_LOG_DATA_0_REG
    +          0x74
    +          0x20
    +          
    +            
    +              LOG_DATA_0
    +              reg_log_data_0
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          LOG_DATA_MASK
    +          ASSIST_DEBUG_LOG_DATA_MASK_REG
    +          0x78
    +          0x20
    +          
    +            
    +              LOG_DATA_SIZE
    +              reg_log_data_size
    +              0
    +              16
    +              read-write
    +            
    +          
    +        
    +        
    +          LOG_MIN
    +          ASSIST_DEBUG_LOG_MIN_REG
    +          0x7C
    +          0x20
    +          
    +            
    +              LOG_MIN
    +              reg_log_min
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          LOG_MAX
    +          ASSIST_DEBUG_LOG_MAX_REG
    +          0x80
    +          0x20
    +          
    +            
    +              LOG_MAX
    +              reg_log_max
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          LOG_MEM_START
    +          ASSIST_DEBUG_LOG_MEM_START_REG
    +          0x84
    +          0x20
    +          
    +            
    +              LOG_MEM_START
    +              reg_log_mem_start
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          LOG_MEM_END
    +          ASSIST_DEBUG_LOG_MEM_END_REG
    +          0x88
    +          0x20
    +          
    +            
    +              LOG_MEM_END
    +              reg_log_mem_end
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          LOG_MEM_WRITING_ADDR
    +          ASSIST_DEBUG_LOG_MEM_WRITING_ADDR_REG
    +          0x8C
    +          0x20
    +          
    +            
    +              LOG_MEM_WRITING_ADDR
    +              reg_log_mem_writing_addr
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          LOG_MEM_FULL_FLAG
    +          ASSIST_DEBUG_LOG_MEM_FULL_FLAG_REG
    +          0x90
    +          0x20
    +          
    +            
    +              LOG_MEM_FULL_FLAG
    +              reg_log_mem_full_flag
    +              0
    +              1
    +              read-only
    +            
    +            
    +              CLR_LOG_MEM_FULL_FLAG
    +              reg_clr_log_mem_full_flag
    +              1
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          C0RE_0_LASTPC_BEFORE_EXCEPTION
    +          ASSIST_DEBUG_C0RE_0_LASTPC_BEFORE_EXCEPTION
    +          0x94
    +          0x20
    +          
    +            
    +              CORE_0_LASTPC_BEFORE_EXC
    +              reg_core_0_lastpc_before_exc
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          C0RE_0_DEBUG_MODE
    +          ASSIST_DEBUG_C0RE_0_DEBUG_MODE
    +          0x98
    +          0x20
    +          
    +            
    +              CORE_0_DEBUG_MODE
    +              reg_core_0_debug_mode
    +              0
    +              1
    +              read-only
    +            
    +            
    +              CORE_0_DEBUG_MODULE_ACTIVE
    +              reg_core_0_debug_module_active
    +              1
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          DATE
    +          ASSIST_DEBUG_DATE_REG
    +          0x1FC
    +          0x20
    +          0x02008010
    +          
    +            
    +              ASSIST_DEBUG_DATE
    +              reg_assist_debug_date
    +              0
    +              28
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      DMA
    +      DMA (Direct Memory Access) Controller
    +      DMA
    +      0x6003F000
    +      
    +        0x0
    +        0x174
    +        registers
    +      
    +      
    +        DMA_CH0
    +        44
    +      
    +      
    +        DMA_CH1
    +        45
    +      
    +      
    +        DMA_CH2
    +        46
    +      
    +      
    +        
    +          INT_RAW_CH0
    +          DMA_INT_RAW_CH0_REG.
    +          0x0
    +          0x20
    +          
    +            
    +              IN_DONE_CH0_INT_RAW
    +              The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 0.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              IN_SUC_EOF_CH0_INT_RAW
    +              The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 0. For UHCI0, the raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received and no data error is detected for Rx channel 0.
    +              1
    +              1
    +              read-only
    +            
    +            
    +              IN_ERR_EOF_CH0_INT_RAW
    +              The raw interrupt bit turns to high level when data error is detected only in the case that the peripheral is UHCI0 for Rx channel 0. For other peripherals, this raw interrupt is reserved.
    +              2
    +              1
    +              read-only
    +            
    +            
    +              OUT_DONE_CH0_INT_RAW
    +              The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been transmitted to peripherals for Tx channel 0.
    +              3
    +              1
    +              read-only
    +            
    +            
    +              OUT_EOF_CH0_INT_RAW
    +              The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been read from memory for Tx channel 0.
    +              4
    +              1
    +              read-only
    +            
    +            
    +              IN_DSCR_ERR_CH0_INT_RAW
    +              The raw interrupt bit turns to high level when detecting inlink descriptor error, including owner error, the second and third word error of inlink descriptor for Rx channel 0.
    +              5
    +              1
    +              read-only
    +            
    +            
    +              OUT_DSCR_ERR_CH0_INT_RAW
    +              The raw interrupt bit turns to high level when detecting outlink descriptor error, including owner error, the second and third word error of outlink descriptor for Tx channel 0.
    +              6
    +              1
    +              read-only
    +            
    +            
    +              IN_DSCR_EMPTY_CH0_INT_RAW
    +              The raw interrupt bit turns to high level when Rx buffer pointed by inlink is full and receiving data is not completed, but there is no more inlink for Rx channel 0.
    +              7
    +              1
    +              read-only
    +            
    +            
    +              OUT_TOTAL_EOF_CH0_INT_RAW
    +              The raw interrupt bit turns to high level when data corresponding a outlink (includes one link descriptor or few link descriptors) is transmitted out for Tx channel 0.
    +              8
    +              1
    +              read-only
    +            
    +            
    +              INFIFO_OVF_CH0_INT_RAW
    +              This raw interrupt bit turns to high level when level 1 fifo of Rx channel 0 is overflow.
    +              9
    +              1
    +              read-only
    +            
    +            
    +              INFIFO_UDF_CH0_INT_RAW
    +              This raw interrupt bit turns to high level when level 1 fifo of Rx channel 0 is underflow.
    +              10
    +              1
    +              read-only
    +            
    +            
    +              OUTFIFO_OVF_CH0_INT_RAW
    +              This raw interrupt bit turns to high level when level 1 fifo of Tx channel 0 is overflow.
    +              11
    +              1
    +              read-only
    +            
    +            
    +              OUTFIFO_UDF_CH0_INT_RAW
    +              This raw interrupt bit turns to high level when level 1 fifo of Tx channel 0 is underflow.
    +              12
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_ST_CH0
    +          DMA_INT_ST_CH0_REG.
    +          0x4
    +          0x20
    +          
    +            
    +              IN_DONE_CH0_INT_ST
    +              The raw interrupt status bit for the IN_DONE_CH_INT interrupt.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              IN_SUC_EOF_CH0_INT_ST
    +              The raw interrupt status bit for the IN_SUC_EOF_CH_INT interrupt.
    +              1
    +              1
    +              read-only
    +            
    +            
    +              IN_ERR_EOF_CH0_INT_ST
    +              The raw interrupt status bit for the IN_ERR_EOF_CH_INT interrupt.
    +              2
    +              1
    +              read-only
    +            
    +            
    +              OUT_DONE_CH0_INT_ST
    +              The raw interrupt status bit for the OUT_DONE_CH_INT interrupt.
    +              3
    +              1
    +              read-only
    +            
    +            
    +              OUT_EOF_CH0_INT_ST
    +              The raw interrupt status bit for the OUT_EOF_CH_INT interrupt.
    +              4
    +              1
    +              read-only
    +            
    +            
    +              IN_DSCR_ERR_CH0_INT_ST
    +              The raw interrupt status bit for the IN_DSCR_ERR_CH_INT interrupt.
    +              5
    +              1
    +              read-only
    +            
    +            
    +              OUT_DSCR_ERR_CH0_INT_ST
    +              The raw interrupt status bit for the OUT_DSCR_ERR_CH_INT interrupt.
    +              6
    +              1
    +              read-only
    +            
    +            
    +              IN_DSCR_EMPTY_CH0_INT_ST
    +              The raw interrupt status bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    +              7
    +              1
    +              read-only
    +            
    +            
    +              OUT_TOTAL_EOF_CH0_INT_ST
    +              The raw interrupt status bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    +              8
    +              1
    +              read-only
    +            
    +            
    +              INFIFO_OVF_CH0_INT_ST
    +              The raw interrupt status bit for the INFIFO_OVF_L1_CH_INT interrupt.
    +              9
    +              1
    +              read-only
    +            
    +            
    +              INFIFO_UDF_CH0_INT_ST
    +              The raw interrupt status bit for the INFIFO_UDF_L1_CH_INT interrupt.
    +              10
    +              1
    +              read-only
    +            
    +            
    +              OUTFIFO_OVF_CH0_INT_ST
    +              The raw interrupt status bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    +              11
    +              1
    +              read-only
    +            
    +            
    +              OUTFIFO_UDF_CH0_INT_ST
    +              The raw interrupt status bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    +              12
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_ENA_CH0
    +          DMA_INT_ENA_CH0_REG.
    +          0x8
    +          0x20
    +          
    +            
    +              IN_DONE_CH0_INT_ENA
    +              The interrupt enable bit for the IN_DONE_CH_INT interrupt.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              IN_SUC_EOF_CH0_INT_ENA
    +              The interrupt enable bit for the IN_SUC_EOF_CH_INT interrupt.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              IN_ERR_EOF_CH0_INT_ENA
    +              The interrupt enable bit for the IN_ERR_EOF_CH_INT interrupt.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              OUT_DONE_CH0_INT_ENA
    +              The interrupt enable bit for the OUT_DONE_CH_INT interrupt.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              OUT_EOF_CH0_INT_ENA
    +              The interrupt enable bit for the OUT_EOF_CH_INT interrupt.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              IN_DSCR_ERR_CH0_INT_ENA
    +              The interrupt enable bit for the IN_DSCR_ERR_CH_INT interrupt.
    +              5
    +              1
    +              read-write
    +            
    +            
    +              OUT_DSCR_ERR_CH0_INT_ENA
    +              The interrupt enable bit for the OUT_DSCR_ERR_CH_INT interrupt.
    +              6
    +              1
    +              read-write
    +            
    +            
    +              IN_DSCR_EMPTY_CH0_INT_ENA
    +              The interrupt enable bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    +              7
    +              1
    +              read-write
    +            
    +            
    +              OUT_TOTAL_EOF_CH0_INT_ENA
    +              The interrupt enable bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    +              8
    +              1
    +              read-write
    +            
    +            
    +              INFIFO_OVF_CH0_INT_ENA
    +              The interrupt enable bit for the INFIFO_OVF_L1_CH_INT interrupt.
    +              9
    +              1
    +              read-write
    +            
    +            
    +              INFIFO_UDF_CH0_INT_ENA
    +              The interrupt enable bit for the INFIFO_UDF_L1_CH_INT interrupt.
    +              10
    +              1
    +              read-write
    +            
    +            
    +              OUTFIFO_OVF_CH0_INT_ENA
    +              The interrupt enable bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    +              11
    +              1
    +              read-write
    +            
    +            
    +              OUTFIFO_UDF_CH0_INT_ENA
    +              The interrupt enable bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    +              12
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          INT_CLR_CH0
    +          DMA_INT_CLR_CH0_REG.
    +          0xC
    +          0x20
    +          
    +            
    +              IN_DONE_CH0_INT_CLR
    +              Set this bit to clear the IN_DONE_CH_INT interrupt.
    +              0
    +              1
    +              write-only
    +            
    +            
    +              IN_SUC_EOF_CH0_INT_CLR
    +              Set this bit to clear the IN_SUC_EOF_CH_INT interrupt.
    +              1
    +              1
    +              write-only
    +            
    +            
    +              IN_ERR_EOF_CH0_INT_CLR
    +              Set this bit to clear the IN_ERR_EOF_CH_INT interrupt.
    +              2
    +              1
    +              write-only
    +            
    +            
    +              OUT_DONE_CH0_INT_CLR
    +              Set this bit to clear the OUT_DONE_CH_INT interrupt.
    +              3
    +              1
    +              write-only
    +            
    +            
    +              OUT_EOF_CH0_INT_CLR
    +              Set this bit to clear the OUT_EOF_CH_INT interrupt.
    +              4
    +              1
    +              write-only
    +            
    +            
    +              IN_DSCR_ERR_CH0_INT_CLR
    +              Set this bit to clear the IN_DSCR_ERR_CH_INT interrupt.
    +              5
    +              1
    +              write-only
    +            
    +            
    +              OUT_DSCR_ERR_CH0_INT_CLR
    +              Set this bit to clear the OUT_DSCR_ERR_CH_INT interrupt.
    +              6
    +              1
    +              write-only
    +            
    +            
    +              IN_DSCR_EMPTY_CH0_INT_CLR
    +              Set this bit to clear the IN_DSCR_EMPTY_CH_INT interrupt.
    +              7
    +              1
    +              write-only
    +            
    +            
    +              OUT_TOTAL_EOF_CH0_INT_CLR
    +              Set this bit to clear the OUT_TOTAL_EOF_CH_INT interrupt.
    +              8
    +              1
    +              write-only
    +            
    +            
    +              INFIFO_OVF_CH0_INT_CLR
    +              Set this bit to clear the INFIFO_OVF_L1_CH_INT interrupt.
    +              9
    +              1
    +              write-only
    +            
    +            
    +              INFIFO_UDF_CH0_INT_CLR
    +              Set this bit to clear the INFIFO_UDF_L1_CH_INT interrupt.
    +              10
    +              1
    +              write-only
    +            
    +            
    +              OUTFIFO_OVF_CH0_INT_CLR
    +              Set this bit to clear the OUTFIFO_OVF_L1_CH_INT interrupt.
    +              11
    +              1
    +              write-only
    +            
    +            
    +              OUTFIFO_UDF_CH0_INT_CLR
    +              Set this bit to clear the OUTFIFO_UDF_L1_CH_INT interrupt.
    +              12
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          INT_RAW_CH1
    +          DMA_INT_RAW_CH1_REG.
    +          0x10
    +          0x20
    +          
    +            
    +              IN_DONE_CH1_INT_RAW
    +              The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 1.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              IN_SUC_EOF_CH1_INT_RAW
    +              The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 1. For UHCI0, the raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received and no data error is detected for Rx channel 1.
    +              1
    +              1
    +              read-only
    +            
    +            
    +              IN_ERR_EOF_CH1_INT_RAW
    +              The raw interrupt bit turns to high level when data error is detected only in the case that the peripheral is UHCI0 for Rx channel 1. For other peripherals, this raw interrupt is reserved.
    +              2
    +              1
    +              read-only
    +            
    +            
    +              OUT_DONE_CH1_INT_RAW
    +              The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been transmitted to peripherals for Tx channel 1.
    +              3
    +              1
    +              read-only
    +            
    +            
    +              OUT_EOF_CH1_INT_RAW
    +              The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been read from memory for Tx channel 1.
    +              4
    +              1
    +              read-only
    +            
    +            
    +              IN_DSCR_ERR_CH1_INT_RAW
    +              The raw interrupt bit turns to high level when detecting inlink descriptor error, including owner error, the second and third word error of inlink descriptor for Rx channel 1.
    +              5
    +              1
    +              read-only
    +            
    +            
    +              OUT_DSCR_ERR_CH1_INT_RAW
    +              The raw interrupt bit turns to high level when detecting outlink descriptor error, including owner error, the second and third word error of outlink descriptor for Tx channel 1.
    +              6
    +              1
    +              read-only
    +            
    +            
    +              IN_DSCR_EMPTY_CH1_INT_RAW
    +              The raw interrupt bit turns to high level when Rx buffer pointed by inlink is full and receiving data is not completed, but there is no more inlink for Rx channel 1.
    +              7
    +              1
    +              read-only
    +            
    +            
    +              OUT_TOTAL_EOF_CH1_INT_RAW
    +              The raw interrupt bit turns to high level when data corresponding a outlink (includes one link descriptor or few link descriptors) is transmitted out for Tx channel 1.
    +              8
    +              1
    +              read-only
    +            
    +            
    +              INFIFO_OVF_CH1_INT_RAW
    +              This raw interrupt bit turns to high level when level 1 fifo of Rx channel 1 is overflow.
    +              9
    +              1
    +              read-only
    +            
    +            
    +              INFIFO_UDF_CH1_INT_RAW
    +              This raw interrupt bit turns to high level when level 1 fifo of Rx channel 1 is underflow.
    +              10
    +              1
    +              read-only
    +            
    +            
    +              OUTFIFO_OVF_CH1_INT_RAW
    +              This raw interrupt bit turns to high level when level 1 fifo of Tx channel 1 is overflow.
    +              11
    +              1
    +              read-only
    +            
    +            
    +              OUTFIFO_UDF_CH1_INT_RAW
    +              This raw interrupt bit turns to high level when level 1 fifo of Tx channel 1 is underflow.
    +              12
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_ST_CH1
    +          DMA_INT_ST_CH1_REG.
    +          0x14
    +          0x20
    +          
    +            
    +              IN_DONE_CH1_INT_ST
    +              The raw interrupt status bit for the IN_DONE_CH_INT interrupt.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              IN_SUC_EOF_CH1_INT_ST
    +              The raw interrupt status bit for the IN_SUC_EOF_CH_INT interrupt.
    +              1
    +              1
    +              read-only
    +            
    +            
    +              IN_ERR_EOF_CH1_INT_ST
    +              The raw interrupt status bit for the IN_ERR_EOF_CH_INT interrupt.
    +              2
    +              1
    +              read-only
    +            
    +            
    +              OUT_DONE_CH1_INT_ST
    +              The raw interrupt status bit for the OUT_DONE_CH_INT interrupt.
    +              3
    +              1
    +              read-only
    +            
    +            
    +              OUT_EOF_CH1_INT_ST
    +              The raw interrupt status bit for the OUT_EOF_CH_INT interrupt.
    +              4
    +              1
    +              read-only
    +            
    +            
    +              IN_DSCR_ERR_CH1_INT_ST
    +              The raw interrupt status bit for the IN_DSCR_ERR_CH_INT interrupt.
    +              5
    +              1
    +              read-only
    +            
    +            
    +              OUT_DSCR_ERR_CH1_INT_ST
    +              The raw interrupt status bit for the OUT_DSCR_ERR_CH_INT interrupt.
    +              6
    +              1
    +              read-only
    +            
    +            
    +              IN_DSCR_EMPTY_CH1_INT_ST
    +              The raw interrupt status bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    +              7
    +              1
    +              read-only
    +            
    +            
    +              OUT_TOTAL_EOF_CH1_INT_ST
    +              The raw interrupt status bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    +              8
    +              1
    +              read-only
    +            
    +            
    +              INFIFO_OVF_CH1_INT_ST
    +              The raw interrupt status bit for the INFIFO_OVF_L1_CH_INT interrupt.
    +              9
    +              1
    +              read-only
    +            
    +            
    +              INFIFO_UDF_CH1_INT_ST
    +              The raw interrupt status bit for the INFIFO_UDF_L1_CH_INT interrupt.
    +              10
    +              1
    +              read-only
    +            
    +            
    +              OUTFIFO_OVF_CH1_INT_ST
    +              The raw interrupt status bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    +              11
    +              1
    +              read-only
    +            
    +            
    +              OUTFIFO_UDF_CH1_INT_ST
    +              The raw interrupt status bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    +              12
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_ENA_CH1
    +          DMA_INT_ENA_CH1_REG.
    +          0x18
    +          0x20
    +          
    +            
    +              IN_DONE_CH1_INT_ENA
    +              The interrupt enable bit for the IN_DONE_CH_INT interrupt.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              IN_SUC_EOF_CH1_INT_ENA
    +              The interrupt enable bit for the IN_SUC_EOF_CH_INT interrupt.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              IN_ERR_EOF_CH1_INT_ENA
    +              The interrupt enable bit for the IN_ERR_EOF_CH_INT interrupt.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              OUT_DONE_CH1_INT_ENA
    +              The interrupt enable bit for the OUT_DONE_CH_INT interrupt.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              OUT_EOF_CH1_INT_ENA
    +              The interrupt enable bit for the OUT_EOF_CH_INT interrupt.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              IN_DSCR_ERR_CH1_INT_ENA
    +              The interrupt enable bit for the IN_DSCR_ERR_CH_INT interrupt.
    +              5
    +              1
    +              read-write
    +            
    +            
    +              OUT_DSCR_ERR_CH1_INT_ENA
    +              The interrupt enable bit for the OUT_DSCR_ERR_CH_INT interrupt.
    +              6
    +              1
    +              read-write
    +            
    +            
    +              IN_DSCR_EMPTY_CH1_INT_ENA
    +              The interrupt enable bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    +              7
    +              1
    +              read-write
    +            
    +            
    +              OUT_TOTAL_EOF_CH1_INT_ENA
    +              The interrupt enable bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    +              8
    +              1
    +              read-write
    +            
    +            
    +              INFIFO_OVF_CH1_INT_ENA
    +              The interrupt enable bit for the INFIFO_OVF_L1_CH_INT interrupt.
    +              9
    +              1
    +              read-write
    +            
    +            
    +              INFIFO_UDF_CH1_INT_ENA
    +              The interrupt enable bit for the INFIFO_UDF_L1_CH_INT interrupt.
    +              10
    +              1
    +              read-write
    +            
    +            
    +              OUTFIFO_OVF_CH1_INT_ENA
    +              The interrupt enable bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    +              11
    +              1
    +              read-write
    +            
    +            
    +              OUTFIFO_UDF_CH1_INT_ENA
    +              The interrupt enable bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    +              12
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          INT_CLR_CH1
    +          DMA_INT_CLR_CH1_REG.
    +          0x1C
    +          0x20
    +          
    +            
    +              IN_DONE_CH1_INT_CLR
    +              Set this bit to clear the IN_DONE_CH_INT interrupt.
    +              0
    +              1
    +              write-only
    +            
    +            
    +              IN_SUC_EOF_CH1_INT_CLR
    +              Set this bit to clear the IN_SUC_EOF_CH_INT interrupt.
    +              1
    +              1
    +              write-only
    +            
    +            
    +              IN_ERR_EOF_CH1_INT_CLR
    +              Set this bit to clear the IN_ERR_EOF_CH_INT interrupt.
    +              2
    +              1
    +              write-only
    +            
    +            
    +              OUT_DONE_CH1_INT_CLR
    +              Set this bit to clear the OUT_DONE_CH_INT interrupt.
    +              3
    +              1
    +              write-only
    +            
    +            
    +              OUT_EOF_CH1_INT_CLR
    +              Set this bit to clear the OUT_EOF_CH_INT interrupt.
    +              4
    +              1
    +              write-only
    +            
    +            
    +              IN_DSCR_ERR_CH1_INT_CLR
    +              Set this bit to clear the IN_DSCR_ERR_CH_INT interrupt.
    +              5
    +              1
    +              write-only
    +            
    +            
    +              OUT_DSCR_ERR_CH1_INT_CLR
    +              Set this bit to clear the OUT_DSCR_ERR_CH_INT interrupt.
    +              6
    +              1
    +              write-only
    +            
    +            
    +              IN_DSCR_EMPTY_CH1_INT_CLR
    +              Set this bit to clear the IN_DSCR_EMPTY_CH_INT interrupt.
    +              7
    +              1
    +              write-only
    +            
    +            
    +              OUT_TOTAL_EOF_CH1_INT_CLR
    +              Set this bit to clear the OUT_TOTAL_EOF_CH_INT interrupt.
    +              8
    +              1
    +              write-only
    +            
    +            
    +              INFIFO_OVF_CH1_INT_CLR
    +              Set this bit to clear the INFIFO_OVF_L1_CH_INT interrupt.
    +              9
    +              1
    +              write-only
    +            
    +            
    +              INFIFO_UDF_CH1_INT_CLR
    +              Set this bit to clear the INFIFO_UDF_L1_CH_INT interrupt.
    +              10
    +              1
    +              write-only
    +            
    +            
    +              OUTFIFO_OVF_CH1_INT_CLR
    +              Set this bit to clear the OUTFIFO_OVF_L1_CH_INT interrupt.
    +              11
    +              1
    +              write-only
    +            
    +            
    +              OUTFIFO_UDF_CH1_INT_CLR
    +              Set this bit to clear the OUTFIFO_UDF_L1_CH_INT interrupt.
    +              12
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          INT_RAW_CH2
    +          DMA_INT_RAW_CH2_REG.
    +          0x20
    +          0x20
    +          
    +            
    +              IN_DONE_CH2_INT_RAW
    +              The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 2.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              IN_SUC_EOF_CH2_INT_RAW
    +              The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 2. For UHCI0, the raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received and no data error is detected for Rx channel 2.
    +              1
    +              1
    +              read-only
    +            
    +            
    +              IN_ERR_EOF_CH2_INT_RAW
    +              The raw interrupt bit turns to high level when data error is detected only in the case that the peripheral is UHCI0 for Rx channel 2. For other peripherals, this raw interrupt is reserved.
    +              2
    +              1
    +              read-only
    +            
    +            
    +              OUT_DONE_CH2_INT_RAW
    +              The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been transmitted to peripherals for Tx channel 2.
    +              3
    +              1
    +              read-only
    +            
    +            
    +              OUT_EOF_CH2_INT_RAW
    +              The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been read from memory for Tx channel 2.
    +              4
    +              1
    +              read-only
    +            
    +            
    +              IN_DSCR_ERR_CH2_INT_RAW
    +              The raw interrupt bit turns to high level when detecting inlink descriptor error, including owner error, the second and third word error of inlink descriptor for Rx channel 2.
    +              5
    +              1
    +              read-only
    +            
    +            
    +              OUT_DSCR_ERR_CH2_INT_RAW
    +              The raw interrupt bit turns to high level when detecting outlink descriptor error, including owner error, the second and third word error of outlink descriptor for Tx channel 2.
    +              6
    +              1
    +              read-only
    +            
    +            
    +              IN_DSCR_EMPTY_CH2_INT_RAW
    +              The raw interrupt bit turns to high level when Rx buffer pointed by inlink is full and receiving data is not completed, but there is no more inlink for Rx channel 2.
    +              7
    +              1
    +              read-only
    +            
    +            
    +              OUT_TOTAL_EOF_CH2_INT_RAW
    +              The raw interrupt bit turns to high level when data corresponding a outlink (includes one link descriptor or few link descriptors) is transmitted out for Tx channel 2.
    +              8
    +              1
    +              read-only
    +            
    +            
    +              INFIFO_OVF_CH2_INT_RAW
    +              This raw interrupt bit turns to high level when level 1 fifo of Rx channel 2 is overflow.
    +              9
    +              1
    +              read-only
    +            
    +            
    +              INFIFO_UDF_CH2_INT_RAW
    +              This raw interrupt bit turns to high level when level 1 fifo of Rx channel 2 is underflow.
    +              10
    +              1
    +              read-only
    +            
    +            
    +              OUTFIFO_OVF_CH2_INT_RAW
    +              This raw interrupt bit turns to high level when level 1 fifo of Tx channel 2 is overflow.
    +              11
    +              1
    +              read-only
    +            
    +            
    +              OUTFIFO_UDF_CH2_INT_RAW
    +              This raw interrupt bit turns to high level when level 1 fifo of Tx channel 2 is underflow.
    +              12
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_ST_CH2
    +          DMA_INT_ST_CH2_REG.
    +          0x24
    +          0x20
    +          
    +            
    +              IN_DONE_CH2_INT_ST
    +              The raw interrupt status bit for the IN_DONE_CH_INT interrupt.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              IN_SUC_EOF_CH2_INT_ST
    +              The raw interrupt status bit for the IN_SUC_EOF_CH_INT interrupt.
    +              1
    +              1
    +              read-only
    +            
    +            
    +              IN_ERR_EOF_CH2_INT_ST
    +              The raw interrupt status bit for the IN_ERR_EOF_CH_INT interrupt.
    +              2
    +              1
    +              read-only
    +            
    +            
    +              OUT_DONE_CH2_INT_ST
    +              The raw interrupt status bit for the OUT_DONE_CH_INT interrupt.
    +              3
    +              1
    +              read-only
    +            
    +            
    +              OUT_EOF_CH2_INT_ST
    +              The raw interrupt status bit for the OUT_EOF_CH_INT interrupt.
    +              4
    +              1
    +              read-only
    +            
    +            
    +              IN_DSCR_ERR_CH2_INT_ST
    +              The raw interrupt status bit for the IN_DSCR_ERR_CH_INT interrupt.
    +              5
    +              1
    +              read-only
    +            
    +            
    +              OUT_DSCR_ERR_CH2_INT_ST
    +              The raw interrupt status bit for the OUT_DSCR_ERR_CH_INT interrupt.
    +              6
    +              1
    +              read-only
    +            
    +            
    +              IN_DSCR_EMPTY_CH2_INT_ST
    +              The raw interrupt status bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    +              7
    +              1
    +              read-only
    +            
    +            
    +              OUT_TOTAL_EOF_CH2_INT_ST
    +              The raw interrupt status bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    +              8
    +              1
    +              read-only
    +            
    +            
    +              INFIFO_OVF_CH2_INT_ST
    +              The raw interrupt status bit for the INFIFO_OVF_L1_CH_INT interrupt.
    +              9
    +              1
    +              read-only
    +            
    +            
    +              INFIFO_UDF_CH2_INT_ST
    +              The raw interrupt status bit for the INFIFO_UDF_L1_CH_INT interrupt.
    +              10
    +              1
    +              read-only
    +            
    +            
    +              OUTFIFO_OVF_CH2_INT_ST
    +              The raw interrupt status bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    +              11
    +              1
    +              read-only
    +            
    +            
    +              OUTFIFO_UDF_CH2_INT_ST
    +              The raw interrupt status bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    +              12
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_ENA_CH2
    +          DMA_INT_ENA_CH2_REG.
    +          0x28
    +          0x20
    +          
    +            
    +              IN_DONE_CH2_INT_ENA
    +              The interrupt enable bit for the IN_DONE_CH_INT interrupt.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              IN_SUC_EOF_CH2_INT_ENA
    +              The interrupt enable bit for the IN_SUC_EOF_CH_INT interrupt.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              IN_ERR_EOF_CH2_INT_ENA
    +              The interrupt enable bit for the IN_ERR_EOF_CH_INT interrupt.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              OUT_DONE_CH2_INT_ENA
    +              The interrupt enable bit for the OUT_DONE_CH_INT interrupt.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              OUT_EOF_CH2_INT_ENA
    +              The interrupt enable bit for the OUT_EOF_CH_INT interrupt.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              IN_DSCR_ERR_CH2_INT_ENA
    +              The interrupt enable bit for the IN_DSCR_ERR_CH_INT interrupt.
    +              5
    +              1
    +              read-write
    +            
    +            
    +              OUT_DSCR_ERR_CH2_INT_ENA
    +              The interrupt enable bit for the OUT_DSCR_ERR_CH_INT interrupt.
    +              6
    +              1
    +              read-write
    +            
    +            
    +              IN_DSCR_EMPTY_CH2_INT_ENA
    +              The interrupt enable bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    +              7
    +              1
    +              read-write
    +            
    +            
    +              OUT_TOTAL_EOF_CH2_INT_ENA
    +              The interrupt enable bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    +              8
    +              1
    +              read-write
    +            
    +            
    +              INFIFO_OVF_CH2_INT_ENA
    +              The interrupt enable bit for the INFIFO_OVF_L1_CH_INT interrupt.
    +              9
    +              1
    +              read-write
    +            
    +            
    +              INFIFO_UDF_CH2_INT_ENA
    +              The interrupt enable bit for the INFIFO_UDF_L1_CH_INT interrupt.
    +              10
    +              1
    +              read-write
    +            
    +            
    +              OUTFIFO_OVF_CH2_INT_ENA
    +              The interrupt enable bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    +              11
    +              1
    +              read-write
    +            
    +            
    +              OUTFIFO_UDF_CH2_INT_ENA
    +              The interrupt enable bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    +              12
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          INT_CLR_CH2
    +          DMA_INT_CLR_CH2_REG.
    +          0x2C
    +          0x20
    +          
    +            
    +              IN_DONE_CH2_INT_CLR
    +              Set this bit to clear the IN_DONE_CH_INT interrupt.
    +              0
    +              1
    +              write-only
    +            
    +            
    +              IN_SUC_EOF_CH2_INT_CLR
    +              Set this bit to clear the IN_SUC_EOF_CH_INT interrupt.
    +              1
    +              1
    +              write-only
    +            
    +            
    +              IN_ERR_EOF_CH2_INT_CLR
    +              Set this bit to clear the IN_ERR_EOF_CH_INT interrupt.
    +              2
    +              1
    +              write-only
    +            
    +            
    +              OUT_DONE_CH2_INT_CLR
    +              Set this bit to clear the OUT_DONE_CH_INT interrupt.
    +              3
    +              1
    +              write-only
    +            
    +            
    +              OUT_EOF_CH2_INT_CLR
    +              Set this bit to clear the OUT_EOF_CH_INT interrupt.
    +              4
    +              1
    +              write-only
    +            
    +            
    +              IN_DSCR_ERR_CH2_INT_CLR
    +              Set this bit to clear the IN_DSCR_ERR_CH_INT interrupt.
    +              5
    +              1
    +              write-only
    +            
    +            
    +              OUT_DSCR_ERR_CH2_INT_CLR
    +              Set this bit to clear the OUT_DSCR_ERR_CH_INT interrupt.
    +              6
    +              1
    +              write-only
    +            
    +            
    +              IN_DSCR_EMPTY_CH2_INT_CLR
    +              Set this bit to clear the IN_DSCR_EMPTY_CH_INT interrupt.
    +              7
    +              1
    +              write-only
    +            
    +            
    +              OUT_TOTAL_EOF_CH2_INT_CLR
    +              Set this bit to clear the OUT_TOTAL_EOF_CH_INT interrupt.
    +              8
    +              1
    +              write-only
    +            
    +            
    +              INFIFO_OVF_CH2_INT_CLR
    +              Set this bit to clear the INFIFO_OVF_L1_CH_INT interrupt.
    +              9
    +              1
    +              write-only
    +            
    +            
    +              INFIFO_UDF_CH2_INT_CLR
    +              Set this bit to clear the INFIFO_UDF_L1_CH_INT interrupt.
    +              10
    +              1
    +              write-only
    +            
    +            
    +              OUTFIFO_OVF_CH2_INT_CLR
    +              Set this bit to clear the OUTFIFO_OVF_L1_CH_INT interrupt.
    +              11
    +              1
    +              write-only
    +            
    +            
    +              OUTFIFO_UDF_CH2_INT_CLR
    +              Set this bit to clear the OUTFIFO_UDF_L1_CH_INT interrupt.
    +              12
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          AHB_TEST
    +          DMA_AHB_TEST_REG.
    +          0x40
    +          0x20
    +          
    +            
    +              AHB_TESTMODE
    +              reserved
    +              0
    +              3
    +              read-write
    +            
    +            
    +              AHB_TESTADDR
    +              reserved
    +              4
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          MISC_CONF
    +          DMA_MISC_CONF_REG.
    +          0x44
    +          0x20
    +          
    +            
    +              AHBM_RST_INTER
    +              Set this bit, then clear this bit to reset the internal ahb FSM.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              ARB_PRI_DIS
    +              Set this bit to disable priority arbitration function.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              CLK_EN
    +              reg_clk_en
    +              3
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DATE
    +          DMA_DATE_REG.
    +          0x48
    +          0x20
    +          0x02008250
    +          
    +            
    +              DATE
    +              register version.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          IN_CONF0_CH0
    +          DMA_IN_CONF0_CH0_REG.
    +          0x70
    +          0x20
    +          
    +            
    +              IN_RST_CH0
    +              This bit is used to reset DMA channel 0 Rx FSM and Rx FIFO pointer.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              IN_LOOP_TEST_CH0
    +              reserved
    +              1
    +              1
    +              read-write
    +            
    +            
    +              INDSCR_BURST_EN_CH0
    +              Set this bit to 1 to enable INCR burst transfer for Rx channel 0 reading link descriptor when accessing internal SRAM.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              IN_DATA_BURST_EN_CH0
    +              Set this bit to 1 to enable INCR burst transfer for Rx channel 0 receiving data when accessing internal SRAM.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              MEM_TRANS_EN_CH0
    +              Set this bit 1 to enable automatic transmitting data from memory to memory via DMA.
    +              4
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          IN_CONF1_CH0
    +          DMA_IN_CONF1_CH0_REG.
    +          0x74
    +          0x20
    +          
    +            
    +              IN_CHECK_OWNER_CH0
    +              Set this bit to enable checking the owner attribute of the link descriptor.
    +              12
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          INFIFO_STATUS_CH0
    +          DMA_INFIFO_STATUS_CH0_REG.
    +          0x78
    +          0x20
    +          0x07800003
    +          
    +            
    +              INFIFO_FULL_CH0
    +              L1 Rx FIFO full signal for Rx channel 0.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              INFIFO_EMPTY_CH0
    +              L1 Rx FIFO empty signal for Rx channel 0.
    +              1
    +              1
    +              read-only
    +            
    +            
    +              INFIFO_CNT_CH0
    +              The register stores the byte number of the data in L1 Rx FIFO for Rx channel 0.
    +              2
    +              6
    +              read-only
    +            
    +            
    +              IN_REMAIN_UNDER_1B_CH0
    +              reserved
    +              23
    +              1
    +              read-only
    +            
    +            
    +              IN_REMAIN_UNDER_2B_CH0
    +              reserved
    +              24
    +              1
    +              read-only
    +            
    +            
    +              IN_REMAIN_UNDER_3B_CH0
    +              reserved
    +              25
    +              1
    +              read-only
    +            
    +            
    +              IN_REMAIN_UNDER_4B_CH0
    +              reserved
    +              26
    +              1
    +              read-only
    +            
    +            
    +              IN_BUF_HUNGRY_CH0
    +              reserved
    +              27
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_POP_CH0
    +          DMA_IN_POP_CH0_REG.
    +          0x7C
    +          0x20
    +          0x00000800
    +          
    +            
    +              INFIFO_RDATA_CH0
    +              This register stores the data popping from DMA FIFO.
    +              0
    +              12
    +              read-only
    +            
    +            
    +              INFIFO_POP_CH0
    +              Set this bit to pop data from DMA FIFO.
    +              12
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          IN_LINK_CH0
    +          DMA_IN_LINK_CH0_REG.
    +          0x80
    +          0x20
    +          0x01100000
    +          
    +            
    +              INLINK_ADDR_CH0
    +              This register stores the 20 least significant bits of the first inlink descriptor's address.
    +              0
    +              20
    +              read-write
    +            
    +            
    +              INLINK_AUTO_RET_CH0
    +              Set this bit to return to current inlink descriptor's address, when there are some errors in current receiving data.
    +              20
    +              1
    +              read-write
    +            
    +            
    +              INLINK_STOP_CH0
    +              Set this bit to stop dealing with the inlink descriptors.
    +              21
    +              1
    +              read-write
    +            
    +            
    +              INLINK_START_CH0
    +              Set this bit to start dealing with the inlink descriptors.
    +              22
    +              1
    +              read-write
    +            
    +            
    +              INLINK_RESTART_CH0
    +              Set this bit to mount a new inlink descriptor.
    +              23
    +              1
    +              read-write
    +            
    +            
    +              INLINK_PARK_CH0
    +              1: the inlink descriptor's FSM is in idle state.  0: the inlink descriptor's FSM is working.
    +              24
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_STATE_CH0
    +          DMA_IN_STATE_CH0_REG.
    +          0x84
    +          0x20
    +          
    +            
    +              INLINK_DSCR_ADDR_CH0
    +              This register stores the current inlink descriptor's address.
    +              0
    +              18
    +              read-only
    +            
    +            
    +              IN_DSCR_STATE_CH0
    +              reserved
    +              18
    +              2
    +              read-only
    +            
    +            
    +              IN_STATE_CH0
    +              reserved
    +              20
    +              3
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_SUC_EOF_DES_ADDR_CH0
    +          DMA_IN_SUC_EOF_DES_ADDR_CH0_REG.
    +          0x88
    +          0x20
    +          
    +            
    +              IN_SUC_EOF_DES_ADDR_CH0
    +              This register stores the address of the inlink descriptor when the EOF bit in this descriptor is 1.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_ERR_EOF_DES_ADDR_CH0
    +          DMA_IN_ERR_EOF_DES_ADDR_CH0_REG.
    +          0x8C
    +          0x20
    +          
    +            
    +              IN_ERR_EOF_DES_ADDR_CH0
    +              This register stores the address of the inlink descriptor when there are some errors in current receiving data. Only used when peripheral is UHCI0.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_DSCR_CH0
    +          DMA_IN_DSCR_CH0_REG.
    +          0x90
    +          0x20
    +          
    +            
    +              INLINK_DSCR_CH0
    +              The address of the current inlink descriptor x.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_DSCR_BF0_CH0
    +          DMA_IN_DSCR_BF0_CH0_REG.
    +          0x94
    +          0x20
    +          
    +            
    +              INLINK_DSCR_BF0_CH0
    +              The address of the last inlink descriptor x-1.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_DSCR_BF1_CH0
    +          DMA_IN_DSCR_BF1_CH0_REG.
    +          0x98
    +          0x20
    +          
    +            
    +              INLINK_DSCR_BF1_CH0
    +              The address of the second-to-last inlink descriptor x-2.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_PRI_CH0
    +          DMA_IN_PRI_CH0_REG.
    +          0x9C
    +          0x20
    +          
    +            
    +              RX_PRI_CH0
    +              The priority of Rx channel 0. The larger of the value, the higher of the priority.
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          IN_PERI_SEL_CH0
    +          DMA_IN_PERI_SEL_CH0_REG.
    +          0xA0
    +          0x20
    +          0x0000003F
    +          
    +            
    +              PERI_IN_SEL_CH0
    +              This register is used to select peripheral for Rx channel 0. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.
    +              0
    +              6
    +              read-write
    +            
    +          
    +        
    +        
    +          OUT_CONF0_CH0
    +          DMA_OUT_CONF0_CH0_REG.
    +          0xD0
    +          0x20
    +          0x00000008
    +          
    +            
    +              OUT_RST_CH0
    +              This bit is used to reset DMA channel 0 Tx FSM and Tx FIFO pointer.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              OUT_LOOP_TEST_CH0
    +              reserved
    +              1
    +              1
    +              read-write
    +            
    +            
    +              OUT_AUTO_WRBACK_CH0
    +              Set this bit to enable automatic outlink-writeback when all the data in tx buffer has been transmitted.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              OUT_EOF_MODE_CH0
    +              EOF flag generation mode when transmitting data. 1: EOF flag for Tx channel 0 is generated when data need to transmit has been popped from FIFO in DMA
    +              3
    +              1
    +              read-write
    +            
    +            
    +              OUTDSCR_BURST_EN_CH0
    +              Set this bit to 1 to enable INCR burst transfer for Tx channel 0 reading link descriptor when accessing internal SRAM.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              OUT_DATA_BURST_EN_CH0
    +              Set this bit to 1 to enable INCR burst transfer for Tx channel 0 transmitting data when accessing internal SRAM.
    +              5
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          OUT_CONF1_CH0
    +          DMA_OUT_CONF1_CH0_REG.
    +          0xD4
    +          0x20
    +          
    +            
    +              OUT_CHECK_OWNER_CH0
    +              Set this bit to enable checking the owner attribute of the link descriptor.
    +              12
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          OUTFIFO_STATUS_CH0
    +          DMA_OUTFIFO_STATUS_CH0_REG.
    +          0xD8
    +          0x20
    +          0x07800002
    +          
    +            
    +              OUTFIFO_FULL_CH0
    +              L1 Tx FIFO full signal for Tx channel 0.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              OUTFIFO_EMPTY_CH0
    +              L1 Tx FIFO empty signal for Tx channel 0.
    +              1
    +              1
    +              read-only
    +            
    +            
    +              OUTFIFO_CNT_CH0
    +              The register stores the byte number of the data in L1 Tx FIFO for Tx channel 0.
    +              2
    +              6
    +              read-only
    +            
    +            
    +              OUT_REMAIN_UNDER_1B_CH0
    +              reserved
    +              23
    +              1
    +              read-only
    +            
    +            
    +              OUT_REMAIN_UNDER_2B_CH0
    +              reserved
    +              24
    +              1
    +              read-only
    +            
    +            
    +              OUT_REMAIN_UNDER_3B_CH0
    +              reserved
    +              25
    +              1
    +              read-only
    +            
    +            
    +              OUT_REMAIN_UNDER_4B_CH0
    +              reserved
    +              26
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          OUT_PUSH_CH0
    +          DMA_OUT_PUSH_CH0_REG.
    +          0xDC
    +          0x20
    +          
    +            
    +              OUTFIFO_WDATA_CH0
    +              This register stores the data that need to be pushed into DMA FIFO.
    +              0
    +              9
    +              read-write
    +            
    +            
    +              OUTFIFO_PUSH_CH0
    +              Set this bit to push data into DMA FIFO.
    +              9
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          OUT_LINK_CH0
    +          DMA_OUT_LINK_CH0_REG.
    +          0xE0
    +          0x20
    +          0x00800000
    +          
    +            
    +              OUTLINK_ADDR_CH0
    +              This register stores the 20 least significant bits of the first outlink descriptor's address.
    +              0
    +              20
    +              read-write
    +            
    +            
    +              OUTLINK_STOP_CH0
    +              Set this bit to stop dealing with the outlink descriptors.
    +              20
    +              1
    +              read-write
    +            
    +            
    +              OUTLINK_START_CH0
    +              Set this bit to start dealing with the outlink descriptors.
    +              21
    +              1
    +              read-write
    +            
    +            
    +              OUTLINK_RESTART_CH0
    +              Set this bit to restart a new outlink from the last address.
    +              22
    +              1
    +              read-write
    +            
    +            
    +              OUTLINK_PARK_CH0
    +              1: the outlink descriptor's FSM is in idle state.  0: the outlink descriptor's FSM is working.
    +              23
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          OUT_STATE_CH0
    +          DMA_OUT_STATE_CH0_REG.
    +          0xE4
    +          0x20
    +          
    +            
    +              OUTLINK_DSCR_ADDR_CH0
    +              This register stores the current outlink descriptor's address.
    +              0
    +              18
    +              read-only
    +            
    +            
    +              OUT_DSCR_STATE_CH0
    +              reserved
    +              18
    +              2
    +              read-only
    +            
    +            
    +              OUT_STATE_CH0
    +              reserved
    +              20
    +              3
    +              read-only
    +            
    +          
    +        
    +        
    +          OUT_EOF_DES_ADDR_CH0
    +          DMA_OUT_EOF_DES_ADDR_CH0_REG.
    +          0xE8
    +          0x20
    +          
    +            
    +              OUT_EOF_DES_ADDR_CH0
    +              This register stores the address of the outlink descriptor when the EOF bit in this descriptor is 1.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          OUT_EOF_BFR_DES_ADDR_CH0
    +          DMA_OUT_EOF_BFR_DES_ADDR_CH0_REG.
    +          0xEC
    +          0x20
    +          
    +            
    +              OUT_EOF_BFR_DES_ADDR_CH0
    +              This register stores the address of the outlink descriptor before the last outlink descriptor.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          OUT_DSCR_CH0
    +          DMA_OUT_DSCR_CH0_REG.
    +          0xF0
    +          0x20
    +          
    +            
    +              OUTLINK_DSCR_CH0
    +              The address of the current outlink descriptor y.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          OUT_DSCR_BF0_CH0
    +          DMA_OUT_DSCR_BF0_CH0_REG.
    +          0xF4
    +          0x20
    +          
    +            
    +              OUTLINK_DSCR_BF0_CH0
    +              The address of the last outlink descriptor y-1.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          OUT_DSCR_BF1_CH0
    +          DMA_OUT_DSCR_BF1_CH0_REG.
    +          0xF8
    +          0x20
    +          
    +            
    +              OUTLINK_DSCR_BF1_CH0
    +              The address of the second-to-last inlink descriptor x-2.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          OUT_PRI_CH0
    +          DMA_OUT_PRI_CH0_REG.
    +          0xFC
    +          0x20
    +          
    +            
    +              TX_PRI_CH0
    +              The priority of Tx channel 0. The larger of the value, the higher of the priority.
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          OUT_PERI_SEL_CH0
    +          DMA_OUT_PERI_SEL_CH0_REG.
    +          0x100
    +          0x20
    +          0x0000003F
    +          
    +            
    +              PERI_OUT_SEL_CH0
    +              This register is used to select peripheral for Tx channel 0. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.
    +              0
    +              6
    +              read-write
    +            
    +          
    +        
    +        
    +          IN_CONF0_CH1
    +          DMA_IN_CONF0_CH1_REG.
    +          0x130
    +          0x20
    +          
    +            
    +              IN_RST_CH1
    +              This bit is used to reset DMA channel 1 Rx FSM and Rx FIFO pointer.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              IN_LOOP_TEST_CH1
    +              reserved
    +              1
    +              1
    +              read-write
    +            
    +            
    +              INDSCR_BURST_EN_CH1
    +              Set this bit to 1 to enable INCR burst transfer for Rx channel 1 reading link descriptor when accessing internal SRAM.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              IN_DATA_BURST_EN_CH1
    +              Set this bit to 1 to enable INCR burst transfer for Rx channel 1 receiving data when accessing internal SRAM.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              MEM_TRANS_EN_CH1
    +              Set this bit 1 to enable automatic transmitting data from memory to memory via DMA.
    +              4
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          IN_CONF1_CH1
    +          DMA_IN_CONF1_CH1_REG.
    +          0x134
    +          0x20
    +          
    +            
    +              IN_CHECK_OWNER_CH1
    +              Set this bit to enable checking the owner attribute of the link descriptor.
    +              12
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          INFIFO_STATUS_CH1
    +          DMA_INFIFO_STATUS_CH1_REG.
    +          0x138
    +          0x20
    +          0x07800003
    +          
    +            
    +              INFIFO_FULL_CH1
    +              L1 Rx FIFO full signal for Rx channel 1.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              INFIFO_EMPTY_CH1
    +              L1 Rx FIFO empty signal for Rx channel 1.
    +              1
    +              1
    +              read-only
    +            
    +            
    +              INFIFO_CNT_CH1
    +              The register stores the byte number of the data in L1 Rx FIFO for Rx channel 1.
    +              2
    +              6
    +              read-only
    +            
    +            
    +              IN_REMAIN_UNDER_1B_CH1
    +              reserved
    +              23
    +              1
    +              read-only
    +            
    +            
    +              IN_REMAIN_UNDER_2B_CH1
    +              reserved
    +              24
    +              1
    +              read-only
    +            
    +            
    +              IN_REMAIN_UNDER_3B_CH1
    +              reserved
    +              25
    +              1
    +              read-only
    +            
    +            
    +              IN_REMAIN_UNDER_4B_CH1
    +              reserved
    +              26
    +              1
    +              read-only
    +            
    +            
    +              IN_BUF_HUNGRY_CH1
    +              reserved
    +              27
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_POP_CH1
    +          DMA_IN_POP_CH1_REG.
    +          0x13C
    +          0x20
    +          0x00000800
    +          
    +            
    +              INFIFO_RDATA_CH1
    +              This register stores the data popping from DMA FIFO.
    +              0
    +              12
    +              read-only
    +            
    +            
    +              INFIFO_POP_CH1
    +              Set this bit to pop data from DMA FIFO.
    +              12
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          IN_LINK_CH1
    +          DMA_IN_LINK_CH1_REG.
    +          0x140
    +          0x20
    +          0x01100000
    +          
    +            
    +              INLINK_ADDR_CH1
    +              This register stores the 20 least significant bits of the first inlink descriptor's address.
    +              0
    +              20
    +              read-write
    +            
    +            
    +              INLINK_AUTO_RET_CH1
    +              Set this bit to return to current inlink descriptor's address, when there are some errors in current receiving data.
    +              20
    +              1
    +              read-write
    +            
    +            
    +              INLINK_STOP_CH1
    +              Set this bit to stop dealing with the inlink descriptors.
    +              21
    +              1
    +              read-write
    +            
    +            
    +              INLINK_START_CH1
    +              Set this bit to start dealing with the inlink descriptors.
    +              22
    +              1
    +              read-write
    +            
    +            
    +              INLINK_RESTART_CH1
    +              Set this bit to mount a new inlink descriptor.
    +              23
    +              1
    +              read-write
    +            
    +            
    +              INLINK_PARK_CH1
    +              1: the inlink descriptor's FSM is in idle state.  0: the inlink descriptor's FSM is working.
    +              24
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_STATE_CH1
    +          DMA_IN_STATE_CH1_REG.
    +          0x144
    +          0x20
    +          
    +            
    +              INLINK_DSCR_ADDR_CH1
    +              This register stores the current inlink descriptor's address.
    +              0
    +              18
    +              read-only
    +            
    +            
    +              IN_DSCR_STATE_CH1
    +              reserved
    +              18
    +              2
    +              read-only
    +            
    +            
    +              IN_STATE_CH1
    +              reserved
    +              20
    +              3
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_SUC_EOF_DES_ADDR_CH1
    +          DMA_IN_SUC_EOF_DES_ADDR_CH1_REG.
    +          0x148
    +          0x20
    +          
    +            
    +              IN_SUC_EOF_DES_ADDR_CH1
    +              This register stores the address of the inlink descriptor when the EOF bit in this descriptor is 1.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_ERR_EOF_DES_ADDR_CH1
    +          DMA_IN_ERR_EOF_DES_ADDR_CH1_REG.
    +          0x14C
    +          0x20
    +          
    +            
    +              IN_ERR_EOF_DES_ADDR_CH1
    +              This register stores the address of the inlink descriptor when there are some errors in current receiving data. Only used when peripheral is UHCI0.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_DSCR_CH1
    +          DMA_IN_DSCR_CH1_REG.
    +          0x150
    +          0x20
    +          
    +            
    +              INLINK_DSCR_CH1
    +              The address of the current inlink descriptor x.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_DSCR_BF0_CH1
    +          DMA_IN_DSCR_BF0_CH1_REG.
    +          0x154
    +          0x20
    +          
    +            
    +              INLINK_DSCR_BF0_CH1
    +              The address of the last inlink descriptor x-1.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_DSCR_BF1_CH1
    +          DMA_IN_DSCR_BF1_CH1_REG.
    +          0x158
    +          0x20
    +          
    +            
    +              INLINK_DSCR_BF1_CH1
    +              The address of the second-to-last inlink descriptor x-2.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_PRI_CH1
    +          DMA_IN_PRI_CH1_REG.
    +          0x15C
    +          0x20
    +          
    +            
    +              RX_PRI_CH1
    +              The priority of Rx channel 1. The larger of the value, the higher of the priority.
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          IN_PERI_SEL_CH1
    +          DMA_IN_PERI_SEL_CH1_REG.
    +          0x160
    +          0x20
    +          0x0000003F
    +          
    +            
    +              PERI_IN_SEL_CH1
    +              This register is used to select peripheral for Rx channel 1. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.
    +              0
    +              6
    +              read-write
    +            
    +          
    +        
    +        
    +          OUT_CONF0_CH1
    +          DMA_OUT_CONF0_CH1_REG.
    +          0x190
    +          0x20
    +          0x00000008
    +          
    +            
    +              OUT_RST_CH1
    +              This bit is used to reset DMA channel 1 Tx FSM and Tx FIFO pointer.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              OUT_LOOP_TEST_CH1
    +              reserved
    +              1
    +              1
    +              read-write
    +            
    +            
    +              OUT_AUTO_WRBACK_CH1
    +              Set this bit to enable automatic outlink-writeback when all the data in tx buffer has been transmitted.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              OUT_EOF_MODE_CH1
    +              EOF flag generation mode when transmitting data. 1: EOF flag for Tx channel 1 is generated when data need to transmit has been popped from FIFO in DMA
    +              3
    +              1
    +              read-write
    +            
    +            
    +              OUTDSCR_BURST_EN_CH1
    +              Set this bit to 1 to enable INCR burst transfer for Tx channel 1 reading link descriptor when accessing internal SRAM.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              OUT_DATA_BURST_EN_CH1
    +              Set this bit to 1 to enable INCR burst transfer for Tx channel 1 transmitting data when accessing internal SRAM.
    +              5
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          OUT_CONF1_CH1
    +          DMA_OUT_CONF1_CH1_REG.
    +          0x194
    +          0x20
    +          
    +            
    +              OUT_CHECK_OWNER_CH1
    +              Set this bit to enable checking the owner attribute of the link descriptor.
    +              12
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          OUTFIFO_STATUS_CH1
    +          DMA_OUTFIFO_STATUS_CH1_REG.
    +          0x198
    +          0x20
    +          0x07800002
    +          
    +            
    +              OUTFIFO_FULL_CH1
    +              L1 Tx FIFO full signal for Tx channel 1.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              OUTFIFO_EMPTY_CH1
    +              L1 Tx FIFO empty signal for Tx channel 1.
    +              1
    +              1
    +              read-only
    +            
    +            
    +              OUTFIFO_CNT_CH1
    +              The register stores the byte number of the data in L1 Tx FIFO for Tx channel 1.
    +              2
    +              6
    +              read-only
    +            
    +            
    +              OUT_REMAIN_UNDER_1B_CH1
    +              reserved
    +              23
    +              1
    +              read-only
    +            
    +            
    +              OUT_REMAIN_UNDER_2B_CH1
    +              reserved
    +              24
    +              1
    +              read-only
    +            
    +            
    +              OUT_REMAIN_UNDER_3B_CH1
    +              reserved
    +              25
    +              1
    +              read-only
    +            
    +            
    +              OUT_REMAIN_UNDER_4B_CH1
    +              reserved
    +              26
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          OUT_PUSH_CH1
    +          DMA_OUT_PUSH_CH1_REG.
    +          0x19C
    +          0x20
    +          
    +            
    +              OUTFIFO_WDATA_CH1
    +              This register stores the data that need to be pushed into DMA FIFO.
    +              0
    +              9
    +              read-write
    +            
    +            
    +              OUTFIFO_PUSH_CH1
    +              Set this bit to push data into DMA FIFO.
    +              9
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          OUT_LINK_CH1
    +          DMA_OUT_LINK_CH1_REG.
    +          0x1A0
    +          0x20
    +          0x00800000
    +          
    +            
    +              OUTLINK_ADDR_CH1
    +              This register stores the 20 least significant bits of the first outlink descriptor's address.
    +              0
    +              20
    +              read-write
    +            
    +            
    +              OUTLINK_STOP_CH1
    +              Set this bit to stop dealing with the outlink descriptors.
    +              20
    +              1
    +              read-write
    +            
    +            
    +              OUTLINK_START_CH1
    +              Set this bit to start dealing with the outlink descriptors.
    +              21
    +              1
    +              read-write
    +            
    +            
    +              OUTLINK_RESTART_CH1
    +              Set this bit to restart a new outlink from the last address.
    +              22
    +              1
    +              read-write
    +            
    +            
    +              OUTLINK_PARK_CH1
    +              1: the outlink descriptor's FSM is in idle state.  0: the outlink descriptor's FSM is working.
    +              23
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          OUT_STATE_CH1
    +          DMA_OUT_STATE_CH1_REG.
    +          0x1A4
    +          0x20
    +          
    +            
    +              OUTLINK_DSCR_ADDR_CH1
    +              This register stores the current outlink descriptor's address.
    +              0
    +              18
    +              read-only
    +            
    +            
    +              OUT_DSCR_STATE_CH1
    +              reserved
    +              18
    +              2
    +              read-only
    +            
    +            
    +              OUT_STATE_CH1
    +              reserved
    +              20
    +              3
    +              read-only
    +            
    +          
    +        
    +        
    +          OUT_EOF_DES_ADDR_CH1
    +          DMA_OUT_EOF_DES_ADDR_CH1_REG.
    +          0x1A8
    +          0x20
    +          
    +            
    +              OUT_EOF_DES_ADDR_CH1
    +              This register stores the address of the outlink descriptor when the EOF bit in this descriptor is 1.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          OUT_EOF_BFR_DES_ADDR_CH1
    +          DMA_OUT_EOF_BFR_DES_ADDR_CH1_REG.
    +          0x1AC
    +          0x20
    +          
    +            
    +              OUT_EOF_BFR_DES_ADDR_CH1
    +              This register stores the address of the outlink descriptor before the last outlink descriptor.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          OUT_DSCR_CH1
    +          DMA_OUT_DSCR_CH1_REG.
    +          0x1B0
    +          0x20
    +          
    +            
    +              OUTLINK_DSCR_CH1
    +              The address of the current outlink descriptor y.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          OUT_DSCR_BF0_CH1
    +          DMA_OUT_DSCR_BF0_CH1_REG.
    +          0x1B4
    +          0x20
    +          
    +            
    +              OUTLINK_DSCR_BF0_CH1
    +              The address of the last outlink descriptor y-1.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          OUT_DSCR_BF1_CH1
    +          DMA_OUT_DSCR_BF1_CH1_REG.
    +          0x1B8
    +          0x20
    +          
    +            
    +              OUTLINK_DSCR_BF1_CH1
    +              The address of the second-to-last inlink descriptor x-2.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          OUT_PRI_CH1
    +          DMA_OUT_PRI_CH1_REG.
    +          0x1BC
    +          0x20
    +          
    +            
    +              TX_PRI_CH1
    +              The priority of Tx channel 1. The larger of the value, the higher of the priority.
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          OUT_PERI_SEL_CH1
    +          DMA_OUT_PERI_SEL_CH1_REG.
    +          0x1C0
    +          0x20
    +          0x0000003F
    +          
    +            
    +              PERI_OUT_SEL_CH1
    +              This register is used to select peripheral for Tx channel 1. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.
    +              0
    +              6
    +              read-write
    +            
    +          
    +        
    +        
    +          IN_CONF0_CH2
    +          DMA_IN_CONF0_CH2_REG.
    +          0x1F0
    +          0x20
    +          
    +            
    +              IN_RST_CH2
    +              This bit is used to reset DMA channel 2 Rx FSM and Rx FIFO pointer.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              IN_LOOP_TEST_CH2
    +              reserved
    +              1
    +              1
    +              read-write
    +            
    +            
    +              INDSCR_BURST_EN_CH2
    +              Set this bit to 1 to enable INCR burst transfer for Rx channel 2 reading link descriptor when accessing internal SRAM.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              IN_DATA_BURST_EN_CH2
    +              Set this bit to 1 to enable INCR burst transfer for Rx channel 2 receiving data when accessing internal SRAM.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              MEM_TRANS_EN_CH2
    +              Set this bit 1 to enable automatic transmitting data from memory to memory via DMA.
    +              4
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          IN_CONF1_CH2
    +          DMA_IN_CONF1_CH2_REG.
    +          0x1F4
    +          0x20
    +          
    +            
    +              IN_CHECK_OWNER_CH2
    +              Set this bit to enable checking the owner attribute of the link descriptor.
    +              12
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          INFIFO_STATUS_CH2
    +          DMA_INFIFO_STATUS_CH2_REG.
    +          0x1F8
    +          0x20
    +          0x07800003
    +          
    +            
    +              INFIFO_FULL_CH2
    +              L1 Rx FIFO full signal for Rx channel 2.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              INFIFO_EMPTY_CH2
    +              L1 Rx FIFO empty signal for Rx channel 2.
    +              1
    +              1
    +              read-only
    +            
    +            
    +              INFIFO_CNT_CH2
    +              The register stores the byte number of the data in L1 Rx FIFO for Rx channel 2.
    +              2
    +              6
    +              read-only
    +            
    +            
    +              IN_REMAIN_UNDER_1B_CH2
    +              reserved
    +              23
    +              1
    +              read-only
    +            
    +            
    +              IN_REMAIN_UNDER_2B_CH2
    +              reserved
    +              24
    +              1
    +              read-only
    +            
    +            
    +              IN_REMAIN_UNDER_3B_CH2
    +              reserved
    +              25
    +              1
    +              read-only
    +            
    +            
    +              IN_REMAIN_UNDER_4B_CH2
    +              reserved
    +              26
    +              1
    +              read-only
    +            
    +            
    +              IN_BUF_HUNGRY_CH2
    +              reserved
    +              27
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_POP_CH2
    +          DMA_IN_POP_CH2_REG.
    +          0x1FC
    +          0x20
    +          0x00000800
    +          
    +            
    +              INFIFO_RDATA_CH2
    +              This register stores the data popping from DMA FIFO.
    +              0
    +              12
    +              read-only
    +            
    +            
    +              INFIFO_POP_CH2
    +              Set this bit to pop data from DMA FIFO.
    +              12
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          IN_LINK_CH2
    +          DMA_IN_LINK_CH2_REG.
    +          0x200
    +          0x20
    +          0x01100000
    +          
    +            
    +              INLINK_ADDR_CH2
    +              This register stores the 20 least significant bits of the first inlink descriptor's address.
    +              0
    +              20
    +              read-write
    +            
    +            
    +              INLINK_AUTO_RET_CH2
    +              Set this bit to return to current inlink descriptor's address, when there are some errors in current receiving data.
    +              20
    +              1
    +              read-write
    +            
    +            
    +              INLINK_STOP_CH2
    +              Set this bit to stop dealing with the inlink descriptors.
    +              21
    +              1
    +              read-write
    +            
    +            
    +              INLINK_START_CH2
    +              Set this bit to start dealing with the inlink descriptors.
    +              22
    +              1
    +              read-write
    +            
    +            
    +              INLINK_RESTART_CH2
    +              Set this bit to mount a new inlink descriptor.
    +              23
    +              1
    +              read-write
    +            
    +            
    +              INLINK_PARK_CH2
    +              1: the inlink descriptor's FSM is in idle state.  0: the inlink descriptor's FSM is working.
    +              24
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_STATE_CH2
    +          DMA_IN_STATE_CH2_REG.
    +          0x204
    +          0x20
    +          
    +            
    +              INLINK_DSCR_ADDR_CH2
    +              This register stores the current inlink descriptor's address.
    +              0
    +              18
    +              read-only
    +            
    +            
    +              IN_DSCR_STATE_CH2
    +              reserved
    +              18
    +              2
    +              read-only
    +            
    +            
    +              IN_STATE_CH2
    +              reserved
    +              20
    +              3
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_SUC_EOF_DES_ADDR_CH2
    +          DMA_IN_SUC_EOF_DES_ADDR_CH2_REG.
    +          0x208
    +          0x20
    +          
    +            
    +              IN_SUC_EOF_DES_ADDR_CH2
    +              This register stores the address of the inlink descriptor when the EOF bit in this descriptor is 1.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_ERR_EOF_DES_ADDR_CH2
    +          DMA_IN_ERR_EOF_DES_ADDR_CH2_REG.
    +          0x20C
    +          0x20
    +          
    +            
    +              IN_ERR_EOF_DES_ADDR_CH2
    +              This register stores the address of the inlink descriptor when there are some errors in current receiving data. Only used when peripheral is UHCI0.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_DSCR_CH2
    +          DMA_IN_DSCR_CH2_REG.
    +          0x210
    +          0x20
    +          
    +            
    +              INLINK_DSCR_CH2
    +              The address of the current inlink descriptor x.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_DSCR_BF0_CH2
    +          DMA_IN_DSCR_BF0_CH2_REG.
    +          0x214
    +          0x20
    +          
    +            
    +              INLINK_DSCR_BF0_CH2
    +              The address of the last inlink descriptor x-1.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_DSCR_BF1_CH2
    +          DMA_IN_DSCR_BF1_CH2_REG.
    +          0x218
    +          0x20
    +          
    +            
    +              INLINK_DSCR_BF1_CH2
    +              The address of the second-to-last inlink descriptor x-2.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_PRI_CH2
    +          DMA_IN_PRI_CH2_REG.
    +          0x21C
    +          0x20
    +          
    +            
    +              RX_PRI_CH2
    +              The priority of Rx channel 2. The larger of the value, the higher of the priority.
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          IN_PERI_SEL_CH2
    +          DMA_IN_PERI_SEL_CH2_REG.
    +          0x220
    +          0x20
    +          0x0000003F
    +          
    +            
    +              PERI_IN_SEL_CH2
    +              This register is used to select peripheral for Rx channel 2. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.
    +              0
    +              6
    +              read-write
    +            
    +          
    +        
    +        
    +          OUT_CONF0_CH2
    +          DMA_OUT_CONF0_CH2_REG.
    +          0x250
    +          0x20
    +          0x00000008
    +          
    +            
    +              OUT_RST_CH2
    +              This bit is used to reset DMA channel 2 Tx FSM and Tx FIFO pointer.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              OUT_LOOP_TEST_CH2
    +              reserved
    +              1
    +              1
    +              read-write
    +            
    +            
    +              OUT_AUTO_WRBACK_CH2
    +              Set this bit to enable automatic outlink-writeback when all the data in tx buffer has been transmitted.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              OUT_EOF_MODE_CH2
    +              EOF flag generation mode when transmitting data. 1: EOF flag for Tx channel 2 is generated when data need to transmit has been popped from FIFO in DMA
    +              3
    +              1
    +              read-write
    +            
    +            
    +              OUTDSCR_BURST_EN_CH2
    +              Set this bit to 1 to enable INCR burst transfer for Tx channel 2 reading link descriptor when accessing internal SRAM.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              OUT_DATA_BURST_EN_CH2
    +              Set this bit to 1 to enable INCR burst transfer for Tx channel 2 transmitting data when accessing internal SRAM.
    +              5
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          OUT_CONF1_CH2
    +          DMA_OUT_CONF1_CH2_REG.
    +          0x254
    +          0x20
    +          
    +            
    +              OUT_CHECK_OWNER_CH2
    +              Set this bit to enable checking the owner attribute of the link descriptor.
    +              12
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          OUTFIFO_STATUS_CH2
    +          DMA_OUTFIFO_STATUS_CH2_REG.
    +          0x258
    +          0x20
    +          0x07800002
    +          
    +            
    +              OUTFIFO_FULL_CH2
    +              L1 Tx FIFO full signal for Tx channel 2.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              OUTFIFO_EMPTY_CH2
    +              L1 Tx FIFO empty signal for Tx channel 2.
    +              1
    +              1
    +              read-only
    +            
    +            
    +              OUTFIFO_CNT_CH2
    +              The register stores the byte number of the data in L1 Tx FIFO for Tx channel 2.
    +              2
    +              6
    +              read-only
    +            
    +            
    +              OUT_REMAIN_UNDER_1B_CH2
    +              reserved
    +              23
    +              1
    +              read-only
    +            
    +            
    +              OUT_REMAIN_UNDER_2B_CH2
    +              reserved
    +              24
    +              1
    +              read-only
    +            
    +            
    +              OUT_REMAIN_UNDER_3B_CH2
    +              reserved
    +              25
    +              1
    +              read-only
    +            
    +            
    +              OUT_REMAIN_UNDER_4B_CH2
    +              reserved
    +              26
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          OUT_PUSH_CH2
    +          DMA_OUT_PUSH_CH2_REG.
    +          0x25C
    +          0x20
    +          
    +            
    +              OUTFIFO_WDATA_CH2
    +              This register stores the data that need to be pushed into DMA FIFO.
    +              0
    +              9
    +              read-write
    +            
    +            
    +              OUTFIFO_PUSH_CH2
    +              Set this bit to push data into DMA FIFO.
    +              9
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          OUT_LINK_CH2
    +          DMA_OUT_LINK_CH2_REG.
    +          0x260
    +          0x20
    +          0x00800000
    +          
    +            
    +              OUTLINK_ADDR_CH2
    +              This register stores the 20 least significant bits of the first outlink descriptor's address.
    +              0
    +              20
    +              read-write
    +            
    +            
    +              OUTLINK_STOP_CH2
    +              Set this bit to stop dealing with the outlink descriptors.
    +              20
    +              1
    +              read-write
    +            
    +            
    +              OUTLINK_START_CH2
    +              Set this bit to start dealing with the outlink descriptors.
    +              21
    +              1
    +              read-write
    +            
    +            
    +              OUTLINK_RESTART_CH2
    +              Set this bit to restart a new outlink from the last address.
    +              22
    +              1
    +              read-write
    +            
    +            
    +              OUTLINK_PARK_CH2
    +              1: the outlink descriptor's FSM is in idle state.  0: the outlink descriptor's FSM is working.
    +              23
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          OUT_STATE_CH2
    +          DMA_OUT_STATE_CH2_REG.
    +          0x264
    +          0x20
    +          
    +            
    +              OUTLINK_DSCR_ADDR_CH2
    +              This register stores the current outlink descriptor's address.
    +              0
    +              18
    +              read-only
    +            
    +            
    +              OUT_DSCR_STATE_CH2
    +              reserved
    +              18
    +              2
    +              read-only
    +            
    +            
    +              OUT_STATE_CH2
    +              reserved
    +              20
    +              3
    +              read-only
    +            
    +          
    +        
    +        
    +          OUT_EOF_DES_ADDR_CH2
    +          DMA_OUT_EOF_DES_ADDR_CH2_REG.
    +          0x268
    +          0x20
    +          
    +            
    +              OUT_EOF_DES_ADDR_CH2
    +              This register stores the address of the outlink descriptor when the EOF bit in this descriptor is 1.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          OUT_EOF_BFR_DES_ADDR_CH2
    +          DMA_OUT_EOF_BFR_DES_ADDR_CH2_REG.
    +          0x26C
    +          0x20
    +          
    +            
    +              OUT_EOF_BFR_DES_ADDR_CH2
    +              This register stores the address of the outlink descriptor before the last outlink descriptor.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          OUT_DSCR_CH2
    +          DMA_OUT_DSCR_CH2_REG.
    +          0x270
    +          0x20
    +          
    +            
    +              OUTLINK_DSCR_CH2
    +              The address of the current outlink descriptor y.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          OUT_DSCR_BF0_CH2
    +          DMA_OUT_DSCR_BF0_CH2_REG.
    +          0x274
    +          0x20
    +          
    +            
    +              OUTLINK_DSCR_BF0_CH2
    +              The address of the last outlink descriptor y-1.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          OUT_DSCR_BF1_CH2
    +          DMA_OUT_DSCR_BF1_CH2_REG.
    +          0x278
    +          0x20
    +          
    +            
    +              OUTLINK_DSCR_BF1_CH2
    +              The address of the second-to-last inlink descriptor x-2.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          OUT_PRI_CH2
    +          DMA_OUT_PRI_CH2_REG.
    +          0x27C
    +          0x20
    +          
    +            
    +              TX_PRI_CH2
    +              The priority of Tx channel 2. The larger of the value, the higher of the priority.
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          OUT_PERI_SEL_CH2
    +          DMA_OUT_PERI_SEL_CH2_REG.
    +          0x280
    +          0x20
    +          0x0000003F
    +          
    +            
    +              PERI_OUT_SEL_CH2
    +              This register is used to select peripheral for Tx channel 2. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.
    +              0
    +              6
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      DS
    +      Digital Signature
    +      DS
    +      0x6003D000
    +      
    +        0x0
    +        0xA4C
    +        registers
    +      
    +      
    +        
    +          512
    +          0x1
    +          Y_MEM[%s]
    +          memory that stores Y
    +          0x0
    +          0x8
    +        
    +        
    +          512
    +          0x1
    +          M_MEM[%s]
    +          memory that stores M
    +          0x200
    +          0x8
    +        
    +        
    +          512
    +          0x1
    +          RB_MEM[%s]
    +          memory that stores Rb
    +          0x400
    +          0x8
    +        
    +        
    +          48
    +          0x1
    +          BOX_MEM[%s]
    +          memory that stores BOX
    +          0x600
    +          0x8
    +        
    +        
    +          512
    +          0x1
    +          X_MEM[%s]
    +          memory that stores X
    +          0x800
    +          0x8
    +        
    +        
    +          512
    +          0x1
    +          Z_MEM[%s]
    +          memory that stores Z
    +          0xA00
    +          0x8
    +        
    +        
    +          SET_START
    +          DS start control register
    +          0xE00
    +          0x20
    +          
    +            
    +              SET_START
    +              set this bit to start DS operation.
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          SET_CONTINUE
    +          DS continue control register
    +          0xE04
    +          0x20
    +          
    +            
    +              SET_CONTINUE
    +              set this bit to continue DS operation.
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          SET_FINISH
    +          DS finish control register
    +          0xE08
    +          0x20
    +          
    +            
    +              SET_FINISH
    +              Set this bit to finish DS process.
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          QUERY_BUSY
    +          DS query busy register
    +          0xE0C
    +          0x20
    +          
    +            
    +              QUERY_BUSY
    +              digital signature state. 1'b0: idle, 1'b1: busy
    +              0
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          QUERY_KEY_WRONG
    +          DS query key-wrong counter register
    +          0xE10
    +          0x20
    +          
    +            
    +              QUERY_KEY_WRONG
    +              digital signature key wrong counter
    +              0
    +              4
    +              read-only
    +            
    +          
    +        
    +        
    +          QUERY_CHECK
    +          DS query check result register
    +          0xE14
    +          0x20
    +          
    +            
    +              MD_ERROR
    +              MD checkout result. 1'b0: MD check pass, 1'b1: MD check fail
    +              0
    +              1
    +              read-only
    +            
    +            
    +              PADDING_BAD
    +              padding checkout result. 1'b0: a good padding, 1'b1: a bad padding
    +              1
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          DATE
    +          DS version control register
    +          0xE20
    +          0x20
    +          0x20200618
    +          
    +            
    +              DATE
    +              ds version information
    +              0
    +              30
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      EFUSE
    +      eFuse Controller
    +      EFUSE
    +      0x60008800
    +      
    +        0x0
    +        0x1CC
    +        registers
    +      
    +      
    +        EFUSE
    +        24
    +      
    +      
    +        
    +          PGM_DATA0
    +          Register 0 that stores data to be programmed.
    +          0x0
    +          0x20
    +          
    +            
    +              PGM_DATA_0
    +              The content of the 0th 32-bit data to be programmed.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          PGM_DATA1
    +          Register 1 that stores data to be programmed.
    +          0x4
    +          0x20
    +          
    +            
    +              PGM_DATA_1
    +              The content of the 1st 32-bit data to be programmed.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          PGM_DATA2
    +          Register 2 that stores data to be programmed.
    +          0x8
    +          0x20
    +          
    +            
    +              PGM_DATA_2
    +              The content of the 2nd 32-bit data to be programmed.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          PGM_DATA3
    +          Register 3 that stores data to be programmed.
    +          0xC
    +          0x20
    +          
    +            
    +              PGM_DATA_3
    +              The content of the 3rd 32-bit data to be programmed.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          PGM_DATA4
    +          Register 4 that stores data to be programmed.
    +          0x10
    +          0x20
    +          
    +            
    +              PGM_DATA_4
    +              The content of the 4th 32-bit data to be programmed.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          PGM_DATA5
    +          Register 5 that stores data to be programmed.
    +          0x14
    +          0x20
    +          
    +            
    +              PGM_DATA_5
    +              The content of the 5th 32-bit data to be programmed.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          PGM_DATA6
    +          Register 6 that stores data to be programmed.
    +          0x18
    +          0x20
    +          
    +            
    +              PGM_DATA_6
    +              The content of the 6th 32-bit data to be programmed.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          PGM_DATA7
    +          Register 7 that stores data to be programmed.
    +          0x1C
    +          0x20
    +          
    +            
    +              PGM_DATA_7
    +              The content of the 7th 32-bit data to be programmed.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          PGM_CHECK_VALUE0
    +          Register 0 that stores the RS code to be programmed.
    +          0x20
    +          0x20
    +          
    +            
    +              PGM_RS_DATA_0
    +              The content of the 0th 32-bit RS code to be programmed.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          PGM_CHECK_VALUE1
    +          Register 1 that stores the RS code to be programmed.
    +          0x24
    +          0x20
    +          
    +            
    +              PGM_RS_DATA_1
    +              The content of the 1st 32-bit RS code to be programmed.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          PGM_CHECK_VALUE2
    +          Register 2 that stores the RS code to be programmed.
    +          0x28
    +          0x20
    +          
    +            
    +              PGM_RS_DATA_2
    +              The content of the 2nd 32-bit RS code to be programmed.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          RD_WR_DIS
    +          BLOCK0 data register 0.
    +          0x2C
    +          0x20
    +          
    +            
    +              WR_DIS
    +              Disable programming of individual eFuses.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_REPEAT_DATA0
    +          BLOCK0 data register 1.
    +          0x30
    +          0x20
    +          
    +            
    +              RD_DIS
    +              Set this bit to disable reading from BlOCK4-10.
    +              0
    +              7
    +              read-only
    +            
    +            
    +              DIS_RTC_RAM_BOOT
    +              Set this bit to disable boot from RTC RAM.
    +              7
    +              1
    +              read-only
    +            
    +            
    +              DIS_ICACHE
    +              Set this bit to disable Icache.
    +              8
    +              1
    +              read-only
    +            
    +            
    +              DIS_USB_JTAG
    +              Set this bit to disable function of usb switch to jtag in module of usb device.
    +              9
    +              1
    +              read-only
    +            
    +            
    +              DIS_DOWNLOAD_ICACHE
    +              Set this bit to disable Icache in download mode (boot_mode[3:0] is 0, 1, 2, 3, 6, 7).
    +              10
    +              1
    +              read-only
    +            
    +            
    +              DIS_USB_DEVICE
    +              Set this bit to disable usb device.
    +              11
    +              1
    +              read-only
    +            
    +            
    +              DIS_FORCE_DOWNLOAD
    +              Set this bit to disable the function that forces chip into download mode.
    +              12
    +              1
    +              read-only
    +            
    +            
    +              RPT4_RESERVED6
    +              Reserved (used for four backups method).
    +              13
    +              1
    +              read-only
    +            
    +            
    +              DIS_CAN
    +              Set this bit to disable CAN function.
    +              14
    +              1
    +              read-only
    +            
    +            
    +              JTAG_SEL_ENABLE
    +              Set this bit to enable selection between usb_to_jtag and pad_to_jtag through strapping gpio10 when both reg_dis_usb_jtag and reg_dis_pad_jtag are equal to 0.
    +              15
    +              1
    +              read-only
    +            
    +            
    +              SOFT_DIS_JTAG
    +              Set these bits to disable JTAG in the soft way (odd number 1 means disable ). JTAG can be enabled in HMAC module.
    +              16
    +              3
    +              read-only
    +            
    +            
    +              DIS_PAD_JTAG
    +              Set this bit to disable JTAG in the hard way. JTAG is disabled permanently.
    +              19
    +              1
    +              read-only
    +            
    +            
    +              DIS_DOWNLOAD_MANUAL_ENCRYPT
    +              Set this bit to disable flash encryption when in download boot modes.
    +              20
    +              1
    +              read-only
    +            
    +            
    +              USB_DREFH
    +              Controls single-end input threshold vrefh, 1.76 V to 2 V with step of 80 mV, stored in eFuse.
    +              21
    +              2
    +              read-only
    +            
    +            
    +              USB_DREFL
    +              Controls single-end input threshold vrefl, 0.8 V to 1.04 V with step of 80 mV, stored in eFuse.
    +              23
    +              2
    +              read-only
    +            
    +            
    +              USB_EXCHG_PINS
    +              Set this bit to exchange USB D+ and D- pins.
    +              25
    +              1
    +              read-only
    +            
    +            
    +              VDD_SPI_AS_GPIO
    +              Set this bit to vdd spi pin function as gpio.
    +              26
    +              1
    +              read-only
    +            
    +            
    +              BTLC_GPIO_ENABLE
    +              Enable btlc gpio.
    +              27
    +              2
    +              read-only
    +            
    +            
    +              POWERGLITCH_EN
    +              Set this bit to enable power glitch function.
    +              29
    +              1
    +              read-only
    +            
    +            
    +              POWER_GLITCH_DSENSE
    +              Sample delay configuration of power glitch.
    +              30
    +              2
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_REPEAT_DATA1
    +          BLOCK0 data register 2.
    +          0x34
    +          0x20
    +          
    +            
    +              RPT4_RESERVED2
    +              Reserved (used for four backups method).
    +              0
    +              16
    +              read-only
    +            
    +            
    +              WDT_DELAY_SEL
    +              Selects RTC watchdog timeout threshold, in unit of slow clock cycle. 0: 40000. 1: 80000. 2: 160000. 3:320000.
    +              16
    +              2
    +              read-only
    +            
    +            
    +              SPI_BOOT_CRYPT_CNT
    +              Set this bit to enable SPI boot encrypt/decrypt. Odd number of 1: enable. even number of 1: disable.
    +              18
    +              3
    +              read-only
    +            
    +            
    +              SECURE_BOOT_KEY_REVOKE0
    +              Set this bit to enable revoking first secure boot key.
    +              21
    +              1
    +              read-only
    +            
    +            
    +              SECURE_BOOT_KEY_REVOKE1
    +              Set this bit to enable revoking second secure boot key.
    +              22
    +              1
    +              read-only
    +            
    +            
    +              SECURE_BOOT_KEY_REVOKE2
    +              Set this bit to enable revoking third secure boot key.
    +              23
    +              1
    +              read-only
    +            
    +            
    +              KEY_PURPOSE_0
    +              Purpose of Key0.
    +              24
    +              4
    +              read-only
    +            
    +            
    +              KEY_PURPOSE_1
    +              Purpose of Key1.
    +              28
    +              4
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_REPEAT_DATA2
    +          BLOCK0 data register 3.
    +          0x38
    +          0x20
    +          
    +            
    +              KEY_PURPOSE_2
    +              Purpose of Key2.
    +              0
    +              4
    +              read-only
    +            
    +            
    +              KEY_PURPOSE_3
    +              Purpose of Key3.
    +              4
    +              4
    +              read-only
    +            
    +            
    +              KEY_PURPOSE_4
    +              Purpose of Key4.
    +              8
    +              4
    +              read-only
    +            
    +            
    +              KEY_PURPOSE_5
    +              Purpose of Key5.
    +              12
    +              4
    +              read-only
    +            
    +            
    +              RPT4_RESERVED3
    +              Reserved (used for four backups method).
    +              16
    +              4
    +              read-only
    +            
    +            
    +              SECURE_BOOT_EN
    +              Set this bit to enable secure boot.
    +              20
    +              1
    +              read-only
    +            
    +            
    +              SECURE_BOOT_AGGRESSIVE_REVOKE
    +              Set this bit to enable revoking aggressive secure boot.
    +              21
    +              1
    +              read-only
    +            
    +            
    +              RPT4_RESERVED0
    +              Reserved (used for four backups method).
    +              22
    +              6
    +              read-only
    +            
    +            
    +              FLASH_TPUW
    +              Configures flash waiting time after power-up, in unit of ms. If the value is less than 15, the waiting time is the configurable value; Otherwise, the waiting time is twice the configurable value.
    +              28
    +              4
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_REPEAT_DATA3
    +          BLOCK0 data register 4.
    +          0x3C
    +          0x20
    +          
    +            
    +              DIS_DOWNLOAD_MODE
    +              Set this bit to disable download mode (boot_mode[3:0] = 0, 1, 2, 3, 6, 7).
    +              0
    +              1
    +              read-only
    +            
    +            
    +              DIS_LEGACY_SPI_BOOT
    +              Set this bit to disable Legacy SPI boot mode (boot_mode[3:0] = 4).
    +              1
    +              1
    +              read-only
    +            
    +            
    +              UART_PRINT_CHANNEL
    +              Selectes the default UART print channel. 0: UART0. 1: UART1.
    +              2
    +              1
    +              read-only
    +            
    +            
    +              FLASH_ECC_MODE
    +              Set ECC mode in ROM, 0: ROM would Enable Flash ECC 16to18 byte mode. 1:ROM would use 16to17 byte mode.
    +              3
    +              1
    +              read-only
    +            
    +            
    +              DIS_USB_DOWNLOAD_MODE
    +              Set this bit to disable UART download mode through USB.
    +              4
    +              1
    +              read-only
    +            
    +            
    +              ENABLE_SECURITY_DOWNLOAD
    +              Set this bit to enable secure UART download mode.
    +              5
    +              1
    +              read-only
    +            
    +            
    +              UART_PRINT_CONTROL
    +              Set the default UARTboot message output mode. 00: Enabled. 01: Enabled when GPIO8 is low at reset. 10: Enabled when GPIO8 is high at reset. 11:disabled.
    +              6
    +              2
    +              read-only
    +            
    +            
    +              PIN_POWER_SELECTION
    +              GPIO33-GPIO37 power supply selection in ROM code. 0: VDD3P3_CPU. 1: VDD_SPI.
    +              8
    +              1
    +              read-only
    +            
    +            
    +              FLASH_TYPE
    +              Set the maximum lines of SPI flash. 0: four lines. 1: eight lines.
    +              9
    +              1
    +              read-only
    +            
    +            
    +              FLASH_PAGE_SIZE
    +              Set Flash page size.
    +              10
    +              2
    +              read-only
    +            
    +            
    +              FLASH_ECC_EN
    +              Set 1 to enable ECC for flash boot.
    +              12
    +              1
    +              read-only
    +            
    +            
    +              FORCE_SEND_RESUME
    +              Set this bit to force ROM code to send a resume command during SPI boot.
    +              13
    +              1
    +              read-only
    +            
    +            
    +              SECURE_VERSION
    +              Secure version (used by ESP-IDF anti-rollback feature).
    +              14
    +              16
    +              read-only
    +            
    +            
    +              RPT4_RESERVED1
    +              Reserved (used for four backups method).
    +              30
    +              2
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_REPEAT_DATA4
    +          BLOCK0 data register 5.
    +          0x40
    +          0x20
    +          
    +            
    +              RPT4_RESERVED4
    +              Reserved (used for four backups method).
    +              0
    +              24
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_MAC_SPI_SYS_0
    +          BLOCK1 data register 0.
    +          0x44
    +          0x20
    +          
    +            
    +              MAC_0
    +              Stores the low 32 bits of MAC address.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_MAC_SPI_SYS_1
    +          BLOCK1 data register 1.
    +          0x48
    +          0x20
    +          
    +            
    +              MAC_1
    +              Stores the high 16 bits of MAC address.
    +              0
    +              16
    +              read-only
    +            
    +            
    +              SPI_PAD_CONF_0
    +              Stores the zeroth part of SPI_PAD_CONF.
    +              16
    +              16
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_MAC_SPI_SYS_2
    +          BLOCK1 data register 2.
    +          0x4C
    +          0x20
    +          
    +            
    +              SPI_PAD_CONF_1
    +              Stores the first part of SPI_PAD_CONF.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_MAC_SPI_SYS_3
    +          BLOCK1 data register 3.
    +          0x50
    +          0x20
    +          
    +            
    +              SPI_PAD_CONF_2
    +              Stores the second part of SPI_PAD_CONF.
    +              0
    +              18
    +              read-only
    +            
    +            
    +              SYS_DATA_PART0_0
    +              Stores the fist 14 bits of the zeroth part of system data.
    +              18
    +              14
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_MAC_SPI_SYS_4
    +          BLOCK1 data register 4.
    +          0x54
    +          0x20
    +          
    +            
    +              SYS_DATA_PART0_1
    +              Stores the fist 32 bits of the zeroth part of system data.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_MAC_SPI_SYS_5
    +          BLOCK1 data register 5.
    +          0x58
    +          0x20
    +          
    +            
    +              SYS_DATA_PART0_2
    +              Stores the second 32 bits of the zeroth part of system data.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_SYS_PART1_DATA0
    +          Register 0 of BLOCK2 (system).
    +          0x5C
    +          0x20
    +          
    +            
    +              SYS_DATA_PART1_0
    +              Stores the zeroth 32 bits of the first part of system data.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_SYS_PART1_DATA1
    +          Register 1 of BLOCK2 (system).
    +          0x60
    +          0x20
    +          
    +            
    +              SYS_DATA_PART1_1
    +              Stores the first 32 bits of the first part of system data.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_SYS_PART1_DATA2
    +          Register 2 of BLOCK2 (system).
    +          0x64
    +          0x20
    +          
    +            
    +              SYS_DATA_PART1_2
    +              Stores the second 32 bits of the first part of system data.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_SYS_PART1_DATA3
    +          Register 3 of BLOCK2 (system).
    +          0x68
    +          0x20
    +          
    +            
    +              SYS_DATA_PART1_3
    +              Stores the third 32 bits of the first part of system data.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_SYS_PART1_DATA4
    +          Register 4 of BLOCK2 (system).
    +          0x6C
    +          0x20
    +          
    +            
    +              SYS_DATA_PART1_4
    +              Stores the fourth 32 bits of the first part of system data.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_SYS_PART1_DATA5
    +          Register 5 of BLOCK2 (system).
    +          0x70
    +          0x20
    +          
    +            
    +              SYS_DATA_PART1_5
    +              Stores the fifth 32 bits of the first part of system data.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_SYS_PART1_DATA6
    +          Register 6 of BLOCK2 (system).
    +          0x74
    +          0x20
    +          
    +            
    +              SYS_DATA_PART1_6
    +              Stores the sixth 32 bits of the first part of system data.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_SYS_PART1_DATA7
    +          Register 7 of BLOCK2 (system).
    +          0x78
    +          0x20
    +          
    +            
    +              SYS_DATA_PART1_7
    +              Stores the seventh 32 bits of the first part of system data.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_USR_DATA0
    +          Register 0 of BLOCK3 (user).
    +          0x7C
    +          0x20
    +          
    +            
    +              USR_DATA0
    +              Stores the zeroth 32 bits of BLOCK3 (user).
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_USR_DATA1
    +          Register 1 of BLOCK3 (user).
    +          0x80
    +          0x20
    +          
    +            
    +              USR_DATA1
    +              Stores the first 32 bits of BLOCK3 (user).
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_USR_DATA2
    +          Register 2 of BLOCK3 (user).
    +          0x84
    +          0x20
    +          
    +            
    +              USR_DATA2
    +              Stores the second 32 bits of BLOCK3 (user).
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_USR_DATA3
    +          Register 3 of BLOCK3 (user).
    +          0x88
    +          0x20
    +          
    +            
    +              USR_DATA3
    +              Stores the third 32 bits of BLOCK3 (user).
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_USR_DATA4
    +          Register 4 of BLOCK3 (user).
    +          0x8C
    +          0x20
    +          
    +            
    +              USR_DATA4
    +              Stores the fourth 32 bits of BLOCK3 (user).
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_USR_DATA5
    +          Register 5 of BLOCK3 (user).
    +          0x90
    +          0x20
    +          
    +            
    +              USR_DATA5
    +              Stores the fifth 32 bits of BLOCK3 (user).
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_USR_DATA6
    +          Register 6 of BLOCK3 (user).
    +          0x94
    +          0x20
    +          
    +            
    +              USR_DATA6
    +              Stores the sixth 32 bits of BLOCK3 (user).
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_USR_DATA7
    +          Register 7 of BLOCK3 (user).
    +          0x98
    +          0x20
    +          
    +            
    +              USR_DATA7
    +              Stores the seventh 32 bits of BLOCK3 (user).
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY0_DATA0
    +          Register 0 of BLOCK4 (KEY0).
    +          0x9C
    +          0x20
    +          
    +            
    +              KEY0_DATA0
    +              Stores the zeroth 32 bits of KEY0.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY0_DATA1
    +          Register 1 of BLOCK4 (KEY0).
    +          0xA0
    +          0x20
    +          
    +            
    +              KEY0_DATA1
    +              Stores the first 32 bits of KEY0.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY0_DATA2
    +          Register 2 of BLOCK4 (KEY0).
    +          0xA4
    +          0x20
    +          
    +            
    +              KEY0_DATA2
    +              Stores the second 32 bits of KEY0.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY0_DATA3
    +          Register 3 of BLOCK4 (KEY0).
    +          0xA8
    +          0x20
    +          
    +            
    +              KEY0_DATA3
    +              Stores the third 32 bits of KEY0.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY0_DATA4
    +          Register 4 of BLOCK4 (KEY0).
    +          0xAC
    +          0x20
    +          
    +            
    +              KEY0_DATA4
    +              Stores the fourth 32 bits of KEY0.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY0_DATA5
    +          Register 5 of BLOCK4 (KEY0).
    +          0xB0
    +          0x20
    +          
    +            
    +              KEY0_DATA5
    +              Stores the fifth 32 bits of KEY0.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY0_DATA6
    +          Register 6 of BLOCK4 (KEY0).
    +          0xB4
    +          0x20
    +          
    +            
    +              KEY0_DATA6
    +              Stores the sixth 32 bits of KEY0.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY0_DATA7
    +          Register 7 of BLOCK4 (KEY0).
    +          0xB8
    +          0x20
    +          
    +            
    +              KEY0_DATA7
    +              Stores the seventh 32 bits of KEY0.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY1_DATA0
    +          Register 0 of BLOCK5 (KEY1).
    +          0xBC
    +          0x20
    +          
    +            
    +              KEY1_DATA0
    +              Stores the zeroth 32 bits of KEY1.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY1_DATA1
    +          Register 1 of BLOCK5 (KEY1).
    +          0xC0
    +          0x20
    +          
    +            
    +              KEY1_DATA1
    +              Stores the first 32 bits of KEY1.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY1_DATA2
    +          Register 2 of BLOCK5 (KEY1).
    +          0xC4
    +          0x20
    +          
    +            
    +              KEY1_DATA2
    +              Stores the second 32 bits of KEY1.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY1_DATA3
    +          Register 3 of BLOCK5 (KEY1).
    +          0xC8
    +          0x20
    +          
    +            
    +              KEY1_DATA3
    +              Stores the third 32 bits of KEY1.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY1_DATA4
    +          Register 4 of BLOCK5 (KEY1).
    +          0xCC
    +          0x20
    +          
    +            
    +              KEY1_DATA4
    +              Stores the fourth 32 bits of KEY1.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY1_DATA5
    +          Register 5 of BLOCK5 (KEY1).
    +          0xD0
    +          0x20
    +          
    +            
    +              KEY1_DATA5
    +              Stores the fifth 32 bits of KEY1.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY1_DATA6
    +          Register 6 of BLOCK5 (KEY1).
    +          0xD4
    +          0x20
    +          
    +            
    +              KEY1_DATA6
    +              Stores the sixth 32 bits of KEY1.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY1_DATA7
    +          Register 7 of BLOCK5 (KEY1).
    +          0xD8
    +          0x20
    +          
    +            
    +              KEY1_DATA7
    +              Stores the seventh 32 bits of KEY1.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY2_DATA0
    +          Register 0 of BLOCK6 (KEY2).
    +          0xDC
    +          0x20
    +          
    +            
    +              KEY2_DATA0
    +              Stores the zeroth 32 bits of KEY2.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY2_DATA1
    +          Register 1 of BLOCK6 (KEY2).
    +          0xE0
    +          0x20
    +          
    +            
    +              KEY2_DATA1
    +              Stores the first 32 bits of KEY2.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY2_DATA2
    +          Register 2 of BLOCK6 (KEY2).
    +          0xE4
    +          0x20
    +          
    +            
    +              KEY2_DATA2
    +              Stores the second 32 bits of KEY2.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY2_DATA3
    +          Register 3 of BLOCK6 (KEY2).
    +          0xE8
    +          0x20
    +          
    +            
    +              KEY2_DATA3
    +              Stores the third 32 bits of KEY2.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY2_DATA4
    +          Register 4 of BLOCK6 (KEY2).
    +          0xEC
    +          0x20
    +          
    +            
    +              KEY2_DATA4
    +              Stores the fourth 32 bits of KEY2.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY2_DATA5
    +          Register 5 of BLOCK6 (KEY2).
    +          0xF0
    +          0x20
    +          
    +            
    +              KEY2_DATA5
    +              Stores the fifth 32 bits of KEY2.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY2_DATA6
    +          Register 6 of BLOCK6 (KEY2).
    +          0xF4
    +          0x20
    +          
    +            
    +              KEY2_DATA6
    +              Stores the sixth 32 bits of KEY2.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY2_DATA7
    +          Register 7 of BLOCK6 (KEY2).
    +          0xF8
    +          0x20
    +          
    +            
    +              KEY2_DATA7
    +              Stores the seventh 32 bits of KEY2.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY3_DATA0
    +          Register 0 of BLOCK7 (KEY3).
    +          0xFC
    +          0x20
    +          
    +            
    +              KEY3_DATA0
    +              Stores the zeroth 32 bits of KEY3.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY3_DATA1
    +          Register 1 of BLOCK7 (KEY3).
    +          0x100
    +          0x20
    +          
    +            
    +              KEY3_DATA1
    +              Stores the first 32 bits of KEY3.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY3_DATA2
    +          Register 2 of BLOCK7 (KEY3).
    +          0x104
    +          0x20
    +          
    +            
    +              KEY3_DATA2
    +              Stores the second 32 bits of KEY3.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY3_DATA3
    +          Register 3 of BLOCK7 (KEY3).
    +          0x108
    +          0x20
    +          
    +            
    +              KEY3_DATA3
    +              Stores the third 32 bits of KEY3.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY3_DATA4
    +          Register 4 of BLOCK7 (KEY3).
    +          0x10C
    +          0x20
    +          
    +            
    +              KEY3_DATA4
    +              Stores the fourth 32 bits of KEY3.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY3_DATA5
    +          Register 5 of BLOCK7 (KEY3).
    +          0x110
    +          0x20
    +          
    +            
    +              KEY3_DATA5
    +              Stores the fifth 32 bits of KEY3.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY3_DATA6
    +          Register 6 of BLOCK7 (KEY3).
    +          0x114
    +          0x20
    +          
    +            
    +              KEY3_DATA6
    +              Stores the sixth 32 bits of KEY3.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY3_DATA7
    +          Register 7 of BLOCK7 (KEY3).
    +          0x118
    +          0x20
    +          
    +            
    +              KEY3_DATA7
    +              Stores the seventh 32 bits of KEY3.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY4_DATA0
    +          Register 0 of BLOCK8 (KEY4).
    +          0x11C
    +          0x20
    +          
    +            
    +              KEY4_DATA0
    +              Stores the zeroth 32 bits of KEY4.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY4_DATA1
    +          Register 1 of BLOCK8 (KEY4).
    +          0x120
    +          0x20
    +          
    +            
    +              KEY4_DATA1
    +              Stores the first 32 bits of KEY4.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY4_DATA2
    +          Register 2 of BLOCK8 (KEY4).
    +          0x124
    +          0x20
    +          
    +            
    +              KEY4_DATA2
    +              Stores the second 32 bits of KEY4.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY4_DATA3
    +          Register 3 of BLOCK8 (KEY4).
    +          0x128
    +          0x20
    +          
    +            
    +              KEY4_DATA3
    +              Stores the third 32 bits of KEY4.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY4_DATA4
    +          Register 4 of BLOCK8 (KEY4).
    +          0x12C
    +          0x20
    +          
    +            
    +              KEY4_DATA4
    +              Stores the fourth 32 bits of KEY4.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY4_DATA5
    +          Register 5 of BLOCK8 (KEY4).
    +          0x130
    +          0x20
    +          
    +            
    +              KEY4_DATA5
    +              Stores the fifth 32 bits of KEY4.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY4_DATA6
    +          Register 6 of BLOCK8 (KEY4).
    +          0x134
    +          0x20
    +          
    +            
    +              KEY4_DATA6
    +              Stores the sixth 32 bits of KEY4.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY4_DATA7
    +          Register 7 of BLOCK8 (KEY4).
    +          0x138
    +          0x20
    +          
    +            
    +              KEY4_DATA7
    +              Stores the seventh 32 bits of KEY4.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY5_DATA0
    +          Register 0 of BLOCK9 (KEY5).
    +          0x13C
    +          0x20
    +          
    +            
    +              KEY5_DATA0
    +              Stores the zeroth 32 bits of KEY5.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY5_DATA1
    +          Register 1 of BLOCK9 (KEY5).
    +          0x140
    +          0x20
    +          
    +            
    +              KEY5_DATA1
    +              Stores the first 32 bits of KEY5.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY5_DATA2
    +          Register 2 of BLOCK9 (KEY5).
    +          0x144
    +          0x20
    +          
    +            
    +              KEY5_DATA2
    +              Stores the second 32 bits of KEY5.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY5_DATA3
    +          Register 3 of BLOCK9 (KEY5).
    +          0x148
    +          0x20
    +          
    +            
    +              KEY5_DATA3
    +              Stores the third 32 bits of KEY5.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY5_DATA4
    +          Register 4 of BLOCK9 (KEY5).
    +          0x14C
    +          0x20
    +          
    +            
    +              KEY5_DATA4
    +              Stores the fourth 32 bits of KEY5.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY5_DATA5
    +          Register 5 of BLOCK9 (KEY5).
    +          0x150
    +          0x20
    +          
    +            
    +              KEY5_DATA5
    +              Stores the fifth 32 bits of KEY5.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY5_DATA6
    +          Register 6 of BLOCK9 (KEY5).
    +          0x154
    +          0x20
    +          
    +            
    +              KEY5_DATA6
    +              Stores the sixth 32 bits of KEY5.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_KEY5_DATA7
    +          Register 7 of BLOCK9 (KEY5).
    +          0x158
    +          0x20
    +          
    +            
    +              KEY5_DATA7
    +              Stores the seventh 32 bits of KEY5.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_SYS_PART2_DATA0
    +          Register 0 of BLOCK10 (system).
    +          0x15C
    +          0x20
    +          
    +            
    +              SYS_DATA_PART2_0
    +              Stores the 0th 32 bits of the 2nd part of system data.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_SYS_PART2_DATA1
    +          Register 1 of BLOCK9 (KEY5).
    +          0x160
    +          0x20
    +          
    +            
    +              SYS_DATA_PART2_1
    +              Stores the 1st 32 bits of the 2nd part of system data.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_SYS_PART2_DATA2
    +          Register 2 of BLOCK10 (system).
    +          0x164
    +          0x20
    +          
    +            
    +              SYS_DATA_PART2_2
    +              Stores the 2nd 32 bits of the 2nd part of system data.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_SYS_PART2_DATA3
    +          Register 3 of BLOCK10 (system).
    +          0x168
    +          0x20
    +          
    +            
    +              SYS_DATA_PART2_3
    +              Stores the 3rd 32 bits of the 2nd part of system data.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_SYS_PART2_DATA4
    +          Register 4 of BLOCK10 (system).
    +          0x16C
    +          0x20
    +          
    +            
    +              SYS_DATA_PART2_4
    +              Stores the 4th 32 bits of the 2nd part of system data.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_SYS_PART2_DATA5
    +          Register 5 of BLOCK10 (system).
    +          0x170
    +          0x20
    +          
    +            
    +              SYS_DATA_PART2_5
    +              Stores the 5th 32 bits of the 2nd part of system data.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_SYS_PART2_DATA6
    +          Register 6 of BLOCK10 (system).
    +          0x174
    +          0x20
    +          
    +            
    +              SYS_DATA_PART2_6
    +              Stores the 6th 32 bits of the 2nd part of system data.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_SYS_PART2_DATA7
    +          Register 7 of BLOCK10 (system).
    +          0x178
    +          0x20
    +          
    +            
    +              SYS_DATA_PART2_7
    +              Stores the 7th 32 bits of the 2nd part of system data.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_REPEAT_ERR0
    +          Programming error record register 0 of BLOCK0.
    +          0x17C
    +          0x20
    +          
    +            
    +              RD_DIS_ERR
    +              If any bit in RD_DIS is 1, then it indicates a programming error.
    +              0
    +              7
    +              read-only
    +            
    +            
    +              DIS_RTC_RAM_BOOT_ERR
    +              If DIS_RTC_RAM_BOOT is 1, then it indicates a programming error.
    +              7
    +              1
    +              read-only
    +            
    +            
    +              DIS_ICACHE_ERR
    +              If DIS_ICACHE is 1, then it indicates a programming error.
    +              8
    +              1
    +              read-only
    +            
    +            
    +              DIS_USB_JTAG_ERR
    +              If DIS_USB_JTAG is 1, then it indicates a programming error.
    +              9
    +              1
    +              read-only
    +            
    +            
    +              DIS_DOWNLOAD_ICACHE_ERR
    +              If DIS_DOWNLOAD_ICACHE is 1, then it indicates a programming error.
    +              10
    +              1
    +              read-only
    +            
    +            
    +              DIS_USB_DEVICE_ERR
    +              If DIS_USB_DEVICE is 1, then it indicates a programming error.
    +              11
    +              1
    +              read-only
    +            
    +            
    +              DIS_FORCE_DOWNLOAD_ERR
    +              If DIS_FORCE_DOWNLOAD is 1, then it indicates a programming error.
    +              12
    +              1
    +              read-only
    +            
    +            
    +              RPT4_RESERVED6_ERR
    +              Reserved.
    +              13
    +              1
    +              read-only
    +            
    +            
    +              DIS_CAN_ERR
    +              If DIS_CAN is 1, then it indicates a programming error.
    +              14
    +              1
    +              read-only
    +            
    +            
    +              JTAG_SEL_ENABLE_ERR
    +              If JTAG_SEL_ENABLE is 1, then it indicates a programming error.
    +              15
    +              1
    +              read-only
    +            
    +            
    +              SOFT_DIS_JTAG_ERR
    +              If SOFT_DIS_JTAG is 1, then it indicates a programming error.
    +              16
    +              3
    +              read-only
    +            
    +            
    +              DIS_PAD_JTAG_ERR
    +              If DIS_PAD_JTAG is 1, then it indicates a programming error.
    +              19
    +              1
    +              read-only
    +            
    +            
    +              DIS_DOWNLOAD_MANUAL_ENCRYPT_ERR
    +              If DIS_DOWNLOAD_MANUAL_ENCRYPT is 1, then it indicates a programming error.
    +              20
    +              1
    +              read-only
    +            
    +            
    +              USB_DREFH_ERR
    +              If any bit in USB_DREFH is 1, then it indicates a programming error.
    +              21
    +              2
    +              read-only
    +            
    +            
    +              USB_DREFL_ERR
    +              If any bit in USB_DREFL is 1, then it indicates a programming error.
    +              23
    +              2
    +              read-only
    +            
    +            
    +              USB_EXCHG_PINS_ERR
    +              If USB_EXCHG_PINS is 1, then it indicates a programming error.
    +              25
    +              1
    +              read-only
    +            
    +            
    +              VDD_SPI_AS_GPIO_ERR
    +              If VDD_SPI_AS_GPIO is 1, then it indicates a programming error.
    +              26
    +              1
    +              read-only
    +            
    +            
    +              BTLC_GPIO_ENABLE_ERR
    +              If any bit in BTLC_GPIO_ENABLE is 1, then it indicates a programming error.
    +              27
    +              2
    +              read-only
    +            
    +            
    +              POWERGLITCH_EN_ERR
    +              If POWERGLITCH_EN is 1, then it indicates a programming error.
    +              29
    +              1
    +              read-only
    +            
    +            
    +              POWER_GLITCH_DSENSE_ERR
    +              If any bit in POWER_GLITCH_DSENSE is 1, then it indicates a programming error.
    +              30
    +              2
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_REPEAT_ERR1
    +          Programming error record register 1 of BLOCK0.
    +          0x180
    +          0x20
    +          
    +            
    +              RPT4_RESERVED2_ERR
    +              Reserved.
    +              0
    +              16
    +              read-only
    +            
    +            
    +              WDT_DELAY_SEL_ERR
    +              If any bit in WDT_DELAY_SEL is 1, then it indicates a programming error.
    +              16
    +              2
    +              read-only
    +            
    +            
    +              SPI_BOOT_CRYPT_CNT_ERR
    +              If any bit in SPI_BOOT_CRYPT_CNT is 1, then it indicates a programming error.
    +              18
    +              3
    +              read-only
    +            
    +            
    +              SECURE_BOOT_KEY_REVOKE0_ERR
    +              If SECURE_BOOT_KEY_REVOKE0 is 1, then it indicates a programming error.
    +              21
    +              1
    +              read-only
    +            
    +            
    +              SECURE_BOOT_KEY_REVOKE1_ERR
    +              If SECURE_BOOT_KEY_REVOKE1 is 1, then it indicates a programming error.
    +              22
    +              1
    +              read-only
    +            
    +            
    +              SECURE_BOOT_KEY_REVOKE2_ERR
    +              If SECURE_BOOT_KEY_REVOKE2 is 1, then it indicates a programming error.
    +              23
    +              1
    +              read-only
    +            
    +            
    +              KEY_PURPOSE_0_ERR
    +              If any bit in KEY_PURPOSE_0 is 1, then it indicates a programming error.
    +              24
    +              4
    +              read-only
    +            
    +            
    +              KEY_PURPOSE_1_ERR
    +              If any bit in KEY_PURPOSE_1 is 1, then it indicates a programming error.
    +              28
    +              4
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_REPEAT_ERR2
    +          Programming error record register 2 of BLOCK0.
    +          0x184
    +          0x20
    +          
    +            
    +              KEY_PURPOSE_2_ERR
    +              If any bit in KEY_PURPOSE_2 is 1, then it indicates a programming error.
    +              0
    +              4
    +              read-only
    +            
    +            
    +              KEY_PURPOSE_3_ERR
    +              If any bit in KEY_PURPOSE_3 is 1, then it indicates a programming error.
    +              4
    +              4
    +              read-only
    +            
    +            
    +              KEY_PURPOSE_4_ERR
    +              If any bit in KEY_PURPOSE_4 is 1, then it indicates a programming error.
    +              8
    +              4
    +              read-only
    +            
    +            
    +              KEY_PURPOSE_5_ERR
    +              If any bit in KEY_PURPOSE_5 is 1, then it indicates a programming error.
    +              12
    +              4
    +              read-only
    +            
    +            
    +              RPT4_RESERVED3_ERR
    +              Reserved.
    +              16
    +              4
    +              read-only
    +            
    +            
    +              SECURE_BOOT_EN_ERR
    +              If SECURE_BOOT_EN is 1, then it indicates a programming error.
    +              20
    +              1
    +              read-only
    +            
    +            
    +              SECURE_BOOT_AGGRESSIVE_REVOKE_ERR
    +              If SECURE_BOOT_AGGRESSIVE_REVOKE is 1, then it indicates a programming error.
    +              21
    +              1
    +              read-only
    +            
    +            
    +              RPT4_RESERVED0_ERR
    +              Reserved.
    +              22
    +              6
    +              read-only
    +            
    +            
    +              FLASH_TPUW_ERR
    +              If any bit in FLASH_TPUM is 1, then it indicates a programming error.
    +              28
    +              4
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_REPEAT_ERR3
    +          Programming error record register 3 of BLOCK0.
    +          0x188
    +          0x20
    +          
    +            
    +              DIS_DOWNLOAD_MODE_ERR
    +              If DIS_DOWNLOAD_MODE is 1, then it indicates a programming error.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              DIS_LEGACY_SPI_BOOT_ERR
    +              If DIS_LEGACY_SPI_BOOT is 1, then it indicates a programming error.
    +              1
    +              1
    +              read-only
    +            
    +            
    +              UART_PRINT_CHANNEL_ERR
    +              If UART_PRINT_CHANNEL is 1, then it indicates a programming error.
    +              2
    +              1
    +              read-only
    +            
    +            
    +              FLASH_ECC_MODE_ERR
    +              If FLASH_ECC_MODE is 1, then it indicates a programming error.
    +              3
    +              1
    +              read-only
    +            
    +            
    +              DIS_USB_DOWNLOAD_MODE_ERR
    +              If DIS_USB_DOWNLOAD_MODE is 1, then it indicates a programming error.
    +              4
    +              1
    +              read-only
    +            
    +            
    +              ENABLE_SECURITY_DOWNLOAD_ERR
    +              If ENABLE_SECURITY_DOWNLOAD is 1, then it indicates a programming error.
    +              5
    +              1
    +              read-only
    +            
    +            
    +              UART_PRINT_CONTROL_ERR
    +              If any bit in UART_PRINT_CONTROL is 1, then it indicates a programming error.
    +              6
    +              2
    +              read-only
    +            
    +            
    +              PIN_POWER_SELECTION_ERR
    +              If PIN_POWER_SELECTION is 1, then it indicates a programming error.
    +              8
    +              1
    +              read-only
    +            
    +            
    +              FLASH_TYPE_ERR
    +              If FLASH_TYPE is 1, then it indicates a programming error.
    +              9
    +              1
    +              read-only
    +            
    +            
    +              FLASH_PAGE_SIZE_ERR
    +              If any bits in FLASH_PAGE_SIZE is 1, then it indicates a programming error.
    +              10
    +              2
    +              read-only
    +            
    +            
    +              FLASH_ECC_EN_ERR
    +              If FLASH_ECC_EN_ERR is 1, then it indicates a programming error.
    +              12
    +              1
    +              read-only
    +            
    +            
    +              FORCE_SEND_RESUME_ERR
    +              If FORCE_SEND_RESUME is 1, then it indicates a programming error.
    +              13
    +              1
    +              read-only
    +            
    +            
    +              SECURE_VERSION_ERR
    +              If any bit in SECURE_VERSION is 1, then it indicates a programming error.
    +              14
    +              16
    +              read-only
    +            
    +            
    +              RPT4_RESERVED1_ERR
    +              Reserved.
    +              30
    +              2
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_REPEAT_ERR4
    +          Programming error record register 4 of BLOCK0.
    +          0x190
    +          0x20
    +          
    +            
    +              RPT4_RESERVED4_ERR
    +              Reserved.
    +              0
    +              24
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_RS_ERR0
    +          Programming error record register 0 of BLOCK1-10.
    +          0x1C0
    +          0x20
    +          
    +            
    +              MAC_SPI_8M_ERR_NUM
    +              The value of this signal means the number of error bytes.
    +              0
    +              3
    +              read-only
    +            
    +            
    +              MAC_SPI_8M_FAIL
    +              0: Means no failure and that the data of MAC_SPI_8M is reliable 1: Means that programming user data failed and the number of error bytes is over 6.
    +              3
    +              1
    +              read-only
    +            
    +            
    +              SYS_PART1_NUM
    +              The value of this signal means the number of error bytes.
    +              4
    +              3
    +              read-only
    +            
    +            
    +              SYS_PART1_FAIL
    +              0: Means no failure and that the data of system part1 is reliable 1: Means that programming user data failed and the number of error bytes is over 6.
    +              7
    +              1
    +              read-only
    +            
    +            
    +              USR_DATA_ERR_NUM
    +              The value of this signal means the number of error bytes.
    +              8
    +              3
    +              read-only
    +            
    +            
    +              USR_DATA_FAIL
    +              0: Means no failure and that the user data is reliable 1: Means that programming user data failed and the number of error bytes is over 6.
    +              11
    +              1
    +              read-only
    +            
    +            
    +              KEY0_ERR_NUM
    +              The value of this signal means the number of error bytes.
    +              12
    +              3
    +              read-only
    +            
    +            
    +              KEY0_FAIL
    +              0: Means no failure and that the data of key0 is reliable 1: Means that programming key0 failed and the number of error bytes is over 6.
    +              15
    +              1
    +              read-only
    +            
    +            
    +              KEY1_ERR_NUM
    +              The value of this signal means the number of error bytes.
    +              16
    +              3
    +              read-only
    +            
    +            
    +              KEY1_FAIL
    +              0: Means no failure and that the data of key1 is reliable 1: Means that programming key1 failed and the number of error bytes is over 6.
    +              19
    +              1
    +              read-only
    +            
    +            
    +              KEY2_ERR_NUM
    +              The value of this signal means the number of error bytes.
    +              20
    +              3
    +              read-only
    +            
    +            
    +              KEY2_FAIL
    +              0: Means no failure and that the data of key2 is reliable 1: Means that programming key2 failed and the number of error bytes is over 6.
    +              23
    +              1
    +              read-only
    +            
    +            
    +              KEY3_ERR_NUM
    +              The value of this signal means the number of error bytes.
    +              24
    +              3
    +              read-only
    +            
    +            
    +              KEY3_FAIL
    +              0: Means no failure and that the data of key3 is reliable 1: Means that programming key3 failed and the number of error bytes is over 6.
    +              27
    +              1
    +              read-only
    +            
    +            
    +              KEY4_ERR_NUM
    +              The value of this signal means the number of error bytes.
    +              28
    +              3
    +              read-only
    +            
    +            
    +              KEY4_FAIL
    +              0: Means no failure and that the data of key4 is reliable 1: Means that programming key4 failed and the number of error bytes is over 6.
    +              31
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          RD_RS_ERR1
    +          Programming error record register 1 of BLOCK1-10.
    +          0x1C4
    +          0x20
    +          
    +            
    +              KEY5_ERR_NUM
    +              The value of this signal means the number of error bytes.
    +              0
    +              3
    +              read-only
    +            
    +            
    +              KEY5_FAIL
    +              0: Means no failure and that the data of KEY5 is reliable 1: Means that programming user data failed and the number of error bytes is over 6.
    +              3
    +              1
    +              read-only
    +            
    +            
    +              SYS_PART2_ERR_NUM
    +              The value of this signal means the number of error bytes.
    +              4
    +              3
    +              read-only
    +            
    +            
    +              SYS_PART2_FAIL
    +              0: Means no failure and that the data of system part2 is reliable 1: Means that programming user data failed and the number of error bytes is over 6.
    +              7
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          CLK
    +          eFuse clcok configuration register.
    +          0x1C8
    +          0x20
    +          0x00000002
    +          
    +            
    +              EFUSE_MEM_FORCE_PD
    +              Set this bit to force eFuse SRAM into power-saving mode.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              MEM_CLK_FORCE_ON
    +              Set this bit and force to activate clock signal of eFuse SRAM.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              EFUSE_MEM_FORCE_PU
    +              Set this bit to force eFuse SRAM into working mode.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              EN
    +              Set this bit and force to enable clock signal of eFuse memory.
    +              16
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CONF
    +          eFuse operation mode configuraiton register;
    +          0x1CC
    +          0x20
    +          
    +            
    +              OP_CODE
    +              0x5A5A: Operate programming command 0x5AA5: Operate read command.
    +              0
    +              16
    +              read-write
    +            
    +          
    +        
    +        
    +          STATUS
    +          eFuse status register.
    +          0x1D0
    +          0x20
    +          
    +            
    +              STATE
    +              Indicates the state of the eFuse state machine.
    +              0
    +              4
    +              read-only
    +            
    +            
    +              OTP_LOAD_SW
    +              The value of OTP_LOAD_SW.
    +              4
    +              1
    +              read-only
    +            
    +            
    +              OTP_VDDQ_C_SYNC2
    +              The value of OTP_VDDQ_C_SYNC2.
    +              5
    +              1
    +              read-only
    +            
    +            
    +              OTP_STROBE_SW
    +              The value of OTP_STROBE_SW.
    +              6
    +              1
    +              read-only
    +            
    +            
    +              OTP_CSB_SW
    +              The value of OTP_CSB_SW.
    +              7
    +              1
    +              read-only
    +            
    +            
    +              OTP_PGENB_SW
    +              The value of OTP_PGENB_SW.
    +              8
    +              1
    +              read-only
    +            
    +            
    +              OTP_VDDQ_IS_SW
    +              The value of OTP_VDDQ_IS_SW.
    +              9
    +              1
    +              read-only
    +            
    +            
    +              REPEAT_ERR_CNT
    +              Indicates the number of error bits during programming BLOCK0.
    +              10
    +              8
    +              read-only
    +            
    +          
    +        
    +        
    +          CMD
    +          eFuse command register.
    +          0x1D4
    +          0x20
    +          
    +            
    +              READ_CMD
    +              Set this bit to send read command.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              PGM_CMD
    +              Set this bit to send programming command.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              BLK_NUM
    +              The serial number of the block to be programmed. Value 0-10 corresponds to block number 0-10, respectively.
    +              2
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          INT_RAW
    +          eFuse raw interrupt register.
    +          0x1D8
    +          0x20
    +          
    +            
    +              READ_DONE_INT_RAW
    +              The raw bit signal for read_done interrupt.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              PGM_DONE_INT_RAW
    +              The raw bit signal for pgm_done interrupt.
    +              1
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          INT_ST
    +          eFuse interrupt status register.
    +          0x1DC
    +          0x20
    +          
    +            
    +              READ_DONE_INT_ST
    +              The status signal for read_done interrupt.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              PGM_DONE_INT_ST
    +              The status signal for pgm_done interrupt.
    +              1
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_ENA
    +          eFuse interrupt enable register.
    +          0x1E0
    +          0x20
    +          
    +            
    +              READ_DONE_INT_ENA
    +              The enable signal for read_done interrupt.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              PGM_DONE_INT_ENA
    +              The enable signal for pgm_done interrupt.
    +              1
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          INT_CLR
    +          eFuse interrupt clear register.
    +          0x1E4
    +          0x20
    +          
    +            
    +              READ_DONE_INT_CLR
    +              The clear signal for read_done interrupt.
    +              0
    +              1
    +              write-only
    +            
    +            
    +              PGM_DONE_INT_CLR
    +              The clear signal for pgm_done interrupt.
    +              1
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          DAC_CONF
    +          Controls the eFuse programming voltage.
    +          0x1E8
    +          0x20
    +          0x0001FE1C
    +          
    +            
    +              DAC_CLK_DIV
    +              Controls the division factor of the rising clock of the programming voltage.
    +              0
    +              8
    +              read-write
    +            
    +            
    +              DAC_CLK_PAD_SEL
    +              Don't care.
    +              8
    +              1
    +              read-write
    +            
    +            
    +              DAC_NUM
    +              Controls the rising period of the programming voltage.
    +              9
    +              8
    +              read-write
    +            
    +            
    +              OE_CLR
    +              Reduces the power supply of the programming voltage.
    +              17
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          RD_TIM_CONF
    +          Configures read timing parameters.
    +          0x1EC
    +          0x20
    +          0x12000000
    +          
    +            
    +              READ_INIT_NUM
    +              Configures the initial read time of eFuse.
    +              24
    +              8
    +              read-write
    +            
    +          
    +        
    +        
    +          WR_TIM_CONF1
    +          Configurarion register 1 of eFuse programming timing parameters.
    +          0x1F0
    +          0x20
    +          0x00288000
    +          
    +            
    +              PWR_ON_NUM
    +              Configures the power up time for VDDQ.
    +              8
    +              16
    +              read-write
    +            
    +          
    +        
    +        
    +          WR_TIM_CONF2
    +          Configurarion register 2 of eFuse programming timing parameters.
    +          0x1F4
    +          0x20
    +          0x00000190
    +          
    +            
    +              PWR_OFF_NUM
    +              Configures the power outage time for VDDQ.
    +              0
    +              16
    +              read-write
    +            
    +          
    +        
    +        
    +          DATE
    +          eFuse version register.
    +          0x1FC
    +          0x20
    +          0x02007200
    +          
    +            
    +              DATE
    +              Stores eFuse version.
    +              0
    +              28
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      EXTMEM
    +      External Memory
    +      EXTMEM
    +      0x600C4000
    +      
    +        0x0
    +        0x108
    +        registers
    +      
    +      
    +        
    +          ICACHE_CTRL
    +          This description will be updated in the near future.
    +          0x0
    +          0x20
    +          
    +            
    +              ICACHE_ENABLE
    +              The bit is used to activate the data cache. 0: disable, 1: enable
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          ICACHE_CTRL1
    +          This description will be updated in the near future.
    +          0x4
    +          0x20
    +          0x00000003
    +          
    +            
    +              ICACHE_SHUT_IBUS
    +              The bit is used to disable core0 ibus, 0: enable, 1: disable
    +              0
    +              1
    +              read-write
    +            
    +            
    +              ICACHE_SHUT_DBUS
    +              The bit is used to disable core1 ibus, 0: enable, 1: disable
    +              1
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          ICACHE_TAG_POWER_CTRL
    +          This description will be updated in the near future.
    +          0x8
    +          0x20
    +          0x00000005
    +          
    +            
    +              ICACHE_TAG_MEM_FORCE_ON
    +              The bit is used to close clock gating of  icache tag memory. 1: close gating, 0: open clock gating.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              ICACHE_TAG_MEM_FORCE_PD
    +              The bit is used to power  icache tag memory down, 0: follow rtc_lslp, 1: power down
    +              1
    +              1
    +              read-write
    +            
    +            
    +              ICACHE_TAG_MEM_FORCE_PU
    +              The bit is used to power  icache tag memory up, 0: follow rtc_lslp, 1: power up
    +              2
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          ICACHE_PRELOCK_CTRL
    +          This description will be updated in the near future.
    +          0xC
    +          0x20
    +          
    +            
    +              ICACHE_PRELOCK_SCT0_EN
    +              The bit is used to enable the first section of prelock function.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              ICACHE_PRELOCK_SCT1_EN
    +              The bit is used to enable the second section of prelock function.
    +              1
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          ICACHE_PRELOCK_SCT0_ADDR
    +          This description will be updated in the near future.
    +          0x10
    +          0x20
    +          
    +            
    +              ICACHE_PRELOCK_SCT0_ADDR
    +              The bits are used to configure the first start virtual address of data prelock, which is combined with ICACHE_PRELOCK_SCT0_SIZE_REG
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          ICACHE_PRELOCK_SCT1_ADDR
    +          This description will be updated in the near future.
    +          0x14
    +          0x20
    +          
    +            
    +              ICACHE_PRELOCK_SCT1_ADDR
    +              The bits are used to configure the second start virtual address of data prelock, which is combined with ICACHE_PRELOCK_SCT1_SIZE_REG
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          ICACHE_PRELOCK_SCT_SIZE
    +          This description will be updated in the near future.
    +          0x18
    +          0x20
    +          
    +            
    +              ICACHE_PRELOCK_SCT1_SIZE
    +              The bits are used to configure the second length of data locking, which is combined with ICACHE_PRELOCK_SCT1_ADDR_REG
    +              0
    +              16
    +              read-write
    +            
    +            
    +              ICACHE_PRELOCK_SCT0_SIZE
    +              The bits are used to configure the first length of data locking, which is combined with ICACHE_PRELOCK_SCT0_ADDR_REG
    +              16
    +              16
    +              read-write
    +            
    +          
    +        
    +        
    +          ICACHE_LOCK_CTRL
    +          This description will be updated in the near future.
    +          0x1C
    +          0x20
    +          0x00000004
    +          
    +            
    +              ICACHE_LOCK_ENA
    +              The bit is used to enable lock operation. It will be cleared by hardware after lock operation done.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              ICACHE_UNLOCK_ENA
    +              The bit is used to enable unlock operation. It will be cleared by hardware after unlock operation done.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              ICACHE_LOCK_DONE
    +              The bit is used to indicate unlock/lock operation is finished.
    +              2
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          ICACHE_LOCK_ADDR
    +          This description will be updated in the near future.
    +          0x20
    +          0x20
    +          
    +            
    +              ICACHE_LOCK_ADDR
    +              The bits are used to configure the start virtual address for lock operations. It should be combined with ICACHE_LOCK_SIZE_REG.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          ICACHE_LOCK_SIZE
    +          This description will be updated in the near future.
    +          0x24
    +          0x20
    +          
    +            
    +              ICACHE_LOCK_SIZE
    +              The bits are used to configure the length for lock operations. The bits are the counts of cache block. It should be combined with ICACHE_LOCK_ADDR_REG.
    +              0
    +              16
    +              read-write
    +            
    +          
    +        
    +        
    +          ICACHE_SYNC_CTRL
    +          This description will be updated in the near future.
    +          0x28
    +          0x20
    +          0x00000001
    +          
    +            
    +              ICACHE_INVALIDATE_ENA
    +              The bit is used to enable invalidate operation. It will be cleared by hardware after invalidate operation done.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              ICACHE_SYNC_DONE
    +              The bit is used to indicate invalidate operation is finished.
    +              1
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          ICACHE_SYNC_ADDR
    +          This description will be updated in the near future.
    +          0x2C
    +          0x20
    +          
    +            
    +              ICACHE_SYNC_ADDR
    +              The bits are used to configure the start virtual address for clean operations. It should be combined with ICACHE_SYNC_SIZE_REG.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          ICACHE_SYNC_SIZE
    +          This description will be updated in the near future.
    +          0x30
    +          0x20
    +          
    +            
    +              ICACHE_SYNC_SIZE
    +              The bits are used to configure the length for sync operations. The bits are the counts of cache block. It should be combined with ICACHE_SYNC_ADDR_REG.
    +              0
    +              23
    +              read-write
    +            
    +          
    +        
    +        
    +          ICACHE_PRELOAD_CTRL
    +          This description will be updated in the near future.
    +          0x34
    +          0x20
    +          0x00000002
    +          
    +            
    +              ICACHE_PRELOAD_ENA
    +              The bit is used to enable preload operation. It will be cleared by hardware after preload operation done.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              ICACHE_PRELOAD_DONE
    +              The bit is used to indicate preload operation is finished.
    +              1
    +              1
    +              read-only
    +            
    +            
    +              ICACHE_PRELOAD_ORDER
    +              The bit is used to configure the direction of preload operation. 1: descending, 0: ascending.
    +              2
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          ICACHE_PRELOAD_ADDR
    +          This description will be updated in the near future.
    +          0x38
    +          0x20
    +          
    +            
    +              ICACHE_PRELOAD_ADDR
    +              The bits are used to configure the start virtual address for preload operation. It should be combined with ICACHE_PRELOAD_SIZE_REG.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          ICACHE_PRELOAD_SIZE
    +          This description will be updated in the near future.
    +          0x3C
    +          0x20
    +          
    +            
    +              ICACHE_PRELOAD_SIZE
    +              The bits are used to configure the length for preload operation. The bits are the counts of cache block. It should be combined with ICACHE_PRELOAD_ADDR_REG..
    +              0
    +              16
    +              read-write
    +            
    +          
    +        
    +        
    +          ICACHE_AUTOLOAD_CTRL
    +          This description will be updated in the near future.
    +          0x40
    +          0x20
    +          0x00000008
    +          
    +            
    +              ICACHE_AUTOLOAD_SCT0_ENA
    +              The bits are used to enable the first section for autoload operation.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              ICACHE_AUTOLOAD_SCT1_ENA
    +              The bits are used to enable the second section for autoload operation.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              ICACHE_AUTOLOAD_ENA
    +              The bit is used to enable and disable autoload operation. It is combined with icache_autoload_done. 1: enable, 0: disable.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              ICACHE_AUTOLOAD_DONE
    +              The bit is used to indicate autoload operation is finished.
    +              3
    +              1
    +              read-only
    +            
    +            
    +              ICACHE_AUTOLOAD_ORDER
    +              The bits are used to configure the direction of autoload. 1: descending, 0: ascending.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              ICACHE_AUTOLOAD_RQST
    +              The bits are used to configure trigger conditions for autoload. 0/3: cache miss, 1: cache hit, 2: both cache miss and hit.
    +              5
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          ICACHE_AUTOLOAD_SCT0_ADDR
    +          This description will be updated in the near future.
    +          0x44
    +          0x20
    +          
    +            
    +              ICACHE_AUTOLOAD_SCT0_ADDR
    +              The bits are used to configure the start virtual address of the first section for autoload operation. It should be combined with icache_autoload_sct0_ena.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          ICACHE_AUTOLOAD_SCT0_SIZE
    +          This description will be updated in the near future.
    +          0x48
    +          0x20
    +          
    +            
    +              ICACHE_AUTOLOAD_SCT0_SIZE
    +              The bits are used to configure the length of the first section for autoload operation. It should be combined with icache_autoload_sct0_ena.
    +              0
    +              27
    +              read-write
    +            
    +          
    +        
    +        
    +          ICACHE_AUTOLOAD_SCT1_ADDR
    +          This description will be updated in the near future.
    +          0x4C
    +          0x20
    +          
    +            
    +              ICACHE_AUTOLOAD_SCT1_ADDR
    +              The bits are used to configure the start virtual address of the second section for autoload operation. It should be combined with icache_autoload_sct1_ena.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          ICACHE_AUTOLOAD_SCT1_SIZE
    +          This description will be updated in the near future.
    +          0x50
    +          0x20
    +          
    +            
    +              ICACHE_AUTOLOAD_SCT1_SIZE
    +              The bits are used to configure the length of the second section for autoload operation. It should be combined with icache_autoload_sct1_ena.
    +              0
    +              27
    +              read-write
    +            
    +          
    +        
    +        
    +          IBUS_TO_FLASH_START_VADDR
    +          This description will be updated in the near future.
    +          0x54
    +          0x20
    +          0x42000000
    +          
    +            
    +              IBUS_TO_FLASH_START_VADDR
    +              The bits are used to configure the start virtual address of ibus to access flash. The register is used to give constraints to ibus access counter.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          IBUS_TO_FLASH_END_VADDR
    +          This description will be updated in the near future.
    +          0x58
    +          0x20
    +          0x427FFFFF
    +          
    +            
    +              IBUS_TO_FLASH_END_VADDR
    +              The bits are used to configure the end virtual address of ibus to access flash. The register is used to give constraints to ibus access counter.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          DBUS_TO_FLASH_START_VADDR
    +          This description will be updated in the near future.
    +          0x5C
    +          0x20
    +          0x3C000000
    +          
    +            
    +              DBUS_TO_FLASH_START_VADDR
    +              The bits are used to configure the start virtual address of dbus to access flash. The register is used to give constraints to dbus access counter.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          DBUS_TO_FLASH_END_VADDR
    +          This description will be updated in the near future.
    +          0x60
    +          0x20
    +          0x3C7FFFFF
    +          
    +            
    +              DBUS_TO_FLASH_END_VADDR
    +              The bits are used to configure the end virtual address of dbus to access flash. The register is used to give constraints to dbus access counter.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          CACHE_ACS_CNT_CLR
    +          This description will be updated in the near future.
    +          0x64
    +          0x20
    +          
    +            
    +              IBUS_ACS_CNT_CLR
    +              The bit is used to clear ibus counter.
    +              0
    +              1
    +              write-only
    +            
    +            
    +              DBUS_ACS_CNT_CLR
    +              The bit is used to clear dbus counter.
    +              1
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          IBUS_ACS_MISS_CNT
    +          This description will be updated in the near future.
    +          0x68
    +          0x20
    +          
    +            
    +              IBUS_ACS_MISS_CNT
    +              The bits are used to count the number of the cache miss caused by ibus access flash.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          IBUS_ACS_CNT
    +          This description will be updated in the near future.
    +          0x6C
    +          0x20
    +          
    +            
    +              IBUS_ACS_CNT
    +              The bits are used to count the number of ibus access flash through icache.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          DBUS_ACS_FLASH_MISS_CNT
    +          This description will be updated in the near future.
    +          0x70
    +          0x20
    +          
    +            
    +              DBUS_ACS_FLASH_MISS_CNT
    +              The bits are used to count the number of the cache miss caused by dbus access flash.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          DBUS_ACS_CNT
    +          This description will be updated in the near future.
    +          0x74
    +          0x20
    +          
    +            
    +              DBUS_ACS_CNT
    +              The bits are used to count the number of dbus access flash through icache.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          CACHE_ILG_INT_ENA
    +          This description will be updated in the near future.
    +          0x78
    +          0x20
    +          
    +            
    +              ICACHE_SYNC_OP_FAULT_INT_ENA
    +              The bit is used to enable interrupt by sync configurations fault.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              ICACHE_PRELOAD_OP_FAULT_INT_ENA
    +              The bit is used to enable interrupt by preload configurations fault.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              MMU_ENTRY_FAULT_INT_ENA
    +              The bit is used to enable interrupt by mmu entry fault.
    +              5
    +              1
    +              read-write
    +            
    +            
    +              IBUS_CNT_OVF_INT_ENA
    +              The bit is used to enable interrupt by ibus counter overflow.
    +              7
    +              1
    +              read-write
    +            
    +            
    +              DBUS_CNT_OVF_INT_ENA
    +              The bit is used to enable interrupt by dbus counter overflow.
    +              8
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CACHE_ILG_INT_CLR
    +          This description will be updated in the near future.
    +          0x7C
    +          0x20
    +          
    +            
    +              ICACHE_SYNC_OP_FAULT_INT_CLR
    +              The bit is used to clear interrupt by sync configurations fault.
    +              0
    +              1
    +              write-only
    +            
    +            
    +              ICACHE_PRELOAD_OP_FAULT_INT_CLR
    +              The bit is used to clear interrupt by preload configurations fault.
    +              1
    +              1
    +              write-only
    +            
    +            
    +              MMU_ENTRY_FAULT_INT_CLR
    +              The bit is used to clear interrupt by mmu entry fault.
    +              5
    +              1
    +              write-only
    +            
    +            
    +              IBUS_CNT_OVF_INT_CLR
    +              The bit is used to clear interrupt by ibus counter overflow.
    +              7
    +              1
    +              write-only
    +            
    +            
    +              DBUS_CNT_OVF_INT_CLR
    +              The bit is used to clear interrupt by dbus counter overflow.
    +              8
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          CACHE_ILG_INT_ST
    +          This description will be updated in the near future.
    +          0x80
    +          0x20
    +          
    +            
    +              ICACHE_SYNC_OP_FAULT_ST
    +              The bit is used to indicate interrupt by sync configurations fault.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              ICACHE_PRELOAD_OP_FAULT_ST
    +              The bit is used to indicate interrupt by preload configurations fault.
    +              1
    +              1
    +              read-only
    +            
    +            
    +              MMU_ENTRY_FAULT_ST
    +              The bit is used to indicate interrupt by mmu entry fault.
    +              5
    +              1
    +              read-only
    +            
    +            
    +              IBUS_ACS_CNT_OVF_ST
    +              The bit is used to indicate interrupt by ibus access flash/spiram counter overflow.
    +              7
    +              1
    +              read-only
    +            
    +            
    +              IBUS_ACS_MISS_CNT_OVF_ST
    +              The bit is used to indicate interrupt by ibus access flash/spiram miss counter overflow.
    +              8
    +              1
    +              read-only
    +            
    +            
    +              DBUS_ACS_CNT_OVF_ST
    +              The bit is used to indicate interrupt by dbus access flash/spiram counter overflow.
    +              9
    +              1
    +              read-only
    +            
    +            
    +              DBUS_ACS_FLASH_MISS_CNT_OVF_ST
    +              The bit is used to indicate interrupt by dbus access flash miss counter overflow.
    +              10
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          CORE0_ACS_CACHE_INT_ENA
    +          This description will be updated in the near future.
    +          0x84
    +          0x20
    +          
    +            
    +              CORE0_IBUS_ACS_MSK_IC_INT_ENA
    +              The bit is used to enable interrupt by cpu access icache while the corresponding ibus is disabled which include speculative access.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              CORE0_IBUS_WR_IC_INT_ENA
    +              The bit is used to enable interrupt by ibus trying to write icache
    +              1
    +              1
    +              read-write
    +            
    +            
    +              CORE0_IBUS_REJECT_INT_ENA
    +              The bit is used to enable interrupt by authentication fail.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              CORE0_DBUS_ACS_MSK_IC_INT_ENA
    +              The bit is used to enable interrupt by cpu access icache while the corresponding dbus is disabled which include speculative access.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              CORE0_DBUS_REJECT_INT_ENA
    +              The bit is used to enable interrupt by authentication fail.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              CORE0_DBUS_WR_IC_INT_ENA
    +              The bit is used to enable interrupt by dbus trying to write icache
    +              5
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE0_ACS_CACHE_INT_CLR
    +          This description will be updated in the near future.
    +          0x88
    +          0x20
    +          
    +            
    +              CORE0_IBUS_ACS_MSK_IC_INT_CLR
    +              The bit is used to clear interrupt by cpu access icache while the corresponding ibus is disabled or icache is disabled which include speculative access.
    +              0
    +              1
    +              write-only
    +            
    +            
    +              CORE0_IBUS_WR_IC_INT_CLR
    +              The bit is used to clear interrupt by ibus trying to write icache
    +              1
    +              1
    +              write-only
    +            
    +            
    +              CORE0_IBUS_REJECT_INT_CLR
    +              The bit is used to clear interrupt by authentication fail.
    +              2
    +              1
    +              write-only
    +            
    +            
    +              CORE0_DBUS_ACS_MSK_IC_INT_CLR
    +              The bit is used to clear interrupt by cpu access icache while the corresponding dbus is disabled or icache is disabled which include speculative access.
    +              3
    +              1
    +              write-only
    +            
    +            
    +              CORE0_DBUS_REJECT_INT_CLR
    +              The bit is used to clear interrupt by authentication fail.
    +              4
    +              1
    +              write-only
    +            
    +            
    +              CORE0_DBUS_WR_IC_INT_CLR
    +              The bit is used to clear interrupt by dbus trying to write icache
    +              5
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          CORE0_ACS_CACHE_INT_ST
    +          This description will be updated in the near future.
    +          0x8C
    +          0x20
    +          
    +            
    +              CORE0_IBUS_ACS_MSK_ICACHE_ST
    +              The bit is used to indicate interrupt by cpu access  icache while the core0_ibus is disabled or icache is disabled which include speculative access.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              CORE0_IBUS_WR_ICACHE_ST
    +              The bit is used to indicate interrupt by ibus trying to write icache
    +              1
    +              1
    +              read-only
    +            
    +            
    +              CORE0_IBUS_REJECT_ST
    +              The bit is used to indicate interrupt by authentication fail.
    +              2
    +              1
    +              read-only
    +            
    +            
    +              CORE0_DBUS_ACS_MSK_ICACHE_ST
    +              The bit is used to indicate interrupt by cpu access icache while the core0_dbus is disabled or icache is disabled which include speculative access.
    +              3
    +              1
    +              read-only
    +            
    +            
    +              CORE0_DBUS_REJECT_ST
    +              The bit is used to indicate interrupt by authentication fail.
    +              4
    +              1
    +              read-only
    +            
    +            
    +              CORE0_DBUS_WR_ICACHE_ST
    +              The bit is used to indicate interrupt by dbus trying to write icache
    +              5
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          CORE0_DBUS_REJECT_ST
    +          This description will be updated in the near future.
    +          0x90
    +          0x20
    +          
    +            
    +              CORE0_DBUS_ATTR
    +              The bits are used to indicate the attribute of CPU access dbus when authentication fail. 0: invalidate, 1: execute-able, 2: read-able, 4: write-able.
    +              0
    +              3
    +              read-only
    +            
    +            
    +              CORE0_DBUS_WORLD
    +              The bit is used to indicate the world of CPU access dbus when authentication fail. 0: WORLD0, 1: WORLD1
    +              3
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          CORE0_DBUS_REJECT_VADDR
    +          This description will be updated in the near future.
    +          0x94
    +          0x20
    +          0xFFFFFFFF
    +          
    +            
    +              CORE0_DBUS_VADDR
    +              The bits are used to indicate the virtual address of CPU access dbus when authentication fail.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          CORE0_IBUS_REJECT_ST
    +          This description will be updated in the near future.
    +          0x98
    +          0x20
    +          
    +            
    +              CORE0_IBUS_ATTR
    +              The bits are used to indicate the attribute of CPU access ibus when authentication fail. 0: invalidate, 1: execute-able, 2: read-able
    +              0
    +              3
    +              read-only
    +            
    +            
    +              CORE0_IBUS_WORLD
    +              The bit is used to indicate the world of CPU access ibus when authentication fail. 0: WORLD0, 1: WORLD1
    +              3
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          CORE0_IBUS_REJECT_VADDR
    +          This description will be updated in the near future.
    +          0x9C
    +          0x20
    +          0xFFFFFFFF
    +          
    +            
    +              CORE0_IBUS_VADDR
    +              The bits are used to indicate the virtual address of CPU access  ibus when authentication fail.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          CACHE_MMU_FAULT_CONTENT
    +          This description will be updated in the near future.
    +          0xA0
    +          0x20
    +          
    +            
    +              CACHE_MMU_FAULT_CONTENT
    +              The bits are used to indicate the content of mmu entry which cause mmu fault..
    +              0
    +              10
    +              read-only
    +            
    +            
    +              CACHE_MMU_FAULT_CODE
    +              The right-most 3 bits are used to indicate the operations which cause mmu fault occurrence. 0: default, 1: cpu miss, 2: preload miss, 3: writeback, 4: cpu miss evict recovery address, 5: load miss evict recovery address, 6: external dma tx, 7: external dma rx. The most significant bit is used to indicate this operation occurs in which one icache.
    +              10
    +              4
    +              read-only
    +            
    +          
    +        
    +        
    +          CACHE_MMU_FAULT_VADDR
    +          This description will be updated in the near future.
    +          0xA4
    +          0x20
    +          
    +            
    +              CACHE_MMU_FAULT_VADDR
    +              The bits are used to indicate the virtual address which cause mmu fault..
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          CACHE_WRAP_AROUND_CTRL
    +          This description will be updated in the near future.
    +          0xA8
    +          0x20
    +          
    +            
    +              CACHE_FLASH_WRAP_AROUND
    +              The bit is used to enable wrap around mode when read data from flash.
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CACHE_MMU_POWER_CTRL
    +          This description will be updated in the near future.
    +          0xAC
    +          0x20
    +          0x00000005
    +          
    +            
    +              CACHE_MMU_MEM_FORCE_ON
    +              The bit is used to enable clock gating to save power when access mmu memory, 0: enable, 1: disable
    +              0
    +              1
    +              read-write
    +            
    +            
    +              CACHE_MMU_MEM_FORCE_PD
    +              The bit is used to power mmu memory down, 0: follow_rtc_lslp_pd, 1: power down
    +              1
    +              1
    +              read-write
    +            
    +            
    +              CACHE_MMU_MEM_FORCE_PU
    +              The bit is used to power mmu memory down, 0: follow_rtc_lslp_pd, 1: power up
    +              2
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CACHE_STATE
    +          This description will be updated in the near future.
    +          0xB0
    +          0x20
    +          0x00000001
    +          
    +            
    +              ICACHE_STATE
    +              The bit is used to indicate whether  icache main fsm is in idle state or not. 1: in idle state,  0: not in idle state
    +              0
    +              12
    +              read-only
    +            
    +          
    +        
    +        
    +          CACHE_ENCRYPT_DECRYPT_RECORD_DISABLE
    +          This description will be updated in the near future.
    +          0xB4
    +          0x20
    +          
    +            
    +              RECORD_DISABLE_DB_ENCRYPT
    +              Reserved.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              RECORD_DISABLE_G0CB_DECRYPT
    +              Reserved.
    +              1
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CACHE_ENCRYPT_DECRYPT_CLK_FORCE_ON
    +          This description will be updated in the near future.
    +          0xB8
    +          0x20
    +          0x00000007
    +          
    +            
    +              CLK_FORCE_ON_MANUAL_CRYPT
    +              The bit is used to close clock gating of manual crypt clock. 1: close gating, 0: open clock gating.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              CLK_FORCE_ON_AUTO_CRYPT
    +              The bit is used to close clock gating of automatic crypt clock. 1: close gating, 0: open clock gating.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              CLK_FORCE_ON_CRYPT
    +              The bit is used to close clock gating of external memory encrypt and decrypt clock. 1: close gating, 0: open clock gating.
    +              2
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CACHE_PRELOAD_INT_CTRL
    +          This description will be updated in the near future.
    +          0xBC
    +          0x20
    +          
    +            
    +              ICACHE_PRELOAD_INT_ST
    +              The bit is used to indicate the interrupt by  icache pre-load done.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              ICACHE_PRELOAD_INT_ENA
    +              The bit is used to enable the interrupt by  icache pre-load done.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              ICACHE_PRELOAD_INT_CLR
    +              The bit is used to clear the interrupt by  icache pre-load done.
    +              2
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          CACHE_SYNC_INT_CTRL
    +          This description will be updated in the near future.
    +          0xC0
    +          0x20
    +          
    +            
    +              ICACHE_SYNC_INT_ST
    +              The bit is used to indicate the interrupt by  icache sync done.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              ICACHE_SYNC_INT_ENA
    +              The bit is used to enable the interrupt by  icache sync done.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              ICACHE_SYNC_INT_CLR
    +              The bit is used to clear the interrupt by  icache sync done.
    +              2
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          CACHE_MMU_OWNER
    +          This description will be updated in the near future.
    +          0xC4
    +          0x20
    +          
    +            
    +              CACHE_MMU_OWNER
    +              The bits are used to specify the owner of MMU.bit0/bit2: ibus, bit1/bit3: dbus
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CACHE_CONF_MISC
    +          This description will be updated in the near future.
    +          0xC8
    +          0x20
    +          0x00000007
    +          
    +            
    +              CACHE_IGNORE_PRELOAD_MMU_ENTRY_FAULT
    +              The bit is used to disable checking mmu entry fault by preload operation.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              CACHE_IGNORE_SYNC_MMU_ENTRY_FAULT
    +              The bit is used to disable checking mmu entry fault by sync operation.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              CACHE_TRACE_ENA
    +              The bit is used to enable cache trace function.
    +              2
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          ICACHE_FREEZE
    +          This description will be updated in the near future.
    +          0xCC
    +          0x20
    +          
    +            
    +              ENA
    +              The bit is used to enable icache freeze mode
    +              0
    +              1
    +              read-write
    +            
    +            
    +              MODE
    +              The bit is used to configure freeze mode, 0:  assert busy if CPU miss 1: assert hit if CPU miss
    +              1
    +              1
    +              read-write
    +            
    +            
    +              DONE
    +              The bit is used to indicate icache freeze success
    +              2
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          ICACHE_ATOMIC_OPERATE_ENA
    +          This description will be updated in the near future.
    +          0xD0
    +          0x20
    +          0x00000001
    +          
    +            
    +              ICACHE_ATOMIC_OPERATE_ENA
    +              The bit is used to activate icache atomic operation protection. In this case, sync/lock operation can not interrupt miss-work. This feature does not work during invalidateAll operation.
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CACHE_REQUEST
    +          This description will be updated in the near future.
    +          0xD4
    +          0x20
    +          
    +            
    +              BYPASS
    +              The bit is used to disable request recording which could cause performance issue
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          IBUS_PMS_TBL_LOCK
    +          This description will be updated in the near future.
    +          0xD8
    +          0x20
    +          
    +            
    +              IBUS_PMS_LOCK
    +              The bit is used to configure the ibus permission control section boundary0
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          IBUS_PMS_TBL_BOUNDARY0
    +          This description will be updated in the near future.
    +          0xDC
    +          0x20
    +          
    +            
    +              IBUS_PMS_BOUNDARY0
    +              The bit is used to configure the ibus permission control section boundary0
    +              0
    +              12
    +              read-write
    +            
    +          
    +        
    +        
    +          IBUS_PMS_TBL_BOUNDARY1
    +          This description will be updated in the near future.
    +          0xE0
    +          0x20
    +          0x00000800
    +          
    +            
    +              IBUS_PMS_BOUNDARY1
    +              The bit is used to configure the ibus permission control section boundary1
    +              0
    +              12
    +              read-write
    +            
    +          
    +        
    +        
    +          IBUS_PMS_TBL_BOUNDARY2
    +          This description will be updated in the near future.
    +          0xE4
    +          0x20
    +          0x00000800
    +          
    +            
    +              IBUS_PMS_BOUNDARY2
    +              The bit is used to configure the ibus permission control section boundary2
    +              0
    +              12
    +              read-write
    +            
    +          
    +        
    +        
    +          IBUS_PMS_TBL_ATTR
    +          This description will be updated in the near future.
    +          0xE8
    +          0x20
    +          0x000000FF
    +          
    +            
    +              IBUS_PMS_SCT1_ATTR
    +              The bit is used to configure attribute of the ibus permission control section1, bit0: fetch in world0, bit1: load in world0, bit2: fetch in world1, bit3: load in world1
    +              0
    +              4
    +              read-write
    +            
    +            
    +              IBUS_PMS_SCT2_ATTR
    +              The bit is used to configure attribute of the ibus permission control section2, bit0: fetch in world0, bit1: load in world0, bit2: fetch in world1, bit3: load in world1
    +              4
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          DBUS_PMS_TBL_LOCK
    +          This description will be updated in the near future.
    +          0xEC
    +          0x20
    +          
    +            
    +              DBUS_PMS_LOCK
    +              The bit is used to configure the ibus permission control section boundary0
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DBUS_PMS_TBL_BOUNDARY0
    +          This description will be updated in the near future.
    +          0xF0
    +          0x20
    +          
    +            
    +              DBUS_PMS_BOUNDARY0
    +              The bit is used to configure the dbus permission control section boundary0
    +              0
    +              12
    +              read-write
    +            
    +          
    +        
    +        
    +          DBUS_PMS_TBL_BOUNDARY1
    +          This description will be updated in the near future.
    +          0xF4
    +          0x20
    +          0x00000800
    +          
    +            
    +              DBUS_PMS_BOUNDARY1
    +              The bit is used to configure the dbus permission control section boundary1
    +              0
    +              12
    +              read-write
    +            
    +          
    +        
    +        
    +          DBUS_PMS_TBL_BOUNDARY2
    +          This description will be updated in the near future.
    +          0xF8
    +          0x20
    +          0x00000800
    +          
    +            
    +              DBUS_PMS_BOUNDARY2
    +              The bit is used to configure the dbus permission control section boundary2
    +              0
    +              12
    +              read-write
    +            
    +          
    +        
    +        
    +          DBUS_PMS_TBL_ATTR
    +          This description will be updated in the near future.
    +          0xFC
    +          0x20
    +          0x0000000F
    +          
    +            
    +              DBUS_PMS_SCT1_ATTR
    +              The bit is used to configure attribute of the dbus permission control section1, bit0: load in world0, bit2: load in world1
    +              0
    +              2
    +              read-write
    +            
    +            
    +              DBUS_PMS_SCT2_ATTR
    +              The bit is used to configure attribute of the dbus permission control section2, bit0: load in world0, bit2: load in world1
    +              2
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          CLOCK_GATE
    +          This description will be updated in the near future.
    +          0x100
    +          0x20
    +          0x00000001
    +          
    +            
    +              CLK_EN
    +              clock gate enable.
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          REG_DATE
    +          This description will be updated in the near future.
    +          0x3FC
    +          0x20
    +          0x02007160
    +          
    +            
    +              DATE
    +              version information
    +              0
    +              28
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      GPIO
    +      General Purpose Input/Output
    +      GPIO
    +      0x60004000
    +      
    +        0x0
    +        0x31C
    +        registers
    +      
    +      
    +        GPIO
    +        16
    +      
    +      
    +        GPIO_NMI
    +        17
    +      
    +      
    +        
    +          BT_SELECT
    +          GPIO bit select register
    +          0x0
    +          0x20
    +          
    +            
    +              BT_SEL
    +              GPIO bit select register
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          OUT
    +          GPIO output register
    +          0x4
    +          0x20
    +          
    +            
    +              DATA_ORIG
    +              GPIO output register for GPIO0-25
    +              0
    +              26
    +              read-write
    +            
    +          
    +        
    +        
    +          OUT_W1TS
    +          GPIO output set register
    +          0x8
    +          0x20
    +          
    +            
    +              OUT_W1TS
    +              GPIO output set register for GPIO0-25
    +              0
    +              26
    +              write-only
    +            
    +          
    +        
    +        
    +          OUT_W1TC
    +          GPIO output clear register
    +          0xC
    +          0x20
    +          
    +            
    +              OUT_W1TC
    +              GPIO output clear register for GPIO0-25
    +              0
    +              26
    +              write-only
    +            
    +          
    +        
    +        
    +          SDIO_SELECT
    +          GPIO sdio select register
    +          0x1C
    +          0x20
    +          
    +            
    +              SDIO_SEL
    +              GPIO sdio select register
    +              0
    +              8
    +              read-write
    +            
    +          
    +        
    +        
    +          ENABLE
    +          GPIO output enable register
    +          0x20
    +          0x20
    +          
    +            
    +              DATA
    +              GPIO output enable register for GPIO0-25
    +              0
    +              26
    +              read-write
    +            
    +          
    +        
    +        
    +          ENABLE_W1TS
    +          GPIO output enable set register
    +          0x24
    +          0x20
    +          
    +            
    +              ENABLE_W1TS
    +              GPIO output enable set register for GPIO0-25
    +              0
    +              26
    +              write-only
    +            
    +          
    +        
    +        
    +          ENABLE_W1TC
    +          GPIO output enable clear register
    +          0x28
    +          0x20
    +          
    +            
    +              ENABLE_W1TC
    +              GPIO output enable clear register for GPIO0-25
    +              0
    +              26
    +              write-only
    +            
    +          
    +        
    +        
    +          STRAP
    +          pad strapping register
    +          0x38
    +          0x20
    +          
    +            
    +              STRAPPING
    +              pad strapping register
    +              0
    +              16
    +              read-only
    +            
    +          
    +        
    +        
    +          IN
    +          GPIO input register
    +          0x3C
    +          0x20
    +          
    +            
    +              DATA_NEXT
    +              GPIO input register for GPIO0-25
    +              0
    +              26
    +              read-only
    +            
    +          
    +        
    +        
    +          STATUS
    +          GPIO interrupt status register
    +          0x44
    +          0x20
    +          
    +            
    +              INTERRUPT
    +              GPIO interrupt status register for GPIO0-25
    +              0
    +              26
    +              read-write
    +            
    +          
    +        
    +        
    +          STATUS_W1TS
    +          GPIO interrupt status set register
    +          0x48
    +          0x20
    +          
    +            
    +              STATUS_W1TS
    +              GPIO interrupt status set register for GPIO0-25
    +              0
    +              26
    +              write-only
    +            
    +          
    +        
    +        
    +          STATUS_W1TC
    +          GPIO interrupt status clear register
    +          0x4C
    +          0x20
    +          
    +            
    +              STATUS_W1TC
    +              GPIO interrupt status clear register for GPIO0-25
    +              0
    +              26
    +              write-only
    +            
    +          
    +        
    +        
    +          PCPU_INT
    +          GPIO PRO_CPU interrupt status register
    +          0x5C
    +          0x20
    +          
    +            
    +              PROCPU_INT
    +              GPIO PRO_CPU interrupt status register for GPIO0-25
    +              0
    +              26
    +              read-only
    +            
    +          
    +        
    +        
    +          PCPU_NMI_INT
    +          GPIO PRO_CPU(not shielded) interrupt status register
    +          0x60
    +          0x20
    +          
    +            
    +              PROCPU_NMI_INT
    +              GPIO PRO_CPU(not shielded) interrupt status register for GPIO0-25
    +              0
    +              26
    +              read-only
    +            
    +          
    +        
    +        
    +          CPUSDIO_INT
    +          GPIO CPUSDIO interrupt status register
    +          0x64
    +          0x20
    +          
    +            
    +              SDIO_INT
    +              GPIO CPUSDIO interrupt status register for GPIO0-25
    +              0
    +              26
    +              read-only
    +            
    +          
    +        
    +        
    +          26
    +          0x4
    +          PIN%s
    +          GPIO pin configuration register
    +          0x74
    +          0x20
    +          
    +            
    +              PIN_SYNC2_BYPASS
    +              set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger at posedge.
    +              0
    +              2
    +              read-write
    +            
    +            
    +              PIN_PAD_DRIVER
    +              set this bit to select pad driver. 1:open-drain. :normal.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              PIN_SYNC1_BYPASS
    +              set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger at posedge.
    +              3
    +              2
    +              read-write
    +            
    +            
    +              PIN_INT_TYPE
    +              set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level. 5:valid at high level
    +              7
    +              3
    +              read-write
    +            
    +            
    +              PIN_WAKEUP_ENABLE
    +              set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +              10
    +              1
    +              read-write
    +            
    +            
    +              PIN_CONFIG
    +              reserved
    +              11
    +              2
    +              read-write
    +            
    +            
    +              PIN_INT_ENA
    +              set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded) interrupt.
    +              13
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          STATUS_NEXT
    +          GPIO interrupt source register
    +          0x14C
    +          0x20
    +          
    +            
    +              STATUS_INTERRUPT_NEXT
    +              GPIO interrupt source register for GPIO0-25
    +              0
    +              26
    +              read-only
    +            
    +          
    +        
    +        
    +          128
    +          0x4
    +          FUNC%s_IN_SEL_CFG
    +          GPIO input function configuration register
    +          0x154
    +          0x20
    +          
    +            
    +              IN_SEL
    +              set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always high level. s=x3C: set this port always low level.
    +              0
    +              5
    +              read-write
    +            
    +            
    +              IN_INV_SEL
    +              set this bit to invert input signal. 1:invert. :not invert.
    +              5
    +              1
    +              read-write
    +            
    +            
    +              SEL
    +              set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +              6
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          26
    +          0x4
    +          FUNC%s_OUT_SEL_CFG
    +          GPIO output function select register
    +          0x554
    +          0x20
    +          0x00000080
    +          
    +            
    +              OUT_SEL
    +              The value of the bits: <=s<=256. Set the value to select output signal. s=-255: output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals GPIO_OUT_REG[n].
    +              0
    +              8
    +              read-write
    +            
    +            
    +              INV_SEL
    +              set this bit to invert output signal.1:invert.:not invert.
    +              8
    +              1
    +              read-write
    +            
    +            
    +              OEN_SEL
    +              set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output enable signal.:use peripheral output enable signal.
    +              9
    +              1
    +              read-write
    +            
    +            
    +              OEN_INV_SEL
    +              set this bit to invert output enable signal.1:invert.:not invert.
    +              10
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CLOCK_GATE
    +          GPIO clock gate register
    +          0x62C
    +          0x20
    +          0x00000001
    +          
    +            
    +              CLK_EN
    +              set this bit to enable GPIO clock gate
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          REG_DATE
    +          GPIO version register
    +          0x6FC
    +          0x20
    +          0x02006130
    +          
    +            
    +              REG_DATE
    +              version register
    +              0
    +              28
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      GPIOSD
    +      Sigma-Delta Modulation
    +      GPIOSD
    +      0x60004F00
    +      
    +        0x0
    +        0x1C
    +        registers
    +      
    +      
    +        
    +          4
    +          0x4
    +          SIGMADELTA%s
    +          Duty Cycle Configure Register of SDM%s
    +          0x0
    +          0x20
    +          0x0000FF00
    +          
    +            
    +              SD0_IN
    +              This field is used to configure the duty cycle of sigma delta modulation output.
    +              0
    +              8
    +              read-write
    +            
    +            
    +              SD0_PRESCALE
    +              This field is used to set a divider value to divide APB clock.
    +              8
    +              8
    +              read-write
    +            
    +          
    +        
    +        
    +          SIGMADELTA_CG
    +          Clock Gating Configure Register
    +          0x20
    +          0x20
    +          
    +            
    +              CLK_EN
    +              Clock enable bit of configuration registers for sigma delta modulation.
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          SIGMADELTA_MISC
    +          MISC Register
    +          0x24
    +          0x20
    +          
    +            
    +              FUNCTION_CLK_EN
    +              Clock enable bit of sigma delta modulation.
    +              30
    +              1
    +              read-write
    +            
    +            
    +              SPI_SWAP
    +              Reserved.
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          SIGMADELTA_VERSION
    +          Version Control Register
    +          0x28
    +          0x20
    +          0x02006230
    +          
    +            
    +              GPIO_SD_DATE
    +              Version control register.
    +              0
    +              28
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      HMAC
    +      HMAC (Hash-based Message Authentication Code) Accelerator
    +      HMAC
    +      0x6003E000
    +      
    +        0x0
    +        0xA0
    +        registers
    +      
    +      
    +        
    +          SET_START
    +          Process control register 0.
    +          0x40
    +          0x20
    +          
    +            
    +              SET_START
    +              Start hmac operation.
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          SET_PARA_PURPOSE
    +          Configure purpose.
    +          0x44
    +          0x20
    +          
    +            
    +              PURPOSE_SET
    +              Set hmac parameter purpose.
    +              0
    +              4
    +              write-only
    +            
    +          
    +        
    +        
    +          SET_PARA_KEY
    +          Configure key.
    +          0x48
    +          0x20
    +          
    +            
    +              KEY_SET
    +              Set hmac parameter key.
    +              0
    +              3
    +              write-only
    +            
    +          
    +        
    +        
    +          SET_PARA_FINISH
    +          Finish initial configuration.
    +          0x4C
    +          0x20
    +          
    +            
    +              SET_PARA_END
    +              Finish hmac configuration.
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          SET_MESSAGE_ONE
    +          Process control register 1.
    +          0x50
    +          0x20
    +          
    +            
    +              SET_TEXT_ONE
    +              Call SHA to calculate one message block.
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          SET_MESSAGE_ING
    +          Process control register 2.
    +          0x54
    +          0x20
    +          
    +            
    +              SET_TEXT_ING
    +              Continue typical hmac.
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          SET_MESSAGE_END
    +          Process control register 3.
    +          0x58
    +          0x20
    +          
    +            
    +              SET_TEXT_END
    +              Start hardware padding.
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          SET_RESULT_FINISH
    +          Process control register 4.
    +          0x5C
    +          0x20
    +          
    +            
    +              SET_RESULT_END
    +              After read result from upstream, then let hmac back to idle.
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          SET_INVALIDATE_JTAG
    +          Invalidate register 0.
    +          0x60
    +          0x20
    +          
    +            
    +              SET_INVALIDATE_JTAG
    +              Clear result from hmac downstream JTAG.
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          SET_INVALIDATE_DS
    +          Invalidate register 1.
    +          0x64
    +          0x20
    +          
    +            
    +              SET_INVALIDATE_DS
    +              Clear result from hmac downstream DS.
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          QUERY_ERROR
    +          Error register.
    +          0x68
    +          0x20
    +          
    +            
    +              QUREY_CHECK
    +              Hmac configuration state. 0: key are agree with purpose. 1: error
    +              0
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          QUERY_BUSY
    +          Busy register.
    +          0x6C
    +          0x20
    +          
    +            
    +              BUSY_STATE
    +              Hmac state. 1'b0: idle. 1'b1: busy
    +              0
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          64
    +          0x1
    +          WR_MESSAGE_MEM[%s]
    +          Message block memory.
    +          0x80
    +          0x8
    +        
    +        
    +          32
    +          0x1
    +          RD_RESULT_MEM[%s]
    +          Result from upstream.
    +          0xC0
    +          0x8
    +        
    +        
    +          SET_MESSAGE_PAD
    +          Process control register 5.
    +          0xF0
    +          0x20
    +          
    +            
    +              SET_TEXT_PAD
    +              Start software padding.
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          ONE_BLOCK
    +          Process control register 6.
    +          0xF4
    +          0x20
    +          
    +            
    +              SET_ONE_BLOCK
    +              Don't have to do padding.
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          SOFT_JTAG_CTRL
    +          Jtag register 0.
    +          0xF8
    +          0x20
    +          
    +            
    +              SOFT_JTAG_CTRL
    +              Turn on JTAG verification.
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          WR_JTAG
    +          Jtag register 1.
    +          0xFC
    +          0x20
    +          
    +            
    +              WR_JTAG
    +              32-bit of key to be compared.
    +              0
    +              32
    +              write-only
    +            
    +          
    +        
    +      
    +    
    +    
    +      I2C0
    +      I2C (Inter-Integrated Circuit) Controller
    +      I2C
    +      0x60013000
    +      
    +        0x0
    +        0x90
    +        registers
    +      
    +      
    +        I2C_EXT0
    +        29
    +      
    +      
    +        
    +          SCL_LOW_PERIOD
    +          I2C_SCL_LOW_PERIOD_REG
    +          0x0
    +          0x20
    +          
    +            
    +              SCL_LOW_PERIOD
    +              reg_scl_low_period
    +              0
    +              9
    +              read-write
    +            
    +          
    +        
    +        
    +          CTR
    +          I2C_CTR_REG
    +          0x4
    +          0x20
    +          0x0000020B
    +          
    +            
    +              SDA_FORCE_OUT
    +              reg_sda_force_out
    +              0
    +              1
    +              read-write
    +            
    +            
    +              SCL_FORCE_OUT
    +              reg_scl_force_out
    +              1
    +              1
    +              read-write
    +            
    +            
    +              SAMPLE_SCL_LEVEL
    +              reg_sample_scl_level
    +              2
    +              1
    +              read-write
    +            
    +            
    +              RX_FULL_ACK_LEVEL
    +              reg_rx_full_ack_level
    +              3
    +              1
    +              read-write
    +            
    +            
    +              MS_MODE
    +              reg_ms_mode
    +              4
    +              1
    +              read-write
    +            
    +            
    +              TRANS_START
    +              reg_trans_start
    +              5
    +              1
    +              write-only
    +            
    +            
    +              TX_LSB_FIRST
    +              reg_tx_lsb_first
    +              6
    +              1
    +              read-write
    +            
    +            
    +              RX_LSB_FIRST
    +              reg_rx_lsb_first
    +              7
    +              1
    +              read-write
    +            
    +            
    +              CLK_EN
    +              reg_clk_en
    +              8
    +              1
    +              read-write
    +            
    +            
    +              ARBITRATION_EN
    +              reg_arbitration_en
    +              9
    +              1
    +              read-write
    +            
    +            
    +              FSM_RST
    +              reg_fsm_rst
    +              10
    +              1
    +              write-only
    +            
    +            
    +              CONF_UPGATE
    +              reg_conf_upgate
    +              11
    +              1
    +              write-only
    +            
    +            
    +              SLV_TX_AUTO_START_EN
    +              reg_slv_tx_auto_start_en
    +              12
    +              1
    +              read-write
    +            
    +            
    +              ADDR_10BIT_RW_CHECK_EN
    +              reg_addr_10bit_rw_check_en
    +              13
    +              1
    +              read-write
    +            
    +            
    +              ADDR_BROADCASTING_EN
    +              reg_addr_broadcasting_en
    +              14
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          SR
    +          I2C_SR_REG
    +          0x8
    +          0x20
    +          0x0000C000
    +          
    +            
    +              RESP_REC
    +              reg_resp_rec
    +              0
    +              1
    +              read-only
    +            
    +            
    +              SLAVE_RW
    +              reg_slave_rw
    +              1
    +              1
    +              read-only
    +            
    +            
    +              ARB_LOST
    +              reg_arb_lost
    +              3
    +              1
    +              read-only
    +            
    +            
    +              BUS_BUSY
    +              reg_bus_busy
    +              4
    +              1
    +              read-only
    +            
    +            
    +              SLAVE_ADDRESSED
    +              reg_slave_addressed
    +              5
    +              1
    +              read-only
    +            
    +            
    +              RXFIFO_CNT
    +              reg_rxfifo_cnt
    +              8
    +              6
    +              read-only
    +            
    +            
    +              STRETCH_CAUSE
    +              reg_stretch_cause
    +              14
    +              2
    +              read-only
    +            
    +            
    +              TXFIFO_CNT
    +              reg_txfifo_cnt
    +              18
    +              6
    +              read-only
    +            
    +            
    +              SCL_MAIN_STATE_LAST
    +              reg_scl_main_state_last
    +              24
    +              3
    +              read-only
    +            
    +            
    +              SCL_STATE_LAST
    +              reg_scl_state_last
    +              28
    +              3
    +              read-only
    +            
    +          
    +        
    +        
    +          TO
    +          I2C_TO_REG
    +          0xC
    +          0x20
    +          0x00000010
    +          
    +            
    +              TIME_OUT_VALUE
    +              reg_time_out_value
    +              0
    +              5
    +              read-write
    +            
    +            
    +              TIME_OUT_EN
    +              reg_time_out_en
    +              5
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          SLAVE_ADDR
    +          I2C_SLAVE_ADDR_REG
    +          0x10
    +          0x20
    +          
    +            
    +              SLAVE_ADDR
    +              reg_slave_addr
    +              0
    +              15
    +              read-write
    +            
    +            
    +              ADDR_10BIT_EN
    +              reg_addr_10bit_en
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          FIFO_ST
    +          I2C_FIFO_ST_REG
    +          0x14
    +          0x20
    +          
    +            
    +              RXFIFO_RADDR
    +              reg_rxfifo_raddr
    +              0
    +              5
    +              read-only
    +            
    +            
    +              RXFIFO_WADDR
    +              reg_rxfifo_waddr
    +              5
    +              5
    +              read-only
    +            
    +            
    +              TXFIFO_RADDR
    +              reg_txfifo_raddr
    +              10
    +              5
    +              read-only
    +            
    +            
    +              TXFIFO_WADDR
    +              reg_txfifo_waddr
    +              15
    +              5
    +              read-only
    +            
    +            
    +              SLAVE_RW_POINT
    +              reg_slave_rw_point
    +              22
    +              8
    +              read-only
    +            
    +          
    +        
    +        
    +          FIFO_CONF
    +          I2C_FIFO_CONF_REG
    +          0x18
    +          0x20
    +          0x0000408B
    +          
    +            
    +              RXFIFO_WM_THRHD
    +              reg_rxfifo_wm_thrhd
    +              0
    +              5
    +              read-write
    +            
    +            
    +              TXFIFO_WM_THRHD
    +              reg_txfifo_wm_thrhd
    +              5
    +              5
    +              read-write
    +            
    +            
    +              NONFIFO_EN
    +              reg_nonfifo_en
    +              10
    +              1
    +              read-write
    +            
    +            
    +              FIFO_ADDR_CFG_EN
    +              reg_fifo_addr_cfg_en
    +              11
    +              1
    +              read-write
    +            
    +            
    +              RX_FIFO_RST
    +              reg_rx_fifo_rst
    +              12
    +              1
    +              read-write
    +            
    +            
    +              TX_FIFO_RST
    +              reg_tx_fifo_rst
    +              13
    +              1
    +              read-write
    +            
    +            
    +              FIFO_PRT_EN
    +              reg_fifo_prt_en
    +              14
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DATA
    +          I2C_FIFO_DATA_REG
    +          0x1C
    +          0x20
    +          
    +            
    +              FIFO_RDATA
    +              reg_fifo_rdata
    +              0
    +              8
    +              read-write
    +            
    +          
    +        
    +        
    +          INT_RAW
    +          I2C_INT_RAW_REG
    +          0x20
    +          0x20
    +          0x00000002
    +          
    +            
    +              RXFIFO_WM_INT_RAW
    +              reg_rxfifo_wm_int_raw
    +              0
    +              1
    +              read-only
    +            
    +            
    +              TXFIFO_WM_INT_RAW
    +              reg_txfifo_wm_int_raw
    +              1
    +              1
    +              read-only
    +            
    +            
    +              RXFIFO_OVF_INT_RAW
    +              reg_rxfifo_ovf_int_raw
    +              2
    +              1
    +              read-only
    +            
    +            
    +              END_DETECT_INT_RAW
    +              reg_end_detect_int_raw
    +              3
    +              1
    +              read-only
    +            
    +            
    +              BYTE_TRANS_DONE_INT_RAW
    +              reg_byte_trans_done_int_raw
    +              4
    +              1
    +              read-only
    +            
    +            
    +              ARBITRATION_LOST_INT_RAW
    +              reg_arbitration_lost_int_raw
    +              5
    +              1
    +              read-only
    +            
    +            
    +              MST_TXFIFO_UDF_INT_RAW
    +              reg_mst_txfifo_udf_int_raw
    +              6
    +              1
    +              read-only
    +            
    +            
    +              TRANS_COMPLETE_INT_RAW
    +              reg_trans_complete_int_raw
    +              7
    +              1
    +              read-only
    +            
    +            
    +              TIME_OUT_INT_RAW
    +              reg_time_out_int_raw
    +              8
    +              1
    +              read-only
    +            
    +            
    +              TRANS_START_INT_RAW
    +              reg_trans_start_int_raw
    +              9
    +              1
    +              read-only
    +            
    +            
    +              NACK_INT_RAW
    +              reg_nack_int_raw
    +              10
    +              1
    +              read-only
    +            
    +            
    +              TXFIFO_OVF_INT_RAW
    +              reg_txfifo_ovf_int_raw
    +              11
    +              1
    +              read-only
    +            
    +            
    +              RXFIFO_UDF_INT_RAW
    +              reg_rxfifo_udf_int_raw
    +              12
    +              1
    +              read-only
    +            
    +            
    +              SCL_ST_TO_INT_RAW
    +              reg_scl_st_to_int_raw
    +              13
    +              1
    +              read-only
    +            
    +            
    +              SCL_MAIN_ST_TO_INT_RAW
    +              reg_scl_main_st_to_int_raw
    +              14
    +              1
    +              read-only
    +            
    +            
    +              DET_START_INT_RAW
    +              reg_det_start_int_raw
    +              15
    +              1
    +              read-only
    +            
    +            
    +              SLAVE_STRETCH_INT_RAW
    +              reg_slave_stretch_int_raw
    +              16
    +              1
    +              read-only
    +            
    +            
    +              GENERAL_CALL_INT_RAW
    +              reg_general_call_int_raw
    +              17
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_CLR
    +          I2C_INT_CLR_REG
    +          0x24
    +          0x20
    +          
    +            
    +              RXFIFO_WM_INT_CLR
    +              reg_rxfifo_wm_int_clr
    +              0
    +              1
    +              write-only
    +            
    +            
    +              TXFIFO_WM_INT_CLR
    +              reg_txfifo_wm_int_clr
    +              1
    +              1
    +              write-only
    +            
    +            
    +              RXFIFO_OVF_INT_CLR
    +              reg_rxfifo_ovf_int_clr
    +              2
    +              1
    +              write-only
    +            
    +            
    +              END_DETECT_INT_CLR
    +              reg_end_detect_int_clr
    +              3
    +              1
    +              write-only
    +            
    +            
    +              BYTE_TRANS_DONE_INT_CLR
    +              reg_byte_trans_done_int_clr
    +              4
    +              1
    +              write-only
    +            
    +            
    +              ARBITRATION_LOST_INT_CLR
    +              reg_arbitration_lost_int_clr
    +              5
    +              1
    +              write-only
    +            
    +            
    +              MST_TXFIFO_UDF_INT_CLR
    +              reg_mst_txfifo_udf_int_clr
    +              6
    +              1
    +              write-only
    +            
    +            
    +              TRANS_COMPLETE_INT_CLR
    +              reg_trans_complete_int_clr
    +              7
    +              1
    +              write-only
    +            
    +            
    +              TIME_OUT_INT_CLR
    +              reg_time_out_int_clr
    +              8
    +              1
    +              write-only
    +            
    +            
    +              TRANS_START_INT_CLR
    +              reg_trans_start_int_clr
    +              9
    +              1
    +              write-only
    +            
    +            
    +              NACK_INT_CLR
    +              reg_nack_int_clr
    +              10
    +              1
    +              write-only
    +            
    +            
    +              TXFIFO_OVF_INT_CLR
    +              reg_txfifo_ovf_int_clr
    +              11
    +              1
    +              write-only
    +            
    +            
    +              RXFIFO_UDF_INT_CLR
    +              reg_rxfifo_udf_int_clr
    +              12
    +              1
    +              write-only
    +            
    +            
    +              SCL_ST_TO_INT_CLR
    +              reg_scl_st_to_int_clr
    +              13
    +              1
    +              write-only
    +            
    +            
    +              SCL_MAIN_ST_TO_INT_CLR
    +              reg_scl_main_st_to_int_clr
    +              14
    +              1
    +              write-only
    +            
    +            
    +              DET_START_INT_CLR
    +              reg_det_start_int_clr
    +              15
    +              1
    +              write-only
    +            
    +            
    +              SLAVE_STRETCH_INT_CLR
    +              reg_slave_stretch_int_clr
    +              16
    +              1
    +              write-only
    +            
    +            
    +              GENERAL_CALL_INT_CLR
    +              reg_general_call_int_clr
    +              17
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          INT_ENA
    +          I2C_INT_ENA_REG
    +          0x28
    +          0x20
    +          
    +            
    +              RXFIFO_WM_INT_ENA
    +              reg_rxfifo_wm_int_ena
    +              0
    +              1
    +              read-write
    +            
    +            
    +              TXFIFO_WM_INT_ENA
    +              reg_txfifo_wm_int_ena
    +              1
    +              1
    +              read-write
    +            
    +            
    +              RXFIFO_OVF_INT_ENA
    +              reg_rxfifo_ovf_int_ena
    +              2
    +              1
    +              read-write
    +            
    +            
    +              END_DETECT_INT_ENA
    +              reg_end_detect_int_ena
    +              3
    +              1
    +              read-write
    +            
    +            
    +              BYTE_TRANS_DONE_INT_ENA
    +              reg_byte_trans_done_int_ena
    +              4
    +              1
    +              read-write
    +            
    +            
    +              ARBITRATION_LOST_INT_ENA
    +              reg_arbitration_lost_int_ena
    +              5
    +              1
    +              read-write
    +            
    +            
    +              MST_TXFIFO_UDF_INT_ENA
    +              reg_mst_txfifo_udf_int_ena
    +              6
    +              1
    +              read-write
    +            
    +            
    +              TRANS_COMPLETE_INT_ENA
    +              reg_trans_complete_int_ena
    +              7
    +              1
    +              read-write
    +            
    +            
    +              TIME_OUT_INT_ENA
    +              reg_time_out_int_ena
    +              8
    +              1
    +              read-write
    +            
    +            
    +              TRANS_START_INT_ENA
    +              reg_trans_start_int_ena
    +              9
    +              1
    +              read-write
    +            
    +            
    +              NACK_INT_ENA
    +              reg_nack_int_ena
    +              10
    +              1
    +              read-write
    +            
    +            
    +              TXFIFO_OVF_INT_ENA
    +              reg_txfifo_ovf_int_ena
    +              11
    +              1
    +              read-write
    +            
    +            
    +              RXFIFO_UDF_INT_ENA
    +              reg_rxfifo_udf_int_ena
    +              12
    +              1
    +              read-write
    +            
    +            
    +              SCL_ST_TO_INT_ENA
    +              reg_scl_st_to_int_ena
    +              13
    +              1
    +              read-write
    +            
    +            
    +              SCL_MAIN_ST_TO_INT_ENA
    +              reg_scl_main_st_to_int_ena
    +              14
    +              1
    +              read-write
    +            
    +            
    +              DET_START_INT_ENA
    +              reg_det_start_int_ena
    +              15
    +              1
    +              read-write
    +            
    +            
    +              SLAVE_STRETCH_INT_ENA
    +              reg_slave_stretch_int_ena
    +              16
    +              1
    +              read-write
    +            
    +            
    +              GENERAL_CALL_INT_ENA
    +              reg_general_call_int_ena
    +              17
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          INT_STATUS
    +          I2C_INT_STATUS_REG
    +          0x2C
    +          0x20
    +          
    +            
    +              RXFIFO_WM_INT_ST
    +              reg_rxfifo_wm_int_st
    +              0
    +              1
    +              read-only
    +            
    +            
    +              TXFIFO_WM_INT_ST
    +              reg_txfifo_wm_int_st
    +              1
    +              1
    +              read-only
    +            
    +            
    +              RXFIFO_OVF_INT_ST
    +              reg_rxfifo_ovf_int_st
    +              2
    +              1
    +              read-only
    +            
    +            
    +              END_DETECT_INT_ST
    +              reg_end_detect_int_st
    +              3
    +              1
    +              read-only
    +            
    +            
    +              BYTE_TRANS_DONE_INT_ST
    +              reg_byte_trans_done_int_st
    +              4
    +              1
    +              read-only
    +            
    +            
    +              ARBITRATION_LOST_INT_ST
    +              reg_arbitration_lost_int_st
    +              5
    +              1
    +              read-only
    +            
    +            
    +              MST_TXFIFO_UDF_INT_ST
    +              reg_mst_txfifo_udf_int_st
    +              6
    +              1
    +              read-only
    +            
    +            
    +              TRANS_COMPLETE_INT_ST
    +              reg_trans_complete_int_st
    +              7
    +              1
    +              read-only
    +            
    +            
    +              TIME_OUT_INT_ST
    +              reg_time_out_int_st
    +              8
    +              1
    +              read-only
    +            
    +            
    +              TRANS_START_INT_ST
    +              reg_trans_start_int_st
    +              9
    +              1
    +              read-only
    +            
    +            
    +              NACK_INT_ST
    +              reg_nack_int_st
    +              10
    +              1
    +              read-only
    +            
    +            
    +              TXFIFO_OVF_INT_ST
    +              reg_txfifo_ovf_int_st
    +              11
    +              1
    +              read-only
    +            
    +            
    +              RXFIFO_UDF_INT_ST
    +              reg_rxfifo_udf_int_st
    +              12
    +              1
    +              read-only
    +            
    +            
    +              SCL_ST_TO_INT_ST
    +              reg_scl_st_to_int_st
    +              13
    +              1
    +              read-only
    +            
    +            
    +              SCL_MAIN_ST_TO_INT_ST
    +              reg_scl_main_st_to_int_st
    +              14
    +              1
    +              read-only
    +            
    +            
    +              DET_START_INT_ST
    +              reg_det_start_int_st
    +              15
    +              1
    +              read-only
    +            
    +            
    +              SLAVE_STRETCH_INT_ST
    +              reg_slave_stretch_int_st
    +              16
    +              1
    +              read-only
    +            
    +            
    +              GENERAL_CALL_INT_ST
    +              reg_general_call_int_st
    +              17
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          SDA_HOLD
    +          I2C_SDA_HOLD_REG
    +          0x30
    +          0x20
    +          
    +            
    +              TIME
    +              reg_sda_hold_time
    +              0
    +              9
    +              read-write
    +            
    +          
    +        
    +        
    +          SDA_SAMPLE
    +          I2C_SDA_SAMPLE_REG
    +          0x34
    +          0x20
    +          
    +            
    +              TIME
    +              reg_sda_sample_time
    +              0
    +              9
    +              read-write
    +            
    +          
    +        
    +        
    +          SCL_HIGH_PERIOD
    +          I2C_SCL_HIGH_PERIOD_REG
    +          0x38
    +          0x20
    +          
    +            
    +              SCL_HIGH_PERIOD
    +              reg_scl_high_period
    +              0
    +              9
    +              read-write
    +            
    +            
    +              SCL_WAIT_HIGH_PERIOD
    +              reg_scl_wait_high_period
    +              9
    +              7
    +              read-write
    +            
    +          
    +        
    +        
    +          SCL_START_HOLD
    +          I2C_SCL_START_HOLD_REG
    +          0x40
    +          0x20
    +          0x00000008
    +          
    +            
    +              TIME
    +              reg_scl_start_hold_time
    +              0
    +              9
    +              read-write
    +            
    +          
    +        
    +        
    +          SCL_RSTART_SETUP
    +          I2C_SCL_RSTART_SETUP_REG
    +          0x44
    +          0x20
    +          0x00000008
    +          
    +            
    +              TIME
    +              reg_scl_rstart_setup_time
    +              0
    +              9
    +              read-write
    +            
    +          
    +        
    +        
    +          SCL_STOP_HOLD
    +          I2C_SCL_STOP_HOLD_REG
    +          0x48
    +          0x20
    +          0x00000008
    +          
    +            
    +              TIME
    +              reg_scl_stop_hold_time
    +              0
    +              9
    +              read-write
    +            
    +          
    +        
    +        
    +          SCL_STOP_SETUP
    +          I2C_SCL_STOP_SETUP_REG
    +          0x4C
    +          0x20
    +          0x00000008
    +          
    +            
    +              TIME
    +              reg_scl_stop_setup_time
    +              0
    +              9
    +              read-write
    +            
    +          
    +        
    +        
    +          FILTER_CFG
    +          I2C_FILTER_CFG_REG
    +          0x50
    +          0x20
    +          0x00000300
    +          
    +            
    +              SCL_FILTER_THRES
    +              reg_scl_filter_thres
    +              0
    +              4
    +              read-write
    +            
    +            
    +              SDA_FILTER_THRES
    +              reg_sda_filter_thres
    +              4
    +              4
    +              read-write
    +            
    +            
    +              SCL_FILTER_EN
    +              reg_scl_filter_en
    +              8
    +              1
    +              read-write
    +            
    +            
    +              SDA_FILTER_EN
    +              reg_sda_filter_en
    +              9
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CLK_CONF
    +          I2C_CLK_CONF_REG
    +          0x54
    +          0x20
    +          0x00200000
    +          
    +            
    +              SCLK_DIV_NUM
    +              reg_sclk_div_num
    +              0
    +              8
    +              read-write
    +            
    +            
    +              SCLK_DIV_A
    +              reg_sclk_div_a
    +              8
    +              6
    +              read-write
    +            
    +            
    +              SCLK_DIV_B
    +              reg_sclk_div_b
    +              14
    +              6
    +              read-write
    +            
    +            
    +              SCLK_SEL
    +              reg_sclk_sel
    +              20
    +              1
    +              read-write
    +            
    +            
    +              SCLK_ACTIVE
    +              reg_sclk_active
    +              21
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          8
    +          0x4
    +          COMD%s
    +          I2C_COMD%s_REG
    +          0x58
    +          0x20
    +          
    +            
    +              COMMAND
    +              reg_command
    +              0
    +              14
    +              read-write
    +            
    +            
    +              COMMAND_DONE
    +              reg_command_done
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          SCL_ST_TIME_OUT
    +          I2C_SCL_ST_TIME_OUT_REG
    +          0x78
    +          0x20
    +          0x00000010
    +          
    +            
    +              SCL_ST_TO_I2C
    +              reg_scl_st_to_regno more than 23
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          SCL_MAIN_ST_TIME_OUT
    +          I2C_SCL_MAIN_ST_TIME_OUT_REG
    +          0x7C
    +          0x20
    +          0x00000010
    +          
    +            
    +              SCL_MAIN_ST_TO_I2C
    +              reg_scl_main_st_to_regno more than 23
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          SCL_SP_CONF
    +          I2C_SCL_SP_CONF_REG
    +          0x80
    +          0x20
    +          
    +            
    +              SCL_RST_SLV_EN
    +              reg_scl_rst_slv_en
    +              0
    +              1
    +              read-write
    +            
    +            
    +              SCL_RST_SLV_NUM
    +              reg_scl_rst_slv_num
    +              1
    +              5
    +              read-write
    +            
    +            
    +              SCL_PD_EN
    +              reg_scl_pd_en
    +              6
    +              1
    +              read-write
    +            
    +            
    +              SDA_PD_EN
    +              reg_sda_pd_en
    +              7
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          SCL_STRETCH_CONF
    +          I2C_SCL_STRETCH_CONF_REG
    +          0x84
    +          0x20
    +          
    +            
    +              STRETCH_PROTECT_NUM
    +              reg_stretch_protect_num
    +              0
    +              10
    +              read-write
    +            
    +            
    +              SLAVE_SCL_STRETCH_EN
    +              reg_slave_scl_stretch_en
    +              10
    +              1
    +              read-write
    +            
    +            
    +              SLAVE_SCL_STRETCH_CLR
    +              reg_slave_scl_stretch_clr
    +              11
    +              1
    +              write-only
    +            
    +            
    +              SLAVE_BYTE_ACK_CTL_EN
    +              reg_slave_byte_ack_ctl_en
    +              12
    +              1
    +              read-write
    +            
    +            
    +              SLAVE_BYTE_ACK_LVL
    +              reg_slave_byte_ack_lvl
    +              13
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DATE
    +          I2C_DATE_REG
    +          0xF8
    +          0x20
    +          0x20070201
    +          
    +            
    +              DATE
    +              reg_date
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          TXFIFO_START_ADDR
    +          I2C_TXFIFO_START_ADDR_REG
    +          0x100
    +          0x20
    +          
    +            
    +              TXFIFO_START_ADDR
    +              reg_txfifo_start_addr.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          RXFIFO_START_ADDR
    +          I2C_RXFIFO_START_ADDR_REG
    +          0x180
    +          0x20
    +          
    +            
    +              RXFIFO_START_ADDR
    +              reg_rxfifo_start_addr.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +      
    +    
    +    
    +      I2S
    +      I2S (Inter-IC Sound) Controller
    +      I2S
    +      0x6002D000
    +      
    +        0x0
    +        0x5C
    +        registers
    +      
    +      
    +        I2S
    +        20
    +      
    +      
    +        
    +          INT_RAW
    +          I2S interrupt raw register, valid in level.
    +          0xC
    +          0x20
    +          
    +            
    +              RX_DONE_INT_RAW
    +              The raw interrupt status bit  for the i2s_rx_done_int interrupt
    +              0
    +              1
    +              read-only
    +            
    +            
    +              TX_DONE_INT_RAW
    +              The raw interrupt status bit  for the i2s_tx_done_int interrupt
    +              1
    +              1
    +              read-only
    +            
    +            
    +              RX_HUNG_INT_RAW
    +              The raw interrupt status bit  for the i2s_rx_hung_int interrupt
    +              2
    +              1
    +              read-only
    +            
    +            
    +              TX_HUNG_INT_RAW
    +              The raw interrupt status bit  for the i2s_tx_hung_int interrupt
    +              3
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_ST
    +          I2S interrupt status register.
    +          0x10
    +          0x20
    +          
    +            
    +              RX_DONE_INT_ST
    +              The masked interrupt status bit  for the i2s_rx_done_int interrupt
    +              0
    +              1
    +              read-only
    +            
    +            
    +              TX_DONE_INT_ST
    +              The masked interrupt status bit  for the i2s_tx_done_int interrupt
    +              1
    +              1
    +              read-only
    +            
    +            
    +              RX_HUNG_INT_ST
    +              The masked interrupt status bit  for the i2s_rx_hung_int interrupt
    +              2
    +              1
    +              read-only
    +            
    +            
    +              TX_HUNG_INT_ST
    +              The masked interrupt status bit  for the i2s_tx_hung_int interrupt
    +              3
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_ENA
    +          I2S interrupt enable register.
    +          0x14
    +          0x20
    +          
    +            
    +              RX_DONE_INT_ENA
    +              The interrupt enable bit  for the i2s_rx_done_int interrupt
    +              0
    +              1
    +              read-write
    +            
    +            
    +              TX_DONE_INT_ENA
    +              The interrupt enable bit  for the i2s_tx_done_int interrupt
    +              1
    +              1
    +              read-write
    +            
    +            
    +              RX_HUNG_INT_ENA
    +              The interrupt enable bit  for the i2s_rx_hung_int interrupt
    +              2
    +              1
    +              read-write
    +            
    +            
    +              TX_HUNG_INT_ENA
    +              The interrupt enable bit  for the i2s_tx_hung_int interrupt
    +              3
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          INT_CLR
    +          I2S interrupt clear register.
    +          0x18
    +          0x20
    +          
    +            
    +              RX_DONE_INT_CLR
    +              Set this bit to clear the i2s_rx_done_int interrupt
    +              0
    +              1
    +              write-only
    +            
    +            
    +              TX_DONE_INT_CLR
    +              Set this bit to clear the i2s_tx_done_int interrupt
    +              1
    +              1
    +              write-only
    +            
    +            
    +              RX_HUNG_INT_CLR
    +              Set this bit to clear the i2s_rx_hung_int interrupt
    +              2
    +              1
    +              write-only
    +            
    +            
    +              TX_HUNG_INT_CLR
    +              Set this bit to clear the i2s_tx_hung_int interrupt
    +              3
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          RX_CONF
    +          I2S RX configure register
    +          0x20
    +          0x20
    +          0x00009600
    +          
    +            
    +              RX_RESET
    +              Set this bit to reset receiver
    +              0
    +              1
    +              write-only
    +            
    +            
    +              RX_FIFO_RESET
    +              Set this bit to reset Rx AFIFO
    +              1
    +              1
    +              write-only
    +            
    +            
    +              RX_START
    +              Set this bit to start receiving data
    +              2
    +              1
    +              read-write
    +            
    +            
    +              RX_SLAVE_MOD
    +              Set this bit to enable slave receiver mode
    +              3
    +              1
    +              read-write
    +            
    +            
    +              RX_MONO
    +              Set this bit to enable receiver  in mono mode
    +              5
    +              1
    +              read-write
    +            
    +            
    +              RX_BIG_ENDIAN
    +              I2S Rx byte endian, 1: low addr value to high addr. 0: low addr with low addr value.
    +              7
    +              1
    +              read-write
    +            
    +            
    +              RX_UPDATE
    +              Set 1 to update I2S RX registers from APB clock domain to I2S RX clock domain. This bit will be cleared by hardware after update register done.
    +              8
    +              1
    +              read-write
    +            
    +            
    +              RX_MONO_FST_VLD
    +              1: The first channel data value is valid in I2S RX mono mode.   0: The second channel data value is valid in I2S RX mono mode.
    +              9
    +              1
    +              read-write
    +            
    +            
    +              RX_PCM_CONF
    +              I2S RX compress/decompress configuration bit. & 0 (atol): A-Law decompress, 1 (ltoa) : A-Law compress, 2 (utol) : u-Law decompress, 3 (ltou) : u-Law compress. &
    +              10
    +              2
    +              read-write
    +            
    +            
    +              RX_PCM_BYPASS
    +              Set this bit to bypass Compress/Decompress module for received data.
    +              12
    +              1
    +              read-write
    +            
    +            
    +              RX_STOP_MODE
    +              0  : I2S Rx only stop when reg_rx_start is cleared.   1: Stop when reg_rx_start is 0 or in_suc_eof is 1.   2:  Stop I2S RX when reg_rx_start is 0 or RX FIFO is full.
    +              13
    +              2
    +              read-write
    +            
    +            
    +              RX_LEFT_ALIGN
    +              1: I2S RX left alignment mode. 0: I2S RX right alignment mode.
    +              15
    +              1
    +              read-write
    +            
    +            
    +              RX_24_FILL_EN
    +              1: store 24 channel bits to 32 bits. 0:store 24 channel bits to 24 bits.
    +              16
    +              1
    +              read-write
    +            
    +            
    +              RX_WS_IDLE_POL
    +              0: WS should be 0 when receiving left channel data, and WS is 1in right channel.  1: WS should be 1 when receiving left channel data, and WS is 0in right channel.
    +              17
    +              1
    +              read-write
    +            
    +            
    +              RX_BIT_ORDER
    +              I2S Rx bit endian. 1:small endian, the LSB is received first. 0:big endian, the MSB is received first.
    +              18
    +              1
    +              read-write
    +            
    +            
    +              RX_TDM_EN
    +              1: Enable I2S TDM Rx mode . 0: Disable.
    +              19
    +              1
    +              read-write
    +            
    +            
    +              RX_PDM_EN
    +              1: Enable I2S PDM Rx mode . 0: Disable.
    +              20
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          TX_CONF
    +          I2S TX configure register
    +          0x24
    +          0x20
    +          0x0000B200
    +          
    +            
    +              TX_RESET
    +              Set this bit to reset transmitter
    +              0
    +              1
    +              write-only
    +            
    +            
    +              TX_FIFO_RESET
    +              Set this bit to reset Tx AFIFO
    +              1
    +              1
    +              write-only
    +            
    +            
    +              TX_START
    +              Set this bit to start transmitting data
    +              2
    +              1
    +              read-write
    +            
    +            
    +              TX_SLAVE_MOD
    +              Set this bit to enable slave transmitter mode
    +              3
    +              1
    +              read-write
    +            
    +            
    +              TX_MONO
    +              Set this bit to enable transmitter in mono mode
    +              5
    +              1
    +              read-write
    +            
    +            
    +              TX_CHAN_EQUAL
    +              1: The value of Left channel data is equal to the value of right channel data in I2S TX mono mode or TDM channel select mode. 0: The invalid channel data is reg_i2s_single_data in I2S TX mono mode or TDM channel select mode.
    +              6
    +              1
    +              read-write
    +            
    +            
    +              TX_BIG_ENDIAN
    +              I2S Tx byte endian, 1: low addr value to high addr.  0: low addr with low addr value.
    +              7
    +              1
    +              read-write
    +            
    +            
    +              TX_UPDATE
    +              Set 1 to update I2S TX registers from APB clock domain to I2S TX clock domain. This bit will be cleared by hardware after update register done.
    +              8
    +              1
    +              read-write
    +            
    +            
    +              TX_MONO_FST_VLD
    +              1: The first channel data value is valid in I2S TX mono mode.   0: The second channel data value is valid in I2S TX mono mode.
    +              9
    +              1
    +              read-write
    +            
    +            
    +              TX_PCM_CONF
    +              I2S TX compress/decompress configuration bit. & 0 (atol): A-Law decompress, 1 (ltoa) : A-Law compress, 2 (utol) : u-Law decompress, 3 (ltou) : u-Law compress. &
    +              10
    +              2
    +              read-write
    +            
    +            
    +              TX_PCM_BYPASS
    +              Set this bit to bypass  Compress/Decompress module for transmitted data.
    +              12
    +              1
    +              read-write
    +            
    +            
    +              TX_STOP_EN
    +              Set this bit to stop disable output BCK signal and WS signal when tx FIFO is emtpy
    +              13
    +              1
    +              read-write
    +            
    +            
    +              TX_LEFT_ALIGN
    +              1: I2S TX left alignment mode. 0: I2S TX right alignment mode.
    +              15
    +              1
    +              read-write
    +            
    +            
    +              TX_24_FILL_EN
    +              1: Sent 32 bits in 24 channel bits mode. 0: Sent 24 bits in 24 channel bits mode
    +              16
    +              1
    +              read-write
    +            
    +            
    +              TX_WS_IDLE_POL
    +              0: WS should be 0 when sending left channel data, and WS is 1in right channel.  1: WS should be 1 when sending left channel data, and WS is 0in right channel.
    +              17
    +              1
    +              read-write
    +            
    +            
    +              TX_BIT_ORDER
    +              I2S Tx bit endian. 1:small endian, the LSB is sent first. 0:big endian, the MSB is sent first.
    +              18
    +              1
    +              read-write
    +            
    +            
    +              TX_TDM_EN
    +              1: Enable I2S TDM Tx mode . 0: Disable.
    +              19
    +              1
    +              read-write
    +            
    +            
    +              TX_PDM_EN
    +              1: Enable I2S PDM Tx mode . 0: Disable.
    +              20
    +              1
    +              read-write
    +            
    +            
    +              TX_CHAN_MOD
    +              I2S transmitter channel mode configuration bits.
    +              24
    +              3
    +              read-write
    +            
    +            
    +              SIG_LOOPBACK
    +              Enable signal loop back mode with transmitter module and receiver module sharing the same WS and BCK signals.
    +              27
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          RX_CONF1
    +          I2S RX configure register 1
    +          0x28
    +          0x20
    +          0x2F3DE300
    +          
    +            
    +              RX_TDM_WS_WIDTH
    +              The width of rx_ws_out in TDM mode is (I2S_RX_TDM_WS_WIDTH[6:0] +1) * T_bck
    +              0
    +              7
    +              read-write
    +            
    +            
    +              RX_BCK_DIV_NUM
    +              Bit clock configuration bits in receiver mode.
    +              7
    +              6
    +              read-write
    +            
    +            
    +              RX_BITS_MOD
    +              Set the bits to configure the valid data bit length of I2S receiver channel. 7: all the valid channel data is in 8-bit-mode. 15: all the valid channel data is in 16-bit-mode. 23: all the valid channel data is in 24-bit-mode. 31:all the valid channel data is in 32-bit-mode.
    +              13
    +              5
    +              read-write
    +            
    +            
    +              RX_HALF_SAMPLE_BITS
    +              I2S Rx half sample bits -1.
    +              18
    +              6
    +              read-write
    +            
    +            
    +              RX_TDM_CHAN_BITS
    +              The Rx bit number for each channel minus 1in TDM mode.
    +              24
    +              5
    +              read-write
    +            
    +            
    +              RX_MSB_SHIFT
    +              Set this bit to enable receiver in Phillips standard mode
    +              29
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          TX_CONF1
    +          I2S TX configure register 1
    +          0x2C
    +          0x20
    +          0x6F3DE300
    +          
    +            
    +              TX_TDM_WS_WIDTH
    +              The width of tx_ws_out in TDM mode is (I2S_TX_TDM_WS_WIDTH[6:0] +1) * T_bck
    +              0
    +              7
    +              read-write
    +            
    +            
    +              TX_BCK_DIV_NUM
    +              Bit clock configuration bits in transmitter mode.
    +              7
    +              6
    +              read-write
    +            
    +            
    +              TX_BITS_MOD
    +              Set the bits to configure the valid data bit length of I2S transmitter channel. 7: all the valid channel data is in 8-bit-mode. 15: all the valid channel data is in 16-bit-mode. 23: all the valid channel data is in 24-bit-mode. 31:all the valid channel data is in 32-bit-mode.
    +              13
    +              5
    +              read-write
    +            
    +            
    +              TX_HALF_SAMPLE_BITS
    +              I2S Tx half sample bits -1.
    +              18
    +              6
    +              read-write
    +            
    +            
    +              TX_TDM_CHAN_BITS
    +              The Tx bit number for each channel minus 1in TDM mode.
    +              24
    +              5
    +              read-write
    +            
    +            
    +              TX_MSB_SHIFT
    +              Set this bit to enable transmitter in Phillips standard mode
    +              29
    +              1
    +              read-write
    +            
    +            
    +              TX_BCK_NO_DLY
    +              1: BCK is not delayed to generate pos/neg edge in master mode. 0: BCK is delayed to generate pos/neg edge in master mode.
    +              30
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          RX_CLKM_CONF
    +          I2S RX clock configure register
    +          0x30
    +          0x20
    +          0x00000002
    +          
    +            
    +              RX_CLKM_DIV_NUM
    +              Integral I2S clock divider value
    +              0
    +              8
    +              read-write
    +            
    +            
    +              RX_CLK_ACTIVE
    +              I2S Rx module clock enable signal.
    +              26
    +              1
    +              read-write
    +            
    +            
    +              RX_CLK_SEL
    +              Select I2S Rx module source clock. 0: no clock. 1: APLL. 2: CLK160. 3: I2S_MCLK_in.
    +              27
    +              2
    +              read-write
    +            
    +            
    +              MCLK_SEL
    +              0: UseI2S Tx module clock as I2S_MCLK_OUT.  1: UseI2S Rx module clock as I2S_MCLK_OUT.
    +              29
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          TX_CLKM_CONF
    +          I2S TX clock configure register
    +          0x34
    +          0x20
    +          0x00000002
    +          
    +            
    +              TX_CLKM_DIV_NUM
    +              Integral I2S TX clock divider value. f_I2S_CLK = f_I2S_CLK_S/(N+b/a). There will be (a-b) * n-div and b * (n+1)-div.  So the average combination will be:  for b <= a/2, z * [x * n-div + (n+1)-div] + y * n-div. For b > a/2, z * [n-div + x * (n+1)-div] + y * (n+1)-div.
    +              0
    +              8
    +              read-write
    +            
    +            
    +              TX_CLK_ACTIVE
    +              I2S Tx module clock enable signal.
    +              26
    +              1
    +              read-write
    +            
    +            
    +              TX_CLK_SEL
    +              Select I2S Tx module source clock. 0: XTAL clock. 1: APLL. 2: CLK160. 3: I2S_MCLK_in.
    +              27
    +              2
    +              read-write
    +            
    +            
    +              CLK_EN
    +              Set this bit to enable clk gate
    +              29
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          RX_CLKM_DIV_CONF
    +          I2S RX module clock divider configure register
    +          0x38
    +          0x20
    +          0x00000200
    +          
    +            
    +              RX_CLKM_DIV_Z
    +              For b <= a/2, the value of I2S_RX_CLKM_DIV_Z is b. For b > a/2, the value of I2S_RX_CLKM_DIV_Z is (a-b).
    +              0
    +              9
    +              read-write
    +            
    +            
    +              RX_CLKM_DIV_Y
    +              For b <= a/2, the value of I2S_RX_CLKM_DIV_Y is (a%b) . For b > a/2, the value of I2S_RX_CLKM_DIV_Y is (a%(a-b)).
    +              9
    +              9
    +              read-write
    +            
    +            
    +              RX_CLKM_DIV_X
    +              For b <= a/2, the value of I2S_RX_CLKM_DIV_X is (a/b) - 1. For b > a/2, the value of I2S_RX_CLKM_DIV_X is (a/(a-b)) - 1.
    +              18
    +              9
    +              read-write
    +            
    +            
    +              RX_CLKM_DIV_YN1
    +              For b <= a/2, the value of I2S_RX_CLKM_DIV_YN1 is 0 . For b > a/2, the value of I2S_RX_CLKM_DIV_YN1 is 1.
    +              27
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          TX_CLKM_DIV_CONF
    +          I2S TX module clock divider configure register
    +          0x3C
    +          0x20
    +          0x00000200
    +          
    +            
    +              TX_CLKM_DIV_Z
    +              For b <= a/2, the value of I2S_TX_CLKM_DIV_Z is b. For b > a/2, the value of I2S_TX_CLKM_DIV_Z is (a-b).
    +              0
    +              9
    +              read-write
    +            
    +            
    +              TX_CLKM_DIV_Y
    +              For b <= a/2, the value of I2S_TX_CLKM_DIV_Y is (a%b) . For b > a/2, the value of I2S_TX_CLKM_DIV_Y is (a%(a-b)).
    +              9
    +              9
    +              read-write
    +            
    +            
    +              TX_CLKM_DIV_X
    +              For b <= a/2, the value of I2S_TX_CLKM_DIV_X is (a/b) - 1. For b > a/2, the value of I2S_TX_CLKM_DIV_X is (a/(a-b)) - 1.
    +              18
    +              9
    +              read-write
    +            
    +            
    +              TX_CLKM_DIV_YN1
    +              For b <= a/2, the value of I2S_TX_CLKM_DIV_YN1 is 0 . For b > a/2, the value of I2S_TX_CLKM_DIV_YN1 is 1.
    +              27
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          TX_PCM2PDM_CONF
    +          I2S TX PCM2PDM configuration register
    +          0x40
    +          0x20
    +          0x004AA004
    +          
    +            
    +              TX_PDM_HP_BYPASS
    +              I2S TX PDM bypass hp filter or not. The option has been removed.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              TX_PDM_SINC_OSR2
    +              I2S TX PDM OSR2 value
    +              1
    +              4
    +              read-write
    +            
    +            
    +              TX_PDM_PRESCALE
    +              I2S TX PDM prescale for sigmadelta
    +              5
    +              8
    +              read-write
    +            
    +            
    +              TX_PDM_HP_IN_SHIFT
    +              I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4
    +              13
    +              2
    +              read-write
    +            
    +            
    +              TX_PDM_LP_IN_SHIFT
    +              I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4
    +              15
    +              2
    +              read-write
    +            
    +            
    +              TX_PDM_SINC_IN_SHIFT
    +              I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4
    +              17
    +              2
    +              read-write
    +            
    +            
    +              TX_PDM_SIGMADELTA_IN_SHIFT
    +              I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4
    +              19
    +              2
    +              read-write
    +            
    +            
    +              TX_PDM_SIGMADELTA_DITHER2
    +              I2S TX PDM sigmadelta dither2 value
    +              21
    +              1
    +              read-write
    +            
    +            
    +              TX_PDM_SIGMADELTA_DITHER
    +              I2S TX PDM sigmadelta dither value
    +              22
    +              1
    +              read-write
    +            
    +            
    +              TX_PDM_DAC_2OUT_EN
    +              I2S TX PDM dac mode enable
    +              23
    +              1
    +              read-write
    +            
    +            
    +              TX_PDM_DAC_MODE_EN
    +              I2S TX PDM dac 2channel enable
    +              24
    +              1
    +              read-write
    +            
    +            
    +              PCM2PDM_CONV_EN
    +              I2S TX PDM Converter enable
    +              25
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          TX_PCM2PDM_CONF1
    +          I2S TX PCM2PDM configuration register
    +          0x44
    +          0x20
    +          0x03F783C0
    +          
    +            
    +              TX_PDM_FP
    +              I2S TX PDM Fp
    +              0
    +              10
    +              read-write
    +            
    +            
    +              TX_PDM_FS
    +              I2S TX PDM Fs
    +              10
    +              10
    +              read-write
    +            
    +            
    +              TX_IIR_HP_MULT12_5
    +              The fourth parameter of PDM TX IIR_HP filter stage 2 is (504 + I2S_TX_IIR_HP_MULT12_5[2:0])
    +              20
    +              3
    +              read-write
    +            
    +            
    +              TX_IIR_HP_MULT12_0
    +              The fourth parameter of PDM TX IIR_HP filter stage 1 is (504 + I2S_TX_IIR_HP_MULT12_0[2:0])
    +              23
    +              3
    +              read-write
    +            
    +          
    +        
    +        
    +          RX_TDM_CTRL
    +          I2S TX TDM mode control register
    +          0x50
    +          0x20
    +          0x0000FFFF
    +          
    +            
    +              RX_TDM_PDM_CHAN0_EN
    +              1: Enable the valid data input of I2S RX TDM or PDM channel 0. 0:  Disable, just input 0 in this channel.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              RX_TDM_PDM_CHAN1_EN
    +              1: Enable the valid data input of I2S RX TDM or PDM channel 1. 0:  Disable, just input 0 in this channel.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              RX_TDM_PDM_CHAN2_EN
    +              1: Enable the valid data input of I2S RX TDM or PDM channel 2. 0:  Disable, just input 0 in this channel.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              RX_TDM_PDM_CHAN3_EN
    +              1: Enable the valid data input of I2S RX TDM or PDM channel 3. 0:  Disable, just input 0 in this channel.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              RX_TDM_PDM_CHAN4_EN
    +              1: Enable the valid data input of I2S RX TDM or PDM channel 4. 0:  Disable, just input 0 in this channel.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              RX_TDM_PDM_CHAN5_EN
    +              1: Enable the valid data input of I2S RX TDM or PDM channel 5. 0:  Disable, just input 0 in this channel.
    +              5
    +              1
    +              read-write
    +            
    +            
    +              RX_TDM_PDM_CHAN6_EN
    +              1: Enable the valid data input of I2S RX TDM or PDM channel 6. 0:  Disable, just input 0 in this channel.
    +              6
    +              1
    +              read-write
    +            
    +            
    +              RX_TDM_PDM_CHAN7_EN
    +              1: Enable the valid data input of I2S RX TDM or PDM channel 7. 0:  Disable, just input 0 in this channel.
    +              7
    +              1
    +              read-write
    +            
    +            
    +              RX_TDM_CHAN8_EN
    +              1: Enable the valid data input of I2S RX TDM channel 8. 0:  Disable, just input 0 in this channel.
    +              8
    +              1
    +              read-write
    +            
    +            
    +              RX_TDM_CHAN9_EN
    +              1: Enable the valid data input of I2S RX TDM channel 9. 0:  Disable, just input 0 in this channel.
    +              9
    +              1
    +              read-write
    +            
    +            
    +              RX_TDM_CHAN10_EN
    +              1: Enable the valid data input of I2S RX TDM channel 10. 0:  Disable, just input 0 in this channel.
    +              10
    +              1
    +              read-write
    +            
    +            
    +              RX_TDM_CHAN11_EN
    +              1: Enable the valid data input of I2S RX TDM channel 11. 0:  Disable, just input 0 in this channel.
    +              11
    +              1
    +              read-write
    +            
    +            
    +              RX_TDM_CHAN12_EN
    +              1: Enable the valid data input of I2S RX TDM channel 12. 0:  Disable, just input 0 in this channel.
    +              12
    +              1
    +              read-write
    +            
    +            
    +              RX_TDM_CHAN13_EN
    +              1: Enable the valid data input of I2S RX TDM channel 13. 0:  Disable, just input 0 in this channel.
    +              13
    +              1
    +              read-write
    +            
    +            
    +              RX_TDM_CHAN14_EN
    +              1: Enable the valid data input of I2S RX TDM channel 14. 0:  Disable, just input 0 in this channel.
    +              14
    +              1
    +              read-write
    +            
    +            
    +              RX_TDM_CHAN15_EN
    +              1: Enable the valid data input of I2S RX TDM channel 15. 0:  Disable, just input 0 in this channel.
    +              15
    +              1
    +              read-write
    +            
    +            
    +              RX_TDM_TOT_CHAN_NUM
    +              The total channel number of I2S TX TDM mode.
    +              16
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          TX_TDM_CTRL
    +          I2S TX TDM mode control register
    +          0x54
    +          0x20
    +          0x0000FFFF
    +          
    +            
    +              TX_TDM_CHAN0_EN
    +              1: Enable the valid data output of I2S TX TDM channel 0. 0:  Disable, just output 0 in this channel.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              TX_TDM_CHAN1_EN
    +              1: Enable the valid data output of I2S TX TDM channel 1. 0:  Disable, just output 0 in this channel.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              TX_TDM_CHAN2_EN
    +              1: Enable the valid data output of I2S TX TDM channel 2. 0:  Disable, just output 0 in this channel.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              TX_TDM_CHAN3_EN
    +              1: Enable the valid data output of I2S TX TDM channel 3. 0:  Disable, just output 0 in this channel.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              TX_TDM_CHAN4_EN
    +              1: Enable the valid data output of I2S TX TDM channel 4. 0:  Disable, just output 0 in this channel.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              TX_TDM_CHAN5_EN
    +              1: Enable the valid data output of I2S TX TDM channel 5. 0:  Disable, just output 0 in this channel.
    +              5
    +              1
    +              read-write
    +            
    +            
    +              TX_TDM_CHAN6_EN
    +              1: Enable the valid data output of I2S TX TDM channel 6. 0:  Disable, just output 0 in this channel.
    +              6
    +              1
    +              read-write
    +            
    +            
    +              TX_TDM_CHAN7_EN
    +              1: Enable the valid data output of I2S TX TDM channel 7. 0:  Disable, just output 0 in this channel.
    +              7
    +              1
    +              read-write
    +            
    +            
    +              TX_TDM_CHAN8_EN
    +              1: Enable the valid data output of I2S TX TDM channel 8. 0:  Disable, just output 0 in this channel.
    +              8
    +              1
    +              read-write
    +            
    +            
    +              TX_TDM_CHAN9_EN
    +              1: Enable the valid data output of I2S TX TDM channel 9. 0:  Disable, just output 0 in this channel.
    +              9
    +              1
    +              read-write
    +            
    +            
    +              TX_TDM_CHAN10_EN
    +              1: Enable the valid data output of I2S TX TDM channel 10. 0:  Disable, just output 0 in this channel.
    +              10
    +              1
    +              read-write
    +            
    +            
    +              TX_TDM_CHAN11_EN
    +              1: Enable the valid data output of I2S TX TDM channel 11. 0:  Disable, just output 0 in this channel.
    +              11
    +              1
    +              read-write
    +            
    +            
    +              TX_TDM_CHAN12_EN
    +              1: Enable the valid data output of I2S TX TDM channel 12. 0:  Disable, just output 0 in this channel.
    +              12
    +              1
    +              read-write
    +            
    +            
    +              TX_TDM_CHAN13_EN
    +              1: Enable the valid data output of I2S TX TDM channel 13. 0:  Disable, just output 0 in this channel.
    +              13
    +              1
    +              read-write
    +            
    +            
    +              TX_TDM_CHAN14_EN
    +              1: Enable the valid data output of I2S TX TDM channel 14. 0:  Disable, just output 0 in this channel.
    +              14
    +              1
    +              read-write
    +            
    +            
    +              TX_TDM_CHAN15_EN
    +              1: Enable the valid data output of I2S TX TDM channel 15. 0:  Disable, just output 0 in this channel.
    +              15
    +              1
    +              read-write
    +            
    +            
    +              TX_TDM_TOT_CHAN_NUM
    +              The total channel number of I2S TX TDM mode.
    +              16
    +              4
    +              read-write
    +            
    +            
    +              TX_TDM_SKIP_MSK_EN
    +              When DMA TX buffer stores the data of (REG_TX_TDM_TOT_CHAN_NUM + 1)  channels, and only the data of the enabled channels is sent, then this bit should be set. Clear it when all the data stored in DMA TX buffer is for enabled channels.
    +              20
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          RX_TIMING
    +          I2S RX timing control register
    +          0x58
    +          0x20
    +          
    +            
    +              RX_SD_IN_DM
    +              The delay mode of I2S Rx SD input signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.
    +              0
    +              2
    +              read-write
    +            
    +            
    +              RX_WS_OUT_DM
    +              The delay mode of I2S Rx WS output signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.
    +              16
    +              2
    +              read-write
    +            
    +            
    +              RX_BCK_OUT_DM
    +              The delay mode of I2S Rx BCK output signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.
    +              20
    +              2
    +              read-write
    +            
    +            
    +              RX_WS_IN_DM
    +              The delay mode of I2S Rx WS input signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.
    +              24
    +              2
    +              read-write
    +            
    +            
    +              RX_BCK_IN_DM
    +              The delay mode of I2S Rx BCK input signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.
    +              28
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          TX_TIMING
    +          I2S TX timing control register
    +          0x5C
    +          0x20
    +          
    +            
    +              TX_SD_OUT_DM
    +              The delay mode of I2S TX SD output signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.
    +              0
    +              2
    +              read-write
    +            
    +            
    +              TX_SD1_OUT_DM
    +              The delay mode of I2S TX SD1 output signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.
    +              4
    +              2
    +              read-write
    +            
    +            
    +              TX_WS_OUT_DM
    +              The delay mode of I2S TX WS output signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.
    +              16
    +              2
    +              read-write
    +            
    +            
    +              TX_BCK_OUT_DM
    +              The delay mode of I2S TX BCK output signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.
    +              20
    +              2
    +              read-write
    +            
    +            
    +              TX_WS_IN_DM
    +              The delay mode of I2S TX WS input signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.
    +              24
    +              2
    +              read-write
    +            
    +            
    +              TX_BCK_IN_DM
    +              The delay mode of I2S TX BCK input signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.
    +              28
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          LC_HUNG_CONF
    +          I2S HUNG configure register.
    +          0x60
    +          0x20
    +          0x00000810
    +          
    +            
    +              LC_FIFO_TIMEOUT
    +              the i2s_tx_hung_int interrupt or the i2s_rx_hung_int interrupt will be triggered when fifo hung counter is equal to this value
    +              0
    +              8
    +              read-write
    +            
    +            
    +              LC_FIFO_TIMEOUT_SHIFT
    +              The bits are used to scale tick counter threshold. The tick counter is reset when counter value >= 88000/2^i2s_lc_fifo_timeout_shift
    +              8
    +              3
    +              read-write
    +            
    +            
    +              LC_FIFO_TIMEOUT_ENA
    +              The enable bit for FIFO timeout
    +              11
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          RXEOF_NUM
    +          I2S RX data number control register.
    +          0x64
    +          0x20
    +          0x00000040
    +          
    +            
    +              RX_EOF_NUM
    +              The receive data bit length is (I2S_RX_BITS_MOD[4:0] + 1) * (REG_RX_EOF_NUM[11:0] + 1) . It will trigger in_suc_eof interrupt in the configured DMA RX channel.
    +              0
    +              12
    +              read-write
    +            
    +          
    +        
    +        
    +          CONF_SIGLE_DATA
    +          I2S signal data register
    +          0x68
    +          0x20
    +          
    +            
    +              SINGLE_DATA
    +              The configured constant channel data to be sent out.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          STATE
    +          I2S TX status register
    +          0x6C
    +          0x20
    +          0x00000001
    +          
    +            
    +              TX_IDLE
    +              1: i2s_tx is idle state. 0: i2s_tx is working.
    +              0
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          DATE
    +          Version control register
    +          0x80
    +          0x20
    +          0x02007220
    +          
    +            
    +              DATE
    +              I2S version control register
    +              0
    +              28
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      INTERRUPT_CORE0
    +      Interrupt Core
    +      INTERRUPT_CORE0
    +      0x600C2000
    +      
    +        0x0
    +        0x19C
    +        registers
    +      
    +      
    +        
    +          MAC_INTR_MAP
    +          mac intr map register
    +          0x0
    +          0x20
    +          
    +            
    +              MAC_INTR_MAP
    +              core0_mac_intr_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          MAC_NMI_MAP
    +          mac nmi_intr map register
    +          0x4
    +          0x20
    +          
    +            
    +              MAC_NMI_MAP
    +              reg_core0_mac_nmi_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          PWR_INTR_MAP
    +          pwr intr map register
    +          0x8
    +          0x20
    +          
    +            
    +              PWR_INTR_MAP
    +              reg_core0_pwr_intr_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          BB_INT_MAP
    +          bb intr map register
    +          0xC
    +          0x20
    +          
    +            
    +              BB_INT_MAP
    +              reg_core0_bb_int_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          BT_MAC_INT_MAP
    +          bt intr map register
    +          0x10
    +          0x20
    +          
    +            
    +              BT_MAC_INT_MAP
    +              reg_core0_bt_mac_int_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          BT_BB_INT_MAP
    +          bb_bt intr map register
    +          0x14
    +          0x20
    +          
    +            
    +              BT_BB_INT_MAP
    +              reg_core0_bt_bb_int_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          BT_BB_NMI_MAP
    +          bb_bt_nmi intr map register
    +          0x18
    +          0x20
    +          
    +            
    +              BT_BB_NMI_MAP
    +              reg_core0_bt_bb_nmi_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          RWBT_IRQ_MAP
    +          rwbt intr map register
    +          0x1C
    +          0x20
    +          
    +            
    +              RWBT_IRQ_MAP
    +              reg_core0_rwbt_irq_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          RWBLE_IRQ_MAP
    +          rwble intr map register
    +          0x20
    +          0x20
    +          
    +            
    +              RWBLE_IRQ_MAP
    +              reg_core0_rwble_irq_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          RWBT_NMI_MAP
    +          rwbt_nmi intr map register
    +          0x24
    +          0x20
    +          
    +            
    +              RWBT_NMI_MAP
    +              reg_core0_rwbt_nmi_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          RWBLE_NMI_MAP
    +          rwble_nmi intr map register
    +          0x28
    +          0x20
    +          
    +            
    +              RWBLE_NMI_MAP
    +              reg_core0_rwble_nmi_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          I2C_MST_INT_MAP
    +          i2c intr map register
    +          0x2C
    +          0x20
    +          
    +            
    +              I2C_MST_INT_MAP
    +              reg_core0_i2c_mst_int_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          SLC0_INTR_MAP
    +          slc0 intr map register
    +          0x30
    +          0x20
    +          
    +            
    +              SLC0_INTR_MAP
    +              reg_core0_slc0_intr_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          SLC1_INTR_MAP
    +          slc1 intr map register
    +          0x34
    +          0x20
    +          
    +            
    +              SLC1_INTR_MAP
    +              reg_core0_slc1_intr_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          APB_CTRL_INTR_MAP
    +          apb_ctrl intr map register
    +          0x38
    +          0x20
    +          
    +            
    +              APB_CTRL_INTR_MAP
    +              reg_core0_apb_ctrl_intr_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          UHCI0_INTR_MAP
    +          uchi0 intr map register
    +          0x3C
    +          0x20
    +          
    +            
    +              UHCI0_INTR_MAP
    +              reg_core0_uhci0_intr_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          GPIO_INTERRUPT_PRO_MAP
    +          gpio intr map register
    +          0x40
    +          0x20
    +          
    +            
    +              GPIO_INTERRUPT_PRO_MAP
    +              reg_core0_gpio_interrupt_pro_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          GPIO_INTERRUPT_PRO_NMI_MAP
    +          gpio_pro intr map register
    +          0x44
    +          0x20
    +          
    +            
    +              GPIO_INTERRUPT_PRO_NMI_MAP
    +              reg_core0_gpio_interrupt_pro_nmi_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          SPI_INTR_1_MAP
    +          gpio_pro_nmi intr map register
    +          0x48
    +          0x20
    +          
    +            
    +              SPI_INTR_1_MAP
    +              reg_core0_spi_intr_1_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          SPI_INTR_2_MAP
    +          spi1 intr map register
    +          0x4C
    +          0x20
    +          
    +            
    +              SPI_INTR_2_MAP
    +              reg_core0_spi_intr_2_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          I2S1_INT_MAP
    +          spi2 intr map register
    +          0x50
    +          0x20
    +          
    +            
    +              I2S1_INT_MAP
    +              reg_core0_i2s1_int_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          UART_INTR_MAP
    +          i2s1 intr map register
    +          0x54
    +          0x20
    +          
    +            
    +              UART_INTR_MAP
    +              reg_core0_uart_intr_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          UART1_INTR_MAP
    +          uart1 intr map register
    +          0x58
    +          0x20
    +          
    +            
    +              UART1_INTR_MAP
    +              reg_core0_uart1_intr_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          LEDC_INT_MAP
    +          ledc intr map register
    +          0x5C
    +          0x20
    +          
    +            
    +              LEDC_INT_MAP
    +              reg_core0_ledc_int_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          EFUSE_INT_MAP
    +          efuse intr map register
    +          0x60
    +          0x20
    +          
    +            
    +              EFUSE_INT_MAP
    +              reg_core0_efuse_int_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          CAN_INT_MAP
    +          can intr map register
    +          0x64
    +          0x20
    +          
    +            
    +              CAN_INT_MAP
    +              reg_core0_can_int_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          USB_INTR_MAP
    +          usb intr map register
    +          0x68
    +          0x20
    +          
    +            
    +              USB_INTR_MAP
    +              reg_core0_usb_intr_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          RTC_CORE_INTR_MAP
    +          rtc intr map register
    +          0x6C
    +          0x20
    +          
    +            
    +              RTC_CORE_INTR_MAP
    +              reg_core0_rtc_core_intr_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          RMT_INTR_MAP
    +          rmt intr map register
    +          0x70
    +          0x20
    +          
    +            
    +              RMT_INTR_MAP
    +              reg_core0_rmt_intr_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          I2C_EXT0_INTR_MAP
    +          i2c intr map register
    +          0x74
    +          0x20
    +          
    +            
    +              I2C_EXT0_INTR_MAP
    +              reg_core0_i2c_ext0_intr_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          TIMER_INT1_MAP
    +          timer1 intr map register
    +          0x78
    +          0x20
    +          
    +            
    +              TIMER_INT1_MAP
    +              reg_core0_timer_int1_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          TIMER_INT2_MAP
    +          timer2 intr map register
    +          0x7C
    +          0x20
    +          
    +            
    +              TIMER_INT2_MAP
    +              reg_core0_timer_int2_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          TG_T0_INT_MAP
    +          tg to intr map register
    +          0x80
    +          0x20
    +          
    +            
    +              TG_T0_INT_MAP
    +              reg_core0_tg_t0_int_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          TG_WDT_INT_MAP
    +          tg wdt intr map register
    +          0x84
    +          0x20
    +          
    +            
    +              TG_WDT_INT_MAP
    +              reg_core0_tg_wdt_int_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          TG1_T0_INT_MAP
    +          tg1 to intr map register
    +          0x88
    +          0x20
    +          
    +            
    +              TG1_T0_INT_MAP
    +              reg_core0_tg1_t0_int_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          TG1_WDT_INT_MAP
    +          tg1 wdt intr map register
    +          0x8C
    +          0x20
    +          
    +            
    +              TG1_WDT_INT_MAP
    +              reg_core0_tg1_wdt_int_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          CACHE_IA_INT_MAP
    +          cache ia intr map register
    +          0x90
    +          0x20
    +          
    +            
    +              CACHE_IA_INT_MAP
    +              reg_core0_cache_ia_int_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          SYSTIMER_TARGET0_INT_MAP
    +          systimer intr map register
    +          0x94
    +          0x20
    +          
    +            
    +              SYSTIMER_TARGET0_INT_MAP
    +              reg_core0_systimer_target0_int_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          SYSTIMER_TARGET1_INT_MAP
    +          systimer target1 intr map register
    +          0x98
    +          0x20
    +          
    +            
    +              SYSTIMER_TARGET1_INT_MAP
    +              reg_core0_systimer_target1_int_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          SYSTIMER_TARGET2_INT_MAP
    +          systimer target2 intr map register
    +          0x9C
    +          0x20
    +          
    +            
    +              SYSTIMER_TARGET2_INT_MAP
    +              reg_core0_systimer_target2_int_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          SPI_MEM_REJECT_INTR_MAP
    +          spi mem reject intr map register
    +          0xA0
    +          0x20
    +          
    +            
    +              SPI_MEM_REJECT_INTR_MAP
    +              reg_core0_spi_mem_reject_intr_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          ICACHE_PRELOAD_INT_MAP
    +          icache perload intr map register
    +          0xA4
    +          0x20
    +          
    +            
    +              ICACHE_PRELOAD_INT_MAP
    +              reg_core0_icache_preload_int_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          ICACHE_SYNC_INT_MAP
    +          icache sync intr map register
    +          0xA8
    +          0x20
    +          
    +            
    +              ICACHE_SYNC_INT_MAP
    +              reg_core0_icache_sync_int_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          APB_ADC_INT_MAP
    +          adc intr map register
    +          0xAC
    +          0x20
    +          
    +            
    +              APB_ADC_INT_MAP
    +              reg_core0_apb_adc_int_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_CH0_INT_MAP
    +          dma ch0 intr map register
    +          0xB0
    +          0x20
    +          
    +            
    +              DMA_CH0_INT_MAP
    +              reg_core0_dma_ch0_int_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_CH1_INT_MAP
    +          dma ch1 intr map register
    +          0xB4
    +          0x20
    +          
    +            
    +              DMA_CH1_INT_MAP
    +              reg_core0_dma_ch1_int_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_CH2_INT_MAP
    +          dma ch2 intr map register
    +          0xB8
    +          0x20
    +          
    +            
    +              DMA_CH2_INT_MAP
    +              reg_core0_dma_ch2_int_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          RSA_INT_MAP
    +          rsa intr map register
    +          0xBC
    +          0x20
    +          
    +            
    +              RSA_INT_MAP
    +              reg_core0_rsa_int_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          AES_INT_MAP
    +          aes intr map register
    +          0xC0
    +          0x20
    +          
    +            
    +              AES_INT_MAP
    +              reg_core0_aes_int_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          SHA_INT_MAP
    +          sha intr map register
    +          0xC4
    +          0x20
    +          
    +            
    +              SHA_INT_MAP
    +              reg_core0_sha_int_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INTR_FROM_CPU_0_MAP
    +          cpu from cpu 0 intr map register
    +          0xC8
    +          0x20
    +          
    +            
    +              CPU_INTR_FROM_CPU_0_MAP
    +              reg_core0_cpu_intr_from_cpu_0_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INTR_FROM_CPU_1_MAP
    +          cpu from cpu 0 intr map register
    +          0xCC
    +          0x20
    +          
    +            
    +              CPU_INTR_FROM_CPU_1_MAP
    +              reg_core0_cpu_intr_from_cpu_1_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INTR_FROM_CPU_2_MAP
    +          cpu from cpu 1 intr map register
    +          0xD0
    +          0x20
    +          
    +            
    +              CPU_INTR_FROM_CPU_2_MAP
    +              reg_core0_cpu_intr_from_cpu_2_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INTR_FROM_CPU_3_MAP
    +          cpu from cpu 3 intr map register
    +          0xD4
    +          0x20
    +          
    +            
    +              CPU_INTR_FROM_CPU_3_MAP
    +              reg_core0_cpu_intr_from_cpu_3_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          ASSIST_DEBUG_INTR_MAP
    +          assist debug intr map register
    +          0xD8
    +          0x20
    +          
    +            
    +              ASSIST_DEBUG_INTR_MAP
    +              reg_core0_assist_debug_intr_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR_MAP
    +          dma pms violatile intr map register
    +          0xDC
    +          0x20
    +          
    +            
    +              DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR_MAP
    +              reg_core0_dma_apbperi_pms_monitor_violate_intr_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP
    +          iram0 pms violatile intr map register
    +          0xE0
    +          0x20
    +          
    +            
    +              CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP
    +              reg_core0_core_0_iram0_pms_monitor_violate_intr_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP
    +          mac intr map register
    +          0xE4
    +          0x20
    +          
    +            
    +              CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP
    +              reg_core0_core_0_dram0_pms_monitor_violate_intr_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR_MAP
    +          mac intr map register
    +          0xE8
    +          0x20
    +          
    +            
    +              CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR_MAP
    +              reg_core0_core_0_pif_pms_monitor_violate_intr_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP
    +          mac intr map register
    +          0xEC
    +          0x20
    +          
    +            
    +              CORE_0_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP
    +              reg_core0_core_0_pif_pms_monitor_violate_size_intr_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          BACKUP_PMS_VIOLATE_INTR_MAP
    +          mac intr map register
    +          0xF0
    +          0x20
    +          
    +            
    +              BACKUP_PMS_VIOLATE_INTR_MAP
    +              reg_core0_backup_pms_violate_intr_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          CACHE_CORE0_ACS_INT_MAP
    +          mac intr map register
    +          0xF4
    +          0x20
    +          
    +            
    +              CACHE_CORE0_ACS_INT_MAP
    +              reg_core0_cache_core0_acs_int_map
    +              0
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          INTR_STATUS_REG_0
    +          mac intr map register
    +          0xF8
    +          0x20
    +          
    +            
    +              INTR_STATUS_0
    +              reg_core0_intr_status_0
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          INTR_STATUS_REG_1
    +          mac intr map register
    +          0xFC
    +          0x20
    +          
    +            
    +              INTR_STATUS_1
    +              reg_core0_intr_status_1
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          CLOCK_GATE
    +          mac intr map register
    +          0x100
    +          0x20
    +          0x00000001
    +          
    +            
    +              REG_CLK_EN
    +              reg_core0_reg_clk_en
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_ENABLE
    +          mac intr map register
    +          0x104
    +          0x20
    +          
    +            
    +              CPU_INT_ENABLE
    +              reg_core0_cpu_int_enable
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_TYPE
    +          mac intr map register
    +          0x108
    +          0x20
    +          
    +            
    +              CPU_INT_TYPE
    +              reg_core0_cpu_int_type
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_CLEAR
    +          mac intr map register
    +          0x10C
    +          0x20
    +          
    +            
    +              CPU_INT_CLEAR
    +              reg_core0_cpu_int_clear
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_EIP_STATUS
    +          mac intr map register
    +          0x110
    +          0x20
    +          
    +            
    +              CPU_INT_EIP_STATUS
    +              reg_core0_cpu_int_eip_status
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_0
    +          mac intr map register
    +          0x114
    +          0x20
    +          
    +            
    +              CPU_PRI_0_MAP
    +              reg_core0_cpu_pri_0_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_1
    +          mac intr map register
    +          0x118
    +          0x20
    +          
    +            
    +              CPU_PRI_1_MAP
    +              reg_core0_cpu_pri_1_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_2
    +          mac intr map register
    +          0x11C
    +          0x20
    +          
    +            
    +              CPU_PRI_2_MAP
    +              reg_core0_cpu_pri_2_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_3
    +          mac intr map register
    +          0x120
    +          0x20
    +          
    +            
    +              CPU_PRI_3_MAP
    +              reg_core0_cpu_pri_3_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_4
    +          mac intr map register
    +          0x124
    +          0x20
    +          
    +            
    +              CPU_PRI_4_MAP
    +              reg_core0_cpu_pri_4_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_5
    +          mac intr map register
    +          0x128
    +          0x20
    +          
    +            
    +              CPU_PRI_5_MAP
    +              reg_core0_cpu_pri_5_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_6
    +          mac intr map register
    +          0x12C
    +          0x20
    +          
    +            
    +              CPU_PRI_6_MAP
    +              reg_core0_cpu_pri_6_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_7
    +          mac intr map register
    +          0x130
    +          0x20
    +          
    +            
    +              CPU_PRI_7_MAP
    +              reg_core0_cpu_pri_7_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_8
    +          mac intr map register
    +          0x134
    +          0x20
    +          
    +            
    +              CPU_PRI_8_MAP
    +              reg_core0_cpu_pri_8_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_9
    +          mac intr map register
    +          0x138
    +          0x20
    +          
    +            
    +              CPU_PRI_9_MAP
    +              reg_core0_cpu_pri_9_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_10
    +          mac intr map register
    +          0x13C
    +          0x20
    +          
    +            
    +              CPU_PRI_10_MAP
    +              reg_core0_cpu_pri_10_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_11
    +          mac intr map register
    +          0x140
    +          0x20
    +          
    +            
    +              CPU_PRI_11_MAP
    +              reg_core0_cpu_pri_11_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_12
    +          mac intr map register
    +          0x144
    +          0x20
    +          
    +            
    +              CPU_PRI_12_MAP
    +              reg_core0_cpu_pri_12_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_13
    +          mac intr map register
    +          0x148
    +          0x20
    +          
    +            
    +              CPU_PRI_13_MAP
    +              reg_core0_cpu_pri_13_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_14
    +          mac intr map register
    +          0x14C
    +          0x20
    +          
    +            
    +              CPU_PRI_14_MAP
    +              reg_core0_cpu_pri_14_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_15
    +          mac intr map register
    +          0x150
    +          0x20
    +          
    +            
    +              CPU_PRI_15_MAP
    +              reg_core0_cpu_pri_15_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_16
    +          mac intr map register
    +          0x154
    +          0x20
    +          
    +            
    +              CPU_PRI_16_MAP
    +              reg_core0_cpu_pri_16_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_17
    +          mac intr map register
    +          0x158
    +          0x20
    +          
    +            
    +              CPU_PRI_17_MAP
    +              reg_core0_cpu_pri_17_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_18
    +          mac intr map register
    +          0x15C
    +          0x20
    +          
    +            
    +              CPU_PRI_18_MAP
    +              reg_core0_cpu_pri_18_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_19
    +          mac intr map register
    +          0x160
    +          0x20
    +          
    +            
    +              CPU_PRI_19_MAP
    +              reg_core0_cpu_pri_19_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_20
    +          mac intr map register
    +          0x164
    +          0x20
    +          
    +            
    +              CPU_PRI_20_MAP
    +              reg_core0_cpu_pri_20_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_21
    +          mac intr map register
    +          0x168
    +          0x20
    +          
    +            
    +              CPU_PRI_21_MAP
    +              reg_core0_cpu_pri_21_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_22
    +          mac intr map register
    +          0x16C
    +          0x20
    +          
    +            
    +              CPU_PRI_22_MAP
    +              reg_core0_cpu_pri_22_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_23
    +          mac intr map register
    +          0x170
    +          0x20
    +          
    +            
    +              CPU_PRI_23_MAP
    +              reg_core0_cpu_pri_23_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_24
    +          mac intr map register
    +          0x174
    +          0x20
    +          
    +            
    +              CPU_PRI_24_MAP
    +              reg_core0_cpu_pri_24_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_25
    +          mac intr map register
    +          0x178
    +          0x20
    +          
    +            
    +              CPU_PRI_25_MAP
    +              reg_core0_cpu_pri_25_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_26
    +          mac intr map register
    +          0x17C
    +          0x20
    +          
    +            
    +              CPU_PRI_26_MAP
    +              reg_core0_cpu_pri_26_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_27
    +          mac intr map register
    +          0x180
    +          0x20
    +          
    +            
    +              CPU_PRI_27_MAP
    +              reg_core0_cpu_pri_27_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_28
    +          mac intr map register
    +          0x184
    +          0x20
    +          
    +            
    +              CPU_PRI_28_MAP
    +              reg_core0_cpu_pri_28_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_29
    +          mac intr map register
    +          0x188
    +          0x20
    +          
    +            
    +              CPU_PRI_29_MAP
    +              reg_core0_cpu_pri_29_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_30
    +          mac intr map register
    +          0x18C
    +          0x20
    +          
    +            
    +              CPU_PRI_30_MAP
    +              reg_core0_cpu_pri_30_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_PRI_31
    +          mac intr map register
    +          0x190
    +          0x20
    +          
    +            
    +              CPU_PRI_31_MAP
    +              reg_core0_cpu_pri_31_map
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INT_THRESH
    +          mac intr map register
    +          0x194
    +          0x20
    +          
    +            
    +              CPU_INT_THRESH
    +              reg_core0_cpu_int_thresh
    +              0
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          INTERRUPT_REG_DATE
    +          mac intr map register
    +          0x7FC
    +          0x20
    +          0x02007210
    +          
    +            
    +              INTERRUPT_REG_DATE
    +              reg_core0_interrupt_reg_date
    +              0
    +              28
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      IO_MUX
    +      Input/Output Multiplexer
    +      IO_MUX
    +      0x60009000
    +      
    +        0x0
    +        0x60
    +        registers
    +      
    +      
    +        
    +          PIN_CTRL
    +          Clock Output Configuration Register
    +          0x0
    +          0x20
    +          0x000007FF
    +          
    +            
    +              CLK_OUT1
    +              If you want to output clock for I2S to CLK_OUT_out1, set this register to 0x0. CLK_OUT_out1 can be found in peripheral output signals.
    +              0
    +              4
    +              read-write
    +            
    +            
    +              CLK_OUT2
    +              If you want to output clock for I2S to CLK_OUT_out2, set this register to 0x0. CLK_OUT_out2 can be found in peripheral output signals.
    +              4
    +              4
    +              read-write
    +            
    +            
    +              CLK_OUT3
    +              If you want to output clock for I2S to CLK_OUT_out3, set this register to 0x0. CLK_OUT_out3 can be found in peripheral output signals.
    +              8
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          22
    +          0x4
    +          GPIO%s
    +          IO MUX Configure Register for pad XTAL_32K_P
    +          0x4
    +          0x20
    +          0x00000B00
    +          
    +            
    +              MCU_OE
    +              Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              SLP_SEL
    +              Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              MCU_WPD
    +              Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0: internal pull-down disabled.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              MCU_WPU
    +              Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0: internal pull-up disabled.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              MCU_IE
    +              Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              FUN_WPD
    +              Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal pull-down disabled.
    +              7
    +              1
    +              read-write
    +            
    +            
    +              FUN_WPU
    +              Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up disabled.
    +              8
    +              1
    +              read-write
    +            
    +            
    +              FUN_IE
    +              Input enable of the pad. 1: input enabled; 0: input disabled.
    +              9
    +              1
    +              read-write
    +            
    +            
    +              FUN_DRV
    +              Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    +              10
    +              2
    +              read-write
    +            
    +            
    +              MCU_SEL
    +              Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function 2; etc.
    +              12
    +              3
    +              read-write
    +            
    +            
    +              FILTER_EN
    +              Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    +              15
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DATE
    +          IO MUX Version Control Register
    +          0xFC
    +          0x20
    +          0x02006050
    +          
    +            
    +              REG_DATE
    +              Version control register
    +              0
    +              28
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      LEDC
    +      LED Control PWM (Pulse Width Modulation)
    +      LEDC
    +      0x60019000
    +      
    +        0x0
    +        0xB0
    +        registers
    +      
    +      
    +        LEDC
    +        23
    +      
    +      
    +        
    +          LSCH0_CONF0
    +          LEDC_LSCH0_CONF0.
    +          0x0
    +          0x20
    +          
    +            
    +              TIMER_SEL_LSCH0
    +              reg_timer_sel_lsch0.
    +              0
    +              2
    +              read-write
    +            
    +            
    +              SIG_OUT_EN_LSCH0
    +              reg_sig_out_en_lsch0.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              IDLE_LV_LSCH0
    +              reg_idle_lv_lsch0.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              PARA_UP_LSCH0
    +              reg_para_up_lsch0.
    +              4
    +              1
    +              write-only
    +            
    +            
    +              OVF_NUM_LSCH0
    +              reg_ovf_num_lsch0.
    +              5
    +              10
    +              read-write
    +            
    +            
    +              OVF_CNT_EN_LSCH0
    +              reg_ovf_cnt_en_lsch0.
    +              15
    +              1
    +              read-write
    +            
    +            
    +              OVF_CNT_RESET_LSCH0
    +              reg_ovf_cnt_reset_lsch0.
    +              16
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          LSCH0_HPOINT
    +          LEDC_LSCH0_HPOINT.
    +          0x4
    +          0x20
    +          
    +            
    +              HPOINT_LSCH0
    +              reg_hpoint_lsch0.
    +              0
    +              14
    +              read-write
    +            
    +          
    +        
    +        
    +          LSCH0_DUTY
    +          LEDC_LSCH0_DUTY.
    +          0x8
    +          0x20
    +          
    +            
    +              DUTY_LSCH0
    +              reg_duty_lsch0.
    +              0
    +              19
    +              read-write
    +            
    +          
    +        
    +        
    +          LSCH0_CONF1
    +          LEDC_LSCH0_CONF1.
    +          0xC
    +          0x20
    +          0x40000000
    +          
    +            
    +              DUTY_SCALE_LSCH0
    +              reg_duty_scale_lsch0.
    +              0
    +              10
    +              read-write
    +            
    +            
    +              DUTY_CYCLE_LSCH0
    +              reg_duty_cycle_lsch0.
    +              10
    +              10
    +              read-write
    +            
    +            
    +              DUTY_NUM_LSCH0
    +              reg_duty_num_lsch0.
    +              20
    +              10
    +              read-write
    +            
    +            
    +              DUTY_INC_LSCH0
    +              reg_duty_inc_lsch0.
    +              30
    +              1
    +              read-write
    +            
    +            
    +              DUTY_START_LSCH0
    +              reg_duty_start_lsch0.
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          LSCH0_DUTY_R
    +          LEDC_LSCH0_DUTY_R.
    +          0x10
    +          0x20
    +          
    +            
    +              DUTY_LSCH0_R
    +              reg_duty_lsch0_r.
    +              0
    +              19
    +              read-only
    +            
    +          
    +        
    +        
    +          LSCH1_CONF0
    +          LEDC_LSCH1_CONF0.
    +          0x14
    +          0x20
    +          
    +            
    +              TIMER_SEL_LSCH1
    +              reg_timer_sel_lsch1.
    +              0
    +              2
    +              read-write
    +            
    +            
    +              SIG_OUT_EN_LSCH1
    +              reg_sig_out_en_lsch1.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              IDLE_LV_LSCH1
    +              reg_idle_lv_lsch1.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              PARA_UP_LSCH1
    +              reg_para_up_lsch1.
    +              4
    +              1
    +              write-only
    +            
    +            
    +              OVF_NUM_LSCH1
    +              reg_ovf_num_lsch1.
    +              5
    +              10
    +              read-write
    +            
    +            
    +              OVF_CNT_EN_LSCH1
    +              reg_ovf_cnt_en_lsch1.
    +              15
    +              1
    +              read-write
    +            
    +            
    +              OVF_CNT_RESET_LSCH1
    +              reg_ovf_cnt_reset_lsch1.
    +              16
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          LSCH1_HPOINT
    +          LEDC_LSCH1_HPOINT.
    +          0x18
    +          0x20
    +          
    +            
    +              HPOINT_LSCH1
    +              reg_hpoint_lsch1.
    +              0
    +              14
    +              read-write
    +            
    +          
    +        
    +        
    +          LSCH1_DUTY
    +          LEDC_LSCH1_DUTY.
    +          0x1C
    +          0x20
    +          
    +            
    +              DUTY_LSCH1
    +              reg_duty_lsch1.
    +              0
    +              19
    +              read-write
    +            
    +          
    +        
    +        
    +          LSCH1_CONF1
    +          LEDC_LSCH1_CONF1.
    +          0x20
    +          0x20
    +          0x40000000
    +          
    +            
    +              DUTY_SCALE_LSCH1
    +              reg_duty_scale_lsch1.
    +              0
    +              10
    +              read-write
    +            
    +            
    +              DUTY_CYCLE_LSCH1
    +              reg_duty_cycle_lsch1.
    +              10
    +              10
    +              read-write
    +            
    +            
    +              DUTY_NUM_LSCH1
    +              reg_duty_num_lsch1.
    +              20
    +              10
    +              read-write
    +            
    +            
    +              DUTY_INC_LSCH1
    +              reg_duty_inc_lsch1.
    +              30
    +              1
    +              read-write
    +            
    +            
    +              DUTY_START_LSCH1
    +              reg_duty_start_lsch1.
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          LSCH1_DUTY_R
    +          LEDC_LSCH1_DUTY_R.
    +          0x24
    +          0x20
    +          
    +            
    +              DUTY_LSCH1_R
    +              reg_duty_lsch1_r.
    +              0
    +              19
    +              read-only
    +            
    +          
    +        
    +        
    +          LSCH2_CONF0
    +          LEDC_LSCH2_CONF0.
    +          0x28
    +          0x20
    +          
    +            
    +              TIMER_SEL_LSCH2
    +              reg_timer_sel_lsch2.
    +              0
    +              2
    +              read-write
    +            
    +            
    +              SIG_OUT_EN_LSCH2
    +              reg_sig_out_en_lsch2.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              IDLE_LV_LSCH2
    +              reg_idle_lv_lsch2.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              PARA_UP_LSCH2
    +              reg_para_up_lsch2.
    +              4
    +              1
    +              write-only
    +            
    +            
    +              OVF_NUM_LSCH2
    +              reg_ovf_num_lsch2.
    +              5
    +              10
    +              read-write
    +            
    +            
    +              OVF_CNT_EN_LSCH2
    +              reg_ovf_cnt_en_lsch2.
    +              15
    +              1
    +              read-write
    +            
    +            
    +              OVF_CNT_RESET_LSCH2
    +              reg_ovf_cnt_reset_lsch2.
    +              16
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          LSCH2_HPOINT
    +          LEDC_LSCH2_HPOINT.
    +          0x2C
    +          0x20
    +          
    +            
    +              HPOINT_LSCH2
    +              reg_hpoint_lsch2.
    +              0
    +              14
    +              read-write
    +            
    +          
    +        
    +        
    +          LSCH2_DUTY
    +          LEDC_LSCH2_DUTY.
    +          0x30
    +          0x20
    +          
    +            
    +              DUTY_LSCH2
    +              reg_duty_lsch2.
    +              0
    +              19
    +              read-write
    +            
    +          
    +        
    +        
    +          LSCH2_CONF1
    +          LEDC_LSCH2_CONF1.
    +          0x34
    +          0x20
    +          0x40000000
    +          
    +            
    +              DUTY_SCALE_LSCH2
    +              reg_duty_scale_lsch2.
    +              0
    +              10
    +              read-write
    +            
    +            
    +              DUTY_CYCLE_LSCH2
    +              reg_duty_cycle_lsch2.
    +              10
    +              10
    +              read-write
    +            
    +            
    +              DUTY_NUM_LSCH2
    +              reg_duty_num_lsch2.
    +              20
    +              10
    +              read-write
    +            
    +            
    +              DUTY_INC_LSCH2
    +              reg_duty_inc_lsch2.
    +              30
    +              1
    +              read-write
    +            
    +            
    +              DUTY_START_LSCH2
    +              reg_duty_start_lsch2.
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          LSCH2_DUTY_R
    +          LEDC_LSCH2_DUTY_R.
    +          0x38
    +          0x20
    +          
    +            
    +              DUTY_LSCH2_R
    +              reg_duty_lsch2_r.
    +              0
    +              19
    +              read-only
    +            
    +          
    +        
    +        
    +          LSCH3_CONF0
    +          LEDC_LSCH3_CONF0.
    +          0x3C
    +          0x20
    +          
    +            
    +              TIMER_SEL_LSCH3
    +              reg_timer_sel_lsch3.
    +              0
    +              2
    +              read-write
    +            
    +            
    +              SIG_OUT_EN_LSCH3
    +              reg_sig_out_en_lsch3.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              IDLE_LV_LSCH3
    +              reg_idle_lv_lsch3.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              PARA_UP_LSCH3
    +              reg_para_up_lsch3.
    +              4
    +              1
    +              write-only
    +            
    +            
    +              OVF_NUM_LSCH3
    +              reg_ovf_num_lsch3.
    +              5
    +              10
    +              read-write
    +            
    +            
    +              OVF_CNT_EN_LSCH3
    +              reg_ovf_cnt_en_lsch3.
    +              15
    +              1
    +              read-write
    +            
    +            
    +              OVF_CNT_RESET_LSCH3
    +              reg_ovf_cnt_reset_lsch3.
    +              16
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          LSCH3_HPOINT
    +          LEDC_LSCH3_HPOINT.
    +          0x40
    +          0x20
    +          
    +            
    +              HPOINT_LSCH3
    +              reg_hpoint_lsch3.
    +              0
    +              14
    +              read-write
    +            
    +          
    +        
    +        
    +          LSCH3_DUTY
    +          LEDC_LSCH3_DUTY.
    +          0x44
    +          0x20
    +          
    +            
    +              DUTY_LSCH3
    +              reg_duty_lsch3.
    +              0
    +              19
    +              read-write
    +            
    +          
    +        
    +        
    +          LSCH3_CONF1
    +          LEDC_LSCH3_CONF1.
    +          0x48
    +          0x20
    +          0x40000000
    +          
    +            
    +              DUTY_SCALE_LSCH3
    +              reg_duty_scale_lsch3.
    +              0
    +              10
    +              read-write
    +            
    +            
    +              DUTY_CYCLE_LSCH3
    +              reg_duty_cycle_lsch3.
    +              10
    +              10
    +              read-write
    +            
    +            
    +              DUTY_NUM_LSCH3
    +              reg_duty_num_lsch3.
    +              20
    +              10
    +              read-write
    +            
    +            
    +              DUTY_INC_LSCH3
    +              reg_duty_inc_lsch3.
    +              30
    +              1
    +              read-write
    +            
    +            
    +              DUTY_START_LSCH3
    +              reg_duty_start_lsch3.
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          LSCH3_DUTY_R
    +          LEDC_LSCH3_DUTY_R.
    +          0x4C
    +          0x20
    +          
    +            
    +              DUTY_LSCH3_R
    +              reg_duty_lsch3_r.
    +              0
    +              19
    +              read-only
    +            
    +          
    +        
    +        
    +          LSCH4_CONF0
    +          LEDC_LSCH4_CONF0.
    +          0x50
    +          0x20
    +          
    +            
    +              TIMER_SEL_LSCH4
    +              reg_timer_sel_lsch4.
    +              0
    +              2
    +              read-write
    +            
    +            
    +              SIG_OUT_EN_LSCH4
    +              reg_sig_out_en_lsch4.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              IDLE_LV_LSCH4
    +              reg_idle_lv_lsch4.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              PARA_UP_LSCH4
    +              reg_para_up_lsch4.
    +              4
    +              1
    +              write-only
    +            
    +            
    +              OVF_NUM_LSCH4
    +              reg_ovf_num_lsch4.
    +              5
    +              10
    +              read-write
    +            
    +            
    +              OVF_CNT_EN_LSCH4
    +              reg_ovf_cnt_en_lsch4.
    +              15
    +              1
    +              read-write
    +            
    +            
    +              OVF_CNT_RESET_LSCH4
    +              reg_ovf_cnt_reset_lsch4.
    +              16
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          LSCH4_HPOINT
    +          LEDC_LSCH4_HPOINT.
    +          0x54
    +          0x20
    +          
    +            
    +              HPOINT_LSCH4
    +              reg_hpoint_lsch4.
    +              0
    +              14
    +              read-write
    +            
    +          
    +        
    +        
    +          LSCH4_DUTY
    +          LEDC_LSCH4_DUTY.
    +          0x58
    +          0x20
    +          
    +            
    +              DUTY_LSCH4
    +              reg_duty_lsch4.
    +              0
    +              19
    +              read-write
    +            
    +          
    +        
    +        
    +          LSCH4_CONF1
    +          LEDC_LSCH4_CONF1.
    +          0x5C
    +          0x20
    +          0x40000000
    +          
    +            
    +              DUTY_SCALE_LSCH4
    +              reg_duty_scale_lsch4.
    +              0
    +              10
    +              read-write
    +            
    +            
    +              DUTY_CYCLE_LSCH4
    +              reg_duty_cycle_lsch4.
    +              10
    +              10
    +              read-write
    +            
    +            
    +              DUTY_NUM_LSCH4
    +              reg_duty_num_lsch4.
    +              20
    +              10
    +              read-write
    +            
    +            
    +              DUTY_INC_LSCH4
    +              reg_duty_inc_lsch4.
    +              30
    +              1
    +              read-write
    +            
    +            
    +              DUTY_START_LSCH4
    +              reg_duty_start_lsch4.
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          LSCH4_DUTY_R
    +          LEDC_LSCH4_DUTY_R.
    +          0x60
    +          0x20
    +          
    +            
    +              DUTY_LSCH4_R
    +              reg_duty_lsch4_r.
    +              0
    +              19
    +              read-only
    +            
    +          
    +        
    +        
    +          LSCH5_CONF0
    +          LEDC_LSCH5_CONF0.
    +          0x64
    +          0x20
    +          
    +            
    +              TIMER_SEL_LSCH5
    +              reg_timer_sel_lsch5.
    +              0
    +              2
    +              read-write
    +            
    +            
    +              SIG_OUT_EN_LSCH5
    +              reg_sig_out_en_lsch5.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              IDLE_LV_LSCH5
    +              reg_idle_lv_lsch5.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              PARA_UP_LSCH5
    +              reg_para_up_lsch5.
    +              4
    +              1
    +              write-only
    +            
    +            
    +              OVF_NUM_LSCH5
    +              reg_ovf_num_lsch5.
    +              5
    +              10
    +              read-write
    +            
    +            
    +              OVF_CNT_EN_LSCH5
    +              reg_ovf_cnt_en_lsch5.
    +              15
    +              1
    +              read-write
    +            
    +            
    +              OVF_CNT_RESET_LSCH5
    +              reg_ovf_cnt_reset_lsch5.
    +              16
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          LSCH5_HPOINT
    +          LEDC_LSCH5_HPOINT.
    +          0x68
    +          0x20
    +          
    +            
    +              HPOINT_LSCH5
    +              reg_hpoint_lsch5.
    +              0
    +              14
    +              read-write
    +            
    +          
    +        
    +        
    +          LSCH5_DUTY
    +          LEDC_LSCH5_DUTY.
    +          0x6C
    +          0x20
    +          
    +            
    +              DUTY_LSCH5
    +              reg_duty_lsch5.
    +              0
    +              19
    +              read-write
    +            
    +          
    +        
    +        
    +          LSCH5_CONF1
    +          LEDC_LSCH5_CONF1.
    +          0x70
    +          0x20
    +          0x40000000
    +          
    +            
    +              DUTY_SCALE_LSCH5
    +              reg_duty_scale_lsch5.
    +              0
    +              10
    +              read-write
    +            
    +            
    +              DUTY_CYCLE_LSCH5
    +              reg_duty_cycle_lsch5.
    +              10
    +              10
    +              read-write
    +            
    +            
    +              DUTY_NUM_LSCH5
    +              reg_duty_num_lsch5.
    +              20
    +              10
    +              read-write
    +            
    +            
    +              DUTY_INC_LSCH5
    +              reg_duty_inc_lsch5.
    +              30
    +              1
    +              read-write
    +            
    +            
    +              DUTY_START_LSCH5
    +              reg_duty_start_lsch5.
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          LSCH5_DUTY_R
    +          LEDC_LSCH5_DUTY_R.
    +          0x74
    +          0x20
    +          
    +            
    +              DUTY_LSCH5_R
    +              reg_duty_lsch5_r.
    +              0
    +              19
    +              read-only
    +            
    +          
    +        
    +        
    +          LSTIMER0_CONF
    +          LEDC_LSTIMER0_CONF.
    +          0xA0
    +          0x20
    +          0x00800000
    +          
    +            
    +              LSTIMER0_DUTY_RES
    +              reg_lstimer0_duty_res.
    +              0
    +              4
    +              read-write
    +            
    +            
    +              CLK_DIV_LSTIMER0
    +              reg_clk_div_lstimer0.
    +              4
    +              18
    +              read-write
    +            
    +            
    +              LSTIMER0_PAUSE
    +              reg_lstimer0_pause.
    +              22
    +              1
    +              read-write
    +            
    +            
    +              LSTIMER0_RST
    +              reg_lstimer0_rst.
    +              23
    +              1
    +              read-write
    +            
    +            
    +              TICK_SEL_LSTIMER0
    +              reg_tick_sel_lstimer0.
    +              24
    +              1
    +              read-write
    +            
    +            
    +              LSTIMER0_PARA_UP
    +              reg_lstimer0_para_up.
    +              25
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          LSTIMER0_VALUE
    +          LEDC_LSTIMER0_VALUE.
    +          0xA4
    +          0x20
    +          
    +            
    +              LSTIMER0_CNT
    +              reg_lstimer0_cnt.
    +              0
    +              14
    +              read-only
    +            
    +          
    +        
    +        
    +          LSTIMER1_CONF
    +          LEDC_LSTIMER1_CONF.
    +          0xA8
    +          0x20
    +          0x00800000
    +          
    +            
    +              LSTIMER1_DUTY_RES
    +              reg_lstimer1_duty_res.
    +              0
    +              4
    +              read-write
    +            
    +            
    +              CLK_DIV_LSTIMER1
    +              reg_clk_div_lstimer1.
    +              4
    +              18
    +              read-write
    +            
    +            
    +              LSTIMER1_PAUSE
    +              reg_lstimer1_pause.
    +              22
    +              1
    +              read-write
    +            
    +            
    +              LSTIMER1_RST
    +              reg_lstimer1_rst.
    +              23
    +              1
    +              read-write
    +            
    +            
    +              TICK_SEL_LSTIMER1
    +              reg_tick_sel_lstimer1.
    +              24
    +              1
    +              read-write
    +            
    +            
    +              LSTIMER1_PARA_UP
    +              reg_lstimer1_para_up.
    +              25
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          LSTIMER1_VALUE
    +          LEDC_LSTIMER1_VALUE.
    +          0xAC
    +          0x20
    +          
    +            
    +              LSTIMER1_CNT
    +              reg_lstimer1_cnt.
    +              0
    +              14
    +              read-only
    +            
    +          
    +        
    +        
    +          LSTIMER2_CONF
    +          LEDC_LSTIMER2_CONF.
    +          0xB0
    +          0x20
    +          0x00800000
    +          
    +            
    +              LSTIMER2_DUTY_RES
    +              reg_lstimer2_duty_res.
    +              0
    +              4
    +              read-write
    +            
    +            
    +              CLK_DIV_LSTIMER2
    +              reg_clk_div_lstimer2.
    +              4
    +              18
    +              read-write
    +            
    +            
    +              LSTIMER2_PAUSE
    +              reg_lstimer2_pause.
    +              22
    +              1
    +              read-write
    +            
    +            
    +              LSTIMER2_RST
    +              reg_lstimer2_rst.
    +              23
    +              1
    +              read-write
    +            
    +            
    +              TICK_SEL_LSTIMER2
    +              reg_tick_sel_lstimer2.
    +              24
    +              1
    +              read-write
    +            
    +            
    +              LSTIMER2_PARA_UP
    +              reg_lstimer2_para_up.
    +              25
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          LSTIMER2_VALUE
    +          LEDC_LSTIMER2_VALUE.
    +          0xB4
    +          0x20
    +          
    +            
    +              LSTIMER2_CNT
    +              reg_lstimer2_cnt.
    +              0
    +              14
    +              read-only
    +            
    +          
    +        
    +        
    +          LSTIMER3_CONF
    +          LEDC_LSTIMER3_CONF.
    +          0xB8
    +          0x20
    +          0x00800000
    +          
    +            
    +              LSTIMER3_DUTY_RES
    +              reg_lstimer3_duty_res.
    +              0
    +              4
    +              read-write
    +            
    +            
    +              CLK_DIV_LSTIMER3
    +              reg_clk_div_lstimer3.
    +              4
    +              18
    +              read-write
    +            
    +            
    +              LSTIMER3_PAUSE
    +              reg_lstimer3_pause.
    +              22
    +              1
    +              read-write
    +            
    +            
    +              LSTIMER3_RST
    +              reg_lstimer3_rst.
    +              23
    +              1
    +              read-write
    +            
    +            
    +              TICK_SEL_LSTIMER3
    +              reg_tick_sel_lstimer3.
    +              24
    +              1
    +              read-write
    +            
    +            
    +              LSTIMER3_PARA_UP
    +              reg_lstimer3_para_up.
    +              25
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          LSTIMER3_VALUE
    +          LEDC_LSTIMER3_VALUE.
    +          0xBC
    +          0x20
    +          
    +            
    +              LSTIMER3_CNT
    +              reg_lstimer3_cnt.
    +              0
    +              14
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_RAW
    +          LEDC_INT_RAW.
    +          0xC0
    +          0x20
    +          
    +            
    +              LSTIMER0_OVF_INT_RAW
    +              reg_lstimer0_ovf_int_raw.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              LSTIMER1_OVF_INT_RAW
    +              reg_lstimer1_ovf_int_raw.
    +              1
    +              1
    +              read-only
    +            
    +            
    +              LSTIMER2_OVF_INT_RAW
    +              reg_lstimer2_ovf_int_raw.
    +              2
    +              1
    +              read-only
    +            
    +            
    +              LSTIMER3_OVF_INT_RAW
    +              reg_lstimer3_ovf_int_raw.
    +              3
    +              1
    +              read-only
    +            
    +            
    +              DUTY_CHNG_END_LSCH0_INT_RAW
    +              reg_duty_chng_end_lsch0_int_raw.
    +              4
    +              1
    +              read-only
    +            
    +            
    +              DUTY_CHNG_END_LSCH1_INT_RAW
    +              reg_duty_chng_end_lsch1_int_raw.
    +              5
    +              1
    +              read-only
    +            
    +            
    +              DUTY_CHNG_END_LSCH2_INT_RAW
    +              reg_duty_chng_end_lsch2_int_raw.
    +              6
    +              1
    +              read-only
    +            
    +            
    +              DUTY_CHNG_END_LSCH3_INT_RAW
    +              reg_duty_chng_end_lsch3_int_raw.
    +              7
    +              1
    +              read-only
    +            
    +            
    +              DUTY_CHNG_END_LSCH4_INT_RAW
    +              reg_duty_chng_end_lsch4_int_raw.
    +              8
    +              1
    +              read-only
    +            
    +            
    +              DUTY_CHNG_END_LSCH5_INT_RAW
    +              reg_duty_chng_end_lsch5_int_raw.
    +              9
    +              1
    +              read-only
    +            
    +            
    +              OVF_CNT_LSCH0_INT_RAW
    +              reg_ovf_cnt_lsch0_int_raw.
    +              10
    +              1
    +              read-only
    +            
    +            
    +              OVF_CNT_LSCH1_INT_RAW
    +              reg_ovf_cnt_lsch1_int_raw.
    +              11
    +              1
    +              read-only
    +            
    +            
    +              OVF_CNT_LSCH2_INT_RAW
    +              reg_ovf_cnt_lsch2_int_raw.
    +              12
    +              1
    +              read-only
    +            
    +            
    +              OVF_CNT_LSCH3_INT_RAW
    +              reg_ovf_cnt_lsch3_int_raw.
    +              13
    +              1
    +              read-only
    +            
    +            
    +              OVF_CNT_LSCH4_INT_RAW
    +              reg_ovf_cnt_lsch4_int_raw.
    +              14
    +              1
    +              read-only
    +            
    +            
    +              OVF_CNT_LSCH5_INT_RAW
    +              reg_ovf_cnt_lsch5_int_raw.
    +              15
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_ST
    +          LEDC_INT_ST.
    +          0xC4
    +          0x20
    +          
    +            
    +              LSTIMER0_OVF_INT_ST
    +              reg_lstimer0_ovf_int_st.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              LSTIMER1_OVF_INT_ST
    +              reg_lstimer1_ovf_int_st.
    +              1
    +              1
    +              read-only
    +            
    +            
    +              LSTIMER2_OVF_INT_ST
    +              reg_lstimer2_ovf_int_st.
    +              2
    +              1
    +              read-only
    +            
    +            
    +              LSTIMER3_OVF_INT_ST
    +              reg_lstimer3_ovf_int_st.
    +              3
    +              1
    +              read-only
    +            
    +            
    +              DUTY_CHNG_END_LSCH0_INT_ST
    +              reg_duty_chng_end_lsch0_int_st.
    +              4
    +              1
    +              read-only
    +            
    +            
    +              DUTY_CHNG_END_LSCH1_INT_ST
    +              reg_duty_chng_end_lsch1_int_st.
    +              5
    +              1
    +              read-only
    +            
    +            
    +              DUTY_CHNG_END_LSCH2_INT_ST
    +              reg_duty_chng_end_lsch2_int_st.
    +              6
    +              1
    +              read-only
    +            
    +            
    +              DUTY_CHNG_END_LSCH3_INT_ST
    +              reg_duty_chng_end_lsch3_int_st.
    +              7
    +              1
    +              read-only
    +            
    +            
    +              DUTY_CHNG_END_LSCH4_INT_ST
    +              reg_duty_chng_end_lsch4_int_st.
    +              8
    +              1
    +              read-only
    +            
    +            
    +              DUTY_CHNG_END_LSCH5_INT_ST
    +              reg_duty_chng_end_lsch5_int_st.
    +              9
    +              1
    +              read-only
    +            
    +            
    +              OVF_CNT_LSCH0_INT_ST
    +              reg_ovf_cnt_lsch0_int_st.
    +              10
    +              1
    +              read-only
    +            
    +            
    +              OVF_CNT_LSCH1_INT_ST
    +              reg_ovf_cnt_lsch1_int_st.
    +              11
    +              1
    +              read-only
    +            
    +            
    +              OVF_CNT_LSCH2_INT_ST
    +              reg_ovf_cnt_lsch2_int_st.
    +              12
    +              1
    +              read-only
    +            
    +            
    +              OVF_CNT_LSCH3_INT_ST
    +              reg_ovf_cnt_lsch3_int_st.
    +              13
    +              1
    +              read-only
    +            
    +            
    +              OVF_CNT_LSCH4_INT_ST
    +              reg_ovf_cnt_lsch4_int_st.
    +              14
    +              1
    +              read-only
    +            
    +            
    +              OVF_CNT_LSCH5_INT_ST
    +              reg_ovf_cnt_lsch5_int_st.
    +              15
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_ENA
    +          LEDC_INT_ENA.
    +          0xC8
    +          0x20
    +          
    +            
    +              LSTIMER0_OVF_INT_ENA
    +              reg_lstimer0_ovf_int_ena.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              LSTIMER1_OVF_INT_ENA
    +              reg_lstimer1_ovf_int_ena.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              LSTIMER2_OVF_INT_ENA
    +              reg_lstimer2_ovf_int_ena.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              LSTIMER3_OVF_INT_ENA
    +              reg_lstimer3_ovf_int_ena.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              DUTY_CHNG_END_LSCH0_INT_ENA
    +              reg_duty_chng_end_lsch0_int_ena.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              DUTY_CHNG_END_LSCH1_INT_ENA
    +              reg_duty_chng_end_lsch1_int_ena.
    +              5
    +              1
    +              read-write
    +            
    +            
    +              DUTY_CHNG_END_LSCH2_INT_ENA
    +              reg_duty_chng_end_lsch2_int_ena.
    +              6
    +              1
    +              read-write
    +            
    +            
    +              DUTY_CHNG_END_LSCH3_INT_ENA
    +              reg_duty_chng_end_lsch3_int_ena.
    +              7
    +              1
    +              read-write
    +            
    +            
    +              DUTY_CHNG_END_LSCH4_INT_ENA
    +              reg_duty_chng_end_lsch4_int_ena.
    +              8
    +              1
    +              read-write
    +            
    +            
    +              DUTY_CHNG_END_LSCH5_INT_ENA
    +              reg_duty_chng_end_lsch5_int_ena.
    +              9
    +              1
    +              read-write
    +            
    +            
    +              OVF_CNT_LSCH0_INT_ENA
    +              reg_ovf_cnt_lsch0_int_ena.
    +              10
    +              1
    +              read-write
    +            
    +            
    +              OVF_CNT_LSCH1_INT_ENA
    +              reg_ovf_cnt_lsch1_int_ena.
    +              11
    +              1
    +              read-write
    +            
    +            
    +              OVF_CNT_LSCH2_INT_ENA
    +              reg_ovf_cnt_lsch2_int_ena.
    +              12
    +              1
    +              read-write
    +            
    +            
    +              OVF_CNT_LSCH3_INT_ENA
    +              reg_ovf_cnt_lsch3_int_ena.
    +              13
    +              1
    +              read-write
    +            
    +            
    +              OVF_CNT_LSCH4_INT_ENA
    +              reg_ovf_cnt_lsch4_int_ena.
    +              14
    +              1
    +              read-write
    +            
    +            
    +              OVF_CNT_LSCH5_INT_ENA
    +              reg_ovf_cnt_lsch5_int_ena.
    +              15
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          INT_CLR
    +          LEDC_INT_CLR.
    +          0xCC
    +          0x20
    +          
    +            
    +              LSTIMER0_OVF_INT_CLR
    +              reg_lstimer0_ovf_int_clr.
    +              0
    +              1
    +              write-only
    +            
    +            
    +              LSTIMER1_OVF_INT_CLR
    +              reg_lstimer1_ovf_int_clr.
    +              1
    +              1
    +              write-only
    +            
    +            
    +              LSTIMER2_OVF_INT_CLR
    +              reg_lstimer2_ovf_int_clr.
    +              2
    +              1
    +              write-only
    +            
    +            
    +              LSTIMER3_OVF_INT_CLR
    +              reg_lstimer3_ovf_int_clr.
    +              3
    +              1
    +              write-only
    +            
    +            
    +              DUTY_CHNG_END_LSCH0_INT_CLR
    +              reg_duty_chng_end_lsch0_int_clr.
    +              4
    +              1
    +              write-only
    +            
    +            
    +              DUTY_CHNG_END_LSCH1_INT_CLR
    +              reg_duty_chng_end_lsch1_int_clr.
    +              5
    +              1
    +              write-only
    +            
    +            
    +              DUTY_CHNG_END_LSCH2_INT_CLR
    +              reg_duty_chng_end_lsch2_int_clr.
    +              6
    +              1
    +              write-only
    +            
    +            
    +              DUTY_CHNG_END_LSCH3_INT_CLR
    +              reg_duty_chng_end_lsch3_int_clr.
    +              7
    +              1
    +              write-only
    +            
    +            
    +              DUTY_CHNG_END_LSCH4_INT_CLR
    +              reg_duty_chng_end_lsch4_int_clr.
    +              8
    +              1
    +              write-only
    +            
    +            
    +              DUTY_CHNG_END_LSCH5_INT_CLR
    +              reg_duty_chng_end_lsch5_int_clr.
    +              9
    +              1
    +              write-only
    +            
    +            
    +              OVF_CNT_LSCH0_INT_CLR
    +              reg_ovf_cnt_lsch0_int_clr.
    +              10
    +              1
    +              write-only
    +            
    +            
    +              OVF_CNT_LSCH1_INT_CLR
    +              reg_ovf_cnt_lsch1_int_clr.
    +              11
    +              1
    +              write-only
    +            
    +            
    +              OVF_CNT_LSCH2_INT_CLR
    +              reg_ovf_cnt_lsch2_int_clr.
    +              12
    +              1
    +              write-only
    +            
    +            
    +              OVF_CNT_LSCH3_INT_CLR
    +              reg_ovf_cnt_lsch3_int_clr.
    +              13
    +              1
    +              write-only
    +            
    +            
    +              OVF_CNT_LSCH4_INT_CLR
    +              reg_ovf_cnt_lsch4_int_clr.
    +              14
    +              1
    +              write-only
    +            
    +            
    +              OVF_CNT_LSCH5_INT_CLR
    +              reg_ovf_cnt_lsch5_int_clr.
    +              15
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          CONF
    +          LEDC_CONF.
    +          0xD0
    +          0x20
    +          
    +            
    +              APB_CLK_SEL
    +              reg_apb_clk_sel.
    +              0
    +              2
    +              read-write
    +            
    +            
    +              CLK_EN
    +              reg_clk_en.
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DATE
    +          LEDC_DATE.
    +          0xFC
    +          0x20
    +          0x19061700
    +          
    +            
    +              LEDC_DATE
    +              reg_ledc_date.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      RMT
    +      Remote Control Peripheral
    +      RMT
    +      0x60016000
    +      
    +        0x0
    +        0x78
    +        registers
    +      
    +      
    +        RMT
    +        28
    +      
    +      
    +        
    +          CH0DATA
    +          RMT_CH0DATA_REG.
    +          0x0
    +          0x20
    +          
    +            
    +              DATA
    +              Reserved.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          CH1DATA
    +          RMT_CH1DATA_REG.
    +          0x4
    +          0x20
    +          
    +            
    +              DATA
    +              Reserved.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          CH2DATA
    +          RMT_CH2DATA_REG.
    +          0x8
    +          0x20
    +          
    +            
    +              DATA
    +              Reserved.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          CH3DATA
    +          RMT_CH3DATA_REG.
    +          0xC
    +          0x20
    +          
    +            
    +              DATA
    +              Reserved.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          2
    +          0x4
    +          0-1
    +          CH%s_TX_CONF0
    +          RMT_CH%sCONF%s_REG.
    +          0x10
    +          0x20
    +          0x00710200
    +          
    +            
    +              TX_START
    +              reg_tx_start_ch0.
    +              0
    +              1
    +              write-only
    +            
    +            
    +              MEM_RD_RST
    +              reg_mem_rd_rst_ch0.
    +              1
    +              1
    +              write-only
    +            
    +            
    +              APB_MEM_RST
    +              reg_apb_mem_rst_ch0.
    +              2
    +              1
    +              write-only
    +            
    +            
    +              TX_CONTI_MODE
    +              reg_tx_conti_mode_ch0.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              MEM_TX_WRAP_EN
    +              reg_mem_tx_wrap_en_ch0.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              IDLE_OUT_LV
    +              reg_idle_out_lv_ch0.
    +              5
    +              1
    +              read-write
    +            
    +            
    +              IDLE_OUT_EN
    +              reg_idle_out_en_ch0.
    +              6
    +              1
    +              read-write
    +            
    +            
    +              TX_STOP
    +              reg_tx_stop_ch0.
    +              7
    +              1
    +              read-write
    +            
    +            
    +              DIV_CNT
    +              reg_div_cnt_ch0.
    +              8
    +              8
    +              read-write
    +            
    +            
    +              MEM_SIZE
    +              reg_mem_size_ch0.
    +              16
    +              3
    +              read-write
    +            
    +            
    +              CARRIER_EFF_EN
    +              reg_carrier_eff_en_ch0.
    +              20
    +              1
    +              read-write
    +            
    +            
    +              CARRIER_EN
    +              reg_carrier_en_ch0.
    +              21
    +              1
    +              read-write
    +            
    +            
    +              CARRIER_OUT_LV
    +              reg_carrier_out_lv_ch0.
    +              22
    +              1
    +              read-write
    +            
    +            
    +              AFIFO_RST
    +              reg_afifo_rst_ch0.
    +              23
    +              1
    +              write-only
    +            
    +            
    +              CONF_UPDATE
    +              reg_reg_conf_update_ch0.
    +              24
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          2
    +          0x8
    +          2-3
    +          CH%s_RX_CONF0
    +          RMT_CH2CONF0_REG.
    +          0x18
    +          0x20
    +          0x30FFFF02
    +          
    +            
    +              DIV_CNT
    +              reg_div_cnt_ch2.
    +              0
    +              8
    +              read-write
    +            
    +            
    +              IDLE_THRES
    +              reg_idle_thres_ch2.
    +              8
    +              15
    +              read-write
    +            
    +            
    +              MEM_SIZE
    +              reg_mem_size_ch2.
    +              23
    +              3
    +              read-write
    +            
    +            
    +              CARRIER_EN
    +              reg_carrier_en_ch2.
    +              28
    +              1
    +              read-write
    +            
    +            
    +              CARRIER_OUT_LV
    +              reg_carrier_out_lv_ch2.
    +              29
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CH2CONF1
    +          RMT_CH2CONF1_REG.
    +          0x1C
    +          0x20
    +          0x000001E8
    +          
    +            
    +              RX_EN
    +              reg_rx_en_ch2.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              MEM_WR_RST
    +              reg_mem_wr_rst_ch2.
    +              1
    +              1
    +              write-only
    +            
    +            
    +              APB_MEM_RST
    +              reg_apb_mem_rst_ch2.
    +              2
    +              1
    +              write-only
    +            
    +            
    +              MEM_OWNER
    +              reg_mem_owner_ch2.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              RX_FILTER_EN
    +              reg_rx_filter_en_ch2.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              RX_FILTER_THRES
    +              reg_rx_filter_thres_ch2.
    +              5
    +              8
    +              read-write
    +            
    +            
    +              MEM_RX_WRAP_EN
    +              reg_mem_rx_wrap_en_ch2.
    +              13
    +              1
    +              read-write
    +            
    +            
    +              AFIFO_RST
    +              reg_afifo_rst_ch2.
    +              14
    +              1
    +              write-only
    +            
    +            
    +              CONF_UPDATE
    +              reg_conf_update_ch2.
    +              15
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          CH3CONF1
    +          RMT_CH3CONF1_REG.
    +          0x24
    +          0x20
    +          0x000001E8
    +          
    +            
    +              RX_EN
    +              reg_rx_en_ch3.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              MEM_WR_RST
    +              reg_mem_wr_rst_ch3.
    +              1
    +              1
    +              write-only
    +            
    +            
    +              APB_MEM_RST
    +              reg_apb_mem_rst_ch3.
    +              2
    +              1
    +              write-only
    +            
    +            
    +              MEM_OWNER
    +              reg_mem_owner_ch3.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              RX_FILTER_EN
    +              reg_rx_filter_en_ch3.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              RX_FILTER_THRES
    +              reg_rx_filter_thres_ch3.
    +              5
    +              8
    +              read-write
    +            
    +            
    +              MEM_RX_WRAP_EN
    +              reg_mem_rx_wrap_en_ch3.
    +              13
    +              1
    +              read-write
    +            
    +            
    +              AFIFO_RST
    +              reg_afifo_rst_ch3.
    +              14
    +              1
    +              write-only
    +            
    +            
    +              CONF_UPDATE
    +              reg_conf_update_ch3.
    +              15
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          CH0STATUS
    +          RMT_CH0STATUS_REG.
    +          0x28
    +          0x20
    +          
    +            
    +              MEM_RADDR_EX
    +              reg_mem_raddr_ex_ch0.
    +              0
    +              9
    +              read-only
    +            
    +            
    +              STATE
    +              reg_state_ch0.
    +              9
    +              3
    +              read-only
    +            
    +            
    +              APB_MEM_WADDR
    +              reg_apb_mem_waddr_ch0.
    +              12
    +              9
    +              read-only
    +            
    +            
    +              APB_MEM_RD_ERR
    +              reg_apb_mem_rd_err_ch0.
    +              21
    +              1
    +              read-only
    +            
    +            
    +              MEM_EMPTY
    +              reg_mem_empty_ch0.
    +              22
    +              1
    +              read-only
    +            
    +            
    +              APB_MEM_WR_ERR
    +              reg_apb_mem_wr_err_ch0.
    +              23
    +              1
    +              read-only
    +            
    +            
    +              APB_MEM_RADDR
    +              reg_apb_mem_raddr_ch0.
    +              24
    +              8
    +              read-only
    +            
    +          
    +        
    +        
    +          CH1STATUS
    +          RMT_CH1STATUS_REG.
    +          0x2C
    +          0x20
    +          
    +            
    +              MEM_RADDR_EX
    +              reg_mem_raddr_ex_ch1.
    +              0
    +              9
    +              read-only
    +            
    +            
    +              STATE
    +              reg_state_ch1.
    +              9
    +              3
    +              read-only
    +            
    +            
    +              APB_MEM_WADDR
    +              reg_apb_mem_waddr_ch1.
    +              12
    +              9
    +              read-only
    +            
    +            
    +              APB_MEM_RD_ERR
    +              reg_apb_mem_rd_err_ch1.
    +              21
    +              1
    +              read-only
    +            
    +            
    +              MEM_EMPTY
    +              reg_mem_empty_ch1.
    +              22
    +              1
    +              read-only
    +            
    +            
    +              APB_MEM_WR_ERR
    +              reg_apb_mem_wr_err_ch1.
    +              23
    +              1
    +              read-only
    +            
    +            
    +              APB_MEM_RADDR
    +              reg_apb_mem_raddr_ch1.
    +              24
    +              8
    +              read-only
    +            
    +          
    +        
    +        
    +          CH2STATUS
    +          RMT_CH2STATUS_REG.
    +          0x30
    +          0x20
    +          
    +            
    +              MEM_WADDR_EX
    +              reg_mem_waddr_ex_ch2.
    +              0
    +              9
    +              read-only
    +            
    +            
    +              APB_MEM_RADDR
    +              reg_apb_mem_raddr_ch2.
    +              12
    +              9
    +              read-only
    +            
    +            
    +              STATE
    +              reg_state_ch2.
    +              22
    +              3
    +              read-only
    +            
    +            
    +              MEM_OWNER_ERR
    +              reg_mem_owner_err_ch2.
    +              25
    +              1
    +              read-only
    +            
    +            
    +              MEM_FULL
    +              reg_mem_full_ch2.
    +              26
    +              1
    +              read-only
    +            
    +            
    +              APB_MEM_RD_ERR
    +              reg_apb_mem_rd_err_ch2.
    +              27
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          CH3STATUS
    +          RMT_CH3STATUS_REG.
    +          0x34
    +          0x20
    +          
    +            
    +              MEM_WADDR_EX
    +              reg_mem_waddr_ex_ch3.
    +              0
    +              9
    +              read-only
    +            
    +            
    +              APB_MEM_RADDR
    +              reg_apb_mem_raddr_ch3.
    +              12
    +              9
    +              read-only
    +            
    +            
    +              STATE
    +              reg_state_ch3.
    +              22
    +              3
    +              read-only
    +            
    +            
    +              MEM_OWNER_ERR
    +              reg_mem_owner_err_ch3.
    +              25
    +              1
    +              read-only
    +            
    +            
    +              MEM_FULL
    +              reg_mem_full_ch3.
    +              26
    +              1
    +              read-only
    +            
    +            
    +              APB_MEM_RD_ERR
    +              reg_apb_mem_rd_err_ch3.
    +              27
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_RAW
    +          RMT_INT_RAW_REG.
    +          0x38
    +          0x20
    +          
    +            
    +              2
    +              0x1
    +              0-1
    +              CH%s_TX_END_INT_RAW
    +              reg_ch%s_tx_end_int_raw.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              2
    +              0x1
    +              2-3
    +              CH%s_RX_END_INT_RAW
    +              reg_ch2_rx_end_int_raw.
    +              2
    +              1
    +              read-only
    +            
    +            
    +              2
    +              0x1
    +              0-1
    +              CH%s_TX_ERR_INT_RAW
    +              reg_ch%s_err_int_raw.
    +              4
    +              1
    +              read-only
    +            
    +            
    +              2
    +              0x1
    +              2-3
    +              CH%s_RX_ERR_INT_RAW
    +              reg_ch2_err_int_raw.
    +              6
    +              1
    +              read-only
    +            
    +            
    +              2
    +              0x1
    +              0-1
    +              CH%s_TX_THR_EVENT_INT_RAW
    +              reg_ch%s_tx_thr_event_int_raw.
    +              8
    +              1
    +              read-only
    +            
    +            
    +              CH2_RX_THR_EVENT_INT_RAW
    +              reg_ch2_rx_thr_event_int_raw.
    +              10
    +              1
    +              read-only
    +            
    +            
    +              CH3_RX_THR_EVENT_INT_RAW
    +              reg_ch3_rx_thr_event_int_raw.
    +              11
    +              1
    +              read-only
    +            
    +            
    +              2
    +              0x1
    +              0-1
    +              CH%s_TX_LOOP_INT_RAW
    +              reg_ch%s_tx_loop_int_raw.
    +              12
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_ST
    +          RMT_INT_ST_REG.
    +          0x3C
    +          0x20
    +          
    +            
    +              2
    +              0x1
    +              0-1
    +              CH%s_TX_END_INT_ST
    +              reg_ch%s_tx_end_int_st.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              2
    +              0x1
    +              2-3
    +              CH%s_RX_END_INT_ST
    +              reg_ch2_rx_end_int_st.
    +              2
    +              1
    +              read-only
    +            
    +            
    +              2
    +              0x1
    +              0-1
    +              CH%s_TX_ERR_INT_ST
    +              reg_ch%s_err_int_st.
    +              4
    +              1
    +              read-only
    +            
    +            
    +              2
    +              0x1
    +              2-3
    +              CH%s_RX_ERR_INT_ST
    +              reg_ch2_err_int_st.
    +              6
    +              1
    +              read-only
    +            
    +            
    +              2
    +              0x1
    +              0-1
    +              CH%s_TX_THR_EVENT_INT_ST
    +              reg_ch%s_tx_thr_event_int_st.
    +              8
    +              1
    +              read-only
    +            
    +            
    +              CH2_RX_THR_EVENT_INT_ST
    +              reg_ch2_rx_thr_event_int_st.
    +              10
    +              1
    +              read-only
    +            
    +            
    +              CH3_RX_THR_EVENT_INT_ST
    +              reg_ch3_rx_thr_event_int_st.
    +              11
    +              1
    +              read-only
    +            
    +            
    +              2
    +              0x1
    +              0-1
    +              CH%s_TX_LOOP_INT_ST
    +              reg_ch%s_tx_loop_int_st.
    +              12
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_ENA
    +          RMT_INT_ENA_REG.
    +          0x40
    +          0x20
    +          
    +            
    +              2
    +              0x1
    +              0-1
    +              CH%s_TX_END_INT_ENA
    +              reg_ch%s_tx_end_int_ena.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              2
    +              0x1
    +              2-3
    +              CH%s_RX_END_INT_ENA
    +              reg_ch2_rx_end_int_ena.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              2
    +              0x1
    +              0-1
    +              CH%s_TX_ERR_INT_ENA
    +              reg_ch%s_err_int_ena.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              2
    +              0x1
    +              2-3
    +              CH%s_RX_ERR_INT_ENA
    +              reg_ch2_err_int_ena.
    +              6
    +              1
    +              read-write
    +            
    +            
    +              2
    +              0x1
    +              0-1
    +              CH%s_TX_THR_EVENT_INT_ENA
    +              reg_ch%s_tx_thr_event_int_ena.
    +              8
    +              1
    +              read-write
    +            
    +            
    +              CH2_RX_THR_EVENT_INT_ENA
    +              reg_ch2_rx_thr_event_int_ena.
    +              10
    +              1
    +              read-write
    +            
    +            
    +              CH3_RX_THR_EVENT_INT_ENA
    +              reg_ch3_rx_thr_event_int_ena.
    +              11
    +              1
    +              read-write
    +            
    +            
    +              2
    +              0x1
    +              0-1
    +              CH%s_TX_LOOP_INT_ENA
    +              reg_ch%s_tx_loop_int_ena.
    +              12
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          INT_CLR
    +          RMT_INT_CLR_REG.
    +          0x44
    +          0x20
    +          
    +            
    +              2
    +              0x1
    +              0-1
    +              CH%s_TX_END_INT_CLR
    +              reg_ch%s_tx_end_int_clr.
    +              0
    +              1
    +              write-only
    +            
    +            
    +              2
    +              0x1
    +              2-3
    +              CH%s_RX_END_INT_CLR
    +              reg_ch2_rx_end_int_clr.
    +              2
    +              1
    +              write-only
    +            
    +            
    +              2
    +              0x1
    +              0-1
    +              CH%s_TX_ERR_INT_CLR
    +              reg_ch%s_err_int_clr.
    +              4
    +              1
    +              write-only
    +            
    +            
    +              2
    +              0x1
    +              2-3
    +              CH%s_RX_ERR_INT_CLR
    +              reg_ch2_err_int_clr.
    +              6
    +              1
    +              write-only
    +            
    +            
    +              2
    +              0x1
    +              0-1
    +              CH%s_TX_THR_EVENT_INT_CLR
    +              reg_ch%s_tx_thr_event_int_clr.
    +              8
    +              1
    +              write-only
    +            
    +            
    +              CH2_RX_THR_EVENT_INT_CLR
    +              reg_ch2_rx_thr_event_int_clr.
    +              10
    +              1
    +              write-only
    +            
    +            
    +              CH3_RX_THR_EVENT_INT_CLR
    +              reg_ch3_rx_thr_event_int_clr.
    +              11
    +              1
    +              write-only
    +            
    +            
    +              2
    +              0x1
    +              0-1
    +              CH%s_TX_LOOP_INT_CLR
    +              reg_ch%s_tx_loop_int_clr.
    +              12
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          CH0CARRIER_DUTY
    +          RMT_CH0CARRIER_DUTY_REG.
    +          0x48
    +          0x20
    +          0x00400040
    +          
    +            
    +              CARRIER_LOW
    +              reg_carrier_low_ch0.
    +              0
    +              16
    +              read-write
    +            
    +            
    +              CARRIER_HIGH
    +              reg_carrier_high_ch0.
    +              16
    +              16
    +              read-write
    +            
    +          
    +        
    +        
    +          CH1CARRIER_DUTY
    +          RMT_CH1CARRIER_DUTY_REG.
    +          0x4C
    +          0x20
    +          0x00400040
    +          
    +            
    +              CARRIER_LOW
    +              reg_carrier_low_ch1.
    +              0
    +              16
    +              read-write
    +            
    +            
    +              CARRIER_HIGH
    +              reg_carrier_high_ch1.
    +              16
    +              16
    +              read-write
    +            
    +          
    +        
    +        
    +          CH2_RX_CARRIER_RM
    +          RMT_CH2_RX_CARRIER_RM_REG.
    +          0x50
    +          0x20
    +          
    +            
    +              CARRIER_LOW_THRES
    +              reg_carrier_low_thres_ch2.
    +              0
    +              16
    +              read-write
    +            
    +            
    +              CARRIER_HIGH_THRES
    +              reg_carrier_high_thres_ch2.
    +              16
    +              16
    +              read-write
    +            
    +          
    +        
    +        
    +          CH3_RX_CARRIER_RM
    +          RMT_CH3_RX_CARRIER_RM_REG.
    +          0x54
    +          0x20
    +          
    +            
    +              CARRIER_LOW_THRES
    +              reg_carrier_low_thres_ch3.
    +              0
    +              16
    +              read-write
    +            
    +            
    +              CARRIER_HIGH_THRES
    +              reg_carrier_high_thres_ch3.
    +              16
    +              16
    +              read-write
    +            
    +          
    +        
    +        
    +          2
    +          0x4
    +          0-1
    +          CH%s_TX_LIM
    +          RMT_CH%s_TX_LIM_REG.
    +          0x58
    +          0x20
    +          0x00000080
    +          
    +            
    +              TX_LIM
    +              reg_rmt_tx_lim_ch0.
    +              0
    +              9
    +              read-write
    +            
    +            
    +              TX_LOOP_NUM
    +              reg_rmt_tx_loop_num_ch0.
    +              9
    +              10
    +              read-write
    +            
    +            
    +              TX_LOOP_CNT_EN
    +              reg_rmt_tx_loop_cnt_en_ch0.
    +              19
    +              1
    +              read-write
    +            
    +            
    +              LOOP_COUNT_RESET
    +              reg_loop_count_reset_ch0.
    +              20
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          2
    +          0x4
    +          2-3
    +          CH%s_RX_LIM
    +          RMT_CH2_RX_LIM_REG.
    +          0x60
    +          0x20
    +          0x00000080
    +          
    +            
    +              RX_LIM
    +              reg_rmt_rx_lim_ch2.
    +              0
    +              9
    +              read-write
    +            
    +          
    +        
    +        
    +          SYS_CONF
    +          RMT_SYS_CONF_REG.
    +          0x68
    +          0x20
    +          0x05000010
    +          
    +            
    +              APB_FIFO_MASK
    +              reg_apb_fifo_mask.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              MEM_CLK_FORCE_ON
    +              reg_mem_clk_force_on.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              MEM_FORCE_PD
    +              reg_rmt_mem_force_pd.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              MEM_FORCE_PU
    +              reg_rmt_mem_force_pu.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              SCLK_DIV_NUM
    +              reg_rmt_sclk_div_num.
    +              4
    +              8
    +              read-write
    +            
    +            
    +              SCLK_DIV_A
    +              reg_rmt_sclk_div_a.
    +              12
    +              6
    +              read-write
    +            
    +            
    +              SCLK_DIV_B
    +              reg_rmt_sclk_div_b.
    +              18
    +              6
    +              read-write
    +            
    +            
    +              SCLK_SEL
    +              reg_rmt_sclk_sel.
    +              24
    +              2
    +              read-write
    +            
    +            
    +              SCLK_ACTIVE
    +              reg_rmt_sclk_active.
    +              26
    +              1
    +              read-write
    +            
    +            
    +              CLK_EN
    +              reg_clk_en.
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          TX_SIM
    +          RMT_TX_SIM_REG.
    +          0x6C
    +          0x20
    +          
    +            
    +              TX_SIM_CH0
    +              reg_rmt_tx_sim_ch0.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              TX_SIM_CH1
    +              reg_rmt_tx_sim_ch1.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              TX_SIM_EN
    +              reg_rmt_tx_sim_en.
    +              2
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          REF_CNT_RST
    +          RMT_REF_CNT_RST_REG.
    +          0x70
    +          0x20
    +          
    +            
    +              CH0
    +              reg_ref_cnt_rst_ch0.
    +              0
    +              1
    +              write-only
    +            
    +            
    +              CH1
    +              reg_ref_cnt_rst_ch1.
    +              1
    +              1
    +              write-only
    +            
    +            
    +              CH2
    +              reg_ref_cnt_rst_ch2.
    +              2
    +              1
    +              write-only
    +            
    +            
    +              CH3
    +              reg_ref_cnt_rst_ch3.
    +              3
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          DATE
    +          RMT_DATE_REG.
    +          0xCC
    +          0x20
    +          0x02006231
    +          
    +            
    +              DATE
    +              reg_rmt_date.
    +              0
    +              28
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      RNG
    +      Hardware random number generator
    +      RNG
    +      0x60026000
    +      
    +        0x0
    +        0x4
    +        registers
    +      
    +      
    +        
    +          DATA
    +          Random number data
    +          0xB0
    +          0x20
    +        
    +      
    +    
    +    
    +      RSA
    +      RSA (Rivest Shamir Adleman) Accelerator
    +      RSA
    +      0x6003C000
    +      
    +        0x0
    +        0x74
    +        registers
    +      
    +      
    +        RSA
    +        47
    +      
    +      
    +        
    +          16
    +          0x1
    +          M_MEM[%s]
    +          The memory that stores M
    +          0x0
    +          0x8
    +        
    +        
    +          16
    +          0x1
    +          Z_MEM[%s]
    +          The memory that stores Z
    +          0x200
    +          0x8
    +        
    +        
    +          16
    +          0x1
    +          Y_MEM[%s]
    +          The memory that stores Y
    +          0x400
    +          0x8
    +        
    +        
    +          16
    +          0x1
    +          X_MEM[%s]
    +          The memory that stores X
    +          0x600
    +          0x8
    +        
    +        
    +          M_PRIME
    +          RSA M_prime register
    +          0x800
    +          0x20
    +          
    +            
    +              M_PRIME
    +              Those bits stores m'
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          MODE
    +          RSA mode register
    +          0x804
    +          0x20
    +          
    +            
    +              MODE
    +              rsa mode (rsa length).
    +              0
    +              7
    +              read-write
    +            
    +          
    +        
    +        
    +          QUERY_CLEAN
    +          RSA query clean register
    +          0x808
    +          0x20
    +          
    +            
    +              QUERY_CLEAN
    +              query clean
    +              0
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          SET_START_MODEXP
    +          RSA modular exponentiation trigger register.
    +          0x80C
    +          0x20
    +          
    +            
    +              SET_START_MODEXP
    +              start modular exponentiation
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          SET_START_MODMULT
    +          RSA modular multiplication trigger register.
    +          0x810
    +          0x20
    +          
    +            
    +              SET_START_MODMULT
    +              start modular multiplication
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          SET_START_MULT
    +          RSA normal multiplication trigger register.
    +          0x814
    +          0x20
    +          
    +            
    +              SET_START_MULT
    +              start multiplicaiton
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          QUERY_IDLE
    +          RSA query idle register
    +          0x818
    +          0x20
    +          
    +            
    +              QUERY_IDLE
    +              query rsa idle. 1'b0: busy, 1'b1: idle
    +              0
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_CLR
    +          RSA interrupt clear register
    +          0x81C
    +          0x20
    +          
    +            
    +              CLEAR_INTERRUPT
    +              set this bit to clear RSA interrupt.
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          CONSTANT_TIME
    +          RSA constant time option register
    +          0x820
    +          0x20
    +          0x00000001
    +          
    +            
    +              CONSTANT_TIME
    +              Configure this bit to 0 for acceleration. 0: with acceleration, 1: without acceleration(defalut).
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          SEARCH_ENABLE
    +          RSA search option
    +          0x824
    +          0x20
    +          
    +            
    +              SEARCH_ENABLE
    +              Configure this bit to 1 for acceleration. 1: with acceleration, 0: without acceleration(default). This option should be used together with RSA_SEARCH_POS.
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          SEARCH_POS
    +          RSA search position configure register
    +          0x828
    +          0x20
    +          
    +            
    +              SEARCH_POS
    +              Configure this field to set search position. This field should be used together with RSA_SEARCH_ENABLE. The field is only meaningful when RSA_SEARCH_ENABLE is high.
    +              0
    +              12
    +              read-write
    +            
    +          
    +        
    +        
    +          INT_ENA
    +          RSA interrupt enable register
    +          0x82C
    +          0x20
    +          
    +            
    +              INT_ENA
    +              Set this bit to enable interrupt that occurs when rsa calculation is done. 1'b0: disable, 1'b1: enable(default).
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DATE
    +          RSA version control register
    +          0x830
    +          0x20
    +          0x20200618
    +          
    +            
    +              DATE
    +              rsa version information
    +              0
    +              30
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      RTC_CNTL
    +      Real-Time Clock Control
    +      RTC_CNTL
    +      0x60008000
    +      
    +        0x0
    +        0x12C
    +        registers
    +      
    +      
    +        RTC_CORE
    +        27
    +      
    +      
    +        
    +          OPTIONS0
    +          rtc configure register
    +          0x0
    +          0x20
    +          0x1C00A000
    +          
    +            
    +              SW_STALL_APPCPU_C0
    +              {reg_sw_stall_appcpu_c1[5:0],  reg_sw_stall_appcpu_c0[1:0]} == 0x86 will stall APP CPU
    +              0
    +              2
    +              read-write
    +            
    +            
    +              SW_STALL_PROCPU_C0
    +              {reg_sw_stall_procpu_c1[5:0],  reg_sw_stall_procpu_c0[1:0]} == 0x86 will stall PRO CPU
    +              2
    +              2
    +              read-write
    +            
    +            
    +              SW_APPCPU_RST
    +              APP CPU SW reset
    +              4
    +              1
    +              write-only
    +            
    +            
    +              SW_PROCPU_RST
    +              PRO CPU SW reset
    +              5
    +              1
    +              write-only
    +            
    +            
    +              BB_I2C_FORCE_PD
    +              BB_I2C force power down
    +              6
    +              1
    +              read-write
    +            
    +            
    +              BB_I2C_FORCE_PU
    +              BB_I2C force power up
    +              7
    +              1
    +              read-write
    +            
    +            
    +              BBPLL_I2C_FORCE_PD
    +              BB_PLL _I2C force power down
    +              8
    +              1
    +              read-write
    +            
    +            
    +              BBPLL_I2C_FORCE_PU
    +              BB_PLL_I2C force power up
    +              9
    +              1
    +              read-write
    +            
    +            
    +              BBPLL_FORCE_PD
    +              BB_PLL force power down
    +              10
    +              1
    +              read-write
    +            
    +            
    +              BBPLL_FORCE_PU
    +              BB_PLL force power up
    +              11
    +              1
    +              read-write
    +            
    +            
    +              XTL_FORCE_PD
    +              crystall force power down
    +              12
    +              1
    +              read-write
    +            
    +            
    +              XTL_FORCE_PU
    +              crystall force power up
    +              13
    +              1
    +              read-write
    +            
    +            
    +              XTL_EN_WAIT
    +              wait bias_sleep and current source wakeup
    +              14
    +              4
    +              read-write
    +            
    +            
    +              XTL_EXT_CTR_SEL
    +              analog configure
    +              20
    +              3
    +              read-write
    +            
    +            
    +              XTL_FORCE_ISO
    +              analog configure
    +              23
    +              1
    +              read-write
    +            
    +            
    +              PLL_FORCE_ISO
    +              analog configure
    +              24
    +              1
    +              read-write
    +            
    +            
    +              ANALOG_FORCE_ISO
    +              analog configure
    +              25
    +              1
    +              read-write
    +            
    +            
    +              XTL_FORCE_NOISO
    +              analog configure
    +              26
    +              1
    +              read-write
    +            
    +            
    +              PLL_FORCE_NOISO
    +              analog configure
    +              27
    +              1
    +              read-write
    +            
    +            
    +              ANALOG_FORCE_NOISO
    +              analog configure
    +              28
    +              1
    +              read-write
    +            
    +            
    +              DG_WRAP_FORCE_RST
    +              digital wrap force reset in deep sleep
    +              29
    +              1
    +              read-write
    +            
    +            
    +              DG_WRAP_FORCE_NORST
    +              digital core force no reset in deep sleep
    +              30
    +              1
    +              read-write
    +            
    +            
    +              SW_SYS_RST
    +              SW system reset
    +              31
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          SLP_TIMER0
    +          rtc configure register
    +          0x4
    +          0x20
    +          
    +            
    +              SLP_VAL_LO
    +              configure the  sleep time
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          SLP_TIMER1
    +          rtc configure register
    +          0x8
    +          0x20
    +          
    +            
    +              SLP_VAL_HI
    +              RTC sleep timer high 16 bits
    +              0
    +              16
    +              read-write
    +            
    +            
    +              RTC_MAIN_TIMER_ALARM_EN
    +              timer alarm enable bit
    +              16
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          TIME_UPDATE
    +          rtc configure register
    +          0xC
    +          0x20
    +          
    +            
    +              TIMER_SYS_STALL
    +              Enable to record system stall time
    +              27
    +              1
    +              read-write
    +            
    +            
    +              TIMER_XTL_OFF
    +              Enable to record 40M XTAL OFF time
    +              28
    +              1
    +              read-write
    +            
    +            
    +              TIMER_SYS_RST
    +              enable to record system reset time
    +              29
    +              1
    +              read-write
    +            
    +            
    +              RTC_TIME_UPDATE
    +              Set 1: to update register with RTC timer
    +              31
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          TIME_LOW0
    +          rtc configure register
    +          0x10
    +          0x20
    +          
    +            
    +              RTC_TIMER_VALUE0_LOW
    +              RTC timer low 32 bits
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          TIME_HIGH0
    +          rtc configure register
    +          0x14
    +          0x20
    +          
    +            
    +              RTC_TIMER_VALUE0_HIGH
    +              RTC timer high 16 bits
    +              0
    +              16
    +              read-only
    +            
    +          
    +        
    +        
    +          STATE0
    +          rtc configure register
    +          0x18
    +          0x20
    +          
    +            
    +              RTC_SW_CPU_INT
    +              rtc software interrupt to main cpu
    +              0
    +              1
    +              write-only
    +            
    +            
    +              RTC_SLP_REJECT_CAUSE_CLR
    +              clear rtc sleep reject cause
    +              1
    +              1
    +              write-only
    +            
    +            
    +              APB2RTC_BRIDGE_SEL
    +              1: APB to RTC using bridge
    +              22
    +              1
    +              read-write
    +            
    +            
    +              SDIO_ACTIVE_IND
    +              SDIO active indication
    +              28
    +              1
    +              read-only
    +            
    +            
    +              SLP_WAKEUP
    +              leep wakeup bit
    +              29
    +              1
    +              read-write
    +            
    +            
    +              SLP_REJECT
    +              leep reject bit
    +              30
    +              1
    +              read-write
    +            
    +            
    +              SLEEP_EN
    +              sleep enable bit
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          TIMER1
    +          rtc configure register
    +          0x1C
    +          0x20
    +          0x28140403
    +          
    +            
    +              CPU_STALL_EN
    +              CPU stall enable bit
    +              0
    +              1
    +              read-write
    +            
    +            
    +              CPU_STALL_WAIT
    +              CPU stall wait cycles in fast_clk_rtc
    +              1
    +              5
    +              read-write
    +            
    +            
    +              CK8M_WAIT
    +              CK8M wait cycles in slow_clk_rtc
    +              6
    +              8
    +              read-write
    +            
    +            
    +              XTL_BUF_WAIT
    +              XTAL wait cycles in slow_clk_rtc
    +              14
    +              10
    +              read-write
    +            
    +            
    +              PLL_BUF_WAIT
    +              PLL wait cycles in slow_clk_rtc
    +              24
    +              8
    +              read-write
    +            
    +          
    +        
    +        
    +          TIMER2
    +          rtc configure register
    +          0x20
    +          0x20
    +          0x01000000
    +          
    +            
    +              MIN_TIME_CK8M_OFF
    +              minimal cycles in slow_clk_rtc for CK8M in power down state
    +              24
    +              8
    +              read-write
    +            
    +          
    +        
    +        
    +          TIMER3
    +          rtc configure register
    +          0x24
    +          0x20
    +          0x0A080A08
    +          
    +            
    +              WIFI_WAIT_TIMER
    +              wifi power domain wakeup time
    +              0
    +              9
    +              read-write
    +            
    +            
    +              WIFI_POWERUP_TIMER
    +              wifi power domain power on time
    +              9
    +              7
    +              read-write
    +            
    +            
    +              BT_WAIT_TIMER
    +              bt power domain wakeup time
    +              16
    +              9
    +              read-write
    +            
    +            
    +              BT_POWERUP_TIMER
    +              bt power domain power on time
    +              25
    +              7
    +              read-write
    +            
    +          
    +        
    +        
    +          TIMER4
    +          rtc configure register
    +          0x28
    +          0x20
    +          0x10200A08
    +          
    +            
    +              CPU_TOP_WAIT_TIMER
    +              cpu top power domain wakeup time
    +              0
    +              9
    +              read-write
    +            
    +            
    +              CPU_TOP_POWERUP_TIMER
    +              cpu top power domain power on time
    +              9
    +              7
    +              read-write
    +            
    +            
    +              DG_WRAP_WAIT_TIMER
    +              digital wrap power domain wakeup time
    +              16
    +              9
    +              read-write
    +            
    +            
    +              DG_WRAP_POWERUP_TIMER
    +              digital wrap power domain power on time
    +              25
    +              7
    +              read-write
    +            
    +          
    +        
    +        
    +          TIMER5
    +          rtc configure register
    +          0x2C
    +          0x20
    +          0x00008000
    +          
    +            
    +              MIN_SLP_VAL
    +              minimal sleep cycles in slow_clk_rtc
    +              8
    +              8
    +              read-write
    +            
    +          
    +        
    +        
    +          TIMER6
    +          rtc configure register
    +          0x30
    +          0x20
    +          0x0A080000
    +          
    +            
    +              DG_PERI_WAIT_TIMER
    +              digital peri power domain wakeup time
    +              16
    +              9
    +              read-write
    +            
    +            
    +              DG_PERI_POWERUP_TIMER
    +              digital peri power domain power on time
    +              25
    +              7
    +              read-write
    +            
    +          
    +        
    +        
    +          ANA_CONF
    +          rtc configure register
    +          0x34
    +          0x20
    +          0x00C40000
    +          
    +            
    +              RESET_POR_FORCE_PD
    +              force no bypass i2c power on reset
    +              18
    +              1
    +              read-write
    +            
    +            
    +              RESET_POR_FORCE_PU
    +              force bypass i2c power on reset
    +              19
    +              1
    +              read-write
    +            
    +            
    +              GLITCH_RST_EN
    +              enable glitch reset
    +              20
    +              1
    +              read-write
    +            
    +            
    +              SAR_I2C_PU
    +              PLLA force power up
    +              22
    +              1
    +              read-write
    +            
    +            
    +              PLLA_FORCE_PD
    +              PLLA force power down
    +              23
    +              1
    +              read-write
    +            
    +            
    +              PLLA_FORCE_PU
    +              PLLA force power up
    +              24
    +              1
    +              read-write
    +            
    +            
    +              BBPLL_CAL_SLP_START
    +              start BBPLL calibration during sleep
    +              25
    +              1
    +              read-write
    +            
    +            
    +              PVTMON_PU
    +              1: PVTMON power up
    +              26
    +              1
    +              read-write
    +            
    +            
    +              TXRF_I2C_PU
    +              1: TXRF_I2C power up
    +              27
    +              1
    +              read-write
    +            
    +            
    +              RFRX_PBUS_PU
    +              1: RFRX_PBUS power up
    +              28
    +              1
    +              read-write
    +            
    +            
    +              CKGEN_I2C_PU
    +              1: CKGEN_I2C power up
    +              30
    +              1
    +              read-write
    +            
    +            
    +              PLL_I2C_PU
    +              power up pll i2c
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          RESET_STATE
    +          rtc configure register
    +          0x38
    +          0x20
    +          0x00003000
    +          
    +            
    +              RESET_CAUSE_PROCPU
    +              reset cause of PRO CPU
    +              0
    +              6
    +              read-only
    +            
    +            
    +              RESET_CAUSE_APPCPU
    +              reset cause of APP CPU
    +              6
    +              6
    +              read-only
    +            
    +            
    +              STAT_VECTOR_SEL_APPCPU
    +              APP CPU state vector sel
    +              12
    +              1
    +              read-write
    +            
    +            
    +              STAT_VECTOR_SEL_PROCPU
    +              PRO CPU state vector sel
    +              13
    +              1
    +              read-write
    +            
    +            
    +              ALL_RESET_FLAG_PROCPU
    +              PRO CPU reset_flag
    +              14
    +              1
    +              read-only
    +            
    +            
    +              ALL_RESET_FLAG_APPCPU
    +              APP CPU reset flag
    +              15
    +              1
    +              read-only
    +            
    +            
    +              ALL_RESET_FLAG_CLR_PROCPU
    +              clear PRO CPU reset_flag
    +              16
    +              1
    +              write-only
    +            
    +            
    +              ALL_RESET_FLAG_CLR_APPCPU
    +              clear APP CPU reset flag
    +              17
    +              1
    +              write-only
    +            
    +            
    +              OCD_HALT_ON_RESET_APPCPU
    +              APPCPU OcdHaltOnReset
    +              18
    +              1
    +              read-write
    +            
    +            
    +              OCD_HALT_ON_RESET_PROCPU
    +              PROCPU OcdHaltOnReset
    +              19
    +              1
    +              read-write
    +            
    +            
    +              JTAG_RESET_FLAG_PROCPU
    +              configure jtag reset configure
    +              20
    +              1
    +              read-only
    +            
    +            
    +              JTAG_RESET_FLAG_APPCPU
    +              configure jtag reset configure
    +              21
    +              1
    +              read-only
    +            
    +            
    +              JTAG_RESET_FLAG_CLR_PROCPU
    +              configure jtag reset configure
    +              22
    +              1
    +              write-only
    +            
    +            
    +              JTAG_RESET_FLAG_CLR_APPCPU
    +              configure jtag reset configure
    +              23
    +              1
    +              write-only
    +            
    +            
    +              RTC_DRESET_MASK_APPCPU
    +              configure dreset configure
    +              24
    +              1
    +              read-write
    +            
    +            
    +              RTC_DRESET_MASK_PROCPU
    +              configure dreset configure
    +              25
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          WAKEUP_STATE
    +          rtc configure register
    +          0x3C
    +          0x20
    +          0x00060000
    +          
    +            
    +              RTC_WAKEUP_ENA
    +              wakeup enable bitmap
    +              15
    +              17
    +              read-write
    +            
    +          
    +        
    +        
    +          INT_ENA_RTC
    +          rtc configure register
    +          0x40
    +          0x20
    +          
    +            
    +              SLP_WAKEUP_INT_ENA
    +              enable sleep wakeup interrupt
    +              0
    +              1
    +              read-write
    +            
    +            
    +              SLP_REJECT_INT_ENA
    +              enable sleep reject interrupt
    +              1
    +              1
    +              read-write
    +            
    +            
    +              RTC_WDT_INT_ENA
    +              enable RTC WDT interrupt
    +              3
    +              1
    +              read-write
    +            
    +            
    +              RTC_BROWN_OUT_INT_ENA
    +              enable brown out interrupt
    +              9
    +              1
    +              read-write
    +            
    +            
    +              RTC_MAIN_TIMER_INT_ENA
    +              enable RTC main timer interrupt
    +              10
    +              1
    +              read-write
    +            
    +            
    +              RTC_SWD_INT_ENA
    +              enable super watch dog interrupt
    +              15
    +              1
    +              read-write
    +            
    +            
    +              RTC_XTAL32K_DEAD_INT_ENA
    +              enable xtal32k_dead  interrupt
    +              16
    +              1
    +              read-write
    +            
    +            
    +              RTC_GLITCH_DET_INT_ENA
    +              enbale gitch det interrupt
    +              19
    +              1
    +              read-write
    +            
    +            
    +              RTC_BBPLL_CAL_INT_ENA
    +              enbale bbpll cal end interrupt
    +              20
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          INT_RAW_RTC
    +          rtc configure register
    +          0x44
    +          0x20
    +          
    +            
    +              SLP_WAKEUP_INT_RAW
    +              sleep wakeup interrupt raw
    +              0
    +              1
    +              read-only
    +            
    +            
    +              SLP_REJECT_INT_RAW
    +              sleep reject interrupt raw
    +              1
    +              1
    +              read-only
    +            
    +            
    +              RTC_WDT_INT_RAW
    +              RTC WDT interrupt raw
    +              3
    +              1
    +              read-only
    +            
    +            
    +              RTC_BROWN_OUT_INT_RAW
    +              brown out interrupt raw
    +              9
    +              1
    +              read-only
    +            
    +            
    +              RTC_MAIN_TIMER_INT_RAW
    +              RTC main timer interrupt raw
    +              10
    +              1
    +              read-only
    +            
    +            
    +              RTC_SWD_INT_RAW
    +              super watch dog interrupt raw
    +              15
    +              1
    +              read-only
    +            
    +            
    +              RTC_XTAL32K_DEAD_INT_RAW
    +              xtal32k dead detection interrupt raw
    +              16
    +              1
    +              read-only
    +            
    +            
    +              RTC_GLITCH_DET_INT_RAW
    +              glitch_det_interrupt_raw
    +              19
    +              1
    +              read-only
    +            
    +            
    +              RTC_BBPLL_CAL_INT_RAW
    +              bbpll cal end interrupt state
    +              20
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_ST_RTC
    +          rtc configure register
    +          0x48
    +          0x20
    +          
    +            
    +              SLP_WAKEUP_INT_ST
    +              sleep wakeup interrupt state
    +              0
    +              1
    +              read-only
    +            
    +            
    +              SLP_REJECT_INT_ST
    +              sleep reject interrupt state
    +              1
    +              1
    +              read-only
    +            
    +            
    +              RTC_WDT_INT_ST
    +              RTC WDT interrupt state
    +              3
    +              1
    +              read-only
    +            
    +            
    +              RTC_BROWN_OUT_INT_ST
    +              brown out interrupt state
    +              9
    +              1
    +              read-only
    +            
    +            
    +              RTC_MAIN_TIMER_INT_ST
    +              RTC main timer interrupt state
    +              10
    +              1
    +              read-only
    +            
    +            
    +              RTC_SWD_INT_ST
    +              super watch dog interrupt state
    +              15
    +              1
    +              read-only
    +            
    +            
    +              RTC_XTAL32K_DEAD_INT_ST
    +              xtal32k dead detection interrupt state
    +              16
    +              1
    +              read-only
    +            
    +            
    +              RTC_GLITCH_DET_INT_ST
    +              glitch_det_interrupt state
    +              19
    +              1
    +              read-only
    +            
    +            
    +              RTC_BBPLL_CAL_INT_ST
    +              bbpll cal end interrupt state
    +              20
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_CLR_RTC
    +          rtc configure register
    +          0x4C
    +          0x20
    +          
    +            
    +              SLP_WAKEUP_INT_CLR
    +              Clear sleep wakeup interrupt state
    +              0
    +              1
    +              write-only
    +            
    +            
    +              SLP_REJECT_INT_CLR
    +              Clear sleep reject interrupt state
    +              1
    +              1
    +              write-only
    +            
    +            
    +              RTC_WDT_INT_CLR
    +              Clear RTC WDT interrupt state
    +              3
    +              1
    +              write-only
    +            
    +            
    +              RTC_BROWN_OUT_INT_CLR
    +              Clear brown out interrupt state
    +              9
    +              1
    +              write-only
    +            
    +            
    +              RTC_MAIN_TIMER_INT_CLR
    +              Clear RTC main timer interrupt state
    +              10
    +              1
    +              write-only
    +            
    +            
    +              RTC_SWD_INT_CLR
    +              Clear super watch dog interrupt state
    +              15
    +              1
    +              write-only
    +            
    +            
    +              RTC_XTAL32K_DEAD_INT_CLR
    +              Clear RTC WDT interrupt state
    +              16
    +              1
    +              write-only
    +            
    +            
    +              RTC_GLITCH_DET_INT_CLR
    +              Clear glitch det interrupt state
    +              19
    +              1
    +              write-only
    +            
    +            
    +              RTC_BBPLL_CAL_INT_CLR
    +              clear bbpll cal end interrupt state
    +              20
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          STORE0
    +          rtc configure register
    +          0x50
    +          0x20
    +          
    +            
    +              RTC_SCRATCH0
    +              reserved register
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          STORE1
    +          rtc configure register
    +          0x54
    +          0x20
    +          
    +            
    +              RTC_SCRATCH1
    +              reserved register
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          STORE2
    +          rtc configure register
    +          0x58
    +          0x20
    +          
    +            
    +              RTC_SCRATCH2
    +              reserved register
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          STORE3
    +          rtc configure register
    +          0x5C
    +          0x20
    +          
    +            
    +              RTC_SCRATCH3
    +              reserved register
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          EXT_XTL_CONF
    +          rtc configure register
    +          0x60
    +          0x20
    +          0x00066C80
    +          
    +            
    +              XTAL32K_WDT_EN
    +              xtal 32k watch dog enable
    +              0
    +              1
    +              read-write
    +            
    +            
    +              XTAL32K_WDT_CLK_FO
    +              xtal 32k watch dog clock force on
    +              1
    +              1
    +              read-write
    +            
    +            
    +              XTAL32K_WDT_RESET
    +              xtal 32k watch dog sw reset
    +              2
    +              1
    +              read-write
    +            
    +            
    +              XTAL32K_EXT_CLK_FO
    +              xtal 32k external xtal clock force on
    +              3
    +              1
    +              read-write
    +            
    +            
    +              XTAL32K_AUTO_BACKUP
    +              xtal 32k switch to back up clock when xtal is dead
    +              4
    +              1
    +              read-write
    +            
    +            
    +              XTAL32K_AUTO_RESTART
    +              xtal 32k restart xtal when xtal is dead
    +              5
    +              1
    +              read-write
    +            
    +            
    +              XTAL32K_AUTO_RETURN
    +              xtal 32k switch back xtal when xtal is restarted
    +              6
    +              1
    +              read-write
    +            
    +            
    +              XTAL32K_XPD_FORCE
    +              Xtal 32k xpd control by sw or fsm
    +              7
    +              1
    +              read-write
    +            
    +            
    +              ENCKINIT_XTAL_32K
    +              apply an internal clock to help xtal 32k to start
    +              8
    +              1
    +              read-write
    +            
    +            
    +              DBUF_XTAL_32K
    +              0: single-end buffer 1: differential buffer
    +              9
    +              1
    +              read-write
    +            
    +            
    +              DGM_XTAL_32K
    +              xtal_32k gm control
    +              10
    +              3
    +              read-write
    +            
    +            
    +              DRES_XTAL_32K
    +              DRES_XTAL_32K
    +              13
    +              3
    +              read-write
    +            
    +            
    +              XPD_XTAL_32K
    +              XPD_XTAL_32K
    +              16
    +              1
    +              read-write
    +            
    +            
    +              DAC_XTAL_32K
    +              DAC_XTAL_32K
    +              17
    +              3
    +              read-write
    +            
    +            
    +              RTC_WDT_STATE
    +              state of 32k_wdt
    +              20
    +              3
    +              read-only
    +            
    +            
    +              RTC_XTAL32K_GPIO_SEL
    +              XTAL_32K sel. 0: external XTAL_32K
    +              23
    +              1
    +              read-write
    +            
    +            
    +              XTL_EXT_CTR_LV
    +              0: power down XTAL at high level
    +              30
    +              1
    +              read-write
    +            
    +            
    +              XTL_EXT_CTR_EN
    +              enable gpio configure xtal power on
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          EXT_WAKEUP_CONF
    +          rtc configure register
    +          0x64
    +          0x20
    +          
    +            
    +              GPIO_WAKEUP_FILTER
    +              enable filter for gpio wakeup event
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          SLP_REJECT_CONF
    +          rtc configure register
    +          0x68
    +          0x20
    +          
    +            
    +              RTC_SLEEP_REJECT_ENA
    +              sleep reject enable
    +              12
    +              18
    +              read-write
    +            
    +            
    +              LIGHT_SLP_REJECT_EN
    +              enable reject for light sleep
    +              30
    +              1
    +              read-write
    +            
    +            
    +              DEEP_SLP_REJECT_EN
    +              enable reject for deep sleep
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_PERIOD_CONF
    +          rtc configure register
    +          0x6C
    +          0x20
    +          
    +            
    +              RTC_CPUSEL_CONF
    +              CPU sel option
    +              29
    +              1
    +              read-write
    +            
    +            
    +              RTC_CPUPERIOD_SEL
    +              CPU clk sel option
    +              30
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          CLK_CONF
    +          rtc configure register
    +          0x70
    +          0x20
    +          0x11583218
    +          
    +            
    +              EFUSE_CLK_FORCE_GATING
    +              efuse_clk_force_gating
    +              1
    +              1
    +              read-write
    +            
    +            
    +              EFUSE_CLK_FORCE_NOGATING
    +              efuse_clk_force_nogating
    +              2
    +              1
    +              read-write
    +            
    +            
    +              CK8M_DIV_SEL_VLD
    +              used to sync reg_ck8m_div_sel bus. Clear vld before set reg_ck8m_div_sel
    +              3
    +              1
    +              read-write
    +            
    +            
    +              CK8M_DIV
    +              CK8M_D256_OUT divider. 00: div128
    +              4
    +              2
    +              read-write
    +            
    +            
    +              ENB_CK8M
    +              disable CK8M and CK8M_D256_OUT
    +              6
    +              1
    +              read-write
    +            
    +            
    +              ENB_CK8M_DIV
    +              1: CK8M_D256_OUT is actually CK8M
    +              7
    +              1
    +              read-write
    +            
    +            
    +              DIG_XTAL32K_EN
    +              enable CK_XTAL_32K for digital core (no relationship with RTC core)
    +              8
    +              1
    +              read-write
    +            
    +            
    +              DIG_CLK8M_D256_EN
    +              enable CK8M_D256_OUT for digital core (no relationship with RTC core)
    +              9
    +              1
    +              read-write
    +            
    +            
    +              DIG_CLK8M_EN
    +              enable CK8M for digital core (no relationship with RTC core)
    +              10
    +              1
    +              read-write
    +            
    +            
    +              CK8M_DIV_SEL
    +              divider = reg_ck8m_div_sel + 1
    +              12
    +              3
    +              read-write
    +            
    +            
    +              XTAL_FORCE_NOGATING
    +              XTAL force no gating during sleep
    +              15
    +              1
    +              read-write
    +            
    +            
    +              CK8M_FORCE_NOGATING
    +              CK8M force no gating during sleep
    +              16
    +              1
    +              read-write
    +            
    +            
    +              CK8M_DFREQ
    +              CK8M_DFREQ
    +              17
    +              8
    +              read-write
    +            
    +            
    +              CK8M_FORCE_PD
    +              CK8M force power down
    +              25
    +              1
    +              read-write
    +            
    +            
    +              CK8M_FORCE_PU
    +              CK8M force power up
    +              26
    +              1
    +              read-write
    +            
    +            
    +              XTAL_GLOBAL_FORCE_GATING
    +              force enable xtal clk gating
    +              27
    +              1
    +              read-write
    +            
    +            
    +              XTAL_GLOBAL_FORCE_NOGATING
    +              force bypass xtal clk gating
    +              28
    +              1
    +              read-write
    +            
    +            
    +              FAST_CLK_RTC_SEL
    +              fast_clk_rtc sel. 0: XTAL div 4
    +              29
    +              1
    +              read-write
    +            
    +            
    +              ANA_CLK_RTC_SEL
    +              slelect rtc slow clk
    +              30
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          SLOW_CLK_CONF
    +          rtc configure register
    +          0x74
    +          0x20
    +          0x00400000
    +          
    +            
    +              RTC_ANA_CLK_DIV_VLD
    +              used to sync div bus. clear vld before set reg_rtc_ana_clk_div
    +              22
    +              1
    +              read-write
    +            
    +            
    +              RTC_ANA_CLK_DIV
    +              the clk divider num of RTC_CLK
    +              23
    +              8
    +              read-write
    +            
    +            
    +              RTC_SLOW_CLK_NEXT_EDGE
    +              flag rtc_slow_clk_next_edge
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          SDIO_CONF
    +          rtc configure register
    +          0x78
    +          0x20
    +          0x0AB0BE0A
    +          
    +            
    +              SDIO_TIMER_TARGET
    +              timer count to apply reg_sdio_dcap after sdio power on
    +              0
    +              8
    +              read-write
    +            
    +            
    +              SDIO_DTHDRV
    +              Tieh = 1 mode drive ability. Initially set to 0 to limit charge current
    +              9
    +              2
    +              read-write
    +            
    +            
    +              SDIO_DCAP
    +              ability to prevent LDO from overshoot
    +              11
    +              2
    +              read-write
    +            
    +            
    +              SDIO_INITI
    +              add resistor from ldo output to ground. 0: no res
    +              13
    +              2
    +              read-write
    +            
    +            
    +              SDIO_EN_INITI
    +              0 to set init[1:0]=0
    +              15
    +              1
    +              read-write
    +            
    +            
    +              SDIO_DCURLIM
    +              tune current limit threshold when tieh = 0. About 800mA/(8+d)
    +              16
    +              3
    +              read-write
    +            
    +            
    +              SDIO_MODECURLIM
    +              select current limit mode
    +              19
    +              1
    +              read-write
    +            
    +            
    +              SDIO_ENCURLIM
    +              enable current limit
    +              20
    +              1
    +              read-write
    +            
    +            
    +              SDIO_REG_PD_EN
    +              power down SDIO_REG in sleep. Only active when reg_sdio_force = 0
    +              21
    +              1
    +              read-write
    +            
    +            
    +              SDIO_FORCE
    +              1: use SW option to control SDIO_REG
    +              22
    +              1
    +              read-write
    +            
    +            
    +              SDIO_TIEH
    +              SW option for SDIO_TIEH. Only active when reg_sdio_force = 1
    +              23
    +              1
    +              read-write
    +            
    +            
    +              _1P8_READY
    +              read only register for REG1P8_READY
    +              24
    +              1
    +              read-only
    +            
    +            
    +              DREFL_SDIO
    +              SW option for DREFL_SDIO. Only active when reg_sdio_force = 1
    +              25
    +              2
    +              read-write
    +            
    +            
    +              DREFM_SDIO
    +              SW option for DREFM_SDIO. Only active when reg_sdio_force = 1
    +              27
    +              2
    +              read-write
    +            
    +            
    +              DREFH_SDIO
    +              SW option for DREFH_SDIO. Only active when reg_sdio_force = 1
    +              29
    +              2
    +              read-write
    +            
    +            
    +              XPD_SDIO
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          BIAS_CONF
    +          rtc configure register
    +          0x7C
    +          0x20
    +          0x00010800
    +          
    +            
    +              DG_VDD_DRV_B_SLP
    +              0
    +              8
    +              read-write
    +            
    +            
    +              DG_VDD_DRV_B_SLP_EN
    +              8
    +              1
    +              read-write
    +            
    +            
    +              BIAS_BUF_IDLE
    +              bias buf when rtc in normal work state
    +              10
    +              1
    +              read-write
    +            
    +            
    +              BIAS_BUF_WAKE
    +              bias buf when rtc in wakeup state
    +              11
    +              1
    +              read-write
    +            
    +            
    +              BIAS_BUF_DEEP_SLP
    +              bias buf when rtc in sleep state
    +              12
    +              1
    +              read-write
    +            
    +            
    +              BIAS_BUF_MONITOR
    +              bias buf when rtc in monitor state
    +              13
    +              1
    +              read-write
    +            
    +            
    +              PD_CUR_DEEP_SLP
    +              xpd cur when rtc in sleep_state
    +              14
    +              1
    +              read-write
    +            
    +            
    +              PD_CUR_MONITOR
    +              xpd cur when rtc in monitor state
    +              15
    +              1
    +              read-write
    +            
    +            
    +              BIAS_SLEEP_DEEP_SLP
    +              bias_sleep when rtc in sleep_state
    +              16
    +              1
    +              read-write
    +            
    +            
    +              BIAS_SLEEP_MONITOR
    +              bias_sleep when rtc in monitor state
    +              17
    +              1
    +              read-write
    +            
    +            
    +              DBG_ATTEN_DEEP_SLP
    +              DBG_ATTEN when rtc in sleep state
    +              18
    +              4
    +              read-write
    +            
    +            
    +              DBG_ATTEN_MONITOR
    +              DBG_ATTEN when rtc in monitor state
    +              22
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          RTC_CNTL
    +          rtc configure register
    +          0x80
    +          0x20
    +          0xA0000000
    +          
    +            
    +              DIG_REG_CAL_EN
    +              software enable digital regulator cali
    +              7
    +              1
    +              read-write
    +            
    +            
    +              SCK_DCAP
    +              SCK_DCAP
    +              14
    +              8
    +              read-write
    +            
    +            
    +              DBOOST_FORCE_PD
    +              RTC_DBOOST force power down
    +              28
    +              1
    +              read-write
    +            
    +            
    +              DBOOST_FORCE_PU
    +              RTC_DBOOST force power up
    +              29
    +              1
    +              read-write
    +            
    +            
    +              REGULATOR_FORCE_PD
    +              RTC_REG force power down (for RTC_REG power down means decrease the voltage to 0.8v or lower )
    +              30
    +              1
    +              read-write
    +            
    +            
    +              REGULATOR_FORCE_PU
    +              RTC_REG force power up
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          PWC
    +          rtc configure register
    +          0x84
    +          0x20
    +          
    +            
    +              RTC_PAD_FORCE_HOLD
    +              rtc pad force hold
    +              21
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DIG_PWC
    +          rtc configure register
    +          0x88
    +          0x20
    +          0x00555010
    +          
    +            
    +              VDD_SPI_PWR_DRV
    +              vdd_spi drv's software value
    +              0
    +              2
    +              read-write
    +            
    +            
    +              VDD_SPI_PWR_FORCE
    +              vdd_spi drv use software value
    +              2
    +              1
    +              read-write
    +            
    +            
    +              LSLP_MEM_FORCE_PD
    +              memories in digital core force PD in sleep
    +              3
    +              1
    +              read-write
    +            
    +            
    +              LSLP_MEM_FORCE_PU
    +              memories in digital core force PU in sleep
    +              4
    +              1
    +              read-write
    +            
    +            
    +              BT_FORCE_PD
    +              bt force power down
    +              11
    +              1
    +              read-write
    +            
    +            
    +              BT_FORCE_PU
    +              bt force power up
    +              12
    +              1
    +              read-write
    +            
    +            
    +              DG_PERI_FORCE_PD
    +              digital peri force power down
    +              13
    +              1
    +              read-write
    +            
    +            
    +              DG_PERI_FORCE_PU
    +              digital peri force power up
    +              14
    +              1
    +              read-write
    +            
    +            
    +              RTC_FASTMEM_FORCE_LPD
    +              fastmemory  retention mode in sleep
    +              15
    +              1
    +              read-write
    +            
    +            
    +              RTC_FASTMEM_FORCE_LPU
    +              fastmemory donlt entry retention mode in sleep
    +              16
    +              1
    +              read-write
    +            
    +            
    +              WIFI_FORCE_PD
    +              wifi force power down
    +              17
    +              1
    +              read-write
    +            
    +            
    +              WIFI_FORCE_PU
    +              wifi force power up
    +              18
    +              1
    +              read-write
    +            
    +            
    +              DG_WRAP_FORCE_PD
    +              digital core force power down
    +              19
    +              1
    +              read-write
    +            
    +            
    +              DG_WRAP_FORCE_PU
    +              digital core force power up
    +              20
    +              1
    +              read-write
    +            
    +            
    +              CPU_TOP_FORCE_PD
    +              cpu core force power down
    +              21
    +              1
    +              read-write
    +            
    +            
    +              CPU_TOP_FORCE_PU
    +              cpu force power up
    +              22
    +              1
    +              read-write
    +            
    +            
    +              BT_PD_EN
    +              enable power down bt in sleep
    +              27
    +              1
    +              read-write
    +            
    +            
    +              DG_PERI_PD_EN
    +              enable power down digital peri in sleep
    +              28
    +              1
    +              read-write
    +            
    +            
    +              CPU_TOP_PD_EN
    +              enable power down cpu in sleep
    +              29
    +              1
    +              read-write
    +            
    +            
    +              WIFI_PD_EN
    +              enable power down wifi in sleep
    +              30
    +              1
    +              read-write
    +            
    +            
    +              DG_WRAP_PD_EN
    +              enable power down digital wrap in sleep
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DIG_ISO
    +          rtc configure register
    +          0x8C
    +          0x20
    +          0xAA805080
    +          
    +            
    +              FORCE_OFF
    +              DIG_ISO force off
    +              7
    +              1
    +              read-write
    +            
    +            
    +              FORCE_ON
    +              DIG_ISO force on
    +              8
    +              1
    +              read-write
    +            
    +            
    +              DG_PAD_AUTOHOLD
    +              read only register to indicate digital pad auto-hold status
    +              9
    +              1
    +              read-only
    +            
    +            
    +              CLR_DG_PAD_AUTOHOLD
    +              wtite only register to clear digital pad auto-hold
    +              10
    +              1
    +              write-only
    +            
    +            
    +              DG_PAD_AUTOHOLD_EN
    +              digital pad enable auto-hold
    +              11
    +              1
    +              read-write
    +            
    +            
    +              DG_PAD_FORCE_NOISO
    +              digital pad force no ISO
    +              12
    +              1
    +              read-write
    +            
    +            
    +              DG_PAD_FORCE_ISO
    +              digital pad force ISO
    +              13
    +              1
    +              read-write
    +            
    +            
    +              DG_PAD_FORCE_UNHOLD
    +              digital pad force un-hold
    +              14
    +              1
    +              read-write
    +            
    +            
    +              DG_PAD_FORCE_HOLD
    +              digital pad force hold
    +              15
    +              1
    +              read-write
    +            
    +            
    +              BT_FORCE_ISO
    +              bt force ISO
    +              22
    +              1
    +              read-write
    +            
    +            
    +              BT_FORCE_NOISO
    +              bt force no ISO
    +              23
    +              1
    +              read-write
    +            
    +            
    +              DG_PERI_FORCE_ISO
    +              Digital peri force ISO
    +              24
    +              1
    +              read-write
    +            
    +            
    +              DG_PERI_FORCE_NOISO
    +              digital peri force no ISO
    +              25
    +              1
    +              read-write
    +            
    +            
    +              CPU_TOP_FORCE_ISO
    +              cpu force ISO
    +              26
    +              1
    +              read-write
    +            
    +            
    +              CPU_TOP_FORCE_NOISO
    +              cpu force no ISO
    +              27
    +              1
    +              read-write
    +            
    +            
    +              WIFI_FORCE_ISO
    +              wifi force ISO
    +              28
    +              1
    +              read-write
    +            
    +            
    +              WIFI_FORCE_NOISO
    +              wifi force no ISO
    +              29
    +              1
    +              read-write
    +            
    +            
    +              DG_WRAP_FORCE_ISO
    +              digital core force ISO
    +              30
    +              1
    +              read-write
    +            
    +            
    +              DG_WRAP_FORCE_NOISO
    +              digital core force no ISO
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          WDTCONFIG0
    +          rtc configure register
    +          0x90
    +          0x20
    +          0x00013214
    +          
    +            
    +              WDT_CHIP_RESET_WIDTH
    +              chip reset siginal pulse width
    +              0
    +              8
    +              read-write
    +            
    +            
    +              WDT_CHIP_RESET_EN
    +              wdt reset whole chip enable
    +              8
    +              1
    +              read-write
    +            
    +            
    +              WDT_PAUSE_IN_SLP
    +              pause WDT in sleep
    +              9
    +              1
    +              read-write
    +            
    +            
    +              WDT_APPCPU_RESET_EN
    +              enable WDT reset APP CPU
    +              10
    +              1
    +              read-write
    +            
    +            
    +              WDT_PROCPU_RESET_EN
    +              enable WDT reset PRO CPU
    +              11
    +              1
    +              read-write
    +            
    +            
    +              WDT_FLASHBOOT_MOD_EN
    +              enable WDT in flash boot
    +              12
    +              1
    +              read-write
    +            
    +            
    +              WDT_SYS_RESET_LENGTH
    +              system reset counter length
    +              13
    +              3
    +              read-write
    +            
    +            
    +              WDT_CPU_RESET_LENGTH
    +              CPU reset counter length
    +              16
    +              3
    +              read-write
    +            
    +            
    +              WDT_STG3
    +              1: interrupt stage en
    +              19
    +              3
    +              read-write
    +            
    +            
    +              WDT_STG2
    +              1: interrupt stage en
    +              22
    +              3
    +              read-write
    +            
    +            
    +              WDT_STG1
    +              1: interrupt stage en
    +              25
    +              3
    +              read-write
    +            
    +            
    +              WDT_STG0
    +              1: interrupt stage en
    +              28
    +              3
    +              read-write
    +            
    +            
    +              WDT_EN
    +              enable rtc wdt
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          WDTCONFIG1
    +          rtc configure register
    +          0x94
    +          0x20
    +          0x00030D40
    +          
    +            
    +              WDT_STG0_HOLD
    +              the hold time of stage0
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          WDTCONFIG2
    +          rtc configure register
    +          0x98
    +          0x20
    +          0x00013880
    +          
    +            
    +              WDT_STG1_HOLD
    +              the hold time of stage1
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          WDTCONFIG3
    +          rtc configure register
    +          0x9C
    +          0x20
    +          0x00000FFF
    +          
    +            
    +              WDT_STG2_HOLD
    +              the hold time of stage2
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          WDTCONFIG4
    +          rtc configure register
    +          0xA0
    +          0x20
    +          0x00000FFF
    +          
    +            
    +              WDT_STG3_HOLD
    +              the hold time of stage3
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          WDTFEED
    +          rtc configure register
    +          0xA4
    +          0x20
    +          
    +            
    +              RTC_WDT_FEED
    +              sw feed rtc wdt
    +              31
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          WDTWPROTECT
    +          rtc configure register
    +          0xA8
    +          0x20
    +          
    +            
    +              WDT_WKEY
    +              the key of rtc wdt
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          SWD_CONF
    +          rtc configure register
    +          0xAC
    +          0x20
    +          0x04B00000
    +          
    +            
    +              SWD_RESET_FLAG
    +              swd reset flag
    +              0
    +              1
    +              read-only
    +            
    +            
    +              SWD_FEED_INT
    +              swd interrupt for feeding
    +              1
    +              1
    +              read-only
    +            
    +            
    +              SWD_BYPASS_RST
    +              Bypass swd rst
    +              17
    +              1
    +              read-write
    +            
    +            
    +              SWD_SIGNAL_WIDTH
    +              adjust signal width send to swd
    +              18
    +              10
    +              read-write
    +            
    +            
    +              SWD_RST_FLAG_CLR
    +              reset swd reset flag
    +              28
    +              1
    +              write-only
    +            
    +            
    +              SWD_FEED
    +              Sw feed swd
    +              29
    +              1
    +              write-only
    +            
    +            
    +              SWD_DISABLE
    +              disabel SWD
    +              30
    +              1
    +              read-write
    +            
    +            
    +              SWD_AUTO_FEED_EN
    +              automatically feed swd when int comes
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          SWD_WPROTECT
    +          rtc configure register
    +          0xB0
    +          0x20
    +          
    +            
    +              SWD_WKEY
    +              the key of super wdt
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          SW_CPU_STALL
    +          rtc configure register
    +          0xB4
    +          0x20
    +          
    +            
    +              SW_STALL_APPCPU_C1
    +              {reg_sw_stall_appcpu_c1[5:0]
    +              20
    +              6
    +              read-write
    +            
    +            
    +              SW_STALL_PROCPU_C1
    +              stall cpu by software
    +              26
    +              6
    +              read-write
    +            
    +          
    +        
    +        
    +          STORE4
    +          rtc configure register
    +          0xB8
    +          0x20
    +          
    +            
    +              RTC_SCRATCH4
    +              reserved register
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          STORE5
    +          rtc configure register
    +          0xBC
    +          0x20
    +          
    +            
    +              RTC_SCRATCH5
    +              reserved register
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          STORE6
    +          rtc configure register
    +          0xC0
    +          0x20
    +          
    +            
    +              RTC_SCRATCH6
    +              reserved register
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          STORE7
    +          rtc configure register
    +          0xC4
    +          0x20
    +          
    +            
    +              RTC_SCRATCH7
    +              reserved register
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          LOW_POWER_ST
    +          rtc configure register
    +          0xC8
    +          0x20
    +          
    +            
    +              XPD_ROM0
    +              rom0 power down
    +              0
    +              1
    +              read-only
    +            
    +            
    +              XPD_DIG_DCDC
    +              External DCDC power down
    +              2
    +              1
    +              read-only
    +            
    +            
    +              RTC_PERI_ISO
    +              rtc peripheral iso
    +              3
    +              1
    +              read-only
    +            
    +            
    +              XPD_RTC_PERI
    +              rtc peripheral power down
    +              4
    +              1
    +              read-only
    +            
    +            
    +              WIFI_ISO
    +              wifi iso
    +              5
    +              1
    +              read-only
    +            
    +            
    +              XPD_WIFI
    +              wifi wrap power down
    +              6
    +              1
    +              read-only
    +            
    +            
    +              DIG_ISO
    +              digital wrap iso
    +              7
    +              1
    +              read-only
    +            
    +            
    +              XPD_DIG
    +              digital wrap power down
    +              8
    +              1
    +              read-only
    +            
    +            
    +              RTC_TOUCH_STATE_START
    +              touch should start to work
    +              9
    +              1
    +              read-only
    +            
    +            
    +              RTC_TOUCH_STATE_SWITCH
    +              touch is about to working. Switch rtc main state
    +              10
    +              1
    +              read-only
    +            
    +            
    +              RTC_TOUCH_STATE_SLP
    +              touch is in sleep state
    +              11
    +              1
    +              read-only
    +            
    +            
    +              RTC_TOUCH_STATE_DONE
    +              touch is done
    +              12
    +              1
    +              read-only
    +            
    +            
    +              RTC_COCPU_STATE_START
    +              ulp/cocpu should start to work
    +              13
    +              1
    +              read-only
    +            
    +            
    +              RTC_COCPU_STATE_SWITCH
    +              ulp/cocpu is about to working. Switch rtc main state
    +              14
    +              1
    +              read-only
    +            
    +            
    +              RTC_COCPU_STATE_SLP
    +              ulp/cocpu is in sleep state
    +              15
    +              1
    +              read-only
    +            
    +            
    +              RTC_COCPU_STATE_DONE
    +              ulp/cocpu is done
    +              16
    +              1
    +              read-only
    +            
    +            
    +              RTC_MAIN_STATE_XTAL_ISO
    +              no use any more
    +              17
    +              1
    +              read-only
    +            
    +            
    +              RTC_MAIN_STATE_PLL_ON
    +              rtc main state machine is in states that pll should be running
    +              18
    +              1
    +              read-only
    +            
    +            
    +              RTC_RDY_FOR_WAKEUP
    +              rtc is ready to receive wake up trigger from wake up source
    +              19
    +              1
    +              read-only
    +            
    +            
    +              RTC_MAIN_STATE_WAIT_END
    +              rtc main state machine has been waited for some cycles
    +              20
    +              1
    +              read-only
    +            
    +            
    +              RTC_IN_WAKEUP_STATE
    +              rtc main state machine is in the states of wakeup process
    +              21
    +              1
    +              read-only
    +            
    +            
    +              RTC_IN_LOW_POWER_STATE
    +              rtc main state machine is in the states of low power
    +              22
    +              1
    +              read-only
    +            
    +            
    +              RTC_MAIN_STATE_IN_WAIT_8M
    +              rtc main state machine is in wait 8m state
    +              23
    +              1
    +              read-only
    +            
    +            
    +              RTC_MAIN_STATE_IN_WAIT_PLL
    +              rtc main state machine is in wait pll state
    +              24
    +              1
    +              read-only
    +            
    +            
    +              RTC_MAIN_STATE_IN_WAIT_XTL
    +              rtc main state machine is in wait xtal state
    +              25
    +              1
    +              read-only
    +            
    +            
    +              RTC_MAIN_STATE_IN_SLP
    +              rtc main state machine is in sleep state
    +              26
    +              1
    +              read-only
    +            
    +            
    +              RTC_MAIN_STATE_IN_IDLE
    +              rtc main state machine is in idle state
    +              27
    +              1
    +              read-only
    +            
    +            
    +              RTC_MAIN_STATE
    +              rtc main state machine status
    +              28
    +              4
    +              read-only
    +            
    +          
    +        
    +        
    +          DIAG0
    +          rtc configure register
    +          0xCC
    +          0x20
    +          
    +            
    +              RTC_LOW_POWER_DIAG1
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          PAD_HOLD
    +          rtc configure register
    +          0xD0
    +          0x20
    +          
    +            
    +              RTC_GPIO_PIN0_HOLD
    +              the hold configure of rtc gpio0
    +              0
    +              1
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN1_HOLD
    +              the hold configure of rtc gpio1
    +              1
    +              1
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN2_HOLD
    +              the hold configure of rtc gpio2
    +              2
    +              1
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN3_HOLD
    +              the hold configure of rtc gpio3
    +              3
    +              1
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN4_HOLD
    +              the hold configure of rtc gpio4
    +              4
    +              1
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN5_HOLD
    +              the hold configure of rtc gpio5
    +              5
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DIG_PAD_HOLD
    +          rtc configure register
    +          0xD4
    +          0x20
    +          
    +            
    +              DIG_PAD_HOLD
    +              the configure of digital pad
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          BROWN_OUT
    +          rtc configure register
    +          0xD8
    +          0x20
    +          0x43FF0010
    +          
    +            
    +              INT_WAIT
    +              brown out interrupt wait cycles
    +              4
    +              10
    +              read-write
    +            
    +            
    +              CLOSE_FLASH_ENA
    +              enable close flash when brown out happens
    +              14
    +              1
    +              read-write
    +            
    +            
    +              PD_RF_ENA
    +              enable power down RF when brown out happens
    +              15
    +              1
    +              read-write
    +            
    +            
    +              RST_WAIT
    +              brown out reset wait cycles
    +              16
    +              10
    +              read-write
    +            
    +            
    +              RST_ENA
    +              enable brown out reset
    +              26
    +              1
    +              read-write
    +            
    +            
    +              RST_SEL
    +              1:  4-pos reset
    +              27
    +              1
    +              read-write
    +            
    +            
    +              ANA_RST_EN
    +              brown_out origin reset enable
    +              28
    +              1
    +              read-write
    +            
    +            
    +              CNT_CLR
    +              clear brown out counter
    +              29
    +              1
    +              write-only
    +            
    +            
    +              ENA
    +              enable brown out
    +              30
    +              1
    +              read-write
    +            
    +            
    +              DET
    +              the flag of brown det from analog
    +              31
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          TIME_LOW1
    +          rtc configure register
    +          0xDC
    +          0x20
    +          
    +            
    +              RTC_TIMER_VALUE1_LOW
    +              RTC timer low 32 bits
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          TIME_HIGH1
    +          rtc configure register
    +          0xE0
    +          0x20
    +          
    +            
    +              RTC_TIMER_VALUE1_HIGH
    +              RTC timer high 16 bits
    +              0
    +              16
    +              read-only
    +            
    +          
    +        
    +        
    +          XTAL32K_CLK_FACTOR
    +          rtc configure register
    +          0xE4
    +          0x20
    +          
    +            
    +              XTAL32K_CLK_FACTOR
    +              xtal 32k watch dog backup clock factor
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          XTAL32K_CONF
    +          rtc configure register
    +          0xE8
    +          0x20
    +          0x0FF00000
    +          
    +            
    +              XTAL32K_RETURN_WAIT
    +              cycles to wait to return noral xtal 32k
    +              0
    +              4
    +              read-write
    +            
    +            
    +              XTAL32K_RESTART_WAIT
    +              cycles to wait to repower on xtal 32k
    +              4
    +              16
    +              read-write
    +            
    +            
    +              XTAL32K_WDT_TIMEOUT
    +              If no clock detected for this amount of time
    +              20
    +              8
    +              read-write
    +            
    +            
    +              XTAL32K_STABLE_THRES
    +              if restarted xtal32k period is smaller than this
    +              28
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          USB_CONF
    +          rtc configure register
    +          0xEC
    +          0x20
    +          
    +            
    +              IO_MUX_RESET_DISABLE
    +              disable io_mux reset
    +              18
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          SLP_REJECT_CAUSE
    +          RTC_CNTL_RTC_SLP_REJECT_CAUSE_REG
    +          0xF0
    +          0x20
    +          
    +            
    +              REJECT_CAUSE
    +              sleep reject cause
    +              0
    +              18
    +              read-only
    +            
    +          
    +        
    +        
    +          OPTION1
    +          rtc configure register
    +          0xF4
    +          0x20
    +          
    +            
    +              FORCE_DOWNLOAD_BOOT
    +              force chip entry download mode
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          SLP_WAKEUP_CAUSE
    +          RTC_CNTL_RTC_SLP_WAKEUP_CAUSE_REG
    +          0xF8
    +          0x20
    +          
    +            
    +              WAKEUP_CAUSE
    +              sleep wakeup cause
    +              0
    +              17
    +              read-only
    +            
    +          
    +        
    +        
    +          ULP_CP_TIMER_1
    +          rtc configure register
    +          0xFC
    +          0x20
    +          0x0000C800
    +          
    +            
    +              ULP_CP_TIMER_SLP_CYCLE
    +              sleep cycles for ULP-coprocessor timer
    +              8
    +              24
    +              read-write
    +            
    +          
    +        
    +        
    +          INT_ENA_RTC_W1TS
    +          rtc configure register
    +          0x100
    +          0x20
    +          
    +            
    +              SLP_WAKEUP_INT_ENA_W1TS
    +              enable sleep wakeup interrupt
    +              0
    +              1
    +              write-only
    +            
    +            
    +              SLP_REJECT_INT_ENA_W1TS
    +              enable sleep reject interrupt
    +              1
    +              1
    +              write-only
    +            
    +            
    +              RTC_WDT_INT_ENA_W1TS
    +              enable RTC WDT interrupt
    +              3
    +              1
    +              write-only
    +            
    +            
    +              RTC_BROWN_OUT_INT_ENA_W1TS
    +              enable brown out interrupt
    +              9
    +              1
    +              write-only
    +            
    +            
    +              RTC_MAIN_TIMER_INT_ENA_W1TS
    +              enable RTC main timer interrupt
    +              10
    +              1
    +              write-only
    +            
    +            
    +              RTC_SWD_INT_ENA_W1TS
    +              enable super watch dog interrupt
    +              15
    +              1
    +              write-only
    +            
    +            
    +              RTC_XTAL32K_DEAD_INT_ENA_W1TS
    +              enable xtal32k_dead  interrupt
    +              16
    +              1
    +              write-only
    +            
    +            
    +              RTC_GLITCH_DET_INT_ENA_W1TS
    +              enbale gitch det interrupt
    +              19
    +              1
    +              write-only
    +            
    +            
    +              RTC_BBPLL_CAL_INT_ENA_W1TS
    +              enbale bbpll cal interrupt
    +              20
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          INT_ENA_RTC_W1TC
    +          rtc configure register
    +          0x104
    +          0x20
    +          
    +            
    +              SLP_WAKEUP_INT_ENA_W1TC
    +              clear sleep wakeup interrupt enable
    +              0
    +              1
    +              write-only
    +            
    +            
    +              SLP_REJECT_INT_ENA_W1TC
    +              clear sleep reject interrupt enable
    +              1
    +              1
    +              write-only
    +            
    +            
    +              RTC_WDT_INT_ENA_W1TC
    +              clear RTC WDT interrupt enable
    +              3
    +              1
    +              write-only
    +            
    +            
    +              RTC_BROWN_OUT_INT_ENA_W1TC
    +              clear brown out interrupt enable
    +              9
    +              1
    +              write-only
    +            
    +            
    +              RTC_MAIN_TIMER_INT_ENA_W1TC
    +              Clear RTC main timer interrupt enable
    +              10
    +              1
    +              write-only
    +            
    +            
    +              RTC_SWD_INT_ENA_W1TC
    +              clear super watch dog interrupt enable
    +              15
    +              1
    +              write-only
    +            
    +            
    +              RTC_XTAL32K_DEAD_INT_ENA_W1TC
    +              clear xtal32k_dead  interrupt enable
    +              16
    +              1
    +              write-only
    +            
    +            
    +              RTC_GLITCH_DET_INT_ENA_W1TC
    +              clear gitch det interrupt enable
    +              19
    +              1
    +              write-only
    +            
    +            
    +              RTC_BBPLL_CAL_INT_ENA_W1TC
    +              clear bbpll cal interrupt enable
    +              20
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          RETENTION_CTRL
    +          rtc configure register
    +          0x108
    +          0x20
    +          0xA0D00000
    +          
    +            
    +              RETENTION_CLK_SEL
    +              Retention clk sel
    +              18
    +              1
    +              read-write
    +            
    +            
    +              RETENTION_DONE_WAIT
    +              Retention done wait time
    +              19
    +              3
    +              read-write
    +            
    +            
    +              RETENTION_CLKOFF_WAIT
    +              Retention clkoff wait time
    +              22
    +              4
    +              read-write
    +            
    +            
    +              RETENTION_EN
    +              enable cpu retention when light sleep
    +              26
    +              1
    +              read-write
    +            
    +            
    +              RETENTION_WAIT
    +              wait cycles for rention operation
    +              27
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          FIB_SEL
    +          rtc configure register
    +          0x10C
    +          0x20
    +          0x00000007
    +          
    +            
    +              RTC_FIB_SEL
    +              select use analog fib signal
    +              0
    +              3
    +              read-write
    +            
    +          
    +        
    +        
    +          GPIO_WAKEUP
    +          rtc configure register
    +          0x110
    +          0x20
    +          
    +            
    +              RTC_GPIO_WAKEUP_STATUS
    +              rtc gpio wakeup flag
    +              0
    +              6
    +              read-only
    +            
    +            
    +              RTC_GPIO_WAKEUP_STATUS_CLR
    +              clear rtc gpio wakeup flag
    +              6
    +              1
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN_CLK_GATE
    +              enable rtc io clk gate
    +              7
    +              1
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN5_INT_TYPE
    +              configure gpio wakeup type
    +              8
    +              3
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN4_INT_TYPE
    +              configure gpio wakeup type
    +              11
    +              3
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN3_INT_TYPE
    +              configure gpio wakeup type
    +              14
    +              3
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN2_INT_TYPE
    +              configure gpio wakeup type
    +              17
    +              3
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN1_INT_TYPE
    +              configure gpio wakeup type
    +              20
    +              3
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN0_INT_TYPE
    +              configure gpio wakeup type
    +              23
    +              3
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN5_WAKEUP_ENABLE
    +              enable wakeup from rtc gpio5
    +              26
    +              1
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN4_WAKEUP_ENABLE
    +              enable wakeup from rtc gpio4
    +              27
    +              1
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN3_WAKEUP_ENABLE
    +              enable wakeup from rtc gpio3
    +              28
    +              1
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN2_WAKEUP_ENABLE
    +              enable wakeup from rtc gpio2
    +              29
    +              1
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN1_WAKEUP_ENABLE
    +              enable wakeup from rtc gpio1
    +              30
    +              1
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN0_WAKEUP_ENABLE
    +              enable wakeup from rtc gpio0
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DBG_SEL
    +          rtc configure register
    +          0x114
    +          0x20
    +          
    +            
    +              RTC_DEBUG_12M_NO_GATING
    +              use for debug
    +              1
    +              1
    +              read-write
    +            
    +            
    +              RTC_DEBUG_BIT_SEL
    +              use for debug
    +              2
    +              5
    +              read-write
    +            
    +            
    +              RTC_DEBUG_SEL0
    +              use for debug
    +              7
    +              5
    +              read-write
    +            
    +            
    +              RTC_DEBUG_SEL1
    +              use for debug
    +              12
    +              5
    +              read-write
    +            
    +            
    +              RTC_DEBUG_SEL2
    +              use for debug
    +              17
    +              5
    +              read-write
    +            
    +            
    +              RTC_DEBUG_SEL3
    +              use for debug
    +              22
    +              5
    +              read-write
    +            
    +            
    +              RTC_DEBUG_SEL4
    +              use for debug
    +              27
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          DBG_MAP
    +          rtc configure register
    +          0x118
    +          0x20
    +          
    +            
    +              RTC_GPIO_PIN5_MUX_SEL
    +              use for debug
    +              2
    +              1
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN4_MUX_SEL
    +              use for debug
    +              3
    +              1
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN3_MUX_SEL
    +              use for debug
    +              4
    +              1
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN2_MUX_SEL
    +              use for debug
    +              5
    +              1
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN1_MUX_SEL
    +              use for debug
    +              6
    +              1
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN0_MUX_SEL
    +              use for debug
    +              7
    +              1
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN5_FUN_SEL
    +              use for debug
    +              8
    +              4
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN4_FUN_SEL
    +              use for debug
    +              12
    +              4
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN3_FUN_SEL
    +              use for debug
    +              16
    +              4
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN2_FUN_SEL
    +              use for debug
    +              20
    +              4
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN1_FUN_SEL
    +              use for debug
    +              24
    +              4
    +              read-write
    +            
    +            
    +              RTC_GPIO_PIN0_FUN_SEL
    +              use for debug
    +              28
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          SENSOR_CTRL
    +          rtc configure register
    +          0x11C
    +          0x20
    +          
    +            
    +              SAR2_PWDET_CCT
    +              reg_sar2_pwdet_cct
    +              27
    +              3
    +              read-write
    +            
    +            
    +              FORCE_XPD_SAR
    +              force power up SAR
    +              30
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          DBG_SAR_SEL
    +          rtc configure register
    +          0x120
    +          0x20
    +          
    +            
    +              SAR_DEBUG_SEL
    +              use for debug
    +              27
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          PG_CTRL
    +          rtc configure register
    +          0x124
    +          0x20
    +          
    +            
    +              POWER_GLITCH_DSENSE
    +              power glitch desense
    +              26
    +              2
    +              read-write
    +            
    +            
    +              POWER_GLITCH_FORCE_PD
    +              force disable power glitch
    +              28
    +              1
    +              read-write
    +            
    +            
    +              POWER_GLITCH_FORCE_PU
    +              force enable power glitch
    +              29
    +              1
    +              read-write
    +            
    +            
    +              POWER_GLITCH_EFUSE_SEL
    +              use efuse value control power glitch enable
    +              30
    +              1
    +              read-write
    +            
    +            
    +              POWER_GLITCH_EN
    +              enable power glitch
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DATE
    +          rtc configure register
    +          0x1FC
    +          0x20
    +          0x02007270
    +          
    +            
    +              RTC_CNTL_DATE
    +              verision
    +              0
    +              28
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      SENSITIVE
    +      Sensitive
    +      SENSITIVE
    +      0x600C1000
    +      
    +        0x0
    +        0x178
    +        registers
    +      
    +      
    +        
    +          ROM_TABLE_LOCK
    +          SENSITIVE_ROM_TABLE_LOCK_REG
    +          0x0
    +          0x20
    +          
    +            
    +              ROM_TABLE_LOCK
    +              rom_table_lock
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          ROM_TABLE
    +          SENSITIVE_ROM_TABLE_REG
    +          0x4
    +          0x20
    +          
    +            
    +              ROM_TABLE
    +              rom_table
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          PRIVILEGE_MODE_SEL_LOCK
    +          SENSITIVE_PRIVILEGE_MODE_SEL_LOCK_REG
    +          0x8
    +          0x20
    +          
    +            
    +              PRIVILEGE_MODE_SEL_LOCK
    +              privilege_mode_sel_lock
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          PRIVILEGE_MODE_SEL
    +          SENSITIVE_PRIVILEGE_MODE_SEL_REG
    +          0xC
    +          0x20
    +          
    +            
    +              PRIVILEGE_MODE_SEL
    +              privilege_mode_sel
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          APB_PERIPHERAL_ACCESS_0
    +          SENSITIVE_APB_PERIPHERAL_ACCESS_0_REG
    +          0x10
    +          0x20
    +          
    +            
    +              APB_PERIPHERAL_ACCESS_LOCK
    +              apb_peripheral_access_lock
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          APB_PERIPHERAL_ACCESS_1
    +          SENSITIVE_APB_PERIPHERAL_ACCESS_1_REG
    +          0x14
    +          0x20
    +          0x00000001
    +          
    +            
    +              APB_PERIPHERAL_ACCESS_SPLIT_BURST
    +              apb_peripheral_access_split_burst
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          INTERNAL_SRAM_USAGE_0
    +          SENSITIVE_INTERNAL_SRAM_USAGE_0_REG
    +          0x18
    +          0x20
    +          
    +            
    +              INTERNAL_SRAM_USAGE_LOCK
    +              internal_sram_usage_lock
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          INTERNAL_SRAM_USAGE_1
    +          SENSITIVE_INTERNAL_SRAM_USAGE_1_REG
    +          0x1C
    +          0x20
    +          0x0000000F
    +          
    +            
    +              INTERNAL_SRAM_USAGE_CPU_CACHE
    +              internal_sram_usage_cpu_cache
    +              0
    +              1
    +              read-write
    +            
    +            
    +              INTERNAL_SRAM_USAGE_CPU_SRAM
    +              internal_sram_usage_cpu_sram
    +              1
    +              3
    +              read-write
    +            
    +          
    +        
    +        
    +          INTERNAL_SRAM_USAGE_3
    +          SENSITIVE_INTERNAL_SRAM_USAGE_3_REG
    +          0x20
    +          0x20
    +          
    +            
    +              INTERNAL_SRAM_USAGE_MAC_DUMP_SRAM
    +              internal_sram_usage_mac_dump_sram
    +              0
    +              3
    +              read-write
    +            
    +            
    +              INTERNAL_SRAM_ALLOC_MAC_DUMP
    +              internal_sram_alloc_mac_dump
    +              3
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          INTERNAL_SRAM_USAGE_4
    +          SENSITIVE_INTERNAL_SRAM_USAGE_4_REG
    +          0x24
    +          0x20
    +          
    +            
    +              INTERNAL_SRAM_USAGE_LOG_SRAM
    +              internal_sram_usage_log_sram
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CACHE_TAG_ACCESS_0
    +          SENSITIVE_CACHE_TAG_ACCESS_0_REG
    +          0x28
    +          0x20
    +          
    +            
    +              CACHE_TAG_ACCESS_LOCK
    +              cache_tag_access_lock
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CACHE_TAG_ACCESS_1
    +          SENSITIVE_CACHE_TAG_ACCESS_1_REG
    +          0x2C
    +          0x20
    +          0x0000000F
    +          
    +            
    +              PRO_I_TAG_RD_ACS
    +              pro_i_tag_rd_acs
    +              0
    +              1
    +              read-write
    +            
    +            
    +              PRO_I_TAG_WR_ACS
    +              pro_i_tag_wr_acs
    +              1
    +              1
    +              read-write
    +            
    +            
    +              PRO_D_TAG_RD_ACS
    +              pro_d_tag_rd_acs
    +              2
    +              1
    +              read-write
    +            
    +            
    +              PRO_D_TAG_WR_ACS
    +              pro_d_tag_wr_acs
    +              3
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CACHE_MMU_ACCESS_0
    +          SENSITIVE_CACHE_MMU_ACCESS_0_REG
    +          0x30
    +          0x20
    +          
    +            
    +              CACHE_MMU_ACCESS_LOCK
    +              cache_mmu_access_lock
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CACHE_MMU_ACCESS_1
    +          SENSITIVE_CACHE_MMU_ACCESS_1_REG
    +          0x34
    +          0x20
    +          0x00000003
    +          
    +            
    +              PRO_MMU_RD_ACS
    +              pro_mmu_rd_acs
    +              0
    +              1
    +              read-write
    +            
    +            
    +              PRO_MMU_WR_ACS
    +              pro_mmu_wr_acs
    +              1
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_APBPERI_SPI2_PMS_CONSTRAIN_0
    +          SENSITIVE_DMA_APBPERI_SPI2_PMS_CONSTRAIN_0_REG
    +          0x38
    +          0x20
    +          
    +            
    +              DMA_APBPERI_SPI2_PMS_CONSTRAIN_LOCK
    +              dma_apbperi_spi2_pms_constrain_lock
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_APBPERI_SPI2_PMS_CONSTRAIN_1
    +          SENSITIVE_DMA_APBPERI_SPI2_PMS_CONSTRAIN_1_REG
    +          0x3C
    +          0x20
    +          0x000FF0FF
    +          
    +            
    +              DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0
    +              dma_apbperi_spi2_pms_constrain_sram_world_0_pms_0
    +              0
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1
    +              dma_apbperi_spi2_pms_constrain_sram_world_0_pms_1
    +              2
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2
    +              dma_apbperi_spi2_pms_constrain_sram_world_0_pms_2
    +              4
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3
    +              dma_apbperi_spi2_pms_constrain_sram_world_0_pms_3
    +              6
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0
    +              dma_apbperi_spi2_pms_constrain_sram_world_1_pms_0
    +              12
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1
    +              dma_apbperi_spi2_pms_constrain_sram_world_1_pms_1
    +              14
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2
    +              dma_apbperi_spi2_pms_constrain_sram_world_1_pms_2
    +              16
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3
    +              dma_apbperi_spi2_pms_constrain_sram_world_1_pms_3
    +              18
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_APBPERI_UCHI0_PMS_CONSTRAIN_0
    +          SENSITIVE_DMA_APBPERI_UCHI0_PMS_CONSTRAIN_0_REG
    +          0x40
    +          0x20
    +          
    +            
    +              DMA_APBPERI_UCHI0_PMS_CONSTRAIN_LOCK
    +              dma_apbperi_uchi0_pms_constrain_lock
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_APBPERI_UCHI0_PMS_CONSTRAIN_1
    +          SENSITIVE_DMA_APBPERI_UCHI0_PMS_CONSTRAIN_1_REG
    +          0x44
    +          0x20
    +          0x000FF0FF
    +          
    +            
    +              DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0
    +              dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_0
    +              0
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1
    +              dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_1
    +              2
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2
    +              dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_2
    +              4
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3
    +              dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_3
    +              6
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0
    +              dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_0
    +              12
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1
    +              dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_1
    +              14
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2
    +              dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_2
    +              16
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3
    +              dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_3
    +              18
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_APBPERI_I2S0_PMS_CONSTRAIN_0
    +          SENSITIVE_DMA_APBPERI_I2S0_PMS_CONSTRAIN_0_REG
    +          0x48
    +          0x20
    +          
    +            
    +              DMA_APBPERI_I2S0_PMS_CONSTRAIN_LOCK
    +              dma_apbperi_i2s0_pms_constrain_lock
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_APBPERI_I2S0_PMS_CONSTRAIN_1
    +          SENSITIVE_DMA_APBPERI_I2S0_PMS_CONSTRAIN_1_REG
    +          0x4C
    +          0x20
    +          0x000FF0FF
    +          
    +            
    +              DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0
    +              dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_0
    +              0
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1
    +              dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_1
    +              2
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2
    +              dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_2
    +              4
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3
    +              dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_3
    +              6
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0
    +              dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_0
    +              12
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1
    +              dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_1
    +              14
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2
    +              dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_2
    +              16
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3
    +              dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_3
    +              18
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_APBPERI_MAC_PMS_CONSTRAIN_0
    +          SENSITIVE_DMA_APBPERI_MAC_PMS_CONSTRAIN_0_REG
    +          0x50
    +          0x20
    +          
    +            
    +              DMA_APBPERI_MAC_PMS_CONSTRAIN_LOCK
    +              dma_apbperi_mac_pms_constrain_lock
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_APBPERI_MAC_PMS_CONSTRAIN_1
    +          SENSITIVE_DMA_APBPERI_MAC_PMS_CONSTRAIN_1_REG
    +          0x54
    +          0x20
    +          0x000FF0FF
    +          
    +            
    +              DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0
    +              dma_apbperi_mac_pms_constrain_sram_world_0_pms_0
    +              0
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1
    +              dma_apbperi_mac_pms_constrain_sram_world_0_pms_1
    +              2
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2
    +              dma_apbperi_mac_pms_constrain_sram_world_0_pms_2
    +              4
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3
    +              dma_apbperi_mac_pms_constrain_sram_world_0_pms_3
    +              6
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0
    +              dma_apbperi_mac_pms_constrain_sram_world_1_pms_0
    +              12
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1
    +              dma_apbperi_mac_pms_constrain_sram_world_1_pms_1
    +              14
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2
    +              dma_apbperi_mac_pms_constrain_sram_world_1_pms_2
    +              16
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3
    +              dma_apbperi_mac_pms_constrain_sram_world_1_pms_3
    +              18
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_APBPERI_BACKUP_PMS_CONSTRAIN_0
    +          SENSITIVE_DMA_APBPERI_BACKUP_PMS_CONSTRAIN_0_REG
    +          0x58
    +          0x20
    +          
    +            
    +              DMA_APBPERI_BACKUP_PMS_CONSTRAIN_LOCK
    +              dma_apbperi_backup_pms_constrain_lock
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_APBPERI_BACKUP_PMS_CONSTRAIN_1
    +          SENSITIVE_DMA_APBPERI_BACKUP_PMS_CONSTRAIN_1_REG
    +          0x5C
    +          0x20
    +          0x000FF0FF
    +          
    +            
    +              DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0
    +              dma_apbperi_backup_pms_constrain_sram_world_0_pms_0
    +              0
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1
    +              dma_apbperi_backup_pms_constrain_sram_world_0_pms_1
    +              2
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2
    +              dma_apbperi_backup_pms_constrain_sram_world_0_pms_2
    +              4
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3
    +              dma_apbperi_backup_pms_constrain_sram_world_0_pms_3
    +              6
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0
    +              dma_apbperi_backup_pms_constrain_sram_world_1_pms_0
    +              12
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1
    +              dma_apbperi_backup_pms_constrain_sram_world_1_pms_1
    +              14
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2
    +              dma_apbperi_backup_pms_constrain_sram_world_1_pms_2
    +              16
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3
    +              dma_apbperi_backup_pms_constrain_sram_world_1_pms_3
    +              18
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_APBPERI_LC_PMS_CONSTRAIN_0
    +          SENSITIVE_DMA_APBPERI_LC_PMS_CONSTRAIN_0_REG
    +          0x60
    +          0x20
    +          
    +            
    +              DMA_APBPERI_LC_PMS_CONSTRAIN_LOCK
    +              dma_apbperi_lc_pms_constrain_lock
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_APBPERI_LC_PMS_CONSTRAIN_1
    +          SENSITIVE_DMA_APBPERI_LC_PMS_CONSTRAIN_1_REG
    +          0x64
    +          0x20
    +          0x000FF0FF
    +          
    +            
    +              DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0
    +              dma_apbperi_lc_pms_constrain_sram_world_0_pms_0
    +              0
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1
    +              dma_apbperi_lc_pms_constrain_sram_world_0_pms_1
    +              2
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2
    +              dma_apbperi_lc_pms_constrain_sram_world_0_pms_2
    +              4
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3
    +              dma_apbperi_lc_pms_constrain_sram_world_0_pms_3
    +              6
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0
    +              dma_apbperi_lc_pms_constrain_sram_world_1_pms_0
    +              12
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1
    +              dma_apbperi_lc_pms_constrain_sram_world_1_pms_1
    +              14
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2
    +              dma_apbperi_lc_pms_constrain_sram_world_1_pms_2
    +              16
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3
    +              dma_apbperi_lc_pms_constrain_sram_world_1_pms_3
    +              18
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_APBPERI_AES_PMS_CONSTRAIN_0
    +          SENSITIVE_DMA_APBPERI_AES_PMS_CONSTRAIN_0_REG
    +          0x68
    +          0x20
    +          
    +            
    +              DMA_APBPERI_AES_PMS_CONSTRAIN_LOCK
    +              dma_apbperi_aes_pms_constrain_lock
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_APBPERI_AES_PMS_CONSTRAIN_1
    +          SENSITIVE_DMA_APBPERI_AES_PMS_CONSTRAIN_1_REG
    +          0x6C
    +          0x20
    +          0x000FF0FF
    +          
    +            
    +              DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0
    +              dma_apbperi_aes_pms_constrain_sram_world_0_pms_0
    +              0
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1
    +              dma_apbperi_aes_pms_constrain_sram_world_0_pms_1
    +              2
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2
    +              dma_apbperi_aes_pms_constrain_sram_world_0_pms_2
    +              4
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3
    +              dma_apbperi_aes_pms_constrain_sram_world_0_pms_3
    +              6
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0
    +              dma_apbperi_aes_pms_constrain_sram_world_1_pms_0
    +              12
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1
    +              dma_apbperi_aes_pms_constrain_sram_world_1_pms_1
    +              14
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2
    +              dma_apbperi_aes_pms_constrain_sram_world_1_pms_2
    +              16
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3
    +              dma_apbperi_aes_pms_constrain_sram_world_1_pms_3
    +              18
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_APBPERI_SHA_PMS_CONSTRAIN_0
    +          SENSITIVE_DMA_APBPERI_SHA_PMS_CONSTRAIN_0_REG
    +          0x70
    +          0x20
    +          
    +            
    +              DMA_APBPERI_SHA_PMS_CONSTRAIN_LOCK
    +              dma_apbperi_sha_pms_constrain_lock
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_APBPERI_SHA_PMS_CONSTRAIN_1
    +          SENSITIVE_DMA_APBPERI_SHA_PMS_CONSTRAIN_1_REG
    +          0x74
    +          0x20
    +          0x000FF0FF
    +          
    +            
    +              DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0
    +              dma_apbperi_sha_pms_constrain_sram_world_0_pms_0
    +              0
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1
    +              dma_apbperi_sha_pms_constrain_sram_world_0_pms_1
    +              2
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2
    +              dma_apbperi_sha_pms_constrain_sram_world_0_pms_2
    +              4
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3
    +              dma_apbperi_sha_pms_constrain_sram_world_0_pms_3
    +              6
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0
    +              dma_apbperi_sha_pms_constrain_sram_world_1_pms_0
    +              12
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1
    +              dma_apbperi_sha_pms_constrain_sram_world_1_pms_1
    +              14
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2
    +              dma_apbperi_sha_pms_constrain_sram_world_1_pms_2
    +              16
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3
    +              dma_apbperi_sha_pms_constrain_sram_world_1_pms_3
    +              18
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_0
    +          SENSITIVE_DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_0_REG
    +          0x78
    +          0x20
    +          
    +            
    +              DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_LOCK
    +              dma_apbperi_adc_dac_pms_constrain_lock
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_1
    +          SENSITIVE_DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_1_REG
    +          0x7C
    +          0x20
    +          0x000FF0FF
    +          
    +            
    +              DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0
    +              dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_0
    +              0
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1
    +              dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_1
    +              2
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2
    +              dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_2
    +              4
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3
    +              dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_3
    +              6
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0
    +              dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_0
    +              12
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1
    +              dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_1
    +              14
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2
    +              dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_2
    +              16
    +              2
    +              read-write
    +            
    +            
    +              DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3
    +              dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_3
    +              18
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_APBPERI_PMS_MONITOR_0
    +          SENSITIVE_DMA_APBPERI_PMS_MONITOR_0_REG
    +          0x80
    +          0x20
    +          
    +            
    +              DMA_APBPERI_PMS_MONITOR_LOCK
    +              dma_apbperi_pms_monitor_lock
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_APBPERI_PMS_MONITOR_1
    +          SENSITIVE_DMA_APBPERI_PMS_MONITOR_1_REG
    +          0x84
    +          0x20
    +          0x00000003
    +          
    +            
    +              DMA_APBPERI_PMS_MONITOR_VIOLATE_CLR
    +              dma_apbperi_pms_monitor_violate_clr
    +              0
    +              1
    +              read-write
    +            
    +            
    +              DMA_APBPERI_PMS_MONITOR_VIOLATE_EN
    +              dma_apbperi_pms_monitor_violate_en
    +              1
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_APBPERI_PMS_MONITOR_2
    +          SENSITIVE_DMA_APBPERI_PMS_MONITOR_2_REG
    +          0x88
    +          0x20
    +          
    +            
    +              DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR
    +              dma_apbperi_pms_monitor_violate_intr
    +              0
    +              1
    +              read-only
    +            
    +            
    +              DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_WORLD
    +              dma_apbperi_pms_monitor_violate_status_world
    +              1
    +              2
    +              read-only
    +            
    +            
    +              DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_ADDR
    +              dma_apbperi_pms_monitor_violate_status_addr
    +              3
    +              24
    +              read-only
    +            
    +          
    +        
    +        
    +          DMA_APBPERI_PMS_MONITOR_3
    +          SENSITIVE_DMA_APBPERI_PMS_MONITOR_3_REG
    +          0x8C
    +          0x20
    +          
    +            
    +              DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_WR
    +              dma_apbperi_pms_monitor_violate_status_wr
    +              0
    +              1
    +              read-only
    +            
    +            
    +              DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_BYTEEN
    +              dma_apbperi_pms_monitor_violate_status_byteen
    +              1
    +              4
    +              read-only
    +            
    +          
    +        
    +        
    +          CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_0
    +          SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_0_REG
    +          0x90
    +          0x20
    +          
    +            
    +              CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_LOCK
    +              core_x_iram0_dram0_dma_split_line_constrain_lock
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_1
    +          SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_1_REG
    +          0x94
    +          0x20
    +          
    +            
    +              CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_0
    +              core_x_iram0_dram0_dma_sram_category_0
    +              0
    +              2
    +              read-write
    +            
    +            
    +              CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_1
    +              core_x_iram0_dram0_dma_sram_category_1
    +              2
    +              2
    +              read-write
    +            
    +            
    +              CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_2
    +              core_x_iram0_dram0_dma_sram_category_2
    +              4
    +              2
    +              read-write
    +            
    +            
    +              CORE_X_IRAM0_DRAM0_DMA_SRAM_SPLITADDR
    +              core_x_iram0_dram0_dma_sram_splitaddr
    +              14
    +              8
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_2
    +          SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_2_REG
    +          0x98
    +          0x20
    +          
    +            
    +              CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_0
    +              core_x_iram0_sram_line_0_category_0
    +              0
    +              2
    +              read-write
    +            
    +            
    +              CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_1
    +              core_x_iram0_sram_line_0_category_1
    +              2
    +              2
    +              read-write
    +            
    +            
    +              CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_2
    +              core_x_iram0_sram_line_0_category_2
    +              4
    +              2
    +              read-write
    +            
    +            
    +              CORE_X_IRAM0_SRAM_LINE_0_SPLITADDR
    +              core_x_iram0_sram_line_0_splitaddr
    +              14
    +              8
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_3
    +          SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_3_REG
    +          0x9C
    +          0x20
    +          
    +            
    +              CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_0
    +              core_x_iram0_sram_line_1_category_0
    +              0
    +              2
    +              read-write
    +            
    +            
    +              CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_1
    +              core_x_iram0_sram_line_1_category_1
    +              2
    +              2
    +              read-write
    +            
    +            
    +              CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_2
    +              core_x_iram0_sram_line_1_category_2
    +              4
    +              2
    +              read-write
    +            
    +            
    +              CORE_X_IRAM0_SRAM_LINE_1_SPLITADDR
    +              core_x_iram0_sram_line_1_splitaddr
    +              14
    +              8
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_4
    +          SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_4_REG
    +          0xA0
    +          0x20
    +          
    +            
    +              CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_0
    +              core_x_dram0_dma_sram_line_0_category_0
    +              0
    +              2
    +              read-write
    +            
    +            
    +              CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_1
    +              core_x_dram0_dma_sram_line_0_category_1
    +              2
    +              2
    +              read-write
    +            
    +            
    +              CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_2
    +              core_x_dram0_dma_sram_line_0_category_2
    +              4
    +              2
    +              read-write
    +            
    +            
    +              CORE_X_DRAM0_DMA_SRAM_LINE_0_SPLITADDR
    +              core_x_dram0_dma_sram_line_0_splitaddr
    +              14
    +              8
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_5
    +          SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_5_REG
    +          0xA4
    +          0x20
    +          
    +            
    +              CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_0
    +              core_x_dram0_dma_sram_line_1_category_0
    +              0
    +              2
    +              read-write
    +            
    +            
    +              CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_1
    +              core_x_dram0_dma_sram_line_1_category_1
    +              2
    +              2
    +              read-write
    +            
    +            
    +              CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_2
    +              core_x_dram0_dma_sram_line_1_category_2
    +              4
    +              2
    +              read-write
    +            
    +            
    +              CORE_X_DRAM0_DMA_SRAM_LINE_1_SPLITADDR
    +              core_x_dram0_dma_sram_line_1_splitaddr
    +              14
    +              8
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_X_IRAM0_PMS_CONSTRAIN_0
    +          SENSITIVE_CORE_X_IRAM0_PMS_CONSTRAIN_0_REG
    +          0xA8
    +          0x20
    +          
    +            
    +              CORE_X_IRAM0_PMS_CONSTRAIN_LOCK
    +              core_x_iram0_pms_constrain_lock
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_X_IRAM0_PMS_CONSTRAIN_1
    +          SENSITIVE_CORE_X_IRAM0_PMS_CONSTRAIN_1_REG
    +          0xAC
    +          0x20
    +          0x001C7FFF
    +          
    +            
    +              CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0
    +              core_x_iram0_pms_constrain_sram_world_1_pms_0
    +              0
    +              3
    +              read-write
    +            
    +            
    +              CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1
    +              core_x_iram0_pms_constrain_sram_world_1_pms_1
    +              3
    +              3
    +              read-write
    +            
    +            
    +              CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2
    +              core_x_iram0_pms_constrain_sram_world_1_pms_2
    +              6
    +              3
    +              read-write
    +            
    +            
    +              CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3
    +              core_x_iram0_pms_constrain_sram_world_1_pms_3
    +              9
    +              3
    +              read-write
    +            
    +            
    +              CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_CACHEDATAARRAY_PMS_0
    +              core_x_iram0_pms_constrain_sram_world_1_cachedataarray_pms_0
    +              12
    +              3
    +              read-write
    +            
    +            
    +              CORE_X_IRAM0_PMS_CONSTRAIN_ROM_WORLD_1_PMS
    +              core_x_iram0_pms_constrain_rom_world_1_pms
    +              18
    +              3
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_X_IRAM0_PMS_CONSTRAIN_2
    +          SENSITIVE_CORE_X_IRAM0_PMS_CONSTRAIN_2_REG
    +          0xB0
    +          0x20
    +          0x001C7FFF
    +          
    +            
    +              CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0
    +              core_x_iram0_pms_constrain_sram_world_0_pms_0
    +              0
    +              3
    +              read-write
    +            
    +            
    +              CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1
    +              core_x_iram0_pms_constrain_sram_world_0_pms_1
    +              3
    +              3
    +              read-write
    +            
    +            
    +              CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2
    +              core_x_iram0_pms_constrain_sram_world_0_pms_2
    +              6
    +              3
    +              read-write
    +            
    +            
    +              CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3
    +              core_x_iram0_pms_constrain_sram_world_0_pms_3
    +              9
    +              3
    +              read-write
    +            
    +            
    +              CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_CACHEDATAARRAY_PMS_0
    +              core_x_iram0_pms_constrain_sram_world_0_cachedataarray_pms_0
    +              12
    +              3
    +              read-write
    +            
    +            
    +              CORE_X_IRAM0_PMS_CONSTRAIN_ROM_WORLD_0_PMS
    +              core_x_iram0_pms_constrain_rom_world_0_pms
    +              18
    +              3
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_IRAM0_PMS_MONITOR_0
    +          SENSITIVE_CORE_0_IRAM0_PMS_MONITOR_0_REG
    +          0xB4
    +          0x20
    +          
    +            
    +              CORE_0_IRAM0_PMS_MONITOR_LOCK
    +              core_0_iram0_pms_monitor_lock
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_IRAM0_PMS_MONITOR_1
    +          SENSITIVE_CORE_0_IRAM0_PMS_MONITOR_1_REG
    +          0xB8
    +          0x20
    +          0x00000003
    +          
    +            
    +              CORE_0_IRAM0_PMS_MONITOR_VIOLATE_CLR
    +              core_0_iram0_pms_monitor_violate_clr
    +              0
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_IRAM0_PMS_MONITOR_VIOLATE_EN
    +              core_0_iram0_pms_monitor_violate_en
    +              1
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_IRAM0_PMS_MONITOR_2
    +          SENSITIVE_CORE_0_IRAM0_PMS_MONITOR_2_REG
    +          0xBC
    +          0x20
    +          
    +            
    +              CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR
    +              core_0_iram0_pms_monitor_violate_intr
    +              0
    +              1
    +              read-only
    +            
    +            
    +              CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_WR
    +              core_0_iram0_pms_monitor_violate_status_wr
    +              1
    +              1
    +              read-only
    +            
    +            
    +              CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_LOADSTORE
    +              core_0_iram0_pms_monitor_violate_status_loadstore
    +              2
    +              1
    +              read-only
    +            
    +            
    +              CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_WORLD
    +              core_0_iram0_pms_monitor_violate_status_world
    +              3
    +              2
    +              read-only
    +            
    +            
    +              CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_ADDR
    +              core_0_iram0_pms_monitor_violate_status_addr
    +              5
    +              24
    +              read-only
    +            
    +          
    +        
    +        
    +          CORE_X_DRAM0_PMS_CONSTRAIN_0
    +          SENSITIVE_CORE_X_DRAM0_PMS_CONSTRAIN_0_REG
    +          0xC0
    +          0x20
    +          
    +            
    +              CORE_X_DRAM0_PMS_CONSTRAIN_LOCK
    +              core_x_dram0_pms_constrain_lock
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_X_DRAM0_PMS_CONSTRAIN_1
    +          SENSITIVE_CORE_X_DRAM0_PMS_CONSTRAIN_1_REG
    +          0xC4
    +          0x20
    +          0x0F0FF0FF
    +          
    +            
    +              CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0
    +              core_x_dram0_pms_constrain_sram_world_0_pms_0
    +              0
    +              2
    +              read-write
    +            
    +            
    +              CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1
    +              core_x_dram0_pms_constrain_sram_world_0_pms_1
    +              2
    +              2
    +              read-write
    +            
    +            
    +              CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2
    +              core_x_dram0_pms_constrain_sram_world_0_pms_2
    +              4
    +              2
    +              read-write
    +            
    +            
    +              CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3
    +              core_x_dram0_pms_constrain_sram_world_0_pms_3
    +              6
    +              2
    +              read-write
    +            
    +            
    +              CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0
    +              core_x_dram0_pms_constrain_sram_world_1_pms_0
    +              12
    +              2
    +              read-write
    +            
    +            
    +              CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1
    +              core_x_dram0_pms_constrain_sram_world_1_pms_1
    +              14
    +              2
    +              read-write
    +            
    +            
    +              CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2
    +              core_x_dram0_pms_constrain_sram_world_1_pms_2
    +              16
    +              2
    +              read-write
    +            
    +            
    +              CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3
    +              core_x_dram0_pms_constrain_sram_world_1_pms_3
    +              18
    +              2
    +              read-write
    +            
    +            
    +              CORE_X_DRAM0_PMS_CONSTRAIN_ROM_WORLD_0_PMS
    +              core_x_dram0_pms_constrain_rom_world_0_pms
    +              24
    +              2
    +              read-write
    +            
    +            
    +              CORE_X_DRAM0_PMS_CONSTRAIN_ROM_WORLD_1_PMS
    +              core_x_dram0_pms_constrain_rom_world_1_pms
    +              26
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_DRAM0_PMS_MONITOR_0
    +          SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_0_REG
    +          0xC8
    +          0x20
    +          
    +            
    +              CORE_0_DRAM0_PMS_MONITOR_LOCK
    +              core_0_dram0_pms_monitor_lock
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_DRAM0_PMS_MONITOR_1
    +          SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_1_REG
    +          0xCC
    +          0x20
    +          0x00000003
    +          
    +            
    +              CORE_0_DRAM0_PMS_MONITOR_VIOLATE_CLR
    +              core_0_dram0_pms_monitor_violate_clr
    +              0
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_DRAM0_PMS_MONITOR_VIOLATE_EN
    +              core_0_dram0_pms_monitor_violate_en
    +              1
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_DRAM0_PMS_MONITOR_2
    +          SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_2_REG
    +          0xD0
    +          0x20
    +          
    +            
    +              CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR
    +              core_0_dram0_pms_monitor_violate_intr
    +              0
    +              1
    +              read-only
    +            
    +            
    +              CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_LOCK
    +              core_0_dram0_pms_monitor_violate_status_lock
    +              1
    +              1
    +              read-only
    +            
    +            
    +              CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_WORLD
    +              core_0_dram0_pms_monitor_violate_status_world
    +              2
    +              2
    +              read-only
    +            
    +            
    +              CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_ADDR
    +              core_0_dram0_pms_monitor_violate_status_addr
    +              4
    +              24
    +              read-only
    +            
    +          
    +        
    +        
    +          CORE_0_DRAM0_PMS_MONITOR_3
    +          SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_3_REG
    +          0xD4
    +          0x20
    +          
    +            
    +              CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_WR
    +              core_0_dram0_pms_monitor_violate_status_wr
    +              0
    +              1
    +              read-only
    +            
    +            
    +              CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_BYTEEN
    +              core_0_dram0_pms_monitor_violate_status_byteen
    +              1
    +              4
    +              read-only
    +            
    +          
    +        
    +        
    +          CORE_0_PIF_PMS_CONSTRAIN_0
    +          SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_0_REG
    +          0xD8
    +          0x20
    +          
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_LOCK
    +              core_0_pif_pms_constrain_lock
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_PIF_PMS_CONSTRAIN_1
    +          SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_1_REG
    +          0xDC
    +          0x20
    +          0xCF0FFFFF
    +          
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_UART
    +              core_0_pif_pms_constrain_world_0_uart
    +              0
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_G0SPI_1
    +              core_0_pif_pms_constrain_world_0_g0spi_1
    +              2
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_G0SPI_0
    +              core_0_pif_pms_constrain_world_0_g0spi_0
    +              4
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_GPIO
    +              core_0_pif_pms_constrain_world_0_gpio
    +              6
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_FE2
    +              core_0_pif_pms_constrain_world_0_fe2
    +              8
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_FE
    +              core_0_pif_pms_constrain_world_0_fe
    +              10
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_TIMER
    +              core_0_pif_pms_constrain_world_0_timer
    +              12
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_RTC
    +              core_0_pif_pms_constrain_world_0_rtc
    +              14
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_IO_MUX
    +              core_0_pif_pms_constrain_world_0_io_mux
    +              16
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_WDG
    +              core_0_pif_pms_constrain_world_0_wdg
    +              18
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_MISC
    +              core_0_pif_pms_constrain_world_0_misc
    +              24
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_I2C
    +              core_0_pif_pms_constrain_world_0_i2c
    +              26
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_UART1
    +              core_0_pif_pms_constrain_world_0_uart1
    +              30
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_PIF_PMS_CONSTRAIN_2
    +          SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_2_REG
    +          0xE0
    +          0x20
    +          0xFCC30CF3
    +          
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_BT
    +              core_0_pif_pms_constrain_world_0_bt
    +              0
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_I2C_EXT0
    +              core_0_pif_pms_constrain_world_0_i2c_ext0
    +              4
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_UHCI0
    +              core_0_pif_pms_constrain_world_0_uhci0
    +              6
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_RMT
    +              core_0_pif_pms_constrain_world_0_rmt
    +              10
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_LEDC
    +              core_0_pif_pms_constrain_world_0_ledc
    +              16
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_BB
    +              core_0_pif_pms_constrain_world_0_bb
    +              22
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_TIMERGROUP
    +              core_0_pif_pms_constrain_world_0_timergroup
    +              26
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_TIMERGROUP1
    +              core_0_pif_pms_constrain_world_0_timergroup1
    +              28
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SYSTIMER
    +              core_0_pif_pms_constrain_world_0_systimer
    +              30
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_PIF_PMS_CONSTRAIN_3
    +          SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_3_REG
    +          0xE4
    +          0x20
    +          0x3CC0CC33
    +          
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SPI_2
    +              core_0_pif_pms_constrain_world_0_spi_2
    +              0
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_APB_CTRL
    +              core_0_pif_pms_constrain_world_0_apb_ctrl
    +              4
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CAN
    +              core_0_pif_pms_constrain_world_0_can
    +              10
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_I2S1
    +              core_0_pif_pms_constrain_world_0_i2s1
    +              14
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_RWBT
    +              core_0_pif_pms_constrain_world_0_rwbt
    +              22
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_WIFIMAC
    +              core_0_pif_pms_constrain_world_0_wifimac
    +              26
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_PWR
    +              core_0_pif_pms_constrain_world_0_pwr
    +              28
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_PIF_PMS_CONSTRAIN_4
    +          SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_4_REG
    +          0xE8
    +          0x20
    +          0xFFFFF3FC
    +          
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_USB_WRAP
    +              core_0_pif_pms_constrain_world_0_usb_wrap
    +              2
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CRYPTO_PERI
    +              core_0_pif_pms_constrain_world_0_crypto_peri
    +              4
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CRYPTO_DMA
    +              core_0_pif_pms_constrain_world_0_crypto_dma
    +              6
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_APB_ADC
    +              core_0_pif_pms_constrain_world_0_apb_adc
    +              8
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_BT_PWR
    +              core_0_pif_pms_constrain_world_0_bt_pwr
    +              12
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_USB_DEVICE
    +              core_0_pif_pms_constrain_world_0_usb_device
    +              14
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SYSTEM
    +              core_0_pif_pms_constrain_world_0_system
    +              16
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SENSITIVE
    +              core_0_pif_pms_constrain_world_0_sensitive
    +              18
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_INTERRUPT
    +              core_0_pif_pms_constrain_world_0_interrupt
    +              20
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_DMA_COPY
    +              core_0_pif_pms_constrain_world_0_dma_copy
    +              22
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CACHE_CONFIG
    +              core_0_pif_pms_constrain_world_0_cache_config
    +              24
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_AD
    +              core_0_pif_pms_constrain_world_0_ad
    +              26
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_DIO
    +              core_0_pif_pms_constrain_world_0_dio
    +              28
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_WORLD_CONTROLLER
    +              core_0_pif_pms_constrain_world_0_world_controller
    +              30
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_PIF_PMS_CONSTRAIN_5
    +          SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_5_REG
    +          0xEC
    +          0x20
    +          0xCF0FFFFF
    +          
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_UART
    +              core_0_pif_pms_constrain_world_1_uart
    +              0
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_G0SPI_1
    +              core_0_pif_pms_constrain_world_1_g0spi_1
    +              2
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_G0SPI_0
    +              core_0_pif_pms_constrain_world_1_g0spi_0
    +              4
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_GPIO
    +              core_0_pif_pms_constrain_world_1_gpio
    +              6
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_FE2
    +              core_0_pif_pms_constrain_world_1_fe2
    +              8
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_FE
    +              core_0_pif_pms_constrain_world_1_fe
    +              10
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_TIMER
    +              core_0_pif_pms_constrain_world_1_timer
    +              12
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_RTC
    +              core_0_pif_pms_constrain_world_1_rtc
    +              14
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_IO_MUX
    +              core_0_pif_pms_constrain_world_1_io_mux
    +              16
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_WDG
    +              core_0_pif_pms_constrain_world_1_wdg
    +              18
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_MISC
    +              core_0_pif_pms_constrain_world_1_misc
    +              24
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_I2C
    +              core_0_pif_pms_constrain_world_1_i2c
    +              26
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_UART1
    +              core_0_pif_pms_constrain_world_1_uart1
    +              30
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_PIF_PMS_CONSTRAIN_6
    +          SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_6_REG
    +          0xF0
    +          0x20
    +          0xFCC30CF3
    +          
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_BT
    +              core_0_pif_pms_constrain_world_1_bt
    +              0
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_I2C_EXT0
    +              core_0_pif_pms_constrain_world_1_i2c_ext0
    +              4
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_UHCI0
    +              core_0_pif_pms_constrain_world_1_uhci0
    +              6
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_RMT
    +              core_0_pif_pms_constrain_world_1_rmt
    +              10
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_LEDC
    +              core_0_pif_pms_constrain_world_1_ledc
    +              16
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_BB
    +              core_0_pif_pms_constrain_world_1_bb
    +              22
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_TIMERGROUP
    +              core_0_pif_pms_constrain_world_1_timergroup
    +              26
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_TIMERGROUP1
    +              core_0_pif_pms_constrain_world_1_timergroup1
    +              28
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SYSTIMER
    +              core_0_pif_pms_constrain_world_1_systimer
    +              30
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_PIF_PMS_CONSTRAIN_7
    +          SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_7_REG
    +          0xF4
    +          0x20
    +          0x3CC0CC33
    +          
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SPI_2
    +              core_0_pif_pms_constrain_world_1_spi_2
    +              0
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_APB_CTRL
    +              core_0_pif_pms_constrain_world_1_apb_ctrl
    +              4
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CAN
    +              core_0_pif_pms_constrain_world_1_can
    +              10
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_I2S1
    +              core_0_pif_pms_constrain_world_1_i2s1
    +              14
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_RWBT
    +              core_0_pif_pms_constrain_world_1_rwbt
    +              22
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_WIFIMAC
    +              core_0_pif_pms_constrain_world_1_wifimac
    +              26
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_PWR
    +              core_0_pif_pms_constrain_world_1_pwr
    +              28
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_PIF_PMS_CONSTRAIN_8
    +          SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_8_REG
    +          0xF8
    +          0x20
    +          0xFFFFF3FC
    +          
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_USB_WRAP
    +              core_0_pif_pms_constrain_world_1_usb_wrap
    +              2
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CRYPTO_PERI
    +              core_0_pif_pms_constrain_world_1_crypto_peri
    +              4
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CRYPTO_DMA
    +              core_0_pif_pms_constrain_world_1_crypto_dma
    +              6
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_APB_ADC
    +              core_0_pif_pms_constrain_world_1_apb_adc
    +              8
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_BT_PWR
    +              core_0_pif_pms_constrain_world_1_bt_pwr
    +              12
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_USB_DEVICE
    +              core_0_pif_pms_constrain_world_1_usb_device
    +              14
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SYSTEM
    +              core_0_pif_pms_constrain_world_1_system
    +              16
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SENSITIVE
    +              core_0_pif_pms_constrain_world_1_sensitive
    +              18
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_INTERRUPT
    +              core_0_pif_pms_constrain_world_1_interrupt
    +              20
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_DMA_COPY
    +              core_0_pif_pms_constrain_world_1_dma_copy
    +              22
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CACHE_CONFIG
    +              core_0_pif_pms_constrain_world_1_cache_config
    +              24
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_AD
    +              core_0_pif_pms_constrain_world_1_ad
    +              26
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_DIO
    +              core_0_pif_pms_constrain_world_1_dio
    +              28
    +              2
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_WORLD_CONTROLLER
    +              core_0_pif_pms_constrain_world_1_world_controller
    +              30
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_PIF_PMS_CONSTRAIN_9
    +          SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_9_REG
    +          0xFC
    +          0x20
    +          0x003FFFFF
    +          
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_SPLTADDR_WORLD_0
    +              core_0_pif_pms_constrain_rtcfast_spltaddr_world_0
    +              0
    +              11
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_SPLTADDR_WORLD_1
    +              core_0_pif_pms_constrain_rtcfast_spltaddr_world_1
    +              11
    +              11
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_PIF_PMS_CONSTRAIN_10
    +          SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_10_REG
    +          0x100
    +          0x20
    +          0x00000FFF
    +          
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_0_L
    +              core_0_pif_pms_constrain_rtcfast_world_0_l
    +              0
    +              3
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_0_H
    +              core_0_pif_pms_constrain_rtcfast_world_0_h
    +              3
    +              3
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_1_L
    +              core_0_pif_pms_constrain_rtcfast_world_1_l
    +              6
    +              3
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_1_H
    +              core_0_pif_pms_constrain_rtcfast_world_1_h
    +              9
    +              3
    +              read-write
    +            
    +          
    +        
    +        
    +          REGION_PMS_CONSTRAIN_0
    +          SENSITIVE_REGION_PMS_CONSTRAIN_0_REG
    +          0x104
    +          0x20
    +          
    +            
    +              REGION_PMS_CONSTRAIN_LOCK
    +              region_pms_constrain_lock
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          REGION_PMS_CONSTRAIN_1
    +          SENSITIVE_REGION_PMS_CONSTRAIN_1_REG
    +          0x108
    +          0x20
    +          0x00003FFF
    +          
    +            
    +              REGION_PMS_CONSTRAIN_WORLD_0_AREA_0
    +              region_pms_constrain_world_0_area_0
    +              0
    +              2
    +              read-write
    +            
    +            
    +              REGION_PMS_CONSTRAIN_WORLD_0_AREA_1
    +              region_pms_constrain_world_0_area_1
    +              2
    +              2
    +              read-write
    +            
    +            
    +              REGION_PMS_CONSTRAIN_WORLD_0_AREA_2
    +              region_pms_constrain_world_0_area_2
    +              4
    +              2
    +              read-write
    +            
    +            
    +              REGION_PMS_CONSTRAIN_WORLD_0_AREA_3
    +              region_pms_constrain_world_0_area_3
    +              6
    +              2
    +              read-write
    +            
    +            
    +              REGION_PMS_CONSTRAIN_WORLD_0_AREA_4
    +              region_pms_constrain_world_0_area_4
    +              8
    +              2
    +              read-write
    +            
    +            
    +              REGION_PMS_CONSTRAIN_WORLD_0_AREA_5
    +              region_pms_constrain_world_0_area_5
    +              10
    +              2
    +              read-write
    +            
    +            
    +              REGION_PMS_CONSTRAIN_WORLD_0_AREA_6
    +              region_pms_constrain_world_0_area_6
    +              12
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          REGION_PMS_CONSTRAIN_2
    +          SENSITIVE_REGION_PMS_CONSTRAIN_2_REG
    +          0x10C
    +          0x20
    +          0x00003FFF
    +          
    +            
    +              REGION_PMS_CONSTRAIN_WORLD_1_AREA_0
    +              region_pms_constrain_world_1_area_0
    +              0
    +              2
    +              read-write
    +            
    +            
    +              REGION_PMS_CONSTRAIN_WORLD_1_AREA_1
    +              region_pms_constrain_world_1_area_1
    +              2
    +              2
    +              read-write
    +            
    +            
    +              REGION_PMS_CONSTRAIN_WORLD_1_AREA_2
    +              region_pms_constrain_world_1_area_2
    +              4
    +              2
    +              read-write
    +            
    +            
    +              REGION_PMS_CONSTRAIN_WORLD_1_AREA_3
    +              region_pms_constrain_world_1_area_3
    +              6
    +              2
    +              read-write
    +            
    +            
    +              REGION_PMS_CONSTRAIN_WORLD_1_AREA_4
    +              region_pms_constrain_world_1_area_4
    +              8
    +              2
    +              read-write
    +            
    +            
    +              REGION_PMS_CONSTRAIN_WORLD_1_AREA_5
    +              region_pms_constrain_world_1_area_5
    +              10
    +              2
    +              read-write
    +            
    +            
    +              REGION_PMS_CONSTRAIN_WORLD_1_AREA_6
    +              region_pms_constrain_world_1_area_6
    +              12
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          REGION_PMS_CONSTRAIN_3
    +          SENSITIVE_REGION_PMS_CONSTRAIN_3_REG
    +          0x110
    +          0x20
    +          
    +            
    +              REGION_PMS_CONSTRAIN_ADDR_0
    +              region_pms_constrain_addr_0
    +              0
    +              30
    +              read-write
    +            
    +          
    +        
    +        
    +          REGION_PMS_CONSTRAIN_4
    +          SENSITIVE_REGION_PMS_CONSTRAIN_4_REG
    +          0x114
    +          0x20
    +          
    +            
    +              REGION_PMS_CONSTRAIN_ADDR_1
    +              region_pms_constrain_addr_1
    +              0
    +              30
    +              read-write
    +            
    +          
    +        
    +        
    +          REGION_PMS_CONSTRAIN_5
    +          SENSITIVE_REGION_PMS_CONSTRAIN_5_REG
    +          0x118
    +          0x20
    +          
    +            
    +              REGION_PMS_CONSTRAIN_ADDR_2
    +              region_pms_constrain_addr_2
    +              0
    +              30
    +              read-write
    +            
    +          
    +        
    +        
    +          REGION_PMS_CONSTRAIN_6
    +          SENSITIVE_REGION_PMS_CONSTRAIN_6_REG
    +          0x11C
    +          0x20
    +          
    +            
    +              REGION_PMS_CONSTRAIN_ADDR_3
    +              region_pms_constrain_addr_3
    +              0
    +              30
    +              read-write
    +            
    +          
    +        
    +        
    +          REGION_PMS_CONSTRAIN_7
    +          SENSITIVE_REGION_PMS_CONSTRAIN_7_REG
    +          0x120
    +          0x20
    +          
    +            
    +              REGION_PMS_CONSTRAIN_ADDR_4
    +              region_pms_constrain_addr_4
    +              0
    +              30
    +              read-write
    +            
    +          
    +        
    +        
    +          REGION_PMS_CONSTRAIN_8
    +          SENSITIVE_REGION_PMS_CONSTRAIN_8_REG
    +          0x124
    +          0x20
    +          
    +            
    +              REGION_PMS_CONSTRAIN_ADDR_5
    +              region_pms_constrain_addr_5
    +              0
    +              30
    +              read-write
    +            
    +          
    +        
    +        
    +          REGION_PMS_CONSTRAIN_9
    +          SENSITIVE_REGION_PMS_CONSTRAIN_9_REG
    +          0x128
    +          0x20
    +          
    +            
    +              REGION_PMS_CONSTRAIN_ADDR_6
    +              region_pms_constrain_addr_6
    +              0
    +              30
    +              read-write
    +            
    +          
    +        
    +        
    +          REGION_PMS_CONSTRAIN_10
    +          SENSITIVE_REGION_PMS_CONSTRAIN_10_REG
    +          0x12C
    +          0x20
    +          
    +            
    +              REGION_PMS_CONSTRAIN_ADDR_7
    +              region_pms_constrain_addr_7
    +              0
    +              30
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_PIF_PMS_MONITOR_0
    +          SENSITIVE_CORE_0_PIF_PMS_MONITOR_0_REG
    +          0x130
    +          0x20
    +          
    +            
    +              CORE_0_PIF_PMS_MONITOR_LOCK
    +              core_0_pif_pms_monitor_lock
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_PIF_PMS_MONITOR_1
    +          SENSITIVE_CORE_0_PIF_PMS_MONITOR_1_REG
    +          0x134
    +          0x20
    +          0x00000003
    +          
    +            
    +              CORE_0_PIF_PMS_MONITOR_VIOLATE_CLR
    +              core_0_pif_pms_monitor_violate_clr
    +              0
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_MONITOR_VIOLATE_EN
    +              core_0_pif_pms_monitor_violate_en
    +              1
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_PIF_PMS_MONITOR_2
    +          SENSITIVE_CORE_0_PIF_PMS_MONITOR_2_REG
    +          0x138
    +          0x20
    +          
    +            
    +              CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR
    +              core_0_pif_pms_monitor_violate_intr
    +              0
    +              1
    +              read-only
    +            
    +            
    +              CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HPORT_0
    +              core_0_pif_pms_monitor_violate_status_hport_0
    +              1
    +              1
    +              read-only
    +            
    +            
    +              CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HSIZE
    +              core_0_pif_pms_monitor_violate_status_hsize
    +              2
    +              3
    +              read-only
    +            
    +            
    +              CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HWRITE
    +              core_0_pif_pms_monitor_violate_status_hwrite
    +              5
    +              1
    +              read-only
    +            
    +            
    +              CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HWORLD
    +              core_0_pif_pms_monitor_violate_status_hworld
    +              6
    +              2
    +              read-only
    +            
    +          
    +        
    +        
    +          CORE_0_PIF_PMS_MONITOR_3
    +          SENSITIVE_CORE_0_PIF_PMS_MONITOR_3_REG
    +          0x13C
    +          0x20
    +          
    +            
    +              CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HADDR
    +              core_0_pif_pms_monitor_violate_status_haddr
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          CORE_0_PIF_PMS_MONITOR_4
    +          SENSITIVE_CORE_0_PIF_PMS_MONITOR_4_REG
    +          0x140
    +          0x20
    +          0x00000003
    +          
    +            
    +              CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_CLR
    +              core_0_pif_pms_monitor_nonword_violate_clr
    +              0
    +              1
    +              read-write
    +            
    +            
    +              CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_EN
    +              core_0_pif_pms_monitor_nonword_violate_en
    +              1
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_0_PIF_PMS_MONITOR_5
    +          SENSITIVE_CORE_0_PIF_PMS_MONITOR_5_REG
    +          0x144
    +          0x20
    +          
    +            
    +              CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_INTR
    +              core_0_pif_pms_monitor_nonword_violate_intr
    +              0
    +              1
    +              read-only
    +            
    +            
    +              CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_STATUS_HSIZE
    +              core_0_pif_pms_monitor_nonword_violate_status_hsize
    +              1
    +              2
    +              read-only
    +            
    +            
    +              CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_STATUS_HWORLD
    +              core_0_pif_pms_monitor_nonword_violate_status_hworld
    +              3
    +              2
    +              read-only
    +            
    +          
    +        
    +        
    +          CORE_0_PIF_PMS_MONITOR_6
    +          SENSITIVE_CORE_0_PIF_PMS_MONITOR_6_REG
    +          0x148
    +          0x20
    +          
    +            
    +              CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_STATUS_HADDR
    +              core_0_pif_pms_monitor_nonword_violate_status_haddr
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          BACKUP_BUS_PMS_CONSTRAIN_0
    +          SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_0_REG
    +          0x14C
    +          0x20
    +          
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_LOCK
    +              backup_bus_pms_constrain_lock
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          BACKUP_BUS_PMS_CONSTRAIN_1
    +          SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_1_REG
    +          0x150
    +          0x20
    +          0xCF0FFFFF
    +          
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_UART
    +              backup_bus_pms_constrain_uart
    +              0
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_G0SPI_1
    +              backup_bus_pms_constrain_g0spi_1
    +              2
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_G0SPI_0
    +              backup_bus_pms_constrain_g0spi_0
    +              4
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_GPIO
    +              backup_bus_pms_constrain_gpio
    +              6
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_FE2
    +              backup_bus_pms_constrain_fe2
    +              8
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_FE
    +              backup_bus_pms_constrain_fe
    +              10
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_TIMER
    +              backup_bus_pms_constrain_timer
    +              12
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_RTC
    +              backup_bus_pms_constrain_rtc
    +              14
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_IO_MUX
    +              backup_bus_pms_constrain_io_mux
    +              16
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_WDG
    +              backup_bus_pms_constrain_wdg
    +              18
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_MISC
    +              backup_bus_pms_constrain_misc
    +              24
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_I2C
    +              backup_bus_pms_constrain_i2c
    +              26
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_UART1
    +              backup_bus_pms_constrain_uart1
    +              30
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          BACKUP_BUS_PMS_CONSTRAIN_2
    +          SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_2_REG
    +          0x154
    +          0x20
    +          0xFCC30CF3
    +          
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_BT
    +              backup_bus_pms_constrain_bt
    +              0
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_I2C_EXT0
    +              backup_bus_pms_constrain_i2c_ext0
    +              4
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_UHCI0
    +              backup_bus_pms_constrain_uhci0
    +              6
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_RMT
    +              backup_bus_pms_constrain_rmt
    +              10
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_LEDC
    +              backup_bus_pms_constrain_ledc
    +              16
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_BB
    +              backup_bus_pms_constrain_bb
    +              22
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_TIMERGROUP
    +              backup_bus_pms_constrain_timergroup
    +              26
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_TIMERGROUP1
    +              backup_bus_pms_constrain_timergroup1
    +              28
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_SYSTIMER
    +              backup_bus_pms_constrain_systimer
    +              30
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          BACKUP_BUS_PMS_CONSTRAIN_3
    +          SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_3_REG
    +          0x158
    +          0x20
    +          0x3CC0CC33
    +          
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_SPI_2
    +              backup_bus_pms_constrain_spi_2
    +              0
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_APB_CTRL
    +              backup_bus_pms_constrain_apb_ctrl
    +              4
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_CAN
    +              backup_bus_pms_constrain_can
    +              10
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_I2S1
    +              backup_bus_pms_constrain_i2s1
    +              14
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_RWBT
    +              backup_bus_pms_constrain_rwbt
    +              22
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_WIFIMAC
    +              backup_bus_pms_constrain_wifimac
    +              26
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_PWR
    +              backup_bus_pms_constrain_pwr
    +              28
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          BACKUP_BUS_PMS_CONSTRAIN_4
    +          SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_4_REG
    +          0x15C
    +          0x20
    +          0x0000F3FC
    +          
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_USB_WRAP
    +              backup_bus_pms_constrain_usb_wrap
    +              2
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_CRYPTO_PERI
    +              backup_bus_pms_constrain_crypto_peri
    +              4
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_CRYPTO_DMA
    +              backup_bus_pms_constrain_crypto_dma
    +              6
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_APB_ADC
    +              backup_bus_pms_constrain_apb_adc
    +              8
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_BT_PWR
    +              backup_bus_pms_constrain_bt_pwr
    +              12
    +              2
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_CONSTRAIN_USB_DEVICE
    +              backup_bus_pms_constrain_usb_device
    +              14
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          BACKUP_BUS_PMS_MONITOR_0
    +          SENSITIVE_BACKUP_BUS_PMS_MONITOR_0_REG
    +          0x160
    +          0x20
    +          
    +            
    +              BACKUP_BUS_PMS_MONITOR_LOCK
    +              backup_bus_pms_monitor_lock
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          BACKUP_BUS_PMS_MONITOR_1
    +          SENSITIVE_BACKUP_BUS_PMS_MONITOR_1_REG
    +          0x164
    +          0x20
    +          0x00000003
    +          
    +            
    +              BACKUP_BUS_PMS_MONITOR_VIOLATE_CLR
    +              backup_bus_pms_monitor_violate_clr
    +              0
    +              1
    +              read-write
    +            
    +            
    +              BACKUP_BUS_PMS_MONITOR_VIOLATE_EN
    +              backup_bus_pms_monitor_violate_en
    +              1
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          BACKUP_BUS_PMS_MONITOR_2
    +          SENSITIVE_BACKUP_BUS_PMS_MONITOR_2_REG
    +          0x168
    +          0x20
    +          
    +            
    +              BACKUP_BUS_PMS_MONITOR_VIOLATE_INTR
    +              backup_bus_pms_monitor_violate_intr
    +              0
    +              1
    +              read-only
    +            
    +            
    +              BACKUP_BUS_PMS_MONITOR_VIOLATE_STATUS_HTRANS
    +              backup_bus_pms_monitor_violate_status_htrans
    +              1
    +              2
    +              read-only
    +            
    +            
    +              BACKUP_BUS_PMS_MONITOR_VIOLATE_STATUS_HSIZE
    +              backup_bus_pms_monitor_violate_status_hsize
    +              3
    +              3
    +              read-only
    +            
    +            
    +              BACKUP_BUS_PMS_MONITOR_VIOLATE_STATUS_HWRITE
    +              backup_bus_pms_monitor_violate_status_hwrite
    +              6
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          BACKUP_BUS_PMS_MONITOR_3
    +          SENSITIVE_BACKUP_BUS_PMS_MONITOR_3_REG
    +          0x16C
    +          0x20
    +          
    +            
    +              BACKUP_BUS_PMS_MONITOR_VIOLATE_HADDR
    +              backup_bus_pms_monitor_violate_haddr
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          CLOCK_GATE
    +          SENSITIVE_CLOCK_GATE_REG
    +          0x170
    +          0x20
    +          0x00000001
    +          
    +            
    +              CLK_EN
    +              clk_en
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DATE
    +          SENSITIVE_DATE_REG
    +          0xFFC
    +          0x20
    +          0x02010200
    +          
    +            
    +              DATE
    +              reg_date
    +              0
    +              28
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      SHA
    +      SHA (Secure Hash Algorithm) Accelerator
    +      SHA
    +      0x6003B000
    +      
    +        0x0
    +        0xB0
    +        registers
    +      
    +      
    +        SHA
    +        49
    +      
    +      
    +        
    +          MODE
    +          Initial configuration register.
    +          0x0
    +          0x20
    +          
    +            
    +              MODE
    +              Sha mode.
    +              0
    +              3
    +              read-write
    +            
    +          
    +        
    +        
    +          T_STRING
    +          SHA 512/t configuration register 0.
    +          0x4
    +          0x20
    +          
    +            
    +              T_STRING
    +              Sha t_string (used if and only if mode == SHA_512/t).
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          T_LENGTH
    +          SHA 512/t configuration register 1.
    +          0x8
    +          0x20
    +          
    +            
    +              T_LENGTH
    +              Sha t_length (used if and only if mode == SHA_512/t).
    +              0
    +              6
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_BLOCK_NUM
    +          DMA configuration register 0.
    +          0xC
    +          0x20
    +          
    +            
    +              DMA_BLOCK_NUM
    +              Dma-sha block number.
    +              0
    +              6
    +              read-write
    +            
    +          
    +        
    +        
    +          START
    +          Typical SHA configuration register 0.
    +          0x10
    +          0x20
    +          
    +            
    +              START
    +              Reserved.
    +              1
    +              31
    +              read-only
    +            
    +          
    +        
    +        
    +          CONTINUE
    +          Typical SHA configuration register 1.
    +          0x14
    +          0x20
    +          
    +            
    +              CONTINUE
    +              Reserved.
    +              1
    +              31
    +              read-only
    +            
    +          
    +        
    +        
    +          BUSY
    +          Busy register.
    +          0x18
    +          0x20
    +          
    +            
    +              STATE
    +              Sha busy state. 1'b0: idle. 1'b1: busy.
    +              0
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          DMA_START
    +          DMA configuration register 1.
    +          0x1C
    +          0x20
    +          
    +            
    +              DMA_START
    +              Start dma-sha.
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          DMA_CONTINUE
    +          DMA configuration register 2.
    +          0x20
    +          0x20
    +          
    +            
    +              DMA_CONTINUE
    +              Continue dma-sha.
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          CLEAR_IRQ
    +          Interrupt clear register.
    +          0x24
    +          0x20
    +          
    +            
    +              CLEAR_INTERRUPT
    +              Clear sha interrupt.
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          IRQ_ENA
    +          Interrupt enable register.
    +          0x28
    +          0x20
    +          
    +            
    +              INTERRUPT_ENA
    +              Sha interrupt enable register. 1'b0: disable(default). 1'b1: enable.
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DATE
    +          Date register.
    +          0x2C
    +          0x20
    +          0x20200616
    +          
    +            
    +              DATE
    +              Sha date information/ sha version information.
    +              0
    +              30
    +              read-write
    +            
    +          
    +        
    +        
    +          64
    +          0x1
    +          H_MEM[%s]
    +          Sha H memory which contains intermediate hash or finial hash.
    +          0x40
    +          0x8
    +        
    +        
    +          64
    +          0x1
    +          M_MEM[%s]
    +          Sha M memory which contains message.
    +          0x80
    +          0x8
    +        
    +      
    +    
    +    
    +      SPI0
    +      SPI (Serial Peripheral Interface) Controller
    +      SPI0
    +      0x60003000
    +      
    +        0x0
    +        0x48
    +        registers
    +      
    +      
    +        
    +          CTRL
    +          SPI0 control register.
    +          0x8
    +          0x20
    +          0x002C2000
    +          
    +            
    +              FDUMMY_OUT
    +              In the dummy phase the signal level of spi is output by the spi controller.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              FCMD_DUAL
    +              Apply 2 signals during command phase 1:enable 0: disable
    +              7
    +              1
    +              read-write
    +            
    +            
    +              FCMD_QUAD
    +              Apply 4 signals during command phase 1:enable 0: disable
    +              8
    +              1
    +              read-write
    +            
    +            
    +              FASTRD_MODE
    +              This bit enable the bits: spi_mem_fread_qio, spi_mem_fread_dio, spi_mem_fread_qout and spi_mem_fread_dout. 1: enable 0: disable.
    +              13
    +              1
    +              read-write
    +            
    +            
    +              FREAD_DUAL
    +              In the read operations, read-data phase apply 2 signals. 1: enable 0: disable.
    +              14
    +              1
    +              read-write
    +            
    +            
    +              Q_POL
    +              The bit is used to set MISO line polarity, 1: high 0, low
    +              18
    +              1
    +              read-write
    +            
    +            
    +              D_POL
    +              The bit is used to set MOSI line polarity, 1: high 0, low
    +              19
    +              1
    +              read-write
    +            
    +            
    +              FREAD_QUAD
    +              In the read operations read-data phase apply 4 signals. 1: enable 0: disable.
    +              20
    +              1
    +              read-write
    +            
    +            
    +              WP
    +              Write protect signal output when SPI is idle.  1: output high, 0: output low.
    +              21
    +              1
    +              read-write
    +            
    +            
    +              FREAD_DIO
    +              In the read operations address phase and read-data phase apply 2 signals. 1: enable 0: disable.
    +              23
    +              1
    +              read-write
    +            
    +            
    +              FREAD_QIO
    +              In the read operations address phase and read-data phase apply 4 signals. 1: enable 0: disable.
    +              24
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CTRL1
    +          SPI0 control1 register.
    +          0xC
    +          0x20
    +          
    +            
    +              CLK_MODE
    +              SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is alwasy on.
    +              0
    +              2
    +              read-write
    +            
    +            
    +              RXFIFO_RST
    +              SPI0 RX FIFO reset signal.
    +              30
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          CTRL2
    +          SPI0 control2 register.
    +          0x10
    +          0x20
    +          0x00000021
    +          
    +            
    +              CS_SETUP_TIME
    +              (cycles-1) of prepare phase by spi clock this bits are combined with spi_mem_cs_setup bit.
    +              0
    +              5
    +              read-write
    +            
    +            
    +              CS_HOLD_TIME
    +              Spi cs signal is delayed to inactive by spi clock this bits are combined with spi_mem_cs_hold bit.
    +              5
    +              5
    +              read-write
    +            
    +            
    +              CS_HOLD_DELAY
    +              These bits are used to set the minimum CS high time tSHSL between SPI burst transfer when accesses to flash. tSHSL is (SPI_MEM_CS_HOLD_DELAY[5:0] + 1) MSPI core clock cycles.
    +              25
    +              6
    +              read-write
    +            
    +            
    +              SYNC_RESET
    +              The FSM will be reset.
    +              31
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          CLOCK
    +          SPI clock division control register.
    +          0x14
    +          0x20
    +          0x00030103
    +          
    +            
    +              CLKCNT_L
    +              In the master mode it must be equal to spi_mem_clkcnt_N.
    +              0
    +              8
    +              read-write
    +            
    +            
    +              CLKCNT_H
    +              In the master mode it must be floor((spi_mem_clkcnt_N+1)/2-1).
    +              8
    +              8
    +              read-write
    +            
    +            
    +              CLKCNT_N
    +              In the master mode it is the divider of spi_mem_clk. So spi_mem_clk frequency is system/(spi_mem_clkcnt_N+1)
    +              16
    +              8
    +              read-write
    +            
    +            
    +              CLK_EQU_SYSCLK
    +              Set this bit in 1-division mode.
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          USER
    +          SPI0 user register.
    +          0x18
    +          0x20
    +          
    +            
    +              CS_HOLD
    +              spi cs keep low when spi is in  done  phase. 1: enable 0: disable.
    +              6
    +              1
    +              read-write
    +            
    +            
    +              CS_SETUP
    +              spi cs is enable when spi is in  prepare  phase. 1: enable 0: disable.
    +              7
    +              1
    +              read-write
    +            
    +            
    +              CK_OUT_EDGE
    +              the bit combined with spi_mem_mosi_delay_mode bits to set mosi signal delay mode.
    +              9
    +              1
    +              read-write
    +            
    +            
    +              USR_DUMMY_IDLE
    +              spi clock is disable in dummy phase when the bit is enable.
    +              26
    +              1
    +              read-write
    +            
    +            
    +              USR_DUMMY
    +              This bit enable the dummy phase of an operation.
    +              29
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          USER1
    +          SPI0 user1 register.
    +          0x1C
    +          0x20
    +          0x5C000007
    +          
    +            
    +              USR_DUMMY_CYCLELEN
    +              The length in spi_mem_clk cycles of dummy phase. The register value shall be (cycle_num-1).
    +              0
    +              6
    +              read-write
    +            
    +            
    +              USR_ADDR_BITLEN
    +              The length in bits of address phase. The register value shall be (bit_num-1).
    +              26
    +              6
    +              read-write
    +            
    +          
    +        
    +        
    +          USER2
    +          SPI0 user2 register.
    +          0x20
    +          0x20
    +          0x70000000
    +          
    +            
    +              USR_COMMAND_VALUE
    +              The value of  command.
    +              0
    +              16
    +              read-write
    +            
    +            
    +              USR_COMMAND_BITLEN
    +              The length in bits of command phase. The register value shall be (bit_num-1)
    +              28
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          RD_STATUS
    +          SPI0 read control register.
    +          0x2C
    +          0x20
    +          
    +            
    +              WB_MODE
    +              Mode bits in the flash fast read mode  it is combined with spi_mem_fastrd_mode bit.
    +              16
    +              8
    +              read-write
    +            
    +          
    +        
    +        
    +          MISC
    +          SPI0 misc register
    +          0x34
    +          0x20
    +          
    +            
    +              TRANS_END
    +              The bit is used to indicate the  spi0_mst_st controlled transmitting is done.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              TRANS_END_INT_ENA
    +              The bit is used to enable the interrupt of  spi0_mst_st controlled transmitting is done.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              CSPI_ST_TRANS_END
    +              The bit is used to indicate the  spi0_slv_st controlled transmitting is done.
    +              5
    +              1
    +              read-write
    +            
    +            
    +              CSPI_ST_TRANS_END_INT_ENA
    +              The bit is used to enable the interrupt of spi0_slv_st controlled transmitting is done.
    +              6
    +              1
    +              read-write
    +            
    +            
    +              CK_IDLE_EDGE
    +              1: spi clk line is high when idle     0: spi clk line is low when idle
    +              9
    +              1
    +              read-write
    +            
    +            
    +              CS_KEEP_ACTIVE
    +              spi cs line keep low when the bit is set.
    +              10
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CACHE_FCTRL
    +          SPI0 bit mode control register.
    +          0x3C
    +          0x20
    +          
    +            
    +              CACHE_REQ_EN
    +              For SPI0, Cache access enable, 1: enable, 0:disable.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              CACHE_USR_ADDR_4BYTE
    +              For SPI0,  cache  read flash with 4 bytes address, 1: enable, 0:disable.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              CACHE_FLASH_USR_CMD
    +              For SPI0,  cache  read flash for user define command, 1: enable, 0:disable.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              FDIN_DUAL
    +              For SPI0 flash, din phase apply 2 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_dio.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              FDOUT_DUAL
    +              For SPI0 flash, dout phase apply 2 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_dio.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              FADDR_DUAL
    +              For SPI0 flash, address phase apply 2 signals. 1: enable 0: disable.  The bit is the same with spi_mem_fread_dio.
    +              5
    +              1
    +              read-write
    +            
    +            
    +              FDIN_QUAD
    +              For SPI0 flash, din phase apply 4 signals. 1: enable 0: disable.  The bit is the same with spi_mem_fread_qio.
    +              6
    +              1
    +              read-write
    +            
    +            
    +              FDOUT_QUAD
    +              For SPI0 flash, dout phase apply 4 signals. 1: enable 0: disable.  The bit is the same with spi_mem_fread_qio.
    +              7
    +              1
    +              read-write
    +            
    +            
    +              FADDR_QUAD
    +              For SPI0 flash, address phase apply 4 signals. 1: enable 0: disable.  The bit is the same with spi_mem_fread_qio.
    +              8
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          FSM
    +          SPI0 FSM status register
    +          0x54
    +          0x20
    +          0x00000200
    +          
    +            
    +              CSPI_ST
    +              The current status of SPI0 slave FSM: spi0_slv_st. 0: idle state, 1: preparation state, 2: send command state, 3: send address state, 4: wait state, 5: read data state, 6:write data state, 7: done state, 8: read data end state.
    +              0
    +              4
    +              read-only
    +            
    +            
    +              EM_ST
    +              The current status of SPI0 master FSM: spi0_mst_st. 0: idle state, 1:EM_CACHE_GRANT , 2: program/erase suspend state, 3: SPI0 read data state, 4: wait cache/EDMA sent data is stored in SPI0 TX FIFO, 5: SPI0 write data state.
    +              4
    +              3
    +              read-only
    +            
    +            
    +              CSPI_LOCK_DELAY_TIME
    +              The lock delay time of SPI0/1 arbiter by spi0_slv_st, after PER is sent by SPI1.
    +              7
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          TIMING_CALI
    +          SPI0 timing calibration register
    +          0xA8
    +          0x20
    +          0x00000001
    +          
    +            
    +              TIMING_CLK_ENA
    +              The bit is used to enable timing adjust clock for all reading operations.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              TIMING_CALI
    +              The bit is used to enable timing auto-calibration for all reading operations.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              EXTRA_DUMMY_CYCLELEN
    +              add extra dummy spi clock cycle length for spi clock calibration.
    +              2
    +              3
    +              read-write
    +            
    +          
    +        
    +        
    +          DIN_MODE
    +          SPI0 input delay mode control register
    +          0xAC
    +          0x20
    +          
    +            
    +              DIN0_MODE
    +              the input signals are delayed by system clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb,  3: input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input with the spi_clk high edge,  6: input with the spi_clk low edge
    +              0
    +              2
    +              read-write
    +            
    +            
    +              DIN1_MODE
    +              the input signals are delayed by system clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb,  3: input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input with the spi_clk high edge,  6: input with the spi_clk low edge
    +              2
    +              2
    +              read-write
    +            
    +            
    +              DIN2_MODE
    +              the input signals are delayed by system clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb,  3: input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input with the spi_clk high edge,  6: input with the spi_clk low edge
    +              4
    +              2
    +              read-write
    +            
    +            
    +              DIN3_MODE
    +              the input signals are delayed by system clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb,  3: input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input with the spi_clk high edge,  6: input with the spi_clk low edge
    +              6
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          DIN_NUM
    +          SPI0 input delay number control register
    +          0xB0
    +          0x20
    +          
    +            
    +              DIN0_NUM
    +              the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...
    +              0
    +              2
    +              read-write
    +            
    +            
    +              DIN1_NUM
    +              the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...
    +              2
    +              2
    +              read-write
    +            
    +            
    +              DIN2_NUM
    +              the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...
    +              4
    +              2
    +              read-write
    +            
    +            
    +              DIN3_NUM
    +              the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...
    +              6
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          DOUT_MODE
    +          SPI0 output delay mode control register
    +          0xB4
    +          0x20
    +          
    +            
    +              DOUT0_MODE
    +              the output signals are delayed by system clock cycles, 0: output without delayed, 1: output with the posedge of clk_apb,2 output with the negedge of clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low edge
    +              0
    +              1
    +              read-write
    +            
    +            
    +              DOUT1_MODE
    +              the output signals are delayed by system clock cycles, 0: output without delayed, 1: output with the posedge of clk_apb,2 output with the negedge of clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low edge
    +              1
    +              1
    +              read-write
    +            
    +            
    +              DOUT2_MODE
    +              the output signals are delayed by system clock cycles, 0: output without delayed, 1: output with the posedge of clk_apb,2 output with the negedge of clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low edge
    +              2
    +              1
    +              read-write
    +            
    +            
    +              DOUT3_MODE
    +              the output signals are delayed by system clock cycles, 0: output without delayed, 1: output with the posedge of clk_apb,2 output with the negedge of clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low edge
    +              3
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CLOCK_GATE
    +          SPI0 clk_gate register
    +          0xDC
    +          0x20
    +          0x00000001
    +          
    +            
    +              CLK_EN
    +              Register clock gate enable signal. 1: Enable. 0: Disable.
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CORE_CLK_SEL
    +          SPI0 module clock select register
    +          0xE0
    +          0x20
    +          
    +            
    +              SPI01_CLK_SEL
    +              When the digital system clock selects PLL clock and the frequency of PLL clock is 480MHz, the value of reg_spi01_clk_sel:  0: SPI0/1 module clock (clk) is 80MHz. 1: SPI0/1 module clock (clk) is 120MHz.  2: SPI0/1 module clock (clk) 160MHz. 3: Not used. When the digital system clock selects PLL clock and the frequency of PLL clock is 320MHz, the value of reg_spi01_clk_sel:  0: SPI0/1 module clock (clk) is 80MHz. 1: SPI0/1 module clock (clk) is 80MHz.  2: SPI0/1 module clock (clk) 160MHz. 3: Not used.
    +              0
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          DATE
    +          Version control register
    +          0x3FC
    +          0x20
    +          0x02007130
    +          
    +            
    +              DATE
    +              SPI register version.
    +              0
    +              28
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      SPI1
    +      SPI (Serial Peripheral Interface) Controller
    +      SPI1
    +      0x60002000
    +      
    +        0x0
    +        0xA8
    +        registers
    +      
    +      
    +        
    +          CMD
    +          SPI1 memory command register
    +          0x0
    +          0x20
    +          
    +            
    +              SPI1_MST_ST
    +              The current status of SPI1 master FSM.
    +              0
    +              4
    +              read-only
    +            
    +            
    +              MSPI_ST
    +              The current status of SPI1 slave FSM: mspi_st. 0: idle state, 1: preparation state, 2: send command state, 3: send address state, 4: wait state, 5: read data state, 6:write data state, 7: done state, 8: read data end state.
    +              4
    +              4
    +              read-only
    +            
    +            
    +              FLASH_PE
    +              In user mode, it is set to indicate that program/erase operation will be triggered. The bit is combined with spi_mem_usr bit. The bit will be cleared once the operation done.1: enable 0: disable.
    +              17
    +              1
    +              read-write
    +            
    +            
    +              USR
    +              User define command enable.  An operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.
    +              18
    +              1
    +              read-write
    +            
    +            
    +              FLASH_HPM
    +              Drive Flash into high performance mode.  The bit will be cleared once the operation done.1: enable 0: disable.
    +              19
    +              1
    +              read-write
    +            
    +            
    +              FLASH_RES
    +              This bit combined with reg_resandres bit releases Flash from the power-down state or high performance mode and obtains the devices ID. The bit will be cleared once the operation done.1: enable 0: disable.
    +              20
    +              1
    +              read-write
    +            
    +            
    +              FLASH_DP
    +              Drive Flash into power down.  An operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.
    +              21
    +              1
    +              read-write
    +            
    +            
    +              FLASH_CE
    +              Chip erase enable. Chip erase operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.
    +              22
    +              1
    +              read-write
    +            
    +            
    +              FLASH_BE
    +              Block erase enable(32KB) .  Block erase operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.
    +              23
    +              1
    +              read-write
    +            
    +            
    +              FLASH_SE
    +              Sector erase enable(4KB). Sector erase operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.
    +              24
    +              1
    +              read-write
    +            
    +            
    +              FLASH_PP
    +              Page program enable(1 byte ~256 bytes data to be programmed). Page program operation  will be triggered when the bit is set. The bit will be cleared once the operation done .1: enable 0: disable.
    +              25
    +              1
    +              read-write
    +            
    +            
    +              FLASH_WRSR
    +              Write status register enable.   Write status operation  will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.
    +              26
    +              1
    +              read-write
    +            
    +            
    +              FLASH_RDSR
    +              Read status register-1.  Read status operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.
    +              27
    +              1
    +              read-write
    +            
    +            
    +              FLASH_RDID
    +              Read JEDEC ID . Read ID command will be sent when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.
    +              28
    +              1
    +              read-write
    +            
    +            
    +              FLASH_WRDI
    +              Write flash disable. Write disable command will be sent when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.
    +              29
    +              1
    +              read-write
    +            
    +            
    +              FLASH_WREN
    +              Write flash enable.  Write enable command will be sent when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.
    +              30
    +              1
    +              read-write
    +            
    +            
    +              FLASH_READ
    +              Read flash enable. Read flash operation will be triggered when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          ADDR
    +          SPI1 address register
    +          0x4
    +          0x20
    +          
    +            
    +              USR_ADDR_VALUE
    +              In user mode, it is the memory address. other then the bit0-bit23 is the memory address, the bit24-bit31 are the byte length of a transfer.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          CTRL
    +          SPI1 control register.
    +          0x8
    +          0x20
    +          0x002CA000
    +          
    +            
    +              FDUMMY_OUT
    +              In the dummy phase the signal level of spi is output by the spi controller.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              FCMD_DUAL
    +              Apply 2 signals during command phase 1:enable 0: disable
    +              7
    +              1
    +              read-write
    +            
    +            
    +              FCMD_QUAD
    +              Apply 4 signals during command phase 1:enable 0: disable
    +              8
    +              1
    +              read-write
    +            
    +            
    +              FCS_CRC_EN
    +              For SPI1,  initialize crc32 module before writing encrypted data to flash. Active low.
    +              10
    +              1
    +              read-write
    +            
    +            
    +              TX_CRC_EN
    +              For SPI1,  enable crc32 when writing encrypted data to flash. 1: enable 0:disable
    +              11
    +              1
    +              read-write
    +            
    +            
    +              FASTRD_MODE
    +              This bit enable the bits: spi_mem_fread_qio, spi_mem_fread_dio, spi_mem_fread_qout and spi_mem_fread_dout. 1: enable 0: disable.
    +              13
    +              1
    +              read-write
    +            
    +            
    +              FREAD_DUAL
    +              In the read operations, read-data phase apply 2 signals. 1: enable 0: disable.
    +              14
    +              1
    +              read-write
    +            
    +            
    +              RESANDRES
    +              The Device ID is read out to SPI_MEM_RD_STATUS register,  this bit combine with spi_mem_flash_res bit. 1: enable 0: disable.
    +              15
    +              1
    +              read-write
    +            
    +            
    +              Q_POL
    +              The bit is used to set MISO line polarity, 1: high 0, low
    +              18
    +              1
    +              read-write
    +            
    +            
    +              D_POL
    +              The bit is used to set MOSI line polarity, 1: high 0, low
    +              19
    +              1
    +              read-write
    +            
    +            
    +              FREAD_QUAD
    +              In the read operations read-data phase apply 4 signals. 1: enable 0: disable.
    +              20
    +              1
    +              read-write
    +            
    +            
    +              WP
    +              Write protect signal output when SPI is idle.  1: output high, 0: output low.
    +              21
    +              1
    +              read-write
    +            
    +            
    +              WRSR_2B
    +              two bytes data will be written to status register when it is set. 1: enable 0: disable.
    +              22
    +              1
    +              read-write
    +            
    +            
    +              FREAD_DIO
    +              In the read operations address phase and read-data phase apply 2 signals. 1: enable 0: disable.
    +              23
    +              1
    +              read-write
    +            
    +            
    +              FREAD_QIO
    +              In the read operations address phase and read-data phase apply 4 signals. 1: enable 0: disable.
    +              24
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CTRL1
    +          SPI1 control1 register.
    +          0xC
    +          0x20
    +          0x00000FFC
    +          
    +            
    +              CLK_MODE
    +              SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is alwasy on.
    +              0
    +              2
    +              read-write
    +            
    +            
    +              CS_HOLD_DLY_RES
    +              After RES/DP/HPM command is sent, SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 512) SPI_CLK cycles.
    +              2
    +              10
    +              read-write
    +            
    +          
    +        
    +        
    +          CTRL2
    +          SPI1 control2 register.
    +          0x10
    +          0x20
    +          
    +            
    +              SYNC_RESET
    +              The FSM will be reset.
    +              31
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          CLOCK
    +          SPI1 clock division control register.
    +          0x14
    +          0x20
    +          0x00030103
    +          
    +            
    +              CLKCNT_L
    +              In the master mode it must be equal to spi_mem_clkcnt_N.
    +              0
    +              8
    +              read-write
    +            
    +            
    +              CLKCNT_H
    +              In the master mode it must be floor((spi_mem_clkcnt_N+1)/2-1).
    +              8
    +              8
    +              read-write
    +            
    +            
    +              CLKCNT_N
    +              In the master mode it is the divider of spi_mem_clk. So spi_mem_clk frequency is system/(spi_mem_clkcnt_N+1)
    +              16
    +              8
    +              read-write
    +            
    +            
    +              CLK_EQU_SYSCLK
    +              reserved
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          USER
    +          SPI1 user register.
    +          0x18
    +          0x20
    +          0x80000000
    +          
    +            
    +              CK_OUT_EDGE
    +              the bit combined with spi_mem_mosi_delay_mode bits to set mosi signal delay mode.
    +              9
    +              1
    +              read-write
    +            
    +            
    +              FWRITE_DUAL
    +              In the write operations read-data phase apply 2 signals
    +              12
    +              1
    +              read-write
    +            
    +            
    +              FWRITE_QUAD
    +              In the write operations read-data phase apply 4 signals
    +              13
    +              1
    +              read-write
    +            
    +            
    +              FWRITE_DIO
    +              In the write operations address phase and read-data phase apply 2 signals.
    +              14
    +              1
    +              read-write
    +            
    +            
    +              FWRITE_QIO
    +              In the write operations address phase and read-data phase apply 4 signals.
    +              15
    +              1
    +              read-write
    +            
    +            
    +              USR_MISO_HIGHPART
    +              read-data phase only access to high-part of the buffer spi_mem_w8~spi_mem_w15. 1: enable 0: disable.
    +              24
    +              1
    +              read-write
    +            
    +            
    +              USR_MOSI_HIGHPART
    +              write-data phase only access to high-part of the buffer spi_mem_w8~spi_mem_w15. 1: enable 0: disable.
    +              25
    +              1
    +              read-write
    +            
    +            
    +              USR_DUMMY_IDLE
    +              SPI clock is disable in dummy phase when the bit is enable.
    +              26
    +              1
    +              read-write
    +            
    +            
    +              USR_MOSI
    +              This bit enable the write-data phase of an operation.
    +              27
    +              1
    +              read-write
    +            
    +            
    +              USR_MISO
    +              This bit enable the read-data phase of an operation.
    +              28
    +              1
    +              read-write
    +            
    +            
    +              USR_DUMMY
    +              This bit enable the dummy phase of an operation.
    +              29
    +              1
    +              read-write
    +            
    +            
    +              USR_ADDR
    +              This bit enable the address phase of an operation.
    +              30
    +              1
    +              read-write
    +            
    +            
    +              USR_COMMAND
    +              This bit enable the command phase of an operation.
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          USER1
    +          SPI1 user1 register.
    +          0x1C
    +          0x20
    +          0x5C000007
    +          
    +            
    +              USR_DUMMY_CYCLELEN
    +              The length in spi_mem_clk cycles of dummy phase. The register value shall be (cycle_num-1).
    +              0
    +              6
    +              read-write
    +            
    +            
    +              USR_ADDR_BITLEN
    +              The length in bits of address phase. The register value shall be (bit_num-1).
    +              26
    +              6
    +              read-write
    +            
    +          
    +        
    +        
    +          USER2
    +          SPI1 user2 register.
    +          0x20
    +          0x20
    +          0x70000000
    +          
    +            
    +              USR_COMMAND_VALUE
    +              The value of  command.
    +              0
    +              16
    +              read-write
    +            
    +            
    +              USR_COMMAND_BITLEN
    +              The length in bits of command phase. The register value shall be (bit_num-1)
    +              28
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          MOSI_DLEN
    +          SPI1 send data bit length control register.
    +          0x24
    +          0x20
    +          
    +            
    +              USR_MOSI_DBITLEN
    +              The length in bits of write-data. The register value shall be (bit_num-1).
    +              0
    +              10
    +              read-write
    +            
    +          
    +        
    +        
    +          MISO_DLEN
    +          SPI1 receive data bit length control register.
    +          0x28
    +          0x20
    +          
    +            
    +              USR_MISO_DBITLEN
    +              The length in bits of  read-data. The register value shall be (bit_num-1).
    +              0
    +              10
    +              read-write
    +            
    +          
    +        
    +        
    +          RD_STATUS
    +          SPI1 status register.
    +          0x2C
    +          0x20
    +          
    +            
    +              STATUS
    +              The value is stored when set spi_mem_flash_rdsr bit and spi_mem_flash_res bit.
    +              0
    +              16
    +              read-write
    +            
    +            
    +              WB_MODE
    +              Mode bits in the flash fast read mode  it is combined with spi_mem_fastrd_mode bit.
    +              16
    +              8
    +              read-write
    +            
    +          
    +        
    +        
    +          MISC
    +          SPI1 misc register
    +          0x34
    +          0x20
    +          0x00000002
    +          
    +            
    +              CS0_DIS
    +              SPI_CS0 pin enable, 1: disable SPI_CS0, 0: SPI_CS0 pin is active to select SPI device, such as flash, external RAM and so on.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              CS1_DIS
    +              SPI_CS1 pin enable, 1: disable SPI_CS1, 0: SPI_CS1 pin is active to select SPI device, such as flash, external RAM and so on.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              CK_IDLE_EDGE
    +              1: spi clk line is high when idle     0: spi clk line is low when idle
    +              9
    +              1
    +              read-write
    +            
    +            
    +              CS_KEEP_ACTIVE
    +              spi cs line keep low when the bit is set.
    +              10
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          TX_CRC
    +          SPI1 TX CRC data register.
    +          0x38
    +          0x20
    +          0xFFFFFFFF
    +          
    +            
    +              DATA
    +              For SPI1, the value of crc32.
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          CACHE_FCTRL
    +          SPI1 bit mode control register.
    +          0x3C
    +          0x20
    +          
    +            
    +              CACHE_USR_ADDR_4BYTE
    +              For SPI1,  cache  read flash with 4 bytes address, 1: enable, 0:disable.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              FDIN_DUAL
    +              For SPI1, din phase apply 2 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_dio.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              FDOUT_DUAL
    +              For SPI1, dout phase apply 2 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_dio.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              FADDR_DUAL
    +              For SPI1, address phase apply 2 signals. 1: enable 0: disable.  The bit is the same with spi_mem_fread_dio.
    +              5
    +              1
    +              read-write
    +            
    +            
    +              FDIN_QUAD
    +              For SPI1, din phase apply 4 signals. 1: enable 0: disable.  The bit is the same with spi_mem_fread_qio.
    +              6
    +              1
    +              read-write
    +            
    +            
    +              FDOUT_QUAD
    +              For SPI1, dout phase apply 4 signals. 1: enable 0: disable.  The bit is the same with spi_mem_fread_qio.
    +              7
    +              1
    +              read-write
    +            
    +            
    +              FADDR_QUAD
    +              For SPI1, address phase apply 4 signals. 1: enable 0: disable.  The bit is the same with spi_mem_fread_qio.
    +              8
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          W0
    +          SPI1 memory data buffer0
    +          0x58
    +          0x20
    +          
    +            
    +              BUF0
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W1
    +          SPI1 memory data buffer1
    +          0x5C
    +          0x20
    +          
    +            
    +              BUF1
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W2
    +          SPI1 memory data buffer2
    +          0x60
    +          0x20
    +          
    +            
    +              BUF2
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W3
    +          SPI1 memory data buffer3
    +          0x64
    +          0x20
    +          
    +            
    +              BUF3
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W4
    +          SPI1 memory data buffer4
    +          0x68
    +          0x20
    +          
    +            
    +              BUF4
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W5
    +          SPI1 memory data buffer5
    +          0x6C
    +          0x20
    +          
    +            
    +              BUF5
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W6
    +          SPI1 memory data buffer6
    +          0x70
    +          0x20
    +          
    +            
    +              BUF6
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W7
    +          SPI1 memory data buffer7
    +          0x74
    +          0x20
    +          
    +            
    +              BUF7
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W8
    +          SPI1 memory data buffer8
    +          0x78
    +          0x20
    +          
    +            
    +              BUF8
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W9
    +          SPI1 memory data buffer9
    +          0x7C
    +          0x20
    +          
    +            
    +              BUF9
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W10
    +          SPI1 memory data buffer10
    +          0x80
    +          0x20
    +          
    +            
    +              BUF10
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W11
    +          SPI1 memory data buffer11
    +          0x84
    +          0x20
    +          
    +            
    +              BUF11
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W12
    +          SPI1 memory data buffer12
    +          0x88
    +          0x20
    +          
    +            
    +              BUF12
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W13
    +          SPI1 memory data buffer13
    +          0x8C
    +          0x20
    +          
    +            
    +              BUF13
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W14
    +          SPI1 memory data buffer14
    +          0x90
    +          0x20
    +          
    +            
    +              BUF14
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W15
    +          SPI1 memory data buffer15
    +          0x94
    +          0x20
    +          
    +            
    +              BUF15
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          FLASH_WAITI_CTRL
    +          SPI1 wait idle control register
    +          0x98
    +          0x20
    +          0x00000014
    +          
    +            
    +              WAITI_DUMMY
    +              The dummy phase enable when wait flash idle (RDSR)
    +              1
    +              1
    +              read-write
    +            
    +            
    +              WAITI_CMD
    +              The command to wait flash idle(RDSR).
    +              2
    +              8
    +              read-write
    +            
    +            
    +              WAITI_DUMMY_CYCLELEN
    +              The dummy cycle length when wait flash idle(RDSR).
    +              10
    +              6
    +              read-write
    +            
    +          
    +        
    +        
    +          FLASH_SUS_CTRL
    +          SPI1 flash suspend control register
    +          0x9C
    +          0x20
    +          0x08002000
    +          
    +            
    +              FLASH_PER
    +              program erase resume bit, program erase suspend operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              FLASH_PES
    +              program erase suspend bit, program erase suspend operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              FLASH_PER_WAIT_EN
    +              1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4 or *128) SPI_CLK cycles after program erase resume command is sent. 0: SPI1 does not wait after program erase resume command is sent.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              FLASH_PES_WAIT_EN
    +              1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4 or *128) SPI_CLK cycles after program erase suspend command is sent. 0: SPI1 does not wait after program erase suspend command is sent.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              PES_PER_EN
    +              Set this bit to enable PES end triggers PER transfer option. If this bit is 0, application should send PER after PES is done.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              FLASH_PES_EN
    +              Set this bit to enable Auto-suspending function.
    +              5
    +              1
    +              read-write
    +            
    +            
    +              PESR_END_MSK
    +              The mask value when check SUS/SUS1/SUS2 status bit. If the read status value is status_in[15:0](only status_in[7:0] is valid when only one byte of data is read out, status_in[15:0] is valid when two bytes of data are read out), SUS/SUS1/SUS2 = status_in[15:0]^ SPI_MEM_PESR_END_MSK[15:0].
    +              6
    +              16
    +              read-write
    +            
    +            
    +              RD_SUS_2B
    +              1: Read two bytes when check flash SUS/SUS1/SUS2 status bit. 0:  Read one byte when check flash SUS/SUS1/SUS2 status bit
    +              22
    +              1
    +              read-write
    +            
    +            
    +              PER_END_EN
    +              1: Both WIP and SUS/SUS1/SUS2 bits should be checked to insure the resume status of flash. 0: Only need to check WIP is 0.
    +              23
    +              1
    +              read-write
    +            
    +            
    +              PES_END_EN
    +              1: Both WIP and SUS/SUS1/SUS2 bits should be checked to insure the suspend status of flash. 0: Only need to check WIP is 0.
    +              24
    +              1
    +              read-write
    +            
    +            
    +              SUS_TIMEOUT_CNT
    +              When SPI1 checks SUS/SUS1/SUS2 bits fail for SPI_MEM_SUS_TIMEOUT_CNT[6:0] times, it will be treated as check pass.
    +              25
    +              7
    +              read-write
    +            
    +          
    +        
    +        
    +          FLASH_SUS_CMD
    +          SPI1 flash suspend command register
    +          0xA0
    +          0x20
    +          0x0005757A
    +          
    +            
    +              FLASH_PER_COMMAND
    +              Program/Erase resume command.
    +              0
    +              8
    +              read-write
    +            
    +            
    +              FLASH_PES_COMMAND
    +              Program/Erase suspend command.
    +              8
    +              8
    +              read-write
    +            
    +            
    +              WAIT_PESR_COMMAND
    +              Flash SUS/SUS1/SUS2 status bit read command. The command should be sent when SUS/SUS1/SUS2 bit should be checked to insure the suspend or resume status of flash.
    +              16
    +              16
    +              read-write
    +            
    +          
    +        
    +        
    +          SUS_STATUS
    +          SPI1 flash suspend status register
    +          0xA4
    +          0x20
    +          
    +            
    +              FLASH_SUS
    +              The status of flash suspend, only used in SPI1.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              WAIT_PESR_CMD_2B
    +              1: SPI1 sends out SPI_MEM_WAIT_PESR_COMMAND[15:0] to check SUS/SUS1/SUS2 bit. 0: SPI1 sends out SPI_MEM_WAIT_PESR_COMMAND[7:0] to check SUS/SUS1/SUS2 bit.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              FLASH_HPM_DLY_128
    +              1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after HPM command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after HPM command is sent.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              FLASH_RES_DLY_128
    +              1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after RES command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after RES command is sent.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              FLASH_DP_DLY_128
    +              1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after DP command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after DP command is sent.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              FLASH_PER_DLY_128
    +              Valid when SPI_MEM_FLASH_PER_WAIT_EN is 1. 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after PER command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after PER command is sent.
    +              5
    +              1
    +              read-write
    +            
    +            
    +              FLASH_PES_DLY_128
    +              Valid when SPI_MEM_FLASH_PES_WAIT_EN is 1. 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after PES command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after PES command is sent.
    +              6
    +              1
    +              read-write
    +            
    +            
    +              SPI0_LOCK_EN
    +              1: Enable SPI0 lock SPI0/1 arbiter option. 0: Disable it.
    +              7
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          TIMING_CALI
    +          SPI1 timing control register
    +          0xA8
    +          0x20
    +          
    +            
    +              TIMING_CALI
    +              The bit is used to enable timing auto-calibration for all reading operations.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              EXTRA_DUMMY_CYCLELEN
    +              add extra dummy spi clock cycle length for spi clock calibration.
    +              2
    +              3
    +              read-write
    +            
    +          
    +        
    +        
    +          INT_ENA
    +          SPI1 interrupt enable register
    +          0xC0
    +          0x20
    +          
    +            
    +              PER_END_INT_ENA
    +              The enable bit for SPI_MEM_PER_END_INT interrupt.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              PES_END_INT_ENA
    +              The enable bit for SPI_MEM_PES_END_INT interrupt.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              WPE_END_INT_ENA
    +              The enable bit for SPI_MEM_WPE_END_INT interrupt.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              SLV_ST_END_INT_ENA
    +              The enable bit for SPI_MEM_SLV_ST_END_INT interrupt.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              MST_ST_END_INT_ENA
    +              The enable bit for SPI_MEM_MST_ST_END_INT interrupt.
    +              4
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          INT_CLR
    +          SPI1 interrupt clear register
    +          0xC4
    +          0x20
    +          
    +            
    +              PER_END_INT_CLR
    +              The clear bit for SPI_MEM_PER_END_INT interrupt.
    +              0
    +              1
    +              write-only
    +            
    +            
    +              PES_END_INT_CLR
    +              The clear bit for SPI_MEM_PES_END_INT interrupt.
    +              1
    +              1
    +              write-only
    +            
    +            
    +              WPE_END_INT_CLR
    +              The clear bit for SPI_MEM_WPE_END_INT interrupt.
    +              2
    +              1
    +              write-only
    +            
    +            
    +              SLV_ST_END_INT_CLR
    +              The clear bit for SPI_MEM_SLV_ST_END_INT interrupt.
    +              3
    +              1
    +              write-only
    +            
    +            
    +              MST_ST_END_INT_CLR
    +              The clear bit for SPI_MEM_MST_ST_END_INT interrupt.
    +              4
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          INT_RAW
    +          SPI1 interrupt raw register
    +          0xC8
    +          0x20
    +          
    +            
    +              PER_END_INT_RAW
    +              The raw bit for SPI_MEM_PER_END_INT interrupt. 1: Triggered when Auto Resume command (0x7A) is sent and flash is resumed. 0: Others.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              PES_END_INT_RAW
    +              The raw bit for SPI_MEM_PES_END_INT interrupt.1: Triggered when Auto Suspend command (0x75) is sent and flash is suspended. 0: Others.
    +              1
    +              1
    +              read-only
    +            
    +            
    +              WPE_END_INT_RAW
    +              The raw bit for SPI_MEM_WPE_END_INT interrupt. 1: Triggered when WRSR/PP/SE/BE/CE is sent and flash is already idle. 0: Others.
    +              2
    +              1
    +              read-only
    +            
    +            
    +              SLV_ST_END_INT_RAW
    +              The raw bit for SPI_MEM_SLV_ST_END_INT interrupt. 1: Triggered when spi1_slv_st is changed from non idle state to idle state. It means that SPI_CS raises high. 0: Others
    +              3
    +              1
    +              read-only
    +            
    +            
    +              MST_ST_END_INT_RAW
    +              The raw bit for SPI_MEM_MST_ST_END_INT interrupt. 1: Triggered when spi1_mst_st is changed from non idle state to idle state. 0: Others.
    +              4
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_ST
    +          SPI1 interrupt status register
    +          0xCC
    +          0x20
    +          
    +            
    +              PER_END_INT_ST
    +              The status bit for SPI_MEM_PER_END_INT interrupt.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              PES_END_INT_ST
    +              The status bit for SPI_MEM_PES_END_INT interrupt.
    +              1
    +              1
    +              read-only
    +            
    +            
    +              WPE_END_INT_ST
    +              The status bit for SPI_MEM_WPE_END_INT interrupt.
    +              2
    +              1
    +              read-only
    +            
    +            
    +              SLV_ST_END_INT_ST
    +              The status bit for SPI_MEM_SLV_ST_END_INT interrupt.
    +              3
    +              1
    +              read-only
    +            
    +            
    +              MST_ST_END_INT_ST
    +              The status bit for SPI_MEM_MST_ST_END_INT interrupt.
    +              4
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          CLOCK_GATE
    +          SPI1 clk_gate register
    +          0xDC
    +          0x20
    +          0x00000001
    +          
    +            
    +              CLK_EN
    +              Register clock gate enable signal. 1: Enable. 0: Disable.
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DATE
    +          Version control register
    +          0x3FC
    +          0x20
    +          0x02007170
    +          
    +            
    +              DATE
    +              Version control register
    +              0
    +              28
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      SPI2
    +      SPI (Serial Peripheral Interface) Controller
    +      SPI2
    +      0x60024000
    +      
    +        0x0
    +        0x94
    +        registers
    +      
    +      
    +        SPI2
    +        19
    +      
    +      
    +        
    +          CMD
    +          Command control register
    +          0x0
    +          0x20
    +          
    +            
    +              CONF_BITLEN
    +              Define the APB cycles of  SPI_CONF state. Can be configured in CONF state.
    +              0
    +              18
    +              read-write
    +            
    +            
    +              UPDATE
    +              Set this bit to synchronize SPI registers from APB clock domain into SPI module clock domain, which is only used in SPI master mode.
    +              23
    +              1
    +              read-write
    +            
    +            
    +              USR
    +              User define command enable.  An operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable. Can not be changed by CONF_buf.
    +              24
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          ADDR
    +          Address value register
    +          0x4
    +          0x20
    +          
    +            
    +              USR_ADDR_VALUE
    +              Address to slave. Can be configured in CONF state.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          CTRL
    +          SPI control register
    +          0x8
    +          0x20
    +          0x003C0000
    +          
    +            
    +              DUMMY_OUT
    +              In the dummy phase the signal level of spi is output by the spi controller. Can be configured in CONF state.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              FADDR_DUAL
    +              Apply 2 signals during addr phase 1:enable 0: disable. Can be configured in CONF state.
    +              5
    +              1
    +              read-write
    +            
    +            
    +              FADDR_QUAD
    +              Apply 4 signals during addr phase 1:enable 0: disable. Can be configured in CONF state.
    +              6
    +              1
    +              read-write
    +            
    +            
    +              FCMD_DUAL
    +              Apply 2 signals during command phase 1:enable 0: disable. Can be configured in CONF state.
    +              8
    +              1
    +              read-write
    +            
    +            
    +              FCMD_QUAD
    +              Apply 4 signals during command phase 1:enable 0: disable. Can be configured in CONF state.
    +              9
    +              1
    +              read-write
    +            
    +            
    +              FREAD_DUAL
    +              In the read operations, read-data phase apply 2 signals. 1: enable 0: disable. Can be configured in CONF state.
    +              14
    +              1
    +              read-write
    +            
    +            
    +              FREAD_QUAD
    +              In the read operations read-data phase apply 4 signals. 1: enable 0: disable.  Can be configured in CONF state.
    +              15
    +              1
    +              read-write
    +            
    +            
    +              Q_POL
    +              The bit is used to set MISO line polarity, 1: high 0, low. Can be configured in CONF state.
    +              18
    +              1
    +              read-write
    +            
    +            
    +              D_POL
    +              The bit is used to set MOSI line polarity, 1: high 0, low. Can be configured in CONF state.
    +              19
    +              1
    +              read-write
    +            
    +            
    +              HOLD_POL
    +              SPI_HOLD output value when SPI is idle. 1: output high, 0: output low. Can be configured in CONF state.
    +              20
    +              1
    +              read-write
    +            
    +            
    +              WP_POL
    +              Write protect signal output when SPI is idle.  1: output high, 0: output low.  Can be configured in CONF state.
    +              21
    +              1
    +              read-write
    +            
    +            
    +              RD_BIT_ORDER
    +              In read-data (MISO) phase 1: LSB first 0: MSB first. Can be configured in CONF state.
    +              25
    +              1
    +              read-write
    +            
    +            
    +              WR_BIT_ORDER
    +              In command address write-data (MOSI) phases 1: LSB firs 0: MSB first. Can be configured in CONF state.
    +              26
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CLOCK
    +          SPI clock control register
    +          0xC
    +          0x20
    +          0x80003043
    +          
    +            
    +              CLKCNT_L
    +              In the master mode it must be equal to spi_clkcnt_N. In the slave mode it must be 0. Can be configured in CONF state.
    +              0
    +              6
    +              read-write
    +            
    +            
    +              CLKCNT_H
    +              In the master mode it must be floor((spi_clkcnt_N+1)/2-1). In the slave mode it must be 0. Can be configured in CONF state.
    +              6
    +              6
    +              read-write
    +            
    +            
    +              CLKCNT_N
    +              In the master mode it is the divider of spi_clk. So spi_clk frequency is system/(spi_clkdiv_pre+1)/(spi_clkcnt_N+1). Can be configured in CONF state.
    +              12
    +              6
    +              read-write
    +            
    +            
    +              CLKDIV_PRE
    +              In the master mode it is pre-divider of spi_clk.  Can be configured in CONF state.
    +              18
    +              4
    +              read-write
    +            
    +            
    +              CLK_EQU_SYSCLK
    +              In the master mode 1: spi_clk is eqaul to system 0: spi_clk is divided from system clock. Can be configured in CONF state.
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          USER
    +          SPI USER control register
    +          0x10
    +          0x20
    +          0x800000C0
    +          
    +            
    +              DOUTDIN
    +              Set the bit to enable full duplex communication. 1: enable 0: disable. Can be configured in CONF state.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              QPI_MODE
    +              Both for master mode and slave mode. 1: spi controller is in QPI mode. 0: others. Can be configured in CONF state.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              TSCK_I_EDGE
    +              In the slave mode, this bit can be used to change the polarity of tsck. 0: tsck = spi_ck_i. 1:tsck = !spi_ck_i.
    +              5
    +              1
    +              read-write
    +            
    +            
    +              CS_HOLD
    +              spi cs keep low when spi is in  done  phase. 1: enable 0: disable. Can be configured in CONF state.
    +              6
    +              1
    +              read-write
    +            
    +            
    +              CS_SETUP
    +              spi cs is enable when spi is in  prepare  phase. 1: enable 0: disable. Can be configured in CONF state.
    +              7
    +              1
    +              read-write
    +            
    +            
    +              RSCK_I_EDGE
    +              In the slave mode, this bit can be used to change the polarity of rsck. 0: rsck = !spi_ck_i. 1:rsck = spi_ck_i.
    +              8
    +              1
    +              read-write
    +            
    +            
    +              CK_OUT_EDGE
    +              the bit combined with spi_mosi_delay_mode bits to set mosi signal delay mode. Can be configured in CONF state.
    +              9
    +              1
    +              read-write
    +            
    +            
    +              FWRITE_DUAL
    +              In the write operations read-data phase apply 2 signals. Can be configured in CONF state.
    +              12
    +              1
    +              read-write
    +            
    +            
    +              FWRITE_QUAD
    +              In the write operations read-data phase apply 4 signals. Can be configured in CONF state.
    +              13
    +              1
    +              read-write
    +            
    +            
    +              USR_CONF_NXT
    +              1: Enable the DMA CONF phase of next seg-trans operation, which means seg-trans will continue. 0: The seg-trans will end after the current SPI seg-trans or this is not seg-trans mode. Can be configured in CONF state.
    +              15
    +              1
    +              read-write
    +            
    +            
    +              SIO
    +              Set the bit to enable 3-line half duplex communication mosi and miso signals share the same pin. 1: enable 0: disable. Can be configured in CONF state.
    +              17
    +              1
    +              read-write
    +            
    +            
    +              USR_MISO_HIGHPART
    +              read-data phase only access to high-part of the buffer spi_w8~spi_w15. 1: enable 0: disable. Can be configured in CONF state.
    +              24
    +              1
    +              read-write
    +            
    +            
    +              USR_MOSI_HIGHPART
    +              write-data phase only access to high-part of the buffer spi_w8~spi_w15. 1: enable 0: disable.  Can be configured in CONF state.
    +              25
    +              1
    +              read-write
    +            
    +            
    +              USR_DUMMY_IDLE
    +              spi clock is disable in dummy phase when the bit is enable. Can be configured in CONF state.
    +              26
    +              1
    +              read-write
    +            
    +            
    +              USR_MOSI
    +              This bit enable the write-data phase of an operation. Can be configured in CONF state.
    +              27
    +              1
    +              read-write
    +            
    +            
    +              USR_MISO
    +              This bit enable the read-data phase of an operation. Can be configured in CONF state.
    +              28
    +              1
    +              read-write
    +            
    +            
    +              USR_DUMMY
    +              This bit enable the dummy phase of an operation. Can be configured in CONF state.
    +              29
    +              1
    +              read-write
    +            
    +            
    +              USR_ADDR
    +              This bit enable the address phase of an operation. Can be configured in CONF state.
    +              30
    +              1
    +              read-write
    +            
    +            
    +              USR_COMMAND
    +              This bit enable the command phase of an operation. Can be configured in CONF state.
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          USER1
    +          SPI USER control register 1
    +          0x14
    +          0x20
    +          0xB8410007
    +          
    +            
    +              USR_DUMMY_CYCLELEN
    +              The length in spi_clk cycles of dummy phase. The register value shall be (cycle_num-1). Can be configured in CONF state.
    +              0
    +              8
    +              read-write
    +            
    +            
    +              MST_WFULL_ERR_END_EN
    +              1: SPI transfer is ended when SPI RX AFIFO wfull error is valid in GP-SPI master FD/HD-mode. 0: SPI transfer is not ended when SPI RX AFIFO wfull error is valid in GP-SPI master FD/HD-mode.
    +              16
    +              1
    +              read-write
    +            
    +            
    +              CS_SETUP_TIME
    +              (cycles+1) of prepare phase by spi clock this bits are combined with spi_cs_setup bit. Can be configured in CONF state.
    +              17
    +              5
    +              read-write
    +            
    +            
    +              CS_HOLD_TIME
    +              delay cycles of cs pin by spi clock this bits are combined with spi_cs_hold bit. Can be configured in CONF state.
    +              22
    +              5
    +              read-write
    +            
    +            
    +              USR_ADDR_BITLEN
    +              The length in bits of address phase. The register value shall be (bit_num-1). Can be configured in CONF state.
    +              27
    +              5
    +              read-write
    +            
    +          
    +        
    +        
    +          USER2
    +          SPI USER control register 2
    +          0x18
    +          0x20
    +          0x78000000
    +          
    +            
    +              USR_COMMAND_VALUE
    +              The value of  command. Can be configured in CONF state.
    +              0
    +              16
    +              read-write
    +            
    +            
    +              MST_REMPTY_ERR_END_EN
    +              1: SPI transfer is ended when SPI TX AFIFO read empty error is valid in GP-SPI master FD/HD-mode. 0: SPI transfer is not ended when SPI TX AFIFO read empty error is valid in GP-SPI master FD/HD-mode.
    +              27
    +              1
    +              read-write
    +            
    +            
    +              USR_COMMAND_BITLEN
    +              The length in bits of command phase. The register value shall be (bit_num-1). Can be configured in CONF state.
    +              28
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          MS_DLEN
    +          SPI data bit length control register
    +          0x1C
    +          0x20
    +          
    +            
    +              MS_DATA_BITLEN
    +              The value of these bits is the configured SPI transmission data bit length in master mode DMA controlled transfer or CPU controlled transfer. The value is also the configured bit length in slave mode DMA RX controlled transfer. The register value shall be (bit_num-1). Can be configured in CONF state.
    +              0
    +              18
    +              read-write
    +            
    +          
    +        
    +        
    +          MISC
    +          SPI misc register
    +          0x20
    +          0x20
    +          0x0000003E
    +          
    +            
    +              CS0_DIS
    +              SPI CS0 pin enable, 1: disable CS0, 0: spi_cs0 signal is from/to CS0 pin. Can be configured in CONF state.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              CS1_DIS
    +              SPI CS1 pin enable, 1: disable CS1, 0: spi_cs1 signal is from/to CS1 pin. Can be configured in CONF state.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              CS2_DIS
    +              SPI CS2 pin enable, 1: disable CS2, 0: spi_cs2 signal is from/to CS2 pin. Can be configured in CONF state.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              CS3_DIS
    +              SPI CS3 pin enable, 1: disable CS3, 0: spi_cs3 signal is from/to CS3 pin. Can be configured in CONF state.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              CS4_DIS
    +              SPI CS4 pin enable, 1: disable CS4, 0: spi_cs4 signal is from/to CS4 pin. Can be configured in CONF state.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              CS5_DIS
    +              SPI CS5 pin enable, 1: disable CS5, 0: spi_cs5 signal is from/to CS5 pin. Can be configured in CONF state.
    +              5
    +              1
    +              read-write
    +            
    +            
    +              CK_DIS
    +              1: spi clk out disable,  0: spi clk out enable. Can be configured in CONF state.
    +              6
    +              1
    +              read-write
    +            
    +            
    +              MASTER_CS_POL
    +              In the master mode the bits are the polarity of spi cs line, the value is equivalent to spi_cs ^ spi_master_cs_pol. Can be configured in CONF state.
    +              7
    +              6
    +              read-write
    +            
    +            
    +              SLAVE_CS_POL
    +              spi slave input cs polarity select. 1: inv  0: not change. Can be configured in CONF state.
    +              23
    +              1
    +              read-write
    +            
    +            
    +              CK_IDLE_EDGE
    +              1: spi clk line is high when idle     0: spi clk line is low when idle. Can be configured in CONF state.
    +              29
    +              1
    +              read-write
    +            
    +            
    +              CS_KEEP_ACTIVE
    +              spi cs line keep low when the bit is set. Can be configured in CONF state.
    +              30
    +              1
    +              read-write
    +            
    +            
    +              QUAD_DIN_PIN_SWAP
    +              1:  spi quad input swap enable  0:  spi quad input swap disable. Can be configured in CONF state.
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DIN_MODE
    +          SPI input delay mode configuration
    +          0x24
    +          0x20
    +          
    +            
    +              DIN0_MODE
    +              the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state.
    +              0
    +              2
    +              read-write
    +            
    +            
    +              DIN1_MODE
    +              the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state.
    +              2
    +              2
    +              read-write
    +            
    +            
    +              DIN2_MODE
    +              the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state.
    +              4
    +              2
    +              read-write
    +            
    +            
    +              DIN3_MODE
    +              the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state.
    +              6
    +              2
    +              read-write
    +            
    +            
    +              TIMING_HCLK_ACTIVE
    +              1:enable hclk in SPI input timing module.  0: disable it. Can be configured in CONF state.
    +              16
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DIN_NUM
    +          SPI input delay number configuration
    +          0x28
    +          0x20
    +          
    +            
    +              DIN0_NUM
    +              the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...  Can be configured in CONF state.
    +              0
    +              2
    +              read-write
    +            
    +            
    +              DIN1_NUM
    +              the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...  Can be configured in CONF state.
    +              2
    +              2
    +              read-write
    +            
    +            
    +              DIN2_NUM
    +              the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...  Can be configured in CONF state.
    +              4
    +              2
    +              read-write
    +            
    +            
    +              DIN3_NUM
    +              the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...  Can be configured in CONF state.
    +              6
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          DOUT_MODE
    +          SPI output delay mode configuration
    +          0x2C
    +          0x20
    +          
    +            
    +              DOUT0_MODE
    +              The output signal 0 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              DOUT1_MODE
    +              The output signal 1 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              DOUT2_MODE
    +              The output signal 2 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              DOUT3_MODE
    +              The output signal 3 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state.
    +              3
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_CONF
    +          SPI DMA control register
    +          0x30
    +          0x20
    +          
    +            
    +              DMA_SLV_SEG_TRANS_EN
    +              Enable dma segment transfer in spi dma half slave mode. 1: enable. 0: disable.
    +              18
    +              1
    +              read-write
    +            
    +            
    +              SLV_RX_SEG_TRANS_CLR_EN
    +              1: spi_dma_infifo_full_vld is cleared by spi slave cmd 5. 0: spi_dma_infifo_full_vld is cleared by spi_trans_done.
    +              19
    +              1
    +              read-write
    +            
    +            
    +              SLV_TX_SEG_TRANS_CLR_EN
    +              1: spi_dma_outfifo_empty_vld is cleared by spi slave cmd 6. 0: spi_dma_outfifo_empty_vld is cleared by spi_trans_done.
    +              20
    +              1
    +              read-write
    +            
    +            
    +              RX_EOF_EN
    +              1: spi_dma_inlink_eof is set when the number of dma pushed data bytes is equal to the value of spi_slv/mst_dma_rd_bytelen[19:0] in spi dma transition.  0: spi_dma_inlink_eof is set by spi_trans_done in non-seg-trans or spi_dma_seg_trans_done in seg-trans.
    +              21
    +              1
    +              read-write
    +            
    +            
    +              DMA_RX_ENA
    +              Set this bit to enable SPI DMA controlled receive data mode.
    +              27
    +              1
    +              read-write
    +            
    +            
    +              DMA_TX_ENA
    +              Set this bit to enable SPI DMA controlled send data mode.
    +              28
    +              1
    +              read-write
    +            
    +            
    +              RX_AFIFO_RST
    +              Set this bit to reset RX AFIFO, which is used to receive data in SPI master and slave mode transfer.
    +              29
    +              1
    +              write-only
    +            
    +            
    +              BUF_AFIFO_RST
    +              Set this bit to reset BUF TX AFIFO, which is used send data out in SPI slave CPU controlled mode transfer and master mode transfer.
    +              30
    +              1
    +              write-only
    +            
    +            
    +              DMA_AFIFO_RST
    +              Set this bit to reset DMA TX AFIFO, which is used to send data out in SPI slave DMA controlled mode transfer.
    +              31
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          DMA_INT_ENA
    +          SPI DMA interrupt enable register
    +          0x34
    +          0x20
    +          
    +            
    +              DMA_INFIFO_FULL_ERR_INT_ENA
    +              The enable bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              DMA_OUTFIFO_EMPTY_ERR_INT_ENA
    +              The enable bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              SLV_EX_QPI_INT_ENA
    +              The enable bit for SPI slave Ex_QPI interrupt.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              SLV_EN_QPI_INT_ENA
    +              The enable bit for SPI slave En_QPI interrupt.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              SLV_CMD7_INT_ENA
    +              The enable bit for SPI slave CMD7 interrupt.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              SLV_CMD8_INT_ENA
    +              The enable bit for SPI slave CMD8 interrupt.
    +              5
    +              1
    +              read-write
    +            
    +            
    +              SLV_CMD9_INT_ENA
    +              The enable bit for SPI slave CMD9 interrupt.
    +              6
    +              1
    +              read-write
    +            
    +            
    +              SLV_CMDA_INT_ENA
    +              The enable bit for SPI slave CMDA interrupt.
    +              7
    +              1
    +              read-write
    +            
    +            
    +              SLV_RD_DMA_DONE_INT_ENA
    +              The enable bit for SPI_SLV_RD_DMA_DONE_INT interrupt.
    +              8
    +              1
    +              read-write
    +            
    +            
    +              SLV_WR_DMA_DONE_INT_ENA
    +              The enable bit for SPI_SLV_WR_DMA_DONE_INT interrupt.
    +              9
    +              1
    +              read-write
    +            
    +            
    +              SLV_RD_BUF_DONE_INT_ENA
    +              The enable bit for SPI_SLV_RD_BUF_DONE_INT interrupt.
    +              10
    +              1
    +              read-write
    +            
    +            
    +              SLV_WR_BUF_DONE_INT_ENA
    +              The enable bit for SPI_SLV_WR_BUF_DONE_INT interrupt.
    +              11
    +              1
    +              read-write
    +            
    +            
    +              TRANS_DONE_INT_ENA
    +              The enable bit for SPI_TRANS_DONE_INT interrupt.
    +              12
    +              1
    +              read-write
    +            
    +            
    +              DMA_SEG_TRANS_DONE_INT_ENA
    +              The enable bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt.
    +              13
    +              1
    +              read-write
    +            
    +            
    +              SEG_MAGIC_ERR_INT_ENA
    +              The enable bit for SPI_SEG_MAGIC_ERR_INT interrupt.
    +              14
    +              1
    +              read-write
    +            
    +            
    +              SLV_BUF_ADDR_ERR_INT_ENA
    +              The enable bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt.
    +              15
    +              1
    +              read-write
    +            
    +            
    +              SLV_CMD_ERR_INT_ENA
    +              The enable bit for SPI_SLV_CMD_ERR_INT interrupt.
    +              16
    +              1
    +              read-write
    +            
    +            
    +              MST_RX_AFIFO_WFULL_ERR_INT_ENA
    +              The enable bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt.
    +              17
    +              1
    +              read-write
    +            
    +            
    +              MST_TX_AFIFO_REMPTY_ERR_INT_ENA
    +              The enable bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt.
    +              18
    +              1
    +              read-write
    +            
    +            
    +              APP2_INT_ENA
    +              The enable bit for SPI_APP2_INT interrupt.
    +              19
    +              1
    +              read-write
    +            
    +            
    +              APP1_INT_ENA
    +              The enable bit for SPI_APP1_INT interrupt.
    +              20
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_INT_CLR
    +          SPI DMA interrupt clear register
    +          0x38
    +          0x20
    +          
    +            
    +              DMA_INFIFO_FULL_ERR_INT_CLR
    +              The clear bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt.
    +              0
    +              1
    +              write-only
    +            
    +            
    +              DMA_OUTFIFO_EMPTY_ERR_INT_CLR
    +              The clear bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt.
    +              1
    +              1
    +              write-only
    +            
    +            
    +              SLV_EX_QPI_INT_CLR
    +              The clear bit for SPI slave Ex_QPI interrupt.
    +              2
    +              1
    +              write-only
    +            
    +            
    +              SLV_EN_QPI_INT_CLR
    +              The clear bit for SPI slave En_QPI interrupt.
    +              3
    +              1
    +              write-only
    +            
    +            
    +              SLV_CMD7_INT_CLR
    +              The clear bit for SPI slave CMD7 interrupt.
    +              4
    +              1
    +              write-only
    +            
    +            
    +              SLV_CMD8_INT_CLR
    +              The clear bit for SPI slave CMD8 interrupt.
    +              5
    +              1
    +              write-only
    +            
    +            
    +              SLV_CMD9_INT_CLR
    +              The clear bit for SPI slave CMD9 interrupt.
    +              6
    +              1
    +              write-only
    +            
    +            
    +              SLV_CMDA_INT_CLR
    +              The clear bit for SPI slave CMDA interrupt.
    +              7
    +              1
    +              write-only
    +            
    +            
    +              SLV_RD_DMA_DONE_INT_CLR
    +              The clear bit for SPI_SLV_RD_DMA_DONE_INT interrupt.
    +              8
    +              1
    +              write-only
    +            
    +            
    +              SLV_WR_DMA_DONE_INT_CLR
    +              The clear bit for SPI_SLV_WR_DMA_DONE_INT interrupt.
    +              9
    +              1
    +              write-only
    +            
    +            
    +              SLV_RD_BUF_DONE_INT_CLR
    +              The clear bit for SPI_SLV_RD_BUF_DONE_INT interrupt.
    +              10
    +              1
    +              write-only
    +            
    +            
    +              SLV_WR_BUF_DONE_INT_CLR
    +              The clear bit for SPI_SLV_WR_BUF_DONE_INT interrupt.
    +              11
    +              1
    +              write-only
    +            
    +            
    +              TRANS_DONE_INT_CLR
    +              The clear bit for SPI_TRANS_DONE_INT interrupt.
    +              12
    +              1
    +              write-only
    +            
    +            
    +              DMA_SEG_TRANS_DONE_INT_CLR
    +              The clear bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt.
    +              13
    +              1
    +              write-only
    +            
    +            
    +              SEG_MAGIC_ERR_INT_CLR
    +              The clear bit for SPI_SEG_MAGIC_ERR_INT interrupt.
    +              14
    +              1
    +              write-only
    +            
    +            
    +              SLV_BUF_ADDR_ERR_INT_CLR
    +              The clear bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt.
    +              15
    +              1
    +              write-only
    +            
    +            
    +              SLV_CMD_ERR_INT_CLR
    +              The clear bit for SPI_SLV_CMD_ERR_INT interrupt.
    +              16
    +              1
    +              write-only
    +            
    +            
    +              MST_RX_AFIFO_WFULL_ERR_INT_CLR
    +              The clear bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt.
    +              17
    +              1
    +              write-only
    +            
    +            
    +              MST_TX_AFIFO_REMPTY_ERR_INT_CLR
    +              The clear bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt.
    +              18
    +              1
    +              write-only
    +            
    +            
    +              APP2_INT_CLR
    +              The clear bit for SPI_APP2_INT interrupt.
    +              19
    +              1
    +              write-only
    +            
    +            
    +              APP1_INT_CLR
    +              The clear bit for SPI_APP1_INT interrupt.
    +              20
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          DMA_INT_RAW
    +          SPI DMA interrupt raw register
    +          0x3C
    +          0x20
    +          
    +            
    +              DMA_INFIFO_FULL_ERR_INT_RAW
    +              1: The current data rate of DMA Rx is smaller than that of SPI, which will lose the receive data.  0: Others.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              DMA_OUTFIFO_EMPTY_ERR_INT_RAW
    +              1: The current data rate of DMA TX is smaller than that of SPI. SPI will stop in master mode and send out all 0 in slave mode.  0: Others.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              SLV_EX_QPI_INT_RAW
    +              The raw bit for SPI slave Ex_QPI interrupt. 1: SPI slave mode Ex_QPI transmission is ended. 0: Others.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              SLV_EN_QPI_INT_RAW
    +              The raw bit for SPI slave En_QPI interrupt. 1: SPI slave mode En_QPI transmission is ended. 0: Others.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              SLV_CMD7_INT_RAW
    +              The raw bit for SPI slave CMD7 interrupt. 1: SPI slave mode CMD7 transmission is ended. 0: Others.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              SLV_CMD8_INT_RAW
    +              The raw bit for SPI slave CMD8 interrupt. 1: SPI slave mode CMD8 transmission is ended. 0: Others.
    +              5
    +              1
    +              read-write
    +            
    +            
    +              SLV_CMD9_INT_RAW
    +              The raw bit for SPI slave CMD9 interrupt. 1: SPI slave mode CMD9 transmission is ended. 0: Others.
    +              6
    +              1
    +              read-write
    +            
    +            
    +              SLV_CMDA_INT_RAW
    +              The raw bit for SPI slave CMDA interrupt. 1: SPI slave mode CMDA transmission is ended. 0: Others.
    +              7
    +              1
    +              read-write
    +            
    +            
    +              SLV_RD_DMA_DONE_INT_RAW
    +              The raw bit for SPI_SLV_RD_DMA_DONE_INT interrupt. 1: SPI slave mode Rd_DMA transmission is ended. 0: Others.
    +              8
    +              1
    +              read-write
    +            
    +            
    +              SLV_WR_DMA_DONE_INT_RAW
    +              The raw bit for SPI_SLV_WR_DMA_DONE_INT interrupt. 1: SPI slave mode Wr_DMA transmission is ended. 0: Others.
    +              9
    +              1
    +              read-write
    +            
    +            
    +              SLV_RD_BUF_DONE_INT_RAW
    +              The raw bit for SPI_SLV_RD_BUF_DONE_INT interrupt. 1: SPI slave mode Rd_BUF transmission is ended. 0: Others.
    +              10
    +              1
    +              read-write
    +            
    +            
    +              SLV_WR_BUF_DONE_INT_RAW
    +              The raw bit for SPI_SLV_WR_BUF_DONE_INT interrupt. 1: SPI slave mode Wr_BUF transmission is ended. 0: Others.
    +              11
    +              1
    +              read-write
    +            
    +            
    +              TRANS_DONE_INT_RAW
    +              The raw bit for SPI_TRANS_DONE_INT interrupt. 1: SPI master mode transmission is ended. 0: others.
    +              12
    +              1
    +              read-write
    +            
    +            
    +              DMA_SEG_TRANS_DONE_INT_RAW
    +              The raw bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt. 1:  spi master DMA full-duplex/half-duplex seg-conf-trans ends or slave half-duplex seg-trans ends. And data has been pushed to corresponding memory.  0:  seg-conf-trans or seg-trans is not ended or not occurred.
    +              13
    +              1
    +              read-write
    +            
    +            
    +              SEG_MAGIC_ERR_INT_RAW
    +              The raw bit for SPI_SEG_MAGIC_ERR_INT interrupt. 1: The magic value in CONF buffer is error in the DMA seg-conf-trans. 0: others.
    +              14
    +              1
    +              read-write
    +            
    +            
    +              SLV_BUF_ADDR_ERR_INT_RAW
    +              The raw bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt. 1: The accessing data address of the current SPI slave mode CPU controlled FD, Wr_BUF or Rd_BUF transmission is bigger than 63. 0: Others.
    +              15
    +              1
    +              read-write
    +            
    +            
    +              SLV_CMD_ERR_INT_RAW
    +              The raw bit for SPI_SLV_CMD_ERR_INT interrupt. 1: The slave command value in the current SPI slave HD mode transmission is not supported. 0: Others.
    +              16
    +              1
    +              read-write
    +            
    +            
    +              MST_RX_AFIFO_WFULL_ERR_INT_RAW
    +              The raw bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt. 1: There is a RX AFIFO write-full error when SPI inputs data in master mode. 0: Others.
    +              17
    +              1
    +              read-write
    +            
    +            
    +              MST_TX_AFIFO_REMPTY_ERR_INT_RAW
    +              The raw bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt. 1: There is a TX BUF AFIFO read-empty error when SPI outputs data in master mode. 0: Others.
    +              18
    +              1
    +              read-write
    +            
    +            
    +              APP2_INT_RAW
    +              The raw bit for SPI_APP2_INT interrupt. The value is only controlled by application.
    +              19
    +              1
    +              read-write
    +            
    +            
    +              APP1_INT_RAW
    +              The raw bit for SPI_APP1_INT interrupt. The value is only controlled by application.
    +              20
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DMA_INT_ST
    +          SPI DMA interrupt status register
    +          0x40
    +          0x20
    +          
    +            
    +              DMA_INFIFO_FULL_ERR_INT_ST
    +              The status bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              DMA_OUTFIFO_EMPTY_ERR_INT_ST
    +              The status bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt.
    +              1
    +              1
    +              read-only
    +            
    +            
    +              SLV_EX_QPI_INT_ST
    +              The status bit for SPI slave Ex_QPI interrupt.
    +              2
    +              1
    +              read-only
    +            
    +            
    +              SLV_EN_QPI_INT_ST
    +              The status bit for SPI slave En_QPI interrupt.
    +              3
    +              1
    +              read-only
    +            
    +            
    +              SLV_CMD7_INT_ST
    +              The status bit for SPI slave CMD7 interrupt.
    +              4
    +              1
    +              read-only
    +            
    +            
    +              SLV_CMD8_INT_ST
    +              The status bit for SPI slave CMD8 interrupt.
    +              5
    +              1
    +              read-only
    +            
    +            
    +              SLV_CMD9_INT_ST
    +              The status bit for SPI slave CMD9 interrupt.
    +              6
    +              1
    +              read-only
    +            
    +            
    +              SLV_CMDA_INT_ST
    +              The status bit for SPI slave CMDA interrupt.
    +              7
    +              1
    +              read-only
    +            
    +            
    +              SLV_RD_DMA_DONE_INT_ST
    +              The status bit for SPI_SLV_RD_DMA_DONE_INT interrupt.
    +              8
    +              1
    +              read-only
    +            
    +            
    +              SLV_WR_DMA_DONE_INT_ST
    +              The status bit for SPI_SLV_WR_DMA_DONE_INT interrupt.
    +              9
    +              1
    +              read-only
    +            
    +            
    +              SLV_RD_BUF_DONE_INT_ST
    +              The status bit for SPI_SLV_RD_BUF_DONE_INT interrupt.
    +              10
    +              1
    +              read-only
    +            
    +            
    +              SLV_WR_BUF_DONE_INT_ST
    +              The status bit for SPI_SLV_WR_BUF_DONE_INT interrupt.
    +              11
    +              1
    +              read-only
    +            
    +            
    +              TRANS_DONE_INT_ST
    +              The status bit for SPI_TRANS_DONE_INT interrupt.
    +              12
    +              1
    +              read-only
    +            
    +            
    +              DMA_SEG_TRANS_DONE_INT_ST
    +              The status bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt.
    +              13
    +              1
    +              read-only
    +            
    +            
    +              SEG_MAGIC_ERR_INT_ST
    +              The status bit for SPI_SEG_MAGIC_ERR_INT interrupt.
    +              14
    +              1
    +              read-only
    +            
    +            
    +              SLV_BUF_ADDR_ERR_INT_ST
    +              The status bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt.
    +              15
    +              1
    +              read-only
    +            
    +            
    +              SLV_CMD_ERR_INT_ST
    +              The status bit for SPI_SLV_CMD_ERR_INT interrupt.
    +              16
    +              1
    +              read-only
    +            
    +            
    +              MST_RX_AFIFO_WFULL_ERR_INT_ST
    +              The status bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt.
    +              17
    +              1
    +              read-only
    +            
    +            
    +              MST_TX_AFIFO_REMPTY_ERR_INT_ST
    +              The status bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt.
    +              18
    +              1
    +              read-only
    +            
    +            
    +              APP2_INT_ST
    +              The status bit for SPI_APP2_INT interrupt.
    +              19
    +              1
    +              read-only
    +            
    +            
    +              APP1_INT_ST
    +              The status bit for SPI_APP1_INT interrupt.
    +              20
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          W0
    +          SPI CPU-controlled buffer0
    +          0x98
    +          0x20
    +          
    +            
    +              BUF0
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W1
    +          SPI CPU-controlled buffer1
    +          0x9C
    +          0x20
    +          
    +            
    +              BUF1
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W2
    +          SPI CPU-controlled buffer2
    +          0xA0
    +          0x20
    +          
    +            
    +              BUF2
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W3
    +          SPI CPU-controlled buffer3
    +          0xA4
    +          0x20
    +          
    +            
    +              BUF3
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W4
    +          SPI CPU-controlled buffer4
    +          0xA8
    +          0x20
    +          
    +            
    +              BUF4
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W5
    +          SPI CPU-controlled buffer5
    +          0xAC
    +          0x20
    +          
    +            
    +              BUF5
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W6
    +          SPI CPU-controlled buffer6
    +          0xB0
    +          0x20
    +          
    +            
    +              BUF6
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W7
    +          SPI CPU-controlled buffer7
    +          0xB4
    +          0x20
    +          
    +            
    +              BUF7
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W8
    +          SPI CPU-controlled buffer8
    +          0xB8
    +          0x20
    +          
    +            
    +              BUF8
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W9
    +          SPI CPU-controlled buffer9
    +          0xBC
    +          0x20
    +          
    +            
    +              BUF9
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W10
    +          SPI CPU-controlled buffer10
    +          0xC0
    +          0x20
    +          
    +            
    +              BUF10
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W11
    +          SPI CPU-controlled buffer11
    +          0xC4
    +          0x20
    +          
    +            
    +              BUF11
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W12
    +          SPI CPU-controlled buffer12
    +          0xC8
    +          0x20
    +          
    +            
    +              BUF12
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W13
    +          SPI CPU-controlled buffer13
    +          0xCC
    +          0x20
    +          
    +            
    +              BUF13
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W14
    +          SPI CPU-controlled buffer14
    +          0xD0
    +          0x20
    +          
    +            
    +              BUF14
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          W15
    +          SPI CPU-controlled buffer15
    +          0xD4
    +          0x20
    +          
    +            
    +              BUF15
    +              data buffer
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          SLAVE
    +          SPI slave control register
    +          0xE0
    +          0x20
    +          0x02800000
    +          
    +            
    +              CLK_MODE
    +              SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is alwasy on. Can be configured in CONF state.
    +              0
    +              2
    +              read-write
    +            
    +            
    +              CLK_MODE_13
    +              {CPOL, CPHA},1: support spi clk mode 1 and 3, first edge output data B[0]/B[7].  0: support spi clk mode 0 and 2, first edge output data B[1]/B[6].
    +              2
    +              1
    +              read-write
    +            
    +            
    +              RSCK_DATA_OUT
    +              It saves half a cycle when tsck is the same as rsck. 1: output data at rsck posedge   0: output data at tsck posedge
    +              3
    +              1
    +              read-write
    +            
    +            
    +              SLV_RDDMA_BITLEN_EN
    +              1: SPI_SLV_DATA_BITLEN stores data bit length of master-read-slave data length in DMA controlled mode(Rd_DMA). 0: others
    +              8
    +              1
    +              read-write
    +            
    +            
    +              SLV_WRDMA_BITLEN_EN
    +              1: SPI_SLV_DATA_BITLEN stores data bit length of master-write-to-slave data length in DMA controlled mode(Wr_DMA). 0: others
    +              9
    +              1
    +              read-write
    +            
    +            
    +              SLV_RDBUF_BITLEN_EN
    +              1: SPI_SLV_DATA_BITLEN stores data bit length of master-read-slave data length in CPU controlled mode(Rd_BUF). 0: others
    +              10
    +              1
    +              read-write
    +            
    +            
    +              SLV_WRBUF_BITLEN_EN
    +              1: SPI_SLV_DATA_BITLEN stores data bit length of master-write-to-slave data length in CPU controlled mode(Wr_BUF). 0: others
    +              11
    +              1
    +              read-write
    +            
    +            
    +              DMA_SEG_MAGIC_VALUE
    +              The magic value of BM table in master DMA seg-trans.
    +              22
    +              4
    +              read-write
    +            
    +            
    +              MODE
    +              Set SPI work mode. 1: slave mode 0: master mode.
    +              26
    +              1
    +              read-write
    +            
    +            
    +              SOFT_RESET
    +              Software reset enable, reset the spi clock line cs line and data lines. Can be configured in CONF state.
    +              27
    +              1
    +              write-only
    +            
    +            
    +              USR_CONF
    +              1: Enable the DMA CONF phase of current seg-trans operation, which means seg-trans will start. 0: This is not seg-trans mode.
    +              28
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          SLAVE1
    +          SPI slave control register 1
    +          0xE4
    +          0x20
    +          
    +            
    +              SLV_DATA_BITLEN
    +              The transferred data bit length in SPI slave FD and HD mode.
    +              0
    +              18
    +              read-write
    +            
    +            
    +              SLV_LAST_COMMAND
    +              In the slave mode it is the value of command.
    +              18
    +              8
    +              read-write
    +            
    +            
    +              SLV_LAST_ADDR
    +              In the slave mode it is the value of address.
    +              26
    +              6
    +              read-write
    +            
    +          
    +        
    +        
    +          CLK_GATE
    +          SPI module clock and register clock control
    +          0xE8
    +          0x20
    +          
    +            
    +              CLK_EN
    +              Set this bit to enable clk gate
    +              0
    +              1
    +              read-write
    +            
    +            
    +              MST_CLK_ACTIVE
    +              Set this bit to power on the SPI module clock.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              MST_CLK_SEL
    +              This bit is used to select SPI module clock source in master mode. 1: PLL_CLK_80M. 0: XTAL CLK.
    +              2
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DATE
    +          Version control
    +          0xF0
    +          0x20
    +          0x02007220
    +          
    +            
    +              DATE
    +              SPI register version.
    +              0
    +              28
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      SYSTEM
    +      System
    +      SYSTEM
    +      0x600C0000
    +      
    +        0x0
    +        0xA0
    +        registers
    +      
    +      
    +        
    +          CPU_PERI_CLK_EN
    +          cpu_peripheral clock gating register
    +          0x0
    +          0x20
    +          
    +            
    +              CLK_EN_ASSIST_DEBUG
    +              reg_clk_en_assist_debug
    +              6
    +              1
    +              read-write
    +            
    +            
    +              CLK_EN_DEDICATED_GPIO
    +              reg_clk_en_dedicated_gpio
    +              7
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_PERI_RST_EN
    +          cpu_peripheral reset register
    +          0x4
    +          0x20
    +          0x000000C0
    +          
    +            
    +              RST_EN_ASSIST_DEBUG
    +              reg_rst_en_assist_debug
    +              6
    +              1
    +              read-write
    +            
    +            
    +              RST_EN_DEDICATED_GPIO
    +              reg_rst_en_dedicated_gpio
    +              7
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_PER_CONF
    +          cpu clock config register
    +          0x8
    +          0x20
    +          0x0000000C
    +          
    +            
    +              CPUPERIOD_SEL
    +              reg_cpuperiod_sel
    +              0
    +              2
    +              read-write
    +            
    +            
    +              PLL_FREQ_SEL
    +              reg_pll_freq_sel
    +              2
    +              1
    +              read-write
    +            
    +            
    +              CPU_WAIT_MODE_FORCE_ON
    +              reg_cpu_wait_mode_force_on
    +              3
    +              1
    +              read-write
    +            
    +            
    +              CPU_WAITI_DELAY_NUM
    +              reg_cpu_waiti_delay_num
    +              4
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          MEM_PD_MASK
    +          memory power down mask register
    +          0xC
    +          0x20
    +          0x00000001
    +          
    +            
    +              LSLP_MEM_PD_MASK
    +              reg_lslp_mem_pd_mask
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          PERIP_CLK_EN0
    +          peripheral clock gating register
    +          0x10
    +          0x20
    +          0xF9C1E06F
    +          
    +            
    +              TIMERS_CLK_EN
    +              reg_timers_clk_en
    +              0
    +              1
    +              read-write
    +            
    +            
    +              SPI01_CLK_EN
    +              reg_spi01_clk_en
    +              1
    +              1
    +              read-write
    +            
    +            
    +              UART_CLK_EN
    +              reg_uart_clk_en
    +              2
    +              1
    +              read-write
    +            
    +            
    +              WDG_CLK_EN
    +              reg_wdg_clk_en
    +              3
    +              1
    +              read-write
    +            
    +            
    +              I2S0_CLK_EN
    +              reg_i2s0_clk_en
    +              4
    +              1
    +              read-write
    +            
    +            
    +              UART1_CLK_EN
    +              reg_uart1_clk_en
    +              5
    +              1
    +              read-write
    +            
    +            
    +              SPI2_CLK_EN
    +              reg_spi2_clk_en
    +              6
    +              1
    +              read-write
    +            
    +            
    +              I2C_EXT0_CLK_EN
    +              reg_ext0_clk_en
    +              7
    +              1
    +              read-write
    +            
    +            
    +              UHCI0_CLK_EN
    +              reg_uhci0_clk_en
    +              8
    +              1
    +              read-write
    +            
    +            
    +              RMT_CLK_EN
    +              reg_rmt_clk_en
    +              9
    +              1
    +              read-write
    +            
    +            
    +              PCNT_CLK_EN
    +              reg_pcnt_clk_en
    +              10
    +              1
    +              read-write
    +            
    +            
    +              LEDC_CLK_EN
    +              reg_ledc_clk_en
    +              11
    +              1
    +              read-write
    +            
    +            
    +              UHCI1_CLK_EN
    +              reg_uhci1_clk_en
    +              12
    +              1
    +              read-write
    +            
    +            
    +              TIMERGROUP_CLK_EN
    +              reg_timergroup_clk_en
    +              13
    +              1
    +              read-write
    +            
    +            
    +              EFUSE_CLK_EN
    +              reg_efuse_clk_en
    +              14
    +              1
    +              read-write
    +            
    +            
    +              TIMERGROUP1_CLK_EN
    +              reg_timergroup1_clk_en
    +              15
    +              1
    +              read-write
    +            
    +            
    +              SPI3_CLK_EN
    +              reg_spi3_clk_en
    +              16
    +              1
    +              read-write
    +            
    +            
    +              PWM0_CLK_EN
    +              reg_pwm0_clk_en
    +              17
    +              1
    +              read-write
    +            
    +            
    +              EXT1_CLK_EN
    +              reg_ext1_clk_en
    +              18
    +              1
    +              read-write
    +            
    +            
    +              CAN_CLK_EN
    +              reg_can_clk_en
    +              19
    +              1
    +              read-write
    +            
    +            
    +              PWM1_CLK_EN
    +              reg_pwm1_clk_en
    +              20
    +              1
    +              read-write
    +            
    +            
    +              I2S1_CLK_EN
    +              reg_i2s1_clk_en
    +              21
    +              1
    +              read-write
    +            
    +            
    +              SPI2_DMA_CLK_EN
    +              reg_spi2_dma_clk_en
    +              22
    +              1
    +              read-write
    +            
    +            
    +              USB_DEVICE_CLK_EN
    +              reg_usb_device_clk_en
    +              23
    +              1
    +              read-write
    +            
    +            
    +              UART_MEM_CLK_EN
    +              reg_uart_mem_clk_en
    +              24
    +              1
    +              read-write
    +            
    +            
    +              PWM2_CLK_EN
    +              reg_pwm2_clk_en
    +              25
    +              1
    +              read-write
    +            
    +            
    +              PWM3_CLK_EN
    +              reg_pwm3_clk_en
    +              26
    +              1
    +              read-write
    +            
    +            
    +              SPI3_DMA_CLK_EN
    +              reg_spi3_dma_clk_en
    +              27
    +              1
    +              read-write
    +            
    +            
    +              APB_SARADC_CLK_EN
    +              reg_apb_saradc_clk_en
    +              28
    +              1
    +              read-write
    +            
    +            
    +              SYSTIMER_CLK_EN
    +              reg_systimer_clk_en
    +              29
    +              1
    +              read-write
    +            
    +            
    +              ADC2_ARB_CLK_EN
    +              reg_adc2_arb_clk_en
    +              30
    +              1
    +              read-write
    +            
    +            
    +              SPI4_CLK_EN
    +              reg_spi4_clk_en
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          PERIP_CLK_EN1
    +          peripheral clock gating register
    +          0x14
    +          0x20
    +          0x00000200
    +          
    +            
    +              CRYPTO_AES_CLK_EN
    +              reg_crypto_aes_clk_en
    +              1
    +              1
    +              read-write
    +            
    +            
    +              CRYPTO_SHA_CLK_EN
    +              reg_crypto_sha_clk_en
    +              2
    +              1
    +              read-write
    +            
    +            
    +              CRYPTO_RSA_CLK_EN
    +              reg_crypto_rsa_clk_en
    +              3
    +              1
    +              read-write
    +            
    +            
    +              CRYPTO_DS_CLK_EN
    +              reg_crypto_ds_clk_en
    +              4
    +              1
    +              read-write
    +            
    +            
    +              CRYPTO_HMAC_CLK_EN
    +              reg_crypto_hmac_clk_en
    +              5
    +              1
    +              read-write
    +            
    +            
    +              DMA_CLK_EN
    +              reg_dma_clk_en
    +              6
    +              1
    +              read-write
    +            
    +            
    +              SDIO_HOST_CLK_EN
    +              reg_sdio_host_clk_en
    +              7
    +              1
    +              read-write
    +            
    +            
    +              LCD_CAM_CLK_EN
    +              reg_lcd_cam_clk_en
    +              8
    +              1
    +              read-write
    +            
    +            
    +              UART2_CLK_EN
    +              reg_uart2_clk_en
    +              9
    +              1
    +              read-write
    +            
    +            
    +              TSENS_CLK_EN
    +              reg_tsens_clk_en
    +              10
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          PERIP_RST_EN0
    +          reserved
    +          0x18
    +          0x20
    +          
    +            
    +              TIMERS_RST
    +              reg_timers_rst
    +              0
    +              1
    +              read-write
    +            
    +            
    +              SPI01_RST
    +              reg_spi01_rst
    +              1
    +              1
    +              read-write
    +            
    +            
    +              UART_RST
    +              reg_uart_rst
    +              2
    +              1
    +              read-write
    +            
    +            
    +              WDG_RST
    +              reg_wdg_rst
    +              3
    +              1
    +              read-write
    +            
    +            
    +              I2S0_RST
    +              reg_i2s0_rst
    +              4
    +              1
    +              read-write
    +            
    +            
    +              UART1_RST
    +              reg_uart1_rst
    +              5
    +              1
    +              read-write
    +            
    +            
    +              SPI2_RST
    +              reg_spi2_rst
    +              6
    +              1
    +              read-write
    +            
    +            
    +              I2C_EXT0_RST
    +              reg_ext0_rst
    +              7
    +              1
    +              read-write
    +            
    +            
    +              UHCI0_RST
    +              reg_uhci0_rst
    +              8
    +              1
    +              read-write
    +            
    +            
    +              RMT_RST
    +              reg_rmt_rst
    +              9
    +              1
    +              read-write
    +            
    +            
    +              PCNT_RST
    +              reg_pcnt_rst
    +              10
    +              1
    +              read-write
    +            
    +            
    +              LEDC_RST
    +              reg_ledc_rst
    +              11
    +              1
    +              read-write
    +            
    +            
    +              UHCI1_RST
    +              reg_uhci1_rst
    +              12
    +              1
    +              read-write
    +            
    +            
    +              TIMERGROUP_RST
    +              reg_timergroup_rst
    +              13
    +              1
    +              read-write
    +            
    +            
    +              EFUSE_RST
    +              reg_efuse_rst
    +              14
    +              1
    +              read-write
    +            
    +            
    +              TIMERGROUP1_RST
    +              reg_timergroup1_rst
    +              15
    +              1
    +              read-write
    +            
    +            
    +              SPI3_RST
    +              reg_spi3_rst
    +              16
    +              1
    +              read-write
    +            
    +            
    +              PWM0_RST
    +              reg_pwm0_rst
    +              17
    +              1
    +              read-write
    +            
    +            
    +              EXT1_RST
    +              reg_ext1_rst
    +              18
    +              1
    +              read-write
    +            
    +            
    +              CAN_RST
    +              reg_can_rst
    +              19
    +              1
    +              read-write
    +            
    +            
    +              PWM1_RST
    +              reg_pwm1_rst
    +              20
    +              1
    +              read-write
    +            
    +            
    +              I2S1_RST
    +              reg_i2s1_rst
    +              21
    +              1
    +              read-write
    +            
    +            
    +              SPI2_DMA_RST
    +              reg_spi2_dma_rst
    +              22
    +              1
    +              read-write
    +            
    +            
    +              USB_DEVICE_RST
    +              reg_usb_device_rst
    +              23
    +              1
    +              read-write
    +            
    +            
    +              UART_MEM_RST
    +              reg_uart_mem_rst
    +              24
    +              1
    +              read-write
    +            
    +            
    +              PWM2_RST
    +              reg_pwm2_rst
    +              25
    +              1
    +              read-write
    +            
    +            
    +              PWM3_RST
    +              reg_pwm3_rst
    +              26
    +              1
    +              read-write
    +            
    +            
    +              SPI3_DMA_RST
    +              reg_spi3_dma_rst
    +              27
    +              1
    +              read-write
    +            
    +            
    +              APB_SARADC_RST
    +              reg_apb_saradc_rst
    +              28
    +              1
    +              read-write
    +            
    +            
    +              SYSTIMER_RST
    +              reg_systimer_rst
    +              29
    +              1
    +              read-write
    +            
    +            
    +              ADC2_ARB_RST
    +              reg_adc2_arb_rst
    +              30
    +              1
    +              read-write
    +            
    +            
    +              SPI4_RST
    +              reg_spi4_rst
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          PERIP_RST_EN1
    +          peripheral reset register
    +          0x1C
    +          0x20
    +          0x000001FE
    +          
    +            
    +              CRYPTO_AES_RST
    +              reg_crypto_aes_rst
    +              1
    +              1
    +              read-write
    +            
    +            
    +              CRYPTO_SHA_RST
    +              reg_crypto_sha_rst
    +              2
    +              1
    +              read-write
    +            
    +            
    +              CRYPTO_RSA_RST
    +              reg_crypto_rsa_rst
    +              3
    +              1
    +              read-write
    +            
    +            
    +              CRYPTO_DS_RST
    +              reg_crypto_ds_rst
    +              4
    +              1
    +              read-write
    +            
    +            
    +              CRYPTO_HMAC_RST
    +              reg_crypto_hmac_rst
    +              5
    +              1
    +              read-write
    +            
    +            
    +              DMA_RST
    +              reg_dma_rst
    +              6
    +              1
    +              read-write
    +            
    +            
    +              SDIO_HOST_RST
    +              reg_sdio_host_rst
    +              7
    +              1
    +              read-write
    +            
    +            
    +              LCD_CAM_RST
    +              reg_lcd_cam_rst
    +              8
    +              1
    +              read-write
    +            
    +            
    +              UART2_RST
    +              reg_uart2_rst
    +              9
    +              1
    +              read-write
    +            
    +            
    +              TSENS_RST
    +              reg_tsens_rst
    +              10
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          BT_LPCK_DIV_INT
    +          clock config register
    +          0x20
    +          0x20
    +          0x000000FF
    +          
    +            
    +              BT_LPCK_DIV_NUM
    +              reg_bt_lpck_div_num
    +              0
    +              12
    +              read-write
    +            
    +          
    +        
    +        
    +          BT_LPCK_DIV_FRAC
    +          clock config register
    +          0x24
    +          0x20
    +          0x02001001
    +          
    +            
    +              BT_LPCK_DIV_B
    +              reg_bt_lpck_div_b
    +              0
    +              12
    +              read-write
    +            
    +            
    +              BT_LPCK_DIV_A
    +              reg_bt_lpck_div_a
    +              12
    +              12
    +              read-write
    +            
    +            
    +              LPCLK_SEL_RTC_SLOW
    +              reg_lpclk_sel_rtc_slow
    +              24
    +              1
    +              read-write
    +            
    +            
    +              LPCLK_SEL_8M
    +              reg_lpclk_sel_8m
    +              25
    +              1
    +              read-write
    +            
    +            
    +              LPCLK_SEL_XTAL
    +              reg_lpclk_sel_xtal
    +              26
    +              1
    +              read-write
    +            
    +            
    +              LPCLK_SEL_XTAL32K
    +              reg_lpclk_sel_xtal32k
    +              27
    +              1
    +              read-write
    +            
    +            
    +              LPCLK_RTC_EN
    +              reg_lpclk_rtc_en
    +              28
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INTR_FROM_CPU_0
    +          interrupt generate register
    +          0x28
    +          0x20
    +          
    +            
    +              CPU_INTR_FROM_CPU_0
    +              reg_cpu_intr_from_cpu_0
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INTR_FROM_CPU_1
    +          interrupt generate register
    +          0x2C
    +          0x20
    +          
    +            
    +              CPU_INTR_FROM_CPU_1
    +              reg_cpu_intr_from_cpu_1
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INTR_FROM_CPU_2
    +          interrupt generate register
    +          0x30
    +          0x20
    +          
    +            
    +              CPU_INTR_FROM_CPU_2
    +              reg_cpu_intr_from_cpu_2
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CPU_INTR_FROM_CPU_3
    +          interrupt generate register
    +          0x34
    +          0x20
    +          
    +            
    +              CPU_INTR_FROM_CPU_3
    +              reg_cpu_intr_from_cpu_3
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          RSA_PD_CTRL
    +          rsa memory power control register
    +          0x38
    +          0x20
    +          0x00000001
    +          
    +            
    +              RSA_MEM_PD
    +              reg_rsa_mem_pd
    +              0
    +              1
    +              read-write
    +            
    +            
    +              RSA_MEM_FORCE_PU
    +              reg_rsa_mem_force_pu
    +              1
    +              1
    +              read-write
    +            
    +            
    +              RSA_MEM_FORCE_PD
    +              reg_rsa_mem_force_pd
    +              2
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          EDMA_CTRL
    +          edma clcok and reset register
    +          0x3C
    +          0x20
    +          0x00000001
    +          
    +            
    +              EDMA_CLK_ON
    +              reg_edma_clk_on
    +              0
    +              1
    +              read-write
    +            
    +            
    +              EDMA_RESET
    +              reg_edma_reset
    +              1
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CACHE_CONTROL
    +          cache control register
    +          0x40
    +          0x20
    +          0x00000005
    +          
    +            
    +              ICACHE_CLK_ON
    +              reg_icache_clk_on
    +              0
    +              1
    +              read-write
    +            
    +            
    +              ICACHE_RESET
    +              reg_icache_reset
    +              1
    +              1
    +              read-write
    +            
    +            
    +              DCACHE_CLK_ON
    +              reg_dcache_clk_on
    +              2
    +              1
    +              read-write
    +            
    +            
    +              DCACHE_RESET
    +              reg_dcache_reset
    +              3
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          EXTERNAL_DEVICE_ENCRYPT_DECRYPT_CONTROL
    +          SYSTEM_EXTERNAL_DEVICE_ENCRYPT_DECRYPT_CONTROL_REG
    +          0x44
    +          0x20
    +          
    +            
    +              ENABLE_SPI_MANUAL_ENCRYPT
    +              reg_enable_spi_manual_encrypt
    +              0
    +              1
    +              read-write
    +            
    +            
    +              ENABLE_DOWNLOAD_DB_ENCRYPT
    +              reg_enable_download_db_encrypt
    +              1
    +              1
    +              read-write
    +            
    +            
    +              ENABLE_DOWNLOAD_G0CB_DECRYPT
    +              reg_enable_download_g0cb_decrypt
    +              2
    +              1
    +              read-write
    +            
    +            
    +              ENABLE_DOWNLOAD_MANUAL_ENCRYPT
    +              reg_enable_download_manual_encrypt
    +              3
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          RTC_FASTMEM_CONFIG
    +          fast memory config register
    +          0x48
    +          0x20
    +          0x7FF00000
    +          
    +            
    +              RTC_MEM_CRC_START
    +              reg_rtc_mem_crc_start
    +              8
    +              1
    +              read-write
    +            
    +            
    +              RTC_MEM_CRC_ADDR
    +              reg_rtc_mem_crc_addr
    +              9
    +              11
    +              read-write
    +            
    +            
    +              RTC_MEM_CRC_LEN
    +              reg_rtc_mem_crc_len
    +              20
    +              11
    +              read-write
    +            
    +            
    +              RTC_MEM_CRC_FINISH
    +              reg_rtc_mem_crc_finish
    +              31
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          RTC_FASTMEM_CRC
    +          reserved
    +          0x4C
    +          0x20
    +          
    +            
    +              RTC_MEM_CRC_RES
    +              reg_rtc_mem_crc_res
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          REDUNDANT_ECO_CTRL
    +          eco register
    +          0x50
    +          0x20
    +          
    +            
    +              REDUNDANT_ECO_DRIVE
    +              reg_redundant_eco_drive
    +              0
    +              1
    +              read-write
    +            
    +            
    +              REDUNDANT_ECO_RESULT
    +              reg_redundant_eco_result
    +              1
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          CLOCK_GATE
    +          clock gating register
    +          0x54
    +          0x20
    +          0x00000001
    +          
    +            
    +              CLK_EN
    +              reg_clk_en
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          SYSCLK_CONF
    +          system clock config register
    +          0x58
    +          0x20
    +          0x00000001
    +          
    +            
    +              PRE_DIV_CNT
    +              reg_pre_div_cnt
    +              0
    +              10
    +              read-write
    +            
    +            
    +              SOC_CLK_SEL
    +              reg_soc_clk_sel
    +              10
    +              2
    +              read-write
    +            
    +            
    +              CLK_XTAL_FREQ
    +              reg_clk_xtal_freq
    +              12
    +              7
    +              read-only
    +            
    +            
    +              CLK_DIV_EN
    +              reg_clk_div_en
    +              19
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          MEM_PVT
    +          mem pvt register
    +          0x5C
    +          0x20
    +          0x00000003
    +          
    +            
    +              MEM_PATH_LEN
    +              reg_mem_path_len
    +              0
    +              4
    +              read-write
    +            
    +            
    +              MEM_ERR_CNT_CLR
    +              reg_mem_err_cnt_clr
    +              4
    +              1
    +              write-only
    +            
    +            
    +              MONITOR_EN
    +              reg_mem_pvt_monitor_en
    +              5
    +              1
    +              read-write
    +            
    +            
    +              MEM_TIMING_ERR_CNT
    +              reg_mem_timing_err_cnt
    +              6
    +              16
    +              read-only
    +            
    +            
    +              MEM_VT_SEL
    +              reg_mem_vt_sel
    +              22
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          COMB_PVT_LVT_CONF
    +          mem pvt register
    +          0x60
    +          0x20
    +          0x00000003
    +          
    +            
    +              COMB_PATH_LEN_LVT
    +              reg_comb_path_len_lvt
    +              0
    +              5
    +              read-write
    +            
    +            
    +              COMB_ERR_CNT_CLR_LVT
    +              reg_comb_err_cnt_clr_lvt
    +              5
    +              1
    +              write-only
    +            
    +            
    +              COMB_PVT_MONITOR_EN_LVT
    +              reg_comb_pvt_monitor_en_lvt
    +              6
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          COMB_PVT_NVT_CONF
    +          mem pvt register
    +          0x64
    +          0x20
    +          0x00000003
    +          
    +            
    +              COMB_PATH_LEN_NVT
    +              reg_comb_path_len_nvt
    +              0
    +              5
    +              read-write
    +            
    +            
    +              COMB_ERR_CNT_CLR_NVT
    +              reg_comb_err_cnt_clr_nvt
    +              5
    +              1
    +              write-only
    +            
    +            
    +              COMB_PVT_MONITOR_EN_NVT
    +              reg_comb_pvt_monitor_en_nvt
    +              6
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          COMB_PVT_HVT_CONF
    +          mem pvt register
    +          0x68
    +          0x20
    +          0x00000003
    +          
    +            
    +              COMB_PATH_LEN_HVT
    +              reg_comb_path_len_hvt
    +              0
    +              5
    +              read-write
    +            
    +            
    +              COMB_ERR_CNT_CLR_HVT
    +              reg_comb_err_cnt_clr_hvt
    +              5
    +              1
    +              write-only
    +            
    +            
    +              COMB_PVT_MONITOR_EN_HVT
    +              reg_comb_pvt_monitor_en_hvt
    +              6
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          COMB_PVT_ERR_LVT_SITE0
    +          mem pvt register
    +          0x6C
    +          0x20
    +          
    +            
    +              COMB_TIMING_ERR_CNT_LVT_SITE0
    +              reg_comb_timing_err_cnt_lvt_site0
    +              0
    +              16
    +              read-only
    +            
    +          
    +        
    +        
    +          COMB_PVT_ERR_NVT_SITE0
    +          mem pvt register
    +          0x70
    +          0x20
    +          
    +            
    +              COMB_TIMING_ERR_CNT_NVT_SITE0
    +              reg_comb_timing_err_cnt_nvt_site0
    +              0
    +              16
    +              read-only
    +            
    +          
    +        
    +        
    +          COMB_PVT_ERR_HVT_SITE0
    +          mem pvt register
    +          0x74
    +          0x20
    +          
    +            
    +              COMB_TIMING_ERR_CNT_HVT_SITE0
    +              reg_comb_timing_err_cnt_hvt_site0
    +              0
    +              16
    +              read-only
    +            
    +          
    +        
    +        
    +          COMB_PVT_ERR_LVT_SITE1
    +          mem pvt register
    +          0x78
    +          0x20
    +          
    +            
    +              COMB_TIMING_ERR_CNT_LVT_SITE1
    +              reg_comb_timing_err_cnt_lvt_site1
    +              0
    +              16
    +              read-only
    +            
    +          
    +        
    +        
    +          COMB_PVT_ERR_NVT_SITE1
    +          mem pvt register
    +          0x7C
    +          0x20
    +          
    +            
    +              COMB_TIMING_ERR_CNT_NVT_SITE1
    +              reg_comb_timing_err_cnt_nvt_site1
    +              0
    +              16
    +              read-only
    +            
    +          
    +        
    +        
    +          COMB_PVT_ERR_HVT_SITE1
    +          mem pvt register
    +          0x80
    +          0x20
    +          
    +            
    +              COMB_TIMING_ERR_CNT_HVT_SITE1
    +              reg_comb_timing_err_cnt_hvt_site1
    +              0
    +              16
    +              read-only
    +            
    +          
    +        
    +        
    +          COMB_PVT_ERR_LVT_SITE2
    +          mem pvt register
    +          0x84
    +          0x20
    +          
    +            
    +              COMB_TIMING_ERR_CNT_LVT_SITE2
    +              reg_comb_timing_err_cnt_lvt_site2
    +              0
    +              16
    +              read-only
    +            
    +          
    +        
    +        
    +          COMB_PVT_ERR_NVT_SITE2
    +          mem pvt register
    +          0x88
    +          0x20
    +          
    +            
    +              COMB_TIMING_ERR_CNT_NVT_SITE2
    +              reg_comb_timing_err_cnt_nvt_site2
    +              0
    +              16
    +              read-only
    +            
    +          
    +        
    +        
    +          COMB_PVT_ERR_HVT_SITE2
    +          mem pvt register
    +          0x8C
    +          0x20
    +          
    +            
    +              COMB_TIMING_ERR_CNT_HVT_SITE2
    +              reg_comb_timing_err_cnt_hvt_site2
    +              0
    +              16
    +              read-only
    +            
    +          
    +        
    +        
    +          COMB_PVT_ERR_LVT_SITE3
    +          mem pvt register
    +          0x90
    +          0x20
    +          
    +            
    +              COMB_TIMING_ERR_CNT_LVT_SITE3
    +              reg_comb_timing_err_cnt_lvt_site3
    +              0
    +              16
    +              read-only
    +            
    +          
    +        
    +        
    +          COMB_PVT_ERR_NVT_SITE3
    +          mem pvt register
    +          0x94
    +          0x20
    +          
    +            
    +              COMB_TIMING_ERR_CNT_NVT_SITE3
    +              reg_comb_timing_err_cnt_nvt_site3
    +              0
    +              16
    +              read-only
    +            
    +          
    +        
    +        
    +          COMB_PVT_ERR_HVT_SITE3
    +          mem pvt register
    +          0x98
    +          0x20
    +          
    +            
    +              COMB_TIMING_ERR_CNT_HVT_SITE3
    +              reg_comb_timing_err_cnt_hvt_site3
    +              0
    +              16
    +              read-only
    +            
    +          
    +        
    +        
    +          SYSTEM_REG_DATE
    +          Version register
    +          0xFFC
    +          0x20
    +          0x02007150
    +          
    +            
    +              SYSTEM_REG_DATE
    +              reg_system_reg_date
    +              0
    +              28
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      SYSTIMER
    +      System Timer
    +      SYSTIMER
    +      0x60023000
    +      
    +        0x0
    +        0x78
    +        registers
    +      
    +      
    +        SYSTIMER_TARGET0
    +        37
    +      
    +      
    +        SYSTIMER_TARGET1
    +        38
    +      
    +      
    +        SYSTIMER_TARGET2
    +        39
    +      
    +      
    +        
    +          CONF
    +          SYSTIMER_CONF.
    +          0x0
    +          0x20
    +          0x46000000
    +          
    +            
    +              SYSTIMER_CLK_FO
    +              systimer clock force on
    +              0
    +              1
    +              read-write
    +            
    +            
    +              TARGET2_WORK_EN
    +              target2 work enable
    +              22
    +              1
    +              read-write
    +            
    +            
    +              TARGET1_WORK_EN
    +              target1 work enable
    +              23
    +              1
    +              read-write
    +            
    +            
    +              TARGET0_WORK_EN
    +              target0 work enable
    +              24
    +              1
    +              read-write
    +            
    +            
    +              TIMER_UNIT1_CORE1_STALL_EN
    +              If timer unit1 is stalled when core1 stalled
    +              25
    +              1
    +              read-write
    +            
    +            
    +              TIMER_UNIT1_CORE0_STALL_EN
    +              If timer unit1 is stalled when core0 stalled
    +              26
    +              1
    +              read-write
    +            
    +            
    +              TIMER_UNIT0_CORE1_STALL_EN
    +              If timer unit0 is stalled when core1 stalled
    +              27
    +              1
    +              read-write
    +            
    +            
    +              TIMER_UNIT0_CORE0_STALL_EN
    +              If timer unit0 is stalled when core0 stalled
    +              28
    +              1
    +              read-write
    +            
    +            
    +              TIMER_UNIT1_WORK_EN
    +              timer unit1 work enable
    +              29
    +              1
    +              read-write
    +            
    +            
    +              TIMER_UNIT0_WORK_EN
    +              timer unit0 work enable
    +              30
    +              1
    +              read-write
    +            
    +            
    +              CLK_EN
    +              register file clk gating
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          UNIT0_OP
    +          SYSTIMER_UNIT0_OP.
    +          0x4
    +          0x20
    +          
    +            
    +              TIMER_UNIT0_VALUE_VALID
    +              reg_timer_unit0_value_valid
    +              29
    +              1
    +              read-only
    +            
    +            
    +              TIMER_UNIT0_UPDATE
    +              update timer_unit0
    +              30
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          UNIT1_OP
    +          SYSTIMER_UNIT1_OP.
    +          0x8
    +          0x20
    +          
    +            
    +              TIMER_UNIT1_VALUE_VALID
    +              timer value is sync and valid
    +              29
    +              1
    +              read-only
    +            
    +            
    +              TIMER_UNIT1_UPDATE
    +              update timer unit1
    +              30
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          UNIT0_LOAD_HI
    +          SYSTIMER_UNIT0_LOAD_HI.
    +          0xC
    +          0x20
    +          
    +            
    +              TIMER_UNIT0_LOAD_HI
    +              timer unit0 load high 32 bit
    +              0
    +              20
    +              read-write
    +            
    +          
    +        
    +        
    +          UNIT0_LOAD_LO
    +          SYSTIMER_UNIT0_LOAD_LO.
    +          0x10
    +          0x20
    +          
    +            
    +              TIMER_UNIT0_LOAD_LO
    +              timer unit0 load low 32 bit
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          UNIT1_LOAD_HI
    +          SYSTIMER_UNIT1_LOAD_HI.
    +          0x14
    +          0x20
    +          
    +            
    +              TIMER_UNIT1_LOAD_HI
    +              timer unit1 load high 32 bit
    +              0
    +              20
    +              read-write
    +            
    +          
    +        
    +        
    +          UNIT1_LOAD_LO
    +          SYSTIMER_UNIT1_LOAD_LO.
    +          0x18
    +          0x20
    +          
    +            
    +              TIMER_UNIT1_LOAD_LO
    +              timer unit1 load low 32 bit
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          TARGET0_HI
    +          SYSTIMER_TARGET0_HI.
    +          0x1C
    +          0x20
    +          
    +            
    +              TIMER_TARGET0_HI
    +              timer taget0 high 32 bit
    +              0
    +              20
    +              read-write
    +            
    +          
    +        
    +        
    +          TARGET0_LO
    +          SYSTIMER_TARGET0_LO.
    +          0x20
    +          0x20
    +          
    +            
    +              TIMER_TARGET0_LO
    +              timer taget0 low 32 bit
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          TARGET1_HI
    +          SYSTIMER_TARGET1_HI.
    +          0x24
    +          0x20
    +          
    +            
    +              TIMER_TARGET1_HI
    +              timer taget1 high 32 bit
    +              0
    +              20
    +              read-write
    +            
    +          
    +        
    +        
    +          TARGET1_LO
    +          SYSTIMER_TARGET1_LO.
    +          0x28
    +          0x20
    +          
    +            
    +              TIMER_TARGET1_LO
    +              timer taget1 low 32 bit
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          TARGET2_HI
    +          SYSTIMER_TARGET2_HI.
    +          0x2C
    +          0x20
    +          
    +            
    +              TIMER_TARGET2_HI
    +              timer taget2 high 32 bit
    +              0
    +              20
    +              read-write
    +            
    +          
    +        
    +        
    +          TARGET2_LO
    +          SYSTIMER_TARGET2_LO.
    +          0x30
    +          0x20
    +          
    +            
    +              TIMER_TARGET2_LO
    +              timer taget2 low 32 bit
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          TARGET0_CONF
    +          SYSTIMER_TARGET0_CONF.
    +          0x34
    +          0x20
    +          
    +            
    +              TARGET0_PERIOD
    +              target0 period
    +              0
    +              26
    +              read-write
    +            
    +            
    +              TARGET0_PERIOD_MODE
    +              Set target0 to period mode
    +              30
    +              1
    +              read-write
    +            
    +            
    +              TARGET0_TIMER_UNIT_SEL
    +              select which unit to compare
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          TARGET1_CONF
    +          SYSTIMER_TARGET1_CONF.
    +          0x38
    +          0x20
    +          
    +            
    +              TARGET1_PERIOD
    +              target1 period
    +              0
    +              26
    +              read-write
    +            
    +            
    +              TARGET1_PERIOD_MODE
    +              Set target1 to period mode
    +              30
    +              1
    +              read-write
    +            
    +            
    +              TARGET1_TIMER_UNIT_SEL
    +              select which unit to compare
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          TARGET2_CONF
    +          SYSTIMER_TARGET2_CONF.
    +          0x3C
    +          0x20
    +          
    +            
    +              TARGET2_PERIOD
    +              target2 period
    +              0
    +              26
    +              read-write
    +            
    +            
    +              TARGET2_PERIOD_MODE
    +              Set target2 to period mode
    +              30
    +              1
    +              read-write
    +            
    +            
    +              TARGET2_TIMER_UNIT_SEL
    +              select which unit to compare
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          UNIT0_VALUE_HI
    +          SYSTIMER_UNIT0_VALUE_HI.
    +          0x40
    +          0x20
    +          
    +            
    +              TIMER_UNIT0_VALUE_HI
    +              timer read value high 32bit
    +              0
    +              20
    +              read-only
    +            
    +          
    +        
    +        
    +          UNIT0_VALUE_LO
    +          SYSTIMER_UNIT0_VALUE_LO.
    +          0x44
    +          0x20
    +          
    +            
    +              TIMER_UNIT0_VALUE_LO
    +              timer read value low 32bit
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          UNIT1_VALUE_HI
    +          SYSTIMER_UNIT1_VALUE_HI.
    +          0x48
    +          0x20
    +          
    +            
    +              TIMER_UNIT1_VALUE_HI
    +              timer read value high 32bit
    +              0
    +              20
    +              read-only
    +            
    +          
    +        
    +        
    +          UNIT1_VALUE_LO
    +          SYSTIMER_UNIT1_VALUE_LO.
    +          0x4C
    +          0x20
    +          
    +            
    +              TIMER_UNIT1_VALUE_LO
    +              timer read value low 32bit
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          COMP0_LOAD
    +          SYSTIMER_COMP0_LOAD.
    +          0x50
    +          0x20
    +          
    +            
    +              TIMER_COMP0_LOAD
    +              timer comp0 load value
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          COMP1_LOAD
    +          SYSTIMER_COMP1_LOAD.
    +          0x54
    +          0x20
    +          
    +            
    +              TIMER_COMP1_LOAD
    +              timer comp1 load value
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          COMP2_LOAD
    +          SYSTIMER_COMP2_LOAD.
    +          0x58
    +          0x20
    +          
    +            
    +              TIMER_COMP2_LOAD
    +              timer comp2 load value
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          UNIT0_LOAD
    +          SYSTIMER_UNIT0_LOAD.
    +          0x5C
    +          0x20
    +          
    +            
    +              TIMER_UNIT0_LOAD
    +              timer unit0 load value
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          UNIT1_LOAD
    +          SYSTIMER_UNIT1_LOAD.
    +          0x60
    +          0x20
    +          
    +            
    +              TIMER_UNIT1_LOAD
    +              timer unit1 load value
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          INT_ENA
    +          SYSTIMER_INT_ENA.
    +          0x64
    +          0x20
    +          
    +            
    +              TARGET0_INT_ENA
    +              interupt0 enable
    +              0
    +              1
    +              read-write
    +            
    +            
    +              TARGET1_INT_ENA
    +              interupt1 enable
    +              1
    +              1
    +              read-write
    +            
    +            
    +              TARGET2_INT_ENA
    +              interupt2 enable
    +              2
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          INT_RAW
    +          SYSTIMER_INT_RAW.
    +          0x68
    +          0x20
    +          
    +            
    +              TARGET0_INT_RAW
    +              interupt0 raw
    +              0
    +              1
    +              read-only
    +            
    +            
    +              TARGET1_INT_RAW
    +              interupt1 raw
    +              1
    +              1
    +              read-only
    +            
    +            
    +              TARGET2_INT_RAW
    +              interupt2 raw
    +              2
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_CLR
    +          SYSTIMER_INT_CLR.
    +          0x6C
    +          0x20
    +          
    +            
    +              TARGET0_INT_CLR
    +              interupt0 clear
    +              0
    +              1
    +              write-only
    +            
    +            
    +              TARGET1_INT_CLR
    +              interupt1 clear
    +              1
    +              1
    +              write-only
    +            
    +            
    +              TARGET2_INT_CLR
    +              interupt2 clear
    +              2
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          INT_ST
    +          SYSTIMER_INT_ST.
    +          0x70
    +          0x20
    +          
    +            
    +              TARGET0_INT_ST
    +              reg_target0_int_st
    +              0
    +              1
    +              read-only
    +            
    +            
    +              TARGET1_INT_ST
    +              reg_target1_int_st
    +              1
    +              1
    +              read-only
    +            
    +            
    +              TARGET2_INT_ST
    +              reg_target2_int_st
    +              2
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          DATE
    +          SYSTIMER_DATE.
    +          0xFC
    +          0x20
    +          0x02006171
    +          
    +            
    +              DATE
    +              reg_date
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      TIMG0
    +      Timer Group
    +      TIMG
    +      0x6001F000
    +      
    +        0x0
    +        0x68
    +        registers
    +      
    +      
    +        TG0_T0_LEVEL
    +        32
    +      
    +      
    +        TG0_WDT_LEVEL
    +        33
    +      
    +      
    +        
    +          T0CONFIG
    +          TIMG_T0CONFIG_REG.
    +          0x0
    +          0x20
    +          0x60002000
    +          
    +            
    +              T0_USE_XTAL
    +              reg_t0_use_xtal.
    +              9
    +              1
    +              read-write
    +            
    +            
    +              T0_ALARM_EN
    +              reg_t0_alarm_en.
    +              10
    +              1
    +              read-write
    +            
    +            
    +              T0_DIVCNT_RST
    +              reg_t0_divcnt_rst.
    +              12
    +              1
    +              write-only
    +            
    +            
    +              T0_DIVIDER
    +              reg_t0_divider.
    +              13
    +              16
    +              read-write
    +            
    +            
    +              T0_AUTORELOAD
    +              reg_t0_autoreload.
    +              29
    +              1
    +              read-write
    +            
    +            
    +              T0_INCREASE
    +              reg_t0_increase.
    +              30
    +              1
    +              read-write
    +            
    +            
    +              T0_EN
    +              reg_t0_en.
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          T0LO
    +          TIMG_T0LO_REG.
    +          0x4
    +          0x20
    +          
    +            
    +              T0_LO
    +              t0_lo
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          T0HI
    +          TIMG_T0HI_REG.
    +          0x8
    +          0x20
    +          
    +            
    +              T0_HI
    +              t0_hi
    +              0
    +              22
    +              read-only
    +            
    +          
    +        
    +        
    +          T0UPDATE
    +          TIMG_T0UPDATE_REG.
    +          0xC
    +          0x20
    +          
    +            
    +              T0_UPDATE
    +              t0_update
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          T0ALARMLO
    +          TIMG_T0ALARMLO_REG.
    +          0x10
    +          0x20
    +          
    +            
    +              T0_ALARM_LO
    +              reg_t0_alarm_lo.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          T0ALARMHI
    +          TIMG_T0ALARMHI_REG.
    +          0x14
    +          0x20
    +          
    +            
    +              T0_ALARM_HI
    +              reg_t0_alarm_hi.
    +              0
    +              22
    +              read-write
    +            
    +          
    +        
    +        
    +          T0LOADLO
    +          TIMG_T0LOADLO_REG.
    +          0x18
    +          0x20
    +          
    +            
    +              T0_LOAD_LO
    +              reg_t0_load_lo.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          T0LOADHI
    +          TIMG_T0LOADHI_REG.
    +          0x1C
    +          0x20
    +          
    +            
    +              T0_LOAD_HI
    +              reg_t0_load_hi.
    +              0
    +              22
    +              read-write
    +            
    +          
    +        
    +        
    +          T0LOAD
    +          TIMG_T0LOAD_REG.
    +          0x20
    +          0x20
    +          
    +            
    +              T0_LOAD
    +              t0_load
    +              0
    +              32
    +              write-only
    +            
    +          
    +        
    +        
    +          WDTCONFIG0
    +          TIMG_WDTCONFIG0_REG.
    +          0x48
    +          0x20
    +          0x0004C000
    +          
    +            
    +              WDT_APPCPU_RESET_EN
    +              reg_wdt_appcpu_reset_en.
    +              12
    +              1
    +              read-write
    +            
    +            
    +              WDT_PROCPU_RESET_EN
    +              reg_wdt_procpu_reset_en.
    +              13
    +              1
    +              read-write
    +            
    +            
    +              WDT_FLASHBOOT_MOD_EN
    +              reg_wdt_flashboot_mod_en.
    +              14
    +              1
    +              read-write
    +            
    +            
    +              WDT_SYS_RESET_LENGTH
    +              reg_wdt_sys_reset_length.
    +              15
    +              3
    +              read-write
    +            
    +            
    +              WDT_CPU_RESET_LENGTH
    +              reg_wdt_cpu_reset_length.
    +              18
    +              3
    +              read-write
    +            
    +            
    +              WDT_USE_XTAL
    +              reg_wdt_use_xtal.
    +              21
    +              1
    +              read-write
    +            
    +            
    +              WDT_CONF_UPDATE_EN
    +              reg_wdt_conf_update_en.
    +              22
    +              1
    +              write-only
    +            
    +            
    +              WDT_STG3
    +              reg_wdt_stg3.
    +              23
    +              2
    +              read-write
    +            
    +            
    +              WDT_STG2
    +              reg_wdt_stg2.
    +              25
    +              2
    +              read-write
    +            
    +            
    +              WDT_STG1
    +              reg_wdt_stg1.
    +              27
    +              2
    +              read-write
    +            
    +            
    +              WDT_STG0
    +              reg_wdt_stg0.
    +              29
    +              2
    +              read-write
    +            
    +            
    +              WDT_EN
    +              reg_wdt_en.
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          WDTCONFIG1
    +          TIMG_WDTCONFIG1_REG.
    +          0x4C
    +          0x20
    +          0x00010000
    +          
    +            
    +              WDT_DIVCNT_RST
    +              reg_wdt_divcnt_rst.
    +              0
    +              1
    +              write-only
    +            
    +            
    +              WDT_CLK_PRESCALE
    +              reg_wdt_clk_prescale.
    +              16
    +              16
    +              read-write
    +            
    +          
    +        
    +        
    +          WDTCONFIG2
    +          TIMG_WDTCONFIG2_REG.
    +          0x50
    +          0x20
    +          0x018CBA80
    +          
    +            
    +              WDT_STG0_HOLD
    +              reg_wdt_stg0_hold.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          WDTCONFIG3
    +          TIMG_WDTCONFIG3_REG.
    +          0x54
    +          0x20
    +          0x07FFFFFF
    +          
    +            
    +              WDT_STG1_HOLD
    +              reg_wdt_stg1_hold.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          WDTCONFIG4
    +          TIMG_WDTCONFIG4_REG.
    +          0x58
    +          0x20
    +          0x000FFFFF
    +          
    +            
    +              WDT_STG2_HOLD
    +              reg_wdt_stg2_hold.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          WDTCONFIG5
    +          TIMG_WDTCONFIG5_REG.
    +          0x5C
    +          0x20
    +          0x000FFFFF
    +          
    +            
    +              WDT_STG3_HOLD
    +              reg_wdt_stg3_hold.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          WDTFEED
    +          TIMG_WDTFEED_REG.
    +          0x60
    +          0x20
    +          
    +            
    +              WDT_FEED
    +              wdt_feed
    +              0
    +              32
    +              write-only
    +            
    +          
    +        
    +        
    +          WDTWPROTECT
    +          TIMG_WDTWPROTECT_REG.
    +          0x64
    +          0x20
    +          0x50D83AA1
    +          
    +            
    +              WDT_WKEY
    +              reg_wdt_wkey.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          RTCCALICFG
    +          TIMG_RTCCALICFG_REG.
    +          0x68
    +          0x20
    +          0x00013000
    +          
    +            
    +              RTC_CALI_START_CYCLING
    +              reg_rtc_cali_start_cycling.
    +              12
    +              1
    +              read-write
    +            
    +            
    +              RTC_CALI_CLK_SEL
    +              reg_rtc_cali_clk_sel.0:rtcslowclock.1:clk_80m.2:xtal_32k
    +              13
    +              2
    +              read-write
    +            
    +            
    +              RTC_CALI_RDY
    +              rtc_cali_rdy
    +              15
    +              1
    +              read-only
    +            
    +            
    +              RTC_CALI_MAX
    +              reg_rtc_cali_max.
    +              16
    +              15
    +              read-write
    +            
    +            
    +              RTC_CALI_START
    +              reg_rtc_cali_start.
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          RTCCALICFG1
    +          TIMG_RTCCALICFG1_REG.
    +          0x6C
    +          0x20
    +          
    +            
    +              RTC_CALI_CYCLING_DATA_VLD
    +              rtc_cali_cycling_data_vld
    +              0
    +              1
    +              read-only
    +            
    +            
    +              RTC_CALI_VALUE
    +              rtc_cali_value
    +              7
    +              25
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_ENA_TIMERS
    +          INT_ENA_TIMG_REG
    +          0x70
    +          0x20
    +          
    +            
    +              T0_INT_ENA
    +              t0_int_ena
    +              0
    +              1
    +              read-write
    +            
    +            
    +              WDT_INT_ENA
    +              wdt_int_ena
    +              1
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          INT_RAW_TIMERS
    +          INT_RAW_TIMG_REG
    +          0x74
    +          0x20
    +          
    +            
    +              T0_INT_RAW
    +              t0_int_raw
    +              0
    +              1
    +              read-only
    +            
    +            
    +              WDT_INT_RAW
    +              wdt_int_raw
    +              1
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_ST_TIMERS
    +          INT_ST_TIMG_REG
    +          0x78
    +          0x20
    +          
    +            
    +              T0_INT_ST
    +              t0_int_st
    +              0
    +              1
    +              read-only
    +            
    +            
    +              WDT_INT_ST
    +              wdt_int_st
    +              1
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_CLR_TIMERS
    +          INT_CLR_TIMG_REG
    +          0x7C
    +          0x20
    +          
    +            
    +              T0_INT_CLR
    +              t0_int_clr
    +              0
    +              1
    +              write-only
    +            
    +            
    +              WDT_INT_CLR
    +              wdt_int_clr
    +              1
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          RTCCALICFG2
    +          TIMG_RTCCALICFG2_REG.
    +          0x80
    +          0x20
    +          0xFFFFFF98
    +          
    +            
    +              RTC_CALI_TIMEOUT
    +              timeoutindicator
    +              0
    +              1
    +              read-only
    +            
    +            
    +              RTC_CALI_TIMEOUT_RST_CNT
    +              reg_rtc_cali_timeout_rst_cnt.Cyclesthatreleasecalibrationtimeoutreset
    +              3
    +              4
    +              read-write
    +            
    +            
    +              RTC_CALI_TIMEOUT_THRES
    +              reg_rtc_cali_timeout_thres.timeoutifcalivaluecountsoverthreshold
    +              7
    +              25
    +              read-write
    +            
    +          
    +        
    +        
    +          NTIMG_DATE
    +          TIMG_NTIMG_DATE_REG.
    +          0xF8
    +          0x20
    +          0x02006191
    +          
    +            
    +              NTIMGS_DATE
    +              reg_ntimers_date.
    +              0
    +              28
    +              read-write
    +            
    +          
    +        
    +        
    +          REGCLK
    +          TIMG_REGCLK_REG.
    +          0xFC
    +          0x20
    +          0x60000000
    +          
    +            
    +              WDT_CLK_IS_ACTIVE
    +              reg_wdt_clk_is_active.
    +              29
    +              1
    +              read-write
    +            
    +            
    +              TIMER_CLK_IS_ACTIVE
    +              reg_timer_clk_is_active.
    +              30
    +              1
    +              read-write
    +            
    +            
    +              CLK_EN
    +              reg_clk_en.
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      TIMG1
    +      Timer Group
    +      0x60020000
    +      
    +        TG1_T0_LEVEL
    +        34
    +      
    +      
    +        TG1_WDT_LEVEL
    +        35
    +      
    +    
    +    
    +      TWAI
    +      Two-Wire Automotive Interface
    +      TWAI
    +      0x6002B000
    +      
    +        0x0
    +        0x6C
    +        registers
    +      
    +      
    +        TWAI
    +        25
    +      
    +      
    +        
    +          MODE
    +          Mode Register
    +          0x0
    +          0x20
    +          0x00000001
    +          
    +            
    +              RESET_MODE
    +              This bit is used to configure the operating mode of the TWAI Controller. 1: Reset mode; 0: Operating mode.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              LISTEN_ONLY_MODE
    +              1: Listen only mode. In this mode the nodes will only receive messages from the bus, without generating the acknowledge signal nor updating the RX error counter.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              SELF_TEST_MODE
    +              1: Self test mode. In this mode the TX nodes can perform a successful transmission without receiving the acknowledge signal. This mode is often used to test a single node with the self reception request command.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              RX_FILTER_MODE
    +              This bit is used to configure the filter mode. 0: Dual filter mode; 1: Single filter mode.
    +              3
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CMD
    +          Command Register
    +          0x4
    +          0x20
    +          
    +            
    +              TX_REQ
    +              Set the bit to 1 to allow the driving nodes start transmission.
    +              0
    +              1
    +              write-only
    +            
    +            
    +              ABORT_TX
    +              Set the bit to 1 to cancel a pending transmission request.
    +              1
    +              1
    +              write-only
    +            
    +            
    +              RELEASE_BUF
    +              Set the bit to 1 to release the RX buffer.
    +              2
    +              1
    +              write-only
    +            
    +            
    +              CLR_OVERRUN
    +              Set the bit to 1 to clear the data overrun status bit.
    +              3
    +              1
    +              write-only
    +            
    +            
    +              SELF_RX_REQ
    +              Self reception request command. Set the bit to 1 to allow a message be transmitted and received simultaneously.
    +              4
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          STATUS
    +          Status register
    +          0x8
    +          0x20
    +          
    +            
    +              RX_BUF_ST
    +              1: The data in the RX buffer is not empty, with at least one received data packet.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              OVERRUN_ST
    +              1: The RX FIFO is full and data overrun has occurred.
    +              1
    +              1
    +              read-only
    +            
    +            
    +              TX_BUF_ST
    +              1: The TX buffer is empty, the CPU may write a message into it.
    +              2
    +              1
    +              read-only
    +            
    +            
    +              TX_COMPLETE
    +              1: The TWAI controller has successfully received a packet from the bus.
    +              3
    +              1
    +              read-only
    +            
    +            
    +              RX_ST
    +              1: The TWAI Controller is receiving a message from the bus.
    +              4
    +              1
    +              read-only
    +            
    +            
    +              TX_ST
    +              1: The TWAI Controller is transmitting a message to the bus.
    +              5
    +              1
    +              read-only
    +            
    +            
    +              ERR_ST
    +              1: At least one of the RX/TX error counter has reached or exceeded the value set in register TWAI_ERR_WARNING_LIMIT_REG.
    +              6
    +              1
    +              read-only
    +            
    +            
    +              BUS_OFF_ST
    +              1: In bus-off status, the TWAI Controller is no longer involved in bus activities.
    +              7
    +              1
    +              read-only
    +            
    +            
    +              MISS_ST
    +              This bit reflects whether the data packet in the RX FIFO is complete. 1: The current packet is missing; 0: The current packet is complete
    +              8
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_RAW
    +          Interrupt Register
    +          0xC
    +          0x20
    +          
    +            
    +              RX_INT_ST
    +              Receive interrupt. If this bit is set to 1, it indicates there are messages to be handled in the RX FIFO.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              TX_INT_ST
    +              Transmit interrupt. If this bit is set to 1, it indicates the message transmitting mis- sion is finished and a new transmission is able to execute.
    +              1
    +              1
    +              read-only
    +            
    +            
    +              ERR_WARN_INT_ST
    +              Error warning interrupt. If this bit is set to 1, it indicates the error status signal and the bus-off status signal of Status register have changed (e.g., switched from 0 to 1 or from 1 to 0).
    +              2
    +              1
    +              read-only
    +            
    +            
    +              OVERRUN_INT_ST
    +              Data overrun interrupt. If this bit is set to 1, it indicates a data overrun interrupt is generated in the RX FIFO.
    +              3
    +              1
    +              read-only
    +            
    +            
    +              ERR_PASSIVE_INT_ST
    +              Error passive interrupt. If this bit is set to 1, it indicates the TWAI Controller is switched between error active status and error passive status due to the change of error counters.
    +              5
    +              1
    +              read-only
    +            
    +            
    +              ARB_LOST_INT_ST
    +              Arbitration lost interrupt. If this bit is set to 1, it indicates an arbitration lost interrupt is generated.
    +              6
    +              1
    +              read-only
    +            
    +            
    +              BUS_ERR_INT_ST
    +              Error interrupt. If this bit is set to 1, it indicates an error is detected on the bus.
    +              7
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_ENA
    +          Interrupt Enable Register
    +          0x10
    +          0x20
    +          
    +            
    +              RX_INT_ENA
    +              Set this bit to 1 to enable receive interrupt.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              TX_INT_ENA
    +              Set this bit to 1 to enable transmit interrupt.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              ERR_WARN_INT_ENA
    +              Set this bit to 1 to enable error warning interrupt.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              OVERRUN_INT_ENA
    +              Set this bit to 1 to enable data overrun interrupt.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              ERR_PASSIVE_INT_ENA
    +              Set this bit to 1 to enable error passive interrupt.
    +              5
    +              1
    +              read-write
    +            
    +            
    +              ARB_LOST_INT_ENA
    +              Set this bit to 1 to enable arbitration lost interrupt.
    +              6
    +              1
    +              read-write
    +            
    +            
    +              BUS_ERR_INT_ENA
    +              Set this bit to 1 to enable error interrupt.
    +              7
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          BUS_TIMING_0
    +          Bus Timing Register 0
    +          0x18
    +          0x20
    +          
    +            
    +              BAUD_PRESC
    +              Baud Rate Prescaler, determines the frequency dividing ratio.
    +              0
    +              13
    +            
    +            
    +              SYNC_JUMP_WIDTH
    +              Synchronization Jump Width (SJW), 1 \verb+~+ 14 Tq wide.
    +              14
    +              2
    +            
    +          
    +        
    +        
    +          BUS_TIMING_1
    +          Bus Timing Register 1
    +          0x1C
    +          0x20
    +          
    +            
    +              TIME_SEG1
    +              The width of PBS1.
    +              0
    +              4
    +            
    +            
    +              TIME_SEG2
    +              The width of PBS2.
    +              4
    +              3
    +            
    +            
    +              TIME_SAMP
    +              The number of sample points. 0: the bus is sampled once; 1: the bus is sampled three times
    +              7
    +              1
    +            
    +          
    +        
    +        
    +          ARB_LOST_CAP
    +          Arbitration Lost Capture Register
    +          0x2C
    +          0x20
    +          
    +            
    +              ARB_LOST_CAP
    +              This register contains information about the bit position of lost arbitration.
    +              0
    +              5
    +              read-only
    +            
    +          
    +        
    +        
    +          ERR_CODE_CAP
    +          Error Code Capture Register
    +          0x30
    +          0x20
    +          
    +            
    +              ECC_SEGMENT
    +              This register contains information about the location of errors, see Table 181 for details.
    +              0
    +              5
    +              read-only
    +            
    +            
    +              ECC_DIRECTION
    +              This register contains information about transmission direction of the node when error occurs. 1: Error occurs when receiving a message; 0: Error occurs when transmitting a message
    +              5
    +              1
    +              read-only
    +            
    +            
    +              ECC_TYPE
    +              This register contains information about error types: 00: bit error; 01: form error; 10: stuff error; 11: other type of error
    +              6
    +              2
    +              read-only
    +            
    +          
    +        
    +        
    +          ERR_WARNING_LIMIT
    +          Error Warning Limit Register
    +          0x34
    +          0x20
    +          0x00000060
    +          
    +            
    +              ERR_WARNING_LIMIT
    +              Error warning threshold. In the case when any of a error counter value exceeds the threshold, or all the error counter values are below the threshold, an error warning interrupt will be triggered (given the enable signal is valid).
    +              0
    +              8
    +            
    +          
    +        
    +        
    +          RX_ERR_CNT
    +          Receive Error Counter Register
    +          0x38
    +          0x20
    +          
    +            
    +              RX_ERR_CNT
    +              The RX error counter register, reflects value changes under reception status.
    +              0
    +              8
    +            
    +          
    +        
    +        
    +          TX_ERR_CNT
    +          Transmit Error Counter Register
    +          0x3C
    +          0x20
    +          
    +            
    +              TX_ERR_CNT
    +              The TX error counter register, reflects value changes under transmission status.
    +              0
    +              8
    +            
    +          
    +        
    +        
    +          DATA_0
    +          Data register 0
    +          0x40
    +          0x20
    +          
    +            
    +              TX_BYTE_0
    +              In reset mode, it is acceptance code register 0 with R/W Permission. In operation mode, it stores the 0th byte information of the data to be transmitted under operating mode.
    +              0
    +              8
    +              write-only
    +            
    +          
    +        
    +        
    +          DATA_1
    +          Data register 1
    +          0x44
    +          0x20
    +          
    +            
    +              TX_BYTE_1
    +              In reset mode, it is acceptance code register 1 with R/W Permission. In operation mode, it stores the 1st byte information of the data to be transmitted under operating mode.
    +              0
    +              8
    +              write-only
    +            
    +          
    +        
    +        
    +          DATA_2
    +          Data register 2
    +          0x48
    +          0x20
    +          
    +            
    +              TX_BYTE_2
    +              In reset mode, it is acceptance code register 2 with R/W Permission. In operation mode, it stores the 2nd byte information of the data to be transmitted under operating mode.
    +              0
    +              8
    +              write-only
    +            
    +          
    +        
    +        
    +          DATA_3
    +          Data register 3
    +          0x4C
    +          0x20
    +          
    +            
    +              TX_BYTE_3
    +              In reset mode, it is acceptance code register 3 with R/W Permission. In operation mode, it stores the 3rd byte information of the data to be transmitted under operating mode.
    +              0
    +              8
    +              write-only
    +            
    +          
    +        
    +        
    +          DATA_4
    +          Data register 4
    +          0x50
    +          0x20
    +          
    +            
    +              TX_BYTE_4
    +              In reset mode, it is acceptance mask register 0 with R/W Permission. In operation mode, it stores the 4th byte information of the data to be transmitted under operating mode.
    +              0
    +              8
    +              write-only
    +            
    +          
    +        
    +        
    +          DATA_5
    +          Data register 5
    +          0x54
    +          0x20
    +          
    +            
    +              TX_BYTE_5
    +              In reset mode, it is acceptance mask register 1 with R/W Permission. In operation mode, it stores the 5th byte information of the data to be transmitted under operating mode.
    +              0
    +              8
    +              write-only
    +            
    +          
    +        
    +        
    +          DATA_6
    +          Data register 6
    +          0x58
    +          0x20
    +          
    +            
    +              TX_BYTE_6
    +              In reset mode, it is acceptance mask register 2 with R/W Permission. In operation mode, it stores the 6th byte information of the data to be transmitted under operating mode.
    +              0
    +              8
    +              write-only
    +            
    +          
    +        
    +        
    +          DATA_7
    +          Data register 7
    +          0x5C
    +          0x20
    +          
    +            
    +              TX_BYTE_7
    +              In reset mode, it is acceptance mask register 3 with R/W Permission. In operation mode, it stores the 7th byte information of the data to be transmitted under operating mode.
    +              0
    +              8
    +              write-only
    +            
    +          
    +        
    +        
    +          DATA_8
    +          Data register 8
    +          0x60
    +          0x20
    +          
    +            
    +              TX_BYTE_8
    +              Stored the 8th byte information of the data to be transmitted under operating mode.
    +              0
    +              8
    +              write-only
    +            
    +          
    +        
    +        
    +          DATA_9
    +          Data register 9
    +          0x64
    +          0x20
    +          
    +            
    +              TX_BYTE_9
    +              Stored the 9th byte information of the data to be transmitted under operating mode.
    +              0
    +              8
    +              write-only
    +            
    +          
    +        
    +        
    +          DATA_10
    +          Data register 10
    +          0x68
    +          0x20
    +          
    +            
    +              TX_BYTE_10
    +              Stored the 10th byte information of the data to be transmitted under operating mode.
    +              0
    +              8
    +              write-only
    +            
    +          
    +        
    +        
    +          DATA_11
    +          Data register 11
    +          0x6C
    +          0x20
    +          
    +            
    +              TX_BYTE_11
    +              Stored the 11th byte information of the data to be transmitted under operating mode.
    +              0
    +              8
    +              write-only
    +            
    +          
    +        
    +        
    +          DATA_12
    +          Data register 12
    +          0x70
    +          0x20
    +          
    +            
    +              TX_BYTE_12
    +              Stored the 12th byte information of the data to be transmitted under operating mode.
    +              0
    +              8
    +              write-only
    +            
    +          
    +        
    +        
    +          RX_MESSAGE_CNT
    +          Receive Message Counter Register
    +          0x74
    +          0x20
    +          
    +            
    +              RX_MESSAGE_COUNTER
    +              This register reflects the number of messages available within the RX FIFO.
    +              0
    +              7
    +              read-only
    +            
    +          
    +        
    +        
    +          CLOCK_DIVIDER
    +          Clock Divider register
    +          0x7C
    +          0x20
    +          
    +            
    +              CD
    +              These bits are used to configure frequency dividing coefficients of the external CLKOUT pin.
    +              0
    +              8
    +              read-write
    +            
    +            
    +              CLOCK_OFF
    +              This bit can be configured under reset mode. 1: Disable the external CLKOUT pin; 0: Enable the external CLKOUT pin
    +              8
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      UART0
    +      UART (Universal Asynchronous Receiver-Transmitter) Controller
    +      UART
    +      0x60000000
    +      
    +        0x0
    +        0x84
    +        registers
    +      
    +      
    +        UART0
    +        21
    +      
    +      
    +        
    +          FIFO
    +          FIFO data register
    +          0x0
    +          0x20
    +          
    +            
    +              RXFIFO_RD_BYTE
    +              UART 0 accesses FIFO via this register.
    +              0
    +              8
    +              read-write
    +            
    +          
    +        
    +        
    +          INT_RAW
    +          Raw interrupt status
    +          0x4
    +          0x20
    +          0x00000002
    +          
    +            
    +              RXFIFO_FULL_INT_RAW
    +              This interrupt raw bit turns to high level when receiver receives more data than what rxfifo_full_thrhd specifies.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              TXFIFO_EMPTY_INT_RAW
    +              This interrupt raw bit turns to high level when the amount of data in Tx-FIFO is less than what txfifo_empty_thrhd specifies .
    +              1
    +              1
    +              read-only
    +            
    +            
    +              PARITY_ERR_INT_RAW
    +              This interrupt raw bit turns to high level when receiver detects a parity error in the data.
    +              2
    +              1
    +              read-only
    +            
    +            
    +              FRM_ERR_INT_RAW
    +              This interrupt raw bit turns to high level when receiver detects a data frame error .
    +              3
    +              1
    +              read-only
    +            
    +            
    +              RXFIFO_OVF_INT_RAW
    +              This interrupt raw bit turns to high level when receiver receives more data than the FIFO can store.
    +              4
    +              1
    +              read-only
    +            
    +            
    +              DSR_CHG_INT_RAW
    +              This interrupt raw bit turns to high level when receiver detects the edge change of DSRn signal.
    +              5
    +              1
    +              read-only
    +            
    +            
    +              CTS_CHG_INT_RAW
    +              This interrupt raw bit turns to high level when receiver detects the edge change of CTSn signal.
    +              6
    +              1
    +              read-only
    +            
    +            
    +              BRK_DET_INT_RAW
    +              This interrupt raw bit turns to high level when receiver detects a 0 after the stop bit.
    +              7
    +              1
    +              read-only
    +            
    +            
    +              RXFIFO_TOUT_INT_RAW
    +              This interrupt raw bit turns to high level when receiver takes more time than rx_tout_thrhd to receive a byte.
    +              8
    +              1
    +              read-only
    +            
    +            
    +              SW_XON_INT_RAW
    +              This interrupt raw bit turns to high level when receiver recevies Xon char when uart_sw_flow_con_en is set to 1.
    +              9
    +              1
    +              read-only
    +            
    +            
    +              SW_XOFF_INT_RAW
    +              This interrupt raw bit turns to high level when receiver receives Xoff char when uart_sw_flow_con_en is set to 1.
    +              10
    +              1
    +              read-only
    +            
    +            
    +              GLITCH_DET_INT_RAW
    +              This interrupt raw bit turns to high level when receiver detects a glitch in the middle of a start bit.
    +              11
    +              1
    +              read-only
    +            
    +            
    +              TX_BRK_DONE_INT_RAW
    +              This interrupt raw bit turns to high level when transmitter completes  sending  NULL characters, after all data in Tx-FIFO are sent.
    +              12
    +              1
    +              read-only
    +            
    +            
    +              TX_BRK_IDLE_DONE_INT_RAW
    +              This interrupt raw bit turns to high level when transmitter has kept the shortest duration after sending the  last data.
    +              13
    +              1
    +              read-only
    +            
    +            
    +              TX_DONE_INT_RAW
    +              This interrupt raw bit turns to high level when transmitter has send out all data in FIFO.
    +              14
    +              1
    +              read-only
    +            
    +            
    +              RS485_PARITY_ERR_INT_RAW
    +              This interrupt raw bit turns to high level when receiver detects a parity error from the echo of transmitter in rs485 mode.
    +              15
    +              1
    +              read-only
    +            
    +            
    +              RS485_FRM_ERR_INT_RAW
    +              This interrupt raw bit turns to high level when receiver detects a data frame error from the echo of transmitter in rs485 mode.
    +              16
    +              1
    +              read-only
    +            
    +            
    +              RS485_CLASH_INT_RAW
    +              This interrupt raw bit turns to high level when detects a clash between transmitter and receiver in rs485 mode.
    +              17
    +              1
    +              read-only
    +            
    +            
    +              AT_CMD_CHAR_DET_INT_RAW
    +              This interrupt raw bit turns to high level when receiver detects the configured at_cmd char.
    +              18
    +              1
    +              read-only
    +            
    +            
    +              WAKEUP_INT_RAW
    +              This interrupt raw bit turns to high level when input rxd edge changes more times than what reg_active_threshold specifies in light sleeping mode.
    +              19
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_ST
    +          Masked interrupt status
    +          0x8
    +          0x20
    +          
    +            
    +              RXFIFO_FULL_INT_ST
    +              This is the status bit for rxfifo_full_int_raw when rxfifo_full_int_ena is set to 1.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              TXFIFO_EMPTY_INT_ST
    +              This is the status bit for  txfifo_empty_int_raw  when txfifo_empty_int_ena is set to 1.
    +              1
    +              1
    +              read-only
    +            
    +            
    +              PARITY_ERR_INT_ST
    +              This is the status bit for parity_err_int_raw when parity_err_int_ena is set to 1.
    +              2
    +              1
    +              read-only
    +            
    +            
    +              FRM_ERR_INT_ST
    +              This is the status bit for frm_err_int_raw when frm_err_int_ena is set to 1.
    +              3
    +              1
    +              read-only
    +            
    +            
    +              RXFIFO_OVF_INT_ST
    +              This is the status bit for rxfifo_ovf_int_raw when rxfifo_ovf_int_ena is set to 1.
    +              4
    +              1
    +              read-only
    +            
    +            
    +              DSR_CHG_INT_ST
    +              This is the status bit for dsr_chg_int_raw when dsr_chg_int_ena is set to 1.
    +              5
    +              1
    +              read-only
    +            
    +            
    +              CTS_CHG_INT_ST
    +              This is the status bit for cts_chg_int_raw when cts_chg_int_ena is set to 1.
    +              6
    +              1
    +              read-only
    +            
    +            
    +              BRK_DET_INT_ST
    +              This is the status bit for brk_det_int_raw when brk_det_int_ena is set to 1.
    +              7
    +              1
    +              read-only
    +            
    +            
    +              RXFIFO_TOUT_INT_ST
    +              This is the status bit for rxfifo_tout_int_raw when rxfifo_tout_int_ena is set to 1.
    +              8
    +              1
    +              read-only
    +            
    +            
    +              SW_XON_INT_ST
    +              This is the status bit for sw_xon_int_raw when sw_xon_int_ena is set to 1.
    +              9
    +              1
    +              read-only
    +            
    +            
    +              SW_XOFF_INT_ST
    +              This is the status bit for sw_xoff_int_raw when sw_xoff_int_ena is set to 1.
    +              10
    +              1
    +              read-only
    +            
    +            
    +              GLITCH_DET_INT_ST
    +              This is the status bit for glitch_det_int_raw when glitch_det_int_ena is set to 1.
    +              11
    +              1
    +              read-only
    +            
    +            
    +              TX_BRK_DONE_INT_ST
    +              This is the status bit for tx_brk_done_int_raw when tx_brk_done_int_ena is set to 1.
    +              12
    +              1
    +              read-only
    +            
    +            
    +              TX_BRK_IDLE_DONE_INT_ST
    +              This is the stauts bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena is set to 1.
    +              13
    +              1
    +              read-only
    +            
    +            
    +              TX_DONE_INT_ST
    +              This is the status bit for tx_done_int_raw when tx_done_int_ena is set to 1.
    +              14
    +              1
    +              read-only
    +            
    +            
    +              RS485_PARITY_ERR_INT_ST
    +              This is the status bit for rs485_parity_err_int_raw when rs485_parity_int_ena is set to 1.
    +              15
    +              1
    +              read-only
    +            
    +            
    +              RS485_FRM_ERR_INT_ST
    +              This is the status bit for rs485_frm_err_int_raw when rs485_fm_err_int_ena is set to 1.
    +              16
    +              1
    +              read-only
    +            
    +            
    +              RS485_CLASH_INT_ST
    +              This is the status bit for rs485_clash_int_raw when rs485_clash_int_ena is set to 1.
    +              17
    +              1
    +              read-only
    +            
    +            
    +              AT_CMD_CHAR_DET_INT_ST
    +              This is the status bit for at_cmd_det_int_raw when at_cmd_char_det_int_ena is set to 1.
    +              18
    +              1
    +              read-only
    +            
    +            
    +              WAKEUP_INT_ST
    +              This is the status bit for uart_wakeup_int_raw when uart_wakeup_int_ena is set to 1.
    +              19
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_ENA
    +          Interrupt enable bits
    +          0xC
    +          0x20
    +          
    +            
    +              RXFIFO_FULL_INT_ENA
    +              This is the enable bit for rxfifo_full_int_st register.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              TXFIFO_EMPTY_INT_ENA
    +              This is the enable bit for txfifo_empty_int_st register.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              PARITY_ERR_INT_ENA
    +              This is the enable bit for parity_err_int_st register.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              FRM_ERR_INT_ENA
    +              This is the enable bit for frm_err_int_st register.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              RXFIFO_OVF_INT_ENA
    +              This is the enable bit for rxfifo_ovf_int_st register.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              DSR_CHG_INT_ENA
    +              This is the enable bit for dsr_chg_int_st register.
    +              5
    +              1
    +              read-write
    +            
    +            
    +              CTS_CHG_INT_ENA
    +              This is the enable bit for cts_chg_int_st register.
    +              6
    +              1
    +              read-write
    +            
    +            
    +              BRK_DET_INT_ENA
    +              This is the enable bit for brk_det_int_st register.
    +              7
    +              1
    +              read-write
    +            
    +            
    +              RXFIFO_TOUT_INT_ENA
    +              This is the enable bit for rxfifo_tout_int_st register.
    +              8
    +              1
    +              read-write
    +            
    +            
    +              SW_XON_INT_ENA
    +              This is the enable bit for sw_xon_int_st register.
    +              9
    +              1
    +              read-write
    +            
    +            
    +              SW_XOFF_INT_ENA
    +              This is the enable bit for sw_xoff_int_st register.
    +              10
    +              1
    +              read-write
    +            
    +            
    +              GLITCH_DET_INT_ENA
    +              This is the enable bit for glitch_det_int_st register.
    +              11
    +              1
    +              read-write
    +            
    +            
    +              TX_BRK_DONE_INT_ENA
    +              This is the enable bit for tx_brk_done_int_st register.
    +              12
    +              1
    +              read-write
    +            
    +            
    +              TX_BRK_IDLE_DONE_INT_ENA
    +              This is the enable bit for tx_brk_idle_done_int_st register.
    +              13
    +              1
    +              read-write
    +            
    +            
    +              TX_DONE_INT_ENA
    +              This is the enable bit for tx_done_int_st register.
    +              14
    +              1
    +              read-write
    +            
    +            
    +              RS485_PARITY_ERR_INT_ENA
    +              This is the enable bit for rs485_parity_err_int_st register.
    +              15
    +              1
    +              read-write
    +            
    +            
    +              RS485_FRM_ERR_INT_ENA
    +              This is the enable bit for rs485_parity_err_int_st register.
    +              16
    +              1
    +              read-write
    +            
    +            
    +              RS485_CLASH_INT_ENA
    +              This is the enable bit for rs485_clash_int_st register.
    +              17
    +              1
    +              read-write
    +            
    +            
    +              AT_CMD_CHAR_DET_INT_ENA
    +              This is the enable bit for at_cmd_char_det_int_st register.
    +              18
    +              1
    +              read-write
    +            
    +            
    +              WAKEUP_INT_ENA
    +              This is the enable bit for uart_wakeup_int_st register.
    +              19
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          INT_CLR
    +          Interrupt clear bits
    +          0x10
    +          0x20
    +          
    +            
    +              RXFIFO_FULL_INT_CLR
    +              Set this bit to clear the rxfifo_full_int_raw interrupt.
    +              0
    +              1
    +              write-only
    +            
    +            
    +              TXFIFO_EMPTY_INT_CLR
    +              Set this bit to clear txfifo_empty_int_raw interrupt.
    +              1
    +              1
    +              write-only
    +            
    +            
    +              PARITY_ERR_INT_CLR
    +              Set this bit to clear parity_err_int_raw interrupt.
    +              2
    +              1
    +              write-only
    +            
    +            
    +              FRM_ERR_INT_CLR
    +              Set this bit to clear frm_err_int_raw interrupt.
    +              3
    +              1
    +              write-only
    +            
    +            
    +              RXFIFO_OVF_INT_CLR
    +              Set this bit to clear rxfifo_ovf_int_raw interrupt.
    +              4
    +              1
    +              write-only
    +            
    +            
    +              DSR_CHG_INT_CLR
    +              Set this bit to clear the dsr_chg_int_raw interrupt.
    +              5
    +              1
    +              write-only
    +            
    +            
    +              CTS_CHG_INT_CLR
    +              Set this bit to clear the cts_chg_int_raw interrupt.
    +              6
    +              1
    +              write-only
    +            
    +            
    +              BRK_DET_INT_CLR
    +              Set this bit to clear the brk_det_int_raw interrupt.
    +              7
    +              1
    +              write-only
    +            
    +            
    +              RXFIFO_TOUT_INT_CLR
    +              Set this bit to clear the rxfifo_tout_int_raw interrupt.
    +              8
    +              1
    +              write-only
    +            
    +            
    +              SW_XON_INT_CLR
    +              Set this bit to clear the sw_xon_int_raw interrupt.
    +              9
    +              1
    +              write-only
    +            
    +            
    +              SW_XOFF_INT_CLR
    +              Set this bit to clear the sw_xoff_int_raw interrupt.
    +              10
    +              1
    +              write-only
    +            
    +            
    +              GLITCH_DET_INT_CLR
    +              Set this bit to clear the glitch_det_int_raw interrupt.
    +              11
    +              1
    +              write-only
    +            
    +            
    +              TX_BRK_DONE_INT_CLR
    +              Set this bit to clear the tx_brk_done_int_raw interrupt..
    +              12
    +              1
    +              write-only
    +            
    +            
    +              TX_BRK_IDLE_DONE_INT_CLR
    +              Set this bit to clear the tx_brk_idle_done_int_raw interrupt.
    +              13
    +              1
    +              write-only
    +            
    +            
    +              TX_DONE_INT_CLR
    +              Set this bit to clear the tx_done_int_raw interrupt.
    +              14
    +              1
    +              write-only
    +            
    +            
    +              RS485_PARITY_ERR_INT_CLR
    +              Set this bit to clear the rs485_parity_err_int_raw interrupt.
    +              15
    +              1
    +              write-only
    +            
    +            
    +              RS485_FRM_ERR_INT_CLR
    +              Set this bit to clear the rs485_frm_err_int_raw interrupt.
    +              16
    +              1
    +              write-only
    +            
    +            
    +              RS485_CLASH_INT_CLR
    +              Set this bit to clear the rs485_clash_int_raw interrupt.
    +              17
    +              1
    +              write-only
    +            
    +            
    +              AT_CMD_CHAR_DET_INT_CLR
    +              Set this bit to clear the at_cmd_char_det_int_raw interrupt.
    +              18
    +              1
    +              write-only
    +            
    +            
    +              WAKEUP_INT_CLR
    +              Set this bit to clear the uart_wakeup_int_raw interrupt.
    +              19
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          CLKDIV
    +          Clock divider configuration
    +          0x14
    +          0x20
    +          0x000002B6
    +          
    +            
    +              CLKDIV
    +              The integral part of the frequency divider factor.
    +              0
    +              12
    +              read-write
    +            
    +            
    +              FRAG
    +              The decimal part of the frequency divider factor.
    +              20
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          RX_FILT
    +          Rx Filter configuration
    +          0x18
    +          0x20
    +          0x00000008
    +          
    +            
    +              GLITCH_FILT
    +              when input pulse width is lower than this value, the pulse is ignored.
    +              0
    +              8
    +              read-write
    +            
    +            
    +              GLITCH_FILT_EN
    +              Set this bit to enable Rx signal filter.
    +              8
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          STATUS
    +          UART status register
    +          0x1C
    +          0x20
    +          0xE000C000
    +          
    +            
    +              RXFIFO_CNT
    +              Stores the byte number of valid data in Rx-FIFO.
    +              0
    +              10
    +              read-only
    +            
    +            
    +              DSRN
    +              The register represent the level value of the internal uart dsr signal.
    +              13
    +              1
    +              read-only
    +            
    +            
    +              CTSN
    +              This register represent the level value of the internal uart cts signal.
    +              14
    +              1
    +              read-only
    +            
    +            
    +              RXD
    +              This register represent the  level value of the internal uart rxd signal.
    +              15
    +              1
    +              read-only
    +            
    +            
    +              TXFIFO_CNT
    +              Stores the byte number of data in Tx-FIFO.
    +              16
    +              10
    +              read-only
    +            
    +            
    +              DTRN
    +              This bit represents the level of the internal uart dtr signal.
    +              29
    +              1
    +              read-only
    +            
    +            
    +              RTSN
    +              This bit represents the level of the internal uart rts signal.
    +              30
    +              1
    +              read-only
    +            
    +            
    +              TXD
    +              This bit represents the  level of the internal uart txd signal.
    +              31
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          CONF0
    +          a
    +          0x20
    +          0x20
    +          0x1000001C
    +          
    +            
    +              PARITY
    +              This register is used to configure the parity check mode.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              PARITY_EN
    +              Set this bit to enable uart parity check.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              BIT_NUM
    +              This register is used to set the length of data.
    +              2
    +              2
    +              read-write
    +            
    +            
    +              STOP_BIT_NUM
    +              This register is used to set the length of  stop bit.
    +              4
    +              2
    +              read-write
    +            
    +            
    +              SW_RTS
    +              This register is used to configure the software rts signal which is used in software flow control.
    +              6
    +              1
    +              read-write
    +            
    +            
    +              SW_DTR
    +              This register is used to configure the software dtr signal which is used in software flow control.
    +              7
    +              1
    +              read-write
    +            
    +            
    +              TXD_BRK
    +              Set this bit to enbale transmitter to  send NULL when the process of sending data is done.
    +              8
    +              1
    +              read-write
    +            
    +            
    +              IRDA_DPLX
    +              Set this bit to enable IrDA loopback mode.
    +              9
    +              1
    +              read-write
    +            
    +            
    +              IRDA_TX_EN
    +              This is the start enable bit for IrDA transmitter.
    +              10
    +              1
    +              read-write
    +            
    +            
    +              IRDA_WCTL
    +              1'h1: The IrDA transmitter's 11th bit is the same as 10th bit. 1'h0: Set IrDA transmitter's 11th bit to 0.
    +              11
    +              1
    +              read-write
    +            
    +            
    +              IRDA_TX_INV
    +              Set this bit to invert the level of  IrDA transmitter.
    +              12
    +              1
    +              read-write
    +            
    +            
    +              IRDA_RX_INV
    +              Set this bit to invert the level of IrDA receiver.
    +              13
    +              1
    +              read-write
    +            
    +            
    +              LOOPBACK
    +              Set this bit to enable uart loopback test mode.
    +              14
    +              1
    +              read-write
    +            
    +            
    +              TX_FLOW_EN
    +              Set this bit to enable flow control function for transmitter.
    +              15
    +              1
    +              read-write
    +            
    +            
    +              IRDA_EN
    +              Set this bit to enable IrDA protocol.
    +              16
    +              1
    +              read-write
    +            
    +            
    +              RXFIFO_RST
    +              Set this bit to reset the uart receive-FIFO.
    +              17
    +              1
    +              read-write
    +            
    +            
    +              TXFIFO_RST
    +              Set this bit to reset the uart transmit-FIFO.
    +              18
    +              1
    +              read-write
    +            
    +            
    +              RXD_INV
    +              Set this bit to inverse the level value of uart rxd signal.
    +              19
    +              1
    +              read-write
    +            
    +            
    +              CTS_INV
    +              Set this bit to inverse the level value of uart cts signal.
    +              20
    +              1
    +              read-write
    +            
    +            
    +              DSR_INV
    +              Set this bit to inverse the level value of uart dsr signal.
    +              21
    +              1
    +              read-write
    +            
    +            
    +              TXD_INV
    +              Set this bit to inverse the level value of uart txd signal.
    +              22
    +              1
    +              read-write
    +            
    +            
    +              RTS_INV
    +              Set this bit to inverse the level value of uart rts signal.
    +              23
    +              1
    +              read-write
    +            
    +            
    +              DTR_INV
    +              Set this bit to inverse the level value of uart dtr signal.
    +              24
    +              1
    +              read-write
    +            
    +            
    +              CLK_EN
    +              1'h1: Force clock on for register. 1'h0: Support clock only when application writes registers.
    +              25
    +              1
    +              read-write
    +            
    +            
    +              ERR_WR_MASK
    +              1'h1: Receiver stops storing data into FIFO when data is wrong. 1'h0: Receiver stores the data even if the  received data is wrong.
    +              26
    +              1
    +              read-write
    +            
    +            
    +              AUTOBAUD_EN
    +              This is the enable bit for detecting baudrate.
    +              27
    +              1
    +              read-write
    +            
    +            
    +              MEM_CLK_EN
    +              UART memory clock gate enable signal.
    +              28
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CONF1
    +          Configuration register 1
    +          0x24
    +          0x20
    +          0x0000C060
    +          
    +            
    +              RXFIFO_FULL_THRHD
    +              It will produce rxfifo_full_int interrupt when receiver receives more data than this register value.
    +              0
    +              9
    +              read-write
    +            
    +            
    +              TXFIFO_EMPTY_THRHD
    +              It will produce txfifo_empty_int interrupt when the data amount in Tx-FIFO is less than this register value.
    +              9
    +              9
    +              read-write
    +            
    +            
    +              DIS_RX_DAT_OVF
    +              Disable UART Rx data overflow detect.
    +              18
    +              1
    +              read-write
    +            
    +            
    +              RX_TOUT_FLOW_DIS
    +              Set this bit to stop accumulating idle_cnt when hardware flow control works.
    +              19
    +              1
    +              read-write
    +            
    +            
    +              RX_FLOW_EN
    +              This is the flow enable bit for UART receiver.
    +              20
    +              1
    +              read-write
    +            
    +            
    +              RX_TOUT_EN
    +              This is the enble bit for uart receiver's timeout function.
    +              21
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          LOWPULSE
    +          Autobaud minimum low pulse duration register
    +          0x28
    +          0x20
    +          0x00000FFF
    +          
    +            
    +              MIN_CNT
    +              This register stores the value of the minimum duration time of the low level pulse. It is used in baud rate-detect process.
    +              0
    +              12
    +              read-only
    +            
    +          
    +        
    +        
    +          HIGHPULSE
    +          Autobaud minimum high pulse duration register
    +          0x2C
    +          0x20
    +          0x00000FFF
    +          
    +            
    +              MIN_CNT
    +              This register stores  the value of the maxinum duration time for the high level pulse. It is used in baud rate-detect process.
    +              0
    +              12
    +              read-only
    +            
    +          
    +        
    +        
    +          RXD_CNT
    +          Autobaud edge change count register
    +          0x30
    +          0x20
    +          
    +            
    +              RXD_EDGE_CNT
    +              This register stores the count of rxd edge change. It is used in baud rate-detect process.
    +              0
    +              10
    +              read-only
    +            
    +          
    +        
    +        
    +          FLOW_CONF
    +          Software flow-control configuration
    +          0x34
    +          0x20
    +          
    +            
    +              SW_FLOW_CON_EN
    +              Set this bit to enable software flow control. It is used with register sw_xon or sw_xoff.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              XONOFF_DEL
    +              Set this bit to remove flow control char from the received data.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              FORCE_XON
    +              Set this bit to enable the transmitter to go on sending data.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              FORCE_XOFF
    +              Set this bit to stop the  transmitter from sending data.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              SEND_XON
    +              Set this bit to send Xon char. It is cleared by hardware automatically.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              SEND_XOFF
    +              Set this bit to send Xoff char. It is cleared by hardware automatically.
    +              5
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          SLEEP_CONF
    +          Sleep-mode configuration
    +          0x38
    +          0x20
    +          0x000000F0
    +          
    +            
    +              ACTIVE_THRESHOLD
    +              The uart is activated from light sleeping mode when the input rxd edge changes more times than this register value.
    +              0
    +              10
    +              read-write
    +            
    +          
    +        
    +        
    +          SWFC_CONF0
    +          Software flow-control character configuration
    +          0x3C
    +          0x20
    +          0x000026E0
    +          
    +            
    +              XOFF_THRESHOLD
    +              When the data amount in Rx-FIFO is more than this register value with uart_sw_flow_con_en set to 1, it will send a Xoff char.
    +              0
    +              9
    +              read-write
    +            
    +            
    +              XOFF_CHAR
    +              This register stores the Xoff flow control char.
    +              9
    +              8
    +              read-write
    +            
    +          
    +        
    +        
    +          SWFC_CONF1
    +          Software flow-control character configuration
    +          0x40
    +          0x20
    +          0x00002200
    +          
    +            
    +              XON_THRESHOLD
    +              When the data amount in Rx-FIFO is less than this register value with uart_sw_flow_con_en set to 1, it will send a Xon char.
    +              0
    +              9
    +              read-write
    +            
    +            
    +              XON_CHAR
    +              This register stores the Xon flow control char.
    +              9
    +              8
    +              read-write
    +            
    +          
    +        
    +        
    +          TXBRK_CONF
    +          Tx Break character configuration
    +          0x44
    +          0x20
    +          0x0000000A
    +          
    +            
    +              TX_BRK_NUM
    +              This register is used to configure the number of 0 to be sent after the process of sending data is done. It is active when txd_brk is set to 1.
    +              0
    +              8
    +              read-write
    +            
    +          
    +        
    +        
    +          IDLE_CONF
    +          Frame-end idle configuration
    +          0x48
    +          0x20
    +          0x00040100
    +          
    +            
    +              RX_IDLE_THRHD
    +              It will produce frame end signal when receiver takes more time to receive one byte data than this register value.
    +              0
    +              10
    +              read-write
    +            
    +            
    +              TX_IDLE_NUM
    +              This register is used to configure the duration time between transfers.
    +              10
    +              10
    +              read-write
    +            
    +          
    +        
    +        
    +          RS485_CONF
    +          RS485 mode configuration
    +          0x4C
    +          0x20
    +          
    +            
    +              RS485_EN
    +              Set this bit to choose the rs485 mode.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              DL0_EN
    +              Set this bit to delay the stop bit by 1 bit.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              DL1_EN
    +              Set this bit to delay the stop bit by 1 bit.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              RS485TX_RX_EN
    +              Set this bit to enable receiver could receive data when the transmitter is transmitting data in rs485 mode.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              RS485RXBY_TX_EN
    +              1'h1: enable rs485 transmitter to send data when rs485 receiver line is busy.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              RS485_RX_DLY_NUM
    +              This register is used to delay the receiver's internal data signal.
    +              5
    +              1
    +              read-write
    +            
    +            
    +              RS485_TX_DLY_NUM
    +              This register is used to delay the transmitter's internal data signal.
    +              6
    +              4
    +              read-write
    +            
    +          
    +        
    +        
    +          AT_CMD_PRECNT
    +          Pre-sequence timing configuration
    +          0x50
    +          0x20
    +          0x00000901
    +          
    +            
    +              PRE_IDLE_NUM
    +              This register is used to configure the idle duration time before the first at_cmd is received by receiver.
    +              0
    +              16
    +              read-write
    +            
    +          
    +        
    +        
    +          AT_CMD_POSTCNT
    +          Post-sequence timing configuration
    +          0x54
    +          0x20
    +          0x00000901
    +          
    +            
    +              POST_IDLE_NUM
    +              This register is used to configure the duration time between the last at_cmd and the next data.
    +              0
    +              16
    +              read-write
    +            
    +          
    +        
    +        
    +          AT_CMD_GAPTOUT
    +          Timeout configuration
    +          0x58
    +          0x20
    +          0x0000000B
    +          
    +            
    +              RX_GAP_TOUT
    +              This register is used to configure the duration time between the at_cmd chars.
    +              0
    +              16
    +              read-write
    +            
    +          
    +        
    +        
    +          AT_CMD_CHAR
    +          AT escape sequence detection configuration
    +          0x5C
    +          0x20
    +          0x0000032B
    +          
    +            
    +              AT_CMD_CHAR
    +              This register is used to configure the content of at_cmd char.
    +              0
    +              8
    +              read-write
    +            
    +            
    +              CHAR_NUM
    +              This register is used to configure the num of continuous at_cmd chars received by receiver.
    +              8
    +              8
    +              read-write
    +            
    +          
    +        
    +        
    +          MEM_CONF
    +          UART threshold and allocation configuration
    +          0x60
    +          0x20
    +          0x000A0012
    +          
    +            
    +              RX_SIZE
    +              This register is used to configure the amount of mem allocated for receive-FIFO. The default number is 128 bytes.
    +              1
    +              3
    +              read-write
    +            
    +            
    +              TX_SIZE
    +              This register is used to configure the amount of mem allocated for transmit-FIFO. The default number is 128 bytes.
    +              4
    +              3
    +              read-write
    +            
    +            
    +              RX_FLOW_THRHD
    +              This register is used to configure the maximum amount of data that can be received  when hardware flow control works.
    +              7
    +              9
    +              read-write
    +            
    +            
    +              RX_TOUT_THRHD
    +              This register is used to configure the threshold time that receiver takes to receive one byte. The rxfifo_tout_int interrupt will be trigger when the receiver takes more time to receive one byte with rx_tout_en set to 1.
    +              16
    +              10
    +              read-write
    +            
    +            
    +              MEM_FORCE_PD
    +              Set this bit to force power down UART memory.
    +              26
    +              1
    +              read-write
    +            
    +            
    +              MEM_FORCE_PU
    +              Set this bit to force power up UART memory.
    +              27
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          MEM_TX_STATUS
    +          Tx-FIFO write and read offset address.
    +          0x64
    +          0x20
    +          
    +            
    +              APB_TX_WADDR
    +              This register stores the offset address in Tx-FIFO when software writes Tx-FIFO via APB.
    +              0
    +              10
    +              read-only
    +            
    +            
    +              TX_RADDR
    +              This register stores the offset address in Tx-FIFO when Tx-FSM reads data via Tx-FIFO_Ctrl.
    +              11
    +              10
    +              read-only
    +            
    +          
    +        
    +        
    +          MEM_RX_STATUS
    +          Rx-FIFO write and read offset address.
    +          0x68
    +          0x20
    +          0x00080100
    +          
    +            
    +              APB_RX_RADDR
    +              This register stores the offset address in RX-FIFO when software reads data from Rx-FIFO via APB. UART0 is 10'h100. UART1 is 10'h180.
    +              0
    +              10
    +              read-only
    +            
    +            
    +              RX_WADDR
    +              This register stores the offset address in Rx-FIFO when Rx-FIFO_Ctrl writes Rx-FIFO. UART0 is 10'h100. UART1 is 10'h180.
    +              11
    +              10
    +              read-only
    +            
    +          
    +        
    +        
    +          FSM_STATUS
    +          UART transmit and receive status.
    +          0x6C
    +          0x20
    +          
    +            
    +              ST_URX_OUT
    +              This is the status register of receiver.
    +              0
    +              4
    +              read-only
    +            
    +            
    +              ST_UTX_OUT
    +              This is the status register of transmitter.
    +              4
    +              4
    +              read-only
    +            
    +          
    +        
    +        
    +          POSPULSE
    +          Autobaud high pulse register
    +          0x70
    +          0x20
    +          0x00000FFF
    +          
    +            
    +              POSEDGE_MIN_CNT
    +              This register stores the minimal input clock count between two positive edges. It is used in boudrate-detect process.
    +              0
    +              12
    +              read-only
    +            
    +          
    +        
    +        
    +          NEGPULSE
    +          Autobaud low pulse register
    +          0x74
    +          0x20
    +          0x00000FFF
    +          
    +            
    +              NEGEDGE_MIN_CNT
    +              This register stores the minimal input clock count between two negative edges. It is used in boudrate-detect process.
    +              0
    +              12
    +              read-only
    +            
    +          
    +        
    +        
    +          CLK_CONF
    +          UART core clock configuration
    +          0x78
    +          0x20
    +          0x03701000
    +          
    +            
    +              SCLK_DIV_B
    +              The  denominator of the frequency divider factor.
    +              0
    +              6
    +              read-write
    +            
    +            
    +              SCLK_DIV_A
    +              The numerator of the frequency divider factor.
    +              6
    +              6
    +              read-write
    +            
    +            
    +              SCLK_DIV_NUM
    +              The integral part of the frequency divider factor.
    +              12
    +              8
    +              read-write
    +            
    +            
    +              SCLK_SEL
    +              UART clock source select. 1: 80Mhz, 2: 8Mhz, 3: XTAL.
    +              20
    +              2
    +              read-write
    +            
    +            
    +              SCLK_EN
    +              Set this bit to enable UART Tx/Rx clock.
    +              22
    +              1
    +              read-write
    +            
    +            
    +              RST_CORE
    +              Write 1 then write 0 to this bit, reset UART Tx/Rx.
    +              23
    +              1
    +              read-write
    +            
    +            
    +              TX_SCLK_EN
    +              Set this bit to enable UART Tx clock.
    +              24
    +              1
    +              read-write
    +            
    +            
    +              RX_SCLK_EN
    +              Set this bit to enable UART Rx clock.
    +              25
    +              1
    +              read-write
    +            
    +            
    +              TX_RST_CORE
    +              Write 1 then write 0 to this bit, reset UART Tx.
    +              26
    +              1
    +              read-write
    +            
    +            
    +              RX_RST_CORE
    +              Write 1 then write 0 to this bit, reset UART Rx.
    +              27
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DATE
    +          UART Version register
    +          0x7C
    +          0x20
    +          0x02008270
    +          
    +            
    +              DATE
    +              This is the version register.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          ID
    +          UART ID register
    +          0x80
    +          0x20
    +          0x40000500
    +          
    +            
    +              ID
    +              This register is used to configure the uart_id.
    +              0
    +              30
    +              read-write
    +            
    +            
    +              HIGH_SPEED
    +              This bit used to select synchronize mode. 1: Registers are auto synchronized into UART Core clock and UART core should be keep the same with APB clock. 0: After configure registers, software needs to write 1 to UART_REG_UPDATE to synchronize registers.
    +              30
    +              1
    +              read-write
    +            
    +            
    +              REG_UPDATE
    +              Software write 1 would synchronize registers into UART Core clock domain and would be cleared by hardware after synchronization is done.
    +              31
    +              1
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      UART1
    +      UART (Universal Asynchronous Receiver-Transmitter) Controller
    +      0x60010000
    +      
    +        UART1
    +        22
    +      
    +    
    +    
    +      UHCI0
    +      Universal Host Controller Interface
    +      UHCI
    +      0x60014000
    +      
    +        0x0
    +        0x84
    +        registers
    +      
    +      
    +        UHCI0
    +        15
    +      
    +      
    +        
    +          CONF0
    +          a
    +          0x0
    +          0x20
    +          0x000006E0
    +          
    +            
    +              TX_RST
    +              Write 1, then write 0 to this bit to reset decode state machine.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              RX_RST
    +              Write 1, then write 0 to this bit to reset encode state machine.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              UART0_CE
    +              Set this bit to link up HCI and UART0.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              UART1_CE
    +              Set this bit to link up HCI and UART1.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              SEPER_EN
    +              Set this bit to separate the data frame using a special char.
    +              5
    +              1
    +              read-write
    +            
    +            
    +              HEAD_EN
    +              Set this bit to encode the data packet with a formatting header.
    +              6
    +              1
    +              read-write
    +            
    +            
    +              CRC_REC_EN
    +              Set this bit to enable UHCI to receive the 16 bit CRC.
    +              7
    +              1
    +              read-write
    +            
    +            
    +              UART_IDLE_EOF_EN
    +              If this bit is set to 1, UHCI will end the payload receiving process when UART has been in idle state.
    +              8
    +              1
    +              read-write
    +            
    +            
    +              LEN_EOF_EN
    +              If this bit is set to 1, UHCI decoder receiving payload data is end when the receiving byte count has reached the specified value. The value is payload length indicated by UHCI packet header when UHCI_HEAD_EN is 1 or the value is configuration value when UHCI_HEAD_EN is 0. If this bit is set to 0, UHCI decoder receiving payload data is end when 0xc0 is received.
    +              9
    +              1
    +              read-write
    +            
    +            
    +              ENCODE_CRC_EN
    +              Set this bit to enable data integrity checking by appending a 16 bit CCITT-CRC to end of the payload.
    +              10
    +              1
    +              read-write
    +            
    +            
    +              CLK_EN
    +              1'b1: Force clock on for register. 1'b0: Support clock only when application writes registers.
    +              11
    +              1
    +              read-write
    +            
    +            
    +              UART_RX_BRK_EOF_EN
    +              If this bit is set to 1, UHCI will end payload receive process when NULL frame is received by UART.
    +              12
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          INT_RAW
    +          a
    +          0x4
    +          0x20
    +          
    +            
    +              RX_START_INT_RAW
    +              a
    +              0
    +              1
    +              read-only
    +            
    +            
    +              TX_START_INT_RAW
    +              a
    +              1
    +              1
    +              read-only
    +            
    +            
    +              RX_HUNG_INT_RAW
    +              a
    +              2
    +              1
    +              read-only
    +            
    +            
    +              TX_HUNG_INT_RAW
    +              a
    +              3
    +              1
    +              read-only
    +            
    +            
    +              SEND_S_REG_Q_INT_RAW
    +              a
    +              4
    +              1
    +              read-only
    +            
    +            
    +              SEND_A_REG_Q_INT_RAW
    +              a
    +              5
    +              1
    +              read-only
    +            
    +            
    +              OUT_EOF_INT_RAW
    +              This is the interrupt raw bit. Triggered when there are some errors in EOF in the
    +              6
    +              1
    +              read-only
    +            
    +            
    +              APP_CTRL0_INT_RAW
    +              Soft control int raw bit.
    +              7
    +              1
    +              read-write
    +            
    +            
    +              APP_CTRL1_INT_RAW
    +              Soft control int raw bit.
    +              8
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          INT_ST
    +          a
    +          0x8
    +          0x20
    +          
    +            
    +              RX_START_INT_ST
    +              a
    +              0
    +              1
    +              read-only
    +            
    +            
    +              TX_START_INT_ST
    +              a
    +              1
    +              1
    +              read-only
    +            
    +            
    +              RX_HUNG_INT_ST
    +              a
    +              2
    +              1
    +              read-only
    +            
    +            
    +              TX_HUNG_INT_ST
    +              a
    +              3
    +              1
    +              read-only
    +            
    +            
    +              SEND_S_REG_Q_INT_ST
    +              a
    +              4
    +              1
    +              read-only
    +            
    +            
    +              SEND_A_REG_Q_INT_ST
    +              a
    +              5
    +              1
    +              read-only
    +            
    +            
    +              OUTLINK_EOF_ERR_INT_ST
    +              a
    +              6
    +              1
    +              read-only
    +            
    +            
    +              APP_CTRL0_INT_ST
    +              a
    +              7
    +              1
    +              read-only
    +            
    +            
    +              APP_CTRL1_INT_ST
    +              a
    +              8
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_ENA
    +          a
    +          0xC
    +          0x20
    +          
    +            
    +              RX_START_INT_ENA
    +              a
    +              0
    +              1
    +              read-write
    +            
    +            
    +              TX_START_INT_ENA
    +              a
    +              1
    +              1
    +              read-write
    +            
    +            
    +              RX_HUNG_INT_ENA
    +              a
    +              2
    +              1
    +              read-write
    +            
    +            
    +              TX_HUNG_INT_ENA
    +              a
    +              3
    +              1
    +              read-write
    +            
    +            
    +              SEND_S_REG_Q_INT_ENA
    +              a
    +              4
    +              1
    +              read-write
    +            
    +            
    +              SEND_A_REG_Q_INT_ENA
    +              a
    +              5
    +              1
    +              read-write
    +            
    +            
    +              OUTLINK_EOF_ERR_INT_ENA
    +              a
    +              6
    +              1
    +              read-write
    +            
    +            
    +              APP_CTRL0_INT_ENA
    +              a
    +              7
    +              1
    +              read-write
    +            
    +            
    +              APP_CTRL1_INT_ENA
    +              a
    +              8
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          INT_CLR
    +          a
    +          0x10
    +          0x20
    +          
    +            
    +              RX_START_INT_CLR
    +              a
    +              0
    +              1
    +              write-only
    +            
    +            
    +              TX_START_INT_CLR
    +              a
    +              1
    +              1
    +              write-only
    +            
    +            
    +              RX_HUNG_INT_CLR
    +              a
    +              2
    +              1
    +              write-only
    +            
    +            
    +              TX_HUNG_INT_CLR
    +              a
    +              3
    +              1
    +              write-only
    +            
    +            
    +              SEND_S_REG_Q_INT_CLR
    +              a
    +              4
    +              1
    +              write-only
    +            
    +            
    +              SEND_A_REG_Q_INT_CLR
    +              a
    +              5
    +              1
    +              write-only
    +            
    +            
    +              OUTLINK_EOF_ERR_INT_CLR
    +              a
    +              6
    +              1
    +              write-only
    +            
    +            
    +              APP_CTRL0_INT_CLR
    +              a
    +              7
    +              1
    +              write-only
    +            
    +            
    +              APP_CTRL1_INT_CLR
    +              a
    +              8
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          CONF1
    +          a
    +          0x14
    +          0x20
    +          0x00000033
    +          
    +            
    +              CHECK_SUM_EN
    +              a
    +              0
    +              1
    +              read-write
    +            
    +            
    +              CHECK_SEQ_EN
    +              a
    +              1
    +              1
    +              read-write
    +            
    +            
    +              CRC_DISABLE
    +              a
    +              2
    +              1
    +              read-write
    +            
    +            
    +              SAVE_HEAD
    +              a
    +              3
    +              1
    +              read-write
    +            
    +            
    +              TX_CHECK_SUM_RE
    +              a
    +              4
    +              1
    +              read-write
    +            
    +            
    +              TX_ACK_NUM_RE
    +              a
    +              5
    +              1
    +              read-write
    +            
    +            
    +              WAIT_SW_START
    +              a
    +              7
    +              1
    +              read-write
    +            
    +            
    +              SW_START
    +              a
    +              8
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          STATE0
    +          a
    +          0x18
    +          0x20
    +          
    +            
    +              RX_ERR_CAUSE
    +              a
    +              0
    +              3
    +              read-only
    +            
    +            
    +              DECODE_STATE
    +              a
    +              3
    +              3
    +              read-only
    +            
    +          
    +        
    +        
    +          STATE1
    +          a
    +          0x1C
    +          0x20
    +          
    +            
    +              ENCODE_STATE
    +              a
    +              0
    +              3
    +              read-only
    +            
    +          
    +        
    +        
    +          ESCAPE_CONF
    +          a
    +          0x20
    +          0x20
    +          0x00000033
    +          
    +            
    +              TX_C0_ESC_EN
    +              a
    +              0
    +              1
    +              read-write
    +            
    +            
    +              TX_DB_ESC_EN
    +              a
    +              1
    +              1
    +              read-write
    +            
    +            
    +              TX_11_ESC_EN
    +              a
    +              2
    +              1
    +              read-write
    +            
    +            
    +              TX_13_ESC_EN
    +              a
    +              3
    +              1
    +              read-write
    +            
    +            
    +              RX_C0_ESC_EN
    +              a
    +              4
    +              1
    +              read-write
    +            
    +            
    +              RX_DB_ESC_EN
    +              a
    +              5
    +              1
    +              read-write
    +            
    +            
    +              RX_11_ESC_EN
    +              a
    +              6
    +              1
    +              read-write
    +            
    +            
    +              RX_13_ESC_EN
    +              a
    +              7
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          HUNG_CONF
    +          a
    +          0x24
    +          0x20
    +          0x00810810
    +          
    +            
    +              TXFIFO_TIMEOUT
    +              a
    +              0
    +              8
    +              read-write
    +            
    +            
    +              TXFIFO_TIMEOUT_SHIFT
    +              a
    +              8
    +              3
    +              read-write
    +            
    +            
    +              TXFIFO_TIMEOUT_ENA
    +              a
    +              11
    +              1
    +              read-write
    +            
    +            
    +              RXFIFO_TIMEOUT
    +              a
    +              12
    +              8
    +              read-write
    +            
    +            
    +              RXFIFO_TIMEOUT_SHIFT
    +              a
    +              20
    +              3
    +              read-write
    +            
    +            
    +              RXFIFO_TIMEOUT_ENA
    +              a
    +              23
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          ACK_NUM
    +          a
    +          0x28
    +          0x20
    +          0x00000008
    +          
    +            
    +              ACK_NUM
    +              a
    +              0
    +              3
    +              read-write
    +            
    +            
    +              LOAD
    +              a
    +              3
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          RX_HEAD
    +          a
    +          0x2C
    +          0x20
    +          
    +            
    +              RX_HEAD
    +              a
    +              0
    +              32
    +              read-only
    +            
    +          
    +        
    +        
    +          QUICK_SENT
    +          a
    +          0x30
    +          0x20
    +          
    +            
    +              SINGLE_SEND_NUM
    +              a
    +              0
    +              3
    +              read-write
    +            
    +            
    +              SINGLE_SEND_EN
    +              a
    +              3
    +              1
    +              read-write
    +            
    +            
    +              ALWAYS_SEND_NUM
    +              a
    +              4
    +              3
    +              read-write
    +            
    +            
    +              ALWAYS_SEND_EN
    +              a
    +              7
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          REG_Q0_WORD0
    +          a
    +          0x34
    +          0x20
    +          
    +            
    +              SEND_Q0_WORD0
    +              a
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          REG_Q0_WORD1
    +          a
    +          0x38
    +          0x20
    +          
    +            
    +              SEND_Q0_WORD1
    +              a
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          REG_Q1_WORD0
    +          a
    +          0x3C
    +          0x20
    +          
    +            
    +              SEND_Q1_WORD0
    +              a
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          REG_Q1_WORD1
    +          a
    +          0x40
    +          0x20
    +          
    +            
    +              SEND_Q1_WORD1
    +              a
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          REG_Q2_WORD0
    +          a
    +          0x44
    +          0x20
    +          
    +            
    +              SEND_Q2_WORD0
    +              a
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          REG_Q2_WORD1
    +          a
    +          0x48
    +          0x20
    +          
    +            
    +              SEND_Q2_WORD1
    +              a
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          REG_Q3_WORD0
    +          a
    +          0x4C
    +          0x20
    +          
    +            
    +              SEND_Q3_WORD0
    +              a
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          REG_Q3_WORD1
    +          a
    +          0x50
    +          0x20
    +          
    +            
    +              SEND_Q3_WORD1
    +              a
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          REG_Q4_WORD0
    +          a
    +          0x54
    +          0x20
    +          
    +            
    +              SEND_Q4_WORD0
    +              a
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          REG_Q4_WORD1
    +          a
    +          0x58
    +          0x20
    +          
    +            
    +              SEND_Q4_WORD1
    +              a
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          REG_Q5_WORD0
    +          a
    +          0x5C
    +          0x20
    +          
    +            
    +              SEND_Q5_WORD0
    +              a
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          REG_Q5_WORD1
    +          a
    +          0x60
    +          0x20
    +          
    +            
    +              SEND_Q5_WORD1
    +              a
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          REG_Q6_WORD0
    +          a
    +          0x64
    +          0x20
    +          
    +            
    +              SEND_Q6_WORD0
    +              a
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          REG_Q6_WORD1
    +          a
    +          0x68
    +          0x20
    +          
    +            
    +              SEND_Q6_WORD1
    +              a
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +        
    +          ESC_CONF0
    +          a
    +          0x6C
    +          0x20
    +          0x00DCDBC0
    +          
    +            
    +              SEPER_CHAR
    +              a
    +              0
    +              8
    +              read-write
    +            
    +            
    +              SEPER_ESC_CHAR0
    +              a
    +              8
    +              8
    +              read-write
    +            
    +            
    +              SEPER_ESC_CHAR1
    +              a
    +              16
    +              8
    +              read-write
    +            
    +          
    +        
    +        
    +          ESC_CONF1
    +          a
    +          0x70
    +          0x20
    +          0x00DDDBDB
    +          
    +            
    +              ESC_SEQ0
    +              a
    +              0
    +              8
    +              read-write
    +            
    +            
    +              ESC_SEQ0_CHAR0
    +              a
    +              8
    +              8
    +              read-write
    +            
    +            
    +              ESC_SEQ0_CHAR1
    +              a
    +              16
    +              8
    +              read-write
    +            
    +          
    +        
    +        
    +          ESC_CONF2
    +          a
    +          0x74
    +          0x20
    +          0x00DEDB11
    +          
    +            
    +              ESC_SEQ1
    +              a
    +              0
    +              8
    +              read-write
    +            
    +            
    +              ESC_SEQ1_CHAR0
    +              a
    +              8
    +              8
    +              read-write
    +            
    +            
    +              ESC_SEQ1_CHAR1
    +              a
    +              16
    +              8
    +              read-write
    +            
    +          
    +        
    +        
    +          ESC_CONF3
    +          a
    +          0x78
    +          0x20
    +          0x00DFDB13
    +          
    +            
    +              ESC_SEQ2
    +              a
    +              0
    +              8
    +              read-write
    +            
    +            
    +              ESC_SEQ2_CHAR0
    +              a
    +              8
    +              8
    +              read-write
    +            
    +            
    +              ESC_SEQ2_CHAR1
    +              a
    +              16
    +              8
    +              read-write
    +            
    +          
    +        
    +        
    +          PKT_THRES
    +          a
    +          0x7C
    +          0x20
    +          0x00000080
    +          
    +            
    +              PKT_THRS
    +              a
    +              0
    +              13
    +              read-write
    +            
    +          
    +        
    +        
    +          DATE
    +          a
    +          0x80
    +          0x20
    +          0x02007170
    +          
    +            
    +              DATE
    +              a
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      UHCI1
    +      Universal Host Controller Interface
    +      0x6000C000
    +    
    +    
    +      USB_DEVICE
    +      Full-speed USB Serial/JTAG Controller
    +      USB_DEVICE
    +      0x60043000
    +      
    +        0x0
    +        0x50
    +        registers
    +      
    +      
    +        USB_SERIAL_JTAG
    +        26
    +      
    +      
    +        
    +          EP1
    +          USB_DEVICE_EP1_REG.
    +          0x0
    +          0x20
    +          
    +            
    +              RDWR_BYTE
    +              Write and read byte data to/from UART Tx/Rx FIFO through this field. When USB_DEVICE_SERIAL_IN_EMPTY_INT is set, then user can write data (up to 64 bytes) into UART Tx FIFO. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is set, user can check USB_DEVICE_OUT_EP1_WR_ADDR USB_DEVICE_OUT_EP0_RD_ADDR to know how many data is received, then read data from UART Rx FIFO.
    +              0
    +              8
    +              read-write
    +            
    +          
    +        
    +        
    +          EP1_CONF
    +          USB_DEVICE_EP1_CONF_REG.
    +          0x4
    +          0x20
    +          0x00000002
    +          
    +            
    +              WR_DONE
    +              Set this bit to indicate writing byte data to UART Tx FIFO is done.
    +              0
    +              1
    +              write-only
    +            
    +            
    +              SERIAL_IN_EP_DATA_FREE
    +              1'b1: Indicate UART Tx FIFO is not full and can write data into in. After writing USB_DEVICE_WR_DONE, this bit would be 0 until data in UART Tx FIFO is read by USB Host.
    +              1
    +              1
    +              read-only
    +            
    +            
    +              SERIAL_OUT_EP_DATA_AVAIL
    +              1'b1: Indicate there is data in UART Rx FIFO.
    +              2
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_RAW
    +          USB_DEVICE_INT_RAW_REG.
    +          0x8
    +          0x20
    +          0x00000008
    +          
    +            
    +              JTAG_IN_FLUSH_INT_RAW
    +              The raw interrupt bit turns to high level when flush cmd is received for IN endpoint 2 of JTAG.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              SOF_INT_RAW
    +              The raw interrupt bit turns to high level when SOF frame is received.
    +              1
    +              1
    +              read-only
    +            
    +            
    +              SERIAL_OUT_RECV_PKT_INT_RAW
    +              The raw interrupt bit turns to high level when Serial Port OUT Endpoint received one packet.
    +              2
    +              1
    +              read-only
    +            
    +            
    +              SERIAL_IN_EMPTY_INT_RAW
    +              The raw interrupt bit turns to high level when Serial Port IN Endpoint is empty.
    +              3
    +              1
    +              read-only
    +            
    +            
    +              PID_ERR_INT_RAW
    +              The raw interrupt bit turns to high level when pid error is detected.
    +              4
    +              1
    +              read-only
    +            
    +            
    +              CRC5_ERR_INT_RAW
    +              The raw interrupt bit turns to high level when CRC5 error is detected.
    +              5
    +              1
    +              read-only
    +            
    +            
    +              CRC16_ERR_INT_RAW
    +              The raw interrupt bit turns to high level when CRC16 error is detected.
    +              6
    +              1
    +              read-only
    +            
    +            
    +              STUFF_ERR_INT_RAW
    +              The raw interrupt bit turns to high level when stuff error is detected.
    +              7
    +              1
    +              read-only
    +            
    +            
    +              IN_TOKEN_REC_IN_EP1_INT_RAW
    +              The raw interrupt bit turns to high level when IN token for IN endpoint 1 is received.
    +              8
    +              1
    +              read-only
    +            
    +            
    +              USB_BUS_RESET_INT_RAW
    +              The raw interrupt bit turns to high level when usb bus reset is detected.
    +              9
    +              1
    +              read-only
    +            
    +            
    +              OUT_EP1_ZERO_PAYLOAD_INT_RAW
    +              The raw interrupt bit turns to high level when OUT endpoint 1 received packet with zero palyload.
    +              10
    +              1
    +              read-only
    +            
    +            
    +              OUT_EP2_ZERO_PAYLOAD_INT_RAW
    +              The raw interrupt bit turns to high level when OUT endpoint 2 received packet with zero palyload.
    +              11
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_ST
    +          USB_DEVICE_INT_ST_REG.
    +          0xC
    +          0x20
    +          
    +            
    +              JTAG_IN_FLUSH_INT_ST
    +              The raw interrupt status bit for the USB_DEVICE_JTAG_IN_FLUSH_INT interrupt.
    +              0
    +              1
    +              read-only
    +            
    +            
    +              SOF_INT_ST
    +              The raw interrupt status bit for the USB_DEVICE_SOF_INT interrupt.
    +              1
    +              1
    +              read-only
    +            
    +            
    +              SERIAL_OUT_RECV_PKT_INT_ST
    +              The raw interrupt status bit for the USB_DEVICE_SERIAL_OUT_RECV_PKT_INT interrupt.
    +              2
    +              1
    +              read-only
    +            
    +            
    +              SERIAL_IN_EMPTY_INT_ST
    +              The raw interrupt status bit for the USB_DEVICE_SERIAL_IN_EMPTY_INT interrupt.
    +              3
    +              1
    +              read-only
    +            
    +            
    +              PID_ERR_INT_ST
    +              The raw interrupt status bit for the USB_DEVICE_PID_ERR_INT interrupt.
    +              4
    +              1
    +              read-only
    +            
    +            
    +              CRC5_ERR_INT_ST
    +              The raw interrupt status bit for the USB_DEVICE_CRC5_ERR_INT interrupt.
    +              5
    +              1
    +              read-only
    +            
    +            
    +              CRC16_ERR_INT_ST
    +              The raw interrupt status bit for the USB_DEVICE_CRC16_ERR_INT interrupt.
    +              6
    +              1
    +              read-only
    +            
    +            
    +              STUFF_ERR_INT_ST
    +              The raw interrupt status bit for the USB_DEVICE_STUFF_ERR_INT interrupt.
    +              7
    +              1
    +              read-only
    +            
    +            
    +              IN_TOKEN_REC_IN_EP1_INT_ST
    +              The raw interrupt status bit for the USB_DEVICE_IN_TOKEN_REC_IN_EP1_INT interrupt.
    +              8
    +              1
    +              read-only
    +            
    +            
    +              USB_BUS_RESET_INT_ST
    +              The raw interrupt status bit for the USB_DEVICE_USB_BUS_RESET_INT interrupt.
    +              9
    +              1
    +              read-only
    +            
    +            
    +              OUT_EP1_ZERO_PAYLOAD_INT_ST
    +              The raw interrupt status bit for the USB_DEVICE_OUT_EP1_ZERO_PAYLOAD_INT interrupt.
    +              10
    +              1
    +              read-only
    +            
    +            
    +              OUT_EP2_ZERO_PAYLOAD_INT_ST
    +              The raw interrupt status bit for the USB_DEVICE_OUT_EP2_ZERO_PAYLOAD_INT interrupt.
    +              11
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          INT_ENA
    +          USB_DEVICE_INT_ENA_REG.
    +          0x10
    +          0x20
    +          
    +            
    +              JTAG_IN_FLUSH_INT_ENA
    +              The interrupt enable bit for the USB_DEVICE_JTAG_IN_FLUSH_INT interrupt.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              SOF_INT_ENA
    +              The interrupt enable bit for the USB_DEVICE_SOF_INT interrupt.
    +              1
    +              1
    +              read-write
    +            
    +            
    +              SERIAL_OUT_RECV_PKT_INT_ENA
    +              The interrupt enable bit for the USB_DEVICE_SERIAL_OUT_RECV_PKT_INT interrupt.
    +              2
    +              1
    +              read-write
    +            
    +            
    +              SERIAL_IN_EMPTY_INT_ENA
    +              The interrupt enable bit for the USB_DEVICE_SERIAL_IN_EMPTY_INT interrupt.
    +              3
    +              1
    +              read-write
    +            
    +            
    +              PID_ERR_INT_ENA
    +              The interrupt enable bit for the USB_DEVICE_PID_ERR_INT interrupt.
    +              4
    +              1
    +              read-write
    +            
    +            
    +              CRC5_ERR_INT_ENA
    +              The interrupt enable bit for the USB_DEVICE_CRC5_ERR_INT interrupt.
    +              5
    +              1
    +              read-write
    +            
    +            
    +              CRC16_ERR_INT_ENA
    +              The interrupt enable bit for the USB_DEVICE_CRC16_ERR_INT interrupt.
    +              6
    +              1
    +              read-write
    +            
    +            
    +              STUFF_ERR_INT_ENA
    +              The interrupt enable bit for the USB_DEVICE_STUFF_ERR_INT interrupt.
    +              7
    +              1
    +              read-write
    +            
    +            
    +              IN_TOKEN_REC_IN_EP1_INT_ENA
    +              The interrupt enable bit for the USB_DEVICE_IN_TOKEN_REC_IN_EP1_INT interrupt.
    +              8
    +              1
    +              read-write
    +            
    +            
    +              USB_BUS_RESET_INT_ENA
    +              The interrupt enable bit for the USB_DEVICE_USB_BUS_RESET_INT interrupt.
    +              9
    +              1
    +              read-write
    +            
    +            
    +              OUT_EP1_ZERO_PAYLOAD_INT_ENA
    +              The interrupt enable bit for the USB_DEVICE_OUT_EP1_ZERO_PAYLOAD_INT interrupt.
    +              10
    +              1
    +              read-write
    +            
    +            
    +              OUT_EP2_ZERO_PAYLOAD_INT_ENA
    +              The interrupt enable bit for the USB_DEVICE_OUT_EP2_ZERO_PAYLOAD_INT interrupt.
    +              11
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          INT_CLR
    +          USB_DEVICE_INT_CLR_REG.
    +          0x14
    +          0x20
    +          
    +            
    +              JTAG_IN_FLUSH_INT_CLR
    +              Set this bit to clear the USB_DEVICE_JTAG_IN_FLUSH_INT interrupt.
    +              0
    +              1
    +              write-only
    +            
    +            
    +              SOF_INT_CLR
    +              Set this bit to clear the USB_DEVICE_JTAG_SOF_INT interrupt.
    +              1
    +              1
    +              write-only
    +            
    +            
    +              SERIAL_OUT_RECV_PKT_INT_CLR
    +              Set this bit to clear the USB_DEVICE_SERIAL_OUT_RECV_PKT_INT interrupt.
    +              2
    +              1
    +              write-only
    +            
    +            
    +              SERIAL_IN_EMPTY_INT_CLR
    +              Set this bit to clear the USB_DEVICE_SERIAL_IN_EMPTY_INT interrupt.
    +              3
    +              1
    +              write-only
    +            
    +            
    +              PID_ERR_INT_CLR
    +              Set this bit to clear the USB_DEVICE_PID_ERR_INT interrupt.
    +              4
    +              1
    +              write-only
    +            
    +            
    +              CRC5_ERR_INT_CLR
    +              Set this bit to clear the USB_DEVICE_CRC5_ERR_INT interrupt.
    +              5
    +              1
    +              write-only
    +            
    +            
    +              CRC16_ERR_INT_CLR
    +              Set this bit to clear the USB_DEVICE_CRC16_ERR_INT interrupt.
    +              6
    +              1
    +              write-only
    +            
    +            
    +              STUFF_ERR_INT_CLR
    +              Set this bit to clear the USB_DEVICE_STUFF_ERR_INT interrupt.
    +              7
    +              1
    +              write-only
    +            
    +            
    +              IN_TOKEN_REC_IN_EP1_INT_CLR
    +              Set this bit to clear the USB_DEVICE_IN_TOKEN_IN_EP1_INT interrupt.
    +              8
    +              1
    +              write-only
    +            
    +            
    +              USB_BUS_RESET_INT_CLR
    +              Set this bit to clear the USB_DEVICE_USB_BUS_RESET_INT interrupt.
    +              9
    +              1
    +              write-only
    +            
    +            
    +              OUT_EP1_ZERO_PAYLOAD_INT_CLR
    +              Set this bit to clear the USB_DEVICE_OUT_EP1_ZERO_PAYLOAD_INT interrupt.
    +              10
    +              1
    +              write-only
    +            
    +            
    +              OUT_EP2_ZERO_PAYLOAD_INT_CLR
    +              Set this bit to clear the USB_DEVICE_OUT_EP2_ZERO_PAYLOAD_INT interrupt.
    +              11
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          CONF0
    +          USB_DEVICE_CONF0_REG.
    +          0x18
    +          0x20
    +          0x00004200
    +          
    +            
    +              PHY_SEL
    +              Select internal/external PHY
    +              0
    +              1
    +              read-write
    +            
    +            
    +              EXCHG_PINS_OVERRIDE
    +              Enable software control USB D+ D- exchange
    +              1
    +              1
    +              read-write
    +            
    +            
    +              EXCHG_PINS
    +              USB D+ D- exchange
    +              2
    +              1
    +              read-write
    +            
    +            
    +              VREFH
    +              Control single-end input high threshold,1.76V to 2V, step 80mV
    +              3
    +              2
    +              read-write
    +            
    +            
    +              VREFL
    +              Control single-end input low threshold,0.8V to 1.04V, step 80mV
    +              5
    +              2
    +              read-write
    +            
    +            
    +              VREF_OVERRIDE
    +              Enable software control input  threshold
    +              7
    +              1
    +              read-write
    +            
    +            
    +              PAD_PULL_OVERRIDE
    +              Enable software control USB D+ D- pullup pulldown
    +              8
    +              1
    +              read-write
    +            
    +            
    +              DP_PULLUP
    +              Control USB D+ pull up.
    +              9
    +              1
    +              read-write
    +            
    +            
    +              DP_PULLDOWN
    +              Control USB D+ pull down.
    +              10
    +              1
    +              read-write
    +            
    +            
    +              DM_PULLUP
    +              Control USB D- pull up.
    +              11
    +              1
    +              read-write
    +            
    +            
    +              DM_PULLDOWN
    +              Control USB D- pull down.
    +              12
    +              1
    +              read-write
    +            
    +            
    +              PULLUP_VALUE
    +              Control pull up value.
    +              13
    +              1
    +              read-write
    +            
    +            
    +              USB_PAD_ENABLE
    +              Enable USB pad function.
    +              14
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          TEST
    +          USB_DEVICE_TEST_REG.
    +          0x1C
    +          0x20
    +          
    +            
    +              ENABLE
    +              Enable test of the USB pad
    +              0
    +              1
    +              read-write
    +            
    +            
    +              USB_OE
    +              USB pad oen in test
    +              1
    +              1
    +              read-write
    +            
    +            
    +              TX_DP
    +              USB D+ tx value in test
    +              2
    +              1
    +              read-write
    +            
    +            
    +              TX_DM
    +              USB D- tx value in test
    +              3
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          JFIFO_ST
    +          USB_DEVICE_JFIFO_ST_REG.
    +          0x20
    +          0x20
    +          0x00000044
    +          
    +            
    +              IN_FIFO_CNT
    +              JTAT in fifo counter.
    +              0
    +              2
    +              read-only
    +            
    +            
    +              IN_FIFO_EMPTY
    +              1: JTAG in fifo is empty.
    +              2
    +              1
    +              read-only
    +            
    +            
    +              IN_FIFO_FULL
    +              1: JTAG in fifo is full.
    +              3
    +              1
    +              read-only
    +            
    +            
    +              OUT_FIFO_CNT
    +              JTAT out fifo counter.
    +              4
    +              2
    +              read-only
    +            
    +            
    +              OUT_FIFO_EMPTY
    +              1: JTAG out fifo is empty.
    +              6
    +              1
    +              read-only
    +            
    +            
    +              OUT_FIFO_FULL
    +              1: JTAG out fifo is full.
    +              7
    +              1
    +              read-only
    +            
    +            
    +              IN_FIFO_RESET
    +              Write 1 to reset JTAG in fifo.
    +              8
    +              1
    +              read-write
    +            
    +            
    +              OUT_FIFO_RESET
    +              Write 1 to reset JTAG out fifo.
    +              9
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          FRAM_NUM
    +          USB_DEVICE_FRAM_NUM_REG.
    +          0x24
    +          0x20
    +          
    +            
    +              SOF_FRAME_INDEX
    +              Frame index of received SOF frame.
    +              0
    +              11
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_EP0_ST
    +          USB_DEVICE_IN_EP0_ST_REG.
    +          0x28
    +          0x20
    +          0x00000001
    +          
    +            
    +              IN_EP0_STATE
    +              State of IN Endpoint 0.
    +              0
    +              2
    +              read-only
    +            
    +            
    +              IN_EP0_WR_ADDR
    +              Write data address of IN endpoint 0.
    +              2
    +              7
    +              read-only
    +            
    +            
    +              IN_EP0_RD_ADDR
    +              Read data address of IN endpoint 0.
    +              9
    +              7
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_EP1_ST
    +          USB_DEVICE_IN_EP1_ST_REG.
    +          0x2C
    +          0x20
    +          0x00000001
    +          
    +            
    +              IN_EP1_STATE
    +              State of IN Endpoint 1.
    +              0
    +              2
    +              read-only
    +            
    +            
    +              IN_EP1_WR_ADDR
    +              Write data address of IN endpoint 1.
    +              2
    +              7
    +              read-only
    +            
    +            
    +              IN_EP1_RD_ADDR
    +              Read data address of IN endpoint 1.
    +              9
    +              7
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_EP2_ST
    +          USB_DEVICE_IN_EP2_ST_REG.
    +          0x30
    +          0x20
    +          0x00000001
    +          
    +            
    +              IN_EP2_STATE
    +              State of IN Endpoint 2.
    +              0
    +              2
    +              read-only
    +            
    +            
    +              IN_EP2_WR_ADDR
    +              Write data address of IN endpoint 2.
    +              2
    +              7
    +              read-only
    +            
    +            
    +              IN_EP2_RD_ADDR
    +              Read data address of IN endpoint 2.
    +              9
    +              7
    +              read-only
    +            
    +          
    +        
    +        
    +          IN_EP3_ST
    +          USB_DEVICE_IN_EP3_ST_REG.
    +          0x34
    +          0x20
    +          0x00000001
    +          
    +            
    +              IN_EP3_STATE
    +              State of IN Endpoint 3.
    +              0
    +              2
    +              read-only
    +            
    +            
    +              IN_EP3_WR_ADDR
    +              Write data address of IN endpoint 3.
    +              2
    +              7
    +              read-only
    +            
    +            
    +              IN_EP3_RD_ADDR
    +              Read data address of IN endpoint 3.
    +              9
    +              7
    +              read-only
    +            
    +          
    +        
    +        
    +          OUT_EP0_ST
    +          USB_DEVICE_OUT_EP0_ST_REG.
    +          0x38
    +          0x20
    +          
    +            
    +              OUT_EP0_STATE
    +              State of OUT Endpoint 0.
    +              0
    +              2
    +              read-only
    +            
    +            
    +              OUT_EP0_WR_ADDR
    +              Write data address of OUT endpoint 0. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is detected, there are USB_DEVICE_OUT_EP0_WR_ADDR-2 bytes data in OUT EP0.
    +              2
    +              7
    +              read-only
    +            
    +            
    +              OUT_EP0_RD_ADDR
    +              Read data address of OUT endpoint 0.
    +              9
    +              7
    +              read-only
    +            
    +          
    +        
    +        
    +          OUT_EP1_ST
    +          USB_DEVICE_OUT_EP1_ST_REG.
    +          0x3C
    +          0x20
    +          
    +            
    +              OUT_EP1_STATE
    +              State of OUT Endpoint 1.
    +              0
    +              2
    +              read-only
    +            
    +            
    +              OUT_EP1_WR_ADDR
    +              Write data address of OUT endpoint 1. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is detected, there are USB_DEVICE_OUT_EP1_WR_ADDR-2 bytes data in OUT EP1.
    +              2
    +              7
    +              read-only
    +            
    +            
    +              OUT_EP1_RD_ADDR
    +              Read data address of OUT endpoint 1.
    +              9
    +              7
    +              read-only
    +            
    +            
    +              OUT_EP1_REC_DATA_CNT
    +              Data count in OUT endpoint 1 when one packet is received.
    +              16
    +              7
    +              read-only
    +            
    +          
    +        
    +        
    +          OUT_EP2_ST
    +          USB_DEVICE_OUT_EP2_ST_REG.
    +          0x40
    +          0x20
    +          
    +            
    +              OUT_EP2_STATE
    +              State of OUT Endpoint 2.
    +              0
    +              2
    +              read-only
    +            
    +            
    +              OUT_EP2_WR_ADDR
    +              Write data address of OUT endpoint 2. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is detected, there are USB_DEVICE_OUT_EP2_WR_ADDR-2 bytes data in OUT EP2.
    +              2
    +              7
    +              read-only
    +            
    +            
    +              OUT_EP2_RD_ADDR
    +              Read data address of OUT endpoint 2.
    +              9
    +              7
    +              read-only
    +            
    +          
    +        
    +        
    +          MISC_CONF
    +          USB_DEVICE_MISC_CONF_REG.
    +          0x44
    +          0x20
    +          
    +            
    +              CLK_EN
    +              1'h1: Force clock on for register. 1'h0: Support clock only when application writes registers.
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          MEM_CONF
    +          USB_DEVICE_MEM_CONF_REG.
    +          0x48
    +          0x20
    +          0x00000002
    +          
    +            
    +              USB_MEM_PD
    +              1: power down usb memory.
    +              0
    +              1
    +              read-write
    +            
    +            
    +              USB_MEM_CLK_EN
    +              1: Force clock on for usb memory.
    +              1
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DATE
    +          USB_DEVICE_DATE_REG.
    +          0x80
    +          0x20
    +          0x02007300
    +          
    +            
    +              DATE
    +              register version.
    +              0
    +              32
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      XTS_AES
    +      XTS-AES-128 Flash Encryption
    +      XTS_AES
    +      0x600CC000
    +      
    +        0x0
    +        0x30
    +        registers
    +      
    +      
    +        
    +          16
    +          0x1
    +          PLAIN_MEM[%s]
    +          The memory that stores plaintext
    +          0x0
    +          0x8
    +        
    +        
    +          LINESIZE
    +          XTS-AES line-size register
    +          0x40
    +          0x20
    +          
    +            
    +              LINESIZE
    +              This bit stores the line size parameter. 0: 16Byte, 1: 32Byte.
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          DESTINATION
    +          XTS-AES destination register
    +          0x44
    +          0x20
    +          
    +            
    +              DESTINATION
    +              This bit stores the destination. 0: flash(default). 1: reserved.
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          PHYSICAL_ADDRESS
    +          XTS-AES physical address register
    +          0x48
    +          0x20
    +          
    +            
    +              PHYSICAL_ADDRESS
    +              Those bits stores the physical address. If linesize is 16-byte, the physical address should be aligned of 16 bytes. If linesize is 32-byte, the physical address should be aligned of 32 bytes.
    +              0
    +              30
    +              read-write
    +            
    +          
    +        
    +        
    +          TRIGGER
    +          XTS-AES trigger register
    +          0x4C
    +          0x20
    +          
    +            
    +              TRIGGER
    +              Set this bit to start manual encryption calculation
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          RELEASE
    +          XTS-AES release register
    +          0x50
    +          0x20
    +          
    +            
    +              RELEASE
    +              Set this bit to release the manual encrypted result, after that the result will be visible to spi
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          DESTROY
    +          XTS-AES destroy register
    +          0x54
    +          0x20
    +          
    +            
    +              DESTROY
    +              Set this bit to destroy XTS-AES result.
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          STATE
    +          XTS-AES status register
    +          0x58
    +          0x20
    +          
    +            
    +              STATE
    +              Those bits shows XTS-AES status. 0=IDLE, 1=WORK, 2=RELEASE, 3=USE. IDLE means that XTS-AES is idle. WORK means that XTS-AES is busy with calculation. RELEASE means the encrypted result is generated but not visible to mspi. USE means that the encrypted result is visible to mspi.
    +              0
    +              2
    +              read-only
    +            
    +          
    +        
    +        
    +          DATE
    +          XTS-AES version control register
    +          0x5C
    +          0x20
    +          0x20200623
    +          
    +            
    +              DATE
    +              Those bits stores the version information of XTS-AES.
    +              0
    +              30
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +  
    +
    \ No newline at end of file
    diff --git a/src/esp32c3.zig b/src/esp32c3.zig
    new file mode 100644
    index 000000000..77bed3f3d
    --- /dev/null
    +++ b/src/esp32c3.zig
    @@ -0,0 +1,37956 @@
    +// this file was generated by regz: https://github.com/ZigEmbeddedGroup/regz
    +// commit: 62e33d0e2175e4c1621e1dbf9f6ac3ec18f6ba38
    +//
    +// vendor: ESPRESSIF SYSTEMS (SHANGHAI) CO., LTD.
    +// device: ESP32-C3
    +// cpu: RV32IMC
    +
    +pub const registers = struct {
    +    /// AES (Advanced Encryption Standard) Accelerator
    +    pub const AES = struct {
    +        pub const base_address = 0x6003a000;
    +
    +        /// address: 0x6003a000
    +        /// Key material key_0 configure register
    +        pub const KEY_0 = @intToPtr(*volatile u32, base_address + 0x0);
    +
    +        /// address: 0x6003a004
    +        /// Key material key_1 configure register
    +        pub const KEY_1 = @intToPtr(*volatile u32, base_address + 0x4);
    +
    +        /// address: 0x6003a008
    +        /// Key material key_2 configure register
    +        pub const KEY_2 = @intToPtr(*volatile u32, base_address + 0x8);
    +
    +        /// address: 0x6003a00c
    +        /// Key material key_3 configure register
    +        pub const KEY_3 = @intToPtr(*volatile u32, base_address + 0xc);
    +
    +        /// address: 0x6003a010
    +        /// Key material key_4 configure register
    +        pub const KEY_4 = @intToPtr(*volatile u32, base_address + 0x10);
    +
    +        /// address: 0x6003a014
    +        /// Key material key_5 configure register
    +        pub const KEY_5 = @intToPtr(*volatile u32, base_address + 0x14);
    +
    +        /// address: 0x6003a018
    +        /// Key material key_6 configure register
    +        pub const KEY_6 = @intToPtr(*volatile u32, base_address + 0x18);
    +
    +        /// address: 0x6003a01c
    +        /// Key material key_7 configure register
    +        pub const KEY_7 = @intToPtr(*volatile u32, base_address + 0x1c);
    +
    +        /// address: 0x6003a020
    +        /// source text material text_in_0 configure register
    +        pub const TEXT_IN_0 = @intToPtr(*volatile u32, base_address + 0x20);
    +
    +        /// address: 0x6003a024
    +        /// source text material text_in_1 configure register
    +        pub const TEXT_IN_1 = @intToPtr(*volatile u32, base_address + 0x24);
    +
    +        /// address: 0x6003a028
    +        /// source text material text_in_2 configure register
    +        pub const TEXT_IN_2 = @intToPtr(*volatile u32, base_address + 0x28);
    +
    +        /// address: 0x6003a02c
    +        /// source text material text_in_3 configure register
    +        pub const TEXT_IN_3 = @intToPtr(*volatile u32, base_address + 0x2c);
    +
    +        /// address: 0x6003a030
    +        /// result text material text_out_0 configure register
    +        pub const TEXT_OUT_0 = @intToPtr(*volatile u32, base_address + 0x30);
    +
    +        /// address: 0x6003a034
    +        /// result text material text_out_1 configure register
    +        pub const TEXT_OUT_1 = @intToPtr(*volatile u32, base_address + 0x34);
    +
    +        /// address: 0x6003a038
    +        /// result text material text_out_2 configure register
    +        pub const TEXT_OUT_2 = @intToPtr(*volatile u32, base_address + 0x38);
    +
    +        /// address: 0x6003a03c
    +        /// result text material text_out_3 configure register
    +        pub const TEXT_OUT_3 = @intToPtr(*volatile u32, base_address + 0x3c);
    +
    +        /// address: 0x6003a040
    +        /// AES Mode register
    +        pub const MODE = @intToPtr(*volatile MmioInt(32, u3), base_address + 0x40);
    +
    +        /// address: 0x6003a044
    +        /// AES Endian configure register
    +        pub const ENDIAN = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x44);
    +
    +        /// address: 0x6003a048
    +        /// AES trigger register
    +        pub const TRIGGER = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x48);
    +
    +        /// address: 0x6003a04c
    +        /// AES state register
    +        pub const STATE = @intToPtr(*volatile MmioInt(32, u2), base_address + 0x4c);
    +
    +        /// address: 0x6003a050
    +        /// The memory that stores initialization vector
    +        pub const IV_MEM = @intToPtr(*volatile [16]u8, base_address + 0x50);
    +
    +        /// address: 0x6003a060
    +        /// The memory that stores GCM hash subkey
    +        pub const H_MEM = @intToPtr(*volatile [16]u8, base_address + 0x60);
    +
    +        /// address: 0x6003a070
    +        /// The memory that stores J0
    +        pub const J0_MEM = @intToPtr(*volatile [16]u8, base_address + 0x70);
    +
    +        /// address: 0x6003a080
    +        /// The memory that stores T0
    +        pub const T0_MEM = @intToPtr(*volatile [16]u8, base_address + 0x80);
    +
    +        /// address: 0x6003a090
    +        /// DMA-AES working mode register
    +        pub const DMA_ENABLE = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x90);
    +
    +        /// address: 0x6003a094
    +        /// AES cipher block mode register
    +        pub const BLOCK_MODE = @intToPtr(*volatile MmioInt(32, u3), base_address + 0x94);
    +
    +        /// address: 0x6003a098
    +        /// AES block number register
    +        pub const BLOCK_NUM = @intToPtr(*volatile u32, base_address + 0x98);
    +
    +        /// address: 0x6003a09c
    +        /// Standard incrementing function configure register
    +        pub const INC_SEL = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x9c);
    +
    +        /// address: 0x6003a0a0
    +        /// Additional Authential Data block number register
    +        pub const AAD_BLOCK_NUM = @intToPtr(*volatile u32, base_address + 0xa0);
    +
    +        /// address: 0x6003a0a4
    +        /// AES remainder bit number register
    +        pub const REMAINDER_BIT_NUM = @intToPtr(*volatile MmioInt(32, u7), base_address + 0xa4);
    +
    +        /// address: 0x6003a0a8
    +        /// AES continue register
    +        pub const CONTINUE = @intToPtr(*volatile MmioInt(32, u1), base_address + 0xa8);
    +
    +        /// address: 0x6003a0ac
    +        /// AES Interrupt clear register
    +        pub const INT_CLEAR = @intToPtr(*volatile MmioInt(32, u1), base_address + 0xac);
    +
    +        /// address: 0x6003a0b0
    +        /// AES Interrupt enable register
    +        pub const INT_ENA = @intToPtr(*volatile MmioInt(32, u1), base_address + 0xb0);
    +
    +        /// address: 0x6003a0b4
    +        /// AES version control register
    +        pub const DATE = @intToPtr(*volatile MmioInt(32, u30), base_address + 0xb4);
    +
    +        /// address: 0x6003a0b8
    +        /// AES-DMA exit config
    +        pub const DMA_EXIT = @intToPtr(*volatile MmioInt(32, u1), base_address + 0xb8);
    +    };
    +
    +    /// Advanced Peripheral Bus Controller
    +    pub const APB_CTRL = struct {
    +        pub const base_address = 0x60026000;
    +
    +        /// address: 0x60026000
    +        /// APB_CTRL_SYSCLK_CONF_REG
    +        pub const SYSCLK_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_pre_div_cnt
    +            PRE_DIV_CNT: u10,
    +            /// reg_clk_320m_en
    +            CLK_320M_EN: u1,
    +            /// reg_clk_en
    +            CLK_EN: u1,
    +            /// reg_rst_tick_cnt
    +            RST_TICK_CNT: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +        }), base_address + 0x0);
    +
    +        /// address: 0x60026004
    +        /// APB_CTRL_TICK_CONF_REG
    +        pub const TICK_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_xtal_tick_num
    +            XTAL_TICK_NUM: u8,
    +            /// reg_ck8m_tick_num
    +            CK8M_TICK_NUM: u8,
    +            /// reg_tick_enable
    +            TICK_ENABLE: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +        }), base_address + 0x4);
    +
    +        /// address: 0x60026008
    +        /// APB_CTRL_CLK_OUT_EN_REG
    +        pub const CLK_OUT_EN = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_clk20_oen
    +            CLK20_OEN: u1,
    +            /// reg_clk22_oen
    +            CLK22_OEN: u1,
    +            /// reg_clk44_oen
    +            CLK44_OEN: u1,
    +            /// reg_clk_bb_oen
    +            CLK_BB_OEN: u1,
    +            /// reg_clk80_oen
    +            CLK80_OEN: u1,
    +            /// reg_clk160_oen
    +            CLK160_OEN: u1,
    +            /// reg_clk_320m_oen
    +            CLK_320M_OEN: u1,
    +            /// reg_clk_adc_inf_oen
    +            CLK_ADC_INF_OEN: u1,
    +            /// reg_clk_dac_cpu_oen
    +            CLK_DAC_CPU_OEN: u1,
    +            /// reg_clk40x_bb_oen
    +            CLK40X_BB_OEN: u1,
    +            /// reg_clk_xtal_oen
    +            CLK_XTAL_OEN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x8);
    +
    +        /// address: 0x6002600c
    +        /// APB_CTRL_WIFI_BB_CFG_REG
    +        pub const WIFI_BB_CFG = @intToPtr(*volatile u32, base_address + 0xc);
    +
    +        /// address: 0x60026010
    +        /// APB_CTRL_WIFI_BB_CFG_2_REG
    +        pub const WIFI_BB_CFG_2 = @intToPtr(*volatile u32, base_address + 0x10);
    +
    +        /// address: 0x60026014
    +        /// APB_CTRL_WIFI_CLK_EN_REG
    +        pub const WIFI_CLK_EN = @intToPtr(*volatile u32, base_address + 0x14);
    +
    +        /// address: 0x60026018
    +        /// APB_CTRL_WIFI_RST_EN_REG
    +        pub const WIFI_RST_EN = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_wifi_rst
    +            WIFI_RST: u32,
    +        }), base_address + 0x18);
    +
    +        /// address: 0x6002601c
    +        /// APB_CTRL_HOST_INF_SEL_REG
    +        pub const HOST_INF_SEL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_peri_io_swap
    +            PERI_IO_SWAP: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x1c);
    +
    +        /// address: 0x60026020
    +        /// APB_CTRL_EXT_MEM_PMS_LOCK_REG
    +        pub const EXT_MEM_PMS_LOCK = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x20);
    +
    +        /// address: 0x60026028
    +        /// APB_CTRL_FLASH_ACE0_ATTR_REG
    +        pub const FLASH_ACE0_ATTR = @intToPtr(*volatile MmioInt(32, u2), base_address + 0x28);
    +
    +        /// address: 0x6002602c
    +        /// APB_CTRL_FLASH_ACE1_ATTR_REG
    +        pub const FLASH_ACE1_ATTR = @intToPtr(*volatile MmioInt(32, u2), base_address + 0x2c);
    +
    +        /// address: 0x60026030
    +        /// APB_CTRL_FLASH_ACE2_ATTR_REG
    +        pub const FLASH_ACE2_ATTR = @intToPtr(*volatile MmioInt(32, u2), base_address + 0x30);
    +
    +        /// address: 0x60026034
    +        /// APB_CTRL_FLASH_ACE3_ATTR_REG
    +        pub const FLASH_ACE3_ATTR = @intToPtr(*volatile MmioInt(32, u2), base_address + 0x34);
    +
    +        /// address: 0x60026038
    +        /// APB_CTRL_FLASH_ACE0_ADDR_REG
    +        pub const FLASH_ACE0_ADDR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_flash_ace0_addr_s
    +            S: u32,
    +        }), base_address + 0x38);
    +
    +        /// address: 0x6002603c
    +        /// APB_CTRL_FLASH_ACE1_ADDR_REG
    +        pub const FLASH_ACE1_ADDR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_flash_ace1_addr_s
    +            S: u32,
    +        }), base_address + 0x3c);
    +
    +        /// address: 0x60026040
    +        /// APB_CTRL_FLASH_ACE2_ADDR_REG
    +        pub const FLASH_ACE2_ADDR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_flash_ace2_addr_s
    +            S: u32,
    +        }), base_address + 0x40);
    +
    +        /// address: 0x60026044
    +        /// APB_CTRL_FLASH_ACE3_ADDR_REG
    +        pub const FLASH_ACE3_ADDR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_flash_ace3_addr_s
    +            S: u32,
    +        }), base_address + 0x44);
    +
    +        /// address: 0x60026048
    +        /// APB_CTRL_FLASH_ACE0_SIZE_REG
    +        pub const FLASH_ACE0_SIZE = @intToPtr(*volatile MmioInt(32, u13), base_address + 0x48);
    +
    +        /// address: 0x6002604c
    +        /// APB_CTRL_FLASH_ACE1_SIZE_REG
    +        pub const FLASH_ACE1_SIZE = @intToPtr(*volatile MmioInt(32, u13), base_address + 0x4c);
    +
    +        /// address: 0x60026050
    +        /// APB_CTRL_FLASH_ACE2_SIZE_REG
    +        pub const FLASH_ACE2_SIZE = @intToPtr(*volatile MmioInt(32, u13), base_address + 0x50);
    +
    +        /// address: 0x60026054
    +        /// APB_CTRL_FLASH_ACE3_SIZE_REG
    +        pub const FLASH_ACE3_SIZE = @intToPtr(*volatile MmioInt(32, u13), base_address + 0x54);
    +
    +        /// address: 0x60026088
    +        /// APB_CTRL_SPI_MEM_PMS_CTRL_REG
    +        pub const SPI_MEM_PMS_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_spi_mem_reject_int
    +            SPI_MEM_REJECT_INT: u1,
    +            /// reg_spi_mem_reject_clr
    +            SPI_MEM_REJECT_CLR: u1,
    +            /// reg_spi_mem_reject_cde
    +            SPI_MEM_REJECT_CDE: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x88);
    +
    +        /// address: 0x6002608c
    +        /// APB_CTRL_SPI_MEM_REJECT_ADDR_REG
    +        pub const SPI_MEM_REJECT_ADDR = @intToPtr(*volatile u32, base_address + 0x8c);
    +
    +        /// address: 0x60026090
    +        /// APB_CTRL_SDIO_CTRL_REG
    +        pub const SDIO_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_sdio_win_access_en
    +            SDIO_WIN_ACCESS_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x90);
    +
    +        /// address: 0x60026094
    +        /// APB_CTRL_REDCY_SIG0_REG
    +        pub const REDCY_SIG0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_redcy_sig0
    +            REDCY_SIG0: u31,
    +            /// reg_redcy_andor
    +            REDCY_ANDOR: u1,
    +        }), base_address + 0x94);
    +
    +        /// address: 0x60026098
    +        /// APB_CTRL_REDCY_SIG1_REG
    +        pub const REDCY_SIG1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_redcy_sig1
    +            REDCY_SIG1: u31,
    +            /// reg_redcy_nandor
    +            REDCY_NANDOR: u1,
    +        }), base_address + 0x98);
    +
    +        /// address: 0x6002609c
    +        /// APB_CTRL_FRONT_END_MEM_PD_REG
    +        pub const FRONT_END_MEM_PD = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_agc_mem_force_pu
    +            AGC_MEM_FORCE_PU: u1,
    +            /// reg_agc_mem_force_pd
    +            AGC_MEM_FORCE_PD: u1,
    +            /// reg_pbus_mem_force_pu
    +            PBUS_MEM_FORCE_PU: u1,
    +            /// reg_pbus_mem_force_pd
    +            PBUS_MEM_FORCE_PD: u1,
    +            /// reg_dc_mem_force_pu
    +            DC_MEM_FORCE_PU: u1,
    +            /// reg_dc_mem_force_pd
    +            DC_MEM_FORCE_PD: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +        }), base_address + 0x9c);
    +
    +        /// address: 0x600260a0
    +        /// APB_CTRL_RETENTION_CTRL_REG
    +        pub const RETENTION_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_retention_link_addr
    +            RETENTION_LINK_ADDR: u27,
    +            /// reg_nobypass_cpu_iso_rst
    +            NOBYPASS_CPU_ISO_RST: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +        }), base_address + 0xa0);
    +
    +        /// address: 0x600260a4
    +        /// APB_CTRL_CLKGATE_FORCE_ON_REG
    +        pub const CLKGATE_FORCE_ON = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_rom_clkgate_force_on
    +            ROM_CLKGATE_FORCE_ON: u2,
    +            /// reg_sram_clkgate_force_on
    +            SRAM_CLKGATE_FORCE_ON: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +        }), base_address + 0xa4);
    +
    +        /// address: 0x600260a8
    +        /// APB_CTRL_MEM_POWER_DOWN_REG
    +        pub const MEM_POWER_DOWN = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_rom_power_down
    +            ROM_POWER_DOWN: u2,
    +            /// reg_sram_power_down
    +            SRAM_POWER_DOWN: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +        }), base_address + 0xa8);
    +
    +        /// address: 0x600260ac
    +        /// APB_CTRL_MEM_POWER_UP_REG
    +        pub const MEM_POWER_UP = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_rom_power_up
    +            ROM_POWER_UP: u2,
    +            /// reg_sram_power_up
    +            SRAM_POWER_UP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +        }), base_address + 0xac);
    +
    +        /// address: 0x600260b0
    +        /// APB_CTRL_RND_DATA_REG
    +        pub const RND_DATA = @intToPtr(*volatile u32, base_address + 0xb0);
    +
    +        /// address: 0x600260b4
    +        /// APB_CTRL_PERI_BACKUP_CONFIG_REG
    +        pub const PERI_BACKUP_CONFIG = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            /// reg_peri_backup_flow_err
    +            PERI_BACKUP_FLOW_ERR: u2,
    +            reserved1: u1,
    +            /// reg_peri_backup_burst_limit
    +            PERI_BACKUP_BURST_LIMIT: u5,
    +            /// reg_peri_backup_tout_thres
    +            PERI_BACKUP_TOUT_THRES: u10,
    +            /// reg_peri_backup_size
    +            PERI_BACKUP_SIZE: u10,
    +            /// reg_peri_backup_start
    +            PERI_BACKUP_START: u1,
    +            /// reg_peri_backup_to_mem
    +            PERI_BACKUP_TO_MEM: u1,
    +            /// reg_peri_backup_ena
    +            PERI_BACKUP_ENA: u1,
    +        }), base_address + 0xb4);
    +
    +        /// address: 0x600260b8
    +        /// APB_CTRL_PERI_BACKUP_APB_ADDR_REG
    +        pub const PERI_BACKUP_APB_ADDR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_backup_apb_start_addr
    +            BACKUP_APB_START_ADDR: u32,
    +        }), base_address + 0xb8);
    +
    +        /// address: 0x600260bc
    +        /// APB_CTRL_PERI_BACKUP_MEM_ADDR_REG
    +        pub const PERI_BACKUP_MEM_ADDR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_backup_mem_start_addr
    +            BACKUP_MEM_START_ADDR: u32,
    +        }), base_address + 0xbc);
    +
    +        /// address: 0x600260c0
    +        /// APB_CTRL_PERI_BACKUP_INT_RAW_REG
    +        pub const PERI_BACKUP_INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_peri_backup_done_int_raw
    +            PERI_BACKUP_DONE_INT_RAW: u1,
    +            /// reg_peri_backup_err_int_raw
    +            PERI_BACKUP_ERR_INT_RAW: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0xc0);
    +
    +        /// address: 0x600260c4
    +        /// APB_CTRL_PERI_BACKUP_INT_ST_REG
    +        pub const PERI_BACKUP_INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_peri_backup_done_int_st
    +            PERI_BACKUP_DONE_INT_ST: u1,
    +            /// reg_peri_backup_err_int_st
    +            PERI_BACKUP_ERR_INT_ST: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0xc4);
    +
    +        /// address: 0x600260c8
    +        /// APB_CTRL_PERI_BACKUP_INT_ENA_REG
    +        pub const PERI_BACKUP_INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_peri_backup_done_int_ena
    +            PERI_BACKUP_DONE_INT_ENA: u1,
    +            /// reg_peri_backup_err_int_ena
    +            PERI_BACKUP_ERR_INT_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0xc8);
    +
    +        /// address: 0x600260d0
    +        /// APB_CTRL_PERI_BACKUP_INT_CLR_REG
    +        pub const PERI_BACKUP_INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_peri_backup_done_int_clr
    +            PERI_BACKUP_DONE_INT_CLR: u1,
    +            /// reg_peri_backup_err_int_clr
    +            PERI_BACKUP_ERR_INT_CLR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0xd0);
    +
    +        /// address: 0x600263fc
    +        /// APB_CTRL_DATE_REG
    +        pub const DATE = @intToPtr(*volatile u32, base_address + 0x3fc);
    +    };
    +
    +    /// Successive Approximation Register Analog to Digital Converter
    +    pub const APB_SARADC = struct {
    +        pub const base_address = 0x60040000;
    +
    +        /// address: 0x60040000
    +        /// digital saradc configure register
    +        pub const CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// select software enable saradc sample
    +            SARADC_START_FORCE: u1,
    +            /// software enable saradc sample
    +            SARADC_START: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            /// SAR clock gated
    +            SARADC_SAR_CLK_GATED: u1,
    +            /// SAR clock divider
    +            SARADC_SAR_CLK_DIV: u8,
    +            /// 0 ~ 15 means length 1 ~ 16
    +            SARADC_SAR_PATT_LEN: u3,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            /// clear the pointer of pattern table for DIG ADC1 CTRL
    +            SARADC_SAR_PATT_P_CLEAR: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            /// force option to xpd sar blocks
    +            SARADC_XPD_SAR_FORCE: u2,
    +            reserved12: u1,
    +            /// wait arbit signal stable after sar_done
    +            SARADC_WAIT_ARB_CYCLE: u2,
    +        }), base_address + 0x0);
    +
    +        /// address: 0x60040004
    +        /// digital saradc configure register
    +        pub const CTRL2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// enable max meas num
    +            SARADC_MEAS_NUM_LIMIT: u1,
    +            /// max conversion number
    +            SARADC_MAX_MEAS_NUM: u8,
    +            /// 1: data to DIG ADC1 CTRL is inverted, otherwise not
    +            SARADC_SAR1_INV: u1,
    +            /// 1: data to DIG ADC2 CTRL is inverted, otherwise not
    +            SARADC_SAR2_INV: u1,
    +            reserved0: u1,
    +            /// to set saradc timer target
    +            SARADC_TIMER_TARGET: u12,
    +            /// to enable saradc timer trigger
    +            SARADC_TIMER_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +        }), base_address + 0x4);
    +
    +        /// address: 0x60040008
    +        /// digital saradc configure register
    +        pub const FILTER_CTRL1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            reserved23: u1,
    +            reserved24: u1,
    +            reserved25: u1,
    +            /// Factor of saradc filter1
    +            APB_SARADC_FILTER_FACTOR1: u3,
    +            /// Factor of saradc filter0
    +            APB_SARADC_FILTER_FACTOR0: u3,
    +        }), base_address + 0x8);
    +
    +        /// address: 0x6004000c
    +        /// digital saradc configure register
    +        pub const FSM_WAIT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// saradc_xpd_wait
    +            SARADC_XPD_WAIT: u8,
    +            /// saradc_rstb_wait
    +            SARADC_RSTB_WAIT: u8,
    +            /// saradc_standby_wait
    +            SARADC_STANDBY_WAIT: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +        }), base_address + 0xc);
    +
    +        /// address: 0x60040010
    +        /// digital saradc configure register
    +        pub const SAR1_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// saradc1 status about data and channel
    +            SARADC_SAR1_STATUS: u32,
    +        }), base_address + 0x10);
    +
    +        /// address: 0x60040014
    +        /// digital saradc configure register
    +        pub const SAR2_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// saradc2 status about data and channel
    +            SARADC_SAR2_STATUS: u32,
    +        }), base_address + 0x14);
    +
    +        /// address: 0x60040018
    +        /// digital saradc configure register
    +        pub const SAR_PATT_TAB1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// item 0 ~ 3 for pattern table 1 (each item one byte)
    +            SARADC_SAR_PATT_TAB1: u24,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +        }), base_address + 0x18);
    +
    +        /// address: 0x6004001c
    +        /// digital saradc configure register
    +        pub const SAR_PATT_TAB2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Item 4 ~ 7 for pattern table 1 (each item one byte)
    +            SARADC_SAR_PATT_TAB2: u24,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +        }), base_address + 0x1c);
    +
    +        /// address: 0x60040020
    +        /// digital saradc configure register
    +        pub const ONETIME_SAMPLE = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            /// configure onetime atten
    +            SARADC_ONETIME_ATTEN: u2,
    +            /// configure onetime channel
    +            SARADC_ONETIME_CHANNEL: u4,
    +            /// trigger adc onetime sample
    +            SARADC_ONETIME_START: u1,
    +            /// enable adc2 onetime sample
    +            SARADC2_ONETIME_SAMPLE: u1,
    +            /// enable adc1 onetime sample
    +            SARADC1_ONETIME_SAMPLE: u1,
    +        }), base_address + 0x20);
    +
    +        /// address: 0x60040024
    +        /// digital saradc configure register
    +        pub const ARB_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// adc2 arbiter force to enableapb controller
    +            ADC_ARB_APB_FORCE: u1,
    +            /// adc2 arbiter force to enable rtc controller
    +            ADC_ARB_RTC_FORCE: u1,
    +            /// adc2 arbiter force to enable wifi controller
    +            ADC_ARB_WIFI_FORCE: u1,
    +            /// adc2 arbiter force grant
    +            ADC_ARB_GRANT_FORCE: u1,
    +            /// Set adc2 arbiterapb priority
    +            ADC_ARB_APB_PRIORITY: u2,
    +            /// Set adc2 arbiter rtc priority
    +            ADC_ARB_RTC_PRIORITY: u2,
    +            /// Set adc2 arbiter wifi priority
    +            ADC_ARB_WIFI_PRIORITY: u2,
    +            /// adc2 arbiter uses fixed priority
    +            ADC_ARB_FIX_PRIORITY: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +        }), base_address + 0x24);
    +
    +        /// address: 0x60040028
    +        /// digital saradc configure register
    +        pub const FILTER_CTRL0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            /// configure filter1 to adc channel
    +            APB_SARADC_FILTER_CHANNEL1: u4,
    +            /// configure filter0 to adc channel
    +            APB_SARADC_FILTER_CHANNEL0: u4,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            /// enable apb_adc1_filter
    +            APB_SARADC_FILTER_RESET: u1,
    +        }), base_address + 0x28);
    +
    +        /// address: 0x6004002c
    +        /// digital saradc configure register
    +        pub const SAR1DATA_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// saradc1 data
    +            APB_SARADC1_DATA: u17,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +        }), base_address + 0x2c);
    +
    +        /// address: 0x60040030
    +        /// digital saradc configure register
    +        pub const SAR2DATA_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// saradc2 data
    +            APB_SARADC2_DATA: u17,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +        }), base_address + 0x30);
    +
    +        /// address: 0x60040034
    +        /// digital saradc configure register
    +        pub const THRES0_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// configure thres0 to adc channel
    +            APB_SARADC_THRES0_CHANNEL: u4,
    +            reserved0: u1,
    +            /// saradc thres0 monitor thres
    +            APB_SARADC_THRES0_HIGH: u13,
    +            /// saradc thres0 monitor thres
    +            APB_SARADC_THRES0_LOW: u13,
    +            padding0: u1,
    +        }), base_address + 0x34);
    +
    +        /// address: 0x60040038
    +        /// digital saradc configure register
    +        pub const THRES1_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// configure thres1 to adc channel
    +            APB_SARADC_THRES1_CHANNEL: u4,
    +            reserved0: u1,
    +            /// saradc thres1 monitor thres
    +            APB_SARADC_THRES1_HIGH: u13,
    +            /// saradc thres1 monitor thres
    +            APB_SARADC_THRES1_LOW: u13,
    +            padding0: u1,
    +        }), base_address + 0x38);
    +
    +        /// address: 0x6004003c
    +        /// digital saradc configure register
    +        pub const THRES_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            reserved23: u1,
    +            reserved24: u1,
    +            reserved25: u1,
    +            reserved26: u1,
    +            /// enable thres to all channel
    +            APB_SARADC_THRES_ALL_EN: u1,
    +            reserved27: u1,
    +            reserved28: u1,
    +            /// enable thres1
    +            APB_SARADC_THRES1_EN: u1,
    +            /// enable thres0
    +            APB_SARADC_THRES0_EN: u1,
    +        }), base_address + 0x3c);
    +
    +        /// address: 0x60040040
    +        /// digital saradc int register
    +        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            reserved23: u1,
    +            reserved24: u1,
    +            reserved25: u1,
    +            /// saradc thres1 low interrupt enable
    +            APB_SARADC_THRES1_LOW_INT_ENA: u1,
    +            /// saradc thres0 low interrupt enable
    +            APB_SARADC_THRES0_LOW_INT_ENA: u1,
    +            /// saradc thres1 high interrupt enable
    +            APB_SARADC_THRES1_HIGH_INT_ENA: u1,
    +            /// saradc thres0 high interrupt enable
    +            APB_SARADC_THRES0_HIGH_INT_ENA: u1,
    +            /// saradc2 done interrupt enable
    +            APB_SARADC2_DONE_INT_ENA: u1,
    +            /// saradc1 done interrupt enable
    +            APB_SARADC1_DONE_INT_ENA: u1,
    +        }), base_address + 0x40);
    +
    +        /// address: 0x60040044
    +        /// digital saradc int register
    +        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            reserved23: u1,
    +            reserved24: u1,
    +            reserved25: u1,
    +            /// saradc thres1 low interrupt raw
    +            APB_SARADC_THRES1_LOW_INT_RAW: u1,
    +            /// saradc thres0 low interrupt raw
    +            APB_SARADC_THRES0_LOW_INT_RAW: u1,
    +            /// saradc thres1 high interrupt raw
    +            APB_SARADC_THRES1_HIGH_INT_RAW: u1,
    +            /// saradc thres0 high interrupt raw
    +            APB_SARADC_THRES0_HIGH_INT_RAW: u1,
    +            /// saradc2 done interrupt raw
    +            APB_SARADC2_DONE_INT_RAW: u1,
    +            /// saradc1 done interrupt raw
    +            APB_SARADC1_DONE_INT_RAW: u1,
    +        }), base_address + 0x44);
    +
    +        /// address: 0x60040048
    +        /// digital saradc int register
    +        pub const INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            reserved23: u1,
    +            reserved24: u1,
    +            reserved25: u1,
    +            /// saradc thres1 low interrupt state
    +            APB_SARADC_THRES1_LOW_INT_ST: u1,
    +            /// saradc thres0 low interrupt state
    +            APB_SARADC_THRES0_LOW_INT_ST: u1,
    +            /// saradc thres1 high interrupt state
    +            APB_SARADC_THRES1_HIGH_INT_ST: u1,
    +            /// saradc thres0 high interrupt state
    +            APB_SARADC_THRES0_HIGH_INT_ST: u1,
    +            /// saradc2 done interrupt state
    +            APB_SARADC2_DONE_INT_ST: u1,
    +            /// saradc1 done interrupt state
    +            APB_SARADC1_DONE_INT_ST: u1,
    +        }), base_address + 0x48);
    +
    +        /// address: 0x6004004c
    +        /// digital saradc int register
    +        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            reserved23: u1,
    +            reserved24: u1,
    +            reserved25: u1,
    +            /// saradc thres1 low interrupt clear
    +            APB_SARADC_THRES1_LOW_INT_CLR: u1,
    +            /// saradc thres0 low interrupt clear
    +            APB_SARADC_THRES0_LOW_INT_CLR: u1,
    +            /// saradc thres1 high interrupt clear
    +            APB_SARADC_THRES1_HIGH_INT_CLR: u1,
    +            /// saradc thres0 high interrupt clear
    +            APB_SARADC_THRES0_HIGH_INT_CLR: u1,
    +            /// saradc2 done interrupt clear
    +            APB_SARADC2_DONE_INT_CLR: u1,
    +            /// saradc1 done interrupt clear
    +            APB_SARADC1_DONE_INT_CLR: u1,
    +        }), base_address + 0x4c);
    +
    +        /// address: 0x60040050
    +        /// digital saradc configure register
    +        pub const DMA_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// the dma_in_suc_eof gen when sample cnt = spi_eof_num
    +            APB_ADC_EOF_NUM: u16,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            /// reset_apb_adc_state
    +            APB_ADC_RESET_FSM: u1,
    +            /// enable apb_adc use spi_dma
    +            APB_ADC_TRANS: u1,
    +        }), base_address + 0x50);
    +
    +        /// address: 0x60040054
    +        /// digital saradc configure register
    +        pub const CLKM_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Integral I2S clock divider value
    +            CLKM_DIV_NUM: u8,
    +            /// Fractional clock divider numerator value
    +            CLKM_DIV_B: u6,
    +            /// Fractional clock divider denominator value
    +            CLKM_DIV_A: u6,
    +            /// reg clk en
    +            CLK_EN: u1,
    +            /// Set this bit to enable clk_apll
    +            CLK_SEL: u2,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +        }), base_address + 0x54);
    +
    +        /// address: 0x60040058
    +        /// digital tsens configure register
    +        pub const APB_TSENS_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// temperature sensor data out
    +            TSENS_OUT: u8,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            /// invert temperature sensor data
    +            TSENS_IN_INV: u1,
    +            /// temperature sensor clock divider
    +            TSENS_CLK_DIV: u8,
    +            /// temperature sensor power up
    +            TSENS_PU: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +        }), base_address + 0x58);
    +
    +        /// address: 0x6004005c
    +        /// digital tsens configure register
    +        pub const TSENS_CTRL2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// the time that power up tsens need wait
    +            TSENS_XPD_WAIT: u12,
    +            /// force power up tsens
    +            TSENS_XPD_FORCE: u2,
    +            /// inv tsens clk
    +            TSENS_CLK_INV: u1,
    +            /// tsens clk select
    +            TSENS_CLK_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x5c);
    +
    +        /// address: 0x60040060
    +        /// digital saradc configure register
    +        pub const CALI = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// saradc cali factor
    +            APB_SARADC_CALI_CFG: u17,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +        }), base_address + 0x60);
    +
    +        /// address: 0x600403fc
    +        /// version
    +        pub const CTRL_DATE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// version
    +            DATE: u32,
    +        }), base_address + 0x3fc);
    +    };
    +
    +    /// Debug Assist
    +    pub const ASSIST_DEBUG = struct {
    +        pub const base_address = 0x600ce000;
    +
    +        /// address: 0x600ce000
    +        /// ASSIST_DEBUG_C0RE_0_MONTR_ENA_REG
    +        pub const C0RE_0_MONTR_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core_0_area_dram0_0_rd_ena
    +            CORE_0_AREA_DRAM0_0_RD_ENA: u1,
    +            /// reg_core_0_area_dram0_0_wr_ena
    +            CORE_0_AREA_DRAM0_0_WR_ENA: u1,
    +            /// reg_core_0_area_dram0_1_rd_ena
    +            CORE_0_AREA_DRAM0_1_RD_ENA: u1,
    +            /// reg_core_0_area_dram0_1_wr_ena
    +            CORE_0_AREA_DRAM0_1_WR_ENA: u1,
    +            /// reg_core_0_area_pif_0_rd_ena
    +            CORE_0_AREA_PIF_0_RD_ENA: u1,
    +            /// reg_core_0_area_pif_0_wr_ena
    +            CORE_0_AREA_PIF_0_WR_ENA: u1,
    +            /// reg_core_0_area_pif_1_rd_ena
    +            CORE_0_AREA_PIF_1_RD_ENA: u1,
    +            /// reg_core_0_area_pif_1_wr_ena
    +            CORE_0_AREA_PIF_1_WR_ENA: u1,
    +            /// reg_core_0_sp_spill_min_ena
    +            CORE_0_SP_SPILL_MIN_ENA: u1,
    +            /// reg_core_0_sp_spill_max_ena
    +            CORE_0_SP_SPILL_MAX_ENA: u1,
    +            /// reg_core_0_iram0_exception_monitor_ena
    +            CORE_0_IRAM0_EXCEPTION_MONITOR_ENA: u1,
    +            /// reg_core_0_dram0_exception_monitor_ena
    +            CORE_0_DRAM0_EXCEPTION_MONITOR_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0x0);
    +
    +        /// address: 0x600ce004
    +        /// ASSIST_DEBUG_CORE_0_INTR_RAW_REG
    +        pub const CORE_0_INTR_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core_0_area_dram0_0_rd_raw
    +            CORE_0_AREA_DRAM0_0_RD_RAW: u1,
    +            /// reg_core_0_area_dram0_0_wr_raw
    +            CORE_0_AREA_DRAM0_0_WR_RAW: u1,
    +            /// reg_core_0_area_dram0_1_rd_raw
    +            CORE_0_AREA_DRAM0_1_RD_RAW: u1,
    +            /// reg_core_0_area_dram0_1_wr_raw
    +            CORE_0_AREA_DRAM0_1_WR_RAW: u1,
    +            /// reg_core_0_area_pif_0_rd_raw
    +            CORE_0_AREA_PIF_0_RD_RAW: u1,
    +            /// reg_core_0_area_pif_0_wr_raw
    +            CORE_0_AREA_PIF_0_WR_RAW: u1,
    +            /// reg_core_0_area_pif_1_rd_raw
    +            CORE_0_AREA_PIF_1_RD_RAW: u1,
    +            /// reg_core_0_area_pif_1_wr_raw
    +            CORE_0_AREA_PIF_1_WR_RAW: u1,
    +            /// reg_core_0_sp_spill_min_raw
    +            CORE_0_SP_SPILL_MIN_RAW: u1,
    +            /// reg_core_0_sp_spill_max_raw
    +            CORE_0_SP_SPILL_MAX_RAW: u1,
    +            /// reg_core_0_iram0_exception_monitor_raw
    +            CORE_0_IRAM0_EXCEPTION_MONITOR_RAW: u1,
    +            /// reg_core_0_dram0_exception_monitor_raw
    +            CORE_0_DRAM0_EXCEPTION_MONITOR_RAW: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0x4);
    +
    +        /// address: 0x600ce008
    +        /// ASSIST_DEBUG_CORE_0_INTR_ENA_REG
    +        pub const CORE_0_INTR_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core_0_area_dram0_0_rd_intr_ena
    +            CORE_0_AREA_DRAM0_0_RD_INTR_ENA: u1,
    +            /// reg_core_0_area_dram0_0_wr_intr_ena
    +            CORE_0_AREA_DRAM0_0_WR_INTR_ENA: u1,
    +            /// reg_core_0_area_dram0_1_rd_intr_ena
    +            CORE_0_AREA_DRAM0_1_RD_INTR_ENA: u1,
    +            /// reg_core_0_area_dram0_1_wr_intr_ena
    +            CORE_0_AREA_DRAM0_1_WR_INTR_ENA: u1,
    +            /// reg_core_0_area_pif_0_rd_intr_ena
    +            CORE_0_AREA_PIF_0_RD_INTR_ENA: u1,
    +            /// reg_core_0_area_pif_0_wr_intr_ena
    +            CORE_0_AREA_PIF_0_WR_INTR_ENA: u1,
    +            /// reg_core_0_area_pif_1_rd_intr_ena
    +            CORE_0_AREA_PIF_1_RD_INTR_ENA: u1,
    +            /// reg_core_0_area_pif_1_wr_intr_ena
    +            CORE_0_AREA_PIF_1_WR_INTR_ENA: u1,
    +            /// reg_core_0_sp_spill_min_intr_ena
    +            CORE_0_SP_SPILL_MIN_INTR_ENA: u1,
    +            /// reg_core_0_sp_spill_max_intr_ena
    +            CORE_0_SP_SPILL_MAX_INTR_ENA: u1,
    +            /// reg_core_0_iram0_exception_monitor_ena
    +            CORE_0_IRAM0_EXCEPTION_MONITOR_RLS: u1,
    +            /// reg_core_0_dram0_exception_monitor_ena
    +            CORE_0_DRAM0_EXCEPTION_MONITOR_RLS: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0x8);
    +
    +        /// address: 0x600ce00c
    +        /// ASSIST_DEBUG_CORE_0_INTR_CLR_REG
    +        pub const CORE_0_INTR_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core_0_area_dram0_0_rd_clr
    +            CORE_0_AREA_DRAM0_0_RD_CLR: u1,
    +            /// reg_core_0_area_dram0_0_wr_clr
    +            CORE_0_AREA_DRAM0_0_WR_CLR: u1,
    +            /// reg_core_0_area_dram0_1_rd_clr
    +            CORE_0_AREA_DRAM0_1_RD_CLR: u1,
    +            /// reg_core_0_area_dram0_1_wr_clr
    +            CORE_0_AREA_DRAM0_1_WR_CLR: u1,
    +            /// reg_core_0_area_pif_0_rd_clr
    +            CORE_0_AREA_PIF_0_RD_CLR: u1,
    +            /// reg_core_0_area_pif_0_wr_clr
    +            CORE_0_AREA_PIF_0_WR_CLR: u1,
    +            /// reg_core_0_area_pif_1_rd_clr
    +            CORE_0_AREA_PIF_1_RD_CLR: u1,
    +            /// reg_core_0_area_pif_1_wr_clr
    +            CORE_0_AREA_PIF_1_WR_CLR: u1,
    +            /// reg_core_0_sp_spill_min_clr
    +            CORE_0_SP_SPILL_MIN_CLR: u1,
    +            /// reg_core_0_sp_spill_max_clr
    +            CORE_0_SP_SPILL_MAX_CLR: u1,
    +            /// reg_core_0_iram0_exception_monitor_clr
    +            CORE_0_IRAM0_EXCEPTION_MONITOR_CLR: u1,
    +            /// reg_core_0_dram0_exception_monitor_clr
    +            CORE_0_DRAM0_EXCEPTION_MONITOR_CLR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0xc);
    +
    +        /// address: 0x600ce010
    +        /// ASSIST_DEBUG_CORE_0_AREA_DRAM0_0_MIN_REG
    +        pub const CORE_0_AREA_DRAM0_0_MIN = @intToPtr(*volatile u32, base_address + 0x10);
    +
    +        /// address: 0x600ce014
    +        /// ASSIST_DEBUG_CORE_0_AREA_DRAM0_0_MAX_REG
    +        pub const CORE_0_AREA_DRAM0_0_MAX = @intToPtr(*volatile u32, base_address + 0x14);
    +
    +        /// address: 0x600ce018
    +        /// ASSIST_DEBUG_CORE_0_AREA_DRAM0_1_MIN_REG
    +        pub const CORE_0_AREA_DRAM0_1_MIN = @intToPtr(*volatile u32, base_address + 0x18);
    +
    +        /// address: 0x600ce01c
    +        /// ASSIST_DEBUG_CORE_0_AREA_DRAM0_1_MAX_REG
    +        pub const CORE_0_AREA_DRAM0_1_MAX = @intToPtr(*volatile u32, base_address + 0x1c);
    +
    +        /// address: 0x600ce020
    +        /// ASSIST_DEBUG_CORE_0_AREA_PIF_0_MIN_REG
    +        pub const CORE_0_AREA_PIF_0_MIN = @intToPtr(*volatile u32, base_address + 0x20);
    +
    +        /// address: 0x600ce024
    +        /// ASSIST_DEBUG_CORE_0_AREA_PIF_0_MAX_REG
    +        pub const CORE_0_AREA_PIF_0_MAX = @intToPtr(*volatile u32, base_address + 0x24);
    +
    +        /// address: 0x600ce028
    +        /// ASSIST_DEBUG_CORE_0_AREA_PIF_1_MIN_REG
    +        pub const CORE_0_AREA_PIF_1_MIN = @intToPtr(*volatile u32, base_address + 0x28);
    +
    +        /// address: 0x600ce02c
    +        /// ASSIST_DEBUG_CORE_0_AREA_PIF_1_MAX_REG
    +        pub const CORE_0_AREA_PIF_1_MAX = @intToPtr(*volatile u32, base_address + 0x2c);
    +
    +        /// address: 0x600ce030
    +        /// ASSIST_DEBUG_CORE_0_AREA_PC_REG
    +        pub const CORE_0_AREA_PC = @intToPtr(*volatile u32, base_address + 0x30);
    +
    +        /// address: 0x600ce034
    +        /// ASSIST_DEBUG_CORE_0_AREA_SP_REG
    +        pub const CORE_0_AREA_SP = @intToPtr(*volatile u32, base_address + 0x34);
    +
    +        /// address: 0x600ce038
    +        /// ASSIST_DEBUG_CORE_0_SP_MIN_REG
    +        pub const CORE_0_SP_MIN = @intToPtr(*volatile u32, base_address + 0x38);
    +
    +        /// address: 0x600ce03c
    +        /// ASSIST_DEBUG_CORE_0_SP_MAX_REG
    +        pub const CORE_0_SP_MAX = @intToPtr(*volatile u32, base_address + 0x3c);
    +
    +        /// address: 0x600ce040
    +        /// ASSIST_DEBUG_CORE_0_SP_PC_REG
    +        pub const CORE_0_SP_PC = @intToPtr(*volatile u32, base_address + 0x40);
    +
    +        /// address: 0x600ce044
    +        /// ASSIST_DEBUG_CORE_0_RCD_EN_REG
    +        pub const CORE_0_RCD_EN = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core_0_rcd_recorden
    +            CORE_0_RCD_RECORDEN: u1,
    +            /// reg_core_0_rcd_pdebugen
    +            CORE_0_RCD_PDEBUGEN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0x44);
    +
    +        /// address: 0x600ce048
    +        /// ASSIST_DEBUG_CORE_0_RCD_PDEBUGPC_REG
    +        pub const CORE_0_RCD_PDEBUGPC = @intToPtr(*volatile u32, base_address + 0x48);
    +
    +        /// address: 0x600ce04c
    +        /// ASSIST_DEBUG_CORE_0_RCD_PDEBUGSP_REG
    +        pub const CORE_0_RCD_PDEBUGSP = @intToPtr(*volatile u32, base_address + 0x4c);
    +
    +        /// address: 0x600ce050
    +        /// ASSIST_DEBUG_CORE_0_RCD_PDEBUGSP_REG
    +        pub const CORE_0_IRAM0_EXCEPTION_MONITOR_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core_0_iram0_recording_addr_0
    +            CORE_0_IRAM0_RECORDING_ADDR_0: u24,
    +            /// reg_core_0_iram0_recording_wr_0
    +            CORE_0_IRAM0_RECORDING_WR_0: u1,
    +            /// reg_core_0_iram0_recording_loadstore_0
    +            CORE_0_IRAM0_RECORDING_LOADSTORE_0: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +        }), base_address + 0x50);
    +
    +        /// address: 0x600ce054
    +        /// ASSIST_DEBUG_CORE_0_IRAM0_EXCEPTION_MONITOR_1_REG
    +        pub const CORE_0_IRAM0_EXCEPTION_MONITOR_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core_0_iram0_recording_addr_1
    +            CORE_0_IRAM0_RECORDING_ADDR_1: u24,
    +            /// reg_core_0_iram0_recording_wr_1
    +            CORE_0_IRAM0_RECORDING_WR_1: u1,
    +            /// reg_core_0_iram0_recording_loadstore_1
    +            CORE_0_IRAM0_RECORDING_LOADSTORE_1: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +        }), base_address + 0x54);
    +
    +        /// address: 0x600ce058
    +        /// ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_0_REG
    +        pub const CORE_0_DRAM0_EXCEPTION_MONITOR_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core_0_dram0_recording_addr_0
    +            CORE_0_DRAM0_RECORDING_ADDR_0: u24,
    +            /// reg_core_0_dram0_recording_wr_0
    +            CORE_0_DRAM0_RECORDING_WR_0: u1,
    +            /// reg_core_0_dram0_recording_byteen_0
    +            CORE_0_DRAM0_RECORDING_BYTEEN_0: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +        }), base_address + 0x58);
    +
    +        /// address: 0x600ce05c
    +        /// ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_1_REG
    +        pub const CORE_0_DRAM0_EXCEPTION_MONITOR_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core_0_dram0_recording_pc_0
    +            CORE_0_DRAM0_RECORDING_PC_0: u32,
    +        }), base_address + 0x5c);
    +
    +        /// address: 0x600ce060
    +        /// ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_1_REG
    +        pub const CORE_0_DRAM0_EXCEPTION_MONITOR_2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core_0_dram0_recording_addr_1
    +            CORE_0_DRAM0_RECORDING_ADDR_1: u24,
    +            /// reg_core_0_dram0_recording_wr_1
    +            CORE_0_DRAM0_RECORDING_WR_1: u1,
    +            /// reg_core_0_dram0_recording_byteen_1
    +            CORE_0_DRAM0_RECORDING_BYTEEN_1: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +        }), base_address + 0x60);
    +
    +        /// address: 0x600ce064
    +        /// ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_3_REG
    +        pub const CORE_0_DRAM0_EXCEPTION_MONITOR_3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core_0_dram0_recording_pc_1
    +            CORE_0_DRAM0_RECORDING_PC_1: u32,
    +        }), base_address + 0x64);
    +
    +        /// address: 0x600ce068
    +        /// ASSIST_DEBUG_CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_0_REG
    +        pub const CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core_x_iram0_dram0_limit_cycle_0
    +            CORE_X_IRAM0_DRAM0_LIMIT_CYCLE_0: u20,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0x68);
    +
    +        /// address: 0x600ce06c
    +        /// ASSIST_DEBUG_CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_1_REG
    +        pub const CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core_x_iram0_dram0_limit_cycle_1
    +            CORE_X_IRAM0_DRAM0_LIMIT_CYCLE_1: u20,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0x6c);
    +
    +        /// address: 0x600ce070
    +        /// ASSIST_DEBUG_LOG_SETTING
    +        pub const LOG_SETTING = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_log_ena
    +            LOG_ENA: u3,
    +            /// reg_log_mode
    +            LOG_MODE: u4,
    +            /// reg_log_mem_loop_enable
    +            LOG_MEM_LOOP_ENABLE: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x70);
    +
    +        /// address: 0x600ce074
    +        /// ASSIST_DEBUG_LOG_DATA_0_REG
    +        pub const LOG_DATA_0 = @intToPtr(*volatile u32, base_address + 0x74);
    +
    +        /// address: 0x600ce078
    +        /// ASSIST_DEBUG_LOG_DATA_MASK_REG
    +        pub const LOG_DATA_MASK = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_log_data_size
    +            LOG_DATA_SIZE: u16,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x78);
    +
    +        /// address: 0x600ce07c
    +        /// ASSIST_DEBUG_LOG_MIN_REG
    +        pub const LOG_MIN = @intToPtr(*volatile u32, base_address + 0x7c);
    +
    +        /// address: 0x600ce080
    +        /// ASSIST_DEBUG_LOG_MAX_REG
    +        pub const LOG_MAX = @intToPtr(*volatile u32, base_address + 0x80);
    +
    +        /// address: 0x600ce084
    +        /// ASSIST_DEBUG_LOG_MEM_START_REG
    +        pub const LOG_MEM_START = @intToPtr(*volatile u32, base_address + 0x84);
    +
    +        /// address: 0x600ce088
    +        /// ASSIST_DEBUG_LOG_MEM_END_REG
    +        pub const LOG_MEM_END = @intToPtr(*volatile u32, base_address + 0x88);
    +
    +        /// address: 0x600ce08c
    +        /// ASSIST_DEBUG_LOG_MEM_WRITING_ADDR_REG
    +        pub const LOG_MEM_WRITING_ADDR = @intToPtr(*volatile u32, base_address + 0x8c);
    +
    +        /// address: 0x600ce090
    +        /// ASSIST_DEBUG_LOG_MEM_FULL_FLAG_REG
    +        pub const LOG_MEM_FULL_FLAG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_log_mem_full_flag
    +            LOG_MEM_FULL_FLAG: u1,
    +            /// reg_clr_log_mem_full_flag
    +            CLR_LOG_MEM_FULL_FLAG: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0x90);
    +
    +        /// address: 0x600ce094
    +        /// ASSIST_DEBUG_C0RE_0_LASTPC_BEFORE_EXCEPTION
    +        pub const C0RE_0_LASTPC_BEFORE_EXCEPTION = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core_0_lastpc_before_exc
    +            CORE_0_LASTPC_BEFORE_EXC: u32,
    +        }), base_address + 0x94);
    +
    +        /// address: 0x600ce098
    +        /// ASSIST_DEBUG_C0RE_0_DEBUG_MODE
    +        pub const C0RE_0_DEBUG_MODE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core_0_debug_mode
    +            CORE_0_DEBUG_MODE: u1,
    +            /// reg_core_0_debug_module_active
    +            CORE_0_DEBUG_MODULE_ACTIVE: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0x98);
    +
    +        /// address: 0x600ce1fc
    +        /// ASSIST_DEBUG_DATE_REG
    +        pub const DATE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_assist_debug_date
    +            ASSIST_DEBUG_DATE: u28,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +        }), base_address + 0x1fc);
    +    };
    +
    +    /// DMA (Direct Memory Access) Controller
    +    pub const DMA = struct {
    +        pub const base_address = 0x6003f000;
    +
    +        /// address: 0x6003f000
    +        /// DMA_INT_RAW_CH0_REG.
    +        pub const INT_RAW_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The raw interrupt bit turns to high level when the last data pointed by one
    +            /// inlink descriptor has been received for Rx channel 0.
    +            IN_DONE_CH0_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when the last data pointed by one
    +            /// inlink descriptor has been received for Rx channel 0. For UHCI0, the raw
    +            /// interrupt bit turns to high level when the last data pointed by one inlink
    +            /// descriptor has been received and no data error is detected for Rx channel 0.
    +            IN_SUC_EOF_CH0_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when data error is detected only in
    +            /// the case that the peripheral is UHCI0 for Rx channel 0. For other peripherals,
    +            /// this raw interrupt is reserved.
    +            IN_ERR_EOF_CH0_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when the last data pointed by one
    +            /// outlink descriptor has been transmitted to peripherals for Tx channel 0.
    +            OUT_DONE_CH0_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when the last data pointed by one
    +            /// outlink descriptor has been read from memory for Tx channel 0.
    +            OUT_EOF_CH0_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when detecting inlink descriptor
    +            /// error, including owner error, the second and third word error of inlink
    +            /// descriptor for Rx channel 0.
    +            IN_DSCR_ERR_CH0_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when detecting outlink descriptor
    +            /// error, including owner error, the second and third word error of outlink
    +            /// descriptor for Tx channel 0.
    +            OUT_DSCR_ERR_CH0_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when Rx buffer pointed by inlink is
    +            /// full and receiving data is not completed, but there is no more inlink for Rx
    +            /// channel 0.
    +            IN_DSCR_EMPTY_CH0_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when data corresponding a outlink
    +            /// (includes one link descriptor or few link descriptors) is transmitted out for Tx
    +            /// channel 0.
    +            OUT_TOTAL_EOF_CH0_INT_RAW: u1,
    +            /// This raw interrupt bit turns to high level when level 1 fifo of Rx channel 0 is
    +            /// overflow.
    +            INFIFO_OVF_CH0_INT_RAW: u1,
    +            /// This raw interrupt bit turns to high level when level 1 fifo of Rx channel 0 is
    +            /// underflow.
    +            INFIFO_UDF_CH0_INT_RAW: u1,
    +            /// This raw interrupt bit turns to high level when level 1 fifo of Tx channel 0 is
    +            /// overflow.
    +            OUTFIFO_OVF_CH0_INT_RAW: u1,
    +            /// This raw interrupt bit turns to high level when level 1 fifo of Tx channel 0 is
    +            /// underflow.
    +            OUTFIFO_UDF_CH0_INT_RAW: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +        }), base_address + 0x0);
    +
    +        /// address: 0x6003f004
    +        /// DMA_INT_ST_CH0_REG.
    +        pub const INT_ST_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The raw interrupt status bit for the IN_DONE_CH_INT interrupt.
    +            IN_DONE_CH0_INT_ST: u1,
    +            /// The raw interrupt status bit for the IN_SUC_EOF_CH_INT interrupt.
    +            IN_SUC_EOF_CH0_INT_ST: u1,
    +            /// The raw interrupt status bit for the IN_ERR_EOF_CH_INT interrupt.
    +            IN_ERR_EOF_CH0_INT_ST: u1,
    +            /// The raw interrupt status bit for the OUT_DONE_CH_INT interrupt.
    +            OUT_DONE_CH0_INT_ST: u1,
    +            /// The raw interrupt status bit for the OUT_EOF_CH_INT interrupt.
    +            OUT_EOF_CH0_INT_ST: u1,
    +            /// The raw interrupt status bit for the IN_DSCR_ERR_CH_INT interrupt.
    +            IN_DSCR_ERR_CH0_INT_ST: u1,
    +            /// The raw interrupt status bit for the OUT_DSCR_ERR_CH_INT interrupt.
    +            OUT_DSCR_ERR_CH0_INT_ST: u1,
    +            /// The raw interrupt status bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    +            IN_DSCR_EMPTY_CH0_INT_ST: u1,
    +            /// The raw interrupt status bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    +            OUT_TOTAL_EOF_CH0_INT_ST: u1,
    +            /// The raw interrupt status bit for the INFIFO_OVF_L1_CH_INT interrupt.
    +            INFIFO_OVF_CH0_INT_ST: u1,
    +            /// The raw interrupt status bit for the INFIFO_UDF_L1_CH_INT interrupt.
    +            INFIFO_UDF_CH0_INT_ST: u1,
    +            /// The raw interrupt status bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    +            OUTFIFO_OVF_CH0_INT_ST: u1,
    +            /// The raw interrupt status bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    +            OUTFIFO_UDF_CH0_INT_ST: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +        }), base_address + 0x4);
    +
    +        /// address: 0x6003f008
    +        /// DMA_INT_ENA_CH0_REG.
    +        pub const INT_ENA_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The interrupt enable bit for the IN_DONE_CH_INT interrupt.
    +            IN_DONE_CH0_INT_ENA: u1,
    +            /// The interrupt enable bit for the IN_SUC_EOF_CH_INT interrupt.
    +            IN_SUC_EOF_CH0_INT_ENA: u1,
    +            /// The interrupt enable bit for the IN_ERR_EOF_CH_INT interrupt.
    +            IN_ERR_EOF_CH0_INT_ENA: u1,
    +            /// The interrupt enable bit for the OUT_DONE_CH_INT interrupt.
    +            OUT_DONE_CH0_INT_ENA: u1,
    +            /// The interrupt enable bit for the OUT_EOF_CH_INT interrupt.
    +            OUT_EOF_CH0_INT_ENA: u1,
    +            /// The interrupt enable bit for the IN_DSCR_ERR_CH_INT interrupt.
    +            IN_DSCR_ERR_CH0_INT_ENA: u1,
    +            /// The interrupt enable bit for the OUT_DSCR_ERR_CH_INT interrupt.
    +            OUT_DSCR_ERR_CH0_INT_ENA: u1,
    +            /// The interrupt enable bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    +            IN_DSCR_EMPTY_CH0_INT_ENA: u1,
    +            /// The interrupt enable bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    +            OUT_TOTAL_EOF_CH0_INT_ENA: u1,
    +            /// The interrupt enable bit for the INFIFO_OVF_L1_CH_INT interrupt.
    +            INFIFO_OVF_CH0_INT_ENA: u1,
    +            /// The interrupt enable bit for the INFIFO_UDF_L1_CH_INT interrupt.
    +            INFIFO_UDF_CH0_INT_ENA: u1,
    +            /// The interrupt enable bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    +            OUTFIFO_OVF_CH0_INT_ENA: u1,
    +            /// The interrupt enable bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    +            OUTFIFO_UDF_CH0_INT_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +        }), base_address + 0x8);
    +
    +        /// address: 0x6003f00c
    +        /// DMA_INT_CLR_CH0_REG.
    +        pub const INT_CLR_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Set this bit to clear the IN_DONE_CH_INT interrupt.
    +            IN_DONE_CH0_INT_CLR: u1,
    +            /// Set this bit to clear the IN_SUC_EOF_CH_INT interrupt.
    +            IN_SUC_EOF_CH0_INT_CLR: u1,
    +            /// Set this bit to clear the IN_ERR_EOF_CH_INT interrupt.
    +            IN_ERR_EOF_CH0_INT_CLR: u1,
    +            /// Set this bit to clear the OUT_DONE_CH_INT interrupt.
    +            OUT_DONE_CH0_INT_CLR: u1,
    +            /// Set this bit to clear the OUT_EOF_CH_INT interrupt.
    +            OUT_EOF_CH0_INT_CLR: u1,
    +            /// Set this bit to clear the IN_DSCR_ERR_CH_INT interrupt.
    +            IN_DSCR_ERR_CH0_INT_CLR: u1,
    +            /// Set this bit to clear the OUT_DSCR_ERR_CH_INT interrupt.
    +            OUT_DSCR_ERR_CH0_INT_CLR: u1,
    +            /// Set this bit to clear the IN_DSCR_EMPTY_CH_INT interrupt.
    +            IN_DSCR_EMPTY_CH0_INT_CLR: u1,
    +            /// Set this bit to clear the OUT_TOTAL_EOF_CH_INT interrupt.
    +            OUT_TOTAL_EOF_CH0_INT_CLR: u1,
    +            /// Set this bit to clear the INFIFO_OVF_L1_CH_INT interrupt.
    +            INFIFO_OVF_CH0_INT_CLR: u1,
    +            /// Set this bit to clear the INFIFO_UDF_L1_CH_INT interrupt.
    +            INFIFO_UDF_CH0_INT_CLR: u1,
    +            /// Set this bit to clear the OUTFIFO_OVF_L1_CH_INT interrupt.
    +            OUTFIFO_OVF_CH0_INT_CLR: u1,
    +            /// Set this bit to clear the OUTFIFO_UDF_L1_CH_INT interrupt.
    +            OUTFIFO_UDF_CH0_INT_CLR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +        }), base_address + 0xc);
    +
    +        /// address: 0x6003f010
    +        /// DMA_INT_RAW_CH1_REG.
    +        pub const INT_RAW_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The raw interrupt bit turns to high level when the last data pointed by one
    +            /// inlink descriptor has been received for Rx channel 1.
    +            IN_DONE_CH1_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when the last data pointed by one
    +            /// inlink descriptor has been received for Rx channel 1. For UHCI0, the raw
    +            /// interrupt bit turns to high level when the last data pointed by one inlink
    +            /// descriptor has been received and no data error is detected for Rx channel 1.
    +            IN_SUC_EOF_CH1_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when data error is detected only in
    +            /// the case that the peripheral is UHCI0 for Rx channel 1. For other peripherals,
    +            /// this raw interrupt is reserved.
    +            IN_ERR_EOF_CH1_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when the last data pointed by one
    +            /// outlink descriptor has been transmitted to peripherals for Tx channel 1.
    +            OUT_DONE_CH1_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when the last data pointed by one
    +            /// outlink descriptor has been read from memory for Tx channel 1.
    +            OUT_EOF_CH1_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when detecting inlink descriptor
    +            /// error, including owner error, the second and third word error of inlink
    +            /// descriptor for Rx channel 1.
    +            IN_DSCR_ERR_CH1_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when detecting outlink descriptor
    +            /// error, including owner error, the second and third word error of outlink
    +            /// descriptor for Tx channel 1.
    +            OUT_DSCR_ERR_CH1_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when Rx buffer pointed by inlink is
    +            /// full and receiving data is not completed, but there is no more inlink for Rx
    +            /// channel 1.
    +            IN_DSCR_EMPTY_CH1_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when data corresponding a outlink
    +            /// (includes one link descriptor or few link descriptors) is transmitted out for Tx
    +            /// channel 1.
    +            OUT_TOTAL_EOF_CH1_INT_RAW: u1,
    +            /// This raw interrupt bit turns to high level when level 1 fifo of Rx channel 1 is
    +            /// overflow.
    +            INFIFO_OVF_CH1_INT_RAW: u1,
    +            /// This raw interrupt bit turns to high level when level 1 fifo of Rx channel 1 is
    +            /// underflow.
    +            INFIFO_UDF_CH1_INT_RAW: u1,
    +            /// This raw interrupt bit turns to high level when level 1 fifo of Tx channel 1 is
    +            /// overflow.
    +            OUTFIFO_OVF_CH1_INT_RAW: u1,
    +            /// This raw interrupt bit turns to high level when level 1 fifo of Tx channel 1 is
    +            /// underflow.
    +            OUTFIFO_UDF_CH1_INT_RAW: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +        }), base_address + 0x10);
    +
    +        /// address: 0x6003f014
    +        /// DMA_INT_ST_CH1_REG.
    +        pub const INT_ST_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The raw interrupt status bit for the IN_DONE_CH_INT interrupt.
    +            IN_DONE_CH1_INT_ST: u1,
    +            /// The raw interrupt status bit for the IN_SUC_EOF_CH_INT interrupt.
    +            IN_SUC_EOF_CH1_INT_ST: u1,
    +            /// The raw interrupt status bit for the IN_ERR_EOF_CH_INT interrupt.
    +            IN_ERR_EOF_CH1_INT_ST: u1,
    +            /// The raw interrupt status bit for the OUT_DONE_CH_INT interrupt.
    +            OUT_DONE_CH1_INT_ST: u1,
    +            /// The raw interrupt status bit for the OUT_EOF_CH_INT interrupt.
    +            OUT_EOF_CH1_INT_ST: u1,
    +            /// The raw interrupt status bit for the IN_DSCR_ERR_CH_INT interrupt.
    +            IN_DSCR_ERR_CH1_INT_ST: u1,
    +            /// The raw interrupt status bit for the OUT_DSCR_ERR_CH_INT interrupt.
    +            OUT_DSCR_ERR_CH1_INT_ST: u1,
    +            /// The raw interrupt status bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    +            IN_DSCR_EMPTY_CH1_INT_ST: u1,
    +            /// The raw interrupt status bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    +            OUT_TOTAL_EOF_CH1_INT_ST: u1,
    +            /// The raw interrupt status bit for the INFIFO_OVF_L1_CH_INT interrupt.
    +            INFIFO_OVF_CH1_INT_ST: u1,
    +            /// The raw interrupt status bit for the INFIFO_UDF_L1_CH_INT interrupt.
    +            INFIFO_UDF_CH1_INT_ST: u1,
    +            /// The raw interrupt status bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    +            OUTFIFO_OVF_CH1_INT_ST: u1,
    +            /// The raw interrupt status bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    +            OUTFIFO_UDF_CH1_INT_ST: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +        }), base_address + 0x14);
    +
    +        /// address: 0x6003f018
    +        /// DMA_INT_ENA_CH1_REG.
    +        pub const INT_ENA_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The interrupt enable bit for the IN_DONE_CH_INT interrupt.
    +            IN_DONE_CH1_INT_ENA: u1,
    +            /// The interrupt enable bit for the IN_SUC_EOF_CH_INT interrupt.
    +            IN_SUC_EOF_CH1_INT_ENA: u1,
    +            /// The interrupt enable bit for the IN_ERR_EOF_CH_INT interrupt.
    +            IN_ERR_EOF_CH1_INT_ENA: u1,
    +            /// The interrupt enable bit for the OUT_DONE_CH_INT interrupt.
    +            OUT_DONE_CH1_INT_ENA: u1,
    +            /// The interrupt enable bit for the OUT_EOF_CH_INT interrupt.
    +            OUT_EOF_CH1_INT_ENA: u1,
    +            /// The interrupt enable bit for the IN_DSCR_ERR_CH_INT interrupt.
    +            IN_DSCR_ERR_CH1_INT_ENA: u1,
    +            /// The interrupt enable bit for the OUT_DSCR_ERR_CH_INT interrupt.
    +            OUT_DSCR_ERR_CH1_INT_ENA: u1,
    +            /// The interrupt enable bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    +            IN_DSCR_EMPTY_CH1_INT_ENA: u1,
    +            /// The interrupt enable bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    +            OUT_TOTAL_EOF_CH1_INT_ENA: u1,
    +            /// The interrupt enable bit for the INFIFO_OVF_L1_CH_INT interrupt.
    +            INFIFO_OVF_CH1_INT_ENA: u1,
    +            /// The interrupt enable bit for the INFIFO_UDF_L1_CH_INT interrupt.
    +            INFIFO_UDF_CH1_INT_ENA: u1,
    +            /// The interrupt enable bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    +            OUTFIFO_OVF_CH1_INT_ENA: u1,
    +            /// The interrupt enable bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    +            OUTFIFO_UDF_CH1_INT_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +        }), base_address + 0x18);
    +
    +        /// address: 0x6003f01c
    +        /// DMA_INT_CLR_CH1_REG.
    +        pub const INT_CLR_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Set this bit to clear the IN_DONE_CH_INT interrupt.
    +            IN_DONE_CH1_INT_CLR: u1,
    +            /// Set this bit to clear the IN_SUC_EOF_CH_INT interrupt.
    +            IN_SUC_EOF_CH1_INT_CLR: u1,
    +            /// Set this bit to clear the IN_ERR_EOF_CH_INT interrupt.
    +            IN_ERR_EOF_CH1_INT_CLR: u1,
    +            /// Set this bit to clear the OUT_DONE_CH_INT interrupt.
    +            OUT_DONE_CH1_INT_CLR: u1,
    +            /// Set this bit to clear the OUT_EOF_CH_INT interrupt.
    +            OUT_EOF_CH1_INT_CLR: u1,
    +            /// Set this bit to clear the IN_DSCR_ERR_CH_INT interrupt.
    +            IN_DSCR_ERR_CH1_INT_CLR: u1,
    +            /// Set this bit to clear the OUT_DSCR_ERR_CH_INT interrupt.
    +            OUT_DSCR_ERR_CH1_INT_CLR: u1,
    +            /// Set this bit to clear the IN_DSCR_EMPTY_CH_INT interrupt.
    +            IN_DSCR_EMPTY_CH1_INT_CLR: u1,
    +            /// Set this bit to clear the OUT_TOTAL_EOF_CH_INT interrupt.
    +            OUT_TOTAL_EOF_CH1_INT_CLR: u1,
    +            /// Set this bit to clear the INFIFO_OVF_L1_CH_INT interrupt.
    +            INFIFO_OVF_CH1_INT_CLR: u1,
    +            /// Set this bit to clear the INFIFO_UDF_L1_CH_INT interrupt.
    +            INFIFO_UDF_CH1_INT_CLR: u1,
    +            /// Set this bit to clear the OUTFIFO_OVF_L1_CH_INT interrupt.
    +            OUTFIFO_OVF_CH1_INT_CLR: u1,
    +            /// Set this bit to clear the OUTFIFO_UDF_L1_CH_INT interrupt.
    +            OUTFIFO_UDF_CH1_INT_CLR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +        }), base_address + 0x1c);
    +
    +        /// address: 0x6003f020
    +        /// DMA_INT_RAW_CH2_REG.
    +        pub const INT_RAW_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The raw interrupt bit turns to high level when the last data pointed by one
    +            /// inlink descriptor has been received for Rx channel 2.
    +            IN_DONE_CH2_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when the last data pointed by one
    +            /// inlink descriptor has been received for Rx channel 2. For UHCI0, the raw
    +            /// interrupt bit turns to high level when the last data pointed by one inlink
    +            /// descriptor has been received and no data error is detected for Rx channel 2.
    +            IN_SUC_EOF_CH2_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when data error is detected only in
    +            /// the case that the peripheral is UHCI0 for Rx channel 2. For other peripherals,
    +            /// this raw interrupt is reserved.
    +            IN_ERR_EOF_CH2_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when the last data pointed by one
    +            /// outlink descriptor has been transmitted to peripherals for Tx channel 2.
    +            OUT_DONE_CH2_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when the last data pointed by one
    +            /// outlink descriptor has been read from memory for Tx channel 2.
    +            OUT_EOF_CH2_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when detecting inlink descriptor
    +            /// error, including owner error, the second and third word error of inlink
    +            /// descriptor for Rx channel 2.
    +            IN_DSCR_ERR_CH2_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when detecting outlink descriptor
    +            /// error, including owner error, the second and third word error of outlink
    +            /// descriptor for Tx channel 2.
    +            OUT_DSCR_ERR_CH2_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when Rx buffer pointed by inlink is
    +            /// full and receiving data is not completed, but there is no more inlink for Rx
    +            /// channel 2.
    +            IN_DSCR_EMPTY_CH2_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when data corresponding a outlink
    +            /// (includes one link descriptor or few link descriptors) is transmitted out for Tx
    +            /// channel 2.
    +            OUT_TOTAL_EOF_CH2_INT_RAW: u1,
    +            /// This raw interrupt bit turns to high level when level 1 fifo of Rx channel 2 is
    +            /// overflow.
    +            INFIFO_OVF_CH2_INT_RAW: u1,
    +            /// This raw interrupt bit turns to high level when level 1 fifo of Rx channel 2 is
    +            /// underflow.
    +            INFIFO_UDF_CH2_INT_RAW: u1,
    +            /// This raw interrupt bit turns to high level when level 1 fifo of Tx channel 2 is
    +            /// overflow.
    +            OUTFIFO_OVF_CH2_INT_RAW: u1,
    +            /// This raw interrupt bit turns to high level when level 1 fifo of Tx channel 2 is
    +            /// underflow.
    +            OUTFIFO_UDF_CH2_INT_RAW: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +        }), base_address + 0x20);
    +
    +        /// address: 0x6003f024
    +        /// DMA_INT_ST_CH2_REG.
    +        pub const INT_ST_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The raw interrupt status bit for the IN_DONE_CH_INT interrupt.
    +            IN_DONE_CH2_INT_ST: u1,
    +            /// The raw interrupt status bit for the IN_SUC_EOF_CH_INT interrupt.
    +            IN_SUC_EOF_CH2_INT_ST: u1,
    +            /// The raw interrupt status bit for the IN_ERR_EOF_CH_INT interrupt.
    +            IN_ERR_EOF_CH2_INT_ST: u1,
    +            /// The raw interrupt status bit for the OUT_DONE_CH_INT interrupt.
    +            OUT_DONE_CH2_INT_ST: u1,
    +            /// The raw interrupt status bit for the OUT_EOF_CH_INT interrupt.
    +            OUT_EOF_CH2_INT_ST: u1,
    +            /// The raw interrupt status bit for the IN_DSCR_ERR_CH_INT interrupt.
    +            IN_DSCR_ERR_CH2_INT_ST: u1,
    +            /// The raw interrupt status bit for the OUT_DSCR_ERR_CH_INT interrupt.
    +            OUT_DSCR_ERR_CH2_INT_ST: u1,
    +            /// The raw interrupt status bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    +            IN_DSCR_EMPTY_CH2_INT_ST: u1,
    +            /// The raw interrupt status bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    +            OUT_TOTAL_EOF_CH2_INT_ST: u1,
    +            /// The raw interrupt status bit for the INFIFO_OVF_L1_CH_INT interrupt.
    +            INFIFO_OVF_CH2_INT_ST: u1,
    +            /// The raw interrupt status bit for the INFIFO_UDF_L1_CH_INT interrupt.
    +            INFIFO_UDF_CH2_INT_ST: u1,
    +            /// The raw interrupt status bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    +            OUTFIFO_OVF_CH2_INT_ST: u1,
    +            /// The raw interrupt status bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    +            OUTFIFO_UDF_CH2_INT_ST: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +        }), base_address + 0x24);
    +
    +        /// address: 0x6003f028
    +        /// DMA_INT_ENA_CH2_REG.
    +        pub const INT_ENA_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The interrupt enable bit for the IN_DONE_CH_INT interrupt.
    +            IN_DONE_CH2_INT_ENA: u1,
    +            /// The interrupt enable bit for the IN_SUC_EOF_CH_INT interrupt.
    +            IN_SUC_EOF_CH2_INT_ENA: u1,
    +            /// The interrupt enable bit for the IN_ERR_EOF_CH_INT interrupt.
    +            IN_ERR_EOF_CH2_INT_ENA: u1,
    +            /// The interrupt enable bit for the OUT_DONE_CH_INT interrupt.
    +            OUT_DONE_CH2_INT_ENA: u1,
    +            /// The interrupt enable bit for the OUT_EOF_CH_INT interrupt.
    +            OUT_EOF_CH2_INT_ENA: u1,
    +            /// The interrupt enable bit for the IN_DSCR_ERR_CH_INT interrupt.
    +            IN_DSCR_ERR_CH2_INT_ENA: u1,
    +            /// The interrupt enable bit for the OUT_DSCR_ERR_CH_INT interrupt.
    +            OUT_DSCR_ERR_CH2_INT_ENA: u1,
    +            /// The interrupt enable bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    +            IN_DSCR_EMPTY_CH2_INT_ENA: u1,
    +            /// The interrupt enable bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    +            OUT_TOTAL_EOF_CH2_INT_ENA: u1,
    +            /// The interrupt enable bit for the INFIFO_OVF_L1_CH_INT interrupt.
    +            INFIFO_OVF_CH2_INT_ENA: u1,
    +            /// The interrupt enable bit for the INFIFO_UDF_L1_CH_INT interrupt.
    +            INFIFO_UDF_CH2_INT_ENA: u1,
    +            /// The interrupt enable bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    +            OUTFIFO_OVF_CH2_INT_ENA: u1,
    +            /// The interrupt enable bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    +            OUTFIFO_UDF_CH2_INT_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +        }), base_address + 0x28);
    +
    +        /// address: 0x6003f02c
    +        /// DMA_INT_CLR_CH2_REG.
    +        pub const INT_CLR_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Set this bit to clear the IN_DONE_CH_INT interrupt.
    +            IN_DONE_CH2_INT_CLR: u1,
    +            /// Set this bit to clear the IN_SUC_EOF_CH_INT interrupt.
    +            IN_SUC_EOF_CH2_INT_CLR: u1,
    +            /// Set this bit to clear the IN_ERR_EOF_CH_INT interrupt.
    +            IN_ERR_EOF_CH2_INT_CLR: u1,
    +            /// Set this bit to clear the OUT_DONE_CH_INT interrupt.
    +            OUT_DONE_CH2_INT_CLR: u1,
    +            /// Set this bit to clear the OUT_EOF_CH_INT interrupt.
    +            OUT_EOF_CH2_INT_CLR: u1,
    +            /// Set this bit to clear the IN_DSCR_ERR_CH_INT interrupt.
    +            IN_DSCR_ERR_CH2_INT_CLR: u1,
    +            /// Set this bit to clear the OUT_DSCR_ERR_CH_INT interrupt.
    +            OUT_DSCR_ERR_CH2_INT_CLR: u1,
    +            /// Set this bit to clear the IN_DSCR_EMPTY_CH_INT interrupt.
    +            IN_DSCR_EMPTY_CH2_INT_CLR: u1,
    +            /// Set this bit to clear the OUT_TOTAL_EOF_CH_INT interrupt.
    +            OUT_TOTAL_EOF_CH2_INT_CLR: u1,
    +            /// Set this bit to clear the INFIFO_OVF_L1_CH_INT interrupt.
    +            INFIFO_OVF_CH2_INT_CLR: u1,
    +            /// Set this bit to clear the INFIFO_UDF_L1_CH_INT interrupt.
    +            INFIFO_UDF_CH2_INT_CLR: u1,
    +            /// Set this bit to clear the OUTFIFO_OVF_L1_CH_INT interrupt.
    +            OUTFIFO_OVF_CH2_INT_CLR: u1,
    +            /// Set this bit to clear the OUTFIFO_UDF_L1_CH_INT interrupt.
    +            OUTFIFO_UDF_CH2_INT_CLR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +        }), base_address + 0x2c);
    +
    +        /// address: 0x6003f040
    +        /// DMA_AHB_TEST_REG.
    +        pub const AHB_TEST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reserved
    +            AHB_TESTMODE: u3,
    +            reserved0: u1,
    +            /// reserved
    +            AHB_TESTADDR: u2,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +        }), base_address + 0x40);
    +
    +        /// address: 0x6003f044
    +        /// DMA_MISC_CONF_REG.
    +        pub const MISC_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Set this bit, then clear this bit to reset the internal ahb FSM.
    +            AHBM_RST_INTER: u1,
    +            reserved0: u1,
    +            /// Set this bit to disable priority arbitration function.
    +            ARB_PRI_DIS: u1,
    +            /// reg_clk_en
    +            CLK_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x44);
    +
    +        /// address: 0x6003f048
    +        /// DMA_DATE_REG.
    +        pub const DATE = @intToPtr(*volatile u32, base_address + 0x48);
    +
    +        /// address: 0x6003f070
    +        /// DMA_IN_CONF0_CH0_REG.
    +        pub const IN_CONF0_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This bit is used to reset DMA channel 0 Rx FSM and Rx FIFO pointer.
    +            IN_RST_CH0: u1,
    +            /// reserved
    +            IN_LOOP_TEST_CH0: u1,
    +            /// Set this bit to 1 to enable INCR burst transfer for Rx channel 0 reading link
    +            /// descriptor when accessing internal SRAM.
    +            INDSCR_BURST_EN_CH0: u1,
    +            /// Set this bit to 1 to enable INCR burst transfer for Rx channel 0 receiving data
    +            /// when accessing internal SRAM.
    +            IN_DATA_BURST_EN_CH0: u1,
    +            /// Set this bit 1 to enable automatic transmitting data from memory to memory via
    +            /// DMA.
    +            MEM_TRANS_EN_CH0: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +        }), base_address + 0x70);
    +
    +        /// address: 0x6003f074
    +        /// DMA_IN_CONF1_CH0_REG.
    +        pub const IN_CONF1_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            /// Set this bit to enable checking the owner attribute of the link descriptor.
    +            IN_CHECK_OWNER_CH0: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +        }), base_address + 0x74);
    +
    +        /// address: 0x6003f078
    +        /// DMA_INFIFO_STATUS_CH0_REG.
    +        pub const INFIFO_STATUS_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// L1 Rx FIFO full signal for Rx channel 0.
    +            INFIFO_FULL_CH0: u1,
    +            /// L1 Rx FIFO empty signal for Rx channel 0.
    +            INFIFO_EMPTY_CH0: u1,
    +            /// The register stores the byte number of the data in L1 Rx FIFO for Rx channel 0.
    +            INFIFO_CNT_CH0: u6,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            /// reserved
    +            IN_REMAIN_UNDER_1B_CH0: u1,
    +            /// reserved
    +            IN_REMAIN_UNDER_2B_CH0: u1,
    +            /// reserved
    +            IN_REMAIN_UNDER_3B_CH0: u1,
    +            /// reserved
    +            IN_REMAIN_UNDER_4B_CH0: u1,
    +            /// reserved
    +            IN_BUF_HUNGRY_CH0: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +        }), base_address + 0x78);
    +
    +        /// address: 0x6003f07c
    +        /// DMA_IN_POP_CH0_REG.
    +        pub const IN_POP_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the data popping from DMA FIFO.
    +            INFIFO_RDATA_CH0: u12,
    +            /// Set this bit to pop data from DMA FIFO.
    +            INFIFO_POP_CH0: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +        }), base_address + 0x7c);
    +
    +        /// address: 0x6003f080
    +        /// DMA_IN_LINK_CH0_REG.
    +        pub const IN_LINK_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the 20 least significant bits of the first inlink
    +            /// descriptor's address.
    +            INLINK_ADDR_CH0: u20,
    +            /// Set this bit to return to current inlink descriptor's address, when there are
    +            /// some errors in current receiving data.
    +            INLINK_AUTO_RET_CH0: u1,
    +            /// Set this bit to stop dealing with the inlink descriptors.
    +            INLINK_STOP_CH0: u1,
    +            /// Set this bit to start dealing with the inlink descriptors.
    +            INLINK_START_CH0: u1,
    +            /// Set this bit to mount a new inlink descriptor.
    +            INLINK_RESTART_CH0: u1,
    +            /// 1: the inlink descriptor's FSM is in idle state. 0: the inlink descriptor's FSM
    +            /// is working.
    +            INLINK_PARK_CH0: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +        }), base_address + 0x80);
    +
    +        /// address: 0x6003f084
    +        /// DMA_IN_STATE_CH0_REG.
    +        pub const IN_STATE_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the current inlink descriptor's address.
    +            INLINK_DSCR_ADDR_CH0: u18,
    +            /// reserved
    +            IN_DSCR_STATE_CH0: u2,
    +            /// reserved
    +            IN_STATE_CH0: u3,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +        }), base_address + 0x84);
    +
    +        /// address: 0x6003f088
    +        /// DMA_IN_SUC_EOF_DES_ADDR_CH0_REG.
    +        pub const IN_SUC_EOF_DES_ADDR_CH0 = @intToPtr(*volatile u32, base_address + 0x88);
    +
    +        /// address: 0x6003f08c
    +        /// DMA_IN_ERR_EOF_DES_ADDR_CH0_REG.
    +        pub const IN_ERR_EOF_DES_ADDR_CH0 = @intToPtr(*volatile u32, base_address + 0x8c);
    +
    +        /// address: 0x6003f090
    +        /// DMA_IN_DSCR_CH0_REG.
    +        pub const IN_DSCR_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The address of the current inlink descriptor x.
    +            INLINK_DSCR_CH0: u32,
    +        }), base_address + 0x90);
    +
    +        /// address: 0x6003f094
    +        /// DMA_IN_DSCR_BF0_CH0_REG.
    +        pub const IN_DSCR_BF0_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The address of the last inlink descriptor x-1.
    +            INLINK_DSCR_BF0_CH0: u32,
    +        }), base_address + 0x94);
    +
    +        /// address: 0x6003f098
    +        /// DMA_IN_DSCR_BF1_CH0_REG.
    +        pub const IN_DSCR_BF1_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The address of the second-to-last inlink descriptor x-2.
    +            INLINK_DSCR_BF1_CH0: u32,
    +        }), base_address + 0x98);
    +
    +        /// address: 0x6003f09c
    +        /// DMA_IN_PRI_CH0_REG.
    +        pub const IN_PRI_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The priority of Rx channel 0. The larger of the value, the higher of the
    +            /// priority.
    +            RX_PRI_CH0: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x9c);
    +
    +        /// address: 0x6003f0a0
    +        /// DMA_IN_PERI_SEL_CH0_REG.
    +        pub const IN_PERI_SEL_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register is used to select peripheral for Rx channel 0. 0:SPI2. 1:
    +            /// reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8:
    +            /// ADC_DAC.
    +            PERI_IN_SEL_CH0: u6,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +        }), base_address + 0xa0);
    +
    +        /// address: 0x6003f0d0
    +        /// DMA_OUT_CONF0_CH0_REG.
    +        pub const OUT_CONF0_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This bit is used to reset DMA channel 0 Tx FSM and Tx FIFO pointer.
    +            OUT_RST_CH0: u1,
    +            /// reserved
    +            OUT_LOOP_TEST_CH0: u1,
    +            /// Set this bit to enable automatic outlink-writeback when all the data in tx
    +            /// buffer has been transmitted.
    +            OUT_AUTO_WRBACK_CH0: u1,
    +            /// EOF flag generation mode when transmitting data. 1: EOF flag for Tx channel 0 is
    +            /// generated when data need to transmit has been popped from FIFO in DMA
    +            OUT_EOF_MODE_CH0: u1,
    +            /// Set this bit to 1 to enable INCR burst transfer for Tx channel 0 reading link
    +            /// descriptor when accessing internal SRAM.
    +            OUTDSCR_BURST_EN_CH0: u1,
    +            /// Set this bit to 1 to enable INCR burst transfer for Tx channel 0 transmitting
    +            /// data when accessing internal SRAM.
    +            OUT_DATA_BURST_EN_CH0: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +        }), base_address + 0xd0);
    +
    +        /// address: 0x6003f0d4
    +        /// DMA_OUT_CONF1_CH0_REG.
    +        pub const OUT_CONF1_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            /// Set this bit to enable checking the owner attribute of the link descriptor.
    +            OUT_CHECK_OWNER_CH0: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +        }), base_address + 0xd4);
    +
    +        /// address: 0x6003f0d8
    +        /// DMA_OUTFIFO_STATUS_CH0_REG.
    +        pub const OUTFIFO_STATUS_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// L1 Tx FIFO full signal for Tx channel 0.
    +            OUTFIFO_FULL_CH0: u1,
    +            /// L1 Tx FIFO empty signal for Tx channel 0.
    +            OUTFIFO_EMPTY_CH0: u1,
    +            /// The register stores the byte number of the data in L1 Tx FIFO for Tx channel 0.
    +            OUTFIFO_CNT_CH0: u6,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            /// reserved
    +            OUT_REMAIN_UNDER_1B_CH0: u1,
    +            /// reserved
    +            OUT_REMAIN_UNDER_2B_CH0: u1,
    +            /// reserved
    +            OUT_REMAIN_UNDER_3B_CH0: u1,
    +            /// reserved
    +            OUT_REMAIN_UNDER_4B_CH0: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +        }), base_address + 0xd8);
    +
    +        /// address: 0x6003f0dc
    +        /// DMA_OUT_PUSH_CH0_REG.
    +        pub const OUT_PUSH_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the data that need to be pushed into DMA FIFO.
    +            OUTFIFO_WDATA_CH0: u9,
    +            /// Set this bit to push data into DMA FIFO.
    +            OUTFIFO_PUSH_CH0: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +        }), base_address + 0xdc);
    +
    +        /// address: 0x6003f0e0
    +        /// DMA_OUT_LINK_CH0_REG.
    +        pub const OUT_LINK_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the 20 least significant bits of the first outlink
    +            /// descriptor's address.
    +            OUTLINK_ADDR_CH0: u20,
    +            /// Set this bit to stop dealing with the outlink descriptors.
    +            OUTLINK_STOP_CH0: u1,
    +            /// Set this bit to start dealing with the outlink descriptors.
    +            OUTLINK_START_CH0: u1,
    +            /// Set this bit to restart a new outlink from the last address.
    +            OUTLINK_RESTART_CH0: u1,
    +            /// 1: the outlink descriptor's FSM is in idle state. 0: the outlink descriptor's
    +            /// FSM is working.
    +            OUTLINK_PARK_CH0: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +        }), base_address + 0xe0);
    +
    +        /// address: 0x6003f0e4
    +        /// DMA_OUT_STATE_CH0_REG.
    +        pub const OUT_STATE_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the current outlink descriptor's address.
    +            OUTLINK_DSCR_ADDR_CH0: u18,
    +            /// reserved
    +            OUT_DSCR_STATE_CH0: u2,
    +            /// reserved
    +            OUT_STATE_CH0: u3,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +        }), base_address + 0xe4);
    +
    +        /// address: 0x6003f0e8
    +        /// DMA_OUT_EOF_DES_ADDR_CH0_REG.
    +        pub const OUT_EOF_DES_ADDR_CH0 = @intToPtr(*volatile u32, base_address + 0xe8);
    +
    +        /// address: 0x6003f0ec
    +        /// DMA_OUT_EOF_BFR_DES_ADDR_CH0_REG.
    +        pub const OUT_EOF_BFR_DES_ADDR_CH0 = @intToPtr(*volatile u32, base_address + 0xec);
    +
    +        /// address: 0x6003f0f0
    +        /// DMA_OUT_DSCR_CH0_REG.
    +        pub const OUT_DSCR_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The address of the current outlink descriptor y.
    +            OUTLINK_DSCR_CH0: u32,
    +        }), base_address + 0xf0);
    +
    +        /// address: 0x6003f0f4
    +        /// DMA_OUT_DSCR_BF0_CH0_REG.
    +        pub const OUT_DSCR_BF0_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The address of the last outlink descriptor y-1.
    +            OUTLINK_DSCR_BF0_CH0: u32,
    +        }), base_address + 0xf4);
    +
    +        /// address: 0x6003f0f8
    +        /// DMA_OUT_DSCR_BF1_CH0_REG.
    +        pub const OUT_DSCR_BF1_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The address of the second-to-last inlink descriptor x-2.
    +            OUTLINK_DSCR_BF1_CH0: u32,
    +        }), base_address + 0xf8);
    +
    +        /// address: 0x6003f0fc
    +        /// DMA_OUT_PRI_CH0_REG.
    +        pub const OUT_PRI_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The priority of Tx channel 0. The larger of the value, the higher of the
    +            /// priority.
    +            TX_PRI_CH0: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0xfc);
    +
    +        /// address: 0x6003f100
    +        /// DMA_OUT_PERI_SEL_CH0_REG.
    +        pub const OUT_PERI_SEL_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register is used to select peripheral for Tx channel 0. 0:SPI2. 1:
    +            /// reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8:
    +            /// ADC_DAC.
    +            PERI_OUT_SEL_CH0: u6,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +        }), base_address + 0x100);
    +
    +        /// address: 0x6003f130
    +        /// DMA_IN_CONF0_CH1_REG.
    +        pub const IN_CONF0_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This bit is used to reset DMA channel 1 Rx FSM and Rx FIFO pointer.
    +            IN_RST_CH1: u1,
    +            /// reserved
    +            IN_LOOP_TEST_CH1: u1,
    +            /// Set this bit to 1 to enable INCR burst transfer for Rx channel 1 reading link
    +            /// descriptor when accessing internal SRAM.
    +            INDSCR_BURST_EN_CH1: u1,
    +            /// Set this bit to 1 to enable INCR burst transfer for Rx channel 1 receiving data
    +            /// when accessing internal SRAM.
    +            IN_DATA_BURST_EN_CH1: u1,
    +            /// Set this bit 1 to enable automatic transmitting data from memory to memory via
    +            /// DMA.
    +            MEM_TRANS_EN_CH1: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +        }), base_address + 0x130);
    +
    +        /// address: 0x6003f134
    +        /// DMA_IN_CONF1_CH1_REG.
    +        pub const IN_CONF1_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            /// Set this bit to enable checking the owner attribute of the link descriptor.
    +            IN_CHECK_OWNER_CH1: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +        }), base_address + 0x134);
    +
    +        /// address: 0x6003f138
    +        /// DMA_INFIFO_STATUS_CH1_REG.
    +        pub const INFIFO_STATUS_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// L1 Rx FIFO full signal for Rx channel 1.
    +            INFIFO_FULL_CH1: u1,
    +            /// L1 Rx FIFO empty signal for Rx channel 1.
    +            INFIFO_EMPTY_CH1: u1,
    +            /// The register stores the byte number of the data in L1 Rx FIFO for Rx channel 1.
    +            INFIFO_CNT_CH1: u6,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            /// reserved
    +            IN_REMAIN_UNDER_1B_CH1: u1,
    +            /// reserved
    +            IN_REMAIN_UNDER_2B_CH1: u1,
    +            /// reserved
    +            IN_REMAIN_UNDER_3B_CH1: u1,
    +            /// reserved
    +            IN_REMAIN_UNDER_4B_CH1: u1,
    +            /// reserved
    +            IN_BUF_HUNGRY_CH1: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +        }), base_address + 0x138);
    +
    +        /// address: 0x6003f13c
    +        /// DMA_IN_POP_CH1_REG.
    +        pub const IN_POP_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the data popping from DMA FIFO.
    +            INFIFO_RDATA_CH1: u12,
    +            /// Set this bit to pop data from DMA FIFO.
    +            INFIFO_POP_CH1: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +        }), base_address + 0x13c);
    +
    +        /// address: 0x6003f140
    +        /// DMA_IN_LINK_CH1_REG.
    +        pub const IN_LINK_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the 20 least significant bits of the first inlink
    +            /// descriptor's address.
    +            INLINK_ADDR_CH1: u20,
    +            /// Set this bit to return to current inlink descriptor's address, when there are
    +            /// some errors in current receiving data.
    +            INLINK_AUTO_RET_CH1: u1,
    +            /// Set this bit to stop dealing with the inlink descriptors.
    +            INLINK_STOP_CH1: u1,
    +            /// Set this bit to start dealing with the inlink descriptors.
    +            INLINK_START_CH1: u1,
    +            /// Set this bit to mount a new inlink descriptor.
    +            INLINK_RESTART_CH1: u1,
    +            /// 1: the inlink descriptor's FSM is in idle state. 0: the inlink descriptor's FSM
    +            /// is working.
    +            INLINK_PARK_CH1: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +        }), base_address + 0x140);
    +
    +        /// address: 0x6003f144
    +        /// DMA_IN_STATE_CH1_REG.
    +        pub const IN_STATE_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the current inlink descriptor's address.
    +            INLINK_DSCR_ADDR_CH1: u18,
    +            /// reserved
    +            IN_DSCR_STATE_CH1: u2,
    +            /// reserved
    +            IN_STATE_CH1: u3,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +        }), base_address + 0x144);
    +
    +        /// address: 0x6003f148
    +        /// DMA_IN_SUC_EOF_DES_ADDR_CH1_REG.
    +        pub const IN_SUC_EOF_DES_ADDR_CH1 = @intToPtr(*volatile u32, base_address + 0x148);
    +
    +        /// address: 0x6003f14c
    +        /// DMA_IN_ERR_EOF_DES_ADDR_CH1_REG.
    +        pub const IN_ERR_EOF_DES_ADDR_CH1 = @intToPtr(*volatile u32, base_address + 0x14c);
    +
    +        /// address: 0x6003f150
    +        /// DMA_IN_DSCR_CH1_REG.
    +        pub const IN_DSCR_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The address of the current inlink descriptor x.
    +            INLINK_DSCR_CH1: u32,
    +        }), base_address + 0x150);
    +
    +        /// address: 0x6003f154
    +        /// DMA_IN_DSCR_BF0_CH1_REG.
    +        pub const IN_DSCR_BF0_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The address of the last inlink descriptor x-1.
    +            INLINK_DSCR_BF0_CH1: u32,
    +        }), base_address + 0x154);
    +
    +        /// address: 0x6003f158
    +        /// DMA_IN_DSCR_BF1_CH1_REG.
    +        pub const IN_DSCR_BF1_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The address of the second-to-last inlink descriptor x-2.
    +            INLINK_DSCR_BF1_CH1: u32,
    +        }), base_address + 0x158);
    +
    +        /// address: 0x6003f15c
    +        /// DMA_IN_PRI_CH1_REG.
    +        pub const IN_PRI_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The priority of Rx channel 1. The larger of the value, the higher of the
    +            /// priority.
    +            RX_PRI_CH1: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x15c);
    +
    +        /// address: 0x6003f160
    +        /// DMA_IN_PERI_SEL_CH1_REG.
    +        pub const IN_PERI_SEL_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register is used to select peripheral for Rx channel 1. 0:SPI2. 1:
    +            /// reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8:
    +            /// ADC_DAC.
    +            PERI_IN_SEL_CH1: u6,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +        }), base_address + 0x160);
    +
    +        /// address: 0x6003f190
    +        /// DMA_OUT_CONF0_CH1_REG.
    +        pub const OUT_CONF0_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This bit is used to reset DMA channel 1 Tx FSM and Tx FIFO pointer.
    +            OUT_RST_CH1: u1,
    +            /// reserved
    +            OUT_LOOP_TEST_CH1: u1,
    +            /// Set this bit to enable automatic outlink-writeback when all the data in tx
    +            /// buffer has been transmitted.
    +            OUT_AUTO_WRBACK_CH1: u1,
    +            /// EOF flag generation mode when transmitting data. 1: EOF flag for Tx channel 1 is
    +            /// generated when data need to transmit has been popped from FIFO in DMA
    +            OUT_EOF_MODE_CH1: u1,
    +            /// Set this bit to 1 to enable INCR burst transfer for Tx channel 1 reading link
    +            /// descriptor when accessing internal SRAM.
    +            OUTDSCR_BURST_EN_CH1: u1,
    +            /// Set this bit to 1 to enable INCR burst transfer for Tx channel 1 transmitting
    +            /// data when accessing internal SRAM.
    +            OUT_DATA_BURST_EN_CH1: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +        }), base_address + 0x190);
    +
    +        /// address: 0x6003f194
    +        /// DMA_OUT_CONF1_CH1_REG.
    +        pub const OUT_CONF1_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            /// Set this bit to enable checking the owner attribute of the link descriptor.
    +            OUT_CHECK_OWNER_CH1: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +        }), base_address + 0x194);
    +
    +        /// address: 0x6003f198
    +        /// DMA_OUTFIFO_STATUS_CH1_REG.
    +        pub const OUTFIFO_STATUS_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// L1 Tx FIFO full signal for Tx channel 1.
    +            OUTFIFO_FULL_CH1: u1,
    +            /// L1 Tx FIFO empty signal for Tx channel 1.
    +            OUTFIFO_EMPTY_CH1: u1,
    +            /// The register stores the byte number of the data in L1 Tx FIFO for Tx channel 1.
    +            OUTFIFO_CNT_CH1: u6,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            /// reserved
    +            OUT_REMAIN_UNDER_1B_CH1: u1,
    +            /// reserved
    +            OUT_REMAIN_UNDER_2B_CH1: u1,
    +            /// reserved
    +            OUT_REMAIN_UNDER_3B_CH1: u1,
    +            /// reserved
    +            OUT_REMAIN_UNDER_4B_CH1: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +        }), base_address + 0x198);
    +
    +        /// address: 0x6003f19c
    +        /// DMA_OUT_PUSH_CH1_REG.
    +        pub const OUT_PUSH_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the data that need to be pushed into DMA FIFO.
    +            OUTFIFO_WDATA_CH1: u9,
    +            /// Set this bit to push data into DMA FIFO.
    +            OUTFIFO_PUSH_CH1: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +        }), base_address + 0x19c);
    +
    +        /// address: 0x6003f1a0
    +        /// DMA_OUT_LINK_CH1_REG.
    +        pub const OUT_LINK_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the 20 least significant bits of the first outlink
    +            /// descriptor's address.
    +            OUTLINK_ADDR_CH1: u20,
    +            /// Set this bit to stop dealing with the outlink descriptors.
    +            OUTLINK_STOP_CH1: u1,
    +            /// Set this bit to start dealing with the outlink descriptors.
    +            OUTLINK_START_CH1: u1,
    +            /// Set this bit to restart a new outlink from the last address.
    +            OUTLINK_RESTART_CH1: u1,
    +            /// 1: the outlink descriptor's FSM is in idle state. 0: the outlink descriptor's
    +            /// FSM is working.
    +            OUTLINK_PARK_CH1: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +        }), base_address + 0x1a0);
    +
    +        /// address: 0x6003f1a4
    +        /// DMA_OUT_STATE_CH1_REG.
    +        pub const OUT_STATE_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the current outlink descriptor's address.
    +            OUTLINK_DSCR_ADDR_CH1: u18,
    +            /// reserved
    +            OUT_DSCR_STATE_CH1: u2,
    +            /// reserved
    +            OUT_STATE_CH1: u3,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +        }), base_address + 0x1a4);
    +
    +        /// address: 0x6003f1a8
    +        /// DMA_OUT_EOF_DES_ADDR_CH1_REG.
    +        pub const OUT_EOF_DES_ADDR_CH1 = @intToPtr(*volatile u32, base_address + 0x1a8);
    +
    +        /// address: 0x6003f1ac
    +        /// DMA_OUT_EOF_BFR_DES_ADDR_CH1_REG.
    +        pub const OUT_EOF_BFR_DES_ADDR_CH1 = @intToPtr(*volatile u32, base_address + 0x1ac);
    +
    +        /// address: 0x6003f1b0
    +        /// DMA_OUT_DSCR_CH1_REG.
    +        pub const OUT_DSCR_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The address of the current outlink descriptor y.
    +            OUTLINK_DSCR_CH1: u32,
    +        }), base_address + 0x1b0);
    +
    +        /// address: 0x6003f1b4
    +        /// DMA_OUT_DSCR_BF0_CH1_REG.
    +        pub const OUT_DSCR_BF0_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The address of the last outlink descriptor y-1.
    +            OUTLINK_DSCR_BF0_CH1: u32,
    +        }), base_address + 0x1b4);
    +
    +        /// address: 0x6003f1b8
    +        /// DMA_OUT_DSCR_BF1_CH1_REG.
    +        pub const OUT_DSCR_BF1_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The address of the second-to-last inlink descriptor x-2.
    +            OUTLINK_DSCR_BF1_CH1: u32,
    +        }), base_address + 0x1b8);
    +
    +        /// address: 0x6003f1bc
    +        /// DMA_OUT_PRI_CH1_REG.
    +        pub const OUT_PRI_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The priority of Tx channel 1. The larger of the value, the higher of the
    +            /// priority.
    +            TX_PRI_CH1: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x1bc);
    +
    +        /// address: 0x6003f1c0
    +        /// DMA_OUT_PERI_SEL_CH1_REG.
    +        pub const OUT_PERI_SEL_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register is used to select peripheral for Tx channel 1. 0:SPI2. 1:
    +            /// reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8:
    +            /// ADC_DAC.
    +            PERI_OUT_SEL_CH1: u6,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +        }), base_address + 0x1c0);
    +
    +        /// address: 0x6003f1f0
    +        /// DMA_IN_CONF0_CH2_REG.
    +        pub const IN_CONF0_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This bit is used to reset DMA channel 2 Rx FSM and Rx FIFO pointer.
    +            IN_RST_CH2: u1,
    +            /// reserved
    +            IN_LOOP_TEST_CH2: u1,
    +            /// Set this bit to 1 to enable INCR burst transfer for Rx channel 2 reading link
    +            /// descriptor when accessing internal SRAM.
    +            INDSCR_BURST_EN_CH2: u1,
    +            /// Set this bit to 1 to enable INCR burst transfer for Rx channel 2 receiving data
    +            /// when accessing internal SRAM.
    +            IN_DATA_BURST_EN_CH2: u1,
    +            /// Set this bit 1 to enable automatic transmitting data from memory to memory via
    +            /// DMA.
    +            MEM_TRANS_EN_CH2: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +        }), base_address + 0x1f0);
    +
    +        /// address: 0x6003f1f4
    +        /// DMA_IN_CONF1_CH2_REG.
    +        pub const IN_CONF1_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            /// Set this bit to enable checking the owner attribute of the link descriptor.
    +            IN_CHECK_OWNER_CH2: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +        }), base_address + 0x1f4);
    +
    +        /// address: 0x6003f1f8
    +        /// DMA_INFIFO_STATUS_CH2_REG.
    +        pub const INFIFO_STATUS_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// L1 Rx FIFO full signal for Rx channel 2.
    +            INFIFO_FULL_CH2: u1,
    +            /// L1 Rx FIFO empty signal for Rx channel 2.
    +            INFIFO_EMPTY_CH2: u1,
    +            /// The register stores the byte number of the data in L1 Rx FIFO for Rx channel 2.
    +            INFIFO_CNT_CH2: u6,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            /// reserved
    +            IN_REMAIN_UNDER_1B_CH2: u1,
    +            /// reserved
    +            IN_REMAIN_UNDER_2B_CH2: u1,
    +            /// reserved
    +            IN_REMAIN_UNDER_3B_CH2: u1,
    +            /// reserved
    +            IN_REMAIN_UNDER_4B_CH2: u1,
    +            /// reserved
    +            IN_BUF_HUNGRY_CH2: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +        }), base_address + 0x1f8);
    +
    +        /// address: 0x6003f1fc
    +        /// DMA_IN_POP_CH2_REG.
    +        pub const IN_POP_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the data popping from DMA FIFO.
    +            INFIFO_RDATA_CH2: u12,
    +            /// Set this bit to pop data from DMA FIFO.
    +            INFIFO_POP_CH2: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +        }), base_address + 0x1fc);
    +
    +        /// address: 0x6003f200
    +        /// DMA_IN_LINK_CH2_REG.
    +        pub const IN_LINK_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the 20 least significant bits of the first inlink
    +            /// descriptor's address.
    +            INLINK_ADDR_CH2: u20,
    +            /// Set this bit to return to current inlink descriptor's address, when there are
    +            /// some errors in current receiving data.
    +            INLINK_AUTO_RET_CH2: u1,
    +            /// Set this bit to stop dealing with the inlink descriptors.
    +            INLINK_STOP_CH2: u1,
    +            /// Set this bit to start dealing with the inlink descriptors.
    +            INLINK_START_CH2: u1,
    +            /// Set this bit to mount a new inlink descriptor.
    +            INLINK_RESTART_CH2: u1,
    +            /// 1: the inlink descriptor's FSM is in idle state. 0: the inlink descriptor's FSM
    +            /// is working.
    +            INLINK_PARK_CH2: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +        }), base_address + 0x200);
    +
    +        /// address: 0x6003f204
    +        /// DMA_IN_STATE_CH2_REG.
    +        pub const IN_STATE_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the current inlink descriptor's address.
    +            INLINK_DSCR_ADDR_CH2: u18,
    +            /// reserved
    +            IN_DSCR_STATE_CH2: u2,
    +            /// reserved
    +            IN_STATE_CH2: u3,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +        }), base_address + 0x204);
    +
    +        /// address: 0x6003f208
    +        /// DMA_IN_SUC_EOF_DES_ADDR_CH2_REG.
    +        pub const IN_SUC_EOF_DES_ADDR_CH2 = @intToPtr(*volatile u32, base_address + 0x208);
    +
    +        /// address: 0x6003f20c
    +        /// DMA_IN_ERR_EOF_DES_ADDR_CH2_REG.
    +        pub const IN_ERR_EOF_DES_ADDR_CH2 = @intToPtr(*volatile u32, base_address + 0x20c);
    +
    +        /// address: 0x6003f210
    +        /// DMA_IN_DSCR_CH2_REG.
    +        pub const IN_DSCR_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The address of the current inlink descriptor x.
    +            INLINK_DSCR_CH2: u32,
    +        }), base_address + 0x210);
    +
    +        /// address: 0x6003f214
    +        /// DMA_IN_DSCR_BF0_CH2_REG.
    +        pub const IN_DSCR_BF0_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The address of the last inlink descriptor x-1.
    +            INLINK_DSCR_BF0_CH2: u32,
    +        }), base_address + 0x214);
    +
    +        /// address: 0x6003f218
    +        /// DMA_IN_DSCR_BF1_CH2_REG.
    +        pub const IN_DSCR_BF1_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The address of the second-to-last inlink descriptor x-2.
    +            INLINK_DSCR_BF1_CH2: u32,
    +        }), base_address + 0x218);
    +
    +        /// address: 0x6003f21c
    +        /// DMA_IN_PRI_CH2_REG.
    +        pub const IN_PRI_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The priority of Rx channel 2. The larger of the value, the higher of the
    +            /// priority.
    +            RX_PRI_CH2: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x21c);
    +
    +        /// address: 0x6003f220
    +        /// DMA_IN_PERI_SEL_CH2_REG.
    +        pub const IN_PERI_SEL_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register is used to select peripheral for Rx channel 2. 0:SPI2. 1:
    +            /// reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8:
    +            /// ADC_DAC.
    +            PERI_IN_SEL_CH2: u6,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +        }), base_address + 0x220);
    +
    +        /// address: 0x6003f250
    +        /// DMA_OUT_CONF0_CH2_REG.
    +        pub const OUT_CONF0_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This bit is used to reset DMA channel 2 Tx FSM and Tx FIFO pointer.
    +            OUT_RST_CH2: u1,
    +            /// reserved
    +            OUT_LOOP_TEST_CH2: u1,
    +            /// Set this bit to enable automatic outlink-writeback when all the data in tx
    +            /// buffer has been transmitted.
    +            OUT_AUTO_WRBACK_CH2: u1,
    +            /// EOF flag generation mode when transmitting data. 1: EOF flag for Tx channel 2 is
    +            /// generated when data need to transmit has been popped from FIFO in DMA
    +            OUT_EOF_MODE_CH2: u1,
    +            /// Set this bit to 1 to enable INCR burst transfer for Tx channel 2 reading link
    +            /// descriptor when accessing internal SRAM.
    +            OUTDSCR_BURST_EN_CH2: u1,
    +            /// Set this bit to 1 to enable INCR burst transfer for Tx channel 2 transmitting
    +            /// data when accessing internal SRAM.
    +            OUT_DATA_BURST_EN_CH2: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +        }), base_address + 0x250);
    +
    +        /// address: 0x6003f254
    +        /// DMA_OUT_CONF1_CH2_REG.
    +        pub const OUT_CONF1_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            /// Set this bit to enable checking the owner attribute of the link descriptor.
    +            OUT_CHECK_OWNER_CH2: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +        }), base_address + 0x254);
    +
    +        /// address: 0x6003f258
    +        /// DMA_OUTFIFO_STATUS_CH2_REG.
    +        pub const OUTFIFO_STATUS_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// L1 Tx FIFO full signal for Tx channel 2.
    +            OUTFIFO_FULL_CH2: u1,
    +            /// L1 Tx FIFO empty signal for Tx channel 2.
    +            OUTFIFO_EMPTY_CH2: u1,
    +            /// The register stores the byte number of the data in L1 Tx FIFO for Tx channel 2.
    +            OUTFIFO_CNT_CH2: u6,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            /// reserved
    +            OUT_REMAIN_UNDER_1B_CH2: u1,
    +            /// reserved
    +            OUT_REMAIN_UNDER_2B_CH2: u1,
    +            /// reserved
    +            OUT_REMAIN_UNDER_3B_CH2: u1,
    +            /// reserved
    +            OUT_REMAIN_UNDER_4B_CH2: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +        }), base_address + 0x258);
    +
    +        /// address: 0x6003f25c
    +        /// DMA_OUT_PUSH_CH2_REG.
    +        pub const OUT_PUSH_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the data that need to be pushed into DMA FIFO.
    +            OUTFIFO_WDATA_CH2: u9,
    +            /// Set this bit to push data into DMA FIFO.
    +            OUTFIFO_PUSH_CH2: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +        }), base_address + 0x25c);
    +
    +        /// address: 0x6003f260
    +        /// DMA_OUT_LINK_CH2_REG.
    +        pub const OUT_LINK_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the 20 least significant bits of the first outlink
    +            /// descriptor's address.
    +            OUTLINK_ADDR_CH2: u20,
    +            /// Set this bit to stop dealing with the outlink descriptors.
    +            OUTLINK_STOP_CH2: u1,
    +            /// Set this bit to start dealing with the outlink descriptors.
    +            OUTLINK_START_CH2: u1,
    +            /// Set this bit to restart a new outlink from the last address.
    +            OUTLINK_RESTART_CH2: u1,
    +            /// 1: the outlink descriptor's FSM is in idle state. 0: the outlink descriptor's
    +            /// FSM is working.
    +            OUTLINK_PARK_CH2: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +        }), base_address + 0x260);
    +
    +        /// address: 0x6003f264
    +        /// DMA_OUT_STATE_CH2_REG.
    +        pub const OUT_STATE_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the current outlink descriptor's address.
    +            OUTLINK_DSCR_ADDR_CH2: u18,
    +            /// reserved
    +            OUT_DSCR_STATE_CH2: u2,
    +            /// reserved
    +            OUT_STATE_CH2: u3,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +        }), base_address + 0x264);
    +
    +        /// address: 0x6003f268
    +        /// DMA_OUT_EOF_DES_ADDR_CH2_REG.
    +        pub const OUT_EOF_DES_ADDR_CH2 = @intToPtr(*volatile u32, base_address + 0x268);
    +
    +        /// address: 0x6003f26c
    +        /// DMA_OUT_EOF_BFR_DES_ADDR_CH2_REG.
    +        pub const OUT_EOF_BFR_DES_ADDR_CH2 = @intToPtr(*volatile u32, base_address + 0x26c);
    +
    +        /// address: 0x6003f270
    +        /// DMA_OUT_DSCR_CH2_REG.
    +        pub const OUT_DSCR_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The address of the current outlink descriptor y.
    +            OUTLINK_DSCR_CH2: u32,
    +        }), base_address + 0x270);
    +
    +        /// address: 0x6003f274
    +        /// DMA_OUT_DSCR_BF0_CH2_REG.
    +        pub const OUT_DSCR_BF0_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The address of the last outlink descriptor y-1.
    +            OUTLINK_DSCR_BF0_CH2: u32,
    +        }), base_address + 0x274);
    +
    +        /// address: 0x6003f278
    +        /// DMA_OUT_DSCR_BF1_CH2_REG.
    +        pub const OUT_DSCR_BF1_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The address of the second-to-last inlink descriptor x-2.
    +            OUTLINK_DSCR_BF1_CH2: u32,
    +        }), base_address + 0x278);
    +
    +        /// address: 0x6003f27c
    +        /// DMA_OUT_PRI_CH2_REG.
    +        pub const OUT_PRI_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The priority of Tx channel 2. The larger of the value, the higher of the
    +            /// priority.
    +            TX_PRI_CH2: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x27c);
    +
    +        /// address: 0x6003f280
    +        /// DMA_OUT_PERI_SEL_CH2_REG.
    +        pub const OUT_PERI_SEL_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register is used to select peripheral for Tx channel 2. 0:SPI2. 1:
    +            /// reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8:
    +            /// ADC_DAC.
    +            PERI_OUT_SEL_CH2: u6,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +        }), base_address + 0x280);
    +    };
    +
    +    /// Digital Signature
    +    pub const DS = struct {
    +        pub const base_address = 0x6003d000;
    +
    +        /// address: 0x6003d000
    +        /// memory that stores Y
    +        pub const Y_MEM = @intToPtr(*volatile [512]u8, base_address + 0x0);
    +
    +        /// address: 0x6003d200
    +        /// memory that stores M
    +        pub const M_MEM = @intToPtr(*volatile [512]u8, base_address + 0x200);
    +
    +        /// address: 0x6003d400
    +        /// memory that stores Rb
    +        pub const RB_MEM = @intToPtr(*volatile [512]u8, base_address + 0x400);
    +
    +        /// address: 0x6003d600
    +        /// memory that stores BOX
    +        pub const BOX_MEM = @intToPtr(*volatile [48]u8, base_address + 0x600);
    +
    +        /// address: 0x6003d800
    +        /// memory that stores X
    +        pub const X_MEM = @intToPtr(*volatile [512]u8, base_address + 0x800);
    +
    +        /// address: 0x6003da00
    +        /// memory that stores Z
    +        pub const Z_MEM = @intToPtr(*volatile [512]u8, base_address + 0xa00);
    +
    +        /// address: 0x6003de00
    +        /// DS start control register
    +        pub const SET_START = @intToPtr(*volatile MmioInt(32, u1), base_address + 0xe00);
    +
    +        /// address: 0x6003de04
    +        /// DS continue control register
    +        pub const SET_CONTINUE = @intToPtr(*volatile MmioInt(32, u1), base_address + 0xe04);
    +
    +        /// address: 0x6003de08
    +        /// DS finish control register
    +        pub const SET_FINISH = @intToPtr(*volatile MmioInt(32, u1), base_address + 0xe08);
    +
    +        /// address: 0x6003de0c
    +        /// DS query busy register
    +        pub const QUERY_BUSY = @intToPtr(*volatile MmioInt(32, u1), base_address + 0xe0c);
    +
    +        /// address: 0x6003de10
    +        /// DS query key-wrong counter register
    +        pub const QUERY_KEY_WRONG = @intToPtr(*volatile MmioInt(32, u4), base_address + 0xe10);
    +
    +        /// address: 0x6003de14
    +        /// DS query check result register
    +        pub const QUERY_CHECK = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// MD checkout result. 1'b0: MD check pass, 1'b1: MD check fail
    +            MD_ERROR: u1,
    +            /// padding checkout result. 1'b0: a good padding, 1'b1: a bad padding
    +            PADDING_BAD: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0xe14);
    +
    +        /// address: 0x6003de20
    +        /// DS version control register
    +        pub const DATE = @intToPtr(*volatile MmioInt(32, u30), base_address + 0xe20);
    +    };
    +
    +    /// eFuse Controller
    +    pub const EFUSE = struct {
    +        pub const base_address = 0x60008800;
    +
    +        /// address: 0x60008800
    +        /// Register 0 that stores data to be programmed.
    +        pub const PGM_DATA0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The content of the 0th 32-bit data to be programmed.
    +            PGM_DATA_0: u32,
    +        }), base_address + 0x0);
    +
    +        /// address: 0x60008804
    +        /// Register 1 that stores data to be programmed.
    +        pub const PGM_DATA1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The content of the 1st 32-bit data to be programmed.
    +            PGM_DATA_1: u32,
    +        }), base_address + 0x4);
    +
    +        /// address: 0x60008808
    +        /// Register 2 that stores data to be programmed.
    +        pub const PGM_DATA2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The content of the 2nd 32-bit data to be programmed.
    +            PGM_DATA_2: u32,
    +        }), base_address + 0x8);
    +
    +        /// address: 0x6000880c
    +        /// Register 3 that stores data to be programmed.
    +        pub const PGM_DATA3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The content of the 3rd 32-bit data to be programmed.
    +            PGM_DATA_3: u32,
    +        }), base_address + 0xc);
    +
    +        /// address: 0x60008810
    +        /// Register 4 that stores data to be programmed.
    +        pub const PGM_DATA4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The content of the 4th 32-bit data to be programmed.
    +            PGM_DATA_4: u32,
    +        }), base_address + 0x10);
    +
    +        /// address: 0x60008814
    +        /// Register 5 that stores data to be programmed.
    +        pub const PGM_DATA5 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The content of the 5th 32-bit data to be programmed.
    +            PGM_DATA_5: u32,
    +        }), base_address + 0x14);
    +
    +        /// address: 0x60008818
    +        /// Register 6 that stores data to be programmed.
    +        pub const PGM_DATA6 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The content of the 6th 32-bit data to be programmed.
    +            PGM_DATA_6: u32,
    +        }), base_address + 0x18);
    +
    +        /// address: 0x6000881c
    +        /// Register 7 that stores data to be programmed.
    +        pub const PGM_DATA7 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The content of the 7th 32-bit data to be programmed.
    +            PGM_DATA_7: u32,
    +        }), base_address + 0x1c);
    +
    +        /// address: 0x60008820
    +        /// Register 0 that stores the RS code to be programmed.
    +        pub const PGM_CHECK_VALUE0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The content of the 0th 32-bit RS code to be programmed.
    +            PGM_RS_DATA_0: u32,
    +        }), base_address + 0x20);
    +
    +        /// address: 0x60008824
    +        /// Register 1 that stores the RS code to be programmed.
    +        pub const PGM_CHECK_VALUE1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The content of the 1st 32-bit RS code to be programmed.
    +            PGM_RS_DATA_1: u32,
    +        }), base_address + 0x24);
    +
    +        /// address: 0x60008828
    +        /// Register 2 that stores the RS code to be programmed.
    +        pub const PGM_CHECK_VALUE2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The content of the 2nd 32-bit RS code to be programmed.
    +            PGM_RS_DATA_2: u32,
    +        }), base_address + 0x28);
    +
    +        /// address: 0x6000882c
    +        /// BLOCK0 data register 0.
    +        pub const RD_WR_DIS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Disable programming of individual eFuses.
    +            WR_DIS: u32,
    +        }), base_address + 0x2c);
    +
    +        /// address: 0x60008830
    +        /// BLOCK0 data register 1.
    +        pub const RD_REPEAT_DATA0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Set this bit to disable reading from BlOCK4-10.
    +            RD_DIS: u7,
    +            /// Set this bit to disable boot from RTC RAM.
    +            DIS_RTC_RAM_BOOT: u1,
    +            /// Set this bit to disable Icache.
    +            DIS_ICACHE: u1,
    +            /// Set this bit to disable function of usb switch to jtag in module of usb device.
    +            DIS_USB_JTAG: u1,
    +            /// Set this bit to disable Icache in download mode (boot_mode[3:0] is 0, 1, 2, 3,
    +            /// 6, 7).
    +            DIS_DOWNLOAD_ICACHE: u1,
    +            /// Set this bit to disable usb device.
    +            DIS_USB_DEVICE: u1,
    +            /// Set this bit to disable the function that forces chip into download mode.
    +            DIS_FORCE_DOWNLOAD: u1,
    +            /// Reserved (used for four backups method).
    +            RPT4_RESERVED6: u1,
    +            /// Set this bit to disable CAN function.
    +            DIS_CAN: u1,
    +            /// Set this bit to enable selection between usb_to_jtag and pad_to_jtag through
    +            /// strapping gpio10 when both reg_dis_usb_jtag and reg_dis_pad_jtag are equal to 0.
    +            JTAG_SEL_ENABLE: u1,
    +            /// Set these bits to disable JTAG in the soft way (odd number 1 means disable ).
    +            /// JTAG can be enabled in HMAC module.
    +            SOFT_DIS_JTAG: u3,
    +            /// Set this bit to disable JTAG in the hard way. JTAG is disabled permanently.
    +            DIS_PAD_JTAG: u1,
    +            /// Set this bit to disable flash encryption when in download boot modes.
    +            DIS_DOWNLOAD_MANUAL_ENCRYPT: u1,
    +            /// Controls single-end input threshold vrefh, 1.76 V to 2 V with step of 80 mV,
    +            /// stored in eFuse.
    +            USB_DREFH: u2,
    +            /// Controls single-end input threshold vrefl, 0.8 V to 1.04 V with step of 80 mV,
    +            /// stored in eFuse.
    +            USB_DREFL: u2,
    +            /// Set this bit to exchange USB D+ and D- pins.
    +            USB_EXCHG_PINS: u1,
    +            /// Set this bit to vdd spi pin function as gpio.
    +            VDD_SPI_AS_GPIO: u1,
    +            /// Enable btlc gpio.
    +            BTLC_GPIO_ENABLE: u2,
    +            /// Set this bit to enable power glitch function.
    +            POWERGLITCH_EN: u1,
    +            /// Sample delay configuration of power glitch.
    +            POWER_GLITCH_DSENSE: u2,
    +        }), base_address + 0x30);
    +
    +        /// address: 0x60008834
    +        /// BLOCK0 data register 2.
    +        pub const RD_REPEAT_DATA1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Reserved (used for four backups method).
    +            RPT4_RESERVED2: u16,
    +            /// Selects RTC watchdog timeout threshold, in unit of slow clock cycle. 0: 40000.
    +            /// 1: 80000. 2: 160000. 3:320000.
    +            WDT_DELAY_SEL: u2,
    +            /// Set this bit to enable SPI boot encrypt/decrypt. Odd number of 1: enable. even
    +            /// number of 1: disable.
    +            SPI_BOOT_CRYPT_CNT: u3,
    +            /// Set this bit to enable revoking first secure boot key.
    +            SECURE_BOOT_KEY_REVOKE0: u1,
    +            /// Set this bit to enable revoking second secure boot key.
    +            SECURE_BOOT_KEY_REVOKE1: u1,
    +            /// Set this bit to enable revoking third secure boot key.
    +            SECURE_BOOT_KEY_REVOKE2: u1,
    +            /// Purpose of Key0.
    +            KEY_PURPOSE_0: u4,
    +            /// Purpose of Key1.
    +            KEY_PURPOSE_1: u4,
    +        }), base_address + 0x34);
    +
    +        /// address: 0x60008838
    +        /// BLOCK0 data register 3.
    +        pub const RD_REPEAT_DATA2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Purpose of Key2.
    +            KEY_PURPOSE_2: u4,
    +            /// Purpose of Key3.
    +            KEY_PURPOSE_3: u4,
    +            /// Purpose of Key4.
    +            KEY_PURPOSE_4: u4,
    +            /// Purpose of Key5.
    +            KEY_PURPOSE_5: u4,
    +            /// Reserved (used for four backups method).
    +            RPT4_RESERVED3: u4,
    +            /// Set this bit to enable secure boot.
    +            SECURE_BOOT_EN: u1,
    +            /// Set this bit to enable revoking aggressive secure boot.
    +            SECURE_BOOT_AGGRESSIVE_REVOKE: u1,
    +            /// Reserved (used for four backups method).
    +            RPT4_RESERVED0: u6,
    +            /// Configures flash waiting time after power-up, in unit of ms. If the value is
    +            /// less than 15, the waiting time is the configurable value; Otherwise, the waiting
    +            /// time is twice the configurable value.
    +            FLASH_TPUW: u4,
    +        }), base_address + 0x38);
    +
    +        /// address: 0x6000883c
    +        /// BLOCK0 data register 4.
    +        pub const RD_REPEAT_DATA3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Set this bit to disable download mode (boot_mode[3:0] = 0, 1, 2, 3, 6, 7).
    +            DIS_DOWNLOAD_MODE: u1,
    +            /// Set this bit to disable Legacy SPI boot mode (boot_mode[3:0] = 4).
    +            DIS_LEGACY_SPI_BOOT: u1,
    +            /// Selectes the default UART print channel. 0: UART0. 1: UART1.
    +            UART_PRINT_CHANNEL: u1,
    +            /// Set ECC mode in ROM, 0: ROM would Enable Flash ECC 16to18 byte mode. 1:ROM would
    +            /// use 16to17 byte mode.
    +            FLASH_ECC_MODE: u1,
    +            /// Set this bit to disable UART download mode through USB.
    +            DIS_USB_DOWNLOAD_MODE: u1,
    +            /// Set this bit to enable secure UART download mode.
    +            ENABLE_SECURITY_DOWNLOAD: u1,
    +            /// Set the default UARTboot message output mode. 00: Enabled. 01: Enabled when
    +            /// GPIO8 is low at reset. 10: Enabled when GPIO8 is high at reset. 11:disabled.
    +            UART_PRINT_CONTROL: u2,
    +            /// GPIO33-GPIO37 power supply selection in ROM code. 0: VDD3P3_CPU. 1: VDD_SPI.
    +            PIN_POWER_SELECTION: u1,
    +            /// Set the maximum lines of SPI flash. 0: four lines. 1: eight lines.
    +            FLASH_TYPE: u1,
    +            /// Set Flash page size.
    +            FLASH_PAGE_SIZE: u2,
    +            /// Set 1 to enable ECC for flash boot.
    +            FLASH_ECC_EN: u1,
    +            /// Set this bit to force ROM code to send a resume command during SPI boot.
    +            FORCE_SEND_RESUME: u1,
    +            /// Secure version (used by ESP-IDF anti-rollback feature).
    +            SECURE_VERSION: u16,
    +            /// Reserved (used for four backups method).
    +            RPT4_RESERVED1: u2,
    +        }), base_address + 0x3c);
    +
    +        /// address: 0x60008840
    +        /// BLOCK0 data register 5.
    +        pub const RD_REPEAT_DATA4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Reserved (used for four backups method).
    +            RPT4_RESERVED4: u24,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +        }), base_address + 0x40);
    +
    +        /// address: 0x60008844
    +        /// BLOCK1 data register 0.
    +        pub const RD_MAC_SPI_SYS_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the low 32 bits of MAC address.
    +            MAC_0: u32,
    +        }), base_address + 0x44);
    +
    +        /// address: 0x60008848
    +        /// BLOCK1 data register 1.
    +        pub const RD_MAC_SPI_SYS_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the high 16 bits of MAC address.
    +            MAC_1: u16,
    +            /// Stores the zeroth part of SPI_PAD_CONF.
    +            SPI_PAD_CONF_0: u16,
    +        }), base_address + 0x48);
    +
    +        /// address: 0x6000884c
    +        /// BLOCK1 data register 2.
    +        pub const RD_MAC_SPI_SYS_2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the first part of SPI_PAD_CONF.
    +            SPI_PAD_CONF_1: u32,
    +        }), base_address + 0x4c);
    +
    +        /// address: 0x60008850
    +        /// BLOCK1 data register 3.
    +        pub const RD_MAC_SPI_SYS_3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the second part of SPI_PAD_CONF.
    +            SPI_PAD_CONF_2: u18,
    +            /// Stores the fist 14 bits of the zeroth part of system data.
    +            SYS_DATA_PART0_0: u14,
    +        }), base_address + 0x50);
    +
    +        /// address: 0x60008854
    +        /// BLOCK1 data register 4.
    +        pub const RD_MAC_SPI_SYS_4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the fist 32 bits of the zeroth part of system data.
    +            SYS_DATA_PART0_1: u32,
    +        }), base_address + 0x54);
    +
    +        /// address: 0x60008858
    +        /// BLOCK1 data register 5.
    +        pub const RD_MAC_SPI_SYS_5 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the second 32 bits of the zeroth part of system data.
    +            SYS_DATA_PART0_2: u32,
    +        }), base_address + 0x58);
    +
    +        /// address: 0x6000885c
    +        /// Register 0 of BLOCK2 (system).
    +        pub const RD_SYS_PART1_DATA0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the zeroth 32 bits of the first part of system data.
    +            SYS_DATA_PART1_0: u32,
    +        }), base_address + 0x5c);
    +
    +        /// address: 0x60008860
    +        /// Register 1 of BLOCK2 (system).
    +        pub const RD_SYS_PART1_DATA1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the first 32 bits of the first part of system data.
    +            SYS_DATA_PART1_1: u32,
    +        }), base_address + 0x60);
    +
    +        /// address: 0x60008864
    +        /// Register 2 of BLOCK2 (system).
    +        pub const RD_SYS_PART1_DATA2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the second 32 bits of the first part of system data.
    +            SYS_DATA_PART1_2: u32,
    +        }), base_address + 0x64);
    +
    +        /// address: 0x60008868
    +        /// Register 3 of BLOCK2 (system).
    +        pub const RD_SYS_PART1_DATA3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the third 32 bits of the first part of system data.
    +            SYS_DATA_PART1_3: u32,
    +        }), base_address + 0x68);
    +
    +        /// address: 0x6000886c
    +        /// Register 4 of BLOCK2 (system).
    +        pub const RD_SYS_PART1_DATA4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the fourth 32 bits of the first part of system data.
    +            SYS_DATA_PART1_4: u32,
    +        }), base_address + 0x6c);
    +
    +        /// address: 0x60008870
    +        /// Register 5 of BLOCK2 (system).
    +        pub const RD_SYS_PART1_DATA5 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the fifth 32 bits of the first part of system data.
    +            SYS_DATA_PART1_5: u32,
    +        }), base_address + 0x70);
    +
    +        /// address: 0x60008874
    +        /// Register 6 of BLOCK2 (system).
    +        pub const RD_SYS_PART1_DATA6 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the sixth 32 bits of the first part of system data.
    +            SYS_DATA_PART1_6: u32,
    +        }), base_address + 0x74);
    +
    +        /// address: 0x60008878
    +        /// Register 7 of BLOCK2 (system).
    +        pub const RD_SYS_PART1_DATA7 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the seventh 32 bits of the first part of system data.
    +            SYS_DATA_PART1_7: u32,
    +        }), base_address + 0x78);
    +
    +        /// address: 0x6000887c
    +        /// Register 0 of BLOCK3 (user).
    +        pub const RD_USR_DATA0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the zeroth 32 bits of BLOCK3 (user).
    +            USR_DATA0: u32,
    +        }), base_address + 0x7c);
    +
    +        /// address: 0x60008880
    +        /// Register 1 of BLOCK3 (user).
    +        pub const RD_USR_DATA1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the first 32 bits of BLOCK3 (user).
    +            USR_DATA1: u32,
    +        }), base_address + 0x80);
    +
    +        /// address: 0x60008884
    +        /// Register 2 of BLOCK3 (user).
    +        pub const RD_USR_DATA2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the second 32 bits of BLOCK3 (user).
    +            USR_DATA2: u32,
    +        }), base_address + 0x84);
    +
    +        /// address: 0x60008888
    +        /// Register 3 of BLOCK3 (user).
    +        pub const RD_USR_DATA3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the third 32 bits of BLOCK3 (user).
    +            USR_DATA3: u32,
    +        }), base_address + 0x88);
    +
    +        /// address: 0x6000888c
    +        /// Register 4 of BLOCK3 (user).
    +        pub const RD_USR_DATA4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the fourth 32 bits of BLOCK3 (user).
    +            USR_DATA4: u32,
    +        }), base_address + 0x8c);
    +
    +        /// address: 0x60008890
    +        /// Register 5 of BLOCK3 (user).
    +        pub const RD_USR_DATA5 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the fifth 32 bits of BLOCK3 (user).
    +            USR_DATA5: u32,
    +        }), base_address + 0x90);
    +
    +        /// address: 0x60008894
    +        /// Register 6 of BLOCK3 (user).
    +        pub const RD_USR_DATA6 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the sixth 32 bits of BLOCK3 (user).
    +            USR_DATA6: u32,
    +        }), base_address + 0x94);
    +
    +        /// address: 0x60008898
    +        /// Register 7 of BLOCK3 (user).
    +        pub const RD_USR_DATA7 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the seventh 32 bits of BLOCK3 (user).
    +            USR_DATA7: u32,
    +        }), base_address + 0x98);
    +
    +        /// address: 0x6000889c
    +        /// Register 0 of BLOCK4 (KEY0).
    +        pub const RD_KEY0_DATA0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the zeroth 32 bits of KEY0.
    +            KEY0_DATA0: u32,
    +        }), base_address + 0x9c);
    +
    +        /// address: 0x600088a0
    +        /// Register 1 of BLOCK4 (KEY0).
    +        pub const RD_KEY0_DATA1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the first 32 bits of KEY0.
    +            KEY0_DATA1: u32,
    +        }), base_address + 0xa0);
    +
    +        /// address: 0x600088a4
    +        /// Register 2 of BLOCK4 (KEY0).
    +        pub const RD_KEY0_DATA2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the second 32 bits of KEY0.
    +            KEY0_DATA2: u32,
    +        }), base_address + 0xa4);
    +
    +        /// address: 0x600088a8
    +        /// Register 3 of BLOCK4 (KEY0).
    +        pub const RD_KEY0_DATA3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the third 32 bits of KEY0.
    +            KEY0_DATA3: u32,
    +        }), base_address + 0xa8);
    +
    +        /// address: 0x600088ac
    +        /// Register 4 of BLOCK4 (KEY0).
    +        pub const RD_KEY0_DATA4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the fourth 32 bits of KEY0.
    +            KEY0_DATA4: u32,
    +        }), base_address + 0xac);
    +
    +        /// address: 0x600088b0
    +        /// Register 5 of BLOCK4 (KEY0).
    +        pub const RD_KEY0_DATA5 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the fifth 32 bits of KEY0.
    +            KEY0_DATA5: u32,
    +        }), base_address + 0xb0);
    +
    +        /// address: 0x600088b4
    +        /// Register 6 of BLOCK4 (KEY0).
    +        pub const RD_KEY0_DATA6 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the sixth 32 bits of KEY0.
    +            KEY0_DATA6: u32,
    +        }), base_address + 0xb4);
    +
    +        /// address: 0x600088b8
    +        /// Register 7 of BLOCK4 (KEY0).
    +        pub const RD_KEY0_DATA7 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the seventh 32 bits of KEY0.
    +            KEY0_DATA7: u32,
    +        }), base_address + 0xb8);
    +
    +        /// address: 0x600088bc
    +        /// Register 0 of BLOCK5 (KEY1).
    +        pub const RD_KEY1_DATA0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the zeroth 32 bits of KEY1.
    +            KEY1_DATA0: u32,
    +        }), base_address + 0xbc);
    +
    +        /// address: 0x600088c0
    +        /// Register 1 of BLOCK5 (KEY1).
    +        pub const RD_KEY1_DATA1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the first 32 bits of KEY1.
    +            KEY1_DATA1: u32,
    +        }), base_address + 0xc0);
    +
    +        /// address: 0x600088c4
    +        /// Register 2 of BLOCK5 (KEY1).
    +        pub const RD_KEY1_DATA2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the second 32 bits of KEY1.
    +            KEY1_DATA2: u32,
    +        }), base_address + 0xc4);
    +
    +        /// address: 0x600088c8
    +        /// Register 3 of BLOCK5 (KEY1).
    +        pub const RD_KEY1_DATA3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the third 32 bits of KEY1.
    +            KEY1_DATA3: u32,
    +        }), base_address + 0xc8);
    +
    +        /// address: 0x600088cc
    +        /// Register 4 of BLOCK5 (KEY1).
    +        pub const RD_KEY1_DATA4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the fourth 32 bits of KEY1.
    +            KEY1_DATA4: u32,
    +        }), base_address + 0xcc);
    +
    +        /// address: 0x600088d0
    +        /// Register 5 of BLOCK5 (KEY1).
    +        pub const RD_KEY1_DATA5 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the fifth 32 bits of KEY1.
    +            KEY1_DATA5: u32,
    +        }), base_address + 0xd0);
    +
    +        /// address: 0x600088d4
    +        /// Register 6 of BLOCK5 (KEY1).
    +        pub const RD_KEY1_DATA6 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the sixth 32 bits of KEY1.
    +            KEY1_DATA6: u32,
    +        }), base_address + 0xd4);
    +
    +        /// address: 0x600088d8
    +        /// Register 7 of BLOCK5 (KEY1).
    +        pub const RD_KEY1_DATA7 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the seventh 32 bits of KEY1.
    +            KEY1_DATA7: u32,
    +        }), base_address + 0xd8);
    +
    +        /// address: 0x600088dc
    +        /// Register 0 of BLOCK6 (KEY2).
    +        pub const RD_KEY2_DATA0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the zeroth 32 bits of KEY2.
    +            KEY2_DATA0: u32,
    +        }), base_address + 0xdc);
    +
    +        /// address: 0x600088e0
    +        /// Register 1 of BLOCK6 (KEY2).
    +        pub const RD_KEY2_DATA1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the first 32 bits of KEY2.
    +            KEY2_DATA1: u32,
    +        }), base_address + 0xe0);
    +
    +        /// address: 0x600088e4
    +        /// Register 2 of BLOCK6 (KEY2).
    +        pub const RD_KEY2_DATA2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the second 32 bits of KEY2.
    +            KEY2_DATA2: u32,
    +        }), base_address + 0xe4);
    +
    +        /// address: 0x600088e8
    +        /// Register 3 of BLOCK6 (KEY2).
    +        pub const RD_KEY2_DATA3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the third 32 bits of KEY2.
    +            KEY2_DATA3: u32,
    +        }), base_address + 0xe8);
    +
    +        /// address: 0x600088ec
    +        /// Register 4 of BLOCK6 (KEY2).
    +        pub const RD_KEY2_DATA4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the fourth 32 bits of KEY2.
    +            KEY2_DATA4: u32,
    +        }), base_address + 0xec);
    +
    +        /// address: 0x600088f0
    +        /// Register 5 of BLOCK6 (KEY2).
    +        pub const RD_KEY2_DATA5 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the fifth 32 bits of KEY2.
    +            KEY2_DATA5: u32,
    +        }), base_address + 0xf0);
    +
    +        /// address: 0x600088f4
    +        /// Register 6 of BLOCK6 (KEY2).
    +        pub const RD_KEY2_DATA6 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the sixth 32 bits of KEY2.
    +            KEY2_DATA6: u32,
    +        }), base_address + 0xf4);
    +
    +        /// address: 0x600088f8
    +        /// Register 7 of BLOCK6 (KEY2).
    +        pub const RD_KEY2_DATA7 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the seventh 32 bits of KEY2.
    +            KEY2_DATA7: u32,
    +        }), base_address + 0xf8);
    +
    +        /// address: 0x600088fc
    +        /// Register 0 of BLOCK7 (KEY3).
    +        pub const RD_KEY3_DATA0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the zeroth 32 bits of KEY3.
    +            KEY3_DATA0: u32,
    +        }), base_address + 0xfc);
    +
    +        /// address: 0x60008900
    +        /// Register 1 of BLOCK7 (KEY3).
    +        pub const RD_KEY3_DATA1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the first 32 bits of KEY3.
    +            KEY3_DATA1: u32,
    +        }), base_address + 0x100);
    +
    +        /// address: 0x60008904
    +        /// Register 2 of BLOCK7 (KEY3).
    +        pub const RD_KEY3_DATA2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the second 32 bits of KEY3.
    +            KEY3_DATA2: u32,
    +        }), base_address + 0x104);
    +
    +        /// address: 0x60008908
    +        /// Register 3 of BLOCK7 (KEY3).
    +        pub const RD_KEY3_DATA3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the third 32 bits of KEY3.
    +            KEY3_DATA3: u32,
    +        }), base_address + 0x108);
    +
    +        /// address: 0x6000890c
    +        /// Register 4 of BLOCK7 (KEY3).
    +        pub const RD_KEY3_DATA4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the fourth 32 bits of KEY3.
    +            KEY3_DATA4: u32,
    +        }), base_address + 0x10c);
    +
    +        /// address: 0x60008910
    +        /// Register 5 of BLOCK7 (KEY3).
    +        pub const RD_KEY3_DATA5 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the fifth 32 bits of KEY3.
    +            KEY3_DATA5: u32,
    +        }), base_address + 0x110);
    +
    +        /// address: 0x60008914
    +        /// Register 6 of BLOCK7 (KEY3).
    +        pub const RD_KEY3_DATA6 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the sixth 32 bits of KEY3.
    +            KEY3_DATA6: u32,
    +        }), base_address + 0x114);
    +
    +        /// address: 0x60008918
    +        /// Register 7 of BLOCK7 (KEY3).
    +        pub const RD_KEY3_DATA7 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the seventh 32 bits of KEY3.
    +            KEY3_DATA7: u32,
    +        }), base_address + 0x118);
    +
    +        /// address: 0x6000891c
    +        /// Register 0 of BLOCK8 (KEY4).
    +        pub const RD_KEY4_DATA0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the zeroth 32 bits of KEY4.
    +            KEY4_DATA0: u32,
    +        }), base_address + 0x11c);
    +
    +        /// address: 0x60008920
    +        /// Register 1 of BLOCK8 (KEY4).
    +        pub const RD_KEY4_DATA1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the first 32 bits of KEY4.
    +            KEY4_DATA1: u32,
    +        }), base_address + 0x120);
    +
    +        /// address: 0x60008924
    +        /// Register 2 of BLOCK8 (KEY4).
    +        pub const RD_KEY4_DATA2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the second 32 bits of KEY4.
    +            KEY4_DATA2: u32,
    +        }), base_address + 0x124);
    +
    +        /// address: 0x60008928
    +        /// Register 3 of BLOCK8 (KEY4).
    +        pub const RD_KEY4_DATA3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the third 32 bits of KEY4.
    +            KEY4_DATA3: u32,
    +        }), base_address + 0x128);
    +
    +        /// address: 0x6000892c
    +        /// Register 4 of BLOCK8 (KEY4).
    +        pub const RD_KEY4_DATA4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the fourth 32 bits of KEY4.
    +            KEY4_DATA4: u32,
    +        }), base_address + 0x12c);
    +
    +        /// address: 0x60008930
    +        /// Register 5 of BLOCK8 (KEY4).
    +        pub const RD_KEY4_DATA5 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the fifth 32 bits of KEY4.
    +            KEY4_DATA5: u32,
    +        }), base_address + 0x130);
    +
    +        /// address: 0x60008934
    +        /// Register 6 of BLOCK8 (KEY4).
    +        pub const RD_KEY4_DATA6 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the sixth 32 bits of KEY4.
    +            KEY4_DATA6: u32,
    +        }), base_address + 0x134);
    +
    +        /// address: 0x60008938
    +        /// Register 7 of BLOCK8 (KEY4).
    +        pub const RD_KEY4_DATA7 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the seventh 32 bits of KEY4.
    +            KEY4_DATA7: u32,
    +        }), base_address + 0x138);
    +
    +        /// address: 0x6000893c
    +        /// Register 0 of BLOCK9 (KEY5).
    +        pub const RD_KEY5_DATA0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the zeroth 32 bits of KEY5.
    +            KEY5_DATA0: u32,
    +        }), base_address + 0x13c);
    +
    +        /// address: 0x60008940
    +        /// Register 1 of BLOCK9 (KEY5).
    +        pub const RD_KEY5_DATA1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the first 32 bits of KEY5.
    +            KEY5_DATA1: u32,
    +        }), base_address + 0x140);
    +
    +        /// address: 0x60008944
    +        /// Register 2 of BLOCK9 (KEY5).
    +        pub const RD_KEY5_DATA2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the second 32 bits of KEY5.
    +            KEY5_DATA2: u32,
    +        }), base_address + 0x144);
    +
    +        /// address: 0x60008948
    +        /// Register 3 of BLOCK9 (KEY5).
    +        pub const RD_KEY5_DATA3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the third 32 bits of KEY5.
    +            KEY5_DATA3: u32,
    +        }), base_address + 0x148);
    +
    +        /// address: 0x6000894c
    +        /// Register 4 of BLOCK9 (KEY5).
    +        pub const RD_KEY5_DATA4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the fourth 32 bits of KEY5.
    +            KEY5_DATA4: u32,
    +        }), base_address + 0x14c);
    +
    +        /// address: 0x60008950
    +        /// Register 5 of BLOCK9 (KEY5).
    +        pub const RD_KEY5_DATA5 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the fifth 32 bits of KEY5.
    +            KEY5_DATA5: u32,
    +        }), base_address + 0x150);
    +
    +        /// address: 0x60008954
    +        /// Register 6 of BLOCK9 (KEY5).
    +        pub const RD_KEY5_DATA6 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the sixth 32 bits of KEY5.
    +            KEY5_DATA6: u32,
    +        }), base_address + 0x154);
    +
    +        /// address: 0x60008958
    +        /// Register 7 of BLOCK9 (KEY5).
    +        pub const RD_KEY5_DATA7 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the seventh 32 bits of KEY5.
    +            KEY5_DATA7: u32,
    +        }), base_address + 0x158);
    +
    +        /// address: 0x6000895c
    +        /// Register 0 of BLOCK10 (system).
    +        pub const RD_SYS_PART2_DATA0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the 0th 32 bits of the 2nd part of system data.
    +            SYS_DATA_PART2_0: u32,
    +        }), base_address + 0x15c);
    +
    +        /// address: 0x60008960
    +        /// Register 1 of BLOCK9 (KEY5).
    +        pub const RD_SYS_PART2_DATA1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the 1st 32 bits of the 2nd part of system data.
    +            SYS_DATA_PART2_1: u32,
    +        }), base_address + 0x160);
    +
    +        /// address: 0x60008964
    +        /// Register 2 of BLOCK10 (system).
    +        pub const RD_SYS_PART2_DATA2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the 2nd 32 bits of the 2nd part of system data.
    +            SYS_DATA_PART2_2: u32,
    +        }), base_address + 0x164);
    +
    +        /// address: 0x60008968
    +        /// Register 3 of BLOCK10 (system).
    +        pub const RD_SYS_PART2_DATA3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the 3rd 32 bits of the 2nd part of system data.
    +            SYS_DATA_PART2_3: u32,
    +        }), base_address + 0x168);
    +
    +        /// address: 0x6000896c
    +        /// Register 4 of BLOCK10 (system).
    +        pub const RD_SYS_PART2_DATA4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the 4th 32 bits of the 2nd part of system data.
    +            SYS_DATA_PART2_4: u32,
    +        }), base_address + 0x16c);
    +
    +        /// address: 0x60008970
    +        /// Register 5 of BLOCK10 (system).
    +        pub const RD_SYS_PART2_DATA5 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the 5th 32 bits of the 2nd part of system data.
    +            SYS_DATA_PART2_5: u32,
    +        }), base_address + 0x170);
    +
    +        /// address: 0x60008974
    +        /// Register 6 of BLOCK10 (system).
    +        pub const RD_SYS_PART2_DATA6 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the 6th 32 bits of the 2nd part of system data.
    +            SYS_DATA_PART2_6: u32,
    +        }), base_address + 0x174);
    +
    +        /// address: 0x60008978
    +        /// Register 7 of BLOCK10 (system).
    +        pub const RD_SYS_PART2_DATA7 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the 7th 32 bits of the 2nd part of system data.
    +            SYS_DATA_PART2_7: u32,
    +        }), base_address + 0x178);
    +
    +        /// address: 0x6000897c
    +        /// Programming error record register 0 of BLOCK0.
    +        pub const RD_REPEAT_ERR0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// If any bit in RD_DIS is 1, then it indicates a programming error.
    +            RD_DIS_ERR: u7,
    +            /// If DIS_RTC_RAM_BOOT is 1, then it indicates a programming error.
    +            DIS_RTC_RAM_BOOT_ERR: u1,
    +            /// If DIS_ICACHE is 1, then it indicates a programming error.
    +            DIS_ICACHE_ERR: u1,
    +            /// If DIS_USB_JTAG is 1, then it indicates a programming error.
    +            DIS_USB_JTAG_ERR: u1,
    +            /// If DIS_DOWNLOAD_ICACHE is 1, then it indicates a programming error.
    +            DIS_DOWNLOAD_ICACHE_ERR: u1,
    +            /// If DIS_USB_DEVICE is 1, then it indicates a programming error.
    +            DIS_USB_DEVICE_ERR: u1,
    +            /// If DIS_FORCE_DOWNLOAD is 1, then it indicates a programming error.
    +            DIS_FORCE_DOWNLOAD_ERR: u1,
    +            /// Reserved.
    +            RPT4_RESERVED6_ERR: u1,
    +            /// If DIS_CAN is 1, then it indicates a programming error.
    +            DIS_CAN_ERR: u1,
    +            /// If JTAG_SEL_ENABLE is 1, then it indicates a programming error.
    +            JTAG_SEL_ENABLE_ERR: u1,
    +            /// If SOFT_DIS_JTAG is 1, then it indicates a programming error.
    +            SOFT_DIS_JTAG_ERR: u3,
    +            /// If DIS_PAD_JTAG is 1, then it indicates a programming error.
    +            DIS_PAD_JTAG_ERR: u1,
    +            /// If DIS_DOWNLOAD_MANUAL_ENCRYPT is 1, then it indicates a programming error.
    +            DIS_DOWNLOAD_MANUAL_ENCRYPT_ERR: u1,
    +            /// If any bit in USB_DREFH is 1, then it indicates a programming error.
    +            USB_DREFH_ERR: u2,
    +            /// If any bit in USB_DREFL is 1, then it indicates a programming error.
    +            USB_DREFL_ERR: u2,
    +            /// If USB_EXCHG_PINS is 1, then it indicates a programming error.
    +            USB_EXCHG_PINS_ERR: u1,
    +            /// If VDD_SPI_AS_GPIO is 1, then it indicates a programming error.
    +            VDD_SPI_AS_GPIO_ERR: u1,
    +            /// If any bit in BTLC_GPIO_ENABLE is 1, then it indicates a programming error.
    +            BTLC_GPIO_ENABLE_ERR: u2,
    +            /// If POWERGLITCH_EN is 1, then it indicates a programming error.
    +            POWERGLITCH_EN_ERR: u1,
    +            /// If any bit in POWER_GLITCH_DSENSE is 1, then it indicates a programming error.
    +            POWER_GLITCH_DSENSE_ERR: u2,
    +        }), base_address + 0x17c);
    +
    +        /// address: 0x60008980
    +        /// Programming error record register 1 of BLOCK0.
    +        pub const RD_REPEAT_ERR1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Reserved.
    +            RPT4_RESERVED2_ERR: u16,
    +            /// If any bit in WDT_DELAY_SEL is 1, then it indicates a programming error.
    +            WDT_DELAY_SEL_ERR: u2,
    +            /// If any bit in SPI_BOOT_CRYPT_CNT is 1, then it indicates a programming error.
    +            SPI_BOOT_CRYPT_CNT_ERR: u3,
    +            /// If SECURE_BOOT_KEY_REVOKE0 is 1, then it indicates a programming error.
    +            SECURE_BOOT_KEY_REVOKE0_ERR: u1,
    +            /// If SECURE_BOOT_KEY_REVOKE1 is 1, then it indicates a programming error.
    +            SECURE_BOOT_KEY_REVOKE1_ERR: u1,
    +            /// If SECURE_BOOT_KEY_REVOKE2 is 1, then it indicates a programming error.
    +            SECURE_BOOT_KEY_REVOKE2_ERR: u1,
    +            /// If any bit in KEY_PURPOSE_0 is 1, then it indicates a programming error.
    +            KEY_PURPOSE_0_ERR: u4,
    +            /// If any bit in KEY_PURPOSE_1 is 1, then it indicates a programming error.
    +            KEY_PURPOSE_1_ERR: u4,
    +        }), base_address + 0x180);
    +
    +        /// address: 0x60008984
    +        /// Programming error record register 2 of BLOCK0.
    +        pub const RD_REPEAT_ERR2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// If any bit in KEY_PURPOSE_2 is 1, then it indicates a programming error.
    +            KEY_PURPOSE_2_ERR: u4,
    +            /// If any bit in KEY_PURPOSE_3 is 1, then it indicates a programming error.
    +            KEY_PURPOSE_3_ERR: u4,
    +            /// If any bit in KEY_PURPOSE_4 is 1, then it indicates a programming error.
    +            KEY_PURPOSE_4_ERR: u4,
    +            /// If any bit in KEY_PURPOSE_5 is 1, then it indicates a programming error.
    +            KEY_PURPOSE_5_ERR: u4,
    +            /// Reserved.
    +            RPT4_RESERVED3_ERR: u4,
    +            /// If SECURE_BOOT_EN is 1, then it indicates a programming error.
    +            SECURE_BOOT_EN_ERR: u1,
    +            /// If SECURE_BOOT_AGGRESSIVE_REVOKE is 1, then it indicates a programming error.
    +            SECURE_BOOT_AGGRESSIVE_REVOKE_ERR: u1,
    +            /// Reserved.
    +            RPT4_RESERVED0_ERR: u6,
    +            /// If any bit in FLASH_TPUM is 1, then it indicates a programming error.
    +            FLASH_TPUW_ERR: u4,
    +        }), base_address + 0x184);
    +
    +        /// address: 0x60008988
    +        /// Programming error record register 3 of BLOCK0.
    +        pub const RD_REPEAT_ERR3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// If DIS_DOWNLOAD_MODE is 1, then it indicates a programming error.
    +            DIS_DOWNLOAD_MODE_ERR: u1,
    +            /// If DIS_LEGACY_SPI_BOOT is 1, then it indicates a programming error.
    +            DIS_LEGACY_SPI_BOOT_ERR: u1,
    +            /// If UART_PRINT_CHANNEL is 1, then it indicates a programming error.
    +            UART_PRINT_CHANNEL_ERR: u1,
    +            /// If FLASH_ECC_MODE is 1, then it indicates a programming error.
    +            FLASH_ECC_MODE_ERR: u1,
    +            /// If DIS_USB_DOWNLOAD_MODE is 1, then it indicates a programming error.
    +            DIS_USB_DOWNLOAD_MODE_ERR: u1,
    +            /// If ENABLE_SECURITY_DOWNLOAD is 1, then it indicates a programming error.
    +            ENABLE_SECURITY_DOWNLOAD_ERR: u1,
    +            /// If any bit in UART_PRINT_CONTROL is 1, then it indicates a programming error.
    +            UART_PRINT_CONTROL_ERR: u2,
    +            /// If PIN_POWER_SELECTION is 1, then it indicates a programming error.
    +            PIN_POWER_SELECTION_ERR: u1,
    +            /// If FLASH_TYPE is 1, then it indicates a programming error.
    +            FLASH_TYPE_ERR: u1,
    +            /// If any bits in FLASH_PAGE_SIZE is 1, then it indicates a programming error.
    +            FLASH_PAGE_SIZE_ERR: u2,
    +            /// If FLASH_ECC_EN_ERR is 1, then it indicates a programming error.
    +            FLASH_ECC_EN_ERR: u1,
    +            /// If FORCE_SEND_RESUME is 1, then it indicates a programming error.
    +            FORCE_SEND_RESUME_ERR: u1,
    +            /// If any bit in SECURE_VERSION is 1, then it indicates a programming error.
    +            SECURE_VERSION_ERR: u16,
    +            /// Reserved.
    +            RPT4_RESERVED1_ERR: u2,
    +        }), base_address + 0x188);
    +
    +        /// address: 0x60008990
    +        /// Programming error record register 4 of BLOCK0.
    +        pub const RD_REPEAT_ERR4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Reserved.
    +            RPT4_RESERVED4_ERR: u24,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +        }), base_address + 0x190);
    +
    +        /// address: 0x600089c0
    +        /// Programming error record register 0 of BLOCK1-10.
    +        pub const RD_RS_ERR0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of this signal means the number of error bytes.
    +            MAC_SPI_8M_ERR_NUM: u3,
    +            /// 0: Means no failure and that the data of MAC_SPI_8M is reliable 1: Means that
    +            /// programming user data failed and the number of error bytes is over 6.
    +            MAC_SPI_8M_FAIL: u1,
    +            /// The value of this signal means the number of error bytes.
    +            SYS_PART1_NUM: u3,
    +            /// 0: Means no failure and that the data of system part1 is reliable 1: Means that
    +            /// programming user data failed and the number of error bytes is over 6.
    +            SYS_PART1_FAIL: u1,
    +            /// The value of this signal means the number of error bytes.
    +            USR_DATA_ERR_NUM: u3,
    +            /// 0: Means no failure and that the user data is reliable 1: Means that programming
    +            /// user data failed and the number of error bytes is over 6.
    +            USR_DATA_FAIL: u1,
    +            /// The value of this signal means the number of error bytes.
    +            KEY0_ERR_NUM: u3,
    +            /// 0: Means no failure and that the data of key0 is reliable 1: Means that
    +            /// programming key0 failed and the number of error bytes is over 6.
    +            KEY0_FAIL: u1,
    +            /// The value of this signal means the number of error bytes.
    +            KEY1_ERR_NUM: u3,
    +            /// 0: Means no failure and that the data of key1 is reliable 1: Means that
    +            /// programming key1 failed and the number of error bytes is over 6.
    +            KEY1_FAIL: u1,
    +            /// The value of this signal means the number of error bytes.
    +            KEY2_ERR_NUM: u3,
    +            /// 0: Means no failure and that the data of key2 is reliable 1: Means that
    +            /// programming key2 failed and the number of error bytes is over 6.
    +            KEY2_FAIL: u1,
    +            /// The value of this signal means the number of error bytes.
    +            KEY3_ERR_NUM: u3,
    +            /// 0: Means no failure and that the data of key3 is reliable 1: Means that
    +            /// programming key3 failed and the number of error bytes is over 6.
    +            KEY3_FAIL: u1,
    +            /// The value of this signal means the number of error bytes.
    +            KEY4_ERR_NUM: u3,
    +            /// 0: Means no failure and that the data of key4 is reliable 1: Means that
    +            /// programming key4 failed and the number of error bytes is over 6.
    +            KEY4_FAIL: u1,
    +        }), base_address + 0x1c0);
    +
    +        /// address: 0x600089c4
    +        /// Programming error record register 1 of BLOCK1-10.
    +        pub const RD_RS_ERR1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of this signal means the number of error bytes.
    +            KEY5_ERR_NUM: u3,
    +            /// 0: Means no failure and that the data of KEY5 is reliable 1: Means that
    +            /// programming user data failed and the number of error bytes is over 6.
    +            KEY5_FAIL: u1,
    +            /// The value of this signal means the number of error bytes.
    +            SYS_PART2_ERR_NUM: u3,
    +            /// 0: Means no failure and that the data of system part2 is reliable 1: Means that
    +            /// programming user data failed and the number of error bytes is over 6.
    +            SYS_PART2_FAIL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x1c4);
    +
    +        /// address: 0x600089c8
    +        /// eFuse clcok configuration register.
    +        pub const CLK = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Set this bit to force eFuse SRAM into power-saving mode.
    +            EFUSE_MEM_FORCE_PD: u1,
    +            /// Set this bit and force to activate clock signal of eFuse SRAM.
    +            MEM_CLK_FORCE_ON: u1,
    +            /// Set this bit to force eFuse SRAM into working mode.
    +            EFUSE_MEM_FORCE_PU: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            /// Set this bit and force to enable clock signal of eFuse memory.
    +            EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +        }), base_address + 0x1c8);
    +
    +        /// address: 0x600089cc
    +        /// eFuse operation mode configuraiton register;
    +        pub const CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// 0x5A5A: Operate programming command 0x5AA5: Operate read command.
    +            OP_CODE: u16,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x1cc);
    +
    +        /// address: 0x600089d0
    +        /// eFuse status register.
    +        pub const STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Indicates the state of the eFuse state machine.
    +            STATE: u4,
    +            /// The value of OTP_LOAD_SW.
    +            OTP_LOAD_SW: u1,
    +            /// The value of OTP_VDDQ_C_SYNC2.
    +            OTP_VDDQ_C_SYNC2: u1,
    +            /// The value of OTP_STROBE_SW.
    +            OTP_STROBE_SW: u1,
    +            /// The value of OTP_CSB_SW.
    +            OTP_CSB_SW: u1,
    +            /// The value of OTP_PGENB_SW.
    +            OTP_PGENB_SW: u1,
    +            /// The value of OTP_VDDQ_IS_SW.
    +            OTP_VDDQ_IS_SW: u1,
    +            /// Indicates the number of error bits during programming BLOCK0.
    +            REPEAT_ERR_CNT: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0x1d0);
    +
    +        /// address: 0x600089d4
    +        /// eFuse command register.
    +        pub const CMD = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Set this bit to send read command.
    +            READ_CMD: u1,
    +            /// Set this bit to send programming command.
    +            PGM_CMD: u1,
    +            /// The serial number of the block to be programmed. Value 0-10 corresponds to block
    +            /// number 0-10, respectively.
    +            BLK_NUM: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +        }), base_address + 0x1d4);
    +
    +        /// address: 0x600089d8
    +        /// eFuse raw interrupt register.
    +        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The raw bit signal for read_done interrupt.
    +            READ_DONE_INT_RAW: u1,
    +            /// The raw bit signal for pgm_done interrupt.
    +            PGM_DONE_INT_RAW: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0x1d8);
    +
    +        /// address: 0x600089dc
    +        /// eFuse interrupt status register.
    +        pub const INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The status signal for read_done interrupt.
    +            READ_DONE_INT_ST: u1,
    +            /// The status signal for pgm_done interrupt.
    +            PGM_DONE_INT_ST: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0x1dc);
    +
    +        /// address: 0x600089e0
    +        /// eFuse interrupt enable register.
    +        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The enable signal for read_done interrupt.
    +            READ_DONE_INT_ENA: u1,
    +            /// The enable signal for pgm_done interrupt.
    +            PGM_DONE_INT_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0x1e0);
    +
    +        /// address: 0x600089e4
    +        /// eFuse interrupt clear register.
    +        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The clear signal for read_done interrupt.
    +            READ_DONE_INT_CLR: u1,
    +            /// The clear signal for pgm_done interrupt.
    +            PGM_DONE_INT_CLR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0x1e4);
    +
    +        /// address: 0x600089e8
    +        /// Controls the eFuse programming voltage.
    +        pub const DAC_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Controls the division factor of the rising clock of the programming voltage.
    +            DAC_CLK_DIV: u8,
    +            /// Don't care.
    +            DAC_CLK_PAD_SEL: u1,
    +            /// Controls the rising period of the programming voltage.
    +            DAC_NUM: u8,
    +            /// Reduces the power supply of the programming voltage.
    +            OE_CLR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0x1e8);
    +
    +        /// address: 0x600089ec
    +        /// Configures read timing parameters.
    +        pub const RD_TIM_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            reserved23: u1,
    +            /// Configures the initial read time of eFuse.
    +            READ_INIT_NUM: u8,
    +        }), base_address + 0x1ec);
    +
    +        /// address: 0x600089f0
    +        /// Configurarion register 1 of eFuse programming timing parameters.
    +        pub const WR_TIM_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            /// Configures the power up time for VDDQ.
    +            PWR_ON_NUM: u16,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +        }), base_address + 0x1f0);
    +
    +        /// address: 0x600089f4
    +        /// Configurarion register 2 of eFuse programming timing parameters.
    +        pub const WR_TIM_CONF2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Configures the power outage time for VDDQ.
    +            PWR_OFF_NUM: u16,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x1f4);
    +
    +        /// address: 0x600089fc
    +        /// eFuse version register.
    +        pub const DATE = @intToPtr(*volatile MmioInt(32, u28), base_address + 0x1fc);
    +    };
    +
    +    /// External Memory
    +    pub const EXTMEM = struct {
    +        pub const base_address = 0x600c4000;
    +
    +        /// address: 0x600c4000
    +        /// This description will be updated in the near future.
    +        pub const ICACHE_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to activate the data cache. 0: disable, 1: enable
    +            ICACHE_ENABLE: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x0);
    +
    +        /// address: 0x600c4004
    +        /// This description will be updated in the near future.
    +        pub const ICACHE_CTRL1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to disable core0 ibus, 0: enable, 1: disable
    +            ICACHE_SHUT_IBUS: u1,
    +            /// The bit is used to disable core1 ibus, 0: enable, 1: disable
    +            ICACHE_SHUT_DBUS: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0x4);
    +
    +        /// address: 0x600c4008
    +        /// This description will be updated in the near future.
    +        pub const ICACHE_TAG_POWER_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to close clock gating of icache tag memory. 1: close gating, 0:
    +            /// open clock gating.
    +            ICACHE_TAG_MEM_FORCE_ON: u1,
    +            /// The bit is used to power icache tag memory down, 0: follow rtc_lslp, 1: power
    +            /// down
    +            ICACHE_TAG_MEM_FORCE_PD: u1,
    +            /// The bit is used to power icache tag memory up, 0: follow rtc_lslp, 1: power up
    +            ICACHE_TAG_MEM_FORCE_PU: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +        }), base_address + 0x8);
    +
    +        /// address: 0x600c400c
    +        /// This description will be updated in the near future.
    +        pub const ICACHE_PRELOCK_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to enable the first section of prelock function.
    +            ICACHE_PRELOCK_SCT0_EN: u1,
    +            /// The bit is used to enable the second section of prelock function.
    +            ICACHE_PRELOCK_SCT1_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0xc);
    +
    +        /// address: 0x600c4010
    +        /// This description will be updated in the near future.
    +        pub const ICACHE_PRELOCK_SCT0_ADDR = @intToPtr(*volatile u32, base_address + 0x10);
    +
    +        /// address: 0x600c4014
    +        /// This description will be updated in the near future.
    +        pub const ICACHE_PRELOCK_SCT1_ADDR = @intToPtr(*volatile u32, base_address + 0x14);
    +
    +        /// address: 0x600c4018
    +        /// This description will be updated in the near future.
    +        pub const ICACHE_PRELOCK_SCT_SIZE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bits are used to configure the second length of data locking, which is
    +            /// combined with ICACHE_PRELOCK_SCT1_ADDR_REG
    +            ICACHE_PRELOCK_SCT1_SIZE: u16,
    +            /// The bits are used to configure the first length of data locking, which is
    +            /// combined with ICACHE_PRELOCK_SCT0_ADDR_REG
    +            ICACHE_PRELOCK_SCT0_SIZE: u16,
    +        }), base_address + 0x18);
    +
    +        /// address: 0x600c401c
    +        /// This description will be updated in the near future.
    +        pub const ICACHE_LOCK_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to enable lock operation. It will be cleared by hardware after
    +            /// lock operation done.
    +            ICACHE_LOCK_ENA: u1,
    +            /// The bit is used to enable unlock operation. It will be cleared by hardware after
    +            /// unlock operation done.
    +            ICACHE_UNLOCK_ENA: u1,
    +            /// The bit is used to indicate unlock/lock operation is finished.
    +            ICACHE_LOCK_DONE: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +        }), base_address + 0x1c);
    +
    +        /// address: 0x600c4020
    +        /// This description will be updated in the near future.
    +        pub const ICACHE_LOCK_ADDR = @intToPtr(*volatile u32, base_address + 0x20);
    +
    +        /// address: 0x600c4024
    +        /// This description will be updated in the near future.
    +        pub const ICACHE_LOCK_SIZE = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x24);
    +
    +        /// address: 0x600c4028
    +        /// This description will be updated in the near future.
    +        pub const ICACHE_SYNC_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to enable invalidate operation. It will be cleared by hardware
    +            /// after invalidate operation done.
    +            ICACHE_INVALIDATE_ENA: u1,
    +            /// The bit is used to indicate invalidate operation is finished.
    +            ICACHE_SYNC_DONE: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0x28);
    +
    +        /// address: 0x600c402c
    +        /// This description will be updated in the near future.
    +        pub const ICACHE_SYNC_ADDR = @intToPtr(*volatile u32, base_address + 0x2c);
    +
    +        /// address: 0x600c4030
    +        /// This description will be updated in the near future.
    +        pub const ICACHE_SYNC_SIZE = @intToPtr(*volatile MmioInt(32, u23), base_address + 0x30);
    +
    +        /// address: 0x600c4034
    +        /// This description will be updated in the near future.
    +        pub const ICACHE_PRELOAD_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to enable preload operation. It will be cleared by hardware
    +            /// after preload operation done.
    +            ICACHE_PRELOAD_ENA: u1,
    +            /// The bit is used to indicate preload operation is finished.
    +            ICACHE_PRELOAD_DONE: u1,
    +            /// The bit is used to configure the direction of preload operation. 1: descending,
    +            /// 0: ascending.
    +            ICACHE_PRELOAD_ORDER: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +        }), base_address + 0x34);
    +
    +        /// address: 0x600c4038
    +        /// This description will be updated in the near future.
    +        pub const ICACHE_PRELOAD_ADDR = @intToPtr(*volatile u32, base_address + 0x38);
    +
    +        /// address: 0x600c403c
    +        /// This description will be updated in the near future.
    +        pub const ICACHE_PRELOAD_SIZE = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x3c);
    +
    +        /// address: 0x600c4040
    +        /// This description will be updated in the near future.
    +        pub const ICACHE_AUTOLOAD_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bits are used to enable the first section for autoload operation.
    +            ICACHE_AUTOLOAD_SCT0_ENA: u1,
    +            /// The bits are used to enable the second section for autoload operation.
    +            ICACHE_AUTOLOAD_SCT1_ENA: u1,
    +            /// The bit is used to enable and disable autoload operation. It is combined with
    +            /// icache_autoload_done. 1: enable, 0: disable.
    +            ICACHE_AUTOLOAD_ENA: u1,
    +            /// The bit is used to indicate autoload operation is finished.
    +            ICACHE_AUTOLOAD_DONE: u1,
    +            /// The bits are used to configure the direction of autoload. 1: descending, 0:
    +            /// ascending.
    +            ICACHE_AUTOLOAD_ORDER: u1,
    +            /// The bits are used to configure trigger conditions for autoload. 0/3: cache miss,
    +            /// 1: cache hit, 2: both cache miss and hit.
    +            ICACHE_AUTOLOAD_RQST: u2,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x40);
    +
    +        /// address: 0x600c4044
    +        /// This description will be updated in the near future.
    +        pub const ICACHE_AUTOLOAD_SCT0_ADDR = @intToPtr(*volatile u32, base_address + 0x44);
    +
    +        /// address: 0x600c4048
    +        /// This description will be updated in the near future.
    +        pub const ICACHE_AUTOLOAD_SCT0_SIZE = @intToPtr(*volatile MmioInt(32, u27), base_address + 0x48);
    +
    +        /// address: 0x600c404c
    +        /// This description will be updated in the near future.
    +        pub const ICACHE_AUTOLOAD_SCT1_ADDR = @intToPtr(*volatile u32, base_address + 0x4c);
    +
    +        /// address: 0x600c4050
    +        /// This description will be updated in the near future.
    +        pub const ICACHE_AUTOLOAD_SCT1_SIZE = @intToPtr(*volatile MmioInt(32, u27), base_address + 0x50);
    +
    +        /// address: 0x600c4054
    +        /// This description will be updated in the near future.
    +        pub const IBUS_TO_FLASH_START_VADDR = @intToPtr(*volatile u32, base_address + 0x54);
    +
    +        /// address: 0x600c4058
    +        /// This description will be updated in the near future.
    +        pub const IBUS_TO_FLASH_END_VADDR = @intToPtr(*volatile u32, base_address + 0x58);
    +
    +        /// address: 0x600c405c
    +        /// This description will be updated in the near future.
    +        pub const DBUS_TO_FLASH_START_VADDR = @intToPtr(*volatile u32, base_address + 0x5c);
    +
    +        /// address: 0x600c4060
    +        /// This description will be updated in the near future.
    +        pub const DBUS_TO_FLASH_END_VADDR = @intToPtr(*volatile u32, base_address + 0x60);
    +
    +        /// address: 0x600c4064
    +        /// This description will be updated in the near future.
    +        pub const CACHE_ACS_CNT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to clear ibus counter.
    +            IBUS_ACS_CNT_CLR: u1,
    +            /// The bit is used to clear dbus counter.
    +            DBUS_ACS_CNT_CLR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0x64);
    +
    +        /// address: 0x600c4068
    +        /// This description will be updated in the near future.
    +        pub const IBUS_ACS_MISS_CNT = @intToPtr(*volatile u32, base_address + 0x68);
    +
    +        /// address: 0x600c406c
    +        /// This description will be updated in the near future.
    +        pub const IBUS_ACS_CNT = @intToPtr(*volatile u32, base_address + 0x6c);
    +
    +        /// address: 0x600c4070
    +        /// This description will be updated in the near future.
    +        pub const DBUS_ACS_FLASH_MISS_CNT = @intToPtr(*volatile u32, base_address + 0x70);
    +
    +        /// address: 0x600c4074
    +        /// This description will be updated in the near future.
    +        pub const DBUS_ACS_CNT = @intToPtr(*volatile u32, base_address + 0x74);
    +
    +        /// address: 0x600c4078
    +        /// This description will be updated in the near future.
    +        pub const CACHE_ILG_INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to enable interrupt by sync configurations fault.
    +            ICACHE_SYNC_OP_FAULT_INT_ENA: u1,
    +            /// The bit is used to enable interrupt by preload configurations fault.
    +            ICACHE_PRELOAD_OP_FAULT_INT_ENA: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            /// The bit is used to enable interrupt by mmu entry fault.
    +            MMU_ENTRY_FAULT_INT_ENA: u1,
    +            reserved3: u1,
    +            /// The bit is used to enable interrupt by ibus counter overflow.
    +            IBUS_CNT_OVF_INT_ENA: u1,
    +            /// The bit is used to enable interrupt by dbus counter overflow.
    +            DBUS_CNT_OVF_INT_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +        }), base_address + 0x78);
    +
    +        /// address: 0x600c407c
    +        /// This description will be updated in the near future.
    +        pub const CACHE_ILG_INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to clear interrupt by sync configurations fault.
    +            ICACHE_SYNC_OP_FAULT_INT_CLR: u1,
    +            /// The bit is used to clear interrupt by preload configurations fault.
    +            ICACHE_PRELOAD_OP_FAULT_INT_CLR: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            /// The bit is used to clear interrupt by mmu entry fault.
    +            MMU_ENTRY_FAULT_INT_CLR: u1,
    +            reserved3: u1,
    +            /// The bit is used to clear interrupt by ibus counter overflow.
    +            IBUS_CNT_OVF_INT_CLR: u1,
    +            /// The bit is used to clear interrupt by dbus counter overflow.
    +            DBUS_CNT_OVF_INT_CLR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +        }), base_address + 0x7c);
    +
    +        /// address: 0x600c4080
    +        /// This description will be updated in the near future.
    +        pub const CACHE_ILG_INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to indicate interrupt by sync configurations fault.
    +            ICACHE_SYNC_OP_FAULT_ST: u1,
    +            /// The bit is used to indicate interrupt by preload configurations fault.
    +            ICACHE_PRELOAD_OP_FAULT_ST: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            /// The bit is used to indicate interrupt by mmu entry fault.
    +            MMU_ENTRY_FAULT_ST: u1,
    +            reserved3: u1,
    +            /// The bit is used to indicate interrupt by ibus access flash/spiram counter
    +            /// overflow.
    +            IBUS_ACS_CNT_OVF_ST: u1,
    +            /// The bit is used to indicate interrupt by ibus access flash/spiram miss counter
    +            /// overflow.
    +            IBUS_ACS_MISS_CNT_OVF_ST: u1,
    +            /// The bit is used to indicate interrupt by dbus access flash/spiram counter
    +            /// overflow.
    +            DBUS_ACS_CNT_OVF_ST: u1,
    +            /// The bit is used to indicate interrupt by dbus access flash miss counter
    +            /// overflow.
    +            DBUS_ACS_FLASH_MISS_CNT_OVF_ST: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x80);
    +
    +        /// address: 0x600c4084
    +        /// This description will be updated in the near future.
    +        pub const CORE0_ACS_CACHE_INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to enable interrupt by cpu access icache while the corresponding
    +            /// ibus is disabled which include speculative access.
    +            CORE0_IBUS_ACS_MSK_IC_INT_ENA: u1,
    +            /// The bit is used to enable interrupt by ibus trying to write icache
    +            CORE0_IBUS_WR_IC_INT_ENA: u1,
    +            /// The bit is used to enable interrupt by authentication fail.
    +            CORE0_IBUS_REJECT_INT_ENA: u1,
    +            /// The bit is used to enable interrupt by cpu access icache while the corresponding
    +            /// dbus is disabled which include speculative access.
    +            CORE0_DBUS_ACS_MSK_IC_INT_ENA: u1,
    +            /// The bit is used to enable interrupt by authentication fail.
    +            CORE0_DBUS_REJECT_INT_ENA: u1,
    +            /// The bit is used to enable interrupt by dbus trying to write icache
    +            CORE0_DBUS_WR_IC_INT_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +        }), base_address + 0x84);
    +
    +        /// address: 0x600c4088
    +        /// This description will be updated in the near future.
    +        pub const CORE0_ACS_CACHE_INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to clear interrupt by cpu access icache while the corresponding
    +            /// ibus is disabled or icache is disabled which include speculative access.
    +            CORE0_IBUS_ACS_MSK_IC_INT_CLR: u1,
    +            /// The bit is used to clear interrupt by ibus trying to write icache
    +            CORE0_IBUS_WR_IC_INT_CLR: u1,
    +            /// The bit is used to clear interrupt by authentication fail.
    +            CORE0_IBUS_REJECT_INT_CLR: u1,
    +            /// The bit is used to clear interrupt by cpu access icache while the corresponding
    +            /// dbus is disabled or icache is disabled which include speculative access.
    +            CORE0_DBUS_ACS_MSK_IC_INT_CLR: u1,
    +            /// The bit is used to clear interrupt by authentication fail.
    +            CORE0_DBUS_REJECT_INT_CLR: u1,
    +            /// The bit is used to clear interrupt by dbus trying to write icache
    +            CORE0_DBUS_WR_IC_INT_CLR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +        }), base_address + 0x88);
    +
    +        /// address: 0x600c408c
    +        /// This description will be updated in the near future.
    +        pub const CORE0_ACS_CACHE_INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to indicate interrupt by cpu access icache while the core0_ibus
    +            /// is disabled or icache is disabled which include speculative access.
    +            CORE0_IBUS_ACS_MSK_ICACHE_ST: u1,
    +            /// The bit is used to indicate interrupt by ibus trying to write icache
    +            CORE0_IBUS_WR_ICACHE_ST: u1,
    +            /// The bit is used to indicate interrupt by authentication fail.
    +            CORE0_IBUS_REJECT_ST: u1,
    +            /// The bit is used to indicate interrupt by cpu access icache while the core0_dbus
    +            /// is disabled or icache is disabled which include speculative access.
    +            CORE0_DBUS_ACS_MSK_ICACHE_ST: u1,
    +            /// The bit is used to indicate interrupt by authentication fail.
    +            CORE0_DBUS_REJECT_ST: u1,
    +            /// The bit is used to indicate interrupt by dbus trying to write icache
    +            CORE0_DBUS_WR_ICACHE_ST: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +        }), base_address + 0x8c);
    +
    +        /// address: 0x600c4090
    +        /// This description will be updated in the near future.
    +        pub const CORE0_DBUS_REJECT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bits are used to indicate the attribute of CPU access dbus when
    +            /// authentication fail. 0: invalidate, 1: execute-able, 2: read-able, 4:
    +            /// write-able.
    +            CORE0_DBUS_ATTR: u3,
    +            /// The bit is used to indicate the world of CPU access dbus when authentication
    +            /// fail. 0: WORLD0, 1: WORLD1
    +            CORE0_DBUS_WORLD: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x90);
    +
    +        /// address: 0x600c4094
    +        /// This description will be updated in the near future.
    +        pub const CORE0_DBUS_REJECT_VADDR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bits are used to indicate the virtual address of CPU access dbus when
    +            /// authentication fail.
    +            CORE0_DBUS_VADDR: u32,
    +        }), base_address + 0x94);
    +
    +        /// address: 0x600c4098
    +        /// This description will be updated in the near future.
    +        pub const CORE0_IBUS_REJECT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bits are used to indicate the attribute of CPU access ibus when
    +            /// authentication fail. 0: invalidate, 1: execute-able, 2: read-able
    +            CORE0_IBUS_ATTR: u3,
    +            /// The bit is used to indicate the world of CPU access ibus when authentication
    +            /// fail. 0: WORLD0, 1: WORLD1
    +            CORE0_IBUS_WORLD: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x98);
    +
    +        /// address: 0x600c409c
    +        /// This description will be updated in the near future.
    +        pub const CORE0_IBUS_REJECT_VADDR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bits are used to indicate the virtual address of CPU access ibus when
    +            /// authentication fail.
    +            CORE0_IBUS_VADDR: u32,
    +        }), base_address + 0x9c);
    +
    +        /// address: 0x600c40a0
    +        /// This description will be updated in the near future.
    +        pub const CACHE_MMU_FAULT_CONTENT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bits are used to indicate the content of mmu entry which cause mmu fault..
    +            CACHE_MMU_FAULT_CONTENT: u10,
    +            /// The right-most 3 bits are used to indicate the operations which cause mmu fault
    +            /// occurrence. 0: default, 1: cpu miss, 2: preload miss, 3: writeback, 4: cpu miss
    +            /// evict recovery address, 5: load miss evict recovery address, 6: external dma tx,
    +            /// 7: external dma rx. The most significant bit is used to indicate this operation
    +            /// occurs in which one icache.
    +            CACHE_MMU_FAULT_CODE: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +        }), base_address + 0xa0);
    +
    +        /// address: 0x600c40a4
    +        /// This description will be updated in the near future.
    +        pub const CACHE_MMU_FAULT_VADDR = @intToPtr(*volatile u32, base_address + 0xa4);
    +
    +        /// address: 0x600c40a8
    +        /// This description will be updated in the near future.
    +        pub const CACHE_WRAP_AROUND_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to enable wrap around mode when read data from flash.
    +            CACHE_FLASH_WRAP_AROUND: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0xa8);
    +
    +        /// address: 0x600c40ac
    +        /// This description will be updated in the near future.
    +        pub const CACHE_MMU_POWER_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to enable clock gating to save power when access mmu memory, 0:
    +            /// enable, 1: disable
    +            CACHE_MMU_MEM_FORCE_ON: u1,
    +            /// The bit is used to power mmu memory down, 0: follow_rtc_lslp_pd, 1: power down
    +            CACHE_MMU_MEM_FORCE_PD: u1,
    +            /// The bit is used to power mmu memory down, 0: follow_rtc_lslp_pd, 1: power up
    +            CACHE_MMU_MEM_FORCE_PU: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +        }), base_address + 0xac);
    +
    +        /// address: 0x600c40b0
    +        /// This description will be updated in the near future.
    +        pub const CACHE_STATE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to indicate whether icache main fsm is in idle state or not. 1:
    +            /// in idle state, 0: not in idle state
    +            ICACHE_STATE: u12,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0xb0);
    +
    +        /// address: 0x600c40b4
    +        /// This description will be updated in the near future.
    +        pub const CACHE_ENCRYPT_DECRYPT_RECORD_DISABLE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Reserved.
    +            RECORD_DISABLE_DB_ENCRYPT: u1,
    +            /// Reserved.
    +            RECORD_DISABLE_G0CB_DECRYPT: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0xb4);
    +
    +        /// address: 0x600c40b8
    +        /// This description will be updated in the near future.
    +        pub const CACHE_ENCRYPT_DECRYPT_CLK_FORCE_ON = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to close clock gating of manual crypt clock. 1: close gating, 0:
    +            /// open clock gating.
    +            CLK_FORCE_ON_MANUAL_CRYPT: u1,
    +            /// The bit is used to close clock gating of automatic crypt clock. 1: close gating,
    +            /// 0: open clock gating.
    +            CLK_FORCE_ON_AUTO_CRYPT: u1,
    +            /// The bit is used to close clock gating of external memory encrypt and decrypt
    +            /// clock. 1: close gating, 0: open clock gating.
    +            CLK_FORCE_ON_CRYPT: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +        }), base_address + 0xb8);
    +
    +        /// address: 0x600c40bc
    +        /// This description will be updated in the near future.
    +        pub const CACHE_PRELOAD_INT_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to indicate the interrupt by icache pre-load done.
    +            ICACHE_PRELOAD_INT_ST: u1,
    +            /// The bit is used to enable the interrupt by icache pre-load done.
    +            ICACHE_PRELOAD_INT_ENA: u1,
    +            /// The bit is used to clear the interrupt by icache pre-load done.
    +            ICACHE_PRELOAD_INT_CLR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +        }), base_address + 0xbc);
    +
    +        /// address: 0x600c40c0
    +        /// This description will be updated in the near future.
    +        pub const CACHE_SYNC_INT_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to indicate the interrupt by icache sync done.
    +            ICACHE_SYNC_INT_ST: u1,
    +            /// The bit is used to enable the interrupt by icache sync done.
    +            ICACHE_SYNC_INT_ENA: u1,
    +            /// The bit is used to clear the interrupt by icache sync done.
    +            ICACHE_SYNC_INT_CLR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +        }), base_address + 0xc0);
    +
    +        /// address: 0x600c40c4
    +        /// This description will be updated in the near future.
    +        pub const CACHE_MMU_OWNER = @intToPtr(*volatile MmioInt(32, u4), base_address + 0xc4);
    +
    +        /// address: 0x600c40c8
    +        /// This description will be updated in the near future.
    +        pub const CACHE_CONF_MISC = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to disable checking mmu entry fault by preload operation.
    +            CACHE_IGNORE_PRELOAD_MMU_ENTRY_FAULT: u1,
    +            /// The bit is used to disable checking mmu entry fault by sync operation.
    +            CACHE_IGNORE_SYNC_MMU_ENTRY_FAULT: u1,
    +            /// The bit is used to enable cache trace function.
    +            CACHE_TRACE_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +        }), base_address + 0xc8);
    +
    +        /// address: 0x600c40cc
    +        /// This description will be updated in the near future.
    +        pub const ICACHE_FREEZE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to enable icache freeze mode
    +            ENA: u1,
    +            /// The bit is used to configure freeze mode, 0: assert busy if CPU miss 1: assert
    +            /// hit if CPU miss
    +            MODE: u1,
    +            /// The bit is used to indicate icache freeze success
    +            DONE: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +        }), base_address + 0xcc);
    +
    +        /// address: 0x600c40d0
    +        /// This description will be updated in the near future.
    +        pub const ICACHE_ATOMIC_OPERATE_ENA = @intToPtr(*volatile MmioInt(32, u1), base_address + 0xd0);
    +
    +        /// address: 0x600c40d4
    +        /// This description will be updated in the near future.
    +        pub const CACHE_REQUEST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to disable request recording which could cause performance issue
    +            BYPASS: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0xd4);
    +
    +        /// address: 0x600c40d8
    +        /// This description will be updated in the near future.
    +        pub const IBUS_PMS_TBL_LOCK = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to configure the ibus permission control section boundary0
    +            IBUS_PMS_LOCK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0xd8);
    +
    +        /// address: 0x600c40dc
    +        /// This description will be updated in the near future.
    +        pub const IBUS_PMS_TBL_BOUNDARY0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to configure the ibus permission control section boundary0
    +            IBUS_PMS_BOUNDARY0: u12,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0xdc);
    +
    +        /// address: 0x600c40e0
    +        /// This description will be updated in the near future.
    +        pub const IBUS_PMS_TBL_BOUNDARY1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to configure the ibus permission control section boundary1
    +            IBUS_PMS_BOUNDARY1: u12,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0xe0);
    +
    +        /// address: 0x600c40e4
    +        /// This description will be updated in the near future.
    +        pub const IBUS_PMS_TBL_BOUNDARY2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to configure the ibus permission control section boundary2
    +            IBUS_PMS_BOUNDARY2: u12,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0xe4);
    +
    +        /// address: 0x600c40e8
    +        /// This description will be updated in the near future.
    +        pub const IBUS_PMS_TBL_ATTR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to configure attribute of the ibus permission control section1,
    +            /// bit0: fetch in world0, bit1: load in world0, bit2: fetch in world1, bit3: load
    +            /// in world1
    +            IBUS_PMS_SCT1_ATTR: u4,
    +            /// The bit is used to configure attribute of the ibus permission control section2,
    +            /// bit0: fetch in world0, bit1: load in world0, bit2: fetch in world1, bit3: load
    +            /// in world1
    +            IBUS_PMS_SCT2_ATTR: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0xe8);
    +
    +        /// address: 0x600c40ec
    +        /// This description will be updated in the near future.
    +        pub const DBUS_PMS_TBL_LOCK = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to configure the ibus permission control section boundary0
    +            DBUS_PMS_LOCK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0xec);
    +
    +        /// address: 0x600c40f0
    +        /// This description will be updated in the near future.
    +        pub const DBUS_PMS_TBL_BOUNDARY0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to configure the dbus permission control section boundary0
    +            DBUS_PMS_BOUNDARY0: u12,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0xf0);
    +
    +        /// address: 0x600c40f4
    +        /// This description will be updated in the near future.
    +        pub const DBUS_PMS_TBL_BOUNDARY1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to configure the dbus permission control section boundary1
    +            DBUS_PMS_BOUNDARY1: u12,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0xf4);
    +
    +        /// address: 0x600c40f8
    +        /// This description will be updated in the near future.
    +        pub const DBUS_PMS_TBL_BOUNDARY2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to configure the dbus permission control section boundary2
    +            DBUS_PMS_BOUNDARY2: u12,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0xf8);
    +
    +        /// address: 0x600c40fc
    +        /// This description will be updated in the near future.
    +        pub const DBUS_PMS_TBL_ATTR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to configure attribute of the dbus permission control section1,
    +            /// bit0: load in world0, bit2: load in world1
    +            DBUS_PMS_SCT1_ATTR: u2,
    +            /// The bit is used to configure attribute of the dbus permission control section2,
    +            /// bit0: load in world0, bit2: load in world1
    +            DBUS_PMS_SCT2_ATTR: u2,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0xfc);
    +
    +        /// address: 0x600c4100
    +        /// This description will be updated in the near future.
    +        pub const CLOCK_GATE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// clock gate enable.
    +            CLK_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x100);
    +
    +        /// address: 0x600c43fc
    +        /// This description will be updated in the near future.
    +        pub const REG_DATE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// version information
    +            DATE: u28,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +        }), base_address + 0x3fc);
    +    };
    +
    +    /// General Purpose Input/Output
    +    pub const GPIO = struct {
    +        pub const base_address = 0x60004000;
    +
    +        /// address: 0x60004000
    +        /// GPIO bit select register
    +        pub const BT_SELECT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// GPIO bit select register
    +            BT_SEL: u32,
    +        }), base_address + 0x0);
    +
    +        /// address: 0x60004004
    +        /// GPIO output register
    +        pub const OUT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// GPIO output register for GPIO0-25
    +            DATA_ORIG: u26,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +        }), base_address + 0x4);
    +
    +        /// address: 0x60004008
    +        /// GPIO output set register
    +        pub const OUT_W1TS = @intToPtr(*volatile MmioInt(32, u26), base_address + 0x8);
    +
    +        /// address: 0x6000400c
    +        /// GPIO output clear register
    +        pub const OUT_W1TC = @intToPtr(*volatile MmioInt(32, u26), base_address + 0xc);
    +
    +        /// address: 0x6000401c
    +        /// GPIO sdio select register
    +        pub const SDIO_SELECT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// GPIO sdio select register
    +            SDIO_SEL: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x1c);
    +
    +        /// address: 0x60004020
    +        /// GPIO output enable register
    +        pub const ENABLE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// GPIO output enable register for GPIO0-25
    +            DATA: u26,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +        }), base_address + 0x20);
    +
    +        /// address: 0x60004024
    +        /// GPIO output enable set register
    +        pub const ENABLE_W1TS = @intToPtr(*volatile MmioInt(32, u26), base_address + 0x24);
    +
    +        /// address: 0x60004028
    +        /// GPIO output enable clear register
    +        pub const ENABLE_W1TC = @intToPtr(*volatile MmioInt(32, u26), base_address + 0x28);
    +
    +        /// address: 0x60004038
    +        /// pad strapping register
    +        pub const STRAP = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// pad strapping register
    +            STRAPPING: u16,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x38);
    +
    +        /// address: 0x6000403c
    +        /// GPIO input register
    +        pub const IN = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// GPIO input register for GPIO0-25
    +            DATA_NEXT: u26,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +        }), base_address + 0x3c);
    +
    +        /// address: 0x60004044
    +        /// GPIO interrupt status register
    +        pub const STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// GPIO interrupt status register for GPIO0-25
    +            INTERRUPT: u26,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +        }), base_address + 0x44);
    +
    +        /// address: 0x60004048
    +        /// GPIO interrupt status set register
    +        pub const STATUS_W1TS = @intToPtr(*volatile MmioInt(32, u26), base_address + 0x48);
    +
    +        /// address: 0x6000404c
    +        /// GPIO interrupt status clear register
    +        pub const STATUS_W1TC = @intToPtr(*volatile MmioInt(32, u26), base_address + 0x4c);
    +
    +        /// address: 0x6000405c
    +        /// GPIO PRO_CPU interrupt status register
    +        pub const PCPU_INT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// GPIO PRO_CPU interrupt status register for GPIO0-25
    +            PROCPU_INT: u26,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +        }), base_address + 0x5c);
    +
    +        /// address: 0x60004060
    +        /// GPIO PRO_CPU(not shielded) interrupt status register
    +        pub const PCPU_NMI_INT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// GPIO PRO_CPU(not shielded) interrupt status register for GPIO0-25
    +            PROCPU_NMI_INT: u26,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +        }), base_address + 0x60);
    +
    +        /// address: 0x60004064
    +        /// GPIO CPUSDIO interrupt status register
    +        pub const CPUSDIO_INT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// GPIO CPUSDIO interrupt status register for GPIO0-25
    +            SDIO_INT: u26,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +        }), base_address + 0x64);
    +
    +        /// address: 0x60004074
    +        /// GPIO pin configuration register
    +        pub const PIN0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC2_BYPASS: u2,
    +            /// set this bit to select pad driver. 1:open-drain. :normal.
    +            PIN_PAD_DRIVER: u1,
    +            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC1_BYPASS: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    +            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    +            /// 5:valid at high level
    +            PIN_INT_TYPE: u3,
    +            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +            PIN_WAKEUP_ENABLE: u1,
    +            /// reserved
    +            PIN_CONFIG: u2,
    +            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    +            /// interrupt.
    +            PIN_INT_ENA: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0x74);
    +
    +        /// address: 0x60004078
    +        /// GPIO pin configuration register
    +        pub const PIN1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC2_BYPASS: u2,
    +            /// set this bit to select pad driver. 1:open-drain. :normal.
    +            PIN_PAD_DRIVER: u1,
    +            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC1_BYPASS: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    +            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    +            /// 5:valid at high level
    +            PIN_INT_TYPE: u3,
    +            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +            PIN_WAKEUP_ENABLE: u1,
    +            /// reserved
    +            PIN_CONFIG: u2,
    +            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    +            /// interrupt.
    +            PIN_INT_ENA: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0x78);
    +
    +        /// address: 0x6000407c
    +        /// GPIO pin configuration register
    +        pub const PIN2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC2_BYPASS: u2,
    +            /// set this bit to select pad driver. 1:open-drain. :normal.
    +            PIN_PAD_DRIVER: u1,
    +            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC1_BYPASS: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    +            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    +            /// 5:valid at high level
    +            PIN_INT_TYPE: u3,
    +            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +            PIN_WAKEUP_ENABLE: u1,
    +            /// reserved
    +            PIN_CONFIG: u2,
    +            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    +            /// interrupt.
    +            PIN_INT_ENA: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0x7c);
    +
    +        /// address: 0x60004080
    +        /// GPIO pin configuration register
    +        pub const PIN3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC2_BYPASS: u2,
    +            /// set this bit to select pad driver. 1:open-drain. :normal.
    +            PIN_PAD_DRIVER: u1,
    +            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC1_BYPASS: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    +            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    +            /// 5:valid at high level
    +            PIN_INT_TYPE: u3,
    +            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +            PIN_WAKEUP_ENABLE: u1,
    +            /// reserved
    +            PIN_CONFIG: u2,
    +            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    +            /// interrupt.
    +            PIN_INT_ENA: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0x80);
    +
    +        /// address: 0x60004084
    +        /// GPIO pin configuration register
    +        pub const PIN4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC2_BYPASS: u2,
    +            /// set this bit to select pad driver. 1:open-drain. :normal.
    +            PIN_PAD_DRIVER: u1,
    +            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC1_BYPASS: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    +            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    +            /// 5:valid at high level
    +            PIN_INT_TYPE: u3,
    +            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +            PIN_WAKEUP_ENABLE: u1,
    +            /// reserved
    +            PIN_CONFIG: u2,
    +            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    +            /// interrupt.
    +            PIN_INT_ENA: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0x84);
    +
    +        /// address: 0x60004088
    +        /// GPIO pin configuration register
    +        pub const PIN5 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC2_BYPASS: u2,
    +            /// set this bit to select pad driver. 1:open-drain. :normal.
    +            PIN_PAD_DRIVER: u1,
    +            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC1_BYPASS: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    +            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    +            /// 5:valid at high level
    +            PIN_INT_TYPE: u3,
    +            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +            PIN_WAKEUP_ENABLE: u1,
    +            /// reserved
    +            PIN_CONFIG: u2,
    +            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    +            /// interrupt.
    +            PIN_INT_ENA: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0x88);
    +
    +        /// address: 0x6000408c
    +        /// GPIO pin configuration register
    +        pub const PIN6 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC2_BYPASS: u2,
    +            /// set this bit to select pad driver. 1:open-drain. :normal.
    +            PIN_PAD_DRIVER: u1,
    +            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC1_BYPASS: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    +            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    +            /// 5:valid at high level
    +            PIN_INT_TYPE: u3,
    +            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +            PIN_WAKEUP_ENABLE: u1,
    +            /// reserved
    +            PIN_CONFIG: u2,
    +            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    +            /// interrupt.
    +            PIN_INT_ENA: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0x8c);
    +
    +        /// address: 0x60004090
    +        /// GPIO pin configuration register
    +        pub const PIN7 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC2_BYPASS: u2,
    +            /// set this bit to select pad driver. 1:open-drain. :normal.
    +            PIN_PAD_DRIVER: u1,
    +            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC1_BYPASS: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    +            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    +            /// 5:valid at high level
    +            PIN_INT_TYPE: u3,
    +            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +            PIN_WAKEUP_ENABLE: u1,
    +            /// reserved
    +            PIN_CONFIG: u2,
    +            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    +            /// interrupt.
    +            PIN_INT_ENA: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0x90);
    +
    +        /// address: 0x60004094
    +        /// GPIO pin configuration register
    +        pub const PIN8 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC2_BYPASS: u2,
    +            /// set this bit to select pad driver. 1:open-drain. :normal.
    +            PIN_PAD_DRIVER: u1,
    +            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC1_BYPASS: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    +            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    +            /// 5:valid at high level
    +            PIN_INT_TYPE: u3,
    +            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +            PIN_WAKEUP_ENABLE: u1,
    +            /// reserved
    +            PIN_CONFIG: u2,
    +            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    +            /// interrupt.
    +            PIN_INT_ENA: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0x94);
    +
    +        /// address: 0x60004098
    +        /// GPIO pin configuration register
    +        pub const PIN9 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC2_BYPASS: u2,
    +            /// set this bit to select pad driver. 1:open-drain. :normal.
    +            PIN_PAD_DRIVER: u1,
    +            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC1_BYPASS: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    +            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    +            /// 5:valid at high level
    +            PIN_INT_TYPE: u3,
    +            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +            PIN_WAKEUP_ENABLE: u1,
    +            /// reserved
    +            PIN_CONFIG: u2,
    +            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    +            /// interrupt.
    +            PIN_INT_ENA: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0x98);
    +
    +        /// address: 0x6000409c
    +        /// GPIO pin configuration register
    +        pub const PIN10 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC2_BYPASS: u2,
    +            /// set this bit to select pad driver. 1:open-drain. :normal.
    +            PIN_PAD_DRIVER: u1,
    +            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC1_BYPASS: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    +            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    +            /// 5:valid at high level
    +            PIN_INT_TYPE: u3,
    +            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +            PIN_WAKEUP_ENABLE: u1,
    +            /// reserved
    +            PIN_CONFIG: u2,
    +            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    +            /// interrupt.
    +            PIN_INT_ENA: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0x9c);
    +
    +        /// address: 0x600040a0
    +        /// GPIO pin configuration register
    +        pub const PIN11 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC2_BYPASS: u2,
    +            /// set this bit to select pad driver. 1:open-drain. :normal.
    +            PIN_PAD_DRIVER: u1,
    +            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC1_BYPASS: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    +            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    +            /// 5:valid at high level
    +            PIN_INT_TYPE: u3,
    +            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +            PIN_WAKEUP_ENABLE: u1,
    +            /// reserved
    +            PIN_CONFIG: u2,
    +            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    +            /// interrupt.
    +            PIN_INT_ENA: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0xa0);
    +
    +        /// address: 0x600040a4
    +        /// GPIO pin configuration register
    +        pub const PIN12 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC2_BYPASS: u2,
    +            /// set this bit to select pad driver. 1:open-drain. :normal.
    +            PIN_PAD_DRIVER: u1,
    +            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC1_BYPASS: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    +            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    +            /// 5:valid at high level
    +            PIN_INT_TYPE: u3,
    +            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +            PIN_WAKEUP_ENABLE: u1,
    +            /// reserved
    +            PIN_CONFIG: u2,
    +            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    +            /// interrupt.
    +            PIN_INT_ENA: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0xa4);
    +
    +        /// address: 0x600040a8
    +        /// GPIO pin configuration register
    +        pub const PIN13 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC2_BYPASS: u2,
    +            /// set this bit to select pad driver. 1:open-drain. :normal.
    +            PIN_PAD_DRIVER: u1,
    +            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC1_BYPASS: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    +            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    +            /// 5:valid at high level
    +            PIN_INT_TYPE: u3,
    +            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +            PIN_WAKEUP_ENABLE: u1,
    +            /// reserved
    +            PIN_CONFIG: u2,
    +            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    +            /// interrupt.
    +            PIN_INT_ENA: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0xa8);
    +
    +        /// address: 0x600040ac
    +        /// GPIO pin configuration register
    +        pub const PIN14 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC2_BYPASS: u2,
    +            /// set this bit to select pad driver. 1:open-drain. :normal.
    +            PIN_PAD_DRIVER: u1,
    +            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC1_BYPASS: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    +            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    +            /// 5:valid at high level
    +            PIN_INT_TYPE: u3,
    +            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +            PIN_WAKEUP_ENABLE: u1,
    +            /// reserved
    +            PIN_CONFIG: u2,
    +            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    +            /// interrupt.
    +            PIN_INT_ENA: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0xac);
    +
    +        /// address: 0x600040b0
    +        /// GPIO pin configuration register
    +        pub const PIN15 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC2_BYPASS: u2,
    +            /// set this bit to select pad driver. 1:open-drain. :normal.
    +            PIN_PAD_DRIVER: u1,
    +            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC1_BYPASS: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    +            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    +            /// 5:valid at high level
    +            PIN_INT_TYPE: u3,
    +            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +            PIN_WAKEUP_ENABLE: u1,
    +            /// reserved
    +            PIN_CONFIG: u2,
    +            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    +            /// interrupt.
    +            PIN_INT_ENA: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0xb0);
    +
    +        /// address: 0x600040b4
    +        /// GPIO pin configuration register
    +        pub const PIN16 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC2_BYPASS: u2,
    +            /// set this bit to select pad driver. 1:open-drain. :normal.
    +            PIN_PAD_DRIVER: u1,
    +            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC1_BYPASS: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    +            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    +            /// 5:valid at high level
    +            PIN_INT_TYPE: u3,
    +            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +            PIN_WAKEUP_ENABLE: u1,
    +            /// reserved
    +            PIN_CONFIG: u2,
    +            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    +            /// interrupt.
    +            PIN_INT_ENA: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0xb4);
    +
    +        /// address: 0x600040b8
    +        /// GPIO pin configuration register
    +        pub const PIN17 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC2_BYPASS: u2,
    +            /// set this bit to select pad driver. 1:open-drain. :normal.
    +            PIN_PAD_DRIVER: u1,
    +            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC1_BYPASS: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    +            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    +            /// 5:valid at high level
    +            PIN_INT_TYPE: u3,
    +            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +            PIN_WAKEUP_ENABLE: u1,
    +            /// reserved
    +            PIN_CONFIG: u2,
    +            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    +            /// interrupt.
    +            PIN_INT_ENA: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0xb8);
    +
    +        /// address: 0x600040bc
    +        /// GPIO pin configuration register
    +        pub const PIN18 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC2_BYPASS: u2,
    +            /// set this bit to select pad driver. 1:open-drain. :normal.
    +            PIN_PAD_DRIVER: u1,
    +            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC1_BYPASS: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    +            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    +            /// 5:valid at high level
    +            PIN_INT_TYPE: u3,
    +            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +            PIN_WAKEUP_ENABLE: u1,
    +            /// reserved
    +            PIN_CONFIG: u2,
    +            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    +            /// interrupt.
    +            PIN_INT_ENA: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0xbc);
    +
    +        /// address: 0x600040c0
    +        /// GPIO pin configuration register
    +        pub const PIN19 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC2_BYPASS: u2,
    +            /// set this bit to select pad driver. 1:open-drain. :normal.
    +            PIN_PAD_DRIVER: u1,
    +            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC1_BYPASS: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    +            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    +            /// 5:valid at high level
    +            PIN_INT_TYPE: u3,
    +            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +            PIN_WAKEUP_ENABLE: u1,
    +            /// reserved
    +            PIN_CONFIG: u2,
    +            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    +            /// interrupt.
    +            PIN_INT_ENA: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0xc0);
    +
    +        /// address: 0x600040c4
    +        /// GPIO pin configuration register
    +        pub const PIN20 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC2_BYPASS: u2,
    +            /// set this bit to select pad driver. 1:open-drain. :normal.
    +            PIN_PAD_DRIVER: u1,
    +            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC1_BYPASS: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    +            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    +            /// 5:valid at high level
    +            PIN_INT_TYPE: u3,
    +            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +            PIN_WAKEUP_ENABLE: u1,
    +            /// reserved
    +            PIN_CONFIG: u2,
    +            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    +            /// interrupt.
    +            PIN_INT_ENA: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0xc4);
    +
    +        /// address: 0x600040c8
    +        /// GPIO pin configuration register
    +        pub const PIN21 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC2_BYPASS: u2,
    +            /// set this bit to select pad driver. 1:open-drain. :normal.
    +            PIN_PAD_DRIVER: u1,
    +            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC1_BYPASS: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    +            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    +            /// 5:valid at high level
    +            PIN_INT_TYPE: u3,
    +            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +            PIN_WAKEUP_ENABLE: u1,
    +            /// reserved
    +            PIN_CONFIG: u2,
    +            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    +            /// interrupt.
    +            PIN_INT_ENA: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0xc8);
    +
    +        /// address: 0x600040cc
    +        /// GPIO pin configuration register
    +        pub const PIN22 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC2_BYPASS: u2,
    +            /// set this bit to select pad driver. 1:open-drain. :normal.
    +            PIN_PAD_DRIVER: u1,
    +            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC1_BYPASS: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    +            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    +            /// 5:valid at high level
    +            PIN_INT_TYPE: u3,
    +            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +            PIN_WAKEUP_ENABLE: u1,
    +            /// reserved
    +            PIN_CONFIG: u2,
    +            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    +            /// interrupt.
    +            PIN_INT_ENA: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0xcc);
    +
    +        /// address: 0x600040d0
    +        /// GPIO pin configuration register
    +        pub const PIN23 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC2_BYPASS: u2,
    +            /// set this bit to select pad driver. 1:open-drain. :normal.
    +            PIN_PAD_DRIVER: u1,
    +            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC1_BYPASS: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    +            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    +            /// 5:valid at high level
    +            PIN_INT_TYPE: u3,
    +            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +            PIN_WAKEUP_ENABLE: u1,
    +            /// reserved
    +            PIN_CONFIG: u2,
    +            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    +            /// interrupt.
    +            PIN_INT_ENA: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0xd0);
    +
    +        /// address: 0x600040d4
    +        /// GPIO pin configuration register
    +        pub const PIN24 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC2_BYPASS: u2,
    +            /// set this bit to select pad driver. 1:open-drain. :normal.
    +            PIN_PAD_DRIVER: u1,
    +            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC1_BYPASS: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    +            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    +            /// 5:valid at high level
    +            PIN_INT_TYPE: u3,
    +            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +            PIN_WAKEUP_ENABLE: u1,
    +            /// reserved
    +            PIN_CONFIG: u2,
    +            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    +            /// interrupt.
    +            PIN_INT_ENA: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0xd4);
    +
    +        /// address: 0x600040d8
    +        /// GPIO pin configuration register
    +        pub const PIN25 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC2_BYPASS: u2,
    +            /// set this bit to select pad driver. 1:open-drain. :normal.
    +            PIN_PAD_DRIVER: u1,
    +            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    +            /// at posedge.
    +            PIN_SYNC1_BYPASS: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    +            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    +            /// 5:valid at high level
    +            PIN_INT_TYPE: u3,
    +            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +            PIN_WAKEUP_ENABLE: u1,
    +            /// reserved
    +            PIN_CONFIG: u2,
    +            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    +            /// interrupt.
    +            PIN_INT_ENA: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0xd8);
    +
    +        /// address: 0x6000414c
    +        /// GPIO interrupt source register
    +        pub const STATUS_NEXT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// GPIO interrupt source register for GPIO0-25
    +            STATUS_INTERRUPT_NEXT: u26,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +        }), base_address + 0x14c);
    +
    +        /// address: 0x60004154
    +        /// GPIO input function configuration register
    +        pub const FUNC0_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x154);
    +
    +        /// address: 0x60004158
    +        /// GPIO input function configuration register
    +        pub const FUNC1_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x158);
    +
    +        /// address: 0x6000415c
    +        /// GPIO input function configuration register
    +        pub const FUNC2_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x15c);
    +
    +        /// address: 0x60004160
    +        /// GPIO input function configuration register
    +        pub const FUNC3_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x160);
    +
    +        /// address: 0x60004164
    +        /// GPIO input function configuration register
    +        pub const FUNC4_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x164);
    +
    +        /// address: 0x60004168
    +        /// GPIO input function configuration register
    +        pub const FUNC5_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x168);
    +
    +        /// address: 0x6000416c
    +        /// GPIO input function configuration register
    +        pub const FUNC6_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x16c);
    +
    +        /// address: 0x60004170
    +        /// GPIO input function configuration register
    +        pub const FUNC7_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x170);
    +
    +        /// address: 0x60004174
    +        /// GPIO input function configuration register
    +        pub const FUNC8_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x174);
    +
    +        /// address: 0x60004178
    +        /// GPIO input function configuration register
    +        pub const FUNC9_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x178);
    +
    +        /// address: 0x6000417c
    +        /// GPIO input function configuration register
    +        pub const FUNC10_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x17c);
    +
    +        /// address: 0x60004180
    +        /// GPIO input function configuration register
    +        pub const FUNC11_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x180);
    +
    +        /// address: 0x60004184
    +        /// GPIO input function configuration register
    +        pub const FUNC12_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x184);
    +
    +        /// address: 0x60004188
    +        /// GPIO input function configuration register
    +        pub const FUNC13_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x188);
    +
    +        /// address: 0x6000418c
    +        /// GPIO input function configuration register
    +        pub const FUNC14_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x18c);
    +
    +        /// address: 0x60004190
    +        /// GPIO input function configuration register
    +        pub const FUNC15_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x190);
    +
    +        /// address: 0x60004194
    +        /// GPIO input function configuration register
    +        pub const FUNC16_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x194);
    +
    +        /// address: 0x60004198
    +        /// GPIO input function configuration register
    +        pub const FUNC17_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x198);
    +
    +        /// address: 0x6000419c
    +        /// GPIO input function configuration register
    +        pub const FUNC18_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x19c);
    +
    +        /// address: 0x600041a0
    +        /// GPIO input function configuration register
    +        pub const FUNC19_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x1a0);
    +
    +        /// address: 0x600041a4
    +        /// GPIO input function configuration register
    +        pub const FUNC20_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x1a4);
    +
    +        /// address: 0x600041a8
    +        /// GPIO input function configuration register
    +        pub const FUNC21_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x1a8);
    +
    +        /// address: 0x600041ac
    +        /// GPIO input function configuration register
    +        pub const FUNC22_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x1ac);
    +
    +        /// address: 0x600041b0
    +        /// GPIO input function configuration register
    +        pub const FUNC23_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x1b0);
    +
    +        /// address: 0x600041b4
    +        /// GPIO input function configuration register
    +        pub const FUNC24_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x1b4);
    +
    +        /// address: 0x600041b8
    +        /// GPIO input function configuration register
    +        pub const FUNC25_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x1b8);
    +
    +        /// address: 0x600041bc
    +        /// GPIO input function configuration register
    +        pub const FUNC26_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x1bc);
    +
    +        /// address: 0x600041c0
    +        /// GPIO input function configuration register
    +        pub const FUNC27_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x1c0);
    +
    +        /// address: 0x600041c4
    +        /// GPIO input function configuration register
    +        pub const FUNC28_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x1c4);
    +
    +        /// address: 0x600041c8
    +        /// GPIO input function configuration register
    +        pub const FUNC29_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x1c8);
    +
    +        /// address: 0x600041cc
    +        /// GPIO input function configuration register
    +        pub const FUNC30_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x1cc);
    +
    +        /// address: 0x600041d0
    +        /// GPIO input function configuration register
    +        pub const FUNC31_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x1d0);
    +
    +        /// address: 0x600041d4
    +        /// GPIO input function configuration register
    +        pub const FUNC32_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x1d4);
    +
    +        /// address: 0x600041d8
    +        /// GPIO input function configuration register
    +        pub const FUNC33_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x1d8);
    +
    +        /// address: 0x600041dc
    +        /// GPIO input function configuration register
    +        pub const FUNC34_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x1dc);
    +
    +        /// address: 0x600041e0
    +        /// GPIO input function configuration register
    +        pub const FUNC35_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x1e0);
    +
    +        /// address: 0x600041e4
    +        /// GPIO input function configuration register
    +        pub const FUNC36_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x1e4);
    +
    +        /// address: 0x600041e8
    +        /// GPIO input function configuration register
    +        pub const FUNC37_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x1e8);
    +
    +        /// address: 0x600041ec
    +        /// GPIO input function configuration register
    +        pub const FUNC38_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x1ec);
    +
    +        /// address: 0x600041f0
    +        /// GPIO input function configuration register
    +        pub const FUNC39_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x1f0);
    +
    +        /// address: 0x600041f4
    +        /// GPIO input function configuration register
    +        pub const FUNC40_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x1f4);
    +
    +        /// address: 0x600041f8
    +        /// GPIO input function configuration register
    +        pub const FUNC41_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x1f8);
    +
    +        /// address: 0x600041fc
    +        /// GPIO input function configuration register
    +        pub const FUNC42_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x1fc);
    +
    +        /// address: 0x60004200
    +        /// GPIO input function configuration register
    +        pub const FUNC43_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x200);
    +
    +        /// address: 0x60004204
    +        /// GPIO input function configuration register
    +        pub const FUNC44_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x204);
    +
    +        /// address: 0x60004208
    +        /// GPIO input function configuration register
    +        pub const FUNC45_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x208);
    +
    +        /// address: 0x6000420c
    +        /// GPIO input function configuration register
    +        pub const FUNC46_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x20c);
    +
    +        /// address: 0x60004210
    +        /// GPIO input function configuration register
    +        pub const FUNC47_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x210);
    +
    +        /// address: 0x60004214
    +        /// GPIO input function configuration register
    +        pub const FUNC48_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x214);
    +
    +        /// address: 0x60004218
    +        /// GPIO input function configuration register
    +        pub const FUNC49_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x218);
    +
    +        /// address: 0x6000421c
    +        /// GPIO input function configuration register
    +        pub const FUNC50_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x21c);
    +
    +        /// address: 0x60004220
    +        /// GPIO input function configuration register
    +        pub const FUNC51_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x220);
    +
    +        /// address: 0x60004224
    +        /// GPIO input function configuration register
    +        pub const FUNC52_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x224);
    +
    +        /// address: 0x60004228
    +        /// GPIO input function configuration register
    +        pub const FUNC53_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x228);
    +
    +        /// address: 0x6000422c
    +        /// GPIO input function configuration register
    +        pub const FUNC54_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x22c);
    +
    +        /// address: 0x60004230
    +        /// GPIO input function configuration register
    +        pub const FUNC55_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x230);
    +
    +        /// address: 0x60004234
    +        /// GPIO input function configuration register
    +        pub const FUNC56_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x234);
    +
    +        /// address: 0x60004238
    +        /// GPIO input function configuration register
    +        pub const FUNC57_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x238);
    +
    +        /// address: 0x6000423c
    +        /// GPIO input function configuration register
    +        pub const FUNC58_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x23c);
    +
    +        /// address: 0x60004240
    +        /// GPIO input function configuration register
    +        pub const FUNC59_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x240);
    +
    +        /// address: 0x60004244
    +        /// GPIO input function configuration register
    +        pub const FUNC60_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x244);
    +
    +        /// address: 0x60004248
    +        /// GPIO input function configuration register
    +        pub const FUNC61_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x248);
    +
    +        /// address: 0x6000424c
    +        /// GPIO input function configuration register
    +        pub const FUNC62_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x24c);
    +
    +        /// address: 0x60004250
    +        /// GPIO input function configuration register
    +        pub const FUNC63_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x250);
    +
    +        /// address: 0x60004254
    +        /// GPIO input function configuration register
    +        pub const FUNC64_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x254);
    +
    +        /// address: 0x60004258
    +        /// GPIO input function configuration register
    +        pub const FUNC65_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x258);
    +
    +        /// address: 0x6000425c
    +        /// GPIO input function configuration register
    +        pub const FUNC66_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x25c);
    +
    +        /// address: 0x60004260
    +        /// GPIO input function configuration register
    +        pub const FUNC67_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x260);
    +
    +        /// address: 0x60004264
    +        /// GPIO input function configuration register
    +        pub const FUNC68_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x264);
    +
    +        /// address: 0x60004268
    +        /// GPIO input function configuration register
    +        pub const FUNC69_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x268);
    +
    +        /// address: 0x6000426c
    +        /// GPIO input function configuration register
    +        pub const FUNC70_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x26c);
    +
    +        /// address: 0x60004270
    +        /// GPIO input function configuration register
    +        pub const FUNC71_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x270);
    +
    +        /// address: 0x60004274
    +        /// GPIO input function configuration register
    +        pub const FUNC72_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x274);
    +
    +        /// address: 0x60004278
    +        /// GPIO input function configuration register
    +        pub const FUNC73_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x278);
    +
    +        /// address: 0x6000427c
    +        /// GPIO input function configuration register
    +        pub const FUNC74_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x27c);
    +
    +        /// address: 0x60004280
    +        /// GPIO input function configuration register
    +        pub const FUNC75_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x280);
    +
    +        /// address: 0x60004284
    +        /// GPIO input function configuration register
    +        pub const FUNC76_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x284);
    +
    +        /// address: 0x60004288
    +        /// GPIO input function configuration register
    +        pub const FUNC77_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x288);
    +
    +        /// address: 0x6000428c
    +        /// GPIO input function configuration register
    +        pub const FUNC78_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x28c);
    +
    +        /// address: 0x60004290
    +        /// GPIO input function configuration register
    +        pub const FUNC79_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x290);
    +
    +        /// address: 0x60004294
    +        /// GPIO input function configuration register
    +        pub const FUNC80_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x294);
    +
    +        /// address: 0x60004298
    +        /// GPIO input function configuration register
    +        pub const FUNC81_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x298);
    +
    +        /// address: 0x6000429c
    +        /// GPIO input function configuration register
    +        pub const FUNC82_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x29c);
    +
    +        /// address: 0x600042a0
    +        /// GPIO input function configuration register
    +        pub const FUNC83_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x2a0);
    +
    +        /// address: 0x600042a4
    +        /// GPIO input function configuration register
    +        pub const FUNC84_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x2a4);
    +
    +        /// address: 0x600042a8
    +        /// GPIO input function configuration register
    +        pub const FUNC85_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x2a8);
    +
    +        /// address: 0x600042ac
    +        /// GPIO input function configuration register
    +        pub const FUNC86_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x2ac);
    +
    +        /// address: 0x600042b0
    +        /// GPIO input function configuration register
    +        pub const FUNC87_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x2b0);
    +
    +        /// address: 0x600042b4
    +        /// GPIO input function configuration register
    +        pub const FUNC88_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x2b4);
    +
    +        /// address: 0x600042b8
    +        /// GPIO input function configuration register
    +        pub const FUNC89_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x2b8);
    +
    +        /// address: 0x600042bc
    +        /// GPIO input function configuration register
    +        pub const FUNC90_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x2bc);
    +
    +        /// address: 0x600042c0
    +        /// GPIO input function configuration register
    +        pub const FUNC91_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x2c0);
    +
    +        /// address: 0x600042c4
    +        /// GPIO input function configuration register
    +        pub const FUNC92_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x2c4);
    +
    +        /// address: 0x600042c8
    +        /// GPIO input function configuration register
    +        pub const FUNC93_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x2c8);
    +
    +        /// address: 0x600042cc
    +        /// GPIO input function configuration register
    +        pub const FUNC94_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x2cc);
    +
    +        /// address: 0x600042d0
    +        /// GPIO input function configuration register
    +        pub const FUNC95_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x2d0);
    +
    +        /// address: 0x600042d4
    +        /// GPIO input function configuration register
    +        pub const FUNC96_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x2d4);
    +
    +        /// address: 0x600042d8
    +        /// GPIO input function configuration register
    +        pub const FUNC97_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x2d8);
    +
    +        /// address: 0x600042dc
    +        /// GPIO input function configuration register
    +        pub const FUNC98_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x2dc);
    +
    +        /// address: 0x600042e0
    +        /// GPIO input function configuration register
    +        pub const FUNC99_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x2e0);
    +
    +        /// address: 0x600042e4
    +        /// GPIO input function configuration register
    +        pub const FUNC100_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x2e4);
    +
    +        /// address: 0x600042e8
    +        /// GPIO input function configuration register
    +        pub const FUNC101_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x2e8);
    +
    +        /// address: 0x600042ec
    +        /// GPIO input function configuration register
    +        pub const FUNC102_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x2ec);
    +
    +        /// address: 0x600042f0
    +        /// GPIO input function configuration register
    +        pub const FUNC103_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x2f0);
    +
    +        /// address: 0x600042f4
    +        /// GPIO input function configuration register
    +        pub const FUNC104_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x2f4);
    +
    +        /// address: 0x600042f8
    +        /// GPIO input function configuration register
    +        pub const FUNC105_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x2f8);
    +
    +        /// address: 0x600042fc
    +        /// GPIO input function configuration register
    +        pub const FUNC106_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x2fc);
    +
    +        /// address: 0x60004300
    +        /// GPIO input function configuration register
    +        pub const FUNC107_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x300);
    +
    +        /// address: 0x60004304
    +        /// GPIO input function configuration register
    +        pub const FUNC108_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x304);
    +
    +        /// address: 0x60004308
    +        /// GPIO input function configuration register
    +        pub const FUNC109_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x308);
    +
    +        /// address: 0x6000430c
    +        /// GPIO input function configuration register
    +        pub const FUNC110_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x30c);
    +
    +        /// address: 0x60004310
    +        /// GPIO input function configuration register
    +        pub const FUNC111_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x310);
    +
    +        /// address: 0x60004314
    +        /// GPIO input function configuration register
    +        pub const FUNC112_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x314);
    +
    +        /// address: 0x60004318
    +        /// GPIO input function configuration register
    +        pub const FUNC113_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x318);
    +
    +        /// address: 0x6000431c
    +        /// GPIO input function configuration register
    +        pub const FUNC114_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x31c);
    +
    +        /// address: 0x60004320
    +        /// GPIO input function configuration register
    +        pub const FUNC115_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x320);
    +
    +        /// address: 0x60004324
    +        /// GPIO input function configuration register
    +        pub const FUNC116_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x324);
    +
    +        /// address: 0x60004328
    +        /// GPIO input function configuration register
    +        pub const FUNC117_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x328);
    +
    +        /// address: 0x6000432c
    +        /// GPIO input function configuration register
    +        pub const FUNC118_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x32c);
    +
    +        /// address: 0x60004330
    +        /// GPIO input function configuration register
    +        pub const FUNC119_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x330);
    +
    +        /// address: 0x60004334
    +        /// GPIO input function configuration register
    +        pub const FUNC120_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x334);
    +
    +        /// address: 0x60004338
    +        /// GPIO input function configuration register
    +        pub const FUNC121_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x338);
    +
    +        /// address: 0x6000433c
    +        /// GPIO input function configuration register
    +        pub const FUNC122_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x33c);
    +
    +        /// address: 0x60004340
    +        /// GPIO input function configuration register
    +        pub const FUNC123_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x340);
    +
    +        /// address: 0x60004344
    +        /// GPIO input function configuration register
    +        pub const FUNC124_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x344);
    +
    +        /// address: 0x60004348
    +        /// GPIO input function configuration register
    +        pub const FUNC125_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x348);
    +
    +        /// address: 0x6000434c
    +        /// GPIO input function configuration register
    +        pub const FUNC126_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x34c);
    +
    +        /// address: 0x60004350
    +        /// GPIO input function configuration register
    +        pub const FUNC127_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    +            /// high level. s=x3C: set this port always low level.
    +            IN_SEL: u5,
    +            /// set this bit to invert input signal. 1:invert. :not invert.
    +            IN_INV_SEL: u1,
    +            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +            SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x350);
    +
    +        /// address: 0x60004554
    +        /// GPIO output function select register
    +        pub const FUNC0_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    +            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    +            /// GPIO_OUT_REG[n].
    +            OUT_SEL: u8,
    +            /// set this bit to invert output signal.1:invert.:not invert.
    +            INV_SEL: u1,
    +            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    +            /// enable signal.:use peripheral output enable signal.
    +            OEN_SEL: u1,
    +            /// set this bit to invert output enable signal.1:invert.:not invert.
    +            OEN_INV_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x554);
    +
    +        /// address: 0x60004558
    +        /// GPIO output function select register
    +        pub const FUNC1_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    +            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    +            /// GPIO_OUT_REG[n].
    +            OUT_SEL: u8,
    +            /// set this bit to invert output signal.1:invert.:not invert.
    +            INV_SEL: u1,
    +            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    +            /// enable signal.:use peripheral output enable signal.
    +            OEN_SEL: u1,
    +            /// set this bit to invert output enable signal.1:invert.:not invert.
    +            OEN_INV_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x558);
    +
    +        /// address: 0x6000455c
    +        /// GPIO output function select register
    +        pub const FUNC2_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    +            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    +            /// GPIO_OUT_REG[n].
    +            OUT_SEL: u8,
    +            /// set this bit to invert output signal.1:invert.:not invert.
    +            INV_SEL: u1,
    +            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    +            /// enable signal.:use peripheral output enable signal.
    +            OEN_SEL: u1,
    +            /// set this bit to invert output enable signal.1:invert.:not invert.
    +            OEN_INV_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x55c);
    +
    +        /// address: 0x60004560
    +        /// GPIO output function select register
    +        pub const FUNC3_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    +            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    +            /// GPIO_OUT_REG[n].
    +            OUT_SEL: u8,
    +            /// set this bit to invert output signal.1:invert.:not invert.
    +            INV_SEL: u1,
    +            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    +            /// enable signal.:use peripheral output enable signal.
    +            OEN_SEL: u1,
    +            /// set this bit to invert output enable signal.1:invert.:not invert.
    +            OEN_INV_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x560);
    +
    +        /// address: 0x60004564
    +        /// GPIO output function select register
    +        pub const FUNC4_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    +            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    +            /// GPIO_OUT_REG[n].
    +            OUT_SEL: u8,
    +            /// set this bit to invert output signal.1:invert.:not invert.
    +            INV_SEL: u1,
    +            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    +            /// enable signal.:use peripheral output enable signal.
    +            OEN_SEL: u1,
    +            /// set this bit to invert output enable signal.1:invert.:not invert.
    +            OEN_INV_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x564);
    +
    +        /// address: 0x60004568
    +        /// GPIO output function select register
    +        pub const FUNC5_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    +            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    +            /// GPIO_OUT_REG[n].
    +            OUT_SEL: u8,
    +            /// set this bit to invert output signal.1:invert.:not invert.
    +            INV_SEL: u1,
    +            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    +            /// enable signal.:use peripheral output enable signal.
    +            OEN_SEL: u1,
    +            /// set this bit to invert output enable signal.1:invert.:not invert.
    +            OEN_INV_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x568);
    +
    +        /// address: 0x6000456c
    +        /// GPIO output function select register
    +        pub const FUNC6_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    +            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    +            /// GPIO_OUT_REG[n].
    +            OUT_SEL: u8,
    +            /// set this bit to invert output signal.1:invert.:not invert.
    +            INV_SEL: u1,
    +            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    +            /// enable signal.:use peripheral output enable signal.
    +            OEN_SEL: u1,
    +            /// set this bit to invert output enable signal.1:invert.:not invert.
    +            OEN_INV_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x56c);
    +
    +        /// address: 0x60004570
    +        /// GPIO output function select register
    +        pub const FUNC7_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    +            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    +            /// GPIO_OUT_REG[n].
    +            OUT_SEL: u8,
    +            /// set this bit to invert output signal.1:invert.:not invert.
    +            INV_SEL: u1,
    +            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    +            /// enable signal.:use peripheral output enable signal.
    +            OEN_SEL: u1,
    +            /// set this bit to invert output enable signal.1:invert.:not invert.
    +            OEN_INV_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x570);
    +
    +        /// address: 0x60004574
    +        /// GPIO output function select register
    +        pub const FUNC8_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    +            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    +            /// GPIO_OUT_REG[n].
    +            OUT_SEL: u8,
    +            /// set this bit to invert output signal.1:invert.:not invert.
    +            INV_SEL: u1,
    +            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    +            /// enable signal.:use peripheral output enable signal.
    +            OEN_SEL: u1,
    +            /// set this bit to invert output enable signal.1:invert.:not invert.
    +            OEN_INV_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x574);
    +
    +        /// address: 0x60004578
    +        /// GPIO output function select register
    +        pub const FUNC9_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    +            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    +            /// GPIO_OUT_REG[n].
    +            OUT_SEL: u8,
    +            /// set this bit to invert output signal.1:invert.:not invert.
    +            INV_SEL: u1,
    +            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    +            /// enable signal.:use peripheral output enable signal.
    +            OEN_SEL: u1,
    +            /// set this bit to invert output enable signal.1:invert.:not invert.
    +            OEN_INV_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x578);
    +
    +        /// address: 0x6000457c
    +        /// GPIO output function select register
    +        pub const FUNC10_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    +            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    +            /// GPIO_OUT_REG[n].
    +            OUT_SEL: u8,
    +            /// set this bit to invert output signal.1:invert.:not invert.
    +            INV_SEL: u1,
    +            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    +            /// enable signal.:use peripheral output enable signal.
    +            OEN_SEL: u1,
    +            /// set this bit to invert output enable signal.1:invert.:not invert.
    +            OEN_INV_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x57c);
    +
    +        /// address: 0x60004580
    +        /// GPIO output function select register
    +        pub const FUNC11_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    +            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    +            /// GPIO_OUT_REG[n].
    +            OUT_SEL: u8,
    +            /// set this bit to invert output signal.1:invert.:not invert.
    +            INV_SEL: u1,
    +            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    +            /// enable signal.:use peripheral output enable signal.
    +            OEN_SEL: u1,
    +            /// set this bit to invert output enable signal.1:invert.:not invert.
    +            OEN_INV_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x580);
    +
    +        /// address: 0x60004584
    +        /// GPIO output function select register
    +        pub const FUNC12_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    +            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    +            /// GPIO_OUT_REG[n].
    +            OUT_SEL: u8,
    +            /// set this bit to invert output signal.1:invert.:not invert.
    +            INV_SEL: u1,
    +            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    +            /// enable signal.:use peripheral output enable signal.
    +            OEN_SEL: u1,
    +            /// set this bit to invert output enable signal.1:invert.:not invert.
    +            OEN_INV_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x584);
    +
    +        /// address: 0x60004588
    +        /// GPIO output function select register
    +        pub const FUNC13_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    +            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    +            /// GPIO_OUT_REG[n].
    +            OUT_SEL: u8,
    +            /// set this bit to invert output signal.1:invert.:not invert.
    +            INV_SEL: u1,
    +            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    +            /// enable signal.:use peripheral output enable signal.
    +            OEN_SEL: u1,
    +            /// set this bit to invert output enable signal.1:invert.:not invert.
    +            OEN_INV_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x588);
    +
    +        /// address: 0x6000458c
    +        /// GPIO output function select register
    +        pub const FUNC14_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    +            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    +            /// GPIO_OUT_REG[n].
    +            OUT_SEL: u8,
    +            /// set this bit to invert output signal.1:invert.:not invert.
    +            INV_SEL: u1,
    +            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    +            /// enable signal.:use peripheral output enable signal.
    +            OEN_SEL: u1,
    +            /// set this bit to invert output enable signal.1:invert.:not invert.
    +            OEN_INV_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x58c);
    +
    +        /// address: 0x60004590
    +        /// GPIO output function select register
    +        pub const FUNC15_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    +            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    +            /// GPIO_OUT_REG[n].
    +            OUT_SEL: u8,
    +            /// set this bit to invert output signal.1:invert.:not invert.
    +            INV_SEL: u1,
    +            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    +            /// enable signal.:use peripheral output enable signal.
    +            OEN_SEL: u1,
    +            /// set this bit to invert output enable signal.1:invert.:not invert.
    +            OEN_INV_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x590);
    +
    +        /// address: 0x60004594
    +        /// GPIO output function select register
    +        pub const FUNC16_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    +            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    +            /// GPIO_OUT_REG[n].
    +            OUT_SEL: u8,
    +            /// set this bit to invert output signal.1:invert.:not invert.
    +            INV_SEL: u1,
    +            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    +            /// enable signal.:use peripheral output enable signal.
    +            OEN_SEL: u1,
    +            /// set this bit to invert output enable signal.1:invert.:not invert.
    +            OEN_INV_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x594);
    +
    +        /// address: 0x60004598
    +        /// GPIO output function select register
    +        pub const FUNC17_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    +            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    +            /// GPIO_OUT_REG[n].
    +            OUT_SEL: u8,
    +            /// set this bit to invert output signal.1:invert.:not invert.
    +            INV_SEL: u1,
    +            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    +            /// enable signal.:use peripheral output enable signal.
    +            OEN_SEL: u1,
    +            /// set this bit to invert output enable signal.1:invert.:not invert.
    +            OEN_INV_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x598);
    +
    +        /// address: 0x6000459c
    +        /// GPIO output function select register
    +        pub const FUNC18_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    +            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    +            /// GPIO_OUT_REG[n].
    +            OUT_SEL: u8,
    +            /// set this bit to invert output signal.1:invert.:not invert.
    +            INV_SEL: u1,
    +            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    +            /// enable signal.:use peripheral output enable signal.
    +            OEN_SEL: u1,
    +            /// set this bit to invert output enable signal.1:invert.:not invert.
    +            OEN_INV_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x59c);
    +
    +        /// address: 0x600045a0
    +        /// GPIO output function select register
    +        pub const FUNC19_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    +            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    +            /// GPIO_OUT_REG[n].
    +            OUT_SEL: u8,
    +            /// set this bit to invert output signal.1:invert.:not invert.
    +            INV_SEL: u1,
    +            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    +            /// enable signal.:use peripheral output enable signal.
    +            OEN_SEL: u1,
    +            /// set this bit to invert output enable signal.1:invert.:not invert.
    +            OEN_INV_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x5a0);
    +
    +        /// address: 0x600045a4
    +        /// GPIO output function select register
    +        pub const FUNC20_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    +            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    +            /// GPIO_OUT_REG[n].
    +            OUT_SEL: u8,
    +            /// set this bit to invert output signal.1:invert.:not invert.
    +            INV_SEL: u1,
    +            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    +            /// enable signal.:use peripheral output enable signal.
    +            OEN_SEL: u1,
    +            /// set this bit to invert output enable signal.1:invert.:not invert.
    +            OEN_INV_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x5a4);
    +
    +        /// address: 0x600045a8
    +        /// GPIO output function select register
    +        pub const FUNC21_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    +            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    +            /// GPIO_OUT_REG[n].
    +            OUT_SEL: u8,
    +            /// set this bit to invert output signal.1:invert.:not invert.
    +            INV_SEL: u1,
    +            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    +            /// enable signal.:use peripheral output enable signal.
    +            OEN_SEL: u1,
    +            /// set this bit to invert output enable signal.1:invert.:not invert.
    +            OEN_INV_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x5a8);
    +
    +        /// address: 0x600045ac
    +        /// GPIO output function select register
    +        pub const FUNC22_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    +            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    +            /// GPIO_OUT_REG[n].
    +            OUT_SEL: u8,
    +            /// set this bit to invert output signal.1:invert.:not invert.
    +            INV_SEL: u1,
    +            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    +            /// enable signal.:use peripheral output enable signal.
    +            OEN_SEL: u1,
    +            /// set this bit to invert output enable signal.1:invert.:not invert.
    +            OEN_INV_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x5ac);
    +
    +        /// address: 0x600045b0
    +        /// GPIO output function select register
    +        pub const FUNC23_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    +            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    +            /// GPIO_OUT_REG[n].
    +            OUT_SEL: u8,
    +            /// set this bit to invert output signal.1:invert.:not invert.
    +            INV_SEL: u1,
    +            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    +            /// enable signal.:use peripheral output enable signal.
    +            OEN_SEL: u1,
    +            /// set this bit to invert output enable signal.1:invert.:not invert.
    +            OEN_INV_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x5b0);
    +
    +        /// address: 0x600045b4
    +        /// GPIO output function select register
    +        pub const FUNC24_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    +            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    +            /// GPIO_OUT_REG[n].
    +            OUT_SEL: u8,
    +            /// set this bit to invert output signal.1:invert.:not invert.
    +            INV_SEL: u1,
    +            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    +            /// enable signal.:use peripheral output enable signal.
    +            OEN_SEL: u1,
    +            /// set this bit to invert output enable signal.1:invert.:not invert.
    +            OEN_INV_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x5b4);
    +
    +        /// address: 0x600045b8
    +        /// GPIO output function select register
    +        pub const FUNC25_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    +            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    +            /// GPIO_OUT_REG[n].
    +            OUT_SEL: u8,
    +            /// set this bit to invert output signal.1:invert.:not invert.
    +            INV_SEL: u1,
    +            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    +            /// enable signal.:use peripheral output enable signal.
    +            OEN_SEL: u1,
    +            /// set this bit to invert output enable signal.1:invert.:not invert.
    +            OEN_INV_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x5b8);
    +
    +        /// address: 0x6000462c
    +        /// GPIO clock gate register
    +        pub const CLOCK_GATE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this bit to enable GPIO clock gate
    +            CLK_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x62c);
    +
    +        /// address: 0x600046fc
    +        /// GPIO version register
    +        pub const REG_DATE = @intToPtr(*volatile MmioInt(32, u28), base_address + 0x6fc);
    +    };
    +
    +    /// Sigma-Delta Modulation
    +    pub const GPIOSD = struct {
    +        pub const base_address = 0x60004f00;
    +
    +        /// address: 0x60004f00
    +        /// Duty Cycle Configure Register of SDM%s
    +        pub const SIGMADELTA0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This field is used to configure the duty cycle of sigma delta modulation output.
    +            SD0_IN: u8,
    +            /// This field is used to set a divider value to divide APB clock.
    +            SD0_PRESCALE: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x0);
    +
    +        /// address: 0x60004f04
    +        /// Duty Cycle Configure Register of SDM%s
    +        pub const SIGMADELTA1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This field is used to configure the duty cycle of sigma delta modulation output.
    +            SD0_IN: u8,
    +            /// This field is used to set a divider value to divide APB clock.
    +            SD0_PRESCALE: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x4);
    +
    +        /// address: 0x60004f08
    +        /// Duty Cycle Configure Register of SDM%s
    +        pub const SIGMADELTA2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This field is used to configure the duty cycle of sigma delta modulation output.
    +            SD0_IN: u8,
    +            /// This field is used to set a divider value to divide APB clock.
    +            SD0_PRESCALE: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x8);
    +
    +        /// address: 0x60004f0c
    +        /// Duty Cycle Configure Register of SDM%s
    +        pub const SIGMADELTA3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This field is used to configure the duty cycle of sigma delta modulation output.
    +            SD0_IN: u8,
    +            /// This field is used to set a divider value to divide APB clock.
    +            SD0_PRESCALE: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0xc);
    +
    +        /// address: 0x60004f20
    +        /// Clock Gating Configure Register
    +        pub const SIGMADELTA_CG = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            reserved23: u1,
    +            reserved24: u1,
    +            reserved25: u1,
    +            reserved26: u1,
    +            reserved27: u1,
    +            reserved28: u1,
    +            reserved29: u1,
    +            reserved30: u1,
    +            /// Clock enable bit of configuration registers for sigma delta modulation.
    +            CLK_EN: u1,
    +        }), base_address + 0x20);
    +
    +        /// address: 0x60004f24
    +        /// MISC Register
    +        pub const SIGMADELTA_MISC = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            reserved23: u1,
    +            reserved24: u1,
    +            reserved25: u1,
    +            reserved26: u1,
    +            reserved27: u1,
    +            reserved28: u1,
    +            reserved29: u1,
    +            /// Clock enable bit of sigma delta modulation.
    +            FUNCTION_CLK_EN: u1,
    +            /// Reserved.
    +            SPI_SWAP: u1,
    +        }), base_address + 0x24);
    +
    +        /// address: 0x60004f28
    +        /// Version Control Register
    +        pub const SIGMADELTA_VERSION = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Version control register.
    +            GPIO_SD_DATE: u28,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +        }), base_address + 0x28);
    +    };
    +
    +    /// HMAC (Hash-based Message Authentication Code) Accelerator
    +    pub const HMAC = struct {
    +        pub const base_address = 0x6003e000;
    +
    +        /// address: 0x6003e040
    +        /// Process control register 0.
    +        pub const SET_START = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x40);
    +
    +        /// address: 0x6003e044
    +        /// Configure purpose.
    +        pub const SET_PARA_PURPOSE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Set hmac parameter purpose.
    +            PURPOSE_SET: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x44);
    +
    +        /// address: 0x6003e048
    +        /// Configure key.
    +        pub const SET_PARA_KEY = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Set hmac parameter key.
    +            KEY_SET: u3,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +        }), base_address + 0x48);
    +
    +        /// address: 0x6003e04c
    +        /// Finish initial configuration.
    +        pub const SET_PARA_FINISH = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Finish hmac configuration.
    +            SET_PARA_END: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x4c);
    +
    +        /// address: 0x6003e050
    +        /// Process control register 1.
    +        pub const SET_MESSAGE_ONE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Call SHA to calculate one message block.
    +            SET_TEXT_ONE: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x50);
    +
    +        /// address: 0x6003e054
    +        /// Process control register 2.
    +        pub const SET_MESSAGE_ING = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Continue typical hmac.
    +            SET_TEXT_ING: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x54);
    +
    +        /// address: 0x6003e058
    +        /// Process control register 3.
    +        pub const SET_MESSAGE_END = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Start hardware padding.
    +            SET_TEXT_END: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x58);
    +
    +        /// address: 0x6003e05c
    +        /// Process control register 4.
    +        pub const SET_RESULT_FINISH = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// After read result from upstream, then let hmac back to idle.
    +            SET_RESULT_END: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x5c);
    +
    +        /// address: 0x6003e060
    +        /// Invalidate register 0.
    +        pub const SET_INVALIDATE_JTAG = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x60);
    +
    +        /// address: 0x6003e064
    +        /// Invalidate register 1.
    +        pub const SET_INVALIDATE_DS = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x64);
    +
    +        /// address: 0x6003e068
    +        /// Error register.
    +        pub const QUERY_ERROR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Hmac configuration state. 0: key are agree with purpose. 1: error
    +            QUREY_CHECK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x68);
    +
    +        /// address: 0x6003e06c
    +        /// Busy register.
    +        pub const QUERY_BUSY = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Hmac state. 1'b0: idle. 1'b1: busy
    +            BUSY_STATE: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x6c);
    +
    +        /// address: 0x6003e080
    +        /// Message block memory.
    +        pub const WR_MESSAGE_MEM = @intToPtr(*volatile [64]u8, base_address + 0x80);
    +
    +        /// address: 0x6003e0c0
    +        /// Result from upstream.
    +        pub const RD_RESULT_MEM = @intToPtr(*volatile [32]u8, base_address + 0xc0);
    +
    +        /// address: 0x6003e0f0
    +        /// Process control register 5.
    +        pub const SET_MESSAGE_PAD = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Start software padding.
    +            SET_TEXT_PAD: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0xf0);
    +
    +        /// address: 0x6003e0f4
    +        /// Process control register 6.
    +        pub const ONE_BLOCK = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Don't have to do padding.
    +            SET_ONE_BLOCK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0xf4);
    +
    +        /// address: 0x6003e0f8
    +        /// Jtag register 0.
    +        pub const SOFT_JTAG_CTRL = @intToPtr(*volatile MmioInt(32, u1), base_address + 0xf8);
    +
    +        /// address: 0x6003e0fc
    +        /// Jtag register 1.
    +        pub const WR_JTAG = @intToPtr(*volatile u32, base_address + 0xfc);
    +    };
    +
    +    /// I2C (Inter-Integrated Circuit) Controller
    +    pub const I2C0 = struct {
    +        pub const base_address = 0x60013000;
    +
    +        /// address: 0x60013000
    +        /// I2C_SCL_LOW_PERIOD_REG
    +        pub const SCL_LOW_PERIOD = @intToPtr(*volatile MmioInt(32, u9), base_address + 0x0);
    +
    +        /// address: 0x60013004
    +        /// I2C_CTR_REG
    +        pub const CTR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_sda_force_out
    +            SDA_FORCE_OUT: u1,
    +            /// reg_scl_force_out
    +            SCL_FORCE_OUT: u1,
    +            /// reg_sample_scl_level
    +            SAMPLE_SCL_LEVEL: u1,
    +            /// reg_rx_full_ack_level
    +            RX_FULL_ACK_LEVEL: u1,
    +            /// reg_ms_mode
    +            MS_MODE: u1,
    +            /// reg_trans_start
    +            TRANS_START: u1,
    +            /// reg_tx_lsb_first
    +            TX_LSB_FIRST: u1,
    +            /// reg_rx_lsb_first
    +            RX_LSB_FIRST: u1,
    +            /// reg_clk_en
    +            CLK_EN: u1,
    +            /// reg_arbitration_en
    +            ARBITRATION_EN: u1,
    +            /// reg_fsm_rst
    +            FSM_RST: u1,
    +            /// reg_conf_upgate
    +            CONF_UPGATE: u1,
    +            /// reg_slv_tx_auto_start_en
    +            SLV_TX_AUTO_START_EN: u1,
    +            /// reg_addr_10bit_rw_check_en
    +            ADDR_10BIT_RW_CHECK_EN: u1,
    +            /// reg_addr_broadcasting_en
    +            ADDR_BROADCASTING_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +        }), base_address + 0x4);
    +
    +        /// address: 0x60013008
    +        /// I2C_SR_REG
    +        pub const SR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_resp_rec
    +            RESP_REC: u1,
    +            /// reg_slave_rw
    +            SLAVE_RW: u1,
    +            reserved0: u1,
    +            /// reg_arb_lost
    +            ARB_LOST: u1,
    +            /// reg_bus_busy
    +            BUS_BUSY: u1,
    +            /// reg_slave_addressed
    +            SLAVE_ADDRESSED: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            /// reg_rxfifo_cnt
    +            RXFIFO_CNT: u6,
    +            /// reg_stretch_cause
    +            STRETCH_CAUSE: u2,
    +            reserved3: u1,
    +            reserved4: u1,
    +            /// reg_txfifo_cnt
    +            TXFIFO_CNT: u6,
    +            /// reg_scl_main_state_last
    +            SCL_MAIN_STATE_LAST: u3,
    +            reserved5: u1,
    +            /// reg_scl_state_last
    +            SCL_STATE_LAST: u3,
    +            padding0: u1,
    +        }), base_address + 0x8);
    +
    +        /// address: 0x6001300c
    +        /// I2C_TO_REG
    +        pub const TO = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_time_out_value
    +            TIME_OUT_VALUE: u5,
    +            /// reg_time_out_en
    +            TIME_OUT_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +        }), base_address + 0xc);
    +
    +        /// address: 0x60013010
    +        /// I2C_SLAVE_ADDR_REG
    +        pub const SLAVE_ADDR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_slave_addr
    +            SLAVE_ADDR: u15,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            /// reg_addr_10bit_en
    +            ADDR_10BIT_EN: u1,
    +        }), base_address + 0x10);
    +
    +        /// address: 0x60013014
    +        /// I2C_FIFO_ST_REG
    +        pub const FIFO_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_rxfifo_raddr
    +            RXFIFO_RADDR: u5,
    +            /// reg_rxfifo_waddr
    +            RXFIFO_WADDR: u5,
    +            /// reg_txfifo_raddr
    +            TXFIFO_RADDR: u5,
    +            /// reg_txfifo_waddr
    +            TXFIFO_WADDR: u5,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// reg_slave_rw_point
    +            SLAVE_RW_POINT: u8,
    +            padding0: u1,
    +            padding1: u1,
    +        }), base_address + 0x14);
    +
    +        /// address: 0x60013018
    +        /// I2C_FIFO_CONF_REG
    +        pub const FIFO_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_rxfifo_wm_thrhd
    +            RXFIFO_WM_THRHD: u5,
    +            /// reg_txfifo_wm_thrhd
    +            TXFIFO_WM_THRHD: u5,
    +            /// reg_nonfifo_en
    +            NONFIFO_EN: u1,
    +            /// reg_fifo_addr_cfg_en
    +            FIFO_ADDR_CFG_EN: u1,
    +            /// reg_rx_fifo_rst
    +            RX_FIFO_RST: u1,
    +            /// reg_tx_fifo_rst
    +            TX_FIFO_RST: u1,
    +            /// reg_fifo_prt_en
    +            FIFO_PRT_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +        }), base_address + 0x18);
    +
    +        /// address: 0x6001301c
    +        /// I2C_FIFO_DATA_REG
    +        pub const DATA = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_fifo_rdata
    +            FIFO_RDATA: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x1c);
    +
    +        /// address: 0x60013020
    +        /// I2C_INT_RAW_REG
    +        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_rxfifo_wm_int_raw
    +            RXFIFO_WM_INT_RAW: u1,
    +            /// reg_txfifo_wm_int_raw
    +            TXFIFO_WM_INT_RAW: u1,
    +            /// reg_rxfifo_ovf_int_raw
    +            RXFIFO_OVF_INT_RAW: u1,
    +            /// reg_end_detect_int_raw
    +            END_DETECT_INT_RAW: u1,
    +            /// reg_byte_trans_done_int_raw
    +            BYTE_TRANS_DONE_INT_RAW: u1,
    +            /// reg_arbitration_lost_int_raw
    +            ARBITRATION_LOST_INT_RAW: u1,
    +            /// reg_mst_txfifo_udf_int_raw
    +            MST_TXFIFO_UDF_INT_RAW: u1,
    +            /// reg_trans_complete_int_raw
    +            TRANS_COMPLETE_INT_RAW: u1,
    +            /// reg_time_out_int_raw
    +            TIME_OUT_INT_RAW: u1,
    +            /// reg_trans_start_int_raw
    +            TRANS_START_INT_RAW: u1,
    +            /// reg_nack_int_raw
    +            NACK_INT_RAW: u1,
    +            /// reg_txfifo_ovf_int_raw
    +            TXFIFO_OVF_INT_RAW: u1,
    +            /// reg_rxfifo_udf_int_raw
    +            RXFIFO_UDF_INT_RAW: u1,
    +            /// reg_scl_st_to_int_raw
    +            SCL_ST_TO_INT_RAW: u1,
    +            /// reg_scl_main_st_to_int_raw
    +            SCL_MAIN_ST_TO_INT_RAW: u1,
    +            /// reg_det_start_int_raw
    +            DET_START_INT_RAW: u1,
    +            /// reg_slave_stretch_int_raw
    +            SLAVE_STRETCH_INT_RAW: u1,
    +            /// reg_general_call_int_raw
    +            GENERAL_CALL_INT_RAW: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0x20);
    +
    +        /// address: 0x60013024
    +        /// I2C_INT_CLR_REG
    +        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_rxfifo_wm_int_clr
    +            RXFIFO_WM_INT_CLR: u1,
    +            /// reg_txfifo_wm_int_clr
    +            TXFIFO_WM_INT_CLR: u1,
    +            /// reg_rxfifo_ovf_int_clr
    +            RXFIFO_OVF_INT_CLR: u1,
    +            /// reg_end_detect_int_clr
    +            END_DETECT_INT_CLR: u1,
    +            /// reg_byte_trans_done_int_clr
    +            BYTE_TRANS_DONE_INT_CLR: u1,
    +            /// reg_arbitration_lost_int_clr
    +            ARBITRATION_LOST_INT_CLR: u1,
    +            /// reg_mst_txfifo_udf_int_clr
    +            MST_TXFIFO_UDF_INT_CLR: u1,
    +            /// reg_trans_complete_int_clr
    +            TRANS_COMPLETE_INT_CLR: u1,
    +            /// reg_time_out_int_clr
    +            TIME_OUT_INT_CLR: u1,
    +            /// reg_trans_start_int_clr
    +            TRANS_START_INT_CLR: u1,
    +            /// reg_nack_int_clr
    +            NACK_INT_CLR: u1,
    +            /// reg_txfifo_ovf_int_clr
    +            TXFIFO_OVF_INT_CLR: u1,
    +            /// reg_rxfifo_udf_int_clr
    +            RXFIFO_UDF_INT_CLR: u1,
    +            /// reg_scl_st_to_int_clr
    +            SCL_ST_TO_INT_CLR: u1,
    +            /// reg_scl_main_st_to_int_clr
    +            SCL_MAIN_ST_TO_INT_CLR: u1,
    +            /// reg_det_start_int_clr
    +            DET_START_INT_CLR: u1,
    +            /// reg_slave_stretch_int_clr
    +            SLAVE_STRETCH_INT_CLR: u1,
    +            /// reg_general_call_int_clr
    +            GENERAL_CALL_INT_CLR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0x24);
    +
    +        /// address: 0x60013028
    +        /// I2C_INT_ENA_REG
    +        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_rxfifo_wm_int_ena
    +            RXFIFO_WM_INT_ENA: u1,
    +            /// reg_txfifo_wm_int_ena
    +            TXFIFO_WM_INT_ENA: u1,
    +            /// reg_rxfifo_ovf_int_ena
    +            RXFIFO_OVF_INT_ENA: u1,
    +            /// reg_end_detect_int_ena
    +            END_DETECT_INT_ENA: u1,
    +            /// reg_byte_trans_done_int_ena
    +            BYTE_TRANS_DONE_INT_ENA: u1,
    +            /// reg_arbitration_lost_int_ena
    +            ARBITRATION_LOST_INT_ENA: u1,
    +            /// reg_mst_txfifo_udf_int_ena
    +            MST_TXFIFO_UDF_INT_ENA: u1,
    +            /// reg_trans_complete_int_ena
    +            TRANS_COMPLETE_INT_ENA: u1,
    +            /// reg_time_out_int_ena
    +            TIME_OUT_INT_ENA: u1,
    +            /// reg_trans_start_int_ena
    +            TRANS_START_INT_ENA: u1,
    +            /// reg_nack_int_ena
    +            NACK_INT_ENA: u1,
    +            /// reg_txfifo_ovf_int_ena
    +            TXFIFO_OVF_INT_ENA: u1,
    +            /// reg_rxfifo_udf_int_ena
    +            RXFIFO_UDF_INT_ENA: u1,
    +            /// reg_scl_st_to_int_ena
    +            SCL_ST_TO_INT_ENA: u1,
    +            /// reg_scl_main_st_to_int_ena
    +            SCL_MAIN_ST_TO_INT_ENA: u1,
    +            /// reg_det_start_int_ena
    +            DET_START_INT_ENA: u1,
    +            /// reg_slave_stretch_int_ena
    +            SLAVE_STRETCH_INT_ENA: u1,
    +            /// reg_general_call_int_ena
    +            GENERAL_CALL_INT_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0x28);
    +
    +        /// address: 0x6001302c
    +        /// I2C_INT_STATUS_REG
    +        pub const INT_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_rxfifo_wm_int_st
    +            RXFIFO_WM_INT_ST: u1,
    +            /// reg_txfifo_wm_int_st
    +            TXFIFO_WM_INT_ST: u1,
    +            /// reg_rxfifo_ovf_int_st
    +            RXFIFO_OVF_INT_ST: u1,
    +            /// reg_end_detect_int_st
    +            END_DETECT_INT_ST: u1,
    +            /// reg_byte_trans_done_int_st
    +            BYTE_TRANS_DONE_INT_ST: u1,
    +            /// reg_arbitration_lost_int_st
    +            ARBITRATION_LOST_INT_ST: u1,
    +            /// reg_mst_txfifo_udf_int_st
    +            MST_TXFIFO_UDF_INT_ST: u1,
    +            /// reg_trans_complete_int_st
    +            TRANS_COMPLETE_INT_ST: u1,
    +            /// reg_time_out_int_st
    +            TIME_OUT_INT_ST: u1,
    +            /// reg_trans_start_int_st
    +            TRANS_START_INT_ST: u1,
    +            /// reg_nack_int_st
    +            NACK_INT_ST: u1,
    +            /// reg_txfifo_ovf_int_st
    +            TXFIFO_OVF_INT_ST: u1,
    +            /// reg_rxfifo_udf_int_st
    +            RXFIFO_UDF_INT_ST: u1,
    +            /// reg_scl_st_to_int_st
    +            SCL_ST_TO_INT_ST: u1,
    +            /// reg_scl_main_st_to_int_st
    +            SCL_MAIN_ST_TO_INT_ST: u1,
    +            /// reg_det_start_int_st
    +            DET_START_INT_ST: u1,
    +            /// reg_slave_stretch_int_st
    +            SLAVE_STRETCH_INT_ST: u1,
    +            /// reg_general_call_int_st
    +            GENERAL_CALL_INT_ST: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0x2c);
    +
    +        /// address: 0x60013030
    +        /// I2C_SDA_HOLD_REG
    +        pub const SDA_HOLD = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_sda_hold_time
    +            TIME: u9,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +        }), base_address + 0x30);
    +
    +        /// address: 0x60013034
    +        /// I2C_SDA_SAMPLE_REG
    +        pub const SDA_SAMPLE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_sda_sample_time
    +            TIME: u9,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +        }), base_address + 0x34);
    +
    +        /// address: 0x60013038
    +        /// I2C_SCL_HIGH_PERIOD_REG
    +        pub const SCL_HIGH_PERIOD = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_scl_high_period
    +            SCL_HIGH_PERIOD: u9,
    +            /// reg_scl_wait_high_period
    +            SCL_WAIT_HIGH_PERIOD: u7,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x38);
    +
    +        /// address: 0x60013040
    +        /// I2C_SCL_START_HOLD_REG
    +        pub const SCL_START_HOLD = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_scl_start_hold_time
    +            TIME: u9,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +        }), base_address + 0x40);
    +
    +        /// address: 0x60013044
    +        /// I2C_SCL_RSTART_SETUP_REG
    +        pub const SCL_RSTART_SETUP = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_scl_rstart_setup_time
    +            TIME: u9,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +        }), base_address + 0x44);
    +
    +        /// address: 0x60013048
    +        /// I2C_SCL_STOP_HOLD_REG
    +        pub const SCL_STOP_HOLD = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_scl_stop_hold_time
    +            TIME: u9,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +        }), base_address + 0x48);
    +
    +        /// address: 0x6001304c
    +        /// I2C_SCL_STOP_SETUP_REG
    +        pub const SCL_STOP_SETUP = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_scl_stop_setup_time
    +            TIME: u9,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +        }), base_address + 0x4c);
    +
    +        /// address: 0x60013050
    +        /// I2C_FILTER_CFG_REG
    +        pub const FILTER_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_scl_filter_thres
    +            SCL_FILTER_THRES: u4,
    +            /// reg_sda_filter_thres
    +            SDA_FILTER_THRES: u4,
    +            /// reg_scl_filter_en
    +            SCL_FILTER_EN: u1,
    +            /// reg_sda_filter_en
    +            SDA_FILTER_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +        }), base_address + 0x50);
    +
    +        /// address: 0x60013054
    +        /// I2C_CLK_CONF_REG
    +        pub const CLK_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_sclk_div_num
    +            SCLK_DIV_NUM: u8,
    +            /// reg_sclk_div_a
    +            SCLK_DIV_A: u6,
    +            /// reg_sclk_div_b
    +            SCLK_DIV_B: u6,
    +            /// reg_sclk_sel
    +            SCLK_SEL: u1,
    +            /// reg_sclk_active
    +            SCLK_ACTIVE: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +        }), base_address + 0x54);
    +
    +        /// address: 0x60013058
    +        /// I2C_COMD%s_REG
    +        pub const COMD0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_command
    +            COMMAND: u14,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            /// reg_command_done
    +            COMMAND_DONE: u1,
    +        }), base_address + 0x58);
    +
    +        /// address: 0x6001305c
    +        /// I2C_COMD%s_REG
    +        pub const COMD1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_command
    +            COMMAND: u14,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            /// reg_command_done
    +            COMMAND_DONE: u1,
    +        }), base_address + 0x5c);
    +
    +        /// address: 0x60013060
    +        /// I2C_COMD%s_REG
    +        pub const COMD2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_command
    +            COMMAND: u14,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            /// reg_command_done
    +            COMMAND_DONE: u1,
    +        }), base_address + 0x60);
    +
    +        /// address: 0x60013064
    +        /// I2C_COMD%s_REG
    +        pub const COMD3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_command
    +            COMMAND: u14,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            /// reg_command_done
    +            COMMAND_DONE: u1,
    +        }), base_address + 0x64);
    +
    +        /// address: 0x60013068
    +        /// I2C_COMD%s_REG
    +        pub const COMD4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_command
    +            COMMAND: u14,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            /// reg_command_done
    +            COMMAND_DONE: u1,
    +        }), base_address + 0x68);
    +
    +        /// address: 0x6001306c
    +        /// I2C_COMD%s_REG
    +        pub const COMD5 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_command
    +            COMMAND: u14,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            /// reg_command_done
    +            COMMAND_DONE: u1,
    +        }), base_address + 0x6c);
    +
    +        /// address: 0x60013070
    +        /// I2C_COMD%s_REG
    +        pub const COMD6 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_command
    +            COMMAND: u14,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            /// reg_command_done
    +            COMMAND_DONE: u1,
    +        }), base_address + 0x70);
    +
    +        /// address: 0x60013074
    +        /// I2C_COMD%s_REG
    +        pub const COMD7 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_command
    +            COMMAND: u14,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            /// reg_command_done
    +            COMMAND_DONE: u1,
    +        }), base_address + 0x74);
    +
    +        /// address: 0x60013078
    +        /// I2C_SCL_ST_TIME_OUT_REG
    +        pub const SCL_ST_TIME_OUT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_scl_st_to_regno more than 23
    +            SCL_ST_TO_I2C: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +        }), base_address + 0x78);
    +
    +        /// address: 0x6001307c
    +        /// I2C_SCL_MAIN_ST_TIME_OUT_REG
    +        pub const SCL_MAIN_ST_TIME_OUT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_scl_main_st_to_regno more than 23
    +            SCL_MAIN_ST_TO_I2C: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +        }), base_address + 0x7c);
    +
    +        /// address: 0x60013080
    +        /// I2C_SCL_SP_CONF_REG
    +        pub const SCL_SP_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_scl_rst_slv_en
    +            SCL_RST_SLV_EN: u1,
    +            /// reg_scl_rst_slv_num
    +            SCL_RST_SLV_NUM: u5,
    +            /// reg_scl_pd_en
    +            SCL_PD_EN: u1,
    +            /// reg_sda_pd_en
    +            SDA_PD_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x80);
    +
    +        /// address: 0x60013084
    +        /// I2C_SCL_STRETCH_CONF_REG
    +        pub const SCL_STRETCH_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_stretch_protect_num
    +            STRETCH_PROTECT_NUM: u10,
    +            /// reg_slave_scl_stretch_en
    +            SLAVE_SCL_STRETCH_EN: u1,
    +            /// reg_slave_scl_stretch_clr
    +            SLAVE_SCL_STRETCH_CLR: u1,
    +            /// reg_slave_byte_ack_ctl_en
    +            SLAVE_BYTE_ACK_CTL_EN: u1,
    +            /// reg_slave_byte_ack_lvl
    +            SLAVE_BYTE_ACK_LVL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +        }), base_address + 0x84);
    +
    +        /// address: 0x600130f8
    +        /// I2C_DATE_REG
    +        pub const DATE = @intToPtr(*volatile u32, base_address + 0xf8);
    +
    +        /// address: 0x60013100
    +        /// I2C_TXFIFO_START_ADDR_REG
    +        pub const TXFIFO_START_ADDR = @intToPtr(*volatile u32, base_address + 0x100);
    +
    +        /// address: 0x60013180
    +        /// I2C_RXFIFO_START_ADDR_REG
    +        pub const RXFIFO_START_ADDR = @intToPtr(*volatile u32, base_address + 0x180);
    +    };
    +
    +    /// I2S (Inter-IC Sound) Controller
    +    pub const I2S = struct {
    +        pub const base_address = 0x6002d000;
    +
    +        /// address: 0x6002d00c
    +        /// I2S interrupt raw register, valid in level.
    +        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The raw interrupt status bit for the i2s_rx_done_int interrupt
    +            RX_DONE_INT_RAW: u1,
    +            /// The raw interrupt status bit for the i2s_tx_done_int interrupt
    +            TX_DONE_INT_RAW: u1,
    +            /// The raw interrupt status bit for the i2s_rx_hung_int interrupt
    +            RX_HUNG_INT_RAW: u1,
    +            /// The raw interrupt status bit for the i2s_tx_hung_int interrupt
    +            TX_HUNG_INT_RAW: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0xc);
    +
    +        /// address: 0x6002d010
    +        /// I2S interrupt status register.
    +        pub const INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The masked interrupt status bit for the i2s_rx_done_int interrupt
    +            RX_DONE_INT_ST: u1,
    +            /// The masked interrupt status bit for the i2s_tx_done_int interrupt
    +            TX_DONE_INT_ST: u1,
    +            /// The masked interrupt status bit for the i2s_rx_hung_int interrupt
    +            RX_HUNG_INT_ST: u1,
    +            /// The masked interrupt status bit for the i2s_tx_hung_int interrupt
    +            TX_HUNG_INT_ST: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x10);
    +
    +        /// address: 0x6002d014
    +        /// I2S interrupt enable register.
    +        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The interrupt enable bit for the i2s_rx_done_int interrupt
    +            RX_DONE_INT_ENA: u1,
    +            /// The interrupt enable bit for the i2s_tx_done_int interrupt
    +            TX_DONE_INT_ENA: u1,
    +            /// The interrupt enable bit for the i2s_rx_hung_int interrupt
    +            RX_HUNG_INT_ENA: u1,
    +            /// The interrupt enable bit for the i2s_tx_hung_int interrupt
    +            TX_HUNG_INT_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x14);
    +
    +        /// address: 0x6002d018
    +        /// I2S interrupt clear register.
    +        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Set this bit to clear the i2s_rx_done_int interrupt
    +            RX_DONE_INT_CLR: u1,
    +            /// Set this bit to clear the i2s_tx_done_int interrupt
    +            TX_DONE_INT_CLR: u1,
    +            /// Set this bit to clear the i2s_rx_hung_int interrupt
    +            RX_HUNG_INT_CLR: u1,
    +            /// Set this bit to clear the i2s_tx_hung_int interrupt
    +            TX_HUNG_INT_CLR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x18);
    +
    +        /// address: 0x6002d020
    +        /// I2S RX configure register
    +        pub const RX_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Set this bit to reset receiver
    +            RX_RESET: u1,
    +            /// Set this bit to reset Rx AFIFO
    +            RX_FIFO_RESET: u1,
    +            /// Set this bit to start receiving data
    +            RX_START: u1,
    +            /// Set this bit to enable slave receiver mode
    +            RX_SLAVE_MOD: u1,
    +            reserved0: u1,
    +            /// Set this bit to enable receiver in mono mode
    +            RX_MONO: u1,
    +            reserved1: u1,
    +            /// I2S Rx byte endian, 1: low addr value to high addr. 0: low addr with low addr
    +            /// value.
    +            RX_BIG_ENDIAN: u1,
    +            /// Set 1 to update I2S RX registers from APB clock domain to I2S RX clock domain.
    +            /// This bit will be cleared by hardware after update register done.
    +            RX_UPDATE: u1,
    +            /// 1: The first channel data value is valid in I2S RX mono mode. 0: The second
    +            /// channel data value is valid in I2S RX mono mode.
    +            RX_MONO_FST_VLD: u1,
    +            /// I2S RX compress/decompress configuration bit. & 0 (atol): A-Law decompress, 1
    +            /// (ltoa) : A-Law compress, 2 (utol) : u-Law decompress, 3 (ltou) : u-Law compress.
    +            /// &
    +            RX_PCM_CONF: u2,
    +            /// Set this bit to bypass Compress/Decompress module for received data.
    +            RX_PCM_BYPASS: u1,
    +            /// 0 : I2S Rx only stop when reg_rx_start is cleared. 1: Stop when reg_rx_start is
    +            /// 0 or in_suc_eof is 1. 2: Stop I2S RX when reg_rx_start is 0 or RX FIFO is full.
    +            RX_STOP_MODE: u2,
    +            /// 1: I2S RX left alignment mode. 0: I2S RX right alignment mode.
    +            RX_LEFT_ALIGN: u1,
    +            /// 1: store 24 channel bits to 32 bits. 0:store 24 channel bits to 24 bits.
    +            RX_24_FILL_EN: u1,
    +            /// 0: WS should be 0 when receiving left channel data, and WS is 1in right channel.
    +            /// 1: WS should be 1 when receiving left channel data, and WS is 0in right channel.
    +            RX_WS_IDLE_POL: u1,
    +            /// I2S Rx bit endian. 1:small endian, the LSB is received first. 0:big endian, the
    +            /// MSB is received first.
    +            RX_BIT_ORDER: u1,
    +            /// 1: Enable I2S TDM Rx mode . 0: Disable.
    +            RX_TDM_EN: u1,
    +            /// 1: Enable I2S PDM Rx mode . 0: Disable.
    +            RX_PDM_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +        }), base_address + 0x20);
    +
    +        /// address: 0x6002d024
    +        /// I2S TX configure register
    +        pub const TX_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Set this bit to reset transmitter
    +            TX_RESET: u1,
    +            /// Set this bit to reset Tx AFIFO
    +            TX_FIFO_RESET: u1,
    +            /// Set this bit to start transmitting data
    +            TX_START: u1,
    +            /// Set this bit to enable slave transmitter mode
    +            TX_SLAVE_MOD: u1,
    +            reserved0: u1,
    +            /// Set this bit to enable transmitter in mono mode
    +            TX_MONO: u1,
    +            /// 1: The value of Left channel data is equal to the value of right channel data in
    +            /// I2S TX mono mode or TDM channel select mode. 0: The invalid channel data is
    +            /// reg_i2s_single_data in I2S TX mono mode or TDM channel select mode.
    +            TX_CHAN_EQUAL: u1,
    +            /// I2S Tx byte endian, 1: low addr value to high addr. 0: low addr with low addr
    +            /// value.
    +            TX_BIG_ENDIAN: u1,
    +            /// Set 1 to update I2S TX registers from APB clock domain to I2S TX clock domain.
    +            /// This bit will be cleared by hardware after update register done.
    +            TX_UPDATE: u1,
    +            /// 1: The first channel data value is valid in I2S TX mono mode. 0: The second
    +            /// channel data value is valid in I2S TX mono mode.
    +            TX_MONO_FST_VLD: u1,
    +            /// I2S TX compress/decompress configuration bit. & 0 (atol): A-Law decompress, 1
    +            /// (ltoa) : A-Law compress, 2 (utol) : u-Law decompress, 3 (ltou) : u-Law compress.
    +            /// &
    +            TX_PCM_CONF: u2,
    +            /// Set this bit to bypass Compress/Decompress module for transmitted data.
    +            TX_PCM_BYPASS: u1,
    +            /// Set this bit to stop disable output BCK signal and WS signal when tx FIFO is
    +            /// emtpy
    +            TX_STOP_EN: u1,
    +            reserved1: u1,
    +            /// 1: I2S TX left alignment mode. 0: I2S TX right alignment mode.
    +            TX_LEFT_ALIGN: u1,
    +            /// 1: Sent 32 bits in 24 channel bits mode. 0: Sent 24 bits in 24 channel bits mode
    +            TX_24_FILL_EN: u1,
    +            /// 0: WS should be 0 when sending left channel data, and WS is 1in right channel.
    +            /// 1: WS should be 1 when sending left channel data, and WS is 0in right channel.
    +            TX_WS_IDLE_POL: u1,
    +            /// I2S Tx bit endian. 1:small endian, the LSB is sent first. 0:big endian, the MSB
    +            /// is sent first.
    +            TX_BIT_ORDER: u1,
    +            /// 1: Enable I2S TDM Tx mode . 0: Disable.
    +            TX_TDM_EN: u1,
    +            /// 1: Enable I2S PDM Tx mode . 0: Disable.
    +            TX_PDM_EN: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            /// I2S transmitter channel mode configuration bits.
    +            TX_CHAN_MOD: u3,
    +            /// Enable signal loop back mode with transmitter module and receiver module sharing
    +            /// the same WS and BCK signals.
    +            SIG_LOOPBACK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +        }), base_address + 0x24);
    +
    +        /// address: 0x6002d028
    +        /// I2S RX configure register 1
    +        pub const RX_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The width of rx_ws_out in TDM mode is (I2S_RX_TDM_WS_WIDTH[6:0] +1) * T_bck
    +            RX_TDM_WS_WIDTH: u7,
    +            /// Bit clock configuration bits in receiver mode.
    +            RX_BCK_DIV_NUM: u6,
    +            /// Set the bits to configure the valid data bit length of I2S receiver channel. 7:
    +            /// all the valid channel data is in 8-bit-mode. 15: all the valid channel data is
    +            /// in 16-bit-mode. 23: all the valid channel data is in 24-bit-mode. 31:all the
    +            /// valid channel data is in 32-bit-mode.
    +            RX_BITS_MOD: u5,
    +            /// I2S Rx half sample bits -1.
    +            RX_HALF_SAMPLE_BITS: u6,
    +            /// The Rx bit number for each channel minus 1in TDM mode.
    +            RX_TDM_CHAN_BITS: u5,
    +            /// Set this bit to enable receiver in Phillips standard mode
    +            RX_MSB_SHIFT: u1,
    +            padding0: u1,
    +            padding1: u1,
    +        }), base_address + 0x28);
    +
    +        /// address: 0x6002d02c
    +        /// I2S TX configure register 1
    +        pub const TX_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The width of tx_ws_out in TDM mode is (I2S_TX_TDM_WS_WIDTH[6:0] +1) * T_bck
    +            TX_TDM_WS_WIDTH: u7,
    +            /// Bit clock configuration bits in transmitter mode.
    +            TX_BCK_DIV_NUM: u6,
    +            /// Set the bits to configure the valid data bit length of I2S transmitter channel.
    +            /// 7: all the valid channel data is in 8-bit-mode. 15: all the valid channel data
    +            /// is in 16-bit-mode. 23: all the valid channel data is in 24-bit-mode. 31:all the
    +            /// valid channel data is in 32-bit-mode.
    +            TX_BITS_MOD: u5,
    +            /// I2S Tx half sample bits -1.
    +            TX_HALF_SAMPLE_BITS: u6,
    +            /// The Tx bit number for each channel minus 1in TDM mode.
    +            TX_TDM_CHAN_BITS: u5,
    +            /// Set this bit to enable transmitter in Phillips standard mode
    +            TX_MSB_SHIFT: u1,
    +            /// 1: BCK is not delayed to generate pos/neg edge in master mode. 0: BCK is delayed
    +            /// to generate pos/neg edge in master mode.
    +            TX_BCK_NO_DLY: u1,
    +            padding0: u1,
    +        }), base_address + 0x2c);
    +
    +        /// address: 0x6002d030
    +        /// I2S RX clock configure register
    +        pub const RX_CLKM_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Integral I2S clock divider value
    +            RX_CLKM_DIV_NUM: u8,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            /// I2S Rx module clock enable signal.
    +            RX_CLK_ACTIVE: u1,
    +            /// Select I2S Rx module source clock. 0: no clock. 1: APLL. 2: CLK160. 3:
    +            /// I2S_MCLK_in.
    +            RX_CLK_SEL: u2,
    +            /// 0: UseI2S Tx module clock as I2S_MCLK_OUT. 1: UseI2S Rx module clock as
    +            /// I2S_MCLK_OUT.
    +            MCLK_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +        }), base_address + 0x30);
    +
    +        /// address: 0x6002d034
    +        /// I2S TX clock configure register
    +        pub const TX_CLKM_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Integral I2S TX clock divider value. f_I2S_CLK = f_I2S_CLK_S/(N+b/a). There will
    +            /// be (a-b) * n-div and b * (n+1)-div. So the average combination will be: for b <=
    +            /// a/2, z * [x * n-div + (n+1)-div] + y * n-div. For b > a/2, z * [n-div + x *
    +            /// (n+1)-div] + y * (n+1)-div.
    +            TX_CLKM_DIV_NUM: u8,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            /// I2S Tx module clock enable signal.
    +            TX_CLK_ACTIVE: u1,
    +            /// Select I2S Tx module source clock. 0: XTAL clock. 1: APLL. 2: CLK160. 3:
    +            /// I2S_MCLK_in.
    +            TX_CLK_SEL: u2,
    +            /// Set this bit to enable clk gate
    +            CLK_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +        }), base_address + 0x34);
    +
    +        /// address: 0x6002d038
    +        /// I2S RX module clock divider configure register
    +        pub const RX_CLKM_DIV_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// For b <= a/2, the value of I2S_RX_CLKM_DIV_Z is b. For b > a/2, the value of
    +            /// I2S_RX_CLKM_DIV_Z is (a-b).
    +            RX_CLKM_DIV_Z: u9,
    +            /// For b <= a/2, the value of I2S_RX_CLKM_DIV_Y is (a%b) . For b > a/2, the value
    +            /// of I2S_RX_CLKM_DIV_Y is (a%(a-b)).
    +            RX_CLKM_DIV_Y: u9,
    +            /// For b <= a/2, the value of I2S_RX_CLKM_DIV_X is (a/b) - 1. For b > a/2, the
    +            /// value of I2S_RX_CLKM_DIV_X is (a/(a-b)) - 1.
    +            RX_CLKM_DIV_X: u9,
    +            /// For b <= a/2, the value of I2S_RX_CLKM_DIV_YN1 is 0 . For b > a/2, the value of
    +            /// I2S_RX_CLKM_DIV_YN1 is 1.
    +            RX_CLKM_DIV_YN1: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +        }), base_address + 0x38);
    +
    +        /// address: 0x6002d03c
    +        /// I2S TX module clock divider configure register
    +        pub const TX_CLKM_DIV_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// For b <= a/2, the value of I2S_TX_CLKM_DIV_Z is b. For b > a/2, the value of
    +            /// I2S_TX_CLKM_DIV_Z is (a-b).
    +            TX_CLKM_DIV_Z: u9,
    +            /// For b <= a/2, the value of I2S_TX_CLKM_DIV_Y is (a%b) . For b > a/2, the value
    +            /// of I2S_TX_CLKM_DIV_Y is (a%(a-b)).
    +            TX_CLKM_DIV_Y: u9,
    +            /// For b <= a/2, the value of I2S_TX_CLKM_DIV_X is (a/b) - 1. For b > a/2, the
    +            /// value of I2S_TX_CLKM_DIV_X is (a/(a-b)) - 1.
    +            TX_CLKM_DIV_X: u9,
    +            /// For b <= a/2, the value of I2S_TX_CLKM_DIV_YN1 is 0 . For b > a/2, the value of
    +            /// I2S_TX_CLKM_DIV_YN1 is 1.
    +            TX_CLKM_DIV_YN1: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +        }), base_address + 0x3c);
    +
    +        /// address: 0x6002d040
    +        /// I2S TX PCM2PDM configuration register
    +        pub const TX_PCM2PDM_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// I2S TX PDM bypass hp filter or not. The option has been removed.
    +            TX_PDM_HP_BYPASS: u1,
    +            /// I2S TX PDM OSR2 value
    +            TX_PDM_SINC_OSR2: u4,
    +            /// I2S TX PDM prescale for sigmadelta
    +            TX_PDM_PRESCALE: u8,
    +            /// I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4
    +            TX_PDM_HP_IN_SHIFT: u2,
    +            /// I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4
    +            TX_PDM_LP_IN_SHIFT: u2,
    +            /// I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4
    +            TX_PDM_SINC_IN_SHIFT: u2,
    +            /// I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4
    +            TX_PDM_SIGMADELTA_IN_SHIFT: u2,
    +            /// I2S TX PDM sigmadelta dither2 value
    +            TX_PDM_SIGMADELTA_DITHER2: u1,
    +            /// I2S TX PDM sigmadelta dither value
    +            TX_PDM_SIGMADELTA_DITHER: u1,
    +            /// I2S TX PDM dac mode enable
    +            TX_PDM_DAC_2OUT_EN: u1,
    +            /// I2S TX PDM dac 2channel enable
    +            TX_PDM_DAC_MODE_EN: u1,
    +            /// I2S TX PDM Converter enable
    +            PCM2PDM_CONV_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +        }), base_address + 0x40);
    +
    +        /// address: 0x6002d044
    +        /// I2S TX PCM2PDM configuration register
    +        pub const TX_PCM2PDM_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// I2S TX PDM Fp
    +            TX_PDM_FP: u10,
    +            /// I2S TX PDM Fs
    +            TX_PDM_FS: u10,
    +            /// The fourth parameter of PDM TX IIR_HP filter stage 2 is (504 +
    +            /// I2S_TX_IIR_HP_MULT12_5[2:0])
    +            TX_IIR_HP_MULT12_5: u3,
    +            /// The fourth parameter of PDM TX IIR_HP filter stage 1 is (504 +
    +            /// I2S_TX_IIR_HP_MULT12_0[2:0])
    +            TX_IIR_HP_MULT12_0: u3,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +        }), base_address + 0x44);
    +
    +        /// address: 0x6002d050
    +        /// I2S TX TDM mode control register
    +        pub const RX_TDM_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// 1: Enable the valid data input of I2S RX TDM or PDM channel 0. 0: Disable, just
    +            /// input 0 in this channel.
    +            RX_TDM_PDM_CHAN0_EN: u1,
    +            /// 1: Enable the valid data input of I2S RX TDM or PDM channel 1. 0: Disable, just
    +            /// input 0 in this channel.
    +            RX_TDM_PDM_CHAN1_EN: u1,
    +            /// 1: Enable the valid data input of I2S RX TDM or PDM channel 2. 0: Disable, just
    +            /// input 0 in this channel.
    +            RX_TDM_PDM_CHAN2_EN: u1,
    +            /// 1: Enable the valid data input of I2S RX TDM or PDM channel 3. 0: Disable, just
    +            /// input 0 in this channel.
    +            RX_TDM_PDM_CHAN3_EN: u1,
    +            /// 1: Enable the valid data input of I2S RX TDM or PDM channel 4. 0: Disable, just
    +            /// input 0 in this channel.
    +            RX_TDM_PDM_CHAN4_EN: u1,
    +            /// 1: Enable the valid data input of I2S RX TDM or PDM channel 5. 0: Disable, just
    +            /// input 0 in this channel.
    +            RX_TDM_PDM_CHAN5_EN: u1,
    +            /// 1: Enable the valid data input of I2S RX TDM or PDM channel 6. 0: Disable, just
    +            /// input 0 in this channel.
    +            RX_TDM_PDM_CHAN6_EN: u1,
    +            /// 1: Enable the valid data input of I2S RX TDM or PDM channel 7. 0: Disable, just
    +            /// input 0 in this channel.
    +            RX_TDM_PDM_CHAN7_EN: u1,
    +            /// 1: Enable the valid data input of I2S RX TDM channel 8. 0: Disable, just input 0
    +            /// in this channel.
    +            RX_TDM_CHAN8_EN: u1,
    +            /// 1: Enable the valid data input of I2S RX TDM channel 9. 0: Disable, just input 0
    +            /// in this channel.
    +            RX_TDM_CHAN9_EN: u1,
    +            /// 1: Enable the valid data input of I2S RX TDM channel 10. 0: Disable, just input
    +            /// 0 in this channel.
    +            RX_TDM_CHAN10_EN: u1,
    +            /// 1: Enable the valid data input of I2S RX TDM channel 11. 0: Disable, just input
    +            /// 0 in this channel.
    +            RX_TDM_CHAN11_EN: u1,
    +            /// 1: Enable the valid data input of I2S RX TDM channel 12. 0: Disable, just input
    +            /// 0 in this channel.
    +            RX_TDM_CHAN12_EN: u1,
    +            /// 1: Enable the valid data input of I2S RX TDM channel 13. 0: Disable, just input
    +            /// 0 in this channel.
    +            RX_TDM_CHAN13_EN: u1,
    +            /// 1: Enable the valid data input of I2S RX TDM channel 14. 0: Disable, just input
    +            /// 0 in this channel.
    +            RX_TDM_CHAN14_EN: u1,
    +            /// 1: Enable the valid data input of I2S RX TDM channel 15. 0: Disable, just input
    +            /// 0 in this channel.
    +            RX_TDM_CHAN15_EN: u1,
    +            /// The total channel number of I2S TX TDM mode.
    +            RX_TDM_TOT_CHAN_NUM: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0x50);
    +
    +        /// address: 0x6002d054
    +        /// I2S TX TDM mode control register
    +        pub const TX_TDM_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// 1: Enable the valid data output of I2S TX TDM channel 0. 0: Disable, just output
    +            /// 0 in this channel.
    +            TX_TDM_CHAN0_EN: u1,
    +            /// 1: Enable the valid data output of I2S TX TDM channel 1. 0: Disable, just output
    +            /// 0 in this channel.
    +            TX_TDM_CHAN1_EN: u1,
    +            /// 1: Enable the valid data output of I2S TX TDM channel 2. 0: Disable, just output
    +            /// 0 in this channel.
    +            TX_TDM_CHAN2_EN: u1,
    +            /// 1: Enable the valid data output of I2S TX TDM channel 3. 0: Disable, just output
    +            /// 0 in this channel.
    +            TX_TDM_CHAN3_EN: u1,
    +            /// 1: Enable the valid data output of I2S TX TDM channel 4. 0: Disable, just output
    +            /// 0 in this channel.
    +            TX_TDM_CHAN4_EN: u1,
    +            /// 1: Enable the valid data output of I2S TX TDM channel 5. 0: Disable, just output
    +            /// 0 in this channel.
    +            TX_TDM_CHAN5_EN: u1,
    +            /// 1: Enable the valid data output of I2S TX TDM channel 6. 0: Disable, just output
    +            /// 0 in this channel.
    +            TX_TDM_CHAN6_EN: u1,
    +            /// 1: Enable the valid data output of I2S TX TDM channel 7. 0: Disable, just output
    +            /// 0 in this channel.
    +            TX_TDM_CHAN7_EN: u1,
    +            /// 1: Enable the valid data output of I2S TX TDM channel 8. 0: Disable, just output
    +            /// 0 in this channel.
    +            TX_TDM_CHAN8_EN: u1,
    +            /// 1: Enable the valid data output of I2S TX TDM channel 9. 0: Disable, just output
    +            /// 0 in this channel.
    +            TX_TDM_CHAN9_EN: u1,
    +            /// 1: Enable the valid data output of I2S TX TDM channel 10. 0: Disable, just
    +            /// output 0 in this channel.
    +            TX_TDM_CHAN10_EN: u1,
    +            /// 1: Enable the valid data output of I2S TX TDM channel 11. 0: Disable, just
    +            /// output 0 in this channel.
    +            TX_TDM_CHAN11_EN: u1,
    +            /// 1: Enable the valid data output of I2S TX TDM channel 12. 0: Disable, just
    +            /// output 0 in this channel.
    +            TX_TDM_CHAN12_EN: u1,
    +            /// 1: Enable the valid data output of I2S TX TDM channel 13. 0: Disable, just
    +            /// output 0 in this channel.
    +            TX_TDM_CHAN13_EN: u1,
    +            /// 1: Enable the valid data output of I2S TX TDM channel 14. 0: Disable, just
    +            /// output 0 in this channel.
    +            TX_TDM_CHAN14_EN: u1,
    +            /// 1: Enable the valid data output of I2S TX TDM channel 15. 0: Disable, just
    +            /// output 0 in this channel.
    +            TX_TDM_CHAN15_EN: u1,
    +            /// The total channel number of I2S TX TDM mode.
    +            TX_TDM_TOT_CHAN_NUM: u4,
    +            /// When DMA TX buffer stores the data of (REG_TX_TDM_TOT_CHAN_NUM + 1) channels,
    +            /// and only the data of the enabled channels is sent, then this bit should be set.
    +            /// Clear it when all the data stored in DMA TX buffer is for enabled channels.
    +            TX_TDM_SKIP_MSK_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +        }), base_address + 0x54);
    +
    +        /// address: 0x6002d058
    +        /// I2S RX timing control register
    +        pub const RX_TIMING = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The delay mode of I2S Rx SD input signal. 0: bypass. 1: delay by pos edge. 2:
    +            /// delay by neg edge. 3: not used.
    +            RX_SD_IN_DM: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            /// The delay mode of I2S Rx WS output signal. 0: bypass. 1: delay by pos edge. 2:
    +            /// delay by neg edge. 3: not used.
    +            RX_WS_OUT_DM: u2,
    +            reserved14: u1,
    +            reserved15: u1,
    +            /// The delay mode of I2S Rx BCK output signal. 0: bypass. 1: delay by pos edge. 2:
    +            /// delay by neg edge. 3: not used.
    +            RX_BCK_OUT_DM: u2,
    +            reserved16: u1,
    +            reserved17: u1,
    +            /// The delay mode of I2S Rx WS input signal. 0: bypass. 1: delay by pos edge. 2:
    +            /// delay by neg edge. 3: not used.
    +            RX_WS_IN_DM: u2,
    +            reserved18: u1,
    +            reserved19: u1,
    +            /// The delay mode of I2S Rx BCK input signal. 0: bypass. 1: delay by pos edge. 2:
    +            /// delay by neg edge. 3: not used.
    +            RX_BCK_IN_DM: u2,
    +            padding0: u1,
    +            padding1: u1,
    +        }), base_address + 0x58);
    +
    +        /// address: 0x6002d05c
    +        /// I2S TX timing control register
    +        pub const TX_TIMING = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The delay mode of I2S TX SD output signal. 0: bypass. 1: delay by pos edge. 2:
    +            /// delay by neg edge. 3: not used.
    +            TX_SD_OUT_DM: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// The delay mode of I2S TX SD1 output signal. 0: bypass. 1: delay by pos edge. 2:
    +            /// delay by neg edge. 3: not used.
    +            TX_SD1_OUT_DM: u2,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            /// The delay mode of I2S TX WS output signal. 0: bypass. 1: delay by pos edge. 2:
    +            /// delay by neg edge. 3: not used.
    +            TX_WS_OUT_DM: u2,
    +            reserved12: u1,
    +            reserved13: u1,
    +            /// The delay mode of I2S TX BCK output signal. 0: bypass. 1: delay by pos edge. 2:
    +            /// delay by neg edge. 3: not used.
    +            TX_BCK_OUT_DM: u2,
    +            reserved14: u1,
    +            reserved15: u1,
    +            /// The delay mode of I2S TX WS input signal. 0: bypass. 1: delay by pos edge. 2:
    +            /// delay by neg edge. 3: not used.
    +            TX_WS_IN_DM: u2,
    +            reserved16: u1,
    +            reserved17: u1,
    +            /// The delay mode of I2S TX BCK input signal. 0: bypass. 1: delay by pos edge. 2:
    +            /// delay by neg edge. 3: not used.
    +            TX_BCK_IN_DM: u2,
    +            padding0: u1,
    +            padding1: u1,
    +        }), base_address + 0x5c);
    +
    +        /// address: 0x6002d060
    +        /// I2S HUNG configure register.
    +        pub const LC_HUNG_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// the i2s_tx_hung_int interrupt or the i2s_rx_hung_int interrupt will be triggered
    +            /// when fifo hung counter is equal to this value
    +            LC_FIFO_TIMEOUT: u8,
    +            /// The bits are used to scale tick counter threshold. The tick counter is reset
    +            /// when counter value >= 88000/2^i2s_lc_fifo_timeout_shift
    +            LC_FIFO_TIMEOUT_SHIFT: u3,
    +            /// The enable bit for FIFO timeout
    +            LC_FIFO_TIMEOUT_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0x60);
    +
    +        /// address: 0x6002d064
    +        /// I2S RX data number control register.
    +        pub const RXEOF_NUM = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The receive data bit length is (I2S_RX_BITS_MOD[4:0] + 1) *
    +            /// (REG_RX_EOF_NUM[11:0] + 1) . It will trigger in_suc_eof interrupt in the
    +            /// configured DMA RX channel.
    +            RX_EOF_NUM: u12,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0x64);
    +
    +        /// address: 0x6002d068
    +        /// I2S signal data register
    +        pub const CONF_SIGLE_DATA = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The configured constant channel data to be sent out.
    +            SINGLE_DATA: u32,
    +        }), base_address + 0x68);
    +
    +        /// address: 0x6002d06c
    +        /// I2S TX status register
    +        pub const STATE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// 1: i2s_tx is idle state. 0: i2s_tx is working.
    +            TX_IDLE: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x6c);
    +
    +        /// address: 0x6002d080
    +        /// Version control register
    +        pub const DATE = @intToPtr(*volatile MmioInt(32, u28), base_address + 0x80);
    +    };
    +
    +    /// Interrupt Core
    +    pub const INTERRUPT_CORE0 = struct {
    +        pub const base_address = 0x600c2000;
    +
    +        /// address: 0x600c2000
    +        /// mac intr map register
    +        pub const MAC_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x0);
    +
    +        /// address: 0x600c2004
    +        /// mac nmi_intr map register
    +        pub const MAC_NMI_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x4);
    +
    +        /// address: 0x600c2008
    +        /// pwr intr map register
    +        pub const PWR_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x8);
    +
    +        /// address: 0x600c200c
    +        /// bb intr map register
    +        pub const BB_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xc);
    +
    +        /// address: 0x600c2010
    +        /// bt intr map register
    +        pub const BT_MAC_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x10);
    +
    +        /// address: 0x600c2014
    +        /// bb_bt intr map register
    +        pub const BT_BB_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x14);
    +
    +        /// address: 0x600c2018
    +        /// bb_bt_nmi intr map register
    +        pub const BT_BB_NMI_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x18);
    +
    +        /// address: 0x600c201c
    +        /// rwbt intr map register
    +        pub const RWBT_IRQ_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x1c);
    +
    +        /// address: 0x600c2020
    +        /// rwble intr map register
    +        pub const RWBLE_IRQ_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x20);
    +
    +        /// address: 0x600c2024
    +        /// rwbt_nmi intr map register
    +        pub const RWBT_NMI_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x24);
    +
    +        /// address: 0x600c2028
    +        /// rwble_nmi intr map register
    +        pub const RWBLE_NMI_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x28);
    +
    +        /// address: 0x600c202c
    +        /// i2c intr map register
    +        pub const I2C_MST_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x2c);
    +
    +        /// address: 0x600c2030
    +        /// slc0 intr map register
    +        pub const SLC0_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x30);
    +
    +        /// address: 0x600c2034
    +        /// slc1 intr map register
    +        pub const SLC1_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x34);
    +
    +        /// address: 0x600c2038
    +        /// apb_ctrl intr map register
    +        pub const APB_CTRL_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x38);
    +
    +        /// address: 0x600c203c
    +        /// uchi0 intr map register
    +        pub const UHCI0_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x3c);
    +
    +        /// address: 0x600c2040
    +        /// gpio intr map register
    +        pub const GPIO_INTERRUPT_PRO_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x40);
    +
    +        /// address: 0x600c2044
    +        /// gpio_pro intr map register
    +        pub const GPIO_INTERRUPT_PRO_NMI_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x44);
    +
    +        /// address: 0x600c2048
    +        /// gpio_pro_nmi intr map register
    +        pub const SPI_INTR_1_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x48);
    +
    +        /// address: 0x600c204c
    +        /// spi1 intr map register
    +        pub const SPI_INTR_2_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x4c);
    +
    +        /// address: 0x600c2050
    +        /// spi2 intr map register
    +        pub const I2S1_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x50);
    +
    +        /// address: 0x600c2054
    +        /// i2s1 intr map register
    +        pub const UART_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x54);
    +
    +        /// address: 0x600c2058
    +        /// uart1 intr map register
    +        pub const UART1_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x58);
    +
    +        /// address: 0x600c205c
    +        /// ledc intr map register
    +        pub const LEDC_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x5c);
    +
    +        /// address: 0x600c2060
    +        /// efuse intr map register
    +        pub const EFUSE_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x60);
    +
    +        /// address: 0x600c2064
    +        /// can intr map register
    +        pub const CAN_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x64);
    +
    +        /// address: 0x600c2068
    +        /// usb intr map register
    +        pub const USB_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x68);
    +
    +        /// address: 0x600c206c
    +        /// rtc intr map register
    +        pub const RTC_CORE_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x6c);
    +
    +        /// address: 0x600c2070
    +        /// rmt intr map register
    +        pub const RMT_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x70);
    +
    +        /// address: 0x600c2074
    +        /// i2c intr map register
    +        pub const I2C_EXT0_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x74);
    +
    +        /// address: 0x600c2078
    +        /// timer1 intr map register
    +        pub const TIMER_INT1_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x78);
    +
    +        /// address: 0x600c207c
    +        /// timer2 intr map register
    +        pub const TIMER_INT2_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x7c);
    +
    +        /// address: 0x600c2080
    +        /// tg to intr map register
    +        pub const TG_T0_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x80);
    +
    +        /// address: 0x600c2084
    +        /// tg wdt intr map register
    +        pub const TG_WDT_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x84);
    +
    +        /// address: 0x600c2088
    +        /// tg1 to intr map register
    +        pub const TG1_T0_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x88);
    +
    +        /// address: 0x600c208c
    +        /// tg1 wdt intr map register
    +        pub const TG1_WDT_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x8c);
    +
    +        /// address: 0x600c2090
    +        /// cache ia intr map register
    +        pub const CACHE_IA_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x90);
    +
    +        /// address: 0x600c2094
    +        /// systimer intr map register
    +        pub const SYSTIMER_TARGET0_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x94);
    +
    +        /// address: 0x600c2098
    +        /// systimer target1 intr map register
    +        pub const SYSTIMER_TARGET1_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x98);
    +
    +        /// address: 0x600c209c
    +        /// systimer target2 intr map register
    +        pub const SYSTIMER_TARGET2_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x9c);
    +
    +        /// address: 0x600c20a0
    +        /// spi mem reject intr map register
    +        pub const SPI_MEM_REJECT_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xa0);
    +
    +        /// address: 0x600c20a4
    +        /// icache perload intr map register
    +        pub const ICACHE_PRELOAD_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xa4);
    +
    +        /// address: 0x600c20a8
    +        /// icache sync intr map register
    +        pub const ICACHE_SYNC_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xa8);
    +
    +        /// address: 0x600c20ac
    +        /// adc intr map register
    +        pub const APB_ADC_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xac);
    +
    +        /// address: 0x600c20b0
    +        /// dma ch0 intr map register
    +        pub const DMA_CH0_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xb0);
    +
    +        /// address: 0x600c20b4
    +        /// dma ch1 intr map register
    +        pub const DMA_CH1_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xb4);
    +
    +        /// address: 0x600c20b8
    +        /// dma ch2 intr map register
    +        pub const DMA_CH2_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xb8);
    +
    +        /// address: 0x600c20bc
    +        /// rsa intr map register
    +        pub const RSA_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xbc);
    +
    +        /// address: 0x600c20c0
    +        /// aes intr map register
    +        pub const AES_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xc0);
    +
    +        /// address: 0x600c20c4
    +        /// sha intr map register
    +        pub const SHA_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xc4);
    +
    +        /// address: 0x600c20c8
    +        /// cpu from cpu 0 intr map register
    +        pub const CPU_INTR_FROM_CPU_0_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xc8);
    +
    +        /// address: 0x600c20cc
    +        /// cpu from cpu 0 intr map register
    +        pub const CPU_INTR_FROM_CPU_1_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xcc);
    +
    +        /// address: 0x600c20d0
    +        /// cpu from cpu 1 intr map register
    +        pub const CPU_INTR_FROM_CPU_2_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xd0);
    +
    +        /// address: 0x600c20d4
    +        /// cpu from cpu 3 intr map register
    +        pub const CPU_INTR_FROM_CPU_3_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xd4);
    +
    +        /// address: 0x600c20d8
    +        /// assist debug intr map register
    +        pub const ASSIST_DEBUG_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xd8);
    +
    +        /// address: 0x600c20dc
    +        /// dma pms violatile intr map register
    +        pub const DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xdc);
    +
    +        /// address: 0x600c20e0
    +        /// iram0 pms violatile intr map register
    +        pub const CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xe0);
    +
    +        /// address: 0x600c20e4
    +        /// mac intr map register
    +        pub const CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xe4);
    +
    +        /// address: 0x600c20e8
    +        /// mac intr map register
    +        pub const CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xe8);
    +
    +        /// address: 0x600c20ec
    +        /// mac intr map register
    +        pub const CORE_0_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xec);
    +
    +        /// address: 0x600c20f0
    +        /// mac intr map register
    +        pub const BACKUP_PMS_VIOLATE_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xf0);
    +
    +        /// address: 0x600c20f4
    +        /// mac intr map register
    +        pub const CACHE_CORE0_ACS_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xf4);
    +
    +        /// address: 0x600c20f8
    +        /// mac intr map register
    +        pub const INTR_STATUS_REG_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_intr_status_0
    +            INTR_STATUS_0: u32,
    +        }), base_address + 0xf8);
    +
    +        /// address: 0x600c20fc
    +        /// mac intr map register
    +        pub const INTR_STATUS_REG_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_intr_status_1
    +            INTR_STATUS_1: u32,
    +        }), base_address + 0xfc);
    +
    +        /// address: 0x600c2100
    +        /// mac intr map register
    +        pub const CLOCK_GATE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_reg_clk_en
    +            REG_CLK_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x100);
    +
    +        /// address: 0x600c2104
    +        /// mac intr map register
    +        pub const CPU_INT_ENABLE = @intToPtr(*volatile u32, base_address + 0x104);
    +
    +        /// address: 0x600c2108
    +        /// mac intr map register
    +        pub const CPU_INT_TYPE = @intToPtr(*volatile u32, base_address + 0x108);
    +
    +        /// address: 0x600c210c
    +        /// mac intr map register
    +        pub const CPU_INT_CLEAR = @intToPtr(*volatile u32, base_address + 0x10c);
    +
    +        /// address: 0x600c2110
    +        /// mac intr map register
    +        pub const CPU_INT_EIP_STATUS = @intToPtr(*volatile u32, base_address + 0x110);
    +
    +        /// address: 0x600c2114
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_0_map
    +            CPU_PRI_0_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x114);
    +
    +        /// address: 0x600c2118
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_1_map
    +            CPU_PRI_1_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x118);
    +
    +        /// address: 0x600c211c
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_2_map
    +            CPU_PRI_2_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x11c);
    +
    +        /// address: 0x600c2120
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_3_map
    +            CPU_PRI_3_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x120);
    +
    +        /// address: 0x600c2124
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_4_map
    +            CPU_PRI_4_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x124);
    +
    +        /// address: 0x600c2128
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_5 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_5_map
    +            CPU_PRI_5_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x128);
    +
    +        /// address: 0x600c212c
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_6 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_6_map
    +            CPU_PRI_6_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x12c);
    +
    +        /// address: 0x600c2130
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_7 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_7_map
    +            CPU_PRI_7_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x130);
    +
    +        /// address: 0x600c2134
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_8 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_8_map
    +            CPU_PRI_8_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x134);
    +
    +        /// address: 0x600c2138
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_9 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_9_map
    +            CPU_PRI_9_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x138);
    +
    +        /// address: 0x600c213c
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_10 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_10_map
    +            CPU_PRI_10_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x13c);
    +
    +        /// address: 0x600c2140
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_11 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_11_map
    +            CPU_PRI_11_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x140);
    +
    +        /// address: 0x600c2144
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_12 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_12_map
    +            CPU_PRI_12_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x144);
    +
    +        /// address: 0x600c2148
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_13 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_13_map
    +            CPU_PRI_13_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x148);
    +
    +        /// address: 0x600c214c
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_14 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_14_map
    +            CPU_PRI_14_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x14c);
    +
    +        /// address: 0x600c2150
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_15 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_15_map
    +            CPU_PRI_15_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x150);
    +
    +        /// address: 0x600c2154
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_16 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_16_map
    +            CPU_PRI_16_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x154);
    +
    +        /// address: 0x600c2158
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_17 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_17_map
    +            CPU_PRI_17_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x158);
    +
    +        /// address: 0x600c215c
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_18 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_18_map
    +            CPU_PRI_18_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x15c);
    +
    +        /// address: 0x600c2160
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_19 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_19_map
    +            CPU_PRI_19_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x160);
    +
    +        /// address: 0x600c2164
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_20 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_20_map
    +            CPU_PRI_20_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x164);
    +
    +        /// address: 0x600c2168
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_21 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_21_map
    +            CPU_PRI_21_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x168);
    +
    +        /// address: 0x600c216c
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_22 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_22_map
    +            CPU_PRI_22_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x16c);
    +
    +        /// address: 0x600c2170
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_23 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_23_map
    +            CPU_PRI_23_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x170);
    +
    +        /// address: 0x600c2174
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_24 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_24_map
    +            CPU_PRI_24_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x174);
    +
    +        /// address: 0x600c2178
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_25 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_25_map
    +            CPU_PRI_25_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x178);
    +
    +        /// address: 0x600c217c
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_26 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_26_map
    +            CPU_PRI_26_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x17c);
    +
    +        /// address: 0x600c2180
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_27 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_27_map
    +            CPU_PRI_27_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x180);
    +
    +        /// address: 0x600c2184
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_28 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_28_map
    +            CPU_PRI_28_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x184);
    +
    +        /// address: 0x600c2188
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_29 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_29_map
    +            CPU_PRI_29_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x188);
    +
    +        /// address: 0x600c218c
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_30 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_30_map
    +            CPU_PRI_30_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x18c);
    +
    +        /// address: 0x600c2190
    +        /// mac intr map register
    +        pub const CPU_INT_PRI_31 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_core0_cpu_pri_31_map
    +            CPU_PRI_31_MAP: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x190);
    +
    +        /// address: 0x600c2194
    +        /// mac intr map register
    +        pub const CPU_INT_THRESH = @intToPtr(*volatile MmioInt(32, u4), base_address + 0x194);
    +
    +        /// address: 0x600c27fc
    +        /// mac intr map register
    +        pub const INTERRUPT_REG_DATE = @intToPtr(*volatile MmioInt(32, u28), base_address + 0x7fc);
    +    };
    +
    +    /// Input/Output Multiplexer
    +    pub const IO_MUX = struct {
    +        pub const base_address = 0x60009000;
    +
    +        /// address: 0x60009000
    +        /// Clock Output Configuration Register
    +        pub const PIN_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// If you want to output clock for I2S to CLK_OUT_out1, set this register to 0x0.
    +            /// CLK_OUT_out1 can be found in peripheral output signals.
    +            CLK_OUT1: u4,
    +            /// If you want to output clock for I2S to CLK_OUT_out2, set this register to 0x0.
    +            /// CLK_OUT_out2 can be found in peripheral output signals.
    +            CLK_OUT2: u4,
    +            /// If you want to output clock for I2S to CLK_OUT_out3, set this register to 0x0.
    +            /// CLK_OUT_out3 can be found in peripheral output signals.
    +            CLK_OUT3: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0x0);
    +
    +        /// address: 0x60009004
    +        /// IO MUX Configure Register for pad XTAL_32K_P
    +        pub const GPIO0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    +            MCU_OE: u1,
    +            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    +            SLP_SEL: u1,
    +            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    +            /// internal pull-down disabled.
    +            MCU_WPD: u1,
    +            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    +            /// internal pull-up disabled.
    +            MCU_WPU: u1,
    +            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    +            MCU_IE: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    +            /// pull-down disabled.
    +            FUN_WPD: u1,
    +            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    +            /// disabled.
    +            FUN_WPU: u1,
    +            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    +            FUN_IE: u1,
    +            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    +            FUN_DRV: u2,
    +            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    +            /// 2; etc.
    +            MCU_SEL: u3,
    +            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    +            FILTER_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x4);
    +
    +        /// address: 0x60009008
    +        /// IO MUX Configure Register for pad XTAL_32K_P
    +        pub const GPIO1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    +            MCU_OE: u1,
    +            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    +            SLP_SEL: u1,
    +            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    +            /// internal pull-down disabled.
    +            MCU_WPD: u1,
    +            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    +            /// internal pull-up disabled.
    +            MCU_WPU: u1,
    +            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    +            MCU_IE: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    +            /// pull-down disabled.
    +            FUN_WPD: u1,
    +            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    +            /// disabled.
    +            FUN_WPU: u1,
    +            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    +            FUN_IE: u1,
    +            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    +            FUN_DRV: u2,
    +            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    +            /// 2; etc.
    +            MCU_SEL: u3,
    +            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    +            FILTER_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x8);
    +
    +        /// address: 0x6000900c
    +        /// IO MUX Configure Register for pad XTAL_32K_P
    +        pub const GPIO2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    +            MCU_OE: u1,
    +            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    +            SLP_SEL: u1,
    +            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    +            /// internal pull-down disabled.
    +            MCU_WPD: u1,
    +            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    +            /// internal pull-up disabled.
    +            MCU_WPU: u1,
    +            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    +            MCU_IE: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    +            /// pull-down disabled.
    +            FUN_WPD: u1,
    +            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    +            /// disabled.
    +            FUN_WPU: u1,
    +            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    +            FUN_IE: u1,
    +            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    +            FUN_DRV: u2,
    +            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    +            /// 2; etc.
    +            MCU_SEL: u3,
    +            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    +            FILTER_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0xc);
    +
    +        /// address: 0x60009010
    +        /// IO MUX Configure Register for pad XTAL_32K_P
    +        pub const GPIO3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    +            MCU_OE: u1,
    +            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    +            SLP_SEL: u1,
    +            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    +            /// internal pull-down disabled.
    +            MCU_WPD: u1,
    +            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    +            /// internal pull-up disabled.
    +            MCU_WPU: u1,
    +            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    +            MCU_IE: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    +            /// pull-down disabled.
    +            FUN_WPD: u1,
    +            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    +            /// disabled.
    +            FUN_WPU: u1,
    +            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    +            FUN_IE: u1,
    +            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    +            FUN_DRV: u2,
    +            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    +            /// 2; etc.
    +            MCU_SEL: u3,
    +            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    +            FILTER_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x10);
    +
    +        /// address: 0x60009014
    +        /// IO MUX Configure Register for pad XTAL_32K_P
    +        pub const GPIO4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    +            MCU_OE: u1,
    +            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    +            SLP_SEL: u1,
    +            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    +            /// internal pull-down disabled.
    +            MCU_WPD: u1,
    +            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    +            /// internal pull-up disabled.
    +            MCU_WPU: u1,
    +            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    +            MCU_IE: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    +            /// pull-down disabled.
    +            FUN_WPD: u1,
    +            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    +            /// disabled.
    +            FUN_WPU: u1,
    +            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    +            FUN_IE: u1,
    +            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    +            FUN_DRV: u2,
    +            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    +            /// 2; etc.
    +            MCU_SEL: u3,
    +            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    +            FILTER_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x14);
    +
    +        /// address: 0x60009018
    +        /// IO MUX Configure Register for pad XTAL_32K_P
    +        pub const GPIO5 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    +            MCU_OE: u1,
    +            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    +            SLP_SEL: u1,
    +            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    +            /// internal pull-down disabled.
    +            MCU_WPD: u1,
    +            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    +            /// internal pull-up disabled.
    +            MCU_WPU: u1,
    +            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    +            MCU_IE: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    +            /// pull-down disabled.
    +            FUN_WPD: u1,
    +            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    +            /// disabled.
    +            FUN_WPU: u1,
    +            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    +            FUN_IE: u1,
    +            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    +            FUN_DRV: u2,
    +            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    +            /// 2; etc.
    +            MCU_SEL: u3,
    +            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    +            FILTER_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x18);
    +
    +        /// address: 0x6000901c
    +        /// IO MUX Configure Register for pad XTAL_32K_P
    +        pub const GPIO6 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    +            MCU_OE: u1,
    +            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    +            SLP_SEL: u1,
    +            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    +            /// internal pull-down disabled.
    +            MCU_WPD: u1,
    +            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    +            /// internal pull-up disabled.
    +            MCU_WPU: u1,
    +            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    +            MCU_IE: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    +            /// pull-down disabled.
    +            FUN_WPD: u1,
    +            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    +            /// disabled.
    +            FUN_WPU: u1,
    +            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    +            FUN_IE: u1,
    +            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    +            FUN_DRV: u2,
    +            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    +            /// 2; etc.
    +            MCU_SEL: u3,
    +            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    +            FILTER_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x1c);
    +
    +        /// address: 0x60009020
    +        /// IO MUX Configure Register for pad XTAL_32K_P
    +        pub const GPIO7 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    +            MCU_OE: u1,
    +            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    +            SLP_SEL: u1,
    +            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    +            /// internal pull-down disabled.
    +            MCU_WPD: u1,
    +            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    +            /// internal pull-up disabled.
    +            MCU_WPU: u1,
    +            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    +            MCU_IE: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    +            /// pull-down disabled.
    +            FUN_WPD: u1,
    +            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    +            /// disabled.
    +            FUN_WPU: u1,
    +            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    +            FUN_IE: u1,
    +            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    +            FUN_DRV: u2,
    +            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    +            /// 2; etc.
    +            MCU_SEL: u3,
    +            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    +            FILTER_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x20);
    +
    +        /// address: 0x60009024
    +        /// IO MUX Configure Register for pad XTAL_32K_P
    +        pub const GPIO8 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    +            MCU_OE: u1,
    +            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    +            SLP_SEL: u1,
    +            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    +            /// internal pull-down disabled.
    +            MCU_WPD: u1,
    +            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    +            /// internal pull-up disabled.
    +            MCU_WPU: u1,
    +            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    +            MCU_IE: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    +            /// pull-down disabled.
    +            FUN_WPD: u1,
    +            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    +            /// disabled.
    +            FUN_WPU: u1,
    +            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    +            FUN_IE: u1,
    +            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    +            FUN_DRV: u2,
    +            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    +            /// 2; etc.
    +            MCU_SEL: u3,
    +            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    +            FILTER_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x24);
    +
    +        /// address: 0x60009028
    +        /// IO MUX Configure Register for pad XTAL_32K_P
    +        pub const GPIO9 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    +            MCU_OE: u1,
    +            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    +            SLP_SEL: u1,
    +            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    +            /// internal pull-down disabled.
    +            MCU_WPD: u1,
    +            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    +            /// internal pull-up disabled.
    +            MCU_WPU: u1,
    +            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    +            MCU_IE: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    +            /// pull-down disabled.
    +            FUN_WPD: u1,
    +            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    +            /// disabled.
    +            FUN_WPU: u1,
    +            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    +            FUN_IE: u1,
    +            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    +            FUN_DRV: u2,
    +            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    +            /// 2; etc.
    +            MCU_SEL: u3,
    +            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    +            FILTER_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x28);
    +
    +        /// address: 0x6000902c
    +        /// IO MUX Configure Register for pad XTAL_32K_P
    +        pub const GPIO10 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    +            MCU_OE: u1,
    +            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    +            SLP_SEL: u1,
    +            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    +            /// internal pull-down disabled.
    +            MCU_WPD: u1,
    +            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    +            /// internal pull-up disabled.
    +            MCU_WPU: u1,
    +            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    +            MCU_IE: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    +            /// pull-down disabled.
    +            FUN_WPD: u1,
    +            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    +            /// disabled.
    +            FUN_WPU: u1,
    +            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    +            FUN_IE: u1,
    +            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    +            FUN_DRV: u2,
    +            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    +            /// 2; etc.
    +            MCU_SEL: u3,
    +            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    +            FILTER_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x2c);
    +
    +        /// address: 0x60009030
    +        /// IO MUX Configure Register for pad XTAL_32K_P
    +        pub const GPIO11 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    +            MCU_OE: u1,
    +            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    +            SLP_SEL: u1,
    +            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    +            /// internal pull-down disabled.
    +            MCU_WPD: u1,
    +            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    +            /// internal pull-up disabled.
    +            MCU_WPU: u1,
    +            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    +            MCU_IE: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    +            /// pull-down disabled.
    +            FUN_WPD: u1,
    +            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    +            /// disabled.
    +            FUN_WPU: u1,
    +            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    +            FUN_IE: u1,
    +            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    +            FUN_DRV: u2,
    +            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    +            /// 2; etc.
    +            MCU_SEL: u3,
    +            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    +            FILTER_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x30);
    +
    +        /// address: 0x60009034
    +        /// IO MUX Configure Register for pad XTAL_32K_P
    +        pub const GPIO12 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    +            MCU_OE: u1,
    +            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    +            SLP_SEL: u1,
    +            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    +            /// internal pull-down disabled.
    +            MCU_WPD: u1,
    +            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    +            /// internal pull-up disabled.
    +            MCU_WPU: u1,
    +            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    +            MCU_IE: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    +            /// pull-down disabled.
    +            FUN_WPD: u1,
    +            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    +            /// disabled.
    +            FUN_WPU: u1,
    +            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    +            FUN_IE: u1,
    +            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    +            FUN_DRV: u2,
    +            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    +            /// 2; etc.
    +            MCU_SEL: u3,
    +            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    +            FILTER_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x34);
    +
    +        /// address: 0x60009038
    +        /// IO MUX Configure Register for pad XTAL_32K_P
    +        pub const GPIO13 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    +            MCU_OE: u1,
    +            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    +            SLP_SEL: u1,
    +            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    +            /// internal pull-down disabled.
    +            MCU_WPD: u1,
    +            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    +            /// internal pull-up disabled.
    +            MCU_WPU: u1,
    +            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    +            MCU_IE: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    +            /// pull-down disabled.
    +            FUN_WPD: u1,
    +            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    +            /// disabled.
    +            FUN_WPU: u1,
    +            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    +            FUN_IE: u1,
    +            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    +            FUN_DRV: u2,
    +            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    +            /// 2; etc.
    +            MCU_SEL: u3,
    +            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    +            FILTER_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x38);
    +
    +        /// address: 0x6000903c
    +        /// IO MUX Configure Register for pad XTAL_32K_P
    +        pub const GPIO14 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    +            MCU_OE: u1,
    +            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    +            SLP_SEL: u1,
    +            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    +            /// internal pull-down disabled.
    +            MCU_WPD: u1,
    +            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    +            /// internal pull-up disabled.
    +            MCU_WPU: u1,
    +            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    +            MCU_IE: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    +            /// pull-down disabled.
    +            FUN_WPD: u1,
    +            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    +            /// disabled.
    +            FUN_WPU: u1,
    +            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    +            FUN_IE: u1,
    +            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    +            FUN_DRV: u2,
    +            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    +            /// 2; etc.
    +            MCU_SEL: u3,
    +            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    +            FILTER_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x3c);
    +
    +        /// address: 0x60009040
    +        /// IO MUX Configure Register for pad XTAL_32K_P
    +        pub const GPIO15 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    +            MCU_OE: u1,
    +            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    +            SLP_SEL: u1,
    +            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    +            /// internal pull-down disabled.
    +            MCU_WPD: u1,
    +            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    +            /// internal pull-up disabled.
    +            MCU_WPU: u1,
    +            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    +            MCU_IE: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    +            /// pull-down disabled.
    +            FUN_WPD: u1,
    +            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    +            /// disabled.
    +            FUN_WPU: u1,
    +            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    +            FUN_IE: u1,
    +            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    +            FUN_DRV: u2,
    +            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    +            /// 2; etc.
    +            MCU_SEL: u3,
    +            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    +            FILTER_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x40);
    +
    +        /// address: 0x60009044
    +        /// IO MUX Configure Register for pad XTAL_32K_P
    +        pub const GPIO16 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    +            MCU_OE: u1,
    +            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    +            SLP_SEL: u1,
    +            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    +            /// internal pull-down disabled.
    +            MCU_WPD: u1,
    +            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    +            /// internal pull-up disabled.
    +            MCU_WPU: u1,
    +            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    +            MCU_IE: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    +            /// pull-down disabled.
    +            FUN_WPD: u1,
    +            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    +            /// disabled.
    +            FUN_WPU: u1,
    +            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    +            FUN_IE: u1,
    +            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    +            FUN_DRV: u2,
    +            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    +            /// 2; etc.
    +            MCU_SEL: u3,
    +            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    +            FILTER_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x44);
    +
    +        /// address: 0x60009048
    +        /// IO MUX Configure Register for pad XTAL_32K_P
    +        pub const GPIO17 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    +            MCU_OE: u1,
    +            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    +            SLP_SEL: u1,
    +            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    +            /// internal pull-down disabled.
    +            MCU_WPD: u1,
    +            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    +            /// internal pull-up disabled.
    +            MCU_WPU: u1,
    +            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    +            MCU_IE: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    +            /// pull-down disabled.
    +            FUN_WPD: u1,
    +            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    +            /// disabled.
    +            FUN_WPU: u1,
    +            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    +            FUN_IE: u1,
    +            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    +            FUN_DRV: u2,
    +            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    +            /// 2; etc.
    +            MCU_SEL: u3,
    +            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    +            FILTER_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x48);
    +
    +        /// address: 0x6000904c
    +        /// IO MUX Configure Register for pad XTAL_32K_P
    +        pub const GPIO18 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    +            MCU_OE: u1,
    +            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    +            SLP_SEL: u1,
    +            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    +            /// internal pull-down disabled.
    +            MCU_WPD: u1,
    +            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    +            /// internal pull-up disabled.
    +            MCU_WPU: u1,
    +            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    +            MCU_IE: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    +            /// pull-down disabled.
    +            FUN_WPD: u1,
    +            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    +            /// disabled.
    +            FUN_WPU: u1,
    +            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    +            FUN_IE: u1,
    +            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    +            FUN_DRV: u2,
    +            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    +            /// 2; etc.
    +            MCU_SEL: u3,
    +            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    +            FILTER_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x4c);
    +
    +        /// address: 0x60009050
    +        /// IO MUX Configure Register for pad XTAL_32K_P
    +        pub const GPIO19 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    +            MCU_OE: u1,
    +            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    +            SLP_SEL: u1,
    +            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    +            /// internal pull-down disabled.
    +            MCU_WPD: u1,
    +            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    +            /// internal pull-up disabled.
    +            MCU_WPU: u1,
    +            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    +            MCU_IE: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    +            /// pull-down disabled.
    +            FUN_WPD: u1,
    +            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    +            /// disabled.
    +            FUN_WPU: u1,
    +            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    +            FUN_IE: u1,
    +            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    +            FUN_DRV: u2,
    +            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    +            /// 2; etc.
    +            MCU_SEL: u3,
    +            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    +            FILTER_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x50);
    +
    +        /// address: 0x60009054
    +        /// IO MUX Configure Register for pad XTAL_32K_P
    +        pub const GPIO20 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    +            MCU_OE: u1,
    +            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    +            SLP_SEL: u1,
    +            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    +            /// internal pull-down disabled.
    +            MCU_WPD: u1,
    +            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    +            /// internal pull-up disabled.
    +            MCU_WPU: u1,
    +            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    +            MCU_IE: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    +            /// pull-down disabled.
    +            FUN_WPD: u1,
    +            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    +            /// disabled.
    +            FUN_WPU: u1,
    +            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    +            FUN_IE: u1,
    +            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    +            FUN_DRV: u2,
    +            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    +            /// 2; etc.
    +            MCU_SEL: u3,
    +            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    +            FILTER_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x54);
    +
    +        /// address: 0x60009058
    +        /// IO MUX Configure Register for pad XTAL_32K_P
    +        pub const GPIO21 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    +            MCU_OE: u1,
    +            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    +            SLP_SEL: u1,
    +            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    +            /// internal pull-down disabled.
    +            MCU_WPD: u1,
    +            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    +            /// internal pull-up disabled.
    +            MCU_WPU: u1,
    +            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    +            MCU_IE: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    +            /// pull-down disabled.
    +            FUN_WPD: u1,
    +            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    +            /// disabled.
    +            FUN_WPU: u1,
    +            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    +            FUN_IE: u1,
    +            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    +            FUN_DRV: u2,
    +            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    +            /// 2; etc.
    +            MCU_SEL: u3,
    +            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    +            FILTER_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x58);
    +
    +        /// address: 0x600090fc
    +        /// IO MUX Version Control Register
    +        pub const DATE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Version control register
    +            REG_DATE: u28,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +        }), base_address + 0xfc);
    +    };
    +
    +    /// LED Control PWM (Pulse Width Modulation)
    +    pub const LEDC = struct {
    +        pub const base_address = 0x60019000;
    +
    +        /// address: 0x60019000
    +        /// LEDC_LSCH0_CONF0.
    +        pub const LSCH0_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_timer_sel_lsch0.
    +            TIMER_SEL_LSCH0: u2,
    +            /// reg_sig_out_en_lsch0.
    +            SIG_OUT_EN_LSCH0: u1,
    +            /// reg_idle_lv_lsch0.
    +            IDLE_LV_LSCH0: u1,
    +            /// reg_para_up_lsch0.
    +            PARA_UP_LSCH0: u1,
    +            /// reg_ovf_num_lsch0.
    +            OVF_NUM_LSCH0: u10,
    +            /// reg_ovf_cnt_en_lsch0.
    +            OVF_CNT_EN_LSCH0: u1,
    +            /// reg_ovf_cnt_reset_lsch0.
    +            OVF_CNT_RESET_LSCH0: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +        }), base_address + 0x0);
    +
    +        /// address: 0x60019004
    +        /// LEDC_LSCH0_HPOINT.
    +        pub const LSCH0_HPOINT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_hpoint_lsch0.
    +            HPOINT_LSCH0: u14,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +        }), base_address + 0x4);
    +
    +        /// address: 0x60019008
    +        /// LEDC_LSCH0_DUTY.
    +        pub const LSCH0_DUTY = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_duty_lsch0.
    +            DUTY_LSCH0: u19,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +        }), base_address + 0x8);
    +
    +        /// address: 0x6001900c
    +        /// LEDC_LSCH0_CONF1.
    +        pub const LSCH0_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_duty_scale_lsch0.
    +            DUTY_SCALE_LSCH0: u10,
    +            /// reg_duty_cycle_lsch0.
    +            DUTY_CYCLE_LSCH0: u10,
    +            /// reg_duty_num_lsch0.
    +            DUTY_NUM_LSCH0: u10,
    +            /// reg_duty_inc_lsch0.
    +            DUTY_INC_LSCH0: u1,
    +            /// reg_duty_start_lsch0.
    +            DUTY_START_LSCH0: u1,
    +        }), base_address + 0xc);
    +
    +        /// address: 0x60019010
    +        /// LEDC_LSCH0_DUTY_R.
    +        pub const LSCH0_DUTY_R = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_duty_lsch0_r.
    +            DUTY_LSCH0_R: u19,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +        }), base_address + 0x10);
    +
    +        /// address: 0x60019014
    +        /// LEDC_LSCH1_CONF0.
    +        pub const LSCH1_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_timer_sel_lsch1.
    +            TIMER_SEL_LSCH1: u2,
    +            /// reg_sig_out_en_lsch1.
    +            SIG_OUT_EN_LSCH1: u1,
    +            /// reg_idle_lv_lsch1.
    +            IDLE_LV_LSCH1: u1,
    +            /// reg_para_up_lsch1.
    +            PARA_UP_LSCH1: u1,
    +            /// reg_ovf_num_lsch1.
    +            OVF_NUM_LSCH1: u10,
    +            /// reg_ovf_cnt_en_lsch1.
    +            OVF_CNT_EN_LSCH1: u1,
    +            /// reg_ovf_cnt_reset_lsch1.
    +            OVF_CNT_RESET_LSCH1: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +        }), base_address + 0x14);
    +
    +        /// address: 0x60019018
    +        /// LEDC_LSCH1_HPOINT.
    +        pub const LSCH1_HPOINT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_hpoint_lsch1.
    +            HPOINT_LSCH1: u14,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +        }), base_address + 0x18);
    +
    +        /// address: 0x6001901c
    +        /// LEDC_LSCH1_DUTY.
    +        pub const LSCH1_DUTY = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_duty_lsch1.
    +            DUTY_LSCH1: u19,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +        }), base_address + 0x1c);
    +
    +        /// address: 0x60019020
    +        /// LEDC_LSCH1_CONF1.
    +        pub const LSCH1_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_duty_scale_lsch1.
    +            DUTY_SCALE_LSCH1: u10,
    +            /// reg_duty_cycle_lsch1.
    +            DUTY_CYCLE_LSCH1: u10,
    +            /// reg_duty_num_lsch1.
    +            DUTY_NUM_LSCH1: u10,
    +            /// reg_duty_inc_lsch1.
    +            DUTY_INC_LSCH1: u1,
    +            /// reg_duty_start_lsch1.
    +            DUTY_START_LSCH1: u1,
    +        }), base_address + 0x20);
    +
    +        /// address: 0x60019024
    +        /// LEDC_LSCH1_DUTY_R.
    +        pub const LSCH1_DUTY_R = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_duty_lsch1_r.
    +            DUTY_LSCH1_R: u19,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +        }), base_address + 0x24);
    +
    +        /// address: 0x60019028
    +        /// LEDC_LSCH2_CONF0.
    +        pub const LSCH2_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_timer_sel_lsch2.
    +            TIMER_SEL_LSCH2: u2,
    +            /// reg_sig_out_en_lsch2.
    +            SIG_OUT_EN_LSCH2: u1,
    +            /// reg_idle_lv_lsch2.
    +            IDLE_LV_LSCH2: u1,
    +            /// reg_para_up_lsch2.
    +            PARA_UP_LSCH2: u1,
    +            /// reg_ovf_num_lsch2.
    +            OVF_NUM_LSCH2: u10,
    +            /// reg_ovf_cnt_en_lsch2.
    +            OVF_CNT_EN_LSCH2: u1,
    +            /// reg_ovf_cnt_reset_lsch2.
    +            OVF_CNT_RESET_LSCH2: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +        }), base_address + 0x28);
    +
    +        /// address: 0x6001902c
    +        /// LEDC_LSCH2_HPOINT.
    +        pub const LSCH2_HPOINT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_hpoint_lsch2.
    +            HPOINT_LSCH2: u14,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +        }), base_address + 0x2c);
    +
    +        /// address: 0x60019030
    +        /// LEDC_LSCH2_DUTY.
    +        pub const LSCH2_DUTY = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_duty_lsch2.
    +            DUTY_LSCH2: u19,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +        }), base_address + 0x30);
    +
    +        /// address: 0x60019034
    +        /// LEDC_LSCH2_CONF1.
    +        pub const LSCH2_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_duty_scale_lsch2.
    +            DUTY_SCALE_LSCH2: u10,
    +            /// reg_duty_cycle_lsch2.
    +            DUTY_CYCLE_LSCH2: u10,
    +            /// reg_duty_num_lsch2.
    +            DUTY_NUM_LSCH2: u10,
    +            /// reg_duty_inc_lsch2.
    +            DUTY_INC_LSCH2: u1,
    +            /// reg_duty_start_lsch2.
    +            DUTY_START_LSCH2: u1,
    +        }), base_address + 0x34);
    +
    +        /// address: 0x60019038
    +        /// LEDC_LSCH2_DUTY_R.
    +        pub const LSCH2_DUTY_R = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_duty_lsch2_r.
    +            DUTY_LSCH2_R: u19,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +        }), base_address + 0x38);
    +
    +        /// address: 0x6001903c
    +        /// LEDC_LSCH3_CONF0.
    +        pub const LSCH3_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_timer_sel_lsch3.
    +            TIMER_SEL_LSCH3: u2,
    +            /// reg_sig_out_en_lsch3.
    +            SIG_OUT_EN_LSCH3: u1,
    +            /// reg_idle_lv_lsch3.
    +            IDLE_LV_LSCH3: u1,
    +            /// reg_para_up_lsch3.
    +            PARA_UP_LSCH3: u1,
    +            /// reg_ovf_num_lsch3.
    +            OVF_NUM_LSCH3: u10,
    +            /// reg_ovf_cnt_en_lsch3.
    +            OVF_CNT_EN_LSCH3: u1,
    +            /// reg_ovf_cnt_reset_lsch3.
    +            OVF_CNT_RESET_LSCH3: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +        }), base_address + 0x3c);
    +
    +        /// address: 0x60019040
    +        /// LEDC_LSCH3_HPOINT.
    +        pub const LSCH3_HPOINT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_hpoint_lsch3.
    +            HPOINT_LSCH3: u14,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +        }), base_address + 0x40);
    +
    +        /// address: 0x60019044
    +        /// LEDC_LSCH3_DUTY.
    +        pub const LSCH3_DUTY = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_duty_lsch3.
    +            DUTY_LSCH3: u19,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +        }), base_address + 0x44);
    +
    +        /// address: 0x60019048
    +        /// LEDC_LSCH3_CONF1.
    +        pub const LSCH3_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_duty_scale_lsch3.
    +            DUTY_SCALE_LSCH3: u10,
    +            /// reg_duty_cycle_lsch3.
    +            DUTY_CYCLE_LSCH3: u10,
    +            /// reg_duty_num_lsch3.
    +            DUTY_NUM_LSCH3: u10,
    +            /// reg_duty_inc_lsch3.
    +            DUTY_INC_LSCH3: u1,
    +            /// reg_duty_start_lsch3.
    +            DUTY_START_LSCH3: u1,
    +        }), base_address + 0x48);
    +
    +        /// address: 0x6001904c
    +        /// LEDC_LSCH3_DUTY_R.
    +        pub const LSCH3_DUTY_R = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_duty_lsch3_r.
    +            DUTY_LSCH3_R: u19,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +        }), base_address + 0x4c);
    +
    +        /// address: 0x60019050
    +        /// LEDC_LSCH4_CONF0.
    +        pub const LSCH4_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_timer_sel_lsch4.
    +            TIMER_SEL_LSCH4: u2,
    +            /// reg_sig_out_en_lsch4.
    +            SIG_OUT_EN_LSCH4: u1,
    +            /// reg_idle_lv_lsch4.
    +            IDLE_LV_LSCH4: u1,
    +            /// reg_para_up_lsch4.
    +            PARA_UP_LSCH4: u1,
    +            /// reg_ovf_num_lsch4.
    +            OVF_NUM_LSCH4: u10,
    +            /// reg_ovf_cnt_en_lsch4.
    +            OVF_CNT_EN_LSCH4: u1,
    +            /// reg_ovf_cnt_reset_lsch4.
    +            OVF_CNT_RESET_LSCH4: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +        }), base_address + 0x50);
    +
    +        /// address: 0x60019054
    +        /// LEDC_LSCH4_HPOINT.
    +        pub const LSCH4_HPOINT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_hpoint_lsch4.
    +            HPOINT_LSCH4: u14,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +        }), base_address + 0x54);
    +
    +        /// address: 0x60019058
    +        /// LEDC_LSCH4_DUTY.
    +        pub const LSCH4_DUTY = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_duty_lsch4.
    +            DUTY_LSCH4: u19,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +        }), base_address + 0x58);
    +
    +        /// address: 0x6001905c
    +        /// LEDC_LSCH4_CONF1.
    +        pub const LSCH4_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_duty_scale_lsch4.
    +            DUTY_SCALE_LSCH4: u10,
    +            /// reg_duty_cycle_lsch4.
    +            DUTY_CYCLE_LSCH4: u10,
    +            /// reg_duty_num_lsch4.
    +            DUTY_NUM_LSCH4: u10,
    +            /// reg_duty_inc_lsch4.
    +            DUTY_INC_LSCH4: u1,
    +            /// reg_duty_start_lsch4.
    +            DUTY_START_LSCH4: u1,
    +        }), base_address + 0x5c);
    +
    +        /// address: 0x60019060
    +        /// LEDC_LSCH4_DUTY_R.
    +        pub const LSCH4_DUTY_R = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_duty_lsch4_r.
    +            DUTY_LSCH4_R: u19,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +        }), base_address + 0x60);
    +
    +        /// address: 0x60019064
    +        /// LEDC_LSCH5_CONF0.
    +        pub const LSCH5_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_timer_sel_lsch5.
    +            TIMER_SEL_LSCH5: u2,
    +            /// reg_sig_out_en_lsch5.
    +            SIG_OUT_EN_LSCH5: u1,
    +            /// reg_idle_lv_lsch5.
    +            IDLE_LV_LSCH5: u1,
    +            /// reg_para_up_lsch5.
    +            PARA_UP_LSCH5: u1,
    +            /// reg_ovf_num_lsch5.
    +            OVF_NUM_LSCH5: u10,
    +            /// reg_ovf_cnt_en_lsch5.
    +            OVF_CNT_EN_LSCH5: u1,
    +            /// reg_ovf_cnt_reset_lsch5.
    +            OVF_CNT_RESET_LSCH5: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +        }), base_address + 0x64);
    +
    +        /// address: 0x60019068
    +        /// LEDC_LSCH5_HPOINT.
    +        pub const LSCH5_HPOINT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_hpoint_lsch5.
    +            HPOINT_LSCH5: u14,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +        }), base_address + 0x68);
    +
    +        /// address: 0x6001906c
    +        /// LEDC_LSCH5_DUTY.
    +        pub const LSCH5_DUTY = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_duty_lsch5.
    +            DUTY_LSCH5: u19,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +        }), base_address + 0x6c);
    +
    +        /// address: 0x60019070
    +        /// LEDC_LSCH5_CONF1.
    +        pub const LSCH5_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_duty_scale_lsch5.
    +            DUTY_SCALE_LSCH5: u10,
    +            /// reg_duty_cycle_lsch5.
    +            DUTY_CYCLE_LSCH5: u10,
    +            /// reg_duty_num_lsch5.
    +            DUTY_NUM_LSCH5: u10,
    +            /// reg_duty_inc_lsch5.
    +            DUTY_INC_LSCH5: u1,
    +            /// reg_duty_start_lsch5.
    +            DUTY_START_LSCH5: u1,
    +        }), base_address + 0x70);
    +
    +        /// address: 0x60019074
    +        /// LEDC_LSCH5_DUTY_R.
    +        pub const LSCH5_DUTY_R = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_duty_lsch5_r.
    +            DUTY_LSCH5_R: u19,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +        }), base_address + 0x74);
    +
    +        /// address: 0x600190a0
    +        /// LEDC_LSTIMER0_CONF.
    +        pub const LSTIMER0_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_lstimer0_duty_res.
    +            LSTIMER0_DUTY_RES: u4,
    +            /// reg_clk_div_lstimer0.
    +            CLK_DIV_LSTIMER0: u18,
    +            /// reg_lstimer0_pause.
    +            LSTIMER0_PAUSE: u1,
    +            /// reg_lstimer0_rst.
    +            LSTIMER0_RST: u1,
    +            /// reg_tick_sel_lstimer0.
    +            TICK_SEL_LSTIMER0: u1,
    +            /// reg_lstimer0_para_up.
    +            LSTIMER0_PARA_UP: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +        }), base_address + 0xa0);
    +
    +        /// address: 0x600190a4
    +        /// LEDC_LSTIMER0_VALUE.
    +        pub const LSTIMER0_VALUE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_lstimer0_cnt.
    +            LSTIMER0_CNT: u14,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +        }), base_address + 0xa4);
    +
    +        /// address: 0x600190a8
    +        /// LEDC_LSTIMER1_CONF.
    +        pub const LSTIMER1_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_lstimer1_duty_res.
    +            LSTIMER1_DUTY_RES: u4,
    +            /// reg_clk_div_lstimer1.
    +            CLK_DIV_LSTIMER1: u18,
    +            /// reg_lstimer1_pause.
    +            LSTIMER1_PAUSE: u1,
    +            /// reg_lstimer1_rst.
    +            LSTIMER1_RST: u1,
    +            /// reg_tick_sel_lstimer1.
    +            TICK_SEL_LSTIMER1: u1,
    +            /// reg_lstimer1_para_up.
    +            LSTIMER1_PARA_UP: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +        }), base_address + 0xa8);
    +
    +        /// address: 0x600190ac
    +        /// LEDC_LSTIMER1_VALUE.
    +        pub const LSTIMER1_VALUE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_lstimer1_cnt.
    +            LSTIMER1_CNT: u14,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +        }), base_address + 0xac);
    +
    +        /// address: 0x600190b0
    +        /// LEDC_LSTIMER2_CONF.
    +        pub const LSTIMER2_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_lstimer2_duty_res.
    +            LSTIMER2_DUTY_RES: u4,
    +            /// reg_clk_div_lstimer2.
    +            CLK_DIV_LSTIMER2: u18,
    +            /// reg_lstimer2_pause.
    +            LSTIMER2_PAUSE: u1,
    +            /// reg_lstimer2_rst.
    +            LSTIMER2_RST: u1,
    +            /// reg_tick_sel_lstimer2.
    +            TICK_SEL_LSTIMER2: u1,
    +            /// reg_lstimer2_para_up.
    +            LSTIMER2_PARA_UP: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +        }), base_address + 0xb0);
    +
    +        /// address: 0x600190b4
    +        /// LEDC_LSTIMER2_VALUE.
    +        pub const LSTIMER2_VALUE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_lstimer2_cnt.
    +            LSTIMER2_CNT: u14,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +        }), base_address + 0xb4);
    +
    +        /// address: 0x600190b8
    +        /// LEDC_LSTIMER3_CONF.
    +        pub const LSTIMER3_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_lstimer3_duty_res.
    +            LSTIMER3_DUTY_RES: u4,
    +            /// reg_clk_div_lstimer3.
    +            CLK_DIV_LSTIMER3: u18,
    +            /// reg_lstimer3_pause.
    +            LSTIMER3_PAUSE: u1,
    +            /// reg_lstimer3_rst.
    +            LSTIMER3_RST: u1,
    +            /// reg_tick_sel_lstimer3.
    +            TICK_SEL_LSTIMER3: u1,
    +            /// reg_lstimer3_para_up.
    +            LSTIMER3_PARA_UP: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +        }), base_address + 0xb8);
    +
    +        /// address: 0x600190bc
    +        /// LEDC_LSTIMER3_VALUE.
    +        pub const LSTIMER3_VALUE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_lstimer3_cnt.
    +            LSTIMER3_CNT: u14,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +        }), base_address + 0xbc);
    +
    +        /// address: 0x600190c0
    +        /// LEDC_INT_RAW.
    +        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_lstimer0_ovf_int_raw.
    +            LSTIMER0_OVF_INT_RAW: u1,
    +            /// reg_lstimer1_ovf_int_raw.
    +            LSTIMER1_OVF_INT_RAW: u1,
    +            /// reg_lstimer2_ovf_int_raw.
    +            LSTIMER2_OVF_INT_RAW: u1,
    +            /// reg_lstimer3_ovf_int_raw.
    +            LSTIMER3_OVF_INT_RAW: u1,
    +            /// reg_duty_chng_end_lsch0_int_raw.
    +            DUTY_CHNG_END_LSCH0_INT_RAW: u1,
    +            /// reg_duty_chng_end_lsch1_int_raw.
    +            DUTY_CHNG_END_LSCH1_INT_RAW: u1,
    +            /// reg_duty_chng_end_lsch2_int_raw.
    +            DUTY_CHNG_END_LSCH2_INT_RAW: u1,
    +            /// reg_duty_chng_end_lsch3_int_raw.
    +            DUTY_CHNG_END_LSCH3_INT_RAW: u1,
    +            /// reg_duty_chng_end_lsch4_int_raw.
    +            DUTY_CHNG_END_LSCH4_INT_RAW: u1,
    +            /// reg_duty_chng_end_lsch5_int_raw.
    +            DUTY_CHNG_END_LSCH5_INT_RAW: u1,
    +            /// reg_ovf_cnt_lsch0_int_raw.
    +            OVF_CNT_LSCH0_INT_RAW: u1,
    +            /// reg_ovf_cnt_lsch1_int_raw.
    +            OVF_CNT_LSCH1_INT_RAW: u1,
    +            /// reg_ovf_cnt_lsch2_int_raw.
    +            OVF_CNT_LSCH2_INT_RAW: u1,
    +            /// reg_ovf_cnt_lsch3_int_raw.
    +            OVF_CNT_LSCH3_INT_RAW: u1,
    +            /// reg_ovf_cnt_lsch4_int_raw.
    +            OVF_CNT_LSCH4_INT_RAW: u1,
    +            /// reg_ovf_cnt_lsch5_int_raw.
    +            OVF_CNT_LSCH5_INT_RAW: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0xc0);
    +
    +        /// address: 0x600190c4
    +        /// LEDC_INT_ST.
    +        pub const INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_lstimer0_ovf_int_st.
    +            LSTIMER0_OVF_INT_ST: u1,
    +            /// reg_lstimer1_ovf_int_st.
    +            LSTIMER1_OVF_INT_ST: u1,
    +            /// reg_lstimer2_ovf_int_st.
    +            LSTIMER2_OVF_INT_ST: u1,
    +            /// reg_lstimer3_ovf_int_st.
    +            LSTIMER3_OVF_INT_ST: u1,
    +            /// reg_duty_chng_end_lsch0_int_st.
    +            DUTY_CHNG_END_LSCH0_INT_ST: u1,
    +            /// reg_duty_chng_end_lsch1_int_st.
    +            DUTY_CHNG_END_LSCH1_INT_ST: u1,
    +            /// reg_duty_chng_end_lsch2_int_st.
    +            DUTY_CHNG_END_LSCH2_INT_ST: u1,
    +            /// reg_duty_chng_end_lsch3_int_st.
    +            DUTY_CHNG_END_LSCH3_INT_ST: u1,
    +            /// reg_duty_chng_end_lsch4_int_st.
    +            DUTY_CHNG_END_LSCH4_INT_ST: u1,
    +            /// reg_duty_chng_end_lsch5_int_st.
    +            DUTY_CHNG_END_LSCH5_INT_ST: u1,
    +            /// reg_ovf_cnt_lsch0_int_st.
    +            OVF_CNT_LSCH0_INT_ST: u1,
    +            /// reg_ovf_cnt_lsch1_int_st.
    +            OVF_CNT_LSCH1_INT_ST: u1,
    +            /// reg_ovf_cnt_lsch2_int_st.
    +            OVF_CNT_LSCH2_INT_ST: u1,
    +            /// reg_ovf_cnt_lsch3_int_st.
    +            OVF_CNT_LSCH3_INT_ST: u1,
    +            /// reg_ovf_cnt_lsch4_int_st.
    +            OVF_CNT_LSCH4_INT_ST: u1,
    +            /// reg_ovf_cnt_lsch5_int_st.
    +            OVF_CNT_LSCH5_INT_ST: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0xc4);
    +
    +        /// address: 0x600190c8
    +        /// LEDC_INT_ENA.
    +        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_lstimer0_ovf_int_ena.
    +            LSTIMER0_OVF_INT_ENA: u1,
    +            /// reg_lstimer1_ovf_int_ena.
    +            LSTIMER1_OVF_INT_ENA: u1,
    +            /// reg_lstimer2_ovf_int_ena.
    +            LSTIMER2_OVF_INT_ENA: u1,
    +            /// reg_lstimer3_ovf_int_ena.
    +            LSTIMER3_OVF_INT_ENA: u1,
    +            /// reg_duty_chng_end_lsch0_int_ena.
    +            DUTY_CHNG_END_LSCH0_INT_ENA: u1,
    +            /// reg_duty_chng_end_lsch1_int_ena.
    +            DUTY_CHNG_END_LSCH1_INT_ENA: u1,
    +            /// reg_duty_chng_end_lsch2_int_ena.
    +            DUTY_CHNG_END_LSCH2_INT_ENA: u1,
    +            /// reg_duty_chng_end_lsch3_int_ena.
    +            DUTY_CHNG_END_LSCH3_INT_ENA: u1,
    +            /// reg_duty_chng_end_lsch4_int_ena.
    +            DUTY_CHNG_END_LSCH4_INT_ENA: u1,
    +            /// reg_duty_chng_end_lsch5_int_ena.
    +            DUTY_CHNG_END_LSCH5_INT_ENA: u1,
    +            /// reg_ovf_cnt_lsch0_int_ena.
    +            OVF_CNT_LSCH0_INT_ENA: u1,
    +            /// reg_ovf_cnt_lsch1_int_ena.
    +            OVF_CNT_LSCH1_INT_ENA: u1,
    +            /// reg_ovf_cnt_lsch2_int_ena.
    +            OVF_CNT_LSCH2_INT_ENA: u1,
    +            /// reg_ovf_cnt_lsch3_int_ena.
    +            OVF_CNT_LSCH3_INT_ENA: u1,
    +            /// reg_ovf_cnt_lsch4_int_ena.
    +            OVF_CNT_LSCH4_INT_ENA: u1,
    +            /// reg_ovf_cnt_lsch5_int_ena.
    +            OVF_CNT_LSCH5_INT_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0xc8);
    +
    +        /// address: 0x600190cc
    +        /// LEDC_INT_CLR.
    +        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_lstimer0_ovf_int_clr.
    +            LSTIMER0_OVF_INT_CLR: u1,
    +            /// reg_lstimer1_ovf_int_clr.
    +            LSTIMER1_OVF_INT_CLR: u1,
    +            /// reg_lstimer2_ovf_int_clr.
    +            LSTIMER2_OVF_INT_CLR: u1,
    +            /// reg_lstimer3_ovf_int_clr.
    +            LSTIMER3_OVF_INT_CLR: u1,
    +            /// reg_duty_chng_end_lsch0_int_clr.
    +            DUTY_CHNG_END_LSCH0_INT_CLR: u1,
    +            /// reg_duty_chng_end_lsch1_int_clr.
    +            DUTY_CHNG_END_LSCH1_INT_CLR: u1,
    +            /// reg_duty_chng_end_lsch2_int_clr.
    +            DUTY_CHNG_END_LSCH2_INT_CLR: u1,
    +            /// reg_duty_chng_end_lsch3_int_clr.
    +            DUTY_CHNG_END_LSCH3_INT_CLR: u1,
    +            /// reg_duty_chng_end_lsch4_int_clr.
    +            DUTY_CHNG_END_LSCH4_INT_CLR: u1,
    +            /// reg_duty_chng_end_lsch5_int_clr.
    +            DUTY_CHNG_END_LSCH5_INT_CLR: u1,
    +            /// reg_ovf_cnt_lsch0_int_clr.
    +            OVF_CNT_LSCH0_INT_CLR: u1,
    +            /// reg_ovf_cnt_lsch1_int_clr.
    +            OVF_CNT_LSCH1_INT_CLR: u1,
    +            /// reg_ovf_cnt_lsch2_int_clr.
    +            OVF_CNT_LSCH2_INT_CLR: u1,
    +            /// reg_ovf_cnt_lsch3_int_clr.
    +            OVF_CNT_LSCH3_INT_CLR: u1,
    +            /// reg_ovf_cnt_lsch4_int_clr.
    +            OVF_CNT_LSCH4_INT_CLR: u1,
    +            /// reg_ovf_cnt_lsch5_int_clr.
    +            OVF_CNT_LSCH5_INT_CLR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0xcc);
    +
    +        /// address: 0x600190d0
    +        /// LEDC_CONF.
    +        pub const CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_apb_clk_sel.
    +            APB_CLK_SEL: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            reserved23: u1,
    +            reserved24: u1,
    +            reserved25: u1,
    +            reserved26: u1,
    +            reserved27: u1,
    +            reserved28: u1,
    +            /// reg_clk_en.
    +            CLK_EN: u1,
    +        }), base_address + 0xd0);
    +
    +        /// address: 0x600190fc
    +        /// LEDC_DATE.
    +        pub const DATE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_ledc_date.
    +            LEDC_DATE: u32,
    +        }), base_address + 0xfc);
    +    };
    +
    +    /// Remote Control Peripheral
    +    pub const RMT = struct {
    +        pub const base_address = 0x60016000;
    +
    +        /// address: 0x60016000
    +        /// RMT_CH0DATA_REG.
    +        pub const CH0DATA = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Reserved.
    +            DATA: u32,
    +        }), base_address + 0x0);
    +
    +        /// address: 0x60016004
    +        /// RMT_CH1DATA_REG.
    +        pub const CH1DATA = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Reserved.
    +            DATA: u32,
    +        }), base_address + 0x4);
    +
    +        /// address: 0x60016008
    +        /// RMT_CH2DATA_REG.
    +        pub const CH2DATA = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Reserved.
    +            DATA: u32,
    +        }), base_address + 0x8);
    +
    +        /// address: 0x6001600c
    +        /// RMT_CH3DATA_REG.
    +        pub const CH3DATA = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Reserved.
    +            DATA: u32,
    +        }), base_address + 0xc);
    +
    +        /// address: 0x60016010
    +        /// RMT_CH%sCONF%s_REG.
    +        pub const CH0_TX_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_tx_start_ch0.
    +            TX_START: u1,
    +            /// reg_mem_rd_rst_ch0.
    +            MEM_RD_RST: u1,
    +            /// reg_apb_mem_rst_ch0.
    +            APB_MEM_RST: u1,
    +            /// reg_tx_conti_mode_ch0.
    +            TX_CONTI_MODE: u1,
    +            /// reg_mem_tx_wrap_en_ch0.
    +            MEM_TX_WRAP_EN: u1,
    +            /// reg_idle_out_lv_ch0.
    +            IDLE_OUT_LV: u1,
    +            /// reg_idle_out_en_ch0.
    +            IDLE_OUT_EN: u1,
    +            /// reg_tx_stop_ch0.
    +            TX_STOP: u1,
    +            /// reg_div_cnt_ch0.
    +            DIV_CNT: u8,
    +            /// reg_mem_size_ch0.
    +            MEM_SIZE: u3,
    +            reserved0: u1,
    +            /// reg_carrier_eff_en_ch0.
    +            CARRIER_EFF_EN: u1,
    +            /// reg_carrier_en_ch0.
    +            CARRIER_EN: u1,
    +            /// reg_carrier_out_lv_ch0.
    +            CARRIER_OUT_LV: u1,
    +            /// reg_afifo_rst_ch0.
    +            AFIFO_RST: u1,
    +            /// reg_reg_conf_update_ch0.
    +            CONF_UPDATE: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +        }), base_address + 0x10);
    +
    +        /// address: 0x60016014
    +        /// RMT_CH%sCONF%s_REG.
    +        pub const CH1_TX_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_tx_start_ch0.
    +            TX_START: u1,
    +            /// reg_mem_rd_rst_ch0.
    +            MEM_RD_RST: u1,
    +            /// reg_apb_mem_rst_ch0.
    +            APB_MEM_RST: u1,
    +            /// reg_tx_conti_mode_ch0.
    +            TX_CONTI_MODE: u1,
    +            /// reg_mem_tx_wrap_en_ch0.
    +            MEM_TX_WRAP_EN: u1,
    +            /// reg_idle_out_lv_ch0.
    +            IDLE_OUT_LV: u1,
    +            /// reg_idle_out_en_ch0.
    +            IDLE_OUT_EN: u1,
    +            /// reg_tx_stop_ch0.
    +            TX_STOP: u1,
    +            /// reg_div_cnt_ch0.
    +            DIV_CNT: u8,
    +            /// reg_mem_size_ch0.
    +            MEM_SIZE: u3,
    +            reserved0: u1,
    +            /// reg_carrier_eff_en_ch0.
    +            CARRIER_EFF_EN: u1,
    +            /// reg_carrier_en_ch0.
    +            CARRIER_EN: u1,
    +            /// reg_carrier_out_lv_ch0.
    +            CARRIER_OUT_LV: u1,
    +            /// reg_afifo_rst_ch0.
    +            AFIFO_RST: u1,
    +            /// reg_reg_conf_update_ch0.
    +            CONF_UPDATE: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +        }), base_address + 0x14);
    +
    +        /// address: 0x60016018
    +        /// RMT_CH2CONF0_REG.
    +        pub const CH2_RX_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_div_cnt_ch2.
    +            DIV_CNT: u8,
    +            /// reg_idle_thres_ch2.
    +            IDLE_THRES: u15,
    +            /// reg_mem_size_ch2.
    +            MEM_SIZE: u3,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// reg_carrier_en_ch2.
    +            CARRIER_EN: u1,
    +            /// reg_carrier_out_lv_ch2.
    +            CARRIER_OUT_LV: u1,
    +            padding0: u1,
    +            padding1: u1,
    +        }), base_address + 0x18);
    +
    +        /// address: 0x60016020
    +        /// RMT_CH2CONF0_REG.
    +        pub const CH3_RX_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_div_cnt_ch2.
    +            DIV_CNT: u8,
    +            /// reg_idle_thres_ch2.
    +            IDLE_THRES: u15,
    +            /// reg_mem_size_ch2.
    +            MEM_SIZE: u3,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// reg_carrier_en_ch2.
    +            CARRIER_EN: u1,
    +            /// reg_carrier_out_lv_ch2.
    +            CARRIER_OUT_LV: u1,
    +            padding0: u1,
    +            padding1: u1,
    +        }), base_address + 0x20);
    +
    +        /// address: 0x6001601c
    +        /// RMT_CH2CONF1_REG.
    +        pub const CH2CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_rx_en_ch2.
    +            RX_EN: u1,
    +            /// reg_mem_wr_rst_ch2.
    +            MEM_WR_RST: u1,
    +            /// reg_apb_mem_rst_ch2.
    +            APB_MEM_RST: u1,
    +            /// reg_mem_owner_ch2.
    +            MEM_OWNER: u1,
    +            /// reg_rx_filter_en_ch2.
    +            RX_FILTER_EN: u1,
    +            /// reg_rx_filter_thres_ch2.
    +            RX_FILTER_THRES: u8,
    +            /// reg_mem_rx_wrap_en_ch2.
    +            MEM_RX_WRAP_EN: u1,
    +            /// reg_afifo_rst_ch2.
    +            AFIFO_RST: u1,
    +            /// reg_conf_update_ch2.
    +            CONF_UPDATE: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x1c);
    +
    +        /// address: 0x60016024
    +        /// RMT_CH3CONF1_REG.
    +        pub const CH3CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_rx_en_ch3.
    +            RX_EN: u1,
    +            /// reg_mem_wr_rst_ch3.
    +            MEM_WR_RST: u1,
    +            /// reg_apb_mem_rst_ch3.
    +            APB_MEM_RST: u1,
    +            /// reg_mem_owner_ch3.
    +            MEM_OWNER: u1,
    +            /// reg_rx_filter_en_ch3.
    +            RX_FILTER_EN: u1,
    +            /// reg_rx_filter_thres_ch3.
    +            RX_FILTER_THRES: u8,
    +            /// reg_mem_rx_wrap_en_ch3.
    +            MEM_RX_WRAP_EN: u1,
    +            /// reg_afifo_rst_ch3.
    +            AFIFO_RST: u1,
    +            /// reg_conf_update_ch3.
    +            CONF_UPDATE: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x24);
    +
    +        /// address: 0x60016028
    +        /// RMT_CH0STATUS_REG.
    +        pub const CH0STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_mem_raddr_ex_ch0.
    +            MEM_RADDR_EX: u9,
    +            /// reg_state_ch0.
    +            STATE: u3,
    +            /// reg_apb_mem_waddr_ch0.
    +            APB_MEM_WADDR: u9,
    +            /// reg_apb_mem_rd_err_ch0.
    +            APB_MEM_RD_ERR: u1,
    +            /// reg_mem_empty_ch0.
    +            MEM_EMPTY: u1,
    +            /// reg_apb_mem_wr_err_ch0.
    +            APB_MEM_WR_ERR: u1,
    +            /// reg_apb_mem_raddr_ch0.
    +            APB_MEM_RADDR: u8,
    +        }), base_address + 0x28);
    +
    +        /// address: 0x6001602c
    +        /// RMT_CH1STATUS_REG.
    +        pub const CH1STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_mem_raddr_ex_ch1.
    +            MEM_RADDR_EX: u9,
    +            /// reg_state_ch1.
    +            STATE: u3,
    +            /// reg_apb_mem_waddr_ch1.
    +            APB_MEM_WADDR: u9,
    +            /// reg_apb_mem_rd_err_ch1.
    +            APB_MEM_RD_ERR: u1,
    +            /// reg_mem_empty_ch1.
    +            MEM_EMPTY: u1,
    +            /// reg_apb_mem_wr_err_ch1.
    +            APB_MEM_WR_ERR: u1,
    +            /// reg_apb_mem_raddr_ch1.
    +            APB_MEM_RADDR: u8,
    +        }), base_address + 0x2c);
    +
    +        /// address: 0x60016030
    +        /// RMT_CH2STATUS_REG.
    +        pub const CH2STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_mem_waddr_ex_ch2.
    +            MEM_WADDR_EX: u9,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            /// reg_apb_mem_raddr_ch2.
    +            APB_MEM_RADDR: u9,
    +            reserved3: u1,
    +            /// reg_state_ch2.
    +            STATE: u3,
    +            /// reg_mem_owner_err_ch2.
    +            MEM_OWNER_ERR: u1,
    +            /// reg_mem_full_ch2.
    +            MEM_FULL: u1,
    +            /// reg_apb_mem_rd_err_ch2.
    +            APB_MEM_RD_ERR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +        }), base_address + 0x30);
    +
    +        /// address: 0x60016034
    +        /// RMT_CH3STATUS_REG.
    +        pub const CH3STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_mem_waddr_ex_ch3.
    +            MEM_WADDR_EX: u9,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            /// reg_apb_mem_raddr_ch3.
    +            APB_MEM_RADDR: u9,
    +            reserved3: u1,
    +            /// reg_state_ch3.
    +            STATE: u3,
    +            /// reg_mem_owner_err_ch3.
    +            MEM_OWNER_ERR: u1,
    +            /// reg_mem_full_ch3.
    +            MEM_FULL: u1,
    +            /// reg_apb_mem_rd_err_ch3.
    +            APB_MEM_RD_ERR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +        }), base_address + 0x34);
    +
    +        /// address: 0x60016038
    +        /// RMT_INT_RAW_REG.
    +        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    +            CH0_TX_END_INT_RAW: u1,
    +            CH1_TX_END_INT_RAW: u1,
    +            CH2_RX_END_INT_RAW: u1,
    +            CH3_RX_END_INT_RAW: u1,
    +            CH0_TX_ERR_INT_RAW: u1,
    +            CH1_TX_ERR_INT_RAW: u1,
    +            CH2_RX_ERR_INT_RAW: u1,
    +            CH3_RX_ERR_INT_RAW: u1,
    +            CH0_TX_THR_EVENT_INT_RAW: u1,
    +            CH1_TX_THR_EVENT_INT_RAW: u1,
    +            /// reg_ch2_rx_thr_event_int_raw.
    +            CH2_RX_THR_EVENT_INT_RAW: u1,
    +            /// reg_ch3_rx_thr_event_int_raw.
    +            CH3_RX_THR_EVENT_INT_RAW: u1,
    +            CH0_TX_LOOP_INT_RAW: u1,
    +            CH1_TX_LOOP_INT_RAW: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +        }), base_address + 0x38);
    +
    +        /// address: 0x6001603c
    +        /// RMT_INT_ST_REG.
    +        pub const INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            CH0_TX_END_INT_ST: u1,
    +            CH1_TX_END_INT_ST: u1,
    +            CH2_RX_END_INT_ST: u1,
    +            CH3_RX_END_INT_ST: u1,
    +            CH0_TX_ERR_INT_ST: u1,
    +            CH1_TX_ERR_INT_ST: u1,
    +            CH2_RX_ERR_INT_ST: u1,
    +            CH3_RX_ERR_INT_ST: u1,
    +            CH0_TX_THR_EVENT_INT_ST: u1,
    +            CH1_TX_THR_EVENT_INT_ST: u1,
    +            /// reg_ch2_rx_thr_event_int_st.
    +            CH2_RX_THR_EVENT_INT_ST: u1,
    +            /// reg_ch3_rx_thr_event_int_st.
    +            CH3_RX_THR_EVENT_INT_ST: u1,
    +            CH0_TX_LOOP_INT_ST: u1,
    +            CH1_TX_LOOP_INT_ST: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +        }), base_address + 0x3c);
    +
    +        /// address: 0x60016040
    +        /// RMT_INT_ENA_REG.
    +        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    +            CH0_TX_END_INT_ENA: u1,
    +            CH1_TX_END_INT_ENA: u1,
    +            CH2_RX_END_INT_ENA: u1,
    +            CH3_RX_END_INT_ENA: u1,
    +            CH0_TX_ERR_INT_ENA: u1,
    +            CH1_TX_ERR_INT_ENA: u1,
    +            CH2_RX_ERR_INT_ENA: u1,
    +            CH3_RX_ERR_INT_ENA: u1,
    +            CH0_TX_THR_EVENT_INT_ENA: u1,
    +            CH1_TX_THR_EVENT_INT_ENA: u1,
    +            /// reg_ch2_rx_thr_event_int_ena.
    +            CH2_RX_THR_EVENT_INT_ENA: u1,
    +            /// reg_ch3_rx_thr_event_int_ena.
    +            CH3_RX_THR_EVENT_INT_ENA: u1,
    +            CH0_TX_LOOP_INT_ENA: u1,
    +            CH1_TX_LOOP_INT_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +        }), base_address + 0x40);
    +
    +        /// address: 0x60016044
    +        /// RMT_INT_CLR_REG.
    +        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    +            CH0_TX_END_INT_CLR: u1,
    +            CH1_TX_END_INT_CLR: u1,
    +            CH2_RX_END_INT_CLR: u1,
    +            CH3_RX_END_INT_CLR: u1,
    +            CH0_TX_ERR_INT_CLR: u1,
    +            CH1_TX_ERR_INT_CLR: u1,
    +            CH2_RX_ERR_INT_CLR: u1,
    +            CH3_RX_ERR_INT_CLR: u1,
    +            CH0_TX_THR_EVENT_INT_CLR: u1,
    +            CH1_TX_THR_EVENT_INT_CLR: u1,
    +            /// reg_ch2_rx_thr_event_int_clr.
    +            CH2_RX_THR_EVENT_INT_CLR: u1,
    +            /// reg_ch3_rx_thr_event_int_clr.
    +            CH3_RX_THR_EVENT_INT_CLR: u1,
    +            CH0_TX_LOOP_INT_CLR: u1,
    +            CH1_TX_LOOP_INT_CLR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +        }), base_address + 0x44);
    +
    +        /// address: 0x60016048
    +        /// RMT_CH0CARRIER_DUTY_REG.
    +        pub const CH0CARRIER_DUTY = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_carrier_low_ch0.
    +            CARRIER_LOW: u16,
    +            /// reg_carrier_high_ch0.
    +            CARRIER_HIGH: u16,
    +        }), base_address + 0x48);
    +
    +        /// address: 0x6001604c
    +        /// RMT_CH1CARRIER_DUTY_REG.
    +        pub const CH1CARRIER_DUTY = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_carrier_low_ch1.
    +            CARRIER_LOW: u16,
    +            /// reg_carrier_high_ch1.
    +            CARRIER_HIGH: u16,
    +        }), base_address + 0x4c);
    +
    +        /// address: 0x60016050
    +        /// RMT_CH2_RX_CARRIER_RM_REG.
    +        pub const CH2_RX_CARRIER_RM = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_carrier_low_thres_ch2.
    +            CARRIER_LOW_THRES: u16,
    +            /// reg_carrier_high_thres_ch2.
    +            CARRIER_HIGH_THRES: u16,
    +        }), base_address + 0x50);
    +
    +        /// address: 0x60016054
    +        /// RMT_CH3_RX_CARRIER_RM_REG.
    +        pub const CH3_RX_CARRIER_RM = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_carrier_low_thres_ch3.
    +            CARRIER_LOW_THRES: u16,
    +            /// reg_carrier_high_thres_ch3.
    +            CARRIER_HIGH_THRES: u16,
    +        }), base_address + 0x54);
    +
    +        /// address: 0x60016058
    +        /// RMT_CH%s_TX_LIM_REG.
    +        pub const CH0_TX_LIM = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_rmt_tx_lim_ch0.
    +            TX_LIM: u9,
    +            /// reg_rmt_tx_loop_num_ch0.
    +            TX_LOOP_NUM: u10,
    +            /// reg_rmt_tx_loop_cnt_en_ch0.
    +            TX_LOOP_CNT_EN: u1,
    +            /// reg_loop_count_reset_ch0.
    +            LOOP_COUNT_RESET: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +        }), base_address + 0x58);
    +
    +        /// address: 0x6001605c
    +        /// RMT_CH%s_TX_LIM_REG.
    +        pub const CH1_TX_LIM = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_rmt_tx_lim_ch0.
    +            TX_LIM: u9,
    +            /// reg_rmt_tx_loop_num_ch0.
    +            TX_LOOP_NUM: u10,
    +            /// reg_rmt_tx_loop_cnt_en_ch0.
    +            TX_LOOP_CNT_EN: u1,
    +            /// reg_loop_count_reset_ch0.
    +            LOOP_COUNT_RESET: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +        }), base_address + 0x5c);
    +
    +        /// address: 0x60016060
    +        /// RMT_CH2_RX_LIM_REG.
    +        pub const CH2_RX_LIM = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_rmt_rx_lim_ch2.
    +            RX_LIM: u9,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +        }), base_address + 0x60);
    +
    +        /// address: 0x60016064
    +        /// RMT_CH2_RX_LIM_REG.
    +        pub const CH3_RX_LIM = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_rmt_rx_lim_ch2.
    +            RX_LIM: u9,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +        }), base_address + 0x64);
    +
    +        /// address: 0x60016068
    +        /// RMT_SYS_CONF_REG.
    +        pub const SYS_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_apb_fifo_mask.
    +            APB_FIFO_MASK: u1,
    +            /// reg_mem_clk_force_on.
    +            MEM_CLK_FORCE_ON: u1,
    +            /// reg_rmt_mem_force_pd.
    +            MEM_FORCE_PD: u1,
    +            /// reg_rmt_mem_force_pu.
    +            MEM_FORCE_PU: u1,
    +            /// reg_rmt_sclk_div_num.
    +            SCLK_DIV_NUM: u8,
    +            /// reg_rmt_sclk_div_a.
    +            SCLK_DIV_A: u6,
    +            /// reg_rmt_sclk_div_b.
    +            SCLK_DIV_B: u6,
    +            /// reg_rmt_sclk_sel.
    +            SCLK_SEL: u2,
    +            /// reg_rmt_sclk_active.
    +            SCLK_ACTIVE: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            /// reg_clk_en.
    +            CLK_EN: u1,
    +        }), base_address + 0x68);
    +
    +        /// address: 0x6001606c
    +        /// RMT_TX_SIM_REG.
    +        pub const TX_SIM = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_rmt_tx_sim_ch0.
    +            TX_SIM_CH0: u1,
    +            /// reg_rmt_tx_sim_ch1.
    +            TX_SIM_CH1: u1,
    +            /// reg_rmt_tx_sim_en.
    +            TX_SIM_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +        }), base_address + 0x6c);
    +
    +        /// address: 0x60016070
    +        /// RMT_REF_CNT_RST_REG.
    +        pub const REF_CNT_RST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_ref_cnt_rst_ch0.
    +            CH0: u1,
    +            /// reg_ref_cnt_rst_ch1.
    +            CH1: u1,
    +            /// reg_ref_cnt_rst_ch2.
    +            CH2: u1,
    +            /// reg_ref_cnt_rst_ch3.
    +            CH3: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x70);
    +
    +        /// address: 0x600160cc
    +        /// RMT_DATE_REG.
    +        pub const DATE = @intToPtr(*volatile MmioInt(32, u28), base_address + 0xcc);
    +    };
    +
    +    /// Hardware random number generator
    +    pub const RNG = struct {
    +        pub const base_address = 0x60026000;
    +
    +        /// address: 0x600260b0
    +        /// Random number data
    +        pub const DATA = @intToPtr(*volatile u32, base_address + 0xb0);
    +    };
    +
    +    /// RSA (Rivest Shamir Adleman) Accelerator
    +    pub const RSA = struct {
    +        pub const base_address = 0x6003c000;
    +
    +        /// address: 0x6003c000
    +        /// The memory that stores M
    +        pub const M_MEM = @intToPtr(*volatile [16]u8, base_address + 0x0);
    +
    +        /// address: 0x6003c200
    +        /// The memory that stores Z
    +        pub const Z_MEM = @intToPtr(*volatile [16]u8, base_address + 0x200);
    +
    +        /// address: 0x6003c400
    +        /// The memory that stores Y
    +        pub const Y_MEM = @intToPtr(*volatile [16]u8, base_address + 0x400);
    +
    +        /// address: 0x6003c600
    +        /// The memory that stores X
    +        pub const X_MEM = @intToPtr(*volatile [16]u8, base_address + 0x600);
    +
    +        /// address: 0x6003c800
    +        /// RSA M_prime register
    +        pub const M_PRIME = @intToPtr(*volatile u32, base_address + 0x800);
    +
    +        /// address: 0x6003c804
    +        /// RSA mode register
    +        pub const MODE = @intToPtr(*volatile MmioInt(32, u7), base_address + 0x804);
    +
    +        /// address: 0x6003c808
    +        /// RSA query clean register
    +        pub const QUERY_CLEAN = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x808);
    +
    +        /// address: 0x6003c80c
    +        /// RSA modular exponentiation trigger register.
    +        pub const SET_START_MODEXP = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x80c);
    +
    +        /// address: 0x6003c810
    +        /// RSA modular multiplication trigger register.
    +        pub const SET_START_MODMULT = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x810);
    +
    +        /// address: 0x6003c814
    +        /// RSA normal multiplication trigger register.
    +        pub const SET_START_MULT = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x814);
    +
    +        /// address: 0x6003c818
    +        /// RSA query idle register
    +        pub const QUERY_IDLE = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x818);
    +
    +        /// address: 0x6003c81c
    +        /// RSA interrupt clear register
    +        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// set this bit to clear RSA interrupt.
    +            CLEAR_INTERRUPT: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x81c);
    +
    +        /// address: 0x6003c820
    +        /// RSA constant time option register
    +        pub const CONSTANT_TIME = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x820);
    +
    +        /// address: 0x6003c824
    +        /// RSA search option
    +        pub const SEARCH_ENABLE = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x824);
    +
    +        /// address: 0x6003c828
    +        /// RSA search position configure register
    +        pub const SEARCH_POS = @intToPtr(*volatile MmioInt(32, u12), base_address + 0x828);
    +
    +        /// address: 0x6003c82c
    +        /// RSA interrupt enable register
    +        pub const INT_ENA = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x82c);
    +
    +        /// address: 0x6003c830
    +        /// RSA version control register
    +        pub const DATE = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x830);
    +    };
    +
    +    /// Real-Time Clock Control
    +    pub const RTC_CNTL = struct {
    +        pub const base_address = 0x60008000;
    +
    +        /// address: 0x60008000
    +        /// rtc configure register
    +        pub const OPTIONS0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// {reg_sw_stall_appcpu_c1[5:0], reg_sw_stall_appcpu_c0[1:0]} == 0x86 will stall
    +            /// APP CPU
    +            SW_STALL_APPCPU_C0: u2,
    +            /// {reg_sw_stall_procpu_c1[5:0], reg_sw_stall_procpu_c0[1:0]} == 0x86 will stall
    +            /// PRO CPU
    +            SW_STALL_PROCPU_C0: u2,
    +            /// APP CPU SW reset
    +            SW_APPCPU_RST: u1,
    +            /// PRO CPU SW reset
    +            SW_PROCPU_RST: u1,
    +            /// BB_I2C force power down
    +            BB_I2C_FORCE_PD: u1,
    +            /// BB_I2C force power up
    +            BB_I2C_FORCE_PU: u1,
    +            /// BB_PLL _I2C force power down
    +            BBPLL_I2C_FORCE_PD: u1,
    +            /// BB_PLL_I2C force power up
    +            BBPLL_I2C_FORCE_PU: u1,
    +            /// BB_PLL force power down
    +            BBPLL_FORCE_PD: u1,
    +            /// BB_PLL force power up
    +            BBPLL_FORCE_PU: u1,
    +            /// crystall force power down
    +            XTL_FORCE_PD: u1,
    +            /// crystall force power up
    +            XTL_FORCE_PU: u1,
    +            /// wait bias_sleep and current source wakeup
    +            XTL_EN_WAIT: u4,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// analog configure
    +            XTL_EXT_CTR_SEL: u3,
    +            /// analog configure
    +            XTL_FORCE_ISO: u1,
    +            /// analog configure
    +            PLL_FORCE_ISO: u1,
    +            /// analog configure
    +            ANALOG_FORCE_ISO: u1,
    +            /// analog configure
    +            XTL_FORCE_NOISO: u1,
    +            /// analog configure
    +            PLL_FORCE_NOISO: u1,
    +            /// analog configure
    +            ANALOG_FORCE_NOISO: u1,
    +            /// digital wrap force reset in deep sleep
    +            DG_WRAP_FORCE_RST: u1,
    +            /// digital core force no reset in deep sleep
    +            DG_WRAP_FORCE_NORST: u1,
    +            /// SW system reset
    +            SW_SYS_RST: u1,
    +        }), base_address + 0x0);
    +
    +        /// address: 0x60008004
    +        /// rtc configure register
    +        pub const SLP_TIMER0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// configure the sleep time
    +            SLP_VAL_LO: u32,
    +        }), base_address + 0x4);
    +
    +        /// address: 0x60008008
    +        /// rtc configure register
    +        pub const SLP_TIMER1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// RTC sleep timer high 16 bits
    +            SLP_VAL_HI: u16,
    +            /// timer alarm enable bit
    +            RTC_MAIN_TIMER_ALARM_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +        }), base_address + 0x8);
    +
    +        /// address: 0x6000800c
    +        /// rtc configure register
    +        pub const TIME_UPDATE = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            reserved23: u1,
    +            reserved24: u1,
    +            reserved25: u1,
    +            reserved26: u1,
    +            /// Enable to record system stall time
    +            TIMER_SYS_STALL: u1,
    +            /// Enable to record 40M XTAL OFF time
    +            TIMER_XTL_OFF: u1,
    +            /// enable to record system reset time
    +            TIMER_SYS_RST: u1,
    +            reserved27: u1,
    +            /// Set 1: to update register with RTC timer
    +            RTC_TIME_UPDATE: u1,
    +        }), base_address + 0xc);
    +
    +        /// address: 0x60008010
    +        /// rtc configure register
    +        pub const TIME_LOW0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// RTC timer low 32 bits
    +            RTC_TIMER_VALUE0_LOW: u32,
    +        }), base_address + 0x10);
    +
    +        /// address: 0x60008014
    +        /// rtc configure register
    +        pub const TIME_HIGH0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// RTC timer high 16 bits
    +            RTC_TIMER_VALUE0_HIGH: u16,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x14);
    +
    +        /// address: 0x60008018
    +        /// rtc configure register
    +        pub const STATE0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// rtc software interrupt to main cpu
    +            RTC_SW_CPU_INT: u1,
    +            /// clear rtc sleep reject cause
    +            RTC_SLP_REJECT_CAUSE_CLR: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            /// 1: APB to RTC using bridge
    +            APB2RTC_BRIDGE_SEL: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            reserved23: u1,
    +            reserved24: u1,
    +            /// SDIO active indication
    +            SDIO_ACTIVE_IND: u1,
    +            /// leep wakeup bit
    +            SLP_WAKEUP: u1,
    +            /// leep reject bit
    +            SLP_REJECT: u1,
    +            /// sleep enable bit
    +            SLEEP_EN: u1,
    +        }), base_address + 0x18);
    +
    +        /// address: 0x6000801c
    +        /// rtc configure register
    +        pub const TIMER1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// CPU stall enable bit
    +            CPU_STALL_EN: u1,
    +            /// CPU stall wait cycles in fast_clk_rtc
    +            CPU_STALL_WAIT: u5,
    +            /// CK8M wait cycles in slow_clk_rtc
    +            CK8M_WAIT: u8,
    +            /// XTAL wait cycles in slow_clk_rtc
    +            XTL_BUF_WAIT: u10,
    +            /// PLL wait cycles in slow_clk_rtc
    +            PLL_BUF_WAIT: u8,
    +        }), base_address + 0x1c);
    +
    +        /// address: 0x60008020
    +        /// rtc configure register
    +        pub const TIMER2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            reserved23: u1,
    +            /// minimal cycles in slow_clk_rtc for CK8M in power down state
    +            MIN_TIME_CK8M_OFF: u8,
    +        }), base_address + 0x20);
    +
    +        /// address: 0x60008024
    +        /// rtc configure register
    +        pub const TIMER3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// wifi power domain wakeup time
    +            WIFI_WAIT_TIMER: u9,
    +            /// wifi power domain power on time
    +            WIFI_POWERUP_TIMER: u7,
    +            /// bt power domain wakeup time
    +            BT_WAIT_TIMER: u9,
    +            /// bt power domain power on time
    +            BT_POWERUP_TIMER: u7,
    +        }), base_address + 0x24);
    +
    +        /// address: 0x60008028
    +        /// rtc configure register
    +        pub const TIMER4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// cpu top power domain wakeup time
    +            CPU_TOP_WAIT_TIMER: u9,
    +            /// cpu top power domain power on time
    +            CPU_TOP_POWERUP_TIMER: u7,
    +            /// digital wrap power domain wakeup time
    +            DG_WRAP_WAIT_TIMER: u9,
    +            /// digital wrap power domain power on time
    +            DG_WRAP_POWERUP_TIMER: u7,
    +        }), base_address + 0x28);
    +
    +        /// address: 0x6000802c
    +        /// rtc configure register
    +        pub const TIMER5 = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            /// minimal sleep cycles in slow_clk_rtc
    +            MIN_SLP_VAL: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x2c);
    +
    +        /// address: 0x60008030
    +        /// rtc configure register
    +        pub const TIMER6 = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            /// digital peri power domain wakeup time
    +            DG_PERI_WAIT_TIMER: u9,
    +            /// digital peri power domain power on time
    +            DG_PERI_POWERUP_TIMER: u7,
    +        }), base_address + 0x30);
    +
    +        /// address: 0x60008034
    +        /// rtc configure register
    +        pub const ANA_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            /// force no bypass i2c power on reset
    +            RESET_POR_FORCE_PD: u1,
    +            /// force bypass i2c power on reset
    +            RESET_POR_FORCE_PU: u1,
    +            /// enable glitch reset
    +            GLITCH_RST_EN: u1,
    +            reserved18: u1,
    +            /// PLLA force power up
    +            SAR_I2C_PU: u1,
    +            /// PLLA force power down
    +            PLLA_FORCE_PD: u1,
    +            /// PLLA force power up
    +            PLLA_FORCE_PU: u1,
    +            /// start BBPLL calibration during sleep
    +            BBPLL_CAL_SLP_START: u1,
    +            /// 1: PVTMON power up
    +            PVTMON_PU: u1,
    +            /// 1: TXRF_I2C power up
    +            TXRF_I2C_PU: u1,
    +            /// 1: RFRX_PBUS power up
    +            RFRX_PBUS_PU: u1,
    +            reserved19: u1,
    +            /// 1: CKGEN_I2C power up
    +            CKGEN_I2C_PU: u1,
    +            /// power up pll i2c
    +            PLL_I2C_PU: u1,
    +        }), base_address + 0x34);
    +
    +        /// address: 0x60008038
    +        /// rtc configure register
    +        pub const RESET_STATE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reset cause of PRO CPU
    +            RESET_CAUSE_PROCPU: u6,
    +            /// reset cause of APP CPU
    +            RESET_CAUSE_APPCPU: u6,
    +            /// APP CPU state vector sel
    +            STAT_VECTOR_SEL_APPCPU: u1,
    +            /// PRO CPU state vector sel
    +            STAT_VECTOR_SEL_PROCPU: u1,
    +            /// PRO CPU reset_flag
    +            ALL_RESET_FLAG_PROCPU: u1,
    +            /// APP CPU reset flag
    +            ALL_RESET_FLAG_APPCPU: u1,
    +            /// clear PRO CPU reset_flag
    +            ALL_RESET_FLAG_CLR_PROCPU: u1,
    +            /// clear APP CPU reset flag
    +            ALL_RESET_FLAG_CLR_APPCPU: u1,
    +            /// APPCPU OcdHaltOnReset
    +            OCD_HALT_ON_RESET_APPCPU: u1,
    +            /// PROCPU OcdHaltOnReset
    +            OCD_HALT_ON_RESET_PROCPU: u1,
    +            /// configure jtag reset configure
    +            JTAG_RESET_FLAG_PROCPU: u1,
    +            /// configure jtag reset configure
    +            JTAG_RESET_FLAG_APPCPU: u1,
    +            /// configure jtag reset configure
    +            JTAG_RESET_FLAG_CLR_PROCPU: u1,
    +            /// configure jtag reset configure
    +            JTAG_RESET_FLAG_CLR_APPCPU: u1,
    +            /// configure dreset configure
    +            RTC_DRESET_MASK_APPCPU: u1,
    +            /// configure dreset configure
    +            RTC_DRESET_MASK_PROCPU: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +        }), base_address + 0x38);
    +
    +        /// address: 0x6000803c
    +        /// rtc configure register
    +        pub const WAKEUP_STATE = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            /// wakeup enable bitmap
    +            RTC_WAKEUP_ENA: u17,
    +        }), base_address + 0x3c);
    +
    +        /// address: 0x60008040
    +        /// rtc configure register
    +        pub const INT_ENA_RTC = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// enable sleep wakeup interrupt
    +            SLP_WAKEUP_INT_ENA: u1,
    +            /// enable sleep reject interrupt
    +            SLP_REJECT_INT_ENA: u1,
    +            reserved0: u1,
    +            /// enable RTC WDT interrupt
    +            RTC_WDT_INT_ENA: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            /// enable brown out interrupt
    +            RTC_BROWN_OUT_INT_ENA: u1,
    +            /// enable RTC main timer interrupt
    +            RTC_MAIN_TIMER_INT_ENA: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            /// enable super watch dog interrupt
    +            RTC_SWD_INT_ENA: u1,
    +            /// enable xtal32k_dead interrupt
    +            RTC_XTAL32K_DEAD_INT_ENA: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            /// enbale gitch det interrupt
    +            RTC_GLITCH_DET_INT_ENA: u1,
    +            /// enbale bbpll cal end interrupt
    +            RTC_BBPLL_CAL_INT_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +        }), base_address + 0x40);
    +
    +        /// address: 0x60008044
    +        /// rtc configure register
    +        pub const INT_RAW_RTC = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// sleep wakeup interrupt raw
    +            SLP_WAKEUP_INT_RAW: u1,
    +            /// sleep reject interrupt raw
    +            SLP_REJECT_INT_RAW: u1,
    +            reserved0: u1,
    +            /// RTC WDT interrupt raw
    +            RTC_WDT_INT_RAW: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            /// brown out interrupt raw
    +            RTC_BROWN_OUT_INT_RAW: u1,
    +            /// RTC main timer interrupt raw
    +            RTC_MAIN_TIMER_INT_RAW: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            /// super watch dog interrupt raw
    +            RTC_SWD_INT_RAW: u1,
    +            /// xtal32k dead detection interrupt raw
    +            RTC_XTAL32K_DEAD_INT_RAW: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            /// glitch_det_interrupt_raw
    +            RTC_GLITCH_DET_INT_RAW: u1,
    +            /// bbpll cal end interrupt state
    +            RTC_BBPLL_CAL_INT_RAW: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +        }), base_address + 0x44);
    +
    +        /// address: 0x60008048
    +        /// rtc configure register
    +        pub const INT_ST_RTC = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// sleep wakeup interrupt state
    +            SLP_WAKEUP_INT_ST: u1,
    +            /// sleep reject interrupt state
    +            SLP_REJECT_INT_ST: u1,
    +            reserved0: u1,
    +            /// RTC WDT interrupt state
    +            RTC_WDT_INT_ST: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            /// brown out interrupt state
    +            RTC_BROWN_OUT_INT_ST: u1,
    +            /// RTC main timer interrupt state
    +            RTC_MAIN_TIMER_INT_ST: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            /// super watch dog interrupt state
    +            RTC_SWD_INT_ST: u1,
    +            /// xtal32k dead detection interrupt state
    +            RTC_XTAL32K_DEAD_INT_ST: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            /// glitch_det_interrupt state
    +            RTC_GLITCH_DET_INT_ST: u1,
    +            /// bbpll cal end interrupt state
    +            RTC_BBPLL_CAL_INT_ST: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +        }), base_address + 0x48);
    +
    +        /// address: 0x6000804c
    +        /// rtc configure register
    +        pub const INT_CLR_RTC = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Clear sleep wakeup interrupt state
    +            SLP_WAKEUP_INT_CLR: u1,
    +            /// Clear sleep reject interrupt state
    +            SLP_REJECT_INT_CLR: u1,
    +            reserved0: u1,
    +            /// Clear RTC WDT interrupt state
    +            RTC_WDT_INT_CLR: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            /// Clear brown out interrupt state
    +            RTC_BROWN_OUT_INT_CLR: u1,
    +            /// Clear RTC main timer interrupt state
    +            RTC_MAIN_TIMER_INT_CLR: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            /// Clear super watch dog interrupt state
    +            RTC_SWD_INT_CLR: u1,
    +            /// Clear RTC WDT interrupt state
    +            RTC_XTAL32K_DEAD_INT_CLR: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            /// Clear glitch det interrupt state
    +            RTC_GLITCH_DET_INT_CLR: u1,
    +            /// clear bbpll cal end interrupt state
    +            RTC_BBPLL_CAL_INT_CLR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +        }), base_address + 0x4c);
    +
    +        /// address: 0x60008050
    +        /// rtc configure register
    +        pub const STORE0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reserved register
    +            RTC_SCRATCH0: u32,
    +        }), base_address + 0x50);
    +
    +        /// address: 0x60008054
    +        /// rtc configure register
    +        pub const STORE1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reserved register
    +            RTC_SCRATCH1: u32,
    +        }), base_address + 0x54);
    +
    +        /// address: 0x60008058
    +        /// rtc configure register
    +        pub const STORE2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reserved register
    +            RTC_SCRATCH2: u32,
    +        }), base_address + 0x58);
    +
    +        /// address: 0x6000805c
    +        /// rtc configure register
    +        pub const STORE3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reserved register
    +            RTC_SCRATCH3: u32,
    +        }), base_address + 0x5c);
    +
    +        /// address: 0x60008060
    +        /// rtc configure register
    +        pub const EXT_XTL_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// xtal 32k watch dog enable
    +            XTAL32K_WDT_EN: u1,
    +            /// xtal 32k watch dog clock force on
    +            XTAL32K_WDT_CLK_FO: u1,
    +            /// xtal 32k watch dog sw reset
    +            XTAL32K_WDT_RESET: u1,
    +            /// xtal 32k external xtal clock force on
    +            XTAL32K_EXT_CLK_FO: u1,
    +            /// xtal 32k switch to back up clock when xtal is dead
    +            XTAL32K_AUTO_BACKUP: u1,
    +            /// xtal 32k restart xtal when xtal is dead
    +            XTAL32K_AUTO_RESTART: u1,
    +            /// xtal 32k switch back xtal when xtal is restarted
    +            XTAL32K_AUTO_RETURN: u1,
    +            /// Xtal 32k xpd control by sw or fsm
    +            XTAL32K_XPD_FORCE: u1,
    +            /// apply an internal clock to help xtal 32k to start
    +            ENCKINIT_XTAL_32K: u1,
    +            /// 0: single-end buffer 1: differential buffer
    +            DBUF_XTAL_32K: u1,
    +            /// xtal_32k gm control
    +            DGM_XTAL_32K: u3,
    +            /// DRES_XTAL_32K
    +            DRES_XTAL_32K: u3,
    +            /// XPD_XTAL_32K
    +            XPD_XTAL_32K: u1,
    +            /// DAC_XTAL_32K
    +            DAC_XTAL_32K: u3,
    +            /// state of 32k_wdt
    +            RTC_WDT_STATE: u3,
    +            /// XTAL_32K sel. 0: external XTAL_32K
    +            RTC_XTAL32K_GPIO_SEL: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            /// 0: power down XTAL at high level
    +            XTL_EXT_CTR_LV: u1,
    +            /// enable gpio configure xtal power on
    +            XTL_EXT_CTR_EN: u1,
    +        }), base_address + 0x60);
    +
    +        /// address: 0x60008064
    +        /// rtc configure register
    +        pub const EXT_WAKEUP_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            reserved23: u1,
    +            reserved24: u1,
    +            reserved25: u1,
    +            reserved26: u1,
    +            reserved27: u1,
    +            reserved28: u1,
    +            reserved29: u1,
    +            reserved30: u1,
    +            /// enable filter for gpio wakeup event
    +            GPIO_WAKEUP_FILTER: u1,
    +        }), base_address + 0x64);
    +
    +        /// address: 0x60008068
    +        /// rtc configure register
    +        pub const SLP_REJECT_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            /// sleep reject enable
    +            RTC_SLEEP_REJECT_ENA: u18,
    +            /// enable reject for light sleep
    +            LIGHT_SLP_REJECT_EN: u1,
    +            /// enable reject for deep sleep
    +            DEEP_SLP_REJECT_EN: u1,
    +        }), base_address + 0x68);
    +
    +        /// address: 0x6000806c
    +        /// rtc configure register
    +        pub const CPU_PERIOD_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            reserved23: u1,
    +            reserved24: u1,
    +            reserved25: u1,
    +            reserved26: u1,
    +            reserved27: u1,
    +            reserved28: u1,
    +            /// CPU sel option
    +            RTC_CPUSEL_CONF: u1,
    +            /// CPU clk sel option
    +            RTC_CPUPERIOD_SEL: u2,
    +        }), base_address + 0x6c);
    +
    +        /// address: 0x60008070
    +        /// rtc configure register
    +        pub const CLK_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            /// efuse_clk_force_gating
    +            EFUSE_CLK_FORCE_GATING: u1,
    +            /// efuse_clk_force_nogating
    +            EFUSE_CLK_FORCE_NOGATING: u1,
    +            /// used to sync reg_ck8m_div_sel bus. Clear vld before set reg_ck8m_div_sel
    +            CK8M_DIV_SEL_VLD: u1,
    +            /// CK8M_D256_OUT divider. 00: div128
    +            CK8M_DIV: u2,
    +            /// disable CK8M and CK8M_D256_OUT
    +            ENB_CK8M: u1,
    +            /// 1: CK8M_D256_OUT is actually CK8M
    +            ENB_CK8M_DIV: u1,
    +            /// enable CK_XTAL_32K for digital core (no relationship with RTC core)
    +            DIG_XTAL32K_EN: u1,
    +            /// enable CK8M_D256_OUT for digital core (no relationship with RTC core)
    +            DIG_CLK8M_D256_EN: u1,
    +            /// enable CK8M for digital core (no relationship with RTC core)
    +            DIG_CLK8M_EN: u1,
    +            reserved1: u1,
    +            /// divider = reg_ck8m_div_sel + 1
    +            CK8M_DIV_SEL: u3,
    +            /// XTAL force no gating during sleep
    +            XTAL_FORCE_NOGATING: u1,
    +            /// CK8M force no gating during sleep
    +            CK8M_FORCE_NOGATING: u1,
    +            /// CK8M_DFREQ
    +            CK8M_DFREQ: u8,
    +            /// CK8M force power down
    +            CK8M_FORCE_PD: u1,
    +            /// CK8M force power up
    +            CK8M_FORCE_PU: u1,
    +            /// force enable xtal clk gating
    +            XTAL_GLOBAL_FORCE_GATING: u1,
    +            /// force bypass xtal clk gating
    +            XTAL_GLOBAL_FORCE_NOGATING: u1,
    +            /// fast_clk_rtc sel. 0: XTAL div 4
    +            FAST_CLK_RTC_SEL: u1,
    +            /// slelect rtc slow clk
    +            ANA_CLK_RTC_SEL: u2,
    +        }), base_address + 0x70);
    +
    +        /// address: 0x60008074
    +        /// rtc configure register
    +        pub const SLOW_CLK_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            /// used to sync div bus. clear vld before set reg_rtc_ana_clk_div
    +            RTC_ANA_CLK_DIV_VLD: u1,
    +            /// the clk divider num of RTC_CLK
    +            RTC_ANA_CLK_DIV: u8,
    +            /// flag rtc_slow_clk_next_edge
    +            RTC_SLOW_CLK_NEXT_EDGE: u1,
    +        }), base_address + 0x74);
    +
    +        /// address: 0x60008078
    +        /// rtc configure register
    +        pub const SDIO_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// timer count to apply reg_sdio_dcap after sdio power on
    +            SDIO_TIMER_TARGET: u8,
    +            reserved0: u1,
    +            /// Tieh = 1 mode drive ability. Initially set to 0 to limit charge current
    +            SDIO_DTHDRV: u2,
    +            /// ability to prevent LDO from overshoot
    +            SDIO_DCAP: u2,
    +            /// add resistor from ldo output to ground. 0: no res
    +            SDIO_INITI: u2,
    +            /// 0 to set init[1:0]=0
    +            SDIO_EN_INITI: u1,
    +            /// tune current limit threshold when tieh = 0. About 800mA/(8+d)
    +            SDIO_DCURLIM: u3,
    +            /// select current limit mode
    +            SDIO_MODECURLIM: u1,
    +            /// enable current limit
    +            SDIO_ENCURLIM: u1,
    +            /// power down SDIO_REG in sleep. Only active when reg_sdio_force = 0
    +            SDIO_REG_PD_EN: u1,
    +            /// 1: use SW option to control SDIO_REG
    +            SDIO_FORCE: u1,
    +            /// SW option for SDIO_TIEH. Only active when reg_sdio_force = 1
    +            SDIO_TIEH: u1,
    +            /// read only register for REG1P8_READY
    +            _1P8_READY: u1,
    +            /// SW option for DREFL_SDIO. Only active when reg_sdio_force = 1
    +            DREFL_SDIO: u2,
    +            /// SW option for DREFM_SDIO. Only active when reg_sdio_force = 1
    +            DREFM_SDIO: u2,
    +            /// SW option for DREFH_SDIO. Only active when reg_sdio_force = 1
    +            DREFH_SDIO: u2,
    +            XPD_SDIO: u1,
    +        }), base_address + 0x78);
    +
    +        /// address: 0x6000807c
    +        /// rtc configure register
    +        pub const BIAS_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            DG_VDD_DRV_B_SLP: u8,
    +            DG_VDD_DRV_B_SLP_EN: u1,
    +            reserved0: u1,
    +            /// bias buf when rtc in normal work state
    +            BIAS_BUF_IDLE: u1,
    +            /// bias buf when rtc in wakeup state
    +            BIAS_BUF_WAKE: u1,
    +            /// bias buf when rtc in sleep state
    +            BIAS_BUF_DEEP_SLP: u1,
    +            /// bias buf when rtc in monitor state
    +            BIAS_BUF_MONITOR: u1,
    +            /// xpd cur when rtc in sleep_state
    +            PD_CUR_DEEP_SLP: u1,
    +            /// xpd cur when rtc in monitor state
    +            PD_CUR_MONITOR: u1,
    +            /// bias_sleep when rtc in sleep_state
    +            BIAS_SLEEP_DEEP_SLP: u1,
    +            /// bias_sleep when rtc in monitor state
    +            BIAS_SLEEP_MONITOR: u1,
    +            /// DBG_ATTEN when rtc in sleep state
    +            DBG_ATTEN_DEEP_SLP: u4,
    +            /// DBG_ATTEN when rtc in monitor state
    +            DBG_ATTEN_MONITOR: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +        }), base_address + 0x7c);
    +
    +        /// address: 0x60008080
    +        /// rtc configure register
    +        pub const RTC_CNTL = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            /// software enable digital regulator cali
    +            DIG_REG_CAL_EN: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            /// SCK_DCAP
    +            SCK_DCAP: u8,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            /// RTC_DBOOST force power down
    +            DBOOST_FORCE_PD: u1,
    +            /// RTC_DBOOST force power up
    +            DBOOST_FORCE_PU: u1,
    +            /// RTC_REG force power down (for RTC_REG power down means decrease the voltage to
    +            /// 0.8v or lower )
    +            REGULATOR_FORCE_PD: u1,
    +            /// RTC_REG force power up
    +            REGULATOR_FORCE_PU: u1,
    +        }), base_address + 0x80);
    +
    +        /// address: 0x60008084
    +        /// rtc configure register
    +        pub const PWC = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            /// rtc pad force hold
    +            RTC_PAD_FORCE_HOLD: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +        }), base_address + 0x84);
    +
    +        /// address: 0x60008088
    +        /// rtc configure register
    +        pub const DIG_PWC = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// vdd_spi drv's software value
    +            VDD_SPI_PWR_DRV: u2,
    +            /// vdd_spi drv use software value
    +            VDD_SPI_PWR_FORCE: u1,
    +            /// memories in digital core force PD in sleep
    +            LSLP_MEM_FORCE_PD: u1,
    +            /// memories in digital core force PU in sleep
    +            LSLP_MEM_FORCE_PU: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            /// bt force power down
    +            BT_FORCE_PD: u1,
    +            /// bt force power up
    +            BT_FORCE_PU: u1,
    +            /// digital peri force power down
    +            DG_PERI_FORCE_PD: u1,
    +            /// digital peri force power up
    +            DG_PERI_FORCE_PU: u1,
    +            /// fastmemory retention mode in sleep
    +            RTC_FASTMEM_FORCE_LPD: u1,
    +            /// fastmemory donlt entry retention mode in sleep
    +            RTC_FASTMEM_FORCE_LPU: u1,
    +            /// wifi force power down
    +            WIFI_FORCE_PD: u1,
    +            /// wifi force power up
    +            WIFI_FORCE_PU: u1,
    +            /// digital core force power down
    +            DG_WRAP_FORCE_PD: u1,
    +            /// digital core force power up
    +            DG_WRAP_FORCE_PU: u1,
    +            /// cpu core force power down
    +            CPU_TOP_FORCE_PD: u1,
    +            /// cpu force power up
    +            CPU_TOP_FORCE_PU: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            /// enable power down bt in sleep
    +            BT_PD_EN: u1,
    +            /// enable power down digital peri in sleep
    +            DG_PERI_PD_EN: u1,
    +            /// enable power down cpu in sleep
    +            CPU_TOP_PD_EN: u1,
    +            /// enable power down wifi in sleep
    +            WIFI_PD_EN: u1,
    +            /// enable power down digital wrap in sleep
    +            DG_WRAP_PD_EN: u1,
    +        }), base_address + 0x88);
    +
    +        /// address: 0x6000808c
    +        /// rtc configure register
    +        pub const DIG_ISO = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            /// DIG_ISO force off
    +            FORCE_OFF: u1,
    +            /// DIG_ISO force on
    +            FORCE_ON: u1,
    +            /// read only register to indicate digital pad auto-hold status
    +            DG_PAD_AUTOHOLD: u1,
    +            /// wtite only register to clear digital pad auto-hold
    +            CLR_DG_PAD_AUTOHOLD: u1,
    +            /// digital pad enable auto-hold
    +            DG_PAD_AUTOHOLD_EN: u1,
    +            /// digital pad force no ISO
    +            DG_PAD_FORCE_NOISO: u1,
    +            /// digital pad force ISO
    +            DG_PAD_FORCE_ISO: u1,
    +            /// digital pad force un-hold
    +            DG_PAD_FORCE_UNHOLD: u1,
    +            /// digital pad force hold
    +            DG_PAD_FORCE_HOLD: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            /// bt force ISO
    +            BT_FORCE_ISO: u1,
    +            /// bt force no ISO
    +            BT_FORCE_NOISO: u1,
    +            /// Digital peri force ISO
    +            DG_PERI_FORCE_ISO: u1,
    +            /// digital peri force no ISO
    +            DG_PERI_FORCE_NOISO: u1,
    +            /// cpu force ISO
    +            CPU_TOP_FORCE_ISO: u1,
    +            /// cpu force no ISO
    +            CPU_TOP_FORCE_NOISO: u1,
    +            /// wifi force ISO
    +            WIFI_FORCE_ISO: u1,
    +            /// wifi force no ISO
    +            WIFI_FORCE_NOISO: u1,
    +            /// digital core force ISO
    +            DG_WRAP_FORCE_ISO: u1,
    +            /// digital core force no ISO
    +            DG_WRAP_FORCE_NOISO: u1,
    +        }), base_address + 0x8c);
    +
    +        /// address: 0x60008090
    +        /// rtc configure register
    +        pub const WDTCONFIG0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// chip reset siginal pulse width
    +            WDT_CHIP_RESET_WIDTH: u8,
    +            /// wdt reset whole chip enable
    +            WDT_CHIP_RESET_EN: u1,
    +            /// pause WDT in sleep
    +            WDT_PAUSE_IN_SLP: u1,
    +            /// enable WDT reset APP CPU
    +            WDT_APPCPU_RESET_EN: u1,
    +            /// enable WDT reset PRO CPU
    +            WDT_PROCPU_RESET_EN: u1,
    +            /// enable WDT in flash boot
    +            WDT_FLASHBOOT_MOD_EN: u1,
    +            /// system reset counter length
    +            WDT_SYS_RESET_LENGTH: u3,
    +            /// CPU reset counter length
    +            WDT_CPU_RESET_LENGTH: u3,
    +            /// 1: interrupt stage en
    +            WDT_STG3: u3,
    +            /// 1: interrupt stage en
    +            WDT_STG2: u3,
    +            /// 1: interrupt stage en
    +            WDT_STG1: u3,
    +            /// 1: interrupt stage en
    +            WDT_STG0: u3,
    +            /// enable rtc wdt
    +            WDT_EN: u1,
    +        }), base_address + 0x90);
    +
    +        /// address: 0x60008094
    +        /// rtc configure register
    +        pub const WDTCONFIG1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// the hold time of stage0
    +            WDT_STG0_HOLD: u32,
    +        }), base_address + 0x94);
    +
    +        /// address: 0x60008098
    +        /// rtc configure register
    +        pub const WDTCONFIG2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// the hold time of stage1
    +            WDT_STG1_HOLD: u32,
    +        }), base_address + 0x98);
    +
    +        /// address: 0x6000809c
    +        /// rtc configure register
    +        pub const WDTCONFIG3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// the hold time of stage2
    +            WDT_STG2_HOLD: u32,
    +        }), base_address + 0x9c);
    +
    +        /// address: 0x600080a0
    +        /// rtc configure register
    +        pub const WDTCONFIG4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// the hold time of stage3
    +            WDT_STG3_HOLD: u32,
    +        }), base_address + 0xa0);
    +
    +        /// address: 0x600080a4
    +        /// rtc configure register
    +        pub const WDTFEED = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            reserved23: u1,
    +            reserved24: u1,
    +            reserved25: u1,
    +            reserved26: u1,
    +            reserved27: u1,
    +            reserved28: u1,
    +            reserved29: u1,
    +            reserved30: u1,
    +            /// sw feed rtc wdt
    +            RTC_WDT_FEED: u1,
    +        }), base_address + 0xa4);
    +
    +        /// address: 0x600080a8
    +        /// rtc configure register
    +        pub const WDTWPROTECT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// the key of rtc wdt
    +            WDT_WKEY: u32,
    +        }), base_address + 0xa8);
    +
    +        /// address: 0x600080ac
    +        /// rtc configure register
    +        pub const SWD_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// swd reset flag
    +            SWD_RESET_FLAG: u1,
    +            /// swd interrupt for feeding
    +            SWD_FEED_INT: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            /// Bypass swd rst
    +            SWD_BYPASS_RST: u1,
    +            /// adjust signal width send to swd
    +            SWD_SIGNAL_WIDTH: u10,
    +            /// reset swd reset flag
    +            SWD_RST_FLAG_CLR: u1,
    +            /// Sw feed swd
    +            SWD_FEED: u1,
    +            /// disabel SWD
    +            SWD_DISABLE: u1,
    +            /// automatically feed swd when int comes
    +            SWD_AUTO_FEED_EN: u1,
    +        }), base_address + 0xac);
    +
    +        /// address: 0x600080b0
    +        /// rtc configure register
    +        pub const SWD_WPROTECT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// the key of super wdt
    +            SWD_WKEY: u32,
    +        }), base_address + 0xb0);
    +
    +        /// address: 0x600080b4
    +        /// rtc configure register
    +        pub const SW_CPU_STALL = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            /// {reg_sw_stall_appcpu_c1[5:0]
    +            SW_STALL_APPCPU_C1: u6,
    +            /// stall cpu by software
    +            SW_STALL_PROCPU_C1: u6,
    +        }), base_address + 0xb4);
    +
    +        /// address: 0x600080b8
    +        /// rtc configure register
    +        pub const STORE4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reserved register
    +            RTC_SCRATCH4: u32,
    +        }), base_address + 0xb8);
    +
    +        /// address: 0x600080bc
    +        /// rtc configure register
    +        pub const STORE5 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reserved register
    +            RTC_SCRATCH5: u32,
    +        }), base_address + 0xbc);
    +
    +        /// address: 0x600080c0
    +        /// rtc configure register
    +        pub const STORE6 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reserved register
    +            RTC_SCRATCH6: u32,
    +        }), base_address + 0xc0);
    +
    +        /// address: 0x600080c4
    +        /// rtc configure register
    +        pub const STORE7 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reserved register
    +            RTC_SCRATCH7: u32,
    +        }), base_address + 0xc4);
    +
    +        /// address: 0x600080c8
    +        /// rtc configure register
    +        pub const LOW_POWER_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// rom0 power down
    +            XPD_ROM0: u1,
    +            reserved0: u1,
    +            /// External DCDC power down
    +            XPD_DIG_DCDC: u1,
    +            /// rtc peripheral iso
    +            RTC_PERI_ISO: u1,
    +            /// rtc peripheral power down
    +            XPD_RTC_PERI: u1,
    +            /// wifi iso
    +            WIFI_ISO: u1,
    +            /// wifi wrap power down
    +            XPD_WIFI: u1,
    +            /// digital wrap iso
    +            DIG_ISO: u1,
    +            /// digital wrap power down
    +            XPD_DIG: u1,
    +            /// touch should start to work
    +            RTC_TOUCH_STATE_START: u1,
    +            /// touch is about to working. Switch rtc main state
    +            RTC_TOUCH_STATE_SWITCH: u1,
    +            /// touch is in sleep state
    +            RTC_TOUCH_STATE_SLP: u1,
    +            /// touch is done
    +            RTC_TOUCH_STATE_DONE: u1,
    +            /// ulp/cocpu should start to work
    +            RTC_COCPU_STATE_START: u1,
    +            /// ulp/cocpu is about to working. Switch rtc main state
    +            RTC_COCPU_STATE_SWITCH: u1,
    +            /// ulp/cocpu is in sleep state
    +            RTC_COCPU_STATE_SLP: u1,
    +            /// ulp/cocpu is done
    +            RTC_COCPU_STATE_DONE: u1,
    +            /// no use any more
    +            RTC_MAIN_STATE_XTAL_ISO: u1,
    +            /// rtc main state machine is in states that pll should be running
    +            RTC_MAIN_STATE_PLL_ON: u1,
    +            /// rtc is ready to receive wake up trigger from wake up source
    +            RTC_RDY_FOR_WAKEUP: u1,
    +            /// rtc main state machine has been waited for some cycles
    +            RTC_MAIN_STATE_WAIT_END: u1,
    +            /// rtc main state machine is in the states of wakeup process
    +            RTC_IN_WAKEUP_STATE: u1,
    +            /// rtc main state machine is in the states of low power
    +            RTC_IN_LOW_POWER_STATE: u1,
    +            /// rtc main state machine is in wait 8m state
    +            RTC_MAIN_STATE_IN_WAIT_8M: u1,
    +            /// rtc main state machine is in wait pll state
    +            RTC_MAIN_STATE_IN_WAIT_PLL: u1,
    +            /// rtc main state machine is in wait xtal state
    +            RTC_MAIN_STATE_IN_WAIT_XTL: u1,
    +            /// rtc main state machine is in sleep state
    +            RTC_MAIN_STATE_IN_SLP: u1,
    +            /// rtc main state machine is in idle state
    +            RTC_MAIN_STATE_IN_IDLE: u1,
    +            /// rtc main state machine status
    +            RTC_MAIN_STATE: u4,
    +        }), base_address + 0xc8);
    +
    +        /// address: 0x600080cc
    +        /// rtc configure register
    +        pub const DIAG0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            RTC_LOW_POWER_DIAG1: u32,
    +        }), base_address + 0xcc);
    +
    +        /// address: 0x600080d0
    +        /// rtc configure register
    +        pub const PAD_HOLD = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// the hold configure of rtc gpio0
    +            RTC_GPIO_PIN0_HOLD: u1,
    +            /// the hold configure of rtc gpio1
    +            RTC_GPIO_PIN1_HOLD: u1,
    +            /// the hold configure of rtc gpio2
    +            RTC_GPIO_PIN2_HOLD: u1,
    +            /// the hold configure of rtc gpio3
    +            RTC_GPIO_PIN3_HOLD: u1,
    +            /// the hold configure of rtc gpio4
    +            RTC_GPIO_PIN4_HOLD: u1,
    +            /// the hold configure of rtc gpio5
    +            RTC_GPIO_PIN5_HOLD: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +        }), base_address + 0xd0);
    +
    +        /// address: 0x600080d4
    +        /// rtc configure register
    +        pub const DIG_PAD_HOLD = @intToPtr(*volatile u32, base_address + 0xd4);
    +
    +        /// address: 0x600080d8
    +        /// rtc configure register
    +        pub const BROWN_OUT = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            /// brown out interrupt wait cycles
    +            INT_WAIT: u10,
    +            /// enable close flash when brown out happens
    +            CLOSE_FLASH_ENA: u1,
    +            /// enable power down RF when brown out happens
    +            PD_RF_ENA: u1,
    +            /// brown out reset wait cycles
    +            RST_WAIT: u10,
    +            /// enable brown out reset
    +            RST_ENA: u1,
    +            /// 1: 4-pos reset
    +            RST_SEL: u1,
    +            /// brown_out origin reset enable
    +            ANA_RST_EN: u1,
    +            /// clear brown out counter
    +            CNT_CLR: u1,
    +            /// enable brown out
    +            ENA: u1,
    +            /// the flag of brown det from analog
    +            DET: u1,
    +        }), base_address + 0xd8);
    +
    +        /// address: 0x600080dc
    +        /// rtc configure register
    +        pub const TIME_LOW1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// RTC timer low 32 bits
    +            RTC_TIMER_VALUE1_LOW: u32,
    +        }), base_address + 0xdc);
    +
    +        /// address: 0x600080e0
    +        /// rtc configure register
    +        pub const TIME_HIGH1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// RTC timer high 16 bits
    +            RTC_TIMER_VALUE1_HIGH: u16,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0xe0);
    +
    +        /// address: 0x600080e4
    +        /// rtc configure register
    +        pub const XTAL32K_CLK_FACTOR = @intToPtr(*volatile u32, base_address + 0xe4);
    +
    +        /// address: 0x600080e8
    +        /// rtc configure register
    +        pub const XTAL32K_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// cycles to wait to return noral xtal 32k
    +            XTAL32K_RETURN_WAIT: u4,
    +            /// cycles to wait to repower on xtal 32k
    +            XTAL32K_RESTART_WAIT: u16,
    +            /// If no clock detected for this amount of time
    +            XTAL32K_WDT_TIMEOUT: u8,
    +            /// if restarted xtal32k period is smaller than this
    +            XTAL32K_STABLE_THRES: u4,
    +        }), base_address + 0xe8);
    +
    +        /// address: 0x600080ec
    +        /// rtc configure register
    +        pub const USB_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            /// disable io_mux reset
    +            IO_MUX_RESET_DISABLE: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +        }), base_address + 0xec);
    +
    +        /// address: 0x600080f0
    +        /// RTC_CNTL_RTC_SLP_REJECT_CAUSE_REG
    +        pub const SLP_REJECT_CAUSE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// sleep reject cause
    +            REJECT_CAUSE: u18,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0xf0);
    +
    +        /// address: 0x600080f4
    +        /// rtc configure register
    +        pub const OPTION1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// force chip entry download mode
    +            FORCE_DOWNLOAD_BOOT: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0xf4);
    +
    +        /// address: 0x600080f8
    +        /// RTC_CNTL_RTC_SLP_WAKEUP_CAUSE_REG
    +        pub const SLP_WAKEUP_CAUSE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// sleep wakeup cause
    +            WAKEUP_CAUSE: u17,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +        }), base_address + 0xf8);
    +
    +        /// address: 0x600080fc
    +        /// rtc configure register
    +        pub const ULP_CP_TIMER_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            /// sleep cycles for ULP-coprocessor timer
    +            ULP_CP_TIMER_SLP_CYCLE: u24,
    +        }), base_address + 0xfc);
    +
    +        /// address: 0x60008100
    +        /// rtc configure register
    +        pub const INT_ENA_RTC_W1TS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// enable sleep wakeup interrupt
    +            SLP_WAKEUP_INT_ENA_W1TS: u1,
    +            /// enable sleep reject interrupt
    +            SLP_REJECT_INT_ENA_W1TS: u1,
    +            reserved0: u1,
    +            /// enable RTC WDT interrupt
    +            RTC_WDT_INT_ENA_W1TS: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            /// enable brown out interrupt
    +            RTC_BROWN_OUT_INT_ENA_W1TS: u1,
    +            /// enable RTC main timer interrupt
    +            RTC_MAIN_TIMER_INT_ENA_W1TS: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            /// enable super watch dog interrupt
    +            RTC_SWD_INT_ENA_W1TS: u1,
    +            /// enable xtal32k_dead interrupt
    +            RTC_XTAL32K_DEAD_INT_ENA_W1TS: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            /// enbale gitch det interrupt
    +            RTC_GLITCH_DET_INT_ENA_W1TS: u1,
    +            /// enbale bbpll cal interrupt
    +            RTC_BBPLL_CAL_INT_ENA_W1TS: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +        }), base_address + 0x100);
    +
    +        /// address: 0x60008104
    +        /// rtc configure register
    +        pub const INT_ENA_RTC_W1TC = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// clear sleep wakeup interrupt enable
    +            SLP_WAKEUP_INT_ENA_W1TC: u1,
    +            /// clear sleep reject interrupt enable
    +            SLP_REJECT_INT_ENA_W1TC: u1,
    +            reserved0: u1,
    +            /// clear RTC WDT interrupt enable
    +            RTC_WDT_INT_ENA_W1TC: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            /// clear brown out interrupt enable
    +            RTC_BROWN_OUT_INT_ENA_W1TC: u1,
    +            /// Clear RTC main timer interrupt enable
    +            RTC_MAIN_TIMER_INT_ENA_W1TC: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            /// clear super watch dog interrupt enable
    +            RTC_SWD_INT_ENA_W1TC: u1,
    +            /// clear xtal32k_dead interrupt enable
    +            RTC_XTAL32K_DEAD_INT_ENA_W1TC: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            /// clear gitch det interrupt enable
    +            RTC_GLITCH_DET_INT_ENA_W1TC: u1,
    +            /// clear bbpll cal interrupt enable
    +            RTC_BBPLL_CAL_INT_ENA_W1TC: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +        }), base_address + 0x104);
    +
    +        /// address: 0x60008108
    +        /// rtc configure register
    +        pub const RETENTION_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            /// Retention clk sel
    +            RETENTION_CLK_SEL: u1,
    +            /// Retention done wait time
    +            RETENTION_DONE_WAIT: u3,
    +            /// Retention clkoff wait time
    +            RETENTION_CLKOFF_WAIT: u4,
    +            /// enable cpu retention when light sleep
    +            RETENTION_EN: u1,
    +            /// wait cycles for rention operation
    +            RETENTION_WAIT: u5,
    +        }), base_address + 0x108);
    +
    +        /// address: 0x6000810c
    +        /// rtc configure register
    +        pub const FIB_SEL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// select use analog fib signal
    +            RTC_FIB_SEL: u3,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +        }), base_address + 0x10c);
    +
    +        /// address: 0x60008110
    +        /// rtc configure register
    +        pub const GPIO_WAKEUP = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// rtc gpio wakeup flag
    +            RTC_GPIO_WAKEUP_STATUS: u6,
    +            /// clear rtc gpio wakeup flag
    +            RTC_GPIO_WAKEUP_STATUS_CLR: u1,
    +            /// enable rtc io clk gate
    +            RTC_GPIO_PIN_CLK_GATE: u1,
    +            /// configure gpio wakeup type
    +            RTC_GPIO_PIN5_INT_TYPE: u3,
    +            /// configure gpio wakeup type
    +            RTC_GPIO_PIN4_INT_TYPE: u3,
    +            /// configure gpio wakeup type
    +            RTC_GPIO_PIN3_INT_TYPE: u3,
    +            /// configure gpio wakeup type
    +            RTC_GPIO_PIN2_INT_TYPE: u3,
    +            /// configure gpio wakeup type
    +            RTC_GPIO_PIN1_INT_TYPE: u3,
    +            /// configure gpio wakeup type
    +            RTC_GPIO_PIN0_INT_TYPE: u3,
    +            /// enable wakeup from rtc gpio5
    +            RTC_GPIO_PIN5_WAKEUP_ENABLE: u1,
    +            /// enable wakeup from rtc gpio4
    +            RTC_GPIO_PIN4_WAKEUP_ENABLE: u1,
    +            /// enable wakeup from rtc gpio3
    +            RTC_GPIO_PIN3_WAKEUP_ENABLE: u1,
    +            /// enable wakeup from rtc gpio2
    +            RTC_GPIO_PIN2_WAKEUP_ENABLE: u1,
    +            /// enable wakeup from rtc gpio1
    +            RTC_GPIO_PIN1_WAKEUP_ENABLE: u1,
    +            /// enable wakeup from rtc gpio0
    +            RTC_GPIO_PIN0_WAKEUP_ENABLE: u1,
    +        }), base_address + 0x110);
    +
    +        /// address: 0x60008114
    +        /// rtc configure register
    +        pub const DBG_SEL = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            /// use for debug
    +            RTC_DEBUG_12M_NO_GATING: u1,
    +            /// use for debug
    +            RTC_DEBUG_BIT_SEL: u5,
    +            /// use for debug
    +            RTC_DEBUG_SEL0: u5,
    +            /// use for debug
    +            RTC_DEBUG_SEL1: u5,
    +            /// use for debug
    +            RTC_DEBUG_SEL2: u5,
    +            /// use for debug
    +            RTC_DEBUG_SEL3: u5,
    +            /// use for debug
    +            RTC_DEBUG_SEL4: u5,
    +        }), base_address + 0x114);
    +
    +        /// address: 0x60008118
    +        /// rtc configure register
    +        pub const DBG_MAP = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// use for debug
    +            RTC_GPIO_PIN5_MUX_SEL: u1,
    +            /// use for debug
    +            RTC_GPIO_PIN4_MUX_SEL: u1,
    +            /// use for debug
    +            RTC_GPIO_PIN3_MUX_SEL: u1,
    +            /// use for debug
    +            RTC_GPIO_PIN2_MUX_SEL: u1,
    +            /// use for debug
    +            RTC_GPIO_PIN1_MUX_SEL: u1,
    +            /// use for debug
    +            RTC_GPIO_PIN0_MUX_SEL: u1,
    +            /// use for debug
    +            RTC_GPIO_PIN5_FUN_SEL: u4,
    +            /// use for debug
    +            RTC_GPIO_PIN4_FUN_SEL: u4,
    +            /// use for debug
    +            RTC_GPIO_PIN3_FUN_SEL: u4,
    +            /// use for debug
    +            RTC_GPIO_PIN2_FUN_SEL: u4,
    +            /// use for debug
    +            RTC_GPIO_PIN1_FUN_SEL: u4,
    +            /// use for debug
    +            RTC_GPIO_PIN0_FUN_SEL: u4,
    +        }), base_address + 0x118);
    +
    +        /// address: 0x6000811c
    +        /// rtc configure register
    +        pub const SENSOR_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            reserved23: u1,
    +            reserved24: u1,
    +            reserved25: u1,
    +            reserved26: u1,
    +            /// reg_sar2_pwdet_cct
    +            SAR2_PWDET_CCT: u3,
    +            /// force power up SAR
    +            FORCE_XPD_SAR: u2,
    +        }), base_address + 0x11c);
    +
    +        /// address: 0x60008120
    +        /// rtc configure register
    +        pub const DBG_SAR_SEL = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            reserved23: u1,
    +            reserved24: u1,
    +            reserved25: u1,
    +            reserved26: u1,
    +            /// use for debug
    +            SAR_DEBUG_SEL: u5,
    +        }), base_address + 0x120);
    +
    +        /// address: 0x60008124
    +        /// rtc configure register
    +        pub const PG_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            reserved23: u1,
    +            reserved24: u1,
    +            reserved25: u1,
    +            /// power glitch desense
    +            POWER_GLITCH_DSENSE: u2,
    +            /// force disable power glitch
    +            POWER_GLITCH_FORCE_PD: u1,
    +            /// force enable power glitch
    +            POWER_GLITCH_FORCE_PU: u1,
    +            /// use efuse value control power glitch enable
    +            POWER_GLITCH_EFUSE_SEL: u1,
    +            /// enable power glitch
    +            POWER_GLITCH_EN: u1,
    +        }), base_address + 0x124);
    +
    +        /// address: 0x600081fc
    +        /// rtc configure register
    +        pub const DATE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// verision
    +            RTC_CNTL_DATE: u28,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +        }), base_address + 0x1fc);
    +    };
    +
    +    /// Sensitive
    +    pub const SENSITIVE = struct {
    +        pub const base_address = 0x600c1000;
    +
    +        /// address: 0x600c1000
    +        /// SENSITIVE_ROM_TABLE_LOCK_REG
    +        pub const ROM_TABLE_LOCK = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x0);
    +
    +        /// address: 0x600c1004
    +        /// SENSITIVE_ROM_TABLE_REG
    +        pub const ROM_TABLE = @intToPtr(*volatile u32, base_address + 0x4);
    +
    +        /// address: 0x600c1008
    +        /// SENSITIVE_PRIVILEGE_MODE_SEL_LOCK_REG
    +        pub const PRIVILEGE_MODE_SEL_LOCK = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x8);
    +
    +        /// address: 0x600c100c
    +        /// SENSITIVE_PRIVILEGE_MODE_SEL_REG
    +        pub const PRIVILEGE_MODE_SEL = @intToPtr(*volatile MmioInt(32, u1), base_address + 0xc);
    +
    +        /// address: 0x600c1010
    +        /// SENSITIVE_APB_PERIPHERAL_ACCESS_0_REG
    +        pub const APB_PERIPHERAL_ACCESS_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// apb_peripheral_access_lock
    +            APB_PERIPHERAL_ACCESS_LOCK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x10);
    +
    +        /// address: 0x600c1014
    +        /// SENSITIVE_APB_PERIPHERAL_ACCESS_1_REG
    +        pub const APB_PERIPHERAL_ACCESS_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// apb_peripheral_access_split_burst
    +            APB_PERIPHERAL_ACCESS_SPLIT_BURST: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x14);
    +
    +        /// address: 0x600c1018
    +        /// SENSITIVE_INTERNAL_SRAM_USAGE_0_REG
    +        pub const INTERNAL_SRAM_USAGE_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// internal_sram_usage_lock
    +            INTERNAL_SRAM_USAGE_LOCK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x18);
    +
    +        /// address: 0x600c101c
    +        /// SENSITIVE_INTERNAL_SRAM_USAGE_1_REG
    +        pub const INTERNAL_SRAM_USAGE_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// internal_sram_usage_cpu_cache
    +            INTERNAL_SRAM_USAGE_CPU_CACHE: u1,
    +            /// internal_sram_usage_cpu_sram
    +            INTERNAL_SRAM_USAGE_CPU_SRAM: u3,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x1c);
    +
    +        /// address: 0x600c1020
    +        /// SENSITIVE_INTERNAL_SRAM_USAGE_3_REG
    +        pub const INTERNAL_SRAM_USAGE_3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// internal_sram_usage_mac_dump_sram
    +            INTERNAL_SRAM_USAGE_MAC_DUMP_SRAM: u3,
    +            /// internal_sram_alloc_mac_dump
    +            INTERNAL_SRAM_ALLOC_MAC_DUMP: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x20);
    +
    +        /// address: 0x600c1024
    +        /// SENSITIVE_INTERNAL_SRAM_USAGE_4_REG
    +        pub const INTERNAL_SRAM_USAGE_4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// internal_sram_usage_log_sram
    +            INTERNAL_SRAM_USAGE_LOG_SRAM: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x24);
    +
    +        /// address: 0x600c1028
    +        /// SENSITIVE_CACHE_TAG_ACCESS_0_REG
    +        pub const CACHE_TAG_ACCESS_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// cache_tag_access_lock
    +            CACHE_TAG_ACCESS_LOCK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x28);
    +
    +        /// address: 0x600c102c
    +        /// SENSITIVE_CACHE_TAG_ACCESS_1_REG
    +        pub const CACHE_TAG_ACCESS_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// pro_i_tag_rd_acs
    +            PRO_I_TAG_RD_ACS: u1,
    +            /// pro_i_tag_wr_acs
    +            PRO_I_TAG_WR_ACS: u1,
    +            /// pro_d_tag_rd_acs
    +            PRO_D_TAG_RD_ACS: u1,
    +            /// pro_d_tag_wr_acs
    +            PRO_D_TAG_WR_ACS: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x2c);
    +
    +        /// address: 0x600c1030
    +        /// SENSITIVE_CACHE_MMU_ACCESS_0_REG
    +        pub const CACHE_MMU_ACCESS_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// cache_mmu_access_lock
    +            CACHE_MMU_ACCESS_LOCK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x30);
    +
    +        /// address: 0x600c1034
    +        /// SENSITIVE_CACHE_MMU_ACCESS_1_REG
    +        pub const CACHE_MMU_ACCESS_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// pro_mmu_rd_acs
    +            PRO_MMU_RD_ACS: u1,
    +            /// pro_mmu_wr_acs
    +            PRO_MMU_WR_ACS: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0x34);
    +
    +        /// address: 0x600c1038
    +        /// SENSITIVE_DMA_APBPERI_SPI2_PMS_CONSTRAIN_0_REG
    +        pub const DMA_APBPERI_SPI2_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// dma_apbperi_spi2_pms_constrain_lock
    +            DMA_APBPERI_SPI2_PMS_CONSTRAIN_LOCK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x38);
    +
    +        /// address: 0x600c103c
    +        /// SENSITIVE_DMA_APBPERI_SPI2_PMS_CONSTRAIN_1_REG
    +        pub const DMA_APBPERI_SPI2_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// dma_apbperi_spi2_pms_constrain_sram_world_0_pms_0
    +            DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    +            /// dma_apbperi_spi2_pms_constrain_sram_world_0_pms_1
    +            DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    +            /// dma_apbperi_spi2_pms_constrain_sram_world_0_pms_2
    +            DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    +            /// dma_apbperi_spi2_pms_constrain_sram_world_0_pms_3
    +            DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            /// dma_apbperi_spi2_pms_constrain_sram_world_1_pms_0
    +            DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    +            /// dma_apbperi_spi2_pms_constrain_sram_world_1_pms_1
    +            DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    +            /// dma_apbperi_spi2_pms_constrain_sram_world_1_pms_2
    +            DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    +            /// dma_apbperi_spi2_pms_constrain_sram_world_1_pms_3
    +            DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0x3c);
    +
    +        /// address: 0x600c1040
    +        /// SENSITIVE_DMA_APBPERI_UCHI0_PMS_CONSTRAIN_0_REG
    +        pub const DMA_APBPERI_UCHI0_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// dma_apbperi_uchi0_pms_constrain_lock
    +            DMA_APBPERI_UCHI0_PMS_CONSTRAIN_LOCK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x40);
    +
    +        /// address: 0x600c1044
    +        /// SENSITIVE_DMA_APBPERI_UCHI0_PMS_CONSTRAIN_1_REG
    +        pub const DMA_APBPERI_UCHI0_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_0
    +            DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    +            /// dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_1
    +            DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    +            /// dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_2
    +            DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    +            /// dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_3
    +            DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            /// dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_0
    +            DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    +            /// dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_1
    +            DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    +            /// dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_2
    +            DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    +            /// dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_3
    +            DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0x44);
    +
    +        /// address: 0x600c1048
    +        /// SENSITIVE_DMA_APBPERI_I2S0_PMS_CONSTRAIN_0_REG
    +        pub const DMA_APBPERI_I2S0_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// dma_apbperi_i2s0_pms_constrain_lock
    +            DMA_APBPERI_I2S0_PMS_CONSTRAIN_LOCK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x48);
    +
    +        /// address: 0x600c104c
    +        /// SENSITIVE_DMA_APBPERI_I2S0_PMS_CONSTRAIN_1_REG
    +        pub const DMA_APBPERI_I2S0_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_0
    +            DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    +            /// dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_1
    +            DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    +            /// dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_2
    +            DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    +            /// dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_3
    +            DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            /// dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_0
    +            DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    +            /// dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_1
    +            DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    +            /// dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_2
    +            DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    +            /// dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_3
    +            DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0x4c);
    +
    +        /// address: 0x600c1050
    +        /// SENSITIVE_DMA_APBPERI_MAC_PMS_CONSTRAIN_0_REG
    +        pub const DMA_APBPERI_MAC_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// dma_apbperi_mac_pms_constrain_lock
    +            DMA_APBPERI_MAC_PMS_CONSTRAIN_LOCK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x50);
    +
    +        /// address: 0x600c1054
    +        /// SENSITIVE_DMA_APBPERI_MAC_PMS_CONSTRAIN_1_REG
    +        pub const DMA_APBPERI_MAC_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// dma_apbperi_mac_pms_constrain_sram_world_0_pms_0
    +            DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    +            /// dma_apbperi_mac_pms_constrain_sram_world_0_pms_1
    +            DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    +            /// dma_apbperi_mac_pms_constrain_sram_world_0_pms_2
    +            DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    +            /// dma_apbperi_mac_pms_constrain_sram_world_0_pms_3
    +            DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            /// dma_apbperi_mac_pms_constrain_sram_world_1_pms_0
    +            DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    +            /// dma_apbperi_mac_pms_constrain_sram_world_1_pms_1
    +            DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    +            /// dma_apbperi_mac_pms_constrain_sram_world_1_pms_2
    +            DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    +            /// dma_apbperi_mac_pms_constrain_sram_world_1_pms_3
    +            DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0x54);
    +
    +        /// address: 0x600c1058
    +        /// SENSITIVE_DMA_APBPERI_BACKUP_PMS_CONSTRAIN_0_REG
    +        pub const DMA_APBPERI_BACKUP_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// dma_apbperi_backup_pms_constrain_lock
    +            DMA_APBPERI_BACKUP_PMS_CONSTRAIN_LOCK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x58);
    +
    +        /// address: 0x600c105c
    +        /// SENSITIVE_DMA_APBPERI_BACKUP_PMS_CONSTRAIN_1_REG
    +        pub const DMA_APBPERI_BACKUP_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// dma_apbperi_backup_pms_constrain_sram_world_0_pms_0
    +            DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    +            /// dma_apbperi_backup_pms_constrain_sram_world_0_pms_1
    +            DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    +            /// dma_apbperi_backup_pms_constrain_sram_world_0_pms_2
    +            DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    +            /// dma_apbperi_backup_pms_constrain_sram_world_0_pms_3
    +            DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            /// dma_apbperi_backup_pms_constrain_sram_world_1_pms_0
    +            DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    +            /// dma_apbperi_backup_pms_constrain_sram_world_1_pms_1
    +            DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    +            /// dma_apbperi_backup_pms_constrain_sram_world_1_pms_2
    +            DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    +            /// dma_apbperi_backup_pms_constrain_sram_world_1_pms_3
    +            DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0x5c);
    +
    +        /// address: 0x600c1060
    +        /// SENSITIVE_DMA_APBPERI_LC_PMS_CONSTRAIN_0_REG
    +        pub const DMA_APBPERI_LC_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// dma_apbperi_lc_pms_constrain_lock
    +            DMA_APBPERI_LC_PMS_CONSTRAIN_LOCK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x60);
    +
    +        /// address: 0x600c1064
    +        /// SENSITIVE_DMA_APBPERI_LC_PMS_CONSTRAIN_1_REG
    +        pub const DMA_APBPERI_LC_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// dma_apbperi_lc_pms_constrain_sram_world_0_pms_0
    +            DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    +            /// dma_apbperi_lc_pms_constrain_sram_world_0_pms_1
    +            DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    +            /// dma_apbperi_lc_pms_constrain_sram_world_0_pms_2
    +            DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    +            /// dma_apbperi_lc_pms_constrain_sram_world_0_pms_3
    +            DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            /// dma_apbperi_lc_pms_constrain_sram_world_1_pms_0
    +            DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    +            /// dma_apbperi_lc_pms_constrain_sram_world_1_pms_1
    +            DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    +            /// dma_apbperi_lc_pms_constrain_sram_world_1_pms_2
    +            DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    +            /// dma_apbperi_lc_pms_constrain_sram_world_1_pms_3
    +            DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0x64);
    +
    +        /// address: 0x600c1068
    +        /// SENSITIVE_DMA_APBPERI_AES_PMS_CONSTRAIN_0_REG
    +        pub const DMA_APBPERI_AES_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// dma_apbperi_aes_pms_constrain_lock
    +            DMA_APBPERI_AES_PMS_CONSTRAIN_LOCK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x68);
    +
    +        /// address: 0x600c106c
    +        /// SENSITIVE_DMA_APBPERI_AES_PMS_CONSTRAIN_1_REG
    +        pub const DMA_APBPERI_AES_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// dma_apbperi_aes_pms_constrain_sram_world_0_pms_0
    +            DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    +            /// dma_apbperi_aes_pms_constrain_sram_world_0_pms_1
    +            DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    +            /// dma_apbperi_aes_pms_constrain_sram_world_0_pms_2
    +            DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    +            /// dma_apbperi_aes_pms_constrain_sram_world_0_pms_3
    +            DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            /// dma_apbperi_aes_pms_constrain_sram_world_1_pms_0
    +            DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    +            /// dma_apbperi_aes_pms_constrain_sram_world_1_pms_1
    +            DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    +            /// dma_apbperi_aes_pms_constrain_sram_world_1_pms_2
    +            DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    +            /// dma_apbperi_aes_pms_constrain_sram_world_1_pms_3
    +            DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0x6c);
    +
    +        /// address: 0x600c1070
    +        /// SENSITIVE_DMA_APBPERI_SHA_PMS_CONSTRAIN_0_REG
    +        pub const DMA_APBPERI_SHA_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// dma_apbperi_sha_pms_constrain_lock
    +            DMA_APBPERI_SHA_PMS_CONSTRAIN_LOCK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x70);
    +
    +        /// address: 0x600c1074
    +        /// SENSITIVE_DMA_APBPERI_SHA_PMS_CONSTRAIN_1_REG
    +        pub const DMA_APBPERI_SHA_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// dma_apbperi_sha_pms_constrain_sram_world_0_pms_0
    +            DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    +            /// dma_apbperi_sha_pms_constrain_sram_world_0_pms_1
    +            DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    +            /// dma_apbperi_sha_pms_constrain_sram_world_0_pms_2
    +            DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    +            /// dma_apbperi_sha_pms_constrain_sram_world_0_pms_3
    +            DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            /// dma_apbperi_sha_pms_constrain_sram_world_1_pms_0
    +            DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    +            /// dma_apbperi_sha_pms_constrain_sram_world_1_pms_1
    +            DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    +            /// dma_apbperi_sha_pms_constrain_sram_world_1_pms_2
    +            DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    +            /// dma_apbperi_sha_pms_constrain_sram_world_1_pms_3
    +            DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0x74);
    +
    +        /// address: 0x600c1078
    +        /// SENSITIVE_DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_0_REG
    +        pub const DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// dma_apbperi_adc_dac_pms_constrain_lock
    +            DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_LOCK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x78);
    +
    +        /// address: 0x600c107c
    +        /// SENSITIVE_DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_1_REG
    +        pub const DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_0
    +            DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    +            /// dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_1
    +            DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    +            /// dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_2
    +            DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    +            /// dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_3
    +            DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            /// dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_0
    +            DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    +            /// dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_1
    +            DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    +            /// dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_2
    +            DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    +            /// dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_3
    +            DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0x7c);
    +
    +        /// address: 0x600c1080
    +        /// SENSITIVE_DMA_APBPERI_PMS_MONITOR_0_REG
    +        pub const DMA_APBPERI_PMS_MONITOR_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// dma_apbperi_pms_monitor_lock
    +            DMA_APBPERI_PMS_MONITOR_LOCK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x80);
    +
    +        /// address: 0x600c1084
    +        /// SENSITIVE_DMA_APBPERI_PMS_MONITOR_1_REG
    +        pub const DMA_APBPERI_PMS_MONITOR_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// dma_apbperi_pms_monitor_violate_clr
    +            DMA_APBPERI_PMS_MONITOR_VIOLATE_CLR: u1,
    +            /// dma_apbperi_pms_monitor_violate_en
    +            DMA_APBPERI_PMS_MONITOR_VIOLATE_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0x84);
    +
    +        /// address: 0x600c1088
    +        /// SENSITIVE_DMA_APBPERI_PMS_MONITOR_2_REG
    +        pub const DMA_APBPERI_PMS_MONITOR_2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// dma_apbperi_pms_monitor_violate_intr
    +            DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR: u1,
    +            /// dma_apbperi_pms_monitor_violate_status_world
    +            DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_WORLD: u2,
    +            /// dma_apbperi_pms_monitor_violate_status_addr
    +            DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_ADDR: u24,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +        }), base_address + 0x88);
    +
    +        /// address: 0x600c108c
    +        /// SENSITIVE_DMA_APBPERI_PMS_MONITOR_3_REG
    +        pub const DMA_APBPERI_PMS_MONITOR_3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// dma_apbperi_pms_monitor_violate_status_wr
    +            DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_WR: u1,
    +            /// dma_apbperi_pms_monitor_violate_status_byteen
    +            DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_BYTEEN: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +        }), base_address + 0x8c);
    +
    +        /// address: 0x600c1090
    +        /// SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_0_REG
    +        pub const CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_x_iram0_dram0_dma_split_line_constrain_lock
    +            CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_LOCK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x90);
    +
    +        /// address: 0x600c1094
    +        /// SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_1_REG
    +        pub const CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_x_iram0_dram0_dma_sram_category_0
    +            CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_0: u2,
    +            /// core_x_iram0_dram0_dma_sram_category_1
    +            CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_1: u2,
    +            /// core_x_iram0_dram0_dma_sram_category_2
    +            CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_2: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            /// core_x_iram0_dram0_dma_sram_splitaddr
    +            CORE_X_IRAM0_DRAM0_DMA_SRAM_SPLITADDR: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +        }), base_address + 0x94);
    +
    +        /// address: 0x600c1098
    +        /// SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_2_REG
    +        pub const CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_x_iram0_sram_line_0_category_0
    +            CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_0: u2,
    +            /// core_x_iram0_sram_line_0_category_1
    +            CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_1: u2,
    +            /// core_x_iram0_sram_line_0_category_2
    +            CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_2: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            /// core_x_iram0_sram_line_0_splitaddr
    +            CORE_X_IRAM0_SRAM_LINE_0_SPLITADDR: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +        }), base_address + 0x98);
    +
    +        /// address: 0x600c109c
    +        /// SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_3_REG
    +        pub const CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_x_iram0_sram_line_1_category_0
    +            CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_0: u2,
    +            /// core_x_iram0_sram_line_1_category_1
    +            CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_1: u2,
    +            /// core_x_iram0_sram_line_1_category_2
    +            CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_2: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            /// core_x_iram0_sram_line_1_splitaddr
    +            CORE_X_IRAM0_SRAM_LINE_1_SPLITADDR: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +        }), base_address + 0x9c);
    +
    +        /// address: 0x600c10a0
    +        /// SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_4_REG
    +        pub const CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_x_dram0_dma_sram_line_0_category_0
    +            CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_0: u2,
    +            /// core_x_dram0_dma_sram_line_0_category_1
    +            CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_1: u2,
    +            /// core_x_dram0_dma_sram_line_0_category_2
    +            CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_2: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            /// core_x_dram0_dma_sram_line_0_splitaddr
    +            CORE_X_DRAM0_DMA_SRAM_LINE_0_SPLITADDR: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +        }), base_address + 0xa0);
    +
    +        /// address: 0x600c10a4
    +        /// SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_5_REG
    +        pub const CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_5 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_x_dram0_dma_sram_line_1_category_0
    +            CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_0: u2,
    +            /// core_x_dram0_dma_sram_line_1_category_1
    +            CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_1: u2,
    +            /// core_x_dram0_dma_sram_line_1_category_2
    +            CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_2: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            /// core_x_dram0_dma_sram_line_1_splitaddr
    +            CORE_X_DRAM0_DMA_SRAM_LINE_1_SPLITADDR: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +        }), base_address + 0xa4);
    +
    +        /// address: 0x600c10a8
    +        /// SENSITIVE_CORE_X_IRAM0_PMS_CONSTRAIN_0_REG
    +        pub const CORE_X_IRAM0_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_x_iram0_pms_constrain_lock
    +            CORE_X_IRAM0_PMS_CONSTRAIN_LOCK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0xa8);
    +
    +        /// address: 0x600c10ac
    +        /// SENSITIVE_CORE_X_IRAM0_PMS_CONSTRAIN_1_REG
    +        pub const CORE_X_IRAM0_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_x_iram0_pms_constrain_sram_world_1_pms_0
    +            CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u3,
    +            /// core_x_iram0_pms_constrain_sram_world_1_pms_1
    +            CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u3,
    +            /// core_x_iram0_pms_constrain_sram_world_1_pms_2
    +            CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u3,
    +            /// core_x_iram0_pms_constrain_sram_world_1_pms_3
    +            CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u3,
    +            /// core_x_iram0_pms_constrain_sram_world_1_cachedataarray_pms_0
    +            CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_CACHEDATAARRAY_PMS_0: u3,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            /// core_x_iram0_pms_constrain_rom_world_1_pms
    +            CORE_X_IRAM0_PMS_CONSTRAIN_ROM_WORLD_1_PMS: u3,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +        }), base_address + 0xac);
    +
    +        /// address: 0x600c10b0
    +        /// SENSITIVE_CORE_X_IRAM0_PMS_CONSTRAIN_2_REG
    +        pub const CORE_X_IRAM0_PMS_CONSTRAIN_2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_x_iram0_pms_constrain_sram_world_0_pms_0
    +            CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u3,
    +            /// core_x_iram0_pms_constrain_sram_world_0_pms_1
    +            CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u3,
    +            /// core_x_iram0_pms_constrain_sram_world_0_pms_2
    +            CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u3,
    +            /// core_x_iram0_pms_constrain_sram_world_0_pms_3
    +            CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u3,
    +            /// core_x_iram0_pms_constrain_sram_world_0_cachedataarray_pms_0
    +            CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_CACHEDATAARRAY_PMS_0: u3,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            /// core_x_iram0_pms_constrain_rom_world_0_pms
    +            CORE_X_IRAM0_PMS_CONSTRAIN_ROM_WORLD_0_PMS: u3,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +        }), base_address + 0xb0);
    +
    +        /// address: 0x600c10b4
    +        /// SENSITIVE_CORE_0_IRAM0_PMS_MONITOR_0_REG
    +        pub const CORE_0_IRAM0_PMS_MONITOR_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_0_iram0_pms_monitor_lock
    +            CORE_0_IRAM0_PMS_MONITOR_LOCK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0xb4);
    +
    +        /// address: 0x600c10b8
    +        /// SENSITIVE_CORE_0_IRAM0_PMS_MONITOR_1_REG
    +        pub const CORE_0_IRAM0_PMS_MONITOR_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_0_iram0_pms_monitor_violate_clr
    +            CORE_0_IRAM0_PMS_MONITOR_VIOLATE_CLR: u1,
    +            /// core_0_iram0_pms_monitor_violate_en
    +            CORE_0_IRAM0_PMS_MONITOR_VIOLATE_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0xb8);
    +
    +        /// address: 0x600c10bc
    +        /// SENSITIVE_CORE_0_IRAM0_PMS_MONITOR_2_REG
    +        pub const CORE_0_IRAM0_PMS_MONITOR_2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_0_iram0_pms_monitor_violate_intr
    +            CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR: u1,
    +            /// core_0_iram0_pms_monitor_violate_status_wr
    +            CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_WR: u1,
    +            /// core_0_iram0_pms_monitor_violate_status_loadstore
    +            CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_LOADSTORE: u1,
    +            /// core_0_iram0_pms_monitor_violate_status_world
    +            CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_WORLD: u2,
    +            /// core_0_iram0_pms_monitor_violate_status_addr
    +            CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_ADDR: u24,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +        }), base_address + 0xbc);
    +
    +        /// address: 0x600c10c0
    +        /// SENSITIVE_CORE_X_DRAM0_PMS_CONSTRAIN_0_REG
    +        pub const CORE_X_DRAM0_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_x_dram0_pms_constrain_lock
    +            CORE_X_DRAM0_PMS_CONSTRAIN_LOCK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0xc0);
    +
    +        /// address: 0x600c10c4
    +        /// SENSITIVE_CORE_X_DRAM0_PMS_CONSTRAIN_1_REG
    +        pub const CORE_X_DRAM0_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_x_dram0_pms_constrain_sram_world_0_pms_0
    +            CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    +            /// core_x_dram0_pms_constrain_sram_world_0_pms_1
    +            CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    +            /// core_x_dram0_pms_constrain_sram_world_0_pms_2
    +            CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    +            /// core_x_dram0_pms_constrain_sram_world_0_pms_3
    +            CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            /// core_x_dram0_pms_constrain_sram_world_1_pms_0
    +            CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    +            /// core_x_dram0_pms_constrain_sram_world_1_pms_1
    +            CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    +            /// core_x_dram0_pms_constrain_sram_world_1_pms_2
    +            CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    +            /// core_x_dram0_pms_constrain_sram_world_1_pms_3
    +            CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            /// core_x_dram0_pms_constrain_rom_world_0_pms
    +            CORE_X_DRAM0_PMS_CONSTRAIN_ROM_WORLD_0_PMS: u2,
    +            /// core_x_dram0_pms_constrain_rom_world_1_pms
    +            CORE_X_DRAM0_PMS_CONSTRAIN_ROM_WORLD_1_PMS: u2,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +        }), base_address + 0xc4);
    +
    +        /// address: 0x600c10c8
    +        /// SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_0_REG
    +        pub const CORE_0_DRAM0_PMS_MONITOR_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_0_dram0_pms_monitor_lock
    +            CORE_0_DRAM0_PMS_MONITOR_LOCK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0xc8);
    +
    +        /// address: 0x600c10cc
    +        /// SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_1_REG
    +        pub const CORE_0_DRAM0_PMS_MONITOR_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_0_dram0_pms_monitor_violate_clr
    +            CORE_0_DRAM0_PMS_MONITOR_VIOLATE_CLR: u1,
    +            /// core_0_dram0_pms_monitor_violate_en
    +            CORE_0_DRAM0_PMS_MONITOR_VIOLATE_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0xcc);
    +
    +        /// address: 0x600c10d0
    +        /// SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_2_REG
    +        pub const CORE_0_DRAM0_PMS_MONITOR_2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_0_dram0_pms_monitor_violate_intr
    +            CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR: u1,
    +            /// core_0_dram0_pms_monitor_violate_status_lock
    +            CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_LOCK: u1,
    +            /// core_0_dram0_pms_monitor_violate_status_world
    +            CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_WORLD: u2,
    +            /// core_0_dram0_pms_monitor_violate_status_addr
    +            CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_ADDR: u24,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +        }), base_address + 0xd0);
    +
    +        /// address: 0x600c10d4
    +        /// SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_3_REG
    +        pub const CORE_0_DRAM0_PMS_MONITOR_3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_0_dram0_pms_monitor_violate_status_wr
    +            CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_WR: u1,
    +            /// core_0_dram0_pms_monitor_violate_status_byteen
    +            CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_BYTEEN: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +        }), base_address + 0xd4);
    +
    +        /// address: 0x600c10d8
    +        /// SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_0_REG
    +        pub const CORE_0_PIF_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_0_pif_pms_constrain_lock
    +            CORE_0_PIF_PMS_CONSTRAIN_LOCK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0xd8);
    +
    +        /// address: 0x600c10dc
    +        /// SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_1_REG
    +        pub const CORE_0_PIF_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_0_pif_pms_constrain_world_0_uart
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_UART: u2,
    +            /// core_0_pif_pms_constrain_world_0_g0spi_1
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_G0SPI_1: u2,
    +            /// core_0_pif_pms_constrain_world_0_g0spi_0
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_G0SPI_0: u2,
    +            /// core_0_pif_pms_constrain_world_0_gpio
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_GPIO: u2,
    +            /// core_0_pif_pms_constrain_world_0_fe2
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_FE2: u2,
    +            /// core_0_pif_pms_constrain_world_0_fe
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_FE: u2,
    +            /// core_0_pif_pms_constrain_world_0_timer
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_TIMER: u2,
    +            /// core_0_pif_pms_constrain_world_0_rtc
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_RTC: u2,
    +            /// core_0_pif_pms_constrain_world_0_io_mux
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_IO_MUX: u2,
    +            /// core_0_pif_pms_constrain_world_0_wdg
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_WDG: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            /// core_0_pif_pms_constrain_world_0_misc
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_MISC: u2,
    +            /// core_0_pif_pms_constrain_world_0_i2c
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_I2C: u2,
    +            reserved4: u1,
    +            reserved5: u1,
    +            /// core_0_pif_pms_constrain_world_0_uart1
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_UART1: u2,
    +        }), base_address + 0xdc);
    +
    +        /// address: 0x600c10e0
    +        /// SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_2_REG
    +        pub const CORE_0_PIF_PMS_CONSTRAIN_2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_0_pif_pms_constrain_world_0_bt
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_BT: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// core_0_pif_pms_constrain_world_0_i2c_ext0
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_I2C_EXT0: u2,
    +            /// core_0_pif_pms_constrain_world_0_uhci0
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_UHCI0: u2,
    +            reserved2: u1,
    +            reserved3: u1,
    +            /// core_0_pif_pms_constrain_world_0_rmt
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_RMT: u2,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            /// core_0_pif_pms_constrain_world_0_ledc
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_LEDC: u2,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            /// core_0_pif_pms_constrain_world_0_bb
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_BB: u2,
    +            reserved12: u1,
    +            reserved13: u1,
    +            /// core_0_pif_pms_constrain_world_0_timergroup
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_TIMERGROUP: u2,
    +            /// core_0_pif_pms_constrain_world_0_timergroup1
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_TIMERGROUP1: u2,
    +            /// core_0_pif_pms_constrain_world_0_systimer
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SYSTIMER: u2,
    +        }), base_address + 0xe0);
    +
    +        /// address: 0x600c10e4
    +        /// SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_3_REG
    +        pub const CORE_0_PIF_PMS_CONSTRAIN_3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_0_pif_pms_constrain_world_0_spi_2
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SPI_2: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// core_0_pif_pms_constrain_world_0_apb_ctrl
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_APB_CTRL: u2,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            /// core_0_pif_pms_constrain_world_0_can
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CAN: u2,
    +            reserved6: u1,
    +            reserved7: u1,
    +            /// core_0_pif_pms_constrain_world_0_i2s1
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_I2S1: u2,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            /// core_0_pif_pms_constrain_world_0_rwbt
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_RWBT: u2,
    +            reserved14: u1,
    +            reserved15: u1,
    +            /// core_0_pif_pms_constrain_world_0_wifimac
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_WIFIMAC: u2,
    +            /// core_0_pif_pms_constrain_world_0_pwr
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_PWR: u2,
    +            padding0: u1,
    +            padding1: u1,
    +        }), base_address + 0xe4);
    +
    +        /// address: 0x600c10e8
    +        /// SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_4_REG
    +        pub const CORE_0_PIF_PMS_CONSTRAIN_4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// core_0_pif_pms_constrain_world_0_usb_wrap
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_USB_WRAP: u2,
    +            /// core_0_pif_pms_constrain_world_0_crypto_peri
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CRYPTO_PERI: u2,
    +            /// core_0_pif_pms_constrain_world_0_crypto_dma
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CRYPTO_DMA: u2,
    +            /// core_0_pif_pms_constrain_world_0_apb_adc
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_APB_ADC: u2,
    +            reserved2: u1,
    +            reserved3: u1,
    +            /// core_0_pif_pms_constrain_world_0_bt_pwr
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_BT_PWR: u2,
    +            /// core_0_pif_pms_constrain_world_0_usb_device
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_USB_DEVICE: u2,
    +            /// core_0_pif_pms_constrain_world_0_system
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SYSTEM: u2,
    +            /// core_0_pif_pms_constrain_world_0_sensitive
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SENSITIVE: u2,
    +            /// core_0_pif_pms_constrain_world_0_interrupt
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_INTERRUPT: u2,
    +            /// core_0_pif_pms_constrain_world_0_dma_copy
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_DMA_COPY: u2,
    +            /// core_0_pif_pms_constrain_world_0_cache_config
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CACHE_CONFIG: u2,
    +            /// core_0_pif_pms_constrain_world_0_ad
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_AD: u2,
    +            /// core_0_pif_pms_constrain_world_0_dio
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_DIO: u2,
    +            /// core_0_pif_pms_constrain_world_0_world_controller
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_WORLD_CONTROLLER: u2,
    +        }), base_address + 0xe8);
    +
    +        /// address: 0x600c10ec
    +        /// SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_5_REG
    +        pub const CORE_0_PIF_PMS_CONSTRAIN_5 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_0_pif_pms_constrain_world_1_uart
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_UART: u2,
    +            /// core_0_pif_pms_constrain_world_1_g0spi_1
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_G0SPI_1: u2,
    +            /// core_0_pif_pms_constrain_world_1_g0spi_0
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_G0SPI_0: u2,
    +            /// core_0_pif_pms_constrain_world_1_gpio
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_GPIO: u2,
    +            /// core_0_pif_pms_constrain_world_1_fe2
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_FE2: u2,
    +            /// core_0_pif_pms_constrain_world_1_fe
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_FE: u2,
    +            /// core_0_pif_pms_constrain_world_1_timer
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_TIMER: u2,
    +            /// core_0_pif_pms_constrain_world_1_rtc
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_RTC: u2,
    +            /// core_0_pif_pms_constrain_world_1_io_mux
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_IO_MUX: u2,
    +            /// core_0_pif_pms_constrain_world_1_wdg
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_WDG: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            /// core_0_pif_pms_constrain_world_1_misc
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_MISC: u2,
    +            /// core_0_pif_pms_constrain_world_1_i2c
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_I2C: u2,
    +            reserved4: u1,
    +            reserved5: u1,
    +            /// core_0_pif_pms_constrain_world_1_uart1
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_UART1: u2,
    +        }), base_address + 0xec);
    +
    +        /// address: 0x600c10f0
    +        /// SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_6_REG
    +        pub const CORE_0_PIF_PMS_CONSTRAIN_6 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_0_pif_pms_constrain_world_1_bt
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_BT: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// core_0_pif_pms_constrain_world_1_i2c_ext0
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_I2C_EXT0: u2,
    +            /// core_0_pif_pms_constrain_world_1_uhci0
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_UHCI0: u2,
    +            reserved2: u1,
    +            reserved3: u1,
    +            /// core_0_pif_pms_constrain_world_1_rmt
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_RMT: u2,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            /// core_0_pif_pms_constrain_world_1_ledc
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_LEDC: u2,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            /// core_0_pif_pms_constrain_world_1_bb
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_BB: u2,
    +            reserved12: u1,
    +            reserved13: u1,
    +            /// core_0_pif_pms_constrain_world_1_timergroup
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_TIMERGROUP: u2,
    +            /// core_0_pif_pms_constrain_world_1_timergroup1
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_TIMERGROUP1: u2,
    +            /// core_0_pif_pms_constrain_world_1_systimer
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SYSTIMER: u2,
    +        }), base_address + 0xf0);
    +
    +        /// address: 0x600c10f4
    +        /// SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_7_REG
    +        pub const CORE_0_PIF_PMS_CONSTRAIN_7 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_0_pif_pms_constrain_world_1_spi_2
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SPI_2: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// core_0_pif_pms_constrain_world_1_apb_ctrl
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_APB_CTRL: u2,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            /// core_0_pif_pms_constrain_world_1_can
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CAN: u2,
    +            reserved6: u1,
    +            reserved7: u1,
    +            /// core_0_pif_pms_constrain_world_1_i2s1
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_I2S1: u2,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            /// core_0_pif_pms_constrain_world_1_rwbt
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_RWBT: u2,
    +            reserved14: u1,
    +            reserved15: u1,
    +            /// core_0_pif_pms_constrain_world_1_wifimac
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_WIFIMAC: u2,
    +            /// core_0_pif_pms_constrain_world_1_pwr
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_PWR: u2,
    +            padding0: u1,
    +            padding1: u1,
    +        }), base_address + 0xf4);
    +
    +        /// address: 0x600c10f8
    +        /// SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_8_REG
    +        pub const CORE_0_PIF_PMS_CONSTRAIN_8 = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// core_0_pif_pms_constrain_world_1_usb_wrap
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_USB_WRAP: u2,
    +            /// core_0_pif_pms_constrain_world_1_crypto_peri
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CRYPTO_PERI: u2,
    +            /// core_0_pif_pms_constrain_world_1_crypto_dma
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CRYPTO_DMA: u2,
    +            /// core_0_pif_pms_constrain_world_1_apb_adc
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_APB_ADC: u2,
    +            reserved2: u1,
    +            reserved3: u1,
    +            /// core_0_pif_pms_constrain_world_1_bt_pwr
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_BT_PWR: u2,
    +            /// core_0_pif_pms_constrain_world_1_usb_device
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_USB_DEVICE: u2,
    +            /// core_0_pif_pms_constrain_world_1_system
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SYSTEM: u2,
    +            /// core_0_pif_pms_constrain_world_1_sensitive
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SENSITIVE: u2,
    +            /// core_0_pif_pms_constrain_world_1_interrupt
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_INTERRUPT: u2,
    +            /// core_0_pif_pms_constrain_world_1_dma_copy
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_DMA_COPY: u2,
    +            /// core_0_pif_pms_constrain_world_1_cache_config
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CACHE_CONFIG: u2,
    +            /// core_0_pif_pms_constrain_world_1_ad
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_AD: u2,
    +            /// core_0_pif_pms_constrain_world_1_dio
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_DIO: u2,
    +            /// core_0_pif_pms_constrain_world_1_world_controller
    +            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_WORLD_CONTROLLER: u2,
    +        }), base_address + 0xf8);
    +
    +        /// address: 0x600c10fc
    +        /// SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_9_REG
    +        pub const CORE_0_PIF_PMS_CONSTRAIN_9 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_0_pif_pms_constrain_rtcfast_spltaddr_world_0
    +            CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_SPLTADDR_WORLD_0: u11,
    +            /// core_0_pif_pms_constrain_rtcfast_spltaddr_world_1
    +            CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_SPLTADDR_WORLD_1: u11,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +        }), base_address + 0xfc);
    +
    +        /// address: 0x600c1100
    +        /// SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_10_REG
    +        pub const CORE_0_PIF_PMS_CONSTRAIN_10 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_0_pif_pms_constrain_rtcfast_world_0_l
    +            CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_0_L: u3,
    +            /// core_0_pif_pms_constrain_rtcfast_world_0_h
    +            CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_0_H: u3,
    +            /// core_0_pif_pms_constrain_rtcfast_world_1_l
    +            CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_1_L: u3,
    +            /// core_0_pif_pms_constrain_rtcfast_world_1_h
    +            CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_1_H: u3,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0x100);
    +
    +        /// address: 0x600c1104
    +        /// SENSITIVE_REGION_PMS_CONSTRAIN_0_REG
    +        pub const REGION_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// region_pms_constrain_lock
    +            REGION_PMS_CONSTRAIN_LOCK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x104);
    +
    +        /// address: 0x600c1108
    +        /// SENSITIVE_REGION_PMS_CONSTRAIN_1_REG
    +        pub const REGION_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// region_pms_constrain_world_0_area_0
    +            REGION_PMS_CONSTRAIN_WORLD_0_AREA_0: u2,
    +            /// region_pms_constrain_world_0_area_1
    +            REGION_PMS_CONSTRAIN_WORLD_0_AREA_1: u2,
    +            /// region_pms_constrain_world_0_area_2
    +            REGION_PMS_CONSTRAIN_WORLD_0_AREA_2: u2,
    +            /// region_pms_constrain_world_0_area_3
    +            REGION_PMS_CONSTRAIN_WORLD_0_AREA_3: u2,
    +            /// region_pms_constrain_world_0_area_4
    +            REGION_PMS_CONSTRAIN_WORLD_0_AREA_4: u2,
    +            /// region_pms_constrain_world_0_area_5
    +            REGION_PMS_CONSTRAIN_WORLD_0_AREA_5: u2,
    +            /// region_pms_constrain_world_0_area_6
    +            REGION_PMS_CONSTRAIN_WORLD_0_AREA_6: u2,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +        }), base_address + 0x108);
    +
    +        /// address: 0x600c110c
    +        /// SENSITIVE_REGION_PMS_CONSTRAIN_2_REG
    +        pub const REGION_PMS_CONSTRAIN_2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// region_pms_constrain_world_1_area_0
    +            REGION_PMS_CONSTRAIN_WORLD_1_AREA_0: u2,
    +            /// region_pms_constrain_world_1_area_1
    +            REGION_PMS_CONSTRAIN_WORLD_1_AREA_1: u2,
    +            /// region_pms_constrain_world_1_area_2
    +            REGION_PMS_CONSTRAIN_WORLD_1_AREA_2: u2,
    +            /// region_pms_constrain_world_1_area_3
    +            REGION_PMS_CONSTRAIN_WORLD_1_AREA_3: u2,
    +            /// region_pms_constrain_world_1_area_4
    +            REGION_PMS_CONSTRAIN_WORLD_1_AREA_4: u2,
    +            /// region_pms_constrain_world_1_area_5
    +            REGION_PMS_CONSTRAIN_WORLD_1_AREA_5: u2,
    +            /// region_pms_constrain_world_1_area_6
    +            REGION_PMS_CONSTRAIN_WORLD_1_AREA_6: u2,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +        }), base_address + 0x10c);
    +
    +        /// address: 0x600c1110
    +        /// SENSITIVE_REGION_PMS_CONSTRAIN_3_REG
    +        pub const REGION_PMS_CONSTRAIN_3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// region_pms_constrain_addr_0
    +            REGION_PMS_CONSTRAIN_ADDR_0: u30,
    +            padding0: u1,
    +            padding1: u1,
    +        }), base_address + 0x110);
    +
    +        /// address: 0x600c1114
    +        /// SENSITIVE_REGION_PMS_CONSTRAIN_4_REG
    +        pub const REGION_PMS_CONSTRAIN_4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// region_pms_constrain_addr_1
    +            REGION_PMS_CONSTRAIN_ADDR_1: u30,
    +            padding0: u1,
    +            padding1: u1,
    +        }), base_address + 0x114);
    +
    +        /// address: 0x600c1118
    +        /// SENSITIVE_REGION_PMS_CONSTRAIN_5_REG
    +        pub const REGION_PMS_CONSTRAIN_5 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// region_pms_constrain_addr_2
    +            REGION_PMS_CONSTRAIN_ADDR_2: u30,
    +            padding0: u1,
    +            padding1: u1,
    +        }), base_address + 0x118);
    +
    +        /// address: 0x600c111c
    +        /// SENSITIVE_REGION_PMS_CONSTRAIN_6_REG
    +        pub const REGION_PMS_CONSTRAIN_6 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// region_pms_constrain_addr_3
    +            REGION_PMS_CONSTRAIN_ADDR_3: u30,
    +            padding0: u1,
    +            padding1: u1,
    +        }), base_address + 0x11c);
    +
    +        /// address: 0x600c1120
    +        /// SENSITIVE_REGION_PMS_CONSTRAIN_7_REG
    +        pub const REGION_PMS_CONSTRAIN_7 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// region_pms_constrain_addr_4
    +            REGION_PMS_CONSTRAIN_ADDR_4: u30,
    +            padding0: u1,
    +            padding1: u1,
    +        }), base_address + 0x120);
    +
    +        /// address: 0x600c1124
    +        /// SENSITIVE_REGION_PMS_CONSTRAIN_8_REG
    +        pub const REGION_PMS_CONSTRAIN_8 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// region_pms_constrain_addr_5
    +            REGION_PMS_CONSTRAIN_ADDR_5: u30,
    +            padding0: u1,
    +            padding1: u1,
    +        }), base_address + 0x124);
    +
    +        /// address: 0x600c1128
    +        /// SENSITIVE_REGION_PMS_CONSTRAIN_9_REG
    +        pub const REGION_PMS_CONSTRAIN_9 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// region_pms_constrain_addr_6
    +            REGION_PMS_CONSTRAIN_ADDR_6: u30,
    +            padding0: u1,
    +            padding1: u1,
    +        }), base_address + 0x128);
    +
    +        /// address: 0x600c112c
    +        /// SENSITIVE_REGION_PMS_CONSTRAIN_10_REG
    +        pub const REGION_PMS_CONSTRAIN_10 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// region_pms_constrain_addr_7
    +            REGION_PMS_CONSTRAIN_ADDR_7: u30,
    +            padding0: u1,
    +            padding1: u1,
    +        }), base_address + 0x12c);
    +
    +        /// address: 0x600c1130
    +        /// SENSITIVE_CORE_0_PIF_PMS_MONITOR_0_REG
    +        pub const CORE_0_PIF_PMS_MONITOR_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_0_pif_pms_monitor_lock
    +            CORE_0_PIF_PMS_MONITOR_LOCK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x130);
    +
    +        /// address: 0x600c1134
    +        /// SENSITIVE_CORE_0_PIF_PMS_MONITOR_1_REG
    +        pub const CORE_0_PIF_PMS_MONITOR_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_0_pif_pms_monitor_violate_clr
    +            CORE_0_PIF_PMS_MONITOR_VIOLATE_CLR: u1,
    +            /// core_0_pif_pms_monitor_violate_en
    +            CORE_0_PIF_PMS_MONITOR_VIOLATE_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0x134);
    +
    +        /// address: 0x600c1138
    +        /// SENSITIVE_CORE_0_PIF_PMS_MONITOR_2_REG
    +        pub const CORE_0_PIF_PMS_MONITOR_2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_0_pif_pms_monitor_violate_intr
    +            CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR: u1,
    +            /// core_0_pif_pms_monitor_violate_status_hport_0
    +            CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HPORT_0: u1,
    +            /// core_0_pif_pms_monitor_violate_status_hsize
    +            CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HSIZE: u3,
    +            /// core_0_pif_pms_monitor_violate_status_hwrite
    +            CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HWRITE: u1,
    +            /// core_0_pif_pms_monitor_violate_status_hworld
    +            CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HWORLD: u2,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x138);
    +
    +        /// address: 0x600c113c
    +        /// SENSITIVE_CORE_0_PIF_PMS_MONITOR_3_REG
    +        pub const CORE_0_PIF_PMS_MONITOR_3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_0_pif_pms_monitor_violate_status_haddr
    +            CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HADDR: u32,
    +        }), base_address + 0x13c);
    +
    +        /// address: 0x600c1140
    +        /// SENSITIVE_CORE_0_PIF_PMS_MONITOR_4_REG
    +        pub const CORE_0_PIF_PMS_MONITOR_4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_0_pif_pms_monitor_nonword_violate_clr
    +            CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_CLR: u1,
    +            /// core_0_pif_pms_monitor_nonword_violate_en
    +            CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0x140);
    +
    +        /// address: 0x600c1144
    +        /// SENSITIVE_CORE_0_PIF_PMS_MONITOR_5_REG
    +        pub const CORE_0_PIF_PMS_MONITOR_5 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_0_pif_pms_monitor_nonword_violate_intr
    +            CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_INTR: u1,
    +            /// core_0_pif_pms_monitor_nonword_violate_status_hsize
    +            CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_STATUS_HSIZE: u2,
    +            /// core_0_pif_pms_monitor_nonword_violate_status_hworld
    +            CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_STATUS_HWORLD: u2,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +        }), base_address + 0x144);
    +
    +        /// address: 0x600c1148
    +        /// SENSITIVE_CORE_0_PIF_PMS_MONITOR_6_REG
    +        pub const CORE_0_PIF_PMS_MONITOR_6 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// core_0_pif_pms_monitor_nonword_violate_status_haddr
    +            CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_STATUS_HADDR: u32,
    +        }), base_address + 0x148);
    +
    +        /// address: 0x600c114c
    +        /// SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_0_REG
    +        pub const BACKUP_BUS_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// backup_bus_pms_constrain_lock
    +            BACKUP_BUS_PMS_CONSTRAIN_LOCK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x14c);
    +
    +        /// address: 0x600c1150
    +        /// SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_1_REG
    +        pub const BACKUP_BUS_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// backup_bus_pms_constrain_uart
    +            BACKUP_BUS_PMS_CONSTRAIN_UART: u2,
    +            /// backup_bus_pms_constrain_g0spi_1
    +            BACKUP_BUS_PMS_CONSTRAIN_G0SPI_1: u2,
    +            /// backup_bus_pms_constrain_g0spi_0
    +            BACKUP_BUS_PMS_CONSTRAIN_G0SPI_0: u2,
    +            /// backup_bus_pms_constrain_gpio
    +            BACKUP_BUS_PMS_CONSTRAIN_GPIO: u2,
    +            /// backup_bus_pms_constrain_fe2
    +            BACKUP_BUS_PMS_CONSTRAIN_FE2: u2,
    +            /// backup_bus_pms_constrain_fe
    +            BACKUP_BUS_PMS_CONSTRAIN_FE: u2,
    +            /// backup_bus_pms_constrain_timer
    +            BACKUP_BUS_PMS_CONSTRAIN_TIMER: u2,
    +            /// backup_bus_pms_constrain_rtc
    +            BACKUP_BUS_PMS_CONSTRAIN_RTC: u2,
    +            /// backup_bus_pms_constrain_io_mux
    +            BACKUP_BUS_PMS_CONSTRAIN_IO_MUX: u2,
    +            /// backup_bus_pms_constrain_wdg
    +            BACKUP_BUS_PMS_CONSTRAIN_WDG: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            /// backup_bus_pms_constrain_misc
    +            BACKUP_BUS_PMS_CONSTRAIN_MISC: u2,
    +            /// backup_bus_pms_constrain_i2c
    +            BACKUP_BUS_PMS_CONSTRAIN_I2C: u2,
    +            reserved4: u1,
    +            reserved5: u1,
    +            /// backup_bus_pms_constrain_uart1
    +            BACKUP_BUS_PMS_CONSTRAIN_UART1: u2,
    +        }), base_address + 0x150);
    +
    +        /// address: 0x600c1154
    +        /// SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_2_REG
    +        pub const BACKUP_BUS_PMS_CONSTRAIN_2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// backup_bus_pms_constrain_bt
    +            BACKUP_BUS_PMS_CONSTRAIN_BT: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// backup_bus_pms_constrain_i2c_ext0
    +            BACKUP_BUS_PMS_CONSTRAIN_I2C_EXT0: u2,
    +            /// backup_bus_pms_constrain_uhci0
    +            BACKUP_BUS_PMS_CONSTRAIN_UHCI0: u2,
    +            reserved2: u1,
    +            reserved3: u1,
    +            /// backup_bus_pms_constrain_rmt
    +            BACKUP_BUS_PMS_CONSTRAIN_RMT: u2,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            /// backup_bus_pms_constrain_ledc
    +            BACKUP_BUS_PMS_CONSTRAIN_LEDC: u2,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            /// backup_bus_pms_constrain_bb
    +            BACKUP_BUS_PMS_CONSTRAIN_BB: u2,
    +            reserved12: u1,
    +            reserved13: u1,
    +            /// backup_bus_pms_constrain_timergroup
    +            BACKUP_BUS_PMS_CONSTRAIN_TIMERGROUP: u2,
    +            /// backup_bus_pms_constrain_timergroup1
    +            BACKUP_BUS_PMS_CONSTRAIN_TIMERGROUP1: u2,
    +            /// backup_bus_pms_constrain_systimer
    +            BACKUP_BUS_PMS_CONSTRAIN_SYSTIMER: u2,
    +        }), base_address + 0x154);
    +
    +        /// address: 0x600c1158
    +        /// SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_3_REG
    +        pub const BACKUP_BUS_PMS_CONSTRAIN_3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// backup_bus_pms_constrain_spi_2
    +            BACKUP_BUS_PMS_CONSTRAIN_SPI_2: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// backup_bus_pms_constrain_apb_ctrl
    +            BACKUP_BUS_PMS_CONSTRAIN_APB_CTRL: u2,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            /// backup_bus_pms_constrain_can
    +            BACKUP_BUS_PMS_CONSTRAIN_CAN: u2,
    +            reserved6: u1,
    +            reserved7: u1,
    +            /// backup_bus_pms_constrain_i2s1
    +            BACKUP_BUS_PMS_CONSTRAIN_I2S1: u2,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            /// backup_bus_pms_constrain_rwbt
    +            BACKUP_BUS_PMS_CONSTRAIN_RWBT: u2,
    +            reserved14: u1,
    +            reserved15: u1,
    +            /// backup_bus_pms_constrain_wifimac
    +            BACKUP_BUS_PMS_CONSTRAIN_WIFIMAC: u2,
    +            /// backup_bus_pms_constrain_pwr
    +            BACKUP_BUS_PMS_CONSTRAIN_PWR: u2,
    +            padding0: u1,
    +            padding1: u1,
    +        }), base_address + 0x158);
    +
    +        /// address: 0x600c115c
    +        /// SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_4_REG
    +        pub const BACKUP_BUS_PMS_CONSTRAIN_4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// backup_bus_pms_constrain_usb_wrap
    +            BACKUP_BUS_PMS_CONSTRAIN_USB_WRAP: u2,
    +            /// backup_bus_pms_constrain_crypto_peri
    +            BACKUP_BUS_PMS_CONSTRAIN_CRYPTO_PERI: u2,
    +            /// backup_bus_pms_constrain_crypto_dma
    +            BACKUP_BUS_PMS_CONSTRAIN_CRYPTO_DMA: u2,
    +            /// backup_bus_pms_constrain_apb_adc
    +            BACKUP_BUS_PMS_CONSTRAIN_APB_ADC: u2,
    +            reserved2: u1,
    +            reserved3: u1,
    +            /// backup_bus_pms_constrain_bt_pwr
    +            BACKUP_BUS_PMS_CONSTRAIN_BT_PWR: u2,
    +            /// backup_bus_pms_constrain_usb_device
    +            BACKUP_BUS_PMS_CONSTRAIN_USB_DEVICE: u2,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x15c);
    +
    +        /// address: 0x600c1160
    +        /// SENSITIVE_BACKUP_BUS_PMS_MONITOR_0_REG
    +        pub const BACKUP_BUS_PMS_MONITOR_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// backup_bus_pms_monitor_lock
    +            BACKUP_BUS_PMS_MONITOR_LOCK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x160);
    +
    +        /// address: 0x600c1164
    +        /// SENSITIVE_BACKUP_BUS_PMS_MONITOR_1_REG
    +        pub const BACKUP_BUS_PMS_MONITOR_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// backup_bus_pms_monitor_violate_clr
    +            BACKUP_BUS_PMS_MONITOR_VIOLATE_CLR: u1,
    +            /// backup_bus_pms_monitor_violate_en
    +            BACKUP_BUS_PMS_MONITOR_VIOLATE_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0x164);
    +
    +        /// address: 0x600c1168
    +        /// SENSITIVE_BACKUP_BUS_PMS_MONITOR_2_REG
    +        pub const BACKUP_BUS_PMS_MONITOR_2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// backup_bus_pms_monitor_violate_intr
    +            BACKUP_BUS_PMS_MONITOR_VIOLATE_INTR: u1,
    +            /// backup_bus_pms_monitor_violate_status_htrans
    +            BACKUP_BUS_PMS_MONITOR_VIOLATE_STATUS_HTRANS: u2,
    +            /// backup_bus_pms_monitor_violate_status_hsize
    +            BACKUP_BUS_PMS_MONITOR_VIOLATE_STATUS_HSIZE: u3,
    +            /// backup_bus_pms_monitor_violate_status_hwrite
    +            BACKUP_BUS_PMS_MONITOR_VIOLATE_STATUS_HWRITE: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x168);
    +
    +        /// address: 0x600c116c
    +        /// SENSITIVE_BACKUP_BUS_PMS_MONITOR_3_REG
    +        pub const BACKUP_BUS_PMS_MONITOR_3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// backup_bus_pms_monitor_violate_haddr
    +            BACKUP_BUS_PMS_MONITOR_VIOLATE_HADDR: u32,
    +        }), base_address + 0x16c);
    +
    +        /// address: 0x600c1170
    +        /// SENSITIVE_CLOCK_GATE_REG
    +        pub const CLOCK_GATE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// clk_en
    +            CLK_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x170);
    +
    +        /// address: 0x600c1ffc
    +        /// SENSITIVE_DATE_REG
    +        pub const DATE = @intToPtr(*volatile MmioInt(32, u28), base_address + 0xffc);
    +    };
    +
    +    /// SHA (Secure Hash Algorithm) Accelerator
    +    pub const SHA = struct {
    +        pub const base_address = 0x6003b000;
    +
    +        /// address: 0x6003b000
    +        /// Initial configuration register.
    +        pub const MODE = @intToPtr(*volatile MmioInt(32, u3), base_address + 0x0);
    +
    +        /// address: 0x6003b004
    +        /// SHA 512/t configuration register 0.
    +        pub const T_STRING = @intToPtr(*volatile u32, base_address + 0x4);
    +
    +        /// address: 0x6003b008
    +        /// SHA 512/t configuration register 1.
    +        pub const T_LENGTH = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x8);
    +
    +        /// address: 0x6003b00c
    +        /// DMA configuration register 0.
    +        pub const DMA_BLOCK_NUM = @intToPtr(*volatile MmioInt(32, u6), base_address + 0xc);
    +
    +        /// address: 0x6003b010
    +        /// Typical SHA configuration register 0.
    +        pub const START = @intToPtr(*volatile MmioInt(32, u31), base_address + 0x10);
    +
    +        /// address: 0x6003b014
    +        /// Typical SHA configuration register 1.
    +        pub const CONTINUE = @intToPtr(*volatile MmioInt(32, u31), base_address + 0x14);
    +
    +        /// address: 0x6003b018
    +        /// Busy register.
    +        pub const BUSY = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Sha busy state. 1'b0: idle. 1'b1: busy.
    +            STATE: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x18);
    +
    +        /// address: 0x6003b01c
    +        /// DMA configuration register 1.
    +        pub const DMA_START = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x1c);
    +
    +        /// address: 0x6003b020
    +        /// DMA configuration register 2.
    +        pub const DMA_CONTINUE = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x20);
    +
    +        /// address: 0x6003b024
    +        /// Interrupt clear register.
    +        pub const CLEAR_IRQ = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Clear sha interrupt.
    +            CLEAR_INTERRUPT: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x24);
    +
    +        /// address: 0x6003b028
    +        /// Interrupt enable register.
    +        pub const IRQ_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Sha interrupt enable register. 1'b0: disable(default). 1'b1: enable.
    +            INTERRUPT_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x28);
    +
    +        /// address: 0x6003b02c
    +        /// Date register.
    +        pub const DATE = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x2c);
    +
    +        /// address: 0x6003b040
    +        /// Sha H memory which contains intermediate hash or finial hash.
    +        pub const H_MEM = @intToPtr(*volatile [64]u8, base_address + 0x40);
    +
    +        /// address: 0x6003b080
    +        /// Sha M memory which contains message.
    +        pub const M_MEM = @intToPtr(*volatile [64]u8, base_address + 0x80);
    +    };
    +
    +    /// SPI (Serial Peripheral Interface) Controller
    +    pub const SPI0 = struct {
    +        pub const base_address = 0x60003000;
    +
    +        /// address: 0x60003008
    +        /// SPI0 control register.
    +        pub const CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            /// In the dummy phase the signal level of spi is output by the spi controller.
    +            FDUMMY_OUT: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            /// Apply 2 signals during command phase 1:enable 0: disable
    +            FCMD_DUAL: u1,
    +            /// Apply 4 signals during command phase 1:enable 0: disable
    +            FCMD_QUAD: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            /// This bit enable the bits: spi_mem_fread_qio, spi_mem_fread_dio,
    +            /// spi_mem_fread_qout and spi_mem_fread_dout. 1: enable 0: disable.
    +            FASTRD_MODE: u1,
    +            /// In the read operations, read-data phase apply 2 signals. 1: enable 0: disable.
    +            FREAD_DUAL: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            /// The bit is used to set MISO line polarity, 1: high 0, low
    +            Q_POL: u1,
    +            /// The bit is used to set MOSI line polarity, 1: high 0, low
    +            D_POL: u1,
    +            /// In the read operations read-data phase apply 4 signals. 1: enable 0: disable.
    +            FREAD_QUAD: u1,
    +            /// Write protect signal output when SPI is idle. 1: output high, 0: output low.
    +            WP: u1,
    +            reserved13: u1,
    +            /// In the read operations address phase and read-data phase apply 2 signals. 1:
    +            /// enable 0: disable.
    +            FREAD_DIO: u1,
    +            /// In the read operations address phase and read-data phase apply 4 signals. 1:
    +            /// enable 0: disable.
    +            FREAD_QIO: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +        }), base_address + 0x8);
    +
    +        /// address: 0x6000300c
    +        /// SPI0 control1 register.
    +        pub const CTRL1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is
    +            /// delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS
    +            /// inactive 3: SPI clock is alwasy on.
    +            CLK_MODE: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            reserved23: u1,
    +            reserved24: u1,
    +            reserved25: u1,
    +            reserved26: u1,
    +            reserved27: u1,
    +            /// SPI0 RX FIFO reset signal.
    +            RXFIFO_RST: u1,
    +            padding0: u1,
    +        }), base_address + 0xc);
    +
    +        /// address: 0x60003010
    +        /// SPI0 control2 register.
    +        pub const CTRL2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// (cycles-1) of prepare phase by spi clock this bits are combined with
    +            /// spi_mem_cs_setup bit.
    +            CS_SETUP_TIME: u5,
    +            /// Spi cs signal is delayed to inactive by spi clock this bits are combined with
    +            /// spi_mem_cs_hold bit.
    +            CS_HOLD_TIME: u5,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            /// These bits are used to set the minimum CS high time tSHSL between SPI burst
    +            /// transfer when accesses to flash. tSHSL is (SPI_MEM_CS_HOLD_DELAY[5:0] + 1) MSPI
    +            /// core clock cycles.
    +            CS_HOLD_DELAY: u6,
    +            /// The FSM will be reset.
    +            SYNC_RESET: u1,
    +        }), base_address + 0x10);
    +
    +        /// address: 0x60003014
    +        /// SPI clock division control register.
    +        pub const CLOCK = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// In the master mode it must be equal to spi_mem_clkcnt_N.
    +            CLKCNT_L: u8,
    +            /// In the master mode it must be floor((spi_mem_clkcnt_N+1)/2-1).
    +            CLKCNT_H: u8,
    +            /// In the master mode it is the divider of spi_mem_clk. So spi_mem_clk frequency is
    +            /// system/(spi_mem_clkcnt_N+1)
    +            CLKCNT_N: u8,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            /// Set this bit in 1-division mode.
    +            CLK_EQU_SYSCLK: u1,
    +        }), base_address + 0x14);
    +
    +        /// address: 0x60003018
    +        /// SPI0 user register.
    +        pub const USER = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            /// spi cs keep low when spi is in done phase. 1: enable 0: disable.
    +            CS_HOLD: u1,
    +            /// spi cs is enable when spi is in prepare phase. 1: enable 0: disable.
    +            CS_SETUP: u1,
    +            reserved6: u1,
    +            /// the bit combined with spi_mem_mosi_delay_mode bits to set mosi signal delay
    +            /// mode.
    +            CK_OUT_EDGE: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            /// spi clock is disable in dummy phase when the bit is enable.
    +            USR_DUMMY_IDLE: u1,
    +            reserved23: u1,
    +            reserved24: u1,
    +            /// This bit enable the dummy phase of an operation.
    +            USR_DUMMY: u1,
    +            padding0: u1,
    +            padding1: u1,
    +        }), base_address + 0x18);
    +
    +        /// address: 0x6000301c
    +        /// SPI0 user1 register.
    +        pub const USER1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The length in spi_mem_clk cycles of dummy phase. The register value shall be
    +            /// (cycle_num-1).
    +            USR_DUMMY_CYCLELEN: u6,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            /// The length in bits of address phase. The register value shall be (bit_num-1).
    +            USR_ADDR_BITLEN: u6,
    +        }), base_address + 0x1c);
    +
    +        /// address: 0x60003020
    +        /// SPI0 user2 register.
    +        pub const USER2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of command.
    +            USR_COMMAND_VALUE: u16,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            /// The length in bits of command phase. The register value shall be (bit_num-1)
    +            USR_COMMAND_BITLEN: u4,
    +        }), base_address + 0x20);
    +
    +        /// address: 0x6000302c
    +        /// SPI0 read control register.
    +        pub const RD_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            /// Mode bits in the flash fast read mode it is combined with spi_mem_fastrd_mode
    +            /// bit.
    +            WB_MODE: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +        }), base_address + 0x2c);
    +
    +        /// address: 0x60003034
    +        /// SPI0 misc register
    +        pub const MISC = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            /// The bit is used to indicate the spi0_mst_st controlled transmitting is done.
    +            TRANS_END: u1,
    +            /// The bit is used to enable the interrupt of spi0_mst_st controlled transmitting
    +            /// is done.
    +            TRANS_END_INT_ENA: u1,
    +            /// The bit is used to indicate the spi0_slv_st controlled transmitting is done.
    +            CSPI_ST_TRANS_END: u1,
    +            /// The bit is used to enable the interrupt of spi0_slv_st controlled transmitting
    +            /// is done.
    +            CSPI_ST_TRANS_END_INT_ENA: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            /// 1: spi clk line is high when idle 0: spi clk line is low when idle
    +            CK_IDLE_EDGE: u1,
    +            /// spi cs line keep low when the bit is set.
    +            CS_KEEP_ACTIVE: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x34);
    +
    +        /// address: 0x6000303c
    +        /// SPI0 bit mode control register.
    +        pub const CACHE_FCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// For SPI0, Cache access enable, 1: enable, 0:disable.
    +            CACHE_REQ_EN: u1,
    +            /// For SPI0, cache read flash with 4 bytes address, 1: enable, 0:disable.
    +            CACHE_USR_ADDR_4BYTE: u1,
    +            /// For SPI0, cache read flash for user define command, 1: enable, 0:disable.
    +            CACHE_FLASH_USR_CMD: u1,
    +            /// For SPI0 flash, din phase apply 2 signals. 1: enable 0: disable. The bit is the
    +            /// same with spi_mem_fread_dio.
    +            FDIN_DUAL: u1,
    +            /// For SPI0 flash, dout phase apply 2 signals. 1: enable 0: disable. The bit is the
    +            /// same with spi_mem_fread_dio.
    +            FDOUT_DUAL: u1,
    +            /// For SPI0 flash, address phase apply 2 signals. 1: enable 0: disable. The bit is
    +            /// the same with spi_mem_fread_dio.
    +            FADDR_DUAL: u1,
    +            /// For SPI0 flash, din phase apply 4 signals. 1: enable 0: disable. The bit is the
    +            /// same with spi_mem_fread_qio.
    +            FDIN_QUAD: u1,
    +            /// For SPI0 flash, dout phase apply 4 signals. 1: enable 0: disable. The bit is the
    +            /// same with spi_mem_fread_qio.
    +            FDOUT_QUAD: u1,
    +            /// For SPI0 flash, address phase apply 4 signals. 1: enable 0: disable. The bit is
    +            /// the same with spi_mem_fread_qio.
    +            FADDR_QUAD: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +        }), base_address + 0x3c);
    +
    +        /// address: 0x60003054
    +        /// SPI0 FSM status register
    +        pub const FSM = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The current status of SPI0 slave FSM: spi0_slv_st. 0: idle state, 1: preparation
    +            /// state, 2: send command state, 3: send address state, 4: wait state, 5: read data
    +            /// state, 6:write data state, 7: done state, 8: read data end state.
    +            CSPI_ST: u4,
    +            /// The current status of SPI0 master FSM: spi0_mst_st. 0: idle state,
    +            /// 1:EM_CACHE_GRANT , 2: program/erase suspend state, 3: SPI0 read data state, 4:
    +            /// wait cache/EDMA sent data is stored in SPI0 TX FIFO, 5: SPI0 write data state.
    +            EM_ST: u3,
    +            /// The lock delay time of SPI0/1 arbiter by spi0_slv_st, after PER is sent by SPI1.
    +            CSPI_LOCK_DELAY_TIME: u5,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0x54);
    +
    +        /// address: 0x600030a8
    +        /// SPI0 timing calibration register
    +        pub const TIMING_CALI = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The bit is used to enable timing adjust clock for all reading operations.
    +            TIMING_CLK_ENA: u1,
    +            /// The bit is used to enable timing auto-calibration for all reading operations.
    +            TIMING_CALI: u1,
    +            /// add extra dummy spi clock cycle length for spi clock calibration.
    +            EXTRA_DUMMY_CYCLELEN: u3,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +        }), base_address + 0xa8);
    +
    +        /// address: 0x600030ac
    +        /// SPI0 input delay mode control register
    +        pub const DIN_MODE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// the input signals are delayed by system clock cycles, 0: input without delayed,
    +            /// 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3:
    +            /// input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input
    +            /// with the spi_clk high edge, 6: input with the spi_clk low edge
    +            DIN0_MODE: u2,
    +            /// the input signals are delayed by system clock cycles, 0: input without delayed,
    +            /// 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3:
    +            /// input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input
    +            /// with the spi_clk high edge, 6: input with the spi_clk low edge
    +            DIN1_MODE: u2,
    +            /// the input signals are delayed by system clock cycles, 0: input without delayed,
    +            /// 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3:
    +            /// input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input
    +            /// with the spi_clk high edge, 6: input with the spi_clk low edge
    +            DIN2_MODE: u2,
    +            /// the input signals are delayed by system clock cycles, 0: input without delayed,
    +            /// 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3:
    +            /// input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input
    +            /// with the spi_clk high edge, 6: input with the spi_clk low edge
    +            DIN3_MODE: u2,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0xac);
    +
    +        /// address: 0x600030b0
    +        /// SPI0 input delay number control register
    +        pub const DIN_NUM = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1:
    +            /// delayed by 2 cycles,...
    +            DIN0_NUM: u2,
    +            /// the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1:
    +            /// delayed by 2 cycles,...
    +            DIN1_NUM: u2,
    +            /// the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1:
    +            /// delayed by 2 cycles,...
    +            DIN2_NUM: u2,
    +            /// the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1:
    +            /// delayed by 2 cycles,...
    +            DIN3_NUM: u2,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0xb0);
    +
    +        /// address: 0x600030b4
    +        /// SPI0 output delay mode control register
    +        pub const DOUT_MODE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// the output signals are delayed by system clock cycles, 0: output without
    +            /// delayed, 1: output with the posedge of clk_apb,2 output with the negedge of
    +            /// clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of
    +            /// clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low
    +            /// edge
    +            DOUT0_MODE: u1,
    +            /// the output signals are delayed by system clock cycles, 0: output without
    +            /// delayed, 1: output with the posedge of clk_apb,2 output with the negedge of
    +            /// clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of
    +            /// clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low
    +            /// edge
    +            DOUT1_MODE: u1,
    +            /// the output signals are delayed by system clock cycles, 0: output without
    +            /// delayed, 1: output with the posedge of clk_apb,2 output with the negedge of
    +            /// clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of
    +            /// clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low
    +            /// edge
    +            DOUT2_MODE: u1,
    +            /// the output signals are delayed by system clock cycles, 0: output without
    +            /// delayed, 1: output with the posedge of clk_apb,2 output with the negedge of
    +            /// clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of
    +            /// clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low
    +            /// edge
    +            DOUT3_MODE: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0xb4);
    +
    +        /// address: 0x600030dc
    +        /// SPI0 clk_gate register
    +        pub const CLOCK_GATE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Register clock gate enable signal. 1: Enable. 0: Disable.
    +            CLK_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0xdc);
    +
    +        /// address: 0x600030e0
    +        /// SPI0 module clock select register
    +        pub const CORE_CLK_SEL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// When the digital system clock selects PLL clock and the frequency of PLL clock
    +            /// is 480MHz, the value of reg_spi01_clk_sel: 0: SPI0/1 module clock (clk) is
    +            /// 80MHz. 1: SPI0/1 module clock (clk) is 120MHz. 2: SPI0/1 module clock (clk)
    +            /// 160MHz. 3: Not used. When the digital system clock selects PLL clock and the
    +            /// frequency of PLL clock is 320MHz, the value of reg_spi01_clk_sel: 0: SPI0/1
    +            /// module clock (clk) is 80MHz. 1: SPI0/1 module clock (clk) is 80MHz. 2: SPI0/1
    +            /// module clock (clk) 160MHz. 3: Not used.
    +            SPI01_CLK_SEL: u2,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0xe0);
    +
    +        /// address: 0x600033fc
    +        /// Version control register
    +        pub const DATE = @intToPtr(*volatile MmioInt(32, u28), base_address + 0x3fc);
    +    };
    +
    +    /// SPI (Serial Peripheral Interface) Controller
    +    pub const SPI1 = struct {
    +        pub const base_address = 0x60002000;
    +
    +        /// address: 0x60002000
    +        /// SPI1 memory command register
    +        pub const CMD = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The current status of SPI1 master FSM.
    +            SPI1_MST_ST: u4,
    +            /// The current status of SPI1 slave FSM: mspi_st. 0: idle state, 1: preparation
    +            /// state, 2: send command state, 3: send address state, 4: wait state, 5: read data
    +            /// state, 6:write data state, 7: done state, 8: read data end state.
    +            MSPI_ST: u4,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            /// In user mode, it is set to indicate that program/erase operation will be
    +            /// triggered. The bit is combined with spi_mem_usr bit. The bit will be cleared
    +            /// once the operation done.1: enable 0: disable.
    +            FLASH_PE: u1,
    +            /// User define command enable. An operation will be triggered when the bit is set.
    +            /// The bit will be cleared once the operation done.1: enable 0: disable.
    +            USR: u1,
    +            /// Drive Flash into high performance mode. The bit will be cleared once the
    +            /// operation done.1: enable 0: disable.
    +            FLASH_HPM: u1,
    +            /// This bit combined with reg_resandres bit releases Flash from the power-down
    +            /// state or high performance mode and obtains the devices ID. The bit will be
    +            /// cleared once the operation done.1: enable 0: disable.
    +            FLASH_RES: u1,
    +            /// Drive Flash into power down. An operation will be triggered when the bit is set.
    +            /// The bit will be cleared once the operation done.1: enable 0: disable.
    +            FLASH_DP: u1,
    +            /// Chip erase enable. Chip erase operation will be triggered when the bit is set.
    +            /// The bit will be cleared once the operation done.1: enable 0: disable.
    +            FLASH_CE: u1,
    +            /// Block erase enable(32KB) . Block erase operation will be triggered when the bit
    +            /// is set. The bit will be cleared once the operation done.1: enable 0: disable.
    +            FLASH_BE: u1,
    +            /// Sector erase enable(4KB). Sector erase operation will be triggered when the bit
    +            /// is set. The bit will be cleared once the operation done.1: enable 0: disable.
    +            FLASH_SE: u1,
    +            /// Page program enable(1 byte ~256 bytes data to be programmed). Page program
    +            /// operation will be triggered when the bit is set. The bit will be cleared once
    +            /// the operation done .1: enable 0: disable.
    +            FLASH_PP: u1,
    +            /// Write status register enable. Write status operation will be triggered when the
    +            /// bit is set. The bit will be cleared once the operation done.1: enable 0:
    +            /// disable.
    +            FLASH_WRSR: u1,
    +            /// Read status register-1. Read status operation will be triggered when the bit is
    +            /// set. The bit will be cleared once the operation done.1: enable 0: disable.
    +            FLASH_RDSR: u1,
    +            /// Read JEDEC ID . Read ID command will be sent when the bit is set. The bit will
    +            /// be cleared once the operation done. 1: enable 0: disable.
    +            FLASH_RDID: u1,
    +            /// Write flash disable. Write disable command will be sent when the bit is set. The
    +            /// bit will be cleared once the operation done. 1: enable 0: disable.
    +            FLASH_WRDI: u1,
    +            /// Write flash enable. Write enable command will be sent when the bit is set. The
    +            /// bit will be cleared once the operation done. 1: enable 0: disable.
    +            FLASH_WREN: u1,
    +            /// Read flash enable. Read flash operation will be triggered when the bit is set.
    +            /// The bit will be cleared once the operation done. 1: enable 0: disable.
    +            FLASH_READ: u1,
    +        }), base_address + 0x0);
    +
    +        /// address: 0x60002004
    +        /// SPI1 address register
    +        pub const ADDR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// In user mode, it is the memory address. other then the bit0-bit23 is the memory
    +            /// address, the bit24-bit31 are the byte length of a transfer.
    +            USR_ADDR_VALUE: u32,
    +        }), base_address + 0x4);
    +
    +        /// address: 0x60002008
    +        /// SPI1 control register.
    +        pub const CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            /// In the dummy phase the signal level of spi is output by the spi controller.
    +            FDUMMY_OUT: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            /// Apply 2 signals during command phase 1:enable 0: disable
    +            FCMD_DUAL: u1,
    +            /// Apply 4 signals during command phase 1:enable 0: disable
    +            FCMD_QUAD: u1,
    +            reserved6: u1,
    +            /// For SPI1, initialize crc32 module before writing encrypted data to flash. Active
    +            /// low.
    +            FCS_CRC_EN: u1,
    +            /// For SPI1, enable crc32 when writing encrypted data to flash. 1: enable 0:disable
    +            TX_CRC_EN: u1,
    +            reserved7: u1,
    +            /// This bit enable the bits: spi_mem_fread_qio, spi_mem_fread_dio,
    +            /// spi_mem_fread_qout and spi_mem_fread_dout. 1: enable 0: disable.
    +            FASTRD_MODE: u1,
    +            /// In the read operations, read-data phase apply 2 signals. 1: enable 0: disable.
    +            FREAD_DUAL: u1,
    +            /// The Device ID is read out to SPI_MEM_RD_STATUS register, this bit combine with
    +            /// spi_mem_flash_res bit. 1: enable 0: disable.
    +            RESANDRES: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            /// The bit is used to set MISO line polarity, 1: high 0, low
    +            Q_POL: u1,
    +            /// The bit is used to set MOSI line polarity, 1: high 0, low
    +            D_POL: u1,
    +            /// In the read operations read-data phase apply 4 signals. 1: enable 0: disable.
    +            FREAD_QUAD: u1,
    +            /// Write protect signal output when SPI is idle. 1: output high, 0: output low.
    +            WP: u1,
    +            /// two bytes data will be written to status register when it is set. 1: enable 0:
    +            /// disable.
    +            WRSR_2B: u1,
    +            /// In the read operations address phase and read-data phase apply 2 signals. 1:
    +            /// enable 0: disable.
    +            FREAD_DIO: u1,
    +            /// In the read operations address phase and read-data phase apply 4 signals. 1:
    +            /// enable 0: disable.
    +            FREAD_QIO: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +        }), base_address + 0x8);
    +
    +        /// address: 0x6000200c
    +        /// SPI1 control1 register.
    +        pub const CTRL1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is
    +            /// delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS
    +            /// inactive 3: SPI clock is alwasy on.
    +            CLK_MODE: u2,
    +            /// After RES/DP/HPM command is sent, SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] *
    +            /// 512) SPI_CLK cycles.
    +            CS_HOLD_DLY_RES: u10,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0xc);
    +
    +        /// address: 0x60002010
    +        /// SPI1 control2 register.
    +        pub const CTRL2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            reserved23: u1,
    +            reserved24: u1,
    +            reserved25: u1,
    +            reserved26: u1,
    +            reserved27: u1,
    +            reserved28: u1,
    +            reserved29: u1,
    +            reserved30: u1,
    +            /// The FSM will be reset.
    +            SYNC_RESET: u1,
    +        }), base_address + 0x10);
    +
    +        /// address: 0x60002014
    +        /// SPI1 clock division control register.
    +        pub const CLOCK = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// In the master mode it must be equal to spi_mem_clkcnt_N.
    +            CLKCNT_L: u8,
    +            /// In the master mode it must be floor((spi_mem_clkcnt_N+1)/2-1).
    +            CLKCNT_H: u8,
    +            /// In the master mode it is the divider of spi_mem_clk. So spi_mem_clk frequency is
    +            /// system/(spi_mem_clkcnt_N+1)
    +            CLKCNT_N: u8,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            /// reserved
    +            CLK_EQU_SYSCLK: u1,
    +        }), base_address + 0x14);
    +
    +        /// address: 0x60002018
    +        /// SPI1 user register.
    +        pub const USER = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            /// the bit combined with spi_mem_mosi_delay_mode bits to set mosi signal delay
    +            /// mode.
    +            CK_OUT_EDGE: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            /// In the write operations read-data phase apply 2 signals
    +            FWRITE_DUAL: u1,
    +            /// In the write operations read-data phase apply 4 signals
    +            FWRITE_QUAD: u1,
    +            /// In the write operations address phase and read-data phase apply 2 signals.
    +            FWRITE_DIO: u1,
    +            /// In the write operations address phase and read-data phase apply 4 signals.
    +            FWRITE_QIO: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            /// read-data phase only access to high-part of the buffer spi_mem_w8~spi_mem_w15.
    +            /// 1: enable 0: disable.
    +            USR_MISO_HIGHPART: u1,
    +            /// write-data phase only access to high-part of the buffer spi_mem_w8~spi_mem_w15.
    +            /// 1: enable 0: disable.
    +            USR_MOSI_HIGHPART: u1,
    +            /// SPI clock is disable in dummy phase when the bit is enable.
    +            USR_DUMMY_IDLE: u1,
    +            /// This bit enable the write-data phase of an operation.
    +            USR_MOSI: u1,
    +            /// This bit enable the read-data phase of an operation.
    +            USR_MISO: u1,
    +            /// This bit enable the dummy phase of an operation.
    +            USR_DUMMY: u1,
    +            /// This bit enable the address phase of an operation.
    +            USR_ADDR: u1,
    +            /// This bit enable the command phase of an operation.
    +            USR_COMMAND: u1,
    +        }), base_address + 0x18);
    +
    +        /// address: 0x6000201c
    +        /// SPI1 user1 register.
    +        pub const USER1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The length in spi_mem_clk cycles of dummy phase. The register value shall be
    +            /// (cycle_num-1).
    +            USR_DUMMY_CYCLELEN: u6,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            /// The length in bits of address phase. The register value shall be (bit_num-1).
    +            USR_ADDR_BITLEN: u6,
    +        }), base_address + 0x1c);
    +
    +        /// address: 0x60002020
    +        /// SPI1 user2 register.
    +        pub const USER2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of command.
    +            USR_COMMAND_VALUE: u16,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            /// The length in bits of command phase. The register value shall be (bit_num-1)
    +            USR_COMMAND_BITLEN: u4,
    +        }), base_address + 0x20);
    +
    +        /// address: 0x60002024
    +        /// SPI1 send data bit length control register.
    +        pub const MOSI_DLEN = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The length in bits of write-data. The register value shall be (bit_num-1).
    +            USR_MOSI_DBITLEN: u10,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +        }), base_address + 0x24);
    +
    +        /// address: 0x60002028
    +        /// SPI1 receive data bit length control register.
    +        pub const MISO_DLEN = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The length in bits of read-data. The register value shall be (bit_num-1).
    +            USR_MISO_DBITLEN: u10,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +        }), base_address + 0x28);
    +
    +        /// address: 0x6000202c
    +        /// SPI1 status register.
    +        pub const RD_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value is stored when set spi_mem_flash_rdsr bit and spi_mem_flash_res bit.
    +            STATUS: u16,
    +            /// Mode bits in the flash fast read mode it is combined with spi_mem_fastrd_mode
    +            /// bit.
    +            WB_MODE: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +        }), base_address + 0x2c);
    +
    +        /// address: 0x60002034
    +        /// SPI1 misc register
    +        pub const MISC = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// SPI_CS0 pin enable, 1: disable SPI_CS0, 0: SPI_CS0 pin is active to select SPI
    +            /// device, such as flash, external RAM and so on.
    +            CS0_DIS: u1,
    +            /// SPI_CS1 pin enable, 1: disable SPI_CS1, 0: SPI_CS1 pin is active to select SPI
    +            /// device, such as flash, external RAM and so on.
    +            CS1_DIS: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            /// 1: spi clk line is high when idle 0: spi clk line is low when idle
    +            CK_IDLE_EDGE: u1,
    +            /// spi cs line keep low when the bit is set.
    +            CS_KEEP_ACTIVE: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x34);
    +
    +        /// address: 0x60002038
    +        /// SPI1 TX CRC data register.
    +        pub const TX_CRC = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// For SPI1, the value of crc32.
    +            DATA: u32,
    +        }), base_address + 0x38);
    +
    +        /// address: 0x6000203c
    +        /// SPI1 bit mode control register.
    +        pub const CACHE_FCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            /// For SPI1, cache read flash with 4 bytes address, 1: enable, 0:disable.
    +            CACHE_USR_ADDR_4BYTE: u1,
    +            reserved1: u1,
    +            /// For SPI1, din phase apply 2 signals. 1: enable 0: disable. The bit is the same
    +            /// with spi_mem_fread_dio.
    +            FDIN_DUAL: u1,
    +            /// For SPI1, dout phase apply 2 signals. 1: enable 0: disable. The bit is the same
    +            /// with spi_mem_fread_dio.
    +            FDOUT_DUAL: u1,
    +            /// For SPI1, address phase apply 2 signals. 1: enable 0: disable. The bit is the
    +            /// same with spi_mem_fread_dio.
    +            FADDR_DUAL: u1,
    +            /// For SPI1, din phase apply 4 signals. 1: enable 0: disable. The bit is the same
    +            /// with spi_mem_fread_qio.
    +            FDIN_QUAD: u1,
    +            /// For SPI1, dout phase apply 4 signals. 1: enable 0: disable. The bit is the same
    +            /// with spi_mem_fread_qio.
    +            FDOUT_QUAD: u1,
    +            /// For SPI1, address phase apply 4 signals. 1: enable 0: disable. The bit is the
    +            /// same with spi_mem_fread_qio.
    +            FADDR_QUAD: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +        }), base_address + 0x3c);
    +
    +        /// address: 0x60002058
    +        /// SPI1 memory data buffer0
    +        pub const W0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF0: u32,
    +        }), base_address + 0x58);
    +
    +        /// address: 0x6000205c
    +        /// SPI1 memory data buffer1
    +        pub const W1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF1: u32,
    +        }), base_address + 0x5c);
    +
    +        /// address: 0x60002060
    +        /// SPI1 memory data buffer2
    +        pub const W2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF2: u32,
    +        }), base_address + 0x60);
    +
    +        /// address: 0x60002064
    +        /// SPI1 memory data buffer3
    +        pub const W3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF3: u32,
    +        }), base_address + 0x64);
    +
    +        /// address: 0x60002068
    +        /// SPI1 memory data buffer4
    +        pub const W4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF4: u32,
    +        }), base_address + 0x68);
    +
    +        /// address: 0x6000206c
    +        /// SPI1 memory data buffer5
    +        pub const W5 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF5: u32,
    +        }), base_address + 0x6c);
    +
    +        /// address: 0x60002070
    +        /// SPI1 memory data buffer6
    +        pub const W6 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF6: u32,
    +        }), base_address + 0x70);
    +
    +        /// address: 0x60002074
    +        /// SPI1 memory data buffer7
    +        pub const W7 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF7: u32,
    +        }), base_address + 0x74);
    +
    +        /// address: 0x60002078
    +        /// SPI1 memory data buffer8
    +        pub const W8 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF8: u32,
    +        }), base_address + 0x78);
    +
    +        /// address: 0x6000207c
    +        /// SPI1 memory data buffer9
    +        pub const W9 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF9: u32,
    +        }), base_address + 0x7c);
    +
    +        /// address: 0x60002080
    +        /// SPI1 memory data buffer10
    +        pub const W10 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF10: u32,
    +        }), base_address + 0x80);
    +
    +        /// address: 0x60002084
    +        /// SPI1 memory data buffer11
    +        pub const W11 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF11: u32,
    +        }), base_address + 0x84);
    +
    +        /// address: 0x60002088
    +        /// SPI1 memory data buffer12
    +        pub const W12 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF12: u32,
    +        }), base_address + 0x88);
    +
    +        /// address: 0x6000208c
    +        /// SPI1 memory data buffer13
    +        pub const W13 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF13: u32,
    +        }), base_address + 0x8c);
    +
    +        /// address: 0x60002090
    +        /// SPI1 memory data buffer14
    +        pub const W14 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF14: u32,
    +        }), base_address + 0x90);
    +
    +        /// address: 0x60002094
    +        /// SPI1 memory data buffer15
    +        pub const W15 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF15: u32,
    +        }), base_address + 0x94);
    +
    +        /// address: 0x60002098
    +        /// SPI1 wait idle control register
    +        pub const FLASH_WAITI_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            /// The dummy phase enable when wait flash idle (RDSR)
    +            WAITI_DUMMY: u1,
    +            /// The command to wait flash idle(RDSR).
    +            WAITI_CMD: u8,
    +            /// The dummy cycle length when wait flash idle(RDSR).
    +            WAITI_DUMMY_CYCLELEN: u6,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x98);
    +
    +        /// address: 0x6000209c
    +        /// SPI1 flash suspend control register
    +        pub const FLASH_SUS_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// program erase resume bit, program erase suspend operation will be triggered when
    +            /// the bit is set. The bit will be cleared once the operation done.1: enable 0:
    +            /// disable.
    +            FLASH_PER: u1,
    +            /// program erase suspend bit, program erase suspend operation will be triggered
    +            /// when the bit is set. The bit will be cleared once the operation done.1: enable
    +            /// 0: disable.
    +            FLASH_PES: u1,
    +            /// 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4 or *128) SPI_CLK cycles after
    +            /// program erase resume command is sent. 0: SPI1 does not wait after program erase
    +            /// resume command is sent.
    +            FLASH_PER_WAIT_EN: u1,
    +            /// 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4 or *128) SPI_CLK cycles after
    +            /// program erase suspend command is sent. 0: SPI1 does not wait after program erase
    +            /// suspend command is sent.
    +            FLASH_PES_WAIT_EN: u1,
    +            /// Set this bit to enable PES end triggers PER transfer option. If this bit is 0,
    +            /// application should send PER after PES is done.
    +            PES_PER_EN: u1,
    +            /// Set this bit to enable Auto-suspending function.
    +            FLASH_PES_EN: u1,
    +            /// The mask value when check SUS/SUS1/SUS2 status bit. If the read status value is
    +            /// status_in[15:0](only status_in[7:0] is valid when only one byte of data is read
    +            /// out, status_in[15:0] is valid when two bytes of data are read out),
    +            /// SUS/SUS1/SUS2 = status_in[15:0]^ SPI_MEM_PESR_END_MSK[15:0].
    +            PESR_END_MSK: u16,
    +            /// 1: Read two bytes when check flash SUS/SUS1/SUS2 status bit. 0: Read one byte
    +            /// when check flash SUS/SUS1/SUS2 status bit
    +            RD_SUS_2B: u1,
    +            /// 1: Both WIP and SUS/SUS1/SUS2 bits should be checked to insure the resume status
    +            /// of flash. 0: Only need to check WIP is 0.
    +            PER_END_EN: u1,
    +            /// 1: Both WIP and SUS/SUS1/SUS2 bits should be checked to insure the suspend
    +            /// status of flash. 0: Only need to check WIP is 0.
    +            PES_END_EN: u1,
    +            /// When SPI1 checks SUS/SUS1/SUS2 bits fail for SPI_MEM_SUS_TIMEOUT_CNT[6:0] times,
    +            /// it will be treated as check pass.
    +            SUS_TIMEOUT_CNT: u7,
    +        }), base_address + 0x9c);
    +
    +        /// address: 0x600020a0
    +        /// SPI1 flash suspend command register
    +        pub const FLASH_SUS_CMD = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Program/Erase resume command.
    +            FLASH_PER_COMMAND: u8,
    +            /// Program/Erase suspend command.
    +            FLASH_PES_COMMAND: u8,
    +            /// Flash SUS/SUS1/SUS2 status bit read command. The command should be sent when
    +            /// SUS/SUS1/SUS2 bit should be checked to insure the suspend or resume status of
    +            /// flash.
    +            WAIT_PESR_COMMAND: u16,
    +        }), base_address + 0xa0);
    +
    +        /// address: 0x600020a4
    +        /// SPI1 flash suspend status register
    +        pub const SUS_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The status of flash suspend, only used in SPI1.
    +            FLASH_SUS: u1,
    +            /// 1: SPI1 sends out SPI_MEM_WAIT_PESR_COMMAND[15:0] to check SUS/SUS1/SUS2 bit. 0:
    +            /// SPI1 sends out SPI_MEM_WAIT_PESR_COMMAND[7:0] to check SUS/SUS1/SUS2 bit.
    +            WAIT_PESR_CMD_2B: u1,
    +            /// 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after HPM
    +            /// command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK
    +            /// cycles after HPM command is sent.
    +            FLASH_HPM_DLY_128: u1,
    +            /// 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after RES
    +            /// command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK
    +            /// cycles after RES command is sent.
    +            FLASH_RES_DLY_128: u1,
    +            /// 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after DP
    +            /// command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK
    +            /// cycles after DP command is sent.
    +            FLASH_DP_DLY_128: u1,
    +            /// Valid when SPI_MEM_FLASH_PER_WAIT_EN is 1. 1: SPI1 waits
    +            /// (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after PER command is sent.
    +            /// 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after PER
    +            /// command is sent.
    +            FLASH_PER_DLY_128: u1,
    +            /// Valid when SPI_MEM_FLASH_PES_WAIT_EN is 1. 1: SPI1 waits
    +            /// (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after PES command is sent.
    +            /// 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after PES
    +            /// command is sent.
    +            FLASH_PES_DLY_128: u1,
    +            /// 1: Enable SPI0 lock SPI0/1 arbiter option. 0: Disable it.
    +            SPI0_LOCK_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0xa4);
    +
    +        /// address: 0x600020a8
    +        /// SPI1 timing control register
    +        pub const TIMING_CALI = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            /// The bit is used to enable timing auto-calibration for all reading operations.
    +            TIMING_CALI: u1,
    +            /// add extra dummy spi clock cycle length for spi clock calibration.
    +            EXTRA_DUMMY_CYCLELEN: u3,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +        }), base_address + 0xa8);
    +
    +        /// address: 0x600020c0
    +        /// SPI1 interrupt enable register
    +        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The enable bit for SPI_MEM_PER_END_INT interrupt.
    +            PER_END_INT_ENA: u1,
    +            /// The enable bit for SPI_MEM_PES_END_INT interrupt.
    +            PES_END_INT_ENA: u1,
    +            /// The enable bit for SPI_MEM_WPE_END_INT interrupt.
    +            WPE_END_INT_ENA: u1,
    +            /// The enable bit for SPI_MEM_SLV_ST_END_INT interrupt.
    +            SLV_ST_END_INT_ENA: u1,
    +            /// The enable bit for SPI_MEM_MST_ST_END_INT interrupt.
    +            MST_ST_END_INT_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +        }), base_address + 0xc0);
    +
    +        /// address: 0x600020c4
    +        /// SPI1 interrupt clear register
    +        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The clear bit for SPI_MEM_PER_END_INT interrupt.
    +            PER_END_INT_CLR: u1,
    +            /// The clear bit for SPI_MEM_PES_END_INT interrupt.
    +            PES_END_INT_CLR: u1,
    +            /// The clear bit for SPI_MEM_WPE_END_INT interrupt.
    +            WPE_END_INT_CLR: u1,
    +            /// The clear bit for SPI_MEM_SLV_ST_END_INT interrupt.
    +            SLV_ST_END_INT_CLR: u1,
    +            /// The clear bit for SPI_MEM_MST_ST_END_INT interrupt.
    +            MST_ST_END_INT_CLR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +        }), base_address + 0xc4);
    +
    +        /// address: 0x600020c8
    +        /// SPI1 interrupt raw register
    +        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The raw bit for SPI_MEM_PER_END_INT interrupt. 1: Triggered when Auto Resume
    +            /// command (0x7A) is sent and flash is resumed. 0: Others.
    +            PER_END_INT_RAW: u1,
    +            /// The raw bit for SPI_MEM_PES_END_INT interrupt.1: Triggered when Auto Suspend
    +            /// command (0x75) is sent and flash is suspended. 0: Others.
    +            PES_END_INT_RAW: u1,
    +            /// The raw bit for SPI_MEM_WPE_END_INT interrupt. 1: Triggered when
    +            /// WRSR/PP/SE/BE/CE is sent and flash is already idle. 0: Others.
    +            WPE_END_INT_RAW: u1,
    +            /// The raw bit for SPI_MEM_SLV_ST_END_INT interrupt. 1: Triggered when spi1_slv_st
    +            /// is changed from non idle state to idle state. It means that SPI_CS raises high.
    +            /// 0: Others
    +            SLV_ST_END_INT_RAW: u1,
    +            /// The raw bit for SPI_MEM_MST_ST_END_INT interrupt. 1: Triggered when spi1_mst_st
    +            /// is changed from non idle state to idle state. 0: Others.
    +            MST_ST_END_INT_RAW: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +        }), base_address + 0xc8);
    +
    +        /// address: 0x600020cc
    +        /// SPI1 interrupt status register
    +        pub const INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The status bit for SPI_MEM_PER_END_INT interrupt.
    +            PER_END_INT_ST: u1,
    +            /// The status bit for SPI_MEM_PES_END_INT interrupt.
    +            PES_END_INT_ST: u1,
    +            /// The status bit for SPI_MEM_WPE_END_INT interrupt.
    +            WPE_END_INT_ST: u1,
    +            /// The status bit for SPI_MEM_SLV_ST_END_INT interrupt.
    +            SLV_ST_END_INT_ST: u1,
    +            /// The status bit for SPI_MEM_MST_ST_END_INT interrupt.
    +            MST_ST_END_INT_ST: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +        }), base_address + 0xcc);
    +
    +        /// address: 0x600020dc
    +        /// SPI1 clk_gate register
    +        pub const CLOCK_GATE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Register clock gate enable signal. 1: Enable. 0: Disable.
    +            CLK_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0xdc);
    +
    +        /// address: 0x600023fc
    +        /// Version control register
    +        pub const DATE = @intToPtr(*volatile MmioInt(32, u28), base_address + 0x3fc);
    +    };
    +
    +    /// SPI (Serial Peripheral Interface) Controller
    +    pub const SPI2 = struct {
    +        pub const base_address = 0x60024000;
    +
    +        /// address: 0x60024000
    +        /// Command control register
    +        pub const CMD = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Define the APB cycles of SPI_CONF state. Can be configured in CONF state.
    +            CONF_BITLEN: u18,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            /// Set this bit to synchronize SPI registers from APB clock domain into SPI module
    +            /// clock domain, which is only used in SPI master mode.
    +            UPDATE: u1,
    +            /// User define command enable. An operation will be triggered when the bit is set.
    +            /// The bit will be cleared once the operation done.1: enable 0: disable. Can not be
    +            /// changed by CONF_buf.
    +            USR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +        }), base_address + 0x0);
    +
    +        /// address: 0x60024004
    +        /// Address value register
    +        pub const ADDR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Address to slave. Can be configured in CONF state.
    +            USR_ADDR_VALUE: u32,
    +        }), base_address + 0x4);
    +
    +        /// address: 0x60024008
    +        /// SPI control register
    +        pub const CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            /// In the dummy phase the signal level of spi is output by the spi controller. Can
    +            /// be configured in CONF state.
    +            DUMMY_OUT: u1,
    +            reserved3: u1,
    +            /// Apply 2 signals during addr phase 1:enable 0: disable. Can be configured in CONF
    +            /// state.
    +            FADDR_DUAL: u1,
    +            /// Apply 4 signals during addr phase 1:enable 0: disable. Can be configured in CONF
    +            /// state.
    +            FADDR_QUAD: u1,
    +            reserved4: u1,
    +            /// Apply 2 signals during command phase 1:enable 0: disable. Can be configured in
    +            /// CONF state.
    +            FCMD_DUAL: u1,
    +            /// Apply 4 signals during command phase 1:enable 0: disable. Can be configured in
    +            /// CONF state.
    +            FCMD_QUAD: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            /// In the read operations, read-data phase apply 2 signals. 1: enable 0: disable.
    +            /// Can be configured in CONF state.
    +            FREAD_DUAL: u1,
    +            /// In the read operations read-data phase apply 4 signals. 1: enable 0: disable.
    +            /// Can be configured in CONF state.
    +            FREAD_QUAD: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            /// The bit is used to set MISO line polarity, 1: high 0, low. Can be configured in
    +            /// CONF state.
    +            Q_POL: u1,
    +            /// The bit is used to set MOSI line polarity, 1: high 0, low. Can be configured in
    +            /// CONF state.
    +            D_POL: u1,
    +            /// SPI_HOLD output value when SPI is idle. 1: output high, 0: output low. Can be
    +            /// configured in CONF state.
    +            HOLD_POL: u1,
    +            /// Write protect signal output when SPI is idle. 1: output high, 0: output low. Can
    +            /// be configured in CONF state.
    +            WP_POL: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            /// In read-data (MISO) phase 1: LSB first 0: MSB first. Can be configured in CONF
    +            /// state.
    +            RD_BIT_ORDER: u1,
    +            /// In command address write-data (MOSI) phases 1: LSB firs 0: MSB first. Can be
    +            /// configured in CONF state.
    +            WR_BIT_ORDER: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +        }), base_address + 0x8);
    +
    +        /// address: 0x6002400c
    +        /// SPI clock control register
    +        pub const CLOCK = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// In the master mode it must be equal to spi_clkcnt_N. In the slave mode it must
    +            /// be 0. Can be configured in CONF state.
    +            CLKCNT_L: u6,
    +            /// In the master mode it must be floor((spi_clkcnt_N+1)/2-1). In the slave mode it
    +            /// must be 0. Can be configured in CONF state.
    +            CLKCNT_H: u6,
    +            /// In the master mode it is the divider of spi_clk. So spi_clk frequency is
    +            /// system/(spi_clkdiv_pre+1)/(spi_clkcnt_N+1). Can be configured in CONF state.
    +            CLKCNT_N: u6,
    +            /// In the master mode it is pre-divider of spi_clk. Can be configured in CONF
    +            /// state.
    +            CLKDIV_PRE: u4,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            /// In the master mode 1: spi_clk is eqaul to system 0: spi_clk is divided from
    +            /// system clock. Can be configured in CONF state.
    +            CLK_EQU_SYSCLK: u1,
    +        }), base_address + 0xc);
    +
    +        /// address: 0x60024010
    +        /// SPI USER control register
    +        pub const USER = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Set the bit to enable full duplex communication. 1: enable 0: disable. Can be
    +            /// configured in CONF state.
    +            DOUTDIN: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// Both for master mode and slave mode. 1: spi controller is in QPI mode. 0:
    +            /// others. Can be configured in CONF state.
    +            QPI_MODE: u1,
    +            reserved2: u1,
    +            /// In the slave mode, this bit can be used to change the polarity of tsck. 0: tsck
    +            /// = spi_ck_i. 1:tsck = !spi_ck_i.
    +            TSCK_I_EDGE: u1,
    +            /// spi cs keep low when spi is in done phase. 1: enable 0: disable. Can be
    +            /// configured in CONF state.
    +            CS_HOLD: u1,
    +            /// spi cs is enable when spi is in prepare phase. 1: enable 0: disable. Can be
    +            /// configured in CONF state.
    +            CS_SETUP: u1,
    +            /// In the slave mode, this bit can be used to change the polarity of rsck. 0: rsck
    +            /// = !spi_ck_i. 1:rsck = spi_ck_i.
    +            RSCK_I_EDGE: u1,
    +            /// the bit combined with spi_mosi_delay_mode bits to set mosi signal delay mode.
    +            /// Can be configured in CONF state.
    +            CK_OUT_EDGE: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            /// In the write operations read-data phase apply 2 signals. Can be configured in
    +            /// CONF state.
    +            FWRITE_DUAL: u1,
    +            /// In the write operations read-data phase apply 4 signals. Can be configured in
    +            /// CONF state.
    +            FWRITE_QUAD: u1,
    +            reserved5: u1,
    +            /// 1: Enable the DMA CONF phase of next seg-trans operation, which means seg-trans
    +            /// will continue. 0: The seg-trans will end after the current SPI seg-trans or this
    +            /// is not seg-trans mode. Can be configured in CONF state.
    +            USR_CONF_NXT: u1,
    +            reserved6: u1,
    +            /// Set the bit to enable 3-line half duplex communication mosi and miso signals
    +            /// share the same pin. 1: enable 0: disable. Can be configured in CONF state.
    +            SIO: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            /// read-data phase only access to high-part of the buffer spi_w8~spi_w15. 1: enable
    +            /// 0: disable. Can be configured in CONF state.
    +            USR_MISO_HIGHPART: u1,
    +            /// write-data phase only access to high-part of the buffer spi_w8~spi_w15. 1:
    +            /// enable 0: disable. Can be configured in CONF state.
    +            USR_MOSI_HIGHPART: u1,
    +            /// spi clock is disable in dummy phase when the bit is enable. Can be configured in
    +            /// CONF state.
    +            USR_DUMMY_IDLE: u1,
    +            /// This bit enable the write-data phase of an operation. Can be configured in CONF
    +            /// state.
    +            USR_MOSI: u1,
    +            /// This bit enable the read-data phase of an operation. Can be configured in CONF
    +            /// state.
    +            USR_MISO: u1,
    +            /// This bit enable the dummy phase of an operation. Can be configured in CONF
    +            /// state.
    +            USR_DUMMY: u1,
    +            /// This bit enable the address phase of an operation. Can be configured in CONF
    +            /// state.
    +            USR_ADDR: u1,
    +            /// This bit enable the command phase of an operation. Can be configured in CONF
    +            /// state.
    +            USR_COMMAND: u1,
    +        }), base_address + 0x10);
    +
    +        /// address: 0x60024014
    +        /// SPI USER control register 1
    +        pub const USER1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The length in spi_clk cycles of dummy phase. The register value shall be
    +            /// (cycle_num-1). Can be configured in CONF state.
    +            USR_DUMMY_CYCLELEN: u8,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            /// 1: SPI transfer is ended when SPI RX AFIFO wfull error is valid in GP-SPI master
    +            /// FD/HD-mode. 0: SPI transfer is not ended when SPI RX AFIFO wfull error is valid
    +            /// in GP-SPI master FD/HD-mode.
    +            MST_WFULL_ERR_END_EN: u1,
    +            /// (cycles+1) of prepare phase by spi clock this bits are combined with
    +            /// spi_cs_setup bit. Can be configured in CONF state.
    +            CS_SETUP_TIME: u5,
    +            /// delay cycles of cs pin by spi clock this bits are combined with spi_cs_hold bit.
    +            /// Can be configured in CONF state.
    +            CS_HOLD_TIME: u5,
    +            /// The length in bits of address phase. The register value shall be (bit_num-1).
    +            /// Can be configured in CONF state.
    +            USR_ADDR_BITLEN: u5,
    +        }), base_address + 0x14);
    +
    +        /// address: 0x60024018
    +        /// SPI USER control register 2
    +        pub const USER2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of command. Can be configured in CONF state.
    +            USR_COMMAND_VALUE: u16,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            /// 1: SPI transfer is ended when SPI TX AFIFO read empty error is valid in GP-SPI
    +            /// master FD/HD-mode. 0: SPI transfer is not ended when SPI TX AFIFO read empty
    +            /// error is valid in GP-SPI master FD/HD-mode.
    +            MST_REMPTY_ERR_END_EN: u1,
    +            /// The length in bits of command phase. The register value shall be (bit_num-1).
    +            /// Can be configured in CONF state.
    +            USR_COMMAND_BITLEN: u4,
    +        }), base_address + 0x18);
    +
    +        /// address: 0x6002401c
    +        /// SPI data bit length control register
    +        pub const MS_DLEN = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The value of these bits is the configured SPI transmission data bit length in
    +            /// master mode DMA controlled transfer or CPU controlled transfer. The value is
    +            /// also the configured bit length in slave mode DMA RX controlled transfer. The
    +            /// register value shall be (bit_num-1). Can be configured in CONF state.
    +            MS_DATA_BITLEN: u18,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +        }), base_address + 0x1c);
    +
    +        /// address: 0x60024020
    +        /// SPI misc register
    +        pub const MISC = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// SPI CS0 pin enable, 1: disable CS0, 0: spi_cs0 signal is from/to CS0 pin. Can be
    +            /// configured in CONF state.
    +            CS0_DIS: u1,
    +            /// SPI CS1 pin enable, 1: disable CS1, 0: spi_cs1 signal is from/to CS1 pin. Can be
    +            /// configured in CONF state.
    +            CS1_DIS: u1,
    +            /// SPI CS2 pin enable, 1: disable CS2, 0: spi_cs2 signal is from/to CS2 pin. Can be
    +            /// configured in CONF state.
    +            CS2_DIS: u1,
    +            /// SPI CS3 pin enable, 1: disable CS3, 0: spi_cs3 signal is from/to CS3 pin. Can be
    +            /// configured in CONF state.
    +            CS3_DIS: u1,
    +            /// SPI CS4 pin enable, 1: disable CS4, 0: spi_cs4 signal is from/to CS4 pin. Can be
    +            /// configured in CONF state.
    +            CS4_DIS: u1,
    +            /// SPI CS5 pin enable, 1: disable CS5, 0: spi_cs5 signal is from/to CS5 pin. Can be
    +            /// configured in CONF state.
    +            CS5_DIS: u1,
    +            /// 1: spi clk out disable, 0: spi clk out enable. Can be configured in CONF state.
    +            CK_DIS: u1,
    +            /// In the master mode the bits are the polarity of spi cs line, the value is
    +            /// equivalent to spi_cs ^ spi_master_cs_pol. Can be configured in CONF state.
    +            MASTER_CS_POL: u6,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            /// spi slave input cs polarity select. 1: inv 0: not change. Can be configured in
    +            /// CONF state.
    +            SLAVE_CS_POL: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            /// 1: spi clk line is high when idle 0: spi clk line is low when idle. Can be
    +            /// configured in CONF state.
    +            CK_IDLE_EDGE: u1,
    +            /// spi cs line keep low when the bit is set. Can be configured in CONF state.
    +            CS_KEEP_ACTIVE: u1,
    +            /// 1: spi quad input swap enable 0: spi quad input swap disable. Can be configured
    +            /// in CONF state.
    +            QUAD_DIN_PIN_SWAP: u1,
    +        }), base_address + 0x20);
    +
    +        /// address: 0x60024024
    +        /// SPI input delay mode configuration
    +        pub const DIN_MODE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// the input signals are delayed by SPI module clock cycles, 0: input without
    +            /// delayed, 1: input with the posedge of clk_apb,2 input with the negedge of
    +            /// clk_apb, 3: input with the spi_clk. Can be configured in CONF state.
    +            DIN0_MODE: u2,
    +            /// the input signals are delayed by SPI module clock cycles, 0: input without
    +            /// delayed, 1: input with the posedge of clk_apb,2 input with the negedge of
    +            /// clk_apb, 3: input with the spi_clk. Can be configured in CONF state.
    +            DIN1_MODE: u2,
    +            /// the input signals are delayed by SPI module clock cycles, 0: input without
    +            /// delayed, 1: input with the posedge of clk_apb,2 input with the negedge of
    +            /// clk_apb, 3: input with the spi_clk. Can be configured in CONF state.
    +            DIN2_MODE: u2,
    +            /// the input signals are delayed by SPI module clock cycles, 0: input without
    +            /// delayed, 1: input with the posedge of clk_apb,2 input with the negedge of
    +            /// clk_apb, 3: input with the spi_clk. Can be configured in CONF state.
    +            DIN3_MODE: u2,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            /// 1:enable hclk in SPI input timing module. 0: disable it. Can be configured in
    +            /// CONF state.
    +            TIMING_HCLK_ACTIVE: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +        }), base_address + 0x24);
    +
    +        /// address: 0x60024028
    +        /// SPI input delay number configuration
    +        pub const DIN_NUM = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle,
    +            /// 1: delayed by 2 cycles,... Can be configured in CONF state.
    +            DIN0_NUM: u2,
    +            /// the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle,
    +            /// 1: delayed by 2 cycles,... Can be configured in CONF state.
    +            DIN1_NUM: u2,
    +            /// the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle,
    +            /// 1: delayed by 2 cycles,... Can be configured in CONF state.
    +            DIN2_NUM: u2,
    +            /// the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle,
    +            /// 1: delayed by 2 cycles,... Can be configured in CONF state.
    +            DIN3_NUM: u2,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x28);
    +
    +        /// address: 0x6002402c
    +        /// SPI output delay mode configuration
    +        pub const DOUT_MODE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The output signal 0 is delayed by the SPI module clock, 0: output without
    +            /// delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can
    +            /// be configured in CONF state.
    +            DOUT0_MODE: u1,
    +            /// The output signal 1 is delayed by the SPI module clock, 0: output without
    +            /// delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can
    +            /// be configured in CONF state.
    +            DOUT1_MODE: u1,
    +            /// The output signal 2 is delayed by the SPI module clock, 0: output without
    +            /// delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can
    +            /// be configured in CONF state.
    +            DOUT2_MODE: u1,
    +            /// The output signal 3 is delayed by the SPI module clock, 0: output without
    +            /// delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can
    +            /// be configured in CONF state.
    +            DOUT3_MODE: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x2c);
    +
    +        /// address: 0x60024030
    +        /// SPI DMA control register
    +        pub const DMA_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            /// Enable dma segment transfer in spi dma half slave mode. 1: enable. 0: disable.
    +            DMA_SLV_SEG_TRANS_EN: u1,
    +            /// 1: spi_dma_infifo_full_vld is cleared by spi slave cmd 5. 0:
    +            /// spi_dma_infifo_full_vld is cleared by spi_trans_done.
    +            SLV_RX_SEG_TRANS_CLR_EN: u1,
    +            /// 1: spi_dma_outfifo_empty_vld is cleared by spi slave cmd 6. 0:
    +            /// spi_dma_outfifo_empty_vld is cleared by spi_trans_done.
    +            SLV_TX_SEG_TRANS_CLR_EN: u1,
    +            /// 1: spi_dma_inlink_eof is set when the number of dma pushed data bytes is equal
    +            /// to the value of spi_slv/mst_dma_rd_bytelen[19:0] in spi dma transition. 0:
    +            /// spi_dma_inlink_eof is set by spi_trans_done in non-seg-trans or
    +            /// spi_dma_seg_trans_done in seg-trans.
    +            RX_EOF_EN: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            /// Set this bit to enable SPI DMA controlled receive data mode.
    +            DMA_RX_ENA: u1,
    +            /// Set this bit to enable SPI DMA controlled send data mode.
    +            DMA_TX_ENA: u1,
    +            /// Set this bit to reset RX AFIFO, which is used to receive data in SPI master and
    +            /// slave mode transfer.
    +            RX_AFIFO_RST: u1,
    +            /// Set this bit to reset BUF TX AFIFO, which is used send data out in SPI slave CPU
    +            /// controlled mode transfer and master mode transfer.
    +            BUF_AFIFO_RST: u1,
    +            /// Set this bit to reset DMA TX AFIFO, which is used to send data out in SPI slave
    +            /// DMA controlled mode transfer.
    +            DMA_AFIFO_RST: u1,
    +        }), base_address + 0x30);
    +
    +        /// address: 0x60024034
    +        /// SPI DMA interrupt enable register
    +        pub const DMA_INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The enable bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt.
    +            DMA_INFIFO_FULL_ERR_INT_ENA: u1,
    +            /// The enable bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt.
    +            DMA_OUTFIFO_EMPTY_ERR_INT_ENA: u1,
    +            /// The enable bit for SPI slave Ex_QPI interrupt.
    +            SLV_EX_QPI_INT_ENA: u1,
    +            /// The enable bit for SPI slave En_QPI interrupt.
    +            SLV_EN_QPI_INT_ENA: u1,
    +            /// The enable bit for SPI slave CMD7 interrupt.
    +            SLV_CMD7_INT_ENA: u1,
    +            /// The enable bit for SPI slave CMD8 interrupt.
    +            SLV_CMD8_INT_ENA: u1,
    +            /// The enable bit for SPI slave CMD9 interrupt.
    +            SLV_CMD9_INT_ENA: u1,
    +            /// The enable bit for SPI slave CMDA interrupt.
    +            SLV_CMDA_INT_ENA: u1,
    +            /// The enable bit for SPI_SLV_RD_DMA_DONE_INT interrupt.
    +            SLV_RD_DMA_DONE_INT_ENA: u1,
    +            /// The enable bit for SPI_SLV_WR_DMA_DONE_INT interrupt.
    +            SLV_WR_DMA_DONE_INT_ENA: u1,
    +            /// The enable bit for SPI_SLV_RD_BUF_DONE_INT interrupt.
    +            SLV_RD_BUF_DONE_INT_ENA: u1,
    +            /// The enable bit for SPI_SLV_WR_BUF_DONE_INT interrupt.
    +            SLV_WR_BUF_DONE_INT_ENA: u1,
    +            /// The enable bit for SPI_TRANS_DONE_INT interrupt.
    +            TRANS_DONE_INT_ENA: u1,
    +            /// The enable bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt.
    +            DMA_SEG_TRANS_DONE_INT_ENA: u1,
    +            /// The enable bit for SPI_SEG_MAGIC_ERR_INT interrupt.
    +            SEG_MAGIC_ERR_INT_ENA: u1,
    +            /// The enable bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt.
    +            SLV_BUF_ADDR_ERR_INT_ENA: u1,
    +            /// The enable bit for SPI_SLV_CMD_ERR_INT interrupt.
    +            SLV_CMD_ERR_INT_ENA: u1,
    +            /// The enable bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt.
    +            MST_RX_AFIFO_WFULL_ERR_INT_ENA: u1,
    +            /// The enable bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt.
    +            MST_TX_AFIFO_REMPTY_ERR_INT_ENA: u1,
    +            /// The enable bit for SPI_APP2_INT interrupt.
    +            APP2_INT_ENA: u1,
    +            /// The enable bit for SPI_APP1_INT interrupt.
    +            APP1_INT_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +        }), base_address + 0x34);
    +
    +        /// address: 0x60024038
    +        /// SPI DMA interrupt clear register
    +        pub const DMA_INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The clear bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt.
    +            DMA_INFIFO_FULL_ERR_INT_CLR: u1,
    +            /// The clear bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt.
    +            DMA_OUTFIFO_EMPTY_ERR_INT_CLR: u1,
    +            /// The clear bit for SPI slave Ex_QPI interrupt.
    +            SLV_EX_QPI_INT_CLR: u1,
    +            /// The clear bit for SPI slave En_QPI interrupt.
    +            SLV_EN_QPI_INT_CLR: u1,
    +            /// The clear bit for SPI slave CMD7 interrupt.
    +            SLV_CMD7_INT_CLR: u1,
    +            /// The clear bit for SPI slave CMD8 interrupt.
    +            SLV_CMD8_INT_CLR: u1,
    +            /// The clear bit for SPI slave CMD9 interrupt.
    +            SLV_CMD9_INT_CLR: u1,
    +            /// The clear bit for SPI slave CMDA interrupt.
    +            SLV_CMDA_INT_CLR: u1,
    +            /// The clear bit for SPI_SLV_RD_DMA_DONE_INT interrupt.
    +            SLV_RD_DMA_DONE_INT_CLR: u1,
    +            /// The clear bit for SPI_SLV_WR_DMA_DONE_INT interrupt.
    +            SLV_WR_DMA_DONE_INT_CLR: u1,
    +            /// The clear bit for SPI_SLV_RD_BUF_DONE_INT interrupt.
    +            SLV_RD_BUF_DONE_INT_CLR: u1,
    +            /// The clear bit for SPI_SLV_WR_BUF_DONE_INT interrupt.
    +            SLV_WR_BUF_DONE_INT_CLR: u1,
    +            /// The clear bit for SPI_TRANS_DONE_INT interrupt.
    +            TRANS_DONE_INT_CLR: u1,
    +            /// The clear bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt.
    +            DMA_SEG_TRANS_DONE_INT_CLR: u1,
    +            /// The clear bit for SPI_SEG_MAGIC_ERR_INT interrupt.
    +            SEG_MAGIC_ERR_INT_CLR: u1,
    +            /// The clear bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt.
    +            SLV_BUF_ADDR_ERR_INT_CLR: u1,
    +            /// The clear bit for SPI_SLV_CMD_ERR_INT interrupt.
    +            SLV_CMD_ERR_INT_CLR: u1,
    +            /// The clear bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt.
    +            MST_RX_AFIFO_WFULL_ERR_INT_CLR: u1,
    +            /// The clear bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt.
    +            MST_TX_AFIFO_REMPTY_ERR_INT_CLR: u1,
    +            /// The clear bit for SPI_APP2_INT interrupt.
    +            APP2_INT_CLR: u1,
    +            /// The clear bit for SPI_APP1_INT interrupt.
    +            APP1_INT_CLR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +        }), base_address + 0x38);
    +
    +        /// address: 0x6002403c
    +        /// SPI DMA interrupt raw register
    +        pub const DMA_INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// 1: The current data rate of DMA Rx is smaller than that of SPI, which will lose
    +            /// the receive data. 0: Others.
    +            DMA_INFIFO_FULL_ERR_INT_RAW: u1,
    +            /// 1: The current data rate of DMA TX is smaller than that of SPI. SPI will stop in
    +            /// master mode and send out all 0 in slave mode. 0: Others.
    +            DMA_OUTFIFO_EMPTY_ERR_INT_RAW: u1,
    +            /// The raw bit for SPI slave Ex_QPI interrupt. 1: SPI slave mode Ex_QPI
    +            /// transmission is ended. 0: Others.
    +            SLV_EX_QPI_INT_RAW: u1,
    +            /// The raw bit for SPI slave En_QPI interrupt. 1: SPI slave mode En_QPI
    +            /// transmission is ended. 0: Others.
    +            SLV_EN_QPI_INT_RAW: u1,
    +            /// The raw bit for SPI slave CMD7 interrupt. 1: SPI slave mode CMD7 transmission is
    +            /// ended. 0: Others.
    +            SLV_CMD7_INT_RAW: u1,
    +            /// The raw bit for SPI slave CMD8 interrupt. 1: SPI slave mode CMD8 transmission is
    +            /// ended. 0: Others.
    +            SLV_CMD8_INT_RAW: u1,
    +            /// The raw bit for SPI slave CMD9 interrupt. 1: SPI slave mode CMD9 transmission is
    +            /// ended. 0: Others.
    +            SLV_CMD9_INT_RAW: u1,
    +            /// The raw bit for SPI slave CMDA interrupt. 1: SPI slave mode CMDA transmission is
    +            /// ended. 0: Others.
    +            SLV_CMDA_INT_RAW: u1,
    +            /// The raw bit for SPI_SLV_RD_DMA_DONE_INT interrupt. 1: SPI slave mode Rd_DMA
    +            /// transmission is ended. 0: Others.
    +            SLV_RD_DMA_DONE_INT_RAW: u1,
    +            /// The raw bit for SPI_SLV_WR_DMA_DONE_INT interrupt. 1: SPI slave mode Wr_DMA
    +            /// transmission is ended. 0: Others.
    +            SLV_WR_DMA_DONE_INT_RAW: u1,
    +            /// The raw bit for SPI_SLV_RD_BUF_DONE_INT interrupt. 1: SPI slave mode Rd_BUF
    +            /// transmission is ended. 0: Others.
    +            SLV_RD_BUF_DONE_INT_RAW: u1,
    +            /// The raw bit for SPI_SLV_WR_BUF_DONE_INT interrupt. 1: SPI slave mode Wr_BUF
    +            /// transmission is ended. 0: Others.
    +            SLV_WR_BUF_DONE_INT_RAW: u1,
    +            /// The raw bit for SPI_TRANS_DONE_INT interrupt. 1: SPI master mode transmission is
    +            /// ended. 0: others.
    +            TRANS_DONE_INT_RAW: u1,
    +            /// The raw bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt. 1: spi master DMA
    +            /// full-duplex/half-duplex seg-conf-trans ends or slave half-duplex seg-trans ends.
    +            /// And data has been pushed to corresponding memory. 0: seg-conf-trans or seg-trans
    +            /// is not ended or not occurred.
    +            DMA_SEG_TRANS_DONE_INT_RAW: u1,
    +            /// The raw bit for SPI_SEG_MAGIC_ERR_INT interrupt. 1: The magic value in CONF
    +            /// buffer is error in the DMA seg-conf-trans. 0: others.
    +            SEG_MAGIC_ERR_INT_RAW: u1,
    +            /// The raw bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt. 1: The accessing data
    +            /// address of the current SPI slave mode CPU controlled FD, Wr_BUF or Rd_BUF
    +            /// transmission is bigger than 63. 0: Others.
    +            SLV_BUF_ADDR_ERR_INT_RAW: u1,
    +            /// The raw bit for SPI_SLV_CMD_ERR_INT interrupt. 1: The slave command value in the
    +            /// current SPI slave HD mode transmission is not supported. 0: Others.
    +            SLV_CMD_ERR_INT_RAW: u1,
    +            /// The raw bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt. 1: There is a RX AFIFO
    +            /// write-full error when SPI inputs data in master mode. 0: Others.
    +            MST_RX_AFIFO_WFULL_ERR_INT_RAW: u1,
    +            /// The raw bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt. 1: There is a TX BUF
    +            /// AFIFO read-empty error when SPI outputs data in master mode. 0: Others.
    +            MST_TX_AFIFO_REMPTY_ERR_INT_RAW: u1,
    +            /// The raw bit for SPI_APP2_INT interrupt. The value is only controlled by
    +            /// application.
    +            APP2_INT_RAW: u1,
    +            /// The raw bit for SPI_APP1_INT interrupt. The value is only controlled by
    +            /// application.
    +            APP1_INT_RAW: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +        }), base_address + 0x3c);
    +
    +        /// address: 0x60024040
    +        /// SPI DMA interrupt status register
    +        pub const DMA_INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The status bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt.
    +            DMA_INFIFO_FULL_ERR_INT_ST: u1,
    +            /// The status bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt.
    +            DMA_OUTFIFO_EMPTY_ERR_INT_ST: u1,
    +            /// The status bit for SPI slave Ex_QPI interrupt.
    +            SLV_EX_QPI_INT_ST: u1,
    +            /// The status bit for SPI slave En_QPI interrupt.
    +            SLV_EN_QPI_INT_ST: u1,
    +            /// The status bit for SPI slave CMD7 interrupt.
    +            SLV_CMD7_INT_ST: u1,
    +            /// The status bit for SPI slave CMD8 interrupt.
    +            SLV_CMD8_INT_ST: u1,
    +            /// The status bit for SPI slave CMD9 interrupt.
    +            SLV_CMD9_INT_ST: u1,
    +            /// The status bit for SPI slave CMDA interrupt.
    +            SLV_CMDA_INT_ST: u1,
    +            /// The status bit for SPI_SLV_RD_DMA_DONE_INT interrupt.
    +            SLV_RD_DMA_DONE_INT_ST: u1,
    +            /// The status bit for SPI_SLV_WR_DMA_DONE_INT interrupt.
    +            SLV_WR_DMA_DONE_INT_ST: u1,
    +            /// The status bit for SPI_SLV_RD_BUF_DONE_INT interrupt.
    +            SLV_RD_BUF_DONE_INT_ST: u1,
    +            /// The status bit for SPI_SLV_WR_BUF_DONE_INT interrupt.
    +            SLV_WR_BUF_DONE_INT_ST: u1,
    +            /// The status bit for SPI_TRANS_DONE_INT interrupt.
    +            TRANS_DONE_INT_ST: u1,
    +            /// The status bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt.
    +            DMA_SEG_TRANS_DONE_INT_ST: u1,
    +            /// The status bit for SPI_SEG_MAGIC_ERR_INT interrupt.
    +            SEG_MAGIC_ERR_INT_ST: u1,
    +            /// The status bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt.
    +            SLV_BUF_ADDR_ERR_INT_ST: u1,
    +            /// The status bit for SPI_SLV_CMD_ERR_INT interrupt.
    +            SLV_CMD_ERR_INT_ST: u1,
    +            /// The status bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt.
    +            MST_RX_AFIFO_WFULL_ERR_INT_ST: u1,
    +            /// The status bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt.
    +            MST_TX_AFIFO_REMPTY_ERR_INT_ST: u1,
    +            /// The status bit for SPI_APP2_INT interrupt.
    +            APP2_INT_ST: u1,
    +            /// The status bit for SPI_APP1_INT interrupt.
    +            APP1_INT_ST: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +        }), base_address + 0x40);
    +
    +        /// address: 0x60024098
    +        /// SPI CPU-controlled buffer0
    +        pub const W0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF0: u32,
    +        }), base_address + 0x98);
    +
    +        /// address: 0x6002409c
    +        /// SPI CPU-controlled buffer1
    +        pub const W1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF1: u32,
    +        }), base_address + 0x9c);
    +
    +        /// address: 0x600240a0
    +        /// SPI CPU-controlled buffer2
    +        pub const W2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF2: u32,
    +        }), base_address + 0xa0);
    +
    +        /// address: 0x600240a4
    +        /// SPI CPU-controlled buffer3
    +        pub const W3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF3: u32,
    +        }), base_address + 0xa4);
    +
    +        /// address: 0x600240a8
    +        /// SPI CPU-controlled buffer4
    +        pub const W4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF4: u32,
    +        }), base_address + 0xa8);
    +
    +        /// address: 0x600240ac
    +        /// SPI CPU-controlled buffer5
    +        pub const W5 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF5: u32,
    +        }), base_address + 0xac);
    +
    +        /// address: 0x600240b0
    +        /// SPI CPU-controlled buffer6
    +        pub const W6 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF6: u32,
    +        }), base_address + 0xb0);
    +
    +        /// address: 0x600240b4
    +        /// SPI CPU-controlled buffer7
    +        pub const W7 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF7: u32,
    +        }), base_address + 0xb4);
    +
    +        /// address: 0x600240b8
    +        /// SPI CPU-controlled buffer8
    +        pub const W8 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF8: u32,
    +        }), base_address + 0xb8);
    +
    +        /// address: 0x600240bc
    +        /// SPI CPU-controlled buffer9
    +        pub const W9 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF9: u32,
    +        }), base_address + 0xbc);
    +
    +        /// address: 0x600240c0
    +        /// SPI CPU-controlled buffer10
    +        pub const W10 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF10: u32,
    +        }), base_address + 0xc0);
    +
    +        /// address: 0x600240c4
    +        /// SPI CPU-controlled buffer11
    +        pub const W11 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF11: u32,
    +        }), base_address + 0xc4);
    +
    +        /// address: 0x600240c8
    +        /// SPI CPU-controlled buffer12
    +        pub const W12 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF12: u32,
    +        }), base_address + 0xc8);
    +
    +        /// address: 0x600240cc
    +        /// SPI CPU-controlled buffer13
    +        pub const W13 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF13: u32,
    +        }), base_address + 0xcc);
    +
    +        /// address: 0x600240d0
    +        /// SPI CPU-controlled buffer14
    +        pub const W14 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF14: u32,
    +        }), base_address + 0xd0);
    +
    +        /// address: 0x600240d4
    +        /// SPI CPU-controlled buffer15
    +        pub const W15 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// data buffer
    +            BUF15: u32,
    +        }), base_address + 0xd4);
    +
    +        /// address: 0x600240e0
    +        /// SPI slave control register
    +        pub const SLAVE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is
    +            /// delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS
    +            /// inactive 3: SPI clock is alwasy on. Can be configured in CONF state.
    +            CLK_MODE: u2,
    +            /// {CPOL, CPHA},1: support spi clk mode 1 and 3, first edge output data B[0]/B[7].
    +            /// 0: support spi clk mode 0 and 2, first edge output data B[1]/B[6].
    +            CLK_MODE_13: u1,
    +            /// It saves half a cycle when tsck is the same as rsck. 1: output data at rsck
    +            /// posedge 0: output data at tsck posedge
    +            RSCK_DATA_OUT: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            /// 1: SPI_SLV_DATA_BITLEN stores data bit length of master-read-slave data length
    +            /// in DMA controlled mode(Rd_DMA). 0: others
    +            SLV_RDDMA_BITLEN_EN: u1,
    +            /// 1: SPI_SLV_DATA_BITLEN stores data bit length of master-write-to-slave data
    +            /// length in DMA controlled mode(Wr_DMA). 0: others
    +            SLV_WRDMA_BITLEN_EN: u1,
    +            /// 1: SPI_SLV_DATA_BITLEN stores data bit length of master-read-slave data length
    +            /// in CPU controlled mode(Rd_BUF). 0: others
    +            SLV_RDBUF_BITLEN_EN: u1,
    +            /// 1: SPI_SLV_DATA_BITLEN stores data bit length of master-write-to-slave data
    +            /// length in CPU controlled mode(Wr_BUF). 0: others
    +            SLV_WRBUF_BITLEN_EN: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            /// The magic value of BM table in master DMA seg-trans.
    +            DMA_SEG_MAGIC_VALUE: u4,
    +            /// Set SPI work mode. 1: slave mode 0: master mode.
    +            MODE: u1,
    +            /// Software reset enable, reset the spi clock line cs line and data lines. Can be
    +            /// configured in CONF state.
    +            SOFT_RESET: u1,
    +            /// 1: Enable the DMA CONF phase of current seg-trans operation, which means
    +            /// seg-trans will start. 0: This is not seg-trans mode.
    +            USR_CONF: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +        }), base_address + 0xe0);
    +
    +        /// address: 0x600240e4
    +        /// SPI slave control register 1
    +        pub const SLAVE1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The transferred data bit length in SPI slave FD and HD mode.
    +            SLV_DATA_BITLEN: u18,
    +            /// In the slave mode it is the value of command.
    +            SLV_LAST_COMMAND: u8,
    +            /// In the slave mode it is the value of address.
    +            SLV_LAST_ADDR: u6,
    +        }), base_address + 0xe4);
    +
    +        /// address: 0x600240e8
    +        /// SPI module clock and register clock control
    +        pub const CLK_GATE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Set this bit to enable clk gate
    +            CLK_EN: u1,
    +            /// Set this bit to power on the SPI module clock.
    +            MST_CLK_ACTIVE: u1,
    +            /// This bit is used to select SPI module clock source in master mode. 1:
    +            /// PLL_CLK_80M. 0: XTAL CLK.
    +            MST_CLK_SEL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +        }), base_address + 0xe8);
    +
    +        /// address: 0x600240f0
    +        /// Version control
    +        pub const DATE = @intToPtr(*volatile MmioInt(32, u28), base_address + 0xf0);
    +    };
    +
    +    /// System
    +    pub const SYSTEM = struct {
    +        pub const base_address = 0x600c0000;
    +
    +        /// address: 0x600c0000
    +        /// cpu_peripheral clock gating register
    +        pub const CPU_PERI_CLK_EN = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            /// reg_clk_en_assist_debug
    +            CLK_EN_ASSIST_DEBUG: u1,
    +            /// reg_clk_en_dedicated_gpio
    +            CLK_EN_DEDICATED_GPIO: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x0);
    +
    +        /// address: 0x600c0004
    +        /// cpu_peripheral reset register
    +        pub const CPU_PERI_RST_EN = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            /// reg_rst_en_assist_debug
    +            RST_EN_ASSIST_DEBUG: u1,
    +            /// reg_rst_en_dedicated_gpio
    +            RST_EN_DEDICATED_GPIO: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x4);
    +
    +        /// address: 0x600c0008
    +        /// cpu clock config register
    +        pub const CPU_PER_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_cpuperiod_sel
    +            CPUPERIOD_SEL: u2,
    +            /// reg_pll_freq_sel
    +            PLL_FREQ_SEL: u1,
    +            /// reg_cpu_wait_mode_force_on
    +            CPU_WAIT_MODE_FORCE_ON: u1,
    +            /// reg_cpu_waiti_delay_num
    +            CPU_WAITI_DELAY_NUM: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x8);
    +
    +        /// address: 0x600c000c
    +        /// memory power down mask register
    +        pub const MEM_PD_MASK = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_lslp_mem_pd_mask
    +            LSLP_MEM_PD_MASK: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0xc);
    +
    +        /// address: 0x600c0010
    +        /// peripheral clock gating register
    +        pub const PERIP_CLK_EN0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_timers_clk_en
    +            TIMERS_CLK_EN: u1,
    +            /// reg_spi01_clk_en
    +            SPI01_CLK_EN: u1,
    +            /// reg_uart_clk_en
    +            UART_CLK_EN: u1,
    +            /// reg_wdg_clk_en
    +            WDG_CLK_EN: u1,
    +            /// reg_i2s0_clk_en
    +            I2S0_CLK_EN: u1,
    +            /// reg_uart1_clk_en
    +            UART1_CLK_EN: u1,
    +            /// reg_spi2_clk_en
    +            SPI2_CLK_EN: u1,
    +            /// reg_ext0_clk_en
    +            I2C_EXT0_CLK_EN: u1,
    +            /// reg_uhci0_clk_en
    +            UHCI0_CLK_EN: u1,
    +            /// reg_rmt_clk_en
    +            RMT_CLK_EN: u1,
    +            /// reg_pcnt_clk_en
    +            PCNT_CLK_EN: u1,
    +            /// reg_ledc_clk_en
    +            LEDC_CLK_EN: u1,
    +            /// reg_uhci1_clk_en
    +            UHCI1_CLK_EN: u1,
    +            /// reg_timergroup_clk_en
    +            TIMERGROUP_CLK_EN: u1,
    +            /// reg_efuse_clk_en
    +            EFUSE_CLK_EN: u1,
    +            /// reg_timergroup1_clk_en
    +            TIMERGROUP1_CLK_EN: u1,
    +            /// reg_spi3_clk_en
    +            SPI3_CLK_EN: u1,
    +            /// reg_pwm0_clk_en
    +            PWM0_CLK_EN: u1,
    +            /// reg_ext1_clk_en
    +            EXT1_CLK_EN: u1,
    +            /// reg_can_clk_en
    +            CAN_CLK_EN: u1,
    +            /// reg_pwm1_clk_en
    +            PWM1_CLK_EN: u1,
    +            /// reg_i2s1_clk_en
    +            I2S1_CLK_EN: u1,
    +            /// reg_spi2_dma_clk_en
    +            SPI2_DMA_CLK_EN: u1,
    +            /// reg_usb_device_clk_en
    +            USB_DEVICE_CLK_EN: u1,
    +            /// reg_uart_mem_clk_en
    +            UART_MEM_CLK_EN: u1,
    +            /// reg_pwm2_clk_en
    +            PWM2_CLK_EN: u1,
    +            /// reg_pwm3_clk_en
    +            PWM3_CLK_EN: u1,
    +            /// reg_spi3_dma_clk_en
    +            SPI3_DMA_CLK_EN: u1,
    +            /// reg_apb_saradc_clk_en
    +            APB_SARADC_CLK_EN: u1,
    +            /// reg_systimer_clk_en
    +            SYSTIMER_CLK_EN: u1,
    +            /// reg_adc2_arb_clk_en
    +            ADC2_ARB_CLK_EN: u1,
    +            /// reg_spi4_clk_en
    +            SPI4_CLK_EN: u1,
    +        }), base_address + 0x10);
    +
    +        /// address: 0x600c0014
    +        /// peripheral clock gating register
    +        pub const PERIP_CLK_EN1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            /// reg_crypto_aes_clk_en
    +            CRYPTO_AES_CLK_EN: u1,
    +            /// reg_crypto_sha_clk_en
    +            CRYPTO_SHA_CLK_EN: u1,
    +            /// reg_crypto_rsa_clk_en
    +            CRYPTO_RSA_CLK_EN: u1,
    +            /// reg_crypto_ds_clk_en
    +            CRYPTO_DS_CLK_EN: u1,
    +            /// reg_crypto_hmac_clk_en
    +            CRYPTO_HMAC_CLK_EN: u1,
    +            /// reg_dma_clk_en
    +            DMA_CLK_EN: u1,
    +            /// reg_sdio_host_clk_en
    +            SDIO_HOST_CLK_EN: u1,
    +            /// reg_lcd_cam_clk_en
    +            LCD_CAM_CLK_EN: u1,
    +            /// reg_uart2_clk_en
    +            UART2_CLK_EN: u1,
    +            /// reg_tsens_clk_en
    +            TSENS_CLK_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x14);
    +
    +        /// address: 0x600c0018
    +        /// reserved
    +        pub const PERIP_RST_EN0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_timers_rst
    +            TIMERS_RST: u1,
    +            /// reg_spi01_rst
    +            SPI01_RST: u1,
    +            /// reg_uart_rst
    +            UART_RST: u1,
    +            /// reg_wdg_rst
    +            WDG_RST: u1,
    +            /// reg_i2s0_rst
    +            I2S0_RST: u1,
    +            /// reg_uart1_rst
    +            UART1_RST: u1,
    +            /// reg_spi2_rst
    +            SPI2_RST: u1,
    +            /// reg_ext0_rst
    +            I2C_EXT0_RST: u1,
    +            /// reg_uhci0_rst
    +            UHCI0_RST: u1,
    +            /// reg_rmt_rst
    +            RMT_RST: u1,
    +            /// reg_pcnt_rst
    +            PCNT_RST: u1,
    +            /// reg_ledc_rst
    +            LEDC_RST: u1,
    +            /// reg_uhci1_rst
    +            UHCI1_RST: u1,
    +            /// reg_timergroup_rst
    +            TIMERGROUP_RST: u1,
    +            /// reg_efuse_rst
    +            EFUSE_RST: u1,
    +            /// reg_timergroup1_rst
    +            TIMERGROUP1_RST: u1,
    +            /// reg_spi3_rst
    +            SPI3_RST: u1,
    +            /// reg_pwm0_rst
    +            PWM0_RST: u1,
    +            /// reg_ext1_rst
    +            EXT1_RST: u1,
    +            /// reg_can_rst
    +            CAN_RST: u1,
    +            /// reg_pwm1_rst
    +            PWM1_RST: u1,
    +            /// reg_i2s1_rst
    +            I2S1_RST: u1,
    +            /// reg_spi2_dma_rst
    +            SPI2_DMA_RST: u1,
    +            /// reg_usb_device_rst
    +            USB_DEVICE_RST: u1,
    +            /// reg_uart_mem_rst
    +            UART_MEM_RST: u1,
    +            /// reg_pwm2_rst
    +            PWM2_RST: u1,
    +            /// reg_pwm3_rst
    +            PWM3_RST: u1,
    +            /// reg_spi3_dma_rst
    +            SPI3_DMA_RST: u1,
    +            /// reg_apb_saradc_rst
    +            APB_SARADC_RST: u1,
    +            /// reg_systimer_rst
    +            SYSTIMER_RST: u1,
    +            /// reg_adc2_arb_rst
    +            ADC2_ARB_RST: u1,
    +            /// reg_spi4_rst
    +            SPI4_RST: u1,
    +        }), base_address + 0x18);
    +
    +        /// address: 0x600c001c
    +        /// peripheral reset register
    +        pub const PERIP_RST_EN1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            /// reg_crypto_aes_rst
    +            CRYPTO_AES_RST: u1,
    +            /// reg_crypto_sha_rst
    +            CRYPTO_SHA_RST: u1,
    +            /// reg_crypto_rsa_rst
    +            CRYPTO_RSA_RST: u1,
    +            /// reg_crypto_ds_rst
    +            CRYPTO_DS_RST: u1,
    +            /// reg_crypto_hmac_rst
    +            CRYPTO_HMAC_RST: u1,
    +            /// reg_dma_rst
    +            DMA_RST: u1,
    +            /// reg_sdio_host_rst
    +            SDIO_HOST_RST: u1,
    +            /// reg_lcd_cam_rst
    +            LCD_CAM_RST: u1,
    +            /// reg_uart2_rst
    +            UART2_RST: u1,
    +            /// reg_tsens_rst
    +            TSENS_RST: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x1c);
    +
    +        /// address: 0x600c0020
    +        /// clock config register
    +        pub const BT_LPCK_DIV_INT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_bt_lpck_div_num
    +            BT_LPCK_DIV_NUM: u12,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0x20);
    +
    +        /// address: 0x600c0024
    +        /// clock config register
    +        pub const BT_LPCK_DIV_FRAC = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_bt_lpck_div_b
    +            BT_LPCK_DIV_B: u12,
    +            /// reg_bt_lpck_div_a
    +            BT_LPCK_DIV_A: u12,
    +            /// reg_lpclk_sel_rtc_slow
    +            LPCLK_SEL_RTC_SLOW: u1,
    +            /// reg_lpclk_sel_8m
    +            LPCLK_SEL_8M: u1,
    +            /// reg_lpclk_sel_xtal
    +            LPCLK_SEL_XTAL: u1,
    +            /// reg_lpclk_sel_xtal32k
    +            LPCLK_SEL_XTAL32K: u1,
    +            /// reg_lpclk_rtc_en
    +            LPCLK_RTC_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +        }), base_address + 0x24);
    +
    +        /// address: 0x600c0028
    +        /// interrupt generate register
    +        pub const CPU_INTR_FROM_CPU_0 = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x28);
    +
    +        /// address: 0x600c002c
    +        /// interrupt generate register
    +        pub const CPU_INTR_FROM_CPU_1 = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x2c);
    +
    +        /// address: 0x600c0030
    +        /// interrupt generate register
    +        pub const CPU_INTR_FROM_CPU_2 = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x30);
    +
    +        /// address: 0x600c0034
    +        /// interrupt generate register
    +        pub const CPU_INTR_FROM_CPU_3 = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x34);
    +
    +        /// address: 0x600c0038
    +        /// rsa memory power control register
    +        pub const RSA_PD_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_rsa_mem_pd
    +            RSA_MEM_PD: u1,
    +            /// reg_rsa_mem_force_pu
    +            RSA_MEM_FORCE_PU: u1,
    +            /// reg_rsa_mem_force_pd
    +            RSA_MEM_FORCE_PD: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +        }), base_address + 0x38);
    +
    +        /// address: 0x600c003c
    +        /// edma clcok and reset register
    +        pub const EDMA_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_edma_clk_on
    +            EDMA_CLK_ON: u1,
    +            /// reg_edma_reset
    +            EDMA_RESET: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0x3c);
    +
    +        /// address: 0x600c0040
    +        /// cache control register
    +        pub const CACHE_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_icache_clk_on
    +            ICACHE_CLK_ON: u1,
    +            /// reg_icache_reset
    +            ICACHE_RESET: u1,
    +            /// reg_dcache_clk_on
    +            DCACHE_CLK_ON: u1,
    +            /// reg_dcache_reset
    +            DCACHE_RESET: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x40);
    +
    +        /// address: 0x600c0044
    +        /// SYSTEM_EXTERNAL_DEVICE_ENCRYPT_DECRYPT_CONTROL_REG
    +        pub const EXTERNAL_DEVICE_ENCRYPT_DECRYPT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_enable_spi_manual_encrypt
    +            ENABLE_SPI_MANUAL_ENCRYPT: u1,
    +            /// reg_enable_download_db_encrypt
    +            ENABLE_DOWNLOAD_DB_ENCRYPT: u1,
    +            /// reg_enable_download_g0cb_decrypt
    +            ENABLE_DOWNLOAD_G0CB_DECRYPT: u1,
    +            /// reg_enable_download_manual_encrypt
    +            ENABLE_DOWNLOAD_MANUAL_ENCRYPT: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x44);
    +
    +        /// address: 0x600c0048
    +        /// fast memory config register
    +        pub const RTC_FASTMEM_CONFIG = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            /// reg_rtc_mem_crc_start
    +            RTC_MEM_CRC_START: u1,
    +            /// reg_rtc_mem_crc_addr
    +            RTC_MEM_CRC_ADDR: u11,
    +            /// reg_rtc_mem_crc_len
    +            RTC_MEM_CRC_LEN: u11,
    +            /// reg_rtc_mem_crc_finish
    +            RTC_MEM_CRC_FINISH: u1,
    +        }), base_address + 0x48);
    +
    +        /// address: 0x600c004c
    +        /// reserved
    +        pub const RTC_FASTMEM_CRC = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_rtc_mem_crc_res
    +            RTC_MEM_CRC_RES: u32,
    +        }), base_address + 0x4c);
    +
    +        /// address: 0x600c0050
    +        /// eco register
    +        pub const REDUNDANT_ECO_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_redundant_eco_drive
    +            REDUNDANT_ECO_DRIVE: u1,
    +            /// reg_redundant_eco_result
    +            REDUNDANT_ECO_RESULT: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0x50);
    +
    +        /// address: 0x600c0054
    +        /// clock gating register
    +        pub const CLOCK_GATE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_clk_en
    +            CLK_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x54);
    +
    +        /// address: 0x600c0058
    +        /// system clock config register
    +        pub const SYSCLK_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_pre_div_cnt
    +            PRE_DIV_CNT: u10,
    +            /// reg_soc_clk_sel
    +            SOC_CLK_SEL: u2,
    +            /// reg_clk_xtal_freq
    +            CLK_XTAL_FREQ: u7,
    +            /// reg_clk_div_en
    +            CLK_DIV_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0x58);
    +
    +        /// address: 0x600c005c
    +        /// mem pvt register
    +        pub const MEM_PVT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_mem_path_len
    +            MEM_PATH_LEN: u4,
    +            /// reg_mem_err_cnt_clr
    +            MEM_ERR_CNT_CLR: u1,
    +            /// reg_mem_pvt_monitor_en
    +            MONITOR_EN: u1,
    +            /// reg_mem_timing_err_cnt
    +            MEM_TIMING_ERR_CNT: u16,
    +            /// reg_mem_vt_sel
    +            MEM_VT_SEL: u2,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +        }), base_address + 0x5c);
    +
    +        /// address: 0x600c0060
    +        /// mem pvt register
    +        pub const COMB_PVT_LVT_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_comb_path_len_lvt
    +            COMB_PATH_LEN_LVT: u5,
    +            /// reg_comb_err_cnt_clr_lvt
    +            COMB_ERR_CNT_CLR_LVT: u1,
    +            /// reg_comb_pvt_monitor_en_lvt
    +            COMB_PVT_MONITOR_EN_LVT: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x60);
    +
    +        /// address: 0x600c0064
    +        /// mem pvt register
    +        pub const COMB_PVT_NVT_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_comb_path_len_nvt
    +            COMB_PATH_LEN_NVT: u5,
    +            /// reg_comb_err_cnt_clr_nvt
    +            COMB_ERR_CNT_CLR_NVT: u1,
    +            /// reg_comb_pvt_monitor_en_nvt
    +            COMB_PVT_MONITOR_EN_NVT: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x64);
    +
    +        /// address: 0x600c0068
    +        /// mem pvt register
    +        pub const COMB_PVT_HVT_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_comb_path_len_hvt
    +            COMB_PATH_LEN_HVT: u5,
    +            /// reg_comb_err_cnt_clr_hvt
    +            COMB_ERR_CNT_CLR_HVT: u1,
    +            /// reg_comb_pvt_monitor_en_hvt
    +            COMB_PVT_MONITOR_EN_HVT: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x68);
    +
    +        /// address: 0x600c006c
    +        /// mem pvt register
    +        pub const COMB_PVT_ERR_LVT_SITE0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_comb_timing_err_cnt_lvt_site0
    +            COMB_TIMING_ERR_CNT_LVT_SITE0: u16,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x6c);
    +
    +        /// address: 0x600c0070
    +        /// mem pvt register
    +        pub const COMB_PVT_ERR_NVT_SITE0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_comb_timing_err_cnt_nvt_site0
    +            COMB_TIMING_ERR_CNT_NVT_SITE0: u16,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x70);
    +
    +        /// address: 0x600c0074
    +        /// mem pvt register
    +        pub const COMB_PVT_ERR_HVT_SITE0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_comb_timing_err_cnt_hvt_site0
    +            COMB_TIMING_ERR_CNT_HVT_SITE0: u16,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x74);
    +
    +        /// address: 0x600c0078
    +        /// mem pvt register
    +        pub const COMB_PVT_ERR_LVT_SITE1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_comb_timing_err_cnt_lvt_site1
    +            COMB_TIMING_ERR_CNT_LVT_SITE1: u16,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x78);
    +
    +        /// address: 0x600c007c
    +        /// mem pvt register
    +        pub const COMB_PVT_ERR_NVT_SITE1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_comb_timing_err_cnt_nvt_site1
    +            COMB_TIMING_ERR_CNT_NVT_SITE1: u16,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x7c);
    +
    +        /// address: 0x600c0080
    +        /// mem pvt register
    +        pub const COMB_PVT_ERR_HVT_SITE1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_comb_timing_err_cnt_hvt_site1
    +            COMB_TIMING_ERR_CNT_HVT_SITE1: u16,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x80);
    +
    +        /// address: 0x600c0084
    +        /// mem pvt register
    +        pub const COMB_PVT_ERR_LVT_SITE2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_comb_timing_err_cnt_lvt_site2
    +            COMB_TIMING_ERR_CNT_LVT_SITE2: u16,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x84);
    +
    +        /// address: 0x600c0088
    +        /// mem pvt register
    +        pub const COMB_PVT_ERR_NVT_SITE2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_comb_timing_err_cnt_nvt_site2
    +            COMB_TIMING_ERR_CNT_NVT_SITE2: u16,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x88);
    +
    +        /// address: 0x600c008c
    +        /// mem pvt register
    +        pub const COMB_PVT_ERR_HVT_SITE2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_comb_timing_err_cnt_hvt_site2
    +            COMB_TIMING_ERR_CNT_HVT_SITE2: u16,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x8c);
    +
    +        /// address: 0x600c0090
    +        /// mem pvt register
    +        pub const COMB_PVT_ERR_LVT_SITE3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_comb_timing_err_cnt_lvt_site3
    +            COMB_TIMING_ERR_CNT_LVT_SITE3: u16,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x90);
    +
    +        /// address: 0x600c0094
    +        /// mem pvt register
    +        pub const COMB_PVT_ERR_NVT_SITE3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_comb_timing_err_cnt_nvt_site3
    +            COMB_TIMING_ERR_CNT_NVT_SITE3: u16,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x94);
    +
    +        /// address: 0x600c0098
    +        /// mem pvt register
    +        pub const COMB_PVT_ERR_HVT_SITE3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_comb_timing_err_cnt_hvt_site3
    +            COMB_TIMING_ERR_CNT_HVT_SITE3: u16,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x98);
    +
    +        /// address: 0x600c0ffc
    +        /// Version register
    +        pub const SYSTEM_REG_DATE = @intToPtr(*volatile MmioInt(32, u28), base_address + 0xffc);
    +    };
    +
    +    /// System Timer
    +    pub const SYSTIMER = struct {
    +        pub const base_address = 0x60023000;
    +
    +        /// address: 0x60023000
    +        /// SYSTIMER_CONF.
    +        pub const CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// systimer clock force on
    +            SYSTIMER_CLK_FO: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            /// target2 work enable
    +            TARGET2_WORK_EN: u1,
    +            /// target1 work enable
    +            TARGET1_WORK_EN: u1,
    +            /// target0 work enable
    +            TARGET0_WORK_EN: u1,
    +            /// If timer unit1 is stalled when core1 stalled
    +            TIMER_UNIT1_CORE1_STALL_EN: u1,
    +            /// If timer unit1 is stalled when core0 stalled
    +            TIMER_UNIT1_CORE0_STALL_EN: u1,
    +            /// If timer unit0 is stalled when core1 stalled
    +            TIMER_UNIT0_CORE1_STALL_EN: u1,
    +            /// If timer unit0 is stalled when core0 stalled
    +            TIMER_UNIT0_CORE0_STALL_EN: u1,
    +            /// timer unit1 work enable
    +            TIMER_UNIT1_WORK_EN: u1,
    +            /// timer unit0 work enable
    +            TIMER_UNIT0_WORK_EN: u1,
    +            /// register file clk gating
    +            CLK_EN: u1,
    +        }), base_address + 0x0);
    +
    +        /// address: 0x60023004
    +        /// SYSTIMER_UNIT0_OP.
    +        pub const UNIT0_OP = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            reserved23: u1,
    +            reserved24: u1,
    +            reserved25: u1,
    +            reserved26: u1,
    +            reserved27: u1,
    +            reserved28: u1,
    +            /// reg_timer_unit0_value_valid
    +            TIMER_UNIT0_VALUE_VALID: u1,
    +            /// update timer_unit0
    +            TIMER_UNIT0_UPDATE: u1,
    +            padding0: u1,
    +        }), base_address + 0x4);
    +
    +        /// address: 0x60023008
    +        /// SYSTIMER_UNIT1_OP.
    +        pub const UNIT1_OP = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            reserved23: u1,
    +            reserved24: u1,
    +            reserved25: u1,
    +            reserved26: u1,
    +            reserved27: u1,
    +            reserved28: u1,
    +            /// timer value is sync and valid
    +            TIMER_UNIT1_VALUE_VALID: u1,
    +            /// update timer unit1
    +            TIMER_UNIT1_UPDATE: u1,
    +            padding0: u1,
    +        }), base_address + 0x8);
    +
    +        /// address: 0x6002300c
    +        /// SYSTIMER_UNIT0_LOAD_HI.
    +        pub const UNIT0_LOAD_HI = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// timer unit0 load high 32 bit
    +            TIMER_UNIT0_LOAD_HI: u20,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0xc);
    +
    +        /// address: 0x60023010
    +        /// SYSTIMER_UNIT0_LOAD_LO.
    +        pub const UNIT0_LOAD_LO = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// timer unit0 load low 32 bit
    +            TIMER_UNIT0_LOAD_LO: u32,
    +        }), base_address + 0x10);
    +
    +        /// address: 0x60023014
    +        /// SYSTIMER_UNIT1_LOAD_HI.
    +        pub const UNIT1_LOAD_HI = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// timer unit1 load high 32 bit
    +            TIMER_UNIT1_LOAD_HI: u20,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0x14);
    +
    +        /// address: 0x60023018
    +        /// SYSTIMER_UNIT1_LOAD_LO.
    +        pub const UNIT1_LOAD_LO = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// timer unit1 load low 32 bit
    +            TIMER_UNIT1_LOAD_LO: u32,
    +        }), base_address + 0x18);
    +
    +        /// address: 0x6002301c
    +        /// SYSTIMER_TARGET0_HI.
    +        pub const TARGET0_HI = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// timer taget0 high 32 bit
    +            TIMER_TARGET0_HI: u20,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0x1c);
    +
    +        /// address: 0x60023020
    +        /// SYSTIMER_TARGET0_LO.
    +        pub const TARGET0_LO = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// timer taget0 low 32 bit
    +            TIMER_TARGET0_LO: u32,
    +        }), base_address + 0x20);
    +
    +        /// address: 0x60023024
    +        /// SYSTIMER_TARGET1_HI.
    +        pub const TARGET1_HI = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// timer taget1 high 32 bit
    +            TIMER_TARGET1_HI: u20,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0x24);
    +
    +        /// address: 0x60023028
    +        /// SYSTIMER_TARGET1_LO.
    +        pub const TARGET1_LO = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// timer taget1 low 32 bit
    +            TIMER_TARGET1_LO: u32,
    +        }), base_address + 0x28);
    +
    +        /// address: 0x6002302c
    +        /// SYSTIMER_TARGET2_HI.
    +        pub const TARGET2_HI = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// timer taget2 high 32 bit
    +            TIMER_TARGET2_HI: u20,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0x2c);
    +
    +        /// address: 0x60023030
    +        /// SYSTIMER_TARGET2_LO.
    +        pub const TARGET2_LO = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// timer taget2 low 32 bit
    +            TIMER_TARGET2_LO: u32,
    +        }), base_address + 0x30);
    +
    +        /// address: 0x60023034
    +        /// SYSTIMER_TARGET0_CONF.
    +        pub const TARGET0_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// target0 period
    +            TARGET0_PERIOD: u26,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            /// Set target0 to period mode
    +            TARGET0_PERIOD_MODE: u1,
    +            /// select which unit to compare
    +            TARGET0_TIMER_UNIT_SEL: u1,
    +        }), base_address + 0x34);
    +
    +        /// address: 0x60023038
    +        /// SYSTIMER_TARGET1_CONF.
    +        pub const TARGET1_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// target1 period
    +            TARGET1_PERIOD: u26,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            /// Set target1 to period mode
    +            TARGET1_PERIOD_MODE: u1,
    +            /// select which unit to compare
    +            TARGET1_TIMER_UNIT_SEL: u1,
    +        }), base_address + 0x38);
    +
    +        /// address: 0x6002303c
    +        /// SYSTIMER_TARGET2_CONF.
    +        pub const TARGET2_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// target2 period
    +            TARGET2_PERIOD: u26,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            /// Set target2 to period mode
    +            TARGET2_PERIOD_MODE: u1,
    +            /// select which unit to compare
    +            TARGET2_TIMER_UNIT_SEL: u1,
    +        }), base_address + 0x3c);
    +
    +        /// address: 0x60023040
    +        /// SYSTIMER_UNIT0_VALUE_HI.
    +        pub const UNIT0_VALUE_HI = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// timer read value high 32bit
    +            TIMER_UNIT0_VALUE_HI: u20,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0x40);
    +
    +        /// address: 0x60023044
    +        /// SYSTIMER_UNIT0_VALUE_LO.
    +        pub const UNIT0_VALUE_LO = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// timer read value low 32bit
    +            TIMER_UNIT0_VALUE_LO: u32,
    +        }), base_address + 0x44);
    +
    +        /// address: 0x60023048
    +        /// SYSTIMER_UNIT1_VALUE_HI.
    +        pub const UNIT1_VALUE_HI = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// timer read value high 32bit
    +            TIMER_UNIT1_VALUE_HI: u20,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0x48);
    +
    +        /// address: 0x6002304c
    +        /// SYSTIMER_UNIT1_VALUE_LO.
    +        pub const UNIT1_VALUE_LO = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// timer read value low 32bit
    +            TIMER_UNIT1_VALUE_LO: u32,
    +        }), base_address + 0x4c);
    +
    +        /// address: 0x60023050
    +        /// SYSTIMER_COMP0_LOAD.
    +        pub const COMP0_LOAD = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// timer comp0 load value
    +            TIMER_COMP0_LOAD: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x50);
    +
    +        /// address: 0x60023054
    +        /// SYSTIMER_COMP1_LOAD.
    +        pub const COMP1_LOAD = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// timer comp1 load value
    +            TIMER_COMP1_LOAD: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x54);
    +
    +        /// address: 0x60023058
    +        /// SYSTIMER_COMP2_LOAD.
    +        pub const COMP2_LOAD = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// timer comp2 load value
    +            TIMER_COMP2_LOAD: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x58);
    +
    +        /// address: 0x6002305c
    +        /// SYSTIMER_UNIT0_LOAD.
    +        pub const UNIT0_LOAD = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// timer unit0 load value
    +            TIMER_UNIT0_LOAD: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x5c);
    +
    +        /// address: 0x60023060
    +        /// SYSTIMER_UNIT1_LOAD.
    +        pub const UNIT1_LOAD = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// timer unit1 load value
    +            TIMER_UNIT1_LOAD: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x60);
    +
    +        /// address: 0x60023064
    +        /// SYSTIMER_INT_ENA.
    +        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// interupt0 enable
    +            TARGET0_INT_ENA: u1,
    +            /// interupt1 enable
    +            TARGET1_INT_ENA: u1,
    +            /// interupt2 enable
    +            TARGET2_INT_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +        }), base_address + 0x64);
    +
    +        /// address: 0x60023068
    +        /// SYSTIMER_INT_RAW.
    +        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// interupt0 raw
    +            TARGET0_INT_RAW: u1,
    +            /// interupt1 raw
    +            TARGET1_INT_RAW: u1,
    +            /// interupt2 raw
    +            TARGET2_INT_RAW: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +        }), base_address + 0x68);
    +
    +        /// address: 0x6002306c
    +        /// SYSTIMER_INT_CLR.
    +        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// interupt0 clear
    +            TARGET0_INT_CLR: u1,
    +            /// interupt1 clear
    +            TARGET1_INT_CLR: u1,
    +            /// interupt2 clear
    +            TARGET2_INT_CLR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +        }), base_address + 0x6c);
    +
    +        /// address: 0x60023070
    +        /// SYSTIMER_INT_ST.
    +        pub const INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_target0_int_st
    +            TARGET0_INT_ST: u1,
    +            /// reg_target1_int_st
    +            TARGET1_INT_ST: u1,
    +            /// reg_target2_int_st
    +            TARGET2_INT_ST: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +        }), base_address + 0x70);
    +
    +        /// address: 0x600230fc
    +        /// SYSTIMER_DATE.
    +        pub const DATE = @intToPtr(*volatile u32, base_address + 0xfc);
    +    };
    +
    +    /// Timer Group
    +    pub const TIMG0 = struct {
    +        pub const base_address = 0x6001f000;
    +
    +        /// address: 0x6001f000
    +        /// TIMG_T0CONFIG_REG.
    +        pub const T0CONFIG = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            /// reg_t0_use_xtal.
    +            T0_USE_XTAL: u1,
    +            /// reg_t0_alarm_en.
    +            T0_ALARM_EN: u1,
    +            reserved9: u1,
    +            /// reg_t0_divcnt_rst.
    +            T0_DIVCNT_RST: u1,
    +            /// reg_t0_divider.
    +            T0_DIVIDER: u16,
    +            /// reg_t0_autoreload.
    +            T0_AUTORELOAD: u1,
    +            /// reg_t0_increase.
    +            T0_INCREASE: u1,
    +            /// reg_t0_en.
    +            T0_EN: u1,
    +        }), base_address + 0x0);
    +
    +        /// address: 0x6001f004
    +        /// TIMG_T0LO_REG.
    +        pub const T0LO = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// t0_lo
    +            T0_LO: u32,
    +        }), base_address + 0x4);
    +
    +        /// address: 0x6001f008
    +        /// TIMG_T0HI_REG.
    +        pub const T0HI = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// t0_hi
    +            T0_HI: u22,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +        }), base_address + 0x8);
    +
    +        /// address: 0x6001f00c
    +        /// TIMG_T0UPDATE_REG.
    +        pub const T0UPDATE = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            reserved23: u1,
    +            reserved24: u1,
    +            reserved25: u1,
    +            reserved26: u1,
    +            reserved27: u1,
    +            reserved28: u1,
    +            reserved29: u1,
    +            reserved30: u1,
    +            /// t0_update
    +            T0_UPDATE: u1,
    +        }), base_address + 0xc);
    +
    +        /// address: 0x6001f010
    +        /// TIMG_T0ALARMLO_REG.
    +        pub const T0ALARMLO = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_t0_alarm_lo.
    +            T0_ALARM_LO: u32,
    +        }), base_address + 0x10);
    +
    +        /// address: 0x6001f014
    +        /// TIMG_T0ALARMHI_REG.
    +        pub const T0ALARMHI = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_t0_alarm_hi.
    +            T0_ALARM_HI: u22,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +        }), base_address + 0x14);
    +
    +        /// address: 0x6001f018
    +        /// TIMG_T0LOADLO_REG.
    +        pub const T0LOADLO = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_t0_load_lo.
    +            T0_LOAD_LO: u32,
    +        }), base_address + 0x18);
    +
    +        /// address: 0x6001f01c
    +        /// TIMG_T0LOADHI_REG.
    +        pub const T0LOADHI = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_t0_load_hi.
    +            T0_LOAD_HI: u22,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +        }), base_address + 0x1c);
    +
    +        /// address: 0x6001f020
    +        /// TIMG_T0LOAD_REG.
    +        pub const T0LOAD = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// t0_load
    +            T0_LOAD: u32,
    +        }), base_address + 0x20);
    +
    +        /// address: 0x6001f048
    +        /// TIMG_WDTCONFIG0_REG.
    +        pub const WDTCONFIG0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            /// reg_wdt_appcpu_reset_en.
    +            WDT_APPCPU_RESET_EN: u1,
    +            /// reg_wdt_procpu_reset_en.
    +            WDT_PROCPU_RESET_EN: u1,
    +            /// reg_wdt_flashboot_mod_en.
    +            WDT_FLASHBOOT_MOD_EN: u1,
    +            /// reg_wdt_sys_reset_length.
    +            WDT_SYS_RESET_LENGTH: u3,
    +            /// reg_wdt_cpu_reset_length.
    +            WDT_CPU_RESET_LENGTH: u3,
    +            /// reg_wdt_use_xtal.
    +            WDT_USE_XTAL: u1,
    +            /// reg_wdt_conf_update_en.
    +            WDT_CONF_UPDATE_EN: u1,
    +            /// reg_wdt_stg3.
    +            WDT_STG3: u2,
    +            /// reg_wdt_stg2.
    +            WDT_STG2: u2,
    +            /// reg_wdt_stg1.
    +            WDT_STG1: u2,
    +            /// reg_wdt_stg0.
    +            WDT_STG0: u2,
    +            /// reg_wdt_en.
    +            WDT_EN: u1,
    +        }), base_address + 0x48);
    +
    +        /// address: 0x6001f04c
    +        /// TIMG_WDTCONFIG1_REG.
    +        pub const WDTCONFIG1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_wdt_divcnt_rst.
    +            WDT_DIVCNT_RST: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            /// reg_wdt_clk_prescale.
    +            WDT_CLK_PRESCALE: u16,
    +        }), base_address + 0x4c);
    +
    +        /// address: 0x6001f050
    +        /// TIMG_WDTCONFIG2_REG.
    +        pub const WDTCONFIG2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_wdt_stg0_hold.
    +            WDT_STG0_HOLD: u32,
    +        }), base_address + 0x50);
    +
    +        /// address: 0x6001f054
    +        /// TIMG_WDTCONFIG3_REG.
    +        pub const WDTCONFIG3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_wdt_stg1_hold.
    +            WDT_STG1_HOLD: u32,
    +        }), base_address + 0x54);
    +
    +        /// address: 0x6001f058
    +        /// TIMG_WDTCONFIG4_REG.
    +        pub const WDTCONFIG4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_wdt_stg2_hold.
    +            WDT_STG2_HOLD: u32,
    +        }), base_address + 0x58);
    +
    +        /// address: 0x6001f05c
    +        /// TIMG_WDTCONFIG5_REG.
    +        pub const WDTCONFIG5 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_wdt_stg3_hold.
    +            WDT_STG3_HOLD: u32,
    +        }), base_address + 0x5c);
    +
    +        /// address: 0x6001f060
    +        /// TIMG_WDTFEED_REG.
    +        pub const WDTFEED = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// wdt_feed
    +            WDT_FEED: u32,
    +        }), base_address + 0x60);
    +
    +        /// address: 0x6001f064
    +        /// TIMG_WDTWPROTECT_REG.
    +        pub const WDTWPROTECT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_wdt_wkey.
    +            WDT_WKEY: u32,
    +        }), base_address + 0x64);
    +
    +        /// address: 0x6001f068
    +        /// TIMG_RTCCALICFG_REG.
    +        pub const RTCCALICFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            /// reg_rtc_cali_start_cycling.
    +            RTC_CALI_START_CYCLING: u1,
    +            /// reg_rtc_cali_clk_sel.0:rtcslowclock.1:clk_80m.2:xtal_32k
    +            RTC_CALI_CLK_SEL: u2,
    +            /// rtc_cali_rdy
    +            RTC_CALI_RDY: u1,
    +            /// reg_rtc_cali_max.
    +            RTC_CALI_MAX: u15,
    +            /// reg_rtc_cali_start.
    +            RTC_CALI_START: u1,
    +        }), base_address + 0x68);
    +
    +        /// address: 0x6001f06c
    +        /// TIMG_RTCCALICFG1_REG.
    +        pub const RTCCALICFG1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// rtc_cali_cycling_data_vld
    +            RTC_CALI_CYCLING_DATA_VLD: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            /// rtc_cali_value
    +            RTC_CALI_VALUE: u25,
    +        }), base_address + 0x6c);
    +
    +        /// address: 0x6001f070
    +        /// INT_ENA_TIMG_REG
    +        pub const INT_ENA_TIMERS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// t0_int_ena
    +            T0_INT_ENA: u1,
    +            /// wdt_int_ena
    +            WDT_INT_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0x70);
    +
    +        /// address: 0x6001f074
    +        /// INT_RAW_TIMG_REG
    +        pub const INT_RAW_TIMERS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// t0_int_raw
    +            T0_INT_RAW: u1,
    +            /// wdt_int_raw
    +            WDT_INT_RAW: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0x74);
    +
    +        /// address: 0x6001f078
    +        /// INT_ST_TIMG_REG
    +        pub const INT_ST_TIMERS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// t0_int_st
    +            T0_INT_ST: u1,
    +            /// wdt_int_st
    +            WDT_INT_ST: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0x78);
    +
    +        /// address: 0x6001f07c
    +        /// INT_CLR_TIMG_REG
    +        pub const INT_CLR_TIMERS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// t0_int_clr
    +            T0_INT_CLR: u1,
    +            /// wdt_int_clr
    +            WDT_INT_CLR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0x7c);
    +
    +        /// address: 0x6001f080
    +        /// TIMG_RTCCALICFG2_REG.
    +        pub const RTCCALICFG2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// timeoutindicator
    +            RTC_CALI_TIMEOUT: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// reg_rtc_cali_timeout_rst_cnt.Cyclesthatreleasecalibrationtimeoutreset
    +            RTC_CALI_TIMEOUT_RST_CNT: u4,
    +            /// reg_rtc_cali_timeout_thres.timeoutifcalivaluecountsoverthreshold
    +            RTC_CALI_TIMEOUT_THRES: u25,
    +        }), base_address + 0x80);
    +
    +        /// address: 0x6001f0f8
    +        /// TIMG_NTIMG_DATE_REG.
    +        pub const NTIMG_DATE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_ntimers_date.
    +            NTIMGS_DATE: u28,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +        }), base_address + 0xf8);
    +
    +        /// address: 0x6001f0fc
    +        /// TIMG_REGCLK_REG.
    +        pub const REGCLK = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            reserved23: u1,
    +            reserved24: u1,
    +            reserved25: u1,
    +            reserved26: u1,
    +            reserved27: u1,
    +            reserved28: u1,
    +            /// reg_wdt_clk_is_active.
    +            WDT_CLK_IS_ACTIVE: u1,
    +            /// reg_timer_clk_is_active.
    +            TIMER_CLK_IS_ACTIVE: u1,
    +            /// reg_clk_en.
    +            CLK_EN: u1,
    +        }), base_address + 0xfc);
    +    };
    +
    +    /// Timer Group
    +    pub const TIMG1 = struct {
    +        pub const base_address = 0x60020000;
    +
    +        /// address: 0x60020000
    +        /// TIMG_T0CONFIG_REG.
    +        pub const T0CONFIG = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            /// reg_t0_use_xtal.
    +            T0_USE_XTAL: u1,
    +            /// reg_t0_alarm_en.
    +            T0_ALARM_EN: u1,
    +            reserved9: u1,
    +            /// reg_t0_divcnt_rst.
    +            T0_DIVCNT_RST: u1,
    +            /// reg_t0_divider.
    +            T0_DIVIDER: u16,
    +            /// reg_t0_autoreload.
    +            T0_AUTORELOAD: u1,
    +            /// reg_t0_increase.
    +            T0_INCREASE: u1,
    +            /// reg_t0_en.
    +            T0_EN: u1,
    +        }), base_address + 0x0);
    +
    +        /// address: 0x60020004
    +        /// TIMG_T0LO_REG.
    +        pub const T0LO = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// t0_lo
    +            T0_LO: u32,
    +        }), base_address + 0x4);
    +
    +        /// address: 0x60020008
    +        /// TIMG_T0HI_REG.
    +        pub const T0HI = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// t0_hi
    +            T0_HI: u22,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +        }), base_address + 0x8);
    +
    +        /// address: 0x6002000c
    +        /// TIMG_T0UPDATE_REG.
    +        pub const T0UPDATE = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            reserved23: u1,
    +            reserved24: u1,
    +            reserved25: u1,
    +            reserved26: u1,
    +            reserved27: u1,
    +            reserved28: u1,
    +            reserved29: u1,
    +            reserved30: u1,
    +            /// t0_update
    +            T0_UPDATE: u1,
    +        }), base_address + 0xc);
    +
    +        /// address: 0x60020010
    +        /// TIMG_T0ALARMLO_REG.
    +        pub const T0ALARMLO = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_t0_alarm_lo.
    +            T0_ALARM_LO: u32,
    +        }), base_address + 0x10);
    +
    +        /// address: 0x60020014
    +        /// TIMG_T0ALARMHI_REG.
    +        pub const T0ALARMHI = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_t0_alarm_hi.
    +            T0_ALARM_HI: u22,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +        }), base_address + 0x14);
    +
    +        /// address: 0x60020018
    +        /// TIMG_T0LOADLO_REG.
    +        pub const T0LOADLO = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_t0_load_lo.
    +            T0_LOAD_LO: u32,
    +        }), base_address + 0x18);
    +
    +        /// address: 0x6002001c
    +        /// TIMG_T0LOADHI_REG.
    +        pub const T0LOADHI = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_t0_load_hi.
    +            T0_LOAD_HI: u22,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +        }), base_address + 0x1c);
    +
    +        /// address: 0x60020020
    +        /// TIMG_T0LOAD_REG.
    +        pub const T0LOAD = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// t0_load
    +            T0_LOAD: u32,
    +        }), base_address + 0x20);
    +
    +        /// address: 0x60020048
    +        /// TIMG_WDTCONFIG0_REG.
    +        pub const WDTCONFIG0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            /// reg_wdt_appcpu_reset_en.
    +            WDT_APPCPU_RESET_EN: u1,
    +            /// reg_wdt_procpu_reset_en.
    +            WDT_PROCPU_RESET_EN: u1,
    +            /// reg_wdt_flashboot_mod_en.
    +            WDT_FLASHBOOT_MOD_EN: u1,
    +            /// reg_wdt_sys_reset_length.
    +            WDT_SYS_RESET_LENGTH: u3,
    +            /// reg_wdt_cpu_reset_length.
    +            WDT_CPU_RESET_LENGTH: u3,
    +            /// reg_wdt_use_xtal.
    +            WDT_USE_XTAL: u1,
    +            /// reg_wdt_conf_update_en.
    +            WDT_CONF_UPDATE_EN: u1,
    +            /// reg_wdt_stg3.
    +            WDT_STG3: u2,
    +            /// reg_wdt_stg2.
    +            WDT_STG2: u2,
    +            /// reg_wdt_stg1.
    +            WDT_STG1: u2,
    +            /// reg_wdt_stg0.
    +            WDT_STG0: u2,
    +            /// reg_wdt_en.
    +            WDT_EN: u1,
    +        }), base_address + 0x48);
    +
    +        /// address: 0x6002004c
    +        /// TIMG_WDTCONFIG1_REG.
    +        pub const WDTCONFIG1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_wdt_divcnt_rst.
    +            WDT_DIVCNT_RST: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            /// reg_wdt_clk_prescale.
    +            WDT_CLK_PRESCALE: u16,
    +        }), base_address + 0x4c);
    +
    +        /// address: 0x60020050
    +        /// TIMG_WDTCONFIG2_REG.
    +        pub const WDTCONFIG2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_wdt_stg0_hold.
    +            WDT_STG0_HOLD: u32,
    +        }), base_address + 0x50);
    +
    +        /// address: 0x60020054
    +        /// TIMG_WDTCONFIG3_REG.
    +        pub const WDTCONFIG3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_wdt_stg1_hold.
    +            WDT_STG1_HOLD: u32,
    +        }), base_address + 0x54);
    +
    +        /// address: 0x60020058
    +        /// TIMG_WDTCONFIG4_REG.
    +        pub const WDTCONFIG4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_wdt_stg2_hold.
    +            WDT_STG2_HOLD: u32,
    +        }), base_address + 0x58);
    +
    +        /// address: 0x6002005c
    +        /// TIMG_WDTCONFIG5_REG.
    +        pub const WDTCONFIG5 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_wdt_stg3_hold.
    +            WDT_STG3_HOLD: u32,
    +        }), base_address + 0x5c);
    +
    +        /// address: 0x60020060
    +        /// TIMG_WDTFEED_REG.
    +        pub const WDTFEED = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// wdt_feed
    +            WDT_FEED: u32,
    +        }), base_address + 0x60);
    +
    +        /// address: 0x60020064
    +        /// TIMG_WDTWPROTECT_REG.
    +        pub const WDTWPROTECT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_wdt_wkey.
    +            WDT_WKEY: u32,
    +        }), base_address + 0x64);
    +
    +        /// address: 0x60020068
    +        /// TIMG_RTCCALICFG_REG.
    +        pub const RTCCALICFG = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            /// reg_rtc_cali_start_cycling.
    +            RTC_CALI_START_CYCLING: u1,
    +            /// reg_rtc_cali_clk_sel.0:rtcslowclock.1:clk_80m.2:xtal_32k
    +            RTC_CALI_CLK_SEL: u2,
    +            /// rtc_cali_rdy
    +            RTC_CALI_RDY: u1,
    +            /// reg_rtc_cali_max.
    +            RTC_CALI_MAX: u15,
    +            /// reg_rtc_cali_start.
    +            RTC_CALI_START: u1,
    +        }), base_address + 0x68);
    +
    +        /// address: 0x6002006c
    +        /// TIMG_RTCCALICFG1_REG.
    +        pub const RTCCALICFG1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// rtc_cali_cycling_data_vld
    +            RTC_CALI_CYCLING_DATA_VLD: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            /// rtc_cali_value
    +            RTC_CALI_VALUE: u25,
    +        }), base_address + 0x6c);
    +
    +        /// address: 0x60020070
    +        /// INT_ENA_TIMG_REG
    +        pub const INT_ENA_TIMERS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// t0_int_ena
    +            T0_INT_ENA: u1,
    +            /// wdt_int_ena
    +            WDT_INT_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0x70);
    +
    +        /// address: 0x60020074
    +        /// INT_RAW_TIMG_REG
    +        pub const INT_RAW_TIMERS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// t0_int_raw
    +            T0_INT_RAW: u1,
    +            /// wdt_int_raw
    +            WDT_INT_RAW: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0x74);
    +
    +        /// address: 0x60020078
    +        /// INT_ST_TIMG_REG
    +        pub const INT_ST_TIMERS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// t0_int_st
    +            T0_INT_ST: u1,
    +            /// wdt_int_st
    +            WDT_INT_ST: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0x78);
    +
    +        /// address: 0x6002007c
    +        /// INT_CLR_TIMG_REG
    +        pub const INT_CLR_TIMERS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// t0_int_clr
    +            T0_INT_CLR: u1,
    +            /// wdt_int_clr
    +            WDT_INT_CLR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0x7c);
    +
    +        /// address: 0x60020080
    +        /// TIMG_RTCCALICFG2_REG.
    +        pub const RTCCALICFG2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// timeoutindicator
    +            RTC_CALI_TIMEOUT: u1,
    +            reserved0: u1,
    +            reserved1: u1,
    +            /// reg_rtc_cali_timeout_rst_cnt.Cyclesthatreleasecalibrationtimeoutreset
    +            RTC_CALI_TIMEOUT_RST_CNT: u4,
    +            /// reg_rtc_cali_timeout_thres.timeoutifcalivaluecountsoverthreshold
    +            RTC_CALI_TIMEOUT_THRES: u25,
    +        }), base_address + 0x80);
    +
    +        /// address: 0x600200f8
    +        /// TIMG_NTIMG_DATE_REG.
    +        pub const NTIMG_DATE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// reg_ntimers_date.
    +            NTIMGS_DATE: u28,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +        }), base_address + 0xf8);
    +
    +        /// address: 0x600200fc
    +        /// TIMG_REGCLK_REG.
    +        pub const REGCLK = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            reserved8: u1,
    +            reserved9: u1,
    +            reserved10: u1,
    +            reserved11: u1,
    +            reserved12: u1,
    +            reserved13: u1,
    +            reserved14: u1,
    +            reserved15: u1,
    +            reserved16: u1,
    +            reserved17: u1,
    +            reserved18: u1,
    +            reserved19: u1,
    +            reserved20: u1,
    +            reserved21: u1,
    +            reserved22: u1,
    +            reserved23: u1,
    +            reserved24: u1,
    +            reserved25: u1,
    +            reserved26: u1,
    +            reserved27: u1,
    +            reserved28: u1,
    +            /// reg_wdt_clk_is_active.
    +            WDT_CLK_IS_ACTIVE: u1,
    +            /// reg_timer_clk_is_active.
    +            TIMER_CLK_IS_ACTIVE: u1,
    +            /// reg_clk_en.
    +            CLK_EN: u1,
    +        }), base_address + 0xfc);
    +    };
    +
    +    /// Two-Wire Automotive Interface
    +    pub const TWAI = struct {
    +        pub const base_address = 0x6002b000;
    +
    +        /// address: 0x6002b000
    +        /// Mode Register
    +        pub const MODE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This bit is used to configure the operating mode of the TWAI Controller. 1:
    +            /// Reset mode; 0: Operating mode.
    +            RESET_MODE: u1,
    +            /// 1: Listen only mode. In this mode the nodes will only receive messages from the
    +            /// bus, without generating the acknowledge signal nor updating the RX error
    +            /// counter.
    +            LISTEN_ONLY_MODE: u1,
    +            /// 1: Self test mode. In this mode the TX nodes can perform a successful
    +            /// transmission without receiving the acknowledge signal. This mode is often used
    +            /// to test a single node with the self reception request command.
    +            SELF_TEST_MODE: u1,
    +            /// This bit is used to configure the filter mode. 0: Dual filter mode; 1: Single
    +            /// filter mode.
    +            RX_FILTER_MODE: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x0);
    +
    +        /// address: 0x6002b004
    +        /// Command Register
    +        pub const CMD = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Set the bit to 1 to allow the driving nodes start transmission.
    +            TX_REQ: u1,
    +            /// Set the bit to 1 to cancel a pending transmission request.
    +            ABORT_TX: u1,
    +            /// Set the bit to 1 to release the RX buffer.
    +            RELEASE_BUF: u1,
    +            /// Set the bit to 1 to clear the data overrun status bit.
    +            CLR_OVERRUN: u1,
    +            /// Self reception request command. Set the bit to 1 to allow a message be
    +            /// transmitted and received simultaneously.
    +            SELF_RX_REQ: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +        }), base_address + 0x4);
    +
    +        /// address: 0x6002b008
    +        /// Status register
    +        pub const STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// 1: The data in the RX buffer is not empty, with at least one received data
    +            /// packet.
    +            RX_BUF_ST: u1,
    +            /// 1: The RX FIFO is full and data overrun has occurred.
    +            OVERRUN_ST: u1,
    +            /// 1: The TX buffer is empty, the CPU may write a message into it.
    +            TX_BUF_ST: u1,
    +            /// 1: The TWAI controller has successfully received a packet from the bus.
    +            TX_COMPLETE: u1,
    +            /// 1: The TWAI Controller is receiving a message from the bus.
    +            RX_ST: u1,
    +            /// 1: The TWAI Controller is transmitting a message to the bus.
    +            TX_ST: u1,
    +            /// 1: At least one of the RX/TX error counter has reached or exceeded the value set
    +            /// in register TWAI_ERR_WARNING_LIMIT_REG.
    +            ERR_ST: u1,
    +            /// 1: In bus-off status, the TWAI Controller is no longer involved in bus
    +            /// activities.
    +            BUS_OFF_ST: u1,
    +            /// This bit reflects whether the data packet in the RX FIFO is complete. 1: The
    +            /// current packet is missing; 0: The current packet is complete
    +            MISS_ST: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +        }), base_address + 0x8);
    +
    +        /// address: 0x6002b00c
    +        /// Interrupt Register
    +        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Receive interrupt. If this bit is set to 1, it indicates there are messages to
    +            /// be handled in the RX FIFO.
    +            RX_INT_ST: u1,
    +            /// Transmit interrupt. If this bit is set to 1, it indicates the message
    +            /// transmitting mis- sion is finished and a new transmission is able to execute.
    +            TX_INT_ST: u1,
    +            /// Error warning interrupt. If this bit is set to 1, it indicates the error status
    +            /// signal and the bus-off status signal of Status register have changed (e.g.,
    +            /// switched from 0 to 1 or from 1 to 0).
    +            ERR_WARN_INT_ST: u1,
    +            /// Data overrun interrupt. If this bit is set to 1, it indicates a data overrun
    +            /// interrupt is generated in the RX FIFO.
    +            OVERRUN_INT_ST: u1,
    +            reserved0: u1,
    +            /// Error passive interrupt. If this bit is set to 1, it indicates the TWAI
    +            /// Controller is switched between error active status and error passive status due
    +            /// to the change of error counters.
    +            ERR_PASSIVE_INT_ST: u1,
    +            /// Arbitration lost interrupt. If this bit is set to 1, it indicates an arbitration
    +            /// lost interrupt is generated.
    +            ARB_LOST_INT_ST: u1,
    +            /// Error interrupt. If this bit is set to 1, it indicates an error is detected on
    +            /// the bus.
    +            BUS_ERR_INT_ST: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0xc);
    +
    +        /// address: 0x6002b010
    +        /// Interrupt Enable Register
    +        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Set this bit to 1 to enable receive interrupt.
    +            RX_INT_ENA: u1,
    +            /// Set this bit to 1 to enable transmit interrupt.
    +            TX_INT_ENA: u1,
    +            /// Set this bit to 1 to enable error warning interrupt.
    +            ERR_WARN_INT_ENA: u1,
    +            /// Set this bit to 1 to enable data overrun interrupt.
    +            OVERRUN_INT_ENA: u1,
    +            reserved0: u1,
    +            /// Set this bit to 1 to enable error passive interrupt.
    +            ERR_PASSIVE_INT_ENA: u1,
    +            /// Set this bit to 1 to enable arbitration lost interrupt.
    +            ARB_LOST_INT_ENA: u1,
    +            /// Set this bit to 1 to enable error interrupt.
    +            BUS_ERR_INT_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x10);
    +
    +        /// address: 0x6002b018
    +        /// Bus Timing Register 0
    +        pub const BUS_TIMING_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Baud Rate Prescaler, determines the frequency dividing ratio.
    +            BAUD_PRESC: u13,
    +            reserved0: u1,
    +            /// Synchronization Jump Width (SJW), 1 \verb+~+ 14 Tq wide.
    +            SYNC_JUMP_WIDTH: u2,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x18);
    +
    +        /// address: 0x6002b01c
    +        /// Bus Timing Register 1
    +        pub const BUS_TIMING_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The width of PBS1.
    +            TIME_SEG1: u4,
    +            /// The width of PBS2.
    +            TIME_SEG2: u3,
    +            /// The number of sample points. 0: the bus is sampled once; 1: the bus is sampled
    +            /// three times
    +            TIME_SAMP: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x1c);
    +
    +        /// address: 0x6002b02c
    +        /// Arbitration Lost Capture Register
    +        pub const ARB_LOST_CAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x2c);
    +
    +        /// address: 0x6002b030
    +        /// Error Code Capture Register
    +        pub const ERR_CODE_CAP = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register contains information about the location of errors, see Table 181
    +            /// for details.
    +            ECC_SEGMENT: u5,
    +            /// This register contains information about transmission direction of the node when
    +            /// error occurs. 1: Error occurs when receiving a message; 0: Error occurs when
    +            /// transmitting a message
    +            ECC_DIRECTION: u1,
    +            /// This register contains information about error types: 00: bit error; 01: form
    +            /// error; 10: stuff error; 11: other type of error
    +            ECC_TYPE: u2,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x30);
    +
    +        /// address: 0x6002b034
    +        /// Error Warning Limit Register
    +        pub const ERR_WARNING_LIMIT = @intToPtr(*volatile MmioInt(32, u8), base_address + 0x34);
    +
    +        /// address: 0x6002b038
    +        /// Receive Error Counter Register
    +        pub const RX_ERR_CNT = @intToPtr(*volatile MmioInt(32, u8), base_address + 0x38);
    +
    +        /// address: 0x6002b03c
    +        /// Transmit Error Counter Register
    +        pub const TX_ERR_CNT = @intToPtr(*volatile MmioInt(32, u8), base_address + 0x3c);
    +
    +        /// address: 0x6002b040
    +        /// Data register 0
    +        pub const DATA_0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// In reset mode, it is acceptance code register 0 with R/W Permission. In
    +            /// operation mode, it stores the 0th byte information of the data to be transmitted
    +            /// under operating mode.
    +            TX_BYTE_0: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x40);
    +
    +        /// address: 0x6002b044
    +        /// Data register 1
    +        pub const DATA_1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// In reset mode, it is acceptance code register 1 with R/W Permission. In
    +            /// operation mode, it stores the 1st byte information of the data to be transmitted
    +            /// under operating mode.
    +            TX_BYTE_1: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x44);
    +
    +        /// address: 0x6002b048
    +        /// Data register 2
    +        pub const DATA_2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// In reset mode, it is acceptance code register 2 with R/W Permission. In
    +            /// operation mode, it stores the 2nd byte information of the data to be transmitted
    +            /// under operating mode.
    +            TX_BYTE_2: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x48);
    +
    +        /// address: 0x6002b04c
    +        /// Data register 3
    +        pub const DATA_3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// In reset mode, it is acceptance code register 3 with R/W Permission. In
    +            /// operation mode, it stores the 3rd byte information of the data to be transmitted
    +            /// under operating mode.
    +            TX_BYTE_3: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x4c);
    +
    +        /// address: 0x6002b050
    +        /// Data register 4
    +        pub const DATA_4 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// In reset mode, it is acceptance mask register 0 with R/W Permission. In
    +            /// operation mode, it stores the 4th byte information of the data to be transmitted
    +            /// under operating mode.
    +            TX_BYTE_4: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x50);
    +
    +        /// address: 0x6002b054
    +        /// Data register 5
    +        pub const DATA_5 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// In reset mode, it is acceptance mask register 1 with R/W Permission. In
    +            /// operation mode, it stores the 5th byte information of the data to be transmitted
    +            /// under operating mode.
    +            TX_BYTE_5: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x54);
    +
    +        /// address: 0x6002b058
    +        /// Data register 6
    +        pub const DATA_6 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// In reset mode, it is acceptance mask register 2 with R/W Permission. In
    +            /// operation mode, it stores the 6th byte information of the data to be transmitted
    +            /// under operating mode.
    +            TX_BYTE_6: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x58);
    +
    +        /// address: 0x6002b05c
    +        /// Data register 7
    +        pub const DATA_7 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// In reset mode, it is acceptance mask register 3 with R/W Permission. In
    +            /// operation mode, it stores the 7th byte information of the data to be transmitted
    +            /// under operating mode.
    +            TX_BYTE_7: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x5c);
    +
    +        /// address: 0x6002b060
    +        /// Data register 8
    +        pub const DATA_8 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stored the 8th byte information of the data to be transmitted under operating
    +            /// mode.
    +            TX_BYTE_8: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x60);
    +
    +        /// address: 0x6002b064
    +        /// Data register 9
    +        pub const DATA_9 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stored the 9th byte information of the data to be transmitted under operating
    +            /// mode.
    +            TX_BYTE_9: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x64);
    +
    +        /// address: 0x6002b068
    +        /// Data register 10
    +        pub const DATA_10 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stored the 10th byte information of the data to be transmitted under operating
    +            /// mode.
    +            TX_BYTE_10: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x68);
    +
    +        /// address: 0x6002b06c
    +        /// Data register 11
    +        pub const DATA_11 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stored the 11th byte information of the data to be transmitted under operating
    +            /// mode.
    +            TX_BYTE_11: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x6c);
    +
    +        /// address: 0x6002b070
    +        /// Data register 12
    +        pub const DATA_12 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stored the 12th byte information of the data to be transmitted under operating
    +            /// mode.
    +            TX_BYTE_12: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x70);
    +
    +        /// address: 0x6002b074
    +        /// Receive Message Counter Register
    +        pub const RX_MESSAGE_CNT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register reflects the number of messages available within the RX FIFO.
    +            RX_MESSAGE_COUNTER: u7,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +        }), base_address + 0x74);
    +
    +        /// address: 0x6002b07c
    +        /// Clock Divider register
    +        pub const CLOCK_DIVIDER = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// These bits are used to configure frequency dividing coefficients of the external
    +            /// CLKOUT pin.
    +            CD: u8,
    +            /// This bit can be configured under reset mode. 1: Disable the external CLKOUT pin;
    +            /// 0: Enable the external CLKOUT pin
    +            CLOCK_OFF: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +        }), base_address + 0x7c);
    +    };
    +
    +    /// UART (Universal Asynchronous Receiver-Transmitter) Controller
    +    pub const UART0 = struct {
    +        pub const base_address = 0x60000000;
    +
    +        /// address: 0x60000000
    +        /// FIFO data register
    +        pub const FIFO = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// UART 0 accesses FIFO via this register.
    +            RXFIFO_RD_BYTE: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x0);
    +
    +        /// address: 0x60000004
    +        /// Raw interrupt status
    +        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This interrupt raw bit turns to high level when receiver receives more data than
    +            /// what rxfifo_full_thrhd specifies.
    +            RXFIFO_FULL_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when the amount of data in Tx-FIFO is
    +            /// less than what txfifo_empty_thrhd specifies .
    +            TXFIFO_EMPTY_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when receiver detects a parity error
    +            /// in the data.
    +            PARITY_ERR_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when receiver detects a data frame
    +            /// error .
    +            FRM_ERR_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when receiver receives more data than
    +            /// the FIFO can store.
    +            RXFIFO_OVF_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when receiver detects the edge change
    +            /// of DSRn signal.
    +            DSR_CHG_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when receiver detects the edge change
    +            /// of CTSn signal.
    +            CTS_CHG_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when receiver detects a 0 after the
    +            /// stop bit.
    +            BRK_DET_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when receiver takes more time than
    +            /// rx_tout_thrhd to receive a byte.
    +            RXFIFO_TOUT_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when receiver recevies Xon char when
    +            /// uart_sw_flow_con_en is set to 1.
    +            SW_XON_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when receiver receives Xoff char when
    +            /// uart_sw_flow_con_en is set to 1.
    +            SW_XOFF_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when receiver detects a glitch in the
    +            /// middle of a start bit.
    +            GLITCH_DET_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when transmitter completes sending
    +            /// NULL characters, after all data in Tx-FIFO are sent.
    +            TX_BRK_DONE_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when transmitter has kept the
    +            /// shortest duration after sending the last data.
    +            TX_BRK_IDLE_DONE_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when transmitter has send out all
    +            /// data in FIFO.
    +            TX_DONE_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when receiver detects a parity error
    +            /// from the echo of transmitter in rs485 mode.
    +            RS485_PARITY_ERR_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when receiver detects a data frame
    +            /// error from the echo of transmitter in rs485 mode.
    +            RS485_FRM_ERR_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when detects a clash between
    +            /// transmitter and receiver in rs485 mode.
    +            RS485_CLASH_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when receiver detects the configured
    +            /// at_cmd char.
    +            AT_CMD_CHAR_DET_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when input rxd edge changes more
    +            /// times than what reg_active_threshold specifies in light sleeping mode.
    +            WAKEUP_INT_RAW: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0x4);
    +
    +        /// address: 0x60000008
    +        /// Masked interrupt status
    +        pub const INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This is the status bit for rxfifo_full_int_raw when rxfifo_full_int_ena is set
    +            /// to 1.
    +            RXFIFO_FULL_INT_ST: u1,
    +            /// This is the status bit for txfifo_empty_int_raw when txfifo_empty_int_ena is set
    +            /// to 1.
    +            TXFIFO_EMPTY_INT_ST: u1,
    +            /// This is the status bit for parity_err_int_raw when parity_err_int_ena is set to
    +            /// 1.
    +            PARITY_ERR_INT_ST: u1,
    +            /// This is the status bit for frm_err_int_raw when frm_err_int_ena is set to 1.
    +            FRM_ERR_INT_ST: u1,
    +            /// This is the status bit for rxfifo_ovf_int_raw when rxfifo_ovf_int_ena is set to
    +            /// 1.
    +            RXFIFO_OVF_INT_ST: u1,
    +            /// This is the status bit for dsr_chg_int_raw when dsr_chg_int_ena is set to 1.
    +            DSR_CHG_INT_ST: u1,
    +            /// This is the status bit for cts_chg_int_raw when cts_chg_int_ena is set to 1.
    +            CTS_CHG_INT_ST: u1,
    +            /// This is the status bit for brk_det_int_raw when brk_det_int_ena is set to 1.
    +            BRK_DET_INT_ST: u1,
    +            /// This is the status bit for rxfifo_tout_int_raw when rxfifo_tout_int_ena is set
    +            /// to 1.
    +            RXFIFO_TOUT_INT_ST: u1,
    +            /// This is the status bit for sw_xon_int_raw when sw_xon_int_ena is set to 1.
    +            SW_XON_INT_ST: u1,
    +            /// This is the status bit for sw_xoff_int_raw when sw_xoff_int_ena is set to 1.
    +            SW_XOFF_INT_ST: u1,
    +            /// This is the status bit for glitch_det_int_raw when glitch_det_int_ena is set to
    +            /// 1.
    +            GLITCH_DET_INT_ST: u1,
    +            /// This is the status bit for tx_brk_done_int_raw when tx_brk_done_int_ena is set
    +            /// to 1.
    +            TX_BRK_DONE_INT_ST: u1,
    +            /// This is the stauts bit for tx_brk_idle_done_int_raw when
    +            /// tx_brk_idle_done_int_ena is set to 1.
    +            TX_BRK_IDLE_DONE_INT_ST: u1,
    +            /// This is the status bit for tx_done_int_raw when tx_done_int_ena is set to 1.
    +            TX_DONE_INT_ST: u1,
    +            /// This is the status bit for rs485_parity_err_int_raw when rs485_parity_int_ena is
    +            /// set to 1.
    +            RS485_PARITY_ERR_INT_ST: u1,
    +            /// This is the status bit for rs485_frm_err_int_raw when rs485_fm_err_int_ena is
    +            /// set to 1.
    +            RS485_FRM_ERR_INT_ST: u1,
    +            /// This is the status bit for rs485_clash_int_raw when rs485_clash_int_ena is set
    +            /// to 1.
    +            RS485_CLASH_INT_ST: u1,
    +            /// This is the status bit for at_cmd_det_int_raw when at_cmd_char_det_int_ena is
    +            /// set to 1.
    +            AT_CMD_CHAR_DET_INT_ST: u1,
    +            /// This is the status bit for uart_wakeup_int_raw when uart_wakeup_int_ena is set
    +            /// to 1.
    +            WAKEUP_INT_ST: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0x8);
    +
    +        /// address: 0x6000000c
    +        /// Interrupt enable bits
    +        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This is the enable bit for rxfifo_full_int_st register.
    +            RXFIFO_FULL_INT_ENA: u1,
    +            /// This is the enable bit for txfifo_empty_int_st register.
    +            TXFIFO_EMPTY_INT_ENA: u1,
    +            /// This is the enable bit for parity_err_int_st register.
    +            PARITY_ERR_INT_ENA: u1,
    +            /// This is the enable bit for frm_err_int_st register.
    +            FRM_ERR_INT_ENA: u1,
    +            /// This is the enable bit for rxfifo_ovf_int_st register.
    +            RXFIFO_OVF_INT_ENA: u1,
    +            /// This is the enable bit for dsr_chg_int_st register.
    +            DSR_CHG_INT_ENA: u1,
    +            /// This is the enable bit for cts_chg_int_st register.
    +            CTS_CHG_INT_ENA: u1,
    +            /// This is the enable bit for brk_det_int_st register.
    +            BRK_DET_INT_ENA: u1,
    +            /// This is the enable bit for rxfifo_tout_int_st register.
    +            RXFIFO_TOUT_INT_ENA: u1,
    +            /// This is the enable bit for sw_xon_int_st register.
    +            SW_XON_INT_ENA: u1,
    +            /// This is the enable bit for sw_xoff_int_st register.
    +            SW_XOFF_INT_ENA: u1,
    +            /// This is the enable bit for glitch_det_int_st register.
    +            GLITCH_DET_INT_ENA: u1,
    +            /// This is the enable bit for tx_brk_done_int_st register.
    +            TX_BRK_DONE_INT_ENA: u1,
    +            /// This is the enable bit for tx_brk_idle_done_int_st register.
    +            TX_BRK_IDLE_DONE_INT_ENA: u1,
    +            /// This is the enable bit for tx_done_int_st register.
    +            TX_DONE_INT_ENA: u1,
    +            /// This is the enable bit for rs485_parity_err_int_st register.
    +            RS485_PARITY_ERR_INT_ENA: u1,
    +            /// This is the enable bit for rs485_parity_err_int_st register.
    +            RS485_FRM_ERR_INT_ENA: u1,
    +            /// This is the enable bit for rs485_clash_int_st register.
    +            RS485_CLASH_INT_ENA: u1,
    +            /// This is the enable bit for at_cmd_char_det_int_st register.
    +            AT_CMD_CHAR_DET_INT_ENA: u1,
    +            /// This is the enable bit for uart_wakeup_int_st register.
    +            WAKEUP_INT_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0xc);
    +
    +        /// address: 0x60000010
    +        /// Interrupt clear bits
    +        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Set this bit to clear the rxfifo_full_int_raw interrupt.
    +            RXFIFO_FULL_INT_CLR: u1,
    +            /// Set this bit to clear txfifo_empty_int_raw interrupt.
    +            TXFIFO_EMPTY_INT_CLR: u1,
    +            /// Set this bit to clear parity_err_int_raw interrupt.
    +            PARITY_ERR_INT_CLR: u1,
    +            /// Set this bit to clear frm_err_int_raw interrupt.
    +            FRM_ERR_INT_CLR: u1,
    +            /// Set this bit to clear rxfifo_ovf_int_raw interrupt.
    +            RXFIFO_OVF_INT_CLR: u1,
    +            /// Set this bit to clear the dsr_chg_int_raw interrupt.
    +            DSR_CHG_INT_CLR: u1,
    +            /// Set this bit to clear the cts_chg_int_raw interrupt.
    +            CTS_CHG_INT_CLR: u1,
    +            /// Set this bit to clear the brk_det_int_raw interrupt.
    +            BRK_DET_INT_CLR: u1,
    +            /// Set this bit to clear the rxfifo_tout_int_raw interrupt.
    +            RXFIFO_TOUT_INT_CLR: u1,
    +            /// Set this bit to clear the sw_xon_int_raw interrupt.
    +            SW_XON_INT_CLR: u1,
    +            /// Set this bit to clear the sw_xoff_int_raw interrupt.
    +            SW_XOFF_INT_CLR: u1,
    +            /// Set this bit to clear the glitch_det_int_raw interrupt.
    +            GLITCH_DET_INT_CLR: u1,
    +            /// Set this bit to clear the tx_brk_done_int_raw interrupt..
    +            TX_BRK_DONE_INT_CLR: u1,
    +            /// Set this bit to clear the tx_brk_idle_done_int_raw interrupt.
    +            TX_BRK_IDLE_DONE_INT_CLR: u1,
    +            /// Set this bit to clear the tx_done_int_raw interrupt.
    +            TX_DONE_INT_CLR: u1,
    +            /// Set this bit to clear the rs485_parity_err_int_raw interrupt.
    +            RS485_PARITY_ERR_INT_CLR: u1,
    +            /// Set this bit to clear the rs485_frm_err_int_raw interrupt.
    +            RS485_FRM_ERR_INT_CLR: u1,
    +            /// Set this bit to clear the rs485_clash_int_raw interrupt.
    +            RS485_CLASH_INT_CLR: u1,
    +            /// Set this bit to clear the at_cmd_char_det_int_raw interrupt.
    +            AT_CMD_CHAR_DET_INT_CLR: u1,
    +            /// Set this bit to clear the uart_wakeup_int_raw interrupt.
    +            WAKEUP_INT_CLR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0x10);
    +
    +        /// address: 0x60000014
    +        /// Clock divider configuration
    +        pub const CLKDIV = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The integral part of the frequency divider factor.
    +            CLKDIV: u12,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            /// The decimal part of the frequency divider factor.
    +            FRAG: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +        }), base_address + 0x14);
    +
    +        /// address: 0x60000018
    +        /// Rx Filter configuration
    +        pub const RX_FILT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// when input pulse width is lower than this value, the pulse is ignored.
    +            GLITCH_FILT: u8,
    +            /// Set this bit to enable Rx signal filter.
    +            GLITCH_FILT_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +        }), base_address + 0x18);
    +
    +        /// address: 0x6000001c
    +        /// UART status register
    +        pub const STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the byte number of valid data in Rx-FIFO.
    +            RXFIFO_CNT: u10,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            /// The register represent the level value of the internal uart dsr signal.
    +            DSRN: u1,
    +            /// This register represent the level value of the internal uart cts signal.
    +            CTSN: u1,
    +            /// This register represent the level value of the internal uart rxd signal.
    +            RXD: u1,
    +            /// Stores the byte number of data in Tx-FIFO.
    +            TXFIFO_CNT: u10,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            /// This bit represents the level of the internal uart dtr signal.
    +            DTRN: u1,
    +            /// This bit represents the level of the internal uart rts signal.
    +            RTSN: u1,
    +            /// This bit represents the level of the internal uart txd signal.
    +            TXD: u1,
    +        }), base_address + 0x1c);
    +
    +        /// address: 0x60000020
    +        /// a
    +        pub const CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register is used to configure the parity check mode.
    +            PARITY: u1,
    +            /// Set this bit to enable uart parity check.
    +            PARITY_EN: u1,
    +            /// This register is used to set the length of data.
    +            BIT_NUM: u2,
    +            /// This register is used to set the length of stop bit.
    +            STOP_BIT_NUM: u2,
    +            /// This register is used to configure the software rts signal which is used in
    +            /// software flow control.
    +            SW_RTS: u1,
    +            /// This register is used to configure the software dtr signal which is used in
    +            /// software flow control.
    +            SW_DTR: u1,
    +            /// Set this bit to enbale transmitter to send NULL when the process of sending data
    +            /// is done.
    +            TXD_BRK: u1,
    +            /// Set this bit to enable IrDA loopback mode.
    +            IRDA_DPLX: u1,
    +            /// This is the start enable bit for IrDA transmitter.
    +            IRDA_TX_EN: u1,
    +            /// 1'h1: The IrDA transmitter's 11th bit is the same as 10th bit. 1'h0: Set IrDA
    +            /// transmitter's 11th bit to 0.
    +            IRDA_WCTL: u1,
    +            /// Set this bit to invert the level of IrDA transmitter.
    +            IRDA_TX_INV: u1,
    +            /// Set this bit to invert the level of IrDA receiver.
    +            IRDA_RX_INV: u1,
    +            /// Set this bit to enable uart loopback test mode.
    +            LOOPBACK: u1,
    +            /// Set this bit to enable flow control function for transmitter.
    +            TX_FLOW_EN: u1,
    +            /// Set this bit to enable IrDA protocol.
    +            IRDA_EN: u1,
    +            /// Set this bit to reset the uart receive-FIFO.
    +            RXFIFO_RST: u1,
    +            /// Set this bit to reset the uart transmit-FIFO.
    +            TXFIFO_RST: u1,
    +            /// Set this bit to inverse the level value of uart rxd signal.
    +            RXD_INV: u1,
    +            /// Set this bit to inverse the level value of uart cts signal.
    +            CTS_INV: u1,
    +            /// Set this bit to inverse the level value of uart dsr signal.
    +            DSR_INV: u1,
    +            /// Set this bit to inverse the level value of uart txd signal.
    +            TXD_INV: u1,
    +            /// Set this bit to inverse the level value of uart rts signal.
    +            RTS_INV: u1,
    +            /// Set this bit to inverse the level value of uart dtr signal.
    +            DTR_INV: u1,
    +            /// 1'h1: Force clock on for register. 1'h0: Support clock only when application
    +            /// writes registers.
    +            CLK_EN: u1,
    +            /// 1'h1: Receiver stops storing data into FIFO when data is wrong. 1'h0: Receiver
    +            /// stores the data even if the received data is wrong.
    +            ERR_WR_MASK: u1,
    +            /// This is the enable bit for detecting baudrate.
    +            AUTOBAUD_EN: u1,
    +            /// UART memory clock gate enable signal.
    +            MEM_CLK_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +        }), base_address + 0x20);
    +
    +        /// address: 0x60000024
    +        /// Configuration register 1
    +        pub const CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// It will produce rxfifo_full_int interrupt when receiver receives more data than
    +            /// this register value.
    +            RXFIFO_FULL_THRHD: u9,
    +            /// It will produce txfifo_empty_int interrupt when the data amount in Tx-FIFO is
    +            /// less than this register value.
    +            TXFIFO_EMPTY_THRHD: u9,
    +            /// Disable UART Rx data overflow detect.
    +            DIS_RX_DAT_OVF: u1,
    +            /// Set this bit to stop accumulating idle_cnt when hardware flow control works.
    +            RX_TOUT_FLOW_DIS: u1,
    +            /// This is the flow enable bit for UART receiver.
    +            RX_FLOW_EN: u1,
    +            /// This is the enble bit for uart receiver's timeout function.
    +            RX_TOUT_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +        }), base_address + 0x24);
    +
    +        /// address: 0x60000028
    +        /// Autobaud minimum low pulse duration register
    +        pub const LOWPULSE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the value of the minimum duration time of the low level
    +            /// pulse. It is used in baud rate-detect process.
    +            MIN_CNT: u12,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0x28);
    +
    +        /// address: 0x6000002c
    +        /// Autobaud minimum high pulse duration register
    +        pub const HIGHPULSE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the value of the maxinum duration time for the high level
    +            /// pulse. It is used in baud rate-detect process.
    +            MIN_CNT: u12,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0x2c);
    +
    +        /// address: 0x60000030
    +        /// Autobaud edge change count register
    +        pub const RXD_CNT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the count of rxd edge change. It is used in baud
    +            /// rate-detect process.
    +            RXD_EDGE_CNT: u10,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +        }), base_address + 0x30);
    +
    +        /// address: 0x60000034
    +        /// Software flow-control configuration
    +        pub const FLOW_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Set this bit to enable software flow control. It is used with register sw_xon or
    +            /// sw_xoff.
    +            SW_FLOW_CON_EN: u1,
    +            /// Set this bit to remove flow control char from the received data.
    +            XONOFF_DEL: u1,
    +            /// Set this bit to enable the transmitter to go on sending data.
    +            FORCE_XON: u1,
    +            /// Set this bit to stop the transmitter from sending data.
    +            FORCE_XOFF: u1,
    +            /// Set this bit to send Xon char. It is cleared by hardware automatically.
    +            SEND_XON: u1,
    +            /// Set this bit to send Xoff char. It is cleared by hardware automatically.
    +            SEND_XOFF: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +        }), base_address + 0x34);
    +
    +        /// address: 0x60000038
    +        /// Sleep-mode configuration
    +        pub const SLEEP_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The uart is activated from light sleeping mode when the input rxd edge changes
    +            /// more times than this register value.
    +            ACTIVE_THRESHOLD: u10,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +        }), base_address + 0x38);
    +
    +        /// address: 0x6000003c
    +        /// Software flow-control character configuration
    +        pub const SWFC_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// When the data amount in Rx-FIFO is more than this register value with
    +            /// uart_sw_flow_con_en set to 1, it will send a Xoff char.
    +            XOFF_THRESHOLD: u9,
    +            /// This register stores the Xoff flow control char.
    +            XOFF_CHAR: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +        }), base_address + 0x3c);
    +
    +        /// address: 0x60000040
    +        /// Software flow-control character configuration
    +        pub const SWFC_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// When the data amount in Rx-FIFO is less than this register value with
    +            /// uart_sw_flow_con_en set to 1, it will send a Xon char.
    +            XON_THRESHOLD: u9,
    +            /// This register stores the Xon flow control char.
    +            XON_CHAR: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +        }), base_address + 0x40);
    +
    +        /// address: 0x60000044
    +        /// Tx Break character configuration
    +        pub const TXBRK_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register is used to configure the number of 0 to be sent after the process
    +            /// of sending data is done. It is active when txd_brk is set to 1.
    +            TX_BRK_NUM: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x44);
    +
    +        /// address: 0x60000048
    +        /// Frame-end idle configuration
    +        pub const IDLE_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// It will produce frame end signal when receiver takes more time to receive one
    +            /// byte data than this register value.
    +            RX_IDLE_THRHD: u10,
    +            /// This register is used to configure the duration time between transfers.
    +            TX_IDLE_NUM: u10,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0x48);
    +
    +        /// address: 0x6000004c
    +        /// RS485 mode configuration
    +        pub const RS485_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Set this bit to choose the rs485 mode.
    +            RS485_EN: u1,
    +            /// Set this bit to delay the stop bit by 1 bit.
    +            DL0_EN: u1,
    +            /// Set this bit to delay the stop bit by 1 bit.
    +            DL1_EN: u1,
    +            /// Set this bit to enable receiver could receive data when the transmitter is
    +            /// transmitting data in rs485 mode.
    +            RS485TX_RX_EN: u1,
    +            /// 1'h1: enable rs485 transmitter to send data when rs485 receiver line is busy.
    +            RS485RXBY_TX_EN: u1,
    +            /// This register is used to delay the receiver's internal data signal.
    +            RS485_RX_DLY_NUM: u1,
    +            /// This register is used to delay the transmitter's internal data signal.
    +            RS485_TX_DLY_NUM: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +        }), base_address + 0x4c);
    +
    +        /// address: 0x60000050
    +        /// Pre-sequence timing configuration
    +        pub const AT_CMD_PRECNT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register is used to configure the idle duration time before the first
    +            /// at_cmd is received by receiver.
    +            PRE_IDLE_NUM: u16,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x50);
    +
    +        /// address: 0x60000054
    +        /// Post-sequence timing configuration
    +        pub const AT_CMD_POSTCNT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register is used to configure the duration time between the last at_cmd and
    +            /// the next data.
    +            POST_IDLE_NUM: u16,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x54);
    +
    +        /// address: 0x60000058
    +        /// Timeout configuration
    +        pub const AT_CMD_GAPTOUT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register is used to configure the duration time between the at_cmd chars.
    +            RX_GAP_TOUT: u16,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x58);
    +
    +        /// address: 0x6000005c
    +        /// AT escape sequence detection configuration
    +        pub const AT_CMD_CHAR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register is used to configure the content of at_cmd char.
    +            AT_CMD_CHAR: u8,
    +            /// This register is used to configure the num of continuous at_cmd chars received
    +            /// by receiver.
    +            CHAR_NUM: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x5c);
    +
    +        /// address: 0x60000060
    +        /// UART threshold and allocation configuration
    +        pub const MEM_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            /// This register is used to configure the amount of mem allocated for receive-FIFO.
    +            /// The default number is 128 bytes.
    +            RX_SIZE: u3,
    +            /// This register is used to configure the amount of mem allocated for
    +            /// transmit-FIFO. The default number is 128 bytes.
    +            TX_SIZE: u3,
    +            /// This register is used to configure the maximum amount of data that can be
    +            /// received when hardware flow control works.
    +            RX_FLOW_THRHD: u9,
    +            /// This register is used to configure the threshold time that receiver takes to
    +            /// receive one byte. The rxfifo_tout_int interrupt will be trigger when the
    +            /// receiver takes more time to receive one byte with rx_tout_en set to 1.
    +            RX_TOUT_THRHD: u10,
    +            /// Set this bit to force power down UART memory.
    +            MEM_FORCE_PD: u1,
    +            /// Set this bit to force power up UART memory.
    +            MEM_FORCE_PU: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +        }), base_address + 0x60);
    +
    +        /// address: 0x60000064
    +        /// Tx-FIFO write and read offset address.
    +        pub const MEM_TX_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the offset address in Tx-FIFO when software writes Tx-FIFO
    +            /// via APB.
    +            APB_TX_WADDR: u10,
    +            reserved0: u1,
    +            /// This register stores the offset address in Tx-FIFO when Tx-FSM reads data via
    +            /// Tx-FIFO_Ctrl.
    +            TX_RADDR: u10,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +        }), base_address + 0x64);
    +
    +        /// address: 0x60000068
    +        /// Rx-FIFO write and read offset address.
    +        pub const MEM_RX_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the offset address in RX-FIFO when software reads data from
    +            /// Rx-FIFO via APB. UART0 is 10'h100. UART1 is 10'h180.
    +            APB_RX_RADDR: u10,
    +            reserved0: u1,
    +            /// This register stores the offset address in Rx-FIFO when Rx-FIFO_Ctrl writes
    +            /// Rx-FIFO. UART0 is 10'h100. UART1 is 10'h180.
    +            RX_WADDR: u10,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +        }), base_address + 0x68);
    +
    +        /// address: 0x6000006c
    +        /// UART transmit and receive status.
    +        pub const FSM_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This is the status register of receiver.
    +            ST_URX_OUT: u4,
    +            /// This is the status register of transmitter.
    +            ST_UTX_OUT: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x6c);
    +
    +        /// address: 0x60000070
    +        /// Autobaud high pulse register
    +        pub const POSPULSE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the minimal input clock count between two positive edges.
    +            /// It is used in boudrate-detect process.
    +            POSEDGE_MIN_CNT: u12,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0x70);
    +
    +        /// address: 0x60000074
    +        /// Autobaud low pulse register
    +        pub const NEGPULSE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the minimal input clock count between two negative edges.
    +            /// It is used in boudrate-detect process.
    +            NEGEDGE_MIN_CNT: u12,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0x74);
    +
    +        /// address: 0x60000078
    +        /// UART core clock configuration
    +        pub const CLK_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The denominator of the frequency divider factor.
    +            SCLK_DIV_B: u6,
    +            /// The numerator of the frequency divider factor.
    +            SCLK_DIV_A: u6,
    +            /// The integral part of the frequency divider factor.
    +            SCLK_DIV_NUM: u8,
    +            /// UART clock source select. 1: 80Mhz, 2: 8Mhz, 3: XTAL.
    +            SCLK_SEL: u2,
    +            /// Set this bit to enable UART Tx/Rx clock.
    +            SCLK_EN: u1,
    +            /// Write 1 then write 0 to this bit, reset UART Tx/Rx.
    +            RST_CORE: u1,
    +            /// Set this bit to enable UART Tx clock.
    +            TX_SCLK_EN: u1,
    +            /// Set this bit to enable UART Rx clock.
    +            RX_SCLK_EN: u1,
    +            /// Write 1 then write 0 to this bit, reset UART Tx.
    +            TX_RST_CORE: u1,
    +            /// Write 1 then write 0 to this bit, reset UART Rx.
    +            RX_RST_CORE: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +        }), base_address + 0x78);
    +
    +        /// address: 0x6000007c
    +        /// UART Version register
    +        pub const DATE = @intToPtr(*volatile u32, base_address + 0x7c);
    +
    +        /// address: 0x60000080
    +        /// UART ID register
    +        pub const ID = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register is used to configure the uart_id.
    +            ID: u30,
    +            /// This bit used to select synchronize mode. 1: Registers are auto synchronized
    +            /// into UART Core clock and UART core should be keep the same with APB clock. 0:
    +            /// After configure registers, software needs to write 1 to UART_REG_UPDATE to
    +            /// synchronize registers.
    +            HIGH_SPEED: u1,
    +            /// Software write 1 would synchronize registers into UART Core clock domain and
    +            /// would be cleared by hardware after synchronization is done.
    +            REG_UPDATE: u1,
    +        }), base_address + 0x80);
    +    };
    +
    +    /// UART (Universal Asynchronous Receiver-Transmitter) Controller
    +    pub const UART1 = struct {
    +        pub const base_address = 0x60010000;
    +
    +        /// address: 0x60010000
    +        /// FIFO data register
    +        pub const FIFO = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// UART 0 accesses FIFO via this register.
    +            RXFIFO_RD_BYTE: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x0);
    +
    +        /// address: 0x60010004
    +        /// Raw interrupt status
    +        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This interrupt raw bit turns to high level when receiver receives more data than
    +            /// what rxfifo_full_thrhd specifies.
    +            RXFIFO_FULL_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when the amount of data in Tx-FIFO is
    +            /// less than what txfifo_empty_thrhd specifies .
    +            TXFIFO_EMPTY_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when receiver detects a parity error
    +            /// in the data.
    +            PARITY_ERR_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when receiver detects a data frame
    +            /// error .
    +            FRM_ERR_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when receiver receives more data than
    +            /// the FIFO can store.
    +            RXFIFO_OVF_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when receiver detects the edge change
    +            /// of DSRn signal.
    +            DSR_CHG_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when receiver detects the edge change
    +            /// of CTSn signal.
    +            CTS_CHG_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when receiver detects a 0 after the
    +            /// stop bit.
    +            BRK_DET_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when receiver takes more time than
    +            /// rx_tout_thrhd to receive a byte.
    +            RXFIFO_TOUT_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when receiver recevies Xon char when
    +            /// uart_sw_flow_con_en is set to 1.
    +            SW_XON_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when receiver receives Xoff char when
    +            /// uart_sw_flow_con_en is set to 1.
    +            SW_XOFF_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when receiver detects a glitch in the
    +            /// middle of a start bit.
    +            GLITCH_DET_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when transmitter completes sending
    +            /// NULL characters, after all data in Tx-FIFO are sent.
    +            TX_BRK_DONE_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when transmitter has kept the
    +            /// shortest duration after sending the last data.
    +            TX_BRK_IDLE_DONE_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when transmitter has send out all
    +            /// data in FIFO.
    +            TX_DONE_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when receiver detects a parity error
    +            /// from the echo of transmitter in rs485 mode.
    +            RS485_PARITY_ERR_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when receiver detects a data frame
    +            /// error from the echo of transmitter in rs485 mode.
    +            RS485_FRM_ERR_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when detects a clash between
    +            /// transmitter and receiver in rs485 mode.
    +            RS485_CLASH_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when receiver detects the configured
    +            /// at_cmd char.
    +            AT_CMD_CHAR_DET_INT_RAW: u1,
    +            /// This interrupt raw bit turns to high level when input rxd edge changes more
    +            /// times than what reg_active_threshold specifies in light sleeping mode.
    +            WAKEUP_INT_RAW: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0x4);
    +
    +        /// address: 0x60010008
    +        /// Masked interrupt status
    +        pub const INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This is the status bit for rxfifo_full_int_raw when rxfifo_full_int_ena is set
    +            /// to 1.
    +            RXFIFO_FULL_INT_ST: u1,
    +            /// This is the status bit for txfifo_empty_int_raw when txfifo_empty_int_ena is set
    +            /// to 1.
    +            TXFIFO_EMPTY_INT_ST: u1,
    +            /// This is the status bit for parity_err_int_raw when parity_err_int_ena is set to
    +            /// 1.
    +            PARITY_ERR_INT_ST: u1,
    +            /// This is the status bit for frm_err_int_raw when frm_err_int_ena is set to 1.
    +            FRM_ERR_INT_ST: u1,
    +            /// This is the status bit for rxfifo_ovf_int_raw when rxfifo_ovf_int_ena is set to
    +            /// 1.
    +            RXFIFO_OVF_INT_ST: u1,
    +            /// This is the status bit for dsr_chg_int_raw when dsr_chg_int_ena is set to 1.
    +            DSR_CHG_INT_ST: u1,
    +            /// This is the status bit for cts_chg_int_raw when cts_chg_int_ena is set to 1.
    +            CTS_CHG_INT_ST: u1,
    +            /// This is the status bit for brk_det_int_raw when brk_det_int_ena is set to 1.
    +            BRK_DET_INT_ST: u1,
    +            /// This is the status bit for rxfifo_tout_int_raw when rxfifo_tout_int_ena is set
    +            /// to 1.
    +            RXFIFO_TOUT_INT_ST: u1,
    +            /// This is the status bit for sw_xon_int_raw when sw_xon_int_ena is set to 1.
    +            SW_XON_INT_ST: u1,
    +            /// This is the status bit for sw_xoff_int_raw when sw_xoff_int_ena is set to 1.
    +            SW_XOFF_INT_ST: u1,
    +            /// This is the status bit for glitch_det_int_raw when glitch_det_int_ena is set to
    +            /// 1.
    +            GLITCH_DET_INT_ST: u1,
    +            /// This is the status bit for tx_brk_done_int_raw when tx_brk_done_int_ena is set
    +            /// to 1.
    +            TX_BRK_DONE_INT_ST: u1,
    +            /// This is the stauts bit for tx_brk_idle_done_int_raw when
    +            /// tx_brk_idle_done_int_ena is set to 1.
    +            TX_BRK_IDLE_DONE_INT_ST: u1,
    +            /// This is the status bit for tx_done_int_raw when tx_done_int_ena is set to 1.
    +            TX_DONE_INT_ST: u1,
    +            /// This is the status bit for rs485_parity_err_int_raw when rs485_parity_int_ena is
    +            /// set to 1.
    +            RS485_PARITY_ERR_INT_ST: u1,
    +            /// This is the status bit for rs485_frm_err_int_raw when rs485_fm_err_int_ena is
    +            /// set to 1.
    +            RS485_FRM_ERR_INT_ST: u1,
    +            /// This is the status bit for rs485_clash_int_raw when rs485_clash_int_ena is set
    +            /// to 1.
    +            RS485_CLASH_INT_ST: u1,
    +            /// This is the status bit for at_cmd_det_int_raw when at_cmd_char_det_int_ena is
    +            /// set to 1.
    +            AT_CMD_CHAR_DET_INT_ST: u1,
    +            /// This is the status bit for uart_wakeup_int_raw when uart_wakeup_int_ena is set
    +            /// to 1.
    +            WAKEUP_INT_ST: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0x8);
    +
    +        /// address: 0x6001000c
    +        /// Interrupt enable bits
    +        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This is the enable bit for rxfifo_full_int_st register.
    +            RXFIFO_FULL_INT_ENA: u1,
    +            /// This is the enable bit for txfifo_empty_int_st register.
    +            TXFIFO_EMPTY_INT_ENA: u1,
    +            /// This is the enable bit for parity_err_int_st register.
    +            PARITY_ERR_INT_ENA: u1,
    +            /// This is the enable bit for frm_err_int_st register.
    +            FRM_ERR_INT_ENA: u1,
    +            /// This is the enable bit for rxfifo_ovf_int_st register.
    +            RXFIFO_OVF_INT_ENA: u1,
    +            /// This is the enable bit for dsr_chg_int_st register.
    +            DSR_CHG_INT_ENA: u1,
    +            /// This is the enable bit for cts_chg_int_st register.
    +            CTS_CHG_INT_ENA: u1,
    +            /// This is the enable bit for brk_det_int_st register.
    +            BRK_DET_INT_ENA: u1,
    +            /// This is the enable bit for rxfifo_tout_int_st register.
    +            RXFIFO_TOUT_INT_ENA: u1,
    +            /// This is the enable bit for sw_xon_int_st register.
    +            SW_XON_INT_ENA: u1,
    +            /// This is the enable bit for sw_xoff_int_st register.
    +            SW_XOFF_INT_ENA: u1,
    +            /// This is the enable bit for glitch_det_int_st register.
    +            GLITCH_DET_INT_ENA: u1,
    +            /// This is the enable bit for tx_brk_done_int_st register.
    +            TX_BRK_DONE_INT_ENA: u1,
    +            /// This is the enable bit for tx_brk_idle_done_int_st register.
    +            TX_BRK_IDLE_DONE_INT_ENA: u1,
    +            /// This is the enable bit for tx_done_int_st register.
    +            TX_DONE_INT_ENA: u1,
    +            /// This is the enable bit for rs485_parity_err_int_st register.
    +            RS485_PARITY_ERR_INT_ENA: u1,
    +            /// This is the enable bit for rs485_parity_err_int_st register.
    +            RS485_FRM_ERR_INT_ENA: u1,
    +            /// This is the enable bit for rs485_clash_int_st register.
    +            RS485_CLASH_INT_ENA: u1,
    +            /// This is the enable bit for at_cmd_char_det_int_st register.
    +            AT_CMD_CHAR_DET_INT_ENA: u1,
    +            /// This is the enable bit for uart_wakeup_int_st register.
    +            WAKEUP_INT_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0xc);
    +
    +        /// address: 0x60010010
    +        /// Interrupt clear bits
    +        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Set this bit to clear the rxfifo_full_int_raw interrupt.
    +            RXFIFO_FULL_INT_CLR: u1,
    +            /// Set this bit to clear txfifo_empty_int_raw interrupt.
    +            TXFIFO_EMPTY_INT_CLR: u1,
    +            /// Set this bit to clear parity_err_int_raw interrupt.
    +            PARITY_ERR_INT_CLR: u1,
    +            /// Set this bit to clear frm_err_int_raw interrupt.
    +            FRM_ERR_INT_CLR: u1,
    +            /// Set this bit to clear rxfifo_ovf_int_raw interrupt.
    +            RXFIFO_OVF_INT_CLR: u1,
    +            /// Set this bit to clear the dsr_chg_int_raw interrupt.
    +            DSR_CHG_INT_CLR: u1,
    +            /// Set this bit to clear the cts_chg_int_raw interrupt.
    +            CTS_CHG_INT_CLR: u1,
    +            /// Set this bit to clear the brk_det_int_raw interrupt.
    +            BRK_DET_INT_CLR: u1,
    +            /// Set this bit to clear the rxfifo_tout_int_raw interrupt.
    +            RXFIFO_TOUT_INT_CLR: u1,
    +            /// Set this bit to clear the sw_xon_int_raw interrupt.
    +            SW_XON_INT_CLR: u1,
    +            /// Set this bit to clear the sw_xoff_int_raw interrupt.
    +            SW_XOFF_INT_CLR: u1,
    +            /// Set this bit to clear the glitch_det_int_raw interrupt.
    +            GLITCH_DET_INT_CLR: u1,
    +            /// Set this bit to clear the tx_brk_done_int_raw interrupt..
    +            TX_BRK_DONE_INT_CLR: u1,
    +            /// Set this bit to clear the tx_brk_idle_done_int_raw interrupt.
    +            TX_BRK_IDLE_DONE_INT_CLR: u1,
    +            /// Set this bit to clear the tx_done_int_raw interrupt.
    +            TX_DONE_INT_CLR: u1,
    +            /// Set this bit to clear the rs485_parity_err_int_raw interrupt.
    +            RS485_PARITY_ERR_INT_CLR: u1,
    +            /// Set this bit to clear the rs485_frm_err_int_raw interrupt.
    +            RS485_FRM_ERR_INT_CLR: u1,
    +            /// Set this bit to clear the rs485_clash_int_raw interrupt.
    +            RS485_CLASH_INT_CLR: u1,
    +            /// Set this bit to clear the at_cmd_char_det_int_raw interrupt.
    +            AT_CMD_CHAR_DET_INT_CLR: u1,
    +            /// Set this bit to clear the uart_wakeup_int_raw interrupt.
    +            WAKEUP_INT_CLR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0x10);
    +
    +        /// address: 0x60010014
    +        /// Clock divider configuration
    +        pub const CLKDIV = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The integral part of the frequency divider factor.
    +            CLKDIV: u12,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            reserved6: u1,
    +            reserved7: u1,
    +            /// The decimal part of the frequency divider factor.
    +            FRAG: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +        }), base_address + 0x14);
    +
    +        /// address: 0x60010018
    +        /// Rx Filter configuration
    +        pub const RX_FILT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// when input pulse width is lower than this value, the pulse is ignored.
    +            GLITCH_FILT: u8,
    +            /// Set this bit to enable Rx signal filter.
    +            GLITCH_FILT_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +        }), base_address + 0x18);
    +
    +        /// address: 0x6001001c
    +        /// UART status register
    +        pub const STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Stores the byte number of valid data in Rx-FIFO.
    +            RXFIFO_CNT: u10,
    +            reserved0: u1,
    +            reserved1: u1,
    +            reserved2: u1,
    +            /// The register represent the level value of the internal uart dsr signal.
    +            DSRN: u1,
    +            /// This register represent the level value of the internal uart cts signal.
    +            CTSN: u1,
    +            /// This register represent the level value of the internal uart rxd signal.
    +            RXD: u1,
    +            /// Stores the byte number of data in Tx-FIFO.
    +            TXFIFO_CNT: u10,
    +            reserved3: u1,
    +            reserved4: u1,
    +            reserved5: u1,
    +            /// This bit represents the level of the internal uart dtr signal.
    +            DTRN: u1,
    +            /// This bit represents the level of the internal uart rts signal.
    +            RTSN: u1,
    +            /// This bit represents the level of the internal uart txd signal.
    +            TXD: u1,
    +        }), base_address + 0x1c);
    +
    +        /// address: 0x60010020
    +        /// a
    +        pub const CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register is used to configure the parity check mode.
    +            PARITY: u1,
    +            /// Set this bit to enable uart parity check.
    +            PARITY_EN: u1,
    +            /// This register is used to set the length of data.
    +            BIT_NUM: u2,
    +            /// This register is used to set the length of stop bit.
    +            STOP_BIT_NUM: u2,
    +            /// This register is used to configure the software rts signal which is used in
    +            /// software flow control.
    +            SW_RTS: u1,
    +            /// This register is used to configure the software dtr signal which is used in
    +            /// software flow control.
    +            SW_DTR: u1,
    +            /// Set this bit to enbale transmitter to send NULL when the process of sending data
    +            /// is done.
    +            TXD_BRK: u1,
    +            /// Set this bit to enable IrDA loopback mode.
    +            IRDA_DPLX: u1,
    +            /// This is the start enable bit for IrDA transmitter.
    +            IRDA_TX_EN: u1,
    +            /// 1'h1: The IrDA transmitter's 11th bit is the same as 10th bit. 1'h0: Set IrDA
    +            /// transmitter's 11th bit to 0.
    +            IRDA_WCTL: u1,
    +            /// Set this bit to invert the level of IrDA transmitter.
    +            IRDA_TX_INV: u1,
    +            /// Set this bit to invert the level of IrDA receiver.
    +            IRDA_RX_INV: u1,
    +            /// Set this bit to enable uart loopback test mode.
    +            LOOPBACK: u1,
    +            /// Set this bit to enable flow control function for transmitter.
    +            TX_FLOW_EN: u1,
    +            /// Set this bit to enable IrDA protocol.
    +            IRDA_EN: u1,
    +            /// Set this bit to reset the uart receive-FIFO.
    +            RXFIFO_RST: u1,
    +            /// Set this bit to reset the uart transmit-FIFO.
    +            TXFIFO_RST: u1,
    +            /// Set this bit to inverse the level value of uart rxd signal.
    +            RXD_INV: u1,
    +            /// Set this bit to inverse the level value of uart cts signal.
    +            CTS_INV: u1,
    +            /// Set this bit to inverse the level value of uart dsr signal.
    +            DSR_INV: u1,
    +            /// Set this bit to inverse the level value of uart txd signal.
    +            TXD_INV: u1,
    +            /// Set this bit to inverse the level value of uart rts signal.
    +            RTS_INV: u1,
    +            /// Set this bit to inverse the level value of uart dtr signal.
    +            DTR_INV: u1,
    +            /// 1'h1: Force clock on for register. 1'h0: Support clock only when application
    +            /// writes registers.
    +            CLK_EN: u1,
    +            /// 1'h1: Receiver stops storing data into FIFO when data is wrong. 1'h0: Receiver
    +            /// stores the data even if the received data is wrong.
    +            ERR_WR_MASK: u1,
    +            /// This is the enable bit for detecting baudrate.
    +            AUTOBAUD_EN: u1,
    +            /// UART memory clock gate enable signal.
    +            MEM_CLK_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +        }), base_address + 0x20);
    +
    +        /// address: 0x60010024
    +        /// Configuration register 1
    +        pub const CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// It will produce rxfifo_full_int interrupt when receiver receives more data than
    +            /// this register value.
    +            RXFIFO_FULL_THRHD: u9,
    +            /// It will produce txfifo_empty_int interrupt when the data amount in Tx-FIFO is
    +            /// less than this register value.
    +            TXFIFO_EMPTY_THRHD: u9,
    +            /// Disable UART Rx data overflow detect.
    +            DIS_RX_DAT_OVF: u1,
    +            /// Set this bit to stop accumulating idle_cnt when hardware flow control works.
    +            RX_TOUT_FLOW_DIS: u1,
    +            /// This is the flow enable bit for UART receiver.
    +            RX_FLOW_EN: u1,
    +            /// This is the enble bit for uart receiver's timeout function.
    +            RX_TOUT_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +        }), base_address + 0x24);
    +
    +        /// address: 0x60010028
    +        /// Autobaud minimum low pulse duration register
    +        pub const LOWPULSE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the value of the minimum duration time of the low level
    +            /// pulse. It is used in baud rate-detect process.
    +            MIN_CNT: u12,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0x28);
    +
    +        /// address: 0x6001002c
    +        /// Autobaud minimum high pulse duration register
    +        pub const HIGHPULSE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the value of the maxinum duration time for the high level
    +            /// pulse. It is used in baud rate-detect process.
    +            MIN_CNT: u12,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0x2c);
    +
    +        /// address: 0x60010030
    +        /// Autobaud edge change count register
    +        pub const RXD_CNT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the count of rxd edge change. It is used in baud
    +            /// rate-detect process.
    +            RXD_EDGE_CNT: u10,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +        }), base_address + 0x30);
    +
    +        /// address: 0x60010034
    +        /// Software flow-control configuration
    +        pub const FLOW_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Set this bit to enable software flow control. It is used with register sw_xon or
    +            /// sw_xoff.
    +            SW_FLOW_CON_EN: u1,
    +            /// Set this bit to remove flow control char from the received data.
    +            XONOFF_DEL: u1,
    +            /// Set this bit to enable the transmitter to go on sending data.
    +            FORCE_XON: u1,
    +            /// Set this bit to stop the transmitter from sending data.
    +            FORCE_XOFF: u1,
    +            /// Set this bit to send Xon char. It is cleared by hardware automatically.
    +            SEND_XON: u1,
    +            /// Set this bit to send Xoff char. It is cleared by hardware automatically.
    +            SEND_XOFF: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +        }), base_address + 0x34);
    +
    +        /// address: 0x60010038
    +        /// Sleep-mode configuration
    +        pub const SLEEP_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The uart is activated from light sleeping mode when the input rxd edge changes
    +            /// more times than this register value.
    +            ACTIVE_THRESHOLD: u10,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +        }), base_address + 0x38);
    +
    +        /// address: 0x6001003c
    +        /// Software flow-control character configuration
    +        pub const SWFC_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// When the data amount in Rx-FIFO is more than this register value with
    +            /// uart_sw_flow_con_en set to 1, it will send a Xoff char.
    +            XOFF_THRESHOLD: u9,
    +            /// This register stores the Xoff flow control char.
    +            XOFF_CHAR: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +        }), base_address + 0x3c);
    +
    +        /// address: 0x60010040
    +        /// Software flow-control character configuration
    +        pub const SWFC_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// When the data amount in Rx-FIFO is less than this register value with
    +            /// uart_sw_flow_con_en set to 1, it will send a Xon char.
    +            XON_THRESHOLD: u9,
    +            /// This register stores the Xon flow control char.
    +            XON_CHAR: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +        }), base_address + 0x40);
    +
    +        /// address: 0x60010044
    +        /// Tx Break character configuration
    +        pub const TXBRK_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register is used to configure the number of 0 to be sent after the process
    +            /// of sending data is done. It is active when txd_brk is set to 1.
    +            TX_BRK_NUM: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x44);
    +
    +        /// address: 0x60010048
    +        /// Frame-end idle configuration
    +        pub const IDLE_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// It will produce frame end signal when receiver takes more time to receive one
    +            /// byte data than this register value.
    +            RX_IDLE_THRHD: u10,
    +            /// This register is used to configure the duration time between transfers.
    +            TX_IDLE_NUM: u10,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +        }), base_address + 0x48);
    +
    +        /// address: 0x6001004c
    +        /// RS485 mode configuration
    +        pub const RS485_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Set this bit to choose the rs485 mode.
    +            RS485_EN: u1,
    +            /// Set this bit to delay the stop bit by 1 bit.
    +            DL0_EN: u1,
    +            /// Set this bit to delay the stop bit by 1 bit.
    +            DL1_EN: u1,
    +            /// Set this bit to enable receiver could receive data when the transmitter is
    +            /// transmitting data in rs485 mode.
    +            RS485TX_RX_EN: u1,
    +            /// 1'h1: enable rs485 transmitter to send data when rs485 receiver line is busy.
    +            RS485RXBY_TX_EN: u1,
    +            /// This register is used to delay the receiver's internal data signal.
    +            RS485_RX_DLY_NUM: u1,
    +            /// This register is used to delay the transmitter's internal data signal.
    +            RS485_TX_DLY_NUM: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +        }), base_address + 0x4c);
    +
    +        /// address: 0x60010050
    +        /// Pre-sequence timing configuration
    +        pub const AT_CMD_PRECNT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register is used to configure the idle duration time before the first
    +            /// at_cmd is received by receiver.
    +            PRE_IDLE_NUM: u16,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x50);
    +
    +        /// address: 0x60010054
    +        /// Post-sequence timing configuration
    +        pub const AT_CMD_POSTCNT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register is used to configure the duration time between the last at_cmd and
    +            /// the next data.
    +            POST_IDLE_NUM: u16,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x54);
    +
    +        /// address: 0x60010058
    +        /// Timeout configuration
    +        pub const AT_CMD_GAPTOUT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register is used to configure the duration time between the at_cmd chars.
    +            RX_GAP_TOUT: u16,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x58);
    +
    +        /// address: 0x6001005c
    +        /// AT escape sequence detection configuration
    +        pub const AT_CMD_CHAR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register is used to configure the content of at_cmd char.
    +            AT_CMD_CHAR: u8,
    +            /// This register is used to configure the num of continuous at_cmd chars received
    +            /// by receiver.
    +            CHAR_NUM: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x5c);
    +
    +        /// address: 0x60010060
    +        /// UART threshold and allocation configuration
    +        pub const MEM_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            reserved0: u1,
    +            /// This register is used to configure the amount of mem allocated for receive-FIFO.
    +            /// The default number is 128 bytes.
    +            RX_SIZE: u3,
    +            /// This register is used to configure the amount of mem allocated for
    +            /// transmit-FIFO. The default number is 128 bytes.
    +            TX_SIZE: u3,
    +            /// This register is used to configure the maximum amount of data that can be
    +            /// received when hardware flow control works.
    +            RX_FLOW_THRHD: u9,
    +            /// This register is used to configure the threshold time that receiver takes to
    +            /// receive one byte. The rxfifo_tout_int interrupt will be trigger when the
    +            /// receiver takes more time to receive one byte with rx_tout_en set to 1.
    +            RX_TOUT_THRHD: u10,
    +            /// Set this bit to force power down UART memory.
    +            MEM_FORCE_PD: u1,
    +            /// Set this bit to force power up UART memory.
    +            MEM_FORCE_PU: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +        }), base_address + 0x60);
    +
    +        /// address: 0x60010064
    +        /// Tx-FIFO write and read offset address.
    +        pub const MEM_TX_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the offset address in Tx-FIFO when software writes Tx-FIFO
    +            /// via APB.
    +            APB_TX_WADDR: u10,
    +            reserved0: u1,
    +            /// This register stores the offset address in Tx-FIFO when Tx-FSM reads data via
    +            /// Tx-FIFO_Ctrl.
    +            TX_RADDR: u10,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +        }), base_address + 0x64);
    +
    +        /// address: 0x60010068
    +        /// Rx-FIFO write and read offset address.
    +        pub const MEM_RX_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the offset address in RX-FIFO when software reads data from
    +            /// Rx-FIFO via APB. UART0 is 10'h100. UART1 is 10'h180.
    +            APB_RX_RADDR: u10,
    +            reserved0: u1,
    +            /// This register stores the offset address in Rx-FIFO when Rx-FIFO_Ctrl writes
    +            /// Rx-FIFO. UART0 is 10'h100. UART1 is 10'h180.
    +            RX_WADDR: u10,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +        }), base_address + 0x68);
    +
    +        /// address: 0x6001006c
    +        /// UART transmit and receive status.
    +        pub const FSM_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This is the status register of receiver.
    +            ST_URX_OUT: u4,
    +            /// This is the status register of transmitter.
    +            ST_UTX_OUT: u4,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x6c);
    +
    +        /// address: 0x60010070
    +        /// Autobaud high pulse register
    +        pub const POSPULSE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the minimal input clock count between two positive edges.
    +            /// It is used in boudrate-detect process.
    +            POSEDGE_MIN_CNT: u12,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0x70);
    +
    +        /// address: 0x60010074
    +        /// Autobaud low pulse register
    +        pub const NEGPULSE = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register stores the minimal input clock count between two negative edges.
    +            /// It is used in boudrate-detect process.
    +            NEGEDGE_MIN_CNT: u12,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0x74);
    +
    +        /// address: 0x60010078
    +        /// UART core clock configuration
    +        pub const CLK_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The denominator of the frequency divider factor.
    +            SCLK_DIV_B: u6,
    +            /// The numerator of the frequency divider factor.
    +            SCLK_DIV_A: u6,
    +            /// The integral part of the frequency divider factor.
    +            SCLK_DIV_NUM: u8,
    +            /// UART clock source select. 1: 80Mhz, 2: 8Mhz, 3: XTAL.
    +            SCLK_SEL: u2,
    +            /// Set this bit to enable UART Tx/Rx clock.
    +            SCLK_EN: u1,
    +            /// Write 1 then write 0 to this bit, reset UART Tx/Rx.
    +            RST_CORE: u1,
    +            /// Set this bit to enable UART Tx clock.
    +            TX_SCLK_EN: u1,
    +            /// Set this bit to enable UART Rx clock.
    +            RX_SCLK_EN: u1,
    +            /// Write 1 then write 0 to this bit, reset UART Tx.
    +            TX_RST_CORE: u1,
    +            /// Write 1 then write 0 to this bit, reset UART Rx.
    +            RX_RST_CORE: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +        }), base_address + 0x78);
    +
    +        /// address: 0x6001007c
    +        /// UART Version register
    +        pub const DATE = @intToPtr(*volatile u32, base_address + 0x7c);
    +
    +        /// address: 0x60010080
    +        /// UART ID register
    +        pub const ID = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// This register is used to configure the uart_id.
    +            ID: u30,
    +            /// This bit used to select synchronize mode. 1: Registers are auto synchronized
    +            /// into UART Core clock and UART core should be keep the same with APB clock. 0:
    +            /// After configure registers, software needs to write 1 to UART_REG_UPDATE to
    +            /// synchronize registers.
    +            HIGH_SPEED: u1,
    +            /// Software write 1 would synchronize registers into UART Core clock domain and
    +            /// would be cleared by hardware after synchronization is done.
    +            REG_UPDATE: u1,
    +        }), base_address + 0x80);
    +    };
    +
    +    /// Universal Host Controller Interface
    +    pub const UHCI0 = struct {
    +        pub const base_address = 0x60014000;
    +
    +        /// address: 0x60014000
    +        /// a
    +        pub const CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Write 1, then write 0 to this bit to reset decode state machine.
    +            TX_RST: u1,
    +            /// Write 1, then write 0 to this bit to reset encode state machine.
    +            RX_RST: u1,
    +            /// Set this bit to link up HCI and UART0.
    +            UART0_CE: u1,
    +            /// Set this bit to link up HCI and UART1.
    +            UART1_CE: u1,
    +            reserved0: u1,
    +            /// Set this bit to separate the data frame using a special char.
    +            SEPER_EN: u1,
    +            /// Set this bit to encode the data packet with a formatting header.
    +            HEAD_EN: u1,
    +            /// Set this bit to enable UHCI to receive the 16 bit CRC.
    +            CRC_REC_EN: u1,
    +            /// If this bit is set to 1, UHCI will end the payload receiving process when UART
    +            /// has been in idle state.
    +            UART_IDLE_EOF_EN: u1,
    +            /// If this bit is set to 1, UHCI decoder receiving payload data is end when the
    +            /// receiving byte count has reached the specified value. The value is payload
    +            /// length indicated by UHCI packet header when UHCI_HEAD_EN is 1 or the value is
    +            /// configuration value when UHCI_HEAD_EN is 0. If this bit is set to 0, UHCI
    +            /// decoder receiving payload data is end when 0xc0 is received.
    +            LEN_EOF_EN: u1,
    +            /// Set this bit to enable data integrity checking by appending a 16 bit CCITT-CRC
    +            /// to end of the payload.
    +            ENCODE_CRC_EN: u1,
    +            /// 1'b1: Force clock on for register. 1'b0: Support clock only when application
    +            /// writes registers.
    +            CLK_EN: u1,
    +            /// If this bit is set to 1, UHCI will end payload receive process when NULL frame
    +            /// is received by UART.
    +            UART_RX_BRK_EOF_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +        }), base_address + 0x0);
    +
    +        /// address: 0x60014004
    +        /// a
    +        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            RX_START_INT_RAW: u1,
    +            /// a
    +            TX_START_INT_RAW: u1,
    +            /// a
    +            RX_HUNG_INT_RAW: u1,
    +            /// a
    +            TX_HUNG_INT_RAW: u1,
    +            /// a
    +            SEND_S_REG_Q_INT_RAW: u1,
    +            /// a
    +            SEND_A_REG_Q_INT_RAW: u1,
    +            /// This is the interrupt raw bit. Triggered when there are some errors in EOF in
    +            /// the
    +            OUT_EOF_INT_RAW: u1,
    +            /// Soft control int raw bit.
    +            APP_CTRL0_INT_RAW: u1,
    +            /// Soft control int raw bit.
    +            APP_CTRL1_INT_RAW: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +        }), base_address + 0x4);
    +
    +        /// address: 0x60014008
    +        /// a
    +        pub const INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            RX_START_INT_ST: u1,
    +            /// a
    +            TX_START_INT_ST: u1,
    +            /// a
    +            RX_HUNG_INT_ST: u1,
    +            /// a
    +            TX_HUNG_INT_ST: u1,
    +            /// a
    +            SEND_S_REG_Q_INT_ST: u1,
    +            /// a
    +            SEND_A_REG_Q_INT_ST: u1,
    +            /// a
    +            OUTLINK_EOF_ERR_INT_ST: u1,
    +            /// a
    +            APP_CTRL0_INT_ST: u1,
    +            /// a
    +            APP_CTRL1_INT_ST: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +        }), base_address + 0x8);
    +
    +        /// address: 0x6001400c
    +        /// a
    +        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            RX_START_INT_ENA: u1,
    +            /// a
    +            TX_START_INT_ENA: u1,
    +            /// a
    +            RX_HUNG_INT_ENA: u1,
    +            /// a
    +            TX_HUNG_INT_ENA: u1,
    +            /// a
    +            SEND_S_REG_Q_INT_ENA: u1,
    +            /// a
    +            SEND_A_REG_Q_INT_ENA: u1,
    +            /// a
    +            OUTLINK_EOF_ERR_INT_ENA: u1,
    +            /// a
    +            APP_CTRL0_INT_ENA: u1,
    +            /// a
    +            APP_CTRL1_INT_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +        }), base_address + 0xc);
    +
    +        /// address: 0x60014010
    +        /// a
    +        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            RX_START_INT_CLR: u1,
    +            /// a
    +            TX_START_INT_CLR: u1,
    +            /// a
    +            RX_HUNG_INT_CLR: u1,
    +            /// a
    +            TX_HUNG_INT_CLR: u1,
    +            /// a
    +            SEND_S_REG_Q_INT_CLR: u1,
    +            /// a
    +            SEND_A_REG_Q_INT_CLR: u1,
    +            /// a
    +            OUTLINK_EOF_ERR_INT_CLR: u1,
    +            /// a
    +            APP_CTRL0_INT_CLR: u1,
    +            /// a
    +            APP_CTRL1_INT_CLR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +        }), base_address + 0x10);
    +
    +        /// address: 0x60014014
    +        /// a
    +        pub const CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            CHECK_SUM_EN: u1,
    +            /// a
    +            CHECK_SEQ_EN: u1,
    +            /// a
    +            CRC_DISABLE: u1,
    +            /// a
    +            SAVE_HEAD: u1,
    +            /// a
    +            TX_CHECK_SUM_RE: u1,
    +            /// a
    +            TX_ACK_NUM_RE: u1,
    +            reserved0: u1,
    +            /// a
    +            WAIT_SW_START: u1,
    +            /// a
    +            SW_START: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +        }), base_address + 0x14);
    +
    +        /// address: 0x60014018
    +        /// a
    +        pub const STATE0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            RX_ERR_CAUSE: u3,
    +            /// a
    +            DECODE_STATE: u3,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +        }), base_address + 0x18);
    +
    +        /// address: 0x6001401c
    +        /// a
    +        pub const STATE1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            ENCODE_STATE: u3,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +        }), base_address + 0x1c);
    +
    +        /// address: 0x60014020
    +        /// a
    +        pub const ESCAPE_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            TX_C0_ESC_EN: u1,
    +            /// a
    +            TX_DB_ESC_EN: u1,
    +            /// a
    +            TX_11_ESC_EN: u1,
    +            /// a
    +            TX_13_ESC_EN: u1,
    +            /// a
    +            RX_C0_ESC_EN: u1,
    +            /// a
    +            RX_DB_ESC_EN: u1,
    +            /// a
    +            RX_11_ESC_EN: u1,
    +            /// a
    +            RX_13_ESC_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x20);
    +
    +        /// address: 0x60014024
    +        /// a
    +        pub const HUNG_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            TXFIFO_TIMEOUT: u8,
    +            /// a
    +            TXFIFO_TIMEOUT_SHIFT: u3,
    +            /// a
    +            TXFIFO_TIMEOUT_ENA: u1,
    +            /// a
    +            RXFIFO_TIMEOUT: u8,
    +            /// a
    +            RXFIFO_TIMEOUT_SHIFT: u3,
    +            /// a
    +            RXFIFO_TIMEOUT_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +        }), base_address + 0x24);
    +
    +        /// address: 0x60014028
    +        /// a
    +        pub const ACK_NUM = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            ACK_NUM: u3,
    +            /// a
    +            LOAD: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x28);
    +
    +        /// address: 0x6001402c
    +        /// a
    +        pub const RX_HEAD = @intToPtr(*volatile u32, base_address + 0x2c);
    +
    +        /// address: 0x60014030
    +        /// a
    +        pub const QUICK_SENT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SINGLE_SEND_NUM: u3,
    +            /// a
    +            SINGLE_SEND_EN: u1,
    +            /// a
    +            ALWAYS_SEND_NUM: u3,
    +            /// a
    +            ALWAYS_SEND_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x30);
    +
    +        /// address: 0x60014034
    +        /// a
    +        pub const REG_Q0_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q0_WORD0: u32,
    +        }), base_address + 0x34);
    +
    +        /// address: 0x60014038
    +        /// a
    +        pub const REG_Q0_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q0_WORD1: u32,
    +        }), base_address + 0x38);
    +
    +        /// address: 0x6001403c
    +        /// a
    +        pub const REG_Q1_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q1_WORD0: u32,
    +        }), base_address + 0x3c);
    +
    +        /// address: 0x60014040
    +        /// a
    +        pub const REG_Q1_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q1_WORD1: u32,
    +        }), base_address + 0x40);
    +
    +        /// address: 0x60014044
    +        /// a
    +        pub const REG_Q2_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q2_WORD0: u32,
    +        }), base_address + 0x44);
    +
    +        /// address: 0x60014048
    +        /// a
    +        pub const REG_Q2_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q2_WORD1: u32,
    +        }), base_address + 0x48);
    +
    +        /// address: 0x6001404c
    +        /// a
    +        pub const REG_Q3_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q3_WORD0: u32,
    +        }), base_address + 0x4c);
    +
    +        /// address: 0x60014050
    +        /// a
    +        pub const REG_Q3_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q3_WORD1: u32,
    +        }), base_address + 0x50);
    +
    +        /// address: 0x60014054
    +        /// a
    +        pub const REG_Q4_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q4_WORD0: u32,
    +        }), base_address + 0x54);
    +
    +        /// address: 0x60014058
    +        /// a
    +        pub const REG_Q4_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q4_WORD1: u32,
    +        }), base_address + 0x58);
    +
    +        /// address: 0x6001405c
    +        /// a
    +        pub const REG_Q5_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q5_WORD0: u32,
    +        }), base_address + 0x5c);
    +
    +        /// address: 0x60014060
    +        /// a
    +        pub const REG_Q5_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q5_WORD1: u32,
    +        }), base_address + 0x60);
    +
    +        /// address: 0x60014064
    +        /// a
    +        pub const REG_Q6_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q6_WORD0: u32,
    +        }), base_address + 0x64);
    +
    +        /// address: 0x60014068
    +        /// a
    +        pub const REG_Q6_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q6_WORD1: u32,
    +        }), base_address + 0x68);
    +
    +        /// address: 0x6001406c
    +        /// a
    +        pub const ESC_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEPER_CHAR: u8,
    +            /// a
    +            SEPER_ESC_CHAR0: u8,
    +            /// a
    +            SEPER_ESC_CHAR1: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +        }), base_address + 0x6c);
    +
    +        /// address: 0x60014070
    +        /// a
    +        pub const ESC_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            ESC_SEQ0: u8,
    +            /// a
    +            ESC_SEQ0_CHAR0: u8,
    +            /// a
    +            ESC_SEQ0_CHAR1: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +        }), base_address + 0x70);
    +
    +        /// address: 0x60014074
    +        /// a
    +        pub const ESC_CONF2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            ESC_SEQ1: u8,
    +            /// a
    +            ESC_SEQ1_CHAR0: u8,
    +            /// a
    +            ESC_SEQ1_CHAR1: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +        }), base_address + 0x74);
    +
    +        /// address: 0x60014078
    +        /// a
    +        pub const ESC_CONF3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            ESC_SEQ2: u8,
    +            /// a
    +            ESC_SEQ2_CHAR0: u8,
    +            /// a
    +            ESC_SEQ2_CHAR1: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +        }), base_address + 0x78);
    +
    +        /// address: 0x6001407c
    +        /// a
    +        pub const PKT_THRES = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            PKT_THRS: u13,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +        }), base_address + 0x7c);
    +
    +        /// address: 0x60014080
    +        /// a
    +        pub const DATE = @intToPtr(*volatile u32, base_address + 0x80);
    +    };
    +
    +    /// Universal Host Controller Interface
    +    pub const UHCI1 = struct {
    +        pub const base_address = 0x6000c000;
    +
    +        /// address: 0x6000c000
    +        /// a
    +        pub const CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Write 1, then write 0 to this bit to reset decode state machine.
    +            TX_RST: u1,
    +            /// Write 1, then write 0 to this bit to reset encode state machine.
    +            RX_RST: u1,
    +            /// Set this bit to link up HCI and UART0.
    +            UART0_CE: u1,
    +            /// Set this bit to link up HCI and UART1.
    +            UART1_CE: u1,
    +            reserved0: u1,
    +            /// Set this bit to separate the data frame using a special char.
    +            SEPER_EN: u1,
    +            /// Set this bit to encode the data packet with a formatting header.
    +            HEAD_EN: u1,
    +            /// Set this bit to enable UHCI to receive the 16 bit CRC.
    +            CRC_REC_EN: u1,
    +            /// If this bit is set to 1, UHCI will end the payload receiving process when UART
    +            /// has been in idle state.
    +            UART_IDLE_EOF_EN: u1,
    +            /// If this bit is set to 1, UHCI decoder receiving payload data is end when the
    +            /// receiving byte count has reached the specified value. The value is payload
    +            /// length indicated by UHCI packet header when UHCI_HEAD_EN is 1 or the value is
    +            /// configuration value when UHCI_HEAD_EN is 0. If this bit is set to 0, UHCI
    +            /// decoder receiving payload data is end when 0xc0 is received.
    +            LEN_EOF_EN: u1,
    +            /// Set this bit to enable data integrity checking by appending a 16 bit CCITT-CRC
    +            /// to end of the payload.
    +            ENCODE_CRC_EN: u1,
    +            /// 1'b1: Force clock on for register. 1'b0: Support clock only when application
    +            /// writes registers.
    +            CLK_EN: u1,
    +            /// If this bit is set to 1, UHCI will end payload receive process when NULL frame
    +            /// is received by UART.
    +            UART_RX_BRK_EOF_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +        }), base_address + 0x0);
    +
    +        /// address: 0x6000c004
    +        /// a
    +        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            RX_START_INT_RAW: u1,
    +            /// a
    +            TX_START_INT_RAW: u1,
    +            /// a
    +            RX_HUNG_INT_RAW: u1,
    +            /// a
    +            TX_HUNG_INT_RAW: u1,
    +            /// a
    +            SEND_S_REG_Q_INT_RAW: u1,
    +            /// a
    +            SEND_A_REG_Q_INT_RAW: u1,
    +            /// This is the interrupt raw bit. Triggered when there are some errors in EOF in
    +            /// the
    +            OUT_EOF_INT_RAW: u1,
    +            /// Soft control int raw bit.
    +            APP_CTRL0_INT_RAW: u1,
    +            /// Soft control int raw bit.
    +            APP_CTRL1_INT_RAW: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +        }), base_address + 0x4);
    +
    +        /// address: 0x6000c008
    +        /// a
    +        pub const INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            RX_START_INT_ST: u1,
    +            /// a
    +            TX_START_INT_ST: u1,
    +            /// a
    +            RX_HUNG_INT_ST: u1,
    +            /// a
    +            TX_HUNG_INT_ST: u1,
    +            /// a
    +            SEND_S_REG_Q_INT_ST: u1,
    +            /// a
    +            SEND_A_REG_Q_INT_ST: u1,
    +            /// a
    +            OUTLINK_EOF_ERR_INT_ST: u1,
    +            /// a
    +            APP_CTRL0_INT_ST: u1,
    +            /// a
    +            APP_CTRL1_INT_ST: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +        }), base_address + 0x8);
    +
    +        /// address: 0x6000c00c
    +        /// a
    +        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            RX_START_INT_ENA: u1,
    +            /// a
    +            TX_START_INT_ENA: u1,
    +            /// a
    +            RX_HUNG_INT_ENA: u1,
    +            /// a
    +            TX_HUNG_INT_ENA: u1,
    +            /// a
    +            SEND_S_REG_Q_INT_ENA: u1,
    +            /// a
    +            SEND_A_REG_Q_INT_ENA: u1,
    +            /// a
    +            OUTLINK_EOF_ERR_INT_ENA: u1,
    +            /// a
    +            APP_CTRL0_INT_ENA: u1,
    +            /// a
    +            APP_CTRL1_INT_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +        }), base_address + 0xc);
    +
    +        /// address: 0x6000c010
    +        /// a
    +        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            RX_START_INT_CLR: u1,
    +            /// a
    +            TX_START_INT_CLR: u1,
    +            /// a
    +            RX_HUNG_INT_CLR: u1,
    +            /// a
    +            TX_HUNG_INT_CLR: u1,
    +            /// a
    +            SEND_S_REG_Q_INT_CLR: u1,
    +            /// a
    +            SEND_A_REG_Q_INT_CLR: u1,
    +            /// a
    +            OUTLINK_EOF_ERR_INT_CLR: u1,
    +            /// a
    +            APP_CTRL0_INT_CLR: u1,
    +            /// a
    +            APP_CTRL1_INT_CLR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +        }), base_address + 0x10);
    +
    +        /// address: 0x6000c014
    +        /// a
    +        pub const CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            CHECK_SUM_EN: u1,
    +            /// a
    +            CHECK_SEQ_EN: u1,
    +            /// a
    +            CRC_DISABLE: u1,
    +            /// a
    +            SAVE_HEAD: u1,
    +            /// a
    +            TX_CHECK_SUM_RE: u1,
    +            /// a
    +            TX_ACK_NUM_RE: u1,
    +            reserved0: u1,
    +            /// a
    +            WAIT_SW_START: u1,
    +            /// a
    +            SW_START: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +        }), base_address + 0x14);
    +
    +        /// address: 0x6000c018
    +        /// a
    +        pub const STATE0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            RX_ERR_CAUSE: u3,
    +            /// a
    +            DECODE_STATE: u3,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +        }), base_address + 0x18);
    +
    +        /// address: 0x6000c01c
    +        /// a
    +        pub const STATE1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            ENCODE_STATE: u3,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +        }), base_address + 0x1c);
    +
    +        /// address: 0x6000c020
    +        /// a
    +        pub const ESCAPE_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            TX_C0_ESC_EN: u1,
    +            /// a
    +            TX_DB_ESC_EN: u1,
    +            /// a
    +            TX_11_ESC_EN: u1,
    +            /// a
    +            TX_13_ESC_EN: u1,
    +            /// a
    +            RX_C0_ESC_EN: u1,
    +            /// a
    +            RX_DB_ESC_EN: u1,
    +            /// a
    +            RX_11_ESC_EN: u1,
    +            /// a
    +            RX_13_ESC_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x20);
    +
    +        /// address: 0x6000c024
    +        /// a
    +        pub const HUNG_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            TXFIFO_TIMEOUT: u8,
    +            /// a
    +            TXFIFO_TIMEOUT_SHIFT: u3,
    +            /// a
    +            TXFIFO_TIMEOUT_ENA: u1,
    +            /// a
    +            RXFIFO_TIMEOUT: u8,
    +            /// a
    +            RXFIFO_TIMEOUT_SHIFT: u3,
    +            /// a
    +            RXFIFO_TIMEOUT_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +        }), base_address + 0x24);
    +
    +        /// address: 0x6000c028
    +        /// a
    +        pub const ACK_NUM = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            ACK_NUM: u3,
    +            /// a
    +            LOAD: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x28);
    +
    +        /// address: 0x6000c02c
    +        /// a
    +        pub const RX_HEAD = @intToPtr(*volatile u32, base_address + 0x2c);
    +
    +        /// address: 0x6000c030
    +        /// a
    +        pub const QUICK_SENT = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SINGLE_SEND_NUM: u3,
    +            /// a
    +            SINGLE_SEND_EN: u1,
    +            /// a
    +            ALWAYS_SEND_NUM: u3,
    +            /// a
    +            ALWAYS_SEND_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x30);
    +
    +        /// address: 0x6000c034
    +        /// a
    +        pub const REG_Q0_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q0_WORD0: u32,
    +        }), base_address + 0x34);
    +
    +        /// address: 0x6000c038
    +        /// a
    +        pub const REG_Q0_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q0_WORD1: u32,
    +        }), base_address + 0x38);
    +
    +        /// address: 0x6000c03c
    +        /// a
    +        pub const REG_Q1_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q1_WORD0: u32,
    +        }), base_address + 0x3c);
    +
    +        /// address: 0x6000c040
    +        /// a
    +        pub const REG_Q1_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q1_WORD1: u32,
    +        }), base_address + 0x40);
    +
    +        /// address: 0x6000c044
    +        /// a
    +        pub const REG_Q2_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q2_WORD0: u32,
    +        }), base_address + 0x44);
    +
    +        /// address: 0x6000c048
    +        /// a
    +        pub const REG_Q2_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q2_WORD1: u32,
    +        }), base_address + 0x48);
    +
    +        /// address: 0x6000c04c
    +        /// a
    +        pub const REG_Q3_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q3_WORD0: u32,
    +        }), base_address + 0x4c);
    +
    +        /// address: 0x6000c050
    +        /// a
    +        pub const REG_Q3_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q3_WORD1: u32,
    +        }), base_address + 0x50);
    +
    +        /// address: 0x6000c054
    +        /// a
    +        pub const REG_Q4_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q4_WORD0: u32,
    +        }), base_address + 0x54);
    +
    +        /// address: 0x6000c058
    +        /// a
    +        pub const REG_Q4_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q4_WORD1: u32,
    +        }), base_address + 0x58);
    +
    +        /// address: 0x6000c05c
    +        /// a
    +        pub const REG_Q5_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q5_WORD0: u32,
    +        }), base_address + 0x5c);
    +
    +        /// address: 0x6000c060
    +        /// a
    +        pub const REG_Q5_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q5_WORD1: u32,
    +        }), base_address + 0x60);
    +
    +        /// address: 0x6000c064
    +        /// a
    +        pub const REG_Q6_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q6_WORD0: u32,
    +        }), base_address + 0x64);
    +
    +        /// address: 0x6000c068
    +        /// a
    +        pub const REG_Q6_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEND_Q6_WORD1: u32,
    +        }), base_address + 0x68);
    +
    +        /// address: 0x6000c06c
    +        /// a
    +        pub const ESC_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            SEPER_CHAR: u8,
    +            /// a
    +            SEPER_ESC_CHAR0: u8,
    +            /// a
    +            SEPER_ESC_CHAR1: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +        }), base_address + 0x6c);
    +
    +        /// address: 0x6000c070
    +        /// a
    +        pub const ESC_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            ESC_SEQ0: u8,
    +            /// a
    +            ESC_SEQ0_CHAR0: u8,
    +            /// a
    +            ESC_SEQ0_CHAR1: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +        }), base_address + 0x70);
    +
    +        /// address: 0x6000c074
    +        /// a
    +        pub const ESC_CONF2 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            ESC_SEQ1: u8,
    +            /// a
    +            ESC_SEQ1_CHAR0: u8,
    +            /// a
    +            ESC_SEQ1_CHAR1: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +        }), base_address + 0x74);
    +
    +        /// address: 0x6000c078
    +        /// a
    +        pub const ESC_CONF3 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            ESC_SEQ2: u8,
    +            /// a
    +            ESC_SEQ2_CHAR0: u8,
    +            /// a
    +            ESC_SEQ2_CHAR1: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +        }), base_address + 0x78);
    +
    +        /// address: 0x6000c07c
    +        /// a
    +        pub const PKT_THRES = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// a
    +            PKT_THRS: u13,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +        }), base_address + 0x7c);
    +
    +        /// address: 0x6000c080
    +        /// a
    +        pub const DATE = @intToPtr(*volatile u32, base_address + 0x80);
    +    };
    +
    +    /// Full-speed USB Serial/JTAG Controller
    +    pub const USB_DEVICE = struct {
    +        pub const base_address = 0x60043000;
    +
    +        /// address: 0x60043000
    +        /// USB_DEVICE_EP1_REG.
    +        pub const EP1 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Write and read byte data to/from UART Tx/Rx FIFO through this field. When
    +            /// USB_DEVICE_SERIAL_IN_EMPTY_INT is set, then user can write data (up to 64 bytes)
    +            /// into UART Tx FIFO. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is set, user can
    +            /// check USB_DEVICE_OUT_EP1_WR_ADDR USB_DEVICE_OUT_EP0_RD_ADDR to know how many
    +            /// data is received, then read data from UART Rx FIFO.
    +            RDWR_BYTE: u8,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +        }), base_address + 0x0);
    +
    +        /// address: 0x60043004
    +        /// USB_DEVICE_EP1_CONF_REG.
    +        pub const EP1_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Set this bit to indicate writing byte data to UART Tx FIFO is done.
    +            WR_DONE: u1,
    +            /// 1'b1: Indicate UART Tx FIFO is not full and can write data into in. After
    +            /// writing USB_DEVICE_WR_DONE, this bit would be 0 until data in UART Tx FIFO is
    +            /// read by USB Host.
    +            SERIAL_IN_EP_DATA_FREE: u1,
    +            /// 1'b1: Indicate there is data in UART Rx FIFO.
    +            SERIAL_OUT_EP_DATA_AVAIL: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +        }), base_address + 0x4);
    +
    +        /// address: 0x60043008
    +        /// USB_DEVICE_INT_RAW_REG.
    +        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The raw interrupt bit turns to high level when flush cmd is received for IN
    +            /// endpoint 2 of JTAG.
    +            JTAG_IN_FLUSH_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when SOF frame is received.
    +            SOF_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when Serial Port OUT Endpoint received
    +            /// one packet.
    +            SERIAL_OUT_RECV_PKT_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when Serial Port IN Endpoint is empty.
    +            SERIAL_IN_EMPTY_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when pid error is detected.
    +            PID_ERR_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when CRC5 error is detected.
    +            CRC5_ERR_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when CRC16 error is detected.
    +            CRC16_ERR_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when stuff error is detected.
    +            STUFF_ERR_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when IN token for IN endpoint 1 is
    +            /// received.
    +            IN_TOKEN_REC_IN_EP1_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when usb bus reset is detected.
    +            USB_BUS_RESET_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when OUT endpoint 1 received packet
    +            /// with zero palyload.
    +            OUT_EP1_ZERO_PAYLOAD_INT_RAW: u1,
    +            /// The raw interrupt bit turns to high level when OUT endpoint 2 received packet
    +            /// with zero palyload.
    +            OUT_EP2_ZERO_PAYLOAD_INT_RAW: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0x8);
    +
    +        /// address: 0x6004300c
    +        /// USB_DEVICE_INT_ST_REG.
    +        pub const INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The raw interrupt status bit for the USB_DEVICE_JTAG_IN_FLUSH_INT interrupt.
    +            JTAG_IN_FLUSH_INT_ST: u1,
    +            /// The raw interrupt status bit for the USB_DEVICE_SOF_INT interrupt.
    +            SOF_INT_ST: u1,
    +            /// The raw interrupt status bit for the USB_DEVICE_SERIAL_OUT_RECV_PKT_INT
    +            /// interrupt.
    +            SERIAL_OUT_RECV_PKT_INT_ST: u1,
    +            /// The raw interrupt status bit for the USB_DEVICE_SERIAL_IN_EMPTY_INT interrupt.
    +            SERIAL_IN_EMPTY_INT_ST: u1,
    +            /// The raw interrupt status bit for the USB_DEVICE_PID_ERR_INT interrupt.
    +            PID_ERR_INT_ST: u1,
    +            /// The raw interrupt status bit for the USB_DEVICE_CRC5_ERR_INT interrupt.
    +            CRC5_ERR_INT_ST: u1,
    +            /// The raw interrupt status bit for the USB_DEVICE_CRC16_ERR_INT interrupt.
    +            CRC16_ERR_INT_ST: u1,
    +            /// The raw interrupt status bit for the USB_DEVICE_STUFF_ERR_INT interrupt.
    +            STUFF_ERR_INT_ST: u1,
    +            /// The raw interrupt status bit for the USB_DEVICE_IN_TOKEN_REC_IN_EP1_INT
    +            /// interrupt.
    +            IN_TOKEN_REC_IN_EP1_INT_ST: u1,
    +            /// The raw interrupt status bit for the USB_DEVICE_USB_BUS_RESET_INT interrupt.
    +            USB_BUS_RESET_INT_ST: u1,
    +            /// The raw interrupt status bit for the USB_DEVICE_OUT_EP1_ZERO_PAYLOAD_INT
    +            /// interrupt.
    +            OUT_EP1_ZERO_PAYLOAD_INT_ST: u1,
    +            /// The raw interrupt status bit for the USB_DEVICE_OUT_EP2_ZERO_PAYLOAD_INT
    +            /// interrupt.
    +            OUT_EP2_ZERO_PAYLOAD_INT_ST: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0xc);
    +
    +        /// address: 0x60043010
    +        /// USB_DEVICE_INT_ENA_REG.
    +        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// The interrupt enable bit for the USB_DEVICE_JTAG_IN_FLUSH_INT interrupt.
    +            JTAG_IN_FLUSH_INT_ENA: u1,
    +            /// The interrupt enable bit for the USB_DEVICE_SOF_INT interrupt.
    +            SOF_INT_ENA: u1,
    +            /// The interrupt enable bit for the USB_DEVICE_SERIAL_OUT_RECV_PKT_INT interrupt.
    +            SERIAL_OUT_RECV_PKT_INT_ENA: u1,
    +            /// The interrupt enable bit for the USB_DEVICE_SERIAL_IN_EMPTY_INT interrupt.
    +            SERIAL_IN_EMPTY_INT_ENA: u1,
    +            /// The interrupt enable bit for the USB_DEVICE_PID_ERR_INT interrupt.
    +            PID_ERR_INT_ENA: u1,
    +            /// The interrupt enable bit for the USB_DEVICE_CRC5_ERR_INT interrupt.
    +            CRC5_ERR_INT_ENA: u1,
    +            /// The interrupt enable bit for the USB_DEVICE_CRC16_ERR_INT interrupt.
    +            CRC16_ERR_INT_ENA: u1,
    +            /// The interrupt enable bit for the USB_DEVICE_STUFF_ERR_INT interrupt.
    +            STUFF_ERR_INT_ENA: u1,
    +            /// The interrupt enable bit for the USB_DEVICE_IN_TOKEN_REC_IN_EP1_INT interrupt.
    +            IN_TOKEN_REC_IN_EP1_INT_ENA: u1,
    +            /// The interrupt enable bit for the USB_DEVICE_USB_BUS_RESET_INT interrupt.
    +            USB_BUS_RESET_INT_ENA: u1,
    +            /// The interrupt enable bit for the USB_DEVICE_OUT_EP1_ZERO_PAYLOAD_INT interrupt.
    +            OUT_EP1_ZERO_PAYLOAD_INT_ENA: u1,
    +            /// The interrupt enable bit for the USB_DEVICE_OUT_EP2_ZERO_PAYLOAD_INT interrupt.
    +            OUT_EP2_ZERO_PAYLOAD_INT_ENA: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0x10);
    +
    +        /// address: 0x60043014
    +        /// USB_DEVICE_INT_CLR_REG.
    +        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Set this bit to clear the USB_DEVICE_JTAG_IN_FLUSH_INT interrupt.
    +            JTAG_IN_FLUSH_INT_CLR: u1,
    +            /// Set this bit to clear the USB_DEVICE_JTAG_SOF_INT interrupt.
    +            SOF_INT_CLR: u1,
    +            /// Set this bit to clear the USB_DEVICE_SERIAL_OUT_RECV_PKT_INT interrupt.
    +            SERIAL_OUT_RECV_PKT_INT_CLR: u1,
    +            /// Set this bit to clear the USB_DEVICE_SERIAL_IN_EMPTY_INT interrupt.
    +            SERIAL_IN_EMPTY_INT_CLR: u1,
    +            /// Set this bit to clear the USB_DEVICE_PID_ERR_INT interrupt.
    +            PID_ERR_INT_CLR: u1,
    +            /// Set this bit to clear the USB_DEVICE_CRC5_ERR_INT interrupt.
    +            CRC5_ERR_INT_CLR: u1,
    +            /// Set this bit to clear the USB_DEVICE_CRC16_ERR_INT interrupt.
    +            CRC16_ERR_INT_CLR: u1,
    +            /// Set this bit to clear the USB_DEVICE_STUFF_ERR_INT interrupt.
    +            STUFF_ERR_INT_CLR: u1,
    +            /// Set this bit to clear the USB_DEVICE_IN_TOKEN_IN_EP1_INT interrupt.
    +            IN_TOKEN_REC_IN_EP1_INT_CLR: u1,
    +            /// Set this bit to clear the USB_DEVICE_USB_BUS_RESET_INT interrupt.
    +            USB_BUS_RESET_INT_CLR: u1,
    +            /// Set this bit to clear the USB_DEVICE_OUT_EP1_ZERO_PAYLOAD_INT interrupt.
    +            OUT_EP1_ZERO_PAYLOAD_INT_CLR: u1,
    +            /// Set this bit to clear the USB_DEVICE_OUT_EP2_ZERO_PAYLOAD_INT interrupt.
    +            OUT_EP2_ZERO_PAYLOAD_INT_CLR: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +        }), base_address + 0x14);
    +
    +        /// address: 0x60043018
    +        /// USB_DEVICE_CONF0_REG.
    +        pub const CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Select internal/external PHY
    +            PHY_SEL: u1,
    +            /// Enable software control USB D+ D- exchange
    +            EXCHG_PINS_OVERRIDE: u1,
    +            /// USB D+ D- exchange
    +            EXCHG_PINS: u1,
    +            /// Control single-end input high threshold,1.76V to 2V, step 80mV
    +            VREFH: u2,
    +            /// Control single-end input low threshold,0.8V to 1.04V, step 80mV
    +            VREFL: u2,
    +            /// Enable software control input threshold
    +            VREF_OVERRIDE: u1,
    +            /// Enable software control USB D+ D- pullup pulldown
    +            PAD_PULL_OVERRIDE: u1,
    +            /// Control USB D+ pull up.
    +            DP_PULLUP: u1,
    +            /// Control USB D+ pull down.
    +            DP_PULLDOWN: u1,
    +            /// Control USB D- pull up.
    +            DM_PULLUP: u1,
    +            /// Control USB D- pull down.
    +            DM_PULLDOWN: u1,
    +            /// Control pull up value.
    +            PULLUP_VALUE: u1,
    +            /// Enable USB pad function.
    +            USB_PAD_ENABLE: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +        }), base_address + 0x18);
    +
    +        /// address: 0x6004301c
    +        /// USB_DEVICE_TEST_REG.
    +        pub const TEST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Enable test of the USB pad
    +            ENABLE: u1,
    +            /// USB pad oen in test
    +            USB_OE: u1,
    +            /// USB D+ tx value in test
    +            TX_DP: u1,
    +            /// USB D- tx value in test
    +            TX_DM: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +        }), base_address + 0x1c);
    +
    +        /// address: 0x60043020
    +        /// USB_DEVICE_JFIFO_ST_REG.
    +        pub const JFIFO_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// JTAT in fifo counter.
    +            IN_FIFO_CNT: u2,
    +            /// 1: JTAG in fifo is empty.
    +            IN_FIFO_EMPTY: u1,
    +            /// 1: JTAG in fifo is full.
    +            IN_FIFO_FULL: u1,
    +            /// JTAT out fifo counter.
    +            OUT_FIFO_CNT: u2,
    +            /// 1: JTAG out fifo is empty.
    +            OUT_FIFO_EMPTY: u1,
    +            /// 1: JTAG out fifo is full.
    +            OUT_FIFO_FULL: u1,
    +            /// Write 1 to reset JTAG in fifo.
    +            IN_FIFO_RESET: u1,
    +            /// Write 1 to reset JTAG out fifo.
    +            OUT_FIFO_RESET: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +        }), base_address + 0x20);
    +
    +        /// address: 0x60043024
    +        /// USB_DEVICE_FRAM_NUM_REG.
    +        pub const FRAM_NUM = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// Frame index of received SOF frame.
    +            SOF_FRAME_INDEX: u11,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +        }), base_address + 0x24);
    +
    +        /// address: 0x60043028
    +        /// USB_DEVICE_IN_EP0_ST_REG.
    +        pub const IN_EP0_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// State of IN Endpoint 0.
    +            IN_EP0_STATE: u2,
    +            /// Write data address of IN endpoint 0.
    +            IN_EP0_WR_ADDR: u7,
    +            /// Read data address of IN endpoint 0.
    +            IN_EP0_RD_ADDR: u7,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x28);
    +
    +        /// address: 0x6004302c
    +        /// USB_DEVICE_IN_EP1_ST_REG.
    +        pub const IN_EP1_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// State of IN Endpoint 1.
    +            IN_EP1_STATE: u2,
    +            /// Write data address of IN endpoint 1.
    +            IN_EP1_WR_ADDR: u7,
    +            /// Read data address of IN endpoint 1.
    +            IN_EP1_RD_ADDR: u7,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x2c);
    +
    +        /// address: 0x60043030
    +        /// USB_DEVICE_IN_EP2_ST_REG.
    +        pub const IN_EP2_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// State of IN Endpoint 2.
    +            IN_EP2_STATE: u2,
    +            /// Write data address of IN endpoint 2.
    +            IN_EP2_WR_ADDR: u7,
    +            /// Read data address of IN endpoint 2.
    +            IN_EP2_RD_ADDR: u7,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x30);
    +
    +        /// address: 0x60043034
    +        /// USB_DEVICE_IN_EP3_ST_REG.
    +        pub const IN_EP3_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// State of IN Endpoint 3.
    +            IN_EP3_STATE: u2,
    +            /// Write data address of IN endpoint 3.
    +            IN_EP3_WR_ADDR: u7,
    +            /// Read data address of IN endpoint 3.
    +            IN_EP3_RD_ADDR: u7,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x34);
    +
    +        /// address: 0x60043038
    +        /// USB_DEVICE_OUT_EP0_ST_REG.
    +        pub const OUT_EP0_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// State of OUT Endpoint 0.
    +            OUT_EP0_STATE: u2,
    +            /// Write data address of OUT endpoint 0. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is
    +            /// detected, there are USB_DEVICE_OUT_EP0_WR_ADDR-2 bytes data in OUT EP0.
    +            OUT_EP0_WR_ADDR: u7,
    +            /// Read data address of OUT endpoint 0.
    +            OUT_EP0_RD_ADDR: u7,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x38);
    +
    +        /// address: 0x6004303c
    +        /// USB_DEVICE_OUT_EP1_ST_REG.
    +        pub const OUT_EP1_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// State of OUT Endpoint 1.
    +            OUT_EP1_STATE: u2,
    +            /// Write data address of OUT endpoint 1. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is
    +            /// detected, there are USB_DEVICE_OUT_EP1_WR_ADDR-2 bytes data in OUT EP1.
    +            OUT_EP1_WR_ADDR: u7,
    +            /// Read data address of OUT endpoint 1.
    +            OUT_EP1_RD_ADDR: u7,
    +            /// Data count in OUT endpoint 1 when one packet is received.
    +            OUT_EP1_REC_DATA_CNT: u7,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +        }), base_address + 0x3c);
    +
    +        /// address: 0x60043040
    +        /// USB_DEVICE_OUT_EP2_ST_REG.
    +        pub const OUT_EP2_ST = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// State of OUT Endpoint 2.
    +            OUT_EP2_STATE: u2,
    +            /// Write data address of OUT endpoint 2. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is
    +            /// detected, there are USB_DEVICE_OUT_EP2_WR_ADDR-2 bytes data in OUT EP2.
    +            OUT_EP2_WR_ADDR: u7,
    +            /// Read data address of OUT endpoint 2.
    +            OUT_EP2_RD_ADDR: u7,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +        }), base_address + 0x40);
    +
    +        /// address: 0x60043044
    +        /// USB_DEVICE_MISC_CONF_REG.
    +        pub const MISC_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// 1'h1: Force clock on for register. 1'h0: Support clock only when application
    +            /// writes registers.
    +            CLK_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +            padding30: u1,
    +        }), base_address + 0x44);
    +
    +        /// address: 0x60043048
    +        /// USB_DEVICE_MEM_CONF_REG.
    +        pub const MEM_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    +            /// 1: power down usb memory.
    +            USB_MEM_PD: u1,
    +            /// 1: Force clock on for usb memory.
    +            USB_MEM_CLK_EN: u1,
    +            padding0: u1,
    +            padding1: u1,
    +            padding2: u1,
    +            padding3: u1,
    +            padding4: u1,
    +            padding5: u1,
    +            padding6: u1,
    +            padding7: u1,
    +            padding8: u1,
    +            padding9: u1,
    +            padding10: u1,
    +            padding11: u1,
    +            padding12: u1,
    +            padding13: u1,
    +            padding14: u1,
    +            padding15: u1,
    +            padding16: u1,
    +            padding17: u1,
    +            padding18: u1,
    +            padding19: u1,
    +            padding20: u1,
    +            padding21: u1,
    +            padding22: u1,
    +            padding23: u1,
    +            padding24: u1,
    +            padding25: u1,
    +            padding26: u1,
    +            padding27: u1,
    +            padding28: u1,
    +            padding29: u1,
    +        }), base_address + 0x48);
    +
    +        /// address: 0x60043080
    +        /// USB_DEVICE_DATE_REG.
    +        pub const DATE = @intToPtr(*volatile u32, base_address + 0x80);
    +    };
    +
    +    /// XTS-AES-128 Flash Encryption
    +    pub const XTS_AES = struct {
    +        pub const base_address = 0x600cc000;
    +
    +        /// address: 0x600cc000
    +        /// The memory that stores plaintext
    +        pub const PLAIN_MEM = @intToPtr(*volatile [16]u8, base_address + 0x0);
    +
    +        /// address: 0x600cc040
    +        /// XTS-AES line-size register
    +        pub const LINESIZE = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x40);
    +
    +        /// address: 0x600cc044
    +        /// XTS-AES destination register
    +        pub const DESTINATION = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x44);
    +
    +        /// address: 0x600cc048
    +        /// XTS-AES physical address register
    +        pub const PHYSICAL_ADDRESS = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x48);
    +
    +        /// address: 0x600cc04c
    +        /// XTS-AES trigger register
    +        pub const TRIGGER = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x4c);
    +
    +        /// address: 0x600cc050
    +        /// XTS-AES release register
    +        pub const RELEASE = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x50);
    +
    +        /// address: 0x600cc054
    +        /// XTS-AES destroy register
    +        pub const DESTROY = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x54);
    +
    +        /// address: 0x600cc058
    +        /// XTS-AES status register
    +        pub const STATE = @intToPtr(*volatile MmioInt(32, u2), base_address + 0x58);
    +
    +        /// address: 0x600cc05c
    +        /// XTS-AES version control register
    +        pub const DATE = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x5c);
    +    };
    +};
    +
    +const std = @import("std");
    +
    +pub fn mmio(addr: usize, comptime size: u8, comptime PackedT: type) *volatile Mmio(size, PackedT) {
    +    return @intToPtr(*volatile Mmio(size, PackedT), addr);
    +}
    +
    +pub fn Mmio(comptime size: u8, comptime PackedT: type) type {
    +    if ((size % 8) != 0)
    +        @compileError("size must be divisible by 8!");
    +
    +    if (!std.math.isPowerOfTwo(size / 8))
    +        @compileError("size must encode a power of two number of bytes!");
    +
    +    const IntT = std.meta.Int(.unsigned, size);
    +
    +    if (@sizeOf(PackedT) != (size / 8))
    +        @compileError(std.fmt.comptimePrint("IntT and PackedT must have the same size!, they are {} and {} bytes respectively", .{ size / 8, @sizeOf(PackedT) }));
    +
    +    return extern struct {
    +        const Self = @This();
    +
    +        raw: IntT,
    +
    +        pub const underlying_type = PackedT;
    +
    +        pub inline fn read(addr: *volatile Self) PackedT {
    +            return @bitCast(PackedT, addr.raw);
    +        }
    +
    +        pub inline fn write(addr: *volatile Self, val: PackedT) void {
    +            // This is a workaround for a compiler bug related to miscompilation
    +            // If the tmp var is not used, result location will fuck things up
    +            var tmp = @bitCast(IntT, val);
    +            addr.raw = tmp;
    +        }
    +
    +        pub inline fn modify(addr: *volatile Self, fields: anytype) void {
    +            var val = read(addr);
    +            inline for (@typeInfo(@TypeOf(fields)).Struct.fields) |field| {
    +                @field(val, field.name) = @field(fields, field.name);
    +            }
    +            write(addr, val);
    +        }
    +
    +        pub inline fn toggle(addr: *volatile Self, fields: anytype) void {
    +            var val = read(addr);
    +            inline for (@typeInfo(@TypeOf(fields)).Struct.fields) |field| {
    +                @field(val, @tagName(field.default_value.?)) = !@field(val, @tagName(field.default_value.?));
    +            }
    +            write(addr, val);
    +        }
    +    };
    +}
    +
    +pub fn MmioInt(comptime size: u8, comptime T: type) type {
    +    return extern struct {
    +        const Self = @This();
    +
    +        raw: std.meta.Int(.unsigned, size),
    +
    +        pub inline fn read(addr: *volatile Self) T {
    +            return @truncate(T, addr.raw);
    +        }
    +
    +        pub inline fn modify(addr: *volatile Self, val: T) void {
    +            const Int = std.meta.Int(.unsigned, size);
    +            const mask = ~@as(Int, (1 << @bitSizeOf(T)) - 1);
    +
    +            var tmp = addr.raw;
    +            addr.raw = (tmp & mask) | val;
    +        }
    +    };
    +}
    +
    +pub fn mmioInt(addr: usize, comptime size: usize, comptime T: type) *volatile MmioInt(size, T) {
    +    return @intToPtr(*volatile MmioInt(size, T), addr);
    +}
    +
    +pub const InterruptVector = extern union {
    +    C: fn () callconv(.C) void,
    +    Naked: fn () callconv(.Naked) void,
    +    // Interrupt is not supported on arm
    +};
    +
    +const unhandled = InterruptVector{
    +    .C = struct {
    +        fn tmp() callconv(.C) noreturn {
    +            @panic("unhandled interrupt");
    +        }
    +    }.tmp,
    +};
    
    From 144d557357314f25dd479e28ef1e16f157f0bb50 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sat, 8 Oct 2022 11:41:01 +0200
    Subject: [PATCH 031/286] remove hal.uart.panic
    
    ---
     src/hal/uart.zig | 13 -------------
     1 file changed, 13 deletions(-)
    
    diff --git a/src/hal/uart.zig b/src/hal/uart.zig
    index 6616452cd..d1ca4193d 100644
    --- a/src/hal/uart.zig
    +++ b/src/hal/uart.zig
    @@ -249,16 +249,3 @@ pub fn log(
             uart.print(prefix ++ format ++ "\r\n", .{ seconds, microseconds } ++ args) catch {};
         }
     }
    -
    -pub fn panic(
    -    message: []const u8,
    -    _: ?*std.builtin.StackTrace,
    -    _: ?usize,
    -) noreturn {
    -    if (uart_logger) |writer| {
    -        writer.print("PANIC: {s}\r\n", .{message}) catch {};
    -    }
    -
    -    @breakpoint();
    -    while (true) {}
    -}
    
    From e7e70cb96c5aaae4044ea903df1ac278f7d30f14 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Sat, 8 Oct 2022 13:02:39 +0200
    Subject: [PATCH 032/286] LED 1 is RED. Reset loop tho
    
    ---
     build.zig                       | 59 +++++++++++++++++++--------------
     src/example/blinky.zig          | 29 ++++++++++++++++
     src/main.zig                    | 24 --------------
     src/package/esp32-c3.zig        | 45 +++++++++++++++++++++++++
     src/package/espressif-riscv.zig | 12 +++++++
     vendor/microzig                 |  2 +-
     6 files changed, 122 insertions(+), 49 deletions(-)
     create mode 100644 src/example/blinky.zig
     delete mode 100644 src/main.zig
     create mode 100644 src/package/esp32-c3.zig
     create mode 100644 src/package/espressif-riscv.zig
    
    diff --git a/build.zig b/build.zig
    index 035b12a74..3f49cf7dd 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -1,34 +1,45 @@
     const std = @import("std");
    +const microzig = @import("zpm.zig").sdks.microzig;
     
     pub fn build(b: *std.build.Builder) void {
    -    // Standard target options allows the person running `zig build` to choose
    -    // what target to build for. Here we do not override the defaults, which
    -    // means any target is allowed, and the default is native. Other options
    -    // for restricting supported target set are available.
    -    const target = b.standardTargetOptions(.{});
    -
    -    // Standard release options allow the person running `zig build` to select
    -    // between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall.
         const mode = b.standardReleaseOptions();
     
    -    const exe = b.addExecutable("esp32-c3-bringup", "src/main.zig");
    -    exe.setTarget(target);
    -    exe.setBuildMode(mode);
    -    exe.install();
    +    const esp32_c3_cpu = microzig.Cpu{
    +        .name = "Espressif RISC-V",
    +        .path = "src/package/espressif-riscv.zig",
    +        .target = std.zig.CrossTarget{
    +            .cpu_arch = .riscv32,
    +            .cpu_model = .{ .explicit = &std.Target.riscv.cpu.generic_rv32 },
    +            .cpu_features_add = std.Target.riscv.featureSet(&.{
    +                std.Target.riscv.Feature.c,
    +                std.Target.riscv.Feature.m,
    +            }),
    +            .os_tag = .freestanding,
    +            .abi = .eabi,
    +        },
    +    };
     
    -    const run_cmd = exe.run();
    -    run_cmd.step.dependOn(b.getInstallStep());
    -    if (b.args) |args| {
    -        run_cmd.addArgs(args);
    -    }
    +    const esp32_c3 = microzig.Chip{
    +        .name = "ESP32 C3",
    +        .path = "src/package/esp32-c3.zig",
    +        .cpu = esp32_c3_cpu,
    +        .memory_regions = &.{
    +            .{ .kind = .flash, .offset = 0x4200_0000, .length = 0x0080_0000 }, // external memory, ibus
    +            .{ .kind = .ram, .offset = 0x3FC8_0000, .length = 0x0006_0000 }, // sram 1, data bus
    +        },
    +    };
     
    -    const run_step = b.step("run", "Run the app");
    -    run_step.dependOn(&run_cmd.step);
    +    var exe = microzig.addEmbeddedExecutable(
    +        b,
    +        "esp-bringup",
    +        "src/example/blinky.zig",
    +        .{ .chip = esp32_c3 },
    +        .{},
    +    );
    +    exe.setBuildMode(mode);
    +    exe.install();
     
    -    const exe_tests = b.addTest("src/main.zig");
    -    exe_tests.setTarget(target);
    -    exe_tests.setBuildMode(mode);
    +    const raw_step = exe.installRaw("firmware.bin", .{});
     
    -    const test_step = b.step("test", "Run unit tests");
    -    test_step.dependOn(&exe_tests.step);
    +    b.getInstallStep().dependOn(&raw_step.step);
     }
    diff --git a/src/example/blinky.zig b/src/example/blinky.zig
    new file mode 100644
    index 000000000..6bba15b0b
    --- /dev/null
    +++ b/src/example/blinky.zig
    @@ -0,0 +1,29 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +
    +pub fn main() !void {
    +    // const led_r_mux = @ptrToInt(*volatile u32, IO_MUX_BASE + IO_MUX_GPIOn_REG(LED_R_PIN));
    +    // const led_g_mux = @ptrToInt(*volatile u32, IO_MUX_BASE + IO_MUX_GPIOn_REG(LED_G_PIN));
    +    // const led_b_mux = @ptrToInt(*volatile u32, IO_MUX_BASE + IO_MUX_GPIOn_REG(LED_B_PIN));
    +
    +    // led_r_mux.* = 0x80;
    +
    +    const gpio_out = @intToPtr(*volatile u32, GPIO_BASE + GPIO_OUT_REG);
    +    const gpio_ena = @intToPtr(*volatile u32, GPIO_BASE + GPIO_ENABLE_REG);
    +    gpio_ena.* = (1 << LED_R_PIN) | (1 << LED_G_PIN) | (1 << LED_B_PIN);
    +    gpio_out.* = (1 << LED_R_PIN) | (1 << LED_G_PIN) | (1 << LED_B_PIN);
    +}
    +
    +const GPIO_BASE = 0x6000_4000;
    +const IO_MUX_BASE = 0x6000_9000;
    +
    +const GPIO_OUT_REG = 0x0004;
    +const GPIO_ENABLE_REG = 0x0020;
    +
    +fn GPIO_FUNCn_OUT_SEL_CFG_REG(comptime n: comptime_int) comptime_int {
    +    return 0x0554 + 4 * n;
    +}
    +
    +const LED_R_PIN = 3;
    +const LED_G_PIN = 4;
    +const LED_B_PIN = 5;
    diff --git a/src/main.zig b/src/main.zig
    deleted file mode 100644
    index c8a3f67dd..000000000
    --- a/src/main.zig
    +++ /dev/null
    @@ -1,24 +0,0 @@
    -const std = @import("std");
    -
    -pub fn main() !void {
    -    // Prints to stderr (it's a shortcut based on `std.io.getStdErr()`)
    -    std.debug.print("All your {s} are belong to us.\n", .{"codebase"});
    -
    -    // stdout is for the actual output of your application, for example if you
    -    // are implementing gzip, then only the compressed bytes should be sent to
    -    // stdout, not any debugging messages.
    -    const stdout_file = std.io.getStdOut().writer();
    -    var bw = std.io.bufferedWriter(stdout_file);
    -    const stdout = bw.writer();
    -
    -    try stdout.print("Run `zig build test` to run the tests.\n", .{});
    -
    -    try bw.flush(); // don't forget to flush!
    -}
    -
    -test "simple test" {
    -    var list = std.ArrayList(i32).init(std.testing.allocator);
    -    defer list.deinit(); // try commenting this out and see if zig detects the memory leak!
    -    try list.append(42);
    -    try std.testing.expectEqual(@as(i32, 42), list.pop());
    -}
    diff --git a/src/package/esp32-c3.zig b/src/package/esp32-c3.zig
    new file mode 100644
    index 000000000..0a0f4fef2
    --- /dev/null
    +++ b/src/package/esp32-c3.zig
    @@ -0,0 +1,45 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +
    +pub const startup_logic = struct {
    +    comptime {
    +        // See this:
    +        // https://github.com/espressif/esp32c3-direct-boot-example
    +
    +        // Direct Boot: does not support Security Boot and programs run directly in flash. To enable this mode, make
    +        // sure that the first two words of the bin file downloading to flash (address: 0x42000000) are 0xaedb041d.
    +
    +        // In this case, the ROM bootloader sets up Flash MMU to map 4 MB of Flash to
    +        // addresses 0x42000000 (for code execution) and 0x3C000000 (for read-only data
    +        // access). The bootloader then jumps to address 0x42000008, i.e. to the
    +        // instruction at offset 8 in flash, immediately after the magic numbers.
    +
    +        asm (std.fmt.comptimePrint(".equ MICROZIG_INITIAL_STACK, {}", .{microzig.config.end_of_stack}));
    +
    +        asm (
    +            \\.extern _start
    +            \\.section microzig_flash_start
    +            \\.align 4
    +            \\.byte 0x1d, 0x04, 0xdb, 0xae
    +            \\.byte 0x1d, 0x04, 0xdb, 0xae
    +        );
    +    }
    +
    +    extern fn microzig_main() noreturn;
    +
    +    export fn _start() linksection("microzig_flash_start") callconv(.C) noreturn {
    +        asm volatile (
    +            \\li sp, MICROZIG_INITIAL_STACK
    +            \\lui  a0, %%hi(_rv32_trap)
    +            \\addi a0, a0, %%lo(_rv32_trap)
    +            \\sw t0, 0x305(zero)
    +        );
    +
    +        microzig.initializeSystemMemories();
    +        microzig_main();
    +    }
    +
    +    export fn _rv32_trap() callconv(.C) noreturn {
    +        while (true) {}
    +    }
    +};
    diff --git a/src/package/espressif-riscv.zig b/src/package/espressif-riscv.zig
    new file mode 100644
    index 000000000..34dbffd30
    --- /dev/null
    +++ b/src/package/espressif-riscv.zig
    @@ -0,0 +1,12 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +
    +pub inline fn cli() void {
    +    asm volatile ("");
    +}
    +
    +pub inline fn sei() void {
    +    asm volatile ("");
    +}
    +
    +pub const startup_logic = microzig.chip.startup_logic;
    diff --git a/vendor/microzig b/vendor/microzig
    index 15bc1fc06..0d9721d90 160000
    --- a/vendor/microzig
    +++ b/vendor/microzig
    @@ -1 +1 @@
    -Subproject commit 15bc1fc06da3b6c622a21fa438e40be247d9dee1
    +Subproject commit 0d9721d9070c356f4ffaf6f4a312bccdb574b8a9
    
    From 33984fa9605172a8b8e55711738d2e1b4be97247 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sat, 8 Oct 2022 13:13:43 +0200
    Subject: [PATCH 033/286] one readme
    
    ---
     README.md | 1 -
     1 file changed, 1 deletion(-)
     delete mode 100644 README.md
    
    diff --git a/README.md b/README.md
    deleted file mode 100644
    index 2cd0dfa3e..000000000
    --- a/README.md
    +++ /dev/null
    @@ -1 +0,0 @@
    -# esp32-c3-bringup
    
    From e84264e64ba5fc8cf5e01a5035c8e64e2fe2270a Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Sat, 8 Oct 2022 16:19:20 +0200
    Subject: [PATCH 034/286] Blinky! \o/
    
    ---
     build.zig                                  |  2 +-
     perform-flash.sh                           | 13 +++++
     src/example/blinky.zig                     | 59 +++++++++++++++-------
     src/hal/root.zig                           | 54 ++++++++++++++++++++
     src/package/esp32-c3.zig                   | 42 +++++++++++----
     src/package/espressif-riscv.zig            | 31 +++++++++++-
     src/{esp32c3.zig => package/registers.zig} |  0
     7 files changed, 171 insertions(+), 30 deletions(-)
     create mode 100755 perform-flash.sh
     create mode 100644 src/hal/root.zig
     rename src/{esp32c3.zig => package/registers.zig} (100%)
    
    diff --git a/build.zig b/build.zig
    index 3f49cf7dd..c0d71db84 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -34,7 +34,7 @@ pub fn build(b: *std.build.Builder) void {
             "esp-bringup",
             "src/example/blinky.zig",
             .{ .chip = esp32_c3 },
    -        .{},
    +        .{ .hal_package_path = .{ .path = "src/hal/root.zig" } },
         );
         exe.setBuildMode(mode);
         exe.install();
    diff --git a/perform-flash.sh b/perform-flash.sh
    new file mode 100755
    index 000000000..ce1f5de72
    --- /dev/null
    +++ b/perform-flash.sh
    @@ -0,0 +1,13 @@
    +#!/bin/bash
    +
    +set -e
    +
    +clear
    +zig build -Drelease-small
    +llvm-objdump -S ./zig-out/bin/esp-bringup > /tmp/dump.txt
    +esptool.py \
    +  --port /dev/ttyUSB0 \
    +  --baud 115200 \
    +  write_flash 0x00000000 zig-out/bin/firmware.bin \
    +  --verify
    +picocom --baud 115200 /dev/ttyUSB0
    \ No newline at end of file
    diff --git a/src/example/blinky.zig b/src/example/blinky.zig
    index 6bba15b0b..0518c5334 100644
    --- a/src/example/blinky.zig
    +++ b/src/example/blinky.zig
    @@ -1,29 +1,52 @@
     const std = @import("std");
     const microzig = @import("microzig");
     
    +const dogfood: u32 = 0x50D83AA1;
    +const super_dogfood: u32 = 0x8F1D312A;
    +
     pub fn main() !void {
    -    // const led_r_mux = @ptrToInt(*volatile u32, IO_MUX_BASE + IO_MUX_GPIOn_REG(LED_R_PIN));
    -    // const led_g_mux = @ptrToInt(*volatile u32, IO_MUX_BASE + IO_MUX_GPIOn_REG(LED_G_PIN));
    -    // const led_b_mux = @ptrToInt(*volatile u32, IO_MUX_BASE + IO_MUX_GPIOn_REG(LED_B_PIN));
    +    microzig.chip.registers.TIMG0.WDTWPROTECT.raw = dogfood;
    +    microzig.chip.registers.TIMG0.WDTCONFIG0.raw = 0;
    +    microzig.chip.registers.TIMG0.WDTWPROTECT.raw = 0;
     
    -    // led_r_mux.* = 0x80;
    +    microzig.chip.registers.RTC_CNTL.WDTWPROTECT.raw = dogfood;
    +    microzig.chip.registers.RTC_CNTL.WDTCONFIG0.raw = 0;
    +    microzig.chip.registers.RTC_CNTL.WDTWPROTECT.raw = 0;
     
    -    const gpio_out = @intToPtr(*volatile u32, GPIO_BASE + GPIO_OUT_REG);
    -    const gpio_ena = @intToPtr(*volatile u32, GPIO_BASE + GPIO_ENABLE_REG);
    -    gpio_ena.* = (1 << LED_R_PIN) | (1 << LED_G_PIN) | (1 << LED_B_PIN);
    -    gpio_out.* = (1 << LED_R_PIN) | (1 << LED_G_PIN) | (1 << LED_B_PIN);
    -}
    +    microzig.chip.registers.RTC_CNTL.SWD_WPROTECT.raw = super_dogfood;
    +    microzig.chip.registers.RTC_CNTL.SWD_CONF.modify(.{ .SWD_DISABLE = 1 });
    +    microzig.chip.registers.RTC_CNTL.SWD_WPROTECT.raw = 0;
    +
    +    microzig.chip.registers.INTERRUPT_CORE0.CPU_INT_ENABLE.* = 0;
     
    -const GPIO_BASE = 0x6000_4000;
    -const IO_MUX_BASE = 0x6000_9000;
    +    microzig.hal.gpio.init(LED_R_PIN, .{
    +        .direction = .output,
    +        .direct_io = true,
    +    });
    +    microzig.hal.gpio.init(LED_G_PIN, .{
    +        .direction = .output,
    +        .direct_io = true,
    +    });
    +    microzig.hal.gpio.init(LED_B_PIN, .{
    +        .direction = .output,
    +        .direct_io = true,
    +    });
     
    -const GPIO_OUT_REG = 0x0004;
    -const GPIO_ENABLE_REG = 0x0020;
    +    microzig.hal.uart.write(0, "Hello from Zig!\r\n");
     
    -fn GPIO_FUNCn_OUT_SEL_CFG_REG(comptime n: comptime_int) comptime_int {
    -    return 0x0554 + 4 * n;
    +    while (true) {
    +        microzig.chip.registers.GPIO.OUT.modify(.{ .DATA_ORIG = (1 << LED_R_PIN) });
    +        microzig.hal.uart.write(0, "R");
    +        microzig.debug.busySleep(1_000_000);
    +        microzig.chip.registers.GPIO.OUT.modify(.{ .DATA_ORIG = (1 << LED_G_PIN) });
    +        microzig.hal.uart.write(0, "G");
    +        microzig.debug.busySleep(1_000_000);
    +        microzig.chip.registers.GPIO.OUT.modify(.{ .DATA_ORIG = (1 << LED_B_PIN) });
    +        microzig.hal.uart.write(0, "B");
    +        microzig.debug.busySleep(1_000_000);
    +    }
     }
     
    -const LED_R_PIN = 3;
    -const LED_G_PIN = 4;
    -const LED_B_PIN = 5;
    +const LED_R_PIN = 3; // GPIO
    +const LED_G_PIN = 16; // GPIO
    +const LED_B_PIN = 17; // GPIO
    diff --git a/src/hal/root.zig b/src/hal/root.zig
    new file mode 100644
    index 000000000..d87dab85e
    --- /dev/null
    +++ b/src/hal/root.zig
    @@ -0,0 +1,54 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +const regz = microzig.chip.registers;
    +
    +pub const gpio = struct {
    +    fn getRegNamed(comptime fld: []const u8) @TypeOf(@field(regz.GPIO, fld)) {
    +        return @field(regz.GPIO, fld);
    +    }
    +
    +    fn getReg(comptime template: []const u8, comptime pin: comptime_int) @TypeOf(@field(regz.GPIO, std.fmt.comptimePrint(template, .{pin}))) {
    +        return getRegNamed(comptime std.fmt.comptimePrint(template, .{pin}));
    +    }
    +
    +    fn assertRange(comptime p: comptime_int) void {
    +        if (p < 0 or p >= 21)
    +            @compileError(std.fmt.comptimePrint("GPIO {} does not exist. GPIO pins can be between 0 and 21", .{p}));
    +    }
    +
    +    pub const Config = struct {
    +        function: u8 = 0x80,
    +        invert_function: bool = false,
    +        direction: microzig.gpio.Direction,
    +        direct_io: bool = false,
    +        invert_direct_io: bool = false,
    +    };
    +
    +    pub fn init(comptime pin: comptime_int, comptime config: Config) void {
    +        assertRange(pin);
    +        getReg("FUNC{}_OUT_SEL_CFG", pin).modify(.{
    +            .OUT_SEL = config.function,
    +            .INV_SEL = @boolToInt(config.invert_function),
    +            .OEN_SEL = @boolToInt(config.direct_io),
    +            .OEN_INV_SEL = @boolToInt(config.invert_direct_io),
    +        });
    +        switch (config.direction) {
    +            .input => microzig.chip.registers.GPIO.ENABLE.raw &= ~(@as(u32, 1) << pin),
    +            .output => microzig.chip.registers.GPIO.ENABLE.raw |= (@as(u32, 1) << pin),
    +        }
    +    }
    +};
    +
    +pub const uart = struct {
    +    fn reg(comptime index: comptime_int) @TypeOf(@field(regz, std.fmt.comptimePrint("UART{}", .{index}))) {
    +        return @field(regz, std.fmt.comptimePrint("UART{}", .{index}));
    +    }
    +
    +    pub fn write(comptime index: comptime_int, slice: []const u8) void {
    +        const r = reg(index);
    +        for (slice) |c| {
    +            while (r.STATUS.read().TXFIFO_CNT > 8) {}
    +            r.FIFO.raw = c;
    +        }
    +    }
    +};
    diff --git a/src/package/esp32-c3.zig b/src/package/esp32-c3.zig
    index 0a0f4fef2..0ab49440d 100644
    --- a/src/package/esp32-c3.zig
    +++ b/src/package/esp32-c3.zig
    @@ -1,6 +1,8 @@
     const std = @import("std");
     const microzig = @import("microzig");
     
    +pub const registers = @import("registers.zig").registers;
    +
     pub const startup_logic = struct {
         comptime {
             // See this:
    @@ -14,8 +16,6 @@ pub const startup_logic = struct {
             // access). The bootloader then jumps to address 0x42000008, i.e. to the
             // instruction at offset 8 in flash, immediately after the magic numbers.
     
    -        asm (std.fmt.comptimePrint(".equ MICROZIG_INITIAL_STACK, {}", .{microzig.config.end_of_stack}));
    -
             asm (
                 \\.extern _start
                 \\.section microzig_flash_start
    @@ -27,14 +27,14 @@ pub const startup_logic = struct {
     
         extern fn microzig_main() noreturn;
     
    -    export fn _start() linksection("microzig_flash_start") callconv(.C) noreturn {
    -        asm volatile (
    -            \\li sp, MICROZIG_INITIAL_STACK
    -            \\lui  a0, %%hi(_rv32_trap)
    -            \\addi a0, a0, %%lo(_rv32_trap)
    -            \\sw t0, 0x305(zero)
    +    export fn _start() linksection("microzig_flash_start") callconv(.Naked) noreturn {
    +        microzig.cpu.cli();
    +        asm volatile ("mv sp, %[eos]"
    +            :
    +            : [eos] "r" (@as(u32, microzig.config.end_of_stack)),
             );
    -
    +        asm volatile ("la gp, __global_pointer$");
    +        microzig.cpu.setStatusBit(.mtvec, microzig.config.end_of_stack);
             microzig.initializeSystemMemories();
             microzig_main();
         }
    @@ -42,4 +42,28 @@ pub const startup_logic = struct {
         export fn _rv32_trap() callconv(.C) noreturn {
             while (true) {}
         }
    +
    +    const vector_table = [_]fn () callconv(.C) noreturn{
    +        _rv32_trap,
    +        _rv32_trap,
    +        _rv32_trap,
    +        _rv32_trap,
    +        _rv32_trap,
    +        _rv32_trap,
    +        _rv32_trap,
    +        _rv32_trap,
    +        _rv32_trap,
    +        _rv32_trap,
    +        _rv32_trap,
    +        _rv32_trap,
    +        _rv32_trap,
    +        _rv32_trap,
    +        _rv32_trap,
    +        _rv32_trap,
    +        _rv32_trap,
    +        _rv32_trap,
    +        _rv32_trap,
    +        _rv32_trap,
    +        _rv32_trap,
    +    };
     };
    diff --git a/src/package/espressif-riscv.zig b/src/package/espressif-riscv.zig
    index 34dbffd30..06d7bc444 100644
    --- a/src/package/espressif-riscv.zig
    +++ b/src/package/espressif-riscv.zig
    @@ -1,12 +1,39 @@
     const std = @import("std");
     const microzig = @import("microzig");
     
    +pub const StatusRegister = enum(u8) {
    +    // machine information
    +    mvendorid,
    +    marchid,
    +    mimpid,
    +    mhartid,
    +
    +    // machine trap setup
    +    mstatus,
    +    misa,
    +    mtvec,
    +};
    +
    +pub inline fn setStatusBit(comptime reg: StatusRegister, bits: u32) void {
    +    asm volatile ("csrrs zero, " ++ @tagName(reg) ++ ", %[value]"
    +        :
    +        : [value] "r" (bits),
    +    );
    +}
    +
    +pub inline fn clearStatusBit(comptime reg: StatusRegister, bits: u32) void {
    +    asm volatile ("csrrc zero, " ++ @tagName(reg) ++ ", %[value]"
    +        :
    +        : [value] "r" (bits),
    +    );
    +}
    +
     pub inline fn cli() void {
    -    asm volatile ("");
    +    clearStatusBit(.mstatus, 0x08);
     }
     
     pub inline fn sei() void {
    -    asm volatile ("");
    +    setStatusBit(.mstatus, 0x08);
     }
     
     pub const startup_logic = microzig.chip.startup_logic;
    diff --git a/src/esp32c3.zig b/src/package/registers.zig
    similarity index 100%
    rename from src/esp32c3.zig
    rename to src/package/registers.zig
    
    From 72a5680af839c1bb8d84459690e28d4f50673300 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Thu, 22 Dec 2022 10:43:44 -0800
    Subject: [PATCH 035/286] Initial commit
    
    ---
     LICENSE   | 21 +++++++++++++++++++++
     README.md |  2 ++
     2 files changed, 23 insertions(+)
     create mode 100644 LICENSE
     create mode 100644 README.md
    
    diff --git a/LICENSE b/LICENSE
    new file mode 100644
    index 000000000..4818f98dd
    --- /dev/null
    +++ b/LICENSE
    @@ -0,0 +1,21 @@
    +MIT License
    +
    +Copyright (c) 2022 Zig Embedded Group
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in all
    +copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    +SOFTWARE.
    diff --git a/README.md b/README.md
    new file mode 100644
    index 000000000..c3bfa2788
    --- /dev/null
    +++ b/README.md
    @@ -0,0 +1,2 @@
    +# microzig-examples
    +Examples for embedded zig!
    
    From 0713809eaf2eab45b06166f9d33ad3d996601822 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sun, 1 Jan 2023 13:00:47 -0800
    Subject: [PATCH 036/286] catch up to master (#17)
    
    ---
     deps/microzig         |  2 +-
     src/hal/multicore.zig |  8 ++++----
     src/hal/pins.zig      | 14 +++++++-------
     src/rp2040.zig        |  4 ++--
     4 files changed, 14 insertions(+), 14 deletions(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 15bc1fc06..4f0d25220 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 15bc1fc06da3b6c622a21fa438e40be247d9dee1
    +Subproject commit 4f0d25220ec8f0501f8e0e9f6765689eb32faa5f
    diff --git a/src/hal/multicore.zig b/src/hal/multicore.zig
    index 76811cf2a..f1bcfe08c 100644
    --- a/src/hal/multicore.zig
    +++ b/src/hal/multicore.zig
    @@ -55,18 +55,18 @@ pub const fifo = struct {
     var core1_stack: [128]u32 = undefined;
     
     /// Runs `entrypoint` on the second core.
    -pub fn launchCore1(entrypoint: fn () void) void {
    +pub fn launchCore1(entrypoint: *const fn () void) void {
         launchCore1WithStack(entrypoint, &core1_stack);
     }
     
    -pub fn launchCore1WithStack(entrypoint: fn () void, stack: []u32) void {
    +pub fn launchCore1WithStack(entrypoint: *const fn () void, stack: []u32) void {
         // TODO: disable SIO interrupts
     
    -    const wrapper = struct {
    +    const wrapper = &struct {
             fn wrapper(_: u32, _: u32, _: u32, _: u32, entry: u32, stack_base: [*]u32) callconv(.C) void {
                 // TODO: protect stack using MPU
                 _ = stack_base;
    -            @intToPtr(fn () void, entry)();
    +            @intToPtr(*const fn () void, entry)();
             }
         }.wrapper;
     
    diff --git a/src/hal/pins.zig b/src/hal/pins.zig
    index 94f6caa5d..dce1c2418 100644
    --- a/src/hal/pins.zig
    +++ b/src/hal/pins.zig
    @@ -347,19 +347,19 @@ pub fn Pins(comptime config: GlobalConfiguration) type {
     
                         // initialized below:
                         .name = undefined,
    -                    .field_type = undefined,
    +                    .type = undefined,
                         .alignment = undefined,
                     };
     
                     if (pin_config.function == .SIO) {
                         pin_field.name = pin_config.name orelse field.name;
    -                    pin_field.field_type = GPIO(@enumToInt(@field(Pin, field.name)), pin_config.direction orelse .in);
    +                    pin_field.type = GPIO(@enumToInt(@field(Pin, field.name)), pin_config.direction orelse .in);
                     } else if (pin_config.function.isPwm()) {
                         pin_field.name = pin_config.name orelse @tagName(pin_config.function);
    -                    pin_field.field_type = pwm.PWM(pin_config.function.pwmSlice(), pin_config.function.pwmChannel());
    +                    pin_field.type = pwm.PWM(pin_config.function.pwmSlice(), pin_config.function.pwmChannel());
                     } else if (pin_config.function.isAdc()) {
                         pin_field.name = pin_config.name orelse @tagName(pin_config.function);
    -                    pin_field.field_type = adc.Input;
    +                    pin_field.type = adc.Input;
                         pin_field.default_value = @ptrCast(?*const anyopaque, switch (pin_config.function) {
                             .ADC0 => &adc.Input.ain0,
                             .ADC1 => &adc.Input.ain1,
    @@ -382,7 +382,7 @@ pub fn Pins(comptime config: GlobalConfiguration) type {
                     //     }
                     // }
     
    -                pin_field.alignment = @alignOf(field.field_type);
    +                pin_field.alignment = @alignOf(field.type);
     
                     fields = fields ++ &[_]StructField{pin_field};
                 }
    @@ -498,11 +498,11 @@ pub const GlobalConfiguration = struct {
                     } else if (comptime func.isPwm()) {
                         gpio.setFunction(gpio_num, .pwm);
                     } else if (comptime func.isAdc()) {
    -                    gpio.setFunction(gpio_num, .@"null");
    +                    gpio.setFunction(gpio_num, .null);
                     } else if (comptime func.isUartTx() or func.isUartRx()) {
                         gpio.setFunction(gpio_num, .uart);
                     } else {
    -                    @compileError(comptime std.fmt.comptimePrint("Unimplemented pin function. Please implement setting pin function {s} for GPIO {}", .{
    +                    @compileError(std.fmt.comptimePrint("Unimplemented pin function. Please implement setting pin function {s} for GPIO {}", .{
                             @tagName(func),
                             gpio_num,
                         }));
    diff --git a/src/rp2040.zig b/src/rp2040.zig
    index 6301bf235..d3c2e1868 100644
    --- a/src/rp2040.zig
    +++ b/src/rp2040.zig
    @@ -28780,8 +28780,8 @@ pub fn mmioInt(addr: usize, comptime size: usize, comptime T: type) *volatile Mm
     }
     
     pub const InterruptVector = extern union {
    -    C: fn () callconv(.C) void,
    -    Naked: fn () callconv(.Naked) void,
    +    C: *const fn () callconv(.C) void,
    +    Naked: *const fn () callconv(.Naked) void,
         // Interrupt is not supported on arm
     };
     
    
    From e3562492df5e3f564e5804eca073efe8aa68e88b Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 14 Feb 2023 21:00:04 +0200
    Subject: [PATCH 037/286] update to master (#19)
    
    ---
     build.zig     | 18 ++++++++++--------
     deps/microzig |  2 +-
     2 files changed, 11 insertions(+), 9 deletions(-)
    
    diff --git a/build.zig b/build.zig
    index d00c9621b..35bad24c9 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -10,13 +10,15 @@ const board_path = comptimePrint("{s}/src/raspberry_pi_pico.zig", .{root()});
     const hal_path = comptimePrint("{s}/src/hal.zig", .{root()});
     const linkerscript_path = comptimePrint("{s}/rp2040.ld", .{root()});
     
    -pub const BuildOptions = struct {};
    +pub const BuildOptions = struct {
    +    optimize: std.builtin.OptimizeMode,
    +};
     
     pub fn addPiPicoExecutable(
         builder: *Builder,
         name: []const u8,
         source: []const u8,
    -    _: BuildOptions,
    +    options: BuildOptions,
     ) microzig.EmbeddedExecutable {
         const rp2040 = microzig.Chip{
             .name = "RP2040",
    @@ -41,7 +43,8 @@ pub fn addPiPicoExecutable(
             source,
             .{ .board = raspberry_pi_pico },
             .{
    -            .hal_package_path = .{ .path = hal_path },
    +            .optimize = options.optimize,
    +            .hal_module_path = .{ .path = hal_path },
             },
         );
         ret.inner.setLinkerScriptPath(.{ .path = linkerscript_path });
    @@ -53,8 +56,8 @@ pub fn addPiPicoExecutable(
     // package. In an attempt to modularize -- designing for a case where a
     // project requires multiple HALs, it accepts microzig as a param
     pub fn build(b: *Builder) !void {
    -    const mode = b.standardReleaseOptions();
    -    var examples = Examples.init(b, mode);
    +    const optimize = b.standardOptimizeOption(.{});
    +    var examples = Examples.init(b, optimize);
         examples.install();
     }
     
    @@ -71,16 +74,15 @@ pub const Examples = struct {
         uart: microzig.EmbeddedExecutable,
         //uart_pins: microzig.EmbeddedExecutable,
     
    -    pub fn init(b: *Builder, mode: std.builtin.Mode) Examples {
    +    pub fn init(b: *Builder, optimize: std.builtin.OptimizeMode) Examples {
             var ret: Examples = undefined;
             inline for (@typeInfo(Examples).Struct.fields) |field| {
                 @field(ret, field.name) = addPiPicoExecutable(
                     b,
                     field.name,
                     comptime root() ++ "/examples/" ++ field.name ++ ".zig",
    -                .{},
    +                .{ .optimize = optimize },
                 );
    -            @field(ret, field.name).setBuildMode(mode);
             }
     
             return ret;
    diff --git a/deps/microzig b/deps/microzig
    index 4f0d25220..9ccde9ff3 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 4f0d25220ec8f0501f8e0e9f6765689eb32faa5f
    +Subproject commit 9ccde9ff371b355394f65eacb6b51c5880768505
    
    From d8e329d90b75800964f3681df2e41ee8d19f7a77 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sat, 18 Feb 2023 07:22:55 -0500
    Subject: [PATCH 038/286] restructure for regz rewrite
    
    ---
     .gitignore                |     2 +
     README.adoc               |     7 +
     build.zig                 |    20 +
     src/chips.zig             |    43 +
     src/chips/nrf52.json      | 34901 ++++++++++++++++++++++++++++
     src/chips/nrf52.zig       | 16821 ++++++++++++++
     src/chips/nrf52840.json   | 44867 ++++++++++++++++++++++++++++++++++++
     src/chips/nrf52840.zig    | 21782 +++++++++++++++++
     test/nrf52840.robot       |    10 +
     test/programs/minimal.zig |     5 +
     10 files changed, 118458 insertions(+)
     create mode 100644 .gitignore
     create mode 100644 README.adoc
     create mode 100644 build.zig
     create mode 100644 src/chips.zig
     create mode 100644 src/chips/nrf52.json
     create mode 100644 src/chips/nrf52.zig
     create mode 100644 src/chips/nrf52840.json
     create mode 100644 src/chips/nrf52840.zig
     create mode 100644 test/nrf52840.robot
     create mode 100644 test/programs/minimal.zig
    
    diff --git a/.gitignore b/.gitignore
    new file mode 100644
    index 000000000..c26d4af28
    --- /dev/null
    +++ b/.gitignore
    @@ -0,0 +1,2 @@
    +zig-out
    +zig-cache
    diff --git a/README.adoc b/README.adoc
    new file mode 100644
    index 000000000..0a66afd4e
    --- /dev/null
    +++ b/README.adoc
    @@ -0,0 +1,7 @@
    += Nordic nrf5x
    +
    +HALs and register definitions for nrf5x devices
    +
    +== Renode supports:
    +
    +- nrf52840 development kit
    diff --git a/build.zig b/build.zig
    new file mode 100644
    index 000000000..40398384d
    --- /dev/null
    +++ b/build.zig
    @@ -0,0 +1,20 @@
    +const std = @import("std");
    +const microzig = @import("deps/microzig/src/main.zig");
    +const chips = @import("src/chips.zig");
    +
    +pub fn build(b: *std.build.Builder) void {
    +    const optimize = b.standardOptimizeOption(.{});
    +    inline for (@typeInfo(chips).Struct.decls) |decl| {
    +        if (!decl.is_pub)
    +            continue;
    +
    +        const exe = microzig.addEmbeddedExecutable(
    +            b,
    +            decl.name ++ ".minimal",
    +            "test/programs/minimal.zig",
    +            .{ .chip = @field(chips, decl.name) },
    +            .{ .optimize = optimize },
    +        );
    +        exe.install();
    +    }
    +}
    diff --git a/src/chips.zig b/src/chips.zig
    new file mode 100644
    index 000000000..50b2aad62
    --- /dev/null
    +++ b/src/chips.zig
    @@ -0,0 +1,43 @@
    +const std = @import("std");
    +const micro = @import("../deps/microzig/src/main.zig");
    +const Chip = micro.Chip;
    +const MemoryRegion = micro.MemoryRegion;
    +
    +fn root_dir() []const u8 {
    +    return std.fs.path.dirname(@src().file) orelse unreachable;
    +}
    +
    +pub const nrf52840 = Chip{
    +    .name = "nrf52840",
    +    .source = .{
    +        .path = root_dir() ++ "/chips/nrf52840.zig",
    +    },
    +    .json_register_schema = .{
    +        .path = root_dir() ++ "/chips.nrf52840.json",
    +    },
    +    .cpu = micro.cpus.cortex_m4,
    +    .memory_regions = &.{
    +        MemoryRegion{ .offset = 0x00000000, .length = 0x100000, .kind = .flash },
    +        MemoryRegion{ .offset = 0x20000000, .length = 0x40000, .kind = .ram },
    +
    +        // EXTFLASH
    +        MemoryRegion{ .offset = 0x12000000, .length = 0x8000000, .kind = .flash },
    +        // CODE_RAM
    +        MemoryRegion{ .offset = 0x800000, .length = 0x40000, .kind = .ram },
    +    },
    +};
    +
    +pub const nrf52832 = Chip{
    +    .name = "nrf52",
    +    .source = .{
    +        .path = root_dir() ++ "/chips/nrf52.zig",
    +    },
    +    .json_register_schema = .{
    +        .path = root_dir() ++ "/chips.nrf52.json",
    +    },
    +    .cpu = micro.cpus.cortex_m4,
    +    .memory_regions = &.{
    +        MemoryRegion{ .offset = 0x00000000, .length = 0x80000, .kind = .flash },
    +        MemoryRegion{ .offset = 0x20000000, .length = 0x10000, .kind = .ram },
    +    },
    +};
    diff --git a/src/chips/nrf52.json b/src/chips/nrf52.json
    new file mode 100644
    index 000000000..8c71c649b
    --- /dev/null
    +++ b/src/chips/nrf52.json
    @@ -0,0 +1,34901 @@
    +{
    +  "version": "0.1.0",
    +  "types": {
    +    "peripherals": {
    +      "SCS": {
    +        "description": "System Control Space",
    +        "children": {
    +          "register_groups": {
    +            "SysTick": {
    +              "description": "System Tick Timer",
    +              "children": {
    +                "registers": {
    +                  "CTRL": {
    +                    "description": "SysTick Control and Status Register",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "ENABLE": {
    +                          "offset": 0,
    +                          "size": 1
    +                        },
    +                        "TICKINT": {
    +                          "offset": 1,
    +                          "size": 1
    +                        },
    +                        "CLKSOURCE": {
    +                          "offset": 2,
    +                          "size": 1
    +                        },
    +                        "COUNTFLAG": {
    +                          "offset": 16,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LOAD": {
    +                    "description": "SysTick Reload Value Register",
    +                    "offset": 4,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "RELOAD": {
    +                          "offset": 0,
    +                          "size": 24
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "VAL": {
    +                    "description": "SysTick Current Value Register",
    +                    "offset": 8,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "CURRENT": {
    +                          "offset": 0,
    +                          "size": 24
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CALIB": {
    +                    "description": "SysTick Calibration Register",
    +                    "offset": 12,
    +                    "size": 32,
    +                    "access": "read-only",
    +                    "children": {
    +                      "fields": {
    +                        "TENMS": {
    +                          "offset": 0,
    +                          "size": 24
    +                        },
    +                        "SKEW": {
    +                          "offset": 30,
    +                          "size": 1
    +                        },
    +                        "NOREF": {
    +                          "offset": 31,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "FICR": {
    +        "description": "Factory Information Configuration Registers",
    +        "children": {
    +          "registers": {
    +            "CODEPAGESIZE": {
    +              "description": "Code memory page size",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CODEPAGESIZE": {
    +                    "description": "Code memory page size",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CODESIZE": {
    +              "description": "Code memory size",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CODESIZE": {
    +                    "description": "Code memory size in number of pages",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DEVICEID": {
    +              "description": "Description collection[0]:  Device identifier",
    +              "offset": 96,
    +              "size": 32,
    +              "count": 2,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DEVICEID": {
    +                    "description": "64 bit unique device identifier",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ER": {
    +              "description": "Description collection[0]:  Encryption Root, word 0",
    +              "offset": 128,
    +              "size": 32,
    +              "count": 4,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ER": {
    +                    "description": "Encryption Root, word n",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IR": {
    +              "description": "Description collection[0]:  Identity Root, word 0",
    +              "offset": 144,
    +              "size": 32,
    +              "count": 4,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IR": {
    +                    "description": "Identity Root, word n",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DEVICEADDRTYPE": {
    +              "description": "Device address type",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DEVICEADDRTYPE": {
    +                    "description": "Device address type",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Public": {
    +                            "description": "Public address",
    +                            "value": 0
    +                          },
    +                          "Random": {
    +                            "description": "Random address",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "DEVICEADDR": {
    +              "description": "Description collection[0]:  Device address 0",
    +              "offset": 164,
    +              "size": 32,
    +              "count": 2,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DEVICEADDR": {
    +                    "description": "48 bit device address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "UICR": {
    +        "description": "User Information Configuration Registers",
    +        "children": {
    +          "registers": {
    +            "UNUSED0": {
    +              "description": "Unspecified",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "UNUSED1": {
    +              "description": "Unspecified",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "UNUSED2": {
    +              "description": "Unspecified",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "UNUSED3": {
    +              "description": "Unspecified",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "NRFFW": {
    +              "description": "Description collection[0]:  Reserved for Nordic firmware design",
    +              "offset": 20,
    +              "size": 32,
    +              "count": 15,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NRFFW": {
    +                    "description": "Reserved for Nordic firmware design",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "NRFHW": {
    +              "description": "Description collection[0]:  Reserved for Nordic hardware design",
    +              "offset": 80,
    +              "size": 32,
    +              "count": 12,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NRFHW": {
    +                    "description": "Reserved for Nordic hardware design",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CUSTOMER": {
    +              "description": "Description collection[0]:  Reserved for customer",
    +              "offset": 128,
    +              "size": 32,
    +              "count": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CUSTOMER": {
    +                    "description": "Reserved for customer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PSELRESET": {
    +              "description": "Description collection[0]:  Mapping of the nRESET function (see POWER chapter for details)",
    +              "offset": 512,
    +              "size": 32,
    +              "count": 2,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PIN": {
    +                    "description": "GPIO number P0.n onto which Reset is exposed",
    +                    "offset": 0,
    +                    "size": 6
    +                  },
    +                  "CONNECT": {
    +                    "description": "Connection",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disconnected": {
    +                            "description": "Disconnect",
    +                            "value": 1
    +                          },
    +                          "Connected": {
    +                            "description": "Connect",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "APPROTECT": {
    +              "description": "Access Port protection",
    +              "offset": 520,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PALL": {
    +                    "description": "Enable or disable Access Port protection. Any other value than 0xFF being written to this field will enable protection.",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "enum": {
    +                      "size": 8,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 255
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "NFCPINS": {
    +              "description": "Setting of pins dedicated to NFC functionality: NFC antenna or GPIO",
    +              "offset": 524,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PROTECT": {
    +                    "description": "Setting of pins dedicated to NFC functionality",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Operation as GPIO pins. Same protection as normal GPIO pins",
    +                            "value": 0
    +                          },
    +                          "NFC": {
    +                            "description": "Operation as NFC antenna pins. Configures the protection for NFC operation",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "BPROT": {
    +        "description": "Block Protect",
    +        "children": {
    +          "registers": {
    +            "CONFIG0": {
    +              "description": "Block protect configuration register 0",
    +              "offset": 1536,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION0": {
    +                    "description": "Enable protection for region 0. Write '0' has no effect.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION1": {
    +                    "description": "Enable protection for region 1. Write '0' has no effect.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION2": {
    +                    "description": "Enable protection for region 2. Write '0' has no effect.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION3": {
    +                    "description": "Enable protection for region 3. Write '0' has no effect.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION4": {
    +                    "description": "Enable protection for region 4. Write '0' has no effect.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION5": {
    +                    "description": "Enable protection for region 5. Write '0' has no effect.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION6": {
    +                    "description": "Enable protection for region 6. Write '0' has no effect.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION7": {
    +                    "description": "Enable protection for region 7. Write '0' has no effect.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION8": {
    +                    "description": "Enable protection for region 8. Write '0' has no effect.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION9": {
    +                    "description": "Enable protection for region 9. Write '0' has no effect.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION10": {
    +                    "description": "Enable protection for region 10. Write '0' has no effect.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION11": {
    +                    "description": "Enable protection for region 11. Write '0' has no effect.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION12": {
    +                    "description": "Enable protection for region 12. Write '0' has no effect.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION13": {
    +                    "description": "Enable protection for region 13. Write '0' has no effect.",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION14": {
    +                    "description": "Enable protection for region 14. Write '0' has no effect.",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION15": {
    +                    "description": "Enable protection for region 15. Write '0' has no effect.",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION16": {
    +                    "description": "Enable protection for region 16. Write '0' has no effect.",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION17": {
    +                    "description": "Enable protection for region 17. Write '0' has no effect.",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION18": {
    +                    "description": "Enable protection for region 18. Write '0' has no effect.",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION19": {
    +                    "description": "Enable protection for region 19. Write '0' has no effect.",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION20": {
    +                    "description": "Enable protection for region 20. Write '0' has no effect.",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION21": {
    +                    "description": "Enable protection for region 21. Write '0' has no effect.",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION22": {
    +                    "description": "Enable protection for region 22. Write '0' has no effect.",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION23": {
    +                    "description": "Enable protection for region 23. Write '0' has no effect.",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION24": {
    +                    "description": "Enable protection for region 24. Write '0' has no effect.",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION25": {
    +                    "description": "Enable protection for region 25. Write '0' has no effect.",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION26": {
    +                    "description": "Enable protection for region 26. Write '0' has no effect.",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION27": {
    +                    "description": "Enable protection for region 27. Write '0' has no effect.",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION28": {
    +                    "description": "Enable protection for region 28. Write '0' has no effect.",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION29": {
    +                    "description": "Enable protection for region 29. Write '0' has no effect.",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION30": {
    +                    "description": "Enable protection for region 30. Write '0' has no effect.",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION31": {
    +                    "description": "Enable protection for region 31. Write '0' has no effect.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CONFIG1": {
    +              "description": "Block protect configuration register 1",
    +              "offset": 1540,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION32": {
    +                    "description": "Enable protection for region 32. Write '0' has no effect.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION33": {
    +                    "description": "Enable protection for region 33. Write '0' has no effect.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION34": {
    +                    "description": "Enable protection for region 34. Write '0' has no effect.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION35": {
    +                    "description": "Enable protection for region 35. Write '0' has no effect.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION36": {
    +                    "description": "Enable protection for region 36. Write '0' has no effect.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION37": {
    +                    "description": "Enable protection for region 37. Write '0' has no effect.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION38": {
    +                    "description": "Enable protection for region 38. Write '0' has no effect.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION39": {
    +                    "description": "Enable protection for region 39. Write '0' has no effect.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION40": {
    +                    "description": "Enable protection for region 40. Write '0' has no effect.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION41": {
    +                    "description": "Enable protection for region 41. Write '0' has no effect.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION42": {
    +                    "description": "Enable protection for region 42. Write '0' has no effect.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION43": {
    +                    "description": "Enable protection for region 43. Write '0' has no effect.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION44": {
    +                    "description": "Enable protection for region 44. Write '0' has no effect.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION45": {
    +                    "description": "Enable protection for region 45. Write '0' has no effect.",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION46": {
    +                    "description": "Enable protection for region 46. Write '0' has no effect.",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION47": {
    +                    "description": "Enable protection for region 47. Write '0' has no effect.",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION48": {
    +                    "description": "Enable protection for region 48. Write '0' has no effect.",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION49": {
    +                    "description": "Enable protection for region 49. Write '0' has no effect.",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION50": {
    +                    "description": "Enable protection for region 50. Write '0' has no effect.",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION51": {
    +                    "description": "Enable protection for region 51. Write '0' has no effect.",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION52": {
    +                    "description": "Enable protection for region 52. Write '0' has no effect.",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION53": {
    +                    "description": "Enable protection for region 53. Write '0' has no effect.",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION54": {
    +                    "description": "Enable protection for region 54. Write '0' has no effect.",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION55": {
    +                    "description": "Enable protection for region 55. Write '0' has no effect.",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION56": {
    +                    "description": "Enable protection for region 56. Write '0' has no effect.",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION57": {
    +                    "description": "Enable protection for region 57. Write '0' has no effect.",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION58": {
    +                    "description": "Enable protection for region 58. Write '0' has no effect.",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION59": {
    +                    "description": "Enable protection for region 59. Write '0' has no effect.",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION60": {
    +                    "description": "Enable protection for region 60. Write '0' has no effect.",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION61": {
    +                    "description": "Enable protection for region 61. Write '0' has no effect.",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION62": {
    +                    "description": "Enable protection for region 62. Write '0' has no effect.",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION63": {
    +                    "description": "Enable protection for region 63. Write '0' has no effect.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "DISABLEINDEBUG": {
    +              "description": "Disable protection mechanism in debug interface mode",
    +              "offset": 1544,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DISABLEINDEBUG": {
    +                    "description": "Disable the protection mechanism for NVM regions while in debug interface mode. This register will only disable the protection mechanism if the device is in debug interface mode.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable in debug",
    +                            "value": 1
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable in debug",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "UNUSED0": {
    +              "description": "Unspecified",
    +              "offset": 1548,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "CONFIG2": {
    +              "description": "Block protect configuration register 2",
    +              "offset": 1552,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION64": {
    +                    "description": "Enable protection for region 64. Write '0' has no effect.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION65": {
    +                    "description": "Enable protection for region 65. Write '0' has no effect.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION66": {
    +                    "description": "Enable protection for region 66. Write '0' has no effect.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION67": {
    +                    "description": "Enable protection for region 67. Write '0' has no effect.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION68": {
    +                    "description": "Enable protection for region 68. Write '0' has no effect.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION69": {
    +                    "description": "Enable protection for region 69. Write '0' has no effect.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION70": {
    +                    "description": "Enable protection for region 70. Write '0' has no effect.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION71": {
    +                    "description": "Enable protection for region 71. Write '0' has no effect.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION72": {
    +                    "description": "Enable protection for region 72. Write '0' has no effect.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION73": {
    +                    "description": "Enable protection for region 73. Write '0' has no effect.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION74": {
    +                    "description": "Enable protection for region 74. Write '0' has no effect.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION75": {
    +                    "description": "Enable protection for region 75. Write '0' has no effect.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION76": {
    +                    "description": "Enable protection for region 76. Write '0' has no effect.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION77": {
    +                    "description": "Enable protection for region 77. Write '0' has no effect.",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION78": {
    +                    "description": "Enable protection for region 78. Write '0' has no effect.",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION79": {
    +                    "description": "Enable protection for region 79. Write '0' has no effect.",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION80": {
    +                    "description": "Enable protection for region 80. Write '0' has no effect.",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION81": {
    +                    "description": "Enable protection for region 81. Write '0' has no effect.",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION82": {
    +                    "description": "Enable protection for region 82. Write '0' has no effect.",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION83": {
    +                    "description": "Enable protection for region 83. Write '0' has no effect.",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION84": {
    +                    "description": "Enable protection for region 84. Write '0' has no effect.",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION85": {
    +                    "description": "Enable protection for region 85. Write '0' has no effect.",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION86": {
    +                    "description": "Enable protection for region 86. Write '0' has no effect.",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION87": {
    +                    "description": "Enable protection for region 87. Write '0' has no effect.",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION88": {
    +                    "description": "Enable protection for region 88. Write '0' has no effect.",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION89": {
    +                    "description": "Enable protection for region 89. Write '0' has no effect.",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION90": {
    +                    "description": "Enable protection for region 90. Write '0' has no effect.",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION91": {
    +                    "description": "Enable protection for region 91. Write '0' has no effect.",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION92": {
    +                    "description": "Enable protection for region 92. Write '0' has no effect.",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION93": {
    +                    "description": "Enable protection for region 93. Write '0' has no effect.",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION94": {
    +                    "description": "Enable protection for region 94. Write '0' has no effect.",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION95": {
    +                    "description": "Enable protection for region 95. Write '0' has no effect.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CONFIG3": {
    +              "description": "Block protect configuration register 3",
    +              "offset": 1556,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION96": {
    +                    "description": "Enable protection for region 96. Write '0' has no effect.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION97": {
    +                    "description": "Enable protection for region 97. Write '0' has no effect.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION98": {
    +                    "description": "Enable protection for region 98. Write '0' has no effect.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION99": {
    +                    "description": "Enable protection for region 99. Write '0' has no effect.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION100": {
    +                    "description": "Enable protection for region 100. Write '0' has no effect.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION101": {
    +                    "description": "Enable protection for region 101. Write '0' has no effect.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION102": {
    +                    "description": "Enable protection for region 102. Write '0' has no effect.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION103": {
    +                    "description": "Enable protection for region 103. Write '0' has no effect.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION104": {
    +                    "description": "Enable protection for region 104. Write '0' has no effect.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION105": {
    +                    "description": "Enable protection for region 105. Write '0' has no effect.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION106": {
    +                    "description": "Enable protection for region 106. Write '0' has no effect.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION107": {
    +                    "description": "Enable protection for region 107. Write '0' has no effect.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION108": {
    +                    "description": "Enable protection for region 108. Write '0' has no effect.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION109": {
    +                    "description": "Enable protection for region 109. Write '0' has no effect.",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION110": {
    +                    "description": "Enable protection for region 110. Write '0' has no effect.",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION111": {
    +                    "description": "Enable protection for region 111. Write '0' has no effect.",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION112": {
    +                    "description": "Enable protection for region 112. Write '0' has no effect.",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION113": {
    +                    "description": "Enable protection for region 113. Write '0' has no effect.",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION114": {
    +                    "description": "Enable protection for region 114. Write '0' has no effect.",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION115": {
    +                    "description": "Enable protection for region 115. Write '0' has no effect.",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION116": {
    +                    "description": "Enable protection for region 116. Write '0' has no effect.",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION117": {
    +                    "description": "Enable protection for region 117. Write '0' has no effect.",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION118": {
    +                    "description": "Enable protection for region 118. Write '0' has no effect.",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION119": {
    +                    "description": "Enable protection for region 119. Write '0' has no effect.",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION120": {
    +                    "description": "Enable protection for region 120. Write '0' has no effect.",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION121": {
    +                    "description": "Enable protection for region 121. Write '0' has no effect.",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION122": {
    +                    "description": "Enable protection for region 122. Write '0' has no effect.",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION123": {
    +                    "description": "Enable protection for region 123. Write '0' has no effect.",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION124": {
    +                    "description": "Enable protection for region 124. Write '0' has no effect.",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION125": {
    +                    "description": "Enable protection for region 125. Write '0' has no effect.",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION126": {
    +                    "description": "Enable protection for region 126. Write '0' has no effect.",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION127": {
    +                    "description": "Enable protection for region 127. Write '0' has no effect.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Protection disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Protection enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "POWER": {
    +        "description": "Power control",
    +        "children": {
    +          "registers": {
    +            "TASKS_CONSTLAT": {
    +              "description": "Enable constant latency mode",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_LOWPWR": {
    +              "description": "Enable low power mode (variable latency)",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_POFWARN": {
    +              "description": "Power failure warning",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_SLEEPENTER": {
    +              "description": "CPU entered WFI/WFE sleep",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_SLEEPEXIT": {
    +              "description": "CPU exited WFI/WFE sleep",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "POFWARN": {
    +                    "description": "Write '1' to Enable interrupt for POFWARN event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SLEEPENTER": {
    +                    "description": "Write '1' to Enable interrupt for SLEEPENTER event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SLEEPEXIT": {
    +                    "description": "Write '1' to Enable interrupt for SLEEPEXIT event",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "POFWARN": {
    +                    "description": "Write '1' to Disable interrupt for POFWARN event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SLEEPENTER": {
    +                    "description": "Write '1' to Disable interrupt for SLEEPENTER event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SLEEPEXIT": {
    +                    "description": "Write '1' to Disable interrupt for SLEEPEXIT event",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "RESETREAS": {
    +              "description": "Reset reason",
    +              "offset": 1024,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESETPIN": {
    +                    "description": "Reset from pin-reset detected",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDetected": {
    +                            "description": "Not detected",
    +                            "value": 0
    +                          },
    +                          "Detected": {
    +                            "description": "Detected",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DOG": {
    +                    "description": "Reset from watchdog detected",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDetected": {
    +                            "description": "Not detected",
    +                            "value": 0
    +                          },
    +                          "Detected": {
    +                            "description": "Detected",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SREQ": {
    +                    "description": "Reset from soft reset detected",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDetected": {
    +                            "description": "Not detected",
    +                            "value": 0
    +                          },
    +                          "Detected": {
    +                            "description": "Detected",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LOCKUP": {
    +                    "description": "Reset from CPU lock-up detected",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDetected": {
    +                            "description": "Not detected",
    +                            "value": 0
    +                          },
    +                          "Detected": {
    +                            "description": "Detected",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OFF": {
    +                    "description": "Reset due to wake up from System OFF mode when wakeup is triggered from DETECT signal from GPIO",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDetected": {
    +                            "description": "Not detected",
    +                            "value": 0
    +                          },
    +                          "Detected": {
    +                            "description": "Detected",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LPCOMP": {
    +                    "description": "Reset due to wake up from System OFF mode when wakeup is triggered from ANADETECT signal from LPCOMP",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDetected": {
    +                            "description": "Not detected",
    +                            "value": 0
    +                          },
    +                          "Detected": {
    +                            "description": "Detected",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DIF": {
    +                    "description": "Reset due to wake up from System OFF mode when wakeup is triggered from entering into debug interface mode",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDetected": {
    +                            "description": "Not detected",
    +                            "value": 0
    +                          },
    +                          "Detected": {
    +                            "description": "Detected",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "NFC": {
    +                    "description": "Reset due to wake up from System OFF mode by NFC field detect",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDetected": {
    +                            "description": "Not detected",
    +                            "value": 0
    +                          },
    +                          "Detected": {
    +                            "description": "Detected",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "RAMSTATUS": {
    +              "description": "Deprecated register -  RAM status register",
    +              "offset": 1064,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RAMBLOCK0": {
    +                    "description": "RAM block 0 is on or off/powering up",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Off": {
    +                            "description": "Off",
    +                            "value": 0
    +                          },
    +                          "On": {
    +                            "description": "On",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RAMBLOCK1": {
    +                    "description": "RAM block 1 is on or off/powering up",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Off": {
    +                            "description": "Off",
    +                            "value": 0
    +                          },
    +                          "On": {
    +                            "description": "On",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RAMBLOCK2": {
    +                    "description": "RAM block 2 is on or off/powering up",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Off": {
    +                            "description": "Off",
    +                            "value": 0
    +                          },
    +                          "On": {
    +                            "description": "On",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RAMBLOCK3": {
    +                    "description": "RAM block 3 is on or off/powering up",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Off": {
    +                            "description": "Off",
    +                            "value": 0
    +                          },
    +                          "On": {
    +                            "description": "On",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SYSTEMOFF": {
    +              "description": "System OFF register",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "SYSTEMOFF": {
    +                    "description": "Enable System OFF mode",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Enter": {
    +                            "description": "Enable System OFF mode",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "POFCON": {
    +              "description": "Power failure comparator configuration",
    +              "offset": 1296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "POF": {
    +                    "description": "Enable or disable power failure comparator",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "THRESHOLD": {
    +                    "description": "Power failure comparator threshold setting",
    +                    "offset": 1,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "V17": {
    +                            "description": "Set threshold to 1.7 V",
    +                            "value": 4
    +                          },
    +                          "V18": {
    +                            "description": "Set threshold to 1.8 V",
    +                            "value": 5
    +                          },
    +                          "V19": {
    +                            "description": "Set threshold to 1.9 V",
    +                            "value": 6
    +                          },
    +                          "V20": {
    +                            "description": "Set threshold to 2.0 V",
    +                            "value": 7
    +                          },
    +                          "V21": {
    +                            "description": "Set threshold to 2.1 V",
    +                            "value": 8
    +                          },
    +                          "V22": {
    +                            "description": "Set threshold to 2.2 V",
    +                            "value": 9
    +                          },
    +                          "V23": {
    +                            "description": "Set threshold to 2.3 V",
    +                            "value": 10
    +                          },
    +                          "V24": {
    +                            "description": "Set threshold to 2.4 V",
    +                            "value": 11
    +                          },
    +                          "V25": {
    +                            "description": "Set threshold to 2.5 V",
    +                            "value": 12
    +                          },
    +                          "V26": {
    +                            "description": "Set threshold to 2.6 V",
    +                            "value": 13
    +                          },
    +                          "V27": {
    +                            "description": "Set threshold to 2.7 V",
    +                            "value": 14
    +                          },
    +                          "V28": {
    +                            "description": "Set threshold to 2.8 V",
    +                            "value": 15
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPREGRET": {
    +              "description": "General purpose retention register",
    +              "offset": 1308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "GPREGRET": {
    +                    "description": "General purpose retention register",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "GPREGRET2": {
    +              "description": "General purpose retention register",
    +              "offset": 1312,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "GPREGRET": {
    +                    "description": "General purpose retention register",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "RAMON": {
    +              "description": "Deprecated register -  RAM on/off register (this register is retained)",
    +              "offset": 1316,
    +              "size": 32,
    +              "reset_value": 3,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ONRAM0": {
    +                    "description": "Keep RAM block 0 on or off in system ON Mode",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RAM0Off": {
    +                            "description": "Off",
    +                            "value": 0
    +                          },
    +                          "RAM0On": {
    +                            "description": "On",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ONRAM1": {
    +                    "description": "Keep RAM block 1 on or off in system ON Mode",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RAM1Off": {
    +                            "description": "Off",
    +                            "value": 0
    +                          },
    +                          "RAM1On": {
    +                            "description": "On",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OFFRAM0": {
    +                    "description": "Keep retention on RAM block 0 when RAM block is switched off",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RAM0Off": {
    +                            "description": "Off",
    +                            "value": 0
    +                          },
    +                          "RAM0On": {
    +                            "description": "On",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OFFRAM1": {
    +                    "description": "Keep retention on RAM block 1 when RAM block is switched off",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RAM1Off": {
    +                            "description": "Off",
    +                            "value": 0
    +                          },
    +                          "RAM1On": {
    +                            "description": "On",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "RAMONB": {
    +              "description": "Deprecated register -  RAM on/off register (this register is retained)",
    +              "offset": 1364,
    +              "size": 32,
    +              "reset_value": 3,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ONRAM2": {
    +                    "description": "Keep RAM block 2 on or off in system ON Mode",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RAM2Off": {
    +                            "description": "Off",
    +                            "value": 0
    +                          },
    +                          "RAM2On": {
    +                            "description": "On",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ONRAM3": {
    +                    "description": "Keep RAM block 3 on or off in system ON Mode",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RAM3Off": {
    +                            "description": "Off",
    +                            "value": 0
    +                          },
    +                          "RAM3On": {
    +                            "description": "On",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OFFRAM2": {
    +                    "description": "Keep retention on RAM block 2 when RAM block is switched off",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RAM2Off": {
    +                            "description": "Off",
    +                            "value": 0
    +                          },
    +                          "RAM2On": {
    +                            "description": "On",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OFFRAM3": {
    +                    "description": "Keep retention on RAM block 3 when RAM block is switched off",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RAM3Off": {
    +                            "description": "Off",
    +                            "value": 0
    +                          },
    +                          "RAM3On": {
    +                            "description": "On",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "DCDCEN": {
    +              "description": "DC/DC enable register",
    +              "offset": 1400,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DCDCEN": {
    +                    "description": "Enable or disable DC/DC converter",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "CLOCK": {
    +        "description": "Clock control",
    +        "children": {
    +          "registers": {
    +            "TASKS_HFCLKSTART": {
    +              "description": "Start HFCLK crystal oscillator",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_HFCLKSTOP": {
    +              "description": "Stop HFCLK crystal oscillator",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_LFCLKSTART": {
    +              "description": "Start LFCLK source",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_LFCLKSTOP": {
    +              "description": "Stop LFCLK source",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_CAL": {
    +              "description": "Start calibration of LFRC oscillator",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_CTSTART": {
    +              "description": "Start calibration timer",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_CTSTOP": {
    +              "description": "Stop calibration timer",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_HFCLKSTARTED": {
    +              "description": "HFCLK oscillator started",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_LFCLKSTARTED": {
    +              "description": "LFCLK started",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_DONE": {
    +              "description": "Calibration of LFCLK RC oscillator complete event",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_CTTO": {
    +              "description": "Calibration timer timeout",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HFCLKSTARTED": {
    +                    "description": "Write '1' to Enable interrupt for HFCLKSTARTED event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LFCLKSTARTED": {
    +                    "description": "Write '1' to Enable interrupt for LFCLKSTARTED event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DONE": {
    +                    "description": "Write '1' to Enable interrupt for DONE event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CTTO": {
    +                    "description": "Write '1' to Enable interrupt for CTTO event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HFCLKSTARTED": {
    +                    "description": "Write '1' to Disable interrupt for HFCLKSTARTED event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LFCLKSTARTED": {
    +                    "description": "Write '1' to Disable interrupt for LFCLKSTARTED event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DONE": {
    +                    "description": "Write '1' to Disable interrupt for DONE event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CTTO": {
    +                    "description": "Write '1' to Disable interrupt for CTTO event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "HFCLKRUN": {
    +              "description": "Status indicating that HFCLKSTART task has been triggered",
    +              "offset": 1032,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "STATUS": {
    +                    "description": "HFCLKSTART task triggered or not",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotTriggered": {
    +                            "description": "Task not triggered",
    +                            "value": 0
    +                          },
    +                          "Triggered": {
    +                            "description": "Task triggered",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "HFCLKSTAT": {
    +              "description": "HFCLK status",
    +              "offset": 1036,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SRC": {
    +                    "description": "Source of HFCLK",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RC": {
    +                            "description": "64 MHz internal oscillator (HFINT)",
    +                            "value": 0
    +                          },
    +                          "Xtal": {
    +                            "description": "64 MHz crystal oscillator (HFXO)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STATE": {
    +                    "description": "HFCLK state",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotRunning": {
    +                            "description": "HFCLK not running",
    +                            "value": 0
    +                          },
    +                          "Running": {
    +                            "description": "HFCLK running",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "LFCLKRUN": {
    +              "description": "Status indicating that LFCLKSTART task has been triggered",
    +              "offset": 1044,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "STATUS": {
    +                    "description": "LFCLKSTART task triggered or not",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotTriggered": {
    +                            "description": "Task not triggered",
    +                            "value": 0
    +                          },
    +                          "Triggered": {
    +                            "description": "Task triggered",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "LFCLKSTAT": {
    +              "description": "LFCLK status",
    +              "offset": 1048,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SRC": {
    +                    "description": "Source of LFCLK",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RC": {
    +                            "description": "32.768 kHz RC oscillator",
    +                            "value": 0
    +                          },
    +                          "Xtal": {
    +                            "description": "32.768 kHz crystal oscillator",
    +                            "value": 1
    +                          },
    +                          "Synth": {
    +                            "description": "32.768 kHz synthesized from HFCLK",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STATE": {
    +                    "description": "LFCLK state",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotRunning": {
    +                            "description": "LFCLK not running",
    +                            "value": 0
    +                          },
    +                          "Running": {
    +                            "description": "LFCLK running",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "LFCLKSRCCOPY": {
    +              "description": "Copy of LFCLKSRC register, set when LFCLKSTART task was triggered",
    +              "offset": 1052,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SRC": {
    +                    "description": "Clock source",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RC": {
    +                            "description": "32.768 kHz RC oscillator",
    +                            "value": 0
    +                          },
    +                          "Xtal": {
    +                            "description": "32.768 kHz crystal oscillator",
    +                            "value": 1
    +                          },
    +                          "Synth": {
    +                            "description": "32.768 kHz synthesized from HFCLK",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "LFCLKSRC": {
    +              "description": "Clock source for the LFCLK",
    +              "offset": 1304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SRC": {
    +                    "description": "Clock source",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RC": {
    +                            "description": "32.768 kHz RC oscillator",
    +                            "value": 0
    +                          },
    +                          "Xtal": {
    +                            "description": "32.768 kHz crystal oscillator",
    +                            "value": 1
    +                          },
    +                          "Synth": {
    +                            "description": "32.768 kHz synthesized from HFCLK",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "BYPASS": {
    +                    "description": "Enable or disable bypass of LFCLK crystal oscillator with external clock source",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable (use with Xtal or low-swing external source)",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable (use with rail-to-rail external source)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EXTERNAL": {
    +                    "description": "Enable or disable external source for LFCLK",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable external source (use with Xtal)",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable use of external source instead of Xtal (SRC needs to be set to Xtal)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CTIV": {
    +              "description": "Calibration timer interval",
    +              "offset": 1336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTIV": {
    +                    "description": "Calibration timer interval in multiple of 0.25 seconds. Range: 0.25 seconds to 31.75 seconds.",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "TRACECONFIG": {
    +              "description": "Clocking options for the Trace Port debug interface",
    +              "offset": 1372,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TRACEPORTSPEED": {
    +                    "description": "Speed of Trace Port clock. Note that the TRACECLK pin will output this clock divided by two.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "32MHz": {
    +                            "description": "32 MHz Trace Port clock (TRACECLK = 16 MHz)",
    +                            "value": 0
    +                          },
    +                          "16MHz": {
    +                            "description": "16 MHz Trace Port clock (TRACECLK = 8 MHz)",
    +                            "value": 1
    +                          },
    +                          "8MHz": {
    +                            "description": "8 MHz Trace Port clock (TRACECLK = 4 MHz)",
    +                            "value": 2
    +                          },
    +                          "4MHz": {
    +                            "description": "4 MHz Trace Port clock (TRACECLK = 2 MHz)",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRACEMUX": {
    +                    "description": "Pin multiplexing of trace signals.",
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO": {
    +                            "description": "GPIOs multiplexed onto all trace-pins",
    +                            "value": 0
    +                          },
    +                          "Serial": {
    +                            "description": "SWO multiplexed onto P0.18, GPIO multiplexed onto other trace pins",
    +                            "value": 1
    +                          },
    +                          "Parallel": {
    +                            "description": "TRACECLK and TRACEDATA multiplexed onto P0.20, P0.18, P0.16, P0.15 and P0.14.",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "RADIO": {
    +        "description": "2.4 GHz Radio",
    +        "children": {
    +          "registers": {
    +            "TASKS_TXEN": {
    +              "description": "Enable RADIO in TX mode",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_RXEN": {
    +              "description": "Enable RADIO in RX mode",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_START": {
    +              "description": "Start RADIO",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stop RADIO",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_DISABLE": {
    +              "description": "Disable RADIO",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_RSSISTART": {
    +              "description": "Start the RSSI and take one single sample of the receive signal strength.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_RSSISTOP": {
    +              "description": "Stop the RSSI measurement",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_BCSTART": {
    +              "description": "Start the bit counter",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_BCSTOP": {
    +              "description": "Stop the bit counter",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_READY": {
    +              "description": "RADIO has ramped up and is ready to be started",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_ADDRESS": {
    +              "description": "Address sent or received",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_PAYLOAD": {
    +              "description": "Packet payload sent or received",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_END": {
    +              "description": "Packet sent or received",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_DISABLED": {
    +              "description": "RADIO has been disabled",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_DEVMATCH": {
    +              "description": "A device address match occurred on the last received packet",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_DEVMISS": {
    +              "description": "No device address match occurred on the last received packet",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_RSSIEND": {
    +              "description": "Sampling of receive signal strength complete.",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_BCMATCH": {
    +              "description": "Bit counter reached bit count value.",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_CRCOK": {
    +              "description": "Packet received with CRC ok",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_CRCERROR": {
    +              "description": "Packet received with CRC error",
    +              "offset": 308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "SHORTS": {
    +              "description": "Shortcut register",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY_START": {
    +                    "description": "Shortcut between READY event and START task",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "END_DISABLE": {
    +                    "description": "Shortcut between END event and DISABLE task",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DISABLED_TXEN": {
    +                    "description": "Shortcut between DISABLED event and TXEN task",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DISABLED_RXEN": {
    +                    "description": "Shortcut between DISABLED event and RXEN task",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADDRESS_RSSISTART": {
    +                    "description": "Shortcut between ADDRESS event and RSSISTART task",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "END_START": {
    +                    "description": "Shortcut between END event and START task",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADDRESS_BCSTART": {
    +                    "description": "Shortcut between ADDRESS event and BCSTART task",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DISABLED_RSSISTOP": {
    +                    "description": "Shortcut between DISABLED event and RSSISTOP task",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "Write '1' to Enable interrupt for READY event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADDRESS": {
    +                    "description": "Write '1' to Enable interrupt for ADDRESS event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PAYLOAD": {
    +                    "description": "Write '1' to Enable interrupt for PAYLOAD event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "END": {
    +                    "description": "Write '1' to Enable interrupt for END event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DISABLED": {
    +                    "description": "Write '1' to Enable interrupt for DISABLED event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DEVMATCH": {
    +                    "description": "Write '1' to Enable interrupt for DEVMATCH event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DEVMISS": {
    +                    "description": "Write '1' to Enable interrupt for DEVMISS event",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RSSIEND": {
    +                    "description": "Write '1' to Enable interrupt for RSSIEND event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "BCMATCH": {
    +                    "description": "Write '1' to Enable interrupt for BCMATCH event",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CRCOK": {
    +                    "description": "Write '1' to Enable interrupt for CRCOK event",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CRCERROR": {
    +                    "description": "Write '1' to Enable interrupt for CRCERROR event",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "Write '1' to Disable interrupt for READY event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADDRESS": {
    +                    "description": "Write '1' to Disable interrupt for ADDRESS event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PAYLOAD": {
    +                    "description": "Write '1' to Disable interrupt for PAYLOAD event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "END": {
    +                    "description": "Write '1' to Disable interrupt for END event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DISABLED": {
    +                    "description": "Write '1' to Disable interrupt for DISABLED event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DEVMATCH": {
    +                    "description": "Write '1' to Disable interrupt for DEVMATCH event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DEVMISS": {
    +                    "description": "Write '1' to Disable interrupt for DEVMISS event",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RSSIEND": {
    +                    "description": "Write '1' to Disable interrupt for RSSIEND event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "BCMATCH": {
    +                    "description": "Write '1' to Disable interrupt for BCMATCH event",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CRCOK": {
    +                    "description": "Write '1' to Disable interrupt for CRCOK event",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CRCERROR": {
    +                    "description": "Write '1' to Disable interrupt for CRCERROR event",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CRCSTATUS": {
    +              "description": "CRC status",
    +              "offset": 1024,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CRCSTATUS": {
    +                    "description": "CRC status of packet received",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CRCError": {
    +                            "description": "Packet received with CRC error",
    +                            "value": 0
    +                          },
    +                          "CRCOk": {
    +                            "description": "Packet received with CRC ok",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "RXMATCH": {
    +              "description": "Received address",
    +              "offset": 1032,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RXMATCH": {
    +                    "description": "Received address",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "RXCRC": {
    +              "description": "CRC field of previously received packet",
    +              "offset": 1036,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RXCRC": {
    +                    "description": "CRC field of previously received packet",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "DAI": {
    +              "description": "Device address match index",
    +              "offset": 1040,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DAI": {
    +                    "description": "Device address match index",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "PACKETPTR": {
    +              "description": "Packet pointer",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PACKETPTR": {
    +                    "description": "Packet pointer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "FREQUENCY": {
    +              "description": "Frequency",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 2,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FREQUENCY": {
    +                    "description": "Radio channel frequency",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "MAP": {
    +                    "description": "Channel map selection.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Default": {
    +                            "description": "Channel map between 2400 MHZ .. 2500 MHz",
    +                            "value": 0
    +                          },
    +                          "Low": {
    +                            "description": "Channel map between 2360 MHZ .. 2460 MHz",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TXPOWER": {
    +              "description": "Output power",
    +              "offset": 1292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXPOWER": {
    +                    "description": "RADIO output power.",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "enum": {
    +                      "size": 8,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Pos4dBm": {
    +                            "description": "+4 dBm",
    +                            "value": 4
    +                          },
    +                          "Pos3dBm": {
    +                            "description": "+3 dBm",
    +                            "value": 3
    +                          },
    +                          "0dBm": {
    +                            "description": "0 dBm",
    +                            "value": 0
    +                          },
    +                          "Neg4dBm": {
    +                            "description": "-4 dBm",
    +                            "value": 252
    +                          },
    +                          "Neg8dBm": {
    +                            "description": "-8 dBm",
    +                            "value": 248
    +                          },
    +                          "Neg12dBm": {
    +                            "description": "-12 dBm",
    +                            "value": 244
    +                          },
    +                          "Neg16dBm": {
    +                            "description": "-16 dBm",
    +                            "value": 240
    +                          },
    +                          "Neg20dBm": {
    +                            "description": "-20 dBm",
    +                            "value": 236
    +                          },
    +                          "Neg30dBm": {
    +                            "description": "Deprecated enumerator -  -40 dBm",
    +                            "value": 255
    +                          },
    +                          "Neg40dBm": {
    +                            "description": "-40 dBm",
    +                            "value": 216
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "MODE": {
    +              "description": "Data rate and modulation",
    +              "offset": 1296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MODE": {
    +                    "description": "Radio data rate and modulation setting. The radio supports Frequency-shift Keying (FSK) modulation.",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Nrf_1Mbit": {
    +                            "description": "1 Mbit/s Nordic proprietary radio mode",
    +                            "value": 0
    +                          },
    +                          "Nrf_2Mbit": {
    +                            "description": "2 Mbit/s Nordic proprietary radio mode",
    +                            "value": 1
    +                          },
    +                          "Nrf_250Kbit": {
    +                            "description": "Deprecated enumerator -  250 kbit/s Nordic proprietary radio mode",
    +                            "value": 2
    +                          },
    +                          "Ble_1Mbit": {
    +                            "description": "1 Mbit/s Bluetooth Low Energy",
    +                            "value": 3
    +                          },
    +                          "Ble_2Mbit": {
    +                            "description": "2 Mbit/s Bluetooth Low Energy",
    +                            "value": 4
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PCNF0": {
    +              "description": "Packet configuration register 0",
    +              "offset": 1300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LFLEN": {
    +                    "description": "Length on air of LENGTH field in number of bits.",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "S0LEN": {
    +                    "description": "Length on air of S0 field in number of bytes.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "S1LEN": {
    +                    "description": "Length on air of S1 field in number of bits.",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "S1INCL": {
    +                    "description": "Include or exclude S1 field in RAM",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Automatic": {
    +                            "description": "Include S1 field in RAM only if S1LEN > 0",
    +                            "value": 0
    +                          },
    +                          "Include": {
    +                            "description": "Always include S1 field in RAM independent of S1LEN",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PLEN": {
    +                    "description": "Length of preamble on air. Decision point: TASKS_START task",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "8bit": {
    +                            "description": "8-bit preamble",
    +                            "value": 0
    +                          },
    +                          "16bit": {
    +                            "description": "16-bit preamble",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PCNF1": {
    +              "description": "Packet configuration register 1",
    +              "offset": 1304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MAXLEN": {
    +                    "description": "Maximum length of packet payload. If the packet payload is larger than MAXLEN, the radio will truncate the payload to MAXLEN.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "STATLEN": {
    +                    "description": "Static length in number of bytes",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "BALEN": {
    +                    "description": "Base address length in number of bytes",
    +                    "offset": 16,
    +                    "size": 3
    +                  },
    +                  "ENDIAN": {
    +                    "description": "On air endianness of packet, this applies to the S0, LENGTH, S1 and the PAYLOAD fields.",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Little": {
    +                            "description": "Least Significant bit on air first",
    +                            "value": 0
    +                          },
    +                          "Big": {
    +                            "description": "Most significant bit on air first",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "WHITEEN": {
    +                    "description": "Enable or disable packet whitening",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "BASE0": {
    +              "description": "Base address 0",
    +              "offset": 1308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BASE0": {
    +                    "description": "Base address 0",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BASE1": {
    +              "description": "Base address 1",
    +              "offset": 1312,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BASE1": {
    +                    "description": "Base address 1",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PREFIX0": {
    +              "description": "Prefixes bytes for logical addresses 0-3",
    +              "offset": 1316,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AP0": {
    +                    "description": "Address prefix 0.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "AP1": {
    +                    "description": "Address prefix 1.",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "AP2": {
    +                    "description": "Address prefix 2.",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "AP3": {
    +                    "description": "Address prefix 3.",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "PREFIX1": {
    +              "description": "Prefixes bytes for logical addresses 4-7",
    +              "offset": 1320,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AP4": {
    +                    "description": "Address prefix 4.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "AP5": {
    +                    "description": "Address prefix 5.",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "AP6": {
    +                    "description": "Address prefix 6.",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "AP7": {
    +                    "description": "Address prefix 7.",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TXADDRESS": {
    +              "description": "Transmit address select",
    +              "offset": 1324,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXADDRESS": {
    +                    "description": "Transmit address select",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "RXADDRESSES": {
    +              "description": "Receive address select",
    +              "offset": 1328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADDR0": {
    +                    "description": "Enable or disable reception on logical address 0.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADDR1": {
    +                    "description": "Enable or disable reception on logical address 1.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADDR2": {
    +                    "description": "Enable or disable reception on logical address 2.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADDR3": {
    +                    "description": "Enable or disable reception on logical address 3.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADDR4": {
    +                    "description": "Enable or disable reception on logical address 4.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADDR5": {
    +                    "description": "Enable or disable reception on logical address 5.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADDR6": {
    +                    "description": "Enable or disable reception on logical address 6.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADDR7": {
    +                    "description": "Enable or disable reception on logical address 7.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CRCCNF": {
    +              "description": "CRC configuration",
    +              "offset": 1332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEN": {
    +                    "description": "CRC length in number of bytes.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "CRC length is zero and CRC calculation is disabled",
    +                            "value": 0
    +                          },
    +                          "One": {
    +                            "description": "CRC length is one byte and CRC calculation is enabled",
    +                            "value": 1
    +                          },
    +                          "Two": {
    +                            "description": "CRC length is two bytes and CRC calculation is enabled",
    +                            "value": 2
    +                          },
    +                          "Three": {
    +                            "description": "CRC length is three bytes and CRC calculation is enabled",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SKIPADDR": {
    +                    "description": "Include or exclude packet address field out of CRC calculation.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Include": {
    +                            "description": "CRC calculation includes address field",
    +                            "value": 0
    +                          },
    +                          "Skip": {
    +                            "description": "CRC calculation does not include address field. The CRC calculation will start at the first byte after the address.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CRCPOLY": {
    +              "description": "CRC polynomial",
    +              "offset": 1336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CRCPOLY": {
    +                    "description": "CRC polynomial",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "CRCINIT": {
    +              "description": "CRC initial value",
    +              "offset": 1340,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CRCINIT": {
    +                    "description": "CRC initial value",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "UNUSED0": {
    +              "description": "Unspecified",
    +              "offset": 1344,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "TIFS": {
    +              "description": "Inter Frame Spacing in us",
    +              "offset": 1348,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIFS": {
    +                    "description": "Inter Frame Spacing in us",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "RSSISAMPLE": {
    +              "description": "RSSI sample",
    +              "offset": 1352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RSSISAMPLE": {
    +                    "description": "RSSI sample",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "STATE": {
    +              "description": "Current radio state",
    +              "offset": 1360,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "STATE": {
    +                    "description": "Current radio state",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "RADIO is in the Disabled state",
    +                            "value": 0
    +                          },
    +                          "RxRu": {
    +                            "description": "RADIO is in the RXRU state",
    +                            "value": 1
    +                          },
    +                          "RxIdle": {
    +                            "description": "RADIO is in the RXIDLE state",
    +                            "value": 2
    +                          },
    +                          "Rx": {
    +                            "description": "RADIO is in the RX state",
    +                            "value": 3
    +                          },
    +                          "RxDisable": {
    +                            "description": "RADIO is in the RXDISABLED state",
    +                            "value": 4
    +                          },
    +                          "TxRu": {
    +                            "description": "RADIO is in the TXRU state",
    +                            "value": 9
    +                          },
    +                          "TxIdle": {
    +                            "description": "RADIO is in the TXIDLE state",
    +                            "value": 10
    +                          },
    +                          "Tx": {
    +                            "description": "RADIO is in the TX state",
    +                            "value": 11
    +                          },
    +                          "TxDisable": {
    +                            "description": "RADIO is in the TXDISABLED state",
    +                            "value": 12
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "DATAWHITEIV": {
    +              "description": "Data whitening initial value",
    +              "offset": 1364,
    +              "size": 32,
    +              "reset_value": 64,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATAWHITEIV": {
    +                    "description": "Data whitening initial value. Bit 6 is hard-wired to '1', writing '0' to it has no effect, and it will always be read back and used by the device as '1'.",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "BCC": {
    +              "description": "Bit counter compare",
    +              "offset": 1376,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BCC": {
    +                    "description": "Bit counter compare",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DAB": {
    +              "description": "Description collection[0]:  Device address base segment 0",
    +              "offset": 1536,
    +              "size": 32,
    +              "count": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DAB": {
    +                    "description": "Device address base segment 0",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DAP": {
    +              "description": "Description collection[0]:  Device address prefix 0",
    +              "offset": 1568,
    +              "size": 32,
    +              "count": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DAP": {
    +                    "description": "Device address prefix 0",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DACNF": {
    +              "description": "Device address match configuration",
    +              "offset": 1600,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENA0": {
    +                    "description": "Enable or disable device address matching using device address 0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENA1": {
    +                    "description": "Enable or disable device address matching using device address 1",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENA2": {
    +                    "description": "Enable or disable device address matching using device address 2",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENA3": {
    +                    "description": "Enable or disable device address matching using device address 3",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENA4": {
    +                    "description": "Enable or disable device address matching using device address 4",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENA5": {
    +                    "description": "Enable or disable device address matching using device address 5",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENA6": {
    +                    "description": "Enable or disable device address matching using device address 6",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENA7": {
    +                    "description": "Enable or disable device address matching using device address 7",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXADD0": {
    +                    "description": "TxAdd for device address 0",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TXADD1": {
    +                    "description": "TxAdd for device address 1",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TXADD2": {
    +                    "description": "TxAdd for device address 2",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TXADD3": {
    +                    "description": "TxAdd for device address 3",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TXADD4": {
    +                    "description": "TxAdd for device address 4",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TXADD5": {
    +                    "description": "TxAdd for device address 5",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TXADD6": {
    +                    "description": "TxAdd for device address 6",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TXADD7": {
    +                    "description": "TxAdd for device address 7",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MODECNF0": {
    +              "description": "Radio mode configuration register 0",
    +              "offset": 1616,
    +              "size": 32,
    +              "reset_value": 512,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RU": {
    +                    "description": "Radio ramp-up time",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Default": {
    +                            "description": "Default ramp-up time (tRXEN), compatible with firmware written for nRF51",
    +                            "value": 0
    +                          },
    +                          "Fast": {
    +                            "description": "Fast ramp-up (tRXEN,FAST), see electrical specification for more information",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DTX": {
    +                    "description": "Default TX value",
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "B1": {
    +                            "description": "Transmit '1'",
    +                            "value": 0
    +                          },
    +                          "B0": {
    +                            "description": "Transmit '0'",
    +                            "value": 1
    +                          },
    +                          "Center": {
    +                            "description": "Transmit center frequency",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "POWER": {
    +              "description": "Peripheral power control",
    +              "offset": 4092,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "POWER": {
    +                    "description": "Peripheral power control. The peripheral and its registers will be reset to its initial state by switching the peripheral off and then back on again.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Peripheral is powered off",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Peripheral is powered on",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "UARTE0": {
    +        "description": "UART with EasyDMA",
    +        "children": {
    +          "registers": {
    +            "TASKS_STARTRX": {
    +              "description": "Start UART receiver",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_STOPRX": {
    +              "description": "Stop UART receiver",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_STARTTX": {
    +              "description": "Start UART transmitter",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_STOPTX": {
    +              "description": "Stop UART transmitter",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_FLUSHRX": {
    +              "description": "Flush RX FIFO into RX buffer",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_CTS": {
    +              "description": "CTS is activated (set low). Clear To Send.",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_NCTS": {
    +              "description": "CTS is deactivated (set high). Not Clear To Send.",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_RXDRDY": {
    +              "description": "Data received in RXD (but potentially not yet transferred to Data RAM)",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_ENDRX": {
    +              "description": "Receive buffer is filled up",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_TXDRDY": {
    +              "description": "Data sent from TXD",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_ENDTX": {
    +              "description": "Last TX byte transmitted",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_ERROR": {
    +              "description": "Error detected",
    +              "offset": 292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_RXTO": {
    +              "description": "Receiver timeout",
    +              "offset": 324,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_RXSTARTED": {
    +              "description": "UART receiver has started",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_TXSTARTED": {
    +              "description": "UART transmitter has started",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_TXSTOPPED": {
    +              "description": "Transmitter stopped",
    +              "offset": 344,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "SHORTS": {
    +              "description": "Shortcut register",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENDRX_STARTRX": {
    +                    "description": "Shortcut between ENDRX event and STARTRX task",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDRX_STOPRX": {
    +                    "description": "Shortcut between ENDRX event and STOPRX task",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTEN": {
    +              "description": "Enable or disable interrupt",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTS": {
    +                    "description": "Enable or disable interrupt for CTS event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "NCTS": {
    +                    "description": "Enable or disable interrupt for NCTS event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXDRDY": {
    +                    "description": "Enable or disable interrupt for RXDRDY event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDRX": {
    +                    "description": "Enable or disable interrupt for ENDRX event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXDRDY": {
    +                    "description": "Enable or disable interrupt for TXDRDY event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDTX": {
    +                    "description": "Enable or disable interrupt for ENDTX event",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Enable or disable interrupt for ERROR event",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXTO": {
    +                    "description": "Enable or disable interrupt for RXTO event",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXSTARTED": {
    +                    "description": "Enable or disable interrupt for RXSTARTED event",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXSTARTED": {
    +                    "description": "Enable or disable interrupt for TXSTARTED event",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXSTOPPED": {
    +                    "description": "Enable or disable interrupt for TXSTOPPED event",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTS": {
    +                    "description": "Write '1' to Enable interrupt for CTS event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "NCTS": {
    +                    "description": "Write '1' to Enable interrupt for NCTS event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXDRDY": {
    +                    "description": "Write '1' to Enable interrupt for RXDRDY event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDRX": {
    +                    "description": "Write '1' to Enable interrupt for ENDRX event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXDRDY": {
    +                    "description": "Write '1' to Enable interrupt for TXDRDY event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDTX": {
    +                    "description": "Write '1' to Enable interrupt for ENDTX event",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Write '1' to Enable interrupt for ERROR event",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXTO": {
    +                    "description": "Write '1' to Enable interrupt for RXTO event",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXSTARTED": {
    +                    "description": "Write '1' to Enable interrupt for RXSTARTED event",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXSTARTED": {
    +                    "description": "Write '1' to Enable interrupt for TXSTARTED event",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXSTOPPED": {
    +                    "description": "Write '1' to Enable interrupt for TXSTOPPED event",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTS": {
    +                    "description": "Write '1' to Disable interrupt for CTS event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "NCTS": {
    +                    "description": "Write '1' to Disable interrupt for NCTS event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXDRDY": {
    +                    "description": "Write '1' to Disable interrupt for RXDRDY event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDRX": {
    +                    "description": "Write '1' to Disable interrupt for ENDRX event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXDRDY": {
    +                    "description": "Write '1' to Disable interrupt for TXDRDY event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDTX": {
    +                    "description": "Write '1' to Disable interrupt for ENDTX event",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Write '1' to Disable interrupt for ERROR event",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXTO": {
    +                    "description": "Write '1' to Disable interrupt for RXTO event",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXSTARTED": {
    +                    "description": "Write '1' to Disable interrupt for RXSTARTED event",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXSTARTED": {
    +                    "description": "Write '1' to Disable interrupt for TXSTARTED event",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXSTOPPED": {
    +                    "description": "Write '1' to Disable interrupt for TXSTOPPED event",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ERRORSRC": {
    +              "description": "Error source",
    +              "offset": 1152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OVERRUN": {
    +                    "description": "Overrun error",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotPresent": {
    +                            "description": "Read: error not present",
    +                            "value": 0
    +                          },
    +                          "Present": {
    +                            "description": "Read: error present",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PARITY": {
    +                    "description": "Parity error",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotPresent": {
    +                            "description": "Read: error not present",
    +                            "value": 0
    +                          },
    +                          "Present": {
    +                            "description": "Read: error present",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FRAMING": {
    +                    "description": "Framing error occurred",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotPresent": {
    +                            "description": "Read: error not present",
    +                            "value": 0
    +                          },
    +                          "Present": {
    +                            "description": "Read: error present",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "BREAK": {
    +                    "description": "Break condition",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotPresent": {
    +                            "description": "Read: error not present",
    +                            "value": 0
    +                          },
    +                          "Present": {
    +                            "description": "Read: error present",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable UART",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable UARTE",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable UARTE",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable UARTE",
    +                            "value": 8
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "BAUDRATE": {
    +              "description": "Baud rate. Accuracy depends on the HFCLK source selected.",
    +              "offset": 1316,
    +              "size": 32,
    +              "reset_value": 67108864,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BAUDRATE": {
    +                    "description": "Baud rate",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "enum": {
    +                      "size": 32,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Baud1200": {
    +                            "description": "1200 baud (actual rate: 1205)",
    +                            "value": 323584
    +                          },
    +                          "Baud2400": {
    +                            "description": "2400 baud (actual rate: 2396)",
    +                            "value": 643072
    +                          },
    +                          "Baud4800": {
    +                            "description": "4800 baud (actual rate: 4808)",
    +                            "value": 1290240
    +                          },
    +                          "Baud9600": {
    +                            "description": "9600 baud (actual rate: 9598)",
    +                            "value": 2576384
    +                          },
    +                          "Baud14400": {
    +                            "description": "14400 baud (actual rate: 14401)",
    +                            "value": 3862528
    +                          },
    +                          "Baud19200": {
    +                            "description": "19200 baud (actual rate: 19208)",
    +                            "value": 5152768
    +                          },
    +                          "Baud28800": {
    +                            "description": "28800 baud (actual rate: 28777)",
    +                            "value": 7716864
    +                          },
    +                          "Baud31250": {
    +                            "description": "31250 baud",
    +                            "value": 8388608
    +                          },
    +                          "Baud38400": {
    +                            "description": "38400 baud (actual rate: 38369)",
    +                            "value": 10289152
    +                          },
    +                          "Baud56000": {
    +                            "description": "56000 baud (actual rate: 55944)",
    +                            "value": 15007744
    +                          },
    +                          "Baud57600": {
    +                            "description": "57600 baud (actual rate: 57554)",
    +                            "value": 15400960
    +                          },
    +                          "Baud76800": {
    +                            "description": "76800 baud (actual rate: 76923)",
    +                            "value": 20615168
    +                          },
    +                          "Baud115200": {
    +                            "description": "115200 baud (actual rate: 115108)",
    +                            "value": 30801920
    +                          },
    +                          "Baud230400": {
    +                            "description": "230400 baud (actual rate: 231884)",
    +                            "value": 61865984
    +                          },
    +                          "Baud250000": {
    +                            "description": "250000 baud",
    +                            "value": 67108864
    +                          },
    +                          "Baud460800": {
    +                            "description": "460800 baud (actual rate: 457143)",
    +                            "value": 121634816
    +                          },
    +                          "Baud921600": {
    +                            "description": "921600 baud (actual rate: 941176)",
    +                            "value": 251658240
    +                          },
    +                          "Baud1M": {
    +                            "description": "1Mega baud",
    +                            "value": 268435456
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CONFIG": {
    +              "description": "Configuration of parity and hardware flow control",
    +              "offset": 1388,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HWFC": {
    +                    "description": "Hardware flow control",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PARITY": {
    +                    "description": "Parity",
    +                    "offset": 1,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude parity bit",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include parity bit",
    +                            "value": 7
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "UART0": {
    +        "description": "Universal Asynchronous Receiver/Transmitter",
    +        "children": {
    +          "registers": {
    +            "TASKS_STARTRX": {
    +              "description": "Start UART receiver",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_STOPRX": {
    +              "description": "Stop UART receiver",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_STARTTX": {
    +              "description": "Start UART transmitter",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_STOPTX": {
    +              "description": "Stop UART transmitter",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_SUSPEND": {
    +              "description": "Suspend UART",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_CTS": {
    +              "description": "CTS is activated (set low). Clear To Send.",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_NCTS": {
    +              "description": "CTS is deactivated (set high). Not Clear To Send.",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_RXDRDY": {
    +              "description": "Data received in RXD",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_TXDRDY": {
    +              "description": "Data sent from TXD",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_ERROR": {
    +              "description": "Error detected",
    +              "offset": 292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_RXTO": {
    +              "description": "Receiver timeout",
    +              "offset": 324,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "SHORTS": {
    +              "description": "Shortcut register",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTS_STARTRX": {
    +                    "description": "Shortcut between CTS event and STARTRX task",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "NCTS_STOPRX": {
    +                    "description": "Shortcut between NCTS event and STOPRX task",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTS": {
    +                    "description": "Write '1' to Enable interrupt for CTS event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "NCTS": {
    +                    "description": "Write '1' to Enable interrupt for NCTS event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXDRDY": {
    +                    "description": "Write '1' to Enable interrupt for RXDRDY event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXDRDY": {
    +                    "description": "Write '1' to Enable interrupt for TXDRDY event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Write '1' to Enable interrupt for ERROR event",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXTO": {
    +                    "description": "Write '1' to Enable interrupt for RXTO event",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTS": {
    +                    "description": "Write '1' to Disable interrupt for CTS event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "NCTS": {
    +                    "description": "Write '1' to Disable interrupt for NCTS event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXDRDY": {
    +                    "description": "Write '1' to Disable interrupt for RXDRDY event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXDRDY": {
    +                    "description": "Write '1' to Disable interrupt for TXDRDY event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Write '1' to Disable interrupt for ERROR event",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXTO": {
    +                    "description": "Write '1' to Disable interrupt for RXTO event",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ERRORSRC": {
    +              "description": "Error source",
    +              "offset": 1152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OVERRUN": {
    +                    "description": "Overrun error",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotPresent": {
    +                            "description": "Read: error not present",
    +                            "value": 0
    +                          },
    +                          "Present": {
    +                            "description": "Read: error present",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PARITY": {
    +                    "description": "Parity error",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotPresent": {
    +                            "description": "Read: error not present",
    +                            "value": 0
    +                          },
    +                          "Present": {
    +                            "description": "Read: error present",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FRAMING": {
    +                    "description": "Framing error occurred",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotPresent": {
    +                            "description": "Read: error not present",
    +                            "value": 0
    +                          },
    +                          "Present": {
    +                            "description": "Read: error present",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "BREAK": {
    +                    "description": "Break condition",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotPresent": {
    +                            "description": "Read: error not present",
    +                            "value": 0
    +                          },
    +                          "Present": {
    +                            "description": "Read: error present",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable UART",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable UART",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable UART",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable UART",
    +                            "value": 4
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PSELRTS": {
    +              "description": "Pin select for RTS",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSELRTS": {
    +                    "description": "Pin number configuration for UART RTS signal",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "enum": {
    +                      "size": 32,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disconnected": {
    +                            "description": "Disconnect",
    +                            "value": 4294967295
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PSELTXD": {
    +              "description": "Pin select for TXD",
    +              "offset": 1292,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSELTXD": {
    +                    "description": "Pin number configuration for UART TXD signal",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "enum": {
    +                      "size": 32,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disconnected": {
    +                            "description": "Disconnect",
    +                            "value": 4294967295
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PSELCTS": {
    +              "description": "Pin select for CTS",
    +              "offset": 1296,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSELCTS": {
    +                    "description": "Pin number configuration for UART CTS signal",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "enum": {
    +                      "size": 32,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disconnected": {
    +                            "description": "Disconnect",
    +                            "value": 4294967295
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PSELRXD": {
    +              "description": "Pin select for RXD",
    +              "offset": 1300,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSELRXD": {
    +                    "description": "Pin number configuration for UART RXD signal",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "enum": {
    +                      "size": 32,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disconnected": {
    +                            "description": "Disconnect",
    +                            "value": 4294967295
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "RXD": {
    +              "description": "RXD register",
    +              "offset": 1304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RXD": {
    +                    "description": "RX data received in previous transfers, double buffered",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TXD": {
    +              "description": "TXD register",
    +              "offset": 1308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TXD": {
    +                    "description": "TX data to be transferred",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "BAUDRATE": {
    +              "description": "Baud rate",
    +              "offset": 1316,
    +              "size": 32,
    +              "reset_value": 67108864,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BAUDRATE": {
    +                    "description": "Baud rate",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "enum": {
    +                      "size": 32,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Baud1200": {
    +                            "description": "1200 baud (actual rate: 1205)",
    +                            "value": 323584
    +                          },
    +                          "Baud2400": {
    +                            "description": "2400 baud (actual rate: 2396)",
    +                            "value": 643072
    +                          },
    +                          "Baud4800": {
    +                            "description": "4800 baud (actual rate: 4808)",
    +                            "value": 1290240
    +                          },
    +                          "Baud9600": {
    +                            "description": "9600 baud (actual rate: 9598)",
    +                            "value": 2576384
    +                          },
    +                          "Baud14400": {
    +                            "description": "14400 baud (actual rate: 14414)",
    +                            "value": 3866624
    +                          },
    +                          "Baud19200": {
    +                            "description": "19200 baud (actual rate: 19208)",
    +                            "value": 5152768
    +                          },
    +                          "Baud28800": {
    +                            "description": "28800 baud (actual rate: 28829)",
    +                            "value": 7729152
    +                          },
    +                          "Baud31250": {
    +                            "description": "31250 baud",
    +                            "value": 8388608
    +                          },
    +                          "Baud38400": {
    +                            "description": "38400 baud (actual rate: 38462)",
    +                            "value": 10309632
    +                          },
    +                          "Baud56000": {
    +                            "description": "56000 baud (actual rate: 55944)",
    +                            "value": 15007744
    +                          },
    +                          "Baud57600": {
    +                            "description": "57600 baud (actual rate: 57762)",
    +                            "value": 15462400
    +                          },
    +                          "Baud76800": {
    +                            "description": "76800 baud (actual rate: 76923)",
    +                            "value": 20615168
    +                          },
    +                          "Baud115200": {
    +                            "description": "115200 baud (actual rate: 115942)",
    +                            "value": 30924800
    +                          },
    +                          "Baud230400": {
    +                            "description": "230400 baud (actual rate: 231884)",
    +                            "value": 61845504
    +                          },
    +                          "Baud250000": {
    +                            "description": "250000 baud",
    +                            "value": 67108864
    +                          },
    +                          "Baud460800": {
    +                            "description": "460800 baud (actual rate: 470588)",
    +                            "value": 123695104
    +                          },
    +                          "Baud921600": {
    +                            "description": "921600 baud (actual rate: 941176)",
    +                            "value": 247386112
    +                          },
    +                          "Baud1M": {
    +                            "description": "1Mega baud",
    +                            "value": 268435456
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CONFIG": {
    +              "description": "Configuration of parity and hardware flow control",
    +              "offset": 1388,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HWFC": {
    +                    "description": "Hardware flow control",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PARITY": {
    +                    "description": "Parity",
    +                    "offset": 1,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude parity bit",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include parity bit",
    +                            "value": 7
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SPIM0": {
    +        "description": "Serial Peripheral Interface Master with EasyDMA 0",
    +        "children": {
    +          "registers": {
    +            "TASKS_START": {
    +              "description": "Start SPI transaction",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stop SPI transaction",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_SUSPEND": {
    +              "description": "Suspend SPI transaction",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_RESUME": {
    +              "description": "Resume SPI transaction",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_STOPPED": {
    +              "description": "SPI transaction has stopped",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_ENDRX": {
    +              "description": "End of RXD buffer reached",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_END": {
    +              "description": "End of RXD buffer and TXD buffer reached",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_ENDTX": {
    +              "description": "End of TXD buffer reached",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_STARTED": {
    +              "description": "Transaction started",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "SHORTS": {
    +              "description": "Shortcut register",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "END_START": {
    +                    "description": "Shortcut between END event and START task",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STOPPED": {
    +                    "description": "Write '1' to Enable interrupt for STOPPED event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDRX": {
    +                    "description": "Write '1' to Enable interrupt for ENDRX event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "END": {
    +                    "description": "Write '1' to Enable interrupt for END event",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDTX": {
    +                    "description": "Write '1' to Enable interrupt for ENDTX event",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STARTED": {
    +                    "description": "Write '1' to Enable interrupt for STARTED event",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STOPPED": {
    +                    "description": "Write '1' to Disable interrupt for STOPPED event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDRX": {
    +                    "description": "Write '1' to Disable interrupt for ENDRX event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "END": {
    +                    "description": "Write '1' to Disable interrupt for END event",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDTX": {
    +                    "description": "Write '1' to Disable interrupt for ENDTX event",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STARTED": {
    +                    "description": "Write '1' to Disable interrupt for STARTED event",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable SPIM",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable SPIM",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable SPIM",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable SPIM",
    +                            "value": 7
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "FREQUENCY": {
    +              "description": "SPI frequency. Accuracy depends on the HFCLK source selected.",
    +              "offset": 1316,
    +              "size": 32,
    +              "reset_value": 67108864,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FREQUENCY": {
    +                    "description": "SPI master data rate",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "enum": {
    +                      "size": 32,
    +                      "children": {
    +                        "enum_fields": {
    +                          "K125": {
    +                            "description": "125 kbps",
    +                            "value": 33554432
    +                          },
    +                          "K250": {
    +                            "description": "250 kbps",
    +                            "value": 67108864
    +                          },
    +                          "K500": {
    +                            "description": "500 kbps",
    +                            "value": 134217728
    +                          },
    +                          "M1": {
    +                            "description": "1 Mbps",
    +                            "value": 268435456
    +                          },
    +                          "M2": {
    +                            "description": "2 Mbps",
    +                            "value": 536870912
    +                          },
    +                          "M4": {
    +                            "description": "4 Mbps",
    +                            "value": 1073741824
    +                          },
    +                          "M8": {
    +                            "description": "8 Mbps",
    +                            "value": 2147483648
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CONFIG": {
    +              "description": "Configuration register",
    +              "offset": 1364,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ORDER": {
    +                    "description": "Bit order",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "MsbFirst": {
    +                            "description": "Most significant bit shifted out first",
    +                            "value": 0
    +                          },
    +                          "LsbFirst": {
    +                            "description": "Least significant bit shifted out first",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CPHA": {
    +                    "description": "Serial clock (SCK) phase",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Leading": {
    +                            "description": "Sample on leading edge of clock, shift serial data on trailing edge",
    +                            "value": 0
    +                          },
    +                          "Trailing": {
    +                            "description": "Sample on trailing edge of clock, shift serial data on leading edge",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CPOL": {
    +                    "description": "Serial clock (SCK) polarity",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ActiveHigh": {
    +                            "description": "Active high",
    +                            "value": 0
    +                          },
    +                          "ActiveLow": {
    +                            "description": "Active low",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ORC": {
    +              "description": "Over-read character. Character clocked out in case and over-read of the TXD buffer.",
    +              "offset": 1472,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ORC": {
    +                    "description": "Over-read character. Character clocked out in case and over-read of the TXD buffer.",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SPIS0": {
    +        "description": "SPI Slave 0",
    +        "children": {
    +          "registers": {
    +            "TASKS_ACQUIRE": {
    +              "description": "Acquire SPI semaphore",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_RELEASE": {
    +              "description": "Release SPI semaphore, enabling the SPI slave to acquire it",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_END": {
    +              "description": "Granted transaction completed",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_ENDRX": {
    +              "description": "End of RXD buffer reached",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_ACQUIRED": {
    +              "description": "Semaphore acquired",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "SHORTS": {
    +              "description": "Shortcut register",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "END_ACQUIRE": {
    +                    "description": "Shortcut between END event and ACQUIRE task",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "END": {
    +                    "description": "Write '1' to Enable interrupt for END event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDRX": {
    +                    "description": "Write '1' to Enable interrupt for ENDRX event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ACQUIRED": {
    +                    "description": "Write '1' to Enable interrupt for ACQUIRED event",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "END": {
    +                    "description": "Write '1' to Disable interrupt for END event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDRX": {
    +                    "description": "Write '1' to Disable interrupt for ENDRX event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ACQUIRED": {
    +                    "description": "Write '1' to Disable interrupt for ACQUIRED event",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SEMSTAT": {
    +              "description": "Semaphore status register",
    +              "offset": 1024,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SEMSTAT": {
    +                    "description": "Semaphore status",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Free": {
    +                            "description": "Semaphore is free",
    +                            "value": 0
    +                          },
    +                          "CPU": {
    +                            "description": "Semaphore is assigned to CPU",
    +                            "value": 1
    +                          },
    +                          "SPIS": {
    +                            "description": "Semaphore is assigned to SPI slave",
    +                            "value": 2
    +                          },
    +                          "CPUPending": {
    +                            "description": "Semaphore is assigned to SPI but a handover to the CPU is pending",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "STATUS": {
    +              "description": "Status from last transaction",
    +              "offset": 1088,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OVERREAD": {
    +                    "description": "TX buffer over-read detected, and prevented",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotPresent": {
    +                            "description": "Read: error not present",
    +                            "value": 0
    +                          },
    +                          "Present": {
    +                            "description": "Read: error present",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OVERFLOW": {
    +                    "description": "RX buffer overflow detected, and prevented",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotPresent": {
    +                            "description": "Read: error not present",
    +                            "value": 0
    +                          },
    +                          "Present": {
    +                            "description": "Read: error present",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable SPI slave",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable SPI slave",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable SPI slave",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable SPI slave",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CONFIG": {
    +              "description": "Configuration register",
    +              "offset": 1364,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ORDER": {
    +                    "description": "Bit order",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "MsbFirst": {
    +                            "description": "Most significant bit shifted out first",
    +                            "value": 0
    +                          },
    +                          "LsbFirst": {
    +                            "description": "Least significant bit shifted out first",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CPHA": {
    +                    "description": "Serial clock (SCK) phase",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Leading": {
    +                            "description": "Sample on leading edge of clock, shift serial data on trailing edge",
    +                            "value": 0
    +                          },
    +                          "Trailing": {
    +                            "description": "Sample on trailing edge of clock, shift serial data on leading edge",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CPOL": {
    +                    "description": "Serial clock (SCK) polarity",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ActiveHigh": {
    +                            "description": "Active high",
    +                            "value": 0
    +                          },
    +                          "ActiveLow": {
    +                            "description": "Active low",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "DEF": {
    +              "description": "Default character. Character clocked out in case of an ignored transaction.",
    +              "offset": 1372,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DEF": {
    +                    "description": "Default character. Character clocked out in case of an ignored transaction.",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "ORC": {
    +              "description": "Over-read character",
    +              "offset": 1472,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ORC": {
    +                    "description": "Over-read character. Character clocked out after an over-read of the transmit buffer.",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TWIM0": {
    +        "description": "I2C compatible Two-Wire Master Interface with EasyDMA 0",
    +        "children": {
    +          "registers": {
    +            "TASKS_STARTRX": {
    +              "description": "Start TWI receive sequence",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_STARTTX": {
    +              "description": "Start TWI transmit sequence",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stop TWI transaction. Must be issued while the TWI master is not suspended.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_SUSPEND": {
    +              "description": "Suspend TWI transaction",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_RESUME": {
    +              "description": "Resume TWI transaction",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_STOPPED": {
    +              "description": "TWI stopped",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_ERROR": {
    +              "description": "TWI error",
    +              "offset": 292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_SUSPENDED": {
    +              "description": "Last byte has been sent out after the SUSPEND task has been issued, TWI traffic is now suspended.",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_RXSTARTED": {
    +              "description": "Receive sequence started",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_TXSTARTED": {
    +              "description": "Transmit sequence started",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_LASTRX": {
    +              "description": "Byte boundary, starting to receive the last byte",
    +              "offset": 348,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_LASTTX": {
    +              "description": "Byte boundary, starting to transmit the last byte",
    +              "offset": 352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "SHORTS": {
    +              "description": "Shortcut register",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LASTTX_STARTRX": {
    +                    "description": "Shortcut between LASTTX event and STARTRX task",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LASTTX_SUSPEND": {
    +                    "description": "Shortcut between LASTTX event and SUSPEND task",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LASTTX_STOP": {
    +                    "description": "Shortcut between LASTTX event and STOP task",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LASTRX_STARTTX": {
    +                    "description": "Shortcut between LASTRX event and STARTTX task",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LASTRX_STOP": {
    +                    "description": "Shortcut between LASTRX event and STOP task",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTEN": {
    +              "description": "Enable or disable interrupt",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STOPPED": {
    +                    "description": "Enable or disable interrupt for STOPPED event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Enable or disable interrupt for ERROR event",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SUSPENDED": {
    +                    "description": "Enable or disable interrupt for SUSPENDED event",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXSTARTED": {
    +                    "description": "Enable or disable interrupt for RXSTARTED event",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXSTARTED": {
    +                    "description": "Enable or disable interrupt for TXSTARTED event",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LASTRX": {
    +                    "description": "Enable or disable interrupt for LASTRX event",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LASTTX": {
    +                    "description": "Enable or disable interrupt for LASTTX event",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STOPPED": {
    +                    "description": "Write '1' to Enable interrupt for STOPPED event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Write '1' to Enable interrupt for ERROR event",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SUSPENDED": {
    +                    "description": "Write '1' to Enable interrupt for SUSPENDED event",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXSTARTED": {
    +                    "description": "Write '1' to Enable interrupt for RXSTARTED event",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXSTARTED": {
    +                    "description": "Write '1' to Enable interrupt for TXSTARTED event",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LASTRX": {
    +                    "description": "Write '1' to Enable interrupt for LASTRX event",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LASTTX": {
    +                    "description": "Write '1' to Enable interrupt for LASTTX event",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STOPPED": {
    +                    "description": "Write '1' to Disable interrupt for STOPPED event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Write '1' to Disable interrupt for ERROR event",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SUSPENDED": {
    +                    "description": "Write '1' to Disable interrupt for SUSPENDED event",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXSTARTED": {
    +                    "description": "Write '1' to Disable interrupt for RXSTARTED event",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXSTARTED": {
    +                    "description": "Write '1' to Disable interrupt for TXSTARTED event",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LASTRX": {
    +                    "description": "Write '1' to Disable interrupt for LASTRX event",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LASTTX": {
    +                    "description": "Write '1' to Disable interrupt for LASTTX event",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ERRORSRC": {
    +              "description": "Error source",
    +              "offset": 1220,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OVERRUN": {
    +                    "description": "Overrun error",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotReceived": {
    +                            "description": "Error did not occur",
    +                            "value": 0
    +                          },
    +                          "Received": {
    +                            "description": "Error occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ANACK": {
    +                    "description": "NACK received after sending the address (write '1' to clear)",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotReceived": {
    +                            "description": "Error did not occur",
    +                            "value": 0
    +                          },
    +                          "Received": {
    +                            "description": "Error occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DNACK": {
    +                    "description": "NACK received after sending a data byte (write '1' to clear)",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotReceived": {
    +                            "description": "Error did not occur",
    +                            "value": 0
    +                          },
    +                          "Received": {
    +                            "description": "Error occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable TWIM",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable TWIM",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable TWIM",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable TWIM",
    +                            "value": 6
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "FREQUENCY": {
    +              "description": "TWI frequency",
    +              "offset": 1316,
    +              "size": 32,
    +              "reset_value": 67108864,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FREQUENCY": {
    +                    "description": "TWI master clock frequency",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "enum": {
    +                      "size": 32,
    +                      "children": {
    +                        "enum_fields": {
    +                          "K100": {
    +                            "description": "100 kbps",
    +                            "value": 26738688
    +                          },
    +                          "K250": {
    +                            "description": "250 kbps",
    +                            "value": 67108864
    +                          },
    +                          "K400": {
    +                            "description": "400 kbps",
    +                            "value": 104857600
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ADDRESS": {
    +              "description": "Address used in the TWI transfer",
    +              "offset": 1416,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADDRESS": {
    +                    "description": "Address used in the TWI transfer",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TWIS0": {
    +        "description": "I2C compatible Two-Wire Slave Interface with EasyDMA 0",
    +        "children": {
    +          "registers": {
    +            "TASKS_STOP": {
    +              "description": "Stop TWI transaction",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_SUSPEND": {
    +              "description": "Suspend TWI transaction",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_RESUME": {
    +              "description": "Resume TWI transaction",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_PREPARERX": {
    +              "description": "Prepare the TWI slave to respond to a write command",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_PREPARETX": {
    +              "description": "Prepare the TWI slave to respond to a read command",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_STOPPED": {
    +              "description": "TWI stopped",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_ERROR": {
    +              "description": "TWI error",
    +              "offset": 292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_RXSTARTED": {
    +              "description": "Receive sequence started",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_TXSTARTED": {
    +              "description": "Transmit sequence started",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_WRITE": {
    +              "description": "Write command received",
    +              "offset": 356,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_READ": {
    +              "description": "Read command received",
    +              "offset": 360,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "SHORTS": {
    +              "description": "Shortcut register",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WRITE_SUSPEND": {
    +                    "description": "Shortcut between WRITE event and SUSPEND task",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "READ_SUSPEND": {
    +                    "description": "Shortcut between READ event and SUSPEND task",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTEN": {
    +              "description": "Enable or disable interrupt",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STOPPED": {
    +                    "description": "Enable or disable interrupt for STOPPED event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Enable or disable interrupt for ERROR event",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXSTARTED": {
    +                    "description": "Enable or disable interrupt for RXSTARTED event",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXSTARTED": {
    +                    "description": "Enable or disable interrupt for TXSTARTED event",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "WRITE": {
    +                    "description": "Enable or disable interrupt for WRITE event",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "READ": {
    +                    "description": "Enable or disable interrupt for READ event",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STOPPED": {
    +                    "description": "Write '1' to Enable interrupt for STOPPED event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Write '1' to Enable interrupt for ERROR event",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXSTARTED": {
    +                    "description": "Write '1' to Enable interrupt for RXSTARTED event",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXSTARTED": {
    +                    "description": "Write '1' to Enable interrupt for TXSTARTED event",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "WRITE": {
    +                    "description": "Write '1' to Enable interrupt for WRITE event",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "READ": {
    +                    "description": "Write '1' to Enable interrupt for READ event",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STOPPED": {
    +                    "description": "Write '1' to Disable interrupt for STOPPED event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Write '1' to Disable interrupt for ERROR event",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXSTARTED": {
    +                    "description": "Write '1' to Disable interrupt for RXSTARTED event",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXSTARTED": {
    +                    "description": "Write '1' to Disable interrupt for TXSTARTED event",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "WRITE": {
    +                    "description": "Write '1' to Disable interrupt for WRITE event",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "READ": {
    +                    "description": "Write '1' to Disable interrupt for READ event",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ERRORSRC": {
    +              "description": "Error source",
    +              "offset": 1232,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OVERFLOW": {
    +                    "description": "RX buffer overflow detected, and prevented",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDetected": {
    +                            "description": "Error did not occur",
    +                            "value": 0
    +                          },
    +                          "Detected": {
    +                            "description": "Error occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DNACK": {
    +                    "description": "NACK sent after receiving a data byte",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotReceived": {
    +                            "description": "Error did not occur",
    +                            "value": 0
    +                          },
    +                          "Received": {
    +                            "description": "Error occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OVERREAD": {
    +                    "description": "TX buffer over-read detected, and prevented",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDetected": {
    +                            "description": "Error did not occur",
    +                            "value": 0
    +                          },
    +                          "Detected": {
    +                            "description": "Error occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "MATCH": {
    +              "description": "Status register indicating which address had a match",
    +              "offset": 1236,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "MATCH": {
    +                    "description": "Which of the addresses in {ADDRESS} matched the incoming address",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable TWIS",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable TWIS",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable TWIS",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable TWIS",
    +                            "value": 9
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ADDRESS": {
    +              "description": "Description collection[0]:  TWI slave address 0",
    +              "offset": 1416,
    +              "size": 32,
    +              "count": 2,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADDRESS": {
    +                    "description": "TWI slave address",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "CONFIG": {
    +              "description": "Configuration register for the address match mechanism",
    +              "offset": 1428,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADDRESS0": {
    +                    "description": "Enable or disable address matching on ADDRESS[0]",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADDRESS1": {
    +                    "description": "Enable or disable address matching on ADDRESS[1]",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ORC": {
    +              "description": "Over-read character. Character sent out in case of an over-read of the transmit buffer.",
    +              "offset": 1472,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ORC": {
    +                    "description": "Over-read character. Character sent out in case of an over-read of the transmit buffer.",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SPI0": {
    +        "description": "Serial Peripheral Interface 0",
    +        "children": {
    +          "registers": {
    +            "EVENTS_READY": {
    +              "description": "TXD byte sent and RXD byte received",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "Write '1' to Enable interrupt for READY event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "Write '1' to Disable interrupt for READY event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable SPI",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable SPI",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable SPI",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable SPI",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "RXD": {
    +              "description": "RXD register",
    +              "offset": 1304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RXD": {
    +                    "description": "RX data received. Double buffered",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TXD": {
    +              "description": "TXD register",
    +              "offset": 1308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXD": {
    +                    "description": "TX data to send. Double buffered",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "FREQUENCY": {
    +              "description": "SPI frequency",
    +              "offset": 1316,
    +              "size": 32,
    +              "reset_value": 67108864,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FREQUENCY": {
    +                    "description": "SPI master data rate",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "enum": {
    +                      "size": 32,
    +                      "children": {
    +                        "enum_fields": {
    +                          "K125": {
    +                            "description": "125 kbps",
    +                            "value": 33554432
    +                          },
    +                          "K250": {
    +                            "description": "250 kbps",
    +                            "value": 67108864
    +                          },
    +                          "K500": {
    +                            "description": "500 kbps",
    +                            "value": 134217728
    +                          },
    +                          "M1": {
    +                            "description": "1 Mbps",
    +                            "value": 268435456
    +                          },
    +                          "M2": {
    +                            "description": "2 Mbps",
    +                            "value": 536870912
    +                          },
    +                          "M4": {
    +                            "description": "4 Mbps",
    +                            "value": 1073741824
    +                          },
    +                          "M8": {
    +                            "description": "8 Mbps",
    +                            "value": 2147483648
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CONFIG": {
    +              "description": "Configuration register",
    +              "offset": 1364,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ORDER": {
    +                    "description": "Bit order",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "MsbFirst": {
    +                            "description": "Most significant bit shifted out first",
    +                            "value": 0
    +                          },
    +                          "LsbFirst": {
    +                            "description": "Least significant bit shifted out first",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CPHA": {
    +                    "description": "Serial clock (SCK) phase",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Leading": {
    +                            "description": "Sample on leading edge of clock, shift serial data on trailing edge",
    +                            "value": 0
    +                          },
    +                          "Trailing": {
    +                            "description": "Sample on trailing edge of clock, shift serial data on leading edge",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CPOL": {
    +                    "description": "Serial clock (SCK) polarity",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ActiveHigh": {
    +                            "description": "Active high",
    +                            "value": 0
    +                          },
    +                          "ActiveLow": {
    +                            "description": "Active low",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TWI0": {
    +        "description": "I2C compatible Two-Wire Interface 0",
    +        "children": {
    +          "registers": {
    +            "TASKS_STARTRX": {
    +              "description": "Start TWI receive sequence",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_STARTTX": {
    +              "description": "Start TWI transmit sequence",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stop TWI transaction",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_SUSPEND": {
    +              "description": "Suspend TWI transaction",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_RESUME": {
    +              "description": "Resume TWI transaction",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_STOPPED": {
    +              "description": "TWI stopped",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_RXDREADY": {
    +              "description": "TWI RXD byte received",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_TXDSENT": {
    +              "description": "TWI TXD byte sent",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_ERROR": {
    +              "description": "TWI error",
    +              "offset": 292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_BB": {
    +              "description": "TWI byte boundary, generated before each byte that is sent or received",
    +              "offset": 312,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_SUSPENDED": {
    +              "description": "TWI entered the suspended state",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "SHORTS": {
    +              "description": "Shortcut register",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BB_SUSPEND": {
    +                    "description": "Shortcut between BB event and SUSPEND task",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "BB_STOP": {
    +                    "description": "Shortcut between BB event and STOP task",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STOPPED": {
    +                    "description": "Write '1' to Enable interrupt for STOPPED event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXDREADY": {
    +                    "description": "Write '1' to Enable interrupt for RXDREADY event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXDSENT": {
    +                    "description": "Write '1' to Enable interrupt for TXDSENT event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Write '1' to Enable interrupt for ERROR event",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "BB": {
    +                    "description": "Write '1' to Enable interrupt for BB event",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SUSPENDED": {
    +                    "description": "Write '1' to Enable interrupt for SUSPENDED event",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STOPPED": {
    +                    "description": "Write '1' to Disable interrupt for STOPPED event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXDREADY": {
    +                    "description": "Write '1' to Disable interrupt for RXDREADY event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXDSENT": {
    +                    "description": "Write '1' to Disable interrupt for TXDSENT event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Write '1' to Disable interrupt for ERROR event",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "BB": {
    +                    "description": "Write '1' to Disable interrupt for BB event",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SUSPENDED": {
    +                    "description": "Write '1' to Disable interrupt for SUSPENDED event",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ERRORSRC": {
    +              "description": "Error source",
    +              "offset": 1220,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OVERRUN": {
    +                    "description": "Overrun error",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotPresent": {
    +                            "description": "Read: no overrun occured",
    +                            "value": 0
    +                          },
    +                          "Present": {
    +                            "description": "Read: overrun occured",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ANACK": {
    +                    "description": "NACK received after sending the address (write '1' to clear)",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotPresent": {
    +                            "description": "Read: error not present",
    +                            "value": 0
    +                          },
    +                          "Present": {
    +                            "description": "Read: error present",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DNACK": {
    +                    "description": "NACK received after sending a data byte (write '1' to clear)",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotPresent": {
    +                            "description": "Read: error not present",
    +                            "value": 0
    +                          },
    +                          "Present": {
    +                            "description": "Read: error present",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable TWI",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable TWI",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable TWI",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable TWI",
    +                            "value": 5
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PSELSCL": {
    +              "description": "Pin select for SCL",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSELSCL": {
    +                    "description": "Pin number configuration for TWI SCL signal",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "enum": {
    +                      "size": 32,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disconnected": {
    +                            "description": "Disconnect",
    +                            "value": 4294967295
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PSELSDA": {
    +              "description": "Pin select for SDA",
    +              "offset": 1292,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSELSDA": {
    +                    "description": "Pin number configuration for TWI SDA signal",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "enum": {
    +                      "size": 32,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disconnected": {
    +                            "description": "Disconnect",
    +                            "value": 4294967295
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "RXD": {
    +              "description": "RXD register",
    +              "offset": 1304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RXD": {
    +                    "description": "RXD register",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TXD": {
    +              "description": "TXD register",
    +              "offset": 1308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXD": {
    +                    "description": "TXD register",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "FREQUENCY": {
    +              "description": "TWI frequency",
    +              "offset": 1316,
    +              "size": 32,
    +              "reset_value": 67108864,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FREQUENCY": {
    +                    "description": "TWI master clock frequency",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "enum": {
    +                      "size": 32,
    +                      "children": {
    +                        "enum_fields": {
    +                          "K100": {
    +                            "description": "100 kbps",
    +                            "value": 26738688
    +                          },
    +                          "K250": {
    +                            "description": "250 kbps",
    +                            "value": 67108864
    +                          },
    +                          "K400": {
    +                            "description": "400 kbps (actual rate 410.256 kbps)",
    +                            "value": 107479040
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ADDRESS": {
    +              "description": "Address used in the TWI transfer",
    +              "offset": 1416,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADDRESS": {
    +                    "description": "Address used in the TWI transfer",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "P0": {
    +        "description": "GPIO Port 1",
    +        "children": {
    +          "registers": {
    +            "OUT": {
    +              "description": "Write GPIO port",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PIN0": {
    +                    "description": "Pin 0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN1": {
    +                    "description": "Pin 1",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN2": {
    +                    "description": "Pin 2",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN3": {
    +                    "description": "Pin 3",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN4": {
    +                    "description": "Pin 4",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN5": {
    +                    "description": "Pin 5",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN6": {
    +                    "description": "Pin 6",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN7": {
    +                    "description": "Pin 7",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN8": {
    +                    "description": "Pin 8",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN9": {
    +                    "description": "Pin 9",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN10": {
    +                    "description": "Pin 10",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN11": {
    +                    "description": "Pin 11",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN12": {
    +                    "description": "Pin 12",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN13": {
    +                    "description": "Pin 13",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN14": {
    +                    "description": "Pin 14",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN15": {
    +                    "description": "Pin 15",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN16": {
    +                    "description": "Pin 16",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN17": {
    +                    "description": "Pin 17",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN18": {
    +                    "description": "Pin 18",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN19": {
    +                    "description": "Pin 19",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN20": {
    +                    "description": "Pin 20",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN21": {
    +                    "description": "Pin 21",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN22": {
    +                    "description": "Pin 22",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN23": {
    +                    "description": "Pin 23",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN24": {
    +                    "description": "Pin 24",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN25": {
    +                    "description": "Pin 25",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN26": {
    +                    "description": "Pin 26",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN27": {
    +                    "description": "Pin 27",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN28": {
    +                    "description": "Pin 28",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN29": {
    +                    "description": "Pin 29",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN30": {
    +                    "description": "Pin 30",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN31": {
    +                    "description": "Pin 31",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "OUTSET": {
    +              "description": "Set individual bits in GPIO port",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PIN0": {
    +                    "description": "Pin 0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN1": {
    +                    "description": "Pin 1",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN2": {
    +                    "description": "Pin 2",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN3": {
    +                    "description": "Pin 3",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN4": {
    +                    "description": "Pin 4",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN5": {
    +                    "description": "Pin 5",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN6": {
    +                    "description": "Pin 6",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN7": {
    +                    "description": "Pin 7",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN8": {
    +                    "description": "Pin 8",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN9": {
    +                    "description": "Pin 9",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN10": {
    +                    "description": "Pin 10",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN11": {
    +                    "description": "Pin 11",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN12": {
    +                    "description": "Pin 12",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN13": {
    +                    "description": "Pin 13",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN14": {
    +                    "description": "Pin 14",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN15": {
    +                    "description": "Pin 15",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN16": {
    +                    "description": "Pin 16",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN17": {
    +                    "description": "Pin 17",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN18": {
    +                    "description": "Pin 18",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN19": {
    +                    "description": "Pin 19",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN20": {
    +                    "description": "Pin 20",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN21": {
    +                    "description": "Pin 21",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN22": {
    +                    "description": "Pin 22",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN23": {
    +                    "description": "Pin 23",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN24": {
    +                    "description": "Pin 24",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN25": {
    +                    "description": "Pin 25",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN26": {
    +                    "description": "Pin 26",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN27": {
    +                    "description": "Pin 27",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN28": {
    +                    "description": "Pin 28",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN29": {
    +                    "description": "Pin 29",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN30": {
    +                    "description": "Pin 30",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN31": {
    +                    "description": "Pin 31",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "OUTCLR": {
    +              "description": "Clear individual bits in GPIO port",
    +              "offset": 1292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PIN0": {
    +                    "description": "Pin 0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN1": {
    +                    "description": "Pin 1",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN2": {
    +                    "description": "Pin 2",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN3": {
    +                    "description": "Pin 3",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN4": {
    +                    "description": "Pin 4",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN5": {
    +                    "description": "Pin 5",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN6": {
    +                    "description": "Pin 6",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN7": {
    +                    "description": "Pin 7",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN8": {
    +                    "description": "Pin 8",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN9": {
    +                    "description": "Pin 9",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN10": {
    +                    "description": "Pin 10",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN11": {
    +                    "description": "Pin 11",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN12": {
    +                    "description": "Pin 12",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN13": {
    +                    "description": "Pin 13",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN14": {
    +                    "description": "Pin 14",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN15": {
    +                    "description": "Pin 15",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN16": {
    +                    "description": "Pin 16",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN17": {
    +                    "description": "Pin 17",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN18": {
    +                    "description": "Pin 18",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN19": {
    +                    "description": "Pin 19",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN20": {
    +                    "description": "Pin 20",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN21": {
    +                    "description": "Pin 21",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN22": {
    +                    "description": "Pin 22",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN23": {
    +                    "description": "Pin 23",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN24": {
    +                    "description": "Pin 24",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN25": {
    +                    "description": "Pin 25",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN26": {
    +                    "description": "Pin 26",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN27": {
    +                    "description": "Pin 27",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN28": {
    +                    "description": "Pin 28",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN29": {
    +                    "description": "Pin 29",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN30": {
    +                    "description": "Pin 30",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN31": {
    +                    "description": "Pin 31",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "IN": {
    +              "description": "Read GPIO port",
    +              "offset": 1296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "PIN0": {
    +                    "description": "Pin 0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN1": {
    +                    "description": "Pin 1",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN2": {
    +                    "description": "Pin 2",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN3": {
    +                    "description": "Pin 3",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN4": {
    +                    "description": "Pin 4",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN5": {
    +                    "description": "Pin 5",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN6": {
    +                    "description": "Pin 6",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN7": {
    +                    "description": "Pin 7",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN8": {
    +                    "description": "Pin 8",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN9": {
    +                    "description": "Pin 9",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN10": {
    +                    "description": "Pin 10",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN11": {
    +                    "description": "Pin 11",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN12": {
    +                    "description": "Pin 12",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN13": {
    +                    "description": "Pin 13",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN14": {
    +                    "description": "Pin 14",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN15": {
    +                    "description": "Pin 15",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN16": {
    +                    "description": "Pin 16",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN17": {
    +                    "description": "Pin 17",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN18": {
    +                    "description": "Pin 18",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN19": {
    +                    "description": "Pin 19",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN20": {
    +                    "description": "Pin 20",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN21": {
    +                    "description": "Pin 21",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN22": {
    +                    "description": "Pin 22",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN23": {
    +                    "description": "Pin 23",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN24": {
    +                    "description": "Pin 24",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN25": {
    +                    "description": "Pin 25",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN26": {
    +                    "description": "Pin 26",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN27": {
    +                    "description": "Pin 27",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN28": {
    +                    "description": "Pin 28",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN29": {
    +                    "description": "Pin 29",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN30": {
    +                    "description": "Pin 30",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN31": {
    +                    "description": "Pin 31",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "DIR": {
    +              "description": "Direction of GPIO pins",
    +              "offset": 1300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PIN0": {
    +                    "description": "Pin 0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN1": {
    +                    "description": "Pin 1",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN2": {
    +                    "description": "Pin 2",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN3": {
    +                    "description": "Pin 3",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN4": {
    +                    "description": "Pin 4",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN5": {
    +                    "description": "Pin 5",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN6": {
    +                    "description": "Pin 6",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN7": {
    +                    "description": "Pin 7",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN8": {
    +                    "description": "Pin 8",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN9": {
    +                    "description": "Pin 9",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN10": {
    +                    "description": "Pin 10",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN11": {
    +                    "description": "Pin 11",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN12": {
    +                    "description": "Pin 12",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN13": {
    +                    "description": "Pin 13",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN14": {
    +                    "description": "Pin 14",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN15": {
    +                    "description": "Pin 15",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN16": {
    +                    "description": "Pin 16",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN17": {
    +                    "description": "Pin 17",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN18": {
    +                    "description": "Pin 18",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN19": {
    +                    "description": "Pin 19",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN20": {
    +                    "description": "Pin 20",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN21": {
    +                    "description": "Pin 21",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN22": {
    +                    "description": "Pin 22",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN23": {
    +                    "description": "Pin 23",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN24": {
    +                    "description": "Pin 24",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN25": {
    +                    "description": "Pin 25",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN26": {
    +                    "description": "Pin 26",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN27": {
    +                    "description": "Pin 27",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN28": {
    +                    "description": "Pin 28",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN29": {
    +                    "description": "Pin 29",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN30": {
    +                    "description": "Pin 30",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN31": {
    +                    "description": "Pin 31",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "DIRSET": {
    +              "description": "DIR set register",
    +              "offset": 1304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PIN0": {
    +                    "description": "Set as output pin 0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN1": {
    +                    "description": "Set as output pin 1",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN2": {
    +                    "description": "Set as output pin 2",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN3": {
    +                    "description": "Set as output pin 3",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN4": {
    +                    "description": "Set as output pin 4",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN5": {
    +                    "description": "Set as output pin 5",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN6": {
    +                    "description": "Set as output pin 6",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN7": {
    +                    "description": "Set as output pin 7",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN8": {
    +                    "description": "Set as output pin 8",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN9": {
    +                    "description": "Set as output pin 9",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN10": {
    +                    "description": "Set as output pin 10",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN11": {
    +                    "description": "Set as output pin 11",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN12": {
    +                    "description": "Set as output pin 12",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN13": {
    +                    "description": "Set as output pin 13",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN14": {
    +                    "description": "Set as output pin 14",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN15": {
    +                    "description": "Set as output pin 15",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN16": {
    +                    "description": "Set as output pin 16",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN17": {
    +                    "description": "Set as output pin 17",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN18": {
    +                    "description": "Set as output pin 18",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN19": {
    +                    "description": "Set as output pin 19",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN20": {
    +                    "description": "Set as output pin 20",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN21": {
    +                    "description": "Set as output pin 21",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN22": {
    +                    "description": "Set as output pin 22",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN23": {
    +                    "description": "Set as output pin 23",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN24": {
    +                    "description": "Set as output pin 24",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN25": {
    +                    "description": "Set as output pin 25",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN26": {
    +                    "description": "Set as output pin 26",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN27": {
    +                    "description": "Set as output pin 27",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN28": {
    +                    "description": "Set as output pin 28",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN29": {
    +                    "description": "Set as output pin 29",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN30": {
    +                    "description": "Set as output pin 30",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN31": {
    +                    "description": "Set as output pin 31",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "DIRCLR": {
    +              "description": "DIR clear register",
    +              "offset": 1308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PIN0": {
    +                    "description": "Set as input pin 0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN1": {
    +                    "description": "Set as input pin 1",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN2": {
    +                    "description": "Set as input pin 2",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN3": {
    +                    "description": "Set as input pin 3",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN4": {
    +                    "description": "Set as input pin 4",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN5": {
    +                    "description": "Set as input pin 5",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN6": {
    +                    "description": "Set as input pin 6",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN7": {
    +                    "description": "Set as input pin 7",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN8": {
    +                    "description": "Set as input pin 8",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN9": {
    +                    "description": "Set as input pin 9",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN10": {
    +                    "description": "Set as input pin 10",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN11": {
    +                    "description": "Set as input pin 11",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN12": {
    +                    "description": "Set as input pin 12",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN13": {
    +                    "description": "Set as input pin 13",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN14": {
    +                    "description": "Set as input pin 14",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN15": {
    +                    "description": "Set as input pin 15",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN16": {
    +                    "description": "Set as input pin 16",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN17": {
    +                    "description": "Set as input pin 17",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN18": {
    +                    "description": "Set as input pin 18",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN19": {
    +                    "description": "Set as input pin 19",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN20": {
    +                    "description": "Set as input pin 20",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN21": {
    +                    "description": "Set as input pin 21",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN22": {
    +                    "description": "Set as input pin 22",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN23": {
    +                    "description": "Set as input pin 23",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN24": {
    +                    "description": "Set as input pin 24",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN25": {
    +                    "description": "Set as input pin 25",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN26": {
    +                    "description": "Set as input pin 26",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN27": {
    +                    "description": "Set as input pin 27",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN28": {
    +                    "description": "Set as input pin 28",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN29": {
    +                    "description": "Set as input pin 29",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN30": {
    +                    "description": "Set as input pin 30",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN31": {
    +                    "description": "Set as input pin 31",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "LATCH": {
    +              "description": "Latch register indicating what GPIO pins that have met the criteria set in the PIN_CNF[n].SENSE registers",
    +              "offset": 1312,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PIN0": {
    +                    "description": "Status on whether PIN0 has met criteria set in PIN_CNF0.SENSE register. Write '1' to clear.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN1": {
    +                    "description": "Status on whether PIN1 has met criteria set in PIN_CNF1.SENSE register. Write '1' to clear.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN2": {
    +                    "description": "Status on whether PIN2 has met criteria set in PIN_CNF2.SENSE register. Write '1' to clear.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN3": {
    +                    "description": "Status on whether PIN3 has met criteria set in PIN_CNF3.SENSE register. Write '1' to clear.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN4": {
    +                    "description": "Status on whether PIN4 has met criteria set in PIN_CNF4.SENSE register. Write '1' to clear.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN5": {
    +                    "description": "Status on whether PIN5 has met criteria set in PIN_CNF5.SENSE register. Write '1' to clear.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN6": {
    +                    "description": "Status on whether PIN6 has met criteria set in PIN_CNF6.SENSE register. Write '1' to clear.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN7": {
    +                    "description": "Status on whether PIN7 has met criteria set in PIN_CNF7.SENSE register. Write '1' to clear.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN8": {
    +                    "description": "Status on whether PIN8 has met criteria set in PIN_CNF8.SENSE register. Write '1' to clear.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN9": {
    +                    "description": "Status on whether PIN9 has met criteria set in PIN_CNF9.SENSE register. Write '1' to clear.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN10": {
    +                    "description": "Status on whether PIN10 has met criteria set in PIN_CNF10.SENSE register. Write '1' to clear.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN11": {
    +                    "description": "Status on whether PIN11 has met criteria set in PIN_CNF11.SENSE register. Write '1' to clear.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN12": {
    +                    "description": "Status on whether PIN12 has met criteria set in PIN_CNF12.SENSE register. Write '1' to clear.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN13": {
    +                    "description": "Status on whether PIN13 has met criteria set in PIN_CNF13.SENSE register. Write '1' to clear.",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN14": {
    +                    "description": "Status on whether PIN14 has met criteria set in PIN_CNF14.SENSE register. Write '1' to clear.",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN15": {
    +                    "description": "Status on whether PIN15 has met criteria set in PIN_CNF15.SENSE register. Write '1' to clear.",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN16": {
    +                    "description": "Status on whether PIN16 has met criteria set in PIN_CNF16.SENSE register. Write '1' to clear.",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN17": {
    +                    "description": "Status on whether PIN17 has met criteria set in PIN_CNF17.SENSE register. Write '1' to clear.",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN18": {
    +                    "description": "Status on whether PIN18 has met criteria set in PIN_CNF18.SENSE register. Write '1' to clear.",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN19": {
    +                    "description": "Status on whether PIN19 has met criteria set in PIN_CNF19.SENSE register. Write '1' to clear.",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN20": {
    +                    "description": "Status on whether PIN20 has met criteria set in PIN_CNF20.SENSE register. Write '1' to clear.",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN21": {
    +                    "description": "Status on whether PIN21 has met criteria set in PIN_CNF21.SENSE register. Write '1' to clear.",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN22": {
    +                    "description": "Status on whether PIN22 has met criteria set in PIN_CNF22.SENSE register. Write '1' to clear.",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN23": {
    +                    "description": "Status on whether PIN23 has met criteria set in PIN_CNF23.SENSE register. Write '1' to clear.",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN24": {
    +                    "description": "Status on whether PIN24 has met criteria set in PIN_CNF24.SENSE register. Write '1' to clear.",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN25": {
    +                    "description": "Status on whether PIN25 has met criteria set in PIN_CNF25.SENSE register. Write '1' to clear.",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN26": {
    +                    "description": "Status on whether PIN26 has met criteria set in PIN_CNF26.SENSE register. Write '1' to clear.",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN27": {
    +                    "description": "Status on whether PIN27 has met criteria set in PIN_CNF27.SENSE register. Write '1' to clear.",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN28": {
    +                    "description": "Status on whether PIN28 has met criteria set in PIN_CNF28.SENSE register. Write '1' to clear.",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN29": {
    +                    "description": "Status on whether PIN29 has met criteria set in PIN_CNF29.SENSE register. Write '1' to clear.",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN30": {
    +                    "description": "Status on whether PIN30 has met criteria set in PIN_CNF30.SENSE register. Write '1' to clear.",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN31": {
    +                    "description": "Status on whether PIN31 has met criteria set in PIN_CNF31.SENSE register. Write '1' to clear.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "DETECTMODE": {
    +              "description": "Select between default DETECT signal behaviour and LDETECT mode",
    +              "offset": 1316,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DETECTMODE": {
    +                    "description": "Select between default DETECT signal behaviour and LDETECT mode",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Default": {
    +                            "description": "DETECT directly connected to PIN DETECT signals",
    +                            "value": 0
    +                          },
    +                          "LDETECT": {
    +                            "description": "Use the latched LDETECT behaviour",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PIN_CNF": {
    +              "description": "Description collection[0]:  Configuration of GPIO pins",
    +              "offset": 1792,
    +              "size": 32,
    +              "count": 32,
    +              "reset_value": 2,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DIR": {
    +                    "description": "Pin direction. Same physical register as DIR register",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Configure pin as an input pin",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Configure pin as an output pin",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INPUT": {
    +                    "description": "Connect or disconnect input buffer",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Connect": {
    +                            "description": "Connect input buffer",
    +                            "value": 0
    +                          },
    +                          "Disconnect": {
    +                            "description": "Disconnect input buffer",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PULL": {
    +                    "description": "Pull configuration",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "No pull",
    +                            "value": 0
    +                          },
    +                          "Pulldown": {
    +                            "description": "Pull down on pin",
    +                            "value": 1
    +                          },
    +                          "Pullup": {
    +                            "description": "Pull up on pin",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive configuration",
    +                    "offset": 8,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "S0S1": {
    +                            "description": "Standard '0', standard '1'",
    +                            "value": 0
    +                          },
    +                          "H0S1": {
    +                            "description": "High drive '0', standard '1'",
    +                            "value": 1
    +                          },
    +                          "S0H1": {
    +                            "description": "Standard '0', high drive '1'",
    +                            "value": 2
    +                          },
    +                          "H0H1": {
    +                            "description": "High drive '0', high 'drive '1''",
    +                            "value": 3
    +                          },
    +                          "D0S1": {
    +                            "description": "Disconnect '0' standard '1' (normally used for wired-or connections)",
    +                            "value": 4
    +                          },
    +                          "D0H1": {
    +                            "description": "Disconnect '0', high drive '1' (normally used for wired-or connections)",
    +                            "value": 5
    +                          },
    +                          "S0D1": {
    +                            "description": "Standard '0'. disconnect '1' (normally used for wired-and connections)",
    +                            "value": 6
    +                          },
    +                          "H0D1": {
    +                            "description": "High drive '0', disconnect '1' (normally used for wired-and connections)",
    +                            "value": 7
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SENSE": {
    +                    "description": "Pin sensing mechanism",
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Sense for high level",
    +                            "value": 2
    +                          },
    +                          "Low": {
    +                            "description": "Sense for low level",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "FPU": {
    +        "description": "FPU",
    +        "children": {
    +          "registers": {
    +            "UNUSED": {
    +              "description": "Unused.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only"
    +            }
    +          }
    +        }
    +      },
    +      "I2S": {
    +        "description": "Inter-IC Sound",
    +        "children": {
    +          "registers": {
    +            "TASKS_START": {
    +              "description": "Starts continuous I2S transfer. Also starts MCK generator when this is enabled.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stops I2S transfer. Also stops MCK generator. Triggering this task will cause the {event:STOPPED} event to be generated.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_RXPTRUPD": {
    +              "description": "The RXD.PTR register has been copied to internal double-buffers. When the I2S module is started and RX is enabled, this event will be generated for every RXTXD.MAXCNT words that are received on the SDIN pin.",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_STOPPED": {
    +              "description": "I2S transfer stopped.",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_TXPTRUPD": {
    +              "description": "The TDX.PTR register has been copied to internal double-buffers. When the I2S module is started and TX is enabled, this event will be generated for every RXTXD.MAXCNT words that are sent on the SDOUT pin.",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "INTEN": {
    +              "description": "Enable or disable interrupt",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXPTRUPD": {
    +                    "description": "Enable or disable interrupt for RXPTRUPD event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STOPPED": {
    +                    "description": "Enable or disable interrupt for STOPPED event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXPTRUPD": {
    +                    "description": "Enable or disable interrupt for TXPTRUPD event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXPTRUPD": {
    +                    "description": "Write '1' to Enable interrupt for RXPTRUPD event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STOPPED": {
    +                    "description": "Write '1' to Enable interrupt for STOPPED event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXPTRUPD": {
    +                    "description": "Write '1' to Enable interrupt for TXPTRUPD event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXPTRUPD": {
    +                    "description": "Write '1' to Disable interrupt for RXPTRUPD event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STOPPED": {
    +                    "description": "Write '1' to Disable interrupt for STOPPED event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXPTRUPD": {
    +                    "description": "Write '1' to Disable interrupt for TXPTRUPD event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable I2S module.",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable I2S module.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "EGU0": {
    +        "description": "Event Generator Unit 0",
    +        "children": {
    +          "registers": {
    +            "TASKS_TRIGGER": {
    +              "description": "Description collection[0]:  Trigger 0 for triggering the corresponding TRIGGERED[0] event",
    +              "offset": 0,
    +              "size": 32,
    +              "count": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_TRIGGERED": {
    +              "description": "Description collection[0]:  Event number 0 generated by triggering the corresponding TRIGGER[0] task",
    +              "offset": 256,
    +              "size": 32,
    +              "count": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "INTEN": {
    +              "description": "Enable or disable interrupt",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TRIGGERED0": {
    +                    "description": "Enable or disable interrupt for TRIGGERED[0] event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED1": {
    +                    "description": "Enable or disable interrupt for TRIGGERED[1] event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED2": {
    +                    "description": "Enable or disable interrupt for TRIGGERED[2] event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED3": {
    +                    "description": "Enable or disable interrupt for TRIGGERED[3] event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED4": {
    +                    "description": "Enable or disable interrupt for TRIGGERED[4] event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED5": {
    +                    "description": "Enable or disable interrupt for TRIGGERED[5] event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED6": {
    +                    "description": "Enable or disable interrupt for TRIGGERED[6] event",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED7": {
    +                    "description": "Enable or disable interrupt for TRIGGERED[7] event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED8": {
    +                    "description": "Enable or disable interrupt for TRIGGERED[8] event",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED9": {
    +                    "description": "Enable or disable interrupt for TRIGGERED[9] event",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED10": {
    +                    "description": "Enable or disable interrupt for TRIGGERED[10] event",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED11": {
    +                    "description": "Enable or disable interrupt for TRIGGERED[11] event",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED12": {
    +                    "description": "Enable or disable interrupt for TRIGGERED[12] event",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED13": {
    +                    "description": "Enable or disable interrupt for TRIGGERED[13] event",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED14": {
    +                    "description": "Enable or disable interrupt for TRIGGERED[14] event",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED15": {
    +                    "description": "Enable or disable interrupt for TRIGGERED[15] event",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TRIGGERED0": {
    +                    "description": "Write '1' to Enable interrupt for TRIGGERED[0] event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED1": {
    +                    "description": "Write '1' to Enable interrupt for TRIGGERED[1] event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED2": {
    +                    "description": "Write '1' to Enable interrupt for TRIGGERED[2] event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED3": {
    +                    "description": "Write '1' to Enable interrupt for TRIGGERED[3] event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED4": {
    +                    "description": "Write '1' to Enable interrupt for TRIGGERED[4] event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED5": {
    +                    "description": "Write '1' to Enable interrupt for TRIGGERED[5] event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED6": {
    +                    "description": "Write '1' to Enable interrupt for TRIGGERED[6] event",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED7": {
    +                    "description": "Write '1' to Enable interrupt for TRIGGERED[7] event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED8": {
    +                    "description": "Write '1' to Enable interrupt for TRIGGERED[8] event",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED9": {
    +                    "description": "Write '1' to Enable interrupt for TRIGGERED[9] event",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED10": {
    +                    "description": "Write '1' to Enable interrupt for TRIGGERED[10] event",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED11": {
    +                    "description": "Write '1' to Enable interrupt for TRIGGERED[11] event",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED12": {
    +                    "description": "Write '1' to Enable interrupt for TRIGGERED[12] event",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED13": {
    +                    "description": "Write '1' to Enable interrupt for TRIGGERED[13] event",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED14": {
    +                    "description": "Write '1' to Enable interrupt for TRIGGERED[14] event",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED15": {
    +                    "description": "Write '1' to Enable interrupt for TRIGGERED[15] event",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TRIGGERED0": {
    +                    "description": "Write '1' to Disable interrupt for TRIGGERED[0] event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED1": {
    +                    "description": "Write '1' to Disable interrupt for TRIGGERED[1] event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED2": {
    +                    "description": "Write '1' to Disable interrupt for TRIGGERED[2] event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED3": {
    +                    "description": "Write '1' to Disable interrupt for TRIGGERED[3] event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED4": {
    +                    "description": "Write '1' to Disable interrupt for TRIGGERED[4] event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED5": {
    +                    "description": "Write '1' to Disable interrupt for TRIGGERED[5] event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED6": {
    +                    "description": "Write '1' to Disable interrupt for TRIGGERED[6] event",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED7": {
    +                    "description": "Write '1' to Disable interrupt for TRIGGERED[7] event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED8": {
    +                    "description": "Write '1' to Disable interrupt for TRIGGERED[8] event",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED9": {
    +                    "description": "Write '1' to Disable interrupt for TRIGGERED[9] event",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED10": {
    +                    "description": "Write '1' to Disable interrupt for TRIGGERED[10] event",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED11": {
    +                    "description": "Write '1' to Disable interrupt for TRIGGERED[11] event",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED12": {
    +                    "description": "Write '1' to Disable interrupt for TRIGGERED[12] event",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED13": {
    +                    "description": "Write '1' to Disable interrupt for TRIGGERED[13] event",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED14": {
    +                    "description": "Write '1' to Disable interrupt for TRIGGERED[14] event",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED15": {
    +                    "description": "Write '1' to Disable interrupt for TRIGGERED[15] event",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "MWU": {
    +        "description": "Memory Watch Unit",
    +        "children": {
    +          "registers": {
    +            "INTEN": {
    +              "description": "Enable or disable interrupt",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION0WA": {
    +                    "description": "Enable or disable interrupt for REGION[0].WA event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION0RA": {
    +                    "description": "Enable or disable interrupt for REGION[0].RA event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION1WA": {
    +                    "description": "Enable or disable interrupt for REGION[1].WA event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION1RA": {
    +                    "description": "Enable or disable interrupt for REGION[1].RA event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION2WA": {
    +                    "description": "Enable or disable interrupt for REGION[2].WA event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION2RA": {
    +                    "description": "Enable or disable interrupt for REGION[2].RA event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION3WA": {
    +                    "description": "Enable or disable interrupt for REGION[3].WA event",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION3RA": {
    +                    "description": "Enable or disable interrupt for REGION[3].RA event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION0WA": {
    +                    "description": "Enable or disable interrupt for PREGION[0].WA event",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION0RA": {
    +                    "description": "Enable or disable interrupt for PREGION[0].RA event",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION1WA": {
    +                    "description": "Enable or disable interrupt for PREGION[1].WA event",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION1RA": {
    +                    "description": "Enable or disable interrupt for PREGION[1].RA event",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION0WA": {
    +                    "description": "Write '1' to Enable interrupt for REGION[0].WA event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION0RA": {
    +                    "description": "Write '1' to Enable interrupt for REGION[0].RA event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION1WA": {
    +                    "description": "Write '1' to Enable interrupt for REGION[1].WA event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION1RA": {
    +                    "description": "Write '1' to Enable interrupt for REGION[1].RA event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION2WA": {
    +                    "description": "Write '1' to Enable interrupt for REGION[2].WA event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION2RA": {
    +                    "description": "Write '1' to Enable interrupt for REGION[2].RA event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION3WA": {
    +                    "description": "Write '1' to Enable interrupt for REGION[3].WA event",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION3RA": {
    +                    "description": "Write '1' to Enable interrupt for REGION[3].RA event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION0WA": {
    +                    "description": "Write '1' to Enable interrupt for PREGION[0].WA event",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION0RA": {
    +                    "description": "Write '1' to Enable interrupt for PREGION[0].RA event",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION1WA": {
    +                    "description": "Write '1' to Enable interrupt for PREGION[1].WA event",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION1RA": {
    +                    "description": "Write '1' to Enable interrupt for PREGION[1].RA event",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION0WA": {
    +                    "description": "Write '1' to Disable interrupt for REGION[0].WA event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION0RA": {
    +                    "description": "Write '1' to Disable interrupt for REGION[0].RA event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION1WA": {
    +                    "description": "Write '1' to Disable interrupt for REGION[1].WA event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION1RA": {
    +                    "description": "Write '1' to Disable interrupt for REGION[1].RA event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION2WA": {
    +                    "description": "Write '1' to Disable interrupt for REGION[2].WA event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION2RA": {
    +                    "description": "Write '1' to Disable interrupt for REGION[2].RA event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION3WA": {
    +                    "description": "Write '1' to Disable interrupt for REGION[3].WA event",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION3RA": {
    +                    "description": "Write '1' to Disable interrupt for REGION[3].RA event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION0WA": {
    +                    "description": "Write '1' to Disable interrupt for PREGION[0].WA event",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION0RA": {
    +                    "description": "Write '1' to Disable interrupt for PREGION[0].RA event",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION1WA": {
    +                    "description": "Write '1' to Disable interrupt for PREGION[1].WA event",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION1RA": {
    +                    "description": "Write '1' to Disable interrupt for PREGION[1].RA event",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "NMIEN": {
    +              "description": "Enable or disable non-maskable interrupt",
    +              "offset": 800,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION0WA": {
    +                    "description": "Enable or disable non-maskable interrupt for REGION[0].WA event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION0RA": {
    +                    "description": "Enable or disable non-maskable interrupt for REGION[0].RA event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION1WA": {
    +                    "description": "Enable or disable non-maskable interrupt for REGION[1].WA event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION1RA": {
    +                    "description": "Enable or disable non-maskable interrupt for REGION[1].RA event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION2WA": {
    +                    "description": "Enable or disable non-maskable interrupt for REGION[2].WA event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION2RA": {
    +                    "description": "Enable or disable non-maskable interrupt for REGION[2].RA event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION3WA": {
    +                    "description": "Enable or disable non-maskable interrupt for REGION[3].WA event",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION3RA": {
    +                    "description": "Enable or disable non-maskable interrupt for REGION[3].RA event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION0WA": {
    +                    "description": "Enable or disable non-maskable interrupt for PREGION[0].WA event",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION0RA": {
    +                    "description": "Enable or disable non-maskable interrupt for PREGION[0].RA event",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION1WA": {
    +                    "description": "Enable or disable non-maskable interrupt for PREGION[1].WA event",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION1RA": {
    +                    "description": "Enable or disable non-maskable interrupt for PREGION[1].RA event",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "NMIENSET": {
    +              "description": "Enable non-maskable interrupt",
    +              "offset": 804,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION0WA": {
    +                    "description": "Write '1' to Enable non-maskable interrupt for REGION[0].WA event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION0RA": {
    +                    "description": "Write '1' to Enable non-maskable interrupt for REGION[0].RA event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION1WA": {
    +                    "description": "Write '1' to Enable non-maskable interrupt for REGION[1].WA event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION1RA": {
    +                    "description": "Write '1' to Enable non-maskable interrupt for REGION[1].RA event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION2WA": {
    +                    "description": "Write '1' to Enable non-maskable interrupt for REGION[2].WA event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION2RA": {
    +                    "description": "Write '1' to Enable non-maskable interrupt for REGION[2].RA event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION3WA": {
    +                    "description": "Write '1' to Enable non-maskable interrupt for REGION[3].WA event",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION3RA": {
    +                    "description": "Write '1' to Enable non-maskable interrupt for REGION[3].RA event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION0WA": {
    +                    "description": "Write '1' to Enable non-maskable interrupt for PREGION[0].WA event",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION0RA": {
    +                    "description": "Write '1' to Enable non-maskable interrupt for PREGION[0].RA event",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION1WA": {
    +                    "description": "Write '1' to Enable non-maskable interrupt for PREGION[1].WA event",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION1RA": {
    +                    "description": "Write '1' to Enable non-maskable interrupt for PREGION[1].RA event",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "NMIENCLR": {
    +              "description": "Disable non-maskable interrupt",
    +              "offset": 808,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION0WA": {
    +                    "description": "Write '1' to Disable non-maskable interrupt for REGION[0].WA event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION0RA": {
    +                    "description": "Write '1' to Disable non-maskable interrupt for REGION[0].RA event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION1WA": {
    +                    "description": "Write '1' to Disable non-maskable interrupt for REGION[1].WA event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION1RA": {
    +                    "description": "Write '1' to Disable non-maskable interrupt for REGION[1].RA event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION2WA": {
    +                    "description": "Write '1' to Disable non-maskable interrupt for REGION[2].WA event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION2RA": {
    +                    "description": "Write '1' to Disable non-maskable interrupt for REGION[2].RA event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION3WA": {
    +                    "description": "Write '1' to Disable non-maskable interrupt for REGION[3].WA event",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION3RA": {
    +                    "description": "Write '1' to Disable non-maskable interrupt for REGION[3].RA event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION0WA": {
    +                    "description": "Write '1' to Disable non-maskable interrupt for PREGION[0].WA event",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION0RA": {
    +                    "description": "Write '1' to Disable non-maskable interrupt for PREGION[0].RA event",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION1WA": {
    +                    "description": "Write '1' to Disable non-maskable interrupt for PREGION[1].WA event",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION1RA": {
    +                    "description": "Write '1' to Disable non-maskable interrupt for PREGION[1].RA event",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "REGIONEN": {
    +              "description": "Enable/disable regions watch",
    +              "offset": 1296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RGN0WA": {
    +                    "description": "Enable/disable write access watch in region[0]",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable write access watch in this region",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable write access watch in this region",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN0RA": {
    +                    "description": "Enable/disable read access watch in region[0]",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable read access watch in this region",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable read access watch in this region",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN1WA": {
    +                    "description": "Enable/disable write access watch in region[1]",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable write access watch in this region",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable write access watch in this region",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN1RA": {
    +                    "description": "Enable/disable read access watch in region[1]",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable read access watch in this region",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable read access watch in this region",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN2WA": {
    +                    "description": "Enable/disable write access watch in region[2]",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable write access watch in this region",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable write access watch in this region",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN2RA": {
    +                    "description": "Enable/disable read access watch in region[2]",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable read access watch in this region",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable read access watch in this region",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN3WA": {
    +                    "description": "Enable/disable write access watch in region[3]",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable write access watch in this region",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable write access watch in this region",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN3RA": {
    +                    "description": "Enable/disable read access watch in region[3]",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable read access watch in this region",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable read access watch in this region",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PRGN0WA": {
    +                    "description": "Enable/disable write access watch in PREGION[0]",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable write access watch in this PREGION",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable write access watch in this PREGION",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PRGN0RA": {
    +                    "description": "Enable/disable read access watch in PREGION[0]",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable read access watch in this PREGION",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable read access watch in this PREGION",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PRGN1WA": {
    +                    "description": "Enable/disable write access watch in PREGION[1]",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable write access watch in this PREGION",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable write access watch in this PREGION",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PRGN1RA": {
    +                    "description": "Enable/disable read access watch in PREGION[1]",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable read access watch in this PREGION",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable read access watch in this PREGION",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "REGIONENSET": {
    +              "description": "Enable regions watch",
    +              "offset": 1300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RGN0WA": {
    +                    "description": "Enable write access watch in region[0]",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Write access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Write access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN0RA": {
    +                    "description": "Enable read access watch in region[0]",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN1WA": {
    +                    "description": "Enable write access watch in region[1]",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Write access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Write access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN1RA": {
    +                    "description": "Enable read access watch in region[1]",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN2WA": {
    +                    "description": "Enable write access watch in region[2]",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Write access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Write access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN2RA": {
    +                    "description": "Enable read access watch in region[2]",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN3WA": {
    +                    "description": "Enable write access watch in region[3]",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Write access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Write access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN3RA": {
    +                    "description": "Enable read access watch in region[3]",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PRGN0WA": {
    +                    "description": "Enable write access watch in PREGION[0]",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Write access watch in this PREGION is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Write access watch in this PREGION is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PRGN0RA": {
    +                    "description": "Enable read access watch in PREGION[0]",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read access watch in this PREGION is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read access watch in this PREGION is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PRGN1WA": {
    +                    "description": "Enable write access watch in PREGION[1]",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Write access watch in this PREGION is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Write access watch in this PREGION is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PRGN1RA": {
    +                    "description": "Enable read access watch in PREGION[1]",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read access watch in this PREGION is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read access watch in this PREGION is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "REGIONENCLR": {
    +              "description": "Disable regions watch",
    +              "offset": 1304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RGN0WA": {
    +                    "description": "Disable write access watch in region[0]",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Write access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Write access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN0RA": {
    +                    "description": "Disable read access watch in region[0]",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN1WA": {
    +                    "description": "Disable write access watch in region[1]",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Write access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Write access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN1RA": {
    +                    "description": "Disable read access watch in region[1]",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN2WA": {
    +                    "description": "Disable write access watch in region[2]",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Write access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Write access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN2RA": {
    +                    "description": "Disable read access watch in region[2]",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN3WA": {
    +                    "description": "Disable write access watch in region[3]",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Write access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Write access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN3RA": {
    +                    "description": "Disable read access watch in region[3]",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PRGN0WA": {
    +                    "description": "Disable write access watch in PREGION[0]",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Write access watch in this PREGION is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Write access watch in this PREGION is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PRGN0RA": {
    +                    "description": "Disable read access watch in PREGION[0]",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read access watch in this PREGION is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read access watch in this PREGION is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PRGN1WA": {
    +                    "description": "Disable write access watch in PREGION[1]",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Write access watch in this PREGION is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Write access watch in this PREGION is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PRGN1RA": {
    +                    "description": "Disable read access watch in PREGION[1]",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read access watch in this PREGION is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read access watch in this PREGION is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "PPI": {
    +        "description": "Programmable Peripheral Interconnect",
    +        "children": {
    +          "registers": {
    +            "CHEN": {
    +              "description": "Channel enable register",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH0": {
    +                    "description": "Enable or disable channel 0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH1": {
    +                    "description": "Enable or disable channel 1",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH2": {
    +                    "description": "Enable or disable channel 2",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH3": {
    +                    "description": "Enable or disable channel 3",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH4": {
    +                    "description": "Enable or disable channel 4",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH5": {
    +                    "description": "Enable or disable channel 5",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH6": {
    +                    "description": "Enable or disable channel 6",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH7": {
    +                    "description": "Enable or disable channel 7",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH8": {
    +                    "description": "Enable or disable channel 8",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH9": {
    +                    "description": "Enable or disable channel 9",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH10": {
    +                    "description": "Enable or disable channel 10",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH11": {
    +                    "description": "Enable or disable channel 11",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH12": {
    +                    "description": "Enable or disable channel 12",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH13": {
    +                    "description": "Enable or disable channel 13",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH14": {
    +                    "description": "Enable or disable channel 14",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH15": {
    +                    "description": "Enable or disable channel 15",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH16": {
    +                    "description": "Enable or disable channel 16",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH17": {
    +                    "description": "Enable or disable channel 17",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH18": {
    +                    "description": "Enable or disable channel 18",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH19": {
    +                    "description": "Enable or disable channel 19",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH20": {
    +                    "description": "Enable or disable channel 20",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH21": {
    +                    "description": "Enable or disable channel 21",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH22": {
    +                    "description": "Enable or disable channel 22",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH23": {
    +                    "description": "Enable or disable channel 23",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH24": {
    +                    "description": "Enable or disable channel 24",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH25": {
    +                    "description": "Enable or disable channel 25",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH26": {
    +                    "description": "Enable or disable channel 26",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH27": {
    +                    "description": "Enable or disable channel 27",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH28": {
    +                    "description": "Enable or disable channel 28",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH29": {
    +                    "description": "Enable or disable channel 29",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH30": {
    +                    "description": "Enable or disable channel 30",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH31": {
    +                    "description": "Enable or disable channel 31",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CHENSET": {
    +              "description": "Channel enable set register",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH0": {
    +                    "description": "Channel 0 enable set register.  Writing '0' has no effect",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH1": {
    +                    "description": "Channel 1 enable set register.  Writing '0' has no effect",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH2": {
    +                    "description": "Channel 2 enable set register.  Writing '0' has no effect",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH3": {
    +                    "description": "Channel 3 enable set register.  Writing '0' has no effect",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH4": {
    +                    "description": "Channel 4 enable set register.  Writing '0' has no effect",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH5": {
    +                    "description": "Channel 5 enable set register.  Writing '0' has no effect",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH6": {
    +                    "description": "Channel 6 enable set register.  Writing '0' has no effect",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH7": {
    +                    "description": "Channel 7 enable set register.  Writing '0' has no effect",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH8": {
    +                    "description": "Channel 8 enable set register.  Writing '0' has no effect",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH9": {
    +                    "description": "Channel 9 enable set register.  Writing '0' has no effect",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH10": {
    +                    "description": "Channel 10 enable set register.  Writing '0' has no effect",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH11": {
    +                    "description": "Channel 11 enable set register.  Writing '0' has no effect",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH12": {
    +                    "description": "Channel 12 enable set register.  Writing '0' has no effect",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH13": {
    +                    "description": "Channel 13 enable set register.  Writing '0' has no effect",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH14": {
    +                    "description": "Channel 14 enable set register.  Writing '0' has no effect",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH15": {
    +                    "description": "Channel 15 enable set register.  Writing '0' has no effect",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH16": {
    +                    "description": "Channel 16 enable set register.  Writing '0' has no effect",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH17": {
    +                    "description": "Channel 17 enable set register.  Writing '0' has no effect",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH18": {
    +                    "description": "Channel 18 enable set register.  Writing '0' has no effect",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH19": {
    +                    "description": "Channel 19 enable set register.  Writing '0' has no effect",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH20": {
    +                    "description": "Channel 20 enable set register.  Writing '0' has no effect",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH21": {
    +                    "description": "Channel 21 enable set register.  Writing '0' has no effect",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH22": {
    +                    "description": "Channel 22 enable set register.  Writing '0' has no effect",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH23": {
    +                    "description": "Channel 23 enable set register.  Writing '0' has no effect",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH24": {
    +                    "description": "Channel 24 enable set register.  Writing '0' has no effect",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH25": {
    +                    "description": "Channel 25 enable set register.  Writing '0' has no effect",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH26": {
    +                    "description": "Channel 26 enable set register.  Writing '0' has no effect",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH27": {
    +                    "description": "Channel 27 enable set register.  Writing '0' has no effect",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH28": {
    +                    "description": "Channel 28 enable set register.  Writing '0' has no effect",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH29": {
    +                    "description": "Channel 29 enable set register.  Writing '0' has no effect",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH30": {
    +                    "description": "Channel 30 enable set register.  Writing '0' has no effect",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH31": {
    +                    "description": "Channel 31 enable set register.  Writing '0' has no effect",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CHENCLR": {
    +              "description": "Channel enable clear register",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH0": {
    +                    "description": "Channel 0 enable clear register.  Writing '0' has no effect",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH1": {
    +                    "description": "Channel 1 enable clear register.  Writing '0' has no effect",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH2": {
    +                    "description": "Channel 2 enable clear register.  Writing '0' has no effect",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH3": {
    +                    "description": "Channel 3 enable clear register.  Writing '0' has no effect",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH4": {
    +                    "description": "Channel 4 enable clear register.  Writing '0' has no effect",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH5": {
    +                    "description": "Channel 5 enable clear register.  Writing '0' has no effect",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH6": {
    +                    "description": "Channel 6 enable clear register.  Writing '0' has no effect",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH7": {
    +                    "description": "Channel 7 enable clear register.  Writing '0' has no effect",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH8": {
    +                    "description": "Channel 8 enable clear register.  Writing '0' has no effect",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH9": {
    +                    "description": "Channel 9 enable clear register.  Writing '0' has no effect",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH10": {
    +                    "description": "Channel 10 enable clear register.  Writing '0' has no effect",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH11": {
    +                    "description": "Channel 11 enable clear register.  Writing '0' has no effect",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH12": {
    +                    "description": "Channel 12 enable clear register.  Writing '0' has no effect",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH13": {
    +                    "description": "Channel 13 enable clear register.  Writing '0' has no effect",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH14": {
    +                    "description": "Channel 14 enable clear register.  Writing '0' has no effect",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH15": {
    +                    "description": "Channel 15 enable clear register.  Writing '0' has no effect",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH16": {
    +                    "description": "Channel 16 enable clear register.  Writing '0' has no effect",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH17": {
    +                    "description": "Channel 17 enable clear register.  Writing '0' has no effect",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH18": {
    +                    "description": "Channel 18 enable clear register.  Writing '0' has no effect",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH19": {
    +                    "description": "Channel 19 enable clear register.  Writing '0' has no effect",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH20": {
    +                    "description": "Channel 20 enable clear register.  Writing '0' has no effect",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH21": {
    +                    "description": "Channel 21 enable clear register.  Writing '0' has no effect",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH22": {
    +                    "description": "Channel 22 enable clear register.  Writing '0' has no effect",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH23": {
    +                    "description": "Channel 23 enable clear register.  Writing '0' has no effect",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH24": {
    +                    "description": "Channel 24 enable clear register.  Writing '0' has no effect",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH25": {
    +                    "description": "Channel 25 enable clear register.  Writing '0' has no effect",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH26": {
    +                    "description": "Channel 26 enable clear register.  Writing '0' has no effect",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH27": {
    +                    "description": "Channel 27 enable clear register.  Writing '0' has no effect",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH28": {
    +                    "description": "Channel 28 enable clear register.  Writing '0' has no effect",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH29": {
    +                    "description": "Channel 29 enable clear register.  Writing '0' has no effect",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH30": {
    +                    "description": "Channel 30 enable clear register.  Writing '0' has no effect",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH31": {
    +                    "description": "Channel 31 enable clear register.  Writing '0' has no effect",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CHG": {
    +              "description": "Description collection[0]:  Channel group 0",
    +              "offset": 2048,
    +              "size": 32,
    +              "count": 6,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH0": {
    +                    "description": "Include or exclude channel 0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH1": {
    +                    "description": "Include or exclude channel 1",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH2": {
    +                    "description": "Include or exclude channel 2",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH3": {
    +                    "description": "Include or exclude channel 3",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH4": {
    +                    "description": "Include or exclude channel 4",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH5": {
    +                    "description": "Include or exclude channel 5",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH6": {
    +                    "description": "Include or exclude channel 6",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH7": {
    +                    "description": "Include or exclude channel 7",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH8": {
    +                    "description": "Include or exclude channel 8",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH9": {
    +                    "description": "Include or exclude channel 9",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH10": {
    +                    "description": "Include or exclude channel 10",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH11": {
    +                    "description": "Include or exclude channel 11",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH12": {
    +                    "description": "Include or exclude channel 12",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH13": {
    +                    "description": "Include or exclude channel 13",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH14": {
    +                    "description": "Include or exclude channel 14",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH15": {
    +                    "description": "Include or exclude channel 15",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH16": {
    +                    "description": "Include or exclude channel 16",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH17": {
    +                    "description": "Include or exclude channel 17",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH18": {
    +                    "description": "Include or exclude channel 18",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH19": {
    +                    "description": "Include or exclude channel 19",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH20": {
    +                    "description": "Include or exclude channel 20",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH21": {
    +                    "description": "Include or exclude channel 21",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH22": {
    +                    "description": "Include or exclude channel 22",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH23": {
    +                    "description": "Include or exclude channel 23",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH24": {
    +                    "description": "Include or exclude channel 24",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH25": {
    +                    "description": "Include or exclude channel 25",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH26": {
    +                    "description": "Include or exclude channel 26",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH27": {
    +                    "description": "Include or exclude channel 27",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH28": {
    +                    "description": "Include or exclude channel 28",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH29": {
    +                    "description": "Include or exclude channel 29",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH30": {
    +                    "description": "Include or exclude channel 30",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH31": {
    +                    "description": "Include or exclude channel 31",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "NFCT": {
    +        "description": "NFC-A compatible radio",
    +        "children": {
    +          "registers": {
    +            "TASKS_ACTIVATE": {
    +              "description": "Activate NFC peripheral for incoming and outgoing frames, change state to activated",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_DISABLE": {
    +              "description": "Disable NFC peripheral",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_SENSE": {
    +              "description": "Enable NFC sense field mode, change state to sense mode",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_STARTTX": {
    +              "description": "Start transmission of a outgoing frame, change state to transmit",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_ENABLERXDATA": {
    +              "description": "Initializes the EasyDMA for receive.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_GOIDLE": {
    +              "description": "Force state machine to IDLE state",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_GOSLEEP": {
    +              "description": "Force state machine to SLEEP_A state",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_READY": {
    +              "description": "The NFC peripheral is ready to receive and send frames",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_FIELDDETECTED": {
    +              "description": "Remote NFC field detected",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_FIELDLOST": {
    +              "description": "Remote NFC field lost",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_TXFRAMESTART": {
    +              "description": "Marks the start of the first symbol of a transmitted frame",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_TXFRAMEEND": {
    +              "description": "Marks the end of the last transmitted on-air symbol of a frame",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_RXFRAMESTART": {
    +              "description": "Marks the end of the first symbol of a received frame",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_RXFRAMEEND": {
    +              "description": "Received data have been checked (CRC, parity) and transferred to RAM, and EasyDMA has ended accessing the RX buffer",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_ERROR": {
    +              "description": "NFC error reported. The ERRORSTATUS register contains details on the source of the error.",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_RXERROR": {
    +              "description": "NFC RX frame error reported. The FRAMESTATUS.RX register contains details on the source of the error.",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_ENDRX": {
    +              "description": "RX buffer (as defined by PACKETPTR and MAXLEN) in Data RAM full.",
    +              "offset": 300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_ENDTX": {
    +              "description": "Transmission of data in RAM has ended, and EasyDMA has ended accessing the TX buffer",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_AUTOCOLRESSTARTED": {
    +              "description": "Auto collision resolution process has started",
    +              "offset": 312,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_COLLISION": {
    +              "description": "NFC Auto collision resolution error reported.",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_SELECTED": {
    +              "description": "NFC Auto collision resolution successfully completed",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_STARTED": {
    +              "description": "EasyDMA is ready to receive or send frames.",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "SHORTS": {
    +              "description": "Shortcut register",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FIELDDETECTED_ACTIVATE": {
    +                    "description": "Shortcut between FIELDDETECTED event and ACTIVATE task",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FIELDLOST_SENSE": {
    +                    "description": "Shortcut between FIELDLOST event and SENSE task",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTEN": {
    +              "description": "Enable or disable interrupt",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "Enable or disable interrupt for READY event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FIELDDETECTED": {
    +                    "description": "Enable or disable interrupt for FIELDDETECTED event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FIELDLOST": {
    +                    "description": "Enable or disable interrupt for FIELDLOST event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXFRAMESTART": {
    +                    "description": "Enable or disable interrupt for TXFRAMESTART event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXFRAMEEND": {
    +                    "description": "Enable or disable interrupt for TXFRAMEEND event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXFRAMESTART": {
    +                    "description": "Enable or disable interrupt for RXFRAMESTART event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXFRAMEEND": {
    +                    "description": "Enable or disable interrupt for RXFRAMEEND event",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Enable or disable interrupt for ERROR event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXERROR": {
    +                    "description": "Enable or disable interrupt for RXERROR event",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDRX": {
    +                    "description": "Enable or disable interrupt for ENDRX event",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDTX": {
    +                    "description": "Enable or disable interrupt for ENDTX event",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AUTOCOLRESSTARTED": {
    +                    "description": "Enable or disable interrupt for AUTOCOLRESSTARTED event",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COLLISION": {
    +                    "description": "Enable or disable interrupt for COLLISION event",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SELECTED": {
    +                    "description": "Enable or disable interrupt for SELECTED event",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STARTED": {
    +                    "description": "Enable or disable interrupt for STARTED event",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "Write '1' to Enable interrupt for READY event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FIELDDETECTED": {
    +                    "description": "Write '1' to Enable interrupt for FIELDDETECTED event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FIELDLOST": {
    +                    "description": "Write '1' to Enable interrupt for FIELDLOST event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXFRAMESTART": {
    +                    "description": "Write '1' to Enable interrupt for TXFRAMESTART event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXFRAMEEND": {
    +                    "description": "Write '1' to Enable interrupt for TXFRAMEEND event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXFRAMESTART": {
    +                    "description": "Write '1' to Enable interrupt for RXFRAMESTART event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXFRAMEEND": {
    +                    "description": "Write '1' to Enable interrupt for RXFRAMEEND event",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Write '1' to Enable interrupt for ERROR event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXERROR": {
    +                    "description": "Write '1' to Enable interrupt for RXERROR event",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDRX": {
    +                    "description": "Write '1' to Enable interrupt for ENDRX event",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDTX": {
    +                    "description": "Write '1' to Enable interrupt for ENDTX event",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AUTOCOLRESSTARTED": {
    +                    "description": "Write '1' to Enable interrupt for AUTOCOLRESSTARTED event",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COLLISION": {
    +                    "description": "Write '1' to Enable interrupt for COLLISION event",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SELECTED": {
    +                    "description": "Write '1' to Enable interrupt for SELECTED event",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STARTED": {
    +                    "description": "Write '1' to Enable interrupt for STARTED event",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "Write '1' to Disable interrupt for READY event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FIELDDETECTED": {
    +                    "description": "Write '1' to Disable interrupt for FIELDDETECTED event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FIELDLOST": {
    +                    "description": "Write '1' to Disable interrupt for FIELDLOST event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXFRAMESTART": {
    +                    "description": "Write '1' to Disable interrupt for TXFRAMESTART event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXFRAMEEND": {
    +                    "description": "Write '1' to Disable interrupt for TXFRAMEEND event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXFRAMESTART": {
    +                    "description": "Write '1' to Disable interrupt for RXFRAMESTART event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXFRAMEEND": {
    +                    "description": "Write '1' to Disable interrupt for RXFRAMEEND event",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Write '1' to Disable interrupt for ERROR event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXERROR": {
    +                    "description": "Write '1' to Disable interrupt for RXERROR event",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDRX": {
    +                    "description": "Write '1' to Disable interrupt for ENDRX event",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDTX": {
    +                    "description": "Write '1' to Disable interrupt for ENDTX event",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AUTOCOLRESSTARTED": {
    +                    "description": "Write '1' to Disable interrupt for AUTOCOLRESSTARTED event",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COLLISION": {
    +                    "description": "Write '1' to Disable interrupt for COLLISION event",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SELECTED": {
    +                    "description": "Write '1' to Disable interrupt for SELECTED event",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STARTED": {
    +                    "description": "Write '1' to Disable interrupt for STARTED event",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ERRORSTATUS": {
    +              "description": "NFC Error Status register",
    +              "offset": 1028,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FRAMEDELAYTIMEOUT": {
    +                    "description": "No STARTTX task triggered before expiration of the time set in FRAMEDELAYMAX",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "NFCFIELDTOOSTRONG": {
    +                    "description": "Field level is too high at max load resistance",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "NFCFIELDTOOWEAK": {
    +                    "description": "Field level is too low at min load resistance",
    +                    "offset": 3,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CURRENTLOADCTRL": {
    +              "description": "Current value driven to the NFC Load Control",
    +              "offset": 1072,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CURRENTLOADCTRL": {
    +                    "description": "Current value driven to the NFC Load Control",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "FIELDPRESENT": {
    +              "description": "Indicates the presence or not of a valid field",
    +              "offset": 1084,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "FIELDPRESENT": {
    +                    "description": "Indicates the presence or not of a valid field. Available only in the activated state.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoField": {
    +                            "description": "No valid field detected",
    +                            "value": 0
    +                          },
    +                          "FieldPresent": {
    +                            "description": "Valid field detected",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LOCKDETECT": {
    +                    "description": "Indicates if the low level has locked to the field",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLocked": {
    +                            "description": "Not locked to field",
    +                            "value": 0
    +                          },
    +                          "Locked": {
    +                            "description": "Locked to field",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "FRAMEDELAYMIN": {
    +              "description": "Minimum frame delay",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 1152,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FRAMEDELAYMIN": {
    +                    "description": "Minimum frame delay in number of 13.56 MHz clocks",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FRAMEDELAYMAX": {
    +              "description": "Maximum frame delay",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 4096,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FRAMEDELAYMAX": {
    +                    "description": "Maximum frame delay in number of 13.56 MHz clocks",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FRAMEDELAYMODE": {
    +              "description": "Configuration register for the Frame Delay Timer",
    +              "offset": 1292,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FRAMEDELAYMODE": {
    +                    "description": "Configuration register for the Frame Delay Timer",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "FreeRun": {
    +                            "description": "Transmission is independent of frame timer and will start when the STARTTX task is triggered. No timeout.",
    +                            "value": 0
    +                          },
    +                          "Window": {
    +                            "description": "Frame is transmitted between FRAMEDELAYMIN and FRAMEDELAYMAX",
    +                            "value": 1
    +                          },
    +                          "ExactVal": {
    +                            "description": "Frame is transmitted exactly at FRAMEDELAYMAX",
    +                            "value": 2
    +                          },
    +                          "WindowGrid": {
    +                            "description": "Frame is transmitted on a bit grid between FRAMEDELAYMIN and FRAMEDELAYMAX",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PACKETPTR": {
    +              "description": "Packet pointer for TXD and RXD data storage in Data RAM",
    +              "offset": 1296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PTR": {
    +                    "description": "Packet pointer for TXD and RXD data storage in Data RAM. This address is a byte aligned RAM address.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MAXLEN": {
    +              "description": "Size of allocated for TXD and RXD data storage buffer in Data RAM",
    +              "offset": 1300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MAXLEN": {
    +                    "description": "Size of allocated for TXD and RXD data storage buffer in Data RAM",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "NFCID1_LAST": {
    +              "description": "Last NFCID1 part (4, 7 or 10 bytes ID)",
    +              "offset": 1424,
    +              "size": 32,
    +              "reset_value": 25443,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NFCID1_Z": {
    +                    "description": "NFCID1 byte Z (very last byte sent)",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "NFCID1_Y": {
    +                    "description": "NFCID1 byte Y",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "NFCID1_X": {
    +                    "description": "NFCID1 byte X",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "NFCID1_W": {
    +                    "description": "NFCID1 byte W",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "NFCID1_2ND_LAST": {
    +              "description": "Second last NFCID1 part (7 or 10 bytes ID)",
    +              "offset": 1428,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NFCID1_V": {
    +                    "description": "NFCID1 byte V",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "NFCID1_U": {
    +                    "description": "NFCID1 byte U",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "NFCID1_T": {
    +                    "description": "NFCID1 byte T",
    +                    "offset": 16,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "NFCID1_3RD_LAST": {
    +              "description": "Third last NFCID1 part (10 bytes ID)",
    +              "offset": 1432,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NFCID1_S": {
    +                    "description": "NFCID1 byte S",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "NFCID1_R": {
    +                    "description": "NFCID1 byte R",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "NFCID1_Q": {
    +                    "description": "NFCID1 byte Q",
    +                    "offset": 16,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SENSRES": {
    +              "description": "NFC-A SENS_RES auto-response settings",
    +              "offset": 1440,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BITFRAMESDD": {
    +                    "description": "Bit frame SDD as defined by the b5:b1 of byte 1 in SENS_RES response in the NFC Forum, NFC Digital Protocol Technical Specification",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SDD00000": {
    +                            "description": "SDD pattern 00000",
    +                            "value": 0
    +                          },
    +                          "SDD00001": {
    +                            "description": "SDD pattern 00001",
    +                            "value": 1
    +                          },
    +                          "SDD00010": {
    +                            "description": "SDD pattern 00010",
    +                            "value": 2
    +                          },
    +                          "SDD00100": {
    +                            "description": "SDD pattern 00100",
    +                            "value": 4
    +                          },
    +                          "SDD01000": {
    +                            "description": "SDD pattern 01000",
    +                            "value": 8
    +                          },
    +                          "SDD10000": {
    +                            "description": "SDD pattern 10000",
    +                            "value": 16
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RFU5": {
    +                    "description": "Reserved for future use. Shall be 0.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NFCIDSIZE": {
    +                    "description": "NFCID1 size. This value is used by the Auto collision resolution engine.",
    +                    "offset": 6,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NFCID1Single": {
    +                            "description": "NFCID1 size: single (4 bytes)",
    +                            "value": 0
    +                          },
    +                          "NFCID1Double": {
    +                            "description": "NFCID1 size: double (7 bytes)",
    +                            "value": 1
    +                          },
    +                          "NFCID1Triple": {
    +                            "description": "NFCID1 size: triple (10 bytes)",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PLATFCONFIG": {
    +                    "description": "Tag platform configuration as defined by the b4:b1 of byte 2 in SENS_RES response in the NFC Forum, NFC Digital Protocol Technical Specification",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "RFU74": {
    +                    "description": "Reserved for future use. Shall be 0.",
    +                    "offset": 12,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "SELRES": {
    +              "description": "NFC-A SEL_RES auto-response settings",
    +              "offset": 1444,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RFU10": {
    +                    "description": "Reserved for future use. Shall be 0.",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "CASCADE": {
    +                    "description": "Cascade bit (controlled by hardware, write has no effect)",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Complete": {
    +                            "description": "NFCID1 complete",
    +                            "value": 0
    +                          },
    +                          "NotComplete": {
    +                            "description": "NFCID1 not complete",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RFU43": {
    +                    "description": "Reserved for future use. Shall be 0.",
    +                    "offset": 3,
    +                    "size": 2
    +                  },
    +                  "PROTOCOL": {
    +                    "description": "Protocol as defined by the b7:b6 of SEL_RES response in the NFC Forum, NFC Digital Protocol Technical Specification",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "RFU7": {
    +                    "description": "Reserved for future use. Shall be 0.",
    +                    "offset": 7,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "GPIOTE": {
    +        "description": "GPIO Tasks and Events",
    +        "children": {
    +          "registers": {
    +            "TASKS_OUT": {
    +              "description": "Description collection[0]:  Task for writing to pin specified in CONFIG[0].PSEL. Action on pin is configured in CONFIG[0].POLARITY.",
    +              "offset": 0,
    +              "size": 32,
    +              "count": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_SET": {
    +              "description": "Description collection[0]:  Task for writing to pin specified in CONFIG[0].PSEL. Action on pin is to set it high.",
    +              "offset": 48,
    +              "size": 32,
    +              "count": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_CLR": {
    +              "description": "Description collection[0]:  Task for writing to pin specified in CONFIG[0].PSEL. Action on pin is to set it low.",
    +              "offset": 96,
    +              "size": 32,
    +              "count": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_IN": {
    +              "description": "Description collection[0]:  Event generated from pin specified in CONFIG[0].PSEL",
    +              "offset": 256,
    +              "size": 32,
    +              "count": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_PORT": {
    +              "description": "Event generated from multiple input GPIO pins with SENSE mechanism enabled",
    +              "offset": 380,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN0": {
    +                    "description": "Write '1' to Enable interrupt for IN[0] event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN1": {
    +                    "description": "Write '1' to Enable interrupt for IN[1] event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN2": {
    +                    "description": "Write '1' to Enable interrupt for IN[2] event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN3": {
    +                    "description": "Write '1' to Enable interrupt for IN[3] event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN4": {
    +                    "description": "Write '1' to Enable interrupt for IN[4] event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN5": {
    +                    "description": "Write '1' to Enable interrupt for IN[5] event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN6": {
    +                    "description": "Write '1' to Enable interrupt for IN[6] event",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN7": {
    +                    "description": "Write '1' to Enable interrupt for IN[7] event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PORT": {
    +                    "description": "Write '1' to Enable interrupt for PORT event",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN0": {
    +                    "description": "Write '1' to Disable interrupt for IN[0] event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN1": {
    +                    "description": "Write '1' to Disable interrupt for IN[1] event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN2": {
    +                    "description": "Write '1' to Disable interrupt for IN[2] event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN3": {
    +                    "description": "Write '1' to Disable interrupt for IN[3] event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN4": {
    +                    "description": "Write '1' to Disable interrupt for IN[4] event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN5": {
    +                    "description": "Write '1' to Disable interrupt for IN[5] event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN6": {
    +                    "description": "Write '1' to Disable interrupt for IN[6] event",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN7": {
    +                    "description": "Write '1' to Disable interrupt for IN[7] event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PORT": {
    +                    "description": "Write '1' to Disable interrupt for PORT event",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CONFIG": {
    +              "description": "Description collection[0]:  Configuration for OUT[n], SET[n] and CLR[n] tasks and IN[n] event",
    +              "offset": 1296,
    +              "size": 32,
    +              "count": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MODE": {
    +                    "description": "Mode",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled. Pin specified by PSEL will not be acquired by the GPIOTE module.",
    +                            "value": 0
    +                          },
    +                          "Event": {
    +                            "description": "Event mode",
    +                            "value": 1
    +                          },
    +                          "Task": {
    +                            "description": "Task mode",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PSEL": {
    +                    "description": "GPIO number associated with SET[n], CLR[n] and OUT[n] tasks and IN[n] event",
    +                    "offset": 8,
    +                    "size": 5
    +                  },
    +                  "POLARITY": {
    +                    "description": "When In task mode: Operation to be performed on output when OUT[n] task is triggered. When In event mode: Operation on input that shall trigger IN[n] event.",
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "None": {
    +                            "description": "Task mode: No effect on pin from OUT[n] task. Event mode: no IN[n] event generated on pin activity.",
    +                            "value": 0
    +                          },
    +                          "LoToHi": {
    +                            "description": "Task mode: Set pin from OUT[n] task. Event mode: Generate IN[n] event when rising edge on pin.",
    +                            "value": 1
    +                          },
    +                          "HiToLo": {
    +                            "description": "Task mode: Clear pin from OUT[n] task. Event mode: Generate IN[n] event when falling edge on pin.",
    +                            "value": 2
    +                          },
    +                          "Toggle": {
    +                            "description": "Task mode: Toggle pin from OUT[n]. Event mode: Generate IN[n] when any change on pin.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTINIT": {
    +                    "description": "When in task mode: Initial value of the output when the GPIOTE channel is configured. When in event mode: No effect.",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Task mode: Initial value of pin before task triggering is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Task mode: Initial value of pin before task triggering is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SAADC": {
    +        "description": "Analog to Digital Converter",
    +        "children": {
    +          "registers": {
    +            "TASKS_START": {
    +              "description": "Start the ADC and prepare the result buffer in RAM",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_SAMPLE": {
    +              "description": "Take one ADC sample, if scan is enabled all channels are sampled",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stop the ADC and terminate any on-going conversion",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_CALIBRATEOFFSET": {
    +              "description": "Starts offset auto-calibration",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_STARTED": {
    +              "description": "The ADC has started",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_END": {
    +              "description": "The ADC has filled up the Result buffer",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_DONE": {
    +              "description": "A conversion task has been completed. Depending on the mode, multiple conversions might be needed for a result to be transferred to RAM.",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_RESULTDONE": {
    +              "description": "A result is ready to get transferred to RAM.",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_CALIBRATEDONE": {
    +              "description": "Calibration is complete",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_STOPPED": {
    +              "description": "The ADC has stopped",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "INTEN": {
    +              "description": "Enable or disable interrupt",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STARTED": {
    +                    "description": "Enable or disable interrupt for STARTED event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "END": {
    +                    "description": "Enable or disable interrupt for END event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DONE": {
    +                    "description": "Enable or disable interrupt for DONE event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESULTDONE": {
    +                    "description": "Enable or disable interrupt for RESULTDONE event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CALIBRATEDONE": {
    +                    "description": "Enable or disable interrupt for CALIBRATEDONE event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STOPPED": {
    +                    "description": "Enable or disable interrupt for STOPPED event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH0LIMITH": {
    +                    "description": "Enable or disable interrupt for CH[0].LIMITH event",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH0LIMITL": {
    +                    "description": "Enable or disable interrupt for CH[0].LIMITL event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH1LIMITH": {
    +                    "description": "Enable or disable interrupt for CH[1].LIMITH event",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH1LIMITL": {
    +                    "description": "Enable or disable interrupt for CH[1].LIMITL event",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH2LIMITH": {
    +                    "description": "Enable or disable interrupt for CH[2].LIMITH event",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH2LIMITL": {
    +                    "description": "Enable or disable interrupt for CH[2].LIMITL event",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH3LIMITH": {
    +                    "description": "Enable or disable interrupt for CH[3].LIMITH event",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH3LIMITL": {
    +                    "description": "Enable or disable interrupt for CH[3].LIMITL event",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH4LIMITH": {
    +                    "description": "Enable or disable interrupt for CH[4].LIMITH event",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH4LIMITL": {
    +                    "description": "Enable or disable interrupt for CH[4].LIMITL event",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH5LIMITH": {
    +                    "description": "Enable or disable interrupt for CH[5].LIMITH event",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH5LIMITL": {
    +                    "description": "Enable or disable interrupt for CH[5].LIMITL event",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH6LIMITH": {
    +                    "description": "Enable or disable interrupt for CH[6].LIMITH event",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH6LIMITL": {
    +                    "description": "Enable or disable interrupt for CH[6].LIMITL event",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH7LIMITH": {
    +                    "description": "Enable or disable interrupt for CH[7].LIMITH event",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH7LIMITL": {
    +                    "description": "Enable or disable interrupt for CH[7].LIMITL event",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STARTED": {
    +                    "description": "Write '1' to Enable interrupt for STARTED event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "END": {
    +                    "description": "Write '1' to Enable interrupt for END event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DONE": {
    +                    "description": "Write '1' to Enable interrupt for DONE event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESULTDONE": {
    +                    "description": "Write '1' to Enable interrupt for RESULTDONE event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CALIBRATEDONE": {
    +                    "description": "Write '1' to Enable interrupt for CALIBRATEDONE event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STOPPED": {
    +                    "description": "Write '1' to Enable interrupt for STOPPED event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH0LIMITH": {
    +                    "description": "Write '1' to Enable interrupt for CH[0].LIMITH event",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH0LIMITL": {
    +                    "description": "Write '1' to Enable interrupt for CH[0].LIMITL event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH1LIMITH": {
    +                    "description": "Write '1' to Enable interrupt for CH[1].LIMITH event",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH1LIMITL": {
    +                    "description": "Write '1' to Enable interrupt for CH[1].LIMITL event",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH2LIMITH": {
    +                    "description": "Write '1' to Enable interrupt for CH[2].LIMITH event",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH2LIMITL": {
    +                    "description": "Write '1' to Enable interrupt for CH[2].LIMITL event",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH3LIMITH": {
    +                    "description": "Write '1' to Enable interrupt for CH[3].LIMITH event",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH3LIMITL": {
    +                    "description": "Write '1' to Enable interrupt for CH[3].LIMITL event",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH4LIMITH": {
    +                    "description": "Write '1' to Enable interrupt for CH[4].LIMITH event",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH4LIMITL": {
    +                    "description": "Write '1' to Enable interrupt for CH[4].LIMITL event",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH5LIMITH": {
    +                    "description": "Write '1' to Enable interrupt for CH[5].LIMITH event",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH5LIMITL": {
    +                    "description": "Write '1' to Enable interrupt for CH[5].LIMITL event",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH6LIMITH": {
    +                    "description": "Write '1' to Enable interrupt for CH[6].LIMITH event",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH6LIMITL": {
    +                    "description": "Write '1' to Enable interrupt for CH[6].LIMITL event",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH7LIMITH": {
    +                    "description": "Write '1' to Enable interrupt for CH[7].LIMITH event",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH7LIMITL": {
    +                    "description": "Write '1' to Enable interrupt for CH[7].LIMITL event",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STARTED": {
    +                    "description": "Write '1' to Disable interrupt for STARTED event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "END": {
    +                    "description": "Write '1' to Disable interrupt for END event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DONE": {
    +                    "description": "Write '1' to Disable interrupt for DONE event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESULTDONE": {
    +                    "description": "Write '1' to Disable interrupt for RESULTDONE event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CALIBRATEDONE": {
    +                    "description": "Write '1' to Disable interrupt for CALIBRATEDONE event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STOPPED": {
    +                    "description": "Write '1' to Disable interrupt for STOPPED event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH0LIMITH": {
    +                    "description": "Write '1' to Disable interrupt for CH[0].LIMITH event",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH0LIMITL": {
    +                    "description": "Write '1' to Disable interrupt for CH[0].LIMITL event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH1LIMITH": {
    +                    "description": "Write '1' to Disable interrupt for CH[1].LIMITH event",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH1LIMITL": {
    +                    "description": "Write '1' to Disable interrupt for CH[1].LIMITL event",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH2LIMITH": {
    +                    "description": "Write '1' to Disable interrupt for CH[2].LIMITH event",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH2LIMITL": {
    +                    "description": "Write '1' to Disable interrupt for CH[2].LIMITL event",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH3LIMITH": {
    +                    "description": "Write '1' to Disable interrupt for CH[3].LIMITH event",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH3LIMITL": {
    +                    "description": "Write '1' to Disable interrupt for CH[3].LIMITL event",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH4LIMITH": {
    +                    "description": "Write '1' to Disable interrupt for CH[4].LIMITH event",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH4LIMITL": {
    +                    "description": "Write '1' to Disable interrupt for CH[4].LIMITL event",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH5LIMITH": {
    +                    "description": "Write '1' to Disable interrupt for CH[5].LIMITH event",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH5LIMITL": {
    +                    "description": "Write '1' to Disable interrupt for CH[5].LIMITL event",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH6LIMITH": {
    +                    "description": "Write '1' to Disable interrupt for CH[6].LIMITH event",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH6LIMITL": {
    +                    "description": "Write '1' to Disable interrupt for CH[6].LIMITL event",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH7LIMITH": {
    +                    "description": "Write '1' to Disable interrupt for CH[7].LIMITH event",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH7LIMITL": {
    +                    "description": "Write '1' to Disable interrupt for CH[7].LIMITL event",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "STATUS": {
    +              "description": "Status",
    +              "offset": 1024,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "STATUS": {
    +                    "description": "Status",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Ready": {
    +                            "description": "ADC is ready. No on-going conversion.",
    +                            "value": 0
    +                          },
    +                          "Busy": {
    +                            "description": "ADC is busy. Conversion in progress.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable or disable ADC",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable ADC",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable ADC",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable ADC",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "RESOLUTION": {
    +              "description": "Resolution configuration",
    +              "offset": 1520,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VAL": {
    +                    "description": "Set the resolution",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "8bit": {
    +                            "description": "8 bit",
    +                            "value": 0
    +                          },
    +                          "10bit": {
    +                            "description": "10 bit",
    +                            "value": 1
    +                          },
    +                          "12bit": {
    +                            "description": "12 bit",
    +                            "value": 2
    +                          },
    +                          "14bit": {
    +                            "description": "14 bit",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "OVERSAMPLE": {
    +              "description": "Oversampling configuration. OVERSAMPLE should not be combined with SCAN. The RESOLUTION is applied before averaging, thus for high OVERSAMPLE a higher RESOLUTION should be used.",
    +              "offset": 1524,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OVERSAMPLE": {
    +                    "description": "Oversample control",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Bypass": {
    +                            "description": "Bypass oversampling",
    +                            "value": 0
    +                          },
    +                          "Over2x": {
    +                            "description": "Oversample 2x",
    +                            "value": 1
    +                          },
    +                          "Over4x": {
    +                            "description": "Oversample 4x",
    +                            "value": 2
    +                          },
    +                          "Over8x": {
    +                            "description": "Oversample 8x",
    +                            "value": 3
    +                          },
    +                          "Over16x": {
    +                            "description": "Oversample 16x",
    +                            "value": 4
    +                          },
    +                          "Over32x": {
    +                            "description": "Oversample 32x",
    +                            "value": 5
    +                          },
    +                          "Over64x": {
    +                            "description": "Oversample 64x",
    +                            "value": 6
    +                          },
    +                          "Over128x": {
    +                            "description": "Oversample 128x",
    +                            "value": 7
    +                          },
    +                          "Over256x": {
    +                            "description": "Oversample 256x",
    +                            "value": 8
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SAMPLERATE": {
    +              "description": "Controls normal or continuous sample rate",
    +              "offset": 1528,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC": {
    +                    "description": "Capture and compare value. Sample rate is 16 MHz/CC",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "MODE": {
    +                    "description": "Select mode for sample rate control",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Task": {
    +                            "description": "Rate is controlled from SAMPLE task",
    +                            "value": 0
    +                          },
    +                          "Timers": {
    +                            "description": "Rate is controlled from local timer (use CC to control the rate)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIMER0": {
    +        "description": "Timer/Counter 0",
    +        "children": {
    +          "registers": {
    +            "TASKS_START": {
    +              "description": "Start Timer",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stop Timer",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_COUNT": {
    +              "description": "Increment Timer (Counter mode only)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_CLEAR": {
    +              "description": "Clear time",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_SHUTDOWN": {
    +              "description": "Deprecated register -  Shut down timer",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_CAPTURE": {
    +              "description": "Description collection[0]:  Capture Timer value to CC[0] register",
    +              "offset": 64,
    +              "size": 32,
    +              "count": 6,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_COMPARE": {
    +              "description": "Description collection[0]:  Compare event on CC[0] match",
    +              "offset": 320,
    +              "size": 32,
    +              "count": 6,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "SHORTS": {
    +              "description": "Shortcut register",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMPARE0_CLEAR": {
    +                    "description": "Shortcut between COMPARE[0] event and CLEAR task",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE1_CLEAR": {
    +                    "description": "Shortcut between COMPARE[1] event and CLEAR task",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE2_CLEAR": {
    +                    "description": "Shortcut between COMPARE[2] event and CLEAR task",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE3_CLEAR": {
    +                    "description": "Shortcut between COMPARE[3] event and CLEAR task",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE4_CLEAR": {
    +                    "description": "Shortcut between COMPARE[4] event and CLEAR task",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE5_CLEAR": {
    +                    "description": "Shortcut between COMPARE[5] event and CLEAR task",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE0_STOP": {
    +                    "description": "Shortcut between COMPARE[0] event and STOP task",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE1_STOP": {
    +                    "description": "Shortcut between COMPARE[1] event and STOP task",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE2_STOP": {
    +                    "description": "Shortcut between COMPARE[2] event and STOP task",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE3_STOP": {
    +                    "description": "Shortcut between COMPARE[3] event and STOP task",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE4_STOP": {
    +                    "description": "Shortcut between COMPARE[4] event and STOP task",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE5_STOP": {
    +                    "description": "Shortcut between COMPARE[5] event and STOP task",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMPARE0": {
    +                    "description": "Write '1' to Enable interrupt for COMPARE[0] event",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE1": {
    +                    "description": "Write '1' to Enable interrupt for COMPARE[1] event",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE2": {
    +                    "description": "Write '1' to Enable interrupt for COMPARE[2] event",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE3": {
    +                    "description": "Write '1' to Enable interrupt for COMPARE[3] event",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE4": {
    +                    "description": "Write '1' to Enable interrupt for COMPARE[4] event",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE5": {
    +                    "description": "Write '1' to Enable interrupt for COMPARE[5] event",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMPARE0": {
    +                    "description": "Write '1' to Disable interrupt for COMPARE[0] event",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE1": {
    +                    "description": "Write '1' to Disable interrupt for COMPARE[1] event",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE2": {
    +                    "description": "Write '1' to Disable interrupt for COMPARE[2] event",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE3": {
    +                    "description": "Write '1' to Disable interrupt for COMPARE[3] event",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE4": {
    +                    "description": "Write '1' to Disable interrupt for COMPARE[4] event",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE5": {
    +                    "description": "Write '1' to Disable interrupt for COMPARE[5] event",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "MODE": {
    +              "description": "Timer mode selection",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MODE": {
    +                    "description": "Timer mode",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Timer": {
    +                            "description": "Select Timer mode",
    +                            "value": 0
    +                          },
    +                          "Counter": {
    +                            "description": "Deprecated enumerator -  Select Counter mode",
    +                            "value": 1
    +                          },
    +                          "LowPowerCounter": {
    +                            "description": "Select Low Power Counter mode",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "BITMODE": {
    +              "description": "Configure the number of bits used by the TIMER",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BITMODE": {
    +                    "description": "Timer bit width",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "16Bit": {
    +                            "description": "16 bit timer bit width",
    +                            "value": 0
    +                          },
    +                          "08Bit": {
    +                            "description": "8 bit timer bit width",
    +                            "value": 1
    +                          },
    +                          "24Bit": {
    +                            "description": "24 bit timer bit width",
    +                            "value": 2
    +                          },
    +                          "32Bit": {
    +                            "description": "32 bit timer bit width",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PRESCALER": {
    +              "description": "Timer prescaler register",
    +              "offset": 1296,
    +              "size": 32,
    +              "reset_value": 4,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRESCALER": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CC": {
    +              "description": "Description collection[0]:  Capture/Compare register 0",
    +              "offset": 1344,
    +              "size": 32,
    +              "count": 6,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC": {
    +                    "description": "Capture/Compare value",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "NVMC": {
    +        "description": "Non Volatile Memory Controller",
    +        "children": {
    +          "registers": {
    +            "READY": {
    +              "description": "Ready flag",
    +              "offset": 1024,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "NVMC is ready or busy",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Busy": {
    +                            "description": "NVMC is busy (on-going write or erase operation)",
    +                            "value": 0
    +                          },
    +                          "Ready": {
    +                            "description": "NVMC is ready",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CONFIG": {
    +              "description": "Configuration register",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WEN": {
    +                    "description": "Program memory access mode. It is strongly recommended to only activate erase and write modes when they are actively used. Enabling write or erase will invalidate the cache and keep it invalidated.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Ren": {
    +                            "description": "Read only access",
    +                            "value": 0
    +                          },
    +                          "Wen": {
    +                            "description": "Write Enabled",
    +                            "value": 1
    +                          },
    +                          "Een": {
    +                            "description": "Erase enabled",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ERASEPAGE": {
    +              "description": "Register for erasing a page in Code area",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ERASEPAGE": {
    +                    "description": "Register for starting erase of a page in Code area",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ERASEPCR1": {
    +              "description": "Deprecated register -  Register for erasing a page in Code area. Equivalent to ERASEPAGE.",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ERASEPCR1": {
    +                    "description": "Register for erasing a page in Code area. Equivalent to ERASEPAGE.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ERASEALL": {
    +              "description": "Register for erasing all non-volatile user memory",
    +              "offset": 1292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ERASEALL": {
    +                    "description": "Erase all non-volatile memory including UICR registers. Note that code erase has to be enabled by CONFIG.EEN before the UICR can be erased.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoOperation": {
    +                            "description": "No operation",
    +                            "value": 0
    +                          },
    +                          "Erase": {
    +                            "description": "Start chip erase",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ERASEPCR0": {
    +              "description": "Deprecated register -  Register for erasing a page in Code area. Equivalent to ERASEPAGE.",
    +              "offset": 1296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ERASEPCR0": {
    +                    "description": "Register for starting erase of a page in Code area. Equivalent to ERASEPAGE.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ERASEUICR": {
    +              "description": "Register for erasing User Information Configuration Registers",
    +              "offset": 1300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ERASEUICR": {
    +                    "description": "Register starting erase of all User Information Configuration Registers. Note that code erase has to be enabled by CONFIG.EEN before the UICR can be erased.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoOperation": {
    +                            "description": "No operation",
    +                            "value": 0
    +                          },
    +                          "Erase": {
    +                            "description": "Start erase of UICR",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ICACHECNF": {
    +              "description": "I-Code cache configuration register.",
    +              "offset": 1344,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CACHEEN": {
    +                    "description": "Cache enable",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable cache. Invalidates all cache entries.",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable cache",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CACHEPROFEN": {
    +                    "description": "Cache profiling enable",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable cache profiling",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable cache profiling",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "IHIT": {
    +              "description": "I-Code cache hit counter.",
    +              "offset": 1352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HITS": {
    +                    "description": "Number of cache hits",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IMISS": {
    +              "description": "I-Code cache miss counter.",
    +              "offset": 1356,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MISSES": {
    +                    "description": "Number of cache misses",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "PDM": {
    +        "description": "Pulse Density Modulation (Digital Microphone) Interface",
    +        "children": {
    +          "registers": {
    +            "TASKS_START": {
    +              "description": "Starts continuous PDM transfer",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stops PDM transfer",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_STARTED": {
    +              "description": "PDM transfer has started",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_STOPPED": {
    +              "description": "PDM transfer has finished",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_END": {
    +              "description": "The PDM has written the last sample specified by SAMPLE.MAXCNT (or the last sample after a STOP task has been received) to Data RAM",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "INTEN": {
    +              "description": "Enable or disable interrupt",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STARTED": {
    +                    "description": "Enable or disable interrupt for STARTED event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STOPPED": {
    +                    "description": "Enable or disable interrupt for STOPPED event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "END": {
    +                    "description": "Enable or disable interrupt for END event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STARTED": {
    +                    "description": "Write '1' to Enable interrupt for STARTED event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STOPPED": {
    +                    "description": "Write '1' to Enable interrupt for STOPPED event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "END": {
    +                    "description": "Write '1' to Enable interrupt for END event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STARTED": {
    +                    "description": "Write '1' to Disable interrupt for STARTED event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STOPPED": {
    +                    "description": "Write '1' to Disable interrupt for STOPPED event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "END": {
    +                    "description": "Write '1' to Disable interrupt for END event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "PDM module enable register",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable PDM module",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PDMCLKCTRL": {
    +              "description": "PDM clock generator control",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 138412032,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FREQ": {
    +                    "description": "PDM_CLK frequency",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "enum": {
    +                      "size": 32,
    +                      "children": {
    +                        "enum_fields": {
    +                          "1000K": {
    +                            "description": "PDM_CLK = 32 MHz / 32 = 1.000 MHz",
    +                            "value": 134217728
    +                          },
    +                          "Default": {
    +                            "description": "PDM_CLK = 32 MHz / 31 = 1.032 MHz",
    +                            "value": 138412032
    +                          },
    +                          "1067K": {
    +                            "description": "PDM_CLK = 32 MHz / 30 = 1.067 MHz",
    +                            "value": 142606336
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "MODE": {
    +              "description": "Defines the routing of the connected PDM microphones' signals",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OPERATION": {
    +                    "description": "Mono or stereo operation",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Stereo": {
    +                            "description": "Sample and store one pair (Left + Right) of 16bit samples per RAM word R=[31:16]; L=[15:0]",
    +                            "value": 0
    +                          },
    +                          "Mono": {
    +                            "description": "Sample and store two successive Left samples (16 bit each) per RAM word L1=[31:16]; L0=[15:0]",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EDGE": {
    +                    "description": "Defines on which PDM_CLK edge Left (or mono) is sampled",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "LeftFalling": {
    +                            "description": "Left (or mono) is sampled on falling edge of PDM_CLK",
    +                            "value": 0
    +                          },
    +                          "LeftRising": {
    +                            "description": "Left (or mono) is sampled on rising edge of PDM_CLK",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GAINL": {
    +              "description": "Left output gain adjustment",
    +              "offset": 1304,
    +              "size": 32,
    +              "reset_value": 40,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "GAINL": {
    +                    "description": "Left output gain adjustment, in 0.5 dB steps, around the default module gain (see electrical parameters) 0x00    -20 dB gain adjust 0x01  -19.5 dB gain adjust (...) 0x27   -0.5 dB gain adjust 0x28      0 dB gain adjust 0x29   +0.5 dB gain adjust (...) 0x4F  +19.5 dB gain adjust 0x50    +20 dB gain adjust",
    +                    "offset": 0,
    +                    "size": 7,
    +                    "enum": {
    +                      "size": 7,
    +                      "children": {
    +                        "enum_fields": {
    +                          "MinGain": {
    +                            "description": "-20dB gain adjustment (minimum)",
    +                            "value": 0
    +                          },
    +                          "DefaultGain": {
    +                            "description": "0dB gain adjustment ('2500 RMS' requirement)",
    +                            "value": 40
    +                          },
    +                          "MaxGain": {
    +                            "description": "+20dB gain adjustment (maximum)",
    +                            "value": 80
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GAINR": {
    +              "description": "Right output gain adjustment",
    +              "offset": 1308,
    +              "size": 32,
    +              "reset_value": 40,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "GAINR": {
    +                    "description": "Right output gain adjustment, in 0.5 dB steps, around the default module gain (see electrical parameters)",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "enum": {
    +                      "size": 8,
    +                      "children": {
    +                        "enum_fields": {
    +                          "MinGain": {
    +                            "description": "-20dB gain adjustment (minimum)",
    +                            "value": 0
    +                          },
    +                          "DefaultGain": {
    +                            "description": "0dB gain adjustment ('2500 RMS' requirement)",
    +                            "value": 40
    +                          },
    +                          "MaxGain": {
    +                            "description": "+20dB gain adjustment (maximum)",
    +                            "value": 80
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "RTC0": {
    +        "description": "Real time counter 0",
    +        "children": {
    +          "registers": {
    +            "TASKS_START": {
    +              "description": "Start RTC COUNTER",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stop RTC COUNTER",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_CLEAR": {
    +              "description": "Clear RTC COUNTER",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_TRIGOVRFLW": {
    +              "description": "Set COUNTER to 0xFFFFF0",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_TICK": {
    +              "description": "Event on COUNTER increment",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_OVRFLW": {
    +              "description": "Event on COUNTER overflow",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_COMPARE": {
    +              "description": "Description collection[0]:  Compare event on CC[0] match",
    +              "offset": 320,
    +              "size": 32,
    +              "count": 4,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TICK": {
    +                    "description": "Write '1' to Enable interrupt for TICK event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OVRFLW": {
    +                    "description": "Write '1' to Enable interrupt for OVRFLW event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE0": {
    +                    "description": "Write '1' to Enable interrupt for COMPARE[0] event",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE1": {
    +                    "description": "Write '1' to Enable interrupt for COMPARE[1] event",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE2": {
    +                    "description": "Write '1' to Enable interrupt for COMPARE[2] event",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE3": {
    +                    "description": "Write '1' to Enable interrupt for COMPARE[3] event",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TICK": {
    +                    "description": "Write '1' to Disable interrupt for TICK event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OVRFLW": {
    +                    "description": "Write '1' to Disable interrupt for OVRFLW event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE0": {
    +                    "description": "Write '1' to Disable interrupt for COMPARE[0] event",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE1": {
    +                    "description": "Write '1' to Disable interrupt for COMPARE[1] event",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE2": {
    +                    "description": "Write '1' to Disable interrupt for COMPARE[2] event",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE3": {
    +                    "description": "Write '1' to Disable interrupt for COMPARE[3] event",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVTEN": {
    +              "description": "Enable or disable event routing",
    +              "offset": 832,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TICK": {
    +                    "description": "Enable or disable event routing for TICK event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OVRFLW": {
    +                    "description": "Enable or disable event routing for OVRFLW event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE0": {
    +                    "description": "Enable or disable event routing for COMPARE[0] event",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE1": {
    +                    "description": "Enable or disable event routing for COMPARE[1] event",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE2": {
    +                    "description": "Enable or disable event routing for COMPARE[2] event",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE3": {
    +                    "description": "Enable or disable event routing for COMPARE[3] event",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVTENSET": {
    +              "description": "Enable event routing",
    +              "offset": 836,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TICK": {
    +                    "description": "Write '1' to Enable event routing for TICK event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OVRFLW": {
    +                    "description": "Write '1' to Enable event routing for OVRFLW event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE0": {
    +                    "description": "Write '1' to Enable event routing for COMPARE[0] event",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE1": {
    +                    "description": "Write '1' to Enable event routing for COMPARE[1] event",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE2": {
    +                    "description": "Write '1' to Enable event routing for COMPARE[2] event",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE3": {
    +                    "description": "Write '1' to Enable event routing for COMPARE[3] event",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVTENCLR": {
    +              "description": "Disable event routing",
    +              "offset": 840,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TICK": {
    +                    "description": "Write '1' to Disable event routing for TICK event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OVRFLW": {
    +                    "description": "Write '1' to Disable event routing for OVRFLW event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE0": {
    +                    "description": "Write '1' to Disable event routing for COMPARE[0] event",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE1": {
    +                    "description": "Write '1' to Disable event routing for COMPARE[1] event",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE2": {
    +                    "description": "Write '1' to Disable event routing for COMPARE[2] event",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE3": {
    +                    "description": "Write '1' to Disable event routing for COMPARE[3] event",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "COUNTER": {
    +              "description": "Current COUNTER value",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "COUNTER": {
    +                    "description": "Counter value",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "PRESCALER": {
    +              "description": "12 bit prescaler for COUNTER frequency (32768/(PRESCALER+1)).Must be written when RTC is stopped",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRESCALER": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "CC": {
    +              "description": "Description collection[0]:  Compare register 0",
    +              "offset": 1344,
    +              "size": 32,
    +              "count": 4,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMPARE": {
    +                    "description": "Compare value",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TEMP": {
    +        "description": "Temperature Sensor",
    +        "children": {
    +          "registers": {
    +            "TASKS_START": {
    +              "description": "Start temperature measurement",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stop temperature measurement",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_DATARDY": {
    +              "description": "Temperature measurement complete, data ready",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATARDY": {
    +                    "description": "Write '1' to Enable interrupt for DATARDY event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATARDY": {
    +                    "description": "Write '1' to Disable interrupt for DATARDY event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TEMP": {
    +              "description": "Temperature in degC (0.25deg steps)",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TEMP": {
    +                    "description": "Temperature in degC (0.25deg steps)",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "A0": {
    +              "description": "Slope of 1st piece wise linear function",
    +              "offset": 1312,
    +              "size": 32,
    +              "reset_value": 800,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "A0": {
    +                    "description": "Slope of 1st piece wise linear function",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "A1": {
    +              "description": "Slope of 2nd piece wise linear function",
    +              "offset": 1316,
    +              "size": 32,
    +              "reset_value": 835,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "A1": {
    +                    "description": "Slope of 2nd piece wise linear function",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "A2": {
    +              "description": "Slope of 3rd piece wise linear function",
    +              "offset": 1320,
    +              "size": 32,
    +              "reset_value": 861,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "A2": {
    +                    "description": "Slope of 3rd piece wise linear function",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "A3": {
    +              "description": "Slope of 4th piece wise linear function",
    +              "offset": 1324,
    +              "size": 32,
    +              "reset_value": 1024,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "A3": {
    +                    "description": "Slope of 4th piece wise linear function",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "A4": {
    +              "description": "Slope of 5th piece wise linear function",
    +              "offset": 1328,
    +              "size": 32,
    +              "reset_value": 1151,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "A4": {
    +                    "description": "Slope of 5th piece wise linear function",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "A5": {
    +              "description": "Slope of 6th piece wise linear function",
    +              "offset": 1332,
    +              "size": 32,
    +              "reset_value": 891,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "A5": {
    +                    "description": "Slope of 6th piece wise linear function",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "B0": {
    +              "description": "y-intercept of 1st piece wise linear function",
    +              "offset": 1344,
    +              "size": 32,
    +              "reset_value": 16332,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "B0": {
    +                    "description": "y-intercept of 1st piece wise linear function",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "B1": {
    +              "description": "y-intercept of 2nd piece wise linear function",
    +              "offset": 1348,
    +              "size": 32,
    +              "reset_value": 16280,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "B1": {
    +                    "description": "y-intercept of 2nd piece wise linear function",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "B2": {
    +              "description": "y-intercept of 3rd piece wise linear function",
    +              "offset": 1352,
    +              "size": 32,
    +              "reset_value": 16280,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "B2": {
    +                    "description": "y-intercept of 3rd piece wise linear function",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "B3": {
    +              "description": "y-intercept of 4th piece wise linear function",
    +              "offset": 1356,
    +              "size": 32,
    +              "reset_value": 18,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "B3": {
    +                    "description": "y-intercept of 4th piece wise linear function",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "B4": {
    +              "description": "y-intercept of 5th piece wise linear function",
    +              "offset": 1360,
    +              "size": 32,
    +              "reset_value": 106,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "B4": {
    +                    "description": "y-intercept of 5th piece wise linear function",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "B5": {
    +              "description": "y-intercept of 6th piece wise linear function",
    +              "offset": 1364,
    +              "size": 32,
    +              "reset_value": 15824,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "B5": {
    +                    "description": "y-intercept of 6th piece wise linear function",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "T0": {
    +              "description": "End point of 1st piece wise linear function",
    +              "offset": 1376,
    +              "size": 32,
    +              "reset_value": 226,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "T0": {
    +                    "description": "End point of 1st piece wise linear function",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "T1": {
    +              "description": "End point of 2nd piece wise linear function",
    +              "offset": 1380,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "T1": {
    +                    "description": "End point of 2nd piece wise linear function",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "T2": {
    +              "description": "End point of 3rd piece wise linear function",
    +              "offset": 1384,
    +              "size": 32,
    +              "reset_value": 20,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "T2": {
    +                    "description": "End point of 3rd piece wise linear function",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "T3": {
    +              "description": "End point of 4th piece wise linear function",
    +              "offset": 1388,
    +              "size": 32,
    +              "reset_value": 25,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "T3": {
    +                    "description": "End point of 4th piece wise linear function",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "T4": {
    +              "description": "End point of 5th piece wise linear function",
    +              "offset": 1392,
    +              "size": 32,
    +              "reset_value": 80,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "T4": {
    +                    "description": "End point of 5th piece wise linear function",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "RNG": {
    +        "description": "Random Number Generator",
    +        "children": {
    +          "registers": {
    +            "TASKS_START": {
    +              "description": "Task starting the random number generator",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_STOP": {
    +              "description": "Task stopping the random number generator",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_VALRDY": {
    +              "description": "Event being generated for every new random number written to the VALUE register",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "SHORTS": {
    +              "description": "Shortcut register",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VALRDY_STOP": {
    +                    "description": "Shortcut between VALRDY event and STOP task",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VALRDY": {
    +                    "description": "Write '1' to Enable interrupt for VALRDY event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VALRDY": {
    +                    "description": "Write '1' to Disable interrupt for VALRDY event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CONFIG": {
    +              "description": "Configuration register",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DERCEN": {
    +                    "description": "Bias correction",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "VALUE": {
    +              "description": "Output random number",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "VALUE": {
    +                    "description": "Generated random number",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "ECB": {
    +        "description": "AES ECB Mode Encryption",
    +        "children": {
    +          "registers": {
    +            "TASKS_STARTECB": {
    +              "description": "Start ECB block encrypt",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_STOPECB": {
    +              "description": "Abort a possible executing ECB operation",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_ENDECB": {
    +              "description": "ECB block encrypt complete",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_ERRORECB": {
    +              "description": "ECB block encrypt aborted because of a STOPECB task or due to an error",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENDECB": {
    +                    "description": "Write '1' to Enable interrupt for ENDECB event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERRORECB": {
    +                    "description": "Write '1' to Enable interrupt for ERRORECB event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENDECB": {
    +                    "description": "Write '1' to Disable interrupt for ENDECB event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERRORECB": {
    +                    "description": "Write '1' to Disable interrupt for ERRORECB event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ECBDATAPTR": {
    +              "description": "ECB block encrypt memory pointers",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ECBDATAPTR": {
    +                    "description": "Pointer to the ECB data structure (see Table 1 ECB data structure overview)",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "CCM": {
    +        "description": "AES CCM Mode Encryption",
    +        "children": {
    +          "registers": {
    +            "TASKS_KSGEN": {
    +              "description": "Start generation of key-stream. This operation will stop by itself when completed.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_CRYPT": {
    +              "description": "Start encryption/decryption. This operation will stop by itself when completed.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stop encryption/decryption",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_ENDKSGEN": {
    +              "description": "Key-stream generation complete",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_ENDCRYPT": {
    +              "description": "Encrypt/decrypt complete",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_ERROR": {
    +              "description": "CCM error event",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "SHORTS": {
    +              "description": "Shortcut register",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENDKSGEN_CRYPT": {
    +                    "description": "Shortcut between ENDKSGEN event and CRYPT task",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENDKSGEN": {
    +                    "description": "Write '1' to Enable interrupt for ENDKSGEN event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDCRYPT": {
    +                    "description": "Write '1' to Enable interrupt for ENDCRYPT event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Write '1' to Enable interrupt for ERROR event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENDKSGEN": {
    +                    "description": "Write '1' to Disable interrupt for ENDKSGEN event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDCRYPT": {
    +                    "description": "Write '1' to Disable interrupt for ENDCRYPT event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Write '1' to Disable interrupt for ERROR event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "MICSTATUS": {
    +              "description": "MIC check result",
    +              "offset": 1024,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "MICSTATUS": {
    +                    "description": "The result of the MIC check performed during the previous decryption operation",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CheckFailed": {
    +                            "description": "MIC check failed",
    +                            "value": 0
    +                          },
    +                          "CheckPassed": {
    +                            "description": "MIC check passed",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable CCM",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "MODE": {
    +              "description": "Operation mode",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MODE": {
    +                    "description": "The mode of operation to be used",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Encryption": {
    +                            "description": "AES CCM packet encryption mode",
    +                            "value": 0
    +                          },
    +                          "Decryption": {
    +                            "description": "AES CCM packet decryption mode",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DATARATE": {
    +                    "description": "Data rate that the CCM shall run in synch with",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "1Mbit": {
    +                            "description": "In synch with 1 Mbit data rate",
    +                            "value": 0
    +                          },
    +                          "2Mbit": {
    +                            "description": "In synch with 2 Mbit data rate",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LENGTH": {
    +                    "description": "Packet length configuration",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Default": {
    +                            "description": "Default length. Effective length of LENGTH field is 5-bit",
    +                            "value": 0
    +                          },
    +                          "Extended": {
    +                            "description": "Extended length. Effective length of LENGTH field is 8-bit",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CNFPTR": {
    +              "description": "Pointer to data structure holding AES key and NONCE vector",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNFPTR": {
    +                    "description": "Pointer to the data structure holding the AES key and the CCM NONCE vector (see Table 1 CCM data structure overview)",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "INPTR": {
    +              "description": "Input pointer",
    +              "offset": 1292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INPTR": {
    +                    "description": "Input pointer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OUTPTR": {
    +              "description": "Output pointer",
    +              "offset": 1296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUTPTR": {
    +                    "description": "Output pointer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "SCRATCHPTR": {
    +              "description": "Pointer to data area used for temporary storage",
    +              "offset": 1300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SCRATCHPTR": {
    +                    "description": "Pointer to a scratch data area used for temporary storage during key-stream generation, MIC generation and encryption/decryption.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "AAR": {
    +        "description": "Accelerated Address Resolver",
    +        "children": {
    +          "registers": {
    +            "TASKS_START": {
    +              "description": "Start resolving addresses based on IRKs specified in the IRK data structure",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stop resolving addresses",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_END": {
    +              "description": "Address resolution procedure complete",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_RESOLVED": {
    +              "description": "Address resolved",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_NOTRESOLVED": {
    +              "description": "Address not resolved",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "END": {
    +                    "description": "Write '1' to Enable interrupt for END event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESOLVED": {
    +                    "description": "Write '1' to Enable interrupt for RESOLVED event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "NOTRESOLVED": {
    +                    "description": "Write '1' to Enable interrupt for NOTRESOLVED event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "END": {
    +                    "description": "Write '1' to Disable interrupt for END event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESOLVED": {
    +                    "description": "Write '1' to Disable interrupt for RESOLVED event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "NOTRESOLVED": {
    +                    "description": "Write '1' to Disable interrupt for NOTRESOLVED event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "STATUS": {
    +              "description": "Resolution status",
    +              "offset": 1024,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "STATUS": {
    +                    "description": "The IRK that was used last time an address was resolved",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable AAR",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable AAR",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "NIRK": {
    +              "description": "Number of IRKs",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NIRK": {
    +                    "description": "Number of Identity root keys available in the IRK data structure",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "IRKPTR": {
    +              "description": "Pointer to IRK data structure",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IRKPTR": {
    +                    "description": "Pointer to the IRK data structure",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ADDRPTR": {
    +              "description": "Pointer to the resolvable address",
    +              "offset": 1296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADDRPTR": {
    +                    "description": "Pointer to the resolvable address (6-bytes)",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "SCRATCHPTR": {
    +              "description": "Pointer to data area used for temporary storage",
    +              "offset": 1300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SCRATCHPTR": {
    +                    "description": "Pointer to a scratch data area used for temporary storage during resolution.A space of minimum 3 bytes must be reserved.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "WDT": {
    +        "description": "Watchdog Timer",
    +        "children": {
    +          "registers": {
    +            "TASKS_START": {
    +              "description": "Start the watchdog",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_TIMEOUT": {
    +              "description": "Watchdog timeout",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMEOUT": {
    +                    "description": "Write '1' to Enable interrupt for TIMEOUT event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMEOUT": {
    +                    "description": "Write '1' to Disable interrupt for TIMEOUT event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "RUNSTATUS": {
    +              "description": "Run status",
    +              "offset": 1024,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RUNSTATUS": {
    +                    "description": "Indicates whether or not the watchdog is running",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotRunning": {
    +                            "description": "Watchdog not running",
    +                            "value": 0
    +                          },
    +                          "Running": {
    +                            "description": "Watchdog is running",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "REQSTATUS": {
    +              "description": "Request status",
    +              "offset": 1028,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RR0": {
    +                    "description": "Request status for RR[0] register",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DisabledOrRequested": {
    +                            "description": "RR[0] register is not enabled, or are already requesting reload",
    +                            "value": 0
    +                          },
    +                          "EnabledAndUnrequested": {
    +                            "description": "RR[0] register is enabled, and are not yet requesting reload",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR1": {
    +                    "description": "Request status for RR[1] register",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DisabledOrRequested": {
    +                            "description": "RR[1] register is not enabled, or are already requesting reload",
    +                            "value": 0
    +                          },
    +                          "EnabledAndUnrequested": {
    +                            "description": "RR[1] register is enabled, and are not yet requesting reload",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR2": {
    +                    "description": "Request status for RR[2] register",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DisabledOrRequested": {
    +                            "description": "RR[2] register is not enabled, or are already requesting reload",
    +                            "value": 0
    +                          },
    +                          "EnabledAndUnrequested": {
    +                            "description": "RR[2] register is enabled, and are not yet requesting reload",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR3": {
    +                    "description": "Request status for RR[3] register",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DisabledOrRequested": {
    +                            "description": "RR[3] register is not enabled, or are already requesting reload",
    +                            "value": 0
    +                          },
    +                          "EnabledAndUnrequested": {
    +                            "description": "RR[3] register is enabled, and are not yet requesting reload",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR4": {
    +                    "description": "Request status for RR[4] register",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DisabledOrRequested": {
    +                            "description": "RR[4] register is not enabled, or are already requesting reload",
    +                            "value": 0
    +                          },
    +                          "EnabledAndUnrequested": {
    +                            "description": "RR[4] register is enabled, and are not yet requesting reload",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR5": {
    +                    "description": "Request status for RR[5] register",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DisabledOrRequested": {
    +                            "description": "RR[5] register is not enabled, or are already requesting reload",
    +                            "value": 0
    +                          },
    +                          "EnabledAndUnrequested": {
    +                            "description": "RR[5] register is enabled, and are not yet requesting reload",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR6": {
    +                    "description": "Request status for RR[6] register",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DisabledOrRequested": {
    +                            "description": "RR[6] register is not enabled, or are already requesting reload",
    +                            "value": 0
    +                          },
    +                          "EnabledAndUnrequested": {
    +                            "description": "RR[6] register is enabled, and are not yet requesting reload",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR7": {
    +                    "description": "Request status for RR[7] register",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DisabledOrRequested": {
    +                            "description": "RR[7] register is not enabled, or are already requesting reload",
    +                            "value": 0
    +                          },
    +                          "EnabledAndUnrequested": {
    +                            "description": "RR[7] register is enabled, and are not yet requesting reload",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CRV": {
    +              "description": "Counter reload value",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CRV": {
    +                    "description": "Counter reload value in number of cycles of the 32.768 kHz clock",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "RREN": {
    +              "description": "Enable register for reload request registers",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RR0": {
    +                    "description": "Enable or disable RR[0] register",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable RR[0] register",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable RR[0] register",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR1": {
    +                    "description": "Enable or disable RR[1] register",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable RR[1] register",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable RR[1] register",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR2": {
    +                    "description": "Enable or disable RR[2] register",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable RR[2] register",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable RR[2] register",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR3": {
    +                    "description": "Enable or disable RR[3] register",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable RR[3] register",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable RR[3] register",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR4": {
    +                    "description": "Enable or disable RR[4] register",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable RR[4] register",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable RR[4] register",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR5": {
    +                    "description": "Enable or disable RR[5] register",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable RR[5] register",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable RR[5] register",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR6": {
    +                    "description": "Enable or disable RR[6] register",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable RR[6] register",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable RR[6] register",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR7": {
    +                    "description": "Enable or disable RR[7] register",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable RR[7] register",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable RR[7] register",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CONFIG": {
    +              "description": "Configuration register",
    +              "offset": 1292,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SLEEP": {
    +                    "description": "Configure the watchdog to either be paused, or kept running, while the CPU is sleeping",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Pause": {
    +                            "description": "Pause watchdog while the CPU is sleeping",
    +                            "value": 0
    +                          },
    +                          "Run": {
    +                            "description": "Keep the watchdog running while the CPU is sleeping",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "HALT": {
    +                    "description": "Configure the watchdog to either be paused, or kept running, while the CPU is halted by the debugger",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Pause": {
    +                            "description": "Pause watchdog while the CPU is halted by the debugger",
    +                            "value": 0
    +                          },
    +                          "Run": {
    +                            "description": "Keep the watchdog running while the CPU is halted by the debugger",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "RR": {
    +              "description": "Description collection[0]:  Reload request 0",
    +              "offset": 1536,
    +              "size": 32,
    +              "count": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "RR": {
    +                    "description": "Reload request register",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "enum": {
    +                      "size": 32,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Reload": {
    +                            "description": "Value to request a reload of the watchdog timer",
    +                            "value": 1850885685
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "PWM0": {
    +        "description": "Pulse Width Modulation Unit 0",
    +        "children": {
    +          "registers": {
    +            "TASKS_STOP": {
    +              "description": "Stops PWM pulse generation on all channels at the end of current PWM period, and stops sequence playback",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_SEQSTART": {
    +              "description": "Description collection[0]:  Loads the first PWM value on all enabled channels from sequence 0, and starts playing that sequence at the rate defined in SEQ[0]REFRESH and/or DECODER.MODE. Causes PWM generation to start it was not running.",
    +              "offset": 8,
    +              "size": 32,
    +              "count": 2,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_NEXTSTEP": {
    +              "description": "Steps by one value in the current sequence on all enabled channels if DECODER.MODE=NextStep. Does not cause PWM generation to start it was not running.",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_STOPPED": {
    +              "description": "Response to STOP task, emitted when PWM pulses are no longer generated",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_SEQSTARTED": {
    +              "description": "Description collection[0]:  First PWM period started on sequence 0",
    +              "offset": 264,
    +              "size": 32,
    +              "count": 2,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_SEQEND": {
    +              "description": "Description collection[0]:  Emitted at end of every sequence 0, when last value from RAM has been applied to wave counter",
    +              "offset": 272,
    +              "size": 32,
    +              "count": 2,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_PWMPERIODEND": {
    +              "description": "Emitted at the end of each PWM period",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_LOOPSDONE": {
    +              "description": "Concatenated sequences have been played the amount of times defined in LOOP.CNT",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "SHORTS": {
    +              "description": "Shortcut register",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SEQEND0_STOP": {
    +                    "description": "Shortcut between SEQEND[0] event and STOP task",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SEQEND1_STOP": {
    +                    "description": "Shortcut between SEQEND[1] event and STOP task",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LOOPSDONE_SEQSTART0": {
    +                    "description": "Shortcut between LOOPSDONE event and SEQSTART[0] task",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LOOPSDONE_SEQSTART1": {
    +                    "description": "Shortcut between LOOPSDONE event and SEQSTART[1] task",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LOOPSDONE_STOP": {
    +                    "description": "Shortcut between LOOPSDONE event and STOP task",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTEN": {
    +              "description": "Enable or disable interrupt",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STOPPED": {
    +                    "description": "Enable or disable interrupt for STOPPED event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SEQSTARTED0": {
    +                    "description": "Enable or disable interrupt for SEQSTARTED[0] event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SEQSTARTED1": {
    +                    "description": "Enable or disable interrupt for SEQSTARTED[1] event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SEQEND0": {
    +                    "description": "Enable or disable interrupt for SEQEND[0] event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SEQEND1": {
    +                    "description": "Enable or disable interrupt for SEQEND[1] event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMPERIODEND": {
    +                    "description": "Enable or disable interrupt for PWMPERIODEND event",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LOOPSDONE": {
    +                    "description": "Enable or disable interrupt for LOOPSDONE event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STOPPED": {
    +                    "description": "Write '1' to Enable interrupt for STOPPED event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SEQSTARTED0": {
    +                    "description": "Write '1' to Enable interrupt for SEQSTARTED[0] event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SEQSTARTED1": {
    +                    "description": "Write '1' to Enable interrupt for SEQSTARTED[1] event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SEQEND0": {
    +                    "description": "Write '1' to Enable interrupt for SEQEND[0] event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SEQEND1": {
    +                    "description": "Write '1' to Enable interrupt for SEQEND[1] event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMPERIODEND": {
    +                    "description": "Write '1' to Enable interrupt for PWMPERIODEND event",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LOOPSDONE": {
    +                    "description": "Write '1' to Enable interrupt for LOOPSDONE event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STOPPED": {
    +                    "description": "Write '1' to Disable interrupt for STOPPED event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SEQSTARTED0": {
    +                    "description": "Write '1' to Disable interrupt for SEQSTARTED[0] event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SEQSTARTED1": {
    +                    "description": "Write '1' to Disable interrupt for SEQSTARTED[1] event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SEQEND0": {
    +                    "description": "Write '1' to Disable interrupt for SEQEND[0] event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SEQEND1": {
    +                    "description": "Write '1' to Disable interrupt for SEQEND[1] event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMPERIODEND": {
    +                    "description": "Write '1' to Disable interrupt for PWMPERIODEND event",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LOOPSDONE": {
    +                    "description": "Write '1' to Disable interrupt for LOOPSDONE event",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "PWM module enable register",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable PWM module",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "MODE": {
    +              "description": "Selects operating mode of the wave counter",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "UPDOWN": {
    +                    "description": "Selects up or up and down as wave counter mode",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Up": {
    +                            "description": "Up counter - edge aligned PWM duty-cycle",
    +                            "value": 0
    +                          },
    +                          "UpAndDown": {
    +                            "description": "Up and down counter - center aligned PWM duty cycle",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "COUNTERTOP": {
    +              "description": "Value up to which the pulse generator counter counts",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 1023,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COUNTERTOP": {
    +                    "description": "Value up to which the pulse generator counter counts. This register is ignored when DECODER.MODE=WaveForm and only values from RAM will be used.",
    +                    "offset": 0,
    +                    "size": 15
    +                  }
    +                }
    +              }
    +            },
    +            "PRESCALER": {
    +              "description": "Configuration for PWM_CLK",
    +              "offset": 1292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRESCALER": {
    +                    "description": "Pre-scaler of PWM_CLK",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DIV_1": {
    +                            "description": "Divide by   1 (16MHz)",
    +                            "value": 0
    +                          },
    +                          "DIV_2": {
    +                            "description": "Divide by   2 ( 8MHz)",
    +                            "value": 1
    +                          },
    +                          "DIV_4": {
    +                            "description": "Divide by   4 ( 4MHz)",
    +                            "value": 2
    +                          },
    +                          "DIV_8": {
    +                            "description": "Divide by   8 ( 2MHz)",
    +                            "value": 3
    +                          },
    +                          "DIV_16": {
    +                            "description": "Divide by  16 ( 1MHz)",
    +                            "value": 4
    +                          },
    +                          "DIV_32": {
    +                            "description": "Divide by  32 ( 500kHz)",
    +                            "value": 5
    +                          },
    +                          "DIV_64": {
    +                            "description": "Divide by  64 ( 250kHz)",
    +                            "value": 6
    +                          },
    +                          "DIV_128": {
    +                            "description": "Divide by 128 ( 125kHz)",
    +                            "value": 7
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "DECODER": {
    +              "description": "Configuration of the decoder",
    +              "offset": 1296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LOAD": {
    +                    "description": "How a sequence is read from RAM and spread to the compare register",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Common": {
    +                            "description": "1st half word (16-bit) used in all PWM channels 0..3",
    +                            "value": 0
    +                          },
    +                          "Grouped": {
    +                            "description": "1st half word (16-bit) used in channel 0..1; 2nd word in channel 2..3",
    +                            "value": 1
    +                          },
    +                          "Individual": {
    +                            "description": "1st half word (16-bit) in ch.0; 2nd in ch.1; ...; 4th in ch.3",
    +                            "value": 2
    +                          },
    +                          "WaveForm": {
    +                            "description": "1st half word (16-bit) in ch.0; 2nd in ch.1; ...; 4th in COUNTERTOP",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MODE": {
    +                    "description": "Selects source for advancing the active sequence",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RefreshCount": {
    +                            "description": "SEQ[n].REFRESH is used to determine loading internal compare registers",
    +                            "value": 0
    +                          },
    +                          "NextStep": {
    +                            "description": "NEXTSTEP task causes a new value to be loaded to internal compare registers",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "LOOP": {
    +              "description": "Amount of playback of a loop",
    +              "offset": 1300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "Amount of playback of pattern cycles",
    +                    "offset": 0,
    +                    "size": 16,
    +                    "enum": {
    +                      "size": 16,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Looping disabled (stop at the end of the sequence)",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "QDEC": {
    +        "description": "Quadrature Decoder",
    +        "children": {
    +          "registers": {
    +            "TASKS_START": {
    +              "description": "Task starting the quadrature decoder",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_STOP": {
    +              "description": "Task stopping the quadrature decoder",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_READCLRACC": {
    +              "description": "Read and clear ACC and ACCDBL",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_RDCLRACC": {
    +              "description": "Read and clear ACC",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_RDCLRDBL": {
    +              "description": "Read and clear ACCDBL",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_SAMPLERDY": {
    +              "description": "Event being generated for every new sample value written to the SAMPLE register",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_REPORTRDY": {
    +              "description": "Non-null report ready",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_ACCOF": {
    +              "description": "ACC or ACCDBL register overflow",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_DBLRDY": {
    +              "description": "Double displacement(s) detected",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_STOPPED": {
    +              "description": "QDEC has been stopped",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "SHORTS": {
    +              "description": "Shortcut register",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REPORTRDY_READCLRACC": {
    +                    "description": "Shortcut between REPORTRDY event and READCLRACC task",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SAMPLERDY_STOP": {
    +                    "description": "Shortcut between SAMPLERDY event and STOP task",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REPORTRDY_RDCLRACC": {
    +                    "description": "Shortcut between REPORTRDY event and RDCLRACC task",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REPORTRDY_STOP": {
    +                    "description": "Shortcut between REPORTRDY event and STOP task",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DBLRDY_RDCLRDBL": {
    +                    "description": "Shortcut between DBLRDY event and RDCLRDBL task",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DBLRDY_STOP": {
    +                    "description": "Shortcut between DBLRDY event and STOP task",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SAMPLERDY_READCLRACC": {
    +                    "description": "Shortcut between SAMPLERDY event and READCLRACC task",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SAMPLERDY": {
    +                    "description": "Write '1' to Enable interrupt for SAMPLERDY event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REPORTRDY": {
    +                    "description": "Write '1' to Enable interrupt for REPORTRDY event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ACCOF": {
    +                    "description": "Write '1' to Enable interrupt for ACCOF event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DBLRDY": {
    +                    "description": "Write '1' to Enable interrupt for DBLRDY event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STOPPED": {
    +                    "description": "Write '1' to Enable interrupt for STOPPED event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SAMPLERDY": {
    +                    "description": "Write '1' to Disable interrupt for SAMPLERDY event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REPORTRDY": {
    +                    "description": "Write '1' to Disable interrupt for REPORTRDY event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ACCOF": {
    +                    "description": "Write '1' to Disable interrupt for ACCOF event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DBLRDY": {
    +                    "description": "Write '1' to Disable interrupt for DBLRDY event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STOPPED": {
    +                    "description": "Write '1' to Disable interrupt for STOPPED event",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable the quadrature decoder",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable the quadrature decoder",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "LEDPOL": {
    +              "description": "LED output pin polarity",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEDPOL": {
    +                    "description": "LED output pin polarity",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ActiveLow": {
    +                            "description": "Led active on output pin low",
    +                            "value": 0
    +                          },
    +                          "ActiveHigh": {
    +                            "description": "Led active on output pin high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SAMPLEPER": {
    +              "description": "Sample period",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SAMPLEPER": {
    +                    "description": "Sample period. The SAMPLE register will be updated for every new sample",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128us": {
    +                            "description": "128 us",
    +                            "value": 0
    +                          },
    +                          "256us": {
    +                            "description": "256 us",
    +                            "value": 1
    +                          },
    +                          "512us": {
    +                            "description": "512 us",
    +                            "value": 2
    +                          },
    +                          "1024us": {
    +                            "description": "1024 us",
    +                            "value": 3
    +                          },
    +                          "2048us": {
    +                            "description": "2048 us",
    +                            "value": 4
    +                          },
    +                          "4096us": {
    +                            "description": "4096 us",
    +                            "value": 5
    +                          },
    +                          "8192us": {
    +                            "description": "8192 us",
    +                            "value": 6
    +                          },
    +                          "16384us": {
    +                            "description": "16384 us",
    +                            "value": 7
    +                          },
    +                          "32ms": {
    +                            "description": "32768 us",
    +                            "value": 8
    +                          },
    +                          "65ms": {
    +                            "description": "65536 us",
    +                            "value": 9
    +                          },
    +                          "131ms": {
    +                            "description": "131072 us",
    +                            "value": 10
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SAMPLE": {
    +              "description": "Motion sample value",
    +              "offset": 1292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SAMPLE": {
    +                    "description": "Last motion sample",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "REPORTPER": {
    +              "description": "Number of samples to be taken before REPORTRDY and DBLRDY events can be generated",
    +              "offset": 1296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REPORTPER": {
    +                    "description": "Specifies the number of samples to be accumulated in the ACC register before the REPORTRDY and DBLRDY events can be generated",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "10Smpl": {
    +                            "description": "10 samples / report",
    +                            "value": 0
    +                          },
    +                          "40Smpl": {
    +                            "description": "40 samples / report",
    +                            "value": 1
    +                          },
    +                          "80Smpl": {
    +                            "description": "80 samples / report",
    +                            "value": 2
    +                          },
    +                          "120Smpl": {
    +                            "description": "120 samples / report",
    +                            "value": 3
    +                          },
    +                          "160Smpl": {
    +                            "description": "160 samples / report",
    +                            "value": 4
    +                          },
    +                          "200Smpl": {
    +                            "description": "200 samples / report",
    +                            "value": 5
    +                          },
    +                          "240Smpl": {
    +                            "description": "240 samples / report",
    +                            "value": 6
    +                          },
    +                          "280Smpl": {
    +                            "description": "280 samples / report",
    +                            "value": 7
    +                          },
    +                          "1Smpl": {
    +                            "description": "1 sample / report",
    +                            "value": 8
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ACC": {
    +              "description": "Register accumulating the valid transitions",
    +              "offset": 1300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ACC": {
    +                    "description": "Register accumulating all valid samples (not double transition) read from the SAMPLE register",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ACCREAD": {
    +              "description": "Snapshot of the ACC register, updated by the READCLRACC or RDCLRACC task",
    +              "offset": 1304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ACCREAD": {
    +                    "description": "Snapshot of the ACC register.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DBFEN": {
    +              "description": "Enable input debounce filters",
    +              "offset": 1320,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBFEN": {
    +                    "description": "Enable input debounce filters",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Debounce input filters disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Debounce input filters enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "LEDPRE": {
    +              "description": "Time period the LED is switched ON prior to sampling",
    +              "offset": 1344,
    +              "size": 32,
    +              "reset_value": 16,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEDPRE": {
    +                    "description": "Period in us the LED is switched on prior to sampling",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "ACCDBL": {
    +              "description": "Register accumulating the number of detected double transitions",
    +              "offset": 1348,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ACCDBL": {
    +                    "description": "Register accumulating the number of detected double or illegal transitions. ( SAMPLE = 2 ).",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "ACCDBLREAD": {
    +              "description": "Snapshot of the ACCDBL, updated by the READCLRACC or RDCLRDBL task",
    +              "offset": 1352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ACCDBLREAD": {
    +                    "description": "Snapshot of the ACCDBL register. This field is updated when the READCLRACC or RDCLRDBL task is triggered.",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "COMP": {
    +        "description": "Comparator",
    +        "children": {
    +          "registers": {
    +            "TASKS_START": {
    +              "description": "Start comparator",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stop comparator",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_SAMPLE": {
    +              "description": "Sample comparator value",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_READY": {
    +              "description": "COMP is ready and output is valid",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_DOWN": {
    +              "description": "Downward crossing",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_UP": {
    +              "description": "Upward crossing",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_CROSS": {
    +              "description": "Downward or upward crossing",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "SHORTS": {
    +              "description": "Shortcut register",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY_SAMPLE": {
    +                    "description": "Shortcut between READY event and SAMPLE task",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "READY_STOP": {
    +                    "description": "Shortcut between READY event and STOP task",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DOWN_STOP": {
    +                    "description": "Shortcut between DOWN event and STOP task",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "UP_STOP": {
    +                    "description": "Shortcut between UP event and STOP task",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CROSS_STOP": {
    +                    "description": "Shortcut between CROSS event and STOP task",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTEN": {
    +              "description": "Enable or disable interrupt",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "Enable or disable interrupt for READY event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DOWN": {
    +                    "description": "Enable or disable interrupt for DOWN event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "UP": {
    +                    "description": "Enable or disable interrupt for UP event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CROSS": {
    +                    "description": "Enable or disable interrupt for CROSS event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "Write '1' to Enable interrupt for READY event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DOWN": {
    +                    "description": "Write '1' to Enable interrupt for DOWN event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "UP": {
    +                    "description": "Write '1' to Enable interrupt for UP event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CROSS": {
    +                    "description": "Write '1' to Enable interrupt for CROSS event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "Write '1' to Disable interrupt for READY event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DOWN": {
    +                    "description": "Write '1' to Disable interrupt for DOWN event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "UP": {
    +                    "description": "Write '1' to Disable interrupt for UP event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CROSS": {
    +                    "description": "Write '1' to Disable interrupt for CROSS event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "RESULT": {
    +              "description": "Compare result",
    +              "offset": 1024,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RESULT": {
    +                    "description": "Result of last compare. Decision point SAMPLE task.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Below": {
    +                            "description": "Input voltage is below the threshold (VIN+ < VIN-)",
    +                            "value": 0
    +                          },
    +                          "Above": {
    +                            "description": "Input voltage is above the threshold (VIN+ > VIN-)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "COMP enable",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable COMP",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PSEL": {
    +              "description": "Pin select",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSEL": {
    +                    "description": "Analog pin select",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "AnalogInput0": {
    +                            "description": "AIN0 selected as analog input",
    +                            "value": 0
    +                          },
    +                          "AnalogInput1": {
    +                            "description": "AIN1 selected as analog input",
    +                            "value": 1
    +                          },
    +                          "AnalogInput2": {
    +                            "description": "AIN2 selected as analog input",
    +                            "value": 2
    +                          },
    +                          "AnalogInput3": {
    +                            "description": "AIN3 selected as analog input",
    +                            "value": 3
    +                          },
    +                          "AnalogInput4": {
    +                            "description": "AIN4 selected as analog input",
    +                            "value": 4
    +                          },
    +                          "AnalogInput5": {
    +                            "description": "AIN5 selected as analog input",
    +                            "value": 5
    +                          },
    +                          "AnalogInput6": {
    +                            "description": "AIN6 selected as analog input",
    +                            "value": 6
    +                          },
    +                          "AnalogInput7": {
    +                            "description": "AIN7 selected as analog input",
    +                            "value": 7
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "REFSEL": {
    +              "description": "Reference source select for single-ended mode",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 4,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REFSEL": {
    +                    "description": "Reference select",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Int1V2": {
    +                            "description": "VREF = internal 1.2 V reference (VDD >= 1.7 V)",
    +                            "value": 0
    +                          },
    +                          "Int1V8": {
    +                            "description": "VREF = internal 1.8 V reference (VDD >= VREF + 0.2 V)",
    +                            "value": 1
    +                          },
    +                          "Int2V4": {
    +                            "description": "VREF = internal 2.4 V reference (VDD >= VREF + 0.2 V)",
    +                            "value": 2
    +                          },
    +                          "VDD": {
    +                            "description": "VREF = VDD",
    +                            "value": 4
    +                          },
    +                          "ARef": {
    +                            "description": "VREF = AREF (VDD >= VREF >= AREFMIN)",
    +                            "value": 7
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EXTREFSEL": {
    +              "description": "External reference select",
    +              "offset": 1292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXTREFSEL": {
    +                    "description": "External analog reference select",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "AnalogReference0": {
    +                            "description": "Use AIN0 as external analog reference",
    +                            "value": 0
    +                          },
    +                          "AnalogReference1": {
    +                            "description": "Use AIN1 as external analog reference",
    +                            "value": 1
    +                          },
    +                          "AnalogReference2": {
    +                            "description": "Use AIN2 as external analog reference",
    +                            "value": 2
    +                          },
    +                          "AnalogReference3": {
    +                            "description": "Use AIN3 as external analog reference",
    +                            "value": 3
    +                          },
    +                          "AnalogReference4": {
    +                            "description": "Use AIN4 as external analog reference",
    +                            "value": 4
    +                          },
    +                          "AnalogReference5": {
    +                            "description": "Use AIN5 as external analog reference",
    +                            "value": 5
    +                          },
    +                          "AnalogReference6": {
    +                            "description": "Use AIN6 as external analog reference",
    +                            "value": 6
    +                          },
    +                          "AnalogReference7": {
    +                            "description": "Use AIN7 as external analog reference",
    +                            "value": 7
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TH": {
    +              "description": "Threshold configuration for hysteresis unit",
    +              "offset": 1328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "THDOWN": {
    +                    "description": "VDOWN = (THDOWN+1)/64*VREF",
    +                    "offset": 0,
    +                    "size": 6
    +                  },
    +                  "THUP": {
    +                    "description": "VUP = (THUP+1)/64*VREF",
    +                    "offset": 8,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "MODE": {
    +              "description": "Mode configuration",
    +              "offset": 1332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SP": {
    +                    "description": "Speed and power modes",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Low-power mode",
    +                            "value": 0
    +                          },
    +                          "Normal": {
    +                            "description": "Normal mode",
    +                            "value": 1
    +                          },
    +                          "High": {
    +                            "description": "High-speed mode",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MAIN": {
    +                    "description": "Main operation modes",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SE": {
    +                            "description": "Single-ended mode",
    +                            "value": 0
    +                          },
    +                          "Diff": {
    +                            "description": "Differential mode",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "HYST": {
    +              "description": "Comparator hysteresis enable",
    +              "offset": 1336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HYST": {
    +                    "description": "Comparator hysteresis",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoHyst": {
    +                            "description": "Comparator hysteresis disabled",
    +                            "value": 0
    +                          },
    +                          "Hyst50mV": {
    +                            "description": "Comparator hysteresis enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ISOURCE": {
    +              "description": "Current source select on analog input",
    +              "offset": 1340,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ISOURCE": {
    +                    "description": "Comparator hysteresis",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Off": {
    +                            "description": "Current source disabled",
    +                            "value": 0
    +                          },
    +                          "Ien2mA5": {
    +                            "description": "Current source enabled (+/- 2.5 uA)",
    +                            "value": 1
    +                          },
    +                          "Ien5mA": {
    +                            "description": "Current source enabled (+/- 5 uA)",
    +                            "value": 2
    +                          },
    +                          "Ien10mA": {
    +                            "description": "Current source enabled (+/- 10 uA)",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "LPCOMP": {
    +        "description": "Low Power Comparator",
    +        "children": {
    +          "registers": {
    +            "TASKS_START": {
    +              "description": "Start comparator",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stop comparator",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "TASKS_SAMPLE": {
    +              "description": "Sample comparator value",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only"
    +            },
    +            "EVENTS_READY": {
    +              "description": "LPCOMP is ready and output is valid",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_DOWN": {
    +              "description": "Downward crossing",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_UP": {
    +              "description": "Upward crossing",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "EVENTS_CROSS": {
    +              "description": "Downward or upward crossing",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "SHORTS": {
    +              "description": "Shortcut register",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY_SAMPLE": {
    +                    "description": "Shortcut between READY event and SAMPLE task",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "READY_STOP": {
    +                    "description": "Shortcut between READY event and STOP task",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DOWN_STOP": {
    +                    "description": "Shortcut between DOWN event and STOP task",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "UP_STOP": {
    +                    "description": "Shortcut between UP event and STOP task",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CROSS_STOP": {
    +                    "description": "Shortcut between CROSS event and STOP task",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "Write '1' to Enable interrupt for READY event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DOWN": {
    +                    "description": "Write '1' to Enable interrupt for DOWN event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "UP": {
    +                    "description": "Write '1' to Enable interrupt for UP event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CROSS": {
    +                    "description": "Write '1' to Enable interrupt for CROSS event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "Write '1' to Disable interrupt for READY event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DOWN": {
    +                    "description": "Write '1' to Disable interrupt for DOWN event",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "UP": {
    +                    "description": "Write '1' to Disable interrupt for UP event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CROSS": {
    +                    "description": "Write '1' to Disable interrupt for CROSS event",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "RESULT": {
    +              "description": "Compare result",
    +              "offset": 1024,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RESULT": {
    +                    "description": "Result of last compare. Decision point SAMPLE task.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Below": {
    +                            "description": "Input voltage is below the reference threshold (VIN+ < VIN-).",
    +                            "value": 0
    +                          },
    +                          "Above": {
    +                            "description": "Input voltage is above the reference threshold (VIN+ > VIN-).",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable LPCOMP",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable LPCOMP",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PSEL": {
    +              "description": "Input pin select",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSEL": {
    +                    "description": "Analog pin select",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "AnalogInput0": {
    +                            "description": "AIN0 selected as analog input",
    +                            "value": 0
    +                          },
    +                          "AnalogInput1": {
    +                            "description": "AIN1 selected as analog input",
    +                            "value": 1
    +                          },
    +                          "AnalogInput2": {
    +                            "description": "AIN2 selected as analog input",
    +                            "value": 2
    +                          },
    +                          "AnalogInput3": {
    +                            "description": "AIN3 selected as analog input",
    +                            "value": 3
    +                          },
    +                          "AnalogInput4": {
    +                            "description": "AIN4 selected as analog input",
    +                            "value": 4
    +                          },
    +                          "AnalogInput5": {
    +                            "description": "AIN5 selected as analog input",
    +                            "value": 5
    +                          },
    +                          "AnalogInput6": {
    +                            "description": "AIN6 selected as analog input",
    +                            "value": 6
    +                          },
    +                          "AnalogInput7": {
    +                            "description": "AIN7 selected as analog input",
    +                            "value": 7
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "REFSEL": {
    +              "description": "Reference select",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 4,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REFSEL": {
    +                    "description": "Reference select",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Ref1_8Vdd": {
    +                            "description": "VDD * 1/8 selected as reference",
    +                            "value": 0
    +                          },
    +                          "Ref2_8Vdd": {
    +                            "description": "VDD * 2/8 selected as reference",
    +                            "value": 1
    +                          },
    +                          "Ref3_8Vdd": {
    +                            "description": "VDD * 3/8 selected as reference",
    +                            "value": 2
    +                          },
    +                          "Ref4_8Vdd": {
    +                            "description": "VDD * 4/8 selected as reference",
    +                            "value": 3
    +                          },
    +                          "Ref5_8Vdd": {
    +                            "description": "VDD * 5/8 selected as reference",
    +                            "value": 4
    +                          },
    +                          "Ref6_8Vdd": {
    +                            "description": "VDD * 6/8 selected as reference",
    +                            "value": 5
    +                          },
    +                          "Ref7_8Vdd": {
    +                            "description": "VDD * 7/8 selected as reference",
    +                            "value": 6
    +                          },
    +                          "ARef": {
    +                            "description": "External analog reference selected",
    +                            "value": 7
    +                          },
    +                          "Ref1_16Vdd": {
    +                            "description": "VDD * 1/16 selected as reference",
    +                            "value": 8
    +                          },
    +                          "Ref3_16Vdd": {
    +                            "description": "VDD * 3/16 selected as reference",
    +                            "value": 9
    +                          },
    +                          "Ref5_16Vdd": {
    +                            "description": "VDD * 5/16 selected as reference",
    +                            "value": 10
    +                          },
    +                          "Ref7_16Vdd": {
    +                            "description": "VDD * 7/16 selected as reference",
    +                            "value": 11
    +                          },
    +                          "Ref9_16Vdd": {
    +                            "description": "VDD * 9/16 selected as reference",
    +                            "value": 12
    +                          },
    +                          "Ref11_16Vdd": {
    +                            "description": "VDD * 11/16 selected as reference",
    +                            "value": 13
    +                          },
    +                          "Ref13_16Vdd": {
    +                            "description": "VDD * 13/16 selected as reference",
    +                            "value": 14
    +                          },
    +                          "Ref15_16Vdd": {
    +                            "description": "VDD * 15/16 selected as reference",
    +                            "value": 15
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EXTREFSEL": {
    +              "description": "External reference select",
    +              "offset": 1292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXTREFSEL": {
    +                    "description": "External analog reference select",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "AnalogReference0": {
    +                            "description": "Use AIN0 as external analog reference",
    +                            "value": 0
    +                          },
    +                          "AnalogReference1": {
    +                            "description": "Use AIN1 as external analog reference",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ANADETECT": {
    +              "description": "Analog detect configuration",
    +              "offset": 1312,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ANADETECT": {
    +                    "description": "Analog detect configuration",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Cross": {
    +                            "description": "Generate ANADETECT on crossing, both upward crossing and downward crossing",
    +                            "value": 0
    +                          },
    +                          "Up": {
    +                            "description": "Generate ANADETECT on upward crossing only",
    +                            "value": 1
    +                          },
    +                          "Down": {
    +                            "description": "Generate ANADETECT on downward crossing only",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "HYST": {
    +              "description": "Comparator hysteresis enable",
    +              "offset": 1336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HYST": {
    +                    "description": "Comparator hysteresis enable",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoHyst": {
    +                            "description": "Comparator hysteresis disabled",
    +                            "value": 0
    +                          },
    +                          "Hyst50mV": {
    +                            "description": "Comparator hysteresis disabled (typ. 50 mV)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SWI0": {
    +        "description": "Software interrupt 0",
    +        "children": {
    +          "registers": {
    +            "UNUSED": {
    +              "description": "Unused.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only"
    +            }
    +          }
    +        }
    +      }
    +    }
    +  },
    +  "devices": {
    +    "nrf52": {
    +      "arch": "cortex_m4",
    +      "description": "nRF52832 reference description for radio MCU with ARM 32-bit Cortex-M4 Microcontroller ",
    +      "properties": {
    +        "cpu.nvic_prio_bits": "3",
    +        "cpu.mpu": "1",
    +        "cpu.fpu": "1",
    +        "cpu.revision": "r0p1",
    +        "cpu.vendor_systick_config": "0",
    +        "license": "\nCopyright (c) 2010 - 2021, Nordic Semiconductor ASA All rights reserved.\\n\n\\n\nRedistribution and use in source and binary forms, with or without\\n\nmodification, are permitted provided that the following conditions are met:\\n\n\\n\n1. Redistributions of source code must retain the above copyright notice, this\\n\n   list of conditions and the following disclaimer.\\n\n\\n\n2. Redistributions in binary form must reproduce the above copyright\\n\n   notice, this list of conditions and the following disclaimer in the\\n\n   documentation and/or other materials provided with the distribution.\\n\n\\n\n3. Neither the name of Nordic Semiconductor ASA nor the names of its\\n\n   contributors may be used to endorse or promote products derived from this\\n\n   software without specific prior written permission.\\n\n\\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\\n\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\\n\nIMPLIED WARRANTIES OF MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE\\n\nARE DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE\\n\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\\n\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\\n\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\\n\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\\n\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\\n\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\\n\nPOSSIBILITY OF SUCH DAMAGE.\\n\n        ",
    +        "cpu.name": "CM4",
    +        "cpu.endian": "little"
    +      },
    +      "children": {
    +        "interrupts": {
    +          "MemManageFault": {
    +            "index": -12
    +          },
    +          "BusFault": {
    +            "index": -11
    +          },
    +          "UsageFault": {
    +            "index": -10
    +          },
    +          "DebugMonitor": {
    +            "index": -4
    +          },
    +          "NMI": {
    +            "index": -14
    +          },
    +          "HardFault": {
    +            "index": -13
    +          },
    +          "SVCall": {
    +            "index": -5
    +          },
    +          "PendSV": {
    +            "index": -2
    +          },
    +          "SysTick": {
    +            "index": -1
    +          },
    +          "POWER_CLOCK": {
    +            "index": 0
    +          },
    +          "RADIO": {
    +            "index": 1
    +          },
    +          "UARTE0_UART0": {
    +            "index": 2
    +          },
    +          "SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0": {
    +            "index": 3
    +          },
    +          "SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1": {
    +            "index": 4
    +          },
    +          "NFCT": {
    +            "index": 5
    +          },
    +          "GPIOTE": {
    +            "index": 6
    +          },
    +          "SAADC": {
    +            "index": 7
    +          },
    +          "TIMER0": {
    +            "index": 8
    +          },
    +          "TIMER1": {
    +            "index": 9
    +          },
    +          "TIMER2": {
    +            "index": 10
    +          },
    +          "RTC0": {
    +            "index": 11
    +          },
    +          "TEMP": {
    +            "index": 12
    +          },
    +          "RNG": {
    +            "index": 13
    +          },
    +          "ECB": {
    +            "index": 14
    +          },
    +          "CCM_AAR": {
    +            "index": 15
    +          },
    +          "WDT": {
    +            "index": 16
    +          },
    +          "RTC1": {
    +            "index": 17
    +          },
    +          "QDEC": {
    +            "index": 18
    +          },
    +          "COMP_LPCOMP": {
    +            "index": 19
    +          },
    +          "SWI0_EGU0": {
    +            "index": 20
    +          },
    +          "SWI1_EGU1": {
    +            "index": 21
    +          },
    +          "SWI2_EGU2": {
    +            "index": 22
    +          },
    +          "SWI3_EGU3": {
    +            "index": 23
    +          },
    +          "SWI4_EGU4": {
    +            "index": 24
    +          },
    +          "SWI5_EGU5": {
    +            "index": 25
    +          },
    +          "TIMER3": {
    +            "index": 26
    +          },
    +          "TIMER4": {
    +            "index": 27
    +          },
    +          "PWM0": {
    +            "index": 28
    +          },
    +          "PDM": {
    +            "index": 29
    +          },
    +          "MWU": {
    +            "index": 32
    +          },
    +          "PWM1": {
    +            "index": 33
    +          },
    +          "PWM2": {
    +            "index": 34
    +          },
    +          "SPIM2_SPIS2_SPI2": {
    +            "index": 35
    +          },
    +          "RTC2": {
    +            "index": 36
    +          },
    +          "I2S": {
    +            "index": 37
    +          },
    +          "FPU": {
    +            "index": 38
    +          }
    +        },
    +        "peripheral_instances": {
    +          "SysTick": {
    +            "offset": 3758153744,
    +            "type": "types.peripherals.SCS.children.register_groups.SysTick"
    +          },
    +          "FICR": {
    +            "description": "Factory Information Configuration Registers",
    +            "offset": 268435456,
    +            "type": "types.peripherals.FICR"
    +          },
    +          "UICR": {
    +            "description": "User Information Configuration Registers",
    +            "offset": 268439552,
    +            "type": "types.peripherals.UICR"
    +          },
    +          "BPROT": {
    +            "description": "Block Protect",
    +            "offset": 1073741824,
    +            "type": "types.peripherals.BPROT"
    +          },
    +          "POWER": {
    +            "description": "Power control",
    +            "offset": 1073741824,
    +            "type": "types.peripherals.POWER"
    +          },
    +          "CLOCK": {
    +            "description": "Clock control",
    +            "offset": 1073741824,
    +            "type": "types.peripherals.CLOCK"
    +          },
    +          "RADIO": {
    +            "description": "2.4 GHz Radio",
    +            "offset": 1073745920,
    +            "type": "types.peripherals.RADIO"
    +          },
    +          "UARTE0": {
    +            "description": "UART with EasyDMA",
    +            "offset": 1073750016,
    +            "type": "types.peripherals.UARTE0"
    +          },
    +          "UART0": {
    +            "description": "Universal Asynchronous Receiver/Transmitter",
    +            "offset": 1073750016,
    +            "type": "types.peripherals.UART0"
    +          },
    +          "SPIM0": {
    +            "description": "Serial Peripheral Interface Master with EasyDMA 0",
    +            "offset": 1073754112,
    +            "type": "types.peripherals.SPIM0"
    +          },
    +          "SPIS0": {
    +            "description": "SPI Slave 0",
    +            "offset": 1073754112,
    +            "type": "types.peripherals.SPIS0"
    +          },
    +          "TWIM0": {
    +            "description": "I2C compatible Two-Wire Master Interface with EasyDMA 0",
    +            "offset": 1073754112,
    +            "type": "types.peripherals.TWIM0"
    +          },
    +          "TWIS0": {
    +            "description": "I2C compatible Two-Wire Slave Interface with EasyDMA 0",
    +            "offset": 1073754112,
    +            "type": "types.peripherals.TWIS0"
    +          },
    +          "SPI0": {
    +            "description": "Serial Peripheral Interface 0",
    +            "offset": 1073754112,
    +            "type": "types.peripherals.SPI0"
    +          },
    +          "TWI0": {
    +            "description": "I2C compatible Two-Wire Interface 0",
    +            "offset": 1073754112,
    +            "type": "types.peripherals.TWI0"
    +          },
    +          "SPIM1": {
    +            "description": "Serial Peripheral Interface Master with EasyDMA 1",
    +            "offset": 1073758208,
    +            "type": "types.peripherals.SPIM0"
    +          },
    +          "SPIS1": {
    +            "description": "SPI Slave 1",
    +            "offset": 1073758208,
    +            "type": "types.peripherals.SPIS0"
    +          },
    +          "TWIM1": {
    +            "description": "I2C compatible Two-Wire Master Interface with EasyDMA 1",
    +            "offset": 1073758208,
    +            "type": "types.peripherals.TWIM0"
    +          },
    +          "TWIS1": {
    +            "description": "I2C compatible Two-Wire Slave Interface with EasyDMA 1",
    +            "offset": 1073758208,
    +            "type": "types.peripherals.TWIS0"
    +          },
    +          "SPI1": {
    +            "description": "Serial Peripheral Interface 1",
    +            "offset": 1073758208,
    +            "type": "types.peripherals.SPI0"
    +          },
    +          "TWI1": {
    +            "description": "I2C compatible Two-Wire Interface 1",
    +            "offset": 1073758208,
    +            "type": "types.peripherals.TWI0"
    +          },
    +          "NFCT": {
    +            "description": "NFC-A compatible radio",
    +            "offset": 1073762304,
    +            "type": "types.peripherals.NFCT"
    +          },
    +          "GPIOTE": {
    +            "description": "GPIO Tasks and Events",
    +            "offset": 1073766400,
    +            "type": "types.peripherals.GPIOTE"
    +          },
    +          "SAADC": {
    +            "description": "Analog to Digital Converter",
    +            "offset": 1073770496,
    +            "type": "types.peripherals.SAADC"
    +          },
    +          "TIMER0": {
    +            "description": "Timer/Counter 0",
    +            "offset": 1073774592,
    +            "type": "types.peripherals.TIMER0"
    +          },
    +          "TIMER1": {
    +            "description": "Timer/Counter 1",
    +            "offset": 1073778688,
    +            "type": "types.peripherals.TIMER0"
    +          },
    +          "TIMER2": {
    +            "description": "Timer/Counter 2",
    +            "offset": 1073782784,
    +            "type": "types.peripherals.TIMER0"
    +          },
    +          "RTC0": {
    +            "description": "Real time counter 0",
    +            "offset": 1073786880,
    +            "type": "types.peripherals.RTC0"
    +          },
    +          "TEMP": {
    +            "description": "Temperature Sensor",
    +            "offset": 1073790976,
    +            "type": "types.peripherals.TEMP"
    +          },
    +          "RNG": {
    +            "description": "Random Number Generator",
    +            "offset": 1073795072,
    +            "type": "types.peripherals.RNG"
    +          },
    +          "ECB": {
    +            "description": "AES ECB Mode Encryption",
    +            "offset": 1073799168,
    +            "type": "types.peripherals.ECB"
    +          },
    +          "CCM": {
    +            "description": "AES CCM Mode Encryption",
    +            "offset": 1073803264,
    +            "type": "types.peripherals.CCM"
    +          },
    +          "AAR": {
    +            "description": "Accelerated Address Resolver",
    +            "offset": 1073803264,
    +            "type": "types.peripherals.AAR"
    +          },
    +          "WDT": {
    +            "description": "Watchdog Timer",
    +            "offset": 1073807360,
    +            "type": "types.peripherals.WDT"
    +          },
    +          "RTC1": {
    +            "description": "Real time counter 1",
    +            "offset": 1073811456,
    +            "type": "types.peripherals.RTC0"
    +          },
    +          "QDEC": {
    +            "description": "Quadrature Decoder",
    +            "offset": 1073815552,
    +            "type": "types.peripherals.QDEC"
    +          },
    +          "COMP": {
    +            "description": "Comparator",
    +            "offset": 1073819648,
    +            "type": "types.peripherals.COMP"
    +          },
    +          "LPCOMP": {
    +            "description": "Low Power Comparator",
    +            "offset": 1073819648,
    +            "type": "types.peripherals.LPCOMP"
    +          },
    +          "SWI0": {
    +            "description": "Software interrupt 0",
    +            "offset": 1073823744,
    +            "type": "types.peripherals.SWI0"
    +          },
    +          "EGU0": {
    +            "description": "Event Generator Unit 0",
    +            "offset": 1073823744,
    +            "type": "types.peripherals.EGU0"
    +          },
    +          "SWI1": {
    +            "description": "Software interrupt 1",
    +            "offset": 1073827840,
    +            "type": "types.peripherals.SWI0"
    +          },
    +          "EGU1": {
    +            "description": "Event Generator Unit 1",
    +            "offset": 1073827840,
    +            "type": "types.peripherals.EGU0"
    +          },
    +          "SWI2": {
    +            "description": "Software interrupt 2",
    +            "offset": 1073831936,
    +            "type": "types.peripherals.SWI0"
    +          },
    +          "EGU2": {
    +            "description": "Event Generator Unit 2",
    +            "offset": 1073831936,
    +            "type": "types.peripherals.EGU0"
    +          },
    +          "SWI3": {
    +            "description": "Software interrupt 3",
    +            "offset": 1073836032,
    +            "type": "types.peripherals.SWI0"
    +          },
    +          "EGU3": {
    +            "description": "Event Generator Unit 3",
    +            "offset": 1073836032,
    +            "type": "types.peripherals.EGU0"
    +          },
    +          "SWI4": {
    +            "description": "Software interrupt 4",
    +            "offset": 1073840128,
    +            "type": "types.peripherals.SWI0"
    +          },
    +          "EGU4": {
    +            "description": "Event Generator Unit 4",
    +            "offset": 1073840128,
    +            "type": "types.peripherals.EGU0"
    +          },
    +          "SWI5": {
    +            "description": "Software interrupt 5",
    +            "offset": 1073844224,
    +            "type": "types.peripherals.SWI0"
    +          },
    +          "EGU5": {
    +            "description": "Event Generator Unit 5",
    +            "offset": 1073844224,
    +            "type": "types.peripherals.EGU0"
    +          },
    +          "TIMER3": {
    +            "description": "Timer/Counter 3",
    +            "offset": 1073848320,
    +            "type": "types.peripherals.TIMER0"
    +          },
    +          "TIMER4": {
    +            "description": "Timer/Counter 4",
    +            "offset": 1073852416,
    +            "type": "types.peripherals.TIMER0"
    +          },
    +          "PWM0": {
    +            "description": "Pulse Width Modulation Unit 0",
    +            "offset": 1073856512,
    +            "type": "types.peripherals.PWM0"
    +          },
    +          "PDM": {
    +            "description": "Pulse Density Modulation (Digital Microphone) Interface",
    +            "offset": 1073860608,
    +            "type": "types.peripherals.PDM"
    +          },
    +          "NVMC": {
    +            "description": "Non Volatile Memory Controller",
    +            "offset": 1073864704,
    +            "type": "types.peripherals.NVMC"
    +          },
    +          "PPI": {
    +            "description": "Programmable Peripheral Interconnect",
    +            "offset": 1073868800,
    +            "type": "types.peripherals.PPI"
    +          },
    +          "MWU": {
    +            "description": "Memory Watch Unit",
    +            "offset": 1073872896,
    +            "type": "types.peripherals.MWU"
    +          },
    +          "PWM1": {
    +            "description": "Pulse Width Modulation Unit 1",
    +            "offset": 1073876992,
    +            "type": "types.peripherals.PWM0"
    +          },
    +          "PWM2": {
    +            "description": "Pulse Width Modulation Unit 2",
    +            "offset": 1073881088,
    +            "type": "types.peripherals.PWM0"
    +          },
    +          "SPIM2": {
    +            "description": "Serial Peripheral Interface Master with EasyDMA 2",
    +            "offset": 1073885184,
    +            "type": "types.peripherals.SPIM0"
    +          },
    +          "SPIS2": {
    +            "description": "SPI Slave 2",
    +            "offset": 1073885184,
    +            "type": "types.peripherals.SPIS0"
    +          },
    +          "SPI2": {
    +            "description": "Serial Peripheral Interface 2",
    +            "offset": 1073885184,
    +            "type": "types.peripherals.SPI0"
    +          },
    +          "RTC2": {
    +            "description": "Real time counter 2",
    +            "offset": 1073889280,
    +            "type": "types.peripherals.RTC0"
    +          },
    +          "I2S": {
    +            "description": "Inter-IC Sound",
    +            "offset": 1073893376,
    +            "type": "types.peripherals.I2S"
    +          },
    +          "FPU": {
    +            "description": "FPU",
    +            "offset": 1073897472,
    +            "type": "types.peripherals.FPU"
    +          },
    +          "P0": {
    +            "description": "GPIO Port 1",
    +            "offset": 1342177280,
    +            "type": "types.peripherals.P0"
    +          }
    +        }
    +      }
    +    }
    +  }
    +}
    \ No newline at end of file
    diff --git a/src/chips/nrf52.zig b/src/chips/nrf52.zig
    new file mode 100644
    index 000000000..1e3de3bc8
    --- /dev/null
    +++ b/src/chips/nrf52.zig
    @@ -0,0 +1,16821 @@
    +const micro = @import("microzig");
    +const mmio = micro.mmio;
    +
    +pub const devices = struct {
    +    ///  nRF52832 reference description for radio MCU with ARM 32-bit Cortex-M4 Microcontroller
    +    pub const nrf52 = struct {
    +        pub const properties = struct {
    +            pub const @"cpu.nvic_prio_bits" = "3";
    +            pub const @"cpu.mpu" = "1";
    +            pub const @"cpu.fpu" = "1";
    +            pub const @"cpu.revision" = "r0p1";
    +            pub const @"cpu.vendor_systick_config" = "0";
    +            pub const license =
    +                \\
    +                \\Copyright (c) 2010 - 2021, Nordic Semiconductor ASA All rights reserved.\n
    +                \\\n
    +                \\Redistribution and use in source and binary forms, with or without\n
    +                \\modification, are permitted provided that the following conditions are met:\n
    +                \\\n
    +                \\1. Redistributions of source code must retain the above copyright notice, this\n
    +                \\   list of conditions and the following disclaimer.\n
    +                \\\n
    +                \\2. Redistributions in binary form must reproduce the above copyright\n
    +                \\   notice, this list of conditions and the following disclaimer in the\n
    +                \\   documentation and/or other materials provided with the distribution.\n
    +                \\\n
    +                \\3. Neither the name of Nordic Semiconductor ASA nor the names of its\n
    +                \\   contributors may be used to endorse or promote products derived from this\n
    +                \\   software without specific prior written permission.\n
    +                \\\n
    +                \\THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\n
    +                \\AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n
    +                \\IMPLIED WARRANTIES OF MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE\n
    +                \\ARE DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE\n
    +                \\LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n
    +                \\CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n
    +                \\SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n
    +                \\INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n
    +                \\CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n
    +                \\ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n
    +                \\POSSIBILITY OF SUCH DAMAGE.\n
    +                \\        
    +            ;
    +            pub const @"cpu.name" = "CM4";
    +            pub const @"cpu.endian" = "little";
    +        };
    +
    +        pub const VectorTable = extern struct {
    +            const Handler = micro.interrupt.Handler;
    +            const unhandled = micro.interrupt.unhandled;
    +
    +            initial_stack_pointer: u32,
    +            Reset: Handler = unhandled,
    +            NMI: Handler = unhandled,
    +            HardFault: Handler = unhandled,
    +            MemManageFault: Handler = unhandled,
    +            BusFault: Handler = unhandled,
    +            UsageFault: Handler = unhandled,
    +            reserved5: [4]u32 = undefined,
    +            SVCall: Handler = unhandled,
    +            DebugMonitor: Handler = unhandled,
    +            reserved11: [1]u32 = undefined,
    +            PendSV: Handler = unhandled,
    +            SysTick: Handler = unhandled,
    +            POWER_CLOCK: Handler = unhandled,
    +            RADIO: Handler = unhandled,
    +            UARTE0_UART0: Handler = unhandled,
    +            SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0: Handler = unhandled,
    +            SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1: Handler = unhandled,
    +            NFCT: Handler = unhandled,
    +            GPIOTE: Handler = unhandled,
    +            SAADC: Handler = unhandled,
    +            TIMER0: Handler = unhandled,
    +            TIMER1: Handler = unhandled,
    +            TIMER2: Handler = unhandled,
    +            RTC0: Handler = unhandled,
    +            TEMP: Handler = unhandled,
    +            RNG: Handler = unhandled,
    +            ECB: Handler = unhandled,
    +            CCM_AAR: Handler = unhandled,
    +            WDT: Handler = unhandled,
    +            RTC1: Handler = unhandled,
    +            QDEC: Handler = unhandled,
    +            COMP_LPCOMP: Handler = unhandled,
    +            SWI0_EGU0: Handler = unhandled,
    +            SWI1_EGU1: Handler = unhandled,
    +            SWI2_EGU2: Handler = unhandled,
    +            SWI3_EGU3: Handler = unhandled,
    +            SWI4_EGU4: Handler = unhandled,
    +            SWI5_EGU5: Handler = unhandled,
    +            TIMER3: Handler = unhandled,
    +            TIMER4: Handler = unhandled,
    +            PWM0: Handler = unhandled,
    +            PDM: Handler = unhandled,
    +            reserved44: [2]u32 = undefined,
    +            MWU: Handler = unhandled,
    +            PWM1: Handler = unhandled,
    +            PWM2: Handler = unhandled,
    +            SPIM2_SPIS2_SPI2: Handler = unhandled,
    +            RTC2: Handler = unhandled,
    +            I2S: Handler = unhandled,
    +            FPU: Handler = unhandled,
    +        };
    +
    +        pub const peripherals = struct {
    +            ///  Factory Information Configuration Registers
    +            pub const FICR = @intToPtr(*volatile types.peripherals.FICR, 0x10000000);
    +            ///  User Information Configuration Registers
    +            pub const UICR = @intToPtr(*volatile types.peripherals.UICR, 0x10001000);
    +            ///  Block Protect
    +            pub const BPROT = @intToPtr(*volatile types.peripherals.BPROT, 0x40000000);
    +            ///  Power control
    +            pub const POWER = @intToPtr(*volatile types.peripherals.POWER, 0x40000000);
    +            ///  Clock control
    +            pub const CLOCK = @intToPtr(*volatile types.peripherals.CLOCK, 0x40000000);
    +            ///  2.4 GHz Radio
    +            pub const RADIO = @intToPtr(*volatile types.peripherals.RADIO, 0x40001000);
    +            ///  UART with EasyDMA
    +            pub const UARTE0 = @intToPtr(*volatile types.peripherals.UARTE0, 0x40002000);
    +            ///  Universal Asynchronous Receiver/Transmitter
    +            pub const UART0 = @intToPtr(*volatile types.peripherals.UART0, 0x40002000);
    +            ///  Serial Peripheral Interface Master with EasyDMA 0
    +            pub const SPIM0 = @intToPtr(*volatile types.peripherals.SPIM0, 0x40003000);
    +            ///  SPI Slave 0
    +            pub const SPIS0 = @intToPtr(*volatile types.peripherals.SPIS0, 0x40003000);
    +            ///  I2C compatible Two-Wire Master Interface with EasyDMA 0
    +            pub const TWIM0 = @intToPtr(*volatile types.peripherals.TWIM0, 0x40003000);
    +            ///  I2C compatible Two-Wire Slave Interface with EasyDMA 0
    +            pub const TWIS0 = @intToPtr(*volatile types.peripherals.TWIS0, 0x40003000);
    +            ///  Serial Peripheral Interface 0
    +            pub const SPI0 = @intToPtr(*volatile types.peripherals.SPI0, 0x40003000);
    +            ///  I2C compatible Two-Wire Interface 0
    +            pub const TWI0 = @intToPtr(*volatile types.peripherals.TWI0, 0x40003000);
    +            ///  Serial Peripheral Interface Master with EasyDMA 1
    +            pub const SPIM1 = @intToPtr(*volatile types.peripherals.SPIM0, 0x40004000);
    +            ///  SPI Slave 1
    +            pub const SPIS1 = @intToPtr(*volatile types.peripherals.SPIS0, 0x40004000);
    +            ///  I2C compatible Two-Wire Master Interface with EasyDMA 1
    +            pub const TWIM1 = @intToPtr(*volatile types.peripherals.TWIM0, 0x40004000);
    +            ///  I2C compatible Two-Wire Slave Interface with EasyDMA 1
    +            pub const TWIS1 = @intToPtr(*volatile types.peripherals.TWIS0, 0x40004000);
    +            ///  Serial Peripheral Interface 1
    +            pub const SPI1 = @intToPtr(*volatile types.peripherals.SPI0, 0x40004000);
    +            ///  I2C compatible Two-Wire Interface 1
    +            pub const TWI1 = @intToPtr(*volatile types.peripherals.TWI0, 0x40004000);
    +            ///  NFC-A compatible radio
    +            pub const NFCT = @intToPtr(*volatile types.peripherals.NFCT, 0x40005000);
    +            ///  GPIO Tasks and Events
    +            pub const GPIOTE = @intToPtr(*volatile types.peripherals.GPIOTE, 0x40006000);
    +            ///  Analog to Digital Converter
    +            pub const SAADC = @intToPtr(*volatile types.peripherals.SAADC, 0x40007000);
    +            ///  Timer/Counter 0
    +            pub const TIMER0 = @intToPtr(*volatile types.peripherals.TIMER0, 0x40008000);
    +            ///  Timer/Counter 1
    +            pub const TIMER1 = @intToPtr(*volatile types.peripherals.TIMER0, 0x40009000);
    +            ///  Timer/Counter 2
    +            pub const TIMER2 = @intToPtr(*volatile types.peripherals.TIMER0, 0x4000a000);
    +            ///  Real time counter 0
    +            pub const RTC0 = @intToPtr(*volatile types.peripherals.RTC0, 0x4000b000);
    +            ///  Temperature Sensor
    +            pub const TEMP = @intToPtr(*volatile types.peripherals.TEMP, 0x4000c000);
    +            ///  Random Number Generator
    +            pub const RNG = @intToPtr(*volatile types.peripherals.RNG, 0x4000d000);
    +            ///  AES ECB Mode Encryption
    +            pub const ECB = @intToPtr(*volatile types.peripherals.ECB, 0x4000e000);
    +            ///  AES CCM Mode Encryption
    +            pub const CCM = @intToPtr(*volatile types.peripherals.CCM, 0x4000f000);
    +            ///  Accelerated Address Resolver
    +            pub const AAR = @intToPtr(*volatile types.peripherals.AAR, 0x4000f000);
    +            ///  Watchdog Timer
    +            pub const WDT = @intToPtr(*volatile types.peripherals.WDT, 0x40010000);
    +            ///  Real time counter 1
    +            pub const RTC1 = @intToPtr(*volatile types.peripherals.RTC0, 0x40011000);
    +            ///  Quadrature Decoder
    +            pub const QDEC = @intToPtr(*volatile types.peripherals.QDEC, 0x40012000);
    +            ///  Comparator
    +            pub const COMP = @intToPtr(*volatile types.peripherals.COMP, 0x40013000);
    +            ///  Low Power Comparator
    +            pub const LPCOMP = @intToPtr(*volatile types.peripherals.LPCOMP, 0x40013000);
    +            ///  Software interrupt 0
    +            pub const SWI0 = @intToPtr(*volatile types.peripherals.SWI0, 0x40014000);
    +            ///  Event Generator Unit 0
    +            pub const EGU0 = @intToPtr(*volatile types.peripherals.EGU0, 0x40014000);
    +            ///  Software interrupt 1
    +            pub const SWI1 = @intToPtr(*volatile types.peripherals.SWI0, 0x40015000);
    +            ///  Event Generator Unit 1
    +            pub const EGU1 = @intToPtr(*volatile types.peripherals.EGU0, 0x40015000);
    +            ///  Software interrupt 2
    +            pub const SWI2 = @intToPtr(*volatile types.peripherals.SWI0, 0x40016000);
    +            ///  Event Generator Unit 2
    +            pub const EGU2 = @intToPtr(*volatile types.peripherals.EGU0, 0x40016000);
    +            ///  Software interrupt 3
    +            pub const SWI3 = @intToPtr(*volatile types.peripherals.SWI0, 0x40017000);
    +            ///  Event Generator Unit 3
    +            pub const EGU3 = @intToPtr(*volatile types.peripherals.EGU0, 0x40017000);
    +            ///  Software interrupt 4
    +            pub const SWI4 = @intToPtr(*volatile types.peripherals.SWI0, 0x40018000);
    +            ///  Event Generator Unit 4
    +            pub const EGU4 = @intToPtr(*volatile types.peripherals.EGU0, 0x40018000);
    +            ///  Software interrupt 5
    +            pub const SWI5 = @intToPtr(*volatile types.peripherals.SWI0, 0x40019000);
    +            ///  Event Generator Unit 5
    +            pub const EGU5 = @intToPtr(*volatile types.peripherals.EGU0, 0x40019000);
    +            ///  Timer/Counter 3
    +            pub const TIMER3 = @intToPtr(*volatile types.peripherals.TIMER0, 0x4001a000);
    +            ///  Timer/Counter 4
    +            pub const TIMER4 = @intToPtr(*volatile types.peripherals.TIMER0, 0x4001b000);
    +            ///  Pulse Width Modulation Unit 0
    +            pub const PWM0 = @intToPtr(*volatile types.peripherals.PWM0, 0x4001c000);
    +            ///  Pulse Density Modulation (Digital Microphone) Interface
    +            pub const PDM = @intToPtr(*volatile types.peripherals.PDM, 0x4001d000);
    +            ///  Non Volatile Memory Controller
    +            pub const NVMC = @intToPtr(*volatile types.peripherals.NVMC, 0x4001e000);
    +            ///  Programmable Peripheral Interconnect
    +            pub const PPI = @intToPtr(*volatile types.peripherals.PPI, 0x4001f000);
    +            ///  Memory Watch Unit
    +            pub const MWU = @intToPtr(*volatile types.peripherals.MWU, 0x40020000);
    +            ///  Pulse Width Modulation Unit 1
    +            pub const PWM1 = @intToPtr(*volatile types.peripherals.PWM0, 0x40021000);
    +            ///  Pulse Width Modulation Unit 2
    +            pub const PWM2 = @intToPtr(*volatile types.peripherals.PWM0, 0x40022000);
    +            ///  Serial Peripheral Interface Master with EasyDMA 2
    +            pub const SPIM2 = @intToPtr(*volatile types.peripherals.SPIM0, 0x40023000);
    +            ///  SPI Slave 2
    +            pub const SPIS2 = @intToPtr(*volatile types.peripherals.SPIS0, 0x40023000);
    +            ///  Serial Peripheral Interface 2
    +            pub const SPI2 = @intToPtr(*volatile types.peripherals.SPI0, 0x40023000);
    +            ///  Real time counter 2
    +            pub const RTC2 = @intToPtr(*volatile types.peripherals.RTC0, 0x40024000);
    +            ///  Inter-IC Sound
    +            pub const I2S = @intToPtr(*volatile types.peripherals.I2S, 0x40025000);
    +            ///  FPU
    +            pub const FPU = @intToPtr(*volatile types.peripherals.FPU, 0x40026000);
    +            ///  GPIO Port 1
    +            pub const P0 = @intToPtr(*volatile types.peripherals.P0, 0x50000000);
    +            ///  System Tick Timer
    +            pub const SysTick = @intToPtr(*volatile types.peripherals.SCS.SysTick, 0xe000e010);
    +        };
    +    };
    +};
    +
    +pub const types = struct {
    +    pub const peripherals = struct {
    +        ///  System Control Space
    +        pub const SCS = struct {
    +            ///  System Tick Timer
    +            pub const SysTick = extern struct {
    +                ///  SysTick Control and Status Register
    +                CTRL: mmio.Mmio(packed struct(u32) {
    +                    ENABLE: u1,
    +                    TICKINT: u1,
    +                    CLKSOURCE: u1,
    +                    reserved16: u13,
    +                    COUNTFLAG: u1,
    +                    padding: u15,
    +                }),
    +                ///  SysTick Reload Value Register
    +                LOAD: mmio.Mmio(packed struct(u32) {
    +                    RELOAD: u24,
    +                    padding: u8,
    +                }),
    +                ///  SysTick Current Value Register
    +                VAL: mmio.Mmio(packed struct(u32) {
    +                    CURRENT: u24,
    +                    padding: u8,
    +                }),
    +                ///  SysTick Calibration Register
    +                CALIB: mmio.Mmio(packed struct(u32) {
    +                    TENMS: u24,
    +                    reserved30: u6,
    +                    SKEW: u1,
    +                    NOREF: u1,
    +                }),
    +            };
    +        };
    +
    +        ///  Factory Information Configuration Registers
    +        pub const FICR = extern struct {
    +            reserved16: [16]u8,
    +            ///  Code memory page size
    +            CODEPAGESIZE: mmio.Mmio(packed struct(u32) {
    +                ///  Code memory page size
    +                CODEPAGESIZE: u32,
    +            }),
    +            ///  Code memory size
    +            CODESIZE: mmio.Mmio(packed struct(u32) {
    +                ///  Code memory size in number of pages
    +                CODESIZE: u32,
    +            }),
    +            reserved96: [72]u8,
    +            ///  Description collection[0]: Device identifier
    +            DEVICEID: [2]mmio.Mmio(packed struct(u32) {
    +                ///  64 bit unique device identifier
    +                DEVICEID: u32,
    +            }),
    +            reserved128: [24]u8,
    +            ///  Description collection[0]: Encryption Root, word 0
    +            ER: [4]mmio.Mmio(packed struct(u32) {
    +                ///  Encryption Root, word n
    +                ER: u32,
    +            }),
    +            ///  Description collection[0]: Identity Root, word 0
    +            IR: [4]mmio.Mmio(packed struct(u32) {
    +                ///  Identity Root, word n
    +                IR: u32,
    +            }),
    +            ///  Device address type
    +            DEVICEADDRTYPE: mmio.Mmio(packed struct(u32) {
    +                ///  Device address type
    +                DEVICEADDRTYPE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Public address
    +                        Public = 0x0,
    +                        ///  Random address
    +                        Random = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Description collection[0]: Device address 0
    +            DEVICEADDR: [2]mmio.Mmio(packed struct(u32) {
    +                ///  48 bit device address
    +                DEVICEADDR: u32,
    +            }),
    +        };
    +
    +        ///  User Information Configuration Registers
    +        pub const UICR = extern struct {
    +            ///  Unspecified
    +            UNUSED0: u32,
    +            ///  Unspecified
    +            UNUSED1: u32,
    +            ///  Unspecified
    +            UNUSED2: u32,
    +            reserved16: [4]u8,
    +            ///  Unspecified
    +            UNUSED3: u32,
    +            ///  Description collection[0]: Reserved for Nordic firmware design
    +            NRFFW: [15]mmio.Mmio(packed struct(u32) {
    +                ///  Reserved for Nordic firmware design
    +                NRFFW: u32,
    +            }),
    +            ///  Description collection[0]: Reserved for Nordic hardware design
    +            NRFHW: [12]mmio.Mmio(packed struct(u32) {
    +                ///  Reserved for Nordic hardware design
    +                NRFHW: u32,
    +            }),
    +            ///  Description collection[0]: Reserved for customer
    +            CUSTOMER: [32]mmio.Mmio(packed struct(u32) {
    +                ///  Reserved for customer
    +                CUSTOMER: u32,
    +            }),
    +            reserved512: [256]u8,
    +            ///  Description collection[0]: Mapping of the nRESET function (see POWER chapter for details)
    +            PSELRESET: [2]mmio.Mmio(packed struct(u32) {
    +                ///  GPIO number P0.n onto which Reset is exposed
    +                PIN: u6,
    +                reserved31: u25,
    +                ///  Connection
    +                CONNECT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disconnect
    +                        Disconnected = 0x1,
    +                        ///  Connect
    +                        Connected = 0x0,
    +                    },
    +                },
    +            }),
    +            ///  Access Port protection
    +            APPROTECT: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable Access Port protection. Any other value than 0xFF being written to this field will enable protection.
    +                PALL: packed union {
    +                    raw: u8,
    +                    value: enum(u8) {
    +                        ///  Disable
    +                        Disabled = 0xff,
    +                        ///  Enable
    +                        Enabled = 0x0,
    +                        _,
    +                    },
    +                },
    +                padding: u24,
    +            }),
    +            ///  Setting of pins dedicated to NFC functionality: NFC antenna or GPIO
    +            NFCPINS: mmio.Mmio(packed struct(u32) {
    +                ///  Setting of pins dedicated to NFC functionality
    +                PROTECT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Operation as GPIO pins. Same protection as normal GPIO pins
    +                        Disabled = 0x0,
    +                        ///  Operation as NFC antenna pins. Configures the protection for NFC operation
    +                        NFC = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +        };
    +
    +        ///  Block Protect
    +        pub const BPROT = extern struct {
    +            reserved1536: [1536]u8,
    +            ///  Block protect configuration register 0
    +            CONFIG0: mmio.Mmio(packed struct(u32) {
    +                ///  Enable protection for region 0. Write '0' has no effect.
    +                REGION0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 1. Write '0' has no effect.
    +                REGION1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 2. Write '0' has no effect.
    +                REGION2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 3. Write '0' has no effect.
    +                REGION3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 4. Write '0' has no effect.
    +                REGION4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 5. Write '0' has no effect.
    +                REGION5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 6. Write '0' has no effect.
    +                REGION6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 7. Write '0' has no effect.
    +                REGION7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 8. Write '0' has no effect.
    +                REGION8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 9. Write '0' has no effect.
    +                REGION9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 10. Write '0' has no effect.
    +                REGION10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 11. Write '0' has no effect.
    +                REGION11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 12. Write '0' has no effect.
    +                REGION12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 13. Write '0' has no effect.
    +                REGION13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 14. Write '0' has no effect.
    +                REGION14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 15. Write '0' has no effect.
    +                REGION15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 16. Write '0' has no effect.
    +                REGION16: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 17. Write '0' has no effect.
    +                REGION17: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 18. Write '0' has no effect.
    +                REGION18: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 19. Write '0' has no effect.
    +                REGION19: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 20. Write '0' has no effect.
    +                REGION20: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 21. Write '0' has no effect.
    +                REGION21: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 22. Write '0' has no effect.
    +                REGION22: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 23. Write '0' has no effect.
    +                REGION23: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 24. Write '0' has no effect.
    +                REGION24: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 25. Write '0' has no effect.
    +                REGION25: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 26. Write '0' has no effect.
    +                REGION26: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 27. Write '0' has no effect.
    +                REGION27: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 28. Write '0' has no effect.
    +                REGION28: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 29. Write '0' has no effect.
    +                REGION29: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 30. Write '0' has no effect.
    +                REGION30: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 31. Write '0' has no effect.
    +                REGION31: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +            }),
    +            ///  Block protect configuration register 1
    +            CONFIG1: mmio.Mmio(packed struct(u32) {
    +                ///  Enable protection for region 32. Write '0' has no effect.
    +                REGION32: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 33. Write '0' has no effect.
    +                REGION33: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 34. Write '0' has no effect.
    +                REGION34: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 35. Write '0' has no effect.
    +                REGION35: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 36. Write '0' has no effect.
    +                REGION36: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 37. Write '0' has no effect.
    +                REGION37: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 38. Write '0' has no effect.
    +                REGION38: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 39. Write '0' has no effect.
    +                REGION39: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 40. Write '0' has no effect.
    +                REGION40: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 41. Write '0' has no effect.
    +                REGION41: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 42. Write '0' has no effect.
    +                REGION42: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 43. Write '0' has no effect.
    +                REGION43: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 44. Write '0' has no effect.
    +                REGION44: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 45. Write '0' has no effect.
    +                REGION45: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 46. Write '0' has no effect.
    +                REGION46: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 47. Write '0' has no effect.
    +                REGION47: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 48. Write '0' has no effect.
    +                REGION48: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 49. Write '0' has no effect.
    +                REGION49: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 50. Write '0' has no effect.
    +                REGION50: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 51. Write '0' has no effect.
    +                REGION51: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 52. Write '0' has no effect.
    +                REGION52: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 53. Write '0' has no effect.
    +                REGION53: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 54. Write '0' has no effect.
    +                REGION54: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 55. Write '0' has no effect.
    +                REGION55: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 56. Write '0' has no effect.
    +                REGION56: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 57. Write '0' has no effect.
    +                REGION57: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 58. Write '0' has no effect.
    +                REGION58: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 59. Write '0' has no effect.
    +                REGION59: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 60. Write '0' has no effect.
    +                REGION60: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 61. Write '0' has no effect.
    +                REGION61: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 62. Write '0' has no effect.
    +                REGION62: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 63. Write '0' has no effect.
    +                REGION63: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +            }),
    +            ///  Disable protection mechanism in debug interface mode
    +            DISABLEINDEBUG: mmio.Mmio(packed struct(u32) {
    +                ///  Disable the protection mechanism for NVM regions while in debug interface mode. This register will only disable the protection mechanism if the device is in debug interface mode.
    +                DISABLEINDEBUG: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable in debug
    +                        Disabled = 0x1,
    +                        ///  Enable in debug
    +                        Enabled = 0x0,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Unspecified
    +            UNUSED0: u32,
    +            ///  Block protect configuration register 2
    +            CONFIG2: mmio.Mmio(packed struct(u32) {
    +                ///  Enable protection for region 64. Write '0' has no effect.
    +                REGION64: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 65. Write '0' has no effect.
    +                REGION65: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 66. Write '0' has no effect.
    +                REGION66: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 67. Write '0' has no effect.
    +                REGION67: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 68. Write '0' has no effect.
    +                REGION68: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 69. Write '0' has no effect.
    +                REGION69: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 70. Write '0' has no effect.
    +                REGION70: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 71. Write '0' has no effect.
    +                REGION71: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 72. Write '0' has no effect.
    +                REGION72: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 73. Write '0' has no effect.
    +                REGION73: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 74. Write '0' has no effect.
    +                REGION74: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 75. Write '0' has no effect.
    +                REGION75: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 76. Write '0' has no effect.
    +                REGION76: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 77. Write '0' has no effect.
    +                REGION77: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 78. Write '0' has no effect.
    +                REGION78: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 79. Write '0' has no effect.
    +                REGION79: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 80. Write '0' has no effect.
    +                REGION80: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 81. Write '0' has no effect.
    +                REGION81: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 82. Write '0' has no effect.
    +                REGION82: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 83. Write '0' has no effect.
    +                REGION83: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 84. Write '0' has no effect.
    +                REGION84: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 85. Write '0' has no effect.
    +                REGION85: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 86. Write '0' has no effect.
    +                REGION86: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 87. Write '0' has no effect.
    +                REGION87: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 88. Write '0' has no effect.
    +                REGION88: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 89. Write '0' has no effect.
    +                REGION89: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 90. Write '0' has no effect.
    +                REGION90: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 91. Write '0' has no effect.
    +                REGION91: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 92. Write '0' has no effect.
    +                REGION92: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 93. Write '0' has no effect.
    +                REGION93: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 94. Write '0' has no effect.
    +                REGION94: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 95. Write '0' has no effect.
    +                REGION95: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +            }),
    +            ///  Block protect configuration register 3
    +            CONFIG3: mmio.Mmio(packed struct(u32) {
    +                ///  Enable protection for region 96. Write '0' has no effect.
    +                REGION96: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 97. Write '0' has no effect.
    +                REGION97: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 98. Write '0' has no effect.
    +                REGION98: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 99. Write '0' has no effect.
    +                REGION99: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 100. Write '0' has no effect.
    +                REGION100: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 101. Write '0' has no effect.
    +                REGION101: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 102. Write '0' has no effect.
    +                REGION102: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 103. Write '0' has no effect.
    +                REGION103: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 104. Write '0' has no effect.
    +                REGION104: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 105. Write '0' has no effect.
    +                REGION105: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 106. Write '0' has no effect.
    +                REGION106: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 107. Write '0' has no effect.
    +                REGION107: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 108. Write '0' has no effect.
    +                REGION108: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 109. Write '0' has no effect.
    +                REGION109: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 110. Write '0' has no effect.
    +                REGION110: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 111. Write '0' has no effect.
    +                REGION111: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 112. Write '0' has no effect.
    +                REGION112: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 113. Write '0' has no effect.
    +                REGION113: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 114. Write '0' has no effect.
    +                REGION114: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 115. Write '0' has no effect.
    +                REGION115: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 116. Write '0' has no effect.
    +                REGION116: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 117. Write '0' has no effect.
    +                REGION117: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 118. Write '0' has no effect.
    +                REGION118: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 119. Write '0' has no effect.
    +                REGION119: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 120. Write '0' has no effect.
    +                REGION120: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 121. Write '0' has no effect.
    +                REGION121: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 122. Write '0' has no effect.
    +                REGION122: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 123. Write '0' has no effect.
    +                REGION123: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 124. Write '0' has no effect.
    +                REGION124: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 125. Write '0' has no effect.
    +                REGION125: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 126. Write '0' has no effect.
    +                REGION126: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable protection for region 127. Write '0' has no effect.
    +                REGION127: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Protection disabled
    +                        Disabled = 0x0,
    +                        ///  Protection enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +            }),
    +        };
    +
    +        ///  Power control
    +        pub const POWER = extern struct {
    +            reserved120: [120]u8,
    +            ///  Enable constant latency mode
    +            TASKS_CONSTLAT: u32,
    +            ///  Enable low power mode (variable latency)
    +            TASKS_LOWPWR: u32,
    +            reserved264: [136]u8,
    +            ///  Power failure warning
    +            EVENTS_POFWARN: u32,
    +            reserved276: [8]u8,
    +            ///  CPU entered WFI/WFE sleep
    +            EVENTS_SLEEPENTER: u32,
    +            ///  CPU exited WFI/WFE sleep
    +            EVENTS_SLEEPEXIT: u32,
    +            reserved772: [488]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                reserved2: u2,
    +                ///  Write '1' to Enable interrupt for POFWARN event
    +                POFWARN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved5: u2,
    +                ///  Write '1' to Enable interrupt for SLEEPENTER event
    +                SLEEPENTER: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for SLEEPEXIT event
    +                SLEEPEXIT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u25,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                reserved2: u2,
    +                ///  Write '1' to Disable interrupt for POFWARN event
    +                POFWARN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved5: u2,
    +                ///  Write '1' to Disable interrupt for SLEEPENTER event
    +                SLEEPENTER: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for SLEEPEXIT event
    +                SLEEPEXIT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u25,
    +            }),
    +            reserved1024: [244]u8,
    +            ///  Reset reason
    +            RESETREAS: mmio.Mmio(packed struct(u32) {
    +                ///  Reset from pin-reset detected
    +                RESETPIN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Not detected
    +                        NotDetected = 0x0,
    +                        ///  Detected
    +                        Detected = 0x1,
    +                    },
    +                },
    +                ///  Reset from watchdog detected
    +                DOG: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Not detected
    +                        NotDetected = 0x0,
    +                        ///  Detected
    +                        Detected = 0x1,
    +                    },
    +                },
    +                ///  Reset from soft reset detected
    +                SREQ: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Not detected
    +                        NotDetected = 0x0,
    +                        ///  Detected
    +                        Detected = 0x1,
    +                    },
    +                },
    +                ///  Reset from CPU lock-up detected
    +                LOCKUP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Not detected
    +                        NotDetected = 0x0,
    +                        ///  Detected
    +                        Detected = 0x1,
    +                    },
    +                },
    +                reserved16: u12,
    +                ///  Reset due to wake up from System OFF mode when wakeup is triggered from DETECT signal from GPIO
    +                OFF: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Not detected
    +                        NotDetected = 0x0,
    +                        ///  Detected
    +                        Detected = 0x1,
    +                    },
    +                },
    +                ///  Reset due to wake up from System OFF mode when wakeup is triggered from ANADETECT signal from LPCOMP
    +                LPCOMP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Not detected
    +                        NotDetected = 0x0,
    +                        ///  Detected
    +                        Detected = 0x1,
    +                    },
    +                },
    +                ///  Reset due to wake up from System OFF mode when wakeup is triggered from entering into debug interface mode
    +                DIF: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Not detected
    +                        NotDetected = 0x0,
    +                        ///  Detected
    +                        Detected = 0x1,
    +                    },
    +                },
    +                ///  Reset due to wake up from System OFF mode by NFC field detect
    +                NFC: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Not detected
    +                        NotDetected = 0x0,
    +                        ///  Detected
    +                        Detected = 0x1,
    +                    },
    +                },
    +                padding: u12,
    +            }),
    +            reserved1064: [36]u8,
    +            ///  Deprecated register - RAM status register
    +            RAMSTATUS: mmio.Mmio(packed struct(u32) {
    +                ///  RAM block 0 is on or off/powering up
    +                RAMBLOCK0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Off
    +                        Off = 0x0,
    +                        ///  On
    +                        On = 0x1,
    +                    },
    +                },
    +                ///  RAM block 1 is on or off/powering up
    +                RAMBLOCK1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Off
    +                        Off = 0x0,
    +                        ///  On
    +                        On = 0x1,
    +                    },
    +                },
    +                ///  RAM block 2 is on or off/powering up
    +                RAMBLOCK2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Off
    +                        Off = 0x0,
    +                        ///  On
    +                        On = 0x1,
    +                    },
    +                },
    +                ///  RAM block 3 is on or off/powering up
    +                RAMBLOCK3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Off
    +                        Off = 0x0,
    +                        ///  On
    +                        On = 0x1,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1280: [212]u8,
    +            ///  System OFF register
    +            SYSTEMOFF: mmio.Mmio(packed struct(u32) {
    +                ///  Enable System OFF mode
    +                SYSTEMOFF: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Enable System OFF mode
    +                        Enter = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1296: [12]u8,
    +            ///  Power failure comparator configuration
    +            POFCON: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable power failure comparator
    +                POF: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Power failure comparator threshold setting
    +                THRESHOLD: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  Set threshold to 1.7 V
    +                        V17 = 0x4,
    +                        ///  Set threshold to 1.8 V
    +                        V18 = 0x5,
    +                        ///  Set threshold to 1.9 V
    +                        V19 = 0x6,
    +                        ///  Set threshold to 2.0 V
    +                        V20 = 0x7,
    +                        ///  Set threshold to 2.1 V
    +                        V21 = 0x8,
    +                        ///  Set threshold to 2.2 V
    +                        V22 = 0x9,
    +                        ///  Set threshold to 2.3 V
    +                        V23 = 0xa,
    +                        ///  Set threshold to 2.4 V
    +                        V24 = 0xb,
    +                        ///  Set threshold to 2.5 V
    +                        V25 = 0xc,
    +                        ///  Set threshold to 2.6 V
    +                        V26 = 0xd,
    +                        ///  Set threshold to 2.7 V
    +                        V27 = 0xe,
    +                        ///  Set threshold to 2.8 V
    +                        V28 = 0xf,
    +                        _,
    +                    },
    +                },
    +                padding: u27,
    +            }),
    +            reserved1308: [8]u8,
    +            ///  General purpose retention register
    +            GPREGRET: mmio.Mmio(packed struct(u32) {
    +                ///  General purpose retention register
    +                GPREGRET: u8,
    +                padding: u24,
    +            }),
    +            ///  General purpose retention register
    +            GPREGRET2: mmio.Mmio(packed struct(u32) {
    +                ///  General purpose retention register
    +                GPREGRET: u8,
    +                padding: u24,
    +            }),
    +            ///  Deprecated register - RAM on/off register (this register is retained)
    +            RAMON: mmio.Mmio(packed struct(u32) {
    +                ///  Keep RAM block 0 on or off in system ON Mode
    +                ONRAM0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Off
    +                        RAM0Off = 0x0,
    +                        ///  On
    +                        RAM0On = 0x1,
    +                    },
    +                },
    +                ///  Keep RAM block 1 on or off in system ON Mode
    +                ONRAM1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Off
    +                        RAM1Off = 0x0,
    +                        ///  On
    +                        RAM1On = 0x1,
    +                    },
    +                },
    +                reserved16: u14,
    +                ///  Keep retention on RAM block 0 when RAM block is switched off
    +                OFFRAM0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Off
    +                        RAM0Off = 0x0,
    +                        ///  On
    +                        RAM0On = 0x1,
    +                    },
    +                },
    +                ///  Keep retention on RAM block 1 when RAM block is switched off
    +                OFFRAM1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Off
    +                        RAM1Off = 0x0,
    +                        ///  On
    +                        RAM1On = 0x1,
    +                    },
    +                },
    +                padding: u14,
    +            }),
    +            reserved1364: [44]u8,
    +            ///  Deprecated register - RAM on/off register (this register is retained)
    +            RAMONB: mmio.Mmio(packed struct(u32) {
    +                ///  Keep RAM block 2 on or off in system ON Mode
    +                ONRAM2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Off
    +                        RAM2Off = 0x0,
    +                        ///  On
    +                        RAM2On = 0x1,
    +                    },
    +                },
    +                ///  Keep RAM block 3 on or off in system ON Mode
    +                ONRAM3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Off
    +                        RAM3Off = 0x0,
    +                        ///  On
    +                        RAM3On = 0x1,
    +                    },
    +                },
    +                reserved16: u14,
    +                ///  Keep retention on RAM block 2 when RAM block is switched off
    +                OFFRAM2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Off
    +                        RAM2Off = 0x0,
    +                        ///  On
    +                        RAM2On = 0x1,
    +                    },
    +                },
    +                ///  Keep retention on RAM block 3 when RAM block is switched off
    +                OFFRAM3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Off
    +                        RAM3Off = 0x0,
    +                        ///  On
    +                        RAM3On = 0x1,
    +                    },
    +                },
    +                padding: u14,
    +            }),
    +            reserved1400: [32]u8,
    +            ///  DC/DC enable register
    +            DCDCEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable DC/DC converter
    +                DCDCEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +        };
    +
    +        ///  Clock control
    +        pub const CLOCK = extern struct {
    +            ///  Start HFCLK crystal oscillator
    +            TASKS_HFCLKSTART: u32,
    +            ///  Stop HFCLK crystal oscillator
    +            TASKS_HFCLKSTOP: u32,
    +            ///  Start LFCLK source
    +            TASKS_LFCLKSTART: u32,
    +            ///  Stop LFCLK source
    +            TASKS_LFCLKSTOP: u32,
    +            ///  Start calibration of LFRC oscillator
    +            TASKS_CAL: u32,
    +            ///  Start calibration timer
    +            TASKS_CTSTART: u32,
    +            ///  Stop calibration timer
    +            TASKS_CTSTOP: u32,
    +            reserved256: [228]u8,
    +            ///  HFCLK oscillator started
    +            EVENTS_HFCLKSTARTED: u32,
    +            ///  LFCLK started
    +            EVENTS_LFCLKSTARTED: u32,
    +            reserved268: [4]u8,
    +            ///  Calibration of LFCLK RC oscillator complete event
    +            EVENTS_DONE: u32,
    +            ///  Calibration timer timeout
    +            EVENTS_CTTO: u32,
    +            reserved772: [496]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Enable interrupt for HFCLKSTARTED event
    +                HFCLKSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for LFCLKSTARTED event
    +                LFCLKSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved3: u1,
    +                ///  Write '1' to Enable interrupt for DONE event
    +                DONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for CTTO event
    +                CTTO: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u27,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Disable interrupt for HFCLKSTARTED event
    +                HFCLKSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for LFCLKSTARTED event
    +                LFCLKSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved3: u1,
    +                ///  Write '1' to Disable interrupt for DONE event
    +                DONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for CTTO event
    +                CTTO: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u27,
    +            }),
    +            reserved1032: [252]u8,
    +            ///  Status indicating that HFCLKSTART task has been triggered
    +            HFCLKRUN: mmio.Mmio(packed struct(u32) {
    +                ///  HFCLKSTART task triggered or not
    +                STATUS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Task not triggered
    +                        NotTriggered = 0x0,
    +                        ///  Task triggered
    +                        Triggered = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  HFCLK status
    +            HFCLKSTAT: mmio.Mmio(packed struct(u32) {
    +                ///  Source of HFCLK
    +                SRC: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  64 MHz internal oscillator (HFINT)
    +                        RC = 0x0,
    +                        ///  64 MHz crystal oscillator (HFXO)
    +                        Xtal = 0x1,
    +                    },
    +                },
    +                reserved16: u15,
    +                ///  HFCLK state
    +                STATE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  HFCLK not running
    +                        NotRunning = 0x0,
    +                        ///  HFCLK running
    +                        Running = 0x1,
    +                    },
    +                },
    +                padding: u15,
    +            }),
    +            reserved1044: [4]u8,
    +            ///  Status indicating that LFCLKSTART task has been triggered
    +            LFCLKRUN: mmio.Mmio(packed struct(u32) {
    +                ///  LFCLKSTART task triggered or not
    +                STATUS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Task not triggered
    +                        NotTriggered = 0x0,
    +                        ///  Task triggered
    +                        Triggered = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  LFCLK status
    +            LFCLKSTAT: mmio.Mmio(packed struct(u32) {
    +                ///  Source of LFCLK
    +                SRC: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  32.768 kHz RC oscillator
    +                        RC = 0x0,
    +                        ///  32.768 kHz crystal oscillator
    +                        Xtal = 0x1,
    +                        ///  32.768 kHz synthesized from HFCLK
    +                        Synth = 0x2,
    +                        _,
    +                    },
    +                },
    +                reserved16: u14,
    +                ///  LFCLK state
    +                STATE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  LFCLK not running
    +                        NotRunning = 0x0,
    +                        ///  LFCLK running
    +                        Running = 0x1,
    +                    },
    +                },
    +                padding: u15,
    +            }),
    +            ///  Copy of LFCLKSRC register, set when LFCLKSTART task was triggered
    +            LFCLKSRCCOPY: mmio.Mmio(packed struct(u32) {
    +                ///  Clock source
    +                SRC: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  32.768 kHz RC oscillator
    +                        RC = 0x0,
    +                        ///  32.768 kHz crystal oscillator
    +                        Xtal = 0x1,
    +                        ///  32.768 kHz synthesized from HFCLK
    +                        Synth = 0x2,
    +                        _,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            reserved1304: [248]u8,
    +            ///  Clock source for the LFCLK
    +            LFCLKSRC: mmio.Mmio(packed struct(u32) {
    +                ///  Clock source
    +                SRC: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  32.768 kHz RC oscillator
    +                        RC = 0x0,
    +                        ///  32.768 kHz crystal oscillator
    +                        Xtal = 0x1,
    +                        ///  32.768 kHz synthesized from HFCLK
    +                        Synth = 0x2,
    +                        _,
    +                    },
    +                },
    +                reserved16: u14,
    +                ///  Enable or disable bypass of LFCLK crystal oscillator with external clock source
    +                BYPASS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable (use with Xtal or low-swing external source)
    +                        Disabled = 0x0,
    +                        ///  Enable (use with rail-to-rail external source)
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable external source for LFCLK
    +                EXTERNAL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable external source (use with Xtal)
    +                        Disabled = 0x0,
    +                        ///  Enable use of external source instead of Xtal (SRC needs to be set to Xtal)
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u14,
    +            }),
    +            reserved1336: [28]u8,
    +            ///  Calibration timer interval
    +            CTIV: mmio.Mmio(packed struct(u32) {
    +                ///  Calibration timer interval in multiple of 0.25 seconds. Range: 0.25 seconds to 31.75 seconds.
    +                CTIV: u7,
    +                padding: u25,
    +            }),
    +            reserved1372: [32]u8,
    +            ///  Clocking options for the Trace Port debug interface
    +            TRACECONFIG: mmio.Mmio(packed struct(u32) {
    +                ///  Speed of Trace Port clock. Note that the TRACECLK pin will output this clock divided by two.
    +                TRACEPORTSPEED: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  32 MHz Trace Port clock (TRACECLK = 16 MHz)
    +                        @"32MHz" = 0x0,
    +                        ///  16 MHz Trace Port clock (TRACECLK = 8 MHz)
    +                        @"16MHz" = 0x1,
    +                        ///  8 MHz Trace Port clock (TRACECLK = 4 MHz)
    +                        @"8MHz" = 0x2,
    +                        ///  4 MHz Trace Port clock (TRACECLK = 2 MHz)
    +                        @"4MHz" = 0x3,
    +                    },
    +                },
    +                reserved16: u14,
    +                ///  Pin multiplexing of trace signals.
    +                TRACEMUX: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  GPIOs multiplexed onto all trace-pins
    +                        GPIO = 0x0,
    +                        ///  SWO multiplexed onto P0.18, GPIO multiplexed onto other trace pins
    +                        Serial = 0x1,
    +                        ///  TRACECLK and TRACEDATA multiplexed onto P0.20, P0.18, P0.16, P0.15 and P0.14.
    +                        Parallel = 0x2,
    +                        _,
    +                    },
    +                },
    +                padding: u14,
    +            }),
    +        };
    +
    +        ///  2.4 GHz Radio
    +        pub const RADIO = extern struct {
    +            ///  Enable RADIO in TX mode
    +            TASKS_TXEN: u32,
    +            ///  Enable RADIO in RX mode
    +            TASKS_RXEN: u32,
    +            ///  Start RADIO
    +            TASKS_START: u32,
    +            ///  Stop RADIO
    +            TASKS_STOP: u32,
    +            ///  Disable RADIO
    +            TASKS_DISABLE: u32,
    +            ///  Start the RSSI and take one single sample of the receive signal strength.
    +            TASKS_RSSISTART: u32,
    +            ///  Stop the RSSI measurement
    +            TASKS_RSSISTOP: u32,
    +            ///  Start the bit counter
    +            TASKS_BCSTART: u32,
    +            ///  Stop the bit counter
    +            TASKS_BCSTOP: u32,
    +            reserved256: [220]u8,
    +            ///  RADIO has ramped up and is ready to be started
    +            EVENTS_READY: u32,
    +            ///  Address sent or received
    +            EVENTS_ADDRESS: u32,
    +            ///  Packet payload sent or received
    +            EVENTS_PAYLOAD: u32,
    +            ///  Packet sent or received
    +            EVENTS_END: u32,
    +            ///  RADIO has been disabled
    +            EVENTS_DISABLED: u32,
    +            ///  A device address match occurred on the last received packet
    +            EVENTS_DEVMATCH: u32,
    +            ///  No device address match occurred on the last received packet
    +            EVENTS_DEVMISS: u32,
    +            ///  Sampling of receive signal strength complete.
    +            EVENTS_RSSIEND: u32,
    +            reserved296: [8]u8,
    +            ///  Bit counter reached bit count value.
    +            EVENTS_BCMATCH: u32,
    +            reserved304: [4]u8,
    +            ///  Packet received with CRC ok
    +            EVENTS_CRCOK: u32,
    +            ///  Packet received with CRC error
    +            EVENTS_CRCERROR: u32,
    +            reserved512: [200]u8,
    +            ///  Shortcut register
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                ///  Shortcut between READY event and START task
    +                READY_START: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between END event and DISABLE task
    +                END_DISABLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between DISABLED event and TXEN task
    +                DISABLED_TXEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between DISABLED event and RXEN task
    +                DISABLED_RXEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between ADDRESS event and RSSISTART task
    +                ADDRESS_RSSISTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between END event and START task
    +                END_START: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between ADDRESS event and BCSTART task
    +                ADDRESS_BCSTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved8: u1,
    +                ///  Shortcut between DISABLED event and RSSISTOP task
    +                DISABLED_RSSISTOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u23,
    +            }),
    +            reserved772: [256]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Enable interrupt for READY event
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for ADDRESS event
    +                ADDRESS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for PAYLOAD event
    +                PAYLOAD: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for END event
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for DISABLED event
    +                DISABLED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for DEVMATCH event
    +                DEVMATCH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for DEVMISS event
    +                DEVMISS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for RSSIEND event
    +                RSSIEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved10: u2,
    +                ///  Write '1' to Enable interrupt for BCMATCH event
    +                BCMATCH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved12: u1,
    +                ///  Write '1' to Enable interrupt for CRCOK event
    +                CRCOK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for CRCERROR event
    +                CRCERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u18,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Disable interrupt for READY event
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for ADDRESS event
    +                ADDRESS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for PAYLOAD event
    +                PAYLOAD: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for END event
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for DISABLED event
    +                DISABLED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for DEVMATCH event
    +                DEVMATCH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for DEVMISS event
    +                DEVMISS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for RSSIEND event
    +                RSSIEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved10: u2,
    +                ///  Write '1' to Disable interrupt for BCMATCH event
    +                BCMATCH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved12: u1,
    +                ///  Write '1' to Disable interrupt for CRCOK event
    +                CRCOK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for CRCERROR event
    +                CRCERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u18,
    +            }),
    +            reserved1024: [244]u8,
    +            ///  CRC status
    +            CRCSTATUS: mmio.Mmio(packed struct(u32) {
    +                ///  CRC status of packet received
    +                CRCSTATUS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Packet received with CRC error
    +                        CRCError = 0x0,
    +                        ///  Packet received with CRC ok
    +                        CRCOk = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1032: [4]u8,
    +            ///  Received address
    +            RXMATCH: mmio.Mmio(packed struct(u32) {
    +                ///  Received address
    +                RXMATCH: u3,
    +                padding: u29,
    +            }),
    +            ///  CRC field of previously received packet
    +            RXCRC: mmio.Mmio(packed struct(u32) {
    +                ///  CRC field of previously received packet
    +                RXCRC: u24,
    +                padding: u8,
    +            }),
    +            ///  Device address match index
    +            DAI: mmio.Mmio(packed struct(u32) {
    +                ///  Device address match index
    +                DAI: u3,
    +                padding: u29,
    +            }),
    +            reserved1284: [240]u8,
    +            ///  Packet pointer
    +            PACKETPTR: mmio.Mmio(packed struct(u32) {
    +                ///  Packet pointer
    +                PACKETPTR: u32,
    +            }),
    +            ///  Frequency
    +            FREQUENCY: mmio.Mmio(packed struct(u32) {
    +                ///  Radio channel frequency
    +                FREQUENCY: u7,
    +                reserved8: u1,
    +                ///  Channel map selection.
    +                MAP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Channel map between 2400 MHZ .. 2500 MHz
    +                        Default = 0x0,
    +                        ///  Channel map between 2360 MHZ .. 2460 MHz
    +                        Low = 0x1,
    +                    },
    +                },
    +                padding: u23,
    +            }),
    +            ///  Output power
    +            TXPOWER: mmio.Mmio(packed struct(u32) {
    +                ///  RADIO output power.
    +                TXPOWER: packed union {
    +                    raw: u8,
    +                    value: enum(u8) {
    +                        ///  +4 dBm
    +                        Pos4dBm = 0x4,
    +                        ///  +3 dBm
    +                        Pos3dBm = 0x3,
    +                        ///  0 dBm
    +                        @"0dBm" = 0x0,
    +                        ///  -4 dBm
    +                        Neg4dBm = 0xfc,
    +                        ///  -8 dBm
    +                        Neg8dBm = 0xf8,
    +                        ///  -12 dBm
    +                        Neg12dBm = 0xf4,
    +                        ///  -16 dBm
    +                        Neg16dBm = 0xf0,
    +                        ///  -20 dBm
    +                        Neg20dBm = 0xec,
    +                        ///  Deprecated enumerator - -40 dBm
    +                        Neg30dBm = 0xff,
    +                        ///  -40 dBm
    +                        Neg40dBm = 0xd8,
    +                        _,
    +                    },
    +                },
    +                padding: u24,
    +            }),
    +            ///  Data rate and modulation
    +            MODE: mmio.Mmio(packed struct(u32) {
    +                ///  Radio data rate and modulation setting. The radio supports Frequency-shift Keying (FSK) modulation.
    +                MODE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  1 Mbit/s Nordic proprietary radio mode
    +                        Nrf_1Mbit = 0x0,
    +                        ///  2 Mbit/s Nordic proprietary radio mode
    +                        Nrf_2Mbit = 0x1,
    +                        ///  Deprecated enumerator - 250 kbit/s Nordic proprietary radio mode
    +                        Nrf_250Kbit = 0x2,
    +                        ///  1 Mbit/s Bluetooth Low Energy
    +                        Ble_1Mbit = 0x3,
    +                        ///  2 Mbit/s Bluetooth Low Energy
    +                        Ble_2Mbit = 0x4,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            ///  Packet configuration register 0
    +            PCNF0: mmio.Mmio(packed struct(u32) {
    +                ///  Length on air of LENGTH field in number of bits.
    +                LFLEN: u4,
    +                reserved8: u4,
    +                ///  Length on air of S0 field in number of bytes.
    +                S0LEN: u1,
    +                reserved16: u7,
    +                ///  Length on air of S1 field in number of bits.
    +                S1LEN: u4,
    +                ///  Include or exclude S1 field in RAM
    +                S1INCL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Include S1 field in RAM only if S1LEN > 0
    +                        Automatic = 0x0,
    +                        ///  Always include S1 field in RAM independent of S1LEN
    +                        Include = 0x1,
    +                    },
    +                },
    +                reserved24: u3,
    +                ///  Length of preamble on air. Decision point: TASKS_START task
    +                PLEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  8-bit preamble
    +                        @"8bit" = 0x0,
    +                        ///  16-bit preamble
    +                        @"16bit" = 0x1,
    +                    },
    +                },
    +                padding: u7,
    +            }),
    +            ///  Packet configuration register 1
    +            PCNF1: mmio.Mmio(packed struct(u32) {
    +                ///  Maximum length of packet payload. If the packet payload is larger than MAXLEN, the radio will truncate the payload to MAXLEN.
    +                MAXLEN: u8,
    +                ///  Static length in number of bytes
    +                STATLEN: u8,
    +                ///  Base address length in number of bytes
    +                BALEN: u3,
    +                reserved24: u5,
    +                ///  On air endianness of packet, this applies to the S0, LENGTH, S1 and the PAYLOAD fields.
    +                ENDIAN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Least Significant bit on air first
    +                        Little = 0x0,
    +                        ///  Most significant bit on air first
    +                        Big = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable packet whitening
    +                WHITEEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u6,
    +            }),
    +            ///  Base address 0
    +            BASE0: mmio.Mmio(packed struct(u32) {
    +                ///  Base address 0
    +                BASE0: u32,
    +            }),
    +            ///  Base address 1
    +            BASE1: mmio.Mmio(packed struct(u32) {
    +                ///  Base address 1
    +                BASE1: u32,
    +            }),
    +            ///  Prefixes bytes for logical addresses 0-3
    +            PREFIX0: mmio.Mmio(packed struct(u32) {
    +                ///  Address prefix 0.
    +                AP0: u8,
    +                ///  Address prefix 1.
    +                AP1: u8,
    +                ///  Address prefix 2.
    +                AP2: u8,
    +                ///  Address prefix 3.
    +                AP3: u8,
    +            }),
    +            ///  Prefixes bytes for logical addresses 4-7
    +            PREFIX1: mmio.Mmio(packed struct(u32) {
    +                ///  Address prefix 4.
    +                AP4: u8,
    +                ///  Address prefix 5.
    +                AP5: u8,
    +                ///  Address prefix 6.
    +                AP6: u8,
    +                ///  Address prefix 7.
    +                AP7: u8,
    +            }),
    +            ///  Transmit address select
    +            TXADDRESS: mmio.Mmio(packed struct(u32) {
    +                ///  Transmit address select
    +                TXADDRESS: u3,
    +                padding: u29,
    +            }),
    +            ///  Receive address select
    +            RXADDRESSES: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable reception on logical address 0.
    +                ADDR0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable reception on logical address 1.
    +                ADDR1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable reception on logical address 2.
    +                ADDR2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable reception on logical address 3.
    +                ADDR3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable reception on logical address 4.
    +                ADDR4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable reception on logical address 5.
    +                ADDR5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable reception on logical address 6.
    +                ADDR6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable reception on logical address 7.
    +                ADDR7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u24,
    +            }),
    +            ///  CRC configuration
    +            CRCCNF: mmio.Mmio(packed struct(u32) {
    +                ///  CRC length in number of bytes.
    +                LEN: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  CRC length is zero and CRC calculation is disabled
    +                        Disabled = 0x0,
    +                        ///  CRC length is one byte and CRC calculation is enabled
    +                        One = 0x1,
    +                        ///  CRC length is two bytes and CRC calculation is enabled
    +                        Two = 0x2,
    +                        ///  CRC length is three bytes and CRC calculation is enabled
    +                        Three = 0x3,
    +                    },
    +                },
    +                reserved8: u6,
    +                ///  Include or exclude packet address field out of CRC calculation.
    +                SKIPADDR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  CRC calculation includes address field
    +                        Include = 0x0,
    +                        ///  CRC calculation does not include address field. The CRC calculation will start at the first byte after the address.
    +                        Skip = 0x1,
    +                    },
    +                },
    +                padding: u23,
    +            }),
    +            ///  CRC polynomial
    +            CRCPOLY: mmio.Mmio(packed struct(u32) {
    +                ///  CRC polynomial
    +                CRCPOLY: u24,
    +                padding: u8,
    +            }),
    +            ///  CRC initial value
    +            CRCINIT: mmio.Mmio(packed struct(u32) {
    +                ///  CRC initial value
    +                CRCINIT: u24,
    +                padding: u8,
    +            }),
    +            ///  Unspecified
    +            UNUSED0: u32,
    +            ///  Inter Frame Spacing in us
    +            TIFS: mmio.Mmio(packed struct(u32) {
    +                ///  Inter Frame Spacing in us
    +                TIFS: u8,
    +                padding: u24,
    +            }),
    +            ///  RSSI sample
    +            RSSISAMPLE: mmio.Mmio(packed struct(u32) {
    +                ///  RSSI sample
    +                RSSISAMPLE: u7,
    +                padding: u25,
    +            }),
    +            reserved1360: [4]u8,
    +            ///  Current radio state
    +            STATE: mmio.Mmio(packed struct(u32) {
    +                ///  Current radio state
    +                STATE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  RADIO is in the Disabled state
    +                        Disabled = 0x0,
    +                        ///  RADIO is in the RXRU state
    +                        RxRu = 0x1,
    +                        ///  RADIO is in the RXIDLE state
    +                        RxIdle = 0x2,
    +                        ///  RADIO is in the RX state
    +                        Rx = 0x3,
    +                        ///  RADIO is in the RXDISABLED state
    +                        RxDisable = 0x4,
    +                        ///  RADIO is in the TXRU state
    +                        TxRu = 0x9,
    +                        ///  RADIO is in the TXIDLE state
    +                        TxIdle = 0xa,
    +                        ///  RADIO is in the TX state
    +                        Tx = 0xb,
    +                        ///  RADIO is in the TXDISABLED state
    +                        TxDisable = 0xc,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            ///  Data whitening initial value
    +            DATAWHITEIV: mmio.Mmio(packed struct(u32) {
    +                ///  Data whitening initial value. Bit 6 is hard-wired to '1', writing '0' to it has no effect, and it will always be read back and used by the device as '1'.
    +                DATAWHITEIV: u7,
    +                padding: u25,
    +            }),
    +            reserved1376: [8]u8,
    +            ///  Bit counter compare
    +            BCC: mmio.Mmio(packed struct(u32) {
    +                ///  Bit counter compare
    +                BCC: u32,
    +            }),
    +            reserved1536: [156]u8,
    +            ///  Description collection[0]: Device address base segment 0
    +            DAB: [8]mmio.Mmio(packed struct(u32) {
    +                ///  Device address base segment 0
    +                DAB: u32,
    +            }),
    +            ///  Description collection[0]: Device address prefix 0
    +            DAP: [8]mmio.Mmio(packed struct(u32) {
    +                ///  Device address prefix 0
    +                DAP: u16,
    +                padding: u16,
    +            }),
    +            ///  Device address match configuration
    +            DACNF: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable device address matching using device address 0
    +                ENA0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable device address matching using device address 1
    +                ENA1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable device address matching using device address 2
    +                ENA2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable device address matching using device address 3
    +                ENA3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable device address matching using device address 4
    +                ENA4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable device address matching using device address 5
    +                ENA5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable device address matching using device address 6
    +                ENA6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable device address matching using device address 7
    +                ENA7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  TxAdd for device address 0
    +                TXADD0: u1,
    +                ///  TxAdd for device address 1
    +                TXADD1: u1,
    +                ///  TxAdd for device address 2
    +                TXADD2: u1,
    +                ///  TxAdd for device address 3
    +                TXADD3: u1,
    +                ///  TxAdd for device address 4
    +                TXADD4: u1,
    +                ///  TxAdd for device address 5
    +                TXADD5: u1,
    +                ///  TxAdd for device address 6
    +                TXADD6: u1,
    +                ///  TxAdd for device address 7
    +                TXADD7: u1,
    +                padding: u16,
    +            }),
    +            reserved1616: [12]u8,
    +            ///  Radio mode configuration register 0
    +            MODECNF0: mmio.Mmio(packed struct(u32) {
    +                ///  Radio ramp-up time
    +                RU: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Default ramp-up time (tRXEN), compatible with firmware written for nRF51
    +                        Default = 0x0,
    +                        ///  Fast ramp-up (tRXEN,FAST), see electrical specification for more information
    +                        Fast = 0x1,
    +                    },
    +                },
    +                reserved8: u7,
    +                ///  Default TX value
    +                DTX: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Transmit '1'
    +                        B1 = 0x0,
    +                        ///  Transmit '0'
    +                        B0 = 0x1,
    +                        ///  Transmit center frequency
    +                        Center = 0x2,
    +                        _,
    +                    },
    +                },
    +                padding: u22,
    +            }),
    +            reserved4092: [2472]u8,
    +            ///  Peripheral power control
    +            POWER: mmio.Mmio(packed struct(u32) {
    +                ///  Peripheral power control. The peripheral and its registers will be reset to its initial state by switching the peripheral off and then back on again.
    +                POWER: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Peripheral is powered off
    +                        Disabled = 0x0,
    +                        ///  Peripheral is powered on
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +        };
    +
    +        ///  UART with EasyDMA
    +        pub const UARTE0 = extern struct {
    +            ///  Start UART receiver
    +            TASKS_STARTRX: u32,
    +            ///  Stop UART receiver
    +            TASKS_STOPRX: u32,
    +            ///  Start UART transmitter
    +            TASKS_STARTTX: u32,
    +            ///  Stop UART transmitter
    +            TASKS_STOPTX: u32,
    +            reserved44: [28]u8,
    +            ///  Flush RX FIFO into RX buffer
    +            TASKS_FLUSHRX: u32,
    +            reserved256: [208]u8,
    +            ///  CTS is activated (set low). Clear To Send.
    +            EVENTS_CTS: u32,
    +            ///  CTS is deactivated (set high). Not Clear To Send.
    +            EVENTS_NCTS: u32,
    +            ///  Data received in RXD (but potentially not yet transferred to Data RAM)
    +            EVENTS_RXDRDY: u32,
    +            reserved272: [4]u8,
    +            ///  Receive buffer is filled up
    +            EVENTS_ENDRX: u32,
    +            reserved284: [8]u8,
    +            ///  Data sent from TXD
    +            EVENTS_TXDRDY: u32,
    +            ///  Last TX byte transmitted
    +            EVENTS_ENDTX: u32,
    +            ///  Error detected
    +            EVENTS_ERROR: u32,
    +            reserved324: [28]u8,
    +            ///  Receiver timeout
    +            EVENTS_RXTO: u32,
    +            reserved332: [4]u8,
    +            ///  UART receiver has started
    +            EVENTS_RXSTARTED: u32,
    +            ///  UART transmitter has started
    +            EVENTS_TXSTARTED: u32,
    +            reserved344: [4]u8,
    +            ///  Transmitter stopped
    +            EVENTS_TXSTOPPED: u32,
    +            reserved512: [164]u8,
    +            ///  Shortcut register
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                reserved5: u5,
    +                ///  Shortcut between ENDRX event and STARTRX task
    +                ENDRX_STARTRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between ENDRX event and STOPRX task
    +                ENDRX_STOPRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u25,
    +            }),
    +            reserved768: [252]u8,
    +            ///  Enable or disable interrupt
    +            INTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable interrupt for CTS event
    +                CTS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for NCTS event
    +                NCTS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for RXDRDY event
    +                RXDRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved4: u1,
    +                ///  Enable or disable interrupt for ENDRX event
    +                ENDRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved7: u2,
    +                ///  Enable or disable interrupt for TXDRDY event
    +                TXDRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for ENDTX event
    +                ENDTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for ERROR event
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved17: u7,
    +                ///  Enable or disable interrupt for RXTO event
    +                RXTO: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved19: u1,
    +                ///  Enable or disable interrupt for RXSTARTED event
    +                RXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for TXSTARTED event
    +                TXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved22: u1,
    +                ///  Enable or disable interrupt for TXSTOPPED event
    +                TXSTOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u9,
    +            }),
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Enable interrupt for CTS event
    +                CTS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for NCTS event
    +                NCTS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for RXDRDY event
    +                RXDRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved4: u1,
    +                ///  Write '1' to Enable interrupt for ENDRX event
    +                ENDRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved7: u2,
    +                ///  Write '1' to Enable interrupt for TXDRDY event
    +                TXDRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for ENDTX event
    +                ENDTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for ERROR event
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved17: u7,
    +                ///  Write '1' to Enable interrupt for RXTO event
    +                RXTO: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved19: u1,
    +                ///  Write '1' to Enable interrupt for RXSTARTED event
    +                RXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for TXSTARTED event
    +                TXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved22: u1,
    +                ///  Write '1' to Enable interrupt for TXSTOPPED event
    +                TXSTOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u9,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Disable interrupt for CTS event
    +                CTS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for NCTS event
    +                NCTS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for RXDRDY event
    +                RXDRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved4: u1,
    +                ///  Write '1' to Disable interrupt for ENDRX event
    +                ENDRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved7: u2,
    +                ///  Write '1' to Disable interrupt for TXDRDY event
    +                TXDRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for ENDTX event
    +                ENDTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for ERROR event
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved17: u7,
    +                ///  Write '1' to Disable interrupt for RXTO event
    +                RXTO: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved19: u1,
    +                ///  Write '1' to Disable interrupt for RXSTARTED event
    +                RXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for TXSTARTED event
    +                TXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved22: u1,
    +                ///  Write '1' to Disable interrupt for TXSTOPPED event
    +                TXSTOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u9,
    +            }),
    +            reserved1152: [372]u8,
    +            ///  Error source
    +            ERRORSRC: mmio.Mmio(packed struct(u32) {
    +                ///  Overrun error
    +                OVERRUN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: error not present
    +                        NotPresent = 0x0,
    +                        ///  Read: error present
    +                        Present = 0x1,
    +                    },
    +                },
    +                ///  Parity error
    +                PARITY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: error not present
    +                        NotPresent = 0x0,
    +                        ///  Read: error present
    +                        Present = 0x1,
    +                    },
    +                },
    +                ///  Framing error occurred
    +                FRAMING: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: error not present
    +                        NotPresent = 0x0,
    +                        ///  Read: error present
    +                        Present = 0x1,
    +                    },
    +                },
    +                ///  Break condition
    +                BREAK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: error not present
    +                        NotPresent = 0x0,
    +                        ///  Read: error present
    +                        Present = 0x1,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1280: [124]u8,
    +            ///  Enable UART
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable UARTE
    +                ENABLE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  Disable UARTE
    +                        Disabled = 0x0,
    +                        ///  Enable UARTE
    +                        Enabled = 0x8,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1316: [32]u8,
    +            ///  Baud rate. Accuracy depends on the HFCLK source selected.
    +            BAUDRATE: mmio.Mmio(packed struct(u32) {
    +                ///  Baud rate
    +                BAUDRATE: packed union {
    +                    raw: u32,
    +                    value: enum(u32) {
    +                        ///  1200 baud (actual rate: 1205)
    +                        Baud1200 = 0x4f000,
    +                        ///  2400 baud (actual rate: 2396)
    +                        Baud2400 = 0x9d000,
    +                        ///  4800 baud (actual rate: 4808)
    +                        Baud4800 = 0x13b000,
    +                        ///  9600 baud (actual rate: 9598)
    +                        Baud9600 = 0x275000,
    +                        ///  14400 baud (actual rate: 14401)
    +                        Baud14400 = 0x3af000,
    +                        ///  19200 baud (actual rate: 19208)
    +                        Baud19200 = 0x4ea000,
    +                        ///  28800 baud (actual rate: 28777)
    +                        Baud28800 = 0x75c000,
    +                        ///  31250 baud
    +                        Baud31250 = 0x800000,
    +                        ///  38400 baud (actual rate: 38369)
    +                        Baud38400 = 0x9d0000,
    +                        ///  56000 baud (actual rate: 55944)
    +                        Baud56000 = 0xe50000,
    +                        ///  57600 baud (actual rate: 57554)
    +                        Baud57600 = 0xeb0000,
    +                        ///  76800 baud (actual rate: 76923)
    +                        Baud76800 = 0x13a9000,
    +                        ///  115200 baud (actual rate: 115108)
    +                        Baud115200 = 0x1d60000,
    +                        ///  230400 baud (actual rate: 231884)
    +                        Baud230400 = 0x3b00000,
    +                        ///  250000 baud
    +                        Baud250000 = 0x4000000,
    +                        ///  460800 baud (actual rate: 457143)
    +                        Baud460800 = 0x7400000,
    +                        ///  921600 baud (actual rate: 941176)
    +                        Baud921600 = 0xf000000,
    +                        ///  1Mega baud
    +                        Baud1M = 0x10000000,
    +                        _,
    +                    },
    +                },
    +            }),
    +            reserved1388: [68]u8,
    +            ///  Configuration of parity and hardware flow control
    +            CONFIG: mmio.Mmio(packed struct(u32) {
    +                ///  Hardware flow control
    +                HWFC: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Parity
    +                PARITY: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        ///  Exclude parity bit
    +                        Excluded = 0x0,
    +                        ///  Include parity bit
    +                        Included = 0x7,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +        };
    +
    +        ///  Universal Asynchronous Receiver/Transmitter
    +        pub const UART0 = extern struct {
    +            ///  Start UART receiver
    +            TASKS_STARTRX: u32,
    +            ///  Stop UART receiver
    +            TASKS_STOPRX: u32,
    +            ///  Start UART transmitter
    +            TASKS_STARTTX: u32,
    +            ///  Stop UART transmitter
    +            TASKS_STOPTX: u32,
    +            reserved28: [12]u8,
    +            ///  Suspend UART
    +            TASKS_SUSPEND: u32,
    +            reserved256: [224]u8,
    +            ///  CTS is activated (set low). Clear To Send.
    +            EVENTS_CTS: u32,
    +            ///  CTS is deactivated (set high). Not Clear To Send.
    +            EVENTS_NCTS: u32,
    +            ///  Data received in RXD
    +            EVENTS_RXDRDY: u32,
    +            reserved284: [16]u8,
    +            ///  Data sent from TXD
    +            EVENTS_TXDRDY: u32,
    +            reserved292: [4]u8,
    +            ///  Error detected
    +            EVENTS_ERROR: u32,
    +            reserved324: [28]u8,
    +            ///  Receiver timeout
    +            EVENTS_RXTO: u32,
    +            reserved512: [184]u8,
    +            ///  Shortcut register
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                reserved3: u3,
    +                ///  Shortcut between CTS event and STARTRX task
    +                CTS_STARTRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between NCTS event and STOPRX task
    +                NCTS_STOPRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u27,
    +            }),
    +            reserved772: [256]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Enable interrupt for CTS event
    +                CTS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for NCTS event
    +                NCTS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for RXDRDY event
    +                RXDRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved7: u4,
    +                ///  Write '1' to Enable interrupt for TXDRDY event
    +                TXDRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved9: u1,
    +                ///  Write '1' to Enable interrupt for ERROR event
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved17: u7,
    +                ///  Write '1' to Enable interrupt for RXTO event
    +                RXTO: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u14,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Disable interrupt for CTS event
    +                CTS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for NCTS event
    +                NCTS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for RXDRDY event
    +                RXDRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved7: u4,
    +                ///  Write '1' to Disable interrupt for TXDRDY event
    +                TXDRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved9: u1,
    +                ///  Write '1' to Disable interrupt for ERROR event
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved17: u7,
    +                ///  Write '1' to Disable interrupt for RXTO event
    +                RXTO: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u14,
    +            }),
    +            reserved1152: [372]u8,
    +            ///  Error source
    +            ERRORSRC: mmio.Mmio(packed struct(u32) {
    +                ///  Overrun error
    +                OVERRUN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: error not present
    +                        NotPresent = 0x0,
    +                        ///  Read: error present
    +                        Present = 0x1,
    +                    },
    +                },
    +                ///  Parity error
    +                PARITY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: error not present
    +                        NotPresent = 0x0,
    +                        ///  Read: error present
    +                        Present = 0x1,
    +                    },
    +                },
    +                ///  Framing error occurred
    +                FRAMING: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: error not present
    +                        NotPresent = 0x0,
    +                        ///  Read: error present
    +                        Present = 0x1,
    +                    },
    +                },
    +                ///  Break condition
    +                BREAK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: error not present
    +                        NotPresent = 0x0,
    +                        ///  Read: error present
    +                        Present = 0x1,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1280: [124]u8,
    +            ///  Enable UART
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable UART
    +                ENABLE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  Disable UART
    +                        Disabled = 0x0,
    +                        ///  Enable UART
    +                        Enabled = 0x4,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1288: [4]u8,
    +            ///  Pin select for RTS
    +            PSELRTS: mmio.Mmio(packed struct(u32) {
    +                ///  Pin number configuration for UART RTS signal
    +                PSELRTS: packed union {
    +                    raw: u32,
    +                    value: enum(u32) {
    +                        ///  Disconnect
    +                        Disconnected = 0xffffffff,
    +                        _,
    +                    },
    +                },
    +            }),
    +            ///  Pin select for TXD
    +            PSELTXD: mmio.Mmio(packed struct(u32) {
    +                ///  Pin number configuration for UART TXD signal
    +                PSELTXD: packed union {
    +                    raw: u32,
    +                    value: enum(u32) {
    +                        ///  Disconnect
    +                        Disconnected = 0xffffffff,
    +                        _,
    +                    },
    +                },
    +            }),
    +            ///  Pin select for CTS
    +            PSELCTS: mmio.Mmio(packed struct(u32) {
    +                ///  Pin number configuration for UART CTS signal
    +                PSELCTS: packed union {
    +                    raw: u32,
    +                    value: enum(u32) {
    +                        ///  Disconnect
    +                        Disconnected = 0xffffffff,
    +                        _,
    +                    },
    +                },
    +            }),
    +            ///  Pin select for RXD
    +            PSELRXD: mmio.Mmio(packed struct(u32) {
    +                ///  Pin number configuration for UART RXD signal
    +                PSELRXD: packed union {
    +                    raw: u32,
    +                    value: enum(u32) {
    +                        ///  Disconnect
    +                        Disconnected = 0xffffffff,
    +                        _,
    +                    },
    +                },
    +            }),
    +            ///  RXD register
    +            RXD: mmio.Mmio(packed struct(u32) {
    +                ///  RX data received in previous transfers, double buffered
    +                RXD: u8,
    +                padding: u24,
    +            }),
    +            ///  TXD register
    +            TXD: mmio.Mmio(packed struct(u32) {
    +                ///  TX data to be transferred
    +                TXD: u8,
    +                padding: u24,
    +            }),
    +            reserved1316: [4]u8,
    +            ///  Baud rate
    +            BAUDRATE: mmio.Mmio(packed struct(u32) {
    +                ///  Baud rate
    +                BAUDRATE: packed union {
    +                    raw: u32,
    +                    value: enum(u32) {
    +                        ///  1200 baud (actual rate: 1205)
    +                        Baud1200 = 0x4f000,
    +                        ///  2400 baud (actual rate: 2396)
    +                        Baud2400 = 0x9d000,
    +                        ///  4800 baud (actual rate: 4808)
    +                        Baud4800 = 0x13b000,
    +                        ///  9600 baud (actual rate: 9598)
    +                        Baud9600 = 0x275000,
    +                        ///  14400 baud (actual rate: 14414)
    +                        Baud14400 = 0x3b0000,
    +                        ///  19200 baud (actual rate: 19208)
    +                        Baud19200 = 0x4ea000,
    +                        ///  28800 baud (actual rate: 28829)
    +                        Baud28800 = 0x75f000,
    +                        ///  31250 baud
    +                        Baud31250 = 0x800000,
    +                        ///  38400 baud (actual rate: 38462)
    +                        Baud38400 = 0x9d5000,
    +                        ///  56000 baud (actual rate: 55944)
    +                        Baud56000 = 0xe50000,
    +                        ///  57600 baud (actual rate: 57762)
    +                        Baud57600 = 0xebf000,
    +                        ///  76800 baud (actual rate: 76923)
    +                        Baud76800 = 0x13a9000,
    +                        ///  115200 baud (actual rate: 115942)
    +                        Baud115200 = 0x1d7e000,
    +                        ///  230400 baud (actual rate: 231884)
    +                        Baud230400 = 0x3afb000,
    +                        ///  250000 baud
    +                        Baud250000 = 0x4000000,
    +                        ///  460800 baud (actual rate: 470588)
    +                        Baud460800 = 0x75f7000,
    +                        ///  921600 baud (actual rate: 941176)
    +                        Baud921600 = 0xebed000,
    +                        ///  1Mega baud
    +                        Baud1M = 0x10000000,
    +                        _,
    +                    },
    +                },
    +            }),
    +            reserved1388: [68]u8,
    +            ///  Configuration of parity and hardware flow control
    +            CONFIG: mmio.Mmio(packed struct(u32) {
    +                ///  Hardware flow control
    +                HWFC: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Parity
    +                PARITY: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        ///  Exclude parity bit
    +                        Excluded = 0x0,
    +                        ///  Include parity bit
    +                        Included = 0x7,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +        };
    +
    +        ///  Serial Peripheral Interface Master with EasyDMA 0
    +        pub const SPIM0 = extern struct {
    +            reserved16: [16]u8,
    +            ///  Start SPI transaction
    +            TASKS_START: u32,
    +            ///  Stop SPI transaction
    +            TASKS_STOP: u32,
    +            reserved28: [4]u8,
    +            ///  Suspend SPI transaction
    +            TASKS_SUSPEND: u32,
    +            ///  Resume SPI transaction
    +            TASKS_RESUME: u32,
    +            reserved260: [224]u8,
    +            ///  SPI transaction has stopped
    +            EVENTS_STOPPED: u32,
    +            reserved272: [8]u8,
    +            ///  End of RXD buffer reached
    +            EVENTS_ENDRX: u32,
    +            reserved280: [4]u8,
    +            ///  End of RXD buffer and TXD buffer reached
    +            EVENTS_END: u32,
    +            reserved288: [4]u8,
    +            ///  End of TXD buffer reached
    +            EVENTS_ENDTX: u32,
    +            reserved332: [40]u8,
    +            ///  Transaction started
    +            EVENTS_STARTED: u32,
    +            reserved512: [176]u8,
    +            ///  Shortcut register
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                reserved17: u17,
    +                ///  Shortcut between END event and START task
    +                END_START: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u14,
    +            }),
    +            reserved772: [256]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to Enable interrupt for STOPPED event
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved4: u2,
    +                ///  Write '1' to Enable interrupt for ENDRX event
    +                ENDRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved6: u1,
    +                ///  Write '1' to Enable interrupt for END event
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved8: u1,
    +                ///  Write '1' to Enable interrupt for ENDTX event
    +                ENDTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved19: u10,
    +                ///  Write '1' to Enable interrupt for STARTED event
    +                STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u12,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to Disable interrupt for STOPPED event
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved4: u2,
    +                ///  Write '1' to Disable interrupt for ENDRX event
    +                ENDRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved6: u1,
    +                ///  Write '1' to Disable interrupt for END event
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved8: u1,
    +                ///  Write '1' to Disable interrupt for ENDTX event
    +                ENDTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved19: u10,
    +                ///  Write '1' to Disable interrupt for STARTED event
    +                STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u12,
    +            }),
    +            reserved1280: [500]u8,
    +            ///  Enable SPIM
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable SPIM
    +                ENABLE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  Disable SPIM
    +                        Disabled = 0x0,
    +                        ///  Enable SPIM
    +                        Enabled = 0x7,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1316: [32]u8,
    +            ///  SPI frequency. Accuracy depends on the HFCLK source selected.
    +            FREQUENCY: mmio.Mmio(packed struct(u32) {
    +                ///  SPI master data rate
    +                FREQUENCY: packed union {
    +                    raw: u32,
    +                    value: enum(u32) {
    +                        ///  125 kbps
    +                        K125 = 0x2000000,
    +                        ///  250 kbps
    +                        K250 = 0x4000000,
    +                        ///  500 kbps
    +                        K500 = 0x8000000,
    +                        ///  1 Mbps
    +                        M1 = 0x10000000,
    +                        ///  2 Mbps
    +                        M2 = 0x20000000,
    +                        ///  4 Mbps
    +                        M4 = 0x40000000,
    +                        ///  8 Mbps
    +                        M8 = 0x80000000,
    +                        _,
    +                    },
    +                },
    +            }),
    +            reserved1364: [44]u8,
    +            ///  Configuration register
    +            CONFIG: mmio.Mmio(packed struct(u32) {
    +                ///  Bit order
    +                ORDER: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Most significant bit shifted out first
    +                        MsbFirst = 0x0,
    +                        ///  Least significant bit shifted out first
    +                        LsbFirst = 0x1,
    +                    },
    +                },
    +                ///  Serial clock (SCK) phase
    +                CPHA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Sample on leading edge of clock, shift serial data on trailing edge
    +                        Leading = 0x0,
    +                        ///  Sample on trailing edge of clock, shift serial data on leading edge
    +                        Trailing = 0x1,
    +                    },
    +                },
    +                ///  Serial clock (SCK) polarity
    +                CPOL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Active high
    +                        ActiveHigh = 0x0,
    +                        ///  Active low
    +                        ActiveLow = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            reserved1472: [104]u8,
    +            ///  Over-read character. Character clocked out in case and over-read of the TXD buffer.
    +            ORC: mmio.Mmio(packed struct(u32) {
    +                ///  Over-read character. Character clocked out in case and over-read of the TXD buffer.
    +                ORC: u8,
    +                padding: u24,
    +            }),
    +        };
    +
    +        ///  SPI Slave 0
    +        pub const SPIS0 = extern struct {
    +            reserved36: [36]u8,
    +            ///  Acquire SPI semaphore
    +            TASKS_ACQUIRE: u32,
    +            ///  Release SPI semaphore, enabling the SPI slave to acquire it
    +            TASKS_RELEASE: u32,
    +            reserved260: [216]u8,
    +            ///  Granted transaction completed
    +            EVENTS_END: u32,
    +            reserved272: [8]u8,
    +            ///  End of RXD buffer reached
    +            EVENTS_ENDRX: u32,
    +            reserved296: [20]u8,
    +            ///  Semaphore acquired
    +            EVENTS_ACQUIRED: u32,
    +            reserved512: [212]u8,
    +            ///  Shortcut register
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                reserved2: u2,
    +                ///  Shortcut between END event and ACQUIRE task
    +                END_ACQUIRE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            reserved772: [256]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to Enable interrupt for END event
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved4: u2,
    +                ///  Write '1' to Enable interrupt for ENDRX event
    +                ENDRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved10: u5,
    +                ///  Write '1' to Enable interrupt for ACQUIRED event
    +                ACQUIRED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u21,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to Disable interrupt for END event
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved4: u2,
    +                ///  Write '1' to Disable interrupt for ENDRX event
    +                ENDRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved10: u5,
    +                ///  Write '1' to Disable interrupt for ACQUIRED event
    +                ACQUIRED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u21,
    +            }),
    +            reserved1024: [244]u8,
    +            ///  Semaphore status register
    +            SEMSTAT: mmio.Mmio(packed struct(u32) {
    +                ///  Semaphore status
    +                SEMSTAT: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Semaphore is free
    +                        Free = 0x0,
    +                        ///  Semaphore is assigned to CPU
    +                        CPU = 0x1,
    +                        ///  Semaphore is assigned to SPI slave
    +                        SPIS = 0x2,
    +                        ///  Semaphore is assigned to SPI but a handover to the CPU is pending
    +                        CPUPending = 0x3,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            reserved1088: [60]u8,
    +            ///  Status from last transaction
    +            STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  TX buffer over-read detected, and prevented
    +                OVERREAD: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: error not present
    +                        NotPresent = 0x0,
    +                        ///  Read: error present
    +                        Present = 0x1,
    +                    },
    +                },
    +                ///  RX buffer overflow detected, and prevented
    +                OVERFLOW: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: error not present
    +                        NotPresent = 0x0,
    +                        ///  Read: error present
    +                        Present = 0x1,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            reserved1280: [188]u8,
    +            ///  Enable SPI slave
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable SPI slave
    +                ENABLE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  Disable SPI slave
    +                        Disabled = 0x0,
    +                        ///  Enable SPI slave
    +                        Enabled = 0x2,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1364: [80]u8,
    +            ///  Configuration register
    +            CONFIG: mmio.Mmio(packed struct(u32) {
    +                ///  Bit order
    +                ORDER: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Most significant bit shifted out first
    +                        MsbFirst = 0x0,
    +                        ///  Least significant bit shifted out first
    +                        LsbFirst = 0x1,
    +                    },
    +                },
    +                ///  Serial clock (SCK) phase
    +                CPHA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Sample on leading edge of clock, shift serial data on trailing edge
    +                        Leading = 0x0,
    +                        ///  Sample on trailing edge of clock, shift serial data on leading edge
    +                        Trailing = 0x1,
    +                    },
    +                },
    +                ///  Serial clock (SCK) polarity
    +                CPOL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Active high
    +                        ActiveHigh = 0x0,
    +                        ///  Active low
    +                        ActiveLow = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            reserved1372: [4]u8,
    +            ///  Default character. Character clocked out in case of an ignored transaction.
    +            DEF: mmio.Mmio(packed struct(u32) {
    +                ///  Default character. Character clocked out in case of an ignored transaction.
    +                DEF: u8,
    +                padding: u24,
    +            }),
    +            reserved1472: [96]u8,
    +            ///  Over-read character
    +            ORC: mmio.Mmio(packed struct(u32) {
    +                ///  Over-read character. Character clocked out after an over-read of the transmit buffer.
    +                ORC: u8,
    +                padding: u24,
    +            }),
    +        };
    +
    +        ///  I2C compatible Two-Wire Master Interface with EasyDMA 0
    +        pub const TWIM0 = extern struct {
    +            ///  Start TWI receive sequence
    +            TASKS_STARTRX: u32,
    +            reserved8: [4]u8,
    +            ///  Start TWI transmit sequence
    +            TASKS_STARTTX: u32,
    +            reserved20: [8]u8,
    +            ///  Stop TWI transaction. Must be issued while the TWI master is not suspended.
    +            TASKS_STOP: u32,
    +            reserved28: [4]u8,
    +            ///  Suspend TWI transaction
    +            TASKS_SUSPEND: u32,
    +            ///  Resume TWI transaction
    +            TASKS_RESUME: u32,
    +            reserved260: [224]u8,
    +            ///  TWI stopped
    +            EVENTS_STOPPED: u32,
    +            reserved292: [28]u8,
    +            ///  TWI error
    +            EVENTS_ERROR: u32,
    +            reserved328: [32]u8,
    +            ///  Last byte has been sent out after the SUSPEND task has been issued, TWI traffic is now suspended.
    +            EVENTS_SUSPENDED: u32,
    +            ///  Receive sequence started
    +            EVENTS_RXSTARTED: u32,
    +            ///  Transmit sequence started
    +            EVENTS_TXSTARTED: u32,
    +            reserved348: [8]u8,
    +            ///  Byte boundary, starting to receive the last byte
    +            EVENTS_LASTRX: u32,
    +            ///  Byte boundary, starting to transmit the last byte
    +            EVENTS_LASTTX: u32,
    +            reserved512: [156]u8,
    +            ///  Shortcut register
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                reserved7: u7,
    +                ///  Shortcut between LASTTX event and STARTRX task
    +                LASTTX_STARTRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between LASTTX event and SUSPEND task
    +                LASTTX_SUSPEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between LASTTX event and STOP task
    +                LASTTX_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between LASTRX event and STARTTX task
    +                LASTRX_STARTTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved12: u1,
    +                ///  Shortcut between LASTRX event and STOP task
    +                LASTRX_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u19,
    +            }),
    +            reserved768: [252]u8,
    +            ///  Enable or disable interrupt
    +            INTEN: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Enable or disable interrupt for STOPPED event
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved9: u7,
    +                ///  Enable or disable interrupt for ERROR event
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved18: u8,
    +                ///  Enable or disable interrupt for SUSPENDED event
    +                SUSPENDED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for RXSTARTED event
    +                RXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for TXSTARTED event
    +                TXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved23: u2,
    +                ///  Enable or disable interrupt for LASTRX event
    +                LASTRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for LASTTX event
    +                LASTTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u7,
    +            }),
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to Enable interrupt for STOPPED event
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved9: u7,
    +                ///  Write '1' to Enable interrupt for ERROR event
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved18: u8,
    +                ///  Write '1' to Enable interrupt for SUSPENDED event
    +                SUSPENDED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for RXSTARTED event
    +                RXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for TXSTARTED event
    +                TXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved23: u2,
    +                ///  Write '1' to Enable interrupt for LASTRX event
    +                LASTRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for LASTTX event
    +                LASTTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u7,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to Disable interrupt for STOPPED event
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved9: u7,
    +                ///  Write '1' to Disable interrupt for ERROR event
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved18: u8,
    +                ///  Write '1' to Disable interrupt for SUSPENDED event
    +                SUSPENDED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for RXSTARTED event
    +                RXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for TXSTARTED event
    +                TXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved23: u2,
    +                ///  Write '1' to Disable interrupt for LASTRX event
    +                LASTRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for LASTTX event
    +                LASTTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u7,
    +            }),
    +            reserved1220: [440]u8,
    +            ///  Error source
    +            ERRORSRC: mmio.Mmio(packed struct(u32) {
    +                ///  Overrun error
    +                OVERRUN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Error did not occur
    +                        NotReceived = 0x0,
    +                        ///  Error occurred
    +                        Received = 0x1,
    +                    },
    +                },
    +                ///  NACK received after sending the address (write '1' to clear)
    +                ANACK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Error did not occur
    +                        NotReceived = 0x0,
    +                        ///  Error occurred
    +                        Received = 0x1,
    +                    },
    +                },
    +                ///  NACK received after sending a data byte (write '1' to clear)
    +                DNACK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Error did not occur
    +                        NotReceived = 0x0,
    +                        ///  Error occurred
    +                        Received = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            reserved1280: [56]u8,
    +            ///  Enable TWIM
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable TWIM
    +                ENABLE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  Disable TWIM
    +                        Disabled = 0x0,
    +                        ///  Enable TWIM
    +                        Enabled = 0x6,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1316: [32]u8,
    +            ///  TWI frequency
    +            FREQUENCY: mmio.Mmio(packed struct(u32) {
    +                ///  TWI master clock frequency
    +                FREQUENCY: packed union {
    +                    raw: u32,
    +                    value: enum(u32) {
    +                        ///  100 kbps
    +                        K100 = 0x1980000,
    +                        ///  250 kbps
    +                        K250 = 0x4000000,
    +                        ///  400 kbps
    +                        K400 = 0x6400000,
    +                        _,
    +                    },
    +                },
    +            }),
    +            reserved1416: [96]u8,
    +            ///  Address used in the TWI transfer
    +            ADDRESS: mmio.Mmio(packed struct(u32) {
    +                ///  Address used in the TWI transfer
    +                ADDRESS: u7,
    +                padding: u25,
    +            }),
    +        };
    +
    +        ///  I2C compatible Two-Wire Slave Interface with EasyDMA 0
    +        pub const TWIS0 = extern struct {
    +            reserved20: [20]u8,
    +            ///  Stop TWI transaction
    +            TASKS_STOP: u32,
    +            reserved28: [4]u8,
    +            ///  Suspend TWI transaction
    +            TASKS_SUSPEND: u32,
    +            ///  Resume TWI transaction
    +            TASKS_RESUME: u32,
    +            reserved48: [12]u8,
    +            ///  Prepare the TWI slave to respond to a write command
    +            TASKS_PREPARERX: u32,
    +            ///  Prepare the TWI slave to respond to a read command
    +            TASKS_PREPARETX: u32,
    +            reserved260: [204]u8,
    +            ///  TWI stopped
    +            EVENTS_STOPPED: u32,
    +            reserved292: [28]u8,
    +            ///  TWI error
    +            EVENTS_ERROR: u32,
    +            reserved332: [36]u8,
    +            ///  Receive sequence started
    +            EVENTS_RXSTARTED: u32,
    +            ///  Transmit sequence started
    +            EVENTS_TXSTARTED: u32,
    +            reserved356: [16]u8,
    +            ///  Write command received
    +            EVENTS_WRITE: u32,
    +            ///  Read command received
    +            EVENTS_READ: u32,
    +            reserved512: [148]u8,
    +            ///  Shortcut register
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                reserved13: u13,
    +                ///  Shortcut between WRITE event and SUSPEND task
    +                WRITE_SUSPEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between READ event and SUSPEND task
    +                READ_SUSPEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u17,
    +            }),
    +            reserved768: [252]u8,
    +            ///  Enable or disable interrupt
    +            INTEN: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Enable or disable interrupt for STOPPED event
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved9: u7,
    +                ///  Enable or disable interrupt for ERROR event
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved19: u9,
    +                ///  Enable or disable interrupt for RXSTARTED event
    +                RXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for TXSTARTED event
    +                TXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved25: u4,
    +                ///  Enable or disable interrupt for WRITE event
    +                WRITE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for READ event
    +                READ: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u5,
    +            }),
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to Enable interrupt for STOPPED event
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved9: u7,
    +                ///  Write '1' to Enable interrupt for ERROR event
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved19: u9,
    +                ///  Write '1' to Enable interrupt for RXSTARTED event
    +                RXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for TXSTARTED event
    +                TXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved25: u4,
    +                ///  Write '1' to Enable interrupt for WRITE event
    +                WRITE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for READ event
    +                READ: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u5,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to Disable interrupt for STOPPED event
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved9: u7,
    +                ///  Write '1' to Disable interrupt for ERROR event
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved19: u9,
    +                ///  Write '1' to Disable interrupt for RXSTARTED event
    +                RXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for TXSTARTED event
    +                TXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved25: u4,
    +                ///  Write '1' to Disable interrupt for WRITE event
    +                WRITE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for READ event
    +                READ: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u5,
    +            }),
    +            reserved1232: [452]u8,
    +            ///  Error source
    +            ERRORSRC: mmio.Mmio(packed struct(u32) {
    +                ///  RX buffer overflow detected, and prevented
    +                OVERFLOW: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Error did not occur
    +                        NotDetected = 0x0,
    +                        ///  Error occurred
    +                        Detected = 0x1,
    +                    },
    +                },
    +                reserved2: u1,
    +                ///  NACK sent after receiving a data byte
    +                DNACK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Error did not occur
    +                        NotReceived = 0x0,
    +                        ///  Error occurred
    +                        Received = 0x1,
    +                    },
    +                },
    +                ///  TX buffer over-read detected, and prevented
    +                OVERREAD: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Error did not occur
    +                        NotDetected = 0x0,
    +                        ///  Error occurred
    +                        Detected = 0x1,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            ///  Status register indicating which address had a match
    +            MATCH: mmio.Mmio(packed struct(u32) {
    +                ///  Which of the addresses in {ADDRESS} matched the incoming address
    +                MATCH: u1,
    +                padding: u31,
    +            }),
    +            reserved1280: [40]u8,
    +            ///  Enable TWIS
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable TWIS
    +                ENABLE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  Disable TWIS
    +                        Disabled = 0x0,
    +                        ///  Enable TWIS
    +                        Enabled = 0x9,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1416: [132]u8,
    +            ///  Description collection[0]: TWI slave address 0
    +            ADDRESS: [2]mmio.Mmio(packed struct(u32) {
    +                ///  TWI slave address
    +                ADDRESS: u7,
    +                padding: u25,
    +            }),
    +            reserved1428: [4]u8,
    +            ///  Configuration register for the address match mechanism
    +            CONFIG: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable address matching on ADDRESS[0]
    +                ADDRESS0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable address matching on ADDRESS[1]
    +                ADDRESS1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            reserved1472: [40]u8,
    +            ///  Over-read character. Character sent out in case of an over-read of the transmit buffer.
    +            ORC: mmio.Mmio(packed struct(u32) {
    +                ///  Over-read character. Character sent out in case of an over-read of the transmit buffer.
    +                ORC: u8,
    +                padding: u24,
    +            }),
    +        };
    +
    +        ///  Serial Peripheral Interface 0
    +        pub const SPI0 = extern struct {
    +            reserved264: [264]u8,
    +            ///  TXD byte sent and RXD byte received
    +            EVENTS_READY: u32,
    +            reserved772: [504]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                reserved2: u2,
    +                ///  Write '1' to Enable interrupt for READY event
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                reserved2: u2,
    +                ///  Write '1' to Disable interrupt for READY event
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            reserved1280: [500]u8,
    +            ///  Enable SPI
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable SPI
    +                ENABLE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  Disable SPI
    +                        Disabled = 0x0,
    +                        ///  Enable SPI
    +                        Enabled = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1304: [20]u8,
    +            ///  RXD register
    +            RXD: mmio.Mmio(packed struct(u32) {
    +                ///  RX data received. Double buffered
    +                RXD: u8,
    +                padding: u24,
    +            }),
    +            ///  TXD register
    +            TXD: mmio.Mmio(packed struct(u32) {
    +                ///  TX data to send. Double buffered
    +                TXD: u8,
    +                padding: u24,
    +            }),
    +            reserved1316: [4]u8,
    +            ///  SPI frequency
    +            FREQUENCY: mmio.Mmio(packed struct(u32) {
    +                ///  SPI master data rate
    +                FREQUENCY: packed union {
    +                    raw: u32,
    +                    value: enum(u32) {
    +                        ///  125 kbps
    +                        K125 = 0x2000000,
    +                        ///  250 kbps
    +                        K250 = 0x4000000,
    +                        ///  500 kbps
    +                        K500 = 0x8000000,
    +                        ///  1 Mbps
    +                        M1 = 0x10000000,
    +                        ///  2 Mbps
    +                        M2 = 0x20000000,
    +                        ///  4 Mbps
    +                        M4 = 0x40000000,
    +                        ///  8 Mbps
    +                        M8 = 0x80000000,
    +                        _,
    +                    },
    +                },
    +            }),
    +            reserved1364: [44]u8,
    +            ///  Configuration register
    +            CONFIG: mmio.Mmio(packed struct(u32) {
    +                ///  Bit order
    +                ORDER: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Most significant bit shifted out first
    +                        MsbFirst = 0x0,
    +                        ///  Least significant bit shifted out first
    +                        LsbFirst = 0x1,
    +                    },
    +                },
    +                ///  Serial clock (SCK) phase
    +                CPHA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Sample on leading edge of clock, shift serial data on trailing edge
    +                        Leading = 0x0,
    +                        ///  Sample on trailing edge of clock, shift serial data on leading edge
    +                        Trailing = 0x1,
    +                    },
    +                },
    +                ///  Serial clock (SCK) polarity
    +                CPOL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Active high
    +                        ActiveHigh = 0x0,
    +                        ///  Active low
    +                        ActiveLow = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +        };
    +
    +        ///  I2C compatible Two-Wire Interface 0
    +        pub const TWI0 = extern struct {
    +            ///  Start TWI receive sequence
    +            TASKS_STARTRX: u32,
    +            reserved8: [4]u8,
    +            ///  Start TWI transmit sequence
    +            TASKS_STARTTX: u32,
    +            reserved20: [8]u8,
    +            ///  Stop TWI transaction
    +            TASKS_STOP: u32,
    +            reserved28: [4]u8,
    +            ///  Suspend TWI transaction
    +            TASKS_SUSPEND: u32,
    +            ///  Resume TWI transaction
    +            TASKS_RESUME: u32,
    +            reserved260: [224]u8,
    +            ///  TWI stopped
    +            EVENTS_STOPPED: u32,
    +            ///  TWI RXD byte received
    +            EVENTS_RXDREADY: u32,
    +            reserved284: [16]u8,
    +            ///  TWI TXD byte sent
    +            EVENTS_TXDSENT: u32,
    +            reserved292: [4]u8,
    +            ///  TWI error
    +            EVENTS_ERROR: u32,
    +            reserved312: [16]u8,
    +            ///  TWI byte boundary, generated before each byte that is sent or received
    +            EVENTS_BB: u32,
    +            reserved328: [12]u8,
    +            ///  TWI entered the suspended state
    +            EVENTS_SUSPENDED: u32,
    +            reserved512: [180]u8,
    +            ///  Shortcut register
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                ///  Shortcut between BB event and SUSPEND task
    +                BB_SUSPEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between BB event and STOP task
    +                BB_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            reserved772: [256]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to Enable interrupt for STOPPED event
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for RXDREADY event
    +                RXDREADY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved7: u4,
    +                ///  Write '1' to Enable interrupt for TXDSENT event
    +                TXDSENT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved9: u1,
    +                ///  Write '1' to Enable interrupt for ERROR event
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved14: u4,
    +                ///  Write '1' to Enable interrupt for BB event
    +                BB: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved18: u3,
    +                ///  Write '1' to Enable interrupt for SUSPENDED event
    +                SUSPENDED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u13,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to Disable interrupt for STOPPED event
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for RXDREADY event
    +                RXDREADY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved7: u4,
    +                ///  Write '1' to Disable interrupt for TXDSENT event
    +                TXDSENT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved9: u1,
    +                ///  Write '1' to Disable interrupt for ERROR event
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved14: u4,
    +                ///  Write '1' to Disable interrupt for BB event
    +                BB: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved18: u3,
    +                ///  Write '1' to Disable interrupt for SUSPENDED event
    +                SUSPENDED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u13,
    +            }),
    +            reserved1220: [440]u8,
    +            ///  Error source
    +            ERRORSRC: mmio.Mmio(packed struct(u32) {
    +                ///  Overrun error
    +                OVERRUN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: no overrun occured
    +                        NotPresent = 0x0,
    +                        ///  Read: overrun occured
    +                        Present = 0x1,
    +                    },
    +                },
    +                ///  NACK received after sending the address (write '1' to clear)
    +                ANACK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: error not present
    +                        NotPresent = 0x0,
    +                        ///  Read: error present
    +                        Present = 0x1,
    +                    },
    +                },
    +                ///  NACK received after sending a data byte (write '1' to clear)
    +                DNACK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: error not present
    +                        NotPresent = 0x0,
    +                        ///  Read: error present
    +                        Present = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            reserved1280: [56]u8,
    +            ///  Enable TWI
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable TWI
    +                ENABLE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  Disable TWI
    +                        Disabled = 0x0,
    +                        ///  Enable TWI
    +                        Enabled = 0x5,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1288: [4]u8,
    +            ///  Pin select for SCL
    +            PSELSCL: mmio.Mmio(packed struct(u32) {
    +                ///  Pin number configuration for TWI SCL signal
    +                PSELSCL: packed union {
    +                    raw: u32,
    +                    value: enum(u32) {
    +                        ///  Disconnect
    +                        Disconnected = 0xffffffff,
    +                        _,
    +                    },
    +                },
    +            }),
    +            ///  Pin select for SDA
    +            PSELSDA: mmio.Mmio(packed struct(u32) {
    +                ///  Pin number configuration for TWI SDA signal
    +                PSELSDA: packed union {
    +                    raw: u32,
    +                    value: enum(u32) {
    +                        ///  Disconnect
    +                        Disconnected = 0xffffffff,
    +                        _,
    +                    },
    +                },
    +            }),
    +            reserved1304: [8]u8,
    +            ///  RXD register
    +            RXD: mmio.Mmio(packed struct(u32) {
    +                ///  RXD register
    +                RXD: u8,
    +                padding: u24,
    +            }),
    +            ///  TXD register
    +            TXD: mmio.Mmio(packed struct(u32) {
    +                ///  TXD register
    +                TXD: u8,
    +                padding: u24,
    +            }),
    +            reserved1316: [4]u8,
    +            ///  TWI frequency
    +            FREQUENCY: mmio.Mmio(packed struct(u32) {
    +                ///  TWI master clock frequency
    +                FREQUENCY: packed union {
    +                    raw: u32,
    +                    value: enum(u32) {
    +                        ///  100 kbps
    +                        K100 = 0x1980000,
    +                        ///  250 kbps
    +                        K250 = 0x4000000,
    +                        ///  400 kbps (actual rate 410.256 kbps)
    +                        K400 = 0x6680000,
    +                        _,
    +                    },
    +                },
    +            }),
    +            reserved1416: [96]u8,
    +            ///  Address used in the TWI transfer
    +            ADDRESS: mmio.Mmio(packed struct(u32) {
    +                ///  Address used in the TWI transfer
    +                ADDRESS: u7,
    +                padding: u25,
    +            }),
    +        };
    +
    +        ///  GPIO Port 1
    +        pub const P0 = extern struct {
    +            reserved1284: [1284]u8,
    +            ///  Write GPIO port
    +            OUT: mmio.Mmio(packed struct(u32) {
    +                ///  Pin 0
    +                PIN0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 1
    +                PIN1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 2
    +                PIN2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 3
    +                PIN3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 4
    +                PIN4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 5
    +                PIN5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 6
    +                PIN6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 7
    +                PIN7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 8
    +                PIN8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 9
    +                PIN9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 10
    +                PIN10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 11
    +                PIN11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 12
    +                PIN12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 13
    +                PIN13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 14
    +                PIN14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 15
    +                PIN15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 16
    +                PIN16: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 17
    +                PIN17: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 18
    +                PIN18: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 19
    +                PIN19: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 20
    +                PIN20: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 21
    +                PIN21: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 22
    +                PIN22: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 23
    +                PIN23: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 24
    +                PIN24: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 25
    +                PIN25: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 26
    +                PIN26: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 27
    +                PIN27: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 28
    +                PIN28: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 29
    +                PIN29: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 30
    +                PIN30: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 31
    +                PIN31: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +            }),
    +            ///  Set individual bits in GPIO port
    +            OUTSET: mmio.Mmio(packed struct(u32) {
    +                ///  Pin 0
    +                PIN0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 1
    +                PIN1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 2
    +                PIN2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 3
    +                PIN3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 4
    +                PIN4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 5
    +                PIN5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 6
    +                PIN6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 7
    +                PIN7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 8
    +                PIN8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 9
    +                PIN9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 10
    +                PIN10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 11
    +                PIN11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 12
    +                PIN12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 13
    +                PIN13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 14
    +                PIN14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 15
    +                PIN15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 16
    +                PIN16: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 17
    +                PIN17: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 18
    +                PIN18: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 19
    +                PIN19: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 20
    +                PIN20: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 21
    +                PIN21: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 22
    +                PIN22: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 23
    +                PIN23: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 24
    +                PIN24: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 25
    +                PIN25: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 26
    +                PIN26: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 27
    +                PIN27: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 28
    +                PIN28: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 29
    +                PIN29: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 30
    +                PIN30: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 31
    +                PIN31: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +            }),
    +            ///  Clear individual bits in GPIO port
    +            OUTCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Pin 0
    +                PIN0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 1
    +                PIN1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 2
    +                PIN2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 3
    +                PIN3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 4
    +                PIN4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 5
    +                PIN5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 6
    +                PIN6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 7
    +                PIN7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 8
    +                PIN8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 9
    +                PIN9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 10
    +                PIN10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 11
    +                PIN11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 12
    +                PIN12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 13
    +                PIN13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 14
    +                PIN14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 15
    +                PIN15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 16
    +                PIN16: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 17
    +                PIN17: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 18
    +                PIN18: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 19
    +                PIN19: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 20
    +                PIN20: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 21
    +                PIN21: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 22
    +                PIN22: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 23
    +                PIN23: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 24
    +                PIN24: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 25
    +                PIN25: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 26
    +                PIN26: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 27
    +                PIN27: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 28
    +                PIN28: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 29
    +                PIN29: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 30
    +                PIN30: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 31
    +                PIN31: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +            }),
    +            ///  Read GPIO port
    +            IN: mmio.Mmio(packed struct(u32) {
    +                ///  Pin 0
    +                PIN0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 1
    +                PIN1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 2
    +                PIN2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 3
    +                PIN3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 4
    +                PIN4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 5
    +                PIN5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 6
    +                PIN6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 7
    +                PIN7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 8
    +                PIN8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 9
    +                PIN9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 10
    +                PIN10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 11
    +                PIN11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 12
    +                PIN12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 13
    +                PIN13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 14
    +                PIN14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 15
    +                PIN15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 16
    +                PIN16: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 17
    +                PIN17: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 18
    +                PIN18: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 19
    +                PIN19: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 20
    +                PIN20: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 21
    +                PIN21: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 22
    +                PIN22: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 23
    +                PIN23: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 24
    +                PIN24: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 25
    +                PIN25: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 26
    +                PIN26: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 27
    +                PIN27: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 28
    +                PIN28: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 29
    +                PIN29: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 30
    +                PIN30: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 31
    +                PIN31: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +            }),
    +            ///  Direction of GPIO pins
    +            DIR: mmio.Mmio(packed struct(u32) {
    +                ///  Pin 0
    +                PIN0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 1
    +                PIN1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 2
    +                PIN2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 3
    +                PIN3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 4
    +                PIN4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 5
    +                PIN5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 6
    +                PIN6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 7
    +                PIN7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 8
    +                PIN8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 9
    +                PIN9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 10
    +                PIN10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 11
    +                PIN11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 12
    +                PIN12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 13
    +                PIN13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 14
    +                PIN14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 15
    +                PIN15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 16
    +                PIN16: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 17
    +                PIN17: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 18
    +                PIN18: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 19
    +                PIN19: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 20
    +                PIN20: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 21
    +                PIN21: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 22
    +                PIN22: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 23
    +                PIN23: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 24
    +                PIN24: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 25
    +                PIN25: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 26
    +                PIN26: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 27
    +                PIN27: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 28
    +                PIN28: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 29
    +                PIN29: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 30
    +                PIN30: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 31
    +                PIN31: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +            }),
    +            ///  DIR set register
    +            DIRSET: mmio.Mmio(packed struct(u32) {
    +                ///  Set as output pin 0
    +                PIN0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 1
    +                PIN1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 2
    +                PIN2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 3
    +                PIN3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 4
    +                PIN4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 5
    +                PIN5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 6
    +                PIN6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 7
    +                PIN7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 8
    +                PIN8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 9
    +                PIN9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 10
    +                PIN10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 11
    +                PIN11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 12
    +                PIN12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 13
    +                PIN13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 14
    +                PIN14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 15
    +                PIN15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 16
    +                PIN16: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 17
    +                PIN17: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 18
    +                PIN18: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 19
    +                PIN19: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 20
    +                PIN20: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 21
    +                PIN21: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 22
    +                PIN22: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 23
    +                PIN23: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 24
    +                PIN24: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 25
    +                PIN25: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 26
    +                PIN26: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 27
    +                PIN27: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 28
    +                PIN28: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 29
    +                PIN29: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 30
    +                PIN30: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 31
    +                PIN31: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +            }),
    +            ///  DIR clear register
    +            DIRCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Set as input pin 0
    +                PIN0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 1
    +                PIN1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 2
    +                PIN2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 3
    +                PIN3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 4
    +                PIN4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 5
    +                PIN5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 6
    +                PIN6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 7
    +                PIN7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 8
    +                PIN8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 9
    +                PIN9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 10
    +                PIN10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 11
    +                PIN11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 12
    +                PIN12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 13
    +                PIN13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 14
    +                PIN14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 15
    +                PIN15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 16
    +                PIN16: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 17
    +                PIN17: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 18
    +                PIN18: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 19
    +                PIN19: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 20
    +                PIN20: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 21
    +                PIN21: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 22
    +                PIN22: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 23
    +                PIN23: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 24
    +                PIN24: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 25
    +                PIN25: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 26
    +                PIN26: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 27
    +                PIN27: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 28
    +                PIN28: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 29
    +                PIN29: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 30
    +                PIN30: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 31
    +                PIN31: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +            }),
    +            ///  Latch register indicating what GPIO pins that have met the criteria set in the PIN_CNF[n].SENSE registers
    +            LATCH: mmio.Mmio(packed struct(u32) {
    +                ///  Status on whether PIN0 has met criteria set in PIN_CNF0.SENSE register. Write '1' to clear.
    +                PIN0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN1 has met criteria set in PIN_CNF1.SENSE register. Write '1' to clear.
    +                PIN1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN2 has met criteria set in PIN_CNF2.SENSE register. Write '1' to clear.
    +                PIN2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN3 has met criteria set in PIN_CNF3.SENSE register. Write '1' to clear.
    +                PIN3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN4 has met criteria set in PIN_CNF4.SENSE register. Write '1' to clear.
    +                PIN4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN5 has met criteria set in PIN_CNF5.SENSE register. Write '1' to clear.
    +                PIN5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN6 has met criteria set in PIN_CNF6.SENSE register. Write '1' to clear.
    +                PIN6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN7 has met criteria set in PIN_CNF7.SENSE register. Write '1' to clear.
    +                PIN7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN8 has met criteria set in PIN_CNF8.SENSE register. Write '1' to clear.
    +                PIN8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN9 has met criteria set in PIN_CNF9.SENSE register. Write '1' to clear.
    +                PIN9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN10 has met criteria set in PIN_CNF10.SENSE register. Write '1' to clear.
    +                PIN10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN11 has met criteria set in PIN_CNF11.SENSE register. Write '1' to clear.
    +                PIN11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN12 has met criteria set in PIN_CNF12.SENSE register. Write '1' to clear.
    +                PIN12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN13 has met criteria set in PIN_CNF13.SENSE register. Write '1' to clear.
    +                PIN13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN14 has met criteria set in PIN_CNF14.SENSE register. Write '1' to clear.
    +                PIN14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN15 has met criteria set in PIN_CNF15.SENSE register. Write '1' to clear.
    +                PIN15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN16 has met criteria set in PIN_CNF16.SENSE register. Write '1' to clear.
    +                PIN16: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN17 has met criteria set in PIN_CNF17.SENSE register. Write '1' to clear.
    +                PIN17: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN18 has met criteria set in PIN_CNF18.SENSE register. Write '1' to clear.
    +                PIN18: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN19 has met criteria set in PIN_CNF19.SENSE register. Write '1' to clear.
    +                PIN19: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN20 has met criteria set in PIN_CNF20.SENSE register. Write '1' to clear.
    +                PIN20: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN21 has met criteria set in PIN_CNF21.SENSE register. Write '1' to clear.
    +                PIN21: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN22 has met criteria set in PIN_CNF22.SENSE register. Write '1' to clear.
    +                PIN22: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN23 has met criteria set in PIN_CNF23.SENSE register. Write '1' to clear.
    +                PIN23: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN24 has met criteria set in PIN_CNF24.SENSE register. Write '1' to clear.
    +                PIN24: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN25 has met criteria set in PIN_CNF25.SENSE register. Write '1' to clear.
    +                PIN25: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN26 has met criteria set in PIN_CNF26.SENSE register. Write '1' to clear.
    +                PIN26: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN27 has met criteria set in PIN_CNF27.SENSE register. Write '1' to clear.
    +                PIN27: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN28 has met criteria set in PIN_CNF28.SENSE register. Write '1' to clear.
    +                PIN28: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN29 has met criteria set in PIN_CNF29.SENSE register. Write '1' to clear.
    +                PIN29: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN30 has met criteria set in PIN_CNF30.SENSE register. Write '1' to clear.
    +                PIN30: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN31 has met criteria set in PIN_CNF31.SENSE register. Write '1' to clear.
    +                PIN31: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +            }),
    +            ///  Select between default DETECT signal behaviour and LDETECT mode
    +            DETECTMODE: mmio.Mmio(packed struct(u32) {
    +                ///  Select between default DETECT signal behaviour and LDETECT mode
    +                DETECTMODE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  DETECT directly connected to PIN DETECT signals
    +                        Default = 0x0,
    +                        ///  Use the latched LDETECT behaviour
    +                        LDETECT = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1792: [472]u8,
    +            ///  Description collection[0]: Configuration of GPIO pins
    +            PIN_CNF: [32]mmio.Mmio(packed struct(u32) {
    +                ///  Pin direction. Same physical register as DIR register
    +                DIR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Configure pin as an input pin
    +                        Input = 0x0,
    +                        ///  Configure pin as an output pin
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Connect or disconnect input buffer
    +                INPUT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Connect input buffer
    +                        Connect = 0x0,
    +                        ///  Disconnect input buffer
    +                        Disconnect = 0x1,
    +                    },
    +                },
    +                ///  Pull configuration
    +                PULL: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  No pull
    +                        Disabled = 0x0,
    +                        ///  Pull down on pin
    +                        Pulldown = 0x1,
    +                        ///  Pull up on pin
    +                        Pullup = 0x3,
    +                        _,
    +                    },
    +                },
    +                reserved8: u4,
    +                ///  Drive configuration
    +                DRIVE: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        ///  Standard '0', standard '1'
    +                        S0S1 = 0x0,
    +                        ///  High drive '0', standard '1'
    +                        H0S1 = 0x1,
    +                        ///  Standard '0', high drive '1'
    +                        S0H1 = 0x2,
    +                        ///  High drive '0', high 'drive '1''
    +                        H0H1 = 0x3,
    +                        ///  Disconnect '0' standard '1' (normally used for wired-or connections)
    +                        D0S1 = 0x4,
    +                        ///  Disconnect '0', high drive '1' (normally used for wired-or connections)
    +                        D0H1 = 0x5,
    +                        ///  Standard '0'. disconnect '1' (normally used for wired-and connections)
    +                        S0D1 = 0x6,
    +                        ///  High drive '0', disconnect '1' (normally used for wired-and connections)
    +                        H0D1 = 0x7,
    +                    },
    +                },
    +                reserved16: u5,
    +                ///  Pin sensing mechanism
    +                SENSE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Sense for high level
    +                        High = 0x2,
    +                        ///  Sense for low level
    +                        Low = 0x3,
    +                        _,
    +                    },
    +                },
    +                padding: u14,
    +            }),
    +        };
    +
    +        ///  FPU
    +        pub const FPU = extern struct {
    +            ///  Unused.
    +            UNUSED: u32,
    +        };
    +
    +        ///  Inter-IC Sound
    +        pub const I2S = extern struct {
    +            ///  Starts continuous I2S transfer. Also starts MCK generator when this is enabled.
    +            TASKS_START: u32,
    +            ///  Stops I2S transfer. Also stops MCK generator. Triggering this task will cause the {event:STOPPED} event to be generated.
    +            TASKS_STOP: u32,
    +            reserved260: [252]u8,
    +            ///  The RXD.PTR register has been copied to internal double-buffers. When the I2S module is started and RX is enabled, this event will be generated for every RXTXD.MAXCNT words that are received on the SDIN pin.
    +            EVENTS_RXPTRUPD: u32,
    +            ///  I2S transfer stopped.
    +            EVENTS_STOPPED: u32,
    +            reserved276: [8]u8,
    +            ///  The TDX.PTR register has been copied to internal double-buffers. When the I2S module is started and TX is enabled, this event will be generated for every RXTXD.MAXCNT words that are sent on the SDOUT pin.
    +            EVENTS_TXPTRUPD: u32,
    +            reserved768: [488]u8,
    +            ///  Enable or disable interrupt
    +            INTEN: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Enable or disable interrupt for RXPTRUPD event
    +                RXPTRUPD: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for STOPPED event
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved5: u2,
    +                ///  Enable or disable interrupt for TXPTRUPD event
    +                TXPTRUPD: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u26,
    +            }),
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to Enable interrupt for RXPTRUPD event
    +                RXPTRUPD: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for STOPPED event
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved5: u2,
    +                ///  Write '1' to Enable interrupt for TXPTRUPD event
    +                TXPTRUPD: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u26,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to Disable interrupt for RXPTRUPD event
    +                RXPTRUPD: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for STOPPED event
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved5: u2,
    +                ///  Write '1' to Disable interrupt for TXPTRUPD event
    +                TXPTRUPD: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u26,
    +            }),
    +            reserved1280: [500]u8,
    +            ///  Enable I2S module.
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable I2S module.
    +                ENABLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +        };
    +
    +        ///  Event Generator Unit 0
    +        pub const EGU0 = extern struct {
    +            ///  Description collection[0]: Trigger 0 for triggering the corresponding TRIGGERED[0] event
    +            TASKS_TRIGGER: [16]u32,
    +            reserved256: [192]u8,
    +            ///  Description collection[0]: Event number 0 generated by triggering the corresponding TRIGGER[0] task
    +            EVENTS_TRIGGERED: [16]u32,
    +            reserved768: [448]u8,
    +            ///  Enable or disable interrupt
    +            INTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable interrupt for TRIGGERED[0] event
    +                TRIGGERED0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for TRIGGERED[1] event
    +                TRIGGERED1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for TRIGGERED[2] event
    +                TRIGGERED2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for TRIGGERED[3] event
    +                TRIGGERED3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for TRIGGERED[4] event
    +                TRIGGERED4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for TRIGGERED[5] event
    +                TRIGGERED5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for TRIGGERED[6] event
    +                TRIGGERED6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for TRIGGERED[7] event
    +                TRIGGERED7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for TRIGGERED[8] event
    +                TRIGGERED8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for TRIGGERED[9] event
    +                TRIGGERED9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for TRIGGERED[10] event
    +                TRIGGERED10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for TRIGGERED[11] event
    +                TRIGGERED11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for TRIGGERED[12] event
    +                TRIGGERED12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for TRIGGERED[13] event
    +                TRIGGERED13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for TRIGGERED[14] event
    +                TRIGGERED14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for TRIGGERED[15] event
    +                TRIGGERED15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u16,
    +            }),
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Enable interrupt for TRIGGERED[0] event
    +                TRIGGERED0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for TRIGGERED[1] event
    +                TRIGGERED1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for TRIGGERED[2] event
    +                TRIGGERED2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for TRIGGERED[3] event
    +                TRIGGERED3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for TRIGGERED[4] event
    +                TRIGGERED4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for TRIGGERED[5] event
    +                TRIGGERED5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for TRIGGERED[6] event
    +                TRIGGERED6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for TRIGGERED[7] event
    +                TRIGGERED7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for TRIGGERED[8] event
    +                TRIGGERED8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for TRIGGERED[9] event
    +                TRIGGERED9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for TRIGGERED[10] event
    +                TRIGGERED10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for TRIGGERED[11] event
    +                TRIGGERED11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for TRIGGERED[12] event
    +                TRIGGERED12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for TRIGGERED[13] event
    +                TRIGGERED13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for TRIGGERED[14] event
    +                TRIGGERED14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for TRIGGERED[15] event
    +                TRIGGERED15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u16,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Disable interrupt for TRIGGERED[0] event
    +                TRIGGERED0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for TRIGGERED[1] event
    +                TRIGGERED1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for TRIGGERED[2] event
    +                TRIGGERED2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for TRIGGERED[3] event
    +                TRIGGERED3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for TRIGGERED[4] event
    +                TRIGGERED4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for TRIGGERED[5] event
    +                TRIGGERED5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for TRIGGERED[6] event
    +                TRIGGERED6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for TRIGGERED[7] event
    +                TRIGGERED7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for TRIGGERED[8] event
    +                TRIGGERED8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for TRIGGERED[9] event
    +                TRIGGERED9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for TRIGGERED[10] event
    +                TRIGGERED10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for TRIGGERED[11] event
    +                TRIGGERED11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for TRIGGERED[12] event
    +                TRIGGERED12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for TRIGGERED[13] event
    +                TRIGGERED13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for TRIGGERED[14] event
    +                TRIGGERED14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for TRIGGERED[15] event
    +                TRIGGERED15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u16,
    +            }),
    +        };
    +
    +        ///  Memory Watch Unit
    +        pub const MWU = extern struct {
    +            reserved768: [768]u8,
    +            ///  Enable or disable interrupt
    +            INTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable interrupt for REGION[0].WA event
    +                REGION0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for REGION[0].RA event
    +                REGION0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for REGION[1].WA event
    +                REGION1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for REGION[1].RA event
    +                REGION1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for REGION[2].WA event
    +                REGION2WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for REGION[2].RA event
    +                REGION2RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for REGION[3].WA event
    +                REGION3WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for REGION[3].RA event
    +                REGION3RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved24: u16,
    +                ///  Enable or disable interrupt for PREGION[0].WA event
    +                PREGION0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for PREGION[0].RA event
    +                PREGION0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for PREGION[1].WA event
    +                PREGION1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for PREGION[1].RA event
    +                PREGION1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u4,
    +            }),
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Enable interrupt for REGION[0].WA event
    +                REGION0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for REGION[0].RA event
    +                REGION0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for REGION[1].WA event
    +                REGION1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for REGION[1].RA event
    +                REGION1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for REGION[2].WA event
    +                REGION2WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for REGION[2].RA event
    +                REGION2RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for REGION[3].WA event
    +                REGION3WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for REGION[3].RA event
    +                REGION3RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved24: u16,
    +                ///  Write '1' to Enable interrupt for PREGION[0].WA event
    +                PREGION0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for PREGION[0].RA event
    +                PREGION0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for PREGION[1].WA event
    +                PREGION1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for PREGION[1].RA event
    +                PREGION1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u4,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Disable interrupt for REGION[0].WA event
    +                REGION0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for REGION[0].RA event
    +                REGION0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for REGION[1].WA event
    +                REGION1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for REGION[1].RA event
    +                REGION1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for REGION[2].WA event
    +                REGION2WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for REGION[2].RA event
    +                REGION2RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for REGION[3].WA event
    +                REGION3WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for REGION[3].RA event
    +                REGION3RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved24: u16,
    +                ///  Write '1' to Disable interrupt for PREGION[0].WA event
    +                PREGION0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for PREGION[0].RA event
    +                PREGION0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for PREGION[1].WA event
    +                PREGION1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for PREGION[1].RA event
    +                PREGION1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u4,
    +            }),
    +            reserved800: [20]u8,
    +            ///  Enable or disable non-maskable interrupt
    +            NMIEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable non-maskable interrupt for REGION[0].WA event
    +                REGION0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable non-maskable interrupt for REGION[0].RA event
    +                REGION0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable non-maskable interrupt for REGION[1].WA event
    +                REGION1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable non-maskable interrupt for REGION[1].RA event
    +                REGION1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable non-maskable interrupt for REGION[2].WA event
    +                REGION2WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable non-maskable interrupt for REGION[2].RA event
    +                REGION2RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable non-maskable interrupt for REGION[3].WA event
    +                REGION3WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable non-maskable interrupt for REGION[3].RA event
    +                REGION3RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved24: u16,
    +                ///  Enable or disable non-maskable interrupt for PREGION[0].WA event
    +                PREGION0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable non-maskable interrupt for PREGION[0].RA event
    +                PREGION0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable non-maskable interrupt for PREGION[1].WA event
    +                PREGION1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable non-maskable interrupt for PREGION[1].RA event
    +                PREGION1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u4,
    +            }),
    +            ///  Enable non-maskable interrupt
    +            NMIENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Enable non-maskable interrupt for REGION[0].WA event
    +                REGION0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable non-maskable interrupt for REGION[0].RA event
    +                REGION0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable non-maskable interrupt for REGION[1].WA event
    +                REGION1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable non-maskable interrupt for REGION[1].RA event
    +                REGION1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable non-maskable interrupt for REGION[2].WA event
    +                REGION2WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable non-maskable interrupt for REGION[2].RA event
    +                REGION2RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable non-maskable interrupt for REGION[3].WA event
    +                REGION3WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable non-maskable interrupt for REGION[3].RA event
    +                REGION3RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved24: u16,
    +                ///  Write '1' to Enable non-maskable interrupt for PREGION[0].WA event
    +                PREGION0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable non-maskable interrupt for PREGION[0].RA event
    +                PREGION0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable non-maskable interrupt for PREGION[1].WA event
    +                PREGION1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable non-maskable interrupt for PREGION[1].RA event
    +                PREGION1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u4,
    +            }),
    +            ///  Disable non-maskable interrupt
    +            NMIENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Disable non-maskable interrupt for REGION[0].WA event
    +                REGION0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable non-maskable interrupt for REGION[0].RA event
    +                REGION0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable non-maskable interrupt for REGION[1].WA event
    +                REGION1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable non-maskable interrupt for REGION[1].RA event
    +                REGION1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable non-maskable interrupt for REGION[2].WA event
    +                REGION2WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable non-maskable interrupt for REGION[2].RA event
    +                REGION2RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable non-maskable interrupt for REGION[3].WA event
    +                REGION3WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable non-maskable interrupt for REGION[3].RA event
    +                REGION3RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved24: u16,
    +                ///  Write '1' to Disable non-maskable interrupt for PREGION[0].WA event
    +                PREGION0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable non-maskable interrupt for PREGION[0].RA event
    +                PREGION0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable non-maskable interrupt for PREGION[1].WA event
    +                PREGION1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable non-maskable interrupt for PREGION[1].RA event
    +                PREGION1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u4,
    +            }),
    +            reserved1296: [484]u8,
    +            ///  Enable/disable regions watch
    +            REGIONEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable/disable write access watch in region[0]
    +                RGN0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable write access watch in this region
    +                        Disable = 0x0,
    +                        ///  Enable write access watch in this region
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable/disable read access watch in region[0]
    +                RGN0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable read access watch in this region
    +                        Disable = 0x0,
    +                        ///  Enable read access watch in this region
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable/disable write access watch in region[1]
    +                RGN1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable write access watch in this region
    +                        Disable = 0x0,
    +                        ///  Enable write access watch in this region
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable/disable read access watch in region[1]
    +                RGN1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable read access watch in this region
    +                        Disable = 0x0,
    +                        ///  Enable read access watch in this region
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable/disable write access watch in region[2]
    +                RGN2WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable write access watch in this region
    +                        Disable = 0x0,
    +                        ///  Enable write access watch in this region
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable/disable read access watch in region[2]
    +                RGN2RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable read access watch in this region
    +                        Disable = 0x0,
    +                        ///  Enable read access watch in this region
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable/disable write access watch in region[3]
    +                RGN3WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable write access watch in this region
    +                        Disable = 0x0,
    +                        ///  Enable write access watch in this region
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable/disable read access watch in region[3]
    +                RGN3RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable read access watch in this region
    +                        Disable = 0x0,
    +                        ///  Enable read access watch in this region
    +                        Enable = 0x1,
    +                    },
    +                },
    +                reserved24: u16,
    +                ///  Enable/disable write access watch in PREGION[0]
    +                PRGN0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable write access watch in this PREGION
    +                        Disable = 0x0,
    +                        ///  Enable write access watch in this PREGION
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable/disable read access watch in PREGION[0]
    +                PRGN0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable read access watch in this PREGION
    +                        Disable = 0x0,
    +                        ///  Enable read access watch in this PREGION
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable/disable write access watch in PREGION[1]
    +                PRGN1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable write access watch in this PREGION
    +                        Disable = 0x0,
    +                        ///  Enable write access watch in this PREGION
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable/disable read access watch in PREGION[1]
    +                PRGN1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable read access watch in this PREGION
    +                        Disable = 0x0,
    +                        ///  Enable read access watch in this PREGION
    +                        Enable = 0x1,
    +                    },
    +                },
    +                padding: u4,
    +            }),
    +            ///  Enable regions watch
    +            REGIONENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Enable write access watch in region[0]
    +                RGN0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Write access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Write access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable read access watch in region[0]
    +                RGN0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Read access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable write access watch in region[1]
    +                RGN1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Write access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Write access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable read access watch in region[1]
    +                RGN1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Read access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable write access watch in region[2]
    +                RGN2WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Write access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Write access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable read access watch in region[2]
    +                RGN2RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Read access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable write access watch in region[3]
    +                RGN3WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Write access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Write access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable read access watch in region[3]
    +                RGN3RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Read access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved24: u16,
    +                ///  Enable write access watch in PREGION[0]
    +                PRGN0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Write access watch in this PREGION is disabled
    +                        Disabled = 0x0,
    +                        ///  Write access watch in this PREGION is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable read access watch in PREGION[0]
    +                PRGN0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read access watch in this PREGION is disabled
    +                        Disabled = 0x0,
    +                        ///  Read access watch in this PREGION is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable write access watch in PREGION[1]
    +                PRGN1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Write access watch in this PREGION is disabled
    +                        Disabled = 0x0,
    +                        ///  Write access watch in this PREGION is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable read access watch in PREGION[1]
    +                PRGN1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read access watch in this PREGION is disabled
    +                        Disabled = 0x0,
    +                        ///  Read access watch in this PREGION is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u4,
    +            }),
    +            ///  Disable regions watch
    +            REGIONENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Disable write access watch in region[0]
    +                RGN0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Write access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Write access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Disable read access watch in region[0]
    +                RGN0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Read access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Disable write access watch in region[1]
    +                RGN1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Write access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Write access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Disable read access watch in region[1]
    +                RGN1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Read access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Disable write access watch in region[2]
    +                RGN2WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Write access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Write access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Disable read access watch in region[2]
    +                RGN2RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Read access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Disable write access watch in region[3]
    +                RGN3WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Write access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Write access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Disable read access watch in region[3]
    +                RGN3RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Read access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved24: u16,
    +                ///  Disable write access watch in PREGION[0]
    +                PRGN0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Write access watch in this PREGION is disabled
    +                        Disabled = 0x0,
    +                        ///  Write access watch in this PREGION is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Disable read access watch in PREGION[0]
    +                PRGN0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read access watch in this PREGION is disabled
    +                        Disabled = 0x0,
    +                        ///  Read access watch in this PREGION is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Disable write access watch in PREGION[1]
    +                PRGN1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Write access watch in this PREGION is disabled
    +                        Disabled = 0x0,
    +                        ///  Write access watch in this PREGION is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Disable read access watch in PREGION[1]
    +                PRGN1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read access watch in this PREGION is disabled
    +                        Disabled = 0x0,
    +                        ///  Read access watch in this PREGION is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u4,
    +            }),
    +        };
    +
    +        ///  Programmable Peripheral Interconnect
    +        pub const PPI = extern struct {
    +            reserved1280: [1280]u8,
    +            ///  Channel enable register
    +            CHEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable channel 0
    +                CH0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 1
    +                CH1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 2
    +                CH2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 3
    +                CH3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 4
    +                CH4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 5
    +                CH5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 6
    +                CH6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 7
    +                CH7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 8
    +                CH8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 9
    +                CH9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 10
    +                CH10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 11
    +                CH11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 12
    +                CH12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 13
    +                CH13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 14
    +                CH14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 15
    +                CH15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 16
    +                CH16: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 17
    +                CH17: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 18
    +                CH18: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 19
    +                CH19: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 20
    +                CH20: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 21
    +                CH21: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 22
    +                CH22: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 23
    +                CH23: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 24
    +                CH24: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 25
    +                CH25: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 26
    +                CH26: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 27
    +                CH27: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 28
    +                CH28: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 29
    +                CH29: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 30
    +                CH30: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 31
    +                CH31: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +            }),
    +            ///  Channel enable set register
    +            CHENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Channel 0 enable set register. Writing '0' has no effect
    +                CH0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 1 enable set register. Writing '0' has no effect
    +                CH1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 2 enable set register. Writing '0' has no effect
    +                CH2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 3 enable set register. Writing '0' has no effect
    +                CH3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 4 enable set register. Writing '0' has no effect
    +                CH4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 5 enable set register. Writing '0' has no effect
    +                CH5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 6 enable set register. Writing '0' has no effect
    +                CH6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 7 enable set register. Writing '0' has no effect
    +                CH7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 8 enable set register. Writing '0' has no effect
    +                CH8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 9 enable set register. Writing '0' has no effect
    +                CH9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 10 enable set register. Writing '0' has no effect
    +                CH10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 11 enable set register. Writing '0' has no effect
    +                CH11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 12 enable set register. Writing '0' has no effect
    +                CH12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 13 enable set register. Writing '0' has no effect
    +                CH13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 14 enable set register. Writing '0' has no effect
    +                CH14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 15 enable set register. Writing '0' has no effect
    +                CH15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 16 enable set register. Writing '0' has no effect
    +                CH16: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 17 enable set register. Writing '0' has no effect
    +                CH17: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 18 enable set register. Writing '0' has no effect
    +                CH18: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 19 enable set register. Writing '0' has no effect
    +                CH19: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 20 enable set register. Writing '0' has no effect
    +                CH20: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 21 enable set register. Writing '0' has no effect
    +                CH21: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 22 enable set register. Writing '0' has no effect
    +                CH22: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 23 enable set register. Writing '0' has no effect
    +                CH23: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 24 enable set register. Writing '0' has no effect
    +                CH24: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 25 enable set register. Writing '0' has no effect
    +                CH25: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 26 enable set register. Writing '0' has no effect
    +                CH26: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 27 enable set register. Writing '0' has no effect
    +                CH27: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 28 enable set register. Writing '0' has no effect
    +                CH28: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 29 enable set register. Writing '0' has no effect
    +                CH29: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 30 enable set register. Writing '0' has no effect
    +                CH30: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 31 enable set register. Writing '0' has no effect
    +                CH31: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +            }),
    +            ///  Channel enable clear register
    +            CHENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Channel 0 enable clear register. Writing '0' has no effect
    +                CH0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 1 enable clear register. Writing '0' has no effect
    +                CH1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 2 enable clear register. Writing '0' has no effect
    +                CH2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 3 enable clear register. Writing '0' has no effect
    +                CH3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 4 enable clear register. Writing '0' has no effect
    +                CH4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 5 enable clear register. Writing '0' has no effect
    +                CH5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 6 enable clear register. Writing '0' has no effect
    +                CH6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 7 enable clear register. Writing '0' has no effect
    +                CH7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 8 enable clear register. Writing '0' has no effect
    +                CH8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 9 enable clear register. Writing '0' has no effect
    +                CH9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 10 enable clear register. Writing '0' has no effect
    +                CH10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 11 enable clear register. Writing '0' has no effect
    +                CH11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 12 enable clear register. Writing '0' has no effect
    +                CH12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 13 enable clear register. Writing '0' has no effect
    +                CH13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 14 enable clear register. Writing '0' has no effect
    +                CH14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 15 enable clear register. Writing '0' has no effect
    +                CH15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 16 enable clear register. Writing '0' has no effect
    +                CH16: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 17 enable clear register. Writing '0' has no effect
    +                CH17: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 18 enable clear register. Writing '0' has no effect
    +                CH18: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 19 enable clear register. Writing '0' has no effect
    +                CH19: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 20 enable clear register. Writing '0' has no effect
    +                CH20: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 21 enable clear register. Writing '0' has no effect
    +                CH21: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 22 enable clear register. Writing '0' has no effect
    +                CH22: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 23 enable clear register. Writing '0' has no effect
    +                CH23: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 24 enable clear register. Writing '0' has no effect
    +                CH24: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 25 enable clear register. Writing '0' has no effect
    +                CH25: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 26 enable clear register. Writing '0' has no effect
    +                CH26: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 27 enable clear register. Writing '0' has no effect
    +                CH27: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 28 enable clear register. Writing '0' has no effect
    +                CH28: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 29 enable clear register. Writing '0' has no effect
    +                CH29: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 30 enable clear register. Writing '0' has no effect
    +                CH30: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 31 enable clear register. Writing '0' has no effect
    +                CH31: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +            }),
    +            reserved2048: [756]u8,
    +            ///  Description collection[0]: Channel group 0
    +            CHG: [6]mmio.Mmio(packed struct(u32) {
    +                ///  Include or exclude channel 0
    +                CH0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 1
    +                CH1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 2
    +                CH2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 3
    +                CH3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 4
    +                CH4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 5
    +                CH5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 6
    +                CH6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 7
    +                CH7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 8
    +                CH8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 9
    +                CH9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 10
    +                CH10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 11
    +                CH11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 12
    +                CH12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 13
    +                CH13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 14
    +                CH14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 15
    +                CH15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 16
    +                CH16: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 17
    +                CH17: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 18
    +                CH18: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 19
    +                CH19: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 20
    +                CH20: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 21
    +                CH21: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 22
    +                CH22: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 23
    +                CH23: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 24
    +                CH24: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 25
    +                CH25: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 26
    +                CH26: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 27
    +                CH27: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 28
    +                CH28: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 29
    +                CH29: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 30
    +                CH30: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 31
    +                CH31: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +            }),
    +        };
    +
    +        ///  NFC-A compatible radio
    +        pub const NFCT = extern struct {
    +            ///  Activate NFC peripheral for incoming and outgoing frames, change state to activated
    +            TASKS_ACTIVATE: u32,
    +            ///  Disable NFC peripheral
    +            TASKS_DISABLE: u32,
    +            ///  Enable NFC sense field mode, change state to sense mode
    +            TASKS_SENSE: u32,
    +            ///  Start transmission of a outgoing frame, change state to transmit
    +            TASKS_STARTTX: u32,
    +            reserved28: [12]u8,
    +            ///  Initializes the EasyDMA for receive.
    +            TASKS_ENABLERXDATA: u32,
    +            reserved36: [4]u8,
    +            ///  Force state machine to IDLE state
    +            TASKS_GOIDLE: u32,
    +            ///  Force state machine to SLEEP_A state
    +            TASKS_GOSLEEP: u32,
    +            reserved256: [212]u8,
    +            ///  The NFC peripheral is ready to receive and send frames
    +            EVENTS_READY: u32,
    +            ///  Remote NFC field detected
    +            EVENTS_FIELDDETECTED: u32,
    +            ///  Remote NFC field lost
    +            EVENTS_FIELDLOST: u32,
    +            ///  Marks the start of the first symbol of a transmitted frame
    +            EVENTS_TXFRAMESTART: u32,
    +            ///  Marks the end of the last transmitted on-air symbol of a frame
    +            EVENTS_TXFRAMEEND: u32,
    +            ///  Marks the end of the first symbol of a received frame
    +            EVENTS_RXFRAMESTART: u32,
    +            ///  Received data have been checked (CRC, parity) and transferred to RAM, and EasyDMA has ended accessing the RX buffer
    +            EVENTS_RXFRAMEEND: u32,
    +            ///  NFC error reported. The ERRORSTATUS register contains details on the source of the error.
    +            EVENTS_ERROR: u32,
    +            reserved296: [8]u8,
    +            ///  NFC RX frame error reported. The FRAMESTATUS.RX register contains details on the source of the error.
    +            EVENTS_RXERROR: u32,
    +            ///  RX buffer (as defined by PACKETPTR and MAXLEN) in Data RAM full.
    +            EVENTS_ENDRX: u32,
    +            ///  Transmission of data in RAM has ended, and EasyDMA has ended accessing the TX buffer
    +            EVENTS_ENDTX: u32,
    +            reserved312: [4]u8,
    +            ///  Auto collision resolution process has started
    +            EVENTS_AUTOCOLRESSTARTED: u32,
    +            reserved328: [12]u8,
    +            ///  NFC Auto collision resolution error reported.
    +            EVENTS_COLLISION: u32,
    +            ///  NFC Auto collision resolution successfully completed
    +            EVENTS_SELECTED: u32,
    +            ///  EasyDMA is ready to receive or send frames.
    +            EVENTS_STARTED: u32,
    +            reserved512: [172]u8,
    +            ///  Shortcut register
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                ///  Shortcut between FIELDDETECTED event and ACTIVATE task
    +                FIELDDETECTED_ACTIVATE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between FIELDLOST event and SENSE task
    +                FIELDLOST_SENSE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            reserved768: [252]u8,
    +            ///  Enable or disable interrupt
    +            INTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable interrupt for READY event
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for FIELDDETECTED event
    +                FIELDDETECTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for FIELDLOST event
    +                FIELDLOST: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for TXFRAMESTART event
    +                TXFRAMESTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for TXFRAMEEND event
    +                TXFRAMEEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for RXFRAMESTART event
    +                RXFRAMESTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for RXFRAMEEND event
    +                RXFRAMEEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for ERROR event
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved10: u2,
    +                ///  Enable or disable interrupt for RXERROR event
    +                RXERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for ENDRX event
    +                ENDRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for ENDTX event
    +                ENDTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved14: u1,
    +                ///  Enable or disable interrupt for AUTOCOLRESSTARTED event
    +                AUTOCOLRESSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved18: u3,
    +                ///  Enable or disable interrupt for COLLISION event
    +                COLLISION: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for SELECTED event
    +                SELECTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for STARTED event
    +                STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u11,
    +            }),
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Enable interrupt for READY event
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for FIELDDETECTED event
    +                FIELDDETECTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for FIELDLOST event
    +                FIELDLOST: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for TXFRAMESTART event
    +                TXFRAMESTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for TXFRAMEEND event
    +                TXFRAMEEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for RXFRAMESTART event
    +                RXFRAMESTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for RXFRAMEEND event
    +                RXFRAMEEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for ERROR event
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved10: u2,
    +                ///  Write '1' to Enable interrupt for RXERROR event
    +                RXERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for ENDRX event
    +                ENDRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for ENDTX event
    +                ENDTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved14: u1,
    +                ///  Write '1' to Enable interrupt for AUTOCOLRESSTARTED event
    +                AUTOCOLRESSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved18: u3,
    +                ///  Write '1' to Enable interrupt for COLLISION event
    +                COLLISION: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for SELECTED event
    +                SELECTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for STARTED event
    +                STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u11,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Disable interrupt for READY event
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for FIELDDETECTED event
    +                FIELDDETECTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for FIELDLOST event
    +                FIELDLOST: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for TXFRAMESTART event
    +                TXFRAMESTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for TXFRAMEEND event
    +                TXFRAMEEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for RXFRAMESTART event
    +                RXFRAMESTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for RXFRAMEEND event
    +                RXFRAMEEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for ERROR event
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved10: u2,
    +                ///  Write '1' to Disable interrupt for RXERROR event
    +                RXERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for ENDRX event
    +                ENDRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for ENDTX event
    +                ENDTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved14: u1,
    +                ///  Write '1' to Disable interrupt for AUTOCOLRESSTARTED event
    +                AUTOCOLRESSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved18: u3,
    +                ///  Write '1' to Disable interrupt for COLLISION event
    +                COLLISION: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for SELECTED event
    +                SELECTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for STARTED event
    +                STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u11,
    +            }),
    +            reserved1028: [248]u8,
    +            ///  NFC Error Status register
    +            ERRORSTATUS: mmio.Mmio(packed struct(u32) {
    +                ///  No STARTTX task triggered before expiration of the time set in FRAMEDELAYMAX
    +                FRAMEDELAYTIMEOUT: u1,
    +                reserved2: u1,
    +                ///  Field level is too high at max load resistance
    +                NFCFIELDTOOSTRONG: u1,
    +                ///  Field level is too low at min load resistance
    +                NFCFIELDTOOWEAK: u1,
    +                padding: u28,
    +            }),
    +            reserved1072: [40]u8,
    +            ///  Current value driven to the NFC Load Control
    +            CURRENTLOADCTRL: mmio.Mmio(packed struct(u32) {
    +                ///  Current value driven to the NFC Load Control
    +                CURRENTLOADCTRL: u6,
    +                padding: u26,
    +            }),
    +            reserved1084: [8]u8,
    +            ///  Indicates the presence or not of a valid field
    +            FIELDPRESENT: mmio.Mmio(packed struct(u32) {
    +                ///  Indicates the presence or not of a valid field. Available only in the activated state.
    +                FIELDPRESENT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  No valid field detected
    +                        NoField = 0x0,
    +                        ///  Valid field detected
    +                        FieldPresent = 0x1,
    +                    },
    +                },
    +                ///  Indicates if the low level has locked to the field
    +                LOCKDETECT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Not locked to field
    +                        NotLocked = 0x0,
    +                        ///  Locked to field
    +                        Locked = 0x1,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            reserved1284: [196]u8,
    +            ///  Minimum frame delay
    +            FRAMEDELAYMIN: mmio.Mmio(packed struct(u32) {
    +                ///  Minimum frame delay in number of 13.56 MHz clocks
    +                FRAMEDELAYMIN: u16,
    +                padding: u16,
    +            }),
    +            ///  Maximum frame delay
    +            FRAMEDELAYMAX: mmio.Mmio(packed struct(u32) {
    +                ///  Maximum frame delay in number of 13.56 MHz clocks
    +                FRAMEDELAYMAX: u16,
    +                padding: u16,
    +            }),
    +            ///  Configuration register for the Frame Delay Timer
    +            FRAMEDELAYMODE: mmio.Mmio(packed struct(u32) {
    +                ///  Configuration register for the Frame Delay Timer
    +                FRAMEDELAYMODE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Transmission is independent of frame timer and will start when the STARTTX task is triggered. No timeout.
    +                        FreeRun = 0x0,
    +                        ///  Frame is transmitted between FRAMEDELAYMIN and FRAMEDELAYMAX
    +                        Window = 0x1,
    +                        ///  Frame is transmitted exactly at FRAMEDELAYMAX
    +                        ExactVal = 0x2,
    +                        ///  Frame is transmitted on a bit grid between FRAMEDELAYMIN and FRAMEDELAYMAX
    +                        WindowGrid = 0x3,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            ///  Packet pointer for TXD and RXD data storage in Data RAM
    +            PACKETPTR: mmio.Mmio(packed struct(u32) {
    +                ///  Packet pointer for TXD and RXD data storage in Data RAM. This address is a byte aligned RAM address.
    +                PTR: u32,
    +            }),
    +            ///  Size of allocated for TXD and RXD data storage buffer in Data RAM
    +            MAXLEN: mmio.Mmio(packed struct(u32) {
    +                ///  Size of allocated for TXD and RXD data storage buffer in Data RAM
    +                MAXLEN: u9,
    +                padding: u23,
    +            }),
    +            reserved1424: [120]u8,
    +            ///  Last NFCID1 part (4, 7 or 10 bytes ID)
    +            NFCID1_LAST: mmio.Mmio(packed struct(u32) {
    +                ///  NFCID1 byte Z (very last byte sent)
    +                NFCID1_Z: u8,
    +                ///  NFCID1 byte Y
    +                NFCID1_Y: u8,
    +                ///  NFCID1 byte X
    +                NFCID1_X: u8,
    +                ///  NFCID1 byte W
    +                NFCID1_W: u8,
    +            }),
    +            ///  Second last NFCID1 part (7 or 10 bytes ID)
    +            NFCID1_2ND_LAST: mmio.Mmio(packed struct(u32) {
    +                ///  NFCID1 byte V
    +                NFCID1_V: u8,
    +                ///  NFCID1 byte U
    +                NFCID1_U: u8,
    +                ///  NFCID1 byte T
    +                NFCID1_T: u8,
    +                padding: u8,
    +            }),
    +            ///  Third last NFCID1 part (10 bytes ID)
    +            NFCID1_3RD_LAST: mmio.Mmio(packed struct(u32) {
    +                ///  NFCID1 byte S
    +                NFCID1_S: u8,
    +                ///  NFCID1 byte R
    +                NFCID1_R: u8,
    +                ///  NFCID1 byte Q
    +                NFCID1_Q: u8,
    +                padding: u8,
    +            }),
    +            reserved1440: [4]u8,
    +            ///  NFC-A SENS_RES auto-response settings
    +            SENSRES: mmio.Mmio(packed struct(u32) {
    +                ///  Bit frame SDD as defined by the b5:b1 of byte 1 in SENS_RES response in the NFC Forum, NFC Digital Protocol Technical Specification
    +                BITFRAMESDD: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        ///  SDD pattern 00000
    +                        SDD00000 = 0x0,
    +                        ///  SDD pattern 00001
    +                        SDD00001 = 0x1,
    +                        ///  SDD pattern 00010
    +                        SDD00010 = 0x2,
    +                        ///  SDD pattern 00100
    +                        SDD00100 = 0x4,
    +                        ///  SDD pattern 01000
    +                        SDD01000 = 0x8,
    +                        ///  SDD pattern 10000
    +                        SDD10000 = 0x10,
    +                        _,
    +                    },
    +                },
    +                ///  Reserved for future use. Shall be 0.
    +                RFU5: u1,
    +                ///  NFCID1 size. This value is used by the Auto collision resolution engine.
    +                NFCIDSIZE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  NFCID1 size: single (4 bytes)
    +                        NFCID1Single = 0x0,
    +                        ///  NFCID1 size: double (7 bytes)
    +                        NFCID1Double = 0x1,
    +                        ///  NFCID1 size: triple (10 bytes)
    +                        NFCID1Triple = 0x2,
    +                        _,
    +                    },
    +                },
    +                ///  Tag platform configuration as defined by the b4:b1 of byte 2 in SENS_RES response in the NFC Forum, NFC Digital Protocol Technical Specification
    +                PLATFCONFIG: u4,
    +                ///  Reserved for future use. Shall be 0.
    +                RFU74: u4,
    +                padding: u16,
    +            }),
    +            ///  NFC-A SEL_RES auto-response settings
    +            SELRES: mmio.Mmio(packed struct(u32) {
    +                ///  Reserved for future use. Shall be 0.
    +                RFU10: u2,
    +                ///  Cascade bit (controlled by hardware, write has no effect)
    +                CASCADE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  NFCID1 complete
    +                        Complete = 0x0,
    +                        ///  NFCID1 not complete
    +                        NotComplete = 0x1,
    +                    },
    +                },
    +                ///  Reserved for future use. Shall be 0.
    +                RFU43: u2,
    +                ///  Protocol as defined by the b7:b6 of SEL_RES response in the NFC Forum, NFC Digital Protocol Technical Specification
    +                PROTOCOL: u2,
    +                ///  Reserved for future use. Shall be 0.
    +                RFU7: u1,
    +                padding: u24,
    +            }),
    +        };
    +
    +        ///  GPIO Tasks and Events
    +        pub const GPIOTE = extern struct {
    +            ///  Description collection[0]: Task for writing to pin specified in CONFIG[0].PSEL. Action on pin is configured in CONFIG[0].POLARITY.
    +            TASKS_OUT: [8]u32,
    +            reserved48: [16]u8,
    +            ///  Description collection[0]: Task for writing to pin specified in CONFIG[0].PSEL. Action on pin is to set it high.
    +            TASKS_SET: [8]u32,
    +            reserved96: [16]u8,
    +            ///  Description collection[0]: Task for writing to pin specified in CONFIG[0].PSEL. Action on pin is to set it low.
    +            TASKS_CLR: [8]u32,
    +            reserved256: [128]u8,
    +            ///  Description collection[0]: Event generated from pin specified in CONFIG[0].PSEL
    +            EVENTS_IN: [8]u32,
    +            reserved380: [92]u8,
    +            ///  Event generated from multiple input GPIO pins with SENSE mechanism enabled
    +            EVENTS_PORT: u32,
    +            reserved772: [388]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Enable interrupt for IN[0] event
    +                IN0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for IN[1] event
    +                IN1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for IN[2] event
    +                IN2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for IN[3] event
    +                IN3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for IN[4] event
    +                IN4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for IN[5] event
    +                IN5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for IN[6] event
    +                IN6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for IN[7] event
    +                IN7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved31: u23,
    +                ///  Write '1' to Enable interrupt for PORT event
    +                PORT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Disable interrupt for IN[0] event
    +                IN0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for IN[1] event
    +                IN1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for IN[2] event
    +                IN2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for IN[3] event
    +                IN3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for IN[4] event
    +                IN4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for IN[5] event
    +                IN5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for IN[6] event
    +                IN6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for IN[7] event
    +                IN7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved31: u23,
    +                ///  Write '1' to Disable interrupt for PORT event
    +                PORT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +            }),
    +            reserved1296: [516]u8,
    +            ///  Description collection[0]: Configuration for OUT[n], SET[n] and CLR[n] tasks and IN[n] event
    +            CONFIG: [8]mmio.Mmio(packed struct(u32) {
    +                ///  Mode
    +                MODE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Disabled. Pin specified by PSEL will not be acquired by the GPIOTE module.
    +                        Disabled = 0x0,
    +                        ///  Event mode
    +                        Event = 0x1,
    +                        ///  Task mode
    +                        Task = 0x3,
    +                        _,
    +                    },
    +                },
    +                reserved8: u6,
    +                ///  GPIO number associated with SET[n], CLR[n] and OUT[n] tasks and IN[n] event
    +                PSEL: u5,
    +                reserved16: u3,
    +                ///  When In task mode: Operation to be performed on output when OUT[n] task is triggered. When In event mode: Operation on input that shall trigger IN[n] event.
    +                POLARITY: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Task mode: No effect on pin from OUT[n] task. Event mode: no IN[n] event generated on pin activity.
    +                        None = 0x0,
    +                        ///  Task mode: Set pin from OUT[n] task. Event mode: Generate IN[n] event when rising edge on pin.
    +                        LoToHi = 0x1,
    +                        ///  Task mode: Clear pin from OUT[n] task. Event mode: Generate IN[n] event when falling edge on pin.
    +                        HiToLo = 0x2,
    +                        ///  Task mode: Toggle pin from OUT[n]. Event mode: Generate IN[n] when any change on pin.
    +                        Toggle = 0x3,
    +                    },
    +                },
    +                reserved20: u2,
    +                ///  When in task mode: Initial value of the output when the GPIOTE channel is configured. When in event mode: No effect.
    +                OUTINIT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Task mode: Initial value of pin before task triggering is low
    +                        Low = 0x0,
    +                        ///  Task mode: Initial value of pin before task triggering is high
    +                        High = 0x1,
    +                    },
    +                },
    +                padding: u11,
    +            }),
    +        };
    +
    +        ///  Analog to Digital Converter
    +        pub const SAADC = extern struct {
    +            ///  Start the ADC and prepare the result buffer in RAM
    +            TASKS_START: u32,
    +            ///  Take one ADC sample, if scan is enabled all channels are sampled
    +            TASKS_SAMPLE: u32,
    +            ///  Stop the ADC and terminate any on-going conversion
    +            TASKS_STOP: u32,
    +            ///  Starts offset auto-calibration
    +            TASKS_CALIBRATEOFFSET: u32,
    +            reserved256: [240]u8,
    +            ///  The ADC has started
    +            EVENTS_STARTED: u32,
    +            ///  The ADC has filled up the Result buffer
    +            EVENTS_END: u32,
    +            ///  A conversion task has been completed. Depending on the mode, multiple conversions might be needed for a result to be transferred to RAM.
    +            EVENTS_DONE: u32,
    +            ///  A result is ready to get transferred to RAM.
    +            EVENTS_RESULTDONE: u32,
    +            ///  Calibration is complete
    +            EVENTS_CALIBRATEDONE: u32,
    +            ///  The ADC has stopped
    +            EVENTS_STOPPED: u32,
    +            reserved768: [488]u8,
    +            ///  Enable or disable interrupt
    +            INTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable interrupt for STARTED event
    +                STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for END event
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for DONE event
    +                DONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for RESULTDONE event
    +                RESULTDONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for CALIBRATEDONE event
    +                CALIBRATEDONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for STOPPED event
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for CH[0].LIMITH event
    +                CH0LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for CH[0].LIMITL event
    +                CH0LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for CH[1].LIMITH event
    +                CH1LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for CH[1].LIMITL event
    +                CH1LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for CH[2].LIMITH event
    +                CH2LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for CH[2].LIMITL event
    +                CH2LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for CH[3].LIMITH event
    +                CH3LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for CH[3].LIMITL event
    +                CH3LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for CH[4].LIMITH event
    +                CH4LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for CH[4].LIMITL event
    +                CH4LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for CH[5].LIMITH event
    +                CH5LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for CH[5].LIMITL event
    +                CH5LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for CH[6].LIMITH event
    +                CH6LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for CH[6].LIMITL event
    +                CH6LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for CH[7].LIMITH event
    +                CH7LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for CH[7].LIMITL event
    +                CH7LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u10,
    +            }),
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Enable interrupt for STARTED event
    +                STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for END event
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for DONE event
    +                DONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for RESULTDONE event
    +                RESULTDONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for CALIBRATEDONE event
    +                CALIBRATEDONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for STOPPED event
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for CH[0].LIMITH event
    +                CH0LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for CH[0].LIMITL event
    +                CH0LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for CH[1].LIMITH event
    +                CH1LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for CH[1].LIMITL event
    +                CH1LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for CH[2].LIMITH event
    +                CH2LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for CH[2].LIMITL event
    +                CH2LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for CH[3].LIMITH event
    +                CH3LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for CH[3].LIMITL event
    +                CH3LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for CH[4].LIMITH event
    +                CH4LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for CH[4].LIMITL event
    +                CH4LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for CH[5].LIMITH event
    +                CH5LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for CH[5].LIMITL event
    +                CH5LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for CH[6].LIMITH event
    +                CH6LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for CH[6].LIMITL event
    +                CH6LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for CH[7].LIMITH event
    +                CH7LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for CH[7].LIMITL event
    +                CH7LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u10,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Disable interrupt for STARTED event
    +                STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for END event
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for DONE event
    +                DONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for RESULTDONE event
    +                RESULTDONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for CALIBRATEDONE event
    +                CALIBRATEDONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for STOPPED event
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for CH[0].LIMITH event
    +                CH0LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for CH[0].LIMITL event
    +                CH0LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for CH[1].LIMITH event
    +                CH1LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for CH[1].LIMITL event
    +                CH1LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for CH[2].LIMITH event
    +                CH2LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for CH[2].LIMITL event
    +                CH2LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for CH[3].LIMITH event
    +                CH3LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for CH[3].LIMITL event
    +                CH3LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for CH[4].LIMITH event
    +                CH4LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for CH[4].LIMITL event
    +                CH4LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for CH[5].LIMITH event
    +                CH5LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for CH[5].LIMITL event
    +                CH5LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for CH[6].LIMITH event
    +                CH6LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for CH[6].LIMITL event
    +                CH6LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for CH[7].LIMITH event
    +                CH7LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for CH[7].LIMITL event
    +                CH7LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u10,
    +            }),
    +            reserved1024: [244]u8,
    +            ///  Status
    +            STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  Status
    +                STATUS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  ADC is ready. No on-going conversion.
    +                        Ready = 0x0,
    +                        ///  ADC is busy. Conversion in progress.
    +                        Busy = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1280: [252]u8,
    +            ///  Enable or disable ADC
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable ADC
    +                ENABLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable ADC
    +                        Disabled = 0x0,
    +                        ///  Enable ADC
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1520: [236]u8,
    +            ///  Resolution configuration
    +            RESOLUTION: mmio.Mmio(packed struct(u32) {
    +                ///  Set the resolution
    +                VAL: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        ///  8 bit
    +                        @"8bit" = 0x0,
    +                        ///  10 bit
    +                        @"10bit" = 0x1,
    +                        ///  12 bit
    +                        @"12bit" = 0x2,
    +                        ///  14 bit
    +                        @"14bit" = 0x3,
    +                        _,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            ///  Oversampling configuration. OVERSAMPLE should not be combined with SCAN. The RESOLUTION is applied before averaging, thus for high OVERSAMPLE a higher RESOLUTION should be used.
    +            OVERSAMPLE: mmio.Mmio(packed struct(u32) {
    +                ///  Oversample control
    +                OVERSAMPLE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  Bypass oversampling
    +                        Bypass = 0x0,
    +                        ///  Oversample 2x
    +                        Over2x = 0x1,
    +                        ///  Oversample 4x
    +                        Over4x = 0x2,
    +                        ///  Oversample 8x
    +                        Over8x = 0x3,
    +                        ///  Oversample 16x
    +                        Over16x = 0x4,
    +                        ///  Oversample 32x
    +                        Over32x = 0x5,
    +                        ///  Oversample 64x
    +                        Over64x = 0x6,
    +                        ///  Oversample 128x
    +                        Over128x = 0x7,
    +                        ///  Oversample 256x
    +                        Over256x = 0x8,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            ///  Controls normal or continuous sample rate
    +            SAMPLERATE: mmio.Mmio(packed struct(u32) {
    +                ///  Capture and compare value. Sample rate is 16 MHz/CC
    +                CC: u11,
    +                reserved12: u1,
    +                ///  Select mode for sample rate control
    +                MODE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Rate is controlled from SAMPLE task
    +                        Task = 0x0,
    +                        ///  Rate is controlled from local timer (use CC to control the rate)
    +                        Timers = 0x1,
    +                    },
    +                },
    +                padding: u19,
    +            }),
    +        };
    +
    +        ///  Timer/Counter 0
    +        pub const TIMER0 = extern struct {
    +            ///  Start Timer
    +            TASKS_START: u32,
    +            ///  Stop Timer
    +            TASKS_STOP: u32,
    +            ///  Increment Timer (Counter mode only)
    +            TASKS_COUNT: u32,
    +            ///  Clear time
    +            TASKS_CLEAR: u32,
    +            ///  Deprecated register - Shut down timer
    +            TASKS_SHUTDOWN: u32,
    +            reserved64: [44]u8,
    +            ///  Description collection[0]: Capture Timer value to CC[0] register
    +            TASKS_CAPTURE: [6]u32,
    +            reserved320: [232]u8,
    +            ///  Description collection[0]: Compare event on CC[0] match
    +            EVENTS_COMPARE: [6]u32,
    +            reserved512: [168]u8,
    +            ///  Shortcut register
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                ///  Shortcut between COMPARE[0] event and CLEAR task
    +                COMPARE0_CLEAR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between COMPARE[1] event and CLEAR task
    +                COMPARE1_CLEAR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between COMPARE[2] event and CLEAR task
    +                COMPARE2_CLEAR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between COMPARE[3] event and CLEAR task
    +                COMPARE3_CLEAR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between COMPARE[4] event and CLEAR task
    +                COMPARE4_CLEAR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between COMPARE[5] event and CLEAR task
    +                COMPARE5_CLEAR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved8: u2,
    +                ///  Shortcut between COMPARE[0] event and STOP task
    +                COMPARE0_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between COMPARE[1] event and STOP task
    +                COMPARE1_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between COMPARE[2] event and STOP task
    +                COMPARE2_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between COMPARE[3] event and STOP task
    +                COMPARE3_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between COMPARE[4] event and STOP task
    +                COMPARE4_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between COMPARE[5] event and STOP task
    +                COMPARE5_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u18,
    +            }),
    +            reserved772: [256]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                reserved16: u16,
    +                ///  Write '1' to Enable interrupt for COMPARE[0] event
    +                COMPARE0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for COMPARE[1] event
    +                COMPARE1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for COMPARE[2] event
    +                COMPARE2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for COMPARE[3] event
    +                COMPARE3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for COMPARE[4] event
    +                COMPARE4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for COMPARE[5] event
    +                COMPARE5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u10,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                reserved16: u16,
    +                ///  Write '1' to Disable interrupt for COMPARE[0] event
    +                COMPARE0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for COMPARE[1] event
    +                COMPARE1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for COMPARE[2] event
    +                COMPARE2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for COMPARE[3] event
    +                COMPARE3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for COMPARE[4] event
    +                COMPARE4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for COMPARE[5] event
    +                COMPARE5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u10,
    +            }),
    +            reserved1284: [504]u8,
    +            ///  Timer mode selection
    +            MODE: mmio.Mmio(packed struct(u32) {
    +                ///  Timer mode
    +                MODE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Select Timer mode
    +                        Timer = 0x0,
    +                        ///  Deprecated enumerator - Select Counter mode
    +                        Counter = 0x1,
    +                        ///  Select Low Power Counter mode
    +                        LowPowerCounter = 0x2,
    +                        _,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            ///  Configure the number of bits used by the TIMER
    +            BITMODE: mmio.Mmio(packed struct(u32) {
    +                ///  Timer bit width
    +                BITMODE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  16 bit timer bit width
    +                        @"16Bit" = 0x0,
    +                        ///  8 bit timer bit width
    +                        @"08Bit" = 0x1,
    +                        ///  24 bit timer bit width
    +                        @"24Bit" = 0x2,
    +                        ///  32 bit timer bit width
    +                        @"32Bit" = 0x3,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            reserved1296: [4]u8,
    +            ///  Timer prescaler register
    +            PRESCALER: mmio.Mmio(packed struct(u32) {
    +                ///  Prescaler value
    +                PRESCALER: u4,
    +                padding: u28,
    +            }),
    +            reserved1344: [44]u8,
    +            ///  Description collection[0]: Capture/Compare register 0
    +            CC: [6]mmio.Mmio(packed struct(u32) {
    +                ///  Capture/Compare value
    +                CC: u32,
    +            }),
    +        };
    +
    +        ///  Non Volatile Memory Controller
    +        pub const NVMC = extern struct {
    +            reserved1024: [1024]u8,
    +            ///  Ready flag
    +            READY: mmio.Mmio(packed struct(u32) {
    +                ///  NVMC is ready or busy
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  NVMC is busy (on-going write or erase operation)
    +                        Busy = 0x0,
    +                        ///  NVMC is ready
    +                        Ready = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1284: [256]u8,
    +            ///  Configuration register
    +            CONFIG: mmio.Mmio(packed struct(u32) {
    +                ///  Program memory access mode. It is strongly recommended to only activate erase and write modes when they are actively used. Enabling write or erase will invalidate the cache and keep it invalidated.
    +                WEN: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Read only access
    +                        Ren = 0x0,
    +                        ///  Write Enabled
    +                        Wen = 0x1,
    +                        ///  Erase enabled
    +                        Een = 0x2,
    +                        _,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            ///  Register for erasing a page in Code area
    +            ERASEPAGE: mmio.Mmio(packed struct(u32) {
    +                ///  Register for starting erase of a page in Code area
    +                ERASEPAGE: u32,
    +            }),
    +            ///  Register for erasing all non-volatile user memory
    +            ERASEALL: mmio.Mmio(packed struct(u32) {
    +                ///  Erase all non-volatile memory including UICR registers. Note that code erase has to be enabled by CONFIG.EEN before the UICR can be erased.
    +                ERASEALL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  No operation
    +                        NoOperation = 0x0,
    +                        ///  Start chip erase
    +                        Erase = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Deprecated register - Register for erasing a page in Code area. Equivalent to ERASEPAGE.
    +            ERASEPCR0: mmio.Mmio(packed struct(u32) {
    +                ///  Register for starting erase of a page in Code area. Equivalent to ERASEPAGE.
    +                ERASEPCR0: u32,
    +            }),
    +            ///  Register for erasing User Information Configuration Registers
    +            ERASEUICR: mmio.Mmio(packed struct(u32) {
    +                ///  Register starting erase of all User Information Configuration Registers. Note that code erase has to be enabled by CONFIG.EEN before the UICR can be erased.
    +                ERASEUICR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  No operation
    +                        NoOperation = 0x0,
    +                        ///  Start erase of UICR
    +                        Erase = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1344: [40]u8,
    +            ///  I-Code cache configuration register.
    +            ICACHECNF: mmio.Mmio(packed struct(u32) {
    +                ///  Cache enable
    +                CACHEEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable cache. Invalidates all cache entries.
    +                        Disabled = 0x0,
    +                        ///  Enable cache
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved8: u7,
    +                ///  Cache profiling enable
    +                CACHEPROFEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable cache profiling
    +                        Disabled = 0x0,
    +                        ///  Enable cache profiling
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u23,
    +            }),
    +            reserved1352: [4]u8,
    +            ///  I-Code cache hit counter.
    +            IHIT: mmio.Mmio(packed struct(u32) {
    +                ///  Number of cache hits
    +                HITS: u32,
    +            }),
    +            ///  I-Code cache miss counter.
    +            IMISS: mmio.Mmio(packed struct(u32) {
    +                ///  Number of cache misses
    +                MISSES: u32,
    +            }),
    +        };
    +
    +        ///  Pulse Density Modulation (Digital Microphone) Interface
    +        pub const PDM = extern struct {
    +            ///  Starts continuous PDM transfer
    +            TASKS_START: u32,
    +            ///  Stops PDM transfer
    +            TASKS_STOP: u32,
    +            reserved256: [248]u8,
    +            ///  PDM transfer has started
    +            EVENTS_STARTED: u32,
    +            ///  PDM transfer has finished
    +            EVENTS_STOPPED: u32,
    +            ///  The PDM has written the last sample specified by SAMPLE.MAXCNT (or the last sample after a STOP task has been received) to Data RAM
    +            EVENTS_END: u32,
    +            reserved768: [500]u8,
    +            ///  Enable or disable interrupt
    +            INTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable interrupt for STARTED event
    +                STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for STOPPED event
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for END event
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Enable interrupt for STARTED event
    +                STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for STOPPED event
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for END event
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Disable interrupt for STARTED event
    +                STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for STOPPED event
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for END event
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            reserved1280: [500]u8,
    +            ///  PDM module enable register
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable PDM module
    +                ENABLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  PDM clock generator control
    +            PDMCLKCTRL: mmio.Mmio(packed struct(u32) {
    +                ///  PDM_CLK frequency
    +                FREQ: packed union {
    +                    raw: u32,
    +                    value: enum(u32) {
    +                        ///  PDM_CLK = 32 MHz / 32 = 1.000 MHz
    +                        @"1000K" = 0x8000000,
    +                        ///  PDM_CLK = 32 MHz / 31 = 1.032 MHz
    +                        Default = 0x8400000,
    +                        ///  PDM_CLK = 32 MHz / 30 = 1.067 MHz
    +                        @"1067K" = 0x8800000,
    +                        _,
    +                    },
    +                },
    +            }),
    +            ///  Defines the routing of the connected PDM microphones' signals
    +            MODE: mmio.Mmio(packed struct(u32) {
    +                ///  Mono or stereo operation
    +                OPERATION: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Sample and store one pair (Left + Right) of 16bit samples per RAM word R=[31:16]; L=[15:0]
    +                        Stereo = 0x0,
    +                        ///  Sample and store two successive Left samples (16 bit each) per RAM word L1=[31:16]; L0=[15:0]
    +                        Mono = 0x1,
    +                    },
    +                },
    +                ///  Defines on which PDM_CLK edge Left (or mono) is sampled
    +                EDGE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Left (or mono) is sampled on falling edge of PDM_CLK
    +                        LeftFalling = 0x0,
    +                        ///  Left (or mono) is sampled on rising edge of PDM_CLK
    +                        LeftRising = 0x1,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            reserved1304: [12]u8,
    +            ///  Left output gain adjustment
    +            GAINL: mmio.Mmio(packed struct(u32) {
    +                ///  Left output gain adjustment, in 0.5 dB steps, around the default module gain (see electrical parameters) 0x00 -20 dB gain adjust 0x01 -19.5 dB gain adjust (...) 0x27 -0.5 dB gain adjust 0x28 0 dB gain adjust 0x29 +0.5 dB gain adjust (...) 0x4F +19.5 dB gain adjust 0x50 +20 dB gain adjust
    +                GAINL: packed union {
    +                    raw: u7,
    +                    value: enum(u7) {
    +                        ///  -20dB gain adjustment (minimum)
    +                        MinGain = 0x0,
    +                        ///  0dB gain adjustment ('2500 RMS' requirement)
    +                        DefaultGain = 0x28,
    +                        ///  +20dB gain adjustment (maximum)
    +                        MaxGain = 0x50,
    +                        _,
    +                    },
    +                },
    +                padding: u25,
    +            }),
    +            ///  Right output gain adjustment
    +            GAINR: mmio.Mmio(packed struct(u32) {
    +                ///  Right output gain adjustment, in 0.5 dB steps, around the default module gain (see electrical parameters)
    +                GAINR: packed union {
    +                    raw: u8,
    +                    value: enum(u8) {
    +                        ///  -20dB gain adjustment (minimum)
    +                        MinGain = 0x0,
    +                        ///  0dB gain adjustment ('2500 RMS' requirement)
    +                        DefaultGain = 0x28,
    +                        ///  +20dB gain adjustment (maximum)
    +                        MaxGain = 0x50,
    +                        _,
    +                    },
    +                },
    +                padding: u24,
    +            }),
    +        };
    +
    +        ///  Real time counter 0
    +        pub const RTC0 = extern struct {
    +            ///  Start RTC COUNTER
    +            TASKS_START: u32,
    +            ///  Stop RTC COUNTER
    +            TASKS_STOP: u32,
    +            ///  Clear RTC COUNTER
    +            TASKS_CLEAR: u32,
    +            ///  Set COUNTER to 0xFFFFF0
    +            TASKS_TRIGOVRFLW: u32,
    +            reserved256: [240]u8,
    +            ///  Event on COUNTER increment
    +            EVENTS_TICK: u32,
    +            ///  Event on COUNTER overflow
    +            EVENTS_OVRFLW: u32,
    +            reserved320: [56]u8,
    +            ///  Description collection[0]: Compare event on CC[0] match
    +            EVENTS_COMPARE: [4]u32,
    +            reserved772: [436]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Enable interrupt for TICK event
    +                TICK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for OVRFLW event
    +                OVRFLW: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved16: u14,
    +                ///  Write '1' to Enable interrupt for COMPARE[0] event
    +                COMPARE0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for COMPARE[1] event
    +                COMPARE1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for COMPARE[2] event
    +                COMPARE2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for COMPARE[3] event
    +                COMPARE3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u12,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Disable interrupt for TICK event
    +                TICK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for OVRFLW event
    +                OVRFLW: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved16: u14,
    +                ///  Write '1' to Disable interrupt for COMPARE[0] event
    +                COMPARE0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for COMPARE[1] event
    +                COMPARE1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for COMPARE[2] event
    +                COMPARE2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for COMPARE[3] event
    +                COMPARE3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u12,
    +            }),
    +            reserved832: [52]u8,
    +            ///  Enable or disable event routing
    +            EVTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable event routing for TICK event
    +                TICK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable event routing for OVRFLW event
    +                OVRFLW: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved16: u14,
    +                ///  Enable or disable event routing for COMPARE[0] event
    +                COMPARE0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable event routing for COMPARE[1] event
    +                COMPARE1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable event routing for COMPARE[2] event
    +                COMPARE2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable event routing for COMPARE[3] event
    +                COMPARE3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u12,
    +            }),
    +            ///  Enable event routing
    +            EVTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Enable event routing for TICK event
    +                TICK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable event routing for OVRFLW event
    +                OVRFLW: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved16: u14,
    +                ///  Write '1' to Enable event routing for COMPARE[0] event
    +                COMPARE0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable event routing for COMPARE[1] event
    +                COMPARE1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable event routing for COMPARE[2] event
    +                COMPARE2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable event routing for COMPARE[3] event
    +                COMPARE3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u12,
    +            }),
    +            ///  Disable event routing
    +            EVTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Disable event routing for TICK event
    +                TICK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable event routing for OVRFLW event
    +                OVRFLW: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved16: u14,
    +                ///  Write '1' to Disable event routing for COMPARE[0] event
    +                COMPARE0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable event routing for COMPARE[1] event
    +                COMPARE1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable event routing for COMPARE[2] event
    +                COMPARE2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable event routing for COMPARE[3] event
    +                COMPARE3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u12,
    +            }),
    +            reserved1284: [440]u8,
    +            ///  Current COUNTER value
    +            COUNTER: mmio.Mmio(packed struct(u32) {
    +                ///  Counter value
    +                COUNTER: u24,
    +                padding: u8,
    +            }),
    +            ///  12 bit prescaler for COUNTER frequency (32768/(PRESCALER+1)).Must be written when RTC is stopped
    +            PRESCALER: mmio.Mmio(packed struct(u32) {
    +                ///  Prescaler value
    +                PRESCALER: u12,
    +                padding: u20,
    +            }),
    +            reserved1344: [52]u8,
    +            ///  Description collection[0]: Compare register 0
    +            CC: [4]mmio.Mmio(packed struct(u32) {
    +                ///  Compare value
    +                COMPARE: u24,
    +                padding: u8,
    +            }),
    +        };
    +
    +        ///  Temperature Sensor
    +        pub const TEMP = extern struct {
    +            ///  Start temperature measurement
    +            TASKS_START: u32,
    +            ///  Stop temperature measurement
    +            TASKS_STOP: u32,
    +            reserved256: [248]u8,
    +            ///  Temperature measurement complete, data ready
    +            EVENTS_DATARDY: u32,
    +            reserved772: [512]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Enable interrupt for DATARDY event
    +                DATARDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Disable interrupt for DATARDY event
    +                DATARDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1288: [508]u8,
    +            ///  Temperature in degC (0.25deg steps)
    +            TEMP: mmio.Mmio(packed struct(u32) {
    +                ///  Temperature in degC (0.25deg steps)
    +                TEMP: u32,
    +            }),
    +            reserved1312: [20]u8,
    +            ///  Slope of 1st piece wise linear function
    +            A0: mmio.Mmio(packed struct(u32) {
    +                ///  Slope of 1st piece wise linear function
    +                A0: u12,
    +                padding: u20,
    +            }),
    +            ///  Slope of 2nd piece wise linear function
    +            A1: mmio.Mmio(packed struct(u32) {
    +                ///  Slope of 2nd piece wise linear function
    +                A1: u12,
    +                padding: u20,
    +            }),
    +            ///  Slope of 3rd piece wise linear function
    +            A2: mmio.Mmio(packed struct(u32) {
    +                ///  Slope of 3rd piece wise linear function
    +                A2: u12,
    +                padding: u20,
    +            }),
    +            ///  Slope of 4th piece wise linear function
    +            A3: mmio.Mmio(packed struct(u32) {
    +                ///  Slope of 4th piece wise linear function
    +                A3: u12,
    +                padding: u20,
    +            }),
    +            ///  Slope of 5th piece wise linear function
    +            A4: mmio.Mmio(packed struct(u32) {
    +                ///  Slope of 5th piece wise linear function
    +                A4: u12,
    +                padding: u20,
    +            }),
    +            ///  Slope of 6th piece wise linear function
    +            A5: mmio.Mmio(packed struct(u32) {
    +                ///  Slope of 6th piece wise linear function
    +                A5: u12,
    +                padding: u20,
    +            }),
    +            reserved1344: [8]u8,
    +            ///  y-intercept of 1st piece wise linear function
    +            B0: mmio.Mmio(packed struct(u32) {
    +                ///  y-intercept of 1st piece wise linear function
    +                B0: u14,
    +                padding: u18,
    +            }),
    +            ///  y-intercept of 2nd piece wise linear function
    +            B1: mmio.Mmio(packed struct(u32) {
    +                ///  y-intercept of 2nd piece wise linear function
    +                B1: u14,
    +                padding: u18,
    +            }),
    +            ///  y-intercept of 3rd piece wise linear function
    +            B2: mmio.Mmio(packed struct(u32) {
    +                ///  y-intercept of 3rd piece wise linear function
    +                B2: u14,
    +                padding: u18,
    +            }),
    +            ///  y-intercept of 4th piece wise linear function
    +            B3: mmio.Mmio(packed struct(u32) {
    +                ///  y-intercept of 4th piece wise linear function
    +                B3: u14,
    +                padding: u18,
    +            }),
    +            ///  y-intercept of 5th piece wise linear function
    +            B4: mmio.Mmio(packed struct(u32) {
    +                ///  y-intercept of 5th piece wise linear function
    +                B4: u14,
    +                padding: u18,
    +            }),
    +            ///  y-intercept of 6th piece wise linear function
    +            B5: mmio.Mmio(packed struct(u32) {
    +                ///  y-intercept of 6th piece wise linear function
    +                B5: u14,
    +                padding: u18,
    +            }),
    +            reserved1376: [8]u8,
    +            ///  End point of 1st piece wise linear function
    +            T0: mmio.Mmio(packed struct(u32) {
    +                ///  End point of 1st piece wise linear function
    +                T0: u8,
    +                padding: u24,
    +            }),
    +            ///  End point of 2nd piece wise linear function
    +            T1: mmio.Mmio(packed struct(u32) {
    +                ///  End point of 2nd piece wise linear function
    +                T1: u8,
    +                padding: u24,
    +            }),
    +            ///  End point of 3rd piece wise linear function
    +            T2: mmio.Mmio(packed struct(u32) {
    +                ///  End point of 3rd piece wise linear function
    +                T2: u8,
    +                padding: u24,
    +            }),
    +            ///  End point of 4th piece wise linear function
    +            T3: mmio.Mmio(packed struct(u32) {
    +                ///  End point of 4th piece wise linear function
    +                T3: u8,
    +                padding: u24,
    +            }),
    +            ///  End point of 5th piece wise linear function
    +            T4: mmio.Mmio(packed struct(u32) {
    +                ///  End point of 5th piece wise linear function
    +                T4: u8,
    +                padding: u24,
    +            }),
    +        };
    +
    +        ///  Random Number Generator
    +        pub const RNG = extern struct {
    +            ///  Task starting the random number generator
    +            TASKS_START: u32,
    +            ///  Task stopping the random number generator
    +            TASKS_STOP: u32,
    +            reserved256: [248]u8,
    +            ///  Event being generated for every new random number written to the VALUE register
    +            EVENTS_VALRDY: u32,
    +            reserved512: [252]u8,
    +            ///  Shortcut register
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                ///  Shortcut between VALRDY event and STOP task
    +                VALRDY_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved772: [256]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Enable interrupt for VALRDY event
    +                VALRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Disable interrupt for VALRDY event
    +                VALRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1284: [504]u8,
    +            ///  Configuration register
    +            CONFIG: mmio.Mmio(packed struct(u32) {
    +                ///  Bias correction
    +                DERCEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Output random number
    +            VALUE: mmio.Mmio(packed struct(u32) {
    +                ///  Generated random number
    +                VALUE: u8,
    +                padding: u24,
    +            }),
    +        };
    +
    +        ///  AES ECB Mode Encryption
    +        pub const ECB = extern struct {
    +            ///  Start ECB block encrypt
    +            TASKS_STARTECB: u32,
    +            ///  Abort a possible executing ECB operation
    +            TASKS_STOPECB: u32,
    +            reserved256: [248]u8,
    +            ///  ECB block encrypt complete
    +            EVENTS_ENDECB: u32,
    +            ///  ECB block encrypt aborted because of a STOPECB task or due to an error
    +            EVENTS_ERRORECB: u32,
    +            reserved772: [508]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Enable interrupt for ENDECB event
    +                ENDECB: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for ERRORECB event
    +                ERRORECB: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Disable interrupt for ENDECB event
    +                ENDECB: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for ERRORECB event
    +                ERRORECB: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            reserved1284: [504]u8,
    +            ///  ECB block encrypt memory pointers
    +            ECBDATAPTR: mmio.Mmio(packed struct(u32) {
    +                ///  Pointer to the ECB data structure (see Table 1 ECB data structure overview)
    +                ECBDATAPTR: u32,
    +            }),
    +        };
    +
    +        ///  AES CCM Mode Encryption
    +        pub const CCM = extern struct {
    +            ///  Start generation of key-stream. This operation will stop by itself when completed.
    +            TASKS_KSGEN: u32,
    +            ///  Start encryption/decryption. This operation will stop by itself when completed.
    +            TASKS_CRYPT: u32,
    +            ///  Stop encryption/decryption
    +            TASKS_STOP: u32,
    +            reserved256: [244]u8,
    +            ///  Key-stream generation complete
    +            EVENTS_ENDKSGEN: u32,
    +            ///  Encrypt/decrypt complete
    +            EVENTS_ENDCRYPT: u32,
    +            ///  CCM error event
    +            EVENTS_ERROR: u32,
    +            reserved512: [244]u8,
    +            ///  Shortcut register
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                ///  Shortcut between ENDKSGEN event and CRYPT task
    +                ENDKSGEN_CRYPT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved772: [256]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Enable interrupt for ENDKSGEN event
    +                ENDKSGEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for ENDCRYPT event
    +                ENDCRYPT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for ERROR event
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Disable interrupt for ENDKSGEN event
    +                ENDKSGEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for ENDCRYPT event
    +                ENDCRYPT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for ERROR event
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            reserved1024: [244]u8,
    +            ///  MIC check result
    +            MICSTATUS: mmio.Mmio(packed struct(u32) {
    +                ///  The result of the MIC check performed during the previous decryption operation
    +                MICSTATUS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  MIC check failed
    +                        CheckFailed = 0x0,
    +                        ///  MIC check passed
    +                        CheckPassed = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1280: [252]u8,
    +            ///  Enable
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable CCM
    +                ENABLE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x2,
    +                        _,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            ///  Operation mode
    +            MODE: mmio.Mmio(packed struct(u32) {
    +                ///  The mode of operation to be used
    +                MODE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  AES CCM packet encryption mode
    +                        Encryption = 0x0,
    +                        ///  AES CCM packet decryption mode
    +                        Decryption = 0x1,
    +                    },
    +                },
    +                reserved16: u15,
    +                ///  Data rate that the CCM shall run in synch with
    +                DATARATE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  In synch with 1 Mbit data rate
    +                        @"1Mbit" = 0x0,
    +                        ///  In synch with 2 Mbit data rate
    +                        @"2Mbit" = 0x1,
    +                    },
    +                },
    +                reserved24: u7,
    +                ///  Packet length configuration
    +                LENGTH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Default length. Effective length of LENGTH field is 5-bit
    +                        Default = 0x0,
    +                        ///  Extended length. Effective length of LENGTH field is 8-bit
    +                        Extended = 0x1,
    +                    },
    +                },
    +                padding: u7,
    +            }),
    +            ///  Pointer to data structure holding AES key and NONCE vector
    +            CNFPTR: mmio.Mmio(packed struct(u32) {
    +                ///  Pointer to the data structure holding the AES key and the CCM NONCE vector (see Table 1 CCM data structure overview)
    +                CNFPTR: u32,
    +            }),
    +            ///  Input pointer
    +            INPTR: mmio.Mmio(packed struct(u32) {
    +                ///  Input pointer
    +                INPTR: u32,
    +            }),
    +            ///  Output pointer
    +            OUTPTR: mmio.Mmio(packed struct(u32) {
    +                ///  Output pointer
    +                OUTPTR: u32,
    +            }),
    +            ///  Pointer to data area used for temporary storage
    +            SCRATCHPTR: mmio.Mmio(packed struct(u32) {
    +                ///  Pointer to a scratch data area used for temporary storage during key-stream generation, MIC generation and encryption/decryption.
    +                SCRATCHPTR: u32,
    +            }),
    +        };
    +
    +        ///  Accelerated Address Resolver
    +        pub const AAR = extern struct {
    +            ///  Start resolving addresses based on IRKs specified in the IRK data structure
    +            TASKS_START: u32,
    +            reserved8: [4]u8,
    +            ///  Stop resolving addresses
    +            TASKS_STOP: u32,
    +            reserved256: [244]u8,
    +            ///  Address resolution procedure complete
    +            EVENTS_END: u32,
    +            ///  Address resolved
    +            EVENTS_RESOLVED: u32,
    +            ///  Address not resolved
    +            EVENTS_NOTRESOLVED: u32,
    +            reserved772: [504]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Enable interrupt for END event
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for RESOLVED event
    +                RESOLVED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for NOTRESOLVED event
    +                NOTRESOLVED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Disable interrupt for END event
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for RESOLVED event
    +                RESOLVED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for NOTRESOLVED event
    +                NOTRESOLVED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            reserved1024: [244]u8,
    +            ///  Resolution status
    +            STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  The IRK that was used last time an address was resolved
    +                STATUS: u4,
    +                padding: u28,
    +            }),
    +            reserved1280: [252]u8,
    +            ///  Enable AAR
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable AAR
    +                ENABLE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x3,
    +                        _,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            ///  Number of IRKs
    +            NIRK: mmio.Mmio(packed struct(u32) {
    +                ///  Number of Identity root keys available in the IRK data structure
    +                NIRK: u5,
    +                padding: u27,
    +            }),
    +            ///  Pointer to IRK data structure
    +            IRKPTR: mmio.Mmio(packed struct(u32) {
    +                ///  Pointer to the IRK data structure
    +                IRKPTR: u32,
    +            }),
    +            reserved1296: [4]u8,
    +            ///  Pointer to the resolvable address
    +            ADDRPTR: mmio.Mmio(packed struct(u32) {
    +                ///  Pointer to the resolvable address (6-bytes)
    +                ADDRPTR: u32,
    +            }),
    +            ///  Pointer to data area used for temporary storage
    +            SCRATCHPTR: mmio.Mmio(packed struct(u32) {
    +                ///  Pointer to a scratch data area used for temporary storage during resolution.A space of minimum 3 bytes must be reserved.
    +                SCRATCHPTR: u32,
    +            }),
    +        };
    +
    +        ///  Watchdog Timer
    +        pub const WDT = extern struct {
    +            ///  Start the watchdog
    +            TASKS_START: u32,
    +            reserved256: [252]u8,
    +            ///  Watchdog timeout
    +            EVENTS_TIMEOUT: u32,
    +            reserved772: [512]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Enable interrupt for TIMEOUT event
    +                TIMEOUT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Disable interrupt for TIMEOUT event
    +                TIMEOUT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1024: [244]u8,
    +            ///  Run status
    +            RUNSTATUS: mmio.Mmio(packed struct(u32) {
    +                ///  Indicates whether or not the watchdog is running
    +                RUNSTATUS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Watchdog not running
    +                        NotRunning = 0x0,
    +                        ///  Watchdog is running
    +                        Running = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Request status
    +            REQSTATUS: mmio.Mmio(packed struct(u32) {
    +                ///  Request status for RR[0] register
    +                RR0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RR[0] register is not enabled, or are already requesting reload
    +                        DisabledOrRequested = 0x0,
    +                        ///  RR[0] register is enabled, and are not yet requesting reload
    +                        EnabledAndUnrequested = 0x1,
    +                    },
    +                },
    +                ///  Request status for RR[1] register
    +                RR1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RR[1] register is not enabled, or are already requesting reload
    +                        DisabledOrRequested = 0x0,
    +                        ///  RR[1] register is enabled, and are not yet requesting reload
    +                        EnabledAndUnrequested = 0x1,
    +                    },
    +                },
    +                ///  Request status for RR[2] register
    +                RR2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RR[2] register is not enabled, or are already requesting reload
    +                        DisabledOrRequested = 0x0,
    +                        ///  RR[2] register is enabled, and are not yet requesting reload
    +                        EnabledAndUnrequested = 0x1,
    +                    },
    +                },
    +                ///  Request status for RR[3] register
    +                RR3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RR[3] register is not enabled, or are already requesting reload
    +                        DisabledOrRequested = 0x0,
    +                        ///  RR[3] register is enabled, and are not yet requesting reload
    +                        EnabledAndUnrequested = 0x1,
    +                    },
    +                },
    +                ///  Request status for RR[4] register
    +                RR4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RR[4] register is not enabled, or are already requesting reload
    +                        DisabledOrRequested = 0x0,
    +                        ///  RR[4] register is enabled, and are not yet requesting reload
    +                        EnabledAndUnrequested = 0x1,
    +                    },
    +                },
    +                ///  Request status for RR[5] register
    +                RR5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RR[5] register is not enabled, or are already requesting reload
    +                        DisabledOrRequested = 0x0,
    +                        ///  RR[5] register is enabled, and are not yet requesting reload
    +                        EnabledAndUnrequested = 0x1,
    +                    },
    +                },
    +                ///  Request status for RR[6] register
    +                RR6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RR[6] register is not enabled, or are already requesting reload
    +                        DisabledOrRequested = 0x0,
    +                        ///  RR[6] register is enabled, and are not yet requesting reload
    +                        EnabledAndUnrequested = 0x1,
    +                    },
    +                },
    +                ///  Request status for RR[7] register
    +                RR7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RR[7] register is not enabled, or are already requesting reload
    +                        DisabledOrRequested = 0x0,
    +                        ///  RR[7] register is enabled, and are not yet requesting reload
    +                        EnabledAndUnrequested = 0x1,
    +                    },
    +                },
    +                padding: u24,
    +            }),
    +            reserved1284: [252]u8,
    +            ///  Counter reload value
    +            CRV: mmio.Mmio(packed struct(u32) {
    +                ///  Counter reload value in number of cycles of the 32.768 kHz clock
    +                CRV: u32,
    +            }),
    +            ///  Enable register for reload request registers
    +            RREN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable RR[0] register
    +                RR0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable RR[0] register
    +                        Disabled = 0x0,
    +                        ///  Enable RR[0] register
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable RR[1] register
    +                RR1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable RR[1] register
    +                        Disabled = 0x0,
    +                        ///  Enable RR[1] register
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable RR[2] register
    +                RR2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable RR[2] register
    +                        Disabled = 0x0,
    +                        ///  Enable RR[2] register
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable RR[3] register
    +                RR3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable RR[3] register
    +                        Disabled = 0x0,
    +                        ///  Enable RR[3] register
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable RR[4] register
    +                RR4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable RR[4] register
    +                        Disabled = 0x0,
    +                        ///  Enable RR[4] register
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable RR[5] register
    +                RR5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable RR[5] register
    +                        Disabled = 0x0,
    +                        ///  Enable RR[5] register
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable RR[6] register
    +                RR6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable RR[6] register
    +                        Disabled = 0x0,
    +                        ///  Enable RR[6] register
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable RR[7] register
    +                RR7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable RR[7] register
    +                        Disabled = 0x0,
    +                        ///  Enable RR[7] register
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u24,
    +            }),
    +            ///  Configuration register
    +            CONFIG: mmio.Mmio(packed struct(u32) {
    +                ///  Configure the watchdog to either be paused, or kept running, while the CPU is sleeping
    +                SLEEP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pause watchdog while the CPU is sleeping
    +                        Pause = 0x0,
    +                        ///  Keep the watchdog running while the CPU is sleeping
    +                        Run = 0x1,
    +                    },
    +                },
    +                reserved3: u2,
    +                ///  Configure the watchdog to either be paused, or kept running, while the CPU is halted by the debugger
    +                HALT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pause watchdog while the CPU is halted by the debugger
    +                        Pause = 0x0,
    +                        ///  Keep the watchdog running while the CPU is halted by the debugger
    +                        Run = 0x1,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1536: [240]u8,
    +            ///  Description collection[0]: Reload request 0
    +            RR: [8]mmio.Mmio(packed struct(u32) {
    +                ///  Reload request register
    +                RR: packed union {
    +                    raw: u32,
    +                    value: enum(u32) {
    +                        ///  Value to request a reload of the watchdog timer
    +                        Reload = 0x6e524635,
    +                        _,
    +                    },
    +                },
    +            }),
    +        };
    +
    +        ///  Pulse Width Modulation Unit 0
    +        pub const PWM0 = extern struct {
    +            reserved4: [4]u8,
    +            ///  Stops PWM pulse generation on all channels at the end of current PWM period, and stops sequence playback
    +            TASKS_STOP: u32,
    +            ///  Description collection[0]: Loads the first PWM value on all enabled channels from sequence 0, and starts playing that sequence at the rate defined in SEQ[0]REFRESH and/or DECODER.MODE. Causes PWM generation to start it was not running.
    +            TASKS_SEQSTART: [2]u32,
    +            ///  Steps by one value in the current sequence on all enabled channels if DECODER.MODE=NextStep. Does not cause PWM generation to start it was not running.
    +            TASKS_NEXTSTEP: u32,
    +            reserved260: [240]u8,
    +            ///  Response to STOP task, emitted when PWM pulses are no longer generated
    +            EVENTS_STOPPED: u32,
    +            ///  Description collection[0]: First PWM period started on sequence 0
    +            EVENTS_SEQSTARTED: [2]u32,
    +            ///  Description collection[0]: Emitted at end of every sequence 0, when last value from RAM has been applied to wave counter
    +            EVENTS_SEQEND: [2]u32,
    +            ///  Emitted at the end of each PWM period
    +            EVENTS_PWMPERIODEND: u32,
    +            ///  Concatenated sequences have been played the amount of times defined in LOOP.CNT
    +            EVENTS_LOOPSDONE: u32,
    +            reserved512: [224]u8,
    +            ///  Shortcut register
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                ///  Shortcut between SEQEND[0] event and STOP task
    +                SEQEND0_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between SEQEND[1] event and STOP task
    +                SEQEND1_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between LOOPSDONE event and SEQSTART[0] task
    +                LOOPSDONE_SEQSTART0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between LOOPSDONE event and SEQSTART[1] task
    +                LOOPSDONE_SEQSTART1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between LOOPSDONE event and STOP task
    +                LOOPSDONE_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u27,
    +            }),
    +            reserved768: [252]u8,
    +            ///  Enable or disable interrupt
    +            INTEN: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Enable or disable interrupt for STOPPED event
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for SEQSTARTED[0] event
    +                SEQSTARTED0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for SEQSTARTED[1] event
    +                SEQSTARTED1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for SEQEND[0] event
    +                SEQEND0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for SEQEND[1] event
    +                SEQEND1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for PWMPERIODEND event
    +                PWMPERIODEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for LOOPSDONE event
    +                LOOPSDONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u24,
    +            }),
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to Enable interrupt for STOPPED event
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for SEQSTARTED[0] event
    +                SEQSTARTED0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for SEQSTARTED[1] event
    +                SEQSTARTED1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for SEQEND[0] event
    +                SEQEND0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for SEQEND[1] event
    +                SEQEND1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for PWMPERIODEND event
    +                PWMPERIODEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for LOOPSDONE event
    +                LOOPSDONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u24,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to Disable interrupt for STOPPED event
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for SEQSTARTED[0] event
    +                SEQSTARTED0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for SEQSTARTED[1] event
    +                SEQSTARTED1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for SEQEND[0] event
    +                SEQEND0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for SEQEND[1] event
    +                SEQEND1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for PWMPERIODEND event
    +                PWMPERIODEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for LOOPSDONE event
    +                LOOPSDONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u24,
    +            }),
    +            reserved1280: [500]u8,
    +            ///  PWM module enable register
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable PWM module
    +                ENABLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Selects operating mode of the wave counter
    +            MODE: mmio.Mmio(packed struct(u32) {
    +                ///  Selects up or up and down as wave counter mode
    +                UPDOWN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Up counter - edge aligned PWM duty-cycle
    +                        Up = 0x0,
    +                        ///  Up and down counter - center aligned PWM duty cycle
    +                        UpAndDown = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Value up to which the pulse generator counter counts
    +            COUNTERTOP: mmio.Mmio(packed struct(u32) {
    +                ///  Value up to which the pulse generator counter counts. This register is ignored when DECODER.MODE=WaveForm and only values from RAM will be used.
    +                COUNTERTOP: u15,
    +                padding: u17,
    +            }),
    +            ///  Configuration for PWM_CLK
    +            PRESCALER: mmio.Mmio(packed struct(u32) {
    +                ///  Pre-scaler of PWM_CLK
    +                PRESCALER: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        ///  Divide by 1 (16MHz)
    +                        DIV_1 = 0x0,
    +                        ///  Divide by 2 ( 8MHz)
    +                        DIV_2 = 0x1,
    +                        ///  Divide by 4 ( 4MHz)
    +                        DIV_4 = 0x2,
    +                        ///  Divide by 8 ( 2MHz)
    +                        DIV_8 = 0x3,
    +                        ///  Divide by 16 ( 1MHz)
    +                        DIV_16 = 0x4,
    +                        ///  Divide by 32 ( 500kHz)
    +                        DIV_32 = 0x5,
    +                        ///  Divide by 64 ( 250kHz)
    +                        DIV_64 = 0x6,
    +                        ///  Divide by 128 ( 125kHz)
    +                        DIV_128 = 0x7,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            ///  Configuration of the decoder
    +            DECODER: mmio.Mmio(packed struct(u32) {
    +                ///  How a sequence is read from RAM and spread to the compare register
    +                LOAD: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  1st half word (16-bit) used in all PWM channels 0..3
    +                        Common = 0x0,
    +                        ///  1st half word (16-bit) used in channel 0..1; 2nd word in channel 2..3
    +                        Grouped = 0x1,
    +                        ///  1st half word (16-bit) in ch.0; 2nd in ch.1; ...; 4th in ch.3
    +                        Individual = 0x2,
    +                        ///  1st half word (16-bit) in ch.0; 2nd in ch.1; ...; 4th in COUNTERTOP
    +                        WaveForm = 0x3,
    +                    },
    +                },
    +                reserved8: u6,
    +                ///  Selects source for advancing the active sequence
    +                MODE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  SEQ[n].REFRESH is used to determine loading internal compare registers
    +                        RefreshCount = 0x0,
    +                        ///  NEXTSTEP task causes a new value to be loaded to internal compare registers
    +                        NextStep = 0x1,
    +                    },
    +                },
    +                padding: u23,
    +            }),
    +            ///  Amount of playback of a loop
    +            LOOP: mmio.Mmio(packed struct(u32) {
    +                ///  Amount of playback of pattern cycles
    +                CNT: packed union {
    +                    raw: u16,
    +                    value: enum(u16) {
    +                        ///  Looping disabled (stop at the end of the sequence)
    +                        Disabled = 0x0,
    +                        _,
    +                    },
    +                },
    +                padding: u16,
    +            }),
    +        };
    +
    +        ///  Quadrature Decoder
    +        pub const QDEC = extern struct {
    +            ///  Task starting the quadrature decoder
    +            TASKS_START: u32,
    +            ///  Task stopping the quadrature decoder
    +            TASKS_STOP: u32,
    +            ///  Read and clear ACC and ACCDBL
    +            TASKS_READCLRACC: u32,
    +            ///  Read and clear ACC
    +            TASKS_RDCLRACC: u32,
    +            ///  Read and clear ACCDBL
    +            TASKS_RDCLRDBL: u32,
    +            reserved256: [236]u8,
    +            ///  Event being generated for every new sample value written to the SAMPLE register
    +            EVENTS_SAMPLERDY: u32,
    +            ///  Non-null report ready
    +            EVENTS_REPORTRDY: u32,
    +            ///  ACC or ACCDBL register overflow
    +            EVENTS_ACCOF: u32,
    +            ///  Double displacement(s) detected
    +            EVENTS_DBLRDY: u32,
    +            ///  QDEC has been stopped
    +            EVENTS_STOPPED: u32,
    +            reserved512: [236]u8,
    +            ///  Shortcut register
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                ///  Shortcut between REPORTRDY event and READCLRACC task
    +                REPORTRDY_READCLRACC: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between SAMPLERDY event and STOP task
    +                SAMPLERDY_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between REPORTRDY event and RDCLRACC task
    +                REPORTRDY_RDCLRACC: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between REPORTRDY event and STOP task
    +                REPORTRDY_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between DBLRDY event and RDCLRDBL task
    +                DBLRDY_RDCLRDBL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between DBLRDY event and STOP task
    +                DBLRDY_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between SAMPLERDY event and READCLRACC task
    +                SAMPLERDY_READCLRACC: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u25,
    +            }),
    +            reserved772: [256]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Enable interrupt for SAMPLERDY event
    +                SAMPLERDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for REPORTRDY event
    +                REPORTRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for ACCOF event
    +                ACCOF: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for DBLRDY event
    +                DBLRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for STOPPED event
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u27,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Disable interrupt for SAMPLERDY event
    +                SAMPLERDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for REPORTRDY event
    +                REPORTRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for ACCOF event
    +                ACCOF: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for DBLRDY event
    +                DBLRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for STOPPED event
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u27,
    +            }),
    +            reserved1280: [500]u8,
    +            ///  Enable the quadrature decoder
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable the quadrature decoder
    +                ENABLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  LED output pin polarity
    +            LEDPOL: mmio.Mmio(packed struct(u32) {
    +                ///  LED output pin polarity
    +                LEDPOL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Led active on output pin low
    +                        ActiveLow = 0x0,
    +                        ///  Led active on output pin high
    +                        ActiveHigh = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Sample period
    +            SAMPLEPER: mmio.Mmio(packed struct(u32) {
    +                ///  Sample period. The SAMPLE register will be updated for every new sample
    +                SAMPLEPER: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  128 us
    +                        @"128us" = 0x0,
    +                        ///  256 us
    +                        @"256us" = 0x1,
    +                        ///  512 us
    +                        @"512us" = 0x2,
    +                        ///  1024 us
    +                        @"1024us" = 0x3,
    +                        ///  2048 us
    +                        @"2048us" = 0x4,
    +                        ///  4096 us
    +                        @"4096us" = 0x5,
    +                        ///  8192 us
    +                        @"8192us" = 0x6,
    +                        ///  16384 us
    +                        @"16384us" = 0x7,
    +                        ///  32768 us
    +                        @"32ms" = 0x8,
    +                        ///  65536 us
    +                        @"65ms" = 0x9,
    +                        ///  131072 us
    +                        @"131ms" = 0xa,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            ///  Motion sample value
    +            SAMPLE: mmio.Mmio(packed struct(u32) {
    +                ///  Last motion sample
    +                SAMPLE: u32,
    +            }),
    +            ///  Number of samples to be taken before REPORTRDY and DBLRDY events can be generated
    +            REPORTPER: mmio.Mmio(packed struct(u32) {
    +                ///  Specifies the number of samples to be accumulated in the ACC register before the REPORTRDY and DBLRDY events can be generated
    +                REPORTPER: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  10 samples / report
    +                        @"10Smpl" = 0x0,
    +                        ///  40 samples / report
    +                        @"40Smpl" = 0x1,
    +                        ///  80 samples / report
    +                        @"80Smpl" = 0x2,
    +                        ///  120 samples / report
    +                        @"120Smpl" = 0x3,
    +                        ///  160 samples / report
    +                        @"160Smpl" = 0x4,
    +                        ///  200 samples / report
    +                        @"200Smpl" = 0x5,
    +                        ///  240 samples / report
    +                        @"240Smpl" = 0x6,
    +                        ///  280 samples / report
    +                        @"280Smpl" = 0x7,
    +                        ///  1 sample / report
    +                        @"1Smpl" = 0x8,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            ///  Register accumulating the valid transitions
    +            ACC: mmio.Mmio(packed struct(u32) {
    +                ///  Register accumulating all valid samples (not double transition) read from the SAMPLE register
    +                ACC: u32,
    +            }),
    +            ///  Snapshot of the ACC register, updated by the READCLRACC or RDCLRACC task
    +            ACCREAD: mmio.Mmio(packed struct(u32) {
    +                ///  Snapshot of the ACC register.
    +                ACCREAD: u32,
    +            }),
    +            reserved1320: [12]u8,
    +            ///  Enable input debounce filters
    +            DBFEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable input debounce filters
    +                DBFEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Debounce input filters disabled
    +                        Disabled = 0x0,
    +                        ///  Debounce input filters enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1344: [20]u8,
    +            ///  Time period the LED is switched ON prior to sampling
    +            LEDPRE: mmio.Mmio(packed struct(u32) {
    +                ///  Period in us the LED is switched on prior to sampling
    +                LEDPRE: u9,
    +                padding: u23,
    +            }),
    +            ///  Register accumulating the number of detected double transitions
    +            ACCDBL: mmio.Mmio(packed struct(u32) {
    +                ///  Register accumulating the number of detected double or illegal transitions. ( SAMPLE = 2 ).
    +                ACCDBL: u4,
    +                padding: u28,
    +            }),
    +            ///  Snapshot of the ACCDBL, updated by the READCLRACC or RDCLRDBL task
    +            ACCDBLREAD: mmio.Mmio(packed struct(u32) {
    +                ///  Snapshot of the ACCDBL register. This field is updated when the READCLRACC or RDCLRDBL task is triggered.
    +                ACCDBLREAD: u4,
    +                padding: u28,
    +            }),
    +        };
    +
    +        ///  Comparator
    +        pub const COMP = extern struct {
    +            ///  Start comparator
    +            TASKS_START: u32,
    +            ///  Stop comparator
    +            TASKS_STOP: u32,
    +            ///  Sample comparator value
    +            TASKS_SAMPLE: u32,
    +            reserved256: [244]u8,
    +            ///  COMP is ready and output is valid
    +            EVENTS_READY: u32,
    +            ///  Downward crossing
    +            EVENTS_DOWN: u32,
    +            ///  Upward crossing
    +            EVENTS_UP: u32,
    +            ///  Downward or upward crossing
    +            EVENTS_CROSS: u32,
    +            reserved512: [240]u8,
    +            ///  Shortcut register
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                ///  Shortcut between READY event and SAMPLE task
    +                READY_SAMPLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between READY event and STOP task
    +                READY_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between DOWN event and STOP task
    +                DOWN_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between UP event and STOP task
    +                UP_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between CROSS event and STOP task
    +                CROSS_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u27,
    +            }),
    +            reserved768: [252]u8,
    +            ///  Enable or disable interrupt
    +            INTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable interrupt for READY event
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for DOWN event
    +                DOWN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for UP event
    +                UP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for CROSS event
    +                CROSS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Enable interrupt for READY event
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for DOWN event
    +                DOWN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for UP event
    +                UP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for CROSS event
    +                CROSS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Disable interrupt for READY event
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for DOWN event
    +                DOWN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for UP event
    +                UP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for CROSS event
    +                CROSS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1024: [244]u8,
    +            ///  Compare result
    +            RESULT: mmio.Mmio(packed struct(u32) {
    +                ///  Result of last compare. Decision point SAMPLE task.
    +                RESULT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Input voltage is below the threshold (VIN+ < VIN-)
    +                        Below = 0x0,
    +                        ///  Input voltage is above the threshold (VIN+ > VIN-)
    +                        Above = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1280: [252]u8,
    +            ///  COMP enable
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable COMP
    +                ENABLE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x2,
    +                        _,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            ///  Pin select
    +            PSEL: mmio.Mmio(packed struct(u32) {
    +                ///  Analog pin select
    +                PSEL: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        ///  AIN0 selected as analog input
    +                        AnalogInput0 = 0x0,
    +                        ///  AIN1 selected as analog input
    +                        AnalogInput1 = 0x1,
    +                        ///  AIN2 selected as analog input
    +                        AnalogInput2 = 0x2,
    +                        ///  AIN3 selected as analog input
    +                        AnalogInput3 = 0x3,
    +                        ///  AIN4 selected as analog input
    +                        AnalogInput4 = 0x4,
    +                        ///  AIN5 selected as analog input
    +                        AnalogInput5 = 0x5,
    +                        ///  AIN6 selected as analog input
    +                        AnalogInput6 = 0x6,
    +                        ///  AIN7 selected as analog input
    +                        AnalogInput7 = 0x7,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            ///  Reference source select for single-ended mode
    +            REFSEL: mmio.Mmio(packed struct(u32) {
    +                ///  Reference select
    +                REFSEL: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        ///  VREF = internal 1.2 V reference (VDD >= 1.7 V)
    +                        Int1V2 = 0x0,
    +                        ///  VREF = internal 1.8 V reference (VDD >= VREF + 0.2 V)
    +                        Int1V8 = 0x1,
    +                        ///  VREF = internal 2.4 V reference (VDD >= VREF + 0.2 V)
    +                        Int2V4 = 0x2,
    +                        ///  VREF = VDD
    +                        VDD = 0x4,
    +                        ///  VREF = AREF (VDD >= VREF >= AREFMIN)
    +                        ARef = 0x7,
    +                        _,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            ///  External reference select
    +            EXTREFSEL: mmio.Mmio(packed struct(u32) {
    +                ///  External analog reference select
    +                EXTREFSEL: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        ///  Use AIN0 as external analog reference
    +                        AnalogReference0 = 0x0,
    +                        ///  Use AIN1 as external analog reference
    +                        AnalogReference1 = 0x1,
    +                        ///  Use AIN2 as external analog reference
    +                        AnalogReference2 = 0x2,
    +                        ///  Use AIN3 as external analog reference
    +                        AnalogReference3 = 0x3,
    +                        ///  Use AIN4 as external analog reference
    +                        AnalogReference4 = 0x4,
    +                        ///  Use AIN5 as external analog reference
    +                        AnalogReference5 = 0x5,
    +                        ///  Use AIN6 as external analog reference
    +                        AnalogReference6 = 0x6,
    +                        ///  Use AIN7 as external analog reference
    +                        AnalogReference7 = 0x7,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            reserved1328: [32]u8,
    +            ///  Threshold configuration for hysteresis unit
    +            TH: mmio.Mmio(packed struct(u32) {
    +                ///  VDOWN = (THDOWN+1)/64*VREF
    +                THDOWN: u6,
    +                reserved8: u2,
    +                ///  VUP = (THUP+1)/64*VREF
    +                THUP: u6,
    +                padding: u18,
    +            }),
    +            ///  Mode configuration
    +            MODE: mmio.Mmio(packed struct(u32) {
    +                ///  Speed and power modes
    +                SP: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Low-power mode
    +                        Low = 0x0,
    +                        ///  Normal mode
    +                        Normal = 0x1,
    +                        ///  High-speed mode
    +                        High = 0x2,
    +                        _,
    +                    },
    +                },
    +                reserved8: u6,
    +                ///  Main operation modes
    +                MAIN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Single-ended mode
    +                        SE = 0x0,
    +                        ///  Differential mode
    +                        Diff = 0x1,
    +                    },
    +                },
    +                padding: u23,
    +            }),
    +            ///  Comparator hysteresis enable
    +            HYST: mmio.Mmio(packed struct(u32) {
    +                ///  Comparator hysteresis
    +                HYST: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Comparator hysteresis disabled
    +                        NoHyst = 0x0,
    +                        ///  Comparator hysteresis enabled
    +                        Hyst50mV = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Current source select on analog input
    +            ISOURCE: mmio.Mmio(packed struct(u32) {
    +                ///  Comparator hysteresis
    +                ISOURCE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Current source disabled
    +                        Off = 0x0,
    +                        ///  Current source enabled (+/- 2.5 uA)
    +                        Ien2mA5 = 0x1,
    +                        ///  Current source enabled (+/- 5 uA)
    +                        Ien5mA = 0x2,
    +                        ///  Current source enabled (+/- 10 uA)
    +                        Ien10mA = 0x3,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +        };
    +
    +        ///  Low Power Comparator
    +        pub const LPCOMP = extern struct {
    +            ///  Start comparator
    +            TASKS_START: u32,
    +            ///  Stop comparator
    +            TASKS_STOP: u32,
    +            ///  Sample comparator value
    +            TASKS_SAMPLE: u32,
    +            reserved256: [244]u8,
    +            ///  LPCOMP is ready and output is valid
    +            EVENTS_READY: u32,
    +            ///  Downward crossing
    +            EVENTS_DOWN: u32,
    +            ///  Upward crossing
    +            EVENTS_UP: u32,
    +            ///  Downward or upward crossing
    +            EVENTS_CROSS: u32,
    +            reserved512: [240]u8,
    +            ///  Shortcut register
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                ///  Shortcut between READY event and SAMPLE task
    +                READY_SAMPLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between READY event and STOP task
    +                READY_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between DOWN event and STOP task
    +                DOWN_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between UP event and STOP task
    +                UP_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between CROSS event and STOP task
    +                CROSS_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u27,
    +            }),
    +            reserved772: [256]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Enable interrupt for READY event
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for DOWN event
    +                DOWN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for UP event
    +                UP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Enable interrupt for CROSS event
    +                CROSS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to Disable interrupt for READY event
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for DOWN event
    +                DOWN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for UP event
    +                UP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to Disable interrupt for CROSS event
    +                CROSS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1024: [244]u8,
    +            ///  Compare result
    +            RESULT: mmio.Mmio(packed struct(u32) {
    +                ///  Result of last compare. Decision point SAMPLE task.
    +                RESULT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Input voltage is below the reference threshold (VIN+ < VIN-).
    +                        Below = 0x0,
    +                        ///  Input voltage is above the reference threshold (VIN+ > VIN-).
    +                        Above = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1280: [252]u8,
    +            ///  Enable LPCOMP
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable LPCOMP
    +                ENABLE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            ///  Input pin select
    +            PSEL: mmio.Mmio(packed struct(u32) {
    +                ///  Analog pin select
    +                PSEL: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        ///  AIN0 selected as analog input
    +                        AnalogInput0 = 0x0,
    +                        ///  AIN1 selected as analog input
    +                        AnalogInput1 = 0x1,
    +                        ///  AIN2 selected as analog input
    +                        AnalogInput2 = 0x2,
    +                        ///  AIN3 selected as analog input
    +                        AnalogInput3 = 0x3,
    +                        ///  AIN4 selected as analog input
    +                        AnalogInput4 = 0x4,
    +                        ///  AIN5 selected as analog input
    +                        AnalogInput5 = 0x5,
    +                        ///  AIN6 selected as analog input
    +                        AnalogInput6 = 0x6,
    +                        ///  AIN7 selected as analog input
    +                        AnalogInput7 = 0x7,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            ///  Reference select
    +            REFSEL: mmio.Mmio(packed struct(u32) {
    +                ///  Reference select
    +                REFSEL: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  VDD * 1/8 selected as reference
    +                        Ref1_8Vdd = 0x0,
    +                        ///  VDD * 2/8 selected as reference
    +                        Ref2_8Vdd = 0x1,
    +                        ///  VDD * 3/8 selected as reference
    +                        Ref3_8Vdd = 0x2,
    +                        ///  VDD * 4/8 selected as reference
    +                        Ref4_8Vdd = 0x3,
    +                        ///  VDD * 5/8 selected as reference
    +                        Ref5_8Vdd = 0x4,
    +                        ///  VDD * 6/8 selected as reference
    +                        Ref6_8Vdd = 0x5,
    +                        ///  VDD * 7/8 selected as reference
    +                        Ref7_8Vdd = 0x6,
    +                        ///  External analog reference selected
    +                        ARef = 0x7,
    +                        ///  VDD * 1/16 selected as reference
    +                        Ref1_16Vdd = 0x8,
    +                        ///  VDD * 3/16 selected as reference
    +                        Ref3_16Vdd = 0x9,
    +                        ///  VDD * 5/16 selected as reference
    +                        Ref5_16Vdd = 0xa,
    +                        ///  VDD * 7/16 selected as reference
    +                        Ref7_16Vdd = 0xb,
    +                        ///  VDD * 9/16 selected as reference
    +                        Ref9_16Vdd = 0xc,
    +                        ///  VDD * 11/16 selected as reference
    +                        Ref11_16Vdd = 0xd,
    +                        ///  VDD * 13/16 selected as reference
    +                        Ref13_16Vdd = 0xe,
    +                        ///  VDD * 15/16 selected as reference
    +                        Ref15_16Vdd = 0xf,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            ///  External reference select
    +            EXTREFSEL: mmio.Mmio(packed struct(u32) {
    +                ///  External analog reference select
    +                EXTREFSEL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Use AIN0 as external analog reference
    +                        AnalogReference0 = 0x0,
    +                        ///  Use AIN1 as external analog reference
    +                        AnalogReference1 = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1312: [16]u8,
    +            ///  Analog detect configuration
    +            ANADETECT: mmio.Mmio(packed struct(u32) {
    +                ///  Analog detect configuration
    +                ANADETECT: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Generate ANADETECT on crossing, both upward crossing and downward crossing
    +                        Cross = 0x0,
    +                        ///  Generate ANADETECT on upward crossing only
    +                        Up = 0x1,
    +                        ///  Generate ANADETECT on downward crossing only
    +                        Down = 0x2,
    +                        _,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            reserved1336: [20]u8,
    +            ///  Comparator hysteresis enable
    +            HYST: mmio.Mmio(packed struct(u32) {
    +                ///  Comparator hysteresis enable
    +                HYST: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Comparator hysteresis disabled
    +                        NoHyst = 0x0,
    +                        ///  Comparator hysteresis disabled (typ. 50 mV)
    +                        Hyst50mV = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +        };
    +
    +        ///  Software interrupt 0
    +        pub const SWI0 = extern struct {
    +            ///  Unused.
    +            UNUSED: u32,
    +        };
    +    };
    +};
    diff --git a/src/chips/nrf52840.json b/src/chips/nrf52840.json
    new file mode 100644
    index 000000000..a758e2107
    --- /dev/null
    +++ b/src/chips/nrf52840.json
    @@ -0,0 +1,44867 @@
    +{
    +  "version": "0.1.0",
    +  "types": {
    +    "peripherals": {
    +      "SCS": {
    +        "description": "System Control Space",
    +        "children": {
    +          "register_groups": {
    +            "SysTick": {
    +              "description": "System Tick Timer",
    +              "children": {
    +                "registers": {
    +                  "CTRL": {
    +                    "description": "SysTick Control and Status Register",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "ENABLE": {
    +                          "offset": 0,
    +                          "size": 1
    +                        },
    +                        "TICKINT": {
    +                          "offset": 1,
    +                          "size": 1
    +                        },
    +                        "CLKSOURCE": {
    +                          "offset": 2,
    +                          "size": 1
    +                        },
    +                        "COUNTFLAG": {
    +                          "offset": 16,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LOAD": {
    +                    "description": "SysTick Reload Value Register",
    +                    "offset": 4,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "RELOAD": {
    +                          "offset": 0,
    +                          "size": 24
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "VAL": {
    +                    "description": "SysTick Current Value Register",
    +                    "offset": 8,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "CURRENT": {
    +                          "offset": 0,
    +                          "size": 24
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CALIB": {
    +                    "description": "SysTick Calibration Register",
    +                    "offset": 12,
    +                    "size": 32,
    +                    "access": "read-only",
    +                    "children": {
    +                      "fields": {
    +                        "TENMS": {
    +                          "offset": 0,
    +                          "size": 24
    +                        },
    +                        "SKEW": {
    +                          "offset": 30,
    +                          "size": 1
    +                        },
    +                        "NOREF": {
    +                          "offset": 31,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "FICR": {
    +        "description": "Factory information configuration registers",
    +        "children": {
    +          "registers": {
    +            "CODEPAGESIZE": {
    +              "description": "Code memory page size",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CODEPAGESIZE": {
    +                    "description": "Code memory page size",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CODESIZE": {
    +              "description": "Code memory size",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CODESIZE": {
    +                    "description": "Code memory size in number of pages",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DEVICEID": {
    +              "description": "Description collection: Device identifier",
    +              "offset": 96,
    +              "size": 32,
    +              "count": 2,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DEVICEID": {
    +                    "description": "64 bit unique device identifier",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ER": {
    +              "description": "Description collection: Encryption root, word n",
    +              "offset": 128,
    +              "size": 32,
    +              "count": 4,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ER": {
    +                    "description": "Encryption root, word n",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IR": {
    +              "description": "Description collection: Identity Root, word n",
    +              "offset": 144,
    +              "size": 32,
    +              "count": 4,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IR": {
    +                    "description": "Identity Root, word n",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DEVICEADDRTYPE": {
    +              "description": "Device address type",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DEVICEADDRTYPE": {
    +                    "description": "Device address type",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Public": {
    +                            "description": "Public address",
    +                            "value": 0
    +                          },
    +                          "Random": {
    +                            "description": "Random address",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "DEVICEADDR": {
    +              "description": "Description collection: Device address n",
    +              "offset": 164,
    +              "size": 32,
    +              "count": 2,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DEVICEADDR": {
    +                    "description": "48 bit device address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PRODTEST": {
    +              "description": "Description collection: Production test signature n",
    +              "offset": 848,
    +              "size": 32,
    +              "count": 3,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "PRODTEST": {
    +                    "description": "Production test signature n",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "enum": {
    +                      "size": 32,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Done": {
    +                            "description": "Production tests done",
    +                            "value": 3141677471
    +                          },
    +                          "NotDone": {
    +                            "description": "Production tests not done",
    +                            "value": 4294967295
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "UICR": {
    +        "description": "User information configuration registers",
    +        "children": {
    +          "registers": {
    +            "NRFFW": {
    +              "description": "Description collection: Reserved for Nordic firmware design",
    +              "offset": 20,
    +              "size": 32,
    +              "count": 13,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NRFFW": {
    +                    "description": "Reserved for Nordic firmware design",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "NRFHW": {
    +              "description": "Description collection: Reserved for Nordic hardware design",
    +              "offset": 80,
    +              "size": 32,
    +              "count": 12,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NRFHW": {
    +                    "description": "Reserved for Nordic hardware design",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CUSTOMER": {
    +              "description": "Description collection: Reserved for customer",
    +              "offset": 128,
    +              "size": 32,
    +              "count": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CUSTOMER": {
    +                    "description": "Reserved for customer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PSELRESET": {
    +              "description": "Description collection: Mapping of the nRESET function (see POWER chapter for details)",
    +              "offset": 512,
    +              "size": 32,
    +              "count": 2,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PIN": {
    +                    "description": "GPIO pin number onto which nRESET is exposed",
    +                    "offset": 0,
    +                    "size": 5
    +                  },
    +                  "PORT": {
    +                    "description": "Port number onto which nRESET is exposed",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CONNECT": {
    +                    "description": "Connection",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disconnected": {
    +                            "description": "Disconnect",
    +                            "value": 1
    +                          },
    +                          "Connected": {
    +                            "description": "Connect",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "APPROTECT": {
    +              "description": "Access port protection",
    +              "offset": 520,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PALL": {
    +                    "description": "Enable or disable access port protection.",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "enum": {
    +                      "size": 8,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 255
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "NFCPINS": {
    +              "description": "Setting of pins dedicated to NFC functionality: NFC antenna or GPIO",
    +              "offset": 524,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PROTECT": {
    +                    "description": "Setting of pins dedicated to NFC functionality",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Operation as GPIO pins. Same protection as normal GPIO pins",
    +                            "value": 0
    +                          },
    +                          "NFC": {
    +                            "description": "Operation as NFC antenna pins. Configures the protection for NFC operation",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "DEBUGCTRL": {
    +              "description": "Processor debug control",
    +              "offset": 528,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPUNIDEN": {
    +                    "description": "Configure CPU non-intrusive debug features",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "enum": {
    +                      "size": 8,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Enabled": {
    +                            "description": "Enable CPU ITM and ETM functionality (default behavior)",
    +                            "value": 255
    +                          },
    +                          "Disabled": {
    +                            "description": "Disable CPU ITM and ETM functionality",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CPUFPBEN": {
    +                    "description": "Configure CPU flash patch and breakpoint (FPB) unit behavior",
    +                    "offset": 8,
    +                    "size": 8,
    +                    "enum": {
    +                      "size": 8,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Enabled": {
    +                            "description": "Enable CPU FPB unit (default behavior)",
    +                            "value": 255
    +                          },
    +                          "Disabled": {
    +                            "description": "Disable CPU FPB unit. Writes into the FPB registers will be ignored.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "REGOUT0": {
    +              "description": "GPIO reference voltage / external output supply voltage in high voltage mode",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VOUT": {
    +                    "description": "Output voltage from of REG0 regulator stage. The maximum output voltage from this stage is given as VDDH - VEXDIF.",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "1V8": {
    +                            "description": "1.8 V",
    +                            "value": 0
    +                          },
    +                          "2V1": {
    +                            "description": "2.1 V",
    +                            "value": 1
    +                          },
    +                          "2V4": {
    +                            "description": "2.4 V",
    +                            "value": 2
    +                          },
    +                          "2V7": {
    +                            "description": "2.7 V",
    +                            "value": 3
    +                          },
    +                          "3V0": {
    +                            "description": "3.0 V",
    +                            "value": 4
    +                          },
    +                          "3V3": {
    +                            "description": "3.3 V",
    +                            "value": 5
    +                          },
    +                          "DEFAULT": {
    +                            "description": "Default voltage: 1.8 V",
    +                            "value": 7
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "CLOCK": {
    +        "description": "Clock control",
    +        "children": {
    +          "registers": {
    +            "TASKS_HFCLKSTART": {
    +              "description": "Start HFXO crystal oscillator",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_HFCLKSTART": {
    +                    "description": "Start HFXO crystal oscillator",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_HFCLKSTOP": {
    +              "description": "Stop HFXO crystal oscillator",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_HFCLKSTOP": {
    +                    "description": "Stop HFXO crystal oscillator",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_LFCLKSTART": {
    +              "description": "Start LFCLK",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_LFCLKSTART": {
    +                    "description": "Start LFCLK",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_LFCLKSTOP": {
    +              "description": "Stop LFCLK",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_LFCLKSTOP": {
    +                    "description": "Stop LFCLK",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_CAL": {
    +              "description": "Start calibration of LFRC",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_CAL": {
    +                    "description": "Start calibration of LFRC",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_CTSTART": {
    +              "description": "Start calibration timer",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_CTSTART": {
    +                    "description": "Start calibration timer",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_CTSTOP": {
    +              "description": "Stop calibration timer",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_CTSTOP": {
    +                    "description": "Stop calibration timer",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_HFCLKSTARTED": {
    +              "description": "HFXO crystal oscillator started",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_HFCLKSTARTED": {
    +                    "description": "HFXO crystal oscillator started",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_LFCLKSTARTED": {
    +              "description": "LFCLK started",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_LFCLKSTARTED": {
    +                    "description": "LFCLK started",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_DONE": {
    +              "description": "Calibration of LFRC completed",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_DONE": {
    +                    "description": "Calibration of LFRC completed",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_CTTO": {
    +              "description": "Calibration timer timeout",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_CTTO": {
    +                    "description": "Calibration timer timeout",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_CTSTARTED": {
    +              "description": "Calibration timer has been started and is ready to process new tasks",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_CTSTARTED": {
    +                    "description": "Calibration timer has been started and is ready to process new tasks",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_CTSTOPPED": {
    +              "description": "Calibration timer has been stopped and is ready to process new tasks",
    +              "offset": 300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_CTSTOPPED": {
    +                    "description": "Calibration timer has been stopped and is ready to process new tasks",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HFCLKSTARTED": {
    +                    "description": "Write '1' to enable interrupt for event HFCLKSTARTED",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LFCLKSTARTED": {
    +                    "description": "Write '1' to enable interrupt for event LFCLKSTARTED",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DONE": {
    +                    "description": "Write '1' to enable interrupt for event DONE",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CTTO": {
    +                    "description": "Write '1' to enable interrupt for event CTTO",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CTSTARTED": {
    +                    "description": "Write '1' to enable interrupt for event CTSTARTED",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CTSTOPPED": {
    +                    "description": "Write '1' to enable interrupt for event CTSTOPPED",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HFCLKSTARTED": {
    +                    "description": "Write '1' to disable interrupt for event HFCLKSTARTED",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LFCLKSTARTED": {
    +                    "description": "Write '1' to disable interrupt for event LFCLKSTARTED",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DONE": {
    +                    "description": "Write '1' to disable interrupt for event DONE",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CTTO": {
    +                    "description": "Write '1' to disable interrupt for event CTTO",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CTSTARTED": {
    +                    "description": "Write '1' to disable interrupt for event CTSTARTED",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CTSTOPPED": {
    +                    "description": "Write '1' to disable interrupt for event CTSTOPPED",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "HFCLKRUN": {
    +              "description": "Status indicating that HFCLKSTART task has been triggered",
    +              "offset": 1032,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "STATUS": {
    +                    "description": "HFCLKSTART task triggered or not",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotTriggered": {
    +                            "description": "Task not triggered",
    +                            "value": 0
    +                          },
    +                          "Triggered": {
    +                            "description": "Task triggered",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "HFCLKSTAT": {
    +              "description": "HFCLK status",
    +              "offset": 1036,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SRC": {
    +                    "description": "Source of HFCLK",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RC": {
    +                            "description": "64 MHz internal oscillator (HFINT)",
    +                            "value": 0
    +                          },
    +                          "Xtal": {
    +                            "description": "64 MHz crystal oscillator (HFXO)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STATE": {
    +                    "description": "HFCLK state",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotRunning": {
    +                            "description": "HFCLK not running",
    +                            "value": 0
    +                          },
    +                          "Running": {
    +                            "description": "HFCLK running",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "LFCLKRUN": {
    +              "description": "Status indicating that LFCLKSTART task has been triggered",
    +              "offset": 1044,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "STATUS": {
    +                    "description": "LFCLKSTART task triggered or not",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotTriggered": {
    +                            "description": "Task not triggered",
    +                            "value": 0
    +                          },
    +                          "Triggered": {
    +                            "description": "Task triggered",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "LFCLKSTAT": {
    +              "description": "LFCLK status",
    +              "offset": 1048,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SRC": {
    +                    "description": "Source of LFCLK",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RC": {
    +                            "description": "32.768 kHz RC oscillator (LFRC)",
    +                            "value": 0
    +                          },
    +                          "Xtal": {
    +                            "description": "32.768 kHz crystal oscillator (LFXO)",
    +                            "value": 1
    +                          },
    +                          "Synth": {
    +                            "description": "32.768 kHz synthesized from HFCLK (LFSYNT)",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STATE": {
    +                    "description": "LFCLK state",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotRunning": {
    +                            "description": "LFCLK not running",
    +                            "value": 0
    +                          },
    +                          "Running": {
    +                            "description": "LFCLK running",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "LFCLKSRCCOPY": {
    +              "description": "Copy of LFCLKSRC register, set when LFCLKSTART task was triggered",
    +              "offset": 1052,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SRC": {
    +                    "description": "Clock source",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RC": {
    +                            "description": "32.768 kHz RC oscillator (LFRC)",
    +                            "value": 0
    +                          },
    +                          "Xtal": {
    +                            "description": "32.768 kHz crystal oscillator (LFXO)",
    +                            "value": 1
    +                          },
    +                          "Synth": {
    +                            "description": "32.768 kHz synthesized from HFCLK (LFSYNT)",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "LFCLKSRC": {
    +              "description": "Clock source for the LFCLK",
    +              "offset": 1304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SRC": {
    +                    "description": "Clock source",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RC": {
    +                            "description": "32.768 kHz RC oscillator (LFRC)",
    +                            "value": 0
    +                          },
    +                          "Xtal": {
    +                            "description": "32.768 kHz crystal oscillator (LFXO)",
    +                            "value": 1
    +                          },
    +                          "Synth": {
    +                            "description": "32.768 kHz synthesized from HFCLK (LFSYNT)",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "BYPASS": {
    +                    "description": "Enable or disable bypass of LFCLK crystal oscillator with external clock source",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable (use with Xtal or low-swing external source)",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable (use with rail-to-rail external source)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EXTERNAL": {
    +                    "description": "Enable or disable external source for LFCLK",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable external source (use with Xtal)",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable use of external source instead of Xtal (SRC needs to be set to Xtal)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "HFXODEBOUNCE": {
    +              "description": "HFXO debounce time. The HFXO is started by triggering the TASKS_HFCLKSTART task.",
    +              "offset": 1320,
    +              "size": 32,
    +              "reset_value": 16,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HFXODEBOUNCE": {
    +                    "description": "HFXO debounce time. Debounce time = HFXODEBOUNCE * 16 us.",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "enum": {
    +                      "size": 8,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Db256us": {
    +                            "description": "256 us debounce time. Recommended for TSX-3225, FA-20H and FA-128 crystals.",
    +                            "value": 16
    +                          },
    +                          "Db1024us": {
    +                            "description": "1024 us debounce time. Recommended for NX1612AA and NX1210AB crystals.",
    +                            "value": 64
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CTIV": {
    +              "description": "Calibration timer interval",
    +              "offset": 1336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTIV": {
    +                    "description": "Calibration timer interval in multiple of 0.25 seconds. Range: 0.25 seconds to 31.75 seconds.",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "TRACECONFIG": {
    +              "description": "Clocking options for the trace port debug interface",
    +              "offset": 1372,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TRACEPORTSPEED": {
    +                    "description": "Speed of trace port clock. Note that the TRACECLK pin will output this clock divided by two.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "32MHz": {
    +                            "description": "32 MHz trace port clock (TRACECLK = 16 MHz)",
    +                            "value": 0
    +                          },
    +                          "16MHz": {
    +                            "description": "16 MHz trace port clock (TRACECLK = 8 MHz)",
    +                            "value": 1
    +                          },
    +                          "8MHz": {
    +                            "description": "8 MHz trace port clock (TRACECLK = 4 MHz)",
    +                            "value": 2
    +                          },
    +                          "4MHz": {
    +                            "description": "4 MHz trace port clock (TRACECLK = 2 MHz)",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRACEMUX": {
    +                    "description": "Pin multiplexing of trace signals. See pin assignment chapter for more details.",
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO": {
    +                            "description": "No trace signals routed to pins. All pins can be used as regular GPIOs.",
    +                            "value": 0
    +                          },
    +                          "Serial": {
    +                            "description": "SWO trace signal routed to pin. Remaining pins can be used as regular GPIOs.",
    +                            "value": 1
    +                          },
    +                          "Parallel": {
    +                            "description": "All trace signals (TRACECLK and TRACEDATA[n]) routed to pins.",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "LFRCMODE": {
    +              "description": "LFRC mode configuration",
    +              "offset": 1460,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MODE": {
    +                    "description": "Set LFRC mode",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Normal": {
    +                            "description": "Normal mode",
    +                            "value": 0
    +                          },
    +                          "ULP": {
    +                            "description": "Ultra-low power mode (ULP)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STATUS": {
    +                    "description": "Active LFRC mode. This field is read only.",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Normal": {
    +                            "description": "Normal mode",
    +                            "value": 0
    +                          },
    +                          "ULP": {
    +                            "description": "Ultra-low power mode (ULP)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "POWER": {
    +        "description": "Power control",
    +        "children": {
    +          "registers": {
    +            "TASKS_CONSTLAT": {
    +              "description": "Enable Constant Latency mode",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_CONSTLAT": {
    +                    "description": "Enable Constant Latency mode",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_LOWPWR": {
    +              "description": "Enable Low-power mode (variable latency)",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_LOWPWR": {
    +                    "description": "Enable Low-power mode (variable latency)",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_POFWARN": {
    +              "description": "Power failure warning",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_POFWARN": {
    +                    "description": "Power failure warning",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_SLEEPENTER": {
    +              "description": "CPU entered WFI/WFE sleep",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_SLEEPENTER": {
    +                    "description": "CPU entered WFI/WFE sleep",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_SLEEPEXIT": {
    +              "description": "CPU exited WFI/WFE sleep",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_SLEEPEXIT": {
    +                    "description": "CPU exited WFI/WFE sleep",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_USBDETECTED": {
    +              "description": "Voltage supply detected on VBUS",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_USBDETECTED": {
    +                    "description": "Voltage supply detected on VBUS",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_USBREMOVED": {
    +              "description": "Voltage supply removed from VBUS",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_USBREMOVED": {
    +                    "description": "Voltage supply removed from VBUS",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_USBPWRRDY": {
    +              "description": "USB 3.3 V supply ready",
    +              "offset": 292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_USBPWRRDY": {
    +                    "description": "USB 3.3 V supply ready",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "POFWARN": {
    +                    "description": "Write '1' to enable interrupt for event POFWARN",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SLEEPENTER": {
    +                    "description": "Write '1' to enable interrupt for event SLEEPENTER",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SLEEPEXIT": {
    +                    "description": "Write '1' to enable interrupt for event SLEEPEXIT",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "USBDETECTED": {
    +                    "description": "Write '1' to enable interrupt for event USBDETECTED",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "USBREMOVED": {
    +                    "description": "Write '1' to enable interrupt for event USBREMOVED",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "USBPWRRDY": {
    +                    "description": "Write '1' to enable interrupt for event USBPWRRDY",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "POFWARN": {
    +                    "description": "Write '1' to disable interrupt for event POFWARN",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SLEEPENTER": {
    +                    "description": "Write '1' to disable interrupt for event SLEEPENTER",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SLEEPEXIT": {
    +                    "description": "Write '1' to disable interrupt for event SLEEPEXIT",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "USBDETECTED": {
    +                    "description": "Write '1' to disable interrupt for event USBDETECTED",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "USBREMOVED": {
    +                    "description": "Write '1' to disable interrupt for event USBREMOVED",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "USBPWRRDY": {
    +                    "description": "Write '1' to disable interrupt for event USBPWRRDY",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "RESETREAS": {
    +              "description": "Reset reason",
    +              "offset": 1024,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESETPIN": {
    +                    "description": "Reset from pin-reset detected",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDetected": {
    +                            "description": "Not detected",
    +                            "value": 0
    +                          },
    +                          "Detected": {
    +                            "description": "Detected",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DOG": {
    +                    "description": "Reset from watchdog detected",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDetected": {
    +                            "description": "Not detected",
    +                            "value": 0
    +                          },
    +                          "Detected": {
    +                            "description": "Detected",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SREQ": {
    +                    "description": "Reset from soft reset detected",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDetected": {
    +                            "description": "Not detected",
    +                            "value": 0
    +                          },
    +                          "Detected": {
    +                            "description": "Detected",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LOCKUP": {
    +                    "description": "Reset from CPU lock-up detected",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDetected": {
    +                            "description": "Not detected",
    +                            "value": 0
    +                          },
    +                          "Detected": {
    +                            "description": "Detected",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OFF": {
    +                    "description": "Reset due to wake up from System OFF mode when wakeup is triggered from DETECT signal from GPIO",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDetected": {
    +                            "description": "Not detected",
    +                            "value": 0
    +                          },
    +                          "Detected": {
    +                            "description": "Detected",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LPCOMP": {
    +                    "description": "Reset due to wake up from System OFF mode when wakeup is triggered from ANADETECT signal from LPCOMP",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDetected": {
    +                            "description": "Not detected",
    +                            "value": 0
    +                          },
    +                          "Detected": {
    +                            "description": "Detected",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DIF": {
    +                    "description": "Reset due to wake up from System OFF mode when wakeup is triggered from entering into debug interface mode",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDetected": {
    +                            "description": "Not detected",
    +                            "value": 0
    +                          },
    +                          "Detected": {
    +                            "description": "Detected",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "NFC": {
    +                    "description": "Reset due to wake up from System OFF mode by NFC field detect",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDetected": {
    +                            "description": "Not detected",
    +                            "value": 0
    +                          },
    +                          "Detected": {
    +                            "description": "Detected",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "VBUS": {
    +                    "description": "Reset due to wake up from System OFF mode by VBUS rising into valid range",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDetected": {
    +                            "description": "Not detected",
    +                            "value": 0
    +                          },
    +                          "Detected": {
    +                            "description": "Detected",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "RAMSTATUS": {
    +              "description": "Deprecated register - RAM status register",
    +              "offset": 1064,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RAMBLOCK0": {
    +                    "description": "RAM block 0 is on or off/powering up",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Off": {
    +                            "description": "Off",
    +                            "value": 0
    +                          },
    +                          "On": {
    +                            "description": "On",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RAMBLOCK1": {
    +                    "description": "RAM block 1 is on or off/powering up",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Off": {
    +                            "description": "Off",
    +                            "value": 0
    +                          },
    +                          "On": {
    +                            "description": "On",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RAMBLOCK2": {
    +                    "description": "RAM block 2 is on or off/powering up",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Off": {
    +                            "description": "Off",
    +                            "value": 0
    +                          },
    +                          "On": {
    +                            "description": "On",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RAMBLOCK3": {
    +                    "description": "RAM block 3 is on or off/powering up",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Off": {
    +                            "description": "Off",
    +                            "value": 0
    +                          },
    +                          "On": {
    +                            "description": "On",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "USBREGSTATUS": {
    +              "description": "USB supply status",
    +              "offset": 1080,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "VBUSDETECT": {
    +                    "description": "VBUS input detection status (USBDETECTED and USBREMOVED events are derived from this information)",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoVbus": {
    +                            "description": "VBUS voltage below valid threshold",
    +                            "value": 0
    +                          },
    +                          "VbusPresent": {
    +                            "description": "VBUS voltage above valid threshold",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTPUTRDY": {
    +                    "description": "USB supply output settling time elapsed",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotReady": {
    +                            "description": "USBREG output settling time not elapsed",
    +                            "value": 0
    +                          },
    +                          "Ready": {
    +                            "description": "USBREG output settling time elapsed (same information as USBPWRRDY event)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SYSTEMOFF": {
    +              "description": "System OFF register",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "SYSTEMOFF": {
    +                    "description": "Enable System OFF mode",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Enter": {
    +                            "description": "Enable System OFF mode",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "POFCON": {
    +              "description": "Power-fail comparator configuration",
    +              "offset": 1296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "POF": {
    +                    "description": "Enable or disable power failure warning",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "THRESHOLD": {
    +                    "description": "Power-fail comparator threshold setting. This setting applies both for normal voltage mode (supply connected to both VDD and VDDH) and high voltage mode (supply connected to VDDH only). Values 0-3 set threshold below 1.7 V and should not be used as brown out detection will be activated before power failure warning on such low voltages.",
    +                    "offset": 1,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "V17": {
    +                            "description": "Set threshold to 1.7 V",
    +                            "value": 4
    +                          },
    +                          "V18": {
    +                            "description": "Set threshold to 1.8 V",
    +                            "value": 5
    +                          },
    +                          "V19": {
    +                            "description": "Set threshold to 1.9 V",
    +                            "value": 6
    +                          },
    +                          "V20": {
    +                            "description": "Set threshold to 2.0 V",
    +                            "value": 7
    +                          },
    +                          "V21": {
    +                            "description": "Set threshold to 2.1 V",
    +                            "value": 8
    +                          },
    +                          "V22": {
    +                            "description": "Set threshold to 2.2 V",
    +                            "value": 9
    +                          },
    +                          "V23": {
    +                            "description": "Set threshold to 2.3 V",
    +                            "value": 10
    +                          },
    +                          "V24": {
    +                            "description": "Set threshold to 2.4 V",
    +                            "value": 11
    +                          },
    +                          "V25": {
    +                            "description": "Set threshold to 2.5 V",
    +                            "value": 12
    +                          },
    +                          "V26": {
    +                            "description": "Set threshold to 2.6 V",
    +                            "value": 13
    +                          },
    +                          "V27": {
    +                            "description": "Set threshold to 2.7 V",
    +                            "value": 14
    +                          },
    +                          "V28": {
    +                            "description": "Set threshold to 2.8 V",
    +                            "value": 15
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "THRESHOLDVDDH": {
    +                    "description": "Power-fail comparator threshold setting for high voltage mode (supply connected to VDDH only). This setting does not apply for normal voltage mode (supply connected to both VDD and VDDH).",
    +                    "offset": 8,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "V27": {
    +                            "description": "Set threshold to 2.7 V",
    +                            "value": 0
    +                          },
    +                          "V28": {
    +                            "description": "Set threshold to 2.8 V",
    +                            "value": 1
    +                          },
    +                          "V29": {
    +                            "description": "Set threshold to 2.9 V",
    +                            "value": 2
    +                          },
    +                          "V30": {
    +                            "description": "Set threshold to 3.0 V",
    +                            "value": 3
    +                          },
    +                          "V31": {
    +                            "description": "Set threshold to 3.1 V",
    +                            "value": 4
    +                          },
    +                          "V32": {
    +                            "description": "Set threshold to 3.2 V",
    +                            "value": 5
    +                          },
    +                          "V33": {
    +                            "description": "Set threshold to 3.3 V",
    +                            "value": 6
    +                          },
    +                          "V34": {
    +                            "description": "Set threshold to 3.4 V",
    +                            "value": 7
    +                          },
    +                          "V35": {
    +                            "description": "Set threshold to 3.5 V",
    +                            "value": 8
    +                          },
    +                          "V36": {
    +                            "description": "Set threshold to 3.6 V",
    +                            "value": 9
    +                          },
    +                          "V37": {
    +                            "description": "Set threshold to 3.7 V",
    +                            "value": 10
    +                          },
    +                          "V38": {
    +                            "description": "Set threshold to 3.8 V",
    +                            "value": 11
    +                          },
    +                          "V39": {
    +                            "description": "Set threshold to 3.9 V",
    +                            "value": 12
    +                          },
    +                          "V40": {
    +                            "description": "Set threshold to 4.0 V",
    +                            "value": 13
    +                          },
    +                          "V41": {
    +                            "description": "Set threshold to 4.1 V",
    +                            "value": 14
    +                          },
    +                          "V42": {
    +                            "description": "Set threshold to 4.2 V",
    +                            "value": 15
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPREGRET": {
    +              "description": "General purpose retention register",
    +              "offset": 1308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "GPREGRET": {
    +                    "description": "General purpose retention register",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "GPREGRET2": {
    +              "description": "General purpose retention register",
    +              "offset": 1312,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "GPREGRET": {
    +                    "description": "General purpose retention register",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "DCDCEN": {
    +              "description": "Enable DC/DC converter for REG1 stage",
    +              "offset": 1400,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DCDCEN": {
    +                    "description": "Enable DC/DC converter for REG1 stage.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "DCDCEN0": {
    +              "description": "Enable DC/DC converter for REG0 stage",
    +              "offset": 1408,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DCDCEN": {
    +                    "description": "Enable DC/DC converter for REG0 stage.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "MAINREGSTATUS": {
    +              "description": "Main supply status",
    +              "offset": 1600,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "MAINREGSTATUS": {
    +                    "description": "Main supply status",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Normal": {
    +                            "description": "Normal voltage mode. Voltage supplied on VDD.",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "High voltage mode. Voltage supplied on VDDH.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "P0": {
    +        "description": "GPIO Port 1",
    +        "children": {
    +          "registers": {
    +            "OUT": {
    +              "description": "Write GPIO port",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PIN0": {
    +                    "description": "Pin 0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN1": {
    +                    "description": "Pin 1",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN2": {
    +                    "description": "Pin 2",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN3": {
    +                    "description": "Pin 3",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN4": {
    +                    "description": "Pin 4",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN5": {
    +                    "description": "Pin 5",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN6": {
    +                    "description": "Pin 6",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN7": {
    +                    "description": "Pin 7",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN8": {
    +                    "description": "Pin 8",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN9": {
    +                    "description": "Pin 9",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN10": {
    +                    "description": "Pin 10",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN11": {
    +                    "description": "Pin 11",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN12": {
    +                    "description": "Pin 12",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN13": {
    +                    "description": "Pin 13",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN14": {
    +                    "description": "Pin 14",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN15": {
    +                    "description": "Pin 15",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN16": {
    +                    "description": "Pin 16",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN17": {
    +                    "description": "Pin 17",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN18": {
    +                    "description": "Pin 18",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN19": {
    +                    "description": "Pin 19",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN20": {
    +                    "description": "Pin 20",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN21": {
    +                    "description": "Pin 21",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN22": {
    +                    "description": "Pin 22",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN23": {
    +                    "description": "Pin 23",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN24": {
    +                    "description": "Pin 24",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN25": {
    +                    "description": "Pin 25",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN26": {
    +                    "description": "Pin 26",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN27": {
    +                    "description": "Pin 27",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN28": {
    +                    "description": "Pin 28",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN29": {
    +                    "description": "Pin 29",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN30": {
    +                    "description": "Pin 30",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN31": {
    +                    "description": "Pin 31",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "OUTSET": {
    +              "description": "Set individual bits in GPIO port",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PIN0": {
    +                    "description": "Pin 0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN1": {
    +                    "description": "Pin 1",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN2": {
    +                    "description": "Pin 2",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN3": {
    +                    "description": "Pin 3",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN4": {
    +                    "description": "Pin 4",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN5": {
    +                    "description": "Pin 5",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN6": {
    +                    "description": "Pin 6",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN7": {
    +                    "description": "Pin 7",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN8": {
    +                    "description": "Pin 8",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN9": {
    +                    "description": "Pin 9",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN10": {
    +                    "description": "Pin 10",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN11": {
    +                    "description": "Pin 11",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN12": {
    +                    "description": "Pin 12",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN13": {
    +                    "description": "Pin 13",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN14": {
    +                    "description": "Pin 14",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN15": {
    +                    "description": "Pin 15",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN16": {
    +                    "description": "Pin 16",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN17": {
    +                    "description": "Pin 17",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN18": {
    +                    "description": "Pin 18",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN19": {
    +                    "description": "Pin 19",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN20": {
    +                    "description": "Pin 20",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN21": {
    +                    "description": "Pin 21",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN22": {
    +                    "description": "Pin 22",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN23": {
    +                    "description": "Pin 23",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN24": {
    +                    "description": "Pin 24",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN25": {
    +                    "description": "Pin 25",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN26": {
    +                    "description": "Pin 26",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN27": {
    +                    "description": "Pin 27",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN28": {
    +                    "description": "Pin 28",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN29": {
    +                    "description": "Pin 29",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN30": {
    +                    "description": "Pin 30",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN31": {
    +                    "description": "Pin 31",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "OUTCLR": {
    +              "description": "Clear individual bits in GPIO port",
    +              "offset": 1292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PIN0": {
    +                    "description": "Pin 0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN1": {
    +                    "description": "Pin 1",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN2": {
    +                    "description": "Pin 2",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN3": {
    +                    "description": "Pin 3",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN4": {
    +                    "description": "Pin 4",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN5": {
    +                    "description": "Pin 5",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN6": {
    +                    "description": "Pin 6",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN7": {
    +                    "description": "Pin 7",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN8": {
    +                    "description": "Pin 8",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN9": {
    +                    "description": "Pin 9",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN10": {
    +                    "description": "Pin 10",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN11": {
    +                    "description": "Pin 11",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN12": {
    +                    "description": "Pin 12",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN13": {
    +                    "description": "Pin 13",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN14": {
    +                    "description": "Pin 14",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN15": {
    +                    "description": "Pin 15",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN16": {
    +                    "description": "Pin 16",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN17": {
    +                    "description": "Pin 17",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN18": {
    +                    "description": "Pin 18",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN19": {
    +                    "description": "Pin 19",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN20": {
    +                    "description": "Pin 20",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN21": {
    +                    "description": "Pin 21",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN22": {
    +                    "description": "Pin 22",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN23": {
    +                    "description": "Pin 23",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN24": {
    +                    "description": "Pin 24",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN25": {
    +                    "description": "Pin 25",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN26": {
    +                    "description": "Pin 26",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN27": {
    +                    "description": "Pin 27",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN28": {
    +                    "description": "Pin 28",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN29": {
    +                    "description": "Pin 29",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN30": {
    +                    "description": "Pin 30",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN31": {
    +                    "description": "Pin 31",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Read: pin driver is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Read: pin driver is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "IN": {
    +              "description": "Read GPIO port",
    +              "offset": 1296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "PIN0": {
    +                    "description": "Pin 0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN1": {
    +                    "description": "Pin 1",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN2": {
    +                    "description": "Pin 2",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN3": {
    +                    "description": "Pin 3",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN4": {
    +                    "description": "Pin 4",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN5": {
    +                    "description": "Pin 5",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN6": {
    +                    "description": "Pin 6",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN7": {
    +                    "description": "Pin 7",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN8": {
    +                    "description": "Pin 8",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN9": {
    +                    "description": "Pin 9",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN10": {
    +                    "description": "Pin 10",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN11": {
    +                    "description": "Pin 11",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN12": {
    +                    "description": "Pin 12",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN13": {
    +                    "description": "Pin 13",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN14": {
    +                    "description": "Pin 14",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN15": {
    +                    "description": "Pin 15",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN16": {
    +                    "description": "Pin 16",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN17": {
    +                    "description": "Pin 17",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN18": {
    +                    "description": "Pin 18",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN19": {
    +                    "description": "Pin 19",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN20": {
    +                    "description": "Pin 20",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN21": {
    +                    "description": "Pin 21",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN22": {
    +                    "description": "Pin 22",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN23": {
    +                    "description": "Pin 23",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN24": {
    +                    "description": "Pin 24",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN25": {
    +                    "description": "Pin 25",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN26": {
    +                    "description": "Pin 26",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN27": {
    +                    "description": "Pin 27",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN28": {
    +                    "description": "Pin 28",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN29": {
    +                    "description": "Pin 29",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN30": {
    +                    "description": "Pin 30",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN31": {
    +                    "description": "Pin 31",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Pin input is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Pin input is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "DIR": {
    +              "description": "Direction of GPIO pins",
    +              "offset": 1300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PIN0": {
    +                    "description": "Pin 0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN1": {
    +                    "description": "Pin 1",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN2": {
    +                    "description": "Pin 2",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN3": {
    +                    "description": "Pin 3",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN4": {
    +                    "description": "Pin 4",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN5": {
    +                    "description": "Pin 5",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN6": {
    +                    "description": "Pin 6",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN7": {
    +                    "description": "Pin 7",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN8": {
    +                    "description": "Pin 8",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN9": {
    +                    "description": "Pin 9",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN10": {
    +                    "description": "Pin 10",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN11": {
    +                    "description": "Pin 11",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN12": {
    +                    "description": "Pin 12",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN13": {
    +                    "description": "Pin 13",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN14": {
    +                    "description": "Pin 14",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN15": {
    +                    "description": "Pin 15",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN16": {
    +                    "description": "Pin 16",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN17": {
    +                    "description": "Pin 17",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN18": {
    +                    "description": "Pin 18",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN19": {
    +                    "description": "Pin 19",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN20": {
    +                    "description": "Pin 20",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN21": {
    +                    "description": "Pin 21",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN22": {
    +                    "description": "Pin 22",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN23": {
    +                    "description": "Pin 23",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN24": {
    +                    "description": "Pin 24",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN25": {
    +                    "description": "Pin 25",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN26": {
    +                    "description": "Pin 26",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN27": {
    +                    "description": "Pin 27",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN28": {
    +                    "description": "Pin 28",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN29": {
    +                    "description": "Pin 29",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN30": {
    +                    "description": "Pin 30",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN31": {
    +                    "description": "Pin 31",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "DIRSET": {
    +              "description": "DIR set register",
    +              "offset": 1304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PIN0": {
    +                    "description": "Set as output pin 0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN1": {
    +                    "description": "Set as output pin 1",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN2": {
    +                    "description": "Set as output pin 2",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN3": {
    +                    "description": "Set as output pin 3",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN4": {
    +                    "description": "Set as output pin 4",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN5": {
    +                    "description": "Set as output pin 5",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN6": {
    +                    "description": "Set as output pin 6",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN7": {
    +                    "description": "Set as output pin 7",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN8": {
    +                    "description": "Set as output pin 8",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN9": {
    +                    "description": "Set as output pin 9",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN10": {
    +                    "description": "Set as output pin 10",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN11": {
    +                    "description": "Set as output pin 11",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN12": {
    +                    "description": "Set as output pin 12",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN13": {
    +                    "description": "Set as output pin 13",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN14": {
    +                    "description": "Set as output pin 14",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN15": {
    +                    "description": "Set as output pin 15",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN16": {
    +                    "description": "Set as output pin 16",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN17": {
    +                    "description": "Set as output pin 17",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN18": {
    +                    "description": "Set as output pin 18",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN19": {
    +                    "description": "Set as output pin 19",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN20": {
    +                    "description": "Set as output pin 20",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN21": {
    +                    "description": "Set as output pin 21",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN22": {
    +                    "description": "Set as output pin 22",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN23": {
    +                    "description": "Set as output pin 23",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN24": {
    +                    "description": "Set as output pin 24",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN25": {
    +                    "description": "Set as output pin 25",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN26": {
    +                    "description": "Set as output pin 26",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN27": {
    +                    "description": "Set as output pin 27",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN28": {
    +                    "description": "Set as output pin 28",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN29": {
    +                    "description": "Set as output pin 29",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN30": {
    +                    "description": "Set as output pin 30",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN31": {
    +                    "description": "Set as output pin 31",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "DIRCLR": {
    +              "description": "DIR clear register",
    +              "offset": 1308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PIN0": {
    +                    "description": "Set as input pin 0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN1": {
    +                    "description": "Set as input pin 1",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN2": {
    +                    "description": "Set as input pin 2",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN3": {
    +                    "description": "Set as input pin 3",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN4": {
    +                    "description": "Set as input pin 4",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN5": {
    +                    "description": "Set as input pin 5",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN6": {
    +                    "description": "Set as input pin 6",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN7": {
    +                    "description": "Set as input pin 7",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN8": {
    +                    "description": "Set as input pin 8",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN9": {
    +                    "description": "Set as input pin 9",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN10": {
    +                    "description": "Set as input pin 10",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN11": {
    +                    "description": "Set as input pin 11",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN12": {
    +                    "description": "Set as input pin 12",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN13": {
    +                    "description": "Set as input pin 13",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN14": {
    +                    "description": "Set as input pin 14",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN15": {
    +                    "description": "Set as input pin 15",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN16": {
    +                    "description": "Set as input pin 16",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN17": {
    +                    "description": "Set as input pin 17",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN18": {
    +                    "description": "Set as input pin 18",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN19": {
    +                    "description": "Set as input pin 19",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN20": {
    +                    "description": "Set as input pin 20",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN21": {
    +                    "description": "Set as input pin 21",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN22": {
    +                    "description": "Set as input pin 22",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN23": {
    +                    "description": "Set as input pin 23",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN24": {
    +                    "description": "Set as input pin 24",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN25": {
    +                    "description": "Set as input pin 25",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN26": {
    +                    "description": "Set as input pin 26",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN27": {
    +                    "description": "Set as input pin 27",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN28": {
    +                    "description": "Set as input pin 28",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN29": {
    +                    "description": "Set as input pin 29",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN30": {
    +                    "description": "Set as input pin 30",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN31": {
    +                    "description": "Set as input pin 31",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Read: pin set as input",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Read: pin set as output",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "LATCH": {
    +              "description": "Latch register indicating what GPIO pins that have met the criteria set in the PIN_CNF[n].SENSE registers",
    +              "offset": 1312,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PIN0": {
    +                    "description": "Status on whether PIN0 has met criteria set in PIN_CNF0.SENSE register. Write '1' to clear.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN1": {
    +                    "description": "Status on whether PIN1 has met criteria set in PIN_CNF1.SENSE register. Write '1' to clear.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN2": {
    +                    "description": "Status on whether PIN2 has met criteria set in PIN_CNF2.SENSE register. Write '1' to clear.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN3": {
    +                    "description": "Status on whether PIN3 has met criteria set in PIN_CNF3.SENSE register. Write '1' to clear.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN4": {
    +                    "description": "Status on whether PIN4 has met criteria set in PIN_CNF4.SENSE register. Write '1' to clear.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN5": {
    +                    "description": "Status on whether PIN5 has met criteria set in PIN_CNF5.SENSE register. Write '1' to clear.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN6": {
    +                    "description": "Status on whether PIN6 has met criteria set in PIN_CNF6.SENSE register. Write '1' to clear.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN7": {
    +                    "description": "Status on whether PIN7 has met criteria set in PIN_CNF7.SENSE register. Write '1' to clear.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN8": {
    +                    "description": "Status on whether PIN8 has met criteria set in PIN_CNF8.SENSE register. Write '1' to clear.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN9": {
    +                    "description": "Status on whether PIN9 has met criteria set in PIN_CNF9.SENSE register. Write '1' to clear.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN10": {
    +                    "description": "Status on whether PIN10 has met criteria set in PIN_CNF10.SENSE register. Write '1' to clear.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN11": {
    +                    "description": "Status on whether PIN11 has met criteria set in PIN_CNF11.SENSE register. Write '1' to clear.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN12": {
    +                    "description": "Status on whether PIN12 has met criteria set in PIN_CNF12.SENSE register. Write '1' to clear.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN13": {
    +                    "description": "Status on whether PIN13 has met criteria set in PIN_CNF13.SENSE register. Write '1' to clear.",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN14": {
    +                    "description": "Status on whether PIN14 has met criteria set in PIN_CNF14.SENSE register. Write '1' to clear.",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN15": {
    +                    "description": "Status on whether PIN15 has met criteria set in PIN_CNF15.SENSE register. Write '1' to clear.",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN16": {
    +                    "description": "Status on whether PIN16 has met criteria set in PIN_CNF16.SENSE register. Write '1' to clear.",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN17": {
    +                    "description": "Status on whether PIN17 has met criteria set in PIN_CNF17.SENSE register. Write '1' to clear.",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN18": {
    +                    "description": "Status on whether PIN18 has met criteria set in PIN_CNF18.SENSE register. Write '1' to clear.",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN19": {
    +                    "description": "Status on whether PIN19 has met criteria set in PIN_CNF19.SENSE register. Write '1' to clear.",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN20": {
    +                    "description": "Status on whether PIN20 has met criteria set in PIN_CNF20.SENSE register. Write '1' to clear.",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN21": {
    +                    "description": "Status on whether PIN21 has met criteria set in PIN_CNF21.SENSE register. Write '1' to clear.",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN22": {
    +                    "description": "Status on whether PIN22 has met criteria set in PIN_CNF22.SENSE register. Write '1' to clear.",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN23": {
    +                    "description": "Status on whether PIN23 has met criteria set in PIN_CNF23.SENSE register. Write '1' to clear.",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN24": {
    +                    "description": "Status on whether PIN24 has met criteria set in PIN_CNF24.SENSE register. Write '1' to clear.",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN25": {
    +                    "description": "Status on whether PIN25 has met criteria set in PIN_CNF25.SENSE register. Write '1' to clear.",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN26": {
    +                    "description": "Status on whether PIN26 has met criteria set in PIN_CNF26.SENSE register. Write '1' to clear.",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN27": {
    +                    "description": "Status on whether PIN27 has met criteria set in PIN_CNF27.SENSE register. Write '1' to clear.",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN28": {
    +                    "description": "Status on whether PIN28 has met criteria set in PIN_CNF28.SENSE register. Write '1' to clear.",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN29": {
    +                    "description": "Status on whether PIN29 has met criteria set in PIN_CNF29.SENSE register. Write '1' to clear.",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN30": {
    +                    "description": "Status on whether PIN30 has met criteria set in PIN_CNF30.SENSE register. Write '1' to clear.",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PIN31": {
    +                    "description": "Status on whether PIN31 has met criteria set in PIN_CNF31.SENSE register. Write '1' to clear.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLatched": {
    +                            "description": "Criteria has not been met",
    +                            "value": 0
    +                          },
    +                          "Latched": {
    +                            "description": "Criteria has been met",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "DETECTMODE": {
    +              "description": "Select between default DETECT signal behaviour and LDETECT mode",
    +              "offset": 1316,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DETECTMODE": {
    +                    "description": "Select between default DETECT signal behaviour and LDETECT mode",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Default": {
    +                            "description": "DETECT directly connected to PIN DETECT signals",
    +                            "value": 0
    +                          },
    +                          "LDETECT": {
    +                            "description": "Use the latched LDETECT behaviour",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PIN_CNF": {
    +              "description": "Description collection: Configuration of GPIO pins",
    +              "offset": 1792,
    +              "size": 32,
    +              "count": 32,
    +              "reset_value": 2,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DIR": {
    +                    "description": "Pin direction. Same physical register as DIR register",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Input": {
    +                            "description": "Configure pin as an input pin",
    +                            "value": 0
    +                          },
    +                          "Output": {
    +                            "description": "Configure pin as an output pin",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INPUT": {
    +                    "description": "Connect or disconnect input buffer",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Connect": {
    +                            "description": "Connect input buffer",
    +                            "value": 0
    +                          },
    +                          "Disconnect": {
    +                            "description": "Disconnect input buffer",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PULL": {
    +                    "description": "Pull configuration",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "No pull",
    +                            "value": 0
    +                          },
    +                          "Pulldown": {
    +                            "description": "Pull down on pin",
    +                            "value": 1
    +                          },
    +                          "Pullup": {
    +                            "description": "Pull up on pin",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive configuration",
    +                    "offset": 8,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "S0S1": {
    +                            "description": "Standard '0', standard '1'",
    +                            "value": 0
    +                          },
    +                          "H0S1": {
    +                            "description": "High drive '0', standard '1'",
    +                            "value": 1
    +                          },
    +                          "S0H1": {
    +                            "description": "Standard '0', high drive '1'",
    +                            "value": 2
    +                          },
    +                          "H0H1": {
    +                            "description": "High drive '0', high 'drive '1''",
    +                            "value": 3
    +                          },
    +                          "D0S1": {
    +                            "description": "Disconnect '0' standard '1' (normally used for wired-or connections)",
    +                            "value": 4
    +                          },
    +                          "D0H1": {
    +                            "description": "Disconnect '0', high drive '1' (normally used for wired-or connections)",
    +                            "value": 5
    +                          },
    +                          "S0D1": {
    +                            "description": "Standard '0'. disconnect '1' (normally used for wired-and connections)",
    +                            "value": 6
    +                          },
    +                          "H0D1": {
    +                            "description": "High drive '0', disconnect '1' (normally used for wired-and connections)",
    +                            "value": 7
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SENSE": {
    +                    "description": "Pin sensing mechanism",
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Sense for high level",
    +                            "value": 2
    +                          },
    +                          "Low": {
    +                            "description": "Sense for low level",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "ACL": {
    +        "description": "Access control lists"
    +      },
    +      "RADIO": {
    +        "description": "2.4 GHz radio",
    +        "children": {
    +          "registers": {
    +            "TASKS_TXEN": {
    +              "description": "Enable RADIO in TX mode",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_TXEN": {
    +                    "description": "Enable RADIO in TX mode",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_RXEN": {
    +              "description": "Enable RADIO in RX mode",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_RXEN": {
    +                    "description": "Enable RADIO in RX mode",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_START": {
    +              "description": "Start RADIO",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_START": {
    +                    "description": "Start RADIO",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stop RADIO",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STOP": {
    +                    "description": "Stop RADIO",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_DISABLE": {
    +              "description": "Disable RADIO",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_DISABLE": {
    +                    "description": "Disable RADIO",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_RSSISTART": {
    +              "description": "Start the RSSI and take one single sample of the receive signal strength",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_RSSISTART": {
    +                    "description": "Start the RSSI and take one single sample of the receive signal strength",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_RSSISTOP": {
    +              "description": "Stop the RSSI measurement",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_RSSISTOP": {
    +                    "description": "Stop the RSSI measurement",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_BCSTART": {
    +              "description": "Start the bit counter",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_BCSTART": {
    +                    "description": "Start the bit counter",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_BCSTOP": {
    +              "description": "Stop the bit counter",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_BCSTOP": {
    +                    "description": "Stop the bit counter",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_EDSTART": {
    +              "description": "Start the energy detect measurement used in IEEE 802.15.4 mode",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_EDSTART": {
    +                    "description": "Start the energy detect measurement used in IEEE 802.15.4 mode",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_EDSTOP": {
    +              "description": "Stop the energy detect measurement",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_EDSTOP": {
    +                    "description": "Stop the energy detect measurement",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_CCASTART": {
    +              "description": "Start the clear channel assessment used in IEEE 802.15.4 mode",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_CCASTART": {
    +                    "description": "Start the clear channel assessment used in IEEE 802.15.4 mode",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_CCASTOP": {
    +              "description": "Stop the clear channel assessment",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_CCASTOP": {
    +                    "description": "Stop the clear channel assessment",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_READY": {
    +              "description": "RADIO has ramped up and is ready to be started",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_READY": {
    +                    "description": "RADIO has ramped up and is ready to be started",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_ADDRESS": {
    +              "description": "Address sent or received",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_ADDRESS": {
    +                    "description": "Address sent or received",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_PAYLOAD": {
    +              "description": "Packet payload sent or received",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_PAYLOAD": {
    +                    "description": "Packet payload sent or received",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_END": {
    +              "description": "Packet sent or received",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_END": {
    +                    "description": "Packet sent or received",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_DISABLED": {
    +              "description": "RADIO has been disabled",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_DISABLED": {
    +                    "description": "RADIO has been disabled",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_DEVMATCH": {
    +              "description": "A device address match occurred on the last received packet",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_DEVMATCH": {
    +                    "description": "A device address match occurred on the last received packet",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_DEVMISS": {
    +              "description": "No device address match occurred on the last received packet",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_DEVMISS": {
    +                    "description": "No device address match occurred on the last received packet",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_RSSIEND": {
    +              "description": "Sampling of receive signal strength complete",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_RSSIEND": {
    +                    "description": "Sampling of receive signal strength complete",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_BCMATCH": {
    +              "description": "Bit counter reached bit count value",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_BCMATCH": {
    +                    "description": "Bit counter reached bit count value",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_CRCOK": {
    +              "description": "Packet received with CRC ok",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_CRCOK": {
    +                    "description": "Packet received with CRC ok",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_CRCERROR": {
    +              "description": "Packet received with CRC error",
    +              "offset": 308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_CRCERROR": {
    +                    "description": "Packet received with CRC error",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_FRAMESTART": {
    +              "description": "IEEE 802.15.4 length field received",
    +              "offset": 312,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_FRAMESTART": {
    +                    "description": "IEEE 802.15.4 length field received",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_EDEND": {
    +              "description": "Sampling of energy detection complete. A new ED sample is ready for readout from the RADIO.EDSAMPLE register.",
    +              "offset": 316,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_EDEND": {
    +                    "description": "Sampling of energy detection complete. A new ED sample is ready for readout from the RADIO.EDSAMPLE register.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_EDSTOPPED": {
    +              "description": "The sampling of energy detection has stopped",
    +              "offset": 320,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_EDSTOPPED": {
    +                    "description": "The sampling of energy detection has stopped",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_CCAIDLE": {
    +              "description": "Wireless medium in idle - clear to send",
    +              "offset": 324,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_CCAIDLE": {
    +                    "description": "Wireless medium in idle - clear to send",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_CCABUSY": {
    +              "description": "Wireless medium busy - do not send",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_CCABUSY": {
    +                    "description": "Wireless medium busy - do not send",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_CCASTOPPED": {
    +              "description": "The CCA has stopped",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_CCASTOPPED": {
    +                    "description": "The CCA has stopped",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_RATEBOOST": {
    +              "description": "Ble_LR CI field received, receive mode is changed from Ble_LR125Kbit to Ble_LR500Kbit.",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_RATEBOOST": {
    +                    "description": "Ble_LR CI field received, receive mode is changed from Ble_LR125Kbit to Ble_LR500Kbit.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_TXREADY": {
    +              "description": "RADIO has ramped up and is ready to be started TX path",
    +              "offset": 340,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_TXREADY": {
    +                    "description": "RADIO has ramped up and is ready to be started TX path",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_RXREADY": {
    +              "description": "RADIO has ramped up and is ready to be started RX path",
    +              "offset": 344,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_RXREADY": {
    +                    "description": "RADIO has ramped up and is ready to be started RX path",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_MHRMATCH": {
    +              "description": "MAC header match found",
    +              "offset": 348,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_MHRMATCH": {
    +                    "description": "MAC header match found",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_SYNC": {
    +              "description": "Preamble indicator.",
    +              "offset": 360,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_SYNC": {
    +                    "description": "Preamble indicator.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_PHYEND": {
    +              "description": "Generated in Ble_LR125Kbit, Ble_LR500Kbit and Ieee802154_250Kbit modes when last bit is sent on air.",
    +              "offset": 364,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_PHYEND": {
    +                    "description": "Generated in Ble_LR125Kbit, Ble_LR500Kbit and Ieee802154_250Kbit modes when last bit is sent on air.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SHORTS": {
    +              "description": "Shortcuts between local events and tasks",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY_START": {
    +                    "description": "Shortcut between event READY and task START",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "END_DISABLE": {
    +                    "description": "Shortcut between event END and task DISABLE",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DISABLED_TXEN": {
    +                    "description": "Shortcut between event DISABLED and task TXEN",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DISABLED_RXEN": {
    +                    "description": "Shortcut between event DISABLED and task RXEN",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADDRESS_RSSISTART": {
    +                    "description": "Shortcut between event ADDRESS and task RSSISTART",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "END_START": {
    +                    "description": "Shortcut between event END and task START",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADDRESS_BCSTART": {
    +                    "description": "Shortcut between event ADDRESS and task BCSTART",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DISABLED_RSSISTOP": {
    +                    "description": "Shortcut between event DISABLED and task RSSISTOP",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXREADY_CCASTART": {
    +                    "description": "Shortcut between event RXREADY and task CCASTART",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CCAIDLE_TXEN": {
    +                    "description": "Shortcut between event CCAIDLE and task TXEN",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CCABUSY_DISABLE": {
    +                    "description": "Shortcut between event CCABUSY and task DISABLE",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FRAMESTART_BCSTART": {
    +                    "description": "Shortcut between event FRAMESTART and task BCSTART",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "READY_EDSTART": {
    +                    "description": "Shortcut between event READY and task EDSTART",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EDEND_DISABLE": {
    +                    "description": "Shortcut between event EDEND and task DISABLE",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CCAIDLE_STOP": {
    +                    "description": "Shortcut between event CCAIDLE and task STOP",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXREADY_START": {
    +                    "description": "Shortcut between event TXREADY and task START",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXREADY_START": {
    +                    "description": "Shortcut between event RXREADY and task START",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PHYEND_DISABLE": {
    +                    "description": "Shortcut between event PHYEND and task DISABLE",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PHYEND_START": {
    +                    "description": "Shortcut between event PHYEND and task START",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "Write '1' to enable interrupt for event READY",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADDRESS": {
    +                    "description": "Write '1' to enable interrupt for event ADDRESS",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PAYLOAD": {
    +                    "description": "Write '1' to enable interrupt for event PAYLOAD",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "END": {
    +                    "description": "Write '1' to enable interrupt for event END",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DISABLED": {
    +                    "description": "Write '1' to enable interrupt for event DISABLED",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DEVMATCH": {
    +                    "description": "Write '1' to enable interrupt for event DEVMATCH",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DEVMISS": {
    +                    "description": "Write '1' to enable interrupt for event DEVMISS",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RSSIEND": {
    +                    "description": "Write '1' to enable interrupt for event RSSIEND",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "BCMATCH": {
    +                    "description": "Write '1' to enable interrupt for event BCMATCH",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CRCOK": {
    +                    "description": "Write '1' to enable interrupt for event CRCOK",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CRCERROR": {
    +                    "description": "Write '1' to enable interrupt for event CRCERROR",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FRAMESTART": {
    +                    "description": "Write '1' to enable interrupt for event FRAMESTART",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EDEND": {
    +                    "description": "Write '1' to enable interrupt for event EDEND",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EDSTOPPED": {
    +                    "description": "Write '1' to enable interrupt for event EDSTOPPED",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CCAIDLE": {
    +                    "description": "Write '1' to enable interrupt for event CCAIDLE",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CCABUSY": {
    +                    "description": "Write '1' to enable interrupt for event CCABUSY",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CCASTOPPED": {
    +                    "description": "Write '1' to enable interrupt for event CCASTOPPED",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RATEBOOST": {
    +                    "description": "Write '1' to enable interrupt for event RATEBOOST",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXREADY": {
    +                    "description": "Write '1' to enable interrupt for event TXREADY",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXREADY": {
    +                    "description": "Write '1' to enable interrupt for event RXREADY",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MHRMATCH": {
    +                    "description": "Write '1' to enable interrupt for event MHRMATCH",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SYNC": {
    +                    "description": "Write '1' to enable interrupt for event SYNC",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PHYEND": {
    +                    "description": "Write '1' to enable interrupt for event PHYEND",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "Write '1' to disable interrupt for event READY",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADDRESS": {
    +                    "description": "Write '1' to disable interrupt for event ADDRESS",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PAYLOAD": {
    +                    "description": "Write '1' to disable interrupt for event PAYLOAD",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "END": {
    +                    "description": "Write '1' to disable interrupt for event END",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DISABLED": {
    +                    "description": "Write '1' to disable interrupt for event DISABLED",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DEVMATCH": {
    +                    "description": "Write '1' to disable interrupt for event DEVMATCH",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DEVMISS": {
    +                    "description": "Write '1' to disable interrupt for event DEVMISS",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RSSIEND": {
    +                    "description": "Write '1' to disable interrupt for event RSSIEND",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "BCMATCH": {
    +                    "description": "Write '1' to disable interrupt for event BCMATCH",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CRCOK": {
    +                    "description": "Write '1' to disable interrupt for event CRCOK",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CRCERROR": {
    +                    "description": "Write '1' to disable interrupt for event CRCERROR",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FRAMESTART": {
    +                    "description": "Write '1' to disable interrupt for event FRAMESTART",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EDEND": {
    +                    "description": "Write '1' to disable interrupt for event EDEND",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EDSTOPPED": {
    +                    "description": "Write '1' to disable interrupt for event EDSTOPPED",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CCAIDLE": {
    +                    "description": "Write '1' to disable interrupt for event CCAIDLE",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CCABUSY": {
    +                    "description": "Write '1' to disable interrupt for event CCABUSY",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CCASTOPPED": {
    +                    "description": "Write '1' to disable interrupt for event CCASTOPPED",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RATEBOOST": {
    +                    "description": "Write '1' to disable interrupt for event RATEBOOST",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXREADY": {
    +                    "description": "Write '1' to disable interrupt for event TXREADY",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXREADY": {
    +                    "description": "Write '1' to disable interrupt for event RXREADY",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MHRMATCH": {
    +                    "description": "Write '1' to disable interrupt for event MHRMATCH",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SYNC": {
    +                    "description": "Write '1' to disable interrupt for event SYNC",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PHYEND": {
    +                    "description": "Write '1' to disable interrupt for event PHYEND",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CRCSTATUS": {
    +              "description": "CRC status",
    +              "offset": 1024,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CRCSTATUS": {
    +                    "description": "CRC status of packet received",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CRCError": {
    +                            "description": "Packet received with CRC error",
    +                            "value": 0
    +                          },
    +                          "CRCOk": {
    +                            "description": "Packet received with CRC ok",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "RXMATCH": {
    +              "description": "Received address",
    +              "offset": 1032,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RXMATCH": {
    +                    "description": "Received address",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "RXCRC": {
    +              "description": "CRC field of previously received packet",
    +              "offset": 1036,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RXCRC": {
    +                    "description": "CRC field of previously received packet",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "DAI": {
    +              "description": "Device address match index",
    +              "offset": 1040,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DAI": {
    +                    "description": "Device address match index",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "PDUSTAT": {
    +              "description": "Payload status",
    +              "offset": 1044,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "PDUSTAT": {
    +                    "description": "Status on payload length vs. PCNF1.MAXLEN",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "LessThan": {
    +                            "description": "Payload less than PCNF1.MAXLEN",
    +                            "value": 0
    +                          },
    +                          "GreaterThan": {
    +                            "description": "Payload greater than PCNF1.MAXLEN",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CISTAT": {
    +                    "description": "Status on what rate packet is received with in Long Range",
    +                    "offset": 1,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "LR125kbit": {
    +                            "description": "Frame is received at 125kbps",
    +                            "value": 0
    +                          },
    +                          "LR500kbit": {
    +                            "description": "Frame is received at 500kbps",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PACKETPTR": {
    +              "description": "Packet pointer",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PACKETPTR": {
    +                    "description": "Packet pointer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "FREQUENCY": {
    +              "description": "Frequency",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 2,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FREQUENCY": {
    +                    "description": "Radio channel frequency",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "MAP": {
    +                    "description": "Channel map selection.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Default": {
    +                            "description": "Channel map between 2400 MHZ .. 2500 MHz",
    +                            "value": 0
    +                          },
    +                          "Low": {
    +                            "description": "Channel map between 2360 MHZ .. 2460 MHz",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TXPOWER": {
    +              "description": "Output power",
    +              "offset": 1292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXPOWER": {
    +                    "description": "RADIO output power",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "enum": {
    +                      "size": 8,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Pos8dBm": {
    +                            "description": "+8 dBm",
    +                            "value": 8
    +                          },
    +                          "Pos7dBm": {
    +                            "description": "+7 dBm",
    +                            "value": 7
    +                          },
    +                          "Pos6dBm": {
    +                            "description": "+6 dBm",
    +                            "value": 6
    +                          },
    +                          "Pos5dBm": {
    +                            "description": "+5 dBm",
    +                            "value": 5
    +                          },
    +                          "Pos4dBm": {
    +                            "description": "+4 dBm",
    +                            "value": 4
    +                          },
    +                          "Pos3dBm": {
    +                            "description": "+3 dBm",
    +                            "value": 3
    +                          },
    +                          "Pos2dBm": {
    +                            "description": "+2 dBm",
    +                            "value": 2
    +                          },
    +                          "0dBm": {
    +                            "description": "0 dBm",
    +                            "value": 0
    +                          },
    +                          "Neg4dBm": {
    +                            "description": "-4 dBm",
    +                            "value": 252
    +                          },
    +                          "Neg8dBm": {
    +                            "description": "-8 dBm",
    +                            "value": 248
    +                          },
    +                          "Neg12dBm": {
    +                            "description": "-12 dBm",
    +                            "value": 244
    +                          },
    +                          "Neg16dBm": {
    +                            "description": "-16 dBm",
    +                            "value": 240
    +                          },
    +                          "Neg20dBm": {
    +                            "description": "-20 dBm",
    +                            "value": 236
    +                          },
    +                          "Neg30dBm": {
    +                            "description": "Deprecated enumerator -  -40 dBm",
    +                            "value": 226
    +                          },
    +                          "Neg40dBm": {
    +                            "description": "-40 dBm",
    +                            "value": 216
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "MODE": {
    +              "description": "Data rate and modulation",
    +              "offset": 1296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MODE": {
    +                    "description": "Radio data rate and modulation setting. The radio supports frequency-shift keying (FSK) modulation.",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Nrf_1Mbit": {
    +                            "description": "1 Mbit/s Nordic proprietary radio mode",
    +                            "value": 0
    +                          },
    +                          "Nrf_2Mbit": {
    +                            "description": "2 Mbit/s Nordic proprietary radio mode",
    +                            "value": 1
    +                          },
    +                          "Ble_1Mbit": {
    +                            "description": "1 Mbit/s BLE",
    +                            "value": 3
    +                          },
    +                          "Ble_2Mbit": {
    +                            "description": "2 Mbit/s BLE",
    +                            "value": 4
    +                          },
    +                          "Ble_LR125Kbit": {
    +                            "description": "Long range 125 kbit/s TX, 125 kbit/s and 500 kbit/s RX",
    +                            "value": 5
    +                          },
    +                          "Ble_LR500Kbit": {
    +                            "description": "Long range 500 kbit/s TX, 125 kbit/s and 500 kbit/s RX",
    +                            "value": 6
    +                          },
    +                          "Ieee802154_250Kbit": {
    +                            "description": "IEEE 802.15.4-2006 250 kbit/s",
    +                            "value": 15
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PCNF0": {
    +              "description": "Packet configuration register 0",
    +              "offset": 1300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LFLEN": {
    +                    "description": "Length on air of LENGTH field in number of bits.",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "S0LEN": {
    +                    "description": "Length on air of S0 field in number of bytes.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "S1LEN": {
    +                    "description": "Length on air of S1 field in number of bits.",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "S1INCL": {
    +                    "description": "Include or exclude S1 field in RAM",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Automatic": {
    +                            "description": "Include S1 field in RAM only if S1LEN > 0",
    +                            "value": 0
    +                          },
    +                          "Include": {
    +                            "description": "Always include S1 field in RAM independent of S1LEN",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CILEN": {
    +                    "description": "Length of code indicator - long range",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "PLEN": {
    +                    "description": "Length of preamble on air. Decision point: TASKS_START task",
    +                    "offset": 24,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "8bit": {
    +                            "description": "8-bit preamble",
    +                            "value": 0
    +                          },
    +                          "16bit": {
    +                            "description": "16-bit preamble",
    +                            "value": 1
    +                          },
    +                          "32bitZero": {
    +                            "description": "32-bit zero preamble - used for IEEE 802.15.4",
    +                            "value": 2
    +                          },
    +                          "LongRange": {
    +                            "description": "Preamble - used for BLE long range",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CRCINC": {
    +                    "description": "Indicates if LENGTH field contains CRC or not",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Exclude": {
    +                            "description": "LENGTH does not contain CRC",
    +                            "value": 0
    +                          },
    +                          "Include": {
    +                            "description": "LENGTH includes CRC",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TERMLEN": {
    +                    "description": "Length of TERM field in Long Range operation",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "PCNF1": {
    +              "description": "Packet configuration register 1",
    +              "offset": 1304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MAXLEN": {
    +                    "description": "Maximum length of packet payload. If the packet payload is larger than MAXLEN, the radio will truncate the payload to MAXLEN.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "STATLEN": {
    +                    "description": "Static length in number of bytes",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "BALEN": {
    +                    "description": "Base address length in number of bytes",
    +                    "offset": 16,
    +                    "size": 3
    +                  },
    +                  "ENDIAN": {
    +                    "description": "On air endianness of packet, this applies to the S0, LENGTH, S1 and the PAYLOAD fields.",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Little": {
    +                            "description": "Least significant bit on air first",
    +                            "value": 0
    +                          },
    +                          "Big": {
    +                            "description": "Most significant bit on air first",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "WHITEEN": {
    +                    "description": "Enable or disable packet whitening",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "BASE0": {
    +              "description": "Base address 0",
    +              "offset": 1308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BASE0": {
    +                    "description": "Base address 0",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BASE1": {
    +              "description": "Base address 1",
    +              "offset": 1312,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BASE1": {
    +                    "description": "Base address 1",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PREFIX0": {
    +              "description": "Prefixes bytes for logical addresses 0-3",
    +              "offset": 1316,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AP0": {
    +                    "description": "Address prefix 0.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "AP1": {
    +                    "description": "Address prefix 1.",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "AP2": {
    +                    "description": "Address prefix 2.",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "AP3": {
    +                    "description": "Address prefix 3.",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "PREFIX1": {
    +              "description": "Prefixes bytes for logical addresses 4-7",
    +              "offset": 1320,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AP4": {
    +                    "description": "Address prefix 4.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "AP5": {
    +                    "description": "Address prefix 5.",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "AP6": {
    +                    "description": "Address prefix 6.",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "AP7": {
    +                    "description": "Address prefix 7.",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TXADDRESS": {
    +              "description": "Transmit address select",
    +              "offset": 1324,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXADDRESS": {
    +                    "description": "Transmit address select",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "RXADDRESSES": {
    +              "description": "Receive address select",
    +              "offset": 1328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADDR0": {
    +                    "description": "Enable or disable reception on logical address 0.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADDR1": {
    +                    "description": "Enable or disable reception on logical address 1.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADDR2": {
    +                    "description": "Enable or disable reception on logical address 2.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADDR3": {
    +                    "description": "Enable or disable reception on logical address 3.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADDR4": {
    +                    "description": "Enable or disable reception on logical address 4.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADDR5": {
    +                    "description": "Enable or disable reception on logical address 5.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADDR6": {
    +                    "description": "Enable or disable reception on logical address 6.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADDR7": {
    +                    "description": "Enable or disable reception on logical address 7.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CRCCNF": {
    +              "description": "CRC configuration",
    +              "offset": 1332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEN": {
    +                    "description": "CRC length in number of bytes.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "CRC length is zero and CRC calculation is disabled",
    +                            "value": 0
    +                          },
    +                          "One": {
    +                            "description": "CRC length is one byte and CRC calculation is enabled",
    +                            "value": 1
    +                          },
    +                          "Two": {
    +                            "description": "CRC length is two bytes and CRC calculation is enabled",
    +                            "value": 2
    +                          },
    +                          "Three": {
    +                            "description": "CRC length is three bytes and CRC calculation is enabled",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SKIPADDR": {
    +                    "description": "Include or exclude packet address field out of CRC calculation.",
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Include": {
    +                            "description": "CRC calculation includes address field",
    +                            "value": 0
    +                          },
    +                          "Skip": {
    +                            "description": "CRC calculation does not include address field. The CRC calculation will start at the first byte after the address.",
    +                            "value": 1
    +                          },
    +                          "Ieee802154": {
    +                            "description": "CRC calculation as per 802.15.4 standard. Starting at first byte after length field.",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CRCPOLY": {
    +              "description": "CRC polynomial",
    +              "offset": 1336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CRCPOLY": {
    +                    "description": "CRC polynomial",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "CRCINIT": {
    +              "description": "CRC initial value",
    +              "offset": 1340,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CRCINIT": {
    +                    "description": "CRC initial value",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "TIFS": {
    +              "description": "Interframe spacing in us",
    +              "offset": 1348,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIFS": {
    +                    "description": "Interframe spacing in us",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "RSSISAMPLE": {
    +              "description": "RSSI sample",
    +              "offset": 1352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RSSISAMPLE": {
    +                    "description": "RSSI sample",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "STATE": {
    +              "description": "Current radio state",
    +              "offset": 1360,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "STATE": {
    +                    "description": "Current radio state",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "RADIO is in the Disabled state",
    +                            "value": 0
    +                          },
    +                          "RxRu": {
    +                            "description": "RADIO is in the RXRU state",
    +                            "value": 1
    +                          },
    +                          "RxIdle": {
    +                            "description": "RADIO is in the RXIDLE state",
    +                            "value": 2
    +                          },
    +                          "Rx": {
    +                            "description": "RADIO is in the RX state",
    +                            "value": 3
    +                          },
    +                          "RxDisable": {
    +                            "description": "RADIO is in the RXDISABLED state",
    +                            "value": 4
    +                          },
    +                          "TxRu": {
    +                            "description": "RADIO is in the TXRU state",
    +                            "value": 9
    +                          },
    +                          "TxIdle": {
    +                            "description": "RADIO is in the TXIDLE state",
    +                            "value": 10
    +                          },
    +                          "Tx": {
    +                            "description": "RADIO is in the TX state",
    +                            "value": 11
    +                          },
    +                          "TxDisable": {
    +                            "description": "RADIO is in the TXDISABLED state",
    +                            "value": 12
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "DATAWHITEIV": {
    +              "description": "Data whitening initial value",
    +              "offset": 1364,
    +              "size": 32,
    +              "reset_value": 64,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATAWHITEIV": {
    +                    "description": "Data whitening initial value. Bit 6 is hard-wired to '1', writing '0' to it has no effect, and it will always be read back and used by the device as '1'.",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "BCC": {
    +              "description": "Bit counter compare",
    +              "offset": 1376,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BCC": {
    +                    "description": "Bit counter compare",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DAB": {
    +              "description": "Description collection: Device address base segment n",
    +              "offset": 1536,
    +              "size": 32,
    +              "count": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DAB": {
    +                    "description": "Device address base segment n",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DAP": {
    +              "description": "Description collection: Device address prefix n",
    +              "offset": 1568,
    +              "size": 32,
    +              "count": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DAP": {
    +                    "description": "Device address prefix n",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DACNF": {
    +              "description": "Device address match configuration",
    +              "offset": 1600,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENA0": {
    +                    "description": "Enable or disable device address matching using device address 0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENA1": {
    +                    "description": "Enable or disable device address matching using device address 1",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENA2": {
    +                    "description": "Enable or disable device address matching using device address 2",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENA3": {
    +                    "description": "Enable or disable device address matching using device address 3",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENA4": {
    +                    "description": "Enable or disable device address matching using device address 4",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENA5": {
    +                    "description": "Enable or disable device address matching using device address 5",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENA6": {
    +                    "description": "Enable or disable device address matching using device address 6",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENA7": {
    +                    "description": "Enable or disable device address matching using device address 7",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXADD0": {
    +                    "description": "TxAdd for device address 0",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TXADD1": {
    +                    "description": "TxAdd for device address 1",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TXADD2": {
    +                    "description": "TxAdd for device address 2",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TXADD3": {
    +                    "description": "TxAdd for device address 3",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TXADD4": {
    +                    "description": "TxAdd for device address 4",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TXADD5": {
    +                    "description": "TxAdd for device address 5",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TXADD6": {
    +                    "description": "TxAdd for device address 6",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TXADD7": {
    +                    "description": "TxAdd for device address 7",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MHRMATCHCONF": {
    +              "description": "Search pattern configuration",
    +              "offset": 1604,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MHRMATCHCONF": {
    +                    "description": "Search pattern configuration",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MHRMATCHMAS": {
    +              "description": "Pattern mask",
    +              "offset": 1608,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MHRMATCHMAS": {
    +                    "description": "Pattern mask",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MODECNF0": {
    +              "description": "Radio mode configuration register 0",
    +              "offset": 1616,
    +              "size": 32,
    +              "reset_value": 512,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RU": {
    +                    "description": "Radio ramp-up time",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Default": {
    +                            "description": "Default ramp-up time (tRXEN and tTXEN), compatible with firmware written for nRF51",
    +                            "value": 0
    +                          },
    +                          "Fast": {
    +                            "description": "Fast ramp-up (tRXEN,FAST and tTXEN,FAST), see electrical specification for more information",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DTX": {
    +                    "description": "Default TX value",
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "B1": {
    +                            "description": "Transmit '1'",
    +                            "value": 0
    +                          },
    +                          "B0": {
    +                            "description": "Transmit '0'",
    +                            "value": 1
    +                          },
    +                          "Center": {
    +                            "description": "Transmit center frequency",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SFD": {
    +              "description": "IEEE 802.15.4 start of frame delimiter",
    +              "offset": 1632,
    +              "size": 32,
    +              "reset_value": 167,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SFD": {
    +                    "description": "IEEE 802.15.4 start of frame delimiter",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "EDCNT": {
    +              "description": "IEEE 802.15.4 energy detect loop count",
    +              "offset": 1636,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EDCNT": {
    +                    "description": "IEEE 802.15.4 energy detect loop count",
    +                    "offset": 0,
    +                    "size": 21
    +                  }
    +                }
    +              }
    +            },
    +            "EDSAMPLE": {
    +              "description": "IEEE 802.15.4 energy detect level",
    +              "offset": 1640,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EDLVL": {
    +                    "description": "IEEE 802.15.4 energy detect level",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CCACTRL": {
    +              "description": "IEEE 802.15.4 clear channel assessment control",
    +              "offset": 1644,
    +              "size": 32,
    +              "reset_value": 86835200,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCAMODE": {
    +                    "description": "CCA mode of operation",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "EdMode": {
    +                            "description": "Energy above threshold",
    +                            "value": 0
    +                          },
    +                          "CarrierMode": {
    +                            "description": "Carrier seen",
    +                            "value": 1
    +                          },
    +                          "CarrierAndEdMode": {
    +                            "description": "Energy above threshold AND carrier seen",
    +                            "value": 2
    +                          },
    +                          "CarrierOrEdMode": {
    +                            "description": "Energy above threshold OR carrier seen",
    +                            "value": 3
    +                          },
    +                          "EdModeTest1": {
    +                            "description": "Energy above threshold test mode that will abort when first ED measurement over threshold is seen. No averaging.",
    +                            "value": 4
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CCAEDTHRES": {
    +                    "description": "CCA energy busy threshold. Used in all the CCA modes except CarrierMode.",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "CCACORRTHRES": {
    +                    "description": "CCA correlator busy threshold. Only relevant to CarrierMode, CarrierAndEdMode and CarrierOrEdMode.",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "CCACORRCNT": {
    +                    "description": "Limit for occurances above CCACORRTHRES. When not equal to zero the corrolator based signal detect is enabled.",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "POWER": {
    +              "description": "Peripheral power control",
    +              "offset": 4092,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "POWER": {
    +                    "description": "Peripheral power control. The peripheral and its registers will be reset to its initial state by switching the peripheral off and then back on again.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Peripheral is powered off",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Peripheral is powered on",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "UART0": {
    +        "description": "Universal Asynchronous Receiver/Transmitter",
    +        "children": {
    +          "registers": {
    +            "TASKS_STARTRX": {
    +              "description": "Start UART receiver",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STARTRX": {
    +                    "description": "Start UART receiver",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STOPRX": {
    +              "description": "Stop UART receiver",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STOPRX": {
    +                    "description": "Stop UART receiver",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STARTTX": {
    +              "description": "Start UART transmitter",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STARTTX": {
    +                    "description": "Start UART transmitter",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STOPTX": {
    +              "description": "Stop UART transmitter",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STOPTX": {
    +                    "description": "Stop UART transmitter",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_SUSPEND": {
    +              "description": "Suspend UART",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_SUSPEND": {
    +                    "description": "Suspend UART",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_CTS": {
    +              "description": "CTS is activated (set low). Clear To Send.",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_CTS": {
    +                    "description": "CTS is activated (set low). Clear To Send.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_NCTS": {
    +              "description": "CTS is deactivated (set high). Not Clear To Send.",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_NCTS": {
    +                    "description": "CTS is deactivated (set high). Not Clear To Send.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_RXDRDY": {
    +              "description": "Data received in RXD",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_RXDRDY": {
    +                    "description": "Data received in RXD",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_TXDRDY": {
    +              "description": "Data sent from TXD",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_TXDRDY": {
    +                    "description": "Data sent from TXD",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_ERROR": {
    +              "description": "Error detected",
    +              "offset": 292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_ERROR": {
    +                    "description": "Error detected",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_RXTO": {
    +              "description": "Receiver timeout",
    +              "offset": 324,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_RXTO": {
    +                    "description": "Receiver timeout",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SHORTS": {
    +              "description": "Shortcuts between local events and tasks",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTS_STARTRX": {
    +                    "description": "Shortcut between event CTS and task STARTRX",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "NCTS_STOPRX": {
    +                    "description": "Shortcut between event NCTS and task STOPRX",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTS": {
    +                    "description": "Write '1' to enable interrupt for event CTS",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "NCTS": {
    +                    "description": "Write '1' to enable interrupt for event NCTS",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXDRDY": {
    +                    "description": "Write '1' to enable interrupt for event RXDRDY",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXDRDY": {
    +                    "description": "Write '1' to enable interrupt for event TXDRDY",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Write '1' to enable interrupt for event ERROR",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXTO": {
    +                    "description": "Write '1' to enable interrupt for event RXTO",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTS": {
    +                    "description": "Write '1' to disable interrupt for event CTS",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "NCTS": {
    +                    "description": "Write '1' to disable interrupt for event NCTS",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXDRDY": {
    +                    "description": "Write '1' to disable interrupt for event RXDRDY",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXDRDY": {
    +                    "description": "Write '1' to disable interrupt for event TXDRDY",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Write '1' to disable interrupt for event ERROR",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXTO": {
    +                    "description": "Write '1' to disable interrupt for event RXTO",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ERRORSRC": {
    +              "description": "Error source",
    +              "offset": 1152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OVERRUN": {
    +                    "description": "Overrun error",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotPresent": {
    +                            "description": "Read: error not present",
    +                            "value": 0
    +                          },
    +                          "Present": {
    +                            "description": "Read: error present",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PARITY": {
    +                    "description": "Parity error",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotPresent": {
    +                            "description": "Read: error not present",
    +                            "value": 0
    +                          },
    +                          "Present": {
    +                            "description": "Read: error present",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FRAMING": {
    +                    "description": "Framing error occurred",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotPresent": {
    +                            "description": "Read: error not present",
    +                            "value": 0
    +                          },
    +                          "Present": {
    +                            "description": "Read: error present",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "BREAK": {
    +                    "description": "Break condition",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotPresent": {
    +                            "description": "Read: error not present",
    +                            "value": 0
    +                          },
    +                          "Present": {
    +                            "description": "Read: error present",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable UART",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable UART",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable UART",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable UART",
    +                            "value": 4
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "RXD": {
    +              "description": "RXD register",
    +              "offset": 1304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RXD": {
    +                    "description": "RX data received in previous transfers, double buffered",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TXD": {
    +              "description": "TXD register",
    +              "offset": 1308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TXD": {
    +                    "description": "TX data to be transferred",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "BAUDRATE": {
    +              "description": "Baud rate. Accuracy depends on the HFCLK source selected.",
    +              "offset": 1316,
    +              "size": 32,
    +              "reset_value": 67108864,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BAUDRATE": {
    +                    "description": "Baud rate",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "enum": {
    +                      "size": 32,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Baud1200": {
    +                            "description": "1200 baud (actual rate: 1205)",
    +                            "value": 323584
    +                          },
    +                          "Baud2400": {
    +                            "description": "2400 baud (actual rate: 2396)",
    +                            "value": 643072
    +                          },
    +                          "Baud4800": {
    +                            "description": "4800 baud (actual rate: 4808)",
    +                            "value": 1290240
    +                          },
    +                          "Baud9600": {
    +                            "description": "9600 baud (actual rate: 9598)",
    +                            "value": 2576384
    +                          },
    +                          "Baud14400": {
    +                            "description": "14400 baud (actual rate: 14414)",
    +                            "value": 3866624
    +                          },
    +                          "Baud19200": {
    +                            "description": "19200 baud (actual rate: 19208)",
    +                            "value": 5152768
    +                          },
    +                          "Baud28800": {
    +                            "description": "28800 baud (actual rate: 28829)",
    +                            "value": 7729152
    +                          },
    +                          "Baud31250": {
    +                            "description": "31250 baud",
    +                            "value": 8388608
    +                          },
    +                          "Baud38400": {
    +                            "description": "38400 baud (actual rate: 38462)",
    +                            "value": 10309632
    +                          },
    +                          "Baud56000": {
    +                            "description": "56000 baud (actual rate: 55944)",
    +                            "value": 15007744
    +                          },
    +                          "Baud57600": {
    +                            "description": "57600 baud (actual rate: 57762)",
    +                            "value": 15462400
    +                          },
    +                          "Baud76800": {
    +                            "description": "76800 baud (actual rate: 76923)",
    +                            "value": 20615168
    +                          },
    +                          "Baud115200": {
    +                            "description": "115200 baud (actual rate: 115942)",
    +                            "value": 30924800
    +                          },
    +                          "Baud230400": {
    +                            "description": "230400 baud (actual rate: 231884)",
    +                            "value": 61845504
    +                          },
    +                          "Baud250000": {
    +                            "description": "250000 baud",
    +                            "value": 67108864
    +                          },
    +                          "Baud460800": {
    +                            "description": "460800 baud (actual rate: 470588)",
    +                            "value": 123695104
    +                          },
    +                          "Baud921600": {
    +                            "description": "921600 baud (actual rate: 941176)",
    +                            "value": 247386112
    +                          },
    +                          "Baud1M": {
    +                            "description": "1Mega baud",
    +                            "value": 268435456
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CONFIG": {
    +              "description": "Configuration of parity and hardware flow control",
    +              "offset": 1388,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HWFC": {
    +                    "description": "Hardware flow control",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PARITY": {
    +                    "description": "Parity",
    +                    "offset": 1,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude parity bit",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include parity bit",
    +                            "value": 7
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STOP": {
    +                    "description": "Stop bits",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "One": {
    +                            "description": "One stop bit",
    +                            "value": 0
    +                          },
    +                          "Two": {
    +                            "description": "Two stop bits",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "UARTE0": {
    +        "description": "UART with EasyDMA 0",
    +        "children": {
    +          "registers": {
    +            "TASKS_STARTRX": {
    +              "description": "Start UART receiver",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STARTRX": {
    +                    "description": "Start UART receiver",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STOPRX": {
    +              "description": "Stop UART receiver",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STOPRX": {
    +                    "description": "Stop UART receiver",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STARTTX": {
    +              "description": "Start UART transmitter",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STARTTX": {
    +                    "description": "Start UART transmitter",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STOPTX": {
    +              "description": "Stop UART transmitter",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STOPTX": {
    +                    "description": "Stop UART transmitter",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_FLUSHRX": {
    +              "description": "Flush RX FIFO into RX buffer",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_FLUSHRX": {
    +                    "description": "Flush RX FIFO into RX buffer",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_CTS": {
    +              "description": "CTS is activated (set low). Clear To Send.",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_CTS": {
    +                    "description": "CTS is activated (set low). Clear To Send.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_NCTS": {
    +              "description": "CTS is deactivated (set high). Not Clear To Send.",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_NCTS": {
    +                    "description": "CTS is deactivated (set high). Not Clear To Send.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_RXDRDY": {
    +              "description": "Data received in RXD (but potentially not yet transferred to Data RAM)",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_RXDRDY": {
    +                    "description": "Data received in RXD (but potentially not yet transferred to Data RAM)",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_ENDRX": {
    +              "description": "Receive buffer is filled up",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_ENDRX": {
    +                    "description": "Receive buffer is filled up",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_TXDRDY": {
    +              "description": "Data sent from TXD",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_TXDRDY": {
    +                    "description": "Data sent from TXD",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_ENDTX": {
    +              "description": "Last TX byte transmitted",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_ENDTX": {
    +                    "description": "Last TX byte transmitted",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_ERROR": {
    +              "description": "Error detected",
    +              "offset": 292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_ERROR": {
    +                    "description": "Error detected",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_RXTO": {
    +              "description": "Receiver timeout",
    +              "offset": 324,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_RXTO": {
    +                    "description": "Receiver timeout",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_RXSTARTED": {
    +              "description": "UART receiver has started",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_RXSTARTED": {
    +                    "description": "UART receiver has started",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_TXSTARTED": {
    +              "description": "UART transmitter has started",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_TXSTARTED": {
    +                    "description": "UART transmitter has started",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_TXSTOPPED": {
    +              "description": "Transmitter stopped",
    +              "offset": 344,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_TXSTOPPED": {
    +                    "description": "Transmitter stopped",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SHORTS": {
    +              "description": "Shortcuts between local events and tasks",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENDRX_STARTRX": {
    +                    "description": "Shortcut between event ENDRX and task STARTRX",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDRX_STOPRX": {
    +                    "description": "Shortcut between event ENDRX and task STOPRX",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTEN": {
    +              "description": "Enable or disable interrupt",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTS": {
    +                    "description": "Enable or disable interrupt for event CTS",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "NCTS": {
    +                    "description": "Enable or disable interrupt for event NCTS",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXDRDY": {
    +                    "description": "Enable or disable interrupt for event RXDRDY",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDRX": {
    +                    "description": "Enable or disable interrupt for event ENDRX",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXDRDY": {
    +                    "description": "Enable or disable interrupt for event TXDRDY",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDTX": {
    +                    "description": "Enable or disable interrupt for event ENDTX",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Enable or disable interrupt for event ERROR",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXTO": {
    +                    "description": "Enable or disable interrupt for event RXTO",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXSTARTED": {
    +                    "description": "Enable or disable interrupt for event RXSTARTED",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXSTARTED": {
    +                    "description": "Enable or disable interrupt for event TXSTARTED",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXSTOPPED": {
    +                    "description": "Enable or disable interrupt for event TXSTOPPED",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTS": {
    +                    "description": "Write '1' to enable interrupt for event CTS",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "NCTS": {
    +                    "description": "Write '1' to enable interrupt for event NCTS",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXDRDY": {
    +                    "description": "Write '1' to enable interrupt for event RXDRDY",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDRX": {
    +                    "description": "Write '1' to enable interrupt for event ENDRX",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXDRDY": {
    +                    "description": "Write '1' to enable interrupt for event TXDRDY",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDTX": {
    +                    "description": "Write '1' to enable interrupt for event ENDTX",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Write '1' to enable interrupt for event ERROR",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXTO": {
    +                    "description": "Write '1' to enable interrupt for event RXTO",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXSTARTED": {
    +                    "description": "Write '1' to enable interrupt for event RXSTARTED",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXSTARTED": {
    +                    "description": "Write '1' to enable interrupt for event TXSTARTED",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXSTOPPED": {
    +                    "description": "Write '1' to enable interrupt for event TXSTOPPED",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTS": {
    +                    "description": "Write '1' to disable interrupt for event CTS",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "NCTS": {
    +                    "description": "Write '1' to disable interrupt for event NCTS",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXDRDY": {
    +                    "description": "Write '1' to disable interrupt for event RXDRDY",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDRX": {
    +                    "description": "Write '1' to disable interrupt for event ENDRX",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXDRDY": {
    +                    "description": "Write '1' to disable interrupt for event TXDRDY",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDTX": {
    +                    "description": "Write '1' to disable interrupt for event ENDTX",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Write '1' to disable interrupt for event ERROR",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXTO": {
    +                    "description": "Write '1' to disable interrupt for event RXTO",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXSTARTED": {
    +                    "description": "Write '1' to disable interrupt for event RXSTARTED",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXSTARTED": {
    +                    "description": "Write '1' to disable interrupt for event TXSTARTED",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXSTOPPED": {
    +                    "description": "Write '1' to disable interrupt for event TXSTOPPED",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ERRORSRC": {
    +              "description": "Error source Note : this register is read / write one to clear.",
    +              "offset": 1152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OVERRUN": {
    +                    "description": "Overrun error",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotPresent": {
    +                            "description": "Read: error not present",
    +                            "value": 0
    +                          },
    +                          "Present": {
    +                            "description": "Read: error present",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PARITY": {
    +                    "description": "Parity error",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotPresent": {
    +                            "description": "Read: error not present",
    +                            "value": 0
    +                          },
    +                          "Present": {
    +                            "description": "Read: error present",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FRAMING": {
    +                    "description": "Framing error occurred",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotPresent": {
    +                            "description": "Read: error not present",
    +                            "value": 0
    +                          },
    +                          "Present": {
    +                            "description": "Read: error present",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "BREAK": {
    +                    "description": "Break condition",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotPresent": {
    +                            "description": "Read: error not present",
    +                            "value": 0
    +                          },
    +                          "Present": {
    +                            "description": "Read: error present",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable UART",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable UARTE",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable UARTE",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable UARTE",
    +                            "value": 8
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "BAUDRATE": {
    +              "description": "Baud rate. Accuracy depends on the HFCLK source selected.",
    +              "offset": 1316,
    +              "size": 32,
    +              "reset_value": 67108864,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BAUDRATE": {
    +                    "description": "Baud rate",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "enum": {
    +                      "size": 32,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Baud1200": {
    +                            "description": "1200 baud (actual rate: 1205)",
    +                            "value": 323584
    +                          },
    +                          "Baud2400": {
    +                            "description": "2400 baud (actual rate: 2396)",
    +                            "value": 643072
    +                          },
    +                          "Baud4800": {
    +                            "description": "4800 baud (actual rate: 4808)",
    +                            "value": 1290240
    +                          },
    +                          "Baud9600": {
    +                            "description": "9600 baud (actual rate: 9598)",
    +                            "value": 2576384
    +                          },
    +                          "Baud14400": {
    +                            "description": "14400 baud (actual rate: 14401)",
    +                            "value": 3862528
    +                          },
    +                          "Baud19200": {
    +                            "description": "19200 baud (actual rate: 19208)",
    +                            "value": 5152768
    +                          },
    +                          "Baud28800": {
    +                            "description": "28800 baud (actual rate: 28777)",
    +                            "value": 7716864
    +                          },
    +                          "Baud31250": {
    +                            "description": "31250 baud",
    +                            "value": 8388608
    +                          },
    +                          "Baud38400": {
    +                            "description": "38400 baud (actual rate: 38369)",
    +                            "value": 10289152
    +                          },
    +                          "Baud56000": {
    +                            "description": "56000 baud (actual rate: 55944)",
    +                            "value": 15007744
    +                          },
    +                          "Baud57600": {
    +                            "description": "57600 baud (actual rate: 57554)",
    +                            "value": 15400960
    +                          },
    +                          "Baud76800": {
    +                            "description": "76800 baud (actual rate: 76923)",
    +                            "value": 20615168
    +                          },
    +                          "Baud115200": {
    +                            "description": "115200 baud (actual rate: 115108)",
    +                            "value": 30801920
    +                          },
    +                          "Baud230400": {
    +                            "description": "230400 baud (actual rate: 231884)",
    +                            "value": 61865984
    +                          },
    +                          "Baud250000": {
    +                            "description": "250000 baud",
    +                            "value": 67108864
    +                          },
    +                          "Baud460800": {
    +                            "description": "460800 baud (actual rate: 457143)",
    +                            "value": 121634816
    +                          },
    +                          "Baud921600": {
    +                            "description": "921600 baud (actual rate: 941176)",
    +                            "value": 251658240
    +                          },
    +                          "Baud1M": {
    +                            "description": "1Mega baud",
    +                            "value": 268435456
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CONFIG": {
    +              "description": "Configuration of parity and hardware flow control",
    +              "offset": 1388,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HWFC": {
    +                    "description": "Hardware flow control",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PARITY": {
    +                    "description": "Parity",
    +                    "offset": 1,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude parity bit",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include even parity bit",
    +                            "value": 7
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STOP": {
    +                    "description": "Stop bits",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "One": {
    +                            "description": "One stop bit",
    +                            "value": 0
    +                          },
    +                          "Two": {
    +                            "description": "Two stop bits",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SPI0": {
    +        "description": "Serial Peripheral Interface 0",
    +        "children": {
    +          "registers": {
    +            "EVENTS_READY": {
    +              "description": "TXD byte sent and RXD byte received",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_READY": {
    +                    "description": "TXD byte sent and RXD byte received",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "Write '1' to enable interrupt for event READY",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "Write '1' to disable interrupt for event READY",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable SPI",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable SPI",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable SPI",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable SPI",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "RXD": {
    +              "description": "RXD register",
    +              "offset": 1304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RXD": {
    +                    "description": "RX data received. Double buffered",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TXD": {
    +              "description": "TXD register",
    +              "offset": 1308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXD": {
    +                    "description": "TX data to send. Double buffered",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "FREQUENCY": {
    +              "description": "SPI frequency. Accuracy depends on the HFCLK source selected.",
    +              "offset": 1316,
    +              "size": 32,
    +              "reset_value": 67108864,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FREQUENCY": {
    +                    "description": "SPI master data rate",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "enum": {
    +                      "size": 32,
    +                      "children": {
    +                        "enum_fields": {
    +                          "K125": {
    +                            "description": "125 kbps",
    +                            "value": 33554432
    +                          },
    +                          "K250": {
    +                            "description": "250 kbps",
    +                            "value": 67108864
    +                          },
    +                          "K500": {
    +                            "description": "500 kbps",
    +                            "value": 134217728
    +                          },
    +                          "M1": {
    +                            "description": "1 Mbps",
    +                            "value": 268435456
    +                          },
    +                          "M2": {
    +                            "description": "2 Mbps",
    +                            "value": 536870912
    +                          },
    +                          "M4": {
    +                            "description": "4 Mbps",
    +                            "value": 1073741824
    +                          },
    +                          "M8": {
    +                            "description": "8 Mbps",
    +                            "value": 2147483648
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CONFIG": {
    +              "description": "Configuration register",
    +              "offset": 1364,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ORDER": {
    +                    "description": "Bit order",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "MsbFirst": {
    +                            "description": "Most significant bit shifted out first",
    +                            "value": 0
    +                          },
    +                          "LsbFirst": {
    +                            "description": "Least significant bit shifted out first",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CPHA": {
    +                    "description": "Serial clock (SCK) phase",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Leading": {
    +                            "description": "Sample on leading edge of clock, shift serial data on trailing edge",
    +                            "value": 0
    +                          },
    +                          "Trailing": {
    +                            "description": "Sample on trailing edge of clock, shift serial data on leading edge",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CPOL": {
    +                    "description": "Serial clock (SCK) polarity",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ActiveHigh": {
    +                            "description": "Active high",
    +                            "value": 0
    +                          },
    +                          "ActiveLow": {
    +                            "description": "Active low",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SPIM0": {
    +        "description": "Serial Peripheral Interface Master with EasyDMA 0",
    +        "children": {
    +          "registers": {
    +            "TASKS_START": {
    +              "description": "Start SPI transaction",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_START": {
    +                    "description": "Start SPI transaction",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stop SPI transaction",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STOP": {
    +                    "description": "Stop SPI transaction",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_SUSPEND": {
    +              "description": "Suspend SPI transaction",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_SUSPEND": {
    +                    "description": "Suspend SPI transaction",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_RESUME": {
    +              "description": "Resume SPI transaction",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_RESUME": {
    +                    "description": "Resume SPI transaction",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_STOPPED": {
    +              "description": "SPI transaction has stopped",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_STOPPED": {
    +                    "description": "SPI transaction has stopped",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_ENDRX": {
    +              "description": "End of RXD buffer reached",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_ENDRX": {
    +                    "description": "End of RXD buffer reached",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_END": {
    +              "description": "End of RXD buffer and TXD buffer reached",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_END": {
    +                    "description": "End of RXD buffer and TXD buffer reached",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_ENDTX": {
    +              "description": "End of TXD buffer reached",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_ENDTX": {
    +                    "description": "End of TXD buffer reached",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_STARTED": {
    +              "description": "Transaction started",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_STARTED": {
    +                    "description": "Transaction started",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SHORTS": {
    +              "description": "Shortcuts between local events and tasks",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "END_START": {
    +                    "description": "Shortcut between event END and task START",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STOPPED": {
    +                    "description": "Write '1' to enable interrupt for event STOPPED",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDRX": {
    +                    "description": "Write '1' to enable interrupt for event ENDRX",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "END": {
    +                    "description": "Write '1' to enable interrupt for event END",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDTX": {
    +                    "description": "Write '1' to enable interrupt for event ENDTX",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STARTED": {
    +                    "description": "Write '1' to enable interrupt for event STARTED",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STOPPED": {
    +                    "description": "Write '1' to disable interrupt for event STOPPED",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDRX": {
    +                    "description": "Write '1' to disable interrupt for event ENDRX",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "END": {
    +                    "description": "Write '1' to disable interrupt for event END",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDTX": {
    +                    "description": "Write '1' to disable interrupt for event ENDTX",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STARTED": {
    +                    "description": "Write '1' to disable interrupt for event STARTED",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "STALLSTAT": {
    +              "description": "Stall status for EasyDMA RAM accesses. The fields in this register is set to STALL by hardware whenever a stall occurres and can be cleared (set to NOSTALL) by the CPU.",
    +              "offset": 1024,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX": {
    +                    "description": "Stall status for EasyDMA RAM reads",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NOSTALL": {
    +                            "description": "No stall",
    +                            "value": 0
    +                          },
    +                          "STALL": {
    +                            "description": "A stall has occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RX": {
    +                    "description": "Stall status for EasyDMA RAM writes",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NOSTALL": {
    +                            "description": "No stall",
    +                            "value": 0
    +                          },
    +                          "STALL": {
    +                            "description": "A stall has occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable SPIM",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable SPIM",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable SPIM",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable SPIM",
    +                            "value": 7
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "FREQUENCY": {
    +              "description": "SPI frequency. Accuracy depends on the HFCLK source selected.",
    +              "offset": 1316,
    +              "size": 32,
    +              "reset_value": 67108864,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FREQUENCY": {
    +                    "description": "SPI master data rate",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "enum": {
    +                      "size": 32,
    +                      "children": {
    +                        "enum_fields": {
    +                          "K125": {
    +                            "description": "125 kbps",
    +                            "value": 33554432
    +                          },
    +                          "K250": {
    +                            "description": "250 kbps",
    +                            "value": 67108864
    +                          },
    +                          "K500": {
    +                            "description": "500 kbps",
    +                            "value": 134217728
    +                          },
    +                          "M1": {
    +                            "description": "1 Mbps",
    +                            "value": 268435456
    +                          },
    +                          "M2": {
    +                            "description": "2 Mbps",
    +                            "value": 536870912
    +                          },
    +                          "M4": {
    +                            "description": "4 Mbps",
    +                            "value": 1073741824
    +                          },
    +                          "M8": {
    +                            "description": "8 Mbps",
    +                            "value": 2147483648
    +                          },
    +                          "M16": {
    +                            "description": "16 Mbps",
    +                            "value": 167772160
    +                          },
    +                          "M32": {
    +                            "description": "32 Mbps",
    +                            "value": 335544320
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CONFIG": {
    +              "description": "Configuration register",
    +              "offset": 1364,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ORDER": {
    +                    "description": "Bit order",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "MsbFirst": {
    +                            "description": "Most significant bit shifted out first",
    +                            "value": 0
    +                          },
    +                          "LsbFirst": {
    +                            "description": "Least significant bit shifted out first",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CPHA": {
    +                    "description": "Serial clock (SCK) phase",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Leading": {
    +                            "description": "Sample on leading edge of clock, shift serial data on trailing edge",
    +                            "value": 0
    +                          },
    +                          "Trailing": {
    +                            "description": "Sample on trailing edge of clock, shift serial data on leading edge",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CPOL": {
    +                    "description": "Serial clock (SCK) polarity",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ActiveHigh": {
    +                            "description": "Active high",
    +                            "value": 0
    +                          },
    +                          "ActiveLow": {
    +                            "description": "Active low",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CSNPOL": {
    +              "description": "Polarity of CSN output",
    +              "offset": 1384,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSNPOL": {
    +                    "description": "Polarity of CSN output",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "LOW": {
    +                            "description": "Active low (idle state high)",
    +                            "value": 0
    +                          },
    +                          "HIGH": {
    +                            "description": "Active high (idle state low)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PSELDCX": {
    +              "description": "Pin select for DCX signal",
    +              "offset": 1388,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PIN": {
    +                    "description": "Pin number",
    +                    "offset": 0,
    +                    "size": 5
    +                  },
    +                  "PORT": {
    +                    "description": "Port number",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CONNECT": {
    +                    "description": "Connection",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disconnected": {
    +                            "description": "Disconnect",
    +                            "value": 1
    +                          },
    +                          "Connected": {
    +                            "description": "Connect",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "DCXCNT": {
    +              "description": "DCX configuration",
    +              "offset": 1392,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DCXCNT": {
    +                    "description": "This register specifies the number of command bytes preceding the data bytes. The PSEL.DCX line will be low during transmission of command bytes and high during transmission of data bytes. Value 0xF indicates that all bytes are command bytes.",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "ORC": {
    +              "description": "Byte transmitted after TXD.MAXCNT bytes have been transmitted in the case when RXD.MAXCNT is greater than TXD.MAXCNT",
    +              "offset": 1472,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ORC": {
    +                    "description": "Byte transmitted after TXD.MAXCNT bytes have been transmitted in the case when RXD.MAXCNT is greater than TXD.MAXCNT.",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SPIS0": {
    +        "description": "SPI Slave 0",
    +        "children": {
    +          "registers": {
    +            "TASKS_ACQUIRE": {
    +              "description": "Acquire SPI semaphore",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_ACQUIRE": {
    +                    "description": "Acquire SPI semaphore",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_RELEASE": {
    +              "description": "Release SPI semaphore, enabling the SPI slave to acquire it",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_RELEASE": {
    +                    "description": "Release SPI semaphore, enabling the SPI slave to acquire it",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_END": {
    +              "description": "Granted transaction completed",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_END": {
    +                    "description": "Granted transaction completed",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_ENDRX": {
    +              "description": "End of RXD buffer reached",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_ENDRX": {
    +                    "description": "End of RXD buffer reached",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_ACQUIRED": {
    +              "description": "Semaphore acquired",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_ACQUIRED": {
    +                    "description": "Semaphore acquired",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SHORTS": {
    +              "description": "Shortcuts between local events and tasks",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "END_ACQUIRE": {
    +                    "description": "Shortcut between event END and task ACQUIRE",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "END": {
    +                    "description": "Write '1' to enable interrupt for event END",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDRX": {
    +                    "description": "Write '1' to enable interrupt for event ENDRX",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ACQUIRED": {
    +                    "description": "Write '1' to enable interrupt for event ACQUIRED",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "END": {
    +                    "description": "Write '1' to disable interrupt for event END",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDRX": {
    +                    "description": "Write '1' to disable interrupt for event ENDRX",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ACQUIRED": {
    +                    "description": "Write '1' to disable interrupt for event ACQUIRED",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SEMSTAT": {
    +              "description": "Semaphore status register",
    +              "offset": 1024,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SEMSTAT": {
    +                    "description": "Semaphore status",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Free": {
    +                            "description": "Semaphore is free",
    +                            "value": 0
    +                          },
    +                          "CPU": {
    +                            "description": "Semaphore is assigned to CPU",
    +                            "value": 1
    +                          },
    +                          "SPIS": {
    +                            "description": "Semaphore is assigned to SPI slave",
    +                            "value": 2
    +                          },
    +                          "CPUPending": {
    +                            "description": "Semaphore is assigned to SPI but a handover to the CPU is pending",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "STATUS": {
    +              "description": "Status from last transaction",
    +              "offset": 1088,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OVERREAD": {
    +                    "description": "TX buffer over-read detected, and prevented",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotPresent": {
    +                            "description": "Read: error not present",
    +                            "value": 0
    +                          },
    +                          "Present": {
    +                            "description": "Read: error present",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OVERFLOW": {
    +                    "description": "RX buffer overflow detected, and prevented",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotPresent": {
    +                            "description": "Read: error not present",
    +                            "value": 0
    +                          },
    +                          "Present": {
    +                            "description": "Read: error present",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable SPI slave",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable SPI slave",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable SPI slave",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable SPI slave",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CONFIG": {
    +              "description": "Configuration register",
    +              "offset": 1364,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ORDER": {
    +                    "description": "Bit order",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "MsbFirst": {
    +                            "description": "Most significant bit shifted out first",
    +                            "value": 0
    +                          },
    +                          "LsbFirst": {
    +                            "description": "Least significant bit shifted out first",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CPHA": {
    +                    "description": "Serial clock (SCK) phase",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Leading": {
    +                            "description": "Sample on leading edge of clock, shift serial data on trailing edge",
    +                            "value": 0
    +                          },
    +                          "Trailing": {
    +                            "description": "Sample on trailing edge of clock, shift serial data on leading edge",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CPOL": {
    +                    "description": "Serial clock (SCK) polarity",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ActiveHigh": {
    +                            "description": "Active high",
    +                            "value": 0
    +                          },
    +                          "ActiveLow": {
    +                            "description": "Active low",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "DEF": {
    +              "description": "Default character. Character clocked out in case of an ignored transaction.",
    +              "offset": 1372,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DEF": {
    +                    "description": "Default character. Character clocked out in case of an ignored transaction.",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "ORC": {
    +              "description": "Over-read character",
    +              "offset": 1472,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ORC": {
    +                    "description": "Over-read character. Character clocked out after an over-read of the transmit buffer.",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TWI0": {
    +        "description": "I2C compatible Two-Wire Interface 0",
    +        "children": {
    +          "registers": {
    +            "TASKS_STARTRX": {
    +              "description": "Start TWI receive sequence",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STARTRX": {
    +                    "description": "Start TWI receive sequence",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STARTTX": {
    +              "description": "Start TWI transmit sequence",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STARTTX": {
    +                    "description": "Start TWI transmit sequence",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stop TWI transaction",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STOP": {
    +                    "description": "Stop TWI transaction",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_SUSPEND": {
    +              "description": "Suspend TWI transaction",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_SUSPEND": {
    +                    "description": "Suspend TWI transaction",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_RESUME": {
    +              "description": "Resume TWI transaction",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_RESUME": {
    +                    "description": "Resume TWI transaction",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_STOPPED": {
    +              "description": "TWI stopped",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_STOPPED": {
    +                    "description": "TWI stopped",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_RXDREADY": {
    +              "description": "TWI RXD byte received",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_RXDREADY": {
    +                    "description": "TWI RXD byte received",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_TXDSENT": {
    +              "description": "TWI TXD byte sent",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_TXDSENT": {
    +                    "description": "TWI TXD byte sent",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_ERROR": {
    +              "description": "TWI error",
    +              "offset": 292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_ERROR": {
    +                    "description": "TWI error",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_BB": {
    +              "description": "TWI byte boundary, generated before each byte that is sent or received",
    +              "offset": 312,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_BB": {
    +                    "description": "TWI byte boundary, generated before each byte that is sent or received",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_SUSPENDED": {
    +              "description": "TWI entered the suspended state",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_SUSPENDED": {
    +                    "description": "TWI entered the suspended state",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SHORTS": {
    +              "description": "Shortcuts between local events and tasks",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BB_SUSPEND": {
    +                    "description": "Shortcut between event BB and task SUSPEND",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "BB_STOP": {
    +                    "description": "Shortcut between event BB and task STOP",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STOPPED": {
    +                    "description": "Write '1' to enable interrupt for event STOPPED",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXDREADY": {
    +                    "description": "Write '1' to enable interrupt for event RXDREADY",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXDSENT": {
    +                    "description": "Write '1' to enable interrupt for event TXDSENT",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Write '1' to enable interrupt for event ERROR",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "BB": {
    +                    "description": "Write '1' to enable interrupt for event BB",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SUSPENDED": {
    +                    "description": "Write '1' to enable interrupt for event SUSPENDED",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STOPPED": {
    +                    "description": "Write '1' to disable interrupt for event STOPPED",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXDREADY": {
    +                    "description": "Write '1' to disable interrupt for event RXDREADY",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXDSENT": {
    +                    "description": "Write '1' to disable interrupt for event TXDSENT",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Write '1' to disable interrupt for event ERROR",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "BB": {
    +                    "description": "Write '1' to disable interrupt for event BB",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SUSPENDED": {
    +                    "description": "Write '1' to disable interrupt for event SUSPENDED",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ERRORSRC": {
    +              "description": "Error source",
    +              "offset": 1220,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OVERRUN": {
    +                    "description": "Overrun error",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotPresent": {
    +                            "description": "Read: no overrun occured",
    +                            "value": 0
    +                          },
    +                          "Present": {
    +                            "description": "Read: overrun occured",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ANACK": {
    +                    "description": "NACK received after sending the address (write '1' to clear)",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotPresent": {
    +                            "description": "Read: error not present",
    +                            "value": 0
    +                          },
    +                          "Present": {
    +                            "description": "Read: error present",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DNACK": {
    +                    "description": "NACK received after sending a data byte (write '1' to clear)",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotPresent": {
    +                            "description": "Read: error not present",
    +                            "value": 0
    +                          },
    +                          "Present": {
    +                            "description": "Read: error present",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable TWI",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable TWI",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable TWI",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable TWI",
    +                            "value": 5
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "RXD": {
    +              "description": "RXD register",
    +              "offset": 1304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RXD": {
    +                    "description": "RXD register",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TXD": {
    +              "description": "TXD register",
    +              "offset": 1308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXD": {
    +                    "description": "TXD register",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "FREQUENCY": {
    +              "description": "TWI frequency. Accuracy depends on the HFCLK source selected.",
    +              "offset": 1316,
    +              "size": 32,
    +              "reset_value": 67108864,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FREQUENCY": {
    +                    "description": "TWI master clock frequency",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "enum": {
    +                      "size": 32,
    +                      "children": {
    +                        "enum_fields": {
    +                          "K100": {
    +                            "description": "100 kbps",
    +                            "value": 26738688
    +                          },
    +                          "K250": {
    +                            "description": "250 kbps",
    +                            "value": 67108864
    +                          },
    +                          "K400": {
    +                            "description": "400 kbps (actual rate 410.256 kbps)",
    +                            "value": 107479040
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ADDRESS": {
    +              "description": "Address used in the TWI transfer",
    +              "offset": 1416,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADDRESS": {
    +                    "description": "Address used in the TWI transfer",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TWIM0": {
    +        "description": "I2C compatible Two-Wire Master Interface with EasyDMA 0",
    +        "children": {
    +          "registers": {
    +            "TASKS_STARTRX": {
    +              "description": "Start TWI receive sequence",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STARTRX": {
    +                    "description": "Start TWI receive sequence",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STARTTX": {
    +              "description": "Start TWI transmit sequence",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STARTTX": {
    +                    "description": "Start TWI transmit sequence",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stop TWI transaction. Must be issued while the TWI master is not suspended.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STOP": {
    +                    "description": "Stop TWI transaction. Must be issued while the TWI master is not suspended.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_SUSPEND": {
    +              "description": "Suspend TWI transaction",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_SUSPEND": {
    +                    "description": "Suspend TWI transaction",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_RESUME": {
    +              "description": "Resume TWI transaction",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_RESUME": {
    +                    "description": "Resume TWI transaction",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_STOPPED": {
    +              "description": "TWI stopped",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_STOPPED": {
    +                    "description": "TWI stopped",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_ERROR": {
    +              "description": "TWI error",
    +              "offset": 292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_ERROR": {
    +                    "description": "TWI error",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_SUSPENDED": {
    +              "description": "Last byte has been sent out after the SUSPEND task has been issued, TWI traffic is now suspended.",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_SUSPENDED": {
    +                    "description": "Last byte has been sent out after the SUSPEND task has been issued, TWI traffic is now suspended.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_RXSTARTED": {
    +              "description": "Receive sequence started",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_RXSTARTED": {
    +                    "description": "Receive sequence started",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_TXSTARTED": {
    +              "description": "Transmit sequence started",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_TXSTARTED": {
    +                    "description": "Transmit sequence started",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_LASTRX": {
    +              "description": "Byte boundary, starting to receive the last byte",
    +              "offset": 348,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_LASTRX": {
    +                    "description": "Byte boundary, starting to receive the last byte",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_LASTTX": {
    +              "description": "Byte boundary, starting to transmit the last byte",
    +              "offset": 352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_LASTTX": {
    +                    "description": "Byte boundary, starting to transmit the last byte",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SHORTS": {
    +              "description": "Shortcuts between local events and tasks",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LASTTX_STARTRX": {
    +                    "description": "Shortcut between event LASTTX and task STARTRX",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LASTTX_SUSPEND": {
    +                    "description": "Shortcut between event LASTTX and task SUSPEND",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LASTTX_STOP": {
    +                    "description": "Shortcut between event LASTTX and task STOP",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LASTRX_STARTTX": {
    +                    "description": "Shortcut between event LASTRX and task STARTTX",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LASTRX_SUSPEND": {
    +                    "description": "Shortcut between event LASTRX and task SUSPEND",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LASTRX_STOP": {
    +                    "description": "Shortcut between event LASTRX and task STOP",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTEN": {
    +              "description": "Enable or disable interrupt",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STOPPED": {
    +                    "description": "Enable or disable interrupt for event STOPPED",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Enable or disable interrupt for event ERROR",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SUSPENDED": {
    +                    "description": "Enable or disable interrupt for event SUSPENDED",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXSTARTED": {
    +                    "description": "Enable or disable interrupt for event RXSTARTED",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXSTARTED": {
    +                    "description": "Enable or disable interrupt for event TXSTARTED",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LASTRX": {
    +                    "description": "Enable or disable interrupt for event LASTRX",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LASTTX": {
    +                    "description": "Enable or disable interrupt for event LASTTX",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STOPPED": {
    +                    "description": "Write '1' to enable interrupt for event STOPPED",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Write '1' to enable interrupt for event ERROR",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SUSPENDED": {
    +                    "description": "Write '1' to enable interrupt for event SUSPENDED",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXSTARTED": {
    +                    "description": "Write '1' to enable interrupt for event RXSTARTED",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXSTARTED": {
    +                    "description": "Write '1' to enable interrupt for event TXSTARTED",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LASTRX": {
    +                    "description": "Write '1' to enable interrupt for event LASTRX",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LASTTX": {
    +                    "description": "Write '1' to enable interrupt for event LASTTX",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STOPPED": {
    +                    "description": "Write '1' to disable interrupt for event STOPPED",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Write '1' to disable interrupt for event ERROR",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SUSPENDED": {
    +                    "description": "Write '1' to disable interrupt for event SUSPENDED",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXSTARTED": {
    +                    "description": "Write '1' to disable interrupt for event RXSTARTED",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXSTARTED": {
    +                    "description": "Write '1' to disable interrupt for event TXSTARTED",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LASTRX": {
    +                    "description": "Write '1' to disable interrupt for event LASTRX",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LASTTX": {
    +                    "description": "Write '1' to disable interrupt for event LASTTX",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ERRORSRC": {
    +              "description": "Error source",
    +              "offset": 1220,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OVERRUN": {
    +                    "description": "Overrun error",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotReceived": {
    +                            "description": "Error did not occur",
    +                            "value": 0
    +                          },
    +                          "Received": {
    +                            "description": "Error occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ANACK": {
    +                    "description": "NACK received after sending the address (write '1' to clear)",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotReceived": {
    +                            "description": "Error did not occur",
    +                            "value": 0
    +                          },
    +                          "Received": {
    +                            "description": "Error occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DNACK": {
    +                    "description": "NACK received after sending a data byte (write '1' to clear)",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotReceived": {
    +                            "description": "Error did not occur",
    +                            "value": 0
    +                          },
    +                          "Received": {
    +                            "description": "Error occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable TWIM",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable TWIM",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable TWIM",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable TWIM",
    +                            "value": 6
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "FREQUENCY": {
    +              "description": "TWI frequency. Accuracy depends on the HFCLK source selected.",
    +              "offset": 1316,
    +              "size": 32,
    +              "reset_value": 67108864,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FREQUENCY": {
    +                    "description": "TWI master clock frequency",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "enum": {
    +                      "size": 32,
    +                      "children": {
    +                        "enum_fields": {
    +                          "K100": {
    +                            "description": "100 kbps",
    +                            "value": 26738688
    +                          },
    +                          "K250": {
    +                            "description": "250 kbps",
    +                            "value": 67108864
    +                          },
    +                          "K400": {
    +                            "description": "400 kbps",
    +                            "value": 104857600
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ADDRESS": {
    +              "description": "Address used in the TWI transfer",
    +              "offset": 1416,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADDRESS": {
    +                    "description": "Address used in the TWI transfer",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TWIS0": {
    +        "description": "I2C compatible Two-Wire Slave Interface with EasyDMA 0",
    +        "children": {
    +          "registers": {
    +            "TASKS_STOP": {
    +              "description": "Stop TWI transaction",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STOP": {
    +                    "description": "Stop TWI transaction",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_SUSPEND": {
    +              "description": "Suspend TWI transaction",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_SUSPEND": {
    +                    "description": "Suspend TWI transaction",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_RESUME": {
    +              "description": "Resume TWI transaction",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_RESUME": {
    +                    "description": "Resume TWI transaction",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_PREPARERX": {
    +              "description": "Prepare the TWI slave to respond to a write command",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_PREPARERX": {
    +                    "description": "Prepare the TWI slave to respond to a write command",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_PREPARETX": {
    +              "description": "Prepare the TWI slave to respond to a read command",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_PREPARETX": {
    +                    "description": "Prepare the TWI slave to respond to a read command",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_STOPPED": {
    +              "description": "TWI stopped",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_STOPPED": {
    +                    "description": "TWI stopped",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_ERROR": {
    +              "description": "TWI error",
    +              "offset": 292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_ERROR": {
    +                    "description": "TWI error",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_RXSTARTED": {
    +              "description": "Receive sequence started",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_RXSTARTED": {
    +                    "description": "Receive sequence started",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_TXSTARTED": {
    +              "description": "Transmit sequence started",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_TXSTARTED": {
    +                    "description": "Transmit sequence started",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_WRITE": {
    +              "description": "Write command received",
    +              "offset": 356,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_WRITE": {
    +                    "description": "Write command received",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_READ": {
    +              "description": "Read command received",
    +              "offset": 360,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_READ": {
    +                    "description": "Read command received",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SHORTS": {
    +              "description": "Shortcuts between local events and tasks",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WRITE_SUSPEND": {
    +                    "description": "Shortcut between event WRITE and task SUSPEND",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "READ_SUSPEND": {
    +                    "description": "Shortcut between event READ and task SUSPEND",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTEN": {
    +              "description": "Enable or disable interrupt",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STOPPED": {
    +                    "description": "Enable or disable interrupt for event STOPPED",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Enable or disable interrupt for event ERROR",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXSTARTED": {
    +                    "description": "Enable or disable interrupt for event RXSTARTED",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXSTARTED": {
    +                    "description": "Enable or disable interrupt for event TXSTARTED",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "WRITE": {
    +                    "description": "Enable or disable interrupt for event WRITE",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "READ": {
    +                    "description": "Enable or disable interrupt for event READ",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STOPPED": {
    +                    "description": "Write '1' to enable interrupt for event STOPPED",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Write '1' to enable interrupt for event ERROR",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXSTARTED": {
    +                    "description": "Write '1' to enable interrupt for event RXSTARTED",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXSTARTED": {
    +                    "description": "Write '1' to enable interrupt for event TXSTARTED",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "WRITE": {
    +                    "description": "Write '1' to enable interrupt for event WRITE",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "READ": {
    +                    "description": "Write '1' to enable interrupt for event READ",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STOPPED": {
    +                    "description": "Write '1' to disable interrupt for event STOPPED",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Write '1' to disable interrupt for event ERROR",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXSTARTED": {
    +                    "description": "Write '1' to disable interrupt for event RXSTARTED",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXSTARTED": {
    +                    "description": "Write '1' to disable interrupt for event TXSTARTED",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "WRITE": {
    +                    "description": "Write '1' to disable interrupt for event WRITE",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "READ": {
    +                    "description": "Write '1' to disable interrupt for event READ",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ERRORSRC": {
    +              "description": "Error source",
    +              "offset": 1232,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OVERFLOW": {
    +                    "description": "RX buffer overflow detected, and prevented",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDetected": {
    +                            "description": "Error did not occur",
    +                            "value": 0
    +                          },
    +                          "Detected": {
    +                            "description": "Error occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DNACK": {
    +                    "description": "NACK sent after receiving a data byte",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotReceived": {
    +                            "description": "Error did not occur",
    +                            "value": 0
    +                          },
    +                          "Received": {
    +                            "description": "Error occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OVERREAD": {
    +                    "description": "TX buffer over-read detected, and prevented",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDetected": {
    +                            "description": "Error did not occur",
    +                            "value": 0
    +                          },
    +                          "Detected": {
    +                            "description": "Error occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "MATCH": {
    +              "description": "Status register indicating which address had a match",
    +              "offset": 1236,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "MATCH": {
    +                    "description": "Which of the addresses in {ADDRESS} matched the incoming address",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable TWIS",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable TWIS",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable TWIS",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable TWIS",
    +                            "value": 9
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ADDRESS": {
    +              "description": "Description collection: TWI slave address n",
    +              "offset": 1416,
    +              "size": 32,
    +              "count": 2,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADDRESS": {
    +                    "description": "TWI slave address",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "CONFIG": {
    +              "description": "Configuration register for the address match mechanism",
    +              "offset": 1428,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADDRESS0": {
    +                    "description": "Enable or disable address matching on ADDRESS[0]",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADDRESS1": {
    +                    "description": "Enable or disable address matching on ADDRESS[1]",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ORC": {
    +              "description": "Over-read character. Character sent out in case of an over-read of the transmit buffer.",
    +              "offset": 1472,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ORC": {
    +                    "description": "Over-read character. Character sent out in case of an over-read of the transmit buffer.",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "PDM": {
    +        "description": "Pulse Density Modulation (Digital Microphone) Interface",
    +        "children": {
    +          "registers": {
    +            "TASKS_START": {
    +              "description": "Starts continuous PDM transfer",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_START": {
    +                    "description": "Starts continuous PDM transfer",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stops PDM transfer",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STOP": {
    +                    "description": "Stops PDM transfer",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_STARTED": {
    +              "description": "PDM transfer has started",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_STARTED": {
    +                    "description": "PDM transfer has started",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_STOPPED": {
    +              "description": "PDM transfer has finished",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_STOPPED": {
    +                    "description": "PDM transfer has finished",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_END": {
    +              "description": "The PDM has written the last sample specified by SAMPLE.MAXCNT (or the last sample after a STOP task has been received) to Data RAM",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_END": {
    +                    "description": "The PDM has written the last sample specified by SAMPLE.MAXCNT (or the last sample after a STOP task has been received) to Data RAM",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTEN": {
    +              "description": "Enable or disable interrupt",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STARTED": {
    +                    "description": "Enable or disable interrupt for event STARTED",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STOPPED": {
    +                    "description": "Enable or disable interrupt for event STOPPED",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "END": {
    +                    "description": "Enable or disable interrupt for event END",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STARTED": {
    +                    "description": "Write '1' to enable interrupt for event STARTED",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STOPPED": {
    +                    "description": "Write '1' to enable interrupt for event STOPPED",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "END": {
    +                    "description": "Write '1' to enable interrupt for event END",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STARTED": {
    +                    "description": "Write '1' to disable interrupt for event STARTED",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STOPPED": {
    +                    "description": "Write '1' to disable interrupt for event STOPPED",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "END": {
    +                    "description": "Write '1' to disable interrupt for event END",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "PDM module enable register",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable PDM module",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PDMCLKCTRL": {
    +              "description": "PDM clock generator control",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 138412032,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FREQ": {
    +                    "description": "PDM_CLK frequency",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "enum": {
    +                      "size": 32,
    +                      "children": {
    +                        "enum_fields": {
    +                          "1000K": {
    +                            "description": "PDM_CLK = 32 MHz / 32 = 1.000 MHz",
    +                            "value": 134217728
    +                          },
    +                          "Default": {
    +                            "description": "PDM_CLK = 32 MHz / 31 = 1.032 MHz. Nominal clock for RATIO=Ratio64.",
    +                            "value": 138412032
    +                          },
    +                          "1067K": {
    +                            "description": "PDM_CLK = 32 MHz / 30 = 1.067 MHz",
    +                            "value": 142606336
    +                          },
    +                          "1231K": {
    +                            "description": "PDM_CLK = 32 MHz / 26 = 1.231 MHz",
    +                            "value": 159383552
    +                          },
    +                          "1280K": {
    +                            "description": "PDM_CLK = 32 MHz / 25 = 1.280 MHz. Nominal clock for RATIO=Ratio80.",
    +                            "value": 167772160
    +                          },
    +                          "1333K": {
    +                            "description": "PDM_CLK = 32 MHz / 24 = 1.333 MHz",
    +                            "value": 176160768
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "MODE": {
    +              "description": "Defines the routing of the connected PDM microphones' signals",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OPERATION": {
    +                    "description": "Mono or stereo operation",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Stereo": {
    +                            "description": "Sample and store one pair (Left + Right) of 16bit samples per RAM word R=[31:16]; L=[15:0]",
    +                            "value": 0
    +                          },
    +                          "Mono": {
    +                            "description": "Sample and store two successive Left samples (16 bit each) per RAM word L1=[31:16]; L0=[15:0]",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EDGE": {
    +                    "description": "Defines on which PDM_CLK edge Left (or mono) is sampled",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "LeftFalling": {
    +                            "description": "Left (or mono) is sampled on falling edge of PDM_CLK",
    +                            "value": 0
    +                          },
    +                          "LeftRising": {
    +                            "description": "Left (or mono) is sampled on rising edge of PDM_CLK",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GAINL": {
    +              "description": "Left output gain adjustment",
    +              "offset": 1304,
    +              "size": 32,
    +              "reset_value": 40,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "GAINL": {
    +                    "description": "Left output gain adjustment, in 0.5 dB steps, around the default module gain (see electrical parameters) 0x00    -20 dB gain adjust 0x01  -19.5 dB gain adjust (...) 0x27   -0.5 dB gain adjust 0x28      0 dB gain adjust 0x29   +0.5 dB gain adjust (...) 0x4F  +19.5 dB gain adjust 0x50    +20 dB gain adjust",
    +                    "offset": 0,
    +                    "size": 7,
    +                    "enum": {
    +                      "size": 7,
    +                      "children": {
    +                        "enum_fields": {
    +                          "MinGain": {
    +                            "description": "-20dB gain adjustment (minimum)",
    +                            "value": 0
    +                          },
    +                          "DefaultGain": {
    +                            "description": "0dB gain adjustment",
    +                            "value": 40
    +                          },
    +                          "MaxGain": {
    +                            "description": "+20dB gain adjustment (maximum)",
    +                            "value": 80
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GAINR": {
    +              "description": "Right output gain adjustment",
    +              "offset": 1308,
    +              "size": 32,
    +              "reset_value": 40,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "GAINR": {
    +                    "description": "Right output gain adjustment, in 0.5 dB steps, around the default module gain (see electrical parameters)",
    +                    "offset": 0,
    +                    "size": 7,
    +                    "enum": {
    +                      "size": 7,
    +                      "children": {
    +                        "enum_fields": {
    +                          "MinGain": {
    +                            "description": "-20dB gain adjustment (minimum)",
    +                            "value": 0
    +                          },
    +                          "DefaultGain": {
    +                            "description": "0dB gain adjustment",
    +                            "value": 40
    +                          },
    +                          "MaxGain": {
    +                            "description": "+20dB gain adjustment (maximum)",
    +                            "value": 80
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "RATIO": {
    +              "description": "Selects the ratio between PDM_CLK and output sample rate. Change PDMCLKCTRL accordingly.",
    +              "offset": 1312,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RATIO": {
    +                    "description": "Selects the ratio between PDM_CLK and output sample rate",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Ratio64": {
    +                            "description": "Ratio of 64",
    +                            "value": 0
    +                          },
    +                          "Ratio80": {
    +                            "description": "Ratio of 80",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "CRYPTOCELL": {
    +        "description": "ARM TrustZone CryptoCell register interface",
    +        "children": {
    +          "registers": {
    +            "ENABLE": {
    +              "description": "Enable CRYPTOCELL subsystem",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable the CRYPTOCELL subsystem",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "CRYPTOCELL subsystem disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "CRYPTOCELL subsystem enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "CC_HOST_RGF": {
    +        "description": "CRYPTOCELL HOST_RGF interface",
    +        "children": {
    +          "registers": {
    +            "HOST_CRYPTOKEY_SEL": {
    +              "description": "AES hardware key select",
    +              "offset": 6712,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HOST_CRYPTOKEY_SEL": {
    +                    "description": "Select the source of the HW key that is used by the AES engine",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "K_DR": {
    +                            "description": "Use device root key K_DR from CRYPTOCELL AO power domain",
    +                            "value": 0
    +                          },
    +                          "K_PRTL": {
    +                            "description": "Use hard-coded RTL key K_PRTL",
    +                            "value": 1
    +                          },
    +                          "Session": {
    +                            "description": "Use provided session key",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "HOST_IOT_KPRTL_LOCK": {
    +              "description": "This write-once register is the K_PRTL lock register. When this register is set, K_PRTL can not be used and a zeroed key will be used instead. The value of this register is saved in the CRYPTOCELL AO power domain.",
    +              "offset": 6732,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HOST_IOT_KPRTL_LOCK": {
    +                    "description": "This register is the K_PRTL lock register. When this register is set, K_PRTL can not be used and a zeroed key will be used instead. The value of this register is saved in the CRYPTOCELL AO power domain.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "K_PRTL can be selected for use from register HOST_CRYPTOKEY_SEL",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "K_PRTL has been locked until next power-on reset (POR). If K_PRTL is selected anyway, a zeroed key will be used instead.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "HOST_IOT_KDR0": {
    +              "description": "This register holds bits 31:0 of K_DR. The value of this register is saved in the CRYPTOCELL AO power domain. Reading from this address returns the K_DR valid status indicating if K_DR is successfully retained.",
    +              "offset": 6736,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HOST_IOT_KDR0": {
    +                    "description": "Write: K_DR bits 31:0 Read: 0x00000000 when 128-bit K_DR key value is not yet retained in the CRYPTOCELL AO power domain Read: 0x00000001 when 128-bit K_DR key value is successfully retained in the CRYPTOCELL AO power domain",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HOST_IOT_KDR1": {
    +              "description": "This register holds bits 63:32 of K_DR. The value of this register is saved in the CRYPTOCELL AO power domain.",
    +              "offset": 6740,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "HOST_IOT_KDR1": {
    +                    "description": "K_DR bits 63:32",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HOST_IOT_KDR2": {
    +              "description": "This register holds bits 95:64 of K_DR. The value of this register is saved in the CRYPTOCELL AO power domain.",
    +              "offset": 6744,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "HOST_IOT_KDR2": {
    +                    "description": "K_DR bits 95:64",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HOST_IOT_KDR3": {
    +              "description": "This register holds bits 127:96 of K_DR. The value of this register is saved in the CRYPTOCELL AO power domain.",
    +              "offset": 6748,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "HOST_IOT_KDR3": {
    +                    "description": "K_DR bits 127:96",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HOST_IOT_LCS": {
    +              "description": "Controls lifecycle state (LCS) for CRYPTOCELL subsystem",
    +              "offset": 6752,
    +              "size": 32,
    +              "reset_value": 2,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LCS": {
    +                    "description": "Lifecycle state value. This field is write-once per reset.",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Debug": {
    +                            "description": "CC310 operates in debug mode",
    +                            "value": 0
    +                          },
    +                          "Secure": {
    +                            "description": "CC310 operates in secure mode",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LCS_IS_VALID": {
    +                    "description": "This field is read-only and indicates if CRYPTOCELL LCS has been successfully configured since last reset",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Invalid": {
    +                            "description": "A valid LCS is not yet retained in the CRYPTOCELL AO power domain",
    +                            "value": 0
    +                          },
    +                          "Valid": {
    +                            "description": "A valid LCS is successfully retained in the CRYPTOCELL AO power domain",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "QSPI": {
    +        "description": "External flash interface",
    +        "children": {
    +          "registers": {
    +            "TASKS_ACTIVATE": {
    +              "description": "Activate QSPI interface",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_ACTIVATE": {
    +                    "description": "Activate QSPI interface",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_READSTART": {
    +              "description": "Start transfer from external flash memory to internal RAM",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_READSTART": {
    +                    "description": "Start transfer from external flash memory to internal RAM",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_WRITESTART": {
    +              "description": "Start transfer from internal RAM to external flash memory",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_WRITESTART": {
    +                    "description": "Start transfer from internal RAM to external flash memory",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_ERASESTART": {
    +              "description": "Start external flash memory erase operation",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_ERASESTART": {
    +                    "description": "Start external flash memory erase operation",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_DEACTIVATE": {
    +              "description": "Deactivate QSPI interface",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_DEACTIVATE": {
    +                    "description": "Deactivate QSPI interface",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_READY": {
    +              "description": "QSPI peripheral is ready. This event will be generated as a response to any QSPI task.",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_READY": {
    +                    "description": "QSPI peripheral is ready. This event will be generated as a response to any QSPI task.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTEN": {
    +              "description": "Enable or disable interrupt",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "Enable or disable interrupt for event READY",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "Write '1' to enable interrupt for event READY",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "Write '1' to disable interrupt for event READY",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable QSPI peripheral and acquire the pins selected in PSELn registers",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable QSPI",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable QSPI",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable QSPI",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "XIPOFFSET": {
    +              "description": "Address offset into the external memory for Execute in Place operation.",
    +              "offset": 1344,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XIPOFFSET": {
    +                    "description": "Address offset into the external memory for Execute in Place operation. Value must be a multiple of 4.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IFCONFIG0": {
    +              "description": "Interface configuration.",
    +              "offset": 1348,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READOC": {
    +                    "description": "Configure number of data lines and opcode used for reading.",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "FASTREAD": {
    +                            "description": "Single data line SPI. FAST_READ (opcode 0x0B).",
    +                            "value": 0
    +                          },
    +                          "READ2O": {
    +                            "description": "Dual data line SPI. READ2O (opcode 0x3B).",
    +                            "value": 1
    +                          },
    +                          "READ2IO": {
    +                            "description": "Dual data line SPI. READ2IO (opcode 0xBB).",
    +                            "value": 2
    +                          },
    +                          "READ4O": {
    +                            "description": "Quad data line SPI. READ4O (opcode 0x6B).",
    +                            "value": 3
    +                          },
    +                          "READ4IO": {
    +                            "description": "Quad data line SPI. READ4IO (opcode 0xEB).",
    +                            "value": 4
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "WRITEOC": {
    +                    "description": "Configure number of data lines and opcode used for writing.",
    +                    "offset": 3,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PP": {
    +                            "description": "Single data line SPI. PP (opcode 0x02).",
    +                            "value": 0
    +                          },
    +                          "PP2O": {
    +                            "description": "Dual data line SPI. PP2O (opcode 0xA2).",
    +                            "value": 1
    +                          },
    +                          "PP4O": {
    +                            "description": "Quad data line SPI. PP4O (opcode 0x32).",
    +                            "value": 2
    +                          },
    +                          "PP4IO": {
    +                            "description": "Quad data line SPI. PP4IO (opcode 0x38).",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADDRMODE": {
    +                    "description": "Addressing mode.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "24BIT": {
    +                            "description": "24-bit addressing.",
    +                            "value": 0
    +                          },
    +                          "32BIT": {
    +                            "description": "32-bit addressing.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DPMENABLE": {
    +                    "description": "Enable deep power-down mode (DPM) feature.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable DPM feature.",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable DPM feature.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PPSIZE": {
    +                    "description": "Page size for commands PP, PP2O, PP4O and PP4IO.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "256Bytes": {
    +                            "description": "256 bytes.",
    +                            "value": 0
    +                          },
    +                          "512Bytes": {
    +                            "description": "512 bytes.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "IFCONFIG1": {
    +              "description": "Interface configuration.",
    +              "offset": 1536,
    +              "size": 32,
    +              "reset_value": 263296,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SCKDELAY": {
    +                    "description": "Minimum amount of time that the CSN pin must stay high before it can go low again. Value is specified in number of 16 MHz periods (62.5 ns).",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "DPMEN": {
    +                    "description": "Enter/exit deep power-down mode (DPM) for external flash memory.",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Exit": {
    +                            "description": "Exit DPM.",
    +                            "value": 0
    +                          },
    +                          "Enter": {
    +                            "description": "Enter DPM.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SPIMODE": {
    +                    "description": "Select SPI mode.",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "MODE0": {
    +                            "description": "Mode 0: Data are captured on the clock rising edge and data is output on a falling edge. Base level of clock is 0 (CPOL=0, CPHA=0).",
    +                            "value": 0
    +                          },
    +                          "MODE3": {
    +                            "description": "Mode 3: Data are captured on the clock falling edge and data is output on a rising edge. Base level of clock is 1 (CPOL=1, CPHA=1).",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SCKFREQ": {
    +                    "description": "SCK frequency is given as 32 MHz / (SCKFREQ + 1).",
    +                    "offset": 28,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "STATUS": {
    +              "description": "Status register.",
    +              "offset": 1540,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DPM": {
    +                    "description": "Deep power-down mode (DPM) status of external flash.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "External flash is not in DPM.",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "External flash is in DPM.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "READY": {
    +                    "description": "Ready status.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "READY": {
    +                            "description": "QSPI peripheral is ready. It is allowed to trigger new tasks, writing custom instructions or enter/exit DPM.",
    +                            "value": 1
    +                          },
    +                          "BUSY": {
    +                            "description": "QSPI peripheral is busy. It is not allowed to trigger any new tasks, writing custom instructions or enter/exit DPM.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SREG": {
    +                    "description": "Value of external flash device Status Register. When the external flash has two bytes status register this field includes the value of the low byte.",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "DPMDUR": {
    +              "description": "Set the duration required to enter/exit deep power-down mode (DPM).",
    +              "offset": 1556,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENTER": {
    +                    "description": "Duration needed by external flash to enter DPM. Duration is given as ENTER * 256 * 62.5 ns.",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "EXIT": {
    +                    "description": "Duration needed by external flash to exit DPM. Duration is given as EXIT * 256 * 62.5 ns.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ADDRCONF": {
    +              "description": "Extended address configuration.",
    +              "offset": 1572,
    +              "size": 32,
    +              "reset_value": 183,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OPCODE": {
    +                    "description": "Opcode that enters the 32-bit addressing mode.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "BYTE0": {
    +                    "description": "Byte 0 following opcode.",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "BYTE1": {
    +                    "description": "Byte 1 following byte 0.",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "MODE": {
    +                    "description": "Extended addressing mode.",
    +                    "offset": 24,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoInstr": {
    +                            "description": "Do not send any instruction.",
    +                            "value": 0
    +                          },
    +                          "Opcode": {
    +                            "description": "Send opcode.",
    +                            "value": 1
    +                          },
    +                          "OpByte0": {
    +                            "description": "Send opcode, byte0.",
    +                            "value": 2
    +                          },
    +                          "All": {
    +                            "description": "Send opcode, byte0, byte1.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "WIPWAIT": {
    +                    "description": "Wait for write complete before sending command.",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "No wait.",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Wait.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "WREN": {
    +                    "description": "Send WREN (write enable opcode 0x06) before instruction.",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Do not send WREN.",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Send WREN.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CINSTRCONF": {
    +              "description": "Custom instruction configuration register.",
    +              "offset": 1588,
    +              "size": 32,
    +              "reset_value": 8192,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OPCODE": {
    +                    "description": "Opcode of Custom instruction.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "LENGTH": {
    +                    "description": "Length of custom instruction in number of bytes.",
    +                    "offset": 8,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "1B": {
    +                            "description": "Send opcode only.",
    +                            "value": 1
    +                          },
    +                          "2B": {
    +                            "description": "Send opcode, CINSTRDAT0.BYTE0.",
    +                            "value": 2
    +                          },
    +                          "3B": {
    +                            "description": "Send opcode, CINSTRDAT0.BYTE0 -> CINSTRDAT0.BYTE1.",
    +                            "value": 3
    +                          },
    +                          "4B": {
    +                            "description": "Send opcode, CINSTRDAT0.BYTE0 -> CINSTRDAT0.BYTE2.",
    +                            "value": 4
    +                          },
    +                          "5B": {
    +                            "description": "Send opcode, CINSTRDAT0.BYTE0 -> CINSTRDAT0.BYTE3.",
    +                            "value": 5
    +                          },
    +                          "6B": {
    +                            "description": "Send opcode, CINSTRDAT0.BYTE0 -> CINSTRDAT1.BYTE4.",
    +                            "value": 6
    +                          },
    +                          "7B": {
    +                            "description": "Send opcode, CINSTRDAT0.BYTE0 -> CINSTRDAT1.BYTE5.",
    +                            "value": 7
    +                          },
    +                          "8B": {
    +                            "description": "Send opcode, CINSTRDAT0.BYTE0 -> CINSTRDAT1.BYTE6.",
    +                            "value": 8
    +                          },
    +                          "9B": {
    +                            "description": "Send opcode, CINSTRDAT0.BYTE0 -> CINSTRDAT1.BYTE7.",
    +                            "value": 9
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LIO2": {
    +                    "description": "Level of the IO2 pin (if connected) during transmission of custom instruction.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "LIO3": {
    +                    "description": "Level of the IO3 pin (if connected) during transmission of custom instruction.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "WIPWAIT": {
    +                    "description": "Wait for write complete before sending command.",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "No wait.",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Wait.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "WREN": {
    +                    "description": "Send WREN (write enable opcode 0x06) before instruction.",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Do not send WREN.",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Send WREN.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LFEN": {
    +                    "description": "Enable long frame mode. When enabled, a custom instruction transaction has to be ended by writing the LFSTOP field.",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Long frame mode disabled",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Long frame mode enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LFSTOP": {
    +                    "description": "Stop (finalize) long frame transaction",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Stop": {
    +                            "description": "Stop",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CINSTRDAT0": {
    +              "description": "Custom instruction data register 0.",
    +              "offset": 1592,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BYTE0": {
    +                    "description": "Data byte 0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "BYTE1": {
    +                    "description": "Data byte 1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "BYTE2": {
    +                    "description": "Data byte 2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "BYTE3": {
    +                    "description": "Data byte 3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CINSTRDAT1": {
    +              "description": "Custom instruction data register 1.",
    +              "offset": 1596,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BYTE4": {
    +                    "description": "Data byte 4",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "BYTE5": {
    +                    "description": "Data byte 5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "BYTE6": {
    +                    "description": "Data byte 6",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "BYTE7": {
    +                    "description": "Data byte 7",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IFTIMING": {
    +              "description": "SPI interface timing.",
    +              "offset": 1600,
    +              "size": 32,
    +              "reset_value": 512,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXDELAY": {
    +                    "description": "Timing related to sampling of the input serial data. The value of RXDELAY specifies the number of 64 MHz cycles (15.625 ns) delay from the the rising edge of the SPI Clock (SCK) until the input serial data is sampled. As en example, if set to 0 the input serial data is sampled on the rising edge of SCK.",
    +                    "offset": 8,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "PWM0": {
    +        "description": "Pulse width modulation unit 0",
    +        "children": {
    +          "registers": {
    +            "TASKS_STOP": {
    +              "description": "Stops PWM pulse generation on all channels at the end of current PWM period, and stops sequence playback",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STOP": {
    +                    "description": "Stops PWM pulse generation on all channels at the end of current PWM period, and stops sequence playback",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_SEQSTART": {
    +              "description": "Description collection: Loads the first PWM value on all enabled channels from sequence n, and starts playing that sequence at the rate defined in SEQ[n]REFRESH and/or DECODER.MODE. Causes PWM generation to start if not running.",
    +              "offset": 8,
    +              "size": 32,
    +              "count": 2,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_SEQSTART": {
    +                    "description": "Loads the first PWM value on all enabled channels from sequence n, and starts playing that sequence at the rate defined in SEQ[n]REFRESH and/or DECODER.MODE. Causes PWM generation to start if not running.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_NEXTSTEP": {
    +              "description": "Steps by one value in the current sequence on all enabled channels if DECODER.MODE=NextStep. Does not cause PWM generation to start if not running.",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_NEXTSTEP": {
    +                    "description": "Steps by one value in the current sequence on all enabled channels if DECODER.MODE=NextStep. Does not cause PWM generation to start if not running.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_STOPPED": {
    +              "description": "Response to STOP task, emitted when PWM pulses are no longer generated",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_STOPPED": {
    +                    "description": "Response to STOP task, emitted when PWM pulses are no longer generated",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_SEQSTARTED": {
    +              "description": "Description collection: First PWM period started on sequence n",
    +              "offset": 264,
    +              "size": 32,
    +              "count": 2,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_SEQSTARTED": {
    +                    "description": "First PWM period started on sequence n",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_SEQEND": {
    +              "description": "Description collection: Emitted at end of every sequence n, when last value from RAM has been applied to wave counter",
    +              "offset": 272,
    +              "size": 32,
    +              "count": 2,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_SEQEND": {
    +                    "description": "Emitted at end of every sequence n, when last value from RAM has been applied to wave counter",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_PWMPERIODEND": {
    +              "description": "Emitted at the end of each PWM period",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_PWMPERIODEND": {
    +                    "description": "Emitted at the end of each PWM period",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_LOOPSDONE": {
    +              "description": "Concatenated sequences have been played the amount of times defined in LOOP.CNT",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_LOOPSDONE": {
    +                    "description": "Concatenated sequences have been played the amount of times defined in LOOP.CNT",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SHORTS": {
    +              "description": "Shortcuts between local events and tasks",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SEQEND0_STOP": {
    +                    "description": "Shortcut between event SEQEND[0] and task STOP",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SEQEND1_STOP": {
    +                    "description": "Shortcut between event SEQEND[1] and task STOP",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LOOPSDONE_SEQSTART0": {
    +                    "description": "Shortcut between event LOOPSDONE and task SEQSTART[0]",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LOOPSDONE_SEQSTART1": {
    +                    "description": "Shortcut between event LOOPSDONE and task SEQSTART[1]",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LOOPSDONE_STOP": {
    +                    "description": "Shortcut between event LOOPSDONE and task STOP",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTEN": {
    +              "description": "Enable or disable interrupt",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STOPPED": {
    +                    "description": "Enable or disable interrupt for event STOPPED",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SEQSTARTED0": {
    +                    "description": "Enable or disable interrupt for event SEQSTARTED[0]",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SEQSTARTED1": {
    +                    "description": "Enable or disable interrupt for event SEQSTARTED[1]",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SEQEND0": {
    +                    "description": "Enable or disable interrupt for event SEQEND[0]",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SEQEND1": {
    +                    "description": "Enable or disable interrupt for event SEQEND[1]",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMPERIODEND": {
    +                    "description": "Enable or disable interrupt for event PWMPERIODEND",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LOOPSDONE": {
    +                    "description": "Enable or disable interrupt for event LOOPSDONE",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STOPPED": {
    +                    "description": "Write '1' to enable interrupt for event STOPPED",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SEQSTARTED0": {
    +                    "description": "Write '1' to enable interrupt for event SEQSTARTED[0]",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SEQSTARTED1": {
    +                    "description": "Write '1' to enable interrupt for event SEQSTARTED[1]",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SEQEND0": {
    +                    "description": "Write '1' to enable interrupt for event SEQEND[0]",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SEQEND1": {
    +                    "description": "Write '1' to enable interrupt for event SEQEND[1]",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMPERIODEND": {
    +                    "description": "Write '1' to enable interrupt for event PWMPERIODEND",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LOOPSDONE": {
    +                    "description": "Write '1' to enable interrupt for event LOOPSDONE",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STOPPED": {
    +                    "description": "Write '1' to disable interrupt for event STOPPED",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SEQSTARTED0": {
    +                    "description": "Write '1' to disable interrupt for event SEQSTARTED[0]",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SEQSTARTED1": {
    +                    "description": "Write '1' to disable interrupt for event SEQSTARTED[1]",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SEQEND0": {
    +                    "description": "Write '1' to disable interrupt for event SEQEND[0]",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SEQEND1": {
    +                    "description": "Write '1' to disable interrupt for event SEQEND[1]",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMPERIODEND": {
    +                    "description": "Write '1' to disable interrupt for event PWMPERIODEND",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LOOPSDONE": {
    +                    "description": "Write '1' to disable interrupt for event LOOPSDONE",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "PWM module enable register",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable PWM module",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "MODE": {
    +              "description": "Selects operating mode of the wave counter",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "UPDOWN": {
    +                    "description": "Selects up mode or up-and-down mode for the counter",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Up": {
    +                            "description": "Up counter, edge-aligned PWM duty cycle",
    +                            "value": 0
    +                          },
    +                          "UpAndDown": {
    +                            "description": "Up and down counter, center-aligned PWM duty cycle",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "COUNTERTOP": {
    +              "description": "Value up to which the pulse generator counter counts",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 1023,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COUNTERTOP": {
    +                    "description": "Value up to which the pulse generator counter counts. This register is ignored when DECODER.MODE=WaveForm and only values from RAM are used.",
    +                    "offset": 0,
    +                    "size": 15
    +                  }
    +                }
    +              }
    +            },
    +            "PRESCALER": {
    +              "description": "Configuration for PWM_CLK",
    +              "offset": 1292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRESCALER": {
    +                    "description": "Prescaler of PWM_CLK",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DIV_1": {
    +                            "description": "Divide by 1 (16 MHz)",
    +                            "value": 0
    +                          },
    +                          "DIV_2": {
    +                            "description": "Divide by 2 (8 MHz)",
    +                            "value": 1
    +                          },
    +                          "DIV_4": {
    +                            "description": "Divide by 4 (4 MHz)",
    +                            "value": 2
    +                          },
    +                          "DIV_8": {
    +                            "description": "Divide by 8 (2 MHz)",
    +                            "value": 3
    +                          },
    +                          "DIV_16": {
    +                            "description": "Divide by 16 (1 MHz)",
    +                            "value": 4
    +                          },
    +                          "DIV_32": {
    +                            "description": "Divide by 32 (500 kHz)",
    +                            "value": 5
    +                          },
    +                          "DIV_64": {
    +                            "description": "Divide by 64 (250 kHz)",
    +                            "value": 6
    +                          },
    +                          "DIV_128": {
    +                            "description": "Divide by 128 (125 kHz)",
    +                            "value": 7
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "DECODER": {
    +              "description": "Configuration of the decoder",
    +              "offset": 1296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LOAD": {
    +                    "description": "How a sequence is read from RAM and spread to the compare register",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Common": {
    +                            "description": "1st half word (16-bit) used in all PWM channels 0..3",
    +                            "value": 0
    +                          },
    +                          "Grouped": {
    +                            "description": "1st half word (16-bit) used in channel 0..1; 2nd word in channel 2..3",
    +                            "value": 1
    +                          },
    +                          "Individual": {
    +                            "description": "1st half word (16-bit) in ch.0; 2nd in ch.1; ...; 4th in ch.3",
    +                            "value": 2
    +                          },
    +                          "WaveForm": {
    +                            "description": "1st half word (16-bit) in ch.0; 2nd in ch.1; ...; 4th in COUNTERTOP",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MODE": {
    +                    "description": "Selects source for advancing the active sequence",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RefreshCount": {
    +                            "description": "SEQ[n].REFRESH is used to determine loading internal compare registers",
    +                            "value": 0
    +                          },
    +                          "NextStep": {
    +                            "description": "NEXTSTEP task causes a new value to be loaded to internal compare registers",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "LOOP": {
    +              "description": "Number of playbacks of a loop",
    +              "offset": 1300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "Number of playbacks of pattern cycles",
    +                    "offset": 0,
    +                    "size": 16,
    +                    "enum": {
    +                      "size": 16,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Looping disabled (stop at the end of the sequence)",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "USBD": {
    +        "description": "Universal serial bus device",
    +        "children": {
    +          "registers": {
    +            "TASKS_STARTEPIN": {
    +              "description": "Description collection: Captures the EPIN[n].PTR and EPIN[n].MAXCNT registers values, and enables endpoint IN n to respond to traffic from host",
    +              "offset": 4,
    +              "size": 32,
    +              "count": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STARTEPIN": {
    +                    "description": "Captures the EPIN[n].PTR and EPIN[n].MAXCNT registers values, and enables endpoint IN n to respond to traffic from host",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STARTISOIN": {
    +              "description": "Captures the ISOIN.PTR and ISOIN.MAXCNT registers values, and enables sending data on ISO endpoint",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STARTISOIN": {
    +                    "description": "Captures the ISOIN.PTR and ISOIN.MAXCNT registers values, and enables sending data on ISO endpoint",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STARTEPOUT": {
    +              "description": "Description collection: Captures the EPOUT[n].PTR and EPOUT[n].MAXCNT registers values, and enables endpoint n to respond to traffic from host",
    +              "offset": 40,
    +              "size": 32,
    +              "count": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STARTEPOUT": {
    +                    "description": "Captures the EPOUT[n].PTR and EPOUT[n].MAXCNT registers values, and enables endpoint n to respond to traffic from host",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STARTISOOUT": {
    +              "description": "Captures the ISOOUT.PTR and ISOOUT.MAXCNT registers values, and enables receiving of data on ISO endpoint",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STARTISOOUT": {
    +                    "description": "Captures the ISOOUT.PTR and ISOOUT.MAXCNT registers values, and enables receiving of data on ISO endpoint",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_EP0RCVOUT": {
    +              "description": "Allows OUT data stage on control endpoint 0",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_EP0RCVOUT": {
    +                    "description": "Allows OUT data stage on control endpoint 0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_EP0STATUS": {
    +              "description": "Allows status stage on control endpoint 0",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_EP0STATUS": {
    +                    "description": "Allows status stage on control endpoint 0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_EP0STALL": {
    +              "description": "Stalls data and status stage on control endpoint 0",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_EP0STALL": {
    +                    "description": "Stalls data and status stage on control endpoint 0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_DPDMDRIVE": {
    +              "description": "Forces D+ and D- lines into the state defined in the DPDMVALUE register",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_DPDMDRIVE": {
    +                    "description": "Forces D+ and D- lines into the state defined in the DPDMVALUE register",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_DPDMNODRIVE": {
    +              "description": "Stops forcing D+ and D- lines into any state (USB engine takes control)",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_DPDMNODRIVE": {
    +                    "description": "Stops forcing D+ and D- lines into any state (USB engine takes control)",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_USBRESET": {
    +              "description": "Signals that a USB reset condition has been detected on USB lines",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_USBRESET": {
    +                    "description": "Signals that a USB reset condition has been detected on USB lines",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_STARTED": {
    +              "description": "Confirms that the EPIN[n].PTR and EPIN[n].MAXCNT, or EPOUT[n].PTR and EPOUT[n].MAXCNT registers have been captured on all endpoints reported in the EPSTATUS register",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_STARTED": {
    +                    "description": "Confirms that the EPIN[n].PTR and EPIN[n].MAXCNT, or EPOUT[n].PTR and EPOUT[n].MAXCNT registers have been captured on all endpoints reported in the EPSTATUS register",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_ENDEPIN": {
    +              "description": "Description collection: The whole EPIN[n] buffer has been consumed. The RAM buffer can be accessed safely by software.",
    +              "offset": 264,
    +              "size": 32,
    +              "count": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_ENDEPIN": {
    +                    "description": "The whole EPIN[n] buffer has been consumed. The RAM buffer can be accessed safely by software.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_EP0DATADONE": {
    +              "description": "An acknowledged data transfer has taken place on the control endpoint",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_EP0DATADONE": {
    +                    "description": "An acknowledged data transfer has taken place on the control endpoint",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_ENDISOIN": {
    +              "description": "The whole ISOIN buffer has been consumed. The RAM buffer can be accessed safely by software.",
    +              "offset": 300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_ENDISOIN": {
    +                    "description": "The whole ISOIN buffer has been consumed. The RAM buffer can be accessed safely by software.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_ENDEPOUT": {
    +              "description": "Description collection: The whole EPOUT[n] buffer has been consumed. The RAM buffer can be accessed safely by software.",
    +              "offset": 304,
    +              "size": 32,
    +              "count": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_ENDEPOUT": {
    +                    "description": "The whole EPOUT[n] buffer has been consumed. The RAM buffer can be accessed safely by software.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_ENDISOOUT": {
    +              "description": "The whole ISOOUT buffer has been consumed. The RAM buffer can be accessed safely by software.",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_ENDISOOUT": {
    +                    "description": "The whole ISOOUT buffer has been consumed. The RAM buffer can be accessed safely by software.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_SOF": {
    +              "description": "Signals that a SOF (start of frame) condition has been detected on USB lines",
    +              "offset": 340,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_SOF": {
    +                    "description": "Signals that a SOF (start of frame) condition has been detected on USB lines",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_USBEVENT": {
    +              "description": "An event or an error not covered by specific events has occurred. Check EVENTCAUSE register to find the cause.",
    +              "offset": 344,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_USBEVENT": {
    +                    "description": "An event or an error not covered by specific events has occurred. Check EVENTCAUSE register to find the cause.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_EP0SETUP": {
    +              "description": "A valid SETUP token has been received (and acknowledged) on the control endpoint",
    +              "offset": 348,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_EP0SETUP": {
    +                    "description": "A valid SETUP token has been received (and acknowledged) on the control endpoint",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_EPDATA": {
    +              "description": "A data transfer has occurred on a data endpoint, indicated by the EPDATASTATUS register",
    +              "offset": 352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_EPDATA": {
    +                    "description": "A data transfer has occurred on a data endpoint, indicated by the EPDATASTATUS register",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SHORTS": {
    +              "description": "Shortcuts between local events and tasks",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EP0DATADONE_STARTEPIN0": {
    +                    "description": "Shortcut between event EP0DATADONE and task STARTEPIN[0]",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EP0DATADONE_STARTEPOUT0": {
    +                    "description": "Shortcut between event EP0DATADONE and task STARTEPOUT[0]",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EP0DATADONE_EP0STATUS": {
    +                    "description": "Shortcut between event EP0DATADONE and task EP0STATUS",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPOUT0_EP0STATUS": {
    +                    "description": "Shortcut between event ENDEPOUT[0] and task EP0STATUS",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPOUT0_EP0RCVOUT": {
    +                    "description": "Shortcut between event ENDEPOUT[0] and task EP0RCVOUT",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTEN": {
    +              "description": "Enable or disable interrupt",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "USBRESET": {
    +                    "description": "Enable or disable interrupt for event USBRESET",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STARTED": {
    +                    "description": "Enable or disable interrupt for event STARTED",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPIN0": {
    +                    "description": "Enable or disable interrupt for event ENDEPIN[0]",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPIN1": {
    +                    "description": "Enable or disable interrupt for event ENDEPIN[1]",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPIN2": {
    +                    "description": "Enable or disable interrupt for event ENDEPIN[2]",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPIN3": {
    +                    "description": "Enable or disable interrupt for event ENDEPIN[3]",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPIN4": {
    +                    "description": "Enable or disable interrupt for event ENDEPIN[4]",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPIN5": {
    +                    "description": "Enable or disable interrupt for event ENDEPIN[5]",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPIN6": {
    +                    "description": "Enable or disable interrupt for event ENDEPIN[6]",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPIN7": {
    +                    "description": "Enable or disable interrupt for event ENDEPIN[7]",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EP0DATADONE": {
    +                    "description": "Enable or disable interrupt for event EP0DATADONE",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDISOIN": {
    +                    "description": "Enable or disable interrupt for event ENDISOIN",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPOUT0": {
    +                    "description": "Enable or disable interrupt for event ENDEPOUT[0]",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPOUT1": {
    +                    "description": "Enable or disable interrupt for event ENDEPOUT[1]",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPOUT2": {
    +                    "description": "Enable or disable interrupt for event ENDEPOUT[2]",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPOUT3": {
    +                    "description": "Enable or disable interrupt for event ENDEPOUT[3]",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPOUT4": {
    +                    "description": "Enable or disable interrupt for event ENDEPOUT[4]",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPOUT5": {
    +                    "description": "Enable or disable interrupt for event ENDEPOUT[5]",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPOUT6": {
    +                    "description": "Enable or disable interrupt for event ENDEPOUT[6]",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPOUT7": {
    +                    "description": "Enable or disable interrupt for event ENDEPOUT[7]",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDISOOUT": {
    +                    "description": "Enable or disable interrupt for event ENDISOOUT",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SOF": {
    +                    "description": "Enable or disable interrupt for event SOF",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "USBEVENT": {
    +                    "description": "Enable or disable interrupt for event USBEVENT",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EP0SETUP": {
    +                    "description": "Enable or disable interrupt for event EP0SETUP",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPDATA": {
    +                    "description": "Enable or disable interrupt for event EPDATA",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "USBRESET": {
    +                    "description": "Write '1' to enable interrupt for event USBRESET",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STARTED": {
    +                    "description": "Write '1' to enable interrupt for event STARTED",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPIN0": {
    +                    "description": "Write '1' to enable interrupt for event ENDEPIN[0]",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPIN1": {
    +                    "description": "Write '1' to enable interrupt for event ENDEPIN[1]",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPIN2": {
    +                    "description": "Write '1' to enable interrupt for event ENDEPIN[2]",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPIN3": {
    +                    "description": "Write '1' to enable interrupt for event ENDEPIN[3]",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPIN4": {
    +                    "description": "Write '1' to enable interrupt for event ENDEPIN[4]",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPIN5": {
    +                    "description": "Write '1' to enable interrupt for event ENDEPIN[5]",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPIN6": {
    +                    "description": "Write '1' to enable interrupt for event ENDEPIN[6]",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPIN7": {
    +                    "description": "Write '1' to enable interrupt for event ENDEPIN[7]",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EP0DATADONE": {
    +                    "description": "Write '1' to enable interrupt for event EP0DATADONE",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDISOIN": {
    +                    "description": "Write '1' to enable interrupt for event ENDISOIN",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPOUT0": {
    +                    "description": "Write '1' to enable interrupt for event ENDEPOUT[0]",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPOUT1": {
    +                    "description": "Write '1' to enable interrupt for event ENDEPOUT[1]",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPOUT2": {
    +                    "description": "Write '1' to enable interrupt for event ENDEPOUT[2]",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPOUT3": {
    +                    "description": "Write '1' to enable interrupt for event ENDEPOUT[3]",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPOUT4": {
    +                    "description": "Write '1' to enable interrupt for event ENDEPOUT[4]",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPOUT5": {
    +                    "description": "Write '1' to enable interrupt for event ENDEPOUT[5]",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPOUT6": {
    +                    "description": "Write '1' to enable interrupt for event ENDEPOUT[6]",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPOUT7": {
    +                    "description": "Write '1' to enable interrupt for event ENDEPOUT[7]",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDISOOUT": {
    +                    "description": "Write '1' to enable interrupt for event ENDISOOUT",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SOF": {
    +                    "description": "Write '1' to enable interrupt for event SOF",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "USBEVENT": {
    +                    "description": "Write '1' to enable interrupt for event USBEVENT",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EP0SETUP": {
    +                    "description": "Write '1' to enable interrupt for event EP0SETUP",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPDATA": {
    +                    "description": "Write '1' to enable interrupt for event EPDATA",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "USBRESET": {
    +                    "description": "Write '1' to disable interrupt for event USBRESET",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STARTED": {
    +                    "description": "Write '1' to disable interrupt for event STARTED",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPIN0": {
    +                    "description": "Write '1' to disable interrupt for event ENDEPIN[0]",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPIN1": {
    +                    "description": "Write '1' to disable interrupt for event ENDEPIN[1]",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPIN2": {
    +                    "description": "Write '1' to disable interrupt for event ENDEPIN[2]",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPIN3": {
    +                    "description": "Write '1' to disable interrupt for event ENDEPIN[3]",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPIN4": {
    +                    "description": "Write '1' to disable interrupt for event ENDEPIN[4]",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPIN5": {
    +                    "description": "Write '1' to disable interrupt for event ENDEPIN[5]",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPIN6": {
    +                    "description": "Write '1' to disable interrupt for event ENDEPIN[6]",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPIN7": {
    +                    "description": "Write '1' to disable interrupt for event ENDEPIN[7]",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EP0DATADONE": {
    +                    "description": "Write '1' to disable interrupt for event EP0DATADONE",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDISOIN": {
    +                    "description": "Write '1' to disable interrupt for event ENDISOIN",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPOUT0": {
    +                    "description": "Write '1' to disable interrupt for event ENDEPOUT[0]",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPOUT1": {
    +                    "description": "Write '1' to disable interrupt for event ENDEPOUT[1]",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPOUT2": {
    +                    "description": "Write '1' to disable interrupt for event ENDEPOUT[2]",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPOUT3": {
    +                    "description": "Write '1' to disable interrupt for event ENDEPOUT[3]",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPOUT4": {
    +                    "description": "Write '1' to disable interrupt for event ENDEPOUT[4]",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPOUT5": {
    +                    "description": "Write '1' to disable interrupt for event ENDEPOUT[5]",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPOUT6": {
    +                    "description": "Write '1' to disable interrupt for event ENDEPOUT[6]",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDEPOUT7": {
    +                    "description": "Write '1' to disable interrupt for event ENDEPOUT[7]",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDISOOUT": {
    +                    "description": "Write '1' to disable interrupt for event ENDISOOUT",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SOF": {
    +                    "description": "Write '1' to disable interrupt for event SOF",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "USBEVENT": {
    +                    "description": "Write '1' to disable interrupt for event USBEVENT",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EP0SETUP": {
    +                    "description": "Write '1' to disable interrupt for event EP0SETUP",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPDATA": {
    +                    "description": "Write '1' to disable interrupt for event EPDATA",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTCAUSE": {
    +              "description": "Details on what caused the USBEVENT event",
    +              "offset": 1024,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ISOOUTCRC": {
    +                    "description": "CRC error was detected on isochronous OUT endpoint 8. Write '1' to clear.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDetected": {
    +                            "description": "No error detected",
    +                            "value": 0
    +                          },
    +                          "Detected": {
    +                            "description": "Error detected",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SUSPEND": {
    +                    "description": "Signals that USB lines have been idle long enough for the device to enter suspend. Write '1' to clear.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDetected": {
    +                            "description": "Suspend not detected",
    +                            "value": 0
    +                          },
    +                          "Detected": {
    +                            "description": "Suspend detected",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESUME": {
    +                    "description": "Signals that a RESUME condition (K state or activity restart) has been detected on USB lines. Write '1' to clear.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDetected": {
    +                            "description": "Resume not detected",
    +                            "value": 0
    +                          },
    +                          "Detected": {
    +                            "description": "Resume detected",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "USBWUALLOWED": {
    +                    "description": "USB MAC has been woken up and operational. Write '1' to clear.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotAllowed": {
    +                            "description": "Wake up not allowed",
    +                            "value": 0
    +                          },
    +                          "Allowed": {
    +                            "description": "Wake up allowed",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "READY": {
    +                    "description": "USB device is ready for normal operation. Write '1' to clear.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDetected": {
    +                            "description": "USBEVENT was not issued due to USBD peripheral ready",
    +                            "value": 0
    +                          },
    +                          "Ready": {
    +                            "description": "USBD peripheral is ready",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EPSTATUS": {
    +              "description": "Provides information on which endpoint's EasyDMA registers have been captured",
    +              "offset": 1128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPIN0": {
    +                    "description": "Captured state of endpoint's EasyDMA registers. Write '1' to clear.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoData": {
    +                            "description": "EasyDMA registers have not been captured for this endpoint",
    +                            "value": 0
    +                          },
    +                          "DataDone": {
    +                            "description": "EasyDMA registers have been captured for this endpoint",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPIN1": {
    +                    "description": "Captured state of endpoint's EasyDMA registers. Write '1' to clear.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoData": {
    +                            "description": "EasyDMA registers have not been captured for this endpoint",
    +                            "value": 0
    +                          },
    +                          "DataDone": {
    +                            "description": "EasyDMA registers have been captured for this endpoint",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPIN2": {
    +                    "description": "Captured state of endpoint's EasyDMA registers. Write '1' to clear.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoData": {
    +                            "description": "EasyDMA registers have not been captured for this endpoint",
    +                            "value": 0
    +                          },
    +                          "DataDone": {
    +                            "description": "EasyDMA registers have been captured for this endpoint",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPIN3": {
    +                    "description": "Captured state of endpoint's EasyDMA registers. Write '1' to clear.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoData": {
    +                            "description": "EasyDMA registers have not been captured for this endpoint",
    +                            "value": 0
    +                          },
    +                          "DataDone": {
    +                            "description": "EasyDMA registers have been captured for this endpoint",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPIN4": {
    +                    "description": "Captured state of endpoint's EasyDMA registers. Write '1' to clear.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoData": {
    +                            "description": "EasyDMA registers have not been captured for this endpoint",
    +                            "value": 0
    +                          },
    +                          "DataDone": {
    +                            "description": "EasyDMA registers have been captured for this endpoint",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPIN5": {
    +                    "description": "Captured state of endpoint's EasyDMA registers. Write '1' to clear.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoData": {
    +                            "description": "EasyDMA registers have not been captured for this endpoint",
    +                            "value": 0
    +                          },
    +                          "DataDone": {
    +                            "description": "EasyDMA registers have been captured for this endpoint",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPIN6": {
    +                    "description": "Captured state of endpoint's EasyDMA registers. Write '1' to clear.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoData": {
    +                            "description": "EasyDMA registers have not been captured for this endpoint",
    +                            "value": 0
    +                          },
    +                          "DataDone": {
    +                            "description": "EasyDMA registers have been captured for this endpoint",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPIN7": {
    +                    "description": "Captured state of endpoint's EasyDMA registers. Write '1' to clear.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoData": {
    +                            "description": "EasyDMA registers have not been captured for this endpoint",
    +                            "value": 0
    +                          },
    +                          "DataDone": {
    +                            "description": "EasyDMA registers have been captured for this endpoint",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPIN8": {
    +                    "description": "Captured state of endpoint's EasyDMA registers. Write '1' to clear.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoData": {
    +                            "description": "EasyDMA registers have not been captured for this endpoint",
    +                            "value": 0
    +                          },
    +                          "DataDone": {
    +                            "description": "EasyDMA registers have been captured for this endpoint",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPOUT0": {
    +                    "description": "Captured state of endpoint's EasyDMA registers. Write '1' to clear.",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoData": {
    +                            "description": "EasyDMA registers have not been captured for this endpoint",
    +                            "value": 0
    +                          },
    +                          "DataDone": {
    +                            "description": "EasyDMA registers have been captured for this endpoint",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPOUT1": {
    +                    "description": "Captured state of endpoint's EasyDMA registers. Write '1' to clear.",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoData": {
    +                            "description": "EasyDMA registers have not been captured for this endpoint",
    +                            "value": 0
    +                          },
    +                          "DataDone": {
    +                            "description": "EasyDMA registers have been captured for this endpoint",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPOUT2": {
    +                    "description": "Captured state of endpoint's EasyDMA registers. Write '1' to clear.",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoData": {
    +                            "description": "EasyDMA registers have not been captured for this endpoint",
    +                            "value": 0
    +                          },
    +                          "DataDone": {
    +                            "description": "EasyDMA registers have been captured for this endpoint",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPOUT3": {
    +                    "description": "Captured state of endpoint's EasyDMA registers. Write '1' to clear.",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoData": {
    +                            "description": "EasyDMA registers have not been captured for this endpoint",
    +                            "value": 0
    +                          },
    +                          "DataDone": {
    +                            "description": "EasyDMA registers have been captured for this endpoint",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPOUT4": {
    +                    "description": "Captured state of endpoint's EasyDMA registers. Write '1' to clear.",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoData": {
    +                            "description": "EasyDMA registers have not been captured for this endpoint",
    +                            "value": 0
    +                          },
    +                          "DataDone": {
    +                            "description": "EasyDMA registers have been captured for this endpoint",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPOUT5": {
    +                    "description": "Captured state of endpoint's EasyDMA registers. Write '1' to clear.",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoData": {
    +                            "description": "EasyDMA registers have not been captured for this endpoint",
    +                            "value": 0
    +                          },
    +                          "DataDone": {
    +                            "description": "EasyDMA registers have been captured for this endpoint",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPOUT6": {
    +                    "description": "Captured state of endpoint's EasyDMA registers. Write '1' to clear.",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoData": {
    +                            "description": "EasyDMA registers have not been captured for this endpoint",
    +                            "value": 0
    +                          },
    +                          "DataDone": {
    +                            "description": "EasyDMA registers have been captured for this endpoint",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPOUT7": {
    +                    "description": "Captured state of endpoint's EasyDMA registers. Write '1' to clear.",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoData": {
    +                            "description": "EasyDMA registers have not been captured for this endpoint",
    +                            "value": 0
    +                          },
    +                          "DataDone": {
    +                            "description": "EasyDMA registers have been captured for this endpoint",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPOUT8": {
    +                    "description": "Captured state of endpoint's EasyDMA registers. Write '1' to clear.",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoData": {
    +                            "description": "EasyDMA registers have not been captured for this endpoint",
    +                            "value": 0
    +                          },
    +                          "DataDone": {
    +                            "description": "EasyDMA registers have been captured for this endpoint",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EPDATASTATUS": {
    +              "description": "Provides information on which endpoint(s) an acknowledged data transfer has occurred (EPDATA event)",
    +              "offset": 1132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPIN1": {
    +                    "description": "Acknowledged data transfer on this IN endpoint. Write '1' to clear.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDone": {
    +                            "description": "No acknowledged data transfer on this endpoint",
    +                            "value": 0
    +                          },
    +                          "DataDone": {
    +                            "description": "Acknowledged data transfer on this endpoint has occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPIN2": {
    +                    "description": "Acknowledged data transfer on this IN endpoint. Write '1' to clear.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDone": {
    +                            "description": "No acknowledged data transfer on this endpoint",
    +                            "value": 0
    +                          },
    +                          "DataDone": {
    +                            "description": "Acknowledged data transfer on this endpoint has occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPIN3": {
    +                    "description": "Acknowledged data transfer on this IN endpoint. Write '1' to clear.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDone": {
    +                            "description": "No acknowledged data transfer on this endpoint",
    +                            "value": 0
    +                          },
    +                          "DataDone": {
    +                            "description": "Acknowledged data transfer on this endpoint has occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPIN4": {
    +                    "description": "Acknowledged data transfer on this IN endpoint. Write '1' to clear.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDone": {
    +                            "description": "No acknowledged data transfer on this endpoint",
    +                            "value": 0
    +                          },
    +                          "DataDone": {
    +                            "description": "Acknowledged data transfer on this endpoint has occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPIN5": {
    +                    "description": "Acknowledged data transfer on this IN endpoint. Write '1' to clear.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDone": {
    +                            "description": "No acknowledged data transfer on this endpoint",
    +                            "value": 0
    +                          },
    +                          "DataDone": {
    +                            "description": "Acknowledged data transfer on this endpoint has occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPIN6": {
    +                    "description": "Acknowledged data transfer on this IN endpoint. Write '1' to clear.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDone": {
    +                            "description": "No acknowledged data transfer on this endpoint",
    +                            "value": 0
    +                          },
    +                          "DataDone": {
    +                            "description": "Acknowledged data transfer on this endpoint has occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPIN7": {
    +                    "description": "Acknowledged data transfer on this IN endpoint. Write '1' to clear.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotDone": {
    +                            "description": "No acknowledged data transfer on this endpoint",
    +                            "value": 0
    +                          },
    +                          "DataDone": {
    +                            "description": "Acknowledged data transfer on this endpoint has occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPOUT1": {
    +                    "description": "Acknowledged data transfer on this OUT endpoint. Write '1' to clear.",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotStarted": {
    +                            "description": "No acknowledged data transfer on this endpoint",
    +                            "value": 0
    +                          },
    +                          "Started": {
    +                            "description": "Acknowledged data transfer on this endpoint has occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPOUT2": {
    +                    "description": "Acknowledged data transfer on this OUT endpoint. Write '1' to clear.",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotStarted": {
    +                            "description": "No acknowledged data transfer on this endpoint",
    +                            "value": 0
    +                          },
    +                          "Started": {
    +                            "description": "Acknowledged data transfer on this endpoint has occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPOUT3": {
    +                    "description": "Acknowledged data transfer on this OUT endpoint. Write '1' to clear.",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotStarted": {
    +                            "description": "No acknowledged data transfer on this endpoint",
    +                            "value": 0
    +                          },
    +                          "Started": {
    +                            "description": "Acknowledged data transfer on this endpoint has occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPOUT4": {
    +                    "description": "Acknowledged data transfer on this OUT endpoint. Write '1' to clear.",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotStarted": {
    +                            "description": "No acknowledged data transfer on this endpoint",
    +                            "value": 0
    +                          },
    +                          "Started": {
    +                            "description": "Acknowledged data transfer on this endpoint has occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPOUT5": {
    +                    "description": "Acknowledged data transfer on this OUT endpoint. Write '1' to clear.",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotStarted": {
    +                            "description": "No acknowledged data transfer on this endpoint",
    +                            "value": 0
    +                          },
    +                          "Started": {
    +                            "description": "Acknowledged data transfer on this endpoint has occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPOUT6": {
    +                    "description": "Acknowledged data transfer on this OUT endpoint. Write '1' to clear.",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotStarted": {
    +                            "description": "No acknowledged data transfer on this endpoint",
    +                            "value": 0
    +                          },
    +                          "Started": {
    +                            "description": "Acknowledged data transfer on this endpoint has occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPOUT7": {
    +                    "description": "Acknowledged data transfer on this OUT endpoint. Write '1' to clear.",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotStarted": {
    +                            "description": "No acknowledged data transfer on this endpoint",
    +                            "value": 0
    +                          },
    +                          "Started": {
    +                            "description": "Acknowledged data transfer on this endpoint has occurred",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "USBADDR": {
    +              "description": "Device USB address",
    +              "offset": 1136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ADDR": {
    +                    "description": "Device USB address",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "BMREQUESTTYPE": {
    +              "description": "SETUP data, byte 0, bmRequestType",
    +              "offset": 1152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RECIPIENT": {
    +                    "description": "Data transfer type",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Device": {
    +                            "description": "Device",
    +                            "value": 0
    +                          },
    +                          "Interface": {
    +                            "description": "Interface",
    +                            "value": 1
    +                          },
    +                          "Endpoint": {
    +                            "description": "Endpoint",
    +                            "value": 2
    +                          },
    +                          "Other": {
    +                            "description": "Other",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TYPE": {
    +                    "description": "Data transfer type",
    +                    "offset": 5,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Standard": {
    +                            "description": "Standard",
    +                            "value": 0
    +                          },
    +                          "Class": {
    +                            "description": "Class",
    +                            "value": 1
    +                          },
    +                          "Vendor": {
    +                            "description": "Vendor",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DIRECTION": {
    +                    "description": "Data transfer direction",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "HostToDevice": {
    +                            "description": "Host-to-device",
    +                            "value": 0
    +                          },
    +                          "DeviceToHost": {
    +                            "description": "Device-to-host",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "BREQUEST": {
    +              "description": "SETUP data, byte 1, bRequest",
    +              "offset": 1156,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "BREQUEST": {
    +                    "description": "SETUP data, byte 1, bRequest. Values provided for standard requests only, user must implement class and vendor values.",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "enum": {
    +                      "size": 8,
    +                      "children": {
    +                        "enum_fields": {
    +                          "STD_GET_STATUS": {
    +                            "description": "Standard request GET_STATUS",
    +                            "value": 0
    +                          },
    +                          "STD_CLEAR_FEATURE": {
    +                            "description": "Standard request CLEAR_FEATURE",
    +                            "value": 1
    +                          },
    +                          "STD_SET_FEATURE": {
    +                            "description": "Standard request SET_FEATURE",
    +                            "value": 3
    +                          },
    +                          "STD_SET_ADDRESS": {
    +                            "description": "Standard request SET_ADDRESS",
    +                            "value": 5
    +                          },
    +                          "STD_GET_DESCRIPTOR": {
    +                            "description": "Standard request GET_DESCRIPTOR",
    +                            "value": 6
    +                          },
    +                          "STD_SET_DESCRIPTOR": {
    +                            "description": "Standard request SET_DESCRIPTOR",
    +                            "value": 7
    +                          },
    +                          "STD_GET_CONFIGURATION": {
    +                            "description": "Standard request GET_CONFIGURATION",
    +                            "value": 8
    +                          },
    +                          "STD_SET_CONFIGURATION": {
    +                            "description": "Standard request SET_CONFIGURATION",
    +                            "value": 9
    +                          },
    +                          "STD_GET_INTERFACE": {
    +                            "description": "Standard request GET_INTERFACE",
    +                            "value": 10
    +                          },
    +                          "STD_SET_INTERFACE": {
    +                            "description": "Standard request SET_INTERFACE",
    +                            "value": 11
    +                          },
    +                          "STD_SYNCH_FRAME": {
    +                            "description": "Standard request SYNCH_FRAME",
    +                            "value": 12
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "WVALUEL": {
    +              "description": "SETUP data, byte 2, LSB of wValue",
    +              "offset": 1160,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "WVALUEL": {
    +                    "description": "SETUP data, byte 2, LSB of wValue",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "WVALUEH": {
    +              "description": "SETUP data, byte 3, MSB of wValue",
    +              "offset": 1164,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "WVALUEH": {
    +                    "description": "SETUP data, byte 3, MSB of wValue",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "WINDEXL": {
    +              "description": "SETUP data, byte 4, LSB of wIndex",
    +              "offset": 1168,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "WINDEXL": {
    +                    "description": "SETUP data, byte 4, LSB of wIndex",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "WINDEXH": {
    +              "description": "SETUP data, byte 5, MSB of wIndex",
    +              "offset": 1172,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "WINDEXH": {
    +                    "description": "SETUP data, byte 5, MSB of wIndex",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "WLENGTHL": {
    +              "description": "SETUP data, byte 6, LSB of wLength",
    +              "offset": 1176,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "WLENGTHL": {
    +                    "description": "SETUP data, byte 6, LSB of wLength",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "WLENGTHH": {
    +              "description": "SETUP data, byte 7, MSB of wLength",
    +              "offset": 1180,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "WLENGTHH": {
    +                    "description": "SETUP data, byte 7, MSB of wLength",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable USB",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable USB",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "USB peripheral is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "USB peripheral is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "USBPULLUP": {
    +              "description": "Control of the USB pull-up",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CONNECT": {
    +                    "description": "Control of the USB pull-up on the D+ line",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Pull-up is disconnected",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Pull-up is connected to D+",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "DPDMVALUE": {
    +              "description": "State D+ and D- lines will be forced into by the DPDMDRIVE task. The DPDMNODRIVE task reverts the control of the lines to MAC IP (no forcing).",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STATE": {
    +                    "description": "State D+ and D- lines will be forced into by the DPDMDRIVE task",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Resume": {
    +                            "description": "D+ forced low, D- forced high (K state) for a timing preset in hardware (50 us or 5 ms, depending on bus state)",
    +                            "value": 1
    +                          },
    +                          "J": {
    +                            "description": "D+ forced high, D- forced low (J state)",
    +                            "value": 2
    +                          },
    +                          "K": {
    +                            "description": "D+ forced low, D- forced high (K state)",
    +                            "value": 4
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "DTOGGLE": {
    +              "description": "Data toggle control and status",
    +              "offset": 1292,
    +              "size": 32,
    +              "reset_value": 256,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EP": {
    +                    "description": "Select bulk endpoint number",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "IO": {
    +                    "description": "Selects IN or OUT endpoint",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Out": {
    +                            "description": "Selects OUT endpoint",
    +                            "value": 0
    +                          },
    +                          "In": {
    +                            "description": "Selects IN endpoint",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "VALUE": {
    +                    "description": "Data toggle value",
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Nop": {
    +                            "description": "No action on data toggle when writing the register with this value",
    +                            "value": 0
    +                          },
    +                          "Data0": {
    +                            "description": "Data toggle is DATA0 on endpoint set by EP and IO",
    +                            "value": 1
    +                          },
    +                          "Data1": {
    +                            "description": "Data toggle is DATA1 on endpoint set by EP and IO",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EPINEN": {
    +              "description": "Endpoint IN enable",
    +              "offset": 1296,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN0": {
    +                    "description": "Enable IN endpoint 0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable endpoint IN 0 (no response to IN tokens)",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable endpoint IN 0 (response to IN tokens)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN1": {
    +                    "description": "Enable IN endpoint 1",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable endpoint IN 1 (no response to IN tokens)",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable endpoint IN 1 (response to IN tokens)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN2": {
    +                    "description": "Enable IN endpoint 2",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable endpoint IN 2 (no response to IN tokens)",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable endpoint IN 2 (response to IN tokens)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN3": {
    +                    "description": "Enable IN endpoint 3",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable endpoint IN 3 (no response to IN tokens)",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable endpoint IN 3 (response to IN tokens)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN4": {
    +                    "description": "Enable IN endpoint 4",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable endpoint IN 4 (no response to IN tokens)",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable endpoint IN 4 (response to IN tokens)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN5": {
    +                    "description": "Enable IN endpoint 5",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable endpoint IN 5 (no response to IN tokens)",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable endpoint IN 5 (response to IN tokens)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN6": {
    +                    "description": "Enable IN endpoint 6",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable endpoint IN 6 (no response to IN tokens)",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable endpoint IN 6 (response to IN tokens)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN7": {
    +                    "description": "Enable IN endpoint 7",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable endpoint IN 7 (no response to IN tokens)",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable endpoint IN 7 (response to IN tokens)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ISOIN": {
    +                    "description": "Enable ISO IN endpoint",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable ISO IN endpoint 8",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable ISO IN endpoint 8",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EPOUTEN": {
    +              "description": "Endpoint OUT enable",
    +              "offset": 1300,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUT0": {
    +                    "description": "Enable OUT endpoint 0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable endpoint OUT 0 (no response to OUT tokens)",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable endpoint OUT 0 (response to OUT tokens)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUT1": {
    +                    "description": "Enable OUT endpoint 1",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable endpoint OUT 1 (no response to OUT tokens)",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable endpoint OUT 1 (response to OUT tokens)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUT2": {
    +                    "description": "Enable OUT endpoint 2",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable endpoint OUT 2 (no response to OUT tokens)",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable endpoint OUT 2 (response to OUT tokens)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUT3": {
    +                    "description": "Enable OUT endpoint 3",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable endpoint OUT 3 (no response to OUT tokens)",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable endpoint OUT 3 (response to OUT tokens)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUT4": {
    +                    "description": "Enable OUT endpoint 4",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable endpoint OUT 4 (no response to OUT tokens)",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable endpoint OUT 4 (response to OUT tokens)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUT5": {
    +                    "description": "Enable OUT endpoint 5",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable endpoint OUT 5 (no response to OUT tokens)",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable endpoint OUT 5 (response to OUT tokens)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUT6": {
    +                    "description": "Enable OUT endpoint 6",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable endpoint OUT 6 (no response to OUT tokens)",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable endpoint OUT 6 (response to OUT tokens)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUT7": {
    +                    "description": "Enable OUT endpoint 7",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable endpoint OUT 7 (no response to OUT tokens)",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable endpoint OUT 7 (response to OUT tokens)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ISOOUT": {
    +                    "description": "Enable ISO OUT endpoint 8",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable ISO OUT endpoint 8",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable ISO OUT endpoint 8",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EPSTALL": {
    +              "description": "STALL endpoints",
    +              "offset": 1304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "EP": {
    +                    "description": "Select endpoint number",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "IO": {
    +                    "description": "Selects IN or OUT endpoint",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Out": {
    +                            "description": "Selects OUT endpoint",
    +                            "value": 0
    +                          },
    +                          "In": {
    +                            "description": "Selects IN endpoint",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STALL": {
    +                    "description": "Stall selected endpoint",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "UnStall": {
    +                            "description": "Don't stall selected endpoint",
    +                            "value": 0
    +                          },
    +                          "Stall": {
    +                            "description": "Stall selected endpoint",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ISOSPLIT": {
    +              "description": "Controls the split of ISO buffers",
    +              "offset": 1308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SPLIT": {
    +                    "description": "Controls the split of ISO buffers",
    +                    "offset": 0,
    +                    "size": 16,
    +                    "enum": {
    +                      "size": 16,
    +                      "children": {
    +                        "enum_fields": {
    +                          "OneDir": {
    +                            "description": "Full buffer dedicated to either iso IN or OUT",
    +                            "value": 0
    +                          },
    +                          "HalfIN": {
    +                            "description": "Lower half for IN, upper half for OUT",
    +                            "value": 128
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "FRAMECNTR": {
    +              "description": "Returns the current value of the start of frame counter",
    +              "offset": 1312,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "FRAMECNTR": {
    +                    "description": "Returns the current value of the start of frame counter",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "LOWPOWER": {
    +              "description": "Controls USBD peripheral low power mode during USB suspend",
    +              "offset": 1324,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LOWPOWER": {
    +                    "description": "Controls USBD peripheral low-power mode during USB suspend",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ForceNormal": {
    +                            "description": "Software must write this value to exit low power mode and before performing a remote wake-up",
    +                            "value": 0
    +                          },
    +                          "LowPower": {
    +                            "description": "Software must write this value to enter low power mode after DMA and software have finished interacting with the USB peripheral",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ISOINCONFIG": {
    +              "description": "Controls the response of the ISO IN endpoint to an IN token when no data is ready to be sent",
    +              "offset": 1328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESPONSE": {
    +                    "description": "Controls the response of the ISO IN endpoint to an IN token when no data is ready to be sent",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoResp": {
    +                            "description": "Endpoint does not respond in that case",
    +                            "value": 0
    +                          },
    +                          "ZeroData": {
    +                            "description": "Endpoint responds with a zero-length data packet in that case",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "NFCT": {
    +        "description": "NFC-A compatible radio",
    +        "children": {
    +          "registers": {
    +            "TASKS_ACTIVATE": {
    +              "description": "Activate NFCT peripheral for incoming and outgoing frames, change state to activated",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_ACTIVATE": {
    +                    "description": "Activate NFCT peripheral for incoming and outgoing frames, change state to activated",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_DISABLE": {
    +              "description": "Disable NFCT peripheral",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_DISABLE": {
    +                    "description": "Disable NFCT peripheral",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_SENSE": {
    +              "description": "Enable NFC sense field mode, change state to sense mode",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_SENSE": {
    +                    "description": "Enable NFC sense field mode, change state to sense mode",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STARTTX": {
    +              "description": "Start transmission of an outgoing frame, change state to transmit",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STARTTX": {
    +                    "description": "Start transmission of an outgoing frame, change state to transmit",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_ENABLERXDATA": {
    +              "description": "Initializes the EasyDMA for receive.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_ENABLERXDATA": {
    +                    "description": "Initializes the EasyDMA for receive.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_GOIDLE": {
    +              "description": "Force state machine to IDLE state",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_GOIDLE": {
    +                    "description": "Force state machine to IDLE state",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_GOSLEEP": {
    +              "description": "Force state machine to SLEEP_A state",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_GOSLEEP": {
    +                    "description": "Force state machine to SLEEP_A state",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_READY": {
    +              "description": "The NFCT peripheral is ready to receive and send frames",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_READY": {
    +                    "description": "The NFCT peripheral is ready to receive and send frames",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_FIELDDETECTED": {
    +              "description": "Remote NFC field detected",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_FIELDDETECTED": {
    +                    "description": "Remote NFC field detected",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_FIELDLOST": {
    +              "description": "Remote NFC field lost",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_FIELDLOST": {
    +                    "description": "Remote NFC field lost",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_TXFRAMESTART": {
    +              "description": "Marks the start of the first symbol of a transmitted frame",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_TXFRAMESTART": {
    +                    "description": "Marks the start of the first symbol of a transmitted frame",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_TXFRAMEEND": {
    +              "description": "Marks the end of the last transmitted on-air symbol of a frame",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_TXFRAMEEND": {
    +                    "description": "Marks the end of the last transmitted on-air symbol of a frame",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_RXFRAMESTART": {
    +              "description": "Marks the end of the first symbol of a received frame",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_RXFRAMESTART": {
    +                    "description": "Marks the end of the first symbol of a received frame",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_RXFRAMEEND": {
    +              "description": "Received data has been checked (CRC, parity) and transferred to RAM, and EasyDMA has ended accessing the RX buffer",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_RXFRAMEEND": {
    +                    "description": "Received data has been checked (CRC, parity) and transferred to RAM, and EasyDMA has ended accessing the RX buffer",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_ERROR": {
    +              "description": "NFC error reported. The ERRORSTATUS register contains details on the source of the error.",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_ERROR": {
    +                    "description": "NFC error reported. The ERRORSTATUS register contains details on the source of the error.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_RXERROR": {
    +              "description": "NFC RX frame error reported. The FRAMESTATUS.RX register contains details on the source of the error.",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_RXERROR": {
    +                    "description": "NFC RX frame error reported. The FRAMESTATUS.RX register contains details on the source of the error.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_ENDRX": {
    +              "description": "RX buffer (as defined by PACKETPTR and MAXLEN) in Data RAM full.",
    +              "offset": 300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_ENDRX": {
    +                    "description": "RX buffer (as defined by PACKETPTR and MAXLEN) in Data RAM full.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_ENDTX": {
    +              "description": "Transmission of data in RAM has ended, and EasyDMA has ended accessing the TX buffer",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_ENDTX": {
    +                    "description": "Transmission of data in RAM has ended, and EasyDMA has ended accessing the TX buffer",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_AUTOCOLRESSTARTED": {
    +              "description": "Auto collision resolution process has started",
    +              "offset": 312,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_AUTOCOLRESSTARTED": {
    +                    "description": "Auto collision resolution process has started",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_COLLISION": {
    +              "description": "NFC auto collision resolution error reported.",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_COLLISION": {
    +                    "description": "NFC auto collision resolution error reported.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_SELECTED": {
    +              "description": "NFC auto collision resolution successfully completed",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_SELECTED": {
    +                    "description": "NFC auto collision resolution successfully completed",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_STARTED": {
    +              "description": "EasyDMA is ready to receive or send frames.",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_STARTED": {
    +                    "description": "EasyDMA is ready to receive or send frames.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SHORTS": {
    +              "description": "Shortcuts between local events and tasks",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FIELDDETECTED_ACTIVATE": {
    +                    "description": "Shortcut between event FIELDDETECTED and task ACTIVATE",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FIELDLOST_SENSE": {
    +                    "description": "Shortcut between event FIELDLOST and task SENSE",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXFRAMEEND_ENABLERXDATA": {
    +                    "description": "Shortcut between event TXFRAMEEND and task ENABLERXDATA",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTEN": {
    +              "description": "Enable or disable interrupt",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "Enable or disable interrupt for event READY",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FIELDDETECTED": {
    +                    "description": "Enable or disable interrupt for event FIELDDETECTED",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FIELDLOST": {
    +                    "description": "Enable or disable interrupt for event FIELDLOST",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXFRAMESTART": {
    +                    "description": "Enable or disable interrupt for event TXFRAMESTART",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXFRAMEEND": {
    +                    "description": "Enable or disable interrupt for event TXFRAMEEND",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXFRAMESTART": {
    +                    "description": "Enable or disable interrupt for event RXFRAMESTART",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXFRAMEEND": {
    +                    "description": "Enable or disable interrupt for event RXFRAMEEND",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Enable or disable interrupt for event ERROR",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXERROR": {
    +                    "description": "Enable or disable interrupt for event RXERROR",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDRX": {
    +                    "description": "Enable or disable interrupt for event ENDRX",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDTX": {
    +                    "description": "Enable or disable interrupt for event ENDTX",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AUTOCOLRESSTARTED": {
    +                    "description": "Enable or disable interrupt for event AUTOCOLRESSTARTED",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COLLISION": {
    +                    "description": "Enable or disable interrupt for event COLLISION",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SELECTED": {
    +                    "description": "Enable or disable interrupt for event SELECTED",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STARTED": {
    +                    "description": "Enable or disable interrupt for event STARTED",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "Write '1' to enable interrupt for event READY",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FIELDDETECTED": {
    +                    "description": "Write '1' to enable interrupt for event FIELDDETECTED",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FIELDLOST": {
    +                    "description": "Write '1' to enable interrupt for event FIELDLOST",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXFRAMESTART": {
    +                    "description": "Write '1' to enable interrupt for event TXFRAMESTART",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXFRAMEEND": {
    +                    "description": "Write '1' to enable interrupt for event TXFRAMEEND",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXFRAMESTART": {
    +                    "description": "Write '1' to enable interrupt for event RXFRAMESTART",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXFRAMEEND": {
    +                    "description": "Write '1' to enable interrupt for event RXFRAMEEND",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Write '1' to enable interrupt for event ERROR",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXERROR": {
    +                    "description": "Write '1' to enable interrupt for event RXERROR",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDRX": {
    +                    "description": "Write '1' to enable interrupt for event ENDRX",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDTX": {
    +                    "description": "Write '1' to enable interrupt for event ENDTX",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AUTOCOLRESSTARTED": {
    +                    "description": "Write '1' to enable interrupt for event AUTOCOLRESSTARTED",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COLLISION": {
    +                    "description": "Write '1' to enable interrupt for event COLLISION",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SELECTED": {
    +                    "description": "Write '1' to enable interrupt for event SELECTED",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STARTED": {
    +                    "description": "Write '1' to enable interrupt for event STARTED",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "Write '1' to disable interrupt for event READY",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FIELDDETECTED": {
    +                    "description": "Write '1' to disable interrupt for event FIELDDETECTED",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FIELDLOST": {
    +                    "description": "Write '1' to disable interrupt for event FIELDLOST",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXFRAMESTART": {
    +                    "description": "Write '1' to disable interrupt for event TXFRAMESTART",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXFRAMEEND": {
    +                    "description": "Write '1' to disable interrupt for event TXFRAMEEND",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXFRAMESTART": {
    +                    "description": "Write '1' to disable interrupt for event RXFRAMESTART",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXFRAMEEND": {
    +                    "description": "Write '1' to disable interrupt for event RXFRAMEEND",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Write '1' to disable interrupt for event ERROR",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXERROR": {
    +                    "description": "Write '1' to disable interrupt for event RXERROR",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDRX": {
    +                    "description": "Write '1' to disable interrupt for event ENDRX",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDTX": {
    +                    "description": "Write '1' to disable interrupt for event ENDTX",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AUTOCOLRESSTARTED": {
    +                    "description": "Write '1' to disable interrupt for event AUTOCOLRESSTARTED",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COLLISION": {
    +                    "description": "Write '1' to disable interrupt for event COLLISION",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SELECTED": {
    +                    "description": "Write '1' to disable interrupt for event SELECTED",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STARTED": {
    +                    "description": "Write '1' to disable interrupt for event STARTED",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ERRORSTATUS": {
    +              "description": "NFC Error Status register",
    +              "offset": 1028,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FRAMEDELAYTIMEOUT": {
    +                    "description": "No STARTTX task triggered before expiration of the time set in FRAMEDELAYMAX",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "NFCTAGSTATE": {
    +              "description": "NfcTag state register",
    +              "offset": 1040,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "NFCTAGSTATE": {
    +                    "description": "NfcTag state",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled or sense",
    +                            "value": 0
    +                          },
    +                          "RampUp": {
    +                            "description": "RampUp",
    +                            "value": 2
    +                          },
    +                          "Idle": {
    +                            "description": "Idle",
    +                            "value": 3
    +                          },
    +                          "Receive": {
    +                            "description": "Receive",
    +                            "value": 4
    +                          },
    +                          "FrameDelay": {
    +                            "description": "FrameDelay",
    +                            "value": 5
    +                          },
    +                          "Transmit": {
    +                            "description": "Transmit",
    +                            "value": 6
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SLEEPSTATE": {
    +              "description": "Sleep state during automatic collision resolution",
    +              "offset": 1056,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SLEEPSTATE": {
    +                    "description": "Reflects the sleep state during automatic collision resolution. Set to IDLE \n        by a GOIDLE task. Set to SLEEP_A when a valid SLEEP_REQ frame is received or by a \n        GOSLEEP task.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Idle": {
    +                            "description": "State is IDLE.",
    +                            "value": 0
    +                          },
    +                          "SleepA": {
    +                            "description": "State is SLEEP_A.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "FIELDPRESENT": {
    +              "description": "Indicates the presence or not of a valid field",
    +              "offset": 1084,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "FIELDPRESENT": {
    +                    "description": "Indicates if a valid field is present. Available only in the activated state.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoField": {
    +                            "description": "No valid field detected",
    +                            "value": 0
    +                          },
    +                          "FieldPresent": {
    +                            "description": "Valid field detected",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LOCKDETECT": {
    +                    "description": "Indicates if the low level has locked to the field",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotLocked": {
    +                            "description": "Not locked to field",
    +                            "value": 0
    +                          },
    +                          "Locked": {
    +                            "description": "Locked to field",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "FRAMEDELAYMIN": {
    +              "description": "Minimum frame delay",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 1152,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FRAMEDELAYMIN": {
    +                    "description": "Minimum frame delay in number of 13.56 MHz clocks",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FRAMEDELAYMAX": {
    +              "description": "Maximum frame delay",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 4096,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FRAMEDELAYMAX": {
    +                    "description": "Maximum frame delay in number of 13.56 MHz clocks",
    +                    "offset": 0,
    +                    "size": 20
    +                  }
    +                }
    +              }
    +            },
    +            "FRAMEDELAYMODE": {
    +              "description": "Configuration register for the Frame Delay Timer",
    +              "offset": 1292,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FRAMEDELAYMODE": {
    +                    "description": "Configuration register for the Frame Delay Timer",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "FreeRun": {
    +                            "description": "Transmission is independent of frame timer and will start when the STARTTX task is triggered. No timeout.",
    +                            "value": 0
    +                          },
    +                          "Window": {
    +                            "description": "Frame is transmitted between FRAMEDELAYMIN and FRAMEDELAYMAX",
    +                            "value": 1
    +                          },
    +                          "ExactVal": {
    +                            "description": "Frame is transmitted exactly at FRAMEDELAYMAX",
    +                            "value": 2
    +                          },
    +                          "WindowGrid": {
    +                            "description": "Frame is transmitted on a bit grid between FRAMEDELAYMIN and FRAMEDELAYMAX",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PACKETPTR": {
    +              "description": "Packet pointer for TXD and RXD data storage in Data RAM",
    +              "offset": 1296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PTR": {
    +                    "description": "Packet pointer for TXD and RXD data storage in Data RAM. This address is a byte-aligned RAM address.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MAXLEN": {
    +              "description": "Size of the RAM buffer allocated to TXD and RXD data storage each",
    +              "offset": 1300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MAXLEN": {
    +                    "description": "Size of the RAM buffer allocated to TXD and RXD data storage each",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "NFCID1_LAST": {
    +              "description": "Last NFCID1 part (4, 7 or 10 bytes ID)",
    +              "offset": 1424,
    +              "size": 32,
    +              "reset_value": 25443,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NFCID1_Z": {
    +                    "description": "NFCID1 byte Z (very last byte sent)",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "NFCID1_Y": {
    +                    "description": "NFCID1 byte Y",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "NFCID1_X": {
    +                    "description": "NFCID1 byte X",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "NFCID1_W": {
    +                    "description": "NFCID1 byte W",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "NFCID1_2ND_LAST": {
    +              "description": "Second last NFCID1 part (7 or 10 bytes ID)",
    +              "offset": 1428,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NFCID1_V": {
    +                    "description": "NFCID1 byte V",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "NFCID1_U": {
    +                    "description": "NFCID1 byte U",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "NFCID1_T": {
    +                    "description": "NFCID1 byte T",
    +                    "offset": 16,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "NFCID1_3RD_LAST": {
    +              "description": "Third last NFCID1 part (10 bytes ID)",
    +              "offset": 1432,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NFCID1_S": {
    +                    "description": "NFCID1 byte S",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "NFCID1_R": {
    +                    "description": "NFCID1 byte R",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "NFCID1_Q": {
    +                    "description": "NFCID1 byte Q",
    +                    "offset": 16,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "AUTOCOLRESCONFIG": {
    +              "description": "Controls the auto collision resolution function. This setting must be done before the NFCT peripheral is enabled.",
    +              "offset": 1436,
    +              "size": 32,
    +              "reset_value": 2,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MODE": {
    +                    "description": "Enables/disables auto collision resolution",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Enabled": {
    +                            "description": "Auto collision resolution enabled",
    +                            "value": 0
    +                          },
    +                          "Disabled": {
    +                            "description": "Auto collision resolution disabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SENSRES": {
    +              "description": "NFC-A SENS_RES auto-response settings",
    +              "offset": 1440,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BITFRAMESDD": {
    +                    "description": "Bit frame SDD as defined by the b5:b1 of byte 1 in SENS_RES response in the NFC Forum, NFC Digital Protocol Technical Specification",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SDD00000": {
    +                            "description": "SDD pattern 00000",
    +                            "value": 0
    +                          },
    +                          "SDD00001": {
    +                            "description": "SDD pattern 00001",
    +                            "value": 1
    +                          },
    +                          "SDD00010": {
    +                            "description": "SDD pattern 00010",
    +                            "value": 2
    +                          },
    +                          "SDD00100": {
    +                            "description": "SDD pattern 00100",
    +                            "value": 4
    +                          },
    +                          "SDD01000": {
    +                            "description": "SDD pattern 01000",
    +                            "value": 8
    +                          },
    +                          "SDD10000": {
    +                            "description": "SDD pattern 10000",
    +                            "value": 16
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RFU5": {
    +                    "description": "Reserved for future use. Shall be 0.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NFCIDSIZE": {
    +                    "description": "NFCID1 size. This value is used by the auto collision resolution engine.",
    +                    "offset": 6,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NFCID1Single": {
    +                            "description": "NFCID1 size: single (4 bytes)",
    +                            "value": 0
    +                          },
    +                          "NFCID1Double": {
    +                            "description": "NFCID1 size: double (7 bytes)",
    +                            "value": 1
    +                          },
    +                          "NFCID1Triple": {
    +                            "description": "NFCID1 size: triple (10 bytes)",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PLATFCONFIG": {
    +                    "description": "Tag platform configuration as defined by the b4:b1 of byte 2 in SENS_RES response in the NFC Forum, NFC Digital Protocol Technical Specification",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "RFU74": {
    +                    "description": "Reserved for future use. Shall be 0.",
    +                    "offset": 12,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "SELRES": {
    +              "description": "NFC-A SEL_RES auto-response settings",
    +              "offset": 1444,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RFU10": {
    +                    "description": "Reserved for future use. Shall be 0.",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "CASCADE": {
    +                    "description": "Cascade as defined by the b3 of SEL_RES response in the NFC Forum, NFC Digital Protocol Technical Specification (controlled by hardware, shall be 0)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RFU43": {
    +                    "description": "Reserved for future use. Shall be 0.",
    +                    "offset": 3,
    +                    "size": 2
    +                  },
    +                  "PROTOCOL": {
    +                    "description": "Protocol as defined by the b7:b6 of SEL_RES response in the NFC Forum, NFC Digital Protocol Technical Specification",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "RFU7": {
    +                    "description": "Reserved for future use. Shall be 0.",
    +                    "offset": 7,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "GPIOTE": {
    +        "description": "GPIO Tasks and Events",
    +        "children": {
    +          "registers": {
    +            "TASKS_OUT": {
    +              "description": "Description collection: Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is configured in CONFIG[n].POLARITY.",
    +              "offset": 0,
    +              "size": 32,
    +              "count": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_OUT": {
    +                    "description": "Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is configured in CONFIG[n].POLARITY.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_SET": {
    +              "description": "Description collection: Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is to set it high.",
    +              "offset": 48,
    +              "size": 32,
    +              "count": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_SET": {
    +                    "description": "Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is to set it high.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_CLR": {
    +              "description": "Description collection: Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is to set it low.",
    +              "offset": 96,
    +              "size": 32,
    +              "count": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_CLR": {
    +                    "description": "Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is to set it low.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_IN": {
    +              "description": "Description collection: Event generated from pin specified in CONFIG[n].PSEL",
    +              "offset": 256,
    +              "size": 32,
    +              "count": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_IN": {
    +                    "description": "Event generated from pin specified in CONFIG[n].PSEL",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_PORT": {
    +              "description": "Event generated from multiple input GPIO pins with SENSE mechanism enabled",
    +              "offset": 380,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_PORT": {
    +                    "description": "Event generated from multiple input GPIO pins with SENSE mechanism enabled",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN0": {
    +                    "description": "Write '1' to enable interrupt for event IN[0]",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN1": {
    +                    "description": "Write '1' to enable interrupt for event IN[1]",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN2": {
    +                    "description": "Write '1' to enable interrupt for event IN[2]",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN3": {
    +                    "description": "Write '1' to enable interrupt for event IN[3]",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN4": {
    +                    "description": "Write '1' to enable interrupt for event IN[4]",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN5": {
    +                    "description": "Write '1' to enable interrupt for event IN[5]",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN6": {
    +                    "description": "Write '1' to enable interrupt for event IN[6]",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN7": {
    +                    "description": "Write '1' to enable interrupt for event IN[7]",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PORT": {
    +                    "description": "Write '1' to enable interrupt for event PORT",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN0": {
    +                    "description": "Write '1' to disable interrupt for event IN[0]",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN1": {
    +                    "description": "Write '1' to disable interrupt for event IN[1]",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN2": {
    +                    "description": "Write '1' to disable interrupt for event IN[2]",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN3": {
    +                    "description": "Write '1' to disable interrupt for event IN[3]",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN4": {
    +                    "description": "Write '1' to disable interrupt for event IN[4]",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN5": {
    +                    "description": "Write '1' to disable interrupt for event IN[5]",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN6": {
    +                    "description": "Write '1' to disable interrupt for event IN[6]",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IN7": {
    +                    "description": "Write '1' to disable interrupt for event IN[7]",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PORT": {
    +                    "description": "Write '1' to disable interrupt for event PORT",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CONFIG": {
    +              "description": "Description collection: Configuration for OUT[n], SET[n] and CLR[n] tasks and IN[n] event",
    +              "offset": 1296,
    +              "size": 32,
    +              "count": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MODE": {
    +                    "description": "Mode",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled. Pin specified by PSEL will not be acquired by the GPIOTE module.",
    +                            "value": 0
    +                          },
    +                          "Event": {
    +                            "description": "Event mode",
    +                            "value": 1
    +                          },
    +                          "Task": {
    +                            "description": "Task mode",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PSEL": {
    +                    "description": "GPIO number associated with SET[n], CLR[n] and OUT[n] tasks and IN[n] event",
    +                    "offset": 8,
    +                    "size": 5
    +                  },
    +                  "PORT": {
    +                    "description": "Port number",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "POLARITY": {
    +                    "description": "When In task mode: Operation to be performed on output when OUT[n] task is triggered. When In event mode: Operation on input that shall trigger IN[n] event.",
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "None": {
    +                            "description": "Task mode: No effect on pin from OUT[n] task. Event mode: no IN[n] event generated on pin activity.",
    +                            "value": 0
    +                          },
    +                          "LoToHi": {
    +                            "description": "Task mode: Set pin from OUT[n] task. Event mode: Generate IN[n] event when rising edge on pin.",
    +                            "value": 1
    +                          },
    +                          "HiToLo": {
    +                            "description": "Task mode: Clear pin from OUT[n] task. Event mode: Generate IN[n] event when falling edge on pin.",
    +                            "value": 2
    +                          },
    +                          "Toggle": {
    +                            "description": "Task mode: Toggle pin from OUT[n]. Event mode: Generate IN[n] when any change on pin.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTINIT": {
    +                    "description": "When in task mode: Initial value of the output when the GPIOTE channel is configured. When in event mode: No effect.",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Task mode: Initial value of pin before task triggering is low",
    +                            "value": 0
    +                          },
    +                          "High": {
    +                            "description": "Task mode: Initial value of pin before task triggering is high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SAADC": {
    +        "description": "Successive approximation register (SAR) analog-to-digital converter",
    +        "children": {
    +          "registers": {
    +            "TASKS_START": {
    +              "description": "Starts the SAADC and prepares the result buffer in RAM",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_START": {
    +                    "description": "Starts the SAADC and prepares the result buffer in RAM",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_SAMPLE": {
    +              "description": "Takes one SAADC sample",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_SAMPLE": {
    +                    "description": "Takes one SAADC sample",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stops the SAADC and terminates all on-going conversions",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STOP": {
    +                    "description": "Stops the SAADC and terminates all on-going conversions",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_CALIBRATEOFFSET": {
    +              "description": "Starts offset auto-calibration",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_CALIBRATEOFFSET": {
    +                    "description": "Starts offset auto-calibration",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_STARTED": {
    +              "description": "The SAADC has started",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_STARTED": {
    +                    "description": "The SAADC has started",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_END": {
    +              "description": "The SAADC has filled up the result buffer",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_END": {
    +                    "description": "The SAADC has filled up the result buffer",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_DONE": {
    +              "description": "A conversion task has been completed. Depending on the configuration, multiple conversions might be needed for a result to be transferred to RAM.",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_DONE": {
    +                    "description": "A conversion task has been completed. Depending on the configuration, multiple conversions might be needed for a result to be transferred to RAM.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_RESULTDONE": {
    +              "description": "Result ready for transfer to RAM",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_RESULTDONE": {
    +                    "description": "Result ready for transfer to RAM",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_CALIBRATEDONE": {
    +              "description": "Calibration is complete",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_CALIBRATEDONE": {
    +                    "description": "Calibration is complete",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_STOPPED": {
    +              "description": "The SAADC has stopped",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_STOPPED": {
    +                    "description": "The SAADC has stopped",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTEN": {
    +              "description": "Enable or disable interrupt",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STARTED": {
    +                    "description": "Enable or disable interrupt for event STARTED",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "END": {
    +                    "description": "Enable or disable interrupt for event END",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DONE": {
    +                    "description": "Enable or disable interrupt for event DONE",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESULTDONE": {
    +                    "description": "Enable or disable interrupt for event RESULTDONE",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CALIBRATEDONE": {
    +                    "description": "Enable or disable interrupt for event CALIBRATEDONE",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STOPPED": {
    +                    "description": "Enable or disable interrupt for event STOPPED",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH0LIMITH": {
    +                    "description": "Enable or disable interrupt for event CH0LIMITH",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH0LIMITL": {
    +                    "description": "Enable or disable interrupt for event CH0LIMITL",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH1LIMITH": {
    +                    "description": "Enable or disable interrupt for event CH1LIMITH",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH1LIMITL": {
    +                    "description": "Enable or disable interrupt for event CH1LIMITL",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH2LIMITH": {
    +                    "description": "Enable or disable interrupt for event CH2LIMITH",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH2LIMITL": {
    +                    "description": "Enable or disable interrupt for event CH2LIMITL",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH3LIMITH": {
    +                    "description": "Enable or disable interrupt for event CH3LIMITH",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH3LIMITL": {
    +                    "description": "Enable or disable interrupt for event CH3LIMITL",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH4LIMITH": {
    +                    "description": "Enable or disable interrupt for event CH4LIMITH",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH4LIMITL": {
    +                    "description": "Enable or disable interrupt for event CH4LIMITL",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH5LIMITH": {
    +                    "description": "Enable or disable interrupt for event CH5LIMITH",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH5LIMITL": {
    +                    "description": "Enable or disable interrupt for event CH5LIMITL",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH6LIMITH": {
    +                    "description": "Enable or disable interrupt for event CH6LIMITH",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH6LIMITL": {
    +                    "description": "Enable or disable interrupt for event CH6LIMITL",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH7LIMITH": {
    +                    "description": "Enable or disable interrupt for event CH7LIMITH",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH7LIMITL": {
    +                    "description": "Enable or disable interrupt for event CH7LIMITL",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STARTED": {
    +                    "description": "Write '1' to enable interrupt for event STARTED",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "END": {
    +                    "description": "Write '1' to enable interrupt for event END",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DONE": {
    +                    "description": "Write '1' to enable interrupt for event DONE",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESULTDONE": {
    +                    "description": "Write '1' to enable interrupt for event RESULTDONE",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CALIBRATEDONE": {
    +                    "description": "Write '1' to enable interrupt for event CALIBRATEDONE",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STOPPED": {
    +                    "description": "Write '1' to enable interrupt for event STOPPED",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH0LIMITH": {
    +                    "description": "Write '1' to enable interrupt for event CH0LIMITH",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH0LIMITL": {
    +                    "description": "Write '1' to enable interrupt for event CH0LIMITL",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH1LIMITH": {
    +                    "description": "Write '1' to enable interrupt for event CH1LIMITH",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH1LIMITL": {
    +                    "description": "Write '1' to enable interrupt for event CH1LIMITL",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH2LIMITH": {
    +                    "description": "Write '1' to enable interrupt for event CH2LIMITH",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH2LIMITL": {
    +                    "description": "Write '1' to enable interrupt for event CH2LIMITL",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH3LIMITH": {
    +                    "description": "Write '1' to enable interrupt for event CH3LIMITH",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH3LIMITL": {
    +                    "description": "Write '1' to enable interrupt for event CH3LIMITL",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH4LIMITH": {
    +                    "description": "Write '1' to enable interrupt for event CH4LIMITH",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH4LIMITL": {
    +                    "description": "Write '1' to enable interrupt for event CH4LIMITL",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH5LIMITH": {
    +                    "description": "Write '1' to enable interrupt for event CH5LIMITH",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH5LIMITL": {
    +                    "description": "Write '1' to enable interrupt for event CH5LIMITL",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH6LIMITH": {
    +                    "description": "Write '1' to enable interrupt for event CH6LIMITH",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH6LIMITL": {
    +                    "description": "Write '1' to enable interrupt for event CH6LIMITL",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH7LIMITH": {
    +                    "description": "Write '1' to enable interrupt for event CH7LIMITH",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH7LIMITL": {
    +                    "description": "Write '1' to enable interrupt for event CH7LIMITL",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STARTED": {
    +                    "description": "Write '1' to disable interrupt for event STARTED",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "END": {
    +                    "description": "Write '1' to disable interrupt for event END",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DONE": {
    +                    "description": "Write '1' to disable interrupt for event DONE",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESULTDONE": {
    +                    "description": "Write '1' to disable interrupt for event RESULTDONE",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CALIBRATEDONE": {
    +                    "description": "Write '1' to disable interrupt for event CALIBRATEDONE",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STOPPED": {
    +                    "description": "Write '1' to disable interrupt for event STOPPED",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH0LIMITH": {
    +                    "description": "Write '1' to disable interrupt for event CH0LIMITH",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH0LIMITL": {
    +                    "description": "Write '1' to disable interrupt for event CH0LIMITL",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH1LIMITH": {
    +                    "description": "Write '1' to disable interrupt for event CH1LIMITH",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH1LIMITL": {
    +                    "description": "Write '1' to disable interrupt for event CH1LIMITL",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH2LIMITH": {
    +                    "description": "Write '1' to disable interrupt for event CH2LIMITH",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH2LIMITL": {
    +                    "description": "Write '1' to disable interrupt for event CH2LIMITL",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH3LIMITH": {
    +                    "description": "Write '1' to disable interrupt for event CH3LIMITH",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH3LIMITL": {
    +                    "description": "Write '1' to disable interrupt for event CH3LIMITL",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH4LIMITH": {
    +                    "description": "Write '1' to disable interrupt for event CH4LIMITH",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH4LIMITL": {
    +                    "description": "Write '1' to disable interrupt for event CH4LIMITL",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH5LIMITH": {
    +                    "description": "Write '1' to disable interrupt for event CH5LIMITH",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH5LIMITL": {
    +                    "description": "Write '1' to disable interrupt for event CH5LIMITL",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH6LIMITH": {
    +                    "description": "Write '1' to disable interrupt for event CH6LIMITH",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH6LIMITL": {
    +                    "description": "Write '1' to disable interrupt for event CH6LIMITL",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH7LIMITH": {
    +                    "description": "Write '1' to disable interrupt for event CH7LIMITH",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH7LIMITL": {
    +                    "description": "Write '1' to disable interrupt for event CH7LIMITL",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "STATUS": {
    +              "description": "Status",
    +              "offset": 1024,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "STATUS": {
    +                    "description": "Status",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Ready": {
    +                            "description": "SAADC is ready. No on-going conversions.",
    +                            "value": 0
    +                          },
    +                          "Busy": {
    +                            "description": "SAADC is busy. Conversion in progress.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable or disable SAADC",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable SAADC",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable SAADC",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable SAADC",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "RESOLUTION": {
    +              "description": "Resolution configuration",
    +              "offset": 1520,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VAL": {
    +                    "description": "Set the resolution",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "8bit": {
    +                            "description": "8 bits",
    +                            "value": 0
    +                          },
    +                          "10bit": {
    +                            "description": "10 bits",
    +                            "value": 1
    +                          },
    +                          "12bit": {
    +                            "description": "12 bits",
    +                            "value": 2
    +                          },
    +                          "14bit": {
    +                            "description": "14 bits",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "OVERSAMPLE": {
    +              "description": "Oversampling configuration. The RESOLUTION is applied before averaging, thus for high OVERSAMPLE a higher RESOLUTION should be used.",
    +              "offset": 1524,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OVERSAMPLE": {
    +                    "description": "Oversample control",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Bypass": {
    +                            "description": "Bypass oversampling",
    +                            "value": 0
    +                          },
    +                          "Over2x": {
    +                            "description": "Oversample 2x",
    +                            "value": 1
    +                          },
    +                          "Over4x": {
    +                            "description": "Oversample 4x",
    +                            "value": 2
    +                          },
    +                          "Over8x": {
    +                            "description": "Oversample 8x",
    +                            "value": 3
    +                          },
    +                          "Over16x": {
    +                            "description": "Oversample 16x",
    +                            "value": 4
    +                          },
    +                          "Over32x": {
    +                            "description": "Oversample 32x",
    +                            "value": 5
    +                          },
    +                          "Over64x": {
    +                            "description": "Oversample 64x",
    +                            "value": 6
    +                          },
    +                          "Over128x": {
    +                            "description": "Oversample 128x",
    +                            "value": 7
    +                          },
    +                          "Over256x": {
    +                            "description": "Oversample 256x",
    +                            "value": 8
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SAMPLERATE": {
    +              "description": "Controls normal or continuous sample rate",
    +              "offset": 1528,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC": {
    +                    "description": "Capture and compare value. Sample rate is 16 MHz/CC",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "MODE": {
    +                    "description": "Select mode for sample rate control",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Task": {
    +                            "description": "Rate is controlled from SAMPLE task",
    +                            "value": 0
    +                          },
    +                          "Timers": {
    +                            "description": "Rate is controlled from local timer (use CC to control the rate)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIMER0": {
    +        "description": "Timer/Counter 0",
    +        "children": {
    +          "registers": {
    +            "TASKS_START": {
    +              "description": "Start Timer",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_START": {
    +                    "description": "Start Timer",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stop Timer",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STOP": {
    +                    "description": "Stop Timer",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_COUNT": {
    +              "description": "Increment Timer (Counter mode only)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_COUNT": {
    +                    "description": "Increment Timer (Counter mode only)",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_CLEAR": {
    +              "description": "Clear time",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_CLEAR": {
    +                    "description": "Clear time",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_SHUTDOWN": {
    +              "description": "Deprecated register - Shut down timer",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_SHUTDOWN": {
    +                    "description": "Deprecated field -  Shut down timer",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_CAPTURE": {
    +              "description": "Description collection: Capture Timer value to CC[n] register",
    +              "offset": 64,
    +              "size": 32,
    +              "count": 6,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_CAPTURE": {
    +                    "description": "Capture Timer value to CC[n] register",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_COMPARE": {
    +              "description": "Description collection: Compare event on CC[n] match",
    +              "offset": 320,
    +              "size": 32,
    +              "count": 6,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_COMPARE": {
    +                    "description": "Compare event on CC[n] match",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SHORTS": {
    +              "description": "Shortcuts between local events and tasks",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMPARE0_CLEAR": {
    +                    "description": "Shortcut between event COMPARE[0] and task CLEAR",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE1_CLEAR": {
    +                    "description": "Shortcut between event COMPARE[1] and task CLEAR",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE2_CLEAR": {
    +                    "description": "Shortcut between event COMPARE[2] and task CLEAR",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE3_CLEAR": {
    +                    "description": "Shortcut between event COMPARE[3] and task CLEAR",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE4_CLEAR": {
    +                    "description": "Shortcut between event COMPARE[4] and task CLEAR",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE5_CLEAR": {
    +                    "description": "Shortcut between event COMPARE[5] and task CLEAR",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE0_STOP": {
    +                    "description": "Shortcut between event COMPARE[0] and task STOP",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE1_STOP": {
    +                    "description": "Shortcut between event COMPARE[1] and task STOP",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE2_STOP": {
    +                    "description": "Shortcut between event COMPARE[2] and task STOP",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE3_STOP": {
    +                    "description": "Shortcut between event COMPARE[3] and task STOP",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE4_STOP": {
    +                    "description": "Shortcut between event COMPARE[4] and task STOP",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE5_STOP": {
    +                    "description": "Shortcut between event COMPARE[5] and task STOP",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMPARE0": {
    +                    "description": "Write '1' to enable interrupt for event COMPARE[0]",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE1": {
    +                    "description": "Write '1' to enable interrupt for event COMPARE[1]",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE2": {
    +                    "description": "Write '1' to enable interrupt for event COMPARE[2]",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE3": {
    +                    "description": "Write '1' to enable interrupt for event COMPARE[3]",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE4": {
    +                    "description": "Write '1' to enable interrupt for event COMPARE[4]",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE5": {
    +                    "description": "Write '1' to enable interrupt for event COMPARE[5]",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMPARE0": {
    +                    "description": "Write '1' to disable interrupt for event COMPARE[0]",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE1": {
    +                    "description": "Write '1' to disable interrupt for event COMPARE[1]",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE2": {
    +                    "description": "Write '1' to disable interrupt for event COMPARE[2]",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE3": {
    +                    "description": "Write '1' to disable interrupt for event COMPARE[3]",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE4": {
    +                    "description": "Write '1' to disable interrupt for event COMPARE[4]",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE5": {
    +                    "description": "Write '1' to disable interrupt for event COMPARE[5]",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "MODE": {
    +              "description": "Timer mode selection",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MODE": {
    +                    "description": "Timer mode",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Timer": {
    +                            "description": "Select Timer mode",
    +                            "value": 0
    +                          },
    +                          "Counter": {
    +                            "description": "Deprecated enumerator -  Select Counter mode",
    +                            "value": 1
    +                          },
    +                          "LowPowerCounter": {
    +                            "description": "Select Low Power Counter mode",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "BITMODE": {
    +              "description": "Configure the number of bits used by the TIMER",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BITMODE": {
    +                    "description": "Timer bit width",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "16Bit": {
    +                            "description": "16 bit timer bit width",
    +                            "value": 0
    +                          },
    +                          "08Bit": {
    +                            "description": "8 bit timer bit width",
    +                            "value": 1
    +                          },
    +                          "24Bit": {
    +                            "description": "24 bit timer bit width",
    +                            "value": 2
    +                          },
    +                          "32Bit": {
    +                            "description": "32 bit timer bit width",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PRESCALER": {
    +              "description": "Timer prescaler register",
    +              "offset": 1296,
    +              "size": 32,
    +              "reset_value": 4,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRESCALER": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CC": {
    +              "description": "Description collection: Capture/Compare register n",
    +              "offset": 1344,
    +              "size": 32,
    +              "count": 6,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC": {
    +                    "description": "Capture/Compare value",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "FPU": {
    +        "description": "FPU",
    +        "children": {
    +          "registers": {
    +            "UNUSED": {
    +              "description": "Unused.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only"
    +            }
    +          }
    +        }
    +      },
    +      "I2S": {
    +        "description": "Inter-IC Sound",
    +        "children": {
    +          "registers": {
    +            "TASKS_START": {
    +              "description": "Starts continuous I2S transfer. Also starts MCK generator when this is enabled.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_START": {
    +                    "description": "Starts continuous I2S transfer. Also starts MCK generator when this is enabled.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stops I2S transfer. Also stops MCK generator. Triggering this task will cause the STOPPED event to be generated.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STOP": {
    +                    "description": "Stops I2S transfer. Also stops MCK generator. Triggering this task will cause the STOPPED event to be generated.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_RXPTRUPD": {
    +              "description": "The RXD.PTR register has been copied to internal double-buffers.\n      When the I2S module is started and RX is enabled, this event will be generated for every RXTXD.MAXCNT words that are received on the SDIN pin.",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_RXPTRUPD": {
    +                    "description": "The RXD.PTR register has been copied to internal double-buffers.\n      When the I2S module is started and RX is enabled, this event will be generated for every RXTXD.MAXCNT words that are received on the SDIN pin.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_STOPPED": {
    +              "description": "I2S transfer stopped.",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_STOPPED": {
    +                    "description": "I2S transfer stopped.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_TXPTRUPD": {
    +              "description": "The TDX.PTR register has been copied to internal double-buffers.\n      When the I2S module is started and TX is enabled, this event will be generated for every RXTXD.MAXCNT words that are sent on the SDOUT pin.",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_TXPTRUPD": {
    +                    "description": "The TDX.PTR register has been copied to internal double-buffers.\n      When the I2S module is started and TX is enabled, this event will be generated for every RXTXD.MAXCNT words that are sent on the SDOUT pin.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTEN": {
    +              "description": "Enable or disable interrupt",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXPTRUPD": {
    +                    "description": "Enable or disable interrupt for event RXPTRUPD",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STOPPED": {
    +                    "description": "Enable or disable interrupt for event STOPPED",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXPTRUPD": {
    +                    "description": "Enable or disable interrupt for event TXPTRUPD",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXPTRUPD": {
    +                    "description": "Write '1' to enable interrupt for event RXPTRUPD",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STOPPED": {
    +                    "description": "Write '1' to enable interrupt for event STOPPED",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXPTRUPD": {
    +                    "description": "Write '1' to enable interrupt for event TXPTRUPD",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXPTRUPD": {
    +                    "description": "Write '1' to disable interrupt for event RXPTRUPD",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STOPPED": {
    +                    "description": "Write '1' to disable interrupt for event STOPPED",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXPTRUPD": {
    +                    "description": "Write '1' to disable interrupt for event TXPTRUPD",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable I2S module.",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable I2S module.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "RTC0": {
    +        "description": "Real time counter 0",
    +        "children": {
    +          "registers": {
    +            "TASKS_START": {
    +              "description": "Start RTC COUNTER",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_START": {
    +                    "description": "Start RTC COUNTER",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stop RTC COUNTER",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STOP": {
    +                    "description": "Stop RTC COUNTER",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_CLEAR": {
    +              "description": "Clear RTC COUNTER",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_CLEAR": {
    +                    "description": "Clear RTC COUNTER",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_TRIGOVRFLW": {
    +              "description": "Set COUNTER to 0xFFFFF0",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_TRIGOVRFLW": {
    +                    "description": "Set COUNTER to 0xFFFFF0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_TICK": {
    +              "description": "Event on COUNTER increment",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_TICK": {
    +                    "description": "Event on COUNTER increment",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_OVRFLW": {
    +              "description": "Event on COUNTER overflow",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_OVRFLW": {
    +                    "description": "Event on COUNTER overflow",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_COMPARE": {
    +              "description": "Description collection: Compare event on CC[n] match",
    +              "offset": 320,
    +              "size": 32,
    +              "count": 4,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_COMPARE": {
    +                    "description": "Compare event on CC[n] match",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TICK": {
    +                    "description": "Write '1' to enable interrupt for event TICK",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OVRFLW": {
    +                    "description": "Write '1' to enable interrupt for event OVRFLW",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE0": {
    +                    "description": "Write '1' to enable interrupt for event COMPARE[0]",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE1": {
    +                    "description": "Write '1' to enable interrupt for event COMPARE[1]",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE2": {
    +                    "description": "Write '1' to enable interrupt for event COMPARE[2]",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE3": {
    +                    "description": "Write '1' to enable interrupt for event COMPARE[3]",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TICK": {
    +                    "description": "Write '1' to disable interrupt for event TICK",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OVRFLW": {
    +                    "description": "Write '1' to disable interrupt for event OVRFLW",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE0": {
    +                    "description": "Write '1' to disable interrupt for event COMPARE[0]",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE1": {
    +                    "description": "Write '1' to disable interrupt for event COMPARE[1]",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE2": {
    +                    "description": "Write '1' to disable interrupt for event COMPARE[2]",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE3": {
    +                    "description": "Write '1' to disable interrupt for event COMPARE[3]",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVTEN": {
    +              "description": "Enable or disable event routing",
    +              "offset": 832,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TICK": {
    +                    "description": "Enable or disable event routing for event TICK",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Disable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OVRFLW": {
    +                    "description": "Enable or disable event routing for event OVRFLW",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Disable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE0": {
    +                    "description": "Enable or disable event routing for event COMPARE[0]",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Disable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE1": {
    +                    "description": "Enable or disable event routing for event COMPARE[1]",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Disable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE2": {
    +                    "description": "Enable or disable event routing for event COMPARE[2]",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Disable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE3": {
    +                    "description": "Enable or disable event routing for event COMPARE[3]",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Disable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVTENSET": {
    +              "description": "Enable event routing",
    +              "offset": 836,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TICK": {
    +                    "description": "Write '1' to enable event routing for event TICK",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OVRFLW": {
    +                    "description": "Write '1' to enable event routing for event OVRFLW",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE0": {
    +                    "description": "Write '1' to enable event routing for event COMPARE[0]",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE1": {
    +                    "description": "Write '1' to enable event routing for event COMPARE[1]",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE2": {
    +                    "description": "Write '1' to enable event routing for event COMPARE[2]",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE3": {
    +                    "description": "Write '1' to enable event routing for event COMPARE[3]",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVTENCLR": {
    +              "description": "Disable event routing",
    +              "offset": 840,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TICK": {
    +                    "description": "Write '1' to disable event routing for event TICK",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OVRFLW": {
    +                    "description": "Write '1' to disable event routing for event OVRFLW",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE0": {
    +                    "description": "Write '1' to disable event routing for event COMPARE[0]",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE1": {
    +                    "description": "Write '1' to disable event routing for event COMPARE[1]",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE2": {
    +                    "description": "Write '1' to disable event routing for event COMPARE[2]",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "COMPARE3": {
    +                    "description": "Write '1' to disable event routing for event COMPARE[3]",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "COUNTER": {
    +              "description": "Current COUNTER value",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "COUNTER": {
    +                    "description": "Counter value",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "PRESCALER": {
    +              "description": "12 bit prescaler for COUNTER frequency (32768/(PRESCALER+1)).Must be written when RTC is stopped",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRESCALER": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "CC": {
    +              "description": "Description collection: Compare register n",
    +              "offset": 1344,
    +              "size": 32,
    +              "count": 4,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMPARE": {
    +                    "description": "Compare value",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TEMP": {
    +        "description": "Temperature Sensor",
    +        "children": {
    +          "registers": {
    +            "TASKS_START": {
    +              "description": "Start temperature measurement",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_START": {
    +                    "description": "Start temperature measurement",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stop temperature measurement",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STOP": {
    +                    "description": "Stop temperature measurement",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_DATARDY": {
    +              "description": "Temperature measurement complete, data ready",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_DATARDY": {
    +                    "description": "Temperature measurement complete, data ready",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATARDY": {
    +                    "description": "Write '1' to enable interrupt for event DATARDY",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATARDY": {
    +                    "description": "Write '1' to disable interrupt for event DATARDY",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TEMP": {
    +              "description": "Temperature in degC (0.25deg steps)",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TEMP": {
    +                    "description": "Temperature in degC (0.25deg steps)",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "A0": {
    +              "description": "Slope of 1st piece wise linear function",
    +              "offset": 1312,
    +              "size": 32,
    +              "reset_value": 806,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "A0": {
    +                    "description": "Slope of 1st piece wise linear function",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "A1": {
    +              "description": "Slope of 2nd piece wise linear function",
    +              "offset": 1316,
    +              "size": 32,
    +              "reset_value": 840,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "A1": {
    +                    "description": "Slope of 2nd piece wise linear function",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "A2": {
    +              "description": "Slope of 3rd piece wise linear function",
    +              "offset": 1320,
    +              "size": 32,
    +              "reset_value": 938,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "A2": {
    +                    "description": "Slope of 3rd piece wise linear function",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "A3": {
    +              "description": "Slope of 4th piece wise linear function",
    +              "offset": 1324,
    +              "size": 32,
    +              "reset_value": 1038,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "A3": {
    +                    "description": "Slope of 4th piece wise linear function",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "A4": {
    +              "description": "Slope of 5th piece wise linear function",
    +              "offset": 1328,
    +              "size": 32,
    +              "reset_value": 1213,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "A4": {
    +                    "description": "Slope of 5th piece wise linear function",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "A5": {
    +              "description": "Slope of 6th piece wise linear function",
    +              "offset": 1332,
    +              "size": 32,
    +              "reset_value": 1443,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "A5": {
    +                    "description": "Slope of 6th piece wise linear function",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "B0": {
    +              "description": "y-intercept of 1st piece wise linear function",
    +              "offset": 1344,
    +              "size": 32,
    +              "reset_value": 16367,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "B0": {
    +                    "description": "y-intercept of 1st piece wise linear function",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "B1": {
    +              "description": "y-intercept of 2nd piece wise linear function",
    +              "offset": 1348,
    +              "size": 32,
    +              "reset_value": 16318,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "B1": {
    +                    "description": "y-intercept of 2nd piece wise linear function",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "B2": {
    +              "description": "y-intercept of 3rd piece wise linear function",
    +              "offset": 1352,
    +              "size": 32,
    +              "reset_value": 16318,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "B2": {
    +                    "description": "y-intercept of 3rd piece wise linear function",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "B3": {
    +              "description": "y-intercept of 4th piece wise linear function",
    +              "offset": 1356,
    +              "size": 32,
    +              "reset_value": 18,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "B3": {
    +                    "description": "y-intercept of 4th piece wise linear function",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "B4": {
    +              "description": "y-intercept of 5th piece wise linear function",
    +              "offset": 1360,
    +              "size": 32,
    +              "reset_value": 292,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "B4": {
    +                    "description": "y-intercept of 5th piece wise linear function",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "B5": {
    +              "description": "y-intercept of 6th piece wise linear function",
    +              "offset": 1364,
    +              "size": 32,
    +              "reset_value": 636,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "B5": {
    +                    "description": "y-intercept of 6th piece wise linear function",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "T0": {
    +              "description": "End point of 1st piece wise linear function",
    +              "offset": 1376,
    +              "size": 32,
    +              "reset_value": 226,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "T0": {
    +                    "description": "End point of 1st piece wise linear function",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "T1": {
    +              "description": "End point of 2nd piece wise linear function",
    +              "offset": 1380,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "T1": {
    +                    "description": "End point of 2nd piece wise linear function",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "T2": {
    +              "description": "End point of 3rd piece wise linear function",
    +              "offset": 1384,
    +              "size": 32,
    +              "reset_value": 25,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "T2": {
    +                    "description": "End point of 3rd piece wise linear function",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "T3": {
    +              "description": "End point of 4th piece wise linear function",
    +              "offset": 1388,
    +              "size": 32,
    +              "reset_value": 60,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "T3": {
    +                    "description": "End point of 4th piece wise linear function",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "T4": {
    +              "description": "End point of 5th piece wise linear function",
    +              "offset": 1392,
    +              "size": 32,
    +              "reset_value": 80,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "T4": {
    +                    "description": "End point of 5th piece wise linear function",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "RNG": {
    +        "description": "Random Number Generator",
    +        "children": {
    +          "registers": {
    +            "TASKS_START": {
    +              "description": "Task starting the random number generator",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_START": {
    +                    "description": "Task starting the random number generator",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STOP": {
    +              "description": "Task stopping the random number generator",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STOP": {
    +                    "description": "Task stopping the random number generator",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_VALRDY": {
    +              "description": "Event being generated for every new random number written to the VALUE register",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_VALRDY": {
    +                    "description": "Event being generated for every new random number written to the VALUE register",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SHORTS": {
    +              "description": "Shortcuts between local events and tasks",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VALRDY_STOP": {
    +                    "description": "Shortcut between event VALRDY and task STOP",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VALRDY": {
    +                    "description": "Write '1' to enable interrupt for event VALRDY",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VALRDY": {
    +                    "description": "Write '1' to disable interrupt for event VALRDY",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CONFIG": {
    +              "description": "Configuration register",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DERCEN": {
    +                    "description": "Bias correction",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "VALUE": {
    +              "description": "Output random number",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "VALUE": {
    +                    "description": "Generated random number",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "ECB": {
    +        "description": "AES ECB Mode Encryption",
    +        "children": {
    +          "registers": {
    +            "TASKS_STARTECB": {
    +              "description": "Start ECB block encrypt",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STARTECB": {
    +                    "description": "Start ECB block encrypt",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STOPECB": {
    +              "description": "Abort a possible executing ECB operation",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STOPECB": {
    +                    "description": "Abort a possible executing ECB operation",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_ENDECB": {
    +              "description": "ECB block encrypt complete",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_ENDECB": {
    +                    "description": "ECB block encrypt complete",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_ERRORECB": {
    +              "description": "ECB block encrypt aborted because of a STOPECB task or due to an error",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_ERRORECB": {
    +                    "description": "ECB block encrypt aborted because of a STOPECB task or due to an error",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENDECB": {
    +                    "description": "Write '1' to enable interrupt for event ENDECB",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERRORECB": {
    +                    "description": "Write '1' to enable interrupt for event ERRORECB",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENDECB": {
    +                    "description": "Write '1' to disable interrupt for event ENDECB",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERRORECB": {
    +                    "description": "Write '1' to disable interrupt for event ERRORECB",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ECBDATAPTR": {
    +              "description": "ECB block encrypt memory pointers",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ECBDATAPTR": {
    +                    "description": "Pointer to the ECB data structure (see Table 1 ECB data structure overview)",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "AAR": {
    +        "description": "Accelerated Address Resolver",
    +        "children": {
    +          "registers": {
    +            "TASKS_START": {
    +              "description": "Start resolving addresses based on IRKs specified in the IRK data structure",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_START": {
    +                    "description": "Start resolving addresses based on IRKs specified in the IRK data structure",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stop resolving addresses",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STOP": {
    +                    "description": "Stop resolving addresses",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_END": {
    +              "description": "Address resolution procedure complete",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_END": {
    +                    "description": "Address resolution procedure complete",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_RESOLVED": {
    +              "description": "Address resolved",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_RESOLVED": {
    +                    "description": "Address resolved",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_NOTRESOLVED": {
    +              "description": "Address not resolved",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_NOTRESOLVED": {
    +                    "description": "Address not resolved",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "END": {
    +                    "description": "Write '1' to enable interrupt for event END",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESOLVED": {
    +                    "description": "Write '1' to enable interrupt for event RESOLVED",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "NOTRESOLVED": {
    +                    "description": "Write '1' to enable interrupt for event NOTRESOLVED",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "END": {
    +                    "description": "Write '1' to disable interrupt for event END",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESOLVED": {
    +                    "description": "Write '1' to disable interrupt for event RESOLVED",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "NOTRESOLVED": {
    +                    "description": "Write '1' to disable interrupt for event NOTRESOLVED",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "STATUS": {
    +              "description": "Resolution status",
    +              "offset": 1024,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "STATUS": {
    +                    "description": "The IRK that was used last time an address was resolved",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable AAR",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable AAR",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "NIRK": {
    +              "description": "Number of IRKs",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NIRK": {
    +                    "description": "Number of Identity root keys available in the IRK data structure",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "IRKPTR": {
    +              "description": "Pointer to IRK data structure",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IRKPTR": {
    +                    "description": "Pointer to the IRK data structure",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ADDRPTR": {
    +              "description": "Pointer to the resolvable address",
    +              "offset": 1296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADDRPTR": {
    +                    "description": "Pointer to the resolvable address (6-bytes)",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "SCRATCHPTR": {
    +              "description": "Pointer to data area used for temporary storage",
    +              "offset": 1300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SCRATCHPTR": {
    +                    "description": "Pointer to a scratch data area used for temporary storage during resolution. A space of minimum 3 bytes must be reserved.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "CCM": {
    +        "description": "AES CCM Mode Encryption",
    +        "children": {
    +          "registers": {
    +            "TASKS_KSGEN": {
    +              "description": "Start generation of key-stream. This operation will stop by itself when completed.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_KSGEN": {
    +                    "description": "Start generation of key-stream. This operation will stop by itself when completed.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_CRYPT": {
    +              "description": "Start encryption/decryption. This operation will stop by itself when completed.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_CRYPT": {
    +                    "description": "Start encryption/decryption. This operation will stop by itself when completed.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stop encryption/decryption",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STOP": {
    +                    "description": "Stop encryption/decryption",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_RATEOVERRIDE": {
    +              "description": "Override DATARATE setting in MODE register with the contents of the RATEOVERRIDE register for any ongoing encryption/decryption",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_RATEOVERRIDE": {
    +                    "description": "Override DATARATE setting in MODE register with the contents of the RATEOVERRIDE register for any ongoing encryption/decryption",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_ENDKSGEN": {
    +              "description": "Key-stream generation complete",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_ENDKSGEN": {
    +                    "description": "Key-stream generation complete",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_ENDCRYPT": {
    +              "description": "Encrypt/decrypt complete",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_ENDCRYPT": {
    +                    "description": "Encrypt/decrypt complete",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_ERROR": {
    +              "description": "Deprecated register - CCM error event",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_ERROR": {
    +                    "description": "Deprecated field -  CCM error event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SHORTS": {
    +              "description": "Shortcuts between local events and tasks",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENDKSGEN_CRYPT": {
    +                    "description": "Shortcut between event ENDKSGEN and task CRYPT",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENDKSGEN": {
    +                    "description": "Write '1' to enable interrupt for event ENDKSGEN",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDCRYPT": {
    +                    "description": "Write '1' to enable interrupt for event ENDCRYPT",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Deprecated intsetfield -  Write '1' to enable interrupt for event ERROR",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENDKSGEN": {
    +                    "description": "Write '1' to disable interrupt for event ENDKSGEN",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENDCRYPT": {
    +                    "description": "Write '1' to disable interrupt for event ENDCRYPT",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERROR": {
    +                    "description": "Deprecated intclrfield -  Write '1' to disable interrupt for event ERROR",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "MICSTATUS": {
    +              "description": "MIC check result",
    +              "offset": 1024,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "MICSTATUS": {
    +                    "description": "The result of the MIC check performed during the previous decryption operation",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CheckFailed": {
    +                            "description": "MIC check failed",
    +                            "value": 0
    +                          },
    +                          "CheckPassed": {
    +                            "description": "MIC check passed",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable CCM",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "MODE": {
    +              "description": "Operation mode",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MODE": {
    +                    "description": "The mode of operation to be used. The settings in this register apply whenever either the KSGEN or CRYPT tasks are triggered.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Encryption": {
    +                            "description": "AES CCM packet encryption mode",
    +                            "value": 0
    +                          },
    +                          "Decryption": {
    +                            "description": "AES CCM packet decryption mode",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DATARATE": {
    +                    "description": "Radio data rate that the CCM shall run synchronous with",
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "1Mbit": {
    +                            "description": "1 Mbps",
    +                            "value": 0
    +                          },
    +                          "2Mbit": {
    +                            "description": "2 Mbps",
    +                            "value": 1
    +                          },
    +                          "125Kbps": {
    +                            "description": "125 Kbps",
    +                            "value": 2
    +                          },
    +                          "500Kbps": {
    +                            "description": "500 Kbps",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LENGTH": {
    +                    "description": "Packet length configuration",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Default": {
    +                            "description": "Default length. Effective length of LENGTH field in encrypted/decrypted packet is 5 bits. A key-stream for packet payloads up to 27 bytes will be generated.",
    +                            "value": 0
    +                          },
    +                          "Extended": {
    +                            "description": "Extended length. Effective length of LENGTH field in encrypted/decrypted packet is 8 bits. A key-stream for packet payloads up to MAXPACKETSIZE bytes will be generated.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CNFPTR": {
    +              "description": "Pointer to data structure holding AES key and NONCE vector",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNFPTR": {
    +                    "description": "Pointer to the data structure holding the AES key and the CCM NONCE vector (see Table 1 CCM data structure overview)",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "INPTR": {
    +              "description": "Input pointer",
    +              "offset": 1292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INPTR": {
    +                    "description": "Input pointer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OUTPTR": {
    +              "description": "Output pointer",
    +              "offset": 1296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUTPTR": {
    +                    "description": "Output pointer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "SCRATCHPTR": {
    +              "description": "Pointer to data area used for temporary storage",
    +              "offset": 1300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SCRATCHPTR": {
    +                    "description": "Pointer to a scratch data area used for temporary storage during key-stream generation,\n        MIC generation and encryption/decryption.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MAXPACKETSIZE": {
    +              "description": "Length of key-stream generated when MODE.LENGTH = Extended.",
    +              "offset": 1304,
    +              "size": 32,
    +              "reset_value": 251,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MAXPACKETSIZE": {
    +                    "description": "Length of key-stream generated when MODE.LENGTH = Extended. This value must be greater or equal to the subsequent packet payload to be encrypted/decrypted.",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "RATEOVERRIDE": {
    +              "description": "Data rate override setting.",
    +              "offset": 1308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RATEOVERRIDE": {
    +                    "description": "Data rate override setting.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "1Mbit": {
    +                            "description": "1 Mbps",
    +                            "value": 0
    +                          },
    +                          "2Mbit": {
    +                            "description": "2 Mbps",
    +                            "value": 1
    +                          },
    +                          "125Kbps": {
    +                            "description": "125 Kbps",
    +                            "value": 2
    +                          },
    +                          "500Kbps": {
    +                            "description": "500 Kbps",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "WDT": {
    +        "description": "Watchdog Timer",
    +        "children": {
    +          "registers": {
    +            "TASKS_START": {
    +              "description": "Start the watchdog",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_START": {
    +                    "description": "Start the watchdog",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_TIMEOUT": {
    +              "description": "Watchdog timeout",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_TIMEOUT": {
    +                    "description": "Watchdog timeout",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMEOUT": {
    +                    "description": "Write '1' to enable interrupt for event TIMEOUT",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMEOUT": {
    +                    "description": "Write '1' to disable interrupt for event TIMEOUT",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "RUNSTATUS": {
    +              "description": "Run status",
    +              "offset": 1024,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RUNSTATUS": {
    +                    "description": "Indicates whether or not the watchdog is running",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotRunning": {
    +                            "description": "Watchdog not running",
    +                            "value": 0
    +                          },
    +                          "Running": {
    +                            "description": "Watchdog is running",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "REQSTATUS": {
    +              "description": "Request status",
    +              "offset": 1028,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RR0": {
    +                    "description": "Request status for RR[0] register",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DisabledOrRequested": {
    +                            "description": "RR[0] register is not enabled, or are already requesting reload",
    +                            "value": 0
    +                          },
    +                          "EnabledAndUnrequested": {
    +                            "description": "RR[0] register is enabled, and are not yet requesting reload",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR1": {
    +                    "description": "Request status for RR[1] register",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DisabledOrRequested": {
    +                            "description": "RR[1] register is not enabled, or are already requesting reload",
    +                            "value": 0
    +                          },
    +                          "EnabledAndUnrequested": {
    +                            "description": "RR[1] register is enabled, and are not yet requesting reload",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR2": {
    +                    "description": "Request status for RR[2] register",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DisabledOrRequested": {
    +                            "description": "RR[2] register is not enabled, or are already requesting reload",
    +                            "value": 0
    +                          },
    +                          "EnabledAndUnrequested": {
    +                            "description": "RR[2] register is enabled, and are not yet requesting reload",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR3": {
    +                    "description": "Request status for RR[3] register",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DisabledOrRequested": {
    +                            "description": "RR[3] register is not enabled, or are already requesting reload",
    +                            "value": 0
    +                          },
    +                          "EnabledAndUnrequested": {
    +                            "description": "RR[3] register is enabled, and are not yet requesting reload",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR4": {
    +                    "description": "Request status for RR[4] register",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DisabledOrRequested": {
    +                            "description": "RR[4] register is not enabled, or are already requesting reload",
    +                            "value": 0
    +                          },
    +                          "EnabledAndUnrequested": {
    +                            "description": "RR[4] register is enabled, and are not yet requesting reload",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR5": {
    +                    "description": "Request status for RR[5] register",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DisabledOrRequested": {
    +                            "description": "RR[5] register is not enabled, or are already requesting reload",
    +                            "value": 0
    +                          },
    +                          "EnabledAndUnrequested": {
    +                            "description": "RR[5] register is enabled, and are not yet requesting reload",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR6": {
    +                    "description": "Request status for RR[6] register",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DisabledOrRequested": {
    +                            "description": "RR[6] register is not enabled, or are already requesting reload",
    +                            "value": 0
    +                          },
    +                          "EnabledAndUnrequested": {
    +                            "description": "RR[6] register is enabled, and are not yet requesting reload",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR7": {
    +                    "description": "Request status for RR[7] register",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DisabledOrRequested": {
    +                            "description": "RR[7] register is not enabled, or are already requesting reload",
    +                            "value": 0
    +                          },
    +                          "EnabledAndUnrequested": {
    +                            "description": "RR[7] register is enabled, and are not yet requesting reload",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CRV": {
    +              "description": "Counter reload value",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CRV": {
    +                    "description": "Counter reload value in number of cycles of the 32.768 kHz clock",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "RREN": {
    +              "description": "Enable register for reload request registers",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RR0": {
    +                    "description": "Enable or disable RR[0] register",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable RR[0] register",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable RR[0] register",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR1": {
    +                    "description": "Enable or disable RR[1] register",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable RR[1] register",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable RR[1] register",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR2": {
    +                    "description": "Enable or disable RR[2] register",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable RR[2] register",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable RR[2] register",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR3": {
    +                    "description": "Enable or disable RR[3] register",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable RR[3] register",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable RR[3] register",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR4": {
    +                    "description": "Enable or disable RR[4] register",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable RR[4] register",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable RR[4] register",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR5": {
    +                    "description": "Enable or disable RR[5] register",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable RR[5] register",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable RR[5] register",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR6": {
    +                    "description": "Enable or disable RR[6] register",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable RR[6] register",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable RR[6] register",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RR7": {
    +                    "description": "Enable or disable RR[7] register",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable RR[7] register",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable RR[7] register",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CONFIG": {
    +              "description": "Configuration register",
    +              "offset": 1292,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SLEEP": {
    +                    "description": "Configure the watchdog to either be paused, or kept running, while the CPU is sleeping",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Pause": {
    +                            "description": "Pause watchdog while the CPU is sleeping",
    +                            "value": 0
    +                          },
    +                          "Run": {
    +                            "description": "Keep the watchdog running while the CPU is sleeping",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "HALT": {
    +                    "description": "Configure the watchdog to either be paused, or kept running, while the CPU is halted by the debugger",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Pause": {
    +                            "description": "Pause watchdog while the CPU is halted by the debugger",
    +                            "value": 0
    +                          },
    +                          "Run": {
    +                            "description": "Keep the watchdog running while the CPU is halted by the debugger",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "RR": {
    +              "description": "Description collection: Reload request n",
    +              "offset": 1536,
    +              "size": 32,
    +              "count": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "RR": {
    +                    "description": "Reload request register",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "enum": {
    +                      "size": 32,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Reload": {
    +                            "description": "Value to request a reload of the watchdog timer",
    +                            "value": 1850885685
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "MWU": {
    +        "description": "Memory Watch Unit",
    +        "children": {
    +          "registers": {
    +            "INTEN": {
    +              "description": "Enable or disable interrupt",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION0WA": {
    +                    "description": "Enable or disable interrupt for event REGION0WA",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION0RA": {
    +                    "description": "Enable or disable interrupt for event REGION0RA",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION1WA": {
    +                    "description": "Enable or disable interrupt for event REGION1WA",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION1RA": {
    +                    "description": "Enable or disable interrupt for event REGION1RA",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION2WA": {
    +                    "description": "Enable or disable interrupt for event REGION2WA",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION2RA": {
    +                    "description": "Enable or disable interrupt for event REGION2RA",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION3WA": {
    +                    "description": "Enable or disable interrupt for event REGION3WA",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION3RA": {
    +                    "description": "Enable or disable interrupt for event REGION3RA",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION0WA": {
    +                    "description": "Enable or disable interrupt for event PREGION0WA",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION0RA": {
    +                    "description": "Enable or disable interrupt for event PREGION0RA",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION1WA": {
    +                    "description": "Enable or disable interrupt for event PREGION1WA",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION1RA": {
    +                    "description": "Enable or disable interrupt for event PREGION1RA",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION0WA": {
    +                    "description": "Write '1' to enable interrupt for event REGION0WA",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION0RA": {
    +                    "description": "Write '1' to enable interrupt for event REGION0RA",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION1WA": {
    +                    "description": "Write '1' to enable interrupt for event REGION1WA",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION1RA": {
    +                    "description": "Write '1' to enable interrupt for event REGION1RA",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION2WA": {
    +                    "description": "Write '1' to enable interrupt for event REGION2WA",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION2RA": {
    +                    "description": "Write '1' to enable interrupt for event REGION2RA",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION3WA": {
    +                    "description": "Write '1' to enable interrupt for event REGION3WA",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION3RA": {
    +                    "description": "Write '1' to enable interrupt for event REGION3RA",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION0WA": {
    +                    "description": "Write '1' to enable interrupt for event PREGION0WA",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION0RA": {
    +                    "description": "Write '1' to enable interrupt for event PREGION0RA",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION1WA": {
    +                    "description": "Write '1' to enable interrupt for event PREGION1WA",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION1RA": {
    +                    "description": "Write '1' to enable interrupt for event PREGION1RA",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION0WA": {
    +                    "description": "Write '1' to disable interrupt for event REGION0WA",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION0RA": {
    +                    "description": "Write '1' to disable interrupt for event REGION0RA",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION1WA": {
    +                    "description": "Write '1' to disable interrupt for event REGION1WA",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION1RA": {
    +                    "description": "Write '1' to disable interrupt for event REGION1RA",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION2WA": {
    +                    "description": "Write '1' to disable interrupt for event REGION2WA",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION2RA": {
    +                    "description": "Write '1' to disable interrupt for event REGION2RA",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION3WA": {
    +                    "description": "Write '1' to disable interrupt for event REGION3WA",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION3RA": {
    +                    "description": "Write '1' to disable interrupt for event REGION3RA",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION0WA": {
    +                    "description": "Write '1' to disable interrupt for event PREGION0WA",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION0RA": {
    +                    "description": "Write '1' to disable interrupt for event PREGION0RA",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION1WA": {
    +                    "description": "Write '1' to disable interrupt for event PREGION1WA",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION1RA": {
    +                    "description": "Write '1' to disable interrupt for event PREGION1RA",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "NMIEN": {
    +              "description": "Enable or disable interrupt",
    +              "offset": 800,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION0WA": {
    +                    "description": "Enable or disable interrupt for event REGION0WA",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION0RA": {
    +                    "description": "Enable or disable interrupt for event REGION0RA",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION1WA": {
    +                    "description": "Enable or disable interrupt for event REGION1WA",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION1RA": {
    +                    "description": "Enable or disable interrupt for event REGION1RA",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION2WA": {
    +                    "description": "Enable or disable interrupt for event REGION2WA",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION2RA": {
    +                    "description": "Enable or disable interrupt for event REGION2RA",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION3WA": {
    +                    "description": "Enable or disable interrupt for event REGION3WA",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION3RA": {
    +                    "description": "Enable or disable interrupt for event REGION3RA",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION0WA": {
    +                    "description": "Enable or disable interrupt for event PREGION0WA",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION0RA": {
    +                    "description": "Enable or disable interrupt for event PREGION0RA",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION1WA": {
    +                    "description": "Enable or disable interrupt for event PREGION1WA",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION1RA": {
    +                    "description": "Enable or disable interrupt for event PREGION1RA",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "NMIENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 804,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION0WA": {
    +                    "description": "Write '1' to enable interrupt for event REGION0WA",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION0RA": {
    +                    "description": "Write '1' to enable interrupt for event REGION0RA",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION1WA": {
    +                    "description": "Write '1' to enable interrupt for event REGION1WA",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION1RA": {
    +                    "description": "Write '1' to enable interrupt for event REGION1RA",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION2WA": {
    +                    "description": "Write '1' to enable interrupt for event REGION2WA",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION2RA": {
    +                    "description": "Write '1' to enable interrupt for event REGION2RA",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION3WA": {
    +                    "description": "Write '1' to enable interrupt for event REGION3WA",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION3RA": {
    +                    "description": "Write '1' to enable interrupt for event REGION3RA",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION0WA": {
    +                    "description": "Write '1' to enable interrupt for event PREGION0WA",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION0RA": {
    +                    "description": "Write '1' to enable interrupt for event PREGION0RA",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION1WA": {
    +                    "description": "Write '1' to enable interrupt for event PREGION1WA",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION1RA": {
    +                    "description": "Write '1' to enable interrupt for event PREGION1RA",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "NMIENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 808,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION0WA": {
    +                    "description": "Write '1' to disable interrupt for event REGION0WA",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION0RA": {
    +                    "description": "Write '1' to disable interrupt for event REGION0RA",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION1WA": {
    +                    "description": "Write '1' to disable interrupt for event REGION1WA",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION1RA": {
    +                    "description": "Write '1' to disable interrupt for event REGION1RA",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION2WA": {
    +                    "description": "Write '1' to disable interrupt for event REGION2WA",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION2RA": {
    +                    "description": "Write '1' to disable interrupt for event REGION2RA",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION3WA": {
    +                    "description": "Write '1' to disable interrupt for event REGION3WA",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REGION3RA": {
    +                    "description": "Write '1' to disable interrupt for event REGION3RA",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION0WA": {
    +                    "description": "Write '1' to disable interrupt for event PREGION0WA",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION0RA": {
    +                    "description": "Write '1' to disable interrupt for event PREGION0RA",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION1WA": {
    +                    "description": "Write '1' to disable interrupt for event PREGION1WA",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PREGION1RA": {
    +                    "description": "Write '1' to disable interrupt for event PREGION1RA",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "REGIONEN": {
    +              "description": "Enable/disable regions watch",
    +              "offset": 1296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RGN0WA": {
    +                    "description": "Enable/disable write access watch in region[0]",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable write access watch in this region",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable write access watch in this region",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN0RA": {
    +                    "description": "Enable/disable read access watch in region[0]",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable read access watch in this region",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable read access watch in this region",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN1WA": {
    +                    "description": "Enable/disable write access watch in region[1]",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable write access watch in this region",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable write access watch in this region",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN1RA": {
    +                    "description": "Enable/disable read access watch in region[1]",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable read access watch in this region",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable read access watch in this region",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN2WA": {
    +                    "description": "Enable/disable write access watch in region[2]",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable write access watch in this region",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable write access watch in this region",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN2RA": {
    +                    "description": "Enable/disable read access watch in region[2]",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable read access watch in this region",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable read access watch in this region",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN3WA": {
    +                    "description": "Enable/disable write access watch in region[3]",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable write access watch in this region",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable write access watch in this region",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN3RA": {
    +                    "description": "Enable/disable read access watch in region[3]",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable read access watch in this region",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable read access watch in this region",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PRGN0WA": {
    +                    "description": "Enable/disable write access watch in PREGION[0]",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable write access watch in this PREGION",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable write access watch in this PREGION",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PRGN0RA": {
    +                    "description": "Enable/disable read access watch in PREGION[0]",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable read access watch in this PREGION",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable read access watch in this PREGION",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PRGN1WA": {
    +                    "description": "Enable/disable write access watch in PREGION[1]",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable write access watch in this PREGION",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable write access watch in this PREGION",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PRGN1RA": {
    +                    "description": "Enable/disable read access watch in PREGION[1]",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disable": {
    +                            "description": "Disable read access watch in this PREGION",
    +                            "value": 0
    +                          },
    +                          "Enable": {
    +                            "description": "Enable read access watch in this PREGION",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "REGIONENSET": {
    +              "description": "Enable regions watch",
    +              "offset": 1300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RGN0WA": {
    +                    "description": "Enable write access watch in region[0]",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Write access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Write access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN0RA": {
    +                    "description": "Enable read access watch in region[0]",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN1WA": {
    +                    "description": "Enable write access watch in region[1]",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Write access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Write access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN1RA": {
    +                    "description": "Enable read access watch in region[1]",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN2WA": {
    +                    "description": "Enable write access watch in region[2]",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Write access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Write access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN2RA": {
    +                    "description": "Enable read access watch in region[2]",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN3WA": {
    +                    "description": "Enable write access watch in region[3]",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Write access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Write access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN3RA": {
    +                    "description": "Enable read access watch in region[3]",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PRGN0WA": {
    +                    "description": "Enable write access watch in PREGION[0]",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Write access watch in this PREGION is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Write access watch in this PREGION is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PRGN0RA": {
    +                    "description": "Enable read access watch in PREGION[0]",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read access watch in this PREGION is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read access watch in this PREGION is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PRGN1WA": {
    +                    "description": "Enable write access watch in PREGION[1]",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Write access watch in this PREGION is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Write access watch in this PREGION is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PRGN1RA": {
    +                    "description": "Enable read access watch in PREGION[1]",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read access watch in this PREGION is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read access watch in this PREGION is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "REGIONENCLR": {
    +              "description": "Disable regions watch",
    +              "offset": 1304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RGN0WA": {
    +                    "description": "Disable write access watch in region[0]",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Write access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Write access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN0RA": {
    +                    "description": "Disable read access watch in region[0]",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN1WA": {
    +                    "description": "Disable write access watch in region[1]",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Write access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Write access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN1RA": {
    +                    "description": "Disable read access watch in region[1]",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN2WA": {
    +                    "description": "Disable write access watch in region[2]",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Write access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Write access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN2RA": {
    +                    "description": "Disable read access watch in region[2]",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN3WA": {
    +                    "description": "Disable write access watch in region[3]",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Write access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Write access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RGN3RA": {
    +                    "description": "Disable read access watch in region[3]",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read access watch in this region is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read access watch in this region is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PRGN0WA": {
    +                    "description": "Disable write access watch in PREGION[0]",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Write access watch in this PREGION is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Write access watch in this PREGION is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PRGN0RA": {
    +                    "description": "Disable read access watch in PREGION[0]",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read access watch in this PREGION is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read access watch in this PREGION is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PRGN1WA": {
    +                    "description": "Disable write access watch in PREGION[1]",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Write access watch in this PREGION is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Write access watch in this PREGION is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PRGN1RA": {
    +                    "description": "Disable read access watch in PREGION[1]",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read access watch in this PREGION is disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read access watch in this PREGION is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "QDEC": {
    +        "description": "Quadrature Decoder",
    +        "children": {
    +          "registers": {
    +            "TASKS_START": {
    +              "description": "Task starting the quadrature decoder",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_START": {
    +                    "description": "Task starting the quadrature decoder",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STOP": {
    +              "description": "Task stopping the quadrature decoder",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STOP": {
    +                    "description": "Task stopping the quadrature decoder",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_READCLRACC": {
    +              "description": "Read and clear ACC and ACCDBL",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_READCLRACC": {
    +                    "description": "Read and clear ACC and ACCDBL",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_RDCLRACC": {
    +              "description": "Read and clear ACC",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_RDCLRACC": {
    +                    "description": "Read and clear ACC",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_RDCLRDBL": {
    +              "description": "Read and clear ACCDBL",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_RDCLRDBL": {
    +                    "description": "Read and clear ACCDBL",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_SAMPLERDY": {
    +              "description": "Event being generated for every new sample value written to the SAMPLE register",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_SAMPLERDY": {
    +                    "description": "Event being generated for every new sample value written to the SAMPLE register",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_REPORTRDY": {
    +              "description": "Non-null report ready",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_REPORTRDY": {
    +                    "description": "Non-null report ready",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_ACCOF": {
    +              "description": "ACC or ACCDBL register overflow",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_ACCOF": {
    +                    "description": "ACC or ACCDBL register overflow",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_DBLRDY": {
    +              "description": "Double displacement(s) detected",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_DBLRDY": {
    +                    "description": "Double displacement(s) detected",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_STOPPED": {
    +              "description": "QDEC has been stopped",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_STOPPED": {
    +                    "description": "QDEC has been stopped",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SHORTS": {
    +              "description": "Shortcuts between local events and tasks",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REPORTRDY_READCLRACC": {
    +                    "description": "Shortcut between event REPORTRDY and task READCLRACC",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SAMPLERDY_STOP": {
    +                    "description": "Shortcut between event SAMPLERDY and task STOP",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REPORTRDY_RDCLRACC": {
    +                    "description": "Shortcut between event REPORTRDY and task RDCLRACC",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REPORTRDY_STOP": {
    +                    "description": "Shortcut between event REPORTRDY and task STOP",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DBLRDY_RDCLRDBL": {
    +                    "description": "Shortcut between event DBLRDY and task RDCLRDBL",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DBLRDY_STOP": {
    +                    "description": "Shortcut between event DBLRDY and task STOP",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SAMPLERDY_READCLRACC": {
    +                    "description": "Shortcut between event SAMPLERDY and task READCLRACC",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SAMPLERDY": {
    +                    "description": "Write '1' to enable interrupt for event SAMPLERDY",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REPORTRDY": {
    +                    "description": "Write '1' to enable interrupt for event REPORTRDY",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ACCOF": {
    +                    "description": "Write '1' to enable interrupt for event ACCOF",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DBLRDY": {
    +                    "description": "Write '1' to enable interrupt for event DBLRDY",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STOPPED": {
    +                    "description": "Write '1' to enable interrupt for event STOPPED",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SAMPLERDY": {
    +                    "description": "Write '1' to disable interrupt for event SAMPLERDY",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REPORTRDY": {
    +                    "description": "Write '1' to disable interrupt for event REPORTRDY",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ACCOF": {
    +                    "description": "Write '1' to disable interrupt for event ACCOF",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DBLRDY": {
    +                    "description": "Write '1' to disable interrupt for event DBLRDY",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STOPPED": {
    +                    "description": "Write '1' to disable interrupt for event STOPPED",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable the quadrature decoder",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable the quadrature decoder",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "LEDPOL": {
    +              "description": "LED output pin polarity",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEDPOL": {
    +                    "description": "LED output pin polarity",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ActiveLow": {
    +                            "description": "Led active on output pin low",
    +                            "value": 0
    +                          },
    +                          "ActiveHigh": {
    +                            "description": "Led active on output pin high",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SAMPLEPER": {
    +              "description": "Sample period",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SAMPLEPER": {
    +                    "description": "Sample period. The SAMPLE register will be updated for every new sample",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128us": {
    +                            "description": "128 us",
    +                            "value": 0
    +                          },
    +                          "256us": {
    +                            "description": "256 us",
    +                            "value": 1
    +                          },
    +                          "512us": {
    +                            "description": "512 us",
    +                            "value": 2
    +                          },
    +                          "1024us": {
    +                            "description": "1024 us",
    +                            "value": 3
    +                          },
    +                          "2048us": {
    +                            "description": "2048 us",
    +                            "value": 4
    +                          },
    +                          "4096us": {
    +                            "description": "4096 us",
    +                            "value": 5
    +                          },
    +                          "8192us": {
    +                            "description": "8192 us",
    +                            "value": 6
    +                          },
    +                          "16384us": {
    +                            "description": "16384 us",
    +                            "value": 7
    +                          },
    +                          "32ms": {
    +                            "description": "32768 us",
    +                            "value": 8
    +                          },
    +                          "65ms": {
    +                            "description": "65536 us",
    +                            "value": 9
    +                          },
    +                          "131ms": {
    +                            "description": "131072 us",
    +                            "value": 10
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SAMPLE": {
    +              "description": "Motion sample value",
    +              "offset": 1292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SAMPLE": {
    +                    "description": "Last motion sample",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "REPORTPER": {
    +              "description": "Number of samples to be taken before REPORTRDY and DBLRDY events can be generated",
    +              "offset": 1296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REPORTPER": {
    +                    "description": "Specifies the number of samples to be accumulated in the ACC register before the REPORTRDY and DBLRDY events can be generated",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "10Smpl": {
    +                            "description": "10 samples / report",
    +                            "value": 0
    +                          },
    +                          "40Smpl": {
    +                            "description": "40 samples / report",
    +                            "value": 1
    +                          },
    +                          "80Smpl": {
    +                            "description": "80 samples / report",
    +                            "value": 2
    +                          },
    +                          "120Smpl": {
    +                            "description": "120 samples / report",
    +                            "value": 3
    +                          },
    +                          "160Smpl": {
    +                            "description": "160 samples / report",
    +                            "value": 4
    +                          },
    +                          "200Smpl": {
    +                            "description": "200 samples / report",
    +                            "value": 5
    +                          },
    +                          "240Smpl": {
    +                            "description": "240 samples / report",
    +                            "value": 6
    +                          },
    +                          "280Smpl": {
    +                            "description": "280 samples / report",
    +                            "value": 7
    +                          },
    +                          "1Smpl": {
    +                            "description": "1 sample / report",
    +                            "value": 8
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ACC": {
    +              "description": "Register accumulating the valid transitions",
    +              "offset": 1300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ACC": {
    +                    "description": "Register accumulating all valid samples (not double transition) read from the SAMPLE register",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ACCREAD": {
    +              "description": "Snapshot of the ACC register, updated by the READCLRACC or RDCLRACC task",
    +              "offset": 1304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ACCREAD": {
    +                    "description": "Snapshot of the ACC register.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DBFEN": {
    +              "description": "Enable input debounce filters",
    +              "offset": 1320,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBFEN": {
    +                    "description": "Enable input debounce filters",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Debounce input filters disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Debounce input filters enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "LEDPRE": {
    +              "description": "Time period the LED is switched ON prior to sampling",
    +              "offset": 1344,
    +              "size": 32,
    +              "reset_value": 16,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEDPRE": {
    +                    "description": "Period in us the LED is switched on prior to sampling",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "ACCDBL": {
    +              "description": "Register accumulating the number of detected double transitions",
    +              "offset": 1348,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ACCDBL": {
    +                    "description": "Register accumulating the number of detected double or illegal transitions. ( SAMPLE = 2 ).",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "ACCDBLREAD": {
    +              "description": "Snapshot of the ACCDBL, updated by the READCLRACC or RDCLRDBL task",
    +              "offset": 1352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ACCDBLREAD": {
    +                    "description": "Snapshot of the ACCDBL register. This field is updated when the READCLRACC or RDCLRDBL task is triggered.",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "COMP": {
    +        "description": "Comparator",
    +        "children": {
    +          "registers": {
    +            "TASKS_START": {
    +              "description": "Start comparator",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_START": {
    +                    "description": "Start comparator",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stop comparator",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STOP": {
    +                    "description": "Stop comparator",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_SAMPLE": {
    +              "description": "Sample comparator value",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_SAMPLE": {
    +                    "description": "Sample comparator value",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_READY": {
    +              "description": "COMP is ready and output is valid",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_READY": {
    +                    "description": "COMP is ready and output is valid",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_DOWN": {
    +              "description": "Downward crossing",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_DOWN": {
    +                    "description": "Downward crossing",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_UP": {
    +              "description": "Upward crossing",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_UP": {
    +                    "description": "Upward crossing",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_CROSS": {
    +              "description": "Downward or upward crossing",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_CROSS": {
    +                    "description": "Downward or upward crossing",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SHORTS": {
    +              "description": "Shortcuts between local events and tasks",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY_SAMPLE": {
    +                    "description": "Shortcut between event READY and task SAMPLE",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "READY_STOP": {
    +                    "description": "Shortcut between event READY and task STOP",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DOWN_STOP": {
    +                    "description": "Shortcut between event DOWN and task STOP",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "UP_STOP": {
    +                    "description": "Shortcut between event UP and task STOP",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CROSS_STOP": {
    +                    "description": "Shortcut between event CROSS and task STOP",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTEN": {
    +              "description": "Enable or disable interrupt",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "Enable or disable interrupt for event READY",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DOWN": {
    +                    "description": "Enable or disable interrupt for event DOWN",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "UP": {
    +                    "description": "Enable or disable interrupt for event UP",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CROSS": {
    +                    "description": "Enable or disable interrupt for event CROSS",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "Write '1' to enable interrupt for event READY",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DOWN": {
    +                    "description": "Write '1' to enable interrupt for event DOWN",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "UP": {
    +                    "description": "Write '1' to enable interrupt for event UP",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CROSS": {
    +                    "description": "Write '1' to enable interrupt for event CROSS",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "Write '1' to disable interrupt for event READY",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DOWN": {
    +                    "description": "Write '1' to disable interrupt for event DOWN",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "UP": {
    +                    "description": "Write '1' to disable interrupt for event UP",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CROSS": {
    +                    "description": "Write '1' to disable interrupt for event CROSS",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "RESULT": {
    +              "description": "Compare result",
    +              "offset": 1024,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RESULT": {
    +                    "description": "Result of last compare. Decision point SAMPLE task.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Below": {
    +                            "description": "Input voltage is below the threshold (VIN+ < VIN-)",
    +                            "value": 0
    +                          },
    +                          "Above": {
    +                            "description": "Input voltage is above the threshold (VIN+ > VIN-)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "COMP enable",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable COMP",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PSEL": {
    +              "description": "Pin select",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSEL": {
    +                    "description": "Analog pin select",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "AnalogInput0": {
    +                            "description": "AIN0 selected as analog input",
    +                            "value": 0
    +                          },
    +                          "AnalogInput1": {
    +                            "description": "AIN1 selected as analog input",
    +                            "value": 1
    +                          },
    +                          "AnalogInput2": {
    +                            "description": "AIN2 selected as analog input",
    +                            "value": 2
    +                          },
    +                          "AnalogInput3": {
    +                            "description": "AIN3 selected as analog input",
    +                            "value": 3
    +                          },
    +                          "AnalogInput4": {
    +                            "description": "AIN4 selected as analog input",
    +                            "value": 4
    +                          },
    +                          "AnalogInput5": {
    +                            "description": "AIN5 selected as analog input",
    +                            "value": 5
    +                          },
    +                          "AnalogInput6": {
    +                            "description": "AIN6 selected as analog input",
    +                            "value": 6
    +                          },
    +                          "AnalogInput7": {
    +                            "description": "AIN7 selected as analog input",
    +                            "value": 7
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "REFSEL": {
    +              "description": "Reference source select for single-ended mode",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 4,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REFSEL": {
    +                    "description": "Reference select",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Int1V2": {
    +                            "description": "VREF = internal 1.2 V reference (VDD >= 1.7 V)",
    +                            "value": 0
    +                          },
    +                          "Int1V8": {
    +                            "description": "VREF = internal 1.8 V reference (VDD >= VREF + 0.2 V)",
    +                            "value": 1
    +                          },
    +                          "Int2V4": {
    +                            "description": "VREF = internal 2.4 V reference (VDD >= VREF + 0.2 V)",
    +                            "value": 2
    +                          },
    +                          "VDD": {
    +                            "description": "VREF = VDD",
    +                            "value": 4
    +                          },
    +                          "ARef": {
    +                            "description": "VREF = AREF (VDD >= VREF >= AREFMIN)",
    +                            "value": 5
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EXTREFSEL": {
    +              "description": "External reference select",
    +              "offset": 1292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXTREFSEL": {
    +                    "description": "External analog reference select",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "AnalogReference0": {
    +                            "description": "Use AIN0 as external analog reference",
    +                            "value": 0
    +                          },
    +                          "AnalogReference1": {
    +                            "description": "Use AIN1 as external analog reference",
    +                            "value": 1
    +                          },
    +                          "AnalogReference2": {
    +                            "description": "Use AIN2 as external analog reference",
    +                            "value": 2
    +                          },
    +                          "AnalogReference3": {
    +                            "description": "Use AIN3 as external analog reference",
    +                            "value": 3
    +                          },
    +                          "AnalogReference4": {
    +                            "description": "Use AIN4 as external analog reference",
    +                            "value": 4
    +                          },
    +                          "AnalogReference5": {
    +                            "description": "Use AIN5 as external analog reference",
    +                            "value": 5
    +                          },
    +                          "AnalogReference6": {
    +                            "description": "Use AIN6 as external analog reference",
    +                            "value": 6
    +                          },
    +                          "AnalogReference7": {
    +                            "description": "Use AIN7 as external analog reference",
    +                            "value": 7
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TH": {
    +              "description": "Threshold configuration for hysteresis unit",
    +              "offset": 1328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "THDOWN": {
    +                    "description": "VDOWN = (THDOWN+1)/64*VREF",
    +                    "offset": 0,
    +                    "size": 6
    +                  },
    +                  "THUP": {
    +                    "description": "VUP = (THUP+1)/64*VREF",
    +                    "offset": 8,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "MODE": {
    +              "description": "Mode configuration",
    +              "offset": 1332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SP": {
    +                    "description": "Speed and power modes",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Low": {
    +                            "description": "Low-power mode",
    +                            "value": 0
    +                          },
    +                          "Normal": {
    +                            "description": "Normal mode",
    +                            "value": 1
    +                          },
    +                          "High": {
    +                            "description": "High-speed mode",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MAIN": {
    +                    "description": "Main operation modes",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SE": {
    +                            "description": "Single-ended mode",
    +                            "value": 0
    +                          },
    +                          "Diff": {
    +                            "description": "Differential mode",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "HYST": {
    +              "description": "Comparator hysteresis enable",
    +              "offset": 1336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HYST": {
    +                    "description": "Comparator hysteresis",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoHyst": {
    +                            "description": "Comparator hysteresis disabled",
    +                            "value": 0
    +                          },
    +                          "Hyst50mV": {
    +                            "description": "Comparator hysteresis enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "LPCOMP": {
    +        "description": "Low Power Comparator",
    +        "children": {
    +          "registers": {
    +            "TASKS_START": {
    +              "description": "Start comparator",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_START": {
    +                    "description": "Start comparator",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_STOP": {
    +              "description": "Stop comparator",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_STOP": {
    +                    "description": "Stop comparator",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TASKS_SAMPLE": {
    +              "description": "Sample comparator value",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_SAMPLE": {
    +                    "description": "Sample comparator value",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_READY": {
    +              "description": "LPCOMP is ready and output is valid",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_READY": {
    +                    "description": "LPCOMP is ready and output is valid",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_DOWN": {
    +              "description": "Downward crossing",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_DOWN": {
    +                    "description": "Downward crossing",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_UP": {
    +              "description": "Upward crossing",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_UP": {
    +                    "description": "Upward crossing",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_CROSS": {
    +              "description": "Downward or upward crossing",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_CROSS": {
    +                    "description": "Downward or upward crossing",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SHORTS": {
    +              "description": "Shortcuts between local events and tasks",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY_SAMPLE": {
    +                    "description": "Shortcut between event READY and task SAMPLE",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "READY_STOP": {
    +                    "description": "Shortcut between event READY and task STOP",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DOWN_STOP": {
    +                    "description": "Shortcut between event DOWN and task STOP",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "UP_STOP": {
    +                    "description": "Shortcut between event UP and task STOP",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CROSS_STOP": {
    +                    "description": "Shortcut between event CROSS and task STOP",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable shortcut",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable shortcut",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "Write '1' to enable interrupt for event READY",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DOWN": {
    +                    "description": "Write '1' to enable interrupt for event DOWN",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "UP": {
    +                    "description": "Write '1' to enable interrupt for event UP",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CROSS": {
    +                    "description": "Write '1' to enable interrupt for event CROSS",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "Write '1' to disable interrupt for event READY",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DOWN": {
    +                    "description": "Write '1' to disable interrupt for event DOWN",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "UP": {
    +                    "description": "Write '1' to disable interrupt for event UP",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CROSS": {
    +                    "description": "Write '1' to disable interrupt for event CROSS",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "RESULT": {
    +              "description": "Compare result",
    +              "offset": 1024,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RESULT": {
    +                    "description": "Result of last compare. Decision point SAMPLE task.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Below": {
    +                            "description": "Input voltage is below the reference threshold (VIN+ < VIN-).",
    +                            "value": 0
    +                          },
    +                          "Above": {
    +                            "description": "Input voltage is above the reference threshold (VIN+ > VIN-).",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "Enable LPCOMP",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable or disable LPCOMP",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PSEL": {
    +              "description": "Input pin select",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSEL": {
    +                    "description": "Analog pin select",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "AnalogInput0": {
    +                            "description": "AIN0 selected as analog input",
    +                            "value": 0
    +                          },
    +                          "AnalogInput1": {
    +                            "description": "AIN1 selected as analog input",
    +                            "value": 1
    +                          },
    +                          "AnalogInput2": {
    +                            "description": "AIN2 selected as analog input",
    +                            "value": 2
    +                          },
    +                          "AnalogInput3": {
    +                            "description": "AIN3 selected as analog input",
    +                            "value": 3
    +                          },
    +                          "AnalogInput4": {
    +                            "description": "AIN4 selected as analog input",
    +                            "value": 4
    +                          },
    +                          "AnalogInput5": {
    +                            "description": "AIN5 selected as analog input",
    +                            "value": 5
    +                          },
    +                          "AnalogInput6": {
    +                            "description": "AIN6 selected as analog input",
    +                            "value": 6
    +                          },
    +                          "AnalogInput7": {
    +                            "description": "AIN7 selected as analog input",
    +                            "value": 7
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "REFSEL": {
    +              "description": "Reference select",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 4,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REFSEL": {
    +                    "description": "Reference select",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Ref1_8Vdd": {
    +                            "description": "VDD * 1/8 selected as reference",
    +                            "value": 0
    +                          },
    +                          "Ref2_8Vdd": {
    +                            "description": "VDD * 2/8 selected as reference",
    +                            "value": 1
    +                          },
    +                          "Ref3_8Vdd": {
    +                            "description": "VDD * 3/8 selected as reference",
    +                            "value": 2
    +                          },
    +                          "Ref4_8Vdd": {
    +                            "description": "VDD * 4/8 selected as reference",
    +                            "value": 3
    +                          },
    +                          "Ref5_8Vdd": {
    +                            "description": "VDD * 5/8 selected as reference",
    +                            "value": 4
    +                          },
    +                          "Ref6_8Vdd": {
    +                            "description": "VDD * 6/8 selected as reference",
    +                            "value": 5
    +                          },
    +                          "Ref7_8Vdd": {
    +                            "description": "VDD * 7/8 selected as reference",
    +                            "value": 6
    +                          },
    +                          "ARef": {
    +                            "description": "External analog reference selected",
    +                            "value": 7
    +                          },
    +                          "Ref1_16Vdd": {
    +                            "description": "VDD * 1/16 selected as reference",
    +                            "value": 8
    +                          },
    +                          "Ref3_16Vdd": {
    +                            "description": "VDD * 3/16 selected as reference",
    +                            "value": 9
    +                          },
    +                          "Ref5_16Vdd": {
    +                            "description": "VDD * 5/16 selected as reference",
    +                            "value": 10
    +                          },
    +                          "Ref7_16Vdd": {
    +                            "description": "VDD * 7/16 selected as reference",
    +                            "value": 11
    +                          },
    +                          "Ref9_16Vdd": {
    +                            "description": "VDD * 9/16 selected as reference",
    +                            "value": 12
    +                          },
    +                          "Ref11_16Vdd": {
    +                            "description": "VDD * 11/16 selected as reference",
    +                            "value": 13
    +                          },
    +                          "Ref13_16Vdd": {
    +                            "description": "VDD * 13/16 selected as reference",
    +                            "value": 14
    +                          },
    +                          "Ref15_16Vdd": {
    +                            "description": "VDD * 15/16 selected as reference",
    +                            "value": 15
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EXTREFSEL": {
    +              "description": "External reference select",
    +              "offset": 1292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXTREFSEL": {
    +                    "description": "External analog reference select",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "AnalogReference0": {
    +                            "description": "Use AIN0 as external analog reference",
    +                            "value": 0
    +                          },
    +                          "AnalogReference1": {
    +                            "description": "Use AIN1 as external analog reference",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ANADETECT": {
    +              "description": "Analog detect configuration",
    +              "offset": 1312,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ANADETECT": {
    +                    "description": "Analog detect configuration",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Cross": {
    +                            "description": "Generate ANADETECT on crossing, both upward crossing and downward crossing",
    +                            "value": 0
    +                          },
    +                          "Up": {
    +                            "description": "Generate ANADETECT on upward crossing only",
    +                            "value": 1
    +                          },
    +                          "Down": {
    +                            "description": "Generate ANADETECT on downward crossing only",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "HYST": {
    +              "description": "Comparator hysteresis enable",
    +              "offset": 1336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HYST": {
    +                    "description": "Comparator hysteresis enable",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Comparator hysteresis disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Comparator hysteresis enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "EGU0": {
    +        "description": "Event Generator Unit 0",
    +        "children": {
    +          "registers": {
    +            "TASKS_TRIGGER": {
    +              "description": "Description collection: Trigger n for triggering the corresponding TRIGGERED[n] event",
    +              "offset": 0,
    +              "size": 32,
    +              "count": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TASKS_TRIGGER": {
    +                    "description": "Trigger n for triggering the corresponding TRIGGERED[n] event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Trigger": {
    +                            "description": "Trigger task",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EVENTS_TRIGGERED": {
    +              "description": "Description collection: Event number n generated by triggering the corresponding TRIGGER[n] task",
    +              "offset": 256,
    +              "size": 32,
    +              "count": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVENTS_TRIGGERED": {
    +                    "description": "Event number n generated by triggering the corresponding TRIGGER[n] task",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NotGenerated": {
    +                            "description": "Event not generated",
    +                            "value": 0
    +                          },
    +                          "Generated": {
    +                            "description": "Event generated",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTEN": {
    +              "description": "Enable or disable interrupt",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TRIGGERED0": {
    +                    "description": "Enable or disable interrupt for event TRIGGERED[0]",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED1": {
    +                    "description": "Enable or disable interrupt for event TRIGGERED[1]",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED2": {
    +                    "description": "Enable or disable interrupt for event TRIGGERED[2]",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED3": {
    +                    "description": "Enable or disable interrupt for event TRIGGERED[3]",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED4": {
    +                    "description": "Enable or disable interrupt for event TRIGGERED[4]",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED5": {
    +                    "description": "Enable or disable interrupt for event TRIGGERED[5]",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED6": {
    +                    "description": "Enable or disable interrupt for event TRIGGERED[6]",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED7": {
    +                    "description": "Enable or disable interrupt for event TRIGGERED[7]",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED8": {
    +                    "description": "Enable or disable interrupt for event TRIGGERED[8]",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED9": {
    +                    "description": "Enable or disable interrupt for event TRIGGERED[9]",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED10": {
    +                    "description": "Enable or disable interrupt for event TRIGGERED[10]",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED11": {
    +                    "description": "Enable or disable interrupt for event TRIGGERED[11]",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED12": {
    +                    "description": "Enable or disable interrupt for event TRIGGERED[12]",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED13": {
    +                    "description": "Enable or disable interrupt for event TRIGGERED[13]",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED14": {
    +                    "description": "Enable or disable interrupt for event TRIGGERED[14]",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED15": {
    +                    "description": "Enable or disable interrupt for event TRIGGERED[15]",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENSET": {
    +              "description": "Enable interrupt",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TRIGGERED0": {
    +                    "description": "Write '1' to enable interrupt for event TRIGGERED[0]",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED1": {
    +                    "description": "Write '1' to enable interrupt for event TRIGGERED[1]",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED2": {
    +                    "description": "Write '1' to enable interrupt for event TRIGGERED[2]",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED3": {
    +                    "description": "Write '1' to enable interrupt for event TRIGGERED[3]",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED4": {
    +                    "description": "Write '1' to enable interrupt for event TRIGGERED[4]",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED5": {
    +                    "description": "Write '1' to enable interrupt for event TRIGGERED[5]",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED6": {
    +                    "description": "Write '1' to enable interrupt for event TRIGGERED[6]",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED7": {
    +                    "description": "Write '1' to enable interrupt for event TRIGGERED[7]",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED8": {
    +                    "description": "Write '1' to enable interrupt for event TRIGGERED[8]",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED9": {
    +                    "description": "Write '1' to enable interrupt for event TRIGGERED[9]",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED10": {
    +                    "description": "Write '1' to enable interrupt for event TRIGGERED[10]",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED11": {
    +                    "description": "Write '1' to enable interrupt for event TRIGGERED[11]",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED12": {
    +                    "description": "Write '1' to enable interrupt for event TRIGGERED[12]",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED13": {
    +                    "description": "Write '1' to enable interrupt for event TRIGGERED[13]",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED14": {
    +                    "description": "Write '1' to enable interrupt for event TRIGGERED[14]",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED15": {
    +                    "description": "Write '1' to enable interrupt for event TRIGGERED[15]",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTENCLR": {
    +              "description": "Disable interrupt",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TRIGGERED0": {
    +                    "description": "Write '1' to disable interrupt for event TRIGGERED[0]",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED1": {
    +                    "description": "Write '1' to disable interrupt for event TRIGGERED[1]",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED2": {
    +                    "description": "Write '1' to disable interrupt for event TRIGGERED[2]",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED3": {
    +                    "description": "Write '1' to disable interrupt for event TRIGGERED[3]",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED4": {
    +                    "description": "Write '1' to disable interrupt for event TRIGGERED[4]",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED5": {
    +                    "description": "Write '1' to disable interrupt for event TRIGGERED[5]",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED6": {
    +                    "description": "Write '1' to disable interrupt for event TRIGGERED[6]",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED7": {
    +                    "description": "Write '1' to disable interrupt for event TRIGGERED[7]",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED8": {
    +                    "description": "Write '1' to disable interrupt for event TRIGGERED[8]",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED9": {
    +                    "description": "Write '1' to disable interrupt for event TRIGGERED[9]",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED10": {
    +                    "description": "Write '1' to disable interrupt for event TRIGGERED[10]",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED11": {
    +                    "description": "Write '1' to disable interrupt for event TRIGGERED[11]",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED12": {
    +                    "description": "Write '1' to disable interrupt for event TRIGGERED[12]",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED13": {
    +                    "description": "Write '1' to disable interrupt for event TRIGGERED[13]",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED14": {
    +                    "description": "Write '1' to disable interrupt for event TRIGGERED[14]",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TRIGGERED15": {
    +                    "description": "Write '1' to disable interrupt for event TRIGGERED[15]",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: Disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: Enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SWI0": {
    +        "description": "Software interrupt 0",
    +        "children": {
    +          "registers": {
    +            "UNUSED": {
    +              "description": "Unused.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only"
    +            }
    +          }
    +        }
    +      },
    +      "PPI": {
    +        "description": "Programmable Peripheral Interconnect",
    +        "children": {
    +          "registers": {
    +            "CHEN": {
    +              "description": "Channel enable register",
    +              "offset": 1280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH0": {
    +                    "description": "Enable or disable channel 0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH1": {
    +                    "description": "Enable or disable channel 1",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH2": {
    +                    "description": "Enable or disable channel 2",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH3": {
    +                    "description": "Enable or disable channel 3",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH4": {
    +                    "description": "Enable or disable channel 4",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH5": {
    +                    "description": "Enable or disable channel 5",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH6": {
    +                    "description": "Enable or disable channel 6",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH7": {
    +                    "description": "Enable or disable channel 7",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH8": {
    +                    "description": "Enable or disable channel 8",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH9": {
    +                    "description": "Enable or disable channel 9",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH10": {
    +                    "description": "Enable or disable channel 10",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH11": {
    +                    "description": "Enable or disable channel 11",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH12": {
    +                    "description": "Enable or disable channel 12",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH13": {
    +                    "description": "Enable or disable channel 13",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH14": {
    +                    "description": "Enable or disable channel 14",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH15": {
    +                    "description": "Enable or disable channel 15",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH16": {
    +                    "description": "Enable or disable channel 16",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH17": {
    +                    "description": "Enable or disable channel 17",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH18": {
    +                    "description": "Enable or disable channel 18",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH19": {
    +                    "description": "Enable or disable channel 19",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH20": {
    +                    "description": "Enable or disable channel 20",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH21": {
    +                    "description": "Enable or disable channel 21",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH22": {
    +                    "description": "Enable or disable channel 22",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH23": {
    +                    "description": "Enable or disable channel 23",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH24": {
    +                    "description": "Enable or disable channel 24",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH25": {
    +                    "description": "Enable or disable channel 25",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH26": {
    +                    "description": "Enable or disable channel 26",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH27": {
    +                    "description": "Enable or disable channel 27",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH28": {
    +                    "description": "Enable or disable channel 28",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH29": {
    +                    "description": "Enable or disable channel 29",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH30": {
    +                    "description": "Enable or disable channel 30",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH31": {
    +                    "description": "Enable or disable channel 31",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable channel",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable channel",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CHENSET": {
    +              "description": "Channel enable set register",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH0": {
    +                    "description": "Channel 0 enable set register.  Writing '0' has no effect",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH1": {
    +                    "description": "Channel 1 enable set register.  Writing '0' has no effect",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH2": {
    +                    "description": "Channel 2 enable set register.  Writing '0' has no effect",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH3": {
    +                    "description": "Channel 3 enable set register.  Writing '0' has no effect",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH4": {
    +                    "description": "Channel 4 enable set register.  Writing '0' has no effect",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH5": {
    +                    "description": "Channel 5 enable set register.  Writing '0' has no effect",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH6": {
    +                    "description": "Channel 6 enable set register.  Writing '0' has no effect",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH7": {
    +                    "description": "Channel 7 enable set register.  Writing '0' has no effect",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH8": {
    +                    "description": "Channel 8 enable set register.  Writing '0' has no effect",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH9": {
    +                    "description": "Channel 9 enable set register.  Writing '0' has no effect",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH10": {
    +                    "description": "Channel 10 enable set register.  Writing '0' has no effect",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH11": {
    +                    "description": "Channel 11 enable set register.  Writing '0' has no effect",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH12": {
    +                    "description": "Channel 12 enable set register.  Writing '0' has no effect",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH13": {
    +                    "description": "Channel 13 enable set register.  Writing '0' has no effect",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH14": {
    +                    "description": "Channel 14 enable set register.  Writing '0' has no effect",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH15": {
    +                    "description": "Channel 15 enable set register.  Writing '0' has no effect",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH16": {
    +                    "description": "Channel 16 enable set register.  Writing '0' has no effect",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH17": {
    +                    "description": "Channel 17 enable set register.  Writing '0' has no effect",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH18": {
    +                    "description": "Channel 18 enable set register.  Writing '0' has no effect",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH19": {
    +                    "description": "Channel 19 enable set register.  Writing '0' has no effect",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH20": {
    +                    "description": "Channel 20 enable set register.  Writing '0' has no effect",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH21": {
    +                    "description": "Channel 21 enable set register.  Writing '0' has no effect",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH22": {
    +                    "description": "Channel 22 enable set register.  Writing '0' has no effect",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH23": {
    +                    "description": "Channel 23 enable set register.  Writing '0' has no effect",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH24": {
    +                    "description": "Channel 24 enable set register.  Writing '0' has no effect",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH25": {
    +                    "description": "Channel 25 enable set register.  Writing '0' has no effect",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH26": {
    +                    "description": "Channel 26 enable set register.  Writing '0' has no effect",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH27": {
    +                    "description": "Channel 27 enable set register.  Writing '0' has no effect",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH28": {
    +                    "description": "Channel 28 enable set register.  Writing '0' has no effect",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH29": {
    +                    "description": "Channel 29 enable set register.  Writing '0' has no effect",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH30": {
    +                    "description": "Channel 30 enable set register.  Writing '0' has no effect",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH31": {
    +                    "description": "Channel 31 enable set register.  Writing '0' has no effect",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CHENCLR": {
    +              "description": "Channel enable clear register",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH0": {
    +                    "description": "Channel 0 enable clear register.  Writing '0' has no effect",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH1": {
    +                    "description": "Channel 1 enable clear register.  Writing '0' has no effect",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH2": {
    +                    "description": "Channel 2 enable clear register.  Writing '0' has no effect",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH3": {
    +                    "description": "Channel 3 enable clear register.  Writing '0' has no effect",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH4": {
    +                    "description": "Channel 4 enable clear register.  Writing '0' has no effect",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH5": {
    +                    "description": "Channel 5 enable clear register.  Writing '0' has no effect",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH6": {
    +                    "description": "Channel 6 enable clear register.  Writing '0' has no effect",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH7": {
    +                    "description": "Channel 7 enable clear register.  Writing '0' has no effect",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH8": {
    +                    "description": "Channel 8 enable clear register.  Writing '0' has no effect",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH9": {
    +                    "description": "Channel 9 enable clear register.  Writing '0' has no effect",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH10": {
    +                    "description": "Channel 10 enable clear register.  Writing '0' has no effect",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH11": {
    +                    "description": "Channel 11 enable clear register.  Writing '0' has no effect",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH12": {
    +                    "description": "Channel 12 enable clear register.  Writing '0' has no effect",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH13": {
    +                    "description": "Channel 13 enable clear register.  Writing '0' has no effect",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH14": {
    +                    "description": "Channel 14 enable clear register.  Writing '0' has no effect",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH15": {
    +                    "description": "Channel 15 enable clear register.  Writing '0' has no effect",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH16": {
    +                    "description": "Channel 16 enable clear register.  Writing '0' has no effect",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH17": {
    +                    "description": "Channel 17 enable clear register.  Writing '0' has no effect",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH18": {
    +                    "description": "Channel 18 enable clear register.  Writing '0' has no effect",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH19": {
    +                    "description": "Channel 19 enable clear register.  Writing '0' has no effect",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH20": {
    +                    "description": "Channel 20 enable clear register.  Writing '0' has no effect",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH21": {
    +                    "description": "Channel 21 enable clear register.  Writing '0' has no effect",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH22": {
    +                    "description": "Channel 22 enable clear register.  Writing '0' has no effect",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH23": {
    +                    "description": "Channel 23 enable clear register.  Writing '0' has no effect",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH24": {
    +                    "description": "Channel 24 enable clear register.  Writing '0' has no effect",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH25": {
    +                    "description": "Channel 25 enable clear register.  Writing '0' has no effect",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH26": {
    +                    "description": "Channel 26 enable clear register.  Writing '0' has no effect",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH27": {
    +                    "description": "Channel 27 enable clear register.  Writing '0' has no effect",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH28": {
    +                    "description": "Channel 28 enable clear register.  Writing '0' has no effect",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH29": {
    +                    "description": "Channel 29 enable clear register.  Writing '0' has no effect",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH30": {
    +                    "description": "Channel 30 enable clear register.  Writing '0' has no effect",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH31": {
    +                    "description": "Channel 31 enable clear register.  Writing '0' has no effect",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Read: channel disabled",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Read: channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CHG": {
    +              "description": "Description collection: Channel group n",
    +              "offset": 2048,
    +              "size": 32,
    +              "count": 6,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH0": {
    +                    "description": "Include or exclude channel 0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH1": {
    +                    "description": "Include or exclude channel 1",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH2": {
    +                    "description": "Include or exclude channel 2",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH3": {
    +                    "description": "Include or exclude channel 3",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH4": {
    +                    "description": "Include or exclude channel 4",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH5": {
    +                    "description": "Include or exclude channel 5",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH6": {
    +                    "description": "Include or exclude channel 6",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH7": {
    +                    "description": "Include or exclude channel 7",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH8": {
    +                    "description": "Include or exclude channel 8",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH9": {
    +                    "description": "Include or exclude channel 9",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH10": {
    +                    "description": "Include or exclude channel 10",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH11": {
    +                    "description": "Include or exclude channel 11",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH12": {
    +                    "description": "Include or exclude channel 12",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH13": {
    +                    "description": "Include or exclude channel 13",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH14": {
    +                    "description": "Include or exclude channel 14",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH15": {
    +                    "description": "Include or exclude channel 15",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH16": {
    +                    "description": "Include or exclude channel 16",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH17": {
    +                    "description": "Include or exclude channel 17",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH18": {
    +                    "description": "Include or exclude channel 18",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH19": {
    +                    "description": "Include or exclude channel 19",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH20": {
    +                    "description": "Include or exclude channel 20",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH21": {
    +                    "description": "Include or exclude channel 21",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH22": {
    +                    "description": "Include or exclude channel 22",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH23": {
    +                    "description": "Include or exclude channel 23",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH24": {
    +                    "description": "Include or exclude channel 24",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH25": {
    +                    "description": "Include or exclude channel 25",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH26": {
    +                    "description": "Include or exclude channel 26",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH27": {
    +                    "description": "Include or exclude channel 27",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH28": {
    +                    "description": "Include or exclude channel 28",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH29": {
    +                    "description": "Include or exclude channel 29",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH30": {
    +                    "description": "Include or exclude channel 30",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CH31": {
    +                    "description": "Include or exclude channel 31",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Excluded": {
    +                            "description": "Exclude",
    +                            "value": 0
    +                          },
    +                          "Included": {
    +                            "description": "Include",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "NVMC": {
    +        "description": "Non Volatile Memory Controller",
    +        "children": {
    +          "registers": {
    +            "READY": {
    +              "description": "Ready flag",
    +              "offset": 1024,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "NVMC is ready or busy",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Busy": {
    +                            "description": "NVMC is busy (on-going write or erase operation)",
    +                            "value": 0
    +                          },
    +                          "Ready": {
    +                            "description": "NVMC is ready",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "READYNEXT": {
    +              "description": "Ready flag",
    +              "offset": 1032,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "READYNEXT": {
    +                    "description": "NVMC can accept a new write operation",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Busy": {
    +                            "description": "NVMC cannot accept any write operation",
    +                            "value": 0
    +                          },
    +                          "Ready": {
    +                            "description": "NVMC is ready",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CONFIG": {
    +              "description": "Configuration register",
    +              "offset": 1284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WEN": {
    +                    "description": "Program memory access mode. It is strongly recommended to only activate erase and write modes when they are actively used. Enabling write or erase will invalidate the cache and keep it invalidated.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Ren": {
    +                            "description": "Read only access",
    +                            "value": 0
    +                          },
    +                          "Wen": {
    +                            "description": "Write enabled",
    +                            "value": 1
    +                          },
    +                          "Een": {
    +                            "description": "Erase enabled",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ERASEPAGE": {
    +              "description": "Register for erasing a page in code area",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ERASEPAGE": {
    +                    "description": "Register for starting erase of a page in code area",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ERASEPCR1": {
    +              "description": "Deprecated register - Register for erasing a page in code area. Equivalent to ERASEPAGE.",
    +              "offset": 1288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ERASEPCR1": {
    +                    "description": "Register for erasing a page in code area. Equivalent to ERASEPAGE.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ERASEALL": {
    +              "description": "Register for erasing all non-volatile user memory",
    +              "offset": 1292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ERASEALL": {
    +                    "description": "Erase all non-volatile memory including UICR registers. Note that the erase must be enabled using CONFIG.WEN before the non-volatile memory can be erased.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoOperation": {
    +                            "description": "No operation",
    +                            "value": 0
    +                          },
    +                          "Erase": {
    +                            "description": "Start chip erase",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ERASEPCR0": {
    +              "description": "Deprecated register - Register for erasing a page in code area. Equivalent to ERASEPAGE.",
    +              "offset": 1296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ERASEPCR0": {
    +                    "description": "Register for starting erase of a page in code area. Equivalent to ERASEPAGE.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ERASEUICR": {
    +              "description": "Register for erasing user information configuration registers",
    +              "offset": 1300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ERASEUICR": {
    +                    "description": "Register starting erase of all user information configuration registers. Note that the erase must be enabled using CONFIG.WEN before the UICR can be erased.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NoOperation": {
    +                            "description": "No operation",
    +                            "value": 0
    +                          },
    +                          "Erase": {
    +                            "description": "Start erase of UICR",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "ERASEPAGEPARTIAL": {
    +              "description": "Register for partial erase of a page in code area",
    +              "offset": 1304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ERASEPAGEPARTIAL": {
    +                    "description": "Register for starting partial erase of a page in code area",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ERASEPAGEPARTIALCFG": {
    +              "description": "Register for partial erase configuration",
    +              "offset": 1308,
    +              "size": 32,
    +              "reset_value": 10,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DURATION": {
    +                    "description": "Duration of the partial erase in milliseconds",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "ICACHECNF": {
    +              "description": "I-code cache configuration register.",
    +              "offset": 1344,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CACHEEN": {
    +                    "description": "Cache enable",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable cache. Invalidates all cache entries.",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable cache",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CACHEPROFEN": {
    +                    "description": "Cache profiling enable",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Disabled": {
    +                            "description": "Disable cache profiling",
    +                            "value": 0
    +                          },
    +                          "Enabled": {
    +                            "description": "Enable cache profiling",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "IHIT": {
    +              "description": "I-code cache hit counter.",
    +              "offset": 1352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HITS": {
    +                    "description": "Number of cache hits",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IMISS": {
    +              "description": "I-code cache miss counter.",
    +              "offset": 1356,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MISSES": {
    +                    "description": "Number of cache misses",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      }
    +    }
    +  },
    +  "devices": {
    +    "nrf52840": {
    +      "arch": "cortex_m4",
    +      "description": "nRF52840 reference description for radio MCU with ARM 32-bit Cortex-M4 Microcontroller ",
    +      "properties": {
    +        "cpu.nvic_prio_bits": "3",
    +        "cpu.mpu": "1",
    +        "cpu.fpu": "1",
    +        "cpu.revision": "r0p1",
    +        "cpu.vendor_systick_config": "0",
    +        "license": "\nCopyright (c) 2010 - 2021, Nordic Semiconductor ASA All rights reserved.\\n\n\\n\nRedistribution and use in source and binary forms, with or without\\n\nmodification, are permitted provided that the following conditions are met:\\n\n\\n\n1. Redistributions of source code must retain the above copyright notice, this\\n\n   list of conditions and the following disclaimer.\\n\n\\n\n2. Redistributions in binary form must reproduce the above copyright\\n\n   notice, this list of conditions and the following disclaimer in the\\n\n   documentation and/or other materials provided with the distribution.\\n\n\\n\n3. Neither the name of Nordic Semiconductor ASA nor the names of its\\n\n   contributors may be used to endorse or promote products derived from this\\n\n   software without specific prior written permission.\\n\n\\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\\n\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\\n\nIMPLIED WARRANTIES OF MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE\\n\nARE DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE\\n\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\\n\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\\n\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\\n\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\\n\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\\n\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\\n\nPOSSIBILITY OF SUCH DAMAGE.\\n\n        ",
    +        "cpu.name": "CM4",
    +        "cpu.endian": "little"
    +      },
    +      "children": {
    +        "interrupts": {
    +          "MemManageFault": {
    +            "index": -12
    +          },
    +          "BusFault": {
    +            "index": -11
    +          },
    +          "UsageFault": {
    +            "index": -10
    +          },
    +          "DebugMonitor": {
    +            "index": -4
    +          },
    +          "NMI": {
    +            "index": -14
    +          },
    +          "HardFault": {
    +            "index": -13
    +          },
    +          "SVCall": {
    +            "index": -5
    +          },
    +          "PendSV": {
    +            "index": -2
    +          },
    +          "SysTick": {
    +            "index": -1
    +          },
    +          "POWER_CLOCK": {
    +            "index": 0
    +          },
    +          "RADIO": {
    +            "index": 1
    +          },
    +          "UARTE0_UART0": {
    +            "index": 2
    +          },
    +          "SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0": {
    +            "index": 3
    +          },
    +          "SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1": {
    +            "index": 4
    +          },
    +          "NFCT": {
    +            "index": 5
    +          },
    +          "GPIOTE": {
    +            "index": 6
    +          },
    +          "SAADC": {
    +            "index": 7
    +          },
    +          "TIMER0": {
    +            "index": 8
    +          },
    +          "TIMER1": {
    +            "index": 9
    +          },
    +          "TIMER2": {
    +            "index": 10
    +          },
    +          "RTC0": {
    +            "index": 11
    +          },
    +          "TEMP": {
    +            "index": 12
    +          },
    +          "RNG": {
    +            "index": 13
    +          },
    +          "ECB": {
    +            "index": 14
    +          },
    +          "CCM_AAR": {
    +            "index": 15
    +          },
    +          "WDT": {
    +            "index": 16
    +          },
    +          "RTC1": {
    +            "index": 17
    +          },
    +          "QDEC": {
    +            "index": 18
    +          },
    +          "COMP_LPCOMP": {
    +            "index": 19
    +          },
    +          "SWI0_EGU0": {
    +            "index": 20
    +          },
    +          "SWI1_EGU1": {
    +            "index": 21
    +          },
    +          "SWI2_EGU2": {
    +            "index": 22
    +          },
    +          "SWI3_EGU3": {
    +            "index": 23
    +          },
    +          "SWI4_EGU4": {
    +            "index": 24
    +          },
    +          "SWI5_EGU5": {
    +            "index": 25
    +          },
    +          "TIMER3": {
    +            "index": 26
    +          },
    +          "TIMER4": {
    +            "index": 27
    +          },
    +          "PWM0": {
    +            "index": 28
    +          },
    +          "PDM": {
    +            "index": 29
    +          },
    +          "MWU": {
    +            "index": 32
    +          },
    +          "PWM1": {
    +            "index": 33
    +          },
    +          "PWM2": {
    +            "index": 34
    +          },
    +          "SPIM2_SPIS2_SPI2": {
    +            "index": 35
    +          },
    +          "RTC2": {
    +            "index": 36
    +          },
    +          "I2S": {
    +            "index": 37
    +          },
    +          "FPU": {
    +            "index": 38
    +          },
    +          "USBD": {
    +            "index": 39
    +          },
    +          "UARTE1": {
    +            "index": 40
    +          },
    +          "QSPI": {
    +            "index": 41
    +          },
    +          "CRYPTOCELL": {
    +            "index": 42
    +          },
    +          "PWM3": {
    +            "index": 45
    +          },
    +          "SPIM3": {
    +            "index": 47
    +          }
    +        },
    +        "peripheral_instances": {
    +          "SysTick": {
    +            "offset": 3758153744,
    +            "type": "types.peripherals.SCS.children.register_groups.SysTick"
    +          },
    +          "FICR": {
    +            "description": "Factory information configuration registers",
    +            "offset": 268435456,
    +            "type": "types.peripherals.FICR"
    +          },
    +          "UICR": {
    +            "description": "User information configuration registers",
    +            "offset": 268439552,
    +            "type": "types.peripherals.UICR"
    +          },
    +          "CLOCK": {
    +            "description": "Clock control",
    +            "offset": 1073741824,
    +            "type": "types.peripherals.CLOCK"
    +          },
    +          "POWER": {
    +            "description": "Power control",
    +            "offset": 1073741824,
    +            "type": "types.peripherals.POWER"
    +          },
    +          "P0": {
    +            "description": "GPIO Port 1",
    +            "offset": 1342177280,
    +            "type": "types.peripherals.P0"
    +          },
    +          "P1": {
    +            "description": "GPIO Port 2",
    +            "offset": 1342178048,
    +            "type": "types.peripherals.P0"
    +          },
    +          "RADIO": {
    +            "description": "2.4 GHz radio",
    +            "offset": 1073745920,
    +            "type": "types.peripherals.RADIO"
    +          },
    +          "UART0": {
    +            "description": "Universal Asynchronous Receiver/Transmitter",
    +            "offset": 1073750016,
    +            "type": "types.peripherals.UART0"
    +          },
    +          "UARTE0": {
    +            "description": "UART with EasyDMA 0",
    +            "offset": 1073750016,
    +            "type": "types.peripherals.UARTE0"
    +          },
    +          "SPI0": {
    +            "description": "Serial Peripheral Interface 0",
    +            "offset": 1073754112,
    +            "type": "types.peripherals.SPI0"
    +          },
    +          "SPIM0": {
    +            "description": "Serial Peripheral Interface Master with EasyDMA 0",
    +            "offset": 1073754112,
    +            "type": "types.peripherals.SPIM0"
    +          },
    +          "SPIS0": {
    +            "description": "SPI Slave 0",
    +            "offset": 1073754112,
    +            "type": "types.peripherals.SPIS0"
    +          },
    +          "TWI0": {
    +            "description": "I2C compatible Two-Wire Interface 0",
    +            "offset": 1073754112,
    +            "type": "types.peripherals.TWI0"
    +          },
    +          "TWIM0": {
    +            "description": "I2C compatible Two-Wire Master Interface with EasyDMA 0",
    +            "offset": 1073754112,
    +            "type": "types.peripherals.TWIM0"
    +          },
    +          "TWIS0": {
    +            "description": "I2C compatible Two-Wire Slave Interface with EasyDMA 0",
    +            "offset": 1073754112,
    +            "type": "types.peripherals.TWIS0"
    +          },
    +          "SPI1": {
    +            "description": "Serial Peripheral Interface 1",
    +            "offset": 1073758208,
    +            "type": "types.peripherals.SPI0"
    +          },
    +          "SPIM1": {
    +            "description": "Serial Peripheral Interface Master with EasyDMA 1",
    +            "offset": 1073758208,
    +            "type": "types.peripherals.SPIM0"
    +          },
    +          "SPIS1": {
    +            "description": "SPI Slave 1",
    +            "offset": 1073758208,
    +            "type": "types.peripherals.SPIS0"
    +          },
    +          "TWI1": {
    +            "description": "I2C compatible Two-Wire Interface 1",
    +            "offset": 1073758208,
    +            "type": "types.peripherals.TWI0"
    +          },
    +          "TWIM1": {
    +            "description": "I2C compatible Two-Wire Master Interface with EasyDMA 1",
    +            "offset": 1073758208,
    +            "type": "types.peripherals.TWIM0"
    +          },
    +          "TWIS1": {
    +            "description": "I2C compatible Two-Wire Slave Interface with EasyDMA 1",
    +            "offset": 1073758208,
    +            "type": "types.peripherals.TWIS0"
    +          },
    +          "NFCT": {
    +            "description": "NFC-A compatible radio",
    +            "offset": 1073762304,
    +            "type": "types.peripherals.NFCT"
    +          },
    +          "GPIOTE": {
    +            "description": "GPIO Tasks and Events",
    +            "offset": 1073766400,
    +            "type": "types.peripherals.GPIOTE"
    +          },
    +          "SAADC": {
    +            "description": "Successive approximation register (SAR) analog-to-digital converter",
    +            "offset": 1073770496,
    +            "type": "types.peripherals.SAADC"
    +          },
    +          "TIMER0": {
    +            "description": "Timer/Counter 0",
    +            "offset": 1073774592,
    +            "type": "types.peripherals.TIMER0"
    +          },
    +          "TIMER1": {
    +            "description": "Timer/Counter 1",
    +            "offset": 1073778688,
    +            "type": "types.peripherals.TIMER0"
    +          },
    +          "TIMER2": {
    +            "description": "Timer/Counter 2",
    +            "offset": 1073782784,
    +            "type": "types.peripherals.TIMER0"
    +          },
    +          "RTC0": {
    +            "description": "Real time counter 0",
    +            "offset": 1073786880,
    +            "type": "types.peripherals.RTC0"
    +          },
    +          "TEMP": {
    +            "description": "Temperature Sensor",
    +            "offset": 1073790976,
    +            "type": "types.peripherals.TEMP"
    +          },
    +          "RNG": {
    +            "description": "Random Number Generator",
    +            "offset": 1073795072,
    +            "type": "types.peripherals.RNG"
    +          },
    +          "ECB": {
    +            "description": "AES ECB Mode Encryption",
    +            "offset": 1073799168,
    +            "type": "types.peripherals.ECB"
    +          },
    +          "AAR": {
    +            "description": "Accelerated Address Resolver",
    +            "offset": 1073803264,
    +            "type": "types.peripherals.AAR"
    +          },
    +          "CCM": {
    +            "description": "AES CCM Mode Encryption",
    +            "offset": 1073803264,
    +            "type": "types.peripherals.CCM"
    +          },
    +          "WDT": {
    +            "description": "Watchdog Timer",
    +            "offset": 1073807360,
    +            "type": "types.peripherals.WDT"
    +          },
    +          "RTC1": {
    +            "description": "Real time counter 1",
    +            "offset": 1073811456,
    +            "type": "types.peripherals.RTC0"
    +          },
    +          "QDEC": {
    +            "description": "Quadrature Decoder",
    +            "offset": 1073815552,
    +            "type": "types.peripherals.QDEC"
    +          },
    +          "COMP": {
    +            "description": "Comparator",
    +            "offset": 1073819648,
    +            "type": "types.peripherals.COMP"
    +          },
    +          "LPCOMP": {
    +            "description": "Low Power Comparator",
    +            "offset": 1073819648,
    +            "type": "types.peripherals.LPCOMP"
    +          },
    +          "EGU0": {
    +            "description": "Event Generator Unit 0",
    +            "offset": 1073823744,
    +            "type": "types.peripherals.EGU0"
    +          },
    +          "SWI0": {
    +            "description": "Software interrupt 0",
    +            "offset": 1073823744,
    +            "type": "types.peripherals.SWI0"
    +          },
    +          "EGU1": {
    +            "description": "Event Generator Unit 1",
    +            "offset": 1073827840,
    +            "type": "types.peripherals.EGU0"
    +          },
    +          "SWI1": {
    +            "description": "Software interrupt 1",
    +            "offset": 1073827840,
    +            "type": "types.peripherals.SWI0"
    +          },
    +          "EGU2": {
    +            "description": "Event Generator Unit 2",
    +            "offset": 1073831936,
    +            "type": "types.peripherals.EGU0"
    +          },
    +          "SWI2": {
    +            "description": "Software interrupt 2",
    +            "offset": 1073831936,
    +            "type": "types.peripherals.SWI0"
    +          },
    +          "EGU3": {
    +            "description": "Event Generator Unit 3",
    +            "offset": 1073836032,
    +            "type": "types.peripherals.EGU0"
    +          },
    +          "SWI3": {
    +            "description": "Software interrupt 3",
    +            "offset": 1073836032,
    +            "type": "types.peripherals.SWI0"
    +          },
    +          "EGU4": {
    +            "description": "Event Generator Unit 4",
    +            "offset": 1073840128,
    +            "type": "types.peripherals.EGU0"
    +          },
    +          "SWI4": {
    +            "description": "Software interrupt 4",
    +            "offset": 1073840128,
    +            "type": "types.peripherals.SWI0"
    +          },
    +          "EGU5": {
    +            "description": "Event Generator Unit 5",
    +            "offset": 1073844224,
    +            "type": "types.peripherals.EGU0"
    +          },
    +          "SWI5": {
    +            "description": "Software interrupt 5",
    +            "offset": 1073844224,
    +            "type": "types.peripherals.SWI0"
    +          },
    +          "TIMER3": {
    +            "description": "Timer/Counter 3",
    +            "offset": 1073848320,
    +            "type": "types.peripherals.TIMER0"
    +          },
    +          "TIMER4": {
    +            "description": "Timer/Counter 4",
    +            "offset": 1073852416,
    +            "type": "types.peripherals.TIMER0"
    +          },
    +          "PWM0": {
    +            "description": "Pulse width modulation unit 0",
    +            "offset": 1073856512,
    +            "type": "types.peripherals.PWM0"
    +          },
    +          "PDM": {
    +            "description": "Pulse Density Modulation (Digital Microphone) Interface",
    +            "offset": 1073860608,
    +            "type": "types.peripherals.PDM"
    +          },
    +          "ACL": {
    +            "description": "Access control lists",
    +            "offset": 1073864704,
    +            "type": "types.peripherals.ACL"
    +          },
    +          "NVMC": {
    +            "description": "Non Volatile Memory Controller",
    +            "offset": 1073864704,
    +            "type": "types.peripherals.NVMC"
    +          },
    +          "PPI": {
    +            "description": "Programmable Peripheral Interconnect",
    +            "offset": 1073868800,
    +            "type": "types.peripherals.PPI"
    +          },
    +          "MWU": {
    +            "description": "Memory Watch Unit",
    +            "offset": 1073872896,
    +            "type": "types.peripherals.MWU"
    +          },
    +          "PWM1": {
    +            "description": "Pulse width modulation unit 1",
    +            "offset": 1073876992,
    +            "type": "types.peripherals.PWM0"
    +          },
    +          "PWM2": {
    +            "description": "Pulse width modulation unit 2",
    +            "offset": 1073881088,
    +            "type": "types.peripherals.PWM0"
    +          },
    +          "SPI2": {
    +            "description": "Serial Peripheral Interface 2",
    +            "offset": 1073885184,
    +            "type": "types.peripherals.SPI0"
    +          },
    +          "SPIM2": {
    +            "description": "Serial Peripheral Interface Master with EasyDMA 2",
    +            "offset": 1073885184,
    +            "type": "types.peripherals.SPIM0"
    +          },
    +          "SPIS2": {
    +            "description": "SPI Slave 2",
    +            "offset": 1073885184,
    +            "type": "types.peripherals.SPIS0"
    +          },
    +          "RTC2": {
    +            "description": "Real time counter 2",
    +            "offset": 1073889280,
    +            "type": "types.peripherals.RTC0"
    +          },
    +          "I2S": {
    +            "description": "Inter-IC Sound",
    +            "offset": 1073893376,
    +            "type": "types.peripherals.I2S"
    +          },
    +          "FPU": {
    +            "description": "FPU",
    +            "offset": 1073897472,
    +            "type": "types.peripherals.FPU"
    +          },
    +          "USBD": {
    +            "description": "Universal serial bus device",
    +            "offset": 1073901568,
    +            "type": "types.peripherals.USBD"
    +          },
    +          "UARTE1": {
    +            "description": "UART with EasyDMA 1",
    +            "offset": 1073905664,
    +            "type": "types.peripherals.UARTE0"
    +          },
    +          "QSPI": {
    +            "description": "External flash interface",
    +            "offset": 1073909760,
    +            "type": "types.peripherals.QSPI"
    +          },
    +          "CC_HOST_RGF": {
    +            "description": "CRYPTOCELL HOST_RGF interface",
    +            "offset": 1342349312,
    +            "type": "types.peripherals.CC_HOST_RGF"
    +          },
    +          "CRYPTOCELL": {
    +            "description": "ARM TrustZone CryptoCell register interface",
    +            "offset": 1342349312,
    +            "type": "types.peripherals.CRYPTOCELL"
    +          },
    +          "PWM3": {
    +            "description": "Pulse width modulation unit 3",
    +            "offset": 1073926144,
    +            "type": "types.peripherals.PWM0"
    +          },
    +          "SPIM3": {
    +            "description": "Serial Peripheral Interface Master with EasyDMA 3",
    +            "offset": 1073934336,
    +            "type": "types.peripherals.SPIM0"
    +          }
    +        }
    +      }
    +    }
    +  }
    +}
    \ No newline at end of file
    diff --git a/src/chips/nrf52840.zig b/src/chips/nrf52840.zig
    new file mode 100644
    index 000000000..8c1ffa2f4
    --- /dev/null
    +++ b/src/chips/nrf52840.zig
    @@ -0,0 +1,21782 @@
    +const micro = @import("microzig");
    +const mmio = micro.mmio;
    +
    +pub const devices = struct {
    +    ///  nRF52840 reference description for radio MCU with ARM 32-bit Cortex-M4 Microcontroller
    +    pub const nrf52840 = struct {
    +        pub const properties = struct {
    +            pub const @"cpu.nvic_prio_bits" = "3";
    +            pub const @"cpu.mpu" = "1";
    +            pub const @"cpu.fpu" = "1";
    +            pub const @"cpu.revision" = "r0p1";
    +            pub const @"cpu.vendor_systick_config" = "0";
    +            pub const license =
    +                \\
    +                \\Copyright (c) 2010 - 2021, Nordic Semiconductor ASA All rights reserved.\n
    +                \\\n
    +                \\Redistribution and use in source and binary forms, with or without\n
    +                \\modification, are permitted provided that the following conditions are met:\n
    +                \\\n
    +                \\1. Redistributions of source code must retain the above copyright notice, this\n
    +                \\   list of conditions and the following disclaimer.\n
    +                \\\n
    +                \\2. Redistributions in binary form must reproduce the above copyright\n
    +                \\   notice, this list of conditions and the following disclaimer in the\n
    +                \\   documentation and/or other materials provided with the distribution.\n
    +                \\\n
    +                \\3. Neither the name of Nordic Semiconductor ASA nor the names of its\n
    +                \\   contributors may be used to endorse or promote products derived from this\n
    +                \\   software without specific prior written permission.\n
    +                \\\n
    +                \\THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\n
    +                \\AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n
    +                \\IMPLIED WARRANTIES OF MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE\n
    +                \\ARE DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE\n
    +                \\LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n
    +                \\CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n
    +                \\SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n
    +                \\INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n
    +                \\CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n
    +                \\ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n
    +                \\POSSIBILITY OF SUCH DAMAGE.\n
    +                \\        
    +            ;
    +            pub const @"cpu.name" = "CM4";
    +            pub const @"cpu.endian" = "little";
    +        };
    +
    +        pub const VectorTable = extern struct {
    +            const Handler = micro.interrupt.Handler;
    +            const unhandled = micro.interrupt.unhandled;
    +
    +            initial_stack_pointer: u32,
    +            Reset: Handler = unhandled,
    +            NMI: Handler = unhandled,
    +            HardFault: Handler = unhandled,
    +            MemManageFault: Handler = unhandled,
    +            BusFault: Handler = unhandled,
    +            UsageFault: Handler = unhandled,
    +            reserved5: [4]u32 = undefined,
    +            SVCall: Handler = unhandled,
    +            DebugMonitor: Handler = unhandled,
    +            reserved11: [1]u32 = undefined,
    +            PendSV: Handler = unhandled,
    +            SysTick: Handler = unhandled,
    +            POWER_CLOCK: Handler = unhandled,
    +            RADIO: Handler = unhandled,
    +            UARTE0_UART0: Handler = unhandled,
    +            SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0: Handler = unhandled,
    +            SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1: Handler = unhandled,
    +            NFCT: Handler = unhandled,
    +            GPIOTE: Handler = unhandled,
    +            SAADC: Handler = unhandled,
    +            TIMER0: Handler = unhandled,
    +            TIMER1: Handler = unhandled,
    +            TIMER2: Handler = unhandled,
    +            RTC0: Handler = unhandled,
    +            TEMP: Handler = unhandled,
    +            RNG: Handler = unhandled,
    +            ECB: Handler = unhandled,
    +            CCM_AAR: Handler = unhandled,
    +            WDT: Handler = unhandled,
    +            RTC1: Handler = unhandled,
    +            QDEC: Handler = unhandled,
    +            COMP_LPCOMP: Handler = unhandled,
    +            SWI0_EGU0: Handler = unhandled,
    +            SWI1_EGU1: Handler = unhandled,
    +            SWI2_EGU2: Handler = unhandled,
    +            SWI3_EGU3: Handler = unhandled,
    +            SWI4_EGU4: Handler = unhandled,
    +            SWI5_EGU5: Handler = unhandled,
    +            TIMER3: Handler = unhandled,
    +            TIMER4: Handler = unhandled,
    +            PWM0: Handler = unhandled,
    +            PDM: Handler = unhandled,
    +            reserved44: [2]u32 = undefined,
    +            MWU: Handler = unhandled,
    +            PWM1: Handler = unhandled,
    +            PWM2: Handler = unhandled,
    +            SPIM2_SPIS2_SPI2: Handler = unhandled,
    +            RTC2: Handler = unhandled,
    +            I2S: Handler = unhandled,
    +            FPU: Handler = unhandled,
    +            USBD: Handler = unhandled,
    +            UARTE1: Handler = unhandled,
    +            QSPI: Handler = unhandled,
    +            CRYPTOCELL: Handler = unhandled,
    +            reserved57: [2]u32 = undefined,
    +            PWM3: Handler = unhandled,
    +            reserved60: [1]u32 = undefined,
    +            SPIM3: Handler = unhandled,
    +        };
    +
    +        pub const peripherals = struct {
    +            ///  Factory information configuration registers
    +            pub const FICR = @intToPtr(*volatile types.peripherals.FICR, 0x10000000);
    +            ///  User information configuration registers
    +            pub const UICR = @intToPtr(*volatile types.peripherals.UICR, 0x10001000);
    +            ///  Clock control
    +            pub const CLOCK = @intToPtr(*volatile types.peripherals.CLOCK, 0x40000000);
    +            ///  Power control
    +            pub const POWER = @intToPtr(*volatile types.peripherals.POWER, 0x40000000);
    +            ///  2.4 GHz radio
    +            pub const RADIO = @intToPtr(*volatile types.peripherals.RADIO, 0x40001000);
    +            ///  Universal Asynchronous Receiver/Transmitter
    +            pub const UART0 = @intToPtr(*volatile types.peripherals.UART0, 0x40002000);
    +            ///  UART with EasyDMA 0
    +            pub const UARTE0 = @intToPtr(*volatile types.peripherals.UARTE0, 0x40002000);
    +            ///  Serial Peripheral Interface 0
    +            pub const SPI0 = @intToPtr(*volatile types.peripherals.SPI0, 0x40003000);
    +            ///  Serial Peripheral Interface Master with EasyDMA 0
    +            pub const SPIM0 = @intToPtr(*volatile types.peripherals.SPIM0, 0x40003000);
    +            ///  SPI Slave 0
    +            pub const SPIS0 = @intToPtr(*volatile types.peripherals.SPIS0, 0x40003000);
    +            ///  I2C compatible Two-Wire Interface 0
    +            pub const TWI0 = @intToPtr(*volatile types.peripherals.TWI0, 0x40003000);
    +            ///  I2C compatible Two-Wire Master Interface with EasyDMA 0
    +            pub const TWIM0 = @intToPtr(*volatile types.peripherals.TWIM0, 0x40003000);
    +            ///  I2C compatible Two-Wire Slave Interface with EasyDMA 0
    +            pub const TWIS0 = @intToPtr(*volatile types.peripherals.TWIS0, 0x40003000);
    +            ///  Serial Peripheral Interface 1
    +            pub const SPI1 = @intToPtr(*volatile types.peripherals.SPI0, 0x40004000);
    +            ///  Serial Peripheral Interface Master with EasyDMA 1
    +            pub const SPIM1 = @intToPtr(*volatile types.peripherals.SPIM0, 0x40004000);
    +            ///  SPI Slave 1
    +            pub const SPIS1 = @intToPtr(*volatile types.peripherals.SPIS0, 0x40004000);
    +            ///  I2C compatible Two-Wire Interface 1
    +            pub const TWI1 = @intToPtr(*volatile types.peripherals.TWI0, 0x40004000);
    +            ///  I2C compatible Two-Wire Master Interface with EasyDMA 1
    +            pub const TWIM1 = @intToPtr(*volatile types.peripherals.TWIM0, 0x40004000);
    +            ///  I2C compatible Two-Wire Slave Interface with EasyDMA 1
    +            pub const TWIS1 = @intToPtr(*volatile types.peripherals.TWIS0, 0x40004000);
    +            ///  NFC-A compatible radio
    +            pub const NFCT = @intToPtr(*volatile types.peripherals.NFCT, 0x40005000);
    +            ///  GPIO Tasks and Events
    +            pub const GPIOTE = @intToPtr(*volatile types.peripherals.GPIOTE, 0x40006000);
    +            ///  Successive approximation register (SAR) analog-to-digital converter
    +            pub const SAADC = @intToPtr(*volatile types.peripherals.SAADC, 0x40007000);
    +            ///  Timer/Counter 0
    +            pub const TIMER0 = @intToPtr(*volatile types.peripherals.TIMER0, 0x40008000);
    +            ///  Timer/Counter 1
    +            pub const TIMER1 = @intToPtr(*volatile types.peripherals.TIMER0, 0x40009000);
    +            ///  Timer/Counter 2
    +            pub const TIMER2 = @intToPtr(*volatile types.peripherals.TIMER0, 0x4000a000);
    +            ///  Real time counter 0
    +            pub const RTC0 = @intToPtr(*volatile types.peripherals.RTC0, 0x4000b000);
    +            ///  Temperature Sensor
    +            pub const TEMP = @intToPtr(*volatile types.peripherals.TEMP, 0x4000c000);
    +            ///  Random Number Generator
    +            pub const RNG = @intToPtr(*volatile types.peripherals.RNG, 0x4000d000);
    +            ///  AES ECB Mode Encryption
    +            pub const ECB = @intToPtr(*volatile types.peripherals.ECB, 0x4000e000);
    +            ///  Accelerated Address Resolver
    +            pub const AAR = @intToPtr(*volatile types.peripherals.AAR, 0x4000f000);
    +            ///  AES CCM Mode Encryption
    +            pub const CCM = @intToPtr(*volatile types.peripherals.CCM, 0x4000f000);
    +            ///  Watchdog Timer
    +            pub const WDT = @intToPtr(*volatile types.peripherals.WDT, 0x40010000);
    +            ///  Real time counter 1
    +            pub const RTC1 = @intToPtr(*volatile types.peripherals.RTC0, 0x40011000);
    +            ///  Quadrature Decoder
    +            pub const QDEC = @intToPtr(*volatile types.peripherals.QDEC, 0x40012000);
    +            ///  Comparator
    +            pub const COMP = @intToPtr(*volatile types.peripherals.COMP, 0x40013000);
    +            ///  Low Power Comparator
    +            pub const LPCOMP = @intToPtr(*volatile types.peripherals.LPCOMP, 0x40013000);
    +            ///  Event Generator Unit 0
    +            pub const EGU0 = @intToPtr(*volatile types.peripherals.EGU0, 0x40014000);
    +            ///  Software interrupt 0
    +            pub const SWI0 = @intToPtr(*volatile types.peripherals.SWI0, 0x40014000);
    +            ///  Event Generator Unit 1
    +            pub const EGU1 = @intToPtr(*volatile types.peripherals.EGU0, 0x40015000);
    +            ///  Software interrupt 1
    +            pub const SWI1 = @intToPtr(*volatile types.peripherals.SWI0, 0x40015000);
    +            ///  Event Generator Unit 2
    +            pub const EGU2 = @intToPtr(*volatile types.peripherals.EGU0, 0x40016000);
    +            ///  Software interrupt 2
    +            pub const SWI2 = @intToPtr(*volatile types.peripherals.SWI0, 0x40016000);
    +            ///  Event Generator Unit 3
    +            pub const EGU3 = @intToPtr(*volatile types.peripherals.EGU0, 0x40017000);
    +            ///  Software interrupt 3
    +            pub const SWI3 = @intToPtr(*volatile types.peripherals.SWI0, 0x40017000);
    +            ///  Event Generator Unit 4
    +            pub const EGU4 = @intToPtr(*volatile types.peripherals.EGU0, 0x40018000);
    +            ///  Software interrupt 4
    +            pub const SWI4 = @intToPtr(*volatile types.peripherals.SWI0, 0x40018000);
    +            ///  Event Generator Unit 5
    +            pub const EGU5 = @intToPtr(*volatile types.peripherals.EGU0, 0x40019000);
    +            ///  Software interrupt 5
    +            pub const SWI5 = @intToPtr(*volatile types.peripherals.SWI0, 0x40019000);
    +            ///  Timer/Counter 3
    +            pub const TIMER3 = @intToPtr(*volatile types.peripherals.TIMER0, 0x4001a000);
    +            ///  Timer/Counter 4
    +            pub const TIMER4 = @intToPtr(*volatile types.peripherals.TIMER0, 0x4001b000);
    +            ///  Pulse width modulation unit 0
    +            pub const PWM0 = @intToPtr(*volatile types.peripherals.PWM0, 0x4001c000);
    +            ///  Pulse Density Modulation (Digital Microphone) Interface
    +            pub const PDM = @intToPtr(*volatile types.peripherals.PDM, 0x4001d000);
    +            ///  Access control lists
    +            pub const ACL = @intToPtr(*volatile types.peripherals.ACL, 0x4001e000);
    +            ///  Non Volatile Memory Controller
    +            pub const NVMC = @intToPtr(*volatile types.peripherals.NVMC, 0x4001e000);
    +            ///  Programmable Peripheral Interconnect
    +            pub const PPI = @intToPtr(*volatile types.peripherals.PPI, 0x4001f000);
    +            ///  Memory Watch Unit
    +            pub const MWU = @intToPtr(*volatile types.peripherals.MWU, 0x40020000);
    +            ///  Pulse width modulation unit 1
    +            pub const PWM1 = @intToPtr(*volatile types.peripherals.PWM0, 0x40021000);
    +            ///  Pulse width modulation unit 2
    +            pub const PWM2 = @intToPtr(*volatile types.peripherals.PWM0, 0x40022000);
    +            ///  Serial Peripheral Interface 2
    +            pub const SPI2 = @intToPtr(*volatile types.peripherals.SPI0, 0x40023000);
    +            ///  Serial Peripheral Interface Master with EasyDMA 2
    +            pub const SPIM2 = @intToPtr(*volatile types.peripherals.SPIM0, 0x40023000);
    +            ///  SPI Slave 2
    +            pub const SPIS2 = @intToPtr(*volatile types.peripherals.SPIS0, 0x40023000);
    +            ///  Real time counter 2
    +            pub const RTC2 = @intToPtr(*volatile types.peripherals.RTC0, 0x40024000);
    +            ///  Inter-IC Sound
    +            pub const I2S = @intToPtr(*volatile types.peripherals.I2S, 0x40025000);
    +            ///  FPU
    +            pub const FPU = @intToPtr(*volatile types.peripherals.FPU, 0x40026000);
    +            ///  Universal serial bus device
    +            pub const USBD = @intToPtr(*volatile types.peripherals.USBD, 0x40027000);
    +            ///  UART with EasyDMA 1
    +            pub const UARTE1 = @intToPtr(*volatile types.peripherals.UARTE0, 0x40028000);
    +            ///  External flash interface
    +            pub const QSPI = @intToPtr(*volatile types.peripherals.QSPI, 0x40029000);
    +            ///  Pulse width modulation unit 3
    +            pub const PWM3 = @intToPtr(*volatile types.peripherals.PWM0, 0x4002d000);
    +            ///  Serial Peripheral Interface Master with EasyDMA 3
    +            pub const SPIM3 = @intToPtr(*volatile types.peripherals.SPIM0, 0x4002f000);
    +            ///  GPIO Port 1
    +            pub const P0 = @intToPtr(*volatile types.peripherals.P0, 0x50000000);
    +            ///  GPIO Port 2
    +            pub const P1 = @intToPtr(*volatile types.peripherals.P0, 0x50000300);
    +            ///  CRYPTOCELL HOST_RGF interface
    +            pub const CC_HOST_RGF = @intToPtr(*volatile types.peripherals.CC_HOST_RGF, 0x5002a000);
    +            ///  ARM TrustZone CryptoCell register interface
    +            pub const CRYPTOCELL = @intToPtr(*volatile types.peripherals.CRYPTOCELL, 0x5002a000);
    +            ///  System Tick Timer
    +            pub const SysTick = @intToPtr(*volatile types.peripherals.SCS.SysTick, 0xe000e010);
    +        };
    +    };
    +};
    +
    +pub const types = struct {
    +    pub const peripherals = struct {
    +        ///  System Control Space
    +        pub const SCS = struct {
    +            ///  System Tick Timer
    +            pub const SysTick = extern struct {
    +                ///  SysTick Control and Status Register
    +                CTRL: mmio.Mmio(packed struct(u32) {
    +                    ENABLE: u1,
    +                    TICKINT: u1,
    +                    CLKSOURCE: u1,
    +                    reserved16: u13,
    +                    COUNTFLAG: u1,
    +                    padding: u15,
    +                }),
    +                ///  SysTick Reload Value Register
    +                LOAD: mmio.Mmio(packed struct(u32) {
    +                    RELOAD: u24,
    +                    padding: u8,
    +                }),
    +                ///  SysTick Current Value Register
    +                VAL: mmio.Mmio(packed struct(u32) {
    +                    CURRENT: u24,
    +                    padding: u8,
    +                }),
    +                ///  SysTick Calibration Register
    +                CALIB: mmio.Mmio(packed struct(u32) {
    +                    TENMS: u24,
    +                    reserved30: u6,
    +                    SKEW: u1,
    +                    NOREF: u1,
    +                }),
    +            };
    +        };
    +
    +        ///  Factory information configuration registers
    +        pub const FICR = extern struct {
    +            reserved16: [16]u8,
    +            ///  Code memory page size
    +            CODEPAGESIZE: mmio.Mmio(packed struct(u32) {
    +                ///  Code memory page size
    +                CODEPAGESIZE: u32,
    +            }),
    +            ///  Code memory size
    +            CODESIZE: mmio.Mmio(packed struct(u32) {
    +                ///  Code memory size in number of pages
    +                CODESIZE: u32,
    +            }),
    +            reserved96: [72]u8,
    +            ///  Description collection: Device identifier
    +            DEVICEID: [2]mmio.Mmio(packed struct(u32) {
    +                ///  64 bit unique device identifier
    +                DEVICEID: u32,
    +            }),
    +            reserved128: [24]u8,
    +            ///  Description collection: Encryption root, word n
    +            ER: [4]mmio.Mmio(packed struct(u32) {
    +                ///  Encryption root, word n
    +                ER: u32,
    +            }),
    +            ///  Description collection: Identity Root, word n
    +            IR: [4]mmio.Mmio(packed struct(u32) {
    +                ///  Identity Root, word n
    +                IR: u32,
    +            }),
    +            ///  Device address type
    +            DEVICEADDRTYPE: mmio.Mmio(packed struct(u32) {
    +                ///  Device address type
    +                DEVICEADDRTYPE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Public address
    +                        Public = 0x0,
    +                        ///  Random address
    +                        Random = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Description collection: Device address n
    +            DEVICEADDR: [2]mmio.Mmio(packed struct(u32) {
    +                ///  48 bit device address
    +                DEVICEADDR: u32,
    +            }),
    +            reserved848: [676]u8,
    +            ///  Description collection: Production test signature n
    +            PRODTEST: [3]mmio.Mmio(packed struct(u32) {
    +                ///  Production test signature n
    +                PRODTEST: packed union {
    +                    raw: u32,
    +                    value: enum(u32) {
    +                        ///  Production tests done
    +                        Done = 0xbb42319f,
    +                        ///  Production tests not done
    +                        NotDone = 0xffffffff,
    +                        _,
    +                    },
    +                },
    +            }),
    +        };
    +
    +        ///  User information configuration registers
    +        pub const UICR = extern struct {
    +            reserved20: [20]u8,
    +            ///  Description collection: Reserved for Nordic firmware design
    +            NRFFW: [13]mmio.Mmio(packed struct(u32) {
    +                ///  Reserved for Nordic firmware design
    +                NRFFW: u32,
    +            }),
    +            reserved80: [8]u8,
    +            ///  Description collection: Reserved for Nordic hardware design
    +            NRFHW: [12]mmio.Mmio(packed struct(u32) {
    +                ///  Reserved for Nordic hardware design
    +                NRFHW: u32,
    +            }),
    +            ///  Description collection: Reserved for customer
    +            CUSTOMER: [32]mmio.Mmio(packed struct(u32) {
    +                ///  Reserved for customer
    +                CUSTOMER: u32,
    +            }),
    +            reserved512: [256]u8,
    +            ///  Description collection: Mapping of the nRESET function (see POWER chapter for details)
    +            PSELRESET: [2]mmio.Mmio(packed struct(u32) {
    +                ///  GPIO pin number onto which nRESET is exposed
    +                PIN: u5,
    +                ///  Port number onto which nRESET is exposed
    +                PORT: u1,
    +                reserved31: u25,
    +                ///  Connection
    +                CONNECT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disconnect
    +                        Disconnected = 0x1,
    +                        ///  Connect
    +                        Connected = 0x0,
    +                    },
    +                },
    +            }),
    +            ///  Access port protection
    +            APPROTECT: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable access port protection.
    +                PALL: packed union {
    +                    raw: u8,
    +                    value: enum(u8) {
    +                        ///  Disable
    +                        Disabled = 0xff,
    +                        ///  Enable
    +                        Enabled = 0x0,
    +                        _,
    +                    },
    +                },
    +                padding: u24,
    +            }),
    +            ///  Setting of pins dedicated to NFC functionality: NFC antenna or GPIO
    +            NFCPINS: mmio.Mmio(packed struct(u32) {
    +                ///  Setting of pins dedicated to NFC functionality
    +                PROTECT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Operation as GPIO pins. Same protection as normal GPIO pins
    +                        Disabled = 0x0,
    +                        ///  Operation as NFC antenna pins. Configures the protection for NFC operation
    +                        NFC = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Processor debug control
    +            DEBUGCTRL: mmio.Mmio(packed struct(u32) {
    +                ///  Configure CPU non-intrusive debug features
    +                CPUNIDEN: packed union {
    +                    raw: u8,
    +                    value: enum(u8) {
    +                        ///  Enable CPU ITM and ETM functionality (default behavior)
    +                        Enabled = 0xff,
    +                        ///  Disable CPU ITM and ETM functionality
    +                        Disabled = 0x0,
    +                        _,
    +                    },
    +                },
    +                ///  Configure CPU flash patch and breakpoint (FPB) unit behavior
    +                CPUFPBEN: packed union {
    +                    raw: u8,
    +                    value: enum(u8) {
    +                        ///  Enable CPU FPB unit (default behavior)
    +                        Enabled = 0xff,
    +                        ///  Disable CPU FPB unit. Writes into the FPB registers will be ignored.
    +                        Disabled = 0x0,
    +                        _,
    +                    },
    +                },
    +                padding: u16,
    +            }),
    +            reserved772: [240]u8,
    +            ///  GPIO reference voltage / external output supply voltage in high voltage mode
    +            REGOUT0: mmio.Mmio(packed struct(u32) {
    +                ///  Output voltage from of REG0 regulator stage. The maximum output voltage from this stage is given as VDDH - VEXDIF.
    +                VOUT: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        ///  1.8 V
    +                        @"1V8" = 0x0,
    +                        ///  2.1 V
    +                        @"2V1" = 0x1,
    +                        ///  2.4 V
    +                        @"2V4" = 0x2,
    +                        ///  2.7 V
    +                        @"2V7" = 0x3,
    +                        ///  3.0 V
    +                        @"3V0" = 0x4,
    +                        ///  3.3 V
    +                        @"3V3" = 0x5,
    +                        ///  Default voltage: 1.8 V
    +                        DEFAULT = 0x7,
    +                        _,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +        };
    +
    +        ///  Clock control
    +        pub const CLOCK = extern struct {
    +            ///  Start HFXO crystal oscillator
    +            TASKS_HFCLKSTART: mmio.Mmio(packed struct(u32) {
    +                ///  Start HFXO crystal oscillator
    +                TASKS_HFCLKSTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Stop HFXO crystal oscillator
    +            TASKS_HFCLKSTOP: mmio.Mmio(packed struct(u32) {
    +                ///  Stop HFXO crystal oscillator
    +                TASKS_HFCLKSTOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Start LFCLK
    +            TASKS_LFCLKSTART: mmio.Mmio(packed struct(u32) {
    +                ///  Start LFCLK
    +                TASKS_LFCLKSTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Stop LFCLK
    +            TASKS_LFCLKSTOP: mmio.Mmio(packed struct(u32) {
    +                ///  Stop LFCLK
    +                TASKS_LFCLKSTOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Start calibration of LFRC
    +            TASKS_CAL: mmio.Mmio(packed struct(u32) {
    +                ///  Start calibration of LFRC
    +                TASKS_CAL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Start calibration timer
    +            TASKS_CTSTART: mmio.Mmio(packed struct(u32) {
    +                ///  Start calibration timer
    +                TASKS_CTSTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Stop calibration timer
    +            TASKS_CTSTOP: mmio.Mmio(packed struct(u32) {
    +                ///  Stop calibration timer
    +                TASKS_CTSTOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved256: [228]u8,
    +            ///  HFXO crystal oscillator started
    +            EVENTS_HFCLKSTARTED: mmio.Mmio(packed struct(u32) {
    +                ///  HFXO crystal oscillator started
    +                EVENTS_HFCLKSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  LFCLK started
    +            EVENTS_LFCLKSTARTED: mmio.Mmio(packed struct(u32) {
    +                ///  LFCLK started
    +                EVENTS_LFCLKSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved268: [4]u8,
    +            ///  Calibration of LFRC completed
    +            EVENTS_DONE: mmio.Mmio(packed struct(u32) {
    +                ///  Calibration of LFRC completed
    +                EVENTS_DONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Calibration timer timeout
    +            EVENTS_CTTO: mmio.Mmio(packed struct(u32) {
    +                ///  Calibration timer timeout
    +                EVENTS_CTTO: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved296: [20]u8,
    +            ///  Calibration timer has been started and is ready to process new tasks
    +            EVENTS_CTSTARTED: mmio.Mmio(packed struct(u32) {
    +                ///  Calibration timer has been started and is ready to process new tasks
    +                EVENTS_CTSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Calibration timer has been stopped and is ready to process new tasks
    +            EVENTS_CTSTOPPED: mmio.Mmio(packed struct(u32) {
    +                ///  Calibration timer has been stopped and is ready to process new tasks
    +                EVENTS_CTSTOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved772: [468]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to enable interrupt for event HFCLKSTARTED
    +                HFCLKSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event LFCLKSTARTED
    +                LFCLKSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved3: u1,
    +                ///  Write '1' to enable interrupt for event DONE
    +                DONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event CTTO
    +                CTTO: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved10: u5,
    +                ///  Write '1' to enable interrupt for event CTSTARTED
    +                CTSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event CTSTOPPED
    +                CTSTOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u20,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to disable interrupt for event HFCLKSTARTED
    +                HFCLKSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event LFCLKSTARTED
    +                LFCLKSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved3: u1,
    +                ///  Write '1' to disable interrupt for event DONE
    +                DONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event CTTO
    +                CTTO: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved10: u5,
    +                ///  Write '1' to disable interrupt for event CTSTARTED
    +                CTSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event CTSTOPPED
    +                CTSTOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u20,
    +            }),
    +            reserved1032: [252]u8,
    +            ///  Status indicating that HFCLKSTART task has been triggered
    +            HFCLKRUN: mmio.Mmio(packed struct(u32) {
    +                ///  HFCLKSTART task triggered or not
    +                STATUS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Task not triggered
    +                        NotTriggered = 0x0,
    +                        ///  Task triggered
    +                        Triggered = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  HFCLK status
    +            HFCLKSTAT: mmio.Mmio(packed struct(u32) {
    +                ///  Source of HFCLK
    +                SRC: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  64 MHz internal oscillator (HFINT)
    +                        RC = 0x0,
    +                        ///  64 MHz crystal oscillator (HFXO)
    +                        Xtal = 0x1,
    +                    },
    +                },
    +                reserved16: u15,
    +                ///  HFCLK state
    +                STATE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  HFCLK not running
    +                        NotRunning = 0x0,
    +                        ///  HFCLK running
    +                        Running = 0x1,
    +                    },
    +                },
    +                padding: u15,
    +            }),
    +            reserved1044: [4]u8,
    +            ///  Status indicating that LFCLKSTART task has been triggered
    +            LFCLKRUN: mmio.Mmio(packed struct(u32) {
    +                ///  LFCLKSTART task triggered or not
    +                STATUS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Task not triggered
    +                        NotTriggered = 0x0,
    +                        ///  Task triggered
    +                        Triggered = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  LFCLK status
    +            LFCLKSTAT: mmio.Mmio(packed struct(u32) {
    +                ///  Source of LFCLK
    +                SRC: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  32.768 kHz RC oscillator (LFRC)
    +                        RC = 0x0,
    +                        ///  32.768 kHz crystal oscillator (LFXO)
    +                        Xtal = 0x1,
    +                        ///  32.768 kHz synthesized from HFCLK (LFSYNT)
    +                        Synth = 0x2,
    +                        _,
    +                    },
    +                },
    +                reserved16: u14,
    +                ///  LFCLK state
    +                STATE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  LFCLK not running
    +                        NotRunning = 0x0,
    +                        ///  LFCLK running
    +                        Running = 0x1,
    +                    },
    +                },
    +                padding: u15,
    +            }),
    +            ///  Copy of LFCLKSRC register, set when LFCLKSTART task was triggered
    +            LFCLKSRCCOPY: mmio.Mmio(packed struct(u32) {
    +                ///  Clock source
    +                SRC: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  32.768 kHz RC oscillator (LFRC)
    +                        RC = 0x0,
    +                        ///  32.768 kHz crystal oscillator (LFXO)
    +                        Xtal = 0x1,
    +                        ///  32.768 kHz synthesized from HFCLK (LFSYNT)
    +                        Synth = 0x2,
    +                        _,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            reserved1304: [248]u8,
    +            ///  Clock source for the LFCLK
    +            LFCLKSRC: mmio.Mmio(packed struct(u32) {
    +                ///  Clock source
    +                SRC: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  32.768 kHz RC oscillator (LFRC)
    +                        RC = 0x0,
    +                        ///  32.768 kHz crystal oscillator (LFXO)
    +                        Xtal = 0x1,
    +                        ///  32.768 kHz synthesized from HFCLK (LFSYNT)
    +                        Synth = 0x2,
    +                        _,
    +                    },
    +                },
    +                reserved16: u14,
    +                ///  Enable or disable bypass of LFCLK crystal oscillator with external clock source
    +                BYPASS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable (use with Xtal or low-swing external source)
    +                        Disabled = 0x0,
    +                        ///  Enable (use with rail-to-rail external source)
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable external source for LFCLK
    +                EXTERNAL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable external source (use with Xtal)
    +                        Disabled = 0x0,
    +                        ///  Enable use of external source instead of Xtal (SRC needs to be set to Xtal)
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u14,
    +            }),
    +            reserved1320: [12]u8,
    +            ///  HFXO debounce time. The HFXO is started by triggering the TASKS_HFCLKSTART task.
    +            HFXODEBOUNCE: mmio.Mmio(packed struct(u32) {
    +                ///  HFXO debounce time. Debounce time = HFXODEBOUNCE * 16 us.
    +                HFXODEBOUNCE: packed union {
    +                    raw: u8,
    +                    value: enum(u8) {
    +                        ///  256 us debounce time. Recommended for TSX-3225, FA-20H and FA-128 crystals.
    +                        Db256us = 0x10,
    +                        ///  1024 us debounce time. Recommended for NX1612AA and NX1210AB crystals.
    +                        Db1024us = 0x40,
    +                        _,
    +                    },
    +                },
    +                padding: u24,
    +            }),
    +            reserved1336: [12]u8,
    +            ///  Calibration timer interval
    +            CTIV: mmio.Mmio(packed struct(u32) {
    +                ///  Calibration timer interval in multiple of 0.25 seconds. Range: 0.25 seconds to 31.75 seconds.
    +                CTIV: u7,
    +                padding: u25,
    +            }),
    +            reserved1372: [32]u8,
    +            ///  Clocking options for the trace port debug interface
    +            TRACECONFIG: mmio.Mmio(packed struct(u32) {
    +                ///  Speed of trace port clock. Note that the TRACECLK pin will output this clock divided by two.
    +                TRACEPORTSPEED: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  32 MHz trace port clock (TRACECLK = 16 MHz)
    +                        @"32MHz" = 0x0,
    +                        ///  16 MHz trace port clock (TRACECLK = 8 MHz)
    +                        @"16MHz" = 0x1,
    +                        ///  8 MHz trace port clock (TRACECLK = 4 MHz)
    +                        @"8MHz" = 0x2,
    +                        ///  4 MHz trace port clock (TRACECLK = 2 MHz)
    +                        @"4MHz" = 0x3,
    +                    },
    +                },
    +                reserved16: u14,
    +                ///  Pin multiplexing of trace signals. See pin assignment chapter for more details.
    +                TRACEMUX: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  No trace signals routed to pins. All pins can be used as regular GPIOs.
    +                        GPIO = 0x0,
    +                        ///  SWO trace signal routed to pin. Remaining pins can be used as regular GPIOs.
    +                        Serial = 0x1,
    +                        ///  All trace signals (TRACECLK and TRACEDATA[n]) routed to pins.
    +                        Parallel = 0x2,
    +                        _,
    +                    },
    +                },
    +                padding: u14,
    +            }),
    +            reserved1460: [84]u8,
    +            ///  LFRC mode configuration
    +            LFRCMODE: mmio.Mmio(packed struct(u32) {
    +                ///  Set LFRC mode
    +                MODE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Normal mode
    +                        Normal = 0x0,
    +                        ///  Ultra-low power mode (ULP)
    +                        ULP = 0x1,
    +                    },
    +                },
    +                reserved16: u15,
    +                ///  Active LFRC mode. This field is read only.
    +                STATUS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Normal mode
    +                        Normal = 0x0,
    +                        ///  Ultra-low power mode (ULP)
    +                        ULP = 0x1,
    +                    },
    +                },
    +                padding: u15,
    +            }),
    +        };
    +
    +        ///  Power control
    +        pub const POWER = extern struct {
    +            reserved120: [120]u8,
    +            ///  Enable Constant Latency mode
    +            TASKS_CONSTLAT: mmio.Mmio(packed struct(u32) {
    +                ///  Enable Constant Latency mode
    +                TASKS_CONSTLAT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Enable Low-power mode (variable latency)
    +            TASKS_LOWPWR: mmio.Mmio(packed struct(u32) {
    +                ///  Enable Low-power mode (variable latency)
    +                TASKS_LOWPWR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved264: [136]u8,
    +            ///  Power failure warning
    +            EVENTS_POFWARN: mmio.Mmio(packed struct(u32) {
    +                ///  Power failure warning
    +                EVENTS_POFWARN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved276: [8]u8,
    +            ///  CPU entered WFI/WFE sleep
    +            EVENTS_SLEEPENTER: mmio.Mmio(packed struct(u32) {
    +                ///  CPU entered WFI/WFE sleep
    +                EVENTS_SLEEPENTER: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  CPU exited WFI/WFE sleep
    +            EVENTS_SLEEPEXIT: mmio.Mmio(packed struct(u32) {
    +                ///  CPU exited WFI/WFE sleep
    +                EVENTS_SLEEPEXIT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Voltage supply detected on VBUS
    +            EVENTS_USBDETECTED: mmio.Mmio(packed struct(u32) {
    +                ///  Voltage supply detected on VBUS
    +                EVENTS_USBDETECTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Voltage supply removed from VBUS
    +            EVENTS_USBREMOVED: mmio.Mmio(packed struct(u32) {
    +                ///  Voltage supply removed from VBUS
    +                EVENTS_USBREMOVED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  USB 3.3 V supply ready
    +            EVENTS_USBPWRRDY: mmio.Mmio(packed struct(u32) {
    +                ///  USB 3.3 V supply ready
    +                EVENTS_USBPWRRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved772: [476]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                reserved2: u2,
    +                ///  Write '1' to enable interrupt for event POFWARN
    +                POFWARN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved5: u2,
    +                ///  Write '1' to enable interrupt for event SLEEPENTER
    +                SLEEPENTER: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event SLEEPEXIT
    +                SLEEPEXIT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event USBDETECTED
    +                USBDETECTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event USBREMOVED
    +                USBREMOVED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event USBPWRRDY
    +                USBPWRRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u22,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                reserved2: u2,
    +                ///  Write '1' to disable interrupt for event POFWARN
    +                POFWARN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved5: u2,
    +                ///  Write '1' to disable interrupt for event SLEEPENTER
    +                SLEEPENTER: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event SLEEPEXIT
    +                SLEEPEXIT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event USBDETECTED
    +                USBDETECTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event USBREMOVED
    +                USBREMOVED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event USBPWRRDY
    +                USBPWRRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u22,
    +            }),
    +            reserved1024: [244]u8,
    +            ///  Reset reason
    +            RESETREAS: mmio.Mmio(packed struct(u32) {
    +                ///  Reset from pin-reset detected
    +                RESETPIN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Not detected
    +                        NotDetected = 0x0,
    +                        ///  Detected
    +                        Detected = 0x1,
    +                    },
    +                },
    +                ///  Reset from watchdog detected
    +                DOG: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Not detected
    +                        NotDetected = 0x0,
    +                        ///  Detected
    +                        Detected = 0x1,
    +                    },
    +                },
    +                ///  Reset from soft reset detected
    +                SREQ: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Not detected
    +                        NotDetected = 0x0,
    +                        ///  Detected
    +                        Detected = 0x1,
    +                    },
    +                },
    +                ///  Reset from CPU lock-up detected
    +                LOCKUP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Not detected
    +                        NotDetected = 0x0,
    +                        ///  Detected
    +                        Detected = 0x1,
    +                    },
    +                },
    +                reserved16: u12,
    +                ///  Reset due to wake up from System OFF mode when wakeup is triggered from DETECT signal from GPIO
    +                OFF: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Not detected
    +                        NotDetected = 0x0,
    +                        ///  Detected
    +                        Detected = 0x1,
    +                    },
    +                },
    +                ///  Reset due to wake up from System OFF mode when wakeup is triggered from ANADETECT signal from LPCOMP
    +                LPCOMP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Not detected
    +                        NotDetected = 0x0,
    +                        ///  Detected
    +                        Detected = 0x1,
    +                    },
    +                },
    +                ///  Reset due to wake up from System OFF mode when wakeup is triggered from entering into debug interface mode
    +                DIF: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Not detected
    +                        NotDetected = 0x0,
    +                        ///  Detected
    +                        Detected = 0x1,
    +                    },
    +                },
    +                ///  Reset due to wake up from System OFF mode by NFC field detect
    +                NFC: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Not detected
    +                        NotDetected = 0x0,
    +                        ///  Detected
    +                        Detected = 0x1,
    +                    },
    +                },
    +                ///  Reset due to wake up from System OFF mode by VBUS rising into valid range
    +                VBUS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Not detected
    +                        NotDetected = 0x0,
    +                        ///  Detected
    +                        Detected = 0x1,
    +                    },
    +                },
    +                padding: u11,
    +            }),
    +            reserved1064: [36]u8,
    +            ///  Deprecated register - RAM status register
    +            RAMSTATUS: mmio.Mmio(packed struct(u32) {
    +                ///  RAM block 0 is on or off/powering up
    +                RAMBLOCK0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Off
    +                        Off = 0x0,
    +                        ///  On
    +                        On = 0x1,
    +                    },
    +                },
    +                ///  RAM block 1 is on or off/powering up
    +                RAMBLOCK1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Off
    +                        Off = 0x0,
    +                        ///  On
    +                        On = 0x1,
    +                    },
    +                },
    +                ///  RAM block 2 is on or off/powering up
    +                RAMBLOCK2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Off
    +                        Off = 0x0,
    +                        ///  On
    +                        On = 0x1,
    +                    },
    +                },
    +                ///  RAM block 3 is on or off/powering up
    +                RAMBLOCK3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Off
    +                        Off = 0x0,
    +                        ///  On
    +                        On = 0x1,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1080: [12]u8,
    +            ///  USB supply status
    +            USBREGSTATUS: mmio.Mmio(packed struct(u32) {
    +                ///  VBUS input detection status (USBDETECTED and USBREMOVED events are derived from this information)
    +                VBUSDETECT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  VBUS voltage below valid threshold
    +                        NoVbus = 0x0,
    +                        ///  VBUS voltage above valid threshold
    +                        VbusPresent = 0x1,
    +                    },
    +                },
    +                ///  USB supply output settling time elapsed
    +                OUTPUTRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  USBREG output settling time not elapsed
    +                        NotReady = 0x0,
    +                        ///  USBREG output settling time elapsed (same information as USBPWRRDY event)
    +                        Ready = 0x1,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            reserved1280: [196]u8,
    +            ///  System OFF register
    +            SYSTEMOFF: mmio.Mmio(packed struct(u32) {
    +                ///  Enable System OFF mode
    +                SYSTEMOFF: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Enable System OFF mode
    +                        Enter = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1296: [12]u8,
    +            ///  Power-fail comparator configuration
    +            POFCON: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable power failure warning
    +                POF: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Power-fail comparator threshold setting. This setting applies both for normal voltage mode (supply connected to both VDD and VDDH) and high voltage mode (supply connected to VDDH only). Values 0-3 set threshold below 1.7 V and should not be used as brown out detection will be activated before power failure warning on such low voltages.
    +                THRESHOLD: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  Set threshold to 1.7 V
    +                        V17 = 0x4,
    +                        ///  Set threshold to 1.8 V
    +                        V18 = 0x5,
    +                        ///  Set threshold to 1.9 V
    +                        V19 = 0x6,
    +                        ///  Set threshold to 2.0 V
    +                        V20 = 0x7,
    +                        ///  Set threshold to 2.1 V
    +                        V21 = 0x8,
    +                        ///  Set threshold to 2.2 V
    +                        V22 = 0x9,
    +                        ///  Set threshold to 2.3 V
    +                        V23 = 0xa,
    +                        ///  Set threshold to 2.4 V
    +                        V24 = 0xb,
    +                        ///  Set threshold to 2.5 V
    +                        V25 = 0xc,
    +                        ///  Set threshold to 2.6 V
    +                        V26 = 0xd,
    +                        ///  Set threshold to 2.7 V
    +                        V27 = 0xe,
    +                        ///  Set threshold to 2.8 V
    +                        V28 = 0xf,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                ///  Power-fail comparator threshold setting for high voltage mode (supply connected to VDDH only). This setting does not apply for normal voltage mode (supply connected to both VDD and VDDH).
    +                THRESHOLDVDDH: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  Set threshold to 2.7 V
    +                        V27 = 0x0,
    +                        ///  Set threshold to 2.8 V
    +                        V28 = 0x1,
    +                        ///  Set threshold to 2.9 V
    +                        V29 = 0x2,
    +                        ///  Set threshold to 3.0 V
    +                        V30 = 0x3,
    +                        ///  Set threshold to 3.1 V
    +                        V31 = 0x4,
    +                        ///  Set threshold to 3.2 V
    +                        V32 = 0x5,
    +                        ///  Set threshold to 3.3 V
    +                        V33 = 0x6,
    +                        ///  Set threshold to 3.4 V
    +                        V34 = 0x7,
    +                        ///  Set threshold to 3.5 V
    +                        V35 = 0x8,
    +                        ///  Set threshold to 3.6 V
    +                        V36 = 0x9,
    +                        ///  Set threshold to 3.7 V
    +                        V37 = 0xa,
    +                        ///  Set threshold to 3.8 V
    +                        V38 = 0xb,
    +                        ///  Set threshold to 3.9 V
    +                        V39 = 0xc,
    +                        ///  Set threshold to 4.0 V
    +                        V40 = 0xd,
    +                        ///  Set threshold to 4.1 V
    +                        V41 = 0xe,
    +                        ///  Set threshold to 4.2 V
    +                        V42 = 0xf,
    +                    },
    +                },
    +                padding: u20,
    +            }),
    +            reserved1308: [8]u8,
    +            ///  General purpose retention register
    +            GPREGRET: mmio.Mmio(packed struct(u32) {
    +                ///  General purpose retention register
    +                GPREGRET: u8,
    +                padding: u24,
    +            }),
    +            ///  General purpose retention register
    +            GPREGRET2: mmio.Mmio(packed struct(u32) {
    +                ///  General purpose retention register
    +                GPREGRET: u8,
    +                padding: u24,
    +            }),
    +            reserved1400: [84]u8,
    +            ///  Enable DC/DC converter for REG1 stage
    +            DCDCEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable DC/DC converter for REG1 stage.
    +                DCDCEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1408: [4]u8,
    +            ///  Enable DC/DC converter for REG0 stage
    +            DCDCEN0: mmio.Mmio(packed struct(u32) {
    +                ///  Enable DC/DC converter for REG0 stage.
    +                DCDCEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1600: [188]u8,
    +            ///  Main supply status
    +            MAINREGSTATUS: mmio.Mmio(packed struct(u32) {
    +                ///  Main supply status
    +                MAINREGSTATUS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Normal voltage mode. Voltage supplied on VDD.
    +                        Normal = 0x0,
    +                        ///  High voltage mode. Voltage supplied on VDDH.
    +                        High = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +        };
    +
    +        ///  GPIO Port 1
    +        pub const P0 = extern struct {
    +            reserved1284: [1284]u8,
    +            ///  Write GPIO port
    +            OUT: mmio.Mmio(packed struct(u32) {
    +                ///  Pin 0
    +                PIN0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 1
    +                PIN1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 2
    +                PIN2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 3
    +                PIN3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 4
    +                PIN4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 5
    +                PIN5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 6
    +                PIN6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 7
    +                PIN7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 8
    +                PIN8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 9
    +                PIN9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 10
    +                PIN10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 11
    +                PIN11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 12
    +                PIN12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 13
    +                PIN13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 14
    +                PIN14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 15
    +                PIN15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 16
    +                PIN16: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 17
    +                PIN17: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 18
    +                PIN18: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 19
    +                PIN19: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 20
    +                PIN20: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 21
    +                PIN21: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 22
    +                PIN22: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 23
    +                PIN23: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 24
    +                PIN24: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 25
    +                PIN25: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 26
    +                PIN26: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 27
    +                PIN27: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 28
    +                PIN28: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 29
    +                PIN29: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 30
    +                PIN30: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 31
    +                PIN31: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin driver is low
    +                        Low = 0x0,
    +                        ///  Pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +            }),
    +            ///  Set individual bits in GPIO port
    +            OUTSET: mmio.Mmio(packed struct(u32) {
    +                ///  Pin 0
    +                PIN0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 1
    +                PIN1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 2
    +                PIN2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 3
    +                PIN3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 4
    +                PIN4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 5
    +                PIN5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 6
    +                PIN6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 7
    +                PIN7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 8
    +                PIN8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 9
    +                PIN9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 10
    +                PIN10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 11
    +                PIN11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 12
    +                PIN12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 13
    +                PIN13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 14
    +                PIN14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 15
    +                PIN15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 16
    +                PIN16: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 17
    +                PIN17: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 18
    +                PIN18: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 19
    +                PIN19: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 20
    +                PIN20: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 21
    +                PIN21: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 22
    +                PIN22: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 23
    +                PIN23: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 24
    +                PIN24: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 25
    +                PIN25: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 26
    +                PIN26: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 27
    +                PIN27: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 28
    +                PIN28: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 29
    +                PIN29: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 30
    +                PIN30: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 31
    +                PIN31: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +            }),
    +            ///  Clear individual bits in GPIO port
    +            OUTCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Pin 0
    +                PIN0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 1
    +                PIN1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 2
    +                PIN2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 3
    +                PIN3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 4
    +                PIN4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 5
    +                PIN5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 6
    +                PIN6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 7
    +                PIN7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 8
    +                PIN8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 9
    +                PIN9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 10
    +                PIN10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 11
    +                PIN11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 12
    +                PIN12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 13
    +                PIN13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 14
    +                PIN14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 15
    +                PIN15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 16
    +                PIN16: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 17
    +                PIN17: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 18
    +                PIN18: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 19
    +                PIN19: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 20
    +                PIN20: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 21
    +                PIN21: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 22
    +                PIN22: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 23
    +                PIN23: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 24
    +                PIN24: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 25
    +                PIN25: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 26
    +                PIN26: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 27
    +                PIN27: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 28
    +                PIN28: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 29
    +                PIN29: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 30
    +                PIN30: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 31
    +                PIN31: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin driver is low
    +                        Low = 0x0,
    +                        ///  Read: pin driver is high
    +                        High = 0x1,
    +                    },
    +                },
    +            }),
    +            ///  Read GPIO port
    +            IN: mmio.Mmio(packed struct(u32) {
    +                ///  Pin 0
    +                PIN0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 1
    +                PIN1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 2
    +                PIN2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 3
    +                PIN3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 4
    +                PIN4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 5
    +                PIN5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 6
    +                PIN6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 7
    +                PIN7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 8
    +                PIN8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 9
    +                PIN9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 10
    +                PIN10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 11
    +                PIN11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 12
    +                PIN12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 13
    +                PIN13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 14
    +                PIN14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 15
    +                PIN15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 16
    +                PIN16: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 17
    +                PIN17: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 18
    +                PIN18: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 19
    +                PIN19: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 20
    +                PIN20: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 21
    +                PIN21: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 22
    +                PIN22: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 23
    +                PIN23: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 24
    +                PIN24: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 25
    +                PIN25: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 26
    +                PIN26: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 27
    +                PIN27: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 28
    +                PIN28: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 29
    +                PIN29: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 30
    +                PIN30: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +                ///  Pin 31
    +                PIN31: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin input is low
    +                        Low = 0x0,
    +                        ///  Pin input is high
    +                        High = 0x1,
    +                    },
    +                },
    +            }),
    +            ///  Direction of GPIO pins
    +            DIR: mmio.Mmio(packed struct(u32) {
    +                ///  Pin 0
    +                PIN0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 1
    +                PIN1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 2
    +                PIN2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 3
    +                PIN3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 4
    +                PIN4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 5
    +                PIN5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 6
    +                PIN6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 7
    +                PIN7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 8
    +                PIN8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 9
    +                PIN9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 10
    +                PIN10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 11
    +                PIN11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 12
    +                PIN12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 13
    +                PIN13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 14
    +                PIN14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 15
    +                PIN15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 16
    +                PIN16: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 17
    +                PIN17: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 18
    +                PIN18: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 19
    +                PIN19: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 20
    +                PIN20: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 21
    +                PIN21: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 22
    +                PIN22: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 23
    +                PIN23: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 24
    +                PIN24: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 25
    +                PIN25: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 26
    +                PIN26: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 27
    +                PIN27: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 28
    +                PIN28: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 29
    +                PIN29: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 30
    +                PIN30: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Pin 31
    +                PIN31: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pin set as input
    +                        Input = 0x0,
    +                        ///  Pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +            }),
    +            ///  DIR set register
    +            DIRSET: mmio.Mmio(packed struct(u32) {
    +                ///  Set as output pin 0
    +                PIN0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 1
    +                PIN1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 2
    +                PIN2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 3
    +                PIN3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 4
    +                PIN4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 5
    +                PIN5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 6
    +                PIN6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 7
    +                PIN7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 8
    +                PIN8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 9
    +                PIN9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 10
    +                PIN10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 11
    +                PIN11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 12
    +                PIN12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 13
    +                PIN13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 14
    +                PIN14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 15
    +                PIN15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 16
    +                PIN16: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 17
    +                PIN17: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 18
    +                PIN18: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 19
    +                PIN19: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 20
    +                PIN20: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 21
    +                PIN21: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 22
    +                PIN22: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 23
    +                PIN23: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 24
    +                PIN24: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 25
    +                PIN25: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 26
    +                PIN26: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 27
    +                PIN27: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 28
    +                PIN28: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 29
    +                PIN29: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 30
    +                PIN30: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as output pin 31
    +                PIN31: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +            }),
    +            ///  DIR clear register
    +            DIRCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Set as input pin 0
    +                PIN0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 1
    +                PIN1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 2
    +                PIN2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 3
    +                PIN3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 4
    +                PIN4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 5
    +                PIN5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 6
    +                PIN6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 7
    +                PIN7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 8
    +                PIN8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 9
    +                PIN9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 10
    +                PIN10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 11
    +                PIN11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 12
    +                PIN12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 13
    +                PIN13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 14
    +                PIN14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 15
    +                PIN15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 16
    +                PIN16: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 17
    +                PIN17: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 18
    +                PIN18: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 19
    +                PIN19: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 20
    +                PIN20: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 21
    +                PIN21: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 22
    +                PIN22: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 23
    +                PIN23: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 24
    +                PIN24: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 25
    +                PIN25: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 26
    +                PIN26: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 27
    +                PIN27: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 28
    +                PIN28: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 29
    +                PIN29: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 30
    +                PIN30: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Set as input pin 31
    +                PIN31: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: pin set as input
    +                        Input = 0x0,
    +                        ///  Read: pin set as output
    +                        Output = 0x1,
    +                    },
    +                },
    +            }),
    +            ///  Latch register indicating what GPIO pins that have met the criteria set in the PIN_CNF[n].SENSE registers
    +            LATCH: mmio.Mmio(packed struct(u32) {
    +                ///  Status on whether PIN0 has met criteria set in PIN_CNF0.SENSE register. Write '1' to clear.
    +                PIN0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN1 has met criteria set in PIN_CNF1.SENSE register. Write '1' to clear.
    +                PIN1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN2 has met criteria set in PIN_CNF2.SENSE register. Write '1' to clear.
    +                PIN2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN3 has met criteria set in PIN_CNF3.SENSE register. Write '1' to clear.
    +                PIN3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN4 has met criteria set in PIN_CNF4.SENSE register. Write '1' to clear.
    +                PIN4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN5 has met criteria set in PIN_CNF5.SENSE register. Write '1' to clear.
    +                PIN5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN6 has met criteria set in PIN_CNF6.SENSE register. Write '1' to clear.
    +                PIN6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN7 has met criteria set in PIN_CNF7.SENSE register. Write '1' to clear.
    +                PIN7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN8 has met criteria set in PIN_CNF8.SENSE register. Write '1' to clear.
    +                PIN8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN9 has met criteria set in PIN_CNF9.SENSE register. Write '1' to clear.
    +                PIN9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN10 has met criteria set in PIN_CNF10.SENSE register. Write '1' to clear.
    +                PIN10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN11 has met criteria set in PIN_CNF11.SENSE register. Write '1' to clear.
    +                PIN11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN12 has met criteria set in PIN_CNF12.SENSE register. Write '1' to clear.
    +                PIN12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN13 has met criteria set in PIN_CNF13.SENSE register. Write '1' to clear.
    +                PIN13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN14 has met criteria set in PIN_CNF14.SENSE register. Write '1' to clear.
    +                PIN14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN15 has met criteria set in PIN_CNF15.SENSE register. Write '1' to clear.
    +                PIN15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN16 has met criteria set in PIN_CNF16.SENSE register. Write '1' to clear.
    +                PIN16: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN17 has met criteria set in PIN_CNF17.SENSE register. Write '1' to clear.
    +                PIN17: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN18 has met criteria set in PIN_CNF18.SENSE register. Write '1' to clear.
    +                PIN18: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN19 has met criteria set in PIN_CNF19.SENSE register. Write '1' to clear.
    +                PIN19: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN20 has met criteria set in PIN_CNF20.SENSE register. Write '1' to clear.
    +                PIN20: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN21 has met criteria set in PIN_CNF21.SENSE register. Write '1' to clear.
    +                PIN21: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN22 has met criteria set in PIN_CNF22.SENSE register. Write '1' to clear.
    +                PIN22: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN23 has met criteria set in PIN_CNF23.SENSE register. Write '1' to clear.
    +                PIN23: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN24 has met criteria set in PIN_CNF24.SENSE register. Write '1' to clear.
    +                PIN24: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN25 has met criteria set in PIN_CNF25.SENSE register. Write '1' to clear.
    +                PIN25: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN26 has met criteria set in PIN_CNF26.SENSE register. Write '1' to clear.
    +                PIN26: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN27 has met criteria set in PIN_CNF27.SENSE register. Write '1' to clear.
    +                PIN27: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN28 has met criteria set in PIN_CNF28.SENSE register. Write '1' to clear.
    +                PIN28: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN29 has met criteria set in PIN_CNF29.SENSE register. Write '1' to clear.
    +                PIN29: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN30 has met criteria set in PIN_CNF30.SENSE register. Write '1' to clear.
    +                PIN30: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +                ///  Status on whether PIN31 has met criteria set in PIN_CNF31.SENSE register. Write '1' to clear.
    +                PIN31: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Criteria has not been met
    +                        NotLatched = 0x0,
    +                        ///  Criteria has been met
    +                        Latched = 0x1,
    +                    },
    +                },
    +            }),
    +            ///  Select between default DETECT signal behaviour and LDETECT mode
    +            DETECTMODE: mmio.Mmio(packed struct(u32) {
    +                ///  Select between default DETECT signal behaviour and LDETECT mode
    +                DETECTMODE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  DETECT directly connected to PIN DETECT signals
    +                        Default = 0x0,
    +                        ///  Use the latched LDETECT behaviour
    +                        LDETECT = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1792: [472]u8,
    +            ///  Description collection: Configuration of GPIO pins
    +            PIN_CNF: [32]mmio.Mmio(packed struct(u32) {
    +                ///  Pin direction. Same physical register as DIR register
    +                DIR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Configure pin as an input pin
    +                        Input = 0x0,
    +                        ///  Configure pin as an output pin
    +                        Output = 0x1,
    +                    },
    +                },
    +                ///  Connect or disconnect input buffer
    +                INPUT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Connect input buffer
    +                        Connect = 0x0,
    +                        ///  Disconnect input buffer
    +                        Disconnect = 0x1,
    +                    },
    +                },
    +                ///  Pull configuration
    +                PULL: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  No pull
    +                        Disabled = 0x0,
    +                        ///  Pull down on pin
    +                        Pulldown = 0x1,
    +                        ///  Pull up on pin
    +                        Pullup = 0x3,
    +                        _,
    +                    },
    +                },
    +                reserved8: u4,
    +                ///  Drive configuration
    +                DRIVE: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        ///  Standard '0', standard '1'
    +                        S0S1 = 0x0,
    +                        ///  High drive '0', standard '1'
    +                        H0S1 = 0x1,
    +                        ///  Standard '0', high drive '1'
    +                        S0H1 = 0x2,
    +                        ///  High drive '0', high 'drive '1''
    +                        H0H1 = 0x3,
    +                        ///  Disconnect '0' standard '1' (normally used for wired-or connections)
    +                        D0S1 = 0x4,
    +                        ///  Disconnect '0', high drive '1' (normally used for wired-or connections)
    +                        D0H1 = 0x5,
    +                        ///  Standard '0'. disconnect '1' (normally used for wired-and connections)
    +                        S0D1 = 0x6,
    +                        ///  High drive '0', disconnect '1' (normally used for wired-and connections)
    +                        H0D1 = 0x7,
    +                    },
    +                },
    +                reserved16: u5,
    +                ///  Pin sensing mechanism
    +                SENSE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Sense for high level
    +                        High = 0x2,
    +                        ///  Sense for low level
    +                        Low = 0x3,
    +                        _,
    +                    },
    +                },
    +                padding: u14,
    +            }),
    +        };
    +
    +        ///  Access control lists
    +        pub const ACL = struct {};
    +
    +        ///  2.4 GHz radio
    +        pub const RADIO = extern struct {
    +            ///  Enable RADIO in TX mode
    +            TASKS_TXEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable RADIO in TX mode
    +                TASKS_TXEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Enable RADIO in RX mode
    +            TASKS_RXEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable RADIO in RX mode
    +                TASKS_RXEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Start RADIO
    +            TASKS_START: mmio.Mmio(packed struct(u32) {
    +                ///  Start RADIO
    +                TASKS_START: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Stop RADIO
    +            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    +                ///  Stop RADIO
    +                TASKS_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Disable RADIO
    +            TASKS_DISABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Disable RADIO
    +                TASKS_DISABLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Start the RSSI and take one single sample of the receive signal strength
    +            TASKS_RSSISTART: mmio.Mmio(packed struct(u32) {
    +                ///  Start the RSSI and take one single sample of the receive signal strength
    +                TASKS_RSSISTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Stop the RSSI measurement
    +            TASKS_RSSISTOP: mmio.Mmio(packed struct(u32) {
    +                ///  Stop the RSSI measurement
    +                TASKS_RSSISTOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Start the bit counter
    +            TASKS_BCSTART: mmio.Mmio(packed struct(u32) {
    +                ///  Start the bit counter
    +                TASKS_BCSTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Stop the bit counter
    +            TASKS_BCSTOP: mmio.Mmio(packed struct(u32) {
    +                ///  Stop the bit counter
    +                TASKS_BCSTOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Start the energy detect measurement used in IEEE 802.15.4 mode
    +            TASKS_EDSTART: mmio.Mmio(packed struct(u32) {
    +                ///  Start the energy detect measurement used in IEEE 802.15.4 mode
    +                TASKS_EDSTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Stop the energy detect measurement
    +            TASKS_EDSTOP: mmio.Mmio(packed struct(u32) {
    +                ///  Stop the energy detect measurement
    +                TASKS_EDSTOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Start the clear channel assessment used in IEEE 802.15.4 mode
    +            TASKS_CCASTART: mmio.Mmio(packed struct(u32) {
    +                ///  Start the clear channel assessment used in IEEE 802.15.4 mode
    +                TASKS_CCASTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Stop the clear channel assessment
    +            TASKS_CCASTOP: mmio.Mmio(packed struct(u32) {
    +                ///  Stop the clear channel assessment
    +                TASKS_CCASTOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved256: [204]u8,
    +            ///  RADIO has ramped up and is ready to be started
    +            EVENTS_READY: mmio.Mmio(packed struct(u32) {
    +                ///  RADIO has ramped up and is ready to be started
    +                EVENTS_READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Address sent or received
    +            EVENTS_ADDRESS: mmio.Mmio(packed struct(u32) {
    +                ///  Address sent or received
    +                EVENTS_ADDRESS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Packet payload sent or received
    +            EVENTS_PAYLOAD: mmio.Mmio(packed struct(u32) {
    +                ///  Packet payload sent or received
    +                EVENTS_PAYLOAD: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Packet sent or received
    +            EVENTS_END: mmio.Mmio(packed struct(u32) {
    +                ///  Packet sent or received
    +                EVENTS_END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  RADIO has been disabled
    +            EVENTS_DISABLED: mmio.Mmio(packed struct(u32) {
    +                ///  RADIO has been disabled
    +                EVENTS_DISABLED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  A device address match occurred on the last received packet
    +            EVENTS_DEVMATCH: mmio.Mmio(packed struct(u32) {
    +                ///  A device address match occurred on the last received packet
    +                EVENTS_DEVMATCH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  No device address match occurred on the last received packet
    +            EVENTS_DEVMISS: mmio.Mmio(packed struct(u32) {
    +                ///  No device address match occurred on the last received packet
    +                EVENTS_DEVMISS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Sampling of receive signal strength complete
    +            EVENTS_RSSIEND: mmio.Mmio(packed struct(u32) {
    +                ///  Sampling of receive signal strength complete
    +                EVENTS_RSSIEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved296: [8]u8,
    +            ///  Bit counter reached bit count value
    +            EVENTS_BCMATCH: mmio.Mmio(packed struct(u32) {
    +                ///  Bit counter reached bit count value
    +                EVENTS_BCMATCH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved304: [4]u8,
    +            ///  Packet received with CRC ok
    +            EVENTS_CRCOK: mmio.Mmio(packed struct(u32) {
    +                ///  Packet received with CRC ok
    +                EVENTS_CRCOK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Packet received with CRC error
    +            EVENTS_CRCERROR: mmio.Mmio(packed struct(u32) {
    +                ///  Packet received with CRC error
    +                EVENTS_CRCERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  IEEE 802.15.4 length field received
    +            EVENTS_FRAMESTART: mmio.Mmio(packed struct(u32) {
    +                ///  IEEE 802.15.4 length field received
    +                EVENTS_FRAMESTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Sampling of energy detection complete. A new ED sample is ready for readout from the RADIO.EDSAMPLE register.
    +            EVENTS_EDEND: mmio.Mmio(packed struct(u32) {
    +                ///  Sampling of energy detection complete. A new ED sample is ready for readout from the RADIO.EDSAMPLE register.
    +                EVENTS_EDEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  The sampling of energy detection has stopped
    +            EVENTS_EDSTOPPED: mmio.Mmio(packed struct(u32) {
    +                ///  The sampling of energy detection has stopped
    +                EVENTS_EDSTOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Wireless medium in idle - clear to send
    +            EVENTS_CCAIDLE: mmio.Mmio(packed struct(u32) {
    +                ///  Wireless medium in idle - clear to send
    +                EVENTS_CCAIDLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Wireless medium busy - do not send
    +            EVENTS_CCABUSY: mmio.Mmio(packed struct(u32) {
    +                ///  Wireless medium busy - do not send
    +                EVENTS_CCABUSY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  The CCA has stopped
    +            EVENTS_CCASTOPPED: mmio.Mmio(packed struct(u32) {
    +                ///  The CCA has stopped
    +                EVENTS_CCASTOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Ble_LR CI field received, receive mode is changed from Ble_LR125Kbit to Ble_LR500Kbit.
    +            EVENTS_RATEBOOST: mmio.Mmio(packed struct(u32) {
    +                ///  Ble_LR CI field received, receive mode is changed from Ble_LR125Kbit to Ble_LR500Kbit.
    +                EVENTS_RATEBOOST: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  RADIO has ramped up and is ready to be started TX path
    +            EVENTS_TXREADY: mmio.Mmio(packed struct(u32) {
    +                ///  RADIO has ramped up and is ready to be started TX path
    +                EVENTS_TXREADY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  RADIO has ramped up and is ready to be started RX path
    +            EVENTS_RXREADY: mmio.Mmio(packed struct(u32) {
    +                ///  RADIO has ramped up and is ready to be started RX path
    +                EVENTS_RXREADY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  MAC header match found
    +            EVENTS_MHRMATCH: mmio.Mmio(packed struct(u32) {
    +                ///  MAC header match found
    +                EVENTS_MHRMATCH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved360: [8]u8,
    +            ///  Preamble indicator.
    +            EVENTS_SYNC: mmio.Mmio(packed struct(u32) {
    +                ///  Preamble indicator.
    +                EVENTS_SYNC: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Generated in Ble_LR125Kbit, Ble_LR500Kbit and Ieee802154_250Kbit modes when last bit is sent on air.
    +            EVENTS_PHYEND: mmio.Mmio(packed struct(u32) {
    +                ///  Generated in Ble_LR125Kbit, Ble_LR500Kbit and Ieee802154_250Kbit modes when last bit is sent on air.
    +                EVENTS_PHYEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved512: [144]u8,
    +            ///  Shortcuts between local events and tasks
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                ///  Shortcut between event READY and task START
    +                READY_START: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event END and task DISABLE
    +                END_DISABLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event DISABLED and task TXEN
    +                DISABLED_TXEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event DISABLED and task RXEN
    +                DISABLED_RXEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event ADDRESS and task RSSISTART
    +                ADDRESS_RSSISTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event END and task START
    +                END_START: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event ADDRESS and task BCSTART
    +                ADDRESS_BCSTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved8: u1,
    +                ///  Shortcut between event DISABLED and task RSSISTOP
    +                DISABLED_RSSISTOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved11: u2,
    +                ///  Shortcut between event RXREADY and task CCASTART
    +                RXREADY_CCASTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event CCAIDLE and task TXEN
    +                CCAIDLE_TXEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event CCABUSY and task DISABLE
    +                CCABUSY_DISABLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event FRAMESTART and task BCSTART
    +                FRAMESTART_BCSTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event READY and task EDSTART
    +                READY_EDSTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event EDEND and task DISABLE
    +                EDEND_DISABLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event CCAIDLE and task STOP
    +                CCAIDLE_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event TXREADY and task START
    +                TXREADY_START: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event RXREADY and task START
    +                RXREADY_START: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event PHYEND and task DISABLE
    +                PHYEND_DISABLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event PHYEND and task START
    +                PHYEND_START: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u10,
    +            }),
    +            reserved772: [256]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to enable interrupt for event READY
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event ADDRESS
    +                ADDRESS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event PAYLOAD
    +                PAYLOAD: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event END
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event DISABLED
    +                DISABLED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event DEVMATCH
    +                DEVMATCH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event DEVMISS
    +                DEVMISS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event RSSIEND
    +                RSSIEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved10: u2,
    +                ///  Write '1' to enable interrupt for event BCMATCH
    +                BCMATCH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved12: u1,
    +                ///  Write '1' to enable interrupt for event CRCOK
    +                CRCOK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event CRCERROR
    +                CRCERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event FRAMESTART
    +                FRAMESTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event EDEND
    +                EDEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event EDSTOPPED
    +                EDSTOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event CCAIDLE
    +                CCAIDLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event CCABUSY
    +                CCABUSY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event CCASTOPPED
    +                CCASTOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event RATEBOOST
    +                RATEBOOST: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event TXREADY
    +                TXREADY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event RXREADY
    +                RXREADY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event MHRMATCH
    +                MHRMATCH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved26: u2,
    +                ///  Write '1' to enable interrupt for event SYNC
    +                SYNC: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event PHYEND
    +                PHYEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u4,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to disable interrupt for event READY
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event ADDRESS
    +                ADDRESS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event PAYLOAD
    +                PAYLOAD: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event END
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event DISABLED
    +                DISABLED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event DEVMATCH
    +                DEVMATCH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event DEVMISS
    +                DEVMISS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event RSSIEND
    +                RSSIEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved10: u2,
    +                ///  Write '1' to disable interrupt for event BCMATCH
    +                BCMATCH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved12: u1,
    +                ///  Write '1' to disable interrupt for event CRCOK
    +                CRCOK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event CRCERROR
    +                CRCERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event FRAMESTART
    +                FRAMESTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event EDEND
    +                EDEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event EDSTOPPED
    +                EDSTOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event CCAIDLE
    +                CCAIDLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event CCABUSY
    +                CCABUSY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event CCASTOPPED
    +                CCASTOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event RATEBOOST
    +                RATEBOOST: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event TXREADY
    +                TXREADY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event RXREADY
    +                RXREADY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event MHRMATCH
    +                MHRMATCH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved26: u2,
    +                ///  Write '1' to disable interrupt for event SYNC
    +                SYNC: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event PHYEND
    +                PHYEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u4,
    +            }),
    +            reserved1024: [244]u8,
    +            ///  CRC status
    +            CRCSTATUS: mmio.Mmio(packed struct(u32) {
    +                ///  CRC status of packet received
    +                CRCSTATUS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Packet received with CRC error
    +                        CRCError = 0x0,
    +                        ///  Packet received with CRC ok
    +                        CRCOk = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1032: [4]u8,
    +            ///  Received address
    +            RXMATCH: mmio.Mmio(packed struct(u32) {
    +                ///  Received address
    +                RXMATCH: u3,
    +                padding: u29,
    +            }),
    +            ///  CRC field of previously received packet
    +            RXCRC: mmio.Mmio(packed struct(u32) {
    +                ///  CRC field of previously received packet
    +                RXCRC: u24,
    +                padding: u8,
    +            }),
    +            ///  Device address match index
    +            DAI: mmio.Mmio(packed struct(u32) {
    +                ///  Device address match index
    +                DAI: u3,
    +                padding: u29,
    +            }),
    +            ///  Payload status
    +            PDUSTAT: mmio.Mmio(packed struct(u32) {
    +                ///  Status on payload length vs. PCNF1.MAXLEN
    +                PDUSTAT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Payload less than PCNF1.MAXLEN
    +                        LessThan = 0x0,
    +                        ///  Payload greater than PCNF1.MAXLEN
    +                        GreaterThan = 0x1,
    +                    },
    +                },
    +                ///  Status on what rate packet is received with in Long Range
    +                CISTAT: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Frame is received at 125kbps
    +                        LR125kbit = 0x0,
    +                        ///  Frame is received at 500kbps
    +                        LR500kbit = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            reserved1284: [236]u8,
    +            ///  Packet pointer
    +            PACKETPTR: mmio.Mmio(packed struct(u32) {
    +                ///  Packet pointer
    +                PACKETPTR: u32,
    +            }),
    +            ///  Frequency
    +            FREQUENCY: mmio.Mmio(packed struct(u32) {
    +                ///  Radio channel frequency
    +                FREQUENCY: u7,
    +                reserved8: u1,
    +                ///  Channel map selection.
    +                MAP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Channel map between 2400 MHZ .. 2500 MHz
    +                        Default = 0x0,
    +                        ///  Channel map between 2360 MHZ .. 2460 MHz
    +                        Low = 0x1,
    +                    },
    +                },
    +                padding: u23,
    +            }),
    +            ///  Output power
    +            TXPOWER: mmio.Mmio(packed struct(u32) {
    +                ///  RADIO output power
    +                TXPOWER: packed union {
    +                    raw: u8,
    +                    value: enum(u8) {
    +                        ///  +8 dBm
    +                        Pos8dBm = 0x8,
    +                        ///  +7 dBm
    +                        Pos7dBm = 0x7,
    +                        ///  +6 dBm
    +                        Pos6dBm = 0x6,
    +                        ///  +5 dBm
    +                        Pos5dBm = 0x5,
    +                        ///  +4 dBm
    +                        Pos4dBm = 0x4,
    +                        ///  +3 dBm
    +                        Pos3dBm = 0x3,
    +                        ///  +2 dBm
    +                        Pos2dBm = 0x2,
    +                        ///  0 dBm
    +                        @"0dBm" = 0x0,
    +                        ///  -4 dBm
    +                        Neg4dBm = 0xfc,
    +                        ///  -8 dBm
    +                        Neg8dBm = 0xf8,
    +                        ///  -12 dBm
    +                        Neg12dBm = 0xf4,
    +                        ///  -16 dBm
    +                        Neg16dBm = 0xf0,
    +                        ///  -20 dBm
    +                        Neg20dBm = 0xec,
    +                        ///  Deprecated enumerator - -40 dBm
    +                        Neg30dBm = 0xe2,
    +                        ///  -40 dBm
    +                        Neg40dBm = 0xd8,
    +                        _,
    +                    },
    +                },
    +                padding: u24,
    +            }),
    +            ///  Data rate and modulation
    +            MODE: mmio.Mmio(packed struct(u32) {
    +                ///  Radio data rate and modulation setting. The radio supports frequency-shift keying (FSK) modulation.
    +                MODE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  1 Mbit/s Nordic proprietary radio mode
    +                        Nrf_1Mbit = 0x0,
    +                        ///  2 Mbit/s Nordic proprietary radio mode
    +                        Nrf_2Mbit = 0x1,
    +                        ///  1 Mbit/s BLE
    +                        Ble_1Mbit = 0x3,
    +                        ///  2 Mbit/s BLE
    +                        Ble_2Mbit = 0x4,
    +                        ///  Long range 125 kbit/s TX, 125 kbit/s and 500 kbit/s RX
    +                        Ble_LR125Kbit = 0x5,
    +                        ///  Long range 500 kbit/s TX, 125 kbit/s and 500 kbit/s RX
    +                        Ble_LR500Kbit = 0x6,
    +                        ///  IEEE 802.15.4-2006 250 kbit/s
    +                        Ieee802154_250Kbit = 0xf,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            ///  Packet configuration register 0
    +            PCNF0: mmio.Mmio(packed struct(u32) {
    +                ///  Length on air of LENGTH field in number of bits.
    +                LFLEN: u4,
    +                reserved8: u4,
    +                ///  Length on air of S0 field in number of bytes.
    +                S0LEN: u1,
    +                reserved16: u7,
    +                ///  Length on air of S1 field in number of bits.
    +                S1LEN: u4,
    +                ///  Include or exclude S1 field in RAM
    +                S1INCL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Include S1 field in RAM only if S1LEN > 0
    +                        Automatic = 0x0,
    +                        ///  Always include S1 field in RAM independent of S1LEN
    +                        Include = 0x1,
    +                    },
    +                },
    +                reserved22: u1,
    +                ///  Length of code indicator - long range
    +                CILEN: u2,
    +                ///  Length of preamble on air. Decision point: TASKS_START task
    +                PLEN: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  8-bit preamble
    +                        @"8bit" = 0x0,
    +                        ///  16-bit preamble
    +                        @"16bit" = 0x1,
    +                        ///  32-bit zero preamble - used for IEEE 802.15.4
    +                        @"32bitZero" = 0x2,
    +                        ///  Preamble - used for BLE long range
    +                        LongRange = 0x3,
    +                    },
    +                },
    +                ///  Indicates if LENGTH field contains CRC or not
    +                CRCINC: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  LENGTH does not contain CRC
    +                        Exclude = 0x0,
    +                        ///  LENGTH includes CRC
    +                        Include = 0x1,
    +                    },
    +                },
    +                reserved29: u2,
    +                ///  Length of TERM field in Long Range operation
    +                TERMLEN: u2,
    +                padding: u1,
    +            }),
    +            ///  Packet configuration register 1
    +            PCNF1: mmio.Mmio(packed struct(u32) {
    +                ///  Maximum length of packet payload. If the packet payload is larger than MAXLEN, the radio will truncate the payload to MAXLEN.
    +                MAXLEN: u8,
    +                ///  Static length in number of bytes
    +                STATLEN: u8,
    +                ///  Base address length in number of bytes
    +                BALEN: u3,
    +                reserved24: u5,
    +                ///  On air endianness of packet, this applies to the S0, LENGTH, S1 and the PAYLOAD fields.
    +                ENDIAN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Least significant bit on air first
    +                        Little = 0x0,
    +                        ///  Most significant bit on air first
    +                        Big = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable packet whitening
    +                WHITEEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u6,
    +            }),
    +            ///  Base address 0
    +            BASE0: mmio.Mmio(packed struct(u32) {
    +                ///  Base address 0
    +                BASE0: u32,
    +            }),
    +            ///  Base address 1
    +            BASE1: mmio.Mmio(packed struct(u32) {
    +                ///  Base address 1
    +                BASE1: u32,
    +            }),
    +            ///  Prefixes bytes for logical addresses 0-3
    +            PREFIX0: mmio.Mmio(packed struct(u32) {
    +                ///  Address prefix 0.
    +                AP0: u8,
    +                ///  Address prefix 1.
    +                AP1: u8,
    +                ///  Address prefix 2.
    +                AP2: u8,
    +                ///  Address prefix 3.
    +                AP3: u8,
    +            }),
    +            ///  Prefixes bytes for logical addresses 4-7
    +            PREFIX1: mmio.Mmio(packed struct(u32) {
    +                ///  Address prefix 4.
    +                AP4: u8,
    +                ///  Address prefix 5.
    +                AP5: u8,
    +                ///  Address prefix 6.
    +                AP6: u8,
    +                ///  Address prefix 7.
    +                AP7: u8,
    +            }),
    +            ///  Transmit address select
    +            TXADDRESS: mmio.Mmio(packed struct(u32) {
    +                ///  Transmit address select
    +                TXADDRESS: u3,
    +                padding: u29,
    +            }),
    +            ///  Receive address select
    +            RXADDRESSES: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable reception on logical address 0.
    +                ADDR0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable reception on logical address 1.
    +                ADDR1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable reception on logical address 2.
    +                ADDR2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable reception on logical address 3.
    +                ADDR3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable reception on logical address 4.
    +                ADDR4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable reception on logical address 5.
    +                ADDR5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable reception on logical address 6.
    +                ADDR6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable reception on logical address 7.
    +                ADDR7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u24,
    +            }),
    +            ///  CRC configuration
    +            CRCCNF: mmio.Mmio(packed struct(u32) {
    +                ///  CRC length in number of bytes.
    +                LEN: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  CRC length is zero and CRC calculation is disabled
    +                        Disabled = 0x0,
    +                        ///  CRC length is one byte and CRC calculation is enabled
    +                        One = 0x1,
    +                        ///  CRC length is two bytes and CRC calculation is enabled
    +                        Two = 0x2,
    +                        ///  CRC length is three bytes and CRC calculation is enabled
    +                        Three = 0x3,
    +                    },
    +                },
    +                reserved8: u6,
    +                ///  Include or exclude packet address field out of CRC calculation.
    +                SKIPADDR: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  CRC calculation includes address field
    +                        Include = 0x0,
    +                        ///  CRC calculation does not include address field. The CRC calculation will start at the first byte after the address.
    +                        Skip = 0x1,
    +                        ///  CRC calculation as per 802.15.4 standard. Starting at first byte after length field.
    +                        Ieee802154 = 0x2,
    +                        _,
    +                    },
    +                },
    +                padding: u22,
    +            }),
    +            ///  CRC polynomial
    +            CRCPOLY: mmio.Mmio(packed struct(u32) {
    +                ///  CRC polynomial
    +                CRCPOLY: u24,
    +                padding: u8,
    +            }),
    +            ///  CRC initial value
    +            CRCINIT: mmio.Mmio(packed struct(u32) {
    +                ///  CRC initial value
    +                CRCINIT: u24,
    +                padding: u8,
    +            }),
    +            reserved1348: [4]u8,
    +            ///  Interframe spacing in us
    +            TIFS: mmio.Mmio(packed struct(u32) {
    +                ///  Interframe spacing in us
    +                TIFS: u10,
    +                padding: u22,
    +            }),
    +            ///  RSSI sample
    +            RSSISAMPLE: mmio.Mmio(packed struct(u32) {
    +                ///  RSSI sample
    +                RSSISAMPLE: u7,
    +                padding: u25,
    +            }),
    +            reserved1360: [4]u8,
    +            ///  Current radio state
    +            STATE: mmio.Mmio(packed struct(u32) {
    +                ///  Current radio state
    +                STATE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  RADIO is in the Disabled state
    +                        Disabled = 0x0,
    +                        ///  RADIO is in the RXRU state
    +                        RxRu = 0x1,
    +                        ///  RADIO is in the RXIDLE state
    +                        RxIdle = 0x2,
    +                        ///  RADIO is in the RX state
    +                        Rx = 0x3,
    +                        ///  RADIO is in the RXDISABLED state
    +                        RxDisable = 0x4,
    +                        ///  RADIO is in the TXRU state
    +                        TxRu = 0x9,
    +                        ///  RADIO is in the TXIDLE state
    +                        TxIdle = 0xa,
    +                        ///  RADIO is in the TX state
    +                        Tx = 0xb,
    +                        ///  RADIO is in the TXDISABLED state
    +                        TxDisable = 0xc,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            ///  Data whitening initial value
    +            DATAWHITEIV: mmio.Mmio(packed struct(u32) {
    +                ///  Data whitening initial value. Bit 6 is hard-wired to '1', writing '0' to it has no effect, and it will always be read back and used by the device as '1'.
    +                DATAWHITEIV: u7,
    +                padding: u25,
    +            }),
    +            reserved1376: [8]u8,
    +            ///  Bit counter compare
    +            BCC: mmio.Mmio(packed struct(u32) {
    +                ///  Bit counter compare
    +                BCC: u32,
    +            }),
    +            reserved1536: [156]u8,
    +            ///  Description collection: Device address base segment n
    +            DAB: [8]mmio.Mmio(packed struct(u32) {
    +                ///  Device address base segment n
    +                DAB: u32,
    +            }),
    +            ///  Description collection: Device address prefix n
    +            DAP: [8]mmio.Mmio(packed struct(u32) {
    +                ///  Device address prefix n
    +                DAP: u16,
    +                padding: u16,
    +            }),
    +            ///  Device address match configuration
    +            DACNF: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable device address matching using device address 0
    +                ENA0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable device address matching using device address 1
    +                ENA1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable device address matching using device address 2
    +                ENA2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable device address matching using device address 3
    +                ENA3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable device address matching using device address 4
    +                ENA4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable device address matching using device address 5
    +                ENA5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable device address matching using device address 6
    +                ENA6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable device address matching using device address 7
    +                ENA7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  TxAdd for device address 0
    +                TXADD0: u1,
    +                ///  TxAdd for device address 1
    +                TXADD1: u1,
    +                ///  TxAdd for device address 2
    +                TXADD2: u1,
    +                ///  TxAdd for device address 3
    +                TXADD3: u1,
    +                ///  TxAdd for device address 4
    +                TXADD4: u1,
    +                ///  TxAdd for device address 5
    +                TXADD5: u1,
    +                ///  TxAdd for device address 6
    +                TXADD6: u1,
    +                ///  TxAdd for device address 7
    +                TXADD7: u1,
    +                padding: u16,
    +            }),
    +            ///  Search pattern configuration
    +            MHRMATCHCONF: mmio.Mmio(packed struct(u32) {
    +                ///  Search pattern configuration
    +                MHRMATCHCONF: u32,
    +            }),
    +            ///  Pattern mask
    +            MHRMATCHMAS: mmio.Mmio(packed struct(u32) {
    +                ///  Pattern mask
    +                MHRMATCHMAS: u32,
    +            }),
    +            reserved1616: [4]u8,
    +            ///  Radio mode configuration register 0
    +            MODECNF0: mmio.Mmio(packed struct(u32) {
    +                ///  Radio ramp-up time
    +                RU: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Default ramp-up time (tRXEN and tTXEN), compatible with firmware written for nRF51
    +                        Default = 0x0,
    +                        ///  Fast ramp-up (tRXEN,FAST and tTXEN,FAST), see electrical specification for more information
    +                        Fast = 0x1,
    +                    },
    +                },
    +                reserved8: u7,
    +                ///  Default TX value
    +                DTX: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Transmit '1'
    +                        B1 = 0x0,
    +                        ///  Transmit '0'
    +                        B0 = 0x1,
    +                        ///  Transmit center frequency
    +                        Center = 0x2,
    +                        _,
    +                    },
    +                },
    +                padding: u22,
    +            }),
    +            reserved1632: [12]u8,
    +            ///  IEEE 802.15.4 start of frame delimiter
    +            SFD: mmio.Mmio(packed struct(u32) {
    +                ///  IEEE 802.15.4 start of frame delimiter
    +                SFD: u8,
    +                padding: u24,
    +            }),
    +            ///  IEEE 802.15.4 energy detect loop count
    +            EDCNT: mmio.Mmio(packed struct(u32) {
    +                ///  IEEE 802.15.4 energy detect loop count
    +                EDCNT: u21,
    +                padding: u11,
    +            }),
    +            ///  IEEE 802.15.4 energy detect level
    +            EDSAMPLE: mmio.Mmio(packed struct(u32) {
    +                ///  IEEE 802.15.4 energy detect level
    +                EDLVL: u8,
    +                padding: u24,
    +            }),
    +            ///  IEEE 802.15.4 clear channel assessment control
    +            CCACTRL: mmio.Mmio(packed struct(u32) {
    +                ///  CCA mode of operation
    +                CCAMODE: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        ///  Energy above threshold
    +                        EdMode = 0x0,
    +                        ///  Carrier seen
    +                        CarrierMode = 0x1,
    +                        ///  Energy above threshold AND carrier seen
    +                        CarrierAndEdMode = 0x2,
    +                        ///  Energy above threshold OR carrier seen
    +                        CarrierOrEdMode = 0x3,
    +                        ///  Energy above threshold test mode that will abort when first ED measurement over threshold is seen. No averaging.
    +                        EdModeTest1 = 0x4,
    +                        _,
    +                    },
    +                },
    +                reserved8: u5,
    +                ///  CCA energy busy threshold. Used in all the CCA modes except CarrierMode.
    +                CCAEDTHRES: u8,
    +                ///  CCA correlator busy threshold. Only relevant to CarrierMode, CarrierAndEdMode and CarrierOrEdMode.
    +                CCACORRTHRES: u8,
    +                ///  Limit for occurances above CCACORRTHRES. When not equal to zero the corrolator based signal detect is enabled.
    +                CCACORRCNT: u8,
    +            }),
    +            reserved4092: [2444]u8,
    +            ///  Peripheral power control
    +            POWER: mmio.Mmio(packed struct(u32) {
    +                ///  Peripheral power control. The peripheral and its registers will be reset to its initial state by switching the peripheral off and then back on again.
    +                POWER: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Peripheral is powered off
    +                        Disabled = 0x0,
    +                        ///  Peripheral is powered on
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +        };
    +
    +        ///  Universal Asynchronous Receiver/Transmitter
    +        pub const UART0 = extern struct {
    +            ///  Start UART receiver
    +            TASKS_STARTRX: mmio.Mmio(packed struct(u32) {
    +                ///  Start UART receiver
    +                TASKS_STARTRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Stop UART receiver
    +            TASKS_STOPRX: mmio.Mmio(packed struct(u32) {
    +                ///  Stop UART receiver
    +                TASKS_STOPRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Start UART transmitter
    +            TASKS_STARTTX: mmio.Mmio(packed struct(u32) {
    +                ///  Start UART transmitter
    +                TASKS_STARTTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Stop UART transmitter
    +            TASKS_STOPTX: mmio.Mmio(packed struct(u32) {
    +                ///  Stop UART transmitter
    +                TASKS_STOPTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved28: [12]u8,
    +            ///  Suspend UART
    +            TASKS_SUSPEND: mmio.Mmio(packed struct(u32) {
    +                ///  Suspend UART
    +                TASKS_SUSPEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved256: [224]u8,
    +            ///  CTS is activated (set low). Clear To Send.
    +            EVENTS_CTS: mmio.Mmio(packed struct(u32) {
    +                ///  CTS is activated (set low). Clear To Send.
    +                EVENTS_CTS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  CTS is deactivated (set high). Not Clear To Send.
    +            EVENTS_NCTS: mmio.Mmio(packed struct(u32) {
    +                ///  CTS is deactivated (set high). Not Clear To Send.
    +                EVENTS_NCTS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Data received in RXD
    +            EVENTS_RXDRDY: mmio.Mmio(packed struct(u32) {
    +                ///  Data received in RXD
    +                EVENTS_RXDRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved284: [16]u8,
    +            ///  Data sent from TXD
    +            EVENTS_TXDRDY: mmio.Mmio(packed struct(u32) {
    +                ///  Data sent from TXD
    +                EVENTS_TXDRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved292: [4]u8,
    +            ///  Error detected
    +            EVENTS_ERROR: mmio.Mmio(packed struct(u32) {
    +                ///  Error detected
    +                EVENTS_ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved324: [28]u8,
    +            ///  Receiver timeout
    +            EVENTS_RXTO: mmio.Mmio(packed struct(u32) {
    +                ///  Receiver timeout
    +                EVENTS_RXTO: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved512: [184]u8,
    +            ///  Shortcuts between local events and tasks
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                reserved3: u3,
    +                ///  Shortcut between event CTS and task STARTRX
    +                CTS_STARTRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event NCTS and task STOPRX
    +                NCTS_STOPRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u27,
    +            }),
    +            reserved772: [256]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to enable interrupt for event CTS
    +                CTS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event NCTS
    +                NCTS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event RXDRDY
    +                RXDRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved7: u4,
    +                ///  Write '1' to enable interrupt for event TXDRDY
    +                TXDRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved9: u1,
    +                ///  Write '1' to enable interrupt for event ERROR
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved17: u7,
    +                ///  Write '1' to enable interrupt for event RXTO
    +                RXTO: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u14,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to disable interrupt for event CTS
    +                CTS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event NCTS
    +                NCTS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event RXDRDY
    +                RXDRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved7: u4,
    +                ///  Write '1' to disable interrupt for event TXDRDY
    +                TXDRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved9: u1,
    +                ///  Write '1' to disable interrupt for event ERROR
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved17: u7,
    +                ///  Write '1' to disable interrupt for event RXTO
    +                RXTO: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u14,
    +            }),
    +            reserved1152: [372]u8,
    +            ///  Error source
    +            ERRORSRC: mmio.Mmio(packed struct(u32) {
    +                ///  Overrun error
    +                OVERRUN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: error not present
    +                        NotPresent = 0x0,
    +                        ///  Read: error present
    +                        Present = 0x1,
    +                    },
    +                },
    +                ///  Parity error
    +                PARITY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: error not present
    +                        NotPresent = 0x0,
    +                        ///  Read: error present
    +                        Present = 0x1,
    +                    },
    +                },
    +                ///  Framing error occurred
    +                FRAMING: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: error not present
    +                        NotPresent = 0x0,
    +                        ///  Read: error present
    +                        Present = 0x1,
    +                    },
    +                },
    +                ///  Break condition
    +                BREAK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: error not present
    +                        NotPresent = 0x0,
    +                        ///  Read: error present
    +                        Present = 0x1,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1280: [124]u8,
    +            ///  Enable UART
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable UART
    +                ENABLE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  Disable UART
    +                        Disabled = 0x0,
    +                        ///  Enable UART
    +                        Enabled = 0x4,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1304: [20]u8,
    +            ///  RXD register
    +            RXD: mmio.Mmio(packed struct(u32) {
    +                ///  RX data received in previous transfers, double buffered
    +                RXD: u8,
    +                padding: u24,
    +            }),
    +            ///  TXD register
    +            TXD: mmio.Mmio(packed struct(u32) {
    +                ///  TX data to be transferred
    +                TXD: u8,
    +                padding: u24,
    +            }),
    +            reserved1316: [4]u8,
    +            ///  Baud rate. Accuracy depends on the HFCLK source selected.
    +            BAUDRATE: mmio.Mmio(packed struct(u32) {
    +                ///  Baud rate
    +                BAUDRATE: packed union {
    +                    raw: u32,
    +                    value: enum(u32) {
    +                        ///  1200 baud (actual rate: 1205)
    +                        Baud1200 = 0x4f000,
    +                        ///  2400 baud (actual rate: 2396)
    +                        Baud2400 = 0x9d000,
    +                        ///  4800 baud (actual rate: 4808)
    +                        Baud4800 = 0x13b000,
    +                        ///  9600 baud (actual rate: 9598)
    +                        Baud9600 = 0x275000,
    +                        ///  14400 baud (actual rate: 14414)
    +                        Baud14400 = 0x3b0000,
    +                        ///  19200 baud (actual rate: 19208)
    +                        Baud19200 = 0x4ea000,
    +                        ///  28800 baud (actual rate: 28829)
    +                        Baud28800 = 0x75f000,
    +                        ///  31250 baud
    +                        Baud31250 = 0x800000,
    +                        ///  38400 baud (actual rate: 38462)
    +                        Baud38400 = 0x9d5000,
    +                        ///  56000 baud (actual rate: 55944)
    +                        Baud56000 = 0xe50000,
    +                        ///  57600 baud (actual rate: 57762)
    +                        Baud57600 = 0xebf000,
    +                        ///  76800 baud (actual rate: 76923)
    +                        Baud76800 = 0x13a9000,
    +                        ///  115200 baud (actual rate: 115942)
    +                        Baud115200 = 0x1d7e000,
    +                        ///  230400 baud (actual rate: 231884)
    +                        Baud230400 = 0x3afb000,
    +                        ///  250000 baud
    +                        Baud250000 = 0x4000000,
    +                        ///  460800 baud (actual rate: 470588)
    +                        Baud460800 = 0x75f7000,
    +                        ///  921600 baud (actual rate: 941176)
    +                        Baud921600 = 0xebed000,
    +                        ///  1Mega baud
    +                        Baud1M = 0x10000000,
    +                        _,
    +                    },
    +                },
    +            }),
    +            reserved1388: [68]u8,
    +            ///  Configuration of parity and hardware flow control
    +            CONFIG: mmio.Mmio(packed struct(u32) {
    +                ///  Hardware flow control
    +                HWFC: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Parity
    +                PARITY: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        ///  Exclude parity bit
    +                        Excluded = 0x0,
    +                        ///  Include parity bit
    +                        Included = 0x7,
    +                        _,
    +                    },
    +                },
    +                ///  Stop bits
    +                STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  One stop bit
    +                        One = 0x0,
    +                        ///  Two stop bits
    +                        Two = 0x1,
    +                    },
    +                },
    +                padding: u27,
    +            }),
    +        };
    +
    +        ///  UART with EasyDMA 0
    +        pub const UARTE0 = extern struct {
    +            ///  Start UART receiver
    +            TASKS_STARTRX: mmio.Mmio(packed struct(u32) {
    +                ///  Start UART receiver
    +                TASKS_STARTRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Stop UART receiver
    +            TASKS_STOPRX: mmio.Mmio(packed struct(u32) {
    +                ///  Stop UART receiver
    +                TASKS_STOPRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Start UART transmitter
    +            TASKS_STARTTX: mmio.Mmio(packed struct(u32) {
    +                ///  Start UART transmitter
    +                TASKS_STARTTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Stop UART transmitter
    +            TASKS_STOPTX: mmio.Mmio(packed struct(u32) {
    +                ///  Stop UART transmitter
    +                TASKS_STOPTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved44: [28]u8,
    +            ///  Flush RX FIFO into RX buffer
    +            TASKS_FLUSHRX: mmio.Mmio(packed struct(u32) {
    +                ///  Flush RX FIFO into RX buffer
    +                TASKS_FLUSHRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved256: [208]u8,
    +            ///  CTS is activated (set low). Clear To Send.
    +            EVENTS_CTS: mmio.Mmio(packed struct(u32) {
    +                ///  CTS is activated (set low). Clear To Send.
    +                EVENTS_CTS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  CTS is deactivated (set high). Not Clear To Send.
    +            EVENTS_NCTS: mmio.Mmio(packed struct(u32) {
    +                ///  CTS is deactivated (set high). Not Clear To Send.
    +                EVENTS_NCTS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Data received in RXD (but potentially not yet transferred to Data RAM)
    +            EVENTS_RXDRDY: mmio.Mmio(packed struct(u32) {
    +                ///  Data received in RXD (but potentially not yet transferred to Data RAM)
    +                EVENTS_RXDRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved272: [4]u8,
    +            ///  Receive buffer is filled up
    +            EVENTS_ENDRX: mmio.Mmio(packed struct(u32) {
    +                ///  Receive buffer is filled up
    +                EVENTS_ENDRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved284: [8]u8,
    +            ///  Data sent from TXD
    +            EVENTS_TXDRDY: mmio.Mmio(packed struct(u32) {
    +                ///  Data sent from TXD
    +                EVENTS_TXDRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Last TX byte transmitted
    +            EVENTS_ENDTX: mmio.Mmio(packed struct(u32) {
    +                ///  Last TX byte transmitted
    +                EVENTS_ENDTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Error detected
    +            EVENTS_ERROR: mmio.Mmio(packed struct(u32) {
    +                ///  Error detected
    +                EVENTS_ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved324: [28]u8,
    +            ///  Receiver timeout
    +            EVENTS_RXTO: mmio.Mmio(packed struct(u32) {
    +                ///  Receiver timeout
    +                EVENTS_RXTO: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved332: [4]u8,
    +            ///  UART receiver has started
    +            EVENTS_RXSTARTED: mmio.Mmio(packed struct(u32) {
    +                ///  UART receiver has started
    +                EVENTS_RXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  UART transmitter has started
    +            EVENTS_TXSTARTED: mmio.Mmio(packed struct(u32) {
    +                ///  UART transmitter has started
    +                EVENTS_TXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved344: [4]u8,
    +            ///  Transmitter stopped
    +            EVENTS_TXSTOPPED: mmio.Mmio(packed struct(u32) {
    +                ///  Transmitter stopped
    +                EVENTS_TXSTOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved512: [164]u8,
    +            ///  Shortcuts between local events and tasks
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                reserved5: u5,
    +                ///  Shortcut between event ENDRX and task STARTRX
    +                ENDRX_STARTRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event ENDRX and task STOPRX
    +                ENDRX_STOPRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u25,
    +            }),
    +            reserved768: [252]u8,
    +            ///  Enable or disable interrupt
    +            INTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable interrupt for event CTS
    +                CTS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event NCTS
    +                NCTS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event RXDRDY
    +                RXDRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved4: u1,
    +                ///  Enable or disable interrupt for event ENDRX
    +                ENDRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved7: u2,
    +                ///  Enable or disable interrupt for event TXDRDY
    +                TXDRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event ENDTX
    +                ENDTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event ERROR
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved17: u7,
    +                ///  Enable or disable interrupt for event RXTO
    +                RXTO: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved19: u1,
    +                ///  Enable or disable interrupt for event RXSTARTED
    +                RXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event TXSTARTED
    +                TXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved22: u1,
    +                ///  Enable or disable interrupt for event TXSTOPPED
    +                TXSTOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u9,
    +            }),
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to enable interrupt for event CTS
    +                CTS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event NCTS
    +                NCTS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event RXDRDY
    +                RXDRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved4: u1,
    +                ///  Write '1' to enable interrupt for event ENDRX
    +                ENDRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved7: u2,
    +                ///  Write '1' to enable interrupt for event TXDRDY
    +                TXDRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event ENDTX
    +                ENDTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event ERROR
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved17: u7,
    +                ///  Write '1' to enable interrupt for event RXTO
    +                RXTO: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved19: u1,
    +                ///  Write '1' to enable interrupt for event RXSTARTED
    +                RXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event TXSTARTED
    +                TXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved22: u1,
    +                ///  Write '1' to enable interrupt for event TXSTOPPED
    +                TXSTOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u9,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to disable interrupt for event CTS
    +                CTS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event NCTS
    +                NCTS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event RXDRDY
    +                RXDRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved4: u1,
    +                ///  Write '1' to disable interrupt for event ENDRX
    +                ENDRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved7: u2,
    +                ///  Write '1' to disable interrupt for event TXDRDY
    +                TXDRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event ENDTX
    +                ENDTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event ERROR
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved17: u7,
    +                ///  Write '1' to disable interrupt for event RXTO
    +                RXTO: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved19: u1,
    +                ///  Write '1' to disable interrupt for event RXSTARTED
    +                RXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event TXSTARTED
    +                TXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved22: u1,
    +                ///  Write '1' to disable interrupt for event TXSTOPPED
    +                TXSTOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u9,
    +            }),
    +            reserved1152: [372]u8,
    +            ///  Error source Note : this register is read / write one to clear.
    +            ERRORSRC: mmio.Mmio(packed struct(u32) {
    +                ///  Overrun error
    +                OVERRUN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: error not present
    +                        NotPresent = 0x0,
    +                        ///  Read: error present
    +                        Present = 0x1,
    +                    },
    +                },
    +                ///  Parity error
    +                PARITY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: error not present
    +                        NotPresent = 0x0,
    +                        ///  Read: error present
    +                        Present = 0x1,
    +                    },
    +                },
    +                ///  Framing error occurred
    +                FRAMING: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: error not present
    +                        NotPresent = 0x0,
    +                        ///  Read: error present
    +                        Present = 0x1,
    +                    },
    +                },
    +                ///  Break condition
    +                BREAK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: error not present
    +                        NotPresent = 0x0,
    +                        ///  Read: error present
    +                        Present = 0x1,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1280: [124]u8,
    +            ///  Enable UART
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable UARTE
    +                ENABLE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  Disable UARTE
    +                        Disabled = 0x0,
    +                        ///  Enable UARTE
    +                        Enabled = 0x8,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1316: [32]u8,
    +            ///  Baud rate. Accuracy depends on the HFCLK source selected.
    +            BAUDRATE: mmio.Mmio(packed struct(u32) {
    +                ///  Baud rate
    +                BAUDRATE: packed union {
    +                    raw: u32,
    +                    value: enum(u32) {
    +                        ///  1200 baud (actual rate: 1205)
    +                        Baud1200 = 0x4f000,
    +                        ///  2400 baud (actual rate: 2396)
    +                        Baud2400 = 0x9d000,
    +                        ///  4800 baud (actual rate: 4808)
    +                        Baud4800 = 0x13b000,
    +                        ///  9600 baud (actual rate: 9598)
    +                        Baud9600 = 0x275000,
    +                        ///  14400 baud (actual rate: 14401)
    +                        Baud14400 = 0x3af000,
    +                        ///  19200 baud (actual rate: 19208)
    +                        Baud19200 = 0x4ea000,
    +                        ///  28800 baud (actual rate: 28777)
    +                        Baud28800 = 0x75c000,
    +                        ///  31250 baud
    +                        Baud31250 = 0x800000,
    +                        ///  38400 baud (actual rate: 38369)
    +                        Baud38400 = 0x9d0000,
    +                        ///  56000 baud (actual rate: 55944)
    +                        Baud56000 = 0xe50000,
    +                        ///  57600 baud (actual rate: 57554)
    +                        Baud57600 = 0xeb0000,
    +                        ///  76800 baud (actual rate: 76923)
    +                        Baud76800 = 0x13a9000,
    +                        ///  115200 baud (actual rate: 115108)
    +                        Baud115200 = 0x1d60000,
    +                        ///  230400 baud (actual rate: 231884)
    +                        Baud230400 = 0x3b00000,
    +                        ///  250000 baud
    +                        Baud250000 = 0x4000000,
    +                        ///  460800 baud (actual rate: 457143)
    +                        Baud460800 = 0x7400000,
    +                        ///  921600 baud (actual rate: 941176)
    +                        Baud921600 = 0xf000000,
    +                        ///  1Mega baud
    +                        Baud1M = 0x10000000,
    +                        _,
    +                    },
    +                },
    +            }),
    +            reserved1388: [68]u8,
    +            ///  Configuration of parity and hardware flow control
    +            CONFIG: mmio.Mmio(packed struct(u32) {
    +                ///  Hardware flow control
    +                HWFC: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Parity
    +                PARITY: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        ///  Exclude parity bit
    +                        Excluded = 0x0,
    +                        ///  Include even parity bit
    +                        Included = 0x7,
    +                        _,
    +                    },
    +                },
    +                ///  Stop bits
    +                STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  One stop bit
    +                        One = 0x0,
    +                        ///  Two stop bits
    +                        Two = 0x1,
    +                    },
    +                },
    +                padding: u27,
    +            }),
    +        };
    +
    +        ///  Serial Peripheral Interface 0
    +        pub const SPI0 = extern struct {
    +            reserved264: [264]u8,
    +            ///  TXD byte sent and RXD byte received
    +            EVENTS_READY: mmio.Mmio(packed struct(u32) {
    +                ///  TXD byte sent and RXD byte received
    +                EVENTS_READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved772: [504]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                reserved2: u2,
    +                ///  Write '1' to enable interrupt for event READY
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                reserved2: u2,
    +                ///  Write '1' to disable interrupt for event READY
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            reserved1280: [500]u8,
    +            ///  Enable SPI
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable SPI
    +                ENABLE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  Disable SPI
    +                        Disabled = 0x0,
    +                        ///  Enable SPI
    +                        Enabled = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1304: [20]u8,
    +            ///  RXD register
    +            RXD: mmio.Mmio(packed struct(u32) {
    +                ///  RX data received. Double buffered
    +                RXD: u8,
    +                padding: u24,
    +            }),
    +            ///  TXD register
    +            TXD: mmio.Mmio(packed struct(u32) {
    +                ///  TX data to send. Double buffered
    +                TXD: u8,
    +                padding: u24,
    +            }),
    +            reserved1316: [4]u8,
    +            ///  SPI frequency. Accuracy depends on the HFCLK source selected.
    +            FREQUENCY: mmio.Mmio(packed struct(u32) {
    +                ///  SPI master data rate
    +                FREQUENCY: packed union {
    +                    raw: u32,
    +                    value: enum(u32) {
    +                        ///  125 kbps
    +                        K125 = 0x2000000,
    +                        ///  250 kbps
    +                        K250 = 0x4000000,
    +                        ///  500 kbps
    +                        K500 = 0x8000000,
    +                        ///  1 Mbps
    +                        M1 = 0x10000000,
    +                        ///  2 Mbps
    +                        M2 = 0x20000000,
    +                        ///  4 Mbps
    +                        M4 = 0x40000000,
    +                        ///  8 Mbps
    +                        M8 = 0x80000000,
    +                        _,
    +                    },
    +                },
    +            }),
    +            reserved1364: [44]u8,
    +            ///  Configuration register
    +            CONFIG: mmio.Mmio(packed struct(u32) {
    +                ///  Bit order
    +                ORDER: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Most significant bit shifted out first
    +                        MsbFirst = 0x0,
    +                        ///  Least significant bit shifted out first
    +                        LsbFirst = 0x1,
    +                    },
    +                },
    +                ///  Serial clock (SCK) phase
    +                CPHA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Sample on leading edge of clock, shift serial data on trailing edge
    +                        Leading = 0x0,
    +                        ///  Sample on trailing edge of clock, shift serial data on leading edge
    +                        Trailing = 0x1,
    +                    },
    +                },
    +                ///  Serial clock (SCK) polarity
    +                CPOL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Active high
    +                        ActiveHigh = 0x0,
    +                        ///  Active low
    +                        ActiveLow = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +        };
    +
    +        ///  Serial Peripheral Interface Master with EasyDMA 0
    +        pub const SPIM0 = extern struct {
    +            reserved16: [16]u8,
    +            ///  Start SPI transaction
    +            TASKS_START: mmio.Mmio(packed struct(u32) {
    +                ///  Start SPI transaction
    +                TASKS_START: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Stop SPI transaction
    +            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    +                ///  Stop SPI transaction
    +                TASKS_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved28: [4]u8,
    +            ///  Suspend SPI transaction
    +            TASKS_SUSPEND: mmio.Mmio(packed struct(u32) {
    +                ///  Suspend SPI transaction
    +                TASKS_SUSPEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Resume SPI transaction
    +            TASKS_RESUME: mmio.Mmio(packed struct(u32) {
    +                ///  Resume SPI transaction
    +                TASKS_RESUME: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved260: [224]u8,
    +            ///  SPI transaction has stopped
    +            EVENTS_STOPPED: mmio.Mmio(packed struct(u32) {
    +                ///  SPI transaction has stopped
    +                EVENTS_STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved272: [8]u8,
    +            ///  End of RXD buffer reached
    +            EVENTS_ENDRX: mmio.Mmio(packed struct(u32) {
    +                ///  End of RXD buffer reached
    +                EVENTS_ENDRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved280: [4]u8,
    +            ///  End of RXD buffer and TXD buffer reached
    +            EVENTS_END: mmio.Mmio(packed struct(u32) {
    +                ///  End of RXD buffer and TXD buffer reached
    +                EVENTS_END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved288: [4]u8,
    +            ///  End of TXD buffer reached
    +            EVENTS_ENDTX: mmio.Mmio(packed struct(u32) {
    +                ///  End of TXD buffer reached
    +                EVENTS_ENDTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved332: [40]u8,
    +            ///  Transaction started
    +            EVENTS_STARTED: mmio.Mmio(packed struct(u32) {
    +                ///  Transaction started
    +                EVENTS_STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved512: [176]u8,
    +            ///  Shortcuts between local events and tasks
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                reserved17: u17,
    +                ///  Shortcut between event END and task START
    +                END_START: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u14,
    +            }),
    +            reserved772: [256]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to enable interrupt for event STOPPED
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved4: u2,
    +                ///  Write '1' to enable interrupt for event ENDRX
    +                ENDRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved6: u1,
    +                ///  Write '1' to enable interrupt for event END
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved8: u1,
    +                ///  Write '1' to enable interrupt for event ENDTX
    +                ENDTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved19: u10,
    +                ///  Write '1' to enable interrupt for event STARTED
    +                STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u12,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to disable interrupt for event STOPPED
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved4: u2,
    +                ///  Write '1' to disable interrupt for event ENDRX
    +                ENDRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved6: u1,
    +                ///  Write '1' to disable interrupt for event END
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved8: u1,
    +                ///  Write '1' to disable interrupt for event ENDTX
    +                ENDTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved19: u10,
    +                ///  Write '1' to disable interrupt for event STARTED
    +                STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u12,
    +            }),
    +            reserved1024: [244]u8,
    +            ///  Stall status for EasyDMA RAM accesses. The fields in this register is set to STALL by hardware whenever a stall occurres and can be cleared (set to NOSTALL) by the CPU.
    +            STALLSTAT: mmio.Mmio(packed struct(u32) {
    +                ///  Stall status for EasyDMA RAM reads
    +                TX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  No stall
    +                        NOSTALL = 0x0,
    +                        ///  A stall has occurred
    +                        STALL = 0x1,
    +                    },
    +                },
    +                ///  Stall status for EasyDMA RAM writes
    +                RX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  No stall
    +                        NOSTALL = 0x0,
    +                        ///  A stall has occurred
    +                        STALL = 0x1,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            reserved1280: [252]u8,
    +            ///  Enable SPIM
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable SPIM
    +                ENABLE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  Disable SPIM
    +                        Disabled = 0x0,
    +                        ///  Enable SPIM
    +                        Enabled = 0x7,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1316: [32]u8,
    +            ///  SPI frequency. Accuracy depends on the HFCLK source selected.
    +            FREQUENCY: mmio.Mmio(packed struct(u32) {
    +                ///  SPI master data rate
    +                FREQUENCY: packed union {
    +                    raw: u32,
    +                    value: enum(u32) {
    +                        ///  125 kbps
    +                        K125 = 0x2000000,
    +                        ///  250 kbps
    +                        K250 = 0x4000000,
    +                        ///  500 kbps
    +                        K500 = 0x8000000,
    +                        ///  1 Mbps
    +                        M1 = 0x10000000,
    +                        ///  2 Mbps
    +                        M2 = 0x20000000,
    +                        ///  4 Mbps
    +                        M4 = 0x40000000,
    +                        ///  8 Mbps
    +                        M8 = 0x80000000,
    +                        ///  16 Mbps
    +                        M16 = 0xa000000,
    +                        ///  32 Mbps
    +                        M32 = 0x14000000,
    +                        _,
    +                    },
    +                },
    +            }),
    +            reserved1364: [44]u8,
    +            ///  Configuration register
    +            CONFIG: mmio.Mmio(packed struct(u32) {
    +                ///  Bit order
    +                ORDER: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Most significant bit shifted out first
    +                        MsbFirst = 0x0,
    +                        ///  Least significant bit shifted out first
    +                        LsbFirst = 0x1,
    +                    },
    +                },
    +                ///  Serial clock (SCK) phase
    +                CPHA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Sample on leading edge of clock, shift serial data on trailing edge
    +                        Leading = 0x0,
    +                        ///  Sample on trailing edge of clock, shift serial data on leading edge
    +                        Trailing = 0x1,
    +                    },
    +                },
    +                ///  Serial clock (SCK) polarity
    +                CPOL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Active high
    +                        ActiveHigh = 0x0,
    +                        ///  Active low
    +                        ActiveLow = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            reserved1384: [16]u8,
    +            ///  Polarity of CSN output
    +            CSNPOL: mmio.Mmio(packed struct(u32) {
    +                ///  Polarity of CSN output
    +                CSNPOL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Active low (idle state high)
    +                        LOW = 0x0,
    +                        ///  Active high (idle state low)
    +                        HIGH = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Pin select for DCX signal
    +            PSELDCX: mmio.Mmio(packed struct(u32) {
    +                ///  Pin number
    +                PIN: u5,
    +                ///  Port number
    +                PORT: u1,
    +                reserved31: u25,
    +                ///  Connection
    +                CONNECT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disconnect
    +                        Disconnected = 0x1,
    +                        ///  Connect
    +                        Connected = 0x0,
    +                    },
    +                },
    +            }),
    +            ///  DCX configuration
    +            DCXCNT: mmio.Mmio(packed struct(u32) {
    +                ///  This register specifies the number of command bytes preceding the data bytes. The PSEL.DCX line will be low during transmission of command bytes and high during transmission of data bytes. Value 0xF indicates that all bytes are command bytes.
    +                DCXCNT: u4,
    +                padding: u28,
    +            }),
    +            reserved1472: [76]u8,
    +            ///  Byte transmitted after TXD.MAXCNT bytes have been transmitted in the case when RXD.MAXCNT is greater than TXD.MAXCNT
    +            ORC: mmio.Mmio(packed struct(u32) {
    +                ///  Byte transmitted after TXD.MAXCNT bytes have been transmitted in the case when RXD.MAXCNT is greater than TXD.MAXCNT.
    +                ORC: u8,
    +                padding: u24,
    +            }),
    +        };
    +
    +        ///  SPI Slave 0
    +        pub const SPIS0 = extern struct {
    +            reserved36: [36]u8,
    +            ///  Acquire SPI semaphore
    +            TASKS_ACQUIRE: mmio.Mmio(packed struct(u32) {
    +                ///  Acquire SPI semaphore
    +                TASKS_ACQUIRE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Release SPI semaphore, enabling the SPI slave to acquire it
    +            TASKS_RELEASE: mmio.Mmio(packed struct(u32) {
    +                ///  Release SPI semaphore, enabling the SPI slave to acquire it
    +                TASKS_RELEASE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved260: [216]u8,
    +            ///  Granted transaction completed
    +            EVENTS_END: mmio.Mmio(packed struct(u32) {
    +                ///  Granted transaction completed
    +                EVENTS_END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved272: [8]u8,
    +            ///  End of RXD buffer reached
    +            EVENTS_ENDRX: mmio.Mmio(packed struct(u32) {
    +                ///  End of RXD buffer reached
    +                EVENTS_ENDRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved296: [20]u8,
    +            ///  Semaphore acquired
    +            EVENTS_ACQUIRED: mmio.Mmio(packed struct(u32) {
    +                ///  Semaphore acquired
    +                EVENTS_ACQUIRED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved512: [212]u8,
    +            ///  Shortcuts between local events and tasks
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                reserved2: u2,
    +                ///  Shortcut between event END and task ACQUIRE
    +                END_ACQUIRE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            reserved772: [256]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to enable interrupt for event END
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved4: u2,
    +                ///  Write '1' to enable interrupt for event ENDRX
    +                ENDRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved10: u5,
    +                ///  Write '1' to enable interrupt for event ACQUIRED
    +                ACQUIRED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u21,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to disable interrupt for event END
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved4: u2,
    +                ///  Write '1' to disable interrupt for event ENDRX
    +                ENDRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved10: u5,
    +                ///  Write '1' to disable interrupt for event ACQUIRED
    +                ACQUIRED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u21,
    +            }),
    +            reserved1024: [244]u8,
    +            ///  Semaphore status register
    +            SEMSTAT: mmio.Mmio(packed struct(u32) {
    +                ///  Semaphore status
    +                SEMSTAT: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Semaphore is free
    +                        Free = 0x0,
    +                        ///  Semaphore is assigned to CPU
    +                        CPU = 0x1,
    +                        ///  Semaphore is assigned to SPI slave
    +                        SPIS = 0x2,
    +                        ///  Semaphore is assigned to SPI but a handover to the CPU is pending
    +                        CPUPending = 0x3,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            reserved1088: [60]u8,
    +            ///  Status from last transaction
    +            STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  TX buffer over-read detected, and prevented
    +                OVERREAD: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: error not present
    +                        NotPresent = 0x0,
    +                        ///  Read: error present
    +                        Present = 0x1,
    +                    },
    +                },
    +                ///  RX buffer overflow detected, and prevented
    +                OVERFLOW: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: error not present
    +                        NotPresent = 0x0,
    +                        ///  Read: error present
    +                        Present = 0x1,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            reserved1280: [188]u8,
    +            ///  Enable SPI slave
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable SPI slave
    +                ENABLE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  Disable SPI slave
    +                        Disabled = 0x0,
    +                        ///  Enable SPI slave
    +                        Enabled = 0x2,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1364: [80]u8,
    +            ///  Configuration register
    +            CONFIG: mmio.Mmio(packed struct(u32) {
    +                ///  Bit order
    +                ORDER: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Most significant bit shifted out first
    +                        MsbFirst = 0x0,
    +                        ///  Least significant bit shifted out first
    +                        LsbFirst = 0x1,
    +                    },
    +                },
    +                ///  Serial clock (SCK) phase
    +                CPHA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Sample on leading edge of clock, shift serial data on trailing edge
    +                        Leading = 0x0,
    +                        ///  Sample on trailing edge of clock, shift serial data on leading edge
    +                        Trailing = 0x1,
    +                    },
    +                },
    +                ///  Serial clock (SCK) polarity
    +                CPOL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Active high
    +                        ActiveHigh = 0x0,
    +                        ///  Active low
    +                        ActiveLow = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            reserved1372: [4]u8,
    +            ///  Default character. Character clocked out in case of an ignored transaction.
    +            DEF: mmio.Mmio(packed struct(u32) {
    +                ///  Default character. Character clocked out in case of an ignored transaction.
    +                DEF: u8,
    +                padding: u24,
    +            }),
    +            reserved1472: [96]u8,
    +            ///  Over-read character
    +            ORC: mmio.Mmio(packed struct(u32) {
    +                ///  Over-read character. Character clocked out after an over-read of the transmit buffer.
    +                ORC: u8,
    +                padding: u24,
    +            }),
    +        };
    +
    +        ///  I2C compatible Two-Wire Interface 0
    +        pub const TWI0 = extern struct {
    +            ///  Start TWI receive sequence
    +            TASKS_STARTRX: mmio.Mmio(packed struct(u32) {
    +                ///  Start TWI receive sequence
    +                TASKS_STARTRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved8: [4]u8,
    +            ///  Start TWI transmit sequence
    +            TASKS_STARTTX: mmio.Mmio(packed struct(u32) {
    +                ///  Start TWI transmit sequence
    +                TASKS_STARTTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved20: [8]u8,
    +            ///  Stop TWI transaction
    +            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    +                ///  Stop TWI transaction
    +                TASKS_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved28: [4]u8,
    +            ///  Suspend TWI transaction
    +            TASKS_SUSPEND: mmio.Mmio(packed struct(u32) {
    +                ///  Suspend TWI transaction
    +                TASKS_SUSPEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Resume TWI transaction
    +            TASKS_RESUME: mmio.Mmio(packed struct(u32) {
    +                ///  Resume TWI transaction
    +                TASKS_RESUME: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved260: [224]u8,
    +            ///  TWI stopped
    +            EVENTS_STOPPED: mmio.Mmio(packed struct(u32) {
    +                ///  TWI stopped
    +                EVENTS_STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  TWI RXD byte received
    +            EVENTS_RXDREADY: mmio.Mmio(packed struct(u32) {
    +                ///  TWI RXD byte received
    +                EVENTS_RXDREADY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved284: [16]u8,
    +            ///  TWI TXD byte sent
    +            EVENTS_TXDSENT: mmio.Mmio(packed struct(u32) {
    +                ///  TWI TXD byte sent
    +                EVENTS_TXDSENT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved292: [4]u8,
    +            ///  TWI error
    +            EVENTS_ERROR: mmio.Mmio(packed struct(u32) {
    +                ///  TWI error
    +                EVENTS_ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved312: [16]u8,
    +            ///  TWI byte boundary, generated before each byte that is sent or received
    +            EVENTS_BB: mmio.Mmio(packed struct(u32) {
    +                ///  TWI byte boundary, generated before each byte that is sent or received
    +                EVENTS_BB: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved328: [12]u8,
    +            ///  TWI entered the suspended state
    +            EVENTS_SUSPENDED: mmio.Mmio(packed struct(u32) {
    +                ///  TWI entered the suspended state
    +                EVENTS_SUSPENDED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved512: [180]u8,
    +            ///  Shortcuts between local events and tasks
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                ///  Shortcut between event BB and task SUSPEND
    +                BB_SUSPEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event BB and task STOP
    +                BB_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            reserved772: [256]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to enable interrupt for event STOPPED
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event RXDREADY
    +                RXDREADY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved7: u4,
    +                ///  Write '1' to enable interrupt for event TXDSENT
    +                TXDSENT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved9: u1,
    +                ///  Write '1' to enable interrupt for event ERROR
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved14: u4,
    +                ///  Write '1' to enable interrupt for event BB
    +                BB: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved18: u3,
    +                ///  Write '1' to enable interrupt for event SUSPENDED
    +                SUSPENDED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u13,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to disable interrupt for event STOPPED
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event RXDREADY
    +                RXDREADY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved7: u4,
    +                ///  Write '1' to disable interrupt for event TXDSENT
    +                TXDSENT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved9: u1,
    +                ///  Write '1' to disable interrupt for event ERROR
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved14: u4,
    +                ///  Write '1' to disable interrupt for event BB
    +                BB: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved18: u3,
    +                ///  Write '1' to disable interrupt for event SUSPENDED
    +                SUSPENDED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u13,
    +            }),
    +            reserved1220: [440]u8,
    +            ///  Error source
    +            ERRORSRC: mmio.Mmio(packed struct(u32) {
    +                ///  Overrun error
    +                OVERRUN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: no overrun occured
    +                        NotPresent = 0x0,
    +                        ///  Read: overrun occured
    +                        Present = 0x1,
    +                    },
    +                },
    +                ///  NACK received after sending the address (write '1' to clear)
    +                ANACK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: error not present
    +                        NotPresent = 0x0,
    +                        ///  Read: error present
    +                        Present = 0x1,
    +                    },
    +                },
    +                ///  NACK received after sending a data byte (write '1' to clear)
    +                DNACK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: error not present
    +                        NotPresent = 0x0,
    +                        ///  Read: error present
    +                        Present = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            reserved1280: [56]u8,
    +            ///  Enable TWI
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable TWI
    +                ENABLE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  Disable TWI
    +                        Disabled = 0x0,
    +                        ///  Enable TWI
    +                        Enabled = 0x5,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1304: [20]u8,
    +            ///  RXD register
    +            RXD: mmio.Mmio(packed struct(u32) {
    +                ///  RXD register
    +                RXD: u8,
    +                padding: u24,
    +            }),
    +            ///  TXD register
    +            TXD: mmio.Mmio(packed struct(u32) {
    +                ///  TXD register
    +                TXD: u8,
    +                padding: u24,
    +            }),
    +            reserved1316: [4]u8,
    +            ///  TWI frequency. Accuracy depends on the HFCLK source selected.
    +            FREQUENCY: mmio.Mmio(packed struct(u32) {
    +                ///  TWI master clock frequency
    +                FREQUENCY: packed union {
    +                    raw: u32,
    +                    value: enum(u32) {
    +                        ///  100 kbps
    +                        K100 = 0x1980000,
    +                        ///  250 kbps
    +                        K250 = 0x4000000,
    +                        ///  400 kbps (actual rate 410.256 kbps)
    +                        K400 = 0x6680000,
    +                        _,
    +                    },
    +                },
    +            }),
    +            reserved1416: [96]u8,
    +            ///  Address used in the TWI transfer
    +            ADDRESS: mmio.Mmio(packed struct(u32) {
    +                ///  Address used in the TWI transfer
    +                ADDRESS: u7,
    +                padding: u25,
    +            }),
    +        };
    +
    +        ///  I2C compatible Two-Wire Master Interface with EasyDMA 0
    +        pub const TWIM0 = extern struct {
    +            ///  Start TWI receive sequence
    +            TASKS_STARTRX: mmio.Mmio(packed struct(u32) {
    +                ///  Start TWI receive sequence
    +                TASKS_STARTRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved8: [4]u8,
    +            ///  Start TWI transmit sequence
    +            TASKS_STARTTX: mmio.Mmio(packed struct(u32) {
    +                ///  Start TWI transmit sequence
    +                TASKS_STARTTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved20: [8]u8,
    +            ///  Stop TWI transaction. Must be issued while the TWI master is not suspended.
    +            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    +                ///  Stop TWI transaction. Must be issued while the TWI master is not suspended.
    +                TASKS_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved28: [4]u8,
    +            ///  Suspend TWI transaction
    +            TASKS_SUSPEND: mmio.Mmio(packed struct(u32) {
    +                ///  Suspend TWI transaction
    +                TASKS_SUSPEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Resume TWI transaction
    +            TASKS_RESUME: mmio.Mmio(packed struct(u32) {
    +                ///  Resume TWI transaction
    +                TASKS_RESUME: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved260: [224]u8,
    +            ///  TWI stopped
    +            EVENTS_STOPPED: mmio.Mmio(packed struct(u32) {
    +                ///  TWI stopped
    +                EVENTS_STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved292: [28]u8,
    +            ///  TWI error
    +            EVENTS_ERROR: mmio.Mmio(packed struct(u32) {
    +                ///  TWI error
    +                EVENTS_ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved328: [32]u8,
    +            ///  Last byte has been sent out after the SUSPEND task has been issued, TWI traffic is now suspended.
    +            EVENTS_SUSPENDED: mmio.Mmio(packed struct(u32) {
    +                ///  Last byte has been sent out after the SUSPEND task has been issued, TWI traffic is now suspended.
    +                EVENTS_SUSPENDED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Receive sequence started
    +            EVENTS_RXSTARTED: mmio.Mmio(packed struct(u32) {
    +                ///  Receive sequence started
    +                EVENTS_RXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Transmit sequence started
    +            EVENTS_TXSTARTED: mmio.Mmio(packed struct(u32) {
    +                ///  Transmit sequence started
    +                EVENTS_TXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved348: [8]u8,
    +            ///  Byte boundary, starting to receive the last byte
    +            EVENTS_LASTRX: mmio.Mmio(packed struct(u32) {
    +                ///  Byte boundary, starting to receive the last byte
    +                EVENTS_LASTRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Byte boundary, starting to transmit the last byte
    +            EVENTS_LASTTX: mmio.Mmio(packed struct(u32) {
    +                ///  Byte boundary, starting to transmit the last byte
    +                EVENTS_LASTTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved512: [156]u8,
    +            ///  Shortcuts between local events and tasks
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                reserved7: u7,
    +                ///  Shortcut between event LASTTX and task STARTRX
    +                LASTTX_STARTRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event LASTTX and task SUSPEND
    +                LASTTX_SUSPEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event LASTTX and task STOP
    +                LASTTX_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event LASTRX and task STARTTX
    +                LASTRX_STARTTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event LASTRX and task SUSPEND
    +                LASTRX_SUSPEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event LASTRX and task STOP
    +                LASTRX_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u19,
    +            }),
    +            reserved768: [252]u8,
    +            ///  Enable or disable interrupt
    +            INTEN: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Enable or disable interrupt for event STOPPED
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved9: u7,
    +                ///  Enable or disable interrupt for event ERROR
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved18: u8,
    +                ///  Enable or disable interrupt for event SUSPENDED
    +                SUSPENDED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event RXSTARTED
    +                RXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event TXSTARTED
    +                TXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved23: u2,
    +                ///  Enable or disable interrupt for event LASTRX
    +                LASTRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event LASTTX
    +                LASTTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u7,
    +            }),
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to enable interrupt for event STOPPED
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved9: u7,
    +                ///  Write '1' to enable interrupt for event ERROR
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved18: u8,
    +                ///  Write '1' to enable interrupt for event SUSPENDED
    +                SUSPENDED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event RXSTARTED
    +                RXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event TXSTARTED
    +                TXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved23: u2,
    +                ///  Write '1' to enable interrupt for event LASTRX
    +                LASTRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event LASTTX
    +                LASTTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u7,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to disable interrupt for event STOPPED
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved9: u7,
    +                ///  Write '1' to disable interrupt for event ERROR
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved18: u8,
    +                ///  Write '1' to disable interrupt for event SUSPENDED
    +                SUSPENDED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event RXSTARTED
    +                RXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event TXSTARTED
    +                TXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved23: u2,
    +                ///  Write '1' to disable interrupt for event LASTRX
    +                LASTRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event LASTTX
    +                LASTTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u7,
    +            }),
    +            reserved1220: [440]u8,
    +            ///  Error source
    +            ERRORSRC: mmio.Mmio(packed struct(u32) {
    +                ///  Overrun error
    +                OVERRUN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Error did not occur
    +                        NotReceived = 0x0,
    +                        ///  Error occurred
    +                        Received = 0x1,
    +                    },
    +                },
    +                ///  NACK received after sending the address (write '1' to clear)
    +                ANACK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Error did not occur
    +                        NotReceived = 0x0,
    +                        ///  Error occurred
    +                        Received = 0x1,
    +                    },
    +                },
    +                ///  NACK received after sending a data byte (write '1' to clear)
    +                DNACK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Error did not occur
    +                        NotReceived = 0x0,
    +                        ///  Error occurred
    +                        Received = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            reserved1280: [56]u8,
    +            ///  Enable TWIM
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable TWIM
    +                ENABLE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  Disable TWIM
    +                        Disabled = 0x0,
    +                        ///  Enable TWIM
    +                        Enabled = 0x6,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1316: [32]u8,
    +            ///  TWI frequency. Accuracy depends on the HFCLK source selected.
    +            FREQUENCY: mmio.Mmio(packed struct(u32) {
    +                ///  TWI master clock frequency
    +                FREQUENCY: packed union {
    +                    raw: u32,
    +                    value: enum(u32) {
    +                        ///  100 kbps
    +                        K100 = 0x1980000,
    +                        ///  250 kbps
    +                        K250 = 0x4000000,
    +                        ///  400 kbps
    +                        K400 = 0x6400000,
    +                        _,
    +                    },
    +                },
    +            }),
    +            reserved1416: [96]u8,
    +            ///  Address used in the TWI transfer
    +            ADDRESS: mmio.Mmio(packed struct(u32) {
    +                ///  Address used in the TWI transfer
    +                ADDRESS: u7,
    +                padding: u25,
    +            }),
    +        };
    +
    +        ///  I2C compatible Two-Wire Slave Interface with EasyDMA 0
    +        pub const TWIS0 = extern struct {
    +            reserved20: [20]u8,
    +            ///  Stop TWI transaction
    +            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    +                ///  Stop TWI transaction
    +                TASKS_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved28: [4]u8,
    +            ///  Suspend TWI transaction
    +            TASKS_SUSPEND: mmio.Mmio(packed struct(u32) {
    +                ///  Suspend TWI transaction
    +                TASKS_SUSPEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Resume TWI transaction
    +            TASKS_RESUME: mmio.Mmio(packed struct(u32) {
    +                ///  Resume TWI transaction
    +                TASKS_RESUME: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved48: [12]u8,
    +            ///  Prepare the TWI slave to respond to a write command
    +            TASKS_PREPARERX: mmio.Mmio(packed struct(u32) {
    +                ///  Prepare the TWI slave to respond to a write command
    +                TASKS_PREPARERX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Prepare the TWI slave to respond to a read command
    +            TASKS_PREPARETX: mmio.Mmio(packed struct(u32) {
    +                ///  Prepare the TWI slave to respond to a read command
    +                TASKS_PREPARETX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved260: [204]u8,
    +            ///  TWI stopped
    +            EVENTS_STOPPED: mmio.Mmio(packed struct(u32) {
    +                ///  TWI stopped
    +                EVENTS_STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved292: [28]u8,
    +            ///  TWI error
    +            EVENTS_ERROR: mmio.Mmio(packed struct(u32) {
    +                ///  TWI error
    +                EVENTS_ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved332: [36]u8,
    +            ///  Receive sequence started
    +            EVENTS_RXSTARTED: mmio.Mmio(packed struct(u32) {
    +                ///  Receive sequence started
    +                EVENTS_RXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Transmit sequence started
    +            EVENTS_TXSTARTED: mmio.Mmio(packed struct(u32) {
    +                ///  Transmit sequence started
    +                EVENTS_TXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved356: [16]u8,
    +            ///  Write command received
    +            EVENTS_WRITE: mmio.Mmio(packed struct(u32) {
    +                ///  Write command received
    +                EVENTS_WRITE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Read command received
    +            EVENTS_READ: mmio.Mmio(packed struct(u32) {
    +                ///  Read command received
    +                EVENTS_READ: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved512: [148]u8,
    +            ///  Shortcuts between local events and tasks
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                reserved13: u13,
    +                ///  Shortcut between event WRITE and task SUSPEND
    +                WRITE_SUSPEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event READ and task SUSPEND
    +                READ_SUSPEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u17,
    +            }),
    +            reserved768: [252]u8,
    +            ///  Enable or disable interrupt
    +            INTEN: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Enable or disable interrupt for event STOPPED
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved9: u7,
    +                ///  Enable or disable interrupt for event ERROR
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved19: u9,
    +                ///  Enable or disable interrupt for event RXSTARTED
    +                RXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event TXSTARTED
    +                TXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved25: u4,
    +                ///  Enable or disable interrupt for event WRITE
    +                WRITE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event READ
    +                READ: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u5,
    +            }),
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to enable interrupt for event STOPPED
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved9: u7,
    +                ///  Write '1' to enable interrupt for event ERROR
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved19: u9,
    +                ///  Write '1' to enable interrupt for event RXSTARTED
    +                RXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event TXSTARTED
    +                TXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved25: u4,
    +                ///  Write '1' to enable interrupt for event WRITE
    +                WRITE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event READ
    +                READ: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u5,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to disable interrupt for event STOPPED
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved9: u7,
    +                ///  Write '1' to disable interrupt for event ERROR
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved19: u9,
    +                ///  Write '1' to disable interrupt for event RXSTARTED
    +                RXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event TXSTARTED
    +                TXSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved25: u4,
    +                ///  Write '1' to disable interrupt for event WRITE
    +                WRITE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event READ
    +                READ: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u5,
    +            }),
    +            reserved1232: [452]u8,
    +            ///  Error source
    +            ERRORSRC: mmio.Mmio(packed struct(u32) {
    +                ///  RX buffer overflow detected, and prevented
    +                OVERFLOW: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Error did not occur
    +                        NotDetected = 0x0,
    +                        ///  Error occurred
    +                        Detected = 0x1,
    +                    },
    +                },
    +                reserved2: u1,
    +                ///  NACK sent after receiving a data byte
    +                DNACK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Error did not occur
    +                        NotReceived = 0x0,
    +                        ///  Error occurred
    +                        Received = 0x1,
    +                    },
    +                },
    +                ///  TX buffer over-read detected, and prevented
    +                OVERREAD: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Error did not occur
    +                        NotDetected = 0x0,
    +                        ///  Error occurred
    +                        Detected = 0x1,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            ///  Status register indicating which address had a match
    +            MATCH: mmio.Mmio(packed struct(u32) {
    +                ///  Which of the addresses in {ADDRESS} matched the incoming address
    +                MATCH: u1,
    +                padding: u31,
    +            }),
    +            reserved1280: [40]u8,
    +            ///  Enable TWIS
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable TWIS
    +                ENABLE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  Disable TWIS
    +                        Disabled = 0x0,
    +                        ///  Enable TWIS
    +                        Enabled = 0x9,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1416: [132]u8,
    +            ///  Description collection: TWI slave address n
    +            ADDRESS: [2]mmio.Mmio(packed struct(u32) {
    +                ///  TWI slave address
    +                ADDRESS: u7,
    +                padding: u25,
    +            }),
    +            reserved1428: [4]u8,
    +            ///  Configuration register for the address match mechanism
    +            CONFIG: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable address matching on ADDRESS[0]
    +                ADDRESS0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable address matching on ADDRESS[1]
    +                ADDRESS1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            reserved1472: [40]u8,
    +            ///  Over-read character. Character sent out in case of an over-read of the transmit buffer.
    +            ORC: mmio.Mmio(packed struct(u32) {
    +                ///  Over-read character. Character sent out in case of an over-read of the transmit buffer.
    +                ORC: u8,
    +                padding: u24,
    +            }),
    +        };
    +
    +        ///  Pulse Density Modulation (Digital Microphone) Interface
    +        pub const PDM = extern struct {
    +            ///  Starts continuous PDM transfer
    +            TASKS_START: mmio.Mmio(packed struct(u32) {
    +                ///  Starts continuous PDM transfer
    +                TASKS_START: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Stops PDM transfer
    +            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    +                ///  Stops PDM transfer
    +                TASKS_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved256: [248]u8,
    +            ///  PDM transfer has started
    +            EVENTS_STARTED: mmio.Mmio(packed struct(u32) {
    +                ///  PDM transfer has started
    +                EVENTS_STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  PDM transfer has finished
    +            EVENTS_STOPPED: mmio.Mmio(packed struct(u32) {
    +                ///  PDM transfer has finished
    +                EVENTS_STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  The PDM has written the last sample specified by SAMPLE.MAXCNT (or the last sample after a STOP task has been received) to Data RAM
    +            EVENTS_END: mmio.Mmio(packed struct(u32) {
    +                ///  The PDM has written the last sample specified by SAMPLE.MAXCNT (or the last sample after a STOP task has been received) to Data RAM
    +                EVENTS_END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved768: [500]u8,
    +            ///  Enable or disable interrupt
    +            INTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable interrupt for event STARTED
    +                STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event STOPPED
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event END
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to enable interrupt for event STARTED
    +                STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event STOPPED
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event END
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to disable interrupt for event STARTED
    +                STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event STOPPED
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event END
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            reserved1280: [500]u8,
    +            ///  PDM module enable register
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable PDM module
    +                ENABLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  PDM clock generator control
    +            PDMCLKCTRL: mmio.Mmio(packed struct(u32) {
    +                ///  PDM_CLK frequency
    +                FREQ: packed union {
    +                    raw: u32,
    +                    value: enum(u32) {
    +                        ///  PDM_CLK = 32 MHz / 32 = 1.000 MHz
    +                        @"1000K" = 0x8000000,
    +                        ///  PDM_CLK = 32 MHz / 31 = 1.032 MHz. Nominal clock for RATIO=Ratio64.
    +                        Default = 0x8400000,
    +                        ///  PDM_CLK = 32 MHz / 30 = 1.067 MHz
    +                        @"1067K" = 0x8800000,
    +                        ///  PDM_CLK = 32 MHz / 26 = 1.231 MHz
    +                        @"1231K" = 0x9800000,
    +                        ///  PDM_CLK = 32 MHz / 25 = 1.280 MHz. Nominal clock for RATIO=Ratio80.
    +                        @"1280K" = 0xa000000,
    +                        ///  PDM_CLK = 32 MHz / 24 = 1.333 MHz
    +                        @"1333K" = 0xa800000,
    +                        _,
    +                    },
    +                },
    +            }),
    +            ///  Defines the routing of the connected PDM microphones' signals
    +            MODE: mmio.Mmio(packed struct(u32) {
    +                ///  Mono or stereo operation
    +                OPERATION: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Sample and store one pair (Left + Right) of 16bit samples per RAM word R=[31:16]; L=[15:0]
    +                        Stereo = 0x0,
    +                        ///  Sample and store two successive Left samples (16 bit each) per RAM word L1=[31:16]; L0=[15:0]
    +                        Mono = 0x1,
    +                    },
    +                },
    +                ///  Defines on which PDM_CLK edge Left (or mono) is sampled
    +                EDGE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Left (or mono) is sampled on falling edge of PDM_CLK
    +                        LeftFalling = 0x0,
    +                        ///  Left (or mono) is sampled on rising edge of PDM_CLK
    +                        LeftRising = 0x1,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            reserved1304: [12]u8,
    +            ///  Left output gain adjustment
    +            GAINL: mmio.Mmio(packed struct(u32) {
    +                ///  Left output gain adjustment, in 0.5 dB steps, around the default module gain (see electrical parameters) 0x00 -20 dB gain adjust 0x01 -19.5 dB gain adjust (...) 0x27 -0.5 dB gain adjust 0x28 0 dB gain adjust 0x29 +0.5 dB gain adjust (...) 0x4F +19.5 dB gain adjust 0x50 +20 dB gain adjust
    +                GAINL: packed union {
    +                    raw: u7,
    +                    value: enum(u7) {
    +                        ///  -20dB gain adjustment (minimum)
    +                        MinGain = 0x0,
    +                        ///  0dB gain adjustment
    +                        DefaultGain = 0x28,
    +                        ///  +20dB gain adjustment (maximum)
    +                        MaxGain = 0x50,
    +                        _,
    +                    },
    +                },
    +                padding: u25,
    +            }),
    +            ///  Right output gain adjustment
    +            GAINR: mmio.Mmio(packed struct(u32) {
    +                ///  Right output gain adjustment, in 0.5 dB steps, around the default module gain (see electrical parameters)
    +                GAINR: packed union {
    +                    raw: u7,
    +                    value: enum(u7) {
    +                        ///  -20dB gain adjustment (minimum)
    +                        MinGain = 0x0,
    +                        ///  0dB gain adjustment
    +                        DefaultGain = 0x28,
    +                        ///  +20dB gain adjustment (maximum)
    +                        MaxGain = 0x50,
    +                        _,
    +                    },
    +                },
    +                padding: u25,
    +            }),
    +            ///  Selects the ratio between PDM_CLK and output sample rate. Change PDMCLKCTRL accordingly.
    +            RATIO: mmio.Mmio(packed struct(u32) {
    +                ///  Selects the ratio between PDM_CLK and output sample rate
    +                RATIO: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Ratio of 64
    +                        Ratio64 = 0x0,
    +                        ///  Ratio of 80
    +                        Ratio80 = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +        };
    +
    +        ///  ARM TrustZone CryptoCell register interface
    +        pub const CRYPTOCELL = extern struct {
    +            reserved1280: [1280]u8,
    +            ///  Enable CRYPTOCELL subsystem
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable the CRYPTOCELL subsystem
    +                ENABLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  CRYPTOCELL subsystem disabled
    +                        Disabled = 0x0,
    +                        ///  CRYPTOCELL subsystem enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +        };
    +
    +        ///  CRYPTOCELL HOST_RGF interface
    +        pub const CC_HOST_RGF = extern struct {
    +            reserved6712: [6712]u8,
    +            ///  AES hardware key select
    +            HOST_CRYPTOKEY_SEL: mmio.Mmio(packed struct(u32) {
    +                ///  Select the source of the HW key that is used by the AES engine
    +                HOST_CRYPTOKEY_SEL: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Use device root key K_DR from CRYPTOCELL AO power domain
    +                        K_DR = 0x0,
    +                        ///  Use hard-coded RTL key K_PRTL
    +                        K_PRTL = 0x1,
    +                        ///  Use provided session key
    +                        Session = 0x2,
    +                        _,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            reserved6732: [16]u8,
    +            ///  This write-once register is the K_PRTL lock register. When this register is set, K_PRTL can not be used and a zeroed key will be used instead. The value of this register is saved in the CRYPTOCELL AO power domain.
    +            HOST_IOT_KPRTL_LOCK: mmio.Mmio(packed struct(u32) {
    +                ///  This register is the K_PRTL lock register. When this register is set, K_PRTL can not be used and a zeroed key will be used instead. The value of this register is saved in the CRYPTOCELL AO power domain.
    +                HOST_IOT_KPRTL_LOCK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  K_PRTL can be selected for use from register HOST_CRYPTOKEY_SEL
    +                        Disabled = 0x0,
    +                        ///  K_PRTL has been locked until next power-on reset (POR). If K_PRTL is selected anyway, a zeroed key will be used instead.
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  This register holds bits 31:0 of K_DR. The value of this register is saved in the CRYPTOCELL AO power domain. Reading from this address returns the K_DR valid status indicating if K_DR is successfully retained.
    +            HOST_IOT_KDR0: mmio.Mmio(packed struct(u32) {
    +                ///  Write: K_DR bits 31:0 Read: 0x00000000 when 128-bit K_DR key value is not yet retained in the CRYPTOCELL AO power domain Read: 0x00000001 when 128-bit K_DR key value is successfully retained in the CRYPTOCELL AO power domain
    +                HOST_IOT_KDR0: u32,
    +            }),
    +            ///  This register holds bits 63:32 of K_DR. The value of this register is saved in the CRYPTOCELL AO power domain.
    +            HOST_IOT_KDR1: mmio.Mmio(packed struct(u32) {
    +                ///  K_DR bits 63:32
    +                HOST_IOT_KDR1: u32,
    +            }),
    +            ///  This register holds bits 95:64 of K_DR. The value of this register is saved in the CRYPTOCELL AO power domain.
    +            HOST_IOT_KDR2: mmio.Mmio(packed struct(u32) {
    +                ///  K_DR bits 95:64
    +                HOST_IOT_KDR2: u32,
    +            }),
    +            ///  This register holds bits 127:96 of K_DR. The value of this register is saved in the CRYPTOCELL AO power domain.
    +            HOST_IOT_KDR3: mmio.Mmio(packed struct(u32) {
    +                ///  K_DR bits 127:96
    +                HOST_IOT_KDR3: u32,
    +            }),
    +            ///  Controls lifecycle state (LCS) for CRYPTOCELL subsystem
    +            HOST_IOT_LCS: mmio.Mmio(packed struct(u32) {
    +                ///  Lifecycle state value. This field is write-once per reset.
    +                LCS: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        ///  CC310 operates in debug mode
    +                        Debug = 0x0,
    +                        ///  CC310 operates in secure mode
    +                        Secure = 0x2,
    +                        _,
    +                    },
    +                },
    +                reserved8: u5,
    +                ///  This field is read-only and indicates if CRYPTOCELL LCS has been successfully configured since last reset
    +                LCS_IS_VALID: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  A valid LCS is not yet retained in the CRYPTOCELL AO power domain
    +                        Invalid = 0x0,
    +                        ///  A valid LCS is successfully retained in the CRYPTOCELL AO power domain
    +                        Valid = 0x1,
    +                    },
    +                },
    +                padding: u23,
    +            }),
    +        };
    +
    +        ///  External flash interface
    +        pub const QSPI = extern struct {
    +            ///  Activate QSPI interface
    +            TASKS_ACTIVATE: mmio.Mmio(packed struct(u32) {
    +                ///  Activate QSPI interface
    +                TASKS_ACTIVATE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Start transfer from external flash memory to internal RAM
    +            TASKS_READSTART: mmio.Mmio(packed struct(u32) {
    +                ///  Start transfer from external flash memory to internal RAM
    +                TASKS_READSTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Start transfer from internal RAM to external flash memory
    +            TASKS_WRITESTART: mmio.Mmio(packed struct(u32) {
    +                ///  Start transfer from internal RAM to external flash memory
    +                TASKS_WRITESTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Start external flash memory erase operation
    +            TASKS_ERASESTART: mmio.Mmio(packed struct(u32) {
    +                ///  Start external flash memory erase operation
    +                TASKS_ERASESTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Deactivate QSPI interface
    +            TASKS_DEACTIVATE: mmio.Mmio(packed struct(u32) {
    +                ///  Deactivate QSPI interface
    +                TASKS_DEACTIVATE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved256: [236]u8,
    +            ///  QSPI peripheral is ready. This event will be generated as a response to any QSPI task.
    +            EVENTS_READY: mmio.Mmio(packed struct(u32) {
    +                ///  QSPI peripheral is ready. This event will be generated as a response to any QSPI task.
    +                EVENTS_READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved768: [508]u8,
    +            ///  Enable or disable interrupt
    +            INTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable interrupt for event READY
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to enable interrupt for event READY
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to disable interrupt for event READY
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1280: [500]u8,
    +            ///  Enable QSPI peripheral and acquire the pins selected in PSELn registers
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable QSPI
    +                ENABLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable QSPI
    +                        Disabled = 0x0,
    +                        ///  Enable QSPI
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1344: [60]u8,
    +            ///  Address offset into the external memory for Execute in Place operation.
    +            XIPOFFSET: mmio.Mmio(packed struct(u32) {
    +                ///  Address offset into the external memory for Execute in Place operation. Value must be a multiple of 4.
    +                XIPOFFSET: u32,
    +            }),
    +            ///  Interface configuration.
    +            IFCONFIG0: mmio.Mmio(packed struct(u32) {
    +                ///  Configure number of data lines and opcode used for reading.
    +                READOC: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        ///  Single data line SPI. FAST_READ (opcode 0x0B).
    +                        FASTREAD = 0x0,
    +                        ///  Dual data line SPI. READ2O (opcode 0x3B).
    +                        READ2O = 0x1,
    +                        ///  Dual data line SPI. READ2IO (opcode 0xBB).
    +                        READ2IO = 0x2,
    +                        ///  Quad data line SPI. READ4O (opcode 0x6B).
    +                        READ4O = 0x3,
    +                        ///  Quad data line SPI. READ4IO (opcode 0xEB).
    +                        READ4IO = 0x4,
    +                        _,
    +                    },
    +                },
    +                ///  Configure number of data lines and opcode used for writing.
    +                WRITEOC: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        ///  Single data line SPI. PP (opcode 0x02).
    +                        PP = 0x0,
    +                        ///  Dual data line SPI. PP2O (opcode 0xA2).
    +                        PP2O = 0x1,
    +                        ///  Quad data line SPI. PP4O (opcode 0x32).
    +                        PP4O = 0x2,
    +                        ///  Quad data line SPI. PP4IO (opcode 0x38).
    +                        PP4IO = 0x3,
    +                        _,
    +                    },
    +                },
    +                ///  Addressing mode.
    +                ADDRMODE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  24-bit addressing.
    +                        @"24BIT" = 0x0,
    +                        ///  32-bit addressing.
    +                        @"32BIT" = 0x1,
    +                    },
    +                },
    +                ///  Enable deep power-down mode (DPM) feature.
    +                DPMENABLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable DPM feature.
    +                        Disable = 0x0,
    +                        ///  Enable DPM feature.
    +                        Enable = 0x1,
    +                    },
    +                },
    +                reserved12: u4,
    +                ///  Page size for commands PP, PP2O, PP4O and PP4IO.
    +                PPSIZE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  256 bytes.
    +                        @"256Bytes" = 0x0,
    +                        ///  512 bytes.
    +                        @"512Bytes" = 0x1,
    +                    },
    +                },
    +                padding: u19,
    +            }),
    +            reserved1536: [184]u8,
    +            ///  Interface configuration.
    +            IFCONFIG1: mmio.Mmio(packed struct(u32) {
    +                ///  Minimum amount of time that the CSN pin must stay high before it can go low again. Value is specified in number of 16 MHz periods (62.5 ns).
    +                SCKDELAY: u8,
    +                reserved24: u16,
    +                ///  Enter/exit deep power-down mode (DPM) for external flash memory.
    +                DPMEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exit DPM.
    +                        Exit = 0x0,
    +                        ///  Enter DPM.
    +                        Enter = 0x1,
    +                    },
    +                },
    +                ///  Select SPI mode.
    +                SPIMODE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Mode 0: Data are captured on the clock rising edge and data is output on a falling edge. Base level of clock is 0 (CPOL=0, CPHA=0).
    +                        MODE0 = 0x0,
    +                        ///  Mode 3: Data are captured on the clock falling edge and data is output on a rising edge. Base level of clock is 1 (CPOL=1, CPHA=1).
    +                        MODE3 = 0x1,
    +                    },
    +                },
    +                reserved28: u2,
    +                ///  SCK frequency is given as 32 MHz / (SCKFREQ + 1).
    +                SCKFREQ: u4,
    +            }),
    +            ///  Status register.
    +            STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved2: u2,
    +                ///  Deep power-down mode (DPM) status of external flash.
    +                DPM: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  External flash is not in DPM.
    +                        Disabled = 0x0,
    +                        ///  External flash is in DPM.
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Ready status.
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  QSPI peripheral is ready. It is allowed to trigger new tasks, writing custom instructions or enter/exit DPM.
    +                        READY = 0x1,
    +                        ///  QSPI peripheral is busy. It is not allowed to trigger any new tasks, writing custom instructions or enter/exit DPM.
    +                        BUSY = 0x0,
    +                    },
    +                },
    +                reserved24: u20,
    +                ///  Value of external flash device Status Register. When the external flash has two bytes status register this field includes the value of the low byte.
    +                SREG: u8,
    +            }),
    +            reserved1556: [12]u8,
    +            ///  Set the duration required to enter/exit deep power-down mode (DPM).
    +            DPMDUR: mmio.Mmio(packed struct(u32) {
    +                ///  Duration needed by external flash to enter DPM. Duration is given as ENTER * 256 * 62.5 ns.
    +                ENTER: u16,
    +                ///  Duration needed by external flash to exit DPM. Duration is given as EXIT * 256 * 62.5 ns.
    +                EXIT: u16,
    +            }),
    +            reserved1572: [12]u8,
    +            ///  Extended address configuration.
    +            ADDRCONF: mmio.Mmio(packed struct(u32) {
    +                ///  Opcode that enters the 32-bit addressing mode.
    +                OPCODE: u8,
    +                ///  Byte 0 following opcode.
    +                BYTE0: u8,
    +                ///  Byte 1 following byte 0.
    +                BYTE1: u8,
    +                ///  Extended addressing mode.
    +                MODE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Do not send any instruction.
    +                        NoInstr = 0x0,
    +                        ///  Send opcode.
    +                        Opcode = 0x1,
    +                        ///  Send opcode, byte0.
    +                        OpByte0 = 0x2,
    +                        ///  Send opcode, byte0, byte1.
    +                        All = 0x3,
    +                    },
    +                },
    +                ///  Wait for write complete before sending command.
    +                WIPWAIT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  No wait.
    +                        Disable = 0x0,
    +                        ///  Wait.
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Send WREN (write enable opcode 0x06) before instruction.
    +                WREN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Do not send WREN.
    +                        Disable = 0x0,
    +                        ///  Send WREN.
    +                        Enable = 0x1,
    +                    },
    +                },
    +                padding: u4,
    +            }),
    +            reserved1588: [12]u8,
    +            ///  Custom instruction configuration register.
    +            CINSTRCONF: mmio.Mmio(packed struct(u32) {
    +                ///  Opcode of Custom instruction.
    +                OPCODE: u8,
    +                ///  Length of custom instruction in number of bytes.
    +                LENGTH: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  Send opcode only.
    +                        @"1B" = 0x1,
    +                        ///  Send opcode, CINSTRDAT0.BYTE0.
    +                        @"2B" = 0x2,
    +                        ///  Send opcode, CINSTRDAT0.BYTE0 -> CINSTRDAT0.BYTE1.
    +                        @"3B" = 0x3,
    +                        ///  Send opcode, CINSTRDAT0.BYTE0 -> CINSTRDAT0.BYTE2.
    +                        @"4B" = 0x4,
    +                        ///  Send opcode, CINSTRDAT0.BYTE0 -> CINSTRDAT0.BYTE3.
    +                        @"5B" = 0x5,
    +                        ///  Send opcode, CINSTRDAT0.BYTE0 -> CINSTRDAT1.BYTE4.
    +                        @"6B" = 0x6,
    +                        ///  Send opcode, CINSTRDAT0.BYTE0 -> CINSTRDAT1.BYTE5.
    +                        @"7B" = 0x7,
    +                        ///  Send opcode, CINSTRDAT0.BYTE0 -> CINSTRDAT1.BYTE6.
    +                        @"8B" = 0x8,
    +                        ///  Send opcode, CINSTRDAT0.BYTE0 -> CINSTRDAT1.BYTE7.
    +                        @"9B" = 0x9,
    +                        _,
    +                    },
    +                },
    +                ///  Level of the IO2 pin (if connected) during transmission of custom instruction.
    +                LIO2: u1,
    +                ///  Level of the IO3 pin (if connected) during transmission of custom instruction.
    +                LIO3: u1,
    +                ///  Wait for write complete before sending command.
    +                WIPWAIT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  No wait.
    +                        Disable = 0x0,
    +                        ///  Wait.
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Send WREN (write enable opcode 0x06) before instruction.
    +                WREN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Do not send WREN.
    +                        Disable = 0x0,
    +                        ///  Send WREN.
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable long frame mode. When enabled, a custom instruction transaction has to be ended by writing the LFSTOP field.
    +                LFEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Long frame mode disabled
    +                        Disable = 0x0,
    +                        ///  Long frame mode enabled
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Stop (finalize) long frame transaction
    +                LFSTOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Stop
    +                        Stop = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u14,
    +            }),
    +            ///  Custom instruction data register 0.
    +            CINSTRDAT0: mmio.Mmio(packed struct(u32) {
    +                ///  Data byte 0
    +                BYTE0: u8,
    +                ///  Data byte 1
    +                BYTE1: u8,
    +                ///  Data byte 2
    +                BYTE2: u8,
    +                ///  Data byte 3
    +                BYTE3: u8,
    +            }),
    +            ///  Custom instruction data register 1.
    +            CINSTRDAT1: mmio.Mmio(packed struct(u32) {
    +                ///  Data byte 4
    +                BYTE4: u8,
    +                ///  Data byte 5
    +                BYTE5: u8,
    +                ///  Data byte 6
    +                BYTE6: u8,
    +                ///  Data byte 7
    +                BYTE7: u8,
    +            }),
    +            ///  SPI interface timing.
    +            IFTIMING: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  Timing related to sampling of the input serial data. The value of RXDELAY specifies the number of 64 MHz cycles (15.625 ns) delay from the the rising edge of the SPI Clock (SCK) until the input serial data is sampled. As en example, if set to 0 the input serial data is sampled on the rising edge of SCK.
    +                RXDELAY: u3,
    +                padding: u21,
    +            }),
    +        };
    +
    +        ///  Pulse width modulation unit 0
    +        pub const PWM0 = extern struct {
    +            reserved4: [4]u8,
    +            ///  Stops PWM pulse generation on all channels at the end of current PWM period, and stops sequence playback
    +            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    +                ///  Stops PWM pulse generation on all channels at the end of current PWM period, and stops sequence playback
    +                TASKS_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Description collection: Loads the first PWM value on all enabled channels from sequence n, and starts playing that sequence at the rate defined in SEQ[n]REFRESH and/or DECODER.MODE. Causes PWM generation to start if not running.
    +            TASKS_SEQSTART: [2]mmio.Mmio(packed struct(u32) {
    +                ///  Loads the first PWM value on all enabled channels from sequence n, and starts playing that sequence at the rate defined in SEQ[n]REFRESH and/or DECODER.MODE. Causes PWM generation to start if not running.
    +                TASKS_SEQSTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Steps by one value in the current sequence on all enabled channels if DECODER.MODE=NextStep. Does not cause PWM generation to start if not running.
    +            TASKS_NEXTSTEP: mmio.Mmio(packed struct(u32) {
    +                ///  Steps by one value in the current sequence on all enabled channels if DECODER.MODE=NextStep. Does not cause PWM generation to start if not running.
    +                TASKS_NEXTSTEP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved260: [240]u8,
    +            ///  Response to STOP task, emitted when PWM pulses are no longer generated
    +            EVENTS_STOPPED: mmio.Mmio(packed struct(u32) {
    +                ///  Response to STOP task, emitted when PWM pulses are no longer generated
    +                EVENTS_STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Description collection: First PWM period started on sequence n
    +            EVENTS_SEQSTARTED: [2]mmio.Mmio(packed struct(u32) {
    +                ///  First PWM period started on sequence n
    +                EVENTS_SEQSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Description collection: Emitted at end of every sequence n, when last value from RAM has been applied to wave counter
    +            EVENTS_SEQEND: [2]mmio.Mmio(packed struct(u32) {
    +                ///  Emitted at end of every sequence n, when last value from RAM has been applied to wave counter
    +                EVENTS_SEQEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Emitted at the end of each PWM period
    +            EVENTS_PWMPERIODEND: mmio.Mmio(packed struct(u32) {
    +                ///  Emitted at the end of each PWM period
    +                EVENTS_PWMPERIODEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Concatenated sequences have been played the amount of times defined in LOOP.CNT
    +            EVENTS_LOOPSDONE: mmio.Mmio(packed struct(u32) {
    +                ///  Concatenated sequences have been played the amount of times defined in LOOP.CNT
    +                EVENTS_LOOPSDONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved512: [224]u8,
    +            ///  Shortcuts between local events and tasks
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                ///  Shortcut between event SEQEND[0] and task STOP
    +                SEQEND0_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event SEQEND[1] and task STOP
    +                SEQEND1_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event LOOPSDONE and task SEQSTART[0]
    +                LOOPSDONE_SEQSTART0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event LOOPSDONE and task SEQSTART[1]
    +                LOOPSDONE_SEQSTART1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event LOOPSDONE and task STOP
    +                LOOPSDONE_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u27,
    +            }),
    +            reserved768: [252]u8,
    +            ///  Enable or disable interrupt
    +            INTEN: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Enable or disable interrupt for event STOPPED
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event SEQSTARTED[0]
    +                SEQSTARTED0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event SEQSTARTED[1]
    +                SEQSTARTED1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event SEQEND[0]
    +                SEQEND0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event SEQEND[1]
    +                SEQEND1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event PWMPERIODEND
    +                PWMPERIODEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event LOOPSDONE
    +                LOOPSDONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u24,
    +            }),
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to enable interrupt for event STOPPED
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event SEQSTARTED[0]
    +                SEQSTARTED0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event SEQSTARTED[1]
    +                SEQSTARTED1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event SEQEND[0]
    +                SEQEND0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event SEQEND[1]
    +                SEQEND1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event PWMPERIODEND
    +                PWMPERIODEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event LOOPSDONE
    +                LOOPSDONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u24,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to disable interrupt for event STOPPED
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event SEQSTARTED[0]
    +                SEQSTARTED0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event SEQSTARTED[1]
    +                SEQSTARTED1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event SEQEND[0]
    +                SEQEND0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event SEQEND[1]
    +                SEQEND1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event PWMPERIODEND
    +                PWMPERIODEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event LOOPSDONE
    +                LOOPSDONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u24,
    +            }),
    +            reserved1280: [500]u8,
    +            ///  PWM module enable register
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable PWM module
    +                ENABLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Selects operating mode of the wave counter
    +            MODE: mmio.Mmio(packed struct(u32) {
    +                ///  Selects up mode or up-and-down mode for the counter
    +                UPDOWN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Up counter, edge-aligned PWM duty cycle
    +                        Up = 0x0,
    +                        ///  Up and down counter, center-aligned PWM duty cycle
    +                        UpAndDown = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Value up to which the pulse generator counter counts
    +            COUNTERTOP: mmio.Mmio(packed struct(u32) {
    +                ///  Value up to which the pulse generator counter counts. This register is ignored when DECODER.MODE=WaveForm and only values from RAM are used.
    +                COUNTERTOP: u15,
    +                padding: u17,
    +            }),
    +            ///  Configuration for PWM_CLK
    +            PRESCALER: mmio.Mmio(packed struct(u32) {
    +                ///  Prescaler of PWM_CLK
    +                PRESCALER: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        ///  Divide by 1 (16 MHz)
    +                        DIV_1 = 0x0,
    +                        ///  Divide by 2 (8 MHz)
    +                        DIV_2 = 0x1,
    +                        ///  Divide by 4 (4 MHz)
    +                        DIV_4 = 0x2,
    +                        ///  Divide by 8 (2 MHz)
    +                        DIV_8 = 0x3,
    +                        ///  Divide by 16 (1 MHz)
    +                        DIV_16 = 0x4,
    +                        ///  Divide by 32 (500 kHz)
    +                        DIV_32 = 0x5,
    +                        ///  Divide by 64 (250 kHz)
    +                        DIV_64 = 0x6,
    +                        ///  Divide by 128 (125 kHz)
    +                        DIV_128 = 0x7,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            ///  Configuration of the decoder
    +            DECODER: mmio.Mmio(packed struct(u32) {
    +                ///  How a sequence is read from RAM and spread to the compare register
    +                LOAD: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  1st half word (16-bit) used in all PWM channels 0..3
    +                        Common = 0x0,
    +                        ///  1st half word (16-bit) used in channel 0..1; 2nd word in channel 2..3
    +                        Grouped = 0x1,
    +                        ///  1st half word (16-bit) in ch.0; 2nd in ch.1; ...; 4th in ch.3
    +                        Individual = 0x2,
    +                        ///  1st half word (16-bit) in ch.0; 2nd in ch.1; ...; 4th in COUNTERTOP
    +                        WaveForm = 0x3,
    +                    },
    +                },
    +                reserved8: u6,
    +                ///  Selects source for advancing the active sequence
    +                MODE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  SEQ[n].REFRESH is used to determine loading internal compare registers
    +                        RefreshCount = 0x0,
    +                        ///  NEXTSTEP task causes a new value to be loaded to internal compare registers
    +                        NextStep = 0x1,
    +                    },
    +                },
    +                padding: u23,
    +            }),
    +            ///  Number of playbacks of a loop
    +            LOOP: mmio.Mmio(packed struct(u32) {
    +                ///  Number of playbacks of pattern cycles
    +                CNT: packed union {
    +                    raw: u16,
    +                    value: enum(u16) {
    +                        ///  Looping disabled (stop at the end of the sequence)
    +                        Disabled = 0x0,
    +                        _,
    +                    },
    +                },
    +                padding: u16,
    +            }),
    +        };
    +
    +        ///  Universal serial bus device
    +        pub const USBD = extern struct {
    +            reserved4: [4]u8,
    +            ///  Description collection: Captures the EPIN[n].PTR and EPIN[n].MAXCNT registers values, and enables endpoint IN n to respond to traffic from host
    +            TASKS_STARTEPIN: [8]mmio.Mmio(packed struct(u32) {
    +                ///  Captures the EPIN[n].PTR and EPIN[n].MAXCNT registers values, and enables endpoint IN n to respond to traffic from host
    +                TASKS_STARTEPIN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Captures the ISOIN.PTR and ISOIN.MAXCNT registers values, and enables sending data on ISO endpoint
    +            TASKS_STARTISOIN: mmio.Mmio(packed struct(u32) {
    +                ///  Captures the ISOIN.PTR and ISOIN.MAXCNT registers values, and enables sending data on ISO endpoint
    +                TASKS_STARTISOIN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Description collection: Captures the EPOUT[n].PTR and EPOUT[n].MAXCNT registers values, and enables endpoint n to respond to traffic from host
    +            TASKS_STARTEPOUT: [8]mmio.Mmio(packed struct(u32) {
    +                ///  Captures the EPOUT[n].PTR and EPOUT[n].MAXCNT registers values, and enables endpoint n to respond to traffic from host
    +                TASKS_STARTEPOUT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Captures the ISOOUT.PTR and ISOOUT.MAXCNT registers values, and enables receiving of data on ISO endpoint
    +            TASKS_STARTISOOUT: mmio.Mmio(packed struct(u32) {
    +                ///  Captures the ISOOUT.PTR and ISOOUT.MAXCNT registers values, and enables receiving of data on ISO endpoint
    +                TASKS_STARTISOOUT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Allows OUT data stage on control endpoint 0
    +            TASKS_EP0RCVOUT: mmio.Mmio(packed struct(u32) {
    +                ///  Allows OUT data stage on control endpoint 0
    +                TASKS_EP0RCVOUT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Allows status stage on control endpoint 0
    +            TASKS_EP0STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  Allows status stage on control endpoint 0
    +                TASKS_EP0STATUS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Stalls data and status stage on control endpoint 0
    +            TASKS_EP0STALL: mmio.Mmio(packed struct(u32) {
    +                ///  Stalls data and status stage on control endpoint 0
    +                TASKS_EP0STALL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Forces D+ and D- lines into the state defined in the DPDMVALUE register
    +            TASKS_DPDMDRIVE: mmio.Mmio(packed struct(u32) {
    +                ///  Forces D+ and D- lines into the state defined in the DPDMVALUE register
    +                TASKS_DPDMDRIVE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Stops forcing D+ and D- lines into any state (USB engine takes control)
    +            TASKS_DPDMNODRIVE: mmio.Mmio(packed struct(u32) {
    +                ///  Stops forcing D+ and D- lines into any state (USB engine takes control)
    +                TASKS_DPDMNODRIVE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved256: [160]u8,
    +            ///  Signals that a USB reset condition has been detected on USB lines
    +            EVENTS_USBRESET: mmio.Mmio(packed struct(u32) {
    +                ///  Signals that a USB reset condition has been detected on USB lines
    +                EVENTS_USBRESET: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Confirms that the EPIN[n].PTR and EPIN[n].MAXCNT, or EPOUT[n].PTR and EPOUT[n].MAXCNT registers have been captured on all endpoints reported in the EPSTATUS register
    +            EVENTS_STARTED: mmio.Mmio(packed struct(u32) {
    +                ///  Confirms that the EPIN[n].PTR and EPIN[n].MAXCNT, or EPOUT[n].PTR and EPOUT[n].MAXCNT registers have been captured on all endpoints reported in the EPSTATUS register
    +                EVENTS_STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Description collection: The whole EPIN[n] buffer has been consumed. The RAM buffer can be accessed safely by software.
    +            EVENTS_ENDEPIN: [8]mmio.Mmio(packed struct(u32) {
    +                ///  The whole EPIN[n] buffer has been consumed. The RAM buffer can be accessed safely by software.
    +                EVENTS_ENDEPIN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  An acknowledged data transfer has taken place on the control endpoint
    +            EVENTS_EP0DATADONE: mmio.Mmio(packed struct(u32) {
    +                ///  An acknowledged data transfer has taken place on the control endpoint
    +                EVENTS_EP0DATADONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  The whole ISOIN buffer has been consumed. The RAM buffer can be accessed safely by software.
    +            EVENTS_ENDISOIN: mmio.Mmio(packed struct(u32) {
    +                ///  The whole ISOIN buffer has been consumed. The RAM buffer can be accessed safely by software.
    +                EVENTS_ENDISOIN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Description collection: The whole EPOUT[n] buffer has been consumed. The RAM buffer can be accessed safely by software.
    +            EVENTS_ENDEPOUT: [8]mmio.Mmio(packed struct(u32) {
    +                ///  The whole EPOUT[n] buffer has been consumed. The RAM buffer can be accessed safely by software.
    +                EVENTS_ENDEPOUT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  The whole ISOOUT buffer has been consumed. The RAM buffer can be accessed safely by software.
    +            EVENTS_ENDISOOUT: mmio.Mmio(packed struct(u32) {
    +                ///  The whole ISOOUT buffer has been consumed. The RAM buffer can be accessed safely by software.
    +                EVENTS_ENDISOOUT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Signals that a SOF (start of frame) condition has been detected on USB lines
    +            EVENTS_SOF: mmio.Mmio(packed struct(u32) {
    +                ///  Signals that a SOF (start of frame) condition has been detected on USB lines
    +                EVENTS_SOF: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  An event or an error not covered by specific events has occurred. Check EVENTCAUSE register to find the cause.
    +            EVENTS_USBEVENT: mmio.Mmio(packed struct(u32) {
    +                ///  An event or an error not covered by specific events has occurred. Check EVENTCAUSE register to find the cause.
    +                EVENTS_USBEVENT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  A valid SETUP token has been received (and acknowledged) on the control endpoint
    +            EVENTS_EP0SETUP: mmio.Mmio(packed struct(u32) {
    +                ///  A valid SETUP token has been received (and acknowledged) on the control endpoint
    +                EVENTS_EP0SETUP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  A data transfer has occurred on a data endpoint, indicated by the EPDATASTATUS register
    +            EVENTS_EPDATA: mmio.Mmio(packed struct(u32) {
    +                ///  A data transfer has occurred on a data endpoint, indicated by the EPDATASTATUS register
    +                EVENTS_EPDATA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved512: [156]u8,
    +            ///  Shortcuts between local events and tasks
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                ///  Shortcut between event EP0DATADONE and task STARTEPIN[0]
    +                EP0DATADONE_STARTEPIN0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event EP0DATADONE and task STARTEPOUT[0]
    +                EP0DATADONE_STARTEPOUT0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event EP0DATADONE and task EP0STATUS
    +                EP0DATADONE_EP0STATUS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event ENDEPOUT[0] and task EP0STATUS
    +                ENDEPOUT0_EP0STATUS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event ENDEPOUT[0] and task EP0RCVOUT
    +                ENDEPOUT0_EP0RCVOUT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u27,
    +            }),
    +            reserved768: [252]u8,
    +            ///  Enable or disable interrupt
    +            INTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable interrupt for event USBRESET
    +                USBRESET: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event STARTED
    +                STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event ENDEPIN[0]
    +                ENDEPIN0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event ENDEPIN[1]
    +                ENDEPIN1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event ENDEPIN[2]
    +                ENDEPIN2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event ENDEPIN[3]
    +                ENDEPIN3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event ENDEPIN[4]
    +                ENDEPIN4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event ENDEPIN[5]
    +                ENDEPIN5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event ENDEPIN[6]
    +                ENDEPIN6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event ENDEPIN[7]
    +                ENDEPIN7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event EP0DATADONE
    +                EP0DATADONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event ENDISOIN
    +                ENDISOIN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event ENDEPOUT[0]
    +                ENDEPOUT0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event ENDEPOUT[1]
    +                ENDEPOUT1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event ENDEPOUT[2]
    +                ENDEPOUT2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event ENDEPOUT[3]
    +                ENDEPOUT3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event ENDEPOUT[4]
    +                ENDEPOUT4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event ENDEPOUT[5]
    +                ENDEPOUT5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event ENDEPOUT[6]
    +                ENDEPOUT6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event ENDEPOUT[7]
    +                ENDEPOUT7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event ENDISOOUT
    +                ENDISOOUT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event SOF
    +                SOF: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event USBEVENT
    +                USBEVENT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event EP0SETUP
    +                EP0SETUP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event EPDATA
    +                EPDATA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u7,
    +            }),
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to enable interrupt for event USBRESET
    +                USBRESET: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event STARTED
    +                STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event ENDEPIN[0]
    +                ENDEPIN0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event ENDEPIN[1]
    +                ENDEPIN1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event ENDEPIN[2]
    +                ENDEPIN2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event ENDEPIN[3]
    +                ENDEPIN3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event ENDEPIN[4]
    +                ENDEPIN4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event ENDEPIN[5]
    +                ENDEPIN5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event ENDEPIN[6]
    +                ENDEPIN6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event ENDEPIN[7]
    +                ENDEPIN7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event EP0DATADONE
    +                EP0DATADONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event ENDISOIN
    +                ENDISOIN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event ENDEPOUT[0]
    +                ENDEPOUT0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event ENDEPOUT[1]
    +                ENDEPOUT1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event ENDEPOUT[2]
    +                ENDEPOUT2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event ENDEPOUT[3]
    +                ENDEPOUT3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event ENDEPOUT[4]
    +                ENDEPOUT4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event ENDEPOUT[5]
    +                ENDEPOUT5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event ENDEPOUT[6]
    +                ENDEPOUT6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event ENDEPOUT[7]
    +                ENDEPOUT7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event ENDISOOUT
    +                ENDISOOUT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event SOF
    +                SOF: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event USBEVENT
    +                USBEVENT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event EP0SETUP
    +                EP0SETUP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event EPDATA
    +                EPDATA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u7,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to disable interrupt for event USBRESET
    +                USBRESET: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event STARTED
    +                STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event ENDEPIN[0]
    +                ENDEPIN0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event ENDEPIN[1]
    +                ENDEPIN1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event ENDEPIN[2]
    +                ENDEPIN2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event ENDEPIN[3]
    +                ENDEPIN3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event ENDEPIN[4]
    +                ENDEPIN4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event ENDEPIN[5]
    +                ENDEPIN5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event ENDEPIN[6]
    +                ENDEPIN6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event ENDEPIN[7]
    +                ENDEPIN7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event EP0DATADONE
    +                EP0DATADONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event ENDISOIN
    +                ENDISOIN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event ENDEPOUT[0]
    +                ENDEPOUT0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event ENDEPOUT[1]
    +                ENDEPOUT1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event ENDEPOUT[2]
    +                ENDEPOUT2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event ENDEPOUT[3]
    +                ENDEPOUT3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event ENDEPOUT[4]
    +                ENDEPOUT4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event ENDEPOUT[5]
    +                ENDEPOUT5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event ENDEPOUT[6]
    +                ENDEPOUT6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event ENDEPOUT[7]
    +                ENDEPOUT7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event ENDISOOUT
    +                ENDISOOUT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event SOF
    +                SOF: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event USBEVENT
    +                USBEVENT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event EP0SETUP
    +                EP0SETUP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event EPDATA
    +                EPDATA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u7,
    +            }),
    +            reserved1024: [244]u8,
    +            ///  Details on what caused the USBEVENT event
    +            EVENTCAUSE: mmio.Mmio(packed struct(u32) {
    +                ///  CRC error was detected on isochronous OUT endpoint 8. Write '1' to clear.
    +                ISOOUTCRC: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  No error detected
    +                        NotDetected = 0x0,
    +                        ///  Error detected
    +                        Detected = 0x1,
    +                    },
    +                },
    +                reserved8: u7,
    +                ///  Signals that USB lines have been idle long enough for the device to enter suspend. Write '1' to clear.
    +                SUSPEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Suspend not detected
    +                        NotDetected = 0x0,
    +                        ///  Suspend detected
    +                        Detected = 0x1,
    +                    },
    +                },
    +                ///  Signals that a RESUME condition (K state or activity restart) has been detected on USB lines. Write '1' to clear.
    +                RESUME: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Resume not detected
    +                        NotDetected = 0x0,
    +                        ///  Resume detected
    +                        Detected = 0x1,
    +                    },
    +                },
    +                ///  USB MAC has been woken up and operational. Write '1' to clear.
    +                USBWUALLOWED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Wake up not allowed
    +                        NotAllowed = 0x0,
    +                        ///  Wake up allowed
    +                        Allowed = 0x1,
    +                    },
    +                },
    +                ///  USB device is ready for normal operation. Write '1' to clear.
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  USBEVENT was not issued due to USBD peripheral ready
    +                        NotDetected = 0x0,
    +                        ///  USBD peripheral is ready
    +                        Ready = 0x1,
    +                    },
    +                },
    +                padding: u20,
    +            }),
    +            reserved1128: [100]u8,
    +            ///  Provides information on which endpoint's EasyDMA registers have been captured
    +            EPSTATUS: mmio.Mmio(packed struct(u32) {
    +                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    +                EPIN0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  EasyDMA registers have not been captured for this endpoint
    +                        NoData = 0x0,
    +                        ///  EasyDMA registers have been captured for this endpoint
    +                        DataDone = 0x1,
    +                    },
    +                },
    +                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    +                EPIN1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  EasyDMA registers have not been captured for this endpoint
    +                        NoData = 0x0,
    +                        ///  EasyDMA registers have been captured for this endpoint
    +                        DataDone = 0x1,
    +                    },
    +                },
    +                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    +                EPIN2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  EasyDMA registers have not been captured for this endpoint
    +                        NoData = 0x0,
    +                        ///  EasyDMA registers have been captured for this endpoint
    +                        DataDone = 0x1,
    +                    },
    +                },
    +                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    +                EPIN3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  EasyDMA registers have not been captured for this endpoint
    +                        NoData = 0x0,
    +                        ///  EasyDMA registers have been captured for this endpoint
    +                        DataDone = 0x1,
    +                    },
    +                },
    +                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    +                EPIN4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  EasyDMA registers have not been captured for this endpoint
    +                        NoData = 0x0,
    +                        ///  EasyDMA registers have been captured for this endpoint
    +                        DataDone = 0x1,
    +                    },
    +                },
    +                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    +                EPIN5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  EasyDMA registers have not been captured for this endpoint
    +                        NoData = 0x0,
    +                        ///  EasyDMA registers have been captured for this endpoint
    +                        DataDone = 0x1,
    +                    },
    +                },
    +                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    +                EPIN6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  EasyDMA registers have not been captured for this endpoint
    +                        NoData = 0x0,
    +                        ///  EasyDMA registers have been captured for this endpoint
    +                        DataDone = 0x1,
    +                    },
    +                },
    +                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    +                EPIN7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  EasyDMA registers have not been captured for this endpoint
    +                        NoData = 0x0,
    +                        ///  EasyDMA registers have been captured for this endpoint
    +                        DataDone = 0x1,
    +                    },
    +                },
    +                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    +                EPIN8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  EasyDMA registers have not been captured for this endpoint
    +                        NoData = 0x0,
    +                        ///  EasyDMA registers have been captured for this endpoint
    +                        DataDone = 0x1,
    +                    },
    +                },
    +                reserved16: u7,
    +                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    +                EPOUT0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  EasyDMA registers have not been captured for this endpoint
    +                        NoData = 0x0,
    +                        ///  EasyDMA registers have been captured for this endpoint
    +                        DataDone = 0x1,
    +                    },
    +                },
    +                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    +                EPOUT1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  EasyDMA registers have not been captured for this endpoint
    +                        NoData = 0x0,
    +                        ///  EasyDMA registers have been captured for this endpoint
    +                        DataDone = 0x1,
    +                    },
    +                },
    +                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    +                EPOUT2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  EasyDMA registers have not been captured for this endpoint
    +                        NoData = 0x0,
    +                        ///  EasyDMA registers have been captured for this endpoint
    +                        DataDone = 0x1,
    +                    },
    +                },
    +                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    +                EPOUT3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  EasyDMA registers have not been captured for this endpoint
    +                        NoData = 0x0,
    +                        ///  EasyDMA registers have been captured for this endpoint
    +                        DataDone = 0x1,
    +                    },
    +                },
    +                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    +                EPOUT4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  EasyDMA registers have not been captured for this endpoint
    +                        NoData = 0x0,
    +                        ///  EasyDMA registers have been captured for this endpoint
    +                        DataDone = 0x1,
    +                    },
    +                },
    +                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    +                EPOUT5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  EasyDMA registers have not been captured for this endpoint
    +                        NoData = 0x0,
    +                        ///  EasyDMA registers have been captured for this endpoint
    +                        DataDone = 0x1,
    +                    },
    +                },
    +                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    +                EPOUT6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  EasyDMA registers have not been captured for this endpoint
    +                        NoData = 0x0,
    +                        ///  EasyDMA registers have been captured for this endpoint
    +                        DataDone = 0x1,
    +                    },
    +                },
    +                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    +                EPOUT7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  EasyDMA registers have not been captured for this endpoint
    +                        NoData = 0x0,
    +                        ///  EasyDMA registers have been captured for this endpoint
    +                        DataDone = 0x1,
    +                    },
    +                },
    +                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    +                EPOUT8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  EasyDMA registers have not been captured for this endpoint
    +                        NoData = 0x0,
    +                        ///  EasyDMA registers have been captured for this endpoint
    +                        DataDone = 0x1,
    +                    },
    +                },
    +                padding: u7,
    +            }),
    +            ///  Provides information on which endpoint(s) an acknowledged data transfer has occurred (EPDATA event)
    +            EPDATASTATUS: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Acknowledged data transfer on this IN endpoint. Write '1' to clear.
    +                EPIN1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  No acknowledged data transfer on this endpoint
    +                        NotDone = 0x0,
    +                        ///  Acknowledged data transfer on this endpoint has occurred
    +                        DataDone = 0x1,
    +                    },
    +                },
    +                ///  Acknowledged data transfer on this IN endpoint. Write '1' to clear.
    +                EPIN2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  No acknowledged data transfer on this endpoint
    +                        NotDone = 0x0,
    +                        ///  Acknowledged data transfer on this endpoint has occurred
    +                        DataDone = 0x1,
    +                    },
    +                },
    +                ///  Acknowledged data transfer on this IN endpoint. Write '1' to clear.
    +                EPIN3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  No acknowledged data transfer on this endpoint
    +                        NotDone = 0x0,
    +                        ///  Acknowledged data transfer on this endpoint has occurred
    +                        DataDone = 0x1,
    +                    },
    +                },
    +                ///  Acknowledged data transfer on this IN endpoint. Write '1' to clear.
    +                EPIN4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  No acknowledged data transfer on this endpoint
    +                        NotDone = 0x0,
    +                        ///  Acknowledged data transfer on this endpoint has occurred
    +                        DataDone = 0x1,
    +                    },
    +                },
    +                ///  Acknowledged data transfer on this IN endpoint. Write '1' to clear.
    +                EPIN5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  No acknowledged data transfer on this endpoint
    +                        NotDone = 0x0,
    +                        ///  Acknowledged data transfer on this endpoint has occurred
    +                        DataDone = 0x1,
    +                    },
    +                },
    +                ///  Acknowledged data transfer on this IN endpoint. Write '1' to clear.
    +                EPIN6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  No acknowledged data transfer on this endpoint
    +                        NotDone = 0x0,
    +                        ///  Acknowledged data transfer on this endpoint has occurred
    +                        DataDone = 0x1,
    +                    },
    +                },
    +                ///  Acknowledged data transfer on this IN endpoint. Write '1' to clear.
    +                EPIN7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  No acknowledged data transfer on this endpoint
    +                        NotDone = 0x0,
    +                        ///  Acknowledged data transfer on this endpoint has occurred
    +                        DataDone = 0x1,
    +                    },
    +                },
    +                reserved17: u9,
    +                ///  Acknowledged data transfer on this OUT endpoint. Write '1' to clear.
    +                EPOUT1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  No acknowledged data transfer on this endpoint
    +                        NotStarted = 0x0,
    +                        ///  Acknowledged data transfer on this endpoint has occurred
    +                        Started = 0x1,
    +                    },
    +                },
    +                ///  Acknowledged data transfer on this OUT endpoint. Write '1' to clear.
    +                EPOUT2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  No acknowledged data transfer on this endpoint
    +                        NotStarted = 0x0,
    +                        ///  Acknowledged data transfer on this endpoint has occurred
    +                        Started = 0x1,
    +                    },
    +                },
    +                ///  Acknowledged data transfer on this OUT endpoint. Write '1' to clear.
    +                EPOUT3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  No acknowledged data transfer on this endpoint
    +                        NotStarted = 0x0,
    +                        ///  Acknowledged data transfer on this endpoint has occurred
    +                        Started = 0x1,
    +                    },
    +                },
    +                ///  Acknowledged data transfer on this OUT endpoint. Write '1' to clear.
    +                EPOUT4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  No acknowledged data transfer on this endpoint
    +                        NotStarted = 0x0,
    +                        ///  Acknowledged data transfer on this endpoint has occurred
    +                        Started = 0x1,
    +                    },
    +                },
    +                ///  Acknowledged data transfer on this OUT endpoint. Write '1' to clear.
    +                EPOUT5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  No acknowledged data transfer on this endpoint
    +                        NotStarted = 0x0,
    +                        ///  Acknowledged data transfer on this endpoint has occurred
    +                        Started = 0x1,
    +                    },
    +                },
    +                ///  Acknowledged data transfer on this OUT endpoint. Write '1' to clear.
    +                EPOUT6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  No acknowledged data transfer on this endpoint
    +                        NotStarted = 0x0,
    +                        ///  Acknowledged data transfer on this endpoint has occurred
    +                        Started = 0x1,
    +                    },
    +                },
    +                ///  Acknowledged data transfer on this OUT endpoint. Write '1' to clear.
    +                EPOUT7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  No acknowledged data transfer on this endpoint
    +                        NotStarted = 0x0,
    +                        ///  Acknowledged data transfer on this endpoint has occurred
    +                        Started = 0x1,
    +                    },
    +                },
    +                padding: u8,
    +            }),
    +            ///  Device USB address
    +            USBADDR: mmio.Mmio(packed struct(u32) {
    +                ///  Device USB address
    +                ADDR: u7,
    +                padding: u25,
    +            }),
    +            reserved1152: [12]u8,
    +            ///  SETUP data, byte 0, bmRequestType
    +            BMREQUESTTYPE: mmio.Mmio(packed struct(u32) {
    +                ///  Data transfer type
    +                RECIPIENT: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        ///  Device
    +                        Device = 0x0,
    +                        ///  Interface
    +                        Interface = 0x1,
    +                        ///  Endpoint
    +                        Endpoint = 0x2,
    +                        ///  Other
    +                        Other = 0x3,
    +                        _,
    +                    },
    +                },
    +                ///  Data transfer type
    +                TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Standard
    +                        Standard = 0x0,
    +                        ///  Class
    +                        Class = 0x1,
    +                        ///  Vendor
    +                        Vendor = 0x2,
    +                        _,
    +                    },
    +                },
    +                ///  Data transfer direction
    +                DIRECTION: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Host-to-device
    +                        HostToDevice = 0x0,
    +                        ///  Device-to-host
    +                        DeviceToHost = 0x1,
    +                    },
    +                },
    +                padding: u24,
    +            }),
    +            ///  SETUP data, byte 1, bRequest
    +            BREQUEST: mmio.Mmio(packed struct(u32) {
    +                ///  SETUP data, byte 1, bRequest. Values provided for standard requests only, user must implement class and vendor values.
    +                BREQUEST: packed union {
    +                    raw: u8,
    +                    value: enum(u8) {
    +                        ///  Standard request GET_STATUS
    +                        STD_GET_STATUS = 0x0,
    +                        ///  Standard request CLEAR_FEATURE
    +                        STD_CLEAR_FEATURE = 0x1,
    +                        ///  Standard request SET_FEATURE
    +                        STD_SET_FEATURE = 0x3,
    +                        ///  Standard request SET_ADDRESS
    +                        STD_SET_ADDRESS = 0x5,
    +                        ///  Standard request GET_DESCRIPTOR
    +                        STD_GET_DESCRIPTOR = 0x6,
    +                        ///  Standard request SET_DESCRIPTOR
    +                        STD_SET_DESCRIPTOR = 0x7,
    +                        ///  Standard request GET_CONFIGURATION
    +                        STD_GET_CONFIGURATION = 0x8,
    +                        ///  Standard request SET_CONFIGURATION
    +                        STD_SET_CONFIGURATION = 0x9,
    +                        ///  Standard request GET_INTERFACE
    +                        STD_GET_INTERFACE = 0xa,
    +                        ///  Standard request SET_INTERFACE
    +                        STD_SET_INTERFACE = 0xb,
    +                        ///  Standard request SYNCH_FRAME
    +                        STD_SYNCH_FRAME = 0xc,
    +                        _,
    +                    },
    +                },
    +                padding: u24,
    +            }),
    +            ///  SETUP data, byte 2, LSB of wValue
    +            WVALUEL: mmio.Mmio(packed struct(u32) {
    +                ///  SETUP data, byte 2, LSB of wValue
    +                WVALUEL: u8,
    +                padding: u24,
    +            }),
    +            ///  SETUP data, byte 3, MSB of wValue
    +            WVALUEH: mmio.Mmio(packed struct(u32) {
    +                ///  SETUP data, byte 3, MSB of wValue
    +                WVALUEH: u8,
    +                padding: u24,
    +            }),
    +            ///  SETUP data, byte 4, LSB of wIndex
    +            WINDEXL: mmio.Mmio(packed struct(u32) {
    +                ///  SETUP data, byte 4, LSB of wIndex
    +                WINDEXL: u8,
    +                padding: u24,
    +            }),
    +            ///  SETUP data, byte 5, MSB of wIndex
    +            WINDEXH: mmio.Mmio(packed struct(u32) {
    +                ///  SETUP data, byte 5, MSB of wIndex
    +                WINDEXH: u8,
    +                padding: u24,
    +            }),
    +            ///  SETUP data, byte 6, LSB of wLength
    +            WLENGTHL: mmio.Mmio(packed struct(u32) {
    +                ///  SETUP data, byte 6, LSB of wLength
    +                WLENGTHL: u8,
    +                padding: u24,
    +            }),
    +            ///  SETUP data, byte 7, MSB of wLength
    +            WLENGTHH: mmio.Mmio(packed struct(u32) {
    +                ///  SETUP data, byte 7, MSB of wLength
    +                WLENGTHH: u8,
    +                padding: u24,
    +            }),
    +            reserved1280: [96]u8,
    +            ///  Enable USB
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable USB
    +                ENABLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  USB peripheral is disabled
    +                        Disabled = 0x0,
    +                        ///  USB peripheral is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Control of the USB pull-up
    +            USBPULLUP: mmio.Mmio(packed struct(u32) {
    +                ///  Control of the USB pull-up on the D+ line
    +                CONNECT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pull-up is disconnected
    +                        Disabled = 0x0,
    +                        ///  Pull-up is connected to D+
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  State D+ and D- lines will be forced into by the DPDMDRIVE task. The DPDMNODRIVE task reverts the control of the lines to MAC IP (no forcing).
    +            DPDMVALUE: mmio.Mmio(packed struct(u32) {
    +                ///  State D+ and D- lines will be forced into by the DPDMDRIVE task
    +                STATE: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        ///  D+ forced low, D- forced high (K state) for a timing preset in hardware (50 us or 5 ms, depending on bus state)
    +                        Resume = 0x1,
    +                        ///  D+ forced high, D- forced low (J state)
    +                        J = 0x2,
    +                        ///  D+ forced low, D- forced high (K state)
    +                        K = 0x4,
    +                        _,
    +                    },
    +                },
    +                padding: u27,
    +            }),
    +            ///  Data toggle control and status
    +            DTOGGLE: mmio.Mmio(packed struct(u32) {
    +                ///  Select bulk endpoint number
    +                EP: u3,
    +                reserved7: u4,
    +                ///  Selects IN or OUT endpoint
    +                IO: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Selects OUT endpoint
    +                        Out = 0x0,
    +                        ///  Selects IN endpoint
    +                        In = 0x1,
    +                    },
    +                },
    +                ///  Data toggle value
    +                VALUE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  No action on data toggle when writing the register with this value
    +                        Nop = 0x0,
    +                        ///  Data toggle is DATA0 on endpoint set by EP and IO
    +                        Data0 = 0x1,
    +                        ///  Data toggle is DATA1 on endpoint set by EP and IO
    +                        Data1 = 0x2,
    +                        _,
    +                    },
    +                },
    +                padding: u22,
    +            }),
    +            ///  Endpoint IN enable
    +            EPINEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable IN endpoint 0
    +                IN0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable endpoint IN 0 (no response to IN tokens)
    +                        Disable = 0x0,
    +                        ///  Enable endpoint IN 0 (response to IN tokens)
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable IN endpoint 1
    +                IN1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable endpoint IN 1 (no response to IN tokens)
    +                        Disable = 0x0,
    +                        ///  Enable endpoint IN 1 (response to IN tokens)
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable IN endpoint 2
    +                IN2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable endpoint IN 2 (no response to IN tokens)
    +                        Disable = 0x0,
    +                        ///  Enable endpoint IN 2 (response to IN tokens)
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable IN endpoint 3
    +                IN3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable endpoint IN 3 (no response to IN tokens)
    +                        Disable = 0x0,
    +                        ///  Enable endpoint IN 3 (response to IN tokens)
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable IN endpoint 4
    +                IN4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable endpoint IN 4 (no response to IN tokens)
    +                        Disable = 0x0,
    +                        ///  Enable endpoint IN 4 (response to IN tokens)
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable IN endpoint 5
    +                IN5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable endpoint IN 5 (no response to IN tokens)
    +                        Disable = 0x0,
    +                        ///  Enable endpoint IN 5 (response to IN tokens)
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable IN endpoint 6
    +                IN6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable endpoint IN 6 (no response to IN tokens)
    +                        Disable = 0x0,
    +                        ///  Enable endpoint IN 6 (response to IN tokens)
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable IN endpoint 7
    +                IN7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable endpoint IN 7 (no response to IN tokens)
    +                        Disable = 0x0,
    +                        ///  Enable endpoint IN 7 (response to IN tokens)
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable ISO IN endpoint
    +                ISOIN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable ISO IN endpoint 8
    +                        Disable = 0x0,
    +                        ///  Enable ISO IN endpoint 8
    +                        Enable = 0x1,
    +                    },
    +                },
    +                padding: u23,
    +            }),
    +            ///  Endpoint OUT enable
    +            EPOUTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable OUT endpoint 0
    +                OUT0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable endpoint OUT 0 (no response to OUT tokens)
    +                        Disable = 0x0,
    +                        ///  Enable endpoint OUT 0 (response to OUT tokens)
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable OUT endpoint 1
    +                OUT1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable endpoint OUT 1 (no response to OUT tokens)
    +                        Disable = 0x0,
    +                        ///  Enable endpoint OUT 1 (response to OUT tokens)
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable OUT endpoint 2
    +                OUT2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable endpoint OUT 2 (no response to OUT tokens)
    +                        Disable = 0x0,
    +                        ///  Enable endpoint OUT 2 (response to OUT tokens)
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable OUT endpoint 3
    +                OUT3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable endpoint OUT 3 (no response to OUT tokens)
    +                        Disable = 0x0,
    +                        ///  Enable endpoint OUT 3 (response to OUT tokens)
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable OUT endpoint 4
    +                OUT4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable endpoint OUT 4 (no response to OUT tokens)
    +                        Disable = 0x0,
    +                        ///  Enable endpoint OUT 4 (response to OUT tokens)
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable OUT endpoint 5
    +                OUT5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable endpoint OUT 5 (no response to OUT tokens)
    +                        Disable = 0x0,
    +                        ///  Enable endpoint OUT 5 (response to OUT tokens)
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable OUT endpoint 6
    +                OUT6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable endpoint OUT 6 (no response to OUT tokens)
    +                        Disable = 0x0,
    +                        ///  Enable endpoint OUT 6 (response to OUT tokens)
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable OUT endpoint 7
    +                OUT7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable endpoint OUT 7 (no response to OUT tokens)
    +                        Disable = 0x0,
    +                        ///  Enable endpoint OUT 7 (response to OUT tokens)
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable ISO OUT endpoint 8
    +                ISOOUT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable ISO OUT endpoint 8
    +                        Disable = 0x0,
    +                        ///  Enable ISO OUT endpoint 8
    +                        Enable = 0x1,
    +                    },
    +                },
    +                padding: u23,
    +            }),
    +            ///  STALL endpoints
    +            EPSTALL: mmio.Mmio(packed struct(u32) {
    +                ///  Select endpoint number
    +                EP: u3,
    +                reserved7: u4,
    +                ///  Selects IN or OUT endpoint
    +                IO: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Selects OUT endpoint
    +                        Out = 0x0,
    +                        ///  Selects IN endpoint
    +                        In = 0x1,
    +                    },
    +                },
    +                ///  Stall selected endpoint
    +                STALL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Don't stall selected endpoint
    +                        UnStall = 0x0,
    +                        ///  Stall selected endpoint
    +                        Stall = 0x1,
    +                    },
    +                },
    +                padding: u23,
    +            }),
    +            ///  Controls the split of ISO buffers
    +            ISOSPLIT: mmio.Mmio(packed struct(u32) {
    +                ///  Controls the split of ISO buffers
    +                SPLIT: packed union {
    +                    raw: u16,
    +                    value: enum(u16) {
    +                        ///  Full buffer dedicated to either iso IN or OUT
    +                        OneDir = 0x0,
    +                        ///  Lower half for IN, upper half for OUT
    +                        HalfIN = 0x80,
    +                        _,
    +                    },
    +                },
    +                padding: u16,
    +            }),
    +            ///  Returns the current value of the start of frame counter
    +            FRAMECNTR: mmio.Mmio(packed struct(u32) {
    +                ///  Returns the current value of the start of frame counter
    +                FRAMECNTR: u11,
    +                padding: u21,
    +            }),
    +            reserved1324: [8]u8,
    +            ///  Controls USBD peripheral low power mode during USB suspend
    +            LOWPOWER: mmio.Mmio(packed struct(u32) {
    +                ///  Controls USBD peripheral low-power mode during USB suspend
    +                LOWPOWER: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Software must write this value to exit low power mode and before performing a remote wake-up
    +                        ForceNormal = 0x0,
    +                        ///  Software must write this value to enter low power mode after DMA and software have finished interacting with the USB peripheral
    +                        LowPower = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Controls the response of the ISO IN endpoint to an IN token when no data is ready to be sent
    +            ISOINCONFIG: mmio.Mmio(packed struct(u32) {
    +                ///  Controls the response of the ISO IN endpoint to an IN token when no data is ready to be sent
    +                RESPONSE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Endpoint does not respond in that case
    +                        NoResp = 0x0,
    +                        ///  Endpoint responds with a zero-length data packet in that case
    +                        ZeroData = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +        };
    +
    +        ///  NFC-A compatible radio
    +        pub const NFCT = extern struct {
    +            ///  Activate NFCT peripheral for incoming and outgoing frames, change state to activated
    +            TASKS_ACTIVATE: mmio.Mmio(packed struct(u32) {
    +                ///  Activate NFCT peripheral for incoming and outgoing frames, change state to activated
    +                TASKS_ACTIVATE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Disable NFCT peripheral
    +            TASKS_DISABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Disable NFCT peripheral
    +                TASKS_DISABLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Enable NFC sense field mode, change state to sense mode
    +            TASKS_SENSE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable NFC sense field mode, change state to sense mode
    +                TASKS_SENSE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Start transmission of an outgoing frame, change state to transmit
    +            TASKS_STARTTX: mmio.Mmio(packed struct(u32) {
    +                ///  Start transmission of an outgoing frame, change state to transmit
    +                TASKS_STARTTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved28: [12]u8,
    +            ///  Initializes the EasyDMA for receive.
    +            TASKS_ENABLERXDATA: mmio.Mmio(packed struct(u32) {
    +                ///  Initializes the EasyDMA for receive.
    +                TASKS_ENABLERXDATA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved36: [4]u8,
    +            ///  Force state machine to IDLE state
    +            TASKS_GOIDLE: mmio.Mmio(packed struct(u32) {
    +                ///  Force state machine to IDLE state
    +                TASKS_GOIDLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Force state machine to SLEEP_A state
    +            TASKS_GOSLEEP: mmio.Mmio(packed struct(u32) {
    +                ///  Force state machine to SLEEP_A state
    +                TASKS_GOSLEEP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved256: [212]u8,
    +            ///  The NFCT peripheral is ready to receive and send frames
    +            EVENTS_READY: mmio.Mmio(packed struct(u32) {
    +                ///  The NFCT peripheral is ready to receive and send frames
    +                EVENTS_READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Remote NFC field detected
    +            EVENTS_FIELDDETECTED: mmio.Mmio(packed struct(u32) {
    +                ///  Remote NFC field detected
    +                EVENTS_FIELDDETECTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Remote NFC field lost
    +            EVENTS_FIELDLOST: mmio.Mmio(packed struct(u32) {
    +                ///  Remote NFC field lost
    +                EVENTS_FIELDLOST: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Marks the start of the first symbol of a transmitted frame
    +            EVENTS_TXFRAMESTART: mmio.Mmio(packed struct(u32) {
    +                ///  Marks the start of the first symbol of a transmitted frame
    +                EVENTS_TXFRAMESTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Marks the end of the last transmitted on-air symbol of a frame
    +            EVENTS_TXFRAMEEND: mmio.Mmio(packed struct(u32) {
    +                ///  Marks the end of the last transmitted on-air symbol of a frame
    +                EVENTS_TXFRAMEEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Marks the end of the first symbol of a received frame
    +            EVENTS_RXFRAMESTART: mmio.Mmio(packed struct(u32) {
    +                ///  Marks the end of the first symbol of a received frame
    +                EVENTS_RXFRAMESTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Received data has been checked (CRC, parity) and transferred to RAM, and EasyDMA has ended accessing the RX buffer
    +            EVENTS_RXFRAMEEND: mmio.Mmio(packed struct(u32) {
    +                ///  Received data has been checked (CRC, parity) and transferred to RAM, and EasyDMA has ended accessing the RX buffer
    +                EVENTS_RXFRAMEEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  NFC error reported. The ERRORSTATUS register contains details on the source of the error.
    +            EVENTS_ERROR: mmio.Mmio(packed struct(u32) {
    +                ///  NFC error reported. The ERRORSTATUS register contains details on the source of the error.
    +                EVENTS_ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved296: [8]u8,
    +            ///  NFC RX frame error reported. The FRAMESTATUS.RX register contains details on the source of the error.
    +            EVENTS_RXERROR: mmio.Mmio(packed struct(u32) {
    +                ///  NFC RX frame error reported. The FRAMESTATUS.RX register contains details on the source of the error.
    +                EVENTS_RXERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  RX buffer (as defined by PACKETPTR and MAXLEN) in Data RAM full.
    +            EVENTS_ENDRX: mmio.Mmio(packed struct(u32) {
    +                ///  RX buffer (as defined by PACKETPTR and MAXLEN) in Data RAM full.
    +                EVENTS_ENDRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Transmission of data in RAM has ended, and EasyDMA has ended accessing the TX buffer
    +            EVENTS_ENDTX: mmio.Mmio(packed struct(u32) {
    +                ///  Transmission of data in RAM has ended, and EasyDMA has ended accessing the TX buffer
    +                EVENTS_ENDTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved312: [4]u8,
    +            ///  Auto collision resolution process has started
    +            EVENTS_AUTOCOLRESSTARTED: mmio.Mmio(packed struct(u32) {
    +                ///  Auto collision resolution process has started
    +                EVENTS_AUTOCOLRESSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved328: [12]u8,
    +            ///  NFC auto collision resolution error reported.
    +            EVENTS_COLLISION: mmio.Mmio(packed struct(u32) {
    +                ///  NFC auto collision resolution error reported.
    +                EVENTS_COLLISION: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  NFC auto collision resolution successfully completed
    +            EVENTS_SELECTED: mmio.Mmio(packed struct(u32) {
    +                ///  NFC auto collision resolution successfully completed
    +                EVENTS_SELECTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  EasyDMA is ready to receive or send frames.
    +            EVENTS_STARTED: mmio.Mmio(packed struct(u32) {
    +                ///  EasyDMA is ready to receive or send frames.
    +                EVENTS_STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved512: [172]u8,
    +            ///  Shortcuts between local events and tasks
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                ///  Shortcut between event FIELDDETECTED and task ACTIVATE
    +                FIELDDETECTED_ACTIVATE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event FIELDLOST and task SENSE
    +                FIELDLOST_SENSE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved5: u3,
    +                ///  Shortcut between event TXFRAMEEND and task ENABLERXDATA
    +                TXFRAMEEND_ENABLERXDATA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u26,
    +            }),
    +            reserved768: [252]u8,
    +            ///  Enable or disable interrupt
    +            INTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable interrupt for event READY
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event FIELDDETECTED
    +                FIELDDETECTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event FIELDLOST
    +                FIELDLOST: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event TXFRAMESTART
    +                TXFRAMESTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event TXFRAMEEND
    +                TXFRAMEEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event RXFRAMESTART
    +                RXFRAMESTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event RXFRAMEEND
    +                RXFRAMEEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event ERROR
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved10: u2,
    +                ///  Enable or disable interrupt for event RXERROR
    +                RXERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event ENDRX
    +                ENDRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event ENDTX
    +                ENDTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved14: u1,
    +                ///  Enable or disable interrupt for event AUTOCOLRESSTARTED
    +                AUTOCOLRESSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved18: u3,
    +                ///  Enable or disable interrupt for event COLLISION
    +                COLLISION: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event SELECTED
    +                SELECTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event STARTED
    +                STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u11,
    +            }),
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to enable interrupt for event READY
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event FIELDDETECTED
    +                FIELDDETECTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event FIELDLOST
    +                FIELDLOST: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event TXFRAMESTART
    +                TXFRAMESTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event TXFRAMEEND
    +                TXFRAMEEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event RXFRAMESTART
    +                RXFRAMESTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event RXFRAMEEND
    +                RXFRAMEEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event ERROR
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved10: u2,
    +                ///  Write '1' to enable interrupt for event RXERROR
    +                RXERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event ENDRX
    +                ENDRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event ENDTX
    +                ENDTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved14: u1,
    +                ///  Write '1' to enable interrupt for event AUTOCOLRESSTARTED
    +                AUTOCOLRESSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved18: u3,
    +                ///  Write '1' to enable interrupt for event COLLISION
    +                COLLISION: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event SELECTED
    +                SELECTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event STARTED
    +                STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u11,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to disable interrupt for event READY
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event FIELDDETECTED
    +                FIELDDETECTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event FIELDLOST
    +                FIELDLOST: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event TXFRAMESTART
    +                TXFRAMESTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event TXFRAMEEND
    +                TXFRAMEEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event RXFRAMESTART
    +                RXFRAMESTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event RXFRAMEEND
    +                RXFRAMEEND: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event ERROR
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved10: u2,
    +                ///  Write '1' to disable interrupt for event RXERROR
    +                RXERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event ENDRX
    +                ENDRX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event ENDTX
    +                ENDTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved14: u1,
    +                ///  Write '1' to disable interrupt for event AUTOCOLRESSTARTED
    +                AUTOCOLRESSTARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved18: u3,
    +                ///  Write '1' to disable interrupt for event COLLISION
    +                COLLISION: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event SELECTED
    +                SELECTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event STARTED
    +                STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u11,
    +            }),
    +            reserved1028: [248]u8,
    +            ///  NFC Error Status register
    +            ERRORSTATUS: mmio.Mmio(packed struct(u32) {
    +                ///  No STARTTX task triggered before expiration of the time set in FRAMEDELAYMAX
    +                FRAMEDELAYTIMEOUT: u1,
    +                padding: u31,
    +            }),
    +            reserved1040: [8]u8,
    +            ///  NfcTag state register
    +            NFCTAGSTATE: mmio.Mmio(packed struct(u32) {
    +                ///  NfcTag state
    +                NFCTAGSTATE: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        ///  Disabled or sense
    +                        Disabled = 0x0,
    +                        ///  RampUp
    +                        RampUp = 0x2,
    +                        ///  Idle
    +                        Idle = 0x3,
    +                        ///  Receive
    +                        Receive = 0x4,
    +                        ///  FrameDelay
    +                        FrameDelay = 0x5,
    +                        ///  Transmit
    +                        Transmit = 0x6,
    +                        _,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            reserved1056: [12]u8,
    +            ///  Sleep state during automatic collision resolution
    +            SLEEPSTATE: mmio.Mmio(packed struct(u32) {
    +                ///  Reflects the sleep state during automatic collision resolution. Set to IDLE by a GOIDLE task. Set to SLEEP_A when a valid SLEEP_REQ frame is received or by a GOSLEEP task.
    +                SLEEPSTATE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  State is IDLE.
    +                        Idle = 0x0,
    +                        ///  State is SLEEP_A.
    +                        SleepA = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1084: [24]u8,
    +            ///  Indicates the presence or not of a valid field
    +            FIELDPRESENT: mmio.Mmio(packed struct(u32) {
    +                ///  Indicates if a valid field is present. Available only in the activated state.
    +                FIELDPRESENT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  No valid field detected
    +                        NoField = 0x0,
    +                        ///  Valid field detected
    +                        FieldPresent = 0x1,
    +                    },
    +                },
    +                ///  Indicates if the low level has locked to the field
    +                LOCKDETECT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Not locked to field
    +                        NotLocked = 0x0,
    +                        ///  Locked to field
    +                        Locked = 0x1,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            reserved1284: [196]u8,
    +            ///  Minimum frame delay
    +            FRAMEDELAYMIN: mmio.Mmio(packed struct(u32) {
    +                ///  Minimum frame delay in number of 13.56 MHz clocks
    +                FRAMEDELAYMIN: u16,
    +                padding: u16,
    +            }),
    +            ///  Maximum frame delay
    +            FRAMEDELAYMAX: mmio.Mmio(packed struct(u32) {
    +                ///  Maximum frame delay in number of 13.56 MHz clocks
    +                FRAMEDELAYMAX: u20,
    +                padding: u12,
    +            }),
    +            ///  Configuration register for the Frame Delay Timer
    +            FRAMEDELAYMODE: mmio.Mmio(packed struct(u32) {
    +                ///  Configuration register for the Frame Delay Timer
    +                FRAMEDELAYMODE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Transmission is independent of frame timer and will start when the STARTTX task is triggered. No timeout.
    +                        FreeRun = 0x0,
    +                        ///  Frame is transmitted between FRAMEDELAYMIN and FRAMEDELAYMAX
    +                        Window = 0x1,
    +                        ///  Frame is transmitted exactly at FRAMEDELAYMAX
    +                        ExactVal = 0x2,
    +                        ///  Frame is transmitted on a bit grid between FRAMEDELAYMIN and FRAMEDELAYMAX
    +                        WindowGrid = 0x3,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            ///  Packet pointer for TXD and RXD data storage in Data RAM
    +            PACKETPTR: mmio.Mmio(packed struct(u32) {
    +                ///  Packet pointer for TXD and RXD data storage in Data RAM. This address is a byte-aligned RAM address.
    +                PTR: u32,
    +            }),
    +            ///  Size of the RAM buffer allocated to TXD and RXD data storage each
    +            MAXLEN: mmio.Mmio(packed struct(u32) {
    +                ///  Size of the RAM buffer allocated to TXD and RXD data storage each
    +                MAXLEN: u9,
    +                padding: u23,
    +            }),
    +            reserved1424: [120]u8,
    +            ///  Last NFCID1 part (4, 7 or 10 bytes ID)
    +            NFCID1_LAST: mmio.Mmio(packed struct(u32) {
    +                ///  NFCID1 byte Z (very last byte sent)
    +                NFCID1_Z: u8,
    +                ///  NFCID1 byte Y
    +                NFCID1_Y: u8,
    +                ///  NFCID1 byte X
    +                NFCID1_X: u8,
    +                ///  NFCID1 byte W
    +                NFCID1_W: u8,
    +            }),
    +            ///  Second last NFCID1 part (7 or 10 bytes ID)
    +            NFCID1_2ND_LAST: mmio.Mmio(packed struct(u32) {
    +                ///  NFCID1 byte V
    +                NFCID1_V: u8,
    +                ///  NFCID1 byte U
    +                NFCID1_U: u8,
    +                ///  NFCID1 byte T
    +                NFCID1_T: u8,
    +                padding: u8,
    +            }),
    +            ///  Third last NFCID1 part (10 bytes ID)
    +            NFCID1_3RD_LAST: mmio.Mmio(packed struct(u32) {
    +                ///  NFCID1 byte S
    +                NFCID1_S: u8,
    +                ///  NFCID1 byte R
    +                NFCID1_R: u8,
    +                ///  NFCID1 byte Q
    +                NFCID1_Q: u8,
    +                padding: u8,
    +            }),
    +            ///  Controls the auto collision resolution function. This setting must be done before the NFCT peripheral is enabled.
    +            AUTOCOLRESCONFIG: mmio.Mmio(packed struct(u32) {
    +                ///  Enables/disables auto collision resolution
    +                MODE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Auto collision resolution enabled
    +                        Enabled = 0x0,
    +                        ///  Auto collision resolution disabled
    +                        Disabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  NFC-A SENS_RES auto-response settings
    +            SENSRES: mmio.Mmio(packed struct(u32) {
    +                ///  Bit frame SDD as defined by the b5:b1 of byte 1 in SENS_RES response in the NFC Forum, NFC Digital Protocol Technical Specification
    +                BITFRAMESDD: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        ///  SDD pattern 00000
    +                        SDD00000 = 0x0,
    +                        ///  SDD pattern 00001
    +                        SDD00001 = 0x1,
    +                        ///  SDD pattern 00010
    +                        SDD00010 = 0x2,
    +                        ///  SDD pattern 00100
    +                        SDD00100 = 0x4,
    +                        ///  SDD pattern 01000
    +                        SDD01000 = 0x8,
    +                        ///  SDD pattern 10000
    +                        SDD10000 = 0x10,
    +                        _,
    +                    },
    +                },
    +                ///  Reserved for future use. Shall be 0.
    +                RFU5: u1,
    +                ///  NFCID1 size. This value is used by the auto collision resolution engine.
    +                NFCIDSIZE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  NFCID1 size: single (4 bytes)
    +                        NFCID1Single = 0x0,
    +                        ///  NFCID1 size: double (7 bytes)
    +                        NFCID1Double = 0x1,
    +                        ///  NFCID1 size: triple (10 bytes)
    +                        NFCID1Triple = 0x2,
    +                        _,
    +                    },
    +                },
    +                ///  Tag platform configuration as defined by the b4:b1 of byte 2 in SENS_RES response in the NFC Forum, NFC Digital Protocol Technical Specification
    +                PLATFCONFIG: u4,
    +                ///  Reserved for future use. Shall be 0.
    +                RFU74: u4,
    +                padding: u16,
    +            }),
    +            ///  NFC-A SEL_RES auto-response settings
    +            SELRES: mmio.Mmio(packed struct(u32) {
    +                ///  Reserved for future use. Shall be 0.
    +                RFU10: u2,
    +                ///  Cascade as defined by the b3 of SEL_RES response in the NFC Forum, NFC Digital Protocol Technical Specification (controlled by hardware, shall be 0)
    +                CASCADE: u1,
    +                ///  Reserved for future use. Shall be 0.
    +                RFU43: u2,
    +                ///  Protocol as defined by the b7:b6 of SEL_RES response in the NFC Forum, NFC Digital Protocol Technical Specification
    +                PROTOCOL: u2,
    +                ///  Reserved for future use. Shall be 0.
    +                RFU7: u1,
    +                padding: u24,
    +            }),
    +        };
    +
    +        ///  GPIO Tasks and Events
    +        pub const GPIOTE = extern struct {
    +            ///  Description collection: Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is configured in CONFIG[n].POLARITY.
    +            TASKS_OUT: [8]mmio.Mmio(packed struct(u32) {
    +                ///  Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is configured in CONFIG[n].POLARITY.
    +                TASKS_OUT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved48: [16]u8,
    +            ///  Description collection: Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is to set it high.
    +            TASKS_SET: [8]mmio.Mmio(packed struct(u32) {
    +                ///  Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is to set it high.
    +                TASKS_SET: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved96: [16]u8,
    +            ///  Description collection: Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is to set it low.
    +            TASKS_CLR: [8]mmio.Mmio(packed struct(u32) {
    +                ///  Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is to set it low.
    +                TASKS_CLR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved256: [128]u8,
    +            ///  Description collection: Event generated from pin specified in CONFIG[n].PSEL
    +            EVENTS_IN: [8]mmio.Mmio(packed struct(u32) {
    +                ///  Event generated from pin specified in CONFIG[n].PSEL
    +                EVENTS_IN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved380: [92]u8,
    +            ///  Event generated from multiple input GPIO pins with SENSE mechanism enabled
    +            EVENTS_PORT: mmio.Mmio(packed struct(u32) {
    +                ///  Event generated from multiple input GPIO pins with SENSE mechanism enabled
    +                EVENTS_PORT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved772: [388]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to enable interrupt for event IN[0]
    +                IN0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event IN[1]
    +                IN1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event IN[2]
    +                IN2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event IN[3]
    +                IN3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event IN[4]
    +                IN4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event IN[5]
    +                IN5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event IN[6]
    +                IN6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event IN[7]
    +                IN7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved31: u23,
    +                ///  Write '1' to enable interrupt for event PORT
    +                PORT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to disable interrupt for event IN[0]
    +                IN0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event IN[1]
    +                IN1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event IN[2]
    +                IN2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event IN[3]
    +                IN3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event IN[4]
    +                IN4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event IN[5]
    +                IN5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event IN[6]
    +                IN6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event IN[7]
    +                IN7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved31: u23,
    +                ///  Write '1' to disable interrupt for event PORT
    +                PORT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +            }),
    +            reserved1296: [516]u8,
    +            ///  Description collection: Configuration for OUT[n], SET[n] and CLR[n] tasks and IN[n] event
    +            CONFIG: [8]mmio.Mmio(packed struct(u32) {
    +                ///  Mode
    +                MODE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Disabled. Pin specified by PSEL will not be acquired by the GPIOTE module.
    +                        Disabled = 0x0,
    +                        ///  Event mode
    +                        Event = 0x1,
    +                        ///  Task mode
    +                        Task = 0x3,
    +                        _,
    +                    },
    +                },
    +                reserved8: u6,
    +                ///  GPIO number associated with SET[n], CLR[n] and OUT[n] tasks and IN[n] event
    +                PSEL: u5,
    +                ///  Port number
    +                PORT: u1,
    +                reserved16: u2,
    +                ///  When In task mode: Operation to be performed on output when OUT[n] task is triggered. When In event mode: Operation on input that shall trigger IN[n] event.
    +                POLARITY: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Task mode: No effect on pin from OUT[n] task. Event mode: no IN[n] event generated on pin activity.
    +                        None = 0x0,
    +                        ///  Task mode: Set pin from OUT[n] task. Event mode: Generate IN[n] event when rising edge on pin.
    +                        LoToHi = 0x1,
    +                        ///  Task mode: Clear pin from OUT[n] task. Event mode: Generate IN[n] event when falling edge on pin.
    +                        HiToLo = 0x2,
    +                        ///  Task mode: Toggle pin from OUT[n]. Event mode: Generate IN[n] when any change on pin.
    +                        Toggle = 0x3,
    +                    },
    +                },
    +                reserved20: u2,
    +                ///  When in task mode: Initial value of the output when the GPIOTE channel is configured. When in event mode: No effect.
    +                OUTINIT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Task mode: Initial value of pin before task triggering is low
    +                        Low = 0x0,
    +                        ///  Task mode: Initial value of pin before task triggering is high
    +                        High = 0x1,
    +                    },
    +                },
    +                padding: u11,
    +            }),
    +        };
    +
    +        ///  Successive approximation register (SAR) analog-to-digital converter
    +        pub const SAADC = extern struct {
    +            ///  Starts the SAADC and prepares the result buffer in RAM
    +            TASKS_START: mmio.Mmio(packed struct(u32) {
    +                ///  Starts the SAADC and prepares the result buffer in RAM
    +                TASKS_START: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Takes one SAADC sample
    +            TASKS_SAMPLE: mmio.Mmio(packed struct(u32) {
    +                ///  Takes one SAADC sample
    +                TASKS_SAMPLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Stops the SAADC and terminates all on-going conversions
    +            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    +                ///  Stops the SAADC and terminates all on-going conversions
    +                TASKS_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Starts offset auto-calibration
    +            TASKS_CALIBRATEOFFSET: mmio.Mmio(packed struct(u32) {
    +                ///  Starts offset auto-calibration
    +                TASKS_CALIBRATEOFFSET: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved256: [240]u8,
    +            ///  The SAADC has started
    +            EVENTS_STARTED: mmio.Mmio(packed struct(u32) {
    +                ///  The SAADC has started
    +                EVENTS_STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  The SAADC has filled up the result buffer
    +            EVENTS_END: mmio.Mmio(packed struct(u32) {
    +                ///  The SAADC has filled up the result buffer
    +                EVENTS_END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  A conversion task has been completed. Depending on the configuration, multiple conversions might be needed for a result to be transferred to RAM.
    +            EVENTS_DONE: mmio.Mmio(packed struct(u32) {
    +                ///  A conversion task has been completed. Depending on the configuration, multiple conversions might be needed for a result to be transferred to RAM.
    +                EVENTS_DONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Result ready for transfer to RAM
    +            EVENTS_RESULTDONE: mmio.Mmio(packed struct(u32) {
    +                ///  Result ready for transfer to RAM
    +                EVENTS_RESULTDONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Calibration is complete
    +            EVENTS_CALIBRATEDONE: mmio.Mmio(packed struct(u32) {
    +                ///  Calibration is complete
    +                EVENTS_CALIBRATEDONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  The SAADC has stopped
    +            EVENTS_STOPPED: mmio.Mmio(packed struct(u32) {
    +                ///  The SAADC has stopped
    +                EVENTS_STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved768: [488]u8,
    +            ///  Enable or disable interrupt
    +            INTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable interrupt for event STARTED
    +                STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event END
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event DONE
    +                DONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event RESULTDONE
    +                RESULTDONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event CALIBRATEDONE
    +                CALIBRATEDONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event STOPPED
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event CH0LIMITH
    +                CH0LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event CH0LIMITL
    +                CH0LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event CH1LIMITH
    +                CH1LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event CH1LIMITL
    +                CH1LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event CH2LIMITH
    +                CH2LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event CH2LIMITL
    +                CH2LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event CH3LIMITH
    +                CH3LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event CH3LIMITL
    +                CH3LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event CH4LIMITH
    +                CH4LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event CH4LIMITL
    +                CH4LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event CH5LIMITH
    +                CH5LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event CH5LIMITL
    +                CH5LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event CH6LIMITH
    +                CH6LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event CH6LIMITL
    +                CH6LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event CH7LIMITH
    +                CH7LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event CH7LIMITL
    +                CH7LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u10,
    +            }),
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to enable interrupt for event STARTED
    +                STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event END
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event DONE
    +                DONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event RESULTDONE
    +                RESULTDONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event CALIBRATEDONE
    +                CALIBRATEDONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event STOPPED
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event CH0LIMITH
    +                CH0LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event CH0LIMITL
    +                CH0LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event CH1LIMITH
    +                CH1LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event CH1LIMITL
    +                CH1LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event CH2LIMITH
    +                CH2LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event CH2LIMITL
    +                CH2LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event CH3LIMITH
    +                CH3LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event CH3LIMITL
    +                CH3LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event CH4LIMITH
    +                CH4LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event CH4LIMITL
    +                CH4LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event CH5LIMITH
    +                CH5LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event CH5LIMITL
    +                CH5LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event CH6LIMITH
    +                CH6LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event CH6LIMITL
    +                CH6LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event CH7LIMITH
    +                CH7LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event CH7LIMITL
    +                CH7LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u10,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to disable interrupt for event STARTED
    +                STARTED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event END
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event DONE
    +                DONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event RESULTDONE
    +                RESULTDONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event CALIBRATEDONE
    +                CALIBRATEDONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event STOPPED
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event CH0LIMITH
    +                CH0LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event CH0LIMITL
    +                CH0LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event CH1LIMITH
    +                CH1LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event CH1LIMITL
    +                CH1LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event CH2LIMITH
    +                CH2LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event CH2LIMITL
    +                CH2LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event CH3LIMITH
    +                CH3LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event CH3LIMITL
    +                CH3LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event CH4LIMITH
    +                CH4LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event CH4LIMITL
    +                CH4LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event CH5LIMITH
    +                CH5LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event CH5LIMITL
    +                CH5LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event CH6LIMITH
    +                CH6LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event CH6LIMITL
    +                CH6LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event CH7LIMITH
    +                CH7LIMITH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event CH7LIMITL
    +                CH7LIMITL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u10,
    +            }),
    +            reserved1024: [244]u8,
    +            ///  Status
    +            STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  Status
    +                STATUS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  SAADC is ready. No on-going conversions.
    +                        Ready = 0x0,
    +                        ///  SAADC is busy. Conversion in progress.
    +                        Busy = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1280: [252]u8,
    +            ///  Enable or disable SAADC
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable SAADC
    +                ENABLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable SAADC
    +                        Disabled = 0x0,
    +                        ///  Enable SAADC
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1520: [236]u8,
    +            ///  Resolution configuration
    +            RESOLUTION: mmio.Mmio(packed struct(u32) {
    +                ///  Set the resolution
    +                VAL: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        ///  8 bits
    +                        @"8bit" = 0x0,
    +                        ///  10 bits
    +                        @"10bit" = 0x1,
    +                        ///  12 bits
    +                        @"12bit" = 0x2,
    +                        ///  14 bits
    +                        @"14bit" = 0x3,
    +                        _,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            ///  Oversampling configuration. The RESOLUTION is applied before averaging, thus for high OVERSAMPLE a higher RESOLUTION should be used.
    +            OVERSAMPLE: mmio.Mmio(packed struct(u32) {
    +                ///  Oversample control
    +                OVERSAMPLE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  Bypass oversampling
    +                        Bypass = 0x0,
    +                        ///  Oversample 2x
    +                        Over2x = 0x1,
    +                        ///  Oversample 4x
    +                        Over4x = 0x2,
    +                        ///  Oversample 8x
    +                        Over8x = 0x3,
    +                        ///  Oversample 16x
    +                        Over16x = 0x4,
    +                        ///  Oversample 32x
    +                        Over32x = 0x5,
    +                        ///  Oversample 64x
    +                        Over64x = 0x6,
    +                        ///  Oversample 128x
    +                        Over128x = 0x7,
    +                        ///  Oversample 256x
    +                        Over256x = 0x8,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            ///  Controls normal or continuous sample rate
    +            SAMPLERATE: mmio.Mmio(packed struct(u32) {
    +                ///  Capture and compare value. Sample rate is 16 MHz/CC
    +                CC: u11,
    +                reserved12: u1,
    +                ///  Select mode for sample rate control
    +                MODE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Rate is controlled from SAMPLE task
    +                        Task = 0x0,
    +                        ///  Rate is controlled from local timer (use CC to control the rate)
    +                        Timers = 0x1,
    +                    },
    +                },
    +                padding: u19,
    +            }),
    +        };
    +
    +        ///  Timer/Counter 0
    +        pub const TIMER0 = extern struct {
    +            ///  Start Timer
    +            TASKS_START: mmio.Mmio(packed struct(u32) {
    +                ///  Start Timer
    +                TASKS_START: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Stop Timer
    +            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    +                ///  Stop Timer
    +                TASKS_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Increment Timer (Counter mode only)
    +            TASKS_COUNT: mmio.Mmio(packed struct(u32) {
    +                ///  Increment Timer (Counter mode only)
    +                TASKS_COUNT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Clear time
    +            TASKS_CLEAR: mmio.Mmio(packed struct(u32) {
    +                ///  Clear time
    +                TASKS_CLEAR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Deprecated register - Shut down timer
    +            TASKS_SHUTDOWN: mmio.Mmio(packed struct(u32) {
    +                ///  Deprecated field - Shut down timer
    +                TASKS_SHUTDOWN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved64: [44]u8,
    +            ///  Description collection: Capture Timer value to CC[n] register
    +            TASKS_CAPTURE: [6]mmio.Mmio(packed struct(u32) {
    +                ///  Capture Timer value to CC[n] register
    +                TASKS_CAPTURE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved320: [232]u8,
    +            ///  Description collection: Compare event on CC[n] match
    +            EVENTS_COMPARE: [6]mmio.Mmio(packed struct(u32) {
    +                ///  Compare event on CC[n] match
    +                EVENTS_COMPARE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved512: [168]u8,
    +            ///  Shortcuts between local events and tasks
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                ///  Shortcut between event COMPARE[0] and task CLEAR
    +                COMPARE0_CLEAR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event COMPARE[1] and task CLEAR
    +                COMPARE1_CLEAR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event COMPARE[2] and task CLEAR
    +                COMPARE2_CLEAR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event COMPARE[3] and task CLEAR
    +                COMPARE3_CLEAR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event COMPARE[4] and task CLEAR
    +                COMPARE4_CLEAR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event COMPARE[5] and task CLEAR
    +                COMPARE5_CLEAR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved8: u2,
    +                ///  Shortcut between event COMPARE[0] and task STOP
    +                COMPARE0_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event COMPARE[1] and task STOP
    +                COMPARE1_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event COMPARE[2] and task STOP
    +                COMPARE2_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event COMPARE[3] and task STOP
    +                COMPARE3_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event COMPARE[4] and task STOP
    +                COMPARE4_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event COMPARE[5] and task STOP
    +                COMPARE5_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u18,
    +            }),
    +            reserved772: [256]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                reserved16: u16,
    +                ///  Write '1' to enable interrupt for event COMPARE[0]
    +                COMPARE0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event COMPARE[1]
    +                COMPARE1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event COMPARE[2]
    +                COMPARE2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event COMPARE[3]
    +                COMPARE3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event COMPARE[4]
    +                COMPARE4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event COMPARE[5]
    +                COMPARE5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u10,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                reserved16: u16,
    +                ///  Write '1' to disable interrupt for event COMPARE[0]
    +                COMPARE0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event COMPARE[1]
    +                COMPARE1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event COMPARE[2]
    +                COMPARE2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event COMPARE[3]
    +                COMPARE3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event COMPARE[4]
    +                COMPARE4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event COMPARE[5]
    +                COMPARE5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u10,
    +            }),
    +            reserved1284: [504]u8,
    +            ///  Timer mode selection
    +            MODE: mmio.Mmio(packed struct(u32) {
    +                ///  Timer mode
    +                MODE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Select Timer mode
    +                        Timer = 0x0,
    +                        ///  Deprecated enumerator - Select Counter mode
    +                        Counter = 0x1,
    +                        ///  Select Low Power Counter mode
    +                        LowPowerCounter = 0x2,
    +                        _,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            ///  Configure the number of bits used by the TIMER
    +            BITMODE: mmio.Mmio(packed struct(u32) {
    +                ///  Timer bit width
    +                BITMODE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  16 bit timer bit width
    +                        @"16Bit" = 0x0,
    +                        ///  8 bit timer bit width
    +                        @"08Bit" = 0x1,
    +                        ///  24 bit timer bit width
    +                        @"24Bit" = 0x2,
    +                        ///  32 bit timer bit width
    +                        @"32Bit" = 0x3,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            reserved1296: [4]u8,
    +            ///  Timer prescaler register
    +            PRESCALER: mmio.Mmio(packed struct(u32) {
    +                ///  Prescaler value
    +                PRESCALER: u4,
    +                padding: u28,
    +            }),
    +            reserved1344: [44]u8,
    +            ///  Description collection: Capture/Compare register n
    +            CC: [6]mmio.Mmio(packed struct(u32) {
    +                ///  Capture/Compare value
    +                CC: u32,
    +            }),
    +        };
    +
    +        ///  FPU
    +        pub const FPU = extern struct {
    +            ///  Unused.
    +            UNUSED: u32,
    +        };
    +
    +        ///  Inter-IC Sound
    +        pub const I2S = extern struct {
    +            ///  Starts continuous I2S transfer. Also starts MCK generator when this is enabled.
    +            TASKS_START: mmio.Mmio(packed struct(u32) {
    +                ///  Starts continuous I2S transfer. Also starts MCK generator when this is enabled.
    +                TASKS_START: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Stops I2S transfer. Also stops MCK generator. Triggering this task will cause the STOPPED event to be generated.
    +            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    +                ///  Stops I2S transfer. Also stops MCK generator. Triggering this task will cause the STOPPED event to be generated.
    +                TASKS_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved260: [252]u8,
    +            ///  The RXD.PTR register has been copied to internal double-buffers. When the I2S module is started and RX is enabled, this event will be generated for every RXTXD.MAXCNT words that are received on the SDIN pin.
    +            EVENTS_RXPTRUPD: mmio.Mmio(packed struct(u32) {
    +                ///  The RXD.PTR register has been copied to internal double-buffers. When the I2S module is started and RX is enabled, this event will be generated for every RXTXD.MAXCNT words that are received on the SDIN pin.
    +                EVENTS_RXPTRUPD: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  I2S transfer stopped.
    +            EVENTS_STOPPED: mmio.Mmio(packed struct(u32) {
    +                ///  I2S transfer stopped.
    +                EVENTS_STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved276: [8]u8,
    +            ///  The TDX.PTR register has been copied to internal double-buffers. When the I2S module is started and TX is enabled, this event will be generated for every RXTXD.MAXCNT words that are sent on the SDOUT pin.
    +            EVENTS_TXPTRUPD: mmio.Mmio(packed struct(u32) {
    +                ///  The TDX.PTR register has been copied to internal double-buffers. When the I2S module is started and TX is enabled, this event will be generated for every RXTXD.MAXCNT words that are sent on the SDOUT pin.
    +                EVENTS_TXPTRUPD: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved768: [488]u8,
    +            ///  Enable or disable interrupt
    +            INTEN: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Enable or disable interrupt for event RXPTRUPD
    +                RXPTRUPD: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event STOPPED
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved5: u2,
    +                ///  Enable or disable interrupt for event TXPTRUPD
    +                TXPTRUPD: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u26,
    +            }),
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to enable interrupt for event RXPTRUPD
    +                RXPTRUPD: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event STOPPED
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved5: u2,
    +                ///  Write '1' to enable interrupt for event TXPTRUPD
    +                TXPTRUPD: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u26,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Write '1' to disable interrupt for event RXPTRUPD
    +                RXPTRUPD: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event STOPPED
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved5: u2,
    +                ///  Write '1' to disable interrupt for event TXPTRUPD
    +                TXPTRUPD: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u26,
    +            }),
    +            reserved1280: [500]u8,
    +            ///  Enable I2S module.
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable I2S module.
    +                ENABLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +        };
    +
    +        ///  Real time counter 0
    +        pub const RTC0 = extern struct {
    +            ///  Start RTC COUNTER
    +            TASKS_START: mmio.Mmio(packed struct(u32) {
    +                ///  Start RTC COUNTER
    +                TASKS_START: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Stop RTC COUNTER
    +            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    +                ///  Stop RTC COUNTER
    +                TASKS_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Clear RTC COUNTER
    +            TASKS_CLEAR: mmio.Mmio(packed struct(u32) {
    +                ///  Clear RTC COUNTER
    +                TASKS_CLEAR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Set COUNTER to 0xFFFFF0
    +            TASKS_TRIGOVRFLW: mmio.Mmio(packed struct(u32) {
    +                ///  Set COUNTER to 0xFFFFF0
    +                TASKS_TRIGOVRFLW: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved256: [240]u8,
    +            ///  Event on COUNTER increment
    +            EVENTS_TICK: mmio.Mmio(packed struct(u32) {
    +                ///  Event on COUNTER increment
    +                EVENTS_TICK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Event on COUNTER overflow
    +            EVENTS_OVRFLW: mmio.Mmio(packed struct(u32) {
    +                ///  Event on COUNTER overflow
    +                EVENTS_OVRFLW: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved320: [56]u8,
    +            ///  Description collection: Compare event on CC[n] match
    +            EVENTS_COMPARE: [4]mmio.Mmio(packed struct(u32) {
    +                ///  Compare event on CC[n] match
    +                EVENTS_COMPARE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved772: [436]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to enable interrupt for event TICK
    +                TICK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event OVRFLW
    +                OVRFLW: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved16: u14,
    +                ///  Write '1' to enable interrupt for event COMPARE[0]
    +                COMPARE0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event COMPARE[1]
    +                COMPARE1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event COMPARE[2]
    +                COMPARE2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event COMPARE[3]
    +                COMPARE3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u12,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to disable interrupt for event TICK
    +                TICK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event OVRFLW
    +                OVRFLW: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved16: u14,
    +                ///  Write '1' to disable interrupt for event COMPARE[0]
    +                COMPARE0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event COMPARE[1]
    +                COMPARE1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event COMPARE[2]
    +                COMPARE2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event COMPARE[3]
    +                COMPARE3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u12,
    +            }),
    +            reserved832: [52]u8,
    +            ///  Enable or disable event routing
    +            EVTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable event routing for event TICK
    +                TICK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Disable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable event routing for event OVRFLW
    +                OVRFLW: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Disable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved16: u14,
    +                ///  Enable or disable event routing for event COMPARE[0]
    +                COMPARE0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Disable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable event routing for event COMPARE[1]
    +                COMPARE1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Disable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable event routing for event COMPARE[2]
    +                COMPARE2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Disable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable event routing for event COMPARE[3]
    +                COMPARE3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Disable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u12,
    +            }),
    +            ///  Enable event routing
    +            EVTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to enable event routing for event TICK
    +                TICK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable event routing for event OVRFLW
    +                OVRFLW: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved16: u14,
    +                ///  Write '1' to enable event routing for event COMPARE[0]
    +                COMPARE0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable event routing for event COMPARE[1]
    +                COMPARE1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable event routing for event COMPARE[2]
    +                COMPARE2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable event routing for event COMPARE[3]
    +                COMPARE3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u12,
    +            }),
    +            ///  Disable event routing
    +            EVTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to disable event routing for event TICK
    +                TICK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable event routing for event OVRFLW
    +                OVRFLW: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved16: u14,
    +                ///  Write '1' to disable event routing for event COMPARE[0]
    +                COMPARE0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable event routing for event COMPARE[1]
    +                COMPARE1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable event routing for event COMPARE[2]
    +                COMPARE2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable event routing for event COMPARE[3]
    +                COMPARE3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u12,
    +            }),
    +            reserved1284: [440]u8,
    +            ///  Current COUNTER value
    +            COUNTER: mmio.Mmio(packed struct(u32) {
    +                ///  Counter value
    +                COUNTER: u24,
    +                padding: u8,
    +            }),
    +            ///  12 bit prescaler for COUNTER frequency (32768/(PRESCALER+1)).Must be written when RTC is stopped
    +            PRESCALER: mmio.Mmio(packed struct(u32) {
    +                ///  Prescaler value
    +                PRESCALER: u12,
    +                padding: u20,
    +            }),
    +            reserved1344: [52]u8,
    +            ///  Description collection: Compare register n
    +            CC: [4]mmio.Mmio(packed struct(u32) {
    +                ///  Compare value
    +                COMPARE: u24,
    +                padding: u8,
    +            }),
    +        };
    +
    +        ///  Temperature Sensor
    +        pub const TEMP = extern struct {
    +            ///  Start temperature measurement
    +            TASKS_START: mmio.Mmio(packed struct(u32) {
    +                ///  Start temperature measurement
    +                TASKS_START: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Stop temperature measurement
    +            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    +                ///  Stop temperature measurement
    +                TASKS_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved256: [248]u8,
    +            ///  Temperature measurement complete, data ready
    +            EVENTS_DATARDY: mmio.Mmio(packed struct(u32) {
    +                ///  Temperature measurement complete, data ready
    +                EVENTS_DATARDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved772: [512]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to enable interrupt for event DATARDY
    +                DATARDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to disable interrupt for event DATARDY
    +                DATARDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1288: [508]u8,
    +            ///  Temperature in degC (0.25deg steps)
    +            TEMP: mmio.Mmio(packed struct(u32) {
    +                ///  Temperature in degC (0.25deg steps)
    +                TEMP: u32,
    +            }),
    +            reserved1312: [20]u8,
    +            ///  Slope of 1st piece wise linear function
    +            A0: mmio.Mmio(packed struct(u32) {
    +                ///  Slope of 1st piece wise linear function
    +                A0: u12,
    +                padding: u20,
    +            }),
    +            ///  Slope of 2nd piece wise linear function
    +            A1: mmio.Mmio(packed struct(u32) {
    +                ///  Slope of 2nd piece wise linear function
    +                A1: u12,
    +                padding: u20,
    +            }),
    +            ///  Slope of 3rd piece wise linear function
    +            A2: mmio.Mmio(packed struct(u32) {
    +                ///  Slope of 3rd piece wise linear function
    +                A2: u12,
    +                padding: u20,
    +            }),
    +            ///  Slope of 4th piece wise linear function
    +            A3: mmio.Mmio(packed struct(u32) {
    +                ///  Slope of 4th piece wise linear function
    +                A3: u12,
    +                padding: u20,
    +            }),
    +            ///  Slope of 5th piece wise linear function
    +            A4: mmio.Mmio(packed struct(u32) {
    +                ///  Slope of 5th piece wise linear function
    +                A4: u12,
    +                padding: u20,
    +            }),
    +            ///  Slope of 6th piece wise linear function
    +            A5: mmio.Mmio(packed struct(u32) {
    +                ///  Slope of 6th piece wise linear function
    +                A5: u12,
    +                padding: u20,
    +            }),
    +            reserved1344: [8]u8,
    +            ///  y-intercept of 1st piece wise linear function
    +            B0: mmio.Mmio(packed struct(u32) {
    +                ///  y-intercept of 1st piece wise linear function
    +                B0: u14,
    +                padding: u18,
    +            }),
    +            ///  y-intercept of 2nd piece wise linear function
    +            B1: mmio.Mmio(packed struct(u32) {
    +                ///  y-intercept of 2nd piece wise linear function
    +                B1: u14,
    +                padding: u18,
    +            }),
    +            ///  y-intercept of 3rd piece wise linear function
    +            B2: mmio.Mmio(packed struct(u32) {
    +                ///  y-intercept of 3rd piece wise linear function
    +                B2: u14,
    +                padding: u18,
    +            }),
    +            ///  y-intercept of 4th piece wise linear function
    +            B3: mmio.Mmio(packed struct(u32) {
    +                ///  y-intercept of 4th piece wise linear function
    +                B3: u14,
    +                padding: u18,
    +            }),
    +            ///  y-intercept of 5th piece wise linear function
    +            B4: mmio.Mmio(packed struct(u32) {
    +                ///  y-intercept of 5th piece wise linear function
    +                B4: u14,
    +                padding: u18,
    +            }),
    +            ///  y-intercept of 6th piece wise linear function
    +            B5: mmio.Mmio(packed struct(u32) {
    +                ///  y-intercept of 6th piece wise linear function
    +                B5: u14,
    +                padding: u18,
    +            }),
    +            reserved1376: [8]u8,
    +            ///  End point of 1st piece wise linear function
    +            T0: mmio.Mmio(packed struct(u32) {
    +                ///  End point of 1st piece wise linear function
    +                T0: u8,
    +                padding: u24,
    +            }),
    +            ///  End point of 2nd piece wise linear function
    +            T1: mmio.Mmio(packed struct(u32) {
    +                ///  End point of 2nd piece wise linear function
    +                T1: u8,
    +                padding: u24,
    +            }),
    +            ///  End point of 3rd piece wise linear function
    +            T2: mmio.Mmio(packed struct(u32) {
    +                ///  End point of 3rd piece wise linear function
    +                T2: u8,
    +                padding: u24,
    +            }),
    +            ///  End point of 4th piece wise linear function
    +            T3: mmio.Mmio(packed struct(u32) {
    +                ///  End point of 4th piece wise linear function
    +                T3: u8,
    +                padding: u24,
    +            }),
    +            ///  End point of 5th piece wise linear function
    +            T4: mmio.Mmio(packed struct(u32) {
    +                ///  End point of 5th piece wise linear function
    +                T4: u8,
    +                padding: u24,
    +            }),
    +        };
    +
    +        ///  Random Number Generator
    +        pub const RNG = extern struct {
    +            ///  Task starting the random number generator
    +            TASKS_START: mmio.Mmio(packed struct(u32) {
    +                ///  Task starting the random number generator
    +                TASKS_START: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Task stopping the random number generator
    +            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    +                ///  Task stopping the random number generator
    +                TASKS_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved256: [248]u8,
    +            ///  Event being generated for every new random number written to the VALUE register
    +            EVENTS_VALRDY: mmio.Mmio(packed struct(u32) {
    +                ///  Event being generated for every new random number written to the VALUE register
    +                EVENTS_VALRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved512: [252]u8,
    +            ///  Shortcuts between local events and tasks
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                ///  Shortcut between event VALRDY and task STOP
    +                VALRDY_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved772: [256]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to enable interrupt for event VALRDY
    +                VALRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to disable interrupt for event VALRDY
    +                VALRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1284: [504]u8,
    +            ///  Configuration register
    +            CONFIG: mmio.Mmio(packed struct(u32) {
    +                ///  Bias correction
    +                DERCEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disabled
    +                        Disabled = 0x0,
    +                        ///  Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Output random number
    +            VALUE: mmio.Mmio(packed struct(u32) {
    +                ///  Generated random number
    +                VALUE: u8,
    +                padding: u24,
    +            }),
    +        };
    +
    +        ///  AES ECB Mode Encryption
    +        pub const ECB = extern struct {
    +            ///  Start ECB block encrypt
    +            TASKS_STARTECB: mmio.Mmio(packed struct(u32) {
    +                ///  Start ECB block encrypt
    +                TASKS_STARTECB: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Abort a possible executing ECB operation
    +            TASKS_STOPECB: mmio.Mmio(packed struct(u32) {
    +                ///  Abort a possible executing ECB operation
    +                TASKS_STOPECB: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved256: [248]u8,
    +            ///  ECB block encrypt complete
    +            EVENTS_ENDECB: mmio.Mmio(packed struct(u32) {
    +                ///  ECB block encrypt complete
    +                EVENTS_ENDECB: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  ECB block encrypt aborted because of a STOPECB task or due to an error
    +            EVENTS_ERRORECB: mmio.Mmio(packed struct(u32) {
    +                ///  ECB block encrypt aborted because of a STOPECB task or due to an error
    +                EVENTS_ERRORECB: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved772: [508]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to enable interrupt for event ENDECB
    +                ENDECB: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event ERRORECB
    +                ERRORECB: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to disable interrupt for event ENDECB
    +                ENDECB: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event ERRORECB
    +                ERRORECB: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            reserved1284: [504]u8,
    +            ///  ECB block encrypt memory pointers
    +            ECBDATAPTR: mmio.Mmio(packed struct(u32) {
    +                ///  Pointer to the ECB data structure (see Table 1 ECB data structure overview)
    +                ECBDATAPTR: u32,
    +            }),
    +        };
    +
    +        ///  Accelerated Address Resolver
    +        pub const AAR = extern struct {
    +            ///  Start resolving addresses based on IRKs specified in the IRK data structure
    +            TASKS_START: mmio.Mmio(packed struct(u32) {
    +                ///  Start resolving addresses based on IRKs specified in the IRK data structure
    +                TASKS_START: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved8: [4]u8,
    +            ///  Stop resolving addresses
    +            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    +                ///  Stop resolving addresses
    +                TASKS_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved256: [244]u8,
    +            ///  Address resolution procedure complete
    +            EVENTS_END: mmio.Mmio(packed struct(u32) {
    +                ///  Address resolution procedure complete
    +                EVENTS_END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Address resolved
    +            EVENTS_RESOLVED: mmio.Mmio(packed struct(u32) {
    +                ///  Address resolved
    +                EVENTS_RESOLVED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Address not resolved
    +            EVENTS_NOTRESOLVED: mmio.Mmio(packed struct(u32) {
    +                ///  Address not resolved
    +                EVENTS_NOTRESOLVED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved772: [504]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to enable interrupt for event END
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event RESOLVED
    +                RESOLVED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event NOTRESOLVED
    +                NOTRESOLVED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to disable interrupt for event END
    +                END: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event RESOLVED
    +                RESOLVED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event NOTRESOLVED
    +                NOTRESOLVED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            reserved1024: [244]u8,
    +            ///  Resolution status
    +            STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  The IRK that was used last time an address was resolved
    +                STATUS: u4,
    +                padding: u28,
    +            }),
    +            reserved1280: [252]u8,
    +            ///  Enable AAR
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable AAR
    +                ENABLE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x3,
    +                        _,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            ///  Number of IRKs
    +            NIRK: mmio.Mmio(packed struct(u32) {
    +                ///  Number of Identity root keys available in the IRK data structure
    +                NIRK: u5,
    +                padding: u27,
    +            }),
    +            ///  Pointer to IRK data structure
    +            IRKPTR: mmio.Mmio(packed struct(u32) {
    +                ///  Pointer to the IRK data structure
    +                IRKPTR: u32,
    +            }),
    +            reserved1296: [4]u8,
    +            ///  Pointer to the resolvable address
    +            ADDRPTR: mmio.Mmio(packed struct(u32) {
    +                ///  Pointer to the resolvable address (6-bytes)
    +                ADDRPTR: u32,
    +            }),
    +            ///  Pointer to data area used for temporary storage
    +            SCRATCHPTR: mmio.Mmio(packed struct(u32) {
    +                ///  Pointer to a scratch data area used for temporary storage during resolution. A space of minimum 3 bytes must be reserved.
    +                SCRATCHPTR: u32,
    +            }),
    +        };
    +
    +        ///  AES CCM Mode Encryption
    +        pub const CCM = extern struct {
    +            ///  Start generation of key-stream. This operation will stop by itself when completed.
    +            TASKS_KSGEN: mmio.Mmio(packed struct(u32) {
    +                ///  Start generation of key-stream. This operation will stop by itself when completed.
    +                TASKS_KSGEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Start encryption/decryption. This operation will stop by itself when completed.
    +            TASKS_CRYPT: mmio.Mmio(packed struct(u32) {
    +                ///  Start encryption/decryption. This operation will stop by itself when completed.
    +                TASKS_CRYPT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Stop encryption/decryption
    +            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    +                ///  Stop encryption/decryption
    +                TASKS_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Override DATARATE setting in MODE register with the contents of the RATEOVERRIDE register for any ongoing encryption/decryption
    +            TASKS_RATEOVERRIDE: mmio.Mmio(packed struct(u32) {
    +                ///  Override DATARATE setting in MODE register with the contents of the RATEOVERRIDE register for any ongoing encryption/decryption
    +                TASKS_RATEOVERRIDE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved256: [240]u8,
    +            ///  Key-stream generation complete
    +            EVENTS_ENDKSGEN: mmio.Mmio(packed struct(u32) {
    +                ///  Key-stream generation complete
    +                EVENTS_ENDKSGEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Encrypt/decrypt complete
    +            EVENTS_ENDCRYPT: mmio.Mmio(packed struct(u32) {
    +                ///  Encrypt/decrypt complete
    +                EVENTS_ENDCRYPT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Deprecated register - CCM error event
    +            EVENTS_ERROR: mmio.Mmio(packed struct(u32) {
    +                ///  Deprecated field - CCM error event
    +                EVENTS_ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved512: [244]u8,
    +            ///  Shortcuts between local events and tasks
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                ///  Shortcut between event ENDKSGEN and task CRYPT
    +                ENDKSGEN_CRYPT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved772: [256]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to enable interrupt for event ENDKSGEN
    +                ENDKSGEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event ENDCRYPT
    +                ENDCRYPT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Deprecated intsetfield - Write '1' to enable interrupt for event ERROR
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to disable interrupt for event ENDKSGEN
    +                ENDKSGEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event ENDCRYPT
    +                ENDCRYPT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Deprecated intclrfield - Write '1' to disable interrupt for event ERROR
    +                ERROR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            reserved1024: [244]u8,
    +            ///  MIC check result
    +            MICSTATUS: mmio.Mmio(packed struct(u32) {
    +                ///  The result of the MIC check performed during the previous decryption operation
    +                MICSTATUS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  MIC check failed
    +                        CheckFailed = 0x0,
    +                        ///  MIC check passed
    +                        CheckPassed = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1280: [252]u8,
    +            ///  Enable
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable CCM
    +                ENABLE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x2,
    +                        _,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            ///  Operation mode
    +            MODE: mmio.Mmio(packed struct(u32) {
    +                ///  The mode of operation to be used. The settings in this register apply whenever either the KSGEN or CRYPT tasks are triggered.
    +                MODE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  AES CCM packet encryption mode
    +                        Encryption = 0x0,
    +                        ///  AES CCM packet decryption mode
    +                        Decryption = 0x1,
    +                    },
    +                },
    +                reserved16: u15,
    +                ///  Radio data rate that the CCM shall run synchronous with
    +                DATARATE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  1 Mbps
    +                        @"1Mbit" = 0x0,
    +                        ///  2 Mbps
    +                        @"2Mbit" = 0x1,
    +                        ///  125 Kbps
    +                        @"125Kbps" = 0x2,
    +                        ///  500 Kbps
    +                        @"500Kbps" = 0x3,
    +                    },
    +                },
    +                reserved24: u6,
    +                ///  Packet length configuration
    +                LENGTH: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Default length. Effective length of LENGTH field in encrypted/decrypted packet is 5 bits. A key-stream for packet payloads up to 27 bytes will be generated.
    +                        Default = 0x0,
    +                        ///  Extended length. Effective length of LENGTH field in encrypted/decrypted packet is 8 bits. A key-stream for packet payloads up to MAXPACKETSIZE bytes will be generated.
    +                        Extended = 0x1,
    +                    },
    +                },
    +                padding: u7,
    +            }),
    +            ///  Pointer to data structure holding AES key and NONCE vector
    +            CNFPTR: mmio.Mmio(packed struct(u32) {
    +                ///  Pointer to the data structure holding the AES key and the CCM NONCE vector (see Table 1 CCM data structure overview)
    +                CNFPTR: u32,
    +            }),
    +            ///  Input pointer
    +            INPTR: mmio.Mmio(packed struct(u32) {
    +                ///  Input pointer
    +                INPTR: u32,
    +            }),
    +            ///  Output pointer
    +            OUTPTR: mmio.Mmio(packed struct(u32) {
    +                ///  Output pointer
    +                OUTPTR: u32,
    +            }),
    +            ///  Pointer to data area used for temporary storage
    +            SCRATCHPTR: mmio.Mmio(packed struct(u32) {
    +                ///  Pointer to a scratch data area used for temporary storage during key-stream generation, MIC generation and encryption/decryption.
    +                SCRATCHPTR: u32,
    +            }),
    +            ///  Length of key-stream generated when MODE.LENGTH = Extended.
    +            MAXPACKETSIZE: mmio.Mmio(packed struct(u32) {
    +                ///  Length of key-stream generated when MODE.LENGTH = Extended. This value must be greater or equal to the subsequent packet payload to be encrypted/decrypted.
    +                MAXPACKETSIZE: u8,
    +                padding: u24,
    +            }),
    +            ///  Data rate override setting.
    +            RATEOVERRIDE: mmio.Mmio(packed struct(u32) {
    +                ///  Data rate override setting.
    +                RATEOVERRIDE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  1 Mbps
    +                        @"1Mbit" = 0x0,
    +                        ///  2 Mbps
    +                        @"2Mbit" = 0x1,
    +                        ///  125 Kbps
    +                        @"125Kbps" = 0x2,
    +                        ///  500 Kbps
    +                        @"500Kbps" = 0x3,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +        };
    +
    +        ///  Watchdog Timer
    +        pub const WDT = extern struct {
    +            ///  Start the watchdog
    +            TASKS_START: mmio.Mmio(packed struct(u32) {
    +                ///  Start the watchdog
    +                TASKS_START: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved256: [252]u8,
    +            ///  Watchdog timeout
    +            EVENTS_TIMEOUT: mmio.Mmio(packed struct(u32) {
    +                ///  Watchdog timeout
    +                EVENTS_TIMEOUT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved772: [512]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to enable interrupt for event TIMEOUT
    +                TIMEOUT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to disable interrupt for event TIMEOUT
    +                TIMEOUT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1024: [244]u8,
    +            ///  Run status
    +            RUNSTATUS: mmio.Mmio(packed struct(u32) {
    +                ///  Indicates whether or not the watchdog is running
    +                RUNSTATUS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Watchdog not running
    +                        NotRunning = 0x0,
    +                        ///  Watchdog is running
    +                        Running = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Request status
    +            REQSTATUS: mmio.Mmio(packed struct(u32) {
    +                ///  Request status for RR[0] register
    +                RR0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RR[0] register is not enabled, or are already requesting reload
    +                        DisabledOrRequested = 0x0,
    +                        ///  RR[0] register is enabled, and are not yet requesting reload
    +                        EnabledAndUnrequested = 0x1,
    +                    },
    +                },
    +                ///  Request status for RR[1] register
    +                RR1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RR[1] register is not enabled, or are already requesting reload
    +                        DisabledOrRequested = 0x0,
    +                        ///  RR[1] register is enabled, and are not yet requesting reload
    +                        EnabledAndUnrequested = 0x1,
    +                    },
    +                },
    +                ///  Request status for RR[2] register
    +                RR2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RR[2] register is not enabled, or are already requesting reload
    +                        DisabledOrRequested = 0x0,
    +                        ///  RR[2] register is enabled, and are not yet requesting reload
    +                        EnabledAndUnrequested = 0x1,
    +                    },
    +                },
    +                ///  Request status for RR[3] register
    +                RR3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RR[3] register is not enabled, or are already requesting reload
    +                        DisabledOrRequested = 0x0,
    +                        ///  RR[3] register is enabled, and are not yet requesting reload
    +                        EnabledAndUnrequested = 0x1,
    +                    },
    +                },
    +                ///  Request status for RR[4] register
    +                RR4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RR[4] register is not enabled, or are already requesting reload
    +                        DisabledOrRequested = 0x0,
    +                        ///  RR[4] register is enabled, and are not yet requesting reload
    +                        EnabledAndUnrequested = 0x1,
    +                    },
    +                },
    +                ///  Request status for RR[5] register
    +                RR5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RR[5] register is not enabled, or are already requesting reload
    +                        DisabledOrRequested = 0x0,
    +                        ///  RR[5] register is enabled, and are not yet requesting reload
    +                        EnabledAndUnrequested = 0x1,
    +                    },
    +                },
    +                ///  Request status for RR[6] register
    +                RR6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RR[6] register is not enabled, or are already requesting reload
    +                        DisabledOrRequested = 0x0,
    +                        ///  RR[6] register is enabled, and are not yet requesting reload
    +                        EnabledAndUnrequested = 0x1,
    +                    },
    +                },
    +                ///  Request status for RR[7] register
    +                RR7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RR[7] register is not enabled, or are already requesting reload
    +                        DisabledOrRequested = 0x0,
    +                        ///  RR[7] register is enabled, and are not yet requesting reload
    +                        EnabledAndUnrequested = 0x1,
    +                    },
    +                },
    +                padding: u24,
    +            }),
    +            reserved1284: [252]u8,
    +            ///  Counter reload value
    +            CRV: mmio.Mmio(packed struct(u32) {
    +                ///  Counter reload value in number of cycles of the 32.768 kHz clock
    +                CRV: u32,
    +            }),
    +            ///  Enable register for reload request registers
    +            RREN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable RR[0] register
    +                RR0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable RR[0] register
    +                        Disabled = 0x0,
    +                        ///  Enable RR[0] register
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable RR[1] register
    +                RR1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable RR[1] register
    +                        Disabled = 0x0,
    +                        ///  Enable RR[1] register
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable RR[2] register
    +                RR2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable RR[2] register
    +                        Disabled = 0x0,
    +                        ///  Enable RR[2] register
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable RR[3] register
    +                RR3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable RR[3] register
    +                        Disabled = 0x0,
    +                        ///  Enable RR[3] register
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable RR[4] register
    +                RR4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable RR[4] register
    +                        Disabled = 0x0,
    +                        ///  Enable RR[4] register
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable RR[5] register
    +                RR5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable RR[5] register
    +                        Disabled = 0x0,
    +                        ///  Enable RR[5] register
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable RR[6] register
    +                RR6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable RR[6] register
    +                        Disabled = 0x0,
    +                        ///  Enable RR[6] register
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable RR[7] register
    +                RR7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable RR[7] register
    +                        Disabled = 0x0,
    +                        ///  Enable RR[7] register
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u24,
    +            }),
    +            ///  Configuration register
    +            CONFIG: mmio.Mmio(packed struct(u32) {
    +                ///  Configure the watchdog to either be paused, or kept running, while the CPU is sleeping
    +                SLEEP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pause watchdog while the CPU is sleeping
    +                        Pause = 0x0,
    +                        ///  Keep the watchdog running while the CPU is sleeping
    +                        Run = 0x1,
    +                    },
    +                },
    +                reserved3: u2,
    +                ///  Configure the watchdog to either be paused, or kept running, while the CPU is halted by the debugger
    +                HALT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Pause watchdog while the CPU is halted by the debugger
    +                        Pause = 0x0,
    +                        ///  Keep the watchdog running while the CPU is halted by the debugger
    +                        Run = 0x1,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1536: [240]u8,
    +            ///  Description collection: Reload request n
    +            RR: [8]mmio.Mmio(packed struct(u32) {
    +                ///  Reload request register
    +                RR: packed union {
    +                    raw: u32,
    +                    value: enum(u32) {
    +                        ///  Value to request a reload of the watchdog timer
    +                        Reload = 0x6e524635,
    +                        _,
    +                    },
    +                },
    +            }),
    +        };
    +
    +        ///  Memory Watch Unit
    +        pub const MWU = extern struct {
    +            reserved768: [768]u8,
    +            ///  Enable or disable interrupt
    +            INTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable interrupt for event REGION0WA
    +                REGION0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event REGION0RA
    +                REGION0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event REGION1WA
    +                REGION1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event REGION1RA
    +                REGION1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event REGION2WA
    +                REGION2WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event REGION2RA
    +                REGION2RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event REGION3WA
    +                REGION3WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event REGION3RA
    +                REGION3RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved24: u16,
    +                ///  Enable or disable interrupt for event PREGION0WA
    +                PREGION0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event PREGION0RA
    +                PREGION0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event PREGION1WA
    +                PREGION1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event PREGION1RA
    +                PREGION1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u4,
    +            }),
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to enable interrupt for event REGION0WA
    +                REGION0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event REGION0RA
    +                REGION0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event REGION1WA
    +                REGION1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event REGION1RA
    +                REGION1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event REGION2WA
    +                REGION2WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event REGION2RA
    +                REGION2RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event REGION3WA
    +                REGION3WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event REGION3RA
    +                REGION3RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved24: u16,
    +                ///  Write '1' to enable interrupt for event PREGION0WA
    +                PREGION0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event PREGION0RA
    +                PREGION0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event PREGION1WA
    +                PREGION1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event PREGION1RA
    +                PREGION1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u4,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to disable interrupt for event REGION0WA
    +                REGION0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event REGION0RA
    +                REGION0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event REGION1WA
    +                REGION1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event REGION1RA
    +                REGION1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event REGION2WA
    +                REGION2WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event REGION2RA
    +                REGION2RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event REGION3WA
    +                REGION3WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event REGION3RA
    +                REGION3RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved24: u16,
    +                ///  Write '1' to disable interrupt for event PREGION0WA
    +                PREGION0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event PREGION0RA
    +                PREGION0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event PREGION1WA
    +                PREGION1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event PREGION1RA
    +                PREGION1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u4,
    +            }),
    +            reserved800: [20]u8,
    +            ///  Enable or disable interrupt
    +            NMIEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable interrupt for event REGION0WA
    +                REGION0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event REGION0RA
    +                REGION0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event REGION1WA
    +                REGION1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event REGION1RA
    +                REGION1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event REGION2WA
    +                REGION2WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event REGION2RA
    +                REGION2RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event REGION3WA
    +                REGION3WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event REGION3RA
    +                REGION3RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved24: u16,
    +                ///  Enable or disable interrupt for event PREGION0WA
    +                PREGION0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event PREGION0RA
    +                PREGION0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event PREGION1WA
    +                PREGION1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event PREGION1RA
    +                PREGION1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u4,
    +            }),
    +            ///  Enable interrupt
    +            NMIENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to enable interrupt for event REGION0WA
    +                REGION0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event REGION0RA
    +                REGION0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event REGION1WA
    +                REGION1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event REGION1RA
    +                REGION1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event REGION2WA
    +                REGION2WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event REGION2RA
    +                REGION2RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event REGION3WA
    +                REGION3WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event REGION3RA
    +                REGION3RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved24: u16,
    +                ///  Write '1' to enable interrupt for event PREGION0WA
    +                PREGION0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event PREGION0RA
    +                PREGION0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event PREGION1WA
    +                PREGION1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event PREGION1RA
    +                PREGION1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u4,
    +            }),
    +            ///  Disable interrupt
    +            NMIENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to disable interrupt for event REGION0WA
    +                REGION0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event REGION0RA
    +                REGION0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event REGION1WA
    +                REGION1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event REGION1RA
    +                REGION1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event REGION2WA
    +                REGION2WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event REGION2RA
    +                REGION2RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event REGION3WA
    +                REGION3WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event REGION3RA
    +                REGION3RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved24: u16,
    +                ///  Write '1' to disable interrupt for event PREGION0WA
    +                PREGION0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event PREGION0RA
    +                PREGION0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event PREGION1WA
    +                PREGION1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event PREGION1RA
    +                PREGION1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u4,
    +            }),
    +            reserved1296: [484]u8,
    +            ///  Enable/disable regions watch
    +            REGIONEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable/disable write access watch in region[0]
    +                RGN0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable write access watch in this region
    +                        Disable = 0x0,
    +                        ///  Enable write access watch in this region
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable/disable read access watch in region[0]
    +                RGN0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable read access watch in this region
    +                        Disable = 0x0,
    +                        ///  Enable read access watch in this region
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable/disable write access watch in region[1]
    +                RGN1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable write access watch in this region
    +                        Disable = 0x0,
    +                        ///  Enable write access watch in this region
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable/disable read access watch in region[1]
    +                RGN1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable read access watch in this region
    +                        Disable = 0x0,
    +                        ///  Enable read access watch in this region
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable/disable write access watch in region[2]
    +                RGN2WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable write access watch in this region
    +                        Disable = 0x0,
    +                        ///  Enable write access watch in this region
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable/disable read access watch in region[2]
    +                RGN2RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable read access watch in this region
    +                        Disable = 0x0,
    +                        ///  Enable read access watch in this region
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable/disable write access watch in region[3]
    +                RGN3WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable write access watch in this region
    +                        Disable = 0x0,
    +                        ///  Enable write access watch in this region
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable/disable read access watch in region[3]
    +                RGN3RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable read access watch in this region
    +                        Disable = 0x0,
    +                        ///  Enable read access watch in this region
    +                        Enable = 0x1,
    +                    },
    +                },
    +                reserved24: u16,
    +                ///  Enable/disable write access watch in PREGION[0]
    +                PRGN0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable write access watch in this PREGION
    +                        Disable = 0x0,
    +                        ///  Enable write access watch in this PREGION
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable/disable read access watch in PREGION[0]
    +                PRGN0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable read access watch in this PREGION
    +                        Disable = 0x0,
    +                        ///  Enable read access watch in this PREGION
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable/disable write access watch in PREGION[1]
    +                PRGN1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable write access watch in this PREGION
    +                        Disable = 0x0,
    +                        ///  Enable write access watch in this PREGION
    +                        Enable = 0x1,
    +                    },
    +                },
    +                ///  Enable/disable read access watch in PREGION[1]
    +                PRGN1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable read access watch in this PREGION
    +                        Disable = 0x0,
    +                        ///  Enable read access watch in this PREGION
    +                        Enable = 0x1,
    +                    },
    +                },
    +                padding: u4,
    +            }),
    +            ///  Enable regions watch
    +            REGIONENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Enable write access watch in region[0]
    +                RGN0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Write access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Write access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable read access watch in region[0]
    +                RGN0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Read access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable write access watch in region[1]
    +                RGN1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Write access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Write access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable read access watch in region[1]
    +                RGN1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Read access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable write access watch in region[2]
    +                RGN2WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Write access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Write access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable read access watch in region[2]
    +                RGN2RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Read access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable write access watch in region[3]
    +                RGN3WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Write access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Write access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable read access watch in region[3]
    +                RGN3RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Read access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved24: u16,
    +                ///  Enable write access watch in PREGION[0]
    +                PRGN0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Write access watch in this PREGION is disabled
    +                        Disabled = 0x0,
    +                        ///  Write access watch in this PREGION is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable read access watch in PREGION[0]
    +                PRGN0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read access watch in this PREGION is disabled
    +                        Disabled = 0x0,
    +                        ///  Read access watch in this PREGION is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable write access watch in PREGION[1]
    +                PRGN1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Write access watch in this PREGION is disabled
    +                        Disabled = 0x0,
    +                        ///  Write access watch in this PREGION is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable read access watch in PREGION[1]
    +                PRGN1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read access watch in this PREGION is disabled
    +                        Disabled = 0x0,
    +                        ///  Read access watch in this PREGION is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u4,
    +            }),
    +            ///  Disable regions watch
    +            REGIONENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Disable write access watch in region[0]
    +                RGN0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Write access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Write access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Disable read access watch in region[0]
    +                RGN0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Read access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Disable write access watch in region[1]
    +                RGN1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Write access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Write access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Disable read access watch in region[1]
    +                RGN1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Read access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Disable write access watch in region[2]
    +                RGN2WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Write access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Write access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Disable read access watch in region[2]
    +                RGN2RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Read access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Disable write access watch in region[3]
    +                RGN3WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Write access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Write access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Disable read access watch in region[3]
    +                RGN3RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read access watch in this region is disabled
    +                        Disabled = 0x0,
    +                        ///  Read access watch in this region is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved24: u16,
    +                ///  Disable write access watch in PREGION[0]
    +                PRGN0WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Write access watch in this PREGION is disabled
    +                        Disabled = 0x0,
    +                        ///  Write access watch in this PREGION is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Disable read access watch in PREGION[0]
    +                PRGN0RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read access watch in this PREGION is disabled
    +                        Disabled = 0x0,
    +                        ///  Read access watch in this PREGION is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Disable write access watch in PREGION[1]
    +                PRGN1WA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Write access watch in this PREGION is disabled
    +                        Disabled = 0x0,
    +                        ///  Write access watch in this PREGION is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Disable read access watch in PREGION[1]
    +                PRGN1RA: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read access watch in this PREGION is disabled
    +                        Disabled = 0x0,
    +                        ///  Read access watch in this PREGION is enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u4,
    +            }),
    +        };
    +
    +        ///  Quadrature Decoder
    +        pub const QDEC = extern struct {
    +            ///  Task starting the quadrature decoder
    +            TASKS_START: mmio.Mmio(packed struct(u32) {
    +                ///  Task starting the quadrature decoder
    +                TASKS_START: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Task stopping the quadrature decoder
    +            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    +                ///  Task stopping the quadrature decoder
    +                TASKS_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Read and clear ACC and ACCDBL
    +            TASKS_READCLRACC: mmio.Mmio(packed struct(u32) {
    +                ///  Read and clear ACC and ACCDBL
    +                TASKS_READCLRACC: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Read and clear ACC
    +            TASKS_RDCLRACC: mmio.Mmio(packed struct(u32) {
    +                ///  Read and clear ACC
    +                TASKS_RDCLRACC: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Read and clear ACCDBL
    +            TASKS_RDCLRDBL: mmio.Mmio(packed struct(u32) {
    +                ///  Read and clear ACCDBL
    +                TASKS_RDCLRDBL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved256: [236]u8,
    +            ///  Event being generated for every new sample value written to the SAMPLE register
    +            EVENTS_SAMPLERDY: mmio.Mmio(packed struct(u32) {
    +                ///  Event being generated for every new sample value written to the SAMPLE register
    +                EVENTS_SAMPLERDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Non-null report ready
    +            EVENTS_REPORTRDY: mmio.Mmio(packed struct(u32) {
    +                ///  Non-null report ready
    +                EVENTS_REPORTRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  ACC or ACCDBL register overflow
    +            EVENTS_ACCOF: mmio.Mmio(packed struct(u32) {
    +                ///  ACC or ACCDBL register overflow
    +                EVENTS_ACCOF: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Double displacement(s) detected
    +            EVENTS_DBLRDY: mmio.Mmio(packed struct(u32) {
    +                ///  Double displacement(s) detected
    +                EVENTS_DBLRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  QDEC has been stopped
    +            EVENTS_STOPPED: mmio.Mmio(packed struct(u32) {
    +                ///  QDEC has been stopped
    +                EVENTS_STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved512: [236]u8,
    +            ///  Shortcuts between local events and tasks
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                ///  Shortcut between event REPORTRDY and task READCLRACC
    +                REPORTRDY_READCLRACC: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event SAMPLERDY and task STOP
    +                SAMPLERDY_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event REPORTRDY and task RDCLRACC
    +                REPORTRDY_RDCLRACC: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event REPORTRDY and task STOP
    +                REPORTRDY_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event DBLRDY and task RDCLRDBL
    +                DBLRDY_RDCLRDBL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event DBLRDY and task STOP
    +                DBLRDY_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event SAMPLERDY and task READCLRACC
    +                SAMPLERDY_READCLRACC: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u25,
    +            }),
    +            reserved772: [256]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to enable interrupt for event SAMPLERDY
    +                SAMPLERDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event REPORTRDY
    +                REPORTRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event ACCOF
    +                ACCOF: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event DBLRDY
    +                DBLRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event STOPPED
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u27,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to disable interrupt for event SAMPLERDY
    +                SAMPLERDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event REPORTRDY
    +                REPORTRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event ACCOF
    +                ACCOF: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event DBLRDY
    +                DBLRDY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event STOPPED
    +                STOPPED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u27,
    +            }),
    +            reserved1280: [500]u8,
    +            ///  Enable the quadrature decoder
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable the quadrature decoder
    +                ENABLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  LED output pin polarity
    +            LEDPOL: mmio.Mmio(packed struct(u32) {
    +                ///  LED output pin polarity
    +                LEDPOL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Led active on output pin low
    +                        ActiveLow = 0x0,
    +                        ///  Led active on output pin high
    +                        ActiveHigh = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Sample period
    +            SAMPLEPER: mmio.Mmio(packed struct(u32) {
    +                ///  Sample period. The SAMPLE register will be updated for every new sample
    +                SAMPLEPER: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  128 us
    +                        @"128us" = 0x0,
    +                        ///  256 us
    +                        @"256us" = 0x1,
    +                        ///  512 us
    +                        @"512us" = 0x2,
    +                        ///  1024 us
    +                        @"1024us" = 0x3,
    +                        ///  2048 us
    +                        @"2048us" = 0x4,
    +                        ///  4096 us
    +                        @"4096us" = 0x5,
    +                        ///  8192 us
    +                        @"8192us" = 0x6,
    +                        ///  16384 us
    +                        @"16384us" = 0x7,
    +                        ///  32768 us
    +                        @"32ms" = 0x8,
    +                        ///  65536 us
    +                        @"65ms" = 0x9,
    +                        ///  131072 us
    +                        @"131ms" = 0xa,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            ///  Motion sample value
    +            SAMPLE: mmio.Mmio(packed struct(u32) {
    +                ///  Last motion sample
    +                SAMPLE: u32,
    +            }),
    +            ///  Number of samples to be taken before REPORTRDY and DBLRDY events can be generated
    +            REPORTPER: mmio.Mmio(packed struct(u32) {
    +                ///  Specifies the number of samples to be accumulated in the ACC register before the REPORTRDY and DBLRDY events can be generated
    +                REPORTPER: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  10 samples / report
    +                        @"10Smpl" = 0x0,
    +                        ///  40 samples / report
    +                        @"40Smpl" = 0x1,
    +                        ///  80 samples / report
    +                        @"80Smpl" = 0x2,
    +                        ///  120 samples / report
    +                        @"120Smpl" = 0x3,
    +                        ///  160 samples / report
    +                        @"160Smpl" = 0x4,
    +                        ///  200 samples / report
    +                        @"200Smpl" = 0x5,
    +                        ///  240 samples / report
    +                        @"240Smpl" = 0x6,
    +                        ///  280 samples / report
    +                        @"280Smpl" = 0x7,
    +                        ///  1 sample / report
    +                        @"1Smpl" = 0x8,
    +                        _,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            ///  Register accumulating the valid transitions
    +            ACC: mmio.Mmio(packed struct(u32) {
    +                ///  Register accumulating all valid samples (not double transition) read from the SAMPLE register
    +                ACC: u32,
    +            }),
    +            ///  Snapshot of the ACC register, updated by the READCLRACC or RDCLRACC task
    +            ACCREAD: mmio.Mmio(packed struct(u32) {
    +                ///  Snapshot of the ACC register.
    +                ACCREAD: u32,
    +            }),
    +            reserved1320: [12]u8,
    +            ///  Enable input debounce filters
    +            DBFEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable input debounce filters
    +                DBFEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Debounce input filters disabled
    +                        Disabled = 0x0,
    +                        ///  Debounce input filters enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1344: [20]u8,
    +            ///  Time period the LED is switched ON prior to sampling
    +            LEDPRE: mmio.Mmio(packed struct(u32) {
    +                ///  Period in us the LED is switched on prior to sampling
    +                LEDPRE: u9,
    +                padding: u23,
    +            }),
    +            ///  Register accumulating the number of detected double transitions
    +            ACCDBL: mmio.Mmio(packed struct(u32) {
    +                ///  Register accumulating the number of detected double or illegal transitions. ( SAMPLE = 2 ).
    +                ACCDBL: u4,
    +                padding: u28,
    +            }),
    +            ///  Snapshot of the ACCDBL, updated by the READCLRACC or RDCLRDBL task
    +            ACCDBLREAD: mmio.Mmio(packed struct(u32) {
    +                ///  Snapshot of the ACCDBL register. This field is updated when the READCLRACC or RDCLRDBL task is triggered.
    +                ACCDBLREAD: u4,
    +                padding: u28,
    +            }),
    +        };
    +
    +        ///  Comparator
    +        pub const COMP = extern struct {
    +            ///  Start comparator
    +            TASKS_START: mmio.Mmio(packed struct(u32) {
    +                ///  Start comparator
    +                TASKS_START: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Stop comparator
    +            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    +                ///  Stop comparator
    +                TASKS_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Sample comparator value
    +            TASKS_SAMPLE: mmio.Mmio(packed struct(u32) {
    +                ///  Sample comparator value
    +                TASKS_SAMPLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved256: [244]u8,
    +            ///  COMP is ready and output is valid
    +            EVENTS_READY: mmio.Mmio(packed struct(u32) {
    +                ///  COMP is ready and output is valid
    +                EVENTS_READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Downward crossing
    +            EVENTS_DOWN: mmio.Mmio(packed struct(u32) {
    +                ///  Downward crossing
    +                EVENTS_DOWN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Upward crossing
    +            EVENTS_UP: mmio.Mmio(packed struct(u32) {
    +                ///  Upward crossing
    +                EVENTS_UP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Downward or upward crossing
    +            EVENTS_CROSS: mmio.Mmio(packed struct(u32) {
    +                ///  Downward or upward crossing
    +                EVENTS_CROSS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved512: [240]u8,
    +            ///  Shortcuts between local events and tasks
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                ///  Shortcut between event READY and task SAMPLE
    +                READY_SAMPLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event READY and task STOP
    +                READY_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event DOWN and task STOP
    +                DOWN_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event UP and task STOP
    +                UP_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event CROSS and task STOP
    +                CROSS_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u27,
    +            }),
    +            reserved768: [252]u8,
    +            ///  Enable or disable interrupt
    +            INTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable interrupt for event READY
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event DOWN
    +                DOWN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event UP
    +                UP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event CROSS
    +                CROSS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to enable interrupt for event READY
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event DOWN
    +                DOWN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event UP
    +                UP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event CROSS
    +                CROSS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to disable interrupt for event READY
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event DOWN
    +                DOWN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event UP
    +                UP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event CROSS
    +                CROSS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1024: [244]u8,
    +            ///  Compare result
    +            RESULT: mmio.Mmio(packed struct(u32) {
    +                ///  Result of last compare. Decision point SAMPLE task.
    +                RESULT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Input voltage is below the threshold (VIN+ < VIN-)
    +                        Below = 0x0,
    +                        ///  Input voltage is above the threshold (VIN+ > VIN-)
    +                        Above = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1280: [252]u8,
    +            ///  COMP enable
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable COMP
    +                ENABLE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x2,
    +                        _,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            ///  Pin select
    +            PSEL: mmio.Mmio(packed struct(u32) {
    +                ///  Analog pin select
    +                PSEL: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        ///  AIN0 selected as analog input
    +                        AnalogInput0 = 0x0,
    +                        ///  AIN1 selected as analog input
    +                        AnalogInput1 = 0x1,
    +                        ///  AIN2 selected as analog input
    +                        AnalogInput2 = 0x2,
    +                        ///  AIN3 selected as analog input
    +                        AnalogInput3 = 0x3,
    +                        ///  AIN4 selected as analog input
    +                        AnalogInput4 = 0x4,
    +                        ///  AIN5 selected as analog input
    +                        AnalogInput5 = 0x5,
    +                        ///  AIN6 selected as analog input
    +                        AnalogInput6 = 0x6,
    +                        ///  AIN7 selected as analog input
    +                        AnalogInput7 = 0x7,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            ///  Reference source select for single-ended mode
    +            REFSEL: mmio.Mmio(packed struct(u32) {
    +                ///  Reference select
    +                REFSEL: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        ///  VREF = internal 1.2 V reference (VDD >= 1.7 V)
    +                        Int1V2 = 0x0,
    +                        ///  VREF = internal 1.8 V reference (VDD >= VREF + 0.2 V)
    +                        Int1V8 = 0x1,
    +                        ///  VREF = internal 2.4 V reference (VDD >= VREF + 0.2 V)
    +                        Int2V4 = 0x2,
    +                        ///  VREF = VDD
    +                        VDD = 0x4,
    +                        ///  VREF = AREF (VDD >= VREF >= AREFMIN)
    +                        ARef = 0x5,
    +                        _,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            ///  External reference select
    +            EXTREFSEL: mmio.Mmio(packed struct(u32) {
    +                ///  External analog reference select
    +                EXTREFSEL: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        ///  Use AIN0 as external analog reference
    +                        AnalogReference0 = 0x0,
    +                        ///  Use AIN1 as external analog reference
    +                        AnalogReference1 = 0x1,
    +                        ///  Use AIN2 as external analog reference
    +                        AnalogReference2 = 0x2,
    +                        ///  Use AIN3 as external analog reference
    +                        AnalogReference3 = 0x3,
    +                        ///  Use AIN4 as external analog reference
    +                        AnalogReference4 = 0x4,
    +                        ///  Use AIN5 as external analog reference
    +                        AnalogReference5 = 0x5,
    +                        ///  Use AIN6 as external analog reference
    +                        AnalogReference6 = 0x6,
    +                        ///  Use AIN7 as external analog reference
    +                        AnalogReference7 = 0x7,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            reserved1328: [32]u8,
    +            ///  Threshold configuration for hysteresis unit
    +            TH: mmio.Mmio(packed struct(u32) {
    +                ///  VDOWN = (THDOWN+1)/64*VREF
    +                THDOWN: u6,
    +                reserved8: u2,
    +                ///  VUP = (THUP+1)/64*VREF
    +                THUP: u6,
    +                padding: u18,
    +            }),
    +            ///  Mode configuration
    +            MODE: mmio.Mmio(packed struct(u32) {
    +                ///  Speed and power modes
    +                SP: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Low-power mode
    +                        Low = 0x0,
    +                        ///  Normal mode
    +                        Normal = 0x1,
    +                        ///  High-speed mode
    +                        High = 0x2,
    +                        _,
    +                    },
    +                },
    +                reserved8: u6,
    +                ///  Main operation modes
    +                MAIN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Single-ended mode
    +                        SE = 0x0,
    +                        ///  Differential mode
    +                        Diff = 0x1,
    +                    },
    +                },
    +                padding: u23,
    +            }),
    +            ///  Comparator hysteresis enable
    +            HYST: mmio.Mmio(packed struct(u32) {
    +                ///  Comparator hysteresis
    +                HYST: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Comparator hysteresis disabled
    +                        NoHyst = 0x0,
    +                        ///  Comparator hysteresis enabled
    +                        Hyst50mV = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +        };
    +
    +        ///  Low Power Comparator
    +        pub const LPCOMP = extern struct {
    +            ///  Start comparator
    +            TASKS_START: mmio.Mmio(packed struct(u32) {
    +                ///  Start comparator
    +                TASKS_START: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Stop comparator
    +            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    +                ///  Stop comparator
    +                TASKS_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Sample comparator value
    +            TASKS_SAMPLE: mmio.Mmio(packed struct(u32) {
    +                ///  Sample comparator value
    +                TASKS_SAMPLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved256: [244]u8,
    +            ///  LPCOMP is ready and output is valid
    +            EVENTS_READY: mmio.Mmio(packed struct(u32) {
    +                ///  LPCOMP is ready and output is valid
    +                EVENTS_READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Downward crossing
    +            EVENTS_DOWN: mmio.Mmio(packed struct(u32) {
    +                ///  Downward crossing
    +                EVENTS_DOWN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Upward crossing
    +            EVENTS_UP: mmio.Mmio(packed struct(u32) {
    +                ///  Upward crossing
    +                EVENTS_UP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Downward or upward crossing
    +            EVENTS_CROSS: mmio.Mmio(packed struct(u32) {
    +                ///  Downward or upward crossing
    +                EVENTS_CROSS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved512: [240]u8,
    +            ///  Shortcuts between local events and tasks
    +            SHORTS: mmio.Mmio(packed struct(u32) {
    +                ///  Shortcut between event READY and task SAMPLE
    +                READY_SAMPLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event READY and task STOP
    +                READY_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event DOWN and task STOP
    +                DOWN_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event UP and task STOP
    +                UP_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Shortcut between event CROSS and task STOP
    +                CROSS_STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable shortcut
    +                        Disabled = 0x0,
    +                        ///  Enable shortcut
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u27,
    +            }),
    +            reserved772: [256]u8,
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to enable interrupt for event READY
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event DOWN
    +                DOWN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event UP
    +                UP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event CROSS
    +                CROSS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to disable interrupt for event READY
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event DOWN
    +                DOWN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event UP
    +                UP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event CROSS
    +                CROSS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            reserved1024: [244]u8,
    +            ///  Compare result
    +            RESULT: mmio.Mmio(packed struct(u32) {
    +                ///  Result of last compare. Decision point SAMPLE task.
    +                RESULT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Input voltage is below the reference threshold (VIN+ < VIN-).
    +                        Below = 0x0,
    +                        ///  Input voltage is above the reference threshold (VIN+ > VIN-).
    +                        Above = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1280: [252]u8,
    +            ///  Enable LPCOMP
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable LPCOMP
    +                ENABLE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            ///  Input pin select
    +            PSEL: mmio.Mmio(packed struct(u32) {
    +                ///  Analog pin select
    +                PSEL: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        ///  AIN0 selected as analog input
    +                        AnalogInput0 = 0x0,
    +                        ///  AIN1 selected as analog input
    +                        AnalogInput1 = 0x1,
    +                        ///  AIN2 selected as analog input
    +                        AnalogInput2 = 0x2,
    +                        ///  AIN3 selected as analog input
    +                        AnalogInput3 = 0x3,
    +                        ///  AIN4 selected as analog input
    +                        AnalogInput4 = 0x4,
    +                        ///  AIN5 selected as analog input
    +                        AnalogInput5 = 0x5,
    +                        ///  AIN6 selected as analog input
    +                        AnalogInput6 = 0x6,
    +                        ///  AIN7 selected as analog input
    +                        AnalogInput7 = 0x7,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            ///  Reference select
    +            REFSEL: mmio.Mmio(packed struct(u32) {
    +                ///  Reference select
    +                REFSEL: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  VDD * 1/8 selected as reference
    +                        Ref1_8Vdd = 0x0,
    +                        ///  VDD * 2/8 selected as reference
    +                        Ref2_8Vdd = 0x1,
    +                        ///  VDD * 3/8 selected as reference
    +                        Ref3_8Vdd = 0x2,
    +                        ///  VDD * 4/8 selected as reference
    +                        Ref4_8Vdd = 0x3,
    +                        ///  VDD * 5/8 selected as reference
    +                        Ref5_8Vdd = 0x4,
    +                        ///  VDD * 6/8 selected as reference
    +                        Ref6_8Vdd = 0x5,
    +                        ///  VDD * 7/8 selected as reference
    +                        Ref7_8Vdd = 0x6,
    +                        ///  External analog reference selected
    +                        ARef = 0x7,
    +                        ///  VDD * 1/16 selected as reference
    +                        Ref1_16Vdd = 0x8,
    +                        ///  VDD * 3/16 selected as reference
    +                        Ref3_16Vdd = 0x9,
    +                        ///  VDD * 5/16 selected as reference
    +                        Ref5_16Vdd = 0xa,
    +                        ///  VDD * 7/16 selected as reference
    +                        Ref7_16Vdd = 0xb,
    +                        ///  VDD * 9/16 selected as reference
    +                        Ref9_16Vdd = 0xc,
    +                        ///  VDD * 11/16 selected as reference
    +                        Ref11_16Vdd = 0xd,
    +                        ///  VDD * 13/16 selected as reference
    +                        Ref13_16Vdd = 0xe,
    +                        ///  VDD * 15/16 selected as reference
    +                        Ref15_16Vdd = 0xf,
    +                    },
    +                },
    +                padding: u28,
    +            }),
    +            ///  External reference select
    +            EXTREFSEL: mmio.Mmio(packed struct(u32) {
    +                ///  External analog reference select
    +                EXTREFSEL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Use AIN0 as external analog reference
    +                        AnalogReference0 = 0x0,
    +                        ///  Use AIN1 as external analog reference
    +                        AnalogReference1 = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1312: [16]u8,
    +            ///  Analog detect configuration
    +            ANADETECT: mmio.Mmio(packed struct(u32) {
    +                ///  Analog detect configuration
    +                ANADETECT: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Generate ANADETECT on crossing, both upward crossing and downward crossing
    +                        Cross = 0x0,
    +                        ///  Generate ANADETECT on upward crossing only
    +                        Up = 0x1,
    +                        ///  Generate ANADETECT on downward crossing only
    +                        Down = 0x2,
    +                        _,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            reserved1336: [20]u8,
    +            ///  Comparator hysteresis enable
    +            HYST: mmio.Mmio(packed struct(u32) {
    +                ///  Comparator hysteresis enable
    +                HYST: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Comparator hysteresis disabled
    +                        Disabled = 0x0,
    +                        ///  Comparator hysteresis enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +        };
    +
    +        ///  Event Generator Unit 0
    +        pub const EGU0 = extern struct {
    +            ///  Description collection: Trigger n for triggering the corresponding TRIGGERED[n] event
    +            TASKS_TRIGGER: [16]mmio.Mmio(packed struct(u32) {
    +                ///  Trigger n for triggering the corresponding TRIGGERED[n] event
    +                TASKS_TRIGGER: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Trigger task
    +                        Trigger = 0x1,
    +                        _,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved256: [192]u8,
    +            ///  Description collection: Event number n generated by triggering the corresponding TRIGGER[n] task
    +            EVENTS_TRIGGERED: [16]mmio.Mmio(packed struct(u32) {
    +                ///  Event number n generated by triggering the corresponding TRIGGER[n] task
    +                EVENTS_TRIGGERED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Event not generated
    +                        NotGenerated = 0x0,
    +                        ///  Event generated
    +                        Generated = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved768: [448]u8,
    +            ///  Enable or disable interrupt
    +            INTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable interrupt for event TRIGGERED[0]
    +                TRIGGERED0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event TRIGGERED[1]
    +                TRIGGERED1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event TRIGGERED[2]
    +                TRIGGERED2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event TRIGGERED[3]
    +                TRIGGERED3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event TRIGGERED[4]
    +                TRIGGERED4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event TRIGGERED[5]
    +                TRIGGERED5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event TRIGGERED[6]
    +                TRIGGERED6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event TRIGGERED[7]
    +                TRIGGERED7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event TRIGGERED[8]
    +                TRIGGERED8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event TRIGGERED[9]
    +                TRIGGERED9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event TRIGGERED[10]
    +                TRIGGERED10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event TRIGGERED[11]
    +                TRIGGERED11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event TRIGGERED[12]
    +                TRIGGERED12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event TRIGGERED[13]
    +                TRIGGERED13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event TRIGGERED[14]
    +                TRIGGERED14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable interrupt for event TRIGGERED[15]
    +                TRIGGERED15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable
    +                        Disabled = 0x0,
    +                        ///  Enable
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u16,
    +            }),
    +            ///  Enable interrupt
    +            INTENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to enable interrupt for event TRIGGERED[0]
    +                TRIGGERED0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event TRIGGERED[1]
    +                TRIGGERED1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event TRIGGERED[2]
    +                TRIGGERED2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event TRIGGERED[3]
    +                TRIGGERED3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event TRIGGERED[4]
    +                TRIGGERED4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event TRIGGERED[5]
    +                TRIGGERED5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event TRIGGERED[6]
    +                TRIGGERED6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event TRIGGERED[7]
    +                TRIGGERED7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event TRIGGERED[8]
    +                TRIGGERED8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event TRIGGERED[9]
    +                TRIGGERED9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event TRIGGERED[10]
    +                TRIGGERED10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event TRIGGERED[11]
    +                TRIGGERED11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event TRIGGERED[12]
    +                TRIGGERED12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event TRIGGERED[13]
    +                TRIGGERED13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event TRIGGERED[14]
    +                TRIGGERED14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to enable interrupt for event TRIGGERED[15]
    +                TRIGGERED15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u16,
    +            }),
    +            ///  Disable interrupt
    +            INTENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Write '1' to disable interrupt for event TRIGGERED[0]
    +                TRIGGERED0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event TRIGGERED[1]
    +                TRIGGERED1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event TRIGGERED[2]
    +                TRIGGERED2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event TRIGGERED[3]
    +                TRIGGERED3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event TRIGGERED[4]
    +                TRIGGERED4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event TRIGGERED[5]
    +                TRIGGERED5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event TRIGGERED[6]
    +                TRIGGERED6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event TRIGGERED[7]
    +                TRIGGERED7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event TRIGGERED[8]
    +                TRIGGERED8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event TRIGGERED[9]
    +                TRIGGERED9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event TRIGGERED[10]
    +                TRIGGERED10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event TRIGGERED[11]
    +                TRIGGERED11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event TRIGGERED[12]
    +                TRIGGERED12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event TRIGGERED[13]
    +                TRIGGERED13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event TRIGGERED[14]
    +                TRIGGERED14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Write '1' to disable interrupt for event TRIGGERED[15]
    +                TRIGGERED15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: Disabled
    +                        Disabled = 0x0,
    +                        ///  Read: Enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u16,
    +            }),
    +        };
    +
    +        ///  Software interrupt 0
    +        pub const SWI0 = extern struct {
    +            ///  Unused.
    +            UNUSED: u32,
    +        };
    +
    +        ///  Programmable Peripheral Interconnect
    +        pub const PPI = extern struct {
    +            reserved1280: [1280]u8,
    +            ///  Channel enable register
    +            CHEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable or disable channel 0
    +                CH0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 1
    +                CH1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 2
    +                CH2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 3
    +                CH3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 4
    +                CH4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 5
    +                CH5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 6
    +                CH6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 7
    +                CH7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 8
    +                CH8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 9
    +                CH9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 10
    +                CH10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 11
    +                CH11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 12
    +                CH12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 13
    +                CH13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 14
    +                CH14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 15
    +                CH15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 16
    +                CH16: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 17
    +                CH17: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 18
    +                CH18: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 19
    +                CH19: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 20
    +                CH20: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 21
    +                CH21: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 22
    +                CH22: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 23
    +                CH23: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 24
    +                CH24: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 25
    +                CH25: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 26
    +                CH26: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 27
    +                CH27: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 28
    +                CH28: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 29
    +                CH29: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 30
    +                CH30: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Enable or disable channel 31
    +                CH31: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable channel
    +                        Disabled = 0x0,
    +                        ///  Enable channel
    +                        Enabled = 0x1,
    +                    },
    +                },
    +            }),
    +            ///  Channel enable set register
    +            CHENSET: mmio.Mmio(packed struct(u32) {
    +                ///  Channel 0 enable set register. Writing '0' has no effect
    +                CH0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 1 enable set register. Writing '0' has no effect
    +                CH1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 2 enable set register. Writing '0' has no effect
    +                CH2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 3 enable set register. Writing '0' has no effect
    +                CH3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 4 enable set register. Writing '0' has no effect
    +                CH4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 5 enable set register. Writing '0' has no effect
    +                CH5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 6 enable set register. Writing '0' has no effect
    +                CH6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 7 enable set register. Writing '0' has no effect
    +                CH7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 8 enable set register. Writing '0' has no effect
    +                CH8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 9 enable set register. Writing '0' has no effect
    +                CH9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 10 enable set register. Writing '0' has no effect
    +                CH10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 11 enable set register. Writing '0' has no effect
    +                CH11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 12 enable set register. Writing '0' has no effect
    +                CH12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 13 enable set register. Writing '0' has no effect
    +                CH13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 14 enable set register. Writing '0' has no effect
    +                CH14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 15 enable set register. Writing '0' has no effect
    +                CH15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 16 enable set register. Writing '0' has no effect
    +                CH16: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 17 enable set register. Writing '0' has no effect
    +                CH17: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 18 enable set register. Writing '0' has no effect
    +                CH18: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 19 enable set register. Writing '0' has no effect
    +                CH19: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 20 enable set register. Writing '0' has no effect
    +                CH20: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 21 enable set register. Writing '0' has no effect
    +                CH21: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 22 enable set register. Writing '0' has no effect
    +                CH22: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 23 enable set register. Writing '0' has no effect
    +                CH23: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 24 enable set register. Writing '0' has no effect
    +                CH24: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 25 enable set register. Writing '0' has no effect
    +                CH25: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 26 enable set register. Writing '0' has no effect
    +                CH26: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 27 enable set register. Writing '0' has no effect
    +                CH27: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 28 enable set register. Writing '0' has no effect
    +                CH28: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 29 enable set register. Writing '0' has no effect
    +                CH29: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 30 enable set register. Writing '0' has no effect
    +                CH30: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 31 enable set register. Writing '0' has no effect
    +                CH31: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +            }),
    +            ///  Channel enable clear register
    +            CHENCLR: mmio.Mmio(packed struct(u32) {
    +                ///  Channel 0 enable clear register. Writing '0' has no effect
    +                CH0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 1 enable clear register. Writing '0' has no effect
    +                CH1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 2 enable clear register. Writing '0' has no effect
    +                CH2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 3 enable clear register. Writing '0' has no effect
    +                CH3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 4 enable clear register. Writing '0' has no effect
    +                CH4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 5 enable clear register. Writing '0' has no effect
    +                CH5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 6 enable clear register. Writing '0' has no effect
    +                CH6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 7 enable clear register. Writing '0' has no effect
    +                CH7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 8 enable clear register. Writing '0' has no effect
    +                CH8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 9 enable clear register. Writing '0' has no effect
    +                CH9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 10 enable clear register. Writing '0' has no effect
    +                CH10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 11 enable clear register. Writing '0' has no effect
    +                CH11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 12 enable clear register. Writing '0' has no effect
    +                CH12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 13 enable clear register. Writing '0' has no effect
    +                CH13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 14 enable clear register. Writing '0' has no effect
    +                CH14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 15 enable clear register. Writing '0' has no effect
    +                CH15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 16 enable clear register. Writing '0' has no effect
    +                CH16: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 17 enable clear register. Writing '0' has no effect
    +                CH17: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 18 enable clear register. Writing '0' has no effect
    +                CH18: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 19 enable clear register. Writing '0' has no effect
    +                CH19: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 20 enable clear register. Writing '0' has no effect
    +                CH20: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 21 enable clear register. Writing '0' has no effect
    +                CH21: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 22 enable clear register. Writing '0' has no effect
    +                CH22: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 23 enable clear register. Writing '0' has no effect
    +                CH23: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 24 enable clear register. Writing '0' has no effect
    +                CH24: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 25 enable clear register. Writing '0' has no effect
    +                CH25: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 26 enable clear register. Writing '0' has no effect
    +                CH26: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 27 enable clear register. Writing '0' has no effect
    +                CH27: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 28 enable clear register. Writing '0' has no effect
    +                CH28: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 29 enable clear register. Writing '0' has no effect
    +                CH29: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 30 enable clear register. Writing '0' has no effect
    +                CH30: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                ///  Channel 31 enable clear register. Writing '0' has no effect
    +                CH31: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Read: channel disabled
    +                        Disabled = 0x0,
    +                        ///  Read: channel enabled
    +                        Enabled = 0x1,
    +                    },
    +                },
    +            }),
    +            reserved2048: [756]u8,
    +            ///  Description collection: Channel group n
    +            CHG: [6]mmio.Mmio(packed struct(u32) {
    +                ///  Include or exclude channel 0
    +                CH0: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 1
    +                CH1: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 2
    +                CH2: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 3
    +                CH3: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 4
    +                CH4: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 5
    +                CH5: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 6
    +                CH6: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 7
    +                CH7: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 8
    +                CH8: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 9
    +                CH9: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 10
    +                CH10: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 11
    +                CH11: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 12
    +                CH12: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 13
    +                CH13: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 14
    +                CH14: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 15
    +                CH15: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 16
    +                CH16: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 17
    +                CH17: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 18
    +                CH18: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 19
    +                CH19: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 20
    +                CH20: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 21
    +                CH21: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 22
    +                CH22: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 23
    +                CH23: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 24
    +                CH24: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 25
    +                CH25: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 26
    +                CH26: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 27
    +                CH27: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 28
    +                CH28: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 29
    +                CH29: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 30
    +                CH30: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +                ///  Include or exclude channel 31
    +                CH31: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Exclude
    +                        Excluded = 0x0,
    +                        ///  Include
    +                        Included = 0x1,
    +                    },
    +                },
    +            }),
    +        };
    +
    +        ///  Non Volatile Memory Controller
    +        pub const NVMC = extern struct {
    +            reserved1024: [1024]u8,
    +            ///  Ready flag
    +            READY: mmio.Mmio(packed struct(u32) {
    +                ///  NVMC is ready or busy
    +                READY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  NVMC is busy (on-going write or erase operation)
    +                        Busy = 0x0,
    +                        ///  NVMC is ready
    +                        Ready = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1032: [4]u8,
    +            ///  Ready flag
    +            READYNEXT: mmio.Mmio(packed struct(u32) {
    +                ///  NVMC can accept a new write operation
    +                READYNEXT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  NVMC cannot accept any write operation
    +                        Busy = 0x0,
    +                        ///  NVMC is ready
    +                        Ready = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            reserved1284: [248]u8,
    +            ///  Configuration register
    +            CONFIG: mmio.Mmio(packed struct(u32) {
    +                ///  Program memory access mode. It is strongly recommended to only activate erase and write modes when they are actively used. Enabling write or erase will invalidate the cache and keep it invalidated.
    +                WEN: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Read only access
    +                        Ren = 0x0,
    +                        ///  Write enabled
    +                        Wen = 0x1,
    +                        ///  Erase enabled
    +                        Een = 0x2,
    +                        _,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            ///  Register for erasing a page in code area
    +            ERASEPAGE: mmio.Mmio(packed struct(u32) {
    +                ///  Register for starting erase of a page in code area
    +                ERASEPAGE: u32,
    +            }),
    +            ///  Register for erasing all non-volatile user memory
    +            ERASEALL: mmio.Mmio(packed struct(u32) {
    +                ///  Erase all non-volatile memory including UICR registers. Note that the erase must be enabled using CONFIG.WEN before the non-volatile memory can be erased.
    +                ERASEALL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  No operation
    +                        NoOperation = 0x0,
    +                        ///  Start chip erase
    +                        Erase = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Deprecated register - Register for erasing a page in code area. Equivalent to ERASEPAGE.
    +            ERASEPCR0: mmio.Mmio(packed struct(u32) {
    +                ///  Register for starting erase of a page in code area. Equivalent to ERASEPAGE.
    +                ERASEPCR0: u32,
    +            }),
    +            ///  Register for erasing user information configuration registers
    +            ERASEUICR: mmio.Mmio(packed struct(u32) {
    +                ///  Register starting erase of all user information configuration registers. Note that the erase must be enabled using CONFIG.WEN before the UICR can be erased.
    +                ERASEUICR: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  No operation
    +                        NoOperation = 0x0,
    +                        ///  Start erase of UICR
    +                        Erase = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Register for partial erase of a page in code area
    +            ERASEPAGEPARTIAL: mmio.Mmio(packed struct(u32) {
    +                ///  Register for starting partial erase of a page in code area
    +                ERASEPAGEPARTIAL: u32,
    +            }),
    +            ///  Register for partial erase configuration
    +            ERASEPAGEPARTIALCFG: mmio.Mmio(packed struct(u32) {
    +                ///  Duration of the partial erase in milliseconds
    +                DURATION: u7,
    +                padding: u25,
    +            }),
    +            reserved1344: [32]u8,
    +            ///  I-code cache configuration register.
    +            ICACHECNF: mmio.Mmio(packed struct(u32) {
    +                ///  Cache enable
    +                CACHEEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable cache. Invalidates all cache entries.
    +                        Disabled = 0x0,
    +                        ///  Enable cache
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                reserved8: u7,
    +                ///  Cache profiling enable
    +                CACHEPROFEN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disable cache profiling
    +                        Disabled = 0x0,
    +                        ///  Enable cache profiling
    +                        Enabled = 0x1,
    +                    },
    +                },
    +                padding: u23,
    +            }),
    +            reserved1352: [4]u8,
    +            ///  I-code cache hit counter.
    +            IHIT: mmio.Mmio(packed struct(u32) {
    +                ///  Number of cache hits
    +                HITS: u32,
    +            }),
    +            ///  I-code cache miss counter.
    +            IMISS: mmio.Mmio(packed struct(u32) {
    +                ///  Number of cache misses
    +                MISSES: u32,
    +            }),
    +        };
    +    };
    +};
    diff --git a/test/nrf52840.robot b/test/nrf52840.robot
    new file mode 100644
    index 000000000..28c77fe96
    --- /dev/null
    +++ b/test/nrf52840.robot
    @@ -0,0 +1,10 @@
    +*** Settings ***
    +Suite Setup     Setup
    +Suite Teardown  Teardown
    +Test Teardown   Test Teardown
    +Resource        ${RENODEKEYWORDS}
    +
    +*** Test Cases ***
    +Should Print Help
    +    ${x}=  Execute Command     help
    +           Should Contain      ${x}    Available commands:
    diff --git a/test/programs/minimal.zig b/test/programs/minimal.zig
    new file mode 100644
    index 000000000..5258ce311
    --- /dev/null
    +++ b/test/programs/minimal.zig
    @@ -0,0 +1,5 @@
    +const micro = @import("microzig");
    +
    +pub fn main() void {
    +    // This function will contain the application logic.
    +}
    
    From 4eba908bd2e18bb23a3112d95013a65628bbecd1 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sat, 18 Feb 2023 11:54:04 -0500
    Subject: [PATCH 039/286] migrate code from microzig repo (#1)
    
    * migrate code from microzig repo
    
    * move robot file
    
    * add microzig submodule
    
    * add chips to build
    
    * add buildkite pipeline
    
    * try listing boards
    
    * change board names
    
    * revert pipeline
    ---
     .buildkite/pipeline.yml            |     6 +
     .gitignore                         |     2 +
     .gitmodules                        |     3 +
     README.adoc                        |     2 +-
     build.zig                          |    35 +
     deps/microzig                      |     1 +
     src/boards.zig                     |    35 +
     src/boards/STM3240G_EVAL.zig       |    10 +
     src/boards/STM32F3DISCOVERY.zig    |    37 +
     src/boards/STM32F429IDISCOVERY.zig |    12 +
     src/boards/STM32F4DISCOVERY.zig    |    14 +
     src/chips.zig                      |    48 +
     src/chips/STM32F103.json           | 27474 ++++++++++++++
     src/chips/STM32F103.zig            | 10854 ++++++
     src/chips/STM32F303.json           | 33184 +++++++++++++++++
     src/chips/STM32F303.zig            | 13076 +++++++
     src/chips/STM32F407.json           | 50953 ++++++++++++++++++++++++++
     src/chips/STM32F407.zig            | 20004 ++++++++++
     src/chips/STM32F429.json           | 52094 +++++++++++++++++++++++++++
     src/chips/STM32F429.zig            | 20419 +++++++++++
     src/hals/stm32f103.zig             |     0
     src/hals/stm32f303.zig             |   602 +
     src/hals/stm32f407.zig             |   623 +
     src/hals/stm32f429.zig             |    92 +
     test/programs/minimal.zig          |     5 +
     {tests => test}/stm32f103.robot    |     0
     26 files changed, 229584 insertions(+), 1 deletion(-)
     create mode 100644 .buildkite/pipeline.yml
     create mode 100644 .gitignore
     create mode 100644 .gitmodules
     create mode 100644 build.zig
     create mode 160000 deps/microzig
     create mode 100644 src/boards.zig
     create mode 100644 src/boards/STM3240G_EVAL.zig
     create mode 100644 src/boards/STM32F3DISCOVERY.zig
     create mode 100644 src/boards/STM32F429IDISCOVERY.zig
     create mode 100644 src/boards/STM32F4DISCOVERY.zig
     create mode 100644 src/chips.zig
     create mode 100644 src/chips/STM32F103.json
     create mode 100644 src/chips/STM32F103.zig
     create mode 100644 src/chips/STM32F303.json
     create mode 100644 src/chips/STM32F303.zig
     create mode 100644 src/chips/STM32F407.json
     create mode 100644 src/chips/STM32F407.zig
     create mode 100644 src/chips/STM32F429.json
     create mode 100644 src/chips/STM32F429.zig
     create mode 100644 src/hals/stm32f103.zig
     create mode 100644 src/hals/stm32f303.zig
     create mode 100644 src/hals/stm32f407.zig
     create mode 100644 src/hals/stm32f429.zig
     create mode 100644 test/programs/minimal.zig
     rename {tests => test}/stm32f103.robot (100%)
    
    diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml
    new file mode 100644
    index 000000000..ad6d38054
    --- /dev/null
    +++ b/.buildkite/pipeline.yml
    @@ -0,0 +1,6 @@
    +steps:
    +  - group: Build and Test
    +    steps:
    +    - command: zig build
    +    - label: 🔨 Test
    +      command: renode-test test/stm32f103.robot
    diff --git a/.gitignore b/.gitignore
    new file mode 100644
    index 000000000..4c82b07c0
    --- /dev/null
    +++ b/.gitignore
    @@ -0,0 +1,2 @@
    +zig-cache
    +zig-out
    diff --git a/.gitmodules b/.gitmodules
    new file mode 100644
    index 000000000..32e895ccb
    --- /dev/null
    +++ b/.gitmodules
    @@ -0,0 +1,3 @@
    +[submodule "deps/microzig"]
    +	path = deps/microzig
    +	url = https://github.com/ZigEmbeddedGroup/microzig.git
    diff --git a/README.adoc b/README.adoc
    index d3f2f4097..fdee92cc1 100644
    --- a/README.adoc
    +++ b/README.adoc
    @@ -1,6 +1,6 @@
     = stm32
     
    -HAL for stm32 (STMicro) devices
    +HALs and register definitions for stm32 (STMicro) devices
     
     == stm32 boards that renode supports:
     
    diff --git a/build.zig b/build.zig
    new file mode 100644
    index 000000000..3b787fe3f
    --- /dev/null
    +++ b/build.zig
    @@ -0,0 +1,35 @@
    +const std = @import("std");
    +const microzig = @import("deps/microzig/src/main.zig");
    +const boards = @import("src/boards.zig");
    +const chips = @import("src/chips.zig");
    +
    +pub fn build(b: *std.build.Builder) void {
    +    const optimize = b.standardOptimizeOption(.{});
    +    inline for (@typeInfo(boards).Struct.decls) |decl| {
    +        if (!decl.is_pub)
    +            continue;
    +
    +        const exe = microzig.addEmbeddedExecutable(
    +            b,
    +            @field(boards, decl.name).name ++ ".minimal",
    +            "test/programs/minimal.zig",
    +            .{ .board = @field(boards, decl.name) },
    +            .{ .optimize = optimize },
    +        );
    +        exe.install();
    +    }
    +
    +    inline for (@typeInfo(chips).Struct.decls) |decl| {
    +        if (!decl.is_pub)
    +            continue;
    +
    +        const exe = microzig.addEmbeddedExecutable(
    +            b,
    +            @field(chips, decl.name).name ++ ".minimal",
    +            "test/programs/minimal.zig",
    +            .{ .chip = @field(chips, decl.name) },
    +            .{ .optimize = optimize },
    +        );
    +        exe.install();
    +    }
    +}
    diff --git a/deps/microzig b/deps/microzig
    new file mode 160000
    index 000000000..97ca5497d
    --- /dev/null
    +++ b/deps/microzig
    @@ -0,0 +1 @@
    +Subproject commit 97ca5497da0f22d025e18bced9311efed088d893
    diff --git a/src/boards.zig b/src/boards.zig
    new file mode 100644
    index 000000000..13f4c6156
    --- /dev/null
    +++ b/src/boards.zig
    @@ -0,0 +1,35 @@
    +const std = @import("std");
    +const microzig = @import("../deps/microzig/src/main.zig");
    +const Board = microzig.Board;
    +
    +const chips = @import("chips.zig");
    +
    +fn root() []const u8 {
    +    return std.fs.path.dirname(@src().file) orelse unreachable;
    +}
    +
    +const root_path = root() ++ "/";
    +
    +pub const stm32f3discovery = Board{
    +    .name = "STM32F3DISCOVERY",
    +    .source = .{ .path = root_path ++ "boards/STM32F3DISCOVERY.zig" },
    +    .chip = chips.stm32f303vc,
    +};
    +
    +pub const stm32f4discovery = Board{
    +    .name = "STM32F4DISCOVERY",
    +    .source = .{ .path = root_path ++ "boards/STM32F4DISCOVERY.zig" },
    +    .chip = chips.stm32f407vg,
    +};
    +
    +pub const stm3240geval = Board{
    +    .name = "STM3240G_EVAL",
    +    .source = .{ .path = root_path ++ "boards/STM3240G_EVAL.zig" },
    +    .chip = chips.stm32f407vg,
    +};
    +
    +pub const stm32f429idiscovery = Board{
    +    .name = "STM32F429IDISCOVERY",
    +    .source = .{ .path = root_path ++ "boards/STM32F429IDISCOVERY.zig" },
    +    .chip = chips.stm32f429zit6u,
    +};
    diff --git a/src/boards/STM3240G_EVAL.zig b/src/boards/STM3240G_EVAL.zig
    new file mode 100644
    index 000000000..62611421a
    --- /dev/null
    +++ b/src/boards/STM3240G_EVAL.zig
    @@ -0,0 +1,10 @@
    +pub const pin_map = .{
    +    // LD1 green
    +    .LD1 = "PG6",
    +    // LD2 orange
    +    .LD2 = "PG8",
    +    // LD3 red
    +    .LD3 = "PI9",
    +    // LD4 blue
    +    .LD4 = "PC7",
    +};
    diff --git a/src/boards/STM32F3DISCOVERY.zig b/src/boards/STM32F3DISCOVERY.zig
    new file mode 100644
    index 000000000..9394bb8df
    --- /dev/null
    +++ b/src/boards/STM32F3DISCOVERY.zig
    @@ -0,0 +1,37 @@
    +pub const micro = @import("microzig");
    +
    +pub const cpu_frequency = 8_000_000;
    +
    +pub const pin_map = .{
    +    // circle of LEDs, connected to GPIOE bits 8..15
    +
    +    // NW blue
    +    .LD4 = "PE8",
    +    // N red
    +    .LD3 = "PE9",
    +    // NE orange
    +    .LD5 = "PE10",
    +    // E green
    +    .LD7 = "PE11",
    +    // SE blue
    +    .LD9 = "PE12",
    +    // S red
    +    .LD10 = "PE13",
    +    // SW orange
    +    .LD8 = "PE14",
    +    // W green
    +    .LD6 = "PE15",
    +};
    +
    +pub fn debug_write(string: []const u8) void {
    +    const uart1 = micro.core.experimental.Uart(1, .{}).get_or_init(.{
    +        .baud_rate = 9600,
    +        .data_bits = .eight,
    +        .parity = null,
    +        .stop_bits = .one,
    +    }) catch unreachable;
    +
    +    const writer = uart1.writer();
    +    _ = writer.write(string) catch unreachable;
    +    uart1.internal.txflush();
    +}
    diff --git a/src/boards/STM32F429IDISCOVERY.zig b/src/boards/STM32F429IDISCOVERY.zig
    new file mode 100644
    index 000000000..034295a13
    --- /dev/null
    +++ b/src/boards/STM32F429IDISCOVERY.zig
    @@ -0,0 +1,12 @@
    +pub const cpu_frequency = 16_000_000;
    +
    +pub const pin_map = .{
    +    // LEDs, connected to GPIOG bits 13, 14
    +    // green
    +    .LD3 = "PG13",
    +    // red
    +    .LD4 = "PG14",
    +
    +    // User button
    +    .B1 = "PA0",
    +};
    diff --git a/src/boards/STM32F4DISCOVERY.zig b/src/boards/STM32F4DISCOVERY.zig
    new file mode 100644
    index 000000000..062f334af
    --- /dev/null
    +++ b/src/boards/STM32F4DISCOVERY.zig
    @@ -0,0 +1,14 @@
    +pub const pin_map = .{
    +    // LED cross, connected to GPIOD bits 12..15
    +    // N orange
    +    .LD3 = "PD13",
    +    // E red
    +    .LD5 = "PD14",
    +    // S blue
    +    .LD6 = "PD15",
    +    // W green
    +    .LD4 = "PD12",
    +
    +    // User button
    +    .B2 = "PA0",
    +};
    diff --git a/src/chips.zig b/src/chips.zig
    new file mode 100644
    index 000000000..c492323bf
    --- /dev/null
    +++ b/src/chips.zig
    @@ -0,0 +1,48 @@
    +const std = @import("std");
    +const microzig = @import("../deps/microzig/src/main.zig");
    +const Chip = microzig.Chip;
    +const MemoryRegion = microzig.MemoryRegion;
    +
    +fn root_dir() []const u8 {
    +    return std.fs.path.dirname(@src().file) orelse ".";
    +}
    +
    +pub const stm32f103x8 = Chip.from_standard_paths(root_dir(), .{
    +    .name = "STM32F103",
    +    .cpu = microzig.cpus.cortex_m3,
    +    .memory_regions = &.{
    +        MemoryRegion{ .offset = 0x08000000, .length = 64 * 1024, .kind = .flash },
    +        MemoryRegion{ .offset = 0x20000000, .length = 20 * 1024, .kind = .ram },
    +    },
    +});
    +
    +pub const stm32f303vc = Chip.from_standard_paths(root_dir(), .{
    +    .name = "STM32F303",
    +    .cpu = microzig.cpus.cortex_m4,
    +    .memory_regions = &.{
    +        MemoryRegion{ .offset = 0x08000000, .length = 256 * 1024, .kind = .flash },
    +        MemoryRegion{ .offset = 0x20000000, .length = 40 * 1024, .kind = .ram },
    +    },
    +});
    +
    +pub const stm32f407vg = Chip.from_standard_paths(root_dir(), .{
    +    .name = "STM32F407",
    +    .cpu = microzig.cpus.cortex_m4,
    +    .memory_regions = &.{
    +        MemoryRegion{ .offset = 0x08000000, .length = 1024 * 1024, .kind = .flash },
    +        MemoryRegion{ .offset = 0x20000000, .length = 128 * 1024, .kind = .ram },
    +        // CCM RAM
    +        MemoryRegion{ .offset = 0x10000000, .length = 64 * 1024, .kind = .ram },
    +    },
    +});
    +
    +pub const stm32f429zit6u = Chip.from_standard_paths(root_dir(), .{
    +    .name = "STM32F429",
    +    .cpu = microzig.cpus.cortex_m4,
    +    .memory_regions = &.{
    +        MemoryRegion{ .offset = 0x08000000, .length = 2048 * 1024, .kind = .flash },
    +        MemoryRegion{ .offset = 0x20000000, .length = 192 * 1024, .kind = .ram },
    +        // CCM RAM
    +        MemoryRegion{ .offset = 0x10000000, .length = 64 * 1024, .kind = .ram },
    +    },
    +});
    diff --git a/src/chips/STM32F103.json b/src/chips/STM32F103.json
    new file mode 100644
    index 000000000..45b99d177
    --- /dev/null
    +++ b/src/chips/STM32F103.json
    @@ -0,0 +1,27474 @@
    +{
    +  "version": "0.1.0",
    +  "types": {
    +    "peripherals": {
    +      "FSMC": {
    +        "description": "Flexible static memory controller",
    +        "children": {
    +          "registers": {
    +            "BCR1": {
    +              "description": "SRAM/NOR-Flash chip-select control register\n          1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 12496,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CBURSTRW": {
    +                    "description": "CBURSTRW",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "ASYNCWAIT": {
    +                    "description": "ASYNCWAIT",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EXTMOD": {
    +                    "description": "EXTMOD",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "WAITEN": {
    +                    "description": "WAITEN",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "WREN": {
    +                    "description": "WREN",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WAITCFG": {
    +                    "description": "WAITCFG",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "WAITPOL": {
    +                    "description": "WAITPOL",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BURSTEN": {
    +                    "description": "BURSTEN",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FACCEN": {
    +                    "description": "FACCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MWID": {
    +                    "description": "MWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "MTYP": {
    +                    "description": "MTYP",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MUXEN": {
    +                    "description": "MUXEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MBKEN": {
    +                    "description": "MBKEN",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BTR1": {
    +              "description": "SRAM/NOR-Flash chip-select timing register\n          1",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "BUSTURN": {
    +                    "description": "BUSTURN",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "BCR2": {
    +              "description": "SRAM/NOR-Flash chip-select control register\n          2",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 12496,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CBURSTRW": {
    +                    "description": "CBURSTRW",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "ASYNCWAIT": {
    +                    "description": "ASYNCWAIT",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EXTMOD": {
    +                    "description": "EXTMOD",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "WAITEN": {
    +                    "description": "WAITEN",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "WREN": {
    +                    "description": "WREN",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WAITCFG": {
    +                    "description": "WAITCFG",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "WRAPMOD": {
    +                    "description": "WRAPMOD",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "WAITPOL": {
    +                    "description": "WAITPOL",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BURSTEN": {
    +                    "description": "BURSTEN",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FACCEN": {
    +                    "description": "FACCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MWID": {
    +                    "description": "MWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "MTYP": {
    +                    "description": "MTYP",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MUXEN": {
    +                    "description": "MUXEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MBKEN": {
    +                    "description": "MBKEN",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BTR2": {
    +              "description": "SRAM/NOR-Flash chip-select timing register\n          2",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "BUSTURN": {
    +                    "description": "BUSTURN",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "BCR3": {
    +              "description": "SRAM/NOR-Flash chip-select control register\n          3",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 12496,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CBURSTRW": {
    +                    "description": "CBURSTRW",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "ASYNCWAIT": {
    +                    "description": "ASYNCWAIT",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EXTMOD": {
    +                    "description": "EXTMOD",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "WAITEN": {
    +                    "description": "WAITEN",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "WREN": {
    +                    "description": "WREN",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WAITCFG": {
    +                    "description": "WAITCFG",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "WRAPMOD": {
    +                    "description": "WRAPMOD",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "WAITPOL": {
    +                    "description": "WAITPOL",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BURSTEN": {
    +                    "description": "BURSTEN",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FACCEN": {
    +                    "description": "FACCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MWID": {
    +                    "description": "MWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "MTYP": {
    +                    "description": "MTYP",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MUXEN": {
    +                    "description": "MUXEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MBKEN": {
    +                    "description": "MBKEN",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BTR3": {
    +              "description": "SRAM/NOR-Flash chip-select timing register\n          3",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "BUSTURN": {
    +                    "description": "BUSTURN",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "BCR4": {
    +              "description": "SRAM/NOR-Flash chip-select control register\n          4",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 12496,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CBURSTRW": {
    +                    "description": "CBURSTRW",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "ASYNCWAIT": {
    +                    "description": "ASYNCWAIT",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EXTMOD": {
    +                    "description": "EXTMOD",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "WAITEN": {
    +                    "description": "WAITEN",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "WREN": {
    +                    "description": "WREN",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WAITCFG": {
    +                    "description": "WAITCFG",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "WRAPMOD": {
    +                    "description": "WRAPMOD",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "WAITPOL": {
    +                    "description": "WAITPOL",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BURSTEN": {
    +                    "description": "BURSTEN",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FACCEN": {
    +                    "description": "FACCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MWID": {
    +                    "description": "MWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "MTYP": {
    +                    "description": "MTYP",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MUXEN": {
    +                    "description": "MUXEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MBKEN": {
    +                    "description": "MBKEN",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BTR4": {
    +              "description": "SRAM/NOR-Flash chip-select timing register\n          4",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "BUSTURN": {
    +                    "description": "BUSTURN",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "PCR2": {
    +              "description": "PC Card/NAND Flash control register\n          2",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 24,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ECCPS": {
    +                    "description": "ECCPS",
    +                    "offset": 17,
    +                    "size": 3
    +                  },
    +                  "TAR": {
    +                    "description": "TAR",
    +                    "offset": 13,
    +                    "size": 4
    +                  },
    +                  "TCLR": {
    +                    "description": "TCLR",
    +                    "offset": 9,
    +                    "size": 4
    +                  },
    +                  "ECCEN": {
    +                    "description": "ECCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PWID": {
    +                    "description": "PWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "PTYP": {
    +                    "description": "PTYP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PBKEN": {
    +                    "description": "PBKEN",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PWAITEN": {
    +                    "description": "PWAITEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR2": {
    +              "description": "FIFO status and interrupt register\n          2",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 64,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEMPT": {
    +                    "description": "FEMPT",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IFEN": {
    +                    "description": "IFEN",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ILEN": {
    +                    "description": "ILEN",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IREN": {
    +                    "description": "IREN",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IFS": {
    +                    "description": "IFS",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ILS": {
    +                    "description": "ILS",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IRS": {
    +                    "description": "IRS",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PMEM2": {
    +              "description": "Common memory space timing register\n          2",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MEMHIZx": {
    +                    "description": "MEMHIZx",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "MEMHOLDx": {
    +                    "description": "MEMHOLDx",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "MEMWAITx": {
    +                    "description": "MEMWAITx",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "MEMSETx": {
    +                    "description": "MEMSETx",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "PATT2": {
    +              "description": "Attribute memory space timing register\n          2",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ATTHIZx": {
    +                    "description": "Attribute memory x databus HiZ\n              time",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "ATTHOLDx": {
    +                    "description": "Attribute memory x hold\n              time",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "ATTWAITx": {
    +                    "description": "Attribute memory x wait\n              time",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ATTSETx": {
    +                    "description": "Attribute memory x setup\n              time",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "ECCR2": {
    +              "description": "ECC result register 2",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ECCx": {
    +                    "description": "ECC result",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PCR3": {
    +              "description": "PC Card/NAND Flash control register\n          3",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 24,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ECCPS": {
    +                    "description": "ECCPS",
    +                    "offset": 17,
    +                    "size": 3
    +                  },
    +                  "TAR": {
    +                    "description": "TAR",
    +                    "offset": 13,
    +                    "size": 4
    +                  },
    +                  "TCLR": {
    +                    "description": "TCLR",
    +                    "offset": 9,
    +                    "size": 4
    +                  },
    +                  "ECCEN": {
    +                    "description": "ECCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PWID": {
    +                    "description": "PWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "PTYP": {
    +                    "description": "PTYP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PBKEN": {
    +                    "description": "PBKEN",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PWAITEN": {
    +                    "description": "PWAITEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR3": {
    +              "description": "FIFO status and interrupt register\n          3",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 64,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEMPT": {
    +                    "description": "FEMPT",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IFEN": {
    +                    "description": "IFEN",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ILEN": {
    +                    "description": "ILEN",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IREN": {
    +                    "description": "IREN",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IFS": {
    +                    "description": "IFS",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ILS": {
    +                    "description": "ILS",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IRS": {
    +                    "description": "IRS",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PMEM3": {
    +              "description": "Common memory space timing register\n          3",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MEMHIZx": {
    +                    "description": "MEMHIZx",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "MEMHOLDx": {
    +                    "description": "MEMHOLDx",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "MEMWAITx": {
    +                    "description": "MEMWAITx",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "MEMSETx": {
    +                    "description": "MEMSETx",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "PATT3": {
    +              "description": "Attribute memory space timing register\n          3",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ATTHIZx": {
    +                    "description": "ATTHIZx",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "ATTHOLDx": {
    +                    "description": "ATTHOLDx",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "ATTWAITx": {
    +                    "description": "ATTWAITx",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ATTSETx": {
    +                    "description": "ATTSETx",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "ECCR3": {
    +              "description": "ECC result register 3",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ECCx": {
    +                    "description": "ECCx",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PCR4": {
    +              "description": "PC Card/NAND Flash control register\n          4",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 24,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ECCPS": {
    +                    "description": "ECCPS",
    +                    "offset": 17,
    +                    "size": 3
    +                  },
    +                  "TAR": {
    +                    "description": "TAR",
    +                    "offset": 13,
    +                    "size": 4
    +                  },
    +                  "TCLR": {
    +                    "description": "TCLR",
    +                    "offset": 9,
    +                    "size": 4
    +                  },
    +                  "ECCEN": {
    +                    "description": "ECCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PWID": {
    +                    "description": "PWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "PTYP": {
    +                    "description": "PTYP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PBKEN": {
    +                    "description": "PBKEN",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PWAITEN": {
    +                    "description": "PWAITEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR4": {
    +              "description": "FIFO status and interrupt register\n          4",
    +              "offset": 164,
    +              "size": 32,
    +              "reset_value": 64,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEMPT": {
    +                    "description": "FEMPT",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IFEN": {
    +                    "description": "IFEN",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ILEN": {
    +                    "description": "ILEN",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IREN": {
    +                    "description": "IREN",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IFS": {
    +                    "description": "IFS",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ILS": {
    +                    "description": "ILS",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IRS": {
    +                    "description": "IRS",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PMEM4": {
    +              "description": "Common memory space timing register\n          4",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MEMHIZx": {
    +                    "description": "MEMHIZx",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "MEMHOLDx": {
    +                    "description": "MEMHOLDx",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "MEMWAITx": {
    +                    "description": "MEMWAITx",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "MEMSETx": {
    +                    "description": "MEMSETx",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "PATT4": {
    +              "description": "Attribute memory space timing register\n          4",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ATTHIZx": {
    +                    "description": "ATTHIZx",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "ATTHOLDx": {
    +                    "description": "ATTHOLDx",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "ATTWAITx": {
    +                    "description": "ATTWAITx",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ATTSETx": {
    +                    "description": "ATTSETx",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "PIO4": {
    +              "description": "I/O space timing register 4",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IOHIZx": {
    +                    "description": "IOHIZx",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "IOHOLDx": {
    +                    "description": "IOHOLDx",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IOWAITx": {
    +                    "description": "IOWAITx",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IOSETx": {
    +                    "description": "IOSETx",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "BWTR1": {
    +              "description": "SRAM/NOR-Flash write timing registers\n          1",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 268435455,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "BWTR2": {
    +              "description": "SRAM/NOR-Flash write timing registers\n          2",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 268435455,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "BWTR3": {
    +              "description": "SRAM/NOR-Flash write timing registers\n          3",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 268435455,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "BWTR4": {
    +              "description": "SRAM/NOR-Flash write timing registers\n          4",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 268435455,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "PWR": {
    +        "description": "Power control",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "Power control register\n          (PWR_CR)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LPDS": {
    +                    "description": "Low Power Deep Sleep",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PDDS": {
    +                    "description": "Power Down Deep Sleep",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CWUF": {
    +                    "description": "Clear Wake-up Flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CSBF": {
    +                    "description": "Clear STANDBY Flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PVDE": {
    +                    "description": "Power Voltage Detector\n              Enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "PLS": {
    +                    "description": "PVD Level Selection",
    +                    "offset": 5,
    +                    "size": 3
    +                  },
    +                  "DBP": {
    +                    "description": "Disable Backup Domain write\n              protection",
    +                    "offset": 8,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CSR": {
    +              "description": "Power control register\n          (PWR_CR)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WUF": {
    +                    "description": "Wake-Up Flag",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SBF": {
    +                    "description": "STANDBY Flag",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PVDO": {
    +                    "description": "PVD Output",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EWUP": {
    +                    "description": "Enable WKUP pin",
    +                    "offset": 8,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "RCC": {
    +        "description": "Reset and clock control",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "Clock control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 131,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HSION": {
    +                    "description": "Internal High Speed clock\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "HSIRDY": {
    +                    "description": "Internal High Speed clock ready\n              flag",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HSITRIM": {
    +                    "description": "Internal High Speed clock\n              trimming",
    +                    "offset": 3,
    +                    "size": 5
    +                  },
    +                  "HSICAL": {
    +                    "description": "Internal High Speed clock\n              Calibration",
    +                    "offset": 8,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "HSEON": {
    +                    "description": "External High Speed clock\n              enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "HSERDY": {
    +                    "description": "External High Speed clock ready\n              flag",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HSEBYP": {
    +                    "description": "External High Speed clock\n              Bypass",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "CSSON": {
    +                    "description": "Clock Security System\n              enable",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "PLLON": {
    +                    "description": "PLL enable",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "PLLRDY": {
    +                    "description": "PLL clock ready flag",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CFGR": {
    +              "description": "Clock configuration register\n          (RCC_CFGR)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SW": {
    +                    "description": "System clock Switch",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "SWS": {
    +                    "description": "System Clock Switch Status",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "HPRE": {
    +                    "description": "AHB prescaler",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "PPRE1": {
    +                    "description": "APB Low speed prescaler\n              (APB1)",
    +                    "offset": 8,
    +                    "size": 3
    +                  },
    +                  "PPRE2": {
    +                    "description": "APB High speed prescaler\n              (APB2)",
    +                    "offset": 11,
    +                    "size": 3
    +                  },
    +                  "ADCPRE": {
    +                    "description": "ADC prescaler",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "PLLSRC": {
    +                    "description": "PLL entry clock source",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "PLLXTPRE": {
    +                    "description": "HSE divider for PLL entry",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "PLLMUL": {
    +                    "description": "PLL Multiplication Factor",
    +                    "offset": 18,
    +                    "size": 4
    +                  },
    +                  "OTGFSPRE": {
    +                    "description": "USB OTG FS prescaler",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "MCO": {
    +                    "description": "Microcontroller clock\n              output",
    +                    "offset": 24,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "CIR": {
    +              "description": "Clock interrupt register\n          (RCC_CIR)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LSIRDYF": {
    +                    "description": "LSI Ready Interrupt flag",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LSERDYF": {
    +                    "description": "LSE Ready Interrupt flag",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HSIRDYF": {
    +                    "description": "HSI Ready Interrupt flag",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HSERDYF": {
    +                    "description": "HSE Ready Interrupt flag",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PLLRDYF": {
    +                    "description": "PLL Ready Interrupt flag",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CSSF": {
    +                    "description": "Clock Security System Interrupt\n              flag",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LSIRDYIE": {
    +                    "description": "LSI Ready Interrupt Enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LSERDYIE": {
    +                    "description": "LSE Ready Interrupt Enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "HSIRDYIE": {
    +                    "description": "HSI Ready Interrupt Enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "HSERDYIE": {
    +                    "description": "HSE Ready Interrupt Enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "PLLRDYIE": {
    +                    "description": "PLL Ready Interrupt Enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "LSIRDYC": {
    +                    "description": "LSI Ready Interrupt Clear",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "LSERDYC": {
    +                    "description": "LSE Ready Interrupt Clear",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "HSIRDYC": {
    +                    "description": "HSI Ready Interrupt Clear",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "HSERDYC": {
    +                    "description": "HSE Ready Interrupt Clear",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "PLLRDYC": {
    +                    "description": "PLL Ready Interrupt Clear",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CSSC": {
    +                    "description": "Clock security system interrupt\n              clear",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "APB2RSTR": {
    +              "description": "APB2 peripheral reset register\n          (RCC_APB2RSTR)",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AFIORST": {
    +                    "description": "Alternate function I/O\n              reset",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "IOPARST": {
    +                    "description": "IO port A reset",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IOPBRST": {
    +                    "description": "IO port B reset",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IOPCRST": {
    +                    "description": "IO port C reset",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IOPDRST": {
    +                    "description": "IO port D reset",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IOPERST": {
    +                    "description": "IO port E reset",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "IOPFRST": {
    +                    "description": "IO port F reset",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IOPGRST": {
    +                    "description": "IO port G reset",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ADC1RST": {
    +                    "description": "ADC 1 interface reset",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ADC2RST": {
    +                    "description": "ADC 2 interface reset",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TIM1RST": {
    +                    "description": "TIM1 timer reset",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SPI1RST": {
    +                    "description": "SPI 1 reset",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TIM8RST": {
    +                    "description": "TIM8 timer reset",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "USART1RST": {
    +                    "description": "USART1 reset",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ADC3RST": {
    +                    "description": "ADC 3 interface reset",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TIM9RST": {
    +                    "description": "TIM9 timer reset",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "TIM10RST": {
    +                    "description": "TIM10 timer reset",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "TIM11RST": {
    +                    "description": "TIM11 timer reset",
    +                    "offset": 21,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "APB1RSTR": {
    +              "description": "APB1 peripheral reset register\n          (RCC_APB1RSTR)",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIM2RST": {
    +                    "description": "Timer 2 reset",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TIM3RST": {
    +                    "description": "Timer 3 reset",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TIM4RST": {
    +                    "description": "Timer 4 reset",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TIM5RST": {
    +                    "description": "Timer 5 reset",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TIM6RST": {
    +                    "description": "Timer 6 reset",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TIM7RST": {
    +                    "description": "Timer 7 reset",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TIM12RST": {
    +                    "description": "Timer 12 reset",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TIM13RST": {
    +                    "description": "Timer 13 reset",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TIM14RST": {
    +                    "description": "Timer 14 reset",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "WWDGRST": {
    +                    "description": "Window watchdog reset",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SPI2RST": {
    +                    "description": "SPI2 reset",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SPI3RST": {
    +                    "description": "SPI3 reset",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "USART2RST": {
    +                    "description": "USART 2 reset",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "USART3RST": {
    +                    "description": "USART 3 reset",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "UART4RST": {
    +                    "description": "UART 4 reset",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "UART5RST": {
    +                    "description": "UART 5 reset",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "I2C1RST": {
    +                    "description": "I2C1 reset",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "I2C2RST": {
    +                    "description": "I2C2 reset",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "USBRST": {
    +                    "description": "USB reset",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "CANRST": {
    +                    "description": "CAN reset",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "BKPRST": {
    +                    "description": "Backup interface reset",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "PWRRST": {
    +                    "description": "Power interface reset",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "DACRST": {
    +                    "description": "DAC interface reset",
    +                    "offset": 29,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AHBENR": {
    +              "description": "AHB Peripheral Clock enable register\n          (RCC_AHBENR)",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 20,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA1EN": {
    +                    "description": "DMA1 clock enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DMA2EN": {
    +                    "description": "DMA2 clock enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SRAMEN": {
    +                    "description": "SRAM interface clock\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FLITFEN": {
    +                    "description": "FLITF clock enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CRCEN": {
    +                    "description": "CRC clock enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FSMCEN": {
    +                    "description": "FSMC clock enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SDIOEN": {
    +                    "description": "SDIO clock enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "APB2ENR": {
    +              "description": "APB2 peripheral clock enable register\n          (RCC_APB2ENR)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AFIOEN": {
    +                    "description": "Alternate function I/O clock\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "IOPAEN": {
    +                    "description": "I/O port A clock enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IOPBEN": {
    +                    "description": "I/O port B clock enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IOPCEN": {
    +                    "description": "I/O port C clock enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IOPDEN": {
    +                    "description": "I/O port D clock enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IOPEEN": {
    +                    "description": "I/O port E clock enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "IOPFEN": {
    +                    "description": "I/O port F clock enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IOPGEN": {
    +                    "description": "I/O port G clock enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ADC1EN": {
    +                    "description": "ADC 1 interface clock\n              enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ADC2EN": {
    +                    "description": "ADC 2 interface clock\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TIM1EN": {
    +                    "description": "TIM1 Timer clock enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SPI1EN": {
    +                    "description": "SPI 1 clock enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TIM8EN": {
    +                    "description": "TIM8 Timer clock enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "USART1EN": {
    +                    "description": "USART1 clock enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ADC3EN": {
    +                    "description": "ADC3 interface clock\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TIM9EN": {
    +                    "description": "TIM9 Timer clock enable",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "TIM10EN": {
    +                    "description": "TIM10 Timer clock enable",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "TIM11EN": {
    +                    "description": "TIM11 Timer clock enable",
    +                    "offset": 21,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "APB1ENR": {
    +              "description": "APB1 peripheral clock enable register\n          (RCC_APB1ENR)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIM2EN": {
    +                    "description": "Timer 2 clock enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TIM3EN": {
    +                    "description": "Timer 3 clock enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TIM4EN": {
    +                    "description": "Timer 4 clock enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TIM5EN": {
    +                    "description": "Timer 5 clock enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TIM6EN": {
    +                    "description": "Timer 6 clock enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TIM7EN": {
    +                    "description": "Timer 7 clock enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TIM12EN": {
    +                    "description": "Timer 12 clock enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TIM13EN": {
    +                    "description": "Timer 13 clock enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TIM14EN": {
    +                    "description": "Timer 14 clock enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "WWDGEN": {
    +                    "description": "Window watchdog clock\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SPI2EN": {
    +                    "description": "SPI 2 clock enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SPI3EN": {
    +                    "description": "SPI 3 clock enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "USART2EN": {
    +                    "description": "USART 2 clock enable",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "USART3EN": {
    +                    "description": "USART 3 clock enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "UART4EN": {
    +                    "description": "UART 4 clock enable",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "UART5EN": {
    +                    "description": "UART 5 clock enable",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "I2C1EN": {
    +                    "description": "I2C 1 clock enable",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "I2C2EN": {
    +                    "description": "I2C 2 clock enable",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "USBEN": {
    +                    "description": "USB clock enable",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "CANEN": {
    +                    "description": "CAN clock enable",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "BKPEN": {
    +                    "description": "Backup interface clock\n              enable",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "PWREN": {
    +                    "description": "Power interface clock\n              enable",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "DACEN": {
    +                    "description": "DAC interface clock enable",
    +                    "offset": 29,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BDCR": {
    +              "description": "Backup domain control register\n          (RCC_BDCR)",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LSEON": {
    +                    "description": "External Low Speed oscillator\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "LSERDY": {
    +                    "description": "External Low Speed oscillator\n              ready",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LSEBYP": {
    +                    "description": "External Low Speed oscillator\n              bypass",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTCSEL": {
    +                    "description": "RTC clock source selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "RTCEN": {
    +                    "description": "RTC clock enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "BDRST": {
    +                    "description": "Backup domain software\n              reset",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CSR": {
    +              "description": "Control/status register\n          (RCC_CSR)",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 201326592,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LSION": {
    +                    "description": "Internal low speed oscillator\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "LSIRDY": {
    +                    "description": "Internal low speed oscillator\n              ready",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RMVF": {
    +                    "description": "Remove reset flag",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "PINRSTF": {
    +                    "description": "PIN reset flag",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "PORRSTF": {
    +                    "description": "POR/PDR reset flag",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "SFTRSTF": {
    +                    "description": "Software reset flag",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "IWDGRSTF": {
    +                    "description": "Independent watchdog reset\n              flag",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "WWDGRSTF": {
    +                    "description": "Window watchdog reset flag",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "LPWRRSTF": {
    +                    "description": "Low-power reset flag",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "GPIOA": {
    +        "description": "General purpose I/O",
    +        "children": {
    +          "registers": {
    +            "CRL": {
    +              "description": "Port configuration register low\n          (GPIOn_CRL)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 1145324612,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MODE0": {
    +                    "description": "Port n.0 mode bits",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "CNF0": {
    +                    "description": "Port n.0 configuration\n              bits",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MODE1": {
    +                    "description": "Port n.1 mode bits",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "CNF1": {
    +                    "description": "Port n.1 configuration\n              bits",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "MODE2": {
    +                    "description": "Port n.2 mode bits",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "CNF2": {
    +                    "description": "Port n.2 configuration\n              bits",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "MODE3": {
    +                    "description": "Port n.3 mode bits",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "CNF3": {
    +                    "description": "Port n.3 configuration\n              bits",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "MODE4": {
    +                    "description": "Port n.4 mode bits",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "CNF4": {
    +                    "description": "Port n.4 configuration\n              bits",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MODE5": {
    +                    "description": "Port n.5 mode bits",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "CNF5": {
    +                    "description": "Port n.5 configuration\n              bits",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "MODE6": {
    +                    "description": "Port n.6 mode bits",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "CNF6": {
    +                    "description": "Port n.6 configuration\n              bits",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "MODE7": {
    +                    "description": "Port n.7 mode bits",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "CNF7": {
    +                    "description": "Port n.7 configuration\n              bits",
    +                    "offset": 30,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CRH": {
    +              "description": "Port configuration register high\n          (GPIOn_CRL)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 1145324612,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MODE8": {
    +                    "description": "Port n.8 mode bits",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "CNF8": {
    +                    "description": "Port n.8 configuration\n              bits",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MODE9": {
    +                    "description": "Port n.9 mode bits",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "CNF9": {
    +                    "description": "Port n.9 configuration\n              bits",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "MODE10": {
    +                    "description": "Port n.10 mode bits",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "CNF10": {
    +                    "description": "Port n.10 configuration\n              bits",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "MODE11": {
    +                    "description": "Port n.11 mode bits",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "CNF11": {
    +                    "description": "Port n.11 configuration\n              bits",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "MODE12": {
    +                    "description": "Port n.12 mode bits",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "CNF12": {
    +                    "description": "Port n.12 configuration\n              bits",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MODE13": {
    +                    "description": "Port n.13 mode bits",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "CNF13": {
    +                    "description": "Port n.13 configuration\n              bits",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "MODE14": {
    +                    "description": "Port n.14 mode bits",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "CNF14": {
    +                    "description": "Port n.14 configuration\n              bits",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "MODE15": {
    +                    "description": "Port n.15 mode bits",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "CNF15": {
    +                    "description": "Port n.15 configuration\n              bits",
    +                    "offset": 30,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "IDR": {
    +              "description": "Port input data register\n          (GPIOn_IDR)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IDR0": {
    +                    "description": "Port input data",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "IDR1": {
    +                    "description": "Port input data",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IDR2": {
    +                    "description": "Port input data",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IDR3": {
    +                    "description": "Port input data",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IDR4": {
    +                    "description": "Port input data",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IDR5": {
    +                    "description": "Port input data",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IDR6": {
    +                    "description": "Port input data",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "IDR7": {
    +                    "description": "Port input data",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IDR8": {
    +                    "description": "Port input data",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "IDR9": {
    +                    "description": "Port input data",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "IDR10": {
    +                    "description": "Port input data",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "IDR11": {
    +                    "description": "Port input data",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "IDR12": {
    +                    "description": "Port input data",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "IDR13": {
    +                    "description": "Port input data",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "IDR14": {
    +                    "description": "Port input data",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "IDR15": {
    +                    "description": "Port input data",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ODR": {
    +              "description": "Port output data register\n          (GPIOn_ODR)",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ODR0": {
    +                    "description": "Port output data",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ODR1": {
    +                    "description": "Port output data",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ODR2": {
    +                    "description": "Port output data",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ODR3": {
    +                    "description": "Port output data",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ODR4": {
    +                    "description": "Port output data",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ODR5": {
    +                    "description": "Port output data",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ODR6": {
    +                    "description": "Port output data",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ODR7": {
    +                    "description": "Port output data",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ODR8": {
    +                    "description": "Port output data",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ODR9": {
    +                    "description": "Port output data",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ODR10": {
    +                    "description": "Port output data",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ODR11": {
    +                    "description": "Port output data",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ODR12": {
    +                    "description": "Port output data",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ODR13": {
    +                    "description": "Port output data",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ODR14": {
    +                    "description": "Port output data",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ODR15": {
    +                    "description": "Port output data",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BSRR": {
    +              "description": "Port bit set/reset register\n          (GPIOn_BSRR)",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "BS0": {
    +                    "description": "Set bit 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "BS1": {
    +                    "description": "Set bit 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "BS2": {
    +                    "description": "Set bit 1",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "BS3": {
    +                    "description": "Set bit 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "BS4": {
    +                    "description": "Set bit 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BS5": {
    +                    "description": "Set bit 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "BS6": {
    +                    "description": "Set bit 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BS7": {
    +                    "description": "Set bit 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BS8": {
    +                    "description": "Set bit 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BS9": {
    +                    "description": "Set bit 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BS10": {
    +                    "description": "Set bit 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "BS11": {
    +                    "description": "Set bit 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BS12": {
    +                    "description": "Set bit 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "BS13": {
    +                    "description": "Set bit 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BS14": {
    +                    "description": "Set bit 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "BS15": {
    +                    "description": "Set bit 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "BR0": {
    +                    "description": "Reset bit 0",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BR1": {
    +                    "description": "Reset bit 1",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "BR2": {
    +                    "description": "Reset bit 2",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "BR3": {
    +                    "description": "Reset bit 3",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "BR4": {
    +                    "description": "Reset bit 4",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "BR5": {
    +                    "description": "Reset bit 5",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "BR6": {
    +                    "description": "Reset bit 6",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "BR7": {
    +                    "description": "Reset bit 7",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "BR8": {
    +                    "description": "Reset bit 8",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "BR9": {
    +                    "description": "Reset bit 9",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "BR10": {
    +                    "description": "Reset bit 10",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "BR11": {
    +                    "description": "Reset bit 11",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "BR12": {
    +                    "description": "Reset bit 12",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "BR13": {
    +                    "description": "Reset bit 13",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "BR14": {
    +                    "description": "Reset bit 14",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "BR15": {
    +                    "description": "Reset bit 15",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BRR": {
    +              "description": "Port bit reset register\n          (GPIOn_BRR)",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "BR0": {
    +                    "description": "Reset bit 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "BR1": {
    +                    "description": "Reset bit 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "BR2": {
    +                    "description": "Reset bit 1",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "BR3": {
    +                    "description": "Reset bit 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "BR4": {
    +                    "description": "Reset bit 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BR5": {
    +                    "description": "Reset bit 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "BR6": {
    +                    "description": "Reset bit 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BR7": {
    +                    "description": "Reset bit 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BR8": {
    +                    "description": "Reset bit 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BR9": {
    +                    "description": "Reset bit 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BR10": {
    +                    "description": "Reset bit 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "BR11": {
    +                    "description": "Reset bit 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BR12": {
    +                    "description": "Reset bit 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "BR13": {
    +                    "description": "Reset bit 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BR14": {
    +                    "description": "Reset bit 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "BR15": {
    +                    "description": "Reset bit 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "LCKR": {
    +              "description": "Port configuration lock\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LCK0": {
    +                    "description": "Port A Lock bit 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "LCK1": {
    +                    "description": "Port A Lock bit 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "LCK2": {
    +                    "description": "Port A Lock bit 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "LCK3": {
    +                    "description": "Port A Lock bit 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "LCK4": {
    +                    "description": "Port A Lock bit 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "LCK5": {
    +                    "description": "Port A Lock bit 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "LCK6": {
    +                    "description": "Port A Lock bit 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "LCK7": {
    +                    "description": "Port A Lock bit 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "LCK8": {
    +                    "description": "Port A Lock bit 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LCK9": {
    +                    "description": "Port A Lock bit 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "LCK10": {
    +                    "description": "Port A Lock bit 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LCK11": {
    +                    "description": "Port A Lock bit 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "LCK12": {
    +                    "description": "Port A Lock bit 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "LCK13": {
    +                    "description": "Port A Lock bit 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "LCK14": {
    +                    "description": "Port A Lock bit 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "LCK15": {
    +                    "description": "Port A Lock bit 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LCKK": {
    +                    "description": "Lock key",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "STK": {
    +        "description": "SysTick timer",
    +        "children": {
    +          "registers": {
    +            "CTRL": {
    +              "description": "SysTick control and status\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TICKINT": {
    +                    "description": "SysTick exception request\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CLKSOURCE": {
    +                    "description": "Clock source selection",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "COUNTFLAG": {
    +                    "description": "COUNTFLAG",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "LOAD_": {
    +              "description": "SysTick reload value register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RELOAD": {
    +                    "description": "RELOAD value",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "VAL": {
    +              "description": "SysTick current value register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CURRENT": {
    +                    "description": "Current counter value",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "CALIB": {
    +              "description": "SysTick calibration value\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TENMS": {
    +                    "description": "Calibration value",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SCB": {
    +        "description": "System control block",
    +        "children": {
    +          "registers": {
    +            "CPUID": {
    +              "description": "CPUID base register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 1091551809,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "Revision": {
    +                    "description": "Revision number",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "PartNo": {
    +                    "description": "Part number of the\n              processor",
    +                    "offset": 4,
    +                    "size": 12
    +                  },
    +                  "Constant": {
    +                    "description": "Reads as 0xF",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "Variant": {
    +                    "description": "Variant number",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "Implementer": {
    +                    "description": "Implementer code",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "ICSR": {
    +              "description": "Interrupt control and state\n          register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VECTACTIVE": {
    +                    "description": "Active vector",
    +                    "offset": 0,
    +                    "size": 9
    +                  },
    +                  "RETTOBASE": {
    +                    "description": "Return to base level",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "VECTPENDING": {
    +                    "description": "Pending vector",
    +                    "offset": 12,
    +                    "size": 7
    +                  },
    +                  "ISRPENDING": {
    +                    "description": "Interrupt pending flag",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "PENDSTCLR": {
    +                    "description": "SysTick exception clear-pending\n              bit",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "PENDSTSET": {
    +                    "description": "SysTick exception set-pending\n              bit",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "PENDSVCLR": {
    +                    "description": "PendSV clear-pending bit",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "PENDSVSET": {
    +                    "description": "PendSV set-pending bit",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "NMIPENDSET": {
    +                    "description": "NMI set-pending bit.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "VTOR": {
    +              "description": "Vector table offset register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TBLOFF": {
    +                    "description": "Vector table base offset\n              field",
    +                    "offset": 9,
    +                    "size": 21
    +                  }
    +                }
    +              }
    +            },
    +            "AIRCR": {
    +              "description": "Application interrupt and reset control\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VECTRESET": {
    +                    "description": "VECTRESET",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "VECTCLRACTIVE": {
    +                    "description": "VECTCLRACTIVE",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SYSRESETREQ": {
    +                    "description": "SYSRESETREQ",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PRIGROUP": {
    +                    "description": "PRIGROUP",
    +                    "offset": 8,
    +                    "size": 3
    +                  },
    +                  "ENDIANESS": {
    +                    "description": "ENDIANESS",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "VECTKEYSTAT": {
    +                    "description": "Register key",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SCR": {
    +              "description": "System control register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SLEEPONEXIT": {
    +                    "description": "SLEEPONEXIT",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEEPDEEP": {
    +                    "description": "SLEEPDEEP",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SEVEONPEND": {
    +                    "description": "Send Event on Pending bit",
    +                    "offset": 4,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCR": {
    +              "description": "Configuration and control\n          register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NONBASETHRDENA": {
    +                    "description": "Configures how the processor enters\n              Thread mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "USERSETMPEND": {
    +                    "description": "USERSETMPEND",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UNALIGN__TRP": {
    +                    "description": "UNALIGN_ TRP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIV_0_TRP": {
    +                    "description": "DIV_0_TRP",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BFHFNMIGN": {
    +                    "description": "BFHFNMIGN",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "STKALIGN": {
    +                    "description": "STKALIGN",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SHPR1": {
    +              "description": "System handler priority\n          registers",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRI_4": {
    +                    "description": "Priority of system handler\n              4",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "PRI_5": {
    +                    "description": "Priority of system handler\n              5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "PRI_6": {
    +                    "description": "Priority of system handler\n              6",
    +                    "offset": 16,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SHPR2": {
    +              "description": "System handler priority\n          registers",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRI_11": {
    +                    "description": "Priority of system handler\n              11",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SHPR3": {
    +              "description": "System handler priority\n          registers",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRI_14": {
    +                    "description": "Priority of system handler\n              14",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "PRI_15": {
    +                    "description": "Priority of system handler\n              15",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SHCRS": {
    +              "description": "System handler control and state\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MEMFAULTACT": {
    +                    "description": "Memory management fault exception active\n              bit",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "BUSFAULTACT": {
    +                    "description": "Bus fault exception active\n              bit",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "USGFAULTACT": {
    +                    "description": "Usage fault exception active\n              bit",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SVCALLACT": {
    +                    "description": "SVC call active bit",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MONITORACT": {
    +                    "description": "Debug monitor active bit",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PENDSVACT": {
    +                    "description": "PendSV exception active\n              bit",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SYSTICKACT": {
    +                    "description": "SysTick exception active\n              bit",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "USGFAULTPENDED": {
    +                    "description": "Usage fault exception pending\n              bit",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "MEMFAULTPENDED": {
    +                    "description": "Memory management fault exception\n              pending bit",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BUSFAULTPENDED": {
    +                    "description": "Bus fault exception pending\n              bit",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SVCALLPENDED": {
    +                    "description": "SVC call pending bit",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MEMFAULTENA": {
    +                    "description": "Memory management fault enable\n              bit",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUSFAULTENA": {
    +                    "description": "Bus fault enable bit",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "USGFAULTENA": {
    +                    "description": "Usage fault enable bit",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CFSR_UFSR_BFSR_MMFSR": {
    +              "description": "Configurable fault status\n          register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IACCVIOL": {
    +                    "description": "IACCVIOL",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DACCVIOL": {
    +                    "description": "DACCVIOL",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MUNSTKERR": {
    +                    "description": "MUNSTKERR",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MSTKERR": {
    +                    "description": "MSTKERR",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "MLSPERR": {
    +                    "description": "MLSPERR",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "MMARVALID": {
    +                    "description": "MMARVALID",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IBUSERR": {
    +                    "description": "Instruction bus error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PRECISERR": {
    +                    "description": "Precise data bus error",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "IMPRECISERR": {
    +                    "description": "Imprecise data bus error",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "UNSTKERR": {
    +                    "description": "Bus fault on unstacking for a return\n              from exception",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "STKERR": {
    +                    "description": "Bus fault on stacking for exception\n              entry",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "LSPERR": {
    +                    "description": "Bus fault on floating-point lazy state\n              preservation",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BFARVALID": {
    +                    "description": "Bus Fault Address Register (BFAR) valid\n              flag",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "UNDEFINSTR": {
    +                    "description": "Undefined instruction usage\n              fault",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "INVSTATE": {
    +                    "description": "Invalid state usage fault",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INVPC": {
    +                    "description": "Invalid PC load usage\n              fault",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "NOCP": {
    +                    "description": "No coprocessor usage\n              fault.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "UNALIGNED": {
    +                    "description": "Unaligned access usage\n              fault",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "DIVBYZERO": {
    +                    "description": "Divide by zero usage fault",
    +                    "offset": 25,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HFSR": {
    +              "description": "Hard fault status register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VECTTBL": {
    +                    "description": "Vector table hard fault",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FORCED": {
    +                    "description": "Forced hard fault",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "DEBUG_VT": {
    +                    "description": "Reserved for Debug use",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MMFAR": {
    +              "description": "Memory management fault address\n          register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MMFAR": {
    +                    "description": "Memory management fault\n              address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BFAR": {
    +              "description": "Bus fault address register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BFAR": {
    +                    "description": "Bus fault address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "NVIC_STIR": {
    +        "description": "Nested vectored interrupt\n      controller",
    +        "children": {
    +          "registers": {
    +            "STIR": {
    +              "description": "Software trigger interrupt\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INTID": {
    +                    "description": "Software generated interrupt\n              ID",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SCB_ACTRL": {
    +        "description": "System control block ACTLR",
    +        "children": {
    +          "registers": {
    +            "ACTRL": {
    +              "description": "Auxiliary control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DISFOLD": {
    +                    "description": "DISFOLD",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FPEXCODIS": {
    +                    "description": "FPEXCODIS",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "DISRAMODE": {
    +                    "description": "DISRAMODE",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "DISITMATBFLUSH": {
    +                    "description": "DISITMATBFLUSH",
    +                    "offset": 12,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "MPU": {
    +        "description": "Memory protection unit",
    +        "children": {
    +          "registers": {
    +            "MPU_TYPER": {
    +              "description": "MPU type register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 2048,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SEPARATE": {
    +                    "description": "Separate flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DREGION": {
    +                    "description": "Number of MPU data regions",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IREGION": {
    +                    "description": "Number of MPU instruction\n              regions",
    +                    "offset": 16,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "MPU_CTRL": {
    +              "description": "MPU control register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enables the MPU",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "HFNMIENA": {
    +                    "description": "Enables the operation of MPU during hard\n              fault",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PRIVDEFENA": {
    +                    "description": "Enable priviliged software access to\n              default memory map",
    +                    "offset": 2,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MPU_RNR": {
    +              "description": "MPU region number register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION": {
    +                    "description": "MPU region",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "MPU_RBAR": {
    +              "description": "MPU region base address\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION": {
    +                    "description": "MPU region field",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "VALID": {
    +                    "description": "MPU region number valid",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ADDR": {
    +                    "description": "Region base address field",
    +                    "offset": 5,
    +                    "size": 27
    +                  }
    +                }
    +              }
    +            },
    +            "MPU_RASR": {
    +              "description": "MPU region attribute and size\n          register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Region enable bit.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SIZE": {
    +                    "description": "Size of the MPU protection\n              region",
    +                    "offset": 1,
    +                    "size": 5
    +                  },
    +                  "SRD": {
    +                    "description": "Subregion disable bits",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "B": {
    +                    "description": "memory attribute",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "C": {
    +                    "description": "memory attribute",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "S": {
    +                    "description": "Shareable memory attribute",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TEX": {
    +                    "description": "memory attribute",
    +                    "offset": 19,
    +                    "size": 3
    +                  },
    +                  "AP": {
    +                    "description": "Access permission",
    +                    "offset": 24,
    +                    "size": 3
    +                  },
    +                  "XN": {
    +                    "description": "Instruction access disable\n              bit",
    +                    "offset": 28,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "NVIC": {
    +        "description": "Nested Vectored Interrupt\n      Controller",
    +        "children": {
    +          "registers": {
    +            "ISER0": {
    +              "description": "Interrupt Set-Enable Register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SETENA": {
    +                    "description": "SETENA",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ISER1": {
    +              "description": "Interrupt Set-Enable Register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SETENA": {
    +                    "description": "SETENA",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICER0": {
    +              "description": "Interrupt Clear-Enable\n          Register",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLRENA": {
    +                    "description": "CLRENA",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICER1": {
    +              "description": "Interrupt Clear-Enable\n          Register",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLRENA": {
    +                    "description": "CLRENA",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ISPR0": {
    +              "description": "Interrupt Set-Pending Register",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SETPEND": {
    +                    "description": "SETPEND",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ISPR1": {
    +              "description": "Interrupt Set-Pending Register",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SETPEND": {
    +                    "description": "SETPEND",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICPR0": {
    +              "description": "Interrupt Clear-Pending\n          Register",
    +              "offset": 384,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLRPEND": {
    +                    "description": "CLRPEND",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICPR1": {
    +              "description": "Interrupt Clear-Pending\n          Register",
    +              "offset": 388,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLRPEND": {
    +                    "description": "CLRPEND",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IABR0": {
    +              "description": "Interrupt Active Bit Register",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ACTIVE": {
    +                    "description": "ACTIVE",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IABR1": {
    +              "description": "Interrupt Active Bit Register",
    +              "offset": 516,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ACTIVE": {
    +                    "description": "ACTIVE",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IPR0": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR1": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR2": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR3": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 780,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR4": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 784,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR5": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 788,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR6": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 792,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR7": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 796,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR8": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 800,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR9": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 804,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR10": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 808,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR11": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 812,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR12": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 816,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR13": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 820,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR14": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 824,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "AFIO": {
    +        "description": "Alternate function I/O",
    +        "children": {
    +          "registers": {
    +            "EVCR": {
    +              "description": "Event Control Register\n          (AFIO_EVCR)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PIN": {
    +                    "description": "Pin selection",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "PORT": {
    +                    "description": "Port selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "EVOE": {
    +                    "description": "Event Output Enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MAPR": {
    +              "description": "AF remap and debug I/O configuration\n          register (AFIO_MAPR)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SPI1_REMAP": {
    +                    "description": "SPI1 remapping",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "I2C1_REMAP": {
    +                    "description": "I2C1 remapping",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "USART1_REMAP": {
    +                    "description": "USART1 remapping",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "USART2_REMAP": {
    +                    "description": "USART2 remapping",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "USART3_REMAP": {
    +                    "description": "USART3 remapping",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "TIM1_REMAP": {
    +                    "description": "TIM1 remapping",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "TIM2_REMAP": {
    +                    "description": "TIM2 remapping",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "TIM3_REMAP": {
    +                    "description": "TIM3 remapping",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "TIM4_REMAP": {
    +                    "description": "TIM4 remapping",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CAN_REMAP": {
    +                    "description": "CAN1 remapping",
    +                    "offset": 13,
    +                    "size": 2
    +                  },
    +                  "PD01_REMAP": {
    +                    "description": "Port D0/Port D1 mapping on\n              OSCIN/OSCOUT",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TIM5CH4_IREMAP": {
    +                    "description": "Set and cleared by\n              software",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "ADC1_ETRGINJ_REMAP": {
    +                    "description": "ADC 1 External trigger injected\n              conversion remapping",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "ADC1_ETRGREG_REMAP": {
    +                    "description": "ADC 1 external trigger regular\n              conversion remapping",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "ADC2_ETRGINJ_REMAP": {
    +                    "description": "ADC 2 external trigger injected\n              conversion remapping",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "ADC2_ETRGREG_REMAP": {
    +                    "description": "ADC 2 external trigger regular\n              conversion remapping",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "SWJ_CFG": {
    +                    "description": "Serial wire JTAG\n              configuration",
    +                    "offset": 24,
    +                    "size": 3,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "EXTICR1": {
    +              "description": "External interrupt configuration register 1\n          (AFIO_EXTICR1)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXTI0": {
    +                    "description": "EXTI0 configuration",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "EXTI1": {
    +                    "description": "EXTI1 configuration",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "EXTI2": {
    +                    "description": "EXTI2 configuration",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "EXTI3": {
    +                    "description": "EXTI3 configuration",
    +                    "offset": 12,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "EXTICR2": {
    +              "description": "External interrupt configuration register 2\n          (AFIO_EXTICR2)",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXTI4": {
    +                    "description": "EXTI4 configuration",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "EXTI5": {
    +                    "description": "EXTI5 configuration",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "EXTI6": {
    +                    "description": "EXTI6 configuration",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "EXTI7": {
    +                    "description": "EXTI7 configuration",
    +                    "offset": 12,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "EXTICR3": {
    +              "description": "External interrupt configuration register 3\n          (AFIO_EXTICR3)",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXTI8": {
    +                    "description": "EXTI8 configuration",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "EXTI9": {
    +                    "description": "EXTI9 configuration",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "EXTI10": {
    +                    "description": "EXTI10 configuration",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "EXTI11": {
    +                    "description": "EXTI11 configuration",
    +                    "offset": 12,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "EXTICR4": {
    +              "description": "External interrupt configuration register 4\n          (AFIO_EXTICR4)",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXTI12": {
    +                    "description": "EXTI12 configuration",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "EXTI13": {
    +                    "description": "EXTI13 configuration",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "EXTI14": {
    +                    "description": "EXTI14 configuration",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "EXTI15": {
    +                    "description": "EXTI15 configuration",
    +                    "offset": 12,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "MAPR2": {
    +              "description": "AF remap and debug I/O configuration\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIM9_REMAP": {
    +                    "description": "TIM9 remapping",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TIM10_REMAP": {
    +                    "description": "TIM10 remapping",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TIM11_REMAP": {
    +                    "description": "TIM11 remapping",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TIM13_REMAP": {
    +                    "description": "TIM13 remapping",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TIM14_REMAP": {
    +                    "description": "TIM14 remapping",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FSMC_NADV": {
    +                    "description": "NADV connect/disconnect",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "EXTI": {
    +        "description": "EXTI",
    +        "children": {
    +          "registers": {
    +            "IMR": {
    +              "description": "Interrupt mask register\n          (EXTI_IMR)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MR0": {
    +                    "description": "Interrupt Mask on line 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MR1": {
    +                    "description": "Interrupt Mask on line 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MR2": {
    +                    "description": "Interrupt Mask on line 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MR3": {
    +                    "description": "Interrupt Mask on line 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MR4": {
    +                    "description": "Interrupt Mask on line 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "MR5": {
    +                    "description": "Interrupt Mask on line 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "MR6": {
    +                    "description": "Interrupt Mask on line 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MR7": {
    +                    "description": "Interrupt Mask on line 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MR8": {
    +                    "description": "Interrupt Mask on line 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "MR9": {
    +                    "description": "Interrupt Mask on line 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "MR10": {
    +                    "description": "Interrupt Mask on line 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "MR11": {
    +                    "description": "Interrupt Mask on line 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "MR12": {
    +                    "description": "Interrupt Mask on line 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "MR13": {
    +                    "description": "Interrupt Mask on line 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "MR14": {
    +                    "description": "Interrupt Mask on line 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "MR15": {
    +                    "description": "Interrupt Mask on line 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MR16": {
    +                    "description": "Interrupt Mask on line 16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "MR17": {
    +                    "description": "Interrupt Mask on line 17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "MR18": {
    +                    "description": "Interrupt Mask on line 18",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EMR": {
    +              "description": "Event mask register (EXTI_EMR)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MR0": {
    +                    "description": "Event Mask on line 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MR1": {
    +                    "description": "Event Mask on line 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MR2": {
    +                    "description": "Event Mask on line 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MR3": {
    +                    "description": "Event Mask on line 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MR4": {
    +                    "description": "Event Mask on line 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "MR5": {
    +                    "description": "Event Mask on line 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "MR6": {
    +                    "description": "Event Mask on line 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MR7": {
    +                    "description": "Event Mask on line 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MR8": {
    +                    "description": "Event Mask on line 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "MR9": {
    +                    "description": "Event Mask on line 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "MR10": {
    +                    "description": "Event Mask on line 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "MR11": {
    +                    "description": "Event Mask on line 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "MR12": {
    +                    "description": "Event Mask on line 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "MR13": {
    +                    "description": "Event Mask on line 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "MR14": {
    +                    "description": "Event Mask on line 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "MR15": {
    +                    "description": "Event Mask on line 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MR16": {
    +                    "description": "Event Mask on line 16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "MR17": {
    +                    "description": "Event Mask on line 17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "MR18": {
    +                    "description": "Event Mask on line 18",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RTSR": {
    +              "description": "Rising Trigger selection register\n          (EXTI_RTSR)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TR0": {
    +                    "description": "Rising trigger event configuration of\n              line 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TR1": {
    +                    "description": "Rising trigger event configuration of\n              line 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TR2": {
    +                    "description": "Rising trigger event configuration of\n              line 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TR3": {
    +                    "description": "Rising trigger event configuration of\n              line 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TR4": {
    +                    "description": "Rising trigger event configuration of\n              line 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TR5": {
    +                    "description": "Rising trigger event configuration of\n              line 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TR6": {
    +                    "description": "Rising trigger event configuration of\n              line 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TR7": {
    +                    "description": "Rising trigger event configuration of\n              line 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TR8": {
    +                    "description": "Rising trigger event configuration of\n              line 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TR9": {
    +                    "description": "Rising trigger event configuration of\n              line 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TR10": {
    +                    "description": "Rising trigger event configuration of\n              line 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TR11": {
    +                    "description": "Rising trigger event configuration of\n              line 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TR12": {
    +                    "description": "Rising trigger event configuration of\n              line 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TR13": {
    +                    "description": "Rising trigger event configuration of\n              line 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TR14": {
    +                    "description": "Rising trigger event configuration of\n              line 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TR15": {
    +                    "description": "Rising trigger event configuration of\n              line 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TR16": {
    +                    "description": "Rising trigger event configuration of\n              line 16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TR17": {
    +                    "description": "Rising trigger event configuration of\n              line 17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TR18": {
    +                    "description": "Rising trigger event configuration of\n              line 18",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FTSR": {
    +              "description": "Falling Trigger selection register\n          (EXTI_FTSR)",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TR0": {
    +                    "description": "Falling trigger event configuration of\n              line 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TR1": {
    +                    "description": "Falling trigger event configuration of\n              line 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TR2": {
    +                    "description": "Falling trigger event configuration of\n              line 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TR3": {
    +                    "description": "Falling trigger event configuration of\n              line 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TR4": {
    +                    "description": "Falling trigger event configuration of\n              line 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TR5": {
    +                    "description": "Falling trigger event configuration of\n              line 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TR6": {
    +                    "description": "Falling trigger event configuration of\n              line 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TR7": {
    +                    "description": "Falling trigger event configuration of\n              line 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TR8": {
    +                    "description": "Falling trigger event configuration of\n              line 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TR9": {
    +                    "description": "Falling trigger event configuration of\n              line 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TR10": {
    +                    "description": "Falling trigger event configuration of\n              line 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TR11": {
    +                    "description": "Falling trigger event configuration of\n              line 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TR12": {
    +                    "description": "Falling trigger event configuration of\n              line 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TR13": {
    +                    "description": "Falling trigger event configuration of\n              line 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TR14": {
    +                    "description": "Falling trigger event configuration of\n              line 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TR15": {
    +                    "description": "Falling trigger event configuration of\n              line 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TR16": {
    +                    "description": "Falling trigger event configuration of\n              line 16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TR17": {
    +                    "description": "Falling trigger event configuration of\n              line 17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TR18": {
    +                    "description": "Falling trigger event configuration of\n              line 18",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SWIER": {
    +              "description": "Software interrupt event register\n          (EXTI_SWIER)",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SWIER0": {
    +                    "description": "Software Interrupt on line\n              0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SWIER1": {
    +                    "description": "Software Interrupt on line\n              1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SWIER2": {
    +                    "description": "Software Interrupt on line\n              2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SWIER3": {
    +                    "description": "Software Interrupt on line\n              3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SWIER4": {
    +                    "description": "Software Interrupt on line\n              4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SWIER5": {
    +                    "description": "Software Interrupt on line\n              5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "SWIER6": {
    +                    "description": "Software Interrupt on line\n              6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SWIER7": {
    +                    "description": "Software Interrupt on line\n              7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SWIER8": {
    +                    "description": "Software Interrupt on line\n              8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SWIER9": {
    +                    "description": "Software Interrupt on line\n              9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SWIER10": {
    +                    "description": "Software Interrupt on line\n              10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SWIER11": {
    +                    "description": "Software Interrupt on line\n              11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SWIER12": {
    +                    "description": "Software Interrupt on line\n              12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "SWIER13": {
    +                    "description": "Software Interrupt on line\n              13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "SWIER14": {
    +                    "description": "Software Interrupt on line\n              14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SWIER15": {
    +                    "description": "Software Interrupt on line\n              15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "SWIER16": {
    +                    "description": "Software Interrupt on line\n              16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SWIER17": {
    +                    "description": "Software Interrupt on line\n              17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "SWIER18": {
    +                    "description": "Software Interrupt on line\n              18",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PR": {
    +              "description": "Pending register (EXTI_PR)",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PR0": {
    +                    "description": "Pending bit 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PR1": {
    +                    "description": "Pending bit 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PR2": {
    +                    "description": "Pending bit 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PR3": {
    +                    "description": "Pending bit 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PR4": {
    +                    "description": "Pending bit 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "PR5": {
    +                    "description": "Pending bit 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PR6": {
    +                    "description": "Pending bit 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PR7": {
    +                    "description": "Pending bit 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PR8": {
    +                    "description": "Pending bit 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PR9": {
    +                    "description": "Pending bit 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PR10": {
    +                    "description": "Pending bit 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PR11": {
    +                    "description": "Pending bit 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "PR12": {
    +                    "description": "Pending bit 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "PR13": {
    +                    "description": "Pending bit 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "PR14": {
    +                    "description": "Pending bit 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PR15": {
    +                    "description": "Pending bit 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "PR16": {
    +                    "description": "Pending bit 16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "PR17": {
    +                    "description": "Pending bit 17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "PR18": {
    +                    "description": "Pending bit 18",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "DMA1": {
    +        "description": "DMA controller",
    +        "children": {
    +          "registers": {
    +            "ISR": {
    +              "description": "DMA interrupt status register\n          (DMA_ISR)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "GIF1": {
    +                    "description": "Channel 1 Global interrupt\n              flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TCIF1": {
    +                    "description": "Channel 1 Transfer Complete\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTIF1": {
    +                    "description": "Channel 1 Half Transfer Complete\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TEIF1": {
    +                    "description": "Channel 1 Transfer Error\n              flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GIF2": {
    +                    "description": "Channel 2 Global interrupt\n              flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TCIF2": {
    +                    "description": "Channel 2 Transfer Complete\n              flag",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "HTIF2": {
    +                    "description": "Channel 2 Half Transfer Complete\n              flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TEIF2": {
    +                    "description": "Channel 2 Transfer Error\n              flag",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GIF3": {
    +                    "description": "Channel 3 Global interrupt\n              flag",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TCIF3": {
    +                    "description": "Channel 3 Transfer Complete\n              flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "HTIF3": {
    +                    "description": "Channel 3 Half Transfer Complete\n              flag",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TEIF3": {
    +                    "description": "Channel 3 Transfer Error\n              flag",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GIF4": {
    +                    "description": "Channel 4 Global interrupt\n              flag",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TCIF4": {
    +                    "description": "Channel 4 Transfer Complete\n              flag",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "HTIF4": {
    +                    "description": "Channel 4 Half Transfer Complete\n              flag",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TEIF4": {
    +                    "description": "Channel 4 Transfer Error\n              flag",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GIF5": {
    +                    "description": "Channel 5 Global interrupt\n              flag",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TCIF5": {
    +                    "description": "Channel 5 Transfer Complete\n              flag",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "HTIF5": {
    +                    "description": "Channel 5 Half Transfer Complete\n              flag",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TEIF5": {
    +                    "description": "Channel 5 Transfer Error\n              flag",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GIF6": {
    +                    "description": "Channel 6 Global interrupt\n              flag",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "TCIF6": {
    +                    "description": "Channel 6 Transfer Complete\n              flag",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "HTIF6": {
    +                    "description": "Channel 6 Half Transfer Complete\n              flag",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "TEIF6": {
    +                    "description": "Channel 6 Transfer Error\n              flag",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GIF7": {
    +                    "description": "Channel 7 Global interrupt\n              flag",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "TCIF7": {
    +                    "description": "Channel 7 Transfer Complete\n              flag",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "HTIF7": {
    +                    "description": "Channel 7 Half Transfer Complete\n              flag",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "TEIF7": {
    +                    "description": "Channel 7 Transfer Error\n              flag",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IFCR": {
    +              "description": "DMA interrupt flag clear register\n          (DMA_IFCR)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "CGIF1": {
    +                    "description": "Channel 1 Global interrupt\n              clear",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CGIF2": {
    +                    "description": "Channel 2 Global interrupt\n              clear",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CGIF3": {
    +                    "description": "Channel 3 Global interrupt\n              clear",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CGIF4": {
    +                    "description": "Channel 4 Global interrupt\n              clear",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CGIF5": {
    +                    "description": "Channel 5 Global interrupt\n              clear",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "CGIF6": {
    +                    "description": "Channel 6 Global interrupt\n              clear",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CGIF7": {
    +                    "description": "Channel 7 Global interrupt\n              clear",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "CTCIF1": {
    +                    "description": "Channel 1 Transfer Complete\n              clear",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CTCIF2": {
    +                    "description": "Channel 2 Transfer Complete\n              clear",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CTCIF3": {
    +                    "description": "Channel 3 Transfer Complete\n              clear",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CTCIF4": {
    +                    "description": "Channel 4 Transfer Complete\n              clear",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CTCIF5": {
    +                    "description": "Channel 5 Transfer Complete\n              clear",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "CTCIF6": {
    +                    "description": "Channel 6 Transfer Complete\n              clear",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "CTCIF7": {
    +                    "description": "Channel 7 Transfer Complete\n              clear",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "CHTIF1": {
    +                    "description": "Channel 1 Half Transfer\n              clear",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CHTIF2": {
    +                    "description": "Channel 2 Half Transfer\n              clear",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CHTIF3": {
    +                    "description": "Channel 3 Half Transfer\n              clear",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CHTIF4": {
    +                    "description": "Channel 4 Half Transfer\n              clear",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CHTIF5": {
    +                    "description": "Channel 5 Half Transfer\n              clear",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "CHTIF6": {
    +                    "description": "Channel 6 Half Transfer\n              clear",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "CHTIF7": {
    +                    "description": "Channel 7 Half Transfer\n              clear",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "CTEIF1": {
    +                    "description": "Channel 1 Transfer Error\n              clear",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CTEIF2": {
    +                    "description": "Channel 2 Transfer Error\n              clear",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CTEIF3": {
    +                    "description": "Channel 3 Transfer Error\n              clear",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CTEIF4": {
    +                    "description": "Channel 4 Transfer Error\n              clear",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "CTEIF5": {
    +                    "description": "Channel 5 Transfer Error\n              clear",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "CTEIF6": {
    +                    "description": "Channel 6 Transfer Error\n              clear",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "CTEIF7": {
    +                    "description": "Channel 7 Transfer Error\n              clear",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCR1": {
    +              "description": "DMA channel configuration register\n          (DMA_CCR)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EN": {
    +                    "description": "Channel enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half Transfer interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral size",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory size",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PL": {
    +                    "description": "Channel Priority level",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "MEM2MEM": {
    +                    "description": "Memory to memory mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNDTR1": {
    +              "description": "DMA channel 1 number of data\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data to transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CPAR1": {
    +              "description": "DMA channel 1 peripheral address\n          register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CMAR1": {
    +              "description": "DMA channel 1 memory address\n          register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MA": {
    +                    "description": "Memory address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CCR2": {
    +              "description": "DMA channel configuration register\n          (DMA_CCR)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EN": {
    +                    "description": "Channel enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half Transfer interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral size",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory size",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PL": {
    +                    "description": "Channel Priority level",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "MEM2MEM": {
    +                    "description": "Memory to memory mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNDTR2": {
    +              "description": "DMA channel 2 number of data\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data to transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CPAR2": {
    +              "description": "DMA channel 2 peripheral address\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CMAR2": {
    +              "description": "DMA channel 2 memory address\n          register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MA": {
    +                    "description": "Memory address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CCR3": {
    +              "description": "DMA channel configuration register\n          (DMA_CCR)",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EN": {
    +                    "description": "Channel enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half Transfer interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral size",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory size",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PL": {
    +                    "description": "Channel Priority level",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "MEM2MEM": {
    +                    "description": "Memory to memory mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNDTR3": {
    +              "description": "DMA channel 3 number of data\n          register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data to transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CPAR3": {
    +              "description": "DMA channel 3 peripheral address\n          register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CMAR3": {
    +              "description": "DMA channel 3 memory address\n          register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MA": {
    +                    "description": "Memory address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CCR4": {
    +              "description": "DMA channel configuration register\n          (DMA_CCR)",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EN": {
    +                    "description": "Channel enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half Transfer interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral size",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory size",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PL": {
    +                    "description": "Channel Priority level",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "MEM2MEM": {
    +                    "description": "Memory to memory mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNDTR4": {
    +              "description": "DMA channel 4 number of data\n          register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data to transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CPAR4": {
    +              "description": "DMA channel 4 peripheral address\n          register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CMAR4": {
    +              "description": "DMA channel 4 memory address\n          register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MA": {
    +                    "description": "Memory address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CCR5": {
    +              "description": "DMA channel configuration register\n          (DMA_CCR)",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EN": {
    +                    "description": "Channel enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half Transfer interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral size",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory size",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PL": {
    +                    "description": "Channel Priority level",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "MEM2MEM": {
    +                    "description": "Memory to memory mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNDTR5": {
    +              "description": "DMA channel 5 number of data\n          register",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data to transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CPAR5": {
    +              "description": "DMA channel 5 peripheral address\n          register",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CMAR5": {
    +              "description": "DMA channel 5 memory address\n          register",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MA": {
    +                    "description": "Memory address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CCR6": {
    +              "description": "DMA channel configuration register\n          (DMA_CCR)",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EN": {
    +                    "description": "Channel enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half Transfer interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral size",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory size",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PL": {
    +                    "description": "Channel Priority level",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "MEM2MEM": {
    +                    "description": "Memory to memory mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNDTR6": {
    +              "description": "DMA channel 6 number of data\n          register",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data to transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CPAR6": {
    +              "description": "DMA channel 6 peripheral address\n          register",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CMAR6": {
    +              "description": "DMA channel 6 memory address\n          register",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MA": {
    +                    "description": "Memory address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CCR7": {
    +              "description": "DMA channel configuration register\n          (DMA_CCR)",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EN": {
    +                    "description": "Channel enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half Transfer interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral size",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory size",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PL": {
    +                    "description": "Channel Priority level",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "MEM2MEM": {
    +                    "description": "Memory to memory mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNDTR7": {
    +              "description": "DMA channel 7 number of data\n          register",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data to transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CPAR7": {
    +              "description": "DMA channel 7 peripheral address\n          register",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CMAR7": {
    +              "description": "DMA channel 7 memory address\n          register",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MA": {
    +                    "description": "Memory address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "ETHERNET_DMA": {
    +        "description": "Ethernet: DMA controller operation",
    +        "children": {
    +          "registers": {
    +            "DMABMR": {
    +              "description": "Ethernet DMA bus mode register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 131329,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SR": {
    +                    "description": "Software reset",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DA": {
    +                    "description": "DMA Arbitration",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DSL": {
    +                    "description": "Descriptor skip length",
    +                    "offset": 2,
    +                    "size": 5
    +                  },
    +                  "PBL": {
    +                    "description": "Programmable burst length",
    +                    "offset": 8,
    +                    "size": 6
    +                  },
    +                  "RTPR": {
    +                    "description": "Rx Tx priority ratio",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "FB": {
    +                    "description": "Fixed burst",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RDP": {
    +                    "description": "Rx DMA PBL",
    +                    "offset": 17,
    +                    "size": 6
    +                  },
    +                  "USP": {
    +                    "description": "Use separate PBL",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FPM": {
    +                    "description": "4xPBL mode",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "AAB": {
    +                    "description": "Address-aligned beats",
    +                    "offset": 25,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMATPDR": {
    +              "description": "Ethernet DMA transmit poll demand\n          register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TPD": {
    +                    "description": "Transmit poll demand",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DMARPDR": {
    +              "description": "EHERNET DMA receive poll demand\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RPD": {
    +                    "description": "Receive poll demand",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DMARDLAR": {
    +              "description": "Ethernet DMA receive descriptor list address\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SRL": {
    +                    "description": "Start of receive list",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DMATDLAR": {
    +              "description": "Ethernet DMA transmit descriptor list\n          address register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STL": {
    +                    "description": "Start of transmit list",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DMASR": {
    +              "description": "Ethernet DMA status register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TS": {
    +                    "description": "Transmit status",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TPSS": {
    +                    "description": "Transmit process stopped\n              status",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TBUS": {
    +                    "description": "Transmit buffer unavailable\n              status",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TJTS": {
    +                    "description": "Transmit jabber timeout\n              status",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ROS": {
    +                    "description": "Receive overflow status",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TUS": {
    +                    "description": "Transmit underflow status",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RS": {
    +                    "description": "Receive status",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RBUS": {
    +                    "description": "Receive buffer unavailable\n              status",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RPSS": {
    +                    "description": "Receive process stopped\n              status",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PWTS": {
    +                    "description": "Receive watchdog timeout\n              status",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ETS": {
    +                    "description": "Early transmit status",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FBES": {
    +                    "description": "Fatal bus error status",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ERS": {
    +                    "description": "Early receive status",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "AIS": {
    +                    "description": "Abnormal interrupt summary",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "NIS": {
    +                    "description": "Normal interrupt summary",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RPS": {
    +                    "description": "Receive process state",
    +                    "offset": 17,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "TPS": {
    +                    "description": "Transmit process state",
    +                    "offset": 20,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "EBS": {
    +                    "description": "Error bits status",
    +                    "offset": 23,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "MMCS": {
    +                    "description": "MMC status",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PMTS": {
    +                    "description": "PMT status",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TSTS": {
    +                    "description": "Time stamp trigger status",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DMAOMR": {
    +              "description": "Ethernet DMA operation mode\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SR": {
    +                    "description": "SR",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OSF": {
    +                    "description": "OSF",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTC": {
    +                    "description": "RTC",
    +                    "offset": 3,
    +                    "size": 2
    +                  },
    +                  "FUGF": {
    +                    "description": "FUGF",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FEF": {
    +                    "description": "FEF",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ST": {
    +                    "description": "ST",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TTC": {
    +                    "description": "TTC",
    +                    "offset": 14,
    +                    "size": 3
    +                  },
    +                  "FTF": {
    +                    "description": "FTF",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "TSF": {
    +                    "description": "TSF",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "DFRF": {
    +                    "description": "DFRF",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "RSF": {
    +                    "description": "RSF",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "DTCEFD": {
    +                    "description": "DTCEFD",
    +                    "offset": 26,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMAIER": {
    +              "description": "Ethernet DMA interrupt enable\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIE": {
    +                    "description": "Transmit interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TPSIE": {
    +                    "description": "Transmit process stopped interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TBUIE": {
    +                    "description": "Transmit buffer unavailable interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TJTIE": {
    +                    "description": "Transmit jabber timeout interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ROIE": {
    +                    "description": "Overflow interrupt enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TUIE": {
    +                    "description": "Underflow interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RIE": {
    +                    "description": "Receive interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RBUIE": {
    +                    "description": "Receive buffer unavailable interrupt\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RPSIE": {
    +                    "description": "Receive process stopped interrupt\n              enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "RWTIE": {
    +                    "description": "receive watchdog timeout interrupt\n              enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ETIE": {
    +                    "description": "Early transmit interrupt\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FBEIE": {
    +                    "description": "Fatal bus error interrupt\n              enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ERIE": {
    +                    "description": "Early receive interrupt\n              enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "AISE": {
    +                    "description": "Abnormal interrupt summary\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "NISE": {
    +                    "description": "Normal interrupt summary\n              enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMAMFBOCR": {
    +              "description": "Ethernet DMA missed frame and buffer\n          overflow counter register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "MFC": {
    +                    "description": "Missed frames by the\n              controller",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "OMFC": {
    +                    "description": "Overflow bit for missed frame\n              counter",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "MFA": {
    +                    "description": "Missed frames by the\n              application",
    +                    "offset": 17,
    +                    "size": 11
    +                  },
    +                  "OFOC": {
    +                    "description": "Overflow bit for FIFO overflow\n              counter",
    +                    "offset": 28,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMACHTDR": {
    +              "description": "Ethernet DMA current host transmit\n          descriptor register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "HTDAP": {
    +                    "description": "Host transmit descriptor address\n              pointer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DMACHRDR": {
    +              "description": "Ethernet DMA current host receive descriptor\n          register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "HRDAP": {
    +                    "description": "Host receive descriptor address\n              pointer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DMACHTBAR": {
    +              "description": "Ethernet DMA current host transmit buffer\n          address register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "HTBAP": {
    +                    "description": "Host transmit buffer address\n              pointer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DMACHRBAR": {
    +              "description": "Ethernet DMA current host receive buffer\n          address register",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "HRBAP": {
    +                    "description": "Host receive buffer address\n              pointer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SDIO": {
    +        "description": "Secure digital input/output\n      interface",
    +        "children": {
    +          "registers": {
    +            "POWER": {
    +              "description": "Bits 1:0 = PWRCTRL: Power supply control\n          bits",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PWRCTRL": {
    +                    "description": "PWRCTRL",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLKCR": {
    +              "description": "SDI clock control register\n          (SDIO_CLKCR)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLKDIV": {
    +                    "description": "Clock divide factor",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "CLKEN": {
    +                    "description": "Clock enable bit",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PWRSAV": {
    +                    "description": "Power saving configuration\n              bit",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BYPASS": {
    +                    "description": "Clock divider bypass enable\n              bit",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "WIDBUS": {
    +                    "description": "Wide bus mode enable bit",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "NEGEDGE": {
    +                    "description": "SDIO_CK dephasing selection\n              bit",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "HWFC_EN": {
    +                    "description": "HW Flow Control enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ARG": {
    +              "description": "Bits 31:0 = : Command argument",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CMDARG": {
    +                    "description": "Command argument",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CMD": {
    +              "description": "SDIO command register\n          (SDIO_CMD)",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CMDINDEX": {
    +                    "description": "CMDINDEX",
    +                    "offset": 0,
    +                    "size": 6
    +                  },
    +                  "WAITRESP": {
    +                    "description": "WAITRESP",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "WAITINT": {
    +                    "description": "WAITINT",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "WAITPEND": {
    +                    "description": "WAITPEND",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CPSMEN": {
    +                    "description": "CPSMEN",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SDIOSuspend": {
    +                    "description": "SDIOSuspend",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ENCMDcompl": {
    +                    "description": "ENCMDcompl",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "nIEN": {
    +                    "description": "nIEN",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CE_ATACMD": {
    +                    "description": "CE_ATACMD",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RESPCMD": {
    +              "description": "SDIO command register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RESPCMD": {
    +                    "description": "RESPCMD",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "RESPI1": {
    +              "description": "Bits 31:0 = CARDSTATUS1",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CARDSTATUS1": {
    +                    "description": "CARDSTATUS1",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "RESP2": {
    +              "description": "Bits 31:0 = CARDSTATUS2",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CARDSTATUS2": {
    +                    "description": "CARDSTATUS2",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "RESP3": {
    +              "description": "Bits 31:0 = CARDSTATUS3",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CARDSTATUS3": {
    +                    "description": "CARDSTATUS3",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "RESP4": {
    +              "description": "Bits 31:0 = CARDSTATUS4",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CARDSTATUS4": {
    +                    "description": "CARDSTATUS4",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DTIMER": {
    +              "description": "Bits 31:0 = DATATIME: Data timeout\n          period",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATATIME": {
    +                    "description": "Data timeout period",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DLEN": {
    +              "description": "Bits 24:0 = DATALENGTH: Data length\n          value",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATALENGTH": {
    +                    "description": "Data length value",
    +                    "offset": 0,
    +                    "size": 25
    +                  }
    +                }
    +              }
    +            },
    +            "DCTRL": {
    +              "description": "SDIO data control register\n          (SDIO_DCTRL)",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DTEN": {
    +                    "description": "DTEN",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DTDIR": {
    +                    "description": "DTDIR",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DTMODE": {
    +                    "description": "DTMODE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DMAEN": {
    +                    "description": "DMAEN",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DBLOCKSIZE": {
    +                    "description": "DBLOCKSIZE",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "PWSTART": {
    +                    "description": "PWSTART",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PWSTOP": {
    +                    "description": "PWSTOP",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RWMOD": {
    +                    "description": "RWMOD",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SDIOEN": {
    +                    "description": "SDIOEN",
    +                    "offset": 11,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DCOUNT": {
    +              "description": "Bits 24:0 = DATACOUNT: Data count\n          value",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DATACOUNT": {
    +                    "description": "Data count value",
    +                    "offset": 0,
    +                    "size": 25
    +                  }
    +                }
    +              }
    +            },
    +            "STA": {
    +              "description": "SDIO status register\n          (SDIO_STA)",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CCRCFAIL": {
    +                    "description": "CCRCFAIL",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DCRCFAIL": {
    +                    "description": "DCRCFAIL",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CTIMEOUT": {
    +                    "description": "CTIMEOUT",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DTIMEOUT": {
    +                    "description": "DTIMEOUT",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TXUNDERR": {
    +                    "description": "TXUNDERR",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RXOVERR": {
    +                    "description": "RXOVERR",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CMDREND": {
    +                    "description": "CMDREND",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CMDSENT": {
    +                    "description": "CMDSENT",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "DATAEND": {
    +                    "description": "DATAEND",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "STBITERR": {
    +                    "description": "STBITERR",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DBCKEND": {
    +                    "description": "DBCKEND",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CMDACT": {
    +                    "description": "CMDACT",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TXACT": {
    +                    "description": "TXACT",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "RXACT": {
    +                    "description": "RXACT",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TXFIFOHE": {
    +                    "description": "TXFIFOHE",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "RXFIFOHF": {
    +                    "description": "RXFIFOHF",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TXFIFOF": {
    +                    "description": "TXFIFOF",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RXFIFOF": {
    +                    "description": "RXFIFOF",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TXFIFOE": {
    +                    "description": "TXFIFOE",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "RXFIFOE": {
    +                    "description": "RXFIFOE",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "TXDAVL": {
    +                    "description": "TXDAVL",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "RXDAVL": {
    +                    "description": "RXDAVL",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "SDIOIT": {
    +                    "description": "SDIOIT",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "CEATAEND": {
    +                    "description": "CEATAEND",
    +                    "offset": 23,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ICR": {
    +              "description": "SDIO interrupt clear register\n          (SDIO_ICR)",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCRCFAILC": {
    +                    "description": "CCRCFAILC",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DCRCFAILC": {
    +                    "description": "DCRCFAILC",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CTIMEOUTC": {
    +                    "description": "CTIMEOUTC",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DTIMEOUTC": {
    +                    "description": "DTIMEOUTC",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TXUNDERRC": {
    +                    "description": "TXUNDERRC",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RXOVERRC": {
    +                    "description": "RXOVERRC",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CMDRENDC": {
    +                    "description": "CMDRENDC",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CMDSENTC": {
    +                    "description": "CMDSENTC",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "DATAENDC": {
    +                    "description": "DATAENDC",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "STBITERRC": {
    +                    "description": "STBITERRC",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DBCKENDC": {
    +                    "description": "DBCKENDC",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SDIOITC": {
    +                    "description": "SDIOITC",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "CEATAENDC": {
    +                    "description": "CEATAENDC",
    +                    "offset": 23,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MASK": {
    +              "description": "SDIO mask register (SDIO_MASK)",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCRCFAILIE": {
    +                    "description": "CCRCFAILIE",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DCRCFAILIE": {
    +                    "description": "DCRCFAILIE",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CTIMEOUTIE": {
    +                    "description": "CTIMEOUTIE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DTIMEOUTIE": {
    +                    "description": "DTIMEOUTIE",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TXUNDERRIE": {
    +                    "description": "TXUNDERRIE",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RXOVERRIE": {
    +                    "description": "RXOVERRIE",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CMDRENDIE": {
    +                    "description": "CMDRENDIE",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CMDSENTIE": {
    +                    "description": "CMDSENTIE",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "DATAENDIE": {
    +                    "description": "DATAENDIE",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "STBITERRIE": {
    +                    "description": "STBITERRIE",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DBACKENDIE": {
    +                    "description": "DBACKENDIE",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CMDACTIE": {
    +                    "description": "CMDACTIE",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TXACTIE": {
    +                    "description": "TXACTIE",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "RXACTIE": {
    +                    "description": "RXACTIE",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TXFIFOHEIE": {
    +                    "description": "TXFIFOHEIE",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "RXFIFOHFIE": {
    +                    "description": "RXFIFOHFIE",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TXFIFOFIE": {
    +                    "description": "TXFIFOFIE",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RXFIFOFIE": {
    +                    "description": "RXFIFOFIE",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TXFIFOEIE": {
    +                    "description": "TXFIFOEIE",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "RXFIFOEIE": {
    +                    "description": "RXFIFOEIE",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "TXDAVLIE": {
    +                    "description": "TXDAVLIE",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "RXDAVLIE": {
    +                    "description": "RXDAVLIE",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "SDIOITIE": {
    +                    "description": "SDIOITIE",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "CEATENDIE": {
    +                    "description": "CEATENDIE",
    +                    "offset": 23,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FIFOCNT": {
    +              "description": "Bits 23:0 = FIFOCOUNT: Remaining number of\n          words to be written to or read from the\n          FIFO",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "FIF0COUNT": {
    +                    "description": "FIF0COUNT",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "FIFO": {
    +              "description": "bits 31:0 = FIFOData: Receive and transmit\n          FIFO data",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FIFOData": {
    +                    "description": "FIFOData",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "RTC": {
    +        "description": "Real time clock",
    +        "children": {
    +          "registers": {
    +            "CRH": {
    +              "description": "RTC Control Register High",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SECIE": {
    +                    "description": "Second interrupt Enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ALRIE": {
    +                    "description": "Alarm interrupt Enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OWIE": {
    +                    "description": "Overflow interrupt Enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CRL": {
    +              "description": "RTC Control Register Low",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 32,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SECF": {
    +                    "description": "Second Flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ALRF": {
    +                    "description": "Alarm Flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OWF": {
    +                    "description": "Overflow Flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RSF": {
    +                    "description": "Registers Synchronized\n              Flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CNF": {
    +                    "description": "Configuration Flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RTOFF": {
    +                    "description": "RTC operation OFF",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PRLH": {
    +              "description": "RTC Prescaler Load Register\n          High",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "PRLH": {
    +                    "description": "RTC Prescaler Load Register\n              High",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "PRLL": {
    +              "description": "RTC Prescaler Load Register\n          Low",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 32768,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "PRLL": {
    +                    "description": "RTC Prescaler Divider Register\n              Low",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DIVH": {
    +              "description": "RTC Prescaler Divider Register\n          High",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DIVH": {
    +                    "description": "RTC prescaler divider register\n              high",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "DIVL": {
    +              "description": "RTC Prescaler Divider Register\n          Low",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 32768,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DIVL": {
    +                    "description": "RTC prescaler divider register\n              Low",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CNTH": {
    +              "description": "RTC Counter Register High",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNTH": {
    +                    "description": "RTC counter register high",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CNTL": {
    +              "description": "RTC Counter Register Low",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNTL": {
    +                    "description": "RTC counter register Low",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ALRH": {
    +              "description": "RTC Alarm Register High",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 65535,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "ALRH": {
    +                    "description": "RTC alarm register high",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ALRL": {
    +              "description": "RTC Alarm Register Low",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 65535,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "ALRL": {
    +                    "description": "RTC alarm register low",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "BKP": {
    +        "description": "Backup registers",
    +        "children": {
    +          "registers": {
    +            "DR1": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D1": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR2": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D2": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR3": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D3": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR4": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D4": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR5": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D5": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR6": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D6": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR7": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D7": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR8": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D8": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR9": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D9": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR10": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D10": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR11": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DR11": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR12": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DR12": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR13": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DR13": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR14": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D14": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR15": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D15": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR16": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D16": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR17": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D17": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR18": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D18": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR19": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D19": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR20": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D20": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR21": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D21": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR22": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D22": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR23": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D23": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR24": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D24": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR25": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D25": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR26": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D26": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR27": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D27": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR28": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D28": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR29": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D29": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR30": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D30": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR31": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D31": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR32": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D32": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR33": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D33": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR34": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D34": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR35": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 156,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D35": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR36": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D36": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR37": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 164,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D37": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR38": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D38": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR39": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D39": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR40": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D40": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR41": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 180,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D41": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR42": {
    +              "description": "Backup data register (BKP_DR)",
    +              "offset": 184,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "D42": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "RTCCR": {
    +              "description": "RTC clock calibration register\n          (BKP_RTCCR)",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CAL": {
    +                    "description": "Calibration value",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "CCO": {
    +                    "description": "Calibration Clock Output",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ASOE": {
    +                    "description": "Alarm or second output\n              enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ASOS": {
    +                    "description": "Alarm or second output\n              selection",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR": {
    +              "description": "Backup control register\n          (BKP_CR)",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TPE": {
    +                    "description": "Tamper pin enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TPAL": {
    +                    "description": "Tamper pin active level",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CSR": {
    +              "description": "BKP_CSR control/status register\n          (BKP_CSR)",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTE": {
    +                    "description": "Clear Tamper event",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CTI": {
    +                    "description": "Clear Tamper Interrupt",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TPIE": {
    +                    "description": "Tamper Pin interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TEF": {
    +                    "description": "Tamper Event Flag",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TIF": {
    +                    "description": "Tamper Interrupt Flag",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "IWDG": {
    +        "description": "Independent watchdog",
    +        "children": {
    +          "registers": {
    +            "KR": {
    +              "description": "Key register (IWDG_KR)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "KEY": {
    +                    "description": "Key value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PR": {
    +              "description": "Prescaler register (IWDG_PR)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PR": {
    +                    "description": "Prescaler divider",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "RLR": {
    +              "description": "Reload register (IWDG_RLR)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 4095,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RL": {
    +                    "description": "Watchdog counter reload\n              value",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "Status register (IWDG_SR)",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "PVU": {
    +                    "description": "Watchdog prescaler value\n              update",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RVU": {
    +                    "description": "Watchdog counter reload value\n              update",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "WWDG": {
    +        "description": "Window watchdog",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "Control register (WWDG_CR)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 127,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "T": {
    +                    "description": "7-bit counter (MSB to LSB)",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "WDGA": {
    +                    "description": "Activation bit",
    +                    "offset": 7,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CFR": {
    +              "description": "Configuration register\n          (WWDG_CFR)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 127,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "W": {
    +                    "description": "7-bit window value",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "WDGTB": {
    +                    "description": "Timer Base",
    +                    "offset": 7,
    +                    "size": 2
    +                  },
    +                  "EWI": {
    +                    "description": "Early Wakeup Interrupt",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "Status register (WWDG_SR)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EWI": {
    +                    "description": "Early Wakeup Interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIM1": {
    +        "description": "Advanced timer",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CKD": {
    +                    "description": "Clock division",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CMS": {
    +                    "description": "Center-aligned mode\n              selection",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "DIR": {
    +                    "description": "Direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "OPM": {
    +                    "description": "One-pulse mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OIS4": {
    +                    "description": "Output Idle state 4",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "OIS3N": {
    +                    "description": "Output Idle state 3",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "OIS3": {
    +                    "description": "Output Idle state 3",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "OIS2N": {
    +                    "description": "Output Idle state 2",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OIS2": {
    +                    "description": "Output Idle state 2",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OIS1N": {
    +                    "description": "Output Idle state 1",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "OIS1": {
    +                    "description": "Output Idle state 1",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TI1S": {
    +                    "description": "TI1 selection",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MMS": {
    +                    "description": "Master mode selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "CCDS": {
    +                    "description": "Capture/compare DMA\n              selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CCUS": {
    +                    "description": "Capture/compare control update\n              selection",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CCPC": {
    +                    "description": "Capture/compare preloaded\n              control",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SMCR": {
    +              "description": "slave mode control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ETP": {
    +                    "description": "External trigger polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ECE": {
    +                    "description": "External clock enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ETPS": {
    +                    "description": "External trigger prescaler",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "ETF": {
    +                    "description": "External trigger filter",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "MSM": {
    +                    "description": "Master/Slave mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TS": {
    +                    "description": "Trigger selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SMS": {
    +                    "description": "Slave mode selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TDE": {
    +                    "description": "Trigger DMA request enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "COMDE": {
    +                    "description": "COM DMA request enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CC4DE": {
    +                    "description": "Capture/Compare 4 DMA request\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3DE": {
    +                    "description": "Capture/Compare 3 DMA request\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC2DE": {
    +                    "description": "Capture/Compare 2 DMA request\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1DE": {
    +                    "description": "Capture/Compare 1 DMA request\n              enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "UDE": {
    +                    "description": "Update DMA request enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TIE": {
    +                    "description": "Trigger interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC4IE": {
    +                    "description": "Capture/Compare 4 interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3IE": {
    +                    "description": "Capture/Compare 3 interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2IE": {
    +                    "description": "Capture/Compare 2 interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IE": {
    +                    "description": "Capture/Compare 1 interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "BIE": {
    +                    "description": "Break interrupt enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "COMIE": {
    +                    "description": "COM interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC4OF": {
    +                    "description": "Capture/Compare 4 overcapture\n              flag",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3OF": {
    +                    "description": "Capture/Compare 3 overcapture\n              flag",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC2OF": {
    +                    "description": "Capture/compare 2 overcapture\n              flag",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1OF": {
    +                    "description": "Capture/Compare 1 overcapture\n              flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BIF": {
    +                    "description": "Break interrupt flag",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TIF": {
    +                    "description": "Trigger interrupt flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "COMIF": {
    +                    "description": "COM interrupt flag",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC4IF": {
    +                    "description": "Capture/Compare 4 interrupt\n              flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3IF": {
    +                    "description": "Capture/Compare 3 interrupt\n              flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2IF": {
    +                    "description": "Capture/Compare 2 interrupt\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IF": {
    +                    "description": "Capture/compare 1 interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "BG": {
    +                    "description": "Break generation",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TG": {
    +                    "description": "Trigger generation",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "COMG": {
    +                    "description": "Capture/Compare control update\n              generation",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC4G": {
    +                    "description": "Capture/compare 4\n              generation",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3G": {
    +                    "description": "Capture/compare 3\n              generation",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2G": {
    +                    "description": "Capture/compare 2\n              generation",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1G": {
    +                    "description": "Capture/compare 1\n              generation",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Output": {
    +              "description": "capture/compare mode register (output\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OC2CE": {
    +                    "description": "Output Compare 2 clear\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC2M": {
    +                    "description": "Output Compare 2 mode",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC2PE": {
    +                    "description": "Output Compare 2 preload\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC2FE": {
    +                    "description": "Output Compare 2 fast\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/Compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC1CE": {
    +                    "description": "Output Compare 1 clear\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OC1M": {
    +                    "description": "Output Compare 1 mode",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC1PE": {
    +                    "description": "Output Compare 1 preload\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC1FE": {
    +                    "description": "Output Compare 1 fast\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Input": {
    +              "description": "capture/compare mode register 1 (input\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC2F": {
    +                    "description": "Input capture 2 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC2PCS": {
    +                    "description": "Input capture 2 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/Compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC1F": {
    +                    "description": "Input capture 1 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ICPCS": {
    +                    "description": "Input capture 1 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR2_Output": {
    +              "description": "capture/compare mode register (output\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OC4CE": {
    +                    "description": "Output compare 4 clear\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC4M": {
    +                    "description": "Output compare 4 mode",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC4PE": {
    +                    "description": "Output compare 4 preload\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC4FE": {
    +                    "description": "Output compare 4 fast\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC4S": {
    +                    "description": "Capture/Compare 4\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC3CE": {
    +                    "description": "Output compare 3 clear\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OC3M": {
    +                    "description": "Output compare 3 mode",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC3PE": {
    +                    "description": "Output compare 3 preload\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC3FE": {
    +                    "description": "Output compare 3 fast\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC3S": {
    +                    "description": "Capture/Compare 3\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR2_Input": {
    +              "description": "capture/compare mode register 2 (input\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC4F": {
    +                    "description": "Input capture 4 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC4PSC": {
    +                    "description": "Input capture 4 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC4S": {
    +                    "description": "Capture/Compare 4\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC3F": {
    +                    "description": "Input capture 3 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "IC3PSC": {
    +                    "description": "Input capture 3 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC3S": {
    +                    "description": "Capture/compare 3\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCER": {
    +              "description": "capture/compare enable\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC4P": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CC4E": {
    +                    "description": "Capture/Compare 4 output\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3NP": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC3NE": {
    +                    "description": "Capture/Compare 3 complementary output\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC3P": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CC3E": {
    +                    "description": "Capture/Compare 3 output\n              enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CC2NP": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CC2NE": {
    +                    "description": "Capture/Compare 2 complementary output\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC2P": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC2E": {
    +                    "description": "Capture/Compare 2 output\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC1NP": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC1NE": {
    +                    "description": "Capture/Compare 1 complementary output\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1P": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC1E": {
    +                    "description": "Capture/Compare 1 output\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARR": {
    +                    "description": "Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR1": {
    +              "description": "capture/compare register 1",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR1": {
    +                    "description": "Capture/Compare 1 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR2": {
    +              "description": "capture/compare register 2",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR2": {
    +                    "description": "Capture/Compare 2 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR3": {
    +              "description": "capture/compare register 3",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR3": {
    +                    "description": "Capture/Compare value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR4": {
    +              "description": "capture/compare register 4",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR4": {
    +                    "description": "Capture/Compare value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DCR": {
    +              "description": "DMA control register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBL": {
    +                    "description": "DMA burst length",
    +                    "offset": 8,
    +                    "size": 5
    +                  },
    +                  "DBA": {
    +                    "description": "DMA base address",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "DMAR": {
    +              "description": "DMA address for full transfer",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAB": {
    +                    "description": "DMA register for burst\n              accesses",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "RCR": {
    +              "description": "repetition counter register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REP": {
    +                    "description": "Repetition counter value",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "BDTR": {
    +              "description": "break and dead-time register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MOE": {
    +                    "description": "Main output enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "AOE": {
    +                    "description": "Automatic output enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "BKP": {
    +                    "description": "Break polarity",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BKE": {
    +                    "description": "Break enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "OSSR": {
    +                    "description": "Off-state selection for Run\n              mode",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OSSI": {
    +                    "description": "Off-state selection for Idle\n              mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LOCK": {
    +                    "description": "Lock configuration",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "DTG": {
    +                    "description": "Dead-time generator setup",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "ETHERNET_PTP": {
    +        "description": "Ethernet: Precision time protocol",
    +        "children": {
    +          "registers": {
    +            "PTPTSCR": {
    +              "description": "Ethernet PTP time stamp control register\n          (ETH_PTPTSCR)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TSE": {
    +                    "description": "Time stamp enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TSFCU": {
    +                    "description": "Time stamp fine or coarse\n              update",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TSSTI": {
    +                    "description": "Time stamp system time\n              initialize",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TSSTU": {
    +                    "description": "Time stamp system time\n              update",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TSITE": {
    +                    "description": "Time stamp interrupt trigger\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TSARU": {
    +                    "description": "Time stamp addend register\n              update",
    +                    "offset": 5,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PTPSSIR": {
    +              "description": "Ethernet PTP subsecond increment\n          register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STSSI": {
    +                    "description": "System time subsecond\n              increment",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "PTPTSHR": {
    +              "description": "Ethernet PTP time stamp high\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "STS": {
    +                    "description": "System time second",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PTPTSLR": {
    +              "description": "Ethernet PTP time stamp low register\n          (ETH_PTPTSLR)",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "STSS": {
    +                    "description": "System time subseconds",
    +                    "offset": 0,
    +                    "size": 31
    +                  },
    +                  "STPNS": {
    +                    "description": "System time positive or negative\n              sign",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PTPTSHUR": {
    +              "description": "Ethernet PTP time stamp high update\n          register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TSUS": {
    +                    "description": "Time stamp update second",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PTPTSLUR": {
    +              "description": "Ethernet PTP time stamp low update register\n          (ETH_PTPTSLUR)",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TSUSS": {
    +                    "description": "Time stamp update\n              subseconds",
    +                    "offset": 0,
    +                    "size": 31
    +                  },
    +                  "TSUPNS": {
    +                    "description": "Time stamp update positive or negative\n              sign",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PTPTSAR": {
    +              "description": "Ethernet PTP time stamp addend\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TSA": {
    +                    "description": "Time stamp addend",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PTPTTHR": {
    +              "description": "Ethernet PTP target time high\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TTSH": {
    +                    "description": "Target time stamp high",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PTPTTLR": {
    +              "description": "Ethernet PTP target time low\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TTSL": {
    +                    "description": "Target time stamp low",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIM2": {
    +        "description": "General purpose timer",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CKD": {
    +                    "description": "Clock division",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CMS": {
    +                    "description": "Center-aligned mode\n              selection",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "DIR": {
    +                    "description": "Direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "OPM": {
    +                    "description": "One-pulse mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TI1S": {
    +                    "description": "TI1 selection",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MMS": {
    +                    "description": "Master mode selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "CCDS": {
    +                    "description": "Capture/compare DMA\n              selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SMCR": {
    +              "description": "slave mode control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ETP": {
    +                    "description": "External trigger polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ECE": {
    +                    "description": "External clock enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ETPS": {
    +                    "description": "External trigger prescaler",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "ETF": {
    +                    "description": "External trigger filter",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "MSM": {
    +                    "description": "Master/Slave mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TS": {
    +                    "description": "Trigger selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SMS": {
    +                    "description": "Slave mode selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TDE": {
    +                    "description": "Trigger DMA request enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CC4DE": {
    +                    "description": "Capture/Compare 4 DMA request\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3DE": {
    +                    "description": "Capture/Compare 3 DMA request\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC2DE": {
    +                    "description": "Capture/Compare 2 DMA request\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1DE": {
    +                    "description": "Capture/Compare 1 DMA request\n              enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "UDE": {
    +                    "description": "Update DMA request enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TIE": {
    +                    "description": "Trigger interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC4IE": {
    +                    "description": "Capture/Compare 4 interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3IE": {
    +                    "description": "Capture/Compare 3 interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2IE": {
    +                    "description": "Capture/Compare 2 interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IE": {
    +                    "description": "Capture/Compare 1 interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC4OF": {
    +                    "description": "Capture/Compare 4 overcapture\n              flag",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3OF": {
    +                    "description": "Capture/Compare 3 overcapture\n              flag",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC2OF": {
    +                    "description": "Capture/compare 2 overcapture\n              flag",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1OF": {
    +                    "description": "Capture/Compare 1 overcapture\n              flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TIF": {
    +                    "description": "Trigger interrupt flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC4IF": {
    +                    "description": "Capture/Compare 4 interrupt\n              flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3IF": {
    +                    "description": "Capture/Compare 3 interrupt\n              flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2IF": {
    +                    "description": "Capture/Compare 2 interrupt\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IF": {
    +                    "description": "Capture/compare 1 interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TG": {
    +                    "description": "Trigger generation",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC4G": {
    +                    "description": "Capture/compare 4\n              generation",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3G": {
    +                    "description": "Capture/compare 3\n              generation",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2G": {
    +                    "description": "Capture/compare 2\n              generation",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1G": {
    +                    "description": "Capture/compare 1\n              generation",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Output": {
    +              "description": "capture/compare mode register 1 (output\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OC2CE": {
    +                    "description": "Output compare 2 clear\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC2M": {
    +                    "description": "Output compare 2 mode",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC2PE": {
    +                    "description": "Output compare 2 preload\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC2FE": {
    +                    "description": "Output compare 2 fast\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/Compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC1CE": {
    +                    "description": "Output compare 1 clear\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OC1M": {
    +                    "description": "Output compare 1 mode",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC1PE": {
    +                    "description": "Output compare 1 preload\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC1FE": {
    +                    "description": "Output compare 1 fast\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Input": {
    +              "description": "capture/compare mode register 1 (input\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC2F": {
    +                    "description": "Input capture 2 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC2PSC": {
    +                    "description": "Input capture 2 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC1F": {
    +                    "description": "Input capture 1 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "IC1PSC": {
    +                    "description": "Input capture 1 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR2_Output": {
    +              "description": "capture/compare mode register 2 (output\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "O24CE": {
    +                    "description": "Output compare 4 clear\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC4M": {
    +                    "description": "Output compare 4 mode",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC4PE": {
    +                    "description": "Output compare 4 preload\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC4FE": {
    +                    "description": "Output compare 4 fast\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC4S": {
    +                    "description": "Capture/Compare 4\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC3CE": {
    +                    "description": "Output compare 3 clear\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OC3M": {
    +                    "description": "Output compare 3 mode",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC3PE": {
    +                    "description": "Output compare 3 preload\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC3FE": {
    +                    "description": "Output compare 3 fast\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC3S": {
    +                    "description": "Capture/Compare 3\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR2_Input": {
    +              "description": "capture/compare mode register 2 (input\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC4F": {
    +                    "description": "Input capture 4 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC4PSC": {
    +                    "description": "Input capture 4 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC4S": {
    +                    "description": "Capture/Compare 4\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC3F": {
    +                    "description": "Input capture 3 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "IC3PSC": {
    +                    "description": "Input capture 3 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC3S": {
    +                    "description": "Capture/Compare 3\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCER": {
    +              "description": "capture/compare enable\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC4P": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CC4E": {
    +                    "description": "Capture/Compare 4 output\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3P": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CC3E": {
    +                    "description": "Capture/Compare 3 output\n              enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CC2P": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC2E": {
    +                    "description": "Capture/Compare 2 output\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC1P": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC1E": {
    +                    "description": "Capture/Compare 1 output\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARR": {
    +                    "description": "Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR1": {
    +              "description": "capture/compare register 1",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR1": {
    +                    "description": "Capture/Compare 1 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR2": {
    +              "description": "capture/compare register 2",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR2": {
    +                    "description": "Capture/Compare 2 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR3": {
    +              "description": "capture/compare register 3",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR3": {
    +                    "description": "Capture/Compare value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR4": {
    +              "description": "capture/compare register 4",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR4": {
    +                    "description": "Capture/Compare value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DCR": {
    +              "description": "DMA control register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBL": {
    +                    "description": "DMA burst length",
    +                    "offset": 8,
    +                    "size": 5
    +                  },
    +                  "DBA": {
    +                    "description": "DMA base address",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "DMAR": {
    +              "description": "DMA address for full transfer",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAB": {
    +                    "description": "DMA register for burst\n              accesses",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "ETHERNET_MAC": {
    +        "description": "Ethernet: media access control",
    +        "children": {
    +          "registers": {
    +            "MACCR": {
    +              "description": "Ethernet MAC configuration register\n          (ETH_MACCR)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 32768,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RE": {
    +                    "description": "Receiver enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TE": {
    +                    "description": "Transmitter enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DC": {
    +                    "description": "Deferral check",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BL": {
    +                    "description": "Back-off limit",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "APCS": {
    +                    "description": "Automatic pad/CRC\n              stripping",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RD": {
    +                    "description": "Retry disable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "IPCO": {
    +                    "description": "IPv4 checksum offload",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "DM": {
    +                    "description": "Duplex mode",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "LM": {
    +                    "description": "Loopback mode",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ROD": {
    +                    "description": "Receive own disable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FES": {
    +                    "description": "Fast Ethernet speed",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CSD": {
    +                    "description": "Carrier sense disable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "IFG": {
    +                    "description": "Interframe gap",
    +                    "offset": 17,
    +                    "size": 3
    +                  },
    +                  "JD": {
    +                    "description": "Jabber disable",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "WD": {
    +                    "description": "Watchdog disable",
    +                    "offset": 23,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACFFR": {
    +              "description": "Ethernet MAC frame filter register\n          (ETH_MACCFFR)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PM": {
    +                    "description": "Promiscuous mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "HU": {
    +                    "description": "Hash unicast",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HM": {
    +                    "description": "Hash multicast",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DAIF": {
    +                    "description": "Destination address inverse\n              filtering",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PAM": {
    +                    "description": "Pass all multicast",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BFD": {
    +                    "description": "Broadcast frames disable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PCF": {
    +                    "description": "Pass control frames",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "SAIF": {
    +                    "description": "Source address inverse\n              filtering",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SAF": {
    +                    "description": "Source address filter",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "HPF": {
    +                    "description": "Hash or perfect filter",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "RA": {
    +                    "description": "Receive all",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACHTHR": {
    +              "description": "Ethernet MAC hash table high\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HTH": {
    +                    "description": "Hash table high",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MACHTLR": {
    +              "description": "Ethernet MAC hash table low\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HTL": {
    +                    "description": "Hash table low",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MACMIIAR": {
    +              "description": "Ethernet MAC MII address register\n          (ETH_MACMIIAR)",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MB": {
    +                    "description": "MII busy",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MW": {
    +                    "description": "MII write",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CR": {
    +                    "description": "Clock range",
    +                    "offset": 2,
    +                    "size": 3
    +                  },
    +                  "MR": {
    +                    "description": "MII register",
    +                    "offset": 6,
    +                    "size": 5
    +                  },
    +                  "PA": {
    +                    "description": "PHY address",
    +                    "offset": 11,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "MACMIIDR": {
    +              "description": "Ethernet MAC MII data register\n          (ETH_MACMIIDR)",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MD": {
    +                    "description": "MII data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "MACFCR": {
    +              "description": "Ethernet MAC flow control register\n          (ETH_MACFCR)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FCB_BPA": {
    +                    "description": "Flow control busy/back pressure\n              activate",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TFCE": {
    +                    "description": "Transmit flow control\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RFCE": {
    +                    "description": "Receive flow control\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UPFD": {
    +                    "description": "Unicast pause frame detect",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PLT": {
    +                    "description": "Pause low threshold",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "ZQPD": {
    +                    "description": "Zero-quanta pause disable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PT": {
    +                    "description": "Pass control frames",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "MACVLANTR": {
    +              "description": "Ethernet MAC VLAN tag register\n          (ETH_MACVLANTR)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VLANTI": {
    +                    "description": "VLAN tag identifier (for receive\n              frames)",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "VLANTC": {
    +                    "description": "12-bit VLAN tag comparison",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACRWUFFR": {
    +              "description": "Ethernet MAC remote wakeup frame filter\n          register (ETH_MACRWUFFR)",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "MACPMTCSR": {
    +              "description": "Ethernet MAC PMT control and status register\n          (ETH_MACPMTCSR)",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PD": {
    +                    "description": "Power down",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MPE": {
    +                    "description": "Magic Packet enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "WFE": {
    +                    "description": "Wakeup frame enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MPR": {
    +                    "description": "Magic packet received",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "WFR": {
    +                    "description": "Wakeup frame received",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GU": {
    +                    "description": "Global unicast",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "WFFRPR": {
    +                    "description": "Wakeup frame filter register pointer\n              reset",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACSR": {
    +              "description": "Ethernet MAC interrupt status register\n          (ETH_MACSR)",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PMTS": {
    +                    "description": "PMT status",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MMCS": {
    +                    "description": "MMC status",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "MMCRS": {
    +                    "description": "MMC receive status",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "MMCTS": {
    +                    "description": "MMC transmit status",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TSTS": {
    +                    "description": "Time stamp trigger status",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACIMR": {
    +              "description": "Ethernet MAC interrupt mask register\n          (ETH_MACIMR)",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PMTIM": {
    +                    "description": "PMT interrupt mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TSTIM": {
    +                    "description": "Time stamp trigger interrupt\n              mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACA0HR": {
    +              "description": "Ethernet MAC address 0 high register\n          (ETH_MACA0HR)",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 1114111,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MACA0H": {
    +                    "description": "MAC address0 high",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "MO": {
    +                    "description": "Always 1",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "MACA0LR": {
    +              "description": "Ethernet MAC address 0 low\n          register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MACA0L": {
    +                    "description": "MAC address0 low",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MACA1HR": {
    +              "description": "Ethernet MAC address 1 high register\n          (ETH_MACA1HR)",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 65535,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MACA1H": {
    +                    "description": "MAC address1 high",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "MBC": {
    +                    "description": "Mask byte control",
    +                    "offset": 24,
    +                    "size": 6
    +                  },
    +                  "SA": {
    +                    "description": "Source address",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "AE": {
    +                    "description": "Address enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACA1LR": {
    +              "description": "Ethernet MAC address1 low\n          register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MACA1L": {
    +                    "description": "MAC address1 low",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MACA2HR": {
    +              "description": "Ethernet MAC address 2 high register\n          (ETH_MACA2HR)",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 80,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ETH_MACA2HR": {
    +                    "description": "Ethernet MAC address 2 high\n              register",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "MBC": {
    +                    "description": "Mask byte control",
    +                    "offset": 24,
    +                    "size": 6
    +                  },
    +                  "SA": {
    +                    "description": "Source address",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "AE": {
    +                    "description": "Address enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACA2LR": {
    +              "description": "Ethernet MAC address 2 low\n          register",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MACA2L": {
    +                    "description": "MAC address2 low",
    +                    "offset": 0,
    +                    "size": 31
    +                  }
    +                }
    +              }
    +            },
    +            "MACA3HR": {
    +              "description": "Ethernet MAC address 3 high register\n          (ETH_MACA3HR)",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 65535,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MACA3H": {
    +                    "description": "MAC address3 high",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "MBC": {
    +                    "description": "Mask byte control",
    +                    "offset": 24,
    +                    "size": 6
    +                  },
    +                  "SA": {
    +                    "description": "Source address",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "AE": {
    +                    "description": "Address enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACA3LR": {
    +              "description": "Ethernet MAC address 3 low\n          register",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MBCA3L": {
    +                    "description": "MAC address3 low",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "ETHERNET_MMC": {
    +        "description": "Ethernet: MAC management counters",
    +        "children": {
    +          "registers": {
    +            "MMCCR": {
    +              "description": "Ethernet MMC control register\n          (ETH_MMCCR)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CR": {
    +                    "description": "Counter reset",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CSR": {
    +                    "description": "Counter stop rollover",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ROR": {
    +                    "description": "Reset on read",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MCF": {
    +                    "description": "MMC counter freeze",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MMCRIR": {
    +              "description": "Ethernet MMC receive interrupt register\n          (ETH_MMCRIR)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RFCES": {
    +                    "description": "Received frames CRC error\n              status",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RFAES": {
    +                    "description": "Received frames alignment error\n              status",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RGUFS": {
    +                    "description": "Received Good Unicast Frames\n              Status",
    +                    "offset": 17,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MMCTIR": {
    +              "description": "Ethernet MMC transmit interrupt register\n          (ETH_MMCTIR)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TGFSCS": {
    +                    "description": "Transmitted good frames single collision\n              status",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TGFMSCS": {
    +                    "description": "Transmitted good frames more single\n              collision status",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TGFS": {
    +                    "description": "Transmitted good frames\n              status",
    +                    "offset": 21,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MMCRIMR": {
    +              "description": "Ethernet MMC receive interrupt mask register\n          (ETH_MMCRIMR)",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RFCEM": {
    +                    "description": "Received frame CRC error\n              mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RFAEM": {
    +                    "description": "Received frames alignment error\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RGUFM": {
    +                    "description": "Received good unicast frames\n              mask",
    +                    "offset": 17,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MMCTIMR": {
    +              "description": "Ethernet MMC transmit interrupt mask\n          register (ETH_MMCTIMR)",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TGFSCM": {
    +                    "description": "Transmitted good frames single collision\n              mask",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TGFMSCM": {
    +                    "description": "Transmitted good frames more single\n              collision mask",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TGFM": {
    +                    "description": "Transmitted good frames\n              mask",
    +                    "offset": 21,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MMCTGFSCCR": {
    +              "description": "Ethernet MMC transmitted good frames after a\n          single collision counter",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TGFSCC": {
    +                    "description": "Transmitted good frames after a single\n              collision counter",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MMCTGFMSCCR": {
    +              "description": "Ethernet MMC transmitted good frames after\n          more than a single collision",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TGFMSCC": {
    +                    "description": "Transmitted good frames after more than\n              a single collision counter",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MMCTGFCR": {
    +              "description": "Ethernet MMC transmitted good frames counter\n          register",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TGFC": {
    +                    "description": "Transmitted good frames\n              counter",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MMCRFCECR": {
    +              "description": "Ethernet MMC received frames with CRC error\n          counter register",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RFCFC": {
    +                    "description": "Received frames with CRC error\n              counter",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MMCRFAECR": {
    +              "description": "Ethernet MMC received frames with alignment\n          error counter register",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RFAEC": {
    +                    "description": "Received frames with alignment error\n              counter",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MMCRGUFCR": {
    +              "description": "MMC received good unicast frames counter\n          register",
    +              "offset": 196,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RGUFC": {
    +                    "description": "Received good unicast frames\n              counter",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "OTG_FS_PWRCLK": {
    +        "description": "USB on the go full speed",
    +        "children": {
    +          "registers": {
    +            "FS_PCGCCTL": {
    +              "description": "OTG_FS power and clock gating control\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STPPCLK": {
    +                    "description": "Stop PHY clock",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "GATEHCLK": {
    +                    "description": "Gate HCLK",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PHYSUSP": {
    +                    "description": "PHY Suspended",
    +                    "offset": 4,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIM9": {
    +        "description": "General purpose timer",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CKD": {
    +                    "description": "Clock division",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OPM": {
    +                    "description": "One-pulse mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MMS": {
    +                    "description": "Master mode selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "SMCR": {
    +              "description": "slave mode control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MSM": {
    +                    "description": "Master/Slave mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TS": {
    +                    "description": "Trigger selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SMS": {
    +                    "description": "Slave mode selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIE": {
    +                    "description": "Trigger interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC2IE": {
    +                    "description": "Capture/Compare 2 interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IE": {
    +                    "description": "Capture/Compare 1 interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC2OF": {
    +                    "description": "Capture/compare 2 overcapture\n              flag",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1OF": {
    +                    "description": "Capture/Compare 1 overcapture\n              flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TIF": {
    +                    "description": "Trigger interrupt flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC2IF": {
    +                    "description": "Capture/Compare 2 interrupt\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IF": {
    +                    "description": "Capture/compare 1 interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TG": {
    +                    "description": "Trigger generation",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC2G": {
    +                    "description": "Capture/compare 2\n              generation",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1G": {
    +                    "description": "Capture/compare 1\n              generation",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Output": {
    +              "description": "capture/compare mode register 1 (output\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OC2M": {
    +                    "description": "Output Compare 2 mode",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC2PE": {
    +                    "description": "Output Compare 2 preload\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC2FE": {
    +                    "description": "Output Compare 2 fast\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/Compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC1M": {
    +                    "description": "Output Compare 1 mode",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC1PE": {
    +                    "description": "Output Compare 1 preload\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC1FE": {
    +                    "description": "Output Compare 1 fast\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Input": {
    +              "description": "capture/compare mode register 1 (input\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC2F": {
    +                    "description": "Input capture 2 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC2PSC": {
    +                    "description": "Input capture 2 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/Compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC1F": {
    +                    "description": "Input capture 1 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "IC1PSC": {
    +                    "description": "Input capture 1 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCER": {
    +              "description": "capture/compare enable\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC2NP": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CC2P": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC2E": {
    +                    "description": "Capture/Compare 2 output\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC1NP": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC1P": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC1E": {
    +                    "description": "Capture/Compare 1 output\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARR": {
    +                    "description": "Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR1": {
    +              "description": "capture/compare register 1",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR1": {
    +                    "description": "Capture/Compare 1 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR2": {
    +              "description": "capture/compare register 2",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR2": {
    +                    "description": "Capture/Compare 2 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "OTG_FS_HOST": {
    +        "description": "USB on the go full speed",
    +        "children": {
    +          "registers": {
    +            "FS_HCFG": {
    +              "description": "OTG_FS host configuration register\n          (OTG_FS_HCFG)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FSLSPCS": {
    +                    "description": "FS/LS PHY clock select",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "FSLSS": {
    +                    "description": "FS- and LS-only support",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "HFIR": {
    +              "description": "OTG_FS Host frame interval\n          register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 60000,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FRIVL": {
    +                    "description": "Frame interval",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HFNUM": {
    +              "description": "OTG_FS host frame number/frame time\n          remaining register (OTG_FS_HFNUM)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 16383,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "FRNUM": {
    +                    "description": "Frame number",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "FTREM": {
    +                    "description": "Frame time remaining",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HPTXSTS": {
    +              "description": "OTG_FS_Host periodic transmit FIFO/queue\n          status register (OTG_FS_HPTXSTS)",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 524544,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PTXFSAVL": {
    +                    "description": "Periodic transmit data FIFO space\n              available",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "PTXQSAV": {
    +                    "description": "Periodic transmit request queue space\n              available",
    +                    "offset": 16,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "PTXQTOP": {
    +                    "description": "Top of the periodic transmit request\n              queue",
    +                    "offset": 24,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "HAINT": {
    +              "description": "OTG_FS Host all channels interrupt\n          register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "HAINT": {
    +                    "description": "Channel interrupts",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "HAINTMSK": {
    +              "description": "OTG_FS host all channels interrupt mask\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HAINTM": {
    +                    "description": "Channel interrupt mask",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HPRT": {
    +              "description": "OTG_FS host port control and status register\n          (OTG_FS_HPRT)",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PCSTS": {
    +                    "description": "Port connect status",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PCDET": {
    +                    "description": "Port connect detected",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PENA": {
    +                    "description": "Port enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PENCHNG": {
    +                    "description": "Port enable/disable change",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "POCA": {
    +                    "description": "Port overcurrent active",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "POCCHNG": {
    +                    "description": "Port overcurrent change",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PRES": {
    +                    "description": "Port resume",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PSUSP": {
    +                    "description": "Port suspend",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PRST": {
    +                    "description": "Port reset",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PLSTS": {
    +                    "description": "Port line status",
    +                    "offset": 10,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "PPWR": {
    +                    "description": "Port power",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "PTCTL": {
    +                    "description": "Port test control",
    +                    "offset": 13,
    +                    "size": 4
    +                  },
    +                  "PSPD": {
    +                    "description": "Port speed",
    +                    "offset": 17,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCCHAR0": {
    +              "description": "OTG_FS host channel-0 characteristics\n          register (OTG_FS_HCCHAR0)",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MCNT": {
    +                    "description": "Multicount",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCCHAR1": {
    +              "description": "OTG_FS host channel-1 characteristics\n          register (OTG_FS_HCCHAR1)",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MCNT": {
    +                    "description": "Multicount",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCCHAR2": {
    +              "description": "OTG_FS host channel-2 characteristics\n          register (OTG_FS_HCCHAR2)",
    +              "offset": 320,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MCNT": {
    +                    "description": "Multicount",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCCHAR3": {
    +              "description": "OTG_FS host channel-3 characteristics\n          register (OTG_FS_HCCHAR3)",
    +              "offset": 352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MCNT": {
    +                    "description": "Multicount",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCCHAR4": {
    +              "description": "OTG_FS host channel-4 characteristics\n          register (OTG_FS_HCCHAR4)",
    +              "offset": 384,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MCNT": {
    +                    "description": "Multicount",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCCHAR5": {
    +              "description": "OTG_FS host channel-5 characteristics\n          register (OTG_FS_HCCHAR5)",
    +              "offset": 416,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MCNT": {
    +                    "description": "Multicount",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCCHAR6": {
    +              "description": "OTG_FS host channel-6 characteristics\n          register (OTG_FS_HCCHAR6)",
    +              "offset": 448,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MCNT": {
    +                    "description": "Multicount",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCCHAR7": {
    +              "description": "OTG_FS host channel-7 characteristics\n          register (OTG_FS_HCCHAR7)",
    +              "offset": 480,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MCNT": {
    +                    "description": "Multicount",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINT0": {
    +              "description": "OTG_FS host channel-0 interrupt register\n          (OTG_FS_HCINT0)",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINT1": {
    +              "description": "OTG_FS host channel-1 interrupt register\n          (OTG_FS_HCINT1)",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINT2": {
    +              "description": "OTG_FS host channel-2 interrupt register\n          (OTG_FS_HCINT2)",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINT3": {
    +              "description": "OTG_FS host channel-3 interrupt register\n          (OTG_FS_HCINT3)",
    +              "offset": 360,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINT4": {
    +              "description": "OTG_FS host channel-4 interrupt register\n          (OTG_FS_HCINT4)",
    +              "offset": 392,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINT5": {
    +              "description": "OTG_FS host channel-5 interrupt register\n          (OTG_FS_HCINT5)",
    +              "offset": 424,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINT6": {
    +              "description": "OTG_FS host channel-6 interrupt register\n          (OTG_FS_HCINT6)",
    +              "offset": 456,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINT7": {
    +              "description": "OTG_FS host channel-7 interrupt register\n          (OTG_FS_HCINT7)",
    +              "offset": 488,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINTMSK0": {
    +              "description": "OTG_FS host channel-0 mask register\n          (OTG_FS_HCINTMSK0)",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINTMSK1": {
    +              "description": "OTG_FS host channel-1 mask register\n          (OTG_FS_HCINTMSK1)",
    +              "offset": 300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINTMSK2": {
    +              "description": "OTG_FS host channel-2 mask register\n          (OTG_FS_HCINTMSK2)",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINTMSK3": {
    +              "description": "OTG_FS host channel-3 mask register\n          (OTG_FS_HCINTMSK3)",
    +              "offset": 364,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINTMSK4": {
    +              "description": "OTG_FS host channel-4 mask register\n          (OTG_FS_HCINTMSK4)",
    +              "offset": 396,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINTMSK5": {
    +              "description": "OTG_FS host channel-5 mask register\n          (OTG_FS_HCINTMSK5)",
    +              "offset": 428,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINTMSK6": {
    +              "description": "OTG_FS host channel-6 mask register\n          (OTG_FS_HCINTMSK6)",
    +              "offset": 460,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINTMSK7": {
    +              "description": "OTG_FS host channel-7 mask register\n          (OTG_FS_HCINTMSK7)",
    +              "offset": 492,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCTSIZ0": {
    +              "description": "OTG_FS host channel-0 transfer size\n          register",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCTSIZ1": {
    +              "description": "OTG_FS host channel-1 transfer size\n          register",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCTSIZ2": {
    +              "description": "OTG_FS host channel-2 transfer size\n          register",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCTSIZ3": {
    +              "description": "OTG_FS host channel-3 transfer size\n          register",
    +              "offset": 368,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCTSIZ4": {
    +              "description": "OTG_FS host channel-x transfer size\n          register",
    +              "offset": 400,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCTSIZ5": {
    +              "description": "OTG_FS host channel-5 transfer size\n          register",
    +              "offset": 432,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCTSIZ6": {
    +              "description": "OTG_FS host channel-6 transfer size\n          register",
    +              "offset": 464,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCTSIZ7": {
    +              "description": "OTG_FS host channel-7 transfer size\n          register",
    +              "offset": 496,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIM10": {
    +        "description": "General purpose timer",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CKD": {
    +                    "description": "Clock division",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MMS": {
    +                    "description": "Master mode selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC1IE": {
    +                    "description": "Capture/Compare 1 interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC1OF": {
    +                    "description": "Capture/Compare 1 overcapture\n              flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CC1IF": {
    +                    "description": "Capture/compare 1 interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "CC1G": {
    +                    "description": "Capture/compare 1\n              generation",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Output": {
    +              "description": "capture/compare mode register (output\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OC1M": {
    +                    "description": "Output Compare 1 mode",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC1PE": {
    +                    "description": "Output Compare 1 preload\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Input": {
    +              "description": "capture/compare mode register (input\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC1F": {
    +                    "description": "Input capture 1 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "IC1PSC": {
    +                    "description": "Input capture 1 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCER": {
    +              "description": "capture/compare enable\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC1NP": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC1P": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC1E": {
    +                    "description": "Capture/Compare 1 output\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARR": {
    +                    "description": "Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR1": {
    +              "description": "capture/compare register 1",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR1": {
    +                    "description": "Capture/Compare 1 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "OTG_FS_GLOBAL": {
    +        "description": "USB on the go full speed",
    +        "children": {
    +          "registers": {
    +            "FS_GOTGCTL": {
    +              "description": "OTG_FS control and status register\n          (OTG_FS_GOTGCTL)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 2048,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SRQSCS": {
    +                    "description": "Session request success",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SRQ": {
    +                    "description": "Session request",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HNGSCS": {
    +                    "description": "Host negotiation success",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HNPRQ": {
    +                    "description": "HNP request",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "HSHNPEN": {
    +                    "description": "Host set HNP enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "DHNPEN": {
    +                    "description": "Device HNP enabled",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CIDSTS": {
    +                    "description": "Connector ID status",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DBCT": {
    +                    "description": "Long/short debounce time",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ASVLD": {
    +                    "description": "A-session valid",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BSVLD": {
    +                    "description": "B-session valid",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GOTGINT": {
    +              "description": "OTG_FS interrupt register\n          (OTG_FS_GOTGINT)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SEDET": {
    +                    "description": "Session end detected",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SRSSCHG": {
    +                    "description": "Session request success status\n              change",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "HNSSCHG": {
    +                    "description": "Host negotiation success status\n              change",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "HNGDET": {
    +                    "description": "Host negotiation detected",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "ADTOCHG": {
    +                    "description": "A-device timeout change",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "DBCDNE": {
    +                    "description": "Debounce done",
    +                    "offset": 19,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GAHBCFG": {
    +              "description": "OTG_FS AHB configuration register\n          (OTG_FS_GAHBCFG)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "GINT": {
    +                    "description": "Global interrupt mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TXFELVL": {
    +                    "description": "TxFIFO empty level",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PTXFELVL": {
    +                    "description": "Periodic TxFIFO empty\n              level",
    +                    "offset": 8,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GUSBCFG": {
    +              "description": "OTG_FS USB configuration register\n          (OTG_FS_GUSBCFG)",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 2560,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TOCAL": {
    +                    "description": "FS timeout calibration",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "PHYSEL": {
    +                    "description": "Full Speed serial transceiver\n              select",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SRPCAP": {
    +                    "description": "SRP-capable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "HNPCAP": {
    +                    "description": "HNP-capable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TRDT": {
    +                    "description": "USB turnaround time",
    +                    "offset": 10,
    +                    "size": 4
    +                  },
    +                  "FHMOD": {
    +                    "description": "Force host mode",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FDMOD": {
    +                    "description": "Force device mode",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CTXPKT": {
    +                    "description": "Corrupt Tx packet",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GRSTCTL": {
    +              "description": "OTG_FS reset register\n          (OTG_FS_GRSTCTL)",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 536870912,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSRST": {
    +                    "description": "Core soft reset",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "HSRST": {
    +                    "description": "HCLK soft reset",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FCRST": {
    +                    "description": "Host frame counter reset",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RXFFLSH": {
    +                    "description": "RxFIFO flush",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TXFFLSH": {
    +                    "description": "TxFIFO flush",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TxFIFO number",
    +                    "offset": 6,
    +                    "size": 5
    +                  },
    +                  "AHBIDL": {
    +                    "description": "AHB master idle",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GINTSTS": {
    +              "description": "OTG_FS core interrupt register\n          (OTG_FS_GINTSTS)",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 67108896,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CMOD": {
    +                    "description": "Current mode of operation",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MMIS": {
    +                    "description": "Mode mismatch interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OTGINT": {
    +                    "description": "OTG interrupt",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SOF": {
    +                    "description": "Start of frame",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RXFLVL": {
    +                    "description": "RxFIFO non-empty",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NPTXFE": {
    +                    "description": "Non-periodic TxFIFO empty",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GINAKEFF": {
    +                    "description": "Global IN non-periodic NAK\n              effective",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GOUTNAKEFF": {
    +                    "description": "Global OUT NAK effective",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ESUSP": {
    +                    "description": "Early suspend",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "USBSUSP": {
    +                    "description": "USB suspend",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "USBRST": {
    +                    "description": "USB reset",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ENUMDNE": {
    +                    "description": "Enumeration done",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ISOODRP": {
    +                    "description": "Isochronous OUT packet dropped\n              interrupt",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EOPF": {
    +                    "description": "End of periodic frame\n              interrupt",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "IEPINT": {
    +                    "description": "IN endpoint interrupt",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEPINT": {
    +                    "description": "OUT endpoint interrupt",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IISOIXFR": {
    +                    "description": "Incomplete isochronous IN\n              transfer",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "IPXFR_INCOMPISOOUT": {
    +                    "description": "Incomplete periodic transfer(Host\n              mode)/Incomplete isochronous OUT transfer(Device\n              mode)",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "HPRTINT": {
    +                    "description": "Host port interrupt",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HCINT": {
    +                    "description": "Host channels interrupt",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PTXFE": {
    +                    "description": "Periodic TxFIFO empty",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CIDSCHG": {
    +                    "description": "Connector ID status change",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "DISCINT": {
    +                    "description": "Disconnect detected\n              interrupt",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "SRQINT": {
    +                    "description": "Session request/new session detected\n              interrupt",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "WKUPINT": {
    +                    "description": "Resume/remote wakeup detected\n              interrupt",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GINTMSK": {
    +              "description": "OTG_FS interrupt mask register\n          (OTG_FS_GINTMSK)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MMISM": {
    +                    "description": "Mode mismatch interrupt\n              mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OTGINT": {
    +                    "description": "OTG interrupt mask",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SOFM": {
    +                    "description": "Start of frame mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RXFLVLM": {
    +                    "description": "Receive FIFO non-empty\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "NPTXFEM": {
    +                    "description": "Non-periodic TxFIFO empty\n              mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GINAKEFFM": {
    +                    "description": "Global non-periodic IN NAK effective\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GONAKEFFM": {
    +                    "description": "Global OUT NAK effective\n              mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ESUSPM": {
    +                    "description": "Early suspend mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "USBSUSPM": {
    +                    "description": "USB suspend mask",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "USBRST": {
    +                    "description": "USB reset mask",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ENUMDNEM": {
    +                    "description": "Enumeration done mask",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ISOODRPM": {
    +                    "description": "Isochronous OUT packet dropped interrupt\n              mask",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EOPFM": {
    +                    "description": "End of periodic frame interrupt\n              mask",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EPMISM": {
    +                    "description": "Endpoint mismatch interrupt\n              mask",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "IEPINT": {
    +                    "description": "IN endpoints interrupt\n              mask",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "OEPINT": {
    +                    "description": "OUT endpoints interrupt\n              mask",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "IISOIXFRM": {
    +                    "description": "Incomplete isochronous IN transfer\n              mask",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "IPXFRM_IISOOXFRM": {
    +                    "description": "Incomplete periodic transfer mask(Host\n              mode)/Incomplete isochronous OUT transfer mask(Device\n              mode)",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "PRTIM": {
    +                    "description": "Host port interrupt mask",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HCIM": {
    +                    "description": "Host channels interrupt\n              mask",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "PTXFEM": {
    +                    "description": "Periodic TxFIFO empty mask",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "CIDSCHGM": {
    +                    "description": "Connector ID status change\n              mask",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "DISCINT": {
    +                    "description": "Disconnect detected interrupt\n              mask",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "SRQIM": {
    +                    "description": "Session request/new session detected\n              interrupt mask",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "WUIM": {
    +                    "description": "Resume/remote wakeup detected interrupt\n              mask",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GRXSTSR_Device": {
    +              "description": "OTG_FS Receive status debug read(Device\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "BCNT": {
    +                    "description": "Byte count",
    +                    "offset": 4,
    +                    "size": 11
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 15,
    +                    "size": 2
    +                  },
    +                  "PKTSTS": {
    +                    "description": "Packet status",
    +                    "offset": 17,
    +                    "size": 4
    +                  },
    +                  "FRMNUM": {
    +                    "description": "Frame number",
    +                    "offset": 21,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GRXSTSR_Host": {
    +              "description": "OTG_FS Receive status debug read(Host\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "BCNT": {
    +                    "description": "Byte count",
    +                    "offset": 4,
    +                    "size": 11
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 15,
    +                    "size": 2
    +                  },
    +                  "PKTSTS": {
    +                    "description": "Packet status",
    +                    "offset": 17,
    +                    "size": 4
    +                  },
    +                  "FRMNUM": {
    +                    "description": "Frame number",
    +                    "offset": 21,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GRXFSIZ": {
    +              "description": "OTG_FS Receive FIFO size register\n          (OTG_FS_GRXFSIZ)",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 512,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXFD": {
    +                    "description": "RxFIFO depth",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GNPTXFSIZ_Device": {
    +              "description": "OTG_FS non-periodic transmit FIFO size\n          register (Device mode)",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 512,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX0FSA": {
    +                    "description": "Endpoint 0 transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "TX0FD": {
    +                    "description": "Endpoint 0 TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GNPTXFSIZ_Host": {
    +              "description": "OTG_FS non-periodic transmit FIFO size\n          register (Host mode)",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 512,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NPTXFSA": {
    +                    "description": "Non-periodic transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "NPTXFD": {
    +                    "description": "Non-periodic TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GNPTXSTS": {
    +              "description": "OTG_FS non-periodic transmit FIFO/queue\n          status register (OTG_FS_GNPTXSTS)",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 524800,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "NPTXFSAV": {
    +                    "description": "Non-periodic TxFIFO space\n              available",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "NPTQXSAV": {
    +                    "description": "Non-periodic transmit request queue\n              space available",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "NPTXQTOP": {
    +                    "description": "Top of the non-periodic transmit request\n              queue",
    +                    "offset": 24,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GCCFG": {
    +              "description": "OTG_FS general core configuration register\n          (OTG_FS_GCCFG)",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PWRDWN": {
    +                    "description": "Power down",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "VBUSASEN": {
    +                    "description": "Enable the VBUS sensing\n              device",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "VBUSBSEN": {
    +                    "description": "Enable the VBUS sensing\n              device",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "SOFOUTEN": {
    +                    "description": "SOF output enable",
    +                    "offset": 20,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_CID": {
    +              "description": "core ID register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 4096,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRODUCT_ID": {
    +                    "description": "Product ID field",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HPTXFSIZ": {
    +              "description": "OTG_FS Host periodic transmit FIFO size\n          register (OTG_FS_HPTXFSIZ)",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 33555968,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PTXSA": {
    +                    "description": "Host periodic TxFIFO start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "PTXFSIZ": {
    +                    "description": "Host periodic TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DIEPTXF1": {
    +              "description": "OTG_FS device IN endpoint transmit FIFO size\n          register (OTG_FS_DIEPTXF2)",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 33555456,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXSA": {
    +                    "description": "IN endpoint FIFO2 transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "INEPTXFD": {
    +                    "description": "IN endpoint TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DIEPTXF2": {
    +              "description": "OTG_FS device IN endpoint transmit FIFO size\n          register (OTG_FS_DIEPTXF3)",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 33555456,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXSA": {
    +                    "description": "IN endpoint FIFO3 transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "INEPTXFD": {
    +                    "description": "IN endpoint TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DIEPTXF3": {
    +              "description": "OTG_FS device IN endpoint transmit FIFO size\n          register (OTG_FS_DIEPTXF4)",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 33555456,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXSA": {
    +                    "description": "IN endpoint FIFO4 transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "INEPTXFD": {
    +                    "description": "IN endpoint TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "OTG_FS_DEVICE": {
    +        "description": "USB on the go full speed",
    +        "children": {
    +          "registers": {
    +            "FS_DCFG": {
    +              "description": "OTG_FS device configuration register\n          (OTG_FS_DCFG)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 35651584,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DSPD": {
    +                    "description": "Device speed",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "NZLSOHSK": {
    +                    "description": "Non-zero-length status OUT\n              handshake",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 4,
    +                    "size": 7
    +                  },
    +                  "PFIVL": {
    +                    "description": "Periodic frame interval",
    +                    "offset": 11,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DCTL": {
    +              "description": "OTG_FS device control register\n          (OTG_FS_DCTL)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RWUSIG": {
    +                    "description": "Remote wakeup signaling",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SDIS": {
    +                    "description": "Soft disconnect",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GINSTS": {
    +                    "description": "Global IN NAK status",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GONSTS": {
    +                    "description": "Global OUT NAK status",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TCTL": {
    +                    "description": "Test control",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SGINAK": {
    +                    "description": "Set global IN NAK",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CGINAK": {
    +                    "description": "Clear global IN NAK",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SGONAK": {
    +                    "description": "Set global OUT NAK",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CGONAK": {
    +                    "description": "Clear global OUT NAK",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "POPRGDNE": {
    +                    "description": "Power-on programming done",
    +                    "offset": 11,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DSTS": {
    +              "description": "OTG_FS device status register\n          (OTG_FS_DSTS)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 16,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SUSPSTS": {
    +                    "description": "Suspend status",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ENUMSPD": {
    +                    "description": "Enumerated speed",
    +                    "offset": 1,
    +                    "size": 2
    +                  },
    +                  "EERR": {
    +                    "description": "Erratic error",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FNSOF": {
    +                    "description": "Frame number of the received\n              SOF",
    +                    "offset": 8,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DIEPMSK": {
    +              "description": "OTG_FS device IN endpoint common interrupt\n          mask register (OTG_FS_DIEPMSK)",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed interrupt\n              mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDM": {
    +                    "description": "Endpoint disabled interrupt\n              mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TOM": {
    +                    "description": "Timeout condition mask (Non-isochronous\n              endpoints)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ITTXFEMSK": {
    +                    "description": "IN token received when TxFIFO empty\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INEPNMM": {
    +                    "description": "IN token received with EP mismatch\n              mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INEPNEM": {
    +                    "description": "IN endpoint NAK effective\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DOEPMSK": {
    +              "description": "OTG_FS device OUT endpoint common interrupt\n          mask register (OTG_FS_DOEPMSK)",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed interrupt\n              mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDM": {
    +                    "description": "Endpoint disabled interrupt\n              mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STUPM": {
    +                    "description": "SETUP phase done mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OTEPDM": {
    +                    "description": "OUT token received when endpoint\n              disabled mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DAINT": {
    +              "description": "OTG_FS device all endpoints interrupt\n          register (OTG_FS_DAINT)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IEPINT": {
    +                    "description": "IN endpoint interrupt bits",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "OEPINT": {
    +                    "description": "OUT endpoint interrupt\n              bits",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DAINTMSK": {
    +              "description": "OTG_FS all endpoints interrupt mask register\n          (OTG_FS_DAINTMSK)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IEPM": {
    +                    "description": "IN EP interrupt mask bits",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "OEPINT": {
    +                    "description": "OUT endpoint interrupt\n              bits",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DVBUSDIS": {
    +              "description": "OTG_FS device VBUS discharge time\n          register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 6103,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VBUSDT": {
    +                    "description": "Device VBUS discharge time",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DVBUSPULSE": {
    +              "description": "OTG_FS device VBUS pulsing time\n          register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 1464,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DVBUSP": {
    +                    "description": "Device VBUS pulsing time",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPEMPMSK": {
    +              "description": "OTG_FS device IN endpoint FIFO empty\n          interrupt mask register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXFEM": {
    +                    "description": "IN EP Tx FIFO empty interrupt mask\n              bits",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DIEPCTL0": {
    +              "description": "OTG_FS device control IN endpoint 0 control\n          register (OTG_FS_DIEPCTL0)",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "USBAEP": {
    +                    "description": "USB active endpoint",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "STALL": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TxFIFO number",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPENA": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPCTL1": {
    +              "description": "OTG device endpoint-1 control\n          register",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPENA": {
    +                    "description": "EPENA",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EPDIS": {
    +                    "description": "EPDIS",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SODDFRM_SD1PID": {
    +                    "description": "SODDFRM/SD1PID",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "SD0PID/SEVNFRM",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "SNAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "CNAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TXFNUM",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "Stall": {
    +                    "description": "Stall",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "EPTYP",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAKSTS",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "EONUM/DPID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "USBAEP": {
    +                    "description": "USBAEP",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MPSIZ": {
    +                    "description": "MPSIZ",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPCTL2": {
    +              "description": "OTG device endpoint-2 control\n          register",
    +              "offset": 320,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPENA": {
    +                    "description": "EPENA",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EPDIS": {
    +                    "description": "EPDIS",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SODDFRM": {
    +                    "description": "SODDFRM",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "SD0PID/SEVNFRM",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "SNAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "CNAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TXFNUM",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "Stall": {
    +                    "description": "Stall",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "EPTYP",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAKSTS",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "EONUM/DPID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "USBAEP": {
    +                    "description": "USBAEP",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MPSIZ": {
    +                    "description": "MPSIZ",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPCTL3": {
    +              "description": "OTG device endpoint-3 control\n          register",
    +              "offset": 352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPENA": {
    +                    "description": "EPENA",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EPDIS": {
    +                    "description": "EPDIS",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SODDFRM": {
    +                    "description": "SODDFRM",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "SD0PID/SEVNFRM",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "SNAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "CNAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TXFNUM",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "Stall": {
    +                    "description": "Stall",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "EPTYP",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAKSTS",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "EONUM/DPID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "USBAEP": {
    +                    "description": "USBAEP",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MPSIZ": {
    +                    "description": "MPSIZ",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPCTL0": {
    +              "description": "device endpoint-0 control\n          register",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 32768,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPENA": {
    +                    "description": "EPENA",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "EPDIS",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "SNAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "CNAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "Stall": {
    +                    "description": "Stall",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "SNPM": {
    +                    "description": "SNPM",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "EPTYP",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAKSTS",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "USBAEP": {
    +                    "description": "USBAEP",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MPSIZ": {
    +                    "description": "MPSIZ",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPCTL1": {
    +              "description": "device endpoint-1 control\n          register",
    +              "offset": 800,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPENA": {
    +                    "description": "EPENA",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EPDIS": {
    +                    "description": "EPDIS",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SODDFRM": {
    +                    "description": "SODDFRM",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "SD0PID/SEVNFRM",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "SNAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "CNAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "Stall": {
    +                    "description": "Stall",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "SNPM": {
    +                    "description": "SNPM",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "EPTYP",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAKSTS",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "EONUM/DPID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "USBAEP": {
    +                    "description": "USBAEP",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MPSIZ": {
    +                    "description": "MPSIZ",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPCTL2": {
    +              "description": "device endpoint-2 control\n          register",
    +              "offset": 832,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPENA": {
    +                    "description": "EPENA",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EPDIS": {
    +                    "description": "EPDIS",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SODDFRM": {
    +                    "description": "SODDFRM",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "SD0PID/SEVNFRM",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "SNAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "CNAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "Stall": {
    +                    "description": "Stall",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "SNPM": {
    +                    "description": "SNPM",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "EPTYP",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAKSTS",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "EONUM/DPID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "USBAEP": {
    +                    "description": "USBAEP",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MPSIZ": {
    +                    "description": "MPSIZ",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPCTL3": {
    +              "description": "device endpoint-3 control\n          register",
    +              "offset": 864,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPENA": {
    +                    "description": "EPENA",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EPDIS": {
    +                    "description": "EPDIS",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SODDFRM": {
    +                    "description": "SODDFRM",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "SD0PID/SEVNFRM",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "SNAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "CNAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "Stall": {
    +                    "description": "Stall",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "SNPM": {
    +                    "description": "SNPM",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "EPTYP",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAKSTS",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "EONUM/DPID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "USBAEP": {
    +                    "description": "USBAEP",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MPSIZ": {
    +                    "description": "MPSIZ",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPINT0": {
    +              "description": "device endpoint-x interrupt\n          register",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXFE": {
    +                    "description": "TXFE",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INEPNE": {
    +                    "description": "INEPNE",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "ITTXFE",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "TOC",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "EPDISD",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "XFRC": {
    +                    "description": "XFRC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPINT1": {
    +              "description": "device endpoint-1 interrupt\n          register",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXFE": {
    +                    "description": "TXFE",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INEPNE": {
    +                    "description": "INEPNE",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "ITTXFE",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "TOC",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "EPDISD",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "XFRC": {
    +                    "description": "XFRC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPINT2": {
    +              "description": "device endpoint-2 interrupt\n          register",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXFE": {
    +                    "description": "TXFE",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INEPNE": {
    +                    "description": "INEPNE",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "ITTXFE",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "TOC",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "EPDISD",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "XFRC": {
    +                    "description": "XFRC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPINT3": {
    +              "description": "device endpoint-3 interrupt\n          register",
    +              "offset": 360,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXFE": {
    +                    "description": "TXFE",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INEPNE": {
    +                    "description": "INEPNE",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "ITTXFE",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "TOC",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "EPDISD",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "XFRC": {
    +                    "description": "XFRC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPINT0": {
    +              "description": "device endpoint-0 interrupt\n          register",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "B2BSTUP": {
    +                    "description": "B2BSTUP",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OTEPDIS",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "STUP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "EPDISD",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "XFRC": {
    +                    "description": "XFRC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPINT1": {
    +              "description": "device endpoint-1 interrupt\n          register",
    +              "offset": 808,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "B2BSTUP": {
    +                    "description": "B2BSTUP",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OTEPDIS",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "STUP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "EPDISD",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "XFRC": {
    +                    "description": "XFRC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPINT2": {
    +              "description": "device endpoint-2 interrupt\n          register",
    +              "offset": 840,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "B2BSTUP": {
    +                    "description": "B2BSTUP",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OTEPDIS",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "STUP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "EPDISD",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "XFRC": {
    +                    "description": "XFRC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPINT3": {
    +              "description": "device endpoint-3 interrupt\n          register",
    +              "offset": 872,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "B2BSTUP": {
    +                    "description": "B2BSTUP",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OTEPDIS",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "STUP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "EPDISD",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "XFRC": {
    +                    "description": "XFRC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPTSIZ0": {
    +              "description": "device endpoint-0 transfer size\n          register",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 2
    +                  },
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPTSIZ0": {
    +              "description": "device OUT endpoint-0 transfer size\n          register",
    +              "offset": 784,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STUPCNT": {
    +                    "description": "SETUP packet count",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPTSIZ1": {
    +              "description": "device endpoint-1 transfer size\n          register",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MCNT": {
    +                    "description": "Multi count",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPTSIZ2": {
    +              "description": "device endpoint-2 transfer size\n          register",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MCNT": {
    +                    "description": "Multi count",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPTSIZ3": {
    +              "description": "device endpoint-3 transfer size\n          register",
    +              "offset": 368,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MCNT": {
    +                    "description": "Multi count",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            },
    +            "DTXFSTS0": {
    +              "description": "OTG_FS device IN endpoint transmit FIFO\n          status register",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INEPTFSAV": {
    +                    "description": "IN endpoint TxFIFO space\n              available",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DTXFSTS1": {
    +              "description": "OTG_FS device IN endpoint transmit FIFO\n          status register",
    +              "offset": 312,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INEPTFSAV": {
    +                    "description": "IN endpoint TxFIFO space\n              available",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DTXFSTS2": {
    +              "description": "OTG_FS device IN endpoint transmit FIFO\n          status register",
    +              "offset": 344,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INEPTFSAV": {
    +                    "description": "IN endpoint TxFIFO space\n              available",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DTXFSTS3": {
    +              "description": "OTG_FS device IN endpoint transmit FIFO\n          status register",
    +              "offset": 376,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INEPTFSAV": {
    +                    "description": "IN endpoint TxFIFO space\n              available",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPTSIZ1": {
    +              "description": "device OUT endpoint-1 transfer size\n          register",
    +              "offset": 816,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXDPID_STUPCNT": {
    +                    "description": "Received data PID/SETUP packet\n              count",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPTSIZ2": {
    +              "description": "device OUT endpoint-2 transfer size\n          register",
    +              "offset": 848,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXDPID_STUPCNT": {
    +                    "description": "Received data PID/SETUP packet\n              count",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPTSIZ3": {
    +              "description": "device OUT endpoint-3 transfer size\n          register",
    +              "offset": 880,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXDPID_STUPCNT": {
    +                    "description": "Received data PID/SETUP packet\n              count",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "USB": {
    +        "description": "Universal serial bus full-speed device\n      interface",
    +        "children": {
    +          "registers": {
    +            "EP0R": {
    +              "description": "endpoint 0 register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EA": {
    +                    "description": "Endpoint address",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "STAT_TX": {
    +                    "description": "Status bits, for transmission\n              transfers",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DTOG_TX": {
    +                    "description": "Data Toggle, for transmission\n              transfers",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CTR_TX": {
    +                    "description": "Correct Transfer for\n              transmission",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EP_KIND": {
    +                    "description": "Endpoint kind",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EP_TYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 9,
    +                    "size": 2
    +                  },
    +                  "SETUP": {
    +                    "description": "Setup transaction\n              completed",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "STAT_RX": {
    +                    "description": "Status bits, for reception\n              transfers",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "DTOG_RX": {
    +                    "description": "Data Toggle, for reception\n              transfers",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CTR_RX": {
    +                    "description": "Correct transfer for\n              reception",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EP1R": {
    +              "description": "endpoint 1 register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EA": {
    +                    "description": "Endpoint address",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "STAT_TX": {
    +                    "description": "Status bits, for transmission\n              transfers",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DTOG_TX": {
    +                    "description": "Data Toggle, for transmission\n              transfers",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CTR_TX": {
    +                    "description": "Correct Transfer for\n              transmission",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EP_KIND": {
    +                    "description": "Endpoint kind",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EP_TYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 9,
    +                    "size": 2
    +                  },
    +                  "SETUP": {
    +                    "description": "Setup transaction\n              completed",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "STAT_RX": {
    +                    "description": "Status bits, for reception\n              transfers",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "DTOG_RX": {
    +                    "description": "Data Toggle, for reception\n              transfers",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CTR_RX": {
    +                    "description": "Correct transfer for\n              reception",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EP2R": {
    +              "description": "endpoint 2 register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EA": {
    +                    "description": "Endpoint address",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "STAT_TX": {
    +                    "description": "Status bits, for transmission\n              transfers",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DTOG_TX": {
    +                    "description": "Data Toggle, for transmission\n              transfers",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CTR_TX": {
    +                    "description": "Correct Transfer for\n              transmission",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EP_KIND": {
    +                    "description": "Endpoint kind",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EP_TYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 9,
    +                    "size": 2
    +                  },
    +                  "SETUP": {
    +                    "description": "Setup transaction\n              completed",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "STAT_RX": {
    +                    "description": "Status bits, for reception\n              transfers",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "DTOG_RX": {
    +                    "description": "Data Toggle, for reception\n              transfers",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CTR_RX": {
    +                    "description": "Correct transfer for\n              reception",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EP3R": {
    +              "description": "endpoint 3 register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EA": {
    +                    "description": "Endpoint address",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "STAT_TX": {
    +                    "description": "Status bits, for transmission\n              transfers",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DTOG_TX": {
    +                    "description": "Data Toggle, for transmission\n              transfers",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CTR_TX": {
    +                    "description": "Correct Transfer for\n              transmission",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EP_KIND": {
    +                    "description": "Endpoint kind",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EP_TYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 9,
    +                    "size": 2
    +                  },
    +                  "SETUP": {
    +                    "description": "Setup transaction\n              completed",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "STAT_RX": {
    +                    "description": "Status bits, for reception\n              transfers",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "DTOG_RX": {
    +                    "description": "Data Toggle, for reception\n              transfers",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CTR_RX": {
    +                    "description": "Correct transfer for\n              reception",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EP4R": {
    +              "description": "endpoint 4 register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EA": {
    +                    "description": "Endpoint address",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "STAT_TX": {
    +                    "description": "Status bits, for transmission\n              transfers",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DTOG_TX": {
    +                    "description": "Data Toggle, for transmission\n              transfers",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CTR_TX": {
    +                    "description": "Correct Transfer for\n              transmission",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EP_KIND": {
    +                    "description": "Endpoint kind",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EP_TYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 9,
    +                    "size": 2
    +                  },
    +                  "SETUP": {
    +                    "description": "Setup transaction\n              completed",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "STAT_RX": {
    +                    "description": "Status bits, for reception\n              transfers",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "DTOG_RX": {
    +                    "description": "Data Toggle, for reception\n              transfers",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CTR_RX": {
    +                    "description": "Correct transfer for\n              reception",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EP5R": {
    +              "description": "endpoint 5 register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EA": {
    +                    "description": "Endpoint address",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "STAT_TX": {
    +                    "description": "Status bits, for transmission\n              transfers",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DTOG_TX": {
    +                    "description": "Data Toggle, for transmission\n              transfers",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CTR_TX": {
    +                    "description": "Correct Transfer for\n              transmission",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EP_KIND": {
    +                    "description": "Endpoint kind",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EP_TYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 9,
    +                    "size": 2
    +                  },
    +                  "SETUP": {
    +                    "description": "Setup transaction\n              completed",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "STAT_RX": {
    +                    "description": "Status bits, for reception\n              transfers",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "DTOG_RX": {
    +                    "description": "Data Toggle, for reception\n              transfers",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CTR_RX": {
    +                    "description": "Correct transfer for\n              reception",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EP6R": {
    +              "description": "endpoint 6 register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EA": {
    +                    "description": "Endpoint address",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "STAT_TX": {
    +                    "description": "Status bits, for transmission\n              transfers",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DTOG_TX": {
    +                    "description": "Data Toggle, for transmission\n              transfers",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CTR_TX": {
    +                    "description": "Correct Transfer for\n              transmission",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EP_KIND": {
    +                    "description": "Endpoint kind",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EP_TYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 9,
    +                    "size": 2
    +                  },
    +                  "SETUP": {
    +                    "description": "Setup transaction\n              completed",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "STAT_RX": {
    +                    "description": "Status bits, for reception\n              transfers",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "DTOG_RX": {
    +                    "description": "Data Toggle, for reception\n              transfers",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CTR_RX": {
    +                    "description": "Correct transfer for\n              reception",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EP7R": {
    +              "description": "endpoint 7 register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EA": {
    +                    "description": "Endpoint address",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "STAT_TX": {
    +                    "description": "Status bits, for transmission\n              transfers",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DTOG_TX": {
    +                    "description": "Data Toggle, for transmission\n              transfers",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CTR_TX": {
    +                    "description": "Correct Transfer for\n              transmission",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EP_KIND": {
    +                    "description": "Endpoint kind",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EP_TYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 9,
    +                    "size": 2
    +                  },
    +                  "SETUP": {
    +                    "description": "Setup transaction\n              completed",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "STAT_RX": {
    +                    "description": "Status bits, for reception\n              transfers",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "DTOG_RX": {
    +                    "description": "Data Toggle, for reception\n              transfers",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CTR_RX": {
    +                    "description": "Correct transfer for\n              reception",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNTR": {
    +              "description": "control register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 3,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FRES": {
    +                    "description": "Force USB Reset",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PDWN": {
    +                    "description": "Power down",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "LPMODE": {
    +                    "description": "Low-power mode",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FSUSP": {
    +                    "description": "Force suspend",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RESUME": {
    +                    "description": "Resume request",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ESOFM": {
    +                    "description": "Expected start of frame interrupt\n              mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SOFM": {
    +                    "description": "Start of frame interrupt\n              mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RESETM": {
    +                    "description": "USB reset interrupt mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SUSPM": {
    +                    "description": "Suspend mode interrupt\n              mask",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "WKUPM": {
    +                    "description": "Wakeup interrupt mask",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ERRM": {
    +                    "description": "Error interrupt mask",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "PMAOVRM": {
    +                    "description": "Packet memory area over / underrun\n              interrupt mask",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CTRM": {
    +                    "description": "Correct transfer interrupt\n              mask",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ISTR": {
    +              "description": "interrupt status register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EP_ID": {
    +                    "description": "Endpoint Identifier",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "DIR": {
    +                    "description": "Direction of transaction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ESOF": {
    +                    "description": "Expected start frame",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SOF": {
    +                    "description": "start of frame",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "reset request",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SUSP": {
    +                    "description": "Suspend mode request",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "WKUP": {
    +                    "description": "Wakeup",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ERR": {
    +                    "description": "Error",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "PMAOVR": {
    +                    "description": "Packet memory area over /\n              underrun",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CTR": {
    +                    "description": "Correct transfer",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FNR": {
    +              "description": "frame number register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "FN": {
    +                    "description": "Frame number",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "LSOF": {
    +                    "description": "Lost SOF",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "LCK": {
    +                    "description": "Locked",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RXDM": {
    +                    "description": "Receive data - line status",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "RXDP": {
    +                    "description": "Receive data + line status",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DADDR": {
    +              "description": "device address",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADD": {
    +                    "description": "Device address",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "EF": {
    +                    "description": "Enable function",
    +                    "offset": 7,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BTABLE": {
    +              "description": "Buffer table address",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BTABLE": {
    +                    "description": "Buffer table",
    +                    "offset": 3,
    +                    "size": 13
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIM6": {
    +        "description": "Basic timer",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OPM": {
    +                    "description": "One-pulse mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MMS": {
    +                    "description": "Master mode selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "UDE": {
    +                    "description": "Update DMA request enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "Low counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARR": {
    +                    "description": "Low Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "FLASH": {
    +        "description": "FLASH",
    +        "children": {
    +          "registers": {
    +            "ACR": {
    +              "description": "Flash access control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 48,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LATENCY": {
    +                    "description": "Latency",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "HLFCYA": {
    +                    "description": "Flash half cycle access\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PRFTBE": {
    +                    "description": "Prefetch buffer enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "PRFTBS": {
    +                    "description": "Prefetch buffer status",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "KEYR": {
    +              "description": "Flash key register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "KEY": {
    +                    "description": "FPEC key",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OPTKEYR": {
    +              "description": "Flash option key register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "OPTKEY": {
    +                    "description": "Option byte key",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "Status register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EOP": {
    +                    "description": "End of operation",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "WRPRTERR": {
    +                    "description": "Write protection error",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "PGERR": {
    +                    "description": "Programming error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "BSY": {
    +                    "description": "Busy",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CR": {
    +              "description": "Control register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PG": {
    +                    "description": "Programming",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PER": {
    +                    "description": "Page Erase",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MER": {
    +                    "description": "Mass Erase",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OPTPG": {
    +                    "description": "Option byte programming",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "OPTER": {
    +                    "description": "Option byte erase",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "STRT": {
    +                    "description": "Start",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "LOCK": {
    +                    "description": "Lock",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OPTWRE": {
    +                    "description": "Option bytes write enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "Error interrupt enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EOPIE": {
    +                    "description": "End of operation interrupt\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AR": {
    +              "description": "Flash address register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "FAR": {
    +                    "description": "Flash Address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OBR": {
    +              "description": "Option byte register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 67108860,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "OPTERR": {
    +                    "description": "Option byte error",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RDPRT": {
    +                    "description": "Read protection",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "WDG_SW": {
    +                    "description": "WDG_SW",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "nRST_STOP": {
    +                    "description": "nRST_STOP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "nRST_STDBY": {
    +                    "description": "nRST_STDBY",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "Data0": {
    +                    "description": "Data0",
    +                    "offset": 10,
    +                    "size": 8
    +                  },
    +                  "Data1": {
    +                    "description": "Data1",
    +                    "offset": 18,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "WRPR": {
    +              "description": "Write protection register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "WRP": {
    +                    "description": "Write protect",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "I2C1": {
    +        "description": "Inter integrated circuit",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "Control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SWRST": {
    +                    "description": "Software reset",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ALERT": {
    +                    "description": "SMBus alert",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "PEC": {
    +                    "description": "Packet error checking",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "POS": {
    +                    "description": "Acknowledge/PEC Position (for data\n              reception)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "Acknowledge enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "STOP": {
    +                    "description": "Stop generation",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "START": {
    +                    "description": "Start generation",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "NOSTRETCH": {
    +                    "description": "Clock stretching disable (Slave\n              mode)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ENGC": {
    +                    "description": "General call enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ENPEC": {
    +                    "description": "PEC enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ENARP": {
    +                    "description": "ARP enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SMBTYPE": {
    +                    "description": "SMBus type",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SMBUS": {
    +                    "description": "SMBus mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PE": {
    +                    "description": "Peripheral enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "Control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LAST": {
    +                    "description": "DMA last transfer",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "DMAEN": {
    +                    "description": "DMA requests enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ITBUFEN": {
    +                    "description": "Buffer interrupt enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ITEVTEN": {
    +                    "description": "Event interrupt enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ITERREN": {
    +                    "description": "Error interrupt enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FREQ": {
    +                    "description": "Peripheral clock frequency",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "OAR1": {
    +              "description": "Own address register 1",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADDMODE": {
    +                    "description": "Addressing mode (slave\n              mode)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ADD10": {
    +                    "description": "Interface address",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "ADD7": {
    +                    "description": "Interface address",
    +                    "offset": 1,
    +                    "size": 7
    +                  },
    +                  "ADD0": {
    +                    "description": "Interface address",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OAR2": {
    +              "description": "Own address register 2",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADD2": {
    +                    "description": "Interface address",
    +                    "offset": 1,
    +                    "size": 7
    +                  },
    +                  "ENDUAL": {
    +                    "description": "Dual addressing mode\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "Data register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DR": {
    +                    "description": "8-bit data register",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SR1": {
    +              "description": "Status register 1",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SMBALERT": {
    +                    "description": "SMBus alert",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TIMEOUT": {
    +                    "description": "Timeout or Tlow error",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PECERR": {
    +                    "description": "PEC Error in reception",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "OVR": {
    +                    "description": "Overrun/Underrun",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AF": {
    +                    "description": "Acknowledge failure",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ARLO": {
    +                    "description": "Arbitration lost (master\n              mode)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BERR": {
    +                    "description": "Bus error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TxE": {
    +                    "description": "Data register empty\n              (transmitters)",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RxNE": {
    +                    "description": "Data register not empty\n              (receivers)",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "STOPF": {
    +                    "description": "Stop detection (slave\n              mode)",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ADD10": {
    +                    "description": "10-bit header sent (Master\n              mode)",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BTF": {
    +                    "description": "Byte transfer finished",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ADDR": {
    +                    "description": "Address sent (master mode)/matched\n              (slave mode)",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SB": {
    +                    "description": "Start bit (Master mode)",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SR2": {
    +              "description": "Status register 2",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "PEC": {
    +                    "description": "acket error checking\n              register",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DUALF": {
    +                    "description": "Dual flag (Slave mode)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SMBHOST": {
    +                    "description": "SMBus host header (Slave\n              mode)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SMBDEFAULT": {
    +                    "description": "SMBus device default address (Slave\n              mode)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GENCALL": {
    +                    "description": "General call address (Slave\n              mode)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TRA": {
    +                    "description": "Transmitter/receiver",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "BUSY": {
    +                    "description": "Bus busy",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MSL": {
    +                    "description": "Master/slave",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCR": {
    +              "description": "Clock control register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "F_S": {
    +                    "description": "I2C master mode selection",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "DUTY": {
    +                    "description": "Fast mode duty cycle",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CCR": {
    +                    "description": "Clock control register in Fast/Standard\n              mode (Master mode)",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "TRISE": {
    +              "description": "TRISE register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 2,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TRISE": {
    +                    "description": "Maximum rise time in Fast/Standard mode\n              (Master mode)",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "CRC": {
    +        "description": "CRC calculation unit",
    +        "children": {
    +          "registers": {
    +            "DR": {
    +              "description": "Data register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DR": {
    +                    "description": "Data Register",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IDR": {
    +              "description": "Independent Data register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IDR": {
    +                    "description": "Independent Data register",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CR": {
    +              "description": "Control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "RESET": {
    +                    "description": "Reset bit",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SPI1": {
    +        "description": "Serial peripheral interface",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BIDIMODE": {
    +                    "description": "Bidirectional data mode\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "BIDIOE": {
    +                    "description": "Output enable in bidirectional\n              mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CRCEN": {
    +                    "description": "Hardware CRC calculation\n              enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CRCNEXT": {
    +                    "description": "CRC transfer next",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "DFF": {
    +                    "description": "Data frame format",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "RXONLY": {
    +                    "description": "Receive only",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SSM": {
    +                    "description": "Software slave management",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SSI": {
    +                    "description": "Internal slave select",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LSBFIRST": {
    +                    "description": "Frame format",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SPE": {
    +                    "description": "SPI enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BR": {
    +                    "description": "Baud rate control",
    +                    "offset": 3,
    +                    "size": 3
    +                  },
    +                  "MSTR": {
    +                    "description": "Master selection",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CPOL": {
    +                    "description": "Clock polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CPHA": {
    +                    "description": "Clock phase",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXEIE": {
    +                    "description": "Tx buffer empty interrupt\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RXNEIE": {
    +                    "description": "RX buffer not empty interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "Error interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "SSOE": {
    +                    "description": "SS output enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TXDMAEN": {
    +                    "description": "Tx buffer DMA enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RXDMAEN": {
    +                    "description": "Rx buffer DMA enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 2,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BSY": {
    +                    "description": "Busy flag",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OVR": {
    +                    "description": "Overrun flag",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MODF": {
    +                    "description": "Mode fault",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CRCERR": {
    +                    "description": "CRC error flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "UDR": {
    +                    "description": "Underrun flag",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CHSIDE": {
    +                    "description": "Channel side",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXE": {
    +                    "description": "Transmit buffer empty",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXNE": {
    +                    "description": "Receive buffer not empty",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "data register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DR": {
    +                    "description": "Data register",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CRCPR": {
    +              "description": "CRC polynomial register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 7,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CRCPOLY": {
    +                    "description": "CRC polynomial register",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "RXCRCR": {
    +              "description": "RX CRC register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RxCRC": {
    +                    "description": "Rx CRC register",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "TXCRCR": {
    +              "description": "TX CRC register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TxCRC": {
    +                    "description": "Tx CRC register",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "I2SCFGR": {
    +              "description": "I2S configuration register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "I2SMOD": {
    +                    "description": "I2S mode selection",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "I2SE": {
    +                    "description": "I2S Enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "I2SCFG": {
    +                    "description": "I2S configuration mode",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "PCMSYNC": {
    +                    "description": "PCM frame synchronization",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "I2SSTD": {
    +                    "description": "I2S standard selection",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "CKPOL": {
    +                    "description": "Steady state clock\n              polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DATLEN": {
    +                    "description": "Data length to be\n              transferred",
    +                    "offset": 1,
    +                    "size": 2
    +                  },
    +                  "CHLEN": {
    +                    "description": "Channel length (number of bits per audio\n              channel)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "I2SPR": {
    +              "description": "I2S prescaler register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 10,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MCKOE": {
    +                    "description": "Master clock output enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ODD": {
    +                    "description": "Odd factor for the\n              prescaler",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "I2SDIV": {
    +                    "description": "I2S Linear prescaler",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "UART5": {
    +        "description": "Universal asynchronous receiver\n      transmitter",
    +        "children": {
    +          "registers": {
    +            "SR": {
    +              "description": "UART4_SR",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PE": {
    +                    "description": "PE",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FE": {
    +                    "description": "FE",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NE": {
    +                    "description": "NE",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ORE": {
    +                    "description": "ORE",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IDLE": {
    +                    "description": "IDLE",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXNE": {
    +                    "description": "RXNE",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TC": {
    +                    "description": "TC",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXE": {
    +                    "description": "TXE",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LBD": {
    +                    "description": "LBD",
    +                    "offset": 8,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "UART4_DR",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DR": {
    +                    "description": "DR",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "BRR": {
    +              "description": "UART4_BRR",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DIV_Fraction": {
    +                    "description": "DIV_Fraction",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "DIV_Mantissa": {
    +                    "description": "DIV_Mantissa",
    +                    "offset": 4,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "CR1": {
    +              "description": "UART4_CR1",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SBK": {
    +                    "description": "SBK",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RWU": {
    +                    "description": "RWU",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RE": {
    +                    "description": "RE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TE": {
    +                    "description": "TE",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IDLEIE": {
    +                    "description": "IDLEIE",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RXNEIE": {
    +                    "description": "RXNEIE",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "TCIE",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXEIE": {
    +                    "description": "TXEIE",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PEIE": {
    +                    "description": "PEIE",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PS": {
    +                    "description": "PS",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PCE": {
    +                    "description": "PCE",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "WAKE": {
    +                    "description": "WAKE",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "M": {
    +                    "description": "M",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "UE": {
    +                    "description": "UE",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "UART4_CR2",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADD": {
    +                    "description": "ADD",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "LBDL": {
    +                    "description": "LBDL",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "LBDIE": {
    +                    "description": "LBDIE",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "STOP": {
    +                    "description": "STOP",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "LINEN": {
    +                    "description": "LINEN",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR3": {
    +              "description": "UART4_CR3",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EIE": {
    +                    "description": "Error interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "IREN": {
    +                    "description": "IrDA mode enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IRLP": {
    +                    "description": "IrDA low-power",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "HDSEL": {
    +                    "description": "Half-duplex selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DMAT": {
    +                    "description": "DMA enable transmitter",
    +                    "offset": 7,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "UART4": {
    +        "description": "Universal asynchronous receiver\n      transmitter",
    +        "children": {
    +          "registers": {
    +            "SR": {
    +              "description": "UART4_SR",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PE": {
    +                    "description": "Parity error",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FE": {
    +                    "description": "Framing error",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NE": {
    +                    "description": "Noise error flag",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ORE": {
    +                    "description": "Overrun error",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IDLE": {
    +                    "description": "IDLE line detected",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXNE": {
    +                    "description": "Read data register not\n              empty",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TC": {
    +                    "description": "Transmission complete",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXE": {
    +                    "description": "Transmit data register\n              empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LBD": {
    +                    "description": "LIN break detection flag",
    +                    "offset": 8,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "UART4_DR",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DR": {
    +                    "description": "DR",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "BRR": {
    +              "description": "UART4_BRR",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DIV_Fraction": {
    +                    "description": "DIV_Fraction",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "DIV_Mantissa": {
    +                    "description": "DIV_Mantissa",
    +                    "offset": 4,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "CR1": {
    +              "description": "UART4_CR1",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SBK": {
    +                    "description": "Send break",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RWU": {
    +                    "description": "Receiver wakeup",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RE": {
    +                    "description": "Receiver enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TE": {
    +                    "description": "Transmitter enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IDLEIE": {
    +                    "description": "IDLE interrupt enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RXNEIE": {
    +                    "description": "RXNE interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transmission complete interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXEIE": {
    +                    "description": "TXE interrupt enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PEIE": {
    +                    "description": "PE interrupt enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PS": {
    +                    "description": "Parity selection",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PCE": {
    +                    "description": "Parity control enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "WAKE": {
    +                    "description": "Wakeup method",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "M": {
    +                    "description": "Word length",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "UE": {
    +                    "description": "USART enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "UART4_CR2",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADD": {
    +                    "description": "Address of the USART node",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "LBDL": {
    +                    "description": "lin break detection length",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "LBDIE": {
    +                    "description": "LIN break detection interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "STOP": {
    +                    "description": "STOP bits",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "LINEN": {
    +                    "description": "LIN mode enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR3": {
    +              "description": "UART4_CR3",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EIE": {
    +                    "description": "Error interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "IREN": {
    +                    "description": "IrDA mode enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IRLP": {
    +                    "description": "IrDA low-power",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "HDSEL": {
    +                    "description": "Half-duplex selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DMAR": {
    +                    "description": "DMA enable receiver",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DMAT": {
    +                    "description": "DMA enable transmitter",
    +                    "offset": 7,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "USART1": {
    +        "description": "Universal synchronous asynchronous receiver\n      transmitter",
    +        "children": {
    +          "registers": {
    +            "SR": {
    +              "description": "Status register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 192,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTS": {
    +                    "description": "CTS flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "LBD": {
    +                    "description": "LIN break detection flag",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TXE": {
    +                    "description": "Transmit data register\n              empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TC": {
    +                    "description": "Transmission complete",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RXNE": {
    +                    "description": "Read data register not\n              empty",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IDLE": {
    +                    "description": "IDLE line detected",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ORE": {
    +                    "description": "Overrun error",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NE": {
    +                    "description": "Noise error flag",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FE": {
    +                    "description": "Framing error",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PE": {
    +                    "description": "Parity error",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "Data register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DR": {
    +                    "description": "Data value",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "BRR": {
    +              "description": "Baud rate register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DIV_Mantissa": {
    +                    "description": "mantissa of USARTDIV",
    +                    "offset": 4,
    +                    "size": 12
    +                  },
    +                  "DIV_Fraction": {
    +                    "description": "fraction of USARTDIV",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CR1": {
    +              "description": "Control register 1",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "UE": {
    +                    "description": "USART enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "M": {
    +                    "description": "Word length",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WAKE": {
    +                    "description": "Wakeup method",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "PCE": {
    +                    "description": "Parity control enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PS": {
    +                    "description": "Parity selection",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PEIE": {
    +                    "description": "PE interrupt enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TXEIE": {
    +                    "description": "TXE interrupt enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transmission complete interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RXNEIE": {
    +                    "description": "RXNE interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IDLEIE": {
    +                    "description": "IDLE interrupt enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TE": {
    +                    "description": "Transmitter enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RE": {
    +                    "description": "Receiver enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RWU": {
    +                    "description": "Receiver wakeup",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SBK": {
    +                    "description": "Send break",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "Control register 2",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LINEN": {
    +                    "description": "LIN mode enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "STOP": {
    +                    "description": "STOP bits",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "CLKEN": {
    +                    "description": "Clock enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CPOL": {
    +                    "description": "Clock polarity",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CPHA": {
    +                    "description": "Clock phase",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "LBCL": {
    +                    "description": "Last bit clock pulse",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LBDIE": {
    +                    "description": "LIN break detection interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "LBDL": {
    +                    "description": "lin break detection length",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ADD": {
    +                    "description": "Address of the USART node",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CR3": {
    +              "description": "Control register 3",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTSIE": {
    +                    "description": "CTS interrupt enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CTSE": {
    +                    "description": "CTS enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RTSE": {
    +                    "description": "RTS enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DMAT": {
    +                    "description": "DMA enable transmitter",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "DMAR": {
    +                    "description": "DMA enable receiver",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SCEN": {
    +                    "description": "Smartcard mode enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NACK": {
    +                    "description": "Smartcard NACK enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "HDSEL": {
    +                    "description": "Half-duplex selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IRLP": {
    +                    "description": "IrDA low-power",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IREN": {
    +                    "description": "IrDA mode enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EIE": {
    +                    "description": "Error interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GTPR": {
    +              "description": "Guard time and prescaler\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "GT": {
    +                    "description": "Guard time value",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "DBG": {
    +        "description": "Debug support",
    +        "children": {
    +          "registers": {
    +            "IDCODE": {
    +              "description": "DBGMCU_IDCODE",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DEV_ID": {
    +                    "description": "DEV_ID",
    +                    "offset": 0,
    +                    "size": 12
    +                  },
    +                  "REV_ID": {
    +                    "description": "REV_ID",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CR": {
    +              "description": "DBGMCU_CR",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBG_SLEEP": {
    +                    "description": "DBG_SLEEP",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DBG_STOP": {
    +                    "description": "DBG_STOP",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DBG_STANDBY": {
    +                    "description": "DBG_STANDBY",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TRACE_IOEN": {
    +                    "description": "TRACE_IOEN",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TRACE_MODE": {
    +                    "description": "TRACE_MODE",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "DBG_IWDG_STOP": {
    +                    "description": "DBG_IWDG_STOP",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DBG_WWDG_STOP": {
    +                    "description": "DBG_WWDG_STOP",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM1_STOP": {
    +                    "description": "DBG_TIM1_STOP",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM2_STOP": {
    +                    "description": "DBG_TIM2_STOP",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM3_STOP": {
    +                    "description": "DBG_TIM3_STOP",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM4_STOP": {
    +                    "description": "DBG_TIM4_STOP",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "DBG_CAN1_STOP": {
    +                    "description": "DBG_CAN1_STOP",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "DBG_I2C1_SMBUS_TIMEOUT": {
    +                    "description": "DBG_I2C1_SMBUS_TIMEOUT",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "DBG_I2C2_SMBUS_TIMEOUT": {
    +                    "description": "DBG_I2C2_SMBUS_TIMEOUT",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM8_STOP": {
    +                    "description": "DBG_TIM8_STOP",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM5_STOP": {
    +                    "description": "DBG_TIM5_STOP",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM6_STOP": {
    +                    "description": "DBG_TIM6_STOP",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM7_STOP": {
    +                    "description": "DBG_TIM7_STOP",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "DBG_CAN2_STOP": {
    +                    "description": "DBG_CAN2_STOP",
    +                    "offset": 21,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "DAC": {
    +        "description": "Digital to analog converter",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "Control register (DAC_CR)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EN1": {
    +                    "description": "DAC channel1 enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "BOFF1": {
    +                    "description": "DAC channel1 output buffer\n              disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TEN1": {
    +                    "description": "DAC channel1 trigger\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TSEL1": {
    +                    "description": "DAC channel1 trigger\n              selection",
    +                    "offset": 3,
    +                    "size": 3
    +                  },
    +                  "WAVE1": {
    +                    "description": "DAC channel1 noise/triangle wave\n              generation enable",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "MAMP1": {
    +                    "description": "DAC channel1 mask/amplitude\n              selector",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "DMAEN1": {
    +                    "description": "DAC channel1 DMA enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "EN2": {
    +                    "description": "DAC channel2 enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BOFF2": {
    +                    "description": "DAC channel2 output buffer\n              disable",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TEN2": {
    +                    "description": "DAC channel2 trigger\n              enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TSEL2": {
    +                    "description": "DAC channel2 trigger\n              selection",
    +                    "offset": 19,
    +                    "size": 3
    +                  },
    +                  "WAVE2": {
    +                    "description": "DAC channel2 noise/triangle wave\n              generation enable",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "MAMP2": {
    +                    "description": "DAC channel2 mask/amplitude\n              selector",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "DMAEN2": {
    +                    "description": "DAC channel2 DMA enable",
    +                    "offset": 28,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SWTRIGR": {
    +              "description": "DAC software trigger register\n          (DAC_SWTRIGR)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "SWTRIG1": {
    +                    "description": "DAC channel1 software\n              trigger",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SWTRIG2": {
    +                    "description": "DAC channel2 software\n              trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DHR12R1": {
    +              "description": "DAC channel1 12-bit right-aligned data\n          holding register(DAC_DHR12R1)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC1DHR": {
    +                    "description": "DAC channel1 12-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DHR12L1": {
    +              "description": "DAC channel1 12-bit left aligned data\n          holding register (DAC_DHR12L1)",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC1DHR": {
    +                    "description": "DAC channel1 12-bit left-aligned\n              data",
    +                    "offset": 4,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DHR8R1": {
    +              "description": "DAC channel1 8-bit right aligned data\n          holding register (DAC_DHR8R1)",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC1DHR": {
    +                    "description": "DAC channel1 8-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "DHR12R2": {
    +              "description": "DAC channel2 12-bit right aligned data\n          holding register (DAC_DHR12R2)",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC2DHR": {
    +                    "description": "DAC channel2 12-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DHR12L2": {
    +              "description": "DAC channel2 12-bit left aligned data\n          holding register (DAC_DHR12L2)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC2DHR": {
    +                    "description": "DAC channel2 12-bit left-aligned\n              data",
    +                    "offset": 4,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DHR8R2": {
    +              "description": "DAC channel2 8-bit right-aligned data\n          holding register (DAC_DHR8R2)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC2DHR": {
    +                    "description": "DAC channel2 8-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "DHR12RD": {
    +              "description": "Dual DAC 12-bit right-aligned data holding\n          register (DAC_DHR12RD), Bits 31:28 Reserved, Bits 15:12\n          Reserved",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC1DHR": {
    +                    "description": "DAC channel1 12-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 12
    +                  },
    +                  "DACC2DHR": {
    +                    "description": "DAC channel2 12-bit right-aligned\n              data",
    +                    "offset": 16,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DHR12LD": {
    +              "description": "DUAL DAC 12-bit left aligned data holding\n          register (DAC_DHR12LD), Bits 19:16 Reserved, Bits 3:0\n          Reserved",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC1DHR": {
    +                    "description": "DAC channel1 12-bit left-aligned\n              data",
    +                    "offset": 4,
    +                    "size": 12
    +                  },
    +                  "DACC2DHR": {
    +                    "description": "DAC channel2 12-bit right-aligned\n              data",
    +                    "offset": 20,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DHR8RD": {
    +              "description": "DUAL DAC 8-bit right aligned data holding\n          register (DAC_DHR8RD), Bits 31:16 Reserved",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC1DHR": {
    +                    "description": "DAC channel1 8-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "DACC2DHR": {
    +                    "description": "DAC channel2 8-bit right-aligned\n              data",
    +                    "offset": 8,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "DOR1": {
    +              "description": "DAC channel1 data output register\n          (DAC_DOR1)",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DACC1DOR": {
    +                    "description": "DAC channel1 data output",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DOR2": {
    +              "description": "DAC channel2 data output register\n          (DAC_DOR2)",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DACC2DOR": {
    +                    "description": "DAC channel2 data output",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "ADC1": {
    +        "description": "Analog to digital converter",
    +        "children": {
    +          "registers": {
    +            "SR": {
    +              "description": "status register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STRT": {
    +                    "description": "Regular channel start flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "JSTRT": {
    +                    "description": "Injected channel start\n              flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "JEOC": {
    +                    "description": "Injected channel end of\n              conversion",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EOC": {
    +                    "description": "Regular channel end of\n              conversion",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AWD": {
    +                    "description": "Analog watchdog flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AWDEN": {
    +                    "description": "Analog watchdog enable on regular\n              channels",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "JAWDEN": {
    +                    "description": "Analog watchdog enable on injected\n              channels",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "DUALMOD": {
    +                    "description": "Dual mode selection",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "DISCNUM": {
    +                    "description": "Discontinuous mode channel\n              count",
    +                    "offset": 13,
    +                    "size": 3
    +                  },
    +                  "JDISCEN": {
    +                    "description": "Discontinuous mode on injected\n              channels",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "DISCEN": {
    +                    "description": "Discontinuous mode on regular\n              channels",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "JAUTO": {
    +                    "description": "Automatic injected group\n              conversion",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "AWDSGL": {
    +                    "description": "Enable the watchdog on a single channel\n              in scan mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SCAN": {
    +                    "description": "Scan mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "JEOCIE": {
    +                    "description": "Interrupt enable for injected\n              channels",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "AWDIE": {
    +                    "description": "Analog watchdog interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EOCIE": {
    +                    "description": "Interrupt enable for EOC",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "AWDCH": {
    +                    "description": "Analog watchdog channel select\n              bits",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TSVREFE": {
    +                    "description": "Temperature sensor and VREFINT\n              enable",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "SWSTART": {
    +                    "description": "Start conversion of regular\n              channels",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "JSWSTART": {
    +                    "description": "Start conversion of injected\n              channels",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EXTTRIG": {
    +                    "description": "External trigger conversion mode for\n              regular channels",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EXTSEL": {
    +                    "description": "External event select for regular\n              group",
    +                    "offset": 17,
    +                    "size": 3
    +                  },
    +                  "JEXTTRIG": {
    +                    "description": "External trigger conversion mode for\n              injected channels",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "JEXTSEL": {
    +                    "description": "External event select for injected\n              group",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "ALIGN": {
    +                    "description": "Data alignment",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "DMA": {
    +                    "description": "Direct memory access mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "RSTCAL": {
    +                    "description": "Reset calibration",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CAL": {
    +                    "description": "A/D calibration",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CONT": {
    +                    "description": "Continuous conversion",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ADON": {
    +                    "description": "A/D converter ON / OFF",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SMPR1": {
    +              "description": "sample time register 1",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SMP10": {
    +                    "description": "Channel 10 sample time\n              selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "SMP11": {
    +                    "description": "Channel 11 sample time\n              selection",
    +                    "offset": 3,
    +                    "size": 3
    +                  },
    +                  "SMP12": {
    +                    "description": "Channel 12 sample time\n              selection",
    +                    "offset": 6,
    +                    "size": 3
    +                  },
    +                  "SMP13": {
    +                    "description": "Channel 13 sample time\n              selection",
    +                    "offset": 9,
    +                    "size": 3
    +                  },
    +                  "SMP14": {
    +                    "description": "Channel 14 sample time\n              selection",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "SMP15": {
    +                    "description": "Channel 15 sample time\n              selection",
    +                    "offset": 15,
    +                    "size": 3
    +                  },
    +                  "SMP16": {
    +                    "description": "Channel 16 sample time\n              selection",
    +                    "offset": 18,
    +                    "size": 3
    +                  },
    +                  "SMP17": {
    +                    "description": "Channel 17 sample time\n              selection",
    +                    "offset": 21,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "SMPR2": {
    +              "description": "sample time register 2",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SMP0": {
    +                    "description": "Channel 0 sample time\n              selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "SMP1": {
    +                    "description": "Channel 1 sample time\n              selection",
    +                    "offset": 3,
    +                    "size": 3
    +                  },
    +                  "SMP2": {
    +                    "description": "Channel 2 sample time\n              selection",
    +                    "offset": 6,
    +                    "size": 3
    +                  },
    +                  "SMP3": {
    +                    "description": "Channel 3 sample time\n              selection",
    +                    "offset": 9,
    +                    "size": 3
    +                  },
    +                  "SMP4": {
    +                    "description": "Channel 4 sample time\n              selection",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "SMP5": {
    +                    "description": "Channel 5 sample time\n              selection",
    +                    "offset": 15,
    +                    "size": 3
    +                  },
    +                  "SMP6": {
    +                    "description": "Channel 6 sample time\n              selection",
    +                    "offset": 18,
    +                    "size": 3
    +                  },
    +                  "SMP7": {
    +                    "description": "Channel 7 sample time\n              selection",
    +                    "offset": 21,
    +                    "size": 3
    +                  },
    +                  "SMP8": {
    +                    "description": "Channel 8 sample time\n              selection",
    +                    "offset": 24,
    +                    "size": 3
    +                  },
    +                  "SMP9": {
    +                    "description": "Channel 9 sample time\n              selection",
    +                    "offset": 27,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "JOFR1": {
    +              "description": "injected channel data offset register\n          x",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "JOFFSET1": {
    +                    "description": "Data offset for injected channel\n              x",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "JOFR2": {
    +              "description": "injected channel data offset register\n          x",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "JOFFSET2": {
    +                    "description": "Data offset for injected channel\n              x",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "JOFR3": {
    +              "description": "injected channel data offset register\n          x",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "JOFFSET3": {
    +                    "description": "Data offset for injected channel\n              x",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "JOFR4": {
    +              "description": "injected channel data offset register\n          x",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "JOFFSET4": {
    +                    "description": "Data offset for injected channel\n              x",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "HTR": {
    +              "description": "watchdog higher threshold\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 4095,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HT": {
    +                    "description": "Analog watchdog higher\n              threshold",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "LTR": {
    +              "description": "watchdog lower threshold\n          register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LT": {
    +                    "description": "Analog watchdog lower\n              threshold",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "SQR1": {
    +              "description": "regular sequence register 1",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "L": {
    +                    "description": "Regular channel sequence\n              length",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "SQ16": {
    +                    "description": "16th conversion in regular\n              sequence",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "SQ15": {
    +                    "description": "15th conversion in regular\n              sequence",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "SQ14": {
    +                    "description": "14th conversion in regular\n              sequence",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "SQ13": {
    +                    "description": "13th conversion in regular\n              sequence",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "SQR2": {
    +              "description": "regular sequence register 2",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SQ12": {
    +                    "description": "12th conversion in regular\n              sequence",
    +                    "offset": 25,
    +                    "size": 5
    +                  },
    +                  "SQ11": {
    +                    "description": "11th conversion in regular\n              sequence",
    +                    "offset": 20,
    +                    "size": 5
    +                  },
    +                  "SQ10": {
    +                    "description": "10th conversion in regular\n              sequence",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "SQ9": {
    +                    "description": "9th conversion in regular\n              sequence",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "SQ8": {
    +                    "description": "8th conversion in regular\n              sequence",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "SQ7": {
    +                    "description": "7th conversion in regular\n              sequence",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "SQR3": {
    +              "description": "regular sequence register 3",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SQ6": {
    +                    "description": "6th conversion in regular\n              sequence",
    +                    "offset": 25,
    +                    "size": 5
    +                  },
    +                  "SQ5": {
    +                    "description": "5th conversion in regular\n              sequence",
    +                    "offset": 20,
    +                    "size": 5
    +                  },
    +                  "SQ4": {
    +                    "description": "4th conversion in regular\n              sequence",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "SQ3": {
    +                    "description": "3rd conversion in regular\n              sequence",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "SQ2": {
    +                    "description": "2nd conversion in regular\n              sequence",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "SQ1": {
    +                    "description": "1st conversion in regular\n              sequence",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "JSQR": {
    +              "description": "injected sequence register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "JL": {
    +                    "description": "Injected sequence length",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "JSQ4": {
    +                    "description": "4th conversion in injected\n              sequence",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "JSQ3": {
    +                    "description": "3rd conversion in injected\n              sequence",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "JSQ2": {
    +                    "description": "2nd conversion in injected\n              sequence",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "JSQ1": {
    +                    "description": "1st conversion in injected\n              sequence",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "JDR1": {
    +              "description": "injected data register x",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "JDATA": {
    +                    "description": "Injected data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "JDR2": {
    +              "description": "injected data register x",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "JDATA": {
    +                    "description": "Injected data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "JDR3": {
    +              "description": "injected data register x",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "JDATA": {
    +                    "description": "Injected data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "JDR4": {
    +              "description": "injected data register x",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "JDATA": {
    +                    "description": "Injected data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "regular data register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Regular data",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "ADC2DATA": {
    +                    "description": "ADC2 data",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "ADC2": {
    +        "description": "Analog to digital converter",
    +        "children": {
    +          "registers": {
    +            "SR": {
    +              "description": "status register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STRT": {
    +                    "description": "Regular channel start flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "JSTRT": {
    +                    "description": "Injected channel start\n              flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "JEOC": {
    +                    "description": "Injected channel end of\n              conversion",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EOC": {
    +                    "description": "Regular channel end of\n              conversion",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AWD": {
    +                    "description": "Analog watchdog flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AWDEN": {
    +                    "description": "Analog watchdog enable on regular\n              channels",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "JAWDEN": {
    +                    "description": "Analog watchdog enable on injected\n              channels",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "DISCNUM": {
    +                    "description": "Discontinuous mode channel\n              count",
    +                    "offset": 13,
    +                    "size": 3
    +                  },
    +                  "JDISCEN": {
    +                    "description": "Discontinuous mode on injected\n              channels",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "DISCEN": {
    +                    "description": "Discontinuous mode on regular\n              channels",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "JAUTO": {
    +                    "description": "Automatic injected group\n              conversion",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "AWDSGL": {
    +                    "description": "Enable the watchdog on a single channel\n              in scan mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SCAN": {
    +                    "description": "Scan mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "JEOCIE": {
    +                    "description": "Interrupt enable for injected\n              channels",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "AWDIE": {
    +                    "description": "Analog watchdog interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EOCIE": {
    +                    "description": "Interrupt enable for EOC",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "AWDCH": {
    +                    "description": "Analog watchdog channel select\n              bits",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TSVREFE": {
    +                    "description": "Temperature sensor and VREFINT\n              enable",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "SWSTART": {
    +                    "description": "Start conversion of regular\n              channels",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "JSWSTART": {
    +                    "description": "Start conversion of injected\n              channels",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EXTTRIG": {
    +                    "description": "External trigger conversion mode for\n              regular channels",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EXTSEL": {
    +                    "description": "External event select for regular\n              group",
    +                    "offset": 17,
    +                    "size": 3
    +                  },
    +                  "JEXTTRIG": {
    +                    "description": "External trigger conversion mode for\n              injected channels",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "JEXTSEL": {
    +                    "description": "External event select for injected\n              group",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "ALIGN": {
    +                    "description": "Data alignment",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "DMA": {
    +                    "description": "Direct memory access mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "RSTCAL": {
    +                    "description": "Reset calibration",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CAL": {
    +                    "description": "A/D calibration",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CONT": {
    +                    "description": "Continuous conversion",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ADON": {
    +                    "description": "A/D converter ON / OFF",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SMPR1": {
    +              "description": "sample time register 1",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SMP10": {
    +                    "description": "Channel 10 sample time\n              selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "SMP11": {
    +                    "description": "Channel 11 sample time\n              selection",
    +                    "offset": 3,
    +                    "size": 3
    +                  },
    +                  "SMP12": {
    +                    "description": "Channel 12 sample time\n              selection",
    +                    "offset": 6,
    +                    "size": 3
    +                  },
    +                  "SMP13": {
    +                    "description": "Channel 13 sample time\n              selection",
    +                    "offset": 9,
    +                    "size": 3
    +                  },
    +                  "SMP14": {
    +                    "description": "Channel 14 sample time\n              selection",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "SMP15": {
    +                    "description": "Channel 15 sample time\n              selection",
    +                    "offset": 15,
    +                    "size": 3
    +                  },
    +                  "SMP16": {
    +                    "description": "Channel 16 sample time\n              selection",
    +                    "offset": 18,
    +                    "size": 3
    +                  },
    +                  "SMP17": {
    +                    "description": "Channel 17 sample time\n              selection",
    +                    "offset": 21,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "SMPR2": {
    +              "description": "sample time register 2",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SMP0": {
    +                    "description": "Channel 0 sample time\n              selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "SMP1": {
    +                    "description": "Channel 1 sample time\n              selection",
    +                    "offset": 3,
    +                    "size": 3
    +                  },
    +                  "SMP2": {
    +                    "description": "Channel 2 sample time\n              selection",
    +                    "offset": 6,
    +                    "size": 3
    +                  },
    +                  "SMP3": {
    +                    "description": "Channel 3 sample time\n              selection",
    +                    "offset": 9,
    +                    "size": 3
    +                  },
    +                  "SMP4": {
    +                    "description": "Channel 4 sample time\n              selection",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "SMP5": {
    +                    "description": "Channel 5 sample time\n              selection",
    +                    "offset": 15,
    +                    "size": 3
    +                  },
    +                  "SMP6": {
    +                    "description": "Channel 6 sample time\n              selection",
    +                    "offset": 18,
    +                    "size": 3
    +                  },
    +                  "SMP7": {
    +                    "description": "Channel 7 sample time\n              selection",
    +                    "offset": 21,
    +                    "size": 3
    +                  },
    +                  "SMP8": {
    +                    "description": "Channel 8 sample time\n              selection",
    +                    "offset": 24,
    +                    "size": 3
    +                  },
    +                  "SMP9": {
    +                    "description": "Channel 9 sample time\n              selection",
    +                    "offset": 27,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "JOFR1": {
    +              "description": "injected channel data offset register\n          x",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "JOFFSET1": {
    +                    "description": "Data offset for injected channel\n              x",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "JOFR2": {
    +              "description": "injected channel data offset register\n          x",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "JOFFSET2": {
    +                    "description": "Data offset for injected channel\n              x",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "JOFR3": {
    +              "description": "injected channel data offset register\n          x",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "JOFFSET3": {
    +                    "description": "Data offset for injected channel\n              x",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "JOFR4": {
    +              "description": "injected channel data offset register\n          x",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "JOFFSET4": {
    +                    "description": "Data offset for injected channel\n              x",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "HTR": {
    +              "description": "watchdog higher threshold\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 4095,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HT": {
    +                    "description": "Analog watchdog higher\n              threshold",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "LTR": {
    +              "description": "watchdog lower threshold\n          register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LT": {
    +                    "description": "Analog watchdog lower\n              threshold",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "SQR1": {
    +              "description": "regular sequence register 1",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "L": {
    +                    "description": "Regular channel sequence\n              length",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "SQ16": {
    +                    "description": "16th conversion in regular\n              sequence",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "SQ15": {
    +                    "description": "15th conversion in regular\n              sequence",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "SQ14": {
    +                    "description": "14th conversion in regular\n              sequence",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "SQ13": {
    +                    "description": "13th conversion in regular\n              sequence",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "SQR2": {
    +              "description": "regular sequence register 2",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SQ12": {
    +                    "description": "12th conversion in regular\n              sequence",
    +                    "offset": 25,
    +                    "size": 5
    +                  },
    +                  "SQ11": {
    +                    "description": "11th conversion in regular\n              sequence",
    +                    "offset": 20,
    +                    "size": 5
    +                  },
    +                  "SQ10": {
    +                    "description": "10th conversion in regular\n              sequence",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "SQ9": {
    +                    "description": "9th conversion in regular\n              sequence",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "SQ8": {
    +                    "description": "8th conversion in regular\n              sequence",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "SQ7": {
    +                    "description": "7th conversion in regular\n              sequence",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "SQR3": {
    +              "description": "regular sequence register 3",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SQ6": {
    +                    "description": "6th conversion in regular\n              sequence",
    +                    "offset": 25,
    +                    "size": 5
    +                  },
    +                  "SQ5": {
    +                    "description": "5th conversion in regular\n              sequence",
    +                    "offset": 20,
    +                    "size": 5
    +                  },
    +                  "SQ4": {
    +                    "description": "4th conversion in regular\n              sequence",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "SQ3": {
    +                    "description": "3rd conversion in regular\n              sequence",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "SQ2": {
    +                    "description": "2nd conversion in regular\n              sequence",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "SQ1": {
    +                    "description": "1st conversion in regular\n              sequence",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "JSQR": {
    +              "description": "injected sequence register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "JL": {
    +                    "description": "Injected sequence length",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "JSQ4": {
    +                    "description": "4th conversion in injected\n              sequence",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "JSQ3": {
    +                    "description": "3rd conversion in injected\n              sequence",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "JSQ2": {
    +                    "description": "2nd conversion in injected\n              sequence",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "JSQ1": {
    +                    "description": "1st conversion in injected\n              sequence",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "JDR1": {
    +              "description": "injected data register x",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "JDATA": {
    +                    "description": "Injected data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "JDR2": {
    +              "description": "injected data register x",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "JDATA": {
    +                    "description": "Injected data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "JDR3": {
    +              "description": "injected data register x",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "JDATA": {
    +                    "description": "Injected data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "JDR4": {
    +              "description": "injected data register x",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "JDATA": {
    +                    "description": "Injected data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "regular data register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Regular data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "CAN1": {
    +        "description": "Controller area network",
    +        "children": {
    +          "registers": {
    +            "CAN_MCR": {
    +              "description": "CAN_MCR",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBF": {
    +                    "description": "DBF",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "RESET",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TTCM": {
    +                    "description": "TTCM",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ABOM": {
    +                    "description": "ABOM",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "AWUM": {
    +                    "description": "AWUM",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NART": {
    +                    "description": "NART",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RFLM": {
    +                    "description": "RFLM",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TXFP": {
    +                    "description": "TXFP",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SLEEP": {
    +                    "description": "SLEEP",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "INRQ": {
    +                    "description": "INRQ",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_MSR": {
    +              "description": "CAN_MSR",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX": {
    +                    "description": "RX",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SAMP": {
    +                    "description": "SAMP",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXM": {
    +                    "description": "RXM",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXM": {
    +                    "description": "TXM",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SLAKI": {
    +                    "description": "SLAKI",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "WKUI": {
    +                    "description": "WKUI",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ERRI": {
    +                    "description": "ERRI",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SLAK": {
    +                    "description": "SLAK",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INAK": {
    +                    "description": "INAK",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_TSR": {
    +              "description": "CAN_TSR",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LOW2": {
    +                    "description": "Lowest priority flag for mailbox\n              2",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LOW1": {
    +                    "description": "Lowest priority flag for mailbox\n              1",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LOW0": {
    +                    "description": "Lowest priority flag for mailbox\n              0",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TME2": {
    +                    "description": "Lowest priority flag for mailbox\n              2",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TME1": {
    +                    "description": "Lowest priority flag for mailbox\n              1",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TME0": {
    +                    "description": "Lowest priority flag for mailbox\n              0",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CODE": {
    +                    "description": "CODE",
    +                    "offset": 24,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "ABRQ2": {
    +                    "description": "ABRQ2",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "TERR2": {
    +                    "description": "TERR2",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "ALST2": {
    +                    "description": "ALST2",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TXOK2": {
    +                    "description": "TXOK2",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "RQCP2": {
    +                    "description": "RQCP2",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "ABRQ1": {
    +                    "description": "ABRQ1",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TERR1": {
    +                    "description": "TERR1",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ALST1": {
    +                    "description": "ALST1",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TXOK1": {
    +                    "description": "TXOK1",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RQCP1": {
    +                    "description": "RQCP1",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ABRQ0": {
    +                    "description": "ABRQ0",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TERR0": {
    +                    "description": "TERR0",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ALST0": {
    +                    "description": "ALST0",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TXOK0": {
    +                    "description": "TXOK0",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RQCP0": {
    +                    "description": "RQCP0",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_RF0R": {
    +              "description": "CAN_RF0R",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RFOM0": {
    +                    "description": "RFOM0",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FOVR0": {
    +                    "description": "FOVR0",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FULL0": {
    +                    "description": "FULL0",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FMP0": {
    +                    "description": "FMP0",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_RF1R": {
    +              "description": "CAN_RF1R",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RFOM1": {
    +                    "description": "RFOM1",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FOVR1": {
    +                    "description": "FOVR1",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FULL1": {
    +                    "description": "FULL1",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FMP1": {
    +                    "description": "FMP1",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_IER": {
    +              "description": "CAN_IER",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SLKIE": {
    +                    "description": "SLKIE",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "WKUIE": {
    +                    "description": "WKUIE",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "ERRIE",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LECIE": {
    +                    "description": "LECIE",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BOFIE": {
    +                    "description": "BOFIE",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EPVIE": {
    +                    "description": "EPVIE",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EWGIE": {
    +                    "description": "EWGIE",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FOVIE1": {
    +                    "description": "FOVIE1",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FFIE1": {
    +                    "description": "FFIE1",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FMPIE1": {
    +                    "description": "FMPIE1",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FOVIE0": {
    +                    "description": "FOVIE0",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FFIE0": {
    +                    "description": "FFIE0",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FMPIE0": {
    +                    "description": "FMPIE0",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TMEIE": {
    +                    "description": "TMEIE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_ESR": {
    +              "description": "CAN_ESR",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REC": {
    +                    "description": "REC",
    +                    "offset": 24,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "TEC": {
    +                    "description": "TEC",
    +                    "offset": 16,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "LEC": {
    +                    "description": "LEC",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "BOFF": {
    +                    "description": "BOFF",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPVF": {
    +                    "description": "EPVF",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EWGF": {
    +                    "description": "EWGF",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_BTR": {
    +              "description": "CAN_BTR",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SILM": {
    +                    "description": "SILM",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LBKM": {
    +                    "description": "LBKM",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SJW": {
    +                    "description": "SJW",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "TS2": {
    +                    "description": "TS2",
    +                    "offset": 20,
    +                    "size": 3
    +                  },
    +                  "TS1": {
    +                    "description": "TS1",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "BRP": {
    +                    "description": "BRP",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_TI0R": {
    +              "description": "CAN_TI0R",
    +              "offset": 384,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STID": {
    +                    "description": "STID",
    +                    "offset": 21,
    +                    "size": 11
    +                  },
    +                  "EXID": {
    +                    "description": "EXID",
    +                    "offset": 3,
    +                    "size": 18
    +                  },
    +                  "IDE": {
    +                    "description": "IDE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTR": {
    +                    "description": "RTR",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TXRQ": {
    +                    "description": "TXRQ",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_TDT0R": {
    +              "description": "CAN_TDT0R",
    +              "offset": 388,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIME": {
    +                    "description": "TIME",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "TGT": {
    +                    "description": "TGT",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DLC": {
    +                    "description": "DLC",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_TDL0R": {
    +              "description": "CAN_TDL0R",
    +              "offset": 392,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA3": {
    +                    "description": "DATA3",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA2": {
    +                    "description": "DATA2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA1": {
    +                    "description": "DATA1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA0": {
    +                    "description": "DATA0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_TDH0R": {
    +              "description": "CAN_TDH0R",
    +              "offset": 396,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA7": {
    +                    "description": "DATA7",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA6": {
    +                    "description": "DATA6",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA5": {
    +                    "description": "DATA5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA4": {
    +                    "description": "DATA4",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_TI1R": {
    +              "description": "CAN_TI1R",
    +              "offset": 400,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STID": {
    +                    "description": "STID",
    +                    "offset": 21,
    +                    "size": 11
    +                  },
    +                  "EXID": {
    +                    "description": "EXID",
    +                    "offset": 3,
    +                    "size": 18
    +                  },
    +                  "IDE": {
    +                    "description": "IDE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTR": {
    +                    "description": "RTR",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TXRQ": {
    +                    "description": "TXRQ",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_TDT1R": {
    +              "description": "CAN_TDT1R",
    +              "offset": 404,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIME": {
    +                    "description": "TIME",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "TGT": {
    +                    "description": "TGT",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DLC": {
    +                    "description": "DLC",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_TDL1R": {
    +              "description": "CAN_TDL1R",
    +              "offset": 408,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA3": {
    +                    "description": "DATA3",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA2": {
    +                    "description": "DATA2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA1": {
    +                    "description": "DATA1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA0": {
    +                    "description": "DATA0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_TDH1R": {
    +              "description": "CAN_TDH1R",
    +              "offset": 412,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA7": {
    +                    "description": "DATA7",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA6": {
    +                    "description": "DATA6",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA5": {
    +                    "description": "DATA5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA4": {
    +                    "description": "DATA4",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_TI2R": {
    +              "description": "CAN_TI2R",
    +              "offset": 416,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STID": {
    +                    "description": "STID",
    +                    "offset": 21,
    +                    "size": 11
    +                  },
    +                  "EXID": {
    +                    "description": "EXID",
    +                    "offset": 3,
    +                    "size": 18
    +                  },
    +                  "IDE": {
    +                    "description": "IDE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTR": {
    +                    "description": "RTR",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TXRQ": {
    +                    "description": "TXRQ",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_TDT2R": {
    +              "description": "CAN_TDT2R",
    +              "offset": 420,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIME": {
    +                    "description": "TIME",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "TGT": {
    +                    "description": "TGT",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DLC": {
    +                    "description": "DLC",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_TDL2R": {
    +              "description": "CAN_TDL2R",
    +              "offset": 424,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA3": {
    +                    "description": "DATA3",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA2": {
    +                    "description": "DATA2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA1": {
    +                    "description": "DATA1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA0": {
    +                    "description": "DATA0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_TDH2R": {
    +              "description": "CAN_TDH2R",
    +              "offset": 428,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA7": {
    +                    "description": "DATA7",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA6": {
    +                    "description": "DATA6",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA5": {
    +                    "description": "DATA5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA4": {
    +                    "description": "DATA4",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_RI0R": {
    +              "description": "CAN_RI0R",
    +              "offset": 432,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "STID": {
    +                    "description": "STID",
    +                    "offset": 21,
    +                    "size": 11
    +                  },
    +                  "EXID": {
    +                    "description": "EXID",
    +                    "offset": 3,
    +                    "size": 18
    +                  },
    +                  "IDE": {
    +                    "description": "IDE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTR": {
    +                    "description": "RTR",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_RDT0R": {
    +              "description": "CAN_RDT0R",
    +              "offset": 436,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TIME": {
    +                    "description": "TIME",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "FMI": {
    +                    "description": "FMI",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DLC": {
    +                    "description": "DLC",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_RDL0R": {
    +              "description": "CAN_RDL0R",
    +              "offset": 440,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DATA3": {
    +                    "description": "DATA3",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA2": {
    +                    "description": "DATA2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA1": {
    +                    "description": "DATA1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA0": {
    +                    "description": "DATA0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_RDH0R": {
    +              "description": "CAN_RDH0R",
    +              "offset": 444,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DATA7": {
    +                    "description": "DATA7",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA6": {
    +                    "description": "DATA6",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA5": {
    +                    "description": "DATA5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA4": {
    +                    "description": "DATA4",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_RI1R": {
    +              "description": "CAN_RI1R",
    +              "offset": 448,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "STID": {
    +                    "description": "STID",
    +                    "offset": 21,
    +                    "size": 11
    +                  },
    +                  "EXID": {
    +                    "description": "EXID",
    +                    "offset": 3,
    +                    "size": 18
    +                  },
    +                  "IDE": {
    +                    "description": "IDE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTR": {
    +                    "description": "RTR",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_RDT1R": {
    +              "description": "CAN_RDT1R",
    +              "offset": 452,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TIME": {
    +                    "description": "TIME",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "FMI": {
    +                    "description": "FMI",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DLC": {
    +                    "description": "DLC",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_RDL1R": {
    +              "description": "CAN_RDL1R",
    +              "offset": 456,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DATA3": {
    +                    "description": "DATA3",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA2": {
    +                    "description": "DATA2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA1": {
    +                    "description": "DATA1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA0": {
    +                    "description": "DATA0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_RDH1R": {
    +              "description": "CAN_RDH1R",
    +              "offset": 460,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DATA7": {
    +                    "description": "DATA7",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA6": {
    +                    "description": "DATA6",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA5": {
    +                    "description": "DATA5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA4": {
    +                    "description": "DATA4",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_FMR": {
    +              "description": "CAN_FMR",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FINIT": {
    +                    "description": "FINIT",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_FM1R": {
    +              "description": "CAN_FM1R",
    +              "offset": 516,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FBM0": {
    +                    "description": "Filter mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FBM1": {
    +                    "description": "Filter mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FBM2": {
    +                    "description": "Filter mode",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FBM3": {
    +                    "description": "Filter mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FBM4": {
    +                    "description": "Filter mode",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FBM5": {
    +                    "description": "Filter mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FBM6": {
    +                    "description": "Filter mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FBM7": {
    +                    "description": "Filter mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FBM8": {
    +                    "description": "Filter mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FBM9": {
    +                    "description": "Filter mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FBM10": {
    +                    "description": "Filter mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FBM11": {
    +                    "description": "Filter mode",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FBM12": {
    +                    "description": "Filter mode",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FBM13": {
    +                    "description": "Filter mode",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_FS1R": {
    +              "description": "CAN_FS1R",
    +              "offset": 524,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FSC0": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FSC1": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FSC2": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FSC3": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FSC4": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FSC5": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FSC6": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FSC7": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FSC8": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FSC9": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FSC10": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FSC11": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FSC12": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FSC13": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_FFA1R": {
    +              "description": "CAN_FFA1R",
    +              "offset": 532,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FFA0": {
    +                    "description": "Filter FIFO assignment for filter\n              0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FFA1": {
    +                    "description": "Filter FIFO assignment for filter\n              1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FFA2": {
    +                    "description": "Filter FIFO assignment for filter\n              2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FFA3": {
    +                    "description": "Filter FIFO assignment for filter\n              3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FFA4": {
    +                    "description": "Filter FIFO assignment for filter\n              4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FFA5": {
    +                    "description": "Filter FIFO assignment for filter\n              5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FFA6": {
    +                    "description": "Filter FIFO assignment for filter\n              6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FFA7": {
    +                    "description": "Filter FIFO assignment for filter\n              7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FFA8": {
    +                    "description": "Filter FIFO assignment for filter\n              8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FFA9": {
    +                    "description": "Filter FIFO assignment for filter\n              9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FFA10": {
    +                    "description": "Filter FIFO assignment for filter\n              10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FFA11": {
    +                    "description": "Filter FIFO assignment for filter\n              11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FFA12": {
    +                    "description": "Filter FIFO assignment for filter\n              12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FFA13": {
    +                    "description": "Filter FIFO assignment for filter\n              13",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_FA1R": {
    +              "description": "CAN_FA1R",
    +              "offset": 540,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FACT0": {
    +                    "description": "Filter active",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FACT1": {
    +                    "description": "Filter active",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FACT2": {
    +                    "description": "Filter active",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FACT3": {
    +                    "description": "Filter active",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FACT4": {
    +                    "description": "Filter active",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FACT5": {
    +                    "description": "Filter active",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FACT6": {
    +                    "description": "Filter active",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FACT7": {
    +                    "description": "Filter active",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FACT8": {
    +                    "description": "Filter active",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FACT9": {
    +                    "description": "Filter active",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FACT10": {
    +                    "description": "Filter active",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FACT11": {
    +                    "description": "Filter active",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FACT12": {
    +                    "description": "Filter active",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FACT13": {
    +                    "description": "Filter active",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F0R1": {
    +              "description": "Filter bank 0 register 1",
    +              "offset": 576,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F0R2": {
    +              "description": "Filter bank 0 register 2",
    +              "offset": 580,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F1R1": {
    +              "description": "Filter bank 1 register 1",
    +              "offset": 584,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F1R2": {
    +              "description": "Filter bank 1 register 2",
    +              "offset": 588,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F2R1": {
    +              "description": "Filter bank 2 register 1",
    +              "offset": 592,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F2R2": {
    +              "description": "Filter bank 2 register 2",
    +              "offset": 596,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F3R1": {
    +              "description": "Filter bank 3 register 1",
    +              "offset": 600,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F3R2": {
    +              "description": "Filter bank 3 register 2",
    +              "offset": 604,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F4R1": {
    +              "description": "Filter bank 4 register 1",
    +              "offset": 608,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F4R2": {
    +              "description": "Filter bank 4 register 2",
    +              "offset": 612,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F5R1": {
    +              "description": "Filter bank 5 register 1",
    +              "offset": 616,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F5R2": {
    +              "description": "Filter bank 5 register 2",
    +              "offset": 620,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F6R1": {
    +              "description": "Filter bank 6 register 1",
    +              "offset": 624,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F6R2": {
    +              "description": "Filter bank 6 register 2",
    +              "offset": 628,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F7R1": {
    +              "description": "Filter bank 7 register 1",
    +              "offset": 632,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F7R2": {
    +              "description": "Filter bank 7 register 2",
    +              "offset": 636,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F8R1": {
    +              "description": "Filter bank 8 register 1",
    +              "offset": 640,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F8R2": {
    +              "description": "Filter bank 8 register 2",
    +              "offset": 644,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F9R1": {
    +              "description": "Filter bank 9 register 1",
    +              "offset": 648,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F9R2": {
    +              "description": "Filter bank 9 register 2",
    +              "offset": 652,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F10R1": {
    +              "description": "Filter bank 10 register 1",
    +              "offset": 656,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F10R2": {
    +              "description": "Filter bank 10 register 2",
    +              "offset": 660,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F11R1": {
    +              "description": "Filter bank 11 register 1",
    +              "offset": 664,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F11R2": {
    +              "description": "Filter bank 11 register 2",
    +              "offset": 668,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F12R1": {
    +              "description": "Filter bank 4 register 1",
    +              "offset": 672,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F12R2": {
    +              "description": "Filter bank 12 register 2",
    +              "offset": 676,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F13R1": {
    +              "description": "Filter bank 13 register 1",
    +              "offset": 680,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F13R2": {
    +              "description": "Filter bank 13 register 2",
    +              "offset": 684,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      }
    +    }
    +  },
    +  "devices": {
    +    "STM32F103": {
    +      "arch": "cortex_m3",
    +      "description": "STM32F103",
    +      "properties": {
    +        "cpu.nvic_prio_bits": "4",
    +        "cpu.mpu": "false",
    +        "cpu.fpu": "false",
    +        "cpu.revision": "r1p1",
    +        "cpu.vendor_systick_config": "false",
    +        "cpu.endian": "little",
    +        "cpu.name": "CM3"
    +      },
    +      "children": {
    +        "interrupts": {
    +          "MemManageFault": {
    +            "index": -12
    +          },
    +          "BusFault": {
    +            "index": -11
    +          },
    +          "UsageFault": {
    +            "index": -10
    +          },
    +          "DebugMonitor": {
    +            "index": -4
    +          },
    +          "NMI": {
    +            "index": -14
    +          },
    +          "HardFault": {
    +            "index": -13
    +          },
    +          "SVCall": {
    +            "index": -5
    +          },
    +          "PendSV": {
    +            "index": -2
    +          },
    +          "SysTick": {
    +            "index": -1
    +          },
    +          "FSMC": {
    +            "index": 48,
    +            "description": "FSMC global interrupt"
    +          },
    +          "PVD": {
    +            "index": 1,
    +            "description": "PVD through EXTI line detection\n        interrupt"
    +          },
    +          "RCC": {
    +            "index": 5,
    +            "description": "RCC global interrupt"
    +          },
    +          "TAMPER": {
    +            "index": 2,
    +            "description": "Tamper interrupt"
    +          },
    +          "DMA1_Channel1": {
    +            "index": 11,
    +            "description": "DMA1 Channel1 global interrupt"
    +          },
    +          "DMA2_Channel1": {
    +            "index": 56,
    +            "description": "DMA2 Channel1 global interrupt"
    +          },
    +          "SDIO": {
    +            "index": 49,
    +            "description": "SDIO global interrupt"
    +          },
    +          "RTC": {
    +            "index": 3,
    +            "description": "RTC global interrupt"
    +          },
    +          "WWDG": {
    +            "index": 0,
    +            "description": "Window Watchdog interrupt"
    +          },
    +          "TIM1_BRK": {
    +            "index": 24,
    +            "description": "TIM1 Break interrupt"
    +          },
    +          "TIM8_BRK": {
    +            "index": 43,
    +            "description": "TIM8 Break interrupt"
    +          },
    +          "TIM2": {
    +            "index": 28,
    +            "description": "TIM2 global interrupt"
    +          },
    +          "TIM3": {
    +            "index": 29,
    +            "description": "TIM3 global interrupt"
    +          },
    +          "TIM4": {
    +            "index": 30,
    +            "description": "TIM4 global interrupt"
    +          },
    +          "TIM5": {
    +            "index": 50,
    +            "description": "TIM5 global interrupt"
    +          },
    +          "TIM1_UP": {
    +            "index": 25,
    +            "description": "TIM1 Update interrupt"
    +          },
    +          "TIM1_TRG_COM": {
    +            "index": 26,
    +            "description": "TIM1 Trigger and Commutation\n        interrupts"
    +          },
    +          "TIM6": {
    +            "index": 54,
    +            "description": "TIM6 global interrupt"
    +          },
    +          "TIM7": {
    +            "index": 55,
    +            "description": "TIM7 global interrupt"
    +          },
    +          "I2C1_EV": {
    +            "index": 31,
    +            "description": "I2C1 event interrupt"
    +          },
    +          "I2C2_EV": {
    +            "index": 33,
    +            "description": "I2C2 event interrupt"
    +          },
    +          "SPI1": {
    +            "index": 35,
    +            "description": "SPI1 global interrupt"
    +          },
    +          "SPI2": {
    +            "index": 36,
    +            "description": "SPI2 global interrupt"
    +          },
    +          "SPI3": {
    +            "index": 51,
    +            "description": "SPI3 global interrupt"
    +          },
    +          "USART1": {
    +            "index": 37,
    +            "description": "USART1 global interrupt"
    +          },
    +          "USART2": {
    +            "index": 38,
    +            "description": "USART2 global interrupt"
    +          },
    +          "USART3": {
    +            "index": 39,
    +            "description": "USART3 global interrupt"
    +          },
    +          "ADC1_2": {
    +            "index": 18,
    +            "description": "ADC1 and ADC2 global interrupt"
    +          },
    +          "ADC3": {
    +            "index": 47,
    +            "description": "ADC3 global interrupt"
    +          },
    +          "CAN_RX1": {
    +            "index": 21,
    +            "description": "CAN RX1 interrupt"
    +          },
    +          "UART4": {
    +            "index": 52,
    +            "description": "UART4 global interrupt"
    +          },
    +          "UART5": {
    +            "index": 53,
    +            "description": "UART5 global interrupt"
    +          },
    +          "FLASH": {
    +            "index": 4,
    +            "description": "Flash global interrupt"
    +          },
    +          "USB_HP_CAN_TX": {
    +            "index": 19,
    +            "description": "USB High Priority or CAN TX\n        interrupts"
    +          }
    +        },
    +        "peripheral_instances": {
    +          "FSMC": {
    +            "description": "Flexible static memory controller",
    +            "offset": 2684354560,
    +            "type": "types.peripherals.FSMC"
    +          },
    +          "PWR": {
    +            "description": "Power control",
    +            "offset": 1073770496,
    +            "type": "types.peripherals.PWR"
    +          },
    +          "RCC": {
    +            "description": "Reset and clock control",
    +            "offset": 1073876992,
    +            "type": "types.peripherals.RCC"
    +          },
    +          "GPIOA": {
    +            "description": "General purpose I/O",
    +            "offset": 1073809408,
    +            "type": "types.peripherals.GPIOA"
    +          },
    +          "GPIOB": {
    +            "offset": 1073810432,
    +            "type": "types.peripherals.GPIOA"
    +          },
    +          "GPIOC": {
    +            "offset": 1073811456,
    +            "type": "types.peripherals.GPIOA"
    +          },
    +          "GPIOD": {
    +            "offset": 1073812480,
    +            "type": "types.peripherals.GPIOA"
    +          },
    +          "GPIOE": {
    +            "offset": 1073813504,
    +            "type": "types.peripherals.GPIOA"
    +          },
    +          "GPIOF": {
    +            "offset": 1073814528,
    +            "type": "types.peripherals.GPIOA"
    +          },
    +          "GPIOG": {
    +            "offset": 1073815552,
    +            "type": "types.peripherals.GPIOA"
    +          },
    +          "AFIO": {
    +            "description": "Alternate function I/O",
    +            "offset": 1073807360,
    +            "type": "types.peripherals.AFIO"
    +          },
    +          "EXTI": {
    +            "description": "EXTI",
    +            "offset": 1073808384,
    +            "type": "types.peripherals.EXTI"
    +          },
    +          "DMA1": {
    +            "description": "DMA controller",
    +            "offset": 1073872896,
    +            "type": "types.peripherals.DMA1"
    +          },
    +          "DMA2": {
    +            "offset": 1073873920,
    +            "type": "types.peripherals.DMA1"
    +          },
    +          "SDIO": {
    +            "description": "Secure digital input/output\n      interface",
    +            "offset": 1073840128,
    +            "type": "types.peripherals.SDIO"
    +          },
    +          "RTC": {
    +            "description": "Real time clock",
    +            "offset": 1073752064,
    +            "type": "types.peripherals.RTC"
    +          },
    +          "BKP": {
    +            "description": "Backup registers",
    +            "offset": 1073769472,
    +            "type": "types.peripherals.BKP"
    +          },
    +          "IWDG": {
    +            "description": "Independent watchdog",
    +            "offset": 1073754112,
    +            "type": "types.peripherals.IWDG"
    +          },
    +          "WWDG": {
    +            "description": "Window watchdog",
    +            "offset": 1073753088,
    +            "type": "types.peripherals.WWDG"
    +          },
    +          "TIM1": {
    +            "description": "Advanced timer",
    +            "offset": 1073818624,
    +            "type": "types.peripherals.TIM1"
    +          },
    +          "TIM8": {
    +            "offset": 1073820672,
    +            "type": "types.peripherals.TIM1"
    +          },
    +          "TIM2": {
    +            "description": "General purpose timer",
    +            "offset": 1073741824,
    +            "type": "types.peripherals.TIM2"
    +          },
    +          "TIM3": {
    +            "offset": 1073742848,
    +            "type": "types.peripherals.TIM2"
    +          },
    +          "TIM4": {
    +            "offset": 1073743872,
    +            "type": "types.peripherals.TIM2"
    +          },
    +          "TIM5": {
    +            "offset": 1073744896,
    +            "type": "types.peripherals.TIM2"
    +          },
    +          "TIM9": {
    +            "description": "General purpose timer",
    +            "offset": 1073826816,
    +            "type": "types.peripherals.TIM9"
    +          },
    +          "TIM12": {
    +            "offset": 1073747968,
    +            "type": "types.peripherals.TIM9"
    +          },
    +          "TIM10": {
    +            "description": "General purpose timer",
    +            "offset": 1073827840,
    +            "type": "types.peripherals.TIM10"
    +          },
    +          "TIM11": {
    +            "offset": 1073828864,
    +            "type": "types.peripherals.TIM10"
    +          },
    +          "TIM13": {
    +            "offset": 1073748992,
    +            "type": "types.peripherals.TIM10"
    +          },
    +          "TIM14": {
    +            "offset": 1073750016,
    +            "type": "types.peripherals.TIM10"
    +          },
    +          "TIM6": {
    +            "description": "Basic timer",
    +            "offset": 1073745920,
    +            "type": "types.peripherals.TIM6"
    +          },
    +          "TIM7": {
    +            "offset": 1073746944,
    +            "type": "types.peripherals.TIM6"
    +          },
    +          "I2C1": {
    +            "description": "Inter integrated circuit",
    +            "offset": 1073763328,
    +            "type": "types.peripherals.I2C1"
    +          },
    +          "I2C2": {
    +            "offset": 1073764352,
    +            "type": "types.peripherals.I2C1"
    +          },
    +          "SPI1": {
    +            "description": "Serial peripheral interface",
    +            "offset": 1073819648,
    +            "type": "types.peripherals.SPI1"
    +          },
    +          "SPI2": {
    +            "offset": 1073756160,
    +            "type": "types.peripherals.SPI1"
    +          },
    +          "SPI3": {
    +            "offset": 1073757184,
    +            "type": "types.peripherals.SPI1"
    +          },
    +          "USART1": {
    +            "description": "Universal synchronous asynchronous receiver\n      transmitter",
    +            "offset": 1073821696,
    +            "type": "types.peripherals.USART1"
    +          },
    +          "USART2": {
    +            "offset": 1073759232,
    +            "type": "types.peripherals.USART1"
    +          },
    +          "USART3": {
    +            "offset": 1073760256,
    +            "type": "types.peripherals.USART1"
    +          },
    +          "ADC1": {
    +            "description": "Analog to digital converter",
    +            "offset": 1073816576,
    +            "type": "types.peripherals.ADC1"
    +          },
    +          "ADC2": {
    +            "description": "Analog to digital converter",
    +            "offset": 1073817600,
    +            "type": "types.peripherals.ADC2"
    +          },
    +          "ADC3": {
    +            "offset": 1073822720,
    +            "type": "types.peripherals.ADC2"
    +          },
    +          "CAN1": {
    +            "description": "Controller area network",
    +            "offset": 1073767424,
    +            "type": "types.peripherals.CAN1"
    +          },
    +          "CAN2": {
    +            "offset": 1073768448,
    +            "type": "types.peripherals.CAN1"
    +          },
    +          "DAC": {
    +            "description": "Digital to analog converter",
    +            "offset": 1073771520,
    +            "type": "types.peripherals.DAC"
    +          },
    +          "DBG": {
    +            "description": "Debug support",
    +            "offset": 3758366720,
    +            "type": "types.peripherals.DBG"
    +          },
    +          "UART4": {
    +            "description": "Universal asynchronous receiver\n      transmitter",
    +            "offset": 1073761280,
    +            "type": "types.peripherals.UART4"
    +          },
    +          "UART5": {
    +            "description": "Universal asynchronous receiver\n      transmitter",
    +            "offset": 1073762304,
    +            "type": "types.peripherals.UART5"
    +          },
    +          "CRC": {
    +            "description": "CRC calculation unit",
    +            "offset": 1073885184,
    +            "type": "types.peripherals.CRC"
    +          },
    +          "FLASH": {
    +            "description": "FLASH",
    +            "offset": 1073881088,
    +            "type": "types.peripherals.FLASH"
    +          },
    +          "USB": {
    +            "description": "Universal serial bus full-speed device\n      interface",
    +            "offset": 1073765376,
    +            "type": "types.peripherals.USB"
    +          },
    +          "OTG_FS_DEVICE": {
    +            "description": "USB on the go full speed",
    +            "offset": 1342179328,
    +            "type": "types.peripherals.OTG_FS_DEVICE"
    +          },
    +          "OTG_FS_GLOBAL": {
    +            "description": "USB on the go full speed",
    +            "offset": 1342177280,
    +            "type": "types.peripherals.OTG_FS_GLOBAL"
    +          },
    +          "OTG_FS_HOST": {
    +            "description": "USB on the go full speed",
    +            "offset": 1342178304,
    +            "type": "types.peripherals.OTG_FS_HOST"
    +          },
    +          "OTG_FS_PWRCLK": {
    +            "description": "USB on the go full speed",
    +            "offset": 1342180864,
    +            "type": "types.peripherals.OTG_FS_PWRCLK"
    +          },
    +          "ETHERNET_MMC": {
    +            "description": "Ethernet: MAC management counters",
    +            "offset": 1073905920,
    +            "type": "types.peripherals.ETHERNET_MMC"
    +          },
    +          "ETHERNET_MAC": {
    +            "description": "Ethernet: media access control",
    +            "offset": 1073905664,
    +            "type": "types.peripherals.ETHERNET_MAC"
    +          },
    +          "ETHERNET_PTP": {
    +            "description": "Ethernet: Precision time protocol",
    +            "offset": 1073907456,
    +            "type": "types.peripherals.ETHERNET_PTP"
    +          },
    +          "ETHERNET_DMA": {
    +            "description": "Ethernet: DMA controller operation",
    +            "offset": 1073909760,
    +            "type": "types.peripherals.ETHERNET_DMA"
    +          },
    +          "NVIC": {
    +            "description": "Nested Vectored Interrupt\n      Controller",
    +            "offset": 3758153984,
    +            "type": "types.peripherals.NVIC"
    +          },
    +          "MPU": {
    +            "description": "Memory protection unit",
    +            "offset": 3758157200,
    +            "type": "types.peripherals.MPU"
    +          },
    +          "SCB_ACTRL": {
    +            "description": "System control block ACTLR",
    +            "offset": 3758153736,
    +            "type": "types.peripherals.SCB_ACTRL"
    +          },
    +          "NVIC_STIR": {
    +            "description": "Nested vectored interrupt\n      controller",
    +            "offset": 3758157568,
    +            "type": "types.peripherals.NVIC_STIR"
    +          },
    +          "SCB": {
    +            "description": "System control block",
    +            "offset": 3758157056,
    +            "type": "types.peripherals.SCB"
    +          },
    +          "STK": {
    +            "description": "SysTick timer",
    +            "offset": 3758153744,
    +            "type": "types.peripherals.STK"
    +          }
    +        }
    +      }
    +    }
    +  }
    +}
    \ No newline at end of file
    diff --git a/src/chips/STM32F103.zig b/src/chips/STM32F103.zig
    new file mode 100644
    index 000000000..f29fded29
    --- /dev/null
    +++ b/src/chips/STM32F103.zig
    @@ -0,0 +1,10854 @@
    +const micro = @import("microzig");
    +const mmio = micro.mmio;
    +
    +pub const devices = struct {
    +    ///  STM32F103
    +    pub const STM32F103 = struct {
    +        pub const properties = struct {
    +            pub const @"cpu.nvic_prio_bits" = "4";
    +            pub const @"cpu.mpu" = "false";
    +            pub const @"cpu.fpu" = "false";
    +            pub const @"cpu.revision" = "r1p1";
    +            pub const @"cpu.vendor_systick_config" = "false";
    +            pub const @"cpu.endian" = "little";
    +            pub const @"cpu.name" = "CM3";
    +        };
    +
    +        pub const VectorTable = extern struct {
    +            const Handler = micro.interrupt.Handler;
    +            const unhandled = micro.interrupt.unhandled;
    +
    +            initial_stack_pointer: u32,
    +            Reset: Handler = unhandled,
    +            NMI: Handler = unhandled,
    +            HardFault: Handler = unhandled,
    +            MemManageFault: Handler = unhandled,
    +            BusFault: Handler = unhandled,
    +            UsageFault: Handler = unhandled,
    +            reserved5: [4]u32 = undefined,
    +            SVCall: Handler = unhandled,
    +            DebugMonitor: Handler = unhandled,
    +            reserved11: [1]u32 = undefined,
    +            PendSV: Handler = unhandled,
    +            SysTick: Handler = unhandled,
    +            ///  Window Watchdog interrupt
    +            WWDG: Handler = unhandled,
    +            ///  PVD through EXTI line detection interrupt
    +            PVD: Handler = unhandled,
    +            ///  Tamper interrupt
    +            TAMPER: Handler = unhandled,
    +            ///  RTC global interrupt
    +            RTC: Handler = unhandled,
    +            ///  Flash global interrupt
    +            FLASH: Handler = unhandled,
    +            ///  RCC global interrupt
    +            RCC: Handler = unhandled,
    +            reserved20: [5]u32 = undefined,
    +            ///  DMA1 Channel1 global interrupt
    +            DMA1_Channel1: Handler = unhandled,
    +            reserved26: [6]u32 = undefined,
    +            ///  ADC1 and ADC2 global interrupt
    +            ADC1_2: Handler = unhandled,
    +            ///  USB High Priority or CAN TX interrupts
    +            USB_HP_CAN_TX: Handler = unhandled,
    +            reserved34: [1]u32 = undefined,
    +            ///  CAN RX1 interrupt
    +            CAN_RX1: Handler = unhandled,
    +            reserved36: [2]u32 = undefined,
    +            ///  TIM1 Break interrupt
    +            TIM1_BRK: Handler = unhandled,
    +            ///  TIM1 Update interrupt
    +            TIM1_UP: Handler = unhandled,
    +            ///  TIM1 Trigger and Commutation interrupts
    +            TIM1_TRG_COM: Handler = unhandled,
    +            reserved41: [1]u32 = undefined,
    +            ///  TIM2 global interrupt
    +            TIM2: Handler = unhandled,
    +            ///  TIM3 global interrupt
    +            TIM3: Handler = unhandled,
    +            ///  TIM4 global interrupt
    +            TIM4: Handler = unhandled,
    +            ///  I2C1 event interrupt
    +            I2C1_EV: Handler = unhandled,
    +            reserved46: [1]u32 = undefined,
    +            ///  I2C2 event interrupt
    +            I2C2_EV: Handler = unhandled,
    +            reserved48: [1]u32 = undefined,
    +            ///  SPI1 global interrupt
    +            SPI1: Handler = unhandled,
    +            ///  SPI2 global interrupt
    +            SPI2: Handler = unhandled,
    +            ///  USART1 global interrupt
    +            USART1: Handler = unhandled,
    +            ///  USART2 global interrupt
    +            USART2: Handler = unhandled,
    +            ///  USART3 global interrupt
    +            USART3: Handler = unhandled,
    +            reserved54: [3]u32 = undefined,
    +            ///  TIM8 Break interrupt
    +            TIM8_BRK: Handler = unhandled,
    +            reserved58: [3]u32 = undefined,
    +            ///  ADC3 global interrupt
    +            ADC3: Handler = unhandled,
    +            ///  FSMC global interrupt
    +            FSMC: Handler = unhandled,
    +            ///  SDIO global interrupt
    +            SDIO: Handler = unhandled,
    +            ///  TIM5 global interrupt
    +            TIM5: Handler = unhandled,
    +            ///  SPI3 global interrupt
    +            SPI3: Handler = unhandled,
    +            ///  UART4 global interrupt
    +            UART4: Handler = unhandled,
    +            ///  UART5 global interrupt
    +            UART5: Handler = unhandled,
    +            ///  TIM6 global interrupt
    +            TIM6: Handler = unhandled,
    +            ///  TIM7 global interrupt
    +            TIM7: Handler = unhandled,
    +            ///  DMA2 Channel1 global interrupt
    +            DMA2_Channel1: Handler = unhandled,
    +        };
    +
    +        pub const peripherals = struct {
    +            ///  General purpose timer
    +            pub const TIM2 = @ptrCast(*volatile types.TIM2, 0x40000000);
    +            ///  General purpose timer
    +            pub const TIM3 = @ptrCast(*volatile types.TIM2, 0x40000400);
    +            ///  General purpose timer
    +            pub const TIM4 = @ptrCast(*volatile types.TIM2, 0x40000800);
    +            ///  General purpose timer
    +            pub const TIM5 = @ptrCast(*volatile types.TIM2, 0x40000c00);
    +            ///  Basic timer
    +            pub const TIM6 = @ptrCast(*volatile types.TIM6, 0x40001000);
    +            ///  Basic timer
    +            pub const TIM7 = @ptrCast(*volatile types.TIM6, 0x40001400);
    +            ///  General purpose timer
    +            pub const TIM12 = @ptrCast(*volatile types.TIM9, 0x40001800);
    +            ///  General purpose timer
    +            pub const TIM13 = @ptrCast(*volatile types.TIM10, 0x40001c00);
    +            ///  General purpose timer
    +            pub const TIM14 = @ptrCast(*volatile types.TIM10, 0x40002000);
    +            ///  Real time clock
    +            pub const RTC = @ptrCast(*volatile types.RTC, 0x40002800);
    +            ///  Window watchdog
    +            pub const WWDG = @ptrCast(*volatile types.WWDG, 0x40002c00);
    +            ///  Independent watchdog
    +            pub const IWDG = @ptrCast(*volatile types.IWDG, 0x40003000);
    +            ///  Serial peripheral interface
    +            pub const SPI2 = @ptrCast(*volatile types.SPI1, 0x40003800);
    +            ///  Serial peripheral interface
    +            pub const SPI3 = @ptrCast(*volatile types.SPI1, 0x40003c00);
    +            ///  Universal synchronous asynchronous receiver transmitter
    +            pub const USART2 = @ptrCast(*volatile types.USART1, 0x40004400);
    +            ///  Universal synchronous asynchronous receiver transmitter
    +            pub const USART3 = @ptrCast(*volatile types.USART1, 0x40004800);
    +            ///  Universal asynchronous receiver transmitter
    +            pub const UART4 = @ptrCast(*volatile types.UART4, 0x40004c00);
    +            ///  Universal asynchronous receiver transmitter
    +            pub const UART5 = @ptrCast(*volatile types.UART5, 0x40005000);
    +            ///  Inter integrated circuit
    +            pub const I2C1 = @ptrCast(*volatile types.I2C1, 0x40005400);
    +            ///  Inter integrated circuit
    +            pub const I2C2 = @ptrCast(*volatile types.I2C1, 0x40005800);
    +            ///  Universal serial bus full-speed device interface
    +            pub const USB = @ptrCast(*volatile types.USB, 0x40005c00);
    +            ///  Controller area network
    +            pub const CAN1 = @ptrCast(*volatile types.CAN1, 0x40006400);
    +            ///  Controller area network
    +            pub const CAN2 = @ptrCast(*volatile types.CAN1, 0x40006800);
    +            ///  Backup registers
    +            pub const BKP = @ptrCast(*volatile types.BKP, 0x40006c00);
    +            ///  Power control
    +            pub const PWR = @ptrCast(*volatile types.PWR, 0x40007000);
    +            ///  Digital to analog converter
    +            pub const DAC = @ptrCast(*volatile types.DAC, 0x40007400);
    +            ///  Alternate function I/O
    +            pub const AFIO = @ptrCast(*volatile types.AFIO, 0x40010000);
    +            ///  EXTI
    +            pub const EXTI = @ptrCast(*volatile types.EXTI, 0x40010400);
    +            ///  General purpose I/O
    +            pub const GPIOA = @ptrCast(*volatile types.GPIOA, 0x40010800);
    +            ///  General purpose I/O
    +            pub const GPIOB = @ptrCast(*volatile types.GPIOA, 0x40010c00);
    +            ///  General purpose I/O
    +            pub const GPIOC = @ptrCast(*volatile types.GPIOA, 0x40011000);
    +            ///  General purpose I/O
    +            pub const GPIOD = @ptrCast(*volatile types.GPIOA, 0x40011400);
    +            ///  General purpose I/O
    +            pub const GPIOE = @ptrCast(*volatile types.GPIOA, 0x40011800);
    +            ///  General purpose I/O
    +            pub const GPIOF = @ptrCast(*volatile types.GPIOA, 0x40011c00);
    +            ///  General purpose I/O
    +            pub const GPIOG = @ptrCast(*volatile types.GPIOA, 0x40012000);
    +            ///  Analog to digital converter
    +            pub const ADC1 = @ptrCast(*volatile types.ADC1, 0x40012400);
    +            ///  Analog to digital converter
    +            pub const ADC2 = @ptrCast(*volatile types.ADC2, 0x40012800);
    +            ///  Advanced timer
    +            pub const TIM1 = @ptrCast(*volatile types.TIM1, 0x40012c00);
    +            ///  Serial peripheral interface
    +            pub const SPI1 = @ptrCast(*volatile types.SPI1, 0x40013000);
    +            ///  Advanced timer
    +            pub const TIM8 = @ptrCast(*volatile types.TIM1, 0x40013400);
    +            ///  Universal synchronous asynchronous receiver transmitter
    +            pub const USART1 = @ptrCast(*volatile types.USART1, 0x40013800);
    +            ///  Analog to digital converter
    +            pub const ADC3 = @ptrCast(*volatile types.ADC2, 0x40013c00);
    +            ///  General purpose timer
    +            pub const TIM9 = @ptrCast(*volatile types.TIM9, 0x40014c00);
    +            ///  General purpose timer
    +            pub const TIM10 = @ptrCast(*volatile types.TIM10, 0x40015000);
    +            ///  General purpose timer
    +            pub const TIM11 = @ptrCast(*volatile types.TIM10, 0x40015400);
    +            ///  Secure digital input/output interface
    +            pub const SDIO = @ptrCast(*volatile types.SDIO, 0x40018000);
    +            ///  DMA controller
    +            pub const DMA1 = @ptrCast(*volatile types.DMA1, 0x40020000);
    +            ///  DMA controller
    +            pub const DMA2 = @ptrCast(*volatile types.DMA1, 0x40020400);
    +            ///  Reset and clock control
    +            pub const RCC = @ptrCast(*volatile types.RCC, 0x40021000);
    +            ///  FLASH
    +            pub const FLASH = @ptrCast(*volatile types.FLASH, 0x40022000);
    +            ///  CRC calculation unit
    +            pub const CRC = @ptrCast(*volatile types.CRC, 0x40023000);
    +            ///  Ethernet: media access control
    +            pub const ETHERNET_MAC = @ptrCast(*volatile types.ETHERNET_MAC, 0x40028000);
    +            ///  Ethernet: MAC management counters
    +            pub const ETHERNET_MMC = @ptrCast(*volatile types.ETHERNET_MMC, 0x40028100);
    +            ///  Ethernet: Precision time protocol
    +            pub const ETHERNET_PTP = @ptrCast(*volatile types.ETHERNET_PTP, 0x40028700);
    +            ///  Ethernet: DMA controller operation
    +            pub const ETHERNET_DMA = @ptrCast(*volatile types.ETHERNET_DMA, 0x40029000);
    +            ///  USB on the go full speed
    +            pub const OTG_FS_GLOBAL = @ptrCast(*volatile types.OTG_FS_GLOBAL, 0x50000000);
    +            ///  USB on the go full speed
    +            pub const OTG_FS_HOST = @ptrCast(*volatile types.OTG_FS_HOST, 0x50000400);
    +            ///  USB on the go full speed
    +            pub const OTG_FS_DEVICE = @ptrCast(*volatile types.OTG_FS_DEVICE, 0x50000800);
    +            ///  USB on the go full speed
    +            pub const OTG_FS_PWRCLK = @ptrCast(*volatile types.OTG_FS_PWRCLK, 0x50000e00);
    +            ///  Flexible static memory controller
    +            pub const FSMC = @ptrCast(*volatile types.FSMC, 0xa0000000);
    +            ///  System control block ACTLR
    +            pub const SCB_ACTRL = @ptrCast(*volatile types.SCB_ACTRL, 0xe000e008);
    +            ///  SysTick timer
    +            pub const STK = @ptrCast(*volatile types.STK, 0xe000e010);
    +            ///  Nested Vectored Interrupt Controller
    +            pub const NVIC = @ptrCast(*volatile types.NVIC, 0xe000e100);
    +            ///  System control block
    +            pub const SCB = @ptrCast(*volatile types.SCB, 0xe000ed00);
    +            ///  Memory protection unit
    +            pub const MPU = @ptrCast(*volatile types.MPU, 0xe000ed90);
    +            ///  Nested vectored interrupt controller
    +            pub const NVIC_STIR = @ptrCast(*volatile types.NVIC_STIR, 0xe000ef00);
    +            ///  Debug support
    +            pub const DBG = @ptrCast(*volatile types.DBG, 0xe0042000);
    +        };
    +    };
    +};
    +
    +pub const types = struct {
    +    ///  Flexible static memory controller
    +    pub const FSMC = extern struct {
    +        ///  SRAM/NOR-Flash chip-select control register 1
    +        BCR1: mmio.Mmio(packed struct(u32) {
    +            ///  MBKEN
    +            MBKEN: u1,
    +            ///  MUXEN
    +            MUXEN: u1,
    +            ///  MTYP
    +            MTYP: u2,
    +            ///  MWID
    +            MWID: u2,
    +            ///  FACCEN
    +            FACCEN: u1,
    +            reserved8: u1,
    +            ///  BURSTEN
    +            BURSTEN: u1,
    +            ///  WAITPOL
    +            WAITPOL: u1,
    +            reserved11: u1,
    +            ///  WAITCFG
    +            WAITCFG: u1,
    +            ///  WREN
    +            WREN: u1,
    +            ///  WAITEN
    +            WAITEN: u1,
    +            ///  EXTMOD
    +            EXTMOD: u1,
    +            ///  ASYNCWAIT
    +            ASYNCWAIT: u1,
    +            reserved19: u3,
    +            ///  CBURSTRW
    +            CBURSTRW: u1,
    +            padding: u12,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select timing register 1
    +        BTR1: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            ///  BUSTURN
    +            BUSTURN: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select control register 2
    +        BCR2: mmio.Mmio(packed struct(u32) {
    +            ///  MBKEN
    +            MBKEN: u1,
    +            ///  MUXEN
    +            MUXEN: u1,
    +            ///  MTYP
    +            MTYP: u2,
    +            ///  MWID
    +            MWID: u2,
    +            ///  FACCEN
    +            FACCEN: u1,
    +            reserved8: u1,
    +            ///  BURSTEN
    +            BURSTEN: u1,
    +            ///  WAITPOL
    +            WAITPOL: u1,
    +            ///  WRAPMOD
    +            WRAPMOD: u1,
    +            ///  WAITCFG
    +            WAITCFG: u1,
    +            ///  WREN
    +            WREN: u1,
    +            ///  WAITEN
    +            WAITEN: u1,
    +            ///  EXTMOD
    +            EXTMOD: u1,
    +            ///  ASYNCWAIT
    +            ASYNCWAIT: u1,
    +            reserved19: u3,
    +            ///  CBURSTRW
    +            CBURSTRW: u1,
    +            padding: u12,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select timing register 2
    +        BTR2: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            ///  BUSTURN
    +            BUSTURN: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select control register 3
    +        BCR3: mmio.Mmio(packed struct(u32) {
    +            ///  MBKEN
    +            MBKEN: u1,
    +            ///  MUXEN
    +            MUXEN: u1,
    +            ///  MTYP
    +            MTYP: u2,
    +            ///  MWID
    +            MWID: u2,
    +            ///  FACCEN
    +            FACCEN: u1,
    +            reserved8: u1,
    +            ///  BURSTEN
    +            BURSTEN: u1,
    +            ///  WAITPOL
    +            WAITPOL: u1,
    +            ///  WRAPMOD
    +            WRAPMOD: u1,
    +            ///  WAITCFG
    +            WAITCFG: u1,
    +            ///  WREN
    +            WREN: u1,
    +            ///  WAITEN
    +            WAITEN: u1,
    +            ///  EXTMOD
    +            EXTMOD: u1,
    +            ///  ASYNCWAIT
    +            ASYNCWAIT: u1,
    +            reserved19: u3,
    +            ///  CBURSTRW
    +            CBURSTRW: u1,
    +            padding: u12,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select timing register 3
    +        BTR3: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            ///  BUSTURN
    +            BUSTURN: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select control register 4
    +        BCR4: mmio.Mmio(packed struct(u32) {
    +            ///  MBKEN
    +            MBKEN: u1,
    +            ///  MUXEN
    +            MUXEN: u1,
    +            ///  MTYP
    +            MTYP: u2,
    +            ///  MWID
    +            MWID: u2,
    +            ///  FACCEN
    +            FACCEN: u1,
    +            reserved8: u1,
    +            ///  BURSTEN
    +            BURSTEN: u1,
    +            ///  WAITPOL
    +            WAITPOL: u1,
    +            ///  WRAPMOD
    +            WRAPMOD: u1,
    +            ///  WAITCFG
    +            WAITCFG: u1,
    +            ///  WREN
    +            WREN: u1,
    +            ///  WAITEN
    +            WAITEN: u1,
    +            ///  EXTMOD
    +            EXTMOD: u1,
    +            ///  ASYNCWAIT
    +            ASYNCWAIT: u1,
    +            reserved19: u3,
    +            ///  CBURSTRW
    +            CBURSTRW: u1,
    +            padding: u12,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select timing register 4
    +        BTR4: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            ///  BUSTURN
    +            BUSTURN: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +        reserved96: [64]u8,
    +        ///  PC Card/NAND Flash control register 2
    +        PCR2: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  PWAITEN
    +            PWAITEN: u1,
    +            ///  PBKEN
    +            PBKEN: u1,
    +            ///  PTYP
    +            PTYP: u1,
    +            ///  PWID
    +            PWID: u2,
    +            ///  ECCEN
    +            ECCEN: u1,
    +            reserved9: u2,
    +            ///  TCLR
    +            TCLR: u4,
    +            ///  TAR
    +            TAR: u4,
    +            ///  ECCPS
    +            ECCPS: u3,
    +            padding: u12,
    +        }),
    +        ///  FIFO status and interrupt register 2
    +        SR2: mmio.Mmio(packed struct(u32) {
    +            ///  IRS
    +            IRS: u1,
    +            ///  ILS
    +            ILS: u1,
    +            ///  IFS
    +            IFS: u1,
    +            ///  IREN
    +            IREN: u1,
    +            ///  ILEN
    +            ILEN: u1,
    +            ///  IFEN
    +            IFEN: u1,
    +            ///  FEMPT
    +            FEMPT: u1,
    +            padding: u25,
    +        }),
    +        ///  Common memory space timing register 2
    +        PMEM2: mmio.Mmio(packed struct(u32) {
    +            ///  MEMSETx
    +            MEMSETx: u8,
    +            ///  MEMWAITx
    +            MEMWAITx: u8,
    +            ///  MEMHOLDx
    +            MEMHOLDx: u8,
    +            ///  MEMHIZx
    +            MEMHIZx: u8,
    +        }),
    +        ///  Attribute memory space timing register 2
    +        PATT2: mmio.Mmio(packed struct(u32) {
    +            ///  Attribute memory x setup time
    +            ATTSETx: u8,
    +            ///  Attribute memory x wait time
    +            ATTWAITx: u8,
    +            ///  Attribute memory x hold time
    +            ATTHOLDx: u8,
    +            ///  Attribute memory x databus HiZ time
    +            ATTHIZx: u8,
    +        }),
    +        reserved116: [4]u8,
    +        ///  ECC result register 2
    +        ECCR2: mmio.Mmio(packed struct(u32) {
    +            ///  ECC result
    +            ECCx: u32,
    +        }),
    +        reserved128: [8]u8,
    +        ///  PC Card/NAND Flash control register 3
    +        PCR3: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  PWAITEN
    +            PWAITEN: u1,
    +            ///  PBKEN
    +            PBKEN: u1,
    +            ///  PTYP
    +            PTYP: u1,
    +            ///  PWID
    +            PWID: u2,
    +            ///  ECCEN
    +            ECCEN: u1,
    +            reserved9: u2,
    +            ///  TCLR
    +            TCLR: u4,
    +            ///  TAR
    +            TAR: u4,
    +            ///  ECCPS
    +            ECCPS: u3,
    +            padding: u12,
    +        }),
    +        ///  FIFO status and interrupt register 3
    +        SR3: mmio.Mmio(packed struct(u32) {
    +            ///  IRS
    +            IRS: u1,
    +            ///  ILS
    +            ILS: u1,
    +            ///  IFS
    +            IFS: u1,
    +            ///  IREN
    +            IREN: u1,
    +            ///  ILEN
    +            ILEN: u1,
    +            ///  IFEN
    +            IFEN: u1,
    +            ///  FEMPT
    +            FEMPT: u1,
    +            padding: u25,
    +        }),
    +        ///  Common memory space timing register 3
    +        PMEM3: mmio.Mmio(packed struct(u32) {
    +            ///  MEMSETx
    +            MEMSETx: u8,
    +            ///  MEMWAITx
    +            MEMWAITx: u8,
    +            ///  MEMHOLDx
    +            MEMHOLDx: u8,
    +            ///  MEMHIZx
    +            MEMHIZx: u8,
    +        }),
    +        ///  Attribute memory space timing register 3
    +        PATT3: mmio.Mmio(packed struct(u32) {
    +            ///  ATTSETx
    +            ATTSETx: u8,
    +            ///  ATTWAITx
    +            ATTWAITx: u8,
    +            ///  ATTHOLDx
    +            ATTHOLDx: u8,
    +            ///  ATTHIZx
    +            ATTHIZx: u8,
    +        }),
    +        reserved148: [4]u8,
    +        ///  ECC result register 3
    +        ECCR3: mmio.Mmio(packed struct(u32) {
    +            ///  ECCx
    +            ECCx: u32,
    +        }),
    +        reserved160: [8]u8,
    +        ///  PC Card/NAND Flash control register 4
    +        PCR4: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  PWAITEN
    +            PWAITEN: u1,
    +            ///  PBKEN
    +            PBKEN: u1,
    +            ///  PTYP
    +            PTYP: u1,
    +            ///  PWID
    +            PWID: u2,
    +            ///  ECCEN
    +            ECCEN: u1,
    +            reserved9: u2,
    +            ///  TCLR
    +            TCLR: u4,
    +            ///  TAR
    +            TAR: u4,
    +            ///  ECCPS
    +            ECCPS: u3,
    +            padding: u12,
    +        }),
    +        ///  FIFO status and interrupt register 4
    +        SR4: mmio.Mmio(packed struct(u32) {
    +            ///  IRS
    +            IRS: u1,
    +            ///  ILS
    +            ILS: u1,
    +            ///  IFS
    +            IFS: u1,
    +            ///  IREN
    +            IREN: u1,
    +            ///  ILEN
    +            ILEN: u1,
    +            ///  IFEN
    +            IFEN: u1,
    +            ///  FEMPT
    +            FEMPT: u1,
    +            padding: u25,
    +        }),
    +        ///  Common memory space timing register 4
    +        PMEM4: mmio.Mmio(packed struct(u32) {
    +            ///  MEMSETx
    +            MEMSETx: u8,
    +            ///  MEMWAITx
    +            MEMWAITx: u8,
    +            ///  MEMHOLDx
    +            MEMHOLDx: u8,
    +            ///  MEMHIZx
    +            MEMHIZx: u8,
    +        }),
    +        ///  Attribute memory space timing register 4
    +        PATT4: mmio.Mmio(packed struct(u32) {
    +            ///  ATTSETx
    +            ATTSETx: u8,
    +            ///  ATTWAITx
    +            ATTWAITx: u8,
    +            ///  ATTHOLDx
    +            ATTHOLDx: u8,
    +            ///  ATTHIZx
    +            ATTHIZx: u8,
    +        }),
    +        ///  I/O space timing register 4
    +        PIO4: mmio.Mmio(packed struct(u32) {
    +            ///  IOSETx
    +            IOSETx: u8,
    +            ///  IOWAITx
    +            IOWAITx: u8,
    +            ///  IOHOLDx
    +            IOHOLDx: u8,
    +            ///  IOHIZx
    +            IOHIZx: u8,
    +        }),
    +        reserved260: [80]u8,
    +        ///  SRAM/NOR-Flash write timing registers 1
    +        BWTR1: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            reserved20: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +        reserved268: [4]u8,
    +        ///  SRAM/NOR-Flash write timing registers 2
    +        BWTR2: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            reserved20: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +        reserved276: [4]u8,
    +        ///  SRAM/NOR-Flash write timing registers 3
    +        BWTR3: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            reserved20: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +        reserved284: [4]u8,
    +        ///  SRAM/NOR-Flash write timing registers 4
    +        BWTR4: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            reserved20: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +    };
    +
    +    ///  Power control
    +    pub const PWR = extern struct {
    +        ///  Power control register (PWR_CR)
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  Low Power Deep Sleep
    +            LPDS: u1,
    +            ///  Power Down Deep Sleep
    +            PDDS: u1,
    +            ///  Clear Wake-up Flag
    +            CWUF: u1,
    +            ///  Clear STANDBY Flag
    +            CSBF: u1,
    +            ///  Power Voltage Detector Enable
    +            PVDE: u1,
    +            ///  PVD Level Selection
    +            PLS: u3,
    +            ///  Disable Backup Domain write protection
    +            DBP: u1,
    +            padding: u23,
    +        }),
    +        ///  Power control register (PWR_CR)
    +        CSR: mmio.Mmio(packed struct(u32) {
    +            ///  Wake-Up Flag
    +            WUF: u1,
    +            ///  STANDBY Flag
    +            SBF: u1,
    +            ///  PVD Output
    +            PVDO: u1,
    +            reserved8: u5,
    +            ///  Enable WKUP pin
    +            EWUP: u1,
    +            padding: u23,
    +        }),
    +    };
    +
    +    ///  Reset and clock control
    +    pub const RCC = extern struct {
    +        ///  Clock control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  Internal High Speed clock enable
    +            HSION: u1,
    +            ///  Internal High Speed clock ready flag
    +            HSIRDY: u1,
    +            reserved3: u1,
    +            ///  Internal High Speed clock trimming
    +            HSITRIM: u5,
    +            ///  Internal High Speed clock Calibration
    +            HSICAL: u8,
    +            ///  External High Speed clock enable
    +            HSEON: u1,
    +            ///  External High Speed clock ready flag
    +            HSERDY: u1,
    +            ///  External High Speed clock Bypass
    +            HSEBYP: u1,
    +            ///  Clock Security System enable
    +            CSSON: u1,
    +            reserved24: u4,
    +            ///  PLL enable
    +            PLLON: u1,
    +            ///  PLL clock ready flag
    +            PLLRDY: u1,
    +            padding: u6,
    +        }),
    +        ///  Clock configuration register (RCC_CFGR)
    +        CFGR: mmio.Mmio(packed struct(u32) {
    +            ///  System clock Switch
    +            SW: u2,
    +            ///  System Clock Switch Status
    +            SWS: u2,
    +            ///  AHB prescaler
    +            HPRE: u4,
    +            ///  APB Low speed prescaler (APB1)
    +            PPRE1: u3,
    +            ///  APB High speed prescaler (APB2)
    +            PPRE2: u3,
    +            ///  ADC prescaler
    +            ADCPRE: u2,
    +            ///  PLL entry clock source
    +            PLLSRC: u1,
    +            ///  HSE divider for PLL entry
    +            PLLXTPRE: u1,
    +            ///  PLL Multiplication Factor
    +            PLLMUL: u4,
    +            ///  USB OTG FS prescaler
    +            OTGFSPRE: u1,
    +            reserved24: u1,
    +            ///  Microcontroller clock output
    +            MCO: u3,
    +            padding: u5,
    +        }),
    +        ///  Clock interrupt register (RCC_CIR)
    +        CIR: mmio.Mmio(packed struct(u32) {
    +            ///  LSI Ready Interrupt flag
    +            LSIRDYF: u1,
    +            ///  LSE Ready Interrupt flag
    +            LSERDYF: u1,
    +            ///  HSI Ready Interrupt flag
    +            HSIRDYF: u1,
    +            ///  HSE Ready Interrupt flag
    +            HSERDYF: u1,
    +            ///  PLL Ready Interrupt flag
    +            PLLRDYF: u1,
    +            reserved7: u2,
    +            ///  Clock Security System Interrupt flag
    +            CSSF: u1,
    +            ///  LSI Ready Interrupt Enable
    +            LSIRDYIE: u1,
    +            ///  LSE Ready Interrupt Enable
    +            LSERDYIE: u1,
    +            ///  HSI Ready Interrupt Enable
    +            HSIRDYIE: u1,
    +            ///  HSE Ready Interrupt Enable
    +            HSERDYIE: u1,
    +            ///  PLL Ready Interrupt Enable
    +            PLLRDYIE: u1,
    +            reserved16: u3,
    +            ///  LSI Ready Interrupt Clear
    +            LSIRDYC: u1,
    +            ///  LSE Ready Interrupt Clear
    +            LSERDYC: u1,
    +            ///  HSI Ready Interrupt Clear
    +            HSIRDYC: u1,
    +            ///  HSE Ready Interrupt Clear
    +            HSERDYC: u1,
    +            ///  PLL Ready Interrupt Clear
    +            PLLRDYC: u1,
    +            reserved23: u2,
    +            ///  Clock security system interrupt clear
    +            CSSC: u1,
    +            padding: u8,
    +        }),
    +        ///  APB2 peripheral reset register (RCC_APB2RSTR)
    +        APB2RSTR: mmio.Mmio(packed struct(u32) {
    +            ///  Alternate function I/O reset
    +            AFIORST: u1,
    +            reserved2: u1,
    +            ///  IO port A reset
    +            IOPARST: u1,
    +            ///  IO port B reset
    +            IOPBRST: u1,
    +            ///  IO port C reset
    +            IOPCRST: u1,
    +            ///  IO port D reset
    +            IOPDRST: u1,
    +            ///  IO port E reset
    +            IOPERST: u1,
    +            ///  IO port F reset
    +            IOPFRST: u1,
    +            ///  IO port G reset
    +            IOPGRST: u1,
    +            ///  ADC 1 interface reset
    +            ADC1RST: u1,
    +            ///  ADC 2 interface reset
    +            ADC2RST: u1,
    +            ///  TIM1 timer reset
    +            TIM1RST: u1,
    +            ///  SPI 1 reset
    +            SPI1RST: u1,
    +            ///  TIM8 timer reset
    +            TIM8RST: u1,
    +            ///  USART1 reset
    +            USART1RST: u1,
    +            ///  ADC 3 interface reset
    +            ADC3RST: u1,
    +            reserved19: u3,
    +            ///  TIM9 timer reset
    +            TIM9RST: u1,
    +            ///  TIM10 timer reset
    +            TIM10RST: u1,
    +            ///  TIM11 timer reset
    +            TIM11RST: u1,
    +            padding: u10,
    +        }),
    +        ///  APB1 peripheral reset register (RCC_APB1RSTR)
    +        APB1RSTR: mmio.Mmio(packed struct(u32) {
    +            ///  Timer 2 reset
    +            TIM2RST: u1,
    +            ///  Timer 3 reset
    +            TIM3RST: u1,
    +            ///  Timer 4 reset
    +            TIM4RST: u1,
    +            ///  Timer 5 reset
    +            TIM5RST: u1,
    +            ///  Timer 6 reset
    +            TIM6RST: u1,
    +            ///  Timer 7 reset
    +            TIM7RST: u1,
    +            ///  Timer 12 reset
    +            TIM12RST: u1,
    +            ///  Timer 13 reset
    +            TIM13RST: u1,
    +            ///  Timer 14 reset
    +            TIM14RST: u1,
    +            reserved11: u2,
    +            ///  Window watchdog reset
    +            WWDGRST: u1,
    +            reserved14: u2,
    +            ///  SPI2 reset
    +            SPI2RST: u1,
    +            ///  SPI3 reset
    +            SPI3RST: u1,
    +            reserved17: u1,
    +            ///  USART 2 reset
    +            USART2RST: u1,
    +            ///  USART 3 reset
    +            USART3RST: u1,
    +            ///  UART 4 reset
    +            UART4RST: u1,
    +            ///  UART 5 reset
    +            UART5RST: u1,
    +            ///  I2C1 reset
    +            I2C1RST: u1,
    +            ///  I2C2 reset
    +            I2C2RST: u1,
    +            ///  USB reset
    +            USBRST: u1,
    +            reserved25: u1,
    +            ///  CAN reset
    +            CANRST: u1,
    +            reserved27: u1,
    +            ///  Backup interface reset
    +            BKPRST: u1,
    +            ///  Power interface reset
    +            PWRRST: u1,
    +            ///  DAC interface reset
    +            DACRST: u1,
    +            padding: u2,
    +        }),
    +        ///  AHB Peripheral Clock enable register (RCC_AHBENR)
    +        AHBENR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA1 clock enable
    +            DMA1EN: u1,
    +            ///  DMA2 clock enable
    +            DMA2EN: u1,
    +            ///  SRAM interface clock enable
    +            SRAMEN: u1,
    +            reserved4: u1,
    +            ///  FLITF clock enable
    +            FLITFEN: u1,
    +            reserved6: u1,
    +            ///  CRC clock enable
    +            CRCEN: u1,
    +            reserved8: u1,
    +            ///  FSMC clock enable
    +            FSMCEN: u1,
    +            reserved10: u1,
    +            ///  SDIO clock enable
    +            SDIOEN: u1,
    +            padding: u21,
    +        }),
    +        ///  APB2 peripheral clock enable register (RCC_APB2ENR)
    +        APB2ENR: mmio.Mmio(packed struct(u32) {
    +            ///  Alternate function I/O clock enable
    +            AFIOEN: u1,
    +            reserved2: u1,
    +            ///  I/O port A clock enable
    +            IOPAEN: u1,
    +            ///  I/O port B clock enable
    +            IOPBEN: u1,
    +            ///  I/O port C clock enable
    +            IOPCEN: u1,
    +            ///  I/O port D clock enable
    +            IOPDEN: u1,
    +            ///  I/O port E clock enable
    +            IOPEEN: u1,
    +            ///  I/O port F clock enable
    +            IOPFEN: u1,
    +            ///  I/O port G clock enable
    +            IOPGEN: u1,
    +            ///  ADC 1 interface clock enable
    +            ADC1EN: u1,
    +            ///  ADC 2 interface clock enable
    +            ADC2EN: u1,
    +            ///  TIM1 Timer clock enable
    +            TIM1EN: u1,
    +            ///  SPI 1 clock enable
    +            SPI1EN: u1,
    +            ///  TIM8 Timer clock enable
    +            TIM8EN: u1,
    +            ///  USART1 clock enable
    +            USART1EN: u1,
    +            ///  ADC3 interface clock enable
    +            ADC3EN: u1,
    +            reserved19: u3,
    +            ///  TIM9 Timer clock enable
    +            TIM9EN: u1,
    +            ///  TIM10 Timer clock enable
    +            TIM10EN: u1,
    +            ///  TIM11 Timer clock enable
    +            TIM11EN: u1,
    +            padding: u10,
    +        }),
    +        ///  APB1 peripheral clock enable register (RCC_APB1ENR)
    +        APB1ENR: mmio.Mmio(packed struct(u32) {
    +            ///  Timer 2 clock enable
    +            TIM2EN: u1,
    +            ///  Timer 3 clock enable
    +            TIM3EN: u1,
    +            ///  Timer 4 clock enable
    +            TIM4EN: u1,
    +            ///  Timer 5 clock enable
    +            TIM5EN: u1,
    +            ///  Timer 6 clock enable
    +            TIM6EN: u1,
    +            ///  Timer 7 clock enable
    +            TIM7EN: u1,
    +            ///  Timer 12 clock enable
    +            TIM12EN: u1,
    +            ///  Timer 13 clock enable
    +            TIM13EN: u1,
    +            ///  Timer 14 clock enable
    +            TIM14EN: u1,
    +            reserved11: u2,
    +            ///  Window watchdog clock enable
    +            WWDGEN: u1,
    +            reserved14: u2,
    +            ///  SPI 2 clock enable
    +            SPI2EN: u1,
    +            ///  SPI 3 clock enable
    +            SPI3EN: u1,
    +            reserved17: u1,
    +            ///  USART 2 clock enable
    +            USART2EN: u1,
    +            ///  USART 3 clock enable
    +            USART3EN: u1,
    +            ///  UART 4 clock enable
    +            UART4EN: u1,
    +            ///  UART 5 clock enable
    +            UART5EN: u1,
    +            ///  I2C 1 clock enable
    +            I2C1EN: u1,
    +            ///  I2C 2 clock enable
    +            I2C2EN: u1,
    +            ///  USB clock enable
    +            USBEN: u1,
    +            reserved25: u1,
    +            ///  CAN clock enable
    +            CANEN: u1,
    +            reserved27: u1,
    +            ///  Backup interface clock enable
    +            BKPEN: u1,
    +            ///  Power interface clock enable
    +            PWREN: u1,
    +            ///  DAC interface clock enable
    +            DACEN: u1,
    +            padding: u2,
    +        }),
    +        ///  Backup domain control register (RCC_BDCR)
    +        BDCR: mmio.Mmio(packed struct(u32) {
    +            ///  External Low Speed oscillator enable
    +            LSEON: u1,
    +            ///  External Low Speed oscillator ready
    +            LSERDY: u1,
    +            ///  External Low Speed oscillator bypass
    +            LSEBYP: u1,
    +            reserved8: u5,
    +            ///  RTC clock source selection
    +            RTCSEL: u2,
    +            reserved15: u5,
    +            ///  RTC clock enable
    +            RTCEN: u1,
    +            ///  Backup domain software reset
    +            BDRST: u1,
    +            padding: u15,
    +        }),
    +        ///  Control/status register (RCC_CSR)
    +        CSR: mmio.Mmio(packed struct(u32) {
    +            ///  Internal low speed oscillator enable
    +            LSION: u1,
    +            ///  Internal low speed oscillator ready
    +            LSIRDY: u1,
    +            reserved24: u22,
    +            ///  Remove reset flag
    +            RMVF: u1,
    +            reserved26: u1,
    +            ///  PIN reset flag
    +            PINRSTF: u1,
    +            ///  POR/PDR reset flag
    +            PORRSTF: u1,
    +            ///  Software reset flag
    +            SFTRSTF: u1,
    +            ///  Independent watchdog reset flag
    +            IWDGRSTF: u1,
    +            ///  Window watchdog reset flag
    +            WWDGRSTF: u1,
    +            ///  Low-power reset flag
    +            LPWRRSTF: u1,
    +        }),
    +    };
    +
    +    ///  General purpose I/O
    +    pub const GPIOA = extern struct {
    +        ///  Port configuration register low (GPIOn_CRL)
    +        CRL: mmio.Mmio(packed struct(u32) {
    +            ///  Port n.0 mode bits
    +            MODE0: u2,
    +            ///  Port n.0 configuration bits
    +            CNF0: u2,
    +            ///  Port n.1 mode bits
    +            MODE1: u2,
    +            ///  Port n.1 configuration bits
    +            CNF1: u2,
    +            ///  Port n.2 mode bits
    +            MODE2: u2,
    +            ///  Port n.2 configuration bits
    +            CNF2: u2,
    +            ///  Port n.3 mode bits
    +            MODE3: u2,
    +            ///  Port n.3 configuration bits
    +            CNF3: u2,
    +            ///  Port n.4 mode bits
    +            MODE4: u2,
    +            ///  Port n.4 configuration bits
    +            CNF4: u2,
    +            ///  Port n.5 mode bits
    +            MODE5: u2,
    +            ///  Port n.5 configuration bits
    +            CNF5: u2,
    +            ///  Port n.6 mode bits
    +            MODE6: u2,
    +            ///  Port n.6 configuration bits
    +            CNF6: u2,
    +            ///  Port n.7 mode bits
    +            MODE7: u2,
    +            ///  Port n.7 configuration bits
    +            CNF7: u2,
    +        }),
    +        ///  Port configuration register high (GPIOn_CRL)
    +        CRH: mmio.Mmio(packed struct(u32) {
    +            ///  Port n.8 mode bits
    +            MODE8: u2,
    +            ///  Port n.8 configuration bits
    +            CNF8: u2,
    +            ///  Port n.9 mode bits
    +            MODE9: u2,
    +            ///  Port n.9 configuration bits
    +            CNF9: u2,
    +            ///  Port n.10 mode bits
    +            MODE10: u2,
    +            ///  Port n.10 configuration bits
    +            CNF10: u2,
    +            ///  Port n.11 mode bits
    +            MODE11: u2,
    +            ///  Port n.11 configuration bits
    +            CNF11: u2,
    +            ///  Port n.12 mode bits
    +            MODE12: u2,
    +            ///  Port n.12 configuration bits
    +            CNF12: u2,
    +            ///  Port n.13 mode bits
    +            MODE13: u2,
    +            ///  Port n.13 configuration bits
    +            CNF13: u2,
    +            ///  Port n.14 mode bits
    +            MODE14: u2,
    +            ///  Port n.14 configuration bits
    +            CNF14: u2,
    +            ///  Port n.15 mode bits
    +            MODE15: u2,
    +            ///  Port n.15 configuration bits
    +            CNF15: u2,
    +        }),
    +        ///  Port input data register (GPIOn_IDR)
    +        IDR: mmio.Mmio(packed struct(u32) {
    +            ///  Port input data
    +            IDR0: u1,
    +            ///  Port input data
    +            IDR1: u1,
    +            ///  Port input data
    +            IDR2: u1,
    +            ///  Port input data
    +            IDR3: u1,
    +            ///  Port input data
    +            IDR4: u1,
    +            ///  Port input data
    +            IDR5: u1,
    +            ///  Port input data
    +            IDR6: u1,
    +            ///  Port input data
    +            IDR7: u1,
    +            ///  Port input data
    +            IDR8: u1,
    +            ///  Port input data
    +            IDR9: u1,
    +            ///  Port input data
    +            IDR10: u1,
    +            ///  Port input data
    +            IDR11: u1,
    +            ///  Port input data
    +            IDR12: u1,
    +            ///  Port input data
    +            IDR13: u1,
    +            ///  Port input data
    +            IDR14: u1,
    +            ///  Port input data
    +            IDR15: u1,
    +            padding: u16,
    +        }),
    +        ///  Port output data register (GPIOn_ODR)
    +        ODR: mmio.Mmio(packed struct(u32) {
    +            ///  Port output data
    +            ODR0: u1,
    +            ///  Port output data
    +            ODR1: u1,
    +            ///  Port output data
    +            ODR2: u1,
    +            ///  Port output data
    +            ODR3: u1,
    +            ///  Port output data
    +            ODR4: u1,
    +            ///  Port output data
    +            ODR5: u1,
    +            ///  Port output data
    +            ODR6: u1,
    +            ///  Port output data
    +            ODR7: u1,
    +            ///  Port output data
    +            ODR8: u1,
    +            ///  Port output data
    +            ODR9: u1,
    +            ///  Port output data
    +            ODR10: u1,
    +            ///  Port output data
    +            ODR11: u1,
    +            ///  Port output data
    +            ODR12: u1,
    +            ///  Port output data
    +            ODR13: u1,
    +            ///  Port output data
    +            ODR14: u1,
    +            ///  Port output data
    +            ODR15: u1,
    +            padding: u16,
    +        }),
    +        ///  Port bit set/reset register (GPIOn_BSRR)
    +        BSRR: mmio.Mmio(packed struct(u32) {
    +            ///  Set bit 0
    +            BS0: u1,
    +            ///  Set bit 1
    +            BS1: u1,
    +            ///  Set bit 1
    +            BS2: u1,
    +            ///  Set bit 3
    +            BS3: u1,
    +            ///  Set bit 4
    +            BS4: u1,
    +            ///  Set bit 5
    +            BS5: u1,
    +            ///  Set bit 6
    +            BS6: u1,
    +            ///  Set bit 7
    +            BS7: u1,
    +            ///  Set bit 8
    +            BS8: u1,
    +            ///  Set bit 9
    +            BS9: u1,
    +            ///  Set bit 10
    +            BS10: u1,
    +            ///  Set bit 11
    +            BS11: u1,
    +            ///  Set bit 12
    +            BS12: u1,
    +            ///  Set bit 13
    +            BS13: u1,
    +            ///  Set bit 14
    +            BS14: u1,
    +            ///  Set bit 15
    +            BS15: u1,
    +            ///  Reset bit 0
    +            BR0: u1,
    +            ///  Reset bit 1
    +            BR1: u1,
    +            ///  Reset bit 2
    +            BR2: u1,
    +            ///  Reset bit 3
    +            BR3: u1,
    +            ///  Reset bit 4
    +            BR4: u1,
    +            ///  Reset bit 5
    +            BR5: u1,
    +            ///  Reset bit 6
    +            BR6: u1,
    +            ///  Reset bit 7
    +            BR7: u1,
    +            ///  Reset bit 8
    +            BR8: u1,
    +            ///  Reset bit 9
    +            BR9: u1,
    +            ///  Reset bit 10
    +            BR10: u1,
    +            ///  Reset bit 11
    +            BR11: u1,
    +            ///  Reset bit 12
    +            BR12: u1,
    +            ///  Reset bit 13
    +            BR13: u1,
    +            ///  Reset bit 14
    +            BR14: u1,
    +            ///  Reset bit 15
    +            BR15: u1,
    +        }),
    +        ///  Port bit reset register (GPIOn_BRR)
    +        BRR: mmio.Mmio(packed struct(u32) {
    +            ///  Reset bit 0
    +            BR0: u1,
    +            ///  Reset bit 1
    +            BR1: u1,
    +            ///  Reset bit 1
    +            BR2: u1,
    +            ///  Reset bit 3
    +            BR3: u1,
    +            ///  Reset bit 4
    +            BR4: u1,
    +            ///  Reset bit 5
    +            BR5: u1,
    +            ///  Reset bit 6
    +            BR6: u1,
    +            ///  Reset bit 7
    +            BR7: u1,
    +            ///  Reset bit 8
    +            BR8: u1,
    +            ///  Reset bit 9
    +            BR9: u1,
    +            ///  Reset bit 10
    +            BR10: u1,
    +            ///  Reset bit 11
    +            BR11: u1,
    +            ///  Reset bit 12
    +            BR12: u1,
    +            ///  Reset bit 13
    +            BR13: u1,
    +            ///  Reset bit 14
    +            BR14: u1,
    +            ///  Reset bit 15
    +            BR15: u1,
    +            padding: u16,
    +        }),
    +        ///  Port configuration lock register
    +        LCKR: mmio.Mmio(packed struct(u32) {
    +            ///  Port A Lock bit 0
    +            LCK0: u1,
    +            ///  Port A Lock bit 1
    +            LCK1: u1,
    +            ///  Port A Lock bit 2
    +            LCK2: u1,
    +            ///  Port A Lock bit 3
    +            LCK3: u1,
    +            ///  Port A Lock bit 4
    +            LCK4: u1,
    +            ///  Port A Lock bit 5
    +            LCK5: u1,
    +            ///  Port A Lock bit 6
    +            LCK6: u1,
    +            ///  Port A Lock bit 7
    +            LCK7: u1,
    +            ///  Port A Lock bit 8
    +            LCK8: u1,
    +            ///  Port A Lock bit 9
    +            LCK9: u1,
    +            ///  Port A Lock bit 10
    +            LCK10: u1,
    +            ///  Port A Lock bit 11
    +            LCK11: u1,
    +            ///  Port A Lock bit 12
    +            LCK12: u1,
    +            ///  Port A Lock bit 13
    +            LCK13: u1,
    +            ///  Port A Lock bit 14
    +            LCK14: u1,
    +            ///  Port A Lock bit 15
    +            LCK15: u1,
    +            ///  Lock key
    +            LCKK: u1,
    +            padding: u15,
    +        }),
    +    };
    +
    +    ///  SysTick timer
    +    pub const STK = extern struct {
    +        ///  SysTick control and status register
    +        CTRL: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            ENABLE: u1,
    +            ///  SysTick exception request enable
    +            TICKINT: u1,
    +            ///  Clock source selection
    +            CLKSOURCE: u1,
    +            reserved16: u13,
    +            ///  COUNTFLAG
    +            COUNTFLAG: u1,
    +            padding: u15,
    +        }),
    +        ///  SysTick reload value register
    +        LOAD_: mmio.Mmio(packed struct(u32) {
    +            ///  RELOAD value
    +            RELOAD: u24,
    +            padding: u8,
    +        }),
    +        ///  SysTick current value register
    +        VAL: mmio.Mmio(packed struct(u32) {
    +            ///  Current counter value
    +            CURRENT: u24,
    +            padding: u8,
    +        }),
    +        ///  SysTick calibration value register
    +        CALIB: mmio.Mmio(packed struct(u32) {
    +            ///  Calibration value
    +            TENMS: u24,
    +            padding: u8,
    +        }),
    +    };
    +
    +    ///  System control block
    +    pub const SCB = extern struct {
    +        ///  CPUID base register
    +        CPUID: mmio.Mmio(packed struct(u32) {
    +            ///  Revision number
    +            Revision: u4,
    +            ///  Part number of the processor
    +            PartNo: u12,
    +            ///  Reads as 0xF
    +            Constant: u4,
    +            ///  Variant number
    +            Variant: u4,
    +            ///  Implementer code
    +            Implementer: u8,
    +        }),
    +        ///  Interrupt control and state register
    +        ICSR: mmio.Mmio(packed struct(u32) {
    +            ///  Active vector
    +            VECTACTIVE: u9,
    +            reserved11: u2,
    +            ///  Return to base level
    +            RETTOBASE: u1,
    +            ///  Pending vector
    +            VECTPENDING: u7,
    +            reserved22: u3,
    +            ///  Interrupt pending flag
    +            ISRPENDING: u1,
    +            reserved25: u2,
    +            ///  SysTick exception clear-pending bit
    +            PENDSTCLR: u1,
    +            ///  SysTick exception set-pending bit
    +            PENDSTSET: u1,
    +            ///  PendSV clear-pending bit
    +            PENDSVCLR: u1,
    +            ///  PendSV set-pending bit
    +            PENDSVSET: u1,
    +            reserved31: u2,
    +            ///  NMI set-pending bit.
    +            NMIPENDSET: u1,
    +        }),
    +        ///  Vector table offset register
    +        VTOR: mmio.Mmio(packed struct(u32) {
    +            reserved9: u9,
    +            ///  Vector table base offset field
    +            TBLOFF: u21,
    +            padding: u2,
    +        }),
    +        ///  Application interrupt and reset control register
    +        AIRCR: mmio.Mmio(packed struct(u32) {
    +            ///  VECTRESET
    +            VECTRESET: u1,
    +            ///  VECTCLRACTIVE
    +            VECTCLRACTIVE: u1,
    +            ///  SYSRESETREQ
    +            SYSRESETREQ: u1,
    +            reserved8: u5,
    +            ///  PRIGROUP
    +            PRIGROUP: u3,
    +            reserved15: u4,
    +            ///  ENDIANESS
    +            ENDIANESS: u1,
    +            ///  Register key
    +            VECTKEYSTAT: u16,
    +        }),
    +        ///  System control register
    +        SCR: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  SLEEPONEXIT
    +            SLEEPONEXIT: u1,
    +            ///  SLEEPDEEP
    +            SLEEPDEEP: u1,
    +            reserved4: u1,
    +            ///  Send Event on Pending bit
    +            SEVEONPEND: u1,
    +            padding: u27,
    +        }),
    +        ///  Configuration and control register
    +        CCR: mmio.Mmio(packed struct(u32) {
    +            ///  Configures how the processor enters Thread mode
    +            NONBASETHRDENA: u1,
    +            ///  USERSETMPEND
    +            USERSETMPEND: u1,
    +            reserved3: u1,
    +            ///  UNALIGN_ TRP
    +            UNALIGN__TRP: u1,
    +            ///  DIV_0_TRP
    +            DIV_0_TRP: u1,
    +            reserved8: u3,
    +            ///  BFHFNMIGN
    +            BFHFNMIGN: u1,
    +            ///  STKALIGN
    +            STKALIGN: u1,
    +            padding: u22,
    +        }),
    +        ///  System handler priority registers
    +        SHPR1: mmio.Mmio(packed struct(u32) {
    +            ///  Priority of system handler 4
    +            PRI_4: u8,
    +            ///  Priority of system handler 5
    +            PRI_5: u8,
    +            ///  Priority of system handler 6
    +            PRI_6: u8,
    +            padding: u8,
    +        }),
    +        ///  System handler priority registers
    +        SHPR2: mmio.Mmio(packed struct(u32) {
    +            reserved24: u24,
    +            ///  Priority of system handler 11
    +            PRI_11: u8,
    +        }),
    +        ///  System handler priority registers
    +        SHPR3: mmio.Mmio(packed struct(u32) {
    +            reserved16: u16,
    +            ///  Priority of system handler 14
    +            PRI_14: u8,
    +            ///  Priority of system handler 15
    +            PRI_15: u8,
    +        }),
    +        ///  System handler control and state register
    +        SHCRS: mmio.Mmio(packed struct(u32) {
    +            ///  Memory management fault exception active bit
    +            MEMFAULTACT: u1,
    +            ///  Bus fault exception active bit
    +            BUSFAULTACT: u1,
    +            reserved3: u1,
    +            ///  Usage fault exception active bit
    +            USGFAULTACT: u1,
    +            reserved7: u3,
    +            ///  SVC call active bit
    +            SVCALLACT: u1,
    +            ///  Debug monitor active bit
    +            MONITORACT: u1,
    +            reserved10: u1,
    +            ///  PendSV exception active bit
    +            PENDSVACT: u1,
    +            ///  SysTick exception active bit
    +            SYSTICKACT: u1,
    +            ///  Usage fault exception pending bit
    +            USGFAULTPENDED: u1,
    +            ///  Memory management fault exception pending bit
    +            MEMFAULTPENDED: u1,
    +            ///  Bus fault exception pending bit
    +            BUSFAULTPENDED: u1,
    +            ///  SVC call pending bit
    +            SVCALLPENDED: u1,
    +            ///  Memory management fault enable bit
    +            MEMFAULTENA: u1,
    +            ///  Bus fault enable bit
    +            BUSFAULTENA: u1,
    +            ///  Usage fault enable bit
    +            USGFAULTENA: u1,
    +            padding: u13,
    +        }),
    +        ///  Configurable fault status register
    +        CFSR_UFSR_BFSR_MMFSR: mmio.Mmio(packed struct(u32) {
    +            ///  IACCVIOL
    +            IACCVIOL: u1,
    +            ///  DACCVIOL
    +            DACCVIOL: u1,
    +            reserved3: u1,
    +            ///  MUNSTKERR
    +            MUNSTKERR: u1,
    +            ///  MSTKERR
    +            MSTKERR: u1,
    +            ///  MLSPERR
    +            MLSPERR: u1,
    +            reserved7: u1,
    +            ///  MMARVALID
    +            MMARVALID: u1,
    +            ///  Instruction bus error
    +            IBUSERR: u1,
    +            ///  Precise data bus error
    +            PRECISERR: u1,
    +            ///  Imprecise data bus error
    +            IMPRECISERR: u1,
    +            ///  Bus fault on unstacking for a return from exception
    +            UNSTKERR: u1,
    +            ///  Bus fault on stacking for exception entry
    +            STKERR: u1,
    +            ///  Bus fault on floating-point lazy state preservation
    +            LSPERR: u1,
    +            reserved15: u1,
    +            ///  Bus Fault Address Register (BFAR) valid flag
    +            BFARVALID: u1,
    +            ///  Undefined instruction usage fault
    +            UNDEFINSTR: u1,
    +            ///  Invalid state usage fault
    +            INVSTATE: u1,
    +            ///  Invalid PC load usage fault
    +            INVPC: u1,
    +            ///  No coprocessor usage fault.
    +            NOCP: u1,
    +            reserved24: u4,
    +            ///  Unaligned access usage fault
    +            UNALIGNED: u1,
    +            ///  Divide by zero usage fault
    +            DIVBYZERO: u1,
    +            padding: u6,
    +        }),
    +        ///  Hard fault status register
    +        HFSR: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  Vector table hard fault
    +            VECTTBL: u1,
    +            reserved30: u28,
    +            ///  Forced hard fault
    +            FORCED: u1,
    +            ///  Reserved for Debug use
    +            DEBUG_VT: u1,
    +        }),
    +        reserved52: [4]u8,
    +        ///  Memory management fault address register
    +        MMFAR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory management fault address
    +            MMFAR: u32,
    +        }),
    +        ///  Bus fault address register
    +        BFAR: mmio.Mmio(packed struct(u32) {
    +            ///  Bus fault address
    +            BFAR: u32,
    +        }),
    +    };
    +
    +    ///  Nested vectored interrupt controller
    +    pub const NVIC_STIR = extern struct {
    +        ///  Software trigger interrupt register
    +        STIR: mmio.Mmio(packed struct(u32) {
    +            ///  Software generated interrupt ID
    +            INTID: u9,
    +            padding: u23,
    +        }),
    +    };
    +
    +    ///  System control block ACTLR
    +    pub const SCB_ACTRL = extern struct {
    +        ///  Auxiliary control register
    +        ACTRL: mmio.Mmio(packed struct(u32) {
    +            reserved2: u2,
    +            ///  DISFOLD
    +            DISFOLD: u1,
    +            reserved10: u7,
    +            ///  FPEXCODIS
    +            FPEXCODIS: u1,
    +            ///  DISRAMODE
    +            DISRAMODE: u1,
    +            ///  DISITMATBFLUSH
    +            DISITMATBFLUSH: u1,
    +            padding: u19,
    +        }),
    +    };
    +
    +    ///  Memory protection unit
    +    pub const MPU = extern struct {
    +        ///  MPU type register
    +        MPU_TYPER: mmio.Mmio(packed struct(u32) {
    +            ///  Separate flag
    +            SEPARATE: u1,
    +            reserved8: u7,
    +            ///  Number of MPU data regions
    +            DREGION: u8,
    +            ///  Number of MPU instruction regions
    +            IREGION: u8,
    +            padding: u8,
    +        }),
    +        ///  MPU control register
    +        MPU_CTRL: mmio.Mmio(packed struct(u32) {
    +            ///  Enables the MPU
    +            ENABLE: u1,
    +            ///  Enables the operation of MPU during hard fault
    +            HFNMIENA: u1,
    +            ///  Enable priviliged software access to default memory map
    +            PRIVDEFENA: u1,
    +            padding: u29,
    +        }),
    +        ///  MPU region number register
    +        MPU_RNR: mmio.Mmio(packed struct(u32) {
    +            ///  MPU region
    +            REGION: u8,
    +            padding: u24,
    +        }),
    +        ///  MPU region base address register
    +        MPU_RBAR: mmio.Mmio(packed struct(u32) {
    +            ///  MPU region field
    +            REGION: u4,
    +            ///  MPU region number valid
    +            VALID: u1,
    +            ///  Region base address field
    +            ADDR: u27,
    +        }),
    +        ///  MPU region attribute and size register
    +        MPU_RASR: mmio.Mmio(packed struct(u32) {
    +            ///  Region enable bit.
    +            ENABLE: u1,
    +            ///  Size of the MPU protection region
    +            SIZE: u5,
    +            reserved8: u2,
    +            ///  Subregion disable bits
    +            SRD: u8,
    +            ///  memory attribute
    +            B: u1,
    +            ///  memory attribute
    +            C: u1,
    +            ///  Shareable memory attribute
    +            S: u1,
    +            ///  memory attribute
    +            TEX: u3,
    +            reserved24: u2,
    +            ///  Access permission
    +            AP: u3,
    +            reserved28: u1,
    +            ///  Instruction access disable bit
    +            XN: u1,
    +            padding: u3,
    +        }),
    +    };
    +
    +    ///  Nested Vectored Interrupt Controller
    +    pub const NVIC = extern struct {
    +        ///  Interrupt Set-Enable Register
    +        ISER0: mmio.Mmio(packed struct(u32) {
    +            ///  SETENA
    +            SETENA: u32,
    +        }),
    +        ///  Interrupt Set-Enable Register
    +        ISER1: mmio.Mmio(packed struct(u32) {
    +            ///  SETENA
    +            SETENA: u32,
    +        }),
    +        reserved128: [120]u8,
    +        ///  Interrupt Clear-Enable Register
    +        ICER0: mmio.Mmio(packed struct(u32) {
    +            ///  CLRENA
    +            CLRENA: u32,
    +        }),
    +        ///  Interrupt Clear-Enable Register
    +        ICER1: mmio.Mmio(packed struct(u32) {
    +            ///  CLRENA
    +            CLRENA: u32,
    +        }),
    +        reserved256: [120]u8,
    +        ///  Interrupt Set-Pending Register
    +        ISPR0: mmio.Mmio(packed struct(u32) {
    +            ///  SETPEND
    +            SETPEND: u32,
    +        }),
    +        ///  Interrupt Set-Pending Register
    +        ISPR1: mmio.Mmio(packed struct(u32) {
    +            ///  SETPEND
    +            SETPEND: u32,
    +        }),
    +        reserved384: [120]u8,
    +        ///  Interrupt Clear-Pending Register
    +        ICPR0: mmio.Mmio(packed struct(u32) {
    +            ///  CLRPEND
    +            CLRPEND: u32,
    +        }),
    +        ///  Interrupt Clear-Pending Register
    +        ICPR1: mmio.Mmio(packed struct(u32) {
    +            ///  CLRPEND
    +            CLRPEND: u32,
    +        }),
    +        reserved512: [120]u8,
    +        ///  Interrupt Active Bit Register
    +        IABR0: mmio.Mmio(packed struct(u32) {
    +            ///  ACTIVE
    +            ACTIVE: u32,
    +        }),
    +        ///  Interrupt Active Bit Register
    +        IABR1: mmio.Mmio(packed struct(u32) {
    +            ///  ACTIVE
    +            ACTIVE: u32,
    +        }),
    +        reserved768: [248]u8,
    +        ///  Interrupt Priority Register
    +        IPR0: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR1: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR2: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR3: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR4: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR5: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR6: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR7: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR8: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR9: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR10: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR11: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR12: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR13: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR14: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +    };
    +
    +    ///  Alternate function I/O
    +    pub const AFIO = extern struct {
    +        ///  Event Control Register (AFIO_EVCR)
    +        EVCR: mmio.Mmio(packed struct(u32) {
    +            ///  Pin selection
    +            PIN: u4,
    +            ///  Port selection
    +            PORT: u3,
    +            ///  Event Output Enable
    +            EVOE: u1,
    +            padding: u24,
    +        }),
    +        ///  AF remap and debug I/O configuration register (AFIO_MAPR)
    +        MAPR: mmio.Mmio(packed struct(u32) {
    +            ///  SPI1 remapping
    +            SPI1_REMAP: u1,
    +            ///  I2C1 remapping
    +            I2C1_REMAP: u1,
    +            ///  USART1 remapping
    +            USART1_REMAP: u1,
    +            ///  USART2 remapping
    +            USART2_REMAP: u1,
    +            ///  USART3 remapping
    +            USART3_REMAP: u2,
    +            ///  TIM1 remapping
    +            TIM1_REMAP: u2,
    +            ///  TIM2 remapping
    +            TIM2_REMAP: u2,
    +            ///  TIM3 remapping
    +            TIM3_REMAP: u2,
    +            ///  TIM4 remapping
    +            TIM4_REMAP: u1,
    +            ///  CAN1 remapping
    +            CAN_REMAP: u2,
    +            ///  Port D0/Port D1 mapping on OSCIN/OSCOUT
    +            PD01_REMAP: u1,
    +            ///  Set and cleared by software
    +            TIM5CH4_IREMAP: u1,
    +            ///  ADC 1 External trigger injected conversion remapping
    +            ADC1_ETRGINJ_REMAP: u1,
    +            ///  ADC 1 external trigger regular conversion remapping
    +            ADC1_ETRGREG_REMAP: u1,
    +            ///  ADC 2 external trigger injected conversion remapping
    +            ADC2_ETRGINJ_REMAP: u1,
    +            ///  ADC 2 external trigger regular conversion remapping
    +            ADC2_ETRGREG_REMAP: u1,
    +            reserved24: u3,
    +            ///  Serial wire JTAG configuration
    +            SWJ_CFG: u3,
    +            padding: u5,
    +        }),
    +        ///  External interrupt configuration register 1 (AFIO_EXTICR1)
    +        EXTICR1: mmio.Mmio(packed struct(u32) {
    +            ///  EXTI0 configuration
    +            EXTI0: u4,
    +            ///  EXTI1 configuration
    +            EXTI1: u4,
    +            ///  EXTI2 configuration
    +            EXTI2: u4,
    +            ///  EXTI3 configuration
    +            EXTI3: u4,
    +            padding: u16,
    +        }),
    +        ///  External interrupt configuration register 2 (AFIO_EXTICR2)
    +        EXTICR2: mmio.Mmio(packed struct(u32) {
    +            ///  EXTI4 configuration
    +            EXTI4: u4,
    +            ///  EXTI5 configuration
    +            EXTI5: u4,
    +            ///  EXTI6 configuration
    +            EXTI6: u4,
    +            ///  EXTI7 configuration
    +            EXTI7: u4,
    +            padding: u16,
    +        }),
    +        ///  External interrupt configuration register 3 (AFIO_EXTICR3)
    +        EXTICR3: mmio.Mmio(packed struct(u32) {
    +            ///  EXTI8 configuration
    +            EXTI8: u4,
    +            ///  EXTI9 configuration
    +            EXTI9: u4,
    +            ///  EXTI10 configuration
    +            EXTI10: u4,
    +            ///  EXTI11 configuration
    +            EXTI11: u4,
    +            padding: u16,
    +        }),
    +        ///  External interrupt configuration register 4 (AFIO_EXTICR4)
    +        EXTICR4: mmio.Mmio(packed struct(u32) {
    +            ///  EXTI12 configuration
    +            EXTI12: u4,
    +            ///  EXTI13 configuration
    +            EXTI13: u4,
    +            ///  EXTI14 configuration
    +            EXTI14: u4,
    +            ///  EXTI15 configuration
    +            EXTI15: u4,
    +            padding: u16,
    +        }),
    +        reserved28: [4]u8,
    +        ///  AF remap and debug I/O configuration register
    +        MAPR2: mmio.Mmio(packed struct(u32) {
    +            reserved5: u5,
    +            ///  TIM9 remapping
    +            TIM9_REMAP: u1,
    +            ///  TIM10 remapping
    +            TIM10_REMAP: u1,
    +            ///  TIM11 remapping
    +            TIM11_REMAP: u1,
    +            ///  TIM13 remapping
    +            TIM13_REMAP: u1,
    +            ///  TIM14 remapping
    +            TIM14_REMAP: u1,
    +            ///  NADV connect/disconnect
    +            FSMC_NADV: u1,
    +            padding: u21,
    +        }),
    +    };
    +
    +    ///  EXTI
    +    pub const EXTI = extern struct {
    +        ///  Interrupt mask register (EXTI_IMR)
    +        IMR: mmio.Mmio(packed struct(u32) {
    +            ///  Interrupt Mask on line 0
    +            MR0: u1,
    +            ///  Interrupt Mask on line 1
    +            MR1: u1,
    +            ///  Interrupt Mask on line 2
    +            MR2: u1,
    +            ///  Interrupt Mask on line 3
    +            MR3: u1,
    +            ///  Interrupt Mask on line 4
    +            MR4: u1,
    +            ///  Interrupt Mask on line 5
    +            MR5: u1,
    +            ///  Interrupt Mask on line 6
    +            MR6: u1,
    +            ///  Interrupt Mask on line 7
    +            MR7: u1,
    +            ///  Interrupt Mask on line 8
    +            MR8: u1,
    +            ///  Interrupt Mask on line 9
    +            MR9: u1,
    +            ///  Interrupt Mask on line 10
    +            MR10: u1,
    +            ///  Interrupt Mask on line 11
    +            MR11: u1,
    +            ///  Interrupt Mask on line 12
    +            MR12: u1,
    +            ///  Interrupt Mask on line 13
    +            MR13: u1,
    +            ///  Interrupt Mask on line 14
    +            MR14: u1,
    +            ///  Interrupt Mask on line 15
    +            MR15: u1,
    +            ///  Interrupt Mask on line 16
    +            MR16: u1,
    +            ///  Interrupt Mask on line 17
    +            MR17: u1,
    +            ///  Interrupt Mask on line 18
    +            MR18: u1,
    +            padding: u13,
    +        }),
    +        ///  Event mask register (EXTI_EMR)
    +        EMR: mmio.Mmio(packed struct(u32) {
    +            ///  Event Mask on line 0
    +            MR0: u1,
    +            ///  Event Mask on line 1
    +            MR1: u1,
    +            ///  Event Mask on line 2
    +            MR2: u1,
    +            ///  Event Mask on line 3
    +            MR3: u1,
    +            ///  Event Mask on line 4
    +            MR4: u1,
    +            ///  Event Mask on line 5
    +            MR5: u1,
    +            ///  Event Mask on line 6
    +            MR6: u1,
    +            ///  Event Mask on line 7
    +            MR7: u1,
    +            ///  Event Mask on line 8
    +            MR8: u1,
    +            ///  Event Mask on line 9
    +            MR9: u1,
    +            ///  Event Mask on line 10
    +            MR10: u1,
    +            ///  Event Mask on line 11
    +            MR11: u1,
    +            ///  Event Mask on line 12
    +            MR12: u1,
    +            ///  Event Mask on line 13
    +            MR13: u1,
    +            ///  Event Mask on line 14
    +            MR14: u1,
    +            ///  Event Mask on line 15
    +            MR15: u1,
    +            ///  Event Mask on line 16
    +            MR16: u1,
    +            ///  Event Mask on line 17
    +            MR17: u1,
    +            ///  Event Mask on line 18
    +            MR18: u1,
    +            padding: u13,
    +        }),
    +        ///  Rising Trigger selection register (EXTI_RTSR)
    +        RTSR: mmio.Mmio(packed struct(u32) {
    +            ///  Rising trigger event configuration of line 0
    +            TR0: u1,
    +            ///  Rising trigger event configuration of line 1
    +            TR1: u1,
    +            ///  Rising trigger event configuration of line 2
    +            TR2: u1,
    +            ///  Rising trigger event configuration of line 3
    +            TR3: u1,
    +            ///  Rising trigger event configuration of line 4
    +            TR4: u1,
    +            ///  Rising trigger event configuration of line 5
    +            TR5: u1,
    +            ///  Rising trigger event configuration of line 6
    +            TR6: u1,
    +            ///  Rising trigger event configuration of line 7
    +            TR7: u1,
    +            ///  Rising trigger event configuration of line 8
    +            TR8: u1,
    +            ///  Rising trigger event configuration of line 9
    +            TR9: u1,
    +            ///  Rising trigger event configuration of line 10
    +            TR10: u1,
    +            ///  Rising trigger event configuration of line 11
    +            TR11: u1,
    +            ///  Rising trigger event configuration of line 12
    +            TR12: u1,
    +            ///  Rising trigger event configuration of line 13
    +            TR13: u1,
    +            ///  Rising trigger event configuration of line 14
    +            TR14: u1,
    +            ///  Rising trigger event configuration of line 15
    +            TR15: u1,
    +            ///  Rising trigger event configuration of line 16
    +            TR16: u1,
    +            ///  Rising trigger event configuration of line 17
    +            TR17: u1,
    +            ///  Rising trigger event configuration of line 18
    +            TR18: u1,
    +            padding: u13,
    +        }),
    +        ///  Falling Trigger selection register (EXTI_FTSR)
    +        FTSR: mmio.Mmio(packed struct(u32) {
    +            ///  Falling trigger event configuration of line 0
    +            TR0: u1,
    +            ///  Falling trigger event configuration of line 1
    +            TR1: u1,
    +            ///  Falling trigger event configuration of line 2
    +            TR2: u1,
    +            ///  Falling trigger event configuration of line 3
    +            TR3: u1,
    +            ///  Falling trigger event configuration of line 4
    +            TR4: u1,
    +            ///  Falling trigger event configuration of line 5
    +            TR5: u1,
    +            ///  Falling trigger event configuration of line 6
    +            TR6: u1,
    +            ///  Falling trigger event configuration of line 7
    +            TR7: u1,
    +            ///  Falling trigger event configuration of line 8
    +            TR8: u1,
    +            ///  Falling trigger event configuration of line 9
    +            TR9: u1,
    +            ///  Falling trigger event configuration of line 10
    +            TR10: u1,
    +            ///  Falling trigger event configuration of line 11
    +            TR11: u1,
    +            ///  Falling trigger event configuration of line 12
    +            TR12: u1,
    +            ///  Falling trigger event configuration of line 13
    +            TR13: u1,
    +            ///  Falling trigger event configuration of line 14
    +            TR14: u1,
    +            ///  Falling trigger event configuration of line 15
    +            TR15: u1,
    +            ///  Falling trigger event configuration of line 16
    +            TR16: u1,
    +            ///  Falling trigger event configuration of line 17
    +            TR17: u1,
    +            ///  Falling trigger event configuration of line 18
    +            TR18: u1,
    +            padding: u13,
    +        }),
    +        ///  Software interrupt event register (EXTI_SWIER)
    +        SWIER: mmio.Mmio(packed struct(u32) {
    +            ///  Software Interrupt on line 0
    +            SWIER0: u1,
    +            ///  Software Interrupt on line 1
    +            SWIER1: u1,
    +            ///  Software Interrupt on line 2
    +            SWIER2: u1,
    +            ///  Software Interrupt on line 3
    +            SWIER3: u1,
    +            ///  Software Interrupt on line 4
    +            SWIER4: u1,
    +            ///  Software Interrupt on line 5
    +            SWIER5: u1,
    +            ///  Software Interrupt on line 6
    +            SWIER6: u1,
    +            ///  Software Interrupt on line 7
    +            SWIER7: u1,
    +            ///  Software Interrupt on line 8
    +            SWIER8: u1,
    +            ///  Software Interrupt on line 9
    +            SWIER9: u1,
    +            ///  Software Interrupt on line 10
    +            SWIER10: u1,
    +            ///  Software Interrupt on line 11
    +            SWIER11: u1,
    +            ///  Software Interrupt on line 12
    +            SWIER12: u1,
    +            ///  Software Interrupt on line 13
    +            SWIER13: u1,
    +            ///  Software Interrupt on line 14
    +            SWIER14: u1,
    +            ///  Software Interrupt on line 15
    +            SWIER15: u1,
    +            ///  Software Interrupt on line 16
    +            SWIER16: u1,
    +            ///  Software Interrupt on line 17
    +            SWIER17: u1,
    +            ///  Software Interrupt on line 18
    +            SWIER18: u1,
    +            padding: u13,
    +        }),
    +        ///  Pending register (EXTI_PR)
    +        PR: mmio.Mmio(packed struct(u32) {
    +            ///  Pending bit 0
    +            PR0: u1,
    +            ///  Pending bit 1
    +            PR1: u1,
    +            ///  Pending bit 2
    +            PR2: u1,
    +            ///  Pending bit 3
    +            PR3: u1,
    +            ///  Pending bit 4
    +            PR4: u1,
    +            ///  Pending bit 5
    +            PR5: u1,
    +            ///  Pending bit 6
    +            PR6: u1,
    +            ///  Pending bit 7
    +            PR7: u1,
    +            ///  Pending bit 8
    +            PR8: u1,
    +            ///  Pending bit 9
    +            PR9: u1,
    +            ///  Pending bit 10
    +            PR10: u1,
    +            ///  Pending bit 11
    +            PR11: u1,
    +            ///  Pending bit 12
    +            PR12: u1,
    +            ///  Pending bit 13
    +            PR13: u1,
    +            ///  Pending bit 14
    +            PR14: u1,
    +            ///  Pending bit 15
    +            PR15: u1,
    +            ///  Pending bit 16
    +            PR16: u1,
    +            ///  Pending bit 17
    +            PR17: u1,
    +            ///  Pending bit 18
    +            PR18: u1,
    +            padding: u13,
    +        }),
    +    };
    +
    +    ///  DMA controller
    +    pub const DMA1 = extern struct {
    +        ///  DMA interrupt status register (DMA_ISR)
    +        ISR: mmio.Mmio(packed struct(u32) {
    +            ///  Channel 1 Global interrupt flag
    +            GIF1: u1,
    +            ///  Channel 1 Transfer Complete flag
    +            TCIF1: u1,
    +            ///  Channel 1 Half Transfer Complete flag
    +            HTIF1: u1,
    +            ///  Channel 1 Transfer Error flag
    +            TEIF1: u1,
    +            ///  Channel 2 Global interrupt flag
    +            GIF2: u1,
    +            ///  Channel 2 Transfer Complete flag
    +            TCIF2: u1,
    +            ///  Channel 2 Half Transfer Complete flag
    +            HTIF2: u1,
    +            ///  Channel 2 Transfer Error flag
    +            TEIF2: u1,
    +            ///  Channel 3 Global interrupt flag
    +            GIF3: u1,
    +            ///  Channel 3 Transfer Complete flag
    +            TCIF3: u1,
    +            ///  Channel 3 Half Transfer Complete flag
    +            HTIF3: u1,
    +            ///  Channel 3 Transfer Error flag
    +            TEIF3: u1,
    +            ///  Channel 4 Global interrupt flag
    +            GIF4: u1,
    +            ///  Channel 4 Transfer Complete flag
    +            TCIF4: u1,
    +            ///  Channel 4 Half Transfer Complete flag
    +            HTIF4: u1,
    +            ///  Channel 4 Transfer Error flag
    +            TEIF4: u1,
    +            ///  Channel 5 Global interrupt flag
    +            GIF5: u1,
    +            ///  Channel 5 Transfer Complete flag
    +            TCIF5: u1,
    +            ///  Channel 5 Half Transfer Complete flag
    +            HTIF5: u1,
    +            ///  Channel 5 Transfer Error flag
    +            TEIF5: u1,
    +            ///  Channel 6 Global interrupt flag
    +            GIF6: u1,
    +            ///  Channel 6 Transfer Complete flag
    +            TCIF6: u1,
    +            ///  Channel 6 Half Transfer Complete flag
    +            HTIF6: u1,
    +            ///  Channel 6 Transfer Error flag
    +            TEIF6: u1,
    +            ///  Channel 7 Global interrupt flag
    +            GIF7: u1,
    +            ///  Channel 7 Transfer Complete flag
    +            TCIF7: u1,
    +            ///  Channel 7 Half Transfer Complete flag
    +            HTIF7: u1,
    +            ///  Channel 7 Transfer Error flag
    +            TEIF7: u1,
    +            padding: u4,
    +        }),
    +        ///  DMA interrupt flag clear register (DMA_IFCR)
    +        IFCR: mmio.Mmio(packed struct(u32) {
    +            ///  Channel 1 Global interrupt clear
    +            CGIF1: u1,
    +            ///  Channel 1 Transfer Complete clear
    +            CTCIF1: u1,
    +            ///  Channel 1 Half Transfer clear
    +            CHTIF1: u1,
    +            ///  Channel 1 Transfer Error clear
    +            CTEIF1: u1,
    +            ///  Channel 2 Global interrupt clear
    +            CGIF2: u1,
    +            ///  Channel 2 Transfer Complete clear
    +            CTCIF2: u1,
    +            ///  Channel 2 Half Transfer clear
    +            CHTIF2: u1,
    +            ///  Channel 2 Transfer Error clear
    +            CTEIF2: u1,
    +            ///  Channel 3 Global interrupt clear
    +            CGIF3: u1,
    +            ///  Channel 3 Transfer Complete clear
    +            CTCIF3: u1,
    +            ///  Channel 3 Half Transfer clear
    +            CHTIF3: u1,
    +            ///  Channel 3 Transfer Error clear
    +            CTEIF3: u1,
    +            ///  Channel 4 Global interrupt clear
    +            CGIF4: u1,
    +            ///  Channel 4 Transfer Complete clear
    +            CTCIF4: u1,
    +            ///  Channel 4 Half Transfer clear
    +            CHTIF4: u1,
    +            ///  Channel 4 Transfer Error clear
    +            CTEIF4: u1,
    +            ///  Channel 5 Global interrupt clear
    +            CGIF5: u1,
    +            ///  Channel 5 Transfer Complete clear
    +            CTCIF5: u1,
    +            ///  Channel 5 Half Transfer clear
    +            CHTIF5: u1,
    +            ///  Channel 5 Transfer Error clear
    +            CTEIF5: u1,
    +            ///  Channel 6 Global interrupt clear
    +            CGIF6: u1,
    +            ///  Channel 6 Transfer Complete clear
    +            CTCIF6: u1,
    +            ///  Channel 6 Half Transfer clear
    +            CHTIF6: u1,
    +            ///  Channel 6 Transfer Error clear
    +            CTEIF6: u1,
    +            ///  Channel 7 Global interrupt clear
    +            CGIF7: u1,
    +            ///  Channel 7 Transfer Complete clear
    +            CTCIF7: u1,
    +            ///  Channel 7 Half Transfer clear
    +            CHTIF7: u1,
    +            ///  Channel 7 Transfer Error clear
    +            CTEIF7: u1,
    +            padding: u4,
    +        }),
    +        ///  DMA channel configuration register (DMA_CCR)
    +        CCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Channel enable
    +            EN: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Half Transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Data transfer direction
    +            DIR: u1,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral size
    +            PSIZE: u2,
    +            ///  Memory size
    +            MSIZE: u2,
    +            ///  Channel Priority level
    +            PL: u2,
    +            ///  Memory to memory mode
    +            MEM2MEM: u1,
    +            padding: u17,
    +        }),
    +        ///  DMA channel 1 number of data register
    +        CNDTR1: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  DMA channel 1 peripheral address register
    +        CPAR1: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  DMA channel 1 memory address register
    +        CMAR1: mmio.Mmio(packed struct(u32) {
    +            ///  Memory address
    +            MA: u32,
    +        }),
    +        reserved28: [4]u8,
    +        ///  DMA channel configuration register (DMA_CCR)
    +        CCR2: mmio.Mmio(packed struct(u32) {
    +            ///  Channel enable
    +            EN: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Half Transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Data transfer direction
    +            DIR: u1,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral size
    +            PSIZE: u2,
    +            ///  Memory size
    +            MSIZE: u2,
    +            ///  Channel Priority level
    +            PL: u2,
    +            ///  Memory to memory mode
    +            MEM2MEM: u1,
    +            padding: u17,
    +        }),
    +        ///  DMA channel 2 number of data register
    +        CNDTR2: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  DMA channel 2 peripheral address register
    +        CPAR2: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  DMA channel 2 memory address register
    +        CMAR2: mmio.Mmio(packed struct(u32) {
    +            ///  Memory address
    +            MA: u32,
    +        }),
    +        reserved48: [4]u8,
    +        ///  DMA channel configuration register (DMA_CCR)
    +        CCR3: mmio.Mmio(packed struct(u32) {
    +            ///  Channel enable
    +            EN: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Half Transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Data transfer direction
    +            DIR: u1,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral size
    +            PSIZE: u2,
    +            ///  Memory size
    +            MSIZE: u2,
    +            ///  Channel Priority level
    +            PL: u2,
    +            ///  Memory to memory mode
    +            MEM2MEM: u1,
    +            padding: u17,
    +        }),
    +        ///  DMA channel 3 number of data register
    +        CNDTR3: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  DMA channel 3 peripheral address register
    +        CPAR3: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  DMA channel 3 memory address register
    +        CMAR3: mmio.Mmio(packed struct(u32) {
    +            ///  Memory address
    +            MA: u32,
    +        }),
    +        reserved68: [4]u8,
    +        ///  DMA channel configuration register (DMA_CCR)
    +        CCR4: mmio.Mmio(packed struct(u32) {
    +            ///  Channel enable
    +            EN: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Half Transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Data transfer direction
    +            DIR: u1,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral size
    +            PSIZE: u2,
    +            ///  Memory size
    +            MSIZE: u2,
    +            ///  Channel Priority level
    +            PL: u2,
    +            ///  Memory to memory mode
    +            MEM2MEM: u1,
    +            padding: u17,
    +        }),
    +        ///  DMA channel 4 number of data register
    +        CNDTR4: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  DMA channel 4 peripheral address register
    +        CPAR4: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  DMA channel 4 memory address register
    +        CMAR4: mmio.Mmio(packed struct(u32) {
    +            ///  Memory address
    +            MA: u32,
    +        }),
    +        reserved88: [4]u8,
    +        ///  DMA channel configuration register (DMA_CCR)
    +        CCR5: mmio.Mmio(packed struct(u32) {
    +            ///  Channel enable
    +            EN: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Half Transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Data transfer direction
    +            DIR: u1,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral size
    +            PSIZE: u2,
    +            ///  Memory size
    +            MSIZE: u2,
    +            ///  Channel Priority level
    +            PL: u2,
    +            ///  Memory to memory mode
    +            MEM2MEM: u1,
    +            padding: u17,
    +        }),
    +        ///  DMA channel 5 number of data register
    +        CNDTR5: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  DMA channel 5 peripheral address register
    +        CPAR5: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  DMA channel 5 memory address register
    +        CMAR5: mmio.Mmio(packed struct(u32) {
    +            ///  Memory address
    +            MA: u32,
    +        }),
    +        reserved108: [4]u8,
    +        ///  DMA channel configuration register (DMA_CCR)
    +        CCR6: mmio.Mmio(packed struct(u32) {
    +            ///  Channel enable
    +            EN: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Half Transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Data transfer direction
    +            DIR: u1,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral size
    +            PSIZE: u2,
    +            ///  Memory size
    +            MSIZE: u2,
    +            ///  Channel Priority level
    +            PL: u2,
    +            ///  Memory to memory mode
    +            MEM2MEM: u1,
    +            padding: u17,
    +        }),
    +        ///  DMA channel 6 number of data register
    +        CNDTR6: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  DMA channel 6 peripheral address register
    +        CPAR6: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  DMA channel 6 memory address register
    +        CMAR6: mmio.Mmio(packed struct(u32) {
    +            ///  Memory address
    +            MA: u32,
    +        }),
    +        reserved128: [4]u8,
    +        ///  DMA channel configuration register (DMA_CCR)
    +        CCR7: mmio.Mmio(packed struct(u32) {
    +            ///  Channel enable
    +            EN: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Half Transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Data transfer direction
    +            DIR: u1,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral size
    +            PSIZE: u2,
    +            ///  Memory size
    +            MSIZE: u2,
    +            ///  Channel Priority level
    +            PL: u2,
    +            ///  Memory to memory mode
    +            MEM2MEM: u1,
    +            padding: u17,
    +        }),
    +        ///  DMA channel 7 number of data register
    +        CNDTR7: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  DMA channel 7 peripheral address register
    +        CPAR7: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  DMA channel 7 memory address register
    +        CMAR7: mmio.Mmio(packed struct(u32) {
    +            ///  Memory address
    +            MA: u32,
    +        }),
    +    };
    +
    +    ///  Ethernet: DMA controller operation
    +    pub const ETHERNET_DMA = extern struct {
    +        ///  Ethernet DMA bus mode register
    +        DMABMR: mmio.Mmio(packed struct(u32) {
    +            ///  Software reset
    +            SR: u1,
    +            ///  DMA Arbitration
    +            DA: u1,
    +            ///  Descriptor skip length
    +            DSL: u5,
    +            reserved8: u1,
    +            ///  Programmable burst length
    +            PBL: u6,
    +            ///  Rx Tx priority ratio
    +            RTPR: u2,
    +            ///  Fixed burst
    +            FB: u1,
    +            ///  Rx DMA PBL
    +            RDP: u6,
    +            ///  Use separate PBL
    +            USP: u1,
    +            ///  4xPBL mode
    +            FPM: u1,
    +            ///  Address-aligned beats
    +            AAB: u1,
    +            padding: u6,
    +        }),
    +        ///  Ethernet DMA transmit poll demand register
    +        DMATPDR: mmio.Mmio(packed struct(u32) {
    +            ///  Transmit poll demand
    +            TPD: u32,
    +        }),
    +        ///  EHERNET DMA receive poll demand register
    +        DMARPDR: mmio.Mmio(packed struct(u32) {
    +            ///  Receive poll demand
    +            RPD: u32,
    +        }),
    +        ///  Ethernet DMA receive descriptor list address register
    +        DMARDLAR: mmio.Mmio(packed struct(u32) {
    +            ///  Start of receive list
    +            SRL: u32,
    +        }),
    +        ///  Ethernet DMA transmit descriptor list address register
    +        DMATDLAR: mmio.Mmio(packed struct(u32) {
    +            ///  Start of transmit list
    +            STL: u32,
    +        }),
    +        ///  Ethernet DMA status register
    +        DMASR: mmio.Mmio(packed struct(u32) {
    +            ///  Transmit status
    +            TS: u1,
    +            ///  Transmit process stopped status
    +            TPSS: u1,
    +            ///  Transmit buffer unavailable status
    +            TBUS: u1,
    +            ///  Transmit jabber timeout status
    +            TJTS: u1,
    +            ///  Receive overflow status
    +            ROS: u1,
    +            ///  Transmit underflow status
    +            TUS: u1,
    +            ///  Receive status
    +            RS: u1,
    +            ///  Receive buffer unavailable status
    +            RBUS: u1,
    +            ///  Receive process stopped status
    +            RPSS: u1,
    +            ///  Receive watchdog timeout status
    +            PWTS: u1,
    +            ///  Early transmit status
    +            ETS: u1,
    +            reserved13: u2,
    +            ///  Fatal bus error status
    +            FBES: u1,
    +            ///  Early receive status
    +            ERS: u1,
    +            ///  Abnormal interrupt summary
    +            AIS: u1,
    +            ///  Normal interrupt summary
    +            NIS: u1,
    +            ///  Receive process state
    +            RPS: u3,
    +            ///  Transmit process state
    +            TPS: u3,
    +            ///  Error bits status
    +            EBS: u3,
    +            reserved27: u1,
    +            ///  MMC status
    +            MMCS: u1,
    +            ///  PMT status
    +            PMTS: u1,
    +            ///  Time stamp trigger status
    +            TSTS: u1,
    +            padding: u2,
    +        }),
    +        ///  Ethernet DMA operation mode register
    +        DMAOMR: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  SR
    +            SR: u1,
    +            ///  OSF
    +            OSF: u1,
    +            ///  RTC
    +            RTC: u2,
    +            reserved6: u1,
    +            ///  FUGF
    +            FUGF: u1,
    +            ///  FEF
    +            FEF: u1,
    +            reserved13: u5,
    +            ///  ST
    +            ST: u1,
    +            ///  TTC
    +            TTC: u3,
    +            reserved20: u3,
    +            ///  FTF
    +            FTF: u1,
    +            ///  TSF
    +            TSF: u1,
    +            reserved24: u2,
    +            ///  DFRF
    +            DFRF: u1,
    +            ///  RSF
    +            RSF: u1,
    +            ///  DTCEFD
    +            DTCEFD: u1,
    +            padding: u5,
    +        }),
    +        ///  Ethernet DMA interrupt enable register
    +        DMAIER: mmio.Mmio(packed struct(u32) {
    +            ///  Transmit interrupt enable
    +            TIE: u1,
    +            ///  Transmit process stopped interrupt enable
    +            TPSIE: u1,
    +            ///  Transmit buffer unavailable interrupt enable
    +            TBUIE: u1,
    +            ///  Transmit jabber timeout interrupt enable
    +            TJTIE: u1,
    +            ///  Overflow interrupt enable
    +            ROIE: u1,
    +            ///  Underflow interrupt enable
    +            TUIE: u1,
    +            ///  Receive interrupt enable
    +            RIE: u1,
    +            ///  Receive buffer unavailable interrupt enable
    +            RBUIE: u1,
    +            ///  Receive process stopped interrupt enable
    +            RPSIE: u1,
    +            ///  receive watchdog timeout interrupt enable
    +            RWTIE: u1,
    +            ///  Early transmit interrupt enable
    +            ETIE: u1,
    +            reserved13: u2,
    +            ///  Fatal bus error interrupt enable
    +            FBEIE: u1,
    +            ///  Early receive interrupt enable
    +            ERIE: u1,
    +            ///  Abnormal interrupt summary enable
    +            AISE: u1,
    +            ///  Normal interrupt summary enable
    +            NISE: u1,
    +            padding: u15,
    +        }),
    +        ///  Ethernet DMA missed frame and buffer overflow counter register
    +        DMAMFBOCR: mmio.Mmio(packed struct(u32) {
    +            ///  Missed frames by the controller
    +            MFC: u16,
    +            ///  Overflow bit for missed frame counter
    +            OMFC: u1,
    +            ///  Missed frames by the application
    +            MFA: u11,
    +            ///  Overflow bit for FIFO overflow counter
    +            OFOC: u1,
    +            padding: u3,
    +        }),
    +        reserved72: [36]u8,
    +        ///  Ethernet DMA current host transmit descriptor register
    +        DMACHTDR: mmio.Mmio(packed struct(u32) {
    +            ///  Host transmit descriptor address pointer
    +            HTDAP: u32,
    +        }),
    +        ///  Ethernet DMA current host receive descriptor register
    +        DMACHRDR: mmio.Mmio(packed struct(u32) {
    +            ///  Host receive descriptor address pointer
    +            HRDAP: u32,
    +        }),
    +        ///  Ethernet DMA current host transmit buffer address register
    +        DMACHTBAR: mmio.Mmio(packed struct(u32) {
    +            ///  Host transmit buffer address pointer
    +            HTBAP: u32,
    +        }),
    +        ///  Ethernet DMA current host receive buffer address register
    +        DMACHRBAR: mmio.Mmio(packed struct(u32) {
    +            ///  Host receive buffer address pointer
    +            HRBAP: u32,
    +        }),
    +    };
    +
    +    ///  Secure digital input/output interface
    +    pub const SDIO = extern struct {
    +        ///  Bits 1:0 = PWRCTRL: Power supply control bits
    +        POWER: mmio.Mmio(packed struct(u32) {
    +            ///  PWRCTRL
    +            PWRCTRL: u2,
    +            padding: u30,
    +        }),
    +        ///  SDI clock control register (SDIO_CLKCR)
    +        CLKCR: mmio.Mmio(packed struct(u32) {
    +            ///  Clock divide factor
    +            CLKDIV: u8,
    +            ///  Clock enable bit
    +            CLKEN: u1,
    +            ///  Power saving configuration bit
    +            PWRSAV: u1,
    +            ///  Clock divider bypass enable bit
    +            BYPASS: u1,
    +            ///  Wide bus mode enable bit
    +            WIDBUS: u2,
    +            ///  SDIO_CK dephasing selection bit
    +            NEGEDGE: u1,
    +            ///  HW Flow Control enable
    +            HWFC_EN: u1,
    +            padding: u17,
    +        }),
    +        ///  Bits 31:0 = : Command argument
    +        ARG: mmio.Mmio(packed struct(u32) {
    +            ///  Command argument
    +            CMDARG: u32,
    +        }),
    +        ///  SDIO command register (SDIO_CMD)
    +        CMD: mmio.Mmio(packed struct(u32) {
    +            ///  CMDINDEX
    +            CMDINDEX: u6,
    +            ///  WAITRESP
    +            WAITRESP: u2,
    +            ///  WAITINT
    +            WAITINT: u1,
    +            ///  WAITPEND
    +            WAITPEND: u1,
    +            ///  CPSMEN
    +            CPSMEN: u1,
    +            ///  SDIOSuspend
    +            SDIOSuspend: u1,
    +            ///  ENCMDcompl
    +            ENCMDcompl: u1,
    +            ///  nIEN
    +            nIEN: u1,
    +            ///  CE_ATACMD
    +            CE_ATACMD: u1,
    +            padding: u17,
    +        }),
    +        ///  SDIO command register
    +        RESPCMD: mmio.Mmio(packed struct(u32) {
    +            ///  RESPCMD
    +            RESPCMD: u6,
    +            padding: u26,
    +        }),
    +        ///  Bits 31:0 = CARDSTATUS1
    +        RESPI1: mmio.Mmio(packed struct(u32) {
    +            ///  CARDSTATUS1
    +            CARDSTATUS1: u32,
    +        }),
    +        ///  Bits 31:0 = CARDSTATUS2
    +        RESP2: mmio.Mmio(packed struct(u32) {
    +            ///  CARDSTATUS2
    +            CARDSTATUS2: u32,
    +        }),
    +        ///  Bits 31:0 = CARDSTATUS3
    +        RESP3: mmio.Mmio(packed struct(u32) {
    +            ///  CARDSTATUS3
    +            CARDSTATUS3: u32,
    +        }),
    +        ///  Bits 31:0 = CARDSTATUS4
    +        RESP4: mmio.Mmio(packed struct(u32) {
    +            ///  CARDSTATUS4
    +            CARDSTATUS4: u32,
    +        }),
    +        ///  Bits 31:0 = DATATIME: Data timeout period
    +        DTIMER: mmio.Mmio(packed struct(u32) {
    +            ///  Data timeout period
    +            DATATIME: u32,
    +        }),
    +        ///  Bits 24:0 = DATALENGTH: Data length value
    +        DLEN: mmio.Mmio(packed struct(u32) {
    +            ///  Data length value
    +            DATALENGTH: u25,
    +            padding: u7,
    +        }),
    +        ///  SDIO data control register (SDIO_DCTRL)
    +        DCTRL: mmio.Mmio(packed struct(u32) {
    +            ///  DTEN
    +            DTEN: u1,
    +            ///  DTDIR
    +            DTDIR: u1,
    +            ///  DTMODE
    +            DTMODE: u1,
    +            ///  DMAEN
    +            DMAEN: u1,
    +            ///  DBLOCKSIZE
    +            DBLOCKSIZE: u4,
    +            ///  PWSTART
    +            PWSTART: u1,
    +            ///  PWSTOP
    +            PWSTOP: u1,
    +            ///  RWMOD
    +            RWMOD: u1,
    +            ///  SDIOEN
    +            SDIOEN: u1,
    +            padding: u20,
    +        }),
    +        ///  Bits 24:0 = DATACOUNT: Data count value
    +        DCOUNT: mmio.Mmio(packed struct(u32) {
    +            ///  Data count value
    +            DATACOUNT: u25,
    +            padding: u7,
    +        }),
    +        ///  SDIO status register (SDIO_STA)
    +        STA: mmio.Mmio(packed struct(u32) {
    +            ///  CCRCFAIL
    +            CCRCFAIL: u1,
    +            ///  DCRCFAIL
    +            DCRCFAIL: u1,
    +            ///  CTIMEOUT
    +            CTIMEOUT: u1,
    +            ///  DTIMEOUT
    +            DTIMEOUT: u1,
    +            ///  TXUNDERR
    +            TXUNDERR: u1,
    +            ///  RXOVERR
    +            RXOVERR: u1,
    +            ///  CMDREND
    +            CMDREND: u1,
    +            ///  CMDSENT
    +            CMDSENT: u1,
    +            ///  DATAEND
    +            DATAEND: u1,
    +            ///  STBITERR
    +            STBITERR: u1,
    +            ///  DBCKEND
    +            DBCKEND: u1,
    +            ///  CMDACT
    +            CMDACT: u1,
    +            ///  TXACT
    +            TXACT: u1,
    +            ///  RXACT
    +            RXACT: u1,
    +            ///  TXFIFOHE
    +            TXFIFOHE: u1,
    +            ///  RXFIFOHF
    +            RXFIFOHF: u1,
    +            ///  TXFIFOF
    +            TXFIFOF: u1,
    +            ///  RXFIFOF
    +            RXFIFOF: u1,
    +            ///  TXFIFOE
    +            TXFIFOE: u1,
    +            ///  RXFIFOE
    +            RXFIFOE: u1,
    +            ///  TXDAVL
    +            TXDAVL: u1,
    +            ///  RXDAVL
    +            RXDAVL: u1,
    +            ///  SDIOIT
    +            SDIOIT: u1,
    +            ///  CEATAEND
    +            CEATAEND: u1,
    +            padding: u8,
    +        }),
    +        ///  SDIO interrupt clear register (SDIO_ICR)
    +        ICR: mmio.Mmio(packed struct(u32) {
    +            ///  CCRCFAILC
    +            CCRCFAILC: u1,
    +            ///  DCRCFAILC
    +            DCRCFAILC: u1,
    +            ///  CTIMEOUTC
    +            CTIMEOUTC: u1,
    +            ///  DTIMEOUTC
    +            DTIMEOUTC: u1,
    +            ///  TXUNDERRC
    +            TXUNDERRC: u1,
    +            ///  RXOVERRC
    +            RXOVERRC: u1,
    +            ///  CMDRENDC
    +            CMDRENDC: u1,
    +            ///  CMDSENTC
    +            CMDSENTC: u1,
    +            ///  DATAENDC
    +            DATAENDC: u1,
    +            ///  STBITERRC
    +            STBITERRC: u1,
    +            ///  DBCKENDC
    +            DBCKENDC: u1,
    +            reserved22: u11,
    +            ///  SDIOITC
    +            SDIOITC: u1,
    +            ///  CEATAENDC
    +            CEATAENDC: u1,
    +            padding: u8,
    +        }),
    +        ///  SDIO mask register (SDIO_MASK)
    +        MASK: mmio.Mmio(packed struct(u32) {
    +            ///  CCRCFAILIE
    +            CCRCFAILIE: u1,
    +            ///  DCRCFAILIE
    +            DCRCFAILIE: u1,
    +            ///  CTIMEOUTIE
    +            CTIMEOUTIE: u1,
    +            ///  DTIMEOUTIE
    +            DTIMEOUTIE: u1,
    +            ///  TXUNDERRIE
    +            TXUNDERRIE: u1,
    +            ///  RXOVERRIE
    +            RXOVERRIE: u1,
    +            ///  CMDRENDIE
    +            CMDRENDIE: u1,
    +            ///  CMDSENTIE
    +            CMDSENTIE: u1,
    +            ///  DATAENDIE
    +            DATAENDIE: u1,
    +            ///  STBITERRIE
    +            STBITERRIE: u1,
    +            ///  DBACKENDIE
    +            DBACKENDIE: u1,
    +            ///  CMDACTIE
    +            CMDACTIE: u1,
    +            ///  TXACTIE
    +            TXACTIE: u1,
    +            ///  RXACTIE
    +            RXACTIE: u1,
    +            ///  TXFIFOHEIE
    +            TXFIFOHEIE: u1,
    +            ///  RXFIFOHFIE
    +            RXFIFOHFIE: u1,
    +            ///  TXFIFOFIE
    +            TXFIFOFIE: u1,
    +            ///  RXFIFOFIE
    +            RXFIFOFIE: u1,
    +            ///  TXFIFOEIE
    +            TXFIFOEIE: u1,
    +            ///  RXFIFOEIE
    +            RXFIFOEIE: u1,
    +            ///  TXDAVLIE
    +            TXDAVLIE: u1,
    +            ///  RXDAVLIE
    +            RXDAVLIE: u1,
    +            ///  SDIOITIE
    +            SDIOITIE: u1,
    +            ///  CEATENDIE
    +            CEATENDIE: u1,
    +            padding: u8,
    +        }),
    +        reserved72: [8]u8,
    +        ///  Bits 23:0 = FIFOCOUNT: Remaining number of words to be written to or read from the FIFO
    +        FIFOCNT: mmio.Mmio(packed struct(u32) {
    +            ///  FIF0COUNT
    +            FIF0COUNT: u24,
    +            padding: u8,
    +        }),
    +        reserved128: [52]u8,
    +        ///  bits 31:0 = FIFOData: Receive and transmit FIFO data
    +        FIFO: mmio.Mmio(packed struct(u32) {
    +            ///  FIFOData
    +            FIFOData: u32,
    +        }),
    +    };
    +
    +    ///  Real time clock
    +    pub const RTC = extern struct {
    +        ///  RTC Control Register High
    +        CRH: mmio.Mmio(packed struct(u32) {
    +            ///  Second interrupt Enable
    +            SECIE: u1,
    +            ///  Alarm interrupt Enable
    +            ALRIE: u1,
    +            ///  Overflow interrupt Enable
    +            OWIE: u1,
    +            padding: u29,
    +        }),
    +        ///  RTC Control Register Low
    +        CRL: mmio.Mmio(packed struct(u32) {
    +            ///  Second Flag
    +            SECF: u1,
    +            ///  Alarm Flag
    +            ALRF: u1,
    +            ///  Overflow Flag
    +            OWF: u1,
    +            ///  Registers Synchronized Flag
    +            RSF: u1,
    +            ///  Configuration Flag
    +            CNF: u1,
    +            ///  RTC operation OFF
    +            RTOFF: u1,
    +            padding: u26,
    +        }),
    +        ///  RTC Prescaler Load Register High
    +        PRLH: mmio.Mmio(packed struct(u32) {
    +            ///  RTC Prescaler Load Register High
    +            PRLH: u4,
    +            padding: u28,
    +        }),
    +        ///  RTC Prescaler Load Register Low
    +        PRLL: mmio.Mmio(packed struct(u32) {
    +            ///  RTC Prescaler Divider Register Low
    +            PRLL: u16,
    +            padding: u16,
    +        }),
    +        ///  RTC Prescaler Divider Register High
    +        DIVH: mmio.Mmio(packed struct(u32) {
    +            ///  RTC prescaler divider register high
    +            DIVH: u4,
    +            padding: u28,
    +        }),
    +        ///  RTC Prescaler Divider Register Low
    +        DIVL: mmio.Mmio(packed struct(u32) {
    +            ///  RTC prescaler divider register Low
    +            DIVL: u16,
    +            padding: u16,
    +        }),
    +        ///  RTC Counter Register High
    +        CNTH: mmio.Mmio(packed struct(u32) {
    +            ///  RTC counter register high
    +            CNTH: u16,
    +            padding: u16,
    +        }),
    +        ///  RTC Counter Register Low
    +        CNTL: mmio.Mmio(packed struct(u32) {
    +            ///  RTC counter register Low
    +            CNTL: u16,
    +            padding: u16,
    +        }),
    +        ///  RTC Alarm Register High
    +        ALRH: mmio.Mmio(packed struct(u32) {
    +            ///  RTC alarm register high
    +            ALRH: u16,
    +            padding: u16,
    +        }),
    +        ///  RTC Alarm Register Low
    +        ALRL: mmio.Mmio(packed struct(u32) {
    +            ///  RTC alarm register low
    +            ALRL: u16,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  Backup registers
    +    pub const BKP = extern struct {
    +        ///  Backup data register (BKP_DR)
    +        DR1: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D1: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR2: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D2: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR3: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D3: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR4: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D4: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR5: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D5: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR6: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D6: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR7: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D7: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR8: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D8: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR9: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D9: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR10: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D10: u16,
    +            padding: u16,
    +        }),
    +        ///  RTC clock calibration register (BKP_RTCCR)
    +        RTCCR: mmio.Mmio(packed struct(u32) {
    +            ///  Calibration value
    +            CAL: u7,
    +            ///  Calibration Clock Output
    +            CCO: u1,
    +            ///  Alarm or second output enable
    +            ASOE: u1,
    +            ///  Alarm or second output selection
    +            ASOS: u1,
    +            padding: u22,
    +        }),
    +        ///  Backup control register (BKP_CR)
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  Tamper pin enable
    +            TPE: u1,
    +            ///  Tamper pin active level
    +            TPAL: u1,
    +            padding: u30,
    +        }),
    +        ///  BKP_CSR control/status register (BKP_CSR)
    +        CSR: mmio.Mmio(packed struct(u32) {
    +            ///  Clear Tamper event
    +            CTE: u1,
    +            ///  Clear Tamper Interrupt
    +            CTI: u1,
    +            ///  Tamper Pin interrupt enable
    +            TPIE: u1,
    +            reserved8: u5,
    +            ///  Tamper Event Flag
    +            TEF: u1,
    +            ///  Tamper Interrupt Flag
    +            TIF: u1,
    +            padding: u22,
    +        }),
    +        reserved60: [8]u8,
    +        ///  Backup data register (BKP_DR)
    +        DR11: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            DR11: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR12: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            DR12: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR13: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            DR13: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR14: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D14: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR15: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D15: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR16: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D16: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR17: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D17: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR18: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D18: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR19: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D19: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR20: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D20: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR21: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D21: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR22: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D22: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR23: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D23: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR24: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D24: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR25: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D25: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR26: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D26: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR27: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D27: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR28: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D28: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR29: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D29: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR30: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D30: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR31: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D31: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR32: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D32: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR33: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D33: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR34: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D34: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR35: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D35: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR36: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D36: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR37: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D37: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR38: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D38: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR39: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D39: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR40: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D40: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR41: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D41: u16,
    +            padding: u16,
    +        }),
    +        ///  Backup data register (BKP_DR)
    +        DR42: mmio.Mmio(packed struct(u32) {
    +            ///  Backup data
    +            D42: u16,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  Independent watchdog
    +    pub const IWDG = extern struct {
    +        ///  Key register (IWDG_KR)
    +        KR: mmio.Mmio(packed struct(u32) {
    +            ///  Key value
    +            KEY: u16,
    +            padding: u16,
    +        }),
    +        ///  Prescaler register (IWDG_PR)
    +        PR: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler divider
    +            PR: u3,
    +            padding: u29,
    +        }),
    +        ///  Reload register (IWDG_RLR)
    +        RLR: mmio.Mmio(packed struct(u32) {
    +            ///  Watchdog counter reload value
    +            RL: u12,
    +            padding: u20,
    +        }),
    +        ///  Status register (IWDG_SR)
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Watchdog prescaler value update
    +            PVU: u1,
    +            ///  Watchdog counter reload value update
    +            RVU: u1,
    +            padding: u30,
    +        }),
    +    };
    +
    +    ///  Window watchdog
    +    pub const WWDG = extern struct {
    +        ///  Control register (WWDG_CR)
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  7-bit counter (MSB to LSB)
    +            T: u7,
    +            ///  Activation bit
    +            WDGA: u1,
    +            padding: u24,
    +        }),
    +        ///  Configuration register (WWDG_CFR)
    +        CFR: mmio.Mmio(packed struct(u32) {
    +            ///  7-bit window value
    +            W: u7,
    +            ///  Timer Base
    +            WDGTB: u2,
    +            ///  Early Wakeup Interrupt
    +            EWI: u1,
    +            padding: u22,
    +        }),
    +        ///  Status register (WWDG_SR)
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Early Wakeup Interrupt
    +            EWI: u1,
    +            padding: u31,
    +        }),
    +    };
    +
    +    ///  Advanced timer
    +    pub const TIM1 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            ///  One-pulse mode
    +            OPM: u1,
    +            ///  Direction
    +            DIR: u1,
    +            ///  Center-aligned mode selection
    +            CMS: u2,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            ///  Clock division
    +            CKD: u2,
    +            padding: u22,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/compare preloaded control
    +            CCPC: u1,
    +            reserved2: u1,
    +            ///  Capture/compare control update selection
    +            CCUS: u1,
    +            ///  Capture/compare DMA selection
    +            CCDS: u1,
    +            ///  Master mode selection
    +            MMS: u3,
    +            ///  TI1 selection
    +            TI1S: u1,
    +            ///  Output Idle state 1
    +            OIS1: u1,
    +            ///  Output Idle state 1
    +            OIS1N: u1,
    +            ///  Output Idle state 2
    +            OIS2: u1,
    +            ///  Output Idle state 2
    +            OIS2N: u1,
    +            ///  Output Idle state 3
    +            OIS3: u1,
    +            ///  Output Idle state 3
    +            OIS3N: u1,
    +            ///  Output Idle state 4
    +            OIS4: u1,
    +            padding: u17,
    +        }),
    +        ///  slave mode control register
    +        SMCR: mmio.Mmio(packed struct(u32) {
    +            ///  Slave mode selection
    +            SMS: u3,
    +            reserved4: u1,
    +            ///  Trigger selection
    +            TS: u3,
    +            ///  Master/Slave mode
    +            MSM: u1,
    +            ///  External trigger filter
    +            ETF: u4,
    +            ///  External trigger prescaler
    +            ETPS: u2,
    +            ///  External clock enable
    +            ECE: u1,
    +            ///  External trigger polarity
    +            ETP: u1,
    +            padding: u16,
    +        }),
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            ///  Capture/Compare 1 interrupt enable
    +            CC1IE: u1,
    +            ///  Capture/Compare 2 interrupt enable
    +            CC2IE: u1,
    +            ///  Capture/Compare 3 interrupt enable
    +            CC3IE: u1,
    +            ///  Capture/Compare 4 interrupt enable
    +            CC4IE: u1,
    +            ///  COM interrupt enable
    +            COMIE: u1,
    +            ///  Trigger interrupt enable
    +            TIE: u1,
    +            ///  Break interrupt enable
    +            BIE: u1,
    +            ///  Update DMA request enable
    +            UDE: u1,
    +            ///  Capture/Compare 1 DMA request enable
    +            CC1DE: u1,
    +            ///  Capture/Compare 2 DMA request enable
    +            CC2DE: u1,
    +            ///  Capture/Compare 3 DMA request enable
    +            CC3DE: u1,
    +            ///  Capture/Compare 4 DMA request enable
    +            CC4DE: u1,
    +            ///  COM DMA request enable
    +            COMDE: u1,
    +            ///  Trigger DMA request enable
    +            TDE: u1,
    +            padding: u17,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            ///  Capture/compare 1 interrupt flag
    +            CC1IF: u1,
    +            ///  Capture/Compare 2 interrupt flag
    +            CC2IF: u1,
    +            ///  Capture/Compare 3 interrupt flag
    +            CC3IF: u1,
    +            ///  Capture/Compare 4 interrupt flag
    +            CC4IF: u1,
    +            ///  COM interrupt flag
    +            COMIF: u1,
    +            ///  Trigger interrupt flag
    +            TIF: u1,
    +            ///  Break interrupt flag
    +            BIF: u1,
    +            reserved9: u1,
    +            ///  Capture/Compare 1 overcapture flag
    +            CC1OF: u1,
    +            ///  Capture/compare 2 overcapture flag
    +            CC2OF: u1,
    +            ///  Capture/Compare 3 overcapture flag
    +            CC3OF: u1,
    +            ///  Capture/Compare 4 overcapture flag
    +            CC4OF: u1,
    +            padding: u19,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            ///  Capture/compare 1 generation
    +            CC1G: u1,
    +            ///  Capture/compare 2 generation
    +            CC2G: u1,
    +            ///  Capture/compare 3 generation
    +            CC3G: u1,
    +            ///  Capture/compare 4 generation
    +            CC4G: u1,
    +            ///  Capture/Compare control update generation
    +            COMG: u1,
    +            ///  Trigger generation
    +            TG: u1,
    +            ///  Break generation
    +            BG: u1,
    +            padding: u24,
    +        }),
    +        ///  capture/compare mode register (output mode)
    +        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 selection
    +            CC1S: u2,
    +            ///  Output Compare 1 fast enable
    +            OC1FE: u1,
    +            ///  Output Compare 1 preload enable
    +            OC1PE: u1,
    +            ///  Output Compare 1 mode
    +            OC1M: u3,
    +            ///  Output Compare 1 clear enable
    +            OC1CE: u1,
    +            ///  Capture/Compare 2 selection
    +            CC2S: u2,
    +            ///  Output Compare 2 fast enable
    +            OC2FE: u1,
    +            ///  Output Compare 2 preload enable
    +            OC2PE: u1,
    +            ///  Output Compare 2 mode
    +            OC2M: u3,
    +            ///  Output Compare 2 clear enable
    +            OC2CE: u1,
    +            padding: u16,
    +        }),
    +        ///  capture/compare mode register (output mode)
    +        CCMR2_Output: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 3 selection
    +            CC3S: u2,
    +            ///  Output compare 3 fast enable
    +            OC3FE: u1,
    +            ///  Output compare 3 preload enable
    +            OC3PE: u1,
    +            ///  Output compare 3 mode
    +            OC3M: u3,
    +            ///  Output compare 3 clear enable
    +            OC3CE: u1,
    +            ///  Capture/Compare 4 selection
    +            CC4S: u2,
    +            ///  Output compare 4 fast enable
    +            OC4FE: u1,
    +            ///  Output compare 4 preload enable
    +            OC4PE: u1,
    +            ///  Output compare 4 mode
    +            OC4M: u3,
    +            ///  Output compare 4 clear enable
    +            OC4CE: u1,
    +            padding: u16,
    +        }),
    +        ///  capture/compare enable register
    +        CCER: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 output enable
    +            CC1E: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1P: u1,
    +            ///  Capture/Compare 1 complementary output enable
    +            CC1NE: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1NP: u1,
    +            ///  Capture/Compare 2 output enable
    +            CC2E: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2P: u1,
    +            ///  Capture/Compare 2 complementary output enable
    +            CC2NE: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2NP: u1,
    +            ///  Capture/Compare 3 output enable
    +            CC3E: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC3P: u1,
    +            ///  Capture/Compare 3 complementary output enable
    +            CC3NE: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC3NP: u1,
    +            ///  Capture/Compare 4 output enable
    +            CC4E: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC4P: u1,
    +            padding: u18,
    +        }),
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  counter value
    +            CNT: u16,
    +            padding: u16,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Auto-reload value
    +            ARR: u16,
    +            padding: u16,
    +        }),
    +        ///  repetition counter register
    +        RCR: mmio.Mmio(packed struct(u32) {
    +            ///  Repetition counter value
    +            REP: u8,
    +            padding: u24,
    +        }),
    +        ///  capture/compare register 1
    +        CCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 value
    +            CCR1: u16,
    +            padding: u16,
    +        }),
    +        ///  capture/compare register 2
    +        CCR2: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 2 value
    +            CCR2: u16,
    +            padding: u16,
    +        }),
    +        ///  capture/compare register 3
    +        CCR3: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare value
    +            CCR3: u16,
    +            padding: u16,
    +        }),
    +        ///  capture/compare register 4
    +        CCR4: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare value
    +            CCR4: u16,
    +            padding: u16,
    +        }),
    +        ///  break and dead-time register
    +        BDTR: mmio.Mmio(packed struct(u32) {
    +            ///  Dead-time generator setup
    +            DTG: u8,
    +            ///  Lock configuration
    +            LOCK: u2,
    +            ///  Off-state selection for Idle mode
    +            OSSI: u1,
    +            ///  Off-state selection for Run mode
    +            OSSR: u1,
    +            ///  Break enable
    +            BKE: u1,
    +            ///  Break polarity
    +            BKP: u1,
    +            ///  Automatic output enable
    +            AOE: u1,
    +            ///  Main output enable
    +            MOE: u1,
    +            padding: u16,
    +        }),
    +        ///  DMA control register
    +        DCR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA base address
    +            DBA: u5,
    +            reserved8: u3,
    +            ///  DMA burst length
    +            DBL: u5,
    +            padding: u19,
    +        }),
    +        ///  DMA address for full transfer
    +        DMAR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA register for burst accesses
    +            DMAB: u16,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  Ethernet: Precision time protocol
    +    pub const ETHERNET_PTP = extern struct {
    +        ///  Ethernet PTP time stamp control register (ETH_PTPTSCR)
    +        PTPTSCR: mmio.Mmio(packed struct(u32) {
    +            ///  Time stamp enable
    +            TSE: u1,
    +            ///  Time stamp fine or coarse update
    +            TSFCU: u1,
    +            ///  Time stamp system time initialize
    +            TSSTI: u1,
    +            ///  Time stamp system time update
    +            TSSTU: u1,
    +            ///  Time stamp interrupt trigger enable
    +            TSITE: u1,
    +            ///  Time stamp addend register update
    +            TSARU: u1,
    +            padding: u26,
    +        }),
    +        ///  Ethernet PTP subsecond increment register
    +        PTPSSIR: mmio.Mmio(packed struct(u32) {
    +            ///  System time subsecond increment
    +            STSSI: u8,
    +            padding: u24,
    +        }),
    +        ///  Ethernet PTP time stamp high register
    +        PTPTSHR: mmio.Mmio(packed struct(u32) {
    +            ///  System time second
    +            STS: u32,
    +        }),
    +        ///  Ethernet PTP time stamp low register (ETH_PTPTSLR)
    +        PTPTSLR: mmio.Mmio(packed struct(u32) {
    +            ///  System time subseconds
    +            STSS: u31,
    +            ///  System time positive or negative sign
    +            STPNS: u1,
    +        }),
    +        ///  Ethernet PTP time stamp high update register
    +        PTPTSHUR: mmio.Mmio(packed struct(u32) {
    +            ///  Time stamp update second
    +            TSUS: u32,
    +        }),
    +        ///  Ethernet PTP time stamp low update register (ETH_PTPTSLUR)
    +        PTPTSLUR: mmio.Mmio(packed struct(u32) {
    +            ///  Time stamp update subseconds
    +            TSUSS: u31,
    +            ///  Time stamp update positive or negative sign
    +            TSUPNS: u1,
    +        }),
    +        ///  Ethernet PTP time stamp addend register
    +        PTPTSAR: mmio.Mmio(packed struct(u32) {
    +            ///  Time stamp addend
    +            TSA: u32,
    +        }),
    +        ///  Ethernet PTP target time high register
    +        PTPTTHR: mmio.Mmio(packed struct(u32) {
    +            ///  Target time stamp high
    +            TTSH: u32,
    +        }),
    +        ///  Ethernet PTP target time low register
    +        PTPTTLR: mmio.Mmio(packed struct(u32) {
    +            ///  Target time stamp low
    +            TTSL: u32,
    +        }),
    +    };
    +
    +    ///  General purpose timer
    +    pub const TIM2 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            ///  One-pulse mode
    +            OPM: u1,
    +            ///  Direction
    +            DIR: u1,
    +            ///  Center-aligned mode selection
    +            CMS: u2,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            ///  Clock division
    +            CKD: u2,
    +            padding: u22,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            reserved3: u3,
    +            ///  Capture/compare DMA selection
    +            CCDS: u1,
    +            ///  Master mode selection
    +            MMS: u3,
    +            ///  TI1 selection
    +            TI1S: u1,
    +            padding: u24,
    +        }),
    +        ///  slave mode control register
    +        SMCR: mmio.Mmio(packed struct(u32) {
    +            ///  Slave mode selection
    +            SMS: u3,
    +            reserved4: u1,
    +            ///  Trigger selection
    +            TS: u3,
    +            ///  Master/Slave mode
    +            MSM: u1,
    +            ///  External trigger filter
    +            ETF: u4,
    +            ///  External trigger prescaler
    +            ETPS: u2,
    +            ///  External clock enable
    +            ECE: u1,
    +            ///  External trigger polarity
    +            ETP: u1,
    +            padding: u16,
    +        }),
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            ///  Capture/Compare 1 interrupt enable
    +            CC1IE: u1,
    +            ///  Capture/Compare 2 interrupt enable
    +            CC2IE: u1,
    +            ///  Capture/Compare 3 interrupt enable
    +            CC3IE: u1,
    +            ///  Capture/Compare 4 interrupt enable
    +            CC4IE: u1,
    +            reserved6: u1,
    +            ///  Trigger interrupt enable
    +            TIE: u1,
    +            reserved8: u1,
    +            ///  Update DMA request enable
    +            UDE: u1,
    +            ///  Capture/Compare 1 DMA request enable
    +            CC1DE: u1,
    +            ///  Capture/Compare 2 DMA request enable
    +            CC2DE: u1,
    +            ///  Capture/Compare 3 DMA request enable
    +            CC3DE: u1,
    +            ///  Capture/Compare 4 DMA request enable
    +            CC4DE: u1,
    +            reserved14: u1,
    +            ///  Trigger DMA request enable
    +            TDE: u1,
    +            padding: u17,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            ///  Capture/compare 1 interrupt flag
    +            CC1IF: u1,
    +            ///  Capture/Compare 2 interrupt flag
    +            CC2IF: u1,
    +            ///  Capture/Compare 3 interrupt flag
    +            CC3IF: u1,
    +            ///  Capture/Compare 4 interrupt flag
    +            CC4IF: u1,
    +            reserved6: u1,
    +            ///  Trigger interrupt flag
    +            TIF: u1,
    +            reserved9: u2,
    +            ///  Capture/Compare 1 overcapture flag
    +            CC1OF: u1,
    +            ///  Capture/compare 2 overcapture flag
    +            CC2OF: u1,
    +            ///  Capture/Compare 3 overcapture flag
    +            CC3OF: u1,
    +            ///  Capture/Compare 4 overcapture flag
    +            CC4OF: u1,
    +            padding: u19,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            ///  Capture/compare 1 generation
    +            CC1G: u1,
    +            ///  Capture/compare 2 generation
    +            CC2G: u1,
    +            ///  Capture/compare 3 generation
    +            CC3G: u1,
    +            ///  Capture/compare 4 generation
    +            CC4G: u1,
    +            reserved6: u1,
    +            ///  Trigger generation
    +            TG: u1,
    +            padding: u25,
    +        }),
    +        ///  capture/compare mode register 1 (output mode)
    +        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 selection
    +            CC1S: u2,
    +            ///  Output compare 1 fast enable
    +            OC1FE: u1,
    +            ///  Output compare 1 preload enable
    +            OC1PE: u1,
    +            ///  Output compare 1 mode
    +            OC1M: u3,
    +            ///  Output compare 1 clear enable
    +            OC1CE: u1,
    +            ///  Capture/Compare 2 selection
    +            CC2S: u2,
    +            ///  Output compare 2 fast enable
    +            OC2FE: u1,
    +            ///  Output compare 2 preload enable
    +            OC2PE: u1,
    +            ///  Output compare 2 mode
    +            OC2M: u3,
    +            ///  Output compare 2 clear enable
    +            OC2CE: u1,
    +            padding: u16,
    +        }),
    +        ///  capture/compare mode register 2 (output mode)
    +        CCMR2_Output: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 3 selection
    +            CC3S: u2,
    +            ///  Output compare 3 fast enable
    +            OC3FE: u1,
    +            ///  Output compare 3 preload enable
    +            OC3PE: u1,
    +            ///  Output compare 3 mode
    +            OC3M: u3,
    +            ///  Output compare 3 clear enable
    +            OC3CE: u1,
    +            ///  Capture/Compare 4 selection
    +            CC4S: u2,
    +            ///  Output compare 4 fast enable
    +            OC4FE: u1,
    +            ///  Output compare 4 preload enable
    +            OC4PE: u1,
    +            ///  Output compare 4 mode
    +            OC4M: u3,
    +            ///  Output compare 4 clear enable
    +            O24CE: u1,
    +            padding: u16,
    +        }),
    +        ///  capture/compare enable register
    +        CCER: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 output enable
    +            CC1E: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1P: u1,
    +            reserved4: u2,
    +            ///  Capture/Compare 2 output enable
    +            CC2E: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2P: u1,
    +            reserved8: u2,
    +            ///  Capture/Compare 3 output enable
    +            CC3E: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC3P: u1,
    +            reserved12: u2,
    +            ///  Capture/Compare 4 output enable
    +            CC4E: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC4P: u1,
    +            padding: u18,
    +        }),
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  counter value
    +            CNT: u16,
    +            padding: u16,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Auto-reload value
    +            ARR: u16,
    +            padding: u16,
    +        }),
    +        reserved52: [4]u8,
    +        ///  capture/compare register 1
    +        CCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 value
    +            CCR1: u16,
    +            padding: u16,
    +        }),
    +        ///  capture/compare register 2
    +        CCR2: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 2 value
    +            CCR2: u16,
    +            padding: u16,
    +        }),
    +        ///  capture/compare register 3
    +        CCR3: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare value
    +            CCR3: u16,
    +            padding: u16,
    +        }),
    +        ///  capture/compare register 4
    +        CCR4: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare value
    +            CCR4: u16,
    +            padding: u16,
    +        }),
    +        reserved72: [4]u8,
    +        ///  DMA control register
    +        DCR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA base address
    +            DBA: u5,
    +            reserved8: u3,
    +            ///  DMA burst length
    +            DBL: u5,
    +            padding: u19,
    +        }),
    +        ///  DMA address for full transfer
    +        DMAR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA register for burst accesses
    +            DMAB: u16,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  Ethernet: media access control
    +    pub const ETHERNET_MAC = extern struct {
    +        ///  Ethernet MAC configuration register (ETH_MACCR)
    +        MACCR: mmio.Mmio(packed struct(u32) {
    +            reserved2: u2,
    +            ///  Receiver enable
    +            RE: u1,
    +            ///  Transmitter enable
    +            TE: u1,
    +            ///  Deferral check
    +            DC: u1,
    +            ///  Back-off limit
    +            BL: u2,
    +            ///  Automatic pad/CRC stripping
    +            APCS: u1,
    +            reserved9: u1,
    +            ///  Retry disable
    +            RD: u1,
    +            ///  IPv4 checksum offload
    +            IPCO: u1,
    +            ///  Duplex mode
    +            DM: u1,
    +            ///  Loopback mode
    +            LM: u1,
    +            ///  Receive own disable
    +            ROD: u1,
    +            ///  Fast Ethernet speed
    +            FES: u1,
    +            reserved16: u1,
    +            ///  Carrier sense disable
    +            CSD: u1,
    +            ///  Interframe gap
    +            IFG: u3,
    +            reserved22: u2,
    +            ///  Jabber disable
    +            JD: u1,
    +            ///  Watchdog disable
    +            WD: u1,
    +            padding: u8,
    +        }),
    +        ///  Ethernet MAC frame filter register (ETH_MACCFFR)
    +        MACFFR: mmio.Mmio(packed struct(u32) {
    +            ///  Promiscuous mode
    +            PM: u1,
    +            ///  Hash unicast
    +            HU: u1,
    +            ///  Hash multicast
    +            HM: u1,
    +            ///  Destination address inverse filtering
    +            DAIF: u1,
    +            ///  Pass all multicast
    +            PAM: u1,
    +            ///  Broadcast frames disable
    +            BFD: u1,
    +            ///  Pass control frames
    +            PCF: u2,
    +            ///  Source address inverse filtering
    +            SAIF: u1,
    +            ///  Source address filter
    +            SAF: u1,
    +            ///  Hash or perfect filter
    +            HPF: u1,
    +            reserved31: u20,
    +            ///  Receive all
    +            RA: u1,
    +        }),
    +        ///  Ethernet MAC hash table high register
    +        MACHTHR: mmio.Mmio(packed struct(u32) {
    +            ///  Hash table high
    +            HTH: u32,
    +        }),
    +        ///  Ethernet MAC hash table low register
    +        MACHTLR: mmio.Mmio(packed struct(u32) {
    +            ///  Hash table low
    +            HTL: u32,
    +        }),
    +        ///  Ethernet MAC MII address register (ETH_MACMIIAR)
    +        MACMIIAR: mmio.Mmio(packed struct(u32) {
    +            ///  MII busy
    +            MB: u1,
    +            ///  MII write
    +            MW: u1,
    +            ///  Clock range
    +            CR: u3,
    +            reserved6: u1,
    +            ///  MII register
    +            MR: u5,
    +            ///  PHY address
    +            PA: u5,
    +            padding: u16,
    +        }),
    +        ///  Ethernet MAC MII data register (ETH_MACMIIDR)
    +        MACMIIDR: mmio.Mmio(packed struct(u32) {
    +            ///  MII data
    +            MD: u16,
    +            padding: u16,
    +        }),
    +        ///  Ethernet MAC flow control register (ETH_MACFCR)
    +        MACFCR: mmio.Mmio(packed struct(u32) {
    +            ///  Flow control busy/back pressure activate
    +            FCB_BPA: u1,
    +            ///  Transmit flow control enable
    +            TFCE: u1,
    +            ///  Receive flow control enable
    +            RFCE: u1,
    +            ///  Unicast pause frame detect
    +            UPFD: u1,
    +            ///  Pause low threshold
    +            PLT: u2,
    +            reserved7: u1,
    +            ///  Zero-quanta pause disable
    +            ZQPD: u1,
    +            reserved16: u8,
    +            ///  Pass control frames
    +            PT: u16,
    +        }),
    +        ///  Ethernet MAC VLAN tag register (ETH_MACVLANTR)
    +        MACVLANTR: mmio.Mmio(packed struct(u32) {
    +            ///  VLAN tag identifier (for receive frames)
    +            VLANTI: u16,
    +            ///  12-bit VLAN tag comparison
    +            VLANTC: u1,
    +            padding: u15,
    +        }),
    +        reserved40: [8]u8,
    +        ///  Ethernet MAC remote wakeup frame filter register (ETH_MACRWUFFR)
    +        MACRWUFFR: u32,
    +        ///  Ethernet MAC PMT control and status register (ETH_MACPMTCSR)
    +        MACPMTCSR: mmio.Mmio(packed struct(u32) {
    +            ///  Power down
    +            PD: u1,
    +            ///  Magic Packet enable
    +            MPE: u1,
    +            ///  Wakeup frame enable
    +            WFE: u1,
    +            reserved5: u2,
    +            ///  Magic packet received
    +            MPR: u1,
    +            ///  Wakeup frame received
    +            WFR: u1,
    +            reserved9: u2,
    +            ///  Global unicast
    +            GU: u1,
    +            reserved31: u21,
    +            ///  Wakeup frame filter register pointer reset
    +            WFFRPR: u1,
    +        }),
    +        reserved56: [8]u8,
    +        ///  Ethernet MAC interrupt status register (ETH_MACSR)
    +        MACSR: mmio.Mmio(packed struct(u32) {
    +            reserved3: u3,
    +            ///  PMT status
    +            PMTS: u1,
    +            ///  MMC status
    +            MMCS: u1,
    +            ///  MMC receive status
    +            MMCRS: u1,
    +            ///  MMC transmit status
    +            MMCTS: u1,
    +            reserved9: u2,
    +            ///  Time stamp trigger status
    +            TSTS: u1,
    +            padding: u22,
    +        }),
    +        ///  Ethernet MAC interrupt mask register (ETH_MACIMR)
    +        MACIMR: mmio.Mmio(packed struct(u32) {
    +            reserved3: u3,
    +            ///  PMT interrupt mask
    +            PMTIM: u1,
    +            reserved9: u5,
    +            ///  Time stamp trigger interrupt mask
    +            TSTIM: u1,
    +            padding: u22,
    +        }),
    +        ///  Ethernet MAC address 0 high register (ETH_MACA0HR)
    +        MACA0HR: mmio.Mmio(packed struct(u32) {
    +            ///  MAC address0 high
    +            MACA0H: u16,
    +            reserved31: u15,
    +            ///  Always 1
    +            MO: u1,
    +        }),
    +        ///  Ethernet MAC address 0 low register
    +        MACA0LR: mmio.Mmio(packed struct(u32) {
    +            ///  MAC address0 low
    +            MACA0L: u32,
    +        }),
    +        ///  Ethernet MAC address 1 high register (ETH_MACA1HR)
    +        MACA1HR: mmio.Mmio(packed struct(u32) {
    +            ///  MAC address1 high
    +            MACA1H: u16,
    +            reserved24: u8,
    +            ///  Mask byte control
    +            MBC: u6,
    +            ///  Source address
    +            SA: u1,
    +            ///  Address enable
    +            AE: u1,
    +        }),
    +        ///  Ethernet MAC address1 low register
    +        MACA1LR: mmio.Mmio(packed struct(u32) {
    +            ///  MAC address1 low
    +            MACA1L: u32,
    +        }),
    +        ///  Ethernet MAC address 2 high register (ETH_MACA2HR)
    +        MACA2HR: mmio.Mmio(packed struct(u32) {
    +            ///  Ethernet MAC address 2 high register
    +            ETH_MACA2HR: u16,
    +            reserved24: u8,
    +            ///  Mask byte control
    +            MBC: u6,
    +            ///  Source address
    +            SA: u1,
    +            ///  Address enable
    +            AE: u1,
    +        }),
    +        ///  Ethernet MAC address 2 low register
    +        MACA2LR: mmio.Mmio(packed struct(u32) {
    +            ///  MAC address2 low
    +            MACA2L: u31,
    +            padding: u1,
    +        }),
    +        ///  Ethernet MAC address 3 high register (ETH_MACA3HR)
    +        MACA3HR: mmio.Mmio(packed struct(u32) {
    +            ///  MAC address3 high
    +            MACA3H: u16,
    +            reserved24: u8,
    +            ///  Mask byte control
    +            MBC: u6,
    +            ///  Source address
    +            SA: u1,
    +            ///  Address enable
    +            AE: u1,
    +        }),
    +        ///  Ethernet MAC address 3 low register
    +        MACA3LR: mmio.Mmio(packed struct(u32) {
    +            ///  MAC address3 low
    +            MBCA3L: u32,
    +        }),
    +    };
    +
    +    ///  Ethernet: MAC management counters
    +    pub const ETHERNET_MMC = extern struct {
    +        ///  Ethernet MMC control register (ETH_MMCCR)
    +        MMCCR: mmio.Mmio(packed struct(u32) {
    +            ///  Counter reset
    +            CR: u1,
    +            ///  Counter stop rollover
    +            CSR: u1,
    +            ///  Reset on read
    +            ROR: u1,
    +            reserved31: u28,
    +            ///  MMC counter freeze
    +            MCF: u1,
    +        }),
    +        ///  Ethernet MMC receive interrupt register (ETH_MMCRIR)
    +        MMCRIR: mmio.Mmio(packed struct(u32) {
    +            reserved5: u5,
    +            ///  Received frames CRC error status
    +            RFCES: u1,
    +            ///  Received frames alignment error status
    +            RFAES: u1,
    +            reserved17: u10,
    +            ///  Received Good Unicast Frames Status
    +            RGUFS: u1,
    +            padding: u14,
    +        }),
    +        ///  Ethernet MMC transmit interrupt register (ETH_MMCTIR)
    +        MMCTIR: mmio.Mmio(packed struct(u32) {
    +            reserved14: u14,
    +            ///  Transmitted good frames single collision status
    +            TGFSCS: u1,
    +            ///  Transmitted good frames more single collision status
    +            TGFMSCS: u1,
    +            reserved21: u5,
    +            ///  Transmitted good frames status
    +            TGFS: u1,
    +            padding: u10,
    +        }),
    +        ///  Ethernet MMC receive interrupt mask register (ETH_MMCRIMR)
    +        MMCRIMR: mmio.Mmio(packed struct(u32) {
    +            reserved5: u5,
    +            ///  Received frame CRC error mask
    +            RFCEM: u1,
    +            ///  Received frames alignment error mask
    +            RFAEM: u1,
    +            reserved17: u10,
    +            ///  Received good unicast frames mask
    +            RGUFM: u1,
    +            padding: u14,
    +        }),
    +        ///  Ethernet MMC transmit interrupt mask register (ETH_MMCTIMR)
    +        MMCTIMR: mmio.Mmio(packed struct(u32) {
    +            reserved14: u14,
    +            ///  Transmitted good frames single collision mask
    +            TGFSCM: u1,
    +            ///  Transmitted good frames more single collision mask
    +            TGFMSCM: u1,
    +            reserved21: u5,
    +            ///  Transmitted good frames mask
    +            TGFM: u1,
    +            padding: u10,
    +        }),
    +        reserved76: [56]u8,
    +        ///  Ethernet MMC transmitted good frames after a single collision counter
    +        MMCTGFSCCR: mmio.Mmio(packed struct(u32) {
    +            ///  Transmitted good frames after a single collision counter
    +            TGFSCC: u32,
    +        }),
    +        ///  Ethernet MMC transmitted good frames after more than a single collision
    +        MMCTGFMSCCR: mmio.Mmio(packed struct(u32) {
    +            ///  Transmitted good frames after more than a single collision counter
    +            TGFMSCC: u32,
    +        }),
    +        reserved104: [20]u8,
    +        ///  Ethernet MMC transmitted good frames counter register
    +        MMCTGFCR: mmio.Mmio(packed struct(u32) {
    +            ///  Transmitted good frames counter
    +            TGFC: u32,
    +        }),
    +        reserved148: [40]u8,
    +        ///  Ethernet MMC received frames with CRC error counter register
    +        MMCRFCECR: mmio.Mmio(packed struct(u32) {
    +            ///  Received frames with CRC error counter
    +            RFCFC: u32,
    +        }),
    +        ///  Ethernet MMC received frames with alignment error counter register
    +        MMCRFAECR: mmio.Mmio(packed struct(u32) {
    +            ///  Received frames with alignment error counter
    +            RFAEC: u32,
    +        }),
    +        reserved196: [40]u8,
    +        ///  MMC received good unicast frames counter register
    +        MMCRGUFCR: mmio.Mmio(packed struct(u32) {
    +            ///  Received good unicast frames counter
    +            RGUFC: u32,
    +        }),
    +    };
    +
    +    ///  USB on the go full speed
    +    pub const OTG_FS_PWRCLK = extern struct {
    +        ///  OTG_FS power and clock gating control register
    +        FS_PCGCCTL: mmio.Mmio(packed struct(u32) {
    +            ///  Stop PHY clock
    +            STPPCLK: u1,
    +            ///  Gate HCLK
    +            GATEHCLK: u1,
    +            reserved4: u2,
    +            ///  PHY Suspended
    +            PHYSUSP: u1,
    +            padding: u27,
    +        }),
    +    };
    +
    +    ///  General purpose timer
    +    pub const TIM9 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            ///  One-pulse mode
    +            OPM: u1,
    +            reserved7: u3,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            ///  Clock division
    +            CKD: u2,
    +            padding: u22,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            reserved4: u4,
    +            ///  Master mode selection
    +            MMS: u3,
    +            padding: u25,
    +        }),
    +        ///  slave mode control register
    +        SMCR: mmio.Mmio(packed struct(u32) {
    +            ///  Slave mode selection
    +            SMS: u3,
    +            reserved4: u1,
    +            ///  Trigger selection
    +            TS: u3,
    +            ///  Master/Slave mode
    +            MSM: u1,
    +            padding: u24,
    +        }),
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            ///  Capture/Compare 1 interrupt enable
    +            CC1IE: u1,
    +            ///  Capture/Compare 2 interrupt enable
    +            CC2IE: u1,
    +            reserved6: u3,
    +            ///  Trigger interrupt enable
    +            TIE: u1,
    +            padding: u25,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            ///  Capture/compare 1 interrupt flag
    +            CC1IF: u1,
    +            ///  Capture/Compare 2 interrupt flag
    +            CC2IF: u1,
    +            reserved6: u3,
    +            ///  Trigger interrupt flag
    +            TIF: u1,
    +            reserved9: u2,
    +            ///  Capture/Compare 1 overcapture flag
    +            CC1OF: u1,
    +            ///  Capture/compare 2 overcapture flag
    +            CC2OF: u1,
    +            padding: u21,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            ///  Capture/compare 1 generation
    +            CC1G: u1,
    +            ///  Capture/compare 2 generation
    +            CC2G: u1,
    +            reserved6: u3,
    +            ///  Trigger generation
    +            TG: u1,
    +            padding: u25,
    +        }),
    +        ///  capture/compare mode register 1 (output mode)
    +        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 selection
    +            CC1S: u2,
    +            ///  Output Compare 1 fast enable
    +            OC1FE: u1,
    +            ///  Output Compare 1 preload enable
    +            OC1PE: u1,
    +            ///  Output Compare 1 mode
    +            OC1M: u3,
    +            reserved8: u1,
    +            ///  Capture/Compare 2 selection
    +            CC2S: u2,
    +            ///  Output Compare 2 fast enable
    +            OC2FE: u1,
    +            ///  Output Compare 2 preload enable
    +            OC2PE: u1,
    +            ///  Output Compare 2 mode
    +            OC2M: u3,
    +            padding: u17,
    +        }),
    +        reserved32: [4]u8,
    +        ///  capture/compare enable register
    +        CCER: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 output enable
    +            CC1E: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1P: u1,
    +            reserved3: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1NP: u1,
    +            ///  Capture/Compare 2 output enable
    +            CC2E: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2P: u1,
    +            reserved7: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2NP: u1,
    +            padding: u24,
    +        }),
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  counter value
    +            CNT: u16,
    +            padding: u16,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Auto-reload value
    +            ARR: u16,
    +            padding: u16,
    +        }),
    +        reserved52: [4]u8,
    +        ///  capture/compare register 1
    +        CCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 value
    +            CCR1: u16,
    +            padding: u16,
    +        }),
    +        ///  capture/compare register 2
    +        CCR2: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 2 value
    +            CCR2: u16,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  USB on the go full speed
    +    pub const OTG_FS_HOST = extern struct {
    +        ///  OTG_FS host configuration register (OTG_FS_HCFG)
    +        FS_HCFG: mmio.Mmio(packed struct(u32) {
    +            ///  FS/LS PHY clock select
    +            FSLSPCS: u2,
    +            ///  FS- and LS-only support
    +            FSLSS: u1,
    +            padding: u29,
    +        }),
    +        ///  OTG_FS Host frame interval register
    +        HFIR: mmio.Mmio(packed struct(u32) {
    +            ///  Frame interval
    +            FRIVL: u16,
    +            padding: u16,
    +        }),
    +        ///  OTG_FS host frame number/frame time remaining register (OTG_FS_HFNUM)
    +        FS_HFNUM: mmio.Mmio(packed struct(u32) {
    +            ///  Frame number
    +            FRNUM: u16,
    +            ///  Frame time remaining
    +            FTREM: u16,
    +        }),
    +        reserved16: [4]u8,
    +        ///  OTG_FS_Host periodic transmit FIFO/queue status register (OTG_FS_HPTXSTS)
    +        FS_HPTXSTS: mmio.Mmio(packed struct(u32) {
    +            ///  Periodic transmit data FIFO space available
    +            PTXFSAVL: u16,
    +            ///  Periodic transmit request queue space available
    +            PTXQSAV: u8,
    +            ///  Top of the periodic transmit request queue
    +            PTXQTOP: u8,
    +        }),
    +        ///  OTG_FS Host all channels interrupt register
    +        HAINT: mmio.Mmio(packed struct(u32) {
    +            ///  Channel interrupts
    +            HAINT: u16,
    +            padding: u16,
    +        }),
    +        ///  OTG_FS host all channels interrupt mask register
    +        HAINTMSK: mmio.Mmio(packed struct(u32) {
    +            ///  Channel interrupt mask
    +            HAINTM: u16,
    +            padding: u16,
    +        }),
    +        reserved64: [36]u8,
    +        ///  OTG_FS host port control and status register (OTG_FS_HPRT)
    +        FS_HPRT: mmio.Mmio(packed struct(u32) {
    +            ///  Port connect status
    +            PCSTS: u1,
    +            ///  Port connect detected
    +            PCDET: u1,
    +            ///  Port enable
    +            PENA: u1,
    +            ///  Port enable/disable change
    +            PENCHNG: u1,
    +            ///  Port overcurrent active
    +            POCA: u1,
    +            ///  Port overcurrent change
    +            POCCHNG: u1,
    +            ///  Port resume
    +            PRES: u1,
    +            ///  Port suspend
    +            PSUSP: u1,
    +            ///  Port reset
    +            PRST: u1,
    +            reserved10: u1,
    +            ///  Port line status
    +            PLSTS: u2,
    +            ///  Port power
    +            PPWR: u1,
    +            ///  Port test control
    +            PTCTL: u4,
    +            ///  Port speed
    +            PSPD: u2,
    +            padding: u13,
    +        }),
    +        reserved256: [188]u8,
    +        ///  OTG_FS host channel-0 characteristics register (OTG_FS_HCCHAR0)
    +        FS_HCCHAR0: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multicount
    +            MCNT: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        reserved264: [4]u8,
    +        ///  OTG_FS host channel-0 interrupt register (OTG_FS_HCINT0)
    +        FS_HCINT0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            reserved7: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-0 mask register (OTG_FS_HCINTMSK0)
    +        FS_HCINTMSK0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-0 transfer size register
    +        FS_HCTSIZ0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        reserved288: [12]u8,
    +        ///  OTG_FS host channel-1 characteristics register (OTG_FS_HCCHAR1)
    +        FS_HCCHAR1: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multicount
    +            MCNT: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        reserved296: [4]u8,
    +        ///  OTG_FS host channel-1 interrupt register (OTG_FS_HCINT1)
    +        FS_HCINT1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            reserved7: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-1 mask register (OTG_FS_HCINTMSK1)
    +        FS_HCINTMSK1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-1 transfer size register
    +        FS_HCTSIZ1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        reserved320: [12]u8,
    +        ///  OTG_FS host channel-2 characteristics register (OTG_FS_HCCHAR2)
    +        FS_HCCHAR2: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multicount
    +            MCNT: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        reserved328: [4]u8,
    +        ///  OTG_FS host channel-2 interrupt register (OTG_FS_HCINT2)
    +        FS_HCINT2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            reserved7: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-2 mask register (OTG_FS_HCINTMSK2)
    +        FS_HCINTMSK2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-2 transfer size register
    +        FS_HCTSIZ2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        reserved352: [12]u8,
    +        ///  OTG_FS host channel-3 characteristics register (OTG_FS_HCCHAR3)
    +        FS_HCCHAR3: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multicount
    +            MCNT: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        reserved360: [4]u8,
    +        ///  OTG_FS host channel-3 interrupt register (OTG_FS_HCINT3)
    +        FS_HCINT3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            reserved7: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-3 mask register (OTG_FS_HCINTMSK3)
    +        FS_HCINTMSK3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-3 transfer size register
    +        FS_HCTSIZ3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        reserved384: [12]u8,
    +        ///  OTG_FS host channel-4 characteristics register (OTG_FS_HCCHAR4)
    +        FS_HCCHAR4: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multicount
    +            MCNT: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        reserved392: [4]u8,
    +        ///  OTG_FS host channel-4 interrupt register (OTG_FS_HCINT4)
    +        FS_HCINT4: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            reserved7: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-4 mask register (OTG_FS_HCINTMSK4)
    +        FS_HCINTMSK4: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-x transfer size register
    +        FS_HCTSIZ4: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        reserved416: [12]u8,
    +        ///  OTG_FS host channel-5 characteristics register (OTG_FS_HCCHAR5)
    +        FS_HCCHAR5: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multicount
    +            MCNT: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        reserved424: [4]u8,
    +        ///  OTG_FS host channel-5 interrupt register (OTG_FS_HCINT5)
    +        FS_HCINT5: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            reserved7: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-5 mask register (OTG_FS_HCINTMSK5)
    +        FS_HCINTMSK5: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-5 transfer size register
    +        FS_HCTSIZ5: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        reserved448: [12]u8,
    +        ///  OTG_FS host channel-6 characteristics register (OTG_FS_HCCHAR6)
    +        FS_HCCHAR6: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multicount
    +            MCNT: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        reserved456: [4]u8,
    +        ///  OTG_FS host channel-6 interrupt register (OTG_FS_HCINT6)
    +        FS_HCINT6: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            reserved7: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-6 mask register (OTG_FS_HCINTMSK6)
    +        FS_HCINTMSK6: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-6 transfer size register
    +        FS_HCTSIZ6: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        reserved480: [12]u8,
    +        ///  OTG_FS host channel-7 characteristics register (OTG_FS_HCCHAR7)
    +        FS_HCCHAR7: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multicount
    +            MCNT: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        reserved488: [4]u8,
    +        ///  OTG_FS host channel-7 interrupt register (OTG_FS_HCINT7)
    +        FS_HCINT7: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            reserved7: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-7 mask register (OTG_FS_HCINTMSK7)
    +        FS_HCINTMSK7: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-7 transfer size register
    +        FS_HCTSIZ7: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +    };
    +
    +    ///  General purpose timer
    +    pub const TIM10 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            reserved7: u4,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            ///  Clock division
    +            CKD: u2,
    +            padding: u22,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            reserved4: u4,
    +            ///  Master mode selection
    +            MMS: u3,
    +            padding: u25,
    +        }),
    +        reserved12: [4]u8,
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            ///  Capture/Compare 1 interrupt enable
    +            CC1IE: u1,
    +            padding: u30,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            ///  Capture/compare 1 interrupt flag
    +            CC1IF: u1,
    +            reserved9: u7,
    +            ///  Capture/Compare 1 overcapture flag
    +            CC1OF: u1,
    +            padding: u22,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            ///  Capture/compare 1 generation
    +            CC1G: u1,
    +            padding: u30,
    +        }),
    +        ///  capture/compare mode register (output mode)
    +        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 selection
    +            CC1S: u2,
    +            reserved3: u1,
    +            ///  Output Compare 1 preload enable
    +            OC1PE: u1,
    +            ///  Output Compare 1 mode
    +            OC1M: u3,
    +            padding: u25,
    +        }),
    +        reserved32: [4]u8,
    +        ///  capture/compare enable register
    +        CCER: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 output enable
    +            CC1E: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1P: u1,
    +            reserved3: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1NP: u1,
    +            padding: u28,
    +        }),
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  counter value
    +            CNT: u16,
    +            padding: u16,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Auto-reload value
    +            ARR: u16,
    +            padding: u16,
    +        }),
    +        reserved52: [4]u8,
    +        ///  capture/compare register 1
    +        CCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 value
    +            CCR1: u16,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  USB on the go full speed
    +    pub const OTG_FS_GLOBAL = extern struct {
    +        ///  OTG_FS control and status register (OTG_FS_GOTGCTL)
    +        FS_GOTGCTL: mmio.Mmio(packed struct(u32) {
    +            ///  Session request success
    +            SRQSCS: u1,
    +            ///  Session request
    +            SRQ: u1,
    +            reserved8: u6,
    +            ///  Host negotiation success
    +            HNGSCS: u1,
    +            ///  HNP request
    +            HNPRQ: u1,
    +            ///  Host set HNP enable
    +            HSHNPEN: u1,
    +            ///  Device HNP enabled
    +            DHNPEN: u1,
    +            reserved16: u4,
    +            ///  Connector ID status
    +            CIDSTS: u1,
    +            ///  Long/short debounce time
    +            DBCT: u1,
    +            ///  A-session valid
    +            ASVLD: u1,
    +            ///  B-session valid
    +            BSVLD: u1,
    +            padding: u12,
    +        }),
    +        ///  OTG_FS interrupt register (OTG_FS_GOTGINT)
    +        FS_GOTGINT: mmio.Mmio(packed struct(u32) {
    +            reserved2: u2,
    +            ///  Session end detected
    +            SEDET: u1,
    +            reserved8: u5,
    +            ///  Session request success status change
    +            SRSSCHG: u1,
    +            ///  Host negotiation success status change
    +            HNSSCHG: u1,
    +            reserved17: u7,
    +            ///  Host negotiation detected
    +            HNGDET: u1,
    +            ///  A-device timeout change
    +            ADTOCHG: u1,
    +            ///  Debounce done
    +            DBCDNE: u1,
    +            padding: u12,
    +        }),
    +        ///  OTG_FS AHB configuration register (OTG_FS_GAHBCFG)
    +        FS_GAHBCFG: mmio.Mmio(packed struct(u32) {
    +            ///  Global interrupt mask
    +            GINT: u1,
    +            reserved7: u6,
    +            ///  TxFIFO empty level
    +            TXFELVL: u1,
    +            ///  Periodic TxFIFO empty level
    +            PTXFELVL: u1,
    +            padding: u23,
    +        }),
    +        ///  OTG_FS USB configuration register (OTG_FS_GUSBCFG)
    +        FS_GUSBCFG: mmio.Mmio(packed struct(u32) {
    +            ///  FS timeout calibration
    +            TOCAL: u3,
    +            reserved6: u3,
    +            ///  Full Speed serial transceiver select
    +            PHYSEL: u1,
    +            reserved8: u1,
    +            ///  SRP-capable
    +            SRPCAP: u1,
    +            ///  HNP-capable
    +            HNPCAP: u1,
    +            ///  USB turnaround time
    +            TRDT: u4,
    +            reserved29: u15,
    +            ///  Force host mode
    +            FHMOD: u1,
    +            ///  Force device mode
    +            FDMOD: u1,
    +            ///  Corrupt Tx packet
    +            CTXPKT: u1,
    +        }),
    +        ///  OTG_FS reset register (OTG_FS_GRSTCTL)
    +        FS_GRSTCTL: mmio.Mmio(packed struct(u32) {
    +            ///  Core soft reset
    +            CSRST: u1,
    +            ///  HCLK soft reset
    +            HSRST: u1,
    +            ///  Host frame counter reset
    +            FCRST: u1,
    +            reserved4: u1,
    +            ///  RxFIFO flush
    +            RXFFLSH: u1,
    +            ///  TxFIFO flush
    +            TXFFLSH: u1,
    +            ///  TxFIFO number
    +            TXFNUM: u5,
    +            reserved31: u20,
    +            ///  AHB master idle
    +            AHBIDL: u1,
    +        }),
    +        ///  OTG_FS core interrupt register (OTG_FS_GINTSTS)
    +        FS_GINTSTS: mmio.Mmio(packed struct(u32) {
    +            ///  Current mode of operation
    +            CMOD: u1,
    +            ///  Mode mismatch interrupt
    +            MMIS: u1,
    +            ///  OTG interrupt
    +            OTGINT: u1,
    +            ///  Start of frame
    +            SOF: u1,
    +            ///  RxFIFO non-empty
    +            RXFLVL: u1,
    +            ///  Non-periodic TxFIFO empty
    +            NPTXFE: u1,
    +            ///  Global IN non-periodic NAK effective
    +            GINAKEFF: u1,
    +            ///  Global OUT NAK effective
    +            GOUTNAKEFF: u1,
    +            reserved10: u2,
    +            ///  Early suspend
    +            ESUSP: u1,
    +            ///  USB suspend
    +            USBSUSP: u1,
    +            ///  USB reset
    +            USBRST: u1,
    +            ///  Enumeration done
    +            ENUMDNE: u1,
    +            ///  Isochronous OUT packet dropped interrupt
    +            ISOODRP: u1,
    +            ///  End of periodic frame interrupt
    +            EOPF: u1,
    +            reserved18: u2,
    +            ///  IN endpoint interrupt
    +            IEPINT: u1,
    +            ///  OUT endpoint interrupt
    +            OEPINT: u1,
    +            ///  Incomplete isochronous IN transfer
    +            IISOIXFR: u1,
    +            ///  Incomplete periodic transfer(Host mode)/Incomplete isochronous OUT transfer(Device mode)
    +            IPXFR_INCOMPISOOUT: u1,
    +            reserved24: u2,
    +            ///  Host port interrupt
    +            HPRTINT: u1,
    +            ///  Host channels interrupt
    +            HCINT: u1,
    +            ///  Periodic TxFIFO empty
    +            PTXFE: u1,
    +            reserved28: u1,
    +            ///  Connector ID status change
    +            CIDSCHG: u1,
    +            ///  Disconnect detected interrupt
    +            DISCINT: u1,
    +            ///  Session request/new session detected interrupt
    +            SRQINT: u1,
    +            ///  Resume/remote wakeup detected interrupt
    +            WKUPINT: u1,
    +        }),
    +        ///  OTG_FS interrupt mask register (OTG_FS_GINTMSK)
    +        FS_GINTMSK: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  Mode mismatch interrupt mask
    +            MMISM: u1,
    +            ///  OTG interrupt mask
    +            OTGINT: u1,
    +            ///  Start of frame mask
    +            SOFM: u1,
    +            ///  Receive FIFO non-empty mask
    +            RXFLVLM: u1,
    +            ///  Non-periodic TxFIFO empty mask
    +            NPTXFEM: u1,
    +            ///  Global non-periodic IN NAK effective mask
    +            GINAKEFFM: u1,
    +            ///  Global OUT NAK effective mask
    +            GONAKEFFM: u1,
    +            reserved10: u2,
    +            ///  Early suspend mask
    +            ESUSPM: u1,
    +            ///  USB suspend mask
    +            USBSUSPM: u1,
    +            ///  USB reset mask
    +            USBRST: u1,
    +            ///  Enumeration done mask
    +            ENUMDNEM: u1,
    +            ///  Isochronous OUT packet dropped interrupt mask
    +            ISOODRPM: u1,
    +            ///  End of periodic frame interrupt mask
    +            EOPFM: u1,
    +            reserved17: u1,
    +            ///  Endpoint mismatch interrupt mask
    +            EPMISM: u1,
    +            ///  IN endpoints interrupt mask
    +            IEPINT: u1,
    +            ///  OUT endpoints interrupt mask
    +            OEPINT: u1,
    +            ///  Incomplete isochronous IN transfer mask
    +            IISOIXFRM: u1,
    +            ///  Incomplete periodic transfer mask(Host mode)/Incomplete isochronous OUT transfer mask(Device mode)
    +            IPXFRM_IISOOXFRM: u1,
    +            reserved24: u2,
    +            ///  Host port interrupt mask
    +            PRTIM: u1,
    +            ///  Host channels interrupt mask
    +            HCIM: u1,
    +            ///  Periodic TxFIFO empty mask
    +            PTXFEM: u1,
    +            reserved28: u1,
    +            ///  Connector ID status change mask
    +            CIDSCHGM: u1,
    +            ///  Disconnect detected interrupt mask
    +            DISCINT: u1,
    +            ///  Session request/new session detected interrupt mask
    +            SRQIM: u1,
    +            ///  Resume/remote wakeup detected interrupt mask
    +            WUIM: u1,
    +        }),
    +        ///  OTG_FS Receive status debug read(Device mode)
    +        FS_GRXSTSR_Device: mmio.Mmio(packed struct(u32) {
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Byte count
    +            BCNT: u11,
    +            ///  Data PID
    +            DPID: u2,
    +            ///  Packet status
    +            PKTSTS: u4,
    +            ///  Frame number
    +            FRMNUM: u4,
    +            padding: u7,
    +        }),
    +        reserved36: [4]u8,
    +        ///  OTG_FS Receive FIFO size register (OTG_FS_GRXFSIZ)
    +        FS_GRXFSIZ: mmio.Mmio(packed struct(u32) {
    +            ///  RxFIFO depth
    +            RXFD: u16,
    +            padding: u16,
    +        }),
    +        ///  OTG_FS non-periodic transmit FIFO size register (Device mode)
    +        FS_GNPTXFSIZ_Device: mmio.Mmio(packed struct(u32) {
    +            ///  Endpoint 0 transmit RAM start address
    +            TX0FSA: u16,
    +            ///  Endpoint 0 TxFIFO depth
    +            TX0FD: u16,
    +        }),
    +        ///  OTG_FS non-periodic transmit FIFO/queue status register (OTG_FS_GNPTXSTS)
    +        FS_GNPTXSTS: mmio.Mmio(packed struct(u32) {
    +            ///  Non-periodic TxFIFO space available
    +            NPTXFSAV: u16,
    +            ///  Non-periodic transmit request queue space available
    +            NPTQXSAV: u8,
    +            ///  Top of the non-periodic transmit request queue
    +            NPTXQTOP: u7,
    +            padding: u1,
    +        }),
    +        reserved56: [8]u8,
    +        ///  OTG_FS general core configuration register (OTG_FS_GCCFG)
    +        FS_GCCFG: mmio.Mmio(packed struct(u32) {
    +            reserved16: u16,
    +            ///  Power down
    +            PWRDWN: u1,
    +            reserved18: u1,
    +            ///  Enable the VBUS sensing device
    +            VBUSASEN: u1,
    +            ///  Enable the VBUS sensing device
    +            VBUSBSEN: u1,
    +            ///  SOF output enable
    +            SOFOUTEN: u1,
    +            padding: u11,
    +        }),
    +        ///  core ID register
    +        FS_CID: mmio.Mmio(packed struct(u32) {
    +            ///  Product ID field
    +            PRODUCT_ID: u32,
    +        }),
    +        reserved256: [192]u8,
    +        ///  OTG_FS Host periodic transmit FIFO size register (OTG_FS_HPTXFSIZ)
    +        FS_HPTXFSIZ: mmio.Mmio(packed struct(u32) {
    +            ///  Host periodic TxFIFO start address
    +            PTXSA: u16,
    +            ///  Host periodic TxFIFO depth
    +            PTXFSIZ: u16,
    +        }),
    +        ///  OTG_FS device IN endpoint transmit FIFO size register (OTG_FS_DIEPTXF2)
    +        FS_DIEPTXF1: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint FIFO2 transmit RAM start address
    +            INEPTXSA: u16,
    +            ///  IN endpoint TxFIFO depth
    +            INEPTXFD: u16,
    +        }),
    +        ///  OTG_FS device IN endpoint transmit FIFO size register (OTG_FS_DIEPTXF3)
    +        FS_DIEPTXF2: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint FIFO3 transmit RAM start address
    +            INEPTXSA: u16,
    +            ///  IN endpoint TxFIFO depth
    +            INEPTXFD: u16,
    +        }),
    +        ///  OTG_FS device IN endpoint transmit FIFO size register (OTG_FS_DIEPTXF4)
    +        FS_DIEPTXF3: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint FIFO4 transmit RAM start address
    +            INEPTXSA: u16,
    +            ///  IN endpoint TxFIFO depth
    +            INEPTXFD: u16,
    +        }),
    +    };
    +
    +    ///  USB on the go full speed
    +    pub const OTG_FS_DEVICE = extern struct {
    +        ///  OTG_FS device configuration register (OTG_FS_DCFG)
    +        FS_DCFG: mmio.Mmio(packed struct(u32) {
    +            ///  Device speed
    +            DSPD: u2,
    +            ///  Non-zero-length status OUT handshake
    +            NZLSOHSK: u1,
    +            reserved4: u1,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Periodic frame interval
    +            PFIVL: u2,
    +            padding: u19,
    +        }),
    +        ///  OTG_FS device control register (OTG_FS_DCTL)
    +        FS_DCTL: mmio.Mmio(packed struct(u32) {
    +            ///  Remote wakeup signaling
    +            RWUSIG: u1,
    +            ///  Soft disconnect
    +            SDIS: u1,
    +            ///  Global IN NAK status
    +            GINSTS: u1,
    +            ///  Global OUT NAK status
    +            GONSTS: u1,
    +            ///  Test control
    +            TCTL: u3,
    +            ///  Set global IN NAK
    +            SGINAK: u1,
    +            ///  Clear global IN NAK
    +            CGINAK: u1,
    +            ///  Set global OUT NAK
    +            SGONAK: u1,
    +            ///  Clear global OUT NAK
    +            CGONAK: u1,
    +            ///  Power-on programming done
    +            POPRGDNE: u1,
    +            padding: u20,
    +        }),
    +        ///  OTG_FS device status register (OTG_FS_DSTS)
    +        FS_DSTS: mmio.Mmio(packed struct(u32) {
    +            ///  Suspend status
    +            SUSPSTS: u1,
    +            ///  Enumerated speed
    +            ENUMSPD: u2,
    +            ///  Erratic error
    +            EERR: u1,
    +            reserved8: u4,
    +            ///  Frame number of the received SOF
    +            FNSOF: u14,
    +            padding: u10,
    +        }),
    +        reserved16: [4]u8,
    +        ///  OTG_FS device IN endpoint common interrupt mask register (OTG_FS_DIEPMSK)
    +        FS_DIEPMSK: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt mask
    +            XFRCM: u1,
    +            ///  Endpoint disabled interrupt mask
    +            EPDM: u1,
    +            reserved3: u1,
    +            ///  Timeout condition mask (Non-isochronous endpoints)
    +            TOM: u1,
    +            ///  IN token received when TxFIFO empty mask
    +            ITTXFEMSK: u1,
    +            ///  IN token received with EP mismatch mask
    +            INEPNMM: u1,
    +            ///  IN endpoint NAK effective mask
    +            INEPNEM: u1,
    +            padding: u25,
    +        }),
    +        ///  OTG_FS device OUT endpoint common interrupt mask register (OTG_FS_DOEPMSK)
    +        FS_DOEPMSK: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt mask
    +            XFRCM: u1,
    +            ///  Endpoint disabled interrupt mask
    +            EPDM: u1,
    +            reserved3: u1,
    +            ///  SETUP phase done mask
    +            STUPM: u1,
    +            ///  OUT token received when endpoint disabled mask
    +            OTEPDM: u1,
    +            padding: u27,
    +        }),
    +        ///  OTG_FS device all endpoints interrupt register (OTG_FS_DAINT)
    +        FS_DAINT: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint interrupt bits
    +            IEPINT: u16,
    +            ///  OUT endpoint interrupt bits
    +            OEPINT: u16,
    +        }),
    +        ///  OTG_FS all endpoints interrupt mask register (OTG_FS_DAINTMSK)
    +        FS_DAINTMSK: mmio.Mmio(packed struct(u32) {
    +            ///  IN EP interrupt mask bits
    +            IEPM: u16,
    +            ///  OUT endpoint interrupt bits
    +            OEPINT: u16,
    +        }),
    +        reserved40: [8]u8,
    +        ///  OTG_FS device VBUS discharge time register
    +        DVBUSDIS: mmio.Mmio(packed struct(u32) {
    +            ///  Device VBUS discharge time
    +            VBUSDT: u16,
    +            padding: u16,
    +        }),
    +        ///  OTG_FS device VBUS pulsing time register
    +        DVBUSPULSE: mmio.Mmio(packed struct(u32) {
    +            ///  Device VBUS pulsing time
    +            DVBUSP: u12,
    +            padding: u20,
    +        }),
    +        reserved52: [4]u8,
    +        ///  OTG_FS device IN endpoint FIFO empty interrupt mask register
    +        DIEPEMPMSK: mmio.Mmio(packed struct(u32) {
    +            ///  IN EP Tx FIFO empty interrupt mask bits
    +            INEPTXFEM: u16,
    +            padding: u16,
    +        }),
    +        reserved256: [200]u8,
    +        ///  OTG_FS device control IN endpoint 0 control register (OTG_FS_DIEPCTL0)
    +        FS_DIEPCTL0: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u2,
    +            reserved15: u13,
    +            ///  USB active endpoint
    +            USBAEP: u1,
    +            reserved17: u1,
    +            ///  NAK status
    +            NAKSTS: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  STALL handshake
    +            STALL: u1,
    +            ///  TxFIFO number
    +            TXFNUM: u4,
    +            ///  Clear NAK
    +            CNAK: u1,
    +            ///  Set NAK
    +            SNAK: u1,
    +            reserved30: u2,
    +            ///  Endpoint disable
    +            EPDIS: u1,
    +            ///  Endpoint enable
    +            EPENA: u1,
    +        }),
    +        reserved264: [4]u8,
    +        ///  device endpoint-x interrupt register
    +        DIEPINT0: mmio.Mmio(packed struct(u32) {
    +            ///  XFRC
    +            XFRC: u1,
    +            ///  EPDISD
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  TOC
    +            TOC: u1,
    +            ///  ITTXFE
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  INEPNE
    +            INEPNE: u1,
    +            ///  TXFE
    +            TXFE: u1,
    +            padding: u24,
    +        }),
    +        reserved272: [4]u8,
    +        ///  device endpoint-0 transfer size register
    +        DIEPTSIZ0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u7,
    +            reserved19: u12,
    +            ///  Packet count
    +            PKTCNT: u2,
    +            padding: u11,
    +        }),
    +        reserved280: [4]u8,
    +        ///  OTG_FS device IN endpoint transmit FIFO status register
    +        DTXFSTS0: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint TxFIFO space available
    +            INEPTFSAV: u16,
    +            padding: u16,
    +        }),
    +        reserved288: [4]u8,
    +        ///  OTG device endpoint-1 control register
    +        DIEPCTL1: mmio.Mmio(packed struct(u32) {
    +            ///  MPSIZ
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USBAEP
    +            USBAEP: u1,
    +            ///  EONUM/DPID
    +            EONUM_DPID: u1,
    +            ///  NAKSTS
    +            NAKSTS: u1,
    +            ///  EPTYP
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  Stall
    +            Stall: u1,
    +            ///  TXFNUM
    +            TXFNUM: u4,
    +            ///  CNAK
    +            CNAK: u1,
    +            ///  SNAK
    +            SNAK: u1,
    +            ///  SD0PID/SEVNFRM
    +            SD0PID_SEVNFRM: u1,
    +            ///  SODDFRM/SD1PID
    +            SODDFRM_SD1PID: u1,
    +            ///  EPDIS
    +            EPDIS: u1,
    +            ///  EPENA
    +            EPENA: u1,
    +        }),
    +        reserved296: [4]u8,
    +        ///  device endpoint-1 interrupt register
    +        DIEPINT1: mmio.Mmio(packed struct(u32) {
    +            ///  XFRC
    +            XFRC: u1,
    +            ///  EPDISD
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  TOC
    +            TOC: u1,
    +            ///  ITTXFE
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  INEPNE
    +            INEPNE: u1,
    +            ///  TXFE
    +            TXFE: u1,
    +            padding: u24,
    +        }),
    +        reserved304: [4]u8,
    +        ///  device endpoint-1 transfer size register
    +        DIEPTSIZ1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Multi count
    +            MCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved312: [4]u8,
    +        ///  OTG_FS device IN endpoint transmit FIFO status register
    +        DTXFSTS1: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint TxFIFO space available
    +            INEPTFSAV: u16,
    +            padding: u16,
    +        }),
    +        reserved320: [4]u8,
    +        ///  OTG device endpoint-2 control register
    +        DIEPCTL2: mmio.Mmio(packed struct(u32) {
    +            ///  MPSIZ
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USBAEP
    +            USBAEP: u1,
    +            ///  EONUM/DPID
    +            EONUM_DPID: u1,
    +            ///  NAKSTS
    +            NAKSTS: u1,
    +            ///  EPTYP
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  Stall
    +            Stall: u1,
    +            ///  TXFNUM
    +            TXFNUM: u4,
    +            ///  CNAK
    +            CNAK: u1,
    +            ///  SNAK
    +            SNAK: u1,
    +            ///  SD0PID/SEVNFRM
    +            SD0PID_SEVNFRM: u1,
    +            ///  SODDFRM
    +            SODDFRM: u1,
    +            ///  EPDIS
    +            EPDIS: u1,
    +            ///  EPENA
    +            EPENA: u1,
    +        }),
    +        reserved328: [4]u8,
    +        ///  device endpoint-2 interrupt register
    +        DIEPINT2: mmio.Mmio(packed struct(u32) {
    +            ///  XFRC
    +            XFRC: u1,
    +            ///  EPDISD
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  TOC
    +            TOC: u1,
    +            ///  ITTXFE
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  INEPNE
    +            INEPNE: u1,
    +            ///  TXFE
    +            TXFE: u1,
    +            padding: u24,
    +        }),
    +        reserved336: [4]u8,
    +        ///  device endpoint-2 transfer size register
    +        DIEPTSIZ2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Multi count
    +            MCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved344: [4]u8,
    +        ///  OTG_FS device IN endpoint transmit FIFO status register
    +        DTXFSTS2: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint TxFIFO space available
    +            INEPTFSAV: u16,
    +            padding: u16,
    +        }),
    +        reserved352: [4]u8,
    +        ///  OTG device endpoint-3 control register
    +        DIEPCTL3: mmio.Mmio(packed struct(u32) {
    +            ///  MPSIZ
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USBAEP
    +            USBAEP: u1,
    +            ///  EONUM/DPID
    +            EONUM_DPID: u1,
    +            ///  NAKSTS
    +            NAKSTS: u1,
    +            ///  EPTYP
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  Stall
    +            Stall: u1,
    +            ///  TXFNUM
    +            TXFNUM: u4,
    +            ///  CNAK
    +            CNAK: u1,
    +            ///  SNAK
    +            SNAK: u1,
    +            ///  SD0PID/SEVNFRM
    +            SD0PID_SEVNFRM: u1,
    +            ///  SODDFRM
    +            SODDFRM: u1,
    +            ///  EPDIS
    +            EPDIS: u1,
    +            ///  EPENA
    +            EPENA: u1,
    +        }),
    +        reserved360: [4]u8,
    +        ///  device endpoint-3 interrupt register
    +        DIEPINT3: mmio.Mmio(packed struct(u32) {
    +            ///  XFRC
    +            XFRC: u1,
    +            ///  EPDISD
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  TOC
    +            TOC: u1,
    +            ///  ITTXFE
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  INEPNE
    +            INEPNE: u1,
    +            ///  TXFE
    +            TXFE: u1,
    +            padding: u24,
    +        }),
    +        reserved368: [4]u8,
    +        ///  device endpoint-3 transfer size register
    +        DIEPTSIZ3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Multi count
    +            MCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved376: [4]u8,
    +        ///  OTG_FS device IN endpoint transmit FIFO status register
    +        DTXFSTS3: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint TxFIFO space available
    +            INEPTFSAV: u16,
    +            padding: u16,
    +        }),
    +        reserved768: [388]u8,
    +        ///  device endpoint-0 control register
    +        DOEPCTL0: mmio.Mmio(packed struct(u32) {
    +            ///  MPSIZ
    +            MPSIZ: u2,
    +            reserved15: u13,
    +            ///  USBAEP
    +            USBAEP: u1,
    +            reserved17: u1,
    +            ///  NAKSTS
    +            NAKSTS: u1,
    +            ///  EPTYP
    +            EPTYP: u2,
    +            ///  SNPM
    +            SNPM: u1,
    +            ///  Stall
    +            Stall: u1,
    +            reserved26: u4,
    +            ///  CNAK
    +            CNAK: u1,
    +            ///  SNAK
    +            SNAK: u1,
    +            reserved30: u2,
    +            ///  EPDIS
    +            EPDIS: u1,
    +            ///  EPENA
    +            EPENA: u1,
    +        }),
    +        reserved776: [4]u8,
    +        ///  device endpoint-0 interrupt register
    +        DOEPINT0: mmio.Mmio(packed struct(u32) {
    +            ///  XFRC
    +            XFRC: u1,
    +            ///  EPDISD
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  STUP
    +            STUP: u1,
    +            ///  OTEPDIS
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  B2BSTUP
    +            B2BSTUP: u1,
    +            padding: u25,
    +        }),
    +        reserved784: [4]u8,
    +        ///  device OUT endpoint-0 transfer size register
    +        DOEPTSIZ0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u7,
    +            reserved19: u12,
    +            ///  Packet count
    +            PKTCNT: u1,
    +            reserved29: u9,
    +            ///  SETUP packet count
    +            STUPCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved800: [12]u8,
    +        ///  device endpoint-1 control register
    +        DOEPCTL1: mmio.Mmio(packed struct(u32) {
    +            ///  MPSIZ
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USBAEP
    +            USBAEP: u1,
    +            ///  EONUM/DPID
    +            EONUM_DPID: u1,
    +            ///  NAKSTS
    +            NAKSTS: u1,
    +            ///  EPTYP
    +            EPTYP: u2,
    +            ///  SNPM
    +            SNPM: u1,
    +            ///  Stall
    +            Stall: u1,
    +            reserved26: u4,
    +            ///  CNAK
    +            CNAK: u1,
    +            ///  SNAK
    +            SNAK: u1,
    +            ///  SD0PID/SEVNFRM
    +            SD0PID_SEVNFRM: u1,
    +            ///  SODDFRM
    +            SODDFRM: u1,
    +            ///  EPDIS
    +            EPDIS: u1,
    +            ///  EPENA
    +            EPENA: u1,
    +        }),
    +        reserved808: [4]u8,
    +        ///  device endpoint-1 interrupt register
    +        DOEPINT1: mmio.Mmio(packed struct(u32) {
    +            ///  XFRC
    +            XFRC: u1,
    +            ///  EPDISD
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  STUP
    +            STUP: u1,
    +            ///  OTEPDIS
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  B2BSTUP
    +            B2BSTUP: u1,
    +            padding: u25,
    +        }),
    +        reserved816: [4]u8,
    +        ///  device OUT endpoint-1 transfer size register
    +        DOEPTSIZ1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Received data PID/SETUP packet count
    +            RXDPID_STUPCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved832: [12]u8,
    +        ///  device endpoint-2 control register
    +        DOEPCTL2: mmio.Mmio(packed struct(u32) {
    +            ///  MPSIZ
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USBAEP
    +            USBAEP: u1,
    +            ///  EONUM/DPID
    +            EONUM_DPID: u1,
    +            ///  NAKSTS
    +            NAKSTS: u1,
    +            ///  EPTYP
    +            EPTYP: u2,
    +            ///  SNPM
    +            SNPM: u1,
    +            ///  Stall
    +            Stall: u1,
    +            reserved26: u4,
    +            ///  CNAK
    +            CNAK: u1,
    +            ///  SNAK
    +            SNAK: u1,
    +            ///  SD0PID/SEVNFRM
    +            SD0PID_SEVNFRM: u1,
    +            ///  SODDFRM
    +            SODDFRM: u1,
    +            ///  EPDIS
    +            EPDIS: u1,
    +            ///  EPENA
    +            EPENA: u1,
    +        }),
    +        reserved840: [4]u8,
    +        ///  device endpoint-2 interrupt register
    +        DOEPINT2: mmio.Mmio(packed struct(u32) {
    +            ///  XFRC
    +            XFRC: u1,
    +            ///  EPDISD
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  STUP
    +            STUP: u1,
    +            ///  OTEPDIS
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  B2BSTUP
    +            B2BSTUP: u1,
    +            padding: u25,
    +        }),
    +        reserved848: [4]u8,
    +        ///  device OUT endpoint-2 transfer size register
    +        DOEPTSIZ2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Received data PID/SETUP packet count
    +            RXDPID_STUPCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved864: [12]u8,
    +        ///  device endpoint-3 control register
    +        DOEPCTL3: mmio.Mmio(packed struct(u32) {
    +            ///  MPSIZ
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USBAEP
    +            USBAEP: u1,
    +            ///  EONUM/DPID
    +            EONUM_DPID: u1,
    +            ///  NAKSTS
    +            NAKSTS: u1,
    +            ///  EPTYP
    +            EPTYP: u2,
    +            ///  SNPM
    +            SNPM: u1,
    +            ///  Stall
    +            Stall: u1,
    +            reserved26: u4,
    +            ///  CNAK
    +            CNAK: u1,
    +            ///  SNAK
    +            SNAK: u1,
    +            ///  SD0PID/SEVNFRM
    +            SD0PID_SEVNFRM: u1,
    +            ///  SODDFRM
    +            SODDFRM: u1,
    +            ///  EPDIS
    +            EPDIS: u1,
    +            ///  EPENA
    +            EPENA: u1,
    +        }),
    +        reserved872: [4]u8,
    +        ///  device endpoint-3 interrupt register
    +        DOEPINT3: mmio.Mmio(packed struct(u32) {
    +            ///  XFRC
    +            XFRC: u1,
    +            ///  EPDISD
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  STUP
    +            STUP: u1,
    +            ///  OTEPDIS
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  B2BSTUP
    +            B2BSTUP: u1,
    +            padding: u25,
    +        }),
    +        reserved880: [4]u8,
    +        ///  device OUT endpoint-3 transfer size register
    +        DOEPTSIZ3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Received data PID/SETUP packet count
    +            RXDPID_STUPCNT: u2,
    +            padding: u1,
    +        }),
    +    };
    +
    +    ///  Universal serial bus full-speed device interface
    +    pub const USB = extern struct {
    +        ///  endpoint 0 register
    +        EP0R: mmio.Mmio(packed struct(u32) {
    +            ///  Endpoint address
    +            EA: u4,
    +            ///  Status bits, for transmission transfers
    +            STAT_TX: u2,
    +            ///  Data Toggle, for transmission transfers
    +            DTOG_TX: u1,
    +            ///  Correct Transfer for transmission
    +            CTR_TX: u1,
    +            ///  Endpoint kind
    +            EP_KIND: u1,
    +            ///  Endpoint type
    +            EP_TYPE: u2,
    +            ///  Setup transaction completed
    +            SETUP: u1,
    +            ///  Status bits, for reception transfers
    +            STAT_RX: u2,
    +            ///  Data Toggle, for reception transfers
    +            DTOG_RX: u1,
    +            ///  Correct transfer for reception
    +            CTR_RX: u1,
    +            padding: u16,
    +        }),
    +        ///  endpoint 1 register
    +        EP1R: mmio.Mmio(packed struct(u32) {
    +            ///  Endpoint address
    +            EA: u4,
    +            ///  Status bits, for transmission transfers
    +            STAT_TX: u2,
    +            ///  Data Toggle, for transmission transfers
    +            DTOG_TX: u1,
    +            ///  Correct Transfer for transmission
    +            CTR_TX: u1,
    +            ///  Endpoint kind
    +            EP_KIND: u1,
    +            ///  Endpoint type
    +            EP_TYPE: u2,
    +            ///  Setup transaction completed
    +            SETUP: u1,
    +            ///  Status bits, for reception transfers
    +            STAT_RX: u2,
    +            ///  Data Toggle, for reception transfers
    +            DTOG_RX: u1,
    +            ///  Correct transfer for reception
    +            CTR_RX: u1,
    +            padding: u16,
    +        }),
    +        ///  endpoint 2 register
    +        EP2R: mmio.Mmio(packed struct(u32) {
    +            ///  Endpoint address
    +            EA: u4,
    +            ///  Status bits, for transmission transfers
    +            STAT_TX: u2,
    +            ///  Data Toggle, for transmission transfers
    +            DTOG_TX: u1,
    +            ///  Correct Transfer for transmission
    +            CTR_TX: u1,
    +            ///  Endpoint kind
    +            EP_KIND: u1,
    +            ///  Endpoint type
    +            EP_TYPE: u2,
    +            ///  Setup transaction completed
    +            SETUP: u1,
    +            ///  Status bits, for reception transfers
    +            STAT_RX: u2,
    +            ///  Data Toggle, for reception transfers
    +            DTOG_RX: u1,
    +            ///  Correct transfer for reception
    +            CTR_RX: u1,
    +            padding: u16,
    +        }),
    +        ///  endpoint 3 register
    +        EP3R: mmio.Mmio(packed struct(u32) {
    +            ///  Endpoint address
    +            EA: u4,
    +            ///  Status bits, for transmission transfers
    +            STAT_TX: u2,
    +            ///  Data Toggle, for transmission transfers
    +            DTOG_TX: u1,
    +            ///  Correct Transfer for transmission
    +            CTR_TX: u1,
    +            ///  Endpoint kind
    +            EP_KIND: u1,
    +            ///  Endpoint type
    +            EP_TYPE: u2,
    +            ///  Setup transaction completed
    +            SETUP: u1,
    +            ///  Status bits, for reception transfers
    +            STAT_RX: u2,
    +            ///  Data Toggle, for reception transfers
    +            DTOG_RX: u1,
    +            ///  Correct transfer for reception
    +            CTR_RX: u1,
    +            padding: u16,
    +        }),
    +        ///  endpoint 4 register
    +        EP4R: mmio.Mmio(packed struct(u32) {
    +            ///  Endpoint address
    +            EA: u4,
    +            ///  Status bits, for transmission transfers
    +            STAT_TX: u2,
    +            ///  Data Toggle, for transmission transfers
    +            DTOG_TX: u1,
    +            ///  Correct Transfer for transmission
    +            CTR_TX: u1,
    +            ///  Endpoint kind
    +            EP_KIND: u1,
    +            ///  Endpoint type
    +            EP_TYPE: u2,
    +            ///  Setup transaction completed
    +            SETUP: u1,
    +            ///  Status bits, for reception transfers
    +            STAT_RX: u2,
    +            ///  Data Toggle, for reception transfers
    +            DTOG_RX: u1,
    +            ///  Correct transfer for reception
    +            CTR_RX: u1,
    +            padding: u16,
    +        }),
    +        ///  endpoint 5 register
    +        EP5R: mmio.Mmio(packed struct(u32) {
    +            ///  Endpoint address
    +            EA: u4,
    +            ///  Status bits, for transmission transfers
    +            STAT_TX: u2,
    +            ///  Data Toggle, for transmission transfers
    +            DTOG_TX: u1,
    +            ///  Correct Transfer for transmission
    +            CTR_TX: u1,
    +            ///  Endpoint kind
    +            EP_KIND: u1,
    +            ///  Endpoint type
    +            EP_TYPE: u2,
    +            ///  Setup transaction completed
    +            SETUP: u1,
    +            ///  Status bits, for reception transfers
    +            STAT_RX: u2,
    +            ///  Data Toggle, for reception transfers
    +            DTOG_RX: u1,
    +            ///  Correct transfer for reception
    +            CTR_RX: u1,
    +            padding: u16,
    +        }),
    +        ///  endpoint 6 register
    +        EP6R: mmio.Mmio(packed struct(u32) {
    +            ///  Endpoint address
    +            EA: u4,
    +            ///  Status bits, for transmission transfers
    +            STAT_TX: u2,
    +            ///  Data Toggle, for transmission transfers
    +            DTOG_TX: u1,
    +            ///  Correct Transfer for transmission
    +            CTR_TX: u1,
    +            ///  Endpoint kind
    +            EP_KIND: u1,
    +            ///  Endpoint type
    +            EP_TYPE: u2,
    +            ///  Setup transaction completed
    +            SETUP: u1,
    +            ///  Status bits, for reception transfers
    +            STAT_RX: u2,
    +            ///  Data Toggle, for reception transfers
    +            DTOG_RX: u1,
    +            ///  Correct transfer for reception
    +            CTR_RX: u1,
    +            padding: u16,
    +        }),
    +        ///  endpoint 7 register
    +        EP7R: mmio.Mmio(packed struct(u32) {
    +            ///  Endpoint address
    +            EA: u4,
    +            ///  Status bits, for transmission transfers
    +            STAT_TX: u2,
    +            ///  Data Toggle, for transmission transfers
    +            DTOG_TX: u1,
    +            ///  Correct Transfer for transmission
    +            CTR_TX: u1,
    +            ///  Endpoint kind
    +            EP_KIND: u1,
    +            ///  Endpoint type
    +            EP_TYPE: u2,
    +            ///  Setup transaction completed
    +            SETUP: u1,
    +            ///  Status bits, for reception transfers
    +            STAT_RX: u2,
    +            ///  Data Toggle, for reception transfers
    +            DTOG_RX: u1,
    +            ///  Correct transfer for reception
    +            CTR_RX: u1,
    +            padding: u16,
    +        }),
    +        reserved64: [32]u8,
    +        ///  control register
    +        CNTR: mmio.Mmio(packed struct(u32) {
    +            ///  Force USB Reset
    +            FRES: u1,
    +            ///  Power down
    +            PDWN: u1,
    +            ///  Low-power mode
    +            LPMODE: u1,
    +            ///  Force suspend
    +            FSUSP: u1,
    +            ///  Resume request
    +            RESUME: u1,
    +            reserved8: u3,
    +            ///  Expected start of frame interrupt mask
    +            ESOFM: u1,
    +            ///  Start of frame interrupt mask
    +            SOFM: u1,
    +            ///  USB reset interrupt mask
    +            RESETM: u1,
    +            ///  Suspend mode interrupt mask
    +            SUSPM: u1,
    +            ///  Wakeup interrupt mask
    +            WKUPM: u1,
    +            ///  Error interrupt mask
    +            ERRM: u1,
    +            ///  Packet memory area over / underrun interrupt mask
    +            PMAOVRM: u1,
    +            ///  Correct transfer interrupt mask
    +            CTRM: u1,
    +            padding: u16,
    +        }),
    +        ///  interrupt status register
    +        ISTR: mmio.Mmio(packed struct(u32) {
    +            ///  Endpoint Identifier
    +            EP_ID: u4,
    +            ///  Direction of transaction
    +            DIR: u1,
    +            reserved8: u3,
    +            ///  Expected start frame
    +            ESOF: u1,
    +            ///  start of frame
    +            SOF: u1,
    +            ///  reset request
    +            RESET: u1,
    +            ///  Suspend mode request
    +            SUSP: u1,
    +            ///  Wakeup
    +            WKUP: u1,
    +            ///  Error
    +            ERR: u1,
    +            ///  Packet memory area over / underrun
    +            PMAOVR: u1,
    +            ///  Correct transfer
    +            CTR: u1,
    +            padding: u16,
    +        }),
    +        ///  frame number register
    +        FNR: mmio.Mmio(packed struct(u32) {
    +            ///  Frame number
    +            FN: u11,
    +            ///  Lost SOF
    +            LSOF: u2,
    +            ///  Locked
    +            LCK: u1,
    +            ///  Receive data - line status
    +            RXDM: u1,
    +            ///  Receive data + line status
    +            RXDP: u1,
    +            padding: u16,
    +        }),
    +        ///  device address
    +        DADDR: mmio.Mmio(packed struct(u32) {
    +            ///  Device address
    +            ADD: u7,
    +            ///  Enable function
    +            EF: u1,
    +            padding: u24,
    +        }),
    +        ///  Buffer table address
    +        BTABLE: mmio.Mmio(packed struct(u32) {
    +            reserved3: u3,
    +            ///  Buffer table
    +            BTABLE: u13,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  Basic timer
    +    pub const TIM6 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            ///  One-pulse mode
    +            OPM: u1,
    +            reserved7: u3,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            padding: u24,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            reserved4: u4,
    +            ///  Master mode selection
    +            MMS: u3,
    +            padding: u25,
    +        }),
    +        reserved12: [4]u8,
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            reserved8: u7,
    +            ///  Update DMA request enable
    +            UDE: u1,
    +            padding: u23,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            padding: u31,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            padding: u31,
    +        }),
    +        reserved36: [12]u8,
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  Low counter value
    +            CNT: u16,
    +            padding: u16,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Low Auto-reload value
    +            ARR: u16,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  FLASH
    +    pub const FLASH = extern struct {
    +        ///  Flash access control register
    +        ACR: mmio.Mmio(packed struct(u32) {
    +            ///  Latency
    +            LATENCY: u3,
    +            ///  Flash half cycle access enable
    +            HLFCYA: u1,
    +            ///  Prefetch buffer enable
    +            PRFTBE: u1,
    +            ///  Prefetch buffer status
    +            PRFTBS: u1,
    +            padding: u26,
    +        }),
    +        ///  Flash key register
    +        KEYR: mmio.Mmio(packed struct(u32) {
    +            ///  FPEC key
    +            KEY: u32,
    +        }),
    +        ///  Flash option key register
    +        OPTKEYR: mmio.Mmio(packed struct(u32) {
    +            ///  Option byte key
    +            OPTKEY: u32,
    +        }),
    +        ///  Status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Busy
    +            BSY: u1,
    +            reserved2: u1,
    +            ///  Programming error
    +            PGERR: u1,
    +            reserved4: u1,
    +            ///  Write protection error
    +            WRPRTERR: u1,
    +            ///  End of operation
    +            EOP: u1,
    +            padding: u26,
    +        }),
    +        ///  Control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  Programming
    +            PG: u1,
    +            ///  Page Erase
    +            PER: u1,
    +            ///  Mass Erase
    +            MER: u1,
    +            reserved4: u1,
    +            ///  Option byte programming
    +            OPTPG: u1,
    +            ///  Option byte erase
    +            OPTER: u1,
    +            ///  Start
    +            STRT: u1,
    +            ///  Lock
    +            LOCK: u1,
    +            reserved9: u1,
    +            ///  Option bytes write enable
    +            OPTWRE: u1,
    +            ///  Error interrupt enable
    +            ERRIE: u1,
    +            reserved12: u1,
    +            ///  End of operation interrupt enable
    +            EOPIE: u1,
    +            padding: u19,
    +        }),
    +        ///  Flash address register
    +        AR: mmio.Mmio(packed struct(u32) {
    +            ///  Flash Address
    +            FAR: u32,
    +        }),
    +        reserved28: [4]u8,
    +        ///  Option byte register
    +        OBR: mmio.Mmio(packed struct(u32) {
    +            ///  Option byte error
    +            OPTERR: u1,
    +            ///  Read protection
    +            RDPRT: u1,
    +            ///  WDG_SW
    +            WDG_SW: u1,
    +            ///  nRST_STOP
    +            nRST_STOP: u1,
    +            ///  nRST_STDBY
    +            nRST_STDBY: u1,
    +            reserved10: u5,
    +            ///  Data0
    +            Data0: u8,
    +            ///  Data1
    +            Data1: u8,
    +            padding: u6,
    +        }),
    +        ///  Write protection register
    +        WRPR: mmio.Mmio(packed struct(u32) {
    +            ///  Write protect
    +            WRP: u32,
    +        }),
    +    };
    +
    +    ///  Inter integrated circuit
    +    pub const I2C1 = extern struct {
    +        ///  Control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral enable
    +            PE: u1,
    +            ///  SMBus mode
    +            SMBUS: u1,
    +            reserved3: u1,
    +            ///  SMBus type
    +            SMBTYPE: u1,
    +            ///  ARP enable
    +            ENARP: u1,
    +            ///  PEC enable
    +            ENPEC: u1,
    +            ///  General call enable
    +            ENGC: u1,
    +            ///  Clock stretching disable (Slave mode)
    +            NOSTRETCH: u1,
    +            ///  Start generation
    +            START: u1,
    +            ///  Stop generation
    +            STOP: u1,
    +            ///  Acknowledge enable
    +            ACK: u1,
    +            ///  Acknowledge/PEC Position (for data reception)
    +            POS: u1,
    +            ///  Packet error checking
    +            PEC: u1,
    +            ///  SMBus alert
    +            ALERT: u1,
    +            reserved15: u1,
    +            ///  Software reset
    +            SWRST: u1,
    +            padding: u16,
    +        }),
    +        ///  Control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral clock frequency
    +            FREQ: u6,
    +            reserved8: u2,
    +            ///  Error interrupt enable
    +            ITERREN: u1,
    +            ///  Event interrupt enable
    +            ITEVTEN: u1,
    +            ///  Buffer interrupt enable
    +            ITBUFEN: u1,
    +            ///  DMA requests enable
    +            DMAEN: u1,
    +            ///  DMA last transfer
    +            LAST: u1,
    +            padding: u19,
    +        }),
    +        ///  Own address register 1
    +        OAR1: mmio.Mmio(packed struct(u32) {
    +            ///  Interface address
    +            ADD0: u1,
    +            ///  Interface address
    +            ADD7: u7,
    +            ///  Interface address
    +            ADD10: u2,
    +            reserved15: u5,
    +            ///  Addressing mode (slave mode)
    +            ADDMODE: u1,
    +            padding: u16,
    +        }),
    +        ///  Own address register 2
    +        OAR2: mmio.Mmio(packed struct(u32) {
    +            ///  Dual addressing mode enable
    +            ENDUAL: u1,
    +            ///  Interface address
    +            ADD2: u7,
    +            padding: u24,
    +        }),
    +        ///  Data register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  8-bit data register
    +            DR: u8,
    +            padding: u24,
    +        }),
    +        ///  Status register 1
    +        SR1: mmio.Mmio(packed struct(u32) {
    +            ///  Start bit (Master mode)
    +            SB: u1,
    +            ///  Address sent (master mode)/matched (slave mode)
    +            ADDR: u1,
    +            ///  Byte transfer finished
    +            BTF: u1,
    +            ///  10-bit header sent (Master mode)
    +            ADD10: u1,
    +            ///  Stop detection (slave mode)
    +            STOPF: u1,
    +            reserved6: u1,
    +            ///  Data register not empty (receivers)
    +            RxNE: u1,
    +            ///  Data register empty (transmitters)
    +            TxE: u1,
    +            ///  Bus error
    +            BERR: u1,
    +            ///  Arbitration lost (master mode)
    +            ARLO: u1,
    +            ///  Acknowledge failure
    +            AF: u1,
    +            ///  Overrun/Underrun
    +            OVR: u1,
    +            ///  PEC Error in reception
    +            PECERR: u1,
    +            reserved14: u1,
    +            ///  Timeout or Tlow error
    +            TIMEOUT: u1,
    +            ///  SMBus alert
    +            SMBALERT: u1,
    +            padding: u16,
    +        }),
    +        ///  Status register 2
    +        SR2: mmio.Mmio(packed struct(u32) {
    +            ///  Master/slave
    +            MSL: u1,
    +            ///  Bus busy
    +            BUSY: u1,
    +            ///  Transmitter/receiver
    +            TRA: u1,
    +            reserved4: u1,
    +            ///  General call address (Slave mode)
    +            GENCALL: u1,
    +            ///  SMBus device default address (Slave mode)
    +            SMBDEFAULT: u1,
    +            ///  SMBus host header (Slave mode)
    +            SMBHOST: u1,
    +            ///  Dual flag (Slave mode)
    +            DUALF: u1,
    +            ///  acket error checking register
    +            PEC: u8,
    +            padding: u16,
    +        }),
    +        ///  Clock control register
    +        CCR: mmio.Mmio(packed struct(u32) {
    +            ///  Clock control register in Fast/Standard mode (Master mode)
    +            CCR: u12,
    +            reserved14: u2,
    +            ///  Fast mode duty cycle
    +            DUTY: u1,
    +            ///  I2C master mode selection
    +            F_S: u1,
    +            padding: u16,
    +        }),
    +        ///  TRISE register
    +        TRISE: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum rise time in Fast/Standard mode (Master mode)
    +            TRISE: u6,
    +            padding: u26,
    +        }),
    +    };
    +
    +    ///  CRC calculation unit
    +    pub const CRC = extern struct {
    +        ///  Data register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  Data Register
    +            DR: u32,
    +        }),
    +        ///  Independent Data register
    +        IDR: mmio.Mmio(packed struct(u32) {
    +            ///  Independent Data register
    +            IDR: u8,
    +            padding: u24,
    +        }),
    +        ///  Control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  Reset bit
    +            RESET: u1,
    +            padding: u31,
    +        }),
    +    };
    +
    +    ///  Serial peripheral interface
    +    pub const SPI1 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Clock phase
    +            CPHA: u1,
    +            ///  Clock polarity
    +            CPOL: u1,
    +            ///  Master selection
    +            MSTR: u1,
    +            ///  Baud rate control
    +            BR: u3,
    +            ///  SPI enable
    +            SPE: u1,
    +            ///  Frame format
    +            LSBFIRST: u1,
    +            ///  Internal slave select
    +            SSI: u1,
    +            ///  Software slave management
    +            SSM: u1,
    +            ///  Receive only
    +            RXONLY: u1,
    +            ///  Data frame format
    +            DFF: u1,
    +            ///  CRC transfer next
    +            CRCNEXT: u1,
    +            ///  Hardware CRC calculation enable
    +            CRCEN: u1,
    +            ///  Output enable in bidirectional mode
    +            BIDIOE: u1,
    +            ///  Bidirectional data mode enable
    +            BIDIMODE: u1,
    +            padding: u16,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            ///  Rx buffer DMA enable
    +            RXDMAEN: u1,
    +            ///  Tx buffer DMA enable
    +            TXDMAEN: u1,
    +            ///  SS output enable
    +            SSOE: u1,
    +            reserved5: u2,
    +            ///  Error interrupt enable
    +            ERRIE: u1,
    +            ///  RX buffer not empty interrupt enable
    +            RXNEIE: u1,
    +            ///  Tx buffer empty interrupt enable
    +            TXEIE: u1,
    +            padding: u24,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Receive buffer not empty
    +            RXNE: u1,
    +            ///  Transmit buffer empty
    +            TXE: u1,
    +            ///  Channel side
    +            CHSIDE: u1,
    +            ///  Underrun flag
    +            UDR: u1,
    +            ///  CRC error flag
    +            CRCERR: u1,
    +            ///  Mode fault
    +            MODF: u1,
    +            ///  Overrun flag
    +            OVR: u1,
    +            ///  Busy flag
    +            BSY: u1,
    +            padding: u24,
    +        }),
    +        ///  data register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  Data register
    +            DR: u16,
    +            padding: u16,
    +        }),
    +        ///  CRC polynomial register
    +        CRCPR: mmio.Mmio(packed struct(u32) {
    +            ///  CRC polynomial register
    +            CRCPOLY: u16,
    +            padding: u16,
    +        }),
    +        ///  RX CRC register
    +        RXCRCR: mmio.Mmio(packed struct(u32) {
    +            ///  Rx CRC register
    +            RxCRC: u16,
    +            padding: u16,
    +        }),
    +        ///  TX CRC register
    +        TXCRCR: mmio.Mmio(packed struct(u32) {
    +            ///  Tx CRC register
    +            TxCRC: u16,
    +            padding: u16,
    +        }),
    +        ///  I2S configuration register
    +        I2SCFGR: mmio.Mmio(packed struct(u32) {
    +            ///  Channel length (number of bits per audio channel)
    +            CHLEN: u1,
    +            ///  Data length to be transferred
    +            DATLEN: u2,
    +            ///  Steady state clock polarity
    +            CKPOL: u1,
    +            ///  I2S standard selection
    +            I2SSTD: u2,
    +            reserved7: u1,
    +            ///  PCM frame synchronization
    +            PCMSYNC: u1,
    +            ///  I2S configuration mode
    +            I2SCFG: u2,
    +            ///  I2S Enable
    +            I2SE: u1,
    +            ///  I2S mode selection
    +            I2SMOD: u1,
    +            padding: u20,
    +        }),
    +        ///  I2S prescaler register
    +        I2SPR: mmio.Mmio(packed struct(u32) {
    +            ///  I2S Linear prescaler
    +            I2SDIV: u8,
    +            ///  Odd factor for the prescaler
    +            ODD: u1,
    +            ///  Master clock output enable
    +            MCKOE: u1,
    +            padding: u22,
    +        }),
    +    };
    +
    +    ///  Universal asynchronous receiver transmitter
    +    pub const UART5 = extern struct {
    +        ///  UART4_SR
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  PE
    +            PE: u1,
    +            ///  FE
    +            FE: u1,
    +            ///  NE
    +            NE: u1,
    +            ///  ORE
    +            ORE: u1,
    +            ///  IDLE
    +            IDLE: u1,
    +            ///  RXNE
    +            RXNE: u1,
    +            ///  TC
    +            TC: u1,
    +            ///  TXE
    +            TXE: u1,
    +            ///  LBD
    +            LBD: u1,
    +            padding: u23,
    +        }),
    +        ///  UART4_DR
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  DR
    +            DR: u9,
    +            padding: u23,
    +        }),
    +        ///  UART4_BRR
    +        BRR: mmio.Mmio(packed struct(u32) {
    +            ///  DIV_Fraction
    +            DIV_Fraction: u4,
    +            ///  DIV_Mantissa
    +            DIV_Mantissa: u12,
    +            padding: u16,
    +        }),
    +        ///  UART4_CR1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  SBK
    +            SBK: u1,
    +            ///  RWU
    +            RWU: u1,
    +            ///  RE
    +            RE: u1,
    +            ///  TE
    +            TE: u1,
    +            ///  IDLEIE
    +            IDLEIE: u1,
    +            ///  RXNEIE
    +            RXNEIE: u1,
    +            ///  TCIE
    +            TCIE: u1,
    +            ///  TXEIE
    +            TXEIE: u1,
    +            ///  PEIE
    +            PEIE: u1,
    +            ///  PS
    +            PS: u1,
    +            ///  PCE
    +            PCE: u1,
    +            ///  WAKE
    +            WAKE: u1,
    +            ///  M
    +            M: u1,
    +            ///  UE
    +            UE: u1,
    +            padding: u18,
    +        }),
    +        ///  UART4_CR2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            ///  ADD
    +            ADD: u4,
    +            reserved5: u1,
    +            ///  LBDL
    +            LBDL: u1,
    +            ///  LBDIE
    +            LBDIE: u1,
    +            reserved12: u5,
    +            ///  STOP
    +            STOP: u2,
    +            ///  LINEN
    +            LINEN: u1,
    +            padding: u17,
    +        }),
    +        ///  UART4_CR3
    +        CR3: mmio.Mmio(packed struct(u32) {
    +            ///  Error interrupt enable
    +            EIE: u1,
    +            ///  IrDA mode enable
    +            IREN: u1,
    +            ///  IrDA low-power
    +            IRLP: u1,
    +            ///  Half-duplex selection
    +            HDSEL: u1,
    +            reserved7: u3,
    +            ///  DMA enable transmitter
    +            DMAT: u1,
    +            padding: u24,
    +        }),
    +    };
    +
    +    ///  Universal asynchronous receiver transmitter
    +    pub const UART4 = extern struct {
    +        ///  UART4_SR
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Parity error
    +            PE: u1,
    +            ///  Framing error
    +            FE: u1,
    +            ///  Noise error flag
    +            NE: u1,
    +            ///  Overrun error
    +            ORE: u1,
    +            ///  IDLE line detected
    +            IDLE: u1,
    +            ///  Read data register not empty
    +            RXNE: u1,
    +            ///  Transmission complete
    +            TC: u1,
    +            ///  Transmit data register empty
    +            TXE: u1,
    +            ///  LIN break detection flag
    +            LBD: u1,
    +            padding: u23,
    +        }),
    +        ///  UART4_DR
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  DR
    +            DR: u9,
    +            padding: u23,
    +        }),
    +        ///  UART4_BRR
    +        BRR: mmio.Mmio(packed struct(u32) {
    +            ///  DIV_Fraction
    +            DIV_Fraction: u4,
    +            ///  DIV_Mantissa
    +            DIV_Mantissa: u12,
    +            padding: u16,
    +        }),
    +        ///  UART4_CR1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Send break
    +            SBK: u1,
    +            ///  Receiver wakeup
    +            RWU: u1,
    +            ///  Receiver enable
    +            RE: u1,
    +            ///  Transmitter enable
    +            TE: u1,
    +            ///  IDLE interrupt enable
    +            IDLEIE: u1,
    +            ///  RXNE interrupt enable
    +            RXNEIE: u1,
    +            ///  Transmission complete interrupt enable
    +            TCIE: u1,
    +            ///  TXE interrupt enable
    +            TXEIE: u1,
    +            ///  PE interrupt enable
    +            PEIE: u1,
    +            ///  Parity selection
    +            PS: u1,
    +            ///  Parity control enable
    +            PCE: u1,
    +            ///  Wakeup method
    +            WAKE: u1,
    +            ///  Word length
    +            M: u1,
    +            ///  USART enable
    +            UE: u1,
    +            padding: u18,
    +        }),
    +        ///  UART4_CR2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            ///  Address of the USART node
    +            ADD: u4,
    +            reserved5: u1,
    +            ///  lin break detection length
    +            LBDL: u1,
    +            ///  LIN break detection interrupt enable
    +            LBDIE: u1,
    +            reserved12: u5,
    +            ///  STOP bits
    +            STOP: u2,
    +            ///  LIN mode enable
    +            LINEN: u1,
    +            padding: u17,
    +        }),
    +        ///  UART4_CR3
    +        CR3: mmio.Mmio(packed struct(u32) {
    +            ///  Error interrupt enable
    +            EIE: u1,
    +            ///  IrDA mode enable
    +            IREN: u1,
    +            ///  IrDA low-power
    +            IRLP: u1,
    +            ///  Half-duplex selection
    +            HDSEL: u1,
    +            reserved6: u2,
    +            ///  DMA enable receiver
    +            DMAR: u1,
    +            ///  DMA enable transmitter
    +            DMAT: u1,
    +            padding: u24,
    +        }),
    +    };
    +
    +    ///  Universal synchronous asynchronous receiver transmitter
    +    pub const USART1 = extern struct {
    +        ///  Status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Parity error
    +            PE: u1,
    +            ///  Framing error
    +            FE: u1,
    +            ///  Noise error flag
    +            NE: u1,
    +            ///  Overrun error
    +            ORE: u1,
    +            ///  IDLE line detected
    +            IDLE: u1,
    +            ///  Read data register not empty
    +            RXNE: u1,
    +            ///  Transmission complete
    +            TC: u1,
    +            ///  Transmit data register empty
    +            TXE: u1,
    +            ///  LIN break detection flag
    +            LBD: u1,
    +            ///  CTS flag
    +            CTS: u1,
    +            padding: u22,
    +        }),
    +        ///  Data register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  Data value
    +            DR: u9,
    +            padding: u23,
    +        }),
    +        ///  Baud rate register
    +        BRR: mmio.Mmio(packed struct(u32) {
    +            ///  fraction of USARTDIV
    +            DIV_Fraction: u4,
    +            ///  mantissa of USARTDIV
    +            DIV_Mantissa: u12,
    +            padding: u16,
    +        }),
    +        ///  Control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Send break
    +            SBK: u1,
    +            ///  Receiver wakeup
    +            RWU: u1,
    +            ///  Receiver enable
    +            RE: u1,
    +            ///  Transmitter enable
    +            TE: u1,
    +            ///  IDLE interrupt enable
    +            IDLEIE: u1,
    +            ///  RXNE interrupt enable
    +            RXNEIE: u1,
    +            ///  Transmission complete interrupt enable
    +            TCIE: u1,
    +            ///  TXE interrupt enable
    +            TXEIE: u1,
    +            ///  PE interrupt enable
    +            PEIE: u1,
    +            ///  Parity selection
    +            PS: u1,
    +            ///  Parity control enable
    +            PCE: u1,
    +            ///  Wakeup method
    +            WAKE: u1,
    +            ///  Word length
    +            M: u1,
    +            ///  USART enable
    +            UE: u1,
    +            padding: u18,
    +        }),
    +        ///  Control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            ///  Address of the USART node
    +            ADD: u4,
    +            reserved5: u1,
    +            ///  lin break detection length
    +            LBDL: u1,
    +            ///  LIN break detection interrupt enable
    +            LBDIE: u1,
    +            reserved8: u1,
    +            ///  Last bit clock pulse
    +            LBCL: u1,
    +            ///  Clock phase
    +            CPHA: u1,
    +            ///  Clock polarity
    +            CPOL: u1,
    +            ///  Clock enable
    +            CLKEN: u1,
    +            ///  STOP bits
    +            STOP: u2,
    +            ///  LIN mode enable
    +            LINEN: u1,
    +            padding: u17,
    +        }),
    +        ///  Control register 3
    +        CR3: mmio.Mmio(packed struct(u32) {
    +            ///  Error interrupt enable
    +            EIE: u1,
    +            ///  IrDA mode enable
    +            IREN: u1,
    +            ///  IrDA low-power
    +            IRLP: u1,
    +            ///  Half-duplex selection
    +            HDSEL: u1,
    +            ///  Smartcard NACK enable
    +            NACK: u1,
    +            ///  Smartcard mode enable
    +            SCEN: u1,
    +            ///  DMA enable receiver
    +            DMAR: u1,
    +            ///  DMA enable transmitter
    +            DMAT: u1,
    +            ///  RTS enable
    +            RTSE: u1,
    +            ///  CTS enable
    +            CTSE: u1,
    +            ///  CTS interrupt enable
    +            CTSIE: u1,
    +            padding: u21,
    +        }),
    +        ///  Guard time and prescaler register
    +        GTPR: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u8,
    +            ///  Guard time value
    +            GT: u8,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  Debug support
    +    pub const DBG = extern struct {
    +        ///  DBGMCU_IDCODE
    +        IDCODE: mmio.Mmio(packed struct(u32) {
    +            ///  DEV_ID
    +            DEV_ID: u12,
    +            reserved16: u4,
    +            ///  REV_ID
    +            REV_ID: u16,
    +        }),
    +        ///  DBGMCU_CR
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  DBG_SLEEP
    +            DBG_SLEEP: u1,
    +            ///  DBG_STOP
    +            DBG_STOP: u1,
    +            ///  DBG_STANDBY
    +            DBG_STANDBY: u1,
    +            reserved5: u2,
    +            ///  TRACE_IOEN
    +            TRACE_IOEN: u1,
    +            ///  TRACE_MODE
    +            TRACE_MODE: u2,
    +            ///  DBG_IWDG_STOP
    +            DBG_IWDG_STOP: u1,
    +            ///  DBG_WWDG_STOP
    +            DBG_WWDG_STOP: u1,
    +            ///  DBG_TIM1_STOP
    +            DBG_TIM1_STOP: u1,
    +            ///  DBG_TIM2_STOP
    +            DBG_TIM2_STOP: u1,
    +            ///  DBG_TIM3_STOP
    +            DBG_TIM3_STOP: u1,
    +            ///  DBG_TIM4_STOP
    +            DBG_TIM4_STOP: u1,
    +            ///  DBG_CAN1_STOP
    +            DBG_CAN1_STOP: u1,
    +            ///  DBG_I2C1_SMBUS_TIMEOUT
    +            DBG_I2C1_SMBUS_TIMEOUT: u1,
    +            ///  DBG_I2C2_SMBUS_TIMEOUT
    +            DBG_I2C2_SMBUS_TIMEOUT: u1,
    +            ///  DBG_TIM8_STOP
    +            DBG_TIM8_STOP: u1,
    +            ///  DBG_TIM5_STOP
    +            DBG_TIM5_STOP: u1,
    +            ///  DBG_TIM6_STOP
    +            DBG_TIM6_STOP: u1,
    +            ///  DBG_TIM7_STOP
    +            DBG_TIM7_STOP: u1,
    +            ///  DBG_CAN2_STOP
    +            DBG_CAN2_STOP: u1,
    +            padding: u10,
    +        }),
    +    };
    +
    +    ///  Digital to analog converter
    +    pub const DAC = extern struct {
    +        ///  Control register (DAC_CR)
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 enable
    +            EN1: u1,
    +            ///  DAC channel1 output buffer disable
    +            BOFF1: u1,
    +            ///  DAC channel1 trigger enable
    +            TEN1: u1,
    +            ///  DAC channel1 trigger selection
    +            TSEL1: u3,
    +            ///  DAC channel1 noise/triangle wave generation enable
    +            WAVE1: u2,
    +            ///  DAC channel1 mask/amplitude selector
    +            MAMP1: u4,
    +            ///  DAC channel1 DMA enable
    +            DMAEN1: u1,
    +            reserved16: u3,
    +            ///  DAC channel2 enable
    +            EN2: u1,
    +            ///  DAC channel2 output buffer disable
    +            BOFF2: u1,
    +            ///  DAC channel2 trigger enable
    +            TEN2: u1,
    +            ///  DAC channel2 trigger selection
    +            TSEL2: u3,
    +            ///  DAC channel2 noise/triangle wave generation enable
    +            WAVE2: u2,
    +            ///  DAC channel2 mask/amplitude selector
    +            MAMP2: u4,
    +            ///  DAC channel2 DMA enable
    +            DMAEN2: u1,
    +            padding: u3,
    +        }),
    +        ///  DAC software trigger register (DAC_SWTRIGR)
    +        SWTRIGR: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 software trigger
    +            SWTRIG1: u1,
    +            ///  DAC channel2 software trigger
    +            SWTRIG2: u1,
    +            padding: u30,
    +        }),
    +        ///  DAC channel1 12-bit right-aligned data holding register(DAC_DHR12R1)
    +        DHR12R1: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 12-bit right-aligned data
    +            DACC1DHR: u12,
    +            padding: u20,
    +        }),
    +        ///  DAC channel1 12-bit left aligned data holding register (DAC_DHR12L1)
    +        DHR12L1: mmio.Mmio(packed struct(u32) {
    +            reserved4: u4,
    +            ///  DAC channel1 12-bit left-aligned data
    +            DACC1DHR: u12,
    +            padding: u16,
    +        }),
    +        ///  DAC channel1 8-bit right aligned data holding register (DAC_DHR8R1)
    +        DHR8R1: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 8-bit right-aligned data
    +            DACC1DHR: u8,
    +            padding: u24,
    +        }),
    +        ///  DAC channel2 12-bit right aligned data holding register (DAC_DHR12R2)
    +        DHR12R2: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel2 12-bit right-aligned data
    +            DACC2DHR: u12,
    +            padding: u20,
    +        }),
    +        ///  DAC channel2 12-bit left aligned data holding register (DAC_DHR12L2)
    +        DHR12L2: mmio.Mmio(packed struct(u32) {
    +            reserved4: u4,
    +            ///  DAC channel2 12-bit left-aligned data
    +            DACC2DHR: u12,
    +            padding: u16,
    +        }),
    +        ///  DAC channel2 8-bit right-aligned data holding register (DAC_DHR8R2)
    +        DHR8R2: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel2 8-bit right-aligned data
    +            DACC2DHR: u8,
    +            padding: u24,
    +        }),
    +        ///  Dual DAC 12-bit right-aligned data holding register (DAC_DHR12RD), Bits 31:28 Reserved, Bits 15:12 Reserved
    +        DHR12RD: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 12-bit right-aligned data
    +            DACC1DHR: u12,
    +            reserved16: u4,
    +            ///  DAC channel2 12-bit right-aligned data
    +            DACC2DHR: u12,
    +            padding: u4,
    +        }),
    +        ///  DUAL DAC 12-bit left aligned data holding register (DAC_DHR12LD), Bits 19:16 Reserved, Bits 3:0 Reserved
    +        DHR12LD: mmio.Mmio(packed struct(u32) {
    +            reserved4: u4,
    +            ///  DAC channel1 12-bit left-aligned data
    +            DACC1DHR: u12,
    +            reserved20: u4,
    +            ///  DAC channel2 12-bit right-aligned data
    +            DACC2DHR: u12,
    +        }),
    +        ///  DUAL DAC 8-bit right aligned data holding register (DAC_DHR8RD), Bits 31:16 Reserved
    +        DHR8RD: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 8-bit right-aligned data
    +            DACC1DHR: u8,
    +            ///  DAC channel2 8-bit right-aligned data
    +            DACC2DHR: u8,
    +            padding: u16,
    +        }),
    +        ///  DAC channel1 data output register (DAC_DOR1)
    +        DOR1: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 data output
    +            DACC1DOR: u12,
    +            padding: u20,
    +        }),
    +        ///  DAC channel2 data output register (DAC_DOR2)
    +        DOR2: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel2 data output
    +            DACC2DOR: u12,
    +            padding: u20,
    +        }),
    +    };
    +
    +    ///  Analog to digital converter
    +    pub const ADC1 = extern struct {
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Analog watchdog flag
    +            AWD: u1,
    +            ///  Regular channel end of conversion
    +            EOC: u1,
    +            ///  Injected channel end of conversion
    +            JEOC: u1,
    +            ///  Injected channel start flag
    +            JSTRT: u1,
    +            ///  Regular channel start flag
    +            STRT: u1,
    +            padding: u27,
    +        }),
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Analog watchdog channel select bits
    +            AWDCH: u5,
    +            ///  Interrupt enable for EOC
    +            EOCIE: u1,
    +            ///  Analog watchdog interrupt enable
    +            AWDIE: u1,
    +            ///  Interrupt enable for injected channels
    +            JEOCIE: u1,
    +            ///  Scan mode
    +            SCAN: u1,
    +            ///  Enable the watchdog on a single channel in scan mode
    +            AWDSGL: u1,
    +            ///  Automatic injected group conversion
    +            JAUTO: u1,
    +            ///  Discontinuous mode on regular channels
    +            DISCEN: u1,
    +            ///  Discontinuous mode on injected channels
    +            JDISCEN: u1,
    +            ///  Discontinuous mode channel count
    +            DISCNUM: u3,
    +            ///  Dual mode selection
    +            DUALMOD: u4,
    +            reserved22: u2,
    +            ///  Analog watchdog enable on injected channels
    +            JAWDEN: u1,
    +            ///  Analog watchdog enable on regular channels
    +            AWDEN: u1,
    +            padding: u8,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            ///  A/D converter ON / OFF
    +            ADON: u1,
    +            ///  Continuous conversion
    +            CONT: u1,
    +            ///  A/D calibration
    +            CAL: u1,
    +            ///  Reset calibration
    +            RSTCAL: u1,
    +            reserved8: u4,
    +            ///  Direct memory access mode
    +            DMA: u1,
    +            reserved11: u2,
    +            ///  Data alignment
    +            ALIGN: u1,
    +            ///  External event select for injected group
    +            JEXTSEL: u3,
    +            ///  External trigger conversion mode for injected channels
    +            JEXTTRIG: u1,
    +            reserved17: u1,
    +            ///  External event select for regular group
    +            EXTSEL: u3,
    +            ///  External trigger conversion mode for regular channels
    +            EXTTRIG: u1,
    +            ///  Start conversion of injected channels
    +            JSWSTART: u1,
    +            ///  Start conversion of regular channels
    +            SWSTART: u1,
    +            ///  Temperature sensor and VREFINT enable
    +            TSVREFE: u1,
    +            padding: u8,
    +        }),
    +        ///  sample time register 1
    +        SMPR1: mmio.Mmio(packed struct(u32) {
    +            ///  Channel 10 sample time selection
    +            SMP10: u3,
    +            ///  Channel 11 sample time selection
    +            SMP11: u3,
    +            ///  Channel 12 sample time selection
    +            SMP12: u3,
    +            ///  Channel 13 sample time selection
    +            SMP13: u3,
    +            ///  Channel 14 sample time selection
    +            SMP14: u3,
    +            ///  Channel 15 sample time selection
    +            SMP15: u3,
    +            ///  Channel 16 sample time selection
    +            SMP16: u3,
    +            ///  Channel 17 sample time selection
    +            SMP17: u3,
    +            padding: u8,
    +        }),
    +        ///  sample time register 2
    +        SMPR2: mmio.Mmio(packed struct(u32) {
    +            ///  Channel 0 sample time selection
    +            SMP0: u3,
    +            ///  Channel 1 sample time selection
    +            SMP1: u3,
    +            ///  Channel 2 sample time selection
    +            SMP2: u3,
    +            ///  Channel 3 sample time selection
    +            SMP3: u3,
    +            ///  Channel 4 sample time selection
    +            SMP4: u3,
    +            ///  Channel 5 sample time selection
    +            SMP5: u3,
    +            ///  Channel 6 sample time selection
    +            SMP6: u3,
    +            ///  Channel 7 sample time selection
    +            SMP7: u3,
    +            ///  Channel 8 sample time selection
    +            SMP8: u3,
    +            ///  Channel 9 sample time selection
    +            SMP9: u3,
    +            padding: u2,
    +        }),
    +        ///  injected channel data offset register x
    +        JOFR1: mmio.Mmio(packed struct(u32) {
    +            ///  Data offset for injected channel x
    +            JOFFSET1: u12,
    +            padding: u20,
    +        }),
    +        ///  injected channel data offset register x
    +        JOFR2: mmio.Mmio(packed struct(u32) {
    +            ///  Data offset for injected channel x
    +            JOFFSET2: u12,
    +            padding: u20,
    +        }),
    +        ///  injected channel data offset register x
    +        JOFR3: mmio.Mmio(packed struct(u32) {
    +            ///  Data offset for injected channel x
    +            JOFFSET3: u12,
    +            padding: u20,
    +        }),
    +        ///  injected channel data offset register x
    +        JOFR4: mmio.Mmio(packed struct(u32) {
    +            ///  Data offset for injected channel x
    +            JOFFSET4: u12,
    +            padding: u20,
    +        }),
    +        ///  watchdog higher threshold register
    +        HTR: mmio.Mmio(packed struct(u32) {
    +            ///  Analog watchdog higher threshold
    +            HT: u12,
    +            padding: u20,
    +        }),
    +        ///  watchdog lower threshold register
    +        LTR: mmio.Mmio(packed struct(u32) {
    +            ///  Analog watchdog lower threshold
    +            LT: u12,
    +            padding: u20,
    +        }),
    +        ///  regular sequence register 1
    +        SQR1: mmio.Mmio(packed struct(u32) {
    +            ///  13th conversion in regular sequence
    +            SQ13: u5,
    +            ///  14th conversion in regular sequence
    +            SQ14: u5,
    +            ///  15th conversion in regular sequence
    +            SQ15: u5,
    +            ///  16th conversion in regular sequence
    +            SQ16: u5,
    +            ///  Regular channel sequence length
    +            L: u4,
    +            padding: u8,
    +        }),
    +        ///  regular sequence register 2
    +        SQR2: mmio.Mmio(packed struct(u32) {
    +            ///  7th conversion in regular sequence
    +            SQ7: u5,
    +            ///  8th conversion in regular sequence
    +            SQ8: u5,
    +            ///  9th conversion in regular sequence
    +            SQ9: u5,
    +            ///  10th conversion in regular sequence
    +            SQ10: u5,
    +            ///  11th conversion in regular sequence
    +            SQ11: u5,
    +            ///  12th conversion in regular sequence
    +            SQ12: u5,
    +            padding: u2,
    +        }),
    +        ///  regular sequence register 3
    +        SQR3: mmio.Mmio(packed struct(u32) {
    +            ///  1st conversion in regular sequence
    +            SQ1: u5,
    +            ///  2nd conversion in regular sequence
    +            SQ2: u5,
    +            ///  3rd conversion in regular sequence
    +            SQ3: u5,
    +            ///  4th conversion in regular sequence
    +            SQ4: u5,
    +            ///  5th conversion in regular sequence
    +            SQ5: u5,
    +            ///  6th conversion in regular sequence
    +            SQ6: u5,
    +            padding: u2,
    +        }),
    +        ///  injected sequence register
    +        JSQR: mmio.Mmio(packed struct(u32) {
    +            ///  1st conversion in injected sequence
    +            JSQ1: u5,
    +            ///  2nd conversion in injected sequence
    +            JSQ2: u5,
    +            ///  3rd conversion in injected sequence
    +            JSQ3: u5,
    +            ///  4th conversion in injected sequence
    +            JSQ4: u5,
    +            ///  Injected sequence length
    +            JL: u2,
    +            padding: u10,
    +        }),
    +        ///  injected data register x
    +        JDR1: mmio.Mmio(packed struct(u32) {
    +            ///  Injected data
    +            JDATA: u16,
    +            padding: u16,
    +        }),
    +        ///  injected data register x
    +        JDR2: mmio.Mmio(packed struct(u32) {
    +            ///  Injected data
    +            JDATA: u16,
    +            padding: u16,
    +        }),
    +        ///  injected data register x
    +        JDR3: mmio.Mmio(packed struct(u32) {
    +            ///  Injected data
    +            JDATA: u16,
    +            padding: u16,
    +        }),
    +        ///  injected data register x
    +        JDR4: mmio.Mmio(packed struct(u32) {
    +            ///  Injected data
    +            JDATA: u16,
    +            padding: u16,
    +        }),
    +        ///  regular data register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  Regular data
    +            DATA: u16,
    +            ///  ADC2 data
    +            ADC2DATA: u16,
    +        }),
    +    };
    +
    +    ///  Analog to digital converter
    +    pub const ADC2 = extern struct {
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Analog watchdog flag
    +            AWD: u1,
    +            ///  Regular channel end of conversion
    +            EOC: u1,
    +            ///  Injected channel end of conversion
    +            JEOC: u1,
    +            ///  Injected channel start flag
    +            JSTRT: u1,
    +            ///  Regular channel start flag
    +            STRT: u1,
    +            padding: u27,
    +        }),
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Analog watchdog channel select bits
    +            AWDCH: u5,
    +            ///  Interrupt enable for EOC
    +            EOCIE: u1,
    +            ///  Analog watchdog interrupt enable
    +            AWDIE: u1,
    +            ///  Interrupt enable for injected channels
    +            JEOCIE: u1,
    +            ///  Scan mode
    +            SCAN: u1,
    +            ///  Enable the watchdog on a single channel in scan mode
    +            AWDSGL: u1,
    +            ///  Automatic injected group conversion
    +            JAUTO: u1,
    +            ///  Discontinuous mode on regular channels
    +            DISCEN: u1,
    +            ///  Discontinuous mode on injected channels
    +            JDISCEN: u1,
    +            ///  Discontinuous mode channel count
    +            DISCNUM: u3,
    +            reserved22: u6,
    +            ///  Analog watchdog enable on injected channels
    +            JAWDEN: u1,
    +            ///  Analog watchdog enable on regular channels
    +            AWDEN: u1,
    +            padding: u8,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            ///  A/D converter ON / OFF
    +            ADON: u1,
    +            ///  Continuous conversion
    +            CONT: u1,
    +            ///  A/D calibration
    +            CAL: u1,
    +            ///  Reset calibration
    +            RSTCAL: u1,
    +            reserved8: u4,
    +            ///  Direct memory access mode
    +            DMA: u1,
    +            reserved11: u2,
    +            ///  Data alignment
    +            ALIGN: u1,
    +            ///  External event select for injected group
    +            JEXTSEL: u3,
    +            ///  External trigger conversion mode for injected channels
    +            JEXTTRIG: u1,
    +            reserved17: u1,
    +            ///  External event select for regular group
    +            EXTSEL: u3,
    +            ///  External trigger conversion mode for regular channels
    +            EXTTRIG: u1,
    +            ///  Start conversion of injected channels
    +            JSWSTART: u1,
    +            ///  Start conversion of regular channels
    +            SWSTART: u1,
    +            ///  Temperature sensor and VREFINT enable
    +            TSVREFE: u1,
    +            padding: u8,
    +        }),
    +        ///  sample time register 1
    +        SMPR1: mmio.Mmio(packed struct(u32) {
    +            ///  Channel 10 sample time selection
    +            SMP10: u3,
    +            ///  Channel 11 sample time selection
    +            SMP11: u3,
    +            ///  Channel 12 sample time selection
    +            SMP12: u3,
    +            ///  Channel 13 sample time selection
    +            SMP13: u3,
    +            ///  Channel 14 sample time selection
    +            SMP14: u3,
    +            ///  Channel 15 sample time selection
    +            SMP15: u3,
    +            ///  Channel 16 sample time selection
    +            SMP16: u3,
    +            ///  Channel 17 sample time selection
    +            SMP17: u3,
    +            padding: u8,
    +        }),
    +        ///  sample time register 2
    +        SMPR2: mmio.Mmio(packed struct(u32) {
    +            ///  Channel 0 sample time selection
    +            SMP0: u3,
    +            ///  Channel 1 sample time selection
    +            SMP1: u3,
    +            ///  Channel 2 sample time selection
    +            SMP2: u3,
    +            ///  Channel 3 sample time selection
    +            SMP3: u3,
    +            ///  Channel 4 sample time selection
    +            SMP4: u3,
    +            ///  Channel 5 sample time selection
    +            SMP5: u3,
    +            ///  Channel 6 sample time selection
    +            SMP6: u3,
    +            ///  Channel 7 sample time selection
    +            SMP7: u3,
    +            ///  Channel 8 sample time selection
    +            SMP8: u3,
    +            ///  Channel 9 sample time selection
    +            SMP9: u3,
    +            padding: u2,
    +        }),
    +        ///  injected channel data offset register x
    +        JOFR1: mmio.Mmio(packed struct(u32) {
    +            ///  Data offset for injected channel x
    +            JOFFSET1: u12,
    +            padding: u20,
    +        }),
    +        ///  injected channel data offset register x
    +        JOFR2: mmio.Mmio(packed struct(u32) {
    +            ///  Data offset for injected channel x
    +            JOFFSET2: u12,
    +            padding: u20,
    +        }),
    +        ///  injected channel data offset register x
    +        JOFR3: mmio.Mmio(packed struct(u32) {
    +            ///  Data offset for injected channel x
    +            JOFFSET3: u12,
    +            padding: u20,
    +        }),
    +        ///  injected channel data offset register x
    +        JOFR4: mmio.Mmio(packed struct(u32) {
    +            ///  Data offset for injected channel x
    +            JOFFSET4: u12,
    +            padding: u20,
    +        }),
    +        ///  watchdog higher threshold register
    +        HTR: mmio.Mmio(packed struct(u32) {
    +            ///  Analog watchdog higher threshold
    +            HT: u12,
    +            padding: u20,
    +        }),
    +        ///  watchdog lower threshold register
    +        LTR: mmio.Mmio(packed struct(u32) {
    +            ///  Analog watchdog lower threshold
    +            LT: u12,
    +            padding: u20,
    +        }),
    +        ///  regular sequence register 1
    +        SQR1: mmio.Mmio(packed struct(u32) {
    +            ///  13th conversion in regular sequence
    +            SQ13: u5,
    +            ///  14th conversion in regular sequence
    +            SQ14: u5,
    +            ///  15th conversion in regular sequence
    +            SQ15: u5,
    +            ///  16th conversion in regular sequence
    +            SQ16: u5,
    +            ///  Regular channel sequence length
    +            L: u4,
    +            padding: u8,
    +        }),
    +        ///  regular sequence register 2
    +        SQR2: mmio.Mmio(packed struct(u32) {
    +            ///  7th conversion in regular sequence
    +            SQ7: u5,
    +            ///  8th conversion in regular sequence
    +            SQ8: u5,
    +            ///  9th conversion in regular sequence
    +            SQ9: u5,
    +            ///  10th conversion in regular sequence
    +            SQ10: u5,
    +            ///  11th conversion in regular sequence
    +            SQ11: u5,
    +            ///  12th conversion in regular sequence
    +            SQ12: u5,
    +            padding: u2,
    +        }),
    +        ///  regular sequence register 3
    +        SQR3: mmio.Mmio(packed struct(u32) {
    +            ///  1st conversion in regular sequence
    +            SQ1: u5,
    +            ///  2nd conversion in regular sequence
    +            SQ2: u5,
    +            ///  3rd conversion in regular sequence
    +            SQ3: u5,
    +            ///  4th conversion in regular sequence
    +            SQ4: u5,
    +            ///  5th conversion in regular sequence
    +            SQ5: u5,
    +            ///  6th conversion in regular sequence
    +            SQ6: u5,
    +            padding: u2,
    +        }),
    +        ///  injected sequence register
    +        JSQR: mmio.Mmio(packed struct(u32) {
    +            ///  1st conversion in injected sequence
    +            JSQ1: u5,
    +            ///  2nd conversion in injected sequence
    +            JSQ2: u5,
    +            ///  3rd conversion in injected sequence
    +            JSQ3: u5,
    +            ///  4th conversion in injected sequence
    +            JSQ4: u5,
    +            ///  Injected sequence length
    +            JL: u2,
    +            padding: u10,
    +        }),
    +        ///  injected data register x
    +        JDR1: mmio.Mmio(packed struct(u32) {
    +            ///  Injected data
    +            JDATA: u16,
    +            padding: u16,
    +        }),
    +        ///  injected data register x
    +        JDR2: mmio.Mmio(packed struct(u32) {
    +            ///  Injected data
    +            JDATA: u16,
    +            padding: u16,
    +        }),
    +        ///  injected data register x
    +        JDR3: mmio.Mmio(packed struct(u32) {
    +            ///  Injected data
    +            JDATA: u16,
    +            padding: u16,
    +        }),
    +        ///  injected data register x
    +        JDR4: mmio.Mmio(packed struct(u32) {
    +            ///  Injected data
    +            JDATA: u16,
    +            padding: u16,
    +        }),
    +        ///  regular data register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  Regular data
    +            DATA: u16,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  Controller area network
    +    pub const CAN1 = extern struct {
    +        ///  CAN_MCR
    +        CAN_MCR: mmio.Mmio(packed struct(u32) {
    +            ///  INRQ
    +            INRQ: u1,
    +            ///  SLEEP
    +            SLEEP: u1,
    +            ///  TXFP
    +            TXFP: u1,
    +            ///  RFLM
    +            RFLM: u1,
    +            ///  NART
    +            NART: u1,
    +            ///  AWUM
    +            AWUM: u1,
    +            ///  ABOM
    +            ABOM: u1,
    +            ///  TTCM
    +            TTCM: u1,
    +            reserved15: u7,
    +            ///  RESET
    +            RESET: u1,
    +            ///  DBF
    +            DBF: u1,
    +            padding: u15,
    +        }),
    +        ///  CAN_MSR
    +        CAN_MSR: mmio.Mmio(packed struct(u32) {
    +            ///  INAK
    +            INAK: u1,
    +            ///  SLAK
    +            SLAK: u1,
    +            ///  ERRI
    +            ERRI: u1,
    +            ///  WKUI
    +            WKUI: u1,
    +            ///  SLAKI
    +            SLAKI: u1,
    +            reserved8: u3,
    +            ///  TXM
    +            TXM: u1,
    +            ///  RXM
    +            RXM: u1,
    +            ///  SAMP
    +            SAMP: u1,
    +            ///  RX
    +            RX: u1,
    +            padding: u20,
    +        }),
    +        ///  CAN_TSR
    +        CAN_TSR: mmio.Mmio(packed struct(u32) {
    +            ///  RQCP0
    +            RQCP0: u1,
    +            ///  TXOK0
    +            TXOK0: u1,
    +            ///  ALST0
    +            ALST0: u1,
    +            ///  TERR0
    +            TERR0: u1,
    +            reserved7: u3,
    +            ///  ABRQ0
    +            ABRQ0: u1,
    +            ///  RQCP1
    +            RQCP1: u1,
    +            ///  TXOK1
    +            TXOK1: u1,
    +            ///  ALST1
    +            ALST1: u1,
    +            ///  TERR1
    +            TERR1: u1,
    +            reserved15: u3,
    +            ///  ABRQ1
    +            ABRQ1: u1,
    +            ///  RQCP2
    +            RQCP2: u1,
    +            ///  TXOK2
    +            TXOK2: u1,
    +            ///  ALST2
    +            ALST2: u1,
    +            ///  TERR2
    +            TERR2: u1,
    +            reserved23: u3,
    +            ///  ABRQ2
    +            ABRQ2: u1,
    +            ///  CODE
    +            CODE: u2,
    +            ///  Lowest priority flag for mailbox 0
    +            TME0: u1,
    +            ///  Lowest priority flag for mailbox 1
    +            TME1: u1,
    +            ///  Lowest priority flag for mailbox 2
    +            TME2: u1,
    +            ///  Lowest priority flag for mailbox 0
    +            LOW0: u1,
    +            ///  Lowest priority flag for mailbox 1
    +            LOW1: u1,
    +            ///  Lowest priority flag for mailbox 2
    +            LOW2: u1,
    +        }),
    +        ///  CAN_RF0R
    +        CAN_RF0R: mmio.Mmio(packed struct(u32) {
    +            ///  FMP0
    +            FMP0: u2,
    +            reserved3: u1,
    +            ///  FULL0
    +            FULL0: u1,
    +            ///  FOVR0
    +            FOVR0: u1,
    +            ///  RFOM0
    +            RFOM0: u1,
    +            padding: u26,
    +        }),
    +        ///  CAN_RF1R
    +        CAN_RF1R: mmio.Mmio(packed struct(u32) {
    +            ///  FMP1
    +            FMP1: u2,
    +            reserved3: u1,
    +            ///  FULL1
    +            FULL1: u1,
    +            ///  FOVR1
    +            FOVR1: u1,
    +            ///  RFOM1
    +            RFOM1: u1,
    +            padding: u26,
    +        }),
    +        ///  CAN_IER
    +        CAN_IER: mmio.Mmio(packed struct(u32) {
    +            ///  TMEIE
    +            TMEIE: u1,
    +            ///  FMPIE0
    +            FMPIE0: u1,
    +            ///  FFIE0
    +            FFIE0: u1,
    +            ///  FOVIE0
    +            FOVIE0: u1,
    +            ///  FMPIE1
    +            FMPIE1: u1,
    +            ///  FFIE1
    +            FFIE1: u1,
    +            ///  FOVIE1
    +            FOVIE1: u1,
    +            reserved8: u1,
    +            ///  EWGIE
    +            EWGIE: u1,
    +            ///  EPVIE
    +            EPVIE: u1,
    +            ///  BOFIE
    +            BOFIE: u1,
    +            ///  LECIE
    +            LECIE: u1,
    +            reserved15: u3,
    +            ///  ERRIE
    +            ERRIE: u1,
    +            ///  WKUIE
    +            WKUIE: u1,
    +            ///  SLKIE
    +            SLKIE: u1,
    +            padding: u14,
    +        }),
    +        ///  CAN_ESR
    +        CAN_ESR: mmio.Mmio(packed struct(u32) {
    +            ///  EWGF
    +            EWGF: u1,
    +            ///  EPVF
    +            EPVF: u1,
    +            ///  BOFF
    +            BOFF: u1,
    +            reserved4: u1,
    +            ///  LEC
    +            LEC: u3,
    +            reserved16: u9,
    +            ///  TEC
    +            TEC: u8,
    +            ///  REC
    +            REC: u8,
    +        }),
    +        ///  CAN_BTR
    +        CAN_BTR: mmio.Mmio(packed struct(u32) {
    +            ///  BRP
    +            BRP: u10,
    +            reserved16: u6,
    +            ///  TS1
    +            TS1: u4,
    +            ///  TS2
    +            TS2: u3,
    +            reserved24: u1,
    +            ///  SJW
    +            SJW: u2,
    +            reserved30: u4,
    +            ///  LBKM
    +            LBKM: u1,
    +            ///  SILM
    +            SILM: u1,
    +        }),
    +        reserved384: [352]u8,
    +        ///  CAN_TI0R
    +        CAN_TI0R: mmio.Mmio(packed struct(u32) {
    +            ///  TXRQ
    +            TXRQ: u1,
    +            ///  RTR
    +            RTR: u1,
    +            ///  IDE
    +            IDE: u1,
    +            ///  EXID
    +            EXID: u18,
    +            ///  STID
    +            STID: u11,
    +        }),
    +        ///  CAN_TDT0R
    +        CAN_TDT0R: mmio.Mmio(packed struct(u32) {
    +            ///  DLC
    +            DLC: u4,
    +            reserved8: u4,
    +            ///  TGT
    +            TGT: u1,
    +            reserved16: u7,
    +            ///  TIME
    +            TIME: u16,
    +        }),
    +        ///  CAN_TDL0R
    +        CAN_TDL0R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA0
    +            DATA0: u8,
    +            ///  DATA1
    +            DATA1: u8,
    +            ///  DATA2
    +            DATA2: u8,
    +            ///  DATA3
    +            DATA3: u8,
    +        }),
    +        ///  CAN_TDH0R
    +        CAN_TDH0R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA4
    +            DATA4: u8,
    +            ///  DATA5
    +            DATA5: u8,
    +            ///  DATA6
    +            DATA6: u8,
    +            ///  DATA7
    +            DATA7: u8,
    +        }),
    +        ///  CAN_TI1R
    +        CAN_TI1R: mmio.Mmio(packed struct(u32) {
    +            ///  TXRQ
    +            TXRQ: u1,
    +            ///  RTR
    +            RTR: u1,
    +            ///  IDE
    +            IDE: u1,
    +            ///  EXID
    +            EXID: u18,
    +            ///  STID
    +            STID: u11,
    +        }),
    +        ///  CAN_TDT1R
    +        CAN_TDT1R: mmio.Mmio(packed struct(u32) {
    +            ///  DLC
    +            DLC: u4,
    +            reserved8: u4,
    +            ///  TGT
    +            TGT: u1,
    +            reserved16: u7,
    +            ///  TIME
    +            TIME: u16,
    +        }),
    +        ///  CAN_TDL1R
    +        CAN_TDL1R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA0
    +            DATA0: u8,
    +            ///  DATA1
    +            DATA1: u8,
    +            ///  DATA2
    +            DATA2: u8,
    +            ///  DATA3
    +            DATA3: u8,
    +        }),
    +        ///  CAN_TDH1R
    +        CAN_TDH1R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA4
    +            DATA4: u8,
    +            ///  DATA5
    +            DATA5: u8,
    +            ///  DATA6
    +            DATA6: u8,
    +            ///  DATA7
    +            DATA7: u8,
    +        }),
    +        ///  CAN_TI2R
    +        CAN_TI2R: mmio.Mmio(packed struct(u32) {
    +            ///  TXRQ
    +            TXRQ: u1,
    +            ///  RTR
    +            RTR: u1,
    +            ///  IDE
    +            IDE: u1,
    +            ///  EXID
    +            EXID: u18,
    +            ///  STID
    +            STID: u11,
    +        }),
    +        ///  CAN_TDT2R
    +        CAN_TDT2R: mmio.Mmio(packed struct(u32) {
    +            ///  DLC
    +            DLC: u4,
    +            reserved8: u4,
    +            ///  TGT
    +            TGT: u1,
    +            reserved16: u7,
    +            ///  TIME
    +            TIME: u16,
    +        }),
    +        ///  CAN_TDL2R
    +        CAN_TDL2R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA0
    +            DATA0: u8,
    +            ///  DATA1
    +            DATA1: u8,
    +            ///  DATA2
    +            DATA2: u8,
    +            ///  DATA3
    +            DATA3: u8,
    +        }),
    +        ///  CAN_TDH2R
    +        CAN_TDH2R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA4
    +            DATA4: u8,
    +            ///  DATA5
    +            DATA5: u8,
    +            ///  DATA6
    +            DATA6: u8,
    +            ///  DATA7
    +            DATA7: u8,
    +        }),
    +        ///  CAN_RI0R
    +        CAN_RI0R: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  RTR
    +            RTR: u1,
    +            ///  IDE
    +            IDE: u1,
    +            ///  EXID
    +            EXID: u18,
    +            ///  STID
    +            STID: u11,
    +        }),
    +        ///  CAN_RDT0R
    +        CAN_RDT0R: mmio.Mmio(packed struct(u32) {
    +            ///  DLC
    +            DLC: u4,
    +            reserved8: u4,
    +            ///  FMI
    +            FMI: u8,
    +            ///  TIME
    +            TIME: u16,
    +        }),
    +        ///  CAN_RDL0R
    +        CAN_RDL0R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA0
    +            DATA0: u8,
    +            ///  DATA1
    +            DATA1: u8,
    +            ///  DATA2
    +            DATA2: u8,
    +            ///  DATA3
    +            DATA3: u8,
    +        }),
    +        ///  CAN_RDH0R
    +        CAN_RDH0R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA4
    +            DATA4: u8,
    +            ///  DATA5
    +            DATA5: u8,
    +            ///  DATA6
    +            DATA6: u8,
    +            ///  DATA7
    +            DATA7: u8,
    +        }),
    +        ///  CAN_RI1R
    +        CAN_RI1R: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  RTR
    +            RTR: u1,
    +            ///  IDE
    +            IDE: u1,
    +            ///  EXID
    +            EXID: u18,
    +            ///  STID
    +            STID: u11,
    +        }),
    +        ///  CAN_RDT1R
    +        CAN_RDT1R: mmio.Mmio(packed struct(u32) {
    +            ///  DLC
    +            DLC: u4,
    +            reserved8: u4,
    +            ///  FMI
    +            FMI: u8,
    +            ///  TIME
    +            TIME: u16,
    +        }),
    +        ///  CAN_RDL1R
    +        CAN_RDL1R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA0
    +            DATA0: u8,
    +            ///  DATA1
    +            DATA1: u8,
    +            ///  DATA2
    +            DATA2: u8,
    +            ///  DATA3
    +            DATA3: u8,
    +        }),
    +        ///  CAN_RDH1R
    +        CAN_RDH1R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA4
    +            DATA4: u8,
    +            ///  DATA5
    +            DATA5: u8,
    +            ///  DATA6
    +            DATA6: u8,
    +            ///  DATA7
    +            DATA7: u8,
    +        }),
    +        reserved512: [48]u8,
    +        ///  CAN_FMR
    +        CAN_FMR: mmio.Mmio(packed struct(u32) {
    +            ///  FINIT
    +            FINIT: u1,
    +            padding: u31,
    +        }),
    +        ///  CAN_FM1R
    +        CAN_FM1R: mmio.Mmio(packed struct(u32) {
    +            ///  Filter mode
    +            FBM0: u1,
    +            ///  Filter mode
    +            FBM1: u1,
    +            ///  Filter mode
    +            FBM2: u1,
    +            ///  Filter mode
    +            FBM3: u1,
    +            ///  Filter mode
    +            FBM4: u1,
    +            ///  Filter mode
    +            FBM5: u1,
    +            ///  Filter mode
    +            FBM6: u1,
    +            ///  Filter mode
    +            FBM7: u1,
    +            ///  Filter mode
    +            FBM8: u1,
    +            ///  Filter mode
    +            FBM9: u1,
    +            ///  Filter mode
    +            FBM10: u1,
    +            ///  Filter mode
    +            FBM11: u1,
    +            ///  Filter mode
    +            FBM12: u1,
    +            ///  Filter mode
    +            FBM13: u1,
    +            padding: u18,
    +        }),
    +        reserved524: [4]u8,
    +        ///  CAN_FS1R
    +        CAN_FS1R: mmio.Mmio(packed struct(u32) {
    +            ///  Filter scale configuration
    +            FSC0: u1,
    +            ///  Filter scale configuration
    +            FSC1: u1,
    +            ///  Filter scale configuration
    +            FSC2: u1,
    +            ///  Filter scale configuration
    +            FSC3: u1,
    +            ///  Filter scale configuration
    +            FSC4: u1,
    +            ///  Filter scale configuration
    +            FSC5: u1,
    +            ///  Filter scale configuration
    +            FSC6: u1,
    +            ///  Filter scale configuration
    +            FSC7: u1,
    +            ///  Filter scale configuration
    +            FSC8: u1,
    +            ///  Filter scale configuration
    +            FSC9: u1,
    +            ///  Filter scale configuration
    +            FSC10: u1,
    +            ///  Filter scale configuration
    +            FSC11: u1,
    +            ///  Filter scale configuration
    +            FSC12: u1,
    +            ///  Filter scale configuration
    +            FSC13: u1,
    +            padding: u18,
    +        }),
    +        reserved532: [4]u8,
    +        ///  CAN_FFA1R
    +        CAN_FFA1R: mmio.Mmio(packed struct(u32) {
    +            ///  Filter FIFO assignment for filter 0
    +            FFA0: u1,
    +            ///  Filter FIFO assignment for filter 1
    +            FFA1: u1,
    +            ///  Filter FIFO assignment for filter 2
    +            FFA2: u1,
    +            ///  Filter FIFO assignment for filter 3
    +            FFA3: u1,
    +            ///  Filter FIFO assignment for filter 4
    +            FFA4: u1,
    +            ///  Filter FIFO assignment for filter 5
    +            FFA5: u1,
    +            ///  Filter FIFO assignment for filter 6
    +            FFA6: u1,
    +            ///  Filter FIFO assignment for filter 7
    +            FFA7: u1,
    +            ///  Filter FIFO assignment for filter 8
    +            FFA8: u1,
    +            ///  Filter FIFO assignment for filter 9
    +            FFA9: u1,
    +            ///  Filter FIFO assignment for filter 10
    +            FFA10: u1,
    +            ///  Filter FIFO assignment for filter 11
    +            FFA11: u1,
    +            ///  Filter FIFO assignment for filter 12
    +            FFA12: u1,
    +            ///  Filter FIFO assignment for filter 13
    +            FFA13: u1,
    +            padding: u18,
    +        }),
    +        reserved540: [4]u8,
    +        ///  CAN_FA1R
    +        CAN_FA1R: mmio.Mmio(packed struct(u32) {
    +            ///  Filter active
    +            FACT0: u1,
    +            ///  Filter active
    +            FACT1: u1,
    +            ///  Filter active
    +            FACT2: u1,
    +            ///  Filter active
    +            FACT3: u1,
    +            ///  Filter active
    +            FACT4: u1,
    +            ///  Filter active
    +            FACT5: u1,
    +            ///  Filter active
    +            FACT6: u1,
    +            ///  Filter active
    +            FACT7: u1,
    +            ///  Filter active
    +            FACT8: u1,
    +            ///  Filter active
    +            FACT9: u1,
    +            ///  Filter active
    +            FACT10: u1,
    +            ///  Filter active
    +            FACT11: u1,
    +            ///  Filter active
    +            FACT12: u1,
    +            ///  Filter active
    +            FACT13: u1,
    +            padding: u18,
    +        }),
    +        reserved576: [32]u8,
    +        ///  Filter bank 0 register 1
    +        F0R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 0 register 2
    +        F0R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 1 register 1
    +        F1R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 1 register 2
    +        F1R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 2 register 1
    +        F2R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 2 register 2
    +        F2R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 3 register 1
    +        F3R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 3 register 2
    +        F3R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 4 register 1
    +        F4R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 4 register 2
    +        F4R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 5 register 1
    +        F5R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 5 register 2
    +        F5R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 6 register 1
    +        F6R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 6 register 2
    +        F6R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 7 register 1
    +        F7R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 7 register 2
    +        F7R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 8 register 1
    +        F8R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 8 register 2
    +        F8R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 9 register 1
    +        F9R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 9 register 2
    +        F9R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 10 register 1
    +        F10R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 10 register 2
    +        F10R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 11 register 1
    +        F11R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 11 register 2
    +        F11R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 4 register 1
    +        F12R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 12 register 2
    +        F12R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 13 register 1
    +        F13R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 13 register 2
    +        F13R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +    };
    +};
    diff --git a/src/chips/STM32F303.json b/src/chips/STM32F303.json
    new file mode 100644
    index 000000000..6468498cc
    --- /dev/null
    +++ b/src/chips/STM32F303.json
    @@ -0,0 +1,33184 @@
    +{
    +  "version": "0.1.0",
    +  "types": {
    +    "peripherals": {
    +      "GPIOA": {
    +        "description": "General-purpose I/Os",
    +        "children": {
    +          "registers": {
    +            "MODER": {
    +              "description": "GPIO port mode register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 671088640,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MODER15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "MODER14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "MODER13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "MODER12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "MODER11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "MODER10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "MODER9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MODER8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "MODER7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "MODER6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "MODER5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "MODER4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MODER3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "MODER2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "MODER1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MODER0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTYPER": {
    +              "description": "GPIO port output type register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OT15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OT14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "OT13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "OT12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "OT11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OT10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OT9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "OT8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "OT7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OT6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "OT5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "OT4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "OT3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OT2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OT1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OT0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OSPEEDR": {
    +              "description": "GPIO port output speed\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OSPEEDR15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "PUPDR": {
    +              "description": "GPIO port pull-up/pull-down\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 603979776,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PUPDR15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "PUPDR14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "PUPDR13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "PUPDR12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "PUPDR11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "PUPDR10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "PUPDR9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "PUPDR8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "PUPDR7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "PUPDR6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "PUPDR5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PUPDR4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "PUPDR3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "PUPDR2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "PUPDR1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "PUPDR0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "IDR": {
    +              "description": "GPIO port input data register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IDR15": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "IDR14": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "IDR13": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "IDR12": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "IDR11": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "IDR10": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "IDR9": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "IDR8": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "IDR7": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IDR6": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "IDR5": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IDR4": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IDR3": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IDR2": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IDR1": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IDR0": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ODR": {
    +              "description": "GPIO port output data register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ODR15": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ODR14": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ODR13": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ODR12": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ODR11": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ODR10": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ODR9": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ODR8": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ODR7": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ODR6": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ODR5": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ODR4": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ODR3": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ODR2": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ODR1": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ODR0": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BSRR": {
    +              "description": "GPIO port bit set/reset\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "BR15": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "BR14": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "BR13": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "BR12": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "BR11": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "BR10": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "BR9": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "BR8": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "BR7": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "BR6": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "BR5": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "BR4": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "BR3": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "BR2": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "BR1": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "BR0": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BS15": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "BS14": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "BS13": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BS12": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "BS11": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BS10": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "BS9": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BS8": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BS7": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BS6": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BS5": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "BS4": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BS3": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "BS2": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "BS1": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "BS0": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "LCKR": {
    +              "description": "GPIO port configuration lock\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LCKK": {
    +                    "description": "Lok Key",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "LCK15": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LCK14": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "LCK13": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "LCK12": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "LCK11": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "LCK10": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LCK9": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "LCK8": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LCK7": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "LCK6": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "LCK5": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "LCK4": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "LCK3": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "LCK2": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "LCK1": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "LCK0": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AFRL": {
    +              "description": "GPIO alternate function low\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AFRL7": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 28,
    +                    "size": 4
    +                  },
    +                  "AFRL6": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "AFRL5": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "AFRL4": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "AFRL3": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "AFRL2": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "AFRL1": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "AFRL0": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "AFRH": {
    +              "description": "GPIO alternate function high\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AFRH15": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 28,
    +                    "size": 4
    +                  },
    +                  "AFRH14": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "AFRH13": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "AFRH12": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "AFRH11": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "AFRH10": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "AFRH9": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "AFRH8": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "BRR": {
    +              "description": "Port bit reset register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "BR0": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "BR1": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "BR2": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "BR3": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "BR4": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BR5": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "BR6": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BR7": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BR8": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BR9": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BR10": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "BR11": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BR12": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "BR13": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BR14": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "BR15": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "GPIOB": {
    +        "description": "General-purpose I/Os",
    +        "children": {
    +          "registers": {
    +            "MODER": {
    +              "description": "GPIO port mode register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MODER15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "MODER14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "MODER13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "MODER12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "MODER11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "MODER10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "MODER9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MODER8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "MODER7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "MODER6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "MODER5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "MODER4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MODER3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "MODER2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "MODER1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MODER0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTYPER": {
    +              "description": "GPIO port output type register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OT15": {
    +                    "description": "Port x configuration bit\n              15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OT14": {
    +                    "description": "Port x configuration bit\n              14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "OT13": {
    +                    "description": "Port x configuration bit\n              13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "OT12": {
    +                    "description": "Port x configuration bit\n              12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "OT11": {
    +                    "description": "Port x configuration bit\n              11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OT10": {
    +                    "description": "Port x configuration bit\n              10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OT9": {
    +                    "description": "Port x configuration bit 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "OT8": {
    +                    "description": "Port x configuration bit 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "OT7": {
    +                    "description": "Port x configuration bit 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OT6": {
    +                    "description": "Port x configuration bit 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "OT5": {
    +                    "description": "Port x configuration bit 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "OT4": {
    +                    "description": "Port x configuration bit 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "OT3": {
    +                    "description": "Port x configuration bit 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OT2": {
    +                    "description": "Port x configuration bit 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OT1": {
    +                    "description": "Port x configuration bit 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OT0": {
    +                    "description": "Port x configuration bit 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OSPEEDR": {
    +              "description": "GPIO port output speed\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OSPEEDR15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "PUPDR": {
    +              "description": "GPIO port pull-up/pull-down\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PUPDR15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "PUPDR14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "PUPDR13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "PUPDR12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "PUPDR11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "PUPDR10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "PUPDR9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "PUPDR8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "PUPDR7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "PUPDR6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "PUPDR5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PUPDR4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "PUPDR3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "PUPDR2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "PUPDR1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "PUPDR0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "IDR": {
    +              "description": "GPIO port input data register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IDR15": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "IDR14": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "IDR13": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "IDR12": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "IDR11": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "IDR10": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "IDR9": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "IDR8": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "IDR7": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IDR6": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "IDR5": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IDR4": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IDR3": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IDR2": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IDR1": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IDR0": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ODR": {
    +              "description": "GPIO port output data register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ODR15": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ODR14": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ODR13": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ODR12": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ODR11": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ODR10": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ODR9": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ODR8": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ODR7": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ODR6": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ODR5": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ODR4": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ODR3": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ODR2": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ODR1": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ODR0": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BSRR": {
    +              "description": "GPIO port bit set/reset\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "BR15": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "BR14": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "BR13": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "BR12": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "BR11": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "BR10": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "BR9": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "BR8": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "BR7": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "BR6": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "BR5": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "BR4": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "BR3": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "BR2": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "BR1": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "BR0": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BS15": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "BS14": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "BS13": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BS12": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "BS11": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BS10": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "BS9": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BS8": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BS7": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BS6": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BS5": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "BS4": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BS3": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "BS2": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "BS1": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "BS0": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "LCKR": {
    +              "description": "GPIO port configuration lock\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LCKK": {
    +                    "description": "Lok Key",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "LCK15": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LCK14": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "LCK13": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "LCK12": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "LCK11": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "LCK10": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LCK9": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "LCK8": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LCK7": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "LCK6": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "LCK5": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "LCK4": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "LCK3": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "LCK2": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "LCK1": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "LCK0": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AFRL": {
    +              "description": "GPIO alternate function low\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AFRL7": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 28,
    +                    "size": 4
    +                  },
    +                  "AFRL6": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "AFRL5": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "AFRL4": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "AFRL3": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "AFRL2": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "AFRL1": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "AFRL0": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "AFRH": {
    +              "description": "GPIO alternate function high\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AFRH15": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 28,
    +                    "size": 4
    +                  },
    +                  "AFRH14": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "AFRH13": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "AFRH12": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "AFRH11": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "AFRH10": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "AFRH9": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "AFRH8": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "BRR": {
    +              "description": "Port bit reset register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "BR0": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "BR1": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "BR2": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "BR3": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "BR4": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BR5": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "BR6": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BR7": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BR8": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BR9": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BR10": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "BR11": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BR12": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "BR13": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BR14": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "BR15": {
    +                    "description": "Port x Reset bit y",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SCB_ACTRL": {
    +        "description": "System control block ACTLR",
    +        "children": {
    +          "registers": {
    +            "ACTRL": {
    +              "description": "Auxiliary control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DISMCYCINT": {
    +                    "description": "DISMCYCINT",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DISDEFWBUF": {
    +                    "description": "DISDEFWBUF",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DISFOLD": {
    +                    "description": "DISFOLD",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DISFPCA": {
    +                    "description": "DISFPCA",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DISOOFP": {
    +                    "description": "DISOOFP",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "FPU_CPACR": {
    +        "description": "Floating point unit CPACR",
    +        "children": {
    +          "registers": {
    +            "CPACR": {
    +              "description": "Coprocessor access control\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CP": {
    +                    "description": "CP",
    +                    "offset": 20,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "NVIC_STIR": {
    +        "description": "Nested vectored interrupt\n      controller",
    +        "children": {
    +          "registers": {
    +            "STIR": {
    +              "description": "Software trigger interrupt\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INTID": {
    +                    "description": "Software generated interrupt\n              ID",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SCB": {
    +        "description": "System control block",
    +        "children": {
    +          "registers": {
    +            "CPUID": {
    +              "description": "CPUID base register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 1091551809,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "Revision": {
    +                    "description": "Revision number",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "PartNo": {
    +                    "description": "Part number of the\n              processor",
    +                    "offset": 4,
    +                    "size": 12
    +                  },
    +                  "Constant": {
    +                    "description": "Reads as 0xF",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "Variant": {
    +                    "description": "Variant number",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "Implementer": {
    +                    "description": "Implementer code",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "ICSR": {
    +              "description": "Interrupt control and state\n          register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VECTACTIVE": {
    +                    "description": "Active vector",
    +                    "offset": 0,
    +                    "size": 9
    +                  },
    +                  "RETTOBASE": {
    +                    "description": "Return to base level",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "VECTPENDING": {
    +                    "description": "Pending vector",
    +                    "offset": 12,
    +                    "size": 7
    +                  },
    +                  "ISRPENDING": {
    +                    "description": "Interrupt pending flag",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "PENDSTCLR": {
    +                    "description": "SysTick exception clear-pending\n              bit",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "PENDSTSET": {
    +                    "description": "SysTick exception set-pending\n              bit",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "PENDSVCLR": {
    +                    "description": "PendSV clear-pending bit",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "PENDSVSET": {
    +                    "description": "PendSV set-pending bit",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "NMIPENDSET": {
    +                    "description": "NMI set-pending bit.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "VTOR": {
    +              "description": "Vector table offset register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TBLOFF": {
    +                    "description": "Vector table base offset\n              field",
    +                    "offset": 9,
    +                    "size": 21
    +                  }
    +                }
    +              }
    +            },
    +            "AIRCR": {
    +              "description": "Application interrupt and reset control\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VECTRESET": {
    +                    "description": "VECTRESET",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "VECTCLRACTIVE": {
    +                    "description": "VECTCLRACTIVE",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SYSRESETREQ": {
    +                    "description": "SYSRESETREQ",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PRIGROUP": {
    +                    "description": "PRIGROUP",
    +                    "offset": 8,
    +                    "size": 3
    +                  },
    +                  "ENDIANESS": {
    +                    "description": "ENDIANESS",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "VECTKEYSTAT": {
    +                    "description": "Register key",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SCR": {
    +              "description": "System control register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SLEEPONEXIT": {
    +                    "description": "SLEEPONEXIT",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEEPDEEP": {
    +                    "description": "SLEEPDEEP",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SEVEONPEND": {
    +                    "description": "Send Event on Pending bit",
    +                    "offset": 4,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCR": {
    +              "description": "Configuration and control\n          register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NONBASETHRDENA": {
    +                    "description": "Configures how the processor enters\n              Thread mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "USERSETMPEND": {
    +                    "description": "USERSETMPEND",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UNALIGN__TRP": {
    +                    "description": "UNALIGN_ TRP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIV_0_TRP": {
    +                    "description": "DIV_0_TRP",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BFHFNMIGN": {
    +                    "description": "BFHFNMIGN",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "STKALIGN": {
    +                    "description": "STKALIGN",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SHPR1": {
    +              "description": "System handler priority\n          registers",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRI_4": {
    +                    "description": "Priority of system handler\n              4",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "PRI_5": {
    +                    "description": "Priority of system handler\n              5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "PRI_6": {
    +                    "description": "Priority of system handler\n              6",
    +                    "offset": 16,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SHPR2": {
    +              "description": "System handler priority\n          registers",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRI_11": {
    +                    "description": "Priority of system handler\n              11",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SHPR3": {
    +              "description": "System handler priority\n          registers",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRI_14": {
    +                    "description": "Priority of system handler\n              14",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "PRI_15": {
    +                    "description": "Priority of system handler\n              15",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SHCRS": {
    +              "description": "System handler control and state\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MEMFAULTACT": {
    +                    "description": "Memory management fault exception active\n              bit",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "BUSFAULTACT": {
    +                    "description": "Bus fault exception active\n              bit",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "USGFAULTACT": {
    +                    "description": "Usage fault exception active\n              bit",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SVCALLACT": {
    +                    "description": "SVC call active bit",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MONITORACT": {
    +                    "description": "Debug monitor active bit",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PENDSVACT": {
    +                    "description": "PendSV exception active\n              bit",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SYSTICKACT": {
    +                    "description": "SysTick exception active\n              bit",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "USGFAULTPENDED": {
    +                    "description": "Usage fault exception pending\n              bit",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "MEMFAULTPENDED": {
    +                    "description": "Memory management fault exception\n              pending bit",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BUSFAULTPENDED": {
    +                    "description": "Bus fault exception pending\n              bit",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SVCALLPENDED": {
    +                    "description": "SVC call pending bit",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MEMFAULTENA": {
    +                    "description": "Memory management fault enable\n              bit",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUSFAULTENA": {
    +                    "description": "Bus fault enable bit",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "USGFAULTENA": {
    +                    "description": "Usage fault enable bit",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CFSR_UFSR_BFSR_MMFSR": {
    +              "description": "Configurable fault status\n          register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IACCVIOL": {
    +                    "description": "Instruction access violation\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MUNSTKERR": {
    +                    "description": "Memory manager fault on unstacking for a\n              return from exception",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MSTKERR": {
    +                    "description": "Memory manager fault on stacking for\n              exception entry.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "MLSPERR": {
    +                    "description": "MLSPERR",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "MMARVALID": {
    +                    "description": "Memory Management Fault Address Register\n              (MMAR) valid flag",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IBUSERR": {
    +                    "description": "Instruction bus error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PRECISERR": {
    +                    "description": "Precise data bus error",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "IMPRECISERR": {
    +                    "description": "Imprecise data bus error",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "UNSTKERR": {
    +                    "description": "Bus fault on unstacking for a return\n              from exception",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "STKERR": {
    +                    "description": "Bus fault on stacking for exception\n              entry",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "LSPERR": {
    +                    "description": "Bus fault on floating-point lazy state\n              preservation",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BFARVALID": {
    +                    "description": "Bus Fault Address Register (BFAR) valid\n              flag",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "UNDEFINSTR": {
    +                    "description": "Undefined instruction usage\n              fault",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "INVSTATE": {
    +                    "description": "Invalid state usage fault",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INVPC": {
    +                    "description": "Invalid PC load usage\n              fault",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "NOCP": {
    +                    "description": "No coprocessor usage\n              fault.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "UNALIGNED": {
    +                    "description": "Unaligned access usage\n              fault",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "DIVBYZERO": {
    +                    "description": "Divide by zero usage fault",
    +                    "offset": 25,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HFSR": {
    +              "description": "Hard fault status register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VECTTBL": {
    +                    "description": "Vector table hard fault",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FORCED": {
    +                    "description": "Forced hard fault",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "DEBUG_VT": {
    +                    "description": "Reserved for Debug use",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MMFAR": {
    +              "description": "Memory management fault address\n          register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MMFAR": {
    +                    "description": "Memory management fault\n              address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BFAR": {
    +              "description": "Bus fault address register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BFAR": {
    +                    "description": "Bus fault address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "AFSR": {
    +              "description": "Auxiliary fault status\n          register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IMPDEF": {
    +                    "description": "Implementation defined",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "STK": {
    +        "description": "SysTick timer",
    +        "children": {
    +          "registers": {
    +            "CTRL": {
    +              "description": "SysTick control and status\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TICKINT": {
    +                    "description": "SysTick exception request\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CLKSOURCE": {
    +                    "description": "Clock source selection",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "COUNTFLAG": {
    +                    "description": "COUNTFLAG",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "LOAD": {
    +              "description": "SysTick reload value register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RELOAD": {
    +                    "description": "RELOAD value",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "VAL": {
    +              "description": "SysTick current value register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CURRENT": {
    +                    "description": "Current counter value",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "CALIB": {
    +              "description": "SysTick calibration value\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TENMS": {
    +                    "description": "Calibration value",
    +                    "offset": 0,
    +                    "size": 24
    +                  },
    +                  "SKEW": {
    +                    "description": "SKEW flag: Indicates whether the TENMS\n              value is exact",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "NOREF": {
    +                    "description": "NOREF flag. Reads as zero",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "MPU": {
    +        "description": "Memory protection unit",
    +        "children": {
    +          "registers": {
    +            "MPU_TYPER": {
    +              "description": "MPU type register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 2048,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SEPARATE": {
    +                    "description": "Separate flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DREGION": {
    +                    "description": "Number of MPU data regions",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IREGION": {
    +                    "description": "Number of MPU instruction\n              regions",
    +                    "offset": 16,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "MPU_CTRL": {
    +              "description": "MPU control register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enables the MPU",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "HFNMIENA": {
    +                    "description": "Enables the operation of MPU during hard\n              fault",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PRIVDEFENA": {
    +                    "description": "Enable priviliged software access to\n              default memory map",
    +                    "offset": 2,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MPU_RNR": {
    +              "description": "MPU region number register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION": {
    +                    "description": "MPU region",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "MPU_RBAR": {
    +              "description": "MPU region base address\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION": {
    +                    "description": "MPU region field",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "VALID": {
    +                    "description": "MPU region number valid",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ADDR": {
    +                    "description": "Region base address field",
    +                    "offset": 5,
    +                    "size": 27
    +                  }
    +                }
    +              }
    +            },
    +            "MPU_RASR": {
    +              "description": "MPU region attribute and size\n          register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Region enable bit.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SIZE": {
    +                    "description": "Size of the MPU protection\n              region",
    +                    "offset": 1,
    +                    "size": 5
    +                  },
    +                  "SRD": {
    +                    "description": "Subregion disable bits",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "B": {
    +                    "description": "memory attribute",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "C": {
    +                    "description": "memory attribute",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "S": {
    +                    "description": "Shareable memory attribute",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TEX": {
    +                    "description": "memory attribute",
    +                    "offset": 19,
    +                    "size": 3
    +                  },
    +                  "AP": {
    +                    "description": "Access permission",
    +                    "offset": 24,
    +                    "size": 3
    +                  },
    +                  "XN": {
    +                    "description": "Instruction access disable\n              bit",
    +                    "offset": 28,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TSC": {
    +        "description": "Touch sensing controller",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTPH": {
    +                    "description": "Charge transfer pulse high",
    +                    "offset": 28,
    +                    "size": 4
    +                  },
    +                  "CTPL": {
    +                    "description": "Charge transfer pulse low",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "SSD": {
    +                    "description": "Spread spectrum deviation",
    +                    "offset": 17,
    +                    "size": 7
    +                  },
    +                  "SSE": {
    +                    "description": "Spread spectrum enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SSPSC": {
    +                    "description": "Spread spectrum prescaler",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "PGPSC": {
    +                    "description": "pulse generator prescaler",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "MCV": {
    +                    "description": "Max count value",
    +                    "offset": 5,
    +                    "size": 3
    +                  },
    +                  "IODEF": {
    +                    "description": "I/O Default mode",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SYNCPOL": {
    +                    "description": "Synchronization pin\n              polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "AM": {
    +                    "description": "Acquisition mode",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "START": {
    +                    "description": "Start a new acquisition",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TSCE": {
    +                    "description": "Touch sensing controller\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IER": {
    +              "description": "interrupt enable register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MCEIE": {
    +                    "description": "Max count error interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EOAIE": {
    +                    "description": "End of acquisition interrupt\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ICR": {
    +              "description": "interrupt clear register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MCEIC": {
    +                    "description": "Max count error interrupt\n              clear",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EOAIC": {
    +                    "description": "End of acquisition interrupt\n              clear",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ISR": {
    +              "description": "interrupt status register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MCEF": {
    +                    "description": "Max count error flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EOAF": {
    +                    "description": "End of acquisition flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IOHCR": {
    +              "description": "I/O hysteresis control\n          register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "G1_IO1": {
    +                    "description": "G1_IO1 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "G1_IO2": {
    +                    "description": "G1_IO2 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "G1_IO3": {
    +                    "description": "G1_IO3 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "G1_IO4": {
    +                    "description": "G1_IO4 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "G2_IO1": {
    +                    "description": "G2_IO1 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "G2_IO2": {
    +                    "description": "G2_IO2 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "G2_IO3": {
    +                    "description": "G2_IO3 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "G2_IO4": {
    +                    "description": "G2_IO4 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "G3_IO1": {
    +                    "description": "G3_IO1 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "G3_IO2": {
    +                    "description": "G3_IO2 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "G3_IO3": {
    +                    "description": "G3_IO3 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "G3_IO4": {
    +                    "description": "G3_IO4 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "G4_IO1": {
    +                    "description": "G4_IO1 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "G4_IO2": {
    +                    "description": "G4_IO2 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "G4_IO3": {
    +                    "description": "G4_IO3 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "G4_IO4": {
    +                    "description": "G4_IO4 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "G5_IO1": {
    +                    "description": "G5_IO1 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "G5_IO2": {
    +                    "description": "G5_IO2 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "G5_IO3": {
    +                    "description": "G5_IO3 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "G5_IO4": {
    +                    "description": "G5_IO4 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "G6_IO1": {
    +                    "description": "G6_IO1 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "G6_IO2": {
    +                    "description": "G6_IO2 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "G6_IO3": {
    +                    "description": "G6_IO3 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "G6_IO4": {
    +                    "description": "G6_IO4 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "G7_IO1": {
    +                    "description": "G7_IO1 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "G7_IO2": {
    +                    "description": "G7_IO2 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "G7_IO3": {
    +                    "description": "G7_IO3 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "G7_IO4": {
    +                    "description": "G7_IO4 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "G8_IO1": {
    +                    "description": "G8_IO1 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "G8_IO2": {
    +                    "description": "G8_IO2 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "G8_IO3": {
    +                    "description": "G8_IO3 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "G8_IO4": {
    +                    "description": "G8_IO4 Schmitt trigger hysteresis\n              mode",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IOASCR": {
    +              "description": "I/O analog switch control\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "G1_IO1": {
    +                    "description": "G1_IO1 analog switch\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "G1_IO2": {
    +                    "description": "G1_IO2 analog switch\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "G1_IO3": {
    +                    "description": "G1_IO3 analog switch\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "G1_IO4": {
    +                    "description": "G1_IO4 analog switch\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "G2_IO1": {
    +                    "description": "G2_IO1 analog switch\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "G2_IO2": {
    +                    "description": "G2_IO2 analog switch\n              enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "G2_IO3": {
    +                    "description": "G2_IO3 analog switch\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "G2_IO4": {
    +                    "description": "G2_IO4 analog switch\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "G3_IO1": {
    +                    "description": "G3_IO1 analog switch\n              enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "G3_IO2": {
    +                    "description": "G3_IO2 analog switch\n              enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "G3_IO3": {
    +                    "description": "G3_IO3 analog switch\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "G3_IO4": {
    +                    "description": "G3_IO4 analog switch\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "G4_IO1": {
    +                    "description": "G4_IO1 analog switch\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "G4_IO2": {
    +                    "description": "G4_IO2 analog switch\n              enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "G4_IO3": {
    +                    "description": "G4_IO3 analog switch\n              enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "G4_IO4": {
    +                    "description": "G4_IO4 analog switch\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "G5_IO1": {
    +                    "description": "G5_IO1 analog switch\n              enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "G5_IO2": {
    +                    "description": "G5_IO2 analog switch\n              enable",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "G5_IO3": {
    +                    "description": "G5_IO3 analog switch\n              enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "G5_IO4": {
    +                    "description": "G5_IO4 analog switch\n              enable",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "G6_IO1": {
    +                    "description": "G6_IO1 analog switch\n              enable",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "G6_IO2": {
    +                    "description": "G6_IO2 analog switch\n              enable",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "G6_IO3": {
    +                    "description": "G6_IO3 analog switch\n              enable",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "G6_IO4": {
    +                    "description": "G6_IO4 analog switch\n              enable",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "G7_IO1": {
    +                    "description": "G7_IO1 analog switch\n              enable",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "G7_IO2": {
    +                    "description": "G7_IO2 analog switch\n              enable",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "G7_IO3": {
    +                    "description": "G7_IO3 analog switch\n              enable",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "G7_IO4": {
    +                    "description": "G7_IO4 analog switch\n              enable",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "G8_IO1": {
    +                    "description": "G8_IO1 analog switch\n              enable",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "G8_IO2": {
    +                    "description": "G8_IO2 analog switch\n              enable",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "G8_IO3": {
    +                    "description": "G8_IO3 analog switch\n              enable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "G8_IO4": {
    +                    "description": "G8_IO4 analog switch\n              enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IOSCR": {
    +              "description": "I/O sampling control register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "G1_IO1": {
    +                    "description": "G1_IO1 sampling mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "G1_IO2": {
    +                    "description": "G1_IO2 sampling mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "G1_IO3": {
    +                    "description": "G1_IO3 sampling mode",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "G1_IO4": {
    +                    "description": "G1_IO4 sampling mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "G2_IO1": {
    +                    "description": "G2_IO1 sampling mode",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "G2_IO2": {
    +                    "description": "G2_IO2 sampling mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "G2_IO3": {
    +                    "description": "G2_IO3 sampling mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "G2_IO4": {
    +                    "description": "G2_IO4 sampling mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "G3_IO1": {
    +                    "description": "G3_IO1 sampling mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "G3_IO2": {
    +                    "description": "G3_IO2 sampling mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "G3_IO3": {
    +                    "description": "G3_IO3 sampling mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "G3_IO4": {
    +                    "description": "G3_IO4 sampling mode",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "G4_IO1": {
    +                    "description": "G4_IO1 sampling mode",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "G4_IO2": {
    +                    "description": "G4_IO2 sampling mode",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "G4_IO3": {
    +                    "description": "G4_IO3 sampling mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "G4_IO4": {
    +                    "description": "G4_IO4 sampling mode",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "G5_IO1": {
    +                    "description": "G5_IO1 sampling mode",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "G5_IO2": {
    +                    "description": "G5_IO2 sampling mode",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "G5_IO3": {
    +                    "description": "G5_IO3 sampling mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "G5_IO4": {
    +                    "description": "G5_IO4 sampling mode",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "G6_IO1": {
    +                    "description": "G6_IO1 sampling mode",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "G6_IO2": {
    +                    "description": "G6_IO2 sampling mode",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "G6_IO3": {
    +                    "description": "G6_IO3 sampling mode",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "G6_IO4": {
    +                    "description": "G6_IO4 sampling mode",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "G7_IO1": {
    +                    "description": "G7_IO1 sampling mode",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "G7_IO2": {
    +                    "description": "G7_IO2 sampling mode",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "G7_IO3": {
    +                    "description": "G7_IO3 sampling mode",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "G7_IO4": {
    +                    "description": "G7_IO4 sampling mode",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "G8_IO1": {
    +                    "description": "G8_IO1 sampling mode",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "G8_IO2": {
    +                    "description": "G8_IO2 sampling mode",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "G8_IO3": {
    +                    "description": "G8_IO3 sampling mode",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "G8_IO4": {
    +                    "description": "G8_IO4 sampling mode",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IOCCR": {
    +              "description": "I/O channel control register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "G1_IO1": {
    +                    "description": "G1_IO1 channel mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "G1_IO2": {
    +                    "description": "G1_IO2 channel mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "G1_IO3": {
    +                    "description": "G1_IO3 channel mode",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "G1_IO4": {
    +                    "description": "G1_IO4 channel mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "G2_IO1": {
    +                    "description": "G2_IO1 channel mode",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "G2_IO2": {
    +                    "description": "G2_IO2 channel mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "G2_IO3": {
    +                    "description": "G2_IO3 channel mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "G2_IO4": {
    +                    "description": "G2_IO4 channel mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "G3_IO1": {
    +                    "description": "G3_IO1 channel mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "G3_IO2": {
    +                    "description": "G3_IO2 channel mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "G3_IO3": {
    +                    "description": "G3_IO3 channel mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "G3_IO4": {
    +                    "description": "G3_IO4 channel mode",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "G4_IO1": {
    +                    "description": "G4_IO1 channel mode",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "G4_IO2": {
    +                    "description": "G4_IO2 channel mode",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "G4_IO3": {
    +                    "description": "G4_IO3 channel mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "G4_IO4": {
    +                    "description": "G4_IO4 channel mode",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "G5_IO1": {
    +                    "description": "G5_IO1 channel mode",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "G5_IO2": {
    +                    "description": "G5_IO2 channel mode",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "G5_IO3": {
    +                    "description": "G5_IO3 channel mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "G5_IO4": {
    +                    "description": "G5_IO4 channel mode",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "G6_IO1": {
    +                    "description": "G6_IO1 channel mode",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "G6_IO2": {
    +                    "description": "G6_IO2 channel mode",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "G6_IO3": {
    +                    "description": "G6_IO3 channel mode",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "G6_IO4": {
    +                    "description": "G6_IO4 channel mode",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "G7_IO1": {
    +                    "description": "G7_IO1 channel mode",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "G7_IO2": {
    +                    "description": "G7_IO2 channel mode",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "G7_IO3": {
    +                    "description": "G7_IO3 channel mode",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "G7_IO4": {
    +                    "description": "G7_IO4 channel mode",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "G8_IO1": {
    +                    "description": "G8_IO1 channel mode",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "G8_IO2": {
    +                    "description": "G8_IO2 channel mode",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "G8_IO3": {
    +                    "description": "G8_IO3 channel mode",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "G8_IO4": {
    +                    "description": "G8_IO4 channel mode",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IOGCSR": {
    +              "description": "I/O group control status\n          register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "G8S": {
    +                    "description": "Analog I/O group x status",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "G7S": {
    +                    "description": "Analog I/O group x status",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "G6S": {
    +                    "description": "Analog I/O group x status",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "G5S": {
    +                    "description": "Analog I/O group x status",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "G4S": {
    +                    "description": "Analog I/O group x status",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "G3S": {
    +                    "description": "Analog I/O group x status",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "G2S": {
    +                    "description": "Analog I/O group x status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "G1S": {
    +                    "description": "Analog I/O group x status",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "G8E": {
    +                    "description": "Analog I/O group x enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "G7E": {
    +                    "description": "Analog I/O group x enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "G6E": {
    +                    "description": "Analog I/O group x enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "G5E": {
    +                    "description": "Analog I/O group x enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "G4E": {
    +                    "description": "Analog I/O group x enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "G3E": {
    +                    "description": "Analog I/O group x enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "G2E": {
    +                    "description": "Analog I/O group x enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "G1E": {
    +                    "description": "Analog I/O group x enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IOG1CR": {
    +              "description": "I/O group x counter register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "Counter value",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "IOG2CR": {
    +              "description": "I/O group x counter register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "Counter value",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "IOG3CR": {
    +              "description": "I/O group x counter register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "Counter value",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "IOG4CR": {
    +              "description": "I/O group x counter register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "Counter value",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "IOG5CR": {
    +              "description": "I/O group x counter register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "Counter value",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "IOG6CR": {
    +              "description": "I/O group x counter register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "Counter value",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "IOG7CR": {
    +              "description": "I/O group x counter register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "Counter value",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "IOG8CR": {
    +              "description": "I/O group x counter register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "Counter value",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "CRC": {
    +        "description": "cyclic redundancy check calculation\n      unit",
    +        "children": {
    +          "registers": {
    +            "DR": {
    +              "description": "Data register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DR": {
    +                    "description": "Data register bits",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IDR": {
    +              "description": "Independent data register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IDR": {
    +                    "description": "General-purpose 8-bit data register\n              bits",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CR": {
    +              "description": "Control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESET": {
    +                    "description": "reset bit",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "POLYSIZE": {
    +                    "description": "Polynomial size",
    +                    "offset": 3,
    +                    "size": 2
    +                  },
    +                  "REV_IN": {
    +                    "description": "Reverse input data",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "REV_OUT": {
    +                    "description": "Reverse output data",
    +                    "offset": 7,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INIT": {
    +              "description": "Initial CRC value",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INIT": {
    +                    "description": "Programmable initial CRC\n              value",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "POL": {
    +              "description": "CRC polynomial",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 79764919,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "POL": {
    +                    "description": "Programmable polynomial",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "Flash": {
    +        "description": "Flash",
    +        "children": {
    +          "registers": {
    +            "ACR": {
    +              "description": "Flash access control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 48,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LATENCY": {
    +                    "description": "LATENCY",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "PRFTBE": {
    +                    "description": "PRFTBE",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "PRFTBS": {
    +                    "description": "PRFTBS",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "KEYR": {
    +              "description": "Flash key register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "FKEYR": {
    +                    "description": "Flash Key",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OPTKEYR": {
    +              "description": "Flash option key register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "OPTKEYR": {
    +                    "description": "Option byte key",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "Flash status register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EOP": {
    +                    "description": "End of operation",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "WRPRT": {
    +                    "description": "Write protection error",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "PGERR": {
    +                    "description": "Programming error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "BSY": {
    +                    "description": "Busy",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CR": {
    +              "description": "Flash control register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FORCE_OPTLOAD": {
    +                    "description": "Force option byte loading",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EOPIE": {
    +                    "description": "End of operation interrupt\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "Error interrupt enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OPTWRE": {
    +                    "description": "Option bytes write enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "LOCK": {
    +                    "description": "Lock",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "STRT": {
    +                    "description": "Start",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "OPTER": {
    +                    "description": "Option byte erase",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "OPTPG": {
    +                    "description": "Option byte programming",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "MER": {
    +                    "description": "Mass erase",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PER": {
    +                    "description": "Page erase",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PG": {
    +                    "description": "Programming",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AR": {
    +              "description": "Flash address register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "FAR": {
    +                    "description": "Flash address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OBR": {
    +              "description": "Option byte register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 4294967042,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "OPTERR": {
    +                    "description": "Option byte error",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "LEVEL1_PROT": {
    +                    "description": "Level 1 protection status",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "LEVEL2_PROT": {
    +                    "description": "Level 2 protection status",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "WDG_SW": {
    +                    "description": "WDG_SW",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "nRST_STOP": {
    +                    "description": "nRST_STOP",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "nRST_STDBY": {
    +                    "description": "nRST_STDBY",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "BOOT1": {
    +                    "description": "BOOT1",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "VDDA_MONITOR": {
    +                    "description": "VDDA_MONITOR",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "SRAM_PARITY_CHECK": {
    +                    "description": "SRAM_PARITY_CHECK",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "Data0": {
    +                    "description": "Data0",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "Data1": {
    +                    "description": "Data1",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "WRPR": {
    +              "description": "Write protection register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "WRP": {
    +                    "description": "Write protect",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "RCC": {
    +        "description": "Reset and clock control",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "Clock control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 131,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HSION": {
    +                    "description": "Internal High Speed clock\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "HSIRDY": {
    +                    "description": "Internal High Speed clock ready\n              flag",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HSITRIM": {
    +                    "description": "Internal High Speed clock\n              trimming",
    +                    "offset": 3,
    +                    "size": 5
    +                  },
    +                  "HSICAL": {
    +                    "description": "Internal High Speed clock\n              Calibration",
    +                    "offset": 8,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "HSEON": {
    +                    "description": "External High Speed clock\n              enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "HSERDY": {
    +                    "description": "External High Speed clock ready\n              flag",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HSEBYP": {
    +                    "description": "External High Speed clock\n              Bypass",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "CSSON": {
    +                    "description": "Clock Security System\n              enable",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "PLLON": {
    +                    "description": "PLL enable",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "PLLRDY": {
    +                    "description": "PLL clock ready flag",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CFGR": {
    +              "description": "Clock configuration register\n          (RCC_CFGR)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SW": {
    +                    "description": "System clock Switch",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "SWS": {
    +                    "description": "System Clock Switch Status",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "HPRE": {
    +                    "description": "AHB prescaler",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "PPRE1": {
    +                    "description": "APB Low speed prescaler\n              (APB1)",
    +                    "offset": 8,
    +                    "size": 3
    +                  },
    +                  "PPRE2": {
    +                    "description": "APB high speed prescaler\n              (APB2)",
    +                    "offset": 11,
    +                    "size": 3
    +                  },
    +                  "PLLSRC": {
    +                    "description": "PLL entry clock source",
    +                    "offset": 15,
    +                    "size": 2
    +                  },
    +                  "PLLXTPRE": {
    +                    "description": "HSE divider for PLL entry",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "PLLMUL": {
    +                    "description": "PLL Multiplication Factor",
    +                    "offset": 18,
    +                    "size": 4
    +                  },
    +                  "USBPRES": {
    +                    "description": "USB prescaler",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "MCO": {
    +                    "description": "Microcontroller clock\n              output",
    +                    "offset": 24,
    +                    "size": 3
    +                  },
    +                  "MCOF": {
    +                    "description": "Microcontroller Clock Output\n              Flag",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "I2SSRC": {
    +                    "description": "I2S external clock source\n              selection",
    +                    "offset": 23,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CIR": {
    +              "description": "Clock interrupt register\n          (RCC_CIR)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LSIRDYF": {
    +                    "description": "LSI Ready Interrupt flag",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LSERDYF": {
    +                    "description": "LSE Ready Interrupt flag",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HSIRDYF": {
    +                    "description": "HSI Ready Interrupt flag",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HSERDYF": {
    +                    "description": "HSE Ready Interrupt flag",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PLLRDYF": {
    +                    "description": "PLL Ready Interrupt flag",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CSSF": {
    +                    "description": "Clock Security System Interrupt\n              flag",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LSIRDYIE": {
    +                    "description": "LSI Ready Interrupt Enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LSERDYIE": {
    +                    "description": "LSE Ready Interrupt Enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "HSIRDYIE": {
    +                    "description": "HSI Ready Interrupt Enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "HSERDYIE": {
    +                    "description": "HSE Ready Interrupt Enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "PLLRDYIE": {
    +                    "description": "PLL Ready Interrupt Enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "LSIRDYC": {
    +                    "description": "LSI Ready Interrupt Clear",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "LSERDYC": {
    +                    "description": "LSE Ready Interrupt Clear",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "HSIRDYC": {
    +                    "description": "HSI Ready Interrupt Clear",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "HSERDYC": {
    +                    "description": "HSE Ready Interrupt Clear",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "PLLRDYC": {
    +                    "description": "PLL Ready Interrupt Clear",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CSSC": {
    +                    "description": "Clock security system interrupt\n              clear",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "APB2RSTR": {
    +              "description": "APB2 peripheral reset register\n          (RCC_APB2RSTR)",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SYSCFGRST": {
    +                    "description": "SYSCFG and COMP reset",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TIM1RST": {
    +                    "description": "TIM1 timer reset",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SPI1RST": {
    +                    "description": "SPI 1 reset",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TIM8RST": {
    +                    "description": "TIM8 timer reset",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "USART1RST": {
    +                    "description": "USART1 reset",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TIM15RST": {
    +                    "description": "TIM15 timer reset",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TIM16RST": {
    +                    "description": "TIM16 timer reset",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TIM17RST": {
    +                    "description": "TIM17 timer reset",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "APB1RSTR": {
    +              "description": "APB1 peripheral reset register\n          (RCC_APB1RSTR)",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIM2RST": {
    +                    "description": "Timer 2 reset",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TIM3RST": {
    +                    "description": "Timer 3 reset",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TIM4RST": {
    +                    "description": "Timer 14 reset",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TIM6RST": {
    +                    "description": "Timer 6 reset",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TIM7RST": {
    +                    "description": "Timer 7 reset",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "WWDGRST": {
    +                    "description": "Window watchdog reset",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SPI2RST": {
    +                    "description": "SPI2 reset",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SPI3RST": {
    +                    "description": "SPI3 reset",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "USART2RST": {
    +                    "description": "USART 2 reset",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "USART3RST": {
    +                    "description": "USART3 reset",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "UART4RST": {
    +                    "description": "UART 4 reset",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "UART5RST": {
    +                    "description": "UART 5 reset",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "I2C1RST": {
    +                    "description": "I2C1 reset",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "I2C2RST": {
    +                    "description": "I2C2 reset",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "USBRST": {
    +                    "description": "USB reset",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "CANRST": {
    +                    "description": "CAN reset",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "PWRRST": {
    +                    "description": "Power interface reset",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "DACRST": {
    +                    "description": "DAC interface reset",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "I2C3RST": {
    +                    "description": "I2C3 reset",
    +                    "offset": 30,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AHBENR": {
    +              "description": "AHB Peripheral Clock enable register\n          (RCC_AHBENR)",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 20,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAEN": {
    +                    "description": "DMA1 clock enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DMA2EN": {
    +                    "description": "DMA2 clock enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SRAMEN": {
    +                    "description": "SRAM interface clock\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FLITFEN": {
    +                    "description": "FLITF clock enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FMCEN": {
    +                    "description": "FMC clock enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CRCEN": {
    +                    "description": "CRC clock enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "IOPHEN": {
    +                    "description": "IO port H clock enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "IOPAEN": {
    +                    "description": "I/O port A clock enable",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "IOPBEN": {
    +                    "description": "I/O port B clock enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "IOPCEN": {
    +                    "description": "I/O port C clock enable",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "IOPDEN": {
    +                    "description": "I/O port D clock enable",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "IOPEEN": {
    +                    "description": "I/O port E clock enable",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "IOPFEN": {
    +                    "description": "I/O port F clock enable",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "IOPGEN": {
    +                    "description": "I/O port G clock enable",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "TSCEN": {
    +                    "description": "Touch sensing controller clock\n              enable",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "ADC12EN": {
    +                    "description": "ADC1 and ADC2 clock enable",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ADC34EN": {
    +                    "description": "ADC3 and ADC4 clock enable",
    +                    "offset": 29,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "APB2ENR": {
    +              "description": "APB2 peripheral clock enable register\n          (RCC_APB2ENR)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SYSCFGEN": {
    +                    "description": "SYSCFG clock enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TIM1EN": {
    +                    "description": "TIM1 Timer clock enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SPI1EN": {
    +                    "description": "SPI 1 clock enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TIM8EN": {
    +                    "description": "TIM8 Timer clock enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "USART1EN": {
    +                    "description": "USART1 clock enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TIM15EN": {
    +                    "description": "TIM15 timer clock enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TIM16EN": {
    +                    "description": "TIM16 timer clock enable",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TIM17EN": {
    +                    "description": "TIM17 timer clock enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "APB1ENR": {
    +              "description": "APB1 peripheral clock enable register\n          (RCC_APB1ENR)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIM2EN": {
    +                    "description": "Timer 2 clock enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TIM3EN": {
    +                    "description": "Timer 3 clock enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TIM4EN": {
    +                    "description": "Timer 4 clock enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TIM6EN": {
    +                    "description": "Timer 6 clock enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TIM7EN": {
    +                    "description": "Timer 7 clock enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "WWDGEN": {
    +                    "description": "Window watchdog clock\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SPI2EN": {
    +                    "description": "SPI 2 clock enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SPI3EN": {
    +                    "description": "SPI 3 clock enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "USART2EN": {
    +                    "description": "USART 2 clock enable",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "USART3EN": {
    +                    "description": "USART 3 clock enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "USART4EN": {
    +                    "description": "USART 4 clock enable",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "USART5EN": {
    +                    "description": "USART 5 clock enable",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "I2C1EN": {
    +                    "description": "I2C 1 clock enable",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "I2C2EN": {
    +                    "description": "I2C 2 clock enable",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "USBEN": {
    +                    "description": "USB clock enable",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "CANEN": {
    +                    "description": "CAN clock enable",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "DAC2EN": {
    +                    "description": "DAC2 interface clock\n              enable",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "PWREN": {
    +                    "description": "Power interface clock\n              enable",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "DACEN": {
    +                    "description": "DAC interface clock enable",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "I2C3EN": {
    +                    "description": "I2C3 clock enable",
    +                    "offset": 30,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BDCR": {
    +              "description": "Backup domain control register\n          (RCC_BDCR)",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LSEON": {
    +                    "description": "External Low Speed oscillator\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "LSERDY": {
    +                    "description": "External Low Speed oscillator\n              ready",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LSEBYP": {
    +                    "description": "External Low Speed oscillator\n              bypass",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "LSEDRV": {
    +                    "description": "LSE oscillator drive\n              capability",
    +                    "offset": 3,
    +                    "size": 2
    +                  },
    +                  "RTCSEL": {
    +                    "description": "RTC clock source selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "RTCEN": {
    +                    "description": "RTC clock enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "BDRST": {
    +                    "description": "Backup domain software\n              reset",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CSR": {
    +              "description": "Control/status register\n          (RCC_CSR)",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 201326592,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LSION": {
    +                    "description": "Internal low speed oscillator\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "LSIRDY": {
    +                    "description": "Internal low speed oscillator\n              ready",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RMVF": {
    +                    "description": "Remove reset flag",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "OBLRSTF": {
    +                    "description": "Option byte loader reset\n              flag",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "PINRSTF": {
    +                    "description": "PIN reset flag",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "PORRSTF": {
    +                    "description": "POR/PDR reset flag",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "SFTRSTF": {
    +                    "description": "Software reset flag",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "IWDGRSTF": {
    +                    "description": "Independent watchdog reset\n              flag",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "WWDGRSTF": {
    +                    "description": "Window watchdog reset flag",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "LPWRRSTF": {
    +                    "description": "Low-power reset flag",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AHBRSTR": {
    +              "description": "AHB peripheral reset register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FMCRST": {
    +                    "description": "FMC reset",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IOPHRST": {
    +                    "description": "I/O port H reset",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "IOPARST": {
    +                    "description": "I/O port A reset",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "IOPBRST": {
    +                    "description": "I/O port B reset",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "IOPCRST": {
    +                    "description": "I/O port C reset",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "IOPDRST": {
    +                    "description": "I/O port D reset",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "IOPERST": {
    +                    "description": "I/O port E reset",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "IOPFRST": {
    +                    "description": "I/O port F reset",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "IOPGRST": {
    +                    "description": "Touch sensing controller\n              reset",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "TSCRST": {
    +                    "description": "Touch sensing controller\n              reset",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "ADC12RST": {
    +                    "description": "ADC1 and ADC2 reset",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ADC34RST": {
    +                    "description": "ADC3 and ADC4 reset",
    +                    "offset": 29,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CFGR2": {
    +              "description": "Clock configuration register 2",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PREDIV": {
    +                    "description": "PREDIV division factor",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "ADC12PRES": {
    +                    "description": "ADC1 and ADC2 prescaler",
    +                    "offset": 4,
    +                    "size": 5
    +                  },
    +                  "ADC34PRES": {
    +                    "description": "ADC3 and ADC4 prescaler",
    +                    "offset": 9,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "CFGR3": {
    +              "description": "Clock configuration register 3",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "USART1SW": {
    +                    "description": "USART1 clock source\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "I2C1SW": {
    +                    "description": "I2C1 clock source\n              selection",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "I2C2SW": {
    +                    "description": "I2C2 clock source\n              selection",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "I2C3SW": {
    +                    "description": "I2C3 clock source\n              selection",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "USART2SW": {
    +                    "description": "USART2 clock source\n              selection",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "USART3SW": {
    +                    "description": "USART3 clock source\n              selection",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "TIM1SW": {
    +                    "description": "Timer1 clock source\n              selection",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TIM8SW": {
    +                    "description": "Timer8 clock source\n              selection",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "UART4SW": {
    +                    "description": "UART4 clock source\n              selection",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "UART5SW": {
    +                    "description": "UART5 clock source\n              selection",
    +                    "offset": 22,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "DMA1": {
    +        "description": "DMA controller 1",
    +        "children": {
    +          "registers": {
    +            "ISR": {
    +              "description": "DMA interrupt status register\n          (DMA_ISR)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "GIF1": {
    +                    "description": "Channel 1 Global interrupt\n              flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TCIF1": {
    +                    "description": "Channel 1 Transfer Complete\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTIF1": {
    +                    "description": "Channel 1 Half Transfer Complete\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TEIF1": {
    +                    "description": "Channel 1 Transfer Error\n              flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GIF2": {
    +                    "description": "Channel 2 Global interrupt\n              flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TCIF2": {
    +                    "description": "Channel 2 Transfer Complete\n              flag",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "HTIF2": {
    +                    "description": "Channel 2 Half Transfer Complete\n              flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TEIF2": {
    +                    "description": "Channel 2 Transfer Error\n              flag",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GIF3": {
    +                    "description": "Channel 3 Global interrupt\n              flag",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TCIF3": {
    +                    "description": "Channel 3 Transfer Complete\n              flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "HTIF3": {
    +                    "description": "Channel 3 Half Transfer Complete\n              flag",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TEIF3": {
    +                    "description": "Channel 3 Transfer Error\n              flag",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GIF4": {
    +                    "description": "Channel 4 Global interrupt\n              flag",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TCIF4": {
    +                    "description": "Channel 4 Transfer Complete\n              flag",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "HTIF4": {
    +                    "description": "Channel 4 Half Transfer Complete\n              flag",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TEIF4": {
    +                    "description": "Channel 4 Transfer Error\n              flag",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GIF5": {
    +                    "description": "Channel 5 Global interrupt\n              flag",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TCIF5": {
    +                    "description": "Channel 5 Transfer Complete\n              flag",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "HTIF5": {
    +                    "description": "Channel 5 Half Transfer Complete\n              flag",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TEIF5": {
    +                    "description": "Channel 5 Transfer Error\n              flag",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GIF6": {
    +                    "description": "Channel 6 Global interrupt\n              flag",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "TCIF6": {
    +                    "description": "Channel 6 Transfer Complete\n              flag",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "HTIF6": {
    +                    "description": "Channel 6 Half Transfer Complete\n              flag",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "TEIF6": {
    +                    "description": "Channel 6 Transfer Error\n              flag",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GIF7": {
    +                    "description": "Channel 7 Global interrupt\n              flag",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "TCIF7": {
    +                    "description": "Channel 7 Transfer Complete\n              flag",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "HTIF7": {
    +                    "description": "Channel 7 Half Transfer Complete\n              flag",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "TEIF7": {
    +                    "description": "Channel 7 Transfer Error\n              flag",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IFCR": {
    +              "description": "DMA interrupt flag clear register\n          (DMA_IFCR)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "CGIF1": {
    +                    "description": "Channel 1 Global interrupt\n              clear",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CTCIF1": {
    +                    "description": "Channel 1 Transfer Complete\n              clear",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CHTIF1": {
    +                    "description": "Channel 1 Half Transfer\n              clear",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CTEIF1": {
    +                    "description": "Channel 1 Transfer Error\n              clear",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CGIF2": {
    +                    "description": "Channel 2 Global interrupt\n              clear",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CTCIF2": {
    +                    "description": "Channel 2 Transfer Complete\n              clear",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CHTIF2": {
    +                    "description": "Channel 2 Half Transfer\n              clear",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CTEIF2": {
    +                    "description": "Channel 2 Transfer Error\n              clear",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CGIF3": {
    +                    "description": "Channel 3 Global interrupt\n              clear",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CTCIF3": {
    +                    "description": "Channel 3 Transfer Complete\n              clear",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CHTIF3": {
    +                    "description": "Channel 3 Half Transfer\n              clear",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CTEIF3": {
    +                    "description": "Channel 3 Transfer Error\n              clear",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CGIF4": {
    +                    "description": "Channel 4 Global interrupt\n              clear",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CTCIF4": {
    +                    "description": "Channel 4 Transfer Complete\n              clear",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CHTIF4": {
    +                    "description": "Channel 4 Half Transfer\n              clear",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CTEIF4": {
    +                    "description": "Channel 4 Transfer Error\n              clear",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "CGIF5": {
    +                    "description": "Channel 5 Global interrupt\n              clear",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "CTCIF5": {
    +                    "description": "Channel 5 Transfer Complete\n              clear",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "CHTIF5": {
    +                    "description": "Channel 5 Half Transfer\n              clear",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "CTEIF5": {
    +                    "description": "Channel 5 Transfer Error\n              clear",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "CGIF6": {
    +                    "description": "Channel 6 Global interrupt\n              clear",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CTCIF6": {
    +                    "description": "Channel 6 Transfer Complete\n              clear",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "CHTIF6": {
    +                    "description": "Channel 6 Half Transfer\n              clear",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "CTEIF6": {
    +                    "description": "Channel 6 Transfer Error\n              clear",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "CGIF7": {
    +                    "description": "Channel 7 Global interrupt\n              clear",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "CTCIF7": {
    +                    "description": "Channel 7 Transfer Complete\n              clear",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "CHTIF7": {
    +                    "description": "Channel 7 Half Transfer\n              clear",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "CTEIF7": {
    +                    "description": "Channel 7 Transfer Error\n              clear",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCR1": {
    +              "description": "DMA channel configuration register\n          (DMA_CCR)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EN": {
    +                    "description": "Channel enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half Transfer interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral size",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory size",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PL": {
    +                    "description": "Channel Priority level",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "MEM2MEM": {
    +                    "description": "Memory to memory mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNDTR1": {
    +              "description": "DMA channel 1 number of data\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data to transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CPAR1": {
    +              "description": "DMA channel 1 peripheral address\n          register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CMAR1": {
    +              "description": "DMA channel 1 memory address\n          register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MA": {
    +                    "description": "Memory address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CCR2": {
    +              "description": "DMA channel configuration register\n          (DMA_CCR)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EN": {
    +                    "description": "Channel enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half Transfer interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral size",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory size",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PL": {
    +                    "description": "Channel Priority level",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "MEM2MEM": {
    +                    "description": "Memory to memory mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNDTR2": {
    +              "description": "DMA channel 2 number of data\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data to transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CPAR2": {
    +              "description": "DMA channel 2 peripheral address\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CMAR2": {
    +              "description": "DMA channel 2 memory address\n          register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MA": {
    +                    "description": "Memory address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CCR3": {
    +              "description": "DMA channel configuration register\n          (DMA_CCR)",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EN": {
    +                    "description": "Channel enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half Transfer interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral size",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory size",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PL": {
    +                    "description": "Channel Priority level",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "MEM2MEM": {
    +                    "description": "Memory to memory mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNDTR3": {
    +              "description": "DMA channel 3 number of data\n          register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data to transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CPAR3": {
    +              "description": "DMA channel 3 peripheral address\n          register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CMAR3": {
    +              "description": "DMA channel 3 memory address\n          register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MA": {
    +                    "description": "Memory address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CCR4": {
    +              "description": "DMA channel configuration register\n          (DMA_CCR)",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EN": {
    +                    "description": "Channel enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half Transfer interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral size",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory size",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PL": {
    +                    "description": "Channel Priority level",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "MEM2MEM": {
    +                    "description": "Memory to memory mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNDTR4": {
    +              "description": "DMA channel 4 number of data\n          register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data to transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CPAR4": {
    +              "description": "DMA channel 4 peripheral address\n          register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CMAR4": {
    +              "description": "DMA channel 4 memory address\n          register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MA": {
    +                    "description": "Memory address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CCR5": {
    +              "description": "DMA channel configuration register\n          (DMA_CCR)",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EN": {
    +                    "description": "Channel enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half Transfer interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral size",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory size",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PL": {
    +                    "description": "Channel Priority level",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "MEM2MEM": {
    +                    "description": "Memory to memory mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNDTR5": {
    +              "description": "DMA channel 5 number of data\n          register",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data to transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CPAR5": {
    +              "description": "DMA channel 5 peripheral address\n          register",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CMAR5": {
    +              "description": "DMA channel 5 memory address\n          register",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MA": {
    +                    "description": "Memory address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CCR6": {
    +              "description": "DMA channel configuration register\n          (DMA_CCR)",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EN": {
    +                    "description": "Channel enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half Transfer interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral size",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory size",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PL": {
    +                    "description": "Channel Priority level",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "MEM2MEM": {
    +                    "description": "Memory to memory mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNDTR6": {
    +              "description": "DMA channel 6 number of data\n          register",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data to transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CPAR6": {
    +              "description": "DMA channel 6 peripheral address\n          register",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CMAR6": {
    +              "description": "DMA channel 6 memory address\n          register",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MA": {
    +                    "description": "Memory address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CCR7": {
    +              "description": "DMA channel configuration register\n          (DMA_CCR)",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EN": {
    +                    "description": "Channel enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half Transfer interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral size",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory size",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PL": {
    +                    "description": "Channel Priority level",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "MEM2MEM": {
    +                    "description": "Memory to memory mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNDTR7": {
    +              "description": "DMA channel 7 number of data\n          register",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data to transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CPAR7": {
    +              "description": "DMA channel 7 peripheral address\n          register",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CMAR7": {
    +              "description": "DMA channel 7 memory address\n          register",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MA": {
    +                    "description": "Memory address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "FPU": {
    +        "description": "Floting point unit",
    +        "children": {
    +          "registers": {
    +            "FPCCR": {
    +              "description": "Floating-point context control\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LSPACT": {
    +                    "description": "LSPACT",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "USER": {
    +                    "description": "USER",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "THREAD": {
    +                    "description": "THREAD",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "HFRDY": {
    +                    "description": "HFRDY",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "MMRDY": {
    +                    "description": "MMRDY",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "BFRDY": {
    +                    "description": "BFRDY",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MONRDY": {
    +                    "description": "MONRDY",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LSPEN": {
    +                    "description": "LSPEN",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "ASPEN": {
    +                    "description": "ASPEN",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FPCAR": {
    +              "description": "Floating-point context address\n          register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADDRESS": {
    +                    "description": "Location of unpopulated\n              floating-point",
    +                    "offset": 3,
    +                    "size": 29
    +                  }
    +                }
    +              }
    +            },
    +            "FPSCR": {
    +              "description": "Floating-point status control\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IOC": {
    +                    "description": "Invalid operation cumulative exception\n              bit",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DZC": {
    +                    "description": "Division by zero cumulative exception\n              bit.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OFC": {
    +                    "description": "Overflow cumulative exception\n              bit",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UFC": {
    +                    "description": "Underflow cumulative exception\n              bit",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IXC": {
    +                    "description": "Inexact cumulative exception\n              bit",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IDC": {
    +                    "description": "Input denormal cumulative exception\n              bit.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RMode": {
    +                    "description": "Rounding Mode control\n              field",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "FZ": {
    +                    "description": "Flush-to-zero mode control\n              bit:",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "DN": {
    +                    "description": "Default NaN mode control\n              bit",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "AHP": {
    +                    "description": "Alternative half-precision control\n              bit",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "V": {
    +                    "description": "Overflow condition code\n              flag",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "C": {
    +                    "description": "Carry condition code flag",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "Z": {
    +                    "description": "Zero condition code flag",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "N": {
    +                    "description": "Negative condition code\n              flag",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIM2": {
    +        "description": "General purpose timer",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OPM": {
    +                    "description": "One-pulse mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CMS": {
    +                    "description": "Center-aligned mode\n              selection",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CKD": {
    +                    "description": "Clock division",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "UIFREMAP": {
    +                    "description": "UIF status bit remapping",
    +                    "offset": 11,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TI1S": {
    +                    "description": "TI1 selection",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MMS": {
    +                    "description": "Master mode selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "CCDS": {
    +                    "description": "Capture/compare DMA\n              selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SMCR": {
    +              "description": "slave mode control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SMS": {
    +                    "description": "Slave mode selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "OCCS": {
    +                    "description": "OCREF clear selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TS": {
    +                    "description": "Trigger selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "MSM": {
    +                    "description": "Master/Slave mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ETF": {
    +                    "description": "External trigger filter",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "ETPS": {
    +                    "description": "External trigger prescaler",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "ECE": {
    +                    "description": "External clock enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ETP": {
    +                    "description": "External trigger polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "SMS_3": {
    +                    "description": "Slave mode selection bit3",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TDE": {
    +                    "description": "Trigger DMA request enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CC4DE": {
    +                    "description": "Capture/Compare 4 DMA request\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3DE": {
    +                    "description": "Capture/Compare 3 DMA request\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC2DE": {
    +                    "description": "Capture/Compare 2 DMA request\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1DE": {
    +                    "description": "Capture/Compare 1 DMA request\n              enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "UDE": {
    +                    "description": "Update DMA request enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TIE": {
    +                    "description": "Trigger interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC4IE": {
    +                    "description": "Capture/Compare 4 interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3IE": {
    +                    "description": "Capture/Compare 3 interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2IE": {
    +                    "description": "Capture/Compare 2 interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IE": {
    +                    "description": "Capture/Compare 1 interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC4OF": {
    +                    "description": "Capture/Compare 4 overcapture\n              flag",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3OF": {
    +                    "description": "Capture/Compare 3 overcapture\n              flag",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC2OF": {
    +                    "description": "Capture/compare 2 overcapture\n              flag",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1OF": {
    +                    "description": "Capture/Compare 1 overcapture\n              flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TIF": {
    +                    "description": "Trigger interrupt flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC4IF": {
    +                    "description": "Capture/Compare 4 interrupt\n              flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3IF": {
    +                    "description": "Capture/Compare 3 interrupt\n              flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2IF": {
    +                    "description": "Capture/Compare 2 interrupt\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IF": {
    +                    "description": "Capture/compare 1 interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TG": {
    +                    "description": "Trigger generation",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC4G": {
    +                    "description": "Capture/compare 4\n              generation",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3G": {
    +                    "description": "Capture/compare 3\n              generation",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2G": {
    +                    "description": "Capture/compare 2\n              generation",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1G": {
    +                    "description": "Capture/compare 1\n              generation",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Output": {
    +              "description": "capture/compare mode register 1 (output\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "OC1FE": {
    +                    "description": "Output compare 1 fast\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OC1PE": {
    +                    "description": "Output compare 1 preload\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC1M": {
    +                    "description": "Output compare 1 mode",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC1CE": {
    +                    "description": "Output compare 1 clear\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/Compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC2FE": {
    +                    "description": "Output compare 2 fast\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OC2PE": {
    +                    "description": "Output compare 2 preload\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC2M": {
    +                    "description": "Output compare 2 mode",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC2CE": {
    +                    "description": "Output compare 2 clear\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC1M_3": {
    +                    "description": "Output compare 1 mode bit\n              3",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "OC2M_3": {
    +                    "description": "Output compare 2 mode bit\n              3",
    +                    "offset": 24,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Input": {
    +              "description": "capture/compare mode register 1 (input\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC2F": {
    +                    "description": "Input capture 2 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC2PSC": {
    +                    "description": "Input capture 2 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC1F": {
    +                    "description": "Input capture 1 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "IC1PSC": {
    +                    "description": "Input capture 1 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR2_Output": {
    +              "description": "capture/compare mode register 2 (output\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC3S": {
    +                    "description": "Capture/Compare 3\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "OC3FE": {
    +                    "description": "Output compare 3 fast\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OC3PE": {
    +                    "description": "Output compare 3 preload\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC3M": {
    +                    "description": "Output compare 3 mode",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC3CE": {
    +                    "description": "Output compare 3 clear\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CC4S": {
    +                    "description": "Capture/Compare 4\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC4FE": {
    +                    "description": "Output compare 4 fast\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OC4PE": {
    +                    "description": "Output compare 4 preload\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC4M": {
    +                    "description": "Output compare 4 mode",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "O24CE": {
    +                    "description": "Output compare 4 clear\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC3M_3": {
    +                    "description": "Output compare 3 mode bit3",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "OC4M_3": {
    +                    "description": "Output compare 4 mode bit3",
    +                    "offset": 24,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR2_Input": {
    +              "description": "capture/compare mode register 2 (input\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC4F": {
    +                    "description": "Input capture 4 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC4PSC": {
    +                    "description": "Input capture 4 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC4S": {
    +                    "description": "Capture/Compare 4\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC3F": {
    +                    "description": "Input capture 3 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "IC3PSC": {
    +                    "description": "Input capture 3 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC3S": {
    +                    "description": "Capture/Compare 3\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCER": {
    +              "description": "capture/compare enable\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC1E": {
    +                    "description": "Capture/Compare 1 output\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CC1P": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC1NP": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2E": {
    +                    "description": "Capture/Compare 2 output\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC2P": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC2NP": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CC3E": {
    +                    "description": "Capture/Compare 3 output\n              enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CC3P": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CC3NP": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC4E": {
    +                    "description": "Capture/Compare 4 output\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC4P": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CC4NP": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNTL": {
    +                    "description": "Low counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "CNTH": {
    +                    "description": "High counter value",
    +                    "offset": 16,
    +                    "size": 15
    +                  },
    +                  "CNT_or_UIFCPY": {
    +                    "description": "if IUFREMAP=0 than CNT with read write\n              access else UIFCPY with read only\n              access",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARRL": {
    +                    "description": "Low Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "ARRH": {
    +                    "description": "High Auto-reload value",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR1": {
    +              "description": "capture/compare register 1",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR1L": {
    +                    "description": "Low Capture/Compare 1\n              value",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "CCR1H": {
    +                    "description": "High Capture/Compare 1 value (on\n              TIM2)",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR2": {
    +              "description": "capture/compare register 2",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR2L": {
    +                    "description": "Low Capture/Compare 2\n              value",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "CCR2H": {
    +                    "description": "High Capture/Compare 2 value (on\n              TIM2)",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR3": {
    +              "description": "capture/compare register 3",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR3L": {
    +                    "description": "Low Capture/Compare value",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "CCR3H": {
    +                    "description": "High Capture/Compare value (on\n              TIM2)",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR4": {
    +              "description": "capture/compare register 4",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR4L": {
    +                    "description": "Low Capture/Compare value",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "CCR4H": {
    +                    "description": "High Capture/Compare value (on\n              TIM2)",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DCR": {
    +              "description": "DMA control register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBL": {
    +                    "description": "DMA burst length",
    +                    "offset": 8,
    +                    "size": 5
    +                  },
    +                  "DBA": {
    +                    "description": "DMA base address",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "DMAR": {
    +              "description": "DMA address for full transfer",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAB": {
    +                    "description": "DMA register for burst\n              accesses",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "NVIC": {
    +        "description": "Nested Vectored Interrupt\n      Controller",
    +        "children": {
    +          "registers": {
    +            "ISER0": {
    +              "description": "Interrupt Set-Enable Register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SETENA": {
    +                    "description": "SETENA",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ISER1": {
    +              "description": "Interrupt Set-Enable Register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SETENA": {
    +                    "description": "SETENA",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ISER2": {
    +              "description": "Interrupt Set-Enable Register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SETENA": {
    +                    "description": "SETENA",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICER0": {
    +              "description": "Interrupt Clear-Enable\n          Register",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLRENA": {
    +                    "description": "CLRENA",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICER1": {
    +              "description": "Interrupt Clear-Enable\n          Register",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLRENA": {
    +                    "description": "CLRENA",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICER2": {
    +              "description": "Interrupt Clear-Enable\n          Register",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLRENA": {
    +                    "description": "CLRENA",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ISPR0": {
    +              "description": "Interrupt Set-Pending Register",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SETPEND": {
    +                    "description": "SETPEND",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ISPR1": {
    +              "description": "Interrupt Set-Pending Register",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SETPEND": {
    +                    "description": "SETPEND",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ISPR2": {
    +              "description": "Interrupt Set-Pending Register",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SETPEND": {
    +                    "description": "SETPEND",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICPR0": {
    +              "description": "Interrupt Clear-Pending\n          Register",
    +              "offset": 384,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLRPEND": {
    +                    "description": "CLRPEND",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICPR1": {
    +              "description": "Interrupt Clear-Pending\n          Register",
    +              "offset": 388,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLRPEND": {
    +                    "description": "CLRPEND",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICPR2": {
    +              "description": "Interrupt Clear-Pending\n          Register",
    +              "offset": 392,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLRPEND": {
    +                    "description": "CLRPEND",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IABR0": {
    +              "description": "Interrupt Active Bit Register",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ACTIVE": {
    +                    "description": "ACTIVE",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IABR1": {
    +              "description": "Interrupt Active Bit Register",
    +              "offset": 516,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ACTIVE": {
    +                    "description": "ACTIVE",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IABR2": {
    +              "description": "Interrupt Active Bit Register",
    +              "offset": 520,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ACTIVE": {
    +                    "description": "ACTIVE",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IPR0": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR1": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR2": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR3": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 780,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR4": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 784,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR5": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 788,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR6": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 792,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR7": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 796,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR8": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 800,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR9": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 804,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR10": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 808,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR11": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 812,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR12": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 816,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR13": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 820,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR14": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 824,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR15": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 828,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR16": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 832,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR17": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 836,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR18": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 840,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR19": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 844,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR20": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 848,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "FMC": {
    +        "description": "Flexible memory controller",
    +        "children": {
    +          "registers": {
    +            "BCR1": {
    +              "description": "SRAM/NOR-Flash chip-select control register\n          1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 12496,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCLKEN": {
    +                    "description": "CCLKEN",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CBURSTRW": {
    +                    "description": "CBURSTRW",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "ASYNCWAIT": {
    +                    "description": "ASYNCWAIT",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EXTMOD": {
    +                    "description": "EXTMOD",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "WAITEN": {
    +                    "description": "WAITEN",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "WREN": {
    +                    "description": "WREN",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WAITCFG": {
    +                    "description": "WAITCFG",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "WAITPOL": {
    +                    "description": "WAITPOL",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BURSTEN": {
    +                    "description": "BURSTEN",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FACCEN": {
    +                    "description": "FACCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MWID": {
    +                    "description": "MWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "MTYP": {
    +                    "description": "MTYP",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MUXEN": {
    +                    "description": "MUXEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MBKEN": {
    +                    "description": "MBKEN",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BTR1": {
    +              "description": "SRAM/NOR-Flash chip-select timing register\n          1",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "BUSTURN": {
    +                    "description": "BUSTURN",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "BCR2": {
    +              "description": "SRAM/NOR-Flash chip-select control register\n          2",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 12496,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CBURSTRW": {
    +                    "description": "CBURSTRW",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "ASYNCWAIT": {
    +                    "description": "ASYNCWAIT",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EXTMOD": {
    +                    "description": "EXTMOD",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "WAITEN": {
    +                    "description": "WAITEN",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "WREN": {
    +                    "description": "WREN",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WAITCFG": {
    +                    "description": "WAITCFG",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "WRAPMOD": {
    +                    "description": "WRAPMOD",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "WAITPOL": {
    +                    "description": "WAITPOL",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BURSTEN": {
    +                    "description": "BURSTEN",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FACCEN": {
    +                    "description": "FACCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MWID": {
    +                    "description": "MWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "MTYP": {
    +                    "description": "MTYP",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MUXEN": {
    +                    "description": "MUXEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MBKEN": {
    +                    "description": "MBKEN",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BTR2": {
    +              "description": "SRAM/NOR-Flash chip-select timing register\n          2",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "BUSTURN": {
    +                    "description": "BUSTURN",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "BCR3": {
    +              "description": "SRAM/NOR-Flash chip-select control register\n          3",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 12496,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CBURSTRW": {
    +                    "description": "CBURSTRW",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "ASYNCWAIT": {
    +                    "description": "ASYNCWAIT",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EXTMOD": {
    +                    "description": "EXTMOD",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "WAITEN": {
    +                    "description": "WAITEN",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "WREN": {
    +                    "description": "WREN",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WAITCFG": {
    +                    "description": "WAITCFG",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "WRAPMOD": {
    +                    "description": "WRAPMOD",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "WAITPOL": {
    +                    "description": "WAITPOL",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BURSTEN": {
    +                    "description": "BURSTEN",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FACCEN": {
    +                    "description": "FACCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MWID": {
    +                    "description": "MWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "MTYP": {
    +                    "description": "MTYP",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MUXEN": {
    +                    "description": "MUXEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MBKEN": {
    +                    "description": "MBKEN",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BTR3": {
    +              "description": "SRAM/NOR-Flash chip-select timing register\n          3",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "BUSTURN": {
    +                    "description": "BUSTURN",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "BCR4": {
    +              "description": "SRAM/NOR-Flash chip-select control register\n          4",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 12496,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CBURSTRW": {
    +                    "description": "CBURSTRW",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "ASYNCWAIT": {
    +                    "description": "ASYNCWAIT",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EXTMOD": {
    +                    "description": "EXTMOD",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "WAITEN": {
    +                    "description": "WAITEN",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "WREN": {
    +                    "description": "WREN",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WAITCFG": {
    +                    "description": "WAITCFG",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "WRAPMOD": {
    +                    "description": "WRAPMOD",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "WAITPOL": {
    +                    "description": "WAITPOL",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BURSTEN": {
    +                    "description": "BURSTEN",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FACCEN": {
    +                    "description": "FACCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MWID": {
    +                    "description": "MWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "MTYP": {
    +                    "description": "MTYP",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MUXEN": {
    +                    "description": "MUXEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MBKEN": {
    +                    "description": "MBKEN",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BTR4": {
    +              "description": "SRAM/NOR-Flash chip-select timing register\n          4",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "BUSTURN": {
    +                    "description": "BUSTURN",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "PCR2": {
    +              "description": "PC Card/NAND Flash control register\n          2",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 24,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ECCPS": {
    +                    "description": "ECCPS",
    +                    "offset": 17,
    +                    "size": 3
    +                  },
    +                  "TAR": {
    +                    "description": "TAR",
    +                    "offset": 13,
    +                    "size": 4
    +                  },
    +                  "TCLR": {
    +                    "description": "TCLR",
    +                    "offset": 9,
    +                    "size": 4
    +                  },
    +                  "ECCEN": {
    +                    "description": "ECCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PWID": {
    +                    "description": "PWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "PTYP": {
    +                    "description": "PTYP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PBKEN": {
    +                    "description": "PBKEN",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PWAITEN": {
    +                    "description": "PWAITEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR2": {
    +              "description": "FIFO status and interrupt register\n          2",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 64,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEMPT": {
    +                    "description": "FEMPT",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IFEN": {
    +                    "description": "IFEN",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ILEN": {
    +                    "description": "ILEN",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IREN": {
    +                    "description": "IREN",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IFS": {
    +                    "description": "IFS",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ILS": {
    +                    "description": "ILS",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IRS": {
    +                    "description": "IRS",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PMEM2": {
    +              "description": "Common memory space timing register\n          2",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MEMHIZx": {
    +                    "description": "MEMHIZx",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "MEMHOLDx": {
    +                    "description": "MEMHOLDx",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "MEMWAITx": {
    +                    "description": "MEMWAITx",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "MEMSETx": {
    +                    "description": "MEMSETx",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "PATT2": {
    +              "description": "Attribute memory space timing register\n          2",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ATTHIZx": {
    +                    "description": "ATTHIZx",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "ATTHOLDx": {
    +                    "description": "ATTHOLDx",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "ATTWAITx": {
    +                    "description": "ATTWAITx",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ATTSETx": {
    +                    "description": "ATTSETx",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "ECCR2": {
    +              "description": "ECC result register 2",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ECCx": {
    +                    "description": "ECCx",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PCR3": {
    +              "description": "PC Card/NAND Flash control register\n          3",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 24,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ECCPS": {
    +                    "description": "ECCPS",
    +                    "offset": 17,
    +                    "size": 3
    +                  },
    +                  "TAR": {
    +                    "description": "TAR",
    +                    "offset": 13,
    +                    "size": 4
    +                  },
    +                  "TCLR": {
    +                    "description": "TCLR",
    +                    "offset": 9,
    +                    "size": 4
    +                  },
    +                  "ECCEN": {
    +                    "description": "ECCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PWID": {
    +                    "description": "PWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "PTYP": {
    +                    "description": "PTYP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PBKEN": {
    +                    "description": "PBKEN",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PWAITEN": {
    +                    "description": "PWAITEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR3": {
    +              "description": "FIFO status and interrupt register\n          3",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 64,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEMPT": {
    +                    "description": "FEMPT",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IFEN": {
    +                    "description": "IFEN",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ILEN": {
    +                    "description": "ILEN",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IREN": {
    +                    "description": "IREN",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IFS": {
    +                    "description": "IFS",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ILS": {
    +                    "description": "ILS",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IRS": {
    +                    "description": "IRS",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PMEM3": {
    +              "description": "Common memory space timing register\n          3",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MEMHIZx": {
    +                    "description": "MEMHIZx",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "MEMHOLDx": {
    +                    "description": "MEMHOLDx",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "MEMWAITx": {
    +                    "description": "MEMWAITx",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "MEMSETx": {
    +                    "description": "MEMSETx",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "PATT3": {
    +              "description": "Attribute memory space timing register\n          3",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ATTHIZx": {
    +                    "description": "ATTHIZx",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "ATTHOLDx": {
    +                    "description": "ATTHOLDx",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "ATTWAITx": {
    +                    "description": "ATTWAITx",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ATTSETx": {
    +                    "description": "ATTSETx",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "ECCR3": {
    +              "description": "ECC result register 3",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ECCx": {
    +                    "description": "ECCx",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PCR4": {
    +              "description": "PC Card/NAND Flash control register\n          4",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 24,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ECCPS": {
    +                    "description": "ECCPS",
    +                    "offset": 17,
    +                    "size": 3
    +                  },
    +                  "TAR": {
    +                    "description": "TAR",
    +                    "offset": 13,
    +                    "size": 4
    +                  },
    +                  "TCLR": {
    +                    "description": "TCLR",
    +                    "offset": 9,
    +                    "size": 4
    +                  },
    +                  "ECCEN": {
    +                    "description": "ECCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PWID": {
    +                    "description": "PWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "PTYP": {
    +                    "description": "PTYP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PBKEN": {
    +                    "description": "PBKEN",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PWAITEN": {
    +                    "description": "PWAITEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR4": {
    +              "description": "FIFO status and interrupt register\n          4",
    +              "offset": 164,
    +              "size": 32,
    +              "reset_value": 64,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEMPT": {
    +                    "description": "FEMPT",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IFEN": {
    +                    "description": "IFEN",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ILEN": {
    +                    "description": "ILEN",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IREN": {
    +                    "description": "IREN",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IFS": {
    +                    "description": "IFS",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ILS": {
    +                    "description": "ILS",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IRS": {
    +                    "description": "IRS",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PMEM4": {
    +              "description": "Common memory space timing register\n          4",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MEMHIZx": {
    +                    "description": "MEMHIZx",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "MEMHOLDx": {
    +                    "description": "MEMHOLDx",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "MEMWAITx": {
    +                    "description": "MEMWAITx",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "MEMSETx": {
    +                    "description": "MEMSETx",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "PATT4": {
    +              "description": "Attribute memory space timing register\n          4",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ATTHIZx": {
    +                    "description": "ATTHIZx",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "ATTHOLDx": {
    +                    "description": "ATTHOLDx",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "ATTWAITx": {
    +                    "description": "ATTWAITx",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ATTSETx": {
    +                    "description": "ATTSETx",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "PIO4": {
    +              "description": "I/O space timing register 4",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IOHIZx": {
    +                    "description": "IOHIZx",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "IOHOLDx": {
    +                    "description": "IOHOLDx",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IOWAITx": {
    +                    "description": "IOWAITx",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IOSETx": {
    +                    "description": "IOSETx",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "BWTR1": {
    +              "description": "SRAM/NOR-Flash write timing registers\n          1",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 268435455,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "BUSTURN": {
    +                    "description": "Bus turnaround phase\n              duration",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "BWTR2": {
    +              "description": "SRAM/NOR-Flash write timing registers\n          2",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 268435455,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "BUSTURN": {
    +                    "description": "Bus turnaround phase\n              duration",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "BWTR3": {
    +              "description": "SRAM/NOR-Flash write timing registers\n          3",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 268435455,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "BUSTURN": {
    +                    "description": "Bus turnaround phase\n              duration",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "BWTR4": {
    +              "description": "SRAM/NOR-Flash write timing registers\n          4",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 268435455,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "BUSTURN": {
    +                    "description": "Bus turnaround phase\n              duration",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIM15": {
    +        "description": "General purpose timers",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OPM": {
    +                    "description": "One-pulse mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CKD": {
    +                    "description": "Clock division",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "UIFREMAP": {
    +                    "description": "UIF status bit remapping",
    +                    "offset": 11,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCPC": {
    +                    "description": "Capture/compare preloaded\n              control",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CCUS": {
    +                    "description": "Capture/compare control update\n              selection",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CCDS": {
    +                    "description": "Capture/compare DMA\n              selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MMS": {
    +                    "description": "Master mode selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "TI1S": {
    +                    "description": "TI1 selection",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OIS1": {
    +                    "description": "Output Idle state 1",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "OIS1N": {
    +                    "description": "Output Idle state 1",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "OIS2": {
    +                    "description": "Output Idle state 2",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SMCR": {
    +              "description": "slave mode control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SMS": {
    +                    "description": "Slave mode selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "TS": {
    +                    "description": "Trigger selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "MSM": {
    +                    "description": "Master/Slave mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SMS_3": {
    +                    "description": "Slave mode selection bit 3",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CC1IE": {
    +                    "description": "Capture/Compare 1 interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC2IE": {
    +                    "description": "Capture/Compare 2 interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "COMIE": {
    +                    "description": "COM interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TIE": {
    +                    "description": "Trigger interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BIE": {
    +                    "description": "Break interrupt enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "UDE": {
    +                    "description": "Update DMA request enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CC1DE": {
    +                    "description": "Capture/Compare 1 DMA request\n              enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CC2DE": {
    +                    "description": "Capture/Compare 2 DMA request\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "COMDE": {
    +                    "description": "COM DMA request enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TDE": {
    +                    "description": "Trigger DMA request enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC2OF": {
    +                    "description": "Capture/compare 2 overcapture\n              flag",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1OF": {
    +                    "description": "Capture/Compare 1 overcapture\n              flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BIF": {
    +                    "description": "Break interrupt flag",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TIF": {
    +                    "description": "Trigger interrupt flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "COMIF": {
    +                    "description": "COM interrupt flag",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC2IF": {
    +                    "description": "Capture/Compare 2 interrupt\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IF": {
    +                    "description": "Capture/compare 1 interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "BG": {
    +                    "description": "Break generation",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TG": {
    +                    "description": "Trigger generation",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "COMG": {
    +                    "description": "Capture/Compare control update\n              generation",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC2G": {
    +                    "description": "Capture/compare 2\n              generation",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1G": {
    +                    "description": "Capture/compare 1\n              generation",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Output": {
    +              "description": "capture/compare mode register (output\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "OC1FE": {
    +                    "description": "Output Compare 1 fast\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OC1PE": {
    +                    "description": "Output Compare 1 preload\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC1M": {
    +                    "description": "Output Compare 1 mode",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/Compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC2FE": {
    +                    "description": "Output Compare 2 fast\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OC2PE": {
    +                    "description": "Output Compare 2 preload\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC2M": {
    +                    "description": "Output Compare 2 mode",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC1M_3": {
    +                    "description": "Output Compare 1 mode bit\n              3",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "OC2M_3": {
    +                    "description": "Output Compare 2 mode bit\n              3",
    +                    "offset": 24,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Input": {
    +              "description": "capture/compare mode register 1 (input\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC2F": {
    +                    "description": "Input capture 2 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC2PSC": {
    +                    "description": "Input capture 2 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/Compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC1F": {
    +                    "description": "Input capture 1 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "IC1PSC": {
    +                    "description": "Input capture 1 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCER": {
    +              "description": "capture/compare enable\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC2NP": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CC2P": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC2E": {
    +                    "description": "Capture/Compare 2 output\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC1NP": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC1NE": {
    +                    "description": "Capture/Compare 1 complementary output\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1P": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC1E": {
    +                    "description": "Capture/Compare 1 output\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "UIFCPY": {
    +                    "description": "UIF copy",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARR": {
    +                    "description": "Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "RCR": {
    +              "description": "repetition counter register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REP": {
    +                    "description": "Repetition counter value",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CCR1": {
    +              "description": "capture/compare register 1",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR1": {
    +                    "description": "Capture/Compare 1 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR2": {
    +              "description": "capture/compare register 2",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR2": {
    +                    "description": "Capture/Compare 2 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "BDTR": {
    +              "description": "break and dead-time register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MOE": {
    +                    "description": "Main output enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "AOE": {
    +                    "description": "Automatic output enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "BKP": {
    +                    "description": "Break polarity",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BKE": {
    +                    "description": "Break enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "OSSR": {
    +                    "description": "Off-state selection for Run\n              mode",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OSSI": {
    +                    "description": "Off-state selection for Idle\n              mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LOCK": {
    +                    "description": "Lock configuration",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "DTG": {
    +                    "description": "Dead-time generator setup",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "BKF": {
    +                    "description": "Break filter",
    +                    "offset": 16,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "DCR": {
    +              "description": "DMA control register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBL": {
    +                    "description": "DMA burst length",
    +                    "offset": 8,
    +                    "size": 5
    +                  },
    +                  "DBA": {
    +                    "description": "DMA base address",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "DMAR": {
    +              "description": "DMA address for full transfer",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAB": {
    +                    "description": "DMA register for burst\n              accesses",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIM16": {
    +        "description": "General-purpose-timers",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OPM": {
    +                    "description": "One-pulse mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CKD": {
    +                    "description": "Clock division",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "UIFREMAP": {
    +                    "description": "UIF status bit remapping",
    +                    "offset": 11,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OIS1N": {
    +                    "description": "Output Idle state 1",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "OIS1": {
    +                    "description": "Output Idle state 1",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CCDS": {
    +                    "description": "Capture/compare DMA\n              selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CCUS": {
    +                    "description": "Capture/compare control update\n              selection",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CCPC": {
    +                    "description": "Capture/compare preloaded\n              control",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CC1IE": {
    +                    "description": "Capture/Compare 1 interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "COMIE": {
    +                    "description": "COM interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TIE": {
    +                    "description": "Trigger interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BIE": {
    +                    "description": "Break interrupt enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "UDE": {
    +                    "description": "Update DMA request enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CC1DE": {
    +                    "description": "Capture/Compare 1 DMA request\n              enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "COMDE": {
    +                    "description": "COM DMA request enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TDE": {
    +                    "description": "Trigger DMA request enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC1OF": {
    +                    "description": "Capture/Compare 1 overcapture\n              flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BIF": {
    +                    "description": "Break interrupt flag",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TIF": {
    +                    "description": "Trigger interrupt flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "COMIF": {
    +                    "description": "COM interrupt flag",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC1IF": {
    +                    "description": "Capture/compare 1 interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "BG": {
    +                    "description": "Break generation",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TG": {
    +                    "description": "Trigger generation",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "COMG": {
    +                    "description": "Capture/Compare control update\n              generation",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC1G": {
    +                    "description": "Capture/compare 1\n              generation",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Output": {
    +              "description": "capture/compare mode register (output\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "OC1FE": {
    +                    "description": "Output Compare 1 fast\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OC1PE": {
    +                    "description": "Output Compare 1 preload\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC1M": {
    +                    "description": "Output Compare 1 mode",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC1M_3": {
    +                    "description": "Output Compare 1 mode",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Input": {
    +              "description": "capture/compare mode register 1 (input\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC1F": {
    +                    "description": "Input capture 1 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "IC1PSC": {
    +                    "description": "Input capture 1 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCER": {
    +              "description": "capture/compare enable\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC1NP": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC1NE": {
    +                    "description": "Capture/Compare 1 complementary output\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1P": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC1E": {
    +                    "description": "Capture/Compare 1 output\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "UIFCPY": {
    +                    "description": "UIF Copy",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARR": {
    +                    "description": "Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "RCR": {
    +              "description": "repetition counter register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REP": {
    +                    "description": "Repetition counter value",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CCR1": {
    +              "description": "capture/compare register 1",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR1": {
    +                    "description": "Capture/Compare 1 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "BDTR": {
    +              "description": "break and dead-time register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DTG": {
    +                    "description": "Dead-time generator setup",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "LOCK": {
    +                    "description": "Lock configuration",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OSSI": {
    +                    "description": "Off-state selection for Idle\n              mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OSSR": {
    +                    "description": "Off-state selection for Run\n              mode",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BKE": {
    +                    "description": "Break enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "BKP": {
    +                    "description": "Break polarity",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "AOE": {
    +                    "description": "Automatic output enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "MOE": {
    +                    "description": "Main output enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "BKF": {
    +                    "description": "Break filter",
    +                    "offset": 16,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "DCR": {
    +              "description": "DMA control register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBL": {
    +                    "description": "DMA burst length",
    +                    "offset": 8,
    +                    "size": 5
    +                  },
    +                  "DBA": {
    +                    "description": "DMA base address",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "DMAR": {
    +              "description": "DMA address for full transfer",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAB": {
    +                    "description": "DMA register for burst\n              accesses",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OR": {
    +              "description": "option register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            }
    +          }
    +        }
    +      },
    +      "TIM17": {
    +        "description": "General purpose timer",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OPM": {
    +                    "description": "One-pulse mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CKD": {
    +                    "description": "Clock division",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "UIFREMAP": {
    +                    "description": "UIF status bit remapping",
    +                    "offset": 11,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OIS1N": {
    +                    "description": "Output Idle state 1",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "OIS1": {
    +                    "description": "Output Idle state 1",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CCDS": {
    +                    "description": "Capture/compare DMA\n              selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CCUS": {
    +                    "description": "Capture/compare control update\n              selection",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CCPC": {
    +                    "description": "Capture/compare preloaded\n              control",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CC1IE": {
    +                    "description": "Capture/Compare 1 interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "COMIE": {
    +                    "description": "COM interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TIE": {
    +                    "description": "Trigger interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BIE": {
    +                    "description": "Break interrupt enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "UDE": {
    +                    "description": "Update DMA request enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CC1DE": {
    +                    "description": "Capture/Compare 1 DMA request\n              enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "COMDE": {
    +                    "description": "COM DMA request enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TDE": {
    +                    "description": "Trigger DMA request enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC1OF": {
    +                    "description": "Capture/Compare 1 overcapture\n              flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BIF": {
    +                    "description": "Break interrupt flag",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TIF": {
    +                    "description": "Trigger interrupt flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "COMIF": {
    +                    "description": "COM interrupt flag",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC1IF": {
    +                    "description": "Capture/compare 1 interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "BG": {
    +                    "description": "Break generation",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TG": {
    +                    "description": "Trigger generation",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "COMG": {
    +                    "description": "Capture/Compare control update\n              generation",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC1G": {
    +                    "description": "Capture/compare 1\n              generation",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Output": {
    +              "description": "capture/compare mode register (output\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "OC1FE": {
    +                    "description": "Output Compare 1 fast\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OC1PE": {
    +                    "description": "Output Compare 1 preload\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC1M": {
    +                    "description": "Output Compare 1 mode",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC1M_3": {
    +                    "description": "Output Compare 1 mode",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Input": {
    +              "description": "capture/compare mode register 1 (input\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC1F": {
    +                    "description": "Input capture 1 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "IC1PSC": {
    +                    "description": "Input capture 1 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCER": {
    +              "description": "capture/compare enable\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC1NP": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC1NE": {
    +                    "description": "Capture/Compare 1 complementary output\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1P": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC1E": {
    +                    "description": "Capture/Compare 1 output\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "UIFCPY": {
    +                    "description": "UIF Copy",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARR": {
    +                    "description": "Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "RCR": {
    +              "description": "repetition counter register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REP": {
    +                    "description": "Repetition counter value",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CCR1": {
    +              "description": "capture/compare register 1",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR1": {
    +                    "description": "Capture/Compare 1 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "BDTR": {
    +              "description": "break and dead-time register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DTG": {
    +                    "description": "Dead-time generator setup",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "LOCK": {
    +                    "description": "Lock configuration",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OSSI": {
    +                    "description": "Off-state selection for Idle\n              mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OSSR": {
    +                    "description": "Off-state selection for Run\n              mode",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BKE": {
    +                    "description": "Break enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "BKP": {
    +                    "description": "Break polarity",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "AOE": {
    +                    "description": "Automatic output enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "MOE": {
    +                    "description": "Main output enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "BKF": {
    +                    "description": "Break filter",
    +                    "offset": 16,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "DCR": {
    +              "description": "DMA control register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBL": {
    +                    "description": "DMA burst length",
    +                    "offset": 8,
    +                    "size": 5
    +                  },
    +                  "DBA": {
    +                    "description": "DMA base address",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "DMAR": {
    +              "description": "DMA address for full transfer",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAB": {
    +                    "description": "DMA register for burst\n              accesses",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "USART1": {
    +        "description": "Universal synchronous asynchronous receiver\n      transmitter",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "Control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EOBIE": {
    +                    "description": "End of Block interrupt\n              enable",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "RTOIE": {
    +                    "description": "Receiver timeout interrupt\n              enable",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "DEAT": {
    +                    "description": "Driver Enable assertion\n              time",
    +                    "offset": 21,
    +                    "size": 5
    +                  },
    +                  "DEDT": {
    +                    "description": "Driver Enable deassertion\n              time",
    +                    "offset": 16,
    +                    "size": 5
    +                  },
    +                  "OVER8": {
    +                    "description": "Oversampling mode",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "CMIE": {
    +                    "description": "Character match interrupt\n              enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "MME": {
    +                    "description": "Mute mode enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "M": {
    +                    "description": "Word length",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WAKE": {
    +                    "description": "Receiver wakeup method",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "PCE": {
    +                    "description": "Parity control enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PS": {
    +                    "description": "Parity selection",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PEIE": {
    +                    "description": "PE interrupt enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TXEIE": {
    +                    "description": "interrupt enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transmission complete interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RXNEIE": {
    +                    "description": "RXNE interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IDLEIE": {
    +                    "description": "IDLE interrupt enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TE": {
    +                    "description": "Transmitter enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RE": {
    +                    "description": "Receiver enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UESM": {
    +                    "description": "USART enable in Stop mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UE": {
    +                    "description": "USART enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "Control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADD4": {
    +                    "description": "Address of the USART node",
    +                    "offset": 28,
    +                    "size": 4
    +                  },
    +                  "ADD0": {
    +                    "description": "Address of the USART node",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "RTOEN": {
    +                    "description": "Receiver timeout enable",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "ABRMOD": {
    +                    "description": "Auto baud rate mode",
    +                    "offset": 21,
    +                    "size": 2
    +                  },
    +                  "ABREN": {
    +                    "description": "Auto baud rate enable",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "MSBFIRST": {
    +                    "description": "Most significant bit first",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DATAINV": {
    +                    "description": "Binary data inversion",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TXINV": {
    +                    "description": "TX pin active level\n              inversion",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "RXINV": {
    +                    "description": "RX pin active level\n              inversion",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SWAP": {
    +                    "description": "Swap TX/RX pins",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LINEN": {
    +                    "description": "LIN mode enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "STOP": {
    +                    "description": "STOP bits",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "CLKEN": {
    +                    "description": "Clock enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CPOL": {
    +                    "description": "Clock polarity",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CPHA": {
    +                    "description": "Clock phase",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "LBCL": {
    +                    "description": "Last bit clock pulse",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LBDIE": {
    +                    "description": "LIN break detection interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "LBDL": {
    +                    "description": "LIN break detection length",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ADDM7": {
    +                    "description": "7-bit Address Detection/4-bit Address\n              Detection",
    +                    "offset": 4,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR3": {
    +              "description": "Control register 3",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WUFIE": {
    +                    "description": "Wakeup from Stop mode interrupt\n              enable",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "WUS": {
    +                    "description": "Wakeup from Stop mode interrupt flag\n              selection",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "SCARCNT": {
    +                    "description": "Smartcard auto-retry count",
    +                    "offset": 17,
    +                    "size": 3
    +                  },
    +                  "DEP": {
    +                    "description": "Driver enable polarity\n              selection",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "DEM": {
    +                    "description": "Driver enable mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "DDRE": {
    +                    "description": "DMA Disable on Reception\n              Error",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "OVRDIS": {
    +                    "description": "Overrun Disable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ONEBIT": {
    +                    "description": "One sample bit method\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CTSIE": {
    +                    "description": "CTS interrupt enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CTSE": {
    +                    "description": "CTS enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RTSE": {
    +                    "description": "RTS enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DMAT": {
    +                    "description": "DMA enable transmitter",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "DMAR": {
    +                    "description": "DMA enable receiver",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SCEN": {
    +                    "description": "Smartcard mode enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NACK": {
    +                    "description": "Smartcard NACK enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "HDSEL": {
    +                    "description": "Half-duplex selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IRLP": {
    +                    "description": "IrDA low-power",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IREN": {
    +                    "description": "IrDA mode enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EIE": {
    +                    "description": "Error interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BRR": {
    +              "description": "Baud rate register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DIV_Mantissa": {
    +                    "description": "mantissa of USARTDIV",
    +                    "offset": 4,
    +                    "size": 12
    +                  },
    +                  "DIV_Fraction": {
    +                    "description": "fraction of USARTDIV",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "GTPR": {
    +              "description": "Guard time and prescaler\n          register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "GT": {
    +                    "description": "Guard time value",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "RTOR": {
    +              "description": "Receiver timeout register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BLEN": {
    +                    "description": "Block Length",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "RTO": {
    +                    "description": "Receiver timeout value",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "RQR": {
    +              "description": "Request register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXFRQ": {
    +                    "description": "Transmit data flush\n              request",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RXFRQ": {
    +                    "description": "Receive data flush request",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MMRQ": {
    +                    "description": "Mute mode request",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SBKRQ": {
    +                    "description": "Send break request",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ABRRQ": {
    +                    "description": "Auto baud rate request",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ISR": {
    +              "description": "Interrupt & status\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 192,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "REACK": {
    +                    "description": "Receive enable acknowledge\n              flag",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "TEACK": {
    +                    "description": "Transmit enable acknowledge\n              flag",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "WUF": {
    +                    "description": "Wakeup from Stop mode flag",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "RWU": {
    +                    "description": "Receiver wakeup from Mute\n              mode",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "SBKF": {
    +                    "description": "Send break flag",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "CMF": {
    +                    "description": "character match flag",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "BUSY": {
    +                    "description": "Busy flag",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "ABRF": {
    +                    "description": "Auto baud rate flag",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ABRE": {
    +                    "description": "Auto baud rate error",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EOBF": {
    +                    "description": "End of block flag",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "RTOF": {
    +                    "description": "Receiver timeout",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CTS": {
    +                    "description": "CTS flag",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CTSIF": {
    +                    "description": "CTS interrupt flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "LBDF": {
    +                    "description": "LIN break detection flag",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TXE": {
    +                    "description": "Transmit data register\n              empty",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TC": {
    +                    "description": "Transmission complete",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RXNE": {
    +                    "description": "Read data register not\n              empty",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IDLE": {
    +                    "description": "Idle line detected",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ORE": {
    +                    "description": "Overrun error",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NF": {
    +                    "description": "Noise detected flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FE": {
    +                    "description": "Framing error",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PE": {
    +                    "description": "Parity error",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ICR": {
    +              "description": "Interrupt flag clear register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WUCF": {
    +                    "description": "Wakeup from Stop mode clear\n              flag",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CMCF": {
    +                    "description": "Character match clear flag",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EOBCF": {
    +                    "description": "End of timeout clear flag",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "RTOCF": {
    +                    "description": "Receiver timeout clear\n              flag",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CTSCF": {
    +                    "description": "CTS clear flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "LBDCF": {
    +                    "description": "LIN break detection clear\n              flag",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TCCF": {
    +                    "description": "Transmission complete clear\n              flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "IDLECF": {
    +                    "description": "Idle line detected clear\n              flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ORECF": {
    +                    "description": "Overrun error clear flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NCF": {
    +                    "description": "Noise detected clear flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FECF": {
    +                    "description": "Framing error clear flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PECF": {
    +                    "description": "Parity error clear flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RDR": {
    +              "description": "Receive data register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RDR": {
    +                    "description": "Receive data value",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "TDR": {
    +              "description": "Transmit data register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TDR": {
    +                    "description": "Transmit data value",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SYSCFG_COMP_OPAMP": {
    +        "description": "System configuration controller _Comparator and\n      Operational amplifier",
    +        "children": {
    +          "registers": {
    +            "SYSCFG_CFGR1": {
    +              "description": "configuration register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MEM_MODE": {
    +                    "description": "Memory mapping selection\n              bits",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "USB_IT_RMP": {
    +                    "description": "USB interrupt remap",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TIM1_ITR_RMP": {
    +                    "description": "Timer 1 ITR3 selection",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DAC_TRIG_RMP": {
    +                    "description": "DAC trigger remap (when TSEL =\n              001)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ADC24_DMA_RMP": {
    +                    "description": "ADC24 DMA remapping bit",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TIM16_DMA_RMP": {
    +                    "description": "TIM16 DMA request remapping\n              bit",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TIM17_DMA_RMP": {
    +                    "description": "TIM17 DMA request remapping\n              bit",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TIM6_DAC1_DMA_RMP": {
    +                    "description": "TIM6 and DAC1 DMA request remapping\n              bit",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TIM7_DAC2_DMA_RMP": {
    +                    "description": "TIM7 and DAC2 DMA request remapping\n              bit",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "I2C_PB6_FM": {
    +                    "description": "Fast Mode Plus (FM+) driving capability\n              activation bits.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "I2C_PB7_FM": {
    +                    "description": "Fast Mode Plus (FM+) driving capability\n              activation bits.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "I2C_PB8_FM": {
    +                    "description": "Fast Mode Plus (FM+) driving capability\n              activation bits.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "I2C_PB9_FM": {
    +                    "description": "Fast Mode Plus (FM+) driving capability\n              activation bits.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "I2C1_FM": {
    +                    "description": "I2C1 Fast Mode Plus",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "I2C2_FM": {
    +                    "description": "I2C2 Fast Mode Plus",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "ENCODER_MODE": {
    +                    "description": "Encoder mode",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "FPU_IT": {
    +                    "description": "Interrupt enable bits from\n              FPU",
    +                    "offset": 26,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "SYSCFG_EXTICR1": {
    +              "description": "external interrupt configuration register\n          1",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXTI3": {
    +                    "description": "EXTI 3 configuration bits",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "EXTI2": {
    +                    "description": "EXTI 2 configuration bits",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "EXTI1": {
    +                    "description": "EXTI 1 configuration bits",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "EXTI0": {
    +                    "description": "EXTI 0 configuration bits",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "SYSCFG_EXTICR2": {
    +              "description": "external interrupt configuration register\n          2",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXTI7": {
    +                    "description": "EXTI 7 configuration bits",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "EXTI6": {
    +                    "description": "EXTI 6 configuration bits",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "EXTI5": {
    +                    "description": "EXTI 5 configuration bits",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "EXTI4": {
    +                    "description": "EXTI 4 configuration bits",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "SYSCFG_EXTICR3": {
    +              "description": "external interrupt configuration register\n          3",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXTI11": {
    +                    "description": "EXTI 11 configuration bits",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "EXTI10": {
    +                    "description": "EXTI 10 configuration bits",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "EXTI9": {
    +                    "description": "EXTI 9 configuration bits",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "EXTI8": {
    +                    "description": "EXTI 8 configuration bits",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "SYSCFG_EXTICR4": {
    +              "description": "external interrupt configuration register\n          4",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXTI15": {
    +                    "description": "EXTI 15 configuration bits",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "EXTI14": {
    +                    "description": "EXTI 14 configuration bits",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "EXTI13": {
    +                    "description": "EXTI 13 configuration bits",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "EXTI12": {
    +                    "description": "EXTI 12 configuration bits",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "SYSCFG_CFGR2": {
    +              "description": "configuration register 2",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LOCUP_LOCK": {
    +                    "description": "Cortex-M0 LOCKUP bit enable\n              bit",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SRAM_PARITY_LOCK": {
    +                    "description": "SRAM parity lock bit",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PVD_LOCK": {
    +                    "description": "PVD lock enable bit",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "BYP_ADD_PAR": {
    +                    "description": "Bypass address bit 29 in parity\n              calculation",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SRAM_PEF": {
    +                    "description": "SRAM parity flag",
    +                    "offset": 8,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SYSCFG_RCR": {
    +              "description": "CCM SRAM protection register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PAGE0_WP": {
    +                    "description": "CCM SRAM page write protection\n              bit",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PAGE1_WP": {
    +                    "description": "CCM SRAM page write protection\n              bit",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PAGE2_WP": {
    +                    "description": "CCM SRAM page write protection\n              bit",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PAGE3_WP": {
    +                    "description": "CCM SRAM page write protection\n              bit",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PAGE4_WP": {
    +                    "description": "CCM SRAM page write protection\n              bit",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "PAGE5_WP": {
    +                    "description": "CCM SRAM page write protection\n              bit",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PAGE6_WP": {
    +                    "description": "CCM SRAM page write protection\n              bit",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PAGE7_WP": {
    +                    "description": "CCM SRAM page write protection\n              bit",
    +                    "offset": 7,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "COMP1_CSR": {
    +              "description": "control and status register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMP1EN": {
    +                    "description": "Comparator 1 enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "COMP1_INP_DAC": {
    +                    "description": "COMP1_INP_DAC",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "COMP1MODE": {
    +                    "description": "Comparator 1 mode",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "COMP1INSEL": {
    +                    "description": "Comparator 1 inverting input\n              selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "COMP1_OUT_SEL": {
    +                    "description": "Comparator 1 output\n              selection",
    +                    "offset": 10,
    +                    "size": 4
    +                  },
    +                  "COMP1POL": {
    +                    "description": "Comparator 1 output\n              polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "COMP1HYST": {
    +                    "description": "Comparator 1 hysteresis",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "COMP1_BLANKING": {
    +                    "description": "Comparator 1 blanking\n              source",
    +                    "offset": 18,
    +                    "size": 3
    +                  },
    +                  "COMP1OUT": {
    +                    "description": "Comparator 1 output",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "COMP1LOCK": {
    +                    "description": "Comparator 1 lock",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "COMP2_CSR": {
    +              "description": "control and status register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMP2EN": {
    +                    "description": "Comparator 2 enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "COMP2MODE": {
    +                    "description": "Comparator 2 mode",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "COMP2INSEL": {
    +                    "description": "Comparator 2 inverting input\n              selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "COMP2INPSEL": {
    +                    "description": "Comparator 2 non inverted input\n              selection",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "COMP2INMSEL": {
    +                    "description": "Comparator 1inverting input\n              selection",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "COMP2_OUT_SEL": {
    +                    "description": "Comparator 2 output\n              selection",
    +                    "offset": 10,
    +                    "size": 4
    +                  },
    +                  "COMP2POL": {
    +                    "description": "Comparator 2 output\n              polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "COMP2HYST": {
    +                    "description": "Comparator 2 hysteresis",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "COMP2_BLANKING": {
    +                    "description": "Comparator 2 blanking\n              source",
    +                    "offset": 18,
    +                    "size": 3
    +                  },
    +                  "COMP2LOCK": {
    +                    "description": "Comparator 2 lock",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "COMP3_CSR": {
    +              "description": "control and status register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMP3EN": {
    +                    "description": "Comparator 3 enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "COMP3MODE": {
    +                    "description": "Comparator 3 mode",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "COMP3INSEL": {
    +                    "description": "Comparator 3 inverting input\n              selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "COMP3INPSEL": {
    +                    "description": "Comparator 3 non inverted input\n              selection",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "COMP3_OUT_SEL": {
    +                    "description": "Comparator 3 output\n              selection",
    +                    "offset": 10,
    +                    "size": 4
    +                  },
    +                  "COMP3POL": {
    +                    "description": "Comparator 3 output\n              polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "COMP3HYST": {
    +                    "description": "Comparator 3 hysteresis",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "COMP3_BLANKING": {
    +                    "description": "Comparator 3 blanking\n              source",
    +                    "offset": 18,
    +                    "size": 3
    +                  },
    +                  "COMP3OUT": {
    +                    "description": "Comparator 3 output",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "COMP3LOCK": {
    +                    "description": "Comparator 3 lock",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "COMP4_CSR": {
    +              "description": "control and status register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMP4EN": {
    +                    "description": "Comparator 4 enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "COMP4MODE": {
    +                    "description": "Comparator 4 mode",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "COMP4INSEL": {
    +                    "description": "Comparator 4 inverting input\n              selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "COMP4INPSEL": {
    +                    "description": "Comparator 4 non inverted input\n              selection",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "COM4WINMODE": {
    +                    "description": "Comparator 4 window mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "COMP4_OUT_SEL": {
    +                    "description": "Comparator 4 output\n              selection",
    +                    "offset": 10,
    +                    "size": 4
    +                  },
    +                  "COMP4POL": {
    +                    "description": "Comparator 4 output\n              polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "COMP4HYST": {
    +                    "description": "Comparator 4 hysteresis",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "COMP4_BLANKING": {
    +                    "description": "Comparator 4 blanking\n              source",
    +                    "offset": 18,
    +                    "size": 3
    +                  },
    +                  "COMP4OUT": {
    +                    "description": "Comparator 4 output",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "COMP4LOCK": {
    +                    "description": "Comparator 4 lock",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "COMP5_CSR": {
    +              "description": "control and status register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMP5EN": {
    +                    "description": "Comparator 5 enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "COMP5MODE": {
    +                    "description": "Comparator 5 mode",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "COMP5INSEL": {
    +                    "description": "Comparator 5 inverting input\n              selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "COMP5INPSEL": {
    +                    "description": "Comparator 5 non inverted input\n              selection",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "COMP5_OUT_SEL": {
    +                    "description": "Comparator 5 output\n              selection",
    +                    "offset": 10,
    +                    "size": 4
    +                  },
    +                  "COMP5POL": {
    +                    "description": "Comparator 5 output\n              polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "COMP5HYST": {
    +                    "description": "Comparator 5 hysteresis",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "COMP5_BLANKING": {
    +                    "description": "Comparator 5 blanking\n              source",
    +                    "offset": 18,
    +                    "size": 3
    +                  },
    +                  "COMP5OUT": {
    +                    "description": "Comparator51 output",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "COMP5LOCK": {
    +                    "description": "Comparator 5 lock",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "COMP6_CSR": {
    +              "description": "control and status register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMP6EN": {
    +                    "description": "Comparator 6 enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "COMP6MODE": {
    +                    "description": "Comparator 6 mode",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "COMP6INSEL": {
    +                    "description": "Comparator 6 inverting input\n              selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "COMP6INPSEL": {
    +                    "description": "Comparator 6 non inverted input\n              selection",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "COM6WINMODE": {
    +                    "description": "Comparator 6 window mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "COMP6_OUT_SEL": {
    +                    "description": "Comparator 6 output\n              selection",
    +                    "offset": 10,
    +                    "size": 4
    +                  },
    +                  "COMP6POL": {
    +                    "description": "Comparator 6 output\n              polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "COMP6HYST": {
    +                    "description": "Comparator 6 hysteresis",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "COMP6_BLANKING": {
    +                    "description": "Comparator 6 blanking\n              source",
    +                    "offset": 18,
    +                    "size": 3
    +                  },
    +                  "COMP6OUT": {
    +                    "description": "Comparator 6 output",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "COMP6LOCK": {
    +                    "description": "Comparator 6 lock",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "COMP7_CSR": {
    +              "description": "control and status register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMP7EN": {
    +                    "description": "Comparator 7 enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "COMP7MODE": {
    +                    "description": "Comparator 7 mode",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "COMP7INSEL": {
    +                    "description": "Comparator 7 inverting input\n              selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "COMP7INPSEL": {
    +                    "description": "Comparator 7 non inverted input\n              selection",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "COMP7_OUT_SEL": {
    +                    "description": "Comparator 7 output\n              selection",
    +                    "offset": 10,
    +                    "size": 4
    +                  },
    +                  "COMP7POL": {
    +                    "description": "Comparator 7 output\n              polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "COMP7HYST": {
    +                    "description": "Comparator 7 hysteresis",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "COMP7_BLANKING": {
    +                    "description": "Comparator 7 blanking\n              source",
    +                    "offset": 18,
    +                    "size": 3
    +                  },
    +                  "COMP7OUT": {
    +                    "description": "Comparator 7 output",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "COMP7LOCK": {
    +                    "description": "Comparator 7 lock",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OPAMP1_CSR": {
    +              "description": "control register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OPAMP1_EN": {
    +                    "description": "OPAMP1 enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FORCE_VP": {
    +                    "description": "FORCE_VP",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "VP_SEL": {
    +                    "description": "OPAMP1 Non inverting input\n              selection",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "VM_SEL": {
    +                    "description": "OPAMP1 inverting input\n              selection",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "TCM_EN": {
    +                    "description": "Timer controlled Mux mode\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "VMS_SEL": {
    +                    "description": "OPAMP1 inverting input secondary\n              selection",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "VPS_SEL": {
    +                    "description": "OPAMP1 Non inverting input secondary\n              selection",
    +                    "offset": 9,
    +                    "size": 2
    +                  },
    +                  "CALON": {
    +                    "description": "Calibration mode enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CALSEL": {
    +                    "description": "Calibration selection",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "PGA_GAIN": {
    +                    "description": "Gain in PGA mode",
    +                    "offset": 14,
    +                    "size": 4
    +                  },
    +                  "USER_TRIM": {
    +                    "description": "User trimming enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TRIMOFFSETP": {
    +                    "description": "Offset trimming value\n              (PMOS)",
    +                    "offset": 19,
    +                    "size": 5
    +                  },
    +                  "TRIMOFFSETN": {
    +                    "description": "Offset trimming value\n              (NMOS)",
    +                    "offset": 24,
    +                    "size": 5
    +                  },
    +                  "TSTREF": {
    +                    "description": "TSTREF",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "OUTCAL": {
    +                    "description": "OPAMP 1 ouput status flag",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LOCK": {
    +                    "description": "OPAMP 1 lock",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OPAMP2_CSR": {
    +              "description": "control register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OPAMP2EN": {
    +                    "description": "OPAMP2 enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FORCE_VP": {
    +                    "description": "FORCE_VP",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "VP_SEL": {
    +                    "description": "OPAMP2 Non inverting input\n              selection",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "VM_SEL": {
    +                    "description": "OPAMP2 inverting input\n              selection",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "TCM_EN": {
    +                    "description": "Timer controlled Mux mode\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "VMS_SEL": {
    +                    "description": "OPAMP2 inverting input secondary\n              selection",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "VPS_SEL": {
    +                    "description": "OPAMP2 Non inverting input secondary\n              selection",
    +                    "offset": 9,
    +                    "size": 2
    +                  },
    +                  "CALON": {
    +                    "description": "Calibration mode enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CAL_SEL": {
    +                    "description": "Calibration selection",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "PGA_GAIN": {
    +                    "description": "Gain in PGA mode",
    +                    "offset": 14,
    +                    "size": 4
    +                  },
    +                  "USER_TRIM": {
    +                    "description": "User trimming enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TRIMOFFSETP": {
    +                    "description": "Offset trimming value\n              (PMOS)",
    +                    "offset": 19,
    +                    "size": 5
    +                  },
    +                  "TRIMOFFSETN": {
    +                    "description": "Offset trimming value\n              (NMOS)",
    +                    "offset": 24,
    +                    "size": 5
    +                  },
    +                  "TSTREF": {
    +                    "description": "TSTREF",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "OUTCAL": {
    +                    "description": "OPAMP 2 ouput status flag",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LOCK": {
    +                    "description": "OPAMP 2 lock",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OPAMP3_CSR": {
    +              "description": "control register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OPAMP3EN": {
    +                    "description": "OPAMP3 enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FORCE_VP": {
    +                    "description": "FORCE_VP",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "VP_SEL": {
    +                    "description": "OPAMP3 Non inverting input\n              selection",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "VM_SEL": {
    +                    "description": "OPAMP3 inverting input\n              selection",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "TCM_EN": {
    +                    "description": "Timer controlled Mux mode\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "VMS_SEL": {
    +                    "description": "OPAMP3 inverting input secondary\n              selection",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "VPS_SEL": {
    +                    "description": "OPAMP3 Non inverting input secondary\n              selection",
    +                    "offset": 9,
    +                    "size": 2
    +                  },
    +                  "CALON": {
    +                    "description": "Calibration mode enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CALSEL": {
    +                    "description": "Calibration selection",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "PGA_GAIN": {
    +                    "description": "Gain in PGA mode",
    +                    "offset": 14,
    +                    "size": 4
    +                  },
    +                  "USER_TRIM": {
    +                    "description": "User trimming enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TRIMOFFSETP": {
    +                    "description": "Offset trimming value\n              (PMOS)",
    +                    "offset": 19,
    +                    "size": 5
    +                  },
    +                  "TRIMOFFSETN": {
    +                    "description": "Offset trimming value\n              (NMOS)",
    +                    "offset": 24,
    +                    "size": 5
    +                  },
    +                  "TSTREF": {
    +                    "description": "TSTREF",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "OUTCAL": {
    +                    "description": "OPAMP 3 ouput status flag",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LOCK": {
    +                    "description": "OPAMP 3 lock",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OPAMP4_CSR": {
    +              "description": "control register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OPAMP4EN": {
    +                    "description": "OPAMP4 enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FORCE_VP": {
    +                    "description": "FORCE_VP",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "VP_SEL": {
    +                    "description": "OPAMP4 Non inverting input\n              selection",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "VM_SEL": {
    +                    "description": "OPAMP4 inverting input\n              selection",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "TCM_EN": {
    +                    "description": "Timer controlled Mux mode\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "VMS_SEL": {
    +                    "description": "OPAMP4 inverting input secondary\n              selection",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "VPS_SEL": {
    +                    "description": "OPAMP4 Non inverting input secondary\n              selection",
    +                    "offset": 9,
    +                    "size": 2
    +                  },
    +                  "CALON": {
    +                    "description": "Calibration mode enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CALSEL": {
    +                    "description": "Calibration selection",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "PGA_GAIN": {
    +                    "description": "Gain in PGA mode",
    +                    "offset": 14,
    +                    "size": 4
    +                  },
    +                  "USER_TRIM": {
    +                    "description": "User trimming enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TRIMOFFSETP": {
    +                    "description": "Offset trimming value\n              (PMOS)",
    +                    "offset": 19,
    +                    "size": 5
    +                  },
    +                  "TRIMOFFSETN": {
    +                    "description": "Offset trimming value\n              (NMOS)",
    +                    "offset": 24,
    +                    "size": 5
    +                  },
    +                  "TSTREF": {
    +                    "description": "TSTREF",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "OUTCAL": {
    +                    "description": "OPAMP 4 ouput status flag",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LOCK": {
    +                    "description": "OPAMP 4 lock",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "IWDG": {
    +        "description": "Independent watchdog",
    +        "children": {
    +          "registers": {
    +            "KR": {
    +              "description": "Key register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "KEY": {
    +                    "description": "Key value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PR": {
    +              "description": "Prescaler register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PR": {
    +                    "description": "Prescaler divider",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "RLR": {
    +              "description": "Reload register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 4095,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RL": {
    +                    "description": "Watchdog counter reload\n              value",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "Status register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "PVU": {
    +                    "description": "Watchdog prescaler value\n              update",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RVU": {
    +                    "description": "Watchdog counter reload value\n              update",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "WVU": {
    +                    "description": "Watchdog counter window value\n              update",
    +                    "offset": 2,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "WINR": {
    +              "description": "Window register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 4095,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WIN": {
    +                    "description": "Watchdog counter window\n              value",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "ADC1_2": {
    +        "description": "Analog-to-Digital Converter",
    +        "children": {
    +          "registers": {
    +            "CSR": {
    +              "description": "ADC Common status register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ADDRDY_MST": {
    +                    "description": "ADDRDY_MST",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EOSMP_MST": {
    +                    "description": "EOSMP_MST",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EOC_MST": {
    +                    "description": "EOC_MST",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EOS_MST": {
    +                    "description": "EOS_MST",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OVR_MST": {
    +                    "description": "OVR_MST",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "JEOC_MST": {
    +                    "description": "JEOC_MST",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "JEOS_MST": {
    +                    "description": "JEOS_MST",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "AWD1_MST": {
    +                    "description": "AWD1_MST",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "AWD2_MST": {
    +                    "description": "AWD2_MST",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "AWD3_MST": {
    +                    "description": "AWD3_MST",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "JQOVF_MST": {
    +                    "description": "JQOVF_MST",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ADRDY_SLV": {
    +                    "description": "ADRDY_SLV",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EOSMP_SLV": {
    +                    "description": "EOSMP_SLV",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EOC_SLV": {
    +                    "description": "End of regular conversion of the slave\n              ADC",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "EOS_SLV": {
    +                    "description": "End of regular sequence flag of the\n              slave ADC",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "OVR_SLV": {
    +                    "description": "Overrun flag of the slave\n              ADC",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "JEOC_SLV": {
    +                    "description": "End of injected conversion flag of the\n              slave ADC",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "JEOS_SLV": {
    +                    "description": "End of injected sequence flag of the\n              slave ADC",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "AWD1_SLV": {
    +                    "description": "Analog watchdog 1 flag of the slave\n              ADC",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "AWD2_SLV": {
    +                    "description": "Analog watchdog 2 flag of the slave\n              ADC",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "AWD3_SLV": {
    +                    "description": "Analog watchdog 3 flag of the slave\n              ADC",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "JQOVF_SLV": {
    +                    "description": "Injected Context Queue Overflow flag of\n              the slave ADC",
    +                    "offset": 26,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCR": {
    +              "description": "ADC common control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MULT": {
    +                    "description": "Multi ADC mode selection",
    +                    "offset": 0,
    +                    "size": 5
    +                  },
    +                  "DELAY": {
    +                    "description": "Delay between 2 sampling\n              phases",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "DMACFG": {
    +                    "description": "DMA configuration (for multi-ADC\n              mode)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "MDMA": {
    +                    "description": "Direct memory access mode for multi ADC\n              mode",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "CKMODE": {
    +                    "description": "ADC clock mode",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "VREFEN": {
    +                    "description": "VREFINT enable",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "TSEN": {
    +                    "description": "Temperature sensor enable",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "VBATEN": {
    +                    "description": "VBAT enable",
    +                    "offset": 24,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CDR": {
    +              "description": "ADC common regular data register for dual\n          and triple modes",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RDATA_SLV": {
    +                    "description": "Regular data of the slave\n              ADC",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "RDATA_MST": {
    +                    "description": "Regular data of the master\n              ADC",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "WWDG": {
    +        "description": "Window watchdog",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "Control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 127,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "T": {
    +                    "description": "7-bit counter",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "WDGA": {
    +                    "description": "Activation bit",
    +                    "offset": 7,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CFR": {
    +              "description": "Configuration register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 127,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EWI": {
    +                    "description": "Early wakeup interrupt",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "WDGTB": {
    +                    "description": "Timer base",
    +                    "offset": 7,
    +                    "size": 2
    +                  },
    +                  "W": {
    +                    "description": "7-bit window value",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "Status register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EWIF": {
    +                    "description": "Early wakeup interrupt\n              flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SPI1": {
    +        "description": "Serial peripheral interface/Inter-IC\n      sound",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BIDIMODE": {
    +                    "description": "Bidirectional data mode\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "BIDIOE": {
    +                    "description": "Output enable in bidirectional\n              mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CRCEN": {
    +                    "description": "Hardware CRC calculation\n              enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CRCNEXT": {
    +                    "description": "CRC transfer next",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CRCL": {
    +                    "description": "CRC length",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "RXONLY": {
    +                    "description": "Receive only",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SSM": {
    +                    "description": "Software slave management",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SSI": {
    +                    "description": "Internal slave select",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LSBFIRST": {
    +                    "description": "Frame format",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SPE": {
    +                    "description": "SPI enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BR": {
    +                    "description": "Baud rate control",
    +                    "offset": 3,
    +                    "size": 3
    +                  },
    +                  "MSTR": {
    +                    "description": "Master selection",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CPOL": {
    +                    "description": "Clock polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CPHA": {
    +                    "description": "Clock phase",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXDMAEN": {
    +                    "description": "Rx buffer DMA enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TXDMAEN": {
    +                    "description": "Tx buffer DMA enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SSOE": {
    +                    "description": "SS output enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "NSSP": {
    +                    "description": "NSS pulse management",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FRF": {
    +                    "description": "Frame format",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "Error interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RXNEIE": {
    +                    "description": "RX buffer not empty interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXEIE": {
    +                    "description": "Tx buffer empty interrupt\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "DS": {
    +                    "description": "Data size",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "FRXTH": {
    +                    "description": "FIFO reception threshold",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "LDMA_RX": {
    +                    "description": "Last DMA transfer for\n              reception",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "LDMA_TX": {
    +                    "description": "Last DMA transfer for\n              transmission",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 2,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXNE": {
    +                    "description": "Receive buffer not empty",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXE": {
    +                    "description": "Transmit buffer empty",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CHSIDE": {
    +                    "description": "Channel side",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "UDR": {
    +                    "description": "Underrun flag",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CRCERR": {
    +                    "description": "CRC error flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "MODF": {
    +                    "description": "Mode fault",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OVR": {
    +                    "description": "Overrun flag",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BSY": {
    +                    "description": "Busy flag",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TIFRFE": {
    +                    "description": "TI frame format error",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FRLVL": {
    +                    "description": "FIFO reception level",
    +                    "offset": 9,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "FTLVL": {
    +                    "description": "FIFO transmission level",
    +                    "offset": 11,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "data register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DR": {
    +                    "description": "Data register",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CRCPR": {
    +              "description": "CRC polynomial register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 7,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CRCPOLY": {
    +                    "description": "CRC polynomial register",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "RXCRCR": {
    +              "description": "RX CRC register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RxCRC": {
    +                    "description": "Rx CRC register",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "TXCRCR": {
    +              "description": "TX CRC register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TxCRC": {
    +                    "description": "Tx CRC register",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "I2SCFGR": {
    +              "description": "I2S configuration register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "I2SMOD": {
    +                    "description": "I2S mode selection",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "I2SE": {
    +                    "description": "I2S Enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "I2SCFG": {
    +                    "description": "I2S configuration mode",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "PCMSYNC": {
    +                    "description": "PCM frame synchronization",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "I2SSTD": {
    +                    "description": "I2S standard selection",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "CKPOL": {
    +                    "description": "Steady state clock\n              polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DATLEN": {
    +                    "description": "Data length to be\n              transferred",
    +                    "offset": 1,
    +                    "size": 2
    +                  },
    +                  "CHLEN": {
    +                    "description": "Channel length (number of bits per audio\n              channel)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "I2SPR": {
    +              "description": "I2S prescaler register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 16,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MCKOE": {
    +                    "description": "Master clock output enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ODD": {
    +                    "description": "Odd factor for the\n              prescaler",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "I2SDIV": {
    +                    "description": "I2S Linear prescaler",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "RTC": {
    +        "description": "Real-time clock",
    +        "children": {
    +          "registers": {
    +            "TR": {
    +              "description": "time register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PM": {
    +                    "description": "AM/PM notation",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "HT": {
    +                    "description": "Hour tens in BCD format",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "HU": {
    +                    "description": "Hour units in BCD format",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "MNT": {
    +                    "description": "Minute tens in BCD format",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "MNU": {
    +                    "description": "Minute units in BCD format",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "ST": {
    +                    "description": "Second tens in BCD format",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SU": {
    +                    "description": "Second units in BCD format",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "date register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 8449,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "YT": {
    +                    "description": "Year tens in BCD format",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "YU": {
    +                    "description": "Year units in BCD format",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "WDU": {
    +                    "description": "Week day units",
    +                    "offset": 13,
    +                    "size": 3
    +                  },
    +                  "MT": {
    +                    "description": "Month tens in BCD format",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "MU": {
    +                    "description": "Month units in BCD format",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "DT": {
    +                    "description": "Date tens in BCD format",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DU": {
    +                    "description": "Date units in BCD format",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CR": {
    +              "description": "control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WCKSEL": {
    +                    "description": "Wakeup clock selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "TSEDGE": {
    +                    "description": "Time-stamp event active\n              edge",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "REFCKON": {
    +                    "description": "Reference clock detection enable (50 or\n              60 Hz)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BYPSHAD": {
    +                    "description": "Bypass the shadow\n              registers",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FMT": {
    +                    "description": "Hour format",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ALRAE": {
    +                    "description": "Alarm A enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ALRBE": {
    +                    "description": "Alarm B enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "WUTE": {
    +                    "description": "Wakeup timer enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TSE": {
    +                    "description": "Time stamp enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ALRAIE": {
    +                    "description": "Alarm A interrupt enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ALRBIE": {
    +                    "description": "Alarm B interrupt enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "WUTIE": {
    +                    "description": "Wakeup timer interrupt\n              enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TSIE": {
    +                    "description": "Time-stamp interrupt\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ADD1H": {
    +                    "description": "Add 1 hour (summer time\n              change)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SUB1H": {
    +                    "description": "Subtract 1 hour (winter time\n              change)",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "BKP": {
    +                    "description": "Backup",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "COSEL": {
    +                    "description": "Calibration output\n              selection",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "POL": {
    +                    "description": "Output polarity",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "OSEL": {
    +                    "description": "Output selection",
    +                    "offset": 21,
    +                    "size": 2
    +                  },
    +                  "COE": {
    +                    "description": "Calibration output enable",
    +                    "offset": 23,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ISR": {
    +              "description": "initialization and status\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 7,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ALRAWF": {
    +                    "description": "Alarm A write flag",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ALRBWF": {
    +                    "description": "Alarm B write flag",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "WUTWF": {
    +                    "description": "Wakeup timer write flag",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SHPF": {
    +                    "description": "Shift operation pending",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "INITS": {
    +                    "description": "Initialization status flag",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RSF": {
    +                    "description": "Registers synchronization\n              flag",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INITF": {
    +                    "description": "Initialization flag",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INIT": {
    +                    "description": "Initialization mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ALRAF": {
    +                    "description": "Alarm A flag",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ALRBF": {
    +                    "description": "Alarm B flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "WUTF": {
    +                    "description": "Wakeup timer flag",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TSF": {
    +                    "description": "Time-stamp flag",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TSOVF": {
    +                    "description": "Time-stamp overflow flag",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TAMP1F": {
    +                    "description": "Tamper detection flag",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TAMP2F": {
    +                    "description": "RTC_TAMP2 detection flag",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TAMP3F": {
    +                    "description": "RTC_TAMP3 detection flag",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "RECALPF": {
    +                    "description": "Recalibration pending Flag",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PRER": {
    +              "description": "prescaler register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 8323327,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PREDIV_A": {
    +                    "description": "Asynchronous prescaler\n              factor",
    +                    "offset": 16,
    +                    "size": 7
    +                  },
    +                  "PREDIV_S": {
    +                    "description": "Synchronous prescaler\n              factor",
    +                    "offset": 0,
    +                    "size": 15
    +                  }
    +                }
    +              }
    +            },
    +            "WUTR": {
    +              "description": "wakeup timer register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 65535,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WUT": {
    +                    "description": "Wakeup auto-reload value\n              bits",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ALRMAR": {
    +              "description": "alarm A register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MSK4": {
    +                    "description": "Alarm A date mask",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "WDSEL": {
    +                    "description": "Week day selection",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "DT": {
    +                    "description": "Date tens in BCD format",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DU": {
    +                    "description": "Date units or day in BCD\n              format",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "MSK3": {
    +                    "description": "Alarm A hours mask",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "PM": {
    +                    "description": "AM/PM notation",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "HT": {
    +                    "description": "Hour tens in BCD format",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "HU": {
    +                    "description": "Hour units in BCD format",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "MSK2": {
    +                    "description": "Alarm A minutes mask",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MNT": {
    +                    "description": "Minute tens in BCD format",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "MNU": {
    +                    "description": "Minute units in BCD format",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "MSK1": {
    +                    "description": "Alarm A seconds mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ST": {
    +                    "description": "Second tens in BCD format",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SU": {
    +                    "description": "Second units in BCD format",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "ALRMBR": {
    +              "description": "alarm B register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MSK4": {
    +                    "description": "Alarm B date mask",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "WDSEL": {
    +                    "description": "Week day selection",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "DT": {
    +                    "description": "Date tens in BCD format",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DU": {
    +                    "description": "Date units or day in BCD\n              format",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "MSK3": {
    +                    "description": "Alarm B hours mask",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "PM": {
    +                    "description": "AM/PM notation",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "HT": {
    +                    "description": "Hour tens in BCD format",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "HU": {
    +                    "description": "Hour units in BCD format",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "MSK2": {
    +                    "description": "Alarm B minutes mask",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MNT": {
    +                    "description": "Minute tens in BCD format",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "MNU": {
    +                    "description": "Minute units in BCD format",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "MSK1": {
    +                    "description": "Alarm B seconds mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ST": {
    +                    "description": "Second tens in BCD format",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SU": {
    +                    "description": "Second units in BCD format",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "WPR": {
    +              "description": "write protection register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "KEY": {
    +                    "description": "Write protection key",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SSR": {
    +              "description": "sub second register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SS": {
    +                    "description": "Sub second value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SHIFTR": {
    +              "description": "shift control register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "ADD1S": {
    +                    "description": "Add one second",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "SUBFS": {
    +                    "description": "Subtract a fraction of a\n              second",
    +                    "offset": 0,
    +                    "size": 15
    +                  }
    +                }
    +              }
    +            },
    +            "TSTR": {
    +              "description": "time stamp time register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SU": {
    +                    "description": "Second units in BCD format",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "ST": {
    +                    "description": "Second tens in BCD format",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "MNU": {
    +                    "description": "Minute units in BCD format",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "MNT": {
    +                    "description": "Minute tens in BCD format",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "HU": {
    +                    "description": "Hour units in BCD format",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "HT": {
    +                    "description": "Hour tens in BCD format",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "PM": {
    +                    "description": "AM/PM notation",
    +                    "offset": 22,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TSDR": {
    +              "description": "time stamp date register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "WDU": {
    +                    "description": "Week day units",
    +                    "offset": 13,
    +                    "size": 3
    +                  },
    +                  "MT": {
    +                    "description": "Month tens in BCD format",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "MU": {
    +                    "description": "Month units in BCD format",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "DT": {
    +                    "description": "Date tens in BCD format",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DU": {
    +                    "description": "Date units in BCD format",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "TSSSR": {
    +              "description": "timestamp sub second register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SS": {
    +                    "description": "Sub second value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CALR": {
    +              "description": "calibration register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CALP": {
    +                    "description": "Increase frequency of RTC by 488.5\n              ppm",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "CALW8": {
    +                    "description": "Use an 8-second calibration cycle\n              period",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CALW16": {
    +                    "description": "Use a 16-second calibration cycle\n              period",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CALM": {
    +                    "description": "Calibration minus",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "TAFCR": {
    +              "description": "tamper and alternate function configuration\n          register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TAMP1E": {
    +                    "description": "Tamper 1 detection enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TAMP1TRG": {
    +                    "description": "Active level for tamper 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TAMPIE": {
    +                    "description": "Tamper interrupt enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TAMP2E": {
    +                    "description": "Tamper 2 detection enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TAMP2TRG": {
    +                    "description": "Active level for tamper 2",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TAMP3E": {
    +                    "description": "Tamper 3 detection enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TAMP3TRG": {
    +                    "description": "Active level for tamper 3",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TAMPTS": {
    +                    "description": "Activate timestamp on tamper detection\n              event",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TAMPFREQ": {
    +                    "description": "Tamper sampling frequency",
    +                    "offset": 8,
    +                    "size": 3
    +                  },
    +                  "TAMPFLT": {
    +                    "description": "Tamper filter count",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "TAMPPRCH": {
    +                    "description": "Tamper precharge duration",
    +                    "offset": 13,
    +                    "size": 2
    +                  },
    +                  "TAMPPUDIS": {
    +                    "description": "TAMPER pull-up disable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "PC13VALUE": {
    +                    "description": "PC13 value",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "PC13MODE": {
    +                    "description": "PC13 mode",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "PC14VALUE": {
    +                    "description": "PC14 value",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "PC14MODE": {
    +                    "description": "PC 14 mode",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "PC15VALUE": {
    +                    "description": "PC15 value",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "PC15MODE": {
    +                    "description": "PC15 mode",
    +                    "offset": 23,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ALRMASSR": {
    +              "description": "alarm A sub second register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MASKSS": {
    +                    "description": "Mask the most-significant bits starting\n              at this bit",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "SS": {
    +                    "description": "Sub seconds value",
    +                    "offset": 0,
    +                    "size": 15
    +                  }
    +                }
    +              }
    +            },
    +            "ALRMBSSR": {
    +              "description": "alarm B sub second register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MASKSS": {
    +                    "description": "Mask the most-significant bits starting\n              at this bit",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "SS": {
    +                    "description": "Sub seconds value",
    +                    "offset": 0,
    +                    "size": 15
    +                  }
    +                }
    +              }
    +            },
    +            "BKP0R": {
    +              "description": "backup register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP1R": {
    +              "description": "backup register",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP2R": {
    +              "description": "backup register",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP3R": {
    +              "description": "backup register",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP4R": {
    +              "description": "backup register",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP5R": {
    +              "description": "backup register",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP6R": {
    +              "description": "backup register",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP7R": {
    +              "description": "backup register",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP8R": {
    +              "description": "backup register",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP9R": {
    +              "description": "backup register",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP10R": {
    +              "description": "backup register",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP11R": {
    +              "description": "backup register",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP12R": {
    +              "description": "backup register",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP13R": {
    +              "description": "backup register",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP14R": {
    +              "description": "backup register",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP15R": {
    +              "description": "backup register",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP16R": {
    +              "description": "backup register",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP17R": {
    +              "description": "backup register",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP18R": {
    +              "description": "backup register",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP19R": {
    +              "description": "backup register",
    +              "offset": 156,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP20R": {
    +              "description": "backup register",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP21R": {
    +              "description": "backup register",
    +              "offset": 164,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP22R": {
    +              "description": "backup register",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP23R": {
    +              "description": "backup register",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP24R": {
    +              "description": "backup register",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP25R": {
    +              "description": "backup register",
    +              "offset": 180,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP26R": {
    +              "description": "backup register",
    +              "offset": 184,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP27R": {
    +              "description": "backup register",
    +              "offset": 188,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP28R": {
    +              "description": "backup register",
    +              "offset": 192,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP29R": {
    +              "description": "backup register",
    +              "offset": 196,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP30R": {
    +              "description": "backup register",
    +              "offset": 200,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP31R": {
    +              "description": "backup register",
    +              "offset": 204,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIM6": {
    +        "description": "Basic timers",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OPM": {
    +                    "description": "One-pulse mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "UIFREMAP": {
    +                    "description": "UIF status bit remapping",
    +                    "offset": 11,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MMS": {
    +                    "description": "Master mode selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "UDE": {
    +                    "description": "Update DMA request enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "Low counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "UIFCPY": {
    +                    "description": "UIF Copy",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARR": {
    +                    "description": "Low Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "ADC1": {
    +        "description": "Analog-to-Digital Converter",
    +        "children": {
    +          "registers": {
    +            "ISR": {
    +              "description": "interrupt and status register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "JQOVF": {
    +                    "description": "JQOVF",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "AWD3": {
    +                    "description": "AWD3",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "AWD2": {
    +                    "description": "AWD2",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "AWD1": {
    +                    "description": "AWD1",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "JEOS": {
    +                    "description": "JEOS",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "JEOC": {
    +                    "description": "JEOC",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "OVR": {
    +                    "description": "OVR",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EOS": {
    +                    "description": "EOS",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EOC": {
    +                    "description": "EOC",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EOSMP": {
    +                    "description": "EOSMP",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ADRDY": {
    +                    "description": "ADRDY",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IER": {
    +              "description": "interrupt enable register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "JQOVFIE": {
    +                    "description": "JQOVFIE",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "AWD3IE": {
    +                    "description": "AWD3IE",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "AWD2IE": {
    +                    "description": "AWD2IE",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "AWD1IE": {
    +                    "description": "AWD1IE",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "JEOSIE": {
    +                    "description": "JEOSIE",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "JEOCIE": {
    +                    "description": "JEOCIE",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "OVRIE": {
    +                    "description": "OVRIE",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EOSIE": {
    +                    "description": "EOSIE",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EOCIE": {
    +                    "description": "EOCIE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EOSMPIE": {
    +                    "description": "EOSMPIE",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ADRDYIE": {
    +                    "description": "ADRDYIE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR": {
    +              "description": "control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADCAL": {
    +                    "description": "ADCAL",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "ADCALDIF": {
    +                    "description": "ADCALDIF",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "DEEPPWD": {
    +                    "description": "DEEPPWD",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "ADVREGEN": {
    +                    "description": "ADVREGEN",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "JADSTP": {
    +                    "description": "JADSTP",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ADSTP": {
    +                    "description": "ADSTP",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "JADSTART": {
    +                    "description": "JADSTART",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ADSTART": {
    +                    "description": "ADSTART",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ADDIS": {
    +                    "description": "ADDIS",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ADEN": {
    +                    "description": "ADEN",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CFGR": {
    +              "description": "configuration register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AWDCH1CH": {
    +                    "description": "AWDCH1CH",
    +                    "offset": 26,
    +                    "size": 5
    +                  },
    +                  "JAUTO": {
    +                    "description": "JAUTO",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "JAWD1EN": {
    +                    "description": "JAWD1EN",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "AWD1EN": {
    +                    "description": "AWD1EN",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "AWD1SGL": {
    +                    "description": "AWD1SGL",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "JQM": {
    +                    "description": "JQM",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "JDISCEN": {
    +                    "description": "JDISCEN",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "DISCNUM": {
    +                    "description": "DISCNUM",
    +                    "offset": 17,
    +                    "size": 3
    +                  },
    +                  "DISCEN": {
    +                    "description": "DISCEN",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "AUTOFF": {
    +                    "description": "AUTOFF",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "AUTDLY": {
    +                    "description": "AUTDLY",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CONT": {
    +                    "description": "CONT",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "OVRMOD": {
    +                    "description": "OVRMOD",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "EXTEN": {
    +                    "description": "EXTEN",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "EXTSEL": {
    +                    "description": "EXTSEL",
    +                    "offset": 6,
    +                    "size": 4
    +                  },
    +                  "ALIGN": {
    +                    "description": "ALIGN",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RES": {
    +                    "description": "RES",
    +                    "offset": 3,
    +                    "size": 2
    +                  },
    +                  "DMACFG": {
    +                    "description": "DMACFG",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DMAEN": {
    +                    "description": "DMAEN",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SMPR1": {
    +              "description": "sample time register 1",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SMP9": {
    +                    "description": "SMP9",
    +                    "offset": 27,
    +                    "size": 3
    +                  },
    +                  "SMP8": {
    +                    "description": "SMP8",
    +                    "offset": 24,
    +                    "size": 3
    +                  },
    +                  "SMP7": {
    +                    "description": "SMP7",
    +                    "offset": 21,
    +                    "size": 3
    +                  },
    +                  "SMP6": {
    +                    "description": "SMP6",
    +                    "offset": 18,
    +                    "size": 3
    +                  },
    +                  "SMP5": {
    +                    "description": "SMP5",
    +                    "offset": 15,
    +                    "size": 3
    +                  },
    +                  "SMP4": {
    +                    "description": "SMP4",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "SMP3": {
    +                    "description": "SMP3",
    +                    "offset": 9,
    +                    "size": 3
    +                  },
    +                  "SMP2": {
    +                    "description": "SMP2",
    +                    "offset": 6,
    +                    "size": 3
    +                  },
    +                  "SMP1": {
    +                    "description": "SMP1",
    +                    "offset": 3,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "SMPR2": {
    +              "description": "sample time register 2",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SMP18": {
    +                    "description": "SMP18",
    +                    "offset": 24,
    +                    "size": 3
    +                  },
    +                  "SMP17": {
    +                    "description": "SMP17",
    +                    "offset": 21,
    +                    "size": 3
    +                  },
    +                  "SMP16": {
    +                    "description": "SMP16",
    +                    "offset": 18,
    +                    "size": 3
    +                  },
    +                  "SMP15": {
    +                    "description": "SMP15",
    +                    "offset": 15,
    +                    "size": 3
    +                  },
    +                  "SMP14": {
    +                    "description": "SMP14",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "SMP13": {
    +                    "description": "SMP13",
    +                    "offset": 9,
    +                    "size": 3
    +                  },
    +                  "SMP12": {
    +                    "description": "SMP12",
    +                    "offset": 6,
    +                    "size": 3
    +                  },
    +                  "SMP11": {
    +                    "description": "SMP11",
    +                    "offset": 3,
    +                    "size": 3
    +                  },
    +                  "SMP10": {
    +                    "description": "SMP10",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "TR1": {
    +              "description": "watchdog threshold register 1",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 268369920,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HT1": {
    +                    "description": "HT1",
    +                    "offset": 16,
    +                    "size": 12
    +                  },
    +                  "LT1": {
    +                    "description": "LT1",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "TR2": {
    +              "description": "watchdog threshold register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 268369920,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HT2": {
    +                    "description": "HT2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "LT2": {
    +                    "description": "LT2",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TR3": {
    +              "description": "watchdog threshold register 3",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 268369920,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HT3": {
    +                    "description": "HT3",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "LT3": {
    +                    "description": "LT3",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SQR1": {
    +              "description": "regular sequence register 1",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SQ4": {
    +                    "description": "SQ4",
    +                    "offset": 24,
    +                    "size": 5
    +                  },
    +                  "SQ3": {
    +                    "description": "SQ3",
    +                    "offset": 18,
    +                    "size": 5
    +                  },
    +                  "SQ2": {
    +                    "description": "SQ2",
    +                    "offset": 12,
    +                    "size": 5
    +                  },
    +                  "SQ1": {
    +                    "description": "SQ1",
    +                    "offset": 6,
    +                    "size": 5
    +                  },
    +                  "L3": {
    +                    "description": "L3",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "SQR2": {
    +              "description": "regular sequence register 2",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SQ9": {
    +                    "description": "SQ9",
    +                    "offset": 24,
    +                    "size": 5
    +                  },
    +                  "SQ8": {
    +                    "description": "SQ8",
    +                    "offset": 18,
    +                    "size": 5
    +                  },
    +                  "SQ7": {
    +                    "description": "SQ7",
    +                    "offset": 12,
    +                    "size": 5
    +                  },
    +                  "SQ6": {
    +                    "description": "SQ6",
    +                    "offset": 6,
    +                    "size": 5
    +                  },
    +                  "SQ5": {
    +                    "description": "SQ5",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "SQR3": {
    +              "description": "regular sequence register 3",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SQ14": {
    +                    "description": "SQ14",
    +                    "offset": 24,
    +                    "size": 5
    +                  },
    +                  "SQ13": {
    +                    "description": "SQ13",
    +                    "offset": 18,
    +                    "size": 5
    +                  },
    +                  "SQ12": {
    +                    "description": "SQ12",
    +                    "offset": 12,
    +                    "size": 5
    +                  },
    +                  "SQ11": {
    +                    "description": "SQ11",
    +                    "offset": 6,
    +                    "size": 5
    +                  },
    +                  "SQ10": {
    +                    "description": "SQ10",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "SQR4": {
    +              "description": "regular sequence register 4",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SQ16": {
    +                    "description": "SQ16",
    +                    "offset": 6,
    +                    "size": 5
    +                  },
    +                  "SQ15": {
    +                    "description": "SQ15",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "regular Data Register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "regularDATA": {
    +                    "description": "regularDATA",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "JSQR": {
    +              "description": "injected sequence register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "JSQ4": {
    +                    "description": "JSQ4",
    +                    "offset": 26,
    +                    "size": 5
    +                  },
    +                  "JSQ3": {
    +                    "description": "JSQ3",
    +                    "offset": 20,
    +                    "size": 5
    +                  },
    +                  "JSQ2": {
    +                    "description": "JSQ2",
    +                    "offset": 14,
    +                    "size": 5
    +                  },
    +                  "JSQ1": {
    +                    "description": "JSQ1",
    +                    "offset": 8,
    +                    "size": 5
    +                  },
    +                  "JEXTEN": {
    +                    "description": "JEXTEN",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "JEXTSEL": {
    +                    "description": "JEXTSEL",
    +                    "offset": 2,
    +                    "size": 4
    +                  },
    +                  "JL": {
    +                    "description": "JL",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OFR1": {
    +              "description": "offset register 1",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OFFSET1_EN": {
    +                    "description": "OFFSET1_EN",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "OFFSET1_CH": {
    +                    "description": "OFFSET1_CH",
    +                    "offset": 26,
    +                    "size": 5
    +                  },
    +                  "OFFSET1": {
    +                    "description": "OFFSET1",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "OFR2": {
    +              "description": "offset register 2",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OFFSET2_EN": {
    +                    "description": "OFFSET2_EN",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "OFFSET2_CH": {
    +                    "description": "OFFSET2_CH",
    +                    "offset": 26,
    +                    "size": 5
    +                  },
    +                  "OFFSET2": {
    +                    "description": "OFFSET2",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "OFR3": {
    +              "description": "offset register 3",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OFFSET3_EN": {
    +                    "description": "OFFSET3_EN",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "OFFSET3_CH": {
    +                    "description": "OFFSET3_CH",
    +                    "offset": 26,
    +                    "size": 5
    +                  },
    +                  "OFFSET3": {
    +                    "description": "OFFSET3",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "OFR4": {
    +              "description": "offset register 4",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OFFSET4_EN": {
    +                    "description": "OFFSET4_EN",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "OFFSET4_CH": {
    +                    "description": "OFFSET4_CH",
    +                    "offset": 26,
    +                    "size": 5
    +                  },
    +                  "OFFSET4": {
    +                    "description": "OFFSET4",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "JDR1": {
    +              "description": "injected data register 1",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "JDATA1": {
    +                    "description": "JDATA1",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "JDR2": {
    +              "description": "injected data register 2",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "JDATA2": {
    +                    "description": "JDATA2",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "JDR3": {
    +              "description": "injected data register 3",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "JDATA3": {
    +                    "description": "JDATA3",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "JDR4": {
    +              "description": "injected data register 4",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "JDATA4": {
    +                    "description": "JDATA4",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "AWD2CR": {
    +              "description": "Analog Watchdog 2 Configuration\n          Register",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AWD2CH": {
    +                    "description": "AWD2CH",
    +                    "offset": 1,
    +                    "size": 18
    +                  }
    +                }
    +              }
    +            },
    +            "AWD3CR": {
    +              "description": "Analog Watchdog 3 Configuration\n          Register",
    +              "offset": 164,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AWD3CH": {
    +                    "description": "AWD3CH",
    +                    "offset": 1,
    +                    "size": 18
    +                  }
    +                }
    +              }
    +            },
    +            "DIFSEL": {
    +              "description": "Differential Mode Selection Register\n          2",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DIFSEL_1_15": {
    +                    "description": "Differential mode for channels 15 to\n              1",
    +                    "offset": 1,
    +                    "size": 15
    +                  },
    +                  "DIFSEL_16_18": {
    +                    "description": "Differential mode for channels 18 to\n              16",
    +                    "offset": 16,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CALFACT": {
    +              "description": "Calibration Factors",
    +              "offset": 180,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CALFACT_D": {
    +                    "description": "CALFACT_D",
    +                    "offset": 16,
    +                    "size": 7
    +                  },
    +                  "CALFACT_S": {
    +                    "description": "CALFACT_S",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIM8": {
    +        "description": "Advanced-timers",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OPM": {
    +                    "description": "One-pulse mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CMS": {
    +                    "description": "Center-aligned mode\n              selection",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CKD": {
    +                    "description": "Clock division",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "UIFREMAP": {
    +                    "description": "UIF status bit remapping",
    +                    "offset": 11,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCPC": {
    +                    "description": "Capture/compare preloaded\n              control",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CCUS": {
    +                    "description": "Capture/compare control update\n              selection",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CCDS": {
    +                    "description": "Capture/compare DMA\n              selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MMS": {
    +                    "description": "Master mode selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "TI1S": {
    +                    "description": "TI1 selection",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OIS1": {
    +                    "description": "Output Idle state 1",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "OIS1N": {
    +                    "description": "Output Idle state 1",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "OIS2": {
    +                    "description": "Output Idle state 2",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OIS2N": {
    +                    "description": "Output Idle state 2",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OIS3": {
    +                    "description": "Output Idle state 3",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "OIS3N": {
    +                    "description": "Output Idle state 3",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "OIS4": {
    +                    "description": "Output Idle state 4",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "OIS5": {
    +                    "description": "Output Idle state 5",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "OIS6": {
    +                    "description": "Output Idle state 6",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "MMS2": {
    +                    "description": "Master mode selection 2",
    +                    "offset": 20,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "SMCR": {
    +              "description": "slave mode control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SMS": {
    +                    "description": "Slave mode selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "OCCS": {
    +                    "description": "OCREF clear selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TS": {
    +                    "description": "Trigger selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "MSM": {
    +                    "description": "Master/Slave mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ETF": {
    +                    "description": "External trigger filter",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "ETPS": {
    +                    "description": "External trigger prescaler",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "ECE": {
    +                    "description": "External clock enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ETP": {
    +                    "description": "External trigger polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "SMS3": {
    +                    "description": "Slave mode selection bit 3",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TDE": {
    +                    "description": "Trigger DMA request enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "COMDE": {
    +                    "description": "COM DMA request enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CC4DE": {
    +                    "description": "Capture/Compare 4 DMA request\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3DE": {
    +                    "description": "Capture/Compare 3 DMA request\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC2DE": {
    +                    "description": "Capture/Compare 2 DMA request\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1DE": {
    +                    "description": "Capture/Compare 1 DMA request\n              enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "UDE": {
    +                    "description": "Update DMA request enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BIE": {
    +                    "description": "Break interrupt enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TIE": {
    +                    "description": "Trigger interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "COMIE": {
    +                    "description": "COM interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC4IE": {
    +                    "description": "Capture/Compare 4 interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3IE": {
    +                    "description": "Capture/Compare 3 interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2IE": {
    +                    "description": "Capture/Compare 2 interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IE": {
    +                    "description": "Capture/Compare 1 interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CC1IF": {
    +                    "description": "Capture/compare 1 interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC2IF": {
    +                    "description": "Capture/Compare 2 interrupt\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC3IF": {
    +                    "description": "Capture/Compare 3 interrupt\n              flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC4IF": {
    +                    "description": "Capture/Compare 4 interrupt\n              flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "COMIF": {
    +                    "description": "COM interrupt flag",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TIF": {
    +                    "description": "Trigger interrupt flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BIF": {
    +                    "description": "Break interrupt flag",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "B2IF": {
    +                    "description": "Break 2 interrupt flag",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CC1OF": {
    +                    "description": "Capture/Compare 1 overcapture\n              flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CC2OF": {
    +                    "description": "Capture/compare 2 overcapture\n              flag",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC3OF": {
    +                    "description": "Capture/Compare 3 overcapture\n              flag",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC4OF": {
    +                    "description": "Capture/Compare 4 overcapture\n              flag",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "C5IF": {
    +                    "description": "Capture/Compare 5 interrupt\n              flag",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "C6IF": {
    +                    "description": "Capture/Compare 6 interrupt\n              flag",
    +                    "offset": 17,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CC1G": {
    +                    "description": "Capture/compare 1\n              generation",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC2G": {
    +                    "description": "Capture/compare 2\n              generation",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC3G": {
    +                    "description": "Capture/compare 3\n              generation",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC4G": {
    +                    "description": "Capture/compare 4\n              generation",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "COMG": {
    +                    "description": "Capture/Compare control update\n              generation",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TG": {
    +                    "description": "Trigger generation",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BG": {
    +                    "description": "Break generation",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "B2G": {
    +                    "description": "Break 2 generation",
    +                    "offset": 8,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Output": {
    +              "description": "capture/compare mode register (output\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OC2CE": {
    +                    "description": "Output Compare 2 clear\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC2M": {
    +                    "description": "Output Compare 2 mode",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC2PE": {
    +                    "description": "Output Compare 2 preload\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC2FE": {
    +                    "description": "Output Compare 2 fast\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/Compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC1CE": {
    +                    "description": "Output Compare 1 clear\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OC1M": {
    +                    "description": "Output Compare 1 mode",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC1PE": {
    +                    "description": "Output Compare 1 preload\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC1FE": {
    +                    "description": "Output Compare 1 fast\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "OC1M_3": {
    +                    "description": "Output Compare 1 mode bit\n              3",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "OC2M_3": {
    +                    "description": "Output Compare 2 mode bit\n              3",
    +                    "offset": 24,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Input": {
    +              "description": "capture/compare mode register 1 (input\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC2F": {
    +                    "description": "Input capture 2 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC2PCS": {
    +                    "description": "Input capture 2 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/Compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC1F": {
    +                    "description": "Input capture 1 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "IC1PCS": {
    +                    "description": "Input capture 1 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR2_Output": {
    +              "description": "capture/compare mode register (output\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OC4CE": {
    +                    "description": "Output compare 4 clear\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC4M": {
    +                    "description": "Output compare 4 mode",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC4PE": {
    +                    "description": "Output compare 4 preload\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC4FE": {
    +                    "description": "Output compare 4 fast\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC4S": {
    +                    "description": "Capture/Compare 4\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC3CE": {
    +                    "description": "Output compare 3 clear\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OC3M": {
    +                    "description": "Output compare 3 mode",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC3PE": {
    +                    "description": "Output compare 3 preload\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC3FE": {
    +                    "description": "Output compare 3 fast\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC3S": {
    +                    "description": "Capture/Compare 3\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "OC3M_3": {
    +                    "description": "Output Compare 3 mode bit\n              3",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "OC4M_3": {
    +                    "description": "Output Compare 4 mode bit\n              3",
    +                    "offset": 24,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR2_Input": {
    +              "description": "capture/compare mode register 2 (input\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC4F": {
    +                    "description": "Input capture 4 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC4PSC": {
    +                    "description": "Input capture 4 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC4S": {
    +                    "description": "Capture/Compare 4\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC3F": {
    +                    "description": "Input capture 3 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "IC3PSC": {
    +                    "description": "Input capture 3 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC3S": {
    +                    "description": "Capture/compare 3\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCER": {
    +              "description": "capture/compare enable\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC1E": {
    +                    "description": "Capture/Compare 1 output\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CC1P": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC1NE": {
    +                    "description": "Capture/Compare 1 complementary output\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1NP": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2E": {
    +                    "description": "Capture/Compare 2 output\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC2P": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC2NE": {
    +                    "description": "Capture/Compare 2 complementary output\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC2NP": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CC3E": {
    +                    "description": "Capture/Compare 3 output\n              enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CC3P": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CC3NE": {
    +                    "description": "Capture/Compare 3 complementary output\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC3NP": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC4E": {
    +                    "description": "Capture/Compare 4 output\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC4P": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CC4NP": {
    +                    "description": "Capture/Compare 4 output\n              Polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "CC5E": {
    +                    "description": "Capture/Compare 5 output\n              enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "CC5P": {
    +                    "description": "Capture/Compare 5 output\n              Polarity",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "CC6E": {
    +                    "description": "Capture/Compare 6 output\n              enable",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CC6P": {
    +                    "description": "Capture/Compare 6 output\n              Polarity",
    +                    "offset": 21,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "UIFCPY": {
    +                    "description": "UIF copy",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARR": {
    +                    "description": "Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "RCR": {
    +              "description": "repetition counter register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REP": {
    +                    "description": "Repetition counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR1": {
    +              "description": "capture/compare register 1",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR1": {
    +                    "description": "Capture/Compare 1 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR2": {
    +              "description": "capture/compare register 2",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR2": {
    +                    "description": "Capture/Compare 2 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR3": {
    +              "description": "capture/compare register 3",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR3": {
    +                    "description": "Capture/Compare 3 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR4": {
    +              "description": "capture/compare register 4",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR4": {
    +                    "description": "Capture/Compare 3 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "BDTR": {
    +              "description": "break and dead-time register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DTG": {
    +                    "description": "Dead-time generator setup",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "LOCK": {
    +                    "description": "Lock configuration",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OSSI": {
    +                    "description": "Off-state selection for Idle\n              mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OSSR": {
    +                    "description": "Off-state selection for Run\n              mode",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BKE": {
    +                    "description": "Break enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "BKP": {
    +                    "description": "Break polarity",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "AOE": {
    +                    "description": "Automatic output enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "MOE": {
    +                    "description": "Main output enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "BKF": {
    +                    "description": "Break filter",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "BK2F": {
    +                    "description": "Break 2 filter",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "BK2E": {
    +                    "description": "Break 2 enable",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "BK2P": {
    +                    "description": "Break 2 polarity",
    +                    "offset": 25,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DCR": {
    +              "description": "DMA control register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBL": {
    +                    "description": "DMA burst length",
    +                    "offset": 8,
    +                    "size": 5
    +                  },
    +                  "DBA": {
    +                    "description": "DMA base address",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "DMAR": {
    +              "description": "DMA address for full transfer",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAB": {
    +                    "description": "DMA register for burst\n              accesses",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR3_Output": {
    +              "description": "capture/compare mode register 3 (output\n          mode)",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OC5FE": {
    +                    "description": "Output compare 5 fast\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OC5PE": {
    +                    "description": "Output compare 5 preload\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC5M": {
    +                    "description": "Output compare 5 mode",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC5CE": {
    +                    "description": "Output compare 5 clear\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OC6FE": {
    +                    "description": "Output compare 6 fast\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OC6PE": {
    +                    "description": "Output compare 6 preload\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC6M": {
    +                    "description": "Output compare 6 mode",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC6CE": {
    +                    "description": "Output compare 6 clear\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC5M_3": {
    +                    "description": "Outout Compare 5 mode bit\n              3",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "OC6M_3": {
    +                    "description": "Outout Compare 6 mode bit\n              3",
    +                    "offset": 24,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCR5": {
    +              "description": "capture/compare register 5",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR5": {
    +                    "description": "Capture/Compare 5 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "GC5C1": {
    +                    "description": "Group Channel 5 and Channel\n              1",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "GC5C2": {
    +                    "description": "Group Channel 5 and Channel\n              2",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "GC5C3": {
    +                    "description": "Group Channel 5 and Channel\n              3",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCR6": {
    +              "description": "capture/compare register 6",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR6": {
    +                    "description": "Capture/Compare 6 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OR": {
    +              "description": "option registers",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIM8_ETR_ADC2_RMP": {
    +                    "description": "TIM8_ETR_ADC2 remapping\n              capability",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "TIM8_ETR_ADC3_RMP": {
    +                    "description": "TIM8_ETR_ADC3 remapping\n              capability",
    +                    "offset": 2,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "DAC": {
    +        "description": "Digital-to-analog converter",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAUDRIE2": {
    +                    "description": "DAC channel2 DMA underrun interrupt\n              enable",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DMAEN2": {
    +                    "description": "DAC channel2 DMA enable",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "MAMP2": {
    +                    "description": "DAC channel2 mask/amplitude\n              selector",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "WAVE2": {
    +                    "description": "DAC channel2 noise/triangle wave\n              generation enable",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "TSEL2": {
    +                    "description": "DAC channel2 trigger\n              selection",
    +                    "offset": 19,
    +                    "size": 3
    +                  },
    +                  "TEN2": {
    +                    "description": "DAC channel2 trigger\n              enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "BOFF2": {
    +                    "description": "DAC channel2 output buffer\n              disable",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EN2": {
    +                    "description": "DAC channel2 enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "DMAUDRIE1": {
    +                    "description": "DAC channel1 DMA Underrun Interrupt\n              enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "DMAEN1": {
    +                    "description": "DAC channel1 DMA enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "MAMP1": {
    +                    "description": "DAC channel1 mask/amplitude\n              selector",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "WAVE1": {
    +                    "description": "DAC channel1 noise/triangle wave\n              generation enable",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "TSEL1": {
    +                    "description": "DAC channel1 trigger\n              selection",
    +                    "offset": 3,
    +                    "size": 3
    +                  },
    +                  "TEN1": {
    +                    "description": "DAC channel1 trigger\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "BOFF1": {
    +                    "description": "DAC channel1 output buffer\n              disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN1": {
    +                    "description": "DAC channel1 enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SWTRIGR": {
    +              "description": "software trigger register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "SWTRIG2": {
    +                    "description": "DAC channel2 software\n              trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SWTRIG1": {
    +                    "description": "DAC channel1 software\n              trigger",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DHR12R1": {
    +              "description": "channel1 12-bit right-aligned data holding\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC1DHR": {
    +                    "description": "DAC channel1 12-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DHR12L1": {
    +              "description": "channel1 12-bit left aligned data holding\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC1DHR": {
    +                    "description": "DAC channel1 12-bit left-aligned\n              data",
    +                    "offset": 4,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DHR8R1": {
    +              "description": "channel1 8-bit right aligned data holding\n          register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC1DHR": {
    +                    "description": "DAC channel1 8-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "DHR12R2": {
    +              "description": "channel2 12-bit right aligned data holding\n          register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC2DHR": {
    +                    "description": "DAC channel2 12-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DHR12L2": {
    +              "description": "channel2 12-bit left aligned data holding\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC2DHR": {
    +                    "description": "DAC channel2 12-bit left-aligned\n              data",
    +                    "offset": 4,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DHR8R2": {
    +              "description": "channel2 8-bit right-aligned data holding\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC2DHR": {
    +                    "description": "DAC channel2 8-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "DHR12RD": {
    +              "description": "Dual DAC 12-bit right-aligned data holding\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC2DHR": {
    +                    "description": "DAC channel2 12-bit right-aligned\n              data",
    +                    "offset": 16,
    +                    "size": 12
    +                  },
    +                  "DACC1DHR": {
    +                    "description": "DAC channel1 12-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DHR12LD": {
    +              "description": "DUAL DAC 12-bit left aligned data holding\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC2DHR": {
    +                    "description": "DAC channel2 12-bit left-aligned\n              data",
    +                    "offset": 20,
    +                    "size": 12
    +                  },
    +                  "DACC1DHR": {
    +                    "description": "DAC channel1 12-bit left-aligned\n              data",
    +                    "offset": 4,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DHR8RD": {
    +              "description": "DUAL DAC 8-bit right aligned data holding\n          register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC2DHR": {
    +                    "description": "DAC channel2 8-bit right-aligned\n              data",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DACC1DHR": {
    +                    "description": "DAC channel1 8-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "DOR1": {
    +              "description": "channel1 data output register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DACC1DOR": {
    +                    "description": "DAC channel1 data output",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DOR2": {
    +              "description": "channel2 data output register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DACC2DOR": {
    +                    "description": "DAC channel2 data output",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAUDR2": {
    +                    "description": "DAC channel2 DMA underrun\n              flag",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DMAUDR1": {
    +                    "description": "DAC channel1 DMA underrun\n              flag",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "EXTI": {
    +        "description": "External interrupt/event\n      controller",
    +        "children": {
    +          "registers": {
    +            "IMR1": {
    +              "description": "Interrupt mask register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 528482304,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MR0": {
    +                    "description": "Interrupt Mask on line 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MR1": {
    +                    "description": "Interrupt Mask on line 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MR2": {
    +                    "description": "Interrupt Mask on line 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MR3": {
    +                    "description": "Interrupt Mask on line 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MR4": {
    +                    "description": "Interrupt Mask on line 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "MR5": {
    +                    "description": "Interrupt Mask on line 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "MR6": {
    +                    "description": "Interrupt Mask on line 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MR7": {
    +                    "description": "Interrupt Mask on line 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MR8": {
    +                    "description": "Interrupt Mask on line 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "MR9": {
    +                    "description": "Interrupt Mask on line 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "MR10": {
    +                    "description": "Interrupt Mask on line 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "MR11": {
    +                    "description": "Interrupt Mask on line 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "MR12": {
    +                    "description": "Interrupt Mask on line 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "MR13": {
    +                    "description": "Interrupt Mask on line 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "MR14": {
    +                    "description": "Interrupt Mask on line 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "MR15": {
    +                    "description": "Interrupt Mask on line 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MR16": {
    +                    "description": "Interrupt Mask on line 16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "MR17": {
    +                    "description": "Interrupt Mask on line 17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "MR18": {
    +                    "description": "Interrupt Mask on line 18",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "MR19": {
    +                    "description": "Interrupt Mask on line 19",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "MR20": {
    +                    "description": "Interrupt Mask on line 20",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "MR21": {
    +                    "description": "Interrupt Mask on line 21",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "MR22": {
    +                    "description": "Interrupt Mask on line 22",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "MR23": {
    +                    "description": "Interrupt Mask on line 23",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "MR24": {
    +                    "description": "Interrupt Mask on line 24",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "MR25": {
    +                    "description": "Interrupt Mask on line 25",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "MR26": {
    +                    "description": "Interrupt Mask on line 26",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "MR27": {
    +                    "description": "Interrupt Mask on line 27",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "MR28": {
    +                    "description": "Interrupt Mask on line 28",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "MR29": {
    +                    "description": "Interrupt Mask on line 29",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "MR30": {
    +                    "description": "Interrupt Mask on line 30",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "MR31": {
    +                    "description": "Interrupt Mask on line 31",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EMR1": {
    +              "description": "Event mask register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MR0": {
    +                    "description": "Event Mask on line 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MR1": {
    +                    "description": "Event Mask on line 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MR2": {
    +                    "description": "Event Mask on line 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MR3": {
    +                    "description": "Event Mask on line 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MR4": {
    +                    "description": "Event Mask on line 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "MR5": {
    +                    "description": "Event Mask on line 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "MR6": {
    +                    "description": "Event Mask on line 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MR7": {
    +                    "description": "Event Mask on line 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MR8": {
    +                    "description": "Event Mask on line 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "MR9": {
    +                    "description": "Event Mask on line 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "MR10": {
    +                    "description": "Event Mask on line 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "MR11": {
    +                    "description": "Event Mask on line 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "MR12": {
    +                    "description": "Event Mask on line 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "MR13": {
    +                    "description": "Event Mask on line 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "MR14": {
    +                    "description": "Event Mask on line 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "MR15": {
    +                    "description": "Event Mask on line 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MR16": {
    +                    "description": "Event Mask on line 16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "MR17": {
    +                    "description": "Event Mask on line 17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "MR18": {
    +                    "description": "Event Mask on line 18",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "MR19": {
    +                    "description": "Event Mask on line 19",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "MR20": {
    +                    "description": "Event Mask on line 20",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "MR21": {
    +                    "description": "Event Mask on line 21",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "MR22": {
    +                    "description": "Event Mask on line 22",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "MR23": {
    +                    "description": "Event Mask on line 23",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "MR24": {
    +                    "description": "Event Mask on line 24",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "MR25": {
    +                    "description": "Event Mask on line 25",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "MR26": {
    +                    "description": "Event Mask on line 26",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "MR27": {
    +                    "description": "Event Mask on line 27",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "MR28": {
    +                    "description": "Event Mask on line 28",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "MR29": {
    +                    "description": "Event Mask on line 29",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "MR30": {
    +                    "description": "Event Mask on line 30",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "MR31": {
    +                    "description": "Event Mask on line 31",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RTSR1": {
    +              "description": "Rising Trigger selection\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TR0": {
    +                    "description": "Rising trigger event configuration of\n              line 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TR1": {
    +                    "description": "Rising trigger event configuration of\n              line 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TR2": {
    +                    "description": "Rising trigger event configuration of\n              line 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TR3": {
    +                    "description": "Rising trigger event configuration of\n              line 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TR4": {
    +                    "description": "Rising trigger event configuration of\n              line 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TR5": {
    +                    "description": "Rising trigger event configuration of\n              line 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TR6": {
    +                    "description": "Rising trigger event configuration of\n              line 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TR7": {
    +                    "description": "Rising trigger event configuration of\n              line 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TR8": {
    +                    "description": "Rising trigger event configuration of\n              line 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TR9": {
    +                    "description": "Rising trigger event configuration of\n              line 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TR10": {
    +                    "description": "Rising trigger event configuration of\n              line 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TR11": {
    +                    "description": "Rising trigger event configuration of\n              line 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TR12": {
    +                    "description": "Rising trigger event configuration of\n              line 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TR13": {
    +                    "description": "Rising trigger event configuration of\n              line 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TR14": {
    +                    "description": "Rising trigger event configuration of\n              line 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TR15": {
    +                    "description": "Rising trigger event configuration of\n              line 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TR16": {
    +                    "description": "Rising trigger event configuration of\n              line 16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TR17": {
    +                    "description": "Rising trigger event configuration of\n              line 17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TR18": {
    +                    "description": "Rising trigger event configuration of\n              line 18",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TR19": {
    +                    "description": "Rising trigger event configuration of\n              line 19",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "TR20": {
    +                    "description": "Rising trigger event configuration of\n              line 20",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "TR21": {
    +                    "description": "Rising trigger event configuration of\n              line 21",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TR22": {
    +                    "description": "Rising trigger event configuration of\n              line 22",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "TR29": {
    +                    "description": "Rising trigger event configuration of\n              line 29",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "TR30": {
    +                    "description": "Rising trigger event configuration of\n              line 30",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "TR31": {
    +                    "description": "Rising trigger event configuration of\n              line 31",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FTSR1": {
    +              "description": "Falling Trigger selection\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TR0": {
    +                    "description": "Falling trigger event configuration of\n              line 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TR1": {
    +                    "description": "Falling trigger event configuration of\n              line 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TR2": {
    +                    "description": "Falling trigger event configuration of\n              line 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TR3": {
    +                    "description": "Falling trigger event configuration of\n              line 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TR4": {
    +                    "description": "Falling trigger event configuration of\n              line 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TR5": {
    +                    "description": "Falling trigger event configuration of\n              line 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TR6": {
    +                    "description": "Falling trigger event configuration of\n              line 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TR7": {
    +                    "description": "Falling trigger event configuration of\n              line 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TR8": {
    +                    "description": "Falling trigger event configuration of\n              line 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TR9": {
    +                    "description": "Falling trigger event configuration of\n              line 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TR10": {
    +                    "description": "Falling trigger event configuration of\n              line 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TR11": {
    +                    "description": "Falling trigger event configuration of\n              line 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TR12": {
    +                    "description": "Falling trigger event configuration of\n              line 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TR13": {
    +                    "description": "Falling trigger event configuration of\n              line 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TR14": {
    +                    "description": "Falling trigger event configuration of\n              line 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TR15": {
    +                    "description": "Falling trigger event configuration of\n              line 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TR16": {
    +                    "description": "Falling trigger event configuration of\n              line 16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TR17": {
    +                    "description": "Falling trigger event configuration of\n              line 17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TR18": {
    +                    "description": "Falling trigger event configuration of\n              line 18",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TR19": {
    +                    "description": "Falling trigger event configuration of\n              line 19",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "TR20": {
    +                    "description": "Falling trigger event configuration of\n              line 20",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "TR21": {
    +                    "description": "Falling trigger event configuration of\n              line 21",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TR22": {
    +                    "description": "Falling trigger event configuration of\n              line 22",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "TR29": {
    +                    "description": "Falling trigger event configuration of\n              line 29",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "TR30": {
    +                    "description": "Falling trigger event configuration of\n              line 30.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "TR31": {
    +                    "description": "Falling trigger event configuration of\n              line 31",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SWIER1": {
    +              "description": "Software interrupt event\n          register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SWIER0": {
    +                    "description": "Software Interrupt on line\n              0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SWIER1": {
    +                    "description": "Software Interrupt on line\n              1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SWIER2": {
    +                    "description": "Software Interrupt on line\n              2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SWIER3": {
    +                    "description": "Software Interrupt on line\n              3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SWIER4": {
    +                    "description": "Software Interrupt on line\n              4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SWIER5": {
    +                    "description": "Software Interrupt on line\n              5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "SWIER6": {
    +                    "description": "Software Interrupt on line\n              6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SWIER7": {
    +                    "description": "Software Interrupt on line\n              7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SWIER8": {
    +                    "description": "Software Interrupt on line\n              8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SWIER9": {
    +                    "description": "Software Interrupt on line\n              9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SWIER10": {
    +                    "description": "Software Interrupt on line\n              10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SWIER11": {
    +                    "description": "Software Interrupt on line\n              11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SWIER12": {
    +                    "description": "Software Interrupt on line\n              12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "SWIER13": {
    +                    "description": "Software Interrupt on line\n              13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "SWIER14": {
    +                    "description": "Software Interrupt on line\n              14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SWIER15": {
    +                    "description": "Software Interrupt on line\n              15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "SWIER16": {
    +                    "description": "Software Interrupt on line\n              16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SWIER17": {
    +                    "description": "Software Interrupt on line\n              17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "SWIER18": {
    +                    "description": "Software Interrupt on line\n              18",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "SWIER19": {
    +                    "description": "Software Interrupt on line\n              19",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "SWIER20": {
    +                    "description": "Software Interrupt on line\n              20",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "SWIER21": {
    +                    "description": "Software Interrupt on line\n              21",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "SWIER22": {
    +                    "description": "Software Interrupt on line\n              22",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "SWIER29": {
    +                    "description": "Software Interrupt on line\n              29",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "SWIER30": {
    +                    "description": "Software Interrupt on line\n              309",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SWIER31": {
    +                    "description": "Software Interrupt on line\n              319",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PR1": {
    +              "description": "Pending register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PR0": {
    +                    "description": "Pending bit 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PR1": {
    +                    "description": "Pending bit 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PR2": {
    +                    "description": "Pending bit 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PR3": {
    +                    "description": "Pending bit 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PR4": {
    +                    "description": "Pending bit 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "PR5": {
    +                    "description": "Pending bit 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PR6": {
    +                    "description": "Pending bit 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PR7": {
    +                    "description": "Pending bit 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PR8": {
    +                    "description": "Pending bit 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PR9": {
    +                    "description": "Pending bit 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PR10": {
    +                    "description": "Pending bit 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PR11": {
    +                    "description": "Pending bit 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "PR12": {
    +                    "description": "Pending bit 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "PR13": {
    +                    "description": "Pending bit 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "PR14": {
    +                    "description": "Pending bit 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PR15": {
    +                    "description": "Pending bit 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "PR16": {
    +                    "description": "Pending bit 16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "PR17": {
    +                    "description": "Pending bit 17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "PR18": {
    +                    "description": "Pending bit 18",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "PR19": {
    +                    "description": "Pending bit 19",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "PR20": {
    +                    "description": "Pending bit 20",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "PR21": {
    +                    "description": "Pending bit 21",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "PR22": {
    +                    "description": "Pending bit 22",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "PR29": {
    +                    "description": "Pending bit 29",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "PR30": {
    +                    "description": "Pending bit 30",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PR31": {
    +                    "description": "Pending bit 31",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IMR2": {
    +              "description": "Interrupt mask register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 4294967292,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MR32": {
    +                    "description": "Interrupt Mask on external/internal line\n              32",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MR33": {
    +                    "description": "Interrupt Mask on external/internal line\n              33",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MR34": {
    +                    "description": "Interrupt Mask on external/internal line\n              34",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MR35": {
    +                    "description": "Interrupt Mask on external/internal line\n              35",
    +                    "offset": 3,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EMR2": {
    +              "description": "Event mask register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MR32": {
    +                    "description": "Event mask on external/internal line\n              32",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MR33": {
    +                    "description": "Event mask on external/internal line\n              33",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MR34": {
    +                    "description": "Event mask on external/internal line\n              34",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MR35": {
    +                    "description": "Event mask on external/internal line\n              35",
    +                    "offset": 3,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RTSR2": {
    +              "description": "Rising Trigger selection\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TR32": {
    +                    "description": "Rising trigger event configuration bit\n              of line 32",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TR33": {
    +                    "description": "Rising trigger event configuration bit\n              of line 33",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FTSR2": {
    +              "description": "Falling Trigger selection\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TR32": {
    +                    "description": "Falling trigger event configuration bit\n              of line 32",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TR33": {
    +                    "description": "Falling trigger event configuration bit\n              of line 33",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SWIER2": {
    +              "description": "Software interrupt event\n          register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SWIER32": {
    +                    "description": "Software interrupt on line\n              32",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SWIER33": {
    +                    "description": "Software interrupt on line\n              33",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PR2": {
    +              "description": "Pending register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PR32": {
    +                    "description": "Pending bit on line 32",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PR33": {
    +                    "description": "Pending bit on line 33",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "PWR": {
    +        "description": "Power control",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "power control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LPDS": {
    +                    "description": "Low-power deep sleep",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PDDS": {
    +                    "description": "Power down deepsleep",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CWUF": {
    +                    "description": "Clear wakeup flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CSBF": {
    +                    "description": "Clear standby flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PVDE": {
    +                    "description": "Power voltage detector\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "PLS": {
    +                    "description": "PVD level selection",
    +                    "offset": 5,
    +                    "size": 3
    +                  },
    +                  "DBP": {
    +                    "description": "Disable backup domain write\n              protection",
    +                    "offset": 8,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CSR": {
    +              "description": "power control/status register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WUF": {
    +                    "description": "Wakeup flag",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SBF": {
    +                    "description": "Standby flag",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PVDO": {
    +                    "description": "PVD output",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EWUP1": {
    +                    "description": "Enable WKUP1 pin",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EWUP2": {
    +                    "description": "Enable WKUP2 pin",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "CAN": {
    +        "description": "Controller area network",
    +        "children": {
    +          "registers": {
    +            "MCR": {
    +              "description": "master control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 65538,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBF": {
    +                    "description": "DBF",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "RESET",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TTCM": {
    +                    "description": "TTCM",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ABOM": {
    +                    "description": "ABOM",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "AWUM": {
    +                    "description": "AWUM",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NART": {
    +                    "description": "NART",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RFLM": {
    +                    "description": "RFLM",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TXFP": {
    +                    "description": "TXFP",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SLEEP": {
    +                    "description": "SLEEP",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "INRQ": {
    +                    "description": "INRQ",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MSR": {
    +              "description": "master status register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 3074,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX": {
    +                    "description": "RX",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SAMP": {
    +                    "description": "SAMP",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXM": {
    +                    "description": "RXM",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXM": {
    +                    "description": "TXM",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SLAKI": {
    +                    "description": "SLAKI",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "WKUI": {
    +                    "description": "WKUI",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ERRI": {
    +                    "description": "ERRI",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SLAK": {
    +                    "description": "SLAK",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INAK": {
    +                    "description": "INAK",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "TSR": {
    +              "description": "transmit status register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 469762048,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LOW2": {
    +                    "description": "Lowest priority flag for mailbox\n              2",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LOW1": {
    +                    "description": "Lowest priority flag for mailbox\n              1",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LOW0": {
    +                    "description": "Lowest priority flag for mailbox\n              0",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TME2": {
    +                    "description": "Lowest priority flag for mailbox\n              2",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TME1": {
    +                    "description": "Lowest priority flag for mailbox\n              1",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TME0": {
    +                    "description": "Lowest priority flag for mailbox\n              0",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CODE": {
    +                    "description": "CODE",
    +                    "offset": 24,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "ABRQ2": {
    +                    "description": "ABRQ2",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "TERR2": {
    +                    "description": "TERR2",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "ALST2": {
    +                    "description": "ALST2",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TXOK2": {
    +                    "description": "TXOK2",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "RQCP2": {
    +                    "description": "RQCP2",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "ABRQ1": {
    +                    "description": "ABRQ1",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TERR1": {
    +                    "description": "TERR1",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ALST1": {
    +                    "description": "ALST1",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TXOK1": {
    +                    "description": "TXOK1",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RQCP1": {
    +                    "description": "RQCP1",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ABRQ0": {
    +                    "description": "ABRQ0",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TERR0": {
    +                    "description": "TERR0",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ALST0": {
    +                    "description": "ALST0",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TXOK0": {
    +                    "description": "TXOK0",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RQCP0": {
    +                    "description": "RQCP0",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RF0R": {
    +              "description": "receive FIFO 0 register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RFOM0": {
    +                    "description": "RFOM0",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FOVR0": {
    +                    "description": "FOVR0",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FULL0": {
    +                    "description": "FULL0",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FMP0": {
    +                    "description": "FMP0",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RF1R": {
    +              "description": "receive FIFO 1 register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RFOM1": {
    +                    "description": "RFOM1",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FOVR1": {
    +                    "description": "FOVR1",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FULL1": {
    +                    "description": "FULL1",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FMP1": {
    +                    "description": "FMP1",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IER": {
    +              "description": "interrupt enable register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SLKIE": {
    +                    "description": "SLKIE",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "WKUIE": {
    +                    "description": "WKUIE",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "ERRIE",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LECIE": {
    +                    "description": "LECIE",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BOFIE": {
    +                    "description": "BOFIE",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EPVIE": {
    +                    "description": "EPVIE",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EWGIE": {
    +                    "description": "EWGIE",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FOVIE1": {
    +                    "description": "FOVIE1",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FFIE1": {
    +                    "description": "FFIE1",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FMPIE1": {
    +                    "description": "FMPIE1",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FOVIE0": {
    +                    "description": "FOVIE0",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FFIE0": {
    +                    "description": "FFIE0",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FMPIE0": {
    +                    "description": "FMPIE0",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TMEIE": {
    +                    "description": "TMEIE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ESR": {
    +              "description": "error status register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REC": {
    +                    "description": "REC",
    +                    "offset": 24,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "TEC": {
    +                    "description": "TEC",
    +                    "offset": 16,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "LEC": {
    +                    "description": "LEC",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "BOFF": {
    +                    "description": "BOFF",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPVF": {
    +                    "description": "EPVF",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EWGF": {
    +                    "description": "EWGF",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "BTR": {
    +              "description": "bit timing register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 19070976,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SILM": {
    +                    "description": "SILM",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LBKM": {
    +                    "description": "LBKM",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SJW": {
    +                    "description": "SJW",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "TS2": {
    +                    "description": "TS2",
    +                    "offset": 20,
    +                    "size": 3
    +                  },
    +                  "TS1": {
    +                    "description": "TS1",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "BRP": {
    +                    "description": "BRP",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "TI0R": {
    +              "description": "TX mailbox identifier register",
    +              "offset": 384,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STID": {
    +                    "description": "STID",
    +                    "offset": 21,
    +                    "size": 11
    +                  },
    +                  "EXID": {
    +                    "description": "EXID",
    +                    "offset": 3,
    +                    "size": 18
    +                  },
    +                  "IDE": {
    +                    "description": "IDE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTR": {
    +                    "description": "RTR",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TXRQ": {
    +                    "description": "TXRQ",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TDT0R": {
    +              "description": "mailbox data length control and time stamp\n          register",
    +              "offset": 388,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIME": {
    +                    "description": "TIME",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "TGT": {
    +                    "description": "TGT",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DLC": {
    +                    "description": "DLC",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "TDL0R": {
    +              "description": "mailbox data low register",
    +              "offset": 392,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA3": {
    +                    "description": "DATA3",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA2": {
    +                    "description": "DATA2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA1": {
    +                    "description": "DATA1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA0": {
    +                    "description": "DATA0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TDH0R": {
    +              "description": "mailbox data high register",
    +              "offset": 396,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA7": {
    +                    "description": "DATA7",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA6": {
    +                    "description": "DATA6",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA5": {
    +                    "description": "DATA5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA4": {
    +                    "description": "DATA4",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TI1R": {
    +              "description": "TX mailbox identifier register",
    +              "offset": 400,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STID": {
    +                    "description": "STID",
    +                    "offset": 21,
    +                    "size": 11
    +                  },
    +                  "EXID": {
    +                    "description": "EXID",
    +                    "offset": 3,
    +                    "size": 18
    +                  },
    +                  "IDE": {
    +                    "description": "IDE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTR": {
    +                    "description": "RTR",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TXRQ": {
    +                    "description": "TXRQ",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TDT1R": {
    +              "description": "mailbox data length control and time stamp\n          register",
    +              "offset": 404,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIME": {
    +                    "description": "TIME",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "TGT": {
    +                    "description": "TGT",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DLC": {
    +                    "description": "DLC",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "TDL1R": {
    +              "description": "mailbox data low register",
    +              "offset": 408,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA3": {
    +                    "description": "DATA3",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA2": {
    +                    "description": "DATA2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA1": {
    +                    "description": "DATA1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA0": {
    +                    "description": "DATA0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TDH1R": {
    +              "description": "mailbox data high register",
    +              "offset": 412,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA7": {
    +                    "description": "DATA7",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA6": {
    +                    "description": "DATA6",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA5": {
    +                    "description": "DATA5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA4": {
    +                    "description": "DATA4",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TI2R": {
    +              "description": "TX mailbox identifier register",
    +              "offset": 416,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STID": {
    +                    "description": "STID",
    +                    "offset": 21,
    +                    "size": 11
    +                  },
    +                  "EXID": {
    +                    "description": "EXID",
    +                    "offset": 3,
    +                    "size": 18
    +                  },
    +                  "IDE": {
    +                    "description": "IDE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTR": {
    +                    "description": "RTR",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TXRQ": {
    +                    "description": "TXRQ",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TDT2R": {
    +              "description": "mailbox data length control and time stamp\n          register",
    +              "offset": 420,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIME": {
    +                    "description": "TIME",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "TGT": {
    +                    "description": "TGT",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DLC": {
    +                    "description": "DLC",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "TDL2R": {
    +              "description": "mailbox data low register",
    +              "offset": 424,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA3": {
    +                    "description": "DATA3",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA2": {
    +                    "description": "DATA2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA1": {
    +                    "description": "DATA1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA0": {
    +                    "description": "DATA0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TDH2R": {
    +              "description": "mailbox data high register",
    +              "offset": 428,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA7": {
    +                    "description": "DATA7",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA6": {
    +                    "description": "DATA6",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA5": {
    +                    "description": "DATA5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA4": {
    +                    "description": "DATA4",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "RI0R": {
    +              "description": "receive FIFO mailbox identifier\n          register",
    +              "offset": 432,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "STID": {
    +                    "description": "STID",
    +                    "offset": 21,
    +                    "size": 11
    +                  },
    +                  "EXID": {
    +                    "description": "EXID",
    +                    "offset": 3,
    +                    "size": 18
    +                  },
    +                  "IDE": {
    +                    "description": "IDE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTR": {
    +                    "description": "RTR",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RDT0R": {
    +              "description": "receive FIFO mailbox data length control and\n          time stamp register",
    +              "offset": 436,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TIME": {
    +                    "description": "TIME",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "FMI": {
    +                    "description": "FMI",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DLC": {
    +                    "description": "DLC",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "RDL0R": {
    +              "description": "receive FIFO mailbox data low\n          register",
    +              "offset": 440,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DATA3": {
    +                    "description": "DATA3",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA2": {
    +                    "description": "DATA2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA1": {
    +                    "description": "DATA1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA0": {
    +                    "description": "DATA0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "RDH0R": {
    +              "description": "receive FIFO mailbox data high\n          register",
    +              "offset": 444,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DATA7": {
    +                    "description": "DATA7",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA6": {
    +                    "description": "DATA6",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA5": {
    +                    "description": "DATA5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA4": {
    +                    "description": "DATA4",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "RI1R": {
    +              "description": "receive FIFO mailbox identifier\n          register",
    +              "offset": 448,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "STID": {
    +                    "description": "STID",
    +                    "offset": 21,
    +                    "size": 11
    +                  },
    +                  "EXID": {
    +                    "description": "EXID",
    +                    "offset": 3,
    +                    "size": 18
    +                  },
    +                  "IDE": {
    +                    "description": "IDE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTR": {
    +                    "description": "RTR",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RDT1R": {
    +              "description": "receive FIFO mailbox data length control and\n          time stamp register",
    +              "offset": 452,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TIME": {
    +                    "description": "TIME",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "FMI": {
    +                    "description": "FMI",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DLC": {
    +                    "description": "DLC",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "RDL1R": {
    +              "description": "receive FIFO mailbox data low\n          register",
    +              "offset": 456,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DATA3": {
    +                    "description": "DATA3",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA2": {
    +                    "description": "DATA2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA1": {
    +                    "description": "DATA1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA0": {
    +                    "description": "DATA0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "RDH1R": {
    +              "description": "receive FIFO mailbox data high\n          register",
    +              "offset": 460,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DATA7": {
    +                    "description": "DATA7",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA6": {
    +                    "description": "DATA6",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA5": {
    +                    "description": "DATA5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA4": {
    +                    "description": "DATA4",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "FMR": {
    +              "description": "filter master register",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 706481665,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CAN2SB": {
    +                    "description": "CAN2 start bank",
    +                    "offset": 8,
    +                    "size": 6
    +                  },
    +                  "FINIT": {
    +                    "description": "Filter init mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FM1R": {
    +              "description": "filter mode register",
    +              "offset": 516,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FBM0": {
    +                    "description": "Filter mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FBM1": {
    +                    "description": "Filter mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FBM2": {
    +                    "description": "Filter mode",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FBM3": {
    +                    "description": "Filter mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FBM4": {
    +                    "description": "Filter mode",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FBM5": {
    +                    "description": "Filter mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FBM6": {
    +                    "description": "Filter mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FBM7": {
    +                    "description": "Filter mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FBM8": {
    +                    "description": "Filter mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FBM9": {
    +                    "description": "Filter mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FBM10": {
    +                    "description": "Filter mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FBM11": {
    +                    "description": "Filter mode",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FBM12": {
    +                    "description": "Filter mode",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FBM13": {
    +                    "description": "Filter mode",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FBM14": {
    +                    "description": "Filter mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FBM15": {
    +                    "description": "Filter mode",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FBM16": {
    +                    "description": "Filter mode",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FBM17": {
    +                    "description": "Filter mode",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FBM18": {
    +                    "description": "Filter mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FBM19": {
    +                    "description": "Filter mode",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FBM20": {
    +                    "description": "Filter mode",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FBM21": {
    +                    "description": "Filter mode",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FBM22": {
    +                    "description": "Filter mode",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FBM23": {
    +                    "description": "Filter mode",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FBM24": {
    +                    "description": "Filter mode",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FBM25": {
    +                    "description": "Filter mode",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FBM26": {
    +                    "description": "Filter mode",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FBM27": {
    +                    "description": "Filter mode",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS1R": {
    +              "description": "filter scale register",
    +              "offset": 524,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FSC0": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FSC1": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FSC2": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FSC3": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FSC4": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FSC5": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FSC6": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FSC7": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FSC8": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FSC9": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FSC10": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FSC11": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FSC12": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FSC13": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FSC14": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FSC15": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FSC16": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FSC17": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FSC18": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FSC19": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FSC20": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FSC21": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FSC22": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FSC23": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FSC24": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FSC25": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FSC26": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FSC27": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FFA1R": {
    +              "description": "filter FIFO assignment\n          register",
    +              "offset": 532,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FFA0": {
    +                    "description": "Filter FIFO assignment for filter\n              0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FFA1": {
    +                    "description": "Filter FIFO assignment for filter\n              1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FFA2": {
    +                    "description": "Filter FIFO assignment for filter\n              2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FFA3": {
    +                    "description": "Filter FIFO assignment for filter\n              3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FFA4": {
    +                    "description": "Filter FIFO assignment for filter\n              4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FFA5": {
    +                    "description": "Filter FIFO assignment for filter\n              5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FFA6": {
    +                    "description": "Filter FIFO assignment for filter\n              6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FFA7": {
    +                    "description": "Filter FIFO assignment for filter\n              7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FFA8": {
    +                    "description": "Filter FIFO assignment for filter\n              8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FFA9": {
    +                    "description": "Filter FIFO assignment for filter\n              9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FFA10": {
    +                    "description": "Filter FIFO assignment for filter\n              10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FFA11": {
    +                    "description": "Filter FIFO assignment for filter\n              11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FFA12": {
    +                    "description": "Filter FIFO assignment for filter\n              12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FFA13": {
    +                    "description": "Filter FIFO assignment for filter\n              13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FFA14": {
    +                    "description": "Filter FIFO assignment for filter\n              14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FFA15": {
    +                    "description": "Filter FIFO assignment for filter\n              15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FFA16": {
    +                    "description": "Filter FIFO assignment for filter\n              16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FFA17": {
    +                    "description": "Filter FIFO assignment for filter\n              17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FFA18": {
    +                    "description": "Filter FIFO assignment for filter\n              18",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FFA19": {
    +                    "description": "Filter FIFO assignment for filter\n              19",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FFA20": {
    +                    "description": "Filter FIFO assignment for filter\n              20",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FFA21": {
    +                    "description": "Filter FIFO assignment for filter\n              21",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FFA22": {
    +                    "description": "Filter FIFO assignment for filter\n              22",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FFA23": {
    +                    "description": "Filter FIFO assignment for filter\n              23",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FFA24": {
    +                    "description": "Filter FIFO assignment for filter\n              24",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FFA25": {
    +                    "description": "Filter FIFO assignment for filter\n              25",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FFA26": {
    +                    "description": "Filter FIFO assignment for filter\n              26",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FFA27": {
    +                    "description": "Filter FIFO assignment for filter\n              27",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FA1R": {
    +              "description": "CAN filter activation register",
    +              "offset": 540,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FACT0": {
    +                    "description": "Filter active",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FACT1": {
    +                    "description": "Filter active",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FACT2": {
    +                    "description": "Filter active",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FACT3": {
    +                    "description": "Filter active",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FACT4": {
    +                    "description": "Filter active",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FACT5": {
    +                    "description": "Filter active",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FACT6": {
    +                    "description": "Filter active",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FACT7": {
    +                    "description": "Filter active",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FACT8": {
    +                    "description": "Filter active",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FACT9": {
    +                    "description": "Filter active",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FACT10": {
    +                    "description": "Filter active",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FACT11": {
    +                    "description": "Filter active",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FACT12": {
    +                    "description": "Filter active",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FACT13": {
    +                    "description": "Filter active",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FACT14": {
    +                    "description": "Filter active",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FACT15": {
    +                    "description": "Filter active",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FACT16": {
    +                    "description": "Filter active",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FACT17": {
    +                    "description": "Filter active",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FACT18": {
    +                    "description": "Filter active",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FACT19": {
    +                    "description": "Filter active",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FACT20": {
    +                    "description": "Filter active",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FACT21": {
    +                    "description": "Filter active",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FACT22": {
    +                    "description": "Filter active",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FACT23": {
    +                    "description": "Filter active",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FACT24": {
    +                    "description": "Filter active",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FACT25": {
    +                    "description": "Filter active",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FACT26": {
    +                    "description": "Filter active",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FACT27": {
    +                    "description": "Filter active",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F0R1": {
    +              "description": "Filter bank 0 register 1",
    +              "offset": 576,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F0R2": {
    +              "description": "Filter bank 0 register 2",
    +              "offset": 580,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F1R1": {
    +              "description": "Filter bank 1 register 1",
    +              "offset": 584,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F1R2": {
    +              "description": "Filter bank 1 register 2",
    +              "offset": 588,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F2R1": {
    +              "description": "Filter bank 2 register 1",
    +              "offset": 592,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F2R2": {
    +              "description": "Filter bank 2 register 2",
    +              "offset": 596,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F3R1": {
    +              "description": "Filter bank 3 register 1",
    +              "offset": 600,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F3R2": {
    +              "description": "Filter bank 3 register 2",
    +              "offset": 604,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F4R1": {
    +              "description": "Filter bank 4 register 1",
    +              "offset": 608,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F4R2": {
    +              "description": "Filter bank 4 register 2",
    +              "offset": 612,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F5R1": {
    +              "description": "Filter bank 5 register 1",
    +              "offset": 616,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F5R2": {
    +              "description": "Filter bank 5 register 2",
    +              "offset": 620,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F6R1": {
    +              "description": "Filter bank 6 register 1",
    +              "offset": 624,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F6R2": {
    +              "description": "Filter bank 6 register 2",
    +              "offset": 628,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F7R1": {
    +              "description": "Filter bank 7 register 1",
    +              "offset": 632,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F7R2": {
    +              "description": "Filter bank 7 register 2",
    +              "offset": 636,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F8R1": {
    +              "description": "Filter bank 8 register 1",
    +              "offset": 640,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F8R2": {
    +              "description": "Filter bank 8 register 2",
    +              "offset": 644,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F9R1": {
    +              "description": "Filter bank 9 register 1",
    +              "offset": 648,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F9R2": {
    +              "description": "Filter bank 9 register 2",
    +              "offset": 652,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F10R1": {
    +              "description": "Filter bank 10 register 1",
    +              "offset": 656,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F10R2": {
    +              "description": "Filter bank 10 register 2",
    +              "offset": 660,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F11R1": {
    +              "description": "Filter bank 11 register 1",
    +              "offset": 664,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F11R2": {
    +              "description": "Filter bank 11 register 2",
    +              "offset": 668,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F12R1": {
    +              "description": "Filter bank 4 register 1",
    +              "offset": 672,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F12R2": {
    +              "description": "Filter bank 12 register 2",
    +              "offset": 676,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F13R1": {
    +              "description": "Filter bank 13 register 1",
    +              "offset": 680,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F13R2": {
    +              "description": "Filter bank 13 register 2",
    +              "offset": 684,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F14R1": {
    +              "description": "Filter bank 14 register 1",
    +              "offset": 688,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F14R2": {
    +              "description": "Filter bank 14 register 2",
    +              "offset": 692,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F15R1": {
    +              "description": "Filter bank 15 register 1",
    +              "offset": 696,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F15R2": {
    +              "description": "Filter bank 15 register 2",
    +              "offset": 700,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F16R1": {
    +              "description": "Filter bank 16 register 1",
    +              "offset": 704,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F16R2": {
    +              "description": "Filter bank 16 register 2",
    +              "offset": 708,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F17R1": {
    +              "description": "Filter bank 17 register 1",
    +              "offset": 712,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F17R2": {
    +              "description": "Filter bank 17 register 2",
    +              "offset": 716,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F18R1": {
    +              "description": "Filter bank 18 register 1",
    +              "offset": 720,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F18R2": {
    +              "description": "Filter bank 18 register 2",
    +              "offset": 724,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F19R1": {
    +              "description": "Filter bank 19 register 1",
    +              "offset": 728,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F19R2": {
    +              "description": "Filter bank 19 register 2",
    +              "offset": 732,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F20R1": {
    +              "description": "Filter bank 20 register 1",
    +              "offset": 736,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F20R2": {
    +              "description": "Filter bank 20 register 2",
    +              "offset": 740,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F21R1": {
    +              "description": "Filter bank 21 register 1",
    +              "offset": 744,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F21R2": {
    +              "description": "Filter bank 21 register 2",
    +              "offset": 748,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F22R1": {
    +              "description": "Filter bank 22 register 1",
    +              "offset": 752,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F22R2": {
    +              "description": "Filter bank 22 register 2",
    +              "offset": 756,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F23R1": {
    +              "description": "Filter bank 23 register 1",
    +              "offset": 760,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F23R2": {
    +              "description": "Filter bank 23 register 2",
    +              "offset": 764,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F24R1": {
    +              "description": "Filter bank 24 register 1",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F24R2": {
    +              "description": "Filter bank 24 register 2",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F25R1": {
    +              "description": "Filter bank 25 register 1",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F25R2": {
    +              "description": "Filter bank 25 register 2",
    +              "offset": 780,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F26R1": {
    +              "description": "Filter bank 26 register 1",
    +              "offset": 784,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F26R2": {
    +              "description": "Filter bank 26 register 2",
    +              "offset": 788,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F27R1": {
    +              "description": "Filter bank 27 register 1",
    +              "offset": 792,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F27R2": {
    +              "description": "Filter bank 27 register 2",
    +              "offset": 796,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "USB_FS": {
    +        "description": "Universal serial bus full-speed device\n      interface",
    +        "children": {
    +          "registers": {
    +            "USB_EP0R": {
    +              "description": "endpoint 0 register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EA": {
    +                    "description": "Endpoint address",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "STAT_TX": {
    +                    "description": "Status bits, for transmission\n              transfers",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DTOG_TX": {
    +                    "description": "Data Toggle, for transmission\n              transfers",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CTR_TX": {
    +                    "description": "Correct Transfer for\n              transmission",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EP_KIND": {
    +                    "description": "Endpoint kind",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EP_TYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 9,
    +                    "size": 2
    +                  },
    +                  "SETUP": {
    +                    "description": "Setup transaction\n              completed",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "STAT_RX": {
    +                    "description": "Status bits, for reception\n              transfers",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "DTOG_RX": {
    +                    "description": "Data Toggle, for reception\n              transfers",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CTR_RX": {
    +                    "description": "Correct transfer for\n              reception",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "USB_EP1R": {
    +              "description": "endpoint 1 register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EA": {
    +                    "description": "Endpoint address",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "STAT_TX": {
    +                    "description": "Status bits, for transmission\n              transfers",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DTOG_TX": {
    +                    "description": "Data Toggle, for transmission\n              transfers",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CTR_TX": {
    +                    "description": "Correct Transfer for\n              transmission",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EP_KIND": {
    +                    "description": "Endpoint kind",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EP_TYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 9,
    +                    "size": 2
    +                  },
    +                  "SETUP": {
    +                    "description": "Setup transaction\n              completed",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "STAT_RX": {
    +                    "description": "Status bits, for reception\n              transfers",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "DTOG_RX": {
    +                    "description": "Data Toggle, for reception\n              transfers",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CTR_RX": {
    +                    "description": "Correct transfer for\n              reception",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "USB_EP2R": {
    +              "description": "endpoint 2 register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EA": {
    +                    "description": "Endpoint address",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "STAT_TX": {
    +                    "description": "Status bits, for transmission\n              transfers",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DTOG_TX": {
    +                    "description": "Data Toggle, for transmission\n              transfers",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CTR_TX": {
    +                    "description": "Correct Transfer for\n              transmission",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EP_KIND": {
    +                    "description": "Endpoint kind",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EP_TYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 9,
    +                    "size": 2
    +                  },
    +                  "SETUP": {
    +                    "description": "Setup transaction\n              completed",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "STAT_RX": {
    +                    "description": "Status bits, for reception\n              transfers",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "DTOG_RX": {
    +                    "description": "Data Toggle, for reception\n              transfers",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CTR_RX": {
    +                    "description": "Correct transfer for\n              reception",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "USB_EP3R": {
    +              "description": "endpoint 3 register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EA": {
    +                    "description": "Endpoint address",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "STAT_TX": {
    +                    "description": "Status bits, for transmission\n              transfers",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DTOG_TX": {
    +                    "description": "Data Toggle, for transmission\n              transfers",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CTR_TX": {
    +                    "description": "Correct Transfer for\n              transmission",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EP_KIND": {
    +                    "description": "Endpoint kind",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EP_TYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 9,
    +                    "size": 2
    +                  },
    +                  "SETUP": {
    +                    "description": "Setup transaction\n              completed",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "STAT_RX": {
    +                    "description": "Status bits, for reception\n              transfers",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "DTOG_RX": {
    +                    "description": "Data Toggle, for reception\n              transfers",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CTR_RX": {
    +                    "description": "Correct transfer for\n              reception",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "USB_EP4R": {
    +              "description": "endpoint 4 register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EA": {
    +                    "description": "Endpoint address",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "STAT_TX": {
    +                    "description": "Status bits, for transmission\n              transfers",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DTOG_TX": {
    +                    "description": "Data Toggle, for transmission\n              transfers",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CTR_TX": {
    +                    "description": "Correct Transfer for\n              transmission",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EP_KIND": {
    +                    "description": "Endpoint kind",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EP_TYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 9,
    +                    "size": 2
    +                  },
    +                  "SETUP": {
    +                    "description": "Setup transaction\n              completed",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "STAT_RX": {
    +                    "description": "Status bits, for reception\n              transfers",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "DTOG_RX": {
    +                    "description": "Data Toggle, for reception\n              transfers",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CTR_RX": {
    +                    "description": "Correct transfer for\n              reception",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "USB_EP5R": {
    +              "description": "endpoint 5 register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EA": {
    +                    "description": "Endpoint address",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "STAT_TX": {
    +                    "description": "Status bits, for transmission\n              transfers",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DTOG_TX": {
    +                    "description": "Data Toggle, for transmission\n              transfers",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CTR_TX": {
    +                    "description": "Correct Transfer for\n              transmission",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EP_KIND": {
    +                    "description": "Endpoint kind",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EP_TYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 9,
    +                    "size": 2
    +                  },
    +                  "SETUP": {
    +                    "description": "Setup transaction\n              completed",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "STAT_RX": {
    +                    "description": "Status bits, for reception\n              transfers",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "DTOG_RX": {
    +                    "description": "Data Toggle, for reception\n              transfers",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CTR_RX": {
    +                    "description": "Correct transfer for\n              reception",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "USB_EP6R": {
    +              "description": "endpoint 6 register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EA": {
    +                    "description": "Endpoint address",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "STAT_TX": {
    +                    "description": "Status bits, for transmission\n              transfers",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DTOG_TX": {
    +                    "description": "Data Toggle, for transmission\n              transfers",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CTR_TX": {
    +                    "description": "Correct Transfer for\n              transmission",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EP_KIND": {
    +                    "description": "Endpoint kind",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EP_TYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 9,
    +                    "size": 2
    +                  },
    +                  "SETUP": {
    +                    "description": "Setup transaction\n              completed",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "STAT_RX": {
    +                    "description": "Status bits, for reception\n              transfers",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "DTOG_RX": {
    +                    "description": "Data Toggle, for reception\n              transfers",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CTR_RX": {
    +                    "description": "Correct transfer for\n              reception",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "USB_EP7R": {
    +              "description": "endpoint 7 register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EA": {
    +                    "description": "Endpoint address",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "STAT_TX": {
    +                    "description": "Status bits, for transmission\n              transfers",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DTOG_TX": {
    +                    "description": "Data Toggle, for transmission\n              transfers",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CTR_TX": {
    +                    "description": "Correct Transfer for\n              transmission",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EP_KIND": {
    +                    "description": "Endpoint kind",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EP_TYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 9,
    +                    "size": 2
    +                  },
    +                  "SETUP": {
    +                    "description": "Setup transaction\n              completed",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "STAT_RX": {
    +                    "description": "Status bits, for reception\n              transfers",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "DTOG_RX": {
    +                    "description": "Data Toggle, for reception\n              transfers",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CTR_RX": {
    +                    "description": "Correct transfer for\n              reception",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "USB_CNTR": {
    +              "description": "control register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 3,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FRES": {
    +                    "description": "Force USB Reset",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PDWN": {
    +                    "description": "Power down",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "LPMODE": {
    +                    "description": "Low-power mode",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FSUSP": {
    +                    "description": "Force suspend",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RESUME": {
    +                    "description": "Resume request",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ESOFM": {
    +                    "description": "Expected start of frame interrupt\n              mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SOFM": {
    +                    "description": "Start of frame interrupt\n              mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RESETM": {
    +                    "description": "USB reset interrupt mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SUSPM": {
    +                    "description": "Suspend mode interrupt\n              mask",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "WKUPM": {
    +                    "description": "Wakeup interrupt mask",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ERRM": {
    +                    "description": "Error interrupt mask",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "PMAOVRM": {
    +                    "description": "Packet memory area over / underrun\n              interrupt mask",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CTRM": {
    +                    "description": "Correct transfer interrupt\n              mask",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ISTR": {
    +              "description": "interrupt status register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EP_ID": {
    +                    "description": "Endpoint Identifier",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "DIR": {
    +                    "description": "Direction of transaction",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ESOF": {
    +                    "description": "Expected start frame",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SOF": {
    +                    "description": "start of frame",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "reset request",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SUSP": {
    +                    "description": "Suspend mode request",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "WKUP": {
    +                    "description": "Wakeup",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ERR": {
    +                    "description": "Error",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "PMAOVR": {
    +                    "description": "Packet memory area over /\n              underrun",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CTR": {
    +                    "description": "Correct transfer",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "FNR": {
    +              "description": "frame number register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "FN": {
    +                    "description": "Frame number",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "LSOF": {
    +                    "description": "Lost SOF",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "LCK": {
    +                    "description": "Locked",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RXDM": {
    +                    "description": "Receive data - line status",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "RXDP": {
    +                    "description": "Receive data + line status",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DADDR": {
    +              "description": "device address",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADD": {
    +                    "description": "Device address",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ADD1": {
    +                    "description": "Device address",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ADD2": {
    +                    "description": "Device address",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ADD3": {
    +                    "description": "Device address",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ADD4": {
    +                    "description": "Device address",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ADD5": {
    +                    "description": "Device address",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ADD6": {
    +                    "description": "Device address",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EF": {
    +                    "description": "Enable function",
    +                    "offset": 7,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BTABLE": {
    +              "description": "Buffer table address",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BTABLE": {
    +                    "description": "Buffer table",
    +                    "offset": 3,
    +                    "size": 13
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "I2C1": {
    +        "description": "Inter-integrated circuit",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "Control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PE": {
    +                    "description": "Peripheral enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TXIE": {
    +                    "description": "TX Interrupt enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RXIE": {
    +                    "description": "RX Interrupt enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ADDRIE": {
    +                    "description": "Address match interrupt enable (slave\n              only)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NACKIE": {
    +                    "description": "Not acknowledge received interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "STOPIE": {
    +                    "description": "STOP detection Interrupt\n              enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer Complete interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "Error interrupts enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "DNF": {
    +                    "description": "Digital noise filter",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "ANFOFF": {
    +                    "description": "Analog noise filter OFF",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "SWRST": {
    +                    "description": "Software reset",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TXDMAEN": {
    +                    "description": "DMA transmission requests\n              enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "RXDMAEN": {
    +                    "description": "DMA reception requests\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "SBC": {
    +                    "description": "Slave byte control",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "NOSTRETCH": {
    +                    "description": "Clock stretching disable",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "WUPEN": {
    +                    "description": "Wakeup from STOP enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GCEN": {
    +                    "description": "General call enable",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "SMBHEN": {
    +                    "description": "SMBus Host address enable",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "SMBDEN": {
    +                    "description": "SMBus Device Default address\n              enable",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "ALERTEN": {
    +                    "description": "SMBUS alert enable",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "PECEN": {
    +                    "description": "PEC enable",
    +                    "offset": 23,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "Control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PECBYTE": {
    +                    "description": "Packet error checking byte",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "AUTOEND": {
    +                    "description": "Automatic end mode (master\n              mode)",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "RELOAD": {
    +                    "description": "NBYTES reload mode",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "NBYTES": {
    +                    "description": "Number of bytes",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "NACK": {
    +                    "description": "NACK generation (slave\n              mode)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "STOP": {
    +                    "description": "Stop generation (master\n              mode)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "START": {
    +                    "description": "Start generation",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "HEAD10R": {
    +                    "description": "10-bit address header only read\n              direction (master receiver mode)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ADD10": {
    +                    "description": "10-bit addressing mode (master\n              mode)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "RD_WRN": {
    +                    "description": "Transfer direction (master\n              mode)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SADD8": {
    +                    "description": "Slave address bit 9:8 (master\n              mode)",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "SADD1": {
    +                    "description": "Slave address bit 7:1 (master\n              mode)",
    +                    "offset": 1,
    +                    "size": 7
    +                  },
    +                  "SADD0": {
    +                    "description": "Slave address bit 0 (master\n              mode)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OAR1": {
    +              "description": "Own address register 1",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OA1_0": {
    +                    "description": "Interface address",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "OA1_1": {
    +                    "description": "Interface address",
    +                    "offset": 1,
    +                    "size": 7
    +                  },
    +                  "OA1_8": {
    +                    "description": "Interface address",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OA1MODE": {
    +                    "description": "Own Address 1 10-bit mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OA1EN": {
    +                    "description": "Own Address 1 enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OAR2": {
    +              "description": "Own address register 2",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OA2": {
    +                    "description": "Interface address",
    +                    "offset": 1,
    +                    "size": 7
    +                  },
    +                  "OA2MSK": {
    +                    "description": "Own Address 2 masks",
    +                    "offset": 8,
    +                    "size": 3
    +                  },
    +                  "OA2EN": {
    +                    "description": "Own Address 2 enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TIMINGR": {
    +              "description": "Timing register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SCLL": {
    +                    "description": "SCL low period (master\n              mode)",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "SCLH": {
    +                    "description": "SCL high period (master\n              mode)",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "SDADEL": {
    +                    "description": "Data hold time",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "SCLDEL": {
    +                    "description": "Data setup time",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "PRESC": {
    +                    "description": "Timing prescaler",
    +                    "offset": 28,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "TIMEOUTR": {
    +              "description": "Status register 1",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMEOUTA": {
    +                    "description": "Bus timeout A",
    +                    "offset": 0,
    +                    "size": 12
    +                  },
    +                  "TIDLE": {
    +                    "description": "Idle clock timeout\n              detection",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TIMOUTEN": {
    +                    "description": "Clock timeout enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TIMEOUTB": {
    +                    "description": "Bus timeout B",
    +                    "offset": 16,
    +                    "size": 12
    +                  },
    +                  "TEXTEN": {
    +                    "description": "Extended clock timeout\n              enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ISR": {
    +              "description": "Interrupt and Status register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADDCODE": {
    +                    "description": "Address match code (Slave\n              mode)",
    +                    "offset": 17,
    +                    "size": 7,
    +                    "access": "read-only"
    +                  },
    +                  "DIR": {
    +                    "description": "Transfer direction (Slave\n              mode)",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BUSY": {
    +                    "description": "Bus busy",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ALERT": {
    +                    "description": "SMBus alert",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TIMEOUT": {
    +                    "description": "Timeout or t_low detection\n              flag",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PECERR": {
    +                    "description": "PEC Error in reception",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OVR": {
    +                    "description": "Overrun/Underrun (slave\n              mode)",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ARLO": {
    +                    "description": "Arbitration lost",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BERR": {
    +                    "description": "Bus error",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TCR": {
    +                    "description": "Transfer Complete Reload",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TC": {
    +                    "description": "Transfer Complete (master\n              mode)",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "STOPF": {
    +                    "description": "Stop detection flag",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NACKF": {
    +                    "description": "Not acknowledge received\n              flag",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ADDR": {
    +                    "description": "Address matched (slave\n              mode)",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXNE": {
    +                    "description": "Receive data register not empty\n              (receivers)",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXIS": {
    +                    "description": "Transmit interrupt status\n              (transmitters)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TXE": {
    +                    "description": "Transmit data register empty\n              (transmitters)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ICR": {
    +              "description": "Interrupt clear register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "ALERTCF": {
    +                    "description": "Alert flag clear",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TIMOUTCF": {
    +                    "description": "Timeout detection flag\n              clear",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "PECCF": {
    +                    "description": "PEC Error flag clear",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OVRCF": {
    +                    "description": "Overrun/Underrun flag\n              clear",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ARLOCF": {
    +                    "description": "Arbitration lost flag\n              clear",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BERRCF": {
    +                    "description": "Bus error flag clear",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "STOPCF": {
    +                    "description": "Stop detection flag clear",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NACKCF": {
    +                    "description": "Not Acknowledge flag clear",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ADDRCF": {
    +                    "description": "Address Matched flag clear",
    +                    "offset": 3,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PECR": {
    +              "description": "PEC register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "PEC": {
    +                    "description": "Packet error checking\n              register",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "RXDR": {
    +              "description": "Receive data register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RXDATA": {
    +                    "description": "8-bit receive data",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TXDR": {
    +              "description": "Transmit data register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXDATA": {
    +                    "description": "8-bit transmit data",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIM1": {
    +        "description": "Advanced timer",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OPM": {
    +                    "description": "One-pulse mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CMS": {
    +                    "description": "Center-aligned mode\n              selection",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CKD": {
    +                    "description": "Clock division",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "UIFREMAP": {
    +                    "description": "UIF status bit remapping",
    +                    "offset": 11,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCPC": {
    +                    "description": "Capture/compare preloaded\n              control",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CCUS": {
    +                    "description": "Capture/compare control update\n              selection",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CCDS": {
    +                    "description": "Capture/compare DMA\n              selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MMS": {
    +                    "description": "Master mode selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "TI1S": {
    +                    "description": "TI1 selection",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OIS1": {
    +                    "description": "Output Idle state 1",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "OIS1N": {
    +                    "description": "Output Idle state 1",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "OIS2": {
    +                    "description": "Output Idle state 2",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OIS2N": {
    +                    "description": "Output Idle state 2",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OIS3": {
    +                    "description": "Output Idle state 3",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "OIS3N": {
    +                    "description": "Output Idle state 3",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "OIS4": {
    +                    "description": "Output Idle state 4",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "OIS5": {
    +                    "description": "Output Idle state 5",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "OIS6": {
    +                    "description": "Output Idle state 6",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "MMS2": {
    +                    "description": "Master mode selection 2",
    +                    "offset": 20,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "SMCR": {
    +              "description": "slave mode control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SMS": {
    +                    "description": "Slave mode selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "OCCS": {
    +                    "description": "OCREF clear selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TS": {
    +                    "description": "Trigger selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "MSM": {
    +                    "description": "Master/Slave mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ETF": {
    +                    "description": "External trigger filter",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "ETPS": {
    +                    "description": "External trigger prescaler",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "ECE": {
    +                    "description": "External clock enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ETP": {
    +                    "description": "External trigger polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "SMS3": {
    +                    "description": "Slave mode selection bit 3",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TDE": {
    +                    "description": "Trigger DMA request enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "COMDE": {
    +                    "description": "COM DMA request enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CC4DE": {
    +                    "description": "Capture/Compare 4 DMA request\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3DE": {
    +                    "description": "Capture/Compare 3 DMA request\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC2DE": {
    +                    "description": "Capture/Compare 2 DMA request\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1DE": {
    +                    "description": "Capture/Compare 1 DMA request\n              enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "UDE": {
    +                    "description": "Update DMA request enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BIE": {
    +                    "description": "Break interrupt enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TIE": {
    +                    "description": "Trigger interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "COMIE": {
    +                    "description": "COM interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC4IE": {
    +                    "description": "Capture/Compare 4 interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3IE": {
    +                    "description": "Capture/Compare 3 interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2IE": {
    +                    "description": "Capture/Compare 2 interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IE": {
    +                    "description": "Capture/Compare 1 interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CC1IF": {
    +                    "description": "Capture/compare 1 interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC2IF": {
    +                    "description": "Capture/Compare 2 interrupt\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC3IF": {
    +                    "description": "Capture/Compare 3 interrupt\n              flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC4IF": {
    +                    "description": "Capture/Compare 4 interrupt\n              flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "COMIF": {
    +                    "description": "COM interrupt flag",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TIF": {
    +                    "description": "Trigger interrupt flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BIF": {
    +                    "description": "Break interrupt flag",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "B2IF": {
    +                    "description": "Break 2 interrupt flag",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CC1OF": {
    +                    "description": "Capture/Compare 1 overcapture\n              flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CC2OF": {
    +                    "description": "Capture/compare 2 overcapture\n              flag",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC3OF": {
    +                    "description": "Capture/Compare 3 overcapture\n              flag",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC4OF": {
    +                    "description": "Capture/Compare 4 overcapture\n              flag",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "C5IF": {
    +                    "description": "Capture/Compare 5 interrupt\n              flag",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "C6IF": {
    +                    "description": "Capture/Compare 6 interrupt\n              flag",
    +                    "offset": 17,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CC1G": {
    +                    "description": "Capture/compare 1\n              generation",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC2G": {
    +                    "description": "Capture/compare 2\n              generation",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC3G": {
    +                    "description": "Capture/compare 3\n              generation",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC4G": {
    +                    "description": "Capture/compare 4\n              generation",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "COMG": {
    +                    "description": "Capture/Compare control update\n              generation",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TG": {
    +                    "description": "Trigger generation",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BG": {
    +                    "description": "Break generation",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "B2G": {
    +                    "description": "Break 2 generation",
    +                    "offset": 8,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Output": {
    +              "description": "capture/compare mode register (output\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OC2CE": {
    +                    "description": "Output Compare 2 clear\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC2M": {
    +                    "description": "Output Compare 2 mode",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC2PE": {
    +                    "description": "Output Compare 2 preload\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC2FE": {
    +                    "description": "Output Compare 2 fast\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/Compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC1CE": {
    +                    "description": "Output Compare 1 clear\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OC1M": {
    +                    "description": "Output Compare 1 mode",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC1PE": {
    +                    "description": "Output Compare 1 preload\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC1FE": {
    +                    "description": "Output Compare 1 fast\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "OC1M_3": {
    +                    "description": "Output Compare 1 mode bit\n              3",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "OC2M_3": {
    +                    "description": "Output Compare 2 mode bit\n              3",
    +                    "offset": 24,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Input": {
    +              "description": "capture/compare mode register 1 (input\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC2F": {
    +                    "description": "Input capture 2 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC2PCS": {
    +                    "description": "Input capture 2 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/Compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC1F": {
    +                    "description": "Input capture 1 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "IC1PCS": {
    +                    "description": "Input capture 1 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR2_Output": {
    +              "description": "capture/compare mode register (output\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OC4CE": {
    +                    "description": "Output compare 4 clear\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC4M": {
    +                    "description": "Output compare 4 mode",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC4PE": {
    +                    "description": "Output compare 4 preload\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC4FE": {
    +                    "description": "Output compare 4 fast\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC4S": {
    +                    "description": "Capture/Compare 4\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC3CE": {
    +                    "description": "Output compare 3 clear\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OC3M": {
    +                    "description": "Output compare 3 mode",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC3PE": {
    +                    "description": "Output compare 3 preload\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC3FE": {
    +                    "description": "Output compare 3 fast\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC3S": {
    +                    "description": "Capture/Compare 3\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "OC3M_3": {
    +                    "description": "Output Compare 3 mode bit\n              3",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "OC4M_3": {
    +                    "description": "Output Compare 4 mode bit\n              3",
    +                    "offset": 24,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR2_Input": {
    +              "description": "capture/compare mode register 2 (input\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC4F": {
    +                    "description": "Input capture 4 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC4PSC": {
    +                    "description": "Input capture 4 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC4S": {
    +                    "description": "Capture/Compare 4\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC3F": {
    +                    "description": "Input capture 3 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "IC3PSC": {
    +                    "description": "Input capture 3 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC3S": {
    +                    "description": "Capture/compare 3\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCER": {
    +              "description": "capture/compare enable\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC1E": {
    +                    "description": "Capture/Compare 1 output\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CC1P": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC1NE": {
    +                    "description": "Capture/Compare 1 complementary output\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1NP": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2E": {
    +                    "description": "Capture/Compare 2 output\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC2P": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC2NE": {
    +                    "description": "Capture/Compare 2 complementary output\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC2NP": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CC3E": {
    +                    "description": "Capture/Compare 3 output\n              enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CC3P": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CC3NE": {
    +                    "description": "Capture/Compare 3 complementary output\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC3NP": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC4E": {
    +                    "description": "Capture/Compare 4 output\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC4P": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CC4NP": {
    +                    "description": "Capture/Compare 4 output\n              Polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "CC5E": {
    +                    "description": "Capture/Compare 5 output\n              enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "CC5P": {
    +                    "description": "Capture/Compare 5 output\n              Polarity",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "CC6E": {
    +                    "description": "Capture/Compare 6 output\n              enable",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CC6P": {
    +                    "description": "Capture/Compare 6 output\n              Polarity",
    +                    "offset": 21,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "UIFCPY": {
    +                    "description": "UIF copy",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARR": {
    +                    "description": "Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "RCR": {
    +              "description": "repetition counter register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REP": {
    +                    "description": "Repetition counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR1": {
    +              "description": "capture/compare register 1",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR1": {
    +                    "description": "Capture/Compare 1 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR2": {
    +              "description": "capture/compare register 2",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR2": {
    +                    "description": "Capture/Compare 2 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR3": {
    +              "description": "capture/compare register 3",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR3": {
    +                    "description": "Capture/Compare 3 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR4": {
    +              "description": "capture/compare register 4",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR4": {
    +                    "description": "Capture/Compare 3 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "BDTR": {
    +              "description": "break and dead-time register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DTG": {
    +                    "description": "Dead-time generator setup",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "LOCK": {
    +                    "description": "Lock configuration",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OSSI": {
    +                    "description": "Off-state selection for Idle\n              mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OSSR": {
    +                    "description": "Off-state selection for Run\n              mode",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BKE": {
    +                    "description": "Break enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "BKP": {
    +                    "description": "Break polarity",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "AOE": {
    +                    "description": "Automatic output enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "MOE": {
    +                    "description": "Main output enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "BKF": {
    +                    "description": "Break filter",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "BK2F": {
    +                    "description": "Break 2 filter",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "BK2E": {
    +                    "description": "Break 2 enable",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "BK2P": {
    +                    "description": "Break 2 polarity",
    +                    "offset": 25,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DCR": {
    +              "description": "DMA control register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBL": {
    +                    "description": "DMA burst length",
    +                    "offset": 8,
    +                    "size": 5
    +                  },
    +                  "DBA": {
    +                    "description": "DMA base address",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "DMAR": {
    +              "description": "DMA address for full transfer",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAB": {
    +                    "description": "DMA register for burst\n              accesses",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR3_Output": {
    +              "description": "capture/compare mode register 3 (output\n          mode)",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OC5FE": {
    +                    "description": "Output compare 5 fast\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OC5PE": {
    +                    "description": "Output compare 5 preload\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC5M": {
    +                    "description": "Output compare 5 mode",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC5CE": {
    +                    "description": "Output compare 5 clear\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OC6FE": {
    +                    "description": "Output compare 6 fast\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OC6PE": {
    +                    "description": "Output compare 6 preload\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC6M": {
    +                    "description": "Output compare 6 mode",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC6CE": {
    +                    "description": "Output compare 6 clear\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC5M_3": {
    +                    "description": "Outout Compare 5 mode bit\n              3",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "OC6M_3": {
    +                    "description": "Outout Compare 6 mode bit\n              3",
    +                    "offset": 24,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCR5": {
    +              "description": "capture/compare register 5",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR5": {
    +                    "description": "Capture/Compare 5 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "GC5C1": {
    +                    "description": "Group Channel 5 and Channel\n              1",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "GC5C2": {
    +                    "description": "Group Channel 5 and Channel\n              2",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "GC5C3": {
    +                    "description": "Group Channel 5 and Channel\n              3",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCR6": {
    +              "description": "capture/compare register 6",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR6": {
    +                    "description": "Capture/Compare 6 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OR": {
    +              "description": "option registers",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIM1_ETR_ADC1_RMP": {
    +                    "description": "TIM1_ETR_ADC1 remapping\n              capability",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "TIM1_ETR_ADC4_RMP": {
    +                    "description": "TIM1_ETR_ADC4 remapping\n              capability",
    +                    "offset": 2,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "DBGMCU": {
    +        "description": "Debug support",
    +        "children": {
    +          "registers": {
    +            "IDCODE": {
    +              "description": "MCU Device ID Code Register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DEV_ID": {
    +                    "description": "Device Identifier",
    +                    "offset": 0,
    +                    "size": 12
    +                  },
    +                  "REV_ID": {
    +                    "description": "Revision Identifier",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CR": {
    +              "description": "Debug MCU Configuration\n          Register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBG_SLEEP": {
    +                    "description": "Debug Sleep mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DBG_STOP": {
    +                    "description": "Debug Stop Mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DBG_STANDBY": {
    +                    "description": "Debug Standby Mode",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TRACE_IOEN": {
    +                    "description": "Trace pin assignment\n              control",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TRACE_MODE": {
    +                    "description": "Trace pin assignment\n              control",
    +                    "offset": 6,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "APB1FZ": {
    +              "description": "APB Low Freeze Register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBG_TIM2_STOP": {
    +                    "description": "Debug Timer 2 stopped when Core is\n              halted",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM3_STOP": {
    +                    "description": "Debug Timer 3 stopped when Core is\n              halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM4_STOP": {
    +                    "description": "Debug Timer 4 stopped when Core is\n              halted",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM5_STOP": {
    +                    "description": "Debug Timer 5 stopped when Core is\n              halted",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM6_STOP": {
    +                    "description": "Debug Timer 6 stopped when Core is\n              halted",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM7_STOP": {
    +                    "description": "Debug Timer 7 stopped when Core is\n              halted",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM12_STOP": {
    +                    "description": "Debug Timer 12 stopped when Core is\n              halted",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM13_STOP": {
    +                    "description": "Debug Timer 13 stopped when Core is\n              halted",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "DBG_TIMER14_STOP": {
    +                    "description": "Debug Timer 14 stopped when Core is\n              halted",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM18_STOP": {
    +                    "description": "Debug Timer 18 stopped when Core is\n              halted",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DBG_RTC_STOP": {
    +                    "description": "Debug RTC stopped when Core is\n              halted",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "DBG_WWDG_STOP": {
    +                    "description": "Debug Window Wachdog stopped when Core\n              is halted",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "DBG_IWDG_STOP": {
    +                    "description": "Debug Independent Wachdog stopped when\n              Core is halted",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "I2C1_SMBUS_TIMEOUT": {
    +                    "description": "SMBUS timeout mode stopped when Core is\n              halted",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "I2C2_SMBUS_TIMEOUT": {
    +                    "description": "SMBUS timeout mode stopped when Core is\n              halted",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "DBG_CAN_STOP": {
    +                    "description": "Debug CAN stopped when core is\n              halted",
    +                    "offset": 25,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "APB2FZ": {
    +              "description": "APB High Freeze Register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBG_TIM15_STOP": {
    +                    "description": "Debug Timer 15 stopped when Core is\n              halted",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM16_STOP": {
    +                    "description": "Debug Timer 16 stopped when Core is\n              halted",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM17_STO": {
    +                    "description": "Debug Timer 17 stopped when Core is\n              halted",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM19_STOP": {
    +                    "description": "Debug Timer 19 stopped when Core is\n              halted",
    +                    "offset": 5,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      }
    +    }
    +  },
    +  "devices": {
    +    "STM32F303": {
    +      "arch": "cortex_m4",
    +      "description": "STM32F303",
    +      "properties": {
    +        "cpu.nvic_prio_bits": "3",
    +        "cpu.mpu": "false",
    +        "cpu.fpu": "false",
    +        "cpu.revision": "r1p0",
    +        "cpu.vendor_systick_config": "false",
    +        "cpu.endian": "little",
    +        "cpu.name": "CM4"
    +      },
    +      "children": {
    +        "interrupts": {
    +          "MemManageFault": {
    +            "index": -12
    +          },
    +          "BusFault": {
    +            "index": -11
    +          },
    +          "UsageFault": {
    +            "index": -10
    +          },
    +          "DebugMonitor": {
    +            "index": -4
    +          },
    +          "NMI": {
    +            "index": -14
    +          },
    +          "HardFault": {
    +            "index": -13
    +          },
    +          "SVCall": {
    +            "index": -5
    +          },
    +          "PendSV": {
    +            "index": -2
    +          },
    +          "SysTick": {
    +            "index": -1
    +          },
    +          "EXTI2_TSC": {
    +            "index": 8,
    +            "description": "EXTI Line2 and Touch sensing\n        interrupts"
    +          },
    +          "FLASH": {
    +            "index": 4,
    +            "description": "Flash global interrupt"
    +          },
    +          "RCC": {
    +            "index": 5,
    +            "description": "RCC global interrupt"
    +          },
    +          "DMA1_CH1": {
    +            "index": 11,
    +            "description": "DMA1 channel 1 interrupt"
    +          },
    +          "DMA2_CH1": {
    +            "index": 56,
    +            "description": "DMA2 channel1 global interrupt"
    +          },
    +          "TIM2": {
    +            "index": 28,
    +            "description": "TIM2 global interrupt"
    +          },
    +          "TIM3": {
    +            "index": 29,
    +            "description": "TIM3 global interrupt"
    +          },
    +          "TIM4": {
    +            "index": 30,
    +            "description": "TIM4 global interrupt"
    +          },
    +          "TIM1_BRK_TIM15": {
    +            "index": 24,
    +            "description": "TIM1 Break/TIM15 global\n        interruts"
    +          },
    +          "TIM1_UP_TIM16": {
    +            "index": 25,
    +            "description": "TIM1 Update/TIM16 global\n        interrupts"
    +          },
    +          "TIM1_TRG_COM_TIM17": {
    +            "index": 26,
    +            "description": "TIM1 trigger and commutation/TIM17\n        interrupts"
    +          },
    +          "USART1_EXTI25": {
    +            "index": 37,
    +            "description": "USART1 global interrupt and EXTI Line 25\n        interrupt"
    +          },
    +          "USART2_EXTI26": {
    +            "index": 38,
    +            "description": "USART2 global interrupt and EXTI Line 26\n        interrupt"
    +          },
    +          "USART3_EXTI28": {
    +            "index": 39,
    +            "description": "USART3 global interrupt and EXTI Line 28\n        interrupt"
    +          },
    +          "UART4_EXTI34": {
    +            "index": 52,
    +            "description": "UART4 global and EXTI Line 34\n        interrupts"
    +          },
    +          "UART5_EXTI35": {
    +            "index": 53,
    +            "description": "UART5 global and EXTI Line 35\n        interrupts"
    +          },
    +          "SPI1": {
    +            "index": 35,
    +            "description": "SPI1 global interrupt"
    +          },
    +          "SPI2": {
    +            "index": 36,
    +            "description": "SPI2 global interrupt"
    +          },
    +          "SPI3": {
    +            "index": 51,
    +            "description": "SPI3 global interrupt"
    +          },
    +          "TAMP_STAMP": {
    +            "index": 2,
    +            "description": "Tamper and TimeStamp interrupts"
    +          },
    +          "PVD": {
    +            "index": 1,
    +            "description": "PVD through EXTI line detection\n        interrupt"
    +          },
    +          "USB_HP_CAN_TX": {
    +            "index": 19,
    +            "description": "USB High Priority/CAN_TX\n        interrupts"
    +          },
    +          "USB_WKUP": {
    +            "index": 42,
    +            "description": "USB wakeup from Suspend"
    +          },
    +          "I2C1_EV_EXTI23": {
    +            "index": 31,
    +            "description": "I2C1 event interrupt and EXTI Line23\n        interrupt"
    +          },
    +          "I2C2_EV_EXTI24": {
    +            "index": 33,
    +            "description": "I2C2 event interrupt & EXTI Line24\n        interrupt"
    +          },
    +          "WWDG": {
    +            "index": 0,
    +            "description": "Window Watchdog interrupt"
    +          },
    +          "RTC_WKUP": {
    +            "index": 3,
    +            "description": "RTC Wakeup interrupt through the EXTI\n        line"
    +          },
    +          "TIM6_DACUNDER": {
    +            "index": 54,
    +            "description": "TIM6 global and DAC12 underrun\n        interrupts"
    +          },
    +          "TIM7": {
    +            "index": 55,
    +            "description": "TIM7 global interrupt"
    +          },
    +          "TIM1_CC": {
    +            "index": 27,
    +            "description": "TIM1 capture compare interrupt"
    +          },
    +          "TIM8_BRK": {
    +            "index": 43,
    +            "description": "TIM8 break interrupt"
    +          },
    +          "ADC1_2": {
    +            "index": 18,
    +            "description": "ADC1 and ADC2 global interrupt"
    +          },
    +          "ADC3": {
    +            "index": 47,
    +            "description": "ADC3 global interrupt"
    +          },
    +          "ADC4": {
    +            "index": 61,
    +            "description": "ADC4 global interrupt"
    +          },
    +          "COMP123": {
    +            "index": 64,
    +            "description": "COMP1 & COMP2 & COMP3 interrupts\n        combined with EXTI Lines 21, 22 and 29\n        interrupts"
    +          },
    +          "FMC": {
    +            "index": 48,
    +            "description": "FSMC global interrupt"
    +          },
    +          "FPU": {
    +            "index": 81,
    +            "description": "Floating point unit interrupt"
    +          }
    +        },
    +        "peripheral_instances": {
    +          "GPIOA": {
    +            "description": "General-purpose I/Os",
    +            "offset": 1207959552,
    +            "type": "types.peripherals.GPIOA"
    +          },
    +          "GPIOB": {
    +            "description": "General-purpose I/Os",
    +            "offset": 1207960576,
    +            "type": "types.peripherals.GPIOB"
    +          },
    +          "GPIOC": {
    +            "offset": 1207961600,
    +            "type": "types.peripherals.GPIOB"
    +          },
    +          "GPIOD": {
    +            "offset": 1207962624,
    +            "type": "types.peripherals.GPIOB"
    +          },
    +          "GPIOE": {
    +            "offset": 1207963648,
    +            "type": "types.peripherals.GPIOB"
    +          },
    +          "GPIOF": {
    +            "offset": 1207964672,
    +            "type": "types.peripherals.GPIOB"
    +          },
    +          "GPIOG": {
    +            "offset": 1207965696,
    +            "type": "types.peripherals.GPIOB"
    +          },
    +          "GPIOH": {
    +            "offset": 1207966720,
    +            "type": "types.peripherals.GPIOB"
    +          },
    +          "TSC": {
    +            "description": "Touch sensing controller",
    +            "offset": 1073889280,
    +            "type": "types.peripherals.TSC"
    +          },
    +          "CRC": {
    +            "description": "cyclic redundancy check calculation\n      unit",
    +            "offset": 1073885184,
    +            "type": "types.peripherals.CRC"
    +          },
    +          "Flash": {
    +            "description": "Flash",
    +            "offset": 1073881088,
    +            "type": "types.peripherals.Flash"
    +          },
    +          "RCC": {
    +            "description": "Reset and clock control",
    +            "offset": 1073876992,
    +            "type": "types.peripherals.RCC"
    +          },
    +          "DMA1": {
    +            "description": "DMA controller 1",
    +            "offset": 1073872896,
    +            "type": "types.peripherals.DMA1"
    +          },
    +          "DMA2": {
    +            "offset": 1073873920,
    +            "type": "types.peripherals.DMA1"
    +          },
    +          "TIM2": {
    +            "description": "General purpose timer",
    +            "offset": 1073741824,
    +            "type": "types.peripherals.TIM2"
    +          },
    +          "TIM3": {
    +            "offset": 1073742848,
    +            "type": "types.peripherals.TIM2"
    +          },
    +          "TIM4": {
    +            "offset": 1073743872,
    +            "type": "types.peripherals.TIM2"
    +          },
    +          "TIM15": {
    +            "description": "General purpose timers",
    +            "offset": 1073823744,
    +            "type": "types.peripherals.TIM15"
    +          },
    +          "TIM16": {
    +            "description": "General-purpose-timers",
    +            "offset": 1073824768,
    +            "type": "types.peripherals.TIM16"
    +          },
    +          "TIM17": {
    +            "description": "General purpose timer",
    +            "offset": 1073825792,
    +            "type": "types.peripherals.TIM17"
    +          },
    +          "USART1": {
    +            "description": "Universal synchronous asynchronous receiver\n      transmitter",
    +            "offset": 1073821696,
    +            "type": "types.peripherals.USART1"
    +          },
    +          "USART2": {
    +            "offset": 1073759232,
    +            "type": "types.peripherals.USART1"
    +          },
    +          "USART3": {
    +            "offset": 1073760256,
    +            "type": "types.peripherals.USART1"
    +          },
    +          "UART4": {
    +            "offset": 1073761280,
    +            "type": "types.peripherals.USART1"
    +          },
    +          "UART5": {
    +            "offset": 1073762304,
    +            "type": "types.peripherals.USART1"
    +          },
    +          "SPI1": {
    +            "description": "Serial peripheral interface/Inter-IC\n      sound",
    +            "offset": 1073819648,
    +            "type": "types.peripherals.SPI1"
    +          },
    +          "SPI2": {
    +            "offset": 1073756160,
    +            "type": "types.peripherals.SPI1"
    +          },
    +          "SPI3": {
    +            "offset": 1073757184,
    +            "type": "types.peripherals.SPI1"
    +          },
    +          "I2S2ext": {
    +            "offset": 1073755136,
    +            "type": "types.peripherals.SPI1"
    +          },
    +          "I2S3ext": {
    +            "offset": 1073758208,
    +            "type": "types.peripherals.SPI1"
    +          },
    +          "SPI4": {
    +            "offset": 1073822720,
    +            "type": "types.peripherals.SPI1"
    +          },
    +          "EXTI": {
    +            "description": "External interrupt/event\n      controller",
    +            "offset": 1073808384,
    +            "type": "types.peripherals.EXTI"
    +          },
    +          "PWR": {
    +            "description": "Power control",
    +            "offset": 1073770496,
    +            "type": "types.peripherals.PWR"
    +          },
    +          "CAN": {
    +            "description": "Controller area network",
    +            "offset": 1073767424,
    +            "type": "types.peripherals.CAN"
    +          },
    +          "USB_FS": {
    +            "description": "Universal serial bus full-speed device\n      interface",
    +            "offset": 1073765376,
    +            "type": "types.peripherals.USB_FS"
    +          },
    +          "I2C1": {
    +            "description": "Inter-integrated circuit",
    +            "offset": 1073763328,
    +            "type": "types.peripherals.I2C1"
    +          },
    +          "I2C2": {
    +            "offset": 1073764352,
    +            "type": "types.peripherals.I2C1"
    +          },
    +          "I2C3": {
    +            "offset": 1073772544,
    +            "type": "types.peripherals.I2C1"
    +          },
    +          "IWDG": {
    +            "description": "Independent watchdog",
    +            "offset": 1073754112,
    +            "type": "types.peripherals.IWDG"
    +          },
    +          "WWDG": {
    +            "description": "Window watchdog",
    +            "offset": 1073753088,
    +            "type": "types.peripherals.WWDG"
    +          },
    +          "RTC": {
    +            "description": "Real-time clock",
    +            "offset": 1073752064,
    +            "type": "types.peripherals.RTC"
    +          },
    +          "TIM6": {
    +            "description": "Basic timers",
    +            "offset": 1073745920,
    +            "type": "types.peripherals.TIM6"
    +          },
    +          "TIM7": {
    +            "offset": 1073746944,
    +            "type": "types.peripherals.TIM6"
    +          },
    +          "DAC": {
    +            "description": "Digital-to-analog converter",
    +            "offset": 1073771520,
    +            "type": "types.peripherals.DAC"
    +          },
    +          "DBGMCU": {
    +            "description": "Debug support",
    +            "offset": 3758366720,
    +            "type": "types.peripherals.DBGMCU"
    +          },
    +          "TIM1": {
    +            "description": "Advanced timer",
    +            "offset": 1073818624,
    +            "type": "types.peripherals.TIM1"
    +          },
    +          "TIM20": {
    +            "offset": 1073827840,
    +            "type": "types.peripherals.TIM1"
    +          },
    +          "TIM8": {
    +            "description": "Advanced-timers",
    +            "offset": 1073820672,
    +            "type": "types.peripherals.TIM8"
    +          },
    +          "ADC1": {
    +            "description": "Analog-to-Digital Converter",
    +            "offset": 1342177280,
    +            "type": "types.peripherals.ADC1"
    +          },
    +          "ADC2": {
    +            "offset": 1342177536,
    +            "type": "types.peripherals.ADC1"
    +          },
    +          "ADC3": {
    +            "offset": 1342178304,
    +            "type": "types.peripherals.ADC1"
    +          },
    +          "ADC4": {
    +            "offset": 1342178560,
    +            "type": "types.peripherals.ADC1"
    +          },
    +          "ADC1_2": {
    +            "description": "Analog-to-Digital Converter",
    +            "offset": 1342178048,
    +            "type": "types.peripherals.ADC1_2"
    +          },
    +          "ADC3_4": {
    +            "offset": 1342179072,
    +            "type": "types.peripherals.ADC1_2"
    +          },
    +          "SYSCFG_COMP_OPAMP": {
    +            "description": "System configuration controller _Comparator and\n      Operational amplifier",
    +            "offset": 1073807360,
    +            "type": "types.peripherals.SYSCFG_COMP_OPAMP"
    +          },
    +          "FMC": {
    +            "description": "Flexible memory controller",
    +            "offset": 2684355584,
    +            "type": "types.peripherals.FMC"
    +          },
    +          "NVIC": {
    +            "description": "Nested Vectored Interrupt\n      Controller",
    +            "offset": 3758153984,
    +            "type": "types.peripherals.NVIC"
    +          },
    +          "FPU": {
    +            "description": "Floting point unit",
    +            "offset": 3758157620,
    +            "type": "types.peripherals.FPU"
    +          },
    +          "MPU": {
    +            "description": "Memory protection unit",
    +            "offset": 3758157200,
    +            "type": "types.peripherals.MPU"
    +          },
    +          "STK": {
    +            "description": "SysTick timer",
    +            "offset": 3758153744,
    +            "type": "types.peripherals.STK"
    +          },
    +          "SCB": {
    +            "description": "System control block",
    +            "offset": 3758157056,
    +            "type": "types.peripherals.SCB"
    +          },
    +          "NVIC_STIR": {
    +            "description": "Nested vectored interrupt\n      controller",
    +            "offset": 3758157568,
    +            "type": "types.peripherals.NVIC_STIR"
    +          },
    +          "FPU_CPACR": {
    +            "description": "Floating point unit CPACR",
    +            "offset": 3758157192,
    +            "type": "types.peripherals.FPU_CPACR"
    +          },
    +          "SCB_ACTRL": {
    +            "description": "System control block ACTLR",
    +            "offset": 3758153736,
    +            "type": "types.peripherals.SCB_ACTRL"
    +          }
    +        }
    +      }
    +    }
    +  }
    +}
    \ No newline at end of file
    diff --git a/src/chips/STM32F303.zig b/src/chips/STM32F303.zig
    new file mode 100644
    index 000000000..4bb914c29
    --- /dev/null
    +++ b/src/chips/STM32F303.zig
    @@ -0,0 +1,13076 @@
    +const micro = @import("microzig");
    +const mmio = micro.mmio;
    +
    +pub const devices = struct {
    +    ///  STM32F303
    +    pub const STM32F303 = struct {
    +        pub const properties = struct {
    +            pub const @"cpu.nvic_prio_bits" = "3";
    +            pub const @"cpu.mpu" = "false";
    +            pub const @"cpu.fpu" = "false";
    +            pub const @"cpu.revision" = "r1p0";
    +            pub const @"cpu.vendor_systick_config" = "false";
    +            pub const @"cpu.endian" = "little";
    +            pub const @"cpu.name" = "CM4";
    +        };
    +
    +        pub const VectorTable = extern struct {
    +            const Handler = micro.interrupt.Handler;
    +            const unhandled = micro.interrupt.unhandled;
    +
    +            initial_stack_pointer: u32,
    +            Reset: Handler = unhandled,
    +            NMI: Handler = unhandled,
    +            HardFault: Handler = unhandled,
    +            MemManageFault: Handler = unhandled,
    +            BusFault: Handler = unhandled,
    +            UsageFault: Handler = unhandled,
    +            reserved5: [4]u32 = undefined,
    +            SVCall: Handler = unhandled,
    +            DebugMonitor: Handler = unhandled,
    +            reserved11: [1]u32 = undefined,
    +            PendSV: Handler = unhandled,
    +            SysTick: Handler = unhandled,
    +            ///  Window Watchdog interrupt
    +            WWDG: Handler = unhandled,
    +            ///  PVD through EXTI line detection interrupt
    +            PVD: Handler = unhandled,
    +            ///  Tamper and TimeStamp interrupts
    +            TAMP_STAMP: Handler = unhandled,
    +            ///  RTC Wakeup interrupt through the EXTI line
    +            RTC_WKUP: Handler = unhandled,
    +            ///  Flash global interrupt
    +            FLASH: Handler = unhandled,
    +            ///  RCC global interrupt
    +            RCC: Handler = unhandled,
    +            reserved20: [2]u32 = undefined,
    +            ///  EXTI Line2 and Touch sensing interrupts
    +            EXTI2_TSC: Handler = unhandled,
    +            reserved23: [2]u32 = undefined,
    +            ///  DMA1 channel 1 interrupt
    +            DMA1_CH1: Handler = unhandled,
    +            reserved26: [6]u32 = undefined,
    +            ///  ADC1 and ADC2 global interrupt
    +            ADC1_2: Handler = unhandled,
    +            ///  USB High Priority/CAN_TX interrupts
    +            USB_HP_CAN_TX: Handler = unhandled,
    +            reserved34: [4]u32 = undefined,
    +            ///  TIM1 Break/TIM15 global interruts
    +            TIM1_BRK_TIM15: Handler = unhandled,
    +            ///  TIM1 Update/TIM16 global interrupts
    +            TIM1_UP_TIM16: Handler = unhandled,
    +            ///  TIM1 trigger and commutation/TIM17 interrupts
    +            TIM1_TRG_COM_TIM17: Handler = unhandled,
    +            ///  TIM1 capture compare interrupt
    +            TIM1_CC: Handler = unhandled,
    +            ///  TIM2 global interrupt
    +            TIM2: Handler = unhandled,
    +            ///  TIM3 global interrupt
    +            TIM3: Handler = unhandled,
    +            ///  TIM4 global interrupt
    +            TIM4: Handler = unhandled,
    +            ///  I2C1 event interrupt and EXTI Line23 interrupt
    +            I2C1_EV_EXTI23: Handler = unhandled,
    +            reserved46: [1]u32 = undefined,
    +            ///  I2C2 event interrupt & EXTI Line24 interrupt
    +            I2C2_EV_EXTI24: Handler = unhandled,
    +            reserved48: [1]u32 = undefined,
    +            ///  SPI1 global interrupt
    +            SPI1: Handler = unhandled,
    +            ///  SPI2 global interrupt
    +            SPI2: Handler = unhandled,
    +            ///  USART1 global interrupt and EXTI Line 25 interrupt
    +            USART1_EXTI25: Handler = unhandled,
    +            ///  USART2 global interrupt and EXTI Line 26 interrupt
    +            USART2_EXTI26: Handler = unhandled,
    +            ///  USART3 global interrupt and EXTI Line 28 interrupt
    +            USART3_EXTI28: Handler = unhandled,
    +            reserved54: [2]u32 = undefined,
    +            ///  USB wakeup from Suspend
    +            USB_WKUP: Handler = unhandled,
    +            ///  TIM8 break interrupt
    +            TIM8_BRK: Handler = unhandled,
    +            reserved58: [3]u32 = undefined,
    +            ///  ADC3 global interrupt
    +            ADC3: Handler = unhandled,
    +            ///  FSMC global interrupt
    +            FMC: Handler = unhandled,
    +            reserved63: [2]u32 = undefined,
    +            ///  SPI3 global interrupt
    +            SPI3: Handler = unhandled,
    +            ///  UART4 global and EXTI Line 34 interrupts
    +            UART4_EXTI34: Handler = unhandled,
    +            ///  UART5 global and EXTI Line 35 interrupts
    +            UART5_EXTI35: Handler = unhandled,
    +            ///  TIM6 global and DAC12 underrun interrupts
    +            TIM6_DACUNDER: Handler = unhandled,
    +            ///  TIM7 global interrupt
    +            TIM7: Handler = unhandled,
    +            ///  DMA2 channel1 global interrupt
    +            DMA2_CH1: Handler = unhandled,
    +            reserved71: [4]u32 = undefined,
    +            ///  ADC4 global interrupt
    +            ADC4: Handler = unhandled,
    +            reserved76: [2]u32 = undefined,
    +            ///  COMP1 & COMP2 & COMP3 interrupts combined with EXTI Lines 21, 22 and 29 interrupts
    +            COMP123: Handler = unhandled,
    +            reserved79: [16]u32 = undefined,
    +            ///  Floating point unit interrupt
    +            FPU: Handler = unhandled,
    +        };
    +
    +        pub const peripherals = struct {
    +            ///  General purpose timer
    +            pub const TIM2 = @ptrCast(*volatile types.TIM2, 0x40000000);
    +            ///  General purpose timer
    +            pub const TIM3 = @ptrCast(*volatile types.TIM2, 0x40000400);
    +            ///  General purpose timer
    +            pub const TIM4 = @ptrCast(*volatile types.TIM2, 0x40000800);
    +            ///  Basic timers
    +            pub const TIM6 = @ptrCast(*volatile types.TIM6, 0x40001000);
    +            ///  Basic timers
    +            pub const TIM7 = @ptrCast(*volatile types.TIM6, 0x40001400);
    +            ///  Real-time clock
    +            pub const RTC = @ptrCast(*volatile types.RTC, 0x40002800);
    +            ///  Window watchdog
    +            pub const WWDG = @ptrCast(*volatile types.WWDG, 0x40002c00);
    +            ///  Independent watchdog
    +            pub const IWDG = @ptrCast(*volatile types.IWDG, 0x40003000);
    +            ///  Serial peripheral interface/Inter-IC sound
    +            pub const I2S2ext = @ptrCast(*volatile types.SPI1, 0x40003400);
    +            ///  Serial peripheral interface/Inter-IC sound
    +            pub const SPI2 = @ptrCast(*volatile types.SPI1, 0x40003800);
    +            ///  Serial peripheral interface/Inter-IC sound
    +            pub const SPI3 = @ptrCast(*volatile types.SPI1, 0x40003c00);
    +            ///  Serial peripheral interface/Inter-IC sound
    +            pub const I2S3ext = @ptrCast(*volatile types.SPI1, 0x40004000);
    +            ///  Universal synchronous asynchronous receiver transmitter
    +            pub const USART2 = @ptrCast(*volatile types.USART1, 0x40004400);
    +            ///  Universal synchronous asynchronous receiver transmitter
    +            pub const USART3 = @ptrCast(*volatile types.USART1, 0x40004800);
    +            ///  Universal synchronous asynchronous receiver transmitter
    +            pub const UART4 = @ptrCast(*volatile types.USART1, 0x40004c00);
    +            ///  Universal synchronous asynchronous receiver transmitter
    +            pub const UART5 = @ptrCast(*volatile types.USART1, 0x40005000);
    +            ///  Inter-integrated circuit
    +            pub const I2C1 = @ptrCast(*volatile types.I2C1, 0x40005400);
    +            ///  Inter-integrated circuit
    +            pub const I2C2 = @ptrCast(*volatile types.I2C1, 0x40005800);
    +            ///  Universal serial bus full-speed device interface
    +            pub const USB_FS = @ptrCast(*volatile types.USB_FS, 0x40005c00);
    +            ///  Controller area network
    +            pub const CAN = @ptrCast(*volatile types.CAN, 0x40006400);
    +            ///  Power control
    +            pub const PWR = @ptrCast(*volatile types.PWR, 0x40007000);
    +            ///  Digital-to-analog converter
    +            pub const DAC = @ptrCast(*volatile types.DAC, 0x40007400);
    +            ///  Inter-integrated circuit
    +            pub const I2C3 = @ptrCast(*volatile types.I2C1, 0x40007800);
    +            ///  System configuration controller _Comparator and Operational amplifier
    +            pub const SYSCFG_COMP_OPAMP = @ptrCast(*volatile types.SYSCFG_COMP_OPAMP, 0x40010000);
    +            ///  External interrupt/event controller
    +            pub const EXTI = @ptrCast(*volatile types.EXTI, 0x40010400);
    +            ///  Advanced timer
    +            pub const TIM1 = @ptrCast(*volatile types.TIM1, 0x40012c00);
    +            ///  Serial peripheral interface/Inter-IC sound
    +            pub const SPI1 = @ptrCast(*volatile types.SPI1, 0x40013000);
    +            ///  Advanced-timers
    +            pub const TIM8 = @ptrCast(*volatile types.TIM8, 0x40013400);
    +            ///  Universal synchronous asynchronous receiver transmitter
    +            pub const USART1 = @ptrCast(*volatile types.USART1, 0x40013800);
    +            ///  Serial peripheral interface/Inter-IC sound
    +            pub const SPI4 = @ptrCast(*volatile types.SPI1, 0x40013c00);
    +            ///  General purpose timers
    +            pub const TIM15 = @ptrCast(*volatile types.TIM15, 0x40014000);
    +            ///  General-purpose-timers
    +            pub const TIM16 = @ptrCast(*volatile types.TIM16, 0x40014400);
    +            ///  General purpose timer
    +            pub const TIM17 = @ptrCast(*volatile types.TIM17, 0x40014800);
    +            ///  Advanced timer
    +            pub const TIM20 = @ptrCast(*volatile types.TIM1, 0x40015000);
    +            ///  DMA controller 1
    +            pub const DMA1 = @ptrCast(*volatile types.DMA1, 0x40020000);
    +            ///  DMA controller 1
    +            pub const DMA2 = @ptrCast(*volatile types.DMA1, 0x40020400);
    +            ///  Reset and clock control
    +            pub const RCC = @ptrCast(*volatile types.RCC, 0x40021000);
    +            ///  Flash
    +            pub const Flash = @ptrCast(*volatile types.Flash, 0x40022000);
    +            ///  cyclic redundancy check calculation unit
    +            pub const CRC = @ptrCast(*volatile types.CRC, 0x40023000);
    +            ///  Touch sensing controller
    +            pub const TSC = @ptrCast(*volatile types.TSC, 0x40024000);
    +            ///  General-purpose I/Os
    +            pub const GPIOA = @ptrCast(*volatile types.GPIOA, 0x48000000);
    +            ///  General-purpose I/Os
    +            pub const GPIOB = @ptrCast(*volatile types.GPIOB, 0x48000400);
    +            ///  General-purpose I/Os
    +            pub const GPIOC = @ptrCast(*volatile types.GPIOB, 0x48000800);
    +            ///  General-purpose I/Os
    +            pub const GPIOD = @ptrCast(*volatile types.GPIOB, 0x48000c00);
    +            ///  General-purpose I/Os
    +            pub const GPIOE = @ptrCast(*volatile types.GPIOB, 0x48001000);
    +            ///  General-purpose I/Os
    +            pub const GPIOF = @ptrCast(*volatile types.GPIOB, 0x48001400);
    +            ///  General-purpose I/Os
    +            pub const GPIOG = @ptrCast(*volatile types.GPIOB, 0x48001800);
    +            ///  General-purpose I/Os
    +            pub const GPIOH = @ptrCast(*volatile types.GPIOB, 0x48001c00);
    +            ///  Analog-to-Digital Converter
    +            pub const ADC1 = @ptrCast(*volatile types.ADC1, 0x50000000);
    +            ///  Analog-to-Digital Converter
    +            pub const ADC2 = @ptrCast(*volatile types.ADC1, 0x50000100);
    +            ///  Analog-to-Digital Converter
    +            pub const ADC1_2 = @ptrCast(*volatile types.ADC1_2, 0x50000300);
    +            ///  Analog-to-Digital Converter
    +            pub const ADC3 = @ptrCast(*volatile types.ADC1, 0x50000400);
    +            ///  Analog-to-Digital Converter
    +            pub const ADC4 = @ptrCast(*volatile types.ADC1, 0x50000500);
    +            ///  Analog-to-Digital Converter
    +            pub const ADC3_4 = @ptrCast(*volatile types.ADC1_2, 0x50000700);
    +            ///  Flexible memory controller
    +            pub const FMC = @ptrCast(*volatile types.FMC, 0xa0000400);
    +            ///  System control block ACTLR
    +            pub const SCB_ACTRL = @ptrCast(*volatile types.SCB_ACTRL, 0xe000e008);
    +            ///  SysTick timer
    +            pub const STK = @ptrCast(*volatile types.STK, 0xe000e010);
    +            ///  Nested Vectored Interrupt Controller
    +            pub const NVIC = @ptrCast(*volatile types.NVIC, 0xe000e100);
    +            ///  System control block
    +            pub const SCB = @ptrCast(*volatile types.SCB, 0xe000ed00);
    +            ///  Floating point unit CPACR
    +            pub const FPU_CPACR = @ptrCast(*volatile types.FPU_CPACR, 0xe000ed88);
    +            ///  Memory protection unit
    +            pub const MPU = @ptrCast(*volatile types.MPU, 0xe000ed90);
    +            ///  Nested vectored interrupt controller
    +            pub const NVIC_STIR = @ptrCast(*volatile types.NVIC_STIR, 0xe000ef00);
    +            ///  Floting point unit
    +            pub const FPU = @ptrCast(*volatile types.FPU, 0xe000ef34);
    +            ///  Debug support
    +            pub const DBGMCU = @ptrCast(*volatile types.DBGMCU, 0xe0042000);
    +        };
    +    };
    +};
    +
    +pub const types = struct {
    +    ///  General-purpose I/Os
    +    pub const GPIOA = extern struct {
    +        ///  GPIO port mode register
    +        MODER: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER0: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER1: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER2: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER3: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER4: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER5: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER6: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER7: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER8: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER9: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER10: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER11: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER12: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER13: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER14: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER15: u2,
    +        }),
    +        ///  GPIO port output type register
    +        OTYPER: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            OT0: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT1: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT2: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT3: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT4: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT5: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT6: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT7: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT8: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT9: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT10: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT11: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT12: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT13: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT14: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT15: u1,
    +            padding: u16,
    +        }),
    +        ///  GPIO port output speed register
    +        OSPEEDR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR0: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR1: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR2: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR3: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR4: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR5: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR6: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR7: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR8: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR9: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR10: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR11: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR12: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR13: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR14: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR15: u2,
    +        }),
    +        ///  GPIO port pull-up/pull-down register
    +        PUPDR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR0: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR1: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR2: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR3: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR4: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR5: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR6: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR7: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR8: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR9: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR10: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR11: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR12: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR13: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR14: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR15: u2,
    +        }),
    +        ///  GPIO port input data register
    +        IDR: mmio.Mmio(packed struct(u32) {
    +            ///  Port input data (y = 0..15)
    +            IDR0: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR1: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR2: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR3: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR4: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR5: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR6: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR7: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR8: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR9: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR10: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR11: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR12: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR13: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR14: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR15: u1,
    +            padding: u16,
    +        }),
    +        ///  GPIO port output data register
    +        ODR: mmio.Mmio(packed struct(u32) {
    +            ///  Port output data (y = 0..15)
    +            ODR0: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR1: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR2: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR3: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR4: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR5: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR6: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR7: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR8: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR9: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR10: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR11: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR12: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR13: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR14: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR15: u1,
    +            padding: u16,
    +        }),
    +        ///  GPIO port bit set/reset register
    +        BSRR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x set bit y (y= 0..15)
    +            BS0: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS1: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS2: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS3: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS4: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS5: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS6: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS7: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS8: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS9: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS10: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS11: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS12: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS13: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS14: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS15: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BR0: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR1: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR2: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR3: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR4: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR5: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR6: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR7: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR8: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR9: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR10: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR11: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR12: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR13: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR14: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR15: u1,
    +        }),
    +        ///  GPIO port configuration lock register
    +        LCKR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK0: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK1: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK2: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK3: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK4: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK5: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK6: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK7: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK8: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK9: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK10: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK11: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK12: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK13: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK14: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK15: u1,
    +            ///  Lok Key
    +            LCKK: u1,
    +            padding: u15,
    +        }),
    +        ///  GPIO alternate function low register
    +        AFRL: mmio.Mmio(packed struct(u32) {
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL0: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL1: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL2: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL3: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL4: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL5: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL6: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL7: u4,
    +        }),
    +        ///  GPIO alternate function high register
    +        AFRH: mmio.Mmio(packed struct(u32) {
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH8: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH9: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH10: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH11: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH12: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH13: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH14: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH15: u4,
    +        }),
    +        ///  Port bit reset register
    +        BRR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x Reset bit y
    +            BR0: u1,
    +            ///  Port x Reset bit y
    +            BR1: u1,
    +            ///  Port x Reset bit y
    +            BR2: u1,
    +            ///  Port x Reset bit y
    +            BR3: u1,
    +            ///  Port x Reset bit y
    +            BR4: u1,
    +            ///  Port x Reset bit y
    +            BR5: u1,
    +            ///  Port x Reset bit y
    +            BR6: u1,
    +            ///  Port x Reset bit y
    +            BR7: u1,
    +            ///  Port x Reset bit y
    +            BR8: u1,
    +            ///  Port x Reset bit y
    +            BR9: u1,
    +            ///  Port x Reset bit y
    +            BR10: u1,
    +            ///  Port x Reset bit y
    +            BR11: u1,
    +            ///  Port x Reset bit y
    +            BR12: u1,
    +            ///  Port x Reset bit y
    +            BR13: u1,
    +            ///  Port x Reset bit y
    +            BR14: u1,
    +            ///  Port x Reset bit y
    +            BR15: u1,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  General-purpose I/Os
    +    pub const GPIOB = extern struct {
    +        ///  GPIO port mode register
    +        MODER: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER0: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER1: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER2: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER3: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER4: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER5: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER6: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER7: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER8: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER9: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER10: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER11: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER12: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER13: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER14: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER15: u2,
    +        }),
    +        ///  GPIO port output type register
    +        OTYPER: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bit 0
    +            OT0: u1,
    +            ///  Port x configuration bit 1
    +            OT1: u1,
    +            ///  Port x configuration bit 2
    +            OT2: u1,
    +            ///  Port x configuration bit 3
    +            OT3: u1,
    +            ///  Port x configuration bit 4
    +            OT4: u1,
    +            ///  Port x configuration bit 5
    +            OT5: u1,
    +            ///  Port x configuration bit 6
    +            OT6: u1,
    +            ///  Port x configuration bit 7
    +            OT7: u1,
    +            ///  Port x configuration bit 8
    +            OT8: u1,
    +            ///  Port x configuration bit 9
    +            OT9: u1,
    +            ///  Port x configuration bit 10
    +            OT10: u1,
    +            ///  Port x configuration bit 11
    +            OT11: u1,
    +            ///  Port x configuration bit 12
    +            OT12: u1,
    +            ///  Port x configuration bit 13
    +            OT13: u1,
    +            ///  Port x configuration bit 14
    +            OT14: u1,
    +            ///  Port x configuration bit 15
    +            OT15: u1,
    +            padding: u16,
    +        }),
    +        ///  GPIO port output speed register
    +        OSPEEDR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR0: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR1: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR2: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR3: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR4: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR5: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR6: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR7: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR8: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR9: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR10: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR11: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR12: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR13: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR14: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR15: u2,
    +        }),
    +        ///  GPIO port pull-up/pull-down register
    +        PUPDR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR0: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR1: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR2: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR3: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR4: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR5: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR6: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR7: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR8: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR9: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR10: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR11: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR12: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR13: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR14: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR15: u2,
    +        }),
    +        ///  GPIO port input data register
    +        IDR: mmio.Mmio(packed struct(u32) {
    +            ///  Port input data (y = 0..15)
    +            IDR0: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR1: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR2: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR3: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR4: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR5: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR6: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR7: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR8: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR9: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR10: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR11: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR12: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR13: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR14: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR15: u1,
    +            padding: u16,
    +        }),
    +        ///  GPIO port output data register
    +        ODR: mmio.Mmio(packed struct(u32) {
    +            ///  Port output data (y = 0..15)
    +            ODR0: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR1: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR2: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR3: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR4: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR5: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR6: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR7: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR8: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR9: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR10: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR11: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR12: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR13: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR14: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR15: u1,
    +            padding: u16,
    +        }),
    +        ///  GPIO port bit set/reset register
    +        BSRR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x set bit y (y= 0..15)
    +            BS0: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS1: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS2: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS3: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS4: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS5: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS6: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS7: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS8: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS9: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS10: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS11: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS12: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS13: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS14: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS15: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BR0: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR1: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR2: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR3: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR4: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR5: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR6: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR7: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR8: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR9: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR10: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR11: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR12: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR13: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR14: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR15: u1,
    +        }),
    +        ///  GPIO port configuration lock register
    +        LCKR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK0: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK1: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK2: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK3: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK4: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK5: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK6: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK7: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK8: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK9: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK10: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK11: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK12: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK13: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK14: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK15: u1,
    +            ///  Lok Key
    +            LCKK: u1,
    +            padding: u15,
    +        }),
    +        ///  GPIO alternate function low register
    +        AFRL: mmio.Mmio(packed struct(u32) {
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL0: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL1: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL2: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL3: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL4: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL5: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL6: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL7: u4,
    +        }),
    +        ///  GPIO alternate function high register
    +        AFRH: mmio.Mmio(packed struct(u32) {
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH8: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH9: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH10: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH11: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH12: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH13: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH14: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH15: u4,
    +        }),
    +        ///  Port bit reset register
    +        BRR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x Reset bit y
    +            BR0: u1,
    +            ///  Port x Reset bit y
    +            BR1: u1,
    +            ///  Port x Reset bit y
    +            BR2: u1,
    +            ///  Port x Reset bit y
    +            BR3: u1,
    +            ///  Port x Reset bit y
    +            BR4: u1,
    +            ///  Port x Reset bit y
    +            BR5: u1,
    +            ///  Port x Reset bit y
    +            BR6: u1,
    +            ///  Port x Reset bit y
    +            BR7: u1,
    +            ///  Port x Reset bit y
    +            BR8: u1,
    +            ///  Port x Reset bit y
    +            BR9: u1,
    +            ///  Port x Reset bit y
    +            BR10: u1,
    +            ///  Port x Reset bit y
    +            BR11: u1,
    +            ///  Port x Reset bit y
    +            BR12: u1,
    +            ///  Port x Reset bit y
    +            BR13: u1,
    +            ///  Port x Reset bit y
    +            BR14: u1,
    +            ///  Port x Reset bit y
    +            BR15: u1,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  System control block ACTLR
    +    pub const SCB_ACTRL = extern struct {
    +        ///  Auxiliary control register
    +        ACTRL: mmio.Mmio(packed struct(u32) {
    +            ///  DISMCYCINT
    +            DISMCYCINT: u1,
    +            ///  DISDEFWBUF
    +            DISDEFWBUF: u1,
    +            ///  DISFOLD
    +            DISFOLD: u1,
    +            reserved8: u5,
    +            ///  DISFPCA
    +            DISFPCA: u1,
    +            ///  DISOOFP
    +            DISOOFP: u1,
    +            padding: u22,
    +        }),
    +    };
    +
    +    ///  Floating point unit CPACR
    +    pub const FPU_CPACR = extern struct {
    +        ///  Coprocessor access control register
    +        CPACR: mmio.Mmio(packed struct(u32) {
    +            reserved20: u20,
    +            ///  CP
    +            CP: u4,
    +            padding: u8,
    +        }),
    +    };
    +
    +    ///  Nested vectored interrupt controller
    +    pub const NVIC_STIR = extern struct {
    +        ///  Software trigger interrupt register
    +        STIR: mmio.Mmio(packed struct(u32) {
    +            ///  Software generated interrupt ID
    +            INTID: u9,
    +            padding: u23,
    +        }),
    +    };
    +
    +    ///  System control block
    +    pub const SCB = extern struct {
    +        ///  CPUID base register
    +        CPUID: mmio.Mmio(packed struct(u32) {
    +            ///  Revision number
    +            Revision: u4,
    +            ///  Part number of the processor
    +            PartNo: u12,
    +            ///  Reads as 0xF
    +            Constant: u4,
    +            ///  Variant number
    +            Variant: u4,
    +            ///  Implementer code
    +            Implementer: u8,
    +        }),
    +        ///  Interrupt control and state register
    +        ICSR: mmio.Mmio(packed struct(u32) {
    +            ///  Active vector
    +            VECTACTIVE: u9,
    +            reserved11: u2,
    +            ///  Return to base level
    +            RETTOBASE: u1,
    +            ///  Pending vector
    +            VECTPENDING: u7,
    +            reserved22: u3,
    +            ///  Interrupt pending flag
    +            ISRPENDING: u1,
    +            reserved25: u2,
    +            ///  SysTick exception clear-pending bit
    +            PENDSTCLR: u1,
    +            ///  SysTick exception set-pending bit
    +            PENDSTSET: u1,
    +            ///  PendSV clear-pending bit
    +            PENDSVCLR: u1,
    +            ///  PendSV set-pending bit
    +            PENDSVSET: u1,
    +            reserved31: u2,
    +            ///  NMI set-pending bit.
    +            NMIPENDSET: u1,
    +        }),
    +        ///  Vector table offset register
    +        VTOR: mmio.Mmio(packed struct(u32) {
    +            reserved9: u9,
    +            ///  Vector table base offset field
    +            TBLOFF: u21,
    +            padding: u2,
    +        }),
    +        ///  Application interrupt and reset control register
    +        AIRCR: mmio.Mmio(packed struct(u32) {
    +            ///  VECTRESET
    +            VECTRESET: u1,
    +            ///  VECTCLRACTIVE
    +            VECTCLRACTIVE: u1,
    +            ///  SYSRESETREQ
    +            SYSRESETREQ: u1,
    +            reserved8: u5,
    +            ///  PRIGROUP
    +            PRIGROUP: u3,
    +            reserved15: u4,
    +            ///  ENDIANESS
    +            ENDIANESS: u1,
    +            ///  Register key
    +            VECTKEYSTAT: u16,
    +        }),
    +        ///  System control register
    +        SCR: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  SLEEPONEXIT
    +            SLEEPONEXIT: u1,
    +            ///  SLEEPDEEP
    +            SLEEPDEEP: u1,
    +            reserved4: u1,
    +            ///  Send Event on Pending bit
    +            SEVEONPEND: u1,
    +            padding: u27,
    +        }),
    +        ///  Configuration and control register
    +        CCR: mmio.Mmio(packed struct(u32) {
    +            ///  Configures how the processor enters Thread mode
    +            NONBASETHRDENA: u1,
    +            ///  USERSETMPEND
    +            USERSETMPEND: u1,
    +            reserved3: u1,
    +            ///  UNALIGN_ TRP
    +            UNALIGN__TRP: u1,
    +            ///  DIV_0_TRP
    +            DIV_0_TRP: u1,
    +            reserved8: u3,
    +            ///  BFHFNMIGN
    +            BFHFNMIGN: u1,
    +            ///  STKALIGN
    +            STKALIGN: u1,
    +            padding: u22,
    +        }),
    +        ///  System handler priority registers
    +        SHPR1: mmio.Mmio(packed struct(u32) {
    +            ///  Priority of system handler 4
    +            PRI_4: u8,
    +            ///  Priority of system handler 5
    +            PRI_5: u8,
    +            ///  Priority of system handler 6
    +            PRI_6: u8,
    +            padding: u8,
    +        }),
    +        ///  System handler priority registers
    +        SHPR2: mmio.Mmio(packed struct(u32) {
    +            reserved24: u24,
    +            ///  Priority of system handler 11
    +            PRI_11: u8,
    +        }),
    +        ///  System handler priority registers
    +        SHPR3: mmio.Mmio(packed struct(u32) {
    +            reserved16: u16,
    +            ///  Priority of system handler 14
    +            PRI_14: u8,
    +            ///  Priority of system handler 15
    +            PRI_15: u8,
    +        }),
    +        ///  System handler control and state register
    +        SHCRS: mmio.Mmio(packed struct(u32) {
    +            ///  Memory management fault exception active bit
    +            MEMFAULTACT: u1,
    +            ///  Bus fault exception active bit
    +            BUSFAULTACT: u1,
    +            reserved3: u1,
    +            ///  Usage fault exception active bit
    +            USGFAULTACT: u1,
    +            reserved7: u3,
    +            ///  SVC call active bit
    +            SVCALLACT: u1,
    +            ///  Debug monitor active bit
    +            MONITORACT: u1,
    +            reserved10: u1,
    +            ///  PendSV exception active bit
    +            PENDSVACT: u1,
    +            ///  SysTick exception active bit
    +            SYSTICKACT: u1,
    +            ///  Usage fault exception pending bit
    +            USGFAULTPENDED: u1,
    +            ///  Memory management fault exception pending bit
    +            MEMFAULTPENDED: u1,
    +            ///  Bus fault exception pending bit
    +            BUSFAULTPENDED: u1,
    +            ///  SVC call pending bit
    +            SVCALLPENDED: u1,
    +            ///  Memory management fault enable bit
    +            MEMFAULTENA: u1,
    +            ///  Bus fault enable bit
    +            BUSFAULTENA: u1,
    +            ///  Usage fault enable bit
    +            USGFAULTENA: u1,
    +            padding: u13,
    +        }),
    +        ///  Configurable fault status register
    +        CFSR_UFSR_BFSR_MMFSR: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  Instruction access violation flag
    +            IACCVIOL: u1,
    +            reserved3: u1,
    +            ///  Memory manager fault on unstacking for a return from exception
    +            MUNSTKERR: u1,
    +            ///  Memory manager fault on stacking for exception entry.
    +            MSTKERR: u1,
    +            ///  MLSPERR
    +            MLSPERR: u1,
    +            reserved7: u1,
    +            ///  Memory Management Fault Address Register (MMAR) valid flag
    +            MMARVALID: u1,
    +            ///  Instruction bus error
    +            IBUSERR: u1,
    +            ///  Precise data bus error
    +            PRECISERR: u1,
    +            ///  Imprecise data bus error
    +            IMPRECISERR: u1,
    +            ///  Bus fault on unstacking for a return from exception
    +            UNSTKERR: u1,
    +            ///  Bus fault on stacking for exception entry
    +            STKERR: u1,
    +            ///  Bus fault on floating-point lazy state preservation
    +            LSPERR: u1,
    +            reserved15: u1,
    +            ///  Bus Fault Address Register (BFAR) valid flag
    +            BFARVALID: u1,
    +            ///  Undefined instruction usage fault
    +            UNDEFINSTR: u1,
    +            ///  Invalid state usage fault
    +            INVSTATE: u1,
    +            ///  Invalid PC load usage fault
    +            INVPC: u1,
    +            ///  No coprocessor usage fault.
    +            NOCP: u1,
    +            reserved24: u4,
    +            ///  Unaligned access usage fault
    +            UNALIGNED: u1,
    +            ///  Divide by zero usage fault
    +            DIVBYZERO: u1,
    +            padding: u6,
    +        }),
    +        ///  Hard fault status register
    +        HFSR: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  Vector table hard fault
    +            VECTTBL: u1,
    +            reserved30: u28,
    +            ///  Forced hard fault
    +            FORCED: u1,
    +            ///  Reserved for Debug use
    +            DEBUG_VT: u1,
    +        }),
    +        reserved52: [4]u8,
    +        ///  Memory management fault address register
    +        MMFAR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory management fault address
    +            MMFAR: u32,
    +        }),
    +        ///  Bus fault address register
    +        BFAR: mmio.Mmio(packed struct(u32) {
    +            ///  Bus fault address
    +            BFAR: u32,
    +        }),
    +        ///  Auxiliary fault status register
    +        AFSR: mmio.Mmio(packed struct(u32) {
    +            ///  Implementation defined
    +            IMPDEF: u32,
    +        }),
    +    };
    +
    +    ///  SysTick timer
    +    pub const STK = extern struct {
    +        ///  SysTick control and status register
    +        CTRL: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            ENABLE: u1,
    +            ///  SysTick exception request enable
    +            TICKINT: u1,
    +            ///  Clock source selection
    +            CLKSOURCE: u1,
    +            reserved16: u13,
    +            ///  COUNTFLAG
    +            COUNTFLAG: u1,
    +            padding: u15,
    +        }),
    +        ///  SysTick reload value register
    +        LOAD: mmio.Mmio(packed struct(u32) {
    +            ///  RELOAD value
    +            RELOAD: u24,
    +            padding: u8,
    +        }),
    +        ///  SysTick current value register
    +        VAL: mmio.Mmio(packed struct(u32) {
    +            ///  Current counter value
    +            CURRENT: u24,
    +            padding: u8,
    +        }),
    +        ///  SysTick calibration value register
    +        CALIB: mmio.Mmio(packed struct(u32) {
    +            ///  Calibration value
    +            TENMS: u24,
    +            reserved30: u6,
    +            ///  SKEW flag: Indicates whether the TENMS value is exact
    +            SKEW: u1,
    +            ///  NOREF flag. Reads as zero
    +            NOREF: u1,
    +        }),
    +    };
    +
    +    ///  Memory protection unit
    +    pub const MPU = extern struct {
    +        ///  MPU type register
    +        MPU_TYPER: mmio.Mmio(packed struct(u32) {
    +            ///  Separate flag
    +            SEPARATE: u1,
    +            reserved8: u7,
    +            ///  Number of MPU data regions
    +            DREGION: u8,
    +            ///  Number of MPU instruction regions
    +            IREGION: u8,
    +            padding: u8,
    +        }),
    +        ///  MPU control register
    +        MPU_CTRL: mmio.Mmio(packed struct(u32) {
    +            ///  Enables the MPU
    +            ENABLE: u1,
    +            ///  Enables the operation of MPU during hard fault
    +            HFNMIENA: u1,
    +            ///  Enable priviliged software access to default memory map
    +            PRIVDEFENA: u1,
    +            padding: u29,
    +        }),
    +        ///  MPU region number register
    +        MPU_RNR: mmio.Mmio(packed struct(u32) {
    +            ///  MPU region
    +            REGION: u8,
    +            padding: u24,
    +        }),
    +        ///  MPU region base address register
    +        MPU_RBAR: mmio.Mmio(packed struct(u32) {
    +            ///  MPU region field
    +            REGION: u4,
    +            ///  MPU region number valid
    +            VALID: u1,
    +            ///  Region base address field
    +            ADDR: u27,
    +        }),
    +        ///  MPU region attribute and size register
    +        MPU_RASR: mmio.Mmio(packed struct(u32) {
    +            ///  Region enable bit.
    +            ENABLE: u1,
    +            ///  Size of the MPU protection region
    +            SIZE: u5,
    +            reserved8: u2,
    +            ///  Subregion disable bits
    +            SRD: u8,
    +            ///  memory attribute
    +            B: u1,
    +            ///  memory attribute
    +            C: u1,
    +            ///  Shareable memory attribute
    +            S: u1,
    +            ///  memory attribute
    +            TEX: u3,
    +            reserved24: u2,
    +            ///  Access permission
    +            AP: u3,
    +            reserved28: u1,
    +            ///  Instruction access disable bit
    +            XN: u1,
    +            padding: u3,
    +        }),
    +    };
    +
    +    ///  Touch sensing controller
    +    pub const TSC = extern struct {
    +        ///  control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  Touch sensing controller enable
    +            TSCE: u1,
    +            ///  Start a new acquisition
    +            START: u1,
    +            ///  Acquisition mode
    +            AM: u1,
    +            ///  Synchronization pin polarity
    +            SYNCPOL: u1,
    +            ///  I/O Default mode
    +            IODEF: u1,
    +            ///  Max count value
    +            MCV: u3,
    +            reserved12: u4,
    +            ///  pulse generator prescaler
    +            PGPSC: u3,
    +            ///  Spread spectrum prescaler
    +            SSPSC: u1,
    +            ///  Spread spectrum enable
    +            SSE: u1,
    +            ///  Spread spectrum deviation
    +            SSD: u7,
    +            ///  Charge transfer pulse low
    +            CTPL: u4,
    +            ///  Charge transfer pulse high
    +            CTPH: u4,
    +        }),
    +        ///  interrupt enable register
    +        IER: mmio.Mmio(packed struct(u32) {
    +            ///  End of acquisition interrupt enable
    +            EOAIE: u1,
    +            ///  Max count error interrupt enable
    +            MCEIE: u1,
    +            padding: u30,
    +        }),
    +        ///  interrupt clear register
    +        ICR: mmio.Mmio(packed struct(u32) {
    +            ///  End of acquisition interrupt clear
    +            EOAIC: u1,
    +            ///  Max count error interrupt clear
    +            MCEIC: u1,
    +            padding: u30,
    +        }),
    +        ///  interrupt status register
    +        ISR: mmio.Mmio(packed struct(u32) {
    +            ///  End of acquisition flag
    +            EOAF: u1,
    +            ///  Max count error flag
    +            MCEF: u1,
    +            padding: u30,
    +        }),
    +        ///  I/O hysteresis control register
    +        IOHCR: mmio.Mmio(packed struct(u32) {
    +            ///  G1_IO1 Schmitt trigger hysteresis mode
    +            G1_IO1: u1,
    +            ///  G1_IO2 Schmitt trigger hysteresis mode
    +            G1_IO2: u1,
    +            ///  G1_IO3 Schmitt trigger hysteresis mode
    +            G1_IO3: u1,
    +            ///  G1_IO4 Schmitt trigger hysteresis mode
    +            G1_IO4: u1,
    +            ///  G2_IO1 Schmitt trigger hysteresis mode
    +            G2_IO1: u1,
    +            ///  G2_IO2 Schmitt trigger hysteresis mode
    +            G2_IO2: u1,
    +            ///  G2_IO3 Schmitt trigger hysteresis mode
    +            G2_IO3: u1,
    +            ///  G2_IO4 Schmitt trigger hysteresis mode
    +            G2_IO4: u1,
    +            ///  G3_IO1 Schmitt trigger hysteresis mode
    +            G3_IO1: u1,
    +            ///  G3_IO2 Schmitt trigger hysteresis mode
    +            G3_IO2: u1,
    +            ///  G3_IO3 Schmitt trigger hysteresis mode
    +            G3_IO3: u1,
    +            ///  G3_IO4 Schmitt trigger hysteresis mode
    +            G3_IO4: u1,
    +            ///  G4_IO1 Schmitt trigger hysteresis mode
    +            G4_IO1: u1,
    +            ///  G4_IO2 Schmitt trigger hysteresis mode
    +            G4_IO2: u1,
    +            ///  G4_IO3 Schmitt trigger hysteresis mode
    +            G4_IO3: u1,
    +            ///  G4_IO4 Schmitt trigger hysteresis mode
    +            G4_IO4: u1,
    +            ///  G5_IO1 Schmitt trigger hysteresis mode
    +            G5_IO1: u1,
    +            ///  G5_IO2 Schmitt trigger hysteresis mode
    +            G5_IO2: u1,
    +            ///  G5_IO3 Schmitt trigger hysteresis mode
    +            G5_IO3: u1,
    +            ///  G5_IO4 Schmitt trigger hysteresis mode
    +            G5_IO4: u1,
    +            ///  G6_IO1 Schmitt trigger hysteresis mode
    +            G6_IO1: u1,
    +            ///  G6_IO2 Schmitt trigger hysteresis mode
    +            G6_IO2: u1,
    +            ///  G6_IO3 Schmitt trigger hysteresis mode
    +            G6_IO3: u1,
    +            ///  G6_IO4 Schmitt trigger hysteresis mode
    +            G6_IO4: u1,
    +            ///  G7_IO1 Schmitt trigger hysteresis mode
    +            G7_IO1: u1,
    +            ///  G7_IO2 Schmitt trigger hysteresis mode
    +            G7_IO2: u1,
    +            ///  G7_IO3 Schmitt trigger hysteresis mode
    +            G7_IO3: u1,
    +            ///  G7_IO4 Schmitt trigger hysteresis mode
    +            G7_IO4: u1,
    +            ///  G8_IO1 Schmitt trigger hysteresis mode
    +            G8_IO1: u1,
    +            ///  G8_IO2 Schmitt trigger hysteresis mode
    +            G8_IO2: u1,
    +            ///  G8_IO3 Schmitt trigger hysteresis mode
    +            G8_IO3: u1,
    +            ///  G8_IO4 Schmitt trigger hysteresis mode
    +            G8_IO4: u1,
    +        }),
    +        reserved24: [4]u8,
    +        ///  I/O analog switch control register
    +        IOASCR: mmio.Mmio(packed struct(u32) {
    +            ///  G1_IO1 analog switch enable
    +            G1_IO1: u1,
    +            ///  G1_IO2 analog switch enable
    +            G1_IO2: u1,
    +            ///  G1_IO3 analog switch enable
    +            G1_IO3: u1,
    +            ///  G1_IO4 analog switch enable
    +            G1_IO4: u1,
    +            ///  G2_IO1 analog switch enable
    +            G2_IO1: u1,
    +            ///  G2_IO2 analog switch enable
    +            G2_IO2: u1,
    +            ///  G2_IO3 analog switch enable
    +            G2_IO3: u1,
    +            ///  G2_IO4 analog switch enable
    +            G2_IO4: u1,
    +            ///  G3_IO1 analog switch enable
    +            G3_IO1: u1,
    +            ///  G3_IO2 analog switch enable
    +            G3_IO2: u1,
    +            ///  G3_IO3 analog switch enable
    +            G3_IO3: u1,
    +            ///  G3_IO4 analog switch enable
    +            G3_IO4: u1,
    +            ///  G4_IO1 analog switch enable
    +            G4_IO1: u1,
    +            ///  G4_IO2 analog switch enable
    +            G4_IO2: u1,
    +            ///  G4_IO3 analog switch enable
    +            G4_IO3: u1,
    +            ///  G4_IO4 analog switch enable
    +            G4_IO4: u1,
    +            ///  G5_IO1 analog switch enable
    +            G5_IO1: u1,
    +            ///  G5_IO2 analog switch enable
    +            G5_IO2: u1,
    +            ///  G5_IO3 analog switch enable
    +            G5_IO3: u1,
    +            ///  G5_IO4 analog switch enable
    +            G5_IO4: u1,
    +            ///  G6_IO1 analog switch enable
    +            G6_IO1: u1,
    +            ///  G6_IO2 analog switch enable
    +            G6_IO2: u1,
    +            ///  G6_IO3 analog switch enable
    +            G6_IO3: u1,
    +            ///  G6_IO4 analog switch enable
    +            G6_IO4: u1,
    +            ///  G7_IO1 analog switch enable
    +            G7_IO1: u1,
    +            ///  G7_IO2 analog switch enable
    +            G7_IO2: u1,
    +            ///  G7_IO3 analog switch enable
    +            G7_IO3: u1,
    +            ///  G7_IO4 analog switch enable
    +            G7_IO4: u1,
    +            ///  G8_IO1 analog switch enable
    +            G8_IO1: u1,
    +            ///  G8_IO2 analog switch enable
    +            G8_IO2: u1,
    +            ///  G8_IO3 analog switch enable
    +            G8_IO3: u1,
    +            ///  G8_IO4 analog switch enable
    +            G8_IO4: u1,
    +        }),
    +        reserved32: [4]u8,
    +        ///  I/O sampling control register
    +        IOSCR: mmio.Mmio(packed struct(u32) {
    +            ///  G1_IO1 sampling mode
    +            G1_IO1: u1,
    +            ///  G1_IO2 sampling mode
    +            G1_IO2: u1,
    +            ///  G1_IO3 sampling mode
    +            G1_IO3: u1,
    +            ///  G1_IO4 sampling mode
    +            G1_IO4: u1,
    +            ///  G2_IO1 sampling mode
    +            G2_IO1: u1,
    +            ///  G2_IO2 sampling mode
    +            G2_IO2: u1,
    +            ///  G2_IO3 sampling mode
    +            G2_IO3: u1,
    +            ///  G2_IO4 sampling mode
    +            G2_IO4: u1,
    +            ///  G3_IO1 sampling mode
    +            G3_IO1: u1,
    +            ///  G3_IO2 sampling mode
    +            G3_IO2: u1,
    +            ///  G3_IO3 sampling mode
    +            G3_IO3: u1,
    +            ///  G3_IO4 sampling mode
    +            G3_IO4: u1,
    +            ///  G4_IO1 sampling mode
    +            G4_IO1: u1,
    +            ///  G4_IO2 sampling mode
    +            G4_IO2: u1,
    +            ///  G4_IO3 sampling mode
    +            G4_IO3: u1,
    +            ///  G4_IO4 sampling mode
    +            G4_IO4: u1,
    +            ///  G5_IO1 sampling mode
    +            G5_IO1: u1,
    +            ///  G5_IO2 sampling mode
    +            G5_IO2: u1,
    +            ///  G5_IO3 sampling mode
    +            G5_IO3: u1,
    +            ///  G5_IO4 sampling mode
    +            G5_IO4: u1,
    +            ///  G6_IO1 sampling mode
    +            G6_IO1: u1,
    +            ///  G6_IO2 sampling mode
    +            G6_IO2: u1,
    +            ///  G6_IO3 sampling mode
    +            G6_IO3: u1,
    +            ///  G6_IO4 sampling mode
    +            G6_IO4: u1,
    +            ///  G7_IO1 sampling mode
    +            G7_IO1: u1,
    +            ///  G7_IO2 sampling mode
    +            G7_IO2: u1,
    +            ///  G7_IO3 sampling mode
    +            G7_IO3: u1,
    +            ///  G7_IO4 sampling mode
    +            G7_IO4: u1,
    +            ///  G8_IO1 sampling mode
    +            G8_IO1: u1,
    +            ///  G8_IO2 sampling mode
    +            G8_IO2: u1,
    +            ///  G8_IO3 sampling mode
    +            G8_IO3: u1,
    +            ///  G8_IO4 sampling mode
    +            G8_IO4: u1,
    +        }),
    +        reserved40: [4]u8,
    +        ///  I/O channel control register
    +        IOCCR: mmio.Mmio(packed struct(u32) {
    +            ///  G1_IO1 channel mode
    +            G1_IO1: u1,
    +            ///  G1_IO2 channel mode
    +            G1_IO2: u1,
    +            ///  G1_IO3 channel mode
    +            G1_IO3: u1,
    +            ///  G1_IO4 channel mode
    +            G1_IO4: u1,
    +            ///  G2_IO1 channel mode
    +            G2_IO1: u1,
    +            ///  G2_IO2 channel mode
    +            G2_IO2: u1,
    +            ///  G2_IO3 channel mode
    +            G2_IO3: u1,
    +            ///  G2_IO4 channel mode
    +            G2_IO4: u1,
    +            ///  G3_IO1 channel mode
    +            G3_IO1: u1,
    +            ///  G3_IO2 channel mode
    +            G3_IO2: u1,
    +            ///  G3_IO3 channel mode
    +            G3_IO3: u1,
    +            ///  G3_IO4 channel mode
    +            G3_IO4: u1,
    +            ///  G4_IO1 channel mode
    +            G4_IO1: u1,
    +            ///  G4_IO2 channel mode
    +            G4_IO2: u1,
    +            ///  G4_IO3 channel mode
    +            G4_IO3: u1,
    +            ///  G4_IO4 channel mode
    +            G4_IO4: u1,
    +            ///  G5_IO1 channel mode
    +            G5_IO1: u1,
    +            ///  G5_IO2 channel mode
    +            G5_IO2: u1,
    +            ///  G5_IO3 channel mode
    +            G5_IO3: u1,
    +            ///  G5_IO4 channel mode
    +            G5_IO4: u1,
    +            ///  G6_IO1 channel mode
    +            G6_IO1: u1,
    +            ///  G6_IO2 channel mode
    +            G6_IO2: u1,
    +            ///  G6_IO3 channel mode
    +            G6_IO3: u1,
    +            ///  G6_IO4 channel mode
    +            G6_IO4: u1,
    +            ///  G7_IO1 channel mode
    +            G7_IO1: u1,
    +            ///  G7_IO2 channel mode
    +            G7_IO2: u1,
    +            ///  G7_IO3 channel mode
    +            G7_IO3: u1,
    +            ///  G7_IO4 channel mode
    +            G7_IO4: u1,
    +            ///  G8_IO1 channel mode
    +            G8_IO1: u1,
    +            ///  G8_IO2 channel mode
    +            G8_IO2: u1,
    +            ///  G8_IO3 channel mode
    +            G8_IO3: u1,
    +            ///  G8_IO4 channel mode
    +            G8_IO4: u1,
    +        }),
    +        reserved48: [4]u8,
    +        ///  I/O group control status register
    +        IOGCSR: mmio.Mmio(packed struct(u32) {
    +            ///  Analog I/O group x enable
    +            G1E: u1,
    +            ///  Analog I/O group x enable
    +            G2E: u1,
    +            ///  Analog I/O group x enable
    +            G3E: u1,
    +            ///  Analog I/O group x enable
    +            G4E: u1,
    +            ///  Analog I/O group x enable
    +            G5E: u1,
    +            ///  Analog I/O group x enable
    +            G6E: u1,
    +            ///  Analog I/O group x enable
    +            G7E: u1,
    +            ///  Analog I/O group x enable
    +            G8E: u1,
    +            reserved16: u8,
    +            ///  Analog I/O group x status
    +            G1S: u1,
    +            ///  Analog I/O group x status
    +            G2S: u1,
    +            ///  Analog I/O group x status
    +            G3S: u1,
    +            ///  Analog I/O group x status
    +            G4S: u1,
    +            ///  Analog I/O group x status
    +            G5S: u1,
    +            ///  Analog I/O group x status
    +            G6S: u1,
    +            ///  Analog I/O group x status
    +            G7S: u1,
    +            ///  Analog I/O group x status
    +            G8S: u1,
    +            padding: u8,
    +        }),
    +        ///  I/O group x counter register
    +        IOG1CR: mmio.Mmio(packed struct(u32) {
    +            ///  Counter value
    +            CNT: u14,
    +            padding: u18,
    +        }),
    +        ///  I/O group x counter register
    +        IOG2CR: mmio.Mmio(packed struct(u32) {
    +            ///  Counter value
    +            CNT: u14,
    +            padding: u18,
    +        }),
    +        ///  I/O group x counter register
    +        IOG3CR: mmio.Mmio(packed struct(u32) {
    +            ///  Counter value
    +            CNT: u14,
    +            padding: u18,
    +        }),
    +        ///  I/O group x counter register
    +        IOG4CR: mmio.Mmio(packed struct(u32) {
    +            ///  Counter value
    +            CNT: u14,
    +            padding: u18,
    +        }),
    +        ///  I/O group x counter register
    +        IOG5CR: mmio.Mmio(packed struct(u32) {
    +            ///  Counter value
    +            CNT: u14,
    +            padding: u18,
    +        }),
    +        ///  I/O group x counter register
    +        IOG6CR: mmio.Mmio(packed struct(u32) {
    +            ///  Counter value
    +            CNT: u14,
    +            padding: u18,
    +        }),
    +        ///  I/O group x counter register
    +        IOG7CR: mmio.Mmio(packed struct(u32) {
    +            ///  Counter value
    +            CNT: u14,
    +            padding: u18,
    +        }),
    +        ///  I/O group x counter register
    +        IOG8CR: mmio.Mmio(packed struct(u32) {
    +            ///  Counter value
    +            CNT: u14,
    +            padding: u18,
    +        }),
    +    };
    +
    +    ///  cyclic redundancy check calculation unit
    +    pub const CRC = extern struct {
    +        ///  Data register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  Data register bits
    +            DR: u32,
    +        }),
    +        ///  Independent data register
    +        IDR: mmio.Mmio(packed struct(u32) {
    +            ///  General-purpose 8-bit data register bits
    +            IDR: u8,
    +            padding: u24,
    +        }),
    +        ///  Control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  reset bit
    +            RESET: u1,
    +            reserved3: u2,
    +            ///  Polynomial size
    +            POLYSIZE: u2,
    +            ///  Reverse input data
    +            REV_IN: u2,
    +            ///  Reverse output data
    +            REV_OUT: u1,
    +            padding: u24,
    +        }),
    +        reserved16: [4]u8,
    +        ///  Initial CRC value
    +        INIT: mmio.Mmio(packed struct(u32) {
    +            ///  Programmable initial CRC value
    +            INIT: u32,
    +        }),
    +        ///  CRC polynomial
    +        POL: mmio.Mmio(packed struct(u32) {
    +            ///  Programmable polynomial
    +            POL: u32,
    +        }),
    +    };
    +
    +    ///  Flash
    +    pub const Flash = extern struct {
    +        ///  Flash access control register
    +        ACR: mmio.Mmio(packed struct(u32) {
    +            ///  LATENCY
    +            LATENCY: u3,
    +            reserved4: u1,
    +            ///  PRFTBE
    +            PRFTBE: u1,
    +            ///  PRFTBS
    +            PRFTBS: u1,
    +            padding: u26,
    +        }),
    +        ///  Flash key register
    +        KEYR: mmio.Mmio(packed struct(u32) {
    +            ///  Flash Key
    +            FKEYR: u32,
    +        }),
    +        ///  Flash option key register
    +        OPTKEYR: mmio.Mmio(packed struct(u32) {
    +            ///  Option byte key
    +            OPTKEYR: u32,
    +        }),
    +        ///  Flash status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Busy
    +            BSY: u1,
    +            reserved2: u1,
    +            ///  Programming error
    +            PGERR: u1,
    +            reserved4: u1,
    +            ///  Write protection error
    +            WRPRT: u1,
    +            ///  End of operation
    +            EOP: u1,
    +            padding: u26,
    +        }),
    +        ///  Flash control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  Programming
    +            PG: u1,
    +            ///  Page erase
    +            PER: u1,
    +            ///  Mass erase
    +            MER: u1,
    +            reserved4: u1,
    +            ///  Option byte programming
    +            OPTPG: u1,
    +            ///  Option byte erase
    +            OPTER: u1,
    +            ///  Start
    +            STRT: u1,
    +            ///  Lock
    +            LOCK: u1,
    +            reserved9: u1,
    +            ///  Option bytes write enable
    +            OPTWRE: u1,
    +            ///  Error interrupt enable
    +            ERRIE: u1,
    +            reserved12: u1,
    +            ///  End of operation interrupt enable
    +            EOPIE: u1,
    +            ///  Force option byte loading
    +            FORCE_OPTLOAD: u1,
    +            padding: u18,
    +        }),
    +        ///  Flash address register
    +        AR: mmio.Mmio(packed struct(u32) {
    +            ///  Flash address
    +            FAR: u32,
    +        }),
    +        reserved28: [4]u8,
    +        ///  Option byte register
    +        OBR: mmio.Mmio(packed struct(u32) {
    +            ///  Option byte error
    +            OPTERR: u1,
    +            ///  Level 1 protection status
    +            LEVEL1_PROT: u1,
    +            ///  Level 2 protection status
    +            LEVEL2_PROT: u1,
    +            reserved8: u5,
    +            ///  WDG_SW
    +            WDG_SW: u1,
    +            ///  nRST_STOP
    +            nRST_STOP: u1,
    +            ///  nRST_STDBY
    +            nRST_STDBY: u1,
    +            reserved12: u1,
    +            ///  BOOT1
    +            BOOT1: u1,
    +            ///  VDDA_MONITOR
    +            VDDA_MONITOR: u1,
    +            ///  SRAM_PARITY_CHECK
    +            SRAM_PARITY_CHECK: u1,
    +            reserved16: u1,
    +            ///  Data0
    +            Data0: u8,
    +            ///  Data1
    +            Data1: u8,
    +        }),
    +        ///  Write protection register
    +        WRPR: mmio.Mmio(packed struct(u32) {
    +            ///  Write protect
    +            WRP: u32,
    +        }),
    +    };
    +
    +    ///  Reset and clock control
    +    pub const RCC = extern struct {
    +        ///  Clock control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  Internal High Speed clock enable
    +            HSION: u1,
    +            ///  Internal High Speed clock ready flag
    +            HSIRDY: u1,
    +            reserved3: u1,
    +            ///  Internal High Speed clock trimming
    +            HSITRIM: u5,
    +            ///  Internal High Speed clock Calibration
    +            HSICAL: u8,
    +            ///  External High Speed clock enable
    +            HSEON: u1,
    +            ///  External High Speed clock ready flag
    +            HSERDY: u1,
    +            ///  External High Speed clock Bypass
    +            HSEBYP: u1,
    +            ///  Clock Security System enable
    +            CSSON: u1,
    +            reserved24: u4,
    +            ///  PLL enable
    +            PLLON: u1,
    +            ///  PLL clock ready flag
    +            PLLRDY: u1,
    +            padding: u6,
    +        }),
    +        ///  Clock configuration register (RCC_CFGR)
    +        CFGR: mmio.Mmio(packed struct(u32) {
    +            ///  System clock Switch
    +            SW: u2,
    +            ///  System Clock Switch Status
    +            SWS: u2,
    +            ///  AHB prescaler
    +            HPRE: u4,
    +            ///  APB Low speed prescaler (APB1)
    +            PPRE1: u3,
    +            ///  APB high speed prescaler (APB2)
    +            PPRE2: u3,
    +            reserved15: u1,
    +            ///  PLL entry clock source
    +            PLLSRC: u2,
    +            ///  HSE divider for PLL entry
    +            PLLXTPRE: u1,
    +            ///  PLL Multiplication Factor
    +            PLLMUL: u4,
    +            ///  USB prescaler
    +            USBPRES: u1,
    +            ///  I2S external clock source selection
    +            I2SSRC: u1,
    +            ///  Microcontroller clock output
    +            MCO: u3,
    +            reserved28: u1,
    +            ///  Microcontroller Clock Output Flag
    +            MCOF: u1,
    +            padding: u3,
    +        }),
    +        ///  Clock interrupt register (RCC_CIR)
    +        CIR: mmio.Mmio(packed struct(u32) {
    +            ///  LSI Ready Interrupt flag
    +            LSIRDYF: u1,
    +            ///  LSE Ready Interrupt flag
    +            LSERDYF: u1,
    +            ///  HSI Ready Interrupt flag
    +            HSIRDYF: u1,
    +            ///  HSE Ready Interrupt flag
    +            HSERDYF: u1,
    +            ///  PLL Ready Interrupt flag
    +            PLLRDYF: u1,
    +            reserved7: u2,
    +            ///  Clock Security System Interrupt flag
    +            CSSF: u1,
    +            ///  LSI Ready Interrupt Enable
    +            LSIRDYIE: u1,
    +            ///  LSE Ready Interrupt Enable
    +            LSERDYIE: u1,
    +            ///  HSI Ready Interrupt Enable
    +            HSIRDYIE: u1,
    +            ///  HSE Ready Interrupt Enable
    +            HSERDYIE: u1,
    +            ///  PLL Ready Interrupt Enable
    +            PLLRDYIE: u1,
    +            reserved16: u3,
    +            ///  LSI Ready Interrupt Clear
    +            LSIRDYC: u1,
    +            ///  LSE Ready Interrupt Clear
    +            LSERDYC: u1,
    +            ///  HSI Ready Interrupt Clear
    +            HSIRDYC: u1,
    +            ///  HSE Ready Interrupt Clear
    +            HSERDYC: u1,
    +            ///  PLL Ready Interrupt Clear
    +            PLLRDYC: u1,
    +            reserved23: u2,
    +            ///  Clock security system interrupt clear
    +            CSSC: u1,
    +            padding: u8,
    +        }),
    +        ///  APB2 peripheral reset register (RCC_APB2RSTR)
    +        APB2RSTR: mmio.Mmio(packed struct(u32) {
    +            ///  SYSCFG and COMP reset
    +            SYSCFGRST: u1,
    +            reserved11: u10,
    +            ///  TIM1 timer reset
    +            TIM1RST: u1,
    +            ///  SPI 1 reset
    +            SPI1RST: u1,
    +            ///  TIM8 timer reset
    +            TIM8RST: u1,
    +            ///  USART1 reset
    +            USART1RST: u1,
    +            reserved16: u1,
    +            ///  TIM15 timer reset
    +            TIM15RST: u1,
    +            ///  TIM16 timer reset
    +            TIM16RST: u1,
    +            ///  TIM17 timer reset
    +            TIM17RST: u1,
    +            padding: u13,
    +        }),
    +        ///  APB1 peripheral reset register (RCC_APB1RSTR)
    +        APB1RSTR: mmio.Mmio(packed struct(u32) {
    +            ///  Timer 2 reset
    +            TIM2RST: u1,
    +            ///  Timer 3 reset
    +            TIM3RST: u1,
    +            ///  Timer 14 reset
    +            TIM4RST: u1,
    +            reserved4: u1,
    +            ///  Timer 6 reset
    +            TIM6RST: u1,
    +            ///  Timer 7 reset
    +            TIM7RST: u1,
    +            reserved11: u5,
    +            ///  Window watchdog reset
    +            WWDGRST: u1,
    +            reserved14: u2,
    +            ///  SPI2 reset
    +            SPI2RST: u1,
    +            ///  SPI3 reset
    +            SPI3RST: u1,
    +            reserved17: u1,
    +            ///  USART 2 reset
    +            USART2RST: u1,
    +            ///  USART3 reset
    +            USART3RST: u1,
    +            ///  UART 4 reset
    +            UART4RST: u1,
    +            ///  UART 5 reset
    +            UART5RST: u1,
    +            ///  I2C1 reset
    +            I2C1RST: u1,
    +            ///  I2C2 reset
    +            I2C2RST: u1,
    +            ///  USB reset
    +            USBRST: u1,
    +            reserved25: u1,
    +            ///  CAN reset
    +            CANRST: u1,
    +            reserved28: u2,
    +            ///  Power interface reset
    +            PWRRST: u1,
    +            ///  DAC interface reset
    +            DACRST: u1,
    +            ///  I2C3 reset
    +            I2C3RST: u1,
    +            padding: u1,
    +        }),
    +        ///  AHB Peripheral Clock enable register (RCC_AHBENR)
    +        AHBENR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA1 clock enable
    +            DMAEN: u1,
    +            ///  DMA2 clock enable
    +            DMA2EN: u1,
    +            ///  SRAM interface clock enable
    +            SRAMEN: u1,
    +            reserved4: u1,
    +            ///  FLITF clock enable
    +            FLITFEN: u1,
    +            ///  FMC clock enable
    +            FMCEN: u1,
    +            ///  CRC clock enable
    +            CRCEN: u1,
    +            reserved16: u9,
    +            ///  IO port H clock enable
    +            IOPHEN: u1,
    +            ///  I/O port A clock enable
    +            IOPAEN: u1,
    +            ///  I/O port B clock enable
    +            IOPBEN: u1,
    +            ///  I/O port C clock enable
    +            IOPCEN: u1,
    +            ///  I/O port D clock enable
    +            IOPDEN: u1,
    +            ///  I/O port E clock enable
    +            IOPEEN: u1,
    +            ///  I/O port F clock enable
    +            IOPFEN: u1,
    +            ///  I/O port G clock enable
    +            IOPGEN: u1,
    +            ///  Touch sensing controller clock enable
    +            TSCEN: u1,
    +            reserved28: u3,
    +            ///  ADC1 and ADC2 clock enable
    +            ADC12EN: u1,
    +            ///  ADC3 and ADC4 clock enable
    +            ADC34EN: u1,
    +            padding: u2,
    +        }),
    +        ///  APB2 peripheral clock enable register (RCC_APB2ENR)
    +        APB2ENR: mmio.Mmio(packed struct(u32) {
    +            ///  SYSCFG clock enable
    +            SYSCFGEN: u1,
    +            reserved11: u10,
    +            ///  TIM1 Timer clock enable
    +            TIM1EN: u1,
    +            ///  SPI 1 clock enable
    +            SPI1EN: u1,
    +            ///  TIM8 Timer clock enable
    +            TIM8EN: u1,
    +            ///  USART1 clock enable
    +            USART1EN: u1,
    +            reserved16: u1,
    +            ///  TIM15 timer clock enable
    +            TIM15EN: u1,
    +            ///  TIM16 timer clock enable
    +            TIM16EN: u1,
    +            ///  TIM17 timer clock enable
    +            TIM17EN: u1,
    +            padding: u13,
    +        }),
    +        ///  APB1 peripheral clock enable register (RCC_APB1ENR)
    +        APB1ENR: mmio.Mmio(packed struct(u32) {
    +            ///  Timer 2 clock enable
    +            TIM2EN: u1,
    +            ///  Timer 3 clock enable
    +            TIM3EN: u1,
    +            ///  Timer 4 clock enable
    +            TIM4EN: u1,
    +            reserved4: u1,
    +            ///  Timer 6 clock enable
    +            TIM6EN: u1,
    +            ///  Timer 7 clock enable
    +            TIM7EN: u1,
    +            reserved11: u5,
    +            ///  Window watchdog clock enable
    +            WWDGEN: u1,
    +            reserved14: u2,
    +            ///  SPI 2 clock enable
    +            SPI2EN: u1,
    +            ///  SPI 3 clock enable
    +            SPI3EN: u1,
    +            reserved17: u1,
    +            ///  USART 2 clock enable
    +            USART2EN: u1,
    +            ///  USART 3 clock enable
    +            USART3EN: u1,
    +            ///  USART 4 clock enable
    +            USART4EN: u1,
    +            ///  USART 5 clock enable
    +            USART5EN: u1,
    +            ///  I2C 1 clock enable
    +            I2C1EN: u1,
    +            ///  I2C 2 clock enable
    +            I2C2EN: u1,
    +            ///  USB clock enable
    +            USBEN: u1,
    +            reserved25: u1,
    +            ///  CAN clock enable
    +            CANEN: u1,
    +            ///  DAC2 interface clock enable
    +            DAC2EN: u1,
    +            reserved28: u1,
    +            ///  Power interface clock enable
    +            PWREN: u1,
    +            ///  DAC interface clock enable
    +            DACEN: u1,
    +            ///  I2C3 clock enable
    +            I2C3EN: u1,
    +            padding: u1,
    +        }),
    +        ///  Backup domain control register (RCC_BDCR)
    +        BDCR: mmio.Mmio(packed struct(u32) {
    +            ///  External Low Speed oscillator enable
    +            LSEON: u1,
    +            ///  External Low Speed oscillator ready
    +            LSERDY: u1,
    +            ///  External Low Speed oscillator bypass
    +            LSEBYP: u1,
    +            ///  LSE oscillator drive capability
    +            LSEDRV: u2,
    +            reserved8: u3,
    +            ///  RTC clock source selection
    +            RTCSEL: u2,
    +            reserved15: u5,
    +            ///  RTC clock enable
    +            RTCEN: u1,
    +            ///  Backup domain software reset
    +            BDRST: u1,
    +            padding: u15,
    +        }),
    +        ///  Control/status register (RCC_CSR)
    +        CSR: mmio.Mmio(packed struct(u32) {
    +            ///  Internal low speed oscillator enable
    +            LSION: u1,
    +            ///  Internal low speed oscillator ready
    +            LSIRDY: u1,
    +            reserved24: u22,
    +            ///  Remove reset flag
    +            RMVF: u1,
    +            ///  Option byte loader reset flag
    +            OBLRSTF: u1,
    +            ///  PIN reset flag
    +            PINRSTF: u1,
    +            ///  POR/PDR reset flag
    +            PORRSTF: u1,
    +            ///  Software reset flag
    +            SFTRSTF: u1,
    +            ///  Independent watchdog reset flag
    +            IWDGRSTF: u1,
    +            ///  Window watchdog reset flag
    +            WWDGRSTF: u1,
    +            ///  Low-power reset flag
    +            LPWRRSTF: u1,
    +        }),
    +        ///  AHB peripheral reset register
    +        AHBRSTR: mmio.Mmio(packed struct(u32) {
    +            reserved5: u5,
    +            ///  FMC reset
    +            FMCRST: u1,
    +            reserved16: u10,
    +            ///  I/O port H reset
    +            IOPHRST: u1,
    +            ///  I/O port A reset
    +            IOPARST: u1,
    +            ///  I/O port B reset
    +            IOPBRST: u1,
    +            ///  I/O port C reset
    +            IOPCRST: u1,
    +            ///  I/O port D reset
    +            IOPDRST: u1,
    +            ///  I/O port E reset
    +            IOPERST: u1,
    +            ///  I/O port F reset
    +            IOPFRST: u1,
    +            ///  Touch sensing controller reset
    +            IOPGRST: u1,
    +            ///  Touch sensing controller reset
    +            TSCRST: u1,
    +            reserved28: u3,
    +            ///  ADC1 and ADC2 reset
    +            ADC12RST: u1,
    +            ///  ADC3 and ADC4 reset
    +            ADC34RST: u1,
    +            padding: u2,
    +        }),
    +        ///  Clock configuration register 2
    +        CFGR2: mmio.Mmio(packed struct(u32) {
    +            ///  PREDIV division factor
    +            PREDIV: u4,
    +            ///  ADC1 and ADC2 prescaler
    +            ADC12PRES: u5,
    +            ///  ADC3 and ADC4 prescaler
    +            ADC34PRES: u5,
    +            padding: u18,
    +        }),
    +        ///  Clock configuration register 3
    +        CFGR3: mmio.Mmio(packed struct(u32) {
    +            ///  USART1 clock source selection
    +            USART1SW: u2,
    +            reserved4: u2,
    +            ///  I2C1 clock source selection
    +            I2C1SW: u1,
    +            ///  I2C2 clock source selection
    +            I2C2SW: u1,
    +            ///  I2C3 clock source selection
    +            I2C3SW: u1,
    +            reserved8: u1,
    +            ///  Timer1 clock source selection
    +            TIM1SW: u1,
    +            ///  Timer8 clock source selection
    +            TIM8SW: u1,
    +            reserved16: u6,
    +            ///  USART2 clock source selection
    +            USART2SW: u2,
    +            ///  USART3 clock source selection
    +            USART3SW: u2,
    +            ///  UART4 clock source selection
    +            UART4SW: u2,
    +            ///  UART5 clock source selection
    +            UART5SW: u2,
    +            padding: u8,
    +        }),
    +    };
    +
    +    ///  DMA controller 1
    +    pub const DMA1 = extern struct {
    +        ///  DMA interrupt status register (DMA_ISR)
    +        ISR: mmio.Mmio(packed struct(u32) {
    +            ///  Channel 1 Global interrupt flag
    +            GIF1: u1,
    +            ///  Channel 1 Transfer Complete flag
    +            TCIF1: u1,
    +            ///  Channel 1 Half Transfer Complete flag
    +            HTIF1: u1,
    +            ///  Channel 1 Transfer Error flag
    +            TEIF1: u1,
    +            ///  Channel 2 Global interrupt flag
    +            GIF2: u1,
    +            ///  Channel 2 Transfer Complete flag
    +            TCIF2: u1,
    +            ///  Channel 2 Half Transfer Complete flag
    +            HTIF2: u1,
    +            ///  Channel 2 Transfer Error flag
    +            TEIF2: u1,
    +            ///  Channel 3 Global interrupt flag
    +            GIF3: u1,
    +            ///  Channel 3 Transfer Complete flag
    +            TCIF3: u1,
    +            ///  Channel 3 Half Transfer Complete flag
    +            HTIF3: u1,
    +            ///  Channel 3 Transfer Error flag
    +            TEIF3: u1,
    +            ///  Channel 4 Global interrupt flag
    +            GIF4: u1,
    +            ///  Channel 4 Transfer Complete flag
    +            TCIF4: u1,
    +            ///  Channel 4 Half Transfer Complete flag
    +            HTIF4: u1,
    +            ///  Channel 4 Transfer Error flag
    +            TEIF4: u1,
    +            ///  Channel 5 Global interrupt flag
    +            GIF5: u1,
    +            ///  Channel 5 Transfer Complete flag
    +            TCIF5: u1,
    +            ///  Channel 5 Half Transfer Complete flag
    +            HTIF5: u1,
    +            ///  Channel 5 Transfer Error flag
    +            TEIF5: u1,
    +            ///  Channel 6 Global interrupt flag
    +            GIF6: u1,
    +            ///  Channel 6 Transfer Complete flag
    +            TCIF6: u1,
    +            ///  Channel 6 Half Transfer Complete flag
    +            HTIF6: u1,
    +            ///  Channel 6 Transfer Error flag
    +            TEIF6: u1,
    +            ///  Channel 7 Global interrupt flag
    +            GIF7: u1,
    +            ///  Channel 7 Transfer Complete flag
    +            TCIF7: u1,
    +            ///  Channel 7 Half Transfer Complete flag
    +            HTIF7: u1,
    +            ///  Channel 7 Transfer Error flag
    +            TEIF7: u1,
    +            padding: u4,
    +        }),
    +        ///  DMA interrupt flag clear register (DMA_IFCR)
    +        IFCR: mmio.Mmio(packed struct(u32) {
    +            ///  Channel 1 Global interrupt clear
    +            CGIF1: u1,
    +            ///  Channel 1 Transfer Complete clear
    +            CTCIF1: u1,
    +            ///  Channel 1 Half Transfer clear
    +            CHTIF1: u1,
    +            ///  Channel 1 Transfer Error clear
    +            CTEIF1: u1,
    +            ///  Channel 2 Global interrupt clear
    +            CGIF2: u1,
    +            ///  Channel 2 Transfer Complete clear
    +            CTCIF2: u1,
    +            ///  Channel 2 Half Transfer clear
    +            CHTIF2: u1,
    +            ///  Channel 2 Transfer Error clear
    +            CTEIF2: u1,
    +            ///  Channel 3 Global interrupt clear
    +            CGIF3: u1,
    +            ///  Channel 3 Transfer Complete clear
    +            CTCIF3: u1,
    +            ///  Channel 3 Half Transfer clear
    +            CHTIF3: u1,
    +            ///  Channel 3 Transfer Error clear
    +            CTEIF3: u1,
    +            ///  Channel 4 Global interrupt clear
    +            CGIF4: u1,
    +            ///  Channel 4 Transfer Complete clear
    +            CTCIF4: u1,
    +            ///  Channel 4 Half Transfer clear
    +            CHTIF4: u1,
    +            ///  Channel 4 Transfer Error clear
    +            CTEIF4: u1,
    +            ///  Channel 5 Global interrupt clear
    +            CGIF5: u1,
    +            ///  Channel 5 Transfer Complete clear
    +            CTCIF5: u1,
    +            ///  Channel 5 Half Transfer clear
    +            CHTIF5: u1,
    +            ///  Channel 5 Transfer Error clear
    +            CTEIF5: u1,
    +            ///  Channel 6 Global interrupt clear
    +            CGIF6: u1,
    +            ///  Channel 6 Transfer Complete clear
    +            CTCIF6: u1,
    +            ///  Channel 6 Half Transfer clear
    +            CHTIF6: u1,
    +            ///  Channel 6 Transfer Error clear
    +            CTEIF6: u1,
    +            ///  Channel 7 Global interrupt clear
    +            CGIF7: u1,
    +            ///  Channel 7 Transfer Complete clear
    +            CTCIF7: u1,
    +            ///  Channel 7 Half Transfer clear
    +            CHTIF7: u1,
    +            ///  Channel 7 Transfer Error clear
    +            CTEIF7: u1,
    +            padding: u4,
    +        }),
    +        ///  DMA channel configuration register (DMA_CCR)
    +        CCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Channel enable
    +            EN: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Half Transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Data transfer direction
    +            DIR: u1,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral size
    +            PSIZE: u2,
    +            ///  Memory size
    +            MSIZE: u2,
    +            ///  Channel Priority level
    +            PL: u2,
    +            ///  Memory to memory mode
    +            MEM2MEM: u1,
    +            padding: u17,
    +        }),
    +        ///  DMA channel 1 number of data register
    +        CNDTR1: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  DMA channel 1 peripheral address register
    +        CPAR1: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  DMA channel 1 memory address register
    +        CMAR1: mmio.Mmio(packed struct(u32) {
    +            ///  Memory address
    +            MA: u32,
    +        }),
    +        reserved28: [4]u8,
    +        ///  DMA channel configuration register (DMA_CCR)
    +        CCR2: mmio.Mmio(packed struct(u32) {
    +            ///  Channel enable
    +            EN: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Half Transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Data transfer direction
    +            DIR: u1,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral size
    +            PSIZE: u2,
    +            ///  Memory size
    +            MSIZE: u2,
    +            ///  Channel Priority level
    +            PL: u2,
    +            ///  Memory to memory mode
    +            MEM2MEM: u1,
    +            padding: u17,
    +        }),
    +        ///  DMA channel 2 number of data register
    +        CNDTR2: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  DMA channel 2 peripheral address register
    +        CPAR2: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  DMA channel 2 memory address register
    +        CMAR2: mmio.Mmio(packed struct(u32) {
    +            ///  Memory address
    +            MA: u32,
    +        }),
    +        reserved48: [4]u8,
    +        ///  DMA channel configuration register (DMA_CCR)
    +        CCR3: mmio.Mmio(packed struct(u32) {
    +            ///  Channel enable
    +            EN: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Half Transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Data transfer direction
    +            DIR: u1,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral size
    +            PSIZE: u2,
    +            ///  Memory size
    +            MSIZE: u2,
    +            ///  Channel Priority level
    +            PL: u2,
    +            ///  Memory to memory mode
    +            MEM2MEM: u1,
    +            padding: u17,
    +        }),
    +        ///  DMA channel 3 number of data register
    +        CNDTR3: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  DMA channel 3 peripheral address register
    +        CPAR3: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  DMA channel 3 memory address register
    +        CMAR3: mmio.Mmio(packed struct(u32) {
    +            ///  Memory address
    +            MA: u32,
    +        }),
    +        reserved68: [4]u8,
    +        ///  DMA channel configuration register (DMA_CCR)
    +        CCR4: mmio.Mmio(packed struct(u32) {
    +            ///  Channel enable
    +            EN: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Half Transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Data transfer direction
    +            DIR: u1,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral size
    +            PSIZE: u2,
    +            ///  Memory size
    +            MSIZE: u2,
    +            ///  Channel Priority level
    +            PL: u2,
    +            ///  Memory to memory mode
    +            MEM2MEM: u1,
    +            padding: u17,
    +        }),
    +        ///  DMA channel 4 number of data register
    +        CNDTR4: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  DMA channel 4 peripheral address register
    +        CPAR4: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  DMA channel 4 memory address register
    +        CMAR4: mmio.Mmio(packed struct(u32) {
    +            ///  Memory address
    +            MA: u32,
    +        }),
    +        reserved88: [4]u8,
    +        ///  DMA channel configuration register (DMA_CCR)
    +        CCR5: mmio.Mmio(packed struct(u32) {
    +            ///  Channel enable
    +            EN: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Half Transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Data transfer direction
    +            DIR: u1,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral size
    +            PSIZE: u2,
    +            ///  Memory size
    +            MSIZE: u2,
    +            ///  Channel Priority level
    +            PL: u2,
    +            ///  Memory to memory mode
    +            MEM2MEM: u1,
    +            padding: u17,
    +        }),
    +        ///  DMA channel 5 number of data register
    +        CNDTR5: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  DMA channel 5 peripheral address register
    +        CPAR5: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  DMA channel 5 memory address register
    +        CMAR5: mmio.Mmio(packed struct(u32) {
    +            ///  Memory address
    +            MA: u32,
    +        }),
    +        reserved108: [4]u8,
    +        ///  DMA channel configuration register (DMA_CCR)
    +        CCR6: mmio.Mmio(packed struct(u32) {
    +            ///  Channel enable
    +            EN: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Half Transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Data transfer direction
    +            DIR: u1,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral size
    +            PSIZE: u2,
    +            ///  Memory size
    +            MSIZE: u2,
    +            ///  Channel Priority level
    +            PL: u2,
    +            ///  Memory to memory mode
    +            MEM2MEM: u1,
    +            padding: u17,
    +        }),
    +        ///  DMA channel 6 number of data register
    +        CNDTR6: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  DMA channel 6 peripheral address register
    +        CPAR6: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  DMA channel 6 memory address register
    +        CMAR6: mmio.Mmio(packed struct(u32) {
    +            ///  Memory address
    +            MA: u32,
    +        }),
    +        reserved128: [4]u8,
    +        ///  DMA channel configuration register (DMA_CCR)
    +        CCR7: mmio.Mmio(packed struct(u32) {
    +            ///  Channel enable
    +            EN: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Half Transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Data transfer direction
    +            DIR: u1,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral size
    +            PSIZE: u2,
    +            ///  Memory size
    +            MSIZE: u2,
    +            ///  Channel Priority level
    +            PL: u2,
    +            ///  Memory to memory mode
    +            MEM2MEM: u1,
    +            padding: u17,
    +        }),
    +        ///  DMA channel 7 number of data register
    +        CNDTR7: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  DMA channel 7 peripheral address register
    +        CPAR7: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  DMA channel 7 memory address register
    +        CMAR7: mmio.Mmio(packed struct(u32) {
    +            ///  Memory address
    +            MA: u32,
    +        }),
    +    };
    +
    +    ///  Floting point unit
    +    pub const FPU = extern struct {
    +        ///  Floating-point context control register
    +        FPCCR: mmio.Mmio(packed struct(u32) {
    +            ///  LSPACT
    +            LSPACT: u1,
    +            ///  USER
    +            USER: u1,
    +            reserved3: u1,
    +            ///  THREAD
    +            THREAD: u1,
    +            ///  HFRDY
    +            HFRDY: u1,
    +            ///  MMRDY
    +            MMRDY: u1,
    +            ///  BFRDY
    +            BFRDY: u1,
    +            reserved8: u1,
    +            ///  MONRDY
    +            MONRDY: u1,
    +            reserved30: u21,
    +            ///  LSPEN
    +            LSPEN: u1,
    +            ///  ASPEN
    +            ASPEN: u1,
    +        }),
    +        ///  Floating-point context address register
    +        FPCAR: mmio.Mmio(packed struct(u32) {
    +            reserved3: u3,
    +            ///  Location of unpopulated floating-point
    +            ADDRESS: u29,
    +        }),
    +        ///  Floating-point status control register
    +        FPSCR: mmio.Mmio(packed struct(u32) {
    +            ///  Invalid operation cumulative exception bit
    +            IOC: u1,
    +            ///  Division by zero cumulative exception bit.
    +            DZC: u1,
    +            ///  Overflow cumulative exception bit
    +            OFC: u1,
    +            ///  Underflow cumulative exception bit
    +            UFC: u1,
    +            ///  Inexact cumulative exception bit
    +            IXC: u1,
    +            reserved7: u2,
    +            ///  Input denormal cumulative exception bit.
    +            IDC: u1,
    +            reserved22: u14,
    +            ///  Rounding Mode control field
    +            RMode: u2,
    +            ///  Flush-to-zero mode control bit:
    +            FZ: u1,
    +            ///  Default NaN mode control bit
    +            DN: u1,
    +            ///  Alternative half-precision control bit
    +            AHP: u1,
    +            reserved28: u1,
    +            ///  Overflow condition code flag
    +            V: u1,
    +            ///  Carry condition code flag
    +            C: u1,
    +            ///  Zero condition code flag
    +            Z: u1,
    +            ///  Negative condition code flag
    +            N: u1,
    +        }),
    +    };
    +
    +    ///  General purpose timer
    +    pub const TIM2 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            ///  One-pulse mode
    +            OPM: u1,
    +            ///  Direction
    +            DIR: u1,
    +            ///  Center-aligned mode selection
    +            CMS: u2,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            ///  Clock division
    +            CKD: u2,
    +            reserved11: u1,
    +            ///  UIF status bit remapping
    +            UIFREMAP: u1,
    +            padding: u20,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            reserved3: u3,
    +            ///  Capture/compare DMA selection
    +            CCDS: u1,
    +            ///  Master mode selection
    +            MMS: u3,
    +            ///  TI1 selection
    +            TI1S: u1,
    +            padding: u24,
    +        }),
    +        ///  slave mode control register
    +        SMCR: mmio.Mmio(packed struct(u32) {
    +            ///  Slave mode selection
    +            SMS: u3,
    +            ///  OCREF clear selection
    +            OCCS: u1,
    +            ///  Trigger selection
    +            TS: u3,
    +            ///  Master/Slave mode
    +            MSM: u1,
    +            ///  External trigger filter
    +            ETF: u4,
    +            ///  External trigger prescaler
    +            ETPS: u2,
    +            ///  External clock enable
    +            ECE: u1,
    +            ///  External trigger polarity
    +            ETP: u1,
    +            ///  Slave mode selection bit3
    +            SMS_3: u1,
    +            padding: u15,
    +        }),
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            ///  Capture/Compare 1 interrupt enable
    +            CC1IE: u1,
    +            ///  Capture/Compare 2 interrupt enable
    +            CC2IE: u1,
    +            ///  Capture/Compare 3 interrupt enable
    +            CC3IE: u1,
    +            ///  Capture/Compare 4 interrupt enable
    +            CC4IE: u1,
    +            reserved6: u1,
    +            ///  Trigger interrupt enable
    +            TIE: u1,
    +            reserved8: u1,
    +            ///  Update DMA request enable
    +            UDE: u1,
    +            ///  Capture/Compare 1 DMA request enable
    +            CC1DE: u1,
    +            ///  Capture/Compare 2 DMA request enable
    +            CC2DE: u1,
    +            ///  Capture/Compare 3 DMA request enable
    +            CC3DE: u1,
    +            ///  Capture/Compare 4 DMA request enable
    +            CC4DE: u1,
    +            reserved14: u1,
    +            ///  Trigger DMA request enable
    +            TDE: u1,
    +            padding: u17,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            ///  Capture/compare 1 interrupt flag
    +            CC1IF: u1,
    +            ///  Capture/Compare 2 interrupt flag
    +            CC2IF: u1,
    +            ///  Capture/Compare 3 interrupt flag
    +            CC3IF: u1,
    +            ///  Capture/Compare 4 interrupt flag
    +            CC4IF: u1,
    +            reserved6: u1,
    +            ///  Trigger interrupt flag
    +            TIF: u1,
    +            reserved9: u2,
    +            ///  Capture/Compare 1 overcapture flag
    +            CC1OF: u1,
    +            ///  Capture/compare 2 overcapture flag
    +            CC2OF: u1,
    +            ///  Capture/Compare 3 overcapture flag
    +            CC3OF: u1,
    +            ///  Capture/Compare 4 overcapture flag
    +            CC4OF: u1,
    +            padding: u19,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            ///  Capture/compare 1 generation
    +            CC1G: u1,
    +            ///  Capture/compare 2 generation
    +            CC2G: u1,
    +            ///  Capture/compare 3 generation
    +            CC3G: u1,
    +            ///  Capture/compare 4 generation
    +            CC4G: u1,
    +            reserved6: u1,
    +            ///  Trigger generation
    +            TG: u1,
    +            padding: u25,
    +        }),
    +        ///  capture/compare mode register 1 (output mode)
    +        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 selection
    +            CC1S: u2,
    +            ///  Output compare 1 fast enable
    +            OC1FE: u1,
    +            ///  Output compare 1 preload enable
    +            OC1PE: u1,
    +            ///  Output compare 1 mode
    +            OC1M: u3,
    +            ///  Output compare 1 clear enable
    +            OC1CE: u1,
    +            ///  Capture/Compare 2 selection
    +            CC2S: u2,
    +            ///  Output compare 2 fast enable
    +            OC2FE: u1,
    +            ///  Output compare 2 preload enable
    +            OC2PE: u1,
    +            ///  Output compare 2 mode
    +            OC2M: u3,
    +            ///  Output compare 2 clear enable
    +            OC2CE: u1,
    +            ///  Output compare 1 mode bit 3
    +            OC1M_3: u1,
    +            reserved24: u7,
    +            ///  Output compare 2 mode bit 3
    +            OC2M_3: u1,
    +            padding: u7,
    +        }),
    +        ///  capture/compare mode register 2 (output mode)
    +        CCMR2_Output: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 3 selection
    +            CC3S: u2,
    +            ///  Output compare 3 fast enable
    +            OC3FE: u1,
    +            ///  Output compare 3 preload enable
    +            OC3PE: u1,
    +            ///  Output compare 3 mode
    +            OC3M: u3,
    +            ///  Output compare 3 clear enable
    +            OC3CE: u1,
    +            ///  Capture/Compare 4 selection
    +            CC4S: u2,
    +            ///  Output compare 4 fast enable
    +            OC4FE: u1,
    +            ///  Output compare 4 preload enable
    +            OC4PE: u1,
    +            ///  Output compare 4 mode
    +            OC4M: u3,
    +            ///  Output compare 4 clear enable
    +            O24CE: u1,
    +            ///  Output compare 3 mode bit3
    +            OC3M_3: u1,
    +            reserved24: u7,
    +            ///  Output compare 4 mode bit3
    +            OC4M_3: u1,
    +            padding: u7,
    +        }),
    +        ///  capture/compare enable register
    +        CCER: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 output enable
    +            CC1E: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1P: u1,
    +            reserved3: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1NP: u1,
    +            ///  Capture/Compare 2 output enable
    +            CC2E: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2P: u1,
    +            reserved7: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2NP: u1,
    +            ///  Capture/Compare 3 output enable
    +            CC3E: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC3P: u1,
    +            reserved11: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC3NP: u1,
    +            ///  Capture/Compare 4 output enable
    +            CC4E: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC4P: u1,
    +            reserved15: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC4NP: u1,
    +            padding: u16,
    +        }),
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  Low counter value
    +            CNTL: u16,
    +            ///  High counter value
    +            CNTH: u15,
    +            ///  if IUFREMAP=0 than CNT with read write access else UIFCPY with read only access
    +            CNT_or_UIFCPY: u1,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Low Auto-reload value
    +            ARRL: u16,
    +            ///  High Auto-reload value
    +            ARRH: u16,
    +        }),
    +        reserved52: [4]u8,
    +        ///  capture/compare register 1
    +        CCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare 1 value
    +            CCR1L: u16,
    +            ///  High Capture/Compare 1 value (on TIM2)
    +            CCR1H: u16,
    +        }),
    +        ///  capture/compare register 2
    +        CCR2: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare 2 value
    +            CCR2L: u16,
    +            ///  High Capture/Compare 2 value (on TIM2)
    +            CCR2H: u16,
    +        }),
    +        ///  capture/compare register 3
    +        CCR3: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare value
    +            CCR3L: u16,
    +            ///  High Capture/Compare value (on TIM2)
    +            CCR3H: u16,
    +        }),
    +        ///  capture/compare register 4
    +        CCR4: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare value
    +            CCR4L: u16,
    +            ///  High Capture/Compare value (on TIM2)
    +            CCR4H: u16,
    +        }),
    +        reserved72: [4]u8,
    +        ///  DMA control register
    +        DCR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA base address
    +            DBA: u5,
    +            reserved8: u3,
    +            ///  DMA burst length
    +            DBL: u5,
    +            padding: u19,
    +        }),
    +        ///  DMA address for full transfer
    +        DMAR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA register for burst accesses
    +            DMAB: u16,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  Nested Vectored Interrupt Controller
    +    pub const NVIC = extern struct {
    +        ///  Interrupt Set-Enable Register
    +        ISER0: mmio.Mmio(packed struct(u32) {
    +            ///  SETENA
    +            SETENA: u32,
    +        }),
    +        ///  Interrupt Set-Enable Register
    +        ISER1: mmio.Mmio(packed struct(u32) {
    +            ///  SETENA
    +            SETENA: u32,
    +        }),
    +        ///  Interrupt Set-Enable Register
    +        ISER2: mmio.Mmio(packed struct(u32) {
    +            ///  SETENA
    +            SETENA: u32,
    +        }),
    +        reserved128: [116]u8,
    +        ///  Interrupt Clear-Enable Register
    +        ICER0: mmio.Mmio(packed struct(u32) {
    +            ///  CLRENA
    +            CLRENA: u32,
    +        }),
    +        ///  Interrupt Clear-Enable Register
    +        ICER1: mmio.Mmio(packed struct(u32) {
    +            ///  CLRENA
    +            CLRENA: u32,
    +        }),
    +        ///  Interrupt Clear-Enable Register
    +        ICER2: mmio.Mmio(packed struct(u32) {
    +            ///  CLRENA
    +            CLRENA: u32,
    +        }),
    +        reserved256: [116]u8,
    +        ///  Interrupt Set-Pending Register
    +        ISPR0: mmio.Mmio(packed struct(u32) {
    +            ///  SETPEND
    +            SETPEND: u32,
    +        }),
    +        ///  Interrupt Set-Pending Register
    +        ISPR1: mmio.Mmio(packed struct(u32) {
    +            ///  SETPEND
    +            SETPEND: u32,
    +        }),
    +        ///  Interrupt Set-Pending Register
    +        ISPR2: mmio.Mmio(packed struct(u32) {
    +            ///  SETPEND
    +            SETPEND: u32,
    +        }),
    +        reserved384: [116]u8,
    +        ///  Interrupt Clear-Pending Register
    +        ICPR0: mmio.Mmio(packed struct(u32) {
    +            ///  CLRPEND
    +            CLRPEND: u32,
    +        }),
    +        ///  Interrupt Clear-Pending Register
    +        ICPR1: mmio.Mmio(packed struct(u32) {
    +            ///  CLRPEND
    +            CLRPEND: u32,
    +        }),
    +        ///  Interrupt Clear-Pending Register
    +        ICPR2: mmio.Mmio(packed struct(u32) {
    +            ///  CLRPEND
    +            CLRPEND: u32,
    +        }),
    +        reserved512: [116]u8,
    +        ///  Interrupt Active Bit Register
    +        IABR0: mmio.Mmio(packed struct(u32) {
    +            ///  ACTIVE
    +            ACTIVE: u32,
    +        }),
    +        ///  Interrupt Active Bit Register
    +        IABR1: mmio.Mmio(packed struct(u32) {
    +            ///  ACTIVE
    +            ACTIVE: u32,
    +        }),
    +        ///  Interrupt Active Bit Register
    +        IABR2: mmio.Mmio(packed struct(u32) {
    +            ///  ACTIVE
    +            ACTIVE: u32,
    +        }),
    +        reserved768: [244]u8,
    +        ///  Interrupt Priority Register
    +        IPR0: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR1: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR2: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR3: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR4: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR5: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR6: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR7: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR8: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR9: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR10: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR11: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR12: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR13: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR14: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR15: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR16: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR17: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR18: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR19: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR20: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +    };
    +
    +    ///  Flexible memory controller
    +    pub const FMC = extern struct {
    +        ///  SRAM/NOR-Flash chip-select control register 1
    +        BCR1: mmio.Mmio(packed struct(u32) {
    +            ///  MBKEN
    +            MBKEN: u1,
    +            ///  MUXEN
    +            MUXEN: u1,
    +            ///  MTYP
    +            MTYP: u2,
    +            ///  MWID
    +            MWID: u2,
    +            ///  FACCEN
    +            FACCEN: u1,
    +            reserved8: u1,
    +            ///  BURSTEN
    +            BURSTEN: u1,
    +            ///  WAITPOL
    +            WAITPOL: u1,
    +            reserved11: u1,
    +            ///  WAITCFG
    +            WAITCFG: u1,
    +            ///  WREN
    +            WREN: u1,
    +            ///  WAITEN
    +            WAITEN: u1,
    +            ///  EXTMOD
    +            EXTMOD: u1,
    +            ///  ASYNCWAIT
    +            ASYNCWAIT: u1,
    +            reserved19: u3,
    +            ///  CBURSTRW
    +            CBURSTRW: u1,
    +            ///  CCLKEN
    +            CCLKEN: u1,
    +            padding: u11,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select timing register 1
    +        BTR1: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            ///  BUSTURN
    +            BUSTURN: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select control register 2
    +        BCR2: mmio.Mmio(packed struct(u32) {
    +            ///  MBKEN
    +            MBKEN: u1,
    +            ///  MUXEN
    +            MUXEN: u1,
    +            ///  MTYP
    +            MTYP: u2,
    +            ///  MWID
    +            MWID: u2,
    +            ///  FACCEN
    +            FACCEN: u1,
    +            reserved8: u1,
    +            ///  BURSTEN
    +            BURSTEN: u1,
    +            ///  WAITPOL
    +            WAITPOL: u1,
    +            ///  WRAPMOD
    +            WRAPMOD: u1,
    +            ///  WAITCFG
    +            WAITCFG: u1,
    +            ///  WREN
    +            WREN: u1,
    +            ///  WAITEN
    +            WAITEN: u1,
    +            ///  EXTMOD
    +            EXTMOD: u1,
    +            ///  ASYNCWAIT
    +            ASYNCWAIT: u1,
    +            reserved19: u3,
    +            ///  CBURSTRW
    +            CBURSTRW: u1,
    +            padding: u12,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select timing register 2
    +        BTR2: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            ///  BUSTURN
    +            BUSTURN: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select control register 3
    +        BCR3: mmio.Mmio(packed struct(u32) {
    +            ///  MBKEN
    +            MBKEN: u1,
    +            ///  MUXEN
    +            MUXEN: u1,
    +            ///  MTYP
    +            MTYP: u2,
    +            ///  MWID
    +            MWID: u2,
    +            ///  FACCEN
    +            FACCEN: u1,
    +            reserved8: u1,
    +            ///  BURSTEN
    +            BURSTEN: u1,
    +            ///  WAITPOL
    +            WAITPOL: u1,
    +            ///  WRAPMOD
    +            WRAPMOD: u1,
    +            ///  WAITCFG
    +            WAITCFG: u1,
    +            ///  WREN
    +            WREN: u1,
    +            ///  WAITEN
    +            WAITEN: u1,
    +            ///  EXTMOD
    +            EXTMOD: u1,
    +            ///  ASYNCWAIT
    +            ASYNCWAIT: u1,
    +            reserved19: u3,
    +            ///  CBURSTRW
    +            CBURSTRW: u1,
    +            padding: u12,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select timing register 3
    +        BTR3: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            ///  BUSTURN
    +            BUSTURN: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select control register 4
    +        BCR4: mmio.Mmio(packed struct(u32) {
    +            ///  MBKEN
    +            MBKEN: u1,
    +            ///  MUXEN
    +            MUXEN: u1,
    +            ///  MTYP
    +            MTYP: u2,
    +            ///  MWID
    +            MWID: u2,
    +            ///  FACCEN
    +            FACCEN: u1,
    +            reserved8: u1,
    +            ///  BURSTEN
    +            BURSTEN: u1,
    +            ///  WAITPOL
    +            WAITPOL: u1,
    +            ///  WRAPMOD
    +            WRAPMOD: u1,
    +            ///  WAITCFG
    +            WAITCFG: u1,
    +            ///  WREN
    +            WREN: u1,
    +            ///  WAITEN
    +            WAITEN: u1,
    +            ///  EXTMOD
    +            EXTMOD: u1,
    +            ///  ASYNCWAIT
    +            ASYNCWAIT: u1,
    +            reserved19: u3,
    +            ///  CBURSTRW
    +            CBURSTRW: u1,
    +            padding: u12,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select timing register 4
    +        BTR4: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            ///  BUSTURN
    +            BUSTURN: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +        reserved96: [64]u8,
    +        ///  PC Card/NAND Flash control register 2
    +        PCR2: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  PWAITEN
    +            PWAITEN: u1,
    +            ///  PBKEN
    +            PBKEN: u1,
    +            ///  PTYP
    +            PTYP: u1,
    +            ///  PWID
    +            PWID: u2,
    +            ///  ECCEN
    +            ECCEN: u1,
    +            reserved9: u2,
    +            ///  TCLR
    +            TCLR: u4,
    +            ///  TAR
    +            TAR: u4,
    +            ///  ECCPS
    +            ECCPS: u3,
    +            padding: u12,
    +        }),
    +        ///  FIFO status and interrupt register 2
    +        SR2: mmio.Mmio(packed struct(u32) {
    +            ///  IRS
    +            IRS: u1,
    +            ///  ILS
    +            ILS: u1,
    +            ///  IFS
    +            IFS: u1,
    +            ///  IREN
    +            IREN: u1,
    +            ///  ILEN
    +            ILEN: u1,
    +            ///  IFEN
    +            IFEN: u1,
    +            ///  FEMPT
    +            FEMPT: u1,
    +            padding: u25,
    +        }),
    +        ///  Common memory space timing register 2
    +        PMEM2: mmio.Mmio(packed struct(u32) {
    +            ///  MEMSETx
    +            MEMSETx: u8,
    +            ///  MEMWAITx
    +            MEMWAITx: u8,
    +            ///  MEMHOLDx
    +            MEMHOLDx: u8,
    +            ///  MEMHIZx
    +            MEMHIZx: u8,
    +        }),
    +        ///  Attribute memory space timing register 2
    +        PATT2: mmio.Mmio(packed struct(u32) {
    +            ///  ATTSETx
    +            ATTSETx: u8,
    +            ///  ATTWAITx
    +            ATTWAITx: u8,
    +            ///  ATTHOLDx
    +            ATTHOLDx: u8,
    +            ///  ATTHIZx
    +            ATTHIZx: u8,
    +        }),
    +        reserved116: [4]u8,
    +        ///  ECC result register 2
    +        ECCR2: mmio.Mmio(packed struct(u32) {
    +            ///  ECCx
    +            ECCx: u32,
    +        }),
    +        reserved128: [8]u8,
    +        ///  PC Card/NAND Flash control register 3
    +        PCR3: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  PWAITEN
    +            PWAITEN: u1,
    +            ///  PBKEN
    +            PBKEN: u1,
    +            ///  PTYP
    +            PTYP: u1,
    +            ///  PWID
    +            PWID: u2,
    +            ///  ECCEN
    +            ECCEN: u1,
    +            reserved9: u2,
    +            ///  TCLR
    +            TCLR: u4,
    +            ///  TAR
    +            TAR: u4,
    +            ///  ECCPS
    +            ECCPS: u3,
    +            padding: u12,
    +        }),
    +        ///  FIFO status and interrupt register 3
    +        SR3: mmio.Mmio(packed struct(u32) {
    +            ///  IRS
    +            IRS: u1,
    +            ///  ILS
    +            ILS: u1,
    +            ///  IFS
    +            IFS: u1,
    +            ///  IREN
    +            IREN: u1,
    +            ///  ILEN
    +            ILEN: u1,
    +            ///  IFEN
    +            IFEN: u1,
    +            ///  FEMPT
    +            FEMPT: u1,
    +            padding: u25,
    +        }),
    +        ///  Common memory space timing register 3
    +        PMEM3: mmio.Mmio(packed struct(u32) {
    +            ///  MEMSETx
    +            MEMSETx: u8,
    +            ///  MEMWAITx
    +            MEMWAITx: u8,
    +            ///  MEMHOLDx
    +            MEMHOLDx: u8,
    +            ///  MEMHIZx
    +            MEMHIZx: u8,
    +        }),
    +        ///  Attribute memory space timing register 3
    +        PATT3: mmio.Mmio(packed struct(u32) {
    +            ///  ATTSETx
    +            ATTSETx: u8,
    +            ///  ATTWAITx
    +            ATTWAITx: u8,
    +            ///  ATTHOLDx
    +            ATTHOLDx: u8,
    +            ///  ATTHIZx
    +            ATTHIZx: u8,
    +        }),
    +        reserved148: [4]u8,
    +        ///  ECC result register 3
    +        ECCR3: mmio.Mmio(packed struct(u32) {
    +            ///  ECCx
    +            ECCx: u32,
    +        }),
    +        reserved160: [8]u8,
    +        ///  PC Card/NAND Flash control register 4
    +        PCR4: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  PWAITEN
    +            PWAITEN: u1,
    +            ///  PBKEN
    +            PBKEN: u1,
    +            ///  PTYP
    +            PTYP: u1,
    +            ///  PWID
    +            PWID: u2,
    +            ///  ECCEN
    +            ECCEN: u1,
    +            reserved9: u2,
    +            ///  TCLR
    +            TCLR: u4,
    +            ///  TAR
    +            TAR: u4,
    +            ///  ECCPS
    +            ECCPS: u3,
    +            padding: u12,
    +        }),
    +        ///  FIFO status and interrupt register 4
    +        SR4: mmio.Mmio(packed struct(u32) {
    +            ///  IRS
    +            IRS: u1,
    +            ///  ILS
    +            ILS: u1,
    +            ///  IFS
    +            IFS: u1,
    +            ///  IREN
    +            IREN: u1,
    +            ///  ILEN
    +            ILEN: u1,
    +            ///  IFEN
    +            IFEN: u1,
    +            ///  FEMPT
    +            FEMPT: u1,
    +            padding: u25,
    +        }),
    +        ///  Common memory space timing register 4
    +        PMEM4: mmio.Mmio(packed struct(u32) {
    +            ///  MEMSETx
    +            MEMSETx: u8,
    +            ///  MEMWAITx
    +            MEMWAITx: u8,
    +            ///  MEMHOLDx
    +            MEMHOLDx: u8,
    +            ///  MEMHIZx
    +            MEMHIZx: u8,
    +        }),
    +        ///  Attribute memory space timing register 4
    +        PATT4: mmio.Mmio(packed struct(u32) {
    +            ///  ATTSETx
    +            ATTSETx: u8,
    +            ///  ATTWAITx
    +            ATTWAITx: u8,
    +            ///  ATTHOLDx
    +            ATTHOLDx: u8,
    +            ///  ATTHIZx
    +            ATTHIZx: u8,
    +        }),
    +        ///  I/O space timing register 4
    +        PIO4: mmio.Mmio(packed struct(u32) {
    +            ///  IOSETx
    +            IOSETx: u8,
    +            ///  IOWAITx
    +            IOWAITx: u8,
    +            ///  IOHOLDx
    +            IOHOLDx: u8,
    +            ///  IOHIZx
    +            IOHIZx: u8,
    +        }),
    +        reserved260: [80]u8,
    +        ///  SRAM/NOR-Flash write timing registers 1
    +        BWTR1: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            ///  Bus turnaround phase duration
    +            BUSTURN: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +        reserved268: [4]u8,
    +        ///  SRAM/NOR-Flash write timing registers 2
    +        BWTR2: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            ///  Bus turnaround phase duration
    +            BUSTURN: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +        reserved276: [4]u8,
    +        ///  SRAM/NOR-Flash write timing registers 3
    +        BWTR3: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            ///  Bus turnaround phase duration
    +            BUSTURN: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +        reserved284: [4]u8,
    +        ///  SRAM/NOR-Flash write timing registers 4
    +        BWTR4: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            ///  Bus turnaround phase duration
    +            BUSTURN: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +    };
    +
    +    ///  General purpose timers
    +    pub const TIM15 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            ///  One-pulse mode
    +            OPM: u1,
    +            reserved7: u3,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            ///  Clock division
    +            CKD: u2,
    +            reserved11: u1,
    +            ///  UIF status bit remapping
    +            UIFREMAP: u1,
    +            padding: u20,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/compare preloaded control
    +            CCPC: u1,
    +            reserved2: u1,
    +            ///  Capture/compare control update selection
    +            CCUS: u1,
    +            ///  Capture/compare DMA selection
    +            CCDS: u1,
    +            ///  Master mode selection
    +            MMS: u3,
    +            ///  TI1 selection
    +            TI1S: u1,
    +            ///  Output Idle state 1
    +            OIS1: u1,
    +            ///  Output Idle state 1
    +            OIS1N: u1,
    +            ///  Output Idle state 2
    +            OIS2: u1,
    +            padding: u21,
    +        }),
    +        ///  slave mode control register
    +        SMCR: mmio.Mmio(packed struct(u32) {
    +            ///  Slave mode selection
    +            SMS: u3,
    +            reserved4: u1,
    +            ///  Trigger selection
    +            TS: u3,
    +            ///  Master/Slave mode
    +            MSM: u1,
    +            reserved16: u8,
    +            ///  Slave mode selection bit 3
    +            SMS_3: u1,
    +            padding: u15,
    +        }),
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            ///  Capture/Compare 1 interrupt enable
    +            CC1IE: u1,
    +            ///  Capture/Compare 2 interrupt enable
    +            CC2IE: u1,
    +            reserved5: u2,
    +            ///  COM interrupt enable
    +            COMIE: u1,
    +            ///  Trigger interrupt enable
    +            TIE: u1,
    +            ///  Break interrupt enable
    +            BIE: u1,
    +            ///  Update DMA request enable
    +            UDE: u1,
    +            ///  Capture/Compare 1 DMA request enable
    +            CC1DE: u1,
    +            ///  Capture/Compare 2 DMA request enable
    +            CC2DE: u1,
    +            reserved13: u2,
    +            ///  COM DMA request enable
    +            COMDE: u1,
    +            ///  Trigger DMA request enable
    +            TDE: u1,
    +            padding: u17,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            ///  Capture/compare 1 interrupt flag
    +            CC1IF: u1,
    +            ///  Capture/Compare 2 interrupt flag
    +            CC2IF: u1,
    +            reserved5: u2,
    +            ///  COM interrupt flag
    +            COMIF: u1,
    +            ///  Trigger interrupt flag
    +            TIF: u1,
    +            ///  Break interrupt flag
    +            BIF: u1,
    +            reserved9: u1,
    +            ///  Capture/Compare 1 overcapture flag
    +            CC1OF: u1,
    +            ///  Capture/compare 2 overcapture flag
    +            CC2OF: u1,
    +            padding: u21,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            ///  Capture/compare 1 generation
    +            CC1G: u1,
    +            ///  Capture/compare 2 generation
    +            CC2G: u1,
    +            reserved5: u2,
    +            ///  Capture/Compare control update generation
    +            COMG: u1,
    +            ///  Trigger generation
    +            TG: u1,
    +            ///  Break generation
    +            BG: u1,
    +            padding: u24,
    +        }),
    +        ///  capture/compare mode register (output mode)
    +        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 selection
    +            CC1S: u2,
    +            ///  Output Compare 1 fast enable
    +            OC1FE: u1,
    +            ///  Output Compare 1 preload enable
    +            OC1PE: u1,
    +            ///  Output Compare 1 mode
    +            OC1M: u3,
    +            reserved8: u1,
    +            ///  Capture/Compare 2 selection
    +            CC2S: u2,
    +            ///  Output Compare 2 fast enable
    +            OC2FE: u1,
    +            ///  Output Compare 2 preload enable
    +            OC2PE: u1,
    +            ///  Output Compare 2 mode
    +            OC2M: u3,
    +            reserved16: u1,
    +            ///  Output Compare 1 mode bit 3
    +            OC1M_3: u1,
    +            reserved24: u7,
    +            ///  Output Compare 2 mode bit 3
    +            OC2M_3: u1,
    +            padding: u7,
    +        }),
    +        reserved32: [4]u8,
    +        ///  capture/compare enable register
    +        CCER: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 output enable
    +            CC1E: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1P: u1,
    +            ///  Capture/Compare 1 complementary output enable
    +            CC1NE: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1NP: u1,
    +            ///  Capture/Compare 2 output enable
    +            CC2E: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2P: u1,
    +            reserved7: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2NP: u1,
    +            padding: u24,
    +        }),
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  counter value
    +            CNT: u16,
    +            reserved31: u15,
    +            ///  UIF copy
    +            UIFCPY: u1,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Auto-reload value
    +            ARR: u16,
    +            padding: u16,
    +        }),
    +        ///  repetition counter register
    +        RCR: mmio.Mmio(packed struct(u32) {
    +            ///  Repetition counter value
    +            REP: u8,
    +            padding: u24,
    +        }),
    +        ///  capture/compare register 1
    +        CCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 value
    +            CCR1: u16,
    +            padding: u16,
    +        }),
    +        ///  capture/compare register 2
    +        CCR2: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 2 value
    +            CCR2: u16,
    +            padding: u16,
    +        }),
    +        reserved68: [8]u8,
    +        ///  break and dead-time register
    +        BDTR: mmio.Mmio(packed struct(u32) {
    +            ///  Dead-time generator setup
    +            DTG: u8,
    +            ///  Lock configuration
    +            LOCK: u2,
    +            ///  Off-state selection for Idle mode
    +            OSSI: u1,
    +            ///  Off-state selection for Run mode
    +            OSSR: u1,
    +            ///  Break enable
    +            BKE: u1,
    +            ///  Break polarity
    +            BKP: u1,
    +            ///  Automatic output enable
    +            AOE: u1,
    +            ///  Main output enable
    +            MOE: u1,
    +            ///  Break filter
    +            BKF: u4,
    +            padding: u12,
    +        }),
    +        ///  DMA control register
    +        DCR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA base address
    +            DBA: u5,
    +            reserved8: u3,
    +            ///  DMA burst length
    +            DBL: u5,
    +            padding: u19,
    +        }),
    +        ///  DMA address for full transfer
    +        DMAR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA register for burst accesses
    +            DMAB: u16,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  General-purpose-timers
    +    pub const TIM16 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            ///  One-pulse mode
    +            OPM: u1,
    +            reserved7: u3,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            ///  Clock division
    +            CKD: u2,
    +            reserved11: u1,
    +            ///  UIF status bit remapping
    +            UIFREMAP: u1,
    +            padding: u20,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/compare preloaded control
    +            CCPC: u1,
    +            reserved2: u1,
    +            ///  Capture/compare control update selection
    +            CCUS: u1,
    +            ///  Capture/compare DMA selection
    +            CCDS: u1,
    +            reserved8: u4,
    +            ///  Output Idle state 1
    +            OIS1: u1,
    +            ///  Output Idle state 1
    +            OIS1N: u1,
    +            padding: u22,
    +        }),
    +        reserved12: [4]u8,
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            ///  Capture/Compare 1 interrupt enable
    +            CC1IE: u1,
    +            reserved5: u3,
    +            ///  COM interrupt enable
    +            COMIE: u1,
    +            ///  Trigger interrupt enable
    +            TIE: u1,
    +            ///  Break interrupt enable
    +            BIE: u1,
    +            ///  Update DMA request enable
    +            UDE: u1,
    +            ///  Capture/Compare 1 DMA request enable
    +            CC1DE: u1,
    +            reserved13: u3,
    +            ///  COM DMA request enable
    +            COMDE: u1,
    +            ///  Trigger DMA request enable
    +            TDE: u1,
    +            padding: u17,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            ///  Capture/compare 1 interrupt flag
    +            CC1IF: u1,
    +            reserved5: u3,
    +            ///  COM interrupt flag
    +            COMIF: u1,
    +            ///  Trigger interrupt flag
    +            TIF: u1,
    +            ///  Break interrupt flag
    +            BIF: u1,
    +            reserved9: u1,
    +            ///  Capture/Compare 1 overcapture flag
    +            CC1OF: u1,
    +            padding: u22,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            ///  Capture/compare 1 generation
    +            CC1G: u1,
    +            reserved5: u3,
    +            ///  Capture/Compare control update generation
    +            COMG: u1,
    +            ///  Trigger generation
    +            TG: u1,
    +            ///  Break generation
    +            BG: u1,
    +            padding: u24,
    +        }),
    +        ///  capture/compare mode register (output mode)
    +        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 selection
    +            CC1S: u2,
    +            ///  Output Compare 1 fast enable
    +            OC1FE: u1,
    +            ///  Output Compare 1 preload enable
    +            OC1PE: u1,
    +            ///  Output Compare 1 mode
    +            OC1M: u3,
    +            reserved16: u9,
    +            ///  Output Compare 1 mode
    +            OC1M_3: u1,
    +            padding: u15,
    +        }),
    +        reserved32: [4]u8,
    +        ///  capture/compare enable register
    +        CCER: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 output enable
    +            CC1E: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1P: u1,
    +            ///  Capture/Compare 1 complementary output enable
    +            CC1NE: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1NP: u1,
    +            padding: u28,
    +        }),
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  counter value
    +            CNT: u16,
    +            reserved31: u15,
    +            ///  UIF Copy
    +            UIFCPY: u1,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Auto-reload value
    +            ARR: u16,
    +            padding: u16,
    +        }),
    +        ///  repetition counter register
    +        RCR: mmio.Mmio(packed struct(u32) {
    +            ///  Repetition counter value
    +            REP: u8,
    +            padding: u24,
    +        }),
    +        ///  capture/compare register 1
    +        CCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 value
    +            CCR1: u16,
    +            padding: u16,
    +        }),
    +        reserved68: [12]u8,
    +        ///  break and dead-time register
    +        BDTR: mmio.Mmio(packed struct(u32) {
    +            ///  Dead-time generator setup
    +            DTG: u8,
    +            ///  Lock configuration
    +            LOCK: u2,
    +            ///  Off-state selection for Idle mode
    +            OSSI: u1,
    +            ///  Off-state selection for Run mode
    +            OSSR: u1,
    +            ///  Break enable
    +            BKE: u1,
    +            ///  Break polarity
    +            BKP: u1,
    +            ///  Automatic output enable
    +            AOE: u1,
    +            ///  Main output enable
    +            MOE: u1,
    +            ///  Break filter
    +            BKF: u4,
    +            padding: u12,
    +        }),
    +        ///  DMA control register
    +        DCR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA base address
    +            DBA: u5,
    +            reserved8: u3,
    +            ///  DMA burst length
    +            DBL: u5,
    +            padding: u19,
    +        }),
    +        ///  DMA address for full transfer
    +        DMAR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA register for burst accesses
    +            DMAB: u16,
    +            padding: u16,
    +        }),
    +        ///  option register
    +        OR: u32,
    +    };
    +
    +    ///  General purpose timer
    +    pub const TIM17 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            ///  One-pulse mode
    +            OPM: u1,
    +            reserved7: u3,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            ///  Clock division
    +            CKD: u2,
    +            reserved11: u1,
    +            ///  UIF status bit remapping
    +            UIFREMAP: u1,
    +            padding: u20,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/compare preloaded control
    +            CCPC: u1,
    +            reserved2: u1,
    +            ///  Capture/compare control update selection
    +            CCUS: u1,
    +            ///  Capture/compare DMA selection
    +            CCDS: u1,
    +            reserved8: u4,
    +            ///  Output Idle state 1
    +            OIS1: u1,
    +            ///  Output Idle state 1
    +            OIS1N: u1,
    +            padding: u22,
    +        }),
    +        reserved12: [4]u8,
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            ///  Capture/Compare 1 interrupt enable
    +            CC1IE: u1,
    +            reserved5: u3,
    +            ///  COM interrupt enable
    +            COMIE: u1,
    +            ///  Trigger interrupt enable
    +            TIE: u1,
    +            ///  Break interrupt enable
    +            BIE: u1,
    +            ///  Update DMA request enable
    +            UDE: u1,
    +            ///  Capture/Compare 1 DMA request enable
    +            CC1DE: u1,
    +            reserved13: u3,
    +            ///  COM DMA request enable
    +            COMDE: u1,
    +            ///  Trigger DMA request enable
    +            TDE: u1,
    +            padding: u17,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            ///  Capture/compare 1 interrupt flag
    +            CC1IF: u1,
    +            reserved5: u3,
    +            ///  COM interrupt flag
    +            COMIF: u1,
    +            ///  Trigger interrupt flag
    +            TIF: u1,
    +            ///  Break interrupt flag
    +            BIF: u1,
    +            reserved9: u1,
    +            ///  Capture/Compare 1 overcapture flag
    +            CC1OF: u1,
    +            padding: u22,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            ///  Capture/compare 1 generation
    +            CC1G: u1,
    +            reserved5: u3,
    +            ///  Capture/Compare control update generation
    +            COMG: u1,
    +            ///  Trigger generation
    +            TG: u1,
    +            ///  Break generation
    +            BG: u1,
    +            padding: u24,
    +        }),
    +        ///  capture/compare mode register (output mode)
    +        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 selection
    +            CC1S: u2,
    +            ///  Output Compare 1 fast enable
    +            OC1FE: u1,
    +            ///  Output Compare 1 preload enable
    +            OC1PE: u1,
    +            ///  Output Compare 1 mode
    +            OC1M: u3,
    +            reserved16: u9,
    +            ///  Output Compare 1 mode
    +            OC1M_3: u1,
    +            padding: u15,
    +        }),
    +        reserved32: [4]u8,
    +        ///  capture/compare enable register
    +        CCER: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 output enable
    +            CC1E: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1P: u1,
    +            ///  Capture/Compare 1 complementary output enable
    +            CC1NE: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1NP: u1,
    +            padding: u28,
    +        }),
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  counter value
    +            CNT: u16,
    +            reserved31: u15,
    +            ///  UIF Copy
    +            UIFCPY: u1,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Auto-reload value
    +            ARR: u16,
    +            padding: u16,
    +        }),
    +        ///  repetition counter register
    +        RCR: mmio.Mmio(packed struct(u32) {
    +            ///  Repetition counter value
    +            REP: u8,
    +            padding: u24,
    +        }),
    +        ///  capture/compare register 1
    +        CCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 value
    +            CCR1: u16,
    +            padding: u16,
    +        }),
    +        reserved68: [12]u8,
    +        ///  break and dead-time register
    +        BDTR: mmio.Mmio(packed struct(u32) {
    +            ///  Dead-time generator setup
    +            DTG: u8,
    +            ///  Lock configuration
    +            LOCK: u2,
    +            ///  Off-state selection for Idle mode
    +            OSSI: u1,
    +            ///  Off-state selection for Run mode
    +            OSSR: u1,
    +            ///  Break enable
    +            BKE: u1,
    +            ///  Break polarity
    +            BKP: u1,
    +            ///  Automatic output enable
    +            AOE: u1,
    +            ///  Main output enable
    +            MOE: u1,
    +            ///  Break filter
    +            BKF: u4,
    +            padding: u12,
    +        }),
    +        ///  DMA control register
    +        DCR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA base address
    +            DBA: u5,
    +            reserved8: u3,
    +            ///  DMA burst length
    +            DBL: u5,
    +            padding: u19,
    +        }),
    +        ///  DMA address for full transfer
    +        DMAR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA register for burst accesses
    +            DMAB: u16,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  Universal synchronous asynchronous receiver transmitter
    +    pub const USART1 = extern struct {
    +        ///  Control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  USART enable
    +            UE: u1,
    +            ///  USART enable in Stop mode
    +            UESM: u1,
    +            ///  Receiver enable
    +            RE: u1,
    +            ///  Transmitter enable
    +            TE: u1,
    +            ///  IDLE interrupt enable
    +            IDLEIE: u1,
    +            ///  RXNE interrupt enable
    +            RXNEIE: u1,
    +            ///  Transmission complete interrupt enable
    +            TCIE: u1,
    +            ///  interrupt enable
    +            TXEIE: u1,
    +            ///  PE interrupt enable
    +            PEIE: u1,
    +            ///  Parity selection
    +            PS: u1,
    +            ///  Parity control enable
    +            PCE: u1,
    +            ///  Receiver wakeup method
    +            WAKE: u1,
    +            ///  Word length
    +            M: u1,
    +            ///  Mute mode enable
    +            MME: u1,
    +            ///  Character match interrupt enable
    +            CMIE: u1,
    +            ///  Oversampling mode
    +            OVER8: u1,
    +            ///  Driver Enable deassertion time
    +            DEDT: u5,
    +            ///  Driver Enable assertion time
    +            DEAT: u5,
    +            ///  Receiver timeout interrupt enable
    +            RTOIE: u1,
    +            ///  End of Block interrupt enable
    +            EOBIE: u1,
    +            padding: u4,
    +        }),
    +        ///  Control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            reserved4: u4,
    +            ///  7-bit Address Detection/4-bit Address Detection
    +            ADDM7: u1,
    +            ///  LIN break detection length
    +            LBDL: u1,
    +            ///  LIN break detection interrupt enable
    +            LBDIE: u1,
    +            reserved8: u1,
    +            ///  Last bit clock pulse
    +            LBCL: u1,
    +            ///  Clock phase
    +            CPHA: u1,
    +            ///  Clock polarity
    +            CPOL: u1,
    +            ///  Clock enable
    +            CLKEN: u1,
    +            ///  STOP bits
    +            STOP: u2,
    +            ///  LIN mode enable
    +            LINEN: u1,
    +            ///  Swap TX/RX pins
    +            SWAP: u1,
    +            ///  RX pin active level inversion
    +            RXINV: u1,
    +            ///  TX pin active level inversion
    +            TXINV: u1,
    +            ///  Binary data inversion
    +            DATAINV: u1,
    +            ///  Most significant bit first
    +            MSBFIRST: u1,
    +            ///  Auto baud rate enable
    +            ABREN: u1,
    +            ///  Auto baud rate mode
    +            ABRMOD: u2,
    +            ///  Receiver timeout enable
    +            RTOEN: u1,
    +            ///  Address of the USART node
    +            ADD0: u4,
    +            ///  Address of the USART node
    +            ADD4: u4,
    +        }),
    +        ///  Control register 3
    +        CR3: mmio.Mmio(packed struct(u32) {
    +            ///  Error interrupt enable
    +            EIE: u1,
    +            ///  IrDA mode enable
    +            IREN: u1,
    +            ///  IrDA low-power
    +            IRLP: u1,
    +            ///  Half-duplex selection
    +            HDSEL: u1,
    +            ///  Smartcard NACK enable
    +            NACK: u1,
    +            ///  Smartcard mode enable
    +            SCEN: u1,
    +            ///  DMA enable receiver
    +            DMAR: u1,
    +            ///  DMA enable transmitter
    +            DMAT: u1,
    +            ///  RTS enable
    +            RTSE: u1,
    +            ///  CTS enable
    +            CTSE: u1,
    +            ///  CTS interrupt enable
    +            CTSIE: u1,
    +            ///  One sample bit method enable
    +            ONEBIT: u1,
    +            ///  Overrun Disable
    +            OVRDIS: u1,
    +            ///  DMA Disable on Reception Error
    +            DDRE: u1,
    +            ///  Driver enable mode
    +            DEM: u1,
    +            ///  Driver enable polarity selection
    +            DEP: u1,
    +            reserved17: u1,
    +            ///  Smartcard auto-retry count
    +            SCARCNT: u3,
    +            ///  Wakeup from Stop mode interrupt flag selection
    +            WUS: u2,
    +            ///  Wakeup from Stop mode interrupt enable
    +            WUFIE: u1,
    +            padding: u9,
    +        }),
    +        ///  Baud rate register
    +        BRR: mmio.Mmio(packed struct(u32) {
    +            ///  fraction of USARTDIV
    +            DIV_Fraction: u4,
    +            ///  mantissa of USARTDIV
    +            DIV_Mantissa: u12,
    +            padding: u16,
    +        }),
    +        ///  Guard time and prescaler register
    +        GTPR: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u8,
    +            ///  Guard time value
    +            GT: u8,
    +            padding: u16,
    +        }),
    +        ///  Receiver timeout register
    +        RTOR: mmio.Mmio(packed struct(u32) {
    +            ///  Receiver timeout value
    +            RTO: u24,
    +            ///  Block Length
    +            BLEN: u8,
    +        }),
    +        ///  Request register
    +        RQR: mmio.Mmio(packed struct(u32) {
    +            ///  Auto baud rate request
    +            ABRRQ: u1,
    +            ///  Send break request
    +            SBKRQ: u1,
    +            ///  Mute mode request
    +            MMRQ: u1,
    +            ///  Receive data flush request
    +            RXFRQ: u1,
    +            ///  Transmit data flush request
    +            TXFRQ: u1,
    +            padding: u27,
    +        }),
    +        ///  Interrupt & status register
    +        ISR: mmio.Mmio(packed struct(u32) {
    +            ///  Parity error
    +            PE: u1,
    +            ///  Framing error
    +            FE: u1,
    +            ///  Noise detected flag
    +            NF: u1,
    +            ///  Overrun error
    +            ORE: u1,
    +            ///  Idle line detected
    +            IDLE: u1,
    +            ///  Read data register not empty
    +            RXNE: u1,
    +            ///  Transmission complete
    +            TC: u1,
    +            ///  Transmit data register empty
    +            TXE: u1,
    +            ///  LIN break detection flag
    +            LBDF: u1,
    +            ///  CTS interrupt flag
    +            CTSIF: u1,
    +            ///  CTS flag
    +            CTS: u1,
    +            ///  Receiver timeout
    +            RTOF: u1,
    +            ///  End of block flag
    +            EOBF: u1,
    +            reserved14: u1,
    +            ///  Auto baud rate error
    +            ABRE: u1,
    +            ///  Auto baud rate flag
    +            ABRF: u1,
    +            ///  Busy flag
    +            BUSY: u1,
    +            ///  character match flag
    +            CMF: u1,
    +            ///  Send break flag
    +            SBKF: u1,
    +            ///  Receiver wakeup from Mute mode
    +            RWU: u1,
    +            ///  Wakeup from Stop mode flag
    +            WUF: u1,
    +            ///  Transmit enable acknowledge flag
    +            TEACK: u1,
    +            ///  Receive enable acknowledge flag
    +            REACK: u1,
    +            padding: u9,
    +        }),
    +        ///  Interrupt flag clear register
    +        ICR: mmio.Mmio(packed struct(u32) {
    +            ///  Parity error clear flag
    +            PECF: u1,
    +            ///  Framing error clear flag
    +            FECF: u1,
    +            ///  Noise detected clear flag
    +            NCF: u1,
    +            ///  Overrun error clear flag
    +            ORECF: u1,
    +            ///  Idle line detected clear flag
    +            IDLECF: u1,
    +            reserved6: u1,
    +            ///  Transmission complete clear flag
    +            TCCF: u1,
    +            reserved8: u1,
    +            ///  LIN break detection clear flag
    +            LBDCF: u1,
    +            ///  CTS clear flag
    +            CTSCF: u1,
    +            reserved11: u1,
    +            ///  Receiver timeout clear flag
    +            RTOCF: u1,
    +            ///  End of timeout clear flag
    +            EOBCF: u1,
    +            reserved17: u4,
    +            ///  Character match clear flag
    +            CMCF: u1,
    +            reserved20: u2,
    +            ///  Wakeup from Stop mode clear flag
    +            WUCF: u1,
    +            padding: u11,
    +        }),
    +        ///  Receive data register
    +        RDR: mmio.Mmio(packed struct(u32) {
    +            ///  Receive data value
    +            RDR: u9,
    +            padding: u23,
    +        }),
    +        ///  Transmit data register
    +        TDR: mmio.Mmio(packed struct(u32) {
    +            ///  Transmit data value
    +            TDR: u9,
    +            padding: u23,
    +        }),
    +    };
    +
    +    ///  System configuration controller _Comparator and Operational amplifier
    +    pub const SYSCFG_COMP_OPAMP = extern struct {
    +        ///  configuration register 1
    +        SYSCFG_CFGR1: mmio.Mmio(packed struct(u32) {
    +            ///  Memory mapping selection bits
    +            MEM_MODE: u2,
    +            reserved5: u3,
    +            ///  USB interrupt remap
    +            USB_IT_RMP: u1,
    +            ///  Timer 1 ITR3 selection
    +            TIM1_ITR_RMP: u1,
    +            ///  DAC trigger remap (when TSEL = 001)
    +            DAC_TRIG_RMP: u1,
    +            ///  ADC24 DMA remapping bit
    +            ADC24_DMA_RMP: u1,
    +            reserved11: u2,
    +            ///  TIM16 DMA request remapping bit
    +            TIM16_DMA_RMP: u1,
    +            ///  TIM17 DMA request remapping bit
    +            TIM17_DMA_RMP: u1,
    +            ///  TIM6 and DAC1 DMA request remapping bit
    +            TIM6_DAC1_DMA_RMP: u1,
    +            ///  TIM7 and DAC2 DMA request remapping bit
    +            TIM7_DAC2_DMA_RMP: u1,
    +            reserved16: u1,
    +            ///  Fast Mode Plus (FM+) driving capability activation bits.
    +            I2C_PB6_FM: u1,
    +            ///  Fast Mode Plus (FM+) driving capability activation bits.
    +            I2C_PB7_FM: u1,
    +            ///  Fast Mode Plus (FM+) driving capability activation bits.
    +            I2C_PB8_FM: u1,
    +            ///  Fast Mode Plus (FM+) driving capability activation bits.
    +            I2C_PB9_FM: u1,
    +            ///  I2C1 Fast Mode Plus
    +            I2C1_FM: u1,
    +            ///  I2C2 Fast Mode Plus
    +            I2C2_FM: u1,
    +            ///  Encoder mode
    +            ENCODER_MODE: u2,
    +            reserved26: u2,
    +            ///  Interrupt enable bits from FPU
    +            FPU_IT: u6,
    +        }),
    +        ///  CCM SRAM protection register
    +        SYSCFG_RCR: mmio.Mmio(packed struct(u32) {
    +            ///  CCM SRAM page write protection bit
    +            PAGE0_WP: u1,
    +            ///  CCM SRAM page write protection bit
    +            PAGE1_WP: u1,
    +            ///  CCM SRAM page write protection bit
    +            PAGE2_WP: u1,
    +            ///  CCM SRAM page write protection bit
    +            PAGE3_WP: u1,
    +            ///  CCM SRAM page write protection bit
    +            PAGE4_WP: u1,
    +            ///  CCM SRAM page write protection bit
    +            PAGE5_WP: u1,
    +            ///  CCM SRAM page write protection bit
    +            PAGE6_WP: u1,
    +            ///  CCM SRAM page write protection bit
    +            PAGE7_WP: u1,
    +            padding: u24,
    +        }),
    +        ///  external interrupt configuration register 1
    +        SYSCFG_EXTICR1: mmio.Mmio(packed struct(u32) {
    +            ///  EXTI 0 configuration bits
    +            EXTI0: u4,
    +            ///  EXTI 1 configuration bits
    +            EXTI1: u4,
    +            ///  EXTI 2 configuration bits
    +            EXTI2: u4,
    +            ///  EXTI 3 configuration bits
    +            EXTI3: u4,
    +            padding: u16,
    +        }),
    +        ///  external interrupt configuration register 2
    +        SYSCFG_EXTICR2: mmio.Mmio(packed struct(u32) {
    +            ///  EXTI 4 configuration bits
    +            EXTI4: u4,
    +            ///  EXTI 5 configuration bits
    +            EXTI5: u4,
    +            ///  EXTI 6 configuration bits
    +            EXTI6: u4,
    +            ///  EXTI 7 configuration bits
    +            EXTI7: u4,
    +            padding: u16,
    +        }),
    +        ///  external interrupt configuration register 3
    +        SYSCFG_EXTICR3: mmio.Mmio(packed struct(u32) {
    +            ///  EXTI 8 configuration bits
    +            EXTI8: u4,
    +            ///  EXTI 9 configuration bits
    +            EXTI9: u4,
    +            ///  EXTI 10 configuration bits
    +            EXTI10: u4,
    +            ///  EXTI 11 configuration bits
    +            EXTI11: u4,
    +            padding: u16,
    +        }),
    +        ///  external interrupt configuration register 4
    +        SYSCFG_EXTICR4: mmio.Mmio(packed struct(u32) {
    +            ///  EXTI 12 configuration bits
    +            EXTI12: u4,
    +            ///  EXTI 13 configuration bits
    +            EXTI13: u4,
    +            ///  EXTI 14 configuration bits
    +            EXTI14: u4,
    +            ///  EXTI 15 configuration bits
    +            EXTI15: u4,
    +            padding: u16,
    +        }),
    +        ///  configuration register 2
    +        SYSCFG_CFGR2: mmio.Mmio(packed struct(u32) {
    +            ///  Cortex-M0 LOCKUP bit enable bit
    +            LOCUP_LOCK: u1,
    +            ///  SRAM parity lock bit
    +            SRAM_PARITY_LOCK: u1,
    +            ///  PVD lock enable bit
    +            PVD_LOCK: u1,
    +            reserved4: u1,
    +            ///  Bypass address bit 29 in parity calculation
    +            BYP_ADD_PAR: u1,
    +            reserved8: u3,
    +            ///  SRAM parity flag
    +            SRAM_PEF: u1,
    +            padding: u23,
    +        }),
    +        ///  control and status register
    +        COMP1_CSR: mmio.Mmio(packed struct(u32) {
    +            ///  Comparator 1 enable
    +            COMP1EN: u1,
    +            ///  COMP1_INP_DAC
    +            COMP1_INP_DAC: u1,
    +            ///  Comparator 1 mode
    +            COMP1MODE: u2,
    +            ///  Comparator 1 inverting input selection
    +            COMP1INSEL: u3,
    +            reserved10: u3,
    +            ///  Comparator 1 output selection
    +            COMP1_OUT_SEL: u4,
    +            reserved15: u1,
    +            ///  Comparator 1 output polarity
    +            COMP1POL: u1,
    +            ///  Comparator 1 hysteresis
    +            COMP1HYST: u2,
    +            ///  Comparator 1 blanking source
    +            COMP1_BLANKING: u3,
    +            reserved30: u9,
    +            ///  Comparator 1 output
    +            COMP1OUT: u1,
    +            ///  Comparator 1 lock
    +            COMP1LOCK: u1,
    +        }),
    +        ///  control and status register
    +        COMP2_CSR: mmio.Mmio(packed struct(u32) {
    +            ///  Comparator 2 enable
    +            COMP2EN: u1,
    +            reserved2: u1,
    +            ///  Comparator 2 mode
    +            COMP2MODE: u2,
    +            ///  Comparator 2 inverting input selection
    +            COMP2INSEL: u3,
    +            ///  Comparator 2 non inverted input selection
    +            COMP2INPSEL: u1,
    +            reserved9: u1,
    +            ///  Comparator 1inverting input selection
    +            COMP2INMSEL: u1,
    +            ///  Comparator 2 output selection
    +            COMP2_OUT_SEL: u4,
    +            reserved15: u1,
    +            ///  Comparator 2 output polarity
    +            COMP2POL: u1,
    +            ///  Comparator 2 hysteresis
    +            COMP2HYST: u2,
    +            ///  Comparator 2 blanking source
    +            COMP2_BLANKING: u3,
    +            reserved31: u10,
    +            ///  Comparator 2 lock
    +            COMP2LOCK: u1,
    +        }),
    +        ///  control and status register
    +        COMP3_CSR: mmio.Mmio(packed struct(u32) {
    +            ///  Comparator 3 enable
    +            COMP3EN: u1,
    +            reserved2: u1,
    +            ///  Comparator 3 mode
    +            COMP3MODE: u2,
    +            ///  Comparator 3 inverting input selection
    +            COMP3INSEL: u3,
    +            ///  Comparator 3 non inverted input selection
    +            COMP3INPSEL: u1,
    +            reserved10: u2,
    +            ///  Comparator 3 output selection
    +            COMP3_OUT_SEL: u4,
    +            reserved15: u1,
    +            ///  Comparator 3 output polarity
    +            COMP3POL: u1,
    +            ///  Comparator 3 hysteresis
    +            COMP3HYST: u2,
    +            ///  Comparator 3 blanking source
    +            COMP3_BLANKING: u3,
    +            reserved30: u9,
    +            ///  Comparator 3 output
    +            COMP3OUT: u1,
    +            ///  Comparator 3 lock
    +            COMP3LOCK: u1,
    +        }),
    +        ///  control and status register
    +        COMP4_CSR: mmio.Mmio(packed struct(u32) {
    +            ///  Comparator 4 enable
    +            COMP4EN: u1,
    +            reserved2: u1,
    +            ///  Comparator 4 mode
    +            COMP4MODE: u2,
    +            ///  Comparator 4 inverting input selection
    +            COMP4INSEL: u3,
    +            ///  Comparator 4 non inverted input selection
    +            COMP4INPSEL: u1,
    +            reserved9: u1,
    +            ///  Comparator 4 window mode
    +            COM4WINMODE: u1,
    +            ///  Comparator 4 output selection
    +            COMP4_OUT_SEL: u4,
    +            reserved15: u1,
    +            ///  Comparator 4 output polarity
    +            COMP4POL: u1,
    +            ///  Comparator 4 hysteresis
    +            COMP4HYST: u2,
    +            ///  Comparator 4 blanking source
    +            COMP4_BLANKING: u3,
    +            reserved30: u9,
    +            ///  Comparator 4 output
    +            COMP4OUT: u1,
    +            ///  Comparator 4 lock
    +            COMP4LOCK: u1,
    +        }),
    +        ///  control and status register
    +        COMP5_CSR: mmio.Mmio(packed struct(u32) {
    +            ///  Comparator 5 enable
    +            COMP5EN: u1,
    +            reserved2: u1,
    +            ///  Comparator 5 mode
    +            COMP5MODE: u2,
    +            ///  Comparator 5 inverting input selection
    +            COMP5INSEL: u3,
    +            ///  Comparator 5 non inverted input selection
    +            COMP5INPSEL: u1,
    +            reserved10: u2,
    +            ///  Comparator 5 output selection
    +            COMP5_OUT_SEL: u4,
    +            reserved15: u1,
    +            ///  Comparator 5 output polarity
    +            COMP5POL: u1,
    +            ///  Comparator 5 hysteresis
    +            COMP5HYST: u2,
    +            ///  Comparator 5 blanking source
    +            COMP5_BLANKING: u3,
    +            reserved30: u9,
    +            ///  Comparator51 output
    +            COMP5OUT: u1,
    +            ///  Comparator 5 lock
    +            COMP5LOCK: u1,
    +        }),
    +        ///  control and status register
    +        COMP6_CSR: mmio.Mmio(packed struct(u32) {
    +            ///  Comparator 6 enable
    +            COMP6EN: u1,
    +            reserved2: u1,
    +            ///  Comparator 6 mode
    +            COMP6MODE: u2,
    +            ///  Comparator 6 inverting input selection
    +            COMP6INSEL: u3,
    +            ///  Comparator 6 non inverted input selection
    +            COMP6INPSEL: u1,
    +            reserved9: u1,
    +            ///  Comparator 6 window mode
    +            COM6WINMODE: u1,
    +            ///  Comparator 6 output selection
    +            COMP6_OUT_SEL: u4,
    +            reserved15: u1,
    +            ///  Comparator 6 output polarity
    +            COMP6POL: u1,
    +            ///  Comparator 6 hysteresis
    +            COMP6HYST: u2,
    +            ///  Comparator 6 blanking source
    +            COMP6_BLANKING: u3,
    +            reserved30: u9,
    +            ///  Comparator 6 output
    +            COMP6OUT: u1,
    +            ///  Comparator 6 lock
    +            COMP6LOCK: u1,
    +        }),
    +        ///  control and status register
    +        COMP7_CSR: mmio.Mmio(packed struct(u32) {
    +            ///  Comparator 7 enable
    +            COMP7EN: u1,
    +            reserved2: u1,
    +            ///  Comparator 7 mode
    +            COMP7MODE: u2,
    +            ///  Comparator 7 inverting input selection
    +            COMP7INSEL: u3,
    +            ///  Comparator 7 non inverted input selection
    +            COMP7INPSEL: u1,
    +            reserved10: u2,
    +            ///  Comparator 7 output selection
    +            COMP7_OUT_SEL: u4,
    +            reserved15: u1,
    +            ///  Comparator 7 output polarity
    +            COMP7POL: u1,
    +            ///  Comparator 7 hysteresis
    +            COMP7HYST: u2,
    +            ///  Comparator 7 blanking source
    +            COMP7_BLANKING: u3,
    +            reserved30: u9,
    +            ///  Comparator 7 output
    +            COMP7OUT: u1,
    +            ///  Comparator 7 lock
    +            COMP7LOCK: u1,
    +        }),
    +        ///  control register
    +        OPAMP1_CSR: mmio.Mmio(packed struct(u32) {
    +            ///  OPAMP1 enable
    +            OPAMP1_EN: u1,
    +            ///  FORCE_VP
    +            FORCE_VP: u1,
    +            ///  OPAMP1 Non inverting input selection
    +            VP_SEL: u2,
    +            reserved5: u1,
    +            ///  OPAMP1 inverting input selection
    +            VM_SEL: u2,
    +            ///  Timer controlled Mux mode enable
    +            TCM_EN: u1,
    +            ///  OPAMP1 inverting input secondary selection
    +            VMS_SEL: u1,
    +            ///  OPAMP1 Non inverting input secondary selection
    +            VPS_SEL: u2,
    +            ///  Calibration mode enable
    +            CALON: u1,
    +            ///  Calibration selection
    +            CALSEL: u2,
    +            ///  Gain in PGA mode
    +            PGA_GAIN: u4,
    +            ///  User trimming enable
    +            USER_TRIM: u1,
    +            ///  Offset trimming value (PMOS)
    +            TRIMOFFSETP: u5,
    +            ///  Offset trimming value (NMOS)
    +            TRIMOFFSETN: u5,
    +            ///  TSTREF
    +            TSTREF: u1,
    +            ///  OPAMP 1 ouput status flag
    +            OUTCAL: u1,
    +            ///  OPAMP 1 lock
    +            LOCK: u1,
    +        }),
    +        ///  control register
    +        OPAMP2_CSR: mmio.Mmio(packed struct(u32) {
    +            ///  OPAMP2 enable
    +            OPAMP2EN: u1,
    +            ///  FORCE_VP
    +            FORCE_VP: u1,
    +            ///  OPAMP2 Non inverting input selection
    +            VP_SEL: u2,
    +            reserved5: u1,
    +            ///  OPAMP2 inverting input selection
    +            VM_SEL: u2,
    +            ///  Timer controlled Mux mode enable
    +            TCM_EN: u1,
    +            ///  OPAMP2 inverting input secondary selection
    +            VMS_SEL: u1,
    +            ///  OPAMP2 Non inverting input secondary selection
    +            VPS_SEL: u2,
    +            ///  Calibration mode enable
    +            CALON: u1,
    +            ///  Calibration selection
    +            CAL_SEL: u2,
    +            ///  Gain in PGA mode
    +            PGA_GAIN: u4,
    +            ///  User trimming enable
    +            USER_TRIM: u1,
    +            ///  Offset trimming value (PMOS)
    +            TRIMOFFSETP: u5,
    +            ///  Offset trimming value (NMOS)
    +            TRIMOFFSETN: u5,
    +            ///  TSTREF
    +            TSTREF: u1,
    +            ///  OPAMP 2 ouput status flag
    +            OUTCAL: u1,
    +            ///  OPAMP 2 lock
    +            LOCK: u1,
    +        }),
    +        ///  control register
    +        OPAMP3_CSR: mmio.Mmio(packed struct(u32) {
    +            ///  OPAMP3 enable
    +            OPAMP3EN: u1,
    +            ///  FORCE_VP
    +            FORCE_VP: u1,
    +            ///  OPAMP3 Non inverting input selection
    +            VP_SEL: u2,
    +            reserved5: u1,
    +            ///  OPAMP3 inverting input selection
    +            VM_SEL: u2,
    +            ///  Timer controlled Mux mode enable
    +            TCM_EN: u1,
    +            ///  OPAMP3 inverting input secondary selection
    +            VMS_SEL: u1,
    +            ///  OPAMP3 Non inverting input secondary selection
    +            VPS_SEL: u2,
    +            ///  Calibration mode enable
    +            CALON: u1,
    +            ///  Calibration selection
    +            CALSEL: u2,
    +            ///  Gain in PGA mode
    +            PGA_GAIN: u4,
    +            ///  User trimming enable
    +            USER_TRIM: u1,
    +            ///  Offset trimming value (PMOS)
    +            TRIMOFFSETP: u5,
    +            ///  Offset trimming value (NMOS)
    +            TRIMOFFSETN: u5,
    +            ///  TSTREF
    +            TSTREF: u1,
    +            ///  OPAMP 3 ouput status flag
    +            OUTCAL: u1,
    +            ///  OPAMP 3 lock
    +            LOCK: u1,
    +        }),
    +        ///  control register
    +        OPAMP4_CSR: mmio.Mmio(packed struct(u32) {
    +            ///  OPAMP4 enable
    +            OPAMP4EN: u1,
    +            ///  FORCE_VP
    +            FORCE_VP: u1,
    +            ///  OPAMP4 Non inverting input selection
    +            VP_SEL: u2,
    +            reserved5: u1,
    +            ///  OPAMP4 inverting input selection
    +            VM_SEL: u2,
    +            ///  Timer controlled Mux mode enable
    +            TCM_EN: u1,
    +            ///  OPAMP4 inverting input secondary selection
    +            VMS_SEL: u1,
    +            ///  OPAMP4 Non inverting input secondary selection
    +            VPS_SEL: u2,
    +            ///  Calibration mode enable
    +            CALON: u1,
    +            ///  Calibration selection
    +            CALSEL: u2,
    +            ///  Gain in PGA mode
    +            PGA_GAIN: u4,
    +            ///  User trimming enable
    +            USER_TRIM: u1,
    +            ///  Offset trimming value (PMOS)
    +            TRIMOFFSETP: u5,
    +            ///  Offset trimming value (NMOS)
    +            TRIMOFFSETN: u5,
    +            ///  TSTREF
    +            TSTREF: u1,
    +            ///  OPAMP 4 ouput status flag
    +            OUTCAL: u1,
    +            ///  OPAMP 4 lock
    +            LOCK: u1,
    +        }),
    +    };
    +
    +    ///  Independent watchdog
    +    pub const IWDG = extern struct {
    +        ///  Key register
    +        KR: mmio.Mmio(packed struct(u32) {
    +            ///  Key value
    +            KEY: u16,
    +            padding: u16,
    +        }),
    +        ///  Prescaler register
    +        PR: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler divider
    +            PR: u3,
    +            padding: u29,
    +        }),
    +        ///  Reload register
    +        RLR: mmio.Mmio(packed struct(u32) {
    +            ///  Watchdog counter reload value
    +            RL: u12,
    +            padding: u20,
    +        }),
    +        ///  Status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Watchdog prescaler value update
    +            PVU: u1,
    +            ///  Watchdog counter reload value update
    +            RVU: u1,
    +            ///  Watchdog counter window value update
    +            WVU: u1,
    +            padding: u29,
    +        }),
    +        ///  Window register
    +        WINR: mmio.Mmio(packed struct(u32) {
    +            ///  Watchdog counter window value
    +            WIN: u12,
    +            padding: u20,
    +        }),
    +    };
    +
    +    ///  Analog-to-Digital Converter
    +    pub const ADC1_2 = extern struct {
    +        ///  ADC Common status register
    +        CSR: mmio.Mmio(packed struct(u32) {
    +            ///  ADDRDY_MST
    +            ADDRDY_MST: u1,
    +            ///  EOSMP_MST
    +            EOSMP_MST: u1,
    +            ///  EOC_MST
    +            EOC_MST: u1,
    +            ///  EOS_MST
    +            EOS_MST: u1,
    +            ///  OVR_MST
    +            OVR_MST: u1,
    +            ///  JEOC_MST
    +            JEOC_MST: u1,
    +            ///  JEOS_MST
    +            JEOS_MST: u1,
    +            ///  AWD1_MST
    +            AWD1_MST: u1,
    +            ///  AWD2_MST
    +            AWD2_MST: u1,
    +            ///  AWD3_MST
    +            AWD3_MST: u1,
    +            ///  JQOVF_MST
    +            JQOVF_MST: u1,
    +            reserved16: u5,
    +            ///  ADRDY_SLV
    +            ADRDY_SLV: u1,
    +            ///  EOSMP_SLV
    +            EOSMP_SLV: u1,
    +            ///  End of regular conversion of the slave ADC
    +            EOC_SLV: u1,
    +            ///  End of regular sequence flag of the slave ADC
    +            EOS_SLV: u1,
    +            ///  Overrun flag of the slave ADC
    +            OVR_SLV: u1,
    +            ///  End of injected conversion flag of the slave ADC
    +            JEOC_SLV: u1,
    +            ///  End of injected sequence flag of the slave ADC
    +            JEOS_SLV: u1,
    +            ///  Analog watchdog 1 flag of the slave ADC
    +            AWD1_SLV: u1,
    +            ///  Analog watchdog 2 flag of the slave ADC
    +            AWD2_SLV: u1,
    +            ///  Analog watchdog 3 flag of the slave ADC
    +            AWD3_SLV: u1,
    +            ///  Injected Context Queue Overflow flag of the slave ADC
    +            JQOVF_SLV: u1,
    +            padding: u5,
    +        }),
    +        reserved8: [4]u8,
    +        ///  ADC common control register
    +        CCR: mmio.Mmio(packed struct(u32) {
    +            ///  Multi ADC mode selection
    +            MULT: u5,
    +            reserved8: u3,
    +            ///  Delay between 2 sampling phases
    +            DELAY: u4,
    +            reserved13: u1,
    +            ///  DMA configuration (for multi-ADC mode)
    +            DMACFG: u1,
    +            ///  Direct memory access mode for multi ADC mode
    +            MDMA: u2,
    +            ///  ADC clock mode
    +            CKMODE: u2,
    +            reserved22: u4,
    +            ///  VREFINT enable
    +            VREFEN: u1,
    +            ///  Temperature sensor enable
    +            TSEN: u1,
    +            ///  VBAT enable
    +            VBATEN: u1,
    +            padding: u7,
    +        }),
    +        ///  ADC common regular data register for dual and triple modes
    +        CDR: mmio.Mmio(packed struct(u32) {
    +            ///  Regular data of the master ADC
    +            RDATA_MST: u16,
    +            ///  Regular data of the slave ADC
    +            RDATA_SLV: u16,
    +        }),
    +    };
    +
    +    ///  Window watchdog
    +    pub const WWDG = extern struct {
    +        ///  Control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  7-bit counter
    +            T: u7,
    +            ///  Activation bit
    +            WDGA: u1,
    +            padding: u24,
    +        }),
    +        ///  Configuration register
    +        CFR: mmio.Mmio(packed struct(u32) {
    +            ///  7-bit window value
    +            W: u7,
    +            ///  Timer base
    +            WDGTB: u2,
    +            ///  Early wakeup interrupt
    +            EWI: u1,
    +            padding: u22,
    +        }),
    +        ///  Status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Early wakeup interrupt flag
    +            EWIF: u1,
    +            padding: u31,
    +        }),
    +    };
    +
    +    ///  Serial peripheral interface/Inter-IC sound
    +    pub const SPI1 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Clock phase
    +            CPHA: u1,
    +            ///  Clock polarity
    +            CPOL: u1,
    +            ///  Master selection
    +            MSTR: u1,
    +            ///  Baud rate control
    +            BR: u3,
    +            ///  SPI enable
    +            SPE: u1,
    +            ///  Frame format
    +            LSBFIRST: u1,
    +            ///  Internal slave select
    +            SSI: u1,
    +            ///  Software slave management
    +            SSM: u1,
    +            ///  Receive only
    +            RXONLY: u1,
    +            ///  CRC length
    +            CRCL: u1,
    +            ///  CRC transfer next
    +            CRCNEXT: u1,
    +            ///  Hardware CRC calculation enable
    +            CRCEN: u1,
    +            ///  Output enable in bidirectional mode
    +            BIDIOE: u1,
    +            ///  Bidirectional data mode enable
    +            BIDIMODE: u1,
    +            padding: u16,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            ///  Rx buffer DMA enable
    +            RXDMAEN: u1,
    +            ///  Tx buffer DMA enable
    +            TXDMAEN: u1,
    +            ///  SS output enable
    +            SSOE: u1,
    +            ///  NSS pulse management
    +            NSSP: u1,
    +            ///  Frame format
    +            FRF: u1,
    +            ///  Error interrupt enable
    +            ERRIE: u1,
    +            ///  RX buffer not empty interrupt enable
    +            RXNEIE: u1,
    +            ///  Tx buffer empty interrupt enable
    +            TXEIE: u1,
    +            ///  Data size
    +            DS: u4,
    +            ///  FIFO reception threshold
    +            FRXTH: u1,
    +            ///  Last DMA transfer for reception
    +            LDMA_RX: u1,
    +            ///  Last DMA transfer for transmission
    +            LDMA_TX: u1,
    +            padding: u17,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Receive buffer not empty
    +            RXNE: u1,
    +            ///  Transmit buffer empty
    +            TXE: u1,
    +            ///  Channel side
    +            CHSIDE: u1,
    +            ///  Underrun flag
    +            UDR: u1,
    +            ///  CRC error flag
    +            CRCERR: u1,
    +            ///  Mode fault
    +            MODF: u1,
    +            ///  Overrun flag
    +            OVR: u1,
    +            ///  Busy flag
    +            BSY: u1,
    +            ///  TI frame format error
    +            TIFRFE: u1,
    +            ///  FIFO reception level
    +            FRLVL: u2,
    +            ///  FIFO transmission level
    +            FTLVL: u2,
    +            padding: u19,
    +        }),
    +        ///  data register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  Data register
    +            DR: u16,
    +            padding: u16,
    +        }),
    +        ///  CRC polynomial register
    +        CRCPR: mmio.Mmio(packed struct(u32) {
    +            ///  CRC polynomial register
    +            CRCPOLY: u16,
    +            padding: u16,
    +        }),
    +        ///  RX CRC register
    +        RXCRCR: mmio.Mmio(packed struct(u32) {
    +            ///  Rx CRC register
    +            RxCRC: u16,
    +            padding: u16,
    +        }),
    +        ///  TX CRC register
    +        TXCRCR: mmio.Mmio(packed struct(u32) {
    +            ///  Tx CRC register
    +            TxCRC: u16,
    +            padding: u16,
    +        }),
    +        ///  I2S configuration register
    +        I2SCFGR: mmio.Mmio(packed struct(u32) {
    +            ///  Channel length (number of bits per audio channel)
    +            CHLEN: u1,
    +            ///  Data length to be transferred
    +            DATLEN: u2,
    +            ///  Steady state clock polarity
    +            CKPOL: u1,
    +            ///  I2S standard selection
    +            I2SSTD: u2,
    +            reserved7: u1,
    +            ///  PCM frame synchronization
    +            PCMSYNC: u1,
    +            ///  I2S configuration mode
    +            I2SCFG: u2,
    +            ///  I2S Enable
    +            I2SE: u1,
    +            ///  I2S mode selection
    +            I2SMOD: u1,
    +            padding: u20,
    +        }),
    +        ///  I2S prescaler register
    +        I2SPR: mmio.Mmio(packed struct(u32) {
    +            ///  I2S Linear prescaler
    +            I2SDIV: u8,
    +            ///  Odd factor for the prescaler
    +            ODD: u1,
    +            ///  Master clock output enable
    +            MCKOE: u1,
    +            padding: u22,
    +        }),
    +    };
    +
    +    ///  Real-time clock
    +    pub const RTC = extern struct {
    +        ///  time register
    +        TR: mmio.Mmio(packed struct(u32) {
    +            ///  Second units in BCD format
    +            SU: u4,
    +            ///  Second tens in BCD format
    +            ST: u3,
    +            reserved8: u1,
    +            ///  Minute units in BCD format
    +            MNU: u4,
    +            ///  Minute tens in BCD format
    +            MNT: u3,
    +            reserved16: u1,
    +            ///  Hour units in BCD format
    +            HU: u4,
    +            ///  Hour tens in BCD format
    +            HT: u2,
    +            ///  AM/PM notation
    +            PM: u1,
    +            padding: u9,
    +        }),
    +        ///  date register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  Date units in BCD format
    +            DU: u4,
    +            ///  Date tens in BCD format
    +            DT: u2,
    +            reserved8: u2,
    +            ///  Month units in BCD format
    +            MU: u4,
    +            ///  Month tens in BCD format
    +            MT: u1,
    +            ///  Week day units
    +            WDU: u3,
    +            ///  Year units in BCD format
    +            YU: u4,
    +            ///  Year tens in BCD format
    +            YT: u4,
    +            padding: u8,
    +        }),
    +        ///  control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  Wakeup clock selection
    +            WCKSEL: u3,
    +            ///  Time-stamp event active edge
    +            TSEDGE: u1,
    +            ///  Reference clock detection enable (50 or 60 Hz)
    +            REFCKON: u1,
    +            ///  Bypass the shadow registers
    +            BYPSHAD: u1,
    +            ///  Hour format
    +            FMT: u1,
    +            reserved8: u1,
    +            ///  Alarm A enable
    +            ALRAE: u1,
    +            ///  Alarm B enable
    +            ALRBE: u1,
    +            ///  Wakeup timer enable
    +            WUTE: u1,
    +            ///  Time stamp enable
    +            TSE: u1,
    +            ///  Alarm A interrupt enable
    +            ALRAIE: u1,
    +            ///  Alarm B interrupt enable
    +            ALRBIE: u1,
    +            ///  Wakeup timer interrupt enable
    +            WUTIE: u1,
    +            ///  Time-stamp interrupt enable
    +            TSIE: u1,
    +            ///  Add 1 hour (summer time change)
    +            ADD1H: u1,
    +            ///  Subtract 1 hour (winter time change)
    +            SUB1H: u1,
    +            ///  Backup
    +            BKP: u1,
    +            ///  Calibration output selection
    +            COSEL: u1,
    +            ///  Output polarity
    +            POL: u1,
    +            ///  Output selection
    +            OSEL: u2,
    +            ///  Calibration output enable
    +            COE: u1,
    +            padding: u8,
    +        }),
    +        ///  initialization and status register
    +        ISR: mmio.Mmio(packed struct(u32) {
    +            ///  Alarm A write flag
    +            ALRAWF: u1,
    +            ///  Alarm B write flag
    +            ALRBWF: u1,
    +            ///  Wakeup timer write flag
    +            WUTWF: u1,
    +            ///  Shift operation pending
    +            SHPF: u1,
    +            ///  Initialization status flag
    +            INITS: u1,
    +            ///  Registers synchronization flag
    +            RSF: u1,
    +            ///  Initialization flag
    +            INITF: u1,
    +            ///  Initialization mode
    +            INIT: u1,
    +            ///  Alarm A flag
    +            ALRAF: u1,
    +            ///  Alarm B flag
    +            ALRBF: u1,
    +            ///  Wakeup timer flag
    +            WUTF: u1,
    +            ///  Time-stamp flag
    +            TSF: u1,
    +            ///  Time-stamp overflow flag
    +            TSOVF: u1,
    +            ///  Tamper detection flag
    +            TAMP1F: u1,
    +            ///  RTC_TAMP2 detection flag
    +            TAMP2F: u1,
    +            ///  RTC_TAMP3 detection flag
    +            TAMP3F: u1,
    +            ///  Recalibration pending Flag
    +            RECALPF: u1,
    +            padding: u15,
    +        }),
    +        ///  prescaler register
    +        PRER: mmio.Mmio(packed struct(u32) {
    +            ///  Synchronous prescaler factor
    +            PREDIV_S: u15,
    +            reserved16: u1,
    +            ///  Asynchronous prescaler factor
    +            PREDIV_A: u7,
    +            padding: u9,
    +        }),
    +        ///  wakeup timer register
    +        WUTR: mmio.Mmio(packed struct(u32) {
    +            ///  Wakeup auto-reload value bits
    +            WUT: u16,
    +            padding: u16,
    +        }),
    +        reserved28: [4]u8,
    +        ///  alarm A register
    +        ALRMAR: mmio.Mmio(packed struct(u32) {
    +            ///  Second units in BCD format
    +            SU: u4,
    +            ///  Second tens in BCD format
    +            ST: u3,
    +            ///  Alarm A seconds mask
    +            MSK1: u1,
    +            ///  Minute units in BCD format
    +            MNU: u4,
    +            ///  Minute tens in BCD format
    +            MNT: u3,
    +            ///  Alarm A minutes mask
    +            MSK2: u1,
    +            ///  Hour units in BCD format
    +            HU: u4,
    +            ///  Hour tens in BCD format
    +            HT: u2,
    +            ///  AM/PM notation
    +            PM: u1,
    +            ///  Alarm A hours mask
    +            MSK3: u1,
    +            ///  Date units or day in BCD format
    +            DU: u4,
    +            ///  Date tens in BCD format
    +            DT: u2,
    +            ///  Week day selection
    +            WDSEL: u1,
    +            ///  Alarm A date mask
    +            MSK4: u1,
    +        }),
    +        ///  alarm B register
    +        ALRMBR: mmio.Mmio(packed struct(u32) {
    +            ///  Second units in BCD format
    +            SU: u4,
    +            ///  Second tens in BCD format
    +            ST: u3,
    +            ///  Alarm B seconds mask
    +            MSK1: u1,
    +            ///  Minute units in BCD format
    +            MNU: u4,
    +            ///  Minute tens in BCD format
    +            MNT: u3,
    +            ///  Alarm B minutes mask
    +            MSK2: u1,
    +            ///  Hour units in BCD format
    +            HU: u4,
    +            ///  Hour tens in BCD format
    +            HT: u2,
    +            ///  AM/PM notation
    +            PM: u1,
    +            ///  Alarm B hours mask
    +            MSK3: u1,
    +            ///  Date units or day in BCD format
    +            DU: u4,
    +            ///  Date tens in BCD format
    +            DT: u2,
    +            ///  Week day selection
    +            WDSEL: u1,
    +            ///  Alarm B date mask
    +            MSK4: u1,
    +        }),
    +        ///  write protection register
    +        WPR: mmio.Mmio(packed struct(u32) {
    +            ///  Write protection key
    +            KEY: u8,
    +            padding: u24,
    +        }),
    +        ///  sub second register
    +        SSR: mmio.Mmio(packed struct(u32) {
    +            ///  Sub second value
    +            SS: u16,
    +            padding: u16,
    +        }),
    +        ///  shift control register
    +        SHIFTR: mmio.Mmio(packed struct(u32) {
    +            ///  Subtract a fraction of a second
    +            SUBFS: u15,
    +            reserved31: u16,
    +            ///  Add one second
    +            ADD1S: u1,
    +        }),
    +        ///  time stamp time register
    +        TSTR: mmio.Mmio(packed struct(u32) {
    +            ///  Second units in BCD format
    +            SU: u4,
    +            ///  Second tens in BCD format
    +            ST: u3,
    +            reserved8: u1,
    +            ///  Minute units in BCD format
    +            MNU: u4,
    +            ///  Minute tens in BCD format
    +            MNT: u3,
    +            reserved16: u1,
    +            ///  Hour units in BCD format
    +            HU: u4,
    +            ///  Hour tens in BCD format
    +            HT: u2,
    +            ///  AM/PM notation
    +            PM: u1,
    +            padding: u9,
    +        }),
    +        ///  time stamp date register
    +        TSDR: mmio.Mmio(packed struct(u32) {
    +            ///  Date units in BCD format
    +            DU: u4,
    +            ///  Date tens in BCD format
    +            DT: u2,
    +            reserved8: u2,
    +            ///  Month units in BCD format
    +            MU: u4,
    +            ///  Month tens in BCD format
    +            MT: u1,
    +            ///  Week day units
    +            WDU: u3,
    +            padding: u16,
    +        }),
    +        ///  timestamp sub second register
    +        TSSSR: mmio.Mmio(packed struct(u32) {
    +            ///  Sub second value
    +            SS: u16,
    +            padding: u16,
    +        }),
    +        ///  calibration register
    +        CALR: mmio.Mmio(packed struct(u32) {
    +            ///  Calibration minus
    +            CALM: u9,
    +            reserved13: u4,
    +            ///  Use a 16-second calibration cycle period
    +            CALW16: u1,
    +            ///  Use an 8-second calibration cycle period
    +            CALW8: u1,
    +            ///  Increase frequency of RTC by 488.5 ppm
    +            CALP: u1,
    +            padding: u16,
    +        }),
    +        ///  tamper and alternate function configuration register
    +        TAFCR: mmio.Mmio(packed struct(u32) {
    +            ///  Tamper 1 detection enable
    +            TAMP1E: u1,
    +            ///  Active level for tamper 1
    +            TAMP1TRG: u1,
    +            ///  Tamper interrupt enable
    +            TAMPIE: u1,
    +            ///  Tamper 2 detection enable
    +            TAMP2E: u1,
    +            ///  Active level for tamper 2
    +            TAMP2TRG: u1,
    +            ///  Tamper 3 detection enable
    +            TAMP3E: u1,
    +            ///  Active level for tamper 3
    +            TAMP3TRG: u1,
    +            ///  Activate timestamp on tamper detection event
    +            TAMPTS: u1,
    +            ///  Tamper sampling frequency
    +            TAMPFREQ: u3,
    +            ///  Tamper filter count
    +            TAMPFLT: u2,
    +            ///  Tamper precharge duration
    +            TAMPPRCH: u2,
    +            ///  TAMPER pull-up disable
    +            TAMPPUDIS: u1,
    +            reserved18: u2,
    +            ///  PC13 value
    +            PC13VALUE: u1,
    +            ///  PC13 mode
    +            PC13MODE: u1,
    +            ///  PC14 value
    +            PC14VALUE: u1,
    +            ///  PC 14 mode
    +            PC14MODE: u1,
    +            ///  PC15 value
    +            PC15VALUE: u1,
    +            ///  PC15 mode
    +            PC15MODE: u1,
    +            padding: u8,
    +        }),
    +        ///  alarm A sub second register
    +        ALRMASSR: mmio.Mmio(packed struct(u32) {
    +            ///  Sub seconds value
    +            SS: u15,
    +            reserved24: u9,
    +            ///  Mask the most-significant bits starting at this bit
    +            MASKSS: u4,
    +            padding: u4,
    +        }),
    +        ///  alarm B sub second register
    +        ALRMBSSR: mmio.Mmio(packed struct(u32) {
    +            ///  Sub seconds value
    +            SS: u15,
    +            reserved24: u9,
    +            ///  Mask the most-significant bits starting at this bit
    +            MASKSS: u4,
    +            padding: u4,
    +        }),
    +        reserved80: [4]u8,
    +        ///  backup register
    +        BKP0R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP1R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP2R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP3R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP4R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP5R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP6R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP7R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP8R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP9R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP10R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP11R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP12R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP13R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP14R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP15R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP16R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP17R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP18R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP19R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP20R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP21R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP22R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP23R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP24R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP25R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP26R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP27R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP28R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP29R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP30R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP31R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +    };
    +
    +    ///  Basic timers
    +    pub const TIM6 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            ///  One-pulse mode
    +            OPM: u1,
    +            reserved7: u3,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            reserved11: u3,
    +            ///  UIF status bit remapping
    +            UIFREMAP: u1,
    +            padding: u20,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            reserved4: u4,
    +            ///  Master mode selection
    +            MMS: u3,
    +            padding: u25,
    +        }),
    +        reserved12: [4]u8,
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            reserved8: u7,
    +            ///  Update DMA request enable
    +            UDE: u1,
    +            padding: u23,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            padding: u31,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            padding: u31,
    +        }),
    +        reserved36: [12]u8,
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  Low counter value
    +            CNT: u16,
    +            reserved31: u15,
    +            ///  UIF Copy
    +            UIFCPY: u1,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Low Auto-reload value
    +            ARR: u16,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  Analog-to-Digital Converter
    +    pub const ADC1 = extern struct {
    +        ///  interrupt and status register
    +        ISR: mmio.Mmio(packed struct(u32) {
    +            ///  ADRDY
    +            ADRDY: u1,
    +            ///  EOSMP
    +            EOSMP: u1,
    +            ///  EOC
    +            EOC: u1,
    +            ///  EOS
    +            EOS: u1,
    +            ///  OVR
    +            OVR: u1,
    +            ///  JEOC
    +            JEOC: u1,
    +            ///  JEOS
    +            JEOS: u1,
    +            ///  AWD1
    +            AWD1: u1,
    +            ///  AWD2
    +            AWD2: u1,
    +            ///  AWD3
    +            AWD3: u1,
    +            ///  JQOVF
    +            JQOVF: u1,
    +            padding: u21,
    +        }),
    +        ///  interrupt enable register
    +        IER: mmio.Mmio(packed struct(u32) {
    +            ///  ADRDYIE
    +            ADRDYIE: u1,
    +            ///  EOSMPIE
    +            EOSMPIE: u1,
    +            ///  EOCIE
    +            EOCIE: u1,
    +            ///  EOSIE
    +            EOSIE: u1,
    +            ///  OVRIE
    +            OVRIE: u1,
    +            ///  JEOCIE
    +            JEOCIE: u1,
    +            ///  JEOSIE
    +            JEOSIE: u1,
    +            ///  AWD1IE
    +            AWD1IE: u1,
    +            ///  AWD2IE
    +            AWD2IE: u1,
    +            ///  AWD3IE
    +            AWD3IE: u1,
    +            ///  JQOVFIE
    +            JQOVFIE: u1,
    +            padding: u21,
    +        }),
    +        ///  control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  ADEN
    +            ADEN: u1,
    +            ///  ADDIS
    +            ADDIS: u1,
    +            ///  ADSTART
    +            ADSTART: u1,
    +            ///  JADSTART
    +            JADSTART: u1,
    +            ///  ADSTP
    +            ADSTP: u1,
    +            ///  JADSTP
    +            JADSTP: u1,
    +            reserved28: u22,
    +            ///  ADVREGEN
    +            ADVREGEN: u1,
    +            ///  DEEPPWD
    +            DEEPPWD: u1,
    +            ///  ADCALDIF
    +            ADCALDIF: u1,
    +            ///  ADCAL
    +            ADCAL: u1,
    +        }),
    +        ///  configuration register
    +        CFGR: mmio.Mmio(packed struct(u32) {
    +            ///  DMAEN
    +            DMAEN: u1,
    +            ///  DMACFG
    +            DMACFG: u1,
    +            reserved3: u1,
    +            ///  RES
    +            RES: u2,
    +            ///  ALIGN
    +            ALIGN: u1,
    +            ///  EXTSEL
    +            EXTSEL: u4,
    +            ///  EXTEN
    +            EXTEN: u2,
    +            ///  OVRMOD
    +            OVRMOD: u1,
    +            ///  CONT
    +            CONT: u1,
    +            ///  AUTDLY
    +            AUTDLY: u1,
    +            ///  AUTOFF
    +            AUTOFF: u1,
    +            ///  DISCEN
    +            DISCEN: u1,
    +            ///  DISCNUM
    +            DISCNUM: u3,
    +            ///  JDISCEN
    +            JDISCEN: u1,
    +            ///  JQM
    +            JQM: u1,
    +            ///  AWD1SGL
    +            AWD1SGL: u1,
    +            ///  AWD1EN
    +            AWD1EN: u1,
    +            ///  JAWD1EN
    +            JAWD1EN: u1,
    +            ///  JAUTO
    +            JAUTO: u1,
    +            ///  AWDCH1CH
    +            AWDCH1CH: u5,
    +            padding: u1,
    +        }),
    +        reserved20: [4]u8,
    +        ///  sample time register 1
    +        SMPR1: mmio.Mmio(packed struct(u32) {
    +            reserved3: u3,
    +            ///  SMP1
    +            SMP1: u3,
    +            ///  SMP2
    +            SMP2: u3,
    +            ///  SMP3
    +            SMP3: u3,
    +            ///  SMP4
    +            SMP4: u3,
    +            ///  SMP5
    +            SMP5: u3,
    +            ///  SMP6
    +            SMP6: u3,
    +            ///  SMP7
    +            SMP7: u3,
    +            ///  SMP8
    +            SMP8: u3,
    +            ///  SMP9
    +            SMP9: u3,
    +            padding: u2,
    +        }),
    +        ///  sample time register 2
    +        SMPR2: mmio.Mmio(packed struct(u32) {
    +            ///  SMP10
    +            SMP10: u3,
    +            ///  SMP11
    +            SMP11: u3,
    +            ///  SMP12
    +            SMP12: u3,
    +            ///  SMP13
    +            SMP13: u3,
    +            ///  SMP14
    +            SMP14: u3,
    +            ///  SMP15
    +            SMP15: u3,
    +            ///  SMP16
    +            SMP16: u3,
    +            ///  SMP17
    +            SMP17: u3,
    +            ///  SMP18
    +            SMP18: u3,
    +            padding: u5,
    +        }),
    +        reserved32: [4]u8,
    +        ///  watchdog threshold register 1
    +        TR1: mmio.Mmio(packed struct(u32) {
    +            ///  LT1
    +            LT1: u12,
    +            reserved16: u4,
    +            ///  HT1
    +            HT1: u12,
    +            padding: u4,
    +        }),
    +        ///  watchdog threshold register
    +        TR2: mmio.Mmio(packed struct(u32) {
    +            ///  LT2
    +            LT2: u8,
    +            reserved16: u8,
    +            ///  HT2
    +            HT2: u8,
    +            padding: u8,
    +        }),
    +        ///  watchdog threshold register 3
    +        TR3: mmio.Mmio(packed struct(u32) {
    +            ///  LT3
    +            LT3: u8,
    +            reserved16: u8,
    +            ///  HT3
    +            HT3: u8,
    +            padding: u8,
    +        }),
    +        reserved48: [4]u8,
    +        ///  regular sequence register 1
    +        SQR1: mmio.Mmio(packed struct(u32) {
    +            ///  L3
    +            L3: u4,
    +            reserved6: u2,
    +            ///  SQ1
    +            SQ1: u5,
    +            reserved12: u1,
    +            ///  SQ2
    +            SQ2: u5,
    +            reserved18: u1,
    +            ///  SQ3
    +            SQ3: u5,
    +            reserved24: u1,
    +            ///  SQ4
    +            SQ4: u5,
    +            padding: u3,
    +        }),
    +        ///  regular sequence register 2
    +        SQR2: mmio.Mmio(packed struct(u32) {
    +            ///  SQ5
    +            SQ5: u5,
    +            reserved6: u1,
    +            ///  SQ6
    +            SQ6: u5,
    +            reserved12: u1,
    +            ///  SQ7
    +            SQ7: u5,
    +            reserved18: u1,
    +            ///  SQ8
    +            SQ8: u5,
    +            reserved24: u1,
    +            ///  SQ9
    +            SQ9: u5,
    +            padding: u3,
    +        }),
    +        ///  regular sequence register 3
    +        SQR3: mmio.Mmio(packed struct(u32) {
    +            ///  SQ10
    +            SQ10: u5,
    +            reserved6: u1,
    +            ///  SQ11
    +            SQ11: u5,
    +            reserved12: u1,
    +            ///  SQ12
    +            SQ12: u5,
    +            reserved18: u1,
    +            ///  SQ13
    +            SQ13: u5,
    +            reserved24: u1,
    +            ///  SQ14
    +            SQ14: u5,
    +            padding: u3,
    +        }),
    +        ///  regular sequence register 4
    +        SQR4: mmio.Mmio(packed struct(u32) {
    +            ///  SQ15
    +            SQ15: u5,
    +            reserved6: u1,
    +            ///  SQ16
    +            SQ16: u5,
    +            padding: u21,
    +        }),
    +        ///  regular Data Register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  regularDATA
    +            regularDATA: u16,
    +            padding: u16,
    +        }),
    +        reserved76: [8]u8,
    +        ///  injected sequence register
    +        JSQR: mmio.Mmio(packed struct(u32) {
    +            ///  JL
    +            JL: u2,
    +            ///  JEXTSEL
    +            JEXTSEL: u4,
    +            ///  JEXTEN
    +            JEXTEN: u2,
    +            ///  JSQ1
    +            JSQ1: u5,
    +            reserved14: u1,
    +            ///  JSQ2
    +            JSQ2: u5,
    +            reserved20: u1,
    +            ///  JSQ3
    +            JSQ3: u5,
    +            reserved26: u1,
    +            ///  JSQ4
    +            JSQ4: u5,
    +            padding: u1,
    +        }),
    +        reserved96: [16]u8,
    +        ///  offset register 1
    +        OFR1: mmio.Mmio(packed struct(u32) {
    +            ///  OFFSET1
    +            OFFSET1: u12,
    +            reserved26: u14,
    +            ///  OFFSET1_CH
    +            OFFSET1_CH: u5,
    +            ///  OFFSET1_EN
    +            OFFSET1_EN: u1,
    +        }),
    +        ///  offset register 2
    +        OFR2: mmio.Mmio(packed struct(u32) {
    +            ///  OFFSET2
    +            OFFSET2: u12,
    +            reserved26: u14,
    +            ///  OFFSET2_CH
    +            OFFSET2_CH: u5,
    +            ///  OFFSET2_EN
    +            OFFSET2_EN: u1,
    +        }),
    +        ///  offset register 3
    +        OFR3: mmio.Mmio(packed struct(u32) {
    +            ///  OFFSET3
    +            OFFSET3: u12,
    +            reserved26: u14,
    +            ///  OFFSET3_CH
    +            OFFSET3_CH: u5,
    +            ///  OFFSET3_EN
    +            OFFSET3_EN: u1,
    +        }),
    +        ///  offset register 4
    +        OFR4: mmio.Mmio(packed struct(u32) {
    +            ///  OFFSET4
    +            OFFSET4: u12,
    +            reserved26: u14,
    +            ///  OFFSET4_CH
    +            OFFSET4_CH: u5,
    +            ///  OFFSET4_EN
    +            OFFSET4_EN: u1,
    +        }),
    +        reserved128: [16]u8,
    +        ///  injected data register 1
    +        JDR1: mmio.Mmio(packed struct(u32) {
    +            ///  JDATA1
    +            JDATA1: u16,
    +            padding: u16,
    +        }),
    +        ///  injected data register 2
    +        JDR2: mmio.Mmio(packed struct(u32) {
    +            ///  JDATA2
    +            JDATA2: u16,
    +            padding: u16,
    +        }),
    +        ///  injected data register 3
    +        JDR3: mmio.Mmio(packed struct(u32) {
    +            ///  JDATA3
    +            JDATA3: u16,
    +            padding: u16,
    +        }),
    +        ///  injected data register 4
    +        JDR4: mmio.Mmio(packed struct(u32) {
    +            ///  JDATA4
    +            JDATA4: u16,
    +            padding: u16,
    +        }),
    +        reserved160: [16]u8,
    +        ///  Analog Watchdog 2 Configuration Register
    +        AWD2CR: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  AWD2CH
    +            AWD2CH: u18,
    +            padding: u13,
    +        }),
    +        ///  Analog Watchdog 3 Configuration Register
    +        AWD3CR: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  AWD3CH
    +            AWD3CH: u18,
    +            padding: u13,
    +        }),
    +        reserved176: [8]u8,
    +        ///  Differential Mode Selection Register 2
    +        DIFSEL: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  Differential mode for channels 15 to 1
    +            DIFSEL_1_15: u15,
    +            ///  Differential mode for channels 18 to 16
    +            DIFSEL_16_18: u3,
    +            padding: u13,
    +        }),
    +        ///  Calibration Factors
    +        CALFACT: mmio.Mmio(packed struct(u32) {
    +            ///  CALFACT_S
    +            CALFACT_S: u7,
    +            reserved16: u9,
    +            ///  CALFACT_D
    +            CALFACT_D: u7,
    +            padding: u9,
    +        }),
    +    };
    +
    +    ///  Advanced-timers
    +    pub const TIM8 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            ///  One-pulse mode
    +            OPM: u1,
    +            ///  Direction
    +            DIR: u1,
    +            ///  Center-aligned mode selection
    +            CMS: u2,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            ///  Clock division
    +            CKD: u2,
    +            reserved11: u1,
    +            ///  UIF status bit remapping
    +            UIFREMAP: u1,
    +            padding: u20,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/compare preloaded control
    +            CCPC: u1,
    +            reserved2: u1,
    +            ///  Capture/compare control update selection
    +            CCUS: u1,
    +            ///  Capture/compare DMA selection
    +            CCDS: u1,
    +            ///  Master mode selection
    +            MMS: u3,
    +            ///  TI1 selection
    +            TI1S: u1,
    +            ///  Output Idle state 1
    +            OIS1: u1,
    +            ///  Output Idle state 1
    +            OIS1N: u1,
    +            ///  Output Idle state 2
    +            OIS2: u1,
    +            ///  Output Idle state 2
    +            OIS2N: u1,
    +            ///  Output Idle state 3
    +            OIS3: u1,
    +            ///  Output Idle state 3
    +            OIS3N: u1,
    +            ///  Output Idle state 4
    +            OIS4: u1,
    +            reserved16: u1,
    +            ///  Output Idle state 5
    +            OIS5: u1,
    +            reserved18: u1,
    +            ///  Output Idle state 6
    +            OIS6: u1,
    +            reserved20: u1,
    +            ///  Master mode selection 2
    +            MMS2: u4,
    +            padding: u8,
    +        }),
    +        ///  slave mode control register
    +        SMCR: mmio.Mmio(packed struct(u32) {
    +            ///  Slave mode selection
    +            SMS: u3,
    +            ///  OCREF clear selection
    +            OCCS: u1,
    +            ///  Trigger selection
    +            TS: u3,
    +            ///  Master/Slave mode
    +            MSM: u1,
    +            ///  External trigger filter
    +            ETF: u4,
    +            ///  External trigger prescaler
    +            ETPS: u2,
    +            ///  External clock enable
    +            ECE: u1,
    +            ///  External trigger polarity
    +            ETP: u1,
    +            ///  Slave mode selection bit 3
    +            SMS3: u1,
    +            padding: u15,
    +        }),
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            ///  Capture/Compare 1 interrupt enable
    +            CC1IE: u1,
    +            ///  Capture/Compare 2 interrupt enable
    +            CC2IE: u1,
    +            ///  Capture/Compare 3 interrupt enable
    +            CC3IE: u1,
    +            ///  Capture/Compare 4 interrupt enable
    +            CC4IE: u1,
    +            ///  COM interrupt enable
    +            COMIE: u1,
    +            ///  Trigger interrupt enable
    +            TIE: u1,
    +            ///  Break interrupt enable
    +            BIE: u1,
    +            ///  Update DMA request enable
    +            UDE: u1,
    +            ///  Capture/Compare 1 DMA request enable
    +            CC1DE: u1,
    +            ///  Capture/Compare 2 DMA request enable
    +            CC2DE: u1,
    +            ///  Capture/Compare 3 DMA request enable
    +            CC3DE: u1,
    +            ///  Capture/Compare 4 DMA request enable
    +            CC4DE: u1,
    +            ///  COM DMA request enable
    +            COMDE: u1,
    +            ///  Trigger DMA request enable
    +            TDE: u1,
    +            padding: u17,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            ///  Capture/compare 1 interrupt flag
    +            CC1IF: u1,
    +            ///  Capture/Compare 2 interrupt flag
    +            CC2IF: u1,
    +            ///  Capture/Compare 3 interrupt flag
    +            CC3IF: u1,
    +            ///  Capture/Compare 4 interrupt flag
    +            CC4IF: u1,
    +            ///  COM interrupt flag
    +            COMIF: u1,
    +            ///  Trigger interrupt flag
    +            TIF: u1,
    +            ///  Break interrupt flag
    +            BIF: u1,
    +            ///  Break 2 interrupt flag
    +            B2IF: u1,
    +            ///  Capture/Compare 1 overcapture flag
    +            CC1OF: u1,
    +            ///  Capture/compare 2 overcapture flag
    +            CC2OF: u1,
    +            ///  Capture/Compare 3 overcapture flag
    +            CC3OF: u1,
    +            ///  Capture/Compare 4 overcapture flag
    +            CC4OF: u1,
    +            reserved16: u3,
    +            ///  Capture/Compare 5 interrupt flag
    +            C5IF: u1,
    +            ///  Capture/Compare 6 interrupt flag
    +            C6IF: u1,
    +            padding: u14,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            ///  Capture/compare 1 generation
    +            CC1G: u1,
    +            ///  Capture/compare 2 generation
    +            CC2G: u1,
    +            ///  Capture/compare 3 generation
    +            CC3G: u1,
    +            ///  Capture/compare 4 generation
    +            CC4G: u1,
    +            ///  Capture/Compare control update generation
    +            COMG: u1,
    +            ///  Trigger generation
    +            TG: u1,
    +            ///  Break generation
    +            BG: u1,
    +            ///  Break 2 generation
    +            B2G: u1,
    +            padding: u23,
    +        }),
    +        ///  capture/compare mode register (output mode)
    +        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 selection
    +            CC1S: u2,
    +            ///  Output Compare 1 fast enable
    +            OC1FE: u1,
    +            ///  Output Compare 1 preload enable
    +            OC1PE: u1,
    +            ///  Output Compare 1 mode
    +            OC1M: u3,
    +            ///  Output Compare 1 clear enable
    +            OC1CE: u1,
    +            ///  Capture/Compare 2 selection
    +            CC2S: u2,
    +            ///  Output Compare 2 fast enable
    +            OC2FE: u1,
    +            ///  Output Compare 2 preload enable
    +            OC2PE: u1,
    +            ///  Output Compare 2 mode
    +            OC2M: u3,
    +            ///  Output Compare 2 clear enable
    +            OC2CE: u1,
    +            ///  Output Compare 1 mode bit 3
    +            OC1M_3: u1,
    +            reserved24: u7,
    +            ///  Output Compare 2 mode bit 3
    +            OC2M_3: u1,
    +            padding: u7,
    +        }),
    +        ///  capture/compare mode register (output mode)
    +        CCMR2_Output: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 3 selection
    +            CC3S: u2,
    +            ///  Output compare 3 fast enable
    +            OC3FE: u1,
    +            ///  Output compare 3 preload enable
    +            OC3PE: u1,
    +            ///  Output compare 3 mode
    +            OC3M: u3,
    +            ///  Output compare 3 clear enable
    +            OC3CE: u1,
    +            ///  Capture/Compare 4 selection
    +            CC4S: u2,
    +            ///  Output compare 4 fast enable
    +            OC4FE: u1,
    +            ///  Output compare 4 preload enable
    +            OC4PE: u1,
    +            ///  Output compare 4 mode
    +            OC4M: u3,
    +            ///  Output compare 4 clear enable
    +            OC4CE: u1,
    +            ///  Output Compare 3 mode bit 3
    +            OC3M_3: u1,
    +            reserved24: u7,
    +            ///  Output Compare 4 mode bit 3
    +            OC4M_3: u1,
    +            padding: u7,
    +        }),
    +        ///  capture/compare enable register
    +        CCER: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 output enable
    +            CC1E: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1P: u1,
    +            ///  Capture/Compare 1 complementary output enable
    +            CC1NE: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1NP: u1,
    +            ///  Capture/Compare 2 output enable
    +            CC2E: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2P: u1,
    +            ///  Capture/Compare 2 complementary output enable
    +            CC2NE: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2NP: u1,
    +            ///  Capture/Compare 3 output enable
    +            CC3E: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC3P: u1,
    +            ///  Capture/Compare 3 complementary output enable
    +            CC3NE: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC3NP: u1,
    +            ///  Capture/Compare 4 output enable
    +            CC4E: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC4P: u1,
    +            reserved15: u1,
    +            ///  Capture/Compare 4 output Polarity
    +            CC4NP: u1,
    +            ///  Capture/Compare 5 output enable
    +            CC5E: u1,
    +            ///  Capture/Compare 5 output Polarity
    +            CC5P: u1,
    +            reserved20: u2,
    +            ///  Capture/Compare 6 output enable
    +            CC6E: u1,
    +            ///  Capture/Compare 6 output Polarity
    +            CC6P: u1,
    +            padding: u10,
    +        }),
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  counter value
    +            CNT: u16,
    +            reserved31: u15,
    +            ///  UIF copy
    +            UIFCPY: u1,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Auto-reload value
    +            ARR: u16,
    +            padding: u16,
    +        }),
    +        ///  repetition counter register
    +        RCR: mmio.Mmio(packed struct(u32) {
    +            ///  Repetition counter value
    +            REP: u16,
    +            padding: u16,
    +        }),
    +        ///  capture/compare register 1
    +        CCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 value
    +            CCR1: u16,
    +            padding: u16,
    +        }),
    +        ///  capture/compare register 2
    +        CCR2: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 2 value
    +            CCR2: u16,
    +            padding: u16,
    +        }),
    +        ///  capture/compare register 3
    +        CCR3: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 3 value
    +            CCR3: u16,
    +            padding: u16,
    +        }),
    +        ///  capture/compare register 4
    +        CCR4: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 3 value
    +            CCR4: u16,
    +            padding: u16,
    +        }),
    +        ///  break and dead-time register
    +        BDTR: mmio.Mmio(packed struct(u32) {
    +            ///  Dead-time generator setup
    +            DTG: u8,
    +            ///  Lock configuration
    +            LOCK: u2,
    +            ///  Off-state selection for Idle mode
    +            OSSI: u1,
    +            ///  Off-state selection for Run mode
    +            OSSR: u1,
    +            ///  Break enable
    +            BKE: u1,
    +            ///  Break polarity
    +            BKP: u1,
    +            ///  Automatic output enable
    +            AOE: u1,
    +            ///  Main output enable
    +            MOE: u1,
    +            ///  Break filter
    +            BKF: u4,
    +            ///  Break 2 filter
    +            BK2F: u4,
    +            ///  Break 2 enable
    +            BK2E: u1,
    +            ///  Break 2 polarity
    +            BK2P: u1,
    +            padding: u6,
    +        }),
    +        ///  DMA control register
    +        DCR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA base address
    +            DBA: u5,
    +            reserved8: u3,
    +            ///  DMA burst length
    +            DBL: u5,
    +            padding: u19,
    +        }),
    +        ///  DMA address for full transfer
    +        DMAR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA register for burst accesses
    +            DMAB: u16,
    +            padding: u16,
    +        }),
    +        reserved84: [4]u8,
    +        ///  capture/compare mode register 3 (output mode)
    +        CCMR3_Output: mmio.Mmio(packed struct(u32) {
    +            reserved2: u2,
    +            ///  Output compare 5 fast enable
    +            OC5FE: u1,
    +            ///  Output compare 5 preload enable
    +            OC5PE: u1,
    +            ///  Output compare 5 mode
    +            OC5M: u3,
    +            ///  Output compare 5 clear enable
    +            OC5CE: u1,
    +            reserved10: u2,
    +            ///  Output compare 6 fast enable
    +            OC6FE: u1,
    +            ///  Output compare 6 preload enable
    +            OC6PE: u1,
    +            ///  Output compare 6 mode
    +            OC6M: u3,
    +            ///  Output compare 6 clear enable
    +            OC6CE: u1,
    +            ///  Outout Compare 5 mode bit 3
    +            OC5M_3: u1,
    +            reserved24: u7,
    +            ///  Outout Compare 6 mode bit 3
    +            OC6M_3: u1,
    +            padding: u7,
    +        }),
    +        ///  capture/compare register 5
    +        CCR5: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 5 value
    +            CCR5: u16,
    +            reserved29: u13,
    +            ///  Group Channel 5 and Channel 1
    +            GC5C1: u1,
    +            ///  Group Channel 5 and Channel 2
    +            GC5C2: u1,
    +            ///  Group Channel 5 and Channel 3
    +            GC5C3: u1,
    +        }),
    +        ///  capture/compare register 6
    +        CCR6: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 6 value
    +            CCR6: u16,
    +            padding: u16,
    +        }),
    +        ///  option registers
    +        OR: mmio.Mmio(packed struct(u32) {
    +            ///  TIM8_ETR_ADC2 remapping capability
    +            TIM8_ETR_ADC2_RMP: u2,
    +            ///  TIM8_ETR_ADC3 remapping capability
    +            TIM8_ETR_ADC3_RMP: u2,
    +            padding: u28,
    +        }),
    +    };
    +
    +    ///  Digital-to-analog converter
    +    pub const DAC = extern struct {
    +        ///  control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 enable
    +            EN1: u1,
    +            ///  DAC channel1 output buffer disable
    +            BOFF1: u1,
    +            ///  DAC channel1 trigger enable
    +            TEN1: u1,
    +            ///  DAC channel1 trigger selection
    +            TSEL1: u3,
    +            ///  DAC channel1 noise/triangle wave generation enable
    +            WAVE1: u2,
    +            ///  DAC channel1 mask/amplitude selector
    +            MAMP1: u4,
    +            ///  DAC channel1 DMA enable
    +            DMAEN1: u1,
    +            ///  DAC channel1 DMA Underrun Interrupt enable
    +            DMAUDRIE1: u1,
    +            reserved16: u2,
    +            ///  DAC channel2 enable
    +            EN2: u1,
    +            ///  DAC channel2 output buffer disable
    +            BOFF2: u1,
    +            ///  DAC channel2 trigger enable
    +            TEN2: u1,
    +            ///  DAC channel2 trigger selection
    +            TSEL2: u3,
    +            ///  DAC channel2 noise/triangle wave generation enable
    +            WAVE2: u2,
    +            ///  DAC channel2 mask/amplitude selector
    +            MAMP2: u4,
    +            ///  DAC channel2 DMA enable
    +            DMAEN2: u1,
    +            ///  DAC channel2 DMA underrun interrupt enable
    +            DMAUDRIE2: u1,
    +            padding: u2,
    +        }),
    +        ///  software trigger register
    +        SWTRIGR: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 software trigger
    +            SWTRIG1: u1,
    +            ///  DAC channel2 software trigger
    +            SWTRIG2: u1,
    +            padding: u30,
    +        }),
    +        ///  channel1 12-bit right-aligned data holding register
    +        DHR12R1: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 12-bit right-aligned data
    +            DACC1DHR: u12,
    +            padding: u20,
    +        }),
    +        ///  channel1 12-bit left aligned data holding register
    +        DHR12L1: mmio.Mmio(packed struct(u32) {
    +            reserved4: u4,
    +            ///  DAC channel1 12-bit left-aligned data
    +            DACC1DHR: u12,
    +            padding: u16,
    +        }),
    +        ///  channel1 8-bit right aligned data holding register
    +        DHR8R1: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 8-bit right-aligned data
    +            DACC1DHR: u8,
    +            padding: u24,
    +        }),
    +        ///  channel2 12-bit right aligned data holding register
    +        DHR12R2: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel2 12-bit right-aligned data
    +            DACC2DHR: u12,
    +            padding: u20,
    +        }),
    +        ///  channel2 12-bit left aligned data holding register
    +        DHR12L2: mmio.Mmio(packed struct(u32) {
    +            reserved4: u4,
    +            ///  DAC channel2 12-bit left-aligned data
    +            DACC2DHR: u12,
    +            padding: u16,
    +        }),
    +        ///  channel2 8-bit right-aligned data holding register
    +        DHR8R2: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel2 8-bit right-aligned data
    +            DACC2DHR: u8,
    +            padding: u24,
    +        }),
    +        ///  Dual DAC 12-bit right-aligned data holding register
    +        DHR12RD: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 12-bit right-aligned data
    +            DACC1DHR: u12,
    +            reserved16: u4,
    +            ///  DAC channel2 12-bit right-aligned data
    +            DACC2DHR: u12,
    +            padding: u4,
    +        }),
    +        ///  DUAL DAC 12-bit left aligned data holding register
    +        DHR12LD: mmio.Mmio(packed struct(u32) {
    +            reserved4: u4,
    +            ///  DAC channel1 12-bit left-aligned data
    +            DACC1DHR: u12,
    +            reserved20: u4,
    +            ///  DAC channel2 12-bit left-aligned data
    +            DACC2DHR: u12,
    +        }),
    +        ///  DUAL DAC 8-bit right aligned data holding register
    +        DHR8RD: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 8-bit right-aligned data
    +            DACC1DHR: u8,
    +            ///  DAC channel2 8-bit right-aligned data
    +            DACC2DHR: u8,
    +            padding: u16,
    +        }),
    +        ///  channel1 data output register
    +        DOR1: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 data output
    +            DACC1DOR: u12,
    +            padding: u20,
    +        }),
    +        ///  channel2 data output register
    +        DOR2: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel2 data output
    +            DACC2DOR: u12,
    +            padding: u20,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            reserved13: u13,
    +            ///  DAC channel1 DMA underrun flag
    +            DMAUDR1: u1,
    +            reserved29: u15,
    +            ///  DAC channel2 DMA underrun flag
    +            DMAUDR2: u1,
    +            padding: u2,
    +        }),
    +    };
    +
    +    ///  External interrupt/event controller
    +    pub const EXTI = extern struct {
    +        ///  Interrupt mask register
    +        IMR1: mmio.Mmio(packed struct(u32) {
    +            ///  Interrupt Mask on line 0
    +            MR0: u1,
    +            ///  Interrupt Mask on line 1
    +            MR1: u1,
    +            ///  Interrupt Mask on line 2
    +            MR2: u1,
    +            ///  Interrupt Mask on line 3
    +            MR3: u1,
    +            ///  Interrupt Mask on line 4
    +            MR4: u1,
    +            ///  Interrupt Mask on line 5
    +            MR5: u1,
    +            ///  Interrupt Mask on line 6
    +            MR6: u1,
    +            ///  Interrupt Mask on line 7
    +            MR7: u1,
    +            ///  Interrupt Mask on line 8
    +            MR8: u1,
    +            ///  Interrupt Mask on line 9
    +            MR9: u1,
    +            ///  Interrupt Mask on line 10
    +            MR10: u1,
    +            ///  Interrupt Mask on line 11
    +            MR11: u1,
    +            ///  Interrupt Mask on line 12
    +            MR12: u1,
    +            ///  Interrupt Mask on line 13
    +            MR13: u1,
    +            ///  Interrupt Mask on line 14
    +            MR14: u1,
    +            ///  Interrupt Mask on line 15
    +            MR15: u1,
    +            ///  Interrupt Mask on line 16
    +            MR16: u1,
    +            ///  Interrupt Mask on line 17
    +            MR17: u1,
    +            ///  Interrupt Mask on line 18
    +            MR18: u1,
    +            ///  Interrupt Mask on line 19
    +            MR19: u1,
    +            ///  Interrupt Mask on line 20
    +            MR20: u1,
    +            ///  Interrupt Mask on line 21
    +            MR21: u1,
    +            ///  Interrupt Mask on line 22
    +            MR22: u1,
    +            ///  Interrupt Mask on line 23
    +            MR23: u1,
    +            ///  Interrupt Mask on line 24
    +            MR24: u1,
    +            ///  Interrupt Mask on line 25
    +            MR25: u1,
    +            ///  Interrupt Mask on line 26
    +            MR26: u1,
    +            ///  Interrupt Mask on line 27
    +            MR27: u1,
    +            ///  Interrupt Mask on line 28
    +            MR28: u1,
    +            ///  Interrupt Mask on line 29
    +            MR29: u1,
    +            ///  Interrupt Mask on line 30
    +            MR30: u1,
    +            ///  Interrupt Mask on line 31
    +            MR31: u1,
    +        }),
    +        ///  Event mask register
    +        EMR1: mmio.Mmio(packed struct(u32) {
    +            ///  Event Mask on line 0
    +            MR0: u1,
    +            ///  Event Mask on line 1
    +            MR1: u1,
    +            ///  Event Mask on line 2
    +            MR2: u1,
    +            ///  Event Mask on line 3
    +            MR3: u1,
    +            ///  Event Mask on line 4
    +            MR4: u1,
    +            ///  Event Mask on line 5
    +            MR5: u1,
    +            ///  Event Mask on line 6
    +            MR6: u1,
    +            ///  Event Mask on line 7
    +            MR7: u1,
    +            ///  Event Mask on line 8
    +            MR8: u1,
    +            ///  Event Mask on line 9
    +            MR9: u1,
    +            ///  Event Mask on line 10
    +            MR10: u1,
    +            ///  Event Mask on line 11
    +            MR11: u1,
    +            ///  Event Mask on line 12
    +            MR12: u1,
    +            ///  Event Mask on line 13
    +            MR13: u1,
    +            ///  Event Mask on line 14
    +            MR14: u1,
    +            ///  Event Mask on line 15
    +            MR15: u1,
    +            ///  Event Mask on line 16
    +            MR16: u1,
    +            ///  Event Mask on line 17
    +            MR17: u1,
    +            ///  Event Mask on line 18
    +            MR18: u1,
    +            ///  Event Mask on line 19
    +            MR19: u1,
    +            ///  Event Mask on line 20
    +            MR20: u1,
    +            ///  Event Mask on line 21
    +            MR21: u1,
    +            ///  Event Mask on line 22
    +            MR22: u1,
    +            ///  Event Mask on line 23
    +            MR23: u1,
    +            ///  Event Mask on line 24
    +            MR24: u1,
    +            ///  Event Mask on line 25
    +            MR25: u1,
    +            ///  Event Mask on line 26
    +            MR26: u1,
    +            ///  Event Mask on line 27
    +            MR27: u1,
    +            ///  Event Mask on line 28
    +            MR28: u1,
    +            ///  Event Mask on line 29
    +            MR29: u1,
    +            ///  Event Mask on line 30
    +            MR30: u1,
    +            ///  Event Mask on line 31
    +            MR31: u1,
    +        }),
    +        ///  Rising Trigger selection register
    +        RTSR1: mmio.Mmio(packed struct(u32) {
    +            ///  Rising trigger event configuration of line 0
    +            TR0: u1,
    +            ///  Rising trigger event configuration of line 1
    +            TR1: u1,
    +            ///  Rising trigger event configuration of line 2
    +            TR2: u1,
    +            ///  Rising trigger event configuration of line 3
    +            TR3: u1,
    +            ///  Rising trigger event configuration of line 4
    +            TR4: u1,
    +            ///  Rising trigger event configuration of line 5
    +            TR5: u1,
    +            ///  Rising trigger event configuration of line 6
    +            TR6: u1,
    +            ///  Rising trigger event configuration of line 7
    +            TR7: u1,
    +            ///  Rising trigger event configuration of line 8
    +            TR8: u1,
    +            ///  Rising trigger event configuration of line 9
    +            TR9: u1,
    +            ///  Rising trigger event configuration of line 10
    +            TR10: u1,
    +            ///  Rising trigger event configuration of line 11
    +            TR11: u1,
    +            ///  Rising trigger event configuration of line 12
    +            TR12: u1,
    +            ///  Rising trigger event configuration of line 13
    +            TR13: u1,
    +            ///  Rising trigger event configuration of line 14
    +            TR14: u1,
    +            ///  Rising trigger event configuration of line 15
    +            TR15: u1,
    +            ///  Rising trigger event configuration of line 16
    +            TR16: u1,
    +            ///  Rising trigger event configuration of line 17
    +            TR17: u1,
    +            ///  Rising trigger event configuration of line 18
    +            TR18: u1,
    +            ///  Rising trigger event configuration of line 19
    +            TR19: u1,
    +            ///  Rising trigger event configuration of line 20
    +            TR20: u1,
    +            ///  Rising trigger event configuration of line 21
    +            TR21: u1,
    +            ///  Rising trigger event configuration of line 22
    +            TR22: u1,
    +            reserved29: u6,
    +            ///  Rising trigger event configuration of line 29
    +            TR29: u1,
    +            ///  Rising trigger event configuration of line 30
    +            TR30: u1,
    +            ///  Rising trigger event configuration of line 31
    +            TR31: u1,
    +        }),
    +        ///  Falling Trigger selection register
    +        FTSR1: mmio.Mmio(packed struct(u32) {
    +            ///  Falling trigger event configuration of line 0
    +            TR0: u1,
    +            ///  Falling trigger event configuration of line 1
    +            TR1: u1,
    +            ///  Falling trigger event configuration of line 2
    +            TR2: u1,
    +            ///  Falling trigger event configuration of line 3
    +            TR3: u1,
    +            ///  Falling trigger event configuration of line 4
    +            TR4: u1,
    +            ///  Falling trigger event configuration of line 5
    +            TR5: u1,
    +            ///  Falling trigger event configuration of line 6
    +            TR6: u1,
    +            ///  Falling trigger event configuration of line 7
    +            TR7: u1,
    +            ///  Falling trigger event configuration of line 8
    +            TR8: u1,
    +            ///  Falling trigger event configuration of line 9
    +            TR9: u1,
    +            ///  Falling trigger event configuration of line 10
    +            TR10: u1,
    +            ///  Falling trigger event configuration of line 11
    +            TR11: u1,
    +            ///  Falling trigger event configuration of line 12
    +            TR12: u1,
    +            ///  Falling trigger event configuration of line 13
    +            TR13: u1,
    +            ///  Falling trigger event configuration of line 14
    +            TR14: u1,
    +            ///  Falling trigger event configuration of line 15
    +            TR15: u1,
    +            ///  Falling trigger event configuration of line 16
    +            TR16: u1,
    +            ///  Falling trigger event configuration of line 17
    +            TR17: u1,
    +            ///  Falling trigger event configuration of line 18
    +            TR18: u1,
    +            ///  Falling trigger event configuration of line 19
    +            TR19: u1,
    +            ///  Falling trigger event configuration of line 20
    +            TR20: u1,
    +            ///  Falling trigger event configuration of line 21
    +            TR21: u1,
    +            ///  Falling trigger event configuration of line 22
    +            TR22: u1,
    +            reserved29: u6,
    +            ///  Falling trigger event configuration of line 29
    +            TR29: u1,
    +            ///  Falling trigger event configuration of line 30.
    +            TR30: u1,
    +            ///  Falling trigger event configuration of line 31
    +            TR31: u1,
    +        }),
    +        ///  Software interrupt event register
    +        SWIER1: mmio.Mmio(packed struct(u32) {
    +            ///  Software Interrupt on line 0
    +            SWIER0: u1,
    +            ///  Software Interrupt on line 1
    +            SWIER1: u1,
    +            ///  Software Interrupt on line 2
    +            SWIER2: u1,
    +            ///  Software Interrupt on line 3
    +            SWIER3: u1,
    +            ///  Software Interrupt on line 4
    +            SWIER4: u1,
    +            ///  Software Interrupt on line 5
    +            SWIER5: u1,
    +            ///  Software Interrupt on line 6
    +            SWIER6: u1,
    +            ///  Software Interrupt on line 7
    +            SWIER7: u1,
    +            ///  Software Interrupt on line 8
    +            SWIER8: u1,
    +            ///  Software Interrupt on line 9
    +            SWIER9: u1,
    +            ///  Software Interrupt on line 10
    +            SWIER10: u1,
    +            ///  Software Interrupt on line 11
    +            SWIER11: u1,
    +            ///  Software Interrupt on line 12
    +            SWIER12: u1,
    +            ///  Software Interrupt on line 13
    +            SWIER13: u1,
    +            ///  Software Interrupt on line 14
    +            SWIER14: u1,
    +            ///  Software Interrupt on line 15
    +            SWIER15: u1,
    +            ///  Software Interrupt on line 16
    +            SWIER16: u1,
    +            ///  Software Interrupt on line 17
    +            SWIER17: u1,
    +            ///  Software Interrupt on line 18
    +            SWIER18: u1,
    +            ///  Software Interrupt on line 19
    +            SWIER19: u1,
    +            ///  Software Interrupt on line 20
    +            SWIER20: u1,
    +            ///  Software Interrupt on line 21
    +            SWIER21: u1,
    +            ///  Software Interrupt on line 22
    +            SWIER22: u1,
    +            reserved29: u6,
    +            ///  Software Interrupt on line 29
    +            SWIER29: u1,
    +            ///  Software Interrupt on line 309
    +            SWIER30: u1,
    +            ///  Software Interrupt on line 319
    +            SWIER31: u1,
    +        }),
    +        ///  Pending register
    +        PR1: mmio.Mmio(packed struct(u32) {
    +            ///  Pending bit 0
    +            PR0: u1,
    +            ///  Pending bit 1
    +            PR1: u1,
    +            ///  Pending bit 2
    +            PR2: u1,
    +            ///  Pending bit 3
    +            PR3: u1,
    +            ///  Pending bit 4
    +            PR4: u1,
    +            ///  Pending bit 5
    +            PR5: u1,
    +            ///  Pending bit 6
    +            PR6: u1,
    +            ///  Pending bit 7
    +            PR7: u1,
    +            ///  Pending bit 8
    +            PR8: u1,
    +            ///  Pending bit 9
    +            PR9: u1,
    +            ///  Pending bit 10
    +            PR10: u1,
    +            ///  Pending bit 11
    +            PR11: u1,
    +            ///  Pending bit 12
    +            PR12: u1,
    +            ///  Pending bit 13
    +            PR13: u1,
    +            ///  Pending bit 14
    +            PR14: u1,
    +            ///  Pending bit 15
    +            PR15: u1,
    +            ///  Pending bit 16
    +            PR16: u1,
    +            ///  Pending bit 17
    +            PR17: u1,
    +            ///  Pending bit 18
    +            PR18: u1,
    +            ///  Pending bit 19
    +            PR19: u1,
    +            ///  Pending bit 20
    +            PR20: u1,
    +            ///  Pending bit 21
    +            PR21: u1,
    +            ///  Pending bit 22
    +            PR22: u1,
    +            reserved29: u6,
    +            ///  Pending bit 29
    +            PR29: u1,
    +            ///  Pending bit 30
    +            PR30: u1,
    +            ///  Pending bit 31
    +            PR31: u1,
    +        }),
    +        ///  Interrupt mask register
    +        IMR2: mmio.Mmio(packed struct(u32) {
    +            ///  Interrupt Mask on external/internal line 32
    +            MR32: u1,
    +            ///  Interrupt Mask on external/internal line 33
    +            MR33: u1,
    +            ///  Interrupt Mask on external/internal line 34
    +            MR34: u1,
    +            ///  Interrupt Mask on external/internal line 35
    +            MR35: u1,
    +            padding: u28,
    +        }),
    +        ///  Event mask register
    +        EMR2: mmio.Mmio(packed struct(u32) {
    +            ///  Event mask on external/internal line 32
    +            MR32: u1,
    +            ///  Event mask on external/internal line 33
    +            MR33: u1,
    +            ///  Event mask on external/internal line 34
    +            MR34: u1,
    +            ///  Event mask on external/internal line 35
    +            MR35: u1,
    +            padding: u28,
    +        }),
    +        ///  Rising Trigger selection register
    +        RTSR2: mmio.Mmio(packed struct(u32) {
    +            ///  Rising trigger event configuration bit of line 32
    +            TR32: u1,
    +            ///  Rising trigger event configuration bit of line 33
    +            TR33: u1,
    +            padding: u30,
    +        }),
    +        ///  Falling Trigger selection register
    +        FTSR2: mmio.Mmio(packed struct(u32) {
    +            ///  Falling trigger event configuration bit of line 32
    +            TR32: u1,
    +            ///  Falling trigger event configuration bit of line 33
    +            TR33: u1,
    +            padding: u30,
    +        }),
    +        ///  Software interrupt event register
    +        SWIER2: mmio.Mmio(packed struct(u32) {
    +            ///  Software interrupt on line 32
    +            SWIER32: u1,
    +            ///  Software interrupt on line 33
    +            SWIER33: u1,
    +            padding: u30,
    +        }),
    +        ///  Pending register
    +        PR2: mmio.Mmio(packed struct(u32) {
    +            ///  Pending bit on line 32
    +            PR32: u1,
    +            ///  Pending bit on line 33
    +            PR33: u1,
    +            padding: u30,
    +        }),
    +    };
    +
    +    ///  Power control
    +    pub const PWR = extern struct {
    +        ///  power control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  Low-power deep sleep
    +            LPDS: u1,
    +            ///  Power down deepsleep
    +            PDDS: u1,
    +            ///  Clear wakeup flag
    +            CWUF: u1,
    +            ///  Clear standby flag
    +            CSBF: u1,
    +            ///  Power voltage detector enable
    +            PVDE: u1,
    +            ///  PVD level selection
    +            PLS: u3,
    +            ///  Disable backup domain write protection
    +            DBP: u1,
    +            padding: u23,
    +        }),
    +        ///  power control/status register
    +        CSR: mmio.Mmio(packed struct(u32) {
    +            ///  Wakeup flag
    +            WUF: u1,
    +            ///  Standby flag
    +            SBF: u1,
    +            ///  PVD output
    +            PVDO: u1,
    +            reserved8: u5,
    +            ///  Enable WKUP1 pin
    +            EWUP1: u1,
    +            ///  Enable WKUP2 pin
    +            EWUP2: u1,
    +            padding: u22,
    +        }),
    +    };
    +
    +    ///  Controller area network
    +    pub const CAN = extern struct {
    +        ///  master control register
    +        MCR: mmio.Mmio(packed struct(u32) {
    +            ///  INRQ
    +            INRQ: u1,
    +            ///  SLEEP
    +            SLEEP: u1,
    +            ///  TXFP
    +            TXFP: u1,
    +            ///  RFLM
    +            RFLM: u1,
    +            ///  NART
    +            NART: u1,
    +            ///  AWUM
    +            AWUM: u1,
    +            ///  ABOM
    +            ABOM: u1,
    +            ///  TTCM
    +            TTCM: u1,
    +            reserved15: u7,
    +            ///  RESET
    +            RESET: u1,
    +            ///  DBF
    +            DBF: u1,
    +            padding: u15,
    +        }),
    +        ///  master status register
    +        MSR: mmio.Mmio(packed struct(u32) {
    +            ///  INAK
    +            INAK: u1,
    +            ///  SLAK
    +            SLAK: u1,
    +            ///  ERRI
    +            ERRI: u1,
    +            ///  WKUI
    +            WKUI: u1,
    +            ///  SLAKI
    +            SLAKI: u1,
    +            reserved8: u3,
    +            ///  TXM
    +            TXM: u1,
    +            ///  RXM
    +            RXM: u1,
    +            ///  SAMP
    +            SAMP: u1,
    +            ///  RX
    +            RX: u1,
    +            padding: u20,
    +        }),
    +        ///  transmit status register
    +        TSR: mmio.Mmio(packed struct(u32) {
    +            ///  RQCP0
    +            RQCP0: u1,
    +            ///  TXOK0
    +            TXOK0: u1,
    +            ///  ALST0
    +            ALST0: u1,
    +            ///  TERR0
    +            TERR0: u1,
    +            reserved7: u3,
    +            ///  ABRQ0
    +            ABRQ0: u1,
    +            ///  RQCP1
    +            RQCP1: u1,
    +            ///  TXOK1
    +            TXOK1: u1,
    +            ///  ALST1
    +            ALST1: u1,
    +            ///  TERR1
    +            TERR1: u1,
    +            reserved15: u3,
    +            ///  ABRQ1
    +            ABRQ1: u1,
    +            ///  RQCP2
    +            RQCP2: u1,
    +            ///  TXOK2
    +            TXOK2: u1,
    +            ///  ALST2
    +            ALST2: u1,
    +            ///  TERR2
    +            TERR2: u1,
    +            reserved23: u3,
    +            ///  ABRQ2
    +            ABRQ2: u1,
    +            ///  CODE
    +            CODE: u2,
    +            ///  Lowest priority flag for mailbox 0
    +            TME0: u1,
    +            ///  Lowest priority flag for mailbox 1
    +            TME1: u1,
    +            ///  Lowest priority flag for mailbox 2
    +            TME2: u1,
    +            ///  Lowest priority flag for mailbox 0
    +            LOW0: u1,
    +            ///  Lowest priority flag for mailbox 1
    +            LOW1: u1,
    +            ///  Lowest priority flag for mailbox 2
    +            LOW2: u1,
    +        }),
    +        ///  receive FIFO 0 register
    +        RF0R: mmio.Mmio(packed struct(u32) {
    +            ///  FMP0
    +            FMP0: u2,
    +            reserved3: u1,
    +            ///  FULL0
    +            FULL0: u1,
    +            ///  FOVR0
    +            FOVR0: u1,
    +            ///  RFOM0
    +            RFOM0: u1,
    +            padding: u26,
    +        }),
    +        ///  receive FIFO 1 register
    +        RF1R: mmio.Mmio(packed struct(u32) {
    +            ///  FMP1
    +            FMP1: u2,
    +            reserved3: u1,
    +            ///  FULL1
    +            FULL1: u1,
    +            ///  FOVR1
    +            FOVR1: u1,
    +            ///  RFOM1
    +            RFOM1: u1,
    +            padding: u26,
    +        }),
    +        ///  interrupt enable register
    +        IER: mmio.Mmio(packed struct(u32) {
    +            ///  TMEIE
    +            TMEIE: u1,
    +            ///  FMPIE0
    +            FMPIE0: u1,
    +            ///  FFIE0
    +            FFIE0: u1,
    +            ///  FOVIE0
    +            FOVIE0: u1,
    +            ///  FMPIE1
    +            FMPIE1: u1,
    +            ///  FFIE1
    +            FFIE1: u1,
    +            ///  FOVIE1
    +            FOVIE1: u1,
    +            reserved8: u1,
    +            ///  EWGIE
    +            EWGIE: u1,
    +            ///  EPVIE
    +            EPVIE: u1,
    +            ///  BOFIE
    +            BOFIE: u1,
    +            ///  LECIE
    +            LECIE: u1,
    +            reserved15: u3,
    +            ///  ERRIE
    +            ERRIE: u1,
    +            ///  WKUIE
    +            WKUIE: u1,
    +            ///  SLKIE
    +            SLKIE: u1,
    +            padding: u14,
    +        }),
    +        ///  error status register
    +        ESR: mmio.Mmio(packed struct(u32) {
    +            ///  EWGF
    +            EWGF: u1,
    +            ///  EPVF
    +            EPVF: u1,
    +            ///  BOFF
    +            BOFF: u1,
    +            reserved4: u1,
    +            ///  LEC
    +            LEC: u3,
    +            reserved16: u9,
    +            ///  TEC
    +            TEC: u8,
    +            ///  REC
    +            REC: u8,
    +        }),
    +        ///  bit timing register
    +        BTR: mmio.Mmio(packed struct(u32) {
    +            ///  BRP
    +            BRP: u10,
    +            reserved16: u6,
    +            ///  TS1
    +            TS1: u4,
    +            ///  TS2
    +            TS2: u3,
    +            reserved24: u1,
    +            ///  SJW
    +            SJW: u2,
    +            reserved30: u4,
    +            ///  LBKM
    +            LBKM: u1,
    +            ///  SILM
    +            SILM: u1,
    +        }),
    +        reserved384: [352]u8,
    +        ///  TX mailbox identifier register
    +        TI0R: mmio.Mmio(packed struct(u32) {
    +            ///  TXRQ
    +            TXRQ: u1,
    +            ///  RTR
    +            RTR: u1,
    +            ///  IDE
    +            IDE: u1,
    +            ///  EXID
    +            EXID: u18,
    +            ///  STID
    +            STID: u11,
    +        }),
    +        ///  mailbox data length control and time stamp register
    +        TDT0R: mmio.Mmio(packed struct(u32) {
    +            ///  DLC
    +            DLC: u4,
    +            reserved8: u4,
    +            ///  TGT
    +            TGT: u1,
    +            reserved16: u7,
    +            ///  TIME
    +            TIME: u16,
    +        }),
    +        ///  mailbox data low register
    +        TDL0R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA0
    +            DATA0: u8,
    +            ///  DATA1
    +            DATA1: u8,
    +            ///  DATA2
    +            DATA2: u8,
    +            ///  DATA3
    +            DATA3: u8,
    +        }),
    +        ///  mailbox data high register
    +        TDH0R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA4
    +            DATA4: u8,
    +            ///  DATA5
    +            DATA5: u8,
    +            ///  DATA6
    +            DATA6: u8,
    +            ///  DATA7
    +            DATA7: u8,
    +        }),
    +        ///  TX mailbox identifier register
    +        TI1R: mmio.Mmio(packed struct(u32) {
    +            ///  TXRQ
    +            TXRQ: u1,
    +            ///  RTR
    +            RTR: u1,
    +            ///  IDE
    +            IDE: u1,
    +            ///  EXID
    +            EXID: u18,
    +            ///  STID
    +            STID: u11,
    +        }),
    +        ///  mailbox data length control and time stamp register
    +        TDT1R: mmio.Mmio(packed struct(u32) {
    +            ///  DLC
    +            DLC: u4,
    +            reserved8: u4,
    +            ///  TGT
    +            TGT: u1,
    +            reserved16: u7,
    +            ///  TIME
    +            TIME: u16,
    +        }),
    +        ///  mailbox data low register
    +        TDL1R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA0
    +            DATA0: u8,
    +            ///  DATA1
    +            DATA1: u8,
    +            ///  DATA2
    +            DATA2: u8,
    +            ///  DATA3
    +            DATA3: u8,
    +        }),
    +        ///  mailbox data high register
    +        TDH1R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA4
    +            DATA4: u8,
    +            ///  DATA5
    +            DATA5: u8,
    +            ///  DATA6
    +            DATA6: u8,
    +            ///  DATA7
    +            DATA7: u8,
    +        }),
    +        ///  TX mailbox identifier register
    +        TI2R: mmio.Mmio(packed struct(u32) {
    +            ///  TXRQ
    +            TXRQ: u1,
    +            ///  RTR
    +            RTR: u1,
    +            ///  IDE
    +            IDE: u1,
    +            ///  EXID
    +            EXID: u18,
    +            ///  STID
    +            STID: u11,
    +        }),
    +        ///  mailbox data length control and time stamp register
    +        TDT2R: mmio.Mmio(packed struct(u32) {
    +            ///  DLC
    +            DLC: u4,
    +            reserved8: u4,
    +            ///  TGT
    +            TGT: u1,
    +            reserved16: u7,
    +            ///  TIME
    +            TIME: u16,
    +        }),
    +        ///  mailbox data low register
    +        TDL2R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA0
    +            DATA0: u8,
    +            ///  DATA1
    +            DATA1: u8,
    +            ///  DATA2
    +            DATA2: u8,
    +            ///  DATA3
    +            DATA3: u8,
    +        }),
    +        ///  mailbox data high register
    +        TDH2R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA4
    +            DATA4: u8,
    +            ///  DATA5
    +            DATA5: u8,
    +            ///  DATA6
    +            DATA6: u8,
    +            ///  DATA7
    +            DATA7: u8,
    +        }),
    +        ///  receive FIFO mailbox identifier register
    +        RI0R: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  RTR
    +            RTR: u1,
    +            ///  IDE
    +            IDE: u1,
    +            ///  EXID
    +            EXID: u18,
    +            ///  STID
    +            STID: u11,
    +        }),
    +        ///  receive FIFO mailbox data length control and time stamp register
    +        RDT0R: mmio.Mmio(packed struct(u32) {
    +            ///  DLC
    +            DLC: u4,
    +            reserved8: u4,
    +            ///  FMI
    +            FMI: u8,
    +            ///  TIME
    +            TIME: u16,
    +        }),
    +        ///  receive FIFO mailbox data low register
    +        RDL0R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA0
    +            DATA0: u8,
    +            ///  DATA1
    +            DATA1: u8,
    +            ///  DATA2
    +            DATA2: u8,
    +            ///  DATA3
    +            DATA3: u8,
    +        }),
    +        ///  receive FIFO mailbox data high register
    +        RDH0R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA4
    +            DATA4: u8,
    +            ///  DATA5
    +            DATA5: u8,
    +            ///  DATA6
    +            DATA6: u8,
    +            ///  DATA7
    +            DATA7: u8,
    +        }),
    +        ///  receive FIFO mailbox identifier register
    +        RI1R: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  RTR
    +            RTR: u1,
    +            ///  IDE
    +            IDE: u1,
    +            ///  EXID
    +            EXID: u18,
    +            ///  STID
    +            STID: u11,
    +        }),
    +        ///  receive FIFO mailbox data length control and time stamp register
    +        RDT1R: mmio.Mmio(packed struct(u32) {
    +            ///  DLC
    +            DLC: u4,
    +            reserved8: u4,
    +            ///  FMI
    +            FMI: u8,
    +            ///  TIME
    +            TIME: u16,
    +        }),
    +        ///  receive FIFO mailbox data low register
    +        RDL1R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA0
    +            DATA0: u8,
    +            ///  DATA1
    +            DATA1: u8,
    +            ///  DATA2
    +            DATA2: u8,
    +            ///  DATA3
    +            DATA3: u8,
    +        }),
    +        ///  receive FIFO mailbox data high register
    +        RDH1R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA4
    +            DATA4: u8,
    +            ///  DATA5
    +            DATA5: u8,
    +            ///  DATA6
    +            DATA6: u8,
    +            ///  DATA7
    +            DATA7: u8,
    +        }),
    +        reserved512: [48]u8,
    +        ///  filter master register
    +        FMR: mmio.Mmio(packed struct(u32) {
    +            ///  Filter init mode
    +            FINIT: u1,
    +            reserved8: u7,
    +            ///  CAN2 start bank
    +            CAN2SB: u6,
    +            padding: u18,
    +        }),
    +        ///  filter mode register
    +        FM1R: mmio.Mmio(packed struct(u32) {
    +            ///  Filter mode
    +            FBM0: u1,
    +            ///  Filter mode
    +            FBM1: u1,
    +            ///  Filter mode
    +            FBM2: u1,
    +            ///  Filter mode
    +            FBM3: u1,
    +            ///  Filter mode
    +            FBM4: u1,
    +            ///  Filter mode
    +            FBM5: u1,
    +            ///  Filter mode
    +            FBM6: u1,
    +            ///  Filter mode
    +            FBM7: u1,
    +            ///  Filter mode
    +            FBM8: u1,
    +            ///  Filter mode
    +            FBM9: u1,
    +            ///  Filter mode
    +            FBM10: u1,
    +            ///  Filter mode
    +            FBM11: u1,
    +            ///  Filter mode
    +            FBM12: u1,
    +            ///  Filter mode
    +            FBM13: u1,
    +            ///  Filter mode
    +            FBM14: u1,
    +            ///  Filter mode
    +            FBM15: u1,
    +            ///  Filter mode
    +            FBM16: u1,
    +            ///  Filter mode
    +            FBM17: u1,
    +            ///  Filter mode
    +            FBM18: u1,
    +            ///  Filter mode
    +            FBM19: u1,
    +            ///  Filter mode
    +            FBM20: u1,
    +            ///  Filter mode
    +            FBM21: u1,
    +            ///  Filter mode
    +            FBM22: u1,
    +            ///  Filter mode
    +            FBM23: u1,
    +            ///  Filter mode
    +            FBM24: u1,
    +            ///  Filter mode
    +            FBM25: u1,
    +            ///  Filter mode
    +            FBM26: u1,
    +            ///  Filter mode
    +            FBM27: u1,
    +            padding: u4,
    +        }),
    +        reserved524: [4]u8,
    +        ///  filter scale register
    +        FS1R: mmio.Mmio(packed struct(u32) {
    +            ///  Filter scale configuration
    +            FSC0: u1,
    +            ///  Filter scale configuration
    +            FSC1: u1,
    +            ///  Filter scale configuration
    +            FSC2: u1,
    +            ///  Filter scale configuration
    +            FSC3: u1,
    +            ///  Filter scale configuration
    +            FSC4: u1,
    +            ///  Filter scale configuration
    +            FSC5: u1,
    +            ///  Filter scale configuration
    +            FSC6: u1,
    +            ///  Filter scale configuration
    +            FSC7: u1,
    +            ///  Filter scale configuration
    +            FSC8: u1,
    +            ///  Filter scale configuration
    +            FSC9: u1,
    +            ///  Filter scale configuration
    +            FSC10: u1,
    +            ///  Filter scale configuration
    +            FSC11: u1,
    +            ///  Filter scale configuration
    +            FSC12: u1,
    +            ///  Filter scale configuration
    +            FSC13: u1,
    +            ///  Filter scale configuration
    +            FSC14: u1,
    +            ///  Filter scale configuration
    +            FSC15: u1,
    +            ///  Filter scale configuration
    +            FSC16: u1,
    +            ///  Filter scale configuration
    +            FSC17: u1,
    +            ///  Filter scale configuration
    +            FSC18: u1,
    +            ///  Filter scale configuration
    +            FSC19: u1,
    +            ///  Filter scale configuration
    +            FSC20: u1,
    +            ///  Filter scale configuration
    +            FSC21: u1,
    +            ///  Filter scale configuration
    +            FSC22: u1,
    +            ///  Filter scale configuration
    +            FSC23: u1,
    +            ///  Filter scale configuration
    +            FSC24: u1,
    +            ///  Filter scale configuration
    +            FSC25: u1,
    +            ///  Filter scale configuration
    +            FSC26: u1,
    +            ///  Filter scale configuration
    +            FSC27: u1,
    +            padding: u4,
    +        }),
    +        reserved532: [4]u8,
    +        ///  filter FIFO assignment register
    +        FFA1R: mmio.Mmio(packed struct(u32) {
    +            ///  Filter FIFO assignment for filter 0
    +            FFA0: u1,
    +            ///  Filter FIFO assignment for filter 1
    +            FFA1: u1,
    +            ///  Filter FIFO assignment for filter 2
    +            FFA2: u1,
    +            ///  Filter FIFO assignment for filter 3
    +            FFA3: u1,
    +            ///  Filter FIFO assignment for filter 4
    +            FFA4: u1,
    +            ///  Filter FIFO assignment for filter 5
    +            FFA5: u1,
    +            ///  Filter FIFO assignment for filter 6
    +            FFA6: u1,
    +            ///  Filter FIFO assignment for filter 7
    +            FFA7: u1,
    +            ///  Filter FIFO assignment for filter 8
    +            FFA8: u1,
    +            ///  Filter FIFO assignment for filter 9
    +            FFA9: u1,
    +            ///  Filter FIFO assignment for filter 10
    +            FFA10: u1,
    +            ///  Filter FIFO assignment for filter 11
    +            FFA11: u1,
    +            ///  Filter FIFO assignment for filter 12
    +            FFA12: u1,
    +            ///  Filter FIFO assignment for filter 13
    +            FFA13: u1,
    +            ///  Filter FIFO assignment for filter 14
    +            FFA14: u1,
    +            ///  Filter FIFO assignment for filter 15
    +            FFA15: u1,
    +            ///  Filter FIFO assignment for filter 16
    +            FFA16: u1,
    +            ///  Filter FIFO assignment for filter 17
    +            FFA17: u1,
    +            ///  Filter FIFO assignment for filter 18
    +            FFA18: u1,
    +            ///  Filter FIFO assignment for filter 19
    +            FFA19: u1,
    +            ///  Filter FIFO assignment for filter 20
    +            FFA20: u1,
    +            ///  Filter FIFO assignment for filter 21
    +            FFA21: u1,
    +            ///  Filter FIFO assignment for filter 22
    +            FFA22: u1,
    +            ///  Filter FIFO assignment for filter 23
    +            FFA23: u1,
    +            ///  Filter FIFO assignment for filter 24
    +            FFA24: u1,
    +            ///  Filter FIFO assignment for filter 25
    +            FFA25: u1,
    +            ///  Filter FIFO assignment for filter 26
    +            FFA26: u1,
    +            ///  Filter FIFO assignment for filter 27
    +            FFA27: u1,
    +            padding: u4,
    +        }),
    +        reserved540: [4]u8,
    +        ///  CAN filter activation register
    +        FA1R: mmio.Mmio(packed struct(u32) {
    +            ///  Filter active
    +            FACT0: u1,
    +            ///  Filter active
    +            FACT1: u1,
    +            ///  Filter active
    +            FACT2: u1,
    +            ///  Filter active
    +            FACT3: u1,
    +            ///  Filter active
    +            FACT4: u1,
    +            ///  Filter active
    +            FACT5: u1,
    +            ///  Filter active
    +            FACT6: u1,
    +            ///  Filter active
    +            FACT7: u1,
    +            ///  Filter active
    +            FACT8: u1,
    +            ///  Filter active
    +            FACT9: u1,
    +            ///  Filter active
    +            FACT10: u1,
    +            ///  Filter active
    +            FACT11: u1,
    +            ///  Filter active
    +            FACT12: u1,
    +            ///  Filter active
    +            FACT13: u1,
    +            ///  Filter active
    +            FACT14: u1,
    +            ///  Filter active
    +            FACT15: u1,
    +            ///  Filter active
    +            FACT16: u1,
    +            ///  Filter active
    +            FACT17: u1,
    +            ///  Filter active
    +            FACT18: u1,
    +            ///  Filter active
    +            FACT19: u1,
    +            ///  Filter active
    +            FACT20: u1,
    +            ///  Filter active
    +            FACT21: u1,
    +            ///  Filter active
    +            FACT22: u1,
    +            ///  Filter active
    +            FACT23: u1,
    +            ///  Filter active
    +            FACT24: u1,
    +            ///  Filter active
    +            FACT25: u1,
    +            ///  Filter active
    +            FACT26: u1,
    +            ///  Filter active
    +            FACT27: u1,
    +            padding: u4,
    +        }),
    +        reserved576: [32]u8,
    +        ///  Filter bank 0 register 1
    +        F0R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 0 register 2
    +        F0R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 1 register 1
    +        F1R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 1 register 2
    +        F1R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 2 register 1
    +        F2R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 2 register 2
    +        F2R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 3 register 1
    +        F3R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 3 register 2
    +        F3R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 4 register 1
    +        F4R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 4 register 2
    +        F4R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 5 register 1
    +        F5R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 5 register 2
    +        F5R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 6 register 1
    +        F6R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 6 register 2
    +        F6R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 7 register 1
    +        F7R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 7 register 2
    +        F7R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 8 register 1
    +        F8R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 8 register 2
    +        F8R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 9 register 1
    +        F9R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 9 register 2
    +        F9R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 10 register 1
    +        F10R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 10 register 2
    +        F10R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 11 register 1
    +        F11R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 11 register 2
    +        F11R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 4 register 1
    +        F12R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 12 register 2
    +        F12R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 13 register 1
    +        F13R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 13 register 2
    +        F13R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 14 register 1
    +        F14R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 14 register 2
    +        F14R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 15 register 1
    +        F15R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 15 register 2
    +        F15R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 16 register 1
    +        F16R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 16 register 2
    +        F16R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 17 register 1
    +        F17R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 17 register 2
    +        F17R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 18 register 1
    +        F18R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 18 register 2
    +        F18R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 19 register 1
    +        F19R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 19 register 2
    +        F19R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 20 register 1
    +        F20R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 20 register 2
    +        F20R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 21 register 1
    +        F21R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 21 register 2
    +        F21R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 22 register 1
    +        F22R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 22 register 2
    +        F22R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 23 register 1
    +        F23R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 23 register 2
    +        F23R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 24 register 1
    +        F24R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 24 register 2
    +        F24R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 25 register 1
    +        F25R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 25 register 2
    +        F25R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 26 register 1
    +        F26R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 26 register 2
    +        F26R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 27 register 1
    +        F27R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 27 register 2
    +        F27R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +    };
    +
    +    ///  Universal serial bus full-speed device interface
    +    pub const USB_FS = extern struct {
    +        ///  endpoint 0 register
    +        USB_EP0R: mmio.Mmio(packed struct(u32) {
    +            ///  Endpoint address
    +            EA: u4,
    +            ///  Status bits, for transmission transfers
    +            STAT_TX: u2,
    +            ///  Data Toggle, for transmission transfers
    +            DTOG_TX: u1,
    +            ///  Correct Transfer for transmission
    +            CTR_TX: u1,
    +            ///  Endpoint kind
    +            EP_KIND: u1,
    +            ///  Endpoint type
    +            EP_TYPE: u2,
    +            ///  Setup transaction completed
    +            SETUP: u1,
    +            ///  Status bits, for reception transfers
    +            STAT_RX: u2,
    +            ///  Data Toggle, for reception transfers
    +            DTOG_RX: u1,
    +            ///  Correct transfer for reception
    +            CTR_RX: u1,
    +            padding: u16,
    +        }),
    +        ///  endpoint 1 register
    +        USB_EP1R: mmio.Mmio(packed struct(u32) {
    +            ///  Endpoint address
    +            EA: u4,
    +            ///  Status bits, for transmission transfers
    +            STAT_TX: u2,
    +            ///  Data Toggle, for transmission transfers
    +            DTOG_TX: u1,
    +            ///  Correct Transfer for transmission
    +            CTR_TX: u1,
    +            ///  Endpoint kind
    +            EP_KIND: u1,
    +            ///  Endpoint type
    +            EP_TYPE: u2,
    +            ///  Setup transaction completed
    +            SETUP: u1,
    +            ///  Status bits, for reception transfers
    +            STAT_RX: u2,
    +            ///  Data Toggle, for reception transfers
    +            DTOG_RX: u1,
    +            ///  Correct transfer for reception
    +            CTR_RX: u1,
    +            padding: u16,
    +        }),
    +        ///  endpoint 2 register
    +        USB_EP2R: mmio.Mmio(packed struct(u32) {
    +            ///  Endpoint address
    +            EA: u4,
    +            ///  Status bits, for transmission transfers
    +            STAT_TX: u2,
    +            ///  Data Toggle, for transmission transfers
    +            DTOG_TX: u1,
    +            ///  Correct Transfer for transmission
    +            CTR_TX: u1,
    +            ///  Endpoint kind
    +            EP_KIND: u1,
    +            ///  Endpoint type
    +            EP_TYPE: u2,
    +            ///  Setup transaction completed
    +            SETUP: u1,
    +            ///  Status bits, for reception transfers
    +            STAT_RX: u2,
    +            ///  Data Toggle, for reception transfers
    +            DTOG_RX: u1,
    +            ///  Correct transfer for reception
    +            CTR_RX: u1,
    +            padding: u16,
    +        }),
    +        ///  endpoint 3 register
    +        USB_EP3R: mmio.Mmio(packed struct(u32) {
    +            ///  Endpoint address
    +            EA: u4,
    +            ///  Status bits, for transmission transfers
    +            STAT_TX: u2,
    +            ///  Data Toggle, for transmission transfers
    +            DTOG_TX: u1,
    +            ///  Correct Transfer for transmission
    +            CTR_TX: u1,
    +            ///  Endpoint kind
    +            EP_KIND: u1,
    +            ///  Endpoint type
    +            EP_TYPE: u2,
    +            ///  Setup transaction completed
    +            SETUP: u1,
    +            ///  Status bits, for reception transfers
    +            STAT_RX: u2,
    +            ///  Data Toggle, for reception transfers
    +            DTOG_RX: u1,
    +            ///  Correct transfer for reception
    +            CTR_RX: u1,
    +            padding: u16,
    +        }),
    +        ///  endpoint 4 register
    +        USB_EP4R: mmio.Mmio(packed struct(u32) {
    +            ///  Endpoint address
    +            EA: u4,
    +            ///  Status bits, for transmission transfers
    +            STAT_TX: u2,
    +            ///  Data Toggle, for transmission transfers
    +            DTOG_TX: u1,
    +            ///  Correct Transfer for transmission
    +            CTR_TX: u1,
    +            ///  Endpoint kind
    +            EP_KIND: u1,
    +            ///  Endpoint type
    +            EP_TYPE: u2,
    +            ///  Setup transaction completed
    +            SETUP: u1,
    +            ///  Status bits, for reception transfers
    +            STAT_RX: u2,
    +            ///  Data Toggle, for reception transfers
    +            DTOG_RX: u1,
    +            ///  Correct transfer for reception
    +            CTR_RX: u1,
    +            padding: u16,
    +        }),
    +        ///  endpoint 5 register
    +        USB_EP5R: mmio.Mmio(packed struct(u32) {
    +            ///  Endpoint address
    +            EA: u4,
    +            ///  Status bits, for transmission transfers
    +            STAT_TX: u2,
    +            ///  Data Toggle, for transmission transfers
    +            DTOG_TX: u1,
    +            ///  Correct Transfer for transmission
    +            CTR_TX: u1,
    +            ///  Endpoint kind
    +            EP_KIND: u1,
    +            ///  Endpoint type
    +            EP_TYPE: u2,
    +            ///  Setup transaction completed
    +            SETUP: u1,
    +            ///  Status bits, for reception transfers
    +            STAT_RX: u2,
    +            ///  Data Toggle, for reception transfers
    +            DTOG_RX: u1,
    +            ///  Correct transfer for reception
    +            CTR_RX: u1,
    +            padding: u16,
    +        }),
    +        ///  endpoint 6 register
    +        USB_EP6R: mmio.Mmio(packed struct(u32) {
    +            ///  Endpoint address
    +            EA: u4,
    +            ///  Status bits, for transmission transfers
    +            STAT_TX: u2,
    +            ///  Data Toggle, for transmission transfers
    +            DTOG_TX: u1,
    +            ///  Correct Transfer for transmission
    +            CTR_TX: u1,
    +            ///  Endpoint kind
    +            EP_KIND: u1,
    +            ///  Endpoint type
    +            EP_TYPE: u2,
    +            ///  Setup transaction completed
    +            SETUP: u1,
    +            ///  Status bits, for reception transfers
    +            STAT_RX: u2,
    +            ///  Data Toggle, for reception transfers
    +            DTOG_RX: u1,
    +            ///  Correct transfer for reception
    +            CTR_RX: u1,
    +            padding: u16,
    +        }),
    +        ///  endpoint 7 register
    +        USB_EP7R: mmio.Mmio(packed struct(u32) {
    +            ///  Endpoint address
    +            EA: u4,
    +            ///  Status bits, for transmission transfers
    +            STAT_TX: u2,
    +            ///  Data Toggle, for transmission transfers
    +            DTOG_TX: u1,
    +            ///  Correct Transfer for transmission
    +            CTR_TX: u1,
    +            ///  Endpoint kind
    +            EP_KIND: u1,
    +            ///  Endpoint type
    +            EP_TYPE: u2,
    +            ///  Setup transaction completed
    +            SETUP: u1,
    +            ///  Status bits, for reception transfers
    +            STAT_RX: u2,
    +            ///  Data Toggle, for reception transfers
    +            DTOG_RX: u1,
    +            ///  Correct transfer for reception
    +            CTR_RX: u1,
    +            padding: u16,
    +        }),
    +        reserved64: [32]u8,
    +        ///  control register
    +        USB_CNTR: mmio.Mmio(packed struct(u32) {
    +            ///  Force USB Reset
    +            FRES: u1,
    +            ///  Power down
    +            PDWN: u1,
    +            ///  Low-power mode
    +            LPMODE: u1,
    +            ///  Force suspend
    +            FSUSP: u1,
    +            ///  Resume request
    +            RESUME: u1,
    +            reserved8: u3,
    +            ///  Expected start of frame interrupt mask
    +            ESOFM: u1,
    +            ///  Start of frame interrupt mask
    +            SOFM: u1,
    +            ///  USB reset interrupt mask
    +            RESETM: u1,
    +            ///  Suspend mode interrupt mask
    +            SUSPM: u1,
    +            ///  Wakeup interrupt mask
    +            WKUPM: u1,
    +            ///  Error interrupt mask
    +            ERRM: u1,
    +            ///  Packet memory area over / underrun interrupt mask
    +            PMAOVRM: u1,
    +            ///  Correct transfer interrupt mask
    +            CTRM: u1,
    +            padding: u16,
    +        }),
    +        ///  interrupt status register
    +        ISTR: mmio.Mmio(packed struct(u32) {
    +            ///  Endpoint Identifier
    +            EP_ID: u4,
    +            ///  Direction of transaction
    +            DIR: u1,
    +            reserved8: u3,
    +            ///  Expected start frame
    +            ESOF: u1,
    +            ///  start of frame
    +            SOF: u1,
    +            ///  reset request
    +            RESET: u1,
    +            ///  Suspend mode request
    +            SUSP: u1,
    +            ///  Wakeup
    +            WKUP: u1,
    +            ///  Error
    +            ERR: u1,
    +            ///  Packet memory area over / underrun
    +            PMAOVR: u1,
    +            ///  Correct transfer
    +            CTR: u1,
    +            padding: u16,
    +        }),
    +        ///  frame number register
    +        FNR: mmio.Mmio(packed struct(u32) {
    +            ///  Frame number
    +            FN: u11,
    +            ///  Lost SOF
    +            LSOF: u2,
    +            ///  Locked
    +            LCK: u1,
    +            ///  Receive data - line status
    +            RXDM: u1,
    +            ///  Receive data + line status
    +            RXDP: u1,
    +            padding: u16,
    +        }),
    +        ///  device address
    +        DADDR: mmio.Mmio(packed struct(u32) {
    +            ///  Device address
    +            ADD: u1,
    +            ///  Device address
    +            ADD1: u1,
    +            ///  Device address
    +            ADD2: u1,
    +            ///  Device address
    +            ADD3: u1,
    +            ///  Device address
    +            ADD4: u1,
    +            ///  Device address
    +            ADD5: u1,
    +            ///  Device address
    +            ADD6: u1,
    +            ///  Enable function
    +            EF: u1,
    +            padding: u24,
    +        }),
    +        ///  Buffer table address
    +        BTABLE: mmio.Mmio(packed struct(u32) {
    +            reserved3: u3,
    +            ///  Buffer table
    +            BTABLE: u13,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  Inter-integrated circuit
    +    pub const I2C1 = extern struct {
    +        ///  Control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral enable
    +            PE: u1,
    +            ///  TX Interrupt enable
    +            TXIE: u1,
    +            ///  RX Interrupt enable
    +            RXIE: u1,
    +            ///  Address match interrupt enable (slave only)
    +            ADDRIE: u1,
    +            ///  Not acknowledge received interrupt enable
    +            NACKIE: u1,
    +            ///  STOP detection Interrupt enable
    +            STOPIE: u1,
    +            ///  Transfer Complete interrupt enable
    +            TCIE: u1,
    +            ///  Error interrupts enable
    +            ERRIE: u1,
    +            ///  Digital noise filter
    +            DNF: u4,
    +            ///  Analog noise filter OFF
    +            ANFOFF: u1,
    +            ///  Software reset
    +            SWRST: u1,
    +            ///  DMA transmission requests enable
    +            TXDMAEN: u1,
    +            ///  DMA reception requests enable
    +            RXDMAEN: u1,
    +            ///  Slave byte control
    +            SBC: u1,
    +            ///  Clock stretching disable
    +            NOSTRETCH: u1,
    +            ///  Wakeup from STOP enable
    +            WUPEN: u1,
    +            ///  General call enable
    +            GCEN: u1,
    +            ///  SMBus Host address enable
    +            SMBHEN: u1,
    +            ///  SMBus Device Default address enable
    +            SMBDEN: u1,
    +            ///  SMBUS alert enable
    +            ALERTEN: u1,
    +            ///  PEC enable
    +            PECEN: u1,
    +            padding: u8,
    +        }),
    +        ///  Control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            ///  Slave address bit 0 (master mode)
    +            SADD0: u1,
    +            ///  Slave address bit 7:1 (master mode)
    +            SADD1: u7,
    +            ///  Slave address bit 9:8 (master mode)
    +            SADD8: u2,
    +            ///  Transfer direction (master mode)
    +            RD_WRN: u1,
    +            ///  10-bit addressing mode (master mode)
    +            ADD10: u1,
    +            ///  10-bit address header only read direction (master receiver mode)
    +            HEAD10R: u1,
    +            ///  Start generation
    +            START: u1,
    +            ///  Stop generation (master mode)
    +            STOP: u1,
    +            ///  NACK generation (slave mode)
    +            NACK: u1,
    +            ///  Number of bytes
    +            NBYTES: u8,
    +            ///  NBYTES reload mode
    +            RELOAD: u1,
    +            ///  Automatic end mode (master mode)
    +            AUTOEND: u1,
    +            ///  Packet error checking byte
    +            PECBYTE: u1,
    +            padding: u5,
    +        }),
    +        ///  Own address register 1
    +        OAR1: mmio.Mmio(packed struct(u32) {
    +            ///  Interface address
    +            OA1_0: u1,
    +            ///  Interface address
    +            OA1_1: u7,
    +            ///  Interface address
    +            OA1_8: u2,
    +            ///  Own Address 1 10-bit mode
    +            OA1MODE: u1,
    +            reserved15: u4,
    +            ///  Own Address 1 enable
    +            OA1EN: u1,
    +            padding: u16,
    +        }),
    +        ///  Own address register 2
    +        OAR2: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  Interface address
    +            OA2: u7,
    +            ///  Own Address 2 masks
    +            OA2MSK: u3,
    +            reserved15: u4,
    +            ///  Own Address 2 enable
    +            OA2EN: u1,
    +            padding: u16,
    +        }),
    +        ///  Timing register
    +        TIMINGR: mmio.Mmio(packed struct(u32) {
    +            ///  SCL low period (master mode)
    +            SCLL: u8,
    +            ///  SCL high period (master mode)
    +            SCLH: u8,
    +            ///  Data hold time
    +            SDADEL: u4,
    +            ///  Data setup time
    +            SCLDEL: u4,
    +            reserved28: u4,
    +            ///  Timing prescaler
    +            PRESC: u4,
    +        }),
    +        ///  Status register 1
    +        TIMEOUTR: mmio.Mmio(packed struct(u32) {
    +            ///  Bus timeout A
    +            TIMEOUTA: u12,
    +            ///  Idle clock timeout detection
    +            TIDLE: u1,
    +            reserved15: u2,
    +            ///  Clock timeout enable
    +            TIMOUTEN: u1,
    +            ///  Bus timeout B
    +            TIMEOUTB: u12,
    +            reserved31: u3,
    +            ///  Extended clock timeout enable
    +            TEXTEN: u1,
    +        }),
    +        ///  Interrupt and Status register
    +        ISR: mmio.Mmio(packed struct(u32) {
    +            ///  Transmit data register empty (transmitters)
    +            TXE: u1,
    +            ///  Transmit interrupt status (transmitters)
    +            TXIS: u1,
    +            ///  Receive data register not empty (receivers)
    +            RXNE: u1,
    +            ///  Address matched (slave mode)
    +            ADDR: u1,
    +            ///  Not acknowledge received flag
    +            NACKF: u1,
    +            ///  Stop detection flag
    +            STOPF: u1,
    +            ///  Transfer Complete (master mode)
    +            TC: u1,
    +            ///  Transfer Complete Reload
    +            TCR: u1,
    +            ///  Bus error
    +            BERR: u1,
    +            ///  Arbitration lost
    +            ARLO: u1,
    +            ///  Overrun/Underrun (slave mode)
    +            OVR: u1,
    +            ///  PEC Error in reception
    +            PECERR: u1,
    +            ///  Timeout or t_low detection flag
    +            TIMEOUT: u1,
    +            ///  SMBus alert
    +            ALERT: u1,
    +            reserved15: u1,
    +            ///  Bus busy
    +            BUSY: u1,
    +            ///  Transfer direction (Slave mode)
    +            DIR: u1,
    +            ///  Address match code (Slave mode)
    +            ADDCODE: u7,
    +            padding: u8,
    +        }),
    +        ///  Interrupt clear register
    +        ICR: mmio.Mmio(packed struct(u32) {
    +            reserved3: u3,
    +            ///  Address Matched flag clear
    +            ADDRCF: u1,
    +            ///  Not Acknowledge flag clear
    +            NACKCF: u1,
    +            ///  Stop detection flag clear
    +            STOPCF: u1,
    +            reserved8: u2,
    +            ///  Bus error flag clear
    +            BERRCF: u1,
    +            ///  Arbitration lost flag clear
    +            ARLOCF: u1,
    +            ///  Overrun/Underrun flag clear
    +            OVRCF: u1,
    +            ///  PEC Error flag clear
    +            PECCF: u1,
    +            ///  Timeout detection flag clear
    +            TIMOUTCF: u1,
    +            ///  Alert flag clear
    +            ALERTCF: u1,
    +            padding: u18,
    +        }),
    +        ///  PEC register
    +        PECR: mmio.Mmio(packed struct(u32) {
    +            ///  Packet error checking register
    +            PEC: u8,
    +            padding: u24,
    +        }),
    +        ///  Receive data register
    +        RXDR: mmio.Mmio(packed struct(u32) {
    +            ///  8-bit receive data
    +            RXDATA: u8,
    +            padding: u24,
    +        }),
    +        ///  Transmit data register
    +        TXDR: mmio.Mmio(packed struct(u32) {
    +            ///  8-bit transmit data
    +            TXDATA: u8,
    +            padding: u24,
    +        }),
    +    };
    +
    +    ///  Advanced timer
    +    pub const TIM1 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            ///  One-pulse mode
    +            OPM: u1,
    +            ///  Direction
    +            DIR: u1,
    +            ///  Center-aligned mode selection
    +            CMS: u2,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            ///  Clock division
    +            CKD: u2,
    +            reserved11: u1,
    +            ///  UIF status bit remapping
    +            UIFREMAP: u1,
    +            padding: u20,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/compare preloaded control
    +            CCPC: u1,
    +            reserved2: u1,
    +            ///  Capture/compare control update selection
    +            CCUS: u1,
    +            ///  Capture/compare DMA selection
    +            CCDS: u1,
    +            ///  Master mode selection
    +            MMS: u3,
    +            ///  TI1 selection
    +            TI1S: u1,
    +            ///  Output Idle state 1
    +            OIS1: u1,
    +            ///  Output Idle state 1
    +            OIS1N: u1,
    +            ///  Output Idle state 2
    +            OIS2: u1,
    +            ///  Output Idle state 2
    +            OIS2N: u1,
    +            ///  Output Idle state 3
    +            OIS3: u1,
    +            ///  Output Idle state 3
    +            OIS3N: u1,
    +            ///  Output Idle state 4
    +            OIS4: u1,
    +            reserved16: u1,
    +            ///  Output Idle state 5
    +            OIS5: u1,
    +            reserved18: u1,
    +            ///  Output Idle state 6
    +            OIS6: u1,
    +            reserved20: u1,
    +            ///  Master mode selection 2
    +            MMS2: u4,
    +            padding: u8,
    +        }),
    +        ///  slave mode control register
    +        SMCR: mmio.Mmio(packed struct(u32) {
    +            ///  Slave mode selection
    +            SMS: u3,
    +            ///  OCREF clear selection
    +            OCCS: u1,
    +            ///  Trigger selection
    +            TS: u3,
    +            ///  Master/Slave mode
    +            MSM: u1,
    +            ///  External trigger filter
    +            ETF: u4,
    +            ///  External trigger prescaler
    +            ETPS: u2,
    +            ///  External clock enable
    +            ECE: u1,
    +            ///  External trigger polarity
    +            ETP: u1,
    +            ///  Slave mode selection bit 3
    +            SMS3: u1,
    +            padding: u15,
    +        }),
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            ///  Capture/Compare 1 interrupt enable
    +            CC1IE: u1,
    +            ///  Capture/Compare 2 interrupt enable
    +            CC2IE: u1,
    +            ///  Capture/Compare 3 interrupt enable
    +            CC3IE: u1,
    +            ///  Capture/Compare 4 interrupt enable
    +            CC4IE: u1,
    +            ///  COM interrupt enable
    +            COMIE: u1,
    +            ///  Trigger interrupt enable
    +            TIE: u1,
    +            ///  Break interrupt enable
    +            BIE: u1,
    +            ///  Update DMA request enable
    +            UDE: u1,
    +            ///  Capture/Compare 1 DMA request enable
    +            CC1DE: u1,
    +            ///  Capture/Compare 2 DMA request enable
    +            CC2DE: u1,
    +            ///  Capture/Compare 3 DMA request enable
    +            CC3DE: u1,
    +            ///  Capture/Compare 4 DMA request enable
    +            CC4DE: u1,
    +            ///  COM DMA request enable
    +            COMDE: u1,
    +            ///  Trigger DMA request enable
    +            TDE: u1,
    +            padding: u17,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            ///  Capture/compare 1 interrupt flag
    +            CC1IF: u1,
    +            ///  Capture/Compare 2 interrupt flag
    +            CC2IF: u1,
    +            ///  Capture/Compare 3 interrupt flag
    +            CC3IF: u1,
    +            ///  Capture/Compare 4 interrupt flag
    +            CC4IF: u1,
    +            ///  COM interrupt flag
    +            COMIF: u1,
    +            ///  Trigger interrupt flag
    +            TIF: u1,
    +            ///  Break interrupt flag
    +            BIF: u1,
    +            ///  Break 2 interrupt flag
    +            B2IF: u1,
    +            ///  Capture/Compare 1 overcapture flag
    +            CC1OF: u1,
    +            ///  Capture/compare 2 overcapture flag
    +            CC2OF: u1,
    +            ///  Capture/Compare 3 overcapture flag
    +            CC3OF: u1,
    +            ///  Capture/Compare 4 overcapture flag
    +            CC4OF: u1,
    +            reserved16: u3,
    +            ///  Capture/Compare 5 interrupt flag
    +            C5IF: u1,
    +            ///  Capture/Compare 6 interrupt flag
    +            C6IF: u1,
    +            padding: u14,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            ///  Capture/compare 1 generation
    +            CC1G: u1,
    +            ///  Capture/compare 2 generation
    +            CC2G: u1,
    +            ///  Capture/compare 3 generation
    +            CC3G: u1,
    +            ///  Capture/compare 4 generation
    +            CC4G: u1,
    +            ///  Capture/Compare control update generation
    +            COMG: u1,
    +            ///  Trigger generation
    +            TG: u1,
    +            ///  Break generation
    +            BG: u1,
    +            ///  Break 2 generation
    +            B2G: u1,
    +            padding: u23,
    +        }),
    +        ///  capture/compare mode register (output mode)
    +        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 selection
    +            CC1S: u2,
    +            ///  Output Compare 1 fast enable
    +            OC1FE: u1,
    +            ///  Output Compare 1 preload enable
    +            OC1PE: u1,
    +            ///  Output Compare 1 mode
    +            OC1M: u3,
    +            ///  Output Compare 1 clear enable
    +            OC1CE: u1,
    +            ///  Capture/Compare 2 selection
    +            CC2S: u2,
    +            ///  Output Compare 2 fast enable
    +            OC2FE: u1,
    +            ///  Output Compare 2 preload enable
    +            OC2PE: u1,
    +            ///  Output Compare 2 mode
    +            OC2M: u3,
    +            ///  Output Compare 2 clear enable
    +            OC2CE: u1,
    +            ///  Output Compare 1 mode bit 3
    +            OC1M_3: u1,
    +            reserved24: u7,
    +            ///  Output Compare 2 mode bit 3
    +            OC2M_3: u1,
    +            padding: u7,
    +        }),
    +        ///  capture/compare mode register (output mode)
    +        CCMR2_Output: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 3 selection
    +            CC3S: u2,
    +            ///  Output compare 3 fast enable
    +            OC3FE: u1,
    +            ///  Output compare 3 preload enable
    +            OC3PE: u1,
    +            ///  Output compare 3 mode
    +            OC3M: u3,
    +            ///  Output compare 3 clear enable
    +            OC3CE: u1,
    +            ///  Capture/Compare 4 selection
    +            CC4S: u2,
    +            ///  Output compare 4 fast enable
    +            OC4FE: u1,
    +            ///  Output compare 4 preload enable
    +            OC4PE: u1,
    +            ///  Output compare 4 mode
    +            OC4M: u3,
    +            ///  Output compare 4 clear enable
    +            OC4CE: u1,
    +            ///  Output Compare 3 mode bit 3
    +            OC3M_3: u1,
    +            reserved24: u7,
    +            ///  Output Compare 4 mode bit 3
    +            OC4M_3: u1,
    +            padding: u7,
    +        }),
    +        ///  capture/compare enable register
    +        CCER: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 output enable
    +            CC1E: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1P: u1,
    +            ///  Capture/Compare 1 complementary output enable
    +            CC1NE: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1NP: u1,
    +            ///  Capture/Compare 2 output enable
    +            CC2E: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2P: u1,
    +            ///  Capture/Compare 2 complementary output enable
    +            CC2NE: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2NP: u1,
    +            ///  Capture/Compare 3 output enable
    +            CC3E: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC3P: u1,
    +            ///  Capture/Compare 3 complementary output enable
    +            CC3NE: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC3NP: u1,
    +            ///  Capture/Compare 4 output enable
    +            CC4E: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC4P: u1,
    +            reserved15: u1,
    +            ///  Capture/Compare 4 output Polarity
    +            CC4NP: u1,
    +            ///  Capture/Compare 5 output enable
    +            CC5E: u1,
    +            ///  Capture/Compare 5 output Polarity
    +            CC5P: u1,
    +            reserved20: u2,
    +            ///  Capture/Compare 6 output enable
    +            CC6E: u1,
    +            ///  Capture/Compare 6 output Polarity
    +            CC6P: u1,
    +            padding: u10,
    +        }),
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  counter value
    +            CNT: u16,
    +            reserved31: u15,
    +            ///  UIF copy
    +            UIFCPY: u1,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Auto-reload value
    +            ARR: u16,
    +            padding: u16,
    +        }),
    +        ///  repetition counter register
    +        RCR: mmio.Mmio(packed struct(u32) {
    +            ///  Repetition counter value
    +            REP: u16,
    +            padding: u16,
    +        }),
    +        ///  capture/compare register 1
    +        CCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 value
    +            CCR1: u16,
    +            padding: u16,
    +        }),
    +        ///  capture/compare register 2
    +        CCR2: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 2 value
    +            CCR2: u16,
    +            padding: u16,
    +        }),
    +        ///  capture/compare register 3
    +        CCR3: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 3 value
    +            CCR3: u16,
    +            padding: u16,
    +        }),
    +        ///  capture/compare register 4
    +        CCR4: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 3 value
    +            CCR4: u16,
    +            padding: u16,
    +        }),
    +        ///  break and dead-time register
    +        BDTR: mmio.Mmio(packed struct(u32) {
    +            ///  Dead-time generator setup
    +            DTG: u8,
    +            ///  Lock configuration
    +            LOCK: u2,
    +            ///  Off-state selection for Idle mode
    +            OSSI: u1,
    +            ///  Off-state selection for Run mode
    +            OSSR: u1,
    +            ///  Break enable
    +            BKE: u1,
    +            ///  Break polarity
    +            BKP: u1,
    +            ///  Automatic output enable
    +            AOE: u1,
    +            ///  Main output enable
    +            MOE: u1,
    +            ///  Break filter
    +            BKF: u4,
    +            ///  Break 2 filter
    +            BK2F: u4,
    +            ///  Break 2 enable
    +            BK2E: u1,
    +            ///  Break 2 polarity
    +            BK2P: u1,
    +            padding: u6,
    +        }),
    +        ///  DMA control register
    +        DCR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA base address
    +            DBA: u5,
    +            reserved8: u3,
    +            ///  DMA burst length
    +            DBL: u5,
    +            padding: u19,
    +        }),
    +        ///  DMA address for full transfer
    +        DMAR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA register for burst accesses
    +            DMAB: u16,
    +            padding: u16,
    +        }),
    +        reserved84: [4]u8,
    +        ///  capture/compare mode register 3 (output mode)
    +        CCMR3_Output: mmio.Mmio(packed struct(u32) {
    +            reserved2: u2,
    +            ///  Output compare 5 fast enable
    +            OC5FE: u1,
    +            ///  Output compare 5 preload enable
    +            OC5PE: u1,
    +            ///  Output compare 5 mode
    +            OC5M: u3,
    +            ///  Output compare 5 clear enable
    +            OC5CE: u1,
    +            reserved10: u2,
    +            ///  Output compare 6 fast enable
    +            OC6FE: u1,
    +            ///  Output compare 6 preload enable
    +            OC6PE: u1,
    +            ///  Output compare 6 mode
    +            OC6M: u3,
    +            ///  Output compare 6 clear enable
    +            OC6CE: u1,
    +            ///  Outout Compare 5 mode bit 3
    +            OC5M_3: u1,
    +            reserved24: u7,
    +            ///  Outout Compare 6 mode bit 3
    +            OC6M_3: u1,
    +            padding: u7,
    +        }),
    +        ///  capture/compare register 5
    +        CCR5: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 5 value
    +            CCR5: u16,
    +            reserved29: u13,
    +            ///  Group Channel 5 and Channel 1
    +            GC5C1: u1,
    +            ///  Group Channel 5 and Channel 2
    +            GC5C2: u1,
    +            ///  Group Channel 5 and Channel 3
    +            GC5C3: u1,
    +        }),
    +        ///  capture/compare register 6
    +        CCR6: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 6 value
    +            CCR6: u16,
    +            padding: u16,
    +        }),
    +        ///  option registers
    +        OR: mmio.Mmio(packed struct(u32) {
    +            ///  TIM1_ETR_ADC1 remapping capability
    +            TIM1_ETR_ADC1_RMP: u2,
    +            ///  TIM1_ETR_ADC4 remapping capability
    +            TIM1_ETR_ADC4_RMP: u2,
    +            padding: u28,
    +        }),
    +    };
    +
    +    ///  Debug support
    +    pub const DBGMCU = extern struct {
    +        ///  MCU Device ID Code Register
    +        IDCODE: mmio.Mmio(packed struct(u32) {
    +            ///  Device Identifier
    +            DEV_ID: u12,
    +            reserved16: u4,
    +            ///  Revision Identifier
    +            REV_ID: u16,
    +        }),
    +        ///  Debug MCU Configuration Register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  Debug Sleep mode
    +            DBG_SLEEP: u1,
    +            ///  Debug Stop Mode
    +            DBG_STOP: u1,
    +            ///  Debug Standby Mode
    +            DBG_STANDBY: u1,
    +            reserved5: u2,
    +            ///  Trace pin assignment control
    +            TRACE_IOEN: u1,
    +            ///  Trace pin assignment control
    +            TRACE_MODE: u2,
    +            padding: u24,
    +        }),
    +        ///  APB Low Freeze Register
    +        APB1FZ: mmio.Mmio(packed struct(u32) {
    +            ///  Debug Timer 2 stopped when Core is halted
    +            DBG_TIM2_STOP: u1,
    +            ///  Debug Timer 3 stopped when Core is halted
    +            DBG_TIM3_STOP: u1,
    +            ///  Debug Timer 4 stopped when Core is halted
    +            DBG_TIM4_STOP: u1,
    +            ///  Debug Timer 5 stopped when Core is halted
    +            DBG_TIM5_STOP: u1,
    +            ///  Debug Timer 6 stopped when Core is halted
    +            DBG_TIM6_STOP: u1,
    +            ///  Debug Timer 7 stopped when Core is halted
    +            DBG_TIM7_STOP: u1,
    +            ///  Debug Timer 12 stopped when Core is halted
    +            DBG_TIM12_STOP: u1,
    +            ///  Debug Timer 13 stopped when Core is halted
    +            DBG_TIM13_STOP: u1,
    +            ///  Debug Timer 14 stopped when Core is halted
    +            DBG_TIMER14_STOP: u1,
    +            ///  Debug Timer 18 stopped when Core is halted
    +            DBG_TIM18_STOP: u1,
    +            ///  Debug RTC stopped when Core is halted
    +            DBG_RTC_STOP: u1,
    +            ///  Debug Window Wachdog stopped when Core is halted
    +            DBG_WWDG_STOP: u1,
    +            ///  Debug Independent Wachdog stopped when Core is halted
    +            DBG_IWDG_STOP: u1,
    +            reserved21: u8,
    +            ///  SMBUS timeout mode stopped when Core is halted
    +            I2C1_SMBUS_TIMEOUT: u1,
    +            ///  SMBUS timeout mode stopped when Core is halted
    +            I2C2_SMBUS_TIMEOUT: u1,
    +            reserved25: u2,
    +            ///  Debug CAN stopped when core is halted
    +            DBG_CAN_STOP: u1,
    +            padding: u6,
    +        }),
    +        ///  APB High Freeze Register
    +        APB2FZ: mmio.Mmio(packed struct(u32) {
    +            reserved2: u2,
    +            ///  Debug Timer 15 stopped when Core is halted
    +            DBG_TIM15_STOP: u1,
    +            ///  Debug Timer 16 stopped when Core is halted
    +            DBG_TIM16_STOP: u1,
    +            ///  Debug Timer 17 stopped when Core is halted
    +            DBG_TIM17_STO: u1,
    +            ///  Debug Timer 19 stopped when Core is halted
    +            DBG_TIM19_STOP: u1,
    +            padding: u26,
    +        }),
    +    };
    +};
    diff --git a/src/chips/STM32F407.json b/src/chips/STM32F407.json
    new file mode 100644
    index 000000000..7f592e5d0
    --- /dev/null
    +++ b/src/chips/STM32F407.json
    @@ -0,0 +1,50953 @@
    +{
    +  "version": "0.1.0",
    +  "types": {
    +    "peripherals": {
    +      "RNG": {
    +        "description": "Random number generator",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "Interrupt enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RNGEN": {
    +                    "description": "Random number generator\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SEIS": {
    +                    "description": "Seed error interrupt\n              status",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CEIS": {
    +                    "description": "Clock error interrupt\n              status",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "SECS": {
    +                    "description": "Seed error current status",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CECS": {
    +                    "description": "Clock error current status",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DRDY": {
    +                    "description": "Data ready",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "data register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RNDATA": {
    +                    "description": "Random data",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "DCMI": {
    +        "description": "Digital camera interface",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "DCMI enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EDM": {
    +                    "description": "Extended data mode",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "FCRC": {
    +                    "description": "Frame capture rate control",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "VSPOL": {
    +                    "description": "Vertical synchronization\n              polarity",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "HSPOL": {
    +                    "description": "Horizontal synchronization\n              polarity",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PCKPOL": {
    +                    "description": "Pixel clock polarity",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ESS": {
    +                    "description": "Embedded synchronization\n              select",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "JPEG": {
    +                    "description": "JPEG format",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CROP": {
    +                    "description": "Crop feature",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CM": {
    +                    "description": "Capture mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CAPTURE": {
    +                    "description": "Capture enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "FNE": {
    +                    "description": "FIFO not empty",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "VSYNC": {
    +                    "description": "VSYNC",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HSYNC": {
    +                    "description": "HSYNC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RIS": {
    +              "description": "raw interrupt status register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "LINE_RIS": {
    +                    "description": "Line raw interrupt status",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "VSYNC_RIS": {
    +                    "description": "VSYNC raw interrupt status",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ERR_RIS": {
    +                    "description": "Synchronization error raw interrupt\n              status",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OVR_RIS": {
    +                    "description": "Overrun raw interrupt\n              status",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FRAME_RIS": {
    +                    "description": "Capture complete raw interrupt\n              status",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IER": {
    +              "description": "interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LINE_IE": {
    +                    "description": "Line interrupt enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "VSYNC_IE": {
    +                    "description": "VSYNC interrupt enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ERR_IE": {
    +                    "description": "Synchronization error interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OVR_IE": {
    +                    "description": "Overrun interrupt enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FRAME_IE": {
    +                    "description": "Capture complete interrupt\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MIS": {
    +              "description": "masked interrupt status\n          register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "LINE_MIS": {
    +                    "description": "Line masked interrupt\n              status",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "VSYNC_MIS": {
    +                    "description": "VSYNC masked interrupt\n              status",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ERR_MIS": {
    +                    "description": "Synchronization error masked interrupt\n              status",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OVR_MIS": {
    +                    "description": "Overrun masked interrupt\n              status",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FRAME_MIS": {
    +                    "description": "Capture complete masked interrupt\n              status",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ICR": {
    +              "description": "interrupt clear register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "LINE_ISC": {
    +                    "description": "line interrupt status\n              clear",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "VSYNC_ISC": {
    +                    "description": "Vertical synch interrupt status\n              clear",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ERR_ISC": {
    +                    "description": "Synchronization error interrupt status\n              clear",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OVR_ISC": {
    +                    "description": "Overrun interrupt status\n              clear",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FRAME_ISC": {
    +                    "description": "Capture complete interrupt status\n              clear",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ESCR": {
    +              "description": "embedded synchronization code\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEC": {
    +                    "description": "Frame end delimiter code",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "LEC": {
    +                    "description": "Line end delimiter code",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "LSC": {
    +                    "description": "Line start delimiter code",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "FSC": {
    +                    "description": "Frame start delimiter code",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "ESUR": {
    +              "description": "embedded synchronization unmask\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEU": {
    +                    "description": "Frame end delimiter unmask",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "LEU": {
    +                    "description": "Line end delimiter unmask",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "LSU": {
    +                    "description": "Line start delimiter\n              unmask",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "FSU": {
    +                    "description": "Frame start delimiter\n              unmask",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CWSTRT": {
    +              "description": "crop window start",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VST": {
    +                    "description": "Vertical start line count",
    +                    "offset": 16,
    +                    "size": 13
    +                  },
    +                  "HOFFCNT": {
    +                    "description": "Horizontal offset count",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "CWSIZE": {
    +              "description": "crop window size",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VLINE": {
    +                    "description": "Vertical line count",
    +                    "offset": 16,
    +                    "size": 14
    +                  },
    +                  "CAPCNT": {
    +                    "description": "Capture count",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "data register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "Byte3": {
    +                    "description": "Data byte 3",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "Byte2": {
    +                    "description": "Data byte 2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "Byte1": {
    +                    "description": "Data byte 1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "Byte0": {
    +                    "description": "Data byte 0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "FSMC": {
    +        "description": "Flexible static memory controller",
    +        "children": {
    +          "registers": {
    +            "BCR1": {
    +              "description": "SRAM/NOR-Flash chip-select control register\n          1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 12496,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CBURSTRW": {
    +                    "description": "CBURSTRW",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "ASYNCWAIT": {
    +                    "description": "ASYNCWAIT",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EXTMOD": {
    +                    "description": "EXTMOD",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "WAITEN": {
    +                    "description": "WAITEN",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "WREN": {
    +                    "description": "WREN",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WAITCFG": {
    +                    "description": "WAITCFG",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "WAITPOL": {
    +                    "description": "WAITPOL",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BURSTEN": {
    +                    "description": "BURSTEN",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FACCEN": {
    +                    "description": "FACCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MWID": {
    +                    "description": "MWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "MTYP": {
    +                    "description": "MTYP",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MUXEN": {
    +                    "description": "MUXEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MBKEN": {
    +                    "description": "MBKEN",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BTR1": {
    +              "description": "SRAM/NOR-Flash chip-select timing register\n          1",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "BUSTURN": {
    +                    "description": "BUSTURN",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "BCR2": {
    +              "description": "SRAM/NOR-Flash chip-select control register\n          2",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 12496,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CBURSTRW": {
    +                    "description": "CBURSTRW",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "ASYNCWAIT": {
    +                    "description": "ASYNCWAIT",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EXTMOD": {
    +                    "description": "EXTMOD",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "WAITEN": {
    +                    "description": "WAITEN",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "WREN": {
    +                    "description": "WREN",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WAITCFG": {
    +                    "description": "WAITCFG",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "WRAPMOD": {
    +                    "description": "WRAPMOD",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "WAITPOL": {
    +                    "description": "WAITPOL",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BURSTEN": {
    +                    "description": "BURSTEN",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FACCEN": {
    +                    "description": "FACCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MWID": {
    +                    "description": "MWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "MTYP": {
    +                    "description": "MTYP",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MUXEN": {
    +                    "description": "MUXEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MBKEN": {
    +                    "description": "MBKEN",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BTR2": {
    +              "description": "SRAM/NOR-Flash chip-select timing register\n          2",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "BUSTURN": {
    +                    "description": "BUSTURN",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "BCR3": {
    +              "description": "SRAM/NOR-Flash chip-select control register\n          3",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 12496,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CBURSTRW": {
    +                    "description": "CBURSTRW",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "ASYNCWAIT": {
    +                    "description": "ASYNCWAIT",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EXTMOD": {
    +                    "description": "EXTMOD",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "WAITEN": {
    +                    "description": "WAITEN",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "WREN": {
    +                    "description": "WREN",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WAITCFG": {
    +                    "description": "WAITCFG",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "WRAPMOD": {
    +                    "description": "WRAPMOD",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "WAITPOL": {
    +                    "description": "WAITPOL",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BURSTEN": {
    +                    "description": "BURSTEN",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FACCEN": {
    +                    "description": "FACCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MWID": {
    +                    "description": "MWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "MTYP": {
    +                    "description": "MTYP",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MUXEN": {
    +                    "description": "MUXEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MBKEN": {
    +                    "description": "MBKEN",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BTR3": {
    +              "description": "SRAM/NOR-Flash chip-select timing register\n          3",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "BUSTURN": {
    +                    "description": "BUSTURN",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "BCR4": {
    +              "description": "SRAM/NOR-Flash chip-select control register\n          4",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 12496,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CBURSTRW": {
    +                    "description": "CBURSTRW",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "ASYNCWAIT": {
    +                    "description": "ASYNCWAIT",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EXTMOD": {
    +                    "description": "EXTMOD",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "WAITEN": {
    +                    "description": "WAITEN",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "WREN": {
    +                    "description": "WREN",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WAITCFG": {
    +                    "description": "WAITCFG",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "WRAPMOD": {
    +                    "description": "WRAPMOD",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "WAITPOL": {
    +                    "description": "WAITPOL",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BURSTEN": {
    +                    "description": "BURSTEN",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FACCEN": {
    +                    "description": "FACCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MWID": {
    +                    "description": "MWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "MTYP": {
    +                    "description": "MTYP",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MUXEN": {
    +                    "description": "MUXEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MBKEN": {
    +                    "description": "MBKEN",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BTR4": {
    +              "description": "SRAM/NOR-Flash chip-select timing register\n          4",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "BUSTURN": {
    +                    "description": "BUSTURN",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "PCR2": {
    +              "description": "PC Card/NAND Flash control register\n          2",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 24,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ECCPS": {
    +                    "description": "ECCPS",
    +                    "offset": 17,
    +                    "size": 3
    +                  },
    +                  "TAR": {
    +                    "description": "TAR",
    +                    "offset": 13,
    +                    "size": 4
    +                  },
    +                  "TCLR": {
    +                    "description": "TCLR",
    +                    "offset": 9,
    +                    "size": 4
    +                  },
    +                  "ECCEN": {
    +                    "description": "ECCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PWID": {
    +                    "description": "PWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "PTYP": {
    +                    "description": "PTYP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PBKEN": {
    +                    "description": "PBKEN",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PWAITEN": {
    +                    "description": "PWAITEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR2": {
    +              "description": "FIFO status and interrupt register\n          2",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 64,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEMPT": {
    +                    "description": "FEMPT",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IFEN": {
    +                    "description": "IFEN",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ILEN": {
    +                    "description": "ILEN",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IREN": {
    +                    "description": "IREN",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IFS": {
    +                    "description": "IFS",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ILS": {
    +                    "description": "ILS",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IRS": {
    +                    "description": "IRS",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PMEM2": {
    +              "description": "Common memory space timing register\n          2",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MEMHIZx": {
    +                    "description": "MEMHIZx",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "MEMHOLDx": {
    +                    "description": "MEMHOLDx",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "MEMWAITx": {
    +                    "description": "MEMWAITx",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "MEMSETx": {
    +                    "description": "MEMSETx",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "PATT2": {
    +              "description": "Attribute memory space timing register\n          2",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ATTHIZx": {
    +                    "description": "ATTHIZx",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "ATTHOLDx": {
    +                    "description": "ATTHOLDx",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "ATTWAITx": {
    +                    "description": "ATTWAITx",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ATTSETx": {
    +                    "description": "ATTSETx",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "ECCR2": {
    +              "description": "ECC result register 2",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ECCx": {
    +                    "description": "ECCx",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PCR3": {
    +              "description": "PC Card/NAND Flash control register\n          3",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 24,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ECCPS": {
    +                    "description": "ECCPS",
    +                    "offset": 17,
    +                    "size": 3
    +                  },
    +                  "TAR": {
    +                    "description": "TAR",
    +                    "offset": 13,
    +                    "size": 4
    +                  },
    +                  "TCLR": {
    +                    "description": "TCLR",
    +                    "offset": 9,
    +                    "size": 4
    +                  },
    +                  "ECCEN": {
    +                    "description": "ECCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PWID": {
    +                    "description": "PWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "PTYP": {
    +                    "description": "PTYP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PBKEN": {
    +                    "description": "PBKEN",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PWAITEN": {
    +                    "description": "PWAITEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR3": {
    +              "description": "FIFO status and interrupt register\n          3",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 64,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEMPT": {
    +                    "description": "FEMPT",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IFEN": {
    +                    "description": "IFEN",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ILEN": {
    +                    "description": "ILEN",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IREN": {
    +                    "description": "IREN",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IFS": {
    +                    "description": "IFS",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ILS": {
    +                    "description": "ILS",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IRS": {
    +                    "description": "IRS",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PMEM3": {
    +              "description": "Common memory space timing register\n          3",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MEMHIZx": {
    +                    "description": "MEMHIZx",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "MEMHOLDx": {
    +                    "description": "MEMHOLDx",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "MEMWAITx": {
    +                    "description": "MEMWAITx",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "MEMSETx": {
    +                    "description": "MEMSETx",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "PATT3": {
    +              "description": "Attribute memory space timing register\n          3",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ATTHIZx": {
    +                    "description": "ATTHIZx",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "ATTHOLDx": {
    +                    "description": "ATTHOLDx",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "ATTWAITx": {
    +                    "description": "ATTWAITx",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ATTSETx": {
    +                    "description": "ATTSETx",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "ECCR3": {
    +              "description": "ECC result register 3",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ECCx": {
    +                    "description": "ECCx",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PCR4": {
    +              "description": "PC Card/NAND Flash control register\n          4",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 24,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ECCPS": {
    +                    "description": "ECCPS",
    +                    "offset": 17,
    +                    "size": 3
    +                  },
    +                  "TAR": {
    +                    "description": "TAR",
    +                    "offset": 13,
    +                    "size": 4
    +                  },
    +                  "TCLR": {
    +                    "description": "TCLR",
    +                    "offset": 9,
    +                    "size": 4
    +                  },
    +                  "ECCEN": {
    +                    "description": "ECCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PWID": {
    +                    "description": "PWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "PTYP": {
    +                    "description": "PTYP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PBKEN": {
    +                    "description": "PBKEN",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PWAITEN": {
    +                    "description": "PWAITEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR4": {
    +              "description": "FIFO status and interrupt register\n          4",
    +              "offset": 164,
    +              "size": 32,
    +              "reset_value": 64,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEMPT": {
    +                    "description": "FEMPT",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IFEN": {
    +                    "description": "IFEN",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ILEN": {
    +                    "description": "ILEN",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IREN": {
    +                    "description": "IREN",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IFS": {
    +                    "description": "IFS",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ILS": {
    +                    "description": "ILS",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IRS": {
    +                    "description": "IRS",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PMEM4": {
    +              "description": "Common memory space timing register\n          4",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MEMHIZx": {
    +                    "description": "MEMHIZx",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "MEMHOLDx": {
    +                    "description": "MEMHOLDx",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "MEMWAITx": {
    +                    "description": "MEMWAITx",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "MEMSETx": {
    +                    "description": "MEMSETx",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "PATT4": {
    +              "description": "Attribute memory space timing register\n          4",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ATTHIZx": {
    +                    "description": "ATTHIZx",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "ATTHOLDx": {
    +                    "description": "ATTHOLDx",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "ATTWAITx": {
    +                    "description": "ATTWAITx",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ATTSETx": {
    +                    "description": "ATTSETx",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "PIO4": {
    +              "description": "I/O space timing register 4",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IOHIZx": {
    +                    "description": "IOHIZx",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "IOHOLDx": {
    +                    "description": "IOHOLDx",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IOWAITx": {
    +                    "description": "IOWAITx",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IOSETx": {
    +                    "description": "IOSETx",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "BWTR1": {
    +              "description": "SRAM/NOR-Flash write timing registers\n          1",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 268435455,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "BWTR2": {
    +              "description": "SRAM/NOR-Flash write timing registers\n          2",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 268435455,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "BWTR3": {
    +              "description": "SRAM/NOR-Flash write timing registers\n          3",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 268435455,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "BWTR4": {
    +              "description": "SRAM/NOR-Flash write timing registers\n          4",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 268435455,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "DBG": {
    +        "description": "Debug support",
    +        "children": {
    +          "registers": {
    +            "DBGMCU_IDCODE": {
    +              "description": "IDCODE",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 268461073,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DEV_ID": {
    +                    "description": "DEV_ID",
    +                    "offset": 0,
    +                    "size": 12
    +                  },
    +                  "REV_ID": {
    +                    "description": "REV_ID",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DBGMCU_CR": {
    +              "description": "Control Register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBG_SLEEP": {
    +                    "description": "DBG_SLEEP",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DBG_STOP": {
    +                    "description": "DBG_STOP",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DBG_STANDBY": {
    +                    "description": "DBG_STANDBY",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TRACE_IOEN": {
    +                    "description": "TRACE_IOEN",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TRACE_MODE": {
    +                    "description": "TRACE_MODE",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "DBG_I2C2_SMBUS_TIMEOUT": {
    +                    "description": "DBG_I2C2_SMBUS_TIMEOUT",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM8_STOP": {
    +                    "description": "DBG_TIM8_STOP",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM5_STOP": {
    +                    "description": "DBG_TIM5_STOP",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM6_STOP": {
    +                    "description": "DBG_TIM6_STOP",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM7_STOP": {
    +                    "description": "DBG_TIM7_STOP",
    +                    "offset": 20,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DBGMCU_APB1_FZ": {
    +              "description": "Debug MCU APB1 Freeze registe",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBG_TIM2_STOP": {
    +                    "description": "DBG_TIM2_STOP",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM3_STOP": {
    +                    "description": "DBG_TIM3 _STOP",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM4_STOP": {
    +                    "description": "DBG_TIM4_STOP",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM5_STOP": {
    +                    "description": "DBG_TIM5_STOP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM6_STOP": {
    +                    "description": "DBG_TIM6_STOP",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM7_STOP": {
    +                    "description": "DBG_TIM7_STOP",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM12_STOP": {
    +                    "description": "DBG_TIM12_STOP",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM13_STOP": {
    +                    "description": "DBG_TIM13_STOP",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM14_STOP": {
    +                    "description": "DBG_TIM14_STOP",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DBG_WWDG_STOP": {
    +                    "description": "DBG_WWDG_STOP",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "DBG_IWDEG_STOP": {
    +                    "description": "DBG_IWDEG_STOP",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "DBG_J2C1_SMBUS_TIMEOUT": {
    +                    "description": "DBG_J2C1_SMBUS_TIMEOUT",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "DBG_J2C2_SMBUS_TIMEOUT": {
    +                    "description": "DBG_J2C2_SMBUS_TIMEOUT",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "DBG_J2C3SMBUS_TIMEOUT": {
    +                    "description": "DBG_J2C3SMBUS_TIMEOUT",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "DBG_CAN1_STOP": {
    +                    "description": "DBG_CAN1_STOP",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "DBG_CAN2_STOP": {
    +                    "description": "DBG_CAN2_STOP",
    +                    "offset": 26,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DBGMCU_APB2_FZ": {
    +              "description": "Debug MCU APB2 Freeze registe",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBG_TIM1_STOP": {
    +                    "description": "TIM1 counter stopped when core is\n              halted",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM8_STOP": {
    +                    "description": "TIM8 counter stopped when core is\n              halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM9_STOP": {
    +                    "description": "TIM9 counter stopped when core is\n              halted",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM10_STOP": {
    +                    "description": "TIM10 counter stopped when core is\n              halted",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM11_STOP": {
    +                    "description": "TIM11 counter stopped when core is\n              halted",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "DMA2": {
    +        "description": "DMA controller",
    +        "children": {
    +          "registers": {
    +            "LISR": {
    +              "description": "low interrupt status register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TCIF3": {
    +                    "description": "Stream x transfer complete interrupt\n              flag (x = 3..0)",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "HTIF3": {
    +                    "description": "Stream x half transfer interrupt flag\n              (x=3..0)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "TEIF3": {
    +                    "description": "Stream x transfer error interrupt flag\n              (x=3..0)",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "DMEIF3": {
    +                    "description": "Stream x direct mode error interrupt\n              flag (x=3..0)",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FEIF3": {
    +                    "description": "Stream x FIFO error interrupt flag\n              (x=3..0)",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "TCIF2": {
    +                    "description": "Stream x transfer complete interrupt\n              flag (x = 3..0)",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "HTIF2": {
    +                    "description": "Stream x half transfer interrupt flag\n              (x=3..0)",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "TEIF2": {
    +                    "description": "Stream x transfer error interrupt flag\n              (x=3..0)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DMEIF2": {
    +                    "description": "Stream x direct mode error interrupt\n              flag (x=3..0)",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FEIF2": {
    +                    "description": "Stream x FIFO error interrupt flag\n              (x=3..0)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TCIF1": {
    +                    "description": "Stream x transfer complete interrupt\n              flag (x = 3..0)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "HTIF1": {
    +                    "description": "Stream x half transfer interrupt flag\n              (x=3..0)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TEIF1": {
    +                    "description": "Stream x transfer error interrupt flag\n              (x=3..0)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DMEIF1": {
    +                    "description": "Stream x direct mode error interrupt\n              flag (x=3..0)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FEIF1": {
    +                    "description": "Stream x FIFO error interrupt flag\n              (x=3..0)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TCIF0": {
    +                    "description": "Stream x transfer complete interrupt\n              flag (x = 3..0)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "HTIF0": {
    +                    "description": "Stream x half transfer interrupt flag\n              (x=3..0)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TEIF0": {
    +                    "description": "Stream x transfer error interrupt flag\n              (x=3..0)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DMEIF0": {
    +                    "description": "Stream x direct mode error interrupt\n              flag (x=3..0)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FEIF0": {
    +                    "description": "Stream x FIFO error interrupt flag\n              (x=3..0)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HISR": {
    +              "description": "high interrupt status register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TCIF7": {
    +                    "description": "Stream x transfer complete interrupt\n              flag (x=7..4)",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "HTIF7": {
    +                    "description": "Stream x half transfer interrupt flag\n              (x=7..4)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "TEIF7": {
    +                    "description": "Stream x transfer error interrupt flag\n              (x=7..4)",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "DMEIF7": {
    +                    "description": "Stream x direct mode error interrupt\n              flag (x=7..4)",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FEIF7": {
    +                    "description": "Stream x FIFO error interrupt flag\n              (x=7..4)",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "TCIF6": {
    +                    "description": "Stream x transfer complete interrupt\n              flag (x=7..4)",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "HTIF6": {
    +                    "description": "Stream x half transfer interrupt flag\n              (x=7..4)",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "TEIF6": {
    +                    "description": "Stream x transfer error interrupt flag\n              (x=7..4)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DMEIF6": {
    +                    "description": "Stream x direct mode error interrupt\n              flag (x=7..4)",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FEIF6": {
    +                    "description": "Stream x FIFO error interrupt flag\n              (x=7..4)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TCIF5": {
    +                    "description": "Stream x transfer complete interrupt\n              flag (x=7..4)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "HTIF5": {
    +                    "description": "Stream x half transfer interrupt flag\n              (x=7..4)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TEIF5": {
    +                    "description": "Stream x transfer error interrupt flag\n              (x=7..4)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DMEIF5": {
    +                    "description": "Stream x direct mode error interrupt\n              flag (x=7..4)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FEIF5": {
    +                    "description": "Stream x FIFO error interrupt flag\n              (x=7..4)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TCIF4": {
    +                    "description": "Stream x transfer complete interrupt\n              flag (x=7..4)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "HTIF4": {
    +                    "description": "Stream x half transfer interrupt flag\n              (x=7..4)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TEIF4": {
    +                    "description": "Stream x transfer error interrupt flag\n              (x=7..4)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DMEIF4": {
    +                    "description": "Stream x direct mode error interrupt\n              flag (x=7..4)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FEIF4": {
    +                    "description": "Stream x FIFO error interrupt flag\n              (x=7..4)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "LIFCR": {
    +              "description": "low interrupt flag clear\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTCIF3": {
    +                    "description": "Stream x clear transfer complete\n              interrupt flag (x = 3..0)",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "CHTIF3": {
    +                    "description": "Stream x clear half transfer interrupt\n              flag (x = 3..0)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "CTEIF3": {
    +                    "description": "Stream x clear transfer error interrupt\n              flag (x = 3..0)",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "CDMEIF3": {
    +                    "description": "Stream x clear direct mode error\n              interrupt flag (x = 3..0)",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "CFEIF3": {
    +                    "description": "Stream x clear FIFO error interrupt flag\n              (x = 3..0)",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "CTCIF2": {
    +                    "description": "Stream x clear transfer complete\n              interrupt flag (x = 3..0)",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "CHTIF2": {
    +                    "description": "Stream x clear half transfer interrupt\n              flag (x = 3..0)",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CTEIF2": {
    +                    "description": "Stream x clear transfer error interrupt\n              flag (x = 3..0)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "CDMEIF2": {
    +                    "description": "Stream x clear direct mode error\n              interrupt flag (x = 3..0)",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "CFEIF2": {
    +                    "description": "Stream x clear FIFO error interrupt flag\n              (x = 3..0)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "CTCIF1": {
    +                    "description": "Stream x clear transfer complete\n              interrupt flag (x = 3..0)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CHTIF1": {
    +                    "description": "Stream x clear half transfer interrupt\n              flag (x = 3..0)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CTEIF1": {
    +                    "description": "Stream x clear transfer error interrupt\n              flag (x = 3..0)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CDMEIF1": {
    +                    "description": "Stream x clear direct mode error\n              interrupt flag (x = 3..0)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CFEIF1": {
    +                    "description": "Stream x clear FIFO error interrupt flag\n              (x = 3..0)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CTCIF0": {
    +                    "description": "Stream x clear transfer complete\n              interrupt flag (x = 3..0)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CHTIF0": {
    +                    "description": "Stream x clear half transfer interrupt\n              flag (x = 3..0)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CTEIF0": {
    +                    "description": "Stream x clear transfer error interrupt\n              flag (x = 3..0)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CDMEIF0": {
    +                    "description": "Stream x clear direct mode error\n              interrupt flag (x = 3..0)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CFEIF0": {
    +                    "description": "Stream x clear FIFO error interrupt flag\n              (x = 3..0)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HIFCR": {
    +              "description": "high interrupt flag clear\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTCIF7": {
    +                    "description": "Stream x clear transfer complete\n              interrupt flag (x = 7..4)",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "CHTIF7": {
    +                    "description": "Stream x clear half transfer interrupt\n              flag (x = 7..4)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "CTEIF7": {
    +                    "description": "Stream x clear transfer error interrupt\n              flag (x = 7..4)",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "CDMEIF7": {
    +                    "description": "Stream x clear direct mode error\n              interrupt flag (x = 7..4)",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "CFEIF7": {
    +                    "description": "Stream x clear FIFO error interrupt flag\n              (x = 7..4)",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "CTCIF6": {
    +                    "description": "Stream x clear transfer complete\n              interrupt flag (x = 7..4)",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "CHTIF6": {
    +                    "description": "Stream x clear half transfer interrupt\n              flag (x = 7..4)",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CTEIF6": {
    +                    "description": "Stream x clear transfer error interrupt\n              flag (x = 7..4)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "CDMEIF6": {
    +                    "description": "Stream x clear direct mode error\n              interrupt flag (x = 7..4)",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "CFEIF6": {
    +                    "description": "Stream x clear FIFO error interrupt flag\n              (x = 7..4)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "CTCIF5": {
    +                    "description": "Stream x clear transfer complete\n              interrupt flag (x = 7..4)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CHTIF5": {
    +                    "description": "Stream x clear half transfer interrupt\n              flag (x = 7..4)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CTEIF5": {
    +                    "description": "Stream x clear transfer error interrupt\n              flag (x = 7..4)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CDMEIF5": {
    +                    "description": "Stream x clear direct mode error\n              interrupt flag (x = 7..4)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CFEIF5": {
    +                    "description": "Stream x clear FIFO error interrupt flag\n              (x = 7..4)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CTCIF4": {
    +                    "description": "Stream x clear transfer complete\n              interrupt flag (x = 7..4)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CHTIF4": {
    +                    "description": "Stream x clear half transfer interrupt\n              flag (x = 7..4)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CTEIF4": {
    +                    "description": "Stream x clear transfer error interrupt\n              flag (x = 7..4)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CDMEIF4": {
    +                    "description": "Stream x clear direct mode error\n              interrupt flag (x = 7..4)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CFEIF4": {
    +                    "description": "Stream x clear FIFO error interrupt flag\n              (x = 7..4)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "S0CR": {
    +              "description": "stream x configuration\n          register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHSEL": {
    +                    "description": "Channel selection",
    +                    "offset": 25,
    +                    "size": 3
    +                  },
    +                  "MBURST": {
    +                    "description": "Memory burst transfer\n              configuration",
    +                    "offset": 23,
    +                    "size": 2
    +                  },
    +                  "PBURST": {
    +                    "description": "Peripheral burst transfer\n              configuration",
    +                    "offset": 21,
    +                    "size": 2
    +                  },
    +                  "CT": {
    +                    "description": "Current target (only in double buffer\n              mode)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DBM": {
    +                    "description": "Double buffer mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "PL": {
    +                    "description": "Priority level",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "PINCOS": {
    +                    "description": "Peripheral increment offset\n              size",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory data size",
    +                    "offset": 13,
    +                    "size": 2
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral data size",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "PFCTRL": {
    +                    "description": "Peripheral flow controller",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half transfer interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DMEIE": {
    +                    "description": "Direct mode error interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "Stream enable / flag stream ready when\n              read low",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "S0NDTR": {
    +              "description": "stream x number of data\n          register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data items to\n              transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "S0PAR": {
    +              "description": "stream x peripheral address\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S0M0AR": {
    +              "description": "stream x memory 0 address\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M0A": {
    +                    "description": "Memory 0 address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S0M1AR": {
    +              "description": "stream x memory 1 address\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M1A": {
    +                    "description": "Memory 1 address (used in case of Double\n              buffer mode)",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S0FCR": {
    +              "description": "stream x FIFO control register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 33,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEIE": {
    +                    "description": "FIFO error interrupt\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FS": {
    +                    "description": "FIFO status",
    +                    "offset": 3,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "DMDIS": {
    +                    "description": "Direct mode disable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FTH": {
    +                    "description": "FIFO threshold selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "S1CR": {
    +              "description": "stream x configuration\n          register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHSEL": {
    +                    "description": "Channel selection",
    +                    "offset": 25,
    +                    "size": 3
    +                  },
    +                  "MBURST": {
    +                    "description": "Memory burst transfer\n              configuration",
    +                    "offset": 23,
    +                    "size": 2
    +                  },
    +                  "PBURST": {
    +                    "description": "Peripheral burst transfer\n              configuration",
    +                    "offset": 21,
    +                    "size": 2
    +                  },
    +                  "ACK": {
    +                    "description": "ACK",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CT": {
    +                    "description": "Current target (only in double buffer\n              mode)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DBM": {
    +                    "description": "Double buffer mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "PL": {
    +                    "description": "Priority level",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "PINCOS": {
    +                    "description": "Peripheral increment offset\n              size",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory data size",
    +                    "offset": 13,
    +                    "size": 2
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral data size",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "PFCTRL": {
    +                    "description": "Peripheral flow controller",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half transfer interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DMEIE": {
    +                    "description": "Direct mode error interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "Stream enable / flag stream ready when\n              read low",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "S1NDTR": {
    +              "description": "stream x number of data\n          register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data items to\n              transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "S1PAR": {
    +              "description": "stream x peripheral address\n          register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S1M0AR": {
    +              "description": "stream x memory 0 address\n          register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M0A": {
    +                    "description": "Memory 0 address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S1M1AR": {
    +              "description": "stream x memory 1 address\n          register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M1A": {
    +                    "description": "Memory 1 address (used in case of Double\n              buffer mode)",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S1FCR": {
    +              "description": "stream x FIFO control register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 33,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEIE": {
    +                    "description": "FIFO error interrupt\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FS": {
    +                    "description": "FIFO status",
    +                    "offset": 3,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "DMDIS": {
    +                    "description": "Direct mode disable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FTH": {
    +                    "description": "FIFO threshold selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "S2CR": {
    +              "description": "stream x configuration\n          register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHSEL": {
    +                    "description": "Channel selection",
    +                    "offset": 25,
    +                    "size": 3
    +                  },
    +                  "MBURST": {
    +                    "description": "Memory burst transfer\n              configuration",
    +                    "offset": 23,
    +                    "size": 2
    +                  },
    +                  "PBURST": {
    +                    "description": "Peripheral burst transfer\n              configuration",
    +                    "offset": 21,
    +                    "size": 2
    +                  },
    +                  "ACK": {
    +                    "description": "ACK",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CT": {
    +                    "description": "Current target (only in double buffer\n              mode)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DBM": {
    +                    "description": "Double buffer mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "PL": {
    +                    "description": "Priority level",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "PINCOS": {
    +                    "description": "Peripheral increment offset\n              size",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory data size",
    +                    "offset": 13,
    +                    "size": 2
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral data size",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "PFCTRL": {
    +                    "description": "Peripheral flow controller",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half transfer interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DMEIE": {
    +                    "description": "Direct mode error interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "Stream enable / flag stream ready when\n              read low",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "S2NDTR": {
    +              "description": "stream x number of data\n          register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data items to\n              transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "S2PAR": {
    +              "description": "stream x peripheral address\n          register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S2M0AR": {
    +              "description": "stream x memory 0 address\n          register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M0A": {
    +                    "description": "Memory 0 address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S2M1AR": {
    +              "description": "stream x memory 1 address\n          register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M1A": {
    +                    "description": "Memory 1 address (used in case of Double\n              buffer mode)",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S2FCR": {
    +              "description": "stream x FIFO control register",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 33,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEIE": {
    +                    "description": "FIFO error interrupt\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FS": {
    +                    "description": "FIFO status",
    +                    "offset": 3,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "DMDIS": {
    +                    "description": "Direct mode disable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FTH": {
    +                    "description": "FIFO threshold selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "S3CR": {
    +              "description": "stream x configuration\n          register",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHSEL": {
    +                    "description": "Channel selection",
    +                    "offset": 25,
    +                    "size": 3
    +                  },
    +                  "MBURST": {
    +                    "description": "Memory burst transfer\n              configuration",
    +                    "offset": 23,
    +                    "size": 2
    +                  },
    +                  "PBURST": {
    +                    "description": "Peripheral burst transfer\n              configuration",
    +                    "offset": 21,
    +                    "size": 2
    +                  },
    +                  "ACK": {
    +                    "description": "ACK",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CT": {
    +                    "description": "Current target (only in double buffer\n              mode)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DBM": {
    +                    "description": "Double buffer mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "PL": {
    +                    "description": "Priority level",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "PINCOS": {
    +                    "description": "Peripheral increment offset\n              size",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory data size",
    +                    "offset": 13,
    +                    "size": 2
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral data size",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "PFCTRL": {
    +                    "description": "Peripheral flow controller",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half transfer interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DMEIE": {
    +                    "description": "Direct mode error interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "Stream enable / flag stream ready when\n              read low",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "S3NDTR": {
    +              "description": "stream x number of data\n          register",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data items to\n              transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "S3PAR": {
    +              "description": "stream x peripheral address\n          register",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S3M0AR": {
    +              "description": "stream x memory 0 address\n          register",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M0A": {
    +                    "description": "Memory 0 address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S3M1AR": {
    +              "description": "stream x memory 1 address\n          register",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M1A": {
    +                    "description": "Memory 1 address (used in case of Double\n              buffer mode)",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S3FCR": {
    +              "description": "stream x FIFO control register",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 33,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEIE": {
    +                    "description": "FIFO error interrupt\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FS": {
    +                    "description": "FIFO status",
    +                    "offset": 3,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "DMDIS": {
    +                    "description": "Direct mode disable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FTH": {
    +                    "description": "FIFO threshold selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "S4CR": {
    +              "description": "stream x configuration\n          register",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHSEL": {
    +                    "description": "Channel selection",
    +                    "offset": 25,
    +                    "size": 3
    +                  },
    +                  "MBURST": {
    +                    "description": "Memory burst transfer\n              configuration",
    +                    "offset": 23,
    +                    "size": 2
    +                  },
    +                  "PBURST": {
    +                    "description": "Peripheral burst transfer\n              configuration",
    +                    "offset": 21,
    +                    "size": 2
    +                  },
    +                  "ACK": {
    +                    "description": "ACK",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CT": {
    +                    "description": "Current target (only in double buffer\n              mode)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DBM": {
    +                    "description": "Double buffer mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "PL": {
    +                    "description": "Priority level",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "PINCOS": {
    +                    "description": "Peripheral increment offset\n              size",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory data size",
    +                    "offset": 13,
    +                    "size": 2
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral data size",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "PFCTRL": {
    +                    "description": "Peripheral flow controller",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half transfer interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DMEIE": {
    +                    "description": "Direct mode error interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "Stream enable / flag stream ready when\n              read low",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "S4NDTR": {
    +              "description": "stream x number of data\n          register",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data items to\n              transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "S4PAR": {
    +              "description": "stream x peripheral address\n          register",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S4M0AR": {
    +              "description": "stream x memory 0 address\n          register",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M0A": {
    +                    "description": "Memory 0 address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S4M1AR": {
    +              "description": "stream x memory 1 address\n          register",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M1A": {
    +                    "description": "Memory 1 address (used in case of Double\n              buffer mode)",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S4FCR": {
    +              "description": "stream x FIFO control register",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 33,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEIE": {
    +                    "description": "FIFO error interrupt\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FS": {
    +                    "description": "FIFO status",
    +                    "offset": 3,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "DMDIS": {
    +                    "description": "Direct mode disable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FTH": {
    +                    "description": "FIFO threshold selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "S5CR": {
    +              "description": "stream x configuration\n          register",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHSEL": {
    +                    "description": "Channel selection",
    +                    "offset": 25,
    +                    "size": 3
    +                  },
    +                  "MBURST": {
    +                    "description": "Memory burst transfer\n              configuration",
    +                    "offset": 23,
    +                    "size": 2
    +                  },
    +                  "PBURST": {
    +                    "description": "Peripheral burst transfer\n              configuration",
    +                    "offset": 21,
    +                    "size": 2
    +                  },
    +                  "ACK": {
    +                    "description": "ACK",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CT": {
    +                    "description": "Current target (only in double buffer\n              mode)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DBM": {
    +                    "description": "Double buffer mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "PL": {
    +                    "description": "Priority level",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "PINCOS": {
    +                    "description": "Peripheral increment offset\n              size",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory data size",
    +                    "offset": 13,
    +                    "size": 2
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral data size",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "PFCTRL": {
    +                    "description": "Peripheral flow controller",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half transfer interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DMEIE": {
    +                    "description": "Direct mode error interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "Stream enable / flag stream ready when\n              read low",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "S5NDTR": {
    +              "description": "stream x number of data\n          register",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data items to\n              transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "S5PAR": {
    +              "description": "stream x peripheral address\n          register",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S5M0AR": {
    +              "description": "stream x memory 0 address\n          register",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M0A": {
    +                    "description": "Memory 0 address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S5M1AR": {
    +              "description": "stream x memory 1 address\n          register",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M1A": {
    +                    "description": "Memory 1 address (used in case of Double\n              buffer mode)",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S5FCR": {
    +              "description": "stream x FIFO control register",
    +              "offset": 156,
    +              "size": 32,
    +              "reset_value": 33,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEIE": {
    +                    "description": "FIFO error interrupt\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FS": {
    +                    "description": "FIFO status",
    +                    "offset": 3,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "DMDIS": {
    +                    "description": "Direct mode disable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FTH": {
    +                    "description": "FIFO threshold selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "S6CR": {
    +              "description": "stream x configuration\n          register",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHSEL": {
    +                    "description": "Channel selection",
    +                    "offset": 25,
    +                    "size": 3
    +                  },
    +                  "MBURST": {
    +                    "description": "Memory burst transfer\n              configuration",
    +                    "offset": 23,
    +                    "size": 2
    +                  },
    +                  "PBURST": {
    +                    "description": "Peripheral burst transfer\n              configuration",
    +                    "offset": 21,
    +                    "size": 2
    +                  },
    +                  "ACK": {
    +                    "description": "ACK",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CT": {
    +                    "description": "Current target (only in double buffer\n              mode)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DBM": {
    +                    "description": "Double buffer mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "PL": {
    +                    "description": "Priority level",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "PINCOS": {
    +                    "description": "Peripheral increment offset\n              size",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory data size",
    +                    "offset": 13,
    +                    "size": 2
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral data size",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "PFCTRL": {
    +                    "description": "Peripheral flow controller",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half transfer interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DMEIE": {
    +                    "description": "Direct mode error interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "Stream enable / flag stream ready when\n              read low",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "S6NDTR": {
    +              "description": "stream x number of data\n          register",
    +              "offset": 164,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data items to\n              transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "S6PAR": {
    +              "description": "stream x peripheral address\n          register",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S6M0AR": {
    +              "description": "stream x memory 0 address\n          register",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M0A": {
    +                    "description": "Memory 0 address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S6M1AR": {
    +              "description": "stream x memory 1 address\n          register",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M1A": {
    +                    "description": "Memory 1 address (used in case of Double\n              buffer mode)",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S6FCR": {
    +              "description": "stream x FIFO control register",
    +              "offset": 180,
    +              "size": 32,
    +              "reset_value": 33,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEIE": {
    +                    "description": "FIFO error interrupt\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FS": {
    +                    "description": "FIFO status",
    +                    "offset": 3,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "DMDIS": {
    +                    "description": "Direct mode disable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FTH": {
    +                    "description": "FIFO threshold selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "S7CR": {
    +              "description": "stream x configuration\n          register",
    +              "offset": 184,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHSEL": {
    +                    "description": "Channel selection",
    +                    "offset": 25,
    +                    "size": 3
    +                  },
    +                  "MBURST": {
    +                    "description": "Memory burst transfer\n              configuration",
    +                    "offset": 23,
    +                    "size": 2
    +                  },
    +                  "PBURST": {
    +                    "description": "Peripheral burst transfer\n              configuration",
    +                    "offset": 21,
    +                    "size": 2
    +                  },
    +                  "ACK": {
    +                    "description": "ACK",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CT": {
    +                    "description": "Current target (only in double buffer\n              mode)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DBM": {
    +                    "description": "Double buffer mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "PL": {
    +                    "description": "Priority level",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "PINCOS": {
    +                    "description": "Peripheral increment offset\n              size",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory data size",
    +                    "offset": 13,
    +                    "size": 2
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral data size",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "PFCTRL": {
    +                    "description": "Peripheral flow controller",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half transfer interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DMEIE": {
    +                    "description": "Direct mode error interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "Stream enable / flag stream ready when\n              read low",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "S7NDTR": {
    +              "description": "stream x number of data\n          register",
    +              "offset": 188,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data items to\n              transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "S7PAR": {
    +              "description": "stream x peripheral address\n          register",
    +              "offset": 192,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S7M0AR": {
    +              "description": "stream x memory 0 address\n          register",
    +              "offset": 196,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M0A": {
    +                    "description": "Memory 0 address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S7M1AR": {
    +              "description": "stream x memory 1 address\n          register",
    +              "offset": 200,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M1A": {
    +                    "description": "Memory 1 address (used in case of Double\n              buffer mode)",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S7FCR": {
    +              "description": "stream x FIFO control register",
    +              "offset": 204,
    +              "size": 32,
    +              "reset_value": 33,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEIE": {
    +                    "description": "FIFO error interrupt\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FS": {
    +                    "description": "FIFO status",
    +                    "offset": 3,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "DMDIS": {
    +                    "description": "Direct mode disable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FTH": {
    +                    "description": "FIFO threshold selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SCB_ACTRL": {
    +        "description": "System control block ACTLR",
    +        "children": {
    +          "registers": {
    +            "ACTRL": {
    +              "description": "Auxiliary control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DISMCYCINT": {
    +                    "description": "DISMCYCINT",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DISDEFWBUF": {
    +                    "description": "DISDEFWBUF",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DISFOLD": {
    +                    "description": "DISFOLD",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DISFPCA": {
    +                    "description": "DISFPCA",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DISOOFP": {
    +                    "description": "DISOOFP",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "RCC": {
    +        "description": "Reset and clock control",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "clock control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 131,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PLLI2SRDY": {
    +                    "description": "PLLI2S clock ready flag",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PLLI2SON": {
    +                    "description": "PLLI2S enable",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "PLLRDY": {
    +                    "description": "Main PLL (PLL) clock ready\n              flag",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PLLON": {
    +                    "description": "Main PLL (PLL) enable",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "CSSON": {
    +                    "description": "Clock security system\n              enable",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "HSEBYP": {
    +                    "description": "HSE clock bypass",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "HSERDY": {
    +                    "description": "HSE clock ready flag",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HSEON": {
    +                    "description": "HSE clock enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "HSICAL": {
    +                    "description": "Internal high-speed clock\n              calibration",
    +                    "offset": 8,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "HSITRIM": {
    +                    "description": "Internal high-speed clock\n              trimming",
    +                    "offset": 3,
    +                    "size": 5
    +                  },
    +                  "HSIRDY": {
    +                    "description": "Internal high-speed clock ready\n              flag",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HSION": {
    +                    "description": "Internal high-speed clock\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PLLCFGR": {
    +              "description": "PLL configuration register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 603992080,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PLLQ3": {
    +                    "description": "Main PLL (PLL) division factor for USB\n              OTG FS, SDIO and random number generator\n              clocks",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "PLLQ2": {
    +                    "description": "Main PLL (PLL) division factor for USB\n              OTG FS, SDIO and random number generator\n              clocks",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "PLLQ1": {
    +                    "description": "Main PLL (PLL) division factor for USB\n              OTG FS, SDIO and random number generator\n              clocks",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "PLLQ0": {
    +                    "description": "Main PLL (PLL) division factor for USB\n              OTG FS, SDIO and random number generator\n              clocks",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "PLLSRC": {
    +                    "description": "Main PLL(PLL) and audio PLL (PLLI2S)\n              entry clock source",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "PLLP1": {
    +                    "description": "Main PLL (PLL) division factor for main\n              system clock",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "PLLP0": {
    +                    "description": "Main PLL (PLL) division factor for main\n              system clock",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "PLLN8": {
    +                    "description": "Main PLL (PLL) multiplication factor for\n              VCO",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PLLN7": {
    +                    "description": "Main PLL (PLL) multiplication factor for\n              VCO",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "PLLN6": {
    +                    "description": "Main PLL (PLL) multiplication factor for\n              VCO",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "PLLN5": {
    +                    "description": "Main PLL (PLL) multiplication factor for\n              VCO",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "PLLN4": {
    +                    "description": "Main PLL (PLL) multiplication factor for\n              VCO",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PLLN3": {
    +                    "description": "Main PLL (PLL) multiplication factor for\n              VCO",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PLLN2": {
    +                    "description": "Main PLL (PLL) multiplication factor for\n              VCO",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PLLN1": {
    +                    "description": "Main PLL (PLL) multiplication factor for\n              VCO",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PLLN0": {
    +                    "description": "Main PLL (PLL) multiplication factor for\n              VCO",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PLLM5": {
    +                    "description": "Division factor for the main PLL (PLL)\n              and audio PLL (PLLI2S) input clock",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PLLM4": {
    +                    "description": "Division factor for the main PLL (PLL)\n              and audio PLL (PLLI2S) input clock",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "PLLM3": {
    +                    "description": "Division factor for the main PLL (PLL)\n              and audio PLL (PLLI2S) input clock",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PLLM2": {
    +                    "description": "Division factor for the main PLL (PLL)\n              and audio PLL (PLLI2S) input clock",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PLLM1": {
    +                    "description": "Division factor for the main PLL (PLL)\n              and audio PLL (PLLI2S) input clock",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PLLM0": {
    +                    "description": "Division factor for the main PLL (PLL)\n              and audio PLL (PLLI2S) input clock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CFGR": {
    +              "description": "clock configuration register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MCO2": {
    +                    "description": "Microcontroller clock output\n              2",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "MCO2PRE": {
    +                    "description": "MCO2 prescaler",
    +                    "offset": 27,
    +                    "size": 3
    +                  },
    +                  "MCO1PRE": {
    +                    "description": "MCO1 prescaler",
    +                    "offset": 24,
    +                    "size": 3
    +                  },
    +                  "I2SSRC": {
    +                    "description": "I2S clock selection",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "MCO1": {
    +                    "description": "Microcontroller clock output\n              1",
    +                    "offset": 21,
    +                    "size": 2
    +                  },
    +                  "RTCPRE": {
    +                    "description": "HSE division factor for RTC\n              clock",
    +                    "offset": 16,
    +                    "size": 5
    +                  },
    +                  "PPRE2": {
    +                    "description": "APB high-speed prescaler\n              (APB2)",
    +                    "offset": 13,
    +                    "size": 3
    +                  },
    +                  "PPRE1": {
    +                    "description": "APB Low speed prescaler\n              (APB1)",
    +                    "offset": 10,
    +                    "size": 3
    +                  },
    +                  "HPRE": {
    +                    "description": "AHB prescaler",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "SWS1": {
    +                    "description": "System clock switch status",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SWS0": {
    +                    "description": "System clock switch status",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SW1": {
    +                    "description": "System clock switch",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SW0": {
    +                    "description": "System clock switch",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CIR": {
    +              "description": "clock interrupt register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSSC": {
    +                    "description": "Clock security system interrupt\n              clear",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "PLLI2SRDYC": {
    +                    "description": "PLLI2S ready interrupt\n              clear",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "PLLRDYC": {
    +                    "description": "Main PLL(PLL) ready interrupt\n              clear",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "HSERDYC": {
    +                    "description": "HSE ready interrupt clear",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "HSIRDYC": {
    +                    "description": "HSI ready interrupt clear",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "LSERDYC": {
    +                    "description": "LSE ready interrupt clear",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "LSIRDYC": {
    +                    "description": "LSI ready interrupt clear",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "PLLI2SRDYIE": {
    +                    "description": "PLLI2S ready interrupt\n              enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "PLLRDYIE": {
    +                    "description": "Main PLL (PLL) ready interrupt\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "HSERDYIE": {
    +                    "description": "HSE ready interrupt enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "HSIRDYIE": {
    +                    "description": "HSI ready interrupt enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LSERDYIE": {
    +                    "description": "LSE ready interrupt enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "LSIRDYIE": {
    +                    "description": "LSI ready interrupt enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CSSF": {
    +                    "description": "Clock security system interrupt\n              flag",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PLLI2SRDYF": {
    +                    "description": "PLLI2S ready interrupt\n              flag",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PLLRDYF": {
    +                    "description": "Main PLL (PLL) ready interrupt\n              flag",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HSERDYF": {
    +                    "description": "HSE ready interrupt flag",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HSIRDYF": {
    +                    "description": "HSI ready interrupt flag",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LSERDYF": {
    +                    "description": "LSE ready interrupt flag",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LSIRDYF": {
    +                    "description": "LSI ready interrupt flag",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "AHB1RSTR": {
    +              "description": "AHB1 peripheral reset register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OTGHSRST": {
    +                    "description": "USB OTG HS module reset",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "ETHMACRST": {
    +                    "description": "Ethernet MAC reset",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "DMA2RST": {
    +                    "description": "DMA2 reset",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "DMA1RST": {
    +                    "description": "DMA2 reset",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "CRCRST": {
    +                    "description": "CRC reset",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIOIRST": {
    +                    "description": "IO port I reset",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIOHRST": {
    +                    "description": "IO port H reset",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIOGRST": {
    +                    "description": "IO port G reset",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIOFRST": {
    +                    "description": "IO port F reset",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIOERST": {
    +                    "description": "IO port E reset",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIODRST": {
    +                    "description": "IO port D reset",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIOCRST": {
    +                    "description": "IO port C reset",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIOBRST": {
    +                    "description": "IO port B reset",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIOARST": {
    +                    "description": "IO port A reset",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AHB2RSTR": {
    +              "description": "AHB2 peripheral reset register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OTGFSRST": {
    +                    "description": "USB OTG FS module reset",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RNGRST": {
    +                    "description": "Random number generator module\n              reset",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DCMIRST": {
    +                    "description": "Camera interface reset",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AHB3RSTR": {
    +              "description": "AHB3 peripheral reset register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FSMCRST": {
    +                    "description": "Flexible static memory controller module\n              reset",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "APB1RSTR": {
    +              "description": "APB1 peripheral reset register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACRST": {
    +                    "description": "DAC reset",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "PWRRST": {
    +                    "description": "Power interface reset",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "CAN2RST": {
    +                    "description": "CAN2 reset",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "CAN1RST": {
    +                    "description": "CAN1 reset",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "I2C3RST": {
    +                    "description": "I2C3 reset",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "I2C2RST": {
    +                    "description": "I2C 2 reset",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "I2C1RST": {
    +                    "description": "I2C 1 reset",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "UART5RST": {
    +                    "description": "USART 5 reset",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "UART4RST": {
    +                    "description": "USART 4 reset",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "UART3RST": {
    +                    "description": "USART 3 reset",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "UART2RST": {
    +                    "description": "USART 2 reset",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "SPI3RST": {
    +                    "description": "SPI 3 reset",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "SPI2RST": {
    +                    "description": "SPI 2 reset",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "WWDGRST": {
    +                    "description": "Window watchdog reset",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TIM14RST": {
    +                    "description": "TIM14 reset",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TIM13RST": {
    +                    "description": "TIM13 reset",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TIM12RST": {
    +                    "description": "TIM12 reset",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TIM7RST": {
    +                    "description": "TIM7 reset",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TIM6RST": {
    +                    "description": "TIM6 reset",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TIM5RST": {
    +                    "description": "TIM5 reset",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TIM4RST": {
    +                    "description": "TIM4 reset",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TIM3RST": {
    +                    "description": "TIM3 reset",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TIM2RST": {
    +                    "description": "TIM2 reset",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "APB2RSTR": {
    +              "description": "APB2 peripheral reset register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIM11RST": {
    +                    "description": "TIM11 reset",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TIM10RST": {
    +                    "description": "TIM10 reset",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TIM9RST": {
    +                    "description": "TIM9 reset",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SYSCFGRST": {
    +                    "description": "System configuration controller\n              reset",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SPI1RST": {
    +                    "description": "SPI 1 reset",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "SDIORST": {
    +                    "description": "SDIO reset",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ADCRST": {
    +                    "description": "ADC interface reset (common to all\n              ADCs)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "USART6RST": {
    +                    "description": "USART6 reset",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "USART1RST": {
    +                    "description": "USART1 reset",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TIM8RST": {
    +                    "description": "TIM8 reset",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TIM1RST": {
    +                    "description": "TIM1 reset",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AHB1ENR": {
    +              "description": "AHB1 peripheral clock register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 1048576,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OTGHSULPIEN": {
    +                    "description": "USB OTG HSULPI clock\n              enable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "OTGHSEN": {
    +                    "description": "USB OTG HS clock enable",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "ETHMACPTPEN": {
    +                    "description": "Ethernet PTP clock enable",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ETHMACRXEN": {
    +                    "description": "Ethernet Reception clock\n              enable",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "ETHMACTXEN": {
    +                    "description": "Ethernet Transmission clock\n              enable",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "ETHMACEN": {
    +                    "description": "Ethernet MAC clock enable",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "DMA2EN": {
    +                    "description": "DMA2 clock enable",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "DMA1EN": {
    +                    "description": "DMA1 clock enable",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "BKPSRAMEN": {
    +                    "description": "Backup SRAM interface clock\n              enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "CRCEN": {
    +                    "description": "CRC clock enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIOIEN": {
    +                    "description": "IO port I clock enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIOHEN": {
    +                    "description": "IO port H clock enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIOGEN": {
    +                    "description": "IO port G clock enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIOFEN": {
    +                    "description": "IO port F clock enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIOEEN": {
    +                    "description": "IO port E clock enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIODEN": {
    +                    "description": "IO port D clock enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIOCEN": {
    +                    "description": "IO port C clock enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIOBEN": {
    +                    "description": "IO port B clock enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIOAEN": {
    +                    "description": "IO port A clock enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AHB2ENR": {
    +              "description": "AHB2 peripheral clock enable\n          register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OTGFSEN": {
    +                    "description": "USB OTG FS clock enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RNGEN": {
    +                    "description": "Random number generator clock\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DCMIEN": {
    +                    "description": "Camera interface enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AHB3ENR": {
    +              "description": "AHB3 peripheral clock enable\n          register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FSMCEN": {
    +                    "description": "Flexible static memory controller module\n              clock enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "APB1ENR": {
    +              "description": "APB1 peripheral clock enable\n          register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACEN": {
    +                    "description": "DAC interface clock enable",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "PWREN": {
    +                    "description": "Power interface clock\n              enable",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "CAN2EN": {
    +                    "description": "CAN 2 clock enable",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "CAN1EN": {
    +                    "description": "CAN 1 clock enable",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "I2C3EN": {
    +                    "description": "I2C3 clock enable",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "I2C2EN": {
    +                    "description": "I2C2 clock enable",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "I2C1EN": {
    +                    "description": "I2C1 clock enable",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "UART5EN": {
    +                    "description": "UART5 clock enable",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "UART4EN": {
    +                    "description": "UART4 clock enable",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "USART3EN": {
    +                    "description": "USART3 clock enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "USART2EN": {
    +                    "description": "USART 2 clock enable",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "SPI3EN": {
    +                    "description": "SPI3 clock enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "SPI2EN": {
    +                    "description": "SPI2 clock enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "WWDGEN": {
    +                    "description": "Window watchdog clock\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TIM14EN": {
    +                    "description": "TIM14 clock enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TIM13EN": {
    +                    "description": "TIM13 clock enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TIM12EN": {
    +                    "description": "TIM12 clock enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TIM7EN": {
    +                    "description": "TIM7 clock enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TIM6EN": {
    +                    "description": "TIM6 clock enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TIM5EN": {
    +                    "description": "TIM5 clock enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TIM4EN": {
    +                    "description": "TIM4 clock enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TIM3EN": {
    +                    "description": "TIM3 clock enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TIM2EN": {
    +                    "description": "TIM2 clock enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "APB2ENR": {
    +              "description": "APB2 peripheral clock enable\n          register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIM11EN": {
    +                    "description": "TIM11 clock enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TIM10EN": {
    +                    "description": "TIM10 clock enable",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TIM9EN": {
    +                    "description": "TIM9 clock enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SYSCFGEN": {
    +                    "description": "System configuration controller clock\n              enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SPI1EN": {
    +                    "description": "SPI1 clock enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "SDIOEN": {
    +                    "description": "SDIO clock enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ADC3EN": {
    +                    "description": "ADC3 clock enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ADC2EN": {
    +                    "description": "ADC2 clock enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ADC1EN": {
    +                    "description": "ADC1 clock enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "USART6EN": {
    +                    "description": "USART6 clock enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "USART1EN": {
    +                    "description": "USART1 clock enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TIM8EN": {
    +                    "description": "TIM8 clock enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TIM1EN": {
    +                    "description": "TIM1 clock enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AHB1LPENR": {
    +              "description": "AHB1 peripheral clock enable in low power\n          mode register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 2120716799,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OTGHSULPILPEN": {
    +                    "description": "USB OTG HS ULPI clock enable during\n              Sleep mode",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "OTGHSLPEN": {
    +                    "description": "USB OTG HS clock enable during Sleep\n              mode",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "ETHMACPTPLPEN": {
    +                    "description": "Ethernet PTP clock enable during Sleep\n              mode",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ETHMACRXLPEN": {
    +                    "description": "Ethernet reception clock enable during\n              Sleep mode",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "ETHMACTXLPEN": {
    +                    "description": "Ethernet transmission clock enable\n              during Sleep mode",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "ETHMACLPEN": {
    +                    "description": "Ethernet MAC clock enable during Sleep\n              mode",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "DMA2LPEN": {
    +                    "description": "DMA2 clock enable during Sleep\n              mode",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "DMA1LPEN": {
    +                    "description": "DMA1 clock enable during Sleep\n              mode",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "BKPSRAMLPEN": {
    +                    "description": "Backup SRAM interface clock enable\n              during Sleep mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "SRAM2LPEN": {
    +                    "description": "SRAM 2 interface clock enable during\n              Sleep mode",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "SRAM1LPEN": {
    +                    "description": "SRAM 1interface clock enable during\n              Sleep mode",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FLITFLPEN": {
    +                    "description": "Flash interface clock enable during\n              Sleep mode",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "CRCLPEN": {
    +                    "description": "CRC clock enable during Sleep\n              mode",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIOILPEN": {
    +                    "description": "IO port I clock enable during Sleep\n              mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIOHLPEN": {
    +                    "description": "IO port H clock enable during Sleep\n              mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIOGLPEN": {
    +                    "description": "IO port G clock enable during Sleep\n              mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIOFLPEN": {
    +                    "description": "IO port F clock enable during Sleep\n              mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIOELPEN": {
    +                    "description": "IO port E clock enable during Sleep\n              mode",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIODLPEN": {
    +                    "description": "IO port D clock enable during Sleep\n              mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIOCLPEN": {
    +                    "description": "IO port C clock enable during Sleep\n              mode",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIOBLPEN": {
    +                    "description": "IO port B clock enable during Sleep\n              mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIOALPEN": {
    +                    "description": "IO port A clock enable during sleep\n              mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AHB2LPENR": {
    +              "description": "AHB2 peripheral clock enable in low power\n          mode register",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 241,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OTGFSLPEN": {
    +                    "description": "USB OTG FS clock enable during Sleep\n              mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RNGLPEN": {
    +                    "description": "Random number generator clock enable\n              during Sleep mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DCMILPEN": {
    +                    "description": "Camera interface enable during Sleep\n              mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AHB3LPENR": {
    +              "description": "AHB3 peripheral clock enable in low power\n          mode register",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FSMCLPEN": {
    +                    "description": "Flexible static memory controller module\n              clock enable during Sleep mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "APB1LPENR": {
    +              "description": "APB1 peripheral clock enable in low power\n          mode register",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 922667519,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACLPEN": {
    +                    "description": "DAC interface clock enable during Sleep\n              mode",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "PWRLPEN": {
    +                    "description": "Power interface clock enable during\n              Sleep mode",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "CAN2LPEN": {
    +                    "description": "CAN 2 clock enable during Sleep\n              mode",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "CAN1LPEN": {
    +                    "description": "CAN 1 clock enable during Sleep\n              mode",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "I2C3LPEN": {
    +                    "description": "I2C3 clock enable during Sleep\n              mode",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "I2C2LPEN": {
    +                    "description": "I2C2 clock enable during Sleep\n              mode",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "I2C1LPEN": {
    +                    "description": "I2C1 clock enable during Sleep\n              mode",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "UART5LPEN": {
    +                    "description": "UART5 clock enable during Sleep\n              mode",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "UART4LPEN": {
    +                    "description": "UART4 clock enable during Sleep\n              mode",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "USART3LPEN": {
    +                    "description": "USART3 clock enable during Sleep\n              mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "USART2LPEN": {
    +                    "description": "USART2 clock enable during Sleep\n              mode",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "SPI3LPEN": {
    +                    "description": "SPI3 clock enable during Sleep\n              mode",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "SPI2LPEN": {
    +                    "description": "SPI2 clock enable during Sleep\n              mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "WWDGLPEN": {
    +                    "description": "Window watchdog clock enable during\n              Sleep mode",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TIM14LPEN": {
    +                    "description": "TIM14 clock enable during Sleep\n              mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TIM13LPEN": {
    +                    "description": "TIM13 clock enable during Sleep\n              mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TIM12LPEN": {
    +                    "description": "TIM12 clock enable during Sleep\n              mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TIM7LPEN": {
    +                    "description": "TIM7 clock enable during Sleep\n              mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TIM6LPEN": {
    +                    "description": "TIM6 clock enable during Sleep\n              mode",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TIM5LPEN": {
    +                    "description": "TIM5 clock enable during Sleep\n              mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TIM4LPEN": {
    +                    "description": "TIM4 clock enable during Sleep\n              mode",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TIM3LPEN": {
    +                    "description": "TIM3 clock enable during Sleep\n              mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TIM2LPEN": {
    +                    "description": "TIM2 clock enable during Sleep\n              mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "APB2LPENR": {
    +              "description": "APB2 peripheral clock enabled in low power\n          mode register",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 483123,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIM11LPEN": {
    +                    "description": "TIM11 clock enable during Sleep\n              mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TIM10LPEN": {
    +                    "description": "TIM10 clock enable during Sleep\n              mode",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TIM9LPEN": {
    +                    "description": "TIM9 clock enable during sleep\n              mode",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SYSCFGLPEN": {
    +                    "description": "System configuration controller clock\n              enable during Sleep mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SPI1LPEN": {
    +                    "description": "SPI 1 clock enable during Sleep\n              mode",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "SDIOLPEN": {
    +                    "description": "SDIO clock enable during Sleep\n              mode",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ADC3LPEN": {
    +                    "description": "ADC 3 clock enable during Sleep\n              mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ADC2LPEN": {
    +                    "description": "ADC2 clock enable during Sleep\n              mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ADC1LPEN": {
    +                    "description": "ADC1 clock enable during Sleep\n              mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "USART6LPEN": {
    +                    "description": "USART6 clock enable during Sleep\n              mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "USART1LPEN": {
    +                    "description": "USART1 clock enable during Sleep\n              mode",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TIM8LPEN": {
    +                    "description": "TIM8 clock enable during Sleep\n              mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TIM1LPEN": {
    +                    "description": "TIM1 clock enable during Sleep\n              mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BDCR": {
    +              "description": "Backup domain control register",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BDRST": {
    +                    "description": "Backup domain software\n              reset",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RTCEN": {
    +                    "description": "RTC clock enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "RTCSEL1": {
    +                    "description": "RTC clock source selection",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RTCSEL0": {
    +                    "description": "RTC clock source selection",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LSEBYP": {
    +                    "description": "External low-speed oscillator\n              bypass",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "LSERDY": {
    +                    "description": "External low-speed oscillator\n              ready",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LSEON": {
    +                    "description": "External low-speed oscillator\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CSR": {
    +              "description": "clock control & status\n          register",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 234881024,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LPWRRSTF": {
    +                    "description": "Low-power reset flag",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "WWDGRSTF": {
    +                    "description": "Window watchdog reset flag",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "WDGRSTF": {
    +                    "description": "Independent watchdog reset\n              flag",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "SFTRSTF": {
    +                    "description": "Software reset flag",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "PORRSTF": {
    +                    "description": "POR/PDR reset flag",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "PADRSTF": {
    +                    "description": "PIN reset flag",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "BORRSTF": {
    +                    "description": "BOR reset flag",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "RMVF": {
    +                    "description": "Remove reset flag",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "LSIRDY": {
    +                    "description": "Internal low-speed oscillator\n              ready",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LSION": {
    +                    "description": "Internal low-speed oscillator\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SSCGR": {
    +              "description": "spread spectrum clock generation\n          register",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SSCGEN": {
    +                    "description": "Spread spectrum modulation\n              enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "SPREADSEL": {
    +                    "description": "Spread Select",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INCSTEP": {
    +                    "description": "Incrementation step",
    +                    "offset": 13,
    +                    "size": 15
    +                  },
    +                  "MODPER": {
    +                    "description": "Modulation period",
    +                    "offset": 0,
    +                    "size": 13
    +                  }
    +                }
    +              }
    +            },
    +            "PLLI2SCFGR": {
    +              "description": "PLLI2S configuration register",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 536883200,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PLLI2SRx": {
    +                    "description": "PLLI2S division factor for I2S\n              clocks",
    +                    "offset": 28,
    +                    "size": 3
    +                  },
    +                  "PLLI2SNx": {
    +                    "description": "PLLI2S multiplication factor for\n              VCO",
    +                    "offset": 6,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "GPIOI": {
    +        "description": "General-purpose I/Os",
    +        "children": {
    +          "registers": {
    +            "MODER": {
    +              "description": "GPIO port mode register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MODER15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "MODER14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "MODER13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "MODER12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "MODER11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "MODER10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "MODER9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MODER8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "MODER7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "MODER6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "MODER5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "MODER4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MODER3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "MODER2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "MODER1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MODER0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTYPER": {
    +              "description": "GPIO port output type register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OT15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OT14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "OT13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "OT12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "OT11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OT10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OT9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "OT8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "OT7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OT6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "OT5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "OT4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "OT3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OT2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OT1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OT0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OSPEEDR": {
    +              "description": "GPIO port output speed\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OSPEEDR15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "PUPDR": {
    +              "description": "GPIO port pull-up/pull-down\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PUPDR15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "PUPDR14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "PUPDR13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "PUPDR12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "PUPDR11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "PUPDR10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "PUPDR9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "PUPDR8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "PUPDR7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "PUPDR6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "PUPDR5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PUPDR4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "PUPDR3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "PUPDR2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "PUPDR1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "PUPDR0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "IDR": {
    +              "description": "GPIO port input data register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IDR15": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "IDR14": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "IDR13": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "IDR12": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "IDR11": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "IDR10": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "IDR9": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "IDR8": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "IDR7": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IDR6": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "IDR5": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IDR4": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IDR3": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IDR2": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IDR1": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IDR0": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ODR": {
    +              "description": "GPIO port output data register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ODR15": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ODR14": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ODR13": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ODR12": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ODR11": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ODR10": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ODR9": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ODR8": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ODR7": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ODR6": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ODR5": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ODR4": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ODR3": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ODR2": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ODR1": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ODR0": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BSRR": {
    +              "description": "GPIO port bit set/reset\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "BR15": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "BR14": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "BR13": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "BR12": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "BR11": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "BR10": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "BR9": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "BR8": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "BR7": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "BR6": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "BR5": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "BR4": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "BR3": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "BR2": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "BR1": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "BR0": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BS15": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "BS14": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "BS13": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BS12": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "BS11": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BS10": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "BS9": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BS8": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BS7": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BS6": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BS5": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "BS4": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BS3": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "BS2": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "BS1": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "BS0": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "LCKR": {
    +              "description": "GPIO port configuration lock\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LCKK": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "LCK15": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LCK14": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "LCK13": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "LCK12": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "LCK11": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "LCK10": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LCK9": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "LCK8": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LCK7": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "LCK6": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "LCK5": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "LCK4": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "LCK3": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "LCK2": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "LCK1": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "LCK0": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AFRL": {
    +              "description": "GPIO alternate function low\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AFRL7": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 28,
    +                    "size": 4
    +                  },
    +                  "AFRL6": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "AFRL5": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "AFRL4": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "AFRL3": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "AFRL2": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "AFRL1": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "AFRL0": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "AFRH": {
    +              "description": "GPIO alternate function high\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AFRH15": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 28,
    +                    "size": 4
    +                  },
    +                  "AFRH14": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "AFRH13": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "AFRH12": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "AFRH11": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "AFRH10": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "AFRH9": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "AFRH8": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "FPU_CPACR": {
    +        "description": "Floating point unit CPACR",
    +        "children": {
    +          "registers": {
    +            "CPACR": {
    +              "description": "Coprocessor access control\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CP": {
    +                    "description": "CP",
    +                    "offset": 20,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "NVIC_STIR": {
    +        "description": "Nested vectored interrupt\n      controller",
    +        "children": {
    +          "registers": {
    +            "STIR": {
    +              "description": "Software trigger interrupt\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INTID": {
    +                    "description": "Software generated interrupt\n              ID",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SCB": {
    +        "description": "System control block",
    +        "children": {
    +          "registers": {
    +            "CPUID": {
    +              "description": "CPUID base register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 1091551809,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "Revision": {
    +                    "description": "Revision number",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "PartNo": {
    +                    "description": "Part number of the\n              processor",
    +                    "offset": 4,
    +                    "size": 12
    +                  },
    +                  "Constant": {
    +                    "description": "Reads as 0xF",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "Variant": {
    +                    "description": "Variant number",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "Implementer": {
    +                    "description": "Implementer code",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "ICSR": {
    +              "description": "Interrupt control and state\n          register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VECTACTIVE": {
    +                    "description": "Active vector",
    +                    "offset": 0,
    +                    "size": 9
    +                  },
    +                  "RETTOBASE": {
    +                    "description": "Return to base level",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "VECTPENDING": {
    +                    "description": "Pending vector",
    +                    "offset": 12,
    +                    "size": 7
    +                  },
    +                  "ISRPENDING": {
    +                    "description": "Interrupt pending flag",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "PENDSTCLR": {
    +                    "description": "SysTick exception clear-pending\n              bit",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "PENDSTSET": {
    +                    "description": "SysTick exception set-pending\n              bit",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "PENDSVCLR": {
    +                    "description": "PendSV clear-pending bit",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "PENDSVSET": {
    +                    "description": "PendSV set-pending bit",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "NMIPENDSET": {
    +                    "description": "NMI set-pending bit.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "VTOR": {
    +              "description": "Vector table offset register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TBLOFF": {
    +                    "description": "Vector table base offset\n              field",
    +                    "offset": 9,
    +                    "size": 21
    +                  }
    +                }
    +              }
    +            },
    +            "AIRCR": {
    +              "description": "Application interrupt and reset control\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VECTRESET": {
    +                    "description": "VECTRESET",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "VECTCLRACTIVE": {
    +                    "description": "VECTCLRACTIVE",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SYSRESETREQ": {
    +                    "description": "SYSRESETREQ",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PRIGROUP": {
    +                    "description": "PRIGROUP",
    +                    "offset": 8,
    +                    "size": 3
    +                  },
    +                  "ENDIANESS": {
    +                    "description": "ENDIANESS",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "VECTKEYSTAT": {
    +                    "description": "Register key",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SCR": {
    +              "description": "System control register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SLEEPONEXIT": {
    +                    "description": "SLEEPONEXIT",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEEPDEEP": {
    +                    "description": "SLEEPDEEP",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SEVEONPEND": {
    +                    "description": "Send Event on Pending bit",
    +                    "offset": 4,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCR": {
    +              "description": "Configuration and control\n          register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NONBASETHRDENA": {
    +                    "description": "Configures how the processor enters\n              Thread mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "USERSETMPEND": {
    +                    "description": "USERSETMPEND",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UNALIGN__TRP": {
    +                    "description": "UNALIGN_ TRP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIV_0_TRP": {
    +                    "description": "DIV_0_TRP",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BFHFNMIGN": {
    +                    "description": "BFHFNMIGN",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "STKALIGN": {
    +                    "description": "STKALIGN",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SHPR1": {
    +              "description": "System handler priority\n          registers",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRI_4": {
    +                    "description": "Priority of system handler\n              4",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "PRI_5": {
    +                    "description": "Priority of system handler\n              5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "PRI_6": {
    +                    "description": "Priority of system handler\n              6",
    +                    "offset": 16,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SHPR2": {
    +              "description": "System handler priority\n          registers",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRI_11": {
    +                    "description": "Priority of system handler\n              11",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SHPR3": {
    +              "description": "System handler priority\n          registers",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRI_14": {
    +                    "description": "Priority of system handler\n              14",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "PRI_15": {
    +                    "description": "Priority of system handler\n              15",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SHCRS": {
    +              "description": "System handler control and state\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MEMFAULTACT": {
    +                    "description": "Memory management fault exception active\n              bit",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "BUSFAULTACT": {
    +                    "description": "Bus fault exception active\n              bit",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "USGFAULTACT": {
    +                    "description": "Usage fault exception active\n              bit",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SVCALLACT": {
    +                    "description": "SVC call active bit",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MONITORACT": {
    +                    "description": "Debug monitor active bit",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PENDSVACT": {
    +                    "description": "PendSV exception active\n              bit",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SYSTICKACT": {
    +                    "description": "SysTick exception active\n              bit",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "USGFAULTPENDED": {
    +                    "description": "Usage fault exception pending\n              bit",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "MEMFAULTPENDED": {
    +                    "description": "Memory management fault exception\n              pending bit",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BUSFAULTPENDED": {
    +                    "description": "Bus fault exception pending\n              bit",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SVCALLPENDED": {
    +                    "description": "SVC call pending bit",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MEMFAULTENA": {
    +                    "description": "Memory management fault enable\n              bit",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUSFAULTENA": {
    +                    "description": "Bus fault enable bit",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "USGFAULTENA": {
    +                    "description": "Usage fault enable bit",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CFSR_UFSR_BFSR_MMFSR": {
    +              "description": "Configurable fault status\n          register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IACCVIOL": {
    +                    "description": "Instruction access violation\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MUNSTKERR": {
    +                    "description": "Memory manager fault on unstacking for a\n              return from exception",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MSTKERR": {
    +                    "description": "Memory manager fault on stacking for\n              exception entry.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "MLSPERR": {
    +                    "description": "MLSPERR",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "MMARVALID": {
    +                    "description": "Memory Management Fault Address Register\n              (MMAR) valid flag",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IBUSERR": {
    +                    "description": "Instruction bus error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PRECISERR": {
    +                    "description": "Precise data bus error",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "IMPRECISERR": {
    +                    "description": "Imprecise data bus error",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "UNSTKERR": {
    +                    "description": "Bus fault on unstacking for a return\n              from exception",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "STKERR": {
    +                    "description": "Bus fault on stacking for exception\n              entry",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "LSPERR": {
    +                    "description": "Bus fault on floating-point lazy state\n              preservation",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BFARVALID": {
    +                    "description": "Bus Fault Address Register (BFAR) valid\n              flag",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "UNDEFINSTR": {
    +                    "description": "Undefined instruction usage\n              fault",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "INVSTATE": {
    +                    "description": "Invalid state usage fault",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INVPC": {
    +                    "description": "Invalid PC load usage\n              fault",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "NOCP": {
    +                    "description": "No coprocessor usage\n              fault.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "UNALIGNED": {
    +                    "description": "Unaligned access usage\n              fault",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "DIVBYZERO": {
    +                    "description": "Divide by zero usage fault",
    +                    "offset": 25,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HFSR": {
    +              "description": "Hard fault status register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VECTTBL": {
    +                    "description": "Vector table hard fault",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FORCED": {
    +                    "description": "Forced hard fault",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "DEBUG_VT": {
    +                    "description": "Reserved for Debug use",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MMFAR": {
    +              "description": "Memory management fault address\n          register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MMFAR": {
    +                    "description": "Memory management fault\n              address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BFAR": {
    +              "description": "Bus fault address register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BFAR": {
    +                    "description": "Bus fault address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "AFSR": {
    +              "description": "Auxiliary fault status\n          register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IMPDEF": {
    +                    "description": "Implementation defined",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "STK": {
    +        "description": "SysTick timer",
    +        "children": {
    +          "registers": {
    +            "CTRL": {
    +              "description": "SysTick control and status\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TICKINT": {
    +                    "description": "SysTick exception request\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CLKSOURCE": {
    +                    "description": "Clock source selection",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "COUNTFLAG": {
    +                    "description": "COUNTFLAG",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "LOAD": {
    +              "description": "SysTick reload value register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RELOAD": {
    +                    "description": "RELOAD value",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "VAL": {
    +              "description": "SysTick current value register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CURRENT": {
    +                    "description": "Current counter value",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "CALIB": {
    +              "description": "SysTick calibration value\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TENMS": {
    +                    "description": "Calibration value",
    +                    "offset": 0,
    +                    "size": 24
    +                  },
    +                  "SKEW": {
    +                    "description": "SKEW flag: Indicates whether the TENMS\n              value is exact",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "NOREF": {
    +                    "description": "NOREF flag. Reads as zero",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "MPU": {
    +        "description": "Memory protection unit",
    +        "children": {
    +          "registers": {
    +            "MPU_TYPER": {
    +              "description": "MPU type register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 2048,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SEPARATE": {
    +                    "description": "Separate flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DREGION": {
    +                    "description": "Number of MPU data regions",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IREGION": {
    +                    "description": "Number of MPU instruction\n              regions",
    +                    "offset": 16,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "MPU_CTRL": {
    +              "description": "MPU control register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enables the MPU",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "HFNMIENA": {
    +                    "description": "Enables the operation of MPU during hard\n              fault",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PRIVDEFENA": {
    +                    "description": "Enable priviliged software access to\n              default memory map",
    +                    "offset": 2,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MPU_RNR": {
    +              "description": "MPU region number register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION": {
    +                    "description": "MPU region",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "MPU_RBAR": {
    +              "description": "MPU region base address\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION": {
    +                    "description": "MPU region field",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "VALID": {
    +                    "description": "MPU region number valid",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ADDR": {
    +                    "description": "Region base address field",
    +                    "offset": 5,
    +                    "size": 27
    +                  }
    +                }
    +              }
    +            },
    +            "MPU_RASR": {
    +              "description": "MPU region attribute and size\n          register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Region enable bit.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SIZE": {
    +                    "description": "Size of the MPU protection\n              region",
    +                    "offset": 1,
    +                    "size": 5
    +                  },
    +                  "SRD": {
    +                    "description": "Subregion disable bits",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "B": {
    +                    "description": "memory attribute",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "C": {
    +                    "description": "memory attribute",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "S": {
    +                    "description": "Shareable memory attribute",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TEX": {
    +                    "description": "memory attribute",
    +                    "offset": 19,
    +                    "size": 3
    +                  },
    +                  "AP": {
    +                    "description": "Access permission",
    +                    "offset": 24,
    +                    "size": 3
    +                  },
    +                  "XN": {
    +                    "description": "Instruction access disable\n              bit",
    +                    "offset": 28,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "FPU": {
    +        "description": "Floting point unit",
    +        "children": {
    +          "registers": {
    +            "FPCCR": {
    +              "description": "Floating-point context control\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LSPACT": {
    +                    "description": "LSPACT",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "USER": {
    +                    "description": "USER",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "THREAD": {
    +                    "description": "THREAD",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "HFRDY": {
    +                    "description": "HFRDY",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "MMRDY": {
    +                    "description": "MMRDY",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "BFRDY": {
    +                    "description": "BFRDY",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MONRDY": {
    +                    "description": "MONRDY",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LSPEN": {
    +                    "description": "LSPEN",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "ASPEN": {
    +                    "description": "ASPEN",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FPCAR": {
    +              "description": "Floating-point context address\n          register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADDRESS": {
    +                    "description": "Location of unpopulated\n              floating-point",
    +                    "offset": 3,
    +                    "size": 29
    +                  }
    +                }
    +              }
    +            },
    +            "FPSCR": {
    +              "description": "Floating-point status control\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IOC": {
    +                    "description": "Invalid operation cumulative exception\n              bit",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DZC": {
    +                    "description": "Division by zero cumulative exception\n              bit.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OFC": {
    +                    "description": "Overflow cumulative exception\n              bit",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UFC": {
    +                    "description": "Underflow cumulative exception\n              bit",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IXC": {
    +                    "description": "Inexact cumulative exception\n              bit",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IDC": {
    +                    "description": "Input denormal cumulative exception\n              bit.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RMode": {
    +                    "description": "Rounding Mode control\n              field",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "FZ": {
    +                    "description": "Flush-to-zero mode control\n              bit:",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "DN": {
    +                    "description": "Default NaN mode control\n              bit",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "AHP": {
    +                    "description": "Alternative half-precision control\n              bit",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "V": {
    +                    "description": "Overflow condition code\n              flag",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "C": {
    +                    "description": "Carry condition code flag",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "Z": {
    +                    "description": "Zero condition code flag",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "N": {
    +                    "description": "Negative condition code\n              flag",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "CRYP": {
    +        "description": "Cryptographic processor",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ALGODIR": {
    +                    "description": "Algorithm direction",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ALGOMODE0": {
    +                    "description": "Algorithm mode",
    +                    "offset": 3,
    +                    "size": 3
    +                  },
    +                  "DATATYPE": {
    +                    "description": "Data type selection",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "KEYSIZE": {
    +                    "description": "Key size selection (AES mode\n              only)",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "FFLUSH": {
    +                    "description": "FIFO flush",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CRYPEN": {
    +                    "description": "Cryptographic processor\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GCM_CCMPH": {
    +                    "description": "GCM_CCMPH",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "ALGOMODE3": {
    +                    "description": "ALGOMODE",
    +                    "offset": 19,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 3,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "BUSY": {
    +                    "description": "Busy bit",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "OFFU": {
    +                    "description": "Output FIFO full",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OFNE": {
    +                    "description": "Output FIFO not empty",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IFNF": {
    +                    "description": "Input FIFO not full",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IFEM": {
    +                    "description": "Input FIFO empty",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIN": {
    +              "description": "data input register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATAIN": {
    +                    "description": "Data input",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DOUT": {
    +              "description": "data output register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DATAOUT": {
    +                    "description": "Data output",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DMACR": {
    +              "description": "DMA control register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DOEN": {
    +                    "description": "DMA output enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DIEN": {
    +                    "description": "DMA input enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IMSCR": {
    +              "description": "interrupt mask set/clear\n          register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUTIM": {
    +                    "description": "Output FIFO service interrupt\n              mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "INIM": {
    +                    "description": "Input FIFO service interrupt\n              mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RISR": {
    +              "description": "raw interrupt status register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "OUTRIS": {
    +                    "description": "Output FIFO service raw interrupt\n              status",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "INRIS": {
    +                    "description": "Input FIFO service raw interrupt\n              status",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MISR": {
    +              "description": "masked interrupt status\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "OUTMIS": {
    +                    "description": "Output FIFO service masked interrupt\n              status",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "INMIS": {
    +                    "description": "Input FIFO service masked interrupt\n              status",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "K0LR": {
    +              "description": "key registers",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "b224": {
    +                    "description": "b224",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "b225": {
    +                    "description": "b225",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "b226": {
    +                    "description": "b226",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "b227": {
    +                    "description": "b227",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "b228": {
    +                    "description": "b228",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "b229": {
    +                    "description": "b229",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "b230": {
    +                    "description": "b230",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "b231": {
    +                    "description": "b231",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "b232": {
    +                    "description": "b232",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "b233": {
    +                    "description": "b233",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "b234": {
    +                    "description": "b234",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "b235": {
    +                    "description": "b235",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "b236": {
    +                    "description": "b236",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "b237": {
    +                    "description": "b237",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "b238": {
    +                    "description": "b238",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "b239": {
    +                    "description": "b239",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "b240": {
    +                    "description": "b240",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "b241": {
    +                    "description": "b241",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "b242": {
    +                    "description": "b242",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "b243": {
    +                    "description": "b243",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "b244": {
    +                    "description": "b244",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "b245": {
    +                    "description": "b245",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "b246": {
    +                    "description": "b246",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "b247": {
    +                    "description": "b247",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "b248": {
    +                    "description": "b248",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "b249": {
    +                    "description": "b249",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "b250": {
    +                    "description": "b250",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "b251": {
    +                    "description": "b251",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "b252": {
    +                    "description": "b252",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "b253": {
    +                    "description": "b253",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "b254": {
    +                    "description": "b254",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "b255": {
    +                    "description": "b255",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "K0RR": {
    +              "description": "key registers",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "b192": {
    +                    "description": "b192",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "b193": {
    +                    "description": "b193",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "b194": {
    +                    "description": "b194",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "b195": {
    +                    "description": "b195",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "b196": {
    +                    "description": "b196",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "b197": {
    +                    "description": "b197",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "b198": {
    +                    "description": "b198",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "b199": {
    +                    "description": "b199",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "b200": {
    +                    "description": "b200",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "b201": {
    +                    "description": "b201",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "b202": {
    +                    "description": "b202",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "b203": {
    +                    "description": "b203",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "b204": {
    +                    "description": "b204",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "b205": {
    +                    "description": "b205",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "b206": {
    +                    "description": "b206",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "b207": {
    +                    "description": "b207",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "b208": {
    +                    "description": "b208",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "b209": {
    +                    "description": "b209",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "b210": {
    +                    "description": "b210",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "b211": {
    +                    "description": "b211",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "b212": {
    +                    "description": "b212",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "b213": {
    +                    "description": "b213",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "b214": {
    +                    "description": "b214",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "b215": {
    +                    "description": "b215",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "b216": {
    +                    "description": "b216",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "b217": {
    +                    "description": "b217",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "b218": {
    +                    "description": "b218",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "b219": {
    +                    "description": "b219",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "b220": {
    +                    "description": "b220",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "b221": {
    +                    "description": "b221",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "b222": {
    +                    "description": "b222",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "b223": {
    +                    "description": "b223",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "K1LR": {
    +              "description": "key registers",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "b160": {
    +                    "description": "b160",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "b161": {
    +                    "description": "b161",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "b162": {
    +                    "description": "b162",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "b163": {
    +                    "description": "b163",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "b164": {
    +                    "description": "b164",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "b165": {
    +                    "description": "b165",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "b166": {
    +                    "description": "b166",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "b167": {
    +                    "description": "b167",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "b168": {
    +                    "description": "b168",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "b169": {
    +                    "description": "b169",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "b170": {
    +                    "description": "b170",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "b171": {
    +                    "description": "b171",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "b172": {
    +                    "description": "b172",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "b173": {
    +                    "description": "b173",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "b174": {
    +                    "description": "b174",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "b175": {
    +                    "description": "b175",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "b176": {
    +                    "description": "b176",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "b177": {
    +                    "description": "b177",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "b178": {
    +                    "description": "b178",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "b179": {
    +                    "description": "b179",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "b180": {
    +                    "description": "b180",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "b181": {
    +                    "description": "b181",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "b182": {
    +                    "description": "b182",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "b183": {
    +                    "description": "b183",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "b184": {
    +                    "description": "b184",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "b185": {
    +                    "description": "b185",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "b186": {
    +                    "description": "b186",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "b187": {
    +                    "description": "b187",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "b188": {
    +                    "description": "b188",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "b189": {
    +                    "description": "b189",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "b190": {
    +                    "description": "b190",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "b191": {
    +                    "description": "b191",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "K1RR": {
    +              "description": "key registers",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "b128": {
    +                    "description": "b128",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "b129": {
    +                    "description": "b129",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "b130": {
    +                    "description": "b130",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "b131": {
    +                    "description": "b131",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "b132": {
    +                    "description": "b132",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "b133": {
    +                    "description": "b133",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "b134": {
    +                    "description": "b134",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "b135": {
    +                    "description": "b135",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "b136": {
    +                    "description": "b136",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "b137": {
    +                    "description": "b137",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "b138": {
    +                    "description": "b138",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "b139": {
    +                    "description": "b139",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "b140": {
    +                    "description": "b140",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "b141": {
    +                    "description": "b141",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "b142": {
    +                    "description": "b142",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "b143": {
    +                    "description": "b143",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "b144": {
    +                    "description": "b144",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "b145": {
    +                    "description": "b145",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "b146": {
    +                    "description": "b146",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "b147": {
    +                    "description": "b147",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "b148": {
    +                    "description": "b148",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "b149": {
    +                    "description": "b149",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "b150": {
    +                    "description": "b150",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "b151": {
    +                    "description": "b151",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "b152": {
    +                    "description": "b152",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "b153": {
    +                    "description": "b153",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "b154": {
    +                    "description": "b154",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "b155": {
    +                    "description": "b155",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "b156": {
    +                    "description": "b156",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "b157": {
    +                    "description": "b157",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "b158": {
    +                    "description": "b158",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "b159": {
    +                    "description": "b159",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "K2LR": {
    +              "description": "key registers",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "b96": {
    +                    "description": "b96",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "b97": {
    +                    "description": "b97",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "b98": {
    +                    "description": "b98",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "b99": {
    +                    "description": "b99",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "b100": {
    +                    "description": "b100",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "b101": {
    +                    "description": "b101",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "b102": {
    +                    "description": "b102",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "b103": {
    +                    "description": "b103",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "b104": {
    +                    "description": "b104",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "b105": {
    +                    "description": "b105",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "b106": {
    +                    "description": "b106",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "b107": {
    +                    "description": "b107",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "b108": {
    +                    "description": "b108",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "b109": {
    +                    "description": "b109",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "b110": {
    +                    "description": "b110",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "b111": {
    +                    "description": "b111",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "b112": {
    +                    "description": "b112",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "b113": {
    +                    "description": "b113",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "b114": {
    +                    "description": "b114",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "b115": {
    +                    "description": "b115",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "b116": {
    +                    "description": "b116",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "b117": {
    +                    "description": "b117",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "b118": {
    +                    "description": "b118",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "b119": {
    +                    "description": "b119",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "b120": {
    +                    "description": "b120",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "b121": {
    +                    "description": "b121",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "b122": {
    +                    "description": "b122",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "b123": {
    +                    "description": "b123",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "b124": {
    +                    "description": "b124",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "b125": {
    +                    "description": "b125",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "b126": {
    +                    "description": "b126",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "b127": {
    +                    "description": "b127",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "K2RR": {
    +              "description": "key registers",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "b64": {
    +                    "description": "b64",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "b65": {
    +                    "description": "b65",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "b66": {
    +                    "description": "b66",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "b67": {
    +                    "description": "b67",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "b68": {
    +                    "description": "b68",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "b69": {
    +                    "description": "b69",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "b70": {
    +                    "description": "b70",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "b71": {
    +                    "description": "b71",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "b72": {
    +                    "description": "b72",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "b73": {
    +                    "description": "b73",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "b74": {
    +                    "description": "b74",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "b75": {
    +                    "description": "b75",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "b76": {
    +                    "description": "b76",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "b77": {
    +                    "description": "b77",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "b78": {
    +                    "description": "b78",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "b79": {
    +                    "description": "b79",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "b80": {
    +                    "description": "b80",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "b81": {
    +                    "description": "b81",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "b82": {
    +                    "description": "b82",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "b83": {
    +                    "description": "b83",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "b84": {
    +                    "description": "b84",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "b85": {
    +                    "description": "b85",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "b86": {
    +                    "description": "b86",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "b87": {
    +                    "description": "b87",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "b88": {
    +                    "description": "b88",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "b89": {
    +                    "description": "b89",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "b90": {
    +                    "description": "b90",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "b91": {
    +                    "description": "b91",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "b92": {
    +                    "description": "b92",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "b93": {
    +                    "description": "b93",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "b94": {
    +                    "description": "b94",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "b95": {
    +                    "description": "b95",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "K3LR": {
    +              "description": "key registers",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "b32": {
    +                    "description": "b32",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "b33": {
    +                    "description": "b33",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "b34": {
    +                    "description": "b34",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "b35": {
    +                    "description": "b35",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "b36": {
    +                    "description": "b36",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "b37": {
    +                    "description": "b37",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "b38": {
    +                    "description": "b38",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "b39": {
    +                    "description": "b39",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "b40": {
    +                    "description": "b40",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "b41": {
    +                    "description": "b41",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "b42": {
    +                    "description": "b42",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "b43": {
    +                    "description": "b43",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "b44": {
    +                    "description": "b44",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "b45": {
    +                    "description": "b45",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "b46": {
    +                    "description": "b46",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "b47": {
    +                    "description": "b47",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "b48": {
    +                    "description": "b48",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "b49": {
    +                    "description": "b49",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "b50": {
    +                    "description": "b50",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "b51": {
    +                    "description": "b51",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "b52": {
    +                    "description": "b52",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "b53": {
    +                    "description": "b53",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "b54": {
    +                    "description": "b54",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "b55": {
    +                    "description": "b55",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "b56": {
    +                    "description": "b56",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "b57": {
    +                    "description": "b57",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "b58": {
    +                    "description": "b58",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "b59": {
    +                    "description": "b59",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "b60": {
    +                    "description": "b60",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "b61": {
    +                    "description": "b61",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "b62": {
    +                    "description": "b62",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "b63": {
    +                    "description": "b63",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "K3RR": {
    +              "description": "key registers",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "b0": {
    +                    "description": "b0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "b1": {
    +                    "description": "b1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "b2": {
    +                    "description": "b2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "b3": {
    +                    "description": "b3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "b4": {
    +                    "description": "b4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "b5": {
    +                    "description": "b5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "b6": {
    +                    "description": "b6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "b7": {
    +                    "description": "b7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "b8": {
    +                    "description": "b8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "b9": {
    +                    "description": "b9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "b10": {
    +                    "description": "b10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "b11": {
    +                    "description": "b11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "b12": {
    +                    "description": "b12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "b13": {
    +                    "description": "b13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "b14": {
    +                    "description": "b14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "b15": {
    +                    "description": "b15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "b16": {
    +                    "description": "b16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "b17": {
    +                    "description": "b17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "b18": {
    +                    "description": "b18",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "b19": {
    +                    "description": "b19",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "b20": {
    +                    "description": "b20",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "b21": {
    +                    "description": "b21",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "b22": {
    +                    "description": "b22",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "b23": {
    +                    "description": "b23",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "b24": {
    +                    "description": "b24",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "b25": {
    +                    "description": "b25",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "b26": {
    +                    "description": "b26",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "b27": {
    +                    "description": "b27",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "b28": {
    +                    "description": "b28",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "b29": {
    +                    "description": "b29",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "b30": {
    +                    "description": "b30",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "b31": {
    +                    "description": "b31",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IV0LR": {
    +              "description": "initialization vector\n          registers",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IV31": {
    +                    "description": "IV31",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "IV30": {
    +                    "description": "IV30",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IV29": {
    +                    "description": "IV29",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IV28": {
    +                    "description": "IV28",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IV27": {
    +                    "description": "IV27",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IV26": {
    +                    "description": "IV26",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IV25": {
    +                    "description": "IV25",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "IV24": {
    +                    "description": "IV24",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IV23": {
    +                    "description": "IV23",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "IV22": {
    +                    "description": "IV22",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "IV21": {
    +                    "description": "IV21",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "IV20": {
    +                    "description": "IV20",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "IV19": {
    +                    "description": "IV19",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "IV18": {
    +                    "description": "IV18",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "IV17": {
    +                    "description": "IV17",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "IV16": {
    +                    "description": "IV16",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "IV15": {
    +                    "description": "IV15",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "IV14": {
    +                    "description": "IV14",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "IV13": {
    +                    "description": "IV13",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "IV12": {
    +                    "description": "IV12",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "IV11": {
    +                    "description": "IV11",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "IV10": {
    +                    "description": "IV10",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "IV9": {
    +                    "description": "IV9",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "IV8": {
    +                    "description": "IV8",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "IV7": {
    +                    "description": "IV7",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "IV6": {
    +                    "description": "IV6",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "IV5": {
    +                    "description": "IV5",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "IV4": {
    +                    "description": "IV4",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "IV3": {
    +                    "description": "IV3",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "IV2": {
    +                    "description": "IV2",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "IV1": {
    +                    "description": "IV1",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "IV0": {
    +                    "description": "IV0",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IV0RR": {
    +              "description": "initialization vector\n          registers",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IV63": {
    +                    "description": "IV63",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "IV62": {
    +                    "description": "IV62",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IV61": {
    +                    "description": "IV61",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IV60": {
    +                    "description": "IV60",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IV59": {
    +                    "description": "IV59",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IV58": {
    +                    "description": "IV58",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IV57": {
    +                    "description": "IV57",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "IV56": {
    +                    "description": "IV56",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IV55": {
    +                    "description": "IV55",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "IV54": {
    +                    "description": "IV54",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "IV53": {
    +                    "description": "IV53",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "IV52": {
    +                    "description": "IV52",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "IV51": {
    +                    "description": "IV51",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "IV50": {
    +                    "description": "IV50",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "IV49": {
    +                    "description": "IV49",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "IV48": {
    +                    "description": "IV48",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "IV47": {
    +                    "description": "IV47",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "IV46": {
    +                    "description": "IV46",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "IV45": {
    +                    "description": "IV45",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "IV44": {
    +                    "description": "IV44",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "IV43": {
    +                    "description": "IV43",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "IV42": {
    +                    "description": "IV42",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "IV41": {
    +                    "description": "IV41",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "IV40": {
    +                    "description": "IV40",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "IV39": {
    +                    "description": "IV39",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "IV38": {
    +                    "description": "IV38",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "IV37": {
    +                    "description": "IV37",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "IV36": {
    +                    "description": "IV36",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "IV35": {
    +                    "description": "IV35",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "IV34": {
    +                    "description": "IV34",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "IV33": {
    +                    "description": "IV33",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "IV32": {
    +                    "description": "IV32",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IV1LR": {
    +              "description": "initialization vector\n          registers",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IV95": {
    +                    "description": "IV95",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "IV94": {
    +                    "description": "IV94",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IV93": {
    +                    "description": "IV93",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IV92": {
    +                    "description": "IV92",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IV91": {
    +                    "description": "IV91",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IV90": {
    +                    "description": "IV90",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IV89": {
    +                    "description": "IV89",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "IV88": {
    +                    "description": "IV88",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IV87": {
    +                    "description": "IV87",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "IV86": {
    +                    "description": "IV86",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "IV85": {
    +                    "description": "IV85",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "IV84": {
    +                    "description": "IV84",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "IV83": {
    +                    "description": "IV83",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "IV82": {
    +                    "description": "IV82",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "IV81": {
    +                    "description": "IV81",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "IV80": {
    +                    "description": "IV80",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "IV79": {
    +                    "description": "IV79",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "IV78": {
    +                    "description": "IV78",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "IV77": {
    +                    "description": "IV77",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "IV76": {
    +                    "description": "IV76",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "IV75": {
    +                    "description": "IV75",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "IV74": {
    +                    "description": "IV74",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "IV73": {
    +                    "description": "IV73",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "IV72": {
    +                    "description": "IV72",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "IV71": {
    +                    "description": "IV71",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "IV70": {
    +                    "description": "IV70",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "IV69": {
    +                    "description": "IV69",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "IV68": {
    +                    "description": "IV68",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "IV67": {
    +                    "description": "IV67",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "IV66": {
    +                    "description": "IV66",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "IV65": {
    +                    "description": "IV65",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "IV64": {
    +                    "description": "IV64",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IV1RR": {
    +              "description": "initialization vector\n          registers",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IV127": {
    +                    "description": "IV127",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "IV126": {
    +                    "description": "IV126",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IV125": {
    +                    "description": "IV125",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IV124": {
    +                    "description": "IV124",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IV123": {
    +                    "description": "IV123",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IV122": {
    +                    "description": "IV122",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IV121": {
    +                    "description": "IV121",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "IV120": {
    +                    "description": "IV120",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IV119": {
    +                    "description": "IV119",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "IV118": {
    +                    "description": "IV118",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "IV117": {
    +                    "description": "IV117",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "IV116": {
    +                    "description": "IV116",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "IV115": {
    +                    "description": "IV115",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "IV114": {
    +                    "description": "IV114",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "IV113": {
    +                    "description": "IV113",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "IV112": {
    +                    "description": "IV112",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "IV111": {
    +                    "description": "IV111",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "IV110": {
    +                    "description": "IV110",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "IV109": {
    +                    "description": "IV109",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "IV108": {
    +                    "description": "IV108",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "IV107": {
    +                    "description": "IV107",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "IV106": {
    +                    "description": "IV106",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "IV105": {
    +                    "description": "IV105",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "IV104": {
    +                    "description": "IV104",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "IV103": {
    +                    "description": "IV103",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "IV102": {
    +                    "description": "IV102",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "IV101": {
    +                    "description": "IV101",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "IV100": {
    +                    "description": "IV100",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "IV99": {
    +                    "description": "IV99",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "IV98": {
    +                    "description": "IV98",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "IV97": {
    +                    "description": "IV97",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "IV96": {
    +                    "description": "IV96",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCMCCM0R": {
    +              "description": "context swap register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCMCCM0R": {
    +                    "description": "CSGCMCCM0R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCMCCM1R": {
    +              "description": "context swap register",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCMCCM1R": {
    +                    "description": "CSGCMCCM1R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCMCCM2R": {
    +              "description": "context swap register",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCMCCM2R": {
    +                    "description": "CSGCMCCM2R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCMCCM3R": {
    +              "description": "context swap register",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCMCCM3R": {
    +                    "description": "CSGCMCCM3R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCMCCM4R": {
    +              "description": "context swap register",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCMCCM4R": {
    +                    "description": "CSGCMCCM4R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCMCCM5R": {
    +              "description": "context swap register",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCMCCM5R": {
    +                    "description": "CSGCMCCM5R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCMCCM6R": {
    +              "description": "context swap register",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCMCCM6R": {
    +                    "description": "CSGCMCCM6R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCMCCM7R": {
    +              "description": "context swap register",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCMCCM7R": {
    +                    "description": "CSGCMCCM7R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCM0R": {
    +              "description": "context swap register",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCM0R": {
    +                    "description": "CSGCM0R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCM1R": {
    +              "description": "context swap register",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCM1R": {
    +                    "description": "CSGCM1R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCM2R": {
    +              "description": "context swap register",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCM2R": {
    +                    "description": "CSGCM2R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCM3R": {
    +              "description": "context swap register",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCM3R": {
    +                    "description": "CSGCM3R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCM4R": {
    +              "description": "context swap register",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCM4R": {
    +                    "description": "CSGCM4R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCM5R": {
    +              "description": "context swap register",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCM5R": {
    +                    "description": "CSGCM5R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCM6R": {
    +              "description": "context swap register",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCM6R": {
    +                    "description": "CSGCM6R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCM7R": {
    +              "description": "context swap register",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCM7R": {
    +                    "description": "CSGCM7R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "HASH": {
    +        "description": "Hash processor",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INIT": {
    +                    "description": "Initialize message digest\n              calculation",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "DMAE": {
    +                    "description": "DMA enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DATATYPE": {
    +                    "description": "Data type selection",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "MODE": {
    +                    "description": "Mode selection",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ALGO0": {
    +                    "description": "Algorithm selection",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "NBW": {
    +                    "description": "Number of words already\n              pushed",
    +                    "offset": 8,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "DINNE": {
    +                    "description": "DIN not empty",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MDMAT": {
    +                    "description": "Multiple DMA Transfers",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "LKEY": {
    +                    "description": "Long key selection",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "ALGO1": {
    +                    "description": "ALGO",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIN": {
    +              "description": "data input register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATAIN": {
    +                    "description": "Data input",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "STR": {
    +              "description": "start register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DCAL": {
    +                    "description": "Digest calculation",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "NBLW": {
    +                    "description": "Number of valid bits in the last word of\n              the message",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "HR0": {
    +              "description": "digest registers",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "H0": {
    +                    "description": "H0",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HR1": {
    +              "description": "digest registers",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "H1": {
    +                    "description": "H1",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HR2": {
    +              "description": "digest registers",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "H2": {
    +                    "description": "H2",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HR3": {
    +              "description": "digest registers",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "H3": {
    +                    "description": "H3",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HR4": {
    +              "description": "digest registers",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "H4": {
    +                    "description": "H4",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IMR": {
    +              "description": "interrupt enable register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DCIE": {
    +                    "description": "Digest calculation completion interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DINIE": {
    +                    "description": "Data input interrupt\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUSY": {
    +                    "description": "Busy bit",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DMAS": {
    +                    "description": "DMA Status",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DCIS": {
    +                    "description": "Digest calculation completion interrupt\n              status",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DINIS": {
    +                    "description": "Data input interrupt\n              status",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CSR0": {
    +              "description": "context swap registers",
    +              "offset": 248,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR0": {
    +                    "description": "CSR0",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR1": {
    +              "description": "context swap registers",
    +              "offset": 252,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR1": {
    +                    "description": "CSR1",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR2": {
    +              "description": "context swap registers",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR2": {
    +                    "description": "CSR2",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR3": {
    +              "description": "context swap registers",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR3": {
    +                    "description": "CSR3",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR4": {
    +              "description": "context swap registers",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR4": {
    +                    "description": "CSR4",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR5": {
    +              "description": "context swap registers",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR5": {
    +                    "description": "CSR5",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR6": {
    +              "description": "context swap registers",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR6": {
    +                    "description": "CSR6",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR7": {
    +              "description": "context swap registers",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR7": {
    +                    "description": "CSR7",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR8": {
    +              "description": "context swap registers",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR8": {
    +                    "description": "CSR8",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR9": {
    +              "description": "context swap registers",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR9": {
    +                    "description": "CSR9",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR10": {
    +              "description": "context swap registers",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR10": {
    +                    "description": "CSR10",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR11": {
    +              "description": "context swap registers",
    +              "offset": 292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR11": {
    +                    "description": "CSR11",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR12": {
    +              "description": "context swap registers",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR12": {
    +                    "description": "CSR12",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR13": {
    +              "description": "context swap registers",
    +              "offset": 300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR13": {
    +                    "description": "CSR13",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR14": {
    +              "description": "context swap registers",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR14": {
    +                    "description": "CSR14",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR15": {
    +              "description": "context swap registers",
    +              "offset": 308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR15": {
    +                    "description": "CSR15",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR16": {
    +              "description": "context swap registers",
    +              "offset": 312,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR16": {
    +                    "description": "CSR16",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR17": {
    +              "description": "context swap registers",
    +              "offset": 316,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR17": {
    +                    "description": "CSR17",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR18": {
    +              "description": "context swap registers",
    +              "offset": 320,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR18": {
    +                    "description": "CSR18",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR19": {
    +              "description": "context swap registers",
    +              "offset": 324,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR19": {
    +                    "description": "CSR19",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR20": {
    +              "description": "context swap registers",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR20": {
    +                    "description": "CSR20",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR21": {
    +              "description": "context swap registers",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR21": {
    +                    "description": "CSR21",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR22": {
    +              "description": "context swap registers",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR22": {
    +                    "description": "CSR22",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR23": {
    +              "description": "context swap registers",
    +              "offset": 340,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR23": {
    +                    "description": "CSR23",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR24": {
    +              "description": "context swap registers",
    +              "offset": 344,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR24": {
    +                    "description": "CSR24",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR25": {
    +              "description": "context swap registers",
    +              "offset": 348,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR25": {
    +                    "description": "CSR25",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR26": {
    +              "description": "context swap registers",
    +              "offset": 352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR26": {
    +                    "description": "CSR26",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR27": {
    +              "description": "context swap registers",
    +              "offset": 356,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR27": {
    +                    "description": "CSR27",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR28": {
    +              "description": "context swap registers",
    +              "offset": 360,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR28": {
    +                    "description": "CSR28",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR29": {
    +              "description": "context swap registers",
    +              "offset": 364,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR29": {
    +                    "description": "CSR29",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR30": {
    +              "description": "context swap registers",
    +              "offset": 368,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR30": {
    +                    "description": "CSR30",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR31": {
    +              "description": "context swap registers",
    +              "offset": 372,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR31": {
    +                    "description": "CSR31",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR32": {
    +              "description": "context swap registers",
    +              "offset": 376,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR32": {
    +                    "description": "CSR32",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR33": {
    +              "description": "context swap registers",
    +              "offset": 380,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR33": {
    +                    "description": "CSR33",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR34": {
    +              "description": "context swap registers",
    +              "offset": 384,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR34": {
    +                    "description": "CSR34",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR35": {
    +              "description": "context swap registers",
    +              "offset": 388,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR35": {
    +                    "description": "CSR35",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR36": {
    +              "description": "context swap registers",
    +              "offset": 392,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR36": {
    +                    "description": "CSR36",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR37": {
    +              "description": "context swap registers",
    +              "offset": 396,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR37": {
    +                    "description": "CSR37",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR38": {
    +              "description": "context swap registers",
    +              "offset": 400,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR38": {
    +                    "description": "CSR38",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR39": {
    +              "description": "context swap registers",
    +              "offset": 404,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR39": {
    +                    "description": "CSR39",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR40": {
    +              "description": "context swap registers",
    +              "offset": 408,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR40": {
    +                    "description": "CSR40",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR41": {
    +              "description": "context swap registers",
    +              "offset": 412,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR41": {
    +                    "description": "CSR41",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR42": {
    +              "description": "context swap registers",
    +              "offset": 416,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR42": {
    +                    "description": "CSR42",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR43": {
    +              "description": "context swap registers",
    +              "offset": 420,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR43": {
    +                    "description": "CSR43",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR44": {
    +              "description": "context swap registers",
    +              "offset": 424,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR44": {
    +                    "description": "CSR44",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR45": {
    +              "description": "context swap registers",
    +              "offset": 428,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR45": {
    +                    "description": "CSR45",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR46": {
    +              "description": "context swap registers",
    +              "offset": 432,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR46": {
    +                    "description": "CSR46",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR47": {
    +              "description": "context swap registers",
    +              "offset": 436,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR47": {
    +                    "description": "CSR47",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR48": {
    +              "description": "context swap registers",
    +              "offset": 440,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR48": {
    +                    "description": "CSR48",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR49": {
    +              "description": "context swap registers",
    +              "offset": 444,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR49": {
    +                    "description": "CSR49",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR50": {
    +              "description": "context swap registers",
    +              "offset": 448,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR50": {
    +                    "description": "CSR50",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR51": {
    +              "description": "context swap registers",
    +              "offset": 452,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR51": {
    +                    "description": "CSR51",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR52": {
    +              "description": "context swap registers",
    +              "offset": 456,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR52": {
    +                    "description": "CSR52",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR53": {
    +              "description": "context swap registers",
    +              "offset": 460,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR53": {
    +                    "description": "CSR53",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HASH_HR0": {
    +              "description": "HASH digest register",
    +              "offset": 784,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "H0": {
    +                    "description": "H0",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HASH_HR1": {
    +              "description": "read-only",
    +              "offset": 788,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "H1": {
    +                    "description": "H1",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HASH_HR2": {
    +              "description": "read-only",
    +              "offset": 792,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "H2": {
    +                    "description": "H2",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HASH_HR3": {
    +              "description": "read-only",
    +              "offset": 796,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "H3": {
    +                    "description": "H3",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HASH_HR4": {
    +              "description": "read-only",
    +              "offset": 800,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "H4": {
    +                    "description": "H4",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HASH_HR5": {
    +              "description": "read-only",
    +              "offset": 804,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "H5": {
    +                    "description": "H5",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HASH_HR6": {
    +              "description": "read-only",
    +              "offset": 808,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "H6": {
    +                    "description": "H6",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HASH_HR7": {
    +              "description": "read-only",
    +              "offset": 812,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "H7": {
    +                    "description": "H7",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "GPIOB": {
    +        "description": "General-purpose I/Os",
    +        "children": {
    +          "registers": {
    +            "MODER": {
    +              "description": "GPIO port mode register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 640,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MODER15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "MODER14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "MODER13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "MODER12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "MODER11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "MODER10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "MODER9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MODER8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "MODER7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "MODER6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "MODER5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "MODER4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MODER3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "MODER2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "MODER1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MODER0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTYPER": {
    +              "description": "GPIO port output type register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OT15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OT14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "OT13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "OT12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "OT11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OT10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OT9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "OT8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "OT7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OT6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "OT5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "OT4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "OT3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OT2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OT1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OT0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OSPEEDR": {
    +              "description": "GPIO port output speed\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 192,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OSPEEDR15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "PUPDR": {
    +              "description": "GPIO port pull-up/pull-down\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 256,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PUPDR15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "PUPDR14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "PUPDR13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "PUPDR12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "PUPDR11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "PUPDR10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "PUPDR9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "PUPDR8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "PUPDR7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "PUPDR6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "PUPDR5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PUPDR4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "PUPDR3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "PUPDR2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "PUPDR1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "PUPDR0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "IDR": {
    +              "description": "GPIO port input data register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IDR15": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "IDR14": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "IDR13": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "IDR12": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "IDR11": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "IDR10": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "IDR9": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "IDR8": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "IDR7": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IDR6": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "IDR5": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IDR4": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IDR3": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IDR2": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IDR1": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IDR0": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ODR": {
    +              "description": "GPIO port output data register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ODR15": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ODR14": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ODR13": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ODR12": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ODR11": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ODR10": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ODR9": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ODR8": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ODR7": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ODR6": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ODR5": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ODR4": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ODR3": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ODR2": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ODR1": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ODR0": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BSRR": {
    +              "description": "GPIO port bit set/reset\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "BR15": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "BR14": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "BR13": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "BR12": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "BR11": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "BR10": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "BR9": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "BR8": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "BR7": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "BR6": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "BR5": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "BR4": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "BR3": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "BR2": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "BR1": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "BR0": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BS15": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "BS14": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "BS13": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BS12": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "BS11": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BS10": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "BS9": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BS8": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BS7": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BS6": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BS5": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "BS4": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BS3": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "BS2": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "BS1": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "BS0": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "LCKR": {
    +              "description": "GPIO port configuration lock\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LCKK": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "LCK15": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LCK14": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "LCK13": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "LCK12": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "LCK11": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "LCK10": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LCK9": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "LCK8": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LCK7": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "LCK6": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "LCK5": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "LCK4": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "LCK3": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "LCK2": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "LCK1": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "LCK0": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AFRL": {
    +              "description": "GPIO alternate function low\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AFRL7": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 28,
    +                    "size": 4
    +                  },
    +                  "AFRL6": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "AFRL5": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "AFRL4": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "AFRL3": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "AFRL2": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "AFRL1": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "AFRL0": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "AFRH": {
    +              "description": "GPIO alternate function high\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AFRH15": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 28,
    +                    "size": 4
    +                  },
    +                  "AFRH14": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "AFRH13": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "AFRH12": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "AFRH11": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "AFRH10": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "AFRH9": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "AFRH8": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "GPIOA": {
    +        "description": "General-purpose I/Os",
    +        "children": {
    +          "registers": {
    +            "MODER": {
    +              "description": "GPIO port mode register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 2818572288,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MODER15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "MODER14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "MODER13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "MODER12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "MODER11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "MODER10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "MODER9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MODER8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "MODER7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "MODER6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "MODER5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "MODER4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MODER3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "MODER2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "MODER1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MODER0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTYPER": {
    +              "description": "GPIO port output type register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OT15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OT14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "OT13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "OT12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "OT11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OT10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OT9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "OT8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "OT7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OT6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "OT5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "OT4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "OT3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OT2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OT1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OT0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OSPEEDR": {
    +              "description": "GPIO port output speed\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OSPEEDR15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "PUPDR": {
    +              "description": "GPIO port pull-up/pull-down\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 1677721600,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PUPDR15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "PUPDR14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "PUPDR13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "PUPDR12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "PUPDR11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "PUPDR10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "PUPDR9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "PUPDR8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "PUPDR7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "PUPDR6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "PUPDR5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PUPDR4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "PUPDR3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "PUPDR2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "PUPDR1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "PUPDR0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "IDR": {
    +              "description": "GPIO port input data register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IDR15": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "IDR14": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "IDR13": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "IDR12": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "IDR11": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "IDR10": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "IDR9": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "IDR8": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "IDR7": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IDR6": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "IDR5": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IDR4": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IDR3": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IDR2": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IDR1": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IDR0": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ODR": {
    +              "description": "GPIO port output data register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ODR15": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ODR14": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ODR13": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ODR12": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ODR11": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ODR10": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ODR9": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ODR8": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ODR7": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ODR6": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ODR5": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ODR4": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ODR3": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ODR2": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ODR1": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ODR0": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BSRR": {
    +              "description": "GPIO port bit set/reset\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "BR15": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "BR14": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "BR13": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "BR12": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "BR11": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "BR10": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "BR9": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "BR8": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "BR7": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "BR6": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "BR5": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "BR4": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "BR3": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "BR2": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "BR1": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "BR0": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BS15": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "BS14": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "BS13": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BS12": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "BS11": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BS10": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "BS9": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BS8": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BS7": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BS6": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BS5": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "BS4": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BS3": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "BS2": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "BS1": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "BS0": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "LCKR": {
    +              "description": "GPIO port configuration lock\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LCKK": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "LCK15": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LCK14": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "LCK13": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "LCK12": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "LCK11": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "LCK10": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LCK9": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "LCK8": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LCK7": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "LCK6": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "LCK5": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "LCK4": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "LCK3": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "LCK2": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "LCK1": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "LCK0": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AFRL": {
    +              "description": "GPIO alternate function low\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AFRL7": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 28,
    +                    "size": 4
    +                  },
    +                  "AFRL6": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "AFRL5": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "AFRL4": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "AFRL3": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "AFRL2": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "AFRL1": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "AFRL0": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "AFRH": {
    +              "description": "GPIO alternate function high\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AFRH15": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 28,
    +                    "size": 4
    +                  },
    +                  "AFRH14": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "AFRH13": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "AFRH12": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "AFRH11": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "AFRH10": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "AFRH9": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "AFRH8": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SYSCFG": {
    +        "description": "System configuration controller",
    +        "children": {
    +          "registers": {
    +            "MEMRM": {
    +              "description": "memory remap register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MEM_MODE": {
    +                    "description": "MEM_MODE",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "PMC": {
    +              "description": "peripheral mode configuration\n          register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MII_RMII_SEL": {
    +                    "description": "Ethernet PHY interface\n              selection",
    +                    "offset": 23,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EXTICR1": {
    +              "description": "external interrupt configuration register\n          1",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXTI3": {
    +                    "description": "EXTI x configuration (x = 0 to\n              3)",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "EXTI2": {
    +                    "description": "EXTI x configuration (x = 0 to\n              3)",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "EXTI1": {
    +                    "description": "EXTI x configuration (x = 0 to\n              3)",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "EXTI0": {
    +                    "description": "EXTI x configuration (x = 0 to\n              3)",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "EXTICR2": {
    +              "description": "external interrupt configuration register\n          2",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXTI7": {
    +                    "description": "EXTI x configuration (x = 4 to\n              7)",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "EXTI6": {
    +                    "description": "EXTI x configuration (x = 4 to\n              7)",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "EXTI5": {
    +                    "description": "EXTI x configuration (x = 4 to\n              7)",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "EXTI4": {
    +                    "description": "EXTI x configuration (x = 4 to\n              7)",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "EXTICR3": {
    +              "description": "external interrupt configuration register\n          3",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXTI11": {
    +                    "description": "EXTI x configuration (x = 8 to\n              11)",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "EXTI10": {
    +                    "description": "EXTI10",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "EXTI9": {
    +                    "description": "EXTI x configuration (x = 8 to\n              11)",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "EXTI8": {
    +                    "description": "EXTI x configuration (x = 8 to\n              11)",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "EXTICR4": {
    +              "description": "external interrupt configuration register\n          4",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXTI15": {
    +                    "description": "EXTI x configuration (x = 12 to\n              15)",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "EXTI14": {
    +                    "description": "EXTI x configuration (x = 12 to\n              15)",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "EXTI13": {
    +                    "description": "EXTI x configuration (x = 12 to\n              15)",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "EXTI12": {
    +                    "description": "EXTI x configuration (x = 12 to\n              15)",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CMPCR": {
    +              "description": "Compensation cell control\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "READY",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CMP_PD": {
    +                    "description": "Compensation cell\n              power-down",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SPI1": {
    +        "description": "Serial peripheral interface",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BIDIMODE": {
    +                    "description": "Bidirectional data mode\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "BIDIOE": {
    +                    "description": "Output enable in bidirectional\n              mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CRCEN": {
    +                    "description": "Hardware CRC calculation\n              enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CRCNEXT": {
    +                    "description": "CRC transfer next",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "DFF": {
    +                    "description": "Data frame format",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "RXONLY": {
    +                    "description": "Receive only",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SSM": {
    +                    "description": "Software slave management",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SSI": {
    +                    "description": "Internal slave select",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LSBFIRST": {
    +                    "description": "Frame format",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SPE": {
    +                    "description": "SPI enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BR": {
    +                    "description": "Baud rate control",
    +                    "offset": 3,
    +                    "size": 3
    +                  },
    +                  "MSTR": {
    +                    "description": "Master selection",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CPOL": {
    +                    "description": "Clock polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CPHA": {
    +                    "description": "Clock phase",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXEIE": {
    +                    "description": "Tx buffer empty interrupt\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RXNEIE": {
    +                    "description": "RX buffer not empty interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "Error interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FRF": {
    +                    "description": "Frame format",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SSOE": {
    +                    "description": "SS output enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TXDMAEN": {
    +                    "description": "Tx buffer DMA enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RXDMAEN": {
    +                    "description": "Rx buffer DMA enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 2,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIFRFE": {
    +                    "description": "TI frame format error",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BSY": {
    +                    "description": "Busy flag",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OVR": {
    +                    "description": "Overrun flag",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MODF": {
    +                    "description": "Mode fault",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CRCERR": {
    +                    "description": "CRC error flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "UDR": {
    +                    "description": "Underrun flag",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CHSIDE": {
    +                    "description": "Channel side",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXE": {
    +                    "description": "Transmit buffer empty",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXNE": {
    +                    "description": "Receive buffer not empty",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "data register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DR": {
    +                    "description": "Data register",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CRCPR": {
    +              "description": "CRC polynomial register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 7,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CRCPOLY": {
    +                    "description": "CRC polynomial register",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "RXCRCR": {
    +              "description": "RX CRC register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RxCRC": {
    +                    "description": "Rx CRC register",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "TXCRCR": {
    +              "description": "TX CRC register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TxCRC": {
    +                    "description": "Tx CRC register",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "I2SCFGR": {
    +              "description": "I2S configuration register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "I2SMOD": {
    +                    "description": "I2S mode selection",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "I2SE": {
    +                    "description": "I2S Enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "I2SCFG": {
    +                    "description": "I2S configuration mode",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "PCMSYNC": {
    +                    "description": "PCM frame synchronization",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "I2SSTD": {
    +                    "description": "I2S standard selection",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "CKPOL": {
    +                    "description": "Steady state clock\n              polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DATLEN": {
    +                    "description": "Data length to be\n              transferred",
    +                    "offset": 1,
    +                    "size": 2
    +                  },
    +                  "CHLEN": {
    +                    "description": "Channel length (number of bits per audio\n              channel)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "I2SPR": {
    +              "description": "I2S prescaler register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 10,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MCKOE": {
    +                    "description": "Master clock output enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ODD": {
    +                    "description": "Odd factor for the\n              prescaler",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "I2SDIV": {
    +                    "description": "I2S Linear prescaler",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "LTDC": {
    +        "description": "LCD-TFT Controller",
    +        "children": {
    +          "registers": {
    +            "SSCR": {
    +              "description": "Synchronization Size Configuration\n          Register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HSW": {
    +                    "description": "Horizontal Synchronization Width (in\n              units of pixel clock period)",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "VSH": {
    +                    "description": "Vertical Synchronization Height (in\n              units of horizontal scan line)",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "BPCR": {
    +              "description": "Back Porch Configuration\n          Register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AHBP": {
    +                    "description": "Accumulated Horizontal back porch (in\n              units of pixel clock period)",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "AVBP": {
    +                    "description": "Accumulated Vertical back porch (in\n              units of horizontal scan line)",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "AWCR": {
    +              "description": "Active Width Configuration\n          Register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AAV": {
    +                    "description": "AAV",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "AAH": {
    +                    "description": "Accumulated Active Height (in units of\n              horizontal scan line)",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "TWCR": {
    +              "description": "Total Width Configuration\n          Register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TOTALW": {
    +                    "description": "Total Width (in units of pixel clock\n              period)",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "TOTALH": {
    +                    "description": "Total Height (in units of horizontal\n              scan line)",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "GCR": {
    +              "description": "Global Control Register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 8736,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HSPOL": {
    +                    "description": "Horizontal Synchronization\n              Polarity",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "VSPOL": {
    +                    "description": "Vertical Synchronization\n              Polarity",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "DEPOL": {
    +                    "description": "Data Enable Polarity",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "PCPOL": {
    +                    "description": "Pixel Clock Polarity",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "DEN": {
    +                    "description": "Dither Enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "DRW": {
    +                    "description": "Dither Red Width",
    +                    "offset": 12,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "DGW": {
    +                    "description": "Dither Green Width",
    +                    "offset": 8,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "DBW": {
    +                    "description": "Dither Blue Width",
    +                    "offset": 4,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "LTDCEN": {
    +                    "description": "LCD-TFT controller enable\n              bit",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SRCR": {
    +              "description": "Shadow Reload Configuration\n          Register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VBR": {
    +                    "description": "Vertical Blanking Reload",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IMR": {
    +                    "description": "Immediate Reload",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BCCR": {
    +              "description": "Background Color Configuration\n          Register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BC": {
    +                    "description": "Background Color Red value",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "IER": {
    +              "description": "Interrupt Enable Register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RRIE": {
    +                    "description": "Register Reload interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TERRIE": {
    +                    "description": "Transfer Error Interrupt\n              Enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FUIE": {
    +                    "description": "FIFO Underrun Interrupt\n              Enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "LIE": {
    +                    "description": "Line Interrupt Enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ISR": {
    +              "description": "Interrupt Status Register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RRIF": {
    +                    "description": "Register Reload Interrupt\n              Flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TERRIF": {
    +                    "description": "Transfer Error interrupt\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FUIF": {
    +                    "description": "FIFO Underrun Interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "LIF": {
    +                    "description": "Line Interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ICR": {
    +              "description": "Interrupt Clear Register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "CRRIF": {
    +                    "description": "Clears Register Reload Interrupt\n              Flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CTERRIF": {
    +                    "description": "Clears the Transfer Error Interrupt\n              Flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CFUIF": {
    +                    "description": "Clears the FIFO Underrun Interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CLIF": {
    +                    "description": "Clears the Line Interrupt\n              Flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "LIPCR": {
    +              "description": "Line Interrupt Position Configuration\n          Register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LIPOS": {
    +                    "description": "Line Interrupt Position",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "CPSR": {
    +              "description": "Current Position Status\n          Register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CXPOS": {
    +                    "description": "Current X Position",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CYPOS": {
    +                    "description": "Current Y Position",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CDSR": {
    +              "description": "Current Display Status\n          Register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 15,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "HSYNCS": {
    +                    "description": "Horizontal Synchronization display\n              Status",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "VSYNCS": {
    +                    "description": "Vertical Synchronization display\n              Status",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "HDES": {
    +                    "description": "Horizontal Data Enable display\n              Status",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "VDES": {
    +                    "description": "Vertical Data Enable display\n              Status",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "L1CR": {
    +              "description": "Layerx Control Register",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLUTEN": {
    +                    "description": "Color Look-Up Table Enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "COLKEN": {
    +                    "description": "Color Keying Enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "LEN": {
    +                    "description": "Layer Enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "L1WHPCR": {
    +              "description": "Layerx Window Horizontal Position\n          Configuration Register",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WHSPPOS": {
    +                    "description": "Window Horizontal Stop\n              Position",
    +                    "offset": 16,
    +                    "size": 12
    +                  },
    +                  "WHSTPOS": {
    +                    "description": "Window Horizontal Start\n              Position",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "L1WVPCR": {
    +              "description": "Layerx Window Vertical Position\n          Configuration Register",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WVSPPOS": {
    +                    "description": "Window Vertical Stop\n              Position",
    +                    "offset": 16,
    +                    "size": 11
    +                  },
    +                  "WVSTPOS": {
    +                    "description": "Window Vertical Start\n              Position",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "L1CKCR": {
    +              "description": "Layerx Color Keying Configuration\n          Register",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CKRED": {
    +                    "description": "Color Key Red value",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "CKGREEN": {
    +                    "description": "Color Key Green value",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "CKBLUE": {
    +                    "description": "Color Key Blue value",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "L1PFCR": {
    +              "description": "Layerx Pixel Format Configuration\n          Register",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PF": {
    +                    "description": "Pixel Format",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "L1CACR": {
    +              "description": "Layerx Constant Alpha Configuration\n          Register",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CONSTA": {
    +                    "description": "Constant Alpha",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "L1DCCR": {
    +              "description": "Layerx Default Color Configuration\n          Register",
    +              "offset": 156,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DCALPHA": {
    +                    "description": "Default Color Alpha",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DCRED": {
    +                    "description": "Default Color Red",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DCGREEN": {
    +                    "description": "Default Color Green",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DCBLUE": {
    +                    "description": "Default Color Blue",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "L1BFCR": {
    +              "description": "Layerx Blending Factors Configuration\n          Register",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 1543,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BF1": {
    +                    "description": "Blending Factor 1",
    +                    "offset": 8,
    +                    "size": 3
    +                  },
    +                  "BF2": {
    +                    "description": "Blending Factor 2",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "L1CFBAR": {
    +              "description": "Layerx Color Frame Buffer Address\n          Register",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CFBADD": {
    +                    "description": "Color Frame Buffer Start\n              Address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "L1CFBLR": {
    +              "description": "Layerx Color Frame Buffer Length\n          Register",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CFBP": {
    +                    "description": "Color Frame Buffer Pitch in\n              bytes",
    +                    "offset": 16,
    +                    "size": 13
    +                  },
    +                  "CFBLL": {
    +                    "description": "Color Frame Buffer Line\n              Length",
    +                    "offset": 0,
    +                    "size": 13
    +                  }
    +                }
    +              }
    +            },
    +            "L1CFBLNR": {
    +              "description": "Layerx ColorFrame Buffer Line Number\n          Register",
    +              "offset": 180,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CFBLNBR": {
    +                    "description": "Frame Buffer Line Number",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "L1CLUTWR": {
    +              "description": "Layerx CLUT Write Register",
    +              "offset": 196,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "CLUTADD": {
    +                    "description": "CLUT Address",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "RED": {
    +                    "description": "Red value",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "GREEN": {
    +                    "description": "Green value",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "BLUE": {
    +                    "description": "Blue value",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "L2CR": {
    +              "description": "Layerx Control Register",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLUTEN": {
    +                    "description": "Color Look-Up Table Enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "COLKEN": {
    +                    "description": "Color Keying Enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "LEN": {
    +                    "description": "Layer Enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "L2WHPCR": {
    +              "description": "Layerx Window Horizontal Position\n          Configuration Register",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WHSPPOS": {
    +                    "description": "Window Horizontal Stop\n              Position",
    +                    "offset": 16,
    +                    "size": 12
    +                  },
    +                  "WHSTPOS": {
    +                    "description": "Window Horizontal Start\n              Position",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "L2WVPCR": {
    +              "description": "Layerx Window Vertical Position\n          Configuration Register",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WVSPPOS": {
    +                    "description": "Window Vertical Stop\n              Position",
    +                    "offset": 16,
    +                    "size": 11
    +                  },
    +                  "WVSTPOS": {
    +                    "description": "Window Vertical Start\n              Position",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "L2CKCR": {
    +              "description": "Layerx Color Keying Configuration\n          Register",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CKRED": {
    +                    "description": "Color Key Red value",
    +                    "offset": 15,
    +                    "size": 9
    +                  },
    +                  "CKGREEN": {
    +                    "description": "Color Key Green value",
    +                    "offset": 8,
    +                    "size": 7
    +                  },
    +                  "CKBLUE": {
    +                    "description": "Color Key Blue value",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "L2PFCR": {
    +              "description": "Layerx Pixel Format Configuration\n          Register",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PF": {
    +                    "description": "Pixel Format",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "L2CACR": {
    +              "description": "Layerx Constant Alpha Configuration\n          Register",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CONSTA": {
    +                    "description": "Constant Alpha",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "L2DCCR": {
    +              "description": "Layerx Default Color Configuration\n          Register",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DCALPHA": {
    +                    "description": "Default Color Alpha",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DCRED": {
    +                    "description": "Default Color Red",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DCGREEN": {
    +                    "description": "Default Color Green",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DCBLUE": {
    +                    "description": "Default Color Blue",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "L2BFCR": {
    +              "description": "Layerx Blending Factors Configuration\n          Register",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 1543,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BF1": {
    +                    "description": "Blending Factor 1",
    +                    "offset": 8,
    +                    "size": 3
    +                  },
    +                  "BF2": {
    +                    "description": "Blending Factor 2",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "L2CFBAR": {
    +              "description": "Layerx Color Frame Buffer Address\n          Register",
    +              "offset": 300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CFBADD": {
    +                    "description": "Color Frame Buffer Start\n              Address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "L2CFBLR": {
    +              "description": "Layerx Color Frame Buffer Length\n          Register",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CFBP": {
    +                    "description": "Color Frame Buffer Pitch in\n              bytes",
    +                    "offset": 16,
    +                    "size": 13
    +                  },
    +                  "CFBLL": {
    +                    "description": "Color Frame Buffer Line\n              Length",
    +                    "offset": 0,
    +                    "size": 13
    +                  }
    +                }
    +              }
    +            },
    +            "L2CFBLNR": {
    +              "description": "Layerx ColorFrame Buffer Line Number\n          Register",
    +              "offset": 308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CFBLNBR": {
    +                    "description": "Frame Buffer Line Number",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "L2CLUTWR": {
    +              "description": "Layerx CLUT Write Register",
    +              "offset": 324,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "CLUTADD": {
    +                    "description": "CLUT Address",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "RED": {
    +                    "description": "Red value",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "GREEN": {
    +                    "description": "Green value",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "BLUE": {
    +                    "description": "Blue value",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SAI1": {
    +        "description": "Serial audio interface",
    +        "children": {
    +          "registers": {
    +            "SAI_ACR1": {
    +              "description": "SAI AConfiguration register 1",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 64,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MCKDIV": {
    +                    "description": "Master clock divider",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "MODE": {
    +                    "description": "Audio block mode",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "PRTCFG": {
    +                    "description": "Protocol configuration",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "DS": {
    +                    "description": "Data size",
    +                    "offset": 5,
    +                    "size": 3
    +                  },
    +                  "LSBFIRST": {
    +                    "description": "Least significant bit\n              first",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CKSTR": {
    +                    "description": "Clock strobing edge",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SYNCEN": {
    +                    "description": "Synchronization enable",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "MONO": {
    +                    "description": "Mono mode",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "OUTDRIV": {
    +                    "description": "Output drive",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "SAIAEN": {
    +                    "description": "Audio block enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "DMAEN": {
    +                    "description": "DMA enable",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "NODIV": {
    +                    "description": "No divider",
    +                    "offset": 19,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SAI_BCR1": {
    +              "description": "SAI BConfiguration register 1",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 64,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MODE": {
    +                    "description": "Audio block mode",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "PRTCFG": {
    +                    "description": "Protocol configuration",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "DS": {
    +                    "description": "Data size",
    +                    "offset": 5,
    +                    "size": 3
    +                  },
    +                  "LSBFIRST": {
    +                    "description": "Least significant bit\n              first",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CKSTR": {
    +                    "description": "Clock strobing edge",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SYNCEN": {
    +                    "description": "Synchronization enable",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "MONO": {
    +                    "description": "Mono mode",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "OUTDRIV": {
    +                    "description": "Output drive",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "SAIBEN": {
    +                    "description": "Audio block enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "DMAEN": {
    +                    "description": "DMA enable",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "NODIV": {
    +                    "description": "No divider",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "MCKDIV": {
    +                    "description": "Master clock divider",
    +                    "offset": 20,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "SAI_ACR2": {
    +              "description": "SAI AConfiguration register 2",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 64,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FTH": {
    +                    "description": "FIFO threshold",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "FFLUSH": {
    +                    "description": "FIFO flush",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TRIS": {
    +                    "description": "Tristate management on data\n              line",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "MUTE": {
    +                    "description": "Mute",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "MUTEVAL": {
    +                    "description": "Mute value",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MUTECNT": {
    +                    "description": "Mute counter",
    +                    "offset": 7,
    +                    "size": 6
    +                  },
    +                  "CPL": {
    +                    "description": "Complement bit",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "COMP": {
    +                    "description": "Companding mode",
    +                    "offset": 14,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "SAI_BCR2": {
    +              "description": "SAI BConfiguration register 2",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 64,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FTH": {
    +                    "description": "FIFO threshold",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "FFLUSH": {
    +                    "description": "FIFO flush",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TRIS": {
    +                    "description": "Tristate management on data\n              line",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "MUTE": {
    +                    "description": "Mute",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "MUTEVAL": {
    +                    "description": "Mute value",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MUTECNT": {
    +                    "description": "Mute counter",
    +                    "offset": 7,
    +                    "size": 6
    +                  },
    +                  "CPL": {
    +                    "description": "Complement bit",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "COMP": {
    +                    "description": "Companding mode",
    +                    "offset": 14,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "SAI_AFRCR": {
    +              "description": "SAI AFrame configuration\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 7,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FRL": {
    +                    "description": "Frame length",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "FSALL": {
    +                    "description": "Frame synchronization active level\n              length",
    +                    "offset": 8,
    +                    "size": 7
    +                  },
    +                  "FSDEF": {
    +                    "description": "Frame synchronization\n              definition",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FSPOL": {
    +                    "description": "Frame synchronization\n              polarity",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FSOFF": {
    +                    "description": "Frame synchronization\n              offset",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SAI_BFRCR": {
    +              "description": "SAI BFrame configuration\n          register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 7,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FRL": {
    +                    "description": "Frame length",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "FSALL": {
    +                    "description": "Frame synchronization active level\n              length",
    +                    "offset": 8,
    +                    "size": 7
    +                  },
    +                  "FSDEF": {
    +                    "description": "Frame synchronization\n              definition",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FSPOL": {
    +                    "description": "Frame synchronization\n              polarity",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FSOFF": {
    +                    "description": "Frame synchronization\n              offset",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SAI_ASLOTR": {
    +              "description": "SAI ASlot register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FBOFF": {
    +                    "description": "First bit offset",
    +                    "offset": 0,
    +                    "size": 5
    +                  },
    +                  "SLOTSZ": {
    +                    "description": "Slot size",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "NBSLOT": {
    +                    "description": "Number of slots in an audio\n              frame",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "SLOTEN": {
    +                    "description": "Slot enable",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SAI_BSLOTR": {
    +              "description": "SAI BSlot register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FBOFF": {
    +                    "description": "First bit offset",
    +                    "offset": 0,
    +                    "size": 5
    +                  },
    +                  "SLOTSZ": {
    +                    "description": "Slot size",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "NBSLOT": {
    +                    "description": "Number of slots in an audio\n              frame",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "SLOTEN": {
    +                    "description": "Slot enable",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SAI_AIM": {
    +              "description": "SAI AInterrupt mask register2",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OVRUDRIE": {
    +                    "description": "Overrun/underrun interrupt\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MUTEDETIE": {
    +                    "description": "Mute detection interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "WCKCFGIE": {
    +                    "description": "Wrong clock configuration interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FREQIE": {
    +                    "description": "FIFO request interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CNRDYIE": {
    +                    "description": "Codec not ready interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "AFSDETIE": {
    +                    "description": "Anticipated frame synchronization\n              detection interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "LFSDETIE": {
    +                    "description": "Late frame synchronization detection\n              interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SAI_BIM": {
    +              "description": "SAI BInterrupt mask register2",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OVRUDRIE": {
    +                    "description": "Overrun/underrun interrupt\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MUTEDETIE": {
    +                    "description": "Mute detection interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "WCKCFGIE": {
    +                    "description": "Wrong clock configuration interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FREQIE": {
    +                    "description": "FIFO request interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CNRDYIE": {
    +                    "description": "Codec not ready interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "AFSDETIE": {
    +                    "description": "Anticipated frame synchronization\n              detection interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "LFSDETIE": {
    +                    "description": "Late frame synchronization detection\n              interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SAI_ASR": {
    +              "description": "SAI AStatus register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 8,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "OVRUDR": {
    +                    "description": "Overrun / underrun",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MUTEDET": {
    +                    "description": "Mute detection",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "WCKCFG": {
    +                    "description": "Wrong clock configuration\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FREQ": {
    +                    "description": "FIFO request",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CNRDY": {
    +                    "description": "Codec not ready",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "AFSDET": {
    +                    "description": "Anticipated frame synchronization\n              detection",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "LFSDET": {
    +                    "description": "Late frame synchronization\n              detection",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FLTH": {
    +                    "description": "FIFO level threshold",
    +                    "offset": 16,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "SAI_BSR": {
    +              "description": "SAI BStatus register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 8,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "OVRUDR": {
    +                    "description": "Overrun / underrun",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MUTEDET": {
    +                    "description": "Mute detection",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "WCKCFG": {
    +                    "description": "Wrong clock configuration\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FREQ": {
    +                    "description": "FIFO request",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CNRDY": {
    +                    "description": "Codec not ready",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "AFSDET": {
    +                    "description": "Anticipated frame synchronization\n              detection",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "LFSDET": {
    +                    "description": "Late frame synchronization\n              detection",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FLTH": {
    +                    "description": "FIFO level threshold",
    +                    "offset": 16,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "SAI_ACLRFR": {
    +              "description": "SAI AClear flag register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COVRUDR": {
    +                    "description": "Clear overrun / underrun",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CMUTEDET": {
    +                    "description": "Mute detection flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CWCKCFG": {
    +                    "description": "Clear wrong clock configuration\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CCNRDY": {
    +                    "description": "Clear codec not ready flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CAFSDET": {
    +                    "description": "Clear anticipated frame synchronization\n              detection flag",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CLFSDET": {
    +                    "description": "Clear late frame synchronization\n              detection flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SAI_BCLRFR": {
    +              "description": "SAI BClear flag register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COVRUDR": {
    +                    "description": "Clear overrun / underrun",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CMUTEDET": {
    +                    "description": "Mute detection flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CWCKCFG": {
    +                    "description": "Clear wrong clock configuration\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CCNRDY": {
    +                    "description": "Clear codec not ready flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CAFSDET": {
    +                    "description": "Clear anticipated frame synchronization\n              detection flag",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CLFSDET": {
    +                    "description": "Clear late frame synchronization\n              detection flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SAI_ADR": {
    +              "description": "SAI AData register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Data",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "SAI_BDR": {
    +              "description": "SAI BData register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Data",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "NVIC": {
    +        "description": "Nested Vectored Interrupt\n      Controller",
    +        "children": {
    +          "registers": {
    +            "ISER0": {
    +              "description": "Interrupt Set-Enable Register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SETENA": {
    +                    "description": "SETENA",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ISER1": {
    +              "description": "Interrupt Set-Enable Register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SETENA": {
    +                    "description": "SETENA",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ISER2": {
    +              "description": "Interrupt Set-Enable Register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SETENA": {
    +                    "description": "SETENA",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICER0": {
    +              "description": "Interrupt Clear-Enable\n          Register",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLRENA": {
    +                    "description": "CLRENA",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICER1": {
    +              "description": "Interrupt Clear-Enable\n          Register",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLRENA": {
    +                    "description": "CLRENA",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICER2": {
    +              "description": "Interrupt Clear-Enable\n          Register",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLRENA": {
    +                    "description": "CLRENA",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ISPR0": {
    +              "description": "Interrupt Set-Pending Register",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SETPEND": {
    +                    "description": "SETPEND",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ISPR1": {
    +              "description": "Interrupt Set-Pending Register",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SETPEND": {
    +                    "description": "SETPEND",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ISPR2": {
    +              "description": "Interrupt Set-Pending Register",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SETPEND": {
    +                    "description": "SETPEND",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICPR0": {
    +              "description": "Interrupt Clear-Pending\n          Register",
    +              "offset": 384,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLRPEND": {
    +                    "description": "CLRPEND",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICPR1": {
    +              "description": "Interrupt Clear-Pending\n          Register",
    +              "offset": 388,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLRPEND": {
    +                    "description": "CLRPEND",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICPR2": {
    +              "description": "Interrupt Clear-Pending\n          Register",
    +              "offset": 392,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLRPEND": {
    +                    "description": "CLRPEND",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IABR0": {
    +              "description": "Interrupt Active Bit Register",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ACTIVE": {
    +                    "description": "ACTIVE",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IABR1": {
    +              "description": "Interrupt Active Bit Register",
    +              "offset": 516,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ACTIVE": {
    +                    "description": "ACTIVE",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IABR2": {
    +              "description": "Interrupt Active Bit Register",
    +              "offset": 520,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ACTIVE": {
    +                    "description": "ACTIVE",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IPR0": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR1": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR2": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR3": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 780,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR4": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 784,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR5": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 788,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR6": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 792,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR7": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 796,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR8": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 800,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR9": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 804,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR10": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 808,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR11": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 812,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR12": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 816,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR13": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 820,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR14": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 824,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR15": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 828,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR16": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 832,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR17": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 836,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR18": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 840,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR19": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 844,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "OTG_HS_PWRCLK": {
    +        "description": "USB on the go high speed",
    +        "children": {
    +          "registers": {
    +            "OTG_HS_PCGCR": {
    +              "description": "Power and clock gating control\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STPPCLK": {
    +                    "description": "Stop PHY clock",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "GATEHCLK": {
    +                    "description": "Gate HCLK",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PHYSUSP": {
    +                    "description": "PHY suspended",
    +                    "offset": 4,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "OTG_HS_DEVICE": {
    +        "description": "USB on the go high speed",
    +        "children": {
    +          "registers": {
    +            "OTG_HS_DCFG": {
    +              "description": "OTG_HS device configuration\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 35651584,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DSPD": {
    +                    "description": "Device speed",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "NZLSOHSK": {
    +                    "description": "Nonzero-length status OUT\n              handshake",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 4,
    +                    "size": 7
    +                  },
    +                  "PFIVL": {
    +                    "description": "Periodic (micro)frame\n              interval",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "PERSCHIVL": {
    +                    "description": "Periodic scheduling\n              interval",
    +                    "offset": 24,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DCTL": {
    +              "description": "OTG_HS device control register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RWUSIG": {
    +                    "description": "Remote wakeup signaling",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SDIS": {
    +                    "description": "Soft disconnect",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GINSTS": {
    +                    "description": "Global IN NAK status",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GONSTS": {
    +                    "description": "Global OUT NAK status",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TCTL": {
    +                    "description": "Test control",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SGINAK": {
    +                    "description": "Set global IN NAK",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CGINAK": {
    +                    "description": "Clear global IN NAK",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SGONAK": {
    +                    "description": "Set global OUT NAK",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CGONAK": {
    +                    "description": "Clear global OUT NAK",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "POPRGDNE": {
    +                    "description": "Power-on programming done",
    +                    "offset": 11,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DSTS": {
    +              "description": "OTG_HS device status register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 16,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SUSPSTS": {
    +                    "description": "Suspend status",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ENUMSPD": {
    +                    "description": "Enumerated speed",
    +                    "offset": 1,
    +                    "size": 2
    +                  },
    +                  "EERR": {
    +                    "description": "Erratic error",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FNSOF": {
    +                    "description": "Frame number of the received\n              SOF",
    +                    "offset": 8,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPMSK": {
    +              "description": "OTG_HS device IN endpoint common interrupt\n          mask register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed interrupt\n              mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDM": {
    +                    "description": "Endpoint disabled interrupt\n              mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TOM": {
    +                    "description": "Timeout condition mask (nonisochronous\n              endpoints)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ITTXFEMSK": {
    +                    "description": "IN token received when TxFIFO empty\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INEPNMM": {
    +                    "description": "IN token received with EP mismatch\n              mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INEPNEM": {
    +                    "description": "IN endpoint NAK effective\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXFURM": {
    +                    "description": "FIFO underrun mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BIM": {
    +                    "description": "BNA interrupt mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPMSK": {
    +              "description": "OTG_HS device OUT endpoint common interrupt\n          mask register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed interrupt\n              mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDM": {
    +                    "description": "Endpoint disabled interrupt\n              mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STUPM": {
    +                    "description": "SETUP phase done mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OTEPDM": {
    +                    "description": "OUT token received when endpoint\n              disabled mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "B2BSTUP": {
    +                    "description": "Back-to-back SETUP packets received\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "OPEM": {
    +                    "description": "OUT packet error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BOIM": {
    +                    "description": "BNA interrupt mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DAINT": {
    +              "description": "OTG_HS device all endpoints interrupt\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IEPINT": {
    +                    "description": "IN endpoint interrupt bits",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "OEPINT": {
    +                    "description": "OUT endpoint interrupt\n              bits",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DAINTMSK": {
    +              "description": "OTG_HS all endpoints interrupt mask\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IEPM": {
    +                    "description": "IN EP interrupt mask bits",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "OEPM": {
    +                    "description": "OUT EP interrupt mask bits",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DVBUSDIS": {
    +              "description": "OTG_HS device VBUS discharge time\n          register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 6103,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VBUSDT": {
    +                    "description": "Device VBUS discharge time",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DVBUSPULSE": {
    +              "description": "OTG_HS device VBUS pulsing time\n          register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 1464,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DVBUSP": {
    +                    "description": "Device VBUS pulsing time",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DTHRCTL": {
    +              "description": "OTG_HS Device threshold control\n          register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NONISOTHREN": {
    +                    "description": "Nonisochronous IN endpoints threshold\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ISOTHREN": {
    +                    "description": "ISO IN endpoint threshold\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TXTHRLEN": {
    +                    "description": "Transmit threshold length",
    +                    "offset": 2,
    +                    "size": 9
    +                  },
    +                  "RXTHREN": {
    +                    "description": "Receive threshold enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RXTHRLEN": {
    +                    "description": "Receive threshold length",
    +                    "offset": 17,
    +                    "size": 9
    +                  },
    +                  "ARPEN": {
    +                    "description": "Arbiter parking enable",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPEMPMSK": {
    +              "description": "OTG_HS device IN endpoint FIFO empty\n          interrupt mask register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXFEM": {
    +                    "description": "IN EP Tx FIFO empty interrupt mask\n              bits",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DEACHINT": {
    +              "description": "OTG_HS device each endpoint interrupt\n          register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IEP1INT": {
    +                    "description": "IN endpoint 1interrupt bit",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OEP1INT": {
    +                    "description": "OUT endpoint 1 interrupt\n              bit",
    +                    "offset": 17,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DEACHINTMSK": {
    +              "description": "OTG_HS device each endpoint interrupt\n          register mask",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IEP1INTM": {
    +                    "description": "IN Endpoint 1 interrupt mask\n              bit",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OEP1INTM": {
    +                    "description": "OUT Endpoint 1 interrupt mask\n              bit",
    +                    "offset": 17,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPEACHMSK1": {
    +              "description": "OTG_HS device each in endpoint-1 interrupt\n          register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed interrupt\n              mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDM": {
    +                    "description": "Endpoint disabled interrupt\n              mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TOM": {
    +                    "description": "Timeout condition mask (nonisochronous\n              endpoints)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ITTXFEMSK": {
    +                    "description": "IN token received when TxFIFO empty\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INEPNMM": {
    +                    "description": "IN token received with EP mismatch\n              mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INEPNEM": {
    +                    "description": "IN endpoint NAK effective\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXFURM": {
    +                    "description": "FIFO underrun mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BIM": {
    +                    "description": "BNA interrupt mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK interrupt mask",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPEACHMSK1": {
    +              "description": "OTG_HS device each OUT endpoint-1 interrupt\n          register",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed interrupt\n              mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDM": {
    +                    "description": "Endpoint disabled interrupt\n              mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TOM": {
    +                    "description": "Timeout condition mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ITTXFEMSK": {
    +                    "description": "IN token received when TxFIFO empty\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INEPNMM": {
    +                    "description": "IN token received with EP mismatch\n              mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INEPNEM": {
    +                    "description": "IN endpoint NAK effective\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXFURM": {
    +                    "description": "OUT packet error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BIM": {
    +                    "description": "BNA interrupt mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BERRM": {
    +                    "description": "Bubble error interrupt\n              mask",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK interrupt mask",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "NYETM": {
    +                    "description": "NYET interrupt mask",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPCTL0": {
    +              "description": "OTG device endpoint-0 control\n          register",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "USBAEP": {
    +                    "description": "USB active endpoint",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "Even/odd frame",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "Stall": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TxFIFO number",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "Set DATA0 PID",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SODDFRM": {
    +                    "description": "Set odd frame",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPENA": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPCTL1": {
    +              "description": "OTG device endpoint-1 control\n          register",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "USBAEP": {
    +                    "description": "USB active endpoint",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "Even/odd frame",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "Stall": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TxFIFO number",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "Set DATA0 PID",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SODDFRM": {
    +                    "description": "Set odd frame",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPENA": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPCTL2": {
    +              "description": "OTG device endpoint-2 control\n          register",
    +              "offset": 320,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "USBAEP": {
    +                    "description": "USB active endpoint",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "Even/odd frame",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "Stall": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TxFIFO number",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "Set DATA0 PID",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SODDFRM": {
    +                    "description": "Set odd frame",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPENA": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPCTL3": {
    +              "description": "OTG device endpoint-3 control\n          register",
    +              "offset": 352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "USBAEP": {
    +                    "description": "USB active endpoint",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "Even/odd frame",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "Stall": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TxFIFO number",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "Set DATA0 PID",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SODDFRM": {
    +                    "description": "Set odd frame",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPENA": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPCTL4": {
    +              "description": "OTG device endpoint-4 control\n          register",
    +              "offset": 384,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "USBAEP": {
    +                    "description": "USB active endpoint",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "Even/odd frame",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "Stall": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TxFIFO number",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "Set DATA0 PID",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SODDFRM": {
    +                    "description": "Set odd frame",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPENA": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPCTL5": {
    +              "description": "OTG device endpoint-5 control\n          register",
    +              "offset": 416,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "USBAEP": {
    +                    "description": "USB active endpoint",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "Even/odd frame",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "Stall": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TxFIFO number",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "Set DATA0 PID",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SODDFRM": {
    +                    "description": "Set odd frame",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPENA": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPCTL6": {
    +              "description": "OTG device endpoint-6 control\n          register",
    +              "offset": 448,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "USBAEP": {
    +                    "description": "USB active endpoint",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "Even/odd frame",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "Stall": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TxFIFO number",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "Set DATA0 PID",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SODDFRM": {
    +                    "description": "Set odd frame",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPENA": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPCTL7": {
    +              "description": "OTG device endpoint-7 control\n          register",
    +              "offset": 480,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "USBAEP": {
    +                    "description": "USB active endpoint",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "Even/odd frame",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "Stall": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TxFIFO number",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "Set DATA0 PID",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SODDFRM": {
    +                    "description": "Set odd frame",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPENA": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPINT0": {
    +              "description": "OTG device endpoint-0 interrupt\n          register",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "Timeout condition",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "IN token received when TxFIFO is\n              empty",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INEPNE": {
    +                    "description": "IN endpoint NAK effective",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXFE": {
    +                    "description": "Transmit FIFO empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXFIFOUDRN": {
    +                    "description": "Transmit Fifo Underrun",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BNA": {
    +                    "description": "Buffer not available\n              interrupt",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PKTDRPSTS": {
    +                    "description": "Packet dropped status",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BERR": {
    +                    "description": "Babble error interrupt",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK interrupt",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPINT1": {
    +              "description": "OTG device endpoint-1 interrupt\n          register",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "Timeout condition",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "IN token received when TxFIFO is\n              empty",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INEPNE": {
    +                    "description": "IN endpoint NAK effective",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXFE": {
    +                    "description": "Transmit FIFO empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXFIFOUDRN": {
    +                    "description": "Transmit Fifo Underrun",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BNA": {
    +                    "description": "Buffer not available\n              interrupt",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PKTDRPSTS": {
    +                    "description": "Packet dropped status",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BERR": {
    +                    "description": "Babble error interrupt",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK interrupt",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPINT2": {
    +              "description": "OTG device endpoint-2 interrupt\n          register",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "Timeout condition",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "IN token received when TxFIFO is\n              empty",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INEPNE": {
    +                    "description": "IN endpoint NAK effective",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXFE": {
    +                    "description": "Transmit FIFO empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXFIFOUDRN": {
    +                    "description": "Transmit Fifo Underrun",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BNA": {
    +                    "description": "Buffer not available\n              interrupt",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PKTDRPSTS": {
    +                    "description": "Packet dropped status",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BERR": {
    +                    "description": "Babble error interrupt",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK interrupt",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPINT3": {
    +              "description": "OTG device endpoint-3 interrupt\n          register",
    +              "offset": 360,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "Timeout condition",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "IN token received when TxFIFO is\n              empty",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INEPNE": {
    +                    "description": "IN endpoint NAK effective",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXFE": {
    +                    "description": "Transmit FIFO empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXFIFOUDRN": {
    +                    "description": "Transmit Fifo Underrun",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BNA": {
    +                    "description": "Buffer not available\n              interrupt",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PKTDRPSTS": {
    +                    "description": "Packet dropped status",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BERR": {
    +                    "description": "Babble error interrupt",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK interrupt",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPINT4": {
    +              "description": "OTG device endpoint-4 interrupt\n          register",
    +              "offset": 392,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "Timeout condition",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "IN token received when TxFIFO is\n              empty",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INEPNE": {
    +                    "description": "IN endpoint NAK effective",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXFE": {
    +                    "description": "Transmit FIFO empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXFIFOUDRN": {
    +                    "description": "Transmit Fifo Underrun",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BNA": {
    +                    "description": "Buffer not available\n              interrupt",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PKTDRPSTS": {
    +                    "description": "Packet dropped status",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BERR": {
    +                    "description": "Babble error interrupt",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK interrupt",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPINT5": {
    +              "description": "OTG device endpoint-5 interrupt\n          register",
    +              "offset": 424,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "Timeout condition",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "IN token received when TxFIFO is\n              empty",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INEPNE": {
    +                    "description": "IN endpoint NAK effective",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXFE": {
    +                    "description": "Transmit FIFO empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXFIFOUDRN": {
    +                    "description": "Transmit Fifo Underrun",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BNA": {
    +                    "description": "Buffer not available\n              interrupt",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PKTDRPSTS": {
    +                    "description": "Packet dropped status",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BERR": {
    +                    "description": "Babble error interrupt",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK interrupt",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPINT6": {
    +              "description": "OTG device endpoint-6 interrupt\n          register",
    +              "offset": 456,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "Timeout condition",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "IN token received when TxFIFO is\n              empty",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INEPNE": {
    +                    "description": "IN endpoint NAK effective",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXFE": {
    +                    "description": "Transmit FIFO empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXFIFOUDRN": {
    +                    "description": "Transmit Fifo Underrun",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BNA": {
    +                    "description": "Buffer not available\n              interrupt",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PKTDRPSTS": {
    +                    "description": "Packet dropped status",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BERR": {
    +                    "description": "Babble error interrupt",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK interrupt",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPINT7": {
    +              "description": "OTG device endpoint-7 interrupt\n          register",
    +              "offset": 488,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "Timeout condition",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "IN token received when TxFIFO is\n              empty",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INEPNE": {
    +                    "description": "IN endpoint NAK effective",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXFE": {
    +                    "description": "Transmit FIFO empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXFIFOUDRN": {
    +                    "description": "Transmit Fifo Underrun",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BNA": {
    +                    "description": "Buffer not available\n              interrupt",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PKTDRPSTS": {
    +                    "description": "Packet dropped status",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BERR": {
    +                    "description": "Babble error interrupt",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK interrupt",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPTSIZ0": {
    +              "description": "OTG_HS device IN endpoint 0 transfer size\n          register",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPDMA1": {
    +              "description": "OTG_HS device endpoint-1 DMA address\n          register",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPDMA2": {
    +              "description": "OTG_HS device endpoint-2 DMA address\n          register",
    +              "offset": 308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPDMA3": {
    +              "description": "OTG_HS device endpoint-3 DMA address\n          register",
    +              "offset": 340,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPDMA4": {
    +              "description": "OTG_HS device endpoint-4 DMA address\n          register",
    +              "offset": 372,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPDMA5": {
    +              "description": "OTG_HS device endpoint-5 DMA address\n          register",
    +              "offset": 404,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DTXFSTS0": {
    +              "description": "OTG_HS device IN endpoint transmit FIFO\n          status register",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INEPTFSAV": {
    +                    "description": "IN endpoint TxFIFO space\n              avail",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DTXFSTS1": {
    +              "description": "OTG_HS device IN endpoint transmit FIFO\n          status register",
    +              "offset": 312,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INEPTFSAV": {
    +                    "description": "IN endpoint TxFIFO space\n              avail",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DTXFSTS2": {
    +              "description": "OTG_HS device IN endpoint transmit FIFO\n          status register",
    +              "offset": 344,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INEPTFSAV": {
    +                    "description": "IN endpoint TxFIFO space\n              avail",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DTXFSTS3": {
    +              "description": "OTG_HS device IN endpoint transmit FIFO\n          status register",
    +              "offset": 376,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INEPTFSAV": {
    +                    "description": "IN endpoint TxFIFO space\n              avail",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DTXFSTS4": {
    +              "description": "OTG_HS device IN endpoint transmit FIFO\n          status register",
    +              "offset": 408,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INEPTFSAV": {
    +                    "description": "IN endpoint TxFIFO space\n              avail",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DTXFSTS5": {
    +              "description": "OTG_HS device IN endpoint transmit FIFO\n          status register",
    +              "offset": 440,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INEPTFSAV": {
    +                    "description": "IN endpoint TxFIFO space\n              avail",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPTSIZ1": {
    +              "description": "OTG_HS device endpoint transfer size\n          register",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "MCNT": {
    +                    "description": "Multi count",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPTSIZ2": {
    +              "description": "OTG_HS device endpoint transfer size\n          register",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "MCNT": {
    +                    "description": "Multi count",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPTSIZ3": {
    +              "description": "OTG_HS device endpoint transfer size\n          register",
    +              "offset": 368,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "MCNT": {
    +                    "description": "Multi count",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPTSIZ4": {
    +              "description": "OTG_HS device endpoint transfer size\n          register",
    +              "offset": 400,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "MCNT": {
    +                    "description": "Multi count",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPTSIZ5": {
    +              "description": "OTG_HS device endpoint transfer size\n          register",
    +              "offset": 432,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "MCNT": {
    +                    "description": "Multi count",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPCTL0": {
    +              "description": "OTG_HS device control OUT endpoint 0 control\n          register",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 32768,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "USBAEP": {
    +                    "description": "USB active endpoint",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "SNPM": {
    +                    "description": "Snoop mode",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "Stall": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPENA": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPCTL1": {
    +              "description": "OTG device endpoint-1 control\n          register",
    +              "offset": 800,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "USBAEP": {
    +                    "description": "USB active endpoint",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "Even odd frame/Endpoint data\n              PID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "SNPM": {
    +                    "description": "Snoop mode",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "Stall": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "Set DATA0 PID/Set even\n              frame",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SODDFRM": {
    +                    "description": "Set odd frame",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPENA": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPCTL2": {
    +              "description": "OTG device endpoint-2 control\n          register",
    +              "offset": 832,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "USBAEP": {
    +                    "description": "USB active endpoint",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "Even odd frame/Endpoint data\n              PID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "SNPM": {
    +                    "description": "Snoop mode",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "Stall": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "Set DATA0 PID/Set even\n              frame",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SODDFRM": {
    +                    "description": "Set odd frame",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPENA": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPCTL3": {
    +              "description": "OTG device endpoint-3 control\n          register",
    +              "offset": 864,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "USBAEP": {
    +                    "description": "USB active endpoint",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "Even odd frame/Endpoint data\n              PID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "SNPM": {
    +                    "description": "Snoop mode",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "Stall": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "Set DATA0 PID/Set even\n              frame",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SODDFRM": {
    +                    "description": "Set odd frame",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPENA": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPINT0": {
    +              "description": "OTG_HS device endpoint-0 interrupt\n          register",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "SETUP phase done",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OUT token received when endpoint\n              disabled",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "B2BSTUP": {
    +                    "description": "Back-to-back SETUP packets\n              received",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "NYET interrupt",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPINT1": {
    +              "description": "OTG_HS device endpoint-1 interrupt\n          register",
    +              "offset": 808,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "SETUP phase done",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OUT token received when endpoint\n              disabled",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "B2BSTUP": {
    +                    "description": "Back-to-back SETUP packets\n              received",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "NYET interrupt",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPINT2": {
    +              "description": "OTG_HS device endpoint-2 interrupt\n          register",
    +              "offset": 840,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "SETUP phase done",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OUT token received when endpoint\n              disabled",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "B2BSTUP": {
    +                    "description": "Back-to-back SETUP packets\n              received",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "NYET interrupt",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPINT3": {
    +              "description": "OTG_HS device endpoint-3 interrupt\n          register",
    +              "offset": 872,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "SETUP phase done",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OUT token received when endpoint\n              disabled",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "B2BSTUP": {
    +                    "description": "Back-to-back SETUP packets\n              received",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "NYET interrupt",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPINT4": {
    +              "description": "OTG_HS device endpoint-4 interrupt\n          register",
    +              "offset": 904,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "SETUP phase done",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OUT token received when endpoint\n              disabled",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "B2BSTUP": {
    +                    "description": "Back-to-back SETUP packets\n              received",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "NYET interrupt",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPINT5": {
    +              "description": "OTG_HS device endpoint-5 interrupt\n          register",
    +              "offset": 936,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "SETUP phase done",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OUT token received when endpoint\n              disabled",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "B2BSTUP": {
    +                    "description": "Back-to-back SETUP packets\n              received",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "NYET interrupt",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPINT6": {
    +              "description": "OTG_HS device endpoint-6 interrupt\n          register",
    +              "offset": 968,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "SETUP phase done",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OUT token received when endpoint\n              disabled",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "B2BSTUP": {
    +                    "description": "Back-to-back SETUP packets\n              received",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "NYET interrupt",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPINT7": {
    +              "description": "OTG_HS device endpoint-7 interrupt\n          register",
    +              "offset": 1000,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "SETUP phase done",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OUT token received when endpoint\n              disabled",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "B2BSTUP": {
    +                    "description": "Back-to-back SETUP packets\n              received",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "NYET interrupt",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPTSIZ0": {
    +              "description": "OTG_HS device endpoint-1 transfer size\n          register",
    +              "offset": 784,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "STUPCNT": {
    +                    "description": "SETUP packet count",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPTSIZ1": {
    +              "description": "OTG_HS device endpoint-2 transfer size\n          register",
    +              "offset": 816,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "RXDPID_STUPCNT": {
    +                    "description": "Received data PID/SETUP packet\n              count",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPTSIZ2": {
    +              "description": "OTG_HS device endpoint-3 transfer size\n          register",
    +              "offset": 848,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "RXDPID_STUPCNT": {
    +                    "description": "Received data PID/SETUP packet\n              count",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPTSIZ3": {
    +              "description": "OTG_HS device endpoint-4 transfer size\n          register",
    +              "offset": 880,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "RXDPID_STUPCNT": {
    +                    "description": "Received data PID/SETUP packet\n              count",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPTSIZ4": {
    +              "description": "OTG_HS device endpoint-5 transfer size\n          register",
    +              "offset": 912,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "RXDPID_STUPCNT": {
    +                    "description": "Received data PID/SETUP packet\n              count",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "OTG_HS_HOST": {
    +        "description": "USB on the go high speed",
    +        "children": {
    +          "registers": {
    +            "OTG_HS_HCFG": {
    +              "description": "OTG_HS host configuration\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FSLSPCS": {
    +                    "description": "FS/LS PHY clock select",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "FSLSS": {
    +                    "description": "FS- and LS-only support",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HFIR": {
    +              "description": "OTG_HS Host frame interval\n          register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 60000,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FRIVL": {
    +                    "description": "Frame interval",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HFNUM": {
    +              "description": "OTG_HS host frame number/frame time\n          remaining register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 16383,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "FRNUM": {
    +                    "description": "Frame number",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "FTREM": {
    +                    "description": "Frame time remaining",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HPTXSTS": {
    +              "description": "OTG_HS_Host periodic transmit FIFO/queue\n          status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 524544,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PTXFSAVL": {
    +                    "description": "Periodic transmit data FIFO space\n              available",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "PTXQSAV": {
    +                    "description": "Periodic transmit request queue space\n              available",
    +                    "offset": 16,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "PTXQTOP": {
    +                    "description": "Top of the periodic transmit request\n              queue",
    +                    "offset": 24,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HAINT": {
    +              "description": "OTG_HS Host all channels interrupt\n          register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "HAINT": {
    +                    "description": "Channel interrupts",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HAINTMSK": {
    +              "description": "OTG_HS host all channels interrupt mask\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HAINTM": {
    +                    "description": "Channel interrupt mask",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HPRT": {
    +              "description": "OTG_HS host port control and status\n          register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PCSTS": {
    +                    "description": "Port connect status",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PCDET": {
    +                    "description": "Port connect detected",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PENA": {
    +                    "description": "Port enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PENCHNG": {
    +                    "description": "Port enable/disable change",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "POCA": {
    +                    "description": "Port overcurrent active",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "POCCHNG": {
    +                    "description": "Port overcurrent change",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PRES": {
    +                    "description": "Port resume",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PSUSP": {
    +                    "description": "Port suspend",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PRST": {
    +                    "description": "Port reset",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PLSTS": {
    +                    "description": "Port line status",
    +                    "offset": 10,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "PPWR": {
    +                    "description": "Port power",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "PTCTL": {
    +                    "description": "Port test control",
    +                    "offset": 13,
    +                    "size": 4
    +                  },
    +                  "PSPD": {
    +                    "description": "Port speed",
    +                    "offset": 17,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCCHAR0": {
    +              "description": "OTG_HS host channel-0 characteristics\n          register",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MC": {
    +                    "description": "Multi Count (MC) / Error Count\n              (EC)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCCHAR1": {
    +              "description": "OTG_HS host channel-1 characteristics\n          register",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MC": {
    +                    "description": "Multi Count (MC) / Error Count\n              (EC)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCCHAR2": {
    +              "description": "OTG_HS host channel-2 characteristics\n          register",
    +              "offset": 320,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MC": {
    +                    "description": "Multi Count (MC) / Error Count\n              (EC)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCCHAR3": {
    +              "description": "OTG_HS host channel-3 characteristics\n          register",
    +              "offset": 352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MC": {
    +                    "description": "Multi Count (MC) / Error Count\n              (EC)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCCHAR4": {
    +              "description": "OTG_HS host channel-4 characteristics\n          register",
    +              "offset": 384,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MC": {
    +                    "description": "Multi Count (MC) / Error Count\n              (EC)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCCHAR5": {
    +              "description": "OTG_HS host channel-5 characteristics\n          register",
    +              "offset": 416,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MC": {
    +                    "description": "Multi Count (MC) / Error Count\n              (EC)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCCHAR6": {
    +              "description": "OTG_HS host channel-6 characteristics\n          register",
    +              "offset": 448,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MC": {
    +                    "description": "Multi Count (MC) / Error Count\n              (EC)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCCHAR7": {
    +              "description": "OTG_HS host channel-7 characteristics\n          register",
    +              "offset": 480,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MC": {
    +                    "description": "Multi Count (MC) / Error Count\n              (EC)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCCHAR8": {
    +              "description": "OTG_HS host channel-8 characteristics\n          register",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MC": {
    +                    "description": "Multi Count (MC) / Error Count\n              (EC)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCCHAR9": {
    +              "description": "OTG_HS host channel-9 characteristics\n          register",
    +              "offset": 544,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MC": {
    +                    "description": "Multi Count (MC) / Error Count\n              (EC)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCCHAR10": {
    +              "description": "OTG_HS host channel-10 characteristics\n          register",
    +              "offset": 576,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MC": {
    +                    "description": "Multi Count (MC) / Error Count\n              (EC)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCCHAR11": {
    +              "description": "OTG_HS host channel-11 characteristics\n          register",
    +              "offset": 608,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MC": {
    +                    "description": "Multi Count (MC) / Error Count\n              (EC)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCSPLT0": {
    +              "description": "OTG_HS host channel-0 split control\n          register",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRTADDR": {
    +                    "description": "Port address",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "HUBADDR": {
    +                    "description": "Hub address",
    +                    "offset": 7,
    +                    "size": 7
    +                  },
    +                  "XACTPOS": {
    +                    "description": "XACTPOS",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "COMPLSPLT": {
    +                    "description": "Do complete split",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SPLITEN": {
    +                    "description": "Split enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCSPLT1": {
    +              "description": "OTG_HS host channel-1 split control\n          register",
    +              "offset": 292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRTADDR": {
    +                    "description": "Port address",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "HUBADDR": {
    +                    "description": "Hub address",
    +                    "offset": 7,
    +                    "size": 7
    +                  },
    +                  "XACTPOS": {
    +                    "description": "XACTPOS",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "COMPLSPLT": {
    +                    "description": "Do complete split",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SPLITEN": {
    +                    "description": "Split enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCSPLT2": {
    +              "description": "OTG_HS host channel-2 split control\n          register",
    +              "offset": 324,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRTADDR": {
    +                    "description": "Port address",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "HUBADDR": {
    +                    "description": "Hub address",
    +                    "offset": 7,
    +                    "size": 7
    +                  },
    +                  "XACTPOS": {
    +                    "description": "XACTPOS",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "COMPLSPLT": {
    +                    "description": "Do complete split",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SPLITEN": {
    +                    "description": "Split enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCSPLT3": {
    +              "description": "OTG_HS host channel-3 split control\n          register",
    +              "offset": 356,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRTADDR": {
    +                    "description": "Port address",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "HUBADDR": {
    +                    "description": "Hub address",
    +                    "offset": 7,
    +                    "size": 7
    +                  },
    +                  "XACTPOS": {
    +                    "description": "XACTPOS",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "COMPLSPLT": {
    +                    "description": "Do complete split",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SPLITEN": {
    +                    "description": "Split enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCSPLT4": {
    +              "description": "OTG_HS host channel-4 split control\n          register",
    +              "offset": 388,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRTADDR": {
    +                    "description": "Port address",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "HUBADDR": {
    +                    "description": "Hub address",
    +                    "offset": 7,
    +                    "size": 7
    +                  },
    +                  "XACTPOS": {
    +                    "description": "XACTPOS",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "COMPLSPLT": {
    +                    "description": "Do complete split",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SPLITEN": {
    +                    "description": "Split enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCSPLT5": {
    +              "description": "OTG_HS host channel-5 split control\n          register",
    +              "offset": 420,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRTADDR": {
    +                    "description": "Port address",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "HUBADDR": {
    +                    "description": "Hub address",
    +                    "offset": 7,
    +                    "size": 7
    +                  },
    +                  "XACTPOS": {
    +                    "description": "XACTPOS",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "COMPLSPLT": {
    +                    "description": "Do complete split",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SPLITEN": {
    +                    "description": "Split enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCSPLT6": {
    +              "description": "OTG_HS host channel-6 split control\n          register",
    +              "offset": 452,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRTADDR": {
    +                    "description": "Port address",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "HUBADDR": {
    +                    "description": "Hub address",
    +                    "offset": 7,
    +                    "size": 7
    +                  },
    +                  "XACTPOS": {
    +                    "description": "XACTPOS",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "COMPLSPLT": {
    +                    "description": "Do complete split",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SPLITEN": {
    +                    "description": "Split enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCSPLT7": {
    +              "description": "OTG_HS host channel-7 split control\n          register",
    +              "offset": 484,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRTADDR": {
    +                    "description": "Port address",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "HUBADDR": {
    +                    "description": "Hub address",
    +                    "offset": 7,
    +                    "size": 7
    +                  },
    +                  "XACTPOS": {
    +                    "description": "XACTPOS",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "COMPLSPLT": {
    +                    "description": "Do complete split",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SPLITEN": {
    +                    "description": "Split enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCSPLT8": {
    +              "description": "OTG_HS host channel-8 split control\n          register",
    +              "offset": 516,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRTADDR": {
    +                    "description": "Port address",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "HUBADDR": {
    +                    "description": "Hub address",
    +                    "offset": 7,
    +                    "size": 7
    +                  },
    +                  "XACTPOS": {
    +                    "description": "XACTPOS",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "COMPLSPLT": {
    +                    "description": "Do complete split",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SPLITEN": {
    +                    "description": "Split enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCSPLT9": {
    +              "description": "OTG_HS host channel-9 split control\n          register",
    +              "offset": 548,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRTADDR": {
    +                    "description": "Port address",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "HUBADDR": {
    +                    "description": "Hub address",
    +                    "offset": 7,
    +                    "size": 7
    +                  },
    +                  "XACTPOS": {
    +                    "description": "XACTPOS",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "COMPLSPLT": {
    +                    "description": "Do complete split",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SPLITEN": {
    +                    "description": "Split enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCSPLT10": {
    +              "description": "OTG_HS host channel-10 split control\n          register",
    +              "offset": 580,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRTADDR": {
    +                    "description": "Port address",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "HUBADDR": {
    +                    "description": "Hub address",
    +                    "offset": 7,
    +                    "size": 7
    +                  },
    +                  "XACTPOS": {
    +                    "description": "XACTPOS",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "COMPLSPLT": {
    +                    "description": "Do complete split",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SPLITEN": {
    +                    "description": "Split enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCSPLT11": {
    +              "description": "OTG_HS host channel-11 split control\n          register",
    +              "offset": 612,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRTADDR": {
    +                    "description": "Port address",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "HUBADDR": {
    +                    "description": "Hub address",
    +                    "offset": 7,
    +                    "size": 7
    +                  },
    +                  "XACTPOS": {
    +                    "description": "XACTPOS",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "COMPLSPLT": {
    +                    "description": "Do complete split",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SPLITEN": {
    +                    "description": "Split enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINT0": {
    +              "description": "OTG_HS host channel-11 interrupt\n          register",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "Response received\n              interrupt",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINT1": {
    +              "description": "OTG_HS host channel-1 interrupt\n          register",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "Response received\n              interrupt",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINT2": {
    +              "description": "OTG_HS host channel-2 interrupt\n          register",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "Response received\n              interrupt",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINT3": {
    +              "description": "OTG_HS host channel-3 interrupt\n          register",
    +              "offset": 360,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "Response received\n              interrupt",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINT4": {
    +              "description": "OTG_HS host channel-4 interrupt\n          register",
    +              "offset": 392,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "Response received\n              interrupt",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINT5": {
    +              "description": "OTG_HS host channel-5 interrupt\n          register",
    +              "offset": 424,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "Response received\n              interrupt",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINT6": {
    +              "description": "OTG_HS host channel-6 interrupt\n          register",
    +              "offset": 456,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "Response received\n              interrupt",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINT7": {
    +              "description": "OTG_HS host channel-7 interrupt\n          register",
    +              "offset": 488,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "Response received\n              interrupt",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINT8": {
    +              "description": "OTG_HS host channel-8 interrupt\n          register",
    +              "offset": 520,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "Response received\n              interrupt",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINT9": {
    +              "description": "OTG_HS host channel-9 interrupt\n          register",
    +              "offset": 552,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "Response received\n              interrupt",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINT10": {
    +              "description": "OTG_HS host channel-10 interrupt\n          register",
    +              "offset": 584,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "Response received\n              interrupt",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINT11": {
    +              "description": "OTG_HS host channel-11 interrupt\n          register",
    +              "offset": 616,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "Response received\n              interrupt",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINTMSK0": {
    +              "description": "OTG_HS host channel-11 interrupt mask\n          register",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINTMSK1": {
    +              "description": "OTG_HS host channel-1 interrupt mask\n          register",
    +              "offset": 300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINTMSK2": {
    +              "description": "OTG_HS host channel-2 interrupt mask\n          register",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINTMSK3": {
    +              "description": "OTG_HS host channel-3 interrupt mask\n          register",
    +              "offset": 364,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINTMSK4": {
    +              "description": "OTG_HS host channel-4 interrupt mask\n          register",
    +              "offset": 396,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINTMSK5": {
    +              "description": "OTG_HS host channel-5 interrupt mask\n          register",
    +              "offset": 428,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINTMSK6": {
    +              "description": "OTG_HS host channel-6 interrupt mask\n          register",
    +              "offset": 460,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINTMSK7": {
    +              "description": "OTG_HS host channel-7 interrupt mask\n          register",
    +              "offset": 492,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINTMSK8": {
    +              "description": "OTG_HS host channel-8 interrupt mask\n          register",
    +              "offset": 524,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINTMSK9": {
    +              "description": "OTG_HS host channel-9 interrupt mask\n          register",
    +              "offset": 556,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINTMSK10": {
    +              "description": "OTG_HS host channel-10 interrupt mask\n          register",
    +              "offset": 588,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINTMSK11": {
    +              "description": "OTG_HS host channel-11 interrupt mask\n          register",
    +              "offset": 620,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCTSIZ0": {
    +              "description": "OTG_HS host channel-11 transfer size\n          register",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCTSIZ1": {
    +              "description": "OTG_HS host channel-1 transfer size\n          register",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCTSIZ2": {
    +              "description": "OTG_HS host channel-2 transfer size\n          register",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCTSIZ3": {
    +              "description": "OTG_HS host channel-3 transfer size\n          register",
    +              "offset": 368,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCTSIZ4": {
    +              "description": "OTG_HS host channel-4 transfer size\n          register",
    +              "offset": 400,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCTSIZ5": {
    +              "description": "OTG_HS host channel-5 transfer size\n          register",
    +              "offset": 432,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCTSIZ6": {
    +              "description": "OTG_HS host channel-6 transfer size\n          register",
    +              "offset": 464,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCTSIZ7": {
    +              "description": "OTG_HS host channel-7 transfer size\n          register",
    +              "offset": 496,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCTSIZ8": {
    +              "description": "OTG_HS host channel-8 transfer size\n          register",
    +              "offset": 528,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCTSIZ9": {
    +              "description": "OTG_HS host channel-9 transfer size\n          register",
    +              "offset": 560,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCTSIZ10": {
    +              "description": "OTG_HS host channel-10 transfer size\n          register",
    +              "offset": 592,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCTSIZ11": {
    +              "description": "OTG_HS host channel-11 transfer size\n          register",
    +              "offset": 624,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCDMA0": {
    +              "description": "OTG_HS host channel-0 DMA address\n          register",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCDMA1": {
    +              "description": "OTG_HS host channel-1 DMA address\n          register",
    +              "offset": 308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCDMA2": {
    +              "description": "OTG_HS host channel-2 DMA address\n          register",
    +              "offset": 340,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCDMA3": {
    +              "description": "OTG_HS host channel-3 DMA address\n          register",
    +              "offset": 372,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCDMA4": {
    +              "description": "OTG_HS host channel-4 DMA address\n          register",
    +              "offset": 404,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCDMA5": {
    +              "description": "OTG_HS host channel-5 DMA address\n          register",
    +              "offset": 436,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCDMA6": {
    +              "description": "OTG_HS host channel-6 DMA address\n          register",
    +              "offset": 468,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCDMA7": {
    +              "description": "OTG_HS host channel-7 DMA address\n          register",
    +              "offset": 500,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCDMA8": {
    +              "description": "OTG_HS host channel-8 DMA address\n          register",
    +              "offset": 532,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCDMA9": {
    +              "description": "OTG_HS host channel-9 DMA address\n          register",
    +              "offset": 564,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCDMA10": {
    +              "description": "OTG_HS host channel-10 DMA address\n          register",
    +              "offset": 596,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCDMA11": {
    +              "description": "OTG_HS host channel-11 DMA address\n          register",
    +              "offset": 628,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "OTG_HS_GLOBAL": {
    +        "description": "USB on the go high speed",
    +        "children": {
    +          "registers": {
    +            "OTG_HS_GOTGCTL": {
    +              "description": "OTG_HS control and status\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 2048,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SRQSCS": {
    +                    "description": "Session request success",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SRQ": {
    +                    "description": "Session request",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HNGSCS": {
    +                    "description": "Host negotiation success",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HNPRQ": {
    +                    "description": "HNP request",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "HSHNPEN": {
    +                    "description": "Host set HNP enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "DHNPEN": {
    +                    "description": "Device HNP enabled",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CIDSTS": {
    +                    "description": "Connector ID status",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DBCT": {
    +                    "description": "Long/short debounce time",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ASVLD": {
    +                    "description": "A-session valid",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BSVLD": {
    +                    "description": "B-session valid",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GOTGINT": {
    +              "description": "OTG_HS interrupt register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SEDET": {
    +                    "description": "Session end detected",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SRSSCHG": {
    +                    "description": "Session request success status\n              change",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "HNSSCHG": {
    +                    "description": "Host negotiation success status\n              change",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "HNGDET": {
    +                    "description": "Host negotiation detected",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "ADTOCHG": {
    +                    "description": "A-device timeout change",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "DBCDNE": {
    +                    "description": "Debounce done",
    +                    "offset": 19,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GAHBCFG": {
    +              "description": "OTG_HS AHB configuration\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "GINT": {
    +                    "description": "Global interrupt mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "HBSTLEN": {
    +                    "description": "Burst length/type",
    +                    "offset": 1,
    +                    "size": 4
    +                  },
    +                  "DMAEN": {
    +                    "description": "DMA enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXFELVL": {
    +                    "description": "TxFIFO empty level",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PTXFELVL": {
    +                    "description": "Periodic TxFIFO empty\n              level",
    +                    "offset": 8,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GUSBCFG": {
    +              "description": "OTG_HS USB configuration\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 2560,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TOCAL": {
    +                    "description": "FS timeout calibration",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "PHYSEL": {
    +                    "description": "USB 2.0 high-speed ULPI PHY or USB 1.1\n              full-speed serial transceiver select",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SRPCAP": {
    +                    "description": "SRP-capable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "HNPCAP": {
    +                    "description": "HNP-capable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TRDT": {
    +                    "description": "USB turnaround time",
    +                    "offset": 10,
    +                    "size": 4
    +                  },
    +                  "PHYLPCS": {
    +                    "description": "PHY Low-power clock select",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ULPIFSLS": {
    +                    "description": "ULPI FS/LS select",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "ULPIAR": {
    +                    "description": "ULPI Auto-resume",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "ULPICSM": {
    +                    "description": "ULPI Clock SuspendM",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "ULPIEVBUSD": {
    +                    "description": "ULPI External VBUS Drive",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "ULPIEVBUSI": {
    +                    "description": "ULPI external VBUS\n              indicator",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TSDPS": {
    +                    "description": "TermSel DLine pulsing\n              selection",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "PCCI": {
    +                    "description": "Indicator complement",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "PTCI": {
    +                    "description": "Indicator pass through",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "ULPIIPD": {
    +                    "description": "ULPI interface protect\n              disable",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FHMOD": {
    +                    "description": "Forced host mode",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FDMOD": {
    +                    "description": "Forced peripheral mode",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CTXPKT": {
    +                    "description": "Corrupt Tx packet",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GRSTCTL": {
    +              "description": "OTG_HS reset register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 536870912,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSRST": {
    +                    "description": "Core soft reset",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "HSRST": {
    +                    "description": "HCLK soft reset",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FCRST": {
    +                    "description": "Host frame counter reset",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RXFFLSH": {
    +                    "description": "RxFIFO flush",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TXFFLSH": {
    +                    "description": "TxFIFO flush",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TxFIFO number",
    +                    "offset": 6,
    +                    "size": 5
    +                  },
    +                  "DMAREQ": {
    +                    "description": "DMA request signal",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "AHBIDL": {
    +                    "description": "AHB master idle",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GINTSTS": {
    +              "description": "OTG_HS core interrupt register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 67108896,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CMOD": {
    +                    "description": "Current mode of operation",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MMIS": {
    +                    "description": "Mode mismatch interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OTGINT": {
    +                    "description": "OTG interrupt",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SOF": {
    +                    "description": "Start of frame",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RXFLVL": {
    +                    "description": "RxFIFO nonempty",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NPTXFE": {
    +                    "description": "Nonperiodic TxFIFO empty",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GINAKEFF": {
    +                    "description": "Global IN nonperiodic NAK\n              effective",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BOUTNAKEFF": {
    +                    "description": "Global OUT NAK effective",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ESUSP": {
    +                    "description": "Early suspend",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "USBSUSP": {
    +                    "description": "USB suspend",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "USBRST": {
    +                    "description": "USB reset",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ENUMDNE": {
    +                    "description": "Enumeration done",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ISOODRP": {
    +                    "description": "Isochronous OUT packet dropped\n              interrupt",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EOPF": {
    +                    "description": "End of periodic frame\n              interrupt",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "IEPINT": {
    +                    "description": "IN endpoint interrupt",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEPINT": {
    +                    "description": "OUT endpoint interrupt",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IISOIXFR": {
    +                    "description": "Incomplete isochronous IN\n              transfer",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "PXFR_INCOMPISOOUT": {
    +                    "description": "Incomplete periodic\n              transfer",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "DATAFSUSP": {
    +                    "description": "Data fetch suspended",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "HPRTINT": {
    +                    "description": "Host port interrupt",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HCINT": {
    +                    "description": "Host channels interrupt",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PTXFE": {
    +                    "description": "Periodic TxFIFO empty",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CIDSCHG": {
    +                    "description": "Connector ID status change",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "DISCINT": {
    +                    "description": "Disconnect detected\n              interrupt",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "SRQINT": {
    +                    "description": "Session request/new session detected\n              interrupt",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "WKUINT": {
    +                    "description": "Resume/remote wakeup detected\n              interrupt",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GINTMSK": {
    +              "description": "OTG_HS interrupt mask register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MMISM": {
    +                    "description": "Mode mismatch interrupt\n              mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OTGINT": {
    +                    "description": "OTG interrupt mask",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SOFM": {
    +                    "description": "Start of frame mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RXFLVLM": {
    +                    "description": "Receive FIFO nonempty mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "NPTXFEM": {
    +                    "description": "Nonperiodic TxFIFO empty\n              mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GINAKEFFM": {
    +                    "description": "Global nonperiodic IN NAK effective\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GONAKEFFM": {
    +                    "description": "Global OUT NAK effective\n              mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ESUSPM": {
    +                    "description": "Early suspend mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "USBSUSPM": {
    +                    "description": "USB suspend mask",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "USBRST": {
    +                    "description": "USB reset mask",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ENUMDNEM": {
    +                    "description": "Enumeration done mask",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ISOODRPM": {
    +                    "description": "Isochronous OUT packet dropped interrupt\n              mask",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EOPFM": {
    +                    "description": "End of periodic frame interrupt\n              mask",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EPMISM": {
    +                    "description": "Endpoint mismatch interrupt\n              mask",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "IEPINT": {
    +                    "description": "IN endpoints interrupt\n              mask",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "OEPINT": {
    +                    "description": "OUT endpoints interrupt\n              mask",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "IISOIXFRM": {
    +                    "description": "Incomplete isochronous IN transfer\n              mask",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "PXFRM_IISOOXFRM": {
    +                    "description": "Incomplete periodic transfer\n              mask",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FSUSPM": {
    +                    "description": "Data fetch suspended mask",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "PRTIM": {
    +                    "description": "Host port interrupt mask",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HCIM": {
    +                    "description": "Host channels interrupt\n              mask",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "PTXFEM": {
    +                    "description": "Periodic TxFIFO empty mask",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "CIDSCHGM": {
    +                    "description": "Connector ID status change\n              mask",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "DISCINT": {
    +                    "description": "Disconnect detected interrupt\n              mask",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "SRQIM": {
    +                    "description": "Session request/new session detected\n              interrupt mask",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "WUIM": {
    +                    "description": "Resume/remote wakeup detected interrupt\n              mask",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GRXSTSR_Host": {
    +              "description": "OTG_HS Receive status debug read register\n          (host mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CHNUM": {
    +                    "description": "Channel number",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "BCNT": {
    +                    "description": "Byte count",
    +                    "offset": 4,
    +                    "size": 11
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 15,
    +                    "size": 2
    +                  },
    +                  "PKTSTS": {
    +                    "description": "Packet status",
    +                    "offset": 17,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GRXSTSP_Host": {
    +              "description": "OTG_HS status read and pop register (host\n          mode)",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CHNUM": {
    +                    "description": "Channel number",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "BCNT": {
    +                    "description": "Byte count",
    +                    "offset": 4,
    +                    "size": 11
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 15,
    +                    "size": 2
    +                  },
    +                  "PKTSTS": {
    +                    "description": "Packet status",
    +                    "offset": 17,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GRXFSIZ": {
    +              "description": "OTG_HS Receive FIFO size\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 512,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXFD": {
    +                    "description": "RxFIFO depth",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GNPTXFSIZ_Host": {
    +              "description": "OTG_HS nonperiodic transmit FIFO size\n          register (host mode)",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 512,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NPTXFSA": {
    +                    "description": "Nonperiodic transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "NPTXFD": {
    +                    "description": "Nonperiodic TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_TX0FSIZ_Peripheral": {
    +              "description": "Endpoint 0 transmit FIFO size (peripheral\n          mode)",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 512,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX0FSA": {
    +                    "description": "Endpoint 0 transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "TX0FD": {
    +                    "description": "Endpoint 0 TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GNPTXSTS": {
    +              "description": "OTG_HS nonperiodic transmit FIFO/queue\n          status register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 524800,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "NPTXFSAV": {
    +                    "description": "Nonperiodic TxFIFO space\n              available",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "NPTQXSAV": {
    +                    "description": "Nonperiodic transmit request queue space\n              available",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "NPTXQTOP": {
    +                    "description": "Top of the nonperiodic transmit request\n              queue",
    +                    "offset": 24,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GCCFG": {
    +              "description": "OTG_HS general core configuration\n          register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PWRDWN": {
    +                    "description": "Power down",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "I2CPADEN": {
    +                    "description": "Enable I2C bus connection for the\n              external I2C PHY interface",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "VBUSASEN": {
    +                    "description": "Enable the VBUS sensing\n              device",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "VBUSBSEN": {
    +                    "description": "Enable the VBUS sensing\n              device",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "SOFOUTEN": {
    +                    "description": "SOF output enable",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "NOVBUSSENS": {
    +                    "description": "VBUS sensing disable\n              option",
    +                    "offset": 21,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_CID": {
    +              "description": "OTG_HS core ID register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 4608,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRODUCT_ID": {
    +                    "description": "Product ID field",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HPTXFSIZ": {
    +              "description": "OTG_HS Host periodic transmit FIFO size\n          register",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 33555968,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PTXSA": {
    +                    "description": "Host periodic TxFIFO start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "PTXFD": {
    +                    "description": "Host periodic TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPTXF1": {
    +              "description": "OTG_HS device IN endpoint transmit FIFO size\n          register",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 33555456,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXSA": {
    +                    "description": "IN endpoint FIFOx transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "INEPTXFD": {
    +                    "description": "IN endpoint TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPTXF2": {
    +              "description": "OTG_HS device IN endpoint transmit FIFO size\n          register",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 33555456,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXSA": {
    +                    "description": "IN endpoint FIFOx transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "INEPTXFD": {
    +                    "description": "IN endpoint TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPTXF3": {
    +              "description": "OTG_HS device IN endpoint transmit FIFO size\n          register",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 33555456,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXSA": {
    +                    "description": "IN endpoint FIFOx transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "INEPTXFD": {
    +                    "description": "IN endpoint TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPTXF4": {
    +              "description": "OTG_HS device IN endpoint transmit FIFO size\n          register",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 33555456,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXSA": {
    +                    "description": "IN endpoint FIFOx transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "INEPTXFD": {
    +                    "description": "IN endpoint TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPTXF5": {
    +              "description": "OTG_HS device IN endpoint transmit FIFO size\n          register",
    +              "offset": 292,
    +              "size": 32,
    +              "reset_value": 33555456,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXSA": {
    +                    "description": "IN endpoint FIFOx transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "INEPTXFD": {
    +                    "description": "IN endpoint TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPTXF6": {
    +              "description": "OTG_HS device IN endpoint transmit FIFO size\n          register",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 33555456,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXSA": {
    +                    "description": "IN endpoint FIFOx transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "INEPTXFD": {
    +                    "description": "IN endpoint TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPTXF7": {
    +              "description": "OTG_HS device IN endpoint transmit FIFO size\n          register",
    +              "offset": 300,
    +              "size": 32,
    +              "reset_value": 33555456,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXSA": {
    +                    "description": "IN endpoint FIFOx transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "INEPTXFD": {
    +                    "description": "IN endpoint TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GRXSTSR_Peripheral": {
    +              "description": "OTG_HS Receive status debug read register\n          (peripheral mode mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "BCNT": {
    +                    "description": "Byte count",
    +                    "offset": 4,
    +                    "size": 11
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 15,
    +                    "size": 2
    +                  },
    +                  "PKTSTS": {
    +                    "description": "Packet status",
    +                    "offset": 17,
    +                    "size": 4
    +                  },
    +                  "FRMNUM": {
    +                    "description": "Frame number",
    +                    "offset": 21,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GRXSTSP_Peripheral": {
    +              "description": "OTG_HS status read and pop register\n          (peripheral mode)",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "BCNT": {
    +                    "description": "Byte count",
    +                    "offset": 4,
    +                    "size": 11
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 15,
    +                    "size": 2
    +                  },
    +                  "PKTSTS": {
    +                    "description": "Packet status",
    +                    "offset": 17,
    +                    "size": 4
    +                  },
    +                  "FRMNUM": {
    +                    "description": "Frame number",
    +                    "offset": 21,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SDIO": {
    +        "description": "Secure digital input/output\n      interface",
    +        "children": {
    +          "registers": {
    +            "POWER": {
    +              "description": "power control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PWRCTRL": {
    +                    "description": "PWRCTRL",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLKCR": {
    +              "description": "SDI clock control register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HWFC_EN": {
    +                    "description": "HW Flow Control enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "NEGEDGE": {
    +                    "description": "SDIO_CK dephasing selection\n              bit",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "WIDBUS": {
    +                    "description": "Wide bus mode enable bit",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "BYPASS": {
    +                    "description": "Clock divider bypass enable\n              bit",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PWRSAV": {
    +                    "description": "Power saving configuration\n              bit",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CLKEN": {
    +                    "description": "Clock enable bit",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CLKDIV": {
    +                    "description": "Clock divide factor",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "ARG": {
    +              "description": "argument register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CMDARG": {
    +                    "description": "Command argument",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CMD": {
    +              "description": "command register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CE_ATACMD": {
    +                    "description": "CE-ATA command",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "nIEN": {
    +                    "description": "not Interrupt Enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ENCMDcompl": {
    +                    "description": "Enable CMD completion",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "SDIOSuspend": {
    +                    "description": "SD I/O suspend command",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CPSMEN": {
    +                    "description": "Command path state machine (CPSM) Enable\n              bit",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "WAITPEND": {
    +                    "description": "CPSM Waits for ends of data transfer\n              (CmdPend internal signal).",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "WAITINT": {
    +                    "description": "CPSM waits for interrupt\n              request",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "WAITRESP": {
    +                    "description": "Wait for response bits",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "CMDINDEX": {
    +                    "description": "Command index",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "RESPCMD": {
    +              "description": "command response register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RESPCMD": {
    +                    "description": "Response command index",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "RESP1": {
    +              "description": "response 1..4 register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CARDSTATUS1": {
    +                    "description": "see Table 132.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "RESP2": {
    +              "description": "response 1..4 register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CARDSTATUS2": {
    +                    "description": "see Table 132.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "RESP3": {
    +              "description": "response 1..4 register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CARDSTATUS3": {
    +                    "description": "see Table 132.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "RESP4": {
    +              "description": "response 1..4 register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CARDSTATUS4": {
    +                    "description": "see Table 132.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DTIMER": {
    +              "description": "data timer register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATATIME": {
    +                    "description": "Data timeout period",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DLEN": {
    +              "description": "data length register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATALENGTH": {
    +                    "description": "Data length value",
    +                    "offset": 0,
    +                    "size": 25
    +                  }
    +                }
    +              }
    +            },
    +            "DCTRL": {
    +              "description": "data control register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SDIOEN": {
    +                    "description": "SD I/O enable functions",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "RWMOD": {
    +                    "description": "Read wait mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "RWSTOP": {
    +                    "description": "Read wait stop",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RWSTART": {
    +                    "description": "Read wait start",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DBLOCKSIZE": {
    +                    "description": "Data block size",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "DMAEN": {
    +                    "description": "DMA enable bit",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DTMODE": {
    +                    "description": "Data transfer mode selection 1: Stream\n              or SDIO multibyte data transfer.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DTDIR": {
    +                    "description": "Data transfer direction\n              selection",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DTEN": {
    +                    "description": "DTEN",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DCOUNT": {
    +              "description": "data counter register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DATACOUNT": {
    +                    "description": "Data count value",
    +                    "offset": 0,
    +                    "size": 25
    +                  }
    +                }
    +              }
    +            },
    +            "STA": {
    +              "description": "status register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CEATAEND": {
    +                    "description": "CE-ATA command completion signal\n              received for CMD61",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "SDIOIT": {
    +                    "description": "SDIO interrupt received",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "RXDAVL": {
    +                    "description": "Data available in receive\n              FIFO",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TXDAVL": {
    +                    "description": "Data available in transmit\n              FIFO",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "RXFIFOE": {
    +                    "description": "Receive FIFO empty",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "TXFIFOE": {
    +                    "description": "Transmit FIFO empty",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "RXFIFOF": {
    +                    "description": "Receive FIFO full",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TXFIFOF": {
    +                    "description": "Transmit FIFO full",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RXFIFOHF": {
    +                    "description": "Receive FIFO half full: there are at\n              least 8 words in the FIFO",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TXFIFOHE": {
    +                    "description": "Transmit FIFO half empty: at least 8\n              words can be written into the FIFO",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "RXACT": {
    +                    "description": "Data receive in progress",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TXACT": {
    +                    "description": "Data transmit in progress",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CMDACT": {
    +                    "description": "Command transfer in\n              progress",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "DBCKEND": {
    +                    "description": "Data block sent/received (CRC check\n              passed)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "STBITERR": {
    +                    "description": "Start bit not detected on all data\n              signals in wide bus mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DATAEND": {
    +                    "description": "Data end (data counter, SDIDCOUNT, is\n              zero)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CMDSENT": {
    +                    "description": "Command sent (no response\n              required)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CMDREND": {
    +                    "description": "Command response received (CRC check\n              passed)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RXOVERR": {
    +                    "description": "Received FIFO overrun\n              error",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXUNDERR": {
    +                    "description": "Transmit FIFO underrun\n              error",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DTIMEOUT": {
    +                    "description": "Data timeout",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CTIMEOUT": {
    +                    "description": "Command response timeout",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DCRCFAIL": {
    +                    "description": "Data block sent/received (CRC check\n              failed)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CCRCFAIL": {
    +                    "description": "Command response received (CRC check\n              failed)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ICR": {
    +              "description": "interrupt clear register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CEATAENDC": {
    +                    "description": "CEATAEND flag clear bit",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "SDIOITC": {
    +                    "description": "SDIOIT flag clear bit",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "DBCKENDC": {
    +                    "description": "DBCKEND flag clear bit",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "STBITERRC": {
    +                    "description": "STBITERR flag clear bit",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DATAENDC": {
    +                    "description": "DATAEND flag clear bit",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CMDSENTC": {
    +                    "description": "CMDSENT flag clear bit",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CMDRENDC": {
    +                    "description": "CMDREND flag clear bit",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RXOVERRC": {
    +                    "description": "RXOVERR flag clear bit",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXUNDERRC": {
    +                    "description": "TXUNDERR flag clear bit",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DTIMEOUTC": {
    +                    "description": "DTIMEOUT flag clear bit",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CTIMEOUTC": {
    +                    "description": "CTIMEOUT flag clear bit",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DCRCFAILC": {
    +                    "description": "DCRCFAIL flag clear bit",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CCRCFAILC": {
    +                    "description": "CCRCFAIL flag clear bit",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MASK": {
    +              "description": "mask register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CEATAENDIE": {
    +                    "description": "CE-ATA command completion signal\n              received interrupt enable",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "SDIOITIE": {
    +                    "description": "SDIO mode interrupt received interrupt\n              enable",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "RXDAVLIE": {
    +                    "description": "Data available in Rx FIFO interrupt\n              enable",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TXDAVLIE": {
    +                    "description": "Data available in Tx FIFO interrupt\n              enable",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "RXFIFOEIE": {
    +                    "description": "Rx FIFO empty interrupt\n              enable",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "TXFIFOEIE": {
    +                    "description": "Tx FIFO empty interrupt\n              enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "RXFIFOFIE": {
    +                    "description": "Rx FIFO full interrupt\n              enable",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TXFIFOFIE": {
    +                    "description": "Tx FIFO full interrupt\n              enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RXFIFOHFIE": {
    +                    "description": "Rx FIFO half full interrupt\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TXFIFOHEIE": {
    +                    "description": "Tx FIFO half empty interrupt\n              enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "RXACTIE": {
    +                    "description": "Data receive acting interrupt\n              enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TXACTIE": {
    +                    "description": "Data transmit acting interrupt\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CMDACTIE": {
    +                    "description": "Command acting interrupt\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "DBCKENDIE": {
    +                    "description": "Data block end interrupt\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "STBITERRIE": {
    +                    "description": "Start bit error interrupt\n              enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DATAENDIE": {
    +                    "description": "Data end interrupt enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CMDSENTIE": {
    +                    "description": "Command sent interrupt\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CMDRENDIE": {
    +                    "description": "Command response received interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RXOVERRIE": {
    +                    "description": "Rx FIFO overrun error interrupt\n              enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXUNDERRIE": {
    +                    "description": "Tx FIFO underrun error interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DTIMEOUTIE": {
    +                    "description": "Data timeout interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CTIMEOUTIE": {
    +                    "description": "Command timeout interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DCRCFAILIE": {
    +                    "description": "Data CRC fail interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CCRCFAILIE": {
    +                    "description": "Command CRC fail interrupt\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FIFOCNT": {
    +              "description": "FIFO counter register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "FIFOCOUNT": {
    +                    "description": "Remaining number of words to be written\n              to or read from the FIFO.",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "FIFO": {
    +              "description": "data FIFO register",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FIFOData": {
    +                    "description": "Receive and transmit FIFO\n              data",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "ADC1": {
    +        "description": "Analog-to-digital converter",
    +        "children": {
    +          "registers": {
    +            "SR": {
    +              "description": "status register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OVR": {
    +                    "description": "Overrun",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "STRT": {
    +                    "description": "Regular channel start flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "JSTRT": {
    +                    "description": "Injected channel start\n              flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "JEOC": {
    +                    "description": "Injected channel end of\n              conversion",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EOC": {
    +                    "description": "Regular channel end of\n              conversion",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AWD": {
    +                    "description": "Analog watchdog flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OVRIE": {
    +                    "description": "Overrun interrupt enable",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "RES": {
    +                    "description": "Resolution",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "AWDEN": {
    +                    "description": "Analog watchdog enable on regular\n              channels",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "JAWDEN": {
    +                    "description": "Analog watchdog enable on injected\n              channels",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "DISCNUM": {
    +                    "description": "Discontinuous mode channel\n              count",
    +                    "offset": 13,
    +                    "size": 3
    +                  },
    +                  "JDISCEN": {
    +                    "description": "Discontinuous mode on injected\n              channels",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "DISCEN": {
    +                    "description": "Discontinuous mode on regular\n              channels",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "JAUTO": {
    +                    "description": "Automatic injected group\n              conversion",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "AWDSGL": {
    +                    "description": "Enable the watchdog on a single channel\n              in scan mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SCAN": {
    +                    "description": "Scan mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "JEOCIE": {
    +                    "description": "Interrupt enable for injected\n              channels",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "AWDIE": {
    +                    "description": "Analog watchdog interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EOCIE": {
    +                    "description": "Interrupt enable for EOC",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "AWDCH": {
    +                    "description": "Analog watchdog channel select\n              bits",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SWSTART": {
    +                    "description": "Start conversion of regular\n              channels",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EXTEN": {
    +                    "description": "External trigger enable for regular\n              channels",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "EXTSEL": {
    +                    "description": "External event select for regular\n              group",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "JSWSTART": {
    +                    "description": "Start conversion of injected\n              channels",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "JEXTEN": {
    +                    "description": "External trigger enable for injected\n              channels",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "JEXTSEL": {
    +                    "description": "External event select for injected\n              group",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "ALIGN": {
    +                    "description": "Data alignment",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "EOCS": {
    +                    "description": "End of conversion\n              selection",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "DDS": {
    +                    "description": "DMA disable selection (for single ADC\n              mode)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DMA": {
    +                    "description": "Direct memory access mode (for single\n              ADC mode)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CONT": {
    +                    "description": "Continuous conversion",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ADON": {
    +                    "description": "A/D Converter ON / OFF",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SMPR1": {
    +              "description": "sample time register 1",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SMPx_x": {
    +                    "description": "Sample time bits",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "SMPR2": {
    +              "description": "sample time register 2",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SMPx_x": {
    +                    "description": "Sample time bits",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "JOFR1": {
    +              "description": "injected channel data offset register\n          x",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "JOFFSET1": {
    +                    "description": "Data offset for injected channel\n              x",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "JOFR2": {
    +              "description": "injected channel data offset register\n          x",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "JOFFSET2": {
    +                    "description": "Data offset for injected channel\n              x",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "JOFR3": {
    +              "description": "injected channel data offset register\n          x",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "JOFFSET3": {
    +                    "description": "Data offset for injected channel\n              x",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "JOFR4": {
    +              "description": "injected channel data offset register\n          x",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "JOFFSET4": {
    +                    "description": "Data offset for injected channel\n              x",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "HTR": {
    +              "description": "watchdog higher threshold\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 4095,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HT": {
    +                    "description": "Analog watchdog higher\n              threshold",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "LTR": {
    +              "description": "watchdog lower threshold\n          register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LT": {
    +                    "description": "Analog watchdog lower\n              threshold",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "SQR1": {
    +              "description": "regular sequence register 1",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "L": {
    +                    "description": "Regular channel sequence\n              length",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "SQ16": {
    +                    "description": "16th conversion in regular\n              sequence",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "SQ15": {
    +                    "description": "15th conversion in regular\n              sequence",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "SQ14": {
    +                    "description": "14th conversion in regular\n              sequence",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "SQ13": {
    +                    "description": "13th conversion in regular\n              sequence",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "SQR2": {
    +              "description": "regular sequence register 2",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SQ12": {
    +                    "description": "12th conversion in regular\n              sequence",
    +                    "offset": 25,
    +                    "size": 5
    +                  },
    +                  "SQ11": {
    +                    "description": "11th conversion in regular\n              sequence",
    +                    "offset": 20,
    +                    "size": 5
    +                  },
    +                  "SQ10": {
    +                    "description": "10th conversion in regular\n              sequence",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "SQ9": {
    +                    "description": "9th conversion in regular\n              sequence",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "SQ8": {
    +                    "description": "8th conversion in regular\n              sequence",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "SQ7": {
    +                    "description": "7th conversion in regular\n              sequence",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "SQR3": {
    +              "description": "regular sequence register 3",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SQ6": {
    +                    "description": "6th conversion in regular\n              sequence",
    +                    "offset": 25,
    +                    "size": 5
    +                  },
    +                  "SQ5": {
    +                    "description": "5th conversion in regular\n              sequence",
    +                    "offset": 20,
    +                    "size": 5
    +                  },
    +                  "SQ4": {
    +                    "description": "4th conversion in regular\n              sequence",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "SQ3": {
    +                    "description": "3rd conversion in regular\n              sequence",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "SQ2": {
    +                    "description": "2nd conversion in regular\n              sequence",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "SQ1": {
    +                    "description": "1st conversion in regular\n              sequence",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "JSQR": {
    +              "description": "injected sequence register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "JL": {
    +                    "description": "Injected sequence length",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "JSQ4": {
    +                    "description": "4th conversion in injected\n              sequence",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "JSQ3": {
    +                    "description": "3rd conversion in injected\n              sequence",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "JSQ2": {
    +                    "description": "2nd conversion in injected\n              sequence",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "JSQ1": {
    +                    "description": "1st conversion in injected\n              sequence",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "JDR1": {
    +              "description": "injected data register x",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "JDATA": {
    +                    "description": "Injected data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "JDR2": {
    +              "description": "injected data register x",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "JDATA": {
    +                    "description": "Injected data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "JDR3": {
    +              "description": "injected data register x",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "JDATA": {
    +                    "description": "Injected data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "JDR4": {
    +              "description": "injected data register x",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "JDATA": {
    +                    "description": "Injected data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "regular data register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Regular data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "EXTI": {
    +        "description": "External interrupt/event\n      controller",
    +        "children": {
    +          "registers": {
    +            "IMR": {
    +              "description": "Interrupt mask register\n          (EXTI_IMR)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MR0": {
    +                    "description": "Interrupt Mask on line 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MR1": {
    +                    "description": "Interrupt Mask on line 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MR2": {
    +                    "description": "Interrupt Mask on line 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MR3": {
    +                    "description": "Interrupt Mask on line 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MR4": {
    +                    "description": "Interrupt Mask on line 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "MR5": {
    +                    "description": "Interrupt Mask on line 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "MR6": {
    +                    "description": "Interrupt Mask on line 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MR7": {
    +                    "description": "Interrupt Mask on line 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MR8": {
    +                    "description": "Interrupt Mask on line 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "MR9": {
    +                    "description": "Interrupt Mask on line 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "MR10": {
    +                    "description": "Interrupt Mask on line 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "MR11": {
    +                    "description": "Interrupt Mask on line 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "MR12": {
    +                    "description": "Interrupt Mask on line 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "MR13": {
    +                    "description": "Interrupt Mask on line 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "MR14": {
    +                    "description": "Interrupt Mask on line 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "MR15": {
    +                    "description": "Interrupt Mask on line 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MR16": {
    +                    "description": "Interrupt Mask on line 16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "MR17": {
    +                    "description": "Interrupt Mask on line 17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "MR18": {
    +                    "description": "Interrupt Mask on line 18",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "MR19": {
    +                    "description": "Interrupt Mask on line 19",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "MR20": {
    +                    "description": "Interrupt Mask on line 20",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "MR21": {
    +                    "description": "Interrupt Mask on line 21",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "MR22": {
    +                    "description": "Interrupt Mask on line 22",
    +                    "offset": 22,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EMR": {
    +              "description": "Event mask register (EXTI_EMR)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MR0": {
    +                    "description": "Event Mask on line 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MR1": {
    +                    "description": "Event Mask on line 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MR2": {
    +                    "description": "Event Mask on line 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MR3": {
    +                    "description": "Event Mask on line 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MR4": {
    +                    "description": "Event Mask on line 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "MR5": {
    +                    "description": "Event Mask on line 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "MR6": {
    +                    "description": "Event Mask on line 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MR7": {
    +                    "description": "Event Mask on line 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MR8": {
    +                    "description": "Event Mask on line 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "MR9": {
    +                    "description": "Event Mask on line 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "MR10": {
    +                    "description": "Event Mask on line 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "MR11": {
    +                    "description": "Event Mask on line 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "MR12": {
    +                    "description": "Event Mask on line 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "MR13": {
    +                    "description": "Event Mask on line 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "MR14": {
    +                    "description": "Event Mask on line 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "MR15": {
    +                    "description": "Event Mask on line 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MR16": {
    +                    "description": "Event Mask on line 16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "MR17": {
    +                    "description": "Event Mask on line 17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "MR18": {
    +                    "description": "Event Mask on line 18",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "MR19": {
    +                    "description": "Event Mask on line 19",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "MR20": {
    +                    "description": "Event Mask on line 20",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "MR21": {
    +                    "description": "Event Mask on line 21",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "MR22": {
    +                    "description": "Event Mask on line 22",
    +                    "offset": 22,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RTSR": {
    +              "description": "Rising Trigger selection register\n          (EXTI_RTSR)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TR0": {
    +                    "description": "Rising trigger event configuration of\n              line 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TR1": {
    +                    "description": "Rising trigger event configuration of\n              line 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TR2": {
    +                    "description": "Rising trigger event configuration of\n              line 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TR3": {
    +                    "description": "Rising trigger event configuration of\n              line 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TR4": {
    +                    "description": "Rising trigger event configuration of\n              line 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TR5": {
    +                    "description": "Rising trigger event configuration of\n              line 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TR6": {
    +                    "description": "Rising trigger event configuration of\n              line 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TR7": {
    +                    "description": "Rising trigger event configuration of\n              line 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TR8": {
    +                    "description": "Rising trigger event configuration of\n              line 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TR9": {
    +                    "description": "Rising trigger event configuration of\n              line 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TR10": {
    +                    "description": "Rising trigger event configuration of\n              line 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TR11": {
    +                    "description": "Rising trigger event configuration of\n              line 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TR12": {
    +                    "description": "Rising trigger event configuration of\n              line 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TR13": {
    +                    "description": "Rising trigger event configuration of\n              line 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TR14": {
    +                    "description": "Rising trigger event configuration of\n              line 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TR15": {
    +                    "description": "Rising trigger event configuration of\n              line 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TR16": {
    +                    "description": "Rising trigger event configuration of\n              line 16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TR17": {
    +                    "description": "Rising trigger event configuration of\n              line 17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TR18": {
    +                    "description": "Rising trigger event configuration of\n              line 18",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TR19": {
    +                    "description": "Rising trigger event configuration of\n              line 19",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "TR20": {
    +                    "description": "Rising trigger event configuration of\n              line 20",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "TR21": {
    +                    "description": "Rising trigger event configuration of\n              line 21",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TR22": {
    +                    "description": "Rising trigger event configuration of\n              line 22",
    +                    "offset": 22,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FTSR": {
    +              "description": "Falling Trigger selection register\n          (EXTI_FTSR)",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TR0": {
    +                    "description": "Falling trigger event configuration of\n              line 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TR1": {
    +                    "description": "Falling trigger event configuration of\n              line 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TR2": {
    +                    "description": "Falling trigger event configuration of\n              line 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TR3": {
    +                    "description": "Falling trigger event configuration of\n              line 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TR4": {
    +                    "description": "Falling trigger event configuration of\n              line 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TR5": {
    +                    "description": "Falling trigger event configuration of\n              line 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TR6": {
    +                    "description": "Falling trigger event configuration of\n              line 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TR7": {
    +                    "description": "Falling trigger event configuration of\n              line 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TR8": {
    +                    "description": "Falling trigger event configuration of\n              line 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TR9": {
    +                    "description": "Falling trigger event configuration of\n              line 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TR10": {
    +                    "description": "Falling trigger event configuration of\n              line 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TR11": {
    +                    "description": "Falling trigger event configuration of\n              line 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TR12": {
    +                    "description": "Falling trigger event configuration of\n              line 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TR13": {
    +                    "description": "Falling trigger event configuration of\n              line 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TR14": {
    +                    "description": "Falling trigger event configuration of\n              line 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TR15": {
    +                    "description": "Falling trigger event configuration of\n              line 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TR16": {
    +                    "description": "Falling trigger event configuration of\n              line 16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TR17": {
    +                    "description": "Falling trigger event configuration of\n              line 17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TR18": {
    +                    "description": "Falling trigger event configuration of\n              line 18",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TR19": {
    +                    "description": "Falling trigger event configuration of\n              line 19",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "TR20": {
    +                    "description": "Falling trigger event configuration of\n              line 20",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "TR21": {
    +                    "description": "Falling trigger event configuration of\n              line 21",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TR22": {
    +                    "description": "Falling trigger event configuration of\n              line 22",
    +                    "offset": 22,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SWIER": {
    +              "description": "Software interrupt event register\n          (EXTI_SWIER)",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SWIER0": {
    +                    "description": "Software Interrupt on line\n              0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SWIER1": {
    +                    "description": "Software Interrupt on line\n              1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SWIER2": {
    +                    "description": "Software Interrupt on line\n              2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SWIER3": {
    +                    "description": "Software Interrupt on line\n              3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SWIER4": {
    +                    "description": "Software Interrupt on line\n              4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SWIER5": {
    +                    "description": "Software Interrupt on line\n              5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "SWIER6": {
    +                    "description": "Software Interrupt on line\n              6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SWIER7": {
    +                    "description": "Software Interrupt on line\n              7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SWIER8": {
    +                    "description": "Software Interrupt on line\n              8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SWIER9": {
    +                    "description": "Software Interrupt on line\n              9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SWIER10": {
    +                    "description": "Software Interrupt on line\n              10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SWIER11": {
    +                    "description": "Software Interrupt on line\n              11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SWIER12": {
    +                    "description": "Software Interrupt on line\n              12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "SWIER13": {
    +                    "description": "Software Interrupt on line\n              13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "SWIER14": {
    +                    "description": "Software Interrupt on line\n              14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SWIER15": {
    +                    "description": "Software Interrupt on line\n              15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "SWIER16": {
    +                    "description": "Software Interrupt on line\n              16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SWIER17": {
    +                    "description": "Software Interrupt on line\n              17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "SWIER18": {
    +                    "description": "Software Interrupt on line\n              18",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "SWIER19": {
    +                    "description": "Software Interrupt on line\n              19",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "SWIER20": {
    +                    "description": "Software Interrupt on line\n              20",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "SWIER21": {
    +                    "description": "Software Interrupt on line\n              21",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "SWIER22": {
    +                    "description": "Software Interrupt on line\n              22",
    +                    "offset": 22,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PR": {
    +              "description": "Pending register (EXTI_PR)",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PR0": {
    +                    "description": "Pending bit 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PR1": {
    +                    "description": "Pending bit 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PR2": {
    +                    "description": "Pending bit 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PR3": {
    +                    "description": "Pending bit 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PR4": {
    +                    "description": "Pending bit 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "PR5": {
    +                    "description": "Pending bit 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PR6": {
    +                    "description": "Pending bit 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PR7": {
    +                    "description": "Pending bit 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PR8": {
    +                    "description": "Pending bit 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PR9": {
    +                    "description": "Pending bit 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PR10": {
    +                    "description": "Pending bit 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PR11": {
    +                    "description": "Pending bit 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "PR12": {
    +                    "description": "Pending bit 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "PR13": {
    +                    "description": "Pending bit 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "PR14": {
    +                    "description": "Pending bit 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PR15": {
    +                    "description": "Pending bit 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "PR16": {
    +                    "description": "Pending bit 16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "PR17": {
    +                    "description": "Pending bit 17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "PR18": {
    +                    "description": "Pending bit 18",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "PR19": {
    +                    "description": "Pending bit 19",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "PR20": {
    +                    "description": "Pending bit 20",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "PR21": {
    +                    "description": "Pending bit 21",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "PR22": {
    +                    "description": "Pending bit 22",
    +                    "offset": 22,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "FLASH": {
    +        "description": "FLASH",
    +        "children": {
    +          "registers": {
    +            "ACR": {
    +              "description": "Flash access control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LATENCY": {
    +                    "description": "Latency",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "PRFTEN": {
    +                    "description": "Prefetch enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ICEN": {
    +                    "description": "Instruction cache enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DCEN": {
    +                    "description": "Data cache enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ICRST": {
    +                    "description": "Instruction cache reset",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "DCRST": {
    +                    "description": "Data cache reset",
    +                    "offset": 12,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "KEYR": {
    +              "description": "Flash key register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "KEY": {
    +                    "description": "FPEC key",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OPTKEYR": {
    +              "description": "Flash option key register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "OPTKEY": {
    +                    "description": "Option byte key",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "Status register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EOP": {
    +                    "description": "End of operation",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "OPERR": {
    +                    "description": "Operation error",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "WRPERR": {
    +                    "description": "Write protection error",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "PGAERR": {
    +                    "description": "Programming alignment\n              error",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PGPERR": {
    +                    "description": "Programming parallelism\n              error",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PGSERR": {
    +                    "description": "Programming sequence error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BSY": {
    +                    "description": "Busy",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CR": {
    +              "description": "Control register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 2147483648,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PG": {
    +                    "description": "Programming",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SER": {
    +                    "description": "Sector Erase",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MER": {
    +                    "description": "Mass Erase",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SNB": {
    +                    "description": "Sector number",
    +                    "offset": 3,
    +                    "size": 4
    +                  },
    +                  "PSIZE": {
    +                    "description": "Program size",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "STRT": {
    +                    "description": "Start",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EOPIE": {
    +                    "description": "End of operation interrupt\n              enable",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "Error interrupt enable",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "LOCK": {
    +                    "description": "Lock",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OPTCR": {
    +              "description": "Flash option control register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 20,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OPTLOCK": {
    +                    "description": "Option lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "OPTSTRT": {
    +                    "description": "Option start",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "BOR_LEV": {
    +                    "description": "BOR reset Level",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "WDG_SW": {
    +                    "description": "WDG_SW User option bytes",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "nRST_STOP": {
    +                    "description": "nRST_STOP User option\n              bytes",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "nRST_STDBY": {
    +                    "description": "nRST_STDBY User option\n              bytes",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RDP": {
    +                    "description": "Read protect",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "nWRP": {
    +                    "description": "Not write protect",
    +                    "offset": 16,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "USART6": {
    +        "description": "Universal synchronous asynchronous receiver\n      transmitter",
    +        "children": {
    +          "registers": {
    +            "SR": {
    +              "description": "Status register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 12582912,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTS": {
    +                    "description": "CTS flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "LBD": {
    +                    "description": "LIN break detection flag",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TXE": {
    +                    "description": "Transmit data register\n              empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TC": {
    +                    "description": "Transmission complete",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RXNE": {
    +                    "description": "Read data register not\n              empty",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IDLE": {
    +                    "description": "IDLE line detected",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ORE": {
    +                    "description": "Overrun error",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NF": {
    +                    "description": "Noise detected flag",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FE": {
    +                    "description": "Framing error",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PE": {
    +                    "description": "Parity error",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "Data register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DR": {
    +                    "description": "Data value",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "BRR": {
    +              "description": "Baud rate register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DIV_Mantissa": {
    +                    "description": "mantissa of USARTDIV",
    +                    "offset": 4,
    +                    "size": 12
    +                  },
    +                  "DIV_Fraction": {
    +                    "description": "fraction of USARTDIV",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CR1": {
    +              "description": "Control register 1",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OVER8": {
    +                    "description": "Oversampling mode",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "UE": {
    +                    "description": "USART enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "M": {
    +                    "description": "Word length",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WAKE": {
    +                    "description": "Wakeup method",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "PCE": {
    +                    "description": "Parity control enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PS": {
    +                    "description": "Parity selection",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PEIE": {
    +                    "description": "PE interrupt enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TXEIE": {
    +                    "description": "TXE interrupt enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transmission complete interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RXNEIE": {
    +                    "description": "RXNE interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IDLEIE": {
    +                    "description": "IDLE interrupt enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TE": {
    +                    "description": "Transmitter enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RE": {
    +                    "description": "Receiver enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RWU": {
    +                    "description": "Receiver wakeup",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SBK": {
    +                    "description": "Send break",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "Control register 2",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LINEN": {
    +                    "description": "LIN mode enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "STOP": {
    +                    "description": "STOP bits",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "CLKEN": {
    +                    "description": "Clock enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CPOL": {
    +                    "description": "Clock polarity",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CPHA": {
    +                    "description": "Clock phase",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "LBCL": {
    +                    "description": "Last bit clock pulse",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LBDIE": {
    +                    "description": "LIN break detection interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "LBDL": {
    +                    "description": "lin break detection length",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ADD": {
    +                    "description": "Address of the USART node",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CR3": {
    +              "description": "Control register 3",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ONEBIT": {
    +                    "description": "One sample bit method\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CTSIE": {
    +                    "description": "CTS interrupt enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CTSE": {
    +                    "description": "CTS enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RTSE": {
    +                    "description": "RTS enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DMAT": {
    +                    "description": "DMA enable transmitter",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "DMAR": {
    +                    "description": "DMA enable receiver",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SCEN": {
    +                    "description": "Smartcard mode enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NACK": {
    +                    "description": "Smartcard NACK enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "HDSEL": {
    +                    "description": "Half-duplex selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IRLP": {
    +                    "description": "IrDA low-power",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IREN": {
    +                    "description": "IrDA mode enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EIE": {
    +                    "description": "Error interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GTPR": {
    +              "description": "Guard time and prescaler\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "GT": {
    +                    "description": "Guard time value",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIM6": {
    +        "description": "Basic timers",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OPM": {
    +                    "description": "One-pulse mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MMS": {
    +                    "description": "Master mode selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "UDE": {
    +                    "description": "Update DMA request enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "Low counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARR": {
    +                    "description": "Low Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "CAN1": {
    +        "description": "Controller area network",
    +        "children": {
    +          "registers": {
    +            "MCR": {
    +              "description": "master control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 65538,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBF": {
    +                    "description": "DBF",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "RESET",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TTCM": {
    +                    "description": "TTCM",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ABOM": {
    +                    "description": "ABOM",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "AWUM": {
    +                    "description": "AWUM",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NART": {
    +                    "description": "NART",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RFLM": {
    +                    "description": "RFLM",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TXFP": {
    +                    "description": "TXFP",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SLEEP": {
    +                    "description": "SLEEP",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "INRQ": {
    +                    "description": "INRQ",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MSR": {
    +              "description": "master status register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 3074,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX": {
    +                    "description": "RX",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SAMP": {
    +                    "description": "SAMP",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXM": {
    +                    "description": "RXM",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXM": {
    +                    "description": "TXM",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SLAKI": {
    +                    "description": "SLAKI",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "WKUI": {
    +                    "description": "WKUI",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ERRI": {
    +                    "description": "ERRI",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SLAK": {
    +                    "description": "SLAK",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INAK": {
    +                    "description": "INAK",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "TSR": {
    +              "description": "transmit status register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 469762048,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LOW2": {
    +                    "description": "Lowest priority flag for mailbox\n              2",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LOW1": {
    +                    "description": "Lowest priority flag for mailbox\n              1",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LOW0": {
    +                    "description": "Lowest priority flag for mailbox\n              0",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TME2": {
    +                    "description": "Lowest priority flag for mailbox\n              2",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TME1": {
    +                    "description": "Lowest priority flag for mailbox\n              1",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TME0": {
    +                    "description": "Lowest priority flag for mailbox\n              0",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CODE": {
    +                    "description": "CODE",
    +                    "offset": 24,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "ABRQ2": {
    +                    "description": "ABRQ2",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "TERR2": {
    +                    "description": "TERR2",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "ALST2": {
    +                    "description": "ALST2",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TXOK2": {
    +                    "description": "TXOK2",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "RQCP2": {
    +                    "description": "RQCP2",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "ABRQ1": {
    +                    "description": "ABRQ1",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TERR1": {
    +                    "description": "TERR1",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ALST1": {
    +                    "description": "ALST1",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TXOK1": {
    +                    "description": "TXOK1",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RQCP1": {
    +                    "description": "RQCP1",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ABRQ0": {
    +                    "description": "ABRQ0",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TERR0": {
    +                    "description": "TERR0",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ALST0": {
    +                    "description": "ALST0",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TXOK0": {
    +                    "description": "TXOK0",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RQCP0": {
    +                    "description": "RQCP0",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RF0R": {
    +              "description": "receive FIFO 0 register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RFOM0": {
    +                    "description": "RFOM0",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FOVR0": {
    +                    "description": "FOVR0",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FULL0": {
    +                    "description": "FULL0",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FMP0": {
    +                    "description": "FMP0",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RF1R": {
    +              "description": "receive FIFO 1 register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RFOM1": {
    +                    "description": "RFOM1",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FOVR1": {
    +                    "description": "FOVR1",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FULL1": {
    +                    "description": "FULL1",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FMP1": {
    +                    "description": "FMP1",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IER": {
    +              "description": "interrupt enable register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SLKIE": {
    +                    "description": "SLKIE",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "WKUIE": {
    +                    "description": "WKUIE",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "ERRIE",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LECIE": {
    +                    "description": "LECIE",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BOFIE": {
    +                    "description": "BOFIE",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EPVIE": {
    +                    "description": "EPVIE",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EWGIE": {
    +                    "description": "EWGIE",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FOVIE1": {
    +                    "description": "FOVIE1",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FFIE1": {
    +                    "description": "FFIE1",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FMPIE1": {
    +                    "description": "FMPIE1",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FOVIE0": {
    +                    "description": "FOVIE0",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FFIE0": {
    +                    "description": "FFIE0",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FMPIE0": {
    +                    "description": "FMPIE0",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TMEIE": {
    +                    "description": "TMEIE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ESR": {
    +              "description": "interrupt enable register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REC": {
    +                    "description": "REC",
    +                    "offset": 24,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "TEC": {
    +                    "description": "TEC",
    +                    "offset": 16,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "LEC": {
    +                    "description": "LEC",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "BOFF": {
    +                    "description": "BOFF",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPVF": {
    +                    "description": "EPVF",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EWGF": {
    +                    "description": "EWGF",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "BTR": {
    +              "description": "bit timing register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SILM": {
    +                    "description": "SILM",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LBKM": {
    +                    "description": "LBKM",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SJW": {
    +                    "description": "SJW",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "TS2": {
    +                    "description": "TS2",
    +                    "offset": 20,
    +                    "size": 3
    +                  },
    +                  "TS1": {
    +                    "description": "TS1",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "BRP": {
    +                    "description": "BRP",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "TI0R": {
    +              "description": "TX mailbox identifier register",
    +              "offset": 384,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STID": {
    +                    "description": "STID",
    +                    "offset": 21,
    +                    "size": 11
    +                  },
    +                  "EXID": {
    +                    "description": "EXID",
    +                    "offset": 3,
    +                    "size": 18
    +                  },
    +                  "IDE": {
    +                    "description": "IDE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTR": {
    +                    "description": "RTR",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TXRQ": {
    +                    "description": "TXRQ",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TDT0R": {
    +              "description": "mailbox data length control and time stamp\n          register",
    +              "offset": 388,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIME": {
    +                    "description": "TIME",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "TGT": {
    +                    "description": "TGT",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DLC": {
    +                    "description": "DLC",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "TDL0R": {
    +              "description": "mailbox data low register",
    +              "offset": 392,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA3": {
    +                    "description": "DATA3",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA2": {
    +                    "description": "DATA2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA1": {
    +                    "description": "DATA1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA0": {
    +                    "description": "DATA0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TDH0R": {
    +              "description": "mailbox data high register",
    +              "offset": 396,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA7": {
    +                    "description": "DATA7",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA6": {
    +                    "description": "DATA6",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA5": {
    +                    "description": "DATA5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA4": {
    +                    "description": "DATA4",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TI1R": {
    +              "description": "mailbox identifier register",
    +              "offset": 400,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STID": {
    +                    "description": "STID",
    +                    "offset": 21,
    +                    "size": 11
    +                  },
    +                  "EXID": {
    +                    "description": "EXID",
    +                    "offset": 3,
    +                    "size": 18
    +                  },
    +                  "IDE": {
    +                    "description": "IDE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTR": {
    +                    "description": "RTR",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TXRQ": {
    +                    "description": "TXRQ",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TDT1R": {
    +              "description": "mailbox data length control and time stamp\n          register",
    +              "offset": 404,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIME": {
    +                    "description": "TIME",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "TGT": {
    +                    "description": "TGT",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DLC": {
    +                    "description": "DLC",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "TDL1R": {
    +              "description": "mailbox data low register",
    +              "offset": 408,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA3": {
    +                    "description": "DATA3",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA2": {
    +                    "description": "DATA2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA1": {
    +                    "description": "DATA1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA0": {
    +                    "description": "DATA0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TDH1R": {
    +              "description": "mailbox data high register",
    +              "offset": 412,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA7": {
    +                    "description": "DATA7",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA6": {
    +                    "description": "DATA6",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA5": {
    +                    "description": "DATA5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA4": {
    +                    "description": "DATA4",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TI2R": {
    +              "description": "mailbox identifier register",
    +              "offset": 416,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STID": {
    +                    "description": "STID",
    +                    "offset": 21,
    +                    "size": 11
    +                  },
    +                  "EXID": {
    +                    "description": "EXID",
    +                    "offset": 3,
    +                    "size": 18
    +                  },
    +                  "IDE": {
    +                    "description": "IDE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTR": {
    +                    "description": "RTR",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TXRQ": {
    +                    "description": "TXRQ",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TDT2R": {
    +              "description": "mailbox data length control and time stamp\n          register",
    +              "offset": 420,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIME": {
    +                    "description": "TIME",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "TGT": {
    +                    "description": "TGT",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DLC": {
    +                    "description": "DLC",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "TDL2R": {
    +              "description": "mailbox data low register",
    +              "offset": 424,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA3": {
    +                    "description": "DATA3",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA2": {
    +                    "description": "DATA2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA1": {
    +                    "description": "DATA1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA0": {
    +                    "description": "DATA0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TDH2R": {
    +              "description": "mailbox data high register",
    +              "offset": 428,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA7": {
    +                    "description": "DATA7",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA6": {
    +                    "description": "DATA6",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA5": {
    +                    "description": "DATA5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA4": {
    +                    "description": "DATA4",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "RI0R": {
    +              "description": "receive FIFO mailbox identifier\n          register",
    +              "offset": 432,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "STID": {
    +                    "description": "STID",
    +                    "offset": 21,
    +                    "size": 11
    +                  },
    +                  "EXID": {
    +                    "description": "EXID",
    +                    "offset": 3,
    +                    "size": 18
    +                  },
    +                  "IDE": {
    +                    "description": "IDE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTR": {
    +                    "description": "RTR",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RDT0R": {
    +              "description": "mailbox data high register",
    +              "offset": 436,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TIME": {
    +                    "description": "TIME",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "FMI": {
    +                    "description": "FMI",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DLC": {
    +                    "description": "DLC",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "RDL0R": {
    +              "description": "mailbox data high register",
    +              "offset": 440,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DATA3": {
    +                    "description": "DATA3",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA2": {
    +                    "description": "DATA2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA1": {
    +                    "description": "DATA1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA0": {
    +                    "description": "DATA0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "RDH0R": {
    +              "description": "receive FIFO mailbox data high\n          register",
    +              "offset": 444,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DATA7": {
    +                    "description": "DATA7",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA6": {
    +                    "description": "DATA6",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA5": {
    +                    "description": "DATA5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA4": {
    +                    "description": "DATA4",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "RI1R": {
    +              "description": "mailbox data high register",
    +              "offset": 448,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "STID": {
    +                    "description": "STID",
    +                    "offset": 21,
    +                    "size": 11
    +                  },
    +                  "EXID": {
    +                    "description": "EXID",
    +                    "offset": 3,
    +                    "size": 18
    +                  },
    +                  "IDE": {
    +                    "description": "IDE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTR": {
    +                    "description": "RTR",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RDT1R": {
    +              "description": "mailbox data high register",
    +              "offset": 452,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TIME": {
    +                    "description": "TIME",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "FMI": {
    +                    "description": "FMI",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DLC": {
    +                    "description": "DLC",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "RDL1R": {
    +              "description": "mailbox data high register",
    +              "offset": 456,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DATA3": {
    +                    "description": "DATA3",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA2": {
    +                    "description": "DATA2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA1": {
    +                    "description": "DATA1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA0": {
    +                    "description": "DATA0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "RDH1R": {
    +              "description": "mailbox data high register",
    +              "offset": 460,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DATA7": {
    +                    "description": "DATA7",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA6": {
    +                    "description": "DATA6",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA5": {
    +                    "description": "DATA5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA4": {
    +                    "description": "DATA4",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "FMR": {
    +              "description": "filter master register",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 706481665,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CAN2SB": {
    +                    "description": "CAN2SB",
    +                    "offset": 8,
    +                    "size": 6
    +                  },
    +                  "FINIT": {
    +                    "description": "FINIT",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FM1R": {
    +              "description": "filter mode register",
    +              "offset": 516,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FBM0": {
    +                    "description": "Filter mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FBM1": {
    +                    "description": "Filter mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FBM2": {
    +                    "description": "Filter mode",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FBM3": {
    +                    "description": "Filter mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FBM4": {
    +                    "description": "Filter mode",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FBM5": {
    +                    "description": "Filter mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FBM6": {
    +                    "description": "Filter mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FBM7": {
    +                    "description": "Filter mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FBM8": {
    +                    "description": "Filter mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FBM9": {
    +                    "description": "Filter mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FBM10": {
    +                    "description": "Filter mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FBM11": {
    +                    "description": "Filter mode",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FBM12": {
    +                    "description": "Filter mode",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FBM13": {
    +                    "description": "Filter mode",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FBM14": {
    +                    "description": "Filter mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FBM15": {
    +                    "description": "Filter mode",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FBM16": {
    +                    "description": "Filter mode",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FBM17": {
    +                    "description": "Filter mode",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FBM18": {
    +                    "description": "Filter mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FBM19": {
    +                    "description": "Filter mode",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FBM20": {
    +                    "description": "Filter mode",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FBM21": {
    +                    "description": "Filter mode",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FBM22": {
    +                    "description": "Filter mode",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FBM23": {
    +                    "description": "Filter mode",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FBM24": {
    +                    "description": "Filter mode",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FBM25": {
    +                    "description": "Filter mode",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FBM26": {
    +                    "description": "Filter mode",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FBM27": {
    +                    "description": "Filter mode",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS1R": {
    +              "description": "filter scale register",
    +              "offset": 524,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FSC0": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FSC1": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FSC2": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FSC3": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FSC4": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FSC5": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FSC6": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FSC7": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FSC8": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FSC9": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FSC10": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FSC11": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FSC12": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FSC13": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FSC14": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FSC15": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FSC16": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FSC17": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FSC18": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FSC19": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FSC20": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FSC21": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FSC22": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FSC23": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FSC24": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FSC25": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FSC26": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FSC27": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FFA1R": {
    +              "description": "filter FIFO assignment\n          register",
    +              "offset": 532,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FFA0": {
    +                    "description": "Filter FIFO assignment for filter\n              0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FFA1": {
    +                    "description": "Filter FIFO assignment for filter\n              1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FFA2": {
    +                    "description": "Filter FIFO assignment for filter\n              2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FFA3": {
    +                    "description": "Filter FIFO assignment for filter\n              3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FFA4": {
    +                    "description": "Filter FIFO assignment for filter\n              4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FFA5": {
    +                    "description": "Filter FIFO assignment for filter\n              5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FFA6": {
    +                    "description": "Filter FIFO assignment for filter\n              6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FFA7": {
    +                    "description": "Filter FIFO assignment for filter\n              7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FFA8": {
    +                    "description": "Filter FIFO assignment for filter\n              8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FFA9": {
    +                    "description": "Filter FIFO assignment for filter\n              9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FFA10": {
    +                    "description": "Filter FIFO assignment for filter\n              10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FFA11": {
    +                    "description": "Filter FIFO assignment for filter\n              11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FFA12": {
    +                    "description": "Filter FIFO assignment for filter\n              12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FFA13": {
    +                    "description": "Filter FIFO assignment for filter\n              13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FFA14": {
    +                    "description": "Filter FIFO assignment for filter\n              14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FFA15": {
    +                    "description": "Filter FIFO assignment for filter\n              15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FFA16": {
    +                    "description": "Filter FIFO assignment for filter\n              16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FFA17": {
    +                    "description": "Filter FIFO assignment for filter\n              17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FFA18": {
    +                    "description": "Filter FIFO assignment for filter\n              18",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FFA19": {
    +                    "description": "Filter FIFO assignment for filter\n              19",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FFA20": {
    +                    "description": "Filter FIFO assignment for filter\n              20",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FFA21": {
    +                    "description": "Filter FIFO assignment for filter\n              21",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FFA22": {
    +                    "description": "Filter FIFO assignment for filter\n              22",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FFA23": {
    +                    "description": "Filter FIFO assignment for filter\n              23",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FFA24": {
    +                    "description": "Filter FIFO assignment for filter\n              24",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FFA25": {
    +                    "description": "Filter FIFO assignment for filter\n              25",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FFA26": {
    +                    "description": "Filter FIFO assignment for filter\n              26",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FFA27": {
    +                    "description": "Filter FIFO assignment for filter\n              27",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FA1R": {
    +              "description": "filter activation register",
    +              "offset": 540,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FACT0": {
    +                    "description": "Filter active",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FACT1": {
    +                    "description": "Filter active",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FACT2": {
    +                    "description": "Filter active",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FACT3": {
    +                    "description": "Filter active",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FACT4": {
    +                    "description": "Filter active",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FACT5": {
    +                    "description": "Filter active",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FACT6": {
    +                    "description": "Filter active",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FACT7": {
    +                    "description": "Filter active",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FACT8": {
    +                    "description": "Filter active",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FACT9": {
    +                    "description": "Filter active",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FACT10": {
    +                    "description": "Filter active",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FACT11": {
    +                    "description": "Filter active",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FACT12": {
    +                    "description": "Filter active",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FACT13": {
    +                    "description": "Filter active",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FACT14": {
    +                    "description": "Filter active",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FACT15": {
    +                    "description": "Filter active",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FACT16": {
    +                    "description": "Filter active",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FACT17": {
    +                    "description": "Filter active",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FACT18": {
    +                    "description": "Filter active",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FACT19": {
    +                    "description": "Filter active",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FACT20": {
    +                    "description": "Filter active",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FACT21": {
    +                    "description": "Filter active",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FACT22": {
    +                    "description": "Filter active",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FACT23": {
    +                    "description": "Filter active",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FACT24": {
    +                    "description": "Filter active",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FACT25": {
    +                    "description": "Filter active",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FACT26": {
    +                    "description": "Filter active",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FACT27": {
    +                    "description": "Filter active",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F0R1": {
    +              "description": "Filter bank 0 register 1",
    +              "offset": 576,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F0R2": {
    +              "description": "Filter bank 0 register 2",
    +              "offset": 580,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F1R1": {
    +              "description": "Filter bank 1 register 1",
    +              "offset": 584,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F1R2": {
    +              "description": "Filter bank 1 register 2",
    +              "offset": 588,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F2R1": {
    +              "description": "Filter bank 2 register 1",
    +              "offset": 592,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F2R2": {
    +              "description": "Filter bank 2 register 2",
    +              "offset": 596,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F3R1": {
    +              "description": "Filter bank 3 register 1",
    +              "offset": 600,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F3R2": {
    +              "description": "Filter bank 3 register 2",
    +              "offset": 604,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F4R1": {
    +              "description": "Filter bank 4 register 1",
    +              "offset": 608,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F4R2": {
    +              "description": "Filter bank 4 register 2",
    +              "offset": 612,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F5R1": {
    +              "description": "Filter bank 5 register 1",
    +              "offset": 616,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F5R2": {
    +              "description": "Filter bank 5 register 2",
    +              "offset": 620,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F6R1": {
    +              "description": "Filter bank 6 register 1",
    +              "offset": 624,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F6R2": {
    +              "description": "Filter bank 6 register 2",
    +              "offset": 628,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F7R1": {
    +              "description": "Filter bank 7 register 1",
    +              "offset": 632,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F7R2": {
    +              "description": "Filter bank 7 register 2",
    +              "offset": 636,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F8R1": {
    +              "description": "Filter bank 8 register 1",
    +              "offset": 640,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F8R2": {
    +              "description": "Filter bank 8 register 2",
    +              "offset": 644,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F9R1": {
    +              "description": "Filter bank 9 register 1",
    +              "offset": 648,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F9R2": {
    +              "description": "Filter bank 9 register 2",
    +              "offset": 652,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F10R1": {
    +              "description": "Filter bank 10 register 1",
    +              "offset": 656,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F10R2": {
    +              "description": "Filter bank 10 register 2",
    +              "offset": 660,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F11R1": {
    +              "description": "Filter bank 11 register 1",
    +              "offset": 664,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F11R2": {
    +              "description": "Filter bank 11 register 2",
    +              "offset": 668,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F12R1": {
    +              "description": "Filter bank 4 register 1",
    +              "offset": 672,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F12R2": {
    +              "description": "Filter bank 12 register 2",
    +              "offset": 676,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F13R1": {
    +              "description": "Filter bank 13 register 1",
    +              "offset": 680,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F13R2": {
    +              "description": "Filter bank 13 register 2",
    +              "offset": 684,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F14R1": {
    +              "description": "Filter bank 14 register 1",
    +              "offset": 688,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F14R2": {
    +              "description": "Filter bank 14 register 2",
    +              "offset": 692,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F15R1": {
    +              "description": "Filter bank 15 register 1",
    +              "offset": 696,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F15R2": {
    +              "description": "Filter bank 15 register 2",
    +              "offset": 700,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F16R1": {
    +              "description": "Filter bank 16 register 1",
    +              "offset": 704,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F16R2": {
    +              "description": "Filter bank 16 register 2",
    +              "offset": 708,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F17R1": {
    +              "description": "Filter bank 17 register 1",
    +              "offset": 712,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F17R2": {
    +              "description": "Filter bank 17 register 2",
    +              "offset": 716,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F18R1": {
    +              "description": "Filter bank 18 register 1",
    +              "offset": 720,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F18R2": {
    +              "description": "Filter bank 18 register 2",
    +              "offset": 724,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F19R1": {
    +              "description": "Filter bank 19 register 1",
    +              "offset": 728,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F19R2": {
    +              "description": "Filter bank 19 register 2",
    +              "offset": 732,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F20R1": {
    +              "description": "Filter bank 20 register 1",
    +              "offset": 736,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F20R2": {
    +              "description": "Filter bank 20 register 2",
    +              "offset": 740,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F21R1": {
    +              "description": "Filter bank 21 register 1",
    +              "offset": 744,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F21R2": {
    +              "description": "Filter bank 21 register 2",
    +              "offset": 748,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F22R1": {
    +              "description": "Filter bank 22 register 1",
    +              "offset": 752,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F22R2": {
    +              "description": "Filter bank 22 register 2",
    +              "offset": 756,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F23R1": {
    +              "description": "Filter bank 23 register 1",
    +              "offset": 760,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F23R2": {
    +              "description": "Filter bank 23 register 2",
    +              "offset": 764,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F24R1": {
    +              "description": "Filter bank 24 register 1",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F24R2": {
    +              "description": "Filter bank 24 register 2",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F25R1": {
    +              "description": "Filter bank 25 register 1",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F25R2": {
    +              "description": "Filter bank 25 register 2",
    +              "offset": 780,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F26R1": {
    +              "description": "Filter bank 26 register 1",
    +              "offset": 784,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F26R2": {
    +              "description": "Filter bank 26 register 2",
    +              "offset": 788,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F27R1": {
    +              "description": "Filter bank 27 register 1",
    +              "offset": 792,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F27R2": {
    +              "description": "Filter bank 27 register 2",
    +              "offset": 796,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "OTG_FS_PWRCLK": {
    +        "description": "USB on the go full speed",
    +        "children": {
    +          "registers": {
    +            "FS_PCGCCTL": {
    +              "description": "OTG_FS power and clock gating control\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STPPCLK": {
    +                    "description": "Stop PHY clock",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "GATEHCLK": {
    +                    "description": "Gate HCLK",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PHYSUSP": {
    +                    "description": "PHY Suspended",
    +                    "offset": 4,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "DAC": {
    +        "description": "Digital-to-analog converter",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAUDRIE2": {
    +                    "description": "DAC channel2 DMA underrun interrupt\n              enable",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DMAEN2": {
    +                    "description": "DAC channel2 DMA enable",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "MAMP2": {
    +                    "description": "DAC channel2 mask/amplitude\n              selector",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "WAVE2": {
    +                    "description": "DAC channel2 noise/triangle wave\n              generation enable",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "TSEL2": {
    +                    "description": "DAC channel2 trigger\n              selection",
    +                    "offset": 19,
    +                    "size": 3
    +                  },
    +                  "TEN2": {
    +                    "description": "DAC channel2 trigger\n              enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "BOFF2": {
    +                    "description": "DAC channel2 output buffer\n              disable",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EN2": {
    +                    "description": "DAC channel2 enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "DMAUDRIE1": {
    +                    "description": "DAC channel1 DMA Underrun Interrupt\n              enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "DMAEN1": {
    +                    "description": "DAC channel1 DMA enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "MAMP1": {
    +                    "description": "DAC channel1 mask/amplitude\n              selector",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "WAVE1": {
    +                    "description": "DAC channel1 noise/triangle wave\n              generation enable",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "TSEL1": {
    +                    "description": "DAC channel1 trigger\n              selection",
    +                    "offset": 3,
    +                    "size": 3
    +                  },
    +                  "TEN1": {
    +                    "description": "DAC channel1 trigger\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "BOFF1": {
    +                    "description": "DAC channel1 output buffer\n              disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN1": {
    +                    "description": "DAC channel1 enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SWTRIGR": {
    +              "description": "software trigger register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "SWTRIG2": {
    +                    "description": "DAC channel2 software\n              trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SWTRIG1": {
    +                    "description": "DAC channel1 software\n              trigger",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DHR12R1": {
    +              "description": "channel1 12-bit right-aligned data holding\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC1DHR": {
    +                    "description": "DAC channel1 12-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DHR12L1": {
    +              "description": "channel1 12-bit left aligned data holding\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC1DHR": {
    +                    "description": "DAC channel1 12-bit left-aligned\n              data",
    +                    "offset": 4,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DHR8R1": {
    +              "description": "channel1 8-bit right aligned data holding\n          register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC1DHR": {
    +                    "description": "DAC channel1 8-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "DHR12R2": {
    +              "description": "channel2 12-bit right aligned data holding\n          register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC2DHR": {
    +                    "description": "DAC channel2 12-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DHR12L2": {
    +              "description": "channel2 12-bit left aligned data holding\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC2DHR": {
    +                    "description": "DAC channel2 12-bit left-aligned\n              data",
    +                    "offset": 4,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DHR8R2": {
    +              "description": "channel2 8-bit right-aligned data holding\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC2DHR": {
    +                    "description": "DAC channel2 8-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "DHR12RD": {
    +              "description": "Dual DAC 12-bit right-aligned data holding\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC2DHR": {
    +                    "description": "DAC channel2 12-bit right-aligned\n              data",
    +                    "offset": 16,
    +                    "size": 12
    +                  },
    +                  "DACC1DHR": {
    +                    "description": "DAC channel1 12-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DHR12LD": {
    +              "description": "DUAL DAC 12-bit left aligned data holding\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC2DHR": {
    +                    "description": "DAC channel2 12-bit left-aligned\n              data",
    +                    "offset": 20,
    +                    "size": 12
    +                  },
    +                  "DACC1DHR": {
    +                    "description": "DAC channel1 12-bit left-aligned\n              data",
    +                    "offset": 4,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DHR8RD": {
    +              "description": "DUAL DAC 8-bit right aligned data holding\n          register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC2DHR": {
    +                    "description": "DAC channel2 8-bit right-aligned\n              data",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DACC1DHR": {
    +                    "description": "DAC channel1 8-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "DOR1": {
    +              "description": "channel1 data output register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DACC1DOR": {
    +                    "description": "DAC channel1 data output",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DOR2": {
    +              "description": "channel2 data output register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DACC2DOR": {
    +                    "description": "DAC channel2 data output",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAUDR2": {
    +                    "description": "DAC channel2 DMA underrun\n              flag",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DMAUDR1": {
    +                    "description": "DAC channel1 DMA underrun\n              flag",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "PWR": {
    +        "description": "Power control",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "power control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FPDS": {
    +                    "description": "Flash power down in Stop\n              mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DBP": {
    +                    "description": "Disable backup domain write\n              protection",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PLS": {
    +                    "description": "PVD level selection",
    +                    "offset": 5,
    +                    "size": 3
    +                  },
    +                  "PVDE": {
    +                    "description": "Power voltage detector\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CSBF": {
    +                    "description": "Clear standby flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CWUF": {
    +                    "description": "Clear wakeup flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PDDS": {
    +                    "description": "Power down deepsleep",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "LPDS": {
    +                    "description": "Low-power deep sleep",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CSR": {
    +              "description": "power control/status register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WUF": {
    +                    "description": "Wakeup flag",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SBF": {
    +                    "description": "Standby flag",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PVDO": {
    +                    "description": "PVD output",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BRR": {
    +                    "description": "Backup regulator ready",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EWUP": {
    +                    "description": "Enable WKUP pin",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BRE": {
    +                    "description": "Backup regulator enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "VOSRDY": {
    +                    "description": "Regulator voltage scaling output\n              selection ready bit",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "I2C3": {
    +        "description": "Inter-integrated circuit",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "Control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SWRST": {
    +                    "description": "Software reset",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ALERT": {
    +                    "description": "SMBus alert",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "PEC": {
    +                    "description": "Packet error checking",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "POS": {
    +                    "description": "Acknowledge/PEC Position (for data\n              reception)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "Acknowledge enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "STOP": {
    +                    "description": "Stop generation",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "START": {
    +                    "description": "Start generation",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "NOSTRETCH": {
    +                    "description": "Clock stretching disable (Slave\n              mode)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ENGC": {
    +                    "description": "General call enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ENPEC": {
    +                    "description": "PEC enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ENARP": {
    +                    "description": "ARP enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SMBTYPE": {
    +                    "description": "SMBus type",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SMBUS": {
    +                    "description": "SMBus mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PE": {
    +                    "description": "Peripheral enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "Control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LAST": {
    +                    "description": "DMA last transfer",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "DMAEN": {
    +                    "description": "DMA requests enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ITBUFEN": {
    +                    "description": "Buffer interrupt enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ITEVTEN": {
    +                    "description": "Event interrupt enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ITERREN": {
    +                    "description": "Error interrupt enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FREQ": {
    +                    "description": "Peripheral clock frequency",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "OAR1": {
    +              "description": "Own address register 1",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADDMODE": {
    +                    "description": "Addressing mode (slave\n              mode)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ADD10": {
    +                    "description": "Interface address",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "ADD7": {
    +                    "description": "Interface address",
    +                    "offset": 1,
    +                    "size": 7
    +                  },
    +                  "ADD0": {
    +                    "description": "Interface address",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OAR2": {
    +              "description": "Own address register 2",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADD2": {
    +                    "description": "Interface address",
    +                    "offset": 1,
    +                    "size": 7
    +                  },
    +                  "ENDUAL": {
    +                    "description": "Dual addressing mode\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "Data register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DR": {
    +                    "description": "8-bit data register",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SR1": {
    +              "description": "Status register 1",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SMBALERT": {
    +                    "description": "SMBus alert",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TIMEOUT": {
    +                    "description": "Timeout or Tlow error",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PECERR": {
    +                    "description": "PEC Error in reception",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "OVR": {
    +                    "description": "Overrun/Underrun",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AF": {
    +                    "description": "Acknowledge failure",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ARLO": {
    +                    "description": "Arbitration lost (master\n              mode)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BERR": {
    +                    "description": "Bus error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TxE": {
    +                    "description": "Data register empty\n              (transmitters)",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RxNE": {
    +                    "description": "Data register not empty\n              (receivers)",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "STOPF": {
    +                    "description": "Stop detection (slave\n              mode)",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ADD10": {
    +                    "description": "10-bit header sent (Master\n              mode)",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BTF": {
    +                    "description": "Byte transfer finished",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ADDR": {
    +                    "description": "Address sent (master mode)/matched\n              (slave mode)",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SB": {
    +                    "description": "Start bit (Master mode)",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SR2": {
    +              "description": "Status register 2",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "PEC": {
    +                    "description": "acket error checking\n              register",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DUALF": {
    +                    "description": "Dual flag (Slave mode)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SMBHOST": {
    +                    "description": "SMBus host header (Slave\n              mode)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SMBDEFAULT": {
    +                    "description": "SMBus device default address (Slave\n              mode)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GENCALL": {
    +                    "description": "General call address (Slave\n              mode)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TRA": {
    +                    "description": "Transmitter/receiver",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "BUSY": {
    +                    "description": "Bus busy",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MSL": {
    +                    "description": "Master/slave",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCR": {
    +              "description": "Clock control register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "F_S": {
    +                    "description": "I2C master mode selection",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "DUTY": {
    +                    "description": "Fast mode duty cycle",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CCR": {
    +                    "description": "Clock control register in Fast/Standard\n              mode (Master mode)",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "TRISE": {
    +              "description": "TRISE register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 2,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TRISE": {
    +                    "description": "Maximum rise time in Fast/Standard mode\n              (Master mode)",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "OTG_FS_DEVICE": {
    +        "description": "USB on the go full speed",
    +        "children": {
    +          "registers": {
    +            "FS_DCFG": {
    +              "description": "OTG_FS device configuration register\n          (OTG_FS_DCFG)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 35651584,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DSPD": {
    +                    "description": "Device speed",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "NZLSOHSK": {
    +                    "description": "Non-zero-length status OUT\n              handshake",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 4,
    +                    "size": 7
    +                  },
    +                  "PFIVL": {
    +                    "description": "Periodic frame interval",
    +                    "offset": 11,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DCTL": {
    +              "description": "OTG_FS device control register\n          (OTG_FS_DCTL)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RWUSIG": {
    +                    "description": "Remote wakeup signaling",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SDIS": {
    +                    "description": "Soft disconnect",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GINSTS": {
    +                    "description": "Global IN NAK status",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GONSTS": {
    +                    "description": "Global OUT NAK status",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TCTL": {
    +                    "description": "Test control",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SGINAK": {
    +                    "description": "Set global IN NAK",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CGINAK": {
    +                    "description": "Clear global IN NAK",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SGONAK": {
    +                    "description": "Set global OUT NAK",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CGONAK": {
    +                    "description": "Clear global OUT NAK",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "POPRGDNE": {
    +                    "description": "Power-on programming done",
    +                    "offset": 11,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DSTS": {
    +              "description": "OTG_FS device status register\n          (OTG_FS_DSTS)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 16,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SUSPSTS": {
    +                    "description": "Suspend status",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ENUMSPD": {
    +                    "description": "Enumerated speed",
    +                    "offset": 1,
    +                    "size": 2
    +                  },
    +                  "EERR": {
    +                    "description": "Erratic error",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FNSOF": {
    +                    "description": "Frame number of the received\n              SOF",
    +                    "offset": 8,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DIEPMSK": {
    +              "description": "OTG_FS device IN endpoint common interrupt\n          mask register (OTG_FS_DIEPMSK)",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed interrupt\n              mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDM": {
    +                    "description": "Endpoint disabled interrupt\n              mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TOM": {
    +                    "description": "Timeout condition mask (Non-isochronous\n              endpoints)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ITTXFEMSK": {
    +                    "description": "IN token received when TxFIFO empty\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INEPNMM": {
    +                    "description": "IN token received with EP mismatch\n              mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INEPNEM": {
    +                    "description": "IN endpoint NAK effective\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DOEPMSK": {
    +              "description": "OTG_FS device OUT endpoint common interrupt\n          mask register (OTG_FS_DOEPMSK)",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed interrupt\n              mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDM": {
    +                    "description": "Endpoint disabled interrupt\n              mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STUPM": {
    +                    "description": "SETUP phase done mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OTEPDM": {
    +                    "description": "OUT token received when endpoint\n              disabled mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DAINT": {
    +              "description": "OTG_FS device all endpoints interrupt\n          register (OTG_FS_DAINT)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IEPINT": {
    +                    "description": "IN endpoint interrupt bits",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "OEPINT": {
    +                    "description": "OUT endpoint interrupt\n              bits",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DAINTMSK": {
    +              "description": "OTG_FS all endpoints interrupt mask register\n          (OTG_FS_DAINTMSK)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IEPM": {
    +                    "description": "IN EP interrupt mask bits",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "OEPINT": {
    +                    "description": "OUT endpoint interrupt\n              bits",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DVBUSDIS": {
    +              "description": "OTG_FS device VBUS discharge time\n          register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 6103,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VBUSDT": {
    +                    "description": "Device VBUS discharge time",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DVBUSPULSE": {
    +              "description": "OTG_FS device VBUS pulsing time\n          register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 1464,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DVBUSP": {
    +                    "description": "Device VBUS pulsing time",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPEMPMSK": {
    +              "description": "OTG_FS device IN endpoint FIFO empty\n          interrupt mask register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXFEM": {
    +                    "description": "IN EP Tx FIFO empty interrupt mask\n              bits",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DIEPCTL0": {
    +              "description": "OTG_FS device control IN endpoint 0 control\n          register (OTG_FS_DIEPCTL0)",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "USBAEP": {
    +                    "description": "USB active endpoint",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "STALL": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TxFIFO number",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPENA": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPCTL1": {
    +              "description": "OTG device endpoint-1 control\n          register",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPENA": {
    +                    "description": "EPENA",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EPDIS": {
    +                    "description": "EPDIS",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SODDFRM_SD1PID": {
    +                    "description": "SODDFRM/SD1PID",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "SD0PID/SEVNFRM",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "SNAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "CNAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TXFNUM",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "Stall": {
    +                    "description": "Stall",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "EPTYP",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAKSTS",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "EONUM/DPID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "USBAEP": {
    +                    "description": "USBAEP",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MPSIZ": {
    +                    "description": "MPSIZ",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPCTL2": {
    +              "description": "OTG device endpoint-2 control\n          register",
    +              "offset": 320,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPENA": {
    +                    "description": "EPENA",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EPDIS": {
    +                    "description": "EPDIS",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SODDFRM": {
    +                    "description": "SODDFRM",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "SD0PID/SEVNFRM",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "SNAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "CNAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TXFNUM",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "Stall": {
    +                    "description": "Stall",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "EPTYP",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAKSTS",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "EONUM/DPID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "USBAEP": {
    +                    "description": "USBAEP",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MPSIZ": {
    +                    "description": "MPSIZ",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPCTL3": {
    +              "description": "OTG device endpoint-3 control\n          register",
    +              "offset": 352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPENA": {
    +                    "description": "EPENA",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EPDIS": {
    +                    "description": "EPDIS",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SODDFRM": {
    +                    "description": "SODDFRM",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "SD0PID/SEVNFRM",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "SNAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "CNAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TXFNUM",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "Stall": {
    +                    "description": "Stall",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "EPTYP",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAKSTS",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "EONUM/DPID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "USBAEP": {
    +                    "description": "USBAEP",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MPSIZ": {
    +                    "description": "MPSIZ",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPCTL0": {
    +              "description": "device endpoint-0 control\n          register",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 32768,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPENA": {
    +                    "description": "EPENA",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "EPDIS",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "SNAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "CNAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "Stall": {
    +                    "description": "Stall",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "SNPM": {
    +                    "description": "SNPM",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "EPTYP",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAKSTS",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "USBAEP": {
    +                    "description": "USBAEP",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MPSIZ": {
    +                    "description": "MPSIZ",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPCTL1": {
    +              "description": "device endpoint-1 control\n          register",
    +              "offset": 800,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPENA": {
    +                    "description": "EPENA",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EPDIS": {
    +                    "description": "EPDIS",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SODDFRM": {
    +                    "description": "SODDFRM",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "SD0PID/SEVNFRM",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "SNAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "CNAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "Stall": {
    +                    "description": "Stall",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "SNPM": {
    +                    "description": "SNPM",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "EPTYP",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAKSTS",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "EONUM/DPID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "USBAEP": {
    +                    "description": "USBAEP",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MPSIZ": {
    +                    "description": "MPSIZ",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPCTL2": {
    +              "description": "device endpoint-2 control\n          register",
    +              "offset": 832,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPENA": {
    +                    "description": "EPENA",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EPDIS": {
    +                    "description": "EPDIS",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SODDFRM": {
    +                    "description": "SODDFRM",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "SD0PID/SEVNFRM",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "SNAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "CNAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "Stall": {
    +                    "description": "Stall",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "SNPM": {
    +                    "description": "SNPM",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "EPTYP",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAKSTS",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "EONUM/DPID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "USBAEP": {
    +                    "description": "USBAEP",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MPSIZ": {
    +                    "description": "MPSIZ",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPCTL3": {
    +              "description": "device endpoint-3 control\n          register",
    +              "offset": 864,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPENA": {
    +                    "description": "EPENA",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EPDIS": {
    +                    "description": "EPDIS",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SODDFRM": {
    +                    "description": "SODDFRM",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "SD0PID/SEVNFRM",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "SNAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "CNAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "Stall": {
    +                    "description": "Stall",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "SNPM": {
    +                    "description": "SNPM",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "EPTYP",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAKSTS",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "EONUM/DPID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "USBAEP": {
    +                    "description": "USBAEP",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MPSIZ": {
    +                    "description": "MPSIZ",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPINT0": {
    +              "description": "device endpoint-x interrupt\n          register",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXFE": {
    +                    "description": "TXFE",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INEPNE": {
    +                    "description": "INEPNE",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "ITTXFE",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "TOC",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "EPDISD",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "XFRC": {
    +                    "description": "XFRC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPINT1": {
    +              "description": "device endpoint-1 interrupt\n          register",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXFE": {
    +                    "description": "TXFE",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INEPNE": {
    +                    "description": "INEPNE",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "ITTXFE",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "TOC",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "EPDISD",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "XFRC": {
    +                    "description": "XFRC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPINT2": {
    +              "description": "device endpoint-2 interrupt\n          register",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXFE": {
    +                    "description": "TXFE",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INEPNE": {
    +                    "description": "INEPNE",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "ITTXFE",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "TOC",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "EPDISD",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "XFRC": {
    +                    "description": "XFRC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPINT3": {
    +              "description": "device endpoint-3 interrupt\n          register",
    +              "offset": 360,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXFE": {
    +                    "description": "TXFE",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INEPNE": {
    +                    "description": "INEPNE",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "ITTXFE",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "TOC",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "EPDISD",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "XFRC": {
    +                    "description": "XFRC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPINT0": {
    +              "description": "device endpoint-0 interrupt\n          register",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "B2BSTUP": {
    +                    "description": "B2BSTUP",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OTEPDIS",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "STUP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "EPDISD",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "XFRC": {
    +                    "description": "XFRC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPINT1": {
    +              "description": "device endpoint-1 interrupt\n          register",
    +              "offset": 808,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "B2BSTUP": {
    +                    "description": "B2BSTUP",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OTEPDIS",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "STUP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "EPDISD",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "XFRC": {
    +                    "description": "XFRC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPINT2": {
    +              "description": "device endpoint-2 interrupt\n          register",
    +              "offset": 840,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "B2BSTUP": {
    +                    "description": "B2BSTUP",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OTEPDIS",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "STUP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "EPDISD",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "XFRC": {
    +                    "description": "XFRC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPINT3": {
    +              "description": "device endpoint-3 interrupt\n          register",
    +              "offset": 872,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "B2BSTUP": {
    +                    "description": "B2BSTUP",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OTEPDIS",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "STUP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "EPDISD",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "XFRC": {
    +                    "description": "XFRC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPTSIZ0": {
    +              "description": "device endpoint-0 transfer size\n          register",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 2
    +                  },
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPTSIZ0": {
    +              "description": "device OUT endpoint-0 transfer size\n          register",
    +              "offset": 784,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STUPCNT": {
    +                    "description": "SETUP packet count",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPTSIZ1": {
    +              "description": "device endpoint-1 transfer size\n          register",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MCNT": {
    +                    "description": "Multi count",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPTSIZ2": {
    +              "description": "device endpoint-2 transfer size\n          register",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MCNT": {
    +                    "description": "Multi count",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPTSIZ3": {
    +              "description": "device endpoint-3 transfer size\n          register",
    +              "offset": 368,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MCNT": {
    +                    "description": "Multi count",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            },
    +            "DTXFSTS0": {
    +              "description": "OTG_FS device IN endpoint transmit FIFO\n          status register",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INEPTFSAV": {
    +                    "description": "IN endpoint TxFIFO space\n              available",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DTXFSTS1": {
    +              "description": "OTG_FS device IN endpoint transmit FIFO\n          status register",
    +              "offset": 312,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INEPTFSAV": {
    +                    "description": "IN endpoint TxFIFO space\n              available",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DTXFSTS2": {
    +              "description": "OTG_FS device IN endpoint transmit FIFO\n          status register",
    +              "offset": 344,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INEPTFSAV": {
    +                    "description": "IN endpoint TxFIFO space\n              available",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DTXFSTS3": {
    +              "description": "OTG_FS device IN endpoint transmit FIFO\n          status register",
    +              "offset": 376,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INEPTFSAV": {
    +                    "description": "IN endpoint TxFIFO space\n              available",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPTSIZ1": {
    +              "description": "device OUT endpoint-1 transfer size\n          register",
    +              "offset": 816,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXDPID_STUPCNT": {
    +                    "description": "Received data PID/SETUP packet\n              count",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPTSIZ2": {
    +              "description": "device OUT endpoint-2 transfer size\n          register",
    +              "offset": 848,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXDPID_STUPCNT": {
    +                    "description": "Received data PID/SETUP packet\n              count",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPTSIZ3": {
    +              "description": "device OUT endpoint-3 transfer size\n          register",
    +              "offset": 880,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXDPID_STUPCNT": {
    +                    "description": "Received data PID/SETUP packet\n              count",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "OTG_FS_HOST": {
    +        "description": "USB on the go full speed",
    +        "children": {
    +          "registers": {
    +            "FS_HCFG": {
    +              "description": "OTG_FS host configuration register\n          (OTG_FS_HCFG)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FSLSPCS": {
    +                    "description": "FS/LS PHY clock select",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "FSLSS": {
    +                    "description": "FS- and LS-only support",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "HFIR": {
    +              "description": "OTG_FS Host frame interval\n          register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 60000,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FRIVL": {
    +                    "description": "Frame interval",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HFNUM": {
    +              "description": "OTG_FS host frame number/frame time\n          remaining register (OTG_FS_HFNUM)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 16383,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "FRNUM": {
    +                    "description": "Frame number",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "FTREM": {
    +                    "description": "Frame time remaining",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HPTXSTS": {
    +              "description": "OTG_FS_Host periodic transmit FIFO/queue\n          status register (OTG_FS_HPTXSTS)",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 524544,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PTXFSAVL": {
    +                    "description": "Periodic transmit data FIFO space\n              available",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "PTXQSAV": {
    +                    "description": "Periodic transmit request queue space\n              available",
    +                    "offset": 16,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "PTXQTOP": {
    +                    "description": "Top of the periodic transmit request\n              queue",
    +                    "offset": 24,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "HAINT": {
    +              "description": "OTG_FS Host all channels interrupt\n          register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "HAINT": {
    +                    "description": "Channel interrupts",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "HAINTMSK": {
    +              "description": "OTG_FS host all channels interrupt mask\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HAINTM": {
    +                    "description": "Channel interrupt mask",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HPRT": {
    +              "description": "OTG_FS host port control and status register\n          (OTG_FS_HPRT)",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PCSTS": {
    +                    "description": "Port connect status",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PCDET": {
    +                    "description": "Port connect detected",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PENA": {
    +                    "description": "Port enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PENCHNG": {
    +                    "description": "Port enable/disable change",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "POCA": {
    +                    "description": "Port overcurrent active",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "POCCHNG": {
    +                    "description": "Port overcurrent change",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PRES": {
    +                    "description": "Port resume",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PSUSP": {
    +                    "description": "Port suspend",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PRST": {
    +                    "description": "Port reset",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PLSTS": {
    +                    "description": "Port line status",
    +                    "offset": 10,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "PPWR": {
    +                    "description": "Port power",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "PTCTL": {
    +                    "description": "Port test control",
    +                    "offset": 13,
    +                    "size": 4
    +                  },
    +                  "PSPD": {
    +                    "description": "Port speed",
    +                    "offset": 17,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCCHAR0": {
    +              "description": "OTG_FS host channel-0 characteristics\n          register (OTG_FS_HCCHAR0)",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MCNT": {
    +                    "description": "Multicount",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCCHAR1": {
    +              "description": "OTG_FS host channel-1 characteristics\n          register (OTG_FS_HCCHAR1)",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MCNT": {
    +                    "description": "Multicount",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCCHAR2": {
    +              "description": "OTG_FS host channel-2 characteristics\n          register (OTG_FS_HCCHAR2)",
    +              "offset": 320,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MCNT": {
    +                    "description": "Multicount",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCCHAR3": {
    +              "description": "OTG_FS host channel-3 characteristics\n          register (OTG_FS_HCCHAR3)",
    +              "offset": 352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MCNT": {
    +                    "description": "Multicount",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCCHAR4": {
    +              "description": "OTG_FS host channel-4 characteristics\n          register (OTG_FS_HCCHAR4)",
    +              "offset": 384,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MCNT": {
    +                    "description": "Multicount",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCCHAR5": {
    +              "description": "OTG_FS host channel-5 characteristics\n          register (OTG_FS_HCCHAR5)",
    +              "offset": 416,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MCNT": {
    +                    "description": "Multicount",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCCHAR6": {
    +              "description": "OTG_FS host channel-6 characteristics\n          register (OTG_FS_HCCHAR6)",
    +              "offset": 448,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MCNT": {
    +                    "description": "Multicount",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCCHAR7": {
    +              "description": "OTG_FS host channel-7 characteristics\n          register (OTG_FS_HCCHAR7)",
    +              "offset": 480,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MCNT": {
    +                    "description": "Multicount",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINT0": {
    +              "description": "OTG_FS host channel-0 interrupt register\n          (OTG_FS_HCINT0)",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINT1": {
    +              "description": "OTG_FS host channel-1 interrupt register\n          (OTG_FS_HCINT1)",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINT2": {
    +              "description": "OTG_FS host channel-2 interrupt register\n          (OTG_FS_HCINT2)",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINT3": {
    +              "description": "OTG_FS host channel-3 interrupt register\n          (OTG_FS_HCINT3)",
    +              "offset": 360,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINT4": {
    +              "description": "OTG_FS host channel-4 interrupt register\n          (OTG_FS_HCINT4)",
    +              "offset": 392,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINT5": {
    +              "description": "OTG_FS host channel-5 interrupt register\n          (OTG_FS_HCINT5)",
    +              "offset": 424,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINT6": {
    +              "description": "OTG_FS host channel-6 interrupt register\n          (OTG_FS_HCINT6)",
    +              "offset": 456,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINT7": {
    +              "description": "OTG_FS host channel-7 interrupt register\n          (OTG_FS_HCINT7)",
    +              "offset": 488,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINTMSK0": {
    +              "description": "OTG_FS host channel-0 mask register\n          (OTG_FS_HCINTMSK0)",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINTMSK1": {
    +              "description": "OTG_FS host channel-1 mask register\n          (OTG_FS_HCINTMSK1)",
    +              "offset": 300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINTMSK2": {
    +              "description": "OTG_FS host channel-2 mask register\n          (OTG_FS_HCINTMSK2)",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINTMSK3": {
    +              "description": "OTG_FS host channel-3 mask register\n          (OTG_FS_HCINTMSK3)",
    +              "offset": 364,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINTMSK4": {
    +              "description": "OTG_FS host channel-4 mask register\n          (OTG_FS_HCINTMSK4)",
    +              "offset": 396,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINTMSK5": {
    +              "description": "OTG_FS host channel-5 mask register\n          (OTG_FS_HCINTMSK5)",
    +              "offset": 428,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINTMSK6": {
    +              "description": "OTG_FS host channel-6 mask register\n          (OTG_FS_HCINTMSK6)",
    +              "offset": 460,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINTMSK7": {
    +              "description": "OTG_FS host channel-7 mask register\n          (OTG_FS_HCINTMSK7)",
    +              "offset": 492,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCTSIZ0": {
    +              "description": "OTG_FS host channel-0 transfer size\n          register",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCTSIZ1": {
    +              "description": "OTG_FS host channel-1 transfer size\n          register",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCTSIZ2": {
    +              "description": "OTG_FS host channel-2 transfer size\n          register",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCTSIZ3": {
    +              "description": "OTG_FS host channel-3 transfer size\n          register",
    +              "offset": 368,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCTSIZ4": {
    +              "description": "OTG_FS host channel-x transfer size\n          register",
    +              "offset": 400,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCTSIZ5": {
    +              "description": "OTG_FS host channel-5 transfer size\n          register",
    +              "offset": 432,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCTSIZ6": {
    +              "description": "OTG_FS host channel-6 transfer size\n          register",
    +              "offset": 464,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCTSIZ7": {
    +              "description": "OTG_FS host channel-7 transfer size\n          register",
    +              "offset": 496,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "IWDG": {
    +        "description": "Independent watchdog",
    +        "children": {
    +          "registers": {
    +            "KR": {
    +              "description": "Key register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "KEY": {
    +                    "description": "Key value (write only, read\n              0000h)",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PR": {
    +              "description": "Prescaler register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PR": {
    +                    "description": "Prescaler divider",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "RLR": {
    +              "description": "Reload register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 4095,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RL": {
    +                    "description": "Watchdog counter reload\n              value",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "Status register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RVU": {
    +                    "description": "Watchdog counter reload value\n              update",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PVU": {
    +                    "description": "Watchdog prescaler value\n              update",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "WWDG": {
    +        "description": "Window watchdog",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "Control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 127,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WDGA": {
    +                    "description": "Activation bit",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "T": {
    +                    "description": "7-bit counter (MSB to LSB)",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "CFR": {
    +              "description": "Configuration register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 127,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EWI": {
    +                    "description": "Early wakeup interrupt",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "WDGTB1": {
    +                    "description": "Timer base",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "WDGTB0": {
    +                    "description": "Timer base",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "W": {
    +                    "description": "7-bit window value",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "Status register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EWIF": {
    +                    "description": "Early wakeup interrupt\n              flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "RTC": {
    +        "description": "Real-time clock",
    +        "children": {
    +          "registers": {
    +            "TR": {
    +              "description": "time register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PM": {
    +                    "description": "AM/PM notation",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "HT": {
    +                    "description": "Hour tens in BCD format",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "HU": {
    +                    "description": "Hour units in BCD format",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "MNT": {
    +                    "description": "Minute tens in BCD format",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "MNU": {
    +                    "description": "Minute units in BCD format",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "ST": {
    +                    "description": "Second tens in BCD format",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SU": {
    +                    "description": "Second units in BCD format",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "date register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 8449,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "YT": {
    +                    "description": "Year tens in BCD format",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "YU": {
    +                    "description": "Year units in BCD format",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "WDU": {
    +                    "description": "Week day units",
    +                    "offset": 13,
    +                    "size": 3
    +                  },
    +                  "MT": {
    +                    "description": "Month tens in BCD format",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "MU": {
    +                    "description": "Month units in BCD format",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "DT": {
    +                    "description": "Date tens in BCD format",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DU": {
    +                    "description": "Date units in BCD format",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CR": {
    +              "description": "control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COE": {
    +                    "description": "Calibration output enable",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "OSEL": {
    +                    "description": "Output selection",
    +                    "offset": 21,
    +                    "size": 2
    +                  },
    +                  "POL": {
    +                    "description": "Output polarity",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "BKP": {
    +                    "description": "Backup",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "SUB1H": {
    +                    "description": "Subtract 1 hour (winter time\n              change)",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "ADD1H": {
    +                    "description": "Add 1 hour (summer time\n              change)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TSIE": {
    +                    "description": "Time-stamp interrupt\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "WUTIE": {
    +                    "description": "Wakeup timer interrupt\n              enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ALRBIE": {
    +                    "description": "Alarm B interrupt enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ALRAIE": {
    +                    "description": "Alarm A interrupt enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TSE": {
    +                    "description": "Time stamp enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "WUTE": {
    +                    "description": "Wakeup timer enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ALRBE": {
    +                    "description": "Alarm B enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ALRAE": {
    +                    "description": "Alarm A enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DCE": {
    +                    "description": "Coarse digital calibration\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FMT": {
    +                    "description": "Hour format",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "REFCKON": {
    +                    "description": "Reference clock detection enable (50 or\n              60 Hz)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TSEDGE": {
    +                    "description": "Time-stamp event active\n              edge",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "WCKSEL": {
    +                    "description": "Wakeup clock selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "ISR": {
    +              "description": "initialization and status\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 7,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ALRAWF": {
    +                    "description": "Alarm A write flag",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ALRBWF": {
    +                    "description": "Alarm B write flag",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "WUTWF": {
    +                    "description": "Wakeup timer write flag",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SHPF": {
    +                    "description": "Shift operation pending",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "INITS": {
    +                    "description": "Initialization status flag",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RSF": {
    +                    "description": "Registers synchronization\n              flag",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INITF": {
    +                    "description": "Initialization flag",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INIT": {
    +                    "description": "Initialization mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ALRAF": {
    +                    "description": "Alarm A flag",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ALRBF": {
    +                    "description": "Alarm B flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "WUTF": {
    +                    "description": "Wakeup timer flag",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TSF": {
    +                    "description": "Time-stamp flag",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TSOVF": {
    +                    "description": "Time-stamp overflow flag",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TAMP1F": {
    +                    "description": "Tamper detection flag",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TAMP2F": {
    +                    "description": "TAMPER2 detection flag",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "RECALPF": {
    +                    "description": "Recalibration pending Flag",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PRER": {
    +              "description": "prescaler register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 8323327,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PREDIV_A": {
    +                    "description": "Asynchronous prescaler\n              factor",
    +                    "offset": 16,
    +                    "size": 7
    +                  },
    +                  "PREDIV_S": {
    +                    "description": "Synchronous prescaler\n              factor",
    +                    "offset": 0,
    +                    "size": 15
    +                  }
    +                }
    +              }
    +            },
    +            "WUTR": {
    +              "description": "wakeup timer register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 65535,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WUT": {
    +                    "description": "Wakeup auto-reload value\n              bits",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CALIBR": {
    +              "description": "calibration register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DCS": {
    +                    "description": "Digital calibration sign",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "DC": {
    +                    "description": "Digital calibration",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "ALRMAR": {
    +              "description": "alarm A register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MSK4": {
    +                    "description": "Alarm A date mask",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "WDSEL": {
    +                    "description": "Week day selection",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "DT": {
    +                    "description": "Date tens in BCD format",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DU": {
    +                    "description": "Date units or day in BCD\n              format",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "MSK3": {
    +                    "description": "Alarm A hours mask",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "PM": {
    +                    "description": "AM/PM notation",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "HT": {
    +                    "description": "Hour tens in BCD format",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "HU": {
    +                    "description": "Hour units in BCD format",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "MSK2": {
    +                    "description": "Alarm A minutes mask",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MNT": {
    +                    "description": "Minute tens in BCD format",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "MNU": {
    +                    "description": "Minute units in BCD format",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "MSK1": {
    +                    "description": "Alarm A seconds mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ST": {
    +                    "description": "Second tens in BCD format",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SU": {
    +                    "description": "Second units in BCD format",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "ALRMBR": {
    +              "description": "alarm B register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MSK4": {
    +                    "description": "Alarm B date mask",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "WDSEL": {
    +                    "description": "Week day selection",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "DT": {
    +                    "description": "Date tens in BCD format",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DU": {
    +                    "description": "Date units or day in BCD\n              format",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "MSK3": {
    +                    "description": "Alarm B hours mask",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "PM": {
    +                    "description": "AM/PM notation",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "HT": {
    +                    "description": "Hour tens in BCD format",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "HU": {
    +                    "description": "Hour units in BCD format",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "MSK2": {
    +                    "description": "Alarm B minutes mask",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MNT": {
    +                    "description": "Minute tens in BCD format",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "MNU": {
    +                    "description": "Minute units in BCD format",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "MSK1": {
    +                    "description": "Alarm B seconds mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ST": {
    +                    "description": "Second tens in BCD format",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SU": {
    +                    "description": "Second units in BCD format",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "WPR": {
    +              "description": "write protection register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "KEY": {
    +                    "description": "Write protection key",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SSR": {
    +              "description": "sub second register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SS": {
    +                    "description": "Sub second value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SHIFTR": {
    +              "description": "shift control register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "ADD1S": {
    +                    "description": "Add one second",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "SUBFS": {
    +                    "description": "Subtract a fraction of a\n              second",
    +                    "offset": 0,
    +                    "size": 15
    +                  }
    +                }
    +              }
    +            },
    +            "TSTR": {
    +              "description": "time stamp time register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ALARMOUTTYPE": {
    +                    "description": "AFO_ALARM output type",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TSINSEL": {
    +                    "description": "TIMESTAMP mapping",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TAMP1INSEL": {
    +                    "description": "TAMPER1 mapping",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TAMPIE": {
    +                    "description": "Tamper interrupt enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TAMP1TRG": {
    +                    "description": "Active level for tamper 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TAMP1E": {
    +                    "description": "Tamper 1 detection enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TSDR": {
    +              "description": "time stamp date register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "WDU": {
    +                    "description": "Week day units",
    +                    "offset": 13,
    +                    "size": 3
    +                  },
    +                  "MT": {
    +                    "description": "Month tens in BCD format",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "MU": {
    +                    "description": "Month units in BCD format",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "DT": {
    +                    "description": "Date tens in BCD format",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DU": {
    +                    "description": "Date units in BCD format",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "TSSSR": {
    +              "description": "timestamp sub second register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SS": {
    +                    "description": "Sub second value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CALR": {
    +              "description": "calibration register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CALP": {
    +                    "description": "Increase frequency of RTC by 488.5\n              ppm",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "CALW8": {
    +                    "description": "Use an 8-second calibration cycle\n              period",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CALW16": {
    +                    "description": "Use a 16-second calibration cycle\n              period",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CALM": {
    +                    "description": "Calibration minus",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "TAFCR": {
    +              "description": "tamper and alternate function configuration\n          register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ALARMOUTTYPE": {
    +                    "description": "AFO_ALARM output type",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TSINSEL": {
    +                    "description": "TIMESTAMP mapping",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TAMP1INSEL": {
    +                    "description": "TAMPER1 mapping",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TAMPPUDIS": {
    +                    "description": "TAMPER pull-up disable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TAMPPRCH": {
    +                    "description": "Tamper precharge duration",
    +                    "offset": 13,
    +                    "size": 2
    +                  },
    +                  "TAMPFLT": {
    +                    "description": "Tamper filter count",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "TAMPFREQ": {
    +                    "description": "Tamper sampling frequency",
    +                    "offset": 8,
    +                    "size": 3
    +                  },
    +                  "TAMPTS": {
    +                    "description": "Activate timestamp on tamper detection\n              event",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TAMP2TRG": {
    +                    "description": "Active level for tamper 2",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TAMP2E": {
    +                    "description": "Tamper 2 detection enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TAMPIE": {
    +                    "description": "Tamper interrupt enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TAMP1TRG": {
    +                    "description": "Active level for tamper 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TAMP1E": {
    +                    "description": "Tamper 1 detection enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ALRMASSR": {
    +              "description": "alarm A sub second register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MASKSS": {
    +                    "description": "Mask the most-significant bits starting\n              at this bit",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "SS": {
    +                    "description": "Sub seconds value",
    +                    "offset": 0,
    +                    "size": 15
    +                  }
    +                }
    +              }
    +            },
    +            "ALRMBSSR": {
    +              "description": "alarm B sub second register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MASKSS": {
    +                    "description": "Mask the most-significant bits starting\n              at this bit",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "SS": {
    +                    "description": "Sub seconds value",
    +                    "offset": 0,
    +                    "size": 15
    +                  }
    +                }
    +              }
    +            },
    +            "BKP0R": {
    +              "description": "backup register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP1R": {
    +              "description": "backup register",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP2R": {
    +              "description": "backup register",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP3R": {
    +              "description": "backup register",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP4R": {
    +              "description": "backup register",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP5R": {
    +              "description": "backup register",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP6R": {
    +              "description": "backup register",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP7R": {
    +              "description": "backup register",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP8R": {
    +              "description": "backup register",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP9R": {
    +              "description": "backup register",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP10R": {
    +              "description": "backup register",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP11R": {
    +              "description": "backup register",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP12R": {
    +              "description": "backup register",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP13R": {
    +              "description": "backup register",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP14R": {
    +              "description": "backup register",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP15R": {
    +              "description": "backup register",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP16R": {
    +              "description": "backup register",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP17R": {
    +              "description": "backup register",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP18R": {
    +              "description": "backup register",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP19R": {
    +              "description": "backup register",
    +              "offset": 156,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "UART4": {
    +        "description": "Universal synchronous asynchronous receiver\n      transmitter",
    +        "children": {
    +          "registers": {
    +            "SR": {
    +              "description": "Status register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 12582912,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LBD": {
    +                    "description": "LIN break detection flag",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TXE": {
    +                    "description": "Transmit data register\n              empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TC": {
    +                    "description": "Transmission complete",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RXNE": {
    +                    "description": "Read data register not\n              empty",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IDLE": {
    +                    "description": "IDLE line detected",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ORE": {
    +                    "description": "Overrun error",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NF": {
    +                    "description": "Noise detected flag",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FE": {
    +                    "description": "Framing error",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PE": {
    +                    "description": "Parity error",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "Data register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DR": {
    +                    "description": "Data value",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "BRR": {
    +              "description": "Baud rate register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DIV_Mantissa": {
    +                    "description": "mantissa of USARTDIV",
    +                    "offset": 4,
    +                    "size": 12
    +                  },
    +                  "DIV_Fraction": {
    +                    "description": "fraction of USARTDIV",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CR1": {
    +              "description": "Control register 1",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OVER8": {
    +                    "description": "Oversampling mode",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "UE": {
    +                    "description": "USART enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "M": {
    +                    "description": "Word length",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WAKE": {
    +                    "description": "Wakeup method",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "PCE": {
    +                    "description": "Parity control enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PS": {
    +                    "description": "Parity selection",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PEIE": {
    +                    "description": "PE interrupt enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TXEIE": {
    +                    "description": "TXE interrupt enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transmission complete interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RXNEIE": {
    +                    "description": "RXNE interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IDLEIE": {
    +                    "description": "IDLE interrupt enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TE": {
    +                    "description": "Transmitter enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RE": {
    +                    "description": "Receiver enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RWU": {
    +                    "description": "Receiver wakeup",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SBK": {
    +                    "description": "Send break",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "Control register 2",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LINEN": {
    +                    "description": "LIN mode enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "STOP": {
    +                    "description": "STOP bits",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "LBDIE": {
    +                    "description": "LIN break detection interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "LBDL": {
    +                    "description": "lin break detection length",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ADD": {
    +                    "description": "Address of the USART node",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CR3": {
    +              "description": "Control register 3",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ONEBIT": {
    +                    "description": "One sample bit method\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "DMAT": {
    +                    "description": "DMA enable transmitter",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "DMAR": {
    +                    "description": "DMA enable receiver",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "HDSEL": {
    +                    "description": "Half-duplex selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IRLP": {
    +                    "description": "IrDA low-power",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IREN": {
    +                    "description": "IrDA mode enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EIE": {
    +                    "description": "Error interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "OTG_FS_GLOBAL": {
    +        "description": "USB on the go full speed",
    +        "children": {
    +          "registers": {
    +            "FS_GOTGCTL": {
    +              "description": "OTG_FS control and status register\n          (OTG_FS_GOTGCTL)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 2048,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SRQSCS": {
    +                    "description": "Session request success",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SRQ": {
    +                    "description": "Session request",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HNGSCS": {
    +                    "description": "Host negotiation success",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HNPRQ": {
    +                    "description": "HNP request",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "HSHNPEN": {
    +                    "description": "Host set HNP enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "DHNPEN": {
    +                    "description": "Device HNP enabled",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CIDSTS": {
    +                    "description": "Connector ID status",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DBCT": {
    +                    "description": "Long/short debounce time",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ASVLD": {
    +                    "description": "A-session valid",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BSVLD": {
    +                    "description": "B-session valid",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GOTGINT": {
    +              "description": "OTG_FS interrupt register\n          (OTG_FS_GOTGINT)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SEDET": {
    +                    "description": "Session end detected",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SRSSCHG": {
    +                    "description": "Session request success status\n              change",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "HNSSCHG": {
    +                    "description": "Host negotiation success status\n              change",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "HNGDET": {
    +                    "description": "Host negotiation detected",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "ADTOCHG": {
    +                    "description": "A-device timeout change",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "DBCDNE": {
    +                    "description": "Debounce done",
    +                    "offset": 19,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GAHBCFG": {
    +              "description": "OTG_FS AHB configuration register\n          (OTG_FS_GAHBCFG)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "GINT": {
    +                    "description": "Global interrupt mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TXFELVL": {
    +                    "description": "TxFIFO empty level",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PTXFELVL": {
    +                    "description": "Periodic TxFIFO empty\n              level",
    +                    "offset": 8,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GUSBCFG": {
    +              "description": "OTG_FS USB configuration register\n          (OTG_FS_GUSBCFG)",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 2560,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TOCAL": {
    +                    "description": "FS timeout calibration",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "PHYSEL": {
    +                    "description": "Full Speed serial transceiver\n              select",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SRPCAP": {
    +                    "description": "SRP-capable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "HNPCAP": {
    +                    "description": "HNP-capable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TRDT": {
    +                    "description": "USB turnaround time",
    +                    "offset": 10,
    +                    "size": 4
    +                  },
    +                  "FHMOD": {
    +                    "description": "Force host mode",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FDMOD": {
    +                    "description": "Force device mode",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CTXPKT": {
    +                    "description": "Corrupt Tx packet",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GRSTCTL": {
    +              "description": "OTG_FS reset register\n          (OTG_FS_GRSTCTL)",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 536870912,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSRST": {
    +                    "description": "Core soft reset",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "HSRST": {
    +                    "description": "HCLK soft reset",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FCRST": {
    +                    "description": "Host frame counter reset",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RXFFLSH": {
    +                    "description": "RxFIFO flush",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TXFFLSH": {
    +                    "description": "TxFIFO flush",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TxFIFO number",
    +                    "offset": 6,
    +                    "size": 5
    +                  },
    +                  "AHBIDL": {
    +                    "description": "AHB master idle",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GINTSTS": {
    +              "description": "OTG_FS core interrupt register\n          (OTG_FS_GINTSTS)",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 67108896,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CMOD": {
    +                    "description": "Current mode of operation",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MMIS": {
    +                    "description": "Mode mismatch interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OTGINT": {
    +                    "description": "OTG interrupt",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SOF": {
    +                    "description": "Start of frame",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RXFLVL": {
    +                    "description": "RxFIFO non-empty",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NPTXFE": {
    +                    "description": "Non-periodic TxFIFO empty",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GINAKEFF": {
    +                    "description": "Global IN non-periodic NAK\n              effective",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GOUTNAKEFF": {
    +                    "description": "Global OUT NAK effective",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ESUSP": {
    +                    "description": "Early suspend",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "USBSUSP": {
    +                    "description": "USB suspend",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "USBRST": {
    +                    "description": "USB reset",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ENUMDNE": {
    +                    "description": "Enumeration done",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ISOODRP": {
    +                    "description": "Isochronous OUT packet dropped\n              interrupt",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EOPF": {
    +                    "description": "End of periodic frame\n              interrupt",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "IEPINT": {
    +                    "description": "IN endpoint interrupt",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEPINT": {
    +                    "description": "OUT endpoint interrupt",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IISOIXFR": {
    +                    "description": "Incomplete isochronous IN\n              transfer",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "IPXFR_INCOMPISOOUT": {
    +                    "description": "Incomplete periodic transfer(Host\n              mode)/Incomplete isochronous OUT transfer(Device\n              mode)",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "HPRTINT": {
    +                    "description": "Host port interrupt",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HCINT": {
    +                    "description": "Host channels interrupt",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PTXFE": {
    +                    "description": "Periodic TxFIFO empty",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CIDSCHG": {
    +                    "description": "Connector ID status change",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "DISCINT": {
    +                    "description": "Disconnect detected\n              interrupt",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "SRQINT": {
    +                    "description": "Session request/new session detected\n              interrupt",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "WKUPINT": {
    +                    "description": "Resume/remote wakeup detected\n              interrupt",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GINTMSK": {
    +              "description": "OTG_FS interrupt mask register\n          (OTG_FS_GINTMSK)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MMISM": {
    +                    "description": "Mode mismatch interrupt\n              mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OTGINT": {
    +                    "description": "OTG interrupt mask",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SOFM": {
    +                    "description": "Start of frame mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RXFLVLM": {
    +                    "description": "Receive FIFO non-empty\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "NPTXFEM": {
    +                    "description": "Non-periodic TxFIFO empty\n              mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GINAKEFFM": {
    +                    "description": "Global non-periodic IN NAK effective\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GONAKEFFM": {
    +                    "description": "Global OUT NAK effective\n              mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ESUSPM": {
    +                    "description": "Early suspend mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "USBSUSPM": {
    +                    "description": "USB suspend mask",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "USBRST": {
    +                    "description": "USB reset mask",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ENUMDNEM": {
    +                    "description": "Enumeration done mask",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ISOODRPM": {
    +                    "description": "Isochronous OUT packet dropped interrupt\n              mask",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EOPFM": {
    +                    "description": "End of periodic frame interrupt\n              mask",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EPMISM": {
    +                    "description": "Endpoint mismatch interrupt\n              mask",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "IEPINT": {
    +                    "description": "IN endpoints interrupt\n              mask",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "OEPINT": {
    +                    "description": "OUT endpoints interrupt\n              mask",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "IISOIXFRM": {
    +                    "description": "Incomplete isochronous IN transfer\n              mask",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "IPXFRM_IISOOXFRM": {
    +                    "description": "Incomplete periodic transfer mask(Host\n              mode)/Incomplete isochronous OUT transfer mask(Device\n              mode)",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "PRTIM": {
    +                    "description": "Host port interrupt mask",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HCIM": {
    +                    "description": "Host channels interrupt\n              mask",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "PTXFEM": {
    +                    "description": "Periodic TxFIFO empty mask",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "CIDSCHGM": {
    +                    "description": "Connector ID status change\n              mask",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "DISCINT": {
    +                    "description": "Disconnect detected interrupt\n              mask",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "SRQIM": {
    +                    "description": "Session request/new session detected\n              interrupt mask",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "WUIM": {
    +                    "description": "Resume/remote wakeup detected interrupt\n              mask",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GRXSTSR_Device": {
    +              "description": "OTG_FS Receive status debug read(Device\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "BCNT": {
    +                    "description": "Byte count",
    +                    "offset": 4,
    +                    "size": 11
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 15,
    +                    "size": 2
    +                  },
    +                  "PKTSTS": {
    +                    "description": "Packet status",
    +                    "offset": 17,
    +                    "size": 4
    +                  },
    +                  "FRMNUM": {
    +                    "description": "Frame number",
    +                    "offset": 21,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GRXSTSR_Host": {
    +              "description": "OTG_FS Receive status debug read(Host\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "BCNT": {
    +                    "description": "Byte count",
    +                    "offset": 4,
    +                    "size": 11
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 15,
    +                    "size": 2
    +                  },
    +                  "PKTSTS": {
    +                    "description": "Packet status",
    +                    "offset": 17,
    +                    "size": 4
    +                  },
    +                  "FRMNUM": {
    +                    "description": "Frame number",
    +                    "offset": 21,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GRXFSIZ": {
    +              "description": "OTG_FS Receive FIFO size register\n          (OTG_FS_GRXFSIZ)",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 512,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXFD": {
    +                    "description": "RxFIFO depth",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GNPTXFSIZ_Device": {
    +              "description": "OTG_FS non-periodic transmit FIFO size\n          register (Device mode)",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 512,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX0FSA": {
    +                    "description": "Endpoint 0 transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "TX0FD": {
    +                    "description": "Endpoint 0 TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GNPTXFSIZ_Host": {
    +              "description": "OTG_FS non-periodic transmit FIFO size\n          register (Host mode)",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 512,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NPTXFSA": {
    +                    "description": "Non-periodic transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "NPTXFD": {
    +                    "description": "Non-periodic TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GNPTXSTS": {
    +              "description": "OTG_FS non-periodic transmit FIFO/queue\n          status register (OTG_FS_GNPTXSTS)",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 524800,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "NPTXFSAV": {
    +                    "description": "Non-periodic TxFIFO space\n              available",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "NPTQXSAV": {
    +                    "description": "Non-periodic transmit request queue\n              space available",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "NPTXQTOP": {
    +                    "description": "Top of the non-periodic transmit request\n              queue",
    +                    "offset": 24,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GCCFG": {
    +              "description": "OTG_FS general core configuration register\n          (OTG_FS_GCCFG)",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PWRDWN": {
    +                    "description": "Power down",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "VBUSASEN": {
    +                    "description": "Enable the VBUS sensing\n              device",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "VBUSBSEN": {
    +                    "description": "Enable the VBUS sensing\n              device",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "SOFOUTEN": {
    +                    "description": "SOF output enable",
    +                    "offset": 20,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_CID": {
    +              "description": "core ID register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 4096,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRODUCT_ID": {
    +                    "description": "Product ID field",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HPTXFSIZ": {
    +              "description": "OTG_FS Host periodic transmit FIFO size\n          register (OTG_FS_HPTXFSIZ)",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 33555968,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PTXSA": {
    +                    "description": "Host periodic TxFIFO start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "PTXFSIZ": {
    +                    "description": "Host periodic TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DIEPTXF1": {
    +              "description": "OTG_FS device IN endpoint transmit FIFO size\n          register (OTG_FS_DIEPTXF2)",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 33555456,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXSA": {
    +                    "description": "IN endpoint FIFO2 transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "INEPTXFD": {
    +                    "description": "IN endpoint TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DIEPTXF2": {
    +              "description": "OTG_FS device IN endpoint transmit FIFO size\n          register (OTG_FS_DIEPTXF3)",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 33555456,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXSA": {
    +                    "description": "IN endpoint FIFO3 transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "INEPTXFD": {
    +                    "description": "IN endpoint TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DIEPTXF3": {
    +              "description": "OTG_FS device IN endpoint transmit FIFO size\n          register (OTG_FS_DIEPTXF4)",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 33555456,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXSA": {
    +                    "description": "IN endpoint FIFO4 transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "INEPTXFD": {
    +                    "description": "IN endpoint TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "CRC": {
    +        "description": "Cryptographic processor",
    +        "children": {
    +          "registers": {
    +            "DR": {
    +              "description": "Data register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DR": {
    +                    "description": "Data Register",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IDR": {
    +              "description": "Independent Data register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IDR": {
    +                    "description": "Independent Data register",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CR": {
    +              "description": "Control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "CR": {
    +                    "description": "Control regidter",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "Ethernet_DMA": {
    +        "description": "Ethernet: DMA controller operation",
    +        "children": {
    +          "registers": {
    +            "DMABMR": {
    +              "description": "Ethernet DMA bus mode register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 8449,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SR": {
    +                    "description": "SR",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DA": {
    +                    "description": "DA",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DSL": {
    +                    "description": "DSL",
    +                    "offset": 2,
    +                    "size": 5
    +                  },
    +                  "EDFE": {
    +                    "description": "EDFE",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PBL": {
    +                    "description": "PBL",
    +                    "offset": 8,
    +                    "size": 6
    +                  },
    +                  "RTPR": {
    +                    "description": "RTPR",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "FB": {
    +                    "description": "FB",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RDP": {
    +                    "description": "RDP",
    +                    "offset": 17,
    +                    "size": 6
    +                  },
    +                  "USP": {
    +                    "description": "USP",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FPM": {
    +                    "description": "FPM",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "AAB": {
    +                    "description": "AAB",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "MB": {
    +                    "description": "MB",
    +                    "offset": 26,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMATPDR": {
    +              "description": "Ethernet DMA transmit poll demand\n          register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TPD": {
    +                    "description": "TPD",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DMARPDR": {
    +              "description": "EHERNET DMA receive poll demand\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RPD": {
    +                    "description": "RPD",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DMARDLAR": {
    +              "description": "Ethernet DMA receive descriptor list address\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SRL": {
    +                    "description": "SRL",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DMATDLAR": {
    +              "description": "Ethernet DMA transmit descriptor list\n          address register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STL": {
    +                    "description": "STL",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DMASR": {
    +              "description": "Ethernet DMA status register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TS": {
    +                    "description": "TS",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TPSS": {
    +                    "description": "TPSS",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TBUS": {
    +                    "description": "TBUS",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TJTS": {
    +                    "description": "TJTS",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ROS": {
    +                    "description": "ROS",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TUS": {
    +                    "description": "TUS",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RS": {
    +                    "description": "RS",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RBUS": {
    +                    "description": "RBUS",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RPSS": {
    +                    "description": "RPSS",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PWTS": {
    +                    "description": "PWTS",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ETS": {
    +                    "description": "ETS",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FBES": {
    +                    "description": "FBES",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ERS": {
    +                    "description": "ERS",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "AIS": {
    +                    "description": "AIS",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "NIS": {
    +                    "description": "NIS",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RPS": {
    +                    "description": "RPS",
    +                    "offset": 17,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "TPS": {
    +                    "description": "TPS",
    +                    "offset": 20,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "EBS": {
    +                    "description": "EBS",
    +                    "offset": 23,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "MMCS": {
    +                    "description": "MMCS",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PMTS": {
    +                    "description": "PMTS",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TSTS": {
    +                    "description": "TSTS",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DMAOMR": {
    +              "description": "Ethernet DMA operation mode\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SR": {
    +                    "description": "SR",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OSF": {
    +                    "description": "OSF",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTC": {
    +                    "description": "RTC",
    +                    "offset": 3,
    +                    "size": 2
    +                  },
    +                  "FUGF": {
    +                    "description": "FUGF",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FEF": {
    +                    "description": "FEF",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ST": {
    +                    "description": "ST",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TTC": {
    +                    "description": "TTC",
    +                    "offset": 14,
    +                    "size": 3
    +                  },
    +                  "FTF": {
    +                    "description": "FTF",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "TSF": {
    +                    "description": "TSF",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "DFRF": {
    +                    "description": "DFRF",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "RSF": {
    +                    "description": "RSF",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "DTCEFD": {
    +                    "description": "DTCEFD",
    +                    "offset": 26,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMAIER": {
    +              "description": "Ethernet DMA interrupt enable\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIE": {
    +                    "description": "TIE",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TPSIE": {
    +                    "description": "TPSIE",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TBUIE": {
    +                    "description": "TBUIE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TJTIE": {
    +                    "description": "TJTIE",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ROIE": {
    +                    "description": "ROIE",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TUIE": {
    +                    "description": "TUIE",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RIE": {
    +                    "description": "RIE",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RBUIE": {
    +                    "description": "RBUIE",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RPSIE": {
    +                    "description": "RPSIE",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "RWTIE": {
    +                    "description": "RWTIE",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ETIE": {
    +                    "description": "ETIE",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FBEIE": {
    +                    "description": "FBEIE",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ERIE": {
    +                    "description": "ERIE",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "AISE": {
    +                    "description": "AISE",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "NISE": {
    +                    "description": "NISE",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMAMFBOCR": {
    +              "description": "Ethernet DMA missed frame and buffer\n          overflow counter register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MFC": {
    +                    "description": "MFC",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "OMFC": {
    +                    "description": "OMFC",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "MFA": {
    +                    "description": "MFA",
    +                    "offset": 17,
    +                    "size": 11
    +                  },
    +                  "OFOC": {
    +                    "description": "OFOC",
    +                    "offset": 28,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMARSWTR": {
    +              "description": "Ethernet DMA receive status watchdog timer\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RSWTC": {
    +                    "description": "RSWTC",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "DMACHTDR": {
    +              "description": "Ethernet DMA current host transmit\n          descriptor register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "HTDAP": {
    +                    "description": "HTDAP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DMACHRDR": {
    +              "description": "Ethernet DMA current host receive descriptor\n          register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "HRDAP": {
    +                    "description": "HRDAP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DMACHTBAR": {
    +              "description": "Ethernet DMA current host transmit buffer\n          address register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "HTBAP": {
    +                    "description": "HTBAP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DMACHRBAR": {
    +              "description": "Ethernet DMA current host receive buffer\n          address register",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "HRBAP": {
    +                    "description": "HRBAP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "C_ADC": {
    +        "description": "Common ADC registers",
    +        "children": {
    +          "registers": {
    +            "CSR": {
    +              "description": "ADC Common status register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "OVR3": {
    +                    "description": "Overrun flag of ADC3",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "STRT3": {
    +                    "description": "Regular channel Start flag of ADC\n              3",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "JSTRT3": {
    +                    "description": "Injected channel Start flag of ADC\n              3",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "JEOC3": {
    +                    "description": "Injected channel end of conversion of\n              ADC 3",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "EOC3": {
    +                    "description": "End of conversion of ADC 3",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "AWD3": {
    +                    "description": "Analog watchdog flag of ADC\n              3",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "OVR2": {
    +                    "description": "Overrun flag of ADC 2",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "STRT2": {
    +                    "description": "Regular channel Start flag of ADC\n              2",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "JSTRT2": {
    +                    "description": "Injected channel Start flag of ADC\n              2",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "JEOC2": {
    +                    "description": "Injected channel end of conversion of\n              ADC 2",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EOC2": {
    +                    "description": "End of conversion of ADC 2",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "AWD2": {
    +                    "description": "Analog watchdog flag of ADC\n              2",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "OVR1": {
    +                    "description": "Overrun flag of ADC 1",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "STRT1": {
    +                    "description": "Regular channel Start flag of ADC\n              1",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "JSTRT1": {
    +                    "description": "Injected channel Start flag of ADC\n              1",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "JEOC1": {
    +                    "description": "Injected channel end of conversion of\n              ADC 1",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EOC1": {
    +                    "description": "End of conversion of ADC 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AWD1": {
    +                    "description": "Analog watchdog flag of ADC\n              1",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCR": {
    +              "description": "ADC common control register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TSVREFE": {
    +                    "description": "Temperature sensor and VREFINT\n              enable",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "VBATE": {
    +                    "description": "VBAT enable",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "ADCPRE": {
    +                    "description": "ADC prescaler",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "DMA": {
    +                    "description": "Direct memory access mode for multi ADC\n              mode",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "DDS": {
    +                    "description": "DMA disable selection for multi-ADC\n              mode",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "DELAY": {
    +                    "description": "Delay between 2 sampling\n              phases",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "MULT": {
    +                    "description": "Multi ADC mode selection",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "CDR": {
    +              "description": "ADC common regular data register for dual\n          and triple modes",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DATA2": {
    +                    "description": "2nd data item of a pair of regular\n              conversions",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "DATA1": {
    +                    "description": "1st data item of a pair of regular\n              conversions",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIM1": {
    +        "description": "Advanced-timers",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CKD": {
    +                    "description": "Clock division",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CMS": {
    +                    "description": "Center-aligned mode\n              selection",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "DIR": {
    +                    "description": "Direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "OPM": {
    +                    "description": "One-pulse mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OIS4": {
    +                    "description": "Output Idle state 4",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "OIS3N": {
    +                    "description": "Output Idle state 3",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "OIS3": {
    +                    "description": "Output Idle state 3",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "OIS2N": {
    +                    "description": "Output Idle state 2",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OIS2": {
    +                    "description": "Output Idle state 2",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OIS1N": {
    +                    "description": "Output Idle state 1",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "OIS1": {
    +                    "description": "Output Idle state 1",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TI1S": {
    +                    "description": "TI1 selection",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MMS": {
    +                    "description": "Master mode selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "CCDS": {
    +                    "description": "Capture/compare DMA\n              selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CCUS": {
    +                    "description": "Capture/compare control update\n              selection",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CCPC": {
    +                    "description": "Capture/compare preloaded\n              control",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SMCR": {
    +              "description": "slave mode control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ETP": {
    +                    "description": "External trigger polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ECE": {
    +                    "description": "External clock enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ETPS": {
    +                    "description": "External trigger prescaler",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "ETF": {
    +                    "description": "External trigger filter",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "MSM": {
    +                    "description": "Master/Slave mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TS": {
    +                    "description": "Trigger selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SMS": {
    +                    "description": "Slave mode selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TDE": {
    +                    "description": "Trigger DMA request enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "COMDE": {
    +                    "description": "COM DMA request enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CC4DE": {
    +                    "description": "Capture/Compare 4 DMA request\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3DE": {
    +                    "description": "Capture/Compare 3 DMA request\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC2DE": {
    +                    "description": "Capture/Compare 2 DMA request\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1DE": {
    +                    "description": "Capture/Compare 1 DMA request\n              enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "UDE": {
    +                    "description": "Update DMA request enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TIE": {
    +                    "description": "Trigger interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC4IE": {
    +                    "description": "Capture/Compare 4 interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3IE": {
    +                    "description": "Capture/Compare 3 interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2IE": {
    +                    "description": "Capture/Compare 2 interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IE": {
    +                    "description": "Capture/Compare 1 interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "BIE": {
    +                    "description": "Break interrupt enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "COMIE": {
    +                    "description": "COM interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC4OF": {
    +                    "description": "Capture/Compare 4 overcapture\n              flag",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3OF": {
    +                    "description": "Capture/Compare 3 overcapture\n              flag",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC2OF": {
    +                    "description": "Capture/compare 2 overcapture\n              flag",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1OF": {
    +                    "description": "Capture/Compare 1 overcapture\n              flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BIF": {
    +                    "description": "Break interrupt flag",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TIF": {
    +                    "description": "Trigger interrupt flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "COMIF": {
    +                    "description": "COM interrupt flag",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC4IF": {
    +                    "description": "Capture/Compare 4 interrupt\n              flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3IF": {
    +                    "description": "Capture/Compare 3 interrupt\n              flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2IF": {
    +                    "description": "Capture/Compare 2 interrupt\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IF": {
    +                    "description": "Capture/compare 1 interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "BG": {
    +                    "description": "Break generation",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TG": {
    +                    "description": "Trigger generation",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "COMG": {
    +                    "description": "Capture/Compare control update\n              generation",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC4G": {
    +                    "description": "Capture/compare 4\n              generation",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3G": {
    +                    "description": "Capture/compare 3\n              generation",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2G": {
    +                    "description": "Capture/compare 2\n              generation",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1G": {
    +                    "description": "Capture/compare 1\n              generation",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Output": {
    +              "description": "capture/compare mode register 1 (output\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OC2CE": {
    +                    "description": "Output Compare 2 clear\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC2M": {
    +                    "description": "Output Compare 2 mode",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC2PE": {
    +                    "description": "Output Compare 2 preload\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC2FE": {
    +                    "description": "Output Compare 2 fast\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/Compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC1CE": {
    +                    "description": "Output Compare 1 clear\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OC1M": {
    +                    "description": "Output Compare 1 mode",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC1PE": {
    +                    "description": "Output Compare 1 preload\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC1FE": {
    +                    "description": "Output Compare 1 fast\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Input": {
    +              "description": "capture/compare mode register 1 (input\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC2F": {
    +                    "description": "Input capture 2 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC2PCS": {
    +                    "description": "Input capture 2 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/Compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC1F": {
    +                    "description": "Input capture 1 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ICPCS": {
    +                    "description": "Input capture 1 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR2_Output": {
    +              "description": "capture/compare mode register 2 (output\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OC4CE": {
    +                    "description": "Output compare 4 clear\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC4M": {
    +                    "description": "Output compare 4 mode",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC4PE": {
    +                    "description": "Output compare 4 preload\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC4FE": {
    +                    "description": "Output compare 4 fast\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC4S": {
    +                    "description": "Capture/Compare 4\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC3CE": {
    +                    "description": "Output compare 3 clear\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OC3M": {
    +                    "description": "Output compare 3 mode",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC3PE": {
    +                    "description": "Output compare 3 preload\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC3FE": {
    +                    "description": "Output compare 3 fast\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC3S": {
    +                    "description": "Capture/Compare 3\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR2_Input": {
    +              "description": "capture/compare mode register 2 (input\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC4F": {
    +                    "description": "Input capture 4 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC4PSC": {
    +                    "description": "Input capture 4 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC4S": {
    +                    "description": "Capture/Compare 4\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC3F": {
    +                    "description": "Input capture 3 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "IC3PSC": {
    +                    "description": "Input capture 3 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC3S": {
    +                    "description": "Capture/compare 3\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCER": {
    +              "description": "capture/compare enable\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC4P": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CC4E": {
    +                    "description": "Capture/Compare 4 output\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3NP": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC3NE": {
    +                    "description": "Capture/Compare 3 complementary output\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC3P": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CC3E": {
    +                    "description": "Capture/Compare 3 output\n              enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CC2NP": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CC2NE": {
    +                    "description": "Capture/Compare 2 complementary output\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC2P": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC2E": {
    +                    "description": "Capture/Compare 2 output\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC1NP": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC1NE": {
    +                    "description": "Capture/Compare 1 complementary output\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1P": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC1E": {
    +                    "description": "Capture/Compare 1 output\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARR": {
    +                    "description": "Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR1": {
    +              "description": "capture/compare register 1",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR1": {
    +                    "description": "Capture/Compare 1 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR2": {
    +              "description": "capture/compare register 2",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR2": {
    +                    "description": "Capture/Compare 2 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR3": {
    +              "description": "capture/compare register 3",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR3": {
    +                    "description": "Capture/Compare value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR4": {
    +              "description": "capture/compare register 4",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR4": {
    +                    "description": "Capture/Compare value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DCR": {
    +              "description": "DMA control register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBL": {
    +                    "description": "DMA burst length",
    +                    "offset": 8,
    +                    "size": 5
    +                  },
    +                  "DBA": {
    +                    "description": "DMA base address",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "DMAR": {
    +              "description": "DMA address for full transfer",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAB": {
    +                    "description": "DMA register for burst\n              accesses",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "RCR": {
    +              "description": "repetition counter register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REP": {
    +                    "description": "Repetition counter value",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "BDTR": {
    +              "description": "break and dead-time register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MOE": {
    +                    "description": "Main output enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "AOE": {
    +                    "description": "Automatic output enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "BKP": {
    +                    "description": "Break polarity",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BKE": {
    +                    "description": "Break enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "OSSR": {
    +                    "description": "Off-state selection for Run\n              mode",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OSSI": {
    +                    "description": "Off-state selection for Idle\n              mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LOCK": {
    +                    "description": "Lock configuration",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "DTG": {
    +                    "description": "Dead-time generator setup",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "Ethernet_PTP": {
    +        "description": "Ethernet: Precision time protocol",
    +        "children": {
    +          "registers": {
    +            "PTPTSCR": {
    +              "description": "Ethernet PTP time stamp control\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 8192,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TSE": {
    +                    "description": "TSE",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TSFCU": {
    +                    "description": "TSFCU",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TSPTPPSV2E": {
    +                    "description": "TSPTPPSV2E",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TSSPTPOEFE": {
    +                    "description": "TSSPTPOEFE",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TSSIPV6FE": {
    +                    "description": "TSSIPV6FE",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TSSIPV4FE": {
    +                    "description": "TSSIPV4FE",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TSSEME": {
    +                    "description": "TSSEME",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TSSMRME": {
    +                    "description": "TSSMRME",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TSCNT": {
    +                    "description": "TSCNT",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "TSPFFMAE": {
    +                    "description": "TSPFFMAE",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TSSTI": {
    +                    "description": "TSSTI",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TSSTU": {
    +                    "description": "TSSTU",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TSITE": {
    +                    "description": "TSITE",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TTSARU": {
    +                    "description": "TTSARU",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TSSARFE": {
    +                    "description": "TSSARFE",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TSSSR": {
    +                    "description": "TSSSR",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PTPSSIR": {
    +              "description": "Ethernet PTP subsecond increment\n          register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STSSI": {
    +                    "description": "STSSI",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "PTPTSHR": {
    +              "description": "Ethernet PTP time stamp high\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "STS": {
    +                    "description": "STS",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PTPTSLR": {
    +              "description": "Ethernet PTP time stamp low\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "STSS": {
    +                    "description": "STSS",
    +                    "offset": 0,
    +                    "size": 31
    +                  },
    +                  "STPNS": {
    +                    "description": "STPNS",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PTPTSHUR": {
    +              "description": "Ethernet PTP time stamp high update\n          register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TSUS": {
    +                    "description": "TSUS",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PTPTSLUR": {
    +              "description": "Ethernet PTP time stamp low update\n          register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TSUSS": {
    +                    "description": "TSUSS",
    +                    "offset": 0,
    +                    "size": 31
    +                  },
    +                  "TSUPNS": {
    +                    "description": "TSUPNS",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PTPTSAR": {
    +              "description": "Ethernet PTP time stamp addend\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TSA": {
    +                    "description": "TSA",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PTPTTHR": {
    +              "description": "Ethernet PTP target time high\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TTSH": {
    +                    "description": "0",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PTPTTLR": {
    +              "description": "Ethernet PTP target time low\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TTSL": {
    +                    "description": "TTSL",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PTPTSSR": {
    +              "description": "Ethernet PTP time stamp status\n          register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TSSO": {
    +                    "description": "TSSO",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TSTTR": {
    +                    "description": "TSTTR",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PTPPPSCR": {
    +              "description": "Ethernet PTP PPS control\n          register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TSSO": {
    +                    "description": "TSSO",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TSTTR": {
    +                    "description": "TSTTR",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIM2": {
    +        "description": "General purpose timers",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CKD": {
    +                    "description": "Clock division",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CMS": {
    +                    "description": "Center-aligned mode\n              selection",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "DIR": {
    +                    "description": "Direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "OPM": {
    +                    "description": "One-pulse mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TI1S": {
    +                    "description": "TI1 selection",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MMS": {
    +                    "description": "Master mode selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "CCDS": {
    +                    "description": "Capture/compare DMA\n              selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SMCR": {
    +              "description": "slave mode control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ETP": {
    +                    "description": "External trigger polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ECE": {
    +                    "description": "External clock enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ETPS": {
    +                    "description": "External trigger prescaler",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "ETF": {
    +                    "description": "External trigger filter",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "MSM": {
    +                    "description": "Master/Slave mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TS": {
    +                    "description": "Trigger selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SMS": {
    +                    "description": "Slave mode selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TDE": {
    +                    "description": "Trigger DMA request enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CC4DE": {
    +                    "description": "Capture/Compare 4 DMA request\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3DE": {
    +                    "description": "Capture/Compare 3 DMA request\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC2DE": {
    +                    "description": "Capture/Compare 2 DMA request\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1DE": {
    +                    "description": "Capture/Compare 1 DMA request\n              enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "UDE": {
    +                    "description": "Update DMA request enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TIE": {
    +                    "description": "Trigger interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC4IE": {
    +                    "description": "Capture/Compare 4 interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3IE": {
    +                    "description": "Capture/Compare 3 interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2IE": {
    +                    "description": "Capture/Compare 2 interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IE": {
    +                    "description": "Capture/Compare 1 interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC4OF": {
    +                    "description": "Capture/Compare 4 overcapture\n              flag",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3OF": {
    +                    "description": "Capture/Compare 3 overcapture\n              flag",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC2OF": {
    +                    "description": "Capture/compare 2 overcapture\n              flag",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1OF": {
    +                    "description": "Capture/Compare 1 overcapture\n              flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TIF": {
    +                    "description": "Trigger interrupt flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC4IF": {
    +                    "description": "Capture/Compare 4 interrupt\n              flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3IF": {
    +                    "description": "Capture/Compare 3 interrupt\n              flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2IF": {
    +                    "description": "Capture/Compare 2 interrupt\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IF": {
    +                    "description": "Capture/compare 1 interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TG": {
    +                    "description": "Trigger generation",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC4G": {
    +                    "description": "Capture/compare 4\n              generation",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3G": {
    +                    "description": "Capture/compare 3\n              generation",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2G": {
    +                    "description": "Capture/compare 2\n              generation",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1G": {
    +                    "description": "Capture/compare 1\n              generation",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Output": {
    +              "description": "capture/compare mode register 1 (output\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OC2CE": {
    +                    "description": "OC2CE",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC2M": {
    +                    "description": "OC2M",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC2PE": {
    +                    "description": "OC2PE",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC2FE": {
    +                    "description": "OC2FE",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC2S": {
    +                    "description": "CC2S",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC1CE": {
    +                    "description": "OC1CE",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OC1M": {
    +                    "description": "OC1M",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC1PE": {
    +                    "description": "OC1PE",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC1FE": {
    +                    "description": "OC1FE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1S": {
    +                    "description": "CC1S",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Input": {
    +              "description": "capture/compare mode register 1 (input\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC2F": {
    +                    "description": "Input capture 2 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC2PCS": {
    +                    "description": "Input capture 2 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/Compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC1F": {
    +                    "description": "Input capture 1 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ICPCS": {
    +                    "description": "Input capture 1 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR2_Output": {
    +              "description": "capture/compare mode register 2 (output\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "O24CE": {
    +                    "description": "O24CE",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC4M": {
    +                    "description": "OC4M",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC4PE": {
    +                    "description": "OC4PE",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC4FE": {
    +                    "description": "OC4FE",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC4S": {
    +                    "description": "CC4S",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC3CE": {
    +                    "description": "OC3CE",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OC3M": {
    +                    "description": "OC3M",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC3PE": {
    +                    "description": "OC3PE",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC3FE": {
    +                    "description": "OC3FE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC3S": {
    +                    "description": "CC3S",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR2_Input": {
    +              "description": "capture/compare mode register 2 (input\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC4F": {
    +                    "description": "Input capture 4 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC4PSC": {
    +                    "description": "Input capture 4 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC4S": {
    +                    "description": "Capture/Compare 4\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC3F": {
    +                    "description": "Input capture 3 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "IC3PSC": {
    +                    "description": "Input capture 3 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC3S": {
    +                    "description": "Capture/compare 3\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCER": {
    +              "description": "capture/compare enable\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC4NP": {
    +                    "description": "Capture/Compare 4 output\n              Polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "CC4P": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CC4E": {
    +                    "description": "Capture/Compare 4 output\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3NP": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC3P": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CC3E": {
    +                    "description": "Capture/Compare 3 output\n              enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CC2NP": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CC2P": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC2E": {
    +                    "description": "Capture/Compare 2 output\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC1NP": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC1P": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC1E": {
    +                    "description": "Capture/Compare 1 output\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT_H": {
    +                    "description": "High counter value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CNT_L": {
    +                    "description": "Low counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARR_H": {
    +                    "description": "High Auto-reload value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "ARR_L": {
    +                    "description": "Low Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR1": {
    +              "description": "capture/compare register 1",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR1_H": {
    +                    "description": "High Capture/Compare 1\n              value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CCR1_L": {
    +                    "description": "Low Capture/Compare 1\n              value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR2": {
    +              "description": "capture/compare register 2",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR2_H": {
    +                    "description": "High Capture/Compare 2\n              value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CCR2_L": {
    +                    "description": "Low Capture/Compare 2\n              value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR3": {
    +              "description": "capture/compare register 3",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR3_H": {
    +                    "description": "High Capture/Compare value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CCR3_L": {
    +                    "description": "Low Capture/Compare value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR4": {
    +              "description": "capture/compare register 4",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR4_H": {
    +                    "description": "High Capture/Compare value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CCR4_L": {
    +                    "description": "Low Capture/Compare value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DCR": {
    +              "description": "DMA control register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBL": {
    +                    "description": "DMA burst length",
    +                    "offset": 8,
    +                    "size": 5
    +                  },
    +                  "DBA": {
    +                    "description": "DMA base address",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "DMAR": {
    +              "description": "DMA address for full transfer",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAB": {
    +                    "description": "DMA register for burst\n              accesses",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OR": {
    +              "description": "TIM5 option register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ITR1_RMP": {
    +                    "description": "Timer Input 4 remap",
    +                    "offset": 10,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIM3": {
    +        "description": "General purpose timers",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CKD": {
    +                    "description": "Clock division",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CMS": {
    +                    "description": "Center-aligned mode\n              selection",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "DIR": {
    +                    "description": "Direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "OPM": {
    +                    "description": "One-pulse mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TI1S": {
    +                    "description": "TI1 selection",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MMS": {
    +                    "description": "Master mode selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "CCDS": {
    +                    "description": "Capture/compare DMA\n              selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SMCR": {
    +              "description": "slave mode control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ETP": {
    +                    "description": "External trigger polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ECE": {
    +                    "description": "External clock enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ETPS": {
    +                    "description": "External trigger prescaler",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "ETF": {
    +                    "description": "External trigger filter",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "MSM": {
    +                    "description": "Master/Slave mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TS": {
    +                    "description": "Trigger selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SMS": {
    +                    "description": "Slave mode selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TDE": {
    +                    "description": "Trigger DMA request enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CC4DE": {
    +                    "description": "Capture/Compare 4 DMA request\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3DE": {
    +                    "description": "Capture/Compare 3 DMA request\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC2DE": {
    +                    "description": "Capture/Compare 2 DMA request\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1DE": {
    +                    "description": "Capture/Compare 1 DMA request\n              enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "UDE": {
    +                    "description": "Update DMA request enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TIE": {
    +                    "description": "Trigger interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC4IE": {
    +                    "description": "Capture/Compare 4 interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3IE": {
    +                    "description": "Capture/Compare 3 interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2IE": {
    +                    "description": "Capture/Compare 2 interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IE": {
    +                    "description": "Capture/Compare 1 interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC4OF": {
    +                    "description": "Capture/Compare 4 overcapture\n              flag",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3OF": {
    +                    "description": "Capture/Compare 3 overcapture\n              flag",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC2OF": {
    +                    "description": "Capture/compare 2 overcapture\n              flag",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1OF": {
    +                    "description": "Capture/Compare 1 overcapture\n              flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TIF": {
    +                    "description": "Trigger interrupt flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC4IF": {
    +                    "description": "Capture/Compare 4 interrupt\n              flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3IF": {
    +                    "description": "Capture/Compare 3 interrupt\n              flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2IF": {
    +                    "description": "Capture/Compare 2 interrupt\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IF": {
    +                    "description": "Capture/compare 1 interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TG": {
    +                    "description": "Trigger generation",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC4G": {
    +                    "description": "Capture/compare 4\n              generation",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3G": {
    +                    "description": "Capture/compare 3\n              generation",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2G": {
    +                    "description": "Capture/compare 2\n              generation",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1G": {
    +                    "description": "Capture/compare 1\n              generation",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Output": {
    +              "description": "capture/compare mode register 1 (output\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OC2CE": {
    +                    "description": "OC2CE",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC2M": {
    +                    "description": "OC2M",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC2PE": {
    +                    "description": "OC2PE",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC2FE": {
    +                    "description": "OC2FE",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC2S": {
    +                    "description": "CC2S",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC1CE": {
    +                    "description": "OC1CE",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OC1M": {
    +                    "description": "OC1M",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC1PE": {
    +                    "description": "OC1PE",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC1FE": {
    +                    "description": "OC1FE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1S": {
    +                    "description": "CC1S",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Input": {
    +              "description": "capture/compare mode register 1 (input\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC2F": {
    +                    "description": "Input capture 2 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC2PCS": {
    +                    "description": "Input capture 2 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/Compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC1F": {
    +                    "description": "Input capture 1 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ICPCS": {
    +                    "description": "Input capture 1 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR2_Output": {
    +              "description": "capture/compare mode register 2 (output\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "O24CE": {
    +                    "description": "O24CE",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC4M": {
    +                    "description": "OC4M",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC4PE": {
    +                    "description": "OC4PE",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC4FE": {
    +                    "description": "OC4FE",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC4S": {
    +                    "description": "CC4S",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC3CE": {
    +                    "description": "OC3CE",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OC3M": {
    +                    "description": "OC3M",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC3PE": {
    +                    "description": "OC3PE",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC3FE": {
    +                    "description": "OC3FE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC3S": {
    +                    "description": "CC3S",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR2_Input": {
    +              "description": "capture/compare mode register 2 (input\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC4F": {
    +                    "description": "Input capture 4 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC4PSC": {
    +                    "description": "Input capture 4 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC4S": {
    +                    "description": "Capture/Compare 4\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC3F": {
    +                    "description": "Input capture 3 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "IC3PSC": {
    +                    "description": "Input capture 3 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC3S": {
    +                    "description": "Capture/compare 3\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCER": {
    +              "description": "capture/compare enable\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC4NP": {
    +                    "description": "Capture/Compare 4 output\n              Polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "CC4P": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CC4E": {
    +                    "description": "Capture/Compare 4 output\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3NP": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC3P": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CC3E": {
    +                    "description": "Capture/Compare 3 output\n              enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CC2NP": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CC2P": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC2E": {
    +                    "description": "Capture/Compare 2 output\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC1NP": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC1P": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC1E": {
    +                    "description": "Capture/Compare 1 output\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT_H": {
    +                    "description": "High counter value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CNT_L": {
    +                    "description": "Low counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARR_H": {
    +                    "description": "High Auto-reload value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "ARR_L": {
    +                    "description": "Low Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR1": {
    +              "description": "capture/compare register 1",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR1_H": {
    +                    "description": "High Capture/Compare 1\n              value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CCR1_L": {
    +                    "description": "Low Capture/Compare 1\n              value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR2": {
    +              "description": "capture/compare register 2",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR2_H": {
    +                    "description": "High Capture/Compare 2\n              value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CCR2_L": {
    +                    "description": "Low Capture/Compare 2\n              value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR3": {
    +              "description": "capture/compare register 3",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR3_H": {
    +                    "description": "High Capture/Compare value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CCR3_L": {
    +                    "description": "Low Capture/Compare value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR4": {
    +              "description": "capture/compare register 4",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR4_H": {
    +                    "description": "High Capture/Compare value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CCR4_L": {
    +                    "description": "Low Capture/Compare value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DCR": {
    +              "description": "DMA control register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBL": {
    +                    "description": "DMA burst length",
    +                    "offset": 8,
    +                    "size": 5
    +                  },
    +                  "DBA": {
    +                    "description": "DMA base address",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "DMAR": {
    +              "description": "DMA address for full transfer",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAB": {
    +                    "description": "DMA register for burst\n              accesses",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "Ethernet_MMC": {
    +        "description": "Ethernet: MAC management counters",
    +        "children": {
    +          "registers": {
    +            "MMCCR": {
    +              "description": "Ethernet MMC control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CR": {
    +                    "description": "CR",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CSR": {
    +                    "description": "CSR",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ROR": {
    +                    "description": "ROR",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MCF": {
    +                    "description": "MCF",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MCP": {
    +                    "description": "MCP",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "MCFHP": {
    +                    "description": "MCFHP",
    +                    "offset": 5,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MMCRIR": {
    +              "description": "Ethernet MMC receive interrupt\n          register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RFCES": {
    +                    "description": "RFCES",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RFAES": {
    +                    "description": "RFAES",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RGUFS": {
    +                    "description": "RGUFS",
    +                    "offset": 17,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MMCTIR": {
    +              "description": "Ethernet MMC transmit interrupt\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TGFSCS": {
    +                    "description": "TGFSCS",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TGFMSCS": {
    +                    "description": "TGFMSCS",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TGFS": {
    +                    "description": "TGFS",
    +                    "offset": 21,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MMCRIMR": {
    +              "description": "Ethernet MMC receive interrupt mask\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RFCEM": {
    +                    "description": "RFCEM",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RFAEM": {
    +                    "description": "RFAEM",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RGUFM": {
    +                    "description": "RGUFM",
    +                    "offset": 17,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MMCTIMR": {
    +              "description": "Ethernet MMC transmit interrupt mask\n          register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TGFSCM": {
    +                    "description": "TGFSCM",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TGFMSCM": {
    +                    "description": "TGFMSCM",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TGFM": {
    +                    "description": "TGFM",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MMCTGFSCCR": {
    +              "description": "Ethernet MMC transmitted good frames after a\n          single collision counter",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TGFSCC": {
    +                    "description": "TGFSCC",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MMCTGFMSCCR": {
    +              "description": "Ethernet MMC transmitted good frames after\n          more than a single collision",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TGFMSCC": {
    +                    "description": "TGFMSCC",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MMCTGFCR": {
    +              "description": "Ethernet MMC transmitted good frames counter\n          register",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TGFC": {
    +                    "description": "HTL",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MMCRFCECR": {
    +              "description": "Ethernet MMC received frames with CRC error\n          counter register",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RFCFC": {
    +                    "description": "RFCFC",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MMCRFAECR": {
    +              "description": "Ethernet MMC received frames with alignment\n          error counter register",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RFAEC": {
    +                    "description": "RFAEC",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MMCRGUFCR": {
    +              "description": "MMC received good unicast frames counter\n          register",
    +              "offset": 196,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RGUFC": {
    +                    "description": "RGUFC",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIM5": {
    +        "description": "General-purpose-timers",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CKD": {
    +                    "description": "Clock division",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CMS": {
    +                    "description": "Center-aligned mode\n              selection",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "DIR": {
    +                    "description": "Direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "OPM": {
    +                    "description": "One-pulse mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TI1S": {
    +                    "description": "TI1 selection",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MMS": {
    +                    "description": "Master mode selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "CCDS": {
    +                    "description": "Capture/compare DMA\n              selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SMCR": {
    +              "description": "slave mode control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ETP": {
    +                    "description": "External trigger polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ECE": {
    +                    "description": "External clock enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ETPS": {
    +                    "description": "External trigger prescaler",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "ETF": {
    +                    "description": "External trigger filter",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "MSM": {
    +                    "description": "Master/Slave mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TS": {
    +                    "description": "Trigger selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SMS": {
    +                    "description": "Slave mode selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TDE": {
    +                    "description": "Trigger DMA request enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CC4DE": {
    +                    "description": "Capture/Compare 4 DMA request\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3DE": {
    +                    "description": "Capture/Compare 3 DMA request\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC2DE": {
    +                    "description": "Capture/Compare 2 DMA request\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1DE": {
    +                    "description": "Capture/Compare 1 DMA request\n              enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "UDE": {
    +                    "description": "Update DMA request enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TIE": {
    +                    "description": "Trigger interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC4IE": {
    +                    "description": "Capture/Compare 4 interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3IE": {
    +                    "description": "Capture/Compare 3 interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2IE": {
    +                    "description": "Capture/Compare 2 interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IE": {
    +                    "description": "Capture/Compare 1 interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC4OF": {
    +                    "description": "Capture/Compare 4 overcapture\n              flag",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3OF": {
    +                    "description": "Capture/Compare 3 overcapture\n              flag",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC2OF": {
    +                    "description": "Capture/compare 2 overcapture\n              flag",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1OF": {
    +                    "description": "Capture/Compare 1 overcapture\n              flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TIF": {
    +                    "description": "Trigger interrupt flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC4IF": {
    +                    "description": "Capture/Compare 4 interrupt\n              flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3IF": {
    +                    "description": "Capture/Compare 3 interrupt\n              flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2IF": {
    +                    "description": "Capture/Compare 2 interrupt\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IF": {
    +                    "description": "Capture/compare 1 interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TG": {
    +                    "description": "Trigger generation",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC4G": {
    +                    "description": "Capture/compare 4\n              generation",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3G": {
    +                    "description": "Capture/compare 3\n              generation",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2G": {
    +                    "description": "Capture/compare 2\n              generation",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1G": {
    +                    "description": "Capture/compare 1\n              generation",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Output": {
    +              "description": "capture/compare mode register 1 (output\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OC2CE": {
    +                    "description": "OC2CE",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC2M": {
    +                    "description": "OC2M",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC2PE": {
    +                    "description": "OC2PE",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC2FE": {
    +                    "description": "OC2FE",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC2S": {
    +                    "description": "CC2S",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC1CE": {
    +                    "description": "OC1CE",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OC1M": {
    +                    "description": "OC1M",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC1PE": {
    +                    "description": "OC1PE",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC1FE": {
    +                    "description": "OC1FE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1S": {
    +                    "description": "CC1S",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Input": {
    +              "description": "capture/compare mode register 1 (input\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC2F": {
    +                    "description": "Input capture 2 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC2PCS": {
    +                    "description": "Input capture 2 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/Compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC1F": {
    +                    "description": "Input capture 1 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ICPCS": {
    +                    "description": "Input capture 1 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR2_Output": {
    +              "description": "capture/compare mode register 2 (output\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "O24CE": {
    +                    "description": "O24CE",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC4M": {
    +                    "description": "OC4M",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC4PE": {
    +                    "description": "OC4PE",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC4FE": {
    +                    "description": "OC4FE",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC4S": {
    +                    "description": "CC4S",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC3CE": {
    +                    "description": "OC3CE",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OC3M": {
    +                    "description": "OC3M",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC3PE": {
    +                    "description": "OC3PE",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC3FE": {
    +                    "description": "OC3FE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC3S": {
    +                    "description": "CC3S",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR2_Input": {
    +              "description": "capture/compare mode register 2 (input\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC4F": {
    +                    "description": "Input capture 4 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC4PSC": {
    +                    "description": "Input capture 4 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC4S": {
    +                    "description": "Capture/Compare 4\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC3F": {
    +                    "description": "Input capture 3 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "IC3PSC": {
    +                    "description": "Input capture 3 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC3S": {
    +                    "description": "Capture/compare 3\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCER": {
    +              "description": "capture/compare enable\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC4NP": {
    +                    "description": "Capture/Compare 4 output\n              Polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "CC4P": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CC4E": {
    +                    "description": "Capture/Compare 4 output\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3NP": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC3P": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CC3E": {
    +                    "description": "Capture/Compare 3 output\n              enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CC2NP": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CC2P": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC2E": {
    +                    "description": "Capture/Compare 2 output\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC1NP": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC1P": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC1E": {
    +                    "description": "Capture/Compare 1 output\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT_H": {
    +                    "description": "High counter value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CNT_L": {
    +                    "description": "Low counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARR_H": {
    +                    "description": "High Auto-reload value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "ARR_L": {
    +                    "description": "Low Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR1": {
    +              "description": "capture/compare register 1",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR1_H": {
    +                    "description": "High Capture/Compare 1\n              value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CCR1_L": {
    +                    "description": "Low Capture/Compare 1\n              value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR2": {
    +              "description": "capture/compare register 2",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR2_H": {
    +                    "description": "High Capture/Compare 2\n              value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CCR2_L": {
    +                    "description": "Low Capture/Compare 2\n              value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR3": {
    +              "description": "capture/compare register 3",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR3_H": {
    +                    "description": "High Capture/Compare value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CCR3_L": {
    +                    "description": "Low Capture/Compare value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR4": {
    +              "description": "capture/compare register 4",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR4_H": {
    +                    "description": "High Capture/Compare value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CCR4_L": {
    +                    "description": "Low Capture/Compare value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DCR": {
    +              "description": "DMA control register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBL": {
    +                    "description": "DMA burst length",
    +                    "offset": 8,
    +                    "size": 5
    +                  },
    +                  "DBA": {
    +                    "description": "DMA base address",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "DMAR": {
    +              "description": "DMA address for full transfer",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAB": {
    +                    "description": "DMA register for burst\n              accesses",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OR": {
    +              "description": "TIM5 option register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IT4_RMP": {
    +                    "description": "Timer Input 4 remap",
    +                    "offset": 6,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIM9": {
    +        "description": "General purpose timers",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CKD": {
    +                    "description": "Clock division",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OPM": {
    +                    "description": "One-pulse mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MMS": {
    +                    "description": "Master mode selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "SMCR": {
    +              "description": "slave mode control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MSM": {
    +                    "description": "Master/Slave mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TS": {
    +                    "description": "Trigger selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SMS": {
    +                    "description": "Slave mode selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIE": {
    +                    "description": "Trigger interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC2IE": {
    +                    "description": "Capture/Compare 2 interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IE": {
    +                    "description": "Capture/Compare 1 interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC2OF": {
    +                    "description": "Capture/compare 2 overcapture\n              flag",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1OF": {
    +                    "description": "Capture/Compare 1 overcapture\n              flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TIF": {
    +                    "description": "Trigger interrupt flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC2IF": {
    +                    "description": "Capture/Compare 2 interrupt\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IF": {
    +                    "description": "Capture/compare 1 interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TG": {
    +                    "description": "Trigger generation",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC2G": {
    +                    "description": "Capture/compare 2\n              generation",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1G": {
    +                    "description": "Capture/compare 1\n              generation",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Output": {
    +              "description": "capture/compare mode register 1 (output\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OC2M": {
    +                    "description": "Output Compare 2 mode",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC2PE": {
    +                    "description": "Output Compare 2 preload\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC2FE": {
    +                    "description": "Output Compare 2 fast\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/Compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC1M": {
    +                    "description": "Output Compare 1 mode",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC1PE": {
    +                    "description": "Output Compare 1 preload\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC1FE": {
    +                    "description": "Output Compare 1 fast\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Input": {
    +              "description": "capture/compare mode register 1 (input\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC2F": {
    +                    "description": "Input capture 2 filter",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "IC2PCS": {
    +                    "description": "Input capture 2 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/Compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC1F": {
    +                    "description": "Input capture 1 filter",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "ICPCS": {
    +                    "description": "Input capture 1 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCER": {
    +              "description": "capture/compare enable\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC2NP": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CC2P": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC2E": {
    +                    "description": "Capture/Compare 2 output\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC1NP": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC1P": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC1E": {
    +                    "description": "Capture/Compare 1 output\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARR": {
    +                    "description": "Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR1": {
    +              "description": "capture/compare register 1",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR1": {
    +                    "description": "Capture/Compare 1 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR2": {
    +              "description": "capture/compare register 2",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR2": {
    +                    "description": "Capture/Compare 2 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "Ethernet_MAC": {
    +        "description": "Ethernet: media access control\n      (MAC)",
    +        "children": {
    +          "registers": {
    +            "MACCR": {
    +              "description": "Ethernet MAC configuration\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 32768,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RE": {
    +                    "description": "RE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TE": {
    +                    "description": "TE",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DC": {
    +                    "description": "DC",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BL": {
    +                    "description": "BL",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "APCS": {
    +                    "description": "APCS",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RD": {
    +                    "description": "RD",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "IPCO": {
    +                    "description": "IPCO",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "DM": {
    +                    "description": "DM",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "LM": {
    +                    "description": "LM",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ROD": {
    +                    "description": "ROD",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FES": {
    +                    "description": "FES",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CSD": {
    +                    "description": "CSD",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "IFG": {
    +                    "description": "IFG",
    +                    "offset": 17,
    +                    "size": 3
    +                  },
    +                  "JD": {
    +                    "description": "JD",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "WD": {
    +                    "description": "WD",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "CSTF": {
    +                    "description": "CSTF",
    +                    "offset": 25,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACFFR": {
    +              "description": "Ethernet MAC frame filter\n          register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PM": {
    +                    "description": "PM",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "HU": {
    +                    "description": "HU",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HM": {
    +                    "description": "HM",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DAIF": {
    +                    "description": "DAIF",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RAM": {
    +                    "description": "RAM",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BFD": {
    +                    "description": "BFD",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PCF": {
    +                    "description": "PCF",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SAIF": {
    +                    "description": "SAIF",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SAF": {
    +                    "description": "SAF",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "HPF": {
    +                    "description": "HPF",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RA": {
    +                    "description": "RA",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACHTHR": {
    +              "description": "Ethernet MAC hash table high\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HTH": {
    +                    "description": "HTH",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MACHTLR": {
    +              "description": "Ethernet MAC hash table low\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HTL": {
    +                    "description": "HTL",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MACMIIAR": {
    +              "description": "Ethernet MAC MII address\n          register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MB": {
    +                    "description": "MB",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MW": {
    +                    "description": "MW",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CR": {
    +                    "description": "CR",
    +                    "offset": 2,
    +                    "size": 3
    +                  },
    +                  "MR": {
    +                    "description": "MR",
    +                    "offset": 6,
    +                    "size": 5
    +                  },
    +                  "PA": {
    +                    "description": "PA",
    +                    "offset": 11,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "MACMIIDR": {
    +              "description": "Ethernet MAC MII data register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TD": {
    +                    "description": "TD",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "MACFCR": {
    +              "description": "Ethernet MAC flow control\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FCB": {
    +                    "description": "FCB",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TFCE": {
    +                    "description": "TFCE",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RFCE": {
    +                    "description": "RFCE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UPFD": {
    +                    "description": "UPFD",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PLT": {
    +                    "description": "PLT",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "ZQPD": {
    +                    "description": "ZQPD",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PT": {
    +                    "description": "PT",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "MACVLANTR": {
    +              "description": "Ethernet MAC VLAN tag register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VLANTI": {
    +                    "description": "VLANTI",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "VLANTC": {
    +                    "description": "VLANTC",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACPMTCSR": {
    +              "description": "Ethernet MAC PMT control and status\n          register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PD": {
    +                    "description": "PD",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MPE": {
    +                    "description": "MPE",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "WFE": {
    +                    "description": "WFE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MPR": {
    +                    "description": "MPR",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "WFR": {
    +                    "description": "WFR",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GU": {
    +                    "description": "GU",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "WFFRPR": {
    +                    "description": "WFFRPR",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACDBGR": {
    +              "description": "Ethernet MAC debug register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CR": {
    +                    "description": "CR",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CSR": {
    +                    "description": "CSR",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ROR": {
    +                    "description": "ROR",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MCF": {
    +                    "description": "MCF",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MCP": {
    +                    "description": "MCP",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "MCFHP": {
    +                    "description": "MCFHP",
    +                    "offset": 5,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACSR": {
    +              "description": "Ethernet MAC interrupt status\n          register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PMTS": {
    +                    "description": "PMTS",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MMCS": {
    +                    "description": "MMCS",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MMCRS": {
    +                    "description": "MMCRS",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MMCTS": {
    +                    "description": "MMCTS",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TSTS": {
    +                    "description": "TSTS",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACIMR": {
    +              "description": "Ethernet MAC interrupt mask\n          register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PMTIM": {
    +                    "description": "PMTIM",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TSTIM": {
    +                    "description": "TSTIM",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACA0HR": {
    +              "description": "Ethernet MAC address 0 high\n          register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 1114111,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MACA0H": {
    +                    "description": "MAC address0 high",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "MO": {
    +                    "description": "Always 1",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "MACA0LR": {
    +              "description": "Ethernet MAC address 0 low\n          register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MACA0L": {
    +                    "description": "0",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MACA1HR": {
    +              "description": "Ethernet MAC address 1 high\n          register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 65535,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MACA1H": {
    +                    "description": "MACA1H",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "MBC": {
    +                    "description": "MBC",
    +                    "offset": 24,
    +                    "size": 6
    +                  },
    +                  "SA": {
    +                    "description": "SA",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "AE": {
    +                    "description": "AE",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACA1LR": {
    +              "description": "Ethernet MAC address1 low\n          register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MACA1LR": {
    +                    "description": "MACA1LR",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MACA2HR": {
    +              "description": "Ethernet MAC address 2 high\n          register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 65535,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MAC2AH": {
    +                    "description": "MAC2AH",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "MBC": {
    +                    "description": "MBC",
    +                    "offset": 24,
    +                    "size": 6
    +                  },
    +                  "SA": {
    +                    "description": "SA",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "AE": {
    +                    "description": "AE",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACA2LR": {
    +              "description": "Ethernet MAC address 2 low\n          register",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MACA2L": {
    +                    "description": "MACA2L",
    +                    "offset": 0,
    +                    "size": 31
    +                  }
    +                }
    +              }
    +            },
    +            "MACA3HR": {
    +              "description": "Ethernet MAC address 3 high\n          register",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 65535,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MACA3H": {
    +                    "description": "MACA3H",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "MBC": {
    +                    "description": "MBC",
    +                    "offset": 24,
    +                    "size": 6
    +                  },
    +                  "SA": {
    +                    "description": "SA",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "AE": {
    +                    "description": "AE",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACA3LR": {
    +              "description": "Ethernet MAC address 3 low\n          register",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MBCA3L": {
    +                    "description": "MBCA3L",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIM10": {
    +        "description": "General-purpose-timers",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CKD": {
    +                    "description": "Clock division",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC1IE": {
    +                    "description": "Capture/Compare 1 interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC1OF": {
    +                    "description": "Capture/Compare 1 overcapture\n              flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CC1IF": {
    +                    "description": "Capture/compare 1 interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "CC1G": {
    +                    "description": "Capture/compare 1\n              generation",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Output": {
    +              "description": "capture/compare mode register 1 (output\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OC1M": {
    +                    "description": "Output Compare 1 mode",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC1PE": {
    +                    "description": "Output Compare 1 preload\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC1FE": {
    +                    "description": "Output Compare 1 fast\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Input": {
    +              "description": "capture/compare mode register 1 (input\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC1F": {
    +                    "description": "Input capture 1 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ICPCS": {
    +                    "description": "Input capture 1 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCER": {
    +              "description": "capture/compare enable\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC1NP": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC1P": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC1E": {
    +                    "description": "Capture/Compare 1 output\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARR": {
    +                    "description": "Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR1": {
    +              "description": "capture/compare register 1",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR1": {
    +                    "description": "Capture/Compare 1 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIM11": {
    +        "description": "General-purpose-timers",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CKD": {
    +                    "description": "Clock division",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC1IE": {
    +                    "description": "Capture/Compare 1 interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC1OF": {
    +                    "description": "Capture/Compare 1 overcapture\n              flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CC1IF": {
    +                    "description": "Capture/compare 1 interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "CC1G": {
    +                    "description": "Capture/compare 1\n              generation",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Output": {
    +              "description": "capture/compare mode register 1 (output\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OC1M": {
    +                    "description": "Output Compare 1 mode",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC1PE": {
    +                    "description": "Output Compare 1 preload\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC1FE": {
    +                    "description": "Output Compare 1 fast\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Input": {
    +              "description": "capture/compare mode register 1 (input\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC1F": {
    +                    "description": "Input capture 1 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ICPCS": {
    +                    "description": "Input capture 1 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCER": {
    +              "description": "capture/compare enable\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC1NP": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC1P": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC1E": {
    +                    "description": "Capture/Compare 1 output\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARR": {
    +                    "description": "Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR1": {
    +              "description": "capture/compare register 1",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR1": {
    +                    "description": "Capture/Compare 1 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OR": {
    +              "description": "option register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RMP": {
    +                    "description": "Input 1 remapping\n              capability",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      }
    +    }
    +  },
    +  "devices": {
    +    "STM32F407": {
    +      "arch": "cortex_m4",
    +      "description": "STM32F407",
    +      "properties": {
    +        "cpu.nvic_prio_bits": "3",
    +        "cpu.mpu": "false",
    +        "cpu.fpu": "false",
    +        "cpu.revision": "r1p0",
    +        "cpu.vendor_systick_config": "false",
    +        "cpu.endian": "little",
    +        "cpu.name": "CM4"
    +      },
    +      "children": {
    +        "interrupts": {
    +          "MemManageFault": {
    +            "index": -12
    +          },
    +          "BusFault": {
    +            "index": -11
    +          },
    +          "UsageFault": {
    +            "index": -10
    +          },
    +          "DebugMonitor": {
    +            "index": -4
    +          },
    +          "NMI": {
    +            "index": -14
    +          },
    +          "HardFault": {
    +            "index": -13
    +          },
    +          "SVCall": {
    +            "index": -5
    +          },
    +          "PendSV": {
    +            "index": -2
    +          },
    +          "SysTick": {
    +            "index": -1
    +          },
    +          "FPU": {
    +            "index": 81,
    +            "description": "Floating point unit interrupt"
    +          },
    +          "DCMI": {
    +            "index": 78,
    +            "description": "DCMI global interrupt"
    +          },
    +          "FSMC": {
    +            "index": 48,
    +            "description": "FSMC global interrupt"
    +          },
    +          "DMA2_Stream0": {
    +            "index": 56,
    +            "description": "DMA2 Stream0 global interrupt"
    +          },
    +          "DMA1_Stream0": {
    +            "index": 11,
    +            "description": "DMA1 Stream0 global interrupt"
    +          },
    +          "RCC": {
    +            "index": 5,
    +            "description": "RCC global interrupt"
    +          },
    +          "SPI1": {
    +            "index": 35,
    +            "description": "SPI1 global interrupt"
    +          },
    +          "SPI2": {
    +            "index": 36,
    +            "description": "SPI2 global interrupt"
    +          },
    +          "SPI3": {
    +            "index": 51,
    +            "description": "SPI3 global interrupt"
    +          },
    +          "SDIO": {
    +            "index": 49,
    +            "description": "SDIO global interrupt"
    +          },
    +          "ADC": {
    +            "index": 18,
    +            "description": "ADC3 global interrupts"
    +          },
    +          "USART6": {
    +            "index": 71,
    +            "description": "USART6 global interrupt"
    +          },
    +          "USART1": {
    +            "index": 37,
    +            "description": "USART1 global interrupt"
    +          },
    +          "USART2": {
    +            "index": 38,
    +            "description": "USART2 global interrupt"
    +          },
    +          "USART3": {
    +            "index": 39,
    +            "description": "USART3 global interrupt"
    +          },
    +          "TIM6_DAC": {
    +            "index": 54,
    +            "description": "TIM6 global interrupt, DAC1 and DAC2 underrun\n        error interrupt"
    +          },
    +          "PVD": {
    +            "index": 1,
    +            "description": "PVD through EXTI line detection\n        interrupt"
    +          },
    +          "I2C3_EV": {
    +            "index": 72,
    +            "description": "I2C3 event interrupt"
    +          },
    +          "I2C2_EV": {
    +            "index": 33,
    +            "description": "I2C2 event interrupt"
    +          },
    +          "I2C1_EV": {
    +            "index": 31,
    +            "description": "I2C1 event interrupt"
    +          },
    +          "WWDG": {
    +            "index": 0,
    +            "description": "Window Watchdog interrupt"
    +          },
    +          "RTC_WKUP": {
    +            "index": 3,
    +            "description": "RTC Wakeup interrupt through the EXTI\n        line"
    +          },
    +          "UART4": {
    +            "index": 52,
    +            "description": "UART4 global interrupt"
    +          },
    +          "UART5": {
    +            "index": 53,
    +            "description": "UART5 global interrupt"
    +          },
    +          "TIM1_BRK_TIM9": {
    +            "index": 24,
    +            "description": "TIM1 Break interrupt and TIM9 global\n        interrupt"
    +          },
    +          "TIM8_BRK_TIM12": {
    +            "index": 43,
    +            "description": "TIM8 Break interrupt and TIM12 global\n        interrupt"
    +          },
    +          "TIM2": {
    +            "index": 28,
    +            "description": "TIM2 global interrupt"
    +          },
    +          "TIM3": {
    +            "index": 29,
    +            "description": "TIM3 global interrupt"
    +          },
    +          "TIM4": {
    +            "index": 30,
    +            "description": "TIM4 global interrupt"
    +          },
    +          "TIM5": {
    +            "index": 50,
    +            "description": "TIM5 global interrupt"
    +          },
    +          "TIM1_UP_TIM10": {
    +            "index": 25,
    +            "description": "TIM1 Update interrupt and TIM10 global\n        interrupt"
    +          },
    +          "TIM8_UP_TIM13": {
    +            "index": 44,
    +            "description": "TIM8 Update interrupt and TIM13 global\n        interrupt"
    +          },
    +          "TIM8_TRG_COM_TIM14": {
    +            "index": 45,
    +            "description": "TIM8 Trigger and Commutation interrupts and\n        TIM14 global interrupt"
    +          },
    +          "TIM1_TRG_COM_TIM11": {
    +            "index": 26,
    +            "description": "TIM1 Trigger and Commutation interrupts and\n        TIM11 global interrupt"
    +          },
    +          "TIM7": {
    +            "index": 55,
    +            "description": "TIM7 global interrupt"
    +          },
    +          "ETH": {
    +            "index": 61,
    +            "description": "Ethernet global interrupt"
    +          },
    +          "OTG_FS_WKUP": {
    +            "index": 42,
    +            "description": "USB On-The-Go FS Wakeup through EXTI line\n        interrupt"
    +          },
    +          "CAN1_TX": {
    +            "index": 19,
    +            "description": "CAN1 TX interrupts"
    +          },
    +          "CAN2_TX": {
    +            "index": 63,
    +            "description": "CAN2 TX interrupts"
    +          },
    +          "TAMP_STAMP": {
    +            "index": 2,
    +            "description": "Tamper and TimeStamp interrupts through the\n        EXTI line"
    +          },
    +          "OTG_HS_EP1_OUT": {
    +            "index": 74,
    +            "description": "USB On The Go HS End Point 1 Out global\n        interrupt"
    +          },
    +          "LCD_TFT": {
    +            "index": 88,
    +            "description": "LTDC global interrupt"
    +          },
    +          "HASH_RNG": {
    +            "index": 80,
    +            "description": "Hash and Rng global interrupt"
    +          },
    +          "CRYP": {
    +            "index": 79,
    +            "description": "CRYP crypto global interrupt"
    +          }
    +        },
    +        "peripheral_instances": {
    +          "RNG": {
    +            "description": "Random number generator",
    +            "offset": 1342572544,
    +            "type": "types.peripherals.RNG"
    +          },
    +          "DCMI": {
    +            "description": "Digital camera interface",
    +            "offset": 1342504960,
    +            "type": "types.peripherals.DCMI"
    +          },
    +          "FSMC": {
    +            "description": "Flexible static memory controller",
    +            "offset": 2684354560,
    +            "type": "types.peripherals.FSMC"
    +          },
    +          "DBG": {
    +            "description": "Debug support",
    +            "offset": 3758366720,
    +            "type": "types.peripherals.DBG"
    +          },
    +          "DMA2": {
    +            "description": "DMA controller",
    +            "offset": 1073898496,
    +            "type": "types.peripherals.DMA2"
    +          },
    +          "DMA1": {
    +            "offset": 1073897472,
    +            "type": "types.peripherals.DMA2"
    +          },
    +          "RCC": {
    +            "description": "Reset and clock control",
    +            "offset": 1073887232,
    +            "type": "types.peripherals.RCC"
    +          },
    +          "GPIOI": {
    +            "description": "General-purpose I/Os",
    +            "offset": 1073881088,
    +            "type": "types.peripherals.GPIOI"
    +          },
    +          "GPIOH": {
    +            "offset": 1073880064,
    +            "type": "types.peripherals.GPIOI"
    +          },
    +          "GPIOG": {
    +            "offset": 1073879040,
    +            "type": "types.peripherals.GPIOI"
    +          },
    +          "GPIOF": {
    +            "offset": 1073878016,
    +            "type": "types.peripherals.GPIOI"
    +          },
    +          "GPIOE": {
    +            "offset": 1073876992,
    +            "type": "types.peripherals.GPIOI"
    +          },
    +          "GPIOD": {
    +            "offset": 1073875968,
    +            "type": "types.peripherals.GPIOI"
    +          },
    +          "GPIOC": {
    +            "offset": 1073874944,
    +            "type": "types.peripherals.GPIOI"
    +          },
    +          "GPIOJ": {
    +            "offset": 1073882112,
    +            "type": "types.peripherals.GPIOI"
    +          },
    +          "GPIOK": {
    +            "offset": 1073883136,
    +            "type": "types.peripherals.GPIOI"
    +          },
    +          "GPIOB": {
    +            "description": "General-purpose I/Os",
    +            "offset": 1073873920,
    +            "type": "types.peripherals.GPIOB"
    +          },
    +          "GPIOA": {
    +            "description": "General-purpose I/Os",
    +            "offset": 1073872896,
    +            "type": "types.peripherals.GPIOA"
    +          },
    +          "SYSCFG": {
    +            "description": "System configuration controller",
    +            "offset": 1073821696,
    +            "type": "types.peripherals.SYSCFG"
    +          },
    +          "SPI1": {
    +            "description": "Serial peripheral interface",
    +            "offset": 1073819648,
    +            "type": "types.peripherals.SPI1"
    +          },
    +          "SPI2": {
    +            "offset": 1073756160,
    +            "type": "types.peripherals.SPI1"
    +          },
    +          "SPI3": {
    +            "offset": 1073757184,
    +            "type": "types.peripherals.SPI1"
    +          },
    +          "I2S2ext": {
    +            "offset": 1073755136,
    +            "type": "types.peripherals.SPI1"
    +          },
    +          "I2S3ext": {
    +            "offset": 1073758208,
    +            "type": "types.peripherals.SPI1"
    +          },
    +          "SPI4": {
    +            "offset": 1073820672,
    +            "type": "types.peripherals.SPI1"
    +          },
    +          "SPI5": {
    +            "offset": 1073827840,
    +            "type": "types.peripherals.SPI1"
    +          },
    +          "SPI6": {
    +            "offset": 1073828864,
    +            "type": "types.peripherals.SPI1"
    +          },
    +          "SDIO": {
    +            "description": "Secure digital input/output\n      interface",
    +            "offset": 1073818624,
    +            "type": "types.peripherals.SDIO"
    +          },
    +          "ADC1": {
    +            "description": "Analog-to-digital converter",
    +            "offset": 1073815552,
    +            "type": "types.peripherals.ADC1"
    +          },
    +          "ADC2": {
    +            "offset": 1073815808,
    +            "type": "types.peripherals.ADC1"
    +          },
    +          "ADC3": {
    +            "offset": 1073816064,
    +            "type": "types.peripherals.ADC1"
    +          },
    +          "USART6": {
    +            "description": "Universal synchronous asynchronous receiver\n      transmitter",
    +            "offset": 1073812480,
    +            "type": "types.peripherals.USART6"
    +          },
    +          "USART1": {
    +            "offset": 1073811456,
    +            "type": "types.peripherals.USART6"
    +          },
    +          "USART2": {
    +            "offset": 1073759232,
    +            "type": "types.peripherals.USART6"
    +          },
    +          "USART3": {
    +            "offset": 1073760256,
    +            "type": "types.peripherals.USART6"
    +          },
    +          "DAC": {
    +            "description": "Digital-to-analog converter",
    +            "offset": 1073771520,
    +            "type": "types.peripherals.DAC"
    +          },
    +          "PWR": {
    +            "description": "Power control",
    +            "offset": 1073770496,
    +            "type": "types.peripherals.PWR"
    +          },
    +          "I2C3": {
    +            "description": "Inter-integrated circuit",
    +            "offset": 1073765376,
    +            "type": "types.peripherals.I2C3"
    +          },
    +          "I2C2": {
    +            "offset": 1073764352,
    +            "type": "types.peripherals.I2C3"
    +          },
    +          "I2C1": {
    +            "offset": 1073763328,
    +            "type": "types.peripherals.I2C3"
    +          },
    +          "IWDG": {
    +            "description": "Independent watchdog",
    +            "offset": 1073754112,
    +            "type": "types.peripherals.IWDG"
    +          },
    +          "WWDG": {
    +            "description": "Window watchdog",
    +            "offset": 1073753088,
    +            "type": "types.peripherals.WWDG"
    +          },
    +          "RTC": {
    +            "description": "Real-time clock",
    +            "offset": 1073752064,
    +            "type": "types.peripherals.RTC"
    +          },
    +          "UART4": {
    +            "description": "Universal synchronous asynchronous receiver\n      transmitter",
    +            "offset": 1073761280,
    +            "type": "types.peripherals.UART4"
    +          },
    +          "UART5": {
    +            "offset": 1073762304,
    +            "type": "types.peripherals.UART4"
    +          },
    +          "UART7": {
    +            "offset": 1073772544,
    +            "type": "types.peripherals.UART4"
    +          },
    +          "UART8": {
    +            "offset": 1073773568,
    +            "type": "types.peripherals.UART4"
    +          },
    +          "C_ADC": {
    +            "description": "Common ADC registers",
    +            "offset": 1073816320,
    +            "type": "types.peripherals.C_ADC"
    +          },
    +          "TIM1": {
    +            "description": "Advanced-timers",
    +            "offset": 1073807360,
    +            "type": "types.peripherals.TIM1"
    +          },
    +          "TIM8": {
    +            "offset": 1073808384,
    +            "type": "types.peripherals.TIM1"
    +          },
    +          "TIM2": {
    +            "description": "General purpose timers",
    +            "offset": 1073741824,
    +            "type": "types.peripherals.TIM2"
    +          },
    +          "TIM3": {
    +            "description": "General purpose timers",
    +            "offset": 1073742848,
    +            "type": "types.peripherals.TIM3"
    +          },
    +          "TIM4": {
    +            "offset": 1073743872,
    +            "type": "types.peripherals.TIM3"
    +          },
    +          "TIM5": {
    +            "description": "General-purpose-timers",
    +            "offset": 1073744896,
    +            "type": "types.peripherals.TIM5"
    +          },
    +          "TIM9": {
    +            "description": "General purpose timers",
    +            "offset": 1073823744,
    +            "type": "types.peripherals.TIM9"
    +          },
    +          "TIM12": {
    +            "offset": 1073747968,
    +            "type": "types.peripherals.TIM9"
    +          },
    +          "TIM10": {
    +            "description": "General-purpose-timers",
    +            "offset": 1073824768,
    +            "type": "types.peripherals.TIM10"
    +          },
    +          "TIM13": {
    +            "offset": 1073748992,
    +            "type": "types.peripherals.TIM10"
    +          },
    +          "TIM14": {
    +            "offset": 1073750016,
    +            "type": "types.peripherals.TIM10"
    +          },
    +          "TIM11": {
    +            "description": "General-purpose-timers",
    +            "offset": 1073825792,
    +            "type": "types.peripherals.TIM11"
    +          },
    +          "TIM6": {
    +            "description": "Basic timers",
    +            "offset": 1073745920,
    +            "type": "types.peripherals.TIM6"
    +          },
    +          "TIM7": {
    +            "offset": 1073746944,
    +            "type": "types.peripherals.TIM6"
    +          },
    +          "Ethernet_MAC": {
    +            "description": "Ethernet: media access control\n      (MAC)",
    +            "offset": 1073905664,
    +            "type": "types.peripherals.Ethernet_MAC"
    +          },
    +          "Ethernet_MMC": {
    +            "description": "Ethernet: MAC management counters",
    +            "offset": 1073905920,
    +            "type": "types.peripherals.Ethernet_MMC"
    +          },
    +          "Ethernet_PTP": {
    +            "description": "Ethernet: Precision time protocol",
    +            "offset": 1073907456,
    +            "type": "types.peripherals.Ethernet_PTP"
    +          },
    +          "Ethernet_DMA": {
    +            "description": "Ethernet: DMA controller operation",
    +            "offset": 1073909760,
    +            "type": "types.peripherals.Ethernet_DMA"
    +          },
    +          "CRC": {
    +            "description": "Cryptographic processor",
    +            "offset": 1073885184,
    +            "type": "types.peripherals.CRC"
    +          },
    +          "OTG_FS_GLOBAL": {
    +            "description": "USB on the go full speed",
    +            "offset": 1342177280,
    +            "type": "types.peripherals.OTG_FS_GLOBAL"
    +          },
    +          "OTG_FS_HOST": {
    +            "description": "USB on the go full speed",
    +            "offset": 1342178304,
    +            "type": "types.peripherals.OTG_FS_HOST"
    +          },
    +          "OTG_FS_DEVICE": {
    +            "description": "USB on the go full speed",
    +            "offset": 1342179328,
    +            "type": "types.peripherals.OTG_FS_DEVICE"
    +          },
    +          "OTG_FS_PWRCLK": {
    +            "description": "USB on the go full speed",
    +            "offset": 1342180864,
    +            "type": "types.peripherals.OTG_FS_PWRCLK"
    +          },
    +          "CAN1": {
    +            "description": "Controller area network",
    +            "offset": 1073767424,
    +            "type": "types.peripherals.CAN1"
    +          },
    +          "CAN2": {
    +            "offset": 1073768448,
    +            "type": "types.peripherals.CAN1"
    +          },
    +          "FLASH": {
    +            "description": "FLASH",
    +            "offset": 1073888256,
    +            "type": "types.peripherals.FLASH"
    +          },
    +          "EXTI": {
    +            "description": "External interrupt/event\n      controller",
    +            "offset": 1073822720,
    +            "type": "types.peripherals.EXTI"
    +          },
    +          "OTG_HS_GLOBAL": {
    +            "description": "USB on the go high speed",
    +            "offset": 1074003968,
    +            "type": "types.peripherals.OTG_HS_GLOBAL"
    +          },
    +          "OTG_HS_HOST": {
    +            "description": "USB on the go high speed",
    +            "offset": 1074004992,
    +            "type": "types.peripherals.OTG_HS_HOST"
    +          },
    +          "OTG_HS_DEVICE": {
    +            "description": "USB on the go high speed",
    +            "offset": 1074006016,
    +            "type": "types.peripherals.OTG_HS_DEVICE"
    +          },
    +          "OTG_HS_PWRCLK": {
    +            "description": "USB on the go high speed",
    +            "offset": 1074007552,
    +            "type": "types.peripherals.OTG_HS_PWRCLK"
    +          },
    +          "NVIC": {
    +            "description": "Nested Vectored Interrupt\n      Controller",
    +            "offset": 3758153984,
    +            "type": "types.peripherals.NVIC"
    +          },
    +          "SAI1": {
    +            "description": "Serial audio interface",
    +            "offset": 1073829888,
    +            "type": "types.peripherals.SAI1"
    +          },
    +          "LTDC": {
    +            "description": "LCD-TFT Controller",
    +            "offset": 1073833984,
    +            "type": "types.peripherals.LTDC"
    +          },
    +          "HASH": {
    +            "description": "Hash processor",
    +            "offset": 1342571520,
    +            "type": "types.peripherals.HASH"
    +          },
    +          "CRYP": {
    +            "description": "Cryptographic processor",
    +            "offset": 1342570496,
    +            "type": "types.peripherals.CRYP"
    +          },
    +          "FPU": {
    +            "description": "Floting point unit",
    +            "offset": 3758157620,
    +            "type": "types.peripherals.FPU"
    +          },
    +          "MPU": {
    +            "description": "Memory protection unit",
    +            "offset": 3758157200,
    +            "type": "types.peripherals.MPU"
    +          },
    +          "STK": {
    +            "description": "SysTick timer",
    +            "offset": 3758153744,
    +            "type": "types.peripherals.STK"
    +          },
    +          "SCB": {
    +            "description": "System control block",
    +            "offset": 3758157056,
    +            "type": "types.peripherals.SCB"
    +          },
    +          "NVIC_STIR": {
    +            "description": "Nested vectored interrupt\n      controller",
    +            "offset": 3758157568,
    +            "type": "types.peripherals.NVIC_STIR"
    +          },
    +          "FPU_CPACR": {
    +            "description": "Floating point unit CPACR",
    +            "offset": 3758157192,
    +            "type": "types.peripherals.FPU_CPACR"
    +          },
    +          "SCB_ACTRL": {
    +            "description": "System control block ACTLR",
    +            "offset": 3758153736,
    +            "type": "types.peripherals.SCB_ACTRL"
    +          }
    +        }
    +      }
    +    }
    +  }
    +}
    \ No newline at end of file
    diff --git a/src/chips/STM32F407.zig b/src/chips/STM32F407.zig
    new file mode 100644
    index 000000000..bf7ea6912
    --- /dev/null
    +++ b/src/chips/STM32F407.zig
    @@ -0,0 +1,20004 @@
    +const micro = @import("microzig");
    +const mmio = micro.mmio;
    +
    +pub const devices = struct {
    +    ///  STM32F407
    +    pub const STM32F407 = struct {
    +        pub const properties = struct {
    +            pub const @"cpu.nvic_prio_bits" = "3";
    +            pub const @"cpu.mpu" = "false";
    +            pub const @"cpu.fpu" = "false";
    +            pub const @"cpu.revision" = "r1p0";
    +            pub const @"cpu.vendor_systick_config" = "false";
    +            pub const @"cpu.endian" = "little";
    +            pub const @"cpu.name" = "CM4";
    +        };
    +
    +        pub const VectorTable = extern struct {
    +            const Handler = micro.interrupt.Handler;
    +            const unhandled = micro.interrupt.unhandled;
    +
    +            initial_stack_pointer: u32,
    +            Reset: Handler = unhandled,
    +            NMI: Handler = unhandled,
    +            HardFault: Handler = unhandled,
    +            MemManageFault: Handler = unhandled,
    +            BusFault: Handler = unhandled,
    +            UsageFault: Handler = unhandled,
    +            reserved5: [4]u32 = undefined,
    +            SVCall: Handler = unhandled,
    +            DebugMonitor: Handler = unhandled,
    +            reserved11: [1]u32 = undefined,
    +            PendSV: Handler = unhandled,
    +            SysTick: Handler = unhandled,
    +            ///  Window Watchdog interrupt
    +            WWDG: Handler = unhandled,
    +            ///  PVD through EXTI line detection interrupt
    +            PVD: Handler = unhandled,
    +            ///  Tamper and TimeStamp interrupts through the EXTI line
    +            TAMP_STAMP: Handler = unhandled,
    +            ///  RTC Wakeup interrupt through the EXTI line
    +            RTC_WKUP: Handler = unhandled,
    +            reserved18: [1]u32 = undefined,
    +            ///  RCC global interrupt
    +            RCC: Handler = unhandled,
    +            reserved20: [5]u32 = undefined,
    +            ///  DMA1 Stream0 global interrupt
    +            DMA1_Stream0: Handler = unhandled,
    +            reserved26: [6]u32 = undefined,
    +            ///  ADC1 global interrupt
    +            ADC: Handler = unhandled,
    +            ///  CAN1 TX interrupts
    +            CAN1_TX: Handler = unhandled,
    +            reserved34: [4]u32 = undefined,
    +            ///  TIM1 Break interrupt and TIM9 global interrupt
    +            TIM1_BRK_TIM9: Handler = unhandled,
    +            ///  TIM1 Update interrupt and TIM10 global interrupt
    +            TIM1_UP_TIM10: Handler = unhandled,
    +            ///  TIM1 Trigger and Commutation interrupts and TIM11 global interrupt
    +            TIM1_TRG_COM_TIM11: Handler = unhandled,
    +            reserved41: [1]u32 = undefined,
    +            ///  TIM2 global interrupt
    +            TIM2: Handler = unhandled,
    +            ///  TIM3 global interrupt
    +            TIM3: Handler = unhandled,
    +            ///  TIM4 global interrupt
    +            TIM4: Handler = unhandled,
    +            ///  I2C1 event interrupt
    +            I2C1_EV: Handler = unhandled,
    +            reserved46: [1]u32 = undefined,
    +            ///  I2C2 event interrupt
    +            I2C2_EV: Handler = unhandled,
    +            reserved48: [1]u32 = undefined,
    +            ///  SPI1 global interrupt
    +            SPI1: Handler = unhandled,
    +            ///  SPI2 global interrupt
    +            SPI2: Handler = unhandled,
    +            ///  USART1 global interrupt
    +            USART1: Handler = unhandled,
    +            ///  USART2 global interrupt
    +            USART2: Handler = unhandled,
    +            ///  USART3 global interrupt
    +            USART3: Handler = unhandled,
    +            reserved54: [2]u32 = undefined,
    +            ///  USB On-The-Go FS Wakeup through EXTI line interrupt
    +            OTG_FS_WKUP: Handler = unhandled,
    +            ///  TIM8 Break interrupt and TIM12 global interrupt
    +            TIM8_BRK_TIM12: Handler = unhandled,
    +            ///  TIM8 Update interrupt and TIM13 global interrupt
    +            TIM8_UP_TIM13: Handler = unhandled,
    +            ///  TIM8 Trigger and Commutation interrupts and TIM14 global interrupt
    +            TIM8_TRG_COM_TIM14: Handler = unhandled,
    +            reserved60: [2]u32 = undefined,
    +            ///  FSMC global interrupt
    +            FSMC: Handler = unhandled,
    +            ///  SDIO global interrupt
    +            SDIO: Handler = unhandled,
    +            ///  TIM5 global interrupt
    +            TIM5: Handler = unhandled,
    +            ///  SPI3 global interrupt
    +            SPI3: Handler = unhandled,
    +            ///  UART4 global interrupt
    +            UART4: Handler = unhandled,
    +            ///  UART5 global interrupt
    +            UART5: Handler = unhandled,
    +            ///  TIM6 global interrupt, DAC1 and DAC2 underrun error interrupt
    +            TIM6_DAC: Handler = unhandled,
    +            ///  TIM7 global interrupt
    +            TIM7: Handler = unhandled,
    +            ///  DMA2 Stream0 global interrupt
    +            DMA2_Stream0: Handler = unhandled,
    +            reserved71: [4]u32 = undefined,
    +            ///  Ethernet global interrupt
    +            ETH: Handler = unhandled,
    +            reserved76: [1]u32 = undefined,
    +            ///  CAN2 TX interrupts
    +            CAN2_TX: Handler = unhandled,
    +            reserved78: [7]u32 = undefined,
    +            ///  USART6 global interrupt
    +            USART6: Handler = unhandled,
    +            ///  I2C3 event interrupt
    +            I2C3_EV: Handler = unhandled,
    +            reserved87: [1]u32 = undefined,
    +            ///  USB On The Go HS End Point 1 Out global interrupt
    +            OTG_HS_EP1_OUT: Handler = unhandled,
    +            reserved89: [3]u32 = undefined,
    +            ///  DCMI global interrupt
    +            DCMI: Handler = unhandled,
    +            ///  CRYP crypto global interrupt
    +            CRYP: Handler = unhandled,
    +            ///  Hash and Rng global interrupt
    +            HASH_RNG: Handler = unhandled,
    +            ///  FPU interrupt
    +            FPU: Handler = unhandled,
    +            reserved96: [6]u32 = undefined,
    +            ///  LTDC global interrupt
    +            LCD_TFT: Handler = unhandled,
    +        };
    +
    +        pub const peripherals = struct {
    +            ///  General purpose timers
    +            pub const TIM2 = @ptrCast(*volatile types.TIM2, 0x40000000);
    +            ///  General purpose timers
    +            pub const TIM3 = @ptrCast(*volatile types.TIM3, 0x40000400);
    +            ///  General purpose timers
    +            pub const TIM4 = @ptrCast(*volatile types.TIM3, 0x40000800);
    +            ///  General-purpose-timers
    +            pub const TIM5 = @ptrCast(*volatile types.TIM5, 0x40000c00);
    +            ///  Basic timers
    +            pub const TIM6 = @ptrCast(*volatile types.TIM6, 0x40001000);
    +            ///  Basic timers
    +            pub const TIM7 = @ptrCast(*volatile types.TIM6, 0x40001400);
    +            ///  General purpose timers
    +            pub const TIM12 = @ptrCast(*volatile types.TIM9, 0x40001800);
    +            ///  General-purpose-timers
    +            pub const TIM13 = @ptrCast(*volatile types.TIM10, 0x40001c00);
    +            ///  General-purpose-timers
    +            pub const TIM14 = @ptrCast(*volatile types.TIM10, 0x40002000);
    +            ///  Real-time clock
    +            pub const RTC = @ptrCast(*volatile types.RTC, 0x40002800);
    +            ///  Window watchdog
    +            pub const WWDG = @ptrCast(*volatile types.WWDG, 0x40002c00);
    +            ///  Independent watchdog
    +            pub const IWDG = @ptrCast(*volatile types.IWDG, 0x40003000);
    +            ///  Serial peripheral interface
    +            pub const I2S2ext = @ptrCast(*volatile types.SPI1, 0x40003400);
    +            ///  Serial peripheral interface
    +            pub const SPI2 = @ptrCast(*volatile types.SPI1, 0x40003800);
    +            ///  Serial peripheral interface
    +            pub const SPI3 = @ptrCast(*volatile types.SPI1, 0x40003c00);
    +            ///  Serial peripheral interface
    +            pub const I2S3ext = @ptrCast(*volatile types.SPI1, 0x40004000);
    +            ///  Universal synchronous asynchronous receiver transmitter
    +            pub const USART2 = @ptrCast(*volatile types.USART6, 0x40004400);
    +            ///  Universal synchronous asynchronous receiver transmitter
    +            pub const USART3 = @ptrCast(*volatile types.USART6, 0x40004800);
    +            ///  Universal synchronous asynchronous receiver transmitter
    +            pub const UART4 = @ptrCast(*volatile types.UART4, 0x40004c00);
    +            ///  Universal synchronous asynchronous receiver transmitter
    +            pub const UART5 = @ptrCast(*volatile types.UART4, 0x40005000);
    +            ///  Inter-integrated circuit
    +            pub const I2C1 = @ptrCast(*volatile types.I2C3, 0x40005400);
    +            ///  Inter-integrated circuit
    +            pub const I2C2 = @ptrCast(*volatile types.I2C3, 0x40005800);
    +            ///  Inter-integrated circuit
    +            pub const I2C3 = @ptrCast(*volatile types.I2C3, 0x40005c00);
    +            ///  Controller area network
    +            pub const CAN1 = @ptrCast(*volatile types.CAN1, 0x40006400);
    +            ///  Controller area network
    +            pub const CAN2 = @ptrCast(*volatile types.CAN1, 0x40006800);
    +            ///  Power control
    +            pub const PWR = @ptrCast(*volatile types.PWR, 0x40007000);
    +            ///  Digital-to-analog converter
    +            pub const DAC = @ptrCast(*volatile types.DAC, 0x40007400);
    +            ///  Universal synchronous asynchronous receiver transmitter
    +            pub const UART7 = @ptrCast(*volatile types.UART4, 0x40007800);
    +            ///  Universal synchronous asynchronous receiver transmitter
    +            pub const UART8 = @ptrCast(*volatile types.UART4, 0x40007c00);
    +            ///  Advanced-timers
    +            pub const TIM1 = @ptrCast(*volatile types.TIM1, 0x40010000);
    +            ///  Advanced-timers
    +            pub const TIM8 = @ptrCast(*volatile types.TIM1, 0x40010400);
    +            ///  Universal synchronous asynchronous receiver transmitter
    +            pub const USART1 = @ptrCast(*volatile types.USART6, 0x40011000);
    +            ///  Universal synchronous asynchronous receiver transmitter
    +            pub const USART6 = @ptrCast(*volatile types.USART6, 0x40011400);
    +            ///  Analog-to-digital converter
    +            pub const ADC1 = @ptrCast(*volatile types.ADC1, 0x40012000);
    +            ///  Analog-to-digital converter
    +            pub const ADC2 = @ptrCast(*volatile types.ADC1, 0x40012100);
    +            ///  Analog-to-digital converter
    +            pub const ADC3 = @ptrCast(*volatile types.ADC1, 0x40012200);
    +            ///  Common ADC registers
    +            pub const C_ADC = @ptrCast(*volatile types.C_ADC, 0x40012300);
    +            ///  Secure digital input/output interface
    +            pub const SDIO = @ptrCast(*volatile types.SDIO, 0x40012c00);
    +            ///  Serial peripheral interface
    +            pub const SPI1 = @ptrCast(*volatile types.SPI1, 0x40013000);
    +            ///  Serial peripheral interface
    +            pub const SPI4 = @ptrCast(*volatile types.SPI1, 0x40013400);
    +            ///  System configuration controller
    +            pub const SYSCFG = @ptrCast(*volatile types.SYSCFG, 0x40013800);
    +            ///  External interrupt/event controller
    +            pub const EXTI = @ptrCast(*volatile types.EXTI, 0x40013c00);
    +            ///  General purpose timers
    +            pub const TIM9 = @ptrCast(*volatile types.TIM9, 0x40014000);
    +            ///  General-purpose-timers
    +            pub const TIM10 = @ptrCast(*volatile types.TIM10, 0x40014400);
    +            ///  General-purpose-timers
    +            pub const TIM11 = @ptrCast(*volatile types.TIM11, 0x40014800);
    +            ///  Serial peripheral interface
    +            pub const SPI5 = @ptrCast(*volatile types.SPI1, 0x40015000);
    +            ///  Serial peripheral interface
    +            pub const SPI6 = @ptrCast(*volatile types.SPI1, 0x40015400);
    +            ///  Serial audio interface
    +            pub const SAI1 = @ptrCast(*volatile types.SAI1, 0x40015800);
    +            ///  LCD-TFT Controller
    +            pub const LTDC = @ptrCast(*volatile types.LTDC, 0x40016800);
    +            ///  General-purpose I/Os
    +            pub const GPIOA = @ptrCast(*volatile types.GPIOA, 0x40020000);
    +            ///  General-purpose I/Os
    +            pub const GPIOB = @ptrCast(*volatile types.GPIOB, 0x40020400);
    +            ///  General-purpose I/Os
    +            pub const GPIOC = @ptrCast(*volatile types.GPIOI, 0x40020800);
    +            ///  General-purpose I/Os
    +            pub const GPIOD = @ptrCast(*volatile types.GPIOI, 0x40020c00);
    +            ///  General-purpose I/Os
    +            pub const GPIOE = @ptrCast(*volatile types.GPIOI, 0x40021000);
    +            ///  General-purpose I/Os
    +            pub const GPIOF = @ptrCast(*volatile types.GPIOI, 0x40021400);
    +            ///  General-purpose I/Os
    +            pub const GPIOG = @ptrCast(*volatile types.GPIOI, 0x40021800);
    +            ///  General-purpose I/Os
    +            pub const GPIOH = @ptrCast(*volatile types.GPIOI, 0x40021c00);
    +            ///  General-purpose I/Os
    +            pub const GPIOI = @ptrCast(*volatile types.GPIOI, 0x40022000);
    +            ///  General-purpose I/Os
    +            pub const GPIOJ = @ptrCast(*volatile types.GPIOI, 0x40022400);
    +            ///  General-purpose I/Os
    +            pub const GPIOK = @ptrCast(*volatile types.GPIOI, 0x40022800);
    +            ///  Cryptographic processor
    +            pub const CRC = @ptrCast(*volatile types.CRC, 0x40023000);
    +            ///  Reset and clock control
    +            pub const RCC = @ptrCast(*volatile types.RCC, 0x40023800);
    +            ///  FLASH
    +            pub const FLASH = @ptrCast(*volatile types.FLASH, 0x40023c00);
    +            ///  DMA controller
    +            pub const DMA1 = @ptrCast(*volatile types.DMA2, 0x40026000);
    +            ///  DMA controller
    +            pub const DMA2 = @ptrCast(*volatile types.DMA2, 0x40026400);
    +            ///  Ethernet: media access control (MAC)
    +            pub const Ethernet_MAC = @ptrCast(*volatile types.Ethernet_MAC, 0x40028000);
    +            ///  Ethernet: MAC management counters
    +            pub const Ethernet_MMC = @ptrCast(*volatile types.Ethernet_MMC, 0x40028100);
    +            ///  Ethernet: Precision time protocol
    +            pub const Ethernet_PTP = @ptrCast(*volatile types.Ethernet_PTP, 0x40028700);
    +            ///  Ethernet: DMA controller operation
    +            pub const Ethernet_DMA = @ptrCast(*volatile types.Ethernet_DMA, 0x40029000);
    +            ///  USB on the go high speed
    +            pub const OTG_HS_GLOBAL = @ptrCast(*volatile types.OTG_HS_GLOBAL, 0x40040000);
    +            ///  USB on the go high speed
    +            pub const OTG_HS_HOST = @ptrCast(*volatile types.OTG_HS_HOST, 0x40040400);
    +            ///  USB on the go high speed
    +            pub const OTG_HS_DEVICE = @ptrCast(*volatile types.OTG_HS_DEVICE, 0x40040800);
    +            ///  USB on the go high speed
    +            pub const OTG_HS_PWRCLK = @ptrCast(*volatile types.OTG_HS_PWRCLK, 0x40040e00);
    +            ///  USB on the go full speed
    +            pub const OTG_FS_GLOBAL = @ptrCast(*volatile types.OTG_FS_GLOBAL, 0x50000000);
    +            ///  USB on the go full speed
    +            pub const OTG_FS_HOST = @ptrCast(*volatile types.OTG_FS_HOST, 0x50000400);
    +            ///  USB on the go full speed
    +            pub const OTG_FS_DEVICE = @ptrCast(*volatile types.OTG_FS_DEVICE, 0x50000800);
    +            ///  USB on the go full speed
    +            pub const OTG_FS_PWRCLK = @ptrCast(*volatile types.OTG_FS_PWRCLK, 0x50000e00);
    +            ///  Digital camera interface
    +            pub const DCMI = @ptrCast(*volatile types.DCMI, 0x50050000);
    +            ///  Cryptographic processor
    +            pub const CRYP = @ptrCast(*volatile types.CRYP, 0x50060000);
    +            ///  Hash processor
    +            pub const HASH = @ptrCast(*volatile types.HASH, 0x50060400);
    +            ///  Random number generator
    +            pub const RNG = @ptrCast(*volatile types.RNG, 0x50060800);
    +            ///  Flexible static memory controller
    +            pub const FSMC = @ptrCast(*volatile types.FSMC, 0xa0000000);
    +            ///  System control block ACTLR
    +            pub const SCB_ACTRL = @ptrCast(*volatile types.SCB_ACTRL, 0xe000e008);
    +            ///  SysTick timer
    +            pub const STK = @ptrCast(*volatile types.STK, 0xe000e010);
    +            ///  Nested Vectored Interrupt Controller
    +            pub const NVIC = @ptrCast(*volatile types.NVIC, 0xe000e100);
    +            ///  System control block
    +            pub const SCB = @ptrCast(*volatile types.SCB, 0xe000ed00);
    +            ///  Floating point unit CPACR
    +            pub const FPU_CPACR = @ptrCast(*volatile types.FPU_CPACR, 0xe000ed88);
    +            ///  Memory protection unit
    +            pub const MPU = @ptrCast(*volatile types.MPU, 0xe000ed90);
    +            ///  Nested vectored interrupt controller
    +            pub const NVIC_STIR = @ptrCast(*volatile types.NVIC_STIR, 0xe000ef00);
    +            ///  Floting point unit
    +            pub const FPU = @ptrCast(*volatile types.FPU, 0xe000ef34);
    +            ///  Debug support
    +            pub const DBG = @ptrCast(*volatile types.DBG, 0xe0042000);
    +        };
    +    };
    +};
    +
    +pub const types = struct {
    +    ///  Random number generator
    +    pub const RNG = extern struct {
    +        ///  control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            reserved2: u2,
    +            ///  Random number generator enable
    +            RNGEN: u1,
    +            ///  Interrupt enable
    +            IE: u1,
    +            padding: u28,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Data ready
    +            DRDY: u1,
    +            ///  Clock error current status
    +            CECS: u1,
    +            ///  Seed error current status
    +            SECS: u1,
    +            reserved5: u2,
    +            ///  Clock error interrupt status
    +            CEIS: u1,
    +            ///  Seed error interrupt status
    +            SEIS: u1,
    +            padding: u25,
    +        }),
    +        ///  data register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  Random data
    +            RNDATA: u32,
    +        }),
    +    };
    +
    +    ///  Digital camera interface
    +    pub const DCMI = extern struct {
    +        ///  control register 1
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  Capture enable
    +            CAPTURE: u1,
    +            ///  Capture mode
    +            CM: u1,
    +            ///  Crop feature
    +            CROP: u1,
    +            ///  JPEG format
    +            JPEG: u1,
    +            ///  Embedded synchronization select
    +            ESS: u1,
    +            ///  Pixel clock polarity
    +            PCKPOL: u1,
    +            ///  Horizontal synchronization polarity
    +            HSPOL: u1,
    +            ///  Vertical synchronization polarity
    +            VSPOL: u1,
    +            ///  Frame capture rate control
    +            FCRC: u2,
    +            ///  Extended data mode
    +            EDM: u2,
    +            reserved14: u2,
    +            ///  DCMI enable
    +            ENABLE: u1,
    +            padding: u17,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  HSYNC
    +            HSYNC: u1,
    +            ///  VSYNC
    +            VSYNC: u1,
    +            ///  FIFO not empty
    +            FNE: u1,
    +            padding: u29,
    +        }),
    +        ///  raw interrupt status register
    +        RIS: mmio.Mmio(packed struct(u32) {
    +            ///  Capture complete raw interrupt status
    +            FRAME_RIS: u1,
    +            ///  Overrun raw interrupt status
    +            OVR_RIS: u1,
    +            ///  Synchronization error raw interrupt status
    +            ERR_RIS: u1,
    +            ///  VSYNC raw interrupt status
    +            VSYNC_RIS: u1,
    +            ///  Line raw interrupt status
    +            LINE_RIS: u1,
    +            padding: u27,
    +        }),
    +        ///  interrupt enable register
    +        IER: mmio.Mmio(packed struct(u32) {
    +            ///  Capture complete interrupt enable
    +            FRAME_IE: u1,
    +            ///  Overrun interrupt enable
    +            OVR_IE: u1,
    +            ///  Synchronization error interrupt enable
    +            ERR_IE: u1,
    +            ///  VSYNC interrupt enable
    +            VSYNC_IE: u1,
    +            ///  Line interrupt enable
    +            LINE_IE: u1,
    +            padding: u27,
    +        }),
    +        ///  masked interrupt status register
    +        MIS: mmio.Mmio(packed struct(u32) {
    +            ///  Capture complete masked interrupt status
    +            FRAME_MIS: u1,
    +            ///  Overrun masked interrupt status
    +            OVR_MIS: u1,
    +            ///  Synchronization error masked interrupt status
    +            ERR_MIS: u1,
    +            ///  VSYNC masked interrupt status
    +            VSYNC_MIS: u1,
    +            ///  Line masked interrupt status
    +            LINE_MIS: u1,
    +            padding: u27,
    +        }),
    +        ///  interrupt clear register
    +        ICR: mmio.Mmio(packed struct(u32) {
    +            ///  Capture complete interrupt status clear
    +            FRAME_ISC: u1,
    +            ///  Overrun interrupt status clear
    +            OVR_ISC: u1,
    +            ///  Synchronization error interrupt status clear
    +            ERR_ISC: u1,
    +            ///  Vertical synch interrupt status clear
    +            VSYNC_ISC: u1,
    +            ///  line interrupt status clear
    +            LINE_ISC: u1,
    +            padding: u27,
    +        }),
    +        ///  embedded synchronization code register
    +        ESCR: mmio.Mmio(packed struct(u32) {
    +            ///  Frame start delimiter code
    +            FSC: u8,
    +            ///  Line start delimiter code
    +            LSC: u8,
    +            ///  Line end delimiter code
    +            LEC: u8,
    +            ///  Frame end delimiter code
    +            FEC: u8,
    +        }),
    +        ///  embedded synchronization unmask register
    +        ESUR: mmio.Mmio(packed struct(u32) {
    +            ///  Frame start delimiter unmask
    +            FSU: u8,
    +            ///  Line start delimiter unmask
    +            LSU: u8,
    +            ///  Line end delimiter unmask
    +            LEU: u8,
    +            ///  Frame end delimiter unmask
    +            FEU: u8,
    +        }),
    +        ///  crop window start
    +        CWSTRT: mmio.Mmio(packed struct(u32) {
    +            ///  Horizontal offset count
    +            HOFFCNT: u14,
    +            reserved16: u2,
    +            ///  Vertical start line count
    +            VST: u13,
    +            padding: u3,
    +        }),
    +        ///  crop window size
    +        CWSIZE: mmio.Mmio(packed struct(u32) {
    +            ///  Capture count
    +            CAPCNT: u14,
    +            reserved16: u2,
    +            ///  Vertical line count
    +            VLINE: u14,
    +            padding: u2,
    +        }),
    +        ///  data register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  Data byte 0
    +            Byte0: u8,
    +            ///  Data byte 1
    +            Byte1: u8,
    +            ///  Data byte 2
    +            Byte2: u8,
    +            ///  Data byte 3
    +            Byte3: u8,
    +        }),
    +    };
    +
    +    ///  Flexible static memory controller
    +    pub const FSMC = extern struct {
    +        ///  SRAM/NOR-Flash chip-select control register 1
    +        BCR1: mmio.Mmio(packed struct(u32) {
    +            ///  MBKEN
    +            MBKEN: u1,
    +            ///  MUXEN
    +            MUXEN: u1,
    +            ///  MTYP
    +            MTYP: u2,
    +            ///  MWID
    +            MWID: u2,
    +            ///  FACCEN
    +            FACCEN: u1,
    +            reserved8: u1,
    +            ///  BURSTEN
    +            BURSTEN: u1,
    +            ///  WAITPOL
    +            WAITPOL: u1,
    +            reserved11: u1,
    +            ///  WAITCFG
    +            WAITCFG: u1,
    +            ///  WREN
    +            WREN: u1,
    +            ///  WAITEN
    +            WAITEN: u1,
    +            ///  EXTMOD
    +            EXTMOD: u1,
    +            ///  ASYNCWAIT
    +            ASYNCWAIT: u1,
    +            reserved19: u3,
    +            ///  CBURSTRW
    +            CBURSTRW: u1,
    +            padding: u12,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select timing register 1
    +        BTR1: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            ///  BUSTURN
    +            BUSTURN: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select control register 2
    +        BCR2: mmio.Mmio(packed struct(u32) {
    +            ///  MBKEN
    +            MBKEN: u1,
    +            ///  MUXEN
    +            MUXEN: u1,
    +            ///  MTYP
    +            MTYP: u2,
    +            ///  MWID
    +            MWID: u2,
    +            ///  FACCEN
    +            FACCEN: u1,
    +            reserved8: u1,
    +            ///  BURSTEN
    +            BURSTEN: u1,
    +            ///  WAITPOL
    +            WAITPOL: u1,
    +            ///  WRAPMOD
    +            WRAPMOD: u1,
    +            ///  WAITCFG
    +            WAITCFG: u1,
    +            ///  WREN
    +            WREN: u1,
    +            ///  WAITEN
    +            WAITEN: u1,
    +            ///  EXTMOD
    +            EXTMOD: u1,
    +            ///  ASYNCWAIT
    +            ASYNCWAIT: u1,
    +            reserved19: u3,
    +            ///  CBURSTRW
    +            CBURSTRW: u1,
    +            padding: u12,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select timing register 2
    +        BTR2: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            ///  BUSTURN
    +            BUSTURN: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select control register 3
    +        BCR3: mmio.Mmio(packed struct(u32) {
    +            ///  MBKEN
    +            MBKEN: u1,
    +            ///  MUXEN
    +            MUXEN: u1,
    +            ///  MTYP
    +            MTYP: u2,
    +            ///  MWID
    +            MWID: u2,
    +            ///  FACCEN
    +            FACCEN: u1,
    +            reserved8: u1,
    +            ///  BURSTEN
    +            BURSTEN: u1,
    +            ///  WAITPOL
    +            WAITPOL: u1,
    +            ///  WRAPMOD
    +            WRAPMOD: u1,
    +            ///  WAITCFG
    +            WAITCFG: u1,
    +            ///  WREN
    +            WREN: u1,
    +            ///  WAITEN
    +            WAITEN: u1,
    +            ///  EXTMOD
    +            EXTMOD: u1,
    +            ///  ASYNCWAIT
    +            ASYNCWAIT: u1,
    +            reserved19: u3,
    +            ///  CBURSTRW
    +            CBURSTRW: u1,
    +            padding: u12,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select timing register 3
    +        BTR3: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            ///  BUSTURN
    +            BUSTURN: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select control register 4
    +        BCR4: mmio.Mmio(packed struct(u32) {
    +            ///  MBKEN
    +            MBKEN: u1,
    +            ///  MUXEN
    +            MUXEN: u1,
    +            ///  MTYP
    +            MTYP: u2,
    +            ///  MWID
    +            MWID: u2,
    +            ///  FACCEN
    +            FACCEN: u1,
    +            reserved8: u1,
    +            ///  BURSTEN
    +            BURSTEN: u1,
    +            ///  WAITPOL
    +            WAITPOL: u1,
    +            ///  WRAPMOD
    +            WRAPMOD: u1,
    +            ///  WAITCFG
    +            WAITCFG: u1,
    +            ///  WREN
    +            WREN: u1,
    +            ///  WAITEN
    +            WAITEN: u1,
    +            ///  EXTMOD
    +            EXTMOD: u1,
    +            ///  ASYNCWAIT
    +            ASYNCWAIT: u1,
    +            reserved19: u3,
    +            ///  CBURSTRW
    +            CBURSTRW: u1,
    +            padding: u12,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select timing register 4
    +        BTR4: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            ///  BUSTURN
    +            BUSTURN: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +        reserved96: [64]u8,
    +        ///  PC Card/NAND Flash control register 2
    +        PCR2: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  PWAITEN
    +            PWAITEN: u1,
    +            ///  PBKEN
    +            PBKEN: u1,
    +            ///  PTYP
    +            PTYP: u1,
    +            ///  PWID
    +            PWID: u2,
    +            ///  ECCEN
    +            ECCEN: u1,
    +            reserved9: u2,
    +            ///  TCLR
    +            TCLR: u4,
    +            ///  TAR
    +            TAR: u4,
    +            ///  ECCPS
    +            ECCPS: u3,
    +            padding: u12,
    +        }),
    +        ///  FIFO status and interrupt register 2
    +        SR2: mmio.Mmio(packed struct(u32) {
    +            ///  IRS
    +            IRS: u1,
    +            ///  ILS
    +            ILS: u1,
    +            ///  IFS
    +            IFS: u1,
    +            ///  IREN
    +            IREN: u1,
    +            ///  ILEN
    +            ILEN: u1,
    +            ///  IFEN
    +            IFEN: u1,
    +            ///  FEMPT
    +            FEMPT: u1,
    +            padding: u25,
    +        }),
    +        ///  Common memory space timing register 2
    +        PMEM2: mmio.Mmio(packed struct(u32) {
    +            ///  MEMSETx
    +            MEMSETx: u8,
    +            ///  MEMWAITx
    +            MEMWAITx: u8,
    +            ///  MEMHOLDx
    +            MEMHOLDx: u8,
    +            ///  MEMHIZx
    +            MEMHIZx: u8,
    +        }),
    +        ///  Attribute memory space timing register 2
    +        PATT2: mmio.Mmio(packed struct(u32) {
    +            ///  ATTSETx
    +            ATTSETx: u8,
    +            ///  ATTWAITx
    +            ATTWAITx: u8,
    +            ///  ATTHOLDx
    +            ATTHOLDx: u8,
    +            ///  ATTHIZx
    +            ATTHIZx: u8,
    +        }),
    +        reserved116: [4]u8,
    +        ///  ECC result register 2
    +        ECCR2: mmio.Mmio(packed struct(u32) {
    +            ///  ECCx
    +            ECCx: u32,
    +        }),
    +        reserved128: [8]u8,
    +        ///  PC Card/NAND Flash control register 3
    +        PCR3: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  PWAITEN
    +            PWAITEN: u1,
    +            ///  PBKEN
    +            PBKEN: u1,
    +            ///  PTYP
    +            PTYP: u1,
    +            ///  PWID
    +            PWID: u2,
    +            ///  ECCEN
    +            ECCEN: u1,
    +            reserved9: u2,
    +            ///  TCLR
    +            TCLR: u4,
    +            ///  TAR
    +            TAR: u4,
    +            ///  ECCPS
    +            ECCPS: u3,
    +            padding: u12,
    +        }),
    +        ///  FIFO status and interrupt register 3
    +        SR3: mmio.Mmio(packed struct(u32) {
    +            ///  IRS
    +            IRS: u1,
    +            ///  ILS
    +            ILS: u1,
    +            ///  IFS
    +            IFS: u1,
    +            ///  IREN
    +            IREN: u1,
    +            ///  ILEN
    +            ILEN: u1,
    +            ///  IFEN
    +            IFEN: u1,
    +            ///  FEMPT
    +            FEMPT: u1,
    +            padding: u25,
    +        }),
    +        ///  Common memory space timing register 3
    +        PMEM3: mmio.Mmio(packed struct(u32) {
    +            ///  MEMSETx
    +            MEMSETx: u8,
    +            ///  MEMWAITx
    +            MEMWAITx: u8,
    +            ///  MEMHOLDx
    +            MEMHOLDx: u8,
    +            ///  MEMHIZx
    +            MEMHIZx: u8,
    +        }),
    +        ///  Attribute memory space timing register 3
    +        PATT3: mmio.Mmio(packed struct(u32) {
    +            ///  ATTSETx
    +            ATTSETx: u8,
    +            ///  ATTWAITx
    +            ATTWAITx: u8,
    +            ///  ATTHOLDx
    +            ATTHOLDx: u8,
    +            ///  ATTHIZx
    +            ATTHIZx: u8,
    +        }),
    +        reserved148: [4]u8,
    +        ///  ECC result register 3
    +        ECCR3: mmio.Mmio(packed struct(u32) {
    +            ///  ECCx
    +            ECCx: u32,
    +        }),
    +        reserved160: [8]u8,
    +        ///  PC Card/NAND Flash control register 4
    +        PCR4: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  PWAITEN
    +            PWAITEN: u1,
    +            ///  PBKEN
    +            PBKEN: u1,
    +            ///  PTYP
    +            PTYP: u1,
    +            ///  PWID
    +            PWID: u2,
    +            ///  ECCEN
    +            ECCEN: u1,
    +            reserved9: u2,
    +            ///  TCLR
    +            TCLR: u4,
    +            ///  TAR
    +            TAR: u4,
    +            ///  ECCPS
    +            ECCPS: u3,
    +            padding: u12,
    +        }),
    +        ///  FIFO status and interrupt register 4
    +        SR4: mmio.Mmio(packed struct(u32) {
    +            ///  IRS
    +            IRS: u1,
    +            ///  ILS
    +            ILS: u1,
    +            ///  IFS
    +            IFS: u1,
    +            ///  IREN
    +            IREN: u1,
    +            ///  ILEN
    +            ILEN: u1,
    +            ///  IFEN
    +            IFEN: u1,
    +            ///  FEMPT
    +            FEMPT: u1,
    +            padding: u25,
    +        }),
    +        ///  Common memory space timing register 4
    +        PMEM4: mmio.Mmio(packed struct(u32) {
    +            ///  MEMSETx
    +            MEMSETx: u8,
    +            ///  MEMWAITx
    +            MEMWAITx: u8,
    +            ///  MEMHOLDx
    +            MEMHOLDx: u8,
    +            ///  MEMHIZx
    +            MEMHIZx: u8,
    +        }),
    +        ///  Attribute memory space timing register 4
    +        PATT4: mmio.Mmio(packed struct(u32) {
    +            ///  ATTSETx
    +            ATTSETx: u8,
    +            ///  ATTWAITx
    +            ATTWAITx: u8,
    +            ///  ATTHOLDx
    +            ATTHOLDx: u8,
    +            ///  ATTHIZx
    +            ATTHIZx: u8,
    +        }),
    +        ///  I/O space timing register 4
    +        PIO4: mmio.Mmio(packed struct(u32) {
    +            ///  IOSETx
    +            IOSETx: u8,
    +            ///  IOWAITx
    +            IOWAITx: u8,
    +            ///  IOHOLDx
    +            IOHOLDx: u8,
    +            ///  IOHIZx
    +            IOHIZx: u8,
    +        }),
    +        reserved260: [80]u8,
    +        ///  SRAM/NOR-Flash write timing registers 1
    +        BWTR1: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            reserved20: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +        reserved268: [4]u8,
    +        ///  SRAM/NOR-Flash write timing registers 2
    +        BWTR2: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            reserved20: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +        reserved276: [4]u8,
    +        ///  SRAM/NOR-Flash write timing registers 3
    +        BWTR3: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            reserved20: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +        reserved284: [4]u8,
    +        ///  SRAM/NOR-Flash write timing registers 4
    +        BWTR4: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            reserved20: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +    };
    +
    +    ///  Debug support
    +    pub const DBG = extern struct {
    +        ///  IDCODE
    +        DBGMCU_IDCODE: mmio.Mmio(packed struct(u32) {
    +            ///  DEV_ID
    +            DEV_ID: u12,
    +            reserved16: u4,
    +            ///  REV_ID
    +            REV_ID: u16,
    +        }),
    +        ///  Control Register
    +        DBGMCU_CR: mmio.Mmio(packed struct(u32) {
    +            ///  DBG_SLEEP
    +            DBG_SLEEP: u1,
    +            ///  DBG_STOP
    +            DBG_STOP: u1,
    +            ///  DBG_STANDBY
    +            DBG_STANDBY: u1,
    +            reserved5: u2,
    +            ///  TRACE_IOEN
    +            TRACE_IOEN: u1,
    +            ///  TRACE_MODE
    +            TRACE_MODE: u2,
    +            reserved16: u8,
    +            ///  DBG_I2C2_SMBUS_TIMEOUT
    +            DBG_I2C2_SMBUS_TIMEOUT: u1,
    +            ///  DBG_TIM8_STOP
    +            DBG_TIM8_STOP: u1,
    +            ///  DBG_TIM5_STOP
    +            DBG_TIM5_STOP: u1,
    +            ///  DBG_TIM6_STOP
    +            DBG_TIM6_STOP: u1,
    +            ///  DBG_TIM7_STOP
    +            DBG_TIM7_STOP: u1,
    +            padding: u11,
    +        }),
    +        ///  Debug MCU APB1 Freeze registe
    +        DBGMCU_APB1_FZ: mmio.Mmio(packed struct(u32) {
    +            ///  DBG_TIM2_STOP
    +            DBG_TIM2_STOP: u1,
    +            ///  DBG_TIM3 _STOP
    +            DBG_TIM3_STOP: u1,
    +            ///  DBG_TIM4_STOP
    +            DBG_TIM4_STOP: u1,
    +            ///  DBG_TIM5_STOP
    +            DBG_TIM5_STOP: u1,
    +            ///  DBG_TIM6_STOP
    +            DBG_TIM6_STOP: u1,
    +            ///  DBG_TIM7_STOP
    +            DBG_TIM7_STOP: u1,
    +            ///  DBG_TIM12_STOP
    +            DBG_TIM12_STOP: u1,
    +            ///  DBG_TIM13_STOP
    +            DBG_TIM13_STOP: u1,
    +            ///  DBG_TIM14_STOP
    +            DBG_TIM14_STOP: u1,
    +            reserved11: u2,
    +            ///  DBG_WWDG_STOP
    +            DBG_WWDG_STOP: u1,
    +            ///  DBG_IWDEG_STOP
    +            DBG_IWDEG_STOP: u1,
    +            reserved21: u8,
    +            ///  DBG_J2C1_SMBUS_TIMEOUT
    +            DBG_J2C1_SMBUS_TIMEOUT: u1,
    +            ///  DBG_J2C2_SMBUS_TIMEOUT
    +            DBG_J2C2_SMBUS_TIMEOUT: u1,
    +            ///  DBG_J2C3SMBUS_TIMEOUT
    +            DBG_J2C3SMBUS_TIMEOUT: u1,
    +            reserved25: u1,
    +            ///  DBG_CAN1_STOP
    +            DBG_CAN1_STOP: u1,
    +            ///  DBG_CAN2_STOP
    +            DBG_CAN2_STOP: u1,
    +            padding: u5,
    +        }),
    +        ///  Debug MCU APB2 Freeze registe
    +        DBGMCU_APB2_FZ: mmio.Mmio(packed struct(u32) {
    +            ///  TIM1 counter stopped when core is halted
    +            DBG_TIM1_STOP: u1,
    +            ///  TIM8 counter stopped when core is halted
    +            DBG_TIM8_STOP: u1,
    +            reserved16: u14,
    +            ///  TIM9 counter stopped when core is halted
    +            DBG_TIM9_STOP: u1,
    +            ///  TIM10 counter stopped when core is halted
    +            DBG_TIM10_STOP: u1,
    +            ///  TIM11 counter stopped when core is halted
    +            DBG_TIM11_STOP: u1,
    +            padding: u13,
    +        }),
    +    };
    +
    +    ///  DMA controller
    +    pub const DMA2 = extern struct {
    +        ///  low interrupt status register
    +        LISR: mmio.Mmio(packed struct(u32) {
    +            ///  Stream x FIFO error interrupt flag (x=3..0)
    +            FEIF0: u1,
    +            reserved2: u1,
    +            ///  Stream x direct mode error interrupt flag (x=3..0)
    +            DMEIF0: u1,
    +            ///  Stream x transfer error interrupt flag (x=3..0)
    +            TEIF0: u1,
    +            ///  Stream x half transfer interrupt flag (x=3..0)
    +            HTIF0: u1,
    +            ///  Stream x transfer complete interrupt flag (x = 3..0)
    +            TCIF0: u1,
    +            ///  Stream x FIFO error interrupt flag (x=3..0)
    +            FEIF1: u1,
    +            reserved8: u1,
    +            ///  Stream x direct mode error interrupt flag (x=3..0)
    +            DMEIF1: u1,
    +            ///  Stream x transfer error interrupt flag (x=3..0)
    +            TEIF1: u1,
    +            ///  Stream x half transfer interrupt flag (x=3..0)
    +            HTIF1: u1,
    +            ///  Stream x transfer complete interrupt flag (x = 3..0)
    +            TCIF1: u1,
    +            reserved16: u4,
    +            ///  Stream x FIFO error interrupt flag (x=3..0)
    +            FEIF2: u1,
    +            reserved18: u1,
    +            ///  Stream x direct mode error interrupt flag (x=3..0)
    +            DMEIF2: u1,
    +            ///  Stream x transfer error interrupt flag (x=3..0)
    +            TEIF2: u1,
    +            ///  Stream x half transfer interrupt flag (x=3..0)
    +            HTIF2: u1,
    +            ///  Stream x transfer complete interrupt flag (x = 3..0)
    +            TCIF2: u1,
    +            ///  Stream x FIFO error interrupt flag (x=3..0)
    +            FEIF3: u1,
    +            reserved24: u1,
    +            ///  Stream x direct mode error interrupt flag (x=3..0)
    +            DMEIF3: u1,
    +            ///  Stream x transfer error interrupt flag (x=3..0)
    +            TEIF3: u1,
    +            ///  Stream x half transfer interrupt flag (x=3..0)
    +            HTIF3: u1,
    +            ///  Stream x transfer complete interrupt flag (x = 3..0)
    +            TCIF3: u1,
    +            padding: u4,
    +        }),
    +        ///  high interrupt status register
    +        HISR: mmio.Mmio(packed struct(u32) {
    +            ///  Stream x FIFO error interrupt flag (x=7..4)
    +            FEIF4: u1,
    +            reserved2: u1,
    +            ///  Stream x direct mode error interrupt flag (x=7..4)
    +            DMEIF4: u1,
    +            ///  Stream x transfer error interrupt flag (x=7..4)
    +            TEIF4: u1,
    +            ///  Stream x half transfer interrupt flag (x=7..4)
    +            HTIF4: u1,
    +            ///  Stream x transfer complete interrupt flag (x=7..4)
    +            TCIF4: u1,
    +            ///  Stream x FIFO error interrupt flag (x=7..4)
    +            FEIF5: u1,
    +            reserved8: u1,
    +            ///  Stream x direct mode error interrupt flag (x=7..4)
    +            DMEIF5: u1,
    +            ///  Stream x transfer error interrupt flag (x=7..4)
    +            TEIF5: u1,
    +            ///  Stream x half transfer interrupt flag (x=7..4)
    +            HTIF5: u1,
    +            ///  Stream x transfer complete interrupt flag (x=7..4)
    +            TCIF5: u1,
    +            reserved16: u4,
    +            ///  Stream x FIFO error interrupt flag (x=7..4)
    +            FEIF6: u1,
    +            reserved18: u1,
    +            ///  Stream x direct mode error interrupt flag (x=7..4)
    +            DMEIF6: u1,
    +            ///  Stream x transfer error interrupt flag (x=7..4)
    +            TEIF6: u1,
    +            ///  Stream x half transfer interrupt flag (x=7..4)
    +            HTIF6: u1,
    +            ///  Stream x transfer complete interrupt flag (x=7..4)
    +            TCIF6: u1,
    +            ///  Stream x FIFO error interrupt flag (x=7..4)
    +            FEIF7: u1,
    +            reserved24: u1,
    +            ///  Stream x direct mode error interrupt flag (x=7..4)
    +            DMEIF7: u1,
    +            ///  Stream x transfer error interrupt flag (x=7..4)
    +            TEIF7: u1,
    +            ///  Stream x half transfer interrupt flag (x=7..4)
    +            HTIF7: u1,
    +            ///  Stream x transfer complete interrupt flag (x=7..4)
    +            TCIF7: u1,
    +            padding: u4,
    +        }),
    +        ///  low interrupt flag clear register
    +        LIFCR: mmio.Mmio(packed struct(u32) {
    +            ///  Stream x clear FIFO error interrupt flag (x = 3..0)
    +            CFEIF0: u1,
    +            reserved2: u1,
    +            ///  Stream x clear direct mode error interrupt flag (x = 3..0)
    +            CDMEIF0: u1,
    +            ///  Stream x clear transfer error interrupt flag (x = 3..0)
    +            CTEIF0: u1,
    +            ///  Stream x clear half transfer interrupt flag (x = 3..0)
    +            CHTIF0: u1,
    +            ///  Stream x clear transfer complete interrupt flag (x = 3..0)
    +            CTCIF0: u1,
    +            ///  Stream x clear FIFO error interrupt flag (x = 3..0)
    +            CFEIF1: u1,
    +            reserved8: u1,
    +            ///  Stream x clear direct mode error interrupt flag (x = 3..0)
    +            CDMEIF1: u1,
    +            ///  Stream x clear transfer error interrupt flag (x = 3..0)
    +            CTEIF1: u1,
    +            ///  Stream x clear half transfer interrupt flag (x = 3..0)
    +            CHTIF1: u1,
    +            ///  Stream x clear transfer complete interrupt flag (x = 3..0)
    +            CTCIF1: u1,
    +            reserved16: u4,
    +            ///  Stream x clear FIFO error interrupt flag (x = 3..0)
    +            CFEIF2: u1,
    +            reserved18: u1,
    +            ///  Stream x clear direct mode error interrupt flag (x = 3..0)
    +            CDMEIF2: u1,
    +            ///  Stream x clear transfer error interrupt flag (x = 3..0)
    +            CTEIF2: u1,
    +            ///  Stream x clear half transfer interrupt flag (x = 3..0)
    +            CHTIF2: u1,
    +            ///  Stream x clear transfer complete interrupt flag (x = 3..0)
    +            CTCIF2: u1,
    +            ///  Stream x clear FIFO error interrupt flag (x = 3..0)
    +            CFEIF3: u1,
    +            reserved24: u1,
    +            ///  Stream x clear direct mode error interrupt flag (x = 3..0)
    +            CDMEIF3: u1,
    +            ///  Stream x clear transfer error interrupt flag (x = 3..0)
    +            CTEIF3: u1,
    +            ///  Stream x clear half transfer interrupt flag (x = 3..0)
    +            CHTIF3: u1,
    +            ///  Stream x clear transfer complete interrupt flag (x = 3..0)
    +            CTCIF3: u1,
    +            padding: u4,
    +        }),
    +        ///  high interrupt flag clear register
    +        HIFCR: mmio.Mmio(packed struct(u32) {
    +            ///  Stream x clear FIFO error interrupt flag (x = 7..4)
    +            CFEIF4: u1,
    +            reserved2: u1,
    +            ///  Stream x clear direct mode error interrupt flag (x = 7..4)
    +            CDMEIF4: u1,
    +            ///  Stream x clear transfer error interrupt flag (x = 7..4)
    +            CTEIF4: u1,
    +            ///  Stream x clear half transfer interrupt flag (x = 7..4)
    +            CHTIF4: u1,
    +            ///  Stream x clear transfer complete interrupt flag (x = 7..4)
    +            CTCIF4: u1,
    +            ///  Stream x clear FIFO error interrupt flag (x = 7..4)
    +            CFEIF5: u1,
    +            reserved8: u1,
    +            ///  Stream x clear direct mode error interrupt flag (x = 7..4)
    +            CDMEIF5: u1,
    +            ///  Stream x clear transfer error interrupt flag (x = 7..4)
    +            CTEIF5: u1,
    +            ///  Stream x clear half transfer interrupt flag (x = 7..4)
    +            CHTIF5: u1,
    +            ///  Stream x clear transfer complete interrupt flag (x = 7..4)
    +            CTCIF5: u1,
    +            reserved16: u4,
    +            ///  Stream x clear FIFO error interrupt flag (x = 7..4)
    +            CFEIF6: u1,
    +            reserved18: u1,
    +            ///  Stream x clear direct mode error interrupt flag (x = 7..4)
    +            CDMEIF6: u1,
    +            ///  Stream x clear transfer error interrupt flag (x = 7..4)
    +            CTEIF6: u1,
    +            ///  Stream x clear half transfer interrupt flag (x = 7..4)
    +            CHTIF6: u1,
    +            ///  Stream x clear transfer complete interrupt flag (x = 7..4)
    +            CTCIF6: u1,
    +            ///  Stream x clear FIFO error interrupt flag (x = 7..4)
    +            CFEIF7: u1,
    +            reserved24: u1,
    +            ///  Stream x clear direct mode error interrupt flag (x = 7..4)
    +            CDMEIF7: u1,
    +            ///  Stream x clear transfer error interrupt flag (x = 7..4)
    +            CTEIF7: u1,
    +            ///  Stream x clear half transfer interrupt flag (x = 7..4)
    +            CHTIF7: u1,
    +            ///  Stream x clear transfer complete interrupt flag (x = 7..4)
    +            CTCIF7: u1,
    +            padding: u4,
    +        }),
    +        ///  stream x configuration register
    +        S0CR: mmio.Mmio(packed struct(u32) {
    +            ///  Stream enable / flag stream ready when read low
    +            EN: u1,
    +            ///  Direct mode error interrupt enable
    +            DMEIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Half transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Peripheral flow controller
    +            PFCTRL: u1,
    +            ///  Data transfer direction
    +            DIR: u2,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral data size
    +            PSIZE: u2,
    +            ///  Memory data size
    +            MSIZE: u2,
    +            ///  Peripheral increment offset size
    +            PINCOS: u1,
    +            ///  Priority level
    +            PL: u2,
    +            ///  Double buffer mode
    +            DBM: u1,
    +            ///  Current target (only in double buffer mode)
    +            CT: u1,
    +            reserved21: u1,
    +            ///  Peripheral burst transfer configuration
    +            PBURST: u2,
    +            ///  Memory burst transfer configuration
    +            MBURST: u2,
    +            ///  Channel selection
    +            CHSEL: u3,
    +            padding: u4,
    +        }),
    +        ///  stream x number of data register
    +        S0NDTR: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data items to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  stream x peripheral address register
    +        S0PAR: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  stream x memory 0 address register
    +        S0M0AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 0 address
    +            M0A: u32,
    +        }),
    +        ///  stream x memory 1 address register
    +        S0M1AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 1 address (used in case of Double buffer mode)
    +            M1A: u32,
    +        }),
    +        ///  stream x FIFO control register
    +        S0FCR: mmio.Mmio(packed struct(u32) {
    +            ///  FIFO threshold selection
    +            FTH: u2,
    +            ///  Direct mode disable
    +            DMDIS: u1,
    +            ///  FIFO status
    +            FS: u3,
    +            reserved7: u1,
    +            ///  FIFO error interrupt enable
    +            FEIE: u1,
    +            padding: u24,
    +        }),
    +        ///  stream x configuration register
    +        S1CR: mmio.Mmio(packed struct(u32) {
    +            ///  Stream enable / flag stream ready when read low
    +            EN: u1,
    +            ///  Direct mode error interrupt enable
    +            DMEIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Half transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Peripheral flow controller
    +            PFCTRL: u1,
    +            ///  Data transfer direction
    +            DIR: u2,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral data size
    +            PSIZE: u2,
    +            ///  Memory data size
    +            MSIZE: u2,
    +            ///  Peripheral increment offset size
    +            PINCOS: u1,
    +            ///  Priority level
    +            PL: u2,
    +            ///  Double buffer mode
    +            DBM: u1,
    +            ///  Current target (only in double buffer mode)
    +            CT: u1,
    +            ///  ACK
    +            ACK: u1,
    +            ///  Peripheral burst transfer configuration
    +            PBURST: u2,
    +            ///  Memory burst transfer configuration
    +            MBURST: u2,
    +            ///  Channel selection
    +            CHSEL: u3,
    +            padding: u4,
    +        }),
    +        ///  stream x number of data register
    +        S1NDTR: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data items to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  stream x peripheral address register
    +        S1PAR: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  stream x memory 0 address register
    +        S1M0AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 0 address
    +            M0A: u32,
    +        }),
    +        ///  stream x memory 1 address register
    +        S1M1AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 1 address (used in case of Double buffer mode)
    +            M1A: u32,
    +        }),
    +        ///  stream x FIFO control register
    +        S1FCR: mmio.Mmio(packed struct(u32) {
    +            ///  FIFO threshold selection
    +            FTH: u2,
    +            ///  Direct mode disable
    +            DMDIS: u1,
    +            ///  FIFO status
    +            FS: u3,
    +            reserved7: u1,
    +            ///  FIFO error interrupt enable
    +            FEIE: u1,
    +            padding: u24,
    +        }),
    +        ///  stream x configuration register
    +        S2CR: mmio.Mmio(packed struct(u32) {
    +            ///  Stream enable / flag stream ready when read low
    +            EN: u1,
    +            ///  Direct mode error interrupt enable
    +            DMEIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Half transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Peripheral flow controller
    +            PFCTRL: u1,
    +            ///  Data transfer direction
    +            DIR: u2,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral data size
    +            PSIZE: u2,
    +            ///  Memory data size
    +            MSIZE: u2,
    +            ///  Peripheral increment offset size
    +            PINCOS: u1,
    +            ///  Priority level
    +            PL: u2,
    +            ///  Double buffer mode
    +            DBM: u1,
    +            ///  Current target (only in double buffer mode)
    +            CT: u1,
    +            ///  ACK
    +            ACK: u1,
    +            ///  Peripheral burst transfer configuration
    +            PBURST: u2,
    +            ///  Memory burst transfer configuration
    +            MBURST: u2,
    +            ///  Channel selection
    +            CHSEL: u3,
    +            padding: u4,
    +        }),
    +        ///  stream x number of data register
    +        S2NDTR: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data items to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  stream x peripheral address register
    +        S2PAR: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  stream x memory 0 address register
    +        S2M0AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 0 address
    +            M0A: u32,
    +        }),
    +        ///  stream x memory 1 address register
    +        S2M1AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 1 address (used in case of Double buffer mode)
    +            M1A: u32,
    +        }),
    +        ///  stream x FIFO control register
    +        S2FCR: mmio.Mmio(packed struct(u32) {
    +            ///  FIFO threshold selection
    +            FTH: u2,
    +            ///  Direct mode disable
    +            DMDIS: u1,
    +            ///  FIFO status
    +            FS: u3,
    +            reserved7: u1,
    +            ///  FIFO error interrupt enable
    +            FEIE: u1,
    +            padding: u24,
    +        }),
    +        ///  stream x configuration register
    +        S3CR: mmio.Mmio(packed struct(u32) {
    +            ///  Stream enable / flag stream ready when read low
    +            EN: u1,
    +            ///  Direct mode error interrupt enable
    +            DMEIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Half transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Peripheral flow controller
    +            PFCTRL: u1,
    +            ///  Data transfer direction
    +            DIR: u2,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral data size
    +            PSIZE: u2,
    +            ///  Memory data size
    +            MSIZE: u2,
    +            ///  Peripheral increment offset size
    +            PINCOS: u1,
    +            ///  Priority level
    +            PL: u2,
    +            ///  Double buffer mode
    +            DBM: u1,
    +            ///  Current target (only in double buffer mode)
    +            CT: u1,
    +            ///  ACK
    +            ACK: u1,
    +            ///  Peripheral burst transfer configuration
    +            PBURST: u2,
    +            ///  Memory burst transfer configuration
    +            MBURST: u2,
    +            ///  Channel selection
    +            CHSEL: u3,
    +            padding: u4,
    +        }),
    +        ///  stream x number of data register
    +        S3NDTR: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data items to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  stream x peripheral address register
    +        S3PAR: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  stream x memory 0 address register
    +        S3M0AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 0 address
    +            M0A: u32,
    +        }),
    +        ///  stream x memory 1 address register
    +        S3M1AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 1 address (used in case of Double buffer mode)
    +            M1A: u32,
    +        }),
    +        ///  stream x FIFO control register
    +        S3FCR: mmio.Mmio(packed struct(u32) {
    +            ///  FIFO threshold selection
    +            FTH: u2,
    +            ///  Direct mode disable
    +            DMDIS: u1,
    +            ///  FIFO status
    +            FS: u3,
    +            reserved7: u1,
    +            ///  FIFO error interrupt enable
    +            FEIE: u1,
    +            padding: u24,
    +        }),
    +        ///  stream x configuration register
    +        S4CR: mmio.Mmio(packed struct(u32) {
    +            ///  Stream enable / flag stream ready when read low
    +            EN: u1,
    +            ///  Direct mode error interrupt enable
    +            DMEIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Half transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Peripheral flow controller
    +            PFCTRL: u1,
    +            ///  Data transfer direction
    +            DIR: u2,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral data size
    +            PSIZE: u2,
    +            ///  Memory data size
    +            MSIZE: u2,
    +            ///  Peripheral increment offset size
    +            PINCOS: u1,
    +            ///  Priority level
    +            PL: u2,
    +            ///  Double buffer mode
    +            DBM: u1,
    +            ///  Current target (only in double buffer mode)
    +            CT: u1,
    +            ///  ACK
    +            ACK: u1,
    +            ///  Peripheral burst transfer configuration
    +            PBURST: u2,
    +            ///  Memory burst transfer configuration
    +            MBURST: u2,
    +            ///  Channel selection
    +            CHSEL: u3,
    +            padding: u4,
    +        }),
    +        ///  stream x number of data register
    +        S4NDTR: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data items to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  stream x peripheral address register
    +        S4PAR: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  stream x memory 0 address register
    +        S4M0AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 0 address
    +            M0A: u32,
    +        }),
    +        ///  stream x memory 1 address register
    +        S4M1AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 1 address (used in case of Double buffer mode)
    +            M1A: u32,
    +        }),
    +        ///  stream x FIFO control register
    +        S4FCR: mmio.Mmio(packed struct(u32) {
    +            ///  FIFO threshold selection
    +            FTH: u2,
    +            ///  Direct mode disable
    +            DMDIS: u1,
    +            ///  FIFO status
    +            FS: u3,
    +            reserved7: u1,
    +            ///  FIFO error interrupt enable
    +            FEIE: u1,
    +            padding: u24,
    +        }),
    +        ///  stream x configuration register
    +        S5CR: mmio.Mmio(packed struct(u32) {
    +            ///  Stream enable / flag stream ready when read low
    +            EN: u1,
    +            ///  Direct mode error interrupt enable
    +            DMEIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Half transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Peripheral flow controller
    +            PFCTRL: u1,
    +            ///  Data transfer direction
    +            DIR: u2,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral data size
    +            PSIZE: u2,
    +            ///  Memory data size
    +            MSIZE: u2,
    +            ///  Peripheral increment offset size
    +            PINCOS: u1,
    +            ///  Priority level
    +            PL: u2,
    +            ///  Double buffer mode
    +            DBM: u1,
    +            ///  Current target (only in double buffer mode)
    +            CT: u1,
    +            ///  ACK
    +            ACK: u1,
    +            ///  Peripheral burst transfer configuration
    +            PBURST: u2,
    +            ///  Memory burst transfer configuration
    +            MBURST: u2,
    +            ///  Channel selection
    +            CHSEL: u3,
    +            padding: u4,
    +        }),
    +        ///  stream x number of data register
    +        S5NDTR: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data items to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  stream x peripheral address register
    +        S5PAR: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  stream x memory 0 address register
    +        S5M0AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 0 address
    +            M0A: u32,
    +        }),
    +        ///  stream x memory 1 address register
    +        S5M1AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 1 address (used in case of Double buffer mode)
    +            M1A: u32,
    +        }),
    +        ///  stream x FIFO control register
    +        S5FCR: mmio.Mmio(packed struct(u32) {
    +            ///  FIFO threshold selection
    +            FTH: u2,
    +            ///  Direct mode disable
    +            DMDIS: u1,
    +            ///  FIFO status
    +            FS: u3,
    +            reserved7: u1,
    +            ///  FIFO error interrupt enable
    +            FEIE: u1,
    +            padding: u24,
    +        }),
    +        ///  stream x configuration register
    +        S6CR: mmio.Mmio(packed struct(u32) {
    +            ///  Stream enable / flag stream ready when read low
    +            EN: u1,
    +            ///  Direct mode error interrupt enable
    +            DMEIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Half transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Peripheral flow controller
    +            PFCTRL: u1,
    +            ///  Data transfer direction
    +            DIR: u2,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral data size
    +            PSIZE: u2,
    +            ///  Memory data size
    +            MSIZE: u2,
    +            ///  Peripheral increment offset size
    +            PINCOS: u1,
    +            ///  Priority level
    +            PL: u2,
    +            ///  Double buffer mode
    +            DBM: u1,
    +            ///  Current target (only in double buffer mode)
    +            CT: u1,
    +            ///  ACK
    +            ACK: u1,
    +            ///  Peripheral burst transfer configuration
    +            PBURST: u2,
    +            ///  Memory burst transfer configuration
    +            MBURST: u2,
    +            ///  Channel selection
    +            CHSEL: u3,
    +            padding: u4,
    +        }),
    +        ///  stream x number of data register
    +        S6NDTR: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data items to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  stream x peripheral address register
    +        S6PAR: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  stream x memory 0 address register
    +        S6M0AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 0 address
    +            M0A: u32,
    +        }),
    +        ///  stream x memory 1 address register
    +        S6M1AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 1 address (used in case of Double buffer mode)
    +            M1A: u32,
    +        }),
    +        ///  stream x FIFO control register
    +        S6FCR: mmio.Mmio(packed struct(u32) {
    +            ///  FIFO threshold selection
    +            FTH: u2,
    +            ///  Direct mode disable
    +            DMDIS: u1,
    +            ///  FIFO status
    +            FS: u3,
    +            reserved7: u1,
    +            ///  FIFO error interrupt enable
    +            FEIE: u1,
    +            padding: u24,
    +        }),
    +        ///  stream x configuration register
    +        S7CR: mmio.Mmio(packed struct(u32) {
    +            ///  Stream enable / flag stream ready when read low
    +            EN: u1,
    +            ///  Direct mode error interrupt enable
    +            DMEIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Half transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Peripheral flow controller
    +            PFCTRL: u1,
    +            ///  Data transfer direction
    +            DIR: u2,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral data size
    +            PSIZE: u2,
    +            ///  Memory data size
    +            MSIZE: u2,
    +            ///  Peripheral increment offset size
    +            PINCOS: u1,
    +            ///  Priority level
    +            PL: u2,
    +            ///  Double buffer mode
    +            DBM: u1,
    +            ///  Current target (only in double buffer mode)
    +            CT: u1,
    +            ///  ACK
    +            ACK: u1,
    +            ///  Peripheral burst transfer configuration
    +            PBURST: u2,
    +            ///  Memory burst transfer configuration
    +            MBURST: u2,
    +            ///  Channel selection
    +            CHSEL: u3,
    +            padding: u4,
    +        }),
    +        ///  stream x number of data register
    +        S7NDTR: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data items to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  stream x peripheral address register
    +        S7PAR: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  stream x memory 0 address register
    +        S7M0AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 0 address
    +            M0A: u32,
    +        }),
    +        ///  stream x memory 1 address register
    +        S7M1AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 1 address (used in case of Double buffer mode)
    +            M1A: u32,
    +        }),
    +        ///  stream x FIFO control register
    +        S7FCR: mmio.Mmio(packed struct(u32) {
    +            ///  FIFO threshold selection
    +            FTH: u2,
    +            ///  Direct mode disable
    +            DMDIS: u1,
    +            ///  FIFO status
    +            FS: u3,
    +            reserved7: u1,
    +            ///  FIFO error interrupt enable
    +            FEIE: u1,
    +            padding: u24,
    +        }),
    +    };
    +
    +    ///  System control block ACTLR
    +    pub const SCB_ACTRL = extern struct {
    +        ///  Auxiliary control register
    +        ACTRL: mmio.Mmio(packed struct(u32) {
    +            ///  DISMCYCINT
    +            DISMCYCINT: u1,
    +            ///  DISDEFWBUF
    +            DISDEFWBUF: u1,
    +            ///  DISFOLD
    +            DISFOLD: u1,
    +            reserved8: u5,
    +            ///  DISFPCA
    +            DISFPCA: u1,
    +            ///  DISOOFP
    +            DISOOFP: u1,
    +            padding: u22,
    +        }),
    +    };
    +
    +    ///  Reset and clock control
    +    pub const RCC = extern struct {
    +        ///  clock control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  Internal high-speed clock enable
    +            HSION: u1,
    +            ///  Internal high-speed clock ready flag
    +            HSIRDY: u1,
    +            reserved3: u1,
    +            ///  Internal high-speed clock trimming
    +            HSITRIM: u5,
    +            ///  Internal high-speed clock calibration
    +            HSICAL: u8,
    +            ///  HSE clock enable
    +            HSEON: u1,
    +            ///  HSE clock ready flag
    +            HSERDY: u1,
    +            ///  HSE clock bypass
    +            HSEBYP: u1,
    +            ///  Clock security system enable
    +            CSSON: u1,
    +            reserved24: u4,
    +            ///  Main PLL (PLL) enable
    +            PLLON: u1,
    +            ///  Main PLL (PLL) clock ready flag
    +            PLLRDY: u1,
    +            ///  PLLI2S enable
    +            PLLI2SON: u1,
    +            ///  PLLI2S clock ready flag
    +            PLLI2SRDY: u1,
    +            padding: u4,
    +        }),
    +        ///  PLL configuration register
    +        PLLCFGR: mmio.Mmio(packed struct(u32) {
    +            ///  Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock
    +            PLLM0: u1,
    +            ///  Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock
    +            PLLM1: u1,
    +            ///  Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock
    +            PLLM2: u1,
    +            ///  Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock
    +            PLLM3: u1,
    +            ///  Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock
    +            PLLM4: u1,
    +            ///  Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock
    +            PLLM5: u1,
    +            ///  Main PLL (PLL) multiplication factor for VCO
    +            PLLN0: u1,
    +            ///  Main PLL (PLL) multiplication factor for VCO
    +            PLLN1: u1,
    +            ///  Main PLL (PLL) multiplication factor for VCO
    +            PLLN2: u1,
    +            ///  Main PLL (PLL) multiplication factor for VCO
    +            PLLN3: u1,
    +            ///  Main PLL (PLL) multiplication factor for VCO
    +            PLLN4: u1,
    +            ///  Main PLL (PLL) multiplication factor for VCO
    +            PLLN5: u1,
    +            ///  Main PLL (PLL) multiplication factor for VCO
    +            PLLN6: u1,
    +            ///  Main PLL (PLL) multiplication factor for VCO
    +            PLLN7: u1,
    +            ///  Main PLL (PLL) multiplication factor for VCO
    +            PLLN8: u1,
    +            reserved16: u1,
    +            ///  Main PLL (PLL) division factor for main system clock
    +            PLLP0: u1,
    +            ///  Main PLL (PLL) division factor for main system clock
    +            PLLP1: u1,
    +            reserved22: u4,
    +            ///  Main PLL(PLL) and audio PLL (PLLI2S) entry clock source
    +            PLLSRC: u1,
    +            reserved24: u1,
    +            ///  Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks
    +            PLLQ0: u1,
    +            ///  Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks
    +            PLLQ1: u1,
    +            ///  Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks
    +            PLLQ2: u1,
    +            ///  Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks
    +            PLLQ3: u1,
    +            padding: u4,
    +        }),
    +        ///  clock configuration register
    +        CFGR: mmio.Mmio(packed struct(u32) {
    +            ///  System clock switch
    +            SW0: u1,
    +            ///  System clock switch
    +            SW1: u1,
    +            ///  System clock switch status
    +            SWS0: u1,
    +            ///  System clock switch status
    +            SWS1: u1,
    +            ///  AHB prescaler
    +            HPRE: u4,
    +            reserved10: u2,
    +            ///  APB Low speed prescaler (APB1)
    +            PPRE1: u3,
    +            ///  APB high-speed prescaler (APB2)
    +            PPRE2: u3,
    +            ///  HSE division factor for RTC clock
    +            RTCPRE: u5,
    +            ///  Microcontroller clock output 1
    +            MCO1: u2,
    +            ///  I2S clock selection
    +            I2SSRC: u1,
    +            ///  MCO1 prescaler
    +            MCO1PRE: u3,
    +            ///  MCO2 prescaler
    +            MCO2PRE: u3,
    +            ///  Microcontroller clock output 2
    +            MCO2: u2,
    +        }),
    +        ///  clock interrupt register
    +        CIR: mmio.Mmio(packed struct(u32) {
    +            ///  LSI ready interrupt flag
    +            LSIRDYF: u1,
    +            ///  LSE ready interrupt flag
    +            LSERDYF: u1,
    +            ///  HSI ready interrupt flag
    +            HSIRDYF: u1,
    +            ///  HSE ready interrupt flag
    +            HSERDYF: u1,
    +            ///  Main PLL (PLL) ready interrupt flag
    +            PLLRDYF: u1,
    +            ///  PLLI2S ready interrupt flag
    +            PLLI2SRDYF: u1,
    +            reserved7: u1,
    +            ///  Clock security system interrupt flag
    +            CSSF: u1,
    +            ///  LSI ready interrupt enable
    +            LSIRDYIE: u1,
    +            ///  LSE ready interrupt enable
    +            LSERDYIE: u1,
    +            ///  HSI ready interrupt enable
    +            HSIRDYIE: u1,
    +            ///  HSE ready interrupt enable
    +            HSERDYIE: u1,
    +            ///  Main PLL (PLL) ready interrupt enable
    +            PLLRDYIE: u1,
    +            ///  PLLI2S ready interrupt enable
    +            PLLI2SRDYIE: u1,
    +            reserved16: u2,
    +            ///  LSI ready interrupt clear
    +            LSIRDYC: u1,
    +            ///  LSE ready interrupt clear
    +            LSERDYC: u1,
    +            ///  HSI ready interrupt clear
    +            HSIRDYC: u1,
    +            ///  HSE ready interrupt clear
    +            HSERDYC: u1,
    +            ///  Main PLL(PLL) ready interrupt clear
    +            PLLRDYC: u1,
    +            ///  PLLI2S ready interrupt clear
    +            PLLI2SRDYC: u1,
    +            reserved23: u1,
    +            ///  Clock security system interrupt clear
    +            CSSC: u1,
    +            padding: u8,
    +        }),
    +        ///  AHB1 peripheral reset register
    +        AHB1RSTR: mmio.Mmio(packed struct(u32) {
    +            ///  IO port A reset
    +            GPIOARST: u1,
    +            ///  IO port B reset
    +            GPIOBRST: u1,
    +            ///  IO port C reset
    +            GPIOCRST: u1,
    +            ///  IO port D reset
    +            GPIODRST: u1,
    +            ///  IO port E reset
    +            GPIOERST: u1,
    +            ///  IO port F reset
    +            GPIOFRST: u1,
    +            ///  IO port G reset
    +            GPIOGRST: u1,
    +            ///  IO port H reset
    +            GPIOHRST: u1,
    +            ///  IO port I reset
    +            GPIOIRST: u1,
    +            reserved12: u3,
    +            ///  CRC reset
    +            CRCRST: u1,
    +            reserved21: u8,
    +            ///  DMA2 reset
    +            DMA1RST: u1,
    +            ///  DMA2 reset
    +            DMA2RST: u1,
    +            reserved25: u2,
    +            ///  Ethernet MAC reset
    +            ETHMACRST: u1,
    +            reserved29: u3,
    +            ///  USB OTG HS module reset
    +            OTGHSRST: u1,
    +            padding: u2,
    +        }),
    +        ///  AHB2 peripheral reset register
    +        AHB2RSTR: mmio.Mmio(packed struct(u32) {
    +            ///  Camera interface reset
    +            DCMIRST: u1,
    +            reserved6: u5,
    +            ///  Random number generator module reset
    +            RNGRST: u1,
    +            ///  USB OTG FS module reset
    +            OTGFSRST: u1,
    +            padding: u24,
    +        }),
    +        ///  AHB3 peripheral reset register
    +        AHB3RSTR: mmio.Mmio(packed struct(u32) {
    +            ///  Flexible static memory controller module reset
    +            FSMCRST: u1,
    +            padding: u31,
    +        }),
    +        reserved32: [4]u8,
    +        ///  APB1 peripheral reset register
    +        APB1RSTR: mmio.Mmio(packed struct(u32) {
    +            ///  TIM2 reset
    +            TIM2RST: u1,
    +            ///  TIM3 reset
    +            TIM3RST: u1,
    +            ///  TIM4 reset
    +            TIM4RST: u1,
    +            ///  TIM5 reset
    +            TIM5RST: u1,
    +            ///  TIM6 reset
    +            TIM6RST: u1,
    +            ///  TIM7 reset
    +            TIM7RST: u1,
    +            ///  TIM12 reset
    +            TIM12RST: u1,
    +            ///  TIM13 reset
    +            TIM13RST: u1,
    +            ///  TIM14 reset
    +            TIM14RST: u1,
    +            reserved11: u2,
    +            ///  Window watchdog reset
    +            WWDGRST: u1,
    +            reserved14: u2,
    +            ///  SPI 2 reset
    +            SPI2RST: u1,
    +            ///  SPI 3 reset
    +            SPI3RST: u1,
    +            reserved17: u1,
    +            ///  USART 2 reset
    +            UART2RST: u1,
    +            ///  USART 3 reset
    +            UART3RST: u1,
    +            ///  USART 4 reset
    +            UART4RST: u1,
    +            ///  USART 5 reset
    +            UART5RST: u1,
    +            ///  I2C 1 reset
    +            I2C1RST: u1,
    +            ///  I2C 2 reset
    +            I2C2RST: u1,
    +            ///  I2C3 reset
    +            I2C3RST: u1,
    +            reserved25: u1,
    +            ///  CAN1 reset
    +            CAN1RST: u1,
    +            ///  CAN2 reset
    +            CAN2RST: u1,
    +            reserved28: u1,
    +            ///  Power interface reset
    +            PWRRST: u1,
    +            ///  DAC reset
    +            DACRST: u1,
    +            padding: u2,
    +        }),
    +        ///  APB2 peripheral reset register
    +        APB2RSTR: mmio.Mmio(packed struct(u32) {
    +            ///  TIM1 reset
    +            TIM1RST: u1,
    +            ///  TIM8 reset
    +            TIM8RST: u1,
    +            reserved4: u2,
    +            ///  USART1 reset
    +            USART1RST: u1,
    +            ///  USART6 reset
    +            USART6RST: u1,
    +            reserved8: u2,
    +            ///  ADC interface reset (common to all ADCs)
    +            ADCRST: u1,
    +            reserved11: u2,
    +            ///  SDIO reset
    +            SDIORST: u1,
    +            ///  SPI 1 reset
    +            SPI1RST: u1,
    +            reserved14: u1,
    +            ///  System configuration controller reset
    +            SYSCFGRST: u1,
    +            reserved16: u1,
    +            ///  TIM9 reset
    +            TIM9RST: u1,
    +            ///  TIM10 reset
    +            TIM10RST: u1,
    +            ///  TIM11 reset
    +            TIM11RST: u1,
    +            padding: u13,
    +        }),
    +        reserved48: [8]u8,
    +        ///  AHB1 peripheral clock register
    +        AHB1ENR: mmio.Mmio(packed struct(u32) {
    +            ///  IO port A clock enable
    +            GPIOAEN: u1,
    +            ///  IO port B clock enable
    +            GPIOBEN: u1,
    +            ///  IO port C clock enable
    +            GPIOCEN: u1,
    +            ///  IO port D clock enable
    +            GPIODEN: u1,
    +            ///  IO port E clock enable
    +            GPIOEEN: u1,
    +            ///  IO port F clock enable
    +            GPIOFEN: u1,
    +            ///  IO port G clock enable
    +            GPIOGEN: u1,
    +            ///  IO port H clock enable
    +            GPIOHEN: u1,
    +            ///  IO port I clock enable
    +            GPIOIEN: u1,
    +            reserved12: u3,
    +            ///  CRC clock enable
    +            CRCEN: u1,
    +            reserved18: u5,
    +            ///  Backup SRAM interface clock enable
    +            BKPSRAMEN: u1,
    +            reserved21: u2,
    +            ///  DMA1 clock enable
    +            DMA1EN: u1,
    +            ///  DMA2 clock enable
    +            DMA2EN: u1,
    +            reserved25: u2,
    +            ///  Ethernet MAC clock enable
    +            ETHMACEN: u1,
    +            ///  Ethernet Transmission clock enable
    +            ETHMACTXEN: u1,
    +            ///  Ethernet Reception clock enable
    +            ETHMACRXEN: u1,
    +            ///  Ethernet PTP clock enable
    +            ETHMACPTPEN: u1,
    +            ///  USB OTG HS clock enable
    +            OTGHSEN: u1,
    +            ///  USB OTG HSULPI clock enable
    +            OTGHSULPIEN: u1,
    +            padding: u1,
    +        }),
    +        ///  AHB2 peripheral clock enable register
    +        AHB2ENR: mmio.Mmio(packed struct(u32) {
    +            ///  Camera interface enable
    +            DCMIEN: u1,
    +            reserved6: u5,
    +            ///  Random number generator clock enable
    +            RNGEN: u1,
    +            ///  USB OTG FS clock enable
    +            OTGFSEN: u1,
    +            padding: u24,
    +        }),
    +        ///  AHB3 peripheral clock enable register
    +        AHB3ENR: mmio.Mmio(packed struct(u32) {
    +            ///  Flexible static memory controller module clock enable
    +            FSMCEN: u1,
    +            padding: u31,
    +        }),
    +        reserved64: [4]u8,
    +        ///  APB1 peripheral clock enable register
    +        APB1ENR: mmio.Mmio(packed struct(u32) {
    +            ///  TIM2 clock enable
    +            TIM2EN: u1,
    +            ///  TIM3 clock enable
    +            TIM3EN: u1,
    +            ///  TIM4 clock enable
    +            TIM4EN: u1,
    +            ///  TIM5 clock enable
    +            TIM5EN: u1,
    +            ///  TIM6 clock enable
    +            TIM6EN: u1,
    +            ///  TIM7 clock enable
    +            TIM7EN: u1,
    +            ///  TIM12 clock enable
    +            TIM12EN: u1,
    +            ///  TIM13 clock enable
    +            TIM13EN: u1,
    +            ///  TIM14 clock enable
    +            TIM14EN: u1,
    +            reserved11: u2,
    +            ///  Window watchdog clock enable
    +            WWDGEN: u1,
    +            reserved14: u2,
    +            ///  SPI2 clock enable
    +            SPI2EN: u1,
    +            ///  SPI3 clock enable
    +            SPI3EN: u1,
    +            reserved17: u1,
    +            ///  USART 2 clock enable
    +            USART2EN: u1,
    +            ///  USART3 clock enable
    +            USART3EN: u1,
    +            ///  UART4 clock enable
    +            UART4EN: u1,
    +            ///  UART5 clock enable
    +            UART5EN: u1,
    +            ///  I2C1 clock enable
    +            I2C1EN: u1,
    +            ///  I2C2 clock enable
    +            I2C2EN: u1,
    +            ///  I2C3 clock enable
    +            I2C3EN: u1,
    +            reserved25: u1,
    +            ///  CAN 1 clock enable
    +            CAN1EN: u1,
    +            ///  CAN 2 clock enable
    +            CAN2EN: u1,
    +            reserved28: u1,
    +            ///  Power interface clock enable
    +            PWREN: u1,
    +            ///  DAC interface clock enable
    +            DACEN: u1,
    +            padding: u2,
    +        }),
    +        ///  APB2 peripheral clock enable register
    +        APB2ENR: mmio.Mmio(packed struct(u32) {
    +            ///  TIM1 clock enable
    +            TIM1EN: u1,
    +            ///  TIM8 clock enable
    +            TIM8EN: u1,
    +            reserved4: u2,
    +            ///  USART1 clock enable
    +            USART1EN: u1,
    +            ///  USART6 clock enable
    +            USART6EN: u1,
    +            reserved8: u2,
    +            ///  ADC1 clock enable
    +            ADC1EN: u1,
    +            ///  ADC2 clock enable
    +            ADC2EN: u1,
    +            ///  ADC3 clock enable
    +            ADC3EN: u1,
    +            ///  SDIO clock enable
    +            SDIOEN: u1,
    +            ///  SPI1 clock enable
    +            SPI1EN: u1,
    +            reserved14: u1,
    +            ///  System configuration controller clock enable
    +            SYSCFGEN: u1,
    +            reserved16: u1,
    +            ///  TIM9 clock enable
    +            TIM9EN: u1,
    +            ///  TIM10 clock enable
    +            TIM10EN: u1,
    +            ///  TIM11 clock enable
    +            TIM11EN: u1,
    +            padding: u13,
    +        }),
    +        reserved80: [8]u8,
    +        ///  AHB1 peripheral clock enable in low power mode register
    +        AHB1LPENR: mmio.Mmio(packed struct(u32) {
    +            ///  IO port A clock enable during sleep mode
    +            GPIOALPEN: u1,
    +            ///  IO port B clock enable during Sleep mode
    +            GPIOBLPEN: u1,
    +            ///  IO port C clock enable during Sleep mode
    +            GPIOCLPEN: u1,
    +            ///  IO port D clock enable during Sleep mode
    +            GPIODLPEN: u1,
    +            ///  IO port E clock enable during Sleep mode
    +            GPIOELPEN: u1,
    +            ///  IO port F clock enable during Sleep mode
    +            GPIOFLPEN: u1,
    +            ///  IO port G clock enable during Sleep mode
    +            GPIOGLPEN: u1,
    +            ///  IO port H clock enable during Sleep mode
    +            GPIOHLPEN: u1,
    +            ///  IO port I clock enable during Sleep mode
    +            GPIOILPEN: u1,
    +            reserved12: u3,
    +            ///  CRC clock enable during Sleep mode
    +            CRCLPEN: u1,
    +            reserved15: u2,
    +            ///  Flash interface clock enable during Sleep mode
    +            FLITFLPEN: u1,
    +            ///  SRAM 1interface clock enable during Sleep mode
    +            SRAM1LPEN: u1,
    +            ///  SRAM 2 interface clock enable during Sleep mode
    +            SRAM2LPEN: u1,
    +            ///  Backup SRAM interface clock enable during Sleep mode
    +            BKPSRAMLPEN: u1,
    +            reserved21: u2,
    +            ///  DMA1 clock enable during Sleep mode
    +            DMA1LPEN: u1,
    +            ///  DMA2 clock enable during Sleep mode
    +            DMA2LPEN: u1,
    +            reserved25: u2,
    +            ///  Ethernet MAC clock enable during Sleep mode
    +            ETHMACLPEN: u1,
    +            ///  Ethernet transmission clock enable during Sleep mode
    +            ETHMACTXLPEN: u1,
    +            ///  Ethernet reception clock enable during Sleep mode
    +            ETHMACRXLPEN: u1,
    +            ///  Ethernet PTP clock enable during Sleep mode
    +            ETHMACPTPLPEN: u1,
    +            ///  USB OTG HS clock enable during Sleep mode
    +            OTGHSLPEN: u1,
    +            ///  USB OTG HS ULPI clock enable during Sleep mode
    +            OTGHSULPILPEN: u1,
    +            padding: u1,
    +        }),
    +        ///  AHB2 peripheral clock enable in low power mode register
    +        AHB2LPENR: mmio.Mmio(packed struct(u32) {
    +            ///  Camera interface enable during Sleep mode
    +            DCMILPEN: u1,
    +            reserved6: u5,
    +            ///  Random number generator clock enable during Sleep mode
    +            RNGLPEN: u1,
    +            ///  USB OTG FS clock enable during Sleep mode
    +            OTGFSLPEN: u1,
    +            padding: u24,
    +        }),
    +        ///  AHB3 peripheral clock enable in low power mode register
    +        AHB3LPENR: mmio.Mmio(packed struct(u32) {
    +            ///  Flexible static memory controller module clock enable during Sleep mode
    +            FSMCLPEN: u1,
    +            padding: u31,
    +        }),
    +        reserved96: [4]u8,
    +        ///  APB1 peripheral clock enable in low power mode register
    +        APB1LPENR: mmio.Mmio(packed struct(u32) {
    +            ///  TIM2 clock enable during Sleep mode
    +            TIM2LPEN: u1,
    +            ///  TIM3 clock enable during Sleep mode
    +            TIM3LPEN: u1,
    +            ///  TIM4 clock enable during Sleep mode
    +            TIM4LPEN: u1,
    +            ///  TIM5 clock enable during Sleep mode
    +            TIM5LPEN: u1,
    +            ///  TIM6 clock enable during Sleep mode
    +            TIM6LPEN: u1,
    +            ///  TIM7 clock enable during Sleep mode
    +            TIM7LPEN: u1,
    +            ///  TIM12 clock enable during Sleep mode
    +            TIM12LPEN: u1,
    +            ///  TIM13 clock enable during Sleep mode
    +            TIM13LPEN: u1,
    +            ///  TIM14 clock enable during Sleep mode
    +            TIM14LPEN: u1,
    +            reserved11: u2,
    +            ///  Window watchdog clock enable during Sleep mode
    +            WWDGLPEN: u1,
    +            reserved14: u2,
    +            ///  SPI2 clock enable during Sleep mode
    +            SPI2LPEN: u1,
    +            ///  SPI3 clock enable during Sleep mode
    +            SPI3LPEN: u1,
    +            reserved17: u1,
    +            ///  USART2 clock enable during Sleep mode
    +            USART2LPEN: u1,
    +            ///  USART3 clock enable during Sleep mode
    +            USART3LPEN: u1,
    +            ///  UART4 clock enable during Sleep mode
    +            UART4LPEN: u1,
    +            ///  UART5 clock enable during Sleep mode
    +            UART5LPEN: u1,
    +            ///  I2C1 clock enable during Sleep mode
    +            I2C1LPEN: u1,
    +            ///  I2C2 clock enable during Sleep mode
    +            I2C2LPEN: u1,
    +            ///  I2C3 clock enable during Sleep mode
    +            I2C3LPEN: u1,
    +            reserved25: u1,
    +            ///  CAN 1 clock enable during Sleep mode
    +            CAN1LPEN: u1,
    +            ///  CAN 2 clock enable during Sleep mode
    +            CAN2LPEN: u1,
    +            reserved28: u1,
    +            ///  Power interface clock enable during Sleep mode
    +            PWRLPEN: u1,
    +            ///  DAC interface clock enable during Sleep mode
    +            DACLPEN: u1,
    +            padding: u2,
    +        }),
    +        ///  APB2 peripheral clock enabled in low power mode register
    +        APB2LPENR: mmio.Mmio(packed struct(u32) {
    +            ///  TIM1 clock enable during Sleep mode
    +            TIM1LPEN: u1,
    +            ///  TIM8 clock enable during Sleep mode
    +            TIM8LPEN: u1,
    +            reserved4: u2,
    +            ///  USART1 clock enable during Sleep mode
    +            USART1LPEN: u1,
    +            ///  USART6 clock enable during Sleep mode
    +            USART6LPEN: u1,
    +            reserved8: u2,
    +            ///  ADC1 clock enable during Sleep mode
    +            ADC1LPEN: u1,
    +            ///  ADC2 clock enable during Sleep mode
    +            ADC2LPEN: u1,
    +            ///  ADC 3 clock enable during Sleep mode
    +            ADC3LPEN: u1,
    +            ///  SDIO clock enable during Sleep mode
    +            SDIOLPEN: u1,
    +            ///  SPI 1 clock enable during Sleep mode
    +            SPI1LPEN: u1,
    +            reserved14: u1,
    +            ///  System configuration controller clock enable during Sleep mode
    +            SYSCFGLPEN: u1,
    +            reserved16: u1,
    +            ///  TIM9 clock enable during sleep mode
    +            TIM9LPEN: u1,
    +            ///  TIM10 clock enable during Sleep mode
    +            TIM10LPEN: u1,
    +            ///  TIM11 clock enable during Sleep mode
    +            TIM11LPEN: u1,
    +            padding: u13,
    +        }),
    +        reserved112: [8]u8,
    +        ///  Backup domain control register
    +        BDCR: mmio.Mmio(packed struct(u32) {
    +            ///  External low-speed oscillator enable
    +            LSEON: u1,
    +            ///  External low-speed oscillator ready
    +            LSERDY: u1,
    +            ///  External low-speed oscillator bypass
    +            LSEBYP: u1,
    +            reserved8: u5,
    +            ///  RTC clock source selection
    +            RTCSEL0: u1,
    +            ///  RTC clock source selection
    +            RTCSEL1: u1,
    +            reserved15: u5,
    +            ///  RTC clock enable
    +            RTCEN: u1,
    +            ///  Backup domain software reset
    +            BDRST: u1,
    +            padding: u15,
    +        }),
    +        ///  clock control & status register
    +        CSR: mmio.Mmio(packed struct(u32) {
    +            ///  Internal low-speed oscillator enable
    +            LSION: u1,
    +            ///  Internal low-speed oscillator ready
    +            LSIRDY: u1,
    +            reserved24: u22,
    +            ///  Remove reset flag
    +            RMVF: u1,
    +            ///  BOR reset flag
    +            BORRSTF: u1,
    +            ///  PIN reset flag
    +            PADRSTF: u1,
    +            ///  POR/PDR reset flag
    +            PORRSTF: u1,
    +            ///  Software reset flag
    +            SFTRSTF: u1,
    +            ///  Independent watchdog reset flag
    +            WDGRSTF: u1,
    +            ///  Window watchdog reset flag
    +            WWDGRSTF: u1,
    +            ///  Low-power reset flag
    +            LPWRRSTF: u1,
    +        }),
    +        reserved128: [8]u8,
    +        ///  spread spectrum clock generation register
    +        SSCGR: mmio.Mmio(packed struct(u32) {
    +            ///  Modulation period
    +            MODPER: u13,
    +            ///  Incrementation step
    +            INCSTEP: u15,
    +            reserved30: u2,
    +            ///  Spread Select
    +            SPREADSEL: u1,
    +            ///  Spread spectrum modulation enable
    +            SSCGEN: u1,
    +        }),
    +        ///  PLLI2S configuration register
    +        PLLI2SCFGR: mmio.Mmio(packed struct(u32) {
    +            reserved6: u6,
    +            ///  PLLI2S multiplication factor for VCO
    +            PLLI2SNx: u9,
    +            reserved28: u13,
    +            ///  PLLI2S division factor for I2S clocks
    +            PLLI2SRx: u3,
    +            padding: u1,
    +        }),
    +    };
    +
    +    ///  General-purpose I/Os
    +    pub const GPIOI = extern struct {
    +        ///  GPIO port mode register
    +        MODER: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER0: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER1: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER2: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER3: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER4: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER5: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER6: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER7: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER8: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER9: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER10: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER11: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER12: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER13: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER14: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER15: u2,
    +        }),
    +        ///  GPIO port output type register
    +        OTYPER: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            OT0: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT1: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT2: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT3: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT4: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT5: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT6: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT7: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT8: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT9: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT10: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT11: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT12: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT13: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT14: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT15: u1,
    +            padding: u16,
    +        }),
    +        ///  GPIO port output speed register
    +        OSPEEDR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR0: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR1: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR2: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR3: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR4: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR5: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR6: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR7: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR8: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR9: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR10: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR11: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR12: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR13: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR14: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR15: u2,
    +        }),
    +        ///  GPIO port pull-up/pull-down register
    +        PUPDR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR0: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR1: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR2: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR3: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR4: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR5: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR6: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR7: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR8: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR9: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR10: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR11: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR12: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR13: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR14: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR15: u2,
    +        }),
    +        ///  GPIO port input data register
    +        IDR: mmio.Mmio(packed struct(u32) {
    +            ///  Port input data (y = 0..15)
    +            IDR0: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR1: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR2: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR3: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR4: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR5: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR6: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR7: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR8: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR9: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR10: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR11: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR12: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR13: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR14: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR15: u1,
    +            padding: u16,
    +        }),
    +        ///  GPIO port output data register
    +        ODR: mmio.Mmio(packed struct(u32) {
    +            ///  Port output data (y = 0..15)
    +            ODR0: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR1: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR2: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR3: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR4: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR5: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR6: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR7: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR8: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR9: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR10: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR11: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR12: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR13: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR14: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR15: u1,
    +            padding: u16,
    +        }),
    +        ///  GPIO port bit set/reset register
    +        BSRR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x set bit y (y= 0..15)
    +            BS0: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS1: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS2: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS3: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS4: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS5: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS6: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS7: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS8: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS9: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS10: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS11: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS12: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS13: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS14: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS15: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BR0: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR1: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR2: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR3: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR4: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR5: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR6: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR7: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR8: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR9: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR10: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR11: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR12: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR13: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR14: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR15: u1,
    +        }),
    +        ///  GPIO port configuration lock register
    +        LCKR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK0: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK1: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK2: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK3: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK4: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK5: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK6: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK7: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK8: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK9: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK10: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK11: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK12: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK13: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK14: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK15: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCKK: u1,
    +            padding: u15,
    +        }),
    +        ///  GPIO alternate function low register
    +        AFRL: mmio.Mmio(packed struct(u32) {
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL0: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL1: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL2: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL3: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL4: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL5: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL6: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL7: u4,
    +        }),
    +        ///  GPIO alternate function high register
    +        AFRH: mmio.Mmio(packed struct(u32) {
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH8: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH9: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH10: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH11: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH12: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH13: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH14: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH15: u4,
    +        }),
    +    };
    +
    +    ///  Floating point unit CPACR
    +    pub const FPU_CPACR = extern struct {
    +        ///  Coprocessor access control register
    +        CPACR: mmio.Mmio(packed struct(u32) {
    +            reserved20: u20,
    +            ///  CP
    +            CP: u4,
    +            padding: u8,
    +        }),
    +    };
    +
    +    ///  Nested vectored interrupt controller
    +    pub const NVIC_STIR = extern struct {
    +        ///  Software trigger interrupt register
    +        STIR: mmio.Mmio(packed struct(u32) {
    +            ///  Software generated interrupt ID
    +            INTID: u9,
    +            padding: u23,
    +        }),
    +    };
    +
    +    ///  System control block
    +    pub const SCB = extern struct {
    +        ///  CPUID base register
    +        CPUID: mmio.Mmio(packed struct(u32) {
    +            ///  Revision number
    +            Revision: u4,
    +            ///  Part number of the processor
    +            PartNo: u12,
    +            ///  Reads as 0xF
    +            Constant: u4,
    +            ///  Variant number
    +            Variant: u4,
    +            ///  Implementer code
    +            Implementer: u8,
    +        }),
    +        ///  Interrupt control and state register
    +        ICSR: mmio.Mmio(packed struct(u32) {
    +            ///  Active vector
    +            VECTACTIVE: u9,
    +            reserved11: u2,
    +            ///  Return to base level
    +            RETTOBASE: u1,
    +            ///  Pending vector
    +            VECTPENDING: u7,
    +            reserved22: u3,
    +            ///  Interrupt pending flag
    +            ISRPENDING: u1,
    +            reserved25: u2,
    +            ///  SysTick exception clear-pending bit
    +            PENDSTCLR: u1,
    +            ///  SysTick exception set-pending bit
    +            PENDSTSET: u1,
    +            ///  PendSV clear-pending bit
    +            PENDSVCLR: u1,
    +            ///  PendSV set-pending bit
    +            PENDSVSET: u1,
    +            reserved31: u2,
    +            ///  NMI set-pending bit.
    +            NMIPENDSET: u1,
    +        }),
    +        ///  Vector table offset register
    +        VTOR: mmio.Mmio(packed struct(u32) {
    +            reserved9: u9,
    +            ///  Vector table base offset field
    +            TBLOFF: u21,
    +            padding: u2,
    +        }),
    +        ///  Application interrupt and reset control register
    +        AIRCR: mmio.Mmio(packed struct(u32) {
    +            ///  VECTRESET
    +            VECTRESET: u1,
    +            ///  VECTCLRACTIVE
    +            VECTCLRACTIVE: u1,
    +            ///  SYSRESETREQ
    +            SYSRESETREQ: u1,
    +            reserved8: u5,
    +            ///  PRIGROUP
    +            PRIGROUP: u3,
    +            reserved15: u4,
    +            ///  ENDIANESS
    +            ENDIANESS: u1,
    +            ///  Register key
    +            VECTKEYSTAT: u16,
    +        }),
    +        ///  System control register
    +        SCR: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  SLEEPONEXIT
    +            SLEEPONEXIT: u1,
    +            ///  SLEEPDEEP
    +            SLEEPDEEP: u1,
    +            reserved4: u1,
    +            ///  Send Event on Pending bit
    +            SEVEONPEND: u1,
    +            padding: u27,
    +        }),
    +        ///  Configuration and control register
    +        CCR: mmio.Mmio(packed struct(u32) {
    +            ///  Configures how the processor enters Thread mode
    +            NONBASETHRDENA: u1,
    +            ///  USERSETMPEND
    +            USERSETMPEND: u1,
    +            reserved3: u1,
    +            ///  UNALIGN_ TRP
    +            UNALIGN__TRP: u1,
    +            ///  DIV_0_TRP
    +            DIV_0_TRP: u1,
    +            reserved8: u3,
    +            ///  BFHFNMIGN
    +            BFHFNMIGN: u1,
    +            ///  STKALIGN
    +            STKALIGN: u1,
    +            padding: u22,
    +        }),
    +        ///  System handler priority registers
    +        SHPR1: mmio.Mmio(packed struct(u32) {
    +            ///  Priority of system handler 4
    +            PRI_4: u8,
    +            ///  Priority of system handler 5
    +            PRI_5: u8,
    +            ///  Priority of system handler 6
    +            PRI_6: u8,
    +            padding: u8,
    +        }),
    +        ///  System handler priority registers
    +        SHPR2: mmio.Mmio(packed struct(u32) {
    +            reserved24: u24,
    +            ///  Priority of system handler 11
    +            PRI_11: u8,
    +        }),
    +        ///  System handler priority registers
    +        SHPR3: mmio.Mmio(packed struct(u32) {
    +            reserved16: u16,
    +            ///  Priority of system handler 14
    +            PRI_14: u8,
    +            ///  Priority of system handler 15
    +            PRI_15: u8,
    +        }),
    +        ///  System handler control and state register
    +        SHCRS: mmio.Mmio(packed struct(u32) {
    +            ///  Memory management fault exception active bit
    +            MEMFAULTACT: u1,
    +            ///  Bus fault exception active bit
    +            BUSFAULTACT: u1,
    +            reserved3: u1,
    +            ///  Usage fault exception active bit
    +            USGFAULTACT: u1,
    +            reserved7: u3,
    +            ///  SVC call active bit
    +            SVCALLACT: u1,
    +            ///  Debug monitor active bit
    +            MONITORACT: u1,
    +            reserved10: u1,
    +            ///  PendSV exception active bit
    +            PENDSVACT: u1,
    +            ///  SysTick exception active bit
    +            SYSTICKACT: u1,
    +            ///  Usage fault exception pending bit
    +            USGFAULTPENDED: u1,
    +            ///  Memory management fault exception pending bit
    +            MEMFAULTPENDED: u1,
    +            ///  Bus fault exception pending bit
    +            BUSFAULTPENDED: u1,
    +            ///  SVC call pending bit
    +            SVCALLPENDED: u1,
    +            ///  Memory management fault enable bit
    +            MEMFAULTENA: u1,
    +            ///  Bus fault enable bit
    +            BUSFAULTENA: u1,
    +            ///  Usage fault enable bit
    +            USGFAULTENA: u1,
    +            padding: u13,
    +        }),
    +        ///  Configurable fault status register
    +        CFSR_UFSR_BFSR_MMFSR: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  Instruction access violation flag
    +            IACCVIOL: u1,
    +            reserved3: u1,
    +            ///  Memory manager fault on unstacking for a return from exception
    +            MUNSTKERR: u1,
    +            ///  Memory manager fault on stacking for exception entry.
    +            MSTKERR: u1,
    +            ///  MLSPERR
    +            MLSPERR: u1,
    +            reserved7: u1,
    +            ///  Memory Management Fault Address Register (MMAR) valid flag
    +            MMARVALID: u1,
    +            ///  Instruction bus error
    +            IBUSERR: u1,
    +            ///  Precise data bus error
    +            PRECISERR: u1,
    +            ///  Imprecise data bus error
    +            IMPRECISERR: u1,
    +            ///  Bus fault on unstacking for a return from exception
    +            UNSTKERR: u1,
    +            ///  Bus fault on stacking for exception entry
    +            STKERR: u1,
    +            ///  Bus fault on floating-point lazy state preservation
    +            LSPERR: u1,
    +            reserved15: u1,
    +            ///  Bus Fault Address Register (BFAR) valid flag
    +            BFARVALID: u1,
    +            ///  Undefined instruction usage fault
    +            UNDEFINSTR: u1,
    +            ///  Invalid state usage fault
    +            INVSTATE: u1,
    +            ///  Invalid PC load usage fault
    +            INVPC: u1,
    +            ///  No coprocessor usage fault.
    +            NOCP: u1,
    +            reserved24: u4,
    +            ///  Unaligned access usage fault
    +            UNALIGNED: u1,
    +            ///  Divide by zero usage fault
    +            DIVBYZERO: u1,
    +            padding: u6,
    +        }),
    +        ///  Hard fault status register
    +        HFSR: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  Vector table hard fault
    +            VECTTBL: u1,
    +            reserved30: u28,
    +            ///  Forced hard fault
    +            FORCED: u1,
    +            ///  Reserved for Debug use
    +            DEBUG_VT: u1,
    +        }),
    +        reserved52: [4]u8,
    +        ///  Memory management fault address register
    +        MMFAR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory management fault address
    +            MMFAR: u32,
    +        }),
    +        ///  Bus fault address register
    +        BFAR: mmio.Mmio(packed struct(u32) {
    +            ///  Bus fault address
    +            BFAR: u32,
    +        }),
    +        ///  Auxiliary fault status register
    +        AFSR: mmio.Mmio(packed struct(u32) {
    +            ///  Implementation defined
    +            IMPDEF: u32,
    +        }),
    +    };
    +
    +    ///  SysTick timer
    +    pub const STK = extern struct {
    +        ///  SysTick control and status register
    +        CTRL: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            ENABLE: u1,
    +            ///  SysTick exception request enable
    +            TICKINT: u1,
    +            ///  Clock source selection
    +            CLKSOURCE: u1,
    +            reserved16: u13,
    +            ///  COUNTFLAG
    +            COUNTFLAG: u1,
    +            padding: u15,
    +        }),
    +        ///  SysTick reload value register
    +        LOAD: mmio.Mmio(packed struct(u32) {
    +            ///  RELOAD value
    +            RELOAD: u24,
    +            padding: u8,
    +        }),
    +        ///  SysTick current value register
    +        VAL: mmio.Mmio(packed struct(u32) {
    +            ///  Current counter value
    +            CURRENT: u24,
    +            padding: u8,
    +        }),
    +        ///  SysTick calibration value register
    +        CALIB: mmio.Mmio(packed struct(u32) {
    +            ///  Calibration value
    +            TENMS: u24,
    +            reserved30: u6,
    +            ///  SKEW flag: Indicates whether the TENMS value is exact
    +            SKEW: u1,
    +            ///  NOREF flag. Reads as zero
    +            NOREF: u1,
    +        }),
    +    };
    +
    +    ///  Memory protection unit
    +    pub const MPU = extern struct {
    +        ///  MPU type register
    +        MPU_TYPER: mmio.Mmio(packed struct(u32) {
    +            ///  Separate flag
    +            SEPARATE: u1,
    +            reserved8: u7,
    +            ///  Number of MPU data regions
    +            DREGION: u8,
    +            ///  Number of MPU instruction regions
    +            IREGION: u8,
    +            padding: u8,
    +        }),
    +        ///  MPU control register
    +        MPU_CTRL: mmio.Mmio(packed struct(u32) {
    +            ///  Enables the MPU
    +            ENABLE: u1,
    +            ///  Enables the operation of MPU during hard fault
    +            HFNMIENA: u1,
    +            ///  Enable priviliged software access to default memory map
    +            PRIVDEFENA: u1,
    +            padding: u29,
    +        }),
    +        ///  MPU region number register
    +        MPU_RNR: mmio.Mmio(packed struct(u32) {
    +            ///  MPU region
    +            REGION: u8,
    +            padding: u24,
    +        }),
    +        ///  MPU region base address register
    +        MPU_RBAR: mmio.Mmio(packed struct(u32) {
    +            ///  MPU region field
    +            REGION: u4,
    +            ///  MPU region number valid
    +            VALID: u1,
    +            ///  Region base address field
    +            ADDR: u27,
    +        }),
    +        ///  MPU region attribute and size register
    +        MPU_RASR: mmio.Mmio(packed struct(u32) {
    +            ///  Region enable bit.
    +            ENABLE: u1,
    +            ///  Size of the MPU protection region
    +            SIZE: u5,
    +            reserved8: u2,
    +            ///  Subregion disable bits
    +            SRD: u8,
    +            ///  memory attribute
    +            B: u1,
    +            ///  memory attribute
    +            C: u1,
    +            ///  Shareable memory attribute
    +            S: u1,
    +            ///  memory attribute
    +            TEX: u3,
    +            reserved24: u2,
    +            ///  Access permission
    +            AP: u3,
    +            reserved28: u1,
    +            ///  Instruction access disable bit
    +            XN: u1,
    +            padding: u3,
    +        }),
    +    };
    +
    +    ///  Floting point unit
    +    pub const FPU = extern struct {
    +        ///  Floating-point context control register
    +        FPCCR: mmio.Mmio(packed struct(u32) {
    +            ///  LSPACT
    +            LSPACT: u1,
    +            ///  USER
    +            USER: u1,
    +            reserved3: u1,
    +            ///  THREAD
    +            THREAD: u1,
    +            ///  HFRDY
    +            HFRDY: u1,
    +            ///  MMRDY
    +            MMRDY: u1,
    +            ///  BFRDY
    +            BFRDY: u1,
    +            reserved8: u1,
    +            ///  MONRDY
    +            MONRDY: u1,
    +            reserved30: u21,
    +            ///  LSPEN
    +            LSPEN: u1,
    +            ///  ASPEN
    +            ASPEN: u1,
    +        }),
    +        ///  Floating-point context address register
    +        FPCAR: mmio.Mmio(packed struct(u32) {
    +            reserved3: u3,
    +            ///  Location of unpopulated floating-point
    +            ADDRESS: u29,
    +        }),
    +        ///  Floating-point status control register
    +        FPSCR: mmio.Mmio(packed struct(u32) {
    +            ///  Invalid operation cumulative exception bit
    +            IOC: u1,
    +            ///  Division by zero cumulative exception bit.
    +            DZC: u1,
    +            ///  Overflow cumulative exception bit
    +            OFC: u1,
    +            ///  Underflow cumulative exception bit
    +            UFC: u1,
    +            ///  Inexact cumulative exception bit
    +            IXC: u1,
    +            reserved7: u2,
    +            ///  Input denormal cumulative exception bit.
    +            IDC: u1,
    +            reserved22: u14,
    +            ///  Rounding Mode control field
    +            RMode: u2,
    +            ///  Flush-to-zero mode control bit:
    +            FZ: u1,
    +            ///  Default NaN mode control bit
    +            DN: u1,
    +            ///  Alternative half-precision control bit
    +            AHP: u1,
    +            reserved28: u1,
    +            ///  Overflow condition code flag
    +            V: u1,
    +            ///  Carry condition code flag
    +            C: u1,
    +            ///  Zero condition code flag
    +            Z: u1,
    +            ///  Negative condition code flag
    +            N: u1,
    +        }),
    +    };
    +
    +    ///  Cryptographic processor
    +    pub const CRYP = extern struct {
    +        ///  control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            reserved2: u2,
    +            ///  Algorithm direction
    +            ALGODIR: u1,
    +            ///  Algorithm mode
    +            ALGOMODE0: u3,
    +            ///  Data type selection
    +            DATATYPE: u2,
    +            ///  Key size selection (AES mode only)
    +            KEYSIZE: u2,
    +            reserved14: u4,
    +            ///  FIFO flush
    +            FFLUSH: u1,
    +            ///  Cryptographic processor enable
    +            CRYPEN: u1,
    +            ///  GCM_CCMPH
    +            GCM_CCMPH: u2,
    +            reserved19: u1,
    +            ///  ALGOMODE
    +            ALGOMODE3: u1,
    +            padding: u12,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Input FIFO empty
    +            IFEM: u1,
    +            ///  Input FIFO not full
    +            IFNF: u1,
    +            ///  Output FIFO not empty
    +            OFNE: u1,
    +            ///  Output FIFO full
    +            OFFU: u1,
    +            ///  Busy bit
    +            BUSY: u1,
    +            padding: u27,
    +        }),
    +        ///  data input register
    +        DIN: mmio.Mmio(packed struct(u32) {
    +            ///  Data input
    +            DATAIN: u32,
    +        }),
    +        ///  data output register
    +        DOUT: mmio.Mmio(packed struct(u32) {
    +            ///  Data output
    +            DATAOUT: u32,
    +        }),
    +        ///  DMA control register
    +        DMACR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA input enable
    +            DIEN: u1,
    +            ///  DMA output enable
    +            DOEN: u1,
    +            padding: u30,
    +        }),
    +        ///  interrupt mask set/clear register
    +        IMSCR: mmio.Mmio(packed struct(u32) {
    +            ///  Input FIFO service interrupt mask
    +            INIM: u1,
    +            ///  Output FIFO service interrupt mask
    +            OUTIM: u1,
    +            padding: u30,
    +        }),
    +        ///  raw interrupt status register
    +        RISR: mmio.Mmio(packed struct(u32) {
    +            ///  Input FIFO service raw interrupt status
    +            INRIS: u1,
    +            ///  Output FIFO service raw interrupt status
    +            OUTRIS: u1,
    +            padding: u30,
    +        }),
    +        ///  masked interrupt status register
    +        MISR: mmio.Mmio(packed struct(u32) {
    +            ///  Input FIFO service masked interrupt status
    +            INMIS: u1,
    +            ///  Output FIFO service masked interrupt status
    +            OUTMIS: u1,
    +            padding: u30,
    +        }),
    +        ///  key registers
    +        K0LR: mmio.Mmio(packed struct(u32) {
    +            ///  b224
    +            b224: u1,
    +            ///  b225
    +            b225: u1,
    +            ///  b226
    +            b226: u1,
    +            ///  b227
    +            b227: u1,
    +            ///  b228
    +            b228: u1,
    +            ///  b229
    +            b229: u1,
    +            ///  b230
    +            b230: u1,
    +            ///  b231
    +            b231: u1,
    +            ///  b232
    +            b232: u1,
    +            ///  b233
    +            b233: u1,
    +            ///  b234
    +            b234: u1,
    +            ///  b235
    +            b235: u1,
    +            ///  b236
    +            b236: u1,
    +            ///  b237
    +            b237: u1,
    +            ///  b238
    +            b238: u1,
    +            ///  b239
    +            b239: u1,
    +            ///  b240
    +            b240: u1,
    +            ///  b241
    +            b241: u1,
    +            ///  b242
    +            b242: u1,
    +            ///  b243
    +            b243: u1,
    +            ///  b244
    +            b244: u1,
    +            ///  b245
    +            b245: u1,
    +            ///  b246
    +            b246: u1,
    +            ///  b247
    +            b247: u1,
    +            ///  b248
    +            b248: u1,
    +            ///  b249
    +            b249: u1,
    +            ///  b250
    +            b250: u1,
    +            ///  b251
    +            b251: u1,
    +            ///  b252
    +            b252: u1,
    +            ///  b253
    +            b253: u1,
    +            ///  b254
    +            b254: u1,
    +            ///  b255
    +            b255: u1,
    +        }),
    +        ///  key registers
    +        K0RR: mmio.Mmio(packed struct(u32) {
    +            ///  b192
    +            b192: u1,
    +            ///  b193
    +            b193: u1,
    +            ///  b194
    +            b194: u1,
    +            ///  b195
    +            b195: u1,
    +            ///  b196
    +            b196: u1,
    +            ///  b197
    +            b197: u1,
    +            ///  b198
    +            b198: u1,
    +            ///  b199
    +            b199: u1,
    +            ///  b200
    +            b200: u1,
    +            ///  b201
    +            b201: u1,
    +            ///  b202
    +            b202: u1,
    +            ///  b203
    +            b203: u1,
    +            ///  b204
    +            b204: u1,
    +            ///  b205
    +            b205: u1,
    +            ///  b206
    +            b206: u1,
    +            ///  b207
    +            b207: u1,
    +            ///  b208
    +            b208: u1,
    +            ///  b209
    +            b209: u1,
    +            ///  b210
    +            b210: u1,
    +            ///  b211
    +            b211: u1,
    +            ///  b212
    +            b212: u1,
    +            ///  b213
    +            b213: u1,
    +            ///  b214
    +            b214: u1,
    +            ///  b215
    +            b215: u1,
    +            ///  b216
    +            b216: u1,
    +            ///  b217
    +            b217: u1,
    +            ///  b218
    +            b218: u1,
    +            ///  b219
    +            b219: u1,
    +            ///  b220
    +            b220: u1,
    +            ///  b221
    +            b221: u1,
    +            ///  b222
    +            b222: u1,
    +            ///  b223
    +            b223: u1,
    +        }),
    +        ///  key registers
    +        K1LR: mmio.Mmio(packed struct(u32) {
    +            ///  b160
    +            b160: u1,
    +            ///  b161
    +            b161: u1,
    +            ///  b162
    +            b162: u1,
    +            ///  b163
    +            b163: u1,
    +            ///  b164
    +            b164: u1,
    +            ///  b165
    +            b165: u1,
    +            ///  b166
    +            b166: u1,
    +            ///  b167
    +            b167: u1,
    +            ///  b168
    +            b168: u1,
    +            ///  b169
    +            b169: u1,
    +            ///  b170
    +            b170: u1,
    +            ///  b171
    +            b171: u1,
    +            ///  b172
    +            b172: u1,
    +            ///  b173
    +            b173: u1,
    +            ///  b174
    +            b174: u1,
    +            ///  b175
    +            b175: u1,
    +            ///  b176
    +            b176: u1,
    +            ///  b177
    +            b177: u1,
    +            ///  b178
    +            b178: u1,
    +            ///  b179
    +            b179: u1,
    +            ///  b180
    +            b180: u1,
    +            ///  b181
    +            b181: u1,
    +            ///  b182
    +            b182: u1,
    +            ///  b183
    +            b183: u1,
    +            ///  b184
    +            b184: u1,
    +            ///  b185
    +            b185: u1,
    +            ///  b186
    +            b186: u1,
    +            ///  b187
    +            b187: u1,
    +            ///  b188
    +            b188: u1,
    +            ///  b189
    +            b189: u1,
    +            ///  b190
    +            b190: u1,
    +            ///  b191
    +            b191: u1,
    +        }),
    +        ///  key registers
    +        K1RR: mmio.Mmio(packed struct(u32) {
    +            ///  b128
    +            b128: u1,
    +            ///  b129
    +            b129: u1,
    +            ///  b130
    +            b130: u1,
    +            ///  b131
    +            b131: u1,
    +            ///  b132
    +            b132: u1,
    +            ///  b133
    +            b133: u1,
    +            ///  b134
    +            b134: u1,
    +            ///  b135
    +            b135: u1,
    +            ///  b136
    +            b136: u1,
    +            ///  b137
    +            b137: u1,
    +            ///  b138
    +            b138: u1,
    +            ///  b139
    +            b139: u1,
    +            ///  b140
    +            b140: u1,
    +            ///  b141
    +            b141: u1,
    +            ///  b142
    +            b142: u1,
    +            ///  b143
    +            b143: u1,
    +            ///  b144
    +            b144: u1,
    +            ///  b145
    +            b145: u1,
    +            ///  b146
    +            b146: u1,
    +            ///  b147
    +            b147: u1,
    +            ///  b148
    +            b148: u1,
    +            ///  b149
    +            b149: u1,
    +            ///  b150
    +            b150: u1,
    +            ///  b151
    +            b151: u1,
    +            ///  b152
    +            b152: u1,
    +            ///  b153
    +            b153: u1,
    +            ///  b154
    +            b154: u1,
    +            ///  b155
    +            b155: u1,
    +            ///  b156
    +            b156: u1,
    +            ///  b157
    +            b157: u1,
    +            ///  b158
    +            b158: u1,
    +            ///  b159
    +            b159: u1,
    +        }),
    +        ///  key registers
    +        K2LR: mmio.Mmio(packed struct(u32) {
    +            ///  b96
    +            b96: u1,
    +            ///  b97
    +            b97: u1,
    +            ///  b98
    +            b98: u1,
    +            ///  b99
    +            b99: u1,
    +            ///  b100
    +            b100: u1,
    +            ///  b101
    +            b101: u1,
    +            ///  b102
    +            b102: u1,
    +            ///  b103
    +            b103: u1,
    +            ///  b104
    +            b104: u1,
    +            ///  b105
    +            b105: u1,
    +            ///  b106
    +            b106: u1,
    +            ///  b107
    +            b107: u1,
    +            ///  b108
    +            b108: u1,
    +            ///  b109
    +            b109: u1,
    +            ///  b110
    +            b110: u1,
    +            ///  b111
    +            b111: u1,
    +            ///  b112
    +            b112: u1,
    +            ///  b113
    +            b113: u1,
    +            ///  b114
    +            b114: u1,
    +            ///  b115
    +            b115: u1,
    +            ///  b116
    +            b116: u1,
    +            ///  b117
    +            b117: u1,
    +            ///  b118
    +            b118: u1,
    +            ///  b119
    +            b119: u1,
    +            ///  b120
    +            b120: u1,
    +            ///  b121
    +            b121: u1,
    +            ///  b122
    +            b122: u1,
    +            ///  b123
    +            b123: u1,
    +            ///  b124
    +            b124: u1,
    +            ///  b125
    +            b125: u1,
    +            ///  b126
    +            b126: u1,
    +            ///  b127
    +            b127: u1,
    +        }),
    +        ///  key registers
    +        K2RR: mmio.Mmio(packed struct(u32) {
    +            ///  b64
    +            b64: u1,
    +            ///  b65
    +            b65: u1,
    +            ///  b66
    +            b66: u1,
    +            ///  b67
    +            b67: u1,
    +            ///  b68
    +            b68: u1,
    +            ///  b69
    +            b69: u1,
    +            ///  b70
    +            b70: u1,
    +            ///  b71
    +            b71: u1,
    +            ///  b72
    +            b72: u1,
    +            ///  b73
    +            b73: u1,
    +            ///  b74
    +            b74: u1,
    +            ///  b75
    +            b75: u1,
    +            ///  b76
    +            b76: u1,
    +            ///  b77
    +            b77: u1,
    +            ///  b78
    +            b78: u1,
    +            ///  b79
    +            b79: u1,
    +            ///  b80
    +            b80: u1,
    +            ///  b81
    +            b81: u1,
    +            ///  b82
    +            b82: u1,
    +            ///  b83
    +            b83: u1,
    +            ///  b84
    +            b84: u1,
    +            ///  b85
    +            b85: u1,
    +            ///  b86
    +            b86: u1,
    +            ///  b87
    +            b87: u1,
    +            ///  b88
    +            b88: u1,
    +            ///  b89
    +            b89: u1,
    +            ///  b90
    +            b90: u1,
    +            ///  b91
    +            b91: u1,
    +            ///  b92
    +            b92: u1,
    +            ///  b93
    +            b93: u1,
    +            ///  b94
    +            b94: u1,
    +            ///  b95
    +            b95: u1,
    +        }),
    +        ///  key registers
    +        K3LR: mmio.Mmio(packed struct(u32) {
    +            ///  b32
    +            b32: u1,
    +            ///  b33
    +            b33: u1,
    +            ///  b34
    +            b34: u1,
    +            ///  b35
    +            b35: u1,
    +            ///  b36
    +            b36: u1,
    +            ///  b37
    +            b37: u1,
    +            ///  b38
    +            b38: u1,
    +            ///  b39
    +            b39: u1,
    +            ///  b40
    +            b40: u1,
    +            ///  b41
    +            b41: u1,
    +            ///  b42
    +            b42: u1,
    +            ///  b43
    +            b43: u1,
    +            ///  b44
    +            b44: u1,
    +            ///  b45
    +            b45: u1,
    +            ///  b46
    +            b46: u1,
    +            ///  b47
    +            b47: u1,
    +            ///  b48
    +            b48: u1,
    +            ///  b49
    +            b49: u1,
    +            ///  b50
    +            b50: u1,
    +            ///  b51
    +            b51: u1,
    +            ///  b52
    +            b52: u1,
    +            ///  b53
    +            b53: u1,
    +            ///  b54
    +            b54: u1,
    +            ///  b55
    +            b55: u1,
    +            ///  b56
    +            b56: u1,
    +            ///  b57
    +            b57: u1,
    +            ///  b58
    +            b58: u1,
    +            ///  b59
    +            b59: u1,
    +            ///  b60
    +            b60: u1,
    +            ///  b61
    +            b61: u1,
    +            ///  b62
    +            b62: u1,
    +            ///  b63
    +            b63: u1,
    +        }),
    +        ///  key registers
    +        K3RR: mmio.Mmio(packed struct(u32) {
    +            ///  b0
    +            b0: u1,
    +            ///  b1
    +            b1: u1,
    +            ///  b2
    +            b2: u1,
    +            ///  b3
    +            b3: u1,
    +            ///  b4
    +            b4: u1,
    +            ///  b5
    +            b5: u1,
    +            ///  b6
    +            b6: u1,
    +            ///  b7
    +            b7: u1,
    +            ///  b8
    +            b8: u1,
    +            ///  b9
    +            b9: u1,
    +            ///  b10
    +            b10: u1,
    +            ///  b11
    +            b11: u1,
    +            ///  b12
    +            b12: u1,
    +            ///  b13
    +            b13: u1,
    +            ///  b14
    +            b14: u1,
    +            ///  b15
    +            b15: u1,
    +            ///  b16
    +            b16: u1,
    +            ///  b17
    +            b17: u1,
    +            ///  b18
    +            b18: u1,
    +            ///  b19
    +            b19: u1,
    +            ///  b20
    +            b20: u1,
    +            ///  b21
    +            b21: u1,
    +            ///  b22
    +            b22: u1,
    +            ///  b23
    +            b23: u1,
    +            ///  b24
    +            b24: u1,
    +            ///  b25
    +            b25: u1,
    +            ///  b26
    +            b26: u1,
    +            ///  b27
    +            b27: u1,
    +            ///  b28
    +            b28: u1,
    +            ///  b29
    +            b29: u1,
    +            ///  b30
    +            b30: u1,
    +            ///  b31
    +            b31: u1,
    +        }),
    +        ///  initialization vector registers
    +        IV0LR: mmio.Mmio(packed struct(u32) {
    +            ///  IV31
    +            IV31: u1,
    +            ///  IV30
    +            IV30: u1,
    +            ///  IV29
    +            IV29: u1,
    +            ///  IV28
    +            IV28: u1,
    +            ///  IV27
    +            IV27: u1,
    +            ///  IV26
    +            IV26: u1,
    +            ///  IV25
    +            IV25: u1,
    +            ///  IV24
    +            IV24: u1,
    +            ///  IV23
    +            IV23: u1,
    +            ///  IV22
    +            IV22: u1,
    +            ///  IV21
    +            IV21: u1,
    +            ///  IV20
    +            IV20: u1,
    +            ///  IV19
    +            IV19: u1,
    +            ///  IV18
    +            IV18: u1,
    +            ///  IV17
    +            IV17: u1,
    +            ///  IV16
    +            IV16: u1,
    +            ///  IV15
    +            IV15: u1,
    +            ///  IV14
    +            IV14: u1,
    +            ///  IV13
    +            IV13: u1,
    +            ///  IV12
    +            IV12: u1,
    +            ///  IV11
    +            IV11: u1,
    +            ///  IV10
    +            IV10: u1,
    +            ///  IV9
    +            IV9: u1,
    +            ///  IV8
    +            IV8: u1,
    +            ///  IV7
    +            IV7: u1,
    +            ///  IV6
    +            IV6: u1,
    +            ///  IV5
    +            IV5: u1,
    +            ///  IV4
    +            IV4: u1,
    +            ///  IV3
    +            IV3: u1,
    +            ///  IV2
    +            IV2: u1,
    +            ///  IV1
    +            IV1: u1,
    +            ///  IV0
    +            IV0: u1,
    +        }),
    +        ///  initialization vector registers
    +        IV0RR: mmio.Mmio(packed struct(u32) {
    +            ///  IV63
    +            IV63: u1,
    +            ///  IV62
    +            IV62: u1,
    +            ///  IV61
    +            IV61: u1,
    +            ///  IV60
    +            IV60: u1,
    +            ///  IV59
    +            IV59: u1,
    +            ///  IV58
    +            IV58: u1,
    +            ///  IV57
    +            IV57: u1,
    +            ///  IV56
    +            IV56: u1,
    +            ///  IV55
    +            IV55: u1,
    +            ///  IV54
    +            IV54: u1,
    +            ///  IV53
    +            IV53: u1,
    +            ///  IV52
    +            IV52: u1,
    +            ///  IV51
    +            IV51: u1,
    +            ///  IV50
    +            IV50: u1,
    +            ///  IV49
    +            IV49: u1,
    +            ///  IV48
    +            IV48: u1,
    +            ///  IV47
    +            IV47: u1,
    +            ///  IV46
    +            IV46: u1,
    +            ///  IV45
    +            IV45: u1,
    +            ///  IV44
    +            IV44: u1,
    +            ///  IV43
    +            IV43: u1,
    +            ///  IV42
    +            IV42: u1,
    +            ///  IV41
    +            IV41: u1,
    +            ///  IV40
    +            IV40: u1,
    +            ///  IV39
    +            IV39: u1,
    +            ///  IV38
    +            IV38: u1,
    +            ///  IV37
    +            IV37: u1,
    +            ///  IV36
    +            IV36: u1,
    +            ///  IV35
    +            IV35: u1,
    +            ///  IV34
    +            IV34: u1,
    +            ///  IV33
    +            IV33: u1,
    +            ///  IV32
    +            IV32: u1,
    +        }),
    +        ///  initialization vector registers
    +        IV1LR: mmio.Mmio(packed struct(u32) {
    +            ///  IV95
    +            IV95: u1,
    +            ///  IV94
    +            IV94: u1,
    +            ///  IV93
    +            IV93: u1,
    +            ///  IV92
    +            IV92: u1,
    +            ///  IV91
    +            IV91: u1,
    +            ///  IV90
    +            IV90: u1,
    +            ///  IV89
    +            IV89: u1,
    +            ///  IV88
    +            IV88: u1,
    +            ///  IV87
    +            IV87: u1,
    +            ///  IV86
    +            IV86: u1,
    +            ///  IV85
    +            IV85: u1,
    +            ///  IV84
    +            IV84: u1,
    +            ///  IV83
    +            IV83: u1,
    +            ///  IV82
    +            IV82: u1,
    +            ///  IV81
    +            IV81: u1,
    +            ///  IV80
    +            IV80: u1,
    +            ///  IV79
    +            IV79: u1,
    +            ///  IV78
    +            IV78: u1,
    +            ///  IV77
    +            IV77: u1,
    +            ///  IV76
    +            IV76: u1,
    +            ///  IV75
    +            IV75: u1,
    +            ///  IV74
    +            IV74: u1,
    +            ///  IV73
    +            IV73: u1,
    +            ///  IV72
    +            IV72: u1,
    +            ///  IV71
    +            IV71: u1,
    +            ///  IV70
    +            IV70: u1,
    +            ///  IV69
    +            IV69: u1,
    +            ///  IV68
    +            IV68: u1,
    +            ///  IV67
    +            IV67: u1,
    +            ///  IV66
    +            IV66: u1,
    +            ///  IV65
    +            IV65: u1,
    +            ///  IV64
    +            IV64: u1,
    +        }),
    +        ///  initialization vector registers
    +        IV1RR: mmio.Mmio(packed struct(u32) {
    +            ///  IV127
    +            IV127: u1,
    +            ///  IV126
    +            IV126: u1,
    +            ///  IV125
    +            IV125: u1,
    +            ///  IV124
    +            IV124: u1,
    +            ///  IV123
    +            IV123: u1,
    +            ///  IV122
    +            IV122: u1,
    +            ///  IV121
    +            IV121: u1,
    +            ///  IV120
    +            IV120: u1,
    +            ///  IV119
    +            IV119: u1,
    +            ///  IV118
    +            IV118: u1,
    +            ///  IV117
    +            IV117: u1,
    +            ///  IV116
    +            IV116: u1,
    +            ///  IV115
    +            IV115: u1,
    +            ///  IV114
    +            IV114: u1,
    +            ///  IV113
    +            IV113: u1,
    +            ///  IV112
    +            IV112: u1,
    +            ///  IV111
    +            IV111: u1,
    +            ///  IV110
    +            IV110: u1,
    +            ///  IV109
    +            IV109: u1,
    +            ///  IV108
    +            IV108: u1,
    +            ///  IV107
    +            IV107: u1,
    +            ///  IV106
    +            IV106: u1,
    +            ///  IV105
    +            IV105: u1,
    +            ///  IV104
    +            IV104: u1,
    +            ///  IV103
    +            IV103: u1,
    +            ///  IV102
    +            IV102: u1,
    +            ///  IV101
    +            IV101: u1,
    +            ///  IV100
    +            IV100: u1,
    +            ///  IV99
    +            IV99: u1,
    +            ///  IV98
    +            IV98: u1,
    +            ///  IV97
    +            IV97: u1,
    +            ///  IV96
    +            IV96: u1,
    +        }),
    +        ///  context swap register
    +        CSGCMCCM0R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCMCCM0R
    +            CSGCMCCM0R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCMCCM1R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCMCCM1R
    +            CSGCMCCM1R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCMCCM2R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCMCCM2R
    +            CSGCMCCM2R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCMCCM3R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCMCCM3R
    +            CSGCMCCM3R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCMCCM4R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCMCCM4R
    +            CSGCMCCM4R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCMCCM5R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCMCCM5R
    +            CSGCMCCM5R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCMCCM6R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCMCCM6R
    +            CSGCMCCM6R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCMCCM7R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCMCCM7R
    +            CSGCMCCM7R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCM0R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCM0R
    +            CSGCM0R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCM1R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCM1R
    +            CSGCM1R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCM2R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCM2R
    +            CSGCM2R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCM3R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCM3R
    +            CSGCM3R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCM4R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCM4R
    +            CSGCM4R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCM5R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCM5R
    +            CSGCM5R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCM6R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCM6R
    +            CSGCM6R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCM7R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCM7R
    +            CSGCM7R: u32,
    +        }),
    +    };
    +
    +    ///  Hash processor
    +    pub const HASH = extern struct {
    +        ///  control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            reserved2: u2,
    +            ///  Initialize message digest calculation
    +            INIT: u1,
    +            ///  DMA enable
    +            DMAE: u1,
    +            ///  Data type selection
    +            DATATYPE: u2,
    +            ///  Mode selection
    +            MODE: u1,
    +            ///  Algorithm selection
    +            ALGO0: u1,
    +            ///  Number of words already pushed
    +            NBW: u4,
    +            ///  DIN not empty
    +            DINNE: u1,
    +            ///  Multiple DMA Transfers
    +            MDMAT: u1,
    +            reserved16: u2,
    +            ///  Long key selection
    +            LKEY: u1,
    +            reserved18: u1,
    +            ///  ALGO
    +            ALGO1: u1,
    +            padding: u13,
    +        }),
    +        ///  data input register
    +        DIN: mmio.Mmio(packed struct(u32) {
    +            ///  Data input
    +            DATAIN: u32,
    +        }),
    +        ///  start register
    +        STR: mmio.Mmio(packed struct(u32) {
    +            ///  Number of valid bits in the last word of the message
    +            NBLW: u5,
    +            reserved8: u3,
    +            ///  Digest calculation
    +            DCAL: u1,
    +            padding: u23,
    +        }),
    +        ///  digest registers
    +        HR0: mmio.Mmio(packed struct(u32) {
    +            ///  H0
    +            H0: u32,
    +        }),
    +        ///  digest registers
    +        HR1: mmio.Mmio(packed struct(u32) {
    +            ///  H1
    +            H1: u32,
    +        }),
    +        ///  digest registers
    +        HR2: mmio.Mmio(packed struct(u32) {
    +            ///  H2
    +            H2: u32,
    +        }),
    +        ///  digest registers
    +        HR3: mmio.Mmio(packed struct(u32) {
    +            ///  H3
    +            H3: u32,
    +        }),
    +        ///  digest registers
    +        HR4: mmio.Mmio(packed struct(u32) {
    +            ///  H4
    +            H4: u32,
    +        }),
    +        ///  interrupt enable register
    +        IMR: mmio.Mmio(packed struct(u32) {
    +            ///  Data input interrupt enable
    +            DINIE: u1,
    +            ///  Digest calculation completion interrupt enable
    +            DCIE: u1,
    +            padding: u30,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Data input interrupt status
    +            DINIS: u1,
    +            ///  Digest calculation completion interrupt status
    +            DCIS: u1,
    +            ///  DMA Status
    +            DMAS: u1,
    +            ///  Busy bit
    +            BUSY: u1,
    +            padding: u28,
    +        }),
    +        reserved248: [208]u8,
    +        ///  context swap registers
    +        CSR0: mmio.Mmio(packed struct(u32) {
    +            ///  CSR0
    +            CSR0: u32,
    +        }),
    +        ///  context swap registers
    +        CSR1: mmio.Mmio(packed struct(u32) {
    +            ///  CSR1
    +            CSR1: u32,
    +        }),
    +        ///  context swap registers
    +        CSR2: mmio.Mmio(packed struct(u32) {
    +            ///  CSR2
    +            CSR2: u32,
    +        }),
    +        ///  context swap registers
    +        CSR3: mmio.Mmio(packed struct(u32) {
    +            ///  CSR3
    +            CSR3: u32,
    +        }),
    +        ///  context swap registers
    +        CSR4: mmio.Mmio(packed struct(u32) {
    +            ///  CSR4
    +            CSR4: u32,
    +        }),
    +        ///  context swap registers
    +        CSR5: mmio.Mmio(packed struct(u32) {
    +            ///  CSR5
    +            CSR5: u32,
    +        }),
    +        ///  context swap registers
    +        CSR6: mmio.Mmio(packed struct(u32) {
    +            ///  CSR6
    +            CSR6: u32,
    +        }),
    +        ///  context swap registers
    +        CSR7: mmio.Mmio(packed struct(u32) {
    +            ///  CSR7
    +            CSR7: u32,
    +        }),
    +        ///  context swap registers
    +        CSR8: mmio.Mmio(packed struct(u32) {
    +            ///  CSR8
    +            CSR8: u32,
    +        }),
    +        ///  context swap registers
    +        CSR9: mmio.Mmio(packed struct(u32) {
    +            ///  CSR9
    +            CSR9: u32,
    +        }),
    +        ///  context swap registers
    +        CSR10: mmio.Mmio(packed struct(u32) {
    +            ///  CSR10
    +            CSR10: u32,
    +        }),
    +        ///  context swap registers
    +        CSR11: mmio.Mmio(packed struct(u32) {
    +            ///  CSR11
    +            CSR11: u32,
    +        }),
    +        ///  context swap registers
    +        CSR12: mmio.Mmio(packed struct(u32) {
    +            ///  CSR12
    +            CSR12: u32,
    +        }),
    +        ///  context swap registers
    +        CSR13: mmio.Mmio(packed struct(u32) {
    +            ///  CSR13
    +            CSR13: u32,
    +        }),
    +        ///  context swap registers
    +        CSR14: mmio.Mmio(packed struct(u32) {
    +            ///  CSR14
    +            CSR14: u32,
    +        }),
    +        ///  context swap registers
    +        CSR15: mmio.Mmio(packed struct(u32) {
    +            ///  CSR15
    +            CSR15: u32,
    +        }),
    +        ///  context swap registers
    +        CSR16: mmio.Mmio(packed struct(u32) {
    +            ///  CSR16
    +            CSR16: u32,
    +        }),
    +        ///  context swap registers
    +        CSR17: mmio.Mmio(packed struct(u32) {
    +            ///  CSR17
    +            CSR17: u32,
    +        }),
    +        ///  context swap registers
    +        CSR18: mmio.Mmio(packed struct(u32) {
    +            ///  CSR18
    +            CSR18: u32,
    +        }),
    +        ///  context swap registers
    +        CSR19: mmio.Mmio(packed struct(u32) {
    +            ///  CSR19
    +            CSR19: u32,
    +        }),
    +        ///  context swap registers
    +        CSR20: mmio.Mmio(packed struct(u32) {
    +            ///  CSR20
    +            CSR20: u32,
    +        }),
    +        ///  context swap registers
    +        CSR21: mmio.Mmio(packed struct(u32) {
    +            ///  CSR21
    +            CSR21: u32,
    +        }),
    +        ///  context swap registers
    +        CSR22: mmio.Mmio(packed struct(u32) {
    +            ///  CSR22
    +            CSR22: u32,
    +        }),
    +        ///  context swap registers
    +        CSR23: mmio.Mmio(packed struct(u32) {
    +            ///  CSR23
    +            CSR23: u32,
    +        }),
    +        ///  context swap registers
    +        CSR24: mmio.Mmio(packed struct(u32) {
    +            ///  CSR24
    +            CSR24: u32,
    +        }),
    +        ///  context swap registers
    +        CSR25: mmio.Mmio(packed struct(u32) {
    +            ///  CSR25
    +            CSR25: u32,
    +        }),
    +        ///  context swap registers
    +        CSR26: mmio.Mmio(packed struct(u32) {
    +            ///  CSR26
    +            CSR26: u32,
    +        }),
    +        ///  context swap registers
    +        CSR27: mmio.Mmio(packed struct(u32) {
    +            ///  CSR27
    +            CSR27: u32,
    +        }),
    +        ///  context swap registers
    +        CSR28: mmio.Mmio(packed struct(u32) {
    +            ///  CSR28
    +            CSR28: u32,
    +        }),
    +        ///  context swap registers
    +        CSR29: mmio.Mmio(packed struct(u32) {
    +            ///  CSR29
    +            CSR29: u32,
    +        }),
    +        ///  context swap registers
    +        CSR30: mmio.Mmio(packed struct(u32) {
    +            ///  CSR30
    +            CSR30: u32,
    +        }),
    +        ///  context swap registers
    +        CSR31: mmio.Mmio(packed struct(u32) {
    +            ///  CSR31
    +            CSR31: u32,
    +        }),
    +        ///  context swap registers
    +        CSR32: mmio.Mmio(packed struct(u32) {
    +            ///  CSR32
    +            CSR32: u32,
    +        }),
    +        ///  context swap registers
    +        CSR33: mmio.Mmio(packed struct(u32) {
    +            ///  CSR33
    +            CSR33: u32,
    +        }),
    +        ///  context swap registers
    +        CSR34: mmio.Mmio(packed struct(u32) {
    +            ///  CSR34
    +            CSR34: u32,
    +        }),
    +        ///  context swap registers
    +        CSR35: mmio.Mmio(packed struct(u32) {
    +            ///  CSR35
    +            CSR35: u32,
    +        }),
    +        ///  context swap registers
    +        CSR36: mmio.Mmio(packed struct(u32) {
    +            ///  CSR36
    +            CSR36: u32,
    +        }),
    +        ///  context swap registers
    +        CSR37: mmio.Mmio(packed struct(u32) {
    +            ///  CSR37
    +            CSR37: u32,
    +        }),
    +        ///  context swap registers
    +        CSR38: mmio.Mmio(packed struct(u32) {
    +            ///  CSR38
    +            CSR38: u32,
    +        }),
    +        ///  context swap registers
    +        CSR39: mmio.Mmio(packed struct(u32) {
    +            ///  CSR39
    +            CSR39: u32,
    +        }),
    +        ///  context swap registers
    +        CSR40: mmio.Mmio(packed struct(u32) {
    +            ///  CSR40
    +            CSR40: u32,
    +        }),
    +        ///  context swap registers
    +        CSR41: mmio.Mmio(packed struct(u32) {
    +            ///  CSR41
    +            CSR41: u32,
    +        }),
    +        ///  context swap registers
    +        CSR42: mmio.Mmio(packed struct(u32) {
    +            ///  CSR42
    +            CSR42: u32,
    +        }),
    +        ///  context swap registers
    +        CSR43: mmio.Mmio(packed struct(u32) {
    +            ///  CSR43
    +            CSR43: u32,
    +        }),
    +        ///  context swap registers
    +        CSR44: mmio.Mmio(packed struct(u32) {
    +            ///  CSR44
    +            CSR44: u32,
    +        }),
    +        ///  context swap registers
    +        CSR45: mmio.Mmio(packed struct(u32) {
    +            ///  CSR45
    +            CSR45: u32,
    +        }),
    +        ///  context swap registers
    +        CSR46: mmio.Mmio(packed struct(u32) {
    +            ///  CSR46
    +            CSR46: u32,
    +        }),
    +        ///  context swap registers
    +        CSR47: mmio.Mmio(packed struct(u32) {
    +            ///  CSR47
    +            CSR47: u32,
    +        }),
    +        ///  context swap registers
    +        CSR48: mmio.Mmio(packed struct(u32) {
    +            ///  CSR48
    +            CSR48: u32,
    +        }),
    +        ///  context swap registers
    +        CSR49: mmio.Mmio(packed struct(u32) {
    +            ///  CSR49
    +            CSR49: u32,
    +        }),
    +        ///  context swap registers
    +        CSR50: mmio.Mmio(packed struct(u32) {
    +            ///  CSR50
    +            CSR50: u32,
    +        }),
    +        ///  context swap registers
    +        CSR51: mmio.Mmio(packed struct(u32) {
    +            ///  CSR51
    +            CSR51: u32,
    +        }),
    +        ///  context swap registers
    +        CSR52: mmio.Mmio(packed struct(u32) {
    +            ///  CSR52
    +            CSR52: u32,
    +        }),
    +        ///  context swap registers
    +        CSR53: mmio.Mmio(packed struct(u32) {
    +            ///  CSR53
    +            CSR53: u32,
    +        }),
    +        reserved784: [320]u8,
    +        ///  HASH digest register
    +        HASH_HR0: mmio.Mmio(packed struct(u32) {
    +            ///  H0
    +            H0: u32,
    +        }),
    +        ///  read-only
    +        HASH_HR1: mmio.Mmio(packed struct(u32) {
    +            ///  H1
    +            H1: u32,
    +        }),
    +        ///  read-only
    +        HASH_HR2: mmio.Mmio(packed struct(u32) {
    +            ///  H2
    +            H2: u32,
    +        }),
    +        ///  read-only
    +        HASH_HR3: mmio.Mmio(packed struct(u32) {
    +            ///  H3
    +            H3: u32,
    +        }),
    +        ///  read-only
    +        HASH_HR4: mmio.Mmio(packed struct(u32) {
    +            ///  H4
    +            H4: u32,
    +        }),
    +        ///  read-only
    +        HASH_HR5: mmio.Mmio(packed struct(u32) {
    +            ///  H5
    +            H5: u32,
    +        }),
    +        ///  read-only
    +        HASH_HR6: mmio.Mmio(packed struct(u32) {
    +            ///  H6
    +            H6: u32,
    +        }),
    +        ///  read-only
    +        HASH_HR7: mmio.Mmio(packed struct(u32) {
    +            ///  H7
    +            H7: u32,
    +        }),
    +    };
    +
    +    ///  General-purpose I/Os
    +    pub const GPIOB = extern struct {
    +        ///  GPIO port mode register
    +        MODER: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER0: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER1: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER2: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER3: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER4: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER5: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER6: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER7: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER8: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER9: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER10: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER11: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER12: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER13: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER14: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER15: u2,
    +        }),
    +        ///  GPIO port output type register
    +        OTYPER: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            OT0: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT1: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT2: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT3: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT4: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT5: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT6: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT7: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT8: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT9: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT10: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT11: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT12: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT13: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT14: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT15: u1,
    +            padding: u16,
    +        }),
    +        ///  GPIO port output speed register
    +        OSPEEDR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR0: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR1: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR2: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR3: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR4: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR5: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR6: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR7: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR8: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR9: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR10: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR11: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR12: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR13: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR14: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR15: u2,
    +        }),
    +        ///  GPIO port pull-up/pull-down register
    +        PUPDR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR0: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR1: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR2: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR3: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR4: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR5: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR6: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR7: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR8: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR9: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR10: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR11: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR12: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR13: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR14: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR15: u2,
    +        }),
    +        ///  GPIO port input data register
    +        IDR: mmio.Mmio(packed struct(u32) {
    +            ///  Port input data (y = 0..15)
    +            IDR0: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR1: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR2: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR3: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR4: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR5: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR6: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR7: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR8: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR9: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR10: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR11: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR12: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR13: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR14: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR15: u1,
    +            padding: u16,
    +        }),
    +        ///  GPIO port output data register
    +        ODR: mmio.Mmio(packed struct(u32) {
    +            ///  Port output data (y = 0..15)
    +            ODR0: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR1: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR2: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR3: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR4: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR5: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR6: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR7: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR8: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR9: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR10: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR11: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR12: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR13: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR14: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR15: u1,
    +            padding: u16,
    +        }),
    +        ///  GPIO port bit set/reset register
    +        BSRR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x set bit y (y= 0..15)
    +            BS0: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS1: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS2: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS3: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS4: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS5: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS6: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS7: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS8: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS9: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS10: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS11: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS12: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS13: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS14: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS15: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BR0: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR1: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR2: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR3: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR4: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR5: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR6: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR7: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR8: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR9: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR10: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR11: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR12: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR13: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR14: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR15: u1,
    +        }),
    +        ///  GPIO port configuration lock register
    +        LCKR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK0: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK1: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK2: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK3: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK4: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK5: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK6: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK7: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK8: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK9: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK10: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK11: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK12: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK13: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK14: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK15: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCKK: u1,
    +            padding: u15,
    +        }),
    +        ///  GPIO alternate function low register
    +        AFRL: mmio.Mmio(packed struct(u32) {
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL0: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL1: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL2: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL3: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL4: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL5: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL6: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL7: u4,
    +        }),
    +        ///  GPIO alternate function high register
    +        AFRH: mmio.Mmio(packed struct(u32) {
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH8: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH9: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH10: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH11: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH12: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH13: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH14: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH15: u4,
    +        }),
    +    };
    +
    +    ///  General-purpose I/Os
    +    pub const GPIOA = extern struct {
    +        ///  GPIO port mode register
    +        MODER: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER0: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER1: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER2: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER3: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER4: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER5: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER6: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER7: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER8: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER9: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER10: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER11: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER12: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER13: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER14: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER15: u2,
    +        }),
    +        ///  GPIO port output type register
    +        OTYPER: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            OT0: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT1: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT2: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT3: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT4: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT5: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT6: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT7: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT8: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT9: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT10: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT11: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT12: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT13: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT14: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT15: u1,
    +            padding: u16,
    +        }),
    +        ///  GPIO port output speed register
    +        OSPEEDR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR0: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR1: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR2: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR3: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR4: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR5: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR6: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR7: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR8: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR9: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR10: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR11: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR12: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR13: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR14: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR15: u2,
    +        }),
    +        ///  GPIO port pull-up/pull-down register
    +        PUPDR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR0: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR1: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR2: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR3: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR4: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR5: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR6: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR7: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR8: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR9: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR10: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR11: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR12: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR13: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR14: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR15: u2,
    +        }),
    +        ///  GPIO port input data register
    +        IDR: mmio.Mmio(packed struct(u32) {
    +            ///  Port input data (y = 0..15)
    +            IDR0: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR1: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR2: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR3: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR4: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR5: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR6: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR7: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR8: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR9: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR10: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR11: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR12: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR13: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR14: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR15: u1,
    +            padding: u16,
    +        }),
    +        ///  GPIO port output data register
    +        ODR: mmio.Mmio(packed struct(u32) {
    +            ///  Port output data (y = 0..15)
    +            ODR0: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR1: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR2: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR3: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR4: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR5: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR6: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR7: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR8: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR9: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR10: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR11: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR12: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR13: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR14: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR15: u1,
    +            padding: u16,
    +        }),
    +        ///  GPIO port bit set/reset register
    +        BSRR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x set bit y (y= 0..15)
    +            BS0: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS1: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS2: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS3: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS4: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS5: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS6: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS7: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS8: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS9: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS10: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS11: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS12: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS13: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS14: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS15: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BR0: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR1: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR2: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR3: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR4: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR5: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR6: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR7: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR8: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR9: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR10: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR11: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR12: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR13: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR14: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR15: u1,
    +        }),
    +        ///  GPIO port configuration lock register
    +        LCKR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK0: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK1: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK2: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK3: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK4: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK5: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK6: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK7: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK8: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK9: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK10: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK11: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK12: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK13: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK14: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK15: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCKK: u1,
    +            padding: u15,
    +        }),
    +        ///  GPIO alternate function low register
    +        AFRL: mmio.Mmio(packed struct(u32) {
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL0: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL1: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL2: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL3: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL4: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL5: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL6: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL7: u4,
    +        }),
    +        ///  GPIO alternate function high register
    +        AFRH: mmio.Mmio(packed struct(u32) {
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH8: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH9: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH10: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH11: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH12: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH13: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH14: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH15: u4,
    +        }),
    +    };
    +
    +    ///  System configuration controller
    +    pub const SYSCFG = extern struct {
    +        ///  memory remap register
    +        MEMRM: mmio.Mmio(packed struct(u32) {
    +            ///  MEM_MODE
    +            MEM_MODE: u2,
    +            padding: u30,
    +        }),
    +        ///  peripheral mode configuration register
    +        PMC: mmio.Mmio(packed struct(u32) {
    +            reserved23: u23,
    +            ///  Ethernet PHY interface selection
    +            MII_RMII_SEL: u1,
    +            padding: u8,
    +        }),
    +        ///  external interrupt configuration register 1
    +        EXTICR1: mmio.Mmio(packed struct(u32) {
    +            ///  EXTI x configuration (x = 0 to 3)
    +            EXTI0: u4,
    +            ///  EXTI x configuration (x = 0 to 3)
    +            EXTI1: u4,
    +            ///  EXTI x configuration (x = 0 to 3)
    +            EXTI2: u4,
    +            ///  EXTI x configuration (x = 0 to 3)
    +            EXTI3: u4,
    +            padding: u16,
    +        }),
    +        ///  external interrupt configuration register 2
    +        EXTICR2: mmio.Mmio(packed struct(u32) {
    +            ///  EXTI x configuration (x = 4 to 7)
    +            EXTI4: u4,
    +            ///  EXTI x configuration (x = 4 to 7)
    +            EXTI5: u4,
    +            ///  EXTI x configuration (x = 4 to 7)
    +            EXTI6: u4,
    +            ///  EXTI x configuration (x = 4 to 7)
    +            EXTI7: u4,
    +            padding: u16,
    +        }),
    +        ///  external interrupt configuration register 3
    +        EXTICR3: mmio.Mmio(packed struct(u32) {
    +            ///  EXTI x configuration (x = 8 to 11)
    +            EXTI8: u4,
    +            ///  EXTI x configuration (x = 8 to 11)
    +            EXTI9: u4,
    +            ///  EXTI10
    +            EXTI10: u4,
    +            ///  EXTI x configuration (x = 8 to 11)
    +            EXTI11: u4,
    +            padding: u16,
    +        }),
    +        ///  external interrupt configuration register 4
    +        EXTICR4: mmio.Mmio(packed struct(u32) {
    +            ///  EXTI x configuration (x = 12 to 15)
    +            EXTI12: u4,
    +            ///  EXTI x configuration (x = 12 to 15)
    +            EXTI13: u4,
    +            ///  EXTI x configuration (x = 12 to 15)
    +            EXTI14: u4,
    +            ///  EXTI x configuration (x = 12 to 15)
    +            EXTI15: u4,
    +            padding: u16,
    +        }),
    +        reserved32: [8]u8,
    +        ///  Compensation cell control register
    +        CMPCR: mmio.Mmio(packed struct(u32) {
    +            ///  Compensation cell power-down
    +            CMP_PD: u1,
    +            reserved8: u7,
    +            ///  READY
    +            READY: u1,
    +            padding: u23,
    +        }),
    +    };
    +
    +    ///  Serial peripheral interface
    +    pub const SPI1 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Clock phase
    +            CPHA: u1,
    +            ///  Clock polarity
    +            CPOL: u1,
    +            ///  Master selection
    +            MSTR: u1,
    +            ///  Baud rate control
    +            BR: u3,
    +            ///  SPI enable
    +            SPE: u1,
    +            ///  Frame format
    +            LSBFIRST: u1,
    +            ///  Internal slave select
    +            SSI: u1,
    +            ///  Software slave management
    +            SSM: u1,
    +            ///  Receive only
    +            RXONLY: u1,
    +            ///  Data frame format
    +            DFF: u1,
    +            ///  CRC transfer next
    +            CRCNEXT: u1,
    +            ///  Hardware CRC calculation enable
    +            CRCEN: u1,
    +            ///  Output enable in bidirectional mode
    +            BIDIOE: u1,
    +            ///  Bidirectional data mode enable
    +            BIDIMODE: u1,
    +            padding: u16,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            ///  Rx buffer DMA enable
    +            RXDMAEN: u1,
    +            ///  Tx buffer DMA enable
    +            TXDMAEN: u1,
    +            ///  SS output enable
    +            SSOE: u1,
    +            reserved4: u1,
    +            ///  Frame format
    +            FRF: u1,
    +            ///  Error interrupt enable
    +            ERRIE: u1,
    +            ///  RX buffer not empty interrupt enable
    +            RXNEIE: u1,
    +            ///  Tx buffer empty interrupt enable
    +            TXEIE: u1,
    +            padding: u24,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Receive buffer not empty
    +            RXNE: u1,
    +            ///  Transmit buffer empty
    +            TXE: u1,
    +            ///  Channel side
    +            CHSIDE: u1,
    +            ///  Underrun flag
    +            UDR: u1,
    +            ///  CRC error flag
    +            CRCERR: u1,
    +            ///  Mode fault
    +            MODF: u1,
    +            ///  Overrun flag
    +            OVR: u1,
    +            ///  Busy flag
    +            BSY: u1,
    +            ///  TI frame format error
    +            TIFRFE: u1,
    +            padding: u23,
    +        }),
    +        ///  data register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  Data register
    +            DR: u16,
    +            padding: u16,
    +        }),
    +        ///  CRC polynomial register
    +        CRCPR: mmio.Mmio(packed struct(u32) {
    +            ///  CRC polynomial register
    +            CRCPOLY: u16,
    +            padding: u16,
    +        }),
    +        ///  RX CRC register
    +        RXCRCR: mmio.Mmio(packed struct(u32) {
    +            ///  Rx CRC register
    +            RxCRC: u16,
    +            padding: u16,
    +        }),
    +        ///  TX CRC register
    +        TXCRCR: mmio.Mmio(packed struct(u32) {
    +            ///  Tx CRC register
    +            TxCRC: u16,
    +            padding: u16,
    +        }),
    +        ///  I2S configuration register
    +        I2SCFGR: mmio.Mmio(packed struct(u32) {
    +            ///  Channel length (number of bits per audio channel)
    +            CHLEN: u1,
    +            ///  Data length to be transferred
    +            DATLEN: u2,
    +            ///  Steady state clock polarity
    +            CKPOL: u1,
    +            ///  I2S standard selection
    +            I2SSTD: u2,
    +            reserved7: u1,
    +            ///  PCM frame synchronization
    +            PCMSYNC: u1,
    +            ///  I2S configuration mode
    +            I2SCFG: u2,
    +            ///  I2S Enable
    +            I2SE: u1,
    +            ///  I2S mode selection
    +            I2SMOD: u1,
    +            padding: u20,
    +        }),
    +        ///  I2S prescaler register
    +        I2SPR: mmio.Mmio(packed struct(u32) {
    +            ///  I2S Linear prescaler
    +            I2SDIV: u8,
    +            ///  Odd factor for the prescaler
    +            ODD: u1,
    +            ///  Master clock output enable
    +            MCKOE: u1,
    +            padding: u22,
    +        }),
    +    };
    +
    +    ///  LCD-TFT Controller
    +    pub const LTDC = extern struct {
    +        reserved8: [8]u8,
    +        ///  Synchronization Size Configuration Register
    +        SSCR: mmio.Mmio(packed struct(u32) {
    +            ///  Vertical Synchronization Height (in units of horizontal scan line)
    +            VSH: u11,
    +            reserved16: u5,
    +            ///  Horizontal Synchronization Width (in units of pixel clock period)
    +            HSW: u10,
    +            padding: u6,
    +        }),
    +        ///  Back Porch Configuration Register
    +        BPCR: mmio.Mmio(packed struct(u32) {
    +            ///  Accumulated Vertical back porch (in units of horizontal scan line)
    +            AVBP: u11,
    +            reserved16: u5,
    +            ///  Accumulated Horizontal back porch (in units of pixel clock period)
    +            AHBP: u10,
    +            padding: u6,
    +        }),
    +        ///  Active Width Configuration Register
    +        AWCR: mmio.Mmio(packed struct(u32) {
    +            ///  Accumulated Active Height (in units of horizontal scan line)
    +            AAH: u11,
    +            reserved16: u5,
    +            ///  AAV
    +            AAV: u10,
    +            padding: u6,
    +        }),
    +        ///  Total Width Configuration Register
    +        TWCR: mmio.Mmio(packed struct(u32) {
    +            ///  Total Height (in units of horizontal scan line)
    +            TOTALH: u11,
    +            reserved16: u5,
    +            ///  Total Width (in units of pixel clock period)
    +            TOTALW: u10,
    +            padding: u6,
    +        }),
    +        ///  Global Control Register
    +        GCR: mmio.Mmio(packed struct(u32) {
    +            ///  LCD-TFT controller enable bit
    +            LTDCEN: u1,
    +            reserved4: u3,
    +            ///  Dither Blue Width
    +            DBW: u3,
    +            reserved8: u1,
    +            ///  Dither Green Width
    +            DGW: u3,
    +            reserved12: u1,
    +            ///  Dither Red Width
    +            DRW: u3,
    +            reserved16: u1,
    +            ///  Dither Enable
    +            DEN: u1,
    +            reserved28: u11,
    +            ///  Pixel Clock Polarity
    +            PCPOL: u1,
    +            ///  Data Enable Polarity
    +            DEPOL: u1,
    +            ///  Vertical Synchronization Polarity
    +            VSPOL: u1,
    +            ///  Horizontal Synchronization Polarity
    +            HSPOL: u1,
    +        }),
    +        reserved36: [8]u8,
    +        ///  Shadow Reload Configuration Register
    +        SRCR: mmio.Mmio(packed struct(u32) {
    +            ///  Immediate Reload
    +            IMR: u1,
    +            ///  Vertical Blanking Reload
    +            VBR: u1,
    +            padding: u30,
    +        }),
    +        reserved44: [4]u8,
    +        ///  Background Color Configuration Register
    +        BCCR: mmio.Mmio(packed struct(u32) {
    +            ///  Background Color Red value
    +            BC: u24,
    +            padding: u8,
    +        }),
    +        reserved52: [4]u8,
    +        ///  Interrupt Enable Register
    +        IER: mmio.Mmio(packed struct(u32) {
    +            ///  Line Interrupt Enable
    +            LIE: u1,
    +            ///  FIFO Underrun Interrupt Enable
    +            FUIE: u1,
    +            ///  Transfer Error Interrupt Enable
    +            TERRIE: u1,
    +            ///  Register Reload interrupt enable
    +            RRIE: u1,
    +            padding: u28,
    +        }),
    +        ///  Interrupt Status Register
    +        ISR: mmio.Mmio(packed struct(u32) {
    +            ///  Line Interrupt flag
    +            LIF: u1,
    +            ///  FIFO Underrun Interrupt flag
    +            FUIF: u1,
    +            ///  Transfer Error interrupt flag
    +            TERRIF: u1,
    +            ///  Register Reload Interrupt Flag
    +            RRIF: u1,
    +            padding: u28,
    +        }),
    +        ///  Interrupt Clear Register
    +        ICR: mmio.Mmio(packed struct(u32) {
    +            ///  Clears the Line Interrupt Flag
    +            CLIF: u1,
    +            ///  Clears the FIFO Underrun Interrupt flag
    +            CFUIF: u1,
    +            ///  Clears the Transfer Error Interrupt Flag
    +            CTERRIF: u1,
    +            ///  Clears Register Reload Interrupt Flag
    +            CRRIF: u1,
    +            padding: u28,
    +        }),
    +        ///  Line Interrupt Position Configuration Register
    +        LIPCR: mmio.Mmio(packed struct(u32) {
    +            ///  Line Interrupt Position
    +            LIPOS: u11,
    +            padding: u21,
    +        }),
    +        ///  Current Position Status Register
    +        CPSR: mmio.Mmio(packed struct(u32) {
    +            ///  Current Y Position
    +            CYPOS: u16,
    +            ///  Current X Position
    +            CXPOS: u16,
    +        }),
    +        ///  Current Display Status Register
    +        CDSR: mmio.Mmio(packed struct(u32) {
    +            ///  Vertical Data Enable display Status
    +            VDES: u1,
    +            ///  Horizontal Data Enable display Status
    +            HDES: u1,
    +            ///  Vertical Synchronization display Status
    +            VSYNCS: u1,
    +            ///  Horizontal Synchronization display Status
    +            HSYNCS: u1,
    +            padding: u28,
    +        }),
    +        reserved132: [56]u8,
    +        ///  Layerx Control Register
    +        L1CR: mmio.Mmio(packed struct(u32) {
    +            ///  Layer Enable
    +            LEN: u1,
    +            ///  Color Keying Enable
    +            COLKEN: u1,
    +            reserved4: u2,
    +            ///  Color Look-Up Table Enable
    +            CLUTEN: u1,
    +            padding: u27,
    +        }),
    +        ///  Layerx Window Horizontal Position Configuration Register
    +        L1WHPCR: mmio.Mmio(packed struct(u32) {
    +            ///  Window Horizontal Start Position
    +            WHSTPOS: u12,
    +            reserved16: u4,
    +            ///  Window Horizontal Stop Position
    +            WHSPPOS: u12,
    +            padding: u4,
    +        }),
    +        ///  Layerx Window Vertical Position Configuration Register
    +        L1WVPCR: mmio.Mmio(packed struct(u32) {
    +            ///  Window Vertical Start Position
    +            WVSTPOS: u11,
    +            reserved16: u5,
    +            ///  Window Vertical Stop Position
    +            WVSPPOS: u11,
    +            padding: u5,
    +        }),
    +        ///  Layerx Color Keying Configuration Register
    +        L1CKCR: mmio.Mmio(packed struct(u32) {
    +            ///  Color Key Blue value
    +            CKBLUE: u8,
    +            ///  Color Key Green value
    +            CKGREEN: u8,
    +            ///  Color Key Red value
    +            CKRED: u8,
    +            padding: u8,
    +        }),
    +        ///  Layerx Pixel Format Configuration Register
    +        L1PFCR: mmio.Mmio(packed struct(u32) {
    +            ///  Pixel Format
    +            PF: u3,
    +            padding: u29,
    +        }),
    +        ///  Layerx Constant Alpha Configuration Register
    +        L1CACR: mmio.Mmio(packed struct(u32) {
    +            ///  Constant Alpha
    +            CONSTA: u8,
    +            padding: u24,
    +        }),
    +        ///  Layerx Default Color Configuration Register
    +        L1DCCR: mmio.Mmio(packed struct(u32) {
    +            ///  Default Color Blue
    +            DCBLUE: u8,
    +            ///  Default Color Green
    +            DCGREEN: u8,
    +            ///  Default Color Red
    +            DCRED: u8,
    +            ///  Default Color Alpha
    +            DCALPHA: u8,
    +        }),
    +        ///  Layerx Blending Factors Configuration Register
    +        L1BFCR: mmio.Mmio(packed struct(u32) {
    +            ///  Blending Factor 2
    +            BF2: u3,
    +            reserved8: u5,
    +            ///  Blending Factor 1
    +            BF1: u3,
    +            padding: u21,
    +        }),
    +        reserved172: [8]u8,
    +        ///  Layerx Color Frame Buffer Address Register
    +        L1CFBAR: mmio.Mmio(packed struct(u32) {
    +            ///  Color Frame Buffer Start Address
    +            CFBADD: u32,
    +        }),
    +        ///  Layerx Color Frame Buffer Length Register
    +        L1CFBLR: mmio.Mmio(packed struct(u32) {
    +            ///  Color Frame Buffer Line Length
    +            CFBLL: u13,
    +            reserved16: u3,
    +            ///  Color Frame Buffer Pitch in bytes
    +            CFBP: u13,
    +            padding: u3,
    +        }),
    +        ///  Layerx ColorFrame Buffer Line Number Register
    +        L1CFBLNR: mmio.Mmio(packed struct(u32) {
    +            ///  Frame Buffer Line Number
    +            CFBLNBR: u11,
    +            padding: u21,
    +        }),
    +        reserved196: [12]u8,
    +        ///  Layerx CLUT Write Register
    +        L1CLUTWR: mmio.Mmio(packed struct(u32) {
    +            ///  Blue value
    +            BLUE: u8,
    +            ///  Green value
    +            GREEN: u8,
    +            ///  Red value
    +            RED: u8,
    +            ///  CLUT Address
    +            CLUTADD: u8,
    +        }),
    +        reserved260: [60]u8,
    +        ///  Layerx Control Register
    +        L2CR: mmio.Mmio(packed struct(u32) {
    +            ///  Layer Enable
    +            LEN: u1,
    +            ///  Color Keying Enable
    +            COLKEN: u1,
    +            reserved4: u2,
    +            ///  Color Look-Up Table Enable
    +            CLUTEN: u1,
    +            padding: u27,
    +        }),
    +        ///  Layerx Window Horizontal Position Configuration Register
    +        L2WHPCR: mmio.Mmio(packed struct(u32) {
    +            ///  Window Horizontal Start Position
    +            WHSTPOS: u12,
    +            reserved16: u4,
    +            ///  Window Horizontal Stop Position
    +            WHSPPOS: u12,
    +            padding: u4,
    +        }),
    +        ///  Layerx Window Vertical Position Configuration Register
    +        L2WVPCR: mmio.Mmio(packed struct(u32) {
    +            ///  Window Vertical Start Position
    +            WVSTPOS: u11,
    +            reserved16: u5,
    +            ///  Window Vertical Stop Position
    +            WVSPPOS: u11,
    +            padding: u5,
    +        }),
    +        ///  Layerx Color Keying Configuration Register
    +        L2CKCR: mmio.Mmio(packed struct(u32) {
    +            ///  Color Key Blue value
    +            CKBLUE: u8,
    +            ///  Color Key Green value
    +            CKGREEN: u7,
    +            ///  Color Key Red value
    +            CKRED: u9,
    +            padding: u8,
    +        }),
    +        ///  Layerx Pixel Format Configuration Register
    +        L2PFCR: mmio.Mmio(packed struct(u32) {
    +            ///  Pixel Format
    +            PF: u3,
    +            padding: u29,
    +        }),
    +        ///  Layerx Constant Alpha Configuration Register
    +        L2CACR: mmio.Mmio(packed struct(u32) {
    +            ///  Constant Alpha
    +            CONSTA: u8,
    +            padding: u24,
    +        }),
    +        ///  Layerx Default Color Configuration Register
    +        L2DCCR: mmio.Mmio(packed struct(u32) {
    +            ///  Default Color Blue
    +            DCBLUE: u8,
    +            ///  Default Color Green
    +            DCGREEN: u8,
    +            ///  Default Color Red
    +            DCRED: u8,
    +            ///  Default Color Alpha
    +            DCALPHA: u8,
    +        }),
    +        ///  Layerx Blending Factors Configuration Register
    +        L2BFCR: mmio.Mmio(packed struct(u32) {
    +            ///  Blending Factor 2
    +            BF2: u3,
    +            reserved8: u5,
    +            ///  Blending Factor 1
    +            BF1: u3,
    +            padding: u21,
    +        }),
    +        reserved300: [8]u8,
    +        ///  Layerx Color Frame Buffer Address Register
    +        L2CFBAR: mmio.Mmio(packed struct(u32) {
    +            ///  Color Frame Buffer Start Address
    +            CFBADD: u32,
    +        }),
    +        ///  Layerx Color Frame Buffer Length Register
    +        L2CFBLR: mmio.Mmio(packed struct(u32) {
    +            ///  Color Frame Buffer Line Length
    +            CFBLL: u13,
    +            reserved16: u3,
    +            ///  Color Frame Buffer Pitch in bytes
    +            CFBP: u13,
    +            padding: u3,
    +        }),
    +        ///  Layerx ColorFrame Buffer Line Number Register
    +        L2CFBLNR: mmio.Mmio(packed struct(u32) {
    +            ///  Frame Buffer Line Number
    +            CFBLNBR: u11,
    +            padding: u21,
    +        }),
    +        reserved324: [12]u8,
    +        ///  Layerx CLUT Write Register
    +        L2CLUTWR: mmio.Mmio(packed struct(u32) {
    +            ///  Blue value
    +            BLUE: u8,
    +            ///  Green value
    +            GREEN: u8,
    +            ///  Red value
    +            RED: u8,
    +            ///  CLUT Address
    +            CLUTADD: u8,
    +        }),
    +    };
    +
    +    ///  Serial audio interface
    +    pub const SAI1 = extern struct {
    +        reserved4: [4]u8,
    +        ///  SAI AConfiguration register 1
    +        SAI_ACR1: mmio.Mmio(packed struct(u32) {
    +            ///  Audio block mode
    +            MODE: u2,
    +            ///  Protocol configuration
    +            PRTCFG: u2,
    +            reserved5: u1,
    +            ///  Data size
    +            DS: u3,
    +            ///  Least significant bit first
    +            LSBFIRST: u1,
    +            ///  Clock strobing edge
    +            CKSTR: u1,
    +            ///  Synchronization enable
    +            SYNCEN: u2,
    +            ///  Mono mode
    +            MONO: u1,
    +            ///  Output drive
    +            OUTDRIV: u1,
    +            reserved16: u2,
    +            ///  Audio block enable
    +            SAIAEN: u1,
    +            ///  DMA enable
    +            DMAEN: u1,
    +            reserved19: u1,
    +            ///  No divider
    +            NODIV: u1,
    +            ///  Master clock divider
    +            MCKDIV: u4,
    +            padding: u8,
    +        }),
    +        ///  SAI AConfiguration register 2
    +        SAI_ACR2: mmio.Mmio(packed struct(u32) {
    +            ///  FIFO threshold
    +            FTH: u3,
    +            ///  FIFO flush
    +            FFLUSH: u1,
    +            ///  Tristate management on data line
    +            TRIS: u1,
    +            ///  Mute
    +            MUTE: u1,
    +            ///  Mute value
    +            MUTEVAL: u1,
    +            ///  Mute counter
    +            MUTECNT: u6,
    +            ///  Complement bit
    +            CPL: u1,
    +            ///  Companding mode
    +            COMP: u2,
    +            padding: u16,
    +        }),
    +        ///  SAI AFrame configuration register
    +        SAI_AFRCR: mmio.Mmio(packed struct(u32) {
    +            ///  Frame length
    +            FRL: u8,
    +            ///  Frame synchronization active level length
    +            FSALL: u7,
    +            reserved16: u1,
    +            ///  Frame synchronization definition
    +            FSDEF: u1,
    +            ///  Frame synchronization polarity
    +            FSPOL: u1,
    +            ///  Frame synchronization offset
    +            FSOFF: u1,
    +            padding: u13,
    +        }),
    +        ///  SAI ASlot register
    +        SAI_ASLOTR: mmio.Mmio(packed struct(u32) {
    +            ///  First bit offset
    +            FBOFF: u5,
    +            reserved6: u1,
    +            ///  Slot size
    +            SLOTSZ: u2,
    +            ///  Number of slots in an audio frame
    +            NBSLOT: u4,
    +            reserved16: u4,
    +            ///  Slot enable
    +            SLOTEN: u16,
    +        }),
    +        ///  SAI AInterrupt mask register2
    +        SAI_AIM: mmio.Mmio(packed struct(u32) {
    +            ///  Overrun/underrun interrupt enable
    +            OVRUDRIE: u1,
    +            ///  Mute detection interrupt enable
    +            MUTEDETIE: u1,
    +            ///  Wrong clock configuration interrupt enable
    +            WCKCFGIE: u1,
    +            ///  FIFO request interrupt enable
    +            FREQIE: u1,
    +            ///  Codec not ready interrupt enable
    +            CNRDYIE: u1,
    +            ///  Anticipated frame synchronization detection interrupt enable
    +            AFSDETIE: u1,
    +            ///  Late frame synchronization detection interrupt enable
    +            LFSDETIE: u1,
    +            padding: u25,
    +        }),
    +        ///  SAI AStatus register
    +        SAI_ASR: mmio.Mmio(packed struct(u32) {
    +            ///  Overrun / underrun
    +            OVRUDR: u1,
    +            ///  Mute detection
    +            MUTEDET: u1,
    +            ///  Wrong clock configuration flag
    +            WCKCFG: u1,
    +            ///  FIFO request
    +            FREQ: u1,
    +            ///  Codec not ready
    +            CNRDY: u1,
    +            ///  Anticipated frame synchronization detection
    +            AFSDET: u1,
    +            ///  Late frame synchronization detection
    +            LFSDET: u1,
    +            reserved16: u9,
    +            ///  FIFO level threshold
    +            FLTH: u3,
    +            padding: u13,
    +        }),
    +        ///  SAI AClear flag register
    +        SAI_ACLRFR: mmio.Mmio(packed struct(u32) {
    +            ///  Clear overrun / underrun
    +            COVRUDR: u1,
    +            ///  Mute detection flag
    +            CMUTEDET: u1,
    +            ///  Clear wrong clock configuration flag
    +            CWCKCFG: u1,
    +            reserved4: u1,
    +            ///  Clear codec not ready flag
    +            CCNRDY: u1,
    +            ///  Clear anticipated frame synchronization detection flag
    +            CAFSDET: u1,
    +            ///  Clear late frame synchronization detection flag
    +            CLFSDET: u1,
    +            padding: u25,
    +        }),
    +        ///  SAI AData register
    +        SAI_ADR: mmio.Mmio(packed struct(u32) {
    +            ///  Data
    +            DATA: u32,
    +        }),
    +        ///  SAI BConfiguration register 1
    +        SAI_BCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Audio block mode
    +            MODE: u2,
    +            ///  Protocol configuration
    +            PRTCFG: u2,
    +            reserved5: u1,
    +            ///  Data size
    +            DS: u3,
    +            ///  Least significant bit first
    +            LSBFIRST: u1,
    +            ///  Clock strobing edge
    +            CKSTR: u1,
    +            ///  Synchronization enable
    +            SYNCEN: u2,
    +            ///  Mono mode
    +            MONO: u1,
    +            ///  Output drive
    +            OUTDRIV: u1,
    +            reserved16: u2,
    +            ///  Audio block enable
    +            SAIBEN: u1,
    +            ///  DMA enable
    +            DMAEN: u1,
    +            reserved19: u1,
    +            ///  No divider
    +            NODIV: u1,
    +            ///  Master clock divider
    +            MCKDIV: u4,
    +            padding: u8,
    +        }),
    +        ///  SAI BConfiguration register 2
    +        SAI_BCR2: mmio.Mmio(packed struct(u32) {
    +            ///  FIFO threshold
    +            FTH: u3,
    +            ///  FIFO flush
    +            FFLUSH: u1,
    +            ///  Tristate management on data line
    +            TRIS: u1,
    +            ///  Mute
    +            MUTE: u1,
    +            ///  Mute value
    +            MUTEVAL: u1,
    +            ///  Mute counter
    +            MUTECNT: u6,
    +            ///  Complement bit
    +            CPL: u1,
    +            ///  Companding mode
    +            COMP: u2,
    +            padding: u16,
    +        }),
    +        ///  SAI BFrame configuration register
    +        SAI_BFRCR: mmio.Mmio(packed struct(u32) {
    +            ///  Frame length
    +            FRL: u8,
    +            ///  Frame synchronization active level length
    +            FSALL: u7,
    +            reserved16: u1,
    +            ///  Frame synchronization definition
    +            FSDEF: u1,
    +            ///  Frame synchronization polarity
    +            FSPOL: u1,
    +            ///  Frame synchronization offset
    +            FSOFF: u1,
    +            padding: u13,
    +        }),
    +        ///  SAI BSlot register
    +        SAI_BSLOTR: mmio.Mmio(packed struct(u32) {
    +            ///  First bit offset
    +            FBOFF: u5,
    +            reserved6: u1,
    +            ///  Slot size
    +            SLOTSZ: u2,
    +            ///  Number of slots in an audio frame
    +            NBSLOT: u4,
    +            reserved16: u4,
    +            ///  Slot enable
    +            SLOTEN: u16,
    +        }),
    +        ///  SAI BInterrupt mask register2
    +        SAI_BIM: mmio.Mmio(packed struct(u32) {
    +            ///  Overrun/underrun interrupt enable
    +            OVRUDRIE: u1,
    +            ///  Mute detection interrupt enable
    +            MUTEDETIE: u1,
    +            ///  Wrong clock configuration interrupt enable
    +            WCKCFGIE: u1,
    +            ///  FIFO request interrupt enable
    +            FREQIE: u1,
    +            ///  Codec not ready interrupt enable
    +            CNRDYIE: u1,
    +            ///  Anticipated frame synchronization detection interrupt enable
    +            AFSDETIE: u1,
    +            ///  Late frame synchronization detection interrupt enable
    +            LFSDETIE: u1,
    +            padding: u25,
    +        }),
    +        ///  SAI BStatus register
    +        SAI_BSR: mmio.Mmio(packed struct(u32) {
    +            ///  Overrun / underrun
    +            OVRUDR: u1,
    +            ///  Mute detection
    +            MUTEDET: u1,
    +            ///  Wrong clock configuration flag
    +            WCKCFG: u1,
    +            ///  FIFO request
    +            FREQ: u1,
    +            ///  Codec not ready
    +            CNRDY: u1,
    +            ///  Anticipated frame synchronization detection
    +            AFSDET: u1,
    +            ///  Late frame synchronization detection
    +            LFSDET: u1,
    +            reserved16: u9,
    +            ///  FIFO level threshold
    +            FLTH: u3,
    +            padding: u13,
    +        }),
    +        ///  SAI BClear flag register
    +        SAI_BCLRFR: mmio.Mmio(packed struct(u32) {
    +            ///  Clear overrun / underrun
    +            COVRUDR: u1,
    +            ///  Mute detection flag
    +            CMUTEDET: u1,
    +            ///  Clear wrong clock configuration flag
    +            CWCKCFG: u1,
    +            reserved4: u1,
    +            ///  Clear codec not ready flag
    +            CCNRDY: u1,
    +            ///  Clear anticipated frame synchronization detection flag
    +            CAFSDET: u1,
    +            ///  Clear late frame synchronization detection flag
    +            CLFSDET: u1,
    +            padding: u25,
    +        }),
    +        ///  SAI BData register
    +        SAI_BDR: mmio.Mmio(packed struct(u32) {
    +            ///  Data
    +            DATA: u32,
    +        }),
    +    };
    +
    +    ///  Nested Vectored Interrupt Controller
    +    pub const NVIC = extern struct {
    +        ///  Interrupt Set-Enable Register
    +        ISER0: mmio.Mmio(packed struct(u32) {
    +            ///  SETENA
    +            SETENA: u32,
    +        }),
    +        ///  Interrupt Set-Enable Register
    +        ISER1: mmio.Mmio(packed struct(u32) {
    +            ///  SETENA
    +            SETENA: u32,
    +        }),
    +        ///  Interrupt Set-Enable Register
    +        ISER2: mmio.Mmio(packed struct(u32) {
    +            ///  SETENA
    +            SETENA: u32,
    +        }),
    +        reserved128: [116]u8,
    +        ///  Interrupt Clear-Enable Register
    +        ICER0: mmio.Mmio(packed struct(u32) {
    +            ///  CLRENA
    +            CLRENA: u32,
    +        }),
    +        ///  Interrupt Clear-Enable Register
    +        ICER1: mmio.Mmio(packed struct(u32) {
    +            ///  CLRENA
    +            CLRENA: u32,
    +        }),
    +        ///  Interrupt Clear-Enable Register
    +        ICER2: mmio.Mmio(packed struct(u32) {
    +            ///  CLRENA
    +            CLRENA: u32,
    +        }),
    +        reserved256: [116]u8,
    +        ///  Interrupt Set-Pending Register
    +        ISPR0: mmio.Mmio(packed struct(u32) {
    +            ///  SETPEND
    +            SETPEND: u32,
    +        }),
    +        ///  Interrupt Set-Pending Register
    +        ISPR1: mmio.Mmio(packed struct(u32) {
    +            ///  SETPEND
    +            SETPEND: u32,
    +        }),
    +        ///  Interrupt Set-Pending Register
    +        ISPR2: mmio.Mmio(packed struct(u32) {
    +            ///  SETPEND
    +            SETPEND: u32,
    +        }),
    +        reserved384: [116]u8,
    +        ///  Interrupt Clear-Pending Register
    +        ICPR0: mmio.Mmio(packed struct(u32) {
    +            ///  CLRPEND
    +            CLRPEND: u32,
    +        }),
    +        ///  Interrupt Clear-Pending Register
    +        ICPR1: mmio.Mmio(packed struct(u32) {
    +            ///  CLRPEND
    +            CLRPEND: u32,
    +        }),
    +        ///  Interrupt Clear-Pending Register
    +        ICPR2: mmio.Mmio(packed struct(u32) {
    +            ///  CLRPEND
    +            CLRPEND: u32,
    +        }),
    +        reserved512: [116]u8,
    +        ///  Interrupt Active Bit Register
    +        IABR0: mmio.Mmio(packed struct(u32) {
    +            ///  ACTIVE
    +            ACTIVE: u32,
    +        }),
    +        ///  Interrupt Active Bit Register
    +        IABR1: mmio.Mmio(packed struct(u32) {
    +            ///  ACTIVE
    +            ACTIVE: u32,
    +        }),
    +        ///  Interrupt Active Bit Register
    +        IABR2: mmio.Mmio(packed struct(u32) {
    +            ///  ACTIVE
    +            ACTIVE: u32,
    +        }),
    +        reserved768: [244]u8,
    +        ///  Interrupt Priority Register
    +        IPR0: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR1: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR2: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR3: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR4: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR5: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR6: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR7: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR8: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR9: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR10: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR11: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR12: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR13: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR14: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR15: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR16: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR17: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR18: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR19: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +    };
    +
    +    ///  USB on the go high speed
    +    pub const OTG_HS_PWRCLK = extern struct {
    +        ///  Power and clock gating control register
    +        OTG_HS_PCGCR: mmio.Mmio(packed struct(u32) {
    +            ///  Stop PHY clock
    +            STPPCLK: u1,
    +            ///  Gate HCLK
    +            GATEHCLK: u1,
    +            reserved4: u2,
    +            ///  PHY suspended
    +            PHYSUSP: u1,
    +            padding: u27,
    +        }),
    +    };
    +
    +    ///  USB on the go high speed
    +    pub const OTG_HS_DEVICE = extern struct {
    +        ///  OTG_HS device configuration register
    +        OTG_HS_DCFG: mmio.Mmio(packed struct(u32) {
    +            ///  Device speed
    +            DSPD: u2,
    +            ///  Nonzero-length status OUT handshake
    +            NZLSOHSK: u1,
    +            reserved4: u1,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Periodic (micro)frame interval
    +            PFIVL: u2,
    +            reserved24: u11,
    +            ///  Periodic scheduling interval
    +            PERSCHIVL: u2,
    +            padding: u6,
    +        }),
    +        ///  OTG_HS device control register
    +        OTG_HS_DCTL: mmio.Mmio(packed struct(u32) {
    +            ///  Remote wakeup signaling
    +            RWUSIG: u1,
    +            ///  Soft disconnect
    +            SDIS: u1,
    +            ///  Global IN NAK status
    +            GINSTS: u1,
    +            ///  Global OUT NAK status
    +            GONSTS: u1,
    +            ///  Test control
    +            TCTL: u3,
    +            ///  Set global IN NAK
    +            SGINAK: u1,
    +            ///  Clear global IN NAK
    +            CGINAK: u1,
    +            ///  Set global OUT NAK
    +            SGONAK: u1,
    +            ///  Clear global OUT NAK
    +            CGONAK: u1,
    +            ///  Power-on programming done
    +            POPRGDNE: u1,
    +            padding: u20,
    +        }),
    +        ///  OTG_HS device status register
    +        OTG_HS_DSTS: mmio.Mmio(packed struct(u32) {
    +            ///  Suspend status
    +            SUSPSTS: u1,
    +            ///  Enumerated speed
    +            ENUMSPD: u2,
    +            ///  Erratic error
    +            EERR: u1,
    +            reserved8: u4,
    +            ///  Frame number of the received SOF
    +            FNSOF: u14,
    +            padding: u10,
    +        }),
    +        reserved16: [4]u8,
    +        ///  OTG_HS device IN endpoint common interrupt mask register
    +        OTG_HS_DIEPMSK: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt mask
    +            XFRCM: u1,
    +            ///  Endpoint disabled interrupt mask
    +            EPDM: u1,
    +            reserved3: u1,
    +            ///  Timeout condition mask (nonisochronous endpoints)
    +            TOM: u1,
    +            ///  IN token received when TxFIFO empty mask
    +            ITTXFEMSK: u1,
    +            ///  IN token received with EP mismatch mask
    +            INEPNMM: u1,
    +            ///  IN endpoint NAK effective mask
    +            INEPNEM: u1,
    +            reserved8: u1,
    +            ///  FIFO underrun mask
    +            TXFURM: u1,
    +            ///  BNA interrupt mask
    +            BIM: u1,
    +            padding: u22,
    +        }),
    +        ///  OTG_HS device OUT endpoint common interrupt mask register
    +        OTG_HS_DOEPMSK: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt mask
    +            XFRCM: u1,
    +            ///  Endpoint disabled interrupt mask
    +            EPDM: u1,
    +            reserved3: u1,
    +            ///  SETUP phase done mask
    +            STUPM: u1,
    +            ///  OUT token received when endpoint disabled mask
    +            OTEPDM: u1,
    +            reserved6: u1,
    +            ///  Back-to-back SETUP packets received mask
    +            B2BSTUP: u1,
    +            reserved8: u1,
    +            ///  OUT packet error mask
    +            OPEM: u1,
    +            ///  BNA interrupt mask
    +            BOIM: u1,
    +            padding: u22,
    +        }),
    +        ///  OTG_HS device all endpoints interrupt register
    +        OTG_HS_DAINT: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint interrupt bits
    +            IEPINT: u16,
    +            ///  OUT endpoint interrupt bits
    +            OEPINT: u16,
    +        }),
    +        ///  OTG_HS all endpoints interrupt mask register
    +        OTG_HS_DAINTMSK: mmio.Mmio(packed struct(u32) {
    +            ///  IN EP interrupt mask bits
    +            IEPM: u16,
    +            ///  OUT EP interrupt mask bits
    +            OEPM: u16,
    +        }),
    +        reserved40: [8]u8,
    +        ///  OTG_HS device VBUS discharge time register
    +        OTG_HS_DVBUSDIS: mmio.Mmio(packed struct(u32) {
    +            ///  Device VBUS discharge time
    +            VBUSDT: u16,
    +            padding: u16,
    +        }),
    +        ///  OTG_HS device VBUS pulsing time register
    +        OTG_HS_DVBUSPULSE: mmio.Mmio(packed struct(u32) {
    +            ///  Device VBUS pulsing time
    +            DVBUSP: u12,
    +            padding: u20,
    +        }),
    +        ///  OTG_HS Device threshold control register
    +        OTG_HS_DTHRCTL: mmio.Mmio(packed struct(u32) {
    +            ///  Nonisochronous IN endpoints threshold enable
    +            NONISOTHREN: u1,
    +            ///  ISO IN endpoint threshold enable
    +            ISOTHREN: u1,
    +            ///  Transmit threshold length
    +            TXTHRLEN: u9,
    +            reserved16: u5,
    +            ///  Receive threshold enable
    +            RXTHREN: u1,
    +            ///  Receive threshold length
    +            RXTHRLEN: u9,
    +            reserved27: u1,
    +            ///  Arbiter parking enable
    +            ARPEN: u1,
    +            padding: u4,
    +        }),
    +        ///  OTG_HS device IN endpoint FIFO empty interrupt mask register
    +        OTG_HS_DIEPEMPMSK: mmio.Mmio(packed struct(u32) {
    +            ///  IN EP Tx FIFO empty interrupt mask bits
    +            INEPTXFEM: u16,
    +            padding: u16,
    +        }),
    +        ///  OTG_HS device each endpoint interrupt register
    +        OTG_HS_DEACHINT: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  IN endpoint 1interrupt bit
    +            IEP1INT: u1,
    +            reserved17: u15,
    +            ///  OUT endpoint 1 interrupt bit
    +            OEP1INT: u1,
    +            padding: u14,
    +        }),
    +        ///  OTG_HS device each endpoint interrupt register mask
    +        OTG_HS_DEACHINTMSK: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  IN Endpoint 1 interrupt mask bit
    +            IEP1INTM: u1,
    +            reserved17: u15,
    +            ///  OUT Endpoint 1 interrupt mask bit
    +            OEP1INTM: u1,
    +            padding: u14,
    +        }),
    +        ///  OTG_HS device each in endpoint-1 interrupt register
    +        OTG_HS_DIEPEACHMSK1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt mask
    +            XFRCM: u1,
    +            ///  Endpoint disabled interrupt mask
    +            EPDM: u1,
    +            reserved3: u1,
    +            ///  Timeout condition mask (nonisochronous endpoints)
    +            TOM: u1,
    +            ///  IN token received when TxFIFO empty mask
    +            ITTXFEMSK: u1,
    +            ///  IN token received with EP mismatch mask
    +            INEPNMM: u1,
    +            ///  IN endpoint NAK effective mask
    +            INEPNEM: u1,
    +            reserved8: u1,
    +            ///  FIFO underrun mask
    +            TXFURM: u1,
    +            ///  BNA interrupt mask
    +            BIM: u1,
    +            reserved13: u3,
    +            ///  NAK interrupt mask
    +            NAKM: u1,
    +            padding: u18,
    +        }),
    +        reserved128: [60]u8,
    +        ///  OTG_HS device each OUT endpoint-1 interrupt register
    +        OTG_HS_DOEPEACHMSK1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt mask
    +            XFRCM: u1,
    +            ///  Endpoint disabled interrupt mask
    +            EPDM: u1,
    +            reserved3: u1,
    +            ///  Timeout condition mask
    +            TOM: u1,
    +            ///  IN token received when TxFIFO empty mask
    +            ITTXFEMSK: u1,
    +            ///  IN token received with EP mismatch mask
    +            INEPNMM: u1,
    +            ///  IN endpoint NAK effective mask
    +            INEPNEM: u1,
    +            reserved8: u1,
    +            ///  OUT packet error mask
    +            TXFURM: u1,
    +            ///  BNA interrupt mask
    +            BIM: u1,
    +            reserved12: u2,
    +            ///  Bubble error interrupt mask
    +            BERRM: u1,
    +            ///  NAK interrupt mask
    +            NAKM: u1,
    +            ///  NYET interrupt mask
    +            NYETM: u1,
    +            padding: u17,
    +        }),
    +        reserved256: [124]u8,
    +        ///  OTG device endpoint-0 control register
    +        OTG_HS_DIEPCTL0: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USB active endpoint
    +            USBAEP: u1,
    +            ///  Even/odd frame
    +            EONUM_DPID: u1,
    +            ///  NAK status
    +            NAKSTS: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  STALL handshake
    +            Stall: u1,
    +            ///  TxFIFO number
    +            TXFNUM: u4,
    +            ///  Clear NAK
    +            CNAK: u1,
    +            ///  Set NAK
    +            SNAK: u1,
    +            ///  Set DATA0 PID
    +            SD0PID_SEVNFRM: u1,
    +            ///  Set odd frame
    +            SODDFRM: u1,
    +            ///  Endpoint disable
    +            EPDIS: u1,
    +            ///  Endpoint enable
    +            EPENA: u1,
    +        }),
    +        reserved264: [4]u8,
    +        ///  OTG device endpoint-0 interrupt register
    +        OTG_HS_DIEPINT0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  Timeout condition
    +            TOC: u1,
    +            ///  IN token received when TxFIFO is empty
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  IN endpoint NAK effective
    +            INEPNE: u1,
    +            ///  Transmit FIFO empty
    +            TXFE: u1,
    +            ///  Transmit Fifo Underrun
    +            TXFIFOUDRN: u1,
    +            ///  Buffer not available interrupt
    +            BNA: u1,
    +            reserved11: u1,
    +            ///  Packet dropped status
    +            PKTDRPSTS: u1,
    +            ///  Babble error interrupt
    +            BERR: u1,
    +            ///  NAK interrupt
    +            NAK: u1,
    +            padding: u18,
    +        }),
    +        reserved272: [4]u8,
    +        ///  OTG_HS device IN endpoint 0 transfer size register
    +        OTG_HS_DIEPTSIZ0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u7,
    +            reserved19: u12,
    +            ///  Packet count
    +            PKTCNT: u2,
    +            padding: u11,
    +        }),
    +        ///  OTG_HS device endpoint-1 DMA address register
    +        OTG_HS_DIEPDMA1: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        ///  OTG_HS device IN endpoint transmit FIFO status register
    +        OTG_HS_DTXFSTS0: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint TxFIFO space avail
    +            INEPTFSAV: u16,
    +            padding: u16,
    +        }),
    +        reserved288: [4]u8,
    +        ///  OTG device endpoint-1 control register
    +        OTG_HS_DIEPCTL1: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USB active endpoint
    +            USBAEP: u1,
    +            ///  Even/odd frame
    +            EONUM_DPID: u1,
    +            ///  NAK status
    +            NAKSTS: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  STALL handshake
    +            Stall: u1,
    +            ///  TxFIFO number
    +            TXFNUM: u4,
    +            ///  Clear NAK
    +            CNAK: u1,
    +            ///  Set NAK
    +            SNAK: u1,
    +            ///  Set DATA0 PID
    +            SD0PID_SEVNFRM: u1,
    +            ///  Set odd frame
    +            SODDFRM: u1,
    +            ///  Endpoint disable
    +            EPDIS: u1,
    +            ///  Endpoint enable
    +            EPENA: u1,
    +        }),
    +        reserved296: [4]u8,
    +        ///  OTG device endpoint-1 interrupt register
    +        OTG_HS_DIEPINT1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  Timeout condition
    +            TOC: u1,
    +            ///  IN token received when TxFIFO is empty
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  IN endpoint NAK effective
    +            INEPNE: u1,
    +            ///  Transmit FIFO empty
    +            TXFE: u1,
    +            ///  Transmit Fifo Underrun
    +            TXFIFOUDRN: u1,
    +            ///  Buffer not available interrupt
    +            BNA: u1,
    +            reserved11: u1,
    +            ///  Packet dropped status
    +            PKTDRPSTS: u1,
    +            ///  Babble error interrupt
    +            BERR: u1,
    +            ///  NAK interrupt
    +            NAK: u1,
    +            padding: u18,
    +        }),
    +        reserved304: [4]u8,
    +        ///  OTG_HS device endpoint transfer size register
    +        OTG_HS_DIEPTSIZ1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Multi count
    +            MCNT: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS device endpoint-2 DMA address register
    +        OTG_HS_DIEPDMA2: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        ///  OTG_HS device IN endpoint transmit FIFO status register
    +        OTG_HS_DTXFSTS1: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint TxFIFO space avail
    +            INEPTFSAV: u16,
    +            padding: u16,
    +        }),
    +        reserved320: [4]u8,
    +        ///  OTG device endpoint-2 control register
    +        OTG_HS_DIEPCTL2: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USB active endpoint
    +            USBAEP: u1,
    +            ///  Even/odd frame
    +            EONUM_DPID: u1,
    +            ///  NAK status
    +            NAKSTS: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  STALL handshake
    +            Stall: u1,
    +            ///  TxFIFO number
    +            TXFNUM: u4,
    +            ///  Clear NAK
    +            CNAK: u1,
    +            ///  Set NAK
    +            SNAK: u1,
    +            ///  Set DATA0 PID
    +            SD0PID_SEVNFRM: u1,
    +            ///  Set odd frame
    +            SODDFRM: u1,
    +            ///  Endpoint disable
    +            EPDIS: u1,
    +            ///  Endpoint enable
    +            EPENA: u1,
    +        }),
    +        reserved328: [4]u8,
    +        ///  OTG device endpoint-2 interrupt register
    +        OTG_HS_DIEPINT2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  Timeout condition
    +            TOC: u1,
    +            ///  IN token received when TxFIFO is empty
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  IN endpoint NAK effective
    +            INEPNE: u1,
    +            ///  Transmit FIFO empty
    +            TXFE: u1,
    +            ///  Transmit Fifo Underrun
    +            TXFIFOUDRN: u1,
    +            ///  Buffer not available interrupt
    +            BNA: u1,
    +            reserved11: u1,
    +            ///  Packet dropped status
    +            PKTDRPSTS: u1,
    +            ///  Babble error interrupt
    +            BERR: u1,
    +            ///  NAK interrupt
    +            NAK: u1,
    +            padding: u18,
    +        }),
    +        reserved336: [4]u8,
    +        ///  OTG_HS device endpoint transfer size register
    +        OTG_HS_DIEPTSIZ2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Multi count
    +            MCNT: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS device endpoint-3 DMA address register
    +        OTG_HS_DIEPDMA3: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        ///  OTG_HS device IN endpoint transmit FIFO status register
    +        OTG_HS_DTXFSTS2: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint TxFIFO space avail
    +            INEPTFSAV: u16,
    +            padding: u16,
    +        }),
    +        reserved352: [4]u8,
    +        ///  OTG device endpoint-3 control register
    +        OTG_HS_DIEPCTL3: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USB active endpoint
    +            USBAEP: u1,
    +            ///  Even/odd frame
    +            EONUM_DPID: u1,
    +            ///  NAK status
    +            NAKSTS: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  STALL handshake
    +            Stall: u1,
    +            ///  TxFIFO number
    +            TXFNUM: u4,
    +            ///  Clear NAK
    +            CNAK: u1,
    +            ///  Set NAK
    +            SNAK: u1,
    +            ///  Set DATA0 PID
    +            SD0PID_SEVNFRM: u1,
    +            ///  Set odd frame
    +            SODDFRM: u1,
    +            ///  Endpoint disable
    +            EPDIS: u1,
    +            ///  Endpoint enable
    +            EPENA: u1,
    +        }),
    +        reserved360: [4]u8,
    +        ///  OTG device endpoint-3 interrupt register
    +        OTG_HS_DIEPINT3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  Timeout condition
    +            TOC: u1,
    +            ///  IN token received when TxFIFO is empty
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  IN endpoint NAK effective
    +            INEPNE: u1,
    +            ///  Transmit FIFO empty
    +            TXFE: u1,
    +            ///  Transmit Fifo Underrun
    +            TXFIFOUDRN: u1,
    +            ///  Buffer not available interrupt
    +            BNA: u1,
    +            reserved11: u1,
    +            ///  Packet dropped status
    +            PKTDRPSTS: u1,
    +            ///  Babble error interrupt
    +            BERR: u1,
    +            ///  NAK interrupt
    +            NAK: u1,
    +            padding: u18,
    +        }),
    +        reserved368: [4]u8,
    +        ///  OTG_HS device endpoint transfer size register
    +        OTG_HS_DIEPTSIZ3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Multi count
    +            MCNT: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS device endpoint-4 DMA address register
    +        OTG_HS_DIEPDMA4: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        ///  OTG_HS device IN endpoint transmit FIFO status register
    +        OTG_HS_DTXFSTS3: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint TxFIFO space avail
    +            INEPTFSAV: u16,
    +            padding: u16,
    +        }),
    +        reserved384: [4]u8,
    +        ///  OTG device endpoint-4 control register
    +        OTG_HS_DIEPCTL4: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USB active endpoint
    +            USBAEP: u1,
    +            ///  Even/odd frame
    +            EONUM_DPID: u1,
    +            ///  NAK status
    +            NAKSTS: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  STALL handshake
    +            Stall: u1,
    +            ///  TxFIFO number
    +            TXFNUM: u4,
    +            ///  Clear NAK
    +            CNAK: u1,
    +            ///  Set NAK
    +            SNAK: u1,
    +            ///  Set DATA0 PID
    +            SD0PID_SEVNFRM: u1,
    +            ///  Set odd frame
    +            SODDFRM: u1,
    +            ///  Endpoint disable
    +            EPDIS: u1,
    +            ///  Endpoint enable
    +            EPENA: u1,
    +        }),
    +        reserved392: [4]u8,
    +        ///  OTG device endpoint-4 interrupt register
    +        OTG_HS_DIEPINT4: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  Timeout condition
    +            TOC: u1,
    +            ///  IN token received when TxFIFO is empty
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  IN endpoint NAK effective
    +            INEPNE: u1,
    +            ///  Transmit FIFO empty
    +            TXFE: u1,
    +            ///  Transmit Fifo Underrun
    +            TXFIFOUDRN: u1,
    +            ///  Buffer not available interrupt
    +            BNA: u1,
    +            reserved11: u1,
    +            ///  Packet dropped status
    +            PKTDRPSTS: u1,
    +            ///  Babble error interrupt
    +            BERR: u1,
    +            ///  NAK interrupt
    +            NAK: u1,
    +            padding: u18,
    +        }),
    +        reserved400: [4]u8,
    +        ///  OTG_HS device endpoint transfer size register
    +        OTG_HS_DIEPTSIZ4: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Multi count
    +            MCNT: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS device endpoint-5 DMA address register
    +        OTG_HS_DIEPDMA5: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        ///  OTG_HS device IN endpoint transmit FIFO status register
    +        OTG_HS_DTXFSTS4: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint TxFIFO space avail
    +            INEPTFSAV: u16,
    +            padding: u16,
    +        }),
    +        reserved416: [4]u8,
    +        ///  OTG device endpoint-5 control register
    +        OTG_HS_DIEPCTL5: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USB active endpoint
    +            USBAEP: u1,
    +            ///  Even/odd frame
    +            EONUM_DPID: u1,
    +            ///  NAK status
    +            NAKSTS: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  STALL handshake
    +            Stall: u1,
    +            ///  TxFIFO number
    +            TXFNUM: u4,
    +            ///  Clear NAK
    +            CNAK: u1,
    +            ///  Set NAK
    +            SNAK: u1,
    +            ///  Set DATA0 PID
    +            SD0PID_SEVNFRM: u1,
    +            ///  Set odd frame
    +            SODDFRM: u1,
    +            ///  Endpoint disable
    +            EPDIS: u1,
    +            ///  Endpoint enable
    +            EPENA: u1,
    +        }),
    +        reserved424: [4]u8,
    +        ///  OTG device endpoint-5 interrupt register
    +        OTG_HS_DIEPINT5: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  Timeout condition
    +            TOC: u1,
    +            ///  IN token received when TxFIFO is empty
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  IN endpoint NAK effective
    +            INEPNE: u1,
    +            ///  Transmit FIFO empty
    +            TXFE: u1,
    +            ///  Transmit Fifo Underrun
    +            TXFIFOUDRN: u1,
    +            ///  Buffer not available interrupt
    +            BNA: u1,
    +            reserved11: u1,
    +            ///  Packet dropped status
    +            PKTDRPSTS: u1,
    +            ///  Babble error interrupt
    +            BERR: u1,
    +            ///  NAK interrupt
    +            NAK: u1,
    +            padding: u18,
    +        }),
    +        reserved432: [4]u8,
    +        ///  OTG_HS device endpoint transfer size register
    +        OTG_HS_DIEPTSIZ5: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Multi count
    +            MCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved440: [4]u8,
    +        ///  OTG_HS device IN endpoint transmit FIFO status register
    +        OTG_HS_DTXFSTS5: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint TxFIFO space avail
    +            INEPTFSAV: u16,
    +            padding: u16,
    +        }),
    +        reserved448: [4]u8,
    +        ///  OTG device endpoint-6 control register
    +        OTG_HS_DIEPCTL6: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USB active endpoint
    +            USBAEP: u1,
    +            ///  Even/odd frame
    +            EONUM_DPID: u1,
    +            ///  NAK status
    +            NAKSTS: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  STALL handshake
    +            Stall: u1,
    +            ///  TxFIFO number
    +            TXFNUM: u4,
    +            ///  Clear NAK
    +            CNAK: u1,
    +            ///  Set NAK
    +            SNAK: u1,
    +            ///  Set DATA0 PID
    +            SD0PID_SEVNFRM: u1,
    +            ///  Set odd frame
    +            SODDFRM: u1,
    +            ///  Endpoint disable
    +            EPDIS: u1,
    +            ///  Endpoint enable
    +            EPENA: u1,
    +        }),
    +        reserved456: [4]u8,
    +        ///  OTG device endpoint-6 interrupt register
    +        OTG_HS_DIEPINT6: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  Timeout condition
    +            TOC: u1,
    +            ///  IN token received when TxFIFO is empty
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  IN endpoint NAK effective
    +            INEPNE: u1,
    +            ///  Transmit FIFO empty
    +            TXFE: u1,
    +            ///  Transmit Fifo Underrun
    +            TXFIFOUDRN: u1,
    +            ///  Buffer not available interrupt
    +            BNA: u1,
    +            reserved11: u1,
    +            ///  Packet dropped status
    +            PKTDRPSTS: u1,
    +            ///  Babble error interrupt
    +            BERR: u1,
    +            ///  NAK interrupt
    +            NAK: u1,
    +            padding: u18,
    +        }),
    +        reserved480: [20]u8,
    +        ///  OTG device endpoint-7 control register
    +        OTG_HS_DIEPCTL7: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USB active endpoint
    +            USBAEP: u1,
    +            ///  Even/odd frame
    +            EONUM_DPID: u1,
    +            ///  NAK status
    +            NAKSTS: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  STALL handshake
    +            Stall: u1,
    +            ///  TxFIFO number
    +            TXFNUM: u4,
    +            ///  Clear NAK
    +            CNAK: u1,
    +            ///  Set NAK
    +            SNAK: u1,
    +            ///  Set DATA0 PID
    +            SD0PID_SEVNFRM: u1,
    +            ///  Set odd frame
    +            SODDFRM: u1,
    +            ///  Endpoint disable
    +            EPDIS: u1,
    +            ///  Endpoint enable
    +            EPENA: u1,
    +        }),
    +        reserved488: [4]u8,
    +        ///  OTG device endpoint-7 interrupt register
    +        OTG_HS_DIEPINT7: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  Timeout condition
    +            TOC: u1,
    +            ///  IN token received when TxFIFO is empty
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  IN endpoint NAK effective
    +            INEPNE: u1,
    +            ///  Transmit FIFO empty
    +            TXFE: u1,
    +            ///  Transmit Fifo Underrun
    +            TXFIFOUDRN: u1,
    +            ///  Buffer not available interrupt
    +            BNA: u1,
    +            reserved11: u1,
    +            ///  Packet dropped status
    +            PKTDRPSTS: u1,
    +            ///  Babble error interrupt
    +            BERR: u1,
    +            ///  NAK interrupt
    +            NAK: u1,
    +            padding: u18,
    +        }),
    +        reserved768: [276]u8,
    +        ///  OTG_HS device control OUT endpoint 0 control register
    +        OTG_HS_DOEPCTL0: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u2,
    +            reserved15: u13,
    +            ///  USB active endpoint
    +            USBAEP: u1,
    +            reserved17: u1,
    +            ///  NAK status
    +            NAKSTS: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Snoop mode
    +            SNPM: u1,
    +            ///  STALL handshake
    +            Stall: u1,
    +            reserved26: u4,
    +            ///  Clear NAK
    +            CNAK: u1,
    +            ///  Set NAK
    +            SNAK: u1,
    +            reserved30: u2,
    +            ///  Endpoint disable
    +            EPDIS: u1,
    +            ///  Endpoint enable
    +            EPENA: u1,
    +        }),
    +        reserved776: [4]u8,
    +        ///  OTG_HS device endpoint-0 interrupt register
    +        OTG_HS_DOEPINT0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  SETUP phase done
    +            STUP: u1,
    +            ///  OUT token received when endpoint disabled
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  Back-to-back SETUP packets received
    +            B2BSTUP: u1,
    +            reserved14: u7,
    +            ///  NYET interrupt
    +            NYET: u1,
    +            padding: u17,
    +        }),
    +        reserved784: [4]u8,
    +        ///  OTG_HS device endpoint-1 transfer size register
    +        OTG_HS_DOEPTSIZ0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u7,
    +            reserved19: u12,
    +            ///  Packet count
    +            PKTCNT: u1,
    +            reserved29: u9,
    +            ///  SETUP packet count
    +            STUPCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved800: [12]u8,
    +        ///  OTG device endpoint-1 control register
    +        OTG_HS_DOEPCTL1: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USB active endpoint
    +            USBAEP: u1,
    +            ///  Even odd frame/Endpoint data PID
    +            EONUM_DPID: u1,
    +            ///  NAK status
    +            NAKSTS: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Snoop mode
    +            SNPM: u1,
    +            ///  STALL handshake
    +            Stall: u1,
    +            reserved26: u4,
    +            ///  Clear NAK
    +            CNAK: u1,
    +            ///  Set NAK
    +            SNAK: u1,
    +            ///  Set DATA0 PID/Set even frame
    +            SD0PID_SEVNFRM: u1,
    +            ///  Set odd frame
    +            SODDFRM: u1,
    +            ///  Endpoint disable
    +            EPDIS: u1,
    +            ///  Endpoint enable
    +            EPENA: u1,
    +        }),
    +        reserved808: [4]u8,
    +        ///  OTG_HS device endpoint-1 interrupt register
    +        OTG_HS_DOEPINT1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  SETUP phase done
    +            STUP: u1,
    +            ///  OUT token received when endpoint disabled
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  Back-to-back SETUP packets received
    +            B2BSTUP: u1,
    +            reserved14: u7,
    +            ///  NYET interrupt
    +            NYET: u1,
    +            padding: u17,
    +        }),
    +        reserved816: [4]u8,
    +        ///  OTG_HS device endpoint-2 transfer size register
    +        OTG_HS_DOEPTSIZ1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Received data PID/SETUP packet count
    +            RXDPID_STUPCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved832: [12]u8,
    +        ///  OTG device endpoint-2 control register
    +        OTG_HS_DOEPCTL2: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USB active endpoint
    +            USBAEP: u1,
    +            ///  Even odd frame/Endpoint data PID
    +            EONUM_DPID: u1,
    +            ///  NAK status
    +            NAKSTS: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Snoop mode
    +            SNPM: u1,
    +            ///  STALL handshake
    +            Stall: u1,
    +            reserved26: u4,
    +            ///  Clear NAK
    +            CNAK: u1,
    +            ///  Set NAK
    +            SNAK: u1,
    +            ///  Set DATA0 PID/Set even frame
    +            SD0PID_SEVNFRM: u1,
    +            ///  Set odd frame
    +            SODDFRM: u1,
    +            ///  Endpoint disable
    +            EPDIS: u1,
    +            ///  Endpoint enable
    +            EPENA: u1,
    +        }),
    +        reserved840: [4]u8,
    +        ///  OTG_HS device endpoint-2 interrupt register
    +        OTG_HS_DOEPINT2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  SETUP phase done
    +            STUP: u1,
    +            ///  OUT token received when endpoint disabled
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  Back-to-back SETUP packets received
    +            B2BSTUP: u1,
    +            reserved14: u7,
    +            ///  NYET interrupt
    +            NYET: u1,
    +            padding: u17,
    +        }),
    +        reserved848: [4]u8,
    +        ///  OTG_HS device endpoint-3 transfer size register
    +        OTG_HS_DOEPTSIZ2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Received data PID/SETUP packet count
    +            RXDPID_STUPCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved864: [12]u8,
    +        ///  OTG device endpoint-3 control register
    +        OTG_HS_DOEPCTL3: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USB active endpoint
    +            USBAEP: u1,
    +            ///  Even odd frame/Endpoint data PID
    +            EONUM_DPID: u1,
    +            ///  NAK status
    +            NAKSTS: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Snoop mode
    +            SNPM: u1,
    +            ///  STALL handshake
    +            Stall: u1,
    +            reserved26: u4,
    +            ///  Clear NAK
    +            CNAK: u1,
    +            ///  Set NAK
    +            SNAK: u1,
    +            ///  Set DATA0 PID/Set even frame
    +            SD0PID_SEVNFRM: u1,
    +            ///  Set odd frame
    +            SODDFRM: u1,
    +            ///  Endpoint disable
    +            EPDIS: u1,
    +            ///  Endpoint enable
    +            EPENA: u1,
    +        }),
    +        reserved872: [4]u8,
    +        ///  OTG_HS device endpoint-3 interrupt register
    +        OTG_HS_DOEPINT3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  SETUP phase done
    +            STUP: u1,
    +            ///  OUT token received when endpoint disabled
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  Back-to-back SETUP packets received
    +            B2BSTUP: u1,
    +            reserved14: u7,
    +            ///  NYET interrupt
    +            NYET: u1,
    +            padding: u17,
    +        }),
    +        reserved880: [4]u8,
    +        ///  OTG_HS device endpoint-4 transfer size register
    +        OTG_HS_DOEPTSIZ3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Received data PID/SETUP packet count
    +            RXDPID_STUPCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved904: [20]u8,
    +        ///  OTG_HS device endpoint-4 interrupt register
    +        OTG_HS_DOEPINT4: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  SETUP phase done
    +            STUP: u1,
    +            ///  OUT token received when endpoint disabled
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  Back-to-back SETUP packets received
    +            B2BSTUP: u1,
    +            reserved14: u7,
    +            ///  NYET interrupt
    +            NYET: u1,
    +            padding: u17,
    +        }),
    +        reserved912: [4]u8,
    +        ///  OTG_HS device endpoint-5 transfer size register
    +        OTG_HS_DOEPTSIZ4: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Received data PID/SETUP packet count
    +            RXDPID_STUPCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved936: [20]u8,
    +        ///  OTG_HS device endpoint-5 interrupt register
    +        OTG_HS_DOEPINT5: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  SETUP phase done
    +            STUP: u1,
    +            ///  OUT token received when endpoint disabled
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  Back-to-back SETUP packets received
    +            B2BSTUP: u1,
    +            reserved14: u7,
    +            ///  NYET interrupt
    +            NYET: u1,
    +            padding: u17,
    +        }),
    +        reserved968: [28]u8,
    +        ///  OTG_HS device endpoint-6 interrupt register
    +        OTG_HS_DOEPINT6: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  SETUP phase done
    +            STUP: u1,
    +            ///  OUT token received when endpoint disabled
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  Back-to-back SETUP packets received
    +            B2BSTUP: u1,
    +            reserved14: u7,
    +            ///  NYET interrupt
    +            NYET: u1,
    +            padding: u17,
    +        }),
    +        reserved1000: [28]u8,
    +        ///  OTG_HS device endpoint-7 interrupt register
    +        OTG_HS_DOEPINT7: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  SETUP phase done
    +            STUP: u1,
    +            ///  OUT token received when endpoint disabled
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  Back-to-back SETUP packets received
    +            B2BSTUP: u1,
    +            reserved14: u7,
    +            ///  NYET interrupt
    +            NYET: u1,
    +            padding: u17,
    +        }),
    +    };
    +
    +    ///  USB on the go high speed
    +    pub const OTG_HS_HOST = extern struct {
    +        ///  OTG_HS host configuration register
    +        OTG_HS_HCFG: mmio.Mmio(packed struct(u32) {
    +            ///  FS/LS PHY clock select
    +            FSLSPCS: u2,
    +            ///  FS- and LS-only support
    +            FSLSS: u1,
    +            padding: u29,
    +        }),
    +        ///  OTG_HS Host frame interval register
    +        OTG_HS_HFIR: mmio.Mmio(packed struct(u32) {
    +            ///  Frame interval
    +            FRIVL: u16,
    +            padding: u16,
    +        }),
    +        ///  OTG_HS host frame number/frame time remaining register
    +        OTG_HS_HFNUM: mmio.Mmio(packed struct(u32) {
    +            ///  Frame number
    +            FRNUM: u16,
    +            ///  Frame time remaining
    +            FTREM: u16,
    +        }),
    +        reserved16: [4]u8,
    +        ///  OTG_HS_Host periodic transmit FIFO/queue status register
    +        OTG_HS_HPTXSTS: mmio.Mmio(packed struct(u32) {
    +            ///  Periodic transmit data FIFO space available
    +            PTXFSAVL: u16,
    +            ///  Periodic transmit request queue space available
    +            PTXQSAV: u8,
    +            ///  Top of the periodic transmit request queue
    +            PTXQTOP: u8,
    +        }),
    +        ///  OTG_HS Host all channels interrupt register
    +        OTG_HS_HAINT: mmio.Mmio(packed struct(u32) {
    +            ///  Channel interrupts
    +            HAINT: u16,
    +            padding: u16,
    +        }),
    +        ///  OTG_HS host all channels interrupt mask register
    +        OTG_HS_HAINTMSK: mmio.Mmio(packed struct(u32) {
    +            ///  Channel interrupt mask
    +            HAINTM: u16,
    +            padding: u16,
    +        }),
    +        reserved64: [36]u8,
    +        ///  OTG_HS host port control and status register
    +        OTG_HS_HPRT: mmio.Mmio(packed struct(u32) {
    +            ///  Port connect status
    +            PCSTS: u1,
    +            ///  Port connect detected
    +            PCDET: u1,
    +            ///  Port enable
    +            PENA: u1,
    +            ///  Port enable/disable change
    +            PENCHNG: u1,
    +            ///  Port overcurrent active
    +            POCA: u1,
    +            ///  Port overcurrent change
    +            POCCHNG: u1,
    +            ///  Port resume
    +            PRES: u1,
    +            ///  Port suspend
    +            PSUSP: u1,
    +            ///  Port reset
    +            PRST: u1,
    +            reserved10: u1,
    +            ///  Port line status
    +            PLSTS: u2,
    +            ///  Port power
    +            PPWR: u1,
    +            ///  Port test control
    +            PTCTL: u4,
    +            ///  Port speed
    +            PSPD: u2,
    +            padding: u13,
    +        }),
    +        reserved256: [188]u8,
    +        ///  OTG_HS host channel-0 characteristics register
    +        OTG_HS_HCCHAR0: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multi Count (MC) / Error Count (EC)
    +            MC: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        ///  OTG_HS host channel-0 split control register
    +        OTG_HS_HCSPLT0: mmio.Mmio(packed struct(u32) {
    +            ///  Port address
    +            PRTADDR: u7,
    +            ///  Hub address
    +            HUBADDR: u7,
    +            ///  XACTPOS
    +            XACTPOS: u2,
    +            ///  Do complete split
    +            COMPLSPLT: u1,
    +            reserved31: u14,
    +            ///  Split enable
    +            SPLITEN: u1,
    +        }),
    +        ///  OTG_HS host channel-11 interrupt register
    +        OTG_HS_HCINT0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            ///  Response received interrupt
    +            NYET: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-11 interrupt mask register
    +        OTG_HS_HCINTMSK0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-11 transfer size register
    +        OTG_HS_HCTSIZ0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS host channel-0 DMA address register
    +        OTG_HS_HCDMA0: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        reserved288: [8]u8,
    +        ///  OTG_HS host channel-1 characteristics register
    +        OTG_HS_HCCHAR1: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multi Count (MC) / Error Count (EC)
    +            MC: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        ///  OTG_HS host channel-1 split control register
    +        OTG_HS_HCSPLT1: mmio.Mmio(packed struct(u32) {
    +            ///  Port address
    +            PRTADDR: u7,
    +            ///  Hub address
    +            HUBADDR: u7,
    +            ///  XACTPOS
    +            XACTPOS: u2,
    +            ///  Do complete split
    +            COMPLSPLT: u1,
    +            reserved31: u14,
    +            ///  Split enable
    +            SPLITEN: u1,
    +        }),
    +        ///  OTG_HS host channel-1 interrupt register
    +        OTG_HS_HCINT1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            ///  Response received interrupt
    +            NYET: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-1 interrupt mask register
    +        OTG_HS_HCINTMSK1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-1 transfer size register
    +        OTG_HS_HCTSIZ1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS host channel-1 DMA address register
    +        OTG_HS_HCDMA1: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        reserved320: [8]u8,
    +        ///  OTG_HS host channel-2 characteristics register
    +        OTG_HS_HCCHAR2: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multi Count (MC) / Error Count (EC)
    +            MC: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        ///  OTG_HS host channel-2 split control register
    +        OTG_HS_HCSPLT2: mmio.Mmio(packed struct(u32) {
    +            ///  Port address
    +            PRTADDR: u7,
    +            ///  Hub address
    +            HUBADDR: u7,
    +            ///  XACTPOS
    +            XACTPOS: u2,
    +            ///  Do complete split
    +            COMPLSPLT: u1,
    +            reserved31: u14,
    +            ///  Split enable
    +            SPLITEN: u1,
    +        }),
    +        ///  OTG_HS host channel-2 interrupt register
    +        OTG_HS_HCINT2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            ///  Response received interrupt
    +            NYET: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-2 interrupt mask register
    +        OTG_HS_HCINTMSK2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-2 transfer size register
    +        OTG_HS_HCTSIZ2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS host channel-2 DMA address register
    +        OTG_HS_HCDMA2: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        reserved352: [8]u8,
    +        ///  OTG_HS host channel-3 characteristics register
    +        OTG_HS_HCCHAR3: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multi Count (MC) / Error Count (EC)
    +            MC: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        ///  OTG_HS host channel-3 split control register
    +        OTG_HS_HCSPLT3: mmio.Mmio(packed struct(u32) {
    +            ///  Port address
    +            PRTADDR: u7,
    +            ///  Hub address
    +            HUBADDR: u7,
    +            ///  XACTPOS
    +            XACTPOS: u2,
    +            ///  Do complete split
    +            COMPLSPLT: u1,
    +            reserved31: u14,
    +            ///  Split enable
    +            SPLITEN: u1,
    +        }),
    +        ///  OTG_HS host channel-3 interrupt register
    +        OTG_HS_HCINT3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            ///  Response received interrupt
    +            NYET: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-3 interrupt mask register
    +        OTG_HS_HCINTMSK3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-3 transfer size register
    +        OTG_HS_HCTSIZ3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS host channel-3 DMA address register
    +        OTG_HS_HCDMA3: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        reserved384: [8]u8,
    +        ///  OTG_HS host channel-4 characteristics register
    +        OTG_HS_HCCHAR4: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multi Count (MC) / Error Count (EC)
    +            MC: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        ///  OTG_HS host channel-4 split control register
    +        OTG_HS_HCSPLT4: mmio.Mmio(packed struct(u32) {
    +            ///  Port address
    +            PRTADDR: u7,
    +            ///  Hub address
    +            HUBADDR: u7,
    +            ///  XACTPOS
    +            XACTPOS: u2,
    +            ///  Do complete split
    +            COMPLSPLT: u1,
    +            reserved31: u14,
    +            ///  Split enable
    +            SPLITEN: u1,
    +        }),
    +        ///  OTG_HS host channel-4 interrupt register
    +        OTG_HS_HCINT4: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            ///  Response received interrupt
    +            NYET: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-4 interrupt mask register
    +        OTG_HS_HCINTMSK4: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-4 transfer size register
    +        OTG_HS_HCTSIZ4: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS host channel-4 DMA address register
    +        OTG_HS_HCDMA4: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        reserved416: [8]u8,
    +        ///  OTG_HS host channel-5 characteristics register
    +        OTG_HS_HCCHAR5: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multi Count (MC) / Error Count (EC)
    +            MC: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        ///  OTG_HS host channel-5 split control register
    +        OTG_HS_HCSPLT5: mmio.Mmio(packed struct(u32) {
    +            ///  Port address
    +            PRTADDR: u7,
    +            ///  Hub address
    +            HUBADDR: u7,
    +            ///  XACTPOS
    +            XACTPOS: u2,
    +            ///  Do complete split
    +            COMPLSPLT: u1,
    +            reserved31: u14,
    +            ///  Split enable
    +            SPLITEN: u1,
    +        }),
    +        ///  OTG_HS host channel-5 interrupt register
    +        OTG_HS_HCINT5: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            ///  Response received interrupt
    +            NYET: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-5 interrupt mask register
    +        OTG_HS_HCINTMSK5: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-5 transfer size register
    +        OTG_HS_HCTSIZ5: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS host channel-5 DMA address register
    +        OTG_HS_HCDMA5: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        reserved448: [8]u8,
    +        ///  OTG_HS host channel-6 characteristics register
    +        OTG_HS_HCCHAR6: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multi Count (MC) / Error Count (EC)
    +            MC: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        ///  OTG_HS host channel-6 split control register
    +        OTG_HS_HCSPLT6: mmio.Mmio(packed struct(u32) {
    +            ///  Port address
    +            PRTADDR: u7,
    +            ///  Hub address
    +            HUBADDR: u7,
    +            ///  XACTPOS
    +            XACTPOS: u2,
    +            ///  Do complete split
    +            COMPLSPLT: u1,
    +            reserved31: u14,
    +            ///  Split enable
    +            SPLITEN: u1,
    +        }),
    +        ///  OTG_HS host channel-6 interrupt register
    +        OTG_HS_HCINT6: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            ///  Response received interrupt
    +            NYET: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-6 interrupt mask register
    +        OTG_HS_HCINTMSK6: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-6 transfer size register
    +        OTG_HS_HCTSIZ6: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS host channel-6 DMA address register
    +        OTG_HS_HCDMA6: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        reserved480: [8]u8,
    +        ///  OTG_HS host channel-7 characteristics register
    +        OTG_HS_HCCHAR7: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multi Count (MC) / Error Count (EC)
    +            MC: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        ///  OTG_HS host channel-7 split control register
    +        OTG_HS_HCSPLT7: mmio.Mmio(packed struct(u32) {
    +            ///  Port address
    +            PRTADDR: u7,
    +            ///  Hub address
    +            HUBADDR: u7,
    +            ///  XACTPOS
    +            XACTPOS: u2,
    +            ///  Do complete split
    +            COMPLSPLT: u1,
    +            reserved31: u14,
    +            ///  Split enable
    +            SPLITEN: u1,
    +        }),
    +        ///  OTG_HS host channel-7 interrupt register
    +        OTG_HS_HCINT7: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            ///  Response received interrupt
    +            NYET: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-7 interrupt mask register
    +        OTG_HS_HCINTMSK7: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-7 transfer size register
    +        OTG_HS_HCTSIZ7: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS host channel-7 DMA address register
    +        OTG_HS_HCDMA7: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        reserved512: [8]u8,
    +        ///  OTG_HS host channel-8 characteristics register
    +        OTG_HS_HCCHAR8: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multi Count (MC) / Error Count (EC)
    +            MC: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        ///  OTG_HS host channel-8 split control register
    +        OTG_HS_HCSPLT8: mmio.Mmio(packed struct(u32) {
    +            ///  Port address
    +            PRTADDR: u7,
    +            ///  Hub address
    +            HUBADDR: u7,
    +            ///  XACTPOS
    +            XACTPOS: u2,
    +            ///  Do complete split
    +            COMPLSPLT: u1,
    +            reserved31: u14,
    +            ///  Split enable
    +            SPLITEN: u1,
    +        }),
    +        ///  OTG_HS host channel-8 interrupt register
    +        OTG_HS_HCINT8: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            ///  Response received interrupt
    +            NYET: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-8 interrupt mask register
    +        OTG_HS_HCINTMSK8: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-8 transfer size register
    +        OTG_HS_HCTSIZ8: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS host channel-8 DMA address register
    +        OTG_HS_HCDMA8: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        reserved544: [8]u8,
    +        ///  OTG_HS host channel-9 characteristics register
    +        OTG_HS_HCCHAR9: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multi Count (MC) / Error Count (EC)
    +            MC: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        ///  OTG_HS host channel-9 split control register
    +        OTG_HS_HCSPLT9: mmio.Mmio(packed struct(u32) {
    +            ///  Port address
    +            PRTADDR: u7,
    +            ///  Hub address
    +            HUBADDR: u7,
    +            ///  XACTPOS
    +            XACTPOS: u2,
    +            ///  Do complete split
    +            COMPLSPLT: u1,
    +            reserved31: u14,
    +            ///  Split enable
    +            SPLITEN: u1,
    +        }),
    +        ///  OTG_HS host channel-9 interrupt register
    +        OTG_HS_HCINT9: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            ///  Response received interrupt
    +            NYET: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-9 interrupt mask register
    +        OTG_HS_HCINTMSK9: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-9 transfer size register
    +        OTG_HS_HCTSIZ9: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS host channel-9 DMA address register
    +        OTG_HS_HCDMA9: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        reserved576: [8]u8,
    +        ///  OTG_HS host channel-10 characteristics register
    +        OTG_HS_HCCHAR10: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multi Count (MC) / Error Count (EC)
    +            MC: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        ///  OTG_HS host channel-10 split control register
    +        OTG_HS_HCSPLT10: mmio.Mmio(packed struct(u32) {
    +            ///  Port address
    +            PRTADDR: u7,
    +            ///  Hub address
    +            HUBADDR: u7,
    +            ///  XACTPOS
    +            XACTPOS: u2,
    +            ///  Do complete split
    +            COMPLSPLT: u1,
    +            reserved31: u14,
    +            ///  Split enable
    +            SPLITEN: u1,
    +        }),
    +        ///  OTG_HS host channel-10 interrupt register
    +        OTG_HS_HCINT10: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            ///  Response received interrupt
    +            NYET: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-10 interrupt mask register
    +        OTG_HS_HCINTMSK10: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-10 transfer size register
    +        OTG_HS_HCTSIZ10: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS host channel-10 DMA address register
    +        OTG_HS_HCDMA10: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        reserved608: [8]u8,
    +        ///  OTG_HS host channel-11 characteristics register
    +        OTG_HS_HCCHAR11: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multi Count (MC) / Error Count (EC)
    +            MC: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        ///  OTG_HS host channel-11 split control register
    +        OTG_HS_HCSPLT11: mmio.Mmio(packed struct(u32) {
    +            ///  Port address
    +            PRTADDR: u7,
    +            ///  Hub address
    +            HUBADDR: u7,
    +            ///  XACTPOS
    +            XACTPOS: u2,
    +            ///  Do complete split
    +            COMPLSPLT: u1,
    +            reserved31: u14,
    +            ///  Split enable
    +            SPLITEN: u1,
    +        }),
    +        ///  OTG_HS host channel-11 interrupt register
    +        OTG_HS_HCINT11: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            ///  Response received interrupt
    +            NYET: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-11 interrupt mask register
    +        OTG_HS_HCINTMSK11: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-11 transfer size register
    +        OTG_HS_HCTSIZ11: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS host channel-11 DMA address register
    +        OTG_HS_HCDMA11: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +    };
    +
    +    ///  USB on the go high speed
    +    pub const OTG_HS_GLOBAL = extern struct {
    +        ///  OTG_HS control and status register
    +        OTG_HS_GOTGCTL: mmio.Mmio(packed struct(u32) {
    +            ///  Session request success
    +            SRQSCS: u1,
    +            ///  Session request
    +            SRQ: u1,
    +            reserved8: u6,
    +            ///  Host negotiation success
    +            HNGSCS: u1,
    +            ///  HNP request
    +            HNPRQ: u1,
    +            ///  Host set HNP enable
    +            HSHNPEN: u1,
    +            ///  Device HNP enabled
    +            DHNPEN: u1,
    +            reserved16: u4,
    +            ///  Connector ID status
    +            CIDSTS: u1,
    +            ///  Long/short debounce time
    +            DBCT: u1,
    +            ///  A-session valid
    +            ASVLD: u1,
    +            ///  B-session valid
    +            BSVLD: u1,
    +            padding: u12,
    +        }),
    +        ///  OTG_HS interrupt register
    +        OTG_HS_GOTGINT: mmio.Mmio(packed struct(u32) {
    +            reserved2: u2,
    +            ///  Session end detected
    +            SEDET: u1,
    +            reserved8: u5,
    +            ///  Session request success status change
    +            SRSSCHG: u1,
    +            ///  Host negotiation success status change
    +            HNSSCHG: u1,
    +            reserved17: u7,
    +            ///  Host negotiation detected
    +            HNGDET: u1,
    +            ///  A-device timeout change
    +            ADTOCHG: u1,
    +            ///  Debounce done
    +            DBCDNE: u1,
    +            padding: u12,
    +        }),
    +        ///  OTG_HS AHB configuration register
    +        OTG_HS_GAHBCFG: mmio.Mmio(packed struct(u32) {
    +            ///  Global interrupt mask
    +            GINT: u1,
    +            ///  Burst length/type
    +            HBSTLEN: u4,
    +            ///  DMA enable
    +            DMAEN: u1,
    +            reserved7: u1,
    +            ///  TxFIFO empty level
    +            TXFELVL: u1,
    +            ///  Periodic TxFIFO empty level
    +            PTXFELVL: u1,
    +            padding: u23,
    +        }),
    +        ///  OTG_HS USB configuration register
    +        OTG_HS_GUSBCFG: mmio.Mmio(packed struct(u32) {
    +            ///  FS timeout calibration
    +            TOCAL: u3,
    +            reserved6: u3,
    +            ///  USB 2.0 high-speed ULPI PHY or USB 1.1 full-speed serial transceiver select
    +            PHYSEL: u1,
    +            reserved8: u1,
    +            ///  SRP-capable
    +            SRPCAP: u1,
    +            ///  HNP-capable
    +            HNPCAP: u1,
    +            ///  USB turnaround time
    +            TRDT: u4,
    +            reserved15: u1,
    +            ///  PHY Low-power clock select
    +            PHYLPCS: u1,
    +            reserved17: u1,
    +            ///  ULPI FS/LS select
    +            ULPIFSLS: u1,
    +            ///  ULPI Auto-resume
    +            ULPIAR: u1,
    +            ///  ULPI Clock SuspendM
    +            ULPICSM: u1,
    +            ///  ULPI External VBUS Drive
    +            ULPIEVBUSD: u1,
    +            ///  ULPI external VBUS indicator
    +            ULPIEVBUSI: u1,
    +            ///  TermSel DLine pulsing selection
    +            TSDPS: u1,
    +            ///  Indicator complement
    +            PCCI: u1,
    +            ///  Indicator pass through
    +            PTCI: u1,
    +            ///  ULPI interface protect disable
    +            ULPIIPD: u1,
    +            reserved29: u3,
    +            ///  Forced host mode
    +            FHMOD: u1,
    +            ///  Forced peripheral mode
    +            FDMOD: u1,
    +            ///  Corrupt Tx packet
    +            CTXPKT: u1,
    +        }),
    +        ///  OTG_HS reset register
    +        OTG_HS_GRSTCTL: mmio.Mmio(packed struct(u32) {
    +            ///  Core soft reset
    +            CSRST: u1,
    +            ///  HCLK soft reset
    +            HSRST: u1,
    +            ///  Host frame counter reset
    +            FCRST: u1,
    +            reserved4: u1,
    +            ///  RxFIFO flush
    +            RXFFLSH: u1,
    +            ///  TxFIFO flush
    +            TXFFLSH: u1,
    +            ///  TxFIFO number
    +            TXFNUM: u5,
    +            reserved30: u19,
    +            ///  DMA request signal
    +            DMAREQ: u1,
    +            ///  AHB master idle
    +            AHBIDL: u1,
    +        }),
    +        ///  OTG_HS core interrupt register
    +        OTG_HS_GINTSTS: mmio.Mmio(packed struct(u32) {
    +            ///  Current mode of operation
    +            CMOD: u1,
    +            ///  Mode mismatch interrupt
    +            MMIS: u1,
    +            ///  OTG interrupt
    +            OTGINT: u1,
    +            ///  Start of frame
    +            SOF: u1,
    +            ///  RxFIFO nonempty
    +            RXFLVL: u1,
    +            ///  Nonperiodic TxFIFO empty
    +            NPTXFE: u1,
    +            ///  Global IN nonperiodic NAK effective
    +            GINAKEFF: u1,
    +            ///  Global OUT NAK effective
    +            BOUTNAKEFF: u1,
    +            reserved10: u2,
    +            ///  Early suspend
    +            ESUSP: u1,
    +            ///  USB suspend
    +            USBSUSP: u1,
    +            ///  USB reset
    +            USBRST: u1,
    +            ///  Enumeration done
    +            ENUMDNE: u1,
    +            ///  Isochronous OUT packet dropped interrupt
    +            ISOODRP: u1,
    +            ///  End of periodic frame interrupt
    +            EOPF: u1,
    +            reserved18: u2,
    +            ///  IN endpoint interrupt
    +            IEPINT: u1,
    +            ///  OUT endpoint interrupt
    +            OEPINT: u1,
    +            ///  Incomplete isochronous IN transfer
    +            IISOIXFR: u1,
    +            ///  Incomplete periodic transfer
    +            PXFR_INCOMPISOOUT: u1,
    +            ///  Data fetch suspended
    +            DATAFSUSP: u1,
    +            reserved24: u1,
    +            ///  Host port interrupt
    +            HPRTINT: u1,
    +            ///  Host channels interrupt
    +            HCINT: u1,
    +            ///  Periodic TxFIFO empty
    +            PTXFE: u1,
    +            reserved28: u1,
    +            ///  Connector ID status change
    +            CIDSCHG: u1,
    +            ///  Disconnect detected interrupt
    +            DISCINT: u1,
    +            ///  Session request/new session detected interrupt
    +            SRQINT: u1,
    +            ///  Resume/remote wakeup detected interrupt
    +            WKUINT: u1,
    +        }),
    +        ///  OTG_HS interrupt mask register
    +        OTG_HS_GINTMSK: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  Mode mismatch interrupt mask
    +            MMISM: u1,
    +            ///  OTG interrupt mask
    +            OTGINT: u1,
    +            ///  Start of frame mask
    +            SOFM: u1,
    +            ///  Receive FIFO nonempty mask
    +            RXFLVLM: u1,
    +            ///  Nonperiodic TxFIFO empty mask
    +            NPTXFEM: u1,
    +            ///  Global nonperiodic IN NAK effective mask
    +            GINAKEFFM: u1,
    +            ///  Global OUT NAK effective mask
    +            GONAKEFFM: u1,
    +            reserved10: u2,
    +            ///  Early suspend mask
    +            ESUSPM: u1,
    +            ///  USB suspend mask
    +            USBSUSPM: u1,
    +            ///  USB reset mask
    +            USBRST: u1,
    +            ///  Enumeration done mask
    +            ENUMDNEM: u1,
    +            ///  Isochronous OUT packet dropped interrupt mask
    +            ISOODRPM: u1,
    +            ///  End of periodic frame interrupt mask
    +            EOPFM: u1,
    +            reserved17: u1,
    +            ///  Endpoint mismatch interrupt mask
    +            EPMISM: u1,
    +            ///  IN endpoints interrupt mask
    +            IEPINT: u1,
    +            ///  OUT endpoints interrupt mask
    +            OEPINT: u1,
    +            ///  Incomplete isochronous IN transfer mask
    +            IISOIXFRM: u1,
    +            ///  Incomplete periodic transfer mask
    +            PXFRM_IISOOXFRM: u1,
    +            ///  Data fetch suspended mask
    +            FSUSPM: u1,
    +            reserved24: u1,
    +            ///  Host port interrupt mask
    +            PRTIM: u1,
    +            ///  Host channels interrupt mask
    +            HCIM: u1,
    +            ///  Periodic TxFIFO empty mask
    +            PTXFEM: u1,
    +            reserved28: u1,
    +            ///  Connector ID status change mask
    +            CIDSCHGM: u1,
    +            ///  Disconnect detected interrupt mask
    +            DISCINT: u1,
    +            ///  Session request/new session detected interrupt mask
    +            SRQIM: u1,
    +            ///  Resume/remote wakeup detected interrupt mask
    +            WUIM: u1,
    +        }),
    +        ///  OTG_HS Receive status debug read register (host mode)
    +        OTG_HS_GRXSTSR_Host: mmio.Mmio(packed struct(u32) {
    +            ///  Channel number
    +            CHNUM: u4,
    +            ///  Byte count
    +            BCNT: u11,
    +            ///  Data PID
    +            DPID: u2,
    +            ///  Packet status
    +            PKTSTS: u4,
    +            padding: u11,
    +        }),
    +        ///  OTG_HS status read and pop register (host mode)
    +        OTG_HS_GRXSTSP_Host: mmio.Mmio(packed struct(u32) {
    +            ///  Channel number
    +            CHNUM: u4,
    +            ///  Byte count
    +            BCNT: u11,
    +            ///  Data PID
    +            DPID: u2,
    +            ///  Packet status
    +            PKTSTS: u4,
    +            padding: u11,
    +        }),
    +        ///  OTG_HS Receive FIFO size register
    +        OTG_HS_GRXFSIZ: mmio.Mmio(packed struct(u32) {
    +            ///  RxFIFO depth
    +            RXFD: u16,
    +            padding: u16,
    +        }),
    +        ///  OTG_HS nonperiodic transmit FIFO size register (host mode)
    +        OTG_HS_GNPTXFSIZ_Host: mmio.Mmio(packed struct(u32) {
    +            ///  Nonperiodic transmit RAM start address
    +            NPTXFSA: u16,
    +            ///  Nonperiodic TxFIFO depth
    +            NPTXFD: u16,
    +        }),
    +        ///  OTG_HS nonperiodic transmit FIFO/queue status register
    +        OTG_HS_GNPTXSTS: mmio.Mmio(packed struct(u32) {
    +            ///  Nonperiodic TxFIFO space available
    +            NPTXFSAV: u16,
    +            ///  Nonperiodic transmit request queue space available
    +            NPTQXSAV: u8,
    +            ///  Top of the nonperiodic transmit request queue
    +            NPTXQTOP: u7,
    +            padding: u1,
    +        }),
    +        reserved56: [8]u8,
    +        ///  OTG_HS general core configuration register
    +        OTG_HS_GCCFG: mmio.Mmio(packed struct(u32) {
    +            reserved16: u16,
    +            ///  Power down
    +            PWRDWN: u1,
    +            ///  Enable I2C bus connection for the external I2C PHY interface
    +            I2CPADEN: u1,
    +            ///  Enable the VBUS sensing device
    +            VBUSASEN: u1,
    +            ///  Enable the VBUS sensing device
    +            VBUSBSEN: u1,
    +            ///  SOF output enable
    +            SOFOUTEN: u1,
    +            ///  VBUS sensing disable option
    +            NOVBUSSENS: u1,
    +            padding: u10,
    +        }),
    +        ///  OTG_HS core ID register
    +        OTG_HS_CID: mmio.Mmio(packed struct(u32) {
    +            ///  Product ID field
    +            PRODUCT_ID: u32,
    +        }),
    +        reserved256: [192]u8,
    +        ///  OTG_HS Host periodic transmit FIFO size register
    +        OTG_HS_HPTXFSIZ: mmio.Mmio(packed struct(u32) {
    +            ///  Host periodic TxFIFO start address
    +            PTXSA: u16,
    +            ///  Host periodic TxFIFO depth
    +            PTXFD: u16,
    +        }),
    +        ///  OTG_HS device IN endpoint transmit FIFO size register
    +        OTG_HS_DIEPTXF1: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint FIFOx transmit RAM start address
    +            INEPTXSA: u16,
    +            ///  IN endpoint TxFIFO depth
    +            INEPTXFD: u16,
    +        }),
    +        ///  OTG_HS device IN endpoint transmit FIFO size register
    +        OTG_HS_DIEPTXF2: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint FIFOx transmit RAM start address
    +            INEPTXSA: u16,
    +            ///  IN endpoint TxFIFO depth
    +            INEPTXFD: u16,
    +        }),
    +        reserved284: [16]u8,
    +        ///  OTG_HS device IN endpoint transmit FIFO size register
    +        OTG_HS_DIEPTXF3: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint FIFOx transmit RAM start address
    +            INEPTXSA: u16,
    +            ///  IN endpoint TxFIFO depth
    +            INEPTXFD: u16,
    +        }),
    +        ///  OTG_HS device IN endpoint transmit FIFO size register
    +        OTG_HS_DIEPTXF4: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint FIFOx transmit RAM start address
    +            INEPTXSA: u16,
    +            ///  IN endpoint TxFIFO depth
    +            INEPTXFD: u16,
    +        }),
    +        ///  OTG_HS device IN endpoint transmit FIFO size register
    +        OTG_HS_DIEPTXF5: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint FIFOx transmit RAM start address
    +            INEPTXSA: u16,
    +            ///  IN endpoint TxFIFO depth
    +            INEPTXFD: u16,
    +        }),
    +        ///  OTG_HS device IN endpoint transmit FIFO size register
    +        OTG_HS_DIEPTXF6: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint FIFOx transmit RAM start address
    +            INEPTXSA: u16,
    +            ///  IN endpoint TxFIFO depth
    +            INEPTXFD: u16,
    +        }),
    +        ///  OTG_HS device IN endpoint transmit FIFO size register
    +        OTG_HS_DIEPTXF7: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint FIFOx transmit RAM start address
    +            INEPTXSA: u16,
    +            ///  IN endpoint TxFIFO depth
    +            INEPTXFD: u16,
    +        }),
    +    };
    +
    +    ///  Secure digital input/output interface
    +    pub const SDIO = extern struct {
    +        ///  power control register
    +        POWER: mmio.Mmio(packed struct(u32) {
    +            ///  PWRCTRL
    +            PWRCTRL: u2,
    +            padding: u30,
    +        }),
    +        ///  SDI clock control register
    +        CLKCR: mmio.Mmio(packed struct(u32) {
    +            ///  Clock divide factor
    +            CLKDIV: u8,
    +            ///  Clock enable bit
    +            CLKEN: u1,
    +            ///  Power saving configuration bit
    +            PWRSAV: u1,
    +            ///  Clock divider bypass enable bit
    +            BYPASS: u1,
    +            ///  Wide bus mode enable bit
    +            WIDBUS: u2,
    +            ///  SDIO_CK dephasing selection bit
    +            NEGEDGE: u1,
    +            ///  HW Flow Control enable
    +            HWFC_EN: u1,
    +            padding: u17,
    +        }),
    +        ///  argument register
    +        ARG: mmio.Mmio(packed struct(u32) {
    +            ///  Command argument
    +            CMDARG: u32,
    +        }),
    +        ///  command register
    +        CMD: mmio.Mmio(packed struct(u32) {
    +            ///  Command index
    +            CMDINDEX: u6,
    +            ///  Wait for response bits
    +            WAITRESP: u2,
    +            ///  CPSM waits for interrupt request
    +            WAITINT: u1,
    +            ///  CPSM Waits for ends of data transfer (CmdPend internal signal).
    +            WAITPEND: u1,
    +            ///  Command path state machine (CPSM) Enable bit
    +            CPSMEN: u1,
    +            ///  SD I/O suspend command
    +            SDIOSuspend: u1,
    +            ///  Enable CMD completion
    +            ENCMDcompl: u1,
    +            ///  not Interrupt Enable
    +            nIEN: u1,
    +            ///  CE-ATA command
    +            CE_ATACMD: u1,
    +            padding: u17,
    +        }),
    +        ///  command response register
    +        RESPCMD: mmio.Mmio(packed struct(u32) {
    +            ///  Response command index
    +            RESPCMD: u6,
    +            padding: u26,
    +        }),
    +        ///  response 1..4 register
    +        RESP1: mmio.Mmio(packed struct(u32) {
    +            ///  see Table 132.
    +            CARDSTATUS1: u32,
    +        }),
    +        ///  response 1..4 register
    +        RESP2: mmio.Mmio(packed struct(u32) {
    +            ///  see Table 132.
    +            CARDSTATUS2: u32,
    +        }),
    +        ///  response 1..4 register
    +        RESP3: mmio.Mmio(packed struct(u32) {
    +            ///  see Table 132.
    +            CARDSTATUS3: u32,
    +        }),
    +        ///  response 1..4 register
    +        RESP4: mmio.Mmio(packed struct(u32) {
    +            ///  see Table 132.
    +            CARDSTATUS4: u32,
    +        }),
    +        ///  data timer register
    +        DTIMER: mmio.Mmio(packed struct(u32) {
    +            ///  Data timeout period
    +            DATATIME: u32,
    +        }),
    +        ///  data length register
    +        DLEN: mmio.Mmio(packed struct(u32) {
    +            ///  Data length value
    +            DATALENGTH: u25,
    +            padding: u7,
    +        }),
    +        ///  data control register
    +        DCTRL: mmio.Mmio(packed struct(u32) {
    +            ///  DTEN
    +            DTEN: u1,
    +            ///  Data transfer direction selection
    +            DTDIR: u1,
    +            ///  Data transfer mode selection 1: Stream or SDIO multibyte data transfer.
    +            DTMODE: u1,
    +            ///  DMA enable bit
    +            DMAEN: u1,
    +            ///  Data block size
    +            DBLOCKSIZE: u4,
    +            ///  Read wait start
    +            RWSTART: u1,
    +            ///  Read wait stop
    +            RWSTOP: u1,
    +            ///  Read wait mode
    +            RWMOD: u1,
    +            ///  SD I/O enable functions
    +            SDIOEN: u1,
    +            padding: u20,
    +        }),
    +        ///  data counter register
    +        DCOUNT: mmio.Mmio(packed struct(u32) {
    +            ///  Data count value
    +            DATACOUNT: u25,
    +            padding: u7,
    +        }),
    +        ///  status register
    +        STA: mmio.Mmio(packed struct(u32) {
    +            ///  Command response received (CRC check failed)
    +            CCRCFAIL: u1,
    +            ///  Data block sent/received (CRC check failed)
    +            DCRCFAIL: u1,
    +            ///  Command response timeout
    +            CTIMEOUT: u1,
    +            ///  Data timeout
    +            DTIMEOUT: u1,
    +            ///  Transmit FIFO underrun error
    +            TXUNDERR: u1,
    +            ///  Received FIFO overrun error
    +            RXOVERR: u1,
    +            ///  Command response received (CRC check passed)
    +            CMDREND: u1,
    +            ///  Command sent (no response required)
    +            CMDSENT: u1,
    +            ///  Data end (data counter, SDIDCOUNT, is zero)
    +            DATAEND: u1,
    +            ///  Start bit not detected on all data signals in wide bus mode
    +            STBITERR: u1,
    +            ///  Data block sent/received (CRC check passed)
    +            DBCKEND: u1,
    +            ///  Command transfer in progress
    +            CMDACT: u1,
    +            ///  Data transmit in progress
    +            TXACT: u1,
    +            ///  Data receive in progress
    +            RXACT: u1,
    +            ///  Transmit FIFO half empty: at least 8 words can be written into the FIFO
    +            TXFIFOHE: u1,
    +            ///  Receive FIFO half full: there are at least 8 words in the FIFO
    +            RXFIFOHF: u1,
    +            ///  Transmit FIFO full
    +            TXFIFOF: u1,
    +            ///  Receive FIFO full
    +            RXFIFOF: u1,
    +            ///  Transmit FIFO empty
    +            TXFIFOE: u1,
    +            ///  Receive FIFO empty
    +            RXFIFOE: u1,
    +            ///  Data available in transmit FIFO
    +            TXDAVL: u1,
    +            ///  Data available in receive FIFO
    +            RXDAVL: u1,
    +            ///  SDIO interrupt received
    +            SDIOIT: u1,
    +            ///  CE-ATA command completion signal received for CMD61
    +            CEATAEND: u1,
    +            padding: u8,
    +        }),
    +        ///  interrupt clear register
    +        ICR: mmio.Mmio(packed struct(u32) {
    +            ///  CCRCFAIL flag clear bit
    +            CCRCFAILC: u1,
    +            ///  DCRCFAIL flag clear bit
    +            DCRCFAILC: u1,
    +            ///  CTIMEOUT flag clear bit
    +            CTIMEOUTC: u1,
    +            ///  DTIMEOUT flag clear bit
    +            DTIMEOUTC: u1,
    +            ///  TXUNDERR flag clear bit
    +            TXUNDERRC: u1,
    +            ///  RXOVERR flag clear bit
    +            RXOVERRC: u1,
    +            ///  CMDREND flag clear bit
    +            CMDRENDC: u1,
    +            ///  CMDSENT flag clear bit
    +            CMDSENTC: u1,
    +            ///  DATAEND flag clear bit
    +            DATAENDC: u1,
    +            ///  STBITERR flag clear bit
    +            STBITERRC: u1,
    +            ///  DBCKEND flag clear bit
    +            DBCKENDC: u1,
    +            reserved22: u11,
    +            ///  SDIOIT flag clear bit
    +            SDIOITC: u1,
    +            ///  CEATAEND flag clear bit
    +            CEATAENDC: u1,
    +            padding: u8,
    +        }),
    +        ///  mask register
    +        MASK: mmio.Mmio(packed struct(u32) {
    +            ///  Command CRC fail interrupt enable
    +            CCRCFAILIE: u1,
    +            ///  Data CRC fail interrupt enable
    +            DCRCFAILIE: u1,
    +            ///  Command timeout interrupt enable
    +            CTIMEOUTIE: u1,
    +            ///  Data timeout interrupt enable
    +            DTIMEOUTIE: u1,
    +            ///  Tx FIFO underrun error interrupt enable
    +            TXUNDERRIE: u1,
    +            ///  Rx FIFO overrun error interrupt enable
    +            RXOVERRIE: u1,
    +            ///  Command response received interrupt enable
    +            CMDRENDIE: u1,
    +            ///  Command sent interrupt enable
    +            CMDSENTIE: u1,
    +            ///  Data end interrupt enable
    +            DATAENDIE: u1,
    +            ///  Start bit error interrupt enable
    +            STBITERRIE: u1,
    +            ///  Data block end interrupt enable
    +            DBCKENDIE: u1,
    +            ///  Command acting interrupt enable
    +            CMDACTIE: u1,
    +            ///  Data transmit acting interrupt enable
    +            TXACTIE: u1,
    +            ///  Data receive acting interrupt enable
    +            RXACTIE: u1,
    +            ///  Tx FIFO half empty interrupt enable
    +            TXFIFOHEIE: u1,
    +            ///  Rx FIFO half full interrupt enable
    +            RXFIFOHFIE: u1,
    +            ///  Tx FIFO full interrupt enable
    +            TXFIFOFIE: u1,
    +            ///  Rx FIFO full interrupt enable
    +            RXFIFOFIE: u1,
    +            ///  Tx FIFO empty interrupt enable
    +            TXFIFOEIE: u1,
    +            ///  Rx FIFO empty interrupt enable
    +            RXFIFOEIE: u1,
    +            ///  Data available in Tx FIFO interrupt enable
    +            TXDAVLIE: u1,
    +            ///  Data available in Rx FIFO interrupt enable
    +            RXDAVLIE: u1,
    +            ///  SDIO mode interrupt received interrupt enable
    +            SDIOITIE: u1,
    +            ///  CE-ATA command completion signal received interrupt enable
    +            CEATAENDIE: u1,
    +            padding: u8,
    +        }),
    +        reserved72: [8]u8,
    +        ///  FIFO counter register
    +        FIFOCNT: mmio.Mmio(packed struct(u32) {
    +            ///  Remaining number of words to be written to or read from the FIFO.
    +            FIFOCOUNT: u24,
    +            padding: u8,
    +        }),
    +        reserved128: [52]u8,
    +        ///  data FIFO register
    +        FIFO: mmio.Mmio(packed struct(u32) {
    +            ///  Receive and transmit FIFO data
    +            FIFOData: u32,
    +        }),
    +    };
    +
    +    ///  Analog-to-digital converter
    +    pub const ADC1 = extern struct {
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Analog watchdog flag
    +            AWD: u1,
    +            ///  Regular channel end of conversion
    +            EOC: u1,
    +            ///  Injected channel end of conversion
    +            JEOC: u1,
    +            ///  Injected channel start flag
    +            JSTRT: u1,
    +            ///  Regular channel start flag
    +            STRT: u1,
    +            ///  Overrun
    +            OVR: u1,
    +            padding: u26,
    +        }),
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Analog watchdog channel select bits
    +            AWDCH: u5,
    +            ///  Interrupt enable for EOC
    +            EOCIE: u1,
    +            ///  Analog watchdog interrupt enable
    +            AWDIE: u1,
    +            ///  Interrupt enable for injected channels
    +            JEOCIE: u1,
    +            ///  Scan mode
    +            SCAN: u1,
    +            ///  Enable the watchdog on a single channel in scan mode
    +            AWDSGL: u1,
    +            ///  Automatic injected group conversion
    +            JAUTO: u1,
    +            ///  Discontinuous mode on regular channels
    +            DISCEN: u1,
    +            ///  Discontinuous mode on injected channels
    +            JDISCEN: u1,
    +            ///  Discontinuous mode channel count
    +            DISCNUM: u3,
    +            reserved22: u6,
    +            ///  Analog watchdog enable on injected channels
    +            JAWDEN: u1,
    +            ///  Analog watchdog enable on regular channels
    +            AWDEN: u1,
    +            ///  Resolution
    +            RES: u2,
    +            ///  Overrun interrupt enable
    +            OVRIE: u1,
    +            padding: u5,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            ///  A/D Converter ON / OFF
    +            ADON: u1,
    +            ///  Continuous conversion
    +            CONT: u1,
    +            reserved8: u6,
    +            ///  Direct memory access mode (for single ADC mode)
    +            DMA: u1,
    +            ///  DMA disable selection (for single ADC mode)
    +            DDS: u1,
    +            ///  End of conversion selection
    +            EOCS: u1,
    +            ///  Data alignment
    +            ALIGN: u1,
    +            reserved16: u4,
    +            ///  External event select for injected group
    +            JEXTSEL: u4,
    +            ///  External trigger enable for injected channels
    +            JEXTEN: u2,
    +            ///  Start conversion of injected channels
    +            JSWSTART: u1,
    +            reserved24: u1,
    +            ///  External event select for regular group
    +            EXTSEL: u4,
    +            ///  External trigger enable for regular channels
    +            EXTEN: u2,
    +            ///  Start conversion of regular channels
    +            SWSTART: u1,
    +            padding: u1,
    +        }),
    +        ///  sample time register 1
    +        SMPR1: mmio.Mmio(packed struct(u32) {
    +            ///  Sample time bits
    +            SMPx_x: u32,
    +        }),
    +        ///  sample time register 2
    +        SMPR2: mmio.Mmio(packed struct(u32) {
    +            ///  Sample time bits
    +            SMPx_x: u32,
    +        }),
    +        ///  injected channel data offset register x
    +        JOFR1: mmio.Mmio(packed struct(u32) {
    +            ///  Data offset for injected channel x
    +            JOFFSET1: u12,
    +            padding: u20,
    +        }),
    +        ///  injected channel data offset register x
    +        JOFR2: mmio.Mmio(packed struct(u32) {
    +            ///  Data offset for injected channel x
    +            JOFFSET2: u12,
    +            padding: u20,
    +        }),
    +        ///  injected channel data offset register x
    +        JOFR3: mmio.Mmio(packed struct(u32) {
    +            ///  Data offset for injected channel x
    +            JOFFSET3: u12,
    +            padding: u20,
    +        }),
    +        ///  injected channel data offset register x
    +        JOFR4: mmio.Mmio(packed struct(u32) {
    +            ///  Data offset for injected channel x
    +            JOFFSET4: u12,
    +            padding: u20,
    +        }),
    +        ///  watchdog higher threshold register
    +        HTR: mmio.Mmio(packed struct(u32) {
    +            ///  Analog watchdog higher threshold
    +            HT: u12,
    +            padding: u20,
    +        }),
    +        ///  watchdog lower threshold register
    +        LTR: mmio.Mmio(packed struct(u32) {
    +            ///  Analog watchdog lower threshold
    +            LT: u12,
    +            padding: u20,
    +        }),
    +        ///  regular sequence register 1
    +        SQR1: mmio.Mmio(packed struct(u32) {
    +            ///  13th conversion in regular sequence
    +            SQ13: u5,
    +            ///  14th conversion in regular sequence
    +            SQ14: u5,
    +            ///  15th conversion in regular sequence
    +            SQ15: u5,
    +            ///  16th conversion in regular sequence
    +            SQ16: u5,
    +            ///  Regular channel sequence length
    +            L: u4,
    +            padding: u8,
    +        }),
    +        ///  regular sequence register 2
    +        SQR2: mmio.Mmio(packed struct(u32) {
    +            ///  7th conversion in regular sequence
    +            SQ7: u5,
    +            ///  8th conversion in regular sequence
    +            SQ8: u5,
    +            ///  9th conversion in regular sequence
    +            SQ9: u5,
    +            ///  10th conversion in regular sequence
    +            SQ10: u5,
    +            ///  11th conversion in regular sequence
    +            SQ11: u5,
    +            ///  12th conversion in regular sequence
    +            SQ12: u5,
    +            padding: u2,
    +        }),
    +        ///  regular sequence register 3
    +        SQR3: mmio.Mmio(packed struct(u32) {
    +            ///  1st conversion in regular sequence
    +            SQ1: u5,
    +            ///  2nd conversion in regular sequence
    +            SQ2: u5,
    +            ///  3rd conversion in regular sequence
    +            SQ3: u5,
    +            ///  4th conversion in regular sequence
    +            SQ4: u5,
    +            ///  5th conversion in regular sequence
    +            SQ5: u5,
    +            ///  6th conversion in regular sequence
    +            SQ6: u5,
    +            padding: u2,
    +        }),
    +        ///  injected sequence register
    +        JSQR: mmio.Mmio(packed struct(u32) {
    +            ///  1st conversion in injected sequence
    +            JSQ1: u5,
    +            ///  2nd conversion in injected sequence
    +            JSQ2: u5,
    +            ///  3rd conversion in injected sequence
    +            JSQ3: u5,
    +            ///  4th conversion in injected sequence
    +            JSQ4: u5,
    +            ///  Injected sequence length
    +            JL: u2,
    +            padding: u10,
    +        }),
    +        ///  injected data register x
    +        JDR1: mmio.Mmio(packed struct(u32) {
    +            ///  Injected data
    +            JDATA: u16,
    +            padding: u16,
    +        }),
    +        ///  injected data register x
    +        JDR2: mmio.Mmio(packed struct(u32) {
    +            ///  Injected data
    +            JDATA: u16,
    +            padding: u16,
    +        }),
    +        ///  injected data register x
    +        JDR3: mmio.Mmio(packed struct(u32) {
    +            ///  Injected data
    +            JDATA: u16,
    +            padding: u16,
    +        }),
    +        ///  injected data register x
    +        JDR4: mmio.Mmio(packed struct(u32) {
    +            ///  Injected data
    +            JDATA: u16,
    +            padding: u16,
    +        }),
    +        ///  regular data register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  Regular data
    +            DATA: u16,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  External interrupt/event controller
    +    pub const EXTI = extern struct {
    +        ///  Interrupt mask register (EXTI_IMR)
    +        IMR: mmio.Mmio(packed struct(u32) {
    +            ///  Interrupt Mask on line 0
    +            MR0: u1,
    +            ///  Interrupt Mask on line 1
    +            MR1: u1,
    +            ///  Interrupt Mask on line 2
    +            MR2: u1,
    +            ///  Interrupt Mask on line 3
    +            MR3: u1,
    +            ///  Interrupt Mask on line 4
    +            MR4: u1,
    +            ///  Interrupt Mask on line 5
    +            MR5: u1,
    +            ///  Interrupt Mask on line 6
    +            MR6: u1,
    +            ///  Interrupt Mask on line 7
    +            MR7: u1,
    +            ///  Interrupt Mask on line 8
    +            MR8: u1,
    +            ///  Interrupt Mask on line 9
    +            MR9: u1,
    +            ///  Interrupt Mask on line 10
    +            MR10: u1,
    +            ///  Interrupt Mask on line 11
    +            MR11: u1,
    +            ///  Interrupt Mask on line 12
    +            MR12: u1,
    +            ///  Interrupt Mask on line 13
    +            MR13: u1,
    +            ///  Interrupt Mask on line 14
    +            MR14: u1,
    +            ///  Interrupt Mask on line 15
    +            MR15: u1,
    +            ///  Interrupt Mask on line 16
    +            MR16: u1,
    +            ///  Interrupt Mask on line 17
    +            MR17: u1,
    +            ///  Interrupt Mask on line 18
    +            MR18: u1,
    +            ///  Interrupt Mask on line 19
    +            MR19: u1,
    +            ///  Interrupt Mask on line 20
    +            MR20: u1,
    +            ///  Interrupt Mask on line 21
    +            MR21: u1,
    +            ///  Interrupt Mask on line 22
    +            MR22: u1,
    +            padding: u9,
    +        }),
    +        ///  Event mask register (EXTI_EMR)
    +        EMR: mmio.Mmio(packed struct(u32) {
    +            ///  Event Mask on line 0
    +            MR0: u1,
    +            ///  Event Mask on line 1
    +            MR1: u1,
    +            ///  Event Mask on line 2
    +            MR2: u1,
    +            ///  Event Mask on line 3
    +            MR3: u1,
    +            ///  Event Mask on line 4
    +            MR4: u1,
    +            ///  Event Mask on line 5
    +            MR5: u1,
    +            ///  Event Mask on line 6
    +            MR6: u1,
    +            ///  Event Mask on line 7
    +            MR7: u1,
    +            ///  Event Mask on line 8
    +            MR8: u1,
    +            ///  Event Mask on line 9
    +            MR9: u1,
    +            ///  Event Mask on line 10
    +            MR10: u1,
    +            ///  Event Mask on line 11
    +            MR11: u1,
    +            ///  Event Mask on line 12
    +            MR12: u1,
    +            ///  Event Mask on line 13
    +            MR13: u1,
    +            ///  Event Mask on line 14
    +            MR14: u1,
    +            ///  Event Mask on line 15
    +            MR15: u1,
    +            ///  Event Mask on line 16
    +            MR16: u1,
    +            ///  Event Mask on line 17
    +            MR17: u1,
    +            ///  Event Mask on line 18
    +            MR18: u1,
    +            ///  Event Mask on line 19
    +            MR19: u1,
    +            ///  Event Mask on line 20
    +            MR20: u1,
    +            ///  Event Mask on line 21
    +            MR21: u1,
    +            ///  Event Mask on line 22
    +            MR22: u1,
    +            padding: u9,
    +        }),
    +        ///  Rising Trigger selection register (EXTI_RTSR)
    +        RTSR: mmio.Mmio(packed struct(u32) {
    +            ///  Rising trigger event configuration of line 0
    +            TR0: u1,
    +            ///  Rising trigger event configuration of line 1
    +            TR1: u1,
    +            ///  Rising trigger event configuration of line 2
    +            TR2: u1,
    +            ///  Rising trigger event configuration of line 3
    +            TR3: u1,
    +            ///  Rising trigger event configuration of line 4
    +            TR4: u1,
    +            ///  Rising trigger event configuration of line 5
    +            TR5: u1,
    +            ///  Rising trigger event configuration of line 6
    +            TR6: u1,
    +            ///  Rising trigger event configuration of line 7
    +            TR7: u1,
    +            ///  Rising trigger event configuration of line 8
    +            TR8: u1,
    +            ///  Rising trigger event configuration of line 9
    +            TR9: u1,
    +            ///  Rising trigger event configuration of line 10
    +            TR10: u1,
    +            ///  Rising trigger event configuration of line 11
    +            TR11: u1,
    +            ///  Rising trigger event configuration of line 12
    +            TR12: u1,
    +            ///  Rising trigger event configuration of line 13
    +            TR13: u1,
    +            ///  Rising trigger event configuration of line 14
    +            TR14: u1,
    +            ///  Rising trigger event configuration of line 15
    +            TR15: u1,
    +            ///  Rising trigger event configuration of line 16
    +            TR16: u1,
    +            ///  Rising trigger event configuration of line 17
    +            TR17: u1,
    +            ///  Rising trigger event configuration of line 18
    +            TR18: u1,
    +            ///  Rising trigger event configuration of line 19
    +            TR19: u1,
    +            ///  Rising trigger event configuration of line 20
    +            TR20: u1,
    +            ///  Rising trigger event configuration of line 21
    +            TR21: u1,
    +            ///  Rising trigger event configuration of line 22
    +            TR22: u1,
    +            padding: u9,
    +        }),
    +        ///  Falling Trigger selection register (EXTI_FTSR)
    +        FTSR: mmio.Mmio(packed struct(u32) {
    +            ///  Falling trigger event configuration of line 0
    +            TR0: u1,
    +            ///  Falling trigger event configuration of line 1
    +            TR1: u1,
    +            ///  Falling trigger event configuration of line 2
    +            TR2: u1,
    +            ///  Falling trigger event configuration of line 3
    +            TR3: u1,
    +            ///  Falling trigger event configuration of line 4
    +            TR4: u1,
    +            ///  Falling trigger event configuration of line 5
    +            TR5: u1,
    +            ///  Falling trigger event configuration of line 6
    +            TR6: u1,
    +            ///  Falling trigger event configuration of line 7
    +            TR7: u1,
    +            ///  Falling trigger event configuration of line 8
    +            TR8: u1,
    +            ///  Falling trigger event configuration of line 9
    +            TR9: u1,
    +            ///  Falling trigger event configuration of line 10
    +            TR10: u1,
    +            ///  Falling trigger event configuration of line 11
    +            TR11: u1,
    +            ///  Falling trigger event configuration of line 12
    +            TR12: u1,
    +            ///  Falling trigger event configuration of line 13
    +            TR13: u1,
    +            ///  Falling trigger event configuration of line 14
    +            TR14: u1,
    +            ///  Falling trigger event configuration of line 15
    +            TR15: u1,
    +            ///  Falling trigger event configuration of line 16
    +            TR16: u1,
    +            ///  Falling trigger event configuration of line 17
    +            TR17: u1,
    +            ///  Falling trigger event configuration of line 18
    +            TR18: u1,
    +            ///  Falling trigger event configuration of line 19
    +            TR19: u1,
    +            ///  Falling trigger event configuration of line 20
    +            TR20: u1,
    +            ///  Falling trigger event configuration of line 21
    +            TR21: u1,
    +            ///  Falling trigger event configuration of line 22
    +            TR22: u1,
    +            padding: u9,
    +        }),
    +        ///  Software interrupt event register (EXTI_SWIER)
    +        SWIER: mmio.Mmio(packed struct(u32) {
    +            ///  Software Interrupt on line 0
    +            SWIER0: u1,
    +            ///  Software Interrupt on line 1
    +            SWIER1: u1,
    +            ///  Software Interrupt on line 2
    +            SWIER2: u1,
    +            ///  Software Interrupt on line 3
    +            SWIER3: u1,
    +            ///  Software Interrupt on line 4
    +            SWIER4: u1,
    +            ///  Software Interrupt on line 5
    +            SWIER5: u1,
    +            ///  Software Interrupt on line 6
    +            SWIER6: u1,
    +            ///  Software Interrupt on line 7
    +            SWIER7: u1,
    +            ///  Software Interrupt on line 8
    +            SWIER8: u1,
    +            ///  Software Interrupt on line 9
    +            SWIER9: u1,
    +            ///  Software Interrupt on line 10
    +            SWIER10: u1,
    +            ///  Software Interrupt on line 11
    +            SWIER11: u1,
    +            ///  Software Interrupt on line 12
    +            SWIER12: u1,
    +            ///  Software Interrupt on line 13
    +            SWIER13: u1,
    +            ///  Software Interrupt on line 14
    +            SWIER14: u1,
    +            ///  Software Interrupt on line 15
    +            SWIER15: u1,
    +            ///  Software Interrupt on line 16
    +            SWIER16: u1,
    +            ///  Software Interrupt on line 17
    +            SWIER17: u1,
    +            ///  Software Interrupt on line 18
    +            SWIER18: u1,
    +            ///  Software Interrupt on line 19
    +            SWIER19: u1,
    +            ///  Software Interrupt on line 20
    +            SWIER20: u1,
    +            ///  Software Interrupt on line 21
    +            SWIER21: u1,
    +            ///  Software Interrupt on line 22
    +            SWIER22: u1,
    +            padding: u9,
    +        }),
    +        ///  Pending register (EXTI_PR)
    +        PR: mmio.Mmio(packed struct(u32) {
    +            ///  Pending bit 0
    +            PR0: u1,
    +            ///  Pending bit 1
    +            PR1: u1,
    +            ///  Pending bit 2
    +            PR2: u1,
    +            ///  Pending bit 3
    +            PR3: u1,
    +            ///  Pending bit 4
    +            PR4: u1,
    +            ///  Pending bit 5
    +            PR5: u1,
    +            ///  Pending bit 6
    +            PR6: u1,
    +            ///  Pending bit 7
    +            PR7: u1,
    +            ///  Pending bit 8
    +            PR8: u1,
    +            ///  Pending bit 9
    +            PR9: u1,
    +            ///  Pending bit 10
    +            PR10: u1,
    +            ///  Pending bit 11
    +            PR11: u1,
    +            ///  Pending bit 12
    +            PR12: u1,
    +            ///  Pending bit 13
    +            PR13: u1,
    +            ///  Pending bit 14
    +            PR14: u1,
    +            ///  Pending bit 15
    +            PR15: u1,
    +            ///  Pending bit 16
    +            PR16: u1,
    +            ///  Pending bit 17
    +            PR17: u1,
    +            ///  Pending bit 18
    +            PR18: u1,
    +            ///  Pending bit 19
    +            PR19: u1,
    +            ///  Pending bit 20
    +            PR20: u1,
    +            ///  Pending bit 21
    +            PR21: u1,
    +            ///  Pending bit 22
    +            PR22: u1,
    +            padding: u9,
    +        }),
    +    };
    +
    +    ///  FLASH
    +    pub const FLASH = extern struct {
    +        ///  Flash access control register
    +        ACR: mmio.Mmio(packed struct(u32) {
    +            ///  Latency
    +            LATENCY: u3,
    +            reserved8: u5,
    +            ///  Prefetch enable
    +            PRFTEN: u1,
    +            ///  Instruction cache enable
    +            ICEN: u1,
    +            ///  Data cache enable
    +            DCEN: u1,
    +            ///  Instruction cache reset
    +            ICRST: u1,
    +            ///  Data cache reset
    +            DCRST: u1,
    +            padding: u19,
    +        }),
    +        ///  Flash key register
    +        KEYR: mmio.Mmio(packed struct(u32) {
    +            ///  FPEC key
    +            KEY: u32,
    +        }),
    +        ///  Flash option key register
    +        OPTKEYR: mmio.Mmio(packed struct(u32) {
    +            ///  Option byte key
    +            OPTKEY: u32,
    +        }),
    +        ///  Status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  End of operation
    +            EOP: u1,
    +            ///  Operation error
    +            OPERR: u1,
    +            reserved4: u2,
    +            ///  Write protection error
    +            WRPERR: u1,
    +            ///  Programming alignment error
    +            PGAERR: u1,
    +            ///  Programming parallelism error
    +            PGPERR: u1,
    +            ///  Programming sequence error
    +            PGSERR: u1,
    +            reserved16: u8,
    +            ///  Busy
    +            BSY: u1,
    +            padding: u15,
    +        }),
    +        ///  Control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  Programming
    +            PG: u1,
    +            ///  Sector Erase
    +            SER: u1,
    +            ///  Mass Erase
    +            MER: u1,
    +            ///  Sector number
    +            SNB: u4,
    +            reserved8: u1,
    +            ///  Program size
    +            PSIZE: u2,
    +            reserved16: u6,
    +            ///  Start
    +            STRT: u1,
    +            reserved24: u7,
    +            ///  End of operation interrupt enable
    +            EOPIE: u1,
    +            ///  Error interrupt enable
    +            ERRIE: u1,
    +            reserved31: u5,
    +            ///  Lock
    +            LOCK: u1,
    +        }),
    +        ///  Flash option control register
    +        OPTCR: mmio.Mmio(packed struct(u32) {
    +            ///  Option lock
    +            OPTLOCK: u1,
    +            ///  Option start
    +            OPTSTRT: u1,
    +            ///  BOR reset Level
    +            BOR_LEV: u2,
    +            reserved5: u1,
    +            ///  WDG_SW User option bytes
    +            WDG_SW: u1,
    +            ///  nRST_STOP User option bytes
    +            nRST_STOP: u1,
    +            ///  nRST_STDBY User option bytes
    +            nRST_STDBY: u1,
    +            ///  Read protect
    +            RDP: u8,
    +            ///  Not write protect
    +            nWRP: u12,
    +            padding: u4,
    +        }),
    +    };
    +
    +    ///  Universal synchronous asynchronous receiver transmitter
    +    pub const USART6 = extern struct {
    +        ///  Status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Parity error
    +            PE: u1,
    +            ///  Framing error
    +            FE: u1,
    +            ///  Noise detected flag
    +            NF: u1,
    +            ///  Overrun error
    +            ORE: u1,
    +            ///  IDLE line detected
    +            IDLE: u1,
    +            ///  Read data register not empty
    +            RXNE: u1,
    +            ///  Transmission complete
    +            TC: u1,
    +            ///  Transmit data register empty
    +            TXE: u1,
    +            ///  LIN break detection flag
    +            LBD: u1,
    +            ///  CTS flag
    +            CTS: u1,
    +            padding: u22,
    +        }),
    +        ///  Data register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  Data value
    +            DR: u9,
    +            padding: u23,
    +        }),
    +        ///  Baud rate register
    +        BRR: mmio.Mmio(packed struct(u32) {
    +            ///  fraction of USARTDIV
    +            DIV_Fraction: u4,
    +            ///  mantissa of USARTDIV
    +            DIV_Mantissa: u12,
    +            padding: u16,
    +        }),
    +        ///  Control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Send break
    +            SBK: u1,
    +            ///  Receiver wakeup
    +            RWU: u1,
    +            ///  Receiver enable
    +            RE: u1,
    +            ///  Transmitter enable
    +            TE: u1,
    +            ///  IDLE interrupt enable
    +            IDLEIE: u1,
    +            ///  RXNE interrupt enable
    +            RXNEIE: u1,
    +            ///  Transmission complete interrupt enable
    +            TCIE: u1,
    +            ///  TXE interrupt enable
    +            TXEIE: u1,
    +            ///  PE interrupt enable
    +            PEIE: u1,
    +            ///  Parity selection
    +            PS: u1,
    +            ///  Parity control enable
    +            PCE: u1,
    +            ///  Wakeup method
    +            WAKE: u1,
    +            ///  Word length
    +            M: u1,
    +            ///  USART enable
    +            UE: u1,
    +            reserved15: u1,
    +            ///  Oversampling mode
    +            OVER8: u1,
    +            padding: u16,
    +        }),
    +        ///  Control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            ///  Address of the USART node
    +            ADD: u4,
    +            reserved5: u1,
    +            ///  lin break detection length
    +            LBDL: u1,
    +            ///  LIN break detection interrupt enable
    +            LBDIE: u1,
    +            reserved8: u1,
    +            ///  Last bit clock pulse
    +            LBCL: u1,
    +            ///  Clock phase
    +            CPHA: u1,
    +            ///  Clock polarity
    +            CPOL: u1,
    +            ///  Clock enable
    +            CLKEN: u1,
    +            ///  STOP bits
    +            STOP: u2,
    +            ///  LIN mode enable
    +            LINEN: u1,
    +            padding: u17,
    +        }),
    +        ///  Control register 3
    +        CR3: mmio.Mmio(packed struct(u32) {
    +            ///  Error interrupt enable
    +            EIE: u1,
    +            ///  IrDA mode enable
    +            IREN: u1,
    +            ///  IrDA low-power
    +            IRLP: u1,
    +            ///  Half-duplex selection
    +            HDSEL: u1,
    +            ///  Smartcard NACK enable
    +            NACK: u1,
    +            ///  Smartcard mode enable
    +            SCEN: u1,
    +            ///  DMA enable receiver
    +            DMAR: u1,
    +            ///  DMA enable transmitter
    +            DMAT: u1,
    +            ///  RTS enable
    +            RTSE: u1,
    +            ///  CTS enable
    +            CTSE: u1,
    +            ///  CTS interrupt enable
    +            CTSIE: u1,
    +            ///  One sample bit method enable
    +            ONEBIT: u1,
    +            padding: u20,
    +        }),
    +        ///  Guard time and prescaler register
    +        GTPR: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u8,
    +            ///  Guard time value
    +            GT: u8,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  Basic timers
    +    pub const TIM6 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            ///  One-pulse mode
    +            OPM: u1,
    +            reserved7: u3,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            padding: u24,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            reserved4: u4,
    +            ///  Master mode selection
    +            MMS: u3,
    +            padding: u25,
    +        }),
    +        reserved12: [4]u8,
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            reserved8: u7,
    +            ///  Update DMA request enable
    +            UDE: u1,
    +            padding: u23,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            padding: u31,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            padding: u31,
    +        }),
    +        reserved36: [12]u8,
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  Low counter value
    +            CNT: u16,
    +            padding: u16,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Low Auto-reload value
    +            ARR: u16,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  Controller area network
    +    pub const CAN1 = extern struct {
    +        ///  master control register
    +        MCR: mmio.Mmio(packed struct(u32) {
    +            ///  INRQ
    +            INRQ: u1,
    +            ///  SLEEP
    +            SLEEP: u1,
    +            ///  TXFP
    +            TXFP: u1,
    +            ///  RFLM
    +            RFLM: u1,
    +            ///  NART
    +            NART: u1,
    +            ///  AWUM
    +            AWUM: u1,
    +            ///  ABOM
    +            ABOM: u1,
    +            ///  TTCM
    +            TTCM: u1,
    +            reserved15: u7,
    +            ///  RESET
    +            RESET: u1,
    +            ///  DBF
    +            DBF: u1,
    +            padding: u15,
    +        }),
    +        ///  master status register
    +        MSR: mmio.Mmio(packed struct(u32) {
    +            ///  INAK
    +            INAK: u1,
    +            ///  SLAK
    +            SLAK: u1,
    +            ///  ERRI
    +            ERRI: u1,
    +            ///  WKUI
    +            WKUI: u1,
    +            ///  SLAKI
    +            SLAKI: u1,
    +            reserved8: u3,
    +            ///  TXM
    +            TXM: u1,
    +            ///  RXM
    +            RXM: u1,
    +            ///  SAMP
    +            SAMP: u1,
    +            ///  RX
    +            RX: u1,
    +            padding: u20,
    +        }),
    +        ///  transmit status register
    +        TSR: mmio.Mmio(packed struct(u32) {
    +            ///  RQCP0
    +            RQCP0: u1,
    +            ///  TXOK0
    +            TXOK0: u1,
    +            ///  ALST0
    +            ALST0: u1,
    +            ///  TERR0
    +            TERR0: u1,
    +            reserved7: u3,
    +            ///  ABRQ0
    +            ABRQ0: u1,
    +            ///  RQCP1
    +            RQCP1: u1,
    +            ///  TXOK1
    +            TXOK1: u1,
    +            ///  ALST1
    +            ALST1: u1,
    +            ///  TERR1
    +            TERR1: u1,
    +            reserved15: u3,
    +            ///  ABRQ1
    +            ABRQ1: u1,
    +            ///  RQCP2
    +            RQCP2: u1,
    +            ///  TXOK2
    +            TXOK2: u1,
    +            ///  ALST2
    +            ALST2: u1,
    +            ///  TERR2
    +            TERR2: u1,
    +            reserved23: u3,
    +            ///  ABRQ2
    +            ABRQ2: u1,
    +            ///  CODE
    +            CODE: u2,
    +            ///  Lowest priority flag for mailbox 0
    +            TME0: u1,
    +            ///  Lowest priority flag for mailbox 1
    +            TME1: u1,
    +            ///  Lowest priority flag for mailbox 2
    +            TME2: u1,
    +            ///  Lowest priority flag for mailbox 0
    +            LOW0: u1,
    +            ///  Lowest priority flag for mailbox 1
    +            LOW1: u1,
    +            ///  Lowest priority flag for mailbox 2
    +            LOW2: u1,
    +        }),
    +        ///  receive FIFO 0 register
    +        RF0R: mmio.Mmio(packed struct(u32) {
    +            ///  FMP0
    +            FMP0: u2,
    +            reserved3: u1,
    +            ///  FULL0
    +            FULL0: u1,
    +            ///  FOVR0
    +            FOVR0: u1,
    +            ///  RFOM0
    +            RFOM0: u1,
    +            padding: u26,
    +        }),
    +        ///  receive FIFO 1 register
    +        RF1R: mmio.Mmio(packed struct(u32) {
    +            ///  FMP1
    +            FMP1: u2,
    +            reserved3: u1,
    +            ///  FULL1
    +            FULL1: u1,
    +            ///  FOVR1
    +            FOVR1: u1,
    +            ///  RFOM1
    +            RFOM1: u1,
    +            padding: u26,
    +        }),
    +        ///  interrupt enable register
    +        IER: mmio.Mmio(packed struct(u32) {
    +            ///  TMEIE
    +            TMEIE: u1,
    +            ///  FMPIE0
    +            FMPIE0: u1,
    +            ///  FFIE0
    +            FFIE0: u1,
    +            ///  FOVIE0
    +            FOVIE0: u1,
    +            ///  FMPIE1
    +            FMPIE1: u1,
    +            ///  FFIE1
    +            FFIE1: u1,
    +            ///  FOVIE1
    +            FOVIE1: u1,
    +            reserved8: u1,
    +            ///  EWGIE
    +            EWGIE: u1,
    +            ///  EPVIE
    +            EPVIE: u1,
    +            ///  BOFIE
    +            BOFIE: u1,
    +            ///  LECIE
    +            LECIE: u1,
    +            reserved15: u3,
    +            ///  ERRIE
    +            ERRIE: u1,
    +            ///  WKUIE
    +            WKUIE: u1,
    +            ///  SLKIE
    +            SLKIE: u1,
    +            padding: u14,
    +        }),
    +        ///  interrupt enable register
    +        ESR: mmio.Mmio(packed struct(u32) {
    +            ///  EWGF
    +            EWGF: u1,
    +            ///  EPVF
    +            EPVF: u1,
    +            ///  BOFF
    +            BOFF: u1,
    +            reserved4: u1,
    +            ///  LEC
    +            LEC: u3,
    +            reserved16: u9,
    +            ///  TEC
    +            TEC: u8,
    +            ///  REC
    +            REC: u8,
    +        }),
    +        ///  bit timing register
    +        BTR: mmio.Mmio(packed struct(u32) {
    +            ///  BRP
    +            BRP: u10,
    +            reserved16: u6,
    +            ///  TS1
    +            TS1: u4,
    +            ///  TS2
    +            TS2: u3,
    +            reserved24: u1,
    +            ///  SJW
    +            SJW: u2,
    +            reserved30: u4,
    +            ///  LBKM
    +            LBKM: u1,
    +            ///  SILM
    +            SILM: u1,
    +        }),
    +        reserved384: [352]u8,
    +        ///  TX mailbox identifier register
    +        TI0R: mmio.Mmio(packed struct(u32) {
    +            ///  TXRQ
    +            TXRQ: u1,
    +            ///  RTR
    +            RTR: u1,
    +            ///  IDE
    +            IDE: u1,
    +            ///  EXID
    +            EXID: u18,
    +            ///  STID
    +            STID: u11,
    +        }),
    +        ///  mailbox data length control and time stamp register
    +        TDT0R: mmio.Mmio(packed struct(u32) {
    +            ///  DLC
    +            DLC: u4,
    +            reserved8: u4,
    +            ///  TGT
    +            TGT: u1,
    +            reserved16: u7,
    +            ///  TIME
    +            TIME: u16,
    +        }),
    +        ///  mailbox data low register
    +        TDL0R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA0
    +            DATA0: u8,
    +            ///  DATA1
    +            DATA1: u8,
    +            ///  DATA2
    +            DATA2: u8,
    +            ///  DATA3
    +            DATA3: u8,
    +        }),
    +        ///  mailbox data high register
    +        TDH0R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA4
    +            DATA4: u8,
    +            ///  DATA5
    +            DATA5: u8,
    +            ///  DATA6
    +            DATA6: u8,
    +            ///  DATA7
    +            DATA7: u8,
    +        }),
    +        ///  mailbox identifier register
    +        TI1R: mmio.Mmio(packed struct(u32) {
    +            ///  TXRQ
    +            TXRQ: u1,
    +            ///  RTR
    +            RTR: u1,
    +            ///  IDE
    +            IDE: u1,
    +            ///  EXID
    +            EXID: u18,
    +            ///  STID
    +            STID: u11,
    +        }),
    +        ///  mailbox data length control and time stamp register
    +        TDT1R: mmio.Mmio(packed struct(u32) {
    +            ///  DLC
    +            DLC: u4,
    +            reserved8: u4,
    +            ///  TGT
    +            TGT: u1,
    +            reserved16: u7,
    +            ///  TIME
    +            TIME: u16,
    +        }),
    +        ///  mailbox data low register
    +        TDL1R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA0
    +            DATA0: u8,
    +            ///  DATA1
    +            DATA1: u8,
    +            ///  DATA2
    +            DATA2: u8,
    +            ///  DATA3
    +            DATA3: u8,
    +        }),
    +        ///  mailbox data high register
    +        TDH1R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA4
    +            DATA4: u8,
    +            ///  DATA5
    +            DATA5: u8,
    +            ///  DATA6
    +            DATA6: u8,
    +            ///  DATA7
    +            DATA7: u8,
    +        }),
    +        ///  mailbox identifier register
    +        TI2R: mmio.Mmio(packed struct(u32) {
    +            ///  TXRQ
    +            TXRQ: u1,
    +            ///  RTR
    +            RTR: u1,
    +            ///  IDE
    +            IDE: u1,
    +            ///  EXID
    +            EXID: u18,
    +            ///  STID
    +            STID: u11,
    +        }),
    +        ///  mailbox data length control and time stamp register
    +        TDT2R: mmio.Mmio(packed struct(u32) {
    +            ///  DLC
    +            DLC: u4,
    +            reserved8: u4,
    +            ///  TGT
    +            TGT: u1,
    +            reserved16: u7,
    +            ///  TIME
    +            TIME: u16,
    +        }),
    +        ///  mailbox data low register
    +        TDL2R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA0
    +            DATA0: u8,
    +            ///  DATA1
    +            DATA1: u8,
    +            ///  DATA2
    +            DATA2: u8,
    +            ///  DATA3
    +            DATA3: u8,
    +        }),
    +        ///  mailbox data high register
    +        TDH2R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA4
    +            DATA4: u8,
    +            ///  DATA5
    +            DATA5: u8,
    +            ///  DATA6
    +            DATA6: u8,
    +            ///  DATA7
    +            DATA7: u8,
    +        }),
    +        ///  receive FIFO mailbox identifier register
    +        RI0R: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  RTR
    +            RTR: u1,
    +            ///  IDE
    +            IDE: u1,
    +            ///  EXID
    +            EXID: u18,
    +            ///  STID
    +            STID: u11,
    +        }),
    +        ///  mailbox data high register
    +        RDT0R: mmio.Mmio(packed struct(u32) {
    +            ///  DLC
    +            DLC: u4,
    +            reserved8: u4,
    +            ///  FMI
    +            FMI: u8,
    +            ///  TIME
    +            TIME: u16,
    +        }),
    +        ///  mailbox data high register
    +        RDL0R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA0
    +            DATA0: u8,
    +            ///  DATA1
    +            DATA1: u8,
    +            ///  DATA2
    +            DATA2: u8,
    +            ///  DATA3
    +            DATA3: u8,
    +        }),
    +        ///  receive FIFO mailbox data high register
    +        RDH0R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA4
    +            DATA4: u8,
    +            ///  DATA5
    +            DATA5: u8,
    +            ///  DATA6
    +            DATA6: u8,
    +            ///  DATA7
    +            DATA7: u8,
    +        }),
    +        ///  mailbox data high register
    +        RI1R: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  RTR
    +            RTR: u1,
    +            ///  IDE
    +            IDE: u1,
    +            ///  EXID
    +            EXID: u18,
    +            ///  STID
    +            STID: u11,
    +        }),
    +        ///  mailbox data high register
    +        RDT1R: mmio.Mmio(packed struct(u32) {
    +            ///  DLC
    +            DLC: u4,
    +            reserved8: u4,
    +            ///  FMI
    +            FMI: u8,
    +            ///  TIME
    +            TIME: u16,
    +        }),
    +        ///  mailbox data high register
    +        RDL1R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA0
    +            DATA0: u8,
    +            ///  DATA1
    +            DATA1: u8,
    +            ///  DATA2
    +            DATA2: u8,
    +            ///  DATA3
    +            DATA3: u8,
    +        }),
    +        ///  mailbox data high register
    +        RDH1R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA4
    +            DATA4: u8,
    +            ///  DATA5
    +            DATA5: u8,
    +            ///  DATA6
    +            DATA6: u8,
    +            ///  DATA7
    +            DATA7: u8,
    +        }),
    +        reserved512: [48]u8,
    +        ///  filter master register
    +        FMR: mmio.Mmio(packed struct(u32) {
    +            ///  FINIT
    +            FINIT: u1,
    +            reserved8: u7,
    +            ///  CAN2SB
    +            CAN2SB: u6,
    +            padding: u18,
    +        }),
    +        ///  filter mode register
    +        FM1R: mmio.Mmio(packed struct(u32) {
    +            ///  Filter mode
    +            FBM0: u1,
    +            ///  Filter mode
    +            FBM1: u1,
    +            ///  Filter mode
    +            FBM2: u1,
    +            ///  Filter mode
    +            FBM3: u1,
    +            ///  Filter mode
    +            FBM4: u1,
    +            ///  Filter mode
    +            FBM5: u1,
    +            ///  Filter mode
    +            FBM6: u1,
    +            ///  Filter mode
    +            FBM7: u1,
    +            ///  Filter mode
    +            FBM8: u1,
    +            ///  Filter mode
    +            FBM9: u1,
    +            ///  Filter mode
    +            FBM10: u1,
    +            ///  Filter mode
    +            FBM11: u1,
    +            ///  Filter mode
    +            FBM12: u1,
    +            ///  Filter mode
    +            FBM13: u1,
    +            ///  Filter mode
    +            FBM14: u1,
    +            ///  Filter mode
    +            FBM15: u1,
    +            ///  Filter mode
    +            FBM16: u1,
    +            ///  Filter mode
    +            FBM17: u1,
    +            ///  Filter mode
    +            FBM18: u1,
    +            ///  Filter mode
    +            FBM19: u1,
    +            ///  Filter mode
    +            FBM20: u1,
    +            ///  Filter mode
    +            FBM21: u1,
    +            ///  Filter mode
    +            FBM22: u1,
    +            ///  Filter mode
    +            FBM23: u1,
    +            ///  Filter mode
    +            FBM24: u1,
    +            ///  Filter mode
    +            FBM25: u1,
    +            ///  Filter mode
    +            FBM26: u1,
    +            ///  Filter mode
    +            FBM27: u1,
    +            padding: u4,
    +        }),
    +        reserved524: [4]u8,
    +        ///  filter scale register
    +        FS1R: mmio.Mmio(packed struct(u32) {
    +            ///  Filter scale configuration
    +            FSC0: u1,
    +            ///  Filter scale configuration
    +            FSC1: u1,
    +            ///  Filter scale configuration
    +            FSC2: u1,
    +            ///  Filter scale configuration
    +            FSC3: u1,
    +            ///  Filter scale configuration
    +            FSC4: u1,
    +            ///  Filter scale configuration
    +            FSC5: u1,
    +            ///  Filter scale configuration
    +            FSC6: u1,
    +            ///  Filter scale configuration
    +            FSC7: u1,
    +            ///  Filter scale configuration
    +            FSC8: u1,
    +            ///  Filter scale configuration
    +            FSC9: u1,
    +            ///  Filter scale configuration
    +            FSC10: u1,
    +            ///  Filter scale configuration
    +            FSC11: u1,
    +            ///  Filter scale configuration
    +            FSC12: u1,
    +            ///  Filter scale configuration
    +            FSC13: u1,
    +            ///  Filter scale configuration
    +            FSC14: u1,
    +            ///  Filter scale configuration
    +            FSC15: u1,
    +            ///  Filter scale configuration
    +            FSC16: u1,
    +            ///  Filter scale configuration
    +            FSC17: u1,
    +            ///  Filter scale configuration
    +            FSC18: u1,
    +            ///  Filter scale configuration
    +            FSC19: u1,
    +            ///  Filter scale configuration
    +            FSC20: u1,
    +            ///  Filter scale configuration
    +            FSC21: u1,
    +            ///  Filter scale configuration
    +            FSC22: u1,
    +            ///  Filter scale configuration
    +            FSC23: u1,
    +            ///  Filter scale configuration
    +            FSC24: u1,
    +            ///  Filter scale configuration
    +            FSC25: u1,
    +            ///  Filter scale configuration
    +            FSC26: u1,
    +            ///  Filter scale configuration
    +            FSC27: u1,
    +            padding: u4,
    +        }),
    +        reserved532: [4]u8,
    +        ///  filter FIFO assignment register
    +        FFA1R: mmio.Mmio(packed struct(u32) {
    +            ///  Filter FIFO assignment for filter 0
    +            FFA0: u1,
    +            ///  Filter FIFO assignment for filter 1
    +            FFA1: u1,
    +            ///  Filter FIFO assignment for filter 2
    +            FFA2: u1,
    +            ///  Filter FIFO assignment for filter 3
    +            FFA3: u1,
    +            ///  Filter FIFO assignment for filter 4
    +            FFA4: u1,
    +            ///  Filter FIFO assignment for filter 5
    +            FFA5: u1,
    +            ///  Filter FIFO assignment for filter 6
    +            FFA6: u1,
    +            ///  Filter FIFO assignment for filter 7
    +            FFA7: u1,
    +            ///  Filter FIFO assignment for filter 8
    +            FFA8: u1,
    +            ///  Filter FIFO assignment for filter 9
    +            FFA9: u1,
    +            ///  Filter FIFO assignment for filter 10
    +            FFA10: u1,
    +            ///  Filter FIFO assignment for filter 11
    +            FFA11: u1,
    +            ///  Filter FIFO assignment for filter 12
    +            FFA12: u1,
    +            ///  Filter FIFO assignment for filter 13
    +            FFA13: u1,
    +            ///  Filter FIFO assignment for filter 14
    +            FFA14: u1,
    +            ///  Filter FIFO assignment for filter 15
    +            FFA15: u1,
    +            ///  Filter FIFO assignment for filter 16
    +            FFA16: u1,
    +            ///  Filter FIFO assignment for filter 17
    +            FFA17: u1,
    +            ///  Filter FIFO assignment for filter 18
    +            FFA18: u1,
    +            ///  Filter FIFO assignment for filter 19
    +            FFA19: u1,
    +            ///  Filter FIFO assignment for filter 20
    +            FFA20: u1,
    +            ///  Filter FIFO assignment for filter 21
    +            FFA21: u1,
    +            ///  Filter FIFO assignment for filter 22
    +            FFA22: u1,
    +            ///  Filter FIFO assignment for filter 23
    +            FFA23: u1,
    +            ///  Filter FIFO assignment for filter 24
    +            FFA24: u1,
    +            ///  Filter FIFO assignment for filter 25
    +            FFA25: u1,
    +            ///  Filter FIFO assignment for filter 26
    +            FFA26: u1,
    +            ///  Filter FIFO assignment for filter 27
    +            FFA27: u1,
    +            padding: u4,
    +        }),
    +        reserved540: [4]u8,
    +        ///  filter activation register
    +        FA1R: mmio.Mmio(packed struct(u32) {
    +            ///  Filter active
    +            FACT0: u1,
    +            ///  Filter active
    +            FACT1: u1,
    +            ///  Filter active
    +            FACT2: u1,
    +            ///  Filter active
    +            FACT3: u1,
    +            ///  Filter active
    +            FACT4: u1,
    +            ///  Filter active
    +            FACT5: u1,
    +            ///  Filter active
    +            FACT6: u1,
    +            ///  Filter active
    +            FACT7: u1,
    +            ///  Filter active
    +            FACT8: u1,
    +            ///  Filter active
    +            FACT9: u1,
    +            ///  Filter active
    +            FACT10: u1,
    +            ///  Filter active
    +            FACT11: u1,
    +            ///  Filter active
    +            FACT12: u1,
    +            ///  Filter active
    +            FACT13: u1,
    +            ///  Filter active
    +            FACT14: u1,
    +            ///  Filter active
    +            FACT15: u1,
    +            ///  Filter active
    +            FACT16: u1,
    +            ///  Filter active
    +            FACT17: u1,
    +            ///  Filter active
    +            FACT18: u1,
    +            ///  Filter active
    +            FACT19: u1,
    +            ///  Filter active
    +            FACT20: u1,
    +            ///  Filter active
    +            FACT21: u1,
    +            ///  Filter active
    +            FACT22: u1,
    +            ///  Filter active
    +            FACT23: u1,
    +            ///  Filter active
    +            FACT24: u1,
    +            ///  Filter active
    +            FACT25: u1,
    +            ///  Filter active
    +            FACT26: u1,
    +            ///  Filter active
    +            FACT27: u1,
    +            padding: u4,
    +        }),
    +        reserved576: [32]u8,
    +        ///  Filter bank 0 register 1
    +        F0R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 0 register 2
    +        F0R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 1 register 1
    +        F1R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 1 register 2
    +        F1R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 2 register 1
    +        F2R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 2 register 2
    +        F2R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 3 register 1
    +        F3R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 3 register 2
    +        F3R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 4 register 1
    +        F4R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 4 register 2
    +        F4R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 5 register 1
    +        F5R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 5 register 2
    +        F5R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 6 register 1
    +        F6R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 6 register 2
    +        F6R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 7 register 1
    +        F7R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 7 register 2
    +        F7R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 8 register 1
    +        F8R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 8 register 2
    +        F8R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 9 register 1
    +        F9R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 9 register 2
    +        F9R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 10 register 1
    +        F10R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 10 register 2
    +        F10R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 11 register 1
    +        F11R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 11 register 2
    +        F11R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 4 register 1
    +        F12R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 12 register 2
    +        F12R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 13 register 1
    +        F13R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 13 register 2
    +        F13R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 14 register 1
    +        F14R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 14 register 2
    +        F14R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 15 register 1
    +        F15R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 15 register 2
    +        F15R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 16 register 1
    +        F16R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 16 register 2
    +        F16R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 17 register 1
    +        F17R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 17 register 2
    +        F17R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 18 register 1
    +        F18R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 18 register 2
    +        F18R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 19 register 1
    +        F19R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 19 register 2
    +        F19R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 20 register 1
    +        F20R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 20 register 2
    +        F20R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 21 register 1
    +        F21R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 21 register 2
    +        F21R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 22 register 1
    +        F22R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 22 register 2
    +        F22R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 23 register 1
    +        F23R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 23 register 2
    +        F23R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 24 register 1
    +        F24R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 24 register 2
    +        F24R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 25 register 1
    +        F25R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 25 register 2
    +        F25R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 26 register 1
    +        F26R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 26 register 2
    +        F26R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 27 register 1
    +        F27R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 27 register 2
    +        F27R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +    };
    +
    +    ///  USB on the go full speed
    +    pub const OTG_FS_PWRCLK = extern struct {
    +        ///  OTG_FS power and clock gating control register
    +        FS_PCGCCTL: mmio.Mmio(packed struct(u32) {
    +            ///  Stop PHY clock
    +            STPPCLK: u1,
    +            ///  Gate HCLK
    +            GATEHCLK: u1,
    +            reserved4: u2,
    +            ///  PHY Suspended
    +            PHYSUSP: u1,
    +            padding: u27,
    +        }),
    +    };
    +
    +    ///  Digital-to-analog converter
    +    pub const DAC = extern struct {
    +        ///  control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 enable
    +            EN1: u1,
    +            ///  DAC channel1 output buffer disable
    +            BOFF1: u1,
    +            ///  DAC channel1 trigger enable
    +            TEN1: u1,
    +            ///  DAC channel1 trigger selection
    +            TSEL1: u3,
    +            ///  DAC channel1 noise/triangle wave generation enable
    +            WAVE1: u2,
    +            ///  DAC channel1 mask/amplitude selector
    +            MAMP1: u4,
    +            ///  DAC channel1 DMA enable
    +            DMAEN1: u1,
    +            ///  DAC channel1 DMA Underrun Interrupt enable
    +            DMAUDRIE1: u1,
    +            reserved16: u2,
    +            ///  DAC channel2 enable
    +            EN2: u1,
    +            ///  DAC channel2 output buffer disable
    +            BOFF2: u1,
    +            ///  DAC channel2 trigger enable
    +            TEN2: u1,
    +            ///  DAC channel2 trigger selection
    +            TSEL2: u3,
    +            ///  DAC channel2 noise/triangle wave generation enable
    +            WAVE2: u2,
    +            ///  DAC channel2 mask/amplitude selector
    +            MAMP2: u4,
    +            ///  DAC channel2 DMA enable
    +            DMAEN2: u1,
    +            ///  DAC channel2 DMA underrun interrupt enable
    +            DMAUDRIE2: u1,
    +            padding: u2,
    +        }),
    +        ///  software trigger register
    +        SWTRIGR: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 software trigger
    +            SWTRIG1: u1,
    +            ///  DAC channel2 software trigger
    +            SWTRIG2: u1,
    +            padding: u30,
    +        }),
    +        ///  channel1 12-bit right-aligned data holding register
    +        DHR12R1: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 12-bit right-aligned data
    +            DACC1DHR: u12,
    +            padding: u20,
    +        }),
    +        ///  channel1 12-bit left aligned data holding register
    +        DHR12L1: mmio.Mmio(packed struct(u32) {
    +            reserved4: u4,
    +            ///  DAC channel1 12-bit left-aligned data
    +            DACC1DHR: u12,
    +            padding: u16,
    +        }),
    +        ///  channel1 8-bit right aligned data holding register
    +        DHR8R1: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 8-bit right-aligned data
    +            DACC1DHR: u8,
    +            padding: u24,
    +        }),
    +        ///  channel2 12-bit right aligned data holding register
    +        DHR12R2: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel2 12-bit right-aligned data
    +            DACC2DHR: u12,
    +            padding: u20,
    +        }),
    +        ///  channel2 12-bit left aligned data holding register
    +        DHR12L2: mmio.Mmio(packed struct(u32) {
    +            reserved4: u4,
    +            ///  DAC channel2 12-bit left-aligned data
    +            DACC2DHR: u12,
    +            padding: u16,
    +        }),
    +        ///  channel2 8-bit right-aligned data holding register
    +        DHR8R2: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel2 8-bit right-aligned data
    +            DACC2DHR: u8,
    +            padding: u24,
    +        }),
    +        ///  Dual DAC 12-bit right-aligned data holding register
    +        DHR12RD: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 12-bit right-aligned data
    +            DACC1DHR: u12,
    +            reserved16: u4,
    +            ///  DAC channel2 12-bit right-aligned data
    +            DACC2DHR: u12,
    +            padding: u4,
    +        }),
    +        ///  DUAL DAC 12-bit left aligned data holding register
    +        DHR12LD: mmio.Mmio(packed struct(u32) {
    +            reserved4: u4,
    +            ///  DAC channel1 12-bit left-aligned data
    +            DACC1DHR: u12,
    +            reserved20: u4,
    +            ///  DAC channel2 12-bit left-aligned data
    +            DACC2DHR: u12,
    +        }),
    +        ///  DUAL DAC 8-bit right aligned data holding register
    +        DHR8RD: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 8-bit right-aligned data
    +            DACC1DHR: u8,
    +            ///  DAC channel2 8-bit right-aligned data
    +            DACC2DHR: u8,
    +            padding: u16,
    +        }),
    +        ///  channel1 data output register
    +        DOR1: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 data output
    +            DACC1DOR: u12,
    +            padding: u20,
    +        }),
    +        ///  channel2 data output register
    +        DOR2: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel2 data output
    +            DACC2DOR: u12,
    +            padding: u20,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            reserved13: u13,
    +            ///  DAC channel1 DMA underrun flag
    +            DMAUDR1: u1,
    +            reserved29: u15,
    +            ///  DAC channel2 DMA underrun flag
    +            DMAUDR2: u1,
    +            padding: u2,
    +        }),
    +    };
    +
    +    ///  Power control
    +    pub const PWR = extern struct {
    +        ///  power control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  Low-power deep sleep
    +            LPDS: u1,
    +            ///  Power down deepsleep
    +            PDDS: u1,
    +            ///  Clear wakeup flag
    +            CWUF: u1,
    +            ///  Clear standby flag
    +            CSBF: u1,
    +            ///  Power voltage detector enable
    +            PVDE: u1,
    +            ///  PVD level selection
    +            PLS: u3,
    +            ///  Disable backup domain write protection
    +            DBP: u1,
    +            ///  Flash power down in Stop mode
    +            FPDS: u1,
    +            padding: u22,
    +        }),
    +        ///  power control/status register
    +        CSR: mmio.Mmio(packed struct(u32) {
    +            ///  Wakeup flag
    +            WUF: u1,
    +            ///  Standby flag
    +            SBF: u1,
    +            ///  PVD output
    +            PVDO: u1,
    +            ///  Backup regulator ready
    +            BRR: u1,
    +            reserved8: u4,
    +            ///  Enable WKUP pin
    +            EWUP: u1,
    +            ///  Backup regulator enable
    +            BRE: u1,
    +            reserved14: u4,
    +            ///  Regulator voltage scaling output selection ready bit
    +            VOSRDY: u1,
    +            padding: u17,
    +        }),
    +    };
    +
    +    ///  Inter-integrated circuit
    +    pub const I2C3 = extern struct {
    +        ///  Control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral enable
    +            PE: u1,
    +            ///  SMBus mode
    +            SMBUS: u1,
    +            reserved3: u1,
    +            ///  SMBus type
    +            SMBTYPE: u1,
    +            ///  ARP enable
    +            ENARP: u1,
    +            ///  PEC enable
    +            ENPEC: u1,
    +            ///  General call enable
    +            ENGC: u1,
    +            ///  Clock stretching disable (Slave mode)
    +            NOSTRETCH: u1,
    +            ///  Start generation
    +            START: u1,
    +            ///  Stop generation
    +            STOP: u1,
    +            ///  Acknowledge enable
    +            ACK: u1,
    +            ///  Acknowledge/PEC Position (for data reception)
    +            POS: u1,
    +            ///  Packet error checking
    +            PEC: u1,
    +            ///  SMBus alert
    +            ALERT: u1,
    +            reserved15: u1,
    +            ///  Software reset
    +            SWRST: u1,
    +            padding: u16,
    +        }),
    +        ///  Control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral clock frequency
    +            FREQ: u6,
    +            reserved8: u2,
    +            ///  Error interrupt enable
    +            ITERREN: u1,
    +            ///  Event interrupt enable
    +            ITEVTEN: u1,
    +            ///  Buffer interrupt enable
    +            ITBUFEN: u1,
    +            ///  DMA requests enable
    +            DMAEN: u1,
    +            ///  DMA last transfer
    +            LAST: u1,
    +            padding: u19,
    +        }),
    +        ///  Own address register 1
    +        OAR1: mmio.Mmio(packed struct(u32) {
    +            ///  Interface address
    +            ADD0: u1,
    +            ///  Interface address
    +            ADD7: u7,
    +            ///  Interface address
    +            ADD10: u2,
    +            reserved15: u5,
    +            ///  Addressing mode (slave mode)
    +            ADDMODE: u1,
    +            padding: u16,
    +        }),
    +        ///  Own address register 2
    +        OAR2: mmio.Mmio(packed struct(u32) {
    +            ///  Dual addressing mode enable
    +            ENDUAL: u1,
    +            ///  Interface address
    +            ADD2: u7,
    +            padding: u24,
    +        }),
    +        ///  Data register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  8-bit data register
    +            DR: u8,
    +            padding: u24,
    +        }),
    +        ///  Status register 1
    +        SR1: mmio.Mmio(packed struct(u32) {
    +            ///  Start bit (Master mode)
    +            SB: u1,
    +            ///  Address sent (master mode)/matched (slave mode)
    +            ADDR: u1,
    +            ///  Byte transfer finished
    +            BTF: u1,
    +            ///  10-bit header sent (Master mode)
    +            ADD10: u1,
    +            ///  Stop detection (slave mode)
    +            STOPF: u1,
    +            reserved6: u1,
    +            ///  Data register not empty (receivers)
    +            RxNE: u1,
    +            ///  Data register empty (transmitters)
    +            TxE: u1,
    +            ///  Bus error
    +            BERR: u1,
    +            ///  Arbitration lost (master mode)
    +            ARLO: u1,
    +            ///  Acknowledge failure
    +            AF: u1,
    +            ///  Overrun/Underrun
    +            OVR: u1,
    +            ///  PEC Error in reception
    +            PECERR: u1,
    +            reserved14: u1,
    +            ///  Timeout or Tlow error
    +            TIMEOUT: u1,
    +            ///  SMBus alert
    +            SMBALERT: u1,
    +            padding: u16,
    +        }),
    +        ///  Status register 2
    +        SR2: mmio.Mmio(packed struct(u32) {
    +            ///  Master/slave
    +            MSL: u1,
    +            ///  Bus busy
    +            BUSY: u1,
    +            ///  Transmitter/receiver
    +            TRA: u1,
    +            reserved4: u1,
    +            ///  General call address (Slave mode)
    +            GENCALL: u1,
    +            ///  SMBus device default address (Slave mode)
    +            SMBDEFAULT: u1,
    +            ///  SMBus host header (Slave mode)
    +            SMBHOST: u1,
    +            ///  Dual flag (Slave mode)
    +            DUALF: u1,
    +            ///  acket error checking register
    +            PEC: u8,
    +            padding: u16,
    +        }),
    +        ///  Clock control register
    +        CCR: mmio.Mmio(packed struct(u32) {
    +            ///  Clock control register in Fast/Standard mode (Master mode)
    +            CCR: u12,
    +            reserved14: u2,
    +            ///  Fast mode duty cycle
    +            DUTY: u1,
    +            ///  I2C master mode selection
    +            F_S: u1,
    +            padding: u16,
    +        }),
    +        ///  TRISE register
    +        TRISE: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum rise time in Fast/Standard mode (Master mode)
    +            TRISE: u6,
    +            padding: u26,
    +        }),
    +    };
    +
    +    ///  USB on the go full speed
    +    pub const OTG_FS_DEVICE = extern struct {
    +        ///  OTG_FS device configuration register (OTG_FS_DCFG)
    +        FS_DCFG: mmio.Mmio(packed struct(u32) {
    +            ///  Device speed
    +            DSPD: u2,
    +            ///  Non-zero-length status OUT handshake
    +            NZLSOHSK: u1,
    +            reserved4: u1,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Periodic frame interval
    +            PFIVL: u2,
    +            padding: u19,
    +        }),
    +        ///  OTG_FS device control register (OTG_FS_DCTL)
    +        FS_DCTL: mmio.Mmio(packed struct(u32) {
    +            ///  Remote wakeup signaling
    +            RWUSIG: u1,
    +            ///  Soft disconnect
    +            SDIS: u1,
    +            ///  Global IN NAK status
    +            GINSTS: u1,
    +            ///  Global OUT NAK status
    +            GONSTS: u1,
    +            ///  Test control
    +            TCTL: u3,
    +            ///  Set global IN NAK
    +            SGINAK: u1,
    +            ///  Clear global IN NAK
    +            CGINAK: u1,
    +            ///  Set global OUT NAK
    +            SGONAK: u1,
    +            ///  Clear global OUT NAK
    +            CGONAK: u1,
    +            ///  Power-on programming done
    +            POPRGDNE: u1,
    +            padding: u20,
    +        }),
    +        ///  OTG_FS device status register (OTG_FS_DSTS)
    +        FS_DSTS: mmio.Mmio(packed struct(u32) {
    +            ///  Suspend status
    +            SUSPSTS: u1,
    +            ///  Enumerated speed
    +            ENUMSPD: u2,
    +            ///  Erratic error
    +            EERR: u1,
    +            reserved8: u4,
    +            ///  Frame number of the received SOF
    +            FNSOF: u14,
    +            padding: u10,
    +        }),
    +        reserved16: [4]u8,
    +        ///  OTG_FS device IN endpoint common interrupt mask register (OTG_FS_DIEPMSK)
    +        FS_DIEPMSK: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt mask
    +            XFRCM: u1,
    +            ///  Endpoint disabled interrupt mask
    +            EPDM: u1,
    +            reserved3: u1,
    +            ///  Timeout condition mask (Non-isochronous endpoints)
    +            TOM: u1,
    +            ///  IN token received when TxFIFO empty mask
    +            ITTXFEMSK: u1,
    +            ///  IN token received with EP mismatch mask
    +            INEPNMM: u1,
    +            ///  IN endpoint NAK effective mask
    +            INEPNEM: u1,
    +            padding: u25,
    +        }),
    +        ///  OTG_FS device OUT endpoint common interrupt mask register (OTG_FS_DOEPMSK)
    +        FS_DOEPMSK: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt mask
    +            XFRCM: u1,
    +            ///  Endpoint disabled interrupt mask
    +            EPDM: u1,
    +            reserved3: u1,
    +            ///  SETUP phase done mask
    +            STUPM: u1,
    +            ///  OUT token received when endpoint disabled mask
    +            OTEPDM: u1,
    +            padding: u27,
    +        }),
    +        ///  OTG_FS device all endpoints interrupt register (OTG_FS_DAINT)
    +        FS_DAINT: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint interrupt bits
    +            IEPINT: u16,
    +            ///  OUT endpoint interrupt bits
    +            OEPINT: u16,
    +        }),
    +        ///  OTG_FS all endpoints interrupt mask register (OTG_FS_DAINTMSK)
    +        FS_DAINTMSK: mmio.Mmio(packed struct(u32) {
    +            ///  IN EP interrupt mask bits
    +            IEPM: u16,
    +            ///  OUT endpoint interrupt bits
    +            OEPINT: u16,
    +        }),
    +        reserved40: [8]u8,
    +        ///  OTG_FS device VBUS discharge time register
    +        DVBUSDIS: mmio.Mmio(packed struct(u32) {
    +            ///  Device VBUS discharge time
    +            VBUSDT: u16,
    +            padding: u16,
    +        }),
    +        ///  OTG_FS device VBUS pulsing time register
    +        DVBUSPULSE: mmio.Mmio(packed struct(u32) {
    +            ///  Device VBUS pulsing time
    +            DVBUSP: u12,
    +            padding: u20,
    +        }),
    +        reserved52: [4]u8,
    +        ///  OTG_FS device IN endpoint FIFO empty interrupt mask register
    +        DIEPEMPMSK: mmio.Mmio(packed struct(u32) {
    +            ///  IN EP Tx FIFO empty interrupt mask bits
    +            INEPTXFEM: u16,
    +            padding: u16,
    +        }),
    +        reserved256: [200]u8,
    +        ///  OTG_FS device control IN endpoint 0 control register (OTG_FS_DIEPCTL0)
    +        FS_DIEPCTL0: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u2,
    +            reserved15: u13,
    +            ///  USB active endpoint
    +            USBAEP: u1,
    +            reserved17: u1,
    +            ///  NAK status
    +            NAKSTS: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  STALL handshake
    +            STALL: u1,
    +            ///  TxFIFO number
    +            TXFNUM: u4,
    +            ///  Clear NAK
    +            CNAK: u1,
    +            ///  Set NAK
    +            SNAK: u1,
    +            reserved30: u2,
    +            ///  Endpoint disable
    +            EPDIS: u1,
    +            ///  Endpoint enable
    +            EPENA: u1,
    +        }),
    +        reserved264: [4]u8,
    +        ///  device endpoint-x interrupt register
    +        DIEPINT0: mmio.Mmio(packed struct(u32) {
    +            ///  XFRC
    +            XFRC: u1,
    +            ///  EPDISD
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  TOC
    +            TOC: u1,
    +            ///  ITTXFE
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  INEPNE
    +            INEPNE: u1,
    +            ///  TXFE
    +            TXFE: u1,
    +            padding: u24,
    +        }),
    +        reserved272: [4]u8,
    +        ///  device endpoint-0 transfer size register
    +        DIEPTSIZ0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u7,
    +            reserved19: u12,
    +            ///  Packet count
    +            PKTCNT: u2,
    +            padding: u11,
    +        }),
    +        reserved280: [4]u8,
    +        ///  OTG_FS device IN endpoint transmit FIFO status register
    +        DTXFSTS0: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint TxFIFO space available
    +            INEPTFSAV: u16,
    +            padding: u16,
    +        }),
    +        reserved288: [4]u8,
    +        ///  OTG device endpoint-1 control register
    +        DIEPCTL1: mmio.Mmio(packed struct(u32) {
    +            ///  MPSIZ
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USBAEP
    +            USBAEP: u1,
    +            ///  EONUM/DPID
    +            EONUM_DPID: u1,
    +            ///  NAKSTS
    +            NAKSTS: u1,
    +            ///  EPTYP
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  Stall
    +            Stall: u1,
    +            ///  TXFNUM
    +            TXFNUM: u4,
    +            ///  CNAK
    +            CNAK: u1,
    +            ///  SNAK
    +            SNAK: u1,
    +            ///  SD0PID/SEVNFRM
    +            SD0PID_SEVNFRM: u1,
    +            ///  SODDFRM/SD1PID
    +            SODDFRM_SD1PID: u1,
    +            ///  EPDIS
    +            EPDIS: u1,
    +            ///  EPENA
    +            EPENA: u1,
    +        }),
    +        reserved296: [4]u8,
    +        ///  device endpoint-1 interrupt register
    +        DIEPINT1: mmio.Mmio(packed struct(u32) {
    +            ///  XFRC
    +            XFRC: u1,
    +            ///  EPDISD
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  TOC
    +            TOC: u1,
    +            ///  ITTXFE
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  INEPNE
    +            INEPNE: u1,
    +            ///  TXFE
    +            TXFE: u1,
    +            padding: u24,
    +        }),
    +        reserved304: [4]u8,
    +        ///  device endpoint-1 transfer size register
    +        DIEPTSIZ1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Multi count
    +            MCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved312: [4]u8,
    +        ///  OTG_FS device IN endpoint transmit FIFO status register
    +        DTXFSTS1: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint TxFIFO space available
    +            INEPTFSAV: u16,
    +            padding: u16,
    +        }),
    +        reserved320: [4]u8,
    +        ///  OTG device endpoint-2 control register
    +        DIEPCTL2: mmio.Mmio(packed struct(u32) {
    +            ///  MPSIZ
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USBAEP
    +            USBAEP: u1,
    +            ///  EONUM/DPID
    +            EONUM_DPID: u1,
    +            ///  NAKSTS
    +            NAKSTS: u1,
    +            ///  EPTYP
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  Stall
    +            Stall: u1,
    +            ///  TXFNUM
    +            TXFNUM: u4,
    +            ///  CNAK
    +            CNAK: u1,
    +            ///  SNAK
    +            SNAK: u1,
    +            ///  SD0PID/SEVNFRM
    +            SD0PID_SEVNFRM: u1,
    +            ///  SODDFRM
    +            SODDFRM: u1,
    +            ///  EPDIS
    +            EPDIS: u1,
    +            ///  EPENA
    +            EPENA: u1,
    +        }),
    +        reserved328: [4]u8,
    +        ///  device endpoint-2 interrupt register
    +        DIEPINT2: mmio.Mmio(packed struct(u32) {
    +            ///  XFRC
    +            XFRC: u1,
    +            ///  EPDISD
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  TOC
    +            TOC: u1,
    +            ///  ITTXFE
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  INEPNE
    +            INEPNE: u1,
    +            ///  TXFE
    +            TXFE: u1,
    +            padding: u24,
    +        }),
    +        reserved336: [4]u8,
    +        ///  device endpoint-2 transfer size register
    +        DIEPTSIZ2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Multi count
    +            MCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved344: [4]u8,
    +        ///  OTG_FS device IN endpoint transmit FIFO status register
    +        DTXFSTS2: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint TxFIFO space available
    +            INEPTFSAV: u16,
    +            padding: u16,
    +        }),
    +        reserved352: [4]u8,
    +        ///  OTG device endpoint-3 control register
    +        DIEPCTL3: mmio.Mmio(packed struct(u32) {
    +            ///  MPSIZ
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USBAEP
    +            USBAEP: u1,
    +            ///  EONUM/DPID
    +            EONUM_DPID: u1,
    +            ///  NAKSTS
    +            NAKSTS: u1,
    +            ///  EPTYP
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  Stall
    +            Stall: u1,
    +            ///  TXFNUM
    +            TXFNUM: u4,
    +            ///  CNAK
    +            CNAK: u1,
    +            ///  SNAK
    +            SNAK: u1,
    +            ///  SD0PID/SEVNFRM
    +            SD0PID_SEVNFRM: u1,
    +            ///  SODDFRM
    +            SODDFRM: u1,
    +            ///  EPDIS
    +            EPDIS: u1,
    +            ///  EPENA
    +            EPENA: u1,
    +        }),
    +        reserved360: [4]u8,
    +        ///  device endpoint-3 interrupt register
    +        DIEPINT3: mmio.Mmio(packed struct(u32) {
    +            ///  XFRC
    +            XFRC: u1,
    +            ///  EPDISD
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  TOC
    +            TOC: u1,
    +            ///  ITTXFE
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  INEPNE
    +            INEPNE: u1,
    +            ///  TXFE
    +            TXFE: u1,
    +            padding: u24,
    +        }),
    +        reserved368: [4]u8,
    +        ///  device endpoint-3 transfer size register
    +        DIEPTSIZ3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Multi count
    +            MCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved376: [4]u8,
    +        ///  OTG_FS device IN endpoint transmit FIFO status register
    +        DTXFSTS3: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint TxFIFO space available
    +            INEPTFSAV: u16,
    +            padding: u16,
    +        }),
    +        reserved768: [388]u8,
    +        ///  device endpoint-0 control register
    +        DOEPCTL0: mmio.Mmio(packed struct(u32) {
    +            ///  MPSIZ
    +            MPSIZ: u2,
    +            reserved15: u13,
    +            ///  USBAEP
    +            USBAEP: u1,
    +            reserved17: u1,
    +            ///  NAKSTS
    +            NAKSTS: u1,
    +            ///  EPTYP
    +            EPTYP: u2,
    +            ///  SNPM
    +            SNPM: u1,
    +            ///  Stall
    +            Stall: u1,
    +            reserved26: u4,
    +            ///  CNAK
    +            CNAK: u1,
    +            ///  SNAK
    +            SNAK: u1,
    +            reserved30: u2,
    +            ///  EPDIS
    +            EPDIS: u1,
    +            ///  EPENA
    +            EPENA: u1,
    +        }),
    +        reserved776: [4]u8,
    +        ///  device endpoint-0 interrupt register
    +        DOEPINT0: mmio.Mmio(packed struct(u32) {
    +            ///  XFRC
    +            XFRC: u1,
    +            ///  EPDISD
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  STUP
    +            STUP: u1,
    +            ///  OTEPDIS
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  B2BSTUP
    +            B2BSTUP: u1,
    +            padding: u25,
    +        }),
    +        reserved784: [4]u8,
    +        ///  device OUT endpoint-0 transfer size register
    +        DOEPTSIZ0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u7,
    +            reserved19: u12,
    +            ///  Packet count
    +            PKTCNT: u1,
    +            reserved29: u9,
    +            ///  SETUP packet count
    +            STUPCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved800: [12]u8,
    +        ///  device endpoint-1 control register
    +        DOEPCTL1: mmio.Mmio(packed struct(u32) {
    +            ///  MPSIZ
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USBAEP
    +            USBAEP: u1,
    +            ///  EONUM/DPID
    +            EONUM_DPID: u1,
    +            ///  NAKSTS
    +            NAKSTS: u1,
    +            ///  EPTYP
    +            EPTYP: u2,
    +            ///  SNPM
    +            SNPM: u1,
    +            ///  Stall
    +            Stall: u1,
    +            reserved26: u4,
    +            ///  CNAK
    +            CNAK: u1,
    +            ///  SNAK
    +            SNAK: u1,
    +            ///  SD0PID/SEVNFRM
    +            SD0PID_SEVNFRM: u1,
    +            ///  SODDFRM
    +            SODDFRM: u1,
    +            ///  EPDIS
    +            EPDIS: u1,
    +            ///  EPENA
    +            EPENA: u1,
    +        }),
    +        reserved808: [4]u8,
    +        ///  device endpoint-1 interrupt register
    +        DOEPINT1: mmio.Mmio(packed struct(u32) {
    +            ///  XFRC
    +            XFRC: u1,
    +            ///  EPDISD
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  STUP
    +            STUP: u1,
    +            ///  OTEPDIS
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  B2BSTUP
    +            B2BSTUP: u1,
    +            padding: u25,
    +        }),
    +        reserved816: [4]u8,
    +        ///  device OUT endpoint-1 transfer size register
    +        DOEPTSIZ1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Received data PID/SETUP packet count
    +            RXDPID_STUPCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved832: [12]u8,
    +        ///  device endpoint-2 control register
    +        DOEPCTL2: mmio.Mmio(packed struct(u32) {
    +            ///  MPSIZ
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USBAEP
    +            USBAEP: u1,
    +            ///  EONUM/DPID
    +            EONUM_DPID: u1,
    +            ///  NAKSTS
    +            NAKSTS: u1,
    +            ///  EPTYP
    +            EPTYP: u2,
    +            ///  SNPM
    +            SNPM: u1,
    +            ///  Stall
    +            Stall: u1,
    +            reserved26: u4,
    +            ///  CNAK
    +            CNAK: u1,
    +            ///  SNAK
    +            SNAK: u1,
    +            ///  SD0PID/SEVNFRM
    +            SD0PID_SEVNFRM: u1,
    +            ///  SODDFRM
    +            SODDFRM: u1,
    +            ///  EPDIS
    +            EPDIS: u1,
    +            ///  EPENA
    +            EPENA: u1,
    +        }),
    +        reserved840: [4]u8,
    +        ///  device endpoint-2 interrupt register
    +        DOEPINT2: mmio.Mmio(packed struct(u32) {
    +            ///  XFRC
    +            XFRC: u1,
    +            ///  EPDISD
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  STUP
    +            STUP: u1,
    +            ///  OTEPDIS
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  B2BSTUP
    +            B2BSTUP: u1,
    +            padding: u25,
    +        }),
    +        reserved848: [4]u8,
    +        ///  device OUT endpoint-2 transfer size register
    +        DOEPTSIZ2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Received data PID/SETUP packet count
    +            RXDPID_STUPCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved864: [12]u8,
    +        ///  device endpoint-3 control register
    +        DOEPCTL3: mmio.Mmio(packed struct(u32) {
    +            ///  MPSIZ
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USBAEP
    +            USBAEP: u1,
    +            ///  EONUM/DPID
    +            EONUM_DPID: u1,
    +            ///  NAKSTS
    +            NAKSTS: u1,
    +            ///  EPTYP
    +            EPTYP: u2,
    +            ///  SNPM
    +            SNPM: u1,
    +            ///  Stall
    +            Stall: u1,
    +            reserved26: u4,
    +            ///  CNAK
    +            CNAK: u1,
    +            ///  SNAK
    +            SNAK: u1,
    +            ///  SD0PID/SEVNFRM
    +            SD0PID_SEVNFRM: u1,
    +            ///  SODDFRM
    +            SODDFRM: u1,
    +            ///  EPDIS
    +            EPDIS: u1,
    +            ///  EPENA
    +            EPENA: u1,
    +        }),
    +        reserved872: [4]u8,
    +        ///  device endpoint-3 interrupt register
    +        DOEPINT3: mmio.Mmio(packed struct(u32) {
    +            ///  XFRC
    +            XFRC: u1,
    +            ///  EPDISD
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  STUP
    +            STUP: u1,
    +            ///  OTEPDIS
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  B2BSTUP
    +            B2BSTUP: u1,
    +            padding: u25,
    +        }),
    +        reserved880: [4]u8,
    +        ///  device OUT endpoint-3 transfer size register
    +        DOEPTSIZ3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Received data PID/SETUP packet count
    +            RXDPID_STUPCNT: u2,
    +            padding: u1,
    +        }),
    +    };
    +
    +    ///  USB on the go full speed
    +    pub const OTG_FS_HOST = extern struct {
    +        ///  OTG_FS host configuration register (OTG_FS_HCFG)
    +        FS_HCFG: mmio.Mmio(packed struct(u32) {
    +            ///  FS/LS PHY clock select
    +            FSLSPCS: u2,
    +            ///  FS- and LS-only support
    +            FSLSS: u1,
    +            padding: u29,
    +        }),
    +        ///  OTG_FS Host frame interval register
    +        HFIR: mmio.Mmio(packed struct(u32) {
    +            ///  Frame interval
    +            FRIVL: u16,
    +            padding: u16,
    +        }),
    +        ///  OTG_FS host frame number/frame time remaining register (OTG_FS_HFNUM)
    +        FS_HFNUM: mmio.Mmio(packed struct(u32) {
    +            ///  Frame number
    +            FRNUM: u16,
    +            ///  Frame time remaining
    +            FTREM: u16,
    +        }),
    +        reserved16: [4]u8,
    +        ///  OTG_FS_Host periodic transmit FIFO/queue status register (OTG_FS_HPTXSTS)
    +        FS_HPTXSTS: mmio.Mmio(packed struct(u32) {
    +            ///  Periodic transmit data FIFO space available
    +            PTXFSAVL: u16,
    +            ///  Periodic transmit request queue space available
    +            PTXQSAV: u8,
    +            ///  Top of the periodic transmit request queue
    +            PTXQTOP: u8,
    +        }),
    +        ///  OTG_FS Host all channels interrupt register
    +        HAINT: mmio.Mmio(packed struct(u32) {
    +            ///  Channel interrupts
    +            HAINT: u16,
    +            padding: u16,
    +        }),
    +        ///  OTG_FS host all channels interrupt mask register
    +        HAINTMSK: mmio.Mmio(packed struct(u32) {
    +            ///  Channel interrupt mask
    +            HAINTM: u16,
    +            padding: u16,
    +        }),
    +        reserved64: [36]u8,
    +        ///  OTG_FS host port control and status register (OTG_FS_HPRT)
    +        FS_HPRT: mmio.Mmio(packed struct(u32) {
    +            ///  Port connect status
    +            PCSTS: u1,
    +            ///  Port connect detected
    +            PCDET: u1,
    +            ///  Port enable
    +            PENA: u1,
    +            ///  Port enable/disable change
    +            PENCHNG: u1,
    +            ///  Port overcurrent active
    +            POCA: u1,
    +            ///  Port overcurrent change
    +            POCCHNG: u1,
    +            ///  Port resume
    +            PRES: u1,
    +            ///  Port suspend
    +            PSUSP: u1,
    +            ///  Port reset
    +            PRST: u1,
    +            reserved10: u1,
    +            ///  Port line status
    +            PLSTS: u2,
    +            ///  Port power
    +            PPWR: u1,
    +            ///  Port test control
    +            PTCTL: u4,
    +            ///  Port speed
    +            PSPD: u2,
    +            padding: u13,
    +        }),
    +        reserved256: [188]u8,
    +        ///  OTG_FS host channel-0 characteristics register (OTG_FS_HCCHAR0)
    +        FS_HCCHAR0: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multicount
    +            MCNT: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        reserved264: [4]u8,
    +        ///  OTG_FS host channel-0 interrupt register (OTG_FS_HCINT0)
    +        FS_HCINT0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            reserved7: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-0 mask register (OTG_FS_HCINTMSK0)
    +        FS_HCINTMSK0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-0 transfer size register
    +        FS_HCTSIZ0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        reserved288: [12]u8,
    +        ///  OTG_FS host channel-1 characteristics register (OTG_FS_HCCHAR1)
    +        FS_HCCHAR1: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multicount
    +            MCNT: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        reserved296: [4]u8,
    +        ///  OTG_FS host channel-1 interrupt register (OTG_FS_HCINT1)
    +        FS_HCINT1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            reserved7: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-1 mask register (OTG_FS_HCINTMSK1)
    +        FS_HCINTMSK1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-1 transfer size register
    +        FS_HCTSIZ1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        reserved320: [12]u8,
    +        ///  OTG_FS host channel-2 characteristics register (OTG_FS_HCCHAR2)
    +        FS_HCCHAR2: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multicount
    +            MCNT: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        reserved328: [4]u8,
    +        ///  OTG_FS host channel-2 interrupt register (OTG_FS_HCINT2)
    +        FS_HCINT2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            reserved7: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-2 mask register (OTG_FS_HCINTMSK2)
    +        FS_HCINTMSK2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-2 transfer size register
    +        FS_HCTSIZ2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        reserved352: [12]u8,
    +        ///  OTG_FS host channel-3 characteristics register (OTG_FS_HCCHAR3)
    +        FS_HCCHAR3: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multicount
    +            MCNT: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        reserved360: [4]u8,
    +        ///  OTG_FS host channel-3 interrupt register (OTG_FS_HCINT3)
    +        FS_HCINT3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            reserved7: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-3 mask register (OTG_FS_HCINTMSK3)
    +        FS_HCINTMSK3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-3 transfer size register
    +        FS_HCTSIZ3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        reserved384: [12]u8,
    +        ///  OTG_FS host channel-4 characteristics register (OTG_FS_HCCHAR4)
    +        FS_HCCHAR4: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multicount
    +            MCNT: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        reserved392: [4]u8,
    +        ///  OTG_FS host channel-4 interrupt register (OTG_FS_HCINT4)
    +        FS_HCINT4: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            reserved7: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-4 mask register (OTG_FS_HCINTMSK4)
    +        FS_HCINTMSK4: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-x transfer size register
    +        FS_HCTSIZ4: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        reserved416: [12]u8,
    +        ///  OTG_FS host channel-5 characteristics register (OTG_FS_HCCHAR5)
    +        FS_HCCHAR5: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multicount
    +            MCNT: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        reserved424: [4]u8,
    +        ///  OTG_FS host channel-5 interrupt register (OTG_FS_HCINT5)
    +        FS_HCINT5: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            reserved7: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-5 mask register (OTG_FS_HCINTMSK5)
    +        FS_HCINTMSK5: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-5 transfer size register
    +        FS_HCTSIZ5: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        reserved448: [12]u8,
    +        ///  OTG_FS host channel-6 characteristics register (OTG_FS_HCCHAR6)
    +        FS_HCCHAR6: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multicount
    +            MCNT: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        reserved456: [4]u8,
    +        ///  OTG_FS host channel-6 interrupt register (OTG_FS_HCINT6)
    +        FS_HCINT6: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            reserved7: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-6 mask register (OTG_FS_HCINTMSK6)
    +        FS_HCINTMSK6: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-6 transfer size register
    +        FS_HCTSIZ6: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        reserved480: [12]u8,
    +        ///  OTG_FS host channel-7 characteristics register (OTG_FS_HCCHAR7)
    +        FS_HCCHAR7: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multicount
    +            MCNT: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        reserved488: [4]u8,
    +        ///  OTG_FS host channel-7 interrupt register (OTG_FS_HCINT7)
    +        FS_HCINT7: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            reserved7: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-7 mask register (OTG_FS_HCINTMSK7)
    +        FS_HCINTMSK7: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-7 transfer size register
    +        FS_HCTSIZ7: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +    };
    +
    +    ///  Independent watchdog
    +    pub const IWDG = extern struct {
    +        ///  Key register
    +        KR: mmio.Mmio(packed struct(u32) {
    +            ///  Key value (write only, read 0000h)
    +            KEY: u16,
    +            padding: u16,
    +        }),
    +        ///  Prescaler register
    +        PR: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler divider
    +            PR: u3,
    +            padding: u29,
    +        }),
    +        ///  Reload register
    +        RLR: mmio.Mmio(packed struct(u32) {
    +            ///  Watchdog counter reload value
    +            RL: u12,
    +            padding: u20,
    +        }),
    +        ///  Status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Watchdog prescaler value update
    +            PVU: u1,
    +            ///  Watchdog counter reload value update
    +            RVU: u1,
    +            padding: u30,
    +        }),
    +    };
    +
    +    ///  Window watchdog
    +    pub const WWDG = extern struct {
    +        ///  Control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  7-bit counter (MSB to LSB)
    +            T: u7,
    +            ///  Activation bit
    +            WDGA: u1,
    +            padding: u24,
    +        }),
    +        ///  Configuration register
    +        CFR: mmio.Mmio(packed struct(u32) {
    +            ///  7-bit window value
    +            W: u7,
    +            ///  Timer base
    +            WDGTB0: u1,
    +            ///  Timer base
    +            WDGTB1: u1,
    +            ///  Early wakeup interrupt
    +            EWI: u1,
    +            padding: u22,
    +        }),
    +        ///  Status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Early wakeup interrupt flag
    +            EWIF: u1,
    +            padding: u31,
    +        }),
    +    };
    +
    +    ///  Real-time clock
    +    pub const RTC = extern struct {
    +        ///  time register
    +        TR: mmio.Mmio(packed struct(u32) {
    +            ///  Second units in BCD format
    +            SU: u4,
    +            ///  Second tens in BCD format
    +            ST: u3,
    +            reserved8: u1,
    +            ///  Minute units in BCD format
    +            MNU: u4,
    +            ///  Minute tens in BCD format
    +            MNT: u3,
    +            reserved16: u1,
    +            ///  Hour units in BCD format
    +            HU: u4,
    +            ///  Hour tens in BCD format
    +            HT: u2,
    +            ///  AM/PM notation
    +            PM: u1,
    +            padding: u9,
    +        }),
    +        ///  date register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  Date units in BCD format
    +            DU: u4,
    +            ///  Date tens in BCD format
    +            DT: u2,
    +            reserved8: u2,
    +            ///  Month units in BCD format
    +            MU: u4,
    +            ///  Month tens in BCD format
    +            MT: u1,
    +            ///  Week day units
    +            WDU: u3,
    +            ///  Year units in BCD format
    +            YU: u4,
    +            ///  Year tens in BCD format
    +            YT: u4,
    +            padding: u8,
    +        }),
    +        ///  control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  Wakeup clock selection
    +            WCKSEL: u3,
    +            ///  Time-stamp event active edge
    +            TSEDGE: u1,
    +            ///  Reference clock detection enable (50 or 60 Hz)
    +            REFCKON: u1,
    +            reserved6: u1,
    +            ///  Hour format
    +            FMT: u1,
    +            ///  Coarse digital calibration enable
    +            DCE: u1,
    +            ///  Alarm A enable
    +            ALRAE: u1,
    +            ///  Alarm B enable
    +            ALRBE: u1,
    +            ///  Wakeup timer enable
    +            WUTE: u1,
    +            ///  Time stamp enable
    +            TSE: u1,
    +            ///  Alarm A interrupt enable
    +            ALRAIE: u1,
    +            ///  Alarm B interrupt enable
    +            ALRBIE: u1,
    +            ///  Wakeup timer interrupt enable
    +            WUTIE: u1,
    +            ///  Time-stamp interrupt enable
    +            TSIE: u1,
    +            ///  Add 1 hour (summer time change)
    +            ADD1H: u1,
    +            ///  Subtract 1 hour (winter time change)
    +            SUB1H: u1,
    +            ///  Backup
    +            BKP: u1,
    +            reserved20: u1,
    +            ///  Output polarity
    +            POL: u1,
    +            ///  Output selection
    +            OSEL: u2,
    +            ///  Calibration output enable
    +            COE: u1,
    +            padding: u8,
    +        }),
    +        ///  initialization and status register
    +        ISR: mmio.Mmio(packed struct(u32) {
    +            ///  Alarm A write flag
    +            ALRAWF: u1,
    +            ///  Alarm B write flag
    +            ALRBWF: u1,
    +            ///  Wakeup timer write flag
    +            WUTWF: u1,
    +            ///  Shift operation pending
    +            SHPF: u1,
    +            ///  Initialization status flag
    +            INITS: u1,
    +            ///  Registers synchronization flag
    +            RSF: u1,
    +            ///  Initialization flag
    +            INITF: u1,
    +            ///  Initialization mode
    +            INIT: u1,
    +            ///  Alarm A flag
    +            ALRAF: u1,
    +            ///  Alarm B flag
    +            ALRBF: u1,
    +            ///  Wakeup timer flag
    +            WUTF: u1,
    +            ///  Time-stamp flag
    +            TSF: u1,
    +            ///  Time-stamp overflow flag
    +            TSOVF: u1,
    +            ///  Tamper detection flag
    +            TAMP1F: u1,
    +            ///  TAMPER2 detection flag
    +            TAMP2F: u1,
    +            reserved16: u1,
    +            ///  Recalibration pending Flag
    +            RECALPF: u1,
    +            padding: u15,
    +        }),
    +        ///  prescaler register
    +        PRER: mmio.Mmio(packed struct(u32) {
    +            ///  Synchronous prescaler factor
    +            PREDIV_S: u15,
    +            reserved16: u1,
    +            ///  Asynchronous prescaler factor
    +            PREDIV_A: u7,
    +            padding: u9,
    +        }),
    +        ///  wakeup timer register
    +        WUTR: mmio.Mmio(packed struct(u32) {
    +            ///  Wakeup auto-reload value bits
    +            WUT: u16,
    +            padding: u16,
    +        }),
    +        ///  calibration register
    +        CALIBR: mmio.Mmio(packed struct(u32) {
    +            ///  Digital calibration
    +            DC: u5,
    +            reserved7: u2,
    +            ///  Digital calibration sign
    +            DCS: u1,
    +            padding: u24,
    +        }),
    +        ///  alarm A register
    +        ALRMAR: mmio.Mmio(packed struct(u32) {
    +            ///  Second units in BCD format
    +            SU: u4,
    +            ///  Second tens in BCD format
    +            ST: u3,
    +            ///  Alarm A seconds mask
    +            MSK1: u1,
    +            ///  Minute units in BCD format
    +            MNU: u4,
    +            ///  Minute tens in BCD format
    +            MNT: u3,
    +            ///  Alarm A minutes mask
    +            MSK2: u1,
    +            ///  Hour units in BCD format
    +            HU: u4,
    +            ///  Hour tens in BCD format
    +            HT: u2,
    +            ///  AM/PM notation
    +            PM: u1,
    +            ///  Alarm A hours mask
    +            MSK3: u1,
    +            ///  Date units or day in BCD format
    +            DU: u4,
    +            ///  Date tens in BCD format
    +            DT: u2,
    +            ///  Week day selection
    +            WDSEL: u1,
    +            ///  Alarm A date mask
    +            MSK4: u1,
    +        }),
    +        ///  alarm B register
    +        ALRMBR: mmio.Mmio(packed struct(u32) {
    +            ///  Second units in BCD format
    +            SU: u4,
    +            ///  Second tens in BCD format
    +            ST: u3,
    +            ///  Alarm B seconds mask
    +            MSK1: u1,
    +            ///  Minute units in BCD format
    +            MNU: u4,
    +            ///  Minute tens in BCD format
    +            MNT: u3,
    +            ///  Alarm B minutes mask
    +            MSK2: u1,
    +            ///  Hour units in BCD format
    +            HU: u4,
    +            ///  Hour tens in BCD format
    +            HT: u2,
    +            ///  AM/PM notation
    +            PM: u1,
    +            ///  Alarm B hours mask
    +            MSK3: u1,
    +            ///  Date units or day in BCD format
    +            DU: u4,
    +            ///  Date tens in BCD format
    +            DT: u2,
    +            ///  Week day selection
    +            WDSEL: u1,
    +            ///  Alarm B date mask
    +            MSK4: u1,
    +        }),
    +        ///  write protection register
    +        WPR: mmio.Mmio(packed struct(u32) {
    +            ///  Write protection key
    +            KEY: u8,
    +            padding: u24,
    +        }),
    +        ///  sub second register
    +        SSR: mmio.Mmio(packed struct(u32) {
    +            ///  Sub second value
    +            SS: u16,
    +            padding: u16,
    +        }),
    +        ///  shift control register
    +        SHIFTR: mmio.Mmio(packed struct(u32) {
    +            ///  Subtract a fraction of a second
    +            SUBFS: u15,
    +            reserved31: u16,
    +            ///  Add one second
    +            ADD1S: u1,
    +        }),
    +        ///  time stamp time register
    +        TSTR: mmio.Mmio(packed struct(u32) {
    +            ///  Tamper 1 detection enable
    +            TAMP1E: u1,
    +            ///  Active level for tamper 1
    +            TAMP1TRG: u1,
    +            ///  Tamper interrupt enable
    +            TAMPIE: u1,
    +            reserved16: u13,
    +            ///  TAMPER1 mapping
    +            TAMP1INSEL: u1,
    +            ///  TIMESTAMP mapping
    +            TSINSEL: u1,
    +            ///  AFO_ALARM output type
    +            ALARMOUTTYPE: u1,
    +            padding: u13,
    +        }),
    +        ///  time stamp date register
    +        TSDR: mmio.Mmio(packed struct(u32) {
    +            ///  Date units in BCD format
    +            DU: u4,
    +            ///  Date tens in BCD format
    +            DT: u2,
    +            reserved8: u2,
    +            ///  Month units in BCD format
    +            MU: u4,
    +            ///  Month tens in BCD format
    +            MT: u1,
    +            ///  Week day units
    +            WDU: u3,
    +            padding: u16,
    +        }),
    +        ///  timestamp sub second register
    +        TSSSR: mmio.Mmio(packed struct(u32) {
    +            ///  Sub second value
    +            SS: u16,
    +            padding: u16,
    +        }),
    +        ///  calibration register
    +        CALR: mmio.Mmio(packed struct(u32) {
    +            ///  Calibration minus
    +            CALM: u9,
    +            reserved13: u4,
    +            ///  Use a 16-second calibration cycle period
    +            CALW16: u1,
    +            ///  Use an 8-second calibration cycle period
    +            CALW8: u1,
    +            ///  Increase frequency of RTC by 488.5 ppm
    +            CALP: u1,
    +            padding: u16,
    +        }),
    +        ///  tamper and alternate function configuration register
    +        TAFCR: mmio.Mmio(packed struct(u32) {
    +            ///  Tamper 1 detection enable
    +            TAMP1E: u1,
    +            ///  Active level for tamper 1
    +            TAMP1TRG: u1,
    +            ///  Tamper interrupt enable
    +            TAMPIE: u1,
    +            ///  Tamper 2 detection enable
    +            TAMP2E: u1,
    +            ///  Active level for tamper 2
    +            TAMP2TRG: u1,
    +            reserved7: u2,
    +            ///  Activate timestamp on tamper detection event
    +            TAMPTS: u1,
    +            ///  Tamper sampling frequency
    +            TAMPFREQ: u3,
    +            ///  Tamper filter count
    +            TAMPFLT: u2,
    +            ///  Tamper precharge duration
    +            TAMPPRCH: u2,
    +            ///  TAMPER pull-up disable
    +            TAMPPUDIS: u1,
    +            ///  TAMPER1 mapping
    +            TAMP1INSEL: u1,
    +            ///  TIMESTAMP mapping
    +            TSINSEL: u1,
    +            ///  AFO_ALARM output type
    +            ALARMOUTTYPE: u1,
    +            padding: u13,
    +        }),
    +        ///  alarm A sub second register
    +        ALRMASSR: mmio.Mmio(packed struct(u32) {
    +            ///  Sub seconds value
    +            SS: u15,
    +            reserved24: u9,
    +            ///  Mask the most-significant bits starting at this bit
    +            MASKSS: u4,
    +            padding: u4,
    +        }),
    +        ///  alarm B sub second register
    +        ALRMBSSR: mmio.Mmio(packed struct(u32) {
    +            ///  Sub seconds value
    +            SS: u15,
    +            reserved24: u9,
    +            ///  Mask the most-significant bits starting at this bit
    +            MASKSS: u4,
    +            padding: u4,
    +        }),
    +        reserved80: [4]u8,
    +        ///  backup register
    +        BKP0R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP1R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP2R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP3R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP4R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP5R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP6R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP7R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP8R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP9R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP10R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP11R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP12R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP13R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP14R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP15R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP16R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP17R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP18R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP19R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +    };
    +
    +    ///  Universal synchronous asynchronous receiver transmitter
    +    pub const UART4 = extern struct {
    +        ///  Status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Parity error
    +            PE: u1,
    +            ///  Framing error
    +            FE: u1,
    +            ///  Noise detected flag
    +            NF: u1,
    +            ///  Overrun error
    +            ORE: u1,
    +            ///  IDLE line detected
    +            IDLE: u1,
    +            ///  Read data register not empty
    +            RXNE: u1,
    +            ///  Transmission complete
    +            TC: u1,
    +            ///  Transmit data register empty
    +            TXE: u1,
    +            ///  LIN break detection flag
    +            LBD: u1,
    +            padding: u23,
    +        }),
    +        ///  Data register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  Data value
    +            DR: u9,
    +            padding: u23,
    +        }),
    +        ///  Baud rate register
    +        BRR: mmio.Mmio(packed struct(u32) {
    +            ///  fraction of USARTDIV
    +            DIV_Fraction: u4,
    +            ///  mantissa of USARTDIV
    +            DIV_Mantissa: u12,
    +            padding: u16,
    +        }),
    +        ///  Control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Send break
    +            SBK: u1,
    +            ///  Receiver wakeup
    +            RWU: u1,
    +            ///  Receiver enable
    +            RE: u1,
    +            ///  Transmitter enable
    +            TE: u1,
    +            ///  IDLE interrupt enable
    +            IDLEIE: u1,
    +            ///  RXNE interrupt enable
    +            RXNEIE: u1,
    +            ///  Transmission complete interrupt enable
    +            TCIE: u1,
    +            ///  TXE interrupt enable
    +            TXEIE: u1,
    +            ///  PE interrupt enable
    +            PEIE: u1,
    +            ///  Parity selection
    +            PS: u1,
    +            ///  Parity control enable
    +            PCE: u1,
    +            ///  Wakeup method
    +            WAKE: u1,
    +            ///  Word length
    +            M: u1,
    +            ///  USART enable
    +            UE: u1,
    +            reserved15: u1,
    +            ///  Oversampling mode
    +            OVER8: u1,
    +            padding: u16,
    +        }),
    +        ///  Control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            ///  Address of the USART node
    +            ADD: u4,
    +            reserved5: u1,
    +            ///  lin break detection length
    +            LBDL: u1,
    +            ///  LIN break detection interrupt enable
    +            LBDIE: u1,
    +            reserved12: u5,
    +            ///  STOP bits
    +            STOP: u2,
    +            ///  LIN mode enable
    +            LINEN: u1,
    +            padding: u17,
    +        }),
    +        ///  Control register 3
    +        CR3: mmio.Mmio(packed struct(u32) {
    +            ///  Error interrupt enable
    +            EIE: u1,
    +            ///  IrDA mode enable
    +            IREN: u1,
    +            ///  IrDA low-power
    +            IRLP: u1,
    +            ///  Half-duplex selection
    +            HDSEL: u1,
    +            reserved6: u2,
    +            ///  DMA enable receiver
    +            DMAR: u1,
    +            ///  DMA enable transmitter
    +            DMAT: u1,
    +            reserved11: u3,
    +            ///  One sample bit method enable
    +            ONEBIT: u1,
    +            padding: u20,
    +        }),
    +    };
    +
    +    ///  USB on the go full speed
    +    pub const OTG_FS_GLOBAL = extern struct {
    +        ///  OTG_FS control and status register (OTG_FS_GOTGCTL)
    +        FS_GOTGCTL: mmio.Mmio(packed struct(u32) {
    +            ///  Session request success
    +            SRQSCS: u1,
    +            ///  Session request
    +            SRQ: u1,
    +            reserved8: u6,
    +            ///  Host negotiation success
    +            HNGSCS: u1,
    +            ///  HNP request
    +            HNPRQ: u1,
    +            ///  Host set HNP enable
    +            HSHNPEN: u1,
    +            ///  Device HNP enabled
    +            DHNPEN: u1,
    +            reserved16: u4,
    +            ///  Connector ID status
    +            CIDSTS: u1,
    +            ///  Long/short debounce time
    +            DBCT: u1,
    +            ///  A-session valid
    +            ASVLD: u1,
    +            ///  B-session valid
    +            BSVLD: u1,
    +            padding: u12,
    +        }),
    +        ///  OTG_FS interrupt register (OTG_FS_GOTGINT)
    +        FS_GOTGINT: mmio.Mmio(packed struct(u32) {
    +            reserved2: u2,
    +            ///  Session end detected
    +            SEDET: u1,
    +            reserved8: u5,
    +            ///  Session request success status change
    +            SRSSCHG: u1,
    +            ///  Host negotiation success status change
    +            HNSSCHG: u1,
    +            reserved17: u7,
    +            ///  Host negotiation detected
    +            HNGDET: u1,
    +            ///  A-device timeout change
    +            ADTOCHG: u1,
    +            ///  Debounce done
    +            DBCDNE: u1,
    +            padding: u12,
    +        }),
    +        ///  OTG_FS AHB configuration register (OTG_FS_GAHBCFG)
    +        FS_GAHBCFG: mmio.Mmio(packed struct(u32) {
    +            ///  Global interrupt mask
    +            GINT: u1,
    +            reserved7: u6,
    +            ///  TxFIFO empty level
    +            TXFELVL: u1,
    +            ///  Periodic TxFIFO empty level
    +            PTXFELVL: u1,
    +            padding: u23,
    +        }),
    +        ///  OTG_FS USB configuration register (OTG_FS_GUSBCFG)
    +        FS_GUSBCFG: mmio.Mmio(packed struct(u32) {
    +            ///  FS timeout calibration
    +            TOCAL: u3,
    +            reserved6: u3,
    +            ///  Full Speed serial transceiver select
    +            PHYSEL: u1,
    +            reserved8: u1,
    +            ///  SRP-capable
    +            SRPCAP: u1,
    +            ///  HNP-capable
    +            HNPCAP: u1,
    +            ///  USB turnaround time
    +            TRDT: u4,
    +            reserved29: u15,
    +            ///  Force host mode
    +            FHMOD: u1,
    +            ///  Force device mode
    +            FDMOD: u1,
    +            ///  Corrupt Tx packet
    +            CTXPKT: u1,
    +        }),
    +        ///  OTG_FS reset register (OTG_FS_GRSTCTL)
    +        FS_GRSTCTL: mmio.Mmio(packed struct(u32) {
    +            ///  Core soft reset
    +            CSRST: u1,
    +            ///  HCLK soft reset
    +            HSRST: u1,
    +            ///  Host frame counter reset
    +            FCRST: u1,
    +            reserved4: u1,
    +            ///  RxFIFO flush
    +            RXFFLSH: u1,
    +            ///  TxFIFO flush
    +            TXFFLSH: u1,
    +            ///  TxFIFO number
    +            TXFNUM: u5,
    +            reserved31: u20,
    +            ///  AHB master idle
    +            AHBIDL: u1,
    +        }),
    +        ///  OTG_FS core interrupt register (OTG_FS_GINTSTS)
    +        FS_GINTSTS: mmio.Mmio(packed struct(u32) {
    +            ///  Current mode of operation
    +            CMOD: u1,
    +            ///  Mode mismatch interrupt
    +            MMIS: u1,
    +            ///  OTG interrupt
    +            OTGINT: u1,
    +            ///  Start of frame
    +            SOF: u1,
    +            ///  RxFIFO non-empty
    +            RXFLVL: u1,
    +            ///  Non-periodic TxFIFO empty
    +            NPTXFE: u1,
    +            ///  Global IN non-periodic NAK effective
    +            GINAKEFF: u1,
    +            ///  Global OUT NAK effective
    +            GOUTNAKEFF: u1,
    +            reserved10: u2,
    +            ///  Early suspend
    +            ESUSP: u1,
    +            ///  USB suspend
    +            USBSUSP: u1,
    +            ///  USB reset
    +            USBRST: u1,
    +            ///  Enumeration done
    +            ENUMDNE: u1,
    +            ///  Isochronous OUT packet dropped interrupt
    +            ISOODRP: u1,
    +            ///  End of periodic frame interrupt
    +            EOPF: u1,
    +            reserved18: u2,
    +            ///  IN endpoint interrupt
    +            IEPINT: u1,
    +            ///  OUT endpoint interrupt
    +            OEPINT: u1,
    +            ///  Incomplete isochronous IN transfer
    +            IISOIXFR: u1,
    +            ///  Incomplete periodic transfer(Host mode)/Incomplete isochronous OUT transfer(Device mode)
    +            IPXFR_INCOMPISOOUT: u1,
    +            reserved24: u2,
    +            ///  Host port interrupt
    +            HPRTINT: u1,
    +            ///  Host channels interrupt
    +            HCINT: u1,
    +            ///  Periodic TxFIFO empty
    +            PTXFE: u1,
    +            reserved28: u1,
    +            ///  Connector ID status change
    +            CIDSCHG: u1,
    +            ///  Disconnect detected interrupt
    +            DISCINT: u1,
    +            ///  Session request/new session detected interrupt
    +            SRQINT: u1,
    +            ///  Resume/remote wakeup detected interrupt
    +            WKUPINT: u1,
    +        }),
    +        ///  OTG_FS interrupt mask register (OTG_FS_GINTMSK)
    +        FS_GINTMSK: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  Mode mismatch interrupt mask
    +            MMISM: u1,
    +            ///  OTG interrupt mask
    +            OTGINT: u1,
    +            ///  Start of frame mask
    +            SOFM: u1,
    +            ///  Receive FIFO non-empty mask
    +            RXFLVLM: u1,
    +            ///  Non-periodic TxFIFO empty mask
    +            NPTXFEM: u1,
    +            ///  Global non-periodic IN NAK effective mask
    +            GINAKEFFM: u1,
    +            ///  Global OUT NAK effective mask
    +            GONAKEFFM: u1,
    +            reserved10: u2,
    +            ///  Early suspend mask
    +            ESUSPM: u1,
    +            ///  USB suspend mask
    +            USBSUSPM: u1,
    +            ///  USB reset mask
    +            USBRST: u1,
    +            ///  Enumeration done mask
    +            ENUMDNEM: u1,
    +            ///  Isochronous OUT packet dropped interrupt mask
    +            ISOODRPM: u1,
    +            ///  End of periodic frame interrupt mask
    +            EOPFM: u1,
    +            reserved17: u1,
    +            ///  Endpoint mismatch interrupt mask
    +            EPMISM: u1,
    +            ///  IN endpoints interrupt mask
    +            IEPINT: u1,
    +            ///  OUT endpoints interrupt mask
    +            OEPINT: u1,
    +            ///  Incomplete isochronous IN transfer mask
    +            IISOIXFRM: u1,
    +            ///  Incomplete periodic transfer mask(Host mode)/Incomplete isochronous OUT transfer mask(Device mode)
    +            IPXFRM_IISOOXFRM: u1,
    +            reserved24: u2,
    +            ///  Host port interrupt mask
    +            PRTIM: u1,
    +            ///  Host channels interrupt mask
    +            HCIM: u1,
    +            ///  Periodic TxFIFO empty mask
    +            PTXFEM: u1,
    +            reserved28: u1,
    +            ///  Connector ID status change mask
    +            CIDSCHGM: u1,
    +            ///  Disconnect detected interrupt mask
    +            DISCINT: u1,
    +            ///  Session request/new session detected interrupt mask
    +            SRQIM: u1,
    +            ///  Resume/remote wakeup detected interrupt mask
    +            WUIM: u1,
    +        }),
    +        ///  OTG_FS Receive status debug read(Device mode)
    +        FS_GRXSTSR_Device: mmio.Mmio(packed struct(u32) {
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Byte count
    +            BCNT: u11,
    +            ///  Data PID
    +            DPID: u2,
    +            ///  Packet status
    +            PKTSTS: u4,
    +            ///  Frame number
    +            FRMNUM: u4,
    +            padding: u7,
    +        }),
    +        reserved36: [4]u8,
    +        ///  OTG_FS Receive FIFO size register (OTG_FS_GRXFSIZ)
    +        FS_GRXFSIZ: mmio.Mmio(packed struct(u32) {
    +            ///  RxFIFO depth
    +            RXFD: u16,
    +            padding: u16,
    +        }),
    +        ///  OTG_FS non-periodic transmit FIFO size register (Device mode)
    +        FS_GNPTXFSIZ_Device: mmio.Mmio(packed struct(u32) {
    +            ///  Endpoint 0 transmit RAM start address
    +            TX0FSA: u16,
    +            ///  Endpoint 0 TxFIFO depth
    +            TX0FD: u16,
    +        }),
    +        ///  OTG_FS non-periodic transmit FIFO/queue status register (OTG_FS_GNPTXSTS)
    +        FS_GNPTXSTS: mmio.Mmio(packed struct(u32) {
    +            ///  Non-periodic TxFIFO space available
    +            NPTXFSAV: u16,
    +            ///  Non-periodic transmit request queue space available
    +            NPTQXSAV: u8,
    +            ///  Top of the non-periodic transmit request queue
    +            NPTXQTOP: u7,
    +            padding: u1,
    +        }),
    +        reserved56: [8]u8,
    +        ///  OTG_FS general core configuration register (OTG_FS_GCCFG)
    +        FS_GCCFG: mmio.Mmio(packed struct(u32) {
    +            reserved16: u16,
    +            ///  Power down
    +            PWRDWN: u1,
    +            reserved18: u1,
    +            ///  Enable the VBUS sensing device
    +            VBUSASEN: u1,
    +            ///  Enable the VBUS sensing device
    +            VBUSBSEN: u1,
    +            ///  SOF output enable
    +            SOFOUTEN: u1,
    +            padding: u11,
    +        }),
    +        ///  core ID register
    +        FS_CID: mmio.Mmio(packed struct(u32) {
    +            ///  Product ID field
    +            PRODUCT_ID: u32,
    +        }),
    +        reserved256: [192]u8,
    +        ///  OTG_FS Host periodic transmit FIFO size register (OTG_FS_HPTXFSIZ)
    +        FS_HPTXFSIZ: mmio.Mmio(packed struct(u32) {
    +            ///  Host periodic TxFIFO start address
    +            PTXSA: u16,
    +            ///  Host periodic TxFIFO depth
    +            PTXFSIZ: u16,
    +        }),
    +        ///  OTG_FS device IN endpoint transmit FIFO size register (OTG_FS_DIEPTXF2)
    +        FS_DIEPTXF1: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint FIFO2 transmit RAM start address
    +            INEPTXSA: u16,
    +            ///  IN endpoint TxFIFO depth
    +            INEPTXFD: u16,
    +        }),
    +        ///  OTG_FS device IN endpoint transmit FIFO size register (OTG_FS_DIEPTXF3)
    +        FS_DIEPTXF2: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint FIFO3 transmit RAM start address
    +            INEPTXSA: u16,
    +            ///  IN endpoint TxFIFO depth
    +            INEPTXFD: u16,
    +        }),
    +        ///  OTG_FS device IN endpoint transmit FIFO size register (OTG_FS_DIEPTXF4)
    +        FS_DIEPTXF3: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint FIFO4 transmit RAM start address
    +            INEPTXSA: u16,
    +            ///  IN endpoint TxFIFO depth
    +            INEPTXFD: u16,
    +        }),
    +    };
    +
    +    ///  Cryptographic processor
    +    pub const CRC = extern struct {
    +        ///  Data register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  Data Register
    +            DR: u32,
    +        }),
    +        ///  Independent Data register
    +        IDR: mmio.Mmio(packed struct(u32) {
    +            ///  Independent Data register
    +            IDR: u8,
    +            padding: u24,
    +        }),
    +        ///  Control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  Control regidter
    +            CR: u1,
    +            padding: u31,
    +        }),
    +    };
    +
    +    ///  Ethernet: DMA controller operation
    +    pub const Ethernet_DMA = extern struct {
    +        ///  Ethernet DMA bus mode register
    +        DMABMR: mmio.Mmio(packed struct(u32) {
    +            ///  SR
    +            SR: u1,
    +            ///  DA
    +            DA: u1,
    +            ///  DSL
    +            DSL: u5,
    +            ///  EDFE
    +            EDFE: u1,
    +            ///  PBL
    +            PBL: u6,
    +            ///  RTPR
    +            RTPR: u2,
    +            ///  FB
    +            FB: u1,
    +            ///  RDP
    +            RDP: u6,
    +            ///  USP
    +            USP: u1,
    +            ///  FPM
    +            FPM: u1,
    +            ///  AAB
    +            AAB: u1,
    +            ///  MB
    +            MB: u1,
    +            padding: u5,
    +        }),
    +        ///  Ethernet DMA transmit poll demand register
    +        DMATPDR: mmio.Mmio(packed struct(u32) {
    +            ///  TPD
    +            TPD: u32,
    +        }),
    +        ///  EHERNET DMA receive poll demand register
    +        DMARPDR: mmio.Mmio(packed struct(u32) {
    +            ///  RPD
    +            RPD: u32,
    +        }),
    +        ///  Ethernet DMA receive descriptor list address register
    +        DMARDLAR: mmio.Mmio(packed struct(u32) {
    +            ///  SRL
    +            SRL: u32,
    +        }),
    +        ///  Ethernet DMA transmit descriptor list address register
    +        DMATDLAR: mmio.Mmio(packed struct(u32) {
    +            ///  STL
    +            STL: u32,
    +        }),
    +        ///  Ethernet DMA status register
    +        DMASR: mmio.Mmio(packed struct(u32) {
    +            ///  TS
    +            TS: u1,
    +            ///  TPSS
    +            TPSS: u1,
    +            ///  TBUS
    +            TBUS: u1,
    +            ///  TJTS
    +            TJTS: u1,
    +            ///  ROS
    +            ROS: u1,
    +            ///  TUS
    +            TUS: u1,
    +            ///  RS
    +            RS: u1,
    +            ///  RBUS
    +            RBUS: u1,
    +            ///  RPSS
    +            RPSS: u1,
    +            ///  PWTS
    +            PWTS: u1,
    +            ///  ETS
    +            ETS: u1,
    +            reserved13: u2,
    +            ///  FBES
    +            FBES: u1,
    +            ///  ERS
    +            ERS: u1,
    +            ///  AIS
    +            AIS: u1,
    +            ///  NIS
    +            NIS: u1,
    +            ///  RPS
    +            RPS: u3,
    +            ///  TPS
    +            TPS: u3,
    +            ///  EBS
    +            EBS: u3,
    +            reserved27: u1,
    +            ///  MMCS
    +            MMCS: u1,
    +            ///  PMTS
    +            PMTS: u1,
    +            ///  TSTS
    +            TSTS: u1,
    +            padding: u2,
    +        }),
    +        ///  Ethernet DMA operation mode register
    +        DMAOMR: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  SR
    +            SR: u1,
    +            ///  OSF
    +            OSF: u1,
    +            ///  RTC
    +            RTC: u2,
    +            reserved6: u1,
    +            ///  FUGF
    +            FUGF: u1,
    +            ///  FEF
    +            FEF: u1,
    +            reserved13: u5,
    +            ///  ST
    +            ST: u1,
    +            ///  TTC
    +            TTC: u3,
    +            reserved20: u3,
    +            ///  FTF
    +            FTF: u1,
    +            ///  TSF
    +            TSF: u1,
    +            reserved24: u2,
    +            ///  DFRF
    +            DFRF: u1,
    +            ///  RSF
    +            RSF: u1,
    +            ///  DTCEFD
    +            DTCEFD: u1,
    +            padding: u5,
    +        }),
    +        ///  Ethernet DMA interrupt enable register
    +        DMAIER: mmio.Mmio(packed struct(u32) {
    +            ///  TIE
    +            TIE: u1,
    +            ///  TPSIE
    +            TPSIE: u1,
    +            ///  TBUIE
    +            TBUIE: u1,
    +            ///  TJTIE
    +            TJTIE: u1,
    +            ///  ROIE
    +            ROIE: u1,
    +            ///  TUIE
    +            TUIE: u1,
    +            ///  RIE
    +            RIE: u1,
    +            ///  RBUIE
    +            RBUIE: u1,
    +            ///  RPSIE
    +            RPSIE: u1,
    +            ///  RWTIE
    +            RWTIE: u1,
    +            ///  ETIE
    +            ETIE: u1,
    +            reserved13: u2,
    +            ///  FBEIE
    +            FBEIE: u1,
    +            ///  ERIE
    +            ERIE: u1,
    +            ///  AISE
    +            AISE: u1,
    +            ///  NISE
    +            NISE: u1,
    +            padding: u15,
    +        }),
    +        ///  Ethernet DMA missed frame and buffer overflow counter register
    +        DMAMFBOCR: mmio.Mmio(packed struct(u32) {
    +            ///  MFC
    +            MFC: u16,
    +            ///  OMFC
    +            OMFC: u1,
    +            ///  MFA
    +            MFA: u11,
    +            ///  OFOC
    +            OFOC: u1,
    +            padding: u3,
    +        }),
    +        ///  Ethernet DMA receive status watchdog timer register
    +        DMARSWTR: mmio.Mmio(packed struct(u32) {
    +            ///  RSWTC
    +            RSWTC: u8,
    +            padding: u24,
    +        }),
    +        reserved72: [32]u8,
    +        ///  Ethernet DMA current host transmit descriptor register
    +        DMACHTDR: mmio.Mmio(packed struct(u32) {
    +            ///  HTDAP
    +            HTDAP: u32,
    +        }),
    +        ///  Ethernet DMA current host receive descriptor register
    +        DMACHRDR: mmio.Mmio(packed struct(u32) {
    +            ///  HRDAP
    +            HRDAP: u32,
    +        }),
    +        ///  Ethernet DMA current host transmit buffer address register
    +        DMACHTBAR: mmio.Mmio(packed struct(u32) {
    +            ///  HTBAP
    +            HTBAP: u32,
    +        }),
    +        ///  Ethernet DMA current host receive buffer address register
    +        DMACHRBAR: mmio.Mmio(packed struct(u32) {
    +            ///  HRBAP
    +            HRBAP: u32,
    +        }),
    +    };
    +
    +    ///  Common ADC registers
    +    pub const C_ADC = extern struct {
    +        ///  ADC Common status register
    +        CSR: mmio.Mmio(packed struct(u32) {
    +            ///  Analog watchdog flag of ADC 1
    +            AWD1: u1,
    +            ///  End of conversion of ADC 1
    +            EOC1: u1,
    +            ///  Injected channel end of conversion of ADC 1
    +            JEOC1: u1,
    +            ///  Injected channel Start flag of ADC 1
    +            JSTRT1: u1,
    +            ///  Regular channel Start flag of ADC 1
    +            STRT1: u1,
    +            ///  Overrun flag of ADC 1
    +            OVR1: u1,
    +            reserved8: u2,
    +            ///  Analog watchdog flag of ADC 2
    +            AWD2: u1,
    +            ///  End of conversion of ADC 2
    +            EOC2: u1,
    +            ///  Injected channel end of conversion of ADC 2
    +            JEOC2: u1,
    +            ///  Injected channel Start flag of ADC 2
    +            JSTRT2: u1,
    +            ///  Regular channel Start flag of ADC 2
    +            STRT2: u1,
    +            ///  Overrun flag of ADC 2
    +            OVR2: u1,
    +            reserved16: u2,
    +            ///  Analog watchdog flag of ADC 3
    +            AWD3: u1,
    +            ///  End of conversion of ADC 3
    +            EOC3: u1,
    +            ///  Injected channel end of conversion of ADC 3
    +            JEOC3: u1,
    +            ///  Injected channel Start flag of ADC 3
    +            JSTRT3: u1,
    +            ///  Regular channel Start flag of ADC 3
    +            STRT3: u1,
    +            ///  Overrun flag of ADC3
    +            OVR3: u1,
    +            padding: u10,
    +        }),
    +        ///  ADC common control register
    +        CCR: mmio.Mmio(packed struct(u32) {
    +            ///  Multi ADC mode selection
    +            MULT: u5,
    +            reserved8: u3,
    +            ///  Delay between 2 sampling phases
    +            DELAY: u4,
    +            reserved13: u1,
    +            ///  DMA disable selection for multi-ADC mode
    +            DDS: u1,
    +            ///  Direct memory access mode for multi ADC mode
    +            DMA: u2,
    +            ///  ADC prescaler
    +            ADCPRE: u2,
    +            reserved22: u4,
    +            ///  VBAT enable
    +            VBATE: u1,
    +            ///  Temperature sensor and VREFINT enable
    +            TSVREFE: u1,
    +            padding: u8,
    +        }),
    +        ///  ADC common regular data register for dual and triple modes
    +        CDR: mmio.Mmio(packed struct(u32) {
    +            ///  1st data item of a pair of regular conversions
    +            DATA1: u16,
    +            ///  2nd data item of a pair of regular conversions
    +            DATA2: u16,
    +        }),
    +    };
    +
    +    ///  Advanced-timers
    +    pub const TIM1 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            ///  One-pulse mode
    +            OPM: u1,
    +            ///  Direction
    +            DIR: u1,
    +            ///  Center-aligned mode selection
    +            CMS: u2,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            ///  Clock division
    +            CKD: u2,
    +            padding: u22,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/compare preloaded control
    +            CCPC: u1,
    +            reserved2: u1,
    +            ///  Capture/compare control update selection
    +            CCUS: u1,
    +            ///  Capture/compare DMA selection
    +            CCDS: u1,
    +            ///  Master mode selection
    +            MMS: u3,
    +            ///  TI1 selection
    +            TI1S: u1,
    +            ///  Output Idle state 1
    +            OIS1: u1,
    +            ///  Output Idle state 1
    +            OIS1N: u1,
    +            ///  Output Idle state 2
    +            OIS2: u1,
    +            ///  Output Idle state 2
    +            OIS2N: u1,
    +            ///  Output Idle state 3
    +            OIS3: u1,
    +            ///  Output Idle state 3
    +            OIS3N: u1,
    +            ///  Output Idle state 4
    +            OIS4: u1,
    +            padding: u17,
    +        }),
    +        ///  slave mode control register
    +        SMCR: mmio.Mmio(packed struct(u32) {
    +            ///  Slave mode selection
    +            SMS: u3,
    +            reserved4: u1,
    +            ///  Trigger selection
    +            TS: u3,
    +            ///  Master/Slave mode
    +            MSM: u1,
    +            ///  External trigger filter
    +            ETF: u4,
    +            ///  External trigger prescaler
    +            ETPS: u2,
    +            ///  External clock enable
    +            ECE: u1,
    +            ///  External trigger polarity
    +            ETP: u1,
    +            padding: u16,
    +        }),
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            ///  Capture/Compare 1 interrupt enable
    +            CC1IE: u1,
    +            ///  Capture/Compare 2 interrupt enable
    +            CC2IE: u1,
    +            ///  Capture/Compare 3 interrupt enable
    +            CC3IE: u1,
    +            ///  Capture/Compare 4 interrupt enable
    +            CC4IE: u1,
    +            ///  COM interrupt enable
    +            COMIE: u1,
    +            ///  Trigger interrupt enable
    +            TIE: u1,
    +            ///  Break interrupt enable
    +            BIE: u1,
    +            ///  Update DMA request enable
    +            UDE: u1,
    +            ///  Capture/Compare 1 DMA request enable
    +            CC1DE: u1,
    +            ///  Capture/Compare 2 DMA request enable
    +            CC2DE: u1,
    +            ///  Capture/Compare 3 DMA request enable
    +            CC3DE: u1,
    +            ///  Capture/Compare 4 DMA request enable
    +            CC4DE: u1,
    +            ///  COM DMA request enable
    +            COMDE: u1,
    +            ///  Trigger DMA request enable
    +            TDE: u1,
    +            padding: u17,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            ///  Capture/compare 1 interrupt flag
    +            CC1IF: u1,
    +            ///  Capture/Compare 2 interrupt flag
    +            CC2IF: u1,
    +            ///  Capture/Compare 3 interrupt flag
    +            CC3IF: u1,
    +            ///  Capture/Compare 4 interrupt flag
    +            CC4IF: u1,
    +            ///  COM interrupt flag
    +            COMIF: u1,
    +            ///  Trigger interrupt flag
    +            TIF: u1,
    +            ///  Break interrupt flag
    +            BIF: u1,
    +            reserved9: u1,
    +            ///  Capture/Compare 1 overcapture flag
    +            CC1OF: u1,
    +            ///  Capture/compare 2 overcapture flag
    +            CC2OF: u1,
    +            ///  Capture/Compare 3 overcapture flag
    +            CC3OF: u1,
    +            ///  Capture/Compare 4 overcapture flag
    +            CC4OF: u1,
    +            padding: u19,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            ///  Capture/compare 1 generation
    +            CC1G: u1,
    +            ///  Capture/compare 2 generation
    +            CC2G: u1,
    +            ///  Capture/compare 3 generation
    +            CC3G: u1,
    +            ///  Capture/compare 4 generation
    +            CC4G: u1,
    +            ///  Capture/Compare control update generation
    +            COMG: u1,
    +            ///  Trigger generation
    +            TG: u1,
    +            ///  Break generation
    +            BG: u1,
    +            padding: u24,
    +        }),
    +        ///  capture/compare mode register 1 (output mode)
    +        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 selection
    +            CC1S: u2,
    +            ///  Output Compare 1 fast enable
    +            OC1FE: u1,
    +            ///  Output Compare 1 preload enable
    +            OC1PE: u1,
    +            ///  Output Compare 1 mode
    +            OC1M: u3,
    +            ///  Output Compare 1 clear enable
    +            OC1CE: u1,
    +            ///  Capture/Compare 2 selection
    +            CC2S: u2,
    +            ///  Output Compare 2 fast enable
    +            OC2FE: u1,
    +            ///  Output Compare 2 preload enable
    +            OC2PE: u1,
    +            ///  Output Compare 2 mode
    +            OC2M: u3,
    +            ///  Output Compare 2 clear enable
    +            OC2CE: u1,
    +            padding: u16,
    +        }),
    +        ///  capture/compare mode register 2 (output mode)
    +        CCMR2_Output: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 3 selection
    +            CC3S: u2,
    +            ///  Output compare 3 fast enable
    +            OC3FE: u1,
    +            ///  Output compare 3 preload enable
    +            OC3PE: u1,
    +            ///  Output compare 3 mode
    +            OC3M: u3,
    +            ///  Output compare 3 clear enable
    +            OC3CE: u1,
    +            ///  Capture/Compare 4 selection
    +            CC4S: u2,
    +            ///  Output compare 4 fast enable
    +            OC4FE: u1,
    +            ///  Output compare 4 preload enable
    +            OC4PE: u1,
    +            ///  Output compare 4 mode
    +            OC4M: u3,
    +            ///  Output compare 4 clear enable
    +            OC4CE: u1,
    +            padding: u16,
    +        }),
    +        ///  capture/compare enable register
    +        CCER: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 output enable
    +            CC1E: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1P: u1,
    +            ///  Capture/Compare 1 complementary output enable
    +            CC1NE: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1NP: u1,
    +            ///  Capture/Compare 2 output enable
    +            CC2E: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2P: u1,
    +            ///  Capture/Compare 2 complementary output enable
    +            CC2NE: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2NP: u1,
    +            ///  Capture/Compare 3 output enable
    +            CC3E: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC3P: u1,
    +            ///  Capture/Compare 3 complementary output enable
    +            CC3NE: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC3NP: u1,
    +            ///  Capture/Compare 4 output enable
    +            CC4E: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC4P: u1,
    +            padding: u18,
    +        }),
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  counter value
    +            CNT: u16,
    +            padding: u16,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Auto-reload value
    +            ARR: u16,
    +            padding: u16,
    +        }),
    +        ///  repetition counter register
    +        RCR: mmio.Mmio(packed struct(u32) {
    +            ///  Repetition counter value
    +            REP: u8,
    +            padding: u24,
    +        }),
    +        ///  capture/compare register 1
    +        CCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 value
    +            CCR1: u16,
    +            padding: u16,
    +        }),
    +        ///  capture/compare register 2
    +        CCR2: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 2 value
    +            CCR2: u16,
    +            padding: u16,
    +        }),
    +        ///  capture/compare register 3
    +        CCR3: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare value
    +            CCR3: u16,
    +            padding: u16,
    +        }),
    +        ///  capture/compare register 4
    +        CCR4: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare value
    +            CCR4: u16,
    +            padding: u16,
    +        }),
    +        ///  break and dead-time register
    +        BDTR: mmio.Mmio(packed struct(u32) {
    +            ///  Dead-time generator setup
    +            DTG: u8,
    +            ///  Lock configuration
    +            LOCK: u2,
    +            ///  Off-state selection for Idle mode
    +            OSSI: u1,
    +            ///  Off-state selection for Run mode
    +            OSSR: u1,
    +            ///  Break enable
    +            BKE: u1,
    +            ///  Break polarity
    +            BKP: u1,
    +            ///  Automatic output enable
    +            AOE: u1,
    +            ///  Main output enable
    +            MOE: u1,
    +            padding: u16,
    +        }),
    +        ///  DMA control register
    +        DCR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA base address
    +            DBA: u5,
    +            reserved8: u3,
    +            ///  DMA burst length
    +            DBL: u5,
    +            padding: u19,
    +        }),
    +        ///  DMA address for full transfer
    +        DMAR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA register for burst accesses
    +            DMAB: u16,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  Ethernet: Precision time protocol
    +    pub const Ethernet_PTP = extern struct {
    +        ///  Ethernet PTP time stamp control register
    +        PTPTSCR: mmio.Mmio(packed struct(u32) {
    +            ///  TSE
    +            TSE: u1,
    +            ///  TSFCU
    +            TSFCU: u1,
    +            ///  TSSTI
    +            TSSTI: u1,
    +            ///  TSSTU
    +            TSSTU: u1,
    +            ///  TSITE
    +            TSITE: u1,
    +            ///  TTSARU
    +            TTSARU: u1,
    +            reserved8: u2,
    +            ///  TSSARFE
    +            TSSARFE: u1,
    +            ///  TSSSR
    +            TSSSR: u1,
    +            ///  TSPTPPSV2E
    +            TSPTPPSV2E: u1,
    +            ///  TSSPTPOEFE
    +            TSSPTPOEFE: u1,
    +            ///  TSSIPV6FE
    +            TSSIPV6FE: u1,
    +            ///  TSSIPV4FE
    +            TSSIPV4FE: u1,
    +            ///  TSSEME
    +            TSSEME: u1,
    +            ///  TSSMRME
    +            TSSMRME: u1,
    +            ///  TSCNT
    +            TSCNT: u2,
    +            ///  TSPFFMAE
    +            TSPFFMAE: u1,
    +            padding: u13,
    +        }),
    +        ///  Ethernet PTP subsecond increment register
    +        PTPSSIR: mmio.Mmio(packed struct(u32) {
    +            ///  STSSI
    +            STSSI: u8,
    +            padding: u24,
    +        }),
    +        ///  Ethernet PTP time stamp high register
    +        PTPTSHR: mmio.Mmio(packed struct(u32) {
    +            ///  STS
    +            STS: u32,
    +        }),
    +        ///  Ethernet PTP time stamp low register
    +        PTPTSLR: mmio.Mmio(packed struct(u32) {
    +            ///  STSS
    +            STSS: u31,
    +            ///  STPNS
    +            STPNS: u1,
    +        }),
    +        ///  Ethernet PTP time stamp high update register
    +        PTPTSHUR: mmio.Mmio(packed struct(u32) {
    +            ///  TSUS
    +            TSUS: u32,
    +        }),
    +        ///  Ethernet PTP time stamp low update register
    +        PTPTSLUR: mmio.Mmio(packed struct(u32) {
    +            ///  TSUSS
    +            TSUSS: u31,
    +            ///  TSUPNS
    +            TSUPNS: u1,
    +        }),
    +        ///  Ethernet PTP time stamp addend register
    +        PTPTSAR: mmio.Mmio(packed struct(u32) {
    +            ///  TSA
    +            TSA: u32,
    +        }),
    +        ///  Ethernet PTP target time high register
    +        PTPTTHR: mmio.Mmio(packed struct(u32) {
    +            ///  0
    +            TTSH: u32,
    +        }),
    +        ///  Ethernet PTP target time low register
    +        PTPTTLR: mmio.Mmio(packed struct(u32) {
    +            ///  TTSL
    +            TTSL: u32,
    +        }),
    +        reserved40: [4]u8,
    +        ///  Ethernet PTP time stamp status register
    +        PTPTSSR: mmio.Mmio(packed struct(u32) {
    +            ///  TSSO
    +            TSSO: u1,
    +            ///  TSTTR
    +            TSTTR: u1,
    +            padding: u30,
    +        }),
    +        ///  Ethernet PTP PPS control register
    +        PTPPPSCR: mmio.Mmio(packed struct(u32) {
    +            ///  TSSO
    +            TSSO: u1,
    +            ///  TSTTR
    +            TSTTR: u1,
    +            padding: u30,
    +        }),
    +    };
    +
    +    ///  General purpose timers
    +    pub const TIM2 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            ///  One-pulse mode
    +            OPM: u1,
    +            ///  Direction
    +            DIR: u1,
    +            ///  Center-aligned mode selection
    +            CMS: u2,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            ///  Clock division
    +            CKD: u2,
    +            padding: u22,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            reserved3: u3,
    +            ///  Capture/compare DMA selection
    +            CCDS: u1,
    +            ///  Master mode selection
    +            MMS: u3,
    +            ///  TI1 selection
    +            TI1S: u1,
    +            padding: u24,
    +        }),
    +        ///  slave mode control register
    +        SMCR: mmio.Mmio(packed struct(u32) {
    +            ///  Slave mode selection
    +            SMS: u3,
    +            reserved4: u1,
    +            ///  Trigger selection
    +            TS: u3,
    +            ///  Master/Slave mode
    +            MSM: u1,
    +            ///  External trigger filter
    +            ETF: u4,
    +            ///  External trigger prescaler
    +            ETPS: u2,
    +            ///  External clock enable
    +            ECE: u1,
    +            ///  External trigger polarity
    +            ETP: u1,
    +            padding: u16,
    +        }),
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            ///  Capture/Compare 1 interrupt enable
    +            CC1IE: u1,
    +            ///  Capture/Compare 2 interrupt enable
    +            CC2IE: u1,
    +            ///  Capture/Compare 3 interrupt enable
    +            CC3IE: u1,
    +            ///  Capture/Compare 4 interrupt enable
    +            CC4IE: u1,
    +            reserved6: u1,
    +            ///  Trigger interrupt enable
    +            TIE: u1,
    +            reserved8: u1,
    +            ///  Update DMA request enable
    +            UDE: u1,
    +            ///  Capture/Compare 1 DMA request enable
    +            CC1DE: u1,
    +            ///  Capture/Compare 2 DMA request enable
    +            CC2DE: u1,
    +            ///  Capture/Compare 3 DMA request enable
    +            CC3DE: u1,
    +            ///  Capture/Compare 4 DMA request enable
    +            CC4DE: u1,
    +            reserved14: u1,
    +            ///  Trigger DMA request enable
    +            TDE: u1,
    +            padding: u17,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            ///  Capture/compare 1 interrupt flag
    +            CC1IF: u1,
    +            ///  Capture/Compare 2 interrupt flag
    +            CC2IF: u1,
    +            ///  Capture/Compare 3 interrupt flag
    +            CC3IF: u1,
    +            ///  Capture/Compare 4 interrupt flag
    +            CC4IF: u1,
    +            reserved6: u1,
    +            ///  Trigger interrupt flag
    +            TIF: u1,
    +            reserved9: u2,
    +            ///  Capture/Compare 1 overcapture flag
    +            CC1OF: u1,
    +            ///  Capture/compare 2 overcapture flag
    +            CC2OF: u1,
    +            ///  Capture/Compare 3 overcapture flag
    +            CC3OF: u1,
    +            ///  Capture/Compare 4 overcapture flag
    +            CC4OF: u1,
    +            padding: u19,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            ///  Capture/compare 1 generation
    +            CC1G: u1,
    +            ///  Capture/compare 2 generation
    +            CC2G: u1,
    +            ///  Capture/compare 3 generation
    +            CC3G: u1,
    +            ///  Capture/compare 4 generation
    +            CC4G: u1,
    +            reserved6: u1,
    +            ///  Trigger generation
    +            TG: u1,
    +            padding: u25,
    +        }),
    +        ///  capture/compare mode register 1 (output mode)
    +        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    +            ///  CC1S
    +            CC1S: u2,
    +            ///  OC1FE
    +            OC1FE: u1,
    +            ///  OC1PE
    +            OC1PE: u1,
    +            ///  OC1M
    +            OC1M: u3,
    +            ///  OC1CE
    +            OC1CE: u1,
    +            ///  CC2S
    +            CC2S: u2,
    +            ///  OC2FE
    +            OC2FE: u1,
    +            ///  OC2PE
    +            OC2PE: u1,
    +            ///  OC2M
    +            OC2M: u3,
    +            ///  OC2CE
    +            OC2CE: u1,
    +            padding: u16,
    +        }),
    +        ///  capture/compare mode register 2 (output mode)
    +        CCMR2_Output: mmio.Mmio(packed struct(u32) {
    +            ///  CC3S
    +            CC3S: u2,
    +            ///  OC3FE
    +            OC3FE: u1,
    +            ///  OC3PE
    +            OC3PE: u1,
    +            ///  OC3M
    +            OC3M: u3,
    +            ///  OC3CE
    +            OC3CE: u1,
    +            ///  CC4S
    +            CC4S: u2,
    +            ///  OC4FE
    +            OC4FE: u1,
    +            ///  OC4PE
    +            OC4PE: u1,
    +            ///  OC4M
    +            OC4M: u3,
    +            ///  O24CE
    +            O24CE: u1,
    +            padding: u16,
    +        }),
    +        ///  capture/compare enable register
    +        CCER: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 output enable
    +            CC1E: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1P: u1,
    +            reserved3: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1NP: u1,
    +            ///  Capture/Compare 2 output enable
    +            CC2E: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2P: u1,
    +            reserved7: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2NP: u1,
    +            ///  Capture/Compare 3 output enable
    +            CC3E: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC3P: u1,
    +            reserved11: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC3NP: u1,
    +            ///  Capture/Compare 4 output enable
    +            CC4E: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC4P: u1,
    +            reserved15: u1,
    +            ///  Capture/Compare 4 output Polarity
    +            CC4NP: u1,
    +            padding: u16,
    +        }),
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  Low counter value
    +            CNT_L: u16,
    +            ///  High counter value
    +            CNT_H: u16,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Low Auto-reload value
    +            ARR_L: u16,
    +            ///  High Auto-reload value
    +            ARR_H: u16,
    +        }),
    +        reserved52: [4]u8,
    +        ///  capture/compare register 1
    +        CCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare 1 value
    +            CCR1_L: u16,
    +            ///  High Capture/Compare 1 value
    +            CCR1_H: u16,
    +        }),
    +        ///  capture/compare register 2
    +        CCR2: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare 2 value
    +            CCR2_L: u16,
    +            ///  High Capture/Compare 2 value
    +            CCR2_H: u16,
    +        }),
    +        ///  capture/compare register 3
    +        CCR3: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare value
    +            CCR3_L: u16,
    +            ///  High Capture/Compare value
    +            CCR3_H: u16,
    +        }),
    +        ///  capture/compare register 4
    +        CCR4: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare value
    +            CCR4_L: u16,
    +            ///  High Capture/Compare value
    +            CCR4_H: u16,
    +        }),
    +        reserved72: [4]u8,
    +        ///  DMA control register
    +        DCR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA base address
    +            DBA: u5,
    +            reserved8: u3,
    +            ///  DMA burst length
    +            DBL: u5,
    +            padding: u19,
    +        }),
    +        ///  DMA address for full transfer
    +        DMAR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA register for burst accesses
    +            DMAB: u16,
    +            padding: u16,
    +        }),
    +        ///  TIM5 option register
    +        OR: mmio.Mmio(packed struct(u32) {
    +            reserved10: u10,
    +            ///  Timer Input 4 remap
    +            ITR1_RMP: u2,
    +            padding: u20,
    +        }),
    +    };
    +
    +    ///  General purpose timers
    +    pub const TIM3 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            ///  One-pulse mode
    +            OPM: u1,
    +            ///  Direction
    +            DIR: u1,
    +            ///  Center-aligned mode selection
    +            CMS: u2,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            ///  Clock division
    +            CKD: u2,
    +            padding: u22,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            reserved3: u3,
    +            ///  Capture/compare DMA selection
    +            CCDS: u1,
    +            ///  Master mode selection
    +            MMS: u3,
    +            ///  TI1 selection
    +            TI1S: u1,
    +            padding: u24,
    +        }),
    +        ///  slave mode control register
    +        SMCR: mmio.Mmio(packed struct(u32) {
    +            ///  Slave mode selection
    +            SMS: u3,
    +            reserved4: u1,
    +            ///  Trigger selection
    +            TS: u3,
    +            ///  Master/Slave mode
    +            MSM: u1,
    +            ///  External trigger filter
    +            ETF: u4,
    +            ///  External trigger prescaler
    +            ETPS: u2,
    +            ///  External clock enable
    +            ECE: u1,
    +            ///  External trigger polarity
    +            ETP: u1,
    +            padding: u16,
    +        }),
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            ///  Capture/Compare 1 interrupt enable
    +            CC1IE: u1,
    +            ///  Capture/Compare 2 interrupt enable
    +            CC2IE: u1,
    +            ///  Capture/Compare 3 interrupt enable
    +            CC3IE: u1,
    +            ///  Capture/Compare 4 interrupt enable
    +            CC4IE: u1,
    +            reserved6: u1,
    +            ///  Trigger interrupt enable
    +            TIE: u1,
    +            reserved8: u1,
    +            ///  Update DMA request enable
    +            UDE: u1,
    +            ///  Capture/Compare 1 DMA request enable
    +            CC1DE: u1,
    +            ///  Capture/Compare 2 DMA request enable
    +            CC2DE: u1,
    +            ///  Capture/Compare 3 DMA request enable
    +            CC3DE: u1,
    +            ///  Capture/Compare 4 DMA request enable
    +            CC4DE: u1,
    +            reserved14: u1,
    +            ///  Trigger DMA request enable
    +            TDE: u1,
    +            padding: u17,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            ///  Capture/compare 1 interrupt flag
    +            CC1IF: u1,
    +            ///  Capture/Compare 2 interrupt flag
    +            CC2IF: u1,
    +            ///  Capture/Compare 3 interrupt flag
    +            CC3IF: u1,
    +            ///  Capture/Compare 4 interrupt flag
    +            CC4IF: u1,
    +            reserved6: u1,
    +            ///  Trigger interrupt flag
    +            TIF: u1,
    +            reserved9: u2,
    +            ///  Capture/Compare 1 overcapture flag
    +            CC1OF: u1,
    +            ///  Capture/compare 2 overcapture flag
    +            CC2OF: u1,
    +            ///  Capture/Compare 3 overcapture flag
    +            CC3OF: u1,
    +            ///  Capture/Compare 4 overcapture flag
    +            CC4OF: u1,
    +            padding: u19,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            ///  Capture/compare 1 generation
    +            CC1G: u1,
    +            ///  Capture/compare 2 generation
    +            CC2G: u1,
    +            ///  Capture/compare 3 generation
    +            CC3G: u1,
    +            ///  Capture/compare 4 generation
    +            CC4G: u1,
    +            reserved6: u1,
    +            ///  Trigger generation
    +            TG: u1,
    +            padding: u25,
    +        }),
    +        ///  capture/compare mode register 1 (output mode)
    +        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    +            ///  CC1S
    +            CC1S: u2,
    +            ///  OC1FE
    +            OC1FE: u1,
    +            ///  OC1PE
    +            OC1PE: u1,
    +            ///  OC1M
    +            OC1M: u3,
    +            ///  OC1CE
    +            OC1CE: u1,
    +            ///  CC2S
    +            CC2S: u2,
    +            ///  OC2FE
    +            OC2FE: u1,
    +            ///  OC2PE
    +            OC2PE: u1,
    +            ///  OC2M
    +            OC2M: u3,
    +            ///  OC2CE
    +            OC2CE: u1,
    +            padding: u16,
    +        }),
    +        ///  capture/compare mode register 2 (output mode)
    +        CCMR2_Output: mmio.Mmio(packed struct(u32) {
    +            ///  CC3S
    +            CC3S: u2,
    +            ///  OC3FE
    +            OC3FE: u1,
    +            ///  OC3PE
    +            OC3PE: u1,
    +            ///  OC3M
    +            OC3M: u3,
    +            ///  OC3CE
    +            OC3CE: u1,
    +            ///  CC4S
    +            CC4S: u2,
    +            ///  OC4FE
    +            OC4FE: u1,
    +            ///  OC4PE
    +            OC4PE: u1,
    +            ///  OC4M
    +            OC4M: u3,
    +            ///  O24CE
    +            O24CE: u1,
    +            padding: u16,
    +        }),
    +        ///  capture/compare enable register
    +        CCER: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 output enable
    +            CC1E: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1P: u1,
    +            reserved3: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1NP: u1,
    +            ///  Capture/Compare 2 output enable
    +            CC2E: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2P: u1,
    +            reserved7: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2NP: u1,
    +            ///  Capture/Compare 3 output enable
    +            CC3E: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC3P: u1,
    +            reserved11: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC3NP: u1,
    +            ///  Capture/Compare 4 output enable
    +            CC4E: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC4P: u1,
    +            reserved15: u1,
    +            ///  Capture/Compare 4 output Polarity
    +            CC4NP: u1,
    +            padding: u16,
    +        }),
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  Low counter value
    +            CNT_L: u16,
    +            ///  High counter value
    +            CNT_H: u16,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Low Auto-reload value
    +            ARR_L: u16,
    +            ///  High Auto-reload value
    +            ARR_H: u16,
    +        }),
    +        reserved52: [4]u8,
    +        ///  capture/compare register 1
    +        CCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare 1 value
    +            CCR1_L: u16,
    +            ///  High Capture/Compare 1 value
    +            CCR1_H: u16,
    +        }),
    +        ///  capture/compare register 2
    +        CCR2: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare 2 value
    +            CCR2_L: u16,
    +            ///  High Capture/Compare 2 value
    +            CCR2_H: u16,
    +        }),
    +        ///  capture/compare register 3
    +        CCR3: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare value
    +            CCR3_L: u16,
    +            ///  High Capture/Compare value
    +            CCR3_H: u16,
    +        }),
    +        ///  capture/compare register 4
    +        CCR4: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare value
    +            CCR4_L: u16,
    +            ///  High Capture/Compare value
    +            CCR4_H: u16,
    +        }),
    +        reserved72: [4]u8,
    +        ///  DMA control register
    +        DCR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA base address
    +            DBA: u5,
    +            reserved8: u3,
    +            ///  DMA burst length
    +            DBL: u5,
    +            padding: u19,
    +        }),
    +        ///  DMA address for full transfer
    +        DMAR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA register for burst accesses
    +            DMAB: u16,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  Ethernet: MAC management counters
    +    pub const Ethernet_MMC = extern struct {
    +        ///  Ethernet MMC control register
    +        MMCCR: mmio.Mmio(packed struct(u32) {
    +            ///  CR
    +            CR: u1,
    +            ///  CSR
    +            CSR: u1,
    +            ///  ROR
    +            ROR: u1,
    +            ///  MCF
    +            MCF: u1,
    +            ///  MCP
    +            MCP: u1,
    +            ///  MCFHP
    +            MCFHP: u1,
    +            padding: u26,
    +        }),
    +        ///  Ethernet MMC receive interrupt register
    +        MMCRIR: mmio.Mmio(packed struct(u32) {
    +            reserved5: u5,
    +            ///  RFCES
    +            RFCES: u1,
    +            ///  RFAES
    +            RFAES: u1,
    +            reserved17: u10,
    +            ///  RGUFS
    +            RGUFS: u1,
    +            padding: u14,
    +        }),
    +        ///  Ethernet MMC transmit interrupt register
    +        MMCTIR: mmio.Mmio(packed struct(u32) {
    +            reserved14: u14,
    +            ///  TGFSCS
    +            TGFSCS: u1,
    +            ///  TGFMSCS
    +            TGFMSCS: u1,
    +            reserved21: u5,
    +            ///  TGFS
    +            TGFS: u1,
    +            padding: u10,
    +        }),
    +        ///  Ethernet MMC receive interrupt mask register
    +        MMCRIMR: mmio.Mmio(packed struct(u32) {
    +            reserved5: u5,
    +            ///  RFCEM
    +            RFCEM: u1,
    +            ///  RFAEM
    +            RFAEM: u1,
    +            reserved17: u10,
    +            ///  RGUFM
    +            RGUFM: u1,
    +            padding: u14,
    +        }),
    +        ///  Ethernet MMC transmit interrupt mask register
    +        MMCTIMR: mmio.Mmio(packed struct(u32) {
    +            reserved14: u14,
    +            ///  TGFSCM
    +            TGFSCM: u1,
    +            ///  TGFMSCM
    +            TGFMSCM: u1,
    +            ///  TGFM
    +            TGFM: u1,
    +            padding: u15,
    +        }),
    +        reserved76: [56]u8,
    +        ///  Ethernet MMC transmitted good frames after a single collision counter
    +        MMCTGFSCCR: mmio.Mmio(packed struct(u32) {
    +            ///  TGFSCC
    +            TGFSCC: u32,
    +        }),
    +        ///  Ethernet MMC transmitted good frames after more than a single collision
    +        MMCTGFMSCCR: mmio.Mmio(packed struct(u32) {
    +            ///  TGFMSCC
    +            TGFMSCC: u32,
    +        }),
    +        reserved104: [20]u8,
    +        ///  Ethernet MMC transmitted good frames counter register
    +        MMCTGFCR: mmio.Mmio(packed struct(u32) {
    +            ///  HTL
    +            TGFC: u32,
    +        }),
    +        reserved148: [40]u8,
    +        ///  Ethernet MMC received frames with CRC error counter register
    +        MMCRFCECR: mmio.Mmio(packed struct(u32) {
    +            ///  RFCFC
    +            RFCFC: u32,
    +        }),
    +        ///  Ethernet MMC received frames with alignment error counter register
    +        MMCRFAECR: mmio.Mmio(packed struct(u32) {
    +            ///  RFAEC
    +            RFAEC: u32,
    +        }),
    +        reserved196: [40]u8,
    +        ///  MMC received good unicast frames counter register
    +        MMCRGUFCR: mmio.Mmio(packed struct(u32) {
    +            ///  RGUFC
    +            RGUFC: u32,
    +        }),
    +    };
    +
    +    ///  General-purpose-timers
    +    pub const TIM5 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            ///  One-pulse mode
    +            OPM: u1,
    +            ///  Direction
    +            DIR: u1,
    +            ///  Center-aligned mode selection
    +            CMS: u2,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            ///  Clock division
    +            CKD: u2,
    +            padding: u22,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            reserved3: u3,
    +            ///  Capture/compare DMA selection
    +            CCDS: u1,
    +            ///  Master mode selection
    +            MMS: u3,
    +            ///  TI1 selection
    +            TI1S: u1,
    +            padding: u24,
    +        }),
    +        ///  slave mode control register
    +        SMCR: mmio.Mmio(packed struct(u32) {
    +            ///  Slave mode selection
    +            SMS: u3,
    +            reserved4: u1,
    +            ///  Trigger selection
    +            TS: u3,
    +            ///  Master/Slave mode
    +            MSM: u1,
    +            ///  External trigger filter
    +            ETF: u4,
    +            ///  External trigger prescaler
    +            ETPS: u2,
    +            ///  External clock enable
    +            ECE: u1,
    +            ///  External trigger polarity
    +            ETP: u1,
    +            padding: u16,
    +        }),
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            ///  Capture/Compare 1 interrupt enable
    +            CC1IE: u1,
    +            ///  Capture/Compare 2 interrupt enable
    +            CC2IE: u1,
    +            ///  Capture/Compare 3 interrupt enable
    +            CC3IE: u1,
    +            ///  Capture/Compare 4 interrupt enable
    +            CC4IE: u1,
    +            reserved6: u1,
    +            ///  Trigger interrupt enable
    +            TIE: u1,
    +            reserved8: u1,
    +            ///  Update DMA request enable
    +            UDE: u1,
    +            ///  Capture/Compare 1 DMA request enable
    +            CC1DE: u1,
    +            ///  Capture/Compare 2 DMA request enable
    +            CC2DE: u1,
    +            ///  Capture/Compare 3 DMA request enable
    +            CC3DE: u1,
    +            ///  Capture/Compare 4 DMA request enable
    +            CC4DE: u1,
    +            reserved14: u1,
    +            ///  Trigger DMA request enable
    +            TDE: u1,
    +            padding: u17,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            ///  Capture/compare 1 interrupt flag
    +            CC1IF: u1,
    +            ///  Capture/Compare 2 interrupt flag
    +            CC2IF: u1,
    +            ///  Capture/Compare 3 interrupt flag
    +            CC3IF: u1,
    +            ///  Capture/Compare 4 interrupt flag
    +            CC4IF: u1,
    +            reserved6: u1,
    +            ///  Trigger interrupt flag
    +            TIF: u1,
    +            reserved9: u2,
    +            ///  Capture/Compare 1 overcapture flag
    +            CC1OF: u1,
    +            ///  Capture/compare 2 overcapture flag
    +            CC2OF: u1,
    +            ///  Capture/Compare 3 overcapture flag
    +            CC3OF: u1,
    +            ///  Capture/Compare 4 overcapture flag
    +            CC4OF: u1,
    +            padding: u19,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            ///  Capture/compare 1 generation
    +            CC1G: u1,
    +            ///  Capture/compare 2 generation
    +            CC2G: u1,
    +            ///  Capture/compare 3 generation
    +            CC3G: u1,
    +            ///  Capture/compare 4 generation
    +            CC4G: u1,
    +            reserved6: u1,
    +            ///  Trigger generation
    +            TG: u1,
    +            padding: u25,
    +        }),
    +        ///  capture/compare mode register 1 (output mode)
    +        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    +            ///  CC1S
    +            CC1S: u2,
    +            ///  OC1FE
    +            OC1FE: u1,
    +            ///  OC1PE
    +            OC1PE: u1,
    +            ///  OC1M
    +            OC1M: u3,
    +            ///  OC1CE
    +            OC1CE: u1,
    +            ///  CC2S
    +            CC2S: u2,
    +            ///  OC2FE
    +            OC2FE: u1,
    +            ///  OC2PE
    +            OC2PE: u1,
    +            ///  OC2M
    +            OC2M: u3,
    +            ///  OC2CE
    +            OC2CE: u1,
    +            padding: u16,
    +        }),
    +        ///  capture/compare mode register 2 (output mode)
    +        CCMR2_Output: mmio.Mmio(packed struct(u32) {
    +            ///  CC3S
    +            CC3S: u2,
    +            ///  OC3FE
    +            OC3FE: u1,
    +            ///  OC3PE
    +            OC3PE: u1,
    +            ///  OC3M
    +            OC3M: u3,
    +            ///  OC3CE
    +            OC3CE: u1,
    +            ///  CC4S
    +            CC4S: u2,
    +            ///  OC4FE
    +            OC4FE: u1,
    +            ///  OC4PE
    +            OC4PE: u1,
    +            ///  OC4M
    +            OC4M: u3,
    +            ///  O24CE
    +            O24CE: u1,
    +            padding: u16,
    +        }),
    +        ///  capture/compare enable register
    +        CCER: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 output enable
    +            CC1E: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1P: u1,
    +            reserved3: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1NP: u1,
    +            ///  Capture/Compare 2 output enable
    +            CC2E: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2P: u1,
    +            reserved7: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2NP: u1,
    +            ///  Capture/Compare 3 output enable
    +            CC3E: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC3P: u1,
    +            reserved11: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC3NP: u1,
    +            ///  Capture/Compare 4 output enable
    +            CC4E: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC4P: u1,
    +            reserved15: u1,
    +            ///  Capture/Compare 4 output Polarity
    +            CC4NP: u1,
    +            padding: u16,
    +        }),
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  Low counter value
    +            CNT_L: u16,
    +            ///  High counter value
    +            CNT_H: u16,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Low Auto-reload value
    +            ARR_L: u16,
    +            ///  High Auto-reload value
    +            ARR_H: u16,
    +        }),
    +        reserved52: [4]u8,
    +        ///  capture/compare register 1
    +        CCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare 1 value
    +            CCR1_L: u16,
    +            ///  High Capture/Compare 1 value
    +            CCR1_H: u16,
    +        }),
    +        ///  capture/compare register 2
    +        CCR2: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare 2 value
    +            CCR2_L: u16,
    +            ///  High Capture/Compare 2 value
    +            CCR2_H: u16,
    +        }),
    +        ///  capture/compare register 3
    +        CCR3: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare value
    +            CCR3_L: u16,
    +            ///  High Capture/Compare value
    +            CCR3_H: u16,
    +        }),
    +        ///  capture/compare register 4
    +        CCR4: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare value
    +            CCR4_L: u16,
    +            ///  High Capture/Compare value
    +            CCR4_H: u16,
    +        }),
    +        reserved72: [4]u8,
    +        ///  DMA control register
    +        DCR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA base address
    +            DBA: u5,
    +            reserved8: u3,
    +            ///  DMA burst length
    +            DBL: u5,
    +            padding: u19,
    +        }),
    +        ///  DMA address for full transfer
    +        DMAR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA register for burst accesses
    +            DMAB: u16,
    +            padding: u16,
    +        }),
    +        ///  TIM5 option register
    +        OR: mmio.Mmio(packed struct(u32) {
    +            reserved6: u6,
    +            ///  Timer Input 4 remap
    +            IT4_RMP: u2,
    +            padding: u24,
    +        }),
    +    };
    +
    +    ///  General purpose timers
    +    pub const TIM9 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            ///  One-pulse mode
    +            OPM: u1,
    +            reserved7: u3,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            ///  Clock division
    +            CKD: u2,
    +            padding: u22,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            reserved4: u4,
    +            ///  Master mode selection
    +            MMS: u3,
    +            padding: u25,
    +        }),
    +        ///  slave mode control register
    +        SMCR: mmio.Mmio(packed struct(u32) {
    +            ///  Slave mode selection
    +            SMS: u3,
    +            reserved4: u1,
    +            ///  Trigger selection
    +            TS: u3,
    +            ///  Master/Slave mode
    +            MSM: u1,
    +            padding: u24,
    +        }),
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            ///  Capture/Compare 1 interrupt enable
    +            CC1IE: u1,
    +            ///  Capture/Compare 2 interrupt enable
    +            CC2IE: u1,
    +            reserved6: u3,
    +            ///  Trigger interrupt enable
    +            TIE: u1,
    +            padding: u25,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            ///  Capture/compare 1 interrupt flag
    +            CC1IF: u1,
    +            ///  Capture/Compare 2 interrupt flag
    +            CC2IF: u1,
    +            reserved6: u3,
    +            ///  Trigger interrupt flag
    +            TIF: u1,
    +            reserved9: u2,
    +            ///  Capture/Compare 1 overcapture flag
    +            CC1OF: u1,
    +            ///  Capture/compare 2 overcapture flag
    +            CC2OF: u1,
    +            padding: u21,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            ///  Capture/compare 1 generation
    +            CC1G: u1,
    +            ///  Capture/compare 2 generation
    +            CC2G: u1,
    +            reserved6: u3,
    +            ///  Trigger generation
    +            TG: u1,
    +            padding: u25,
    +        }),
    +        ///  capture/compare mode register 1 (output mode)
    +        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 selection
    +            CC1S: u2,
    +            ///  Output Compare 1 fast enable
    +            OC1FE: u1,
    +            ///  Output Compare 1 preload enable
    +            OC1PE: u1,
    +            ///  Output Compare 1 mode
    +            OC1M: u3,
    +            reserved8: u1,
    +            ///  Capture/Compare 2 selection
    +            CC2S: u2,
    +            ///  Output Compare 2 fast enable
    +            OC2FE: u1,
    +            ///  Output Compare 2 preload enable
    +            OC2PE: u1,
    +            ///  Output Compare 2 mode
    +            OC2M: u3,
    +            padding: u17,
    +        }),
    +        reserved32: [4]u8,
    +        ///  capture/compare enable register
    +        CCER: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 output enable
    +            CC1E: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1P: u1,
    +            reserved3: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1NP: u1,
    +            ///  Capture/Compare 2 output enable
    +            CC2E: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2P: u1,
    +            reserved7: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2NP: u1,
    +            padding: u24,
    +        }),
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  counter value
    +            CNT: u16,
    +            padding: u16,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Auto-reload value
    +            ARR: u16,
    +            padding: u16,
    +        }),
    +        reserved52: [4]u8,
    +        ///  capture/compare register 1
    +        CCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 value
    +            CCR1: u16,
    +            padding: u16,
    +        }),
    +        ///  capture/compare register 2
    +        CCR2: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 2 value
    +            CCR2: u16,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  Ethernet: media access control (MAC)
    +    pub const Ethernet_MAC = extern struct {
    +        ///  Ethernet MAC configuration register
    +        MACCR: mmio.Mmio(packed struct(u32) {
    +            reserved2: u2,
    +            ///  RE
    +            RE: u1,
    +            ///  TE
    +            TE: u1,
    +            ///  DC
    +            DC: u1,
    +            ///  BL
    +            BL: u2,
    +            ///  APCS
    +            APCS: u1,
    +            reserved9: u1,
    +            ///  RD
    +            RD: u1,
    +            ///  IPCO
    +            IPCO: u1,
    +            ///  DM
    +            DM: u1,
    +            ///  LM
    +            LM: u1,
    +            ///  ROD
    +            ROD: u1,
    +            ///  FES
    +            FES: u1,
    +            reserved16: u1,
    +            ///  CSD
    +            CSD: u1,
    +            ///  IFG
    +            IFG: u3,
    +            reserved22: u2,
    +            ///  JD
    +            JD: u1,
    +            ///  WD
    +            WD: u1,
    +            reserved25: u1,
    +            ///  CSTF
    +            CSTF: u1,
    +            padding: u6,
    +        }),
    +        ///  Ethernet MAC frame filter register
    +        MACFFR: mmio.Mmio(packed struct(u32) {
    +            ///  PM
    +            PM: u1,
    +            ///  HU
    +            HU: u1,
    +            ///  HM
    +            HM: u1,
    +            ///  DAIF
    +            DAIF: u1,
    +            ///  RAM
    +            RAM: u1,
    +            ///  BFD
    +            BFD: u1,
    +            ///  PCF
    +            PCF: u1,
    +            ///  SAIF
    +            SAIF: u1,
    +            ///  SAF
    +            SAF: u1,
    +            ///  HPF
    +            HPF: u1,
    +            reserved31: u21,
    +            ///  RA
    +            RA: u1,
    +        }),
    +        ///  Ethernet MAC hash table high register
    +        MACHTHR: mmio.Mmio(packed struct(u32) {
    +            ///  HTH
    +            HTH: u32,
    +        }),
    +        ///  Ethernet MAC hash table low register
    +        MACHTLR: mmio.Mmio(packed struct(u32) {
    +            ///  HTL
    +            HTL: u32,
    +        }),
    +        ///  Ethernet MAC MII address register
    +        MACMIIAR: mmio.Mmio(packed struct(u32) {
    +            ///  MB
    +            MB: u1,
    +            ///  MW
    +            MW: u1,
    +            ///  CR
    +            CR: u3,
    +            reserved6: u1,
    +            ///  MR
    +            MR: u5,
    +            ///  PA
    +            PA: u5,
    +            padding: u16,
    +        }),
    +        ///  Ethernet MAC MII data register
    +        MACMIIDR: mmio.Mmio(packed struct(u32) {
    +            ///  TD
    +            TD: u16,
    +            padding: u16,
    +        }),
    +        ///  Ethernet MAC flow control register
    +        MACFCR: mmio.Mmio(packed struct(u32) {
    +            ///  FCB
    +            FCB: u1,
    +            ///  TFCE
    +            TFCE: u1,
    +            ///  RFCE
    +            RFCE: u1,
    +            ///  UPFD
    +            UPFD: u1,
    +            ///  PLT
    +            PLT: u2,
    +            reserved7: u1,
    +            ///  ZQPD
    +            ZQPD: u1,
    +            reserved16: u8,
    +            ///  PT
    +            PT: u16,
    +        }),
    +        ///  Ethernet MAC VLAN tag register
    +        MACVLANTR: mmio.Mmio(packed struct(u32) {
    +            ///  VLANTI
    +            VLANTI: u16,
    +            ///  VLANTC
    +            VLANTC: u1,
    +            padding: u15,
    +        }),
    +        reserved44: [12]u8,
    +        ///  Ethernet MAC PMT control and status register
    +        MACPMTCSR: mmio.Mmio(packed struct(u32) {
    +            ///  PD
    +            PD: u1,
    +            ///  MPE
    +            MPE: u1,
    +            ///  WFE
    +            WFE: u1,
    +            reserved5: u2,
    +            ///  MPR
    +            MPR: u1,
    +            ///  WFR
    +            WFR: u1,
    +            reserved9: u2,
    +            ///  GU
    +            GU: u1,
    +            reserved31: u21,
    +            ///  WFFRPR
    +            WFFRPR: u1,
    +        }),
    +        reserved52: [4]u8,
    +        ///  Ethernet MAC debug register
    +        MACDBGR: mmio.Mmio(packed struct(u32) {
    +            ///  CR
    +            CR: u1,
    +            ///  CSR
    +            CSR: u1,
    +            ///  ROR
    +            ROR: u1,
    +            ///  MCF
    +            MCF: u1,
    +            ///  MCP
    +            MCP: u1,
    +            ///  MCFHP
    +            MCFHP: u1,
    +            padding: u26,
    +        }),
    +        ///  Ethernet MAC interrupt status register
    +        MACSR: mmio.Mmio(packed struct(u32) {
    +            reserved3: u3,
    +            ///  PMTS
    +            PMTS: u1,
    +            ///  MMCS
    +            MMCS: u1,
    +            ///  MMCRS
    +            MMCRS: u1,
    +            ///  MMCTS
    +            MMCTS: u1,
    +            reserved9: u2,
    +            ///  TSTS
    +            TSTS: u1,
    +            padding: u22,
    +        }),
    +        ///  Ethernet MAC interrupt mask register
    +        MACIMR: mmio.Mmio(packed struct(u32) {
    +            reserved3: u3,
    +            ///  PMTIM
    +            PMTIM: u1,
    +            reserved9: u5,
    +            ///  TSTIM
    +            TSTIM: u1,
    +            padding: u22,
    +        }),
    +        ///  Ethernet MAC address 0 high register
    +        MACA0HR: mmio.Mmio(packed struct(u32) {
    +            ///  MAC address0 high
    +            MACA0H: u16,
    +            reserved31: u15,
    +            ///  Always 1
    +            MO: u1,
    +        }),
    +        ///  Ethernet MAC address 0 low register
    +        MACA0LR: mmio.Mmio(packed struct(u32) {
    +            ///  0
    +            MACA0L: u32,
    +        }),
    +        ///  Ethernet MAC address 1 high register
    +        MACA1HR: mmio.Mmio(packed struct(u32) {
    +            ///  MACA1H
    +            MACA1H: u16,
    +            reserved24: u8,
    +            ///  MBC
    +            MBC: u6,
    +            ///  SA
    +            SA: u1,
    +            ///  AE
    +            AE: u1,
    +        }),
    +        ///  Ethernet MAC address1 low register
    +        MACA1LR: mmio.Mmio(packed struct(u32) {
    +            ///  MACA1LR
    +            MACA1LR: u32,
    +        }),
    +        ///  Ethernet MAC address 2 high register
    +        MACA2HR: mmio.Mmio(packed struct(u32) {
    +            ///  MAC2AH
    +            MAC2AH: u16,
    +            reserved24: u8,
    +            ///  MBC
    +            MBC: u6,
    +            ///  SA
    +            SA: u1,
    +            ///  AE
    +            AE: u1,
    +        }),
    +        ///  Ethernet MAC address 2 low register
    +        MACA2LR: mmio.Mmio(packed struct(u32) {
    +            ///  MACA2L
    +            MACA2L: u31,
    +            padding: u1,
    +        }),
    +        ///  Ethernet MAC address 3 high register
    +        MACA3HR: mmio.Mmio(packed struct(u32) {
    +            ///  MACA3H
    +            MACA3H: u16,
    +            reserved24: u8,
    +            ///  MBC
    +            MBC: u6,
    +            ///  SA
    +            SA: u1,
    +            ///  AE
    +            AE: u1,
    +        }),
    +        ///  Ethernet MAC address 3 low register
    +        MACA3LR: mmio.Mmio(packed struct(u32) {
    +            ///  MBCA3L
    +            MBCA3L: u32,
    +        }),
    +    };
    +
    +    ///  General-purpose-timers
    +    pub const TIM10 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            reserved7: u4,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            ///  Clock division
    +            CKD: u2,
    +            padding: u22,
    +        }),
    +        reserved12: [8]u8,
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            ///  Capture/Compare 1 interrupt enable
    +            CC1IE: u1,
    +            padding: u30,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            ///  Capture/compare 1 interrupt flag
    +            CC1IF: u1,
    +            reserved9: u7,
    +            ///  Capture/Compare 1 overcapture flag
    +            CC1OF: u1,
    +            padding: u22,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            ///  Capture/compare 1 generation
    +            CC1G: u1,
    +            padding: u30,
    +        }),
    +        ///  capture/compare mode register 1 (output mode)
    +        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 selection
    +            CC1S: u2,
    +            ///  Output Compare 1 fast enable
    +            OC1FE: u1,
    +            ///  Output Compare 1 preload enable
    +            OC1PE: u1,
    +            ///  Output Compare 1 mode
    +            OC1M: u3,
    +            padding: u25,
    +        }),
    +        reserved32: [4]u8,
    +        ///  capture/compare enable register
    +        CCER: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 output enable
    +            CC1E: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1P: u1,
    +            reserved3: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1NP: u1,
    +            padding: u28,
    +        }),
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  counter value
    +            CNT: u16,
    +            padding: u16,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Auto-reload value
    +            ARR: u16,
    +            padding: u16,
    +        }),
    +        reserved52: [4]u8,
    +        ///  capture/compare register 1
    +        CCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 value
    +            CCR1: u16,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  General-purpose-timers
    +    pub const TIM11 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            reserved7: u4,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            ///  Clock division
    +            CKD: u2,
    +            padding: u22,
    +        }),
    +        reserved12: [8]u8,
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            ///  Capture/Compare 1 interrupt enable
    +            CC1IE: u1,
    +            padding: u30,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            ///  Capture/compare 1 interrupt flag
    +            CC1IF: u1,
    +            reserved9: u7,
    +            ///  Capture/Compare 1 overcapture flag
    +            CC1OF: u1,
    +            padding: u22,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            ///  Capture/compare 1 generation
    +            CC1G: u1,
    +            padding: u30,
    +        }),
    +        ///  capture/compare mode register 1 (output mode)
    +        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 selection
    +            CC1S: u2,
    +            ///  Output Compare 1 fast enable
    +            OC1FE: u1,
    +            ///  Output Compare 1 preload enable
    +            OC1PE: u1,
    +            ///  Output Compare 1 mode
    +            OC1M: u3,
    +            padding: u25,
    +        }),
    +        reserved32: [4]u8,
    +        ///  capture/compare enable register
    +        CCER: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 output enable
    +            CC1E: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1P: u1,
    +            reserved3: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1NP: u1,
    +            padding: u28,
    +        }),
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  counter value
    +            CNT: u16,
    +            padding: u16,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Auto-reload value
    +            ARR: u16,
    +            padding: u16,
    +        }),
    +        reserved52: [4]u8,
    +        ///  capture/compare register 1
    +        CCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 value
    +            CCR1: u16,
    +            padding: u16,
    +        }),
    +        reserved80: [24]u8,
    +        ///  option register
    +        OR: mmio.Mmio(packed struct(u32) {
    +            ///  Input 1 remapping capability
    +            RMP: u2,
    +            padding: u30,
    +        }),
    +    };
    +};
    diff --git a/src/chips/STM32F429.json b/src/chips/STM32F429.json
    new file mode 100644
    index 000000000..efbd77556
    --- /dev/null
    +++ b/src/chips/STM32F429.json
    @@ -0,0 +1,52094 @@
    +{
    +  "version": "0.1.0",
    +  "types": {
    +    "peripherals": {
    +      "RNG": {
    +        "description": "Random number generator",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "Interrupt enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RNGEN": {
    +                    "description": "Random number generator\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SEIS": {
    +                    "description": "Seed error interrupt\n              status",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CEIS": {
    +                    "description": "Clock error interrupt\n              status",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "SECS": {
    +                    "description": "Seed error current status",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CECS": {
    +                    "description": "Clock error current status",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DRDY": {
    +                    "description": "Data ready",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "data register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RNDATA": {
    +                    "description": "Random data",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "HASH": {
    +        "description": "Hash processor",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INIT": {
    +                    "description": "Initialize message digest\n              calculation",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "DMAE": {
    +                    "description": "DMA enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DATATYPE": {
    +                    "description": "Data type selection",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "MODE": {
    +                    "description": "Mode selection",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ALGO0": {
    +                    "description": "Algorithm selection",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "NBW": {
    +                    "description": "Number of words already\n              pushed",
    +                    "offset": 8,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "DINNE": {
    +                    "description": "DIN not empty",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MDMAT": {
    +                    "description": "Multiple DMA Transfers",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "LKEY": {
    +                    "description": "Long key selection",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "ALGO1": {
    +                    "description": "ALGO",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIN": {
    +              "description": "data input register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATAIN": {
    +                    "description": "Data input",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "STR": {
    +              "description": "start register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DCAL": {
    +                    "description": "Digest calculation",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "NBLW": {
    +                    "description": "Number of valid bits in the last word of\n              the message",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "HR0": {
    +              "description": "digest registers",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "H0": {
    +                    "description": "H0",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HR1": {
    +              "description": "digest registers",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "H1": {
    +                    "description": "H1",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HR2": {
    +              "description": "digest registers",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "H2": {
    +                    "description": "H2",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HR3": {
    +              "description": "digest registers",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "H3": {
    +                    "description": "H3",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HR4": {
    +              "description": "digest registers",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "H4": {
    +                    "description": "H4",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IMR": {
    +              "description": "interrupt enable register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DCIE": {
    +                    "description": "Digest calculation completion interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DINIE": {
    +                    "description": "Data input interrupt\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUSY": {
    +                    "description": "Busy bit",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DMAS": {
    +                    "description": "DMA Status",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DCIS": {
    +                    "description": "Digest calculation completion interrupt\n              status",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DINIS": {
    +                    "description": "Data input interrupt\n              status",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CSR0": {
    +              "description": "context swap registers",
    +              "offset": 248,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR0": {
    +                    "description": "CSR0",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR1": {
    +              "description": "context swap registers",
    +              "offset": 252,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR1": {
    +                    "description": "CSR1",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR2": {
    +              "description": "context swap registers",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR2": {
    +                    "description": "CSR2",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR3": {
    +              "description": "context swap registers",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR3": {
    +                    "description": "CSR3",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR4": {
    +              "description": "context swap registers",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR4": {
    +                    "description": "CSR4",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR5": {
    +              "description": "context swap registers",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR5": {
    +                    "description": "CSR5",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR6": {
    +              "description": "context swap registers",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR6": {
    +                    "description": "CSR6",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR7": {
    +              "description": "context swap registers",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR7": {
    +                    "description": "CSR7",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR8": {
    +              "description": "context swap registers",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR8": {
    +                    "description": "CSR8",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR9": {
    +              "description": "context swap registers",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR9": {
    +                    "description": "CSR9",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR10": {
    +              "description": "context swap registers",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR10": {
    +                    "description": "CSR10",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR11": {
    +              "description": "context swap registers",
    +              "offset": 292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR11": {
    +                    "description": "CSR11",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR12": {
    +              "description": "context swap registers",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR12": {
    +                    "description": "CSR12",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR13": {
    +              "description": "context swap registers",
    +              "offset": 300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR13": {
    +                    "description": "CSR13",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR14": {
    +              "description": "context swap registers",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR14": {
    +                    "description": "CSR14",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR15": {
    +              "description": "context swap registers",
    +              "offset": 308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR15": {
    +                    "description": "CSR15",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR16": {
    +              "description": "context swap registers",
    +              "offset": 312,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR16": {
    +                    "description": "CSR16",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR17": {
    +              "description": "context swap registers",
    +              "offset": 316,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR17": {
    +                    "description": "CSR17",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR18": {
    +              "description": "context swap registers",
    +              "offset": 320,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR18": {
    +                    "description": "CSR18",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR19": {
    +              "description": "context swap registers",
    +              "offset": 324,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR19": {
    +                    "description": "CSR19",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR20": {
    +              "description": "context swap registers",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR20": {
    +                    "description": "CSR20",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR21": {
    +              "description": "context swap registers",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR21": {
    +                    "description": "CSR21",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR22": {
    +              "description": "context swap registers",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR22": {
    +                    "description": "CSR22",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR23": {
    +              "description": "context swap registers",
    +              "offset": 340,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR23": {
    +                    "description": "CSR23",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR24": {
    +              "description": "context swap registers",
    +              "offset": 344,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR24": {
    +                    "description": "CSR24",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR25": {
    +              "description": "context swap registers",
    +              "offset": 348,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR25": {
    +                    "description": "CSR25",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR26": {
    +              "description": "context swap registers",
    +              "offset": 352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR26": {
    +                    "description": "CSR26",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR27": {
    +              "description": "context swap registers",
    +              "offset": 356,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR27": {
    +                    "description": "CSR27",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR28": {
    +              "description": "context swap registers",
    +              "offset": 360,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR28": {
    +                    "description": "CSR28",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR29": {
    +              "description": "context swap registers",
    +              "offset": 364,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR29": {
    +                    "description": "CSR29",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR30": {
    +              "description": "context swap registers",
    +              "offset": 368,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR30": {
    +                    "description": "CSR30",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR31": {
    +              "description": "context swap registers",
    +              "offset": 372,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR31": {
    +                    "description": "CSR31",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR32": {
    +              "description": "context swap registers",
    +              "offset": 376,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR32": {
    +                    "description": "CSR32",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR33": {
    +              "description": "context swap registers",
    +              "offset": 380,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR33": {
    +                    "description": "CSR33",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR34": {
    +              "description": "context swap registers",
    +              "offset": 384,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR34": {
    +                    "description": "CSR34",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR35": {
    +              "description": "context swap registers",
    +              "offset": 388,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR35": {
    +                    "description": "CSR35",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR36": {
    +              "description": "context swap registers",
    +              "offset": 392,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR36": {
    +                    "description": "CSR36",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR37": {
    +              "description": "context swap registers",
    +              "offset": 396,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR37": {
    +                    "description": "CSR37",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR38": {
    +              "description": "context swap registers",
    +              "offset": 400,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR38": {
    +                    "description": "CSR38",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR39": {
    +              "description": "context swap registers",
    +              "offset": 404,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR39": {
    +                    "description": "CSR39",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR40": {
    +              "description": "context swap registers",
    +              "offset": 408,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR40": {
    +                    "description": "CSR40",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR41": {
    +              "description": "context swap registers",
    +              "offset": 412,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR41": {
    +                    "description": "CSR41",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR42": {
    +              "description": "context swap registers",
    +              "offset": 416,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR42": {
    +                    "description": "CSR42",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR43": {
    +              "description": "context swap registers",
    +              "offset": 420,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR43": {
    +                    "description": "CSR43",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR44": {
    +              "description": "context swap registers",
    +              "offset": 424,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR44": {
    +                    "description": "CSR44",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR45": {
    +              "description": "context swap registers",
    +              "offset": 428,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR45": {
    +                    "description": "CSR45",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR46": {
    +              "description": "context swap registers",
    +              "offset": 432,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR46": {
    +                    "description": "CSR46",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR47": {
    +              "description": "context swap registers",
    +              "offset": 436,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR47": {
    +                    "description": "CSR47",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR48": {
    +              "description": "context swap registers",
    +              "offset": 440,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR48": {
    +                    "description": "CSR48",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR49": {
    +              "description": "context swap registers",
    +              "offset": 444,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR49": {
    +                    "description": "CSR49",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR50": {
    +              "description": "context swap registers",
    +              "offset": 448,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR50": {
    +                    "description": "CSR50",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR51": {
    +              "description": "context swap registers",
    +              "offset": 452,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR51": {
    +                    "description": "CSR51",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR52": {
    +              "description": "context swap registers",
    +              "offset": 456,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR52": {
    +                    "description": "CSR52",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSR53": {
    +              "description": "context swap registers",
    +              "offset": 460,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSR53": {
    +                    "description": "CSR53",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HASH_HR0": {
    +              "description": "HASH digest register",
    +              "offset": 784,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "H0": {
    +                    "description": "H0",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HASH_HR1": {
    +              "description": "read-only",
    +              "offset": 788,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "H1": {
    +                    "description": "H1",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HASH_HR2": {
    +              "description": "read-only",
    +              "offset": 792,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "H2": {
    +                    "description": "H2",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HASH_HR3": {
    +              "description": "read-only",
    +              "offset": 796,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "H3": {
    +                    "description": "H3",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HASH_HR4": {
    +              "description": "read-only",
    +              "offset": 800,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "H4": {
    +                    "description": "H4",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HASH_HR5": {
    +              "description": "read-only",
    +              "offset": 804,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "H5": {
    +                    "description": "H5",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HASH_HR6": {
    +              "description": "read-only",
    +              "offset": 808,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "H6": {
    +                    "description": "H6",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HASH_HR7": {
    +              "description": "read-only",
    +              "offset": 812,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "H7": {
    +                    "description": "H7",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "CRYP": {
    +        "description": "Cryptographic processor",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ALGODIR": {
    +                    "description": "Algorithm direction",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ALGOMODE0": {
    +                    "description": "Algorithm mode",
    +                    "offset": 3,
    +                    "size": 3
    +                  },
    +                  "DATATYPE": {
    +                    "description": "Data type selection",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "KEYSIZE": {
    +                    "description": "Key size selection (AES mode\n              only)",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "FFLUSH": {
    +                    "description": "FIFO flush",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CRYPEN": {
    +                    "description": "Cryptographic processor\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GCM_CCMPH": {
    +                    "description": "GCM_CCMPH",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "ALGOMODE3": {
    +                    "description": "ALGOMODE",
    +                    "offset": 19,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 3,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "BUSY": {
    +                    "description": "Busy bit",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "OFFU": {
    +                    "description": "Output FIFO full",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OFNE": {
    +                    "description": "Output FIFO not empty",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IFNF": {
    +                    "description": "Input FIFO not full",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IFEM": {
    +                    "description": "Input FIFO empty",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIN": {
    +              "description": "data input register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATAIN": {
    +                    "description": "Data input",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DOUT": {
    +              "description": "data output register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DATAOUT": {
    +                    "description": "Data output",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DMACR": {
    +              "description": "DMA control register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DOEN": {
    +                    "description": "DMA output enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DIEN": {
    +                    "description": "DMA input enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IMSCR": {
    +              "description": "interrupt mask set/clear\n          register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUTIM": {
    +                    "description": "Output FIFO service interrupt\n              mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "INIM": {
    +                    "description": "Input FIFO service interrupt\n              mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RISR": {
    +              "description": "raw interrupt status register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "OUTRIS": {
    +                    "description": "Output FIFO service raw interrupt\n              status",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "INRIS": {
    +                    "description": "Input FIFO service raw interrupt\n              status",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MISR": {
    +              "description": "masked interrupt status\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "OUTMIS": {
    +                    "description": "Output FIFO service masked interrupt\n              status",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "INMIS": {
    +                    "description": "Input FIFO service masked interrupt\n              status",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "K0LR": {
    +              "description": "key registers",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "b224": {
    +                    "description": "b224",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "b225": {
    +                    "description": "b225",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "b226": {
    +                    "description": "b226",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "b227": {
    +                    "description": "b227",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "b228": {
    +                    "description": "b228",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "b229": {
    +                    "description": "b229",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "b230": {
    +                    "description": "b230",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "b231": {
    +                    "description": "b231",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "b232": {
    +                    "description": "b232",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "b233": {
    +                    "description": "b233",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "b234": {
    +                    "description": "b234",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "b235": {
    +                    "description": "b235",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "b236": {
    +                    "description": "b236",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "b237": {
    +                    "description": "b237",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "b238": {
    +                    "description": "b238",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "b239": {
    +                    "description": "b239",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "b240": {
    +                    "description": "b240",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "b241": {
    +                    "description": "b241",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "b242": {
    +                    "description": "b242",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "b243": {
    +                    "description": "b243",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "b244": {
    +                    "description": "b244",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "b245": {
    +                    "description": "b245",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "b246": {
    +                    "description": "b246",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "b247": {
    +                    "description": "b247",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "b248": {
    +                    "description": "b248",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "b249": {
    +                    "description": "b249",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "b250": {
    +                    "description": "b250",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "b251": {
    +                    "description": "b251",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "b252": {
    +                    "description": "b252",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "b253": {
    +                    "description": "b253",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "b254": {
    +                    "description": "b254",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "b255": {
    +                    "description": "b255",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "K0RR": {
    +              "description": "key registers",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "b192": {
    +                    "description": "b192",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "b193": {
    +                    "description": "b193",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "b194": {
    +                    "description": "b194",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "b195": {
    +                    "description": "b195",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "b196": {
    +                    "description": "b196",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "b197": {
    +                    "description": "b197",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "b198": {
    +                    "description": "b198",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "b199": {
    +                    "description": "b199",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "b200": {
    +                    "description": "b200",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "b201": {
    +                    "description": "b201",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "b202": {
    +                    "description": "b202",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "b203": {
    +                    "description": "b203",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "b204": {
    +                    "description": "b204",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "b205": {
    +                    "description": "b205",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "b206": {
    +                    "description": "b206",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "b207": {
    +                    "description": "b207",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "b208": {
    +                    "description": "b208",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "b209": {
    +                    "description": "b209",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "b210": {
    +                    "description": "b210",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "b211": {
    +                    "description": "b211",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "b212": {
    +                    "description": "b212",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "b213": {
    +                    "description": "b213",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "b214": {
    +                    "description": "b214",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "b215": {
    +                    "description": "b215",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "b216": {
    +                    "description": "b216",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "b217": {
    +                    "description": "b217",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "b218": {
    +                    "description": "b218",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "b219": {
    +                    "description": "b219",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "b220": {
    +                    "description": "b220",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "b221": {
    +                    "description": "b221",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "b222": {
    +                    "description": "b222",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "b223": {
    +                    "description": "b223",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "K1LR": {
    +              "description": "key registers",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "b160": {
    +                    "description": "b160",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "b161": {
    +                    "description": "b161",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "b162": {
    +                    "description": "b162",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "b163": {
    +                    "description": "b163",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "b164": {
    +                    "description": "b164",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "b165": {
    +                    "description": "b165",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "b166": {
    +                    "description": "b166",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "b167": {
    +                    "description": "b167",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "b168": {
    +                    "description": "b168",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "b169": {
    +                    "description": "b169",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "b170": {
    +                    "description": "b170",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "b171": {
    +                    "description": "b171",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "b172": {
    +                    "description": "b172",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "b173": {
    +                    "description": "b173",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "b174": {
    +                    "description": "b174",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "b175": {
    +                    "description": "b175",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "b176": {
    +                    "description": "b176",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "b177": {
    +                    "description": "b177",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "b178": {
    +                    "description": "b178",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "b179": {
    +                    "description": "b179",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "b180": {
    +                    "description": "b180",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "b181": {
    +                    "description": "b181",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "b182": {
    +                    "description": "b182",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "b183": {
    +                    "description": "b183",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "b184": {
    +                    "description": "b184",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "b185": {
    +                    "description": "b185",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "b186": {
    +                    "description": "b186",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "b187": {
    +                    "description": "b187",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "b188": {
    +                    "description": "b188",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "b189": {
    +                    "description": "b189",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "b190": {
    +                    "description": "b190",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "b191": {
    +                    "description": "b191",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "K1RR": {
    +              "description": "key registers",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "b128": {
    +                    "description": "b128",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "b129": {
    +                    "description": "b129",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "b130": {
    +                    "description": "b130",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "b131": {
    +                    "description": "b131",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "b132": {
    +                    "description": "b132",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "b133": {
    +                    "description": "b133",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "b134": {
    +                    "description": "b134",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "b135": {
    +                    "description": "b135",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "b136": {
    +                    "description": "b136",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "b137": {
    +                    "description": "b137",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "b138": {
    +                    "description": "b138",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "b139": {
    +                    "description": "b139",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "b140": {
    +                    "description": "b140",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "b141": {
    +                    "description": "b141",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "b142": {
    +                    "description": "b142",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "b143": {
    +                    "description": "b143",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "b144": {
    +                    "description": "b144",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "b145": {
    +                    "description": "b145",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "b146": {
    +                    "description": "b146",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "b147": {
    +                    "description": "b147",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "b148": {
    +                    "description": "b148",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "b149": {
    +                    "description": "b149",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "b150": {
    +                    "description": "b150",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "b151": {
    +                    "description": "b151",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "b152": {
    +                    "description": "b152",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "b153": {
    +                    "description": "b153",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "b154": {
    +                    "description": "b154",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "b155": {
    +                    "description": "b155",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "b156": {
    +                    "description": "b156",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "b157": {
    +                    "description": "b157",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "b158": {
    +                    "description": "b158",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "b159": {
    +                    "description": "b159",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "K2LR": {
    +              "description": "key registers",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "b96": {
    +                    "description": "b96",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "b97": {
    +                    "description": "b97",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "b98": {
    +                    "description": "b98",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "b99": {
    +                    "description": "b99",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "b100": {
    +                    "description": "b100",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "b101": {
    +                    "description": "b101",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "b102": {
    +                    "description": "b102",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "b103": {
    +                    "description": "b103",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "b104": {
    +                    "description": "b104",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "b105": {
    +                    "description": "b105",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "b106": {
    +                    "description": "b106",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "b107": {
    +                    "description": "b107",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "b108": {
    +                    "description": "b108",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "b109": {
    +                    "description": "b109",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "b110": {
    +                    "description": "b110",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "b111": {
    +                    "description": "b111",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "b112": {
    +                    "description": "b112",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "b113": {
    +                    "description": "b113",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "b114": {
    +                    "description": "b114",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "b115": {
    +                    "description": "b115",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "b116": {
    +                    "description": "b116",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "b117": {
    +                    "description": "b117",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "b118": {
    +                    "description": "b118",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "b119": {
    +                    "description": "b119",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "b120": {
    +                    "description": "b120",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "b121": {
    +                    "description": "b121",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "b122": {
    +                    "description": "b122",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "b123": {
    +                    "description": "b123",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "b124": {
    +                    "description": "b124",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "b125": {
    +                    "description": "b125",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "b126": {
    +                    "description": "b126",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "b127": {
    +                    "description": "b127",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "K2RR": {
    +              "description": "key registers",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "b64": {
    +                    "description": "b64",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "b65": {
    +                    "description": "b65",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "b66": {
    +                    "description": "b66",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "b67": {
    +                    "description": "b67",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "b68": {
    +                    "description": "b68",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "b69": {
    +                    "description": "b69",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "b70": {
    +                    "description": "b70",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "b71": {
    +                    "description": "b71",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "b72": {
    +                    "description": "b72",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "b73": {
    +                    "description": "b73",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "b74": {
    +                    "description": "b74",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "b75": {
    +                    "description": "b75",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "b76": {
    +                    "description": "b76",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "b77": {
    +                    "description": "b77",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "b78": {
    +                    "description": "b78",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "b79": {
    +                    "description": "b79",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "b80": {
    +                    "description": "b80",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "b81": {
    +                    "description": "b81",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "b82": {
    +                    "description": "b82",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "b83": {
    +                    "description": "b83",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "b84": {
    +                    "description": "b84",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "b85": {
    +                    "description": "b85",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "b86": {
    +                    "description": "b86",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "b87": {
    +                    "description": "b87",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "b88": {
    +                    "description": "b88",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "b89": {
    +                    "description": "b89",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "b90": {
    +                    "description": "b90",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "b91": {
    +                    "description": "b91",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "b92": {
    +                    "description": "b92",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "b93": {
    +                    "description": "b93",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "b94": {
    +                    "description": "b94",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "b95": {
    +                    "description": "b95",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "K3LR": {
    +              "description": "key registers",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "b32": {
    +                    "description": "b32",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "b33": {
    +                    "description": "b33",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "b34": {
    +                    "description": "b34",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "b35": {
    +                    "description": "b35",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "b36": {
    +                    "description": "b36",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "b37": {
    +                    "description": "b37",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "b38": {
    +                    "description": "b38",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "b39": {
    +                    "description": "b39",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "b40": {
    +                    "description": "b40",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "b41": {
    +                    "description": "b41",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "b42": {
    +                    "description": "b42",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "b43": {
    +                    "description": "b43",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "b44": {
    +                    "description": "b44",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "b45": {
    +                    "description": "b45",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "b46": {
    +                    "description": "b46",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "b47": {
    +                    "description": "b47",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "b48": {
    +                    "description": "b48",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "b49": {
    +                    "description": "b49",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "b50": {
    +                    "description": "b50",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "b51": {
    +                    "description": "b51",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "b52": {
    +                    "description": "b52",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "b53": {
    +                    "description": "b53",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "b54": {
    +                    "description": "b54",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "b55": {
    +                    "description": "b55",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "b56": {
    +                    "description": "b56",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "b57": {
    +                    "description": "b57",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "b58": {
    +                    "description": "b58",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "b59": {
    +                    "description": "b59",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "b60": {
    +                    "description": "b60",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "b61": {
    +                    "description": "b61",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "b62": {
    +                    "description": "b62",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "b63": {
    +                    "description": "b63",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "K3RR": {
    +              "description": "key registers",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "b0": {
    +                    "description": "b0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "b1": {
    +                    "description": "b1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "b2": {
    +                    "description": "b2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "b3": {
    +                    "description": "b3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "b4": {
    +                    "description": "b4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "b5": {
    +                    "description": "b5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "b6": {
    +                    "description": "b6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "b7": {
    +                    "description": "b7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "b8": {
    +                    "description": "b8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "b9": {
    +                    "description": "b9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "b10": {
    +                    "description": "b10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "b11": {
    +                    "description": "b11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "b12": {
    +                    "description": "b12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "b13": {
    +                    "description": "b13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "b14": {
    +                    "description": "b14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "b15": {
    +                    "description": "b15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "b16": {
    +                    "description": "b16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "b17": {
    +                    "description": "b17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "b18": {
    +                    "description": "b18",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "b19": {
    +                    "description": "b19",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "b20": {
    +                    "description": "b20",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "b21": {
    +                    "description": "b21",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "b22": {
    +                    "description": "b22",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "b23": {
    +                    "description": "b23",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "b24": {
    +                    "description": "b24",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "b25": {
    +                    "description": "b25",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "b26": {
    +                    "description": "b26",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "b27": {
    +                    "description": "b27",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "b28": {
    +                    "description": "b28",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "b29": {
    +                    "description": "b29",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "b30": {
    +                    "description": "b30",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "b31": {
    +                    "description": "b31",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IV0LR": {
    +              "description": "initialization vector\n          registers",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IV31": {
    +                    "description": "IV31",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "IV30": {
    +                    "description": "IV30",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IV29": {
    +                    "description": "IV29",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IV28": {
    +                    "description": "IV28",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IV27": {
    +                    "description": "IV27",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IV26": {
    +                    "description": "IV26",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IV25": {
    +                    "description": "IV25",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "IV24": {
    +                    "description": "IV24",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IV23": {
    +                    "description": "IV23",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "IV22": {
    +                    "description": "IV22",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "IV21": {
    +                    "description": "IV21",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "IV20": {
    +                    "description": "IV20",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "IV19": {
    +                    "description": "IV19",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "IV18": {
    +                    "description": "IV18",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "IV17": {
    +                    "description": "IV17",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "IV16": {
    +                    "description": "IV16",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "IV15": {
    +                    "description": "IV15",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "IV14": {
    +                    "description": "IV14",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "IV13": {
    +                    "description": "IV13",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "IV12": {
    +                    "description": "IV12",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "IV11": {
    +                    "description": "IV11",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "IV10": {
    +                    "description": "IV10",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "IV9": {
    +                    "description": "IV9",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "IV8": {
    +                    "description": "IV8",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "IV7": {
    +                    "description": "IV7",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "IV6": {
    +                    "description": "IV6",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "IV5": {
    +                    "description": "IV5",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "IV4": {
    +                    "description": "IV4",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "IV3": {
    +                    "description": "IV3",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "IV2": {
    +                    "description": "IV2",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "IV1": {
    +                    "description": "IV1",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "IV0": {
    +                    "description": "IV0",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IV0RR": {
    +              "description": "initialization vector\n          registers",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IV63": {
    +                    "description": "IV63",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "IV62": {
    +                    "description": "IV62",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IV61": {
    +                    "description": "IV61",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IV60": {
    +                    "description": "IV60",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IV59": {
    +                    "description": "IV59",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IV58": {
    +                    "description": "IV58",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IV57": {
    +                    "description": "IV57",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "IV56": {
    +                    "description": "IV56",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IV55": {
    +                    "description": "IV55",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "IV54": {
    +                    "description": "IV54",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "IV53": {
    +                    "description": "IV53",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "IV52": {
    +                    "description": "IV52",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "IV51": {
    +                    "description": "IV51",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "IV50": {
    +                    "description": "IV50",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "IV49": {
    +                    "description": "IV49",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "IV48": {
    +                    "description": "IV48",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "IV47": {
    +                    "description": "IV47",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "IV46": {
    +                    "description": "IV46",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "IV45": {
    +                    "description": "IV45",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "IV44": {
    +                    "description": "IV44",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "IV43": {
    +                    "description": "IV43",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "IV42": {
    +                    "description": "IV42",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "IV41": {
    +                    "description": "IV41",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "IV40": {
    +                    "description": "IV40",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "IV39": {
    +                    "description": "IV39",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "IV38": {
    +                    "description": "IV38",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "IV37": {
    +                    "description": "IV37",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "IV36": {
    +                    "description": "IV36",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "IV35": {
    +                    "description": "IV35",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "IV34": {
    +                    "description": "IV34",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "IV33": {
    +                    "description": "IV33",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "IV32": {
    +                    "description": "IV32",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IV1LR": {
    +              "description": "initialization vector\n          registers",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IV95": {
    +                    "description": "IV95",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "IV94": {
    +                    "description": "IV94",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IV93": {
    +                    "description": "IV93",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IV92": {
    +                    "description": "IV92",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IV91": {
    +                    "description": "IV91",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IV90": {
    +                    "description": "IV90",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IV89": {
    +                    "description": "IV89",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "IV88": {
    +                    "description": "IV88",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IV87": {
    +                    "description": "IV87",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "IV86": {
    +                    "description": "IV86",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "IV85": {
    +                    "description": "IV85",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "IV84": {
    +                    "description": "IV84",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "IV83": {
    +                    "description": "IV83",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "IV82": {
    +                    "description": "IV82",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "IV81": {
    +                    "description": "IV81",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "IV80": {
    +                    "description": "IV80",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "IV79": {
    +                    "description": "IV79",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "IV78": {
    +                    "description": "IV78",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "IV77": {
    +                    "description": "IV77",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "IV76": {
    +                    "description": "IV76",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "IV75": {
    +                    "description": "IV75",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "IV74": {
    +                    "description": "IV74",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "IV73": {
    +                    "description": "IV73",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "IV72": {
    +                    "description": "IV72",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "IV71": {
    +                    "description": "IV71",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "IV70": {
    +                    "description": "IV70",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "IV69": {
    +                    "description": "IV69",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "IV68": {
    +                    "description": "IV68",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "IV67": {
    +                    "description": "IV67",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "IV66": {
    +                    "description": "IV66",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "IV65": {
    +                    "description": "IV65",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "IV64": {
    +                    "description": "IV64",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IV1RR": {
    +              "description": "initialization vector\n          registers",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IV127": {
    +                    "description": "IV127",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "IV126": {
    +                    "description": "IV126",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IV125": {
    +                    "description": "IV125",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IV124": {
    +                    "description": "IV124",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IV123": {
    +                    "description": "IV123",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IV122": {
    +                    "description": "IV122",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IV121": {
    +                    "description": "IV121",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "IV120": {
    +                    "description": "IV120",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IV119": {
    +                    "description": "IV119",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "IV118": {
    +                    "description": "IV118",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "IV117": {
    +                    "description": "IV117",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "IV116": {
    +                    "description": "IV116",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "IV115": {
    +                    "description": "IV115",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "IV114": {
    +                    "description": "IV114",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "IV113": {
    +                    "description": "IV113",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "IV112": {
    +                    "description": "IV112",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "IV111": {
    +                    "description": "IV111",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "IV110": {
    +                    "description": "IV110",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "IV109": {
    +                    "description": "IV109",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "IV108": {
    +                    "description": "IV108",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "IV107": {
    +                    "description": "IV107",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "IV106": {
    +                    "description": "IV106",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "IV105": {
    +                    "description": "IV105",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "IV104": {
    +                    "description": "IV104",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "IV103": {
    +                    "description": "IV103",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "IV102": {
    +                    "description": "IV102",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "IV101": {
    +                    "description": "IV101",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "IV100": {
    +                    "description": "IV100",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "IV99": {
    +                    "description": "IV99",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "IV98": {
    +                    "description": "IV98",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "IV97": {
    +                    "description": "IV97",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "IV96": {
    +                    "description": "IV96",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCMCCM0R": {
    +              "description": "context swap register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCMCCM0R": {
    +                    "description": "CSGCMCCM0R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCMCCM1R": {
    +              "description": "context swap register",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCMCCM1R": {
    +                    "description": "CSGCMCCM1R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCMCCM2R": {
    +              "description": "context swap register",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCMCCM2R": {
    +                    "description": "CSGCMCCM2R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCMCCM3R": {
    +              "description": "context swap register",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCMCCM3R": {
    +                    "description": "CSGCMCCM3R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCMCCM4R": {
    +              "description": "context swap register",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCMCCM4R": {
    +                    "description": "CSGCMCCM4R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCMCCM5R": {
    +              "description": "context swap register",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCMCCM5R": {
    +                    "description": "CSGCMCCM5R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCMCCM6R": {
    +              "description": "context swap register",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCMCCM6R": {
    +                    "description": "CSGCMCCM6R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCMCCM7R": {
    +              "description": "context swap register",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCMCCM7R": {
    +                    "description": "CSGCMCCM7R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCM0R": {
    +              "description": "context swap register",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCM0R": {
    +                    "description": "CSGCM0R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCM1R": {
    +              "description": "context swap register",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCM1R": {
    +                    "description": "CSGCM1R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCM2R": {
    +              "description": "context swap register",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCM2R": {
    +                    "description": "CSGCM2R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCM3R": {
    +              "description": "context swap register",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCM3R": {
    +                    "description": "CSGCM3R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCM4R": {
    +              "description": "context swap register",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCM4R": {
    +                    "description": "CSGCM4R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCM5R": {
    +              "description": "context swap register",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCM5R": {
    +                    "description": "CSGCM5R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCM6R": {
    +              "description": "context swap register",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCM6R": {
    +                    "description": "CSGCM6R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CSGCM7R": {
    +              "description": "context swap register",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSGCM7R": {
    +                    "description": "CSGCM7R",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "DCMI": {
    +        "description": "Digital camera interface",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "DCMI enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EDM": {
    +                    "description": "Extended data mode",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "FCRC": {
    +                    "description": "Frame capture rate control",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "VSPOL": {
    +                    "description": "Vertical synchronization\n              polarity",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "HSPOL": {
    +                    "description": "Horizontal synchronization\n              polarity",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PCKPOL": {
    +                    "description": "Pixel clock polarity",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ESS": {
    +                    "description": "Embedded synchronization\n              select",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "JPEG": {
    +                    "description": "JPEG format",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CROP": {
    +                    "description": "Crop feature",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CM": {
    +                    "description": "Capture mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CAPTURE": {
    +                    "description": "Capture enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "FNE": {
    +                    "description": "FIFO not empty",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "VSYNC": {
    +                    "description": "VSYNC",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HSYNC": {
    +                    "description": "HSYNC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RIS": {
    +              "description": "raw interrupt status register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "LINE_RIS": {
    +                    "description": "Line raw interrupt status",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "VSYNC_RIS": {
    +                    "description": "VSYNC raw interrupt status",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ERR_RIS": {
    +                    "description": "Synchronization error raw interrupt\n              status",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OVR_RIS": {
    +                    "description": "Overrun raw interrupt\n              status",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FRAME_RIS": {
    +                    "description": "Capture complete raw interrupt\n              status",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IER": {
    +              "description": "interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LINE_IE": {
    +                    "description": "Line interrupt enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "VSYNC_IE": {
    +                    "description": "VSYNC interrupt enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ERR_IE": {
    +                    "description": "Synchronization error interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OVR_IE": {
    +                    "description": "Overrun interrupt enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FRAME_IE": {
    +                    "description": "Capture complete interrupt\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MIS": {
    +              "description": "masked interrupt status\n          register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "LINE_MIS": {
    +                    "description": "Line masked interrupt\n              status",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "VSYNC_MIS": {
    +                    "description": "VSYNC masked interrupt\n              status",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ERR_MIS": {
    +                    "description": "Synchronization error masked interrupt\n              status",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OVR_MIS": {
    +                    "description": "Overrun masked interrupt\n              status",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FRAME_MIS": {
    +                    "description": "Capture complete masked interrupt\n              status",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ICR": {
    +              "description": "interrupt clear register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "LINE_ISC": {
    +                    "description": "line interrupt status\n              clear",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "VSYNC_ISC": {
    +                    "description": "Vertical synch interrupt status\n              clear",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ERR_ISC": {
    +                    "description": "Synchronization error interrupt status\n              clear",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OVR_ISC": {
    +                    "description": "Overrun interrupt status\n              clear",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FRAME_ISC": {
    +                    "description": "Capture complete interrupt status\n              clear",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ESCR": {
    +              "description": "embedded synchronization code\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEC": {
    +                    "description": "Frame end delimiter code",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "LEC": {
    +                    "description": "Line end delimiter code",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "LSC": {
    +                    "description": "Line start delimiter code",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "FSC": {
    +                    "description": "Frame start delimiter code",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "ESUR": {
    +              "description": "embedded synchronization unmask\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEU": {
    +                    "description": "Frame end delimiter unmask",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "LEU": {
    +                    "description": "Line end delimiter unmask",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "LSU": {
    +                    "description": "Line start delimiter\n              unmask",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "FSU": {
    +                    "description": "Frame start delimiter\n              unmask",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CWSTRT": {
    +              "description": "crop window start",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VST": {
    +                    "description": "Vertical start line count",
    +                    "offset": 16,
    +                    "size": 13
    +                  },
    +                  "HOFFCNT": {
    +                    "description": "Horizontal offset count",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "CWSIZE": {
    +              "description": "crop window size",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VLINE": {
    +                    "description": "Vertical line count",
    +                    "offset": 16,
    +                    "size": 14
    +                  },
    +                  "CAPCNT": {
    +                    "description": "Capture count",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "data register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "Byte3": {
    +                    "description": "Data byte 3",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "Byte2": {
    +                    "description": "Data byte 2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "Byte1": {
    +                    "description": "Data byte 1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "Byte0": {
    +                    "description": "Data byte 0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "FMC": {
    +        "description": "Flexible memory controller",
    +        "children": {
    +          "registers": {
    +            "BCR1": {
    +              "description": "SRAM/NOR-Flash chip-select control register\n          1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 12496,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCLKEN": {
    +                    "description": "CCLKEN",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CBURSTRW": {
    +                    "description": "CBURSTRW",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "ASYNCWAIT": {
    +                    "description": "ASYNCWAIT",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EXTMOD": {
    +                    "description": "EXTMOD",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "WAITEN": {
    +                    "description": "WAITEN",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "WREN": {
    +                    "description": "WREN",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WAITCFG": {
    +                    "description": "WAITCFG",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "WAITPOL": {
    +                    "description": "WAITPOL",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BURSTEN": {
    +                    "description": "BURSTEN",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FACCEN": {
    +                    "description": "FACCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MWID": {
    +                    "description": "MWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "MTYP": {
    +                    "description": "MTYP",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MUXEN": {
    +                    "description": "MUXEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MBKEN": {
    +                    "description": "MBKEN",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BTR1": {
    +              "description": "SRAM/NOR-Flash chip-select timing register\n          1",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "BUSTURN": {
    +                    "description": "BUSTURN",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "BCR2": {
    +              "description": "SRAM/NOR-Flash chip-select control register\n          2",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 12496,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CBURSTRW": {
    +                    "description": "CBURSTRW",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "ASYNCWAIT": {
    +                    "description": "ASYNCWAIT",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EXTMOD": {
    +                    "description": "EXTMOD",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "WAITEN": {
    +                    "description": "WAITEN",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "WREN": {
    +                    "description": "WREN",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WAITCFG": {
    +                    "description": "WAITCFG",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "WRAPMOD": {
    +                    "description": "WRAPMOD",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "WAITPOL": {
    +                    "description": "WAITPOL",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BURSTEN": {
    +                    "description": "BURSTEN",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FACCEN": {
    +                    "description": "FACCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MWID": {
    +                    "description": "MWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "MTYP": {
    +                    "description": "MTYP",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MUXEN": {
    +                    "description": "MUXEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MBKEN": {
    +                    "description": "MBKEN",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BTR2": {
    +              "description": "SRAM/NOR-Flash chip-select timing register\n          2",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "BUSTURN": {
    +                    "description": "BUSTURN",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "BCR3": {
    +              "description": "SRAM/NOR-Flash chip-select control register\n          3",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 12496,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CBURSTRW": {
    +                    "description": "CBURSTRW",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "ASYNCWAIT": {
    +                    "description": "ASYNCWAIT",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EXTMOD": {
    +                    "description": "EXTMOD",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "WAITEN": {
    +                    "description": "WAITEN",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "WREN": {
    +                    "description": "WREN",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WAITCFG": {
    +                    "description": "WAITCFG",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "WRAPMOD": {
    +                    "description": "WRAPMOD",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "WAITPOL": {
    +                    "description": "WAITPOL",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BURSTEN": {
    +                    "description": "BURSTEN",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FACCEN": {
    +                    "description": "FACCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MWID": {
    +                    "description": "MWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "MTYP": {
    +                    "description": "MTYP",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MUXEN": {
    +                    "description": "MUXEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MBKEN": {
    +                    "description": "MBKEN",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BTR3": {
    +              "description": "SRAM/NOR-Flash chip-select timing register\n          3",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "BUSTURN": {
    +                    "description": "BUSTURN",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "BCR4": {
    +              "description": "SRAM/NOR-Flash chip-select control register\n          4",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 12496,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CBURSTRW": {
    +                    "description": "CBURSTRW",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "ASYNCWAIT": {
    +                    "description": "ASYNCWAIT",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EXTMOD": {
    +                    "description": "EXTMOD",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "WAITEN": {
    +                    "description": "WAITEN",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "WREN": {
    +                    "description": "WREN",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WAITCFG": {
    +                    "description": "WAITCFG",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "WRAPMOD": {
    +                    "description": "WRAPMOD",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "WAITPOL": {
    +                    "description": "WAITPOL",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BURSTEN": {
    +                    "description": "BURSTEN",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FACCEN": {
    +                    "description": "FACCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MWID": {
    +                    "description": "MWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "MTYP": {
    +                    "description": "MTYP",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MUXEN": {
    +                    "description": "MUXEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MBKEN": {
    +                    "description": "MBKEN",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BTR4": {
    +              "description": "SRAM/NOR-Flash chip-select timing register\n          4",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "BUSTURN": {
    +                    "description": "BUSTURN",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "PCR2": {
    +              "description": "PC Card/NAND Flash control register\n          2",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 24,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ECCPS": {
    +                    "description": "ECCPS",
    +                    "offset": 17,
    +                    "size": 3
    +                  },
    +                  "TAR": {
    +                    "description": "TAR",
    +                    "offset": 13,
    +                    "size": 4
    +                  },
    +                  "TCLR": {
    +                    "description": "TCLR",
    +                    "offset": 9,
    +                    "size": 4
    +                  },
    +                  "ECCEN": {
    +                    "description": "ECCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PWID": {
    +                    "description": "PWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "PTYP": {
    +                    "description": "PTYP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PBKEN": {
    +                    "description": "PBKEN",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PWAITEN": {
    +                    "description": "PWAITEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR2": {
    +              "description": "FIFO status and interrupt register\n          2",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 64,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEMPT": {
    +                    "description": "FEMPT",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IFEN": {
    +                    "description": "IFEN",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ILEN": {
    +                    "description": "ILEN",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IREN": {
    +                    "description": "IREN",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IFS": {
    +                    "description": "IFS",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ILS": {
    +                    "description": "ILS",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IRS": {
    +                    "description": "IRS",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PMEM2": {
    +              "description": "Common memory space timing register\n          2",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MEMHIZx": {
    +                    "description": "MEMHIZx",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "MEMHOLDx": {
    +                    "description": "MEMHOLDx",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "MEMWAITx": {
    +                    "description": "MEMWAITx",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "MEMSETx": {
    +                    "description": "MEMSETx",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "PATT2": {
    +              "description": "Attribute memory space timing register\n          2",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ATTHIZx": {
    +                    "description": "ATTHIZx",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "ATTHOLDx": {
    +                    "description": "ATTHOLDx",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "ATTWAITx": {
    +                    "description": "ATTWAITx",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ATTSETx": {
    +                    "description": "ATTSETx",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "ECCR2": {
    +              "description": "ECC result register 2",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ECCx": {
    +                    "description": "ECCx",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PCR3": {
    +              "description": "PC Card/NAND Flash control register\n          3",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 24,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ECCPS": {
    +                    "description": "ECCPS",
    +                    "offset": 17,
    +                    "size": 3
    +                  },
    +                  "TAR": {
    +                    "description": "TAR",
    +                    "offset": 13,
    +                    "size": 4
    +                  },
    +                  "TCLR": {
    +                    "description": "TCLR",
    +                    "offset": 9,
    +                    "size": 4
    +                  },
    +                  "ECCEN": {
    +                    "description": "ECCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PWID": {
    +                    "description": "PWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "PTYP": {
    +                    "description": "PTYP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PBKEN": {
    +                    "description": "PBKEN",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PWAITEN": {
    +                    "description": "PWAITEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR3": {
    +              "description": "FIFO status and interrupt register\n          3",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 64,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEMPT": {
    +                    "description": "FEMPT",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IFEN": {
    +                    "description": "IFEN",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ILEN": {
    +                    "description": "ILEN",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IREN": {
    +                    "description": "IREN",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IFS": {
    +                    "description": "IFS",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ILS": {
    +                    "description": "ILS",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IRS": {
    +                    "description": "IRS",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PMEM3": {
    +              "description": "Common memory space timing register\n          3",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MEMHIZx": {
    +                    "description": "MEMHIZx",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "MEMHOLDx": {
    +                    "description": "MEMHOLDx",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "MEMWAITx": {
    +                    "description": "MEMWAITx",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "MEMSETx": {
    +                    "description": "MEMSETx",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "PATT3": {
    +              "description": "Attribute memory space timing register\n          3",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ATTHIZx": {
    +                    "description": "ATTHIZx",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "ATTHOLDx": {
    +                    "description": "ATTHOLDx",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "ATTWAITx": {
    +                    "description": "ATTWAITx",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ATTSETx": {
    +                    "description": "ATTSETx",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "ECCR3": {
    +              "description": "ECC result register 3",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ECCx": {
    +                    "description": "ECCx",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PCR4": {
    +              "description": "PC Card/NAND Flash control register\n          4",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 24,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ECCPS": {
    +                    "description": "ECCPS",
    +                    "offset": 17,
    +                    "size": 3
    +                  },
    +                  "TAR": {
    +                    "description": "TAR",
    +                    "offset": 13,
    +                    "size": 4
    +                  },
    +                  "TCLR": {
    +                    "description": "TCLR",
    +                    "offset": 9,
    +                    "size": 4
    +                  },
    +                  "ECCEN": {
    +                    "description": "ECCEN",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PWID": {
    +                    "description": "PWID",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "PTYP": {
    +                    "description": "PTYP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PBKEN": {
    +                    "description": "PBKEN",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PWAITEN": {
    +                    "description": "PWAITEN",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR4": {
    +              "description": "FIFO status and interrupt register\n          4",
    +              "offset": 164,
    +              "size": 32,
    +              "reset_value": 64,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEMPT": {
    +                    "description": "FEMPT",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IFEN": {
    +                    "description": "IFEN",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ILEN": {
    +                    "description": "ILEN",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IREN": {
    +                    "description": "IREN",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IFS": {
    +                    "description": "IFS",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ILS": {
    +                    "description": "ILS",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IRS": {
    +                    "description": "IRS",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PMEM4": {
    +              "description": "Common memory space timing register\n          4",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MEMHIZx": {
    +                    "description": "MEMHIZx",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "MEMHOLDx": {
    +                    "description": "MEMHOLDx",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "MEMWAITx": {
    +                    "description": "MEMWAITx",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "MEMSETx": {
    +                    "description": "MEMSETx",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "PATT4": {
    +              "description": "Attribute memory space timing register\n          4",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ATTHIZx": {
    +                    "description": "ATTHIZx",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "ATTHOLDx": {
    +                    "description": "ATTHOLDx",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "ATTWAITx": {
    +                    "description": "ATTWAITx",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ATTSETx": {
    +                    "description": "ATTSETx",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "PIO4": {
    +              "description": "I/O space timing register 4",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 4244438268,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IOHIZx": {
    +                    "description": "IOHIZx",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "IOHOLDx": {
    +                    "description": "IOHOLDx",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IOWAITx": {
    +                    "description": "IOWAITx",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IOSETx": {
    +                    "description": "IOSETx",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "BWTR1": {
    +              "description": "SRAM/NOR-Flash write timing registers\n          1",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 268435455,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "BWTR2": {
    +              "description": "SRAM/NOR-Flash write timing registers\n          2",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 268435455,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "BWTR3": {
    +              "description": "SRAM/NOR-Flash write timing registers\n          3",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 268435455,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "BWTR4": {
    +              "description": "SRAM/NOR-Flash write timing registers\n          4",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 268435455,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACCMOD": {
    +                    "description": "ACCMOD",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DATLAT": {
    +                    "description": "DATLAT",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "CLKDIV": {
    +                    "description": "CLKDIV",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "DATAST": {
    +                    "description": "DATAST",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ADDHLD": {
    +                    "description": "ADDHLD",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ADDSET": {
    +                    "description": "ADDSET",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "SDCR1": {
    +              "description": "SDRAM Control Register 1",
    +              "offset": 320,
    +              "size": 32,
    +              "reset_value": 720,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NC": {
    +                    "description": "Number of column address\n              bits",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "NR": {
    +                    "description": "Number of row address bits",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MWID": {
    +                    "description": "Memory data bus width",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "NB": {
    +                    "description": "Number of internal banks",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CAS": {
    +                    "description": "CAS latency",
    +                    "offset": 7,
    +                    "size": 2
    +                  },
    +                  "WP": {
    +                    "description": "Write protection",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SDCLK": {
    +                    "description": "SDRAM clock configuration",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "RBURST": {
    +                    "description": "Burst read",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "RPIPE": {
    +                    "description": "Read pipe",
    +                    "offset": 13,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "SDCR2": {
    +              "description": "SDRAM Control Register 2",
    +              "offset": 324,
    +              "size": 32,
    +              "reset_value": 720,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NC": {
    +                    "description": "Number of column address\n              bits",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "NR": {
    +                    "description": "Number of row address bits",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MWID": {
    +                    "description": "Memory data bus width",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "NB": {
    +                    "description": "Number of internal banks",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CAS": {
    +                    "description": "CAS latency",
    +                    "offset": 7,
    +                    "size": 2
    +                  },
    +                  "WP": {
    +                    "description": "Write protection",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SDCLK": {
    +                    "description": "SDRAM clock configuration",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "RBURST": {
    +                    "description": "Burst read",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "RPIPE": {
    +                    "description": "Read pipe",
    +                    "offset": 13,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "SDTR1": {
    +              "description": "SDRAM Timing register 1",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 268435455,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TMRD": {
    +                    "description": "Load Mode Register to\n              Active",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "TXSR": {
    +                    "description": "Exit self-refresh delay",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "TRAS": {
    +                    "description": "Self refresh time",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "TRC": {
    +                    "description": "Row cycle delay",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "TWR": {
    +                    "description": "Recovery delay",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "TRP": {
    +                    "description": "Row precharge delay",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "TRCD": {
    +                    "description": "Row to column delay",
    +                    "offset": 24,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "SDTR2": {
    +              "description": "SDRAM Timing register 2",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 268435455,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TMRD": {
    +                    "description": "Load Mode Register to\n              Active",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "TXSR": {
    +                    "description": "Exit self-refresh delay",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "TRAS": {
    +                    "description": "Self refresh time",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "TRC": {
    +                    "description": "Row cycle delay",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "TWR": {
    +                    "description": "Recovery delay",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "TRP": {
    +                    "description": "Row precharge delay",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "TRCD": {
    +                    "description": "Row to column delay",
    +                    "offset": 24,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "SDCMR": {
    +              "description": "SDRAM Command Mode register",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MODE": {
    +                    "description": "Command mode",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "access": "write-only"
    +                  },
    +                  "CTB2": {
    +                    "description": "Command target bank 2",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CTB1": {
    +                    "description": "Command target bank 1",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "NRFS": {
    +                    "description": "Number of Auto-refresh",
    +                    "offset": 5,
    +                    "size": 4
    +                  },
    +                  "MRD": {
    +                    "description": "Mode Register definition",
    +                    "offset": 9,
    +                    "size": 13
    +                  }
    +                }
    +              }
    +            },
    +            "SDRTR": {
    +              "description": "SDRAM Refresh Timer register",
    +              "offset": 340,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CRE": {
    +                    "description": "Clear Refresh error flag",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "COUNT": {
    +                    "description": "Refresh Timer Count",
    +                    "offset": 1,
    +                    "size": 13
    +                  },
    +                  "REIE": {
    +                    "description": "RES Interrupt Enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SDSR": {
    +              "description": "SDRAM Status register",
    +              "offset": 344,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RE": {
    +                    "description": "Refresh error flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MODES1": {
    +                    "description": "Status Mode for Bank 1",
    +                    "offset": 1,
    +                    "size": 2
    +                  },
    +                  "MODES2": {
    +                    "description": "Status Mode for Bank 2",
    +                    "offset": 3,
    +                    "size": 2
    +                  },
    +                  "BUSY": {
    +                    "description": "Busy status",
    +                    "offset": 5,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "DBG": {
    +        "description": "Debug support",
    +        "children": {
    +          "registers": {
    +            "DBGMCU_IDCODE": {
    +              "description": "IDCODE",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 268461073,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DEV_ID": {
    +                    "description": "DEV_ID",
    +                    "offset": 0,
    +                    "size": 12
    +                  },
    +                  "REV_ID": {
    +                    "description": "REV_ID",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DBGMCU_CR": {
    +              "description": "Control Register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBG_SLEEP": {
    +                    "description": "DBG_SLEEP",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DBG_STOP": {
    +                    "description": "DBG_STOP",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DBG_STANDBY": {
    +                    "description": "DBG_STANDBY",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TRACE_IOEN": {
    +                    "description": "TRACE_IOEN",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TRACE_MODE": {
    +                    "description": "TRACE_MODE",
    +                    "offset": 6,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "DBGMCU_APB1_FZ": {
    +              "description": "Debug MCU APB1 Freeze registe",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBG_TIM2_STOP": {
    +                    "description": "DBG_TIM2_STOP",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM3_STOP": {
    +                    "description": "DBG_TIM3 _STOP",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM4_STOP": {
    +                    "description": "DBG_TIM4_STOP",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM5_STOP": {
    +                    "description": "DBG_TIM5_STOP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM6_STOP": {
    +                    "description": "DBG_TIM6_STOP",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM7_STOP": {
    +                    "description": "DBG_TIM7_STOP",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM12_STOP": {
    +                    "description": "DBG_TIM12_STOP",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM13_STOP": {
    +                    "description": "DBG_TIM13_STOP",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM14_STOP": {
    +                    "description": "DBG_TIM14_STOP",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DBG_WWDG_STOP": {
    +                    "description": "DBG_WWDG_STOP",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "DBG_IWDEG_STOP": {
    +                    "description": "DBG_IWDEG_STOP",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "DBG_J2C1_SMBUS_TIMEOUT": {
    +                    "description": "DBG_J2C1_SMBUS_TIMEOUT",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "DBG_J2C2_SMBUS_TIMEOUT": {
    +                    "description": "DBG_J2C2_SMBUS_TIMEOUT",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "DBG_J2C3SMBUS_TIMEOUT": {
    +                    "description": "DBG_J2C3SMBUS_TIMEOUT",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "DBG_CAN1_STOP": {
    +                    "description": "DBG_CAN1_STOP",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "DBG_CAN2_STOP": {
    +                    "description": "DBG_CAN2_STOP",
    +                    "offset": 26,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DBGMCU_APB2_FZ": {
    +              "description": "Debug MCU APB2 Freeze registe",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBG_TIM1_STOP": {
    +                    "description": "TIM1 counter stopped when core is\n              halted",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM8_STOP": {
    +                    "description": "TIM8 counter stopped when core is\n              halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM9_STOP": {
    +                    "description": "TIM9 counter stopped when core is\n              halted",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM10_STOP": {
    +                    "description": "TIM10 counter stopped when core is\n              halted",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "DBG_TIM11_STOP": {
    +                    "description": "TIM11 counter stopped when core is\n              halted",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "DMA2": {
    +        "description": "DMA controller",
    +        "children": {
    +          "registers": {
    +            "LISR": {
    +              "description": "low interrupt status register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TCIF3": {
    +                    "description": "Stream x transfer complete interrupt\n              flag (x = 3..0)",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "HTIF3": {
    +                    "description": "Stream x half transfer interrupt flag\n              (x=3..0)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "TEIF3": {
    +                    "description": "Stream x transfer error interrupt flag\n              (x=3..0)",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "DMEIF3": {
    +                    "description": "Stream x direct mode error interrupt\n              flag (x=3..0)",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FEIF3": {
    +                    "description": "Stream x FIFO error interrupt flag\n              (x=3..0)",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "TCIF2": {
    +                    "description": "Stream x transfer complete interrupt\n              flag (x = 3..0)",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "HTIF2": {
    +                    "description": "Stream x half transfer interrupt flag\n              (x=3..0)",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "TEIF2": {
    +                    "description": "Stream x transfer error interrupt flag\n              (x=3..0)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DMEIF2": {
    +                    "description": "Stream x direct mode error interrupt\n              flag (x=3..0)",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FEIF2": {
    +                    "description": "Stream x FIFO error interrupt flag\n              (x=3..0)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TCIF1": {
    +                    "description": "Stream x transfer complete interrupt\n              flag (x = 3..0)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "HTIF1": {
    +                    "description": "Stream x half transfer interrupt flag\n              (x=3..0)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TEIF1": {
    +                    "description": "Stream x transfer error interrupt flag\n              (x=3..0)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DMEIF1": {
    +                    "description": "Stream x direct mode error interrupt\n              flag (x=3..0)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FEIF1": {
    +                    "description": "Stream x FIFO error interrupt flag\n              (x=3..0)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TCIF0": {
    +                    "description": "Stream x transfer complete interrupt\n              flag (x = 3..0)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "HTIF0": {
    +                    "description": "Stream x half transfer interrupt flag\n              (x=3..0)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TEIF0": {
    +                    "description": "Stream x transfer error interrupt flag\n              (x=3..0)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DMEIF0": {
    +                    "description": "Stream x direct mode error interrupt\n              flag (x=3..0)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FEIF0": {
    +                    "description": "Stream x FIFO error interrupt flag\n              (x=3..0)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HISR": {
    +              "description": "high interrupt status register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TCIF7": {
    +                    "description": "Stream x transfer complete interrupt\n              flag (x=7..4)",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "HTIF7": {
    +                    "description": "Stream x half transfer interrupt flag\n              (x=7..4)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "TEIF7": {
    +                    "description": "Stream x transfer error interrupt flag\n              (x=7..4)",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "DMEIF7": {
    +                    "description": "Stream x direct mode error interrupt\n              flag (x=7..4)",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FEIF7": {
    +                    "description": "Stream x FIFO error interrupt flag\n              (x=7..4)",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "TCIF6": {
    +                    "description": "Stream x transfer complete interrupt\n              flag (x=7..4)",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "HTIF6": {
    +                    "description": "Stream x half transfer interrupt flag\n              (x=7..4)",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "TEIF6": {
    +                    "description": "Stream x transfer error interrupt flag\n              (x=7..4)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DMEIF6": {
    +                    "description": "Stream x direct mode error interrupt\n              flag (x=7..4)",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FEIF6": {
    +                    "description": "Stream x FIFO error interrupt flag\n              (x=7..4)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TCIF5": {
    +                    "description": "Stream x transfer complete interrupt\n              flag (x=7..4)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "HTIF5": {
    +                    "description": "Stream x half transfer interrupt flag\n              (x=7..4)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TEIF5": {
    +                    "description": "Stream x transfer error interrupt flag\n              (x=7..4)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DMEIF5": {
    +                    "description": "Stream x direct mode error interrupt\n              flag (x=7..4)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FEIF5": {
    +                    "description": "Stream x FIFO error interrupt flag\n              (x=7..4)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TCIF4": {
    +                    "description": "Stream x transfer complete interrupt\n              flag (x=7..4)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "HTIF4": {
    +                    "description": "Stream x half transfer interrupt flag\n              (x=7..4)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TEIF4": {
    +                    "description": "Stream x transfer error interrupt flag\n              (x=7..4)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DMEIF4": {
    +                    "description": "Stream x direct mode error interrupt\n              flag (x=7..4)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FEIF4": {
    +                    "description": "Stream x FIFO error interrupt flag\n              (x=7..4)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "LIFCR": {
    +              "description": "low interrupt flag clear\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTCIF3": {
    +                    "description": "Stream x clear transfer complete\n              interrupt flag (x = 3..0)",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "CHTIF3": {
    +                    "description": "Stream x clear half transfer interrupt\n              flag (x = 3..0)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "CTEIF3": {
    +                    "description": "Stream x clear transfer error interrupt\n              flag (x = 3..0)",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "CDMEIF3": {
    +                    "description": "Stream x clear direct mode error\n              interrupt flag (x = 3..0)",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "CFEIF3": {
    +                    "description": "Stream x clear FIFO error interrupt flag\n              (x = 3..0)",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "CTCIF2": {
    +                    "description": "Stream x clear transfer complete\n              interrupt flag (x = 3..0)",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "CHTIF2": {
    +                    "description": "Stream x clear half transfer interrupt\n              flag (x = 3..0)",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CTEIF2": {
    +                    "description": "Stream x clear transfer error interrupt\n              flag (x = 3..0)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "CDMEIF2": {
    +                    "description": "Stream x clear direct mode error\n              interrupt flag (x = 3..0)",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "CFEIF2": {
    +                    "description": "Stream x clear FIFO error interrupt flag\n              (x = 3..0)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "CTCIF1": {
    +                    "description": "Stream x clear transfer complete\n              interrupt flag (x = 3..0)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CHTIF1": {
    +                    "description": "Stream x clear half transfer interrupt\n              flag (x = 3..0)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CTEIF1": {
    +                    "description": "Stream x clear transfer error interrupt\n              flag (x = 3..0)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CDMEIF1": {
    +                    "description": "Stream x clear direct mode error\n              interrupt flag (x = 3..0)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CFEIF1": {
    +                    "description": "Stream x clear FIFO error interrupt flag\n              (x = 3..0)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CTCIF0": {
    +                    "description": "Stream x clear transfer complete\n              interrupt flag (x = 3..0)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CHTIF0": {
    +                    "description": "Stream x clear half transfer interrupt\n              flag (x = 3..0)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CTEIF0": {
    +                    "description": "Stream x clear transfer error interrupt\n              flag (x = 3..0)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CDMEIF0": {
    +                    "description": "Stream x clear direct mode error\n              interrupt flag (x = 3..0)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CFEIF0": {
    +                    "description": "Stream x clear FIFO error interrupt flag\n              (x = 3..0)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HIFCR": {
    +              "description": "high interrupt flag clear\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTCIF7": {
    +                    "description": "Stream x clear transfer complete\n              interrupt flag (x = 7..4)",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "CHTIF7": {
    +                    "description": "Stream x clear half transfer interrupt\n              flag (x = 7..4)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "CTEIF7": {
    +                    "description": "Stream x clear transfer error interrupt\n              flag (x = 7..4)",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "CDMEIF7": {
    +                    "description": "Stream x clear direct mode error\n              interrupt flag (x = 7..4)",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "CFEIF7": {
    +                    "description": "Stream x clear FIFO error interrupt flag\n              (x = 7..4)",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "CTCIF6": {
    +                    "description": "Stream x clear transfer complete\n              interrupt flag (x = 7..4)",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "CHTIF6": {
    +                    "description": "Stream x clear half transfer interrupt\n              flag (x = 7..4)",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CTEIF6": {
    +                    "description": "Stream x clear transfer error interrupt\n              flag (x = 7..4)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "CDMEIF6": {
    +                    "description": "Stream x clear direct mode error\n              interrupt flag (x = 7..4)",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "CFEIF6": {
    +                    "description": "Stream x clear FIFO error interrupt flag\n              (x = 7..4)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "CTCIF5": {
    +                    "description": "Stream x clear transfer complete\n              interrupt flag (x = 7..4)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CHTIF5": {
    +                    "description": "Stream x clear half transfer interrupt\n              flag (x = 7..4)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CTEIF5": {
    +                    "description": "Stream x clear transfer error interrupt\n              flag (x = 7..4)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CDMEIF5": {
    +                    "description": "Stream x clear direct mode error\n              interrupt flag (x = 7..4)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CFEIF5": {
    +                    "description": "Stream x clear FIFO error interrupt flag\n              (x = 7..4)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CTCIF4": {
    +                    "description": "Stream x clear transfer complete\n              interrupt flag (x = 7..4)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CHTIF4": {
    +                    "description": "Stream x clear half transfer interrupt\n              flag (x = 7..4)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CTEIF4": {
    +                    "description": "Stream x clear transfer error interrupt\n              flag (x = 7..4)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CDMEIF4": {
    +                    "description": "Stream x clear direct mode error\n              interrupt flag (x = 7..4)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CFEIF4": {
    +                    "description": "Stream x clear FIFO error interrupt flag\n              (x = 7..4)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "S0CR": {
    +              "description": "stream x configuration\n          register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHSEL": {
    +                    "description": "Channel selection",
    +                    "offset": 25,
    +                    "size": 3
    +                  },
    +                  "MBURST": {
    +                    "description": "Memory burst transfer\n              configuration",
    +                    "offset": 23,
    +                    "size": 2
    +                  },
    +                  "PBURST": {
    +                    "description": "Peripheral burst transfer\n              configuration",
    +                    "offset": 21,
    +                    "size": 2
    +                  },
    +                  "CT": {
    +                    "description": "Current target (only in double buffer\n              mode)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DBM": {
    +                    "description": "Double buffer mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "PL": {
    +                    "description": "Priority level",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "PINCOS": {
    +                    "description": "Peripheral increment offset\n              size",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory data size",
    +                    "offset": 13,
    +                    "size": 2
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral data size",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "PFCTRL": {
    +                    "description": "Peripheral flow controller",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half transfer interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DMEIE": {
    +                    "description": "Direct mode error interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "Stream enable / flag stream ready when\n              read low",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "S0NDTR": {
    +              "description": "stream x number of data\n          register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data items to\n              transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "S0PAR": {
    +              "description": "stream x peripheral address\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S0M0AR": {
    +              "description": "stream x memory 0 address\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M0A": {
    +                    "description": "Memory 0 address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S0M1AR": {
    +              "description": "stream x memory 1 address\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M1A": {
    +                    "description": "Memory 1 address (used in case of Double\n              buffer mode)",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S0FCR": {
    +              "description": "stream x FIFO control register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 33,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEIE": {
    +                    "description": "FIFO error interrupt\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FS": {
    +                    "description": "FIFO status",
    +                    "offset": 3,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "DMDIS": {
    +                    "description": "Direct mode disable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FTH": {
    +                    "description": "FIFO threshold selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "S1CR": {
    +              "description": "stream x configuration\n          register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHSEL": {
    +                    "description": "Channel selection",
    +                    "offset": 25,
    +                    "size": 3
    +                  },
    +                  "MBURST": {
    +                    "description": "Memory burst transfer\n              configuration",
    +                    "offset": 23,
    +                    "size": 2
    +                  },
    +                  "PBURST": {
    +                    "description": "Peripheral burst transfer\n              configuration",
    +                    "offset": 21,
    +                    "size": 2
    +                  },
    +                  "ACK": {
    +                    "description": "ACK",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CT": {
    +                    "description": "Current target (only in double buffer\n              mode)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DBM": {
    +                    "description": "Double buffer mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "PL": {
    +                    "description": "Priority level",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "PINCOS": {
    +                    "description": "Peripheral increment offset\n              size",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory data size",
    +                    "offset": 13,
    +                    "size": 2
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral data size",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "PFCTRL": {
    +                    "description": "Peripheral flow controller",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half transfer interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DMEIE": {
    +                    "description": "Direct mode error interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "Stream enable / flag stream ready when\n              read low",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "S1NDTR": {
    +              "description": "stream x number of data\n          register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data items to\n              transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "S1PAR": {
    +              "description": "stream x peripheral address\n          register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S1M0AR": {
    +              "description": "stream x memory 0 address\n          register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M0A": {
    +                    "description": "Memory 0 address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S1M1AR": {
    +              "description": "stream x memory 1 address\n          register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M1A": {
    +                    "description": "Memory 1 address (used in case of Double\n              buffer mode)",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S1FCR": {
    +              "description": "stream x FIFO control register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 33,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEIE": {
    +                    "description": "FIFO error interrupt\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FS": {
    +                    "description": "FIFO status",
    +                    "offset": 3,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "DMDIS": {
    +                    "description": "Direct mode disable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FTH": {
    +                    "description": "FIFO threshold selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "S2CR": {
    +              "description": "stream x configuration\n          register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHSEL": {
    +                    "description": "Channel selection",
    +                    "offset": 25,
    +                    "size": 3
    +                  },
    +                  "MBURST": {
    +                    "description": "Memory burst transfer\n              configuration",
    +                    "offset": 23,
    +                    "size": 2
    +                  },
    +                  "PBURST": {
    +                    "description": "Peripheral burst transfer\n              configuration",
    +                    "offset": 21,
    +                    "size": 2
    +                  },
    +                  "ACK": {
    +                    "description": "ACK",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CT": {
    +                    "description": "Current target (only in double buffer\n              mode)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DBM": {
    +                    "description": "Double buffer mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "PL": {
    +                    "description": "Priority level",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "PINCOS": {
    +                    "description": "Peripheral increment offset\n              size",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory data size",
    +                    "offset": 13,
    +                    "size": 2
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral data size",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "PFCTRL": {
    +                    "description": "Peripheral flow controller",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half transfer interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DMEIE": {
    +                    "description": "Direct mode error interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "Stream enable / flag stream ready when\n              read low",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "S2NDTR": {
    +              "description": "stream x number of data\n          register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data items to\n              transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "S2PAR": {
    +              "description": "stream x peripheral address\n          register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S2M0AR": {
    +              "description": "stream x memory 0 address\n          register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M0A": {
    +                    "description": "Memory 0 address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S2M1AR": {
    +              "description": "stream x memory 1 address\n          register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M1A": {
    +                    "description": "Memory 1 address (used in case of Double\n              buffer mode)",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S2FCR": {
    +              "description": "stream x FIFO control register",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 33,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEIE": {
    +                    "description": "FIFO error interrupt\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FS": {
    +                    "description": "FIFO status",
    +                    "offset": 3,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "DMDIS": {
    +                    "description": "Direct mode disable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FTH": {
    +                    "description": "FIFO threshold selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "S3CR": {
    +              "description": "stream x configuration\n          register",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHSEL": {
    +                    "description": "Channel selection",
    +                    "offset": 25,
    +                    "size": 3
    +                  },
    +                  "MBURST": {
    +                    "description": "Memory burst transfer\n              configuration",
    +                    "offset": 23,
    +                    "size": 2
    +                  },
    +                  "PBURST": {
    +                    "description": "Peripheral burst transfer\n              configuration",
    +                    "offset": 21,
    +                    "size": 2
    +                  },
    +                  "ACK": {
    +                    "description": "ACK",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CT": {
    +                    "description": "Current target (only in double buffer\n              mode)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DBM": {
    +                    "description": "Double buffer mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "PL": {
    +                    "description": "Priority level",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "PINCOS": {
    +                    "description": "Peripheral increment offset\n              size",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory data size",
    +                    "offset": 13,
    +                    "size": 2
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral data size",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "PFCTRL": {
    +                    "description": "Peripheral flow controller",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half transfer interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DMEIE": {
    +                    "description": "Direct mode error interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "Stream enable / flag stream ready when\n              read low",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "S3NDTR": {
    +              "description": "stream x number of data\n          register",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data items to\n              transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "S3PAR": {
    +              "description": "stream x peripheral address\n          register",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S3M0AR": {
    +              "description": "stream x memory 0 address\n          register",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M0A": {
    +                    "description": "Memory 0 address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S3M1AR": {
    +              "description": "stream x memory 1 address\n          register",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M1A": {
    +                    "description": "Memory 1 address (used in case of Double\n              buffer mode)",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S3FCR": {
    +              "description": "stream x FIFO control register",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 33,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEIE": {
    +                    "description": "FIFO error interrupt\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FS": {
    +                    "description": "FIFO status",
    +                    "offset": 3,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "DMDIS": {
    +                    "description": "Direct mode disable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FTH": {
    +                    "description": "FIFO threshold selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "S4CR": {
    +              "description": "stream x configuration\n          register",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHSEL": {
    +                    "description": "Channel selection",
    +                    "offset": 25,
    +                    "size": 3
    +                  },
    +                  "MBURST": {
    +                    "description": "Memory burst transfer\n              configuration",
    +                    "offset": 23,
    +                    "size": 2
    +                  },
    +                  "PBURST": {
    +                    "description": "Peripheral burst transfer\n              configuration",
    +                    "offset": 21,
    +                    "size": 2
    +                  },
    +                  "ACK": {
    +                    "description": "ACK",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CT": {
    +                    "description": "Current target (only in double buffer\n              mode)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DBM": {
    +                    "description": "Double buffer mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "PL": {
    +                    "description": "Priority level",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "PINCOS": {
    +                    "description": "Peripheral increment offset\n              size",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory data size",
    +                    "offset": 13,
    +                    "size": 2
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral data size",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "PFCTRL": {
    +                    "description": "Peripheral flow controller",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half transfer interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DMEIE": {
    +                    "description": "Direct mode error interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "Stream enable / flag stream ready when\n              read low",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "S4NDTR": {
    +              "description": "stream x number of data\n          register",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data items to\n              transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "S4PAR": {
    +              "description": "stream x peripheral address\n          register",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S4M0AR": {
    +              "description": "stream x memory 0 address\n          register",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M0A": {
    +                    "description": "Memory 0 address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S4M1AR": {
    +              "description": "stream x memory 1 address\n          register",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M1A": {
    +                    "description": "Memory 1 address (used in case of Double\n              buffer mode)",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S4FCR": {
    +              "description": "stream x FIFO control register",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 33,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEIE": {
    +                    "description": "FIFO error interrupt\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FS": {
    +                    "description": "FIFO status",
    +                    "offset": 3,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "DMDIS": {
    +                    "description": "Direct mode disable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FTH": {
    +                    "description": "FIFO threshold selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "S5CR": {
    +              "description": "stream x configuration\n          register",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHSEL": {
    +                    "description": "Channel selection",
    +                    "offset": 25,
    +                    "size": 3
    +                  },
    +                  "MBURST": {
    +                    "description": "Memory burst transfer\n              configuration",
    +                    "offset": 23,
    +                    "size": 2
    +                  },
    +                  "PBURST": {
    +                    "description": "Peripheral burst transfer\n              configuration",
    +                    "offset": 21,
    +                    "size": 2
    +                  },
    +                  "ACK": {
    +                    "description": "ACK",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CT": {
    +                    "description": "Current target (only in double buffer\n              mode)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DBM": {
    +                    "description": "Double buffer mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "PL": {
    +                    "description": "Priority level",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "PINCOS": {
    +                    "description": "Peripheral increment offset\n              size",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory data size",
    +                    "offset": 13,
    +                    "size": 2
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral data size",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "PFCTRL": {
    +                    "description": "Peripheral flow controller",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half transfer interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DMEIE": {
    +                    "description": "Direct mode error interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "Stream enable / flag stream ready when\n              read low",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "S5NDTR": {
    +              "description": "stream x number of data\n          register",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data items to\n              transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "S5PAR": {
    +              "description": "stream x peripheral address\n          register",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S5M0AR": {
    +              "description": "stream x memory 0 address\n          register",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M0A": {
    +                    "description": "Memory 0 address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S5M1AR": {
    +              "description": "stream x memory 1 address\n          register",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M1A": {
    +                    "description": "Memory 1 address (used in case of Double\n              buffer mode)",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S5FCR": {
    +              "description": "stream x FIFO control register",
    +              "offset": 156,
    +              "size": 32,
    +              "reset_value": 33,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEIE": {
    +                    "description": "FIFO error interrupt\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FS": {
    +                    "description": "FIFO status",
    +                    "offset": 3,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "DMDIS": {
    +                    "description": "Direct mode disable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FTH": {
    +                    "description": "FIFO threshold selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "S6CR": {
    +              "description": "stream x configuration\n          register",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHSEL": {
    +                    "description": "Channel selection",
    +                    "offset": 25,
    +                    "size": 3
    +                  },
    +                  "MBURST": {
    +                    "description": "Memory burst transfer\n              configuration",
    +                    "offset": 23,
    +                    "size": 2
    +                  },
    +                  "PBURST": {
    +                    "description": "Peripheral burst transfer\n              configuration",
    +                    "offset": 21,
    +                    "size": 2
    +                  },
    +                  "ACK": {
    +                    "description": "ACK",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CT": {
    +                    "description": "Current target (only in double buffer\n              mode)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DBM": {
    +                    "description": "Double buffer mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "PL": {
    +                    "description": "Priority level",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "PINCOS": {
    +                    "description": "Peripheral increment offset\n              size",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory data size",
    +                    "offset": 13,
    +                    "size": 2
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral data size",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "PFCTRL": {
    +                    "description": "Peripheral flow controller",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half transfer interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DMEIE": {
    +                    "description": "Direct mode error interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "Stream enable / flag stream ready when\n              read low",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "S6NDTR": {
    +              "description": "stream x number of data\n          register",
    +              "offset": 164,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data items to\n              transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "S6PAR": {
    +              "description": "stream x peripheral address\n          register",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S6M0AR": {
    +              "description": "stream x memory 0 address\n          register",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M0A": {
    +                    "description": "Memory 0 address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S6M1AR": {
    +              "description": "stream x memory 1 address\n          register",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M1A": {
    +                    "description": "Memory 1 address (used in case of Double\n              buffer mode)",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S6FCR": {
    +              "description": "stream x FIFO control register",
    +              "offset": 180,
    +              "size": 32,
    +              "reset_value": 33,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEIE": {
    +                    "description": "FIFO error interrupt\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FS": {
    +                    "description": "FIFO status",
    +                    "offset": 3,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "DMDIS": {
    +                    "description": "Direct mode disable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FTH": {
    +                    "description": "FIFO threshold selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "S7CR": {
    +              "description": "stream x configuration\n          register",
    +              "offset": 184,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHSEL": {
    +                    "description": "Channel selection",
    +                    "offset": 25,
    +                    "size": 3
    +                  },
    +                  "MBURST": {
    +                    "description": "Memory burst transfer\n              configuration",
    +                    "offset": 23,
    +                    "size": 2
    +                  },
    +                  "PBURST": {
    +                    "description": "Peripheral burst transfer\n              configuration",
    +                    "offset": 21,
    +                    "size": 2
    +                  },
    +                  "ACK": {
    +                    "description": "ACK",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CT": {
    +                    "description": "Current target (only in double buffer\n              mode)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DBM": {
    +                    "description": "Double buffer mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "PL": {
    +                    "description": "Priority level",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "PINCOS": {
    +                    "description": "Peripheral increment offset\n              size",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MSIZE": {
    +                    "description": "Memory data size",
    +                    "offset": 13,
    +                    "size": 2
    +                  },
    +                  "PSIZE": {
    +                    "description": "Peripheral data size",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "MINC": {
    +                    "description": "Memory increment mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PINC": {
    +                    "description": "Peripheral increment mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CIRC": {
    +                    "description": "Circular mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Data transfer direction",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "PFCTRL": {
    +                    "description": "Peripheral flow controller",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "HTIE": {
    +                    "description": "Half transfer interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DMEIE": {
    +                    "description": "Direct mode error interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "Stream enable / flag stream ready when\n              read low",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "S7NDTR": {
    +              "description": "stream x number of data\n          register",
    +              "offset": 188,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NDT": {
    +                    "description": "Number of data items to\n              transfer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "S7PAR": {
    +              "description": "stream x peripheral address\n          register",
    +              "offset": 192,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PA": {
    +                    "description": "Peripheral address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S7M0AR": {
    +              "description": "stream x memory 0 address\n          register",
    +              "offset": 196,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M0A": {
    +                    "description": "Memory 0 address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S7M1AR": {
    +              "description": "stream x memory 1 address\n          register",
    +              "offset": 200,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M1A": {
    +                    "description": "Memory 1 address (used in case of Double\n              buffer mode)",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "S7FCR": {
    +              "description": "stream x FIFO control register",
    +              "offset": 204,
    +              "size": 32,
    +              "reset_value": 33,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FEIE": {
    +                    "description": "FIFO error interrupt\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FS": {
    +                    "description": "FIFO status",
    +                    "offset": 3,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "DMDIS": {
    +                    "description": "Direct mode disable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FTH": {
    +                    "description": "FIFO threshold selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SCB_ACTRL": {
    +        "description": "System control block ACTLR",
    +        "children": {
    +          "registers": {
    +            "ACTRL": {
    +              "description": "Auxiliary control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DISMCYCINT": {
    +                    "description": "DISMCYCINT",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DISDEFWBUF": {
    +                    "description": "DISDEFWBUF",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DISFOLD": {
    +                    "description": "DISFOLD",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DISFPCA": {
    +                    "description": "DISFPCA",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DISOOFP": {
    +                    "description": "DISOOFP",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "RCC": {
    +        "description": "Reset and clock control",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "clock control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 131,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PLLI2SRDY": {
    +                    "description": "PLLI2S clock ready flag",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PLLI2SON": {
    +                    "description": "PLLI2S enable",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "PLLRDY": {
    +                    "description": "Main PLL (PLL) clock ready\n              flag",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PLLON": {
    +                    "description": "Main PLL (PLL) enable",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "CSSON": {
    +                    "description": "Clock security system\n              enable",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "HSEBYP": {
    +                    "description": "HSE clock bypass",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "HSERDY": {
    +                    "description": "HSE clock ready flag",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HSEON": {
    +                    "description": "HSE clock enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "HSICAL": {
    +                    "description": "Internal high-speed clock\n              calibration",
    +                    "offset": 8,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "HSITRIM": {
    +                    "description": "Internal high-speed clock\n              trimming",
    +                    "offset": 3,
    +                    "size": 5
    +                  },
    +                  "HSIRDY": {
    +                    "description": "Internal high-speed clock ready\n              flag",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HSION": {
    +                    "description": "Internal high-speed clock\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PLLCFGR": {
    +              "description": "PLL configuration register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 603992080,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PLLQ3": {
    +                    "description": "Main PLL (PLL) division factor for USB\n              OTG FS, SDIO and random number generator\n              clocks",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "PLLQ2": {
    +                    "description": "Main PLL (PLL) division factor for USB\n              OTG FS, SDIO and random number generator\n              clocks",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "PLLQ1": {
    +                    "description": "Main PLL (PLL) division factor for USB\n              OTG FS, SDIO and random number generator\n              clocks",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "PLLQ0": {
    +                    "description": "Main PLL (PLL) division factor for USB\n              OTG FS, SDIO and random number generator\n              clocks",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "PLLSRC": {
    +                    "description": "Main PLL(PLL) and audio PLL (PLLI2S)\n              entry clock source",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "PLLP1": {
    +                    "description": "Main PLL (PLL) division factor for main\n              system clock",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "PLLP0": {
    +                    "description": "Main PLL (PLL) division factor for main\n              system clock",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "PLLN8": {
    +                    "description": "Main PLL (PLL) multiplication factor for\n              VCO",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PLLN7": {
    +                    "description": "Main PLL (PLL) multiplication factor for\n              VCO",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "PLLN6": {
    +                    "description": "Main PLL (PLL) multiplication factor for\n              VCO",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "PLLN5": {
    +                    "description": "Main PLL (PLL) multiplication factor for\n              VCO",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "PLLN4": {
    +                    "description": "Main PLL (PLL) multiplication factor for\n              VCO",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PLLN3": {
    +                    "description": "Main PLL (PLL) multiplication factor for\n              VCO",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PLLN2": {
    +                    "description": "Main PLL (PLL) multiplication factor for\n              VCO",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PLLN1": {
    +                    "description": "Main PLL (PLL) multiplication factor for\n              VCO",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PLLN0": {
    +                    "description": "Main PLL (PLL) multiplication factor for\n              VCO",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PLLM5": {
    +                    "description": "Division factor for the main PLL (PLL)\n              and audio PLL (PLLI2S) input clock",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PLLM4": {
    +                    "description": "Division factor for the main PLL (PLL)\n              and audio PLL (PLLI2S) input clock",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "PLLM3": {
    +                    "description": "Division factor for the main PLL (PLL)\n              and audio PLL (PLLI2S) input clock",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PLLM2": {
    +                    "description": "Division factor for the main PLL (PLL)\n              and audio PLL (PLLI2S) input clock",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PLLM1": {
    +                    "description": "Division factor for the main PLL (PLL)\n              and audio PLL (PLLI2S) input clock",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PLLM0": {
    +                    "description": "Division factor for the main PLL (PLL)\n              and audio PLL (PLLI2S) input clock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CFGR": {
    +              "description": "clock configuration register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MCO2": {
    +                    "description": "Microcontroller clock output\n              2",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "MCO2PRE": {
    +                    "description": "MCO2 prescaler",
    +                    "offset": 27,
    +                    "size": 3
    +                  },
    +                  "MCO1PRE": {
    +                    "description": "MCO1 prescaler",
    +                    "offset": 24,
    +                    "size": 3
    +                  },
    +                  "I2SSRC": {
    +                    "description": "I2S clock selection",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "MCO1": {
    +                    "description": "Microcontroller clock output\n              1",
    +                    "offset": 21,
    +                    "size": 2
    +                  },
    +                  "RTCPRE": {
    +                    "description": "HSE division factor for RTC\n              clock",
    +                    "offset": 16,
    +                    "size": 5
    +                  },
    +                  "PPRE2": {
    +                    "description": "APB high-speed prescaler\n              (APB2)",
    +                    "offset": 13,
    +                    "size": 3
    +                  },
    +                  "PPRE1": {
    +                    "description": "APB Low speed prescaler\n              (APB1)",
    +                    "offset": 10,
    +                    "size": 3
    +                  },
    +                  "HPRE": {
    +                    "description": "AHB prescaler",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "SWS1": {
    +                    "description": "System clock switch status",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SWS0": {
    +                    "description": "System clock switch status",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SW1": {
    +                    "description": "System clock switch",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SW0": {
    +                    "description": "System clock switch",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CIR": {
    +              "description": "clock interrupt register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSSC": {
    +                    "description": "Clock security system interrupt\n              clear",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "PLLI2SRDYC": {
    +                    "description": "PLLI2S ready interrupt\n              clear",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "PLLRDYC": {
    +                    "description": "Main PLL(PLL) ready interrupt\n              clear",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "HSERDYC": {
    +                    "description": "HSE ready interrupt clear",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "HSIRDYC": {
    +                    "description": "HSI ready interrupt clear",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "LSERDYC": {
    +                    "description": "LSE ready interrupt clear",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "LSIRDYC": {
    +                    "description": "LSI ready interrupt clear",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "PLLI2SRDYIE": {
    +                    "description": "PLLI2S ready interrupt\n              enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "PLLRDYIE": {
    +                    "description": "Main PLL (PLL) ready interrupt\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "HSERDYIE": {
    +                    "description": "HSE ready interrupt enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "HSIRDYIE": {
    +                    "description": "HSI ready interrupt enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LSERDYIE": {
    +                    "description": "LSE ready interrupt enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "LSIRDYIE": {
    +                    "description": "LSI ready interrupt enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CSSF": {
    +                    "description": "Clock security system interrupt\n              flag",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PLLI2SRDYF": {
    +                    "description": "PLLI2S ready interrupt\n              flag",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PLLRDYF": {
    +                    "description": "Main PLL (PLL) ready interrupt\n              flag",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HSERDYF": {
    +                    "description": "HSE ready interrupt flag",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HSIRDYF": {
    +                    "description": "HSI ready interrupt flag",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LSERDYF": {
    +                    "description": "LSE ready interrupt flag",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LSIRDYF": {
    +                    "description": "LSI ready interrupt flag",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "AHB1RSTR": {
    +              "description": "AHB1 peripheral reset register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OTGHSRST": {
    +                    "description": "USB OTG HS module reset",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "ETHMACRST": {
    +                    "description": "Ethernet MAC reset",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "DMA2RST": {
    +                    "description": "DMA2 reset",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "DMA1RST": {
    +                    "description": "DMA2 reset",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "CRCRST": {
    +                    "description": "CRC reset",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIOIRST": {
    +                    "description": "IO port I reset",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIOHRST": {
    +                    "description": "IO port H reset",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIOGRST": {
    +                    "description": "IO port G reset",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIOFRST": {
    +                    "description": "IO port F reset",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIOERST": {
    +                    "description": "IO port E reset",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIODRST": {
    +                    "description": "IO port D reset",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIOCRST": {
    +                    "description": "IO port C reset",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIOBRST": {
    +                    "description": "IO port B reset",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIOARST": {
    +                    "description": "IO port A reset",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AHB2RSTR": {
    +              "description": "AHB2 peripheral reset register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OTGFSRST": {
    +                    "description": "USB OTG FS module reset",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RNGRST": {
    +                    "description": "Random number generator module\n              reset",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "HSAHRST": {
    +                    "description": "Hash module reset",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CRYPRST": {
    +                    "description": "Cryptographic module reset",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DCMIRST": {
    +                    "description": "Camera interface reset",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AHB3RSTR": {
    +              "description": "AHB3 peripheral reset register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FMCRST": {
    +                    "description": "Flexible memory controller module\n              reset",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "APB1RSTR": {
    +              "description": "APB1 peripheral reset register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIM2RST": {
    +                    "description": "TIM2 reset",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TIM3RST": {
    +                    "description": "TIM3 reset",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TIM4RST": {
    +                    "description": "TIM4 reset",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TIM5RST": {
    +                    "description": "TIM5 reset",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TIM6RST": {
    +                    "description": "TIM6 reset",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TIM7RST": {
    +                    "description": "TIM7 reset",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TIM12RST": {
    +                    "description": "TIM12 reset",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TIM13RST": {
    +                    "description": "TIM13 reset",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TIM14RST": {
    +                    "description": "TIM14 reset",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "WWDGRST": {
    +                    "description": "Window watchdog reset",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SPI2RST": {
    +                    "description": "SPI 2 reset",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SPI3RST": {
    +                    "description": "SPI 3 reset",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "UART2RST": {
    +                    "description": "USART 2 reset",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "UART3RST": {
    +                    "description": "USART 3 reset",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "UART4RST": {
    +                    "description": "USART 4 reset",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "UART5RST": {
    +                    "description": "USART 5 reset",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "I2C1RST": {
    +                    "description": "I2C 1 reset",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "I2C2RST": {
    +                    "description": "I2C 2 reset",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "I2C3RST": {
    +                    "description": "I2C3 reset",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "CAN1RST": {
    +                    "description": "CAN1 reset",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "CAN2RST": {
    +                    "description": "CAN2 reset",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "PWRRST": {
    +                    "description": "Power interface reset",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "DACRST": {
    +                    "description": "DAC reset",
    +                    "offset": 29,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "APB2RSTR": {
    +              "description": "APB2 peripheral reset register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIM1RST": {
    +                    "description": "TIM1 reset",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TIM8RST": {
    +                    "description": "TIM8 reset",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "USART1RST": {
    +                    "description": "USART1 reset",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "USART6RST": {
    +                    "description": "USART6 reset",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ADCRST": {
    +                    "description": "ADC interface reset (common to all\n              ADCs)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SDIORST": {
    +                    "description": "SDIO reset",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SPI1RST": {
    +                    "description": "SPI 1 reset",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "SYSCFGRST": {
    +                    "description": "System configuration controller\n              reset",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TIM9RST": {
    +                    "description": "TIM9 reset",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TIM10RST": {
    +                    "description": "TIM10 reset",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TIM11RST": {
    +                    "description": "TIM11 reset",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AHB1ENR": {
    +              "description": "AHB1 peripheral clock register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 1048576,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OTGHSULPIEN": {
    +                    "description": "USB OTG HSULPI clock\n              enable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "OTGHSEN": {
    +                    "description": "USB OTG HS clock enable",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "ETHMACPTPEN": {
    +                    "description": "Ethernet PTP clock enable",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ETHMACRXEN": {
    +                    "description": "Ethernet Reception clock\n              enable",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "ETHMACTXEN": {
    +                    "description": "Ethernet Transmission clock\n              enable",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "ETHMACEN": {
    +                    "description": "Ethernet MAC clock enable",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "DMA2EN": {
    +                    "description": "DMA2 clock enable",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "DMA1EN": {
    +                    "description": "DMA1 clock enable",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "CCMDATARAMEN": {
    +                    "description": "CCM data RAM clock enable",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "BKPSRAMEN": {
    +                    "description": "Backup SRAM interface clock\n              enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "CRCEN": {
    +                    "description": "CRC clock enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIOIEN": {
    +                    "description": "IO port I clock enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIOHEN": {
    +                    "description": "IO port H clock enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIOGEN": {
    +                    "description": "IO port G clock enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIOFEN": {
    +                    "description": "IO port F clock enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIOEEN": {
    +                    "description": "IO port E clock enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIODEN": {
    +                    "description": "IO port D clock enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIOCEN": {
    +                    "description": "IO port C clock enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIOBEN": {
    +                    "description": "IO port B clock enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIOAEN": {
    +                    "description": "IO port A clock enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AHB2ENR": {
    +              "description": "AHB2 peripheral clock enable\n          register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OTGFSEN": {
    +                    "description": "USB OTG FS clock enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RNGEN": {
    +                    "description": "Random number generator clock\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "HASHEN": {
    +                    "description": "Hash modules clock enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CRYPEN": {
    +                    "description": "Cryptographic modules clock\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DCMIEN": {
    +                    "description": "Camera interface enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AHB3ENR": {
    +              "description": "AHB3 peripheral clock enable\n          register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FMCEN": {
    +                    "description": "Flexible memory controller module clock\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "APB1ENR": {
    +              "description": "APB1 peripheral clock enable\n          register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIM2EN": {
    +                    "description": "TIM2 clock enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TIM3EN": {
    +                    "description": "TIM3 clock enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TIM4EN": {
    +                    "description": "TIM4 clock enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TIM5EN": {
    +                    "description": "TIM5 clock enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TIM6EN": {
    +                    "description": "TIM6 clock enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TIM7EN": {
    +                    "description": "TIM7 clock enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TIM12EN": {
    +                    "description": "TIM12 clock enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TIM13EN": {
    +                    "description": "TIM13 clock enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TIM14EN": {
    +                    "description": "TIM14 clock enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "WWDGEN": {
    +                    "description": "Window watchdog clock\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SPI2EN": {
    +                    "description": "SPI2 clock enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SPI3EN": {
    +                    "description": "SPI3 clock enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "USART2EN": {
    +                    "description": "USART 2 clock enable",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "USART3EN": {
    +                    "description": "USART3 clock enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "UART4EN": {
    +                    "description": "UART4 clock enable",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "UART5EN": {
    +                    "description": "UART5 clock enable",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "I2C1EN": {
    +                    "description": "I2C1 clock enable",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "I2C2EN": {
    +                    "description": "I2C2 clock enable",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "I2C3EN": {
    +                    "description": "I2C3 clock enable",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "CAN1EN": {
    +                    "description": "CAN 1 clock enable",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "CAN2EN": {
    +                    "description": "CAN 2 clock enable",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "PWREN": {
    +                    "description": "Power interface clock\n              enable",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "DACEN": {
    +                    "description": "DAC interface clock enable",
    +                    "offset": 29,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "APB2ENR": {
    +              "description": "APB2 peripheral clock enable\n          register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIM1EN": {
    +                    "description": "TIM1 clock enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TIM8EN": {
    +                    "description": "TIM8 clock enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "USART1EN": {
    +                    "description": "USART1 clock enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "USART6EN": {
    +                    "description": "USART6 clock enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ADC1EN": {
    +                    "description": "ADC1 clock enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ADC2EN": {
    +                    "description": "ADC2 clock enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ADC3EN": {
    +                    "description": "ADC3 clock enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SDIOEN": {
    +                    "description": "SDIO clock enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SPI1EN": {
    +                    "description": "SPI1 clock enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "SYSCFGEN": {
    +                    "description": "System configuration controller clock\n              enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TIM9EN": {
    +                    "description": "TIM9 clock enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TIM10EN": {
    +                    "description": "TIM10 clock enable",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TIM11EN": {
    +                    "description": "TIM11 clock enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AHB1LPENR": {
    +              "description": "AHB1 peripheral clock enable in low power\n          mode register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 2120716799,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "GPIOALPEN": {
    +                    "description": "IO port A clock enable during sleep\n              mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "GPIOBLPEN": {
    +                    "description": "IO port B clock enable during Sleep\n              mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIOCLPEN": {
    +                    "description": "IO port C clock enable during Sleep\n              mode",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIODLPEN": {
    +                    "description": "IO port D clock enable during Sleep\n              mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIOELPEN": {
    +                    "description": "IO port E clock enable during Sleep\n              mode",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIOFLPEN": {
    +                    "description": "IO port F clock enable during Sleep\n              mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIOGLPEN": {
    +                    "description": "IO port G clock enable during Sleep\n              mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIOHLPEN": {
    +                    "description": "IO port H clock enable during Sleep\n              mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIOILPEN": {
    +                    "description": "IO port I clock enable during Sleep\n              mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CRCLPEN": {
    +                    "description": "CRC clock enable during Sleep\n              mode",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FLITFLPEN": {
    +                    "description": "Flash interface clock enable during\n              Sleep mode",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "SRAM1LPEN": {
    +                    "description": "SRAM 1interface clock enable during\n              Sleep mode",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SRAM2LPEN": {
    +                    "description": "SRAM 2 interface clock enable during\n              Sleep mode",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "BKPSRAMLPEN": {
    +                    "description": "Backup SRAM interface clock enable\n              during Sleep mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "DMA1LPEN": {
    +                    "description": "DMA1 clock enable during Sleep\n              mode",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "DMA2LPEN": {
    +                    "description": "DMA2 clock enable during Sleep\n              mode",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "ETHMACLPEN": {
    +                    "description": "Ethernet MAC clock enable during Sleep\n              mode",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "ETHMACTXLPEN": {
    +                    "description": "Ethernet transmission clock enable\n              during Sleep mode",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "ETHMACRXLPEN": {
    +                    "description": "Ethernet reception clock enable during\n              Sleep mode",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "ETHMACPTPLPEN": {
    +                    "description": "Ethernet PTP clock enable during Sleep\n              mode",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "OTGHSLPEN": {
    +                    "description": "USB OTG HS clock enable during Sleep\n              mode",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "OTGHSULPILPEN": {
    +                    "description": "USB OTG HS ULPI clock enable during\n              Sleep mode",
    +                    "offset": 30,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AHB2LPENR": {
    +              "description": "AHB2 peripheral clock enable in low power\n          mode register",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 241,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OTGFSLPEN": {
    +                    "description": "USB OTG FS clock enable during Sleep\n              mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RNGLPEN": {
    +                    "description": "Random number generator clock enable\n              during Sleep mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "HASHLPEN": {
    +                    "description": "Hash modules clock enable during Sleep\n              mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CRYPLPEN": {
    +                    "description": "Cryptography modules clock enable during\n              Sleep mode",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DCMILPEN": {
    +                    "description": "Camera interface enable during Sleep\n              mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AHB3LPENR": {
    +              "description": "AHB3 peripheral clock enable in low power\n          mode register",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FMCLPEN": {
    +                    "description": "Flexible memory controller module clock\n              enable during Sleep mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "APB1LPENR": {
    +              "description": "APB1 peripheral clock enable in low power\n          mode register",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 922667519,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIM2LPEN": {
    +                    "description": "TIM2 clock enable during Sleep\n              mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TIM3LPEN": {
    +                    "description": "TIM3 clock enable during Sleep\n              mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TIM4LPEN": {
    +                    "description": "TIM4 clock enable during Sleep\n              mode",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TIM5LPEN": {
    +                    "description": "TIM5 clock enable during Sleep\n              mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TIM6LPEN": {
    +                    "description": "TIM6 clock enable during Sleep\n              mode",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TIM7LPEN": {
    +                    "description": "TIM7 clock enable during Sleep\n              mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TIM12LPEN": {
    +                    "description": "TIM12 clock enable during Sleep\n              mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TIM13LPEN": {
    +                    "description": "TIM13 clock enable during Sleep\n              mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TIM14LPEN": {
    +                    "description": "TIM14 clock enable during Sleep\n              mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "WWDGLPEN": {
    +                    "description": "Window watchdog clock enable during\n              Sleep mode",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SPI2LPEN": {
    +                    "description": "SPI2 clock enable during Sleep\n              mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SPI3LPEN": {
    +                    "description": "SPI3 clock enable during Sleep\n              mode",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "USART2LPEN": {
    +                    "description": "USART2 clock enable during Sleep\n              mode",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "USART3LPEN": {
    +                    "description": "USART3 clock enable during Sleep\n              mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "UART4LPEN": {
    +                    "description": "UART4 clock enable during Sleep\n              mode",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "UART5LPEN": {
    +                    "description": "UART5 clock enable during Sleep\n              mode",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "I2C1LPEN": {
    +                    "description": "I2C1 clock enable during Sleep\n              mode",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "I2C2LPEN": {
    +                    "description": "I2C2 clock enable during Sleep\n              mode",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "I2C3LPEN": {
    +                    "description": "I2C3 clock enable during Sleep\n              mode",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "CAN1LPEN": {
    +                    "description": "CAN 1 clock enable during Sleep\n              mode",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "CAN2LPEN": {
    +                    "description": "CAN 2 clock enable during Sleep\n              mode",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "PWRLPEN": {
    +                    "description": "Power interface clock enable during\n              Sleep mode",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "DACLPEN": {
    +                    "description": "DAC interface clock enable during Sleep\n              mode",
    +                    "offset": 29,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "APB2LPENR": {
    +              "description": "APB2 peripheral clock enabled in low power\n          mode register",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 483123,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIM1LPEN": {
    +                    "description": "TIM1 clock enable during Sleep\n              mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TIM8LPEN": {
    +                    "description": "TIM8 clock enable during Sleep\n              mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "USART1LPEN": {
    +                    "description": "USART1 clock enable during Sleep\n              mode",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "USART6LPEN": {
    +                    "description": "USART6 clock enable during Sleep\n              mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ADC1LPEN": {
    +                    "description": "ADC1 clock enable during Sleep\n              mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ADC2LPEN": {
    +                    "description": "ADC2 clock enable during Sleep\n              mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ADC3LPEN": {
    +                    "description": "ADC 3 clock enable during Sleep\n              mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SDIOLPEN": {
    +                    "description": "SDIO clock enable during Sleep\n              mode",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SPI1LPEN": {
    +                    "description": "SPI 1 clock enable during Sleep\n              mode",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "SYSCFGLPEN": {
    +                    "description": "System configuration controller clock\n              enable during Sleep mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TIM9LPEN": {
    +                    "description": "TIM9 clock enable during sleep\n              mode",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TIM10LPEN": {
    +                    "description": "TIM10 clock enable during Sleep\n              mode",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TIM11LPEN": {
    +                    "description": "TIM11 clock enable during Sleep\n              mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BDCR": {
    +              "description": "Backup domain control register",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BDRST": {
    +                    "description": "Backup domain software\n              reset",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RTCEN": {
    +                    "description": "RTC clock enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "RTCSEL1": {
    +                    "description": "RTC clock source selection",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RTCSEL0": {
    +                    "description": "RTC clock source selection",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LSEBYP": {
    +                    "description": "External low-speed oscillator\n              bypass",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "LSERDY": {
    +                    "description": "External low-speed oscillator\n              ready",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LSEON": {
    +                    "description": "External low-speed oscillator\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CSR": {
    +              "description": "clock control & status\n          register",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 234881024,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LPWRRSTF": {
    +                    "description": "Low-power reset flag",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "WWDGRSTF": {
    +                    "description": "Window watchdog reset flag",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "WDGRSTF": {
    +                    "description": "Independent watchdog reset\n              flag",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "SFTRSTF": {
    +                    "description": "Software reset flag",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "PORRSTF": {
    +                    "description": "POR/PDR reset flag",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "PADRSTF": {
    +                    "description": "PIN reset flag",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "BORRSTF": {
    +                    "description": "BOR reset flag",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "RMVF": {
    +                    "description": "Remove reset flag",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "LSIRDY": {
    +                    "description": "Internal low-speed oscillator\n              ready",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LSION": {
    +                    "description": "Internal low-speed oscillator\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SSCGR": {
    +              "description": "spread spectrum clock generation\n          register",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SSCGEN": {
    +                    "description": "Spread spectrum modulation\n              enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "SPREADSEL": {
    +                    "description": "Spread Select",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INCSTEP": {
    +                    "description": "Incrementation step",
    +                    "offset": 13,
    +                    "size": 15
    +                  },
    +                  "MODPER": {
    +                    "description": "Modulation period",
    +                    "offset": 0,
    +                    "size": 13
    +                  }
    +                }
    +              }
    +            },
    +            "PLLI2SCFGR": {
    +              "description": "PLLI2S configuration register",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 536883200,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PLLI2SR": {
    +                    "description": "PLLI2S division factor for I2S\n              clocks",
    +                    "offset": 28,
    +                    "size": 3
    +                  },
    +                  "PLLI2SQ": {
    +                    "description": "PLLI2S division factor for SAI1\n              clock",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "PLLI2SN": {
    +                    "description": "PLLI2S multiplication factor for\n              VCO",
    +                    "offset": 6,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "DCKCFGR": {
    +              "description": "RCC Dedicated Clock Configuration\n          Register",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PLLI2SDIVQ": {
    +                    "description": "PLLI2S division factor for SAI1\n              clock",
    +                    "offset": 0,
    +                    "size": 5
    +                  },
    +                  "PLLSAIDIVQ": {
    +                    "description": "PLLSAI division factor for SAI1\n              clock",
    +                    "offset": 8,
    +                    "size": 5
    +                  },
    +                  "PLLSAIDIVR": {
    +                    "description": "division factor for\n              LCD_CLK",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "SAI1ASRC": {
    +                    "description": "SAI1-A clock source\n              selection",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "SAI1BSRC": {
    +                    "description": "SAI1-B clock source\n              selection",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "TIMPRE": {
    +                    "description": "Timers clocks prescalers\n              selection",
    +                    "offset": 24,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PLLSAICFGR": {
    +              "description": "RCC PLL configuration register",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 603992064,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PLLSAIR": {
    +                    "description": "PLLSAI division factor for LCD\n              clock",
    +                    "offset": 28,
    +                    "size": 3
    +                  },
    +                  "PLLSAIQ": {
    +                    "description": "PLLSAI division factor for SAI1\n              clock",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "PLLSAIN": {
    +                    "description": "PLLSAI division factor for\n              VCO",
    +                    "offset": 6,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "GPIOK": {
    +        "description": "General-purpose I/Os",
    +        "children": {
    +          "registers": {
    +            "MODER": {
    +              "description": "GPIO port mode register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MODER15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "MODER14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "MODER13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "MODER12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "MODER11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "MODER10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "MODER9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MODER8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "MODER7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "MODER6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "MODER5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "MODER4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MODER3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "MODER2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "MODER1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MODER0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTYPER": {
    +              "description": "GPIO port output type register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OT15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OT14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "OT13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "OT12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "OT11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OT10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OT9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "OT8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "OT7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OT6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "OT5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "OT4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "OT3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OT2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OT1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OT0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OSPEEDR": {
    +              "description": "GPIO port output speed\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OSPEEDR15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "PUPDR": {
    +              "description": "GPIO port pull-up/pull-down\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PUPDR15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "PUPDR14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "PUPDR13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "PUPDR12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "PUPDR11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "PUPDR10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "PUPDR9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "PUPDR8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "PUPDR7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "PUPDR6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "PUPDR5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PUPDR4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "PUPDR3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "PUPDR2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "PUPDR1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "PUPDR0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "IDR": {
    +              "description": "GPIO port input data register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IDR15": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "IDR14": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "IDR13": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "IDR12": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "IDR11": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "IDR10": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "IDR9": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "IDR8": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "IDR7": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IDR6": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "IDR5": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IDR4": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IDR3": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IDR2": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IDR1": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IDR0": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ODR": {
    +              "description": "GPIO port output data register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ODR15": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ODR14": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ODR13": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ODR12": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ODR11": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ODR10": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ODR9": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ODR8": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ODR7": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ODR6": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ODR5": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ODR4": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ODR3": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ODR2": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ODR1": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ODR0": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BSRR": {
    +              "description": "GPIO port bit set/reset\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "BR15": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "BR14": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "BR13": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "BR12": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "BR11": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "BR10": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "BR9": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "BR8": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "BR7": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "BR6": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "BR5": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "BR4": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "BR3": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "BR2": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "BR1": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "BR0": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BS15": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "BS14": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "BS13": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BS12": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "BS11": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BS10": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "BS9": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BS8": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BS7": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BS6": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BS5": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "BS4": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BS3": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "BS2": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "BS1": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "BS0": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "LCKR": {
    +              "description": "GPIO port configuration lock\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LCKK": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "LCK15": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LCK14": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "LCK13": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "LCK12": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "LCK11": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "LCK10": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LCK9": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "LCK8": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LCK7": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "LCK6": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "LCK5": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "LCK4": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "LCK3": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "LCK2": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "LCK1": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "LCK0": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AFRL": {
    +              "description": "GPIO alternate function low\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AFRL7": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 28,
    +                    "size": 4
    +                  },
    +                  "AFRL6": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "AFRL5": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "AFRL4": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "AFRL3": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "AFRL2": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "AFRL1": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "AFRL0": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "AFRH": {
    +              "description": "GPIO alternate function high\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AFRH15": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 28,
    +                    "size": 4
    +                  },
    +                  "AFRH14": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "AFRH13": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "AFRH12": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "AFRH11": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "AFRH10": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "AFRH9": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "AFRH8": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "FPU_CPACR": {
    +        "description": "Floating point unit CPACR",
    +        "children": {
    +          "registers": {
    +            "CPACR": {
    +              "description": "Coprocessor access control\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CP": {
    +                    "description": "CP",
    +                    "offset": 20,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "NVIC_STIR": {
    +        "description": "Nested vectored interrupt\n      controller",
    +        "children": {
    +          "registers": {
    +            "STIR": {
    +              "description": "Software trigger interrupt\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INTID": {
    +                    "description": "Software generated interrupt\n              ID",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SCB": {
    +        "description": "System control block",
    +        "children": {
    +          "registers": {
    +            "CPUID": {
    +              "description": "CPUID base register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 1091551809,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "Revision": {
    +                    "description": "Revision number",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "PartNo": {
    +                    "description": "Part number of the\n              processor",
    +                    "offset": 4,
    +                    "size": 12
    +                  },
    +                  "Constant": {
    +                    "description": "Reads as 0xF",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "Variant": {
    +                    "description": "Variant number",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "Implementer": {
    +                    "description": "Implementer code",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "ICSR": {
    +              "description": "Interrupt control and state\n          register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VECTACTIVE": {
    +                    "description": "Active vector",
    +                    "offset": 0,
    +                    "size": 9
    +                  },
    +                  "RETTOBASE": {
    +                    "description": "Return to base level",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "VECTPENDING": {
    +                    "description": "Pending vector",
    +                    "offset": 12,
    +                    "size": 7
    +                  },
    +                  "ISRPENDING": {
    +                    "description": "Interrupt pending flag",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "PENDSTCLR": {
    +                    "description": "SysTick exception clear-pending\n              bit",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "PENDSTSET": {
    +                    "description": "SysTick exception set-pending\n              bit",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "PENDSVCLR": {
    +                    "description": "PendSV clear-pending bit",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "PENDSVSET": {
    +                    "description": "PendSV set-pending bit",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "NMIPENDSET": {
    +                    "description": "NMI set-pending bit.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "VTOR": {
    +              "description": "Vector table offset register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TBLOFF": {
    +                    "description": "Vector table base offset\n              field",
    +                    "offset": 9,
    +                    "size": 21
    +                  }
    +                }
    +              }
    +            },
    +            "AIRCR": {
    +              "description": "Application interrupt and reset control\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VECTRESET": {
    +                    "description": "VECTRESET",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "VECTCLRACTIVE": {
    +                    "description": "VECTCLRACTIVE",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SYSRESETREQ": {
    +                    "description": "SYSRESETREQ",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PRIGROUP": {
    +                    "description": "PRIGROUP",
    +                    "offset": 8,
    +                    "size": 3
    +                  },
    +                  "ENDIANESS": {
    +                    "description": "ENDIANESS",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "VECTKEYSTAT": {
    +                    "description": "Register key",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SCR": {
    +              "description": "System control register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SLEEPONEXIT": {
    +                    "description": "SLEEPONEXIT",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEEPDEEP": {
    +                    "description": "SLEEPDEEP",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SEVEONPEND": {
    +                    "description": "Send Event on Pending bit",
    +                    "offset": 4,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCR": {
    +              "description": "Configuration and control\n          register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NONBASETHRDENA": {
    +                    "description": "Configures how the processor enters\n              Thread mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "USERSETMPEND": {
    +                    "description": "USERSETMPEND",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UNALIGN__TRP": {
    +                    "description": "UNALIGN_ TRP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIV_0_TRP": {
    +                    "description": "DIV_0_TRP",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BFHFNMIGN": {
    +                    "description": "BFHFNMIGN",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "STKALIGN": {
    +                    "description": "STKALIGN",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SHPR1": {
    +              "description": "System handler priority\n          registers",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRI_4": {
    +                    "description": "Priority of system handler\n              4",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "PRI_5": {
    +                    "description": "Priority of system handler\n              5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "PRI_6": {
    +                    "description": "Priority of system handler\n              6",
    +                    "offset": 16,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SHPR2": {
    +              "description": "System handler priority\n          registers",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRI_11": {
    +                    "description": "Priority of system handler\n              11",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SHPR3": {
    +              "description": "System handler priority\n          registers",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRI_14": {
    +                    "description": "Priority of system handler\n              14",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "PRI_15": {
    +                    "description": "Priority of system handler\n              15",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SHCRS": {
    +              "description": "System handler control and state\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MEMFAULTACT": {
    +                    "description": "Memory management fault exception active\n              bit",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "BUSFAULTACT": {
    +                    "description": "Bus fault exception active\n              bit",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "USGFAULTACT": {
    +                    "description": "Usage fault exception active\n              bit",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SVCALLACT": {
    +                    "description": "SVC call active bit",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MONITORACT": {
    +                    "description": "Debug monitor active bit",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PENDSVACT": {
    +                    "description": "PendSV exception active\n              bit",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SYSTICKACT": {
    +                    "description": "SysTick exception active\n              bit",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "USGFAULTPENDED": {
    +                    "description": "Usage fault exception pending\n              bit",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "MEMFAULTPENDED": {
    +                    "description": "Memory management fault exception\n              pending bit",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BUSFAULTPENDED": {
    +                    "description": "Bus fault exception pending\n              bit",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SVCALLPENDED": {
    +                    "description": "SVC call pending bit",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MEMFAULTENA": {
    +                    "description": "Memory management fault enable\n              bit",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUSFAULTENA": {
    +                    "description": "Bus fault enable bit",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "USGFAULTENA": {
    +                    "description": "Usage fault enable bit",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CFSR_UFSR_BFSR_MMFSR": {
    +              "description": "Configurable fault status\n          register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IACCVIOL": {
    +                    "description": "Instruction access violation\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MUNSTKERR": {
    +                    "description": "Memory manager fault on unstacking for a\n              return from exception",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MSTKERR": {
    +                    "description": "Memory manager fault on stacking for\n              exception entry.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "MLSPERR": {
    +                    "description": "MLSPERR",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "MMARVALID": {
    +                    "description": "Memory Management Fault Address Register\n              (MMAR) valid flag",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IBUSERR": {
    +                    "description": "Instruction bus error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PRECISERR": {
    +                    "description": "Precise data bus error",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "IMPRECISERR": {
    +                    "description": "Imprecise data bus error",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "UNSTKERR": {
    +                    "description": "Bus fault on unstacking for a return\n              from exception",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "STKERR": {
    +                    "description": "Bus fault on stacking for exception\n              entry",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "LSPERR": {
    +                    "description": "Bus fault on floating-point lazy state\n              preservation",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BFARVALID": {
    +                    "description": "Bus Fault Address Register (BFAR) valid\n              flag",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "UNDEFINSTR": {
    +                    "description": "Undefined instruction usage\n              fault",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "INVSTATE": {
    +                    "description": "Invalid state usage fault",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INVPC": {
    +                    "description": "Invalid PC load usage\n              fault",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "NOCP": {
    +                    "description": "No coprocessor usage\n              fault.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "UNALIGNED": {
    +                    "description": "Unaligned access usage\n              fault",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "DIVBYZERO": {
    +                    "description": "Divide by zero usage fault",
    +                    "offset": 25,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HFSR": {
    +              "description": "Hard fault status register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VECTTBL": {
    +                    "description": "Vector table hard fault",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FORCED": {
    +                    "description": "Forced hard fault",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "DEBUG_VT": {
    +                    "description": "Reserved for Debug use",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MMFAR": {
    +              "description": "Memory management fault address\n          register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MMFAR": {
    +                    "description": "Memory management fault\n              address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BFAR": {
    +              "description": "Bus fault address register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BFAR": {
    +                    "description": "Bus fault address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "AFSR": {
    +              "description": "Auxiliary fault status\n          register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IMPDEF": {
    +                    "description": "Implementation defined",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "STK": {
    +        "description": "SysTick timer",
    +        "children": {
    +          "registers": {
    +            "CTRL": {
    +              "description": "SysTick control and status\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TICKINT": {
    +                    "description": "SysTick exception request\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CLKSOURCE": {
    +                    "description": "Clock source selection",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "COUNTFLAG": {
    +                    "description": "COUNTFLAG",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "LOAD": {
    +              "description": "SysTick reload value register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RELOAD": {
    +                    "description": "RELOAD value",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "VAL": {
    +              "description": "SysTick current value register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CURRENT": {
    +                    "description": "Current counter value",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "CALIB": {
    +              "description": "SysTick calibration value\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TENMS": {
    +                    "description": "Calibration value",
    +                    "offset": 0,
    +                    "size": 24
    +                  },
    +                  "SKEW": {
    +                    "description": "SKEW flag: Indicates whether the TENMS\n              value is exact",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "NOREF": {
    +                    "description": "NOREF flag. Reads as zero",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "MPU": {
    +        "description": "Memory protection unit",
    +        "children": {
    +          "registers": {
    +            "MPU_TYPER": {
    +              "description": "MPU type register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 2048,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SEPARATE": {
    +                    "description": "Separate flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DREGION": {
    +                    "description": "Number of MPU data regions",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IREGION": {
    +                    "description": "Number of MPU instruction\n              regions",
    +                    "offset": 16,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "MPU_CTRL": {
    +              "description": "MPU control register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enables the MPU",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "HFNMIENA": {
    +                    "description": "Enables the operation of MPU during hard\n              fault",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PRIVDEFENA": {
    +                    "description": "Enable priviliged software access to\n              default memory map",
    +                    "offset": 2,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MPU_RNR": {
    +              "description": "MPU region number register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION": {
    +                    "description": "MPU region",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "MPU_RBAR": {
    +              "description": "MPU region base address\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION": {
    +                    "description": "MPU region field",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "VALID": {
    +                    "description": "MPU region number valid",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ADDR": {
    +                    "description": "Region base address field",
    +                    "offset": 5,
    +                    "size": 27
    +                  }
    +                }
    +              }
    +            },
    +            "MPU_RASR": {
    +              "description": "MPU region attribute and size\n          register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Region enable bit.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SIZE": {
    +                    "description": "Size of the MPU protection\n              region",
    +                    "offset": 1,
    +                    "size": 5
    +                  },
    +                  "SRD": {
    +                    "description": "Subregion disable bits",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "B": {
    +                    "description": "memory attribute",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "C": {
    +                    "description": "memory attribute",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "S": {
    +                    "description": "Shareable memory attribute",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TEX": {
    +                    "description": "memory attribute",
    +                    "offset": 19,
    +                    "size": 3
    +                  },
    +                  "AP": {
    +                    "description": "Access permission",
    +                    "offset": 24,
    +                    "size": 3
    +                  },
    +                  "XN": {
    +                    "description": "Instruction access disable\n              bit",
    +                    "offset": 28,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "FPU": {
    +        "description": "Floting point unit",
    +        "children": {
    +          "registers": {
    +            "FPCCR": {
    +              "description": "Floating-point context control\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LSPACT": {
    +                    "description": "LSPACT",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "USER": {
    +                    "description": "USER",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "THREAD": {
    +                    "description": "THREAD",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "HFRDY": {
    +                    "description": "HFRDY",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "MMRDY": {
    +                    "description": "MMRDY",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "BFRDY": {
    +                    "description": "BFRDY",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MONRDY": {
    +                    "description": "MONRDY",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LSPEN": {
    +                    "description": "LSPEN",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "ASPEN": {
    +                    "description": "ASPEN",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FPCAR": {
    +              "description": "Floating-point context address\n          register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADDRESS": {
    +                    "description": "Location of unpopulated\n              floating-point",
    +                    "offset": 3,
    +                    "size": 29
    +                  }
    +                }
    +              }
    +            },
    +            "FPSCR": {
    +              "description": "Floating-point status control\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IOC": {
    +                    "description": "Invalid operation cumulative exception\n              bit",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DZC": {
    +                    "description": "Division by zero cumulative exception\n              bit.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OFC": {
    +                    "description": "Overflow cumulative exception\n              bit",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UFC": {
    +                    "description": "Underflow cumulative exception\n              bit",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IXC": {
    +                    "description": "Inexact cumulative exception\n              bit",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IDC": {
    +                    "description": "Input denormal cumulative exception\n              bit.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RMode": {
    +                    "description": "Rounding Mode control\n              field",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "FZ": {
    +                    "description": "Flush-to-zero mode control\n              bit:",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "DN": {
    +                    "description": "Default NaN mode control\n              bit",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "AHP": {
    +                    "description": "Alternative half-precision control\n              bit",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "V": {
    +                    "description": "Overflow condition code\n              flag",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "C": {
    +                    "description": "Carry condition code flag",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "Z": {
    +                    "description": "Zero condition code flag",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "N": {
    +                    "description": "Negative condition code\n              flag",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIM6": {
    +        "description": "Basic timers",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OPM": {
    +                    "description": "One-pulse mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MMS": {
    +                    "description": "Master mode selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "UDE": {
    +                    "description": "Update DMA request enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "Low counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARR": {
    +                    "description": "Low Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "Ethernet_MMC": {
    +        "description": "Ethernet: MAC management counters",
    +        "children": {
    +          "registers": {
    +            "MMCCR": {
    +              "description": "Ethernet MMC control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CR": {
    +                    "description": "CR",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CSR": {
    +                    "description": "CSR",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ROR": {
    +                    "description": "ROR",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MCF": {
    +                    "description": "MCF",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MCP": {
    +                    "description": "MCP",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "MCFHP": {
    +                    "description": "MCFHP",
    +                    "offset": 5,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MMCRIR": {
    +              "description": "Ethernet MMC receive interrupt\n          register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RFCES": {
    +                    "description": "RFCES",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RFAES": {
    +                    "description": "RFAES",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RGUFS": {
    +                    "description": "RGUFS",
    +                    "offset": 17,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MMCTIR": {
    +              "description": "Ethernet MMC transmit interrupt\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TGFSCS": {
    +                    "description": "TGFSCS",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TGFMSCS": {
    +                    "description": "TGFMSCS",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TGFS": {
    +                    "description": "TGFS",
    +                    "offset": 21,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MMCRIMR": {
    +              "description": "Ethernet MMC receive interrupt mask\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RFCEM": {
    +                    "description": "RFCEM",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RFAEM": {
    +                    "description": "RFAEM",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RGUFM": {
    +                    "description": "RGUFM",
    +                    "offset": 17,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MMCTIMR": {
    +              "description": "Ethernet MMC transmit interrupt mask\n          register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TGFSCM": {
    +                    "description": "TGFSCM",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TGFMSCM": {
    +                    "description": "TGFMSCM",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TGFM": {
    +                    "description": "TGFM",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MMCTGFSCCR": {
    +              "description": "Ethernet MMC transmitted good frames after a\n          single collision counter",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TGFSCC": {
    +                    "description": "TGFSCC",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MMCTGFMSCCR": {
    +              "description": "Ethernet MMC transmitted good frames after\n          more than a single collision",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TGFMSCC": {
    +                    "description": "TGFMSCC",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MMCTGFCR": {
    +              "description": "Ethernet MMC transmitted good frames counter\n          register",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TGFC": {
    +                    "description": "HTL",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MMCRFCECR": {
    +              "description": "Ethernet MMC received frames with CRC error\n          counter register",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RFCFC": {
    +                    "description": "RFCFC",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MMCRFAECR": {
    +              "description": "Ethernet MMC received frames with alignment\n          error counter register",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RFAEC": {
    +                    "description": "RFAEC",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MMCRGUFCR": {
    +              "description": "MMC received good unicast frames counter\n          register",
    +              "offset": 196,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RGUFC": {
    +                    "description": "RGUFC",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "GPIOB": {
    +        "description": "General-purpose I/Os",
    +        "children": {
    +          "registers": {
    +            "MODER": {
    +              "description": "GPIO port mode register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 640,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MODER15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "MODER14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "MODER13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "MODER12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "MODER11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "MODER10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "MODER9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MODER8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "MODER7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "MODER6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "MODER5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "MODER4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MODER3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "MODER2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "MODER1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MODER0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTYPER": {
    +              "description": "GPIO port output type register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OT15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OT14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "OT13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "OT12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "OT11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OT10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OT9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "OT8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "OT7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OT6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "OT5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "OT4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "OT3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OT2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OT1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OT0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OSPEEDR": {
    +              "description": "GPIO port output speed\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 192,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OSPEEDR15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "PUPDR": {
    +              "description": "GPIO port pull-up/pull-down\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 256,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PUPDR15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "PUPDR14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "PUPDR13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "PUPDR12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "PUPDR11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "PUPDR10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "PUPDR9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "PUPDR8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "PUPDR7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "PUPDR6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "PUPDR5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PUPDR4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "PUPDR3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "PUPDR2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "PUPDR1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "PUPDR0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "IDR": {
    +              "description": "GPIO port input data register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IDR15": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "IDR14": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "IDR13": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "IDR12": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "IDR11": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "IDR10": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "IDR9": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "IDR8": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "IDR7": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IDR6": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "IDR5": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IDR4": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IDR3": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IDR2": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IDR1": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IDR0": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ODR": {
    +              "description": "GPIO port output data register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ODR15": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ODR14": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ODR13": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ODR12": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ODR11": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ODR10": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ODR9": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ODR8": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ODR7": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ODR6": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ODR5": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ODR4": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ODR3": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ODR2": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ODR1": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ODR0": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BSRR": {
    +              "description": "GPIO port bit set/reset\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "BR15": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "BR14": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "BR13": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "BR12": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "BR11": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "BR10": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "BR9": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "BR8": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "BR7": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "BR6": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "BR5": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "BR4": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "BR3": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "BR2": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "BR1": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "BR0": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BS15": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "BS14": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "BS13": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BS12": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "BS11": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BS10": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "BS9": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BS8": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BS7": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BS6": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BS5": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "BS4": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BS3": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "BS2": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "BS1": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "BS0": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "LCKR": {
    +              "description": "GPIO port configuration lock\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LCKK": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "LCK15": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LCK14": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "LCK13": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "LCK12": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "LCK11": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "LCK10": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LCK9": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "LCK8": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LCK7": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "LCK6": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "LCK5": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "LCK4": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "LCK3": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "LCK2": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "LCK1": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "LCK0": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AFRL": {
    +              "description": "GPIO alternate function low\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AFRL7": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 28,
    +                    "size": 4
    +                  },
    +                  "AFRL6": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "AFRL5": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "AFRL4": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "AFRL3": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "AFRL2": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "AFRL1": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "AFRL0": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "AFRH": {
    +              "description": "GPIO alternate function high\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AFRH15": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 28,
    +                    "size": 4
    +                  },
    +                  "AFRH14": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "AFRH13": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "AFRH12": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "AFRH11": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "AFRH10": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "AFRH9": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "AFRH8": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "GPIOA": {
    +        "description": "General-purpose I/Os",
    +        "children": {
    +          "registers": {
    +            "MODER": {
    +              "description": "GPIO port mode register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 2818572288,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MODER15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "MODER14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "MODER13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "MODER12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "MODER11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "MODER10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "MODER9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MODER8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "MODER7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "MODER6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "MODER5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "MODER4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MODER3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "MODER2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "MODER1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MODER0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTYPER": {
    +              "description": "GPIO port output type register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OT15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OT14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "OT13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "OT12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "OT11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OT10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OT9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "OT8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "OT7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OT6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "OT5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "OT4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "OT3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OT2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OT1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OT0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OSPEEDR": {
    +              "description": "GPIO port output speed\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OSPEEDR15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "OSPEEDR0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "PUPDR": {
    +              "description": "GPIO port pull-up/pull-down\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 1677721600,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PUPDR15": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "PUPDR14": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "PUPDR13": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "PUPDR12": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "PUPDR11": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "PUPDR10": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "PUPDR9": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "PUPDR8": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "PUPDR7": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "PUPDR6": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "PUPDR5": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PUPDR4": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "PUPDR3": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "PUPDR2": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "PUPDR1": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "PUPDR0": {
    +                    "description": "Port x configuration bits (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "IDR": {
    +              "description": "GPIO port input data register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IDR15": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "IDR14": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "IDR13": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "IDR12": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "IDR11": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "IDR10": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "IDR9": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "IDR8": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "IDR7": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IDR6": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "IDR5": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IDR4": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IDR3": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IDR2": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IDR1": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IDR0": {
    +                    "description": "Port input data (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ODR": {
    +              "description": "GPIO port output data register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ODR15": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ODR14": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ODR13": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ODR12": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ODR11": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ODR10": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ODR9": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ODR8": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ODR7": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ODR6": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ODR5": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ODR4": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ODR3": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ODR2": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ODR1": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ODR0": {
    +                    "description": "Port output data (y =\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BSRR": {
    +              "description": "GPIO port bit set/reset\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "BR15": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "BR14": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "BR13": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "BR12": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "BR11": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "BR10": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "BR9": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "BR8": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "BR7": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "BR6": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "BR5": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "BR4": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "BR3": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "BR2": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "BR1": {
    +                    "description": "Port x reset bit y (y =\n              0..15)",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "BR0": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BS15": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "BS14": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "BS13": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BS12": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "BS11": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BS10": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "BS9": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BS8": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BS7": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BS6": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BS5": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "BS4": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BS3": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "BS2": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "BS1": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "BS0": {
    +                    "description": "Port x set bit y (y=\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "LCKR": {
    +              "description": "GPIO port configuration lock\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LCKK": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "LCK15": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LCK14": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "LCK13": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "LCK12": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "LCK11": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "LCK10": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LCK9": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "LCK8": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LCK7": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "LCK6": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "LCK5": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "LCK4": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "LCK3": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "LCK2": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "LCK1": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "LCK0": {
    +                    "description": "Port x lock bit y (y=\n              0..15)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AFRL": {
    +              "description": "GPIO alternate function low\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AFRL7": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 28,
    +                    "size": 4
    +                  },
    +                  "AFRL6": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "AFRL5": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "AFRL4": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "AFRL3": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "AFRL2": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "AFRL1": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "AFRL0": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 0..7)",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "AFRH": {
    +              "description": "GPIO alternate function high\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AFRH15": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 28,
    +                    "size": 4
    +                  },
    +                  "AFRH14": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "AFRH13": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "AFRH12": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "AFRH11": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "AFRH10": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "AFRH9": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "AFRH8": {
    +                    "description": "Alternate function selection for port x\n              bit y (y = 8..15)",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SYSCFG": {
    +        "description": "System configuration controller",
    +        "children": {
    +          "registers": {
    +            "MEMRM": {
    +              "description": "memory remap register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MEM_MODE": {
    +                    "description": "Memory mapping selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "FB_MODE": {
    +                    "description": "Flash bank mode selection",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SWP_FMC": {
    +                    "description": "FMC memory mapping swap",
    +                    "offset": 10,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "PMC": {
    +              "description": "peripheral mode configuration\n          register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MII_RMII_SEL": {
    +                    "description": "Ethernet PHY interface\n              selection",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "ADC1DC2": {
    +                    "description": "ADC1DC2",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "ADC2DC2": {
    +                    "description": "ADC2DC2",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "ADC3DC2": {
    +                    "description": "ADC3DC2",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EXTICR1": {
    +              "description": "external interrupt configuration register\n          1",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXTI3": {
    +                    "description": "EXTI x configuration (x = 0 to\n              3)",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "EXTI2": {
    +                    "description": "EXTI x configuration (x = 0 to\n              3)",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "EXTI1": {
    +                    "description": "EXTI x configuration (x = 0 to\n              3)",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "EXTI0": {
    +                    "description": "EXTI x configuration (x = 0 to\n              3)",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "EXTICR2": {
    +              "description": "external interrupt configuration register\n          2",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXTI7": {
    +                    "description": "EXTI x configuration (x = 4 to\n              7)",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "EXTI6": {
    +                    "description": "EXTI x configuration (x = 4 to\n              7)",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "EXTI5": {
    +                    "description": "EXTI x configuration (x = 4 to\n              7)",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "EXTI4": {
    +                    "description": "EXTI x configuration (x = 4 to\n              7)",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "EXTICR3": {
    +              "description": "external interrupt configuration register\n          3",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXTI11": {
    +                    "description": "EXTI x configuration (x = 8 to\n              11)",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "EXTI10": {
    +                    "description": "EXTI10",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "EXTI9": {
    +                    "description": "EXTI x configuration (x = 8 to\n              11)",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "EXTI8": {
    +                    "description": "EXTI x configuration (x = 8 to\n              11)",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "EXTICR4": {
    +              "description": "external interrupt configuration register\n          4",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXTI15": {
    +                    "description": "EXTI x configuration (x = 12 to\n              15)",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "EXTI14": {
    +                    "description": "EXTI x configuration (x = 12 to\n              15)",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "EXTI13": {
    +                    "description": "EXTI x configuration (x = 12 to\n              15)",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "EXTI12": {
    +                    "description": "EXTI x configuration (x = 12 to\n              15)",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CMPCR": {
    +              "description": "Compensation cell control\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "READY": {
    +                    "description": "READY",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CMP_PD": {
    +                    "description": "Compensation cell\n              power-down",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SPI1": {
    +        "description": "Serial peripheral interface",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BIDIMODE": {
    +                    "description": "Bidirectional data mode\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "BIDIOE": {
    +                    "description": "Output enable in bidirectional\n              mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CRCEN": {
    +                    "description": "Hardware CRC calculation\n              enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CRCNEXT": {
    +                    "description": "CRC transfer next",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "DFF": {
    +                    "description": "Data frame format",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "RXONLY": {
    +                    "description": "Receive only",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SSM": {
    +                    "description": "Software slave management",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SSI": {
    +                    "description": "Internal slave select",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LSBFIRST": {
    +                    "description": "Frame format",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SPE": {
    +                    "description": "SPI enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BR": {
    +                    "description": "Baud rate control",
    +                    "offset": 3,
    +                    "size": 3
    +                  },
    +                  "MSTR": {
    +                    "description": "Master selection",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CPOL": {
    +                    "description": "Clock polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CPHA": {
    +                    "description": "Clock phase",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXEIE": {
    +                    "description": "Tx buffer empty interrupt\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RXNEIE": {
    +                    "description": "RX buffer not empty interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "Error interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FRF": {
    +                    "description": "Frame format",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SSOE": {
    +                    "description": "SS output enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TXDMAEN": {
    +                    "description": "Tx buffer DMA enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RXDMAEN": {
    +                    "description": "Rx buffer DMA enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 2,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIFRFE": {
    +                    "description": "TI frame format error",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BSY": {
    +                    "description": "Busy flag",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OVR": {
    +                    "description": "Overrun flag",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MODF": {
    +                    "description": "Mode fault",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CRCERR": {
    +                    "description": "CRC error flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "UDR": {
    +                    "description": "Underrun flag",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CHSIDE": {
    +                    "description": "Channel side",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXE": {
    +                    "description": "Transmit buffer empty",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXNE": {
    +                    "description": "Receive buffer not empty",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "data register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DR": {
    +                    "description": "Data register",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CRCPR": {
    +              "description": "CRC polynomial register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 7,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CRCPOLY": {
    +                    "description": "CRC polynomial register",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "RXCRCR": {
    +              "description": "RX CRC register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RxCRC": {
    +                    "description": "Rx CRC register",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "TXCRCR": {
    +              "description": "TX CRC register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TxCRC": {
    +                    "description": "Tx CRC register",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "I2SCFGR": {
    +              "description": "I2S configuration register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "I2SMOD": {
    +                    "description": "I2S mode selection",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "I2SE": {
    +                    "description": "I2S Enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "I2SCFG": {
    +                    "description": "I2S configuration mode",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "PCMSYNC": {
    +                    "description": "PCM frame synchronization",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "I2SSTD": {
    +                    "description": "I2S standard selection",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "CKPOL": {
    +                    "description": "Steady state clock\n              polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DATLEN": {
    +                    "description": "Data length to be\n              transferred",
    +                    "offset": 1,
    +                    "size": 2
    +                  },
    +                  "CHLEN": {
    +                    "description": "Channel length (number of bits per audio\n              channel)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "I2SPR": {
    +              "description": "I2S prescaler register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 10,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MCKOE": {
    +                    "description": "Master clock output enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ODD": {
    +                    "description": "Odd factor for the\n              prescaler",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "I2SDIV": {
    +                    "description": "I2S Linear prescaler",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "I2C3": {
    +        "description": "Inter-integrated circuit",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "Control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SWRST": {
    +                    "description": "Software reset",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ALERT": {
    +                    "description": "SMBus alert",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "PEC": {
    +                    "description": "Packet error checking",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "POS": {
    +                    "description": "Acknowledge/PEC Position (for data\n              reception)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "Acknowledge enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "STOP": {
    +                    "description": "Stop generation",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "START": {
    +                    "description": "Start generation",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "NOSTRETCH": {
    +                    "description": "Clock stretching disable (Slave\n              mode)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ENGC": {
    +                    "description": "General call enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ENPEC": {
    +                    "description": "PEC enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ENARP": {
    +                    "description": "ARP enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SMBTYPE": {
    +                    "description": "SMBus type",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SMBUS": {
    +                    "description": "SMBus mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PE": {
    +                    "description": "Peripheral enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "Control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LAST": {
    +                    "description": "DMA last transfer",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "DMAEN": {
    +                    "description": "DMA requests enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ITBUFEN": {
    +                    "description": "Buffer interrupt enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ITEVTEN": {
    +                    "description": "Event interrupt enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ITERREN": {
    +                    "description": "Error interrupt enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FREQ": {
    +                    "description": "Peripheral clock frequency",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "OAR1": {
    +              "description": "Own address register 1",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADDMODE": {
    +                    "description": "Addressing mode (slave\n              mode)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ADD10": {
    +                    "description": "Interface address",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "ADD7": {
    +                    "description": "Interface address",
    +                    "offset": 1,
    +                    "size": 7
    +                  },
    +                  "ADD0": {
    +                    "description": "Interface address",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OAR2": {
    +              "description": "Own address register 2",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADD2": {
    +                    "description": "Interface address",
    +                    "offset": 1,
    +                    "size": 7
    +                  },
    +                  "ENDUAL": {
    +                    "description": "Dual addressing mode\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "Data register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DR": {
    +                    "description": "8-bit data register",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SR1": {
    +              "description": "Status register 1",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SMBALERT": {
    +                    "description": "SMBus alert",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TIMEOUT": {
    +                    "description": "Timeout or Tlow error",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PECERR": {
    +                    "description": "PEC Error in reception",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "OVR": {
    +                    "description": "Overrun/Underrun",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AF": {
    +                    "description": "Acknowledge failure",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ARLO": {
    +                    "description": "Arbitration lost (master\n              mode)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BERR": {
    +                    "description": "Bus error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TxE": {
    +                    "description": "Data register empty\n              (transmitters)",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RxNE": {
    +                    "description": "Data register not empty\n              (receivers)",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "STOPF": {
    +                    "description": "Stop detection (slave\n              mode)",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ADD10": {
    +                    "description": "10-bit header sent (Master\n              mode)",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BTF": {
    +                    "description": "Byte transfer finished",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ADDR": {
    +                    "description": "Address sent (master mode)/matched\n              (slave mode)",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SB": {
    +                    "description": "Start bit (Master mode)",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SR2": {
    +              "description": "Status register 2",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "PEC": {
    +                    "description": "acket error checking\n              register",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DUALF": {
    +                    "description": "Dual flag (Slave mode)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SMBHOST": {
    +                    "description": "SMBus host header (Slave\n              mode)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SMBDEFAULT": {
    +                    "description": "SMBus device default address (Slave\n              mode)",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GENCALL": {
    +                    "description": "General call address (Slave\n              mode)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TRA": {
    +                    "description": "Transmitter/receiver",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "BUSY": {
    +                    "description": "Bus busy",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MSL": {
    +                    "description": "Master/slave",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCR": {
    +              "description": "Clock control register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "F_S": {
    +                    "description": "I2C master mode selection",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "DUTY": {
    +                    "description": "Fast mode duty cycle",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CCR": {
    +                    "description": "Clock control register in Fast/Standard\n              mode (Master mode)",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "TRISE": {
    +              "description": "TRISE register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 2,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TRISE": {
    +                    "description": "Maximum rise time in Fast/Standard mode\n              (Master mode)",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "FLTR": {
    +              "description": "I2C FLTR register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DNF": {
    +                    "description": "Digital noise filter",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "ANOFF": {
    +                    "description": "Analog noise filter OFF",
    +                    "offset": 4,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "DMA2D": {
    +        "description": "DMA2D controller",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MODE": {
    +                    "description": "DMA2D mode",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "CEIE": {
    +                    "description": "Configuration Error Interrupt\n              Enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CTCIE": {
    +                    "description": "CLUT transfer complete interrupt\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CAEIE": {
    +                    "description": "CLUT access error interrupt\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TWIE": {
    +                    "description": "Transfer watermark interrupt\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transfer complete interrupt\n              enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TEIE": {
    +                    "description": "Transfer error interrupt\n              enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ABORT": {
    +                    "description": "Abort",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SUSP": {
    +                    "description": "Suspend",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "START": {
    +                    "description": "Start",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ISR": {
    +              "description": "Interrupt Status Register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CEIF": {
    +                    "description": "Configuration error interrupt\n              flag",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CTCIF": {
    +                    "description": "CLUT transfer complete interrupt\n              flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CAEIF": {
    +                    "description": "CLUT access error interrupt\n              flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TWIF": {
    +                    "description": "Transfer watermark interrupt\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TCIF": {
    +                    "description": "Transfer complete interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TEIF": {
    +                    "description": "Transfer error interrupt\n              flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IFCR": {
    +              "description": "interrupt flag clear register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCEIF": {
    +                    "description": "Clear configuration error interrupt\n              flag",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CCTCIF": {
    +                    "description": "Clear CLUT transfer complete interrupt\n              flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CAECIF": {
    +                    "description": "Clear CLUT access error interrupt\n              flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CTWIF": {
    +                    "description": "Clear transfer watermark interrupt\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CTCIF": {
    +                    "description": "Clear transfer complete interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CTEIF": {
    +                    "description": "Clear Transfer error interrupt\n              flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FGMAR": {
    +              "description": "foreground memory address\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MA": {
    +                    "description": "Memory address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "FGOR": {
    +              "description": "foreground offset register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LO": {
    +                    "description": "Line offset",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "BGMAR": {
    +              "description": "background memory address\n          register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MA": {
    +                    "description": "Memory address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BGOR": {
    +              "description": "background offset register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LO": {
    +                    "description": "Line offset",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "FGPFCCR": {
    +              "description": "foreground PFC control\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ALPHA": {
    +                    "description": "Alpha value",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "AM": {
    +                    "description": "Alpha mode",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "CS": {
    +                    "description": "CLUT size",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "START": {
    +                    "description": "Start",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CCM": {
    +                    "description": "CLUT color mode",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CM": {
    +                    "description": "Color mode",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "FGCOLR": {
    +              "description": "foreground color register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RED": {
    +                    "description": "Red Value",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "GREEN": {
    +                    "description": "Green Value",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "BLUE": {
    +                    "description": "Blue Value",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "BGPFCCR": {
    +              "description": "background PFC control\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ALPHA": {
    +                    "description": "Alpha value",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "AM": {
    +                    "description": "Alpha mode",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "CS": {
    +                    "description": "CLUT size",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "START": {
    +                    "description": "Start",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CCM": {
    +                    "description": "CLUT Color mode",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CM": {
    +                    "description": "Color mode",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "BGCOLR": {
    +              "description": "background color register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RED": {
    +                    "description": "Red Value",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "GREEN": {
    +                    "description": "Green Value",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "BLUE": {
    +                    "description": "Blue Value",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "FGCMAR": {
    +              "description": "foreground CLUT memory address\n          register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MA": {
    +                    "description": "Memory Address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BGCMAR": {
    +              "description": "background CLUT memory address\n          register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MA": {
    +                    "description": "Memory address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OPFCCR": {
    +              "description": "output PFC control register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CM": {
    +                    "description": "Color mode",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "OCOLR": {
    +              "description": "output color register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "APLHA": {
    +                    "description": "Alpha Channel Value",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "RED": {
    +                    "description": "Red Value",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "GREEN": {
    +                    "description": "Green Value",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "BLUE": {
    +                    "description": "Blue Value",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "OMAR": {
    +              "description": "output memory address register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MA": {
    +                    "description": "Memory Address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OOR": {
    +              "description": "output offset register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LO": {
    +                    "description": "Line Offset",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "NLR": {
    +              "description": "number of line register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PL": {
    +                    "description": "Pixel per lines",
    +                    "offset": 16,
    +                    "size": 14
    +                  },
    +                  "NL": {
    +                    "description": "Number of lines",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "LWR": {
    +              "description": "line watermark register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LW": {
    +                    "description": "Line watermark",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "AMTCR": {
    +              "description": "AHB master timer configuration\n          register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DT": {
    +                    "description": "Dead Time",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "EN": {
    +                    "description": "Enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FGCLUT": {
    +              "description": "FGCLUT",
    +              "offset": 1024,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "APLHA": {
    +                    "description": "APLHA",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "RED": {
    +                    "description": "RED",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "GREEN": {
    +                    "description": "GREEN",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "BLUE": {
    +                    "description": "BLUE",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "BGCLUT": {
    +              "description": "BGCLUT",
    +              "offset": 2048,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "APLHA": {
    +                    "description": "APLHA",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "RED": {
    +                    "description": "RED",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "GREEN": {
    +                    "description": "GREEN",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "BLUE": {
    +                    "description": "BLUE",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SAI": {
    +        "description": "Serial audio interface",
    +        "children": {
    +          "registers": {
    +            "BCR1": {
    +              "description": "BConfiguration register 1",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 64,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MCJDIV": {
    +                    "description": "Master clock divider",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "NODIV": {
    +                    "description": "No divider",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DMAEN": {
    +                    "description": "DMA enable",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "SAIBEN": {
    +                    "description": "Audio block B enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "OutDri": {
    +                    "description": "Output drive",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "MONO": {
    +                    "description": "Mono mode",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "SYNCEN": {
    +                    "description": "Synchronization enable",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CKSTR": {
    +                    "description": "Clock strobing edge",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "LSBFIRST": {
    +                    "description": "Least significant bit\n              first",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DS": {
    +                    "description": "Data size",
    +                    "offset": 5,
    +                    "size": 3
    +                  },
    +                  "PRTCFG": {
    +                    "description": "Protocol configuration",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MODE": {
    +                    "description": "Audio block mode",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "BCR2": {
    +              "description": "BConfiguration register 2",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMP": {
    +                    "description": "Companding mode",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "CPL": {
    +                    "description": "Complement bit",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "MUTECN": {
    +                    "description": "Mute counter",
    +                    "offset": 7,
    +                    "size": 6
    +                  },
    +                  "MUTEVAL": {
    +                    "description": "Mute value",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MUTE": {
    +                    "description": "Mute",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TRIS": {
    +                    "description": "Tristate management on data\n              line",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FFLUS": {
    +                    "description": "FIFO flush",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FTH": {
    +                    "description": "FIFO threshold",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "BFRCR": {
    +              "description": "BFRCR",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 7,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FSOFF": {
    +                    "description": "Frame synchronization\n              offset",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FSPOL": {
    +                    "description": "Frame synchronization\n              polarity",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FSDEF": {
    +                    "description": "Frame synchronization\n              definition",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FSALL": {
    +                    "description": "Frame synchronization active level\n              length",
    +                    "offset": 8,
    +                    "size": 7
    +                  },
    +                  "FRL": {
    +                    "description": "Frame length",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "BSLOTR": {
    +              "description": "BSlot register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SLOTEN": {
    +                    "description": "Slot enable",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "NBSLOT": {
    +                    "description": "Number of slots in an audio\n              frame",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "SLOTSZ": {
    +                    "description": "Slot size",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "FBOFF": {
    +                    "description": "First bit offset",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "BIM": {
    +              "description": "BInterrupt mask register2",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LFSDETIE": {
    +                    "description": "Late frame synchronization detection\n              interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "AFSDETIE": {
    +                    "description": "Anticipated frame synchronization\n              detection interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CNRDYIE": {
    +                    "description": "Codec not ready interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FREQIE": {
    +                    "description": "FIFO request interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "WCKCFG": {
    +                    "description": "Wrong clock configuration interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MUTEDET": {
    +                    "description": "Mute detection interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OVRUDRIE": {
    +                    "description": "Overrun/underrun interrupt\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BSR": {
    +              "description": "BStatus register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "FLVL": {
    +                    "description": "FIFO level threshold",
    +                    "offset": 16,
    +                    "size": 3
    +                  },
    +                  "LFSDET": {
    +                    "description": "Late frame synchronization\n              detection",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "AFSDET": {
    +                    "description": "Anticipated frame synchronization\n              detection",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CNRDY": {
    +                    "description": "Codec not ready",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FREQ": {
    +                    "description": "FIFO request",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "WCKCFG": {
    +                    "description": "Wrong clock configuration\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MUTEDET": {
    +                    "description": "Mute detection",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OVRUDR": {
    +                    "description": "Overrun / underrun",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BCLRFR": {
    +              "description": "BClear flag register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "LFSDET": {
    +                    "description": "Clear late frame synchronization\n              detection flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CAFSDET": {
    +                    "description": "Clear anticipated frame synchronization\n              detection flag",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CNRDY": {
    +                    "description": "Clear codec not ready flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "WCKCFG": {
    +                    "description": "Clear wrong clock configuration\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MUTEDET": {
    +                    "description": "Mute detection flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OVRUDR": {
    +                    "description": "Clear overrun / underrun",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BDR": {
    +              "description": "BData register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Data",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ACR1": {
    +              "description": "AConfiguration register 1",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 64,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MCJDIV": {
    +                    "description": "Master clock divider",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "NODIV": {
    +                    "description": "No divider",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DMAEN": {
    +                    "description": "DMA enable",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "SAIAEN": {
    +                    "description": "Audio block A enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "OutDri": {
    +                    "description": "Output drive",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "MONO": {
    +                    "description": "Mono mode",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "SYNCEN": {
    +                    "description": "Synchronization enable",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CKSTR": {
    +                    "description": "Clock strobing edge",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "LSBFIRST": {
    +                    "description": "Least significant bit\n              first",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DS": {
    +                    "description": "Data size",
    +                    "offset": 5,
    +                    "size": 3
    +                  },
    +                  "PRTCFG": {
    +                    "description": "Protocol configuration",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MODE": {
    +                    "description": "Audio block mode",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "ACR2": {
    +              "description": "AConfiguration register 2",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMP": {
    +                    "description": "Companding mode",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "CPL": {
    +                    "description": "Complement bit",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "MUTECN": {
    +                    "description": "Mute counter",
    +                    "offset": 7,
    +                    "size": 6
    +                  },
    +                  "MUTEVAL": {
    +                    "description": "Mute value",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MUTE": {
    +                    "description": "Mute",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TRIS": {
    +                    "description": "Tristate management on data\n              line",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FFLUS": {
    +                    "description": "FIFO flush",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FTH": {
    +                    "description": "FIFO threshold",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "AFRCR": {
    +              "description": "AFRCR",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 7,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FSOFF": {
    +                    "description": "Frame synchronization\n              offset",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FSPOL": {
    +                    "description": "Frame synchronization\n              polarity",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FSDEF": {
    +                    "description": "Frame synchronization\n              definition",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FSALL": {
    +                    "description": "Frame synchronization active level\n              length",
    +                    "offset": 8,
    +                    "size": 7
    +                  },
    +                  "FRL": {
    +                    "description": "Frame length",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "ASLOTR": {
    +              "description": "ASlot register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SLOTEN": {
    +                    "description": "Slot enable",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "NBSLOT": {
    +                    "description": "Number of slots in an audio\n              frame",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "SLOTSZ": {
    +                    "description": "Slot size",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "FBOFF": {
    +                    "description": "First bit offset",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "AIM": {
    +              "description": "AInterrupt mask register2",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LFSDET": {
    +                    "description": "Late frame synchronization detection\n              interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "AFSDETIE": {
    +                    "description": "Anticipated frame synchronization\n              detection interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CNRDYIE": {
    +                    "description": "Codec not ready interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FREQIE": {
    +                    "description": "FIFO request interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "WCKCFG": {
    +                    "description": "Wrong clock configuration interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MUTEDET": {
    +                    "description": "Mute detection interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OVRUDRIE": {
    +                    "description": "Overrun/underrun interrupt\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ASR": {
    +              "description": "AStatus register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FLVL": {
    +                    "description": "FIFO level threshold",
    +                    "offset": 16,
    +                    "size": 3
    +                  },
    +                  "LFSDET": {
    +                    "description": "Late frame synchronization\n              detection",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "AFSDET": {
    +                    "description": "Anticipated frame synchronization\n              detection",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CNRDY": {
    +                    "description": "Codec not ready",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FREQ": {
    +                    "description": "FIFO request",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "WCKCFG": {
    +                    "description": "Wrong clock configuration flag. This bit\n              is read only.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MUTEDET": {
    +                    "description": "Mute detection",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OVRUDR": {
    +                    "description": "Overrun / underrun",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ACLRFR": {
    +              "description": "AClear flag register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LFSDET": {
    +                    "description": "Clear late frame synchronization\n              detection flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CAFSDET": {
    +                    "description": "Clear anticipated frame synchronization\n              detection flag.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CNRDY": {
    +                    "description": "Clear codec not ready flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "WCKCFG": {
    +                    "description": "Clear wrong clock configuration\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MUTEDET": {
    +                    "description": "Mute detection flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OVRUDR": {
    +                    "description": "Clear overrun / underrun",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ADR": {
    +              "description": "AData register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Data",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "LTDC": {
    +        "description": "LCD-TFT Controller",
    +        "children": {
    +          "registers": {
    +            "SSCR": {
    +              "description": "Synchronization Size Configuration\n          Register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HSW": {
    +                    "description": "Horizontal Synchronization Width (in\n              units of pixel clock period)",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "VSH": {
    +                    "description": "Vertical Synchronization Height (in\n              units of horizontal scan line)",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "BPCR": {
    +              "description": "Back Porch Configuration\n          Register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AHBP": {
    +                    "description": "Accumulated Horizontal back porch (in\n              units of pixel clock period)",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "AVBP": {
    +                    "description": "Accumulated Vertical back porch (in\n              units of horizontal scan line)",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "AWCR": {
    +              "description": "Active Width Configuration\n          Register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AAV": {
    +                    "description": "AAV",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "AAH": {
    +                    "description": "Accumulated Active Height (in units of\n              horizontal scan line)",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "TWCR": {
    +              "description": "Total Width Configuration\n          Register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TOTALW": {
    +                    "description": "Total Width (in units of pixel clock\n              period)",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "TOTALH": {
    +                    "description": "Total Height (in units of horizontal\n              scan line)",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "GCR": {
    +              "description": "Global Control Register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 8736,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HSPOL": {
    +                    "description": "Horizontal Synchronization\n              Polarity",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "VSPOL": {
    +                    "description": "Vertical Synchronization\n              Polarity",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "DEPOL": {
    +                    "description": "Data Enable Polarity",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "PCPOL": {
    +                    "description": "Pixel Clock Polarity",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "DEN": {
    +                    "description": "Dither Enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "DRW": {
    +                    "description": "Dither Red Width",
    +                    "offset": 12,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "DGW": {
    +                    "description": "Dither Green Width",
    +                    "offset": 8,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "DBW": {
    +                    "description": "Dither Blue Width",
    +                    "offset": 4,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "LTDCEN": {
    +                    "description": "LCD-TFT controller enable\n              bit",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SRCR": {
    +              "description": "Shadow Reload Configuration\n          Register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VBR": {
    +                    "description": "Vertical Blanking Reload",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IMR": {
    +                    "description": "Immediate Reload",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BCCR": {
    +              "description": "Background Color Configuration\n          Register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BC": {
    +                    "description": "Background Color Red value",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "IER": {
    +              "description": "Interrupt Enable Register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RRIE": {
    +                    "description": "Register Reload interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TERRIE": {
    +                    "description": "Transfer Error Interrupt\n              Enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FUIE": {
    +                    "description": "FIFO Underrun Interrupt\n              Enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "LIE": {
    +                    "description": "Line Interrupt Enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ISR": {
    +              "description": "Interrupt Status Register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RRIF": {
    +                    "description": "Register Reload Interrupt\n              Flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TERRIF": {
    +                    "description": "Transfer Error interrupt\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FUIF": {
    +                    "description": "FIFO Underrun Interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "LIF": {
    +                    "description": "Line Interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ICR": {
    +              "description": "Interrupt Clear Register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "CRRIF": {
    +                    "description": "Clears Register Reload Interrupt\n              Flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CTERRIF": {
    +                    "description": "Clears the Transfer Error Interrupt\n              Flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CFUIF": {
    +                    "description": "Clears the FIFO Underrun Interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CLIF": {
    +                    "description": "Clears the Line Interrupt\n              Flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "LIPCR": {
    +              "description": "Line Interrupt Position Configuration\n          Register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LIPOS": {
    +                    "description": "Line Interrupt Position",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "CPSR": {
    +              "description": "Current Position Status\n          Register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CXPOS": {
    +                    "description": "Current X Position",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CYPOS": {
    +                    "description": "Current Y Position",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CDSR": {
    +              "description": "Current Display Status\n          Register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 15,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "HSYNCS": {
    +                    "description": "Horizontal Synchronization display\n              Status",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "VSYNCS": {
    +                    "description": "Vertical Synchronization display\n              Status",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "HDES": {
    +                    "description": "Horizontal Data Enable display\n              Status",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "VDES": {
    +                    "description": "Vertical Data Enable display\n              Status",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "L1CR": {
    +              "description": "Layerx Control Register",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLUTEN": {
    +                    "description": "Color Look-Up Table Enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "COLKEN": {
    +                    "description": "Color Keying Enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "LEN": {
    +                    "description": "Layer Enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "L1WHPCR": {
    +              "description": "Layerx Window Horizontal Position\n          Configuration Register",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WHSPPOS": {
    +                    "description": "Window Horizontal Stop\n              Position",
    +                    "offset": 16,
    +                    "size": 12
    +                  },
    +                  "WHSTPOS": {
    +                    "description": "Window Horizontal Start\n              Position",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "L1WVPCR": {
    +              "description": "Layerx Window Vertical Position\n          Configuration Register",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WVSPPOS": {
    +                    "description": "Window Vertical Stop\n              Position",
    +                    "offset": 16,
    +                    "size": 11
    +                  },
    +                  "WVSTPOS": {
    +                    "description": "Window Vertical Start\n              Position",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "L1CKCR": {
    +              "description": "Layerx Color Keying Configuration\n          Register",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CKRED": {
    +                    "description": "Color Key Red value",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "CKGREEN": {
    +                    "description": "Color Key Green value",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "CKBLUE": {
    +                    "description": "Color Key Blue value",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "L1PFCR": {
    +              "description": "Layerx Pixel Format Configuration\n          Register",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PF": {
    +                    "description": "Pixel Format",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "L1CACR": {
    +              "description": "Layerx Constant Alpha Configuration\n          Register",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CONSTA": {
    +                    "description": "Constant Alpha",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "L1DCCR": {
    +              "description": "Layerx Default Color Configuration\n          Register",
    +              "offset": 156,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DCALPHA": {
    +                    "description": "Default Color Alpha",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DCRED": {
    +                    "description": "Default Color Red",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DCGREEN": {
    +                    "description": "Default Color Green",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DCBLUE": {
    +                    "description": "Default Color Blue",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "L1BFCR": {
    +              "description": "Layerx Blending Factors Configuration\n          Register",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 1543,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BF1": {
    +                    "description": "Blending Factor 1",
    +                    "offset": 8,
    +                    "size": 3
    +                  },
    +                  "BF2": {
    +                    "description": "Blending Factor 2",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "L1CFBAR": {
    +              "description": "Layerx Color Frame Buffer Address\n          Register",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CFBADD": {
    +                    "description": "Color Frame Buffer Start\n              Address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "L1CFBLR": {
    +              "description": "Layerx Color Frame Buffer Length\n          Register",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CFBP": {
    +                    "description": "Color Frame Buffer Pitch in\n              bytes",
    +                    "offset": 16,
    +                    "size": 13
    +                  },
    +                  "CFBLL": {
    +                    "description": "Color Frame Buffer Line\n              Length",
    +                    "offset": 0,
    +                    "size": 13
    +                  }
    +                }
    +              }
    +            },
    +            "L1CFBLNR": {
    +              "description": "Layerx ColorFrame Buffer Line Number\n          Register",
    +              "offset": 180,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CFBLNBR": {
    +                    "description": "Frame Buffer Line Number",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "L1CLUTWR": {
    +              "description": "Layerx CLUT Write Register",
    +              "offset": 196,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "CLUTADD": {
    +                    "description": "CLUT Address",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "RED": {
    +                    "description": "Red value",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "GREEN": {
    +                    "description": "Green value",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "BLUE": {
    +                    "description": "Blue value",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "L2CR": {
    +              "description": "Layerx Control Register",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLUTEN": {
    +                    "description": "Color Look-Up Table Enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "COLKEN": {
    +                    "description": "Color Keying Enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "LEN": {
    +                    "description": "Layer Enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "L2WHPCR": {
    +              "description": "Layerx Window Horizontal Position\n          Configuration Register",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WHSPPOS": {
    +                    "description": "Window Horizontal Stop\n              Position",
    +                    "offset": 16,
    +                    "size": 12
    +                  },
    +                  "WHSTPOS": {
    +                    "description": "Window Horizontal Start\n              Position",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "L2WVPCR": {
    +              "description": "Layerx Window Vertical Position\n          Configuration Register",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WVSPPOS": {
    +                    "description": "Window Vertical Stop\n              Position",
    +                    "offset": 16,
    +                    "size": 11
    +                  },
    +                  "WVSTPOS": {
    +                    "description": "Window Vertical Start\n              Position",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "L2CKCR": {
    +              "description": "Layerx Color Keying Configuration\n          Register",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CKRED": {
    +                    "description": "Color Key Red value",
    +                    "offset": 15,
    +                    "size": 9
    +                  },
    +                  "CKGREEN": {
    +                    "description": "Color Key Green value",
    +                    "offset": 8,
    +                    "size": 7
    +                  },
    +                  "CKBLUE": {
    +                    "description": "Color Key Blue value",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "L2PFCR": {
    +              "description": "Layerx Pixel Format Configuration\n          Register",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PF": {
    +                    "description": "Pixel Format",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "L2CACR": {
    +              "description": "Layerx Constant Alpha Configuration\n          Register",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CONSTA": {
    +                    "description": "Constant Alpha",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "L2DCCR": {
    +              "description": "Layerx Default Color Configuration\n          Register",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DCALPHA": {
    +                    "description": "Default Color Alpha",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DCRED": {
    +                    "description": "Default Color Red",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DCGREEN": {
    +                    "description": "Default Color Green",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DCBLUE": {
    +                    "description": "Default Color Blue",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "L2BFCR": {
    +              "description": "Layerx Blending Factors Configuration\n          Register",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 1543,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BF1": {
    +                    "description": "Blending Factor 1",
    +                    "offset": 8,
    +                    "size": 3
    +                  },
    +                  "BF2": {
    +                    "description": "Blending Factor 2",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "L2CFBAR": {
    +              "description": "Layerx Color Frame Buffer Address\n          Register",
    +              "offset": 300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CFBADD": {
    +                    "description": "Color Frame Buffer Start\n              Address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "L2CFBLR": {
    +              "description": "Layerx Color Frame Buffer Length\n          Register",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CFBP": {
    +                    "description": "Color Frame Buffer Pitch in\n              bytes",
    +                    "offset": 16,
    +                    "size": 13
    +                  },
    +                  "CFBLL": {
    +                    "description": "Color Frame Buffer Line\n              Length",
    +                    "offset": 0,
    +                    "size": 13
    +                  }
    +                }
    +              }
    +            },
    +            "L2CFBLNR": {
    +              "description": "Layerx ColorFrame Buffer Line Number\n          Register",
    +              "offset": 308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CFBLNBR": {
    +                    "description": "Frame Buffer Line Number",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "L2CLUTWR": {
    +              "description": "Layerx CLUT Write Register",
    +              "offset": 324,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "CLUTADD": {
    +                    "description": "CLUT Address",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "RED": {
    +                    "description": "Red value",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "GREEN": {
    +                    "description": "Green value",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "BLUE": {
    +                    "description": "Blue value",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "OTG_HS_PWRCLK": {
    +        "description": "USB on the go high speed",
    +        "children": {
    +          "registers": {
    +            "OTG_HS_PCGCR": {
    +              "description": "Power and clock gating control\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STPPCLK": {
    +                    "description": "Stop PHY clock",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "GATEHCLK": {
    +                    "description": "Gate HCLK",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PHYSUSP": {
    +                    "description": "PHY suspended",
    +                    "offset": 4,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "OTG_HS_DEVICE": {
    +        "description": "USB on the go high speed",
    +        "children": {
    +          "registers": {
    +            "OTG_HS_DCFG": {
    +              "description": "OTG_HS device configuration\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 35651584,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DSPD": {
    +                    "description": "Device speed",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "NZLSOHSK": {
    +                    "description": "Nonzero-length status OUT\n              handshake",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 4,
    +                    "size": 7
    +                  },
    +                  "PFIVL": {
    +                    "description": "Periodic (micro)frame\n              interval",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "PERSCHIVL": {
    +                    "description": "Periodic scheduling\n              interval",
    +                    "offset": 24,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DCTL": {
    +              "description": "OTG_HS device control register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RWUSIG": {
    +                    "description": "Remote wakeup signaling",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SDIS": {
    +                    "description": "Soft disconnect",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GINSTS": {
    +                    "description": "Global IN NAK status",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GONSTS": {
    +                    "description": "Global OUT NAK status",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TCTL": {
    +                    "description": "Test control",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SGINAK": {
    +                    "description": "Set global IN NAK",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CGINAK": {
    +                    "description": "Clear global IN NAK",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SGONAK": {
    +                    "description": "Set global OUT NAK",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CGONAK": {
    +                    "description": "Clear global OUT NAK",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "POPRGDNE": {
    +                    "description": "Power-on programming done",
    +                    "offset": 11,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DSTS": {
    +              "description": "OTG_HS device status register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 16,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SUSPSTS": {
    +                    "description": "Suspend status",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ENUMSPD": {
    +                    "description": "Enumerated speed",
    +                    "offset": 1,
    +                    "size": 2
    +                  },
    +                  "EERR": {
    +                    "description": "Erratic error",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FNSOF": {
    +                    "description": "Frame number of the received\n              SOF",
    +                    "offset": 8,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPMSK": {
    +              "description": "OTG_HS device IN endpoint common interrupt\n          mask register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed interrupt\n              mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDM": {
    +                    "description": "Endpoint disabled interrupt\n              mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TOM": {
    +                    "description": "Timeout condition mask (nonisochronous\n              endpoints)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ITTXFEMSK": {
    +                    "description": "IN token received when TxFIFO empty\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INEPNMM": {
    +                    "description": "IN token received with EP mismatch\n              mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INEPNEM": {
    +                    "description": "IN endpoint NAK effective\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXFURM": {
    +                    "description": "FIFO underrun mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BIM": {
    +                    "description": "BNA interrupt mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPMSK": {
    +              "description": "OTG_HS device OUT endpoint common interrupt\n          mask register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed interrupt\n              mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDM": {
    +                    "description": "Endpoint disabled interrupt\n              mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STUPM": {
    +                    "description": "SETUP phase done mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OTEPDM": {
    +                    "description": "OUT token received when endpoint\n              disabled mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "B2BSTUP": {
    +                    "description": "Back-to-back SETUP packets received\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "OPEM": {
    +                    "description": "OUT packet error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BOIM": {
    +                    "description": "BNA interrupt mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DAINT": {
    +              "description": "OTG_HS device all endpoints interrupt\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IEPINT": {
    +                    "description": "IN endpoint interrupt bits",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "OEPINT": {
    +                    "description": "OUT endpoint interrupt\n              bits",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DAINTMSK": {
    +              "description": "OTG_HS all endpoints interrupt mask\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IEPM": {
    +                    "description": "IN EP interrupt mask bits",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "OEPM": {
    +                    "description": "OUT EP interrupt mask bits",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DVBUSDIS": {
    +              "description": "OTG_HS device VBUS discharge time\n          register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 6103,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VBUSDT": {
    +                    "description": "Device VBUS discharge time",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DVBUSPULSE": {
    +              "description": "OTG_HS device VBUS pulsing time\n          register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 1464,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DVBUSP": {
    +                    "description": "Device VBUS pulsing time",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DTHRCTL": {
    +              "description": "OTG_HS Device threshold control\n          register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NONISOTHREN": {
    +                    "description": "Nonisochronous IN endpoints threshold\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ISOTHREN": {
    +                    "description": "ISO IN endpoint threshold\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TXTHRLEN": {
    +                    "description": "Transmit threshold length",
    +                    "offset": 2,
    +                    "size": 9
    +                  },
    +                  "RXTHREN": {
    +                    "description": "Receive threshold enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RXTHRLEN": {
    +                    "description": "Receive threshold length",
    +                    "offset": 17,
    +                    "size": 9
    +                  },
    +                  "ARPEN": {
    +                    "description": "Arbiter parking enable",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPEMPMSK": {
    +              "description": "OTG_HS device IN endpoint FIFO empty\n          interrupt mask register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXFEM": {
    +                    "description": "IN EP Tx FIFO empty interrupt mask\n              bits",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DEACHINT": {
    +              "description": "OTG_HS device each endpoint interrupt\n          register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IEP1INT": {
    +                    "description": "IN endpoint 1interrupt bit",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OEP1INT": {
    +                    "description": "OUT endpoint 1 interrupt\n              bit",
    +                    "offset": 17,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DEACHINTMSK": {
    +              "description": "OTG_HS device each endpoint interrupt\n          register mask",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IEP1INTM": {
    +                    "description": "IN Endpoint 1 interrupt mask\n              bit",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OEP1INTM": {
    +                    "description": "OUT Endpoint 1 interrupt mask\n              bit",
    +                    "offset": 17,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPEACHMSK1": {
    +              "description": "OTG_HS device each in endpoint-1 interrupt\n          register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed interrupt\n              mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDM": {
    +                    "description": "Endpoint disabled interrupt\n              mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TOM": {
    +                    "description": "Timeout condition mask (nonisochronous\n              endpoints)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ITTXFEMSK": {
    +                    "description": "IN token received when TxFIFO empty\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INEPNMM": {
    +                    "description": "IN token received with EP mismatch\n              mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INEPNEM": {
    +                    "description": "IN endpoint NAK effective\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXFURM": {
    +                    "description": "FIFO underrun mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BIM": {
    +                    "description": "BNA interrupt mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK interrupt mask",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPEACHMSK1": {
    +              "description": "OTG_HS device each OUT endpoint-1 interrupt\n          register",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed interrupt\n              mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDM": {
    +                    "description": "Endpoint disabled interrupt\n              mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TOM": {
    +                    "description": "Timeout condition mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ITTXFEMSK": {
    +                    "description": "IN token received when TxFIFO empty\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INEPNMM": {
    +                    "description": "IN token received with EP mismatch\n              mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INEPNEM": {
    +                    "description": "IN endpoint NAK effective\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXFURM": {
    +                    "description": "OUT packet error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BIM": {
    +                    "description": "BNA interrupt mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BERRM": {
    +                    "description": "Bubble error interrupt\n              mask",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK interrupt mask",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "NYETM": {
    +                    "description": "NYET interrupt mask",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPCTL0": {
    +              "description": "OTG device endpoint-0 control\n          register",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "USBAEP": {
    +                    "description": "USB active endpoint",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "Even/odd frame",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "Stall": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TxFIFO number",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "Set DATA0 PID",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SODDFRM": {
    +                    "description": "Set odd frame",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPENA": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPCTL1": {
    +              "description": "OTG device endpoint-1 control\n          register",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "USBAEP": {
    +                    "description": "USB active endpoint",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "Even/odd frame",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "Stall": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TxFIFO number",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "Set DATA0 PID",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SODDFRM": {
    +                    "description": "Set odd frame",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPENA": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPCTL2": {
    +              "description": "OTG device endpoint-2 control\n          register",
    +              "offset": 320,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "USBAEP": {
    +                    "description": "USB active endpoint",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "Even/odd frame",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "Stall": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TxFIFO number",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "Set DATA0 PID",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SODDFRM": {
    +                    "description": "Set odd frame",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPENA": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPCTL3": {
    +              "description": "OTG device endpoint-3 control\n          register",
    +              "offset": 352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "USBAEP": {
    +                    "description": "USB active endpoint",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "Even/odd frame",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "Stall": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TxFIFO number",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "Set DATA0 PID",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SODDFRM": {
    +                    "description": "Set odd frame",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPENA": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPCTL4": {
    +              "description": "OTG device endpoint-4 control\n          register",
    +              "offset": 384,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "USBAEP": {
    +                    "description": "USB active endpoint",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "Even/odd frame",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "Stall": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TxFIFO number",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "Set DATA0 PID",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SODDFRM": {
    +                    "description": "Set odd frame",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPENA": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPCTL5": {
    +              "description": "OTG device endpoint-5 control\n          register",
    +              "offset": 416,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "USBAEP": {
    +                    "description": "USB active endpoint",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "Even/odd frame",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "Stall": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TxFIFO number",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "Set DATA0 PID",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SODDFRM": {
    +                    "description": "Set odd frame",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPENA": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPCTL6": {
    +              "description": "OTG device endpoint-6 control\n          register",
    +              "offset": 448,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "USBAEP": {
    +                    "description": "USB active endpoint",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "Even/odd frame",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "Stall": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TxFIFO number",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "Set DATA0 PID",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SODDFRM": {
    +                    "description": "Set odd frame",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPENA": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPCTL7": {
    +              "description": "OTG device endpoint-7 control\n          register",
    +              "offset": 480,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "USBAEP": {
    +                    "description": "USB active endpoint",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "Even/odd frame",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "Stall": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TxFIFO number",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "Set DATA0 PID",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SODDFRM": {
    +                    "description": "Set odd frame",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPENA": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPINT0": {
    +              "description": "OTG device endpoint-0 interrupt\n          register",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "Timeout condition",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "IN token received when TxFIFO is\n              empty",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INEPNE": {
    +                    "description": "IN endpoint NAK effective",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXFE": {
    +                    "description": "Transmit FIFO empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXFIFOUDRN": {
    +                    "description": "Transmit Fifo Underrun",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BNA": {
    +                    "description": "Buffer not available\n              interrupt",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PKTDRPSTS": {
    +                    "description": "Packet dropped status",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BERR": {
    +                    "description": "Babble error interrupt",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK interrupt",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPINT1": {
    +              "description": "OTG device endpoint-1 interrupt\n          register",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "Timeout condition",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "IN token received when TxFIFO is\n              empty",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INEPNE": {
    +                    "description": "IN endpoint NAK effective",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXFE": {
    +                    "description": "Transmit FIFO empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXFIFOUDRN": {
    +                    "description": "Transmit Fifo Underrun",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BNA": {
    +                    "description": "Buffer not available\n              interrupt",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PKTDRPSTS": {
    +                    "description": "Packet dropped status",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BERR": {
    +                    "description": "Babble error interrupt",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK interrupt",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPINT2": {
    +              "description": "OTG device endpoint-2 interrupt\n          register",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "Timeout condition",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "IN token received when TxFIFO is\n              empty",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INEPNE": {
    +                    "description": "IN endpoint NAK effective",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXFE": {
    +                    "description": "Transmit FIFO empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXFIFOUDRN": {
    +                    "description": "Transmit Fifo Underrun",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BNA": {
    +                    "description": "Buffer not available\n              interrupt",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PKTDRPSTS": {
    +                    "description": "Packet dropped status",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BERR": {
    +                    "description": "Babble error interrupt",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK interrupt",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPINT3": {
    +              "description": "OTG device endpoint-3 interrupt\n          register",
    +              "offset": 360,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "Timeout condition",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "IN token received when TxFIFO is\n              empty",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INEPNE": {
    +                    "description": "IN endpoint NAK effective",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXFE": {
    +                    "description": "Transmit FIFO empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXFIFOUDRN": {
    +                    "description": "Transmit Fifo Underrun",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BNA": {
    +                    "description": "Buffer not available\n              interrupt",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PKTDRPSTS": {
    +                    "description": "Packet dropped status",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BERR": {
    +                    "description": "Babble error interrupt",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK interrupt",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPINT4": {
    +              "description": "OTG device endpoint-4 interrupt\n          register",
    +              "offset": 392,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "Timeout condition",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "IN token received when TxFIFO is\n              empty",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INEPNE": {
    +                    "description": "IN endpoint NAK effective",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXFE": {
    +                    "description": "Transmit FIFO empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXFIFOUDRN": {
    +                    "description": "Transmit Fifo Underrun",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BNA": {
    +                    "description": "Buffer not available\n              interrupt",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PKTDRPSTS": {
    +                    "description": "Packet dropped status",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BERR": {
    +                    "description": "Babble error interrupt",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK interrupt",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPINT5": {
    +              "description": "OTG device endpoint-5 interrupt\n          register",
    +              "offset": 424,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "Timeout condition",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "IN token received when TxFIFO is\n              empty",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INEPNE": {
    +                    "description": "IN endpoint NAK effective",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXFE": {
    +                    "description": "Transmit FIFO empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXFIFOUDRN": {
    +                    "description": "Transmit Fifo Underrun",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BNA": {
    +                    "description": "Buffer not available\n              interrupt",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PKTDRPSTS": {
    +                    "description": "Packet dropped status",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BERR": {
    +                    "description": "Babble error interrupt",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK interrupt",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPINT6": {
    +              "description": "OTG device endpoint-6 interrupt\n          register",
    +              "offset": 456,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "Timeout condition",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "IN token received when TxFIFO is\n              empty",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INEPNE": {
    +                    "description": "IN endpoint NAK effective",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXFE": {
    +                    "description": "Transmit FIFO empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXFIFOUDRN": {
    +                    "description": "Transmit Fifo Underrun",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BNA": {
    +                    "description": "Buffer not available\n              interrupt",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PKTDRPSTS": {
    +                    "description": "Packet dropped status",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BERR": {
    +                    "description": "Babble error interrupt",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK interrupt",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPINT7": {
    +              "description": "OTG device endpoint-7 interrupt\n          register",
    +              "offset": 488,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "Timeout condition",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "IN token received when TxFIFO is\n              empty",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INEPNE": {
    +                    "description": "IN endpoint NAK effective",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXFE": {
    +                    "description": "Transmit FIFO empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXFIFOUDRN": {
    +                    "description": "Transmit Fifo Underrun",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BNA": {
    +                    "description": "Buffer not available\n              interrupt",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PKTDRPSTS": {
    +                    "description": "Packet dropped status",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BERR": {
    +                    "description": "Babble error interrupt",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK interrupt",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPTSIZ0": {
    +              "description": "OTG_HS device IN endpoint 0 transfer size\n          register",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPDMA1": {
    +              "description": "OTG_HS device endpoint-1 DMA address\n          register",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPDMA2": {
    +              "description": "OTG_HS device endpoint-2 DMA address\n          register",
    +              "offset": 308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPDMA3": {
    +              "description": "OTG_HS device endpoint-3 DMA address\n          register",
    +              "offset": 340,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPDMA4": {
    +              "description": "OTG_HS device endpoint-4 DMA address\n          register",
    +              "offset": 372,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPDMA5": {
    +              "description": "OTG_HS device endpoint-5 DMA address\n          register",
    +              "offset": 404,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DTXFSTS0": {
    +              "description": "OTG_HS device IN endpoint transmit FIFO\n          status register",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INEPTFSAV": {
    +                    "description": "IN endpoint TxFIFO space\n              avail",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DTXFSTS1": {
    +              "description": "OTG_HS device IN endpoint transmit FIFO\n          status register",
    +              "offset": 312,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INEPTFSAV": {
    +                    "description": "IN endpoint TxFIFO space\n              avail",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DTXFSTS2": {
    +              "description": "OTG_HS device IN endpoint transmit FIFO\n          status register",
    +              "offset": 344,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INEPTFSAV": {
    +                    "description": "IN endpoint TxFIFO space\n              avail",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DTXFSTS3": {
    +              "description": "OTG_HS device IN endpoint transmit FIFO\n          status register",
    +              "offset": 376,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INEPTFSAV": {
    +                    "description": "IN endpoint TxFIFO space\n              avail",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DTXFSTS4": {
    +              "description": "OTG_HS device IN endpoint transmit FIFO\n          status register",
    +              "offset": 408,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INEPTFSAV": {
    +                    "description": "IN endpoint TxFIFO space\n              avail",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DTXFSTS5": {
    +              "description": "OTG_HS device IN endpoint transmit FIFO\n          status register",
    +              "offset": 440,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INEPTFSAV": {
    +                    "description": "IN endpoint TxFIFO space\n              avail",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPTSIZ1": {
    +              "description": "OTG_HS device endpoint transfer size\n          register",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "MCNT": {
    +                    "description": "Multi count",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPTSIZ2": {
    +              "description": "OTG_HS device endpoint transfer size\n          register",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "MCNT": {
    +                    "description": "Multi count",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPTSIZ3": {
    +              "description": "OTG_HS device endpoint transfer size\n          register",
    +              "offset": 368,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "MCNT": {
    +                    "description": "Multi count",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPTSIZ4": {
    +              "description": "OTG_HS device endpoint transfer size\n          register",
    +              "offset": 400,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "MCNT": {
    +                    "description": "Multi count",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPTSIZ5": {
    +              "description": "OTG_HS device endpoint transfer size\n          register",
    +              "offset": 432,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "MCNT": {
    +                    "description": "Multi count",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPCTL0": {
    +              "description": "OTG_HS device control OUT endpoint 0 control\n          register",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 32768,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "USBAEP": {
    +                    "description": "USB active endpoint",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "SNPM": {
    +                    "description": "Snoop mode",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "Stall": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPENA": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPCTL1": {
    +              "description": "OTG device endpoint-1 control\n          register",
    +              "offset": 800,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "USBAEP": {
    +                    "description": "USB active endpoint",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "Even odd frame/Endpoint data\n              PID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "SNPM": {
    +                    "description": "Snoop mode",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "Stall": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "Set DATA0 PID/Set even\n              frame",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SODDFRM": {
    +                    "description": "Set odd frame",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPENA": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPCTL2": {
    +              "description": "OTG device endpoint-2 control\n          register",
    +              "offset": 832,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "USBAEP": {
    +                    "description": "USB active endpoint",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "Even odd frame/Endpoint data\n              PID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "SNPM": {
    +                    "description": "Snoop mode",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "Stall": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "Set DATA0 PID/Set even\n              frame",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SODDFRM": {
    +                    "description": "Set odd frame",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPENA": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPCTL3": {
    +              "description": "OTG device endpoint-3 control\n          register",
    +              "offset": 864,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "USBAEP": {
    +                    "description": "USB active endpoint",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "Even odd frame/Endpoint data\n              PID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "SNPM": {
    +                    "description": "Snoop mode",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "Stall": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "Set DATA0 PID/Set even\n              frame",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SODDFRM": {
    +                    "description": "Set odd frame",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPENA": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPINT0": {
    +              "description": "OTG_HS device endpoint-0 interrupt\n          register",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "SETUP phase done",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OUT token received when endpoint\n              disabled",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "B2BSTUP": {
    +                    "description": "Back-to-back SETUP packets\n              received",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "NYET interrupt",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPINT1": {
    +              "description": "OTG_HS device endpoint-1 interrupt\n          register",
    +              "offset": 808,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "SETUP phase done",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OUT token received when endpoint\n              disabled",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "B2BSTUP": {
    +                    "description": "Back-to-back SETUP packets\n              received",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "NYET interrupt",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPINT2": {
    +              "description": "OTG_HS device endpoint-2 interrupt\n          register",
    +              "offset": 840,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "SETUP phase done",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OUT token received when endpoint\n              disabled",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "B2BSTUP": {
    +                    "description": "Back-to-back SETUP packets\n              received",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "NYET interrupt",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPINT3": {
    +              "description": "OTG_HS device endpoint-3 interrupt\n          register",
    +              "offset": 872,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "SETUP phase done",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OUT token received when endpoint\n              disabled",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "B2BSTUP": {
    +                    "description": "Back-to-back SETUP packets\n              received",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "NYET interrupt",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPINT4": {
    +              "description": "OTG_HS device endpoint-4 interrupt\n          register",
    +              "offset": 904,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "SETUP phase done",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OUT token received when endpoint\n              disabled",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "B2BSTUP": {
    +                    "description": "Back-to-back SETUP packets\n              received",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "NYET interrupt",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPINT5": {
    +              "description": "OTG_HS device endpoint-5 interrupt\n          register",
    +              "offset": 936,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "SETUP phase done",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OUT token received when endpoint\n              disabled",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "B2BSTUP": {
    +                    "description": "Back-to-back SETUP packets\n              received",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "NYET interrupt",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPINT6": {
    +              "description": "OTG_HS device endpoint-6 interrupt\n          register",
    +              "offset": 968,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "SETUP phase done",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OUT token received when endpoint\n              disabled",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "B2BSTUP": {
    +                    "description": "Back-to-back SETUP packets\n              received",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "NYET interrupt",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPINT7": {
    +              "description": "OTG_HS device endpoint-7 interrupt\n          register",
    +              "offset": 1000,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed\n              interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "Endpoint disabled\n              interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "SETUP phase done",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OUT token received when endpoint\n              disabled",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "B2BSTUP": {
    +                    "description": "Back-to-back SETUP packets\n              received",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "NYET interrupt",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPTSIZ0": {
    +              "description": "OTG_HS device endpoint-1 transfer size\n          register",
    +              "offset": 784,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "STUPCNT": {
    +                    "description": "SETUP packet count",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPTSIZ1": {
    +              "description": "OTG_HS device endpoint-2 transfer size\n          register",
    +              "offset": 816,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "RXDPID_STUPCNT": {
    +                    "description": "Received data PID/SETUP packet\n              count",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPTSIZ2": {
    +              "description": "OTG_HS device endpoint-3 transfer size\n          register",
    +              "offset": 848,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "RXDPID_STUPCNT": {
    +                    "description": "Received data PID/SETUP packet\n              count",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPTSIZ3": {
    +              "description": "OTG_HS device endpoint-4 transfer size\n          register",
    +              "offset": 880,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "RXDPID_STUPCNT": {
    +                    "description": "Received data PID/SETUP packet\n              count",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DOEPTSIZ4": {
    +              "description": "OTG_HS device endpoint-5 transfer size\n          register",
    +              "offset": 912,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "RXDPID_STUPCNT": {
    +                    "description": "Received data PID/SETUP packet\n              count",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "OTG_HS_HOST": {
    +        "description": "USB on the go high speed",
    +        "children": {
    +          "registers": {
    +            "OTG_HS_HCFG": {
    +              "description": "OTG_HS host configuration\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FSLSPCS": {
    +                    "description": "FS/LS PHY clock select",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "FSLSS": {
    +                    "description": "FS- and LS-only support",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HFIR": {
    +              "description": "OTG_HS Host frame interval\n          register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 60000,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FRIVL": {
    +                    "description": "Frame interval",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HFNUM": {
    +              "description": "OTG_HS host frame number/frame time\n          remaining register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 16383,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "FRNUM": {
    +                    "description": "Frame number",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "FTREM": {
    +                    "description": "Frame time remaining",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HPTXSTS": {
    +              "description": "OTG_HS_Host periodic transmit FIFO/queue\n          status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 524544,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PTXFSAVL": {
    +                    "description": "Periodic transmit data FIFO space\n              available",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "PTXQSAV": {
    +                    "description": "Periodic transmit request queue space\n              available",
    +                    "offset": 16,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "PTXQTOP": {
    +                    "description": "Top of the periodic transmit request\n              queue",
    +                    "offset": 24,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HAINT": {
    +              "description": "OTG_HS Host all channels interrupt\n          register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "HAINT": {
    +                    "description": "Channel interrupts",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HAINTMSK": {
    +              "description": "OTG_HS host all channels interrupt mask\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HAINTM": {
    +                    "description": "Channel interrupt mask",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HPRT": {
    +              "description": "OTG_HS host port control and status\n          register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PCSTS": {
    +                    "description": "Port connect status",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PCDET": {
    +                    "description": "Port connect detected",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PENA": {
    +                    "description": "Port enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PENCHNG": {
    +                    "description": "Port enable/disable change",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "POCA": {
    +                    "description": "Port overcurrent active",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "POCCHNG": {
    +                    "description": "Port overcurrent change",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PRES": {
    +                    "description": "Port resume",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PSUSP": {
    +                    "description": "Port suspend",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PRST": {
    +                    "description": "Port reset",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PLSTS": {
    +                    "description": "Port line status",
    +                    "offset": 10,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "PPWR": {
    +                    "description": "Port power",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "PTCTL": {
    +                    "description": "Port test control",
    +                    "offset": 13,
    +                    "size": 4
    +                  },
    +                  "PSPD": {
    +                    "description": "Port speed",
    +                    "offset": 17,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCCHAR0": {
    +              "description": "OTG_HS host channel-0 characteristics\n          register",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MC": {
    +                    "description": "Multi Count (MC) / Error Count\n              (EC)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCCHAR1": {
    +              "description": "OTG_HS host channel-1 characteristics\n          register",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MC": {
    +                    "description": "Multi Count (MC) / Error Count\n              (EC)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCCHAR2": {
    +              "description": "OTG_HS host channel-2 characteristics\n          register",
    +              "offset": 320,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MC": {
    +                    "description": "Multi Count (MC) / Error Count\n              (EC)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCCHAR3": {
    +              "description": "OTG_HS host channel-3 characteristics\n          register",
    +              "offset": 352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MC": {
    +                    "description": "Multi Count (MC) / Error Count\n              (EC)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCCHAR4": {
    +              "description": "OTG_HS host channel-4 characteristics\n          register",
    +              "offset": 384,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MC": {
    +                    "description": "Multi Count (MC) / Error Count\n              (EC)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCCHAR5": {
    +              "description": "OTG_HS host channel-5 characteristics\n          register",
    +              "offset": 416,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MC": {
    +                    "description": "Multi Count (MC) / Error Count\n              (EC)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCCHAR6": {
    +              "description": "OTG_HS host channel-6 characteristics\n          register",
    +              "offset": 448,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MC": {
    +                    "description": "Multi Count (MC) / Error Count\n              (EC)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCCHAR7": {
    +              "description": "OTG_HS host channel-7 characteristics\n          register",
    +              "offset": 480,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MC": {
    +                    "description": "Multi Count (MC) / Error Count\n              (EC)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCCHAR8": {
    +              "description": "OTG_HS host channel-8 characteristics\n          register",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MC": {
    +                    "description": "Multi Count (MC) / Error Count\n              (EC)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCCHAR9": {
    +              "description": "OTG_HS host channel-9 characteristics\n          register",
    +              "offset": 544,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MC": {
    +                    "description": "Multi Count (MC) / Error Count\n              (EC)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCCHAR10": {
    +              "description": "OTG_HS host channel-10 characteristics\n          register",
    +              "offset": 576,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MC": {
    +                    "description": "Multi Count (MC) / Error Count\n              (EC)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCCHAR11": {
    +              "description": "OTG_HS host channel-11 characteristics\n          register",
    +              "offset": 608,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MC": {
    +                    "description": "Multi Count (MC) / Error Count\n              (EC)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCSPLT0": {
    +              "description": "OTG_HS host channel-0 split control\n          register",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRTADDR": {
    +                    "description": "Port address",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "HUBADDR": {
    +                    "description": "Hub address",
    +                    "offset": 7,
    +                    "size": 7
    +                  },
    +                  "XACTPOS": {
    +                    "description": "XACTPOS",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "COMPLSPLT": {
    +                    "description": "Do complete split",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SPLITEN": {
    +                    "description": "Split enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCSPLT1": {
    +              "description": "OTG_HS host channel-1 split control\n          register",
    +              "offset": 292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRTADDR": {
    +                    "description": "Port address",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "HUBADDR": {
    +                    "description": "Hub address",
    +                    "offset": 7,
    +                    "size": 7
    +                  },
    +                  "XACTPOS": {
    +                    "description": "XACTPOS",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "COMPLSPLT": {
    +                    "description": "Do complete split",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SPLITEN": {
    +                    "description": "Split enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCSPLT2": {
    +              "description": "OTG_HS host channel-2 split control\n          register",
    +              "offset": 324,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRTADDR": {
    +                    "description": "Port address",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "HUBADDR": {
    +                    "description": "Hub address",
    +                    "offset": 7,
    +                    "size": 7
    +                  },
    +                  "XACTPOS": {
    +                    "description": "XACTPOS",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "COMPLSPLT": {
    +                    "description": "Do complete split",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SPLITEN": {
    +                    "description": "Split enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCSPLT3": {
    +              "description": "OTG_HS host channel-3 split control\n          register",
    +              "offset": 356,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRTADDR": {
    +                    "description": "Port address",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "HUBADDR": {
    +                    "description": "Hub address",
    +                    "offset": 7,
    +                    "size": 7
    +                  },
    +                  "XACTPOS": {
    +                    "description": "XACTPOS",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "COMPLSPLT": {
    +                    "description": "Do complete split",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SPLITEN": {
    +                    "description": "Split enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCSPLT4": {
    +              "description": "OTG_HS host channel-4 split control\n          register",
    +              "offset": 388,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRTADDR": {
    +                    "description": "Port address",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "HUBADDR": {
    +                    "description": "Hub address",
    +                    "offset": 7,
    +                    "size": 7
    +                  },
    +                  "XACTPOS": {
    +                    "description": "XACTPOS",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "COMPLSPLT": {
    +                    "description": "Do complete split",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SPLITEN": {
    +                    "description": "Split enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCSPLT5": {
    +              "description": "OTG_HS host channel-5 split control\n          register",
    +              "offset": 420,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRTADDR": {
    +                    "description": "Port address",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "HUBADDR": {
    +                    "description": "Hub address",
    +                    "offset": 7,
    +                    "size": 7
    +                  },
    +                  "XACTPOS": {
    +                    "description": "XACTPOS",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "COMPLSPLT": {
    +                    "description": "Do complete split",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SPLITEN": {
    +                    "description": "Split enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCSPLT6": {
    +              "description": "OTG_HS host channel-6 split control\n          register",
    +              "offset": 452,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRTADDR": {
    +                    "description": "Port address",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "HUBADDR": {
    +                    "description": "Hub address",
    +                    "offset": 7,
    +                    "size": 7
    +                  },
    +                  "XACTPOS": {
    +                    "description": "XACTPOS",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "COMPLSPLT": {
    +                    "description": "Do complete split",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SPLITEN": {
    +                    "description": "Split enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCSPLT7": {
    +              "description": "OTG_HS host channel-7 split control\n          register",
    +              "offset": 484,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRTADDR": {
    +                    "description": "Port address",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "HUBADDR": {
    +                    "description": "Hub address",
    +                    "offset": 7,
    +                    "size": 7
    +                  },
    +                  "XACTPOS": {
    +                    "description": "XACTPOS",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "COMPLSPLT": {
    +                    "description": "Do complete split",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SPLITEN": {
    +                    "description": "Split enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCSPLT8": {
    +              "description": "OTG_HS host channel-8 split control\n          register",
    +              "offset": 516,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRTADDR": {
    +                    "description": "Port address",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "HUBADDR": {
    +                    "description": "Hub address",
    +                    "offset": 7,
    +                    "size": 7
    +                  },
    +                  "XACTPOS": {
    +                    "description": "XACTPOS",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "COMPLSPLT": {
    +                    "description": "Do complete split",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SPLITEN": {
    +                    "description": "Split enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCSPLT9": {
    +              "description": "OTG_HS host channel-9 split control\n          register",
    +              "offset": 548,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRTADDR": {
    +                    "description": "Port address",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "HUBADDR": {
    +                    "description": "Hub address",
    +                    "offset": 7,
    +                    "size": 7
    +                  },
    +                  "XACTPOS": {
    +                    "description": "XACTPOS",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "COMPLSPLT": {
    +                    "description": "Do complete split",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SPLITEN": {
    +                    "description": "Split enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCSPLT10": {
    +              "description": "OTG_HS host channel-10 split control\n          register",
    +              "offset": 580,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRTADDR": {
    +                    "description": "Port address",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "HUBADDR": {
    +                    "description": "Hub address",
    +                    "offset": 7,
    +                    "size": 7
    +                  },
    +                  "XACTPOS": {
    +                    "description": "XACTPOS",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "COMPLSPLT": {
    +                    "description": "Do complete split",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SPLITEN": {
    +                    "description": "Split enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCSPLT11": {
    +              "description": "OTG_HS host channel-11 split control\n          register",
    +              "offset": 612,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRTADDR": {
    +                    "description": "Port address",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "HUBADDR": {
    +                    "description": "Hub address",
    +                    "offset": 7,
    +                    "size": 7
    +                  },
    +                  "XACTPOS": {
    +                    "description": "XACTPOS",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "COMPLSPLT": {
    +                    "description": "Do complete split",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SPLITEN": {
    +                    "description": "Split enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINT0": {
    +              "description": "OTG_HS host channel-11 interrupt\n          register",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "Response received\n              interrupt",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINT1": {
    +              "description": "OTG_HS host channel-1 interrupt\n          register",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "Response received\n              interrupt",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINT2": {
    +              "description": "OTG_HS host channel-2 interrupt\n          register",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "Response received\n              interrupt",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINT3": {
    +              "description": "OTG_HS host channel-3 interrupt\n          register",
    +              "offset": 360,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "Response received\n              interrupt",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINT4": {
    +              "description": "OTG_HS host channel-4 interrupt\n          register",
    +              "offset": 392,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "Response received\n              interrupt",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINT5": {
    +              "description": "OTG_HS host channel-5 interrupt\n          register",
    +              "offset": 424,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "Response received\n              interrupt",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINT6": {
    +              "description": "OTG_HS host channel-6 interrupt\n          register",
    +              "offset": 456,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "Response received\n              interrupt",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINT7": {
    +              "description": "OTG_HS host channel-7 interrupt\n          register",
    +              "offset": 488,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "Response received\n              interrupt",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINT8": {
    +              "description": "OTG_HS host channel-8 interrupt\n          register",
    +              "offset": 520,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "Response received\n              interrupt",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINT9": {
    +              "description": "OTG_HS host channel-9 interrupt\n          register",
    +              "offset": 552,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "Response received\n              interrupt",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINT10": {
    +              "description": "OTG_HS host channel-10 interrupt\n          register",
    +              "offset": 584,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "Response received\n              interrupt",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINT11": {
    +              "description": "OTG_HS host channel-11 interrupt\n          register",
    +              "offset": 616,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "Response received\n              interrupt",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINTMSK0": {
    +              "description": "OTG_HS host channel-11 interrupt mask\n          register",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINTMSK1": {
    +              "description": "OTG_HS host channel-1 interrupt mask\n          register",
    +              "offset": 300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINTMSK2": {
    +              "description": "OTG_HS host channel-2 interrupt mask\n          register",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINTMSK3": {
    +              "description": "OTG_HS host channel-3 interrupt mask\n          register",
    +              "offset": 364,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINTMSK4": {
    +              "description": "OTG_HS host channel-4 interrupt mask\n          register",
    +              "offset": 396,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINTMSK5": {
    +              "description": "OTG_HS host channel-5 interrupt mask\n          register",
    +              "offset": 428,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINTMSK6": {
    +              "description": "OTG_HS host channel-6 interrupt mask\n          register",
    +              "offset": 460,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINTMSK7": {
    +              "description": "OTG_HS host channel-7 interrupt mask\n          register",
    +              "offset": 492,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINTMSK8": {
    +              "description": "OTG_HS host channel-8 interrupt mask\n          register",
    +              "offset": 524,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINTMSK9": {
    +              "description": "OTG_HS host channel-9 interrupt mask\n          register",
    +              "offset": 556,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINTMSK10": {
    +              "description": "OTG_HS host channel-10 interrupt mask\n          register",
    +              "offset": 588,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCINTMSK11": {
    +              "description": "OTG_HS host channel-11 interrupt mask\n          register",
    +              "offset": 620,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AHBERR": {
    +                    "description": "AHB error",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCTSIZ0": {
    +              "description": "OTG_HS host channel-11 transfer size\n          register",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCTSIZ1": {
    +              "description": "OTG_HS host channel-1 transfer size\n          register",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCTSIZ2": {
    +              "description": "OTG_HS host channel-2 transfer size\n          register",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCTSIZ3": {
    +              "description": "OTG_HS host channel-3 transfer size\n          register",
    +              "offset": 368,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCTSIZ4": {
    +              "description": "OTG_HS host channel-4 transfer size\n          register",
    +              "offset": 400,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCTSIZ5": {
    +              "description": "OTG_HS host channel-5 transfer size\n          register",
    +              "offset": 432,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCTSIZ6": {
    +              "description": "OTG_HS host channel-6 transfer size\n          register",
    +              "offset": 464,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCTSIZ7": {
    +              "description": "OTG_HS host channel-7 transfer size\n          register",
    +              "offset": 496,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCTSIZ8": {
    +              "description": "OTG_HS host channel-8 transfer size\n          register",
    +              "offset": 528,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCTSIZ9": {
    +              "description": "OTG_HS host channel-9 transfer size\n          register",
    +              "offset": 560,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCTSIZ10": {
    +              "description": "OTG_HS host channel-10 transfer size\n          register",
    +              "offset": 592,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCTSIZ11": {
    +              "description": "OTG_HS host channel-11 transfer size\n          register",
    +              "offset": 624,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCDMA0": {
    +              "description": "OTG_HS host channel-0 DMA address\n          register",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCDMA1": {
    +              "description": "OTG_HS host channel-1 DMA address\n          register",
    +              "offset": 308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCDMA2": {
    +              "description": "OTG_HS host channel-2 DMA address\n          register",
    +              "offset": 340,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCDMA3": {
    +              "description": "OTG_HS host channel-3 DMA address\n          register",
    +              "offset": 372,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCDMA4": {
    +              "description": "OTG_HS host channel-4 DMA address\n          register",
    +              "offset": 404,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCDMA5": {
    +              "description": "OTG_HS host channel-5 DMA address\n          register",
    +              "offset": 436,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCDMA6": {
    +              "description": "OTG_HS host channel-6 DMA address\n          register",
    +              "offset": 468,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCDMA7": {
    +              "description": "OTG_HS host channel-7 DMA address\n          register",
    +              "offset": 500,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCDMA8": {
    +              "description": "OTG_HS host channel-8 DMA address\n          register",
    +              "offset": 532,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCDMA9": {
    +              "description": "OTG_HS host channel-9 DMA address\n          register",
    +              "offset": 564,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCDMA10": {
    +              "description": "OTG_HS host channel-10 DMA address\n          register",
    +              "offset": 596,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HCDMA11": {
    +              "description": "OTG_HS host channel-11 DMA address\n          register",
    +              "offset": 628,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAADDR": {
    +                    "description": "DMA address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SDIO": {
    +        "description": "Secure digital input/output\n      interface",
    +        "children": {
    +          "registers": {
    +            "POWER": {
    +              "description": "power control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PWRCTRL": {
    +                    "description": "PWRCTRL",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLKCR": {
    +              "description": "SDI clock control register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HWFC_EN": {
    +                    "description": "HW Flow Control enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "NEGEDGE": {
    +                    "description": "SDIO_CK dephasing selection\n              bit",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "WIDBUS": {
    +                    "description": "Wide bus mode enable bit",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "BYPASS": {
    +                    "description": "Clock divider bypass enable\n              bit",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PWRSAV": {
    +                    "description": "Power saving configuration\n              bit",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CLKEN": {
    +                    "description": "Clock enable bit",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CLKDIV": {
    +                    "description": "Clock divide factor",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "ARG": {
    +              "description": "argument register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CMDARG": {
    +                    "description": "Command argument",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CMD": {
    +              "description": "command register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CE_ATACMD": {
    +                    "description": "CE-ATA command",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "nIEN": {
    +                    "description": "not Interrupt Enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ENCMDcompl": {
    +                    "description": "Enable CMD completion",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "SDIOSuspend": {
    +                    "description": "SD I/O suspend command",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CPSMEN": {
    +                    "description": "Command path state machine (CPSM) Enable\n              bit",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "WAITPEND": {
    +                    "description": "CPSM Waits for ends of data transfer\n              (CmdPend internal signal).",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "WAITINT": {
    +                    "description": "CPSM waits for interrupt\n              request",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "WAITRESP": {
    +                    "description": "Wait for response bits",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "CMDINDEX": {
    +                    "description": "Command index",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "RESPCMD": {
    +              "description": "command response register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RESPCMD": {
    +                    "description": "Response command index",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "RESP1": {
    +              "description": "response 1..4 register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CARDSTATUS1": {
    +                    "description": "see Table 132.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "RESP2": {
    +              "description": "response 1..4 register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CARDSTATUS2": {
    +                    "description": "see Table 132.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "RESP3": {
    +              "description": "response 1..4 register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CARDSTATUS3": {
    +                    "description": "see Table 132.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "RESP4": {
    +              "description": "response 1..4 register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CARDSTATUS4": {
    +                    "description": "see Table 132.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DTIMER": {
    +              "description": "data timer register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATATIME": {
    +                    "description": "Data timeout period",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DLEN": {
    +              "description": "data length register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATALENGTH": {
    +                    "description": "Data length value",
    +                    "offset": 0,
    +                    "size": 25
    +                  }
    +                }
    +              }
    +            },
    +            "DCTRL": {
    +              "description": "data control register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SDIOEN": {
    +                    "description": "SD I/O enable functions",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "RWMOD": {
    +                    "description": "Read wait mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "RWSTOP": {
    +                    "description": "Read wait stop",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RWSTART": {
    +                    "description": "Read wait start",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DBLOCKSIZE": {
    +                    "description": "Data block size",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "DMAEN": {
    +                    "description": "DMA enable bit",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DTMODE": {
    +                    "description": "Data transfer mode selection 1: Stream\n              or SDIO multibyte data transfer.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DTDIR": {
    +                    "description": "Data transfer direction\n              selection",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DTEN": {
    +                    "description": "DTEN",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DCOUNT": {
    +              "description": "data counter register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DATACOUNT": {
    +                    "description": "Data count value",
    +                    "offset": 0,
    +                    "size": 25
    +                  }
    +                }
    +              }
    +            },
    +            "STA": {
    +              "description": "status register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CEATAEND": {
    +                    "description": "CE-ATA command completion signal\n              received for CMD61",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "SDIOIT": {
    +                    "description": "SDIO interrupt received",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "RXDAVL": {
    +                    "description": "Data available in receive\n              FIFO",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TXDAVL": {
    +                    "description": "Data available in transmit\n              FIFO",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "RXFIFOE": {
    +                    "description": "Receive FIFO empty",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "TXFIFOE": {
    +                    "description": "Transmit FIFO empty",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "RXFIFOF": {
    +                    "description": "Receive FIFO full",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TXFIFOF": {
    +                    "description": "Transmit FIFO full",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RXFIFOHF": {
    +                    "description": "Receive FIFO half full: there are at\n              least 8 words in the FIFO",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TXFIFOHE": {
    +                    "description": "Transmit FIFO half empty: at least 8\n              words can be written into the FIFO",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "RXACT": {
    +                    "description": "Data receive in progress",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TXACT": {
    +                    "description": "Data transmit in progress",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CMDACT": {
    +                    "description": "Command transfer in\n              progress",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "DBCKEND": {
    +                    "description": "Data block sent/received (CRC check\n              passed)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "STBITERR": {
    +                    "description": "Start bit not detected on all data\n              signals in wide bus mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DATAEND": {
    +                    "description": "Data end (data counter, SDIDCOUNT, is\n              zero)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CMDSENT": {
    +                    "description": "Command sent (no response\n              required)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CMDREND": {
    +                    "description": "Command response received (CRC check\n              passed)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RXOVERR": {
    +                    "description": "Received FIFO overrun\n              error",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXUNDERR": {
    +                    "description": "Transmit FIFO underrun\n              error",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DTIMEOUT": {
    +                    "description": "Data timeout",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CTIMEOUT": {
    +                    "description": "Command response timeout",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DCRCFAIL": {
    +                    "description": "Data block sent/received (CRC check\n              failed)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CCRCFAIL": {
    +                    "description": "Command response received (CRC check\n              failed)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ICR": {
    +              "description": "interrupt clear register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CEATAENDC": {
    +                    "description": "CEATAEND flag clear bit",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "SDIOITC": {
    +                    "description": "SDIOIT flag clear bit",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "DBCKENDC": {
    +                    "description": "DBCKEND flag clear bit",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "STBITERRC": {
    +                    "description": "STBITERR flag clear bit",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DATAENDC": {
    +                    "description": "DATAEND flag clear bit",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CMDSENTC": {
    +                    "description": "CMDSENT flag clear bit",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CMDRENDC": {
    +                    "description": "CMDREND flag clear bit",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RXOVERRC": {
    +                    "description": "RXOVERR flag clear bit",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXUNDERRC": {
    +                    "description": "TXUNDERR flag clear bit",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DTIMEOUTC": {
    +                    "description": "DTIMEOUT flag clear bit",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CTIMEOUTC": {
    +                    "description": "CTIMEOUT flag clear bit",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DCRCFAILC": {
    +                    "description": "DCRCFAIL flag clear bit",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CCRCFAILC": {
    +                    "description": "CCRCFAIL flag clear bit",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MASK": {
    +              "description": "mask register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CEATAENDIE": {
    +                    "description": "CE-ATA command completion signal\n              received interrupt enable",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "SDIOITIE": {
    +                    "description": "SDIO mode interrupt received interrupt\n              enable",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "RXDAVLIE": {
    +                    "description": "Data available in Rx FIFO interrupt\n              enable",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TXDAVLIE": {
    +                    "description": "Data available in Tx FIFO interrupt\n              enable",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "RXFIFOEIE": {
    +                    "description": "Rx FIFO empty interrupt\n              enable",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "TXFIFOEIE": {
    +                    "description": "Tx FIFO empty interrupt\n              enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "RXFIFOFIE": {
    +                    "description": "Rx FIFO full interrupt\n              enable",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TXFIFOFIE": {
    +                    "description": "Tx FIFO full interrupt\n              enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RXFIFOHFIE": {
    +                    "description": "Rx FIFO half full interrupt\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TXFIFOHEIE": {
    +                    "description": "Tx FIFO half empty interrupt\n              enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "RXACTIE": {
    +                    "description": "Data receive acting interrupt\n              enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TXACTIE": {
    +                    "description": "Data transmit acting interrupt\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CMDACTIE": {
    +                    "description": "Command acting interrupt\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "DBCKENDIE": {
    +                    "description": "Data block end interrupt\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "STBITERRIE": {
    +                    "description": "Start bit error interrupt\n              enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DATAENDIE": {
    +                    "description": "Data end interrupt enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CMDSENTIE": {
    +                    "description": "Command sent interrupt\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CMDRENDIE": {
    +                    "description": "Command response received interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RXOVERRIE": {
    +                    "description": "Rx FIFO overrun error interrupt\n              enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXUNDERRIE": {
    +                    "description": "Tx FIFO underrun error interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DTIMEOUTIE": {
    +                    "description": "Data timeout interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CTIMEOUTIE": {
    +                    "description": "Command timeout interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DCRCFAILIE": {
    +                    "description": "Data CRC fail interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CCRCFAILIE": {
    +                    "description": "Command CRC fail interrupt\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FIFOCNT": {
    +              "description": "FIFO counter register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "FIFOCOUNT": {
    +                    "description": "Remaining number of words to be written\n              to or read from the FIFO.",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "FIFO": {
    +              "description": "data FIFO register",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FIFOData": {
    +                    "description": "Receive and transmit FIFO\n              data",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "ADC1": {
    +        "description": "Analog-to-digital converter",
    +        "children": {
    +          "registers": {
    +            "SR": {
    +              "description": "status register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OVR": {
    +                    "description": "Overrun",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "STRT": {
    +                    "description": "Regular channel start flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "JSTRT": {
    +                    "description": "Injected channel start\n              flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "JEOC": {
    +                    "description": "Injected channel end of\n              conversion",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EOC": {
    +                    "description": "Regular channel end of\n              conversion",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AWD": {
    +                    "description": "Analog watchdog flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OVRIE": {
    +                    "description": "Overrun interrupt enable",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "RES": {
    +                    "description": "Resolution",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "AWDEN": {
    +                    "description": "Analog watchdog enable on regular\n              channels",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "JAWDEN": {
    +                    "description": "Analog watchdog enable on injected\n              channels",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "DISCNUM": {
    +                    "description": "Discontinuous mode channel\n              count",
    +                    "offset": 13,
    +                    "size": 3
    +                  },
    +                  "JDISCEN": {
    +                    "description": "Discontinuous mode on injected\n              channels",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "DISCEN": {
    +                    "description": "Discontinuous mode on regular\n              channels",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "JAUTO": {
    +                    "description": "Automatic injected group\n              conversion",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "AWDSGL": {
    +                    "description": "Enable the watchdog on a single channel\n              in scan mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SCAN": {
    +                    "description": "Scan mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "JEOCIE": {
    +                    "description": "Interrupt enable for injected\n              channels",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "AWDIE": {
    +                    "description": "Analog watchdog interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EOCIE": {
    +                    "description": "Interrupt enable for EOC",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "AWDCH": {
    +                    "description": "Analog watchdog channel select\n              bits",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SWSTART": {
    +                    "description": "Start conversion of regular\n              channels",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EXTEN": {
    +                    "description": "External trigger enable for regular\n              channels",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "EXTSEL": {
    +                    "description": "External event select for regular\n              group",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "JSWSTART": {
    +                    "description": "Start conversion of injected\n              channels",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "JEXTEN": {
    +                    "description": "External trigger enable for injected\n              channels",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "JEXTSEL": {
    +                    "description": "External event select for injected\n              group",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "ALIGN": {
    +                    "description": "Data alignment",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "EOCS": {
    +                    "description": "End of conversion\n              selection",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "DDS": {
    +                    "description": "DMA disable selection (for single ADC\n              mode)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DMA": {
    +                    "description": "Direct memory access mode (for single\n              ADC mode)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CONT": {
    +                    "description": "Continuous conversion",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ADON": {
    +                    "description": "A/D Converter ON / OFF",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SMPR1": {
    +              "description": "sample time register 1",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SMPx_x": {
    +                    "description": "Sample time bits",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "SMPR2": {
    +              "description": "sample time register 2",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SMPx_x": {
    +                    "description": "Sample time bits",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "JOFR1": {
    +              "description": "injected channel data offset register\n          x",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "JOFFSET1": {
    +                    "description": "Data offset for injected channel\n              x",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "JOFR2": {
    +              "description": "injected channel data offset register\n          x",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "JOFFSET2": {
    +                    "description": "Data offset for injected channel\n              x",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "JOFR3": {
    +              "description": "injected channel data offset register\n          x",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "JOFFSET3": {
    +                    "description": "Data offset for injected channel\n              x",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "JOFR4": {
    +              "description": "injected channel data offset register\n          x",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "JOFFSET4": {
    +                    "description": "Data offset for injected channel\n              x",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "HTR": {
    +              "description": "watchdog higher threshold\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 4095,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HT": {
    +                    "description": "Analog watchdog higher\n              threshold",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "LTR": {
    +              "description": "watchdog lower threshold\n          register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LT": {
    +                    "description": "Analog watchdog lower\n              threshold",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "SQR1": {
    +              "description": "regular sequence register 1",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "L": {
    +                    "description": "Regular channel sequence\n              length",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "SQ16": {
    +                    "description": "16th conversion in regular\n              sequence",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "SQ15": {
    +                    "description": "15th conversion in regular\n              sequence",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "SQ14": {
    +                    "description": "14th conversion in regular\n              sequence",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "SQ13": {
    +                    "description": "13th conversion in regular\n              sequence",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "SQR2": {
    +              "description": "regular sequence register 2",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SQ12": {
    +                    "description": "12th conversion in regular\n              sequence",
    +                    "offset": 25,
    +                    "size": 5
    +                  },
    +                  "SQ11": {
    +                    "description": "11th conversion in regular\n              sequence",
    +                    "offset": 20,
    +                    "size": 5
    +                  },
    +                  "SQ10": {
    +                    "description": "10th conversion in regular\n              sequence",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "SQ9": {
    +                    "description": "9th conversion in regular\n              sequence",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "SQ8": {
    +                    "description": "8th conversion in regular\n              sequence",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "SQ7": {
    +                    "description": "7th conversion in regular\n              sequence",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "SQR3": {
    +              "description": "regular sequence register 3",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SQ6": {
    +                    "description": "6th conversion in regular\n              sequence",
    +                    "offset": 25,
    +                    "size": 5
    +                  },
    +                  "SQ5": {
    +                    "description": "5th conversion in regular\n              sequence",
    +                    "offset": 20,
    +                    "size": 5
    +                  },
    +                  "SQ4": {
    +                    "description": "4th conversion in regular\n              sequence",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "SQ3": {
    +                    "description": "3rd conversion in regular\n              sequence",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "SQ2": {
    +                    "description": "2nd conversion in regular\n              sequence",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "SQ1": {
    +                    "description": "1st conversion in regular\n              sequence",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "JSQR": {
    +              "description": "injected sequence register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "JL": {
    +                    "description": "Injected sequence length",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "JSQ4": {
    +                    "description": "4th conversion in injected\n              sequence",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "JSQ3": {
    +                    "description": "3rd conversion in injected\n              sequence",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "JSQ2": {
    +                    "description": "2nd conversion in injected\n              sequence",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "JSQ1": {
    +                    "description": "1st conversion in injected\n              sequence",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "JDR1": {
    +              "description": "injected data register x",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "JDATA": {
    +                    "description": "Injected data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "JDR2": {
    +              "description": "injected data register x",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "JDATA": {
    +                    "description": "Injected data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "JDR3": {
    +              "description": "injected data register x",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "JDATA": {
    +                    "description": "Injected data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "JDR4": {
    +              "description": "injected data register x",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "JDATA": {
    +                    "description": "Injected data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "regular data register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Regular data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "OTG_HS_GLOBAL": {
    +        "description": "USB on the go high speed",
    +        "children": {
    +          "registers": {
    +            "OTG_HS_GOTGCTL": {
    +              "description": "OTG_HS control and status\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 2048,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SRQSCS": {
    +                    "description": "Session request success",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SRQ": {
    +                    "description": "Session request",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HNGSCS": {
    +                    "description": "Host negotiation success",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HNPRQ": {
    +                    "description": "HNP request",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "HSHNPEN": {
    +                    "description": "Host set HNP enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "DHNPEN": {
    +                    "description": "Device HNP enabled",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CIDSTS": {
    +                    "description": "Connector ID status",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DBCT": {
    +                    "description": "Long/short debounce time",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ASVLD": {
    +                    "description": "A-session valid",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BSVLD": {
    +                    "description": "B-session valid",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GOTGINT": {
    +              "description": "OTG_HS interrupt register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SEDET": {
    +                    "description": "Session end detected",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SRSSCHG": {
    +                    "description": "Session request success status\n              change",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "HNSSCHG": {
    +                    "description": "Host negotiation success status\n              change",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "HNGDET": {
    +                    "description": "Host negotiation detected",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "ADTOCHG": {
    +                    "description": "A-device timeout change",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "DBCDNE": {
    +                    "description": "Debounce done",
    +                    "offset": 19,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GAHBCFG": {
    +              "description": "OTG_HS AHB configuration\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "GINT": {
    +                    "description": "Global interrupt mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "HBSTLEN": {
    +                    "description": "Burst length/type",
    +                    "offset": 1,
    +                    "size": 4
    +                  },
    +                  "DMAEN": {
    +                    "description": "DMA enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXFELVL": {
    +                    "description": "TxFIFO empty level",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PTXFELVL": {
    +                    "description": "Periodic TxFIFO empty\n              level",
    +                    "offset": 8,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GUSBCFG": {
    +              "description": "OTG_HS USB configuration\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 2560,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TOCAL": {
    +                    "description": "FS timeout calibration",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "PHYSEL": {
    +                    "description": "USB 2.0 high-speed ULPI PHY or USB 1.1\n              full-speed serial transceiver select",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SRPCAP": {
    +                    "description": "SRP-capable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "HNPCAP": {
    +                    "description": "HNP-capable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TRDT": {
    +                    "description": "USB turnaround time",
    +                    "offset": 10,
    +                    "size": 4
    +                  },
    +                  "PHYLPCS": {
    +                    "description": "PHY Low-power clock select",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ULPIFSLS": {
    +                    "description": "ULPI FS/LS select",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "ULPIAR": {
    +                    "description": "ULPI Auto-resume",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "ULPICSM": {
    +                    "description": "ULPI Clock SuspendM",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "ULPIEVBUSD": {
    +                    "description": "ULPI External VBUS Drive",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "ULPIEVBUSI": {
    +                    "description": "ULPI external VBUS\n              indicator",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TSDPS": {
    +                    "description": "TermSel DLine pulsing\n              selection",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "PCCI": {
    +                    "description": "Indicator complement",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "PTCI": {
    +                    "description": "Indicator pass through",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "ULPIIPD": {
    +                    "description": "ULPI interface protect\n              disable",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FHMOD": {
    +                    "description": "Forced host mode",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FDMOD": {
    +                    "description": "Forced peripheral mode",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CTXPKT": {
    +                    "description": "Corrupt Tx packet",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GRSTCTL": {
    +              "description": "OTG_HS reset register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 536870912,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSRST": {
    +                    "description": "Core soft reset",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "HSRST": {
    +                    "description": "HCLK soft reset",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FCRST": {
    +                    "description": "Host frame counter reset",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RXFFLSH": {
    +                    "description": "RxFIFO flush",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TXFFLSH": {
    +                    "description": "TxFIFO flush",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TxFIFO number",
    +                    "offset": 6,
    +                    "size": 5
    +                  },
    +                  "DMAREQ": {
    +                    "description": "DMA request signal",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "AHBIDL": {
    +                    "description": "AHB master idle",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GINTSTS": {
    +              "description": "OTG_HS core interrupt register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 67108896,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CMOD": {
    +                    "description": "Current mode of operation",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MMIS": {
    +                    "description": "Mode mismatch interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OTGINT": {
    +                    "description": "OTG interrupt",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SOF": {
    +                    "description": "Start of frame",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RXFLVL": {
    +                    "description": "RxFIFO nonempty",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NPTXFE": {
    +                    "description": "Nonperiodic TxFIFO empty",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GINAKEFF": {
    +                    "description": "Global IN nonperiodic NAK\n              effective",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BOUTNAKEFF": {
    +                    "description": "Global OUT NAK effective",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ESUSP": {
    +                    "description": "Early suspend",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "USBSUSP": {
    +                    "description": "USB suspend",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "USBRST": {
    +                    "description": "USB reset",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ENUMDNE": {
    +                    "description": "Enumeration done",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ISOODRP": {
    +                    "description": "Isochronous OUT packet dropped\n              interrupt",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EOPF": {
    +                    "description": "End of periodic frame\n              interrupt",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "IEPINT": {
    +                    "description": "IN endpoint interrupt",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEPINT": {
    +                    "description": "OUT endpoint interrupt",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IISOIXFR": {
    +                    "description": "Incomplete isochronous IN\n              transfer",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "PXFR_INCOMPISOOUT": {
    +                    "description": "Incomplete periodic\n              transfer",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "DATAFSUSP": {
    +                    "description": "Data fetch suspended",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "HPRTINT": {
    +                    "description": "Host port interrupt",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HCINT": {
    +                    "description": "Host channels interrupt",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PTXFE": {
    +                    "description": "Periodic TxFIFO empty",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CIDSCHG": {
    +                    "description": "Connector ID status change",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "DISCINT": {
    +                    "description": "Disconnect detected\n              interrupt",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "SRQINT": {
    +                    "description": "Session request/new session detected\n              interrupt",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "WKUINT": {
    +                    "description": "Resume/remote wakeup detected\n              interrupt",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GINTMSK": {
    +              "description": "OTG_HS interrupt mask register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MMISM": {
    +                    "description": "Mode mismatch interrupt\n              mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OTGINT": {
    +                    "description": "OTG interrupt mask",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SOFM": {
    +                    "description": "Start of frame mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RXFLVLM": {
    +                    "description": "Receive FIFO nonempty mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "NPTXFEM": {
    +                    "description": "Nonperiodic TxFIFO empty\n              mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GINAKEFFM": {
    +                    "description": "Global nonperiodic IN NAK effective\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GONAKEFFM": {
    +                    "description": "Global OUT NAK effective\n              mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ESUSPM": {
    +                    "description": "Early suspend mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "USBSUSPM": {
    +                    "description": "USB suspend mask",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "USBRST": {
    +                    "description": "USB reset mask",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ENUMDNEM": {
    +                    "description": "Enumeration done mask",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ISOODRPM": {
    +                    "description": "Isochronous OUT packet dropped interrupt\n              mask",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EOPFM": {
    +                    "description": "End of periodic frame interrupt\n              mask",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EPMISM": {
    +                    "description": "Endpoint mismatch interrupt\n              mask",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "IEPINT": {
    +                    "description": "IN endpoints interrupt\n              mask",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "OEPINT": {
    +                    "description": "OUT endpoints interrupt\n              mask",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "IISOIXFRM": {
    +                    "description": "Incomplete isochronous IN transfer\n              mask",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "PXFRM_IISOOXFRM": {
    +                    "description": "Incomplete periodic transfer\n              mask",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FSUSPM": {
    +                    "description": "Data fetch suspended mask",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "PRTIM": {
    +                    "description": "Host port interrupt mask",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HCIM": {
    +                    "description": "Host channels interrupt\n              mask",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "PTXFEM": {
    +                    "description": "Periodic TxFIFO empty mask",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "CIDSCHGM": {
    +                    "description": "Connector ID status change\n              mask",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "DISCINT": {
    +                    "description": "Disconnect detected interrupt\n              mask",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "SRQIM": {
    +                    "description": "Session request/new session detected\n              interrupt mask",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "WUIM": {
    +                    "description": "Resume/remote wakeup detected interrupt\n              mask",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GRXSTSR_Host": {
    +              "description": "OTG_HS Receive status debug read register\n          (host mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CHNUM": {
    +                    "description": "Channel number",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "BCNT": {
    +                    "description": "Byte count",
    +                    "offset": 4,
    +                    "size": 11
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 15,
    +                    "size": 2
    +                  },
    +                  "PKTSTS": {
    +                    "description": "Packet status",
    +                    "offset": 17,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GRXSTSP_Host": {
    +              "description": "OTG_HS status read and pop register (host\n          mode)",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CHNUM": {
    +                    "description": "Channel number",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "BCNT": {
    +                    "description": "Byte count",
    +                    "offset": 4,
    +                    "size": 11
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 15,
    +                    "size": 2
    +                  },
    +                  "PKTSTS": {
    +                    "description": "Packet status",
    +                    "offset": 17,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GRXFSIZ": {
    +              "description": "OTG_HS Receive FIFO size\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 512,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXFD": {
    +                    "description": "RxFIFO depth",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GNPTXFSIZ_Host": {
    +              "description": "OTG_HS nonperiodic transmit FIFO size\n          register (host mode)",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 512,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NPTXFSA": {
    +                    "description": "Nonperiodic transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "NPTXFD": {
    +                    "description": "Nonperiodic TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_TX0FSIZ_Peripheral": {
    +              "description": "Endpoint 0 transmit FIFO size (peripheral\n          mode)",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 512,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX0FSA": {
    +                    "description": "Endpoint 0 transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "TX0FD": {
    +                    "description": "Endpoint 0 TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GNPTXSTS": {
    +              "description": "OTG_HS nonperiodic transmit FIFO/queue\n          status register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 524800,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "NPTXFSAV": {
    +                    "description": "Nonperiodic TxFIFO space\n              available",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "NPTQXSAV": {
    +                    "description": "Nonperiodic transmit request queue space\n              available",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "NPTXQTOP": {
    +                    "description": "Top of the nonperiodic transmit request\n              queue",
    +                    "offset": 24,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GCCFG": {
    +              "description": "OTG_HS general core configuration\n          register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PWRDWN": {
    +                    "description": "Power down",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "I2CPADEN": {
    +                    "description": "Enable I2C bus connection for the\n              external I2C PHY interface",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "VBUSASEN": {
    +                    "description": "Enable the VBUS sensing\n              device",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "VBUSBSEN": {
    +                    "description": "Enable the VBUS sensing\n              device",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "SOFOUTEN": {
    +                    "description": "SOF output enable",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "NOVBUSSENS": {
    +                    "description": "VBUS sensing disable\n              option",
    +                    "offset": 21,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_CID": {
    +              "description": "OTG_HS core ID register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 4608,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRODUCT_ID": {
    +                    "description": "Product ID field",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_HPTXFSIZ": {
    +              "description": "OTG_HS Host periodic transmit FIFO size\n          register",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 33555968,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PTXSA": {
    +                    "description": "Host periodic TxFIFO start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "PTXFD": {
    +                    "description": "Host periodic TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPTXF1": {
    +              "description": "OTG_HS device IN endpoint transmit FIFO size\n          register",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 33555456,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXSA": {
    +                    "description": "IN endpoint FIFOx transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "INEPTXFD": {
    +                    "description": "IN endpoint TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPTXF2": {
    +              "description": "OTG_HS device IN endpoint transmit FIFO size\n          register",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 33555456,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXSA": {
    +                    "description": "IN endpoint FIFOx transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "INEPTXFD": {
    +                    "description": "IN endpoint TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPTXF3": {
    +              "description": "OTG_HS device IN endpoint transmit FIFO size\n          register",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 33555456,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXSA": {
    +                    "description": "IN endpoint FIFOx transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "INEPTXFD": {
    +                    "description": "IN endpoint TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPTXF4": {
    +              "description": "OTG_HS device IN endpoint transmit FIFO size\n          register",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 33555456,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXSA": {
    +                    "description": "IN endpoint FIFOx transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "INEPTXFD": {
    +                    "description": "IN endpoint TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPTXF5": {
    +              "description": "OTG_HS device IN endpoint transmit FIFO size\n          register",
    +              "offset": 292,
    +              "size": 32,
    +              "reset_value": 33555456,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXSA": {
    +                    "description": "IN endpoint FIFOx transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "INEPTXFD": {
    +                    "description": "IN endpoint TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPTXF6": {
    +              "description": "OTG_HS device IN endpoint transmit FIFO size\n          register",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 33555456,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXSA": {
    +                    "description": "IN endpoint FIFOx transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "INEPTXFD": {
    +                    "description": "IN endpoint TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_DIEPTXF7": {
    +              "description": "OTG_HS device IN endpoint transmit FIFO size\n          register",
    +              "offset": 300,
    +              "size": 32,
    +              "reset_value": 33555456,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXSA": {
    +                    "description": "IN endpoint FIFOx transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "INEPTXFD": {
    +                    "description": "IN endpoint TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GRXSTSR_Peripheral": {
    +              "description": "OTG_HS Receive status debug read register\n          (peripheral mode mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "BCNT": {
    +                    "description": "Byte count",
    +                    "offset": 4,
    +                    "size": 11
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 15,
    +                    "size": 2
    +                  },
    +                  "PKTSTS": {
    +                    "description": "Packet status",
    +                    "offset": 17,
    +                    "size": 4
    +                  },
    +                  "FRMNUM": {
    +                    "description": "Frame number",
    +                    "offset": 21,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "OTG_HS_GRXSTSP_Peripheral": {
    +              "description": "OTG_HS status read and pop register\n          (peripheral mode)",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "BCNT": {
    +                    "description": "Byte count",
    +                    "offset": 4,
    +                    "size": 11
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 15,
    +                    "size": 2
    +                  },
    +                  "PKTSTS": {
    +                    "description": "Packet status",
    +                    "offset": 17,
    +                    "size": 4
    +                  },
    +                  "FRMNUM": {
    +                    "description": "Frame number",
    +                    "offset": 21,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "EXTI": {
    +        "description": "External interrupt/event\n      controller",
    +        "children": {
    +          "registers": {
    +            "IMR": {
    +              "description": "Interrupt mask register\n          (EXTI_IMR)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MR0": {
    +                    "description": "Interrupt Mask on line 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MR1": {
    +                    "description": "Interrupt Mask on line 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MR2": {
    +                    "description": "Interrupt Mask on line 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MR3": {
    +                    "description": "Interrupt Mask on line 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MR4": {
    +                    "description": "Interrupt Mask on line 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "MR5": {
    +                    "description": "Interrupt Mask on line 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "MR6": {
    +                    "description": "Interrupt Mask on line 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MR7": {
    +                    "description": "Interrupt Mask on line 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MR8": {
    +                    "description": "Interrupt Mask on line 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "MR9": {
    +                    "description": "Interrupt Mask on line 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "MR10": {
    +                    "description": "Interrupt Mask on line 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "MR11": {
    +                    "description": "Interrupt Mask on line 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "MR12": {
    +                    "description": "Interrupt Mask on line 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "MR13": {
    +                    "description": "Interrupt Mask on line 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "MR14": {
    +                    "description": "Interrupt Mask on line 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "MR15": {
    +                    "description": "Interrupt Mask on line 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MR16": {
    +                    "description": "Interrupt Mask on line 16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "MR17": {
    +                    "description": "Interrupt Mask on line 17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "MR18": {
    +                    "description": "Interrupt Mask on line 18",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "MR19": {
    +                    "description": "Interrupt Mask on line 19",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "MR20": {
    +                    "description": "Interrupt Mask on line 20",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "MR21": {
    +                    "description": "Interrupt Mask on line 21",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "MR22": {
    +                    "description": "Interrupt Mask on line 22",
    +                    "offset": 22,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EMR": {
    +              "description": "Event mask register (EXTI_EMR)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MR0": {
    +                    "description": "Event Mask on line 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MR1": {
    +                    "description": "Event Mask on line 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MR2": {
    +                    "description": "Event Mask on line 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MR3": {
    +                    "description": "Event Mask on line 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MR4": {
    +                    "description": "Event Mask on line 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "MR5": {
    +                    "description": "Event Mask on line 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "MR6": {
    +                    "description": "Event Mask on line 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MR7": {
    +                    "description": "Event Mask on line 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MR8": {
    +                    "description": "Event Mask on line 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "MR9": {
    +                    "description": "Event Mask on line 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "MR10": {
    +                    "description": "Event Mask on line 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "MR11": {
    +                    "description": "Event Mask on line 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "MR12": {
    +                    "description": "Event Mask on line 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "MR13": {
    +                    "description": "Event Mask on line 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "MR14": {
    +                    "description": "Event Mask on line 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "MR15": {
    +                    "description": "Event Mask on line 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MR16": {
    +                    "description": "Event Mask on line 16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "MR17": {
    +                    "description": "Event Mask on line 17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "MR18": {
    +                    "description": "Event Mask on line 18",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "MR19": {
    +                    "description": "Event Mask on line 19",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "MR20": {
    +                    "description": "Event Mask on line 20",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "MR21": {
    +                    "description": "Event Mask on line 21",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "MR22": {
    +                    "description": "Event Mask on line 22",
    +                    "offset": 22,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RTSR": {
    +              "description": "Rising Trigger selection register\n          (EXTI_RTSR)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TR0": {
    +                    "description": "Rising trigger event configuration of\n              line 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TR1": {
    +                    "description": "Rising trigger event configuration of\n              line 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TR2": {
    +                    "description": "Rising trigger event configuration of\n              line 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TR3": {
    +                    "description": "Rising trigger event configuration of\n              line 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TR4": {
    +                    "description": "Rising trigger event configuration of\n              line 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TR5": {
    +                    "description": "Rising trigger event configuration of\n              line 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TR6": {
    +                    "description": "Rising trigger event configuration of\n              line 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TR7": {
    +                    "description": "Rising trigger event configuration of\n              line 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TR8": {
    +                    "description": "Rising trigger event configuration of\n              line 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TR9": {
    +                    "description": "Rising trigger event configuration of\n              line 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TR10": {
    +                    "description": "Rising trigger event configuration of\n              line 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TR11": {
    +                    "description": "Rising trigger event configuration of\n              line 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TR12": {
    +                    "description": "Rising trigger event configuration of\n              line 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TR13": {
    +                    "description": "Rising trigger event configuration of\n              line 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TR14": {
    +                    "description": "Rising trigger event configuration of\n              line 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TR15": {
    +                    "description": "Rising trigger event configuration of\n              line 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TR16": {
    +                    "description": "Rising trigger event configuration of\n              line 16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TR17": {
    +                    "description": "Rising trigger event configuration of\n              line 17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TR18": {
    +                    "description": "Rising trigger event configuration of\n              line 18",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TR19": {
    +                    "description": "Rising trigger event configuration of\n              line 19",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "TR20": {
    +                    "description": "Rising trigger event configuration of\n              line 20",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "TR21": {
    +                    "description": "Rising trigger event configuration of\n              line 21",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TR22": {
    +                    "description": "Rising trigger event configuration of\n              line 22",
    +                    "offset": 22,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FTSR": {
    +              "description": "Falling Trigger selection register\n          (EXTI_FTSR)",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TR0": {
    +                    "description": "Falling trigger event configuration of\n              line 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TR1": {
    +                    "description": "Falling trigger event configuration of\n              line 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TR2": {
    +                    "description": "Falling trigger event configuration of\n              line 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TR3": {
    +                    "description": "Falling trigger event configuration of\n              line 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TR4": {
    +                    "description": "Falling trigger event configuration of\n              line 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TR5": {
    +                    "description": "Falling trigger event configuration of\n              line 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TR6": {
    +                    "description": "Falling trigger event configuration of\n              line 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TR7": {
    +                    "description": "Falling trigger event configuration of\n              line 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TR8": {
    +                    "description": "Falling trigger event configuration of\n              line 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TR9": {
    +                    "description": "Falling trigger event configuration of\n              line 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TR10": {
    +                    "description": "Falling trigger event configuration of\n              line 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TR11": {
    +                    "description": "Falling trigger event configuration of\n              line 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TR12": {
    +                    "description": "Falling trigger event configuration of\n              line 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TR13": {
    +                    "description": "Falling trigger event configuration of\n              line 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TR14": {
    +                    "description": "Falling trigger event configuration of\n              line 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TR15": {
    +                    "description": "Falling trigger event configuration of\n              line 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TR16": {
    +                    "description": "Falling trigger event configuration of\n              line 16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TR17": {
    +                    "description": "Falling trigger event configuration of\n              line 17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TR18": {
    +                    "description": "Falling trigger event configuration of\n              line 18",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TR19": {
    +                    "description": "Falling trigger event configuration of\n              line 19",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "TR20": {
    +                    "description": "Falling trigger event configuration of\n              line 20",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "TR21": {
    +                    "description": "Falling trigger event configuration of\n              line 21",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TR22": {
    +                    "description": "Falling trigger event configuration of\n              line 22",
    +                    "offset": 22,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SWIER": {
    +              "description": "Software interrupt event register\n          (EXTI_SWIER)",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SWIER0": {
    +                    "description": "Software Interrupt on line\n              0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SWIER1": {
    +                    "description": "Software Interrupt on line\n              1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SWIER2": {
    +                    "description": "Software Interrupt on line\n              2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SWIER3": {
    +                    "description": "Software Interrupt on line\n              3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SWIER4": {
    +                    "description": "Software Interrupt on line\n              4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SWIER5": {
    +                    "description": "Software Interrupt on line\n              5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "SWIER6": {
    +                    "description": "Software Interrupt on line\n              6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SWIER7": {
    +                    "description": "Software Interrupt on line\n              7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SWIER8": {
    +                    "description": "Software Interrupt on line\n              8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SWIER9": {
    +                    "description": "Software Interrupt on line\n              9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SWIER10": {
    +                    "description": "Software Interrupt on line\n              10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SWIER11": {
    +                    "description": "Software Interrupt on line\n              11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SWIER12": {
    +                    "description": "Software Interrupt on line\n              12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "SWIER13": {
    +                    "description": "Software Interrupt on line\n              13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "SWIER14": {
    +                    "description": "Software Interrupt on line\n              14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SWIER15": {
    +                    "description": "Software Interrupt on line\n              15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "SWIER16": {
    +                    "description": "Software Interrupt on line\n              16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SWIER17": {
    +                    "description": "Software Interrupt on line\n              17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "SWIER18": {
    +                    "description": "Software Interrupt on line\n              18",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "SWIER19": {
    +                    "description": "Software Interrupt on line\n              19",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "SWIER20": {
    +                    "description": "Software Interrupt on line\n              20",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "SWIER21": {
    +                    "description": "Software Interrupt on line\n              21",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "SWIER22": {
    +                    "description": "Software Interrupt on line\n              22",
    +                    "offset": 22,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PR": {
    +              "description": "Pending register (EXTI_PR)",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PR0": {
    +                    "description": "Pending bit 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PR1": {
    +                    "description": "Pending bit 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PR2": {
    +                    "description": "Pending bit 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PR3": {
    +                    "description": "Pending bit 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PR4": {
    +                    "description": "Pending bit 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "PR5": {
    +                    "description": "Pending bit 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PR6": {
    +                    "description": "Pending bit 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PR7": {
    +                    "description": "Pending bit 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PR8": {
    +                    "description": "Pending bit 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PR9": {
    +                    "description": "Pending bit 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PR10": {
    +                    "description": "Pending bit 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PR11": {
    +                    "description": "Pending bit 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "PR12": {
    +                    "description": "Pending bit 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "PR13": {
    +                    "description": "Pending bit 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "PR14": {
    +                    "description": "Pending bit 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PR15": {
    +                    "description": "Pending bit 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "PR16": {
    +                    "description": "Pending bit 16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "PR17": {
    +                    "description": "Pending bit 17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "PR18": {
    +                    "description": "Pending bit 18",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "PR19": {
    +                    "description": "Pending bit 19",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "PR20": {
    +                    "description": "Pending bit 20",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "PR21": {
    +                    "description": "Pending bit 21",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "PR22": {
    +                    "description": "Pending bit 22",
    +                    "offset": 22,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "USART6": {
    +        "description": "Universal synchronous asynchronous receiver\n      transmitter",
    +        "children": {
    +          "registers": {
    +            "SR": {
    +              "description": "Status register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 12582912,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTS": {
    +                    "description": "CTS flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "LBD": {
    +                    "description": "LIN break detection flag",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TXE": {
    +                    "description": "Transmit data register\n              empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TC": {
    +                    "description": "Transmission complete",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RXNE": {
    +                    "description": "Read data register not\n              empty",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IDLE": {
    +                    "description": "IDLE line detected",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ORE": {
    +                    "description": "Overrun error",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NF": {
    +                    "description": "Noise detected flag",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FE": {
    +                    "description": "Framing error",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PE": {
    +                    "description": "Parity error",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "Data register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DR": {
    +                    "description": "Data value",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "BRR": {
    +              "description": "Baud rate register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DIV_Mantissa": {
    +                    "description": "mantissa of USARTDIV",
    +                    "offset": 4,
    +                    "size": 12
    +                  },
    +                  "DIV_Fraction": {
    +                    "description": "fraction of USARTDIV",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CR1": {
    +              "description": "Control register 1",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OVER8": {
    +                    "description": "Oversampling mode",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "UE": {
    +                    "description": "USART enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "M": {
    +                    "description": "Word length",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WAKE": {
    +                    "description": "Wakeup method",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "PCE": {
    +                    "description": "Parity control enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PS": {
    +                    "description": "Parity selection",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PEIE": {
    +                    "description": "PE interrupt enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TXEIE": {
    +                    "description": "TXE interrupt enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transmission complete interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RXNEIE": {
    +                    "description": "RXNE interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IDLEIE": {
    +                    "description": "IDLE interrupt enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TE": {
    +                    "description": "Transmitter enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RE": {
    +                    "description": "Receiver enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RWU": {
    +                    "description": "Receiver wakeup",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SBK": {
    +                    "description": "Send break",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "Control register 2",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LINEN": {
    +                    "description": "LIN mode enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "STOP": {
    +                    "description": "STOP bits",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "CLKEN": {
    +                    "description": "Clock enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CPOL": {
    +                    "description": "Clock polarity",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CPHA": {
    +                    "description": "Clock phase",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "LBCL": {
    +                    "description": "Last bit clock pulse",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LBDIE": {
    +                    "description": "LIN break detection interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "LBDL": {
    +                    "description": "lin break detection length",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ADD": {
    +                    "description": "Address of the USART node",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CR3": {
    +              "description": "Control register 3",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ONEBIT": {
    +                    "description": "One sample bit method\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CTSIE": {
    +                    "description": "CTS interrupt enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CTSE": {
    +                    "description": "CTS enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RTSE": {
    +                    "description": "RTS enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DMAT": {
    +                    "description": "DMA enable transmitter",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "DMAR": {
    +                    "description": "DMA enable receiver",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SCEN": {
    +                    "description": "Smartcard mode enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NACK": {
    +                    "description": "Smartcard NACK enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "HDSEL": {
    +                    "description": "Half-duplex selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IRLP": {
    +                    "description": "IrDA low-power",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IREN": {
    +                    "description": "IrDA mode enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EIE": {
    +                    "description": "Error interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GTPR": {
    +              "description": "Guard time and prescaler\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "GT": {
    +                    "description": "Guard time value",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "FLASH": {
    +        "description": "FLASH",
    +        "children": {
    +          "registers": {
    +            "ACR": {
    +              "description": "Flash access control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LATENCY": {
    +                    "description": "Latency",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "PRFTEN": {
    +                    "description": "Prefetch enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ICEN": {
    +                    "description": "Instruction cache enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DCEN": {
    +                    "description": "Data cache enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ICRST": {
    +                    "description": "Instruction cache reset",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "DCRST": {
    +                    "description": "Data cache reset",
    +                    "offset": 12,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "KEYR": {
    +              "description": "Flash key register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "KEY": {
    +                    "description": "FPEC key",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OPTKEYR": {
    +              "description": "Flash option key register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "OPTKEY": {
    +                    "description": "Option byte key",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "Status register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EOP": {
    +                    "description": "End of operation",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "OPERR": {
    +                    "description": "Operation error",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "WRPERR": {
    +                    "description": "Write protection error",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "PGAERR": {
    +                    "description": "Programming alignment\n              error",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PGPERR": {
    +                    "description": "Programming parallelism\n              error",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PGSERR": {
    +                    "description": "Programming sequence error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BSY": {
    +                    "description": "Busy",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CR": {
    +              "description": "Control register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 2147483648,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PG": {
    +                    "description": "Programming",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SER": {
    +                    "description": "Sector Erase",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MER": {
    +                    "description": "Mass Erase of sectors 0 to\n              11",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SNB": {
    +                    "description": "Sector number",
    +                    "offset": 3,
    +                    "size": 5
    +                  },
    +                  "PSIZE": {
    +                    "description": "Program size",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MER1": {
    +                    "description": "Mass Erase of sectors 12 to\n              23",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "STRT": {
    +                    "description": "Start",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EOPIE": {
    +                    "description": "End of operation interrupt\n              enable",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "Error interrupt enable",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "LOCK": {
    +                    "description": "Lock",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OPTCR": {
    +              "description": "Flash option control register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 268413677,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OPTLOCK": {
    +                    "description": "Option lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "OPTSTRT": {
    +                    "description": "Option start",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "BOR_LEV": {
    +                    "description": "BOR reset Level",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "WDG_SW": {
    +                    "description": "WDG_SW User option bytes",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "nRST_STOP": {
    +                    "description": "nRST_STOP User option\n              bytes",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "nRST_STDBY": {
    +                    "description": "nRST_STDBY User option\n              bytes",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RDP": {
    +                    "description": "Read protect",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "nWRP": {
    +                    "description": "Not write protect",
    +                    "offset": 16,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "OPTCR1": {
    +              "description": "Flash option control register\n          1",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 268369920,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "nWRP": {
    +                    "description": "Not write protect",
    +                    "offset": 16,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "NVIC": {
    +        "description": "Nested Vectored Interrupt\n      Controller",
    +        "children": {
    +          "registers": {
    +            "ISER0": {
    +              "description": "Interrupt Set-Enable Register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SETENA": {
    +                    "description": "SETENA",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ISER1": {
    +              "description": "Interrupt Set-Enable Register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SETENA": {
    +                    "description": "SETENA",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ISER2": {
    +              "description": "Interrupt Set-Enable Register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SETENA": {
    +                    "description": "SETENA",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICER0": {
    +              "description": "Interrupt Clear-Enable\n          Register",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLRENA": {
    +                    "description": "CLRENA",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICER1": {
    +              "description": "Interrupt Clear-Enable\n          Register",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLRENA": {
    +                    "description": "CLRENA",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICER2": {
    +              "description": "Interrupt Clear-Enable\n          Register",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLRENA": {
    +                    "description": "CLRENA",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ISPR0": {
    +              "description": "Interrupt Set-Pending Register",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SETPEND": {
    +                    "description": "SETPEND",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ISPR1": {
    +              "description": "Interrupt Set-Pending Register",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SETPEND": {
    +                    "description": "SETPEND",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ISPR2": {
    +              "description": "Interrupt Set-Pending Register",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SETPEND": {
    +                    "description": "SETPEND",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICPR0": {
    +              "description": "Interrupt Clear-Pending\n          Register",
    +              "offset": 384,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLRPEND": {
    +                    "description": "CLRPEND",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICPR1": {
    +              "description": "Interrupt Clear-Pending\n          Register",
    +              "offset": 388,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLRPEND": {
    +                    "description": "CLRPEND",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICPR2": {
    +              "description": "Interrupt Clear-Pending\n          Register",
    +              "offset": 392,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLRPEND": {
    +                    "description": "CLRPEND",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IABR0": {
    +              "description": "Interrupt Active Bit Register",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ACTIVE": {
    +                    "description": "ACTIVE",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IABR1": {
    +              "description": "Interrupt Active Bit Register",
    +              "offset": 516,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ACTIVE": {
    +                    "description": "ACTIVE",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IABR2": {
    +              "description": "Interrupt Active Bit Register",
    +              "offset": 520,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ACTIVE": {
    +                    "description": "ACTIVE",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IPR0": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR1": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR2": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR3": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 780,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR4": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 784,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR5": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 788,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR6": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 792,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR7": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 796,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR8": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 800,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR9": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 804,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR10": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 808,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR11": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 812,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR12": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 816,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR13": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 820,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR14": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 824,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR15": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 828,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR16": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 832,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR17": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 836,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR18": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 840,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR19": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 844,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IPR20": {
    +              "description": "Interrupt Priority Register",
    +              "offset": 848,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IPR_N0": {
    +                    "description": "IPR_N0",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "IPR_N1": {
    +                    "description": "IPR_N1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "IPR_N2": {
    +                    "description": "IPR_N2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IPR_N3": {
    +                    "description": "IPR_N3",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "Ethernet_MAC": {
    +        "description": "Ethernet: media access control\n      (MAC)",
    +        "children": {
    +          "registers": {
    +            "MACCR": {
    +              "description": "Ethernet MAC configuration\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 32768,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RE": {
    +                    "description": "RE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TE": {
    +                    "description": "TE",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DC": {
    +                    "description": "DC",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BL": {
    +                    "description": "BL",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "APCS": {
    +                    "description": "APCS",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RD": {
    +                    "description": "RD",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "IPCO": {
    +                    "description": "IPCO",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "DM": {
    +                    "description": "DM",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "LM": {
    +                    "description": "LM",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ROD": {
    +                    "description": "ROD",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FES": {
    +                    "description": "FES",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CSD": {
    +                    "description": "CSD",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "IFG": {
    +                    "description": "IFG",
    +                    "offset": 17,
    +                    "size": 3
    +                  },
    +                  "JD": {
    +                    "description": "JD",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "WD": {
    +                    "description": "WD",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "CSTF": {
    +                    "description": "CSTF",
    +                    "offset": 25,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACFFR": {
    +              "description": "Ethernet MAC frame filter\n          register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PM": {
    +                    "description": "PM",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "HU": {
    +                    "description": "HU",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HM": {
    +                    "description": "HM",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DAIF": {
    +                    "description": "DAIF",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RAM": {
    +                    "description": "RAM",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BFD": {
    +                    "description": "BFD",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PCF": {
    +                    "description": "PCF",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SAIF": {
    +                    "description": "SAIF",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SAF": {
    +                    "description": "SAF",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "HPF": {
    +                    "description": "HPF",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RA": {
    +                    "description": "RA",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACHTHR": {
    +              "description": "Ethernet MAC hash table high\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HTH": {
    +                    "description": "HTH",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MACHTLR": {
    +              "description": "Ethernet MAC hash table low\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HTL": {
    +                    "description": "HTL",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MACMIIAR": {
    +              "description": "Ethernet MAC MII address\n          register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MB": {
    +                    "description": "MB",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MW": {
    +                    "description": "MW",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CR": {
    +                    "description": "CR",
    +                    "offset": 2,
    +                    "size": 3
    +                  },
    +                  "MR": {
    +                    "description": "MR",
    +                    "offset": 6,
    +                    "size": 5
    +                  },
    +                  "PA": {
    +                    "description": "PA",
    +                    "offset": 11,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "MACMIIDR": {
    +              "description": "Ethernet MAC MII data register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TD": {
    +                    "description": "TD",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "MACFCR": {
    +              "description": "Ethernet MAC flow control\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FCB": {
    +                    "description": "FCB",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TFCE": {
    +                    "description": "TFCE",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RFCE": {
    +                    "description": "RFCE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UPFD": {
    +                    "description": "UPFD",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PLT": {
    +                    "description": "PLT",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "ZQPD": {
    +                    "description": "ZQPD",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PT": {
    +                    "description": "PT",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "MACVLANTR": {
    +              "description": "Ethernet MAC VLAN tag register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VLANTI": {
    +                    "description": "VLANTI",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "VLANTC": {
    +                    "description": "VLANTC",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACPMTCSR": {
    +              "description": "Ethernet MAC PMT control and status\n          register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PD": {
    +                    "description": "PD",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MPE": {
    +                    "description": "MPE",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "WFE": {
    +                    "description": "WFE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MPR": {
    +                    "description": "MPR",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "WFR": {
    +                    "description": "WFR",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GU": {
    +                    "description": "GU",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "WFFRPR": {
    +                    "description": "WFFRPR",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACDBGR": {
    +              "description": "Ethernet MAC debug register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CR": {
    +                    "description": "CR",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CSR": {
    +                    "description": "CSR",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ROR": {
    +                    "description": "ROR",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MCF": {
    +                    "description": "MCF",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MCP": {
    +                    "description": "MCP",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "MCFHP": {
    +                    "description": "MCFHP",
    +                    "offset": 5,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACSR": {
    +              "description": "Ethernet MAC interrupt status\n          register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PMTS": {
    +                    "description": "PMTS",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MMCS": {
    +                    "description": "MMCS",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MMCRS": {
    +                    "description": "MMCRS",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MMCTS": {
    +                    "description": "MMCTS",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TSTS": {
    +                    "description": "TSTS",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACIMR": {
    +              "description": "Ethernet MAC interrupt mask\n          register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PMTIM": {
    +                    "description": "PMTIM",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TSTIM": {
    +                    "description": "TSTIM",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACA0HR": {
    +              "description": "Ethernet MAC address 0 high\n          register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 1114111,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MACA0H": {
    +                    "description": "MAC address0 high",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "MO": {
    +                    "description": "Always 1",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "MACA0LR": {
    +              "description": "Ethernet MAC address 0 low\n          register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MACA0L": {
    +                    "description": "0",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MACA1HR": {
    +              "description": "Ethernet MAC address 1 high\n          register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 65535,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MACA1H": {
    +                    "description": "MACA1H",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "MBC": {
    +                    "description": "MBC",
    +                    "offset": 24,
    +                    "size": 6
    +                  },
    +                  "SA": {
    +                    "description": "SA",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "AE": {
    +                    "description": "AE",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACA1LR": {
    +              "description": "Ethernet MAC address1 low\n          register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MACA1LR": {
    +                    "description": "MACA1LR",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MACA2HR": {
    +              "description": "Ethernet MAC address 2 high\n          register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 65535,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MAC2AH": {
    +                    "description": "MAC2AH",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "MBC": {
    +                    "description": "MBC",
    +                    "offset": 24,
    +                    "size": 6
    +                  },
    +                  "SA": {
    +                    "description": "SA",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "AE": {
    +                    "description": "AE",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACA2LR": {
    +              "description": "Ethernet MAC address 2 low\n          register",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MACA2L": {
    +                    "description": "MACA2L",
    +                    "offset": 0,
    +                    "size": 31
    +                  }
    +                }
    +              }
    +            },
    +            "MACA3HR": {
    +              "description": "Ethernet MAC address 3 high\n          register",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 65535,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MACA3H": {
    +                    "description": "MACA3H",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "MBC": {
    +                    "description": "MBC",
    +                    "offset": 24,
    +                    "size": 6
    +                  },
    +                  "SA": {
    +                    "description": "SA",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "AE": {
    +                    "description": "AE",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MACA3LR": {
    +              "description": "Ethernet MAC address 3 low\n          register",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MBCA3L": {
    +                    "description": "MBCA3L",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "CAN1": {
    +        "description": "Controller area network",
    +        "children": {
    +          "registers": {
    +            "MCR": {
    +              "description": "master control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 65538,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBF": {
    +                    "description": "DBF",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "RESET",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TTCM": {
    +                    "description": "TTCM",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ABOM": {
    +                    "description": "ABOM",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "AWUM": {
    +                    "description": "AWUM",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NART": {
    +                    "description": "NART",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RFLM": {
    +                    "description": "RFLM",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TXFP": {
    +                    "description": "TXFP",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SLEEP": {
    +                    "description": "SLEEP",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "INRQ": {
    +                    "description": "INRQ",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MSR": {
    +              "description": "master status register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 3074,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX": {
    +                    "description": "RX",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SAMP": {
    +                    "description": "SAMP",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXM": {
    +                    "description": "RXM",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXM": {
    +                    "description": "TXM",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SLAKI": {
    +                    "description": "SLAKI",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "WKUI": {
    +                    "description": "WKUI",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ERRI": {
    +                    "description": "ERRI",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SLAK": {
    +                    "description": "SLAK",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INAK": {
    +                    "description": "INAK",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "TSR": {
    +              "description": "transmit status register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 469762048,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LOW2": {
    +                    "description": "Lowest priority flag for mailbox\n              2",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LOW1": {
    +                    "description": "Lowest priority flag for mailbox\n              1",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LOW0": {
    +                    "description": "Lowest priority flag for mailbox\n              0",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TME2": {
    +                    "description": "Lowest priority flag for mailbox\n              2",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TME1": {
    +                    "description": "Lowest priority flag for mailbox\n              1",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TME0": {
    +                    "description": "Lowest priority flag for mailbox\n              0",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CODE": {
    +                    "description": "CODE",
    +                    "offset": 24,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "ABRQ2": {
    +                    "description": "ABRQ2",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "TERR2": {
    +                    "description": "TERR2",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "ALST2": {
    +                    "description": "ALST2",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TXOK2": {
    +                    "description": "TXOK2",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "RQCP2": {
    +                    "description": "RQCP2",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "ABRQ1": {
    +                    "description": "ABRQ1",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TERR1": {
    +                    "description": "TERR1",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ALST1": {
    +                    "description": "ALST1",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TXOK1": {
    +                    "description": "TXOK1",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RQCP1": {
    +                    "description": "RQCP1",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ABRQ0": {
    +                    "description": "ABRQ0",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TERR0": {
    +                    "description": "TERR0",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ALST0": {
    +                    "description": "ALST0",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TXOK0": {
    +                    "description": "TXOK0",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RQCP0": {
    +                    "description": "RQCP0",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RF0R": {
    +              "description": "receive FIFO 0 register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RFOM0": {
    +                    "description": "RFOM0",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FOVR0": {
    +                    "description": "FOVR0",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FULL0": {
    +                    "description": "FULL0",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FMP0": {
    +                    "description": "FMP0",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RF1R": {
    +              "description": "receive FIFO 1 register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RFOM1": {
    +                    "description": "RFOM1",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FOVR1": {
    +                    "description": "FOVR1",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FULL1": {
    +                    "description": "FULL1",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FMP1": {
    +                    "description": "FMP1",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IER": {
    +              "description": "interrupt enable register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SLKIE": {
    +                    "description": "SLKIE",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "WKUIE": {
    +                    "description": "WKUIE",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "ERRIE",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LECIE": {
    +                    "description": "LECIE",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BOFIE": {
    +                    "description": "BOFIE",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EPVIE": {
    +                    "description": "EPVIE",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EWGIE": {
    +                    "description": "EWGIE",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FOVIE1": {
    +                    "description": "FOVIE1",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FFIE1": {
    +                    "description": "FFIE1",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FMPIE1": {
    +                    "description": "FMPIE1",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FOVIE0": {
    +                    "description": "FOVIE0",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FFIE0": {
    +                    "description": "FFIE0",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FMPIE0": {
    +                    "description": "FMPIE0",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TMEIE": {
    +                    "description": "TMEIE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ESR": {
    +              "description": "interrupt enable register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REC": {
    +                    "description": "REC",
    +                    "offset": 24,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "TEC": {
    +                    "description": "TEC",
    +                    "offset": 16,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "LEC": {
    +                    "description": "LEC",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "BOFF": {
    +                    "description": "BOFF",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPVF": {
    +                    "description": "EPVF",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EWGF": {
    +                    "description": "EWGF",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "BTR": {
    +              "description": "bit timing register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SILM": {
    +                    "description": "SILM",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LBKM": {
    +                    "description": "LBKM",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SJW": {
    +                    "description": "SJW",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "TS2": {
    +                    "description": "TS2",
    +                    "offset": 20,
    +                    "size": 3
    +                  },
    +                  "TS1": {
    +                    "description": "TS1",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "BRP": {
    +                    "description": "BRP",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "TI0R": {
    +              "description": "TX mailbox identifier register",
    +              "offset": 384,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STID": {
    +                    "description": "STID",
    +                    "offset": 21,
    +                    "size": 11
    +                  },
    +                  "EXID": {
    +                    "description": "EXID",
    +                    "offset": 3,
    +                    "size": 18
    +                  },
    +                  "IDE": {
    +                    "description": "IDE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTR": {
    +                    "description": "RTR",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TXRQ": {
    +                    "description": "TXRQ",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TDT0R": {
    +              "description": "mailbox data length control and time stamp\n          register",
    +              "offset": 388,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIME": {
    +                    "description": "TIME",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "TGT": {
    +                    "description": "TGT",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DLC": {
    +                    "description": "DLC",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "TDL0R": {
    +              "description": "mailbox data low register",
    +              "offset": 392,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA3": {
    +                    "description": "DATA3",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA2": {
    +                    "description": "DATA2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA1": {
    +                    "description": "DATA1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA0": {
    +                    "description": "DATA0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TDH0R": {
    +              "description": "mailbox data high register",
    +              "offset": 396,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA7": {
    +                    "description": "DATA7",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA6": {
    +                    "description": "DATA6",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA5": {
    +                    "description": "DATA5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA4": {
    +                    "description": "DATA4",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TI1R": {
    +              "description": "mailbox identifier register",
    +              "offset": 400,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STID": {
    +                    "description": "STID",
    +                    "offset": 21,
    +                    "size": 11
    +                  },
    +                  "EXID": {
    +                    "description": "EXID",
    +                    "offset": 3,
    +                    "size": 18
    +                  },
    +                  "IDE": {
    +                    "description": "IDE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTR": {
    +                    "description": "RTR",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TXRQ": {
    +                    "description": "TXRQ",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TDT1R": {
    +              "description": "mailbox data length control and time stamp\n          register",
    +              "offset": 404,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIME": {
    +                    "description": "TIME",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "TGT": {
    +                    "description": "TGT",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DLC": {
    +                    "description": "DLC",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "TDL1R": {
    +              "description": "mailbox data low register",
    +              "offset": 408,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA3": {
    +                    "description": "DATA3",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA2": {
    +                    "description": "DATA2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA1": {
    +                    "description": "DATA1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA0": {
    +                    "description": "DATA0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TDH1R": {
    +              "description": "mailbox data high register",
    +              "offset": 412,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA7": {
    +                    "description": "DATA7",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA6": {
    +                    "description": "DATA6",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA5": {
    +                    "description": "DATA5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA4": {
    +                    "description": "DATA4",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TI2R": {
    +              "description": "mailbox identifier register",
    +              "offset": 416,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STID": {
    +                    "description": "STID",
    +                    "offset": 21,
    +                    "size": 11
    +                  },
    +                  "EXID": {
    +                    "description": "EXID",
    +                    "offset": 3,
    +                    "size": 18
    +                  },
    +                  "IDE": {
    +                    "description": "IDE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTR": {
    +                    "description": "RTR",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TXRQ": {
    +                    "description": "TXRQ",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TDT2R": {
    +              "description": "mailbox data length control and time stamp\n          register",
    +              "offset": 420,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIME": {
    +                    "description": "TIME",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "TGT": {
    +                    "description": "TGT",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DLC": {
    +                    "description": "DLC",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "TDL2R": {
    +              "description": "mailbox data low register",
    +              "offset": 424,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA3": {
    +                    "description": "DATA3",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA2": {
    +                    "description": "DATA2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA1": {
    +                    "description": "DATA1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA0": {
    +                    "description": "DATA0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TDH2R": {
    +              "description": "mailbox data high register",
    +              "offset": 428,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA7": {
    +                    "description": "DATA7",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA6": {
    +                    "description": "DATA6",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA5": {
    +                    "description": "DATA5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA4": {
    +                    "description": "DATA4",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "RI0R": {
    +              "description": "receive FIFO mailbox identifier\n          register",
    +              "offset": 432,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "STID": {
    +                    "description": "STID",
    +                    "offset": 21,
    +                    "size": 11
    +                  },
    +                  "EXID": {
    +                    "description": "EXID",
    +                    "offset": 3,
    +                    "size": 18
    +                  },
    +                  "IDE": {
    +                    "description": "IDE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTR": {
    +                    "description": "RTR",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RDT0R": {
    +              "description": "mailbox data high register",
    +              "offset": 436,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TIME": {
    +                    "description": "TIME",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "FMI": {
    +                    "description": "FMI",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DLC": {
    +                    "description": "DLC",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "RDL0R": {
    +              "description": "mailbox data high register",
    +              "offset": 440,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DATA3": {
    +                    "description": "DATA3",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA2": {
    +                    "description": "DATA2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA1": {
    +                    "description": "DATA1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA0": {
    +                    "description": "DATA0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "RDH0R": {
    +              "description": "receive FIFO mailbox data high\n          register",
    +              "offset": 444,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DATA7": {
    +                    "description": "DATA7",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA6": {
    +                    "description": "DATA6",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA5": {
    +                    "description": "DATA5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA4": {
    +                    "description": "DATA4",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "RI1R": {
    +              "description": "mailbox data high register",
    +              "offset": 448,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "STID": {
    +                    "description": "STID",
    +                    "offset": 21,
    +                    "size": 11
    +                  },
    +                  "EXID": {
    +                    "description": "EXID",
    +                    "offset": 3,
    +                    "size": 18
    +                  },
    +                  "IDE": {
    +                    "description": "IDE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTR": {
    +                    "description": "RTR",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RDT1R": {
    +              "description": "mailbox data high register",
    +              "offset": 452,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TIME": {
    +                    "description": "TIME",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "FMI": {
    +                    "description": "FMI",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DLC": {
    +                    "description": "DLC",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "RDL1R": {
    +              "description": "mailbox data high register",
    +              "offset": 456,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DATA3": {
    +                    "description": "DATA3",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA2": {
    +                    "description": "DATA2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA1": {
    +                    "description": "DATA1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA0": {
    +                    "description": "DATA0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "RDH1R": {
    +              "description": "mailbox data high register",
    +              "offset": 460,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DATA7": {
    +                    "description": "DATA7",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DATA6": {
    +                    "description": "DATA6",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA5": {
    +                    "description": "DATA5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA4": {
    +                    "description": "DATA4",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "FMR": {
    +              "description": "filter master register",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 706481665,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CAN2SB": {
    +                    "description": "CAN2SB",
    +                    "offset": 8,
    +                    "size": 6
    +                  },
    +                  "FINIT": {
    +                    "description": "FINIT",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FM1R": {
    +              "description": "filter mode register",
    +              "offset": 516,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FBM0": {
    +                    "description": "Filter mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FBM1": {
    +                    "description": "Filter mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FBM2": {
    +                    "description": "Filter mode",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FBM3": {
    +                    "description": "Filter mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FBM4": {
    +                    "description": "Filter mode",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FBM5": {
    +                    "description": "Filter mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FBM6": {
    +                    "description": "Filter mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FBM7": {
    +                    "description": "Filter mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FBM8": {
    +                    "description": "Filter mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FBM9": {
    +                    "description": "Filter mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FBM10": {
    +                    "description": "Filter mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FBM11": {
    +                    "description": "Filter mode",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FBM12": {
    +                    "description": "Filter mode",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FBM13": {
    +                    "description": "Filter mode",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FBM14": {
    +                    "description": "Filter mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FBM15": {
    +                    "description": "Filter mode",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FBM16": {
    +                    "description": "Filter mode",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FBM17": {
    +                    "description": "Filter mode",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FBM18": {
    +                    "description": "Filter mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FBM19": {
    +                    "description": "Filter mode",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FBM20": {
    +                    "description": "Filter mode",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FBM21": {
    +                    "description": "Filter mode",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FBM22": {
    +                    "description": "Filter mode",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FBM23": {
    +                    "description": "Filter mode",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FBM24": {
    +                    "description": "Filter mode",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FBM25": {
    +                    "description": "Filter mode",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FBM26": {
    +                    "description": "Filter mode",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FBM27": {
    +                    "description": "Filter mode",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS1R": {
    +              "description": "filter scale register",
    +              "offset": 524,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FSC0": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FSC1": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FSC2": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FSC3": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FSC4": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FSC5": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FSC6": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FSC7": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FSC8": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FSC9": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FSC10": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FSC11": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FSC12": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FSC13": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FSC14": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FSC15": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FSC16": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FSC17": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FSC18": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FSC19": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FSC20": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FSC21": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FSC22": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FSC23": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FSC24": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FSC25": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FSC26": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FSC27": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FFA1R": {
    +              "description": "filter FIFO assignment\n          register",
    +              "offset": 532,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FFA0": {
    +                    "description": "Filter FIFO assignment for filter\n              0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FFA1": {
    +                    "description": "Filter FIFO assignment for filter\n              1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FFA2": {
    +                    "description": "Filter FIFO assignment for filter\n              2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FFA3": {
    +                    "description": "Filter FIFO assignment for filter\n              3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FFA4": {
    +                    "description": "Filter FIFO assignment for filter\n              4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FFA5": {
    +                    "description": "Filter FIFO assignment for filter\n              5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FFA6": {
    +                    "description": "Filter FIFO assignment for filter\n              6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FFA7": {
    +                    "description": "Filter FIFO assignment for filter\n              7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FFA8": {
    +                    "description": "Filter FIFO assignment for filter\n              8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FFA9": {
    +                    "description": "Filter FIFO assignment for filter\n              9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FFA10": {
    +                    "description": "Filter FIFO assignment for filter\n              10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FFA11": {
    +                    "description": "Filter FIFO assignment for filter\n              11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FFA12": {
    +                    "description": "Filter FIFO assignment for filter\n              12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FFA13": {
    +                    "description": "Filter FIFO assignment for filter\n              13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FFA14": {
    +                    "description": "Filter FIFO assignment for filter\n              14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FFA15": {
    +                    "description": "Filter FIFO assignment for filter\n              15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FFA16": {
    +                    "description": "Filter FIFO assignment for filter\n              16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FFA17": {
    +                    "description": "Filter FIFO assignment for filter\n              17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FFA18": {
    +                    "description": "Filter FIFO assignment for filter\n              18",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FFA19": {
    +                    "description": "Filter FIFO assignment for filter\n              19",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FFA20": {
    +                    "description": "Filter FIFO assignment for filter\n              20",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FFA21": {
    +                    "description": "Filter FIFO assignment for filter\n              21",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FFA22": {
    +                    "description": "Filter FIFO assignment for filter\n              22",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FFA23": {
    +                    "description": "Filter FIFO assignment for filter\n              23",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FFA24": {
    +                    "description": "Filter FIFO assignment for filter\n              24",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FFA25": {
    +                    "description": "Filter FIFO assignment for filter\n              25",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FFA26": {
    +                    "description": "Filter FIFO assignment for filter\n              26",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FFA27": {
    +                    "description": "Filter FIFO assignment for filter\n              27",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FA1R": {
    +              "description": "filter activation register",
    +              "offset": 540,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FACT0": {
    +                    "description": "Filter active",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FACT1": {
    +                    "description": "Filter active",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FACT2": {
    +                    "description": "Filter active",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FACT3": {
    +                    "description": "Filter active",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FACT4": {
    +                    "description": "Filter active",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FACT5": {
    +                    "description": "Filter active",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FACT6": {
    +                    "description": "Filter active",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FACT7": {
    +                    "description": "Filter active",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FACT8": {
    +                    "description": "Filter active",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FACT9": {
    +                    "description": "Filter active",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FACT10": {
    +                    "description": "Filter active",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FACT11": {
    +                    "description": "Filter active",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FACT12": {
    +                    "description": "Filter active",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FACT13": {
    +                    "description": "Filter active",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FACT14": {
    +                    "description": "Filter active",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FACT15": {
    +                    "description": "Filter active",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FACT16": {
    +                    "description": "Filter active",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FACT17": {
    +                    "description": "Filter active",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FACT18": {
    +                    "description": "Filter active",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FACT19": {
    +                    "description": "Filter active",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FACT20": {
    +                    "description": "Filter active",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FACT21": {
    +                    "description": "Filter active",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FACT22": {
    +                    "description": "Filter active",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FACT23": {
    +                    "description": "Filter active",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FACT24": {
    +                    "description": "Filter active",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FACT25": {
    +                    "description": "Filter active",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FACT26": {
    +                    "description": "Filter active",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FACT27": {
    +                    "description": "Filter active",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F0R1": {
    +              "description": "Filter bank 0 register 1",
    +              "offset": 576,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F0R2": {
    +              "description": "Filter bank 0 register 2",
    +              "offset": 580,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F1R1": {
    +              "description": "Filter bank 1 register 1",
    +              "offset": 584,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F1R2": {
    +              "description": "Filter bank 1 register 2",
    +              "offset": 588,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F2R1": {
    +              "description": "Filter bank 2 register 1",
    +              "offset": 592,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F2R2": {
    +              "description": "Filter bank 2 register 2",
    +              "offset": 596,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F3R1": {
    +              "description": "Filter bank 3 register 1",
    +              "offset": 600,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F3R2": {
    +              "description": "Filter bank 3 register 2",
    +              "offset": 604,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F4R1": {
    +              "description": "Filter bank 4 register 1",
    +              "offset": 608,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F4R2": {
    +              "description": "Filter bank 4 register 2",
    +              "offset": 612,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F5R1": {
    +              "description": "Filter bank 5 register 1",
    +              "offset": 616,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F5R2": {
    +              "description": "Filter bank 5 register 2",
    +              "offset": 620,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F6R1": {
    +              "description": "Filter bank 6 register 1",
    +              "offset": 624,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F6R2": {
    +              "description": "Filter bank 6 register 2",
    +              "offset": 628,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F7R1": {
    +              "description": "Filter bank 7 register 1",
    +              "offset": 632,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F7R2": {
    +              "description": "Filter bank 7 register 2",
    +              "offset": 636,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F8R1": {
    +              "description": "Filter bank 8 register 1",
    +              "offset": 640,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F8R2": {
    +              "description": "Filter bank 8 register 2",
    +              "offset": 644,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F9R1": {
    +              "description": "Filter bank 9 register 1",
    +              "offset": 648,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F9R2": {
    +              "description": "Filter bank 9 register 2",
    +              "offset": 652,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F10R1": {
    +              "description": "Filter bank 10 register 1",
    +              "offset": 656,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F10R2": {
    +              "description": "Filter bank 10 register 2",
    +              "offset": 660,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F11R1": {
    +              "description": "Filter bank 11 register 1",
    +              "offset": 664,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F11R2": {
    +              "description": "Filter bank 11 register 2",
    +              "offset": 668,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F12R1": {
    +              "description": "Filter bank 4 register 1",
    +              "offset": 672,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F12R2": {
    +              "description": "Filter bank 12 register 2",
    +              "offset": 676,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F13R1": {
    +              "description": "Filter bank 13 register 1",
    +              "offset": 680,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F13R2": {
    +              "description": "Filter bank 13 register 2",
    +              "offset": 684,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F14R1": {
    +              "description": "Filter bank 14 register 1",
    +              "offset": 688,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F14R2": {
    +              "description": "Filter bank 14 register 2",
    +              "offset": 692,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F15R1": {
    +              "description": "Filter bank 15 register 1",
    +              "offset": 696,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F15R2": {
    +              "description": "Filter bank 15 register 2",
    +              "offset": 700,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F16R1": {
    +              "description": "Filter bank 16 register 1",
    +              "offset": 704,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F16R2": {
    +              "description": "Filter bank 16 register 2",
    +              "offset": 708,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F17R1": {
    +              "description": "Filter bank 17 register 1",
    +              "offset": 712,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F17R2": {
    +              "description": "Filter bank 17 register 2",
    +              "offset": 716,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F18R1": {
    +              "description": "Filter bank 18 register 1",
    +              "offset": 720,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F18R2": {
    +              "description": "Filter bank 18 register 2",
    +              "offset": 724,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F19R1": {
    +              "description": "Filter bank 19 register 1",
    +              "offset": 728,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F19R2": {
    +              "description": "Filter bank 19 register 2",
    +              "offset": 732,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F20R1": {
    +              "description": "Filter bank 20 register 1",
    +              "offset": 736,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F20R2": {
    +              "description": "Filter bank 20 register 2",
    +              "offset": 740,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F21R1": {
    +              "description": "Filter bank 21 register 1",
    +              "offset": 744,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F21R2": {
    +              "description": "Filter bank 21 register 2",
    +              "offset": 748,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F22R1": {
    +              "description": "Filter bank 22 register 1",
    +              "offset": 752,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F22R2": {
    +              "description": "Filter bank 22 register 2",
    +              "offset": 756,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F23R1": {
    +              "description": "Filter bank 23 register 1",
    +              "offset": 760,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F23R2": {
    +              "description": "Filter bank 23 register 2",
    +              "offset": 764,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F24R1": {
    +              "description": "Filter bank 24 register 1",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F24R2": {
    +              "description": "Filter bank 24 register 2",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F25R1": {
    +              "description": "Filter bank 25 register 1",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F25R2": {
    +              "description": "Filter bank 25 register 2",
    +              "offset": 780,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F26R1": {
    +              "description": "Filter bank 26 register 1",
    +              "offset": 784,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F26R2": {
    +              "description": "Filter bank 26 register 2",
    +              "offset": 788,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F27R1": {
    +              "description": "Filter bank 27 register 1",
    +              "offset": 792,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F27R2": {
    +              "description": "Filter bank 27 register 2",
    +              "offset": 796,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FB0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FB1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FB2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FB3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FB4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FB5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FB6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FB7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FB8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FB9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FB10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FB11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FB12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FB13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FB14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FB15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FB16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FB17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FB18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FB19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FB20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FB21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FB22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FB23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FB24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FB25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FB26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FB27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FB28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FB29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FB30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FB31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "OTG_FS_PWRCLK": {
    +        "description": "USB on the go full speed",
    +        "children": {
    +          "registers": {
    +            "FS_PCGCCTL": {
    +              "description": "OTG_FS power and clock gating control\n          register (OTG_FS_PCGCCTL)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STPPCLK": {
    +                    "description": "Stop PHY clock",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "GATEHCLK": {
    +                    "description": "Gate HCLK",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PHYSUSP": {
    +                    "description": "PHY Suspended",
    +                    "offset": 4,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "DAC": {
    +        "description": "Digital-to-analog converter",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAUDRIE2": {
    +                    "description": "DAC channel2 DMA underrun interrupt\n              enable",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DMAEN2": {
    +                    "description": "DAC channel2 DMA enable",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "MAMP2": {
    +                    "description": "DAC channel2 mask/amplitude\n              selector",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "WAVE2": {
    +                    "description": "DAC channel2 noise/triangle wave\n              generation enable",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "TSEL2": {
    +                    "description": "DAC channel2 trigger\n              selection",
    +                    "offset": 19,
    +                    "size": 3
    +                  },
    +                  "TEN2": {
    +                    "description": "DAC channel2 trigger\n              enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "BOFF2": {
    +                    "description": "DAC channel2 output buffer\n              disable",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EN2": {
    +                    "description": "DAC channel2 enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "DMAUDRIE1": {
    +                    "description": "DAC channel1 DMA Underrun Interrupt\n              enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "DMAEN1": {
    +                    "description": "DAC channel1 DMA enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "MAMP1": {
    +                    "description": "DAC channel1 mask/amplitude\n              selector",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "WAVE1": {
    +                    "description": "DAC channel1 noise/triangle wave\n              generation enable",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "TSEL1": {
    +                    "description": "DAC channel1 trigger\n              selection",
    +                    "offset": 3,
    +                    "size": 3
    +                  },
    +                  "TEN1": {
    +                    "description": "DAC channel1 trigger\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "BOFF1": {
    +                    "description": "DAC channel1 output buffer\n              disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN1": {
    +                    "description": "DAC channel1 enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SWTRIGR": {
    +              "description": "software trigger register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "SWTRIG2": {
    +                    "description": "DAC channel2 software\n              trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SWTRIG1": {
    +                    "description": "DAC channel1 software\n              trigger",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DHR12R1": {
    +              "description": "channel1 12-bit right-aligned data holding\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC1DHR": {
    +                    "description": "DAC channel1 12-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DHR12L1": {
    +              "description": "channel1 12-bit left aligned data holding\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC1DHR": {
    +                    "description": "DAC channel1 12-bit left-aligned\n              data",
    +                    "offset": 4,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DHR8R1": {
    +              "description": "channel1 8-bit right aligned data holding\n          register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC1DHR": {
    +                    "description": "DAC channel1 8-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "DHR12R2": {
    +              "description": "channel2 12-bit right aligned data holding\n          register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC2DHR": {
    +                    "description": "DAC channel2 12-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DHR12L2": {
    +              "description": "channel2 12-bit left aligned data holding\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC2DHR": {
    +                    "description": "DAC channel2 12-bit left-aligned\n              data",
    +                    "offset": 4,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DHR8R2": {
    +              "description": "channel2 8-bit right-aligned data holding\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC2DHR": {
    +                    "description": "DAC channel2 8-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "DHR12RD": {
    +              "description": "Dual DAC 12-bit right-aligned data holding\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC2DHR": {
    +                    "description": "DAC channel2 12-bit right-aligned\n              data",
    +                    "offset": 16,
    +                    "size": 12
    +                  },
    +                  "DACC1DHR": {
    +                    "description": "DAC channel1 12-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DHR12LD": {
    +              "description": "DUAL DAC 12-bit left aligned data holding\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC2DHR": {
    +                    "description": "DAC channel2 12-bit left-aligned\n              data",
    +                    "offset": 20,
    +                    "size": 12
    +                  },
    +                  "DACC1DHR": {
    +                    "description": "DAC channel1 12-bit left-aligned\n              data",
    +                    "offset": 4,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DHR8RD": {
    +              "description": "DUAL DAC 8-bit right aligned data holding\n          register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DACC2DHR": {
    +                    "description": "DAC channel2 8-bit right-aligned\n              data",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DACC1DHR": {
    +                    "description": "DAC channel1 8-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "DOR1": {
    +              "description": "channel1 data output register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DACC1DOR": {
    +                    "description": "DAC channel1 data output",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DOR2": {
    +              "description": "channel2 data output register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DACC2DOR": {
    +                    "description": "DAC channel2 data output",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAUDR2": {
    +                    "description": "DAC channel2 DMA underrun\n              flag",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DMAUDR1": {
    +                    "description": "DAC channel1 DMA underrun\n              flag",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "PWR": {
    +        "description": "Power control",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "power control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 49152,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LPDS": {
    +                    "description": "Low-power deep sleep",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PDDS": {
    +                    "description": "Power down deepsleep",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CWUF": {
    +                    "description": "Clear wakeup flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CSBF": {
    +                    "description": "Clear standby flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PVDE": {
    +                    "description": "Power voltage detector\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "PLS": {
    +                    "description": "PVD level selection",
    +                    "offset": 5,
    +                    "size": 3
    +                  },
    +                  "DBP": {
    +                    "description": "Disable backup domain write\n              protection",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FPDS": {
    +                    "description": "Flash power down in Stop\n              mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "LPLVDS": {
    +                    "description": "Low-Power Regulator Low Voltage in\n              deepsleep",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "MRLVDS": {
    +                    "description": "Main regulator low voltage in deepsleep\n              mode",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "VOS": {
    +                    "description": "Regulator voltage scaling output\n              selection",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "ODEN": {
    +                    "description": "Over-drive enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "ODSWEN": {
    +                    "description": "Over-drive switching\n              enabled",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "UDEN": {
    +                    "description": "Under-drive enable in stop\n              mode",
    +                    "offset": 18,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CSR": {
    +              "description": "power control/status register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WUF": {
    +                    "description": "Wakeup flag",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SBF": {
    +                    "description": "Standby flag",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PVDO": {
    +                    "description": "PVD output",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BRR": {
    +                    "description": "Backup regulator ready",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EWUP": {
    +                    "description": "Enable WKUP pin",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BRE": {
    +                    "description": "Backup regulator enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "VOSRDY": {
    +                    "description": "Regulator voltage scaling output\n              selection ready bit",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ODRDY": {
    +                    "description": "Over-drive mode ready",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ODSWRDY": {
    +                    "description": "Over-drive mode switching\n              ready",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "UDRDY": {
    +                    "description": "Under-drive ready flag",
    +                    "offset": 18,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "IWDG": {
    +        "description": "Independent watchdog",
    +        "children": {
    +          "registers": {
    +            "KR": {
    +              "description": "Key register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "KEY": {
    +                    "description": "Key value (write only, read\n              0000h)",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PR": {
    +              "description": "Prescaler register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PR": {
    +                    "description": "Prescaler divider",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "RLR": {
    +              "description": "Reload register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 4095,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RL": {
    +                    "description": "Watchdog counter reload\n              value",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "Status register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RVU": {
    +                    "description": "Watchdog counter reload value\n              update",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PVU": {
    +                    "description": "Watchdog prescaler value\n              update",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "WWDG": {
    +        "description": "Window watchdog",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "Control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 127,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WDGA": {
    +                    "description": "Activation bit",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "T": {
    +                    "description": "7-bit counter (MSB to LSB)",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "CFR": {
    +              "description": "Configuration register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 127,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EWI": {
    +                    "description": "Early wakeup interrupt",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "WDGTB1": {
    +                    "description": "Timer base",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "WDGTB0": {
    +                    "description": "Timer base",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "W": {
    +                    "description": "7-bit window value",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "Status register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EWIF": {
    +                    "description": "Early wakeup interrupt\n              flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "RTC": {
    +        "description": "Real-time clock",
    +        "children": {
    +          "registers": {
    +            "TR": {
    +              "description": "time register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PM": {
    +                    "description": "AM/PM notation",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "HT": {
    +                    "description": "Hour tens in BCD format",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "HU": {
    +                    "description": "Hour units in BCD format",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "MNT": {
    +                    "description": "Minute tens in BCD format",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "MNU": {
    +                    "description": "Minute units in BCD format",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "ST": {
    +                    "description": "Second tens in BCD format",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SU": {
    +                    "description": "Second units in BCD format",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "date register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 8449,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "YT": {
    +                    "description": "Year tens in BCD format",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "YU": {
    +                    "description": "Year units in BCD format",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "WDU": {
    +                    "description": "Week day units",
    +                    "offset": 13,
    +                    "size": 3
    +                  },
    +                  "MT": {
    +                    "description": "Month tens in BCD format",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "MU": {
    +                    "description": "Month units in BCD format",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "DT": {
    +                    "description": "Date tens in BCD format",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DU": {
    +                    "description": "Date units in BCD format",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CR": {
    +              "description": "control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COE": {
    +                    "description": "Calibration output enable",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "OSEL": {
    +                    "description": "Output selection",
    +                    "offset": 21,
    +                    "size": 2
    +                  },
    +                  "POL": {
    +                    "description": "Output polarity",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "BKP": {
    +                    "description": "Backup",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "SUB1H": {
    +                    "description": "Subtract 1 hour (winter time\n              change)",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "ADD1H": {
    +                    "description": "Add 1 hour (summer time\n              change)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TSIE": {
    +                    "description": "Time-stamp interrupt\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "WUTIE": {
    +                    "description": "Wakeup timer interrupt\n              enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ALRBIE": {
    +                    "description": "Alarm B interrupt enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ALRAIE": {
    +                    "description": "Alarm A interrupt enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TSE": {
    +                    "description": "Time stamp enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "WUTE": {
    +                    "description": "Wakeup timer enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ALRBE": {
    +                    "description": "Alarm B enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ALRAE": {
    +                    "description": "Alarm A enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DCE": {
    +                    "description": "Coarse digital calibration\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FMT": {
    +                    "description": "Hour format",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "REFCKON": {
    +                    "description": "Reference clock detection enable (50 or\n              60 Hz)",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TSEDGE": {
    +                    "description": "Time-stamp event active\n              edge",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "WCKSEL": {
    +                    "description": "Wakeup clock selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "ISR": {
    +              "description": "initialization and status\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 7,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ALRAWF": {
    +                    "description": "Alarm A write flag",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ALRBWF": {
    +                    "description": "Alarm B write flag",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "WUTWF": {
    +                    "description": "Wakeup timer write flag",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SHPF": {
    +                    "description": "Shift operation pending",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "INITS": {
    +                    "description": "Initialization status flag",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RSF": {
    +                    "description": "Registers synchronization\n              flag",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INITF": {
    +                    "description": "Initialization flag",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INIT": {
    +                    "description": "Initialization mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ALRAF": {
    +                    "description": "Alarm A flag",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ALRBF": {
    +                    "description": "Alarm B flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "WUTF": {
    +                    "description": "Wakeup timer flag",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TSF": {
    +                    "description": "Time-stamp flag",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TSOVF": {
    +                    "description": "Time-stamp overflow flag",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TAMP1F": {
    +                    "description": "Tamper detection flag",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TAMP2F": {
    +                    "description": "TAMPER2 detection flag",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "RECALPF": {
    +                    "description": "Recalibration pending Flag",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PRER": {
    +              "description": "prescaler register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 8323327,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PREDIV_A": {
    +                    "description": "Asynchronous prescaler\n              factor",
    +                    "offset": 16,
    +                    "size": 7
    +                  },
    +                  "PREDIV_S": {
    +                    "description": "Synchronous prescaler\n              factor",
    +                    "offset": 0,
    +                    "size": 15
    +                  }
    +                }
    +              }
    +            },
    +            "WUTR": {
    +              "description": "wakeup timer register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 65535,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WUT": {
    +                    "description": "Wakeup auto-reload value\n              bits",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CALIBR": {
    +              "description": "calibration register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DCS": {
    +                    "description": "Digital calibration sign",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "DC": {
    +                    "description": "Digital calibration",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "ALRMAR": {
    +              "description": "alarm A register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MSK4": {
    +                    "description": "Alarm A date mask",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "WDSEL": {
    +                    "description": "Week day selection",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "DT": {
    +                    "description": "Date tens in BCD format",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DU": {
    +                    "description": "Date units or day in BCD\n              format",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "MSK3": {
    +                    "description": "Alarm A hours mask",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "PM": {
    +                    "description": "AM/PM notation",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "HT": {
    +                    "description": "Hour tens in BCD format",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "HU": {
    +                    "description": "Hour units in BCD format",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "MSK2": {
    +                    "description": "Alarm A minutes mask",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MNT": {
    +                    "description": "Minute tens in BCD format",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "MNU": {
    +                    "description": "Minute units in BCD format",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "MSK1": {
    +                    "description": "Alarm A seconds mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ST": {
    +                    "description": "Second tens in BCD format",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SU": {
    +                    "description": "Second units in BCD format",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "ALRMBR": {
    +              "description": "alarm B register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MSK4": {
    +                    "description": "Alarm B date mask",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "WDSEL": {
    +                    "description": "Week day selection",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "DT": {
    +                    "description": "Date tens in BCD format",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "DU": {
    +                    "description": "Date units or day in BCD\n              format",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "MSK3": {
    +                    "description": "Alarm B hours mask",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "PM": {
    +                    "description": "AM/PM notation",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "HT": {
    +                    "description": "Hour tens in BCD format",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "HU": {
    +                    "description": "Hour units in BCD format",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "MSK2": {
    +                    "description": "Alarm B minutes mask",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MNT": {
    +                    "description": "Minute tens in BCD format",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "MNU": {
    +                    "description": "Minute units in BCD format",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "MSK1": {
    +                    "description": "Alarm B seconds mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ST": {
    +                    "description": "Second tens in BCD format",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SU": {
    +                    "description": "Second units in BCD format",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "WPR": {
    +              "description": "write protection register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "KEY": {
    +                    "description": "Write protection key",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SSR": {
    +              "description": "sub second register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SS": {
    +                    "description": "Sub second value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SHIFTR": {
    +              "description": "shift control register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "ADD1S": {
    +                    "description": "Add one second",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "SUBFS": {
    +                    "description": "Subtract a fraction of a\n              second",
    +                    "offset": 0,
    +                    "size": 15
    +                  }
    +                }
    +              }
    +            },
    +            "TSTR": {
    +              "description": "time stamp time register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ALARMOUTTYPE": {
    +                    "description": "AFO_ALARM output type",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TSINSEL": {
    +                    "description": "TIMESTAMP mapping",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TAMP1INSEL": {
    +                    "description": "TAMPER1 mapping",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TAMPIE": {
    +                    "description": "Tamper interrupt enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TAMP1TRG": {
    +                    "description": "Active level for tamper 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TAMP1E": {
    +                    "description": "Tamper 1 detection enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TSDR": {
    +              "description": "time stamp date register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "WDU": {
    +                    "description": "Week day units",
    +                    "offset": 13,
    +                    "size": 3
    +                  },
    +                  "MT": {
    +                    "description": "Month tens in BCD format",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "MU": {
    +                    "description": "Month units in BCD format",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "DT": {
    +                    "description": "Date tens in BCD format",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DU": {
    +                    "description": "Date units in BCD format",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "TSSSR": {
    +              "description": "timestamp sub second register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SS": {
    +                    "description": "Sub second value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CALR": {
    +              "description": "calibration register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CALP": {
    +                    "description": "Increase frequency of RTC by 488.5\n              ppm",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "CALW8": {
    +                    "description": "Use an 8-second calibration cycle\n              period",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CALW16": {
    +                    "description": "Use a 16-second calibration cycle\n              period",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CALM": {
    +                    "description": "Calibration minus",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "TAFCR": {
    +              "description": "tamper and alternate function configuration\n          register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ALARMOUTTYPE": {
    +                    "description": "AFO_ALARM output type",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TSINSEL": {
    +                    "description": "TIMESTAMP mapping",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TAMP1INSEL": {
    +                    "description": "TAMPER1 mapping",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TAMPPUDIS": {
    +                    "description": "TAMPER pull-up disable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TAMPPRCH": {
    +                    "description": "Tamper precharge duration",
    +                    "offset": 13,
    +                    "size": 2
    +                  },
    +                  "TAMPFLT": {
    +                    "description": "Tamper filter count",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "TAMPFREQ": {
    +                    "description": "Tamper sampling frequency",
    +                    "offset": 8,
    +                    "size": 3
    +                  },
    +                  "TAMPTS": {
    +                    "description": "Activate timestamp on tamper detection\n              event",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TAMP2TRG": {
    +                    "description": "Active level for tamper 2",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TAMP2E": {
    +                    "description": "Tamper 2 detection enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TAMPIE": {
    +                    "description": "Tamper interrupt enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TAMP1TRG": {
    +                    "description": "Active level for tamper 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TAMP1E": {
    +                    "description": "Tamper 1 detection enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ALRMASSR": {
    +              "description": "alarm A sub second register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MASKSS": {
    +                    "description": "Mask the most-significant bits starting\n              at this bit",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "SS": {
    +                    "description": "Sub seconds value",
    +                    "offset": 0,
    +                    "size": 15
    +                  }
    +                }
    +              }
    +            },
    +            "ALRMBSSR": {
    +              "description": "alarm B sub second register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MASKSS": {
    +                    "description": "Mask the most-significant bits starting\n              at this bit",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "SS": {
    +                    "description": "Sub seconds value",
    +                    "offset": 0,
    +                    "size": 15
    +                  }
    +                }
    +              }
    +            },
    +            "BKP0R": {
    +              "description": "backup register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP1R": {
    +              "description": "backup register",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP2R": {
    +              "description": "backup register",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP3R": {
    +              "description": "backup register",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP4R": {
    +              "description": "backup register",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP5R": {
    +              "description": "backup register",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP6R": {
    +              "description": "backup register",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP7R": {
    +              "description": "backup register",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP8R": {
    +              "description": "backup register",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP9R": {
    +              "description": "backup register",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP10R": {
    +              "description": "backup register",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP11R": {
    +              "description": "backup register",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP12R": {
    +              "description": "backup register",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP13R": {
    +              "description": "backup register",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP14R": {
    +              "description": "backup register",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP15R": {
    +              "description": "backup register",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP16R": {
    +              "description": "backup register",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP17R": {
    +              "description": "backup register",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP18R": {
    +              "description": "backup register",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BKP19R": {
    +              "description": "backup register",
    +              "offset": 156,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKP": {
    +                    "description": "BKP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "UART4": {
    +        "description": "Universal synchronous asynchronous receiver\n      transmitter",
    +        "children": {
    +          "registers": {
    +            "SR": {
    +              "description": "Status register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 12582912,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LBD": {
    +                    "description": "LIN break detection flag",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TXE": {
    +                    "description": "Transmit data register\n              empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TC": {
    +                    "description": "Transmission complete",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RXNE": {
    +                    "description": "Read data register not\n              empty",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IDLE": {
    +                    "description": "IDLE line detected",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ORE": {
    +                    "description": "Overrun error",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NF": {
    +                    "description": "Noise detected flag",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FE": {
    +                    "description": "Framing error",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PE": {
    +                    "description": "Parity error",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "Data register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DR": {
    +                    "description": "Data value",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "BRR": {
    +              "description": "Baud rate register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DIV_Mantissa": {
    +                    "description": "mantissa of USARTDIV",
    +                    "offset": 4,
    +                    "size": 12
    +                  },
    +                  "DIV_Fraction": {
    +                    "description": "fraction of USARTDIV",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CR1": {
    +              "description": "Control register 1",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OVER8": {
    +                    "description": "Oversampling mode",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "UE": {
    +                    "description": "USART enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "M": {
    +                    "description": "Word length",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WAKE": {
    +                    "description": "Wakeup method",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "PCE": {
    +                    "description": "Parity control enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PS": {
    +                    "description": "Parity selection",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PEIE": {
    +                    "description": "PE interrupt enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TXEIE": {
    +                    "description": "TXE interrupt enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transmission complete interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RXNEIE": {
    +                    "description": "RXNE interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IDLEIE": {
    +                    "description": "IDLE interrupt enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TE": {
    +                    "description": "Transmitter enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RE": {
    +                    "description": "Receiver enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RWU": {
    +                    "description": "Receiver wakeup",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SBK": {
    +                    "description": "Send break",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "Control register 2",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LINEN": {
    +                    "description": "LIN mode enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "STOP": {
    +                    "description": "STOP bits",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "LBDIE": {
    +                    "description": "LIN break detection interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "LBDL": {
    +                    "description": "lin break detection length",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ADD": {
    +                    "description": "Address of the USART node",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CR3": {
    +              "description": "Control register 3",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ONEBIT": {
    +                    "description": "One sample bit method\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "DMAT": {
    +                    "description": "DMA enable transmitter",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "DMAR": {
    +                    "description": "DMA enable receiver",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "HDSEL": {
    +                    "description": "Half-duplex selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IRLP": {
    +                    "description": "IrDA low-power",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IREN": {
    +                    "description": "IrDA mode enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EIE": {
    +                    "description": "Error interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "OTG_FS_DEVICE": {
    +        "description": "USB on the go full speed",
    +        "children": {
    +          "registers": {
    +            "FS_DCFG": {
    +              "description": "OTG_FS device configuration register\n          (OTG_FS_DCFG)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 35651584,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DSPD": {
    +                    "description": "Device speed",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "NZLSOHSK": {
    +                    "description": "Non-zero-length status OUT\n              handshake",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 4,
    +                    "size": 7
    +                  },
    +                  "PFIVL": {
    +                    "description": "Periodic frame interval",
    +                    "offset": 11,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DCTL": {
    +              "description": "OTG_FS device control register\n          (OTG_FS_DCTL)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RWUSIG": {
    +                    "description": "Remote wakeup signaling",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SDIS": {
    +                    "description": "Soft disconnect",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GINSTS": {
    +                    "description": "Global IN NAK status",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GONSTS": {
    +                    "description": "Global OUT NAK status",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TCTL": {
    +                    "description": "Test control",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SGINAK": {
    +                    "description": "Set global IN NAK",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CGINAK": {
    +                    "description": "Clear global IN NAK",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SGONAK": {
    +                    "description": "Set global OUT NAK",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CGONAK": {
    +                    "description": "Clear global OUT NAK",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "POPRGDNE": {
    +                    "description": "Power-on programming done",
    +                    "offset": 11,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DSTS": {
    +              "description": "OTG_FS device status register\n          (OTG_FS_DSTS)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 16,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SUSPSTS": {
    +                    "description": "Suspend status",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ENUMSPD": {
    +                    "description": "Enumerated speed",
    +                    "offset": 1,
    +                    "size": 2
    +                  },
    +                  "EERR": {
    +                    "description": "Erratic error",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FNSOF": {
    +                    "description": "Frame number of the received\n              SOF",
    +                    "offset": 8,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DIEPMSK": {
    +              "description": "OTG_FS device IN endpoint common interrupt\n          mask register (OTG_FS_DIEPMSK)",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed interrupt\n              mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDM": {
    +                    "description": "Endpoint disabled interrupt\n              mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TOM": {
    +                    "description": "Timeout condition mask (Non-isochronous\n              endpoints)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ITTXFEMSK": {
    +                    "description": "IN token received when TxFIFO empty\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INEPNMM": {
    +                    "description": "IN token received with EP mismatch\n              mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INEPNEM": {
    +                    "description": "IN endpoint NAK effective\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DOEPMSK": {
    +              "description": "OTG_FS device OUT endpoint common interrupt\n          mask register (OTG_FS_DOEPMSK)",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed interrupt\n              mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDM": {
    +                    "description": "Endpoint disabled interrupt\n              mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STUPM": {
    +                    "description": "SETUP phase done mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OTEPDM": {
    +                    "description": "OUT token received when endpoint\n              disabled mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DAINT": {
    +              "description": "OTG_FS device all endpoints interrupt\n          register (OTG_FS_DAINT)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IEPINT": {
    +                    "description": "IN endpoint interrupt bits",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "OEPINT": {
    +                    "description": "OUT endpoint interrupt\n              bits",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DAINTMSK": {
    +              "description": "OTG_FS all endpoints interrupt mask register\n          (OTG_FS_DAINTMSK)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IEPM": {
    +                    "description": "IN EP interrupt mask bits",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "OEPINT": {
    +                    "description": "OUT endpoint interrupt\n              bits",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DVBUSDIS": {
    +              "description": "OTG_FS device VBUS discharge time\n          register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 6103,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VBUSDT": {
    +                    "description": "Device VBUS discharge time",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DVBUSPULSE": {
    +              "description": "OTG_FS device VBUS pulsing time\n          register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 1464,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DVBUSP": {
    +                    "description": "Device VBUS pulsing time",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPEMPMSK": {
    +              "description": "OTG_FS device IN endpoint FIFO empty\n          interrupt mask register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXFEM": {
    +                    "description": "IN EP Tx FIFO empty interrupt mask\n              bits",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DIEPCTL0": {
    +              "description": "OTG_FS device control IN endpoint 0 control\n          register (OTG_FS_DIEPCTL0)",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "USBAEP": {
    +                    "description": "USB active endpoint",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "STALL": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TxFIFO number",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPENA": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPCTL1": {
    +              "description": "OTG device endpoint-1 control\n          register",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPENA": {
    +                    "description": "EPENA",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EPDIS": {
    +                    "description": "EPDIS",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SODDFRM_SD1PID": {
    +                    "description": "SODDFRM/SD1PID",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "SD0PID/SEVNFRM",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "SNAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "CNAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TXFNUM",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "Stall": {
    +                    "description": "Stall",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "EPTYP",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAKSTS",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "EONUM/DPID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "USBAEP": {
    +                    "description": "USBAEP",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MPSIZ": {
    +                    "description": "MPSIZ",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPCTL2": {
    +              "description": "OTG device endpoint-2 control\n          register",
    +              "offset": 320,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPENA": {
    +                    "description": "EPENA",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EPDIS": {
    +                    "description": "EPDIS",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SODDFRM": {
    +                    "description": "SODDFRM",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "SD0PID/SEVNFRM",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "SNAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "CNAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TXFNUM",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "Stall": {
    +                    "description": "Stall",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "EPTYP",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAKSTS",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "EONUM/DPID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "USBAEP": {
    +                    "description": "USBAEP",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MPSIZ": {
    +                    "description": "MPSIZ",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPCTL3": {
    +              "description": "OTG device endpoint-3 control\n          register",
    +              "offset": 352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPENA": {
    +                    "description": "EPENA",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EPDIS": {
    +                    "description": "EPDIS",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SODDFRM": {
    +                    "description": "SODDFRM",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "SD0PID/SEVNFRM",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "SNAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "CNAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TXFNUM",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "Stall": {
    +                    "description": "Stall",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "EPTYP",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAKSTS",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "EONUM/DPID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "USBAEP": {
    +                    "description": "USBAEP",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MPSIZ": {
    +                    "description": "MPSIZ",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPCTL0": {
    +              "description": "device endpoint-0 control\n          register",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 32768,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPENA": {
    +                    "description": "EPENA",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPDIS": {
    +                    "description": "EPDIS",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "SNAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "CNAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "Stall": {
    +                    "description": "Stall",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "SNPM": {
    +                    "description": "SNPM",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "EPTYP",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAKSTS",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "USBAEP": {
    +                    "description": "USBAEP",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MPSIZ": {
    +                    "description": "MPSIZ",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPCTL1": {
    +              "description": "device endpoint-1 control\n          register",
    +              "offset": 800,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPENA": {
    +                    "description": "EPENA",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EPDIS": {
    +                    "description": "EPDIS",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SODDFRM": {
    +                    "description": "SODDFRM",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "SD0PID/SEVNFRM",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "SNAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "CNAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "Stall": {
    +                    "description": "Stall",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "SNPM": {
    +                    "description": "SNPM",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "EPTYP",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAKSTS",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "EONUM/DPID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "USBAEP": {
    +                    "description": "USBAEP",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MPSIZ": {
    +                    "description": "MPSIZ",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPCTL2": {
    +              "description": "device endpoint-2 control\n          register",
    +              "offset": 832,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPENA": {
    +                    "description": "EPENA",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EPDIS": {
    +                    "description": "EPDIS",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SODDFRM": {
    +                    "description": "SODDFRM",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "SD0PID/SEVNFRM",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "SNAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "CNAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "Stall": {
    +                    "description": "Stall",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "SNPM": {
    +                    "description": "SNPM",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "EPTYP",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAKSTS",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "EONUM/DPID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "USBAEP": {
    +                    "description": "USBAEP",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MPSIZ": {
    +                    "description": "MPSIZ",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPCTL3": {
    +              "description": "device endpoint-3 control\n          register",
    +              "offset": 864,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPENA": {
    +                    "description": "EPENA",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EPDIS": {
    +                    "description": "EPDIS",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SODDFRM": {
    +                    "description": "SODDFRM",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVNFRM": {
    +                    "description": "SD0PID/SEVNFRM",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "SNAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "CNAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "Stall": {
    +                    "description": "Stall",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "SNPM": {
    +                    "description": "SNPM",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "EPTYP",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "NAKSTS": {
    +                    "description": "NAKSTS",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EONUM_DPID": {
    +                    "description": "EONUM/DPID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "USBAEP": {
    +                    "description": "USBAEP",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MPSIZ": {
    +                    "description": "MPSIZ",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPINT0": {
    +              "description": "device endpoint-x interrupt\n          register",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXFE": {
    +                    "description": "TXFE",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INEPNE": {
    +                    "description": "INEPNE",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "ITTXFE",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "TOC",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "EPDISD",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "XFRC": {
    +                    "description": "XFRC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPINT1": {
    +              "description": "device endpoint-1 interrupt\n          register",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXFE": {
    +                    "description": "TXFE",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INEPNE": {
    +                    "description": "INEPNE",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "ITTXFE",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "TOC",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "EPDISD",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "XFRC": {
    +                    "description": "XFRC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPINT2": {
    +              "description": "device endpoint-2 interrupt\n          register",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXFE": {
    +                    "description": "TXFE",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INEPNE": {
    +                    "description": "INEPNE",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "ITTXFE",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "TOC",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "EPDISD",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "XFRC": {
    +                    "description": "XFRC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPINT3": {
    +              "description": "device endpoint-3 interrupt\n          register",
    +              "offset": 360,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXFE": {
    +                    "description": "TXFE",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INEPNE": {
    +                    "description": "INEPNE",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ITTXFE": {
    +                    "description": "ITTXFE",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TOC": {
    +                    "description": "TOC",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "EPDISD",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "XFRC": {
    +                    "description": "XFRC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPINT0": {
    +              "description": "device endpoint-0 interrupt\n          register",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "B2BSTUP": {
    +                    "description": "B2BSTUP",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OTEPDIS",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "STUP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "EPDISD",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "XFRC": {
    +                    "description": "XFRC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPINT1": {
    +              "description": "device endpoint-1 interrupt\n          register",
    +              "offset": 808,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "B2BSTUP": {
    +                    "description": "B2BSTUP",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OTEPDIS",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "STUP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "EPDISD",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "XFRC": {
    +                    "description": "XFRC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPINT2": {
    +              "description": "device endpoint-2 interrupt\n          register",
    +              "offset": 840,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "B2BSTUP": {
    +                    "description": "B2BSTUP",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OTEPDIS",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "STUP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "EPDISD",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "XFRC": {
    +                    "description": "XFRC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPINT3": {
    +              "description": "device endpoint-3 interrupt\n          register",
    +              "offset": 872,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "B2BSTUP": {
    +                    "description": "B2BSTUP",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "OTEPDIS": {
    +                    "description": "OTEPDIS",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "STUP": {
    +                    "description": "STUP",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDISD": {
    +                    "description": "EPDISD",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "XFRC": {
    +                    "description": "XFRC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPTSIZ0": {
    +              "description": "device endpoint-0 transfer size\n          register",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 2
    +                  },
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPTSIZ0": {
    +              "description": "device OUT endpoint-0 transfer size\n          register",
    +              "offset": 784,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STUPCNT": {
    +                    "description": "SETUP packet count",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPTSIZ1": {
    +              "description": "device endpoint-1 transfer size\n          register",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MCNT": {
    +                    "description": "Multi count",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPTSIZ2": {
    +              "description": "device endpoint-2 transfer size\n          register",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MCNT": {
    +                    "description": "Multi count",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPTSIZ3": {
    +              "description": "device endpoint-3 transfer size\n          register",
    +              "offset": 368,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MCNT": {
    +                    "description": "Multi count",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            },
    +            "DTXFSTS0": {
    +              "description": "OTG_FS device IN endpoint transmit FIFO\n          status register",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INEPTFSAV": {
    +                    "description": "IN endpoint TxFIFO space\n              available",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DTXFSTS1": {
    +              "description": "OTG_FS device IN endpoint transmit FIFO\n          status register",
    +              "offset": 312,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INEPTFSAV": {
    +                    "description": "IN endpoint TxFIFO space\n              available",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DTXFSTS2": {
    +              "description": "OTG_FS device IN endpoint transmit FIFO\n          status register",
    +              "offset": 344,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INEPTFSAV": {
    +                    "description": "IN endpoint TxFIFO space\n              available",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DTXFSTS3": {
    +              "description": "OTG_FS device IN endpoint transmit FIFO\n          status register",
    +              "offset": 376,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INEPTFSAV": {
    +                    "description": "IN endpoint TxFIFO space\n              available",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPTSIZ1": {
    +              "description": "device OUT endpoint-1 transfer size\n          register",
    +              "offset": 816,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXDPID_STUPCNT": {
    +                    "description": "Received data PID/SETUP packet\n              count",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPTSIZ2": {
    +              "description": "device OUT endpoint-2 transfer size\n          register",
    +              "offset": 848,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXDPID_STUPCNT": {
    +                    "description": "Received data PID/SETUP packet\n              count",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPTSIZ3": {
    +              "description": "device OUT endpoint-3 transfer size\n          register",
    +              "offset": 880,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXDPID_STUPCNT": {
    +                    "description": "Received data PID/SETUP packet\n              count",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "C_ADC": {
    +        "description": "Common ADC registers",
    +        "children": {
    +          "registers": {
    +            "CSR": {
    +              "description": "ADC Common status register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "OVR3": {
    +                    "description": "Overrun flag of ADC3",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "STRT3": {
    +                    "description": "Regular channel Start flag of ADC\n              3",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "JSTRT3": {
    +                    "description": "Injected channel Start flag of ADC\n              3",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "JEOC3": {
    +                    "description": "Injected channel end of conversion of\n              ADC 3",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "EOC3": {
    +                    "description": "End of conversion of ADC 3",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "AWD3": {
    +                    "description": "Analog watchdog flag of ADC\n              3",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "OVR2": {
    +                    "description": "Overrun flag of ADC 2",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "STRT2": {
    +                    "description": "Regular channel Start flag of ADC\n              2",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "JSTRT2": {
    +                    "description": "Injected channel Start flag of ADC\n              2",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "JEOC2": {
    +                    "description": "Injected channel end of conversion of\n              ADC 2",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EOC2": {
    +                    "description": "End of conversion of ADC 2",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "AWD2": {
    +                    "description": "Analog watchdog flag of ADC\n              2",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "OVR1": {
    +                    "description": "Overrun flag of ADC 1",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "STRT1": {
    +                    "description": "Regular channel Start flag of ADC\n              1",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "JSTRT1": {
    +                    "description": "Injected channel Start flag of ADC\n              1",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "JEOC1": {
    +                    "description": "Injected channel end of conversion of\n              ADC 1",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EOC1": {
    +                    "description": "End of conversion of ADC 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AWD1": {
    +                    "description": "Analog watchdog flag of ADC\n              1",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCR": {
    +              "description": "ADC common control register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TSVREFE": {
    +                    "description": "Temperature sensor and VREFINT\n              enable",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "VBATE": {
    +                    "description": "VBAT enable",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "ADCPRE": {
    +                    "description": "ADC prescaler",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "DMA": {
    +                    "description": "Direct memory access mode for multi ADC\n              mode",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "DDS": {
    +                    "description": "DMA disable selection for multi-ADC\n              mode",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "DELAY": {
    +                    "description": "Delay between 2 sampling\n              phases",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "MULT": {
    +                    "description": "Multi ADC mode selection",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "CDR": {
    +              "description": "ADC common regular data register for dual\n          and triple modes",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DATA2": {
    +                    "description": "2nd data item of a pair of regular\n              conversions",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "DATA1": {
    +                    "description": "1st data item of a pair of regular\n              conversions",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIM1": {
    +        "description": "Advanced-timers",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CKD": {
    +                    "description": "Clock division",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CMS": {
    +                    "description": "Center-aligned mode\n              selection",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "DIR": {
    +                    "description": "Direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "OPM": {
    +                    "description": "One-pulse mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OIS4": {
    +                    "description": "Output Idle state 4",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "OIS3N": {
    +                    "description": "Output Idle state 3",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "OIS3": {
    +                    "description": "Output Idle state 3",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "OIS2N": {
    +                    "description": "Output Idle state 2",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OIS2": {
    +                    "description": "Output Idle state 2",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OIS1N": {
    +                    "description": "Output Idle state 1",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "OIS1": {
    +                    "description": "Output Idle state 1",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TI1S": {
    +                    "description": "TI1 selection",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MMS": {
    +                    "description": "Master mode selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "CCDS": {
    +                    "description": "Capture/compare DMA\n              selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CCUS": {
    +                    "description": "Capture/compare control update\n              selection",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CCPC": {
    +                    "description": "Capture/compare preloaded\n              control",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SMCR": {
    +              "description": "slave mode control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ETP": {
    +                    "description": "External trigger polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ECE": {
    +                    "description": "External clock enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ETPS": {
    +                    "description": "External trigger prescaler",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "ETF": {
    +                    "description": "External trigger filter",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "MSM": {
    +                    "description": "Master/Slave mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TS": {
    +                    "description": "Trigger selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SMS": {
    +                    "description": "Slave mode selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TDE": {
    +                    "description": "Trigger DMA request enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "COMDE": {
    +                    "description": "COM DMA request enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CC4DE": {
    +                    "description": "Capture/Compare 4 DMA request\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3DE": {
    +                    "description": "Capture/Compare 3 DMA request\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC2DE": {
    +                    "description": "Capture/Compare 2 DMA request\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1DE": {
    +                    "description": "Capture/Compare 1 DMA request\n              enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "UDE": {
    +                    "description": "Update DMA request enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TIE": {
    +                    "description": "Trigger interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC4IE": {
    +                    "description": "Capture/Compare 4 interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3IE": {
    +                    "description": "Capture/Compare 3 interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2IE": {
    +                    "description": "Capture/Compare 2 interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IE": {
    +                    "description": "Capture/Compare 1 interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "BIE": {
    +                    "description": "Break interrupt enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "COMIE": {
    +                    "description": "COM interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC4OF": {
    +                    "description": "Capture/Compare 4 overcapture\n              flag",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3OF": {
    +                    "description": "Capture/Compare 3 overcapture\n              flag",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC2OF": {
    +                    "description": "Capture/compare 2 overcapture\n              flag",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1OF": {
    +                    "description": "Capture/Compare 1 overcapture\n              flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BIF": {
    +                    "description": "Break interrupt flag",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TIF": {
    +                    "description": "Trigger interrupt flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "COMIF": {
    +                    "description": "COM interrupt flag",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC4IF": {
    +                    "description": "Capture/Compare 4 interrupt\n              flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3IF": {
    +                    "description": "Capture/Compare 3 interrupt\n              flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2IF": {
    +                    "description": "Capture/Compare 2 interrupt\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IF": {
    +                    "description": "Capture/compare 1 interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "BG": {
    +                    "description": "Break generation",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TG": {
    +                    "description": "Trigger generation",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "COMG": {
    +                    "description": "Capture/Compare control update\n              generation",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC4G": {
    +                    "description": "Capture/compare 4\n              generation",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3G": {
    +                    "description": "Capture/compare 3\n              generation",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2G": {
    +                    "description": "Capture/compare 2\n              generation",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1G": {
    +                    "description": "Capture/compare 1\n              generation",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Output": {
    +              "description": "capture/compare mode register 1 (output\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OC2CE": {
    +                    "description": "Output Compare 2 clear\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC2M": {
    +                    "description": "Output Compare 2 mode",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC2PE": {
    +                    "description": "Output Compare 2 preload\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC2FE": {
    +                    "description": "Output Compare 2 fast\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/Compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC1CE": {
    +                    "description": "Output Compare 1 clear\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OC1M": {
    +                    "description": "Output Compare 1 mode",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC1PE": {
    +                    "description": "Output Compare 1 preload\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC1FE": {
    +                    "description": "Output Compare 1 fast\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Input": {
    +              "description": "capture/compare mode register 1 (input\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC2F": {
    +                    "description": "Input capture 2 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC2PCS": {
    +                    "description": "Input capture 2 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/Compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC1F": {
    +                    "description": "Input capture 1 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ICPCS": {
    +                    "description": "Input capture 1 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR2_Output": {
    +              "description": "capture/compare mode register 2 (output\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OC4CE": {
    +                    "description": "Output compare 4 clear\n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC4M": {
    +                    "description": "Output compare 4 mode",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC4PE": {
    +                    "description": "Output compare 4 preload\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC4FE": {
    +                    "description": "Output compare 4 fast\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC4S": {
    +                    "description": "Capture/Compare 4\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC3CE": {
    +                    "description": "Output compare 3 clear\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OC3M": {
    +                    "description": "Output compare 3 mode",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC3PE": {
    +                    "description": "Output compare 3 preload\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC3FE": {
    +                    "description": "Output compare 3 fast\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC3S": {
    +                    "description": "Capture/Compare 3\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR2_Input": {
    +              "description": "capture/compare mode register 2 (input\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC4F": {
    +                    "description": "Input capture 4 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC4PSC": {
    +                    "description": "Input capture 4 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC4S": {
    +                    "description": "Capture/Compare 4\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC3F": {
    +                    "description": "Input capture 3 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "IC3PSC": {
    +                    "description": "Input capture 3 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC3S": {
    +                    "description": "Capture/compare 3\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCER": {
    +              "description": "capture/compare enable\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC4P": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CC4E": {
    +                    "description": "Capture/Compare 4 output\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3NP": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC3NE": {
    +                    "description": "Capture/Compare 3 complementary output\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC3P": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CC3E": {
    +                    "description": "Capture/Compare 3 output\n              enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CC2NP": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CC2NE": {
    +                    "description": "Capture/Compare 2 complementary output\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC2P": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC2E": {
    +                    "description": "Capture/Compare 2 output\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC1NP": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC1NE": {
    +                    "description": "Capture/Compare 1 complementary output\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1P": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC1E": {
    +                    "description": "Capture/Compare 1 output\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARR": {
    +                    "description": "Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR1": {
    +              "description": "capture/compare register 1",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR1": {
    +                    "description": "Capture/Compare 1 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR2": {
    +              "description": "capture/compare register 2",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR2": {
    +                    "description": "Capture/Compare 2 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR3": {
    +              "description": "capture/compare register 3",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR3": {
    +                    "description": "Capture/Compare value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR4": {
    +              "description": "capture/compare register 4",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR4": {
    +                    "description": "Capture/Compare value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DCR": {
    +              "description": "DMA control register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBL": {
    +                    "description": "DMA burst length",
    +                    "offset": 8,
    +                    "size": 5
    +                  },
    +                  "DBA": {
    +                    "description": "DMA base address",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "DMAR": {
    +              "description": "DMA address for full transfer",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAB": {
    +                    "description": "DMA register for burst\n              accesses",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "RCR": {
    +              "description": "repetition counter register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REP": {
    +                    "description": "Repetition counter value",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "BDTR": {
    +              "description": "break and dead-time register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MOE": {
    +                    "description": "Main output enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "AOE": {
    +                    "description": "Automatic output enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "BKP": {
    +                    "description": "Break polarity",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BKE": {
    +                    "description": "Break enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "OSSR": {
    +                    "description": "Off-state selection for Run\n              mode",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OSSI": {
    +                    "description": "Off-state selection for Idle\n              mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LOCK": {
    +                    "description": "Lock configuration",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "DTG": {
    +                    "description": "Dead-time generator setup",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "OTG_FS_HOST": {
    +        "description": "USB on the go full speed",
    +        "children": {
    +          "registers": {
    +            "FS_HCFG": {
    +              "description": "OTG_FS host configuration register\n          (OTG_FS_HCFG)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FSLSPCS": {
    +                    "description": "FS/LS PHY clock select",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "FSLSS": {
    +                    "description": "FS- and LS-only support",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "HFIR": {
    +              "description": "OTG_FS Host frame interval\n          register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 60000,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FRIVL": {
    +                    "description": "Frame interval",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HFNUM": {
    +              "description": "OTG_FS host frame number/frame time\n          remaining register (OTG_FS_HFNUM)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 16383,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "FRNUM": {
    +                    "description": "Frame number",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "FTREM": {
    +                    "description": "Frame time remaining",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HPTXSTS": {
    +              "description": "OTG_FS_Host periodic transmit FIFO/queue\n          status register (OTG_FS_HPTXSTS)",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 524544,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PTXFSAVL": {
    +                    "description": "Periodic transmit data FIFO space\n              available",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "PTXQSAV": {
    +                    "description": "Periodic transmit request queue space\n              available",
    +                    "offset": 16,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "PTXQTOP": {
    +                    "description": "Top of the periodic transmit request\n              queue",
    +                    "offset": 24,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "HAINT": {
    +              "description": "OTG_FS Host all channels interrupt\n          register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "HAINT": {
    +                    "description": "Channel interrupts",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "HAINTMSK": {
    +              "description": "OTG_FS host all channels interrupt mask\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HAINTM": {
    +                    "description": "Channel interrupt mask",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HPRT": {
    +              "description": "OTG_FS host port control and status register\n          (OTG_FS_HPRT)",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PCSTS": {
    +                    "description": "Port connect status",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PCDET": {
    +                    "description": "Port connect detected",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PENA": {
    +                    "description": "Port enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PENCHNG": {
    +                    "description": "Port enable/disable change",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "POCA": {
    +                    "description": "Port overcurrent active",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "POCCHNG": {
    +                    "description": "Port overcurrent change",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PRES": {
    +                    "description": "Port resume",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PSUSP": {
    +                    "description": "Port suspend",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PRST": {
    +                    "description": "Port reset",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PLSTS": {
    +                    "description": "Port line status",
    +                    "offset": 10,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "PPWR": {
    +                    "description": "Port power",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "PTCTL": {
    +                    "description": "Port test control",
    +                    "offset": 13,
    +                    "size": 4
    +                  },
    +                  "PSPD": {
    +                    "description": "Port speed",
    +                    "offset": 17,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCCHAR0": {
    +              "description": "OTG_FS host channel-0 characteristics\n          register (OTG_FS_HCCHAR0)",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MCNT": {
    +                    "description": "Multicount",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCCHAR1": {
    +              "description": "OTG_FS host channel-1 characteristics\n          register (OTG_FS_HCCHAR1)",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MCNT": {
    +                    "description": "Multicount",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCCHAR2": {
    +              "description": "OTG_FS host channel-2 characteristics\n          register (OTG_FS_HCCHAR2)",
    +              "offset": 320,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MCNT": {
    +                    "description": "Multicount",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCCHAR3": {
    +              "description": "OTG_FS host channel-3 characteristics\n          register (OTG_FS_HCCHAR3)",
    +              "offset": 352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MCNT": {
    +                    "description": "Multicount",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCCHAR4": {
    +              "description": "OTG_FS host channel-4 characteristics\n          register (OTG_FS_HCCHAR4)",
    +              "offset": 384,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MCNT": {
    +                    "description": "Multicount",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCCHAR5": {
    +              "description": "OTG_FS host channel-5 characteristics\n          register (OTG_FS_HCCHAR5)",
    +              "offset": 416,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MCNT": {
    +                    "description": "Multicount",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCCHAR6": {
    +              "description": "OTG_FS host channel-6 characteristics\n          register (OTG_FS_HCCHAR6)",
    +              "offset": 448,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MCNT": {
    +                    "description": "Multicount",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCCHAR7": {
    +              "description": "OTG_FS host channel-7 characteristics\n          register (OTG_FS_HCCHAR7)",
    +              "offset": 480,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPSIZ": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSDEV": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYP": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MCNT": {
    +                    "description": "Multicount",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "DAD": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CHDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CHENA": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINT0": {
    +              "description": "OTG_FS host channel-0 interrupt register\n          (OTG_FS_HCINT0)",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINT1": {
    +              "description": "OTG_FS host channel-1 interrupt register\n          (OTG_FS_HCINT1)",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINT2": {
    +              "description": "OTG_FS host channel-2 interrupt register\n          (OTG_FS_HCINT2)",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINT3": {
    +              "description": "OTG_FS host channel-3 interrupt register\n          (OTG_FS_HCINT3)",
    +              "offset": 360,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINT4": {
    +              "description": "OTG_FS host channel-4 interrupt register\n          (OTG_FS_HCINT4)",
    +              "offset": 392,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINT5": {
    +              "description": "OTG_FS host channel-5 interrupt register\n          (OTG_FS_HCINT5)",
    +              "offset": 424,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINT6": {
    +              "description": "OTG_FS host channel-6 interrupt register\n          (OTG_FS_HCINT6)",
    +              "offset": 456,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINT7": {
    +              "description": "OTG_FS host channel-7 interrupt register\n          (OTG_FS_HCINT7)",
    +              "offset": 488,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRC": {
    +                    "description": "Transfer completed",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXERR": {
    +                    "description": "Transaction error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERR": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMOR": {
    +                    "description": "Frame overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERR": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINTMSK0": {
    +              "description": "OTG_FS host channel-0 mask register\n          (OTG_FS_HCINTMSK0)",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINTMSK1": {
    +              "description": "OTG_FS host channel-1 mask register\n          (OTG_FS_HCINTMSK1)",
    +              "offset": 300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINTMSK2": {
    +              "description": "OTG_FS host channel-2 mask register\n          (OTG_FS_HCINTMSK2)",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINTMSK3": {
    +              "description": "OTG_FS host channel-3 mask register\n          (OTG_FS_HCINTMSK3)",
    +              "offset": 364,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINTMSK4": {
    +              "description": "OTG_FS host channel-4 mask register\n          (OTG_FS_HCINTMSK4)",
    +              "offset": 396,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINTMSK5": {
    +              "description": "OTG_FS host channel-5 mask register\n          (OTG_FS_HCINTMSK5)",
    +              "offset": 428,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINTMSK6": {
    +              "description": "OTG_FS host channel-6 mask register\n          (OTG_FS_HCINTMSK6)",
    +              "offset": 460,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCINTMSK7": {
    +              "description": "OTG_FS host channel-7 mask register\n          (OTG_FS_HCINTMSK7)",
    +              "offset": 492,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRCM": {
    +                    "description": "Transfer completed mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHHM": {
    +                    "description": "Channel halted mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLM": {
    +                    "description": "STALL response received interrupt\n              mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKM": {
    +                    "description": "NAK response received interrupt\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKM": {
    +                    "description": "ACK response received/transmitted\n              interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NYET": {
    +                    "description": "response received interrupt\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXERRM": {
    +                    "description": "Transaction error mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERRM": {
    +                    "description": "Babble error mask",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FRMORM": {
    +                    "description": "Frame overrun mask",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERRM": {
    +                    "description": "Data toggle error mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCTSIZ0": {
    +              "description": "OTG_FS host channel-0 transfer size\n          register",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCTSIZ1": {
    +              "description": "OTG_FS host channel-1 transfer size\n          register",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCTSIZ2": {
    +              "description": "OTG_FS host channel-2 transfer size\n          register",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCTSIZ3": {
    +              "description": "OTG_FS host channel-3 transfer size\n          register",
    +              "offset": 368,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCTSIZ4": {
    +              "description": "OTG_FS host channel-x transfer size\n          register",
    +              "offset": 400,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCTSIZ5": {
    +              "description": "OTG_FS host channel-5 transfer size\n          register",
    +              "offset": 432,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCTSIZ6": {
    +              "description": "OTG_FS host channel-6 transfer size\n          register",
    +              "offset": 464,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HCTSIZ7": {
    +              "description": "OTG_FS host channel-7 transfer size\n          register",
    +              "offset": 496,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XFRSIZ": {
    +                    "description": "Transfer size",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PKTCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIM2": {
    +        "description": "General purpose timers",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CKD": {
    +                    "description": "Clock division",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CMS": {
    +                    "description": "Center-aligned mode\n              selection",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "DIR": {
    +                    "description": "Direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "OPM": {
    +                    "description": "One-pulse mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TI1S": {
    +                    "description": "TI1 selection",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MMS": {
    +                    "description": "Master mode selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "CCDS": {
    +                    "description": "Capture/compare DMA\n              selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SMCR": {
    +              "description": "slave mode control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ETP": {
    +                    "description": "External trigger polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ECE": {
    +                    "description": "External clock enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ETPS": {
    +                    "description": "External trigger prescaler",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "ETF": {
    +                    "description": "External trigger filter",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "MSM": {
    +                    "description": "Master/Slave mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TS": {
    +                    "description": "Trigger selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SMS": {
    +                    "description": "Slave mode selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TDE": {
    +                    "description": "Trigger DMA request enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CC4DE": {
    +                    "description": "Capture/Compare 4 DMA request\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3DE": {
    +                    "description": "Capture/Compare 3 DMA request\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC2DE": {
    +                    "description": "Capture/Compare 2 DMA request\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1DE": {
    +                    "description": "Capture/Compare 1 DMA request\n              enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "UDE": {
    +                    "description": "Update DMA request enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TIE": {
    +                    "description": "Trigger interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC4IE": {
    +                    "description": "Capture/Compare 4 interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3IE": {
    +                    "description": "Capture/Compare 3 interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2IE": {
    +                    "description": "Capture/Compare 2 interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IE": {
    +                    "description": "Capture/Compare 1 interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC4OF": {
    +                    "description": "Capture/Compare 4 overcapture\n              flag",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3OF": {
    +                    "description": "Capture/Compare 3 overcapture\n              flag",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC2OF": {
    +                    "description": "Capture/compare 2 overcapture\n              flag",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1OF": {
    +                    "description": "Capture/Compare 1 overcapture\n              flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TIF": {
    +                    "description": "Trigger interrupt flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC4IF": {
    +                    "description": "Capture/Compare 4 interrupt\n              flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3IF": {
    +                    "description": "Capture/Compare 3 interrupt\n              flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2IF": {
    +                    "description": "Capture/Compare 2 interrupt\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IF": {
    +                    "description": "Capture/compare 1 interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TG": {
    +                    "description": "Trigger generation",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC4G": {
    +                    "description": "Capture/compare 4\n              generation",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3G": {
    +                    "description": "Capture/compare 3\n              generation",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2G": {
    +                    "description": "Capture/compare 2\n              generation",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1G": {
    +                    "description": "Capture/compare 1\n              generation",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Output": {
    +              "description": "capture/compare mode register 1 (output\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OC2CE": {
    +                    "description": "OC2CE",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC2M": {
    +                    "description": "OC2M",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC2PE": {
    +                    "description": "OC2PE",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC2FE": {
    +                    "description": "OC2FE",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC2S": {
    +                    "description": "CC2S",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC1CE": {
    +                    "description": "OC1CE",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OC1M": {
    +                    "description": "OC1M",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC1PE": {
    +                    "description": "OC1PE",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC1FE": {
    +                    "description": "OC1FE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1S": {
    +                    "description": "CC1S",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Input": {
    +              "description": "capture/compare mode register 1 (input\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC2F": {
    +                    "description": "Input capture 2 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC2PCS": {
    +                    "description": "Input capture 2 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/Compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC1F": {
    +                    "description": "Input capture 1 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ICPCS": {
    +                    "description": "Input capture 1 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR2_Output": {
    +              "description": "capture/compare mode register 2 (output\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "O24CE": {
    +                    "description": "O24CE",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC4M": {
    +                    "description": "OC4M",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC4PE": {
    +                    "description": "OC4PE",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC4FE": {
    +                    "description": "OC4FE",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC4S": {
    +                    "description": "CC4S",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC3CE": {
    +                    "description": "OC3CE",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OC3M": {
    +                    "description": "OC3M",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC3PE": {
    +                    "description": "OC3PE",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC3FE": {
    +                    "description": "OC3FE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC3S": {
    +                    "description": "CC3S",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR2_Input": {
    +              "description": "capture/compare mode register 2 (input\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC4F": {
    +                    "description": "Input capture 4 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC4PSC": {
    +                    "description": "Input capture 4 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC4S": {
    +                    "description": "Capture/Compare 4\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC3F": {
    +                    "description": "Input capture 3 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "IC3PSC": {
    +                    "description": "Input capture 3 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC3S": {
    +                    "description": "Capture/compare 3\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCER": {
    +              "description": "capture/compare enable\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC4NP": {
    +                    "description": "Capture/Compare 4 output\n              Polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "CC4P": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CC4E": {
    +                    "description": "Capture/Compare 4 output\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3NP": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC3P": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CC3E": {
    +                    "description": "Capture/Compare 3 output\n              enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CC2NP": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CC2P": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC2E": {
    +                    "description": "Capture/Compare 2 output\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC1NP": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC1P": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC1E": {
    +                    "description": "Capture/Compare 1 output\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT_H": {
    +                    "description": "High counter value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CNT_L": {
    +                    "description": "Low counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARR_H": {
    +                    "description": "High Auto-reload value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "ARR_L": {
    +                    "description": "Low Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR1": {
    +              "description": "capture/compare register 1",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR1_H": {
    +                    "description": "High Capture/Compare 1\n              value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CCR1_L": {
    +                    "description": "Low Capture/Compare 1\n              value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR2": {
    +              "description": "capture/compare register 2",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR2_H": {
    +                    "description": "High Capture/Compare 2\n              value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CCR2_L": {
    +                    "description": "Low Capture/Compare 2\n              value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR3": {
    +              "description": "capture/compare register 3",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR3_H": {
    +                    "description": "High Capture/Compare value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CCR3_L": {
    +                    "description": "Low Capture/Compare value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR4": {
    +              "description": "capture/compare register 4",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR4_H": {
    +                    "description": "High Capture/Compare value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CCR4_L": {
    +                    "description": "Low Capture/Compare value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DCR": {
    +              "description": "DMA control register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBL": {
    +                    "description": "DMA burst length",
    +                    "offset": 8,
    +                    "size": 5
    +                  },
    +                  "DBA": {
    +                    "description": "DMA base address",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "DMAR": {
    +              "description": "DMA address for full transfer",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAB": {
    +                    "description": "DMA register for burst\n              accesses",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OR": {
    +              "description": "TIM5 option register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ITR1_RMP": {
    +                    "description": "Timer Input 4 remap",
    +                    "offset": 10,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIM3": {
    +        "description": "General purpose timers",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CKD": {
    +                    "description": "Clock division",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CMS": {
    +                    "description": "Center-aligned mode\n              selection",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "DIR": {
    +                    "description": "Direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "OPM": {
    +                    "description": "One-pulse mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TI1S": {
    +                    "description": "TI1 selection",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MMS": {
    +                    "description": "Master mode selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "CCDS": {
    +                    "description": "Capture/compare DMA\n              selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SMCR": {
    +              "description": "slave mode control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ETP": {
    +                    "description": "External trigger polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ECE": {
    +                    "description": "External clock enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ETPS": {
    +                    "description": "External trigger prescaler",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "ETF": {
    +                    "description": "External trigger filter",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "MSM": {
    +                    "description": "Master/Slave mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TS": {
    +                    "description": "Trigger selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SMS": {
    +                    "description": "Slave mode selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TDE": {
    +                    "description": "Trigger DMA request enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CC4DE": {
    +                    "description": "Capture/Compare 4 DMA request\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3DE": {
    +                    "description": "Capture/Compare 3 DMA request\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC2DE": {
    +                    "description": "Capture/Compare 2 DMA request\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1DE": {
    +                    "description": "Capture/Compare 1 DMA request\n              enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "UDE": {
    +                    "description": "Update DMA request enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TIE": {
    +                    "description": "Trigger interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC4IE": {
    +                    "description": "Capture/Compare 4 interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3IE": {
    +                    "description": "Capture/Compare 3 interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2IE": {
    +                    "description": "Capture/Compare 2 interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IE": {
    +                    "description": "Capture/Compare 1 interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC4OF": {
    +                    "description": "Capture/Compare 4 overcapture\n              flag",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3OF": {
    +                    "description": "Capture/Compare 3 overcapture\n              flag",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC2OF": {
    +                    "description": "Capture/compare 2 overcapture\n              flag",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1OF": {
    +                    "description": "Capture/Compare 1 overcapture\n              flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TIF": {
    +                    "description": "Trigger interrupt flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC4IF": {
    +                    "description": "Capture/Compare 4 interrupt\n              flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3IF": {
    +                    "description": "Capture/Compare 3 interrupt\n              flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2IF": {
    +                    "description": "Capture/Compare 2 interrupt\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IF": {
    +                    "description": "Capture/compare 1 interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TG": {
    +                    "description": "Trigger generation",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC4G": {
    +                    "description": "Capture/compare 4\n              generation",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3G": {
    +                    "description": "Capture/compare 3\n              generation",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2G": {
    +                    "description": "Capture/compare 2\n              generation",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1G": {
    +                    "description": "Capture/compare 1\n              generation",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Output": {
    +              "description": "capture/compare mode register 1 (output\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OC2CE": {
    +                    "description": "OC2CE",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC2M": {
    +                    "description": "OC2M",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC2PE": {
    +                    "description": "OC2PE",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC2FE": {
    +                    "description": "OC2FE",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC2S": {
    +                    "description": "CC2S",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC1CE": {
    +                    "description": "OC1CE",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OC1M": {
    +                    "description": "OC1M",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC1PE": {
    +                    "description": "OC1PE",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC1FE": {
    +                    "description": "OC1FE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1S": {
    +                    "description": "CC1S",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Input": {
    +              "description": "capture/compare mode register 1 (input\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC2F": {
    +                    "description": "Input capture 2 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC2PCS": {
    +                    "description": "Input capture 2 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/Compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC1F": {
    +                    "description": "Input capture 1 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ICPCS": {
    +                    "description": "Input capture 1 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR2_Output": {
    +              "description": "capture/compare mode register 2 (output\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "O24CE": {
    +                    "description": "O24CE",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC4M": {
    +                    "description": "OC4M",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC4PE": {
    +                    "description": "OC4PE",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC4FE": {
    +                    "description": "OC4FE",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC4S": {
    +                    "description": "CC4S",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC3CE": {
    +                    "description": "OC3CE",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OC3M": {
    +                    "description": "OC3M",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC3PE": {
    +                    "description": "OC3PE",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC3FE": {
    +                    "description": "OC3FE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC3S": {
    +                    "description": "CC3S",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR2_Input": {
    +              "description": "capture/compare mode register 2 (input\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC4F": {
    +                    "description": "Input capture 4 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC4PSC": {
    +                    "description": "Input capture 4 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC4S": {
    +                    "description": "Capture/Compare 4\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC3F": {
    +                    "description": "Input capture 3 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "IC3PSC": {
    +                    "description": "Input capture 3 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC3S": {
    +                    "description": "Capture/compare 3\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCER": {
    +              "description": "capture/compare enable\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC4NP": {
    +                    "description": "Capture/Compare 4 output\n              Polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "CC4P": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CC4E": {
    +                    "description": "Capture/Compare 4 output\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3NP": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC3P": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CC3E": {
    +                    "description": "Capture/Compare 3 output\n              enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CC2NP": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CC2P": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC2E": {
    +                    "description": "Capture/Compare 2 output\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC1NP": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC1P": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC1E": {
    +                    "description": "Capture/Compare 1 output\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT_H": {
    +                    "description": "High counter value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CNT_L": {
    +                    "description": "Low counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARR_H": {
    +                    "description": "High Auto-reload value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "ARR_L": {
    +                    "description": "Low Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR1": {
    +              "description": "capture/compare register 1",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR1_H": {
    +                    "description": "High Capture/Compare 1\n              value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CCR1_L": {
    +                    "description": "Low Capture/Compare 1\n              value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR2": {
    +              "description": "capture/compare register 2",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR2_H": {
    +                    "description": "High Capture/Compare 2\n              value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CCR2_L": {
    +                    "description": "Low Capture/Compare 2\n              value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR3": {
    +              "description": "capture/compare register 3",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR3_H": {
    +                    "description": "High Capture/Compare value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CCR3_L": {
    +                    "description": "Low Capture/Compare value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR4": {
    +              "description": "capture/compare register 4",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR4_H": {
    +                    "description": "High Capture/Compare value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CCR4_L": {
    +                    "description": "Low Capture/Compare value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DCR": {
    +              "description": "DMA control register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBL": {
    +                    "description": "DMA burst length",
    +                    "offset": 8,
    +                    "size": 5
    +                  },
    +                  "DBA": {
    +                    "description": "DMA base address",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "DMAR": {
    +              "description": "DMA address for full transfer",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAB": {
    +                    "description": "DMA register for burst\n              accesses",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "OTG_FS_GLOBAL": {
    +        "description": "USB on the go full speed",
    +        "children": {
    +          "registers": {
    +            "FS_GOTGCTL": {
    +              "description": "OTG_FS control and status register\n          (OTG_FS_GOTGCTL)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 2048,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SRQSCS": {
    +                    "description": "Session request success",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SRQ": {
    +                    "description": "Session request",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HNGSCS": {
    +                    "description": "Host negotiation success",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HNPRQ": {
    +                    "description": "HNP request",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "HSHNPEN": {
    +                    "description": "Host set HNP enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "DHNPEN": {
    +                    "description": "Device HNP enabled",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CIDSTS": {
    +                    "description": "Connector ID status",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DBCT": {
    +                    "description": "Long/short debounce time",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ASVLD": {
    +                    "description": "A-session valid",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BSVLD": {
    +                    "description": "B-session valid",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GOTGINT": {
    +              "description": "OTG_FS interrupt register\n          (OTG_FS_GOTGINT)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SEDET": {
    +                    "description": "Session end detected",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SRSSCHG": {
    +                    "description": "Session request success status\n              change",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "HNSSCHG": {
    +                    "description": "Host negotiation success status\n              change",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "HNGDET": {
    +                    "description": "Host negotiation detected",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "ADTOCHG": {
    +                    "description": "A-device timeout change",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "DBCDNE": {
    +                    "description": "Debounce done",
    +                    "offset": 19,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GAHBCFG": {
    +              "description": "OTG_FS AHB configuration register\n          (OTG_FS_GAHBCFG)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "GINT": {
    +                    "description": "Global interrupt mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TXFELVL": {
    +                    "description": "TxFIFO empty level",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PTXFELVL": {
    +                    "description": "Periodic TxFIFO empty\n              level",
    +                    "offset": 8,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GUSBCFG": {
    +              "description": "OTG_FS USB configuration register\n          (OTG_FS_GUSBCFG)",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 2560,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TOCAL": {
    +                    "description": "FS timeout calibration",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "PHYSEL": {
    +                    "description": "Full Speed serial transceiver\n              select",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SRPCAP": {
    +                    "description": "SRP-capable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "HNPCAP": {
    +                    "description": "HNP-capable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TRDT": {
    +                    "description": "USB turnaround time",
    +                    "offset": 10,
    +                    "size": 4
    +                  },
    +                  "FHMOD": {
    +                    "description": "Force host mode",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FDMOD": {
    +                    "description": "Force device mode",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CTXPKT": {
    +                    "description": "Corrupt Tx packet",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GRSTCTL": {
    +              "description": "OTG_FS reset register\n          (OTG_FS_GRSTCTL)",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 536870912,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSRST": {
    +                    "description": "Core soft reset",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "HSRST": {
    +                    "description": "HCLK soft reset",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FCRST": {
    +                    "description": "Host frame counter reset",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RXFFLSH": {
    +                    "description": "RxFIFO flush",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TXFFLSH": {
    +                    "description": "TxFIFO flush",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TxFIFO number",
    +                    "offset": 6,
    +                    "size": 5
    +                  },
    +                  "AHBIDL": {
    +                    "description": "AHB master idle",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GINTSTS": {
    +              "description": "OTG_FS core interrupt register\n          (OTG_FS_GINTSTS)",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 67108896,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CMOD": {
    +                    "description": "Current mode of operation",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MMIS": {
    +                    "description": "Mode mismatch interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OTGINT": {
    +                    "description": "OTG interrupt",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SOF": {
    +                    "description": "Start of frame",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RXFLVL": {
    +                    "description": "RxFIFO non-empty",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NPTXFE": {
    +                    "description": "Non-periodic TxFIFO empty",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GINAKEFF": {
    +                    "description": "Global IN non-periodic NAK\n              effective",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GOUTNAKEFF": {
    +                    "description": "Global OUT NAK effective",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ESUSP": {
    +                    "description": "Early suspend",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "USBSUSP": {
    +                    "description": "USB suspend",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "USBRST": {
    +                    "description": "USB reset",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ENUMDNE": {
    +                    "description": "Enumeration done",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ISOODRP": {
    +                    "description": "Isochronous OUT packet dropped\n              interrupt",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EOPF": {
    +                    "description": "End of periodic frame\n              interrupt",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "IEPINT": {
    +                    "description": "IN endpoint interrupt",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEPINT": {
    +                    "description": "OUT endpoint interrupt",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IISOIXFR": {
    +                    "description": "Incomplete isochronous IN\n              transfer",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "IPXFR_INCOMPISOOUT": {
    +                    "description": "Incomplete periodic transfer(Host\n              mode)/Incomplete isochronous OUT transfer(Device\n              mode)",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "HPRTINT": {
    +                    "description": "Host port interrupt",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HCINT": {
    +                    "description": "Host channels interrupt",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PTXFE": {
    +                    "description": "Periodic TxFIFO empty",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CIDSCHG": {
    +                    "description": "Connector ID status change",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "DISCINT": {
    +                    "description": "Disconnect detected\n              interrupt",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "SRQINT": {
    +                    "description": "Session request/new session detected\n              interrupt",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "WKUPINT": {
    +                    "description": "Resume/remote wakeup detected\n              interrupt",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GINTMSK": {
    +              "description": "OTG_FS interrupt mask register\n          (OTG_FS_GINTMSK)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MMISM": {
    +                    "description": "Mode mismatch interrupt\n              mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OTGINT": {
    +                    "description": "OTG interrupt mask",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SOFM": {
    +                    "description": "Start of frame mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RXFLVLM": {
    +                    "description": "Receive FIFO non-empty\n              mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "NPTXFEM": {
    +                    "description": "Non-periodic TxFIFO empty\n              mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GINAKEFFM": {
    +                    "description": "Global non-periodic IN NAK effective\n              mask",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GONAKEFFM": {
    +                    "description": "Global OUT NAK effective\n              mask",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ESUSPM": {
    +                    "description": "Early suspend mask",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "USBSUSPM": {
    +                    "description": "USB suspend mask",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "USBRST": {
    +                    "description": "USB reset mask",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ENUMDNEM": {
    +                    "description": "Enumeration done mask",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ISOODRPM": {
    +                    "description": "Isochronous OUT packet dropped interrupt\n              mask",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EOPFM": {
    +                    "description": "End of periodic frame interrupt\n              mask",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EPMISM": {
    +                    "description": "Endpoint mismatch interrupt\n              mask",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "IEPINT": {
    +                    "description": "IN endpoints interrupt\n              mask",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "OEPINT": {
    +                    "description": "OUT endpoints interrupt\n              mask",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "IISOIXFRM": {
    +                    "description": "Incomplete isochronous IN transfer\n              mask",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "IPXFRM_IISOOXFRM": {
    +                    "description": "Incomplete periodic transfer mask(Host\n              mode)/Incomplete isochronous OUT transfer mask(Device\n              mode)",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "PRTIM": {
    +                    "description": "Host port interrupt mask",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HCIM": {
    +                    "description": "Host channels interrupt\n              mask",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "PTXFEM": {
    +                    "description": "Periodic TxFIFO empty mask",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "CIDSCHGM": {
    +                    "description": "Connector ID status change\n              mask",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "DISCINT": {
    +                    "description": "Disconnect detected interrupt\n              mask",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "SRQIM": {
    +                    "description": "Session request/new session detected\n              interrupt mask",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "WUIM": {
    +                    "description": "Resume/remote wakeup detected interrupt\n              mask",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GRXSTSR_Device": {
    +              "description": "OTG_FS Receive status debug read(Device\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "BCNT": {
    +                    "description": "Byte count",
    +                    "offset": 4,
    +                    "size": 11
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 15,
    +                    "size": 2
    +                  },
    +                  "PKTSTS": {
    +                    "description": "Packet status",
    +                    "offset": 17,
    +                    "size": 4
    +                  },
    +                  "FRMNUM": {
    +                    "description": "Frame number",
    +                    "offset": 21,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GRXSTSR_Host": {
    +              "description": "OTG_FS Receive status debug\n          read(Hostmode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "BCNT": {
    +                    "description": "Byte count",
    +                    "offset": 4,
    +                    "size": 11
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 15,
    +                    "size": 2
    +                  },
    +                  "PKTSTS": {
    +                    "description": "Packet status",
    +                    "offset": 17,
    +                    "size": 4
    +                  },
    +                  "FRMNUM": {
    +                    "description": "Frame number",
    +                    "offset": 21,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GRXFSIZ": {
    +              "description": "OTG_FS Receive FIFO size register\n          (OTG_FS_GRXFSIZ)",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 512,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXFD": {
    +                    "description": "RxFIFO depth",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GNPTXFSIZ_Device": {
    +              "description": "OTG_FS non-periodic transmit FIFO size\n          register (Device mode)",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 512,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX0FSA": {
    +                    "description": "Endpoint 0 transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "TX0FD": {
    +                    "description": "Endpoint 0 TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GNPTXFSIZ_Host": {
    +              "description": "OTG_FS non-periodic transmit FIFO size\n          register (Host mode)",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 512,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NPTXFSA": {
    +                    "description": "Non-periodic transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "NPTXFD": {
    +                    "description": "Non-periodic TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GNPTXSTS": {
    +              "description": "OTG_FS non-periodic transmit FIFO/queue\n          status register (OTG_FS_GNPTXSTS)",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 524800,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "NPTXFSAV": {
    +                    "description": "Non-periodic TxFIFO space\n              available",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "NPTQXSAV": {
    +                    "description": "Non-periodic transmit request queue\n              space available",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "NPTXQTOP": {
    +                    "description": "Top of the non-periodic transmit request\n              queue",
    +                    "offset": 24,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "FS_GCCFG": {
    +              "description": "OTG_FS general core configuration register\n          (OTG_FS_GCCFG)",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PWRDWN": {
    +                    "description": "Power down",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "VBUSASEN": {
    +                    "description": "Enable the VBUS sensing\n              device",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "VBUSBSEN": {
    +                    "description": "Enable the VBUS sensing\n              device",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "SOFOUTEN": {
    +                    "description": "SOF output enable",
    +                    "offset": 20,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FS_CID": {
    +              "description": "core ID register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 4096,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRODUCT_ID": {
    +                    "description": "Product ID field",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "FS_HPTXFSIZ": {
    +              "description": "OTG_FS Host periodic transmit FIFO size\n          register (OTG_FS_HPTXFSIZ)",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 33555968,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PTXSA": {
    +                    "description": "Host periodic TxFIFO start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "PTXFSIZ": {
    +                    "description": "Host periodic TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DIEPTXF1": {
    +              "description": "OTG_FS device IN endpoint transmit FIFO size\n          register (OTG_FS_DIEPTXF2)",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 33555456,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXSA": {
    +                    "description": "IN endpoint FIFO2 transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "INEPTXFD": {
    +                    "description": "IN endpoint TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DIEPTXF2": {
    +              "description": "OTG_FS device IN endpoint transmit FIFO size\n          register (OTG_FS_DIEPTXF3)",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 33555456,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXSA": {
    +                    "description": "IN endpoint FIFO3 transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "INEPTXFD": {
    +                    "description": "IN endpoint TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FS_DIEPTXF3": {
    +              "description": "OTG_FS device IN endpoint transmit FIFO size\n          register (OTG_FS_DIEPTXF4)",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 33555456,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INEPTXSA": {
    +                    "description": "IN endpoint FIFO4 transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "INEPTXFD": {
    +                    "description": "IN endpoint TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIM5": {
    +        "description": "General-purpose-timers",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CKD": {
    +                    "description": "Clock division",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CMS": {
    +                    "description": "Center-aligned mode\n              selection",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "DIR": {
    +                    "description": "Direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "OPM": {
    +                    "description": "One-pulse mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TI1S": {
    +                    "description": "TI1 selection",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MMS": {
    +                    "description": "Master mode selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "CCDS": {
    +                    "description": "Capture/compare DMA\n              selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SMCR": {
    +              "description": "slave mode control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ETP": {
    +                    "description": "External trigger polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ECE": {
    +                    "description": "External clock enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ETPS": {
    +                    "description": "External trigger prescaler",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "ETF": {
    +                    "description": "External trigger filter",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "MSM": {
    +                    "description": "Master/Slave mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TS": {
    +                    "description": "Trigger selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SMS": {
    +                    "description": "Slave mode selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TDE": {
    +                    "description": "Trigger DMA request enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CC4DE": {
    +                    "description": "Capture/Compare 4 DMA request\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3DE": {
    +                    "description": "Capture/Compare 3 DMA request\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC2DE": {
    +                    "description": "Capture/Compare 2 DMA request\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1DE": {
    +                    "description": "Capture/Compare 1 DMA request\n              enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "UDE": {
    +                    "description": "Update DMA request enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TIE": {
    +                    "description": "Trigger interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC4IE": {
    +                    "description": "Capture/Compare 4 interrupt\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3IE": {
    +                    "description": "Capture/Compare 3 interrupt\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2IE": {
    +                    "description": "Capture/Compare 2 interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IE": {
    +                    "description": "Capture/Compare 1 interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC4OF": {
    +                    "description": "Capture/Compare 4 overcapture\n              flag",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3OF": {
    +                    "description": "Capture/Compare 3 overcapture\n              flag",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC2OF": {
    +                    "description": "Capture/compare 2 overcapture\n              flag",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1OF": {
    +                    "description": "Capture/Compare 1 overcapture\n              flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TIF": {
    +                    "description": "Trigger interrupt flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC4IF": {
    +                    "description": "Capture/Compare 4 interrupt\n              flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3IF": {
    +                    "description": "Capture/Compare 3 interrupt\n              flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2IF": {
    +                    "description": "Capture/Compare 2 interrupt\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IF": {
    +                    "description": "Capture/compare 1 interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TG": {
    +                    "description": "Trigger generation",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC4G": {
    +                    "description": "Capture/compare 4\n              generation",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC3G": {
    +                    "description": "Capture/compare 3\n              generation",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC2G": {
    +                    "description": "Capture/compare 2\n              generation",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1G": {
    +                    "description": "Capture/compare 1\n              generation",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Output": {
    +              "description": "capture/compare mode register 1 (output\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OC2CE": {
    +                    "description": "OC2CE",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC2M": {
    +                    "description": "OC2M",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC2PE": {
    +                    "description": "OC2PE",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC2FE": {
    +                    "description": "OC2FE",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC2S": {
    +                    "description": "CC2S",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC1CE": {
    +                    "description": "OC1CE",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OC1M": {
    +                    "description": "OC1M",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC1PE": {
    +                    "description": "OC1PE",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC1FE": {
    +                    "description": "OC1FE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1S": {
    +                    "description": "CC1S",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Input": {
    +              "description": "capture/compare mode register 1 (input\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC2F": {
    +                    "description": "Input capture 2 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC2PCS": {
    +                    "description": "Input capture 2 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/Compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC1F": {
    +                    "description": "Input capture 1 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ICPCS": {
    +                    "description": "Input capture 1 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR2_Output": {
    +              "description": "capture/compare mode register 2 (output\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "O24CE": {
    +                    "description": "O24CE",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OC4M": {
    +                    "description": "OC4M",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC4PE": {
    +                    "description": "OC4PE",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC4FE": {
    +                    "description": "OC4FE",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC4S": {
    +                    "description": "CC4S",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC3CE": {
    +                    "description": "OC3CE",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OC3M": {
    +                    "description": "OC3M",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC3PE": {
    +                    "description": "OC3PE",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC3FE": {
    +                    "description": "OC3FE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC3S": {
    +                    "description": "CC3S",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR2_Input": {
    +              "description": "capture/compare mode register 2 (input\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC4F": {
    +                    "description": "Input capture 4 filter",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "IC4PSC": {
    +                    "description": "Input capture 4 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC4S": {
    +                    "description": "Capture/Compare 4\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC3F": {
    +                    "description": "Input capture 3 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "IC3PSC": {
    +                    "description": "Input capture 3 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC3S": {
    +                    "description": "Capture/compare 3\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCER": {
    +              "description": "capture/compare enable\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC4NP": {
    +                    "description": "Capture/Compare 4 output\n              Polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "CC4P": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CC4E": {
    +                    "description": "Capture/Compare 4 output\n              enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CC3NP": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CC3P": {
    +                    "description": "Capture/Compare 3 output\n              Polarity",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CC3E": {
    +                    "description": "Capture/Compare 3 output\n              enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CC2NP": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CC2P": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC2E": {
    +                    "description": "Capture/Compare 2 output\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC1NP": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC1P": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC1E": {
    +                    "description": "Capture/Compare 1 output\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT_H": {
    +                    "description": "High counter value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CNT_L": {
    +                    "description": "Low counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARR_H": {
    +                    "description": "High Auto-reload value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "ARR_L": {
    +                    "description": "Low Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR1": {
    +              "description": "capture/compare register 1",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR1_H": {
    +                    "description": "High Capture/Compare 1\n              value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CCR1_L": {
    +                    "description": "Low Capture/Compare 1\n              value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR2": {
    +              "description": "capture/compare register 2",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR2_H": {
    +                    "description": "High Capture/Compare 2\n              value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CCR2_L": {
    +                    "description": "Low Capture/Compare 2\n              value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR3": {
    +              "description": "capture/compare register 3",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR3_H": {
    +                    "description": "High Capture/Compare value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CCR3_L": {
    +                    "description": "Low Capture/Compare value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR4": {
    +              "description": "capture/compare register 4",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR4_H": {
    +                    "description": "High Capture/Compare value",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "CCR4_L": {
    +                    "description": "Low Capture/Compare value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DCR": {
    +              "description": "DMA control register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBL": {
    +                    "description": "DMA burst length",
    +                    "offset": 8,
    +                    "size": 5
    +                  },
    +                  "DBA": {
    +                    "description": "DMA base address",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "DMAR": {
    +              "description": "DMA address for full transfer",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMAB": {
    +                    "description": "DMA register for burst\n              accesses",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OR": {
    +              "description": "TIM5 option register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IT4_RMP": {
    +                    "description": "Timer Input 4 remap",
    +                    "offset": 6,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIM9": {
    +        "description": "General purpose timers",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CKD": {
    +                    "description": "Clock division",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OPM": {
    +                    "description": "One-pulse mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CR2": {
    +              "description": "control register 2",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MMS": {
    +                    "description": "Master mode selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "SMCR": {
    +              "description": "slave mode control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MSM": {
    +                    "description": "Master/Slave mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TS": {
    +                    "description": "Trigger selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SMS": {
    +                    "description": "Slave mode selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIE": {
    +                    "description": "Trigger interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC2IE": {
    +                    "description": "Capture/Compare 2 interrupt\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IE": {
    +                    "description": "Capture/Compare 1 interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC2OF": {
    +                    "description": "Capture/compare 2 overcapture\n              flag",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC1OF": {
    +                    "description": "Capture/Compare 1 overcapture\n              flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TIF": {
    +                    "description": "Trigger interrupt flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC2IF": {
    +                    "description": "Capture/Compare 2 interrupt\n              flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1IF": {
    +                    "description": "Capture/compare 1 interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TG": {
    +                    "description": "Trigger generation",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CC2G": {
    +                    "description": "Capture/compare 2\n              generation",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1G": {
    +                    "description": "Capture/compare 1\n              generation",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Output": {
    +              "description": "capture/compare mode register 1 (output\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OC2M": {
    +                    "description": "Output Compare 2 mode",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "OC2PE": {
    +                    "description": "Output Compare 2 preload\n              enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OC2FE": {
    +                    "description": "Output Compare 2 fast\n              enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/Compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "OC1M": {
    +                    "description": "Output Compare 1 mode",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC1PE": {
    +                    "description": "Output Compare 1 preload\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC1FE": {
    +                    "description": "Output Compare 1 fast\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Input": {
    +              "description": "capture/compare mode register 1 (input\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC2F": {
    +                    "description": "Input capture 2 filter",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "IC2PCS": {
    +                    "description": "Input capture 2 prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CC2S": {
    +                    "description": "Capture/Compare 2\n              selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "IC1F": {
    +                    "description": "Input capture 1 filter",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "ICPCS": {
    +                    "description": "Input capture 1 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCER": {
    +              "description": "capture/compare enable\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC2NP": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CC2P": {
    +                    "description": "Capture/Compare 2 output\n              Polarity",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CC2E": {
    +                    "description": "Capture/Compare 2 output\n              enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CC1NP": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC1P": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC1E": {
    +                    "description": "Capture/Compare 1 output\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARR": {
    +                    "description": "Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR1": {
    +              "description": "capture/compare register 1",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR1": {
    +                    "description": "Capture/Compare 1 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR2": {
    +              "description": "capture/compare register 2",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR2": {
    +                    "description": "Capture/Compare 2 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "CRC": {
    +        "description": "Cryptographic processor",
    +        "children": {
    +          "registers": {
    +            "DR": {
    +              "description": "Data register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DR": {
    +                    "description": "Data Register",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IDR": {
    +              "description": "Independent Data register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IDR": {
    +                    "description": "Independent Data register",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CR": {
    +              "description": "Control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "CR": {
    +                    "description": "Control regidter",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIM10": {
    +        "description": "General-purpose-timers",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CKD": {
    +                    "description": "Clock division",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC1IE": {
    +                    "description": "Capture/Compare 1 interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC1OF": {
    +                    "description": "Capture/Compare 1 overcapture\n              flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CC1IF": {
    +                    "description": "Capture/compare 1 interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "CC1G": {
    +                    "description": "Capture/compare 1\n              generation",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Output": {
    +              "description": "capture/compare mode register 1 (output\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OC1M": {
    +                    "description": "Output Compare 1 mode",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC1PE": {
    +                    "description": "Output Compare 1 preload\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC1FE": {
    +                    "description": "Output Compare 1 fast\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Input": {
    +              "description": "capture/compare mode register 1 (input\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC1F": {
    +                    "description": "Input capture 1 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ICPCS": {
    +                    "description": "Input capture 1 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCER": {
    +              "description": "capture/compare enable\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC1NP": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC1P": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC1E": {
    +                    "description": "Capture/Compare 1 output\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARR": {
    +                    "description": "Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR1": {
    +              "description": "capture/compare register 1",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR1": {
    +                    "description": "Capture/Compare 1 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "Ethernet_DMA": {
    +        "description": "Ethernet: DMA controller operation",
    +        "children": {
    +          "registers": {
    +            "DMABMR": {
    +              "description": "Ethernet DMA bus mode register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 8449,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SR": {
    +                    "description": "SR",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DA": {
    +                    "description": "DA",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DSL": {
    +                    "description": "DSL",
    +                    "offset": 2,
    +                    "size": 5
    +                  },
    +                  "EDFE": {
    +                    "description": "EDFE",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PBL": {
    +                    "description": "PBL",
    +                    "offset": 8,
    +                    "size": 6
    +                  },
    +                  "RTPR": {
    +                    "description": "RTPR",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "FB": {
    +                    "description": "FB",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RDP": {
    +                    "description": "RDP",
    +                    "offset": 17,
    +                    "size": 6
    +                  },
    +                  "USP": {
    +                    "description": "USP",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FPM": {
    +                    "description": "FPM",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "AAB": {
    +                    "description": "AAB",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "MB": {
    +                    "description": "MB",
    +                    "offset": 26,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMATPDR": {
    +              "description": "Ethernet DMA transmit poll demand\n          register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TPD": {
    +                    "description": "TPD",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DMARPDR": {
    +              "description": "EHERNET DMA receive poll demand\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RPD": {
    +                    "description": "RPD",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DMARDLAR": {
    +              "description": "Ethernet DMA receive descriptor list address\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SRL": {
    +                    "description": "SRL",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DMATDLAR": {
    +              "description": "Ethernet DMA transmit descriptor list\n          address register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STL": {
    +                    "description": "STL",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DMASR": {
    +              "description": "Ethernet DMA status register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TS": {
    +                    "description": "TS",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TPSS": {
    +                    "description": "TPSS",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TBUS": {
    +                    "description": "TBUS",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TJTS": {
    +                    "description": "TJTS",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ROS": {
    +                    "description": "ROS",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TUS": {
    +                    "description": "TUS",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RS": {
    +                    "description": "RS",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RBUS": {
    +                    "description": "RBUS",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RPSS": {
    +                    "description": "RPSS",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PWTS": {
    +                    "description": "PWTS",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ETS": {
    +                    "description": "ETS",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FBES": {
    +                    "description": "FBES",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ERS": {
    +                    "description": "ERS",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "AIS": {
    +                    "description": "AIS",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "NIS": {
    +                    "description": "NIS",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RPS": {
    +                    "description": "RPS",
    +                    "offset": 17,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "TPS": {
    +                    "description": "TPS",
    +                    "offset": 20,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "EBS": {
    +                    "description": "EBS",
    +                    "offset": 23,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "MMCS": {
    +                    "description": "MMCS",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PMTS": {
    +                    "description": "PMTS",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TSTS": {
    +                    "description": "TSTS",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DMAOMR": {
    +              "description": "Ethernet DMA operation mode\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SR": {
    +                    "description": "SR",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OSF": {
    +                    "description": "OSF",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTC": {
    +                    "description": "RTC",
    +                    "offset": 3,
    +                    "size": 2
    +                  },
    +                  "FUGF": {
    +                    "description": "FUGF",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FEF": {
    +                    "description": "FEF",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ST": {
    +                    "description": "ST",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TTC": {
    +                    "description": "TTC",
    +                    "offset": 14,
    +                    "size": 3
    +                  },
    +                  "FTF": {
    +                    "description": "FTF",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "TSF": {
    +                    "description": "TSF",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "DFRF": {
    +                    "description": "DFRF",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "RSF": {
    +                    "description": "RSF",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "DTCEFD": {
    +                    "description": "DTCEFD",
    +                    "offset": 26,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMAIER": {
    +              "description": "Ethernet DMA interrupt enable\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIE": {
    +                    "description": "TIE",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TPSIE": {
    +                    "description": "TPSIE",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TBUIE": {
    +                    "description": "TBUIE",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TJTIE": {
    +                    "description": "TJTIE",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ROIE": {
    +                    "description": "ROIE",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TUIE": {
    +                    "description": "TUIE",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RIE": {
    +                    "description": "RIE",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RBUIE": {
    +                    "description": "RBUIE",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RPSIE": {
    +                    "description": "RPSIE",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "RWTIE": {
    +                    "description": "RWTIE",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ETIE": {
    +                    "description": "ETIE",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FBEIE": {
    +                    "description": "FBEIE",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ERIE": {
    +                    "description": "ERIE",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "AISE": {
    +                    "description": "AISE",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "NISE": {
    +                    "description": "NISE",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMAMFBOCR": {
    +              "description": "Ethernet DMA missed frame and buffer\n          overflow counter register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MFC": {
    +                    "description": "MFC",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "OMFC": {
    +                    "description": "OMFC",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "MFA": {
    +                    "description": "MFA",
    +                    "offset": 17,
    +                    "size": 11
    +                  },
    +                  "OFOC": {
    +                    "description": "OFOC",
    +                    "offset": 28,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMARSWTR": {
    +              "description": "Ethernet DMA receive status watchdog timer\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RSWTC": {
    +                    "description": "RSWTC",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "DMACHTDR": {
    +              "description": "Ethernet DMA current host transmit\n          descriptor register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "HTDAP": {
    +                    "description": "HTDAP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DMACHRDR": {
    +              "description": "Ethernet DMA current host receive descriptor\n          register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "HRDAP": {
    +                    "description": "HRDAP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DMACHTBAR": {
    +              "description": "Ethernet DMA current host transmit buffer\n          address register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "HTBAP": {
    +                    "description": "HTBAP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DMACHRBAR": {
    +              "description": "Ethernet DMA current host receive buffer\n          address register",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "HRBAP": {
    +                    "description": "HRBAP",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "Ethernet_PTP": {
    +        "description": "Ethernet: Precision time protocol",
    +        "children": {
    +          "registers": {
    +            "PTPTSCR": {
    +              "description": "Ethernet PTP time stamp control\n          register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 8192,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TSE": {
    +                    "description": "TSE",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TSFCU": {
    +                    "description": "TSFCU",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TSPTPPSV2E": {
    +                    "description": "TSPTPPSV2E",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TSSPTPOEFE": {
    +                    "description": "TSSPTPOEFE",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TSSIPV6FE": {
    +                    "description": "TSSIPV6FE",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TSSIPV4FE": {
    +                    "description": "TSSIPV4FE",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TSSEME": {
    +                    "description": "TSSEME",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TSSMRME": {
    +                    "description": "TSSMRME",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TSCNT": {
    +                    "description": "TSCNT",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "TSPFFMAE": {
    +                    "description": "TSPFFMAE",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TSSTI": {
    +                    "description": "TSSTI",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TSSTU": {
    +                    "description": "TSSTU",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TSITE": {
    +                    "description": "TSITE",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TTSARU": {
    +                    "description": "TTSARU",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TSSARFE": {
    +                    "description": "TSSARFE",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TSSSR": {
    +                    "description": "TSSSR",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PTPSSIR": {
    +              "description": "Ethernet PTP subsecond increment\n          register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STSSI": {
    +                    "description": "STSSI",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "PTPTSHR": {
    +              "description": "Ethernet PTP time stamp high\n          register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "STS": {
    +                    "description": "STS",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PTPTSLR": {
    +              "description": "Ethernet PTP time stamp low\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "STSS": {
    +                    "description": "STSS",
    +                    "offset": 0,
    +                    "size": 31
    +                  },
    +                  "STPNS": {
    +                    "description": "STPNS",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PTPTSHUR": {
    +              "description": "Ethernet PTP time stamp high update\n          register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TSUS": {
    +                    "description": "TSUS",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PTPTSLUR": {
    +              "description": "Ethernet PTP time stamp low update\n          register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TSUSS": {
    +                    "description": "TSUSS",
    +                    "offset": 0,
    +                    "size": 31
    +                  },
    +                  "TSUPNS": {
    +                    "description": "TSUSS",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PTPTSAR": {
    +              "description": "Ethernet PTP time stamp addend\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TSA": {
    +                    "description": "TSA",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PTPTTHR": {
    +              "description": "Ethernet PTP target time high\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TTSH": {
    +                    "description": "0",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PTPTTLR": {
    +              "description": "Ethernet PTP target time low\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TTSL": {
    +                    "description": "TTSL",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PTPTSSR": {
    +              "description": "Ethernet PTP time stamp status\n          register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TSSO": {
    +                    "description": "TSSO",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TSTTR": {
    +                    "description": "TSTTR",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PTPPPSCR": {
    +              "description": "Ethernet PTP PPS control\n          register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TSSO": {
    +                    "description": "TSSO",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TSTTR": {
    +                    "description": "TSTTR",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIM11": {
    +        "description": "General-purpose-timers",
    +        "children": {
    +          "registers": {
    +            "CR1": {
    +              "description": "control register 1",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CKD": {
    +                    "description": "Clock division",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "ARPE": {
    +                    "description": "Auto-reload preload enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "URS": {
    +                    "description": "Update request source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIER": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC1IE": {
    +                    "description": "Capture/Compare 1 interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "status register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC1OF": {
    +                    "description": "Capture/Compare 1 overcapture\n              flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CC1IF": {
    +                    "description": "Capture/compare 1 interrupt\n              flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EGR": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "CC1G": {
    +                    "description": "Capture/compare 1\n              generation",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Output": {
    +              "description": "capture/compare mode register 1 (output\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OC1M": {
    +                    "description": "Output Compare 1 mode",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "OC1PE": {
    +                    "description": "Output Compare 1 preload\n              enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OC1FE": {
    +                    "description": "Output Compare 1 fast\n              enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCMR1_Input": {
    +              "description": "capture/compare mode register 1 (input\n          mode)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IC1F": {
    +                    "description": "Input capture 1 filter",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ICPCS": {
    +                    "description": "Input capture 1 prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CC1S": {
    +                    "description": "Capture/Compare 1\n              selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CCER": {
    +              "description": "capture/compare enable\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CC1NP": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CC1P": {
    +                    "description": "Capture/Compare 1 output\n              Polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CC1E": {
    +                    "description": "Capture/Compare 1 output\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ARR": {
    +              "description": "auto-reload register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARR": {
    +                    "description": "Auto-reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR1": {
    +              "description": "capture/compare register 1",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCR1": {
    +                    "description": "Capture/Compare 1 value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OR": {
    +              "description": "option register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RMP": {
    +                    "description": "Input 1 remapping\n              capability",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      }
    +    }
    +  },
    +  "devices": {
    +    "STM32F429": {
    +      "arch": "cortex_m4",
    +      "description": "STM32F429",
    +      "properties": {
    +        "cpu.nvic_prio_bits": "3",
    +        "cpu.mpu": "false",
    +        "cpu.fpu": "false",
    +        "cpu.revision": "r1p0",
    +        "cpu.vendor_systick_config": "false",
    +        "cpu.endian": "little",
    +        "cpu.name": "CM4"
    +      },
    +      "children": {
    +        "interrupts": {
    +          "MemManageFault": {
    +            "index": -12
    +          },
    +          "BusFault": {
    +            "index": -11
    +          },
    +          "UsageFault": {
    +            "index": -10
    +          },
    +          "DebugMonitor": {
    +            "index": -4
    +          },
    +          "NMI": {
    +            "index": -14
    +          },
    +          "HardFault": {
    +            "index": -13
    +          },
    +          "SVCall": {
    +            "index": -5
    +          },
    +          "PendSV": {
    +            "index": -2
    +          },
    +          "SysTick": {
    +            "index": -1
    +          },
    +          "FPU": {
    +            "index": 81,
    +            "description": "Floating point unit interrupt"
    +          },
    +          "HASH_RNG": {
    +            "index": 80,
    +            "description": "Hash and Rng global interrupt"
    +          },
    +          "CRYP": {
    +            "index": 79,
    +            "description": "CRYP crypto global interrupt"
    +          },
    +          "DCMI": {
    +            "index": 78,
    +            "description": "DCMI global interrupt"
    +          },
    +          "FMC": {
    +            "index": 48,
    +            "description": "FMC global interrupt"
    +          },
    +          "DMA2_Stream0": {
    +            "index": 56,
    +            "description": "DMA2 Stream0 global interrupt"
    +          },
    +          "DMA1_Stream0": {
    +            "index": 11,
    +            "description": "DMA1 Stream0 global interrupt"
    +          },
    +          "RCC": {
    +            "index": 5,
    +            "description": "RCC global interrupt"
    +          },
    +          "SPI1": {
    +            "index": 35,
    +            "description": "SPI1 global interrupt"
    +          },
    +          "SPI2": {
    +            "index": 36,
    +            "description": "SPI2 global interrupt"
    +          },
    +          "SPI3": {
    +            "index": 51,
    +            "description": "SPI3 global interrupt"
    +          },
    +          "SPI4": {
    +            "index": 84,
    +            "description": "SPI 4 global interrupt"
    +          },
    +          "SPI5": {
    +            "index": 85,
    +            "description": "SPI 5 global interrupt"
    +          },
    +          "SPI6": {
    +            "index": 86,
    +            "description": "SPI 6 global interrupt"
    +          },
    +          "SDIO": {
    +            "index": 49,
    +            "description": "SDIO global interrupt"
    +          },
    +          "ADC": {
    +            "index": 18,
    +            "description": "ADC2 global interrupts"
    +          },
    +          "USART6": {
    +            "index": 71,
    +            "description": "USART6 global interrupt"
    +          },
    +          "USART1": {
    +            "index": 37,
    +            "description": "USART1 global interrupt"
    +          },
    +          "USART2": {
    +            "index": 38,
    +            "description": "USART2 global interrupt"
    +          },
    +          "USART3": {
    +            "index": 39,
    +            "description": "USART3 global interrupt"
    +          },
    +          "UART7": {
    +            "index": 82,
    +            "description": "UART 7 global interrupt"
    +          },
    +          "UART8": {
    +            "index": 83,
    +            "description": "UART 8 global interrupt"
    +          },
    +          "TIM6_DAC": {
    +            "index": 54,
    +            "description": "TIM6 global interrupt, DAC1 and DAC2 underrun\n        error interrupt"
    +          },
    +          "PVD": {
    +            "index": 1,
    +            "description": "PVD through EXTI line detection\n        interrupt"
    +          },
    +          "WWDG": {
    +            "index": 0,
    +            "description": "Window Watchdog interrupt"
    +          },
    +          "RTC_WKUP": {
    +            "index": 3,
    +            "description": "RTC Wakeup interrupt through the EXTI\n        line"
    +          },
    +          "UART4": {
    +            "index": 52,
    +            "description": "UART4 global interrupt"
    +          },
    +          "UART5": {
    +            "index": 53,
    +            "description": "UART5 global interrupt"
    +          },
    +          "TIM1_BRK_TIM9": {
    +            "index": 24,
    +            "description": "TIM1 Break interrupt and TIM9 global\n        interrupt"
    +          },
    +          "TIM8_BRK_TIM12": {
    +            "index": 43,
    +            "description": "TIM8 Break interrupt and TIM12 global\n        interrupt"
    +          },
    +          "TIM2": {
    +            "index": 28,
    +            "description": "TIM2 global interrupt"
    +          },
    +          "TIM3": {
    +            "index": 29,
    +            "description": "TIM3 global interrupt"
    +          },
    +          "TIM4": {
    +            "index": 30,
    +            "description": "TIM4 global interrupt"
    +          },
    +          "TIM5": {
    +            "index": 50,
    +            "description": "TIM5 global interrupt"
    +          },
    +          "TIM8_UP_TIM13": {
    +            "index": 44,
    +            "description": "TIM8 Update interrupt and TIM13 global\n        interrupt"
    +          },
    +          "TIM8_TRG_COM_TIM14": {
    +            "index": 45,
    +            "description": "TIM8 Trigger and Commutation interrupts and\n        TIM14 global interrupt"
    +          },
    +          "TIM7": {
    +            "index": 55,
    +            "description": "TIM7 global interrupt"
    +          },
    +          "ETH": {
    +            "index": 61,
    +            "description": "Ethernet global interrupt"
    +          },
    +          "OTG_FS_WKUP": {
    +            "index": 42,
    +            "description": "USB On-The-Go FS Wakeup through EXTI line\n        interrupt"
    +          },
    +          "CAN1_TX": {
    +            "index": 19,
    +            "description": "CAN1 TX interrupts"
    +          },
    +          "CAN2_TX": {
    +            "index": 63,
    +            "description": "CAN2 TX interrupts"
    +          },
    +          "FLASH": {
    +            "index": 4,
    +            "description": "Flash global interrupt"
    +          },
    +          "TAMP_STAMP": {
    +            "index": 2,
    +            "description": "Tamper and TimeStamp interrupts through the\n        EXTI line"
    +          },
    +          "OTG_HS_EP1_OUT": {
    +            "index": 74,
    +            "description": "USB On The Go HS End Point 1 Out global\n        interrupt"
    +          },
    +          "LCD_TFT": {
    +            "index": 88,
    +            "description": "LTDC global interrupt"
    +          },
    +          "SAI1": {
    +            "index": 87,
    +            "description": "SAI1 global interrupt"
    +          },
    +          "DMA2D": {
    +            "index": 90,
    +            "description": "DMA2D global interrupt"
    +          },
    +          "I2C3_EV": {
    +            "index": 72,
    +            "description": "I2C3 event interrupt"
    +          },
    +          "I2C2_EV": {
    +            "index": 33,
    +            "description": "I2C2 event interrupt"
    +          },
    +          "I2C1_EV": {
    +            "index": 31,
    +            "description": "I2C1 event interrupt"
    +          }
    +        },
    +        "peripheral_instances": {
    +          "RNG": {
    +            "description": "Random number generator",
    +            "offset": 1342572544,
    +            "type": "types.peripherals.RNG"
    +          },
    +          "HASH": {
    +            "description": "Hash processor",
    +            "offset": 1342571520,
    +            "type": "types.peripherals.HASH"
    +          },
    +          "CRYP": {
    +            "description": "Cryptographic processor",
    +            "offset": 1342570496,
    +            "type": "types.peripherals.CRYP"
    +          },
    +          "DCMI": {
    +            "description": "Digital camera interface",
    +            "offset": 1342504960,
    +            "type": "types.peripherals.DCMI"
    +          },
    +          "FMC": {
    +            "description": "Flexible memory controller",
    +            "offset": 2684354560,
    +            "type": "types.peripherals.FMC"
    +          },
    +          "DBG": {
    +            "description": "Debug support",
    +            "offset": 3758366720,
    +            "type": "types.peripherals.DBG"
    +          },
    +          "DMA2": {
    +            "description": "DMA controller",
    +            "offset": 1073898496,
    +            "type": "types.peripherals.DMA2"
    +          },
    +          "DMA1": {
    +            "offset": 1073897472,
    +            "type": "types.peripherals.DMA2"
    +          },
    +          "RCC": {
    +            "description": "Reset and clock control",
    +            "offset": 1073887232,
    +            "type": "types.peripherals.RCC"
    +          },
    +          "GPIOK": {
    +            "description": "General-purpose I/Os",
    +            "offset": 1073883136,
    +            "type": "types.peripherals.GPIOK"
    +          },
    +          "GPIOJ": {
    +            "offset": 1073882112,
    +            "type": "types.peripherals.GPIOK"
    +          },
    +          "GPIOI": {
    +            "offset": 1073881088,
    +            "type": "types.peripherals.GPIOK"
    +          },
    +          "GPIOH": {
    +            "offset": 1073880064,
    +            "type": "types.peripherals.GPIOK"
    +          },
    +          "GPIOG": {
    +            "offset": 1073879040,
    +            "type": "types.peripherals.GPIOK"
    +          },
    +          "GPIOF": {
    +            "offset": 1073878016,
    +            "type": "types.peripherals.GPIOK"
    +          },
    +          "GPIOE": {
    +            "offset": 1073876992,
    +            "type": "types.peripherals.GPIOK"
    +          },
    +          "GPIOD": {
    +            "offset": 1073875968,
    +            "type": "types.peripherals.GPIOK"
    +          },
    +          "GPIOC": {
    +            "offset": 1073874944,
    +            "type": "types.peripherals.GPIOK"
    +          },
    +          "GPIOB": {
    +            "description": "General-purpose I/Os",
    +            "offset": 1073873920,
    +            "type": "types.peripherals.GPIOB"
    +          },
    +          "GPIOA": {
    +            "description": "General-purpose I/Os",
    +            "offset": 1073872896,
    +            "type": "types.peripherals.GPIOA"
    +          },
    +          "SYSCFG": {
    +            "description": "System configuration controller",
    +            "offset": 1073821696,
    +            "type": "types.peripherals.SYSCFG"
    +          },
    +          "SPI1": {
    +            "description": "Serial peripheral interface",
    +            "offset": 1073819648,
    +            "type": "types.peripherals.SPI1"
    +          },
    +          "SPI2": {
    +            "offset": 1073756160,
    +            "type": "types.peripherals.SPI1"
    +          },
    +          "SPI3": {
    +            "offset": 1073757184,
    +            "type": "types.peripherals.SPI1"
    +          },
    +          "I2S2ext": {
    +            "offset": 1073755136,
    +            "type": "types.peripherals.SPI1"
    +          },
    +          "I2S3ext": {
    +            "offset": 1073758208,
    +            "type": "types.peripherals.SPI1"
    +          },
    +          "SPI4": {
    +            "offset": 1073820672,
    +            "type": "types.peripherals.SPI1"
    +          },
    +          "SPI5": {
    +            "offset": 1073827840,
    +            "type": "types.peripherals.SPI1"
    +          },
    +          "SPI6": {
    +            "offset": 1073828864,
    +            "type": "types.peripherals.SPI1"
    +          },
    +          "SDIO": {
    +            "description": "Secure digital input/output\n      interface",
    +            "offset": 1073818624,
    +            "type": "types.peripherals.SDIO"
    +          },
    +          "ADC1": {
    +            "description": "Analog-to-digital converter",
    +            "offset": 1073815552,
    +            "type": "types.peripherals.ADC1"
    +          },
    +          "ADC2": {
    +            "offset": 1073815808,
    +            "type": "types.peripherals.ADC1"
    +          },
    +          "ADC3": {
    +            "offset": 1073816064,
    +            "type": "types.peripherals.ADC1"
    +          },
    +          "USART6": {
    +            "description": "Universal synchronous asynchronous receiver\n      transmitter",
    +            "offset": 1073812480,
    +            "type": "types.peripherals.USART6"
    +          },
    +          "USART1": {
    +            "offset": 1073811456,
    +            "type": "types.peripherals.USART6"
    +          },
    +          "USART2": {
    +            "offset": 1073759232,
    +            "type": "types.peripherals.USART6"
    +          },
    +          "USART3": {
    +            "offset": 1073760256,
    +            "type": "types.peripherals.USART6"
    +          },
    +          "UART7": {
    +            "offset": 1073772544,
    +            "type": "types.peripherals.USART6"
    +          },
    +          "UART8": {
    +            "offset": 1073773568,
    +            "type": "types.peripherals.USART6"
    +          },
    +          "DAC": {
    +            "description": "Digital-to-analog converter",
    +            "offset": 1073771520,
    +            "type": "types.peripherals.DAC"
    +          },
    +          "PWR": {
    +            "description": "Power control",
    +            "offset": 1073770496,
    +            "type": "types.peripherals.PWR"
    +          },
    +          "IWDG": {
    +            "description": "Independent watchdog",
    +            "offset": 1073754112,
    +            "type": "types.peripherals.IWDG"
    +          },
    +          "WWDG": {
    +            "description": "Window watchdog",
    +            "offset": 1073753088,
    +            "type": "types.peripherals.WWDG"
    +          },
    +          "RTC": {
    +            "description": "Real-time clock",
    +            "offset": 1073752064,
    +            "type": "types.peripherals.RTC"
    +          },
    +          "UART4": {
    +            "description": "Universal synchronous asynchronous receiver\n      transmitter",
    +            "offset": 1073761280,
    +            "type": "types.peripherals.UART4"
    +          },
    +          "UART5": {
    +            "offset": 1073762304,
    +            "type": "types.peripherals.UART4"
    +          },
    +          "C_ADC": {
    +            "description": "Common ADC registers",
    +            "offset": 1073816320,
    +            "type": "types.peripherals.C_ADC"
    +          },
    +          "TIM1": {
    +            "description": "Advanced-timers",
    +            "offset": 1073807360,
    +            "type": "types.peripherals.TIM1"
    +          },
    +          "TIM8": {
    +            "offset": 1073808384,
    +            "type": "types.peripherals.TIM1"
    +          },
    +          "TIM2": {
    +            "description": "General purpose timers",
    +            "offset": 1073741824,
    +            "type": "types.peripherals.TIM2"
    +          },
    +          "TIM3": {
    +            "description": "General purpose timers",
    +            "offset": 1073742848,
    +            "type": "types.peripherals.TIM3"
    +          },
    +          "TIM4": {
    +            "offset": 1073743872,
    +            "type": "types.peripherals.TIM3"
    +          },
    +          "TIM5": {
    +            "description": "General-purpose-timers",
    +            "offset": 1073744896,
    +            "type": "types.peripherals.TIM5"
    +          },
    +          "TIM9": {
    +            "description": "General purpose timers",
    +            "offset": 1073823744,
    +            "type": "types.peripherals.TIM9"
    +          },
    +          "TIM12": {
    +            "offset": 1073747968,
    +            "type": "types.peripherals.TIM9"
    +          },
    +          "TIM10": {
    +            "description": "General-purpose-timers",
    +            "offset": 1073824768,
    +            "type": "types.peripherals.TIM10"
    +          },
    +          "TIM13": {
    +            "offset": 1073748992,
    +            "type": "types.peripherals.TIM10"
    +          },
    +          "TIM14": {
    +            "offset": 1073750016,
    +            "type": "types.peripherals.TIM10"
    +          },
    +          "TIM11": {
    +            "description": "General-purpose-timers",
    +            "offset": 1073825792,
    +            "type": "types.peripherals.TIM11"
    +          },
    +          "TIM6": {
    +            "description": "Basic timers",
    +            "offset": 1073745920,
    +            "type": "types.peripherals.TIM6"
    +          },
    +          "TIM7": {
    +            "offset": 1073746944,
    +            "type": "types.peripherals.TIM6"
    +          },
    +          "Ethernet_MAC": {
    +            "description": "Ethernet: media access control\n      (MAC)",
    +            "offset": 1073905664,
    +            "type": "types.peripherals.Ethernet_MAC"
    +          },
    +          "Ethernet_MMC": {
    +            "description": "Ethernet: MAC management counters",
    +            "offset": 1073905920,
    +            "type": "types.peripherals.Ethernet_MMC"
    +          },
    +          "Ethernet_PTP": {
    +            "description": "Ethernet: Precision time protocol",
    +            "offset": 1073907456,
    +            "type": "types.peripherals.Ethernet_PTP"
    +          },
    +          "Ethernet_DMA": {
    +            "description": "Ethernet: DMA controller operation",
    +            "offset": 1073909760,
    +            "type": "types.peripherals.Ethernet_DMA"
    +          },
    +          "CRC": {
    +            "description": "Cryptographic processor",
    +            "offset": 1073885184,
    +            "type": "types.peripherals.CRC"
    +          },
    +          "OTG_FS_GLOBAL": {
    +            "description": "USB on the go full speed",
    +            "offset": 1342177280,
    +            "type": "types.peripherals.OTG_FS_GLOBAL"
    +          },
    +          "OTG_FS_HOST": {
    +            "description": "USB on the go full speed",
    +            "offset": 1342178304,
    +            "type": "types.peripherals.OTG_FS_HOST"
    +          },
    +          "OTG_FS_DEVICE": {
    +            "description": "USB on the go full speed",
    +            "offset": 1342179328,
    +            "type": "types.peripherals.OTG_FS_DEVICE"
    +          },
    +          "OTG_FS_PWRCLK": {
    +            "description": "USB on the go full speed",
    +            "offset": 1342180864,
    +            "type": "types.peripherals.OTG_FS_PWRCLK"
    +          },
    +          "CAN1": {
    +            "description": "Controller area network",
    +            "offset": 1073767424,
    +            "type": "types.peripherals.CAN1"
    +          },
    +          "CAN2": {
    +            "offset": 1073768448,
    +            "type": "types.peripherals.CAN1"
    +          },
    +          "NVIC": {
    +            "description": "Nested Vectored Interrupt\n      Controller",
    +            "offset": 3758153984,
    +            "type": "types.peripherals.NVIC"
    +          },
    +          "FLASH": {
    +            "description": "FLASH",
    +            "offset": 1073888256,
    +            "type": "types.peripherals.FLASH"
    +          },
    +          "EXTI": {
    +            "description": "External interrupt/event\n      controller",
    +            "offset": 1073822720,
    +            "type": "types.peripherals.EXTI"
    +          },
    +          "OTG_HS_GLOBAL": {
    +            "description": "USB on the go high speed",
    +            "offset": 1074003968,
    +            "type": "types.peripherals.OTG_HS_GLOBAL"
    +          },
    +          "OTG_HS_HOST": {
    +            "description": "USB on the go high speed",
    +            "offset": 1074004992,
    +            "type": "types.peripherals.OTG_HS_HOST"
    +          },
    +          "OTG_HS_DEVICE": {
    +            "description": "USB on the go high speed",
    +            "offset": 1074006016,
    +            "type": "types.peripherals.OTG_HS_DEVICE"
    +          },
    +          "OTG_HS_PWRCLK": {
    +            "description": "USB on the go high speed",
    +            "offset": 1074007552,
    +            "type": "types.peripherals.OTG_HS_PWRCLK"
    +          },
    +          "LTDC": {
    +            "description": "LCD-TFT Controller",
    +            "offset": 1073833984,
    +            "type": "types.peripherals.LTDC"
    +          },
    +          "SAI": {
    +            "description": "Serial audio interface",
    +            "offset": 1073829888,
    +            "type": "types.peripherals.SAI"
    +          },
    +          "DMA2D": {
    +            "description": "DMA2D controller",
    +            "offset": 1073917952,
    +            "type": "types.peripherals.DMA2D"
    +          },
    +          "I2C3": {
    +            "description": "Inter-integrated circuit",
    +            "offset": 1073765376,
    +            "type": "types.peripherals.I2C3"
    +          },
    +          "I2C2": {
    +            "offset": 1073764352,
    +            "type": "types.peripherals.I2C3"
    +          },
    +          "I2C1": {
    +            "offset": 1073763328,
    +            "type": "types.peripherals.I2C3"
    +          },
    +          "FPU": {
    +            "description": "Floting point unit",
    +            "offset": 3758157620,
    +            "type": "types.peripherals.FPU"
    +          },
    +          "MPU": {
    +            "description": "Memory protection unit",
    +            "offset": 3758157200,
    +            "type": "types.peripherals.MPU"
    +          },
    +          "STK": {
    +            "description": "SysTick timer",
    +            "offset": 3758153744,
    +            "type": "types.peripherals.STK"
    +          },
    +          "SCB": {
    +            "description": "System control block",
    +            "offset": 3758157056,
    +            "type": "types.peripherals.SCB"
    +          },
    +          "NVIC_STIR": {
    +            "description": "Nested vectored interrupt\n      controller",
    +            "offset": 3758157568,
    +            "type": "types.peripherals.NVIC_STIR"
    +          },
    +          "FPU_CPACR": {
    +            "description": "Floating point unit CPACR",
    +            "offset": 3758157192,
    +            "type": "types.peripherals.FPU_CPACR"
    +          },
    +          "SCB_ACTRL": {
    +            "description": "System control block ACTLR",
    +            "offset": 3758153736,
    +            "type": "types.peripherals.SCB_ACTRL"
    +          }
    +        }
    +      }
    +    }
    +  }
    +}
    \ No newline at end of file
    diff --git a/src/chips/STM32F429.zig b/src/chips/STM32F429.zig
    new file mode 100644
    index 000000000..73b943659
    --- /dev/null
    +++ b/src/chips/STM32F429.zig
    @@ -0,0 +1,20419 @@
    +const micro = @import("microzig");
    +const mmio = micro.mmio;
    +
    +pub const devices = struct {
    +    ///  STM32F429
    +    pub const STM32F429 = struct {
    +        pub const properties = struct {
    +            pub const @"cpu.nvic_prio_bits" = "3";
    +            pub const @"cpu.mpu" = "false";
    +            pub const @"cpu.fpu" = "false";
    +            pub const @"cpu.revision" = "r1p0";
    +            pub const @"cpu.vendor_systick_config" = "false";
    +            pub const @"cpu.endian" = "little";
    +            pub const @"cpu.name" = "CM4";
    +        };
    +
    +        pub const VectorTable = extern struct {
    +            const Handler = micro.interrupt.Handler;
    +            const unhandled = micro.interrupt.unhandled;
    +
    +            initial_stack_pointer: u32,
    +            Reset: Handler = unhandled,
    +            NMI: Handler = unhandled,
    +            HardFault: Handler = unhandled,
    +            MemManageFault: Handler = unhandled,
    +            BusFault: Handler = unhandled,
    +            UsageFault: Handler = unhandled,
    +            reserved5: [4]u32 = undefined,
    +            SVCall: Handler = unhandled,
    +            DebugMonitor: Handler = unhandled,
    +            reserved11: [1]u32 = undefined,
    +            PendSV: Handler = unhandled,
    +            SysTick: Handler = unhandled,
    +            ///  Window Watchdog interrupt
    +            WWDG: Handler = unhandled,
    +            ///  PVD through EXTI line detection interrupt
    +            PVD: Handler = unhandled,
    +            ///  Tamper and TimeStamp interrupts through the EXTI line
    +            TAMP_STAMP: Handler = unhandled,
    +            ///  RTC Wakeup interrupt through the EXTI line
    +            RTC_WKUP: Handler = unhandled,
    +            ///  Flash global interrupt
    +            FLASH: Handler = unhandled,
    +            ///  RCC global interrupt
    +            RCC: Handler = unhandled,
    +            reserved20: [5]u32 = undefined,
    +            ///  DMA1 Stream0 global interrupt
    +            DMA1_Stream0: Handler = unhandled,
    +            reserved26: [6]u32 = undefined,
    +            ///  ADC2 global interrupts
    +            ADC: Handler = unhandled,
    +            ///  CAN1 TX interrupts
    +            CAN1_TX: Handler = unhandled,
    +            reserved34: [4]u32 = undefined,
    +            ///  TIM1 Break interrupt and TIM9 global interrupt
    +            TIM1_BRK_TIM9: Handler = unhandled,
    +            reserved39: [3]u32 = undefined,
    +            ///  TIM2 global interrupt
    +            TIM2: Handler = unhandled,
    +            ///  TIM3 global interrupt
    +            TIM3: Handler = unhandled,
    +            ///  TIM4 global interrupt
    +            TIM4: Handler = unhandled,
    +            ///  I2C1 event interrupt
    +            I2C1_EV: Handler = unhandled,
    +            reserved46: [1]u32 = undefined,
    +            ///  I2C2 event interrupt
    +            I2C2_EV: Handler = unhandled,
    +            reserved48: [1]u32 = undefined,
    +            ///  SPI1 global interrupt
    +            SPI1: Handler = unhandled,
    +            ///  SPI2 global interrupt
    +            SPI2: Handler = unhandled,
    +            ///  USART1 global interrupt
    +            USART1: Handler = unhandled,
    +            ///  USART2 global interrupt
    +            USART2: Handler = unhandled,
    +            ///  USART3 global interrupt
    +            USART3: Handler = unhandled,
    +            reserved54: [2]u32 = undefined,
    +            ///  USB On-The-Go FS Wakeup through EXTI line interrupt
    +            OTG_FS_WKUP: Handler = unhandled,
    +            ///  TIM8 Break interrupt and TIM12 global interrupt
    +            TIM8_BRK_TIM12: Handler = unhandled,
    +            ///  TIM8 Update interrupt and TIM13 global interrupt
    +            TIM8_UP_TIM13: Handler = unhandled,
    +            ///  TIM8 Trigger and Commutation interrupts and TIM14 global interrupt
    +            TIM8_TRG_COM_TIM14: Handler = unhandled,
    +            reserved60: [2]u32 = undefined,
    +            ///  FMC global interrupt
    +            FMC: Handler = unhandled,
    +            ///  SDIO global interrupt
    +            SDIO: Handler = unhandled,
    +            ///  TIM5 global interrupt
    +            TIM5: Handler = unhandled,
    +            ///  SPI3 global interrupt
    +            SPI3: Handler = unhandled,
    +            ///  UART4 global interrupt
    +            UART4: Handler = unhandled,
    +            ///  UART5 global interrupt
    +            UART5: Handler = unhandled,
    +            ///  TIM6 global interrupt, DAC1 and DAC2 underrun error interrupt
    +            TIM6_DAC: Handler = unhandled,
    +            ///  TIM7 global interrupt
    +            TIM7: Handler = unhandled,
    +            ///  DMA2 Stream0 global interrupt
    +            DMA2_Stream0: Handler = unhandled,
    +            reserved71: [4]u32 = undefined,
    +            ///  Ethernet global interrupt
    +            ETH: Handler = unhandled,
    +            reserved76: [1]u32 = undefined,
    +            ///  CAN2 TX interrupts
    +            CAN2_TX: Handler = unhandled,
    +            reserved78: [7]u32 = undefined,
    +            ///  USART6 global interrupt
    +            USART6: Handler = unhandled,
    +            ///  I2C3 event interrupt
    +            I2C3_EV: Handler = unhandled,
    +            reserved87: [1]u32 = undefined,
    +            ///  USB On The Go HS End Point 1 Out global interrupt
    +            OTG_HS_EP1_OUT: Handler = unhandled,
    +            reserved89: [3]u32 = undefined,
    +            ///  DCMI global interrupt
    +            DCMI: Handler = unhandled,
    +            ///  CRYP crypto global interrupt
    +            CRYP: Handler = unhandled,
    +            ///  Hash and Rng global interrupt
    +            HASH_RNG: Handler = unhandled,
    +            ///  FPU interrupt
    +            FPU: Handler = unhandled,
    +            ///  UART 7 global interrupt
    +            UART7: Handler = unhandled,
    +            ///  UART 8 global interrupt
    +            UART8: Handler = unhandled,
    +            ///  SPI 4 global interrupt
    +            SPI4: Handler = unhandled,
    +            ///  SPI 5 global interrupt
    +            SPI5: Handler = unhandled,
    +            ///  SPI 6 global interrupt
    +            SPI6: Handler = unhandled,
    +            ///  SAI1 global interrupt
    +            SAI1: Handler = unhandled,
    +            ///  LTDC global interrupt
    +            LCD_TFT: Handler = unhandled,
    +            reserved103: [1]u32 = undefined,
    +            ///  DMA2D global interrupt
    +            DMA2D: Handler = unhandled,
    +        };
    +
    +        pub const peripherals = struct {
    +            ///  General purpose timers
    +            pub const TIM2 = @ptrCast(*volatile types.TIM2, 0x40000000);
    +            ///  General purpose timers
    +            pub const TIM3 = @ptrCast(*volatile types.TIM3, 0x40000400);
    +            ///  General purpose timers
    +            pub const TIM4 = @ptrCast(*volatile types.TIM3, 0x40000800);
    +            ///  General-purpose-timers
    +            pub const TIM5 = @ptrCast(*volatile types.TIM5, 0x40000c00);
    +            ///  Basic timers
    +            pub const TIM6 = @ptrCast(*volatile types.TIM6, 0x40001000);
    +            ///  Basic timers
    +            pub const TIM7 = @ptrCast(*volatile types.TIM6, 0x40001400);
    +            ///  General purpose timers
    +            pub const TIM12 = @ptrCast(*volatile types.TIM9, 0x40001800);
    +            ///  General-purpose-timers
    +            pub const TIM13 = @ptrCast(*volatile types.TIM10, 0x40001c00);
    +            ///  General-purpose-timers
    +            pub const TIM14 = @ptrCast(*volatile types.TIM10, 0x40002000);
    +            ///  Real-time clock
    +            pub const RTC = @ptrCast(*volatile types.RTC, 0x40002800);
    +            ///  Window watchdog
    +            pub const WWDG = @ptrCast(*volatile types.WWDG, 0x40002c00);
    +            ///  Independent watchdog
    +            pub const IWDG = @ptrCast(*volatile types.IWDG, 0x40003000);
    +            ///  Serial peripheral interface
    +            pub const I2S2ext = @ptrCast(*volatile types.SPI1, 0x40003400);
    +            ///  Serial peripheral interface
    +            pub const SPI2 = @ptrCast(*volatile types.SPI1, 0x40003800);
    +            ///  Serial peripheral interface
    +            pub const SPI3 = @ptrCast(*volatile types.SPI1, 0x40003c00);
    +            ///  Serial peripheral interface
    +            pub const I2S3ext = @ptrCast(*volatile types.SPI1, 0x40004000);
    +            ///  Universal synchronous asynchronous receiver transmitter
    +            pub const USART2 = @ptrCast(*volatile types.USART6, 0x40004400);
    +            ///  Universal synchronous asynchronous receiver transmitter
    +            pub const USART3 = @ptrCast(*volatile types.USART6, 0x40004800);
    +            ///  Universal synchronous asynchronous receiver transmitter
    +            pub const UART4 = @ptrCast(*volatile types.UART4, 0x40004c00);
    +            ///  Universal synchronous asynchronous receiver transmitter
    +            pub const UART5 = @ptrCast(*volatile types.UART4, 0x40005000);
    +            ///  Inter-integrated circuit
    +            pub const I2C1 = @ptrCast(*volatile types.I2C3, 0x40005400);
    +            ///  Inter-integrated circuit
    +            pub const I2C2 = @ptrCast(*volatile types.I2C3, 0x40005800);
    +            ///  Inter-integrated circuit
    +            pub const I2C3 = @ptrCast(*volatile types.I2C3, 0x40005c00);
    +            ///  Controller area network
    +            pub const CAN1 = @ptrCast(*volatile types.CAN1, 0x40006400);
    +            ///  Controller area network
    +            pub const CAN2 = @ptrCast(*volatile types.CAN1, 0x40006800);
    +            ///  Power control
    +            pub const PWR = @ptrCast(*volatile types.PWR, 0x40007000);
    +            ///  Digital-to-analog converter
    +            pub const DAC = @ptrCast(*volatile types.DAC, 0x40007400);
    +            ///  Universal synchronous asynchronous receiver transmitter
    +            pub const UART7 = @ptrCast(*volatile types.USART6, 0x40007800);
    +            ///  Universal synchronous asynchronous receiver transmitter
    +            pub const UART8 = @ptrCast(*volatile types.USART6, 0x40007c00);
    +            ///  Advanced-timers
    +            pub const TIM1 = @ptrCast(*volatile types.TIM1, 0x40010000);
    +            ///  Advanced-timers
    +            pub const TIM8 = @ptrCast(*volatile types.TIM1, 0x40010400);
    +            ///  Universal synchronous asynchronous receiver transmitter
    +            pub const USART1 = @ptrCast(*volatile types.USART6, 0x40011000);
    +            ///  Universal synchronous asynchronous receiver transmitter
    +            pub const USART6 = @ptrCast(*volatile types.USART6, 0x40011400);
    +            ///  Analog-to-digital converter
    +            pub const ADC1 = @ptrCast(*volatile types.ADC1, 0x40012000);
    +            ///  Analog-to-digital converter
    +            pub const ADC2 = @ptrCast(*volatile types.ADC1, 0x40012100);
    +            ///  Analog-to-digital converter
    +            pub const ADC3 = @ptrCast(*volatile types.ADC1, 0x40012200);
    +            ///  Common ADC registers
    +            pub const C_ADC = @ptrCast(*volatile types.C_ADC, 0x40012300);
    +            ///  Secure digital input/output interface
    +            pub const SDIO = @ptrCast(*volatile types.SDIO, 0x40012c00);
    +            ///  Serial peripheral interface
    +            pub const SPI1 = @ptrCast(*volatile types.SPI1, 0x40013000);
    +            ///  Serial peripheral interface
    +            pub const SPI4 = @ptrCast(*volatile types.SPI1, 0x40013400);
    +            ///  System configuration controller
    +            pub const SYSCFG = @ptrCast(*volatile types.SYSCFG, 0x40013800);
    +            ///  External interrupt/event controller
    +            pub const EXTI = @ptrCast(*volatile types.EXTI, 0x40013c00);
    +            ///  General purpose timers
    +            pub const TIM9 = @ptrCast(*volatile types.TIM9, 0x40014000);
    +            ///  General-purpose-timers
    +            pub const TIM10 = @ptrCast(*volatile types.TIM10, 0x40014400);
    +            ///  General-purpose-timers
    +            pub const TIM11 = @ptrCast(*volatile types.TIM11, 0x40014800);
    +            ///  Serial peripheral interface
    +            pub const SPI5 = @ptrCast(*volatile types.SPI1, 0x40015000);
    +            ///  Serial peripheral interface
    +            pub const SPI6 = @ptrCast(*volatile types.SPI1, 0x40015400);
    +            ///  Serial audio interface
    +            pub const SAI = @ptrCast(*volatile types.SAI, 0x40015800);
    +            ///  LCD-TFT Controller
    +            pub const LTDC = @ptrCast(*volatile types.LTDC, 0x40016800);
    +            ///  General-purpose I/Os
    +            pub const GPIOA = @ptrCast(*volatile types.GPIOA, 0x40020000);
    +            ///  General-purpose I/Os
    +            pub const GPIOB = @ptrCast(*volatile types.GPIOB, 0x40020400);
    +            ///  General-purpose I/Os
    +            pub const GPIOC = @ptrCast(*volatile types.GPIOK, 0x40020800);
    +            ///  General-purpose I/Os
    +            pub const GPIOD = @ptrCast(*volatile types.GPIOK, 0x40020c00);
    +            ///  General-purpose I/Os
    +            pub const GPIOE = @ptrCast(*volatile types.GPIOK, 0x40021000);
    +            ///  General-purpose I/Os
    +            pub const GPIOF = @ptrCast(*volatile types.GPIOK, 0x40021400);
    +            ///  General-purpose I/Os
    +            pub const GPIOG = @ptrCast(*volatile types.GPIOK, 0x40021800);
    +            ///  General-purpose I/Os
    +            pub const GPIOH = @ptrCast(*volatile types.GPIOK, 0x40021c00);
    +            ///  General-purpose I/Os
    +            pub const GPIOI = @ptrCast(*volatile types.GPIOK, 0x40022000);
    +            ///  General-purpose I/Os
    +            pub const GPIOJ = @ptrCast(*volatile types.GPIOK, 0x40022400);
    +            ///  General-purpose I/Os
    +            pub const GPIOK = @ptrCast(*volatile types.GPIOK, 0x40022800);
    +            ///  Cryptographic processor
    +            pub const CRC = @ptrCast(*volatile types.CRC, 0x40023000);
    +            ///  Reset and clock control
    +            pub const RCC = @ptrCast(*volatile types.RCC, 0x40023800);
    +            ///  FLASH
    +            pub const FLASH = @ptrCast(*volatile types.FLASH, 0x40023c00);
    +            ///  DMA controller
    +            pub const DMA1 = @ptrCast(*volatile types.DMA2, 0x40026000);
    +            ///  DMA controller
    +            pub const DMA2 = @ptrCast(*volatile types.DMA2, 0x40026400);
    +            ///  Ethernet: media access control (MAC)
    +            pub const Ethernet_MAC = @ptrCast(*volatile types.Ethernet_MAC, 0x40028000);
    +            ///  Ethernet: MAC management counters
    +            pub const Ethernet_MMC = @ptrCast(*volatile types.Ethernet_MMC, 0x40028100);
    +            ///  Ethernet: Precision time protocol
    +            pub const Ethernet_PTP = @ptrCast(*volatile types.Ethernet_PTP, 0x40028700);
    +            ///  Ethernet: DMA controller operation
    +            pub const Ethernet_DMA = @ptrCast(*volatile types.Ethernet_DMA, 0x40029000);
    +            ///  DMA2D controller
    +            pub const DMA2D = @ptrCast(*volatile types.DMA2D, 0x4002b000);
    +            ///  USB on the go high speed
    +            pub const OTG_HS_GLOBAL = @ptrCast(*volatile types.OTG_HS_GLOBAL, 0x40040000);
    +            ///  USB on the go high speed
    +            pub const OTG_HS_HOST = @ptrCast(*volatile types.OTG_HS_HOST, 0x40040400);
    +            ///  USB on the go high speed
    +            pub const OTG_HS_DEVICE = @ptrCast(*volatile types.OTG_HS_DEVICE, 0x40040800);
    +            ///  USB on the go high speed
    +            pub const OTG_HS_PWRCLK = @ptrCast(*volatile types.OTG_HS_PWRCLK, 0x40040e00);
    +            ///  USB on the go full speed
    +            pub const OTG_FS_GLOBAL = @ptrCast(*volatile types.OTG_FS_GLOBAL, 0x50000000);
    +            ///  USB on the go full speed
    +            pub const OTG_FS_HOST = @ptrCast(*volatile types.OTG_FS_HOST, 0x50000400);
    +            ///  USB on the go full speed
    +            pub const OTG_FS_DEVICE = @ptrCast(*volatile types.OTG_FS_DEVICE, 0x50000800);
    +            ///  USB on the go full speed
    +            pub const OTG_FS_PWRCLK = @ptrCast(*volatile types.OTG_FS_PWRCLK, 0x50000e00);
    +            ///  Digital camera interface
    +            pub const DCMI = @ptrCast(*volatile types.DCMI, 0x50050000);
    +            ///  Cryptographic processor
    +            pub const CRYP = @ptrCast(*volatile types.CRYP, 0x50060000);
    +            ///  Hash processor
    +            pub const HASH = @ptrCast(*volatile types.HASH, 0x50060400);
    +            ///  Random number generator
    +            pub const RNG = @ptrCast(*volatile types.RNG, 0x50060800);
    +            ///  Flexible memory controller
    +            pub const FMC = @ptrCast(*volatile types.FMC, 0xa0000000);
    +            ///  System control block ACTLR
    +            pub const SCB_ACTRL = @ptrCast(*volatile types.SCB_ACTRL, 0xe000e008);
    +            ///  SysTick timer
    +            pub const STK = @ptrCast(*volatile types.STK, 0xe000e010);
    +            ///  Nested Vectored Interrupt Controller
    +            pub const NVIC = @ptrCast(*volatile types.NVIC, 0xe000e100);
    +            ///  System control block
    +            pub const SCB = @ptrCast(*volatile types.SCB, 0xe000ed00);
    +            ///  Floating point unit CPACR
    +            pub const FPU_CPACR = @ptrCast(*volatile types.FPU_CPACR, 0xe000ed88);
    +            ///  Memory protection unit
    +            pub const MPU = @ptrCast(*volatile types.MPU, 0xe000ed90);
    +            ///  Nested vectored interrupt controller
    +            pub const NVIC_STIR = @ptrCast(*volatile types.NVIC_STIR, 0xe000ef00);
    +            ///  Floting point unit
    +            pub const FPU = @ptrCast(*volatile types.FPU, 0xe000ef34);
    +            ///  Debug support
    +            pub const DBG = @ptrCast(*volatile types.DBG, 0xe0042000);
    +        };
    +    };
    +};
    +
    +pub const types = struct {
    +    ///  Random number generator
    +    pub const RNG = extern struct {
    +        ///  control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            reserved2: u2,
    +            ///  Random number generator enable
    +            RNGEN: u1,
    +            ///  Interrupt enable
    +            IE: u1,
    +            padding: u28,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Data ready
    +            DRDY: u1,
    +            ///  Clock error current status
    +            CECS: u1,
    +            ///  Seed error current status
    +            SECS: u1,
    +            reserved5: u2,
    +            ///  Clock error interrupt status
    +            CEIS: u1,
    +            ///  Seed error interrupt status
    +            SEIS: u1,
    +            padding: u25,
    +        }),
    +        ///  data register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  Random data
    +            RNDATA: u32,
    +        }),
    +    };
    +
    +    ///  Hash processor
    +    pub const HASH = extern struct {
    +        ///  control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            reserved2: u2,
    +            ///  Initialize message digest calculation
    +            INIT: u1,
    +            ///  DMA enable
    +            DMAE: u1,
    +            ///  Data type selection
    +            DATATYPE: u2,
    +            ///  Mode selection
    +            MODE: u1,
    +            ///  Algorithm selection
    +            ALGO0: u1,
    +            ///  Number of words already pushed
    +            NBW: u4,
    +            ///  DIN not empty
    +            DINNE: u1,
    +            ///  Multiple DMA Transfers
    +            MDMAT: u1,
    +            reserved16: u2,
    +            ///  Long key selection
    +            LKEY: u1,
    +            reserved18: u1,
    +            ///  ALGO
    +            ALGO1: u1,
    +            padding: u13,
    +        }),
    +        ///  data input register
    +        DIN: mmio.Mmio(packed struct(u32) {
    +            ///  Data input
    +            DATAIN: u32,
    +        }),
    +        ///  start register
    +        STR: mmio.Mmio(packed struct(u32) {
    +            ///  Number of valid bits in the last word of the message
    +            NBLW: u5,
    +            reserved8: u3,
    +            ///  Digest calculation
    +            DCAL: u1,
    +            padding: u23,
    +        }),
    +        ///  digest registers
    +        HR0: mmio.Mmio(packed struct(u32) {
    +            ///  H0
    +            H0: u32,
    +        }),
    +        ///  digest registers
    +        HR1: mmio.Mmio(packed struct(u32) {
    +            ///  H1
    +            H1: u32,
    +        }),
    +        ///  digest registers
    +        HR2: mmio.Mmio(packed struct(u32) {
    +            ///  H2
    +            H2: u32,
    +        }),
    +        ///  digest registers
    +        HR3: mmio.Mmio(packed struct(u32) {
    +            ///  H3
    +            H3: u32,
    +        }),
    +        ///  digest registers
    +        HR4: mmio.Mmio(packed struct(u32) {
    +            ///  H4
    +            H4: u32,
    +        }),
    +        ///  interrupt enable register
    +        IMR: mmio.Mmio(packed struct(u32) {
    +            ///  Data input interrupt enable
    +            DINIE: u1,
    +            ///  Digest calculation completion interrupt enable
    +            DCIE: u1,
    +            padding: u30,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Data input interrupt status
    +            DINIS: u1,
    +            ///  Digest calculation completion interrupt status
    +            DCIS: u1,
    +            ///  DMA Status
    +            DMAS: u1,
    +            ///  Busy bit
    +            BUSY: u1,
    +            padding: u28,
    +        }),
    +        reserved248: [208]u8,
    +        ///  context swap registers
    +        CSR0: mmio.Mmio(packed struct(u32) {
    +            ///  CSR0
    +            CSR0: u32,
    +        }),
    +        ///  context swap registers
    +        CSR1: mmio.Mmio(packed struct(u32) {
    +            ///  CSR1
    +            CSR1: u32,
    +        }),
    +        ///  context swap registers
    +        CSR2: mmio.Mmio(packed struct(u32) {
    +            ///  CSR2
    +            CSR2: u32,
    +        }),
    +        ///  context swap registers
    +        CSR3: mmio.Mmio(packed struct(u32) {
    +            ///  CSR3
    +            CSR3: u32,
    +        }),
    +        ///  context swap registers
    +        CSR4: mmio.Mmio(packed struct(u32) {
    +            ///  CSR4
    +            CSR4: u32,
    +        }),
    +        ///  context swap registers
    +        CSR5: mmio.Mmio(packed struct(u32) {
    +            ///  CSR5
    +            CSR5: u32,
    +        }),
    +        ///  context swap registers
    +        CSR6: mmio.Mmio(packed struct(u32) {
    +            ///  CSR6
    +            CSR6: u32,
    +        }),
    +        ///  context swap registers
    +        CSR7: mmio.Mmio(packed struct(u32) {
    +            ///  CSR7
    +            CSR7: u32,
    +        }),
    +        ///  context swap registers
    +        CSR8: mmio.Mmio(packed struct(u32) {
    +            ///  CSR8
    +            CSR8: u32,
    +        }),
    +        ///  context swap registers
    +        CSR9: mmio.Mmio(packed struct(u32) {
    +            ///  CSR9
    +            CSR9: u32,
    +        }),
    +        ///  context swap registers
    +        CSR10: mmio.Mmio(packed struct(u32) {
    +            ///  CSR10
    +            CSR10: u32,
    +        }),
    +        ///  context swap registers
    +        CSR11: mmio.Mmio(packed struct(u32) {
    +            ///  CSR11
    +            CSR11: u32,
    +        }),
    +        ///  context swap registers
    +        CSR12: mmio.Mmio(packed struct(u32) {
    +            ///  CSR12
    +            CSR12: u32,
    +        }),
    +        ///  context swap registers
    +        CSR13: mmio.Mmio(packed struct(u32) {
    +            ///  CSR13
    +            CSR13: u32,
    +        }),
    +        ///  context swap registers
    +        CSR14: mmio.Mmio(packed struct(u32) {
    +            ///  CSR14
    +            CSR14: u32,
    +        }),
    +        ///  context swap registers
    +        CSR15: mmio.Mmio(packed struct(u32) {
    +            ///  CSR15
    +            CSR15: u32,
    +        }),
    +        ///  context swap registers
    +        CSR16: mmio.Mmio(packed struct(u32) {
    +            ///  CSR16
    +            CSR16: u32,
    +        }),
    +        ///  context swap registers
    +        CSR17: mmio.Mmio(packed struct(u32) {
    +            ///  CSR17
    +            CSR17: u32,
    +        }),
    +        ///  context swap registers
    +        CSR18: mmio.Mmio(packed struct(u32) {
    +            ///  CSR18
    +            CSR18: u32,
    +        }),
    +        ///  context swap registers
    +        CSR19: mmio.Mmio(packed struct(u32) {
    +            ///  CSR19
    +            CSR19: u32,
    +        }),
    +        ///  context swap registers
    +        CSR20: mmio.Mmio(packed struct(u32) {
    +            ///  CSR20
    +            CSR20: u32,
    +        }),
    +        ///  context swap registers
    +        CSR21: mmio.Mmio(packed struct(u32) {
    +            ///  CSR21
    +            CSR21: u32,
    +        }),
    +        ///  context swap registers
    +        CSR22: mmio.Mmio(packed struct(u32) {
    +            ///  CSR22
    +            CSR22: u32,
    +        }),
    +        ///  context swap registers
    +        CSR23: mmio.Mmio(packed struct(u32) {
    +            ///  CSR23
    +            CSR23: u32,
    +        }),
    +        ///  context swap registers
    +        CSR24: mmio.Mmio(packed struct(u32) {
    +            ///  CSR24
    +            CSR24: u32,
    +        }),
    +        ///  context swap registers
    +        CSR25: mmio.Mmio(packed struct(u32) {
    +            ///  CSR25
    +            CSR25: u32,
    +        }),
    +        ///  context swap registers
    +        CSR26: mmio.Mmio(packed struct(u32) {
    +            ///  CSR26
    +            CSR26: u32,
    +        }),
    +        ///  context swap registers
    +        CSR27: mmio.Mmio(packed struct(u32) {
    +            ///  CSR27
    +            CSR27: u32,
    +        }),
    +        ///  context swap registers
    +        CSR28: mmio.Mmio(packed struct(u32) {
    +            ///  CSR28
    +            CSR28: u32,
    +        }),
    +        ///  context swap registers
    +        CSR29: mmio.Mmio(packed struct(u32) {
    +            ///  CSR29
    +            CSR29: u32,
    +        }),
    +        ///  context swap registers
    +        CSR30: mmio.Mmio(packed struct(u32) {
    +            ///  CSR30
    +            CSR30: u32,
    +        }),
    +        ///  context swap registers
    +        CSR31: mmio.Mmio(packed struct(u32) {
    +            ///  CSR31
    +            CSR31: u32,
    +        }),
    +        ///  context swap registers
    +        CSR32: mmio.Mmio(packed struct(u32) {
    +            ///  CSR32
    +            CSR32: u32,
    +        }),
    +        ///  context swap registers
    +        CSR33: mmio.Mmio(packed struct(u32) {
    +            ///  CSR33
    +            CSR33: u32,
    +        }),
    +        ///  context swap registers
    +        CSR34: mmio.Mmio(packed struct(u32) {
    +            ///  CSR34
    +            CSR34: u32,
    +        }),
    +        ///  context swap registers
    +        CSR35: mmio.Mmio(packed struct(u32) {
    +            ///  CSR35
    +            CSR35: u32,
    +        }),
    +        ///  context swap registers
    +        CSR36: mmio.Mmio(packed struct(u32) {
    +            ///  CSR36
    +            CSR36: u32,
    +        }),
    +        ///  context swap registers
    +        CSR37: mmio.Mmio(packed struct(u32) {
    +            ///  CSR37
    +            CSR37: u32,
    +        }),
    +        ///  context swap registers
    +        CSR38: mmio.Mmio(packed struct(u32) {
    +            ///  CSR38
    +            CSR38: u32,
    +        }),
    +        ///  context swap registers
    +        CSR39: mmio.Mmio(packed struct(u32) {
    +            ///  CSR39
    +            CSR39: u32,
    +        }),
    +        ///  context swap registers
    +        CSR40: mmio.Mmio(packed struct(u32) {
    +            ///  CSR40
    +            CSR40: u32,
    +        }),
    +        ///  context swap registers
    +        CSR41: mmio.Mmio(packed struct(u32) {
    +            ///  CSR41
    +            CSR41: u32,
    +        }),
    +        ///  context swap registers
    +        CSR42: mmio.Mmio(packed struct(u32) {
    +            ///  CSR42
    +            CSR42: u32,
    +        }),
    +        ///  context swap registers
    +        CSR43: mmio.Mmio(packed struct(u32) {
    +            ///  CSR43
    +            CSR43: u32,
    +        }),
    +        ///  context swap registers
    +        CSR44: mmio.Mmio(packed struct(u32) {
    +            ///  CSR44
    +            CSR44: u32,
    +        }),
    +        ///  context swap registers
    +        CSR45: mmio.Mmio(packed struct(u32) {
    +            ///  CSR45
    +            CSR45: u32,
    +        }),
    +        ///  context swap registers
    +        CSR46: mmio.Mmio(packed struct(u32) {
    +            ///  CSR46
    +            CSR46: u32,
    +        }),
    +        ///  context swap registers
    +        CSR47: mmio.Mmio(packed struct(u32) {
    +            ///  CSR47
    +            CSR47: u32,
    +        }),
    +        ///  context swap registers
    +        CSR48: mmio.Mmio(packed struct(u32) {
    +            ///  CSR48
    +            CSR48: u32,
    +        }),
    +        ///  context swap registers
    +        CSR49: mmio.Mmio(packed struct(u32) {
    +            ///  CSR49
    +            CSR49: u32,
    +        }),
    +        ///  context swap registers
    +        CSR50: mmio.Mmio(packed struct(u32) {
    +            ///  CSR50
    +            CSR50: u32,
    +        }),
    +        ///  context swap registers
    +        CSR51: mmio.Mmio(packed struct(u32) {
    +            ///  CSR51
    +            CSR51: u32,
    +        }),
    +        ///  context swap registers
    +        CSR52: mmio.Mmio(packed struct(u32) {
    +            ///  CSR52
    +            CSR52: u32,
    +        }),
    +        ///  context swap registers
    +        CSR53: mmio.Mmio(packed struct(u32) {
    +            ///  CSR53
    +            CSR53: u32,
    +        }),
    +        reserved784: [320]u8,
    +        ///  HASH digest register
    +        HASH_HR0: mmio.Mmio(packed struct(u32) {
    +            ///  H0
    +            H0: u32,
    +        }),
    +        ///  read-only
    +        HASH_HR1: mmio.Mmio(packed struct(u32) {
    +            ///  H1
    +            H1: u32,
    +        }),
    +        ///  read-only
    +        HASH_HR2: mmio.Mmio(packed struct(u32) {
    +            ///  H2
    +            H2: u32,
    +        }),
    +        ///  read-only
    +        HASH_HR3: mmio.Mmio(packed struct(u32) {
    +            ///  H3
    +            H3: u32,
    +        }),
    +        ///  read-only
    +        HASH_HR4: mmio.Mmio(packed struct(u32) {
    +            ///  H4
    +            H4: u32,
    +        }),
    +        ///  read-only
    +        HASH_HR5: mmio.Mmio(packed struct(u32) {
    +            ///  H5
    +            H5: u32,
    +        }),
    +        ///  read-only
    +        HASH_HR6: mmio.Mmio(packed struct(u32) {
    +            ///  H6
    +            H6: u32,
    +        }),
    +        ///  read-only
    +        HASH_HR7: mmio.Mmio(packed struct(u32) {
    +            ///  H7
    +            H7: u32,
    +        }),
    +    };
    +
    +    ///  Cryptographic processor
    +    pub const CRYP = extern struct {
    +        ///  control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            reserved2: u2,
    +            ///  Algorithm direction
    +            ALGODIR: u1,
    +            ///  Algorithm mode
    +            ALGOMODE0: u3,
    +            ///  Data type selection
    +            DATATYPE: u2,
    +            ///  Key size selection (AES mode only)
    +            KEYSIZE: u2,
    +            reserved14: u4,
    +            ///  FIFO flush
    +            FFLUSH: u1,
    +            ///  Cryptographic processor enable
    +            CRYPEN: u1,
    +            ///  GCM_CCMPH
    +            GCM_CCMPH: u2,
    +            reserved19: u1,
    +            ///  ALGOMODE
    +            ALGOMODE3: u1,
    +            padding: u12,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Input FIFO empty
    +            IFEM: u1,
    +            ///  Input FIFO not full
    +            IFNF: u1,
    +            ///  Output FIFO not empty
    +            OFNE: u1,
    +            ///  Output FIFO full
    +            OFFU: u1,
    +            ///  Busy bit
    +            BUSY: u1,
    +            padding: u27,
    +        }),
    +        ///  data input register
    +        DIN: mmio.Mmio(packed struct(u32) {
    +            ///  Data input
    +            DATAIN: u32,
    +        }),
    +        ///  data output register
    +        DOUT: mmio.Mmio(packed struct(u32) {
    +            ///  Data output
    +            DATAOUT: u32,
    +        }),
    +        ///  DMA control register
    +        DMACR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA input enable
    +            DIEN: u1,
    +            ///  DMA output enable
    +            DOEN: u1,
    +            padding: u30,
    +        }),
    +        ///  interrupt mask set/clear register
    +        IMSCR: mmio.Mmio(packed struct(u32) {
    +            ///  Input FIFO service interrupt mask
    +            INIM: u1,
    +            ///  Output FIFO service interrupt mask
    +            OUTIM: u1,
    +            padding: u30,
    +        }),
    +        ///  raw interrupt status register
    +        RISR: mmio.Mmio(packed struct(u32) {
    +            ///  Input FIFO service raw interrupt status
    +            INRIS: u1,
    +            ///  Output FIFO service raw interrupt status
    +            OUTRIS: u1,
    +            padding: u30,
    +        }),
    +        ///  masked interrupt status register
    +        MISR: mmio.Mmio(packed struct(u32) {
    +            ///  Input FIFO service masked interrupt status
    +            INMIS: u1,
    +            ///  Output FIFO service masked interrupt status
    +            OUTMIS: u1,
    +            padding: u30,
    +        }),
    +        ///  key registers
    +        K0LR: mmio.Mmio(packed struct(u32) {
    +            ///  b224
    +            b224: u1,
    +            ///  b225
    +            b225: u1,
    +            ///  b226
    +            b226: u1,
    +            ///  b227
    +            b227: u1,
    +            ///  b228
    +            b228: u1,
    +            ///  b229
    +            b229: u1,
    +            ///  b230
    +            b230: u1,
    +            ///  b231
    +            b231: u1,
    +            ///  b232
    +            b232: u1,
    +            ///  b233
    +            b233: u1,
    +            ///  b234
    +            b234: u1,
    +            ///  b235
    +            b235: u1,
    +            ///  b236
    +            b236: u1,
    +            ///  b237
    +            b237: u1,
    +            ///  b238
    +            b238: u1,
    +            ///  b239
    +            b239: u1,
    +            ///  b240
    +            b240: u1,
    +            ///  b241
    +            b241: u1,
    +            ///  b242
    +            b242: u1,
    +            ///  b243
    +            b243: u1,
    +            ///  b244
    +            b244: u1,
    +            ///  b245
    +            b245: u1,
    +            ///  b246
    +            b246: u1,
    +            ///  b247
    +            b247: u1,
    +            ///  b248
    +            b248: u1,
    +            ///  b249
    +            b249: u1,
    +            ///  b250
    +            b250: u1,
    +            ///  b251
    +            b251: u1,
    +            ///  b252
    +            b252: u1,
    +            ///  b253
    +            b253: u1,
    +            ///  b254
    +            b254: u1,
    +            ///  b255
    +            b255: u1,
    +        }),
    +        ///  key registers
    +        K0RR: mmio.Mmio(packed struct(u32) {
    +            ///  b192
    +            b192: u1,
    +            ///  b193
    +            b193: u1,
    +            ///  b194
    +            b194: u1,
    +            ///  b195
    +            b195: u1,
    +            ///  b196
    +            b196: u1,
    +            ///  b197
    +            b197: u1,
    +            ///  b198
    +            b198: u1,
    +            ///  b199
    +            b199: u1,
    +            ///  b200
    +            b200: u1,
    +            ///  b201
    +            b201: u1,
    +            ///  b202
    +            b202: u1,
    +            ///  b203
    +            b203: u1,
    +            ///  b204
    +            b204: u1,
    +            ///  b205
    +            b205: u1,
    +            ///  b206
    +            b206: u1,
    +            ///  b207
    +            b207: u1,
    +            ///  b208
    +            b208: u1,
    +            ///  b209
    +            b209: u1,
    +            ///  b210
    +            b210: u1,
    +            ///  b211
    +            b211: u1,
    +            ///  b212
    +            b212: u1,
    +            ///  b213
    +            b213: u1,
    +            ///  b214
    +            b214: u1,
    +            ///  b215
    +            b215: u1,
    +            ///  b216
    +            b216: u1,
    +            ///  b217
    +            b217: u1,
    +            ///  b218
    +            b218: u1,
    +            ///  b219
    +            b219: u1,
    +            ///  b220
    +            b220: u1,
    +            ///  b221
    +            b221: u1,
    +            ///  b222
    +            b222: u1,
    +            ///  b223
    +            b223: u1,
    +        }),
    +        ///  key registers
    +        K1LR: mmio.Mmio(packed struct(u32) {
    +            ///  b160
    +            b160: u1,
    +            ///  b161
    +            b161: u1,
    +            ///  b162
    +            b162: u1,
    +            ///  b163
    +            b163: u1,
    +            ///  b164
    +            b164: u1,
    +            ///  b165
    +            b165: u1,
    +            ///  b166
    +            b166: u1,
    +            ///  b167
    +            b167: u1,
    +            ///  b168
    +            b168: u1,
    +            ///  b169
    +            b169: u1,
    +            ///  b170
    +            b170: u1,
    +            ///  b171
    +            b171: u1,
    +            ///  b172
    +            b172: u1,
    +            ///  b173
    +            b173: u1,
    +            ///  b174
    +            b174: u1,
    +            ///  b175
    +            b175: u1,
    +            ///  b176
    +            b176: u1,
    +            ///  b177
    +            b177: u1,
    +            ///  b178
    +            b178: u1,
    +            ///  b179
    +            b179: u1,
    +            ///  b180
    +            b180: u1,
    +            ///  b181
    +            b181: u1,
    +            ///  b182
    +            b182: u1,
    +            ///  b183
    +            b183: u1,
    +            ///  b184
    +            b184: u1,
    +            ///  b185
    +            b185: u1,
    +            ///  b186
    +            b186: u1,
    +            ///  b187
    +            b187: u1,
    +            ///  b188
    +            b188: u1,
    +            ///  b189
    +            b189: u1,
    +            ///  b190
    +            b190: u1,
    +            ///  b191
    +            b191: u1,
    +        }),
    +        ///  key registers
    +        K1RR: mmio.Mmio(packed struct(u32) {
    +            ///  b128
    +            b128: u1,
    +            ///  b129
    +            b129: u1,
    +            ///  b130
    +            b130: u1,
    +            ///  b131
    +            b131: u1,
    +            ///  b132
    +            b132: u1,
    +            ///  b133
    +            b133: u1,
    +            ///  b134
    +            b134: u1,
    +            ///  b135
    +            b135: u1,
    +            ///  b136
    +            b136: u1,
    +            ///  b137
    +            b137: u1,
    +            ///  b138
    +            b138: u1,
    +            ///  b139
    +            b139: u1,
    +            ///  b140
    +            b140: u1,
    +            ///  b141
    +            b141: u1,
    +            ///  b142
    +            b142: u1,
    +            ///  b143
    +            b143: u1,
    +            ///  b144
    +            b144: u1,
    +            ///  b145
    +            b145: u1,
    +            ///  b146
    +            b146: u1,
    +            ///  b147
    +            b147: u1,
    +            ///  b148
    +            b148: u1,
    +            ///  b149
    +            b149: u1,
    +            ///  b150
    +            b150: u1,
    +            ///  b151
    +            b151: u1,
    +            ///  b152
    +            b152: u1,
    +            ///  b153
    +            b153: u1,
    +            ///  b154
    +            b154: u1,
    +            ///  b155
    +            b155: u1,
    +            ///  b156
    +            b156: u1,
    +            ///  b157
    +            b157: u1,
    +            ///  b158
    +            b158: u1,
    +            ///  b159
    +            b159: u1,
    +        }),
    +        ///  key registers
    +        K2LR: mmio.Mmio(packed struct(u32) {
    +            ///  b96
    +            b96: u1,
    +            ///  b97
    +            b97: u1,
    +            ///  b98
    +            b98: u1,
    +            ///  b99
    +            b99: u1,
    +            ///  b100
    +            b100: u1,
    +            ///  b101
    +            b101: u1,
    +            ///  b102
    +            b102: u1,
    +            ///  b103
    +            b103: u1,
    +            ///  b104
    +            b104: u1,
    +            ///  b105
    +            b105: u1,
    +            ///  b106
    +            b106: u1,
    +            ///  b107
    +            b107: u1,
    +            ///  b108
    +            b108: u1,
    +            ///  b109
    +            b109: u1,
    +            ///  b110
    +            b110: u1,
    +            ///  b111
    +            b111: u1,
    +            ///  b112
    +            b112: u1,
    +            ///  b113
    +            b113: u1,
    +            ///  b114
    +            b114: u1,
    +            ///  b115
    +            b115: u1,
    +            ///  b116
    +            b116: u1,
    +            ///  b117
    +            b117: u1,
    +            ///  b118
    +            b118: u1,
    +            ///  b119
    +            b119: u1,
    +            ///  b120
    +            b120: u1,
    +            ///  b121
    +            b121: u1,
    +            ///  b122
    +            b122: u1,
    +            ///  b123
    +            b123: u1,
    +            ///  b124
    +            b124: u1,
    +            ///  b125
    +            b125: u1,
    +            ///  b126
    +            b126: u1,
    +            ///  b127
    +            b127: u1,
    +        }),
    +        ///  key registers
    +        K2RR: mmio.Mmio(packed struct(u32) {
    +            ///  b64
    +            b64: u1,
    +            ///  b65
    +            b65: u1,
    +            ///  b66
    +            b66: u1,
    +            ///  b67
    +            b67: u1,
    +            ///  b68
    +            b68: u1,
    +            ///  b69
    +            b69: u1,
    +            ///  b70
    +            b70: u1,
    +            ///  b71
    +            b71: u1,
    +            ///  b72
    +            b72: u1,
    +            ///  b73
    +            b73: u1,
    +            ///  b74
    +            b74: u1,
    +            ///  b75
    +            b75: u1,
    +            ///  b76
    +            b76: u1,
    +            ///  b77
    +            b77: u1,
    +            ///  b78
    +            b78: u1,
    +            ///  b79
    +            b79: u1,
    +            ///  b80
    +            b80: u1,
    +            ///  b81
    +            b81: u1,
    +            ///  b82
    +            b82: u1,
    +            ///  b83
    +            b83: u1,
    +            ///  b84
    +            b84: u1,
    +            ///  b85
    +            b85: u1,
    +            ///  b86
    +            b86: u1,
    +            ///  b87
    +            b87: u1,
    +            ///  b88
    +            b88: u1,
    +            ///  b89
    +            b89: u1,
    +            ///  b90
    +            b90: u1,
    +            ///  b91
    +            b91: u1,
    +            ///  b92
    +            b92: u1,
    +            ///  b93
    +            b93: u1,
    +            ///  b94
    +            b94: u1,
    +            ///  b95
    +            b95: u1,
    +        }),
    +        ///  key registers
    +        K3LR: mmio.Mmio(packed struct(u32) {
    +            ///  b32
    +            b32: u1,
    +            ///  b33
    +            b33: u1,
    +            ///  b34
    +            b34: u1,
    +            ///  b35
    +            b35: u1,
    +            ///  b36
    +            b36: u1,
    +            ///  b37
    +            b37: u1,
    +            ///  b38
    +            b38: u1,
    +            ///  b39
    +            b39: u1,
    +            ///  b40
    +            b40: u1,
    +            ///  b41
    +            b41: u1,
    +            ///  b42
    +            b42: u1,
    +            ///  b43
    +            b43: u1,
    +            ///  b44
    +            b44: u1,
    +            ///  b45
    +            b45: u1,
    +            ///  b46
    +            b46: u1,
    +            ///  b47
    +            b47: u1,
    +            ///  b48
    +            b48: u1,
    +            ///  b49
    +            b49: u1,
    +            ///  b50
    +            b50: u1,
    +            ///  b51
    +            b51: u1,
    +            ///  b52
    +            b52: u1,
    +            ///  b53
    +            b53: u1,
    +            ///  b54
    +            b54: u1,
    +            ///  b55
    +            b55: u1,
    +            ///  b56
    +            b56: u1,
    +            ///  b57
    +            b57: u1,
    +            ///  b58
    +            b58: u1,
    +            ///  b59
    +            b59: u1,
    +            ///  b60
    +            b60: u1,
    +            ///  b61
    +            b61: u1,
    +            ///  b62
    +            b62: u1,
    +            ///  b63
    +            b63: u1,
    +        }),
    +        ///  key registers
    +        K3RR: mmio.Mmio(packed struct(u32) {
    +            ///  b0
    +            b0: u1,
    +            ///  b1
    +            b1: u1,
    +            ///  b2
    +            b2: u1,
    +            ///  b3
    +            b3: u1,
    +            ///  b4
    +            b4: u1,
    +            ///  b5
    +            b5: u1,
    +            ///  b6
    +            b6: u1,
    +            ///  b7
    +            b7: u1,
    +            ///  b8
    +            b8: u1,
    +            ///  b9
    +            b9: u1,
    +            ///  b10
    +            b10: u1,
    +            ///  b11
    +            b11: u1,
    +            ///  b12
    +            b12: u1,
    +            ///  b13
    +            b13: u1,
    +            ///  b14
    +            b14: u1,
    +            ///  b15
    +            b15: u1,
    +            ///  b16
    +            b16: u1,
    +            ///  b17
    +            b17: u1,
    +            ///  b18
    +            b18: u1,
    +            ///  b19
    +            b19: u1,
    +            ///  b20
    +            b20: u1,
    +            ///  b21
    +            b21: u1,
    +            ///  b22
    +            b22: u1,
    +            ///  b23
    +            b23: u1,
    +            ///  b24
    +            b24: u1,
    +            ///  b25
    +            b25: u1,
    +            ///  b26
    +            b26: u1,
    +            ///  b27
    +            b27: u1,
    +            ///  b28
    +            b28: u1,
    +            ///  b29
    +            b29: u1,
    +            ///  b30
    +            b30: u1,
    +            ///  b31
    +            b31: u1,
    +        }),
    +        ///  initialization vector registers
    +        IV0LR: mmio.Mmio(packed struct(u32) {
    +            ///  IV31
    +            IV31: u1,
    +            ///  IV30
    +            IV30: u1,
    +            ///  IV29
    +            IV29: u1,
    +            ///  IV28
    +            IV28: u1,
    +            ///  IV27
    +            IV27: u1,
    +            ///  IV26
    +            IV26: u1,
    +            ///  IV25
    +            IV25: u1,
    +            ///  IV24
    +            IV24: u1,
    +            ///  IV23
    +            IV23: u1,
    +            ///  IV22
    +            IV22: u1,
    +            ///  IV21
    +            IV21: u1,
    +            ///  IV20
    +            IV20: u1,
    +            ///  IV19
    +            IV19: u1,
    +            ///  IV18
    +            IV18: u1,
    +            ///  IV17
    +            IV17: u1,
    +            ///  IV16
    +            IV16: u1,
    +            ///  IV15
    +            IV15: u1,
    +            ///  IV14
    +            IV14: u1,
    +            ///  IV13
    +            IV13: u1,
    +            ///  IV12
    +            IV12: u1,
    +            ///  IV11
    +            IV11: u1,
    +            ///  IV10
    +            IV10: u1,
    +            ///  IV9
    +            IV9: u1,
    +            ///  IV8
    +            IV8: u1,
    +            ///  IV7
    +            IV7: u1,
    +            ///  IV6
    +            IV6: u1,
    +            ///  IV5
    +            IV5: u1,
    +            ///  IV4
    +            IV4: u1,
    +            ///  IV3
    +            IV3: u1,
    +            ///  IV2
    +            IV2: u1,
    +            ///  IV1
    +            IV1: u1,
    +            ///  IV0
    +            IV0: u1,
    +        }),
    +        ///  initialization vector registers
    +        IV0RR: mmio.Mmio(packed struct(u32) {
    +            ///  IV63
    +            IV63: u1,
    +            ///  IV62
    +            IV62: u1,
    +            ///  IV61
    +            IV61: u1,
    +            ///  IV60
    +            IV60: u1,
    +            ///  IV59
    +            IV59: u1,
    +            ///  IV58
    +            IV58: u1,
    +            ///  IV57
    +            IV57: u1,
    +            ///  IV56
    +            IV56: u1,
    +            ///  IV55
    +            IV55: u1,
    +            ///  IV54
    +            IV54: u1,
    +            ///  IV53
    +            IV53: u1,
    +            ///  IV52
    +            IV52: u1,
    +            ///  IV51
    +            IV51: u1,
    +            ///  IV50
    +            IV50: u1,
    +            ///  IV49
    +            IV49: u1,
    +            ///  IV48
    +            IV48: u1,
    +            ///  IV47
    +            IV47: u1,
    +            ///  IV46
    +            IV46: u1,
    +            ///  IV45
    +            IV45: u1,
    +            ///  IV44
    +            IV44: u1,
    +            ///  IV43
    +            IV43: u1,
    +            ///  IV42
    +            IV42: u1,
    +            ///  IV41
    +            IV41: u1,
    +            ///  IV40
    +            IV40: u1,
    +            ///  IV39
    +            IV39: u1,
    +            ///  IV38
    +            IV38: u1,
    +            ///  IV37
    +            IV37: u1,
    +            ///  IV36
    +            IV36: u1,
    +            ///  IV35
    +            IV35: u1,
    +            ///  IV34
    +            IV34: u1,
    +            ///  IV33
    +            IV33: u1,
    +            ///  IV32
    +            IV32: u1,
    +        }),
    +        ///  initialization vector registers
    +        IV1LR: mmio.Mmio(packed struct(u32) {
    +            ///  IV95
    +            IV95: u1,
    +            ///  IV94
    +            IV94: u1,
    +            ///  IV93
    +            IV93: u1,
    +            ///  IV92
    +            IV92: u1,
    +            ///  IV91
    +            IV91: u1,
    +            ///  IV90
    +            IV90: u1,
    +            ///  IV89
    +            IV89: u1,
    +            ///  IV88
    +            IV88: u1,
    +            ///  IV87
    +            IV87: u1,
    +            ///  IV86
    +            IV86: u1,
    +            ///  IV85
    +            IV85: u1,
    +            ///  IV84
    +            IV84: u1,
    +            ///  IV83
    +            IV83: u1,
    +            ///  IV82
    +            IV82: u1,
    +            ///  IV81
    +            IV81: u1,
    +            ///  IV80
    +            IV80: u1,
    +            ///  IV79
    +            IV79: u1,
    +            ///  IV78
    +            IV78: u1,
    +            ///  IV77
    +            IV77: u1,
    +            ///  IV76
    +            IV76: u1,
    +            ///  IV75
    +            IV75: u1,
    +            ///  IV74
    +            IV74: u1,
    +            ///  IV73
    +            IV73: u1,
    +            ///  IV72
    +            IV72: u1,
    +            ///  IV71
    +            IV71: u1,
    +            ///  IV70
    +            IV70: u1,
    +            ///  IV69
    +            IV69: u1,
    +            ///  IV68
    +            IV68: u1,
    +            ///  IV67
    +            IV67: u1,
    +            ///  IV66
    +            IV66: u1,
    +            ///  IV65
    +            IV65: u1,
    +            ///  IV64
    +            IV64: u1,
    +        }),
    +        ///  initialization vector registers
    +        IV1RR: mmio.Mmio(packed struct(u32) {
    +            ///  IV127
    +            IV127: u1,
    +            ///  IV126
    +            IV126: u1,
    +            ///  IV125
    +            IV125: u1,
    +            ///  IV124
    +            IV124: u1,
    +            ///  IV123
    +            IV123: u1,
    +            ///  IV122
    +            IV122: u1,
    +            ///  IV121
    +            IV121: u1,
    +            ///  IV120
    +            IV120: u1,
    +            ///  IV119
    +            IV119: u1,
    +            ///  IV118
    +            IV118: u1,
    +            ///  IV117
    +            IV117: u1,
    +            ///  IV116
    +            IV116: u1,
    +            ///  IV115
    +            IV115: u1,
    +            ///  IV114
    +            IV114: u1,
    +            ///  IV113
    +            IV113: u1,
    +            ///  IV112
    +            IV112: u1,
    +            ///  IV111
    +            IV111: u1,
    +            ///  IV110
    +            IV110: u1,
    +            ///  IV109
    +            IV109: u1,
    +            ///  IV108
    +            IV108: u1,
    +            ///  IV107
    +            IV107: u1,
    +            ///  IV106
    +            IV106: u1,
    +            ///  IV105
    +            IV105: u1,
    +            ///  IV104
    +            IV104: u1,
    +            ///  IV103
    +            IV103: u1,
    +            ///  IV102
    +            IV102: u1,
    +            ///  IV101
    +            IV101: u1,
    +            ///  IV100
    +            IV100: u1,
    +            ///  IV99
    +            IV99: u1,
    +            ///  IV98
    +            IV98: u1,
    +            ///  IV97
    +            IV97: u1,
    +            ///  IV96
    +            IV96: u1,
    +        }),
    +        ///  context swap register
    +        CSGCMCCM0R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCMCCM0R
    +            CSGCMCCM0R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCMCCM1R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCMCCM1R
    +            CSGCMCCM1R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCMCCM2R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCMCCM2R
    +            CSGCMCCM2R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCMCCM3R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCMCCM3R
    +            CSGCMCCM3R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCMCCM4R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCMCCM4R
    +            CSGCMCCM4R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCMCCM5R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCMCCM5R
    +            CSGCMCCM5R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCMCCM6R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCMCCM6R
    +            CSGCMCCM6R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCMCCM7R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCMCCM7R
    +            CSGCMCCM7R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCM0R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCM0R
    +            CSGCM0R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCM1R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCM1R
    +            CSGCM1R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCM2R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCM2R
    +            CSGCM2R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCM3R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCM3R
    +            CSGCM3R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCM4R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCM4R
    +            CSGCM4R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCM5R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCM5R
    +            CSGCM5R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCM6R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCM6R
    +            CSGCM6R: u32,
    +        }),
    +        ///  context swap register
    +        CSGCM7R: mmio.Mmio(packed struct(u32) {
    +            ///  CSGCM7R
    +            CSGCM7R: u32,
    +        }),
    +    };
    +
    +    ///  Digital camera interface
    +    pub const DCMI = extern struct {
    +        ///  control register 1
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  Capture enable
    +            CAPTURE: u1,
    +            ///  Capture mode
    +            CM: u1,
    +            ///  Crop feature
    +            CROP: u1,
    +            ///  JPEG format
    +            JPEG: u1,
    +            ///  Embedded synchronization select
    +            ESS: u1,
    +            ///  Pixel clock polarity
    +            PCKPOL: u1,
    +            ///  Horizontal synchronization polarity
    +            HSPOL: u1,
    +            ///  Vertical synchronization polarity
    +            VSPOL: u1,
    +            ///  Frame capture rate control
    +            FCRC: u2,
    +            ///  Extended data mode
    +            EDM: u2,
    +            reserved14: u2,
    +            ///  DCMI enable
    +            ENABLE: u1,
    +            padding: u17,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  HSYNC
    +            HSYNC: u1,
    +            ///  VSYNC
    +            VSYNC: u1,
    +            ///  FIFO not empty
    +            FNE: u1,
    +            padding: u29,
    +        }),
    +        ///  raw interrupt status register
    +        RIS: mmio.Mmio(packed struct(u32) {
    +            ///  Capture complete raw interrupt status
    +            FRAME_RIS: u1,
    +            ///  Overrun raw interrupt status
    +            OVR_RIS: u1,
    +            ///  Synchronization error raw interrupt status
    +            ERR_RIS: u1,
    +            ///  VSYNC raw interrupt status
    +            VSYNC_RIS: u1,
    +            ///  Line raw interrupt status
    +            LINE_RIS: u1,
    +            padding: u27,
    +        }),
    +        ///  interrupt enable register
    +        IER: mmio.Mmio(packed struct(u32) {
    +            ///  Capture complete interrupt enable
    +            FRAME_IE: u1,
    +            ///  Overrun interrupt enable
    +            OVR_IE: u1,
    +            ///  Synchronization error interrupt enable
    +            ERR_IE: u1,
    +            ///  VSYNC interrupt enable
    +            VSYNC_IE: u1,
    +            ///  Line interrupt enable
    +            LINE_IE: u1,
    +            padding: u27,
    +        }),
    +        ///  masked interrupt status register
    +        MIS: mmio.Mmio(packed struct(u32) {
    +            ///  Capture complete masked interrupt status
    +            FRAME_MIS: u1,
    +            ///  Overrun masked interrupt status
    +            OVR_MIS: u1,
    +            ///  Synchronization error masked interrupt status
    +            ERR_MIS: u1,
    +            ///  VSYNC masked interrupt status
    +            VSYNC_MIS: u1,
    +            ///  Line masked interrupt status
    +            LINE_MIS: u1,
    +            padding: u27,
    +        }),
    +        ///  interrupt clear register
    +        ICR: mmio.Mmio(packed struct(u32) {
    +            ///  Capture complete interrupt status clear
    +            FRAME_ISC: u1,
    +            ///  Overrun interrupt status clear
    +            OVR_ISC: u1,
    +            ///  Synchronization error interrupt status clear
    +            ERR_ISC: u1,
    +            ///  Vertical synch interrupt status clear
    +            VSYNC_ISC: u1,
    +            ///  line interrupt status clear
    +            LINE_ISC: u1,
    +            padding: u27,
    +        }),
    +        ///  embedded synchronization code register
    +        ESCR: mmio.Mmio(packed struct(u32) {
    +            ///  Frame start delimiter code
    +            FSC: u8,
    +            ///  Line start delimiter code
    +            LSC: u8,
    +            ///  Line end delimiter code
    +            LEC: u8,
    +            ///  Frame end delimiter code
    +            FEC: u8,
    +        }),
    +        ///  embedded synchronization unmask register
    +        ESUR: mmio.Mmio(packed struct(u32) {
    +            ///  Frame start delimiter unmask
    +            FSU: u8,
    +            ///  Line start delimiter unmask
    +            LSU: u8,
    +            ///  Line end delimiter unmask
    +            LEU: u8,
    +            ///  Frame end delimiter unmask
    +            FEU: u8,
    +        }),
    +        ///  crop window start
    +        CWSTRT: mmio.Mmio(packed struct(u32) {
    +            ///  Horizontal offset count
    +            HOFFCNT: u14,
    +            reserved16: u2,
    +            ///  Vertical start line count
    +            VST: u13,
    +            padding: u3,
    +        }),
    +        ///  crop window size
    +        CWSIZE: mmio.Mmio(packed struct(u32) {
    +            ///  Capture count
    +            CAPCNT: u14,
    +            reserved16: u2,
    +            ///  Vertical line count
    +            VLINE: u14,
    +            padding: u2,
    +        }),
    +        ///  data register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  Data byte 0
    +            Byte0: u8,
    +            ///  Data byte 1
    +            Byte1: u8,
    +            ///  Data byte 2
    +            Byte2: u8,
    +            ///  Data byte 3
    +            Byte3: u8,
    +        }),
    +    };
    +
    +    ///  Flexible memory controller
    +    pub const FMC = extern struct {
    +        ///  SRAM/NOR-Flash chip-select control register 1
    +        BCR1: mmio.Mmio(packed struct(u32) {
    +            ///  MBKEN
    +            MBKEN: u1,
    +            ///  MUXEN
    +            MUXEN: u1,
    +            ///  MTYP
    +            MTYP: u2,
    +            ///  MWID
    +            MWID: u2,
    +            ///  FACCEN
    +            FACCEN: u1,
    +            reserved8: u1,
    +            ///  BURSTEN
    +            BURSTEN: u1,
    +            ///  WAITPOL
    +            WAITPOL: u1,
    +            reserved11: u1,
    +            ///  WAITCFG
    +            WAITCFG: u1,
    +            ///  WREN
    +            WREN: u1,
    +            ///  WAITEN
    +            WAITEN: u1,
    +            ///  EXTMOD
    +            EXTMOD: u1,
    +            ///  ASYNCWAIT
    +            ASYNCWAIT: u1,
    +            reserved19: u3,
    +            ///  CBURSTRW
    +            CBURSTRW: u1,
    +            ///  CCLKEN
    +            CCLKEN: u1,
    +            padding: u11,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select timing register 1
    +        BTR1: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            ///  BUSTURN
    +            BUSTURN: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select control register 2
    +        BCR2: mmio.Mmio(packed struct(u32) {
    +            ///  MBKEN
    +            MBKEN: u1,
    +            ///  MUXEN
    +            MUXEN: u1,
    +            ///  MTYP
    +            MTYP: u2,
    +            ///  MWID
    +            MWID: u2,
    +            ///  FACCEN
    +            FACCEN: u1,
    +            reserved8: u1,
    +            ///  BURSTEN
    +            BURSTEN: u1,
    +            ///  WAITPOL
    +            WAITPOL: u1,
    +            ///  WRAPMOD
    +            WRAPMOD: u1,
    +            ///  WAITCFG
    +            WAITCFG: u1,
    +            ///  WREN
    +            WREN: u1,
    +            ///  WAITEN
    +            WAITEN: u1,
    +            ///  EXTMOD
    +            EXTMOD: u1,
    +            ///  ASYNCWAIT
    +            ASYNCWAIT: u1,
    +            reserved19: u3,
    +            ///  CBURSTRW
    +            CBURSTRW: u1,
    +            padding: u12,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select timing register 2
    +        BTR2: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            ///  BUSTURN
    +            BUSTURN: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select control register 3
    +        BCR3: mmio.Mmio(packed struct(u32) {
    +            ///  MBKEN
    +            MBKEN: u1,
    +            ///  MUXEN
    +            MUXEN: u1,
    +            ///  MTYP
    +            MTYP: u2,
    +            ///  MWID
    +            MWID: u2,
    +            ///  FACCEN
    +            FACCEN: u1,
    +            reserved8: u1,
    +            ///  BURSTEN
    +            BURSTEN: u1,
    +            ///  WAITPOL
    +            WAITPOL: u1,
    +            ///  WRAPMOD
    +            WRAPMOD: u1,
    +            ///  WAITCFG
    +            WAITCFG: u1,
    +            ///  WREN
    +            WREN: u1,
    +            ///  WAITEN
    +            WAITEN: u1,
    +            ///  EXTMOD
    +            EXTMOD: u1,
    +            ///  ASYNCWAIT
    +            ASYNCWAIT: u1,
    +            reserved19: u3,
    +            ///  CBURSTRW
    +            CBURSTRW: u1,
    +            padding: u12,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select timing register 3
    +        BTR3: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            ///  BUSTURN
    +            BUSTURN: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select control register 4
    +        BCR4: mmio.Mmio(packed struct(u32) {
    +            ///  MBKEN
    +            MBKEN: u1,
    +            ///  MUXEN
    +            MUXEN: u1,
    +            ///  MTYP
    +            MTYP: u2,
    +            ///  MWID
    +            MWID: u2,
    +            ///  FACCEN
    +            FACCEN: u1,
    +            reserved8: u1,
    +            ///  BURSTEN
    +            BURSTEN: u1,
    +            ///  WAITPOL
    +            WAITPOL: u1,
    +            ///  WRAPMOD
    +            WRAPMOD: u1,
    +            ///  WAITCFG
    +            WAITCFG: u1,
    +            ///  WREN
    +            WREN: u1,
    +            ///  WAITEN
    +            WAITEN: u1,
    +            ///  EXTMOD
    +            EXTMOD: u1,
    +            ///  ASYNCWAIT
    +            ASYNCWAIT: u1,
    +            reserved19: u3,
    +            ///  CBURSTRW
    +            CBURSTRW: u1,
    +            padding: u12,
    +        }),
    +        ///  SRAM/NOR-Flash chip-select timing register 4
    +        BTR4: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            ///  BUSTURN
    +            BUSTURN: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +        reserved96: [64]u8,
    +        ///  PC Card/NAND Flash control register 2
    +        PCR2: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  PWAITEN
    +            PWAITEN: u1,
    +            ///  PBKEN
    +            PBKEN: u1,
    +            ///  PTYP
    +            PTYP: u1,
    +            ///  PWID
    +            PWID: u2,
    +            ///  ECCEN
    +            ECCEN: u1,
    +            reserved9: u2,
    +            ///  TCLR
    +            TCLR: u4,
    +            ///  TAR
    +            TAR: u4,
    +            ///  ECCPS
    +            ECCPS: u3,
    +            padding: u12,
    +        }),
    +        ///  FIFO status and interrupt register 2
    +        SR2: mmio.Mmio(packed struct(u32) {
    +            ///  IRS
    +            IRS: u1,
    +            ///  ILS
    +            ILS: u1,
    +            ///  IFS
    +            IFS: u1,
    +            ///  IREN
    +            IREN: u1,
    +            ///  ILEN
    +            ILEN: u1,
    +            ///  IFEN
    +            IFEN: u1,
    +            ///  FEMPT
    +            FEMPT: u1,
    +            padding: u25,
    +        }),
    +        ///  Common memory space timing register 2
    +        PMEM2: mmio.Mmio(packed struct(u32) {
    +            ///  MEMSETx
    +            MEMSETx: u8,
    +            ///  MEMWAITx
    +            MEMWAITx: u8,
    +            ///  MEMHOLDx
    +            MEMHOLDx: u8,
    +            ///  MEMHIZx
    +            MEMHIZx: u8,
    +        }),
    +        ///  Attribute memory space timing register 2
    +        PATT2: mmio.Mmio(packed struct(u32) {
    +            ///  ATTSETx
    +            ATTSETx: u8,
    +            ///  ATTWAITx
    +            ATTWAITx: u8,
    +            ///  ATTHOLDx
    +            ATTHOLDx: u8,
    +            ///  ATTHIZx
    +            ATTHIZx: u8,
    +        }),
    +        reserved116: [4]u8,
    +        ///  ECC result register 2
    +        ECCR2: mmio.Mmio(packed struct(u32) {
    +            ///  ECCx
    +            ECCx: u32,
    +        }),
    +        reserved128: [8]u8,
    +        ///  PC Card/NAND Flash control register 3
    +        PCR3: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  PWAITEN
    +            PWAITEN: u1,
    +            ///  PBKEN
    +            PBKEN: u1,
    +            ///  PTYP
    +            PTYP: u1,
    +            ///  PWID
    +            PWID: u2,
    +            ///  ECCEN
    +            ECCEN: u1,
    +            reserved9: u2,
    +            ///  TCLR
    +            TCLR: u4,
    +            ///  TAR
    +            TAR: u4,
    +            ///  ECCPS
    +            ECCPS: u3,
    +            padding: u12,
    +        }),
    +        ///  FIFO status and interrupt register 3
    +        SR3: mmio.Mmio(packed struct(u32) {
    +            ///  IRS
    +            IRS: u1,
    +            ///  ILS
    +            ILS: u1,
    +            ///  IFS
    +            IFS: u1,
    +            ///  IREN
    +            IREN: u1,
    +            ///  ILEN
    +            ILEN: u1,
    +            ///  IFEN
    +            IFEN: u1,
    +            ///  FEMPT
    +            FEMPT: u1,
    +            padding: u25,
    +        }),
    +        ///  Common memory space timing register 3
    +        PMEM3: mmio.Mmio(packed struct(u32) {
    +            ///  MEMSETx
    +            MEMSETx: u8,
    +            ///  MEMWAITx
    +            MEMWAITx: u8,
    +            ///  MEMHOLDx
    +            MEMHOLDx: u8,
    +            ///  MEMHIZx
    +            MEMHIZx: u8,
    +        }),
    +        ///  Attribute memory space timing register 3
    +        PATT3: mmio.Mmio(packed struct(u32) {
    +            ///  ATTSETx
    +            ATTSETx: u8,
    +            ///  ATTWAITx
    +            ATTWAITx: u8,
    +            ///  ATTHOLDx
    +            ATTHOLDx: u8,
    +            ///  ATTHIZx
    +            ATTHIZx: u8,
    +        }),
    +        reserved148: [4]u8,
    +        ///  ECC result register 3
    +        ECCR3: mmio.Mmio(packed struct(u32) {
    +            ///  ECCx
    +            ECCx: u32,
    +        }),
    +        reserved160: [8]u8,
    +        ///  PC Card/NAND Flash control register 4
    +        PCR4: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  PWAITEN
    +            PWAITEN: u1,
    +            ///  PBKEN
    +            PBKEN: u1,
    +            ///  PTYP
    +            PTYP: u1,
    +            ///  PWID
    +            PWID: u2,
    +            ///  ECCEN
    +            ECCEN: u1,
    +            reserved9: u2,
    +            ///  TCLR
    +            TCLR: u4,
    +            ///  TAR
    +            TAR: u4,
    +            ///  ECCPS
    +            ECCPS: u3,
    +            padding: u12,
    +        }),
    +        ///  FIFO status and interrupt register 4
    +        SR4: mmio.Mmio(packed struct(u32) {
    +            ///  IRS
    +            IRS: u1,
    +            ///  ILS
    +            ILS: u1,
    +            ///  IFS
    +            IFS: u1,
    +            ///  IREN
    +            IREN: u1,
    +            ///  ILEN
    +            ILEN: u1,
    +            ///  IFEN
    +            IFEN: u1,
    +            ///  FEMPT
    +            FEMPT: u1,
    +            padding: u25,
    +        }),
    +        ///  Common memory space timing register 4
    +        PMEM4: mmio.Mmio(packed struct(u32) {
    +            ///  MEMSETx
    +            MEMSETx: u8,
    +            ///  MEMWAITx
    +            MEMWAITx: u8,
    +            ///  MEMHOLDx
    +            MEMHOLDx: u8,
    +            ///  MEMHIZx
    +            MEMHIZx: u8,
    +        }),
    +        ///  Attribute memory space timing register 4
    +        PATT4: mmio.Mmio(packed struct(u32) {
    +            ///  ATTSETx
    +            ATTSETx: u8,
    +            ///  ATTWAITx
    +            ATTWAITx: u8,
    +            ///  ATTHOLDx
    +            ATTHOLDx: u8,
    +            ///  ATTHIZx
    +            ATTHIZx: u8,
    +        }),
    +        ///  I/O space timing register 4
    +        PIO4: mmio.Mmio(packed struct(u32) {
    +            ///  IOSETx
    +            IOSETx: u8,
    +            ///  IOWAITx
    +            IOWAITx: u8,
    +            ///  IOHOLDx
    +            IOHOLDx: u8,
    +            ///  IOHIZx
    +            IOHIZx: u8,
    +        }),
    +        reserved260: [80]u8,
    +        ///  SRAM/NOR-Flash write timing registers 1
    +        BWTR1: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            reserved20: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +        reserved268: [4]u8,
    +        ///  SRAM/NOR-Flash write timing registers 2
    +        BWTR2: mmio.Mmio(packed struct(u32) {
    +            ///  ADDSET
    +            ADDSET: u4,
    +            ///  ADDHLD
    +            ADDHLD: u4,
    +            ///  DATAST
    +            DATAST: u8,
    +            reserved20: u4,
    +            ///  CLKDIV
    +            CLKDIV: u4,
    +            ///  DATLAT
    +            DATLAT: u4,
    +            ///  ACCMOD
    +            ACCMOD: u2,
    +            padding: u2,
    +        }),
    +        reserved320: [48]u8,
    +        ///  SDRAM Control Register 1
    +        SDCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Number of column address bits
    +            NC: u2,
    +            ///  Number of row address bits
    +            NR: u2,
    +            ///  Memory data bus width
    +            MWID: u2,
    +            ///  Number of internal banks
    +            NB: u1,
    +            ///  CAS latency
    +            CAS: u2,
    +            ///  Write protection
    +            WP: u1,
    +            ///  SDRAM clock configuration
    +            SDCLK: u2,
    +            ///  Burst read
    +            RBURST: u1,
    +            ///  Read pipe
    +            RPIPE: u2,
    +            padding: u17,
    +        }),
    +        ///  SDRAM Control Register 2
    +        SDCR2: mmio.Mmio(packed struct(u32) {
    +            ///  Number of column address bits
    +            NC: u2,
    +            ///  Number of row address bits
    +            NR: u2,
    +            ///  Memory data bus width
    +            MWID: u2,
    +            ///  Number of internal banks
    +            NB: u1,
    +            ///  CAS latency
    +            CAS: u2,
    +            ///  Write protection
    +            WP: u1,
    +            ///  SDRAM clock configuration
    +            SDCLK: u2,
    +            ///  Burst read
    +            RBURST: u1,
    +            ///  Read pipe
    +            RPIPE: u2,
    +            padding: u17,
    +        }),
    +        ///  SDRAM Timing register 1
    +        SDTR1: mmio.Mmio(packed struct(u32) {
    +            ///  Load Mode Register to Active
    +            TMRD: u4,
    +            ///  Exit self-refresh delay
    +            TXSR: u4,
    +            ///  Self refresh time
    +            TRAS: u4,
    +            ///  Row cycle delay
    +            TRC: u4,
    +            ///  Recovery delay
    +            TWR: u4,
    +            ///  Row precharge delay
    +            TRP: u4,
    +            ///  Row to column delay
    +            TRCD: u4,
    +            padding: u4,
    +        }),
    +        ///  SDRAM Timing register 2
    +        SDTR2: mmio.Mmio(packed struct(u32) {
    +            ///  Load Mode Register to Active
    +            TMRD: u4,
    +            ///  Exit self-refresh delay
    +            TXSR: u4,
    +            ///  Self refresh time
    +            TRAS: u4,
    +            ///  Row cycle delay
    +            TRC: u4,
    +            ///  Recovery delay
    +            TWR: u4,
    +            ///  Row precharge delay
    +            TRP: u4,
    +            ///  Row to column delay
    +            TRCD: u4,
    +            padding: u4,
    +        }),
    +        ///  SDRAM Command Mode register
    +        SDCMR: mmio.Mmio(packed struct(u32) {
    +            ///  Command mode
    +            MODE: u3,
    +            ///  Command target bank 2
    +            CTB2: u1,
    +            ///  Command target bank 1
    +            CTB1: u1,
    +            ///  Number of Auto-refresh
    +            NRFS: u4,
    +            ///  Mode Register definition
    +            MRD: u13,
    +            padding: u10,
    +        }),
    +        ///  SDRAM Refresh Timer register
    +        SDRTR: mmio.Mmio(packed struct(u32) {
    +            ///  Clear Refresh error flag
    +            CRE: u1,
    +            ///  Refresh Timer Count
    +            COUNT: u13,
    +            ///  RES Interrupt Enable
    +            REIE: u1,
    +            padding: u17,
    +        }),
    +        ///  SDRAM Status register
    +        SDSR: mmio.Mmio(packed struct(u32) {
    +            ///  Refresh error flag
    +            RE: u1,
    +            ///  Status Mode for Bank 1
    +            MODES1: u2,
    +            ///  Status Mode for Bank 2
    +            MODES2: u2,
    +            ///  Busy status
    +            BUSY: u1,
    +            padding: u26,
    +        }),
    +    };
    +
    +    ///  Debug support
    +    pub const DBG = extern struct {
    +        ///  IDCODE
    +        DBGMCU_IDCODE: mmio.Mmio(packed struct(u32) {
    +            ///  DEV_ID
    +            DEV_ID: u12,
    +            reserved16: u4,
    +            ///  REV_ID
    +            REV_ID: u16,
    +        }),
    +        ///  Control Register
    +        DBGMCU_CR: mmio.Mmio(packed struct(u32) {
    +            ///  DBG_SLEEP
    +            DBG_SLEEP: u1,
    +            ///  DBG_STOP
    +            DBG_STOP: u1,
    +            ///  DBG_STANDBY
    +            DBG_STANDBY: u1,
    +            reserved5: u2,
    +            ///  TRACE_IOEN
    +            TRACE_IOEN: u1,
    +            ///  TRACE_MODE
    +            TRACE_MODE: u2,
    +            padding: u24,
    +        }),
    +        ///  Debug MCU APB1 Freeze registe
    +        DBGMCU_APB1_FZ: mmio.Mmio(packed struct(u32) {
    +            ///  DBG_TIM2_STOP
    +            DBG_TIM2_STOP: u1,
    +            ///  DBG_TIM3 _STOP
    +            DBG_TIM3_STOP: u1,
    +            ///  DBG_TIM4_STOP
    +            DBG_TIM4_STOP: u1,
    +            ///  DBG_TIM5_STOP
    +            DBG_TIM5_STOP: u1,
    +            ///  DBG_TIM6_STOP
    +            DBG_TIM6_STOP: u1,
    +            ///  DBG_TIM7_STOP
    +            DBG_TIM7_STOP: u1,
    +            ///  DBG_TIM12_STOP
    +            DBG_TIM12_STOP: u1,
    +            ///  DBG_TIM13_STOP
    +            DBG_TIM13_STOP: u1,
    +            ///  DBG_TIM14_STOP
    +            DBG_TIM14_STOP: u1,
    +            reserved11: u2,
    +            ///  DBG_WWDG_STOP
    +            DBG_WWDG_STOP: u1,
    +            ///  DBG_IWDEG_STOP
    +            DBG_IWDEG_STOP: u1,
    +            reserved21: u8,
    +            ///  DBG_J2C1_SMBUS_TIMEOUT
    +            DBG_J2C1_SMBUS_TIMEOUT: u1,
    +            ///  DBG_J2C2_SMBUS_TIMEOUT
    +            DBG_J2C2_SMBUS_TIMEOUT: u1,
    +            ///  DBG_J2C3SMBUS_TIMEOUT
    +            DBG_J2C3SMBUS_TIMEOUT: u1,
    +            reserved25: u1,
    +            ///  DBG_CAN1_STOP
    +            DBG_CAN1_STOP: u1,
    +            ///  DBG_CAN2_STOP
    +            DBG_CAN2_STOP: u1,
    +            padding: u5,
    +        }),
    +        ///  Debug MCU APB2 Freeze registe
    +        DBGMCU_APB2_FZ: mmio.Mmio(packed struct(u32) {
    +            ///  TIM1 counter stopped when core is halted
    +            DBG_TIM1_STOP: u1,
    +            ///  TIM8 counter stopped when core is halted
    +            DBG_TIM8_STOP: u1,
    +            reserved16: u14,
    +            ///  TIM9 counter stopped when core is halted
    +            DBG_TIM9_STOP: u1,
    +            ///  TIM10 counter stopped when core is halted
    +            DBG_TIM10_STOP: u1,
    +            ///  TIM11 counter stopped when core is halted
    +            DBG_TIM11_STOP: u1,
    +            padding: u13,
    +        }),
    +    };
    +
    +    ///  DMA controller
    +    pub const DMA2 = extern struct {
    +        ///  low interrupt status register
    +        LISR: mmio.Mmio(packed struct(u32) {
    +            ///  Stream x FIFO error interrupt flag (x=3..0)
    +            FEIF0: u1,
    +            reserved2: u1,
    +            ///  Stream x direct mode error interrupt flag (x=3..0)
    +            DMEIF0: u1,
    +            ///  Stream x transfer error interrupt flag (x=3..0)
    +            TEIF0: u1,
    +            ///  Stream x half transfer interrupt flag (x=3..0)
    +            HTIF0: u1,
    +            ///  Stream x transfer complete interrupt flag (x = 3..0)
    +            TCIF0: u1,
    +            ///  Stream x FIFO error interrupt flag (x=3..0)
    +            FEIF1: u1,
    +            reserved8: u1,
    +            ///  Stream x direct mode error interrupt flag (x=3..0)
    +            DMEIF1: u1,
    +            ///  Stream x transfer error interrupt flag (x=3..0)
    +            TEIF1: u1,
    +            ///  Stream x half transfer interrupt flag (x=3..0)
    +            HTIF1: u1,
    +            ///  Stream x transfer complete interrupt flag (x = 3..0)
    +            TCIF1: u1,
    +            reserved16: u4,
    +            ///  Stream x FIFO error interrupt flag (x=3..0)
    +            FEIF2: u1,
    +            reserved18: u1,
    +            ///  Stream x direct mode error interrupt flag (x=3..0)
    +            DMEIF2: u1,
    +            ///  Stream x transfer error interrupt flag (x=3..0)
    +            TEIF2: u1,
    +            ///  Stream x half transfer interrupt flag (x=3..0)
    +            HTIF2: u1,
    +            ///  Stream x transfer complete interrupt flag (x = 3..0)
    +            TCIF2: u1,
    +            ///  Stream x FIFO error interrupt flag (x=3..0)
    +            FEIF3: u1,
    +            reserved24: u1,
    +            ///  Stream x direct mode error interrupt flag (x=3..0)
    +            DMEIF3: u1,
    +            ///  Stream x transfer error interrupt flag (x=3..0)
    +            TEIF3: u1,
    +            ///  Stream x half transfer interrupt flag (x=3..0)
    +            HTIF3: u1,
    +            ///  Stream x transfer complete interrupt flag (x = 3..0)
    +            TCIF3: u1,
    +            padding: u4,
    +        }),
    +        ///  high interrupt status register
    +        HISR: mmio.Mmio(packed struct(u32) {
    +            ///  Stream x FIFO error interrupt flag (x=7..4)
    +            FEIF4: u1,
    +            reserved2: u1,
    +            ///  Stream x direct mode error interrupt flag (x=7..4)
    +            DMEIF4: u1,
    +            ///  Stream x transfer error interrupt flag (x=7..4)
    +            TEIF4: u1,
    +            ///  Stream x half transfer interrupt flag (x=7..4)
    +            HTIF4: u1,
    +            ///  Stream x transfer complete interrupt flag (x=7..4)
    +            TCIF4: u1,
    +            ///  Stream x FIFO error interrupt flag (x=7..4)
    +            FEIF5: u1,
    +            reserved8: u1,
    +            ///  Stream x direct mode error interrupt flag (x=7..4)
    +            DMEIF5: u1,
    +            ///  Stream x transfer error interrupt flag (x=7..4)
    +            TEIF5: u1,
    +            ///  Stream x half transfer interrupt flag (x=7..4)
    +            HTIF5: u1,
    +            ///  Stream x transfer complete interrupt flag (x=7..4)
    +            TCIF5: u1,
    +            reserved16: u4,
    +            ///  Stream x FIFO error interrupt flag (x=7..4)
    +            FEIF6: u1,
    +            reserved18: u1,
    +            ///  Stream x direct mode error interrupt flag (x=7..4)
    +            DMEIF6: u1,
    +            ///  Stream x transfer error interrupt flag (x=7..4)
    +            TEIF6: u1,
    +            ///  Stream x half transfer interrupt flag (x=7..4)
    +            HTIF6: u1,
    +            ///  Stream x transfer complete interrupt flag (x=7..4)
    +            TCIF6: u1,
    +            ///  Stream x FIFO error interrupt flag (x=7..4)
    +            FEIF7: u1,
    +            reserved24: u1,
    +            ///  Stream x direct mode error interrupt flag (x=7..4)
    +            DMEIF7: u1,
    +            ///  Stream x transfer error interrupt flag (x=7..4)
    +            TEIF7: u1,
    +            ///  Stream x half transfer interrupt flag (x=7..4)
    +            HTIF7: u1,
    +            ///  Stream x transfer complete interrupt flag (x=7..4)
    +            TCIF7: u1,
    +            padding: u4,
    +        }),
    +        ///  low interrupt flag clear register
    +        LIFCR: mmio.Mmio(packed struct(u32) {
    +            ///  Stream x clear FIFO error interrupt flag (x = 3..0)
    +            CFEIF0: u1,
    +            reserved2: u1,
    +            ///  Stream x clear direct mode error interrupt flag (x = 3..0)
    +            CDMEIF0: u1,
    +            ///  Stream x clear transfer error interrupt flag (x = 3..0)
    +            CTEIF0: u1,
    +            ///  Stream x clear half transfer interrupt flag (x = 3..0)
    +            CHTIF0: u1,
    +            ///  Stream x clear transfer complete interrupt flag (x = 3..0)
    +            CTCIF0: u1,
    +            ///  Stream x clear FIFO error interrupt flag (x = 3..0)
    +            CFEIF1: u1,
    +            reserved8: u1,
    +            ///  Stream x clear direct mode error interrupt flag (x = 3..0)
    +            CDMEIF1: u1,
    +            ///  Stream x clear transfer error interrupt flag (x = 3..0)
    +            CTEIF1: u1,
    +            ///  Stream x clear half transfer interrupt flag (x = 3..0)
    +            CHTIF1: u1,
    +            ///  Stream x clear transfer complete interrupt flag (x = 3..0)
    +            CTCIF1: u1,
    +            reserved16: u4,
    +            ///  Stream x clear FIFO error interrupt flag (x = 3..0)
    +            CFEIF2: u1,
    +            reserved18: u1,
    +            ///  Stream x clear direct mode error interrupt flag (x = 3..0)
    +            CDMEIF2: u1,
    +            ///  Stream x clear transfer error interrupt flag (x = 3..0)
    +            CTEIF2: u1,
    +            ///  Stream x clear half transfer interrupt flag (x = 3..0)
    +            CHTIF2: u1,
    +            ///  Stream x clear transfer complete interrupt flag (x = 3..0)
    +            CTCIF2: u1,
    +            ///  Stream x clear FIFO error interrupt flag (x = 3..0)
    +            CFEIF3: u1,
    +            reserved24: u1,
    +            ///  Stream x clear direct mode error interrupt flag (x = 3..0)
    +            CDMEIF3: u1,
    +            ///  Stream x clear transfer error interrupt flag (x = 3..0)
    +            CTEIF3: u1,
    +            ///  Stream x clear half transfer interrupt flag (x = 3..0)
    +            CHTIF3: u1,
    +            ///  Stream x clear transfer complete interrupt flag (x = 3..0)
    +            CTCIF3: u1,
    +            padding: u4,
    +        }),
    +        ///  high interrupt flag clear register
    +        HIFCR: mmio.Mmio(packed struct(u32) {
    +            ///  Stream x clear FIFO error interrupt flag (x = 7..4)
    +            CFEIF4: u1,
    +            reserved2: u1,
    +            ///  Stream x clear direct mode error interrupt flag (x = 7..4)
    +            CDMEIF4: u1,
    +            ///  Stream x clear transfer error interrupt flag (x = 7..4)
    +            CTEIF4: u1,
    +            ///  Stream x clear half transfer interrupt flag (x = 7..4)
    +            CHTIF4: u1,
    +            ///  Stream x clear transfer complete interrupt flag (x = 7..4)
    +            CTCIF4: u1,
    +            ///  Stream x clear FIFO error interrupt flag (x = 7..4)
    +            CFEIF5: u1,
    +            reserved8: u1,
    +            ///  Stream x clear direct mode error interrupt flag (x = 7..4)
    +            CDMEIF5: u1,
    +            ///  Stream x clear transfer error interrupt flag (x = 7..4)
    +            CTEIF5: u1,
    +            ///  Stream x clear half transfer interrupt flag (x = 7..4)
    +            CHTIF5: u1,
    +            ///  Stream x clear transfer complete interrupt flag (x = 7..4)
    +            CTCIF5: u1,
    +            reserved16: u4,
    +            ///  Stream x clear FIFO error interrupt flag (x = 7..4)
    +            CFEIF6: u1,
    +            reserved18: u1,
    +            ///  Stream x clear direct mode error interrupt flag (x = 7..4)
    +            CDMEIF6: u1,
    +            ///  Stream x clear transfer error interrupt flag (x = 7..4)
    +            CTEIF6: u1,
    +            ///  Stream x clear half transfer interrupt flag (x = 7..4)
    +            CHTIF6: u1,
    +            ///  Stream x clear transfer complete interrupt flag (x = 7..4)
    +            CTCIF6: u1,
    +            ///  Stream x clear FIFO error interrupt flag (x = 7..4)
    +            CFEIF7: u1,
    +            reserved24: u1,
    +            ///  Stream x clear direct mode error interrupt flag (x = 7..4)
    +            CDMEIF7: u1,
    +            ///  Stream x clear transfer error interrupt flag (x = 7..4)
    +            CTEIF7: u1,
    +            ///  Stream x clear half transfer interrupt flag (x = 7..4)
    +            CHTIF7: u1,
    +            ///  Stream x clear transfer complete interrupt flag (x = 7..4)
    +            CTCIF7: u1,
    +            padding: u4,
    +        }),
    +        ///  stream x configuration register
    +        S0CR: mmio.Mmio(packed struct(u32) {
    +            ///  Stream enable / flag stream ready when read low
    +            EN: u1,
    +            ///  Direct mode error interrupt enable
    +            DMEIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Half transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Peripheral flow controller
    +            PFCTRL: u1,
    +            ///  Data transfer direction
    +            DIR: u2,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral data size
    +            PSIZE: u2,
    +            ///  Memory data size
    +            MSIZE: u2,
    +            ///  Peripheral increment offset size
    +            PINCOS: u1,
    +            ///  Priority level
    +            PL: u2,
    +            ///  Double buffer mode
    +            DBM: u1,
    +            ///  Current target (only in double buffer mode)
    +            CT: u1,
    +            reserved21: u1,
    +            ///  Peripheral burst transfer configuration
    +            PBURST: u2,
    +            ///  Memory burst transfer configuration
    +            MBURST: u2,
    +            ///  Channel selection
    +            CHSEL: u3,
    +            padding: u4,
    +        }),
    +        ///  stream x number of data register
    +        S0NDTR: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data items to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  stream x peripheral address register
    +        S0PAR: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  stream x memory 0 address register
    +        S0M0AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 0 address
    +            M0A: u32,
    +        }),
    +        ///  stream x memory 1 address register
    +        S0M1AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 1 address (used in case of Double buffer mode)
    +            M1A: u32,
    +        }),
    +        ///  stream x FIFO control register
    +        S0FCR: mmio.Mmio(packed struct(u32) {
    +            ///  FIFO threshold selection
    +            FTH: u2,
    +            ///  Direct mode disable
    +            DMDIS: u1,
    +            ///  FIFO status
    +            FS: u3,
    +            reserved7: u1,
    +            ///  FIFO error interrupt enable
    +            FEIE: u1,
    +            padding: u24,
    +        }),
    +        ///  stream x configuration register
    +        S1CR: mmio.Mmio(packed struct(u32) {
    +            ///  Stream enable / flag stream ready when read low
    +            EN: u1,
    +            ///  Direct mode error interrupt enable
    +            DMEIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Half transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Peripheral flow controller
    +            PFCTRL: u1,
    +            ///  Data transfer direction
    +            DIR: u2,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral data size
    +            PSIZE: u2,
    +            ///  Memory data size
    +            MSIZE: u2,
    +            ///  Peripheral increment offset size
    +            PINCOS: u1,
    +            ///  Priority level
    +            PL: u2,
    +            ///  Double buffer mode
    +            DBM: u1,
    +            ///  Current target (only in double buffer mode)
    +            CT: u1,
    +            ///  ACK
    +            ACK: u1,
    +            ///  Peripheral burst transfer configuration
    +            PBURST: u2,
    +            ///  Memory burst transfer configuration
    +            MBURST: u2,
    +            ///  Channel selection
    +            CHSEL: u3,
    +            padding: u4,
    +        }),
    +        ///  stream x number of data register
    +        S1NDTR: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data items to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  stream x peripheral address register
    +        S1PAR: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  stream x memory 0 address register
    +        S1M0AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 0 address
    +            M0A: u32,
    +        }),
    +        ///  stream x memory 1 address register
    +        S1M1AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 1 address (used in case of Double buffer mode)
    +            M1A: u32,
    +        }),
    +        ///  stream x FIFO control register
    +        S1FCR: mmio.Mmio(packed struct(u32) {
    +            ///  FIFO threshold selection
    +            FTH: u2,
    +            ///  Direct mode disable
    +            DMDIS: u1,
    +            ///  FIFO status
    +            FS: u3,
    +            reserved7: u1,
    +            ///  FIFO error interrupt enable
    +            FEIE: u1,
    +            padding: u24,
    +        }),
    +        ///  stream x configuration register
    +        S2CR: mmio.Mmio(packed struct(u32) {
    +            ///  Stream enable / flag stream ready when read low
    +            EN: u1,
    +            ///  Direct mode error interrupt enable
    +            DMEIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Half transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Peripheral flow controller
    +            PFCTRL: u1,
    +            ///  Data transfer direction
    +            DIR: u2,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral data size
    +            PSIZE: u2,
    +            ///  Memory data size
    +            MSIZE: u2,
    +            ///  Peripheral increment offset size
    +            PINCOS: u1,
    +            ///  Priority level
    +            PL: u2,
    +            ///  Double buffer mode
    +            DBM: u1,
    +            ///  Current target (only in double buffer mode)
    +            CT: u1,
    +            ///  ACK
    +            ACK: u1,
    +            ///  Peripheral burst transfer configuration
    +            PBURST: u2,
    +            ///  Memory burst transfer configuration
    +            MBURST: u2,
    +            ///  Channel selection
    +            CHSEL: u3,
    +            padding: u4,
    +        }),
    +        ///  stream x number of data register
    +        S2NDTR: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data items to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  stream x peripheral address register
    +        S2PAR: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  stream x memory 0 address register
    +        S2M0AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 0 address
    +            M0A: u32,
    +        }),
    +        ///  stream x memory 1 address register
    +        S2M1AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 1 address (used in case of Double buffer mode)
    +            M1A: u32,
    +        }),
    +        ///  stream x FIFO control register
    +        S2FCR: mmio.Mmio(packed struct(u32) {
    +            ///  FIFO threshold selection
    +            FTH: u2,
    +            ///  Direct mode disable
    +            DMDIS: u1,
    +            ///  FIFO status
    +            FS: u3,
    +            reserved7: u1,
    +            ///  FIFO error interrupt enable
    +            FEIE: u1,
    +            padding: u24,
    +        }),
    +        ///  stream x configuration register
    +        S3CR: mmio.Mmio(packed struct(u32) {
    +            ///  Stream enable / flag stream ready when read low
    +            EN: u1,
    +            ///  Direct mode error interrupt enable
    +            DMEIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Half transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Peripheral flow controller
    +            PFCTRL: u1,
    +            ///  Data transfer direction
    +            DIR: u2,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral data size
    +            PSIZE: u2,
    +            ///  Memory data size
    +            MSIZE: u2,
    +            ///  Peripheral increment offset size
    +            PINCOS: u1,
    +            ///  Priority level
    +            PL: u2,
    +            ///  Double buffer mode
    +            DBM: u1,
    +            ///  Current target (only in double buffer mode)
    +            CT: u1,
    +            ///  ACK
    +            ACK: u1,
    +            ///  Peripheral burst transfer configuration
    +            PBURST: u2,
    +            ///  Memory burst transfer configuration
    +            MBURST: u2,
    +            ///  Channel selection
    +            CHSEL: u3,
    +            padding: u4,
    +        }),
    +        ///  stream x number of data register
    +        S3NDTR: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data items to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  stream x peripheral address register
    +        S3PAR: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  stream x memory 0 address register
    +        S3M0AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 0 address
    +            M0A: u32,
    +        }),
    +        ///  stream x memory 1 address register
    +        S3M1AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 1 address (used in case of Double buffer mode)
    +            M1A: u32,
    +        }),
    +        ///  stream x FIFO control register
    +        S3FCR: mmio.Mmio(packed struct(u32) {
    +            ///  FIFO threshold selection
    +            FTH: u2,
    +            ///  Direct mode disable
    +            DMDIS: u1,
    +            ///  FIFO status
    +            FS: u3,
    +            reserved7: u1,
    +            ///  FIFO error interrupt enable
    +            FEIE: u1,
    +            padding: u24,
    +        }),
    +        ///  stream x configuration register
    +        S4CR: mmio.Mmio(packed struct(u32) {
    +            ///  Stream enable / flag stream ready when read low
    +            EN: u1,
    +            ///  Direct mode error interrupt enable
    +            DMEIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Half transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Peripheral flow controller
    +            PFCTRL: u1,
    +            ///  Data transfer direction
    +            DIR: u2,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral data size
    +            PSIZE: u2,
    +            ///  Memory data size
    +            MSIZE: u2,
    +            ///  Peripheral increment offset size
    +            PINCOS: u1,
    +            ///  Priority level
    +            PL: u2,
    +            ///  Double buffer mode
    +            DBM: u1,
    +            ///  Current target (only in double buffer mode)
    +            CT: u1,
    +            ///  ACK
    +            ACK: u1,
    +            ///  Peripheral burst transfer configuration
    +            PBURST: u2,
    +            ///  Memory burst transfer configuration
    +            MBURST: u2,
    +            ///  Channel selection
    +            CHSEL: u3,
    +            padding: u4,
    +        }),
    +        ///  stream x number of data register
    +        S4NDTR: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data items to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  stream x peripheral address register
    +        S4PAR: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  stream x memory 0 address register
    +        S4M0AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 0 address
    +            M0A: u32,
    +        }),
    +        ///  stream x memory 1 address register
    +        S4M1AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 1 address (used in case of Double buffer mode)
    +            M1A: u32,
    +        }),
    +        ///  stream x FIFO control register
    +        S4FCR: mmio.Mmio(packed struct(u32) {
    +            ///  FIFO threshold selection
    +            FTH: u2,
    +            ///  Direct mode disable
    +            DMDIS: u1,
    +            ///  FIFO status
    +            FS: u3,
    +            reserved7: u1,
    +            ///  FIFO error interrupt enable
    +            FEIE: u1,
    +            padding: u24,
    +        }),
    +        ///  stream x configuration register
    +        S5CR: mmio.Mmio(packed struct(u32) {
    +            ///  Stream enable / flag stream ready when read low
    +            EN: u1,
    +            ///  Direct mode error interrupt enable
    +            DMEIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Half transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Peripheral flow controller
    +            PFCTRL: u1,
    +            ///  Data transfer direction
    +            DIR: u2,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral data size
    +            PSIZE: u2,
    +            ///  Memory data size
    +            MSIZE: u2,
    +            ///  Peripheral increment offset size
    +            PINCOS: u1,
    +            ///  Priority level
    +            PL: u2,
    +            ///  Double buffer mode
    +            DBM: u1,
    +            ///  Current target (only in double buffer mode)
    +            CT: u1,
    +            ///  ACK
    +            ACK: u1,
    +            ///  Peripheral burst transfer configuration
    +            PBURST: u2,
    +            ///  Memory burst transfer configuration
    +            MBURST: u2,
    +            ///  Channel selection
    +            CHSEL: u3,
    +            padding: u4,
    +        }),
    +        ///  stream x number of data register
    +        S5NDTR: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data items to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  stream x peripheral address register
    +        S5PAR: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  stream x memory 0 address register
    +        S5M0AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 0 address
    +            M0A: u32,
    +        }),
    +        ///  stream x memory 1 address register
    +        S5M1AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 1 address (used in case of Double buffer mode)
    +            M1A: u32,
    +        }),
    +        ///  stream x FIFO control register
    +        S5FCR: mmio.Mmio(packed struct(u32) {
    +            ///  FIFO threshold selection
    +            FTH: u2,
    +            ///  Direct mode disable
    +            DMDIS: u1,
    +            ///  FIFO status
    +            FS: u3,
    +            reserved7: u1,
    +            ///  FIFO error interrupt enable
    +            FEIE: u1,
    +            padding: u24,
    +        }),
    +        ///  stream x configuration register
    +        S6CR: mmio.Mmio(packed struct(u32) {
    +            ///  Stream enable / flag stream ready when read low
    +            EN: u1,
    +            ///  Direct mode error interrupt enable
    +            DMEIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Half transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Peripheral flow controller
    +            PFCTRL: u1,
    +            ///  Data transfer direction
    +            DIR: u2,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral data size
    +            PSIZE: u2,
    +            ///  Memory data size
    +            MSIZE: u2,
    +            ///  Peripheral increment offset size
    +            PINCOS: u1,
    +            ///  Priority level
    +            PL: u2,
    +            ///  Double buffer mode
    +            DBM: u1,
    +            ///  Current target (only in double buffer mode)
    +            CT: u1,
    +            ///  ACK
    +            ACK: u1,
    +            ///  Peripheral burst transfer configuration
    +            PBURST: u2,
    +            ///  Memory burst transfer configuration
    +            MBURST: u2,
    +            ///  Channel selection
    +            CHSEL: u3,
    +            padding: u4,
    +        }),
    +        ///  stream x number of data register
    +        S6NDTR: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data items to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  stream x peripheral address register
    +        S6PAR: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  stream x memory 0 address register
    +        S6M0AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 0 address
    +            M0A: u32,
    +        }),
    +        ///  stream x memory 1 address register
    +        S6M1AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 1 address (used in case of Double buffer mode)
    +            M1A: u32,
    +        }),
    +        ///  stream x FIFO control register
    +        S6FCR: mmio.Mmio(packed struct(u32) {
    +            ///  FIFO threshold selection
    +            FTH: u2,
    +            ///  Direct mode disable
    +            DMDIS: u1,
    +            ///  FIFO status
    +            FS: u3,
    +            reserved7: u1,
    +            ///  FIFO error interrupt enable
    +            FEIE: u1,
    +            padding: u24,
    +        }),
    +        ///  stream x configuration register
    +        S7CR: mmio.Mmio(packed struct(u32) {
    +            ///  Stream enable / flag stream ready when read low
    +            EN: u1,
    +            ///  Direct mode error interrupt enable
    +            DMEIE: u1,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Half transfer interrupt enable
    +            HTIE: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Peripheral flow controller
    +            PFCTRL: u1,
    +            ///  Data transfer direction
    +            DIR: u2,
    +            ///  Circular mode
    +            CIRC: u1,
    +            ///  Peripheral increment mode
    +            PINC: u1,
    +            ///  Memory increment mode
    +            MINC: u1,
    +            ///  Peripheral data size
    +            PSIZE: u2,
    +            ///  Memory data size
    +            MSIZE: u2,
    +            ///  Peripheral increment offset size
    +            PINCOS: u1,
    +            ///  Priority level
    +            PL: u2,
    +            ///  Double buffer mode
    +            DBM: u1,
    +            ///  Current target (only in double buffer mode)
    +            CT: u1,
    +            ///  ACK
    +            ACK: u1,
    +            ///  Peripheral burst transfer configuration
    +            PBURST: u2,
    +            ///  Memory burst transfer configuration
    +            MBURST: u2,
    +            ///  Channel selection
    +            CHSEL: u3,
    +            padding: u4,
    +        }),
    +        ///  stream x number of data register
    +        S7NDTR: mmio.Mmio(packed struct(u32) {
    +            ///  Number of data items to transfer
    +            NDT: u16,
    +            padding: u16,
    +        }),
    +        ///  stream x peripheral address register
    +        S7PAR: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral address
    +            PA: u32,
    +        }),
    +        ///  stream x memory 0 address register
    +        S7M0AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 0 address
    +            M0A: u32,
    +        }),
    +        ///  stream x memory 1 address register
    +        S7M1AR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory 1 address (used in case of Double buffer mode)
    +            M1A: u32,
    +        }),
    +        ///  stream x FIFO control register
    +        S7FCR: mmio.Mmio(packed struct(u32) {
    +            ///  FIFO threshold selection
    +            FTH: u2,
    +            ///  Direct mode disable
    +            DMDIS: u1,
    +            ///  FIFO status
    +            FS: u3,
    +            reserved7: u1,
    +            ///  FIFO error interrupt enable
    +            FEIE: u1,
    +            padding: u24,
    +        }),
    +    };
    +
    +    ///  System control block ACTLR
    +    pub const SCB_ACTRL = extern struct {
    +        ///  Auxiliary control register
    +        ACTRL: mmio.Mmio(packed struct(u32) {
    +            ///  DISMCYCINT
    +            DISMCYCINT: u1,
    +            ///  DISDEFWBUF
    +            DISDEFWBUF: u1,
    +            ///  DISFOLD
    +            DISFOLD: u1,
    +            reserved8: u5,
    +            ///  DISFPCA
    +            DISFPCA: u1,
    +            ///  DISOOFP
    +            DISOOFP: u1,
    +            padding: u22,
    +        }),
    +    };
    +
    +    ///  Reset and clock control
    +    pub const RCC = extern struct {
    +        ///  clock control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  Internal high-speed clock enable
    +            HSION: u1,
    +            ///  Internal high-speed clock ready flag
    +            HSIRDY: u1,
    +            reserved3: u1,
    +            ///  Internal high-speed clock trimming
    +            HSITRIM: u5,
    +            ///  Internal high-speed clock calibration
    +            HSICAL: u8,
    +            ///  HSE clock enable
    +            HSEON: u1,
    +            ///  HSE clock ready flag
    +            HSERDY: u1,
    +            ///  HSE clock bypass
    +            HSEBYP: u1,
    +            ///  Clock security system enable
    +            CSSON: u1,
    +            reserved24: u4,
    +            ///  Main PLL (PLL) enable
    +            PLLON: u1,
    +            ///  Main PLL (PLL) clock ready flag
    +            PLLRDY: u1,
    +            ///  PLLI2S enable
    +            PLLI2SON: u1,
    +            ///  PLLI2S clock ready flag
    +            PLLI2SRDY: u1,
    +            padding: u4,
    +        }),
    +        ///  PLL configuration register
    +        PLLCFGR: mmio.Mmio(packed struct(u32) {
    +            ///  Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock
    +            PLLM0: u1,
    +            ///  Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock
    +            PLLM1: u1,
    +            ///  Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock
    +            PLLM2: u1,
    +            ///  Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock
    +            PLLM3: u1,
    +            ///  Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock
    +            PLLM4: u1,
    +            ///  Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock
    +            PLLM5: u1,
    +            ///  Main PLL (PLL) multiplication factor for VCO
    +            PLLN0: u1,
    +            ///  Main PLL (PLL) multiplication factor for VCO
    +            PLLN1: u1,
    +            ///  Main PLL (PLL) multiplication factor for VCO
    +            PLLN2: u1,
    +            ///  Main PLL (PLL) multiplication factor for VCO
    +            PLLN3: u1,
    +            ///  Main PLL (PLL) multiplication factor for VCO
    +            PLLN4: u1,
    +            ///  Main PLL (PLL) multiplication factor for VCO
    +            PLLN5: u1,
    +            ///  Main PLL (PLL) multiplication factor for VCO
    +            PLLN6: u1,
    +            ///  Main PLL (PLL) multiplication factor for VCO
    +            PLLN7: u1,
    +            ///  Main PLL (PLL) multiplication factor for VCO
    +            PLLN8: u1,
    +            reserved16: u1,
    +            ///  Main PLL (PLL) division factor for main system clock
    +            PLLP0: u1,
    +            ///  Main PLL (PLL) division factor for main system clock
    +            PLLP1: u1,
    +            reserved22: u4,
    +            ///  Main PLL(PLL) and audio PLL (PLLI2S) entry clock source
    +            PLLSRC: u1,
    +            reserved24: u1,
    +            ///  Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks
    +            PLLQ0: u1,
    +            ///  Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks
    +            PLLQ1: u1,
    +            ///  Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks
    +            PLLQ2: u1,
    +            ///  Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks
    +            PLLQ3: u1,
    +            padding: u4,
    +        }),
    +        ///  clock configuration register
    +        CFGR: mmio.Mmio(packed struct(u32) {
    +            ///  System clock switch
    +            SW0: u1,
    +            ///  System clock switch
    +            SW1: u1,
    +            ///  System clock switch status
    +            SWS0: u1,
    +            ///  System clock switch status
    +            SWS1: u1,
    +            ///  AHB prescaler
    +            HPRE: u4,
    +            reserved10: u2,
    +            ///  APB Low speed prescaler (APB1)
    +            PPRE1: u3,
    +            ///  APB high-speed prescaler (APB2)
    +            PPRE2: u3,
    +            ///  HSE division factor for RTC clock
    +            RTCPRE: u5,
    +            ///  Microcontroller clock output 1
    +            MCO1: u2,
    +            ///  I2S clock selection
    +            I2SSRC: u1,
    +            ///  MCO1 prescaler
    +            MCO1PRE: u3,
    +            ///  MCO2 prescaler
    +            MCO2PRE: u3,
    +            ///  Microcontroller clock output 2
    +            MCO2: u2,
    +        }),
    +        ///  clock interrupt register
    +        CIR: mmio.Mmio(packed struct(u32) {
    +            ///  LSI ready interrupt flag
    +            LSIRDYF: u1,
    +            ///  LSE ready interrupt flag
    +            LSERDYF: u1,
    +            ///  HSI ready interrupt flag
    +            HSIRDYF: u1,
    +            ///  HSE ready interrupt flag
    +            HSERDYF: u1,
    +            ///  Main PLL (PLL) ready interrupt flag
    +            PLLRDYF: u1,
    +            ///  PLLI2S ready interrupt flag
    +            PLLI2SRDYF: u1,
    +            reserved7: u1,
    +            ///  Clock security system interrupt flag
    +            CSSF: u1,
    +            ///  LSI ready interrupt enable
    +            LSIRDYIE: u1,
    +            ///  LSE ready interrupt enable
    +            LSERDYIE: u1,
    +            ///  HSI ready interrupt enable
    +            HSIRDYIE: u1,
    +            ///  HSE ready interrupt enable
    +            HSERDYIE: u1,
    +            ///  Main PLL (PLL) ready interrupt enable
    +            PLLRDYIE: u1,
    +            ///  PLLI2S ready interrupt enable
    +            PLLI2SRDYIE: u1,
    +            reserved16: u2,
    +            ///  LSI ready interrupt clear
    +            LSIRDYC: u1,
    +            ///  LSE ready interrupt clear
    +            LSERDYC: u1,
    +            ///  HSI ready interrupt clear
    +            HSIRDYC: u1,
    +            ///  HSE ready interrupt clear
    +            HSERDYC: u1,
    +            ///  Main PLL(PLL) ready interrupt clear
    +            PLLRDYC: u1,
    +            ///  PLLI2S ready interrupt clear
    +            PLLI2SRDYC: u1,
    +            reserved23: u1,
    +            ///  Clock security system interrupt clear
    +            CSSC: u1,
    +            padding: u8,
    +        }),
    +        ///  AHB1 peripheral reset register
    +        AHB1RSTR: mmio.Mmio(packed struct(u32) {
    +            ///  IO port A reset
    +            GPIOARST: u1,
    +            ///  IO port B reset
    +            GPIOBRST: u1,
    +            ///  IO port C reset
    +            GPIOCRST: u1,
    +            ///  IO port D reset
    +            GPIODRST: u1,
    +            ///  IO port E reset
    +            GPIOERST: u1,
    +            ///  IO port F reset
    +            GPIOFRST: u1,
    +            ///  IO port G reset
    +            GPIOGRST: u1,
    +            ///  IO port H reset
    +            GPIOHRST: u1,
    +            ///  IO port I reset
    +            GPIOIRST: u1,
    +            reserved12: u3,
    +            ///  CRC reset
    +            CRCRST: u1,
    +            reserved21: u8,
    +            ///  DMA2 reset
    +            DMA1RST: u1,
    +            ///  DMA2 reset
    +            DMA2RST: u1,
    +            reserved25: u2,
    +            ///  Ethernet MAC reset
    +            ETHMACRST: u1,
    +            reserved29: u3,
    +            ///  USB OTG HS module reset
    +            OTGHSRST: u1,
    +            padding: u2,
    +        }),
    +        ///  AHB2 peripheral reset register
    +        AHB2RSTR: mmio.Mmio(packed struct(u32) {
    +            ///  Camera interface reset
    +            DCMIRST: u1,
    +            reserved4: u3,
    +            ///  Cryptographic module reset
    +            CRYPRST: u1,
    +            ///  Hash module reset
    +            HSAHRST: u1,
    +            ///  Random number generator module reset
    +            RNGRST: u1,
    +            ///  USB OTG FS module reset
    +            OTGFSRST: u1,
    +            padding: u24,
    +        }),
    +        ///  AHB3 peripheral reset register
    +        AHB3RSTR: mmio.Mmio(packed struct(u32) {
    +            ///  Flexible memory controller module reset
    +            FMCRST: u1,
    +            padding: u31,
    +        }),
    +        reserved32: [4]u8,
    +        ///  APB1 peripheral reset register
    +        APB1RSTR: mmio.Mmio(packed struct(u32) {
    +            ///  TIM2 reset
    +            TIM2RST: u1,
    +            ///  TIM3 reset
    +            TIM3RST: u1,
    +            ///  TIM4 reset
    +            TIM4RST: u1,
    +            ///  TIM5 reset
    +            TIM5RST: u1,
    +            ///  TIM6 reset
    +            TIM6RST: u1,
    +            ///  TIM7 reset
    +            TIM7RST: u1,
    +            ///  TIM12 reset
    +            TIM12RST: u1,
    +            ///  TIM13 reset
    +            TIM13RST: u1,
    +            ///  TIM14 reset
    +            TIM14RST: u1,
    +            reserved11: u2,
    +            ///  Window watchdog reset
    +            WWDGRST: u1,
    +            reserved14: u2,
    +            ///  SPI 2 reset
    +            SPI2RST: u1,
    +            ///  SPI 3 reset
    +            SPI3RST: u1,
    +            reserved17: u1,
    +            ///  USART 2 reset
    +            UART2RST: u1,
    +            ///  USART 3 reset
    +            UART3RST: u1,
    +            ///  USART 4 reset
    +            UART4RST: u1,
    +            ///  USART 5 reset
    +            UART5RST: u1,
    +            ///  I2C 1 reset
    +            I2C1RST: u1,
    +            ///  I2C 2 reset
    +            I2C2RST: u1,
    +            ///  I2C3 reset
    +            I2C3RST: u1,
    +            reserved25: u1,
    +            ///  CAN1 reset
    +            CAN1RST: u1,
    +            ///  CAN2 reset
    +            CAN2RST: u1,
    +            reserved28: u1,
    +            ///  Power interface reset
    +            PWRRST: u1,
    +            ///  DAC reset
    +            DACRST: u1,
    +            padding: u2,
    +        }),
    +        ///  APB2 peripheral reset register
    +        APB2RSTR: mmio.Mmio(packed struct(u32) {
    +            ///  TIM1 reset
    +            TIM1RST: u1,
    +            ///  TIM8 reset
    +            TIM8RST: u1,
    +            reserved4: u2,
    +            ///  USART1 reset
    +            USART1RST: u1,
    +            ///  USART6 reset
    +            USART6RST: u1,
    +            reserved8: u2,
    +            ///  ADC interface reset (common to all ADCs)
    +            ADCRST: u1,
    +            reserved11: u2,
    +            ///  SDIO reset
    +            SDIORST: u1,
    +            ///  SPI 1 reset
    +            SPI1RST: u1,
    +            reserved14: u1,
    +            ///  System configuration controller reset
    +            SYSCFGRST: u1,
    +            reserved16: u1,
    +            ///  TIM9 reset
    +            TIM9RST: u1,
    +            ///  TIM10 reset
    +            TIM10RST: u1,
    +            ///  TIM11 reset
    +            TIM11RST: u1,
    +            padding: u13,
    +        }),
    +        reserved48: [8]u8,
    +        ///  AHB1 peripheral clock register
    +        AHB1ENR: mmio.Mmio(packed struct(u32) {
    +            ///  IO port A clock enable
    +            GPIOAEN: u1,
    +            ///  IO port B clock enable
    +            GPIOBEN: u1,
    +            ///  IO port C clock enable
    +            GPIOCEN: u1,
    +            ///  IO port D clock enable
    +            GPIODEN: u1,
    +            ///  IO port E clock enable
    +            GPIOEEN: u1,
    +            ///  IO port F clock enable
    +            GPIOFEN: u1,
    +            ///  IO port G clock enable
    +            GPIOGEN: u1,
    +            ///  IO port H clock enable
    +            GPIOHEN: u1,
    +            ///  IO port I clock enable
    +            GPIOIEN: u1,
    +            reserved12: u3,
    +            ///  CRC clock enable
    +            CRCEN: u1,
    +            reserved18: u5,
    +            ///  Backup SRAM interface clock enable
    +            BKPSRAMEN: u1,
    +            reserved20: u1,
    +            ///  CCM data RAM clock enable
    +            CCMDATARAMEN: u1,
    +            ///  DMA1 clock enable
    +            DMA1EN: u1,
    +            ///  DMA2 clock enable
    +            DMA2EN: u1,
    +            reserved25: u2,
    +            ///  Ethernet MAC clock enable
    +            ETHMACEN: u1,
    +            ///  Ethernet Transmission clock enable
    +            ETHMACTXEN: u1,
    +            ///  Ethernet Reception clock enable
    +            ETHMACRXEN: u1,
    +            ///  Ethernet PTP clock enable
    +            ETHMACPTPEN: u1,
    +            ///  USB OTG HS clock enable
    +            OTGHSEN: u1,
    +            ///  USB OTG HSULPI clock enable
    +            OTGHSULPIEN: u1,
    +            padding: u1,
    +        }),
    +        ///  AHB2 peripheral clock enable register
    +        AHB2ENR: mmio.Mmio(packed struct(u32) {
    +            ///  Camera interface enable
    +            DCMIEN: u1,
    +            reserved4: u3,
    +            ///  Cryptographic modules clock enable
    +            CRYPEN: u1,
    +            ///  Hash modules clock enable
    +            HASHEN: u1,
    +            ///  Random number generator clock enable
    +            RNGEN: u1,
    +            ///  USB OTG FS clock enable
    +            OTGFSEN: u1,
    +            padding: u24,
    +        }),
    +        ///  AHB3 peripheral clock enable register
    +        AHB3ENR: mmio.Mmio(packed struct(u32) {
    +            ///  Flexible memory controller module clock enable
    +            FMCEN: u1,
    +            padding: u31,
    +        }),
    +        reserved64: [4]u8,
    +        ///  APB1 peripheral clock enable register
    +        APB1ENR: mmio.Mmio(packed struct(u32) {
    +            ///  TIM2 clock enable
    +            TIM2EN: u1,
    +            ///  TIM3 clock enable
    +            TIM3EN: u1,
    +            ///  TIM4 clock enable
    +            TIM4EN: u1,
    +            ///  TIM5 clock enable
    +            TIM5EN: u1,
    +            ///  TIM6 clock enable
    +            TIM6EN: u1,
    +            ///  TIM7 clock enable
    +            TIM7EN: u1,
    +            ///  TIM12 clock enable
    +            TIM12EN: u1,
    +            ///  TIM13 clock enable
    +            TIM13EN: u1,
    +            ///  TIM14 clock enable
    +            TIM14EN: u1,
    +            reserved11: u2,
    +            ///  Window watchdog clock enable
    +            WWDGEN: u1,
    +            reserved14: u2,
    +            ///  SPI2 clock enable
    +            SPI2EN: u1,
    +            ///  SPI3 clock enable
    +            SPI3EN: u1,
    +            reserved17: u1,
    +            ///  USART 2 clock enable
    +            USART2EN: u1,
    +            ///  USART3 clock enable
    +            USART3EN: u1,
    +            ///  UART4 clock enable
    +            UART4EN: u1,
    +            ///  UART5 clock enable
    +            UART5EN: u1,
    +            ///  I2C1 clock enable
    +            I2C1EN: u1,
    +            ///  I2C2 clock enable
    +            I2C2EN: u1,
    +            ///  I2C3 clock enable
    +            I2C3EN: u1,
    +            reserved25: u1,
    +            ///  CAN 1 clock enable
    +            CAN1EN: u1,
    +            ///  CAN 2 clock enable
    +            CAN2EN: u1,
    +            reserved28: u1,
    +            ///  Power interface clock enable
    +            PWREN: u1,
    +            ///  DAC interface clock enable
    +            DACEN: u1,
    +            padding: u2,
    +        }),
    +        ///  APB2 peripheral clock enable register
    +        APB2ENR: mmio.Mmio(packed struct(u32) {
    +            ///  TIM1 clock enable
    +            TIM1EN: u1,
    +            ///  TIM8 clock enable
    +            TIM8EN: u1,
    +            reserved4: u2,
    +            ///  USART1 clock enable
    +            USART1EN: u1,
    +            ///  USART6 clock enable
    +            USART6EN: u1,
    +            reserved8: u2,
    +            ///  ADC1 clock enable
    +            ADC1EN: u1,
    +            ///  ADC2 clock enable
    +            ADC2EN: u1,
    +            ///  ADC3 clock enable
    +            ADC3EN: u1,
    +            ///  SDIO clock enable
    +            SDIOEN: u1,
    +            ///  SPI1 clock enable
    +            SPI1EN: u1,
    +            reserved14: u1,
    +            ///  System configuration controller clock enable
    +            SYSCFGEN: u1,
    +            reserved16: u1,
    +            ///  TIM9 clock enable
    +            TIM9EN: u1,
    +            ///  TIM10 clock enable
    +            TIM10EN: u1,
    +            ///  TIM11 clock enable
    +            TIM11EN: u1,
    +            padding: u13,
    +        }),
    +        reserved80: [8]u8,
    +        ///  AHB1 peripheral clock enable in low power mode register
    +        AHB1LPENR: mmio.Mmio(packed struct(u32) {
    +            ///  IO port A clock enable during sleep mode
    +            GPIOALPEN: u1,
    +            ///  IO port B clock enable during Sleep mode
    +            GPIOBLPEN: u1,
    +            ///  IO port C clock enable during Sleep mode
    +            GPIOCLPEN: u1,
    +            ///  IO port D clock enable during Sleep mode
    +            GPIODLPEN: u1,
    +            ///  IO port E clock enable during Sleep mode
    +            GPIOELPEN: u1,
    +            ///  IO port F clock enable during Sleep mode
    +            GPIOFLPEN: u1,
    +            ///  IO port G clock enable during Sleep mode
    +            GPIOGLPEN: u1,
    +            ///  IO port H clock enable during Sleep mode
    +            GPIOHLPEN: u1,
    +            ///  IO port I clock enable during Sleep mode
    +            GPIOILPEN: u1,
    +            reserved12: u3,
    +            ///  CRC clock enable during Sleep mode
    +            CRCLPEN: u1,
    +            reserved15: u2,
    +            ///  Flash interface clock enable during Sleep mode
    +            FLITFLPEN: u1,
    +            ///  SRAM 1interface clock enable during Sleep mode
    +            SRAM1LPEN: u1,
    +            ///  SRAM 2 interface clock enable during Sleep mode
    +            SRAM2LPEN: u1,
    +            ///  Backup SRAM interface clock enable during Sleep mode
    +            BKPSRAMLPEN: u1,
    +            reserved21: u2,
    +            ///  DMA1 clock enable during Sleep mode
    +            DMA1LPEN: u1,
    +            ///  DMA2 clock enable during Sleep mode
    +            DMA2LPEN: u1,
    +            reserved25: u2,
    +            ///  Ethernet MAC clock enable during Sleep mode
    +            ETHMACLPEN: u1,
    +            ///  Ethernet transmission clock enable during Sleep mode
    +            ETHMACTXLPEN: u1,
    +            ///  Ethernet reception clock enable during Sleep mode
    +            ETHMACRXLPEN: u1,
    +            ///  Ethernet PTP clock enable during Sleep mode
    +            ETHMACPTPLPEN: u1,
    +            ///  USB OTG HS clock enable during Sleep mode
    +            OTGHSLPEN: u1,
    +            ///  USB OTG HS ULPI clock enable during Sleep mode
    +            OTGHSULPILPEN: u1,
    +            padding: u1,
    +        }),
    +        ///  AHB2 peripheral clock enable in low power mode register
    +        AHB2LPENR: mmio.Mmio(packed struct(u32) {
    +            ///  Camera interface enable during Sleep mode
    +            DCMILPEN: u1,
    +            reserved4: u3,
    +            ///  Cryptography modules clock enable during Sleep mode
    +            CRYPLPEN: u1,
    +            ///  Hash modules clock enable during Sleep mode
    +            HASHLPEN: u1,
    +            ///  Random number generator clock enable during Sleep mode
    +            RNGLPEN: u1,
    +            ///  USB OTG FS clock enable during Sleep mode
    +            OTGFSLPEN: u1,
    +            padding: u24,
    +        }),
    +        ///  AHB3 peripheral clock enable in low power mode register
    +        AHB3LPENR: mmio.Mmio(packed struct(u32) {
    +            ///  Flexible memory controller module clock enable during Sleep mode
    +            FMCLPEN: u1,
    +            padding: u31,
    +        }),
    +        reserved96: [4]u8,
    +        ///  APB1 peripheral clock enable in low power mode register
    +        APB1LPENR: mmio.Mmio(packed struct(u32) {
    +            ///  TIM2 clock enable during Sleep mode
    +            TIM2LPEN: u1,
    +            ///  TIM3 clock enable during Sleep mode
    +            TIM3LPEN: u1,
    +            ///  TIM4 clock enable during Sleep mode
    +            TIM4LPEN: u1,
    +            ///  TIM5 clock enable during Sleep mode
    +            TIM5LPEN: u1,
    +            ///  TIM6 clock enable during Sleep mode
    +            TIM6LPEN: u1,
    +            ///  TIM7 clock enable during Sleep mode
    +            TIM7LPEN: u1,
    +            ///  TIM12 clock enable during Sleep mode
    +            TIM12LPEN: u1,
    +            ///  TIM13 clock enable during Sleep mode
    +            TIM13LPEN: u1,
    +            ///  TIM14 clock enable during Sleep mode
    +            TIM14LPEN: u1,
    +            reserved11: u2,
    +            ///  Window watchdog clock enable during Sleep mode
    +            WWDGLPEN: u1,
    +            reserved14: u2,
    +            ///  SPI2 clock enable during Sleep mode
    +            SPI2LPEN: u1,
    +            ///  SPI3 clock enable during Sleep mode
    +            SPI3LPEN: u1,
    +            reserved17: u1,
    +            ///  USART2 clock enable during Sleep mode
    +            USART2LPEN: u1,
    +            ///  USART3 clock enable during Sleep mode
    +            USART3LPEN: u1,
    +            ///  UART4 clock enable during Sleep mode
    +            UART4LPEN: u1,
    +            ///  UART5 clock enable during Sleep mode
    +            UART5LPEN: u1,
    +            ///  I2C1 clock enable during Sleep mode
    +            I2C1LPEN: u1,
    +            ///  I2C2 clock enable during Sleep mode
    +            I2C2LPEN: u1,
    +            ///  I2C3 clock enable during Sleep mode
    +            I2C3LPEN: u1,
    +            reserved25: u1,
    +            ///  CAN 1 clock enable during Sleep mode
    +            CAN1LPEN: u1,
    +            ///  CAN 2 clock enable during Sleep mode
    +            CAN2LPEN: u1,
    +            reserved28: u1,
    +            ///  Power interface clock enable during Sleep mode
    +            PWRLPEN: u1,
    +            ///  DAC interface clock enable during Sleep mode
    +            DACLPEN: u1,
    +            padding: u2,
    +        }),
    +        ///  APB2 peripheral clock enabled in low power mode register
    +        APB2LPENR: mmio.Mmio(packed struct(u32) {
    +            ///  TIM1 clock enable during Sleep mode
    +            TIM1LPEN: u1,
    +            ///  TIM8 clock enable during Sleep mode
    +            TIM8LPEN: u1,
    +            reserved4: u2,
    +            ///  USART1 clock enable during Sleep mode
    +            USART1LPEN: u1,
    +            ///  USART6 clock enable during Sleep mode
    +            USART6LPEN: u1,
    +            reserved8: u2,
    +            ///  ADC1 clock enable during Sleep mode
    +            ADC1LPEN: u1,
    +            ///  ADC2 clock enable during Sleep mode
    +            ADC2LPEN: u1,
    +            ///  ADC 3 clock enable during Sleep mode
    +            ADC3LPEN: u1,
    +            ///  SDIO clock enable during Sleep mode
    +            SDIOLPEN: u1,
    +            ///  SPI 1 clock enable during Sleep mode
    +            SPI1LPEN: u1,
    +            reserved14: u1,
    +            ///  System configuration controller clock enable during Sleep mode
    +            SYSCFGLPEN: u1,
    +            reserved16: u1,
    +            ///  TIM9 clock enable during sleep mode
    +            TIM9LPEN: u1,
    +            ///  TIM10 clock enable during Sleep mode
    +            TIM10LPEN: u1,
    +            ///  TIM11 clock enable during Sleep mode
    +            TIM11LPEN: u1,
    +            padding: u13,
    +        }),
    +        reserved112: [8]u8,
    +        ///  Backup domain control register
    +        BDCR: mmio.Mmio(packed struct(u32) {
    +            ///  External low-speed oscillator enable
    +            LSEON: u1,
    +            ///  External low-speed oscillator ready
    +            LSERDY: u1,
    +            ///  External low-speed oscillator bypass
    +            LSEBYP: u1,
    +            reserved8: u5,
    +            ///  RTC clock source selection
    +            RTCSEL0: u1,
    +            ///  RTC clock source selection
    +            RTCSEL1: u1,
    +            reserved15: u5,
    +            ///  RTC clock enable
    +            RTCEN: u1,
    +            ///  Backup domain software reset
    +            BDRST: u1,
    +            padding: u15,
    +        }),
    +        ///  clock control & status register
    +        CSR: mmio.Mmio(packed struct(u32) {
    +            ///  Internal low-speed oscillator enable
    +            LSION: u1,
    +            ///  Internal low-speed oscillator ready
    +            LSIRDY: u1,
    +            reserved24: u22,
    +            ///  Remove reset flag
    +            RMVF: u1,
    +            ///  BOR reset flag
    +            BORRSTF: u1,
    +            ///  PIN reset flag
    +            PADRSTF: u1,
    +            ///  POR/PDR reset flag
    +            PORRSTF: u1,
    +            ///  Software reset flag
    +            SFTRSTF: u1,
    +            ///  Independent watchdog reset flag
    +            WDGRSTF: u1,
    +            ///  Window watchdog reset flag
    +            WWDGRSTF: u1,
    +            ///  Low-power reset flag
    +            LPWRRSTF: u1,
    +        }),
    +        reserved128: [8]u8,
    +        ///  spread spectrum clock generation register
    +        SSCGR: mmio.Mmio(packed struct(u32) {
    +            ///  Modulation period
    +            MODPER: u13,
    +            ///  Incrementation step
    +            INCSTEP: u15,
    +            reserved30: u2,
    +            ///  Spread Select
    +            SPREADSEL: u1,
    +            ///  Spread spectrum modulation enable
    +            SSCGEN: u1,
    +        }),
    +        ///  PLLI2S configuration register
    +        PLLI2SCFGR: mmio.Mmio(packed struct(u32) {
    +            reserved6: u6,
    +            ///  PLLI2S multiplication factor for VCO
    +            PLLI2SN: u9,
    +            reserved24: u9,
    +            ///  PLLI2S division factor for SAI1 clock
    +            PLLI2SQ: u4,
    +            ///  PLLI2S division factor for I2S clocks
    +            PLLI2SR: u3,
    +            padding: u1,
    +        }),
    +        ///  RCC PLL configuration register
    +        PLLSAICFGR: mmio.Mmio(packed struct(u32) {
    +            reserved6: u6,
    +            ///  PLLSAI division factor for VCO
    +            PLLSAIN: u9,
    +            reserved24: u9,
    +            ///  PLLSAI division factor for SAI1 clock
    +            PLLSAIQ: u4,
    +            ///  PLLSAI division factor for LCD clock
    +            PLLSAIR: u3,
    +            padding: u1,
    +        }),
    +        ///  RCC Dedicated Clock Configuration Register
    +        DCKCFGR: mmio.Mmio(packed struct(u32) {
    +            ///  PLLI2S division factor for SAI1 clock
    +            PLLI2SDIVQ: u5,
    +            reserved8: u3,
    +            ///  PLLSAI division factor for SAI1 clock
    +            PLLSAIDIVQ: u5,
    +            reserved16: u3,
    +            ///  division factor for LCD_CLK
    +            PLLSAIDIVR: u2,
    +            reserved20: u2,
    +            ///  SAI1-A clock source selection
    +            SAI1ASRC: u2,
    +            ///  SAI1-B clock source selection
    +            SAI1BSRC: u2,
    +            ///  Timers clocks prescalers selection
    +            TIMPRE: u1,
    +            padding: u7,
    +        }),
    +    };
    +
    +    ///  General-purpose I/Os
    +    pub const GPIOK = extern struct {
    +        ///  GPIO port mode register
    +        MODER: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER0: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER1: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER2: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER3: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER4: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER5: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER6: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER7: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER8: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER9: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER10: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER11: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER12: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER13: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER14: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER15: u2,
    +        }),
    +        ///  GPIO port output type register
    +        OTYPER: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            OT0: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT1: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT2: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT3: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT4: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT5: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT6: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT7: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT8: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT9: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT10: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT11: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT12: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT13: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT14: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT15: u1,
    +            padding: u16,
    +        }),
    +        ///  GPIO port output speed register
    +        OSPEEDR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR0: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR1: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR2: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR3: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR4: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR5: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR6: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR7: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR8: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR9: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR10: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR11: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR12: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR13: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR14: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR15: u2,
    +        }),
    +        ///  GPIO port pull-up/pull-down register
    +        PUPDR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR0: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR1: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR2: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR3: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR4: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR5: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR6: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR7: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR8: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR9: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR10: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR11: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR12: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR13: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR14: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR15: u2,
    +        }),
    +        ///  GPIO port input data register
    +        IDR: mmio.Mmio(packed struct(u32) {
    +            ///  Port input data (y = 0..15)
    +            IDR0: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR1: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR2: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR3: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR4: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR5: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR6: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR7: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR8: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR9: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR10: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR11: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR12: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR13: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR14: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR15: u1,
    +            padding: u16,
    +        }),
    +        ///  GPIO port output data register
    +        ODR: mmio.Mmio(packed struct(u32) {
    +            ///  Port output data (y = 0..15)
    +            ODR0: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR1: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR2: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR3: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR4: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR5: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR6: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR7: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR8: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR9: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR10: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR11: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR12: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR13: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR14: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR15: u1,
    +            padding: u16,
    +        }),
    +        ///  GPIO port bit set/reset register
    +        BSRR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x set bit y (y= 0..15)
    +            BS0: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS1: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS2: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS3: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS4: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS5: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS6: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS7: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS8: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS9: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS10: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS11: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS12: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS13: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS14: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS15: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BR0: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR1: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR2: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR3: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR4: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR5: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR6: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR7: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR8: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR9: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR10: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR11: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR12: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR13: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR14: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR15: u1,
    +        }),
    +        ///  GPIO port configuration lock register
    +        LCKR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK0: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK1: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK2: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK3: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK4: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK5: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK6: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK7: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK8: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK9: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK10: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK11: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK12: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK13: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK14: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK15: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCKK: u1,
    +            padding: u15,
    +        }),
    +        ///  GPIO alternate function low register
    +        AFRL: mmio.Mmio(packed struct(u32) {
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL0: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL1: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL2: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL3: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL4: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL5: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL6: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL7: u4,
    +        }),
    +        ///  GPIO alternate function high register
    +        AFRH: mmio.Mmio(packed struct(u32) {
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH8: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH9: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH10: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH11: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH12: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH13: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH14: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH15: u4,
    +        }),
    +    };
    +
    +    ///  Floating point unit CPACR
    +    pub const FPU_CPACR = extern struct {
    +        ///  Coprocessor access control register
    +        CPACR: mmio.Mmio(packed struct(u32) {
    +            reserved20: u20,
    +            ///  CP
    +            CP: u4,
    +            padding: u8,
    +        }),
    +    };
    +
    +    ///  Nested vectored interrupt controller
    +    pub const NVIC_STIR = extern struct {
    +        ///  Software trigger interrupt register
    +        STIR: mmio.Mmio(packed struct(u32) {
    +            ///  Software generated interrupt ID
    +            INTID: u9,
    +            padding: u23,
    +        }),
    +    };
    +
    +    ///  System control block
    +    pub const SCB = extern struct {
    +        ///  CPUID base register
    +        CPUID: mmio.Mmio(packed struct(u32) {
    +            ///  Revision number
    +            Revision: u4,
    +            ///  Part number of the processor
    +            PartNo: u12,
    +            ///  Reads as 0xF
    +            Constant: u4,
    +            ///  Variant number
    +            Variant: u4,
    +            ///  Implementer code
    +            Implementer: u8,
    +        }),
    +        ///  Interrupt control and state register
    +        ICSR: mmio.Mmio(packed struct(u32) {
    +            ///  Active vector
    +            VECTACTIVE: u9,
    +            reserved11: u2,
    +            ///  Return to base level
    +            RETTOBASE: u1,
    +            ///  Pending vector
    +            VECTPENDING: u7,
    +            reserved22: u3,
    +            ///  Interrupt pending flag
    +            ISRPENDING: u1,
    +            reserved25: u2,
    +            ///  SysTick exception clear-pending bit
    +            PENDSTCLR: u1,
    +            ///  SysTick exception set-pending bit
    +            PENDSTSET: u1,
    +            ///  PendSV clear-pending bit
    +            PENDSVCLR: u1,
    +            ///  PendSV set-pending bit
    +            PENDSVSET: u1,
    +            reserved31: u2,
    +            ///  NMI set-pending bit.
    +            NMIPENDSET: u1,
    +        }),
    +        ///  Vector table offset register
    +        VTOR: mmio.Mmio(packed struct(u32) {
    +            reserved9: u9,
    +            ///  Vector table base offset field
    +            TBLOFF: u21,
    +            padding: u2,
    +        }),
    +        ///  Application interrupt and reset control register
    +        AIRCR: mmio.Mmio(packed struct(u32) {
    +            ///  VECTRESET
    +            VECTRESET: u1,
    +            ///  VECTCLRACTIVE
    +            VECTCLRACTIVE: u1,
    +            ///  SYSRESETREQ
    +            SYSRESETREQ: u1,
    +            reserved8: u5,
    +            ///  PRIGROUP
    +            PRIGROUP: u3,
    +            reserved15: u4,
    +            ///  ENDIANESS
    +            ENDIANESS: u1,
    +            ///  Register key
    +            VECTKEYSTAT: u16,
    +        }),
    +        ///  System control register
    +        SCR: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  SLEEPONEXIT
    +            SLEEPONEXIT: u1,
    +            ///  SLEEPDEEP
    +            SLEEPDEEP: u1,
    +            reserved4: u1,
    +            ///  Send Event on Pending bit
    +            SEVEONPEND: u1,
    +            padding: u27,
    +        }),
    +        ///  Configuration and control register
    +        CCR: mmio.Mmio(packed struct(u32) {
    +            ///  Configures how the processor enters Thread mode
    +            NONBASETHRDENA: u1,
    +            ///  USERSETMPEND
    +            USERSETMPEND: u1,
    +            reserved3: u1,
    +            ///  UNALIGN_ TRP
    +            UNALIGN__TRP: u1,
    +            ///  DIV_0_TRP
    +            DIV_0_TRP: u1,
    +            reserved8: u3,
    +            ///  BFHFNMIGN
    +            BFHFNMIGN: u1,
    +            ///  STKALIGN
    +            STKALIGN: u1,
    +            padding: u22,
    +        }),
    +        ///  System handler priority registers
    +        SHPR1: mmio.Mmio(packed struct(u32) {
    +            ///  Priority of system handler 4
    +            PRI_4: u8,
    +            ///  Priority of system handler 5
    +            PRI_5: u8,
    +            ///  Priority of system handler 6
    +            PRI_6: u8,
    +            padding: u8,
    +        }),
    +        ///  System handler priority registers
    +        SHPR2: mmio.Mmio(packed struct(u32) {
    +            reserved24: u24,
    +            ///  Priority of system handler 11
    +            PRI_11: u8,
    +        }),
    +        ///  System handler priority registers
    +        SHPR3: mmio.Mmio(packed struct(u32) {
    +            reserved16: u16,
    +            ///  Priority of system handler 14
    +            PRI_14: u8,
    +            ///  Priority of system handler 15
    +            PRI_15: u8,
    +        }),
    +        ///  System handler control and state register
    +        SHCRS: mmio.Mmio(packed struct(u32) {
    +            ///  Memory management fault exception active bit
    +            MEMFAULTACT: u1,
    +            ///  Bus fault exception active bit
    +            BUSFAULTACT: u1,
    +            reserved3: u1,
    +            ///  Usage fault exception active bit
    +            USGFAULTACT: u1,
    +            reserved7: u3,
    +            ///  SVC call active bit
    +            SVCALLACT: u1,
    +            ///  Debug monitor active bit
    +            MONITORACT: u1,
    +            reserved10: u1,
    +            ///  PendSV exception active bit
    +            PENDSVACT: u1,
    +            ///  SysTick exception active bit
    +            SYSTICKACT: u1,
    +            ///  Usage fault exception pending bit
    +            USGFAULTPENDED: u1,
    +            ///  Memory management fault exception pending bit
    +            MEMFAULTPENDED: u1,
    +            ///  Bus fault exception pending bit
    +            BUSFAULTPENDED: u1,
    +            ///  SVC call pending bit
    +            SVCALLPENDED: u1,
    +            ///  Memory management fault enable bit
    +            MEMFAULTENA: u1,
    +            ///  Bus fault enable bit
    +            BUSFAULTENA: u1,
    +            ///  Usage fault enable bit
    +            USGFAULTENA: u1,
    +            padding: u13,
    +        }),
    +        ///  Configurable fault status register
    +        CFSR_UFSR_BFSR_MMFSR: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  Instruction access violation flag
    +            IACCVIOL: u1,
    +            reserved3: u1,
    +            ///  Memory manager fault on unstacking for a return from exception
    +            MUNSTKERR: u1,
    +            ///  Memory manager fault on stacking for exception entry.
    +            MSTKERR: u1,
    +            ///  MLSPERR
    +            MLSPERR: u1,
    +            reserved7: u1,
    +            ///  Memory Management Fault Address Register (MMAR) valid flag
    +            MMARVALID: u1,
    +            ///  Instruction bus error
    +            IBUSERR: u1,
    +            ///  Precise data bus error
    +            PRECISERR: u1,
    +            ///  Imprecise data bus error
    +            IMPRECISERR: u1,
    +            ///  Bus fault on unstacking for a return from exception
    +            UNSTKERR: u1,
    +            ///  Bus fault on stacking for exception entry
    +            STKERR: u1,
    +            ///  Bus fault on floating-point lazy state preservation
    +            LSPERR: u1,
    +            reserved15: u1,
    +            ///  Bus Fault Address Register (BFAR) valid flag
    +            BFARVALID: u1,
    +            ///  Undefined instruction usage fault
    +            UNDEFINSTR: u1,
    +            ///  Invalid state usage fault
    +            INVSTATE: u1,
    +            ///  Invalid PC load usage fault
    +            INVPC: u1,
    +            ///  No coprocessor usage fault.
    +            NOCP: u1,
    +            reserved24: u4,
    +            ///  Unaligned access usage fault
    +            UNALIGNED: u1,
    +            ///  Divide by zero usage fault
    +            DIVBYZERO: u1,
    +            padding: u6,
    +        }),
    +        ///  Hard fault status register
    +        HFSR: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  Vector table hard fault
    +            VECTTBL: u1,
    +            reserved30: u28,
    +            ///  Forced hard fault
    +            FORCED: u1,
    +            ///  Reserved for Debug use
    +            DEBUG_VT: u1,
    +        }),
    +        reserved52: [4]u8,
    +        ///  Memory management fault address register
    +        MMFAR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory management fault address
    +            MMFAR: u32,
    +        }),
    +        ///  Bus fault address register
    +        BFAR: mmio.Mmio(packed struct(u32) {
    +            ///  Bus fault address
    +            BFAR: u32,
    +        }),
    +        ///  Auxiliary fault status register
    +        AFSR: mmio.Mmio(packed struct(u32) {
    +            ///  Implementation defined
    +            IMPDEF: u32,
    +        }),
    +    };
    +
    +    ///  SysTick timer
    +    pub const STK = extern struct {
    +        ///  SysTick control and status register
    +        CTRL: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            ENABLE: u1,
    +            ///  SysTick exception request enable
    +            TICKINT: u1,
    +            ///  Clock source selection
    +            CLKSOURCE: u1,
    +            reserved16: u13,
    +            ///  COUNTFLAG
    +            COUNTFLAG: u1,
    +            padding: u15,
    +        }),
    +        ///  SysTick reload value register
    +        LOAD: mmio.Mmio(packed struct(u32) {
    +            ///  RELOAD value
    +            RELOAD: u24,
    +            padding: u8,
    +        }),
    +        ///  SysTick current value register
    +        VAL: mmio.Mmio(packed struct(u32) {
    +            ///  Current counter value
    +            CURRENT: u24,
    +            padding: u8,
    +        }),
    +        ///  SysTick calibration value register
    +        CALIB: mmio.Mmio(packed struct(u32) {
    +            ///  Calibration value
    +            TENMS: u24,
    +            reserved30: u6,
    +            ///  SKEW flag: Indicates whether the TENMS value is exact
    +            SKEW: u1,
    +            ///  NOREF flag. Reads as zero
    +            NOREF: u1,
    +        }),
    +    };
    +
    +    ///  Memory protection unit
    +    pub const MPU = extern struct {
    +        ///  MPU type register
    +        MPU_TYPER: mmio.Mmio(packed struct(u32) {
    +            ///  Separate flag
    +            SEPARATE: u1,
    +            reserved8: u7,
    +            ///  Number of MPU data regions
    +            DREGION: u8,
    +            ///  Number of MPU instruction regions
    +            IREGION: u8,
    +            padding: u8,
    +        }),
    +        ///  MPU control register
    +        MPU_CTRL: mmio.Mmio(packed struct(u32) {
    +            ///  Enables the MPU
    +            ENABLE: u1,
    +            ///  Enables the operation of MPU during hard fault
    +            HFNMIENA: u1,
    +            ///  Enable priviliged software access to default memory map
    +            PRIVDEFENA: u1,
    +            padding: u29,
    +        }),
    +        ///  MPU region number register
    +        MPU_RNR: mmio.Mmio(packed struct(u32) {
    +            ///  MPU region
    +            REGION: u8,
    +            padding: u24,
    +        }),
    +        ///  MPU region base address register
    +        MPU_RBAR: mmio.Mmio(packed struct(u32) {
    +            ///  MPU region field
    +            REGION: u4,
    +            ///  MPU region number valid
    +            VALID: u1,
    +            ///  Region base address field
    +            ADDR: u27,
    +        }),
    +        ///  MPU region attribute and size register
    +        MPU_RASR: mmio.Mmio(packed struct(u32) {
    +            ///  Region enable bit.
    +            ENABLE: u1,
    +            ///  Size of the MPU protection region
    +            SIZE: u5,
    +            reserved8: u2,
    +            ///  Subregion disable bits
    +            SRD: u8,
    +            ///  memory attribute
    +            B: u1,
    +            ///  memory attribute
    +            C: u1,
    +            ///  Shareable memory attribute
    +            S: u1,
    +            ///  memory attribute
    +            TEX: u3,
    +            reserved24: u2,
    +            ///  Access permission
    +            AP: u3,
    +            reserved28: u1,
    +            ///  Instruction access disable bit
    +            XN: u1,
    +            padding: u3,
    +        }),
    +    };
    +
    +    ///  Floting point unit
    +    pub const FPU = extern struct {
    +        ///  Floating-point context control register
    +        FPCCR: mmio.Mmio(packed struct(u32) {
    +            ///  LSPACT
    +            LSPACT: u1,
    +            ///  USER
    +            USER: u1,
    +            reserved3: u1,
    +            ///  THREAD
    +            THREAD: u1,
    +            ///  HFRDY
    +            HFRDY: u1,
    +            ///  MMRDY
    +            MMRDY: u1,
    +            ///  BFRDY
    +            BFRDY: u1,
    +            reserved8: u1,
    +            ///  MONRDY
    +            MONRDY: u1,
    +            reserved30: u21,
    +            ///  LSPEN
    +            LSPEN: u1,
    +            ///  ASPEN
    +            ASPEN: u1,
    +        }),
    +        ///  Floating-point context address register
    +        FPCAR: mmio.Mmio(packed struct(u32) {
    +            reserved3: u3,
    +            ///  Location of unpopulated floating-point
    +            ADDRESS: u29,
    +        }),
    +        ///  Floating-point status control register
    +        FPSCR: mmio.Mmio(packed struct(u32) {
    +            ///  Invalid operation cumulative exception bit
    +            IOC: u1,
    +            ///  Division by zero cumulative exception bit.
    +            DZC: u1,
    +            ///  Overflow cumulative exception bit
    +            OFC: u1,
    +            ///  Underflow cumulative exception bit
    +            UFC: u1,
    +            ///  Inexact cumulative exception bit
    +            IXC: u1,
    +            reserved7: u2,
    +            ///  Input denormal cumulative exception bit.
    +            IDC: u1,
    +            reserved22: u14,
    +            ///  Rounding Mode control field
    +            RMode: u2,
    +            ///  Flush-to-zero mode control bit:
    +            FZ: u1,
    +            ///  Default NaN mode control bit
    +            DN: u1,
    +            ///  Alternative half-precision control bit
    +            AHP: u1,
    +            reserved28: u1,
    +            ///  Overflow condition code flag
    +            V: u1,
    +            ///  Carry condition code flag
    +            C: u1,
    +            ///  Zero condition code flag
    +            Z: u1,
    +            ///  Negative condition code flag
    +            N: u1,
    +        }),
    +    };
    +
    +    ///  Basic timers
    +    pub const TIM6 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            ///  One-pulse mode
    +            OPM: u1,
    +            reserved7: u3,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            padding: u24,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            reserved4: u4,
    +            ///  Master mode selection
    +            MMS: u3,
    +            padding: u25,
    +        }),
    +        reserved12: [4]u8,
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            reserved8: u7,
    +            ///  Update DMA request enable
    +            UDE: u1,
    +            padding: u23,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            padding: u31,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            padding: u31,
    +        }),
    +        reserved36: [12]u8,
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  Low counter value
    +            CNT: u16,
    +            padding: u16,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Low Auto-reload value
    +            ARR: u16,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  Ethernet: MAC management counters
    +    pub const Ethernet_MMC = extern struct {
    +        ///  Ethernet MMC control register
    +        MMCCR: mmio.Mmio(packed struct(u32) {
    +            ///  CR
    +            CR: u1,
    +            ///  CSR
    +            CSR: u1,
    +            ///  ROR
    +            ROR: u1,
    +            ///  MCF
    +            MCF: u1,
    +            ///  MCP
    +            MCP: u1,
    +            ///  MCFHP
    +            MCFHP: u1,
    +            padding: u26,
    +        }),
    +        ///  Ethernet MMC receive interrupt register
    +        MMCRIR: mmio.Mmio(packed struct(u32) {
    +            reserved5: u5,
    +            ///  RFCES
    +            RFCES: u1,
    +            ///  RFAES
    +            RFAES: u1,
    +            reserved17: u10,
    +            ///  RGUFS
    +            RGUFS: u1,
    +            padding: u14,
    +        }),
    +        ///  Ethernet MMC transmit interrupt register
    +        MMCTIR: mmio.Mmio(packed struct(u32) {
    +            reserved14: u14,
    +            ///  TGFSCS
    +            TGFSCS: u1,
    +            ///  TGFMSCS
    +            TGFMSCS: u1,
    +            reserved21: u5,
    +            ///  TGFS
    +            TGFS: u1,
    +            padding: u10,
    +        }),
    +        ///  Ethernet MMC receive interrupt mask register
    +        MMCRIMR: mmio.Mmio(packed struct(u32) {
    +            reserved5: u5,
    +            ///  RFCEM
    +            RFCEM: u1,
    +            ///  RFAEM
    +            RFAEM: u1,
    +            reserved17: u10,
    +            ///  RGUFM
    +            RGUFM: u1,
    +            padding: u14,
    +        }),
    +        ///  Ethernet MMC transmit interrupt mask register
    +        MMCTIMR: mmio.Mmio(packed struct(u32) {
    +            reserved14: u14,
    +            ///  TGFSCM
    +            TGFSCM: u1,
    +            ///  TGFMSCM
    +            TGFMSCM: u1,
    +            ///  TGFM
    +            TGFM: u1,
    +            padding: u15,
    +        }),
    +        reserved76: [56]u8,
    +        ///  Ethernet MMC transmitted good frames after a single collision counter
    +        MMCTGFSCCR: mmio.Mmio(packed struct(u32) {
    +            ///  TGFSCC
    +            TGFSCC: u32,
    +        }),
    +        ///  Ethernet MMC transmitted good frames after more than a single collision
    +        MMCTGFMSCCR: mmio.Mmio(packed struct(u32) {
    +            ///  TGFMSCC
    +            TGFMSCC: u32,
    +        }),
    +        reserved104: [20]u8,
    +        ///  Ethernet MMC transmitted good frames counter register
    +        MMCTGFCR: mmio.Mmio(packed struct(u32) {
    +            ///  HTL
    +            TGFC: u32,
    +        }),
    +        reserved148: [40]u8,
    +        ///  Ethernet MMC received frames with CRC error counter register
    +        MMCRFCECR: mmio.Mmio(packed struct(u32) {
    +            ///  RFCFC
    +            RFCFC: u32,
    +        }),
    +        ///  Ethernet MMC received frames with alignment error counter register
    +        MMCRFAECR: mmio.Mmio(packed struct(u32) {
    +            ///  RFAEC
    +            RFAEC: u32,
    +        }),
    +        reserved196: [40]u8,
    +        ///  MMC received good unicast frames counter register
    +        MMCRGUFCR: mmio.Mmio(packed struct(u32) {
    +            ///  RGUFC
    +            RGUFC: u32,
    +        }),
    +    };
    +
    +    ///  General-purpose I/Os
    +    pub const GPIOB = extern struct {
    +        ///  GPIO port mode register
    +        MODER: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER0: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER1: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER2: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER3: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER4: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER5: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER6: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER7: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER8: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER9: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER10: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER11: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER12: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER13: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER14: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER15: u2,
    +        }),
    +        ///  GPIO port output type register
    +        OTYPER: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            OT0: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT1: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT2: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT3: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT4: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT5: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT6: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT7: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT8: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT9: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT10: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT11: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT12: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT13: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT14: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT15: u1,
    +            padding: u16,
    +        }),
    +        ///  GPIO port output speed register
    +        OSPEEDR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR0: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR1: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR2: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR3: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR4: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR5: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR6: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR7: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR8: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR9: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR10: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR11: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR12: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR13: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR14: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR15: u2,
    +        }),
    +        ///  GPIO port pull-up/pull-down register
    +        PUPDR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR0: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR1: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR2: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR3: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR4: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR5: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR6: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR7: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR8: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR9: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR10: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR11: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR12: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR13: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR14: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR15: u2,
    +        }),
    +        ///  GPIO port input data register
    +        IDR: mmio.Mmio(packed struct(u32) {
    +            ///  Port input data (y = 0..15)
    +            IDR0: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR1: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR2: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR3: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR4: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR5: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR6: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR7: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR8: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR9: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR10: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR11: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR12: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR13: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR14: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR15: u1,
    +            padding: u16,
    +        }),
    +        ///  GPIO port output data register
    +        ODR: mmio.Mmio(packed struct(u32) {
    +            ///  Port output data (y = 0..15)
    +            ODR0: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR1: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR2: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR3: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR4: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR5: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR6: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR7: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR8: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR9: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR10: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR11: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR12: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR13: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR14: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR15: u1,
    +            padding: u16,
    +        }),
    +        ///  GPIO port bit set/reset register
    +        BSRR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x set bit y (y= 0..15)
    +            BS0: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS1: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS2: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS3: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS4: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS5: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS6: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS7: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS8: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS9: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS10: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS11: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS12: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS13: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS14: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS15: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BR0: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR1: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR2: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR3: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR4: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR5: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR6: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR7: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR8: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR9: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR10: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR11: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR12: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR13: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR14: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR15: u1,
    +        }),
    +        ///  GPIO port configuration lock register
    +        LCKR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK0: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK1: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK2: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK3: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK4: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK5: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK6: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK7: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK8: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK9: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK10: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK11: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK12: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK13: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK14: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK15: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCKK: u1,
    +            padding: u15,
    +        }),
    +        ///  GPIO alternate function low register
    +        AFRL: mmio.Mmio(packed struct(u32) {
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL0: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL1: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL2: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL3: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL4: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL5: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL6: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL7: u4,
    +        }),
    +        ///  GPIO alternate function high register
    +        AFRH: mmio.Mmio(packed struct(u32) {
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH8: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH9: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH10: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH11: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH12: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH13: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH14: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH15: u4,
    +        }),
    +    };
    +
    +    ///  General-purpose I/Os
    +    pub const GPIOA = extern struct {
    +        ///  GPIO port mode register
    +        MODER: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER0: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER1: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER2: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER3: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER4: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER5: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER6: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER7: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER8: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER9: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER10: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER11: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER12: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER13: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER14: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            MODER15: u2,
    +        }),
    +        ///  GPIO port output type register
    +        OTYPER: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            OT0: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT1: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT2: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT3: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT4: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT5: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT6: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT7: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT8: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT9: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT10: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT11: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT12: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT13: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT14: u1,
    +            ///  Port x configuration bits (y = 0..15)
    +            OT15: u1,
    +            padding: u16,
    +        }),
    +        ///  GPIO port output speed register
    +        OSPEEDR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR0: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR1: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR2: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR3: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR4: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR5: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR6: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR7: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR8: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR9: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR10: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR11: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR12: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR13: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR14: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            OSPEEDR15: u2,
    +        }),
    +        ///  GPIO port pull-up/pull-down register
    +        PUPDR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR0: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR1: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR2: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR3: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR4: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR5: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR6: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR7: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR8: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR9: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR10: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR11: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR12: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR13: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR14: u2,
    +            ///  Port x configuration bits (y = 0..15)
    +            PUPDR15: u2,
    +        }),
    +        ///  GPIO port input data register
    +        IDR: mmio.Mmio(packed struct(u32) {
    +            ///  Port input data (y = 0..15)
    +            IDR0: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR1: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR2: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR3: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR4: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR5: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR6: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR7: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR8: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR9: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR10: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR11: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR12: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR13: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR14: u1,
    +            ///  Port input data (y = 0..15)
    +            IDR15: u1,
    +            padding: u16,
    +        }),
    +        ///  GPIO port output data register
    +        ODR: mmio.Mmio(packed struct(u32) {
    +            ///  Port output data (y = 0..15)
    +            ODR0: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR1: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR2: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR3: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR4: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR5: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR6: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR7: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR8: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR9: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR10: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR11: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR12: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR13: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR14: u1,
    +            ///  Port output data (y = 0..15)
    +            ODR15: u1,
    +            padding: u16,
    +        }),
    +        ///  GPIO port bit set/reset register
    +        BSRR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x set bit y (y= 0..15)
    +            BS0: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS1: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS2: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS3: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS4: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS5: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS6: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS7: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS8: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS9: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS10: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS11: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS12: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS13: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS14: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BS15: u1,
    +            ///  Port x set bit y (y= 0..15)
    +            BR0: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR1: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR2: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR3: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR4: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR5: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR6: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR7: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR8: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR9: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR10: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR11: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR12: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR13: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR14: u1,
    +            ///  Port x reset bit y (y = 0..15)
    +            BR15: u1,
    +        }),
    +        ///  GPIO port configuration lock register
    +        LCKR: mmio.Mmio(packed struct(u32) {
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK0: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK1: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK2: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK3: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK4: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK5: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK6: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK7: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK8: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK9: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK10: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK11: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK12: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK13: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK14: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCK15: u1,
    +            ///  Port x lock bit y (y= 0..15)
    +            LCKK: u1,
    +            padding: u15,
    +        }),
    +        ///  GPIO alternate function low register
    +        AFRL: mmio.Mmio(packed struct(u32) {
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL0: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL1: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL2: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL3: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL4: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL5: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL6: u4,
    +            ///  Alternate function selection for port x bit y (y = 0..7)
    +            AFRL7: u4,
    +        }),
    +        ///  GPIO alternate function high register
    +        AFRH: mmio.Mmio(packed struct(u32) {
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH8: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH9: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH10: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH11: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH12: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH13: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH14: u4,
    +            ///  Alternate function selection for port x bit y (y = 8..15)
    +            AFRH15: u4,
    +        }),
    +    };
    +
    +    ///  System configuration controller
    +    pub const SYSCFG = extern struct {
    +        ///  memory remap register
    +        MEMRM: mmio.Mmio(packed struct(u32) {
    +            ///  Memory mapping selection
    +            MEM_MODE: u3,
    +            reserved8: u5,
    +            ///  Flash bank mode selection
    +            FB_MODE: u1,
    +            reserved10: u1,
    +            ///  FMC memory mapping swap
    +            SWP_FMC: u2,
    +            padding: u20,
    +        }),
    +        ///  peripheral mode configuration register
    +        PMC: mmio.Mmio(packed struct(u32) {
    +            reserved16: u16,
    +            ///  ADC1DC2
    +            ADC1DC2: u1,
    +            ///  ADC2DC2
    +            ADC2DC2: u1,
    +            ///  ADC3DC2
    +            ADC3DC2: u1,
    +            reserved23: u4,
    +            ///  Ethernet PHY interface selection
    +            MII_RMII_SEL: u1,
    +            padding: u8,
    +        }),
    +        ///  external interrupt configuration register 1
    +        EXTICR1: mmio.Mmio(packed struct(u32) {
    +            ///  EXTI x configuration (x = 0 to 3)
    +            EXTI0: u4,
    +            ///  EXTI x configuration (x = 0 to 3)
    +            EXTI1: u4,
    +            ///  EXTI x configuration (x = 0 to 3)
    +            EXTI2: u4,
    +            ///  EXTI x configuration (x = 0 to 3)
    +            EXTI3: u4,
    +            padding: u16,
    +        }),
    +        ///  external interrupt configuration register 2
    +        EXTICR2: mmio.Mmio(packed struct(u32) {
    +            ///  EXTI x configuration (x = 4 to 7)
    +            EXTI4: u4,
    +            ///  EXTI x configuration (x = 4 to 7)
    +            EXTI5: u4,
    +            ///  EXTI x configuration (x = 4 to 7)
    +            EXTI6: u4,
    +            ///  EXTI x configuration (x = 4 to 7)
    +            EXTI7: u4,
    +            padding: u16,
    +        }),
    +        ///  external interrupt configuration register 3
    +        EXTICR3: mmio.Mmio(packed struct(u32) {
    +            ///  EXTI x configuration (x = 8 to 11)
    +            EXTI8: u4,
    +            ///  EXTI x configuration (x = 8 to 11)
    +            EXTI9: u4,
    +            ///  EXTI10
    +            EXTI10: u4,
    +            ///  EXTI x configuration (x = 8 to 11)
    +            EXTI11: u4,
    +            padding: u16,
    +        }),
    +        ///  external interrupt configuration register 4
    +        EXTICR4: mmio.Mmio(packed struct(u32) {
    +            ///  EXTI x configuration (x = 12 to 15)
    +            EXTI12: u4,
    +            ///  EXTI x configuration (x = 12 to 15)
    +            EXTI13: u4,
    +            ///  EXTI x configuration (x = 12 to 15)
    +            EXTI14: u4,
    +            ///  EXTI x configuration (x = 12 to 15)
    +            EXTI15: u4,
    +            padding: u16,
    +        }),
    +        reserved32: [8]u8,
    +        ///  Compensation cell control register
    +        CMPCR: mmio.Mmio(packed struct(u32) {
    +            ///  Compensation cell power-down
    +            CMP_PD: u1,
    +            reserved8: u7,
    +            ///  READY
    +            READY: u1,
    +            padding: u23,
    +        }),
    +    };
    +
    +    ///  Serial peripheral interface
    +    pub const SPI1 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Clock phase
    +            CPHA: u1,
    +            ///  Clock polarity
    +            CPOL: u1,
    +            ///  Master selection
    +            MSTR: u1,
    +            ///  Baud rate control
    +            BR: u3,
    +            ///  SPI enable
    +            SPE: u1,
    +            ///  Frame format
    +            LSBFIRST: u1,
    +            ///  Internal slave select
    +            SSI: u1,
    +            ///  Software slave management
    +            SSM: u1,
    +            ///  Receive only
    +            RXONLY: u1,
    +            ///  Data frame format
    +            DFF: u1,
    +            ///  CRC transfer next
    +            CRCNEXT: u1,
    +            ///  Hardware CRC calculation enable
    +            CRCEN: u1,
    +            ///  Output enable in bidirectional mode
    +            BIDIOE: u1,
    +            ///  Bidirectional data mode enable
    +            BIDIMODE: u1,
    +            padding: u16,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            ///  Rx buffer DMA enable
    +            RXDMAEN: u1,
    +            ///  Tx buffer DMA enable
    +            TXDMAEN: u1,
    +            ///  SS output enable
    +            SSOE: u1,
    +            reserved4: u1,
    +            ///  Frame format
    +            FRF: u1,
    +            ///  Error interrupt enable
    +            ERRIE: u1,
    +            ///  RX buffer not empty interrupt enable
    +            RXNEIE: u1,
    +            ///  Tx buffer empty interrupt enable
    +            TXEIE: u1,
    +            padding: u24,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Receive buffer not empty
    +            RXNE: u1,
    +            ///  Transmit buffer empty
    +            TXE: u1,
    +            ///  Channel side
    +            CHSIDE: u1,
    +            ///  Underrun flag
    +            UDR: u1,
    +            ///  CRC error flag
    +            CRCERR: u1,
    +            ///  Mode fault
    +            MODF: u1,
    +            ///  Overrun flag
    +            OVR: u1,
    +            ///  Busy flag
    +            BSY: u1,
    +            ///  TI frame format error
    +            TIFRFE: u1,
    +            padding: u23,
    +        }),
    +        ///  data register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  Data register
    +            DR: u16,
    +            padding: u16,
    +        }),
    +        ///  CRC polynomial register
    +        CRCPR: mmio.Mmio(packed struct(u32) {
    +            ///  CRC polynomial register
    +            CRCPOLY: u16,
    +            padding: u16,
    +        }),
    +        ///  RX CRC register
    +        RXCRCR: mmio.Mmio(packed struct(u32) {
    +            ///  Rx CRC register
    +            RxCRC: u16,
    +            padding: u16,
    +        }),
    +        ///  TX CRC register
    +        TXCRCR: mmio.Mmio(packed struct(u32) {
    +            ///  Tx CRC register
    +            TxCRC: u16,
    +            padding: u16,
    +        }),
    +        ///  I2S configuration register
    +        I2SCFGR: mmio.Mmio(packed struct(u32) {
    +            ///  Channel length (number of bits per audio channel)
    +            CHLEN: u1,
    +            ///  Data length to be transferred
    +            DATLEN: u2,
    +            ///  Steady state clock polarity
    +            CKPOL: u1,
    +            ///  I2S standard selection
    +            I2SSTD: u2,
    +            reserved7: u1,
    +            ///  PCM frame synchronization
    +            PCMSYNC: u1,
    +            ///  I2S configuration mode
    +            I2SCFG: u2,
    +            ///  I2S Enable
    +            I2SE: u1,
    +            ///  I2S mode selection
    +            I2SMOD: u1,
    +            padding: u20,
    +        }),
    +        ///  I2S prescaler register
    +        I2SPR: mmio.Mmio(packed struct(u32) {
    +            ///  I2S Linear prescaler
    +            I2SDIV: u8,
    +            ///  Odd factor for the prescaler
    +            ODD: u1,
    +            ///  Master clock output enable
    +            MCKOE: u1,
    +            padding: u22,
    +        }),
    +    };
    +
    +    ///  Inter-integrated circuit
    +    pub const I2C3 = extern struct {
    +        ///  Control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral enable
    +            PE: u1,
    +            ///  SMBus mode
    +            SMBUS: u1,
    +            reserved3: u1,
    +            ///  SMBus type
    +            SMBTYPE: u1,
    +            ///  ARP enable
    +            ENARP: u1,
    +            ///  PEC enable
    +            ENPEC: u1,
    +            ///  General call enable
    +            ENGC: u1,
    +            ///  Clock stretching disable (Slave mode)
    +            NOSTRETCH: u1,
    +            ///  Start generation
    +            START: u1,
    +            ///  Stop generation
    +            STOP: u1,
    +            ///  Acknowledge enable
    +            ACK: u1,
    +            ///  Acknowledge/PEC Position (for data reception)
    +            POS: u1,
    +            ///  Packet error checking
    +            PEC: u1,
    +            ///  SMBus alert
    +            ALERT: u1,
    +            reserved15: u1,
    +            ///  Software reset
    +            SWRST: u1,
    +            padding: u16,
    +        }),
    +        ///  Control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral clock frequency
    +            FREQ: u6,
    +            reserved8: u2,
    +            ///  Error interrupt enable
    +            ITERREN: u1,
    +            ///  Event interrupt enable
    +            ITEVTEN: u1,
    +            ///  Buffer interrupt enable
    +            ITBUFEN: u1,
    +            ///  DMA requests enable
    +            DMAEN: u1,
    +            ///  DMA last transfer
    +            LAST: u1,
    +            padding: u19,
    +        }),
    +        ///  Own address register 1
    +        OAR1: mmio.Mmio(packed struct(u32) {
    +            ///  Interface address
    +            ADD0: u1,
    +            ///  Interface address
    +            ADD7: u7,
    +            ///  Interface address
    +            ADD10: u2,
    +            reserved15: u5,
    +            ///  Addressing mode (slave mode)
    +            ADDMODE: u1,
    +            padding: u16,
    +        }),
    +        ///  Own address register 2
    +        OAR2: mmio.Mmio(packed struct(u32) {
    +            ///  Dual addressing mode enable
    +            ENDUAL: u1,
    +            ///  Interface address
    +            ADD2: u7,
    +            padding: u24,
    +        }),
    +        ///  Data register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  8-bit data register
    +            DR: u8,
    +            padding: u24,
    +        }),
    +        ///  Status register 1
    +        SR1: mmio.Mmio(packed struct(u32) {
    +            ///  Start bit (Master mode)
    +            SB: u1,
    +            ///  Address sent (master mode)/matched (slave mode)
    +            ADDR: u1,
    +            ///  Byte transfer finished
    +            BTF: u1,
    +            ///  10-bit header sent (Master mode)
    +            ADD10: u1,
    +            ///  Stop detection (slave mode)
    +            STOPF: u1,
    +            reserved6: u1,
    +            ///  Data register not empty (receivers)
    +            RxNE: u1,
    +            ///  Data register empty (transmitters)
    +            TxE: u1,
    +            ///  Bus error
    +            BERR: u1,
    +            ///  Arbitration lost (master mode)
    +            ARLO: u1,
    +            ///  Acknowledge failure
    +            AF: u1,
    +            ///  Overrun/Underrun
    +            OVR: u1,
    +            ///  PEC Error in reception
    +            PECERR: u1,
    +            reserved14: u1,
    +            ///  Timeout or Tlow error
    +            TIMEOUT: u1,
    +            ///  SMBus alert
    +            SMBALERT: u1,
    +            padding: u16,
    +        }),
    +        ///  Status register 2
    +        SR2: mmio.Mmio(packed struct(u32) {
    +            ///  Master/slave
    +            MSL: u1,
    +            ///  Bus busy
    +            BUSY: u1,
    +            ///  Transmitter/receiver
    +            TRA: u1,
    +            reserved4: u1,
    +            ///  General call address (Slave mode)
    +            GENCALL: u1,
    +            ///  SMBus device default address (Slave mode)
    +            SMBDEFAULT: u1,
    +            ///  SMBus host header (Slave mode)
    +            SMBHOST: u1,
    +            ///  Dual flag (Slave mode)
    +            DUALF: u1,
    +            ///  acket error checking register
    +            PEC: u8,
    +            padding: u16,
    +        }),
    +        ///  Clock control register
    +        CCR: mmio.Mmio(packed struct(u32) {
    +            ///  Clock control register in Fast/Standard mode (Master mode)
    +            CCR: u12,
    +            reserved14: u2,
    +            ///  Fast mode duty cycle
    +            DUTY: u1,
    +            ///  I2C master mode selection
    +            F_S: u1,
    +            padding: u16,
    +        }),
    +        ///  TRISE register
    +        TRISE: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum rise time in Fast/Standard mode (Master mode)
    +            TRISE: u6,
    +            padding: u26,
    +        }),
    +        ///  I2C FLTR register
    +        FLTR: mmio.Mmio(packed struct(u32) {
    +            ///  Digital noise filter
    +            DNF: u4,
    +            ///  Analog noise filter OFF
    +            ANOFF: u1,
    +            padding: u27,
    +        }),
    +    };
    +
    +    ///  DMA2D controller
    +    pub const DMA2D = extern struct {
    +        ///  control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  Start
    +            START: u1,
    +            ///  Suspend
    +            SUSP: u1,
    +            ///  Abort
    +            ABORT: u1,
    +            reserved8: u5,
    +            ///  Transfer error interrupt enable
    +            TEIE: u1,
    +            ///  Transfer complete interrupt enable
    +            TCIE: u1,
    +            ///  Transfer watermark interrupt enable
    +            TWIE: u1,
    +            ///  CLUT access error interrupt enable
    +            CAEIE: u1,
    +            ///  CLUT transfer complete interrupt enable
    +            CTCIE: u1,
    +            ///  Configuration Error Interrupt Enable
    +            CEIE: u1,
    +            reserved16: u2,
    +            ///  DMA2D mode
    +            MODE: u2,
    +            padding: u14,
    +        }),
    +        ///  Interrupt Status Register
    +        ISR: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer error interrupt flag
    +            TEIF: u1,
    +            ///  Transfer complete interrupt flag
    +            TCIF: u1,
    +            ///  Transfer watermark interrupt flag
    +            TWIF: u1,
    +            ///  CLUT access error interrupt flag
    +            CAEIF: u1,
    +            ///  CLUT transfer complete interrupt flag
    +            CTCIF: u1,
    +            ///  Configuration error interrupt flag
    +            CEIF: u1,
    +            padding: u26,
    +        }),
    +        ///  interrupt flag clear register
    +        IFCR: mmio.Mmio(packed struct(u32) {
    +            ///  Clear Transfer error interrupt flag
    +            CTEIF: u1,
    +            ///  Clear transfer complete interrupt flag
    +            CTCIF: u1,
    +            ///  Clear transfer watermark interrupt flag
    +            CTWIF: u1,
    +            ///  Clear CLUT access error interrupt flag
    +            CAECIF: u1,
    +            ///  Clear CLUT transfer complete interrupt flag
    +            CCTCIF: u1,
    +            ///  Clear configuration error interrupt flag
    +            CCEIF: u1,
    +            padding: u26,
    +        }),
    +        ///  foreground memory address register
    +        FGMAR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory address
    +            MA: u32,
    +        }),
    +        ///  foreground offset register
    +        FGOR: mmio.Mmio(packed struct(u32) {
    +            ///  Line offset
    +            LO: u14,
    +            padding: u18,
    +        }),
    +        ///  background memory address register
    +        BGMAR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory address
    +            MA: u32,
    +        }),
    +        ///  background offset register
    +        BGOR: mmio.Mmio(packed struct(u32) {
    +            ///  Line offset
    +            LO: u14,
    +            padding: u18,
    +        }),
    +        ///  foreground PFC control register
    +        FGPFCCR: mmio.Mmio(packed struct(u32) {
    +            ///  Color mode
    +            CM: u4,
    +            ///  CLUT color mode
    +            CCM: u1,
    +            ///  Start
    +            START: u1,
    +            reserved8: u2,
    +            ///  CLUT size
    +            CS: u8,
    +            ///  Alpha mode
    +            AM: u2,
    +            reserved24: u6,
    +            ///  Alpha value
    +            ALPHA: u8,
    +        }),
    +        ///  foreground color register
    +        FGCOLR: mmio.Mmio(packed struct(u32) {
    +            ///  Blue Value
    +            BLUE: u8,
    +            ///  Green Value
    +            GREEN: u8,
    +            ///  Red Value
    +            RED: u8,
    +            padding: u8,
    +        }),
    +        ///  background PFC control register
    +        BGPFCCR: mmio.Mmio(packed struct(u32) {
    +            ///  Color mode
    +            CM: u4,
    +            ///  CLUT Color mode
    +            CCM: u1,
    +            ///  Start
    +            START: u1,
    +            reserved8: u2,
    +            ///  CLUT size
    +            CS: u8,
    +            ///  Alpha mode
    +            AM: u2,
    +            reserved24: u6,
    +            ///  Alpha value
    +            ALPHA: u8,
    +        }),
    +        ///  background color register
    +        BGCOLR: mmio.Mmio(packed struct(u32) {
    +            ///  Blue Value
    +            BLUE: u8,
    +            ///  Green Value
    +            GREEN: u8,
    +            ///  Red Value
    +            RED: u8,
    +            padding: u8,
    +        }),
    +        ///  foreground CLUT memory address register
    +        FGCMAR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory Address
    +            MA: u32,
    +        }),
    +        ///  background CLUT memory address register
    +        BGCMAR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory address
    +            MA: u32,
    +        }),
    +        ///  output PFC control register
    +        OPFCCR: mmio.Mmio(packed struct(u32) {
    +            ///  Color mode
    +            CM: u3,
    +            padding: u29,
    +        }),
    +        ///  output color register
    +        OCOLR: mmio.Mmio(packed struct(u32) {
    +            ///  Blue Value
    +            BLUE: u8,
    +            ///  Green Value
    +            GREEN: u8,
    +            ///  Red Value
    +            RED: u8,
    +            ///  Alpha Channel Value
    +            APLHA: u8,
    +        }),
    +        ///  output memory address register
    +        OMAR: mmio.Mmio(packed struct(u32) {
    +            ///  Memory Address
    +            MA: u32,
    +        }),
    +        ///  output offset register
    +        OOR: mmio.Mmio(packed struct(u32) {
    +            ///  Line Offset
    +            LO: u14,
    +            padding: u18,
    +        }),
    +        ///  number of line register
    +        NLR: mmio.Mmio(packed struct(u32) {
    +            ///  Number of lines
    +            NL: u16,
    +            ///  Pixel per lines
    +            PL: u14,
    +            padding: u2,
    +        }),
    +        ///  line watermark register
    +        LWR: mmio.Mmio(packed struct(u32) {
    +            ///  Line watermark
    +            LW: u16,
    +            padding: u16,
    +        }),
    +        ///  AHB master timer configuration register
    +        AMTCR: mmio.Mmio(packed struct(u32) {
    +            ///  Enable
    +            EN: u1,
    +            reserved8: u7,
    +            ///  Dead Time
    +            DT: u8,
    +            padding: u16,
    +        }),
    +        reserved1024: [944]u8,
    +        ///  FGCLUT
    +        FGCLUT: mmio.Mmio(packed struct(u32) {
    +            ///  BLUE
    +            BLUE: u8,
    +            ///  GREEN
    +            GREEN: u8,
    +            ///  RED
    +            RED: u8,
    +            ///  APLHA
    +            APLHA: u8,
    +        }),
    +        reserved2048: [1020]u8,
    +        ///  BGCLUT
    +        BGCLUT: mmio.Mmio(packed struct(u32) {
    +            ///  BLUE
    +            BLUE: u8,
    +            ///  GREEN
    +            GREEN: u8,
    +            ///  RED
    +            RED: u8,
    +            ///  APLHA
    +            APLHA: u8,
    +        }),
    +    };
    +
    +    ///  Serial audio interface
    +    pub const SAI = extern struct {
    +        reserved4: [4]u8,
    +        ///  AConfiguration register 1
    +        ACR1: mmio.Mmio(packed struct(u32) {
    +            ///  Audio block mode
    +            MODE: u2,
    +            ///  Protocol configuration
    +            PRTCFG: u2,
    +            reserved5: u1,
    +            ///  Data size
    +            DS: u3,
    +            ///  Least significant bit first
    +            LSBFIRST: u1,
    +            ///  Clock strobing edge
    +            CKSTR: u1,
    +            ///  Synchronization enable
    +            SYNCEN: u2,
    +            ///  Mono mode
    +            MONO: u1,
    +            ///  Output drive
    +            OutDri: u1,
    +            reserved16: u2,
    +            ///  Audio block A enable
    +            SAIAEN: u1,
    +            ///  DMA enable
    +            DMAEN: u1,
    +            reserved19: u1,
    +            ///  No divider
    +            NODIV: u1,
    +            ///  Master clock divider
    +            MCJDIV: u4,
    +            padding: u8,
    +        }),
    +        ///  AConfiguration register 2
    +        ACR2: mmio.Mmio(packed struct(u32) {
    +            ///  FIFO threshold
    +            FTH: u3,
    +            ///  FIFO flush
    +            FFLUS: u1,
    +            ///  Tristate management on data line
    +            TRIS: u1,
    +            ///  Mute
    +            MUTE: u1,
    +            ///  Mute value
    +            MUTEVAL: u1,
    +            ///  Mute counter
    +            MUTECN: u6,
    +            ///  Complement bit
    +            CPL: u1,
    +            ///  Companding mode
    +            COMP: u2,
    +            padding: u16,
    +        }),
    +        ///  AFRCR
    +        AFRCR: mmio.Mmio(packed struct(u32) {
    +            ///  Frame length
    +            FRL: u8,
    +            ///  Frame synchronization active level length
    +            FSALL: u7,
    +            reserved16: u1,
    +            ///  Frame synchronization definition
    +            FSDEF: u1,
    +            ///  Frame synchronization polarity
    +            FSPOL: u1,
    +            ///  Frame synchronization offset
    +            FSOFF: u1,
    +            padding: u13,
    +        }),
    +        ///  ASlot register
    +        ASLOTR: mmio.Mmio(packed struct(u32) {
    +            ///  First bit offset
    +            FBOFF: u5,
    +            reserved6: u1,
    +            ///  Slot size
    +            SLOTSZ: u2,
    +            ///  Number of slots in an audio frame
    +            NBSLOT: u4,
    +            reserved16: u4,
    +            ///  Slot enable
    +            SLOTEN: u16,
    +        }),
    +        ///  AInterrupt mask register2
    +        AIM: mmio.Mmio(packed struct(u32) {
    +            ///  Overrun/underrun interrupt enable
    +            OVRUDRIE: u1,
    +            ///  Mute detection interrupt enable
    +            MUTEDET: u1,
    +            ///  Wrong clock configuration interrupt enable
    +            WCKCFG: u1,
    +            ///  FIFO request interrupt enable
    +            FREQIE: u1,
    +            ///  Codec not ready interrupt enable
    +            CNRDYIE: u1,
    +            ///  Anticipated frame synchronization detection interrupt enable
    +            AFSDETIE: u1,
    +            ///  Late frame synchronization detection interrupt enable
    +            LFSDET: u1,
    +            padding: u25,
    +        }),
    +        ///  AStatus register
    +        ASR: mmio.Mmio(packed struct(u32) {
    +            ///  Overrun / underrun
    +            OVRUDR: u1,
    +            ///  Mute detection
    +            MUTEDET: u1,
    +            ///  Wrong clock configuration flag. This bit is read only.
    +            WCKCFG: u1,
    +            ///  FIFO request
    +            FREQ: u1,
    +            ///  Codec not ready
    +            CNRDY: u1,
    +            ///  Anticipated frame synchronization detection
    +            AFSDET: u1,
    +            ///  Late frame synchronization detection
    +            LFSDET: u1,
    +            reserved16: u9,
    +            ///  FIFO level threshold
    +            FLVL: u3,
    +            padding: u13,
    +        }),
    +        ///  AClear flag register
    +        ACLRFR: mmio.Mmio(packed struct(u32) {
    +            ///  Clear overrun / underrun
    +            OVRUDR: u1,
    +            ///  Mute detection flag
    +            MUTEDET: u1,
    +            ///  Clear wrong clock configuration flag
    +            WCKCFG: u1,
    +            reserved4: u1,
    +            ///  Clear codec not ready flag
    +            CNRDY: u1,
    +            ///  Clear anticipated frame synchronization detection flag.
    +            CAFSDET: u1,
    +            ///  Clear late frame synchronization detection flag
    +            LFSDET: u1,
    +            padding: u25,
    +        }),
    +        ///  AData register
    +        ADR: mmio.Mmio(packed struct(u32) {
    +            ///  Data
    +            DATA: u32,
    +        }),
    +        ///  BConfiguration register 1
    +        BCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Audio block mode
    +            MODE: u2,
    +            ///  Protocol configuration
    +            PRTCFG: u2,
    +            reserved5: u1,
    +            ///  Data size
    +            DS: u3,
    +            ///  Least significant bit first
    +            LSBFIRST: u1,
    +            ///  Clock strobing edge
    +            CKSTR: u1,
    +            ///  Synchronization enable
    +            SYNCEN: u2,
    +            ///  Mono mode
    +            MONO: u1,
    +            ///  Output drive
    +            OutDri: u1,
    +            reserved16: u2,
    +            ///  Audio block B enable
    +            SAIBEN: u1,
    +            ///  DMA enable
    +            DMAEN: u1,
    +            reserved19: u1,
    +            ///  No divider
    +            NODIV: u1,
    +            ///  Master clock divider
    +            MCJDIV: u4,
    +            padding: u8,
    +        }),
    +        ///  BConfiguration register 2
    +        BCR2: mmio.Mmio(packed struct(u32) {
    +            ///  FIFO threshold
    +            FTH: u3,
    +            ///  FIFO flush
    +            FFLUS: u1,
    +            ///  Tristate management on data line
    +            TRIS: u1,
    +            ///  Mute
    +            MUTE: u1,
    +            ///  Mute value
    +            MUTEVAL: u1,
    +            ///  Mute counter
    +            MUTECN: u6,
    +            ///  Complement bit
    +            CPL: u1,
    +            ///  Companding mode
    +            COMP: u2,
    +            padding: u16,
    +        }),
    +        ///  BFRCR
    +        BFRCR: mmio.Mmio(packed struct(u32) {
    +            ///  Frame length
    +            FRL: u8,
    +            ///  Frame synchronization active level length
    +            FSALL: u7,
    +            reserved16: u1,
    +            ///  Frame synchronization definition
    +            FSDEF: u1,
    +            ///  Frame synchronization polarity
    +            FSPOL: u1,
    +            ///  Frame synchronization offset
    +            FSOFF: u1,
    +            padding: u13,
    +        }),
    +        ///  BSlot register
    +        BSLOTR: mmio.Mmio(packed struct(u32) {
    +            ///  First bit offset
    +            FBOFF: u5,
    +            reserved6: u1,
    +            ///  Slot size
    +            SLOTSZ: u2,
    +            ///  Number of slots in an audio frame
    +            NBSLOT: u4,
    +            reserved16: u4,
    +            ///  Slot enable
    +            SLOTEN: u16,
    +        }),
    +        ///  BInterrupt mask register2
    +        BIM: mmio.Mmio(packed struct(u32) {
    +            ///  Overrun/underrun interrupt enable
    +            OVRUDRIE: u1,
    +            ///  Mute detection interrupt enable
    +            MUTEDET: u1,
    +            ///  Wrong clock configuration interrupt enable
    +            WCKCFG: u1,
    +            ///  FIFO request interrupt enable
    +            FREQIE: u1,
    +            ///  Codec not ready interrupt enable
    +            CNRDYIE: u1,
    +            ///  Anticipated frame synchronization detection interrupt enable
    +            AFSDETIE: u1,
    +            ///  Late frame synchronization detection interrupt enable
    +            LFSDETIE: u1,
    +            padding: u25,
    +        }),
    +        ///  BStatus register
    +        BSR: mmio.Mmio(packed struct(u32) {
    +            ///  Overrun / underrun
    +            OVRUDR: u1,
    +            ///  Mute detection
    +            MUTEDET: u1,
    +            ///  Wrong clock configuration flag
    +            WCKCFG: u1,
    +            ///  FIFO request
    +            FREQ: u1,
    +            ///  Codec not ready
    +            CNRDY: u1,
    +            ///  Anticipated frame synchronization detection
    +            AFSDET: u1,
    +            ///  Late frame synchronization detection
    +            LFSDET: u1,
    +            reserved16: u9,
    +            ///  FIFO level threshold
    +            FLVL: u3,
    +            padding: u13,
    +        }),
    +        ///  BClear flag register
    +        BCLRFR: mmio.Mmio(packed struct(u32) {
    +            ///  Clear overrun / underrun
    +            OVRUDR: u1,
    +            ///  Mute detection flag
    +            MUTEDET: u1,
    +            ///  Clear wrong clock configuration flag
    +            WCKCFG: u1,
    +            reserved4: u1,
    +            ///  Clear codec not ready flag
    +            CNRDY: u1,
    +            ///  Clear anticipated frame synchronization detection flag
    +            CAFSDET: u1,
    +            ///  Clear late frame synchronization detection flag
    +            LFSDET: u1,
    +            padding: u25,
    +        }),
    +        ///  BData register
    +        BDR: mmio.Mmio(packed struct(u32) {
    +            ///  Data
    +            DATA: u32,
    +        }),
    +    };
    +
    +    ///  LCD-TFT Controller
    +    pub const LTDC = extern struct {
    +        reserved8: [8]u8,
    +        ///  Synchronization Size Configuration Register
    +        SSCR: mmio.Mmio(packed struct(u32) {
    +            ///  Vertical Synchronization Height (in units of horizontal scan line)
    +            VSH: u11,
    +            reserved16: u5,
    +            ///  Horizontal Synchronization Width (in units of pixel clock period)
    +            HSW: u10,
    +            padding: u6,
    +        }),
    +        ///  Back Porch Configuration Register
    +        BPCR: mmio.Mmio(packed struct(u32) {
    +            ///  Accumulated Vertical back porch (in units of horizontal scan line)
    +            AVBP: u11,
    +            reserved16: u5,
    +            ///  Accumulated Horizontal back porch (in units of pixel clock period)
    +            AHBP: u10,
    +            padding: u6,
    +        }),
    +        ///  Active Width Configuration Register
    +        AWCR: mmio.Mmio(packed struct(u32) {
    +            ///  Accumulated Active Height (in units of horizontal scan line)
    +            AAH: u11,
    +            reserved16: u5,
    +            ///  AAV
    +            AAV: u10,
    +            padding: u6,
    +        }),
    +        ///  Total Width Configuration Register
    +        TWCR: mmio.Mmio(packed struct(u32) {
    +            ///  Total Height (in units of horizontal scan line)
    +            TOTALH: u11,
    +            reserved16: u5,
    +            ///  Total Width (in units of pixel clock period)
    +            TOTALW: u10,
    +            padding: u6,
    +        }),
    +        ///  Global Control Register
    +        GCR: mmio.Mmio(packed struct(u32) {
    +            ///  LCD-TFT controller enable bit
    +            LTDCEN: u1,
    +            reserved4: u3,
    +            ///  Dither Blue Width
    +            DBW: u3,
    +            reserved8: u1,
    +            ///  Dither Green Width
    +            DGW: u3,
    +            reserved12: u1,
    +            ///  Dither Red Width
    +            DRW: u3,
    +            reserved16: u1,
    +            ///  Dither Enable
    +            DEN: u1,
    +            reserved28: u11,
    +            ///  Pixel Clock Polarity
    +            PCPOL: u1,
    +            ///  Data Enable Polarity
    +            DEPOL: u1,
    +            ///  Vertical Synchronization Polarity
    +            VSPOL: u1,
    +            ///  Horizontal Synchronization Polarity
    +            HSPOL: u1,
    +        }),
    +        reserved36: [8]u8,
    +        ///  Shadow Reload Configuration Register
    +        SRCR: mmio.Mmio(packed struct(u32) {
    +            ///  Immediate Reload
    +            IMR: u1,
    +            ///  Vertical Blanking Reload
    +            VBR: u1,
    +            padding: u30,
    +        }),
    +        reserved44: [4]u8,
    +        ///  Background Color Configuration Register
    +        BCCR: mmio.Mmio(packed struct(u32) {
    +            ///  Background Color Red value
    +            BC: u24,
    +            padding: u8,
    +        }),
    +        reserved52: [4]u8,
    +        ///  Interrupt Enable Register
    +        IER: mmio.Mmio(packed struct(u32) {
    +            ///  Line Interrupt Enable
    +            LIE: u1,
    +            ///  FIFO Underrun Interrupt Enable
    +            FUIE: u1,
    +            ///  Transfer Error Interrupt Enable
    +            TERRIE: u1,
    +            ///  Register Reload interrupt enable
    +            RRIE: u1,
    +            padding: u28,
    +        }),
    +        ///  Interrupt Status Register
    +        ISR: mmio.Mmio(packed struct(u32) {
    +            ///  Line Interrupt flag
    +            LIF: u1,
    +            ///  FIFO Underrun Interrupt flag
    +            FUIF: u1,
    +            ///  Transfer Error interrupt flag
    +            TERRIF: u1,
    +            ///  Register Reload Interrupt Flag
    +            RRIF: u1,
    +            padding: u28,
    +        }),
    +        ///  Interrupt Clear Register
    +        ICR: mmio.Mmio(packed struct(u32) {
    +            ///  Clears the Line Interrupt Flag
    +            CLIF: u1,
    +            ///  Clears the FIFO Underrun Interrupt flag
    +            CFUIF: u1,
    +            ///  Clears the Transfer Error Interrupt Flag
    +            CTERRIF: u1,
    +            ///  Clears Register Reload Interrupt Flag
    +            CRRIF: u1,
    +            padding: u28,
    +        }),
    +        ///  Line Interrupt Position Configuration Register
    +        LIPCR: mmio.Mmio(packed struct(u32) {
    +            ///  Line Interrupt Position
    +            LIPOS: u11,
    +            padding: u21,
    +        }),
    +        ///  Current Position Status Register
    +        CPSR: mmio.Mmio(packed struct(u32) {
    +            ///  Current Y Position
    +            CYPOS: u16,
    +            ///  Current X Position
    +            CXPOS: u16,
    +        }),
    +        ///  Current Display Status Register
    +        CDSR: mmio.Mmio(packed struct(u32) {
    +            ///  Vertical Data Enable display Status
    +            VDES: u1,
    +            ///  Horizontal Data Enable display Status
    +            HDES: u1,
    +            ///  Vertical Synchronization display Status
    +            VSYNCS: u1,
    +            ///  Horizontal Synchronization display Status
    +            HSYNCS: u1,
    +            padding: u28,
    +        }),
    +        reserved132: [56]u8,
    +        ///  Layerx Control Register
    +        L1CR: mmio.Mmio(packed struct(u32) {
    +            ///  Layer Enable
    +            LEN: u1,
    +            ///  Color Keying Enable
    +            COLKEN: u1,
    +            reserved4: u2,
    +            ///  Color Look-Up Table Enable
    +            CLUTEN: u1,
    +            padding: u27,
    +        }),
    +        ///  Layerx Window Horizontal Position Configuration Register
    +        L1WHPCR: mmio.Mmio(packed struct(u32) {
    +            ///  Window Horizontal Start Position
    +            WHSTPOS: u12,
    +            reserved16: u4,
    +            ///  Window Horizontal Stop Position
    +            WHSPPOS: u12,
    +            padding: u4,
    +        }),
    +        ///  Layerx Window Vertical Position Configuration Register
    +        L1WVPCR: mmio.Mmio(packed struct(u32) {
    +            ///  Window Vertical Start Position
    +            WVSTPOS: u11,
    +            reserved16: u5,
    +            ///  Window Vertical Stop Position
    +            WVSPPOS: u11,
    +            padding: u5,
    +        }),
    +        ///  Layerx Color Keying Configuration Register
    +        L1CKCR: mmio.Mmio(packed struct(u32) {
    +            ///  Color Key Blue value
    +            CKBLUE: u8,
    +            ///  Color Key Green value
    +            CKGREEN: u8,
    +            ///  Color Key Red value
    +            CKRED: u8,
    +            padding: u8,
    +        }),
    +        ///  Layerx Pixel Format Configuration Register
    +        L1PFCR: mmio.Mmio(packed struct(u32) {
    +            ///  Pixel Format
    +            PF: u3,
    +            padding: u29,
    +        }),
    +        ///  Layerx Constant Alpha Configuration Register
    +        L1CACR: mmio.Mmio(packed struct(u32) {
    +            ///  Constant Alpha
    +            CONSTA: u8,
    +            padding: u24,
    +        }),
    +        ///  Layerx Default Color Configuration Register
    +        L1DCCR: mmio.Mmio(packed struct(u32) {
    +            ///  Default Color Blue
    +            DCBLUE: u8,
    +            ///  Default Color Green
    +            DCGREEN: u8,
    +            ///  Default Color Red
    +            DCRED: u8,
    +            ///  Default Color Alpha
    +            DCALPHA: u8,
    +        }),
    +        ///  Layerx Blending Factors Configuration Register
    +        L1BFCR: mmio.Mmio(packed struct(u32) {
    +            ///  Blending Factor 2
    +            BF2: u3,
    +            reserved8: u5,
    +            ///  Blending Factor 1
    +            BF1: u3,
    +            padding: u21,
    +        }),
    +        reserved172: [8]u8,
    +        ///  Layerx Color Frame Buffer Address Register
    +        L1CFBAR: mmio.Mmio(packed struct(u32) {
    +            ///  Color Frame Buffer Start Address
    +            CFBADD: u32,
    +        }),
    +        ///  Layerx Color Frame Buffer Length Register
    +        L1CFBLR: mmio.Mmio(packed struct(u32) {
    +            ///  Color Frame Buffer Line Length
    +            CFBLL: u13,
    +            reserved16: u3,
    +            ///  Color Frame Buffer Pitch in bytes
    +            CFBP: u13,
    +            padding: u3,
    +        }),
    +        ///  Layerx ColorFrame Buffer Line Number Register
    +        L1CFBLNR: mmio.Mmio(packed struct(u32) {
    +            ///  Frame Buffer Line Number
    +            CFBLNBR: u11,
    +            padding: u21,
    +        }),
    +        reserved196: [12]u8,
    +        ///  Layerx CLUT Write Register
    +        L1CLUTWR: mmio.Mmio(packed struct(u32) {
    +            ///  Blue value
    +            BLUE: u8,
    +            ///  Green value
    +            GREEN: u8,
    +            ///  Red value
    +            RED: u8,
    +            ///  CLUT Address
    +            CLUTADD: u8,
    +        }),
    +        reserved260: [60]u8,
    +        ///  Layerx Control Register
    +        L2CR: mmio.Mmio(packed struct(u32) {
    +            ///  Layer Enable
    +            LEN: u1,
    +            ///  Color Keying Enable
    +            COLKEN: u1,
    +            reserved4: u2,
    +            ///  Color Look-Up Table Enable
    +            CLUTEN: u1,
    +            padding: u27,
    +        }),
    +        ///  Layerx Window Horizontal Position Configuration Register
    +        L2WHPCR: mmio.Mmio(packed struct(u32) {
    +            ///  Window Horizontal Start Position
    +            WHSTPOS: u12,
    +            reserved16: u4,
    +            ///  Window Horizontal Stop Position
    +            WHSPPOS: u12,
    +            padding: u4,
    +        }),
    +        ///  Layerx Window Vertical Position Configuration Register
    +        L2WVPCR: mmio.Mmio(packed struct(u32) {
    +            ///  Window Vertical Start Position
    +            WVSTPOS: u11,
    +            reserved16: u5,
    +            ///  Window Vertical Stop Position
    +            WVSPPOS: u11,
    +            padding: u5,
    +        }),
    +        ///  Layerx Color Keying Configuration Register
    +        L2CKCR: mmio.Mmio(packed struct(u32) {
    +            ///  Color Key Blue value
    +            CKBLUE: u8,
    +            ///  Color Key Green value
    +            CKGREEN: u7,
    +            ///  Color Key Red value
    +            CKRED: u9,
    +            padding: u8,
    +        }),
    +        ///  Layerx Pixel Format Configuration Register
    +        L2PFCR: mmio.Mmio(packed struct(u32) {
    +            ///  Pixel Format
    +            PF: u3,
    +            padding: u29,
    +        }),
    +        ///  Layerx Constant Alpha Configuration Register
    +        L2CACR: mmio.Mmio(packed struct(u32) {
    +            ///  Constant Alpha
    +            CONSTA: u8,
    +            padding: u24,
    +        }),
    +        ///  Layerx Default Color Configuration Register
    +        L2DCCR: mmio.Mmio(packed struct(u32) {
    +            ///  Default Color Blue
    +            DCBLUE: u8,
    +            ///  Default Color Green
    +            DCGREEN: u8,
    +            ///  Default Color Red
    +            DCRED: u8,
    +            ///  Default Color Alpha
    +            DCALPHA: u8,
    +        }),
    +        ///  Layerx Blending Factors Configuration Register
    +        L2BFCR: mmio.Mmio(packed struct(u32) {
    +            ///  Blending Factor 2
    +            BF2: u3,
    +            reserved8: u5,
    +            ///  Blending Factor 1
    +            BF1: u3,
    +            padding: u21,
    +        }),
    +        reserved300: [8]u8,
    +        ///  Layerx Color Frame Buffer Address Register
    +        L2CFBAR: mmio.Mmio(packed struct(u32) {
    +            ///  Color Frame Buffer Start Address
    +            CFBADD: u32,
    +        }),
    +        ///  Layerx Color Frame Buffer Length Register
    +        L2CFBLR: mmio.Mmio(packed struct(u32) {
    +            ///  Color Frame Buffer Line Length
    +            CFBLL: u13,
    +            reserved16: u3,
    +            ///  Color Frame Buffer Pitch in bytes
    +            CFBP: u13,
    +            padding: u3,
    +        }),
    +        ///  Layerx ColorFrame Buffer Line Number Register
    +        L2CFBLNR: mmio.Mmio(packed struct(u32) {
    +            ///  Frame Buffer Line Number
    +            CFBLNBR: u11,
    +            padding: u21,
    +        }),
    +        reserved324: [12]u8,
    +        ///  Layerx CLUT Write Register
    +        L2CLUTWR: mmio.Mmio(packed struct(u32) {
    +            ///  Blue value
    +            BLUE: u8,
    +            ///  Green value
    +            GREEN: u8,
    +            ///  Red value
    +            RED: u8,
    +            ///  CLUT Address
    +            CLUTADD: u8,
    +        }),
    +    };
    +
    +    ///  USB on the go high speed
    +    pub const OTG_HS_PWRCLK = extern struct {
    +        ///  Power and clock gating control register
    +        OTG_HS_PCGCR: mmio.Mmio(packed struct(u32) {
    +            ///  Stop PHY clock
    +            STPPCLK: u1,
    +            ///  Gate HCLK
    +            GATEHCLK: u1,
    +            reserved4: u2,
    +            ///  PHY suspended
    +            PHYSUSP: u1,
    +            padding: u27,
    +        }),
    +    };
    +
    +    ///  USB on the go high speed
    +    pub const OTG_HS_DEVICE = extern struct {
    +        ///  OTG_HS device configuration register
    +        OTG_HS_DCFG: mmio.Mmio(packed struct(u32) {
    +            ///  Device speed
    +            DSPD: u2,
    +            ///  Nonzero-length status OUT handshake
    +            NZLSOHSK: u1,
    +            reserved4: u1,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Periodic (micro)frame interval
    +            PFIVL: u2,
    +            reserved24: u11,
    +            ///  Periodic scheduling interval
    +            PERSCHIVL: u2,
    +            padding: u6,
    +        }),
    +        ///  OTG_HS device control register
    +        OTG_HS_DCTL: mmio.Mmio(packed struct(u32) {
    +            ///  Remote wakeup signaling
    +            RWUSIG: u1,
    +            ///  Soft disconnect
    +            SDIS: u1,
    +            ///  Global IN NAK status
    +            GINSTS: u1,
    +            ///  Global OUT NAK status
    +            GONSTS: u1,
    +            ///  Test control
    +            TCTL: u3,
    +            ///  Set global IN NAK
    +            SGINAK: u1,
    +            ///  Clear global IN NAK
    +            CGINAK: u1,
    +            ///  Set global OUT NAK
    +            SGONAK: u1,
    +            ///  Clear global OUT NAK
    +            CGONAK: u1,
    +            ///  Power-on programming done
    +            POPRGDNE: u1,
    +            padding: u20,
    +        }),
    +        ///  OTG_HS device status register
    +        OTG_HS_DSTS: mmio.Mmio(packed struct(u32) {
    +            ///  Suspend status
    +            SUSPSTS: u1,
    +            ///  Enumerated speed
    +            ENUMSPD: u2,
    +            ///  Erratic error
    +            EERR: u1,
    +            reserved8: u4,
    +            ///  Frame number of the received SOF
    +            FNSOF: u14,
    +            padding: u10,
    +        }),
    +        reserved16: [4]u8,
    +        ///  OTG_HS device IN endpoint common interrupt mask register
    +        OTG_HS_DIEPMSK: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt mask
    +            XFRCM: u1,
    +            ///  Endpoint disabled interrupt mask
    +            EPDM: u1,
    +            reserved3: u1,
    +            ///  Timeout condition mask (nonisochronous endpoints)
    +            TOM: u1,
    +            ///  IN token received when TxFIFO empty mask
    +            ITTXFEMSK: u1,
    +            ///  IN token received with EP mismatch mask
    +            INEPNMM: u1,
    +            ///  IN endpoint NAK effective mask
    +            INEPNEM: u1,
    +            reserved8: u1,
    +            ///  FIFO underrun mask
    +            TXFURM: u1,
    +            ///  BNA interrupt mask
    +            BIM: u1,
    +            padding: u22,
    +        }),
    +        ///  OTG_HS device OUT endpoint common interrupt mask register
    +        OTG_HS_DOEPMSK: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt mask
    +            XFRCM: u1,
    +            ///  Endpoint disabled interrupt mask
    +            EPDM: u1,
    +            reserved3: u1,
    +            ///  SETUP phase done mask
    +            STUPM: u1,
    +            ///  OUT token received when endpoint disabled mask
    +            OTEPDM: u1,
    +            reserved6: u1,
    +            ///  Back-to-back SETUP packets received mask
    +            B2BSTUP: u1,
    +            reserved8: u1,
    +            ///  OUT packet error mask
    +            OPEM: u1,
    +            ///  BNA interrupt mask
    +            BOIM: u1,
    +            padding: u22,
    +        }),
    +        ///  OTG_HS device all endpoints interrupt register
    +        OTG_HS_DAINT: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint interrupt bits
    +            IEPINT: u16,
    +            ///  OUT endpoint interrupt bits
    +            OEPINT: u16,
    +        }),
    +        ///  OTG_HS all endpoints interrupt mask register
    +        OTG_HS_DAINTMSK: mmio.Mmio(packed struct(u32) {
    +            ///  IN EP interrupt mask bits
    +            IEPM: u16,
    +            ///  OUT EP interrupt mask bits
    +            OEPM: u16,
    +        }),
    +        reserved40: [8]u8,
    +        ///  OTG_HS device VBUS discharge time register
    +        OTG_HS_DVBUSDIS: mmio.Mmio(packed struct(u32) {
    +            ///  Device VBUS discharge time
    +            VBUSDT: u16,
    +            padding: u16,
    +        }),
    +        ///  OTG_HS device VBUS pulsing time register
    +        OTG_HS_DVBUSPULSE: mmio.Mmio(packed struct(u32) {
    +            ///  Device VBUS pulsing time
    +            DVBUSP: u12,
    +            padding: u20,
    +        }),
    +        ///  OTG_HS Device threshold control register
    +        OTG_HS_DTHRCTL: mmio.Mmio(packed struct(u32) {
    +            ///  Nonisochronous IN endpoints threshold enable
    +            NONISOTHREN: u1,
    +            ///  ISO IN endpoint threshold enable
    +            ISOTHREN: u1,
    +            ///  Transmit threshold length
    +            TXTHRLEN: u9,
    +            reserved16: u5,
    +            ///  Receive threshold enable
    +            RXTHREN: u1,
    +            ///  Receive threshold length
    +            RXTHRLEN: u9,
    +            reserved27: u1,
    +            ///  Arbiter parking enable
    +            ARPEN: u1,
    +            padding: u4,
    +        }),
    +        ///  OTG_HS device IN endpoint FIFO empty interrupt mask register
    +        OTG_HS_DIEPEMPMSK: mmio.Mmio(packed struct(u32) {
    +            ///  IN EP Tx FIFO empty interrupt mask bits
    +            INEPTXFEM: u16,
    +            padding: u16,
    +        }),
    +        ///  OTG_HS device each endpoint interrupt register
    +        OTG_HS_DEACHINT: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  IN endpoint 1interrupt bit
    +            IEP1INT: u1,
    +            reserved17: u15,
    +            ///  OUT endpoint 1 interrupt bit
    +            OEP1INT: u1,
    +            padding: u14,
    +        }),
    +        ///  OTG_HS device each endpoint interrupt register mask
    +        OTG_HS_DEACHINTMSK: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  IN Endpoint 1 interrupt mask bit
    +            IEP1INTM: u1,
    +            reserved17: u15,
    +            ///  OUT Endpoint 1 interrupt mask bit
    +            OEP1INTM: u1,
    +            padding: u14,
    +        }),
    +        ///  OTG_HS device each in endpoint-1 interrupt register
    +        OTG_HS_DIEPEACHMSK1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt mask
    +            XFRCM: u1,
    +            ///  Endpoint disabled interrupt mask
    +            EPDM: u1,
    +            reserved3: u1,
    +            ///  Timeout condition mask (nonisochronous endpoints)
    +            TOM: u1,
    +            ///  IN token received when TxFIFO empty mask
    +            ITTXFEMSK: u1,
    +            ///  IN token received with EP mismatch mask
    +            INEPNMM: u1,
    +            ///  IN endpoint NAK effective mask
    +            INEPNEM: u1,
    +            reserved8: u1,
    +            ///  FIFO underrun mask
    +            TXFURM: u1,
    +            ///  BNA interrupt mask
    +            BIM: u1,
    +            reserved13: u3,
    +            ///  NAK interrupt mask
    +            NAKM: u1,
    +            padding: u18,
    +        }),
    +        reserved128: [60]u8,
    +        ///  OTG_HS device each OUT endpoint-1 interrupt register
    +        OTG_HS_DOEPEACHMSK1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt mask
    +            XFRCM: u1,
    +            ///  Endpoint disabled interrupt mask
    +            EPDM: u1,
    +            reserved3: u1,
    +            ///  Timeout condition mask
    +            TOM: u1,
    +            ///  IN token received when TxFIFO empty mask
    +            ITTXFEMSK: u1,
    +            ///  IN token received with EP mismatch mask
    +            INEPNMM: u1,
    +            ///  IN endpoint NAK effective mask
    +            INEPNEM: u1,
    +            reserved8: u1,
    +            ///  OUT packet error mask
    +            TXFURM: u1,
    +            ///  BNA interrupt mask
    +            BIM: u1,
    +            reserved12: u2,
    +            ///  Bubble error interrupt mask
    +            BERRM: u1,
    +            ///  NAK interrupt mask
    +            NAKM: u1,
    +            ///  NYET interrupt mask
    +            NYETM: u1,
    +            padding: u17,
    +        }),
    +        reserved256: [124]u8,
    +        ///  OTG device endpoint-0 control register
    +        OTG_HS_DIEPCTL0: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USB active endpoint
    +            USBAEP: u1,
    +            ///  Even/odd frame
    +            EONUM_DPID: u1,
    +            ///  NAK status
    +            NAKSTS: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  STALL handshake
    +            Stall: u1,
    +            ///  TxFIFO number
    +            TXFNUM: u4,
    +            ///  Clear NAK
    +            CNAK: u1,
    +            ///  Set NAK
    +            SNAK: u1,
    +            ///  Set DATA0 PID
    +            SD0PID_SEVNFRM: u1,
    +            ///  Set odd frame
    +            SODDFRM: u1,
    +            ///  Endpoint disable
    +            EPDIS: u1,
    +            ///  Endpoint enable
    +            EPENA: u1,
    +        }),
    +        reserved264: [4]u8,
    +        ///  OTG device endpoint-0 interrupt register
    +        OTG_HS_DIEPINT0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  Timeout condition
    +            TOC: u1,
    +            ///  IN token received when TxFIFO is empty
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  IN endpoint NAK effective
    +            INEPNE: u1,
    +            ///  Transmit FIFO empty
    +            TXFE: u1,
    +            ///  Transmit Fifo Underrun
    +            TXFIFOUDRN: u1,
    +            ///  Buffer not available interrupt
    +            BNA: u1,
    +            reserved11: u1,
    +            ///  Packet dropped status
    +            PKTDRPSTS: u1,
    +            ///  Babble error interrupt
    +            BERR: u1,
    +            ///  NAK interrupt
    +            NAK: u1,
    +            padding: u18,
    +        }),
    +        reserved272: [4]u8,
    +        ///  OTG_HS device IN endpoint 0 transfer size register
    +        OTG_HS_DIEPTSIZ0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u7,
    +            reserved19: u12,
    +            ///  Packet count
    +            PKTCNT: u2,
    +            padding: u11,
    +        }),
    +        ///  OTG_HS device endpoint-1 DMA address register
    +        OTG_HS_DIEPDMA1: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        ///  OTG_HS device IN endpoint transmit FIFO status register
    +        OTG_HS_DTXFSTS0: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint TxFIFO space avail
    +            INEPTFSAV: u16,
    +            padding: u16,
    +        }),
    +        reserved288: [4]u8,
    +        ///  OTG device endpoint-1 control register
    +        OTG_HS_DIEPCTL1: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USB active endpoint
    +            USBAEP: u1,
    +            ///  Even/odd frame
    +            EONUM_DPID: u1,
    +            ///  NAK status
    +            NAKSTS: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  STALL handshake
    +            Stall: u1,
    +            ///  TxFIFO number
    +            TXFNUM: u4,
    +            ///  Clear NAK
    +            CNAK: u1,
    +            ///  Set NAK
    +            SNAK: u1,
    +            ///  Set DATA0 PID
    +            SD0PID_SEVNFRM: u1,
    +            ///  Set odd frame
    +            SODDFRM: u1,
    +            ///  Endpoint disable
    +            EPDIS: u1,
    +            ///  Endpoint enable
    +            EPENA: u1,
    +        }),
    +        reserved296: [4]u8,
    +        ///  OTG device endpoint-1 interrupt register
    +        OTG_HS_DIEPINT1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  Timeout condition
    +            TOC: u1,
    +            ///  IN token received when TxFIFO is empty
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  IN endpoint NAK effective
    +            INEPNE: u1,
    +            ///  Transmit FIFO empty
    +            TXFE: u1,
    +            ///  Transmit Fifo Underrun
    +            TXFIFOUDRN: u1,
    +            ///  Buffer not available interrupt
    +            BNA: u1,
    +            reserved11: u1,
    +            ///  Packet dropped status
    +            PKTDRPSTS: u1,
    +            ///  Babble error interrupt
    +            BERR: u1,
    +            ///  NAK interrupt
    +            NAK: u1,
    +            padding: u18,
    +        }),
    +        reserved304: [4]u8,
    +        ///  OTG_HS device endpoint transfer size register
    +        OTG_HS_DIEPTSIZ1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Multi count
    +            MCNT: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS device endpoint-2 DMA address register
    +        OTG_HS_DIEPDMA2: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        ///  OTG_HS device IN endpoint transmit FIFO status register
    +        OTG_HS_DTXFSTS1: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint TxFIFO space avail
    +            INEPTFSAV: u16,
    +            padding: u16,
    +        }),
    +        reserved320: [4]u8,
    +        ///  OTG device endpoint-2 control register
    +        OTG_HS_DIEPCTL2: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USB active endpoint
    +            USBAEP: u1,
    +            ///  Even/odd frame
    +            EONUM_DPID: u1,
    +            ///  NAK status
    +            NAKSTS: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  STALL handshake
    +            Stall: u1,
    +            ///  TxFIFO number
    +            TXFNUM: u4,
    +            ///  Clear NAK
    +            CNAK: u1,
    +            ///  Set NAK
    +            SNAK: u1,
    +            ///  Set DATA0 PID
    +            SD0PID_SEVNFRM: u1,
    +            ///  Set odd frame
    +            SODDFRM: u1,
    +            ///  Endpoint disable
    +            EPDIS: u1,
    +            ///  Endpoint enable
    +            EPENA: u1,
    +        }),
    +        reserved328: [4]u8,
    +        ///  OTG device endpoint-2 interrupt register
    +        OTG_HS_DIEPINT2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  Timeout condition
    +            TOC: u1,
    +            ///  IN token received when TxFIFO is empty
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  IN endpoint NAK effective
    +            INEPNE: u1,
    +            ///  Transmit FIFO empty
    +            TXFE: u1,
    +            ///  Transmit Fifo Underrun
    +            TXFIFOUDRN: u1,
    +            ///  Buffer not available interrupt
    +            BNA: u1,
    +            reserved11: u1,
    +            ///  Packet dropped status
    +            PKTDRPSTS: u1,
    +            ///  Babble error interrupt
    +            BERR: u1,
    +            ///  NAK interrupt
    +            NAK: u1,
    +            padding: u18,
    +        }),
    +        reserved336: [4]u8,
    +        ///  OTG_HS device endpoint transfer size register
    +        OTG_HS_DIEPTSIZ2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Multi count
    +            MCNT: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS device endpoint-3 DMA address register
    +        OTG_HS_DIEPDMA3: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        ///  OTG_HS device IN endpoint transmit FIFO status register
    +        OTG_HS_DTXFSTS2: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint TxFIFO space avail
    +            INEPTFSAV: u16,
    +            padding: u16,
    +        }),
    +        reserved352: [4]u8,
    +        ///  OTG device endpoint-3 control register
    +        OTG_HS_DIEPCTL3: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USB active endpoint
    +            USBAEP: u1,
    +            ///  Even/odd frame
    +            EONUM_DPID: u1,
    +            ///  NAK status
    +            NAKSTS: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  STALL handshake
    +            Stall: u1,
    +            ///  TxFIFO number
    +            TXFNUM: u4,
    +            ///  Clear NAK
    +            CNAK: u1,
    +            ///  Set NAK
    +            SNAK: u1,
    +            ///  Set DATA0 PID
    +            SD0PID_SEVNFRM: u1,
    +            ///  Set odd frame
    +            SODDFRM: u1,
    +            ///  Endpoint disable
    +            EPDIS: u1,
    +            ///  Endpoint enable
    +            EPENA: u1,
    +        }),
    +        reserved360: [4]u8,
    +        ///  OTG device endpoint-3 interrupt register
    +        OTG_HS_DIEPINT3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  Timeout condition
    +            TOC: u1,
    +            ///  IN token received when TxFIFO is empty
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  IN endpoint NAK effective
    +            INEPNE: u1,
    +            ///  Transmit FIFO empty
    +            TXFE: u1,
    +            ///  Transmit Fifo Underrun
    +            TXFIFOUDRN: u1,
    +            ///  Buffer not available interrupt
    +            BNA: u1,
    +            reserved11: u1,
    +            ///  Packet dropped status
    +            PKTDRPSTS: u1,
    +            ///  Babble error interrupt
    +            BERR: u1,
    +            ///  NAK interrupt
    +            NAK: u1,
    +            padding: u18,
    +        }),
    +        reserved368: [4]u8,
    +        ///  OTG_HS device endpoint transfer size register
    +        OTG_HS_DIEPTSIZ3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Multi count
    +            MCNT: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS device endpoint-4 DMA address register
    +        OTG_HS_DIEPDMA4: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        ///  OTG_HS device IN endpoint transmit FIFO status register
    +        OTG_HS_DTXFSTS3: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint TxFIFO space avail
    +            INEPTFSAV: u16,
    +            padding: u16,
    +        }),
    +        reserved384: [4]u8,
    +        ///  OTG device endpoint-4 control register
    +        OTG_HS_DIEPCTL4: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USB active endpoint
    +            USBAEP: u1,
    +            ///  Even/odd frame
    +            EONUM_DPID: u1,
    +            ///  NAK status
    +            NAKSTS: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  STALL handshake
    +            Stall: u1,
    +            ///  TxFIFO number
    +            TXFNUM: u4,
    +            ///  Clear NAK
    +            CNAK: u1,
    +            ///  Set NAK
    +            SNAK: u1,
    +            ///  Set DATA0 PID
    +            SD0PID_SEVNFRM: u1,
    +            ///  Set odd frame
    +            SODDFRM: u1,
    +            ///  Endpoint disable
    +            EPDIS: u1,
    +            ///  Endpoint enable
    +            EPENA: u1,
    +        }),
    +        reserved392: [4]u8,
    +        ///  OTG device endpoint-4 interrupt register
    +        OTG_HS_DIEPINT4: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  Timeout condition
    +            TOC: u1,
    +            ///  IN token received when TxFIFO is empty
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  IN endpoint NAK effective
    +            INEPNE: u1,
    +            ///  Transmit FIFO empty
    +            TXFE: u1,
    +            ///  Transmit Fifo Underrun
    +            TXFIFOUDRN: u1,
    +            ///  Buffer not available interrupt
    +            BNA: u1,
    +            reserved11: u1,
    +            ///  Packet dropped status
    +            PKTDRPSTS: u1,
    +            ///  Babble error interrupt
    +            BERR: u1,
    +            ///  NAK interrupt
    +            NAK: u1,
    +            padding: u18,
    +        }),
    +        reserved400: [4]u8,
    +        ///  OTG_HS device endpoint transfer size register
    +        OTG_HS_DIEPTSIZ4: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Multi count
    +            MCNT: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS device endpoint-5 DMA address register
    +        OTG_HS_DIEPDMA5: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        ///  OTG_HS device IN endpoint transmit FIFO status register
    +        OTG_HS_DTXFSTS4: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint TxFIFO space avail
    +            INEPTFSAV: u16,
    +            padding: u16,
    +        }),
    +        reserved416: [4]u8,
    +        ///  OTG device endpoint-5 control register
    +        OTG_HS_DIEPCTL5: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USB active endpoint
    +            USBAEP: u1,
    +            ///  Even/odd frame
    +            EONUM_DPID: u1,
    +            ///  NAK status
    +            NAKSTS: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  STALL handshake
    +            Stall: u1,
    +            ///  TxFIFO number
    +            TXFNUM: u4,
    +            ///  Clear NAK
    +            CNAK: u1,
    +            ///  Set NAK
    +            SNAK: u1,
    +            ///  Set DATA0 PID
    +            SD0PID_SEVNFRM: u1,
    +            ///  Set odd frame
    +            SODDFRM: u1,
    +            ///  Endpoint disable
    +            EPDIS: u1,
    +            ///  Endpoint enable
    +            EPENA: u1,
    +        }),
    +        reserved424: [4]u8,
    +        ///  OTG device endpoint-5 interrupt register
    +        OTG_HS_DIEPINT5: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  Timeout condition
    +            TOC: u1,
    +            ///  IN token received when TxFIFO is empty
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  IN endpoint NAK effective
    +            INEPNE: u1,
    +            ///  Transmit FIFO empty
    +            TXFE: u1,
    +            ///  Transmit Fifo Underrun
    +            TXFIFOUDRN: u1,
    +            ///  Buffer not available interrupt
    +            BNA: u1,
    +            reserved11: u1,
    +            ///  Packet dropped status
    +            PKTDRPSTS: u1,
    +            ///  Babble error interrupt
    +            BERR: u1,
    +            ///  NAK interrupt
    +            NAK: u1,
    +            padding: u18,
    +        }),
    +        reserved432: [4]u8,
    +        ///  OTG_HS device endpoint transfer size register
    +        OTG_HS_DIEPTSIZ5: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Multi count
    +            MCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved440: [4]u8,
    +        ///  OTG_HS device IN endpoint transmit FIFO status register
    +        OTG_HS_DTXFSTS5: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint TxFIFO space avail
    +            INEPTFSAV: u16,
    +            padding: u16,
    +        }),
    +        reserved448: [4]u8,
    +        ///  OTG device endpoint-6 control register
    +        OTG_HS_DIEPCTL6: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USB active endpoint
    +            USBAEP: u1,
    +            ///  Even/odd frame
    +            EONUM_DPID: u1,
    +            ///  NAK status
    +            NAKSTS: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  STALL handshake
    +            Stall: u1,
    +            ///  TxFIFO number
    +            TXFNUM: u4,
    +            ///  Clear NAK
    +            CNAK: u1,
    +            ///  Set NAK
    +            SNAK: u1,
    +            ///  Set DATA0 PID
    +            SD0PID_SEVNFRM: u1,
    +            ///  Set odd frame
    +            SODDFRM: u1,
    +            ///  Endpoint disable
    +            EPDIS: u1,
    +            ///  Endpoint enable
    +            EPENA: u1,
    +        }),
    +        reserved456: [4]u8,
    +        ///  OTG device endpoint-6 interrupt register
    +        OTG_HS_DIEPINT6: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  Timeout condition
    +            TOC: u1,
    +            ///  IN token received when TxFIFO is empty
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  IN endpoint NAK effective
    +            INEPNE: u1,
    +            ///  Transmit FIFO empty
    +            TXFE: u1,
    +            ///  Transmit Fifo Underrun
    +            TXFIFOUDRN: u1,
    +            ///  Buffer not available interrupt
    +            BNA: u1,
    +            reserved11: u1,
    +            ///  Packet dropped status
    +            PKTDRPSTS: u1,
    +            ///  Babble error interrupt
    +            BERR: u1,
    +            ///  NAK interrupt
    +            NAK: u1,
    +            padding: u18,
    +        }),
    +        reserved480: [20]u8,
    +        ///  OTG device endpoint-7 control register
    +        OTG_HS_DIEPCTL7: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USB active endpoint
    +            USBAEP: u1,
    +            ///  Even/odd frame
    +            EONUM_DPID: u1,
    +            ///  NAK status
    +            NAKSTS: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  STALL handshake
    +            Stall: u1,
    +            ///  TxFIFO number
    +            TXFNUM: u4,
    +            ///  Clear NAK
    +            CNAK: u1,
    +            ///  Set NAK
    +            SNAK: u1,
    +            ///  Set DATA0 PID
    +            SD0PID_SEVNFRM: u1,
    +            ///  Set odd frame
    +            SODDFRM: u1,
    +            ///  Endpoint disable
    +            EPDIS: u1,
    +            ///  Endpoint enable
    +            EPENA: u1,
    +        }),
    +        reserved488: [4]u8,
    +        ///  OTG device endpoint-7 interrupt register
    +        OTG_HS_DIEPINT7: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  Timeout condition
    +            TOC: u1,
    +            ///  IN token received when TxFIFO is empty
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  IN endpoint NAK effective
    +            INEPNE: u1,
    +            ///  Transmit FIFO empty
    +            TXFE: u1,
    +            ///  Transmit Fifo Underrun
    +            TXFIFOUDRN: u1,
    +            ///  Buffer not available interrupt
    +            BNA: u1,
    +            reserved11: u1,
    +            ///  Packet dropped status
    +            PKTDRPSTS: u1,
    +            ///  Babble error interrupt
    +            BERR: u1,
    +            ///  NAK interrupt
    +            NAK: u1,
    +            padding: u18,
    +        }),
    +        reserved768: [276]u8,
    +        ///  OTG_HS device control OUT endpoint 0 control register
    +        OTG_HS_DOEPCTL0: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u2,
    +            reserved15: u13,
    +            ///  USB active endpoint
    +            USBAEP: u1,
    +            reserved17: u1,
    +            ///  NAK status
    +            NAKSTS: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Snoop mode
    +            SNPM: u1,
    +            ///  STALL handshake
    +            Stall: u1,
    +            reserved26: u4,
    +            ///  Clear NAK
    +            CNAK: u1,
    +            ///  Set NAK
    +            SNAK: u1,
    +            reserved30: u2,
    +            ///  Endpoint disable
    +            EPDIS: u1,
    +            ///  Endpoint enable
    +            EPENA: u1,
    +        }),
    +        reserved776: [4]u8,
    +        ///  OTG_HS device endpoint-0 interrupt register
    +        OTG_HS_DOEPINT0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  SETUP phase done
    +            STUP: u1,
    +            ///  OUT token received when endpoint disabled
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  Back-to-back SETUP packets received
    +            B2BSTUP: u1,
    +            reserved14: u7,
    +            ///  NYET interrupt
    +            NYET: u1,
    +            padding: u17,
    +        }),
    +        reserved784: [4]u8,
    +        ///  OTG_HS device endpoint-1 transfer size register
    +        OTG_HS_DOEPTSIZ0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u7,
    +            reserved19: u12,
    +            ///  Packet count
    +            PKTCNT: u1,
    +            reserved29: u9,
    +            ///  SETUP packet count
    +            STUPCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved800: [12]u8,
    +        ///  OTG device endpoint-1 control register
    +        OTG_HS_DOEPCTL1: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USB active endpoint
    +            USBAEP: u1,
    +            ///  Even odd frame/Endpoint data PID
    +            EONUM_DPID: u1,
    +            ///  NAK status
    +            NAKSTS: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Snoop mode
    +            SNPM: u1,
    +            ///  STALL handshake
    +            Stall: u1,
    +            reserved26: u4,
    +            ///  Clear NAK
    +            CNAK: u1,
    +            ///  Set NAK
    +            SNAK: u1,
    +            ///  Set DATA0 PID/Set even frame
    +            SD0PID_SEVNFRM: u1,
    +            ///  Set odd frame
    +            SODDFRM: u1,
    +            ///  Endpoint disable
    +            EPDIS: u1,
    +            ///  Endpoint enable
    +            EPENA: u1,
    +        }),
    +        reserved808: [4]u8,
    +        ///  OTG_HS device endpoint-1 interrupt register
    +        OTG_HS_DOEPINT1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  SETUP phase done
    +            STUP: u1,
    +            ///  OUT token received when endpoint disabled
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  Back-to-back SETUP packets received
    +            B2BSTUP: u1,
    +            reserved14: u7,
    +            ///  NYET interrupt
    +            NYET: u1,
    +            padding: u17,
    +        }),
    +        reserved816: [4]u8,
    +        ///  OTG_HS device endpoint-2 transfer size register
    +        OTG_HS_DOEPTSIZ1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Received data PID/SETUP packet count
    +            RXDPID_STUPCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved832: [12]u8,
    +        ///  OTG device endpoint-2 control register
    +        OTG_HS_DOEPCTL2: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USB active endpoint
    +            USBAEP: u1,
    +            ///  Even odd frame/Endpoint data PID
    +            EONUM_DPID: u1,
    +            ///  NAK status
    +            NAKSTS: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Snoop mode
    +            SNPM: u1,
    +            ///  STALL handshake
    +            Stall: u1,
    +            reserved26: u4,
    +            ///  Clear NAK
    +            CNAK: u1,
    +            ///  Set NAK
    +            SNAK: u1,
    +            ///  Set DATA0 PID/Set even frame
    +            SD0PID_SEVNFRM: u1,
    +            ///  Set odd frame
    +            SODDFRM: u1,
    +            ///  Endpoint disable
    +            EPDIS: u1,
    +            ///  Endpoint enable
    +            EPENA: u1,
    +        }),
    +        reserved840: [4]u8,
    +        ///  OTG_HS device endpoint-2 interrupt register
    +        OTG_HS_DOEPINT2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  SETUP phase done
    +            STUP: u1,
    +            ///  OUT token received when endpoint disabled
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  Back-to-back SETUP packets received
    +            B2BSTUP: u1,
    +            reserved14: u7,
    +            ///  NYET interrupt
    +            NYET: u1,
    +            padding: u17,
    +        }),
    +        reserved848: [4]u8,
    +        ///  OTG_HS device endpoint-3 transfer size register
    +        OTG_HS_DOEPTSIZ2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Received data PID/SETUP packet count
    +            RXDPID_STUPCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved864: [12]u8,
    +        ///  OTG device endpoint-3 control register
    +        OTG_HS_DOEPCTL3: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USB active endpoint
    +            USBAEP: u1,
    +            ///  Even odd frame/Endpoint data PID
    +            EONUM_DPID: u1,
    +            ///  NAK status
    +            NAKSTS: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Snoop mode
    +            SNPM: u1,
    +            ///  STALL handshake
    +            Stall: u1,
    +            reserved26: u4,
    +            ///  Clear NAK
    +            CNAK: u1,
    +            ///  Set NAK
    +            SNAK: u1,
    +            ///  Set DATA0 PID/Set even frame
    +            SD0PID_SEVNFRM: u1,
    +            ///  Set odd frame
    +            SODDFRM: u1,
    +            ///  Endpoint disable
    +            EPDIS: u1,
    +            ///  Endpoint enable
    +            EPENA: u1,
    +        }),
    +        reserved872: [4]u8,
    +        ///  OTG_HS device endpoint-3 interrupt register
    +        OTG_HS_DOEPINT3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  SETUP phase done
    +            STUP: u1,
    +            ///  OUT token received when endpoint disabled
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  Back-to-back SETUP packets received
    +            B2BSTUP: u1,
    +            reserved14: u7,
    +            ///  NYET interrupt
    +            NYET: u1,
    +            padding: u17,
    +        }),
    +        reserved880: [4]u8,
    +        ///  OTG_HS device endpoint-4 transfer size register
    +        OTG_HS_DOEPTSIZ3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Received data PID/SETUP packet count
    +            RXDPID_STUPCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved904: [20]u8,
    +        ///  OTG_HS device endpoint-4 interrupt register
    +        OTG_HS_DOEPINT4: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  SETUP phase done
    +            STUP: u1,
    +            ///  OUT token received when endpoint disabled
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  Back-to-back SETUP packets received
    +            B2BSTUP: u1,
    +            reserved14: u7,
    +            ///  NYET interrupt
    +            NYET: u1,
    +            padding: u17,
    +        }),
    +        reserved912: [4]u8,
    +        ///  OTG_HS device endpoint-5 transfer size register
    +        OTG_HS_DOEPTSIZ4: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Received data PID/SETUP packet count
    +            RXDPID_STUPCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved936: [20]u8,
    +        ///  OTG_HS device endpoint-5 interrupt register
    +        OTG_HS_DOEPINT5: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  SETUP phase done
    +            STUP: u1,
    +            ///  OUT token received when endpoint disabled
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  Back-to-back SETUP packets received
    +            B2BSTUP: u1,
    +            reserved14: u7,
    +            ///  NYET interrupt
    +            NYET: u1,
    +            padding: u17,
    +        }),
    +        reserved968: [28]u8,
    +        ///  OTG_HS device endpoint-6 interrupt register
    +        OTG_HS_DOEPINT6: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  SETUP phase done
    +            STUP: u1,
    +            ///  OUT token received when endpoint disabled
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  Back-to-back SETUP packets received
    +            B2BSTUP: u1,
    +            reserved14: u7,
    +            ///  NYET interrupt
    +            NYET: u1,
    +            padding: u17,
    +        }),
    +        reserved1000: [28]u8,
    +        ///  OTG_HS device endpoint-7 interrupt register
    +        OTG_HS_DOEPINT7: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt
    +            XFRC: u1,
    +            ///  Endpoint disabled interrupt
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  SETUP phase done
    +            STUP: u1,
    +            ///  OUT token received when endpoint disabled
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  Back-to-back SETUP packets received
    +            B2BSTUP: u1,
    +            reserved14: u7,
    +            ///  NYET interrupt
    +            NYET: u1,
    +            padding: u17,
    +        }),
    +    };
    +
    +    ///  USB on the go high speed
    +    pub const OTG_HS_HOST = extern struct {
    +        ///  OTG_HS host configuration register
    +        OTG_HS_HCFG: mmio.Mmio(packed struct(u32) {
    +            ///  FS/LS PHY clock select
    +            FSLSPCS: u2,
    +            ///  FS- and LS-only support
    +            FSLSS: u1,
    +            padding: u29,
    +        }),
    +        ///  OTG_HS Host frame interval register
    +        OTG_HS_HFIR: mmio.Mmio(packed struct(u32) {
    +            ///  Frame interval
    +            FRIVL: u16,
    +            padding: u16,
    +        }),
    +        ///  OTG_HS host frame number/frame time remaining register
    +        OTG_HS_HFNUM: mmio.Mmio(packed struct(u32) {
    +            ///  Frame number
    +            FRNUM: u16,
    +            ///  Frame time remaining
    +            FTREM: u16,
    +        }),
    +        reserved16: [4]u8,
    +        ///  OTG_HS_Host periodic transmit FIFO/queue status register
    +        OTG_HS_HPTXSTS: mmio.Mmio(packed struct(u32) {
    +            ///  Periodic transmit data FIFO space available
    +            PTXFSAVL: u16,
    +            ///  Periodic transmit request queue space available
    +            PTXQSAV: u8,
    +            ///  Top of the periodic transmit request queue
    +            PTXQTOP: u8,
    +        }),
    +        ///  OTG_HS Host all channels interrupt register
    +        OTG_HS_HAINT: mmio.Mmio(packed struct(u32) {
    +            ///  Channel interrupts
    +            HAINT: u16,
    +            padding: u16,
    +        }),
    +        ///  OTG_HS host all channels interrupt mask register
    +        OTG_HS_HAINTMSK: mmio.Mmio(packed struct(u32) {
    +            ///  Channel interrupt mask
    +            HAINTM: u16,
    +            padding: u16,
    +        }),
    +        reserved64: [36]u8,
    +        ///  OTG_HS host port control and status register
    +        OTG_HS_HPRT: mmio.Mmio(packed struct(u32) {
    +            ///  Port connect status
    +            PCSTS: u1,
    +            ///  Port connect detected
    +            PCDET: u1,
    +            ///  Port enable
    +            PENA: u1,
    +            ///  Port enable/disable change
    +            PENCHNG: u1,
    +            ///  Port overcurrent active
    +            POCA: u1,
    +            ///  Port overcurrent change
    +            POCCHNG: u1,
    +            ///  Port resume
    +            PRES: u1,
    +            ///  Port suspend
    +            PSUSP: u1,
    +            ///  Port reset
    +            PRST: u1,
    +            reserved10: u1,
    +            ///  Port line status
    +            PLSTS: u2,
    +            ///  Port power
    +            PPWR: u1,
    +            ///  Port test control
    +            PTCTL: u4,
    +            ///  Port speed
    +            PSPD: u2,
    +            padding: u13,
    +        }),
    +        reserved256: [188]u8,
    +        ///  OTG_HS host channel-0 characteristics register
    +        OTG_HS_HCCHAR0: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multi Count (MC) / Error Count (EC)
    +            MC: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        ///  OTG_HS host channel-0 split control register
    +        OTG_HS_HCSPLT0: mmio.Mmio(packed struct(u32) {
    +            ///  Port address
    +            PRTADDR: u7,
    +            ///  Hub address
    +            HUBADDR: u7,
    +            ///  XACTPOS
    +            XACTPOS: u2,
    +            ///  Do complete split
    +            COMPLSPLT: u1,
    +            reserved31: u14,
    +            ///  Split enable
    +            SPLITEN: u1,
    +        }),
    +        ///  OTG_HS host channel-11 interrupt register
    +        OTG_HS_HCINT0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            ///  Response received interrupt
    +            NYET: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-11 interrupt mask register
    +        OTG_HS_HCINTMSK0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-11 transfer size register
    +        OTG_HS_HCTSIZ0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS host channel-0 DMA address register
    +        OTG_HS_HCDMA0: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        reserved288: [8]u8,
    +        ///  OTG_HS host channel-1 characteristics register
    +        OTG_HS_HCCHAR1: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multi Count (MC) / Error Count (EC)
    +            MC: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        ///  OTG_HS host channel-1 split control register
    +        OTG_HS_HCSPLT1: mmio.Mmio(packed struct(u32) {
    +            ///  Port address
    +            PRTADDR: u7,
    +            ///  Hub address
    +            HUBADDR: u7,
    +            ///  XACTPOS
    +            XACTPOS: u2,
    +            ///  Do complete split
    +            COMPLSPLT: u1,
    +            reserved31: u14,
    +            ///  Split enable
    +            SPLITEN: u1,
    +        }),
    +        ///  OTG_HS host channel-1 interrupt register
    +        OTG_HS_HCINT1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            ///  Response received interrupt
    +            NYET: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-1 interrupt mask register
    +        OTG_HS_HCINTMSK1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-1 transfer size register
    +        OTG_HS_HCTSIZ1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS host channel-1 DMA address register
    +        OTG_HS_HCDMA1: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        reserved320: [8]u8,
    +        ///  OTG_HS host channel-2 characteristics register
    +        OTG_HS_HCCHAR2: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multi Count (MC) / Error Count (EC)
    +            MC: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        ///  OTG_HS host channel-2 split control register
    +        OTG_HS_HCSPLT2: mmio.Mmio(packed struct(u32) {
    +            ///  Port address
    +            PRTADDR: u7,
    +            ///  Hub address
    +            HUBADDR: u7,
    +            ///  XACTPOS
    +            XACTPOS: u2,
    +            ///  Do complete split
    +            COMPLSPLT: u1,
    +            reserved31: u14,
    +            ///  Split enable
    +            SPLITEN: u1,
    +        }),
    +        ///  OTG_HS host channel-2 interrupt register
    +        OTG_HS_HCINT2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            ///  Response received interrupt
    +            NYET: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-2 interrupt mask register
    +        OTG_HS_HCINTMSK2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-2 transfer size register
    +        OTG_HS_HCTSIZ2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS host channel-2 DMA address register
    +        OTG_HS_HCDMA2: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        reserved352: [8]u8,
    +        ///  OTG_HS host channel-3 characteristics register
    +        OTG_HS_HCCHAR3: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multi Count (MC) / Error Count (EC)
    +            MC: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        ///  OTG_HS host channel-3 split control register
    +        OTG_HS_HCSPLT3: mmio.Mmio(packed struct(u32) {
    +            ///  Port address
    +            PRTADDR: u7,
    +            ///  Hub address
    +            HUBADDR: u7,
    +            ///  XACTPOS
    +            XACTPOS: u2,
    +            ///  Do complete split
    +            COMPLSPLT: u1,
    +            reserved31: u14,
    +            ///  Split enable
    +            SPLITEN: u1,
    +        }),
    +        ///  OTG_HS host channel-3 interrupt register
    +        OTG_HS_HCINT3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            ///  Response received interrupt
    +            NYET: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-3 interrupt mask register
    +        OTG_HS_HCINTMSK3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-3 transfer size register
    +        OTG_HS_HCTSIZ3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS host channel-3 DMA address register
    +        OTG_HS_HCDMA3: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        reserved384: [8]u8,
    +        ///  OTG_HS host channel-4 characteristics register
    +        OTG_HS_HCCHAR4: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multi Count (MC) / Error Count (EC)
    +            MC: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        ///  OTG_HS host channel-4 split control register
    +        OTG_HS_HCSPLT4: mmio.Mmio(packed struct(u32) {
    +            ///  Port address
    +            PRTADDR: u7,
    +            ///  Hub address
    +            HUBADDR: u7,
    +            ///  XACTPOS
    +            XACTPOS: u2,
    +            ///  Do complete split
    +            COMPLSPLT: u1,
    +            reserved31: u14,
    +            ///  Split enable
    +            SPLITEN: u1,
    +        }),
    +        ///  OTG_HS host channel-4 interrupt register
    +        OTG_HS_HCINT4: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            ///  Response received interrupt
    +            NYET: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-4 interrupt mask register
    +        OTG_HS_HCINTMSK4: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-4 transfer size register
    +        OTG_HS_HCTSIZ4: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS host channel-4 DMA address register
    +        OTG_HS_HCDMA4: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        reserved416: [8]u8,
    +        ///  OTG_HS host channel-5 characteristics register
    +        OTG_HS_HCCHAR5: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multi Count (MC) / Error Count (EC)
    +            MC: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        ///  OTG_HS host channel-5 split control register
    +        OTG_HS_HCSPLT5: mmio.Mmio(packed struct(u32) {
    +            ///  Port address
    +            PRTADDR: u7,
    +            ///  Hub address
    +            HUBADDR: u7,
    +            ///  XACTPOS
    +            XACTPOS: u2,
    +            ///  Do complete split
    +            COMPLSPLT: u1,
    +            reserved31: u14,
    +            ///  Split enable
    +            SPLITEN: u1,
    +        }),
    +        ///  OTG_HS host channel-5 interrupt register
    +        OTG_HS_HCINT5: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            ///  Response received interrupt
    +            NYET: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-5 interrupt mask register
    +        OTG_HS_HCINTMSK5: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-5 transfer size register
    +        OTG_HS_HCTSIZ5: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS host channel-5 DMA address register
    +        OTG_HS_HCDMA5: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        reserved448: [8]u8,
    +        ///  OTG_HS host channel-6 characteristics register
    +        OTG_HS_HCCHAR6: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multi Count (MC) / Error Count (EC)
    +            MC: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        ///  OTG_HS host channel-6 split control register
    +        OTG_HS_HCSPLT6: mmio.Mmio(packed struct(u32) {
    +            ///  Port address
    +            PRTADDR: u7,
    +            ///  Hub address
    +            HUBADDR: u7,
    +            ///  XACTPOS
    +            XACTPOS: u2,
    +            ///  Do complete split
    +            COMPLSPLT: u1,
    +            reserved31: u14,
    +            ///  Split enable
    +            SPLITEN: u1,
    +        }),
    +        ///  OTG_HS host channel-6 interrupt register
    +        OTG_HS_HCINT6: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            ///  Response received interrupt
    +            NYET: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-6 interrupt mask register
    +        OTG_HS_HCINTMSK6: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-6 transfer size register
    +        OTG_HS_HCTSIZ6: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS host channel-6 DMA address register
    +        OTG_HS_HCDMA6: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        reserved480: [8]u8,
    +        ///  OTG_HS host channel-7 characteristics register
    +        OTG_HS_HCCHAR7: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multi Count (MC) / Error Count (EC)
    +            MC: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        ///  OTG_HS host channel-7 split control register
    +        OTG_HS_HCSPLT7: mmio.Mmio(packed struct(u32) {
    +            ///  Port address
    +            PRTADDR: u7,
    +            ///  Hub address
    +            HUBADDR: u7,
    +            ///  XACTPOS
    +            XACTPOS: u2,
    +            ///  Do complete split
    +            COMPLSPLT: u1,
    +            reserved31: u14,
    +            ///  Split enable
    +            SPLITEN: u1,
    +        }),
    +        ///  OTG_HS host channel-7 interrupt register
    +        OTG_HS_HCINT7: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            ///  Response received interrupt
    +            NYET: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-7 interrupt mask register
    +        OTG_HS_HCINTMSK7: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-7 transfer size register
    +        OTG_HS_HCTSIZ7: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS host channel-7 DMA address register
    +        OTG_HS_HCDMA7: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        reserved512: [8]u8,
    +        ///  OTG_HS host channel-8 characteristics register
    +        OTG_HS_HCCHAR8: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multi Count (MC) / Error Count (EC)
    +            MC: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        ///  OTG_HS host channel-8 split control register
    +        OTG_HS_HCSPLT8: mmio.Mmio(packed struct(u32) {
    +            ///  Port address
    +            PRTADDR: u7,
    +            ///  Hub address
    +            HUBADDR: u7,
    +            ///  XACTPOS
    +            XACTPOS: u2,
    +            ///  Do complete split
    +            COMPLSPLT: u1,
    +            reserved31: u14,
    +            ///  Split enable
    +            SPLITEN: u1,
    +        }),
    +        ///  OTG_HS host channel-8 interrupt register
    +        OTG_HS_HCINT8: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            ///  Response received interrupt
    +            NYET: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-8 interrupt mask register
    +        OTG_HS_HCINTMSK8: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-8 transfer size register
    +        OTG_HS_HCTSIZ8: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS host channel-8 DMA address register
    +        OTG_HS_HCDMA8: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        reserved544: [8]u8,
    +        ///  OTG_HS host channel-9 characteristics register
    +        OTG_HS_HCCHAR9: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multi Count (MC) / Error Count (EC)
    +            MC: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        ///  OTG_HS host channel-9 split control register
    +        OTG_HS_HCSPLT9: mmio.Mmio(packed struct(u32) {
    +            ///  Port address
    +            PRTADDR: u7,
    +            ///  Hub address
    +            HUBADDR: u7,
    +            ///  XACTPOS
    +            XACTPOS: u2,
    +            ///  Do complete split
    +            COMPLSPLT: u1,
    +            reserved31: u14,
    +            ///  Split enable
    +            SPLITEN: u1,
    +        }),
    +        ///  OTG_HS host channel-9 interrupt register
    +        OTG_HS_HCINT9: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            ///  Response received interrupt
    +            NYET: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-9 interrupt mask register
    +        OTG_HS_HCINTMSK9: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-9 transfer size register
    +        OTG_HS_HCTSIZ9: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS host channel-9 DMA address register
    +        OTG_HS_HCDMA9: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        reserved576: [8]u8,
    +        ///  OTG_HS host channel-10 characteristics register
    +        OTG_HS_HCCHAR10: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multi Count (MC) / Error Count (EC)
    +            MC: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        ///  OTG_HS host channel-10 split control register
    +        OTG_HS_HCSPLT10: mmio.Mmio(packed struct(u32) {
    +            ///  Port address
    +            PRTADDR: u7,
    +            ///  Hub address
    +            HUBADDR: u7,
    +            ///  XACTPOS
    +            XACTPOS: u2,
    +            ///  Do complete split
    +            COMPLSPLT: u1,
    +            reserved31: u14,
    +            ///  Split enable
    +            SPLITEN: u1,
    +        }),
    +        ///  OTG_HS host channel-10 interrupt register
    +        OTG_HS_HCINT10: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            ///  Response received interrupt
    +            NYET: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-10 interrupt mask register
    +        OTG_HS_HCINTMSK10: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-10 transfer size register
    +        OTG_HS_HCTSIZ10: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS host channel-10 DMA address register
    +        OTG_HS_HCDMA10: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +        reserved608: [8]u8,
    +        ///  OTG_HS host channel-11 characteristics register
    +        OTG_HS_HCCHAR11: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multi Count (MC) / Error Count (EC)
    +            MC: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        ///  OTG_HS host channel-11 split control register
    +        OTG_HS_HCSPLT11: mmio.Mmio(packed struct(u32) {
    +            ///  Port address
    +            PRTADDR: u7,
    +            ///  Hub address
    +            HUBADDR: u7,
    +            ///  XACTPOS
    +            XACTPOS: u2,
    +            ///  Do complete split
    +            COMPLSPLT: u1,
    +            reserved31: u14,
    +            ///  Split enable
    +            SPLITEN: u1,
    +        }),
    +        ///  OTG_HS host channel-11 interrupt register
    +        OTG_HS_HCINT11: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            ///  Response received interrupt
    +            NYET: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-11 interrupt mask register
    +        OTG_HS_HCINTMSK11: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            ///  AHB error
    +            AHBERR: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_HS host channel-11 transfer size register
    +        OTG_HS_HCTSIZ11: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        ///  OTG_HS host channel-11 DMA address register
    +        OTG_HS_HCDMA11: mmio.Mmio(packed struct(u32) {
    +            ///  DMA address
    +            DMAADDR: u32,
    +        }),
    +    };
    +
    +    ///  Secure digital input/output interface
    +    pub const SDIO = extern struct {
    +        ///  power control register
    +        POWER: mmio.Mmio(packed struct(u32) {
    +            ///  PWRCTRL
    +            PWRCTRL: u2,
    +            padding: u30,
    +        }),
    +        ///  SDI clock control register
    +        CLKCR: mmio.Mmio(packed struct(u32) {
    +            ///  Clock divide factor
    +            CLKDIV: u8,
    +            ///  Clock enable bit
    +            CLKEN: u1,
    +            ///  Power saving configuration bit
    +            PWRSAV: u1,
    +            ///  Clock divider bypass enable bit
    +            BYPASS: u1,
    +            ///  Wide bus mode enable bit
    +            WIDBUS: u2,
    +            ///  SDIO_CK dephasing selection bit
    +            NEGEDGE: u1,
    +            ///  HW Flow Control enable
    +            HWFC_EN: u1,
    +            padding: u17,
    +        }),
    +        ///  argument register
    +        ARG: mmio.Mmio(packed struct(u32) {
    +            ///  Command argument
    +            CMDARG: u32,
    +        }),
    +        ///  command register
    +        CMD: mmio.Mmio(packed struct(u32) {
    +            ///  Command index
    +            CMDINDEX: u6,
    +            ///  Wait for response bits
    +            WAITRESP: u2,
    +            ///  CPSM waits for interrupt request
    +            WAITINT: u1,
    +            ///  CPSM Waits for ends of data transfer (CmdPend internal signal).
    +            WAITPEND: u1,
    +            ///  Command path state machine (CPSM) Enable bit
    +            CPSMEN: u1,
    +            ///  SD I/O suspend command
    +            SDIOSuspend: u1,
    +            ///  Enable CMD completion
    +            ENCMDcompl: u1,
    +            ///  not Interrupt Enable
    +            nIEN: u1,
    +            ///  CE-ATA command
    +            CE_ATACMD: u1,
    +            padding: u17,
    +        }),
    +        ///  command response register
    +        RESPCMD: mmio.Mmio(packed struct(u32) {
    +            ///  Response command index
    +            RESPCMD: u6,
    +            padding: u26,
    +        }),
    +        ///  response 1..4 register
    +        RESP1: mmio.Mmio(packed struct(u32) {
    +            ///  see Table 132.
    +            CARDSTATUS1: u32,
    +        }),
    +        ///  response 1..4 register
    +        RESP2: mmio.Mmio(packed struct(u32) {
    +            ///  see Table 132.
    +            CARDSTATUS2: u32,
    +        }),
    +        ///  response 1..4 register
    +        RESP3: mmio.Mmio(packed struct(u32) {
    +            ///  see Table 132.
    +            CARDSTATUS3: u32,
    +        }),
    +        ///  response 1..4 register
    +        RESP4: mmio.Mmio(packed struct(u32) {
    +            ///  see Table 132.
    +            CARDSTATUS4: u32,
    +        }),
    +        ///  data timer register
    +        DTIMER: mmio.Mmio(packed struct(u32) {
    +            ///  Data timeout period
    +            DATATIME: u32,
    +        }),
    +        ///  data length register
    +        DLEN: mmio.Mmio(packed struct(u32) {
    +            ///  Data length value
    +            DATALENGTH: u25,
    +            padding: u7,
    +        }),
    +        ///  data control register
    +        DCTRL: mmio.Mmio(packed struct(u32) {
    +            ///  DTEN
    +            DTEN: u1,
    +            ///  Data transfer direction selection
    +            DTDIR: u1,
    +            ///  Data transfer mode selection 1: Stream or SDIO multibyte data transfer.
    +            DTMODE: u1,
    +            ///  DMA enable bit
    +            DMAEN: u1,
    +            ///  Data block size
    +            DBLOCKSIZE: u4,
    +            ///  Read wait start
    +            RWSTART: u1,
    +            ///  Read wait stop
    +            RWSTOP: u1,
    +            ///  Read wait mode
    +            RWMOD: u1,
    +            ///  SD I/O enable functions
    +            SDIOEN: u1,
    +            padding: u20,
    +        }),
    +        ///  data counter register
    +        DCOUNT: mmio.Mmio(packed struct(u32) {
    +            ///  Data count value
    +            DATACOUNT: u25,
    +            padding: u7,
    +        }),
    +        ///  status register
    +        STA: mmio.Mmio(packed struct(u32) {
    +            ///  Command response received (CRC check failed)
    +            CCRCFAIL: u1,
    +            ///  Data block sent/received (CRC check failed)
    +            DCRCFAIL: u1,
    +            ///  Command response timeout
    +            CTIMEOUT: u1,
    +            ///  Data timeout
    +            DTIMEOUT: u1,
    +            ///  Transmit FIFO underrun error
    +            TXUNDERR: u1,
    +            ///  Received FIFO overrun error
    +            RXOVERR: u1,
    +            ///  Command response received (CRC check passed)
    +            CMDREND: u1,
    +            ///  Command sent (no response required)
    +            CMDSENT: u1,
    +            ///  Data end (data counter, SDIDCOUNT, is zero)
    +            DATAEND: u1,
    +            ///  Start bit not detected on all data signals in wide bus mode
    +            STBITERR: u1,
    +            ///  Data block sent/received (CRC check passed)
    +            DBCKEND: u1,
    +            ///  Command transfer in progress
    +            CMDACT: u1,
    +            ///  Data transmit in progress
    +            TXACT: u1,
    +            ///  Data receive in progress
    +            RXACT: u1,
    +            ///  Transmit FIFO half empty: at least 8 words can be written into the FIFO
    +            TXFIFOHE: u1,
    +            ///  Receive FIFO half full: there are at least 8 words in the FIFO
    +            RXFIFOHF: u1,
    +            ///  Transmit FIFO full
    +            TXFIFOF: u1,
    +            ///  Receive FIFO full
    +            RXFIFOF: u1,
    +            ///  Transmit FIFO empty
    +            TXFIFOE: u1,
    +            ///  Receive FIFO empty
    +            RXFIFOE: u1,
    +            ///  Data available in transmit FIFO
    +            TXDAVL: u1,
    +            ///  Data available in receive FIFO
    +            RXDAVL: u1,
    +            ///  SDIO interrupt received
    +            SDIOIT: u1,
    +            ///  CE-ATA command completion signal received for CMD61
    +            CEATAEND: u1,
    +            padding: u8,
    +        }),
    +        ///  interrupt clear register
    +        ICR: mmio.Mmio(packed struct(u32) {
    +            ///  CCRCFAIL flag clear bit
    +            CCRCFAILC: u1,
    +            ///  DCRCFAIL flag clear bit
    +            DCRCFAILC: u1,
    +            ///  CTIMEOUT flag clear bit
    +            CTIMEOUTC: u1,
    +            ///  DTIMEOUT flag clear bit
    +            DTIMEOUTC: u1,
    +            ///  TXUNDERR flag clear bit
    +            TXUNDERRC: u1,
    +            ///  RXOVERR flag clear bit
    +            RXOVERRC: u1,
    +            ///  CMDREND flag clear bit
    +            CMDRENDC: u1,
    +            ///  CMDSENT flag clear bit
    +            CMDSENTC: u1,
    +            ///  DATAEND flag clear bit
    +            DATAENDC: u1,
    +            ///  STBITERR flag clear bit
    +            STBITERRC: u1,
    +            ///  DBCKEND flag clear bit
    +            DBCKENDC: u1,
    +            reserved22: u11,
    +            ///  SDIOIT flag clear bit
    +            SDIOITC: u1,
    +            ///  CEATAEND flag clear bit
    +            CEATAENDC: u1,
    +            padding: u8,
    +        }),
    +        ///  mask register
    +        MASK: mmio.Mmio(packed struct(u32) {
    +            ///  Command CRC fail interrupt enable
    +            CCRCFAILIE: u1,
    +            ///  Data CRC fail interrupt enable
    +            DCRCFAILIE: u1,
    +            ///  Command timeout interrupt enable
    +            CTIMEOUTIE: u1,
    +            ///  Data timeout interrupt enable
    +            DTIMEOUTIE: u1,
    +            ///  Tx FIFO underrun error interrupt enable
    +            TXUNDERRIE: u1,
    +            ///  Rx FIFO overrun error interrupt enable
    +            RXOVERRIE: u1,
    +            ///  Command response received interrupt enable
    +            CMDRENDIE: u1,
    +            ///  Command sent interrupt enable
    +            CMDSENTIE: u1,
    +            ///  Data end interrupt enable
    +            DATAENDIE: u1,
    +            ///  Start bit error interrupt enable
    +            STBITERRIE: u1,
    +            ///  Data block end interrupt enable
    +            DBCKENDIE: u1,
    +            ///  Command acting interrupt enable
    +            CMDACTIE: u1,
    +            ///  Data transmit acting interrupt enable
    +            TXACTIE: u1,
    +            ///  Data receive acting interrupt enable
    +            RXACTIE: u1,
    +            ///  Tx FIFO half empty interrupt enable
    +            TXFIFOHEIE: u1,
    +            ///  Rx FIFO half full interrupt enable
    +            RXFIFOHFIE: u1,
    +            ///  Tx FIFO full interrupt enable
    +            TXFIFOFIE: u1,
    +            ///  Rx FIFO full interrupt enable
    +            RXFIFOFIE: u1,
    +            ///  Tx FIFO empty interrupt enable
    +            TXFIFOEIE: u1,
    +            ///  Rx FIFO empty interrupt enable
    +            RXFIFOEIE: u1,
    +            ///  Data available in Tx FIFO interrupt enable
    +            TXDAVLIE: u1,
    +            ///  Data available in Rx FIFO interrupt enable
    +            RXDAVLIE: u1,
    +            ///  SDIO mode interrupt received interrupt enable
    +            SDIOITIE: u1,
    +            ///  CE-ATA command completion signal received interrupt enable
    +            CEATAENDIE: u1,
    +            padding: u8,
    +        }),
    +        reserved72: [8]u8,
    +        ///  FIFO counter register
    +        FIFOCNT: mmio.Mmio(packed struct(u32) {
    +            ///  Remaining number of words to be written to or read from the FIFO.
    +            FIFOCOUNT: u24,
    +            padding: u8,
    +        }),
    +        reserved128: [52]u8,
    +        ///  data FIFO register
    +        FIFO: mmio.Mmio(packed struct(u32) {
    +            ///  Receive and transmit FIFO data
    +            FIFOData: u32,
    +        }),
    +    };
    +
    +    ///  Analog-to-digital converter
    +    pub const ADC1 = extern struct {
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Analog watchdog flag
    +            AWD: u1,
    +            ///  Regular channel end of conversion
    +            EOC: u1,
    +            ///  Injected channel end of conversion
    +            JEOC: u1,
    +            ///  Injected channel start flag
    +            JSTRT: u1,
    +            ///  Regular channel start flag
    +            STRT: u1,
    +            ///  Overrun
    +            OVR: u1,
    +            padding: u26,
    +        }),
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Analog watchdog channel select bits
    +            AWDCH: u5,
    +            ///  Interrupt enable for EOC
    +            EOCIE: u1,
    +            ///  Analog watchdog interrupt enable
    +            AWDIE: u1,
    +            ///  Interrupt enable for injected channels
    +            JEOCIE: u1,
    +            ///  Scan mode
    +            SCAN: u1,
    +            ///  Enable the watchdog on a single channel in scan mode
    +            AWDSGL: u1,
    +            ///  Automatic injected group conversion
    +            JAUTO: u1,
    +            ///  Discontinuous mode on regular channels
    +            DISCEN: u1,
    +            ///  Discontinuous mode on injected channels
    +            JDISCEN: u1,
    +            ///  Discontinuous mode channel count
    +            DISCNUM: u3,
    +            reserved22: u6,
    +            ///  Analog watchdog enable on injected channels
    +            JAWDEN: u1,
    +            ///  Analog watchdog enable on regular channels
    +            AWDEN: u1,
    +            ///  Resolution
    +            RES: u2,
    +            ///  Overrun interrupt enable
    +            OVRIE: u1,
    +            padding: u5,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            ///  A/D Converter ON / OFF
    +            ADON: u1,
    +            ///  Continuous conversion
    +            CONT: u1,
    +            reserved8: u6,
    +            ///  Direct memory access mode (for single ADC mode)
    +            DMA: u1,
    +            ///  DMA disable selection (for single ADC mode)
    +            DDS: u1,
    +            ///  End of conversion selection
    +            EOCS: u1,
    +            ///  Data alignment
    +            ALIGN: u1,
    +            reserved16: u4,
    +            ///  External event select for injected group
    +            JEXTSEL: u4,
    +            ///  External trigger enable for injected channels
    +            JEXTEN: u2,
    +            ///  Start conversion of injected channels
    +            JSWSTART: u1,
    +            reserved24: u1,
    +            ///  External event select for regular group
    +            EXTSEL: u4,
    +            ///  External trigger enable for regular channels
    +            EXTEN: u2,
    +            ///  Start conversion of regular channels
    +            SWSTART: u1,
    +            padding: u1,
    +        }),
    +        ///  sample time register 1
    +        SMPR1: mmio.Mmio(packed struct(u32) {
    +            ///  Sample time bits
    +            SMPx_x: u32,
    +        }),
    +        ///  sample time register 2
    +        SMPR2: mmio.Mmio(packed struct(u32) {
    +            ///  Sample time bits
    +            SMPx_x: u32,
    +        }),
    +        ///  injected channel data offset register x
    +        JOFR1: mmio.Mmio(packed struct(u32) {
    +            ///  Data offset for injected channel x
    +            JOFFSET1: u12,
    +            padding: u20,
    +        }),
    +        ///  injected channel data offset register x
    +        JOFR2: mmio.Mmio(packed struct(u32) {
    +            ///  Data offset for injected channel x
    +            JOFFSET2: u12,
    +            padding: u20,
    +        }),
    +        ///  injected channel data offset register x
    +        JOFR3: mmio.Mmio(packed struct(u32) {
    +            ///  Data offset for injected channel x
    +            JOFFSET3: u12,
    +            padding: u20,
    +        }),
    +        ///  injected channel data offset register x
    +        JOFR4: mmio.Mmio(packed struct(u32) {
    +            ///  Data offset for injected channel x
    +            JOFFSET4: u12,
    +            padding: u20,
    +        }),
    +        ///  watchdog higher threshold register
    +        HTR: mmio.Mmio(packed struct(u32) {
    +            ///  Analog watchdog higher threshold
    +            HT: u12,
    +            padding: u20,
    +        }),
    +        ///  watchdog lower threshold register
    +        LTR: mmio.Mmio(packed struct(u32) {
    +            ///  Analog watchdog lower threshold
    +            LT: u12,
    +            padding: u20,
    +        }),
    +        ///  regular sequence register 1
    +        SQR1: mmio.Mmio(packed struct(u32) {
    +            ///  13th conversion in regular sequence
    +            SQ13: u5,
    +            ///  14th conversion in regular sequence
    +            SQ14: u5,
    +            ///  15th conversion in regular sequence
    +            SQ15: u5,
    +            ///  16th conversion in regular sequence
    +            SQ16: u5,
    +            ///  Regular channel sequence length
    +            L: u4,
    +            padding: u8,
    +        }),
    +        ///  regular sequence register 2
    +        SQR2: mmio.Mmio(packed struct(u32) {
    +            ///  7th conversion in regular sequence
    +            SQ7: u5,
    +            ///  8th conversion in regular sequence
    +            SQ8: u5,
    +            ///  9th conversion in regular sequence
    +            SQ9: u5,
    +            ///  10th conversion in regular sequence
    +            SQ10: u5,
    +            ///  11th conversion in regular sequence
    +            SQ11: u5,
    +            ///  12th conversion in regular sequence
    +            SQ12: u5,
    +            padding: u2,
    +        }),
    +        ///  regular sequence register 3
    +        SQR3: mmio.Mmio(packed struct(u32) {
    +            ///  1st conversion in regular sequence
    +            SQ1: u5,
    +            ///  2nd conversion in regular sequence
    +            SQ2: u5,
    +            ///  3rd conversion in regular sequence
    +            SQ3: u5,
    +            ///  4th conversion in regular sequence
    +            SQ4: u5,
    +            ///  5th conversion in regular sequence
    +            SQ5: u5,
    +            ///  6th conversion in regular sequence
    +            SQ6: u5,
    +            padding: u2,
    +        }),
    +        ///  injected sequence register
    +        JSQR: mmio.Mmio(packed struct(u32) {
    +            ///  1st conversion in injected sequence
    +            JSQ1: u5,
    +            ///  2nd conversion in injected sequence
    +            JSQ2: u5,
    +            ///  3rd conversion in injected sequence
    +            JSQ3: u5,
    +            ///  4th conversion in injected sequence
    +            JSQ4: u5,
    +            ///  Injected sequence length
    +            JL: u2,
    +            padding: u10,
    +        }),
    +        ///  injected data register x
    +        JDR1: mmio.Mmio(packed struct(u32) {
    +            ///  Injected data
    +            JDATA: u16,
    +            padding: u16,
    +        }),
    +        ///  injected data register x
    +        JDR2: mmio.Mmio(packed struct(u32) {
    +            ///  Injected data
    +            JDATA: u16,
    +            padding: u16,
    +        }),
    +        ///  injected data register x
    +        JDR3: mmio.Mmio(packed struct(u32) {
    +            ///  Injected data
    +            JDATA: u16,
    +            padding: u16,
    +        }),
    +        ///  injected data register x
    +        JDR4: mmio.Mmio(packed struct(u32) {
    +            ///  Injected data
    +            JDATA: u16,
    +            padding: u16,
    +        }),
    +        ///  regular data register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  Regular data
    +            DATA: u16,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  USB on the go high speed
    +    pub const OTG_HS_GLOBAL = extern struct {
    +        ///  OTG_HS control and status register
    +        OTG_HS_GOTGCTL: mmio.Mmio(packed struct(u32) {
    +            ///  Session request success
    +            SRQSCS: u1,
    +            ///  Session request
    +            SRQ: u1,
    +            reserved8: u6,
    +            ///  Host negotiation success
    +            HNGSCS: u1,
    +            ///  HNP request
    +            HNPRQ: u1,
    +            ///  Host set HNP enable
    +            HSHNPEN: u1,
    +            ///  Device HNP enabled
    +            DHNPEN: u1,
    +            reserved16: u4,
    +            ///  Connector ID status
    +            CIDSTS: u1,
    +            ///  Long/short debounce time
    +            DBCT: u1,
    +            ///  A-session valid
    +            ASVLD: u1,
    +            ///  B-session valid
    +            BSVLD: u1,
    +            padding: u12,
    +        }),
    +        ///  OTG_HS interrupt register
    +        OTG_HS_GOTGINT: mmio.Mmio(packed struct(u32) {
    +            reserved2: u2,
    +            ///  Session end detected
    +            SEDET: u1,
    +            reserved8: u5,
    +            ///  Session request success status change
    +            SRSSCHG: u1,
    +            ///  Host negotiation success status change
    +            HNSSCHG: u1,
    +            reserved17: u7,
    +            ///  Host negotiation detected
    +            HNGDET: u1,
    +            ///  A-device timeout change
    +            ADTOCHG: u1,
    +            ///  Debounce done
    +            DBCDNE: u1,
    +            padding: u12,
    +        }),
    +        ///  OTG_HS AHB configuration register
    +        OTG_HS_GAHBCFG: mmio.Mmio(packed struct(u32) {
    +            ///  Global interrupt mask
    +            GINT: u1,
    +            ///  Burst length/type
    +            HBSTLEN: u4,
    +            ///  DMA enable
    +            DMAEN: u1,
    +            reserved7: u1,
    +            ///  TxFIFO empty level
    +            TXFELVL: u1,
    +            ///  Periodic TxFIFO empty level
    +            PTXFELVL: u1,
    +            padding: u23,
    +        }),
    +        ///  OTG_HS USB configuration register
    +        OTG_HS_GUSBCFG: mmio.Mmio(packed struct(u32) {
    +            ///  FS timeout calibration
    +            TOCAL: u3,
    +            reserved6: u3,
    +            ///  USB 2.0 high-speed ULPI PHY or USB 1.1 full-speed serial transceiver select
    +            PHYSEL: u1,
    +            reserved8: u1,
    +            ///  SRP-capable
    +            SRPCAP: u1,
    +            ///  HNP-capable
    +            HNPCAP: u1,
    +            ///  USB turnaround time
    +            TRDT: u4,
    +            reserved15: u1,
    +            ///  PHY Low-power clock select
    +            PHYLPCS: u1,
    +            reserved17: u1,
    +            ///  ULPI FS/LS select
    +            ULPIFSLS: u1,
    +            ///  ULPI Auto-resume
    +            ULPIAR: u1,
    +            ///  ULPI Clock SuspendM
    +            ULPICSM: u1,
    +            ///  ULPI External VBUS Drive
    +            ULPIEVBUSD: u1,
    +            ///  ULPI external VBUS indicator
    +            ULPIEVBUSI: u1,
    +            ///  TermSel DLine pulsing selection
    +            TSDPS: u1,
    +            ///  Indicator complement
    +            PCCI: u1,
    +            ///  Indicator pass through
    +            PTCI: u1,
    +            ///  ULPI interface protect disable
    +            ULPIIPD: u1,
    +            reserved29: u3,
    +            ///  Forced host mode
    +            FHMOD: u1,
    +            ///  Forced peripheral mode
    +            FDMOD: u1,
    +            ///  Corrupt Tx packet
    +            CTXPKT: u1,
    +        }),
    +        ///  OTG_HS reset register
    +        OTG_HS_GRSTCTL: mmio.Mmio(packed struct(u32) {
    +            ///  Core soft reset
    +            CSRST: u1,
    +            ///  HCLK soft reset
    +            HSRST: u1,
    +            ///  Host frame counter reset
    +            FCRST: u1,
    +            reserved4: u1,
    +            ///  RxFIFO flush
    +            RXFFLSH: u1,
    +            ///  TxFIFO flush
    +            TXFFLSH: u1,
    +            ///  TxFIFO number
    +            TXFNUM: u5,
    +            reserved30: u19,
    +            ///  DMA request signal
    +            DMAREQ: u1,
    +            ///  AHB master idle
    +            AHBIDL: u1,
    +        }),
    +        ///  OTG_HS core interrupt register
    +        OTG_HS_GINTSTS: mmio.Mmio(packed struct(u32) {
    +            ///  Current mode of operation
    +            CMOD: u1,
    +            ///  Mode mismatch interrupt
    +            MMIS: u1,
    +            ///  OTG interrupt
    +            OTGINT: u1,
    +            ///  Start of frame
    +            SOF: u1,
    +            ///  RxFIFO nonempty
    +            RXFLVL: u1,
    +            ///  Nonperiodic TxFIFO empty
    +            NPTXFE: u1,
    +            ///  Global IN nonperiodic NAK effective
    +            GINAKEFF: u1,
    +            ///  Global OUT NAK effective
    +            BOUTNAKEFF: u1,
    +            reserved10: u2,
    +            ///  Early suspend
    +            ESUSP: u1,
    +            ///  USB suspend
    +            USBSUSP: u1,
    +            ///  USB reset
    +            USBRST: u1,
    +            ///  Enumeration done
    +            ENUMDNE: u1,
    +            ///  Isochronous OUT packet dropped interrupt
    +            ISOODRP: u1,
    +            ///  End of periodic frame interrupt
    +            EOPF: u1,
    +            reserved18: u2,
    +            ///  IN endpoint interrupt
    +            IEPINT: u1,
    +            ///  OUT endpoint interrupt
    +            OEPINT: u1,
    +            ///  Incomplete isochronous IN transfer
    +            IISOIXFR: u1,
    +            ///  Incomplete periodic transfer
    +            PXFR_INCOMPISOOUT: u1,
    +            ///  Data fetch suspended
    +            DATAFSUSP: u1,
    +            reserved24: u1,
    +            ///  Host port interrupt
    +            HPRTINT: u1,
    +            ///  Host channels interrupt
    +            HCINT: u1,
    +            ///  Periodic TxFIFO empty
    +            PTXFE: u1,
    +            reserved28: u1,
    +            ///  Connector ID status change
    +            CIDSCHG: u1,
    +            ///  Disconnect detected interrupt
    +            DISCINT: u1,
    +            ///  Session request/new session detected interrupt
    +            SRQINT: u1,
    +            ///  Resume/remote wakeup detected interrupt
    +            WKUINT: u1,
    +        }),
    +        ///  OTG_HS interrupt mask register
    +        OTG_HS_GINTMSK: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  Mode mismatch interrupt mask
    +            MMISM: u1,
    +            ///  OTG interrupt mask
    +            OTGINT: u1,
    +            ///  Start of frame mask
    +            SOFM: u1,
    +            ///  Receive FIFO nonempty mask
    +            RXFLVLM: u1,
    +            ///  Nonperiodic TxFIFO empty mask
    +            NPTXFEM: u1,
    +            ///  Global nonperiodic IN NAK effective mask
    +            GINAKEFFM: u1,
    +            ///  Global OUT NAK effective mask
    +            GONAKEFFM: u1,
    +            reserved10: u2,
    +            ///  Early suspend mask
    +            ESUSPM: u1,
    +            ///  USB suspend mask
    +            USBSUSPM: u1,
    +            ///  USB reset mask
    +            USBRST: u1,
    +            ///  Enumeration done mask
    +            ENUMDNEM: u1,
    +            ///  Isochronous OUT packet dropped interrupt mask
    +            ISOODRPM: u1,
    +            ///  End of periodic frame interrupt mask
    +            EOPFM: u1,
    +            reserved17: u1,
    +            ///  Endpoint mismatch interrupt mask
    +            EPMISM: u1,
    +            ///  IN endpoints interrupt mask
    +            IEPINT: u1,
    +            ///  OUT endpoints interrupt mask
    +            OEPINT: u1,
    +            ///  Incomplete isochronous IN transfer mask
    +            IISOIXFRM: u1,
    +            ///  Incomplete periodic transfer mask
    +            PXFRM_IISOOXFRM: u1,
    +            ///  Data fetch suspended mask
    +            FSUSPM: u1,
    +            reserved24: u1,
    +            ///  Host port interrupt mask
    +            PRTIM: u1,
    +            ///  Host channels interrupt mask
    +            HCIM: u1,
    +            ///  Periodic TxFIFO empty mask
    +            PTXFEM: u1,
    +            reserved28: u1,
    +            ///  Connector ID status change mask
    +            CIDSCHGM: u1,
    +            ///  Disconnect detected interrupt mask
    +            DISCINT: u1,
    +            ///  Session request/new session detected interrupt mask
    +            SRQIM: u1,
    +            ///  Resume/remote wakeup detected interrupt mask
    +            WUIM: u1,
    +        }),
    +        ///  OTG_HS Receive status debug read register (host mode)
    +        OTG_HS_GRXSTSR_Host: mmio.Mmio(packed struct(u32) {
    +            ///  Channel number
    +            CHNUM: u4,
    +            ///  Byte count
    +            BCNT: u11,
    +            ///  Data PID
    +            DPID: u2,
    +            ///  Packet status
    +            PKTSTS: u4,
    +            padding: u11,
    +        }),
    +        ///  OTG_HS status read and pop register (host mode)
    +        OTG_HS_GRXSTSP_Host: mmio.Mmio(packed struct(u32) {
    +            ///  Channel number
    +            CHNUM: u4,
    +            ///  Byte count
    +            BCNT: u11,
    +            ///  Data PID
    +            DPID: u2,
    +            ///  Packet status
    +            PKTSTS: u4,
    +            padding: u11,
    +        }),
    +        ///  OTG_HS Receive FIFO size register
    +        OTG_HS_GRXFSIZ: mmio.Mmio(packed struct(u32) {
    +            ///  RxFIFO depth
    +            RXFD: u16,
    +            padding: u16,
    +        }),
    +        ///  OTG_HS nonperiodic transmit FIFO size register (host mode)
    +        OTG_HS_GNPTXFSIZ_Host: mmio.Mmio(packed struct(u32) {
    +            ///  Nonperiodic transmit RAM start address
    +            NPTXFSA: u16,
    +            ///  Nonperiodic TxFIFO depth
    +            NPTXFD: u16,
    +        }),
    +        ///  OTG_HS nonperiodic transmit FIFO/queue status register
    +        OTG_HS_GNPTXSTS: mmio.Mmio(packed struct(u32) {
    +            ///  Nonperiodic TxFIFO space available
    +            NPTXFSAV: u16,
    +            ///  Nonperiodic transmit request queue space available
    +            NPTQXSAV: u8,
    +            ///  Top of the nonperiodic transmit request queue
    +            NPTXQTOP: u7,
    +            padding: u1,
    +        }),
    +        reserved56: [8]u8,
    +        ///  OTG_HS general core configuration register
    +        OTG_HS_GCCFG: mmio.Mmio(packed struct(u32) {
    +            reserved16: u16,
    +            ///  Power down
    +            PWRDWN: u1,
    +            ///  Enable I2C bus connection for the external I2C PHY interface
    +            I2CPADEN: u1,
    +            ///  Enable the VBUS sensing device
    +            VBUSASEN: u1,
    +            ///  Enable the VBUS sensing device
    +            VBUSBSEN: u1,
    +            ///  SOF output enable
    +            SOFOUTEN: u1,
    +            ///  VBUS sensing disable option
    +            NOVBUSSENS: u1,
    +            padding: u10,
    +        }),
    +        ///  OTG_HS core ID register
    +        OTG_HS_CID: mmio.Mmio(packed struct(u32) {
    +            ///  Product ID field
    +            PRODUCT_ID: u32,
    +        }),
    +        reserved256: [192]u8,
    +        ///  OTG_HS Host periodic transmit FIFO size register
    +        OTG_HS_HPTXFSIZ: mmio.Mmio(packed struct(u32) {
    +            ///  Host periodic TxFIFO start address
    +            PTXSA: u16,
    +            ///  Host periodic TxFIFO depth
    +            PTXFD: u16,
    +        }),
    +        ///  OTG_HS device IN endpoint transmit FIFO size register
    +        OTG_HS_DIEPTXF1: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint FIFOx transmit RAM start address
    +            INEPTXSA: u16,
    +            ///  IN endpoint TxFIFO depth
    +            INEPTXFD: u16,
    +        }),
    +        ///  OTG_HS device IN endpoint transmit FIFO size register
    +        OTG_HS_DIEPTXF2: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint FIFOx transmit RAM start address
    +            INEPTXSA: u16,
    +            ///  IN endpoint TxFIFO depth
    +            INEPTXFD: u16,
    +        }),
    +        reserved284: [16]u8,
    +        ///  OTG_HS device IN endpoint transmit FIFO size register
    +        OTG_HS_DIEPTXF3: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint FIFOx transmit RAM start address
    +            INEPTXSA: u16,
    +            ///  IN endpoint TxFIFO depth
    +            INEPTXFD: u16,
    +        }),
    +        ///  OTG_HS device IN endpoint transmit FIFO size register
    +        OTG_HS_DIEPTXF4: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint FIFOx transmit RAM start address
    +            INEPTXSA: u16,
    +            ///  IN endpoint TxFIFO depth
    +            INEPTXFD: u16,
    +        }),
    +        ///  OTG_HS device IN endpoint transmit FIFO size register
    +        OTG_HS_DIEPTXF5: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint FIFOx transmit RAM start address
    +            INEPTXSA: u16,
    +            ///  IN endpoint TxFIFO depth
    +            INEPTXFD: u16,
    +        }),
    +        ///  OTG_HS device IN endpoint transmit FIFO size register
    +        OTG_HS_DIEPTXF6: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint FIFOx transmit RAM start address
    +            INEPTXSA: u16,
    +            ///  IN endpoint TxFIFO depth
    +            INEPTXFD: u16,
    +        }),
    +        ///  OTG_HS device IN endpoint transmit FIFO size register
    +        OTG_HS_DIEPTXF7: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint FIFOx transmit RAM start address
    +            INEPTXSA: u16,
    +            ///  IN endpoint TxFIFO depth
    +            INEPTXFD: u16,
    +        }),
    +    };
    +
    +    ///  External interrupt/event controller
    +    pub const EXTI = extern struct {
    +        ///  Interrupt mask register (EXTI_IMR)
    +        IMR: mmio.Mmio(packed struct(u32) {
    +            ///  Interrupt Mask on line 0
    +            MR0: u1,
    +            ///  Interrupt Mask on line 1
    +            MR1: u1,
    +            ///  Interrupt Mask on line 2
    +            MR2: u1,
    +            ///  Interrupt Mask on line 3
    +            MR3: u1,
    +            ///  Interrupt Mask on line 4
    +            MR4: u1,
    +            ///  Interrupt Mask on line 5
    +            MR5: u1,
    +            ///  Interrupt Mask on line 6
    +            MR6: u1,
    +            ///  Interrupt Mask on line 7
    +            MR7: u1,
    +            ///  Interrupt Mask on line 8
    +            MR8: u1,
    +            ///  Interrupt Mask on line 9
    +            MR9: u1,
    +            ///  Interrupt Mask on line 10
    +            MR10: u1,
    +            ///  Interrupt Mask on line 11
    +            MR11: u1,
    +            ///  Interrupt Mask on line 12
    +            MR12: u1,
    +            ///  Interrupt Mask on line 13
    +            MR13: u1,
    +            ///  Interrupt Mask on line 14
    +            MR14: u1,
    +            ///  Interrupt Mask on line 15
    +            MR15: u1,
    +            ///  Interrupt Mask on line 16
    +            MR16: u1,
    +            ///  Interrupt Mask on line 17
    +            MR17: u1,
    +            ///  Interrupt Mask on line 18
    +            MR18: u1,
    +            ///  Interrupt Mask on line 19
    +            MR19: u1,
    +            ///  Interrupt Mask on line 20
    +            MR20: u1,
    +            ///  Interrupt Mask on line 21
    +            MR21: u1,
    +            ///  Interrupt Mask on line 22
    +            MR22: u1,
    +            padding: u9,
    +        }),
    +        ///  Event mask register (EXTI_EMR)
    +        EMR: mmio.Mmio(packed struct(u32) {
    +            ///  Event Mask on line 0
    +            MR0: u1,
    +            ///  Event Mask on line 1
    +            MR1: u1,
    +            ///  Event Mask on line 2
    +            MR2: u1,
    +            ///  Event Mask on line 3
    +            MR3: u1,
    +            ///  Event Mask on line 4
    +            MR4: u1,
    +            ///  Event Mask on line 5
    +            MR5: u1,
    +            ///  Event Mask on line 6
    +            MR6: u1,
    +            ///  Event Mask on line 7
    +            MR7: u1,
    +            ///  Event Mask on line 8
    +            MR8: u1,
    +            ///  Event Mask on line 9
    +            MR9: u1,
    +            ///  Event Mask on line 10
    +            MR10: u1,
    +            ///  Event Mask on line 11
    +            MR11: u1,
    +            ///  Event Mask on line 12
    +            MR12: u1,
    +            ///  Event Mask on line 13
    +            MR13: u1,
    +            ///  Event Mask on line 14
    +            MR14: u1,
    +            ///  Event Mask on line 15
    +            MR15: u1,
    +            ///  Event Mask on line 16
    +            MR16: u1,
    +            ///  Event Mask on line 17
    +            MR17: u1,
    +            ///  Event Mask on line 18
    +            MR18: u1,
    +            ///  Event Mask on line 19
    +            MR19: u1,
    +            ///  Event Mask on line 20
    +            MR20: u1,
    +            ///  Event Mask on line 21
    +            MR21: u1,
    +            ///  Event Mask on line 22
    +            MR22: u1,
    +            padding: u9,
    +        }),
    +        ///  Rising Trigger selection register (EXTI_RTSR)
    +        RTSR: mmio.Mmio(packed struct(u32) {
    +            ///  Rising trigger event configuration of line 0
    +            TR0: u1,
    +            ///  Rising trigger event configuration of line 1
    +            TR1: u1,
    +            ///  Rising trigger event configuration of line 2
    +            TR2: u1,
    +            ///  Rising trigger event configuration of line 3
    +            TR3: u1,
    +            ///  Rising trigger event configuration of line 4
    +            TR4: u1,
    +            ///  Rising trigger event configuration of line 5
    +            TR5: u1,
    +            ///  Rising trigger event configuration of line 6
    +            TR6: u1,
    +            ///  Rising trigger event configuration of line 7
    +            TR7: u1,
    +            ///  Rising trigger event configuration of line 8
    +            TR8: u1,
    +            ///  Rising trigger event configuration of line 9
    +            TR9: u1,
    +            ///  Rising trigger event configuration of line 10
    +            TR10: u1,
    +            ///  Rising trigger event configuration of line 11
    +            TR11: u1,
    +            ///  Rising trigger event configuration of line 12
    +            TR12: u1,
    +            ///  Rising trigger event configuration of line 13
    +            TR13: u1,
    +            ///  Rising trigger event configuration of line 14
    +            TR14: u1,
    +            ///  Rising trigger event configuration of line 15
    +            TR15: u1,
    +            ///  Rising trigger event configuration of line 16
    +            TR16: u1,
    +            ///  Rising trigger event configuration of line 17
    +            TR17: u1,
    +            ///  Rising trigger event configuration of line 18
    +            TR18: u1,
    +            ///  Rising trigger event configuration of line 19
    +            TR19: u1,
    +            ///  Rising trigger event configuration of line 20
    +            TR20: u1,
    +            ///  Rising trigger event configuration of line 21
    +            TR21: u1,
    +            ///  Rising trigger event configuration of line 22
    +            TR22: u1,
    +            padding: u9,
    +        }),
    +        ///  Falling Trigger selection register (EXTI_FTSR)
    +        FTSR: mmio.Mmio(packed struct(u32) {
    +            ///  Falling trigger event configuration of line 0
    +            TR0: u1,
    +            ///  Falling trigger event configuration of line 1
    +            TR1: u1,
    +            ///  Falling trigger event configuration of line 2
    +            TR2: u1,
    +            ///  Falling trigger event configuration of line 3
    +            TR3: u1,
    +            ///  Falling trigger event configuration of line 4
    +            TR4: u1,
    +            ///  Falling trigger event configuration of line 5
    +            TR5: u1,
    +            ///  Falling trigger event configuration of line 6
    +            TR6: u1,
    +            ///  Falling trigger event configuration of line 7
    +            TR7: u1,
    +            ///  Falling trigger event configuration of line 8
    +            TR8: u1,
    +            ///  Falling trigger event configuration of line 9
    +            TR9: u1,
    +            ///  Falling trigger event configuration of line 10
    +            TR10: u1,
    +            ///  Falling trigger event configuration of line 11
    +            TR11: u1,
    +            ///  Falling trigger event configuration of line 12
    +            TR12: u1,
    +            ///  Falling trigger event configuration of line 13
    +            TR13: u1,
    +            ///  Falling trigger event configuration of line 14
    +            TR14: u1,
    +            ///  Falling trigger event configuration of line 15
    +            TR15: u1,
    +            ///  Falling trigger event configuration of line 16
    +            TR16: u1,
    +            ///  Falling trigger event configuration of line 17
    +            TR17: u1,
    +            ///  Falling trigger event configuration of line 18
    +            TR18: u1,
    +            ///  Falling trigger event configuration of line 19
    +            TR19: u1,
    +            ///  Falling trigger event configuration of line 20
    +            TR20: u1,
    +            ///  Falling trigger event configuration of line 21
    +            TR21: u1,
    +            ///  Falling trigger event configuration of line 22
    +            TR22: u1,
    +            padding: u9,
    +        }),
    +        ///  Software interrupt event register (EXTI_SWIER)
    +        SWIER: mmio.Mmio(packed struct(u32) {
    +            ///  Software Interrupt on line 0
    +            SWIER0: u1,
    +            ///  Software Interrupt on line 1
    +            SWIER1: u1,
    +            ///  Software Interrupt on line 2
    +            SWIER2: u1,
    +            ///  Software Interrupt on line 3
    +            SWIER3: u1,
    +            ///  Software Interrupt on line 4
    +            SWIER4: u1,
    +            ///  Software Interrupt on line 5
    +            SWIER5: u1,
    +            ///  Software Interrupt on line 6
    +            SWIER6: u1,
    +            ///  Software Interrupt on line 7
    +            SWIER7: u1,
    +            ///  Software Interrupt on line 8
    +            SWIER8: u1,
    +            ///  Software Interrupt on line 9
    +            SWIER9: u1,
    +            ///  Software Interrupt on line 10
    +            SWIER10: u1,
    +            ///  Software Interrupt on line 11
    +            SWIER11: u1,
    +            ///  Software Interrupt on line 12
    +            SWIER12: u1,
    +            ///  Software Interrupt on line 13
    +            SWIER13: u1,
    +            ///  Software Interrupt on line 14
    +            SWIER14: u1,
    +            ///  Software Interrupt on line 15
    +            SWIER15: u1,
    +            ///  Software Interrupt on line 16
    +            SWIER16: u1,
    +            ///  Software Interrupt on line 17
    +            SWIER17: u1,
    +            ///  Software Interrupt on line 18
    +            SWIER18: u1,
    +            ///  Software Interrupt on line 19
    +            SWIER19: u1,
    +            ///  Software Interrupt on line 20
    +            SWIER20: u1,
    +            ///  Software Interrupt on line 21
    +            SWIER21: u1,
    +            ///  Software Interrupt on line 22
    +            SWIER22: u1,
    +            padding: u9,
    +        }),
    +        ///  Pending register (EXTI_PR)
    +        PR: mmio.Mmio(packed struct(u32) {
    +            ///  Pending bit 0
    +            PR0: u1,
    +            ///  Pending bit 1
    +            PR1: u1,
    +            ///  Pending bit 2
    +            PR2: u1,
    +            ///  Pending bit 3
    +            PR3: u1,
    +            ///  Pending bit 4
    +            PR4: u1,
    +            ///  Pending bit 5
    +            PR5: u1,
    +            ///  Pending bit 6
    +            PR6: u1,
    +            ///  Pending bit 7
    +            PR7: u1,
    +            ///  Pending bit 8
    +            PR8: u1,
    +            ///  Pending bit 9
    +            PR9: u1,
    +            ///  Pending bit 10
    +            PR10: u1,
    +            ///  Pending bit 11
    +            PR11: u1,
    +            ///  Pending bit 12
    +            PR12: u1,
    +            ///  Pending bit 13
    +            PR13: u1,
    +            ///  Pending bit 14
    +            PR14: u1,
    +            ///  Pending bit 15
    +            PR15: u1,
    +            ///  Pending bit 16
    +            PR16: u1,
    +            ///  Pending bit 17
    +            PR17: u1,
    +            ///  Pending bit 18
    +            PR18: u1,
    +            ///  Pending bit 19
    +            PR19: u1,
    +            ///  Pending bit 20
    +            PR20: u1,
    +            ///  Pending bit 21
    +            PR21: u1,
    +            ///  Pending bit 22
    +            PR22: u1,
    +            padding: u9,
    +        }),
    +    };
    +
    +    ///  Universal synchronous asynchronous receiver transmitter
    +    pub const USART6 = extern struct {
    +        ///  Status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Parity error
    +            PE: u1,
    +            ///  Framing error
    +            FE: u1,
    +            ///  Noise detected flag
    +            NF: u1,
    +            ///  Overrun error
    +            ORE: u1,
    +            ///  IDLE line detected
    +            IDLE: u1,
    +            ///  Read data register not empty
    +            RXNE: u1,
    +            ///  Transmission complete
    +            TC: u1,
    +            ///  Transmit data register empty
    +            TXE: u1,
    +            ///  LIN break detection flag
    +            LBD: u1,
    +            ///  CTS flag
    +            CTS: u1,
    +            padding: u22,
    +        }),
    +        ///  Data register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  Data value
    +            DR: u9,
    +            padding: u23,
    +        }),
    +        ///  Baud rate register
    +        BRR: mmio.Mmio(packed struct(u32) {
    +            ///  fraction of USARTDIV
    +            DIV_Fraction: u4,
    +            ///  mantissa of USARTDIV
    +            DIV_Mantissa: u12,
    +            padding: u16,
    +        }),
    +        ///  Control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Send break
    +            SBK: u1,
    +            ///  Receiver wakeup
    +            RWU: u1,
    +            ///  Receiver enable
    +            RE: u1,
    +            ///  Transmitter enable
    +            TE: u1,
    +            ///  IDLE interrupt enable
    +            IDLEIE: u1,
    +            ///  RXNE interrupt enable
    +            RXNEIE: u1,
    +            ///  Transmission complete interrupt enable
    +            TCIE: u1,
    +            ///  TXE interrupt enable
    +            TXEIE: u1,
    +            ///  PE interrupt enable
    +            PEIE: u1,
    +            ///  Parity selection
    +            PS: u1,
    +            ///  Parity control enable
    +            PCE: u1,
    +            ///  Wakeup method
    +            WAKE: u1,
    +            ///  Word length
    +            M: u1,
    +            ///  USART enable
    +            UE: u1,
    +            reserved15: u1,
    +            ///  Oversampling mode
    +            OVER8: u1,
    +            padding: u16,
    +        }),
    +        ///  Control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            ///  Address of the USART node
    +            ADD: u4,
    +            reserved5: u1,
    +            ///  lin break detection length
    +            LBDL: u1,
    +            ///  LIN break detection interrupt enable
    +            LBDIE: u1,
    +            reserved8: u1,
    +            ///  Last bit clock pulse
    +            LBCL: u1,
    +            ///  Clock phase
    +            CPHA: u1,
    +            ///  Clock polarity
    +            CPOL: u1,
    +            ///  Clock enable
    +            CLKEN: u1,
    +            ///  STOP bits
    +            STOP: u2,
    +            ///  LIN mode enable
    +            LINEN: u1,
    +            padding: u17,
    +        }),
    +        ///  Control register 3
    +        CR3: mmio.Mmio(packed struct(u32) {
    +            ///  Error interrupt enable
    +            EIE: u1,
    +            ///  IrDA mode enable
    +            IREN: u1,
    +            ///  IrDA low-power
    +            IRLP: u1,
    +            ///  Half-duplex selection
    +            HDSEL: u1,
    +            ///  Smartcard NACK enable
    +            NACK: u1,
    +            ///  Smartcard mode enable
    +            SCEN: u1,
    +            ///  DMA enable receiver
    +            DMAR: u1,
    +            ///  DMA enable transmitter
    +            DMAT: u1,
    +            ///  RTS enable
    +            RTSE: u1,
    +            ///  CTS enable
    +            CTSE: u1,
    +            ///  CTS interrupt enable
    +            CTSIE: u1,
    +            ///  One sample bit method enable
    +            ONEBIT: u1,
    +            padding: u20,
    +        }),
    +        ///  Guard time and prescaler register
    +        GTPR: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u8,
    +            ///  Guard time value
    +            GT: u8,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  FLASH
    +    pub const FLASH = extern struct {
    +        ///  Flash access control register
    +        ACR: mmio.Mmio(packed struct(u32) {
    +            ///  Latency
    +            LATENCY: u3,
    +            reserved8: u5,
    +            ///  Prefetch enable
    +            PRFTEN: u1,
    +            ///  Instruction cache enable
    +            ICEN: u1,
    +            ///  Data cache enable
    +            DCEN: u1,
    +            ///  Instruction cache reset
    +            ICRST: u1,
    +            ///  Data cache reset
    +            DCRST: u1,
    +            padding: u19,
    +        }),
    +        ///  Flash key register
    +        KEYR: mmio.Mmio(packed struct(u32) {
    +            ///  FPEC key
    +            KEY: u32,
    +        }),
    +        ///  Flash option key register
    +        OPTKEYR: mmio.Mmio(packed struct(u32) {
    +            ///  Option byte key
    +            OPTKEY: u32,
    +        }),
    +        ///  Status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  End of operation
    +            EOP: u1,
    +            ///  Operation error
    +            OPERR: u1,
    +            reserved4: u2,
    +            ///  Write protection error
    +            WRPERR: u1,
    +            ///  Programming alignment error
    +            PGAERR: u1,
    +            ///  Programming parallelism error
    +            PGPERR: u1,
    +            ///  Programming sequence error
    +            PGSERR: u1,
    +            reserved16: u8,
    +            ///  Busy
    +            BSY: u1,
    +            padding: u15,
    +        }),
    +        ///  Control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  Programming
    +            PG: u1,
    +            ///  Sector Erase
    +            SER: u1,
    +            ///  Mass Erase of sectors 0 to 11
    +            MER: u1,
    +            ///  Sector number
    +            SNB: u5,
    +            ///  Program size
    +            PSIZE: u2,
    +            reserved15: u5,
    +            ///  Mass Erase of sectors 12 to 23
    +            MER1: u1,
    +            ///  Start
    +            STRT: u1,
    +            reserved24: u7,
    +            ///  End of operation interrupt enable
    +            EOPIE: u1,
    +            ///  Error interrupt enable
    +            ERRIE: u1,
    +            reserved31: u5,
    +            ///  Lock
    +            LOCK: u1,
    +        }),
    +        ///  Flash option control register
    +        OPTCR: mmio.Mmio(packed struct(u32) {
    +            ///  Option lock
    +            OPTLOCK: u1,
    +            ///  Option start
    +            OPTSTRT: u1,
    +            ///  BOR reset Level
    +            BOR_LEV: u2,
    +            reserved5: u1,
    +            ///  WDG_SW User option bytes
    +            WDG_SW: u1,
    +            ///  nRST_STOP User option bytes
    +            nRST_STOP: u1,
    +            ///  nRST_STDBY User option bytes
    +            nRST_STDBY: u1,
    +            ///  Read protect
    +            RDP: u8,
    +            ///  Not write protect
    +            nWRP: u12,
    +            padding: u4,
    +        }),
    +        ///  Flash option control register 1
    +        OPTCR1: mmio.Mmio(packed struct(u32) {
    +            reserved16: u16,
    +            ///  Not write protect
    +            nWRP: u12,
    +            padding: u4,
    +        }),
    +    };
    +
    +    ///  Nested Vectored Interrupt Controller
    +    pub const NVIC = extern struct {
    +        ///  Interrupt Set-Enable Register
    +        ISER0: mmio.Mmio(packed struct(u32) {
    +            ///  SETENA
    +            SETENA: u32,
    +        }),
    +        ///  Interrupt Set-Enable Register
    +        ISER1: mmio.Mmio(packed struct(u32) {
    +            ///  SETENA
    +            SETENA: u32,
    +        }),
    +        ///  Interrupt Set-Enable Register
    +        ISER2: mmio.Mmio(packed struct(u32) {
    +            ///  SETENA
    +            SETENA: u32,
    +        }),
    +        reserved128: [116]u8,
    +        ///  Interrupt Clear-Enable Register
    +        ICER0: mmio.Mmio(packed struct(u32) {
    +            ///  CLRENA
    +            CLRENA: u32,
    +        }),
    +        ///  Interrupt Clear-Enable Register
    +        ICER1: mmio.Mmio(packed struct(u32) {
    +            ///  CLRENA
    +            CLRENA: u32,
    +        }),
    +        ///  Interrupt Clear-Enable Register
    +        ICER2: mmio.Mmio(packed struct(u32) {
    +            ///  CLRENA
    +            CLRENA: u32,
    +        }),
    +        reserved256: [116]u8,
    +        ///  Interrupt Set-Pending Register
    +        ISPR0: mmio.Mmio(packed struct(u32) {
    +            ///  SETPEND
    +            SETPEND: u32,
    +        }),
    +        ///  Interrupt Set-Pending Register
    +        ISPR1: mmio.Mmio(packed struct(u32) {
    +            ///  SETPEND
    +            SETPEND: u32,
    +        }),
    +        ///  Interrupt Set-Pending Register
    +        ISPR2: mmio.Mmio(packed struct(u32) {
    +            ///  SETPEND
    +            SETPEND: u32,
    +        }),
    +        reserved384: [116]u8,
    +        ///  Interrupt Clear-Pending Register
    +        ICPR0: mmio.Mmio(packed struct(u32) {
    +            ///  CLRPEND
    +            CLRPEND: u32,
    +        }),
    +        ///  Interrupt Clear-Pending Register
    +        ICPR1: mmio.Mmio(packed struct(u32) {
    +            ///  CLRPEND
    +            CLRPEND: u32,
    +        }),
    +        ///  Interrupt Clear-Pending Register
    +        ICPR2: mmio.Mmio(packed struct(u32) {
    +            ///  CLRPEND
    +            CLRPEND: u32,
    +        }),
    +        reserved512: [116]u8,
    +        ///  Interrupt Active Bit Register
    +        IABR0: mmio.Mmio(packed struct(u32) {
    +            ///  ACTIVE
    +            ACTIVE: u32,
    +        }),
    +        ///  Interrupt Active Bit Register
    +        IABR1: mmio.Mmio(packed struct(u32) {
    +            ///  ACTIVE
    +            ACTIVE: u32,
    +        }),
    +        ///  Interrupt Active Bit Register
    +        IABR2: mmio.Mmio(packed struct(u32) {
    +            ///  ACTIVE
    +            ACTIVE: u32,
    +        }),
    +        reserved768: [244]u8,
    +        ///  Interrupt Priority Register
    +        IPR0: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR1: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR2: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR3: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR4: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR5: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR6: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR7: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR8: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR9: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR10: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR11: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR12: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR13: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR14: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR15: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR16: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR17: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR18: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR19: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +        ///  Interrupt Priority Register
    +        IPR20: mmio.Mmio(packed struct(u32) {
    +            ///  IPR_N0
    +            IPR_N0: u8,
    +            ///  IPR_N1
    +            IPR_N1: u8,
    +            ///  IPR_N2
    +            IPR_N2: u8,
    +            ///  IPR_N3
    +            IPR_N3: u8,
    +        }),
    +    };
    +
    +    ///  Ethernet: media access control (MAC)
    +    pub const Ethernet_MAC = extern struct {
    +        ///  Ethernet MAC configuration register
    +        MACCR: mmio.Mmio(packed struct(u32) {
    +            reserved2: u2,
    +            ///  RE
    +            RE: u1,
    +            ///  TE
    +            TE: u1,
    +            ///  DC
    +            DC: u1,
    +            ///  BL
    +            BL: u2,
    +            ///  APCS
    +            APCS: u1,
    +            reserved9: u1,
    +            ///  RD
    +            RD: u1,
    +            ///  IPCO
    +            IPCO: u1,
    +            ///  DM
    +            DM: u1,
    +            ///  LM
    +            LM: u1,
    +            ///  ROD
    +            ROD: u1,
    +            ///  FES
    +            FES: u1,
    +            reserved16: u1,
    +            ///  CSD
    +            CSD: u1,
    +            ///  IFG
    +            IFG: u3,
    +            reserved22: u2,
    +            ///  JD
    +            JD: u1,
    +            ///  WD
    +            WD: u1,
    +            reserved25: u1,
    +            ///  CSTF
    +            CSTF: u1,
    +            padding: u6,
    +        }),
    +        ///  Ethernet MAC frame filter register
    +        MACFFR: mmio.Mmio(packed struct(u32) {
    +            ///  PM
    +            PM: u1,
    +            ///  HU
    +            HU: u1,
    +            ///  HM
    +            HM: u1,
    +            ///  DAIF
    +            DAIF: u1,
    +            ///  RAM
    +            RAM: u1,
    +            ///  BFD
    +            BFD: u1,
    +            ///  PCF
    +            PCF: u1,
    +            ///  SAIF
    +            SAIF: u1,
    +            ///  SAF
    +            SAF: u1,
    +            ///  HPF
    +            HPF: u1,
    +            reserved31: u21,
    +            ///  RA
    +            RA: u1,
    +        }),
    +        ///  Ethernet MAC hash table high register
    +        MACHTHR: mmio.Mmio(packed struct(u32) {
    +            ///  HTH
    +            HTH: u32,
    +        }),
    +        ///  Ethernet MAC hash table low register
    +        MACHTLR: mmio.Mmio(packed struct(u32) {
    +            ///  HTL
    +            HTL: u32,
    +        }),
    +        ///  Ethernet MAC MII address register
    +        MACMIIAR: mmio.Mmio(packed struct(u32) {
    +            ///  MB
    +            MB: u1,
    +            ///  MW
    +            MW: u1,
    +            ///  CR
    +            CR: u3,
    +            reserved6: u1,
    +            ///  MR
    +            MR: u5,
    +            ///  PA
    +            PA: u5,
    +            padding: u16,
    +        }),
    +        ///  Ethernet MAC MII data register
    +        MACMIIDR: mmio.Mmio(packed struct(u32) {
    +            ///  TD
    +            TD: u16,
    +            padding: u16,
    +        }),
    +        ///  Ethernet MAC flow control register
    +        MACFCR: mmio.Mmio(packed struct(u32) {
    +            ///  FCB
    +            FCB: u1,
    +            ///  TFCE
    +            TFCE: u1,
    +            ///  RFCE
    +            RFCE: u1,
    +            ///  UPFD
    +            UPFD: u1,
    +            ///  PLT
    +            PLT: u2,
    +            reserved7: u1,
    +            ///  ZQPD
    +            ZQPD: u1,
    +            reserved16: u8,
    +            ///  PT
    +            PT: u16,
    +        }),
    +        ///  Ethernet MAC VLAN tag register
    +        MACVLANTR: mmio.Mmio(packed struct(u32) {
    +            ///  VLANTI
    +            VLANTI: u16,
    +            ///  VLANTC
    +            VLANTC: u1,
    +            padding: u15,
    +        }),
    +        reserved44: [12]u8,
    +        ///  Ethernet MAC PMT control and status register
    +        MACPMTCSR: mmio.Mmio(packed struct(u32) {
    +            ///  PD
    +            PD: u1,
    +            ///  MPE
    +            MPE: u1,
    +            ///  WFE
    +            WFE: u1,
    +            reserved5: u2,
    +            ///  MPR
    +            MPR: u1,
    +            ///  WFR
    +            WFR: u1,
    +            reserved9: u2,
    +            ///  GU
    +            GU: u1,
    +            reserved31: u21,
    +            ///  WFFRPR
    +            WFFRPR: u1,
    +        }),
    +        reserved52: [4]u8,
    +        ///  Ethernet MAC debug register
    +        MACDBGR: mmio.Mmio(packed struct(u32) {
    +            ///  CR
    +            CR: u1,
    +            ///  CSR
    +            CSR: u1,
    +            ///  ROR
    +            ROR: u1,
    +            ///  MCF
    +            MCF: u1,
    +            ///  MCP
    +            MCP: u1,
    +            ///  MCFHP
    +            MCFHP: u1,
    +            padding: u26,
    +        }),
    +        ///  Ethernet MAC interrupt status register
    +        MACSR: mmio.Mmio(packed struct(u32) {
    +            reserved3: u3,
    +            ///  PMTS
    +            PMTS: u1,
    +            ///  MMCS
    +            MMCS: u1,
    +            ///  MMCRS
    +            MMCRS: u1,
    +            ///  MMCTS
    +            MMCTS: u1,
    +            reserved9: u2,
    +            ///  TSTS
    +            TSTS: u1,
    +            padding: u22,
    +        }),
    +        ///  Ethernet MAC interrupt mask register
    +        MACIMR: mmio.Mmio(packed struct(u32) {
    +            reserved3: u3,
    +            ///  PMTIM
    +            PMTIM: u1,
    +            reserved9: u5,
    +            ///  TSTIM
    +            TSTIM: u1,
    +            padding: u22,
    +        }),
    +        ///  Ethernet MAC address 0 high register
    +        MACA0HR: mmio.Mmio(packed struct(u32) {
    +            ///  MAC address0 high
    +            MACA0H: u16,
    +            reserved31: u15,
    +            ///  Always 1
    +            MO: u1,
    +        }),
    +        ///  Ethernet MAC address 0 low register
    +        MACA0LR: mmio.Mmio(packed struct(u32) {
    +            ///  0
    +            MACA0L: u32,
    +        }),
    +        ///  Ethernet MAC address 1 high register
    +        MACA1HR: mmio.Mmio(packed struct(u32) {
    +            ///  MACA1H
    +            MACA1H: u16,
    +            reserved24: u8,
    +            ///  MBC
    +            MBC: u6,
    +            ///  SA
    +            SA: u1,
    +            ///  AE
    +            AE: u1,
    +        }),
    +        ///  Ethernet MAC address1 low register
    +        MACA1LR: mmio.Mmio(packed struct(u32) {
    +            ///  MACA1LR
    +            MACA1LR: u32,
    +        }),
    +        ///  Ethernet MAC address 2 high register
    +        MACA2HR: mmio.Mmio(packed struct(u32) {
    +            ///  MAC2AH
    +            MAC2AH: u16,
    +            reserved24: u8,
    +            ///  MBC
    +            MBC: u6,
    +            ///  SA
    +            SA: u1,
    +            ///  AE
    +            AE: u1,
    +        }),
    +        ///  Ethernet MAC address 2 low register
    +        MACA2LR: mmio.Mmio(packed struct(u32) {
    +            ///  MACA2L
    +            MACA2L: u31,
    +            padding: u1,
    +        }),
    +        ///  Ethernet MAC address 3 high register
    +        MACA3HR: mmio.Mmio(packed struct(u32) {
    +            ///  MACA3H
    +            MACA3H: u16,
    +            reserved24: u8,
    +            ///  MBC
    +            MBC: u6,
    +            ///  SA
    +            SA: u1,
    +            ///  AE
    +            AE: u1,
    +        }),
    +        ///  Ethernet MAC address 3 low register
    +        MACA3LR: mmio.Mmio(packed struct(u32) {
    +            ///  MBCA3L
    +            MBCA3L: u32,
    +        }),
    +    };
    +
    +    ///  Controller area network
    +    pub const CAN1 = extern struct {
    +        ///  master control register
    +        MCR: mmio.Mmio(packed struct(u32) {
    +            ///  INRQ
    +            INRQ: u1,
    +            ///  SLEEP
    +            SLEEP: u1,
    +            ///  TXFP
    +            TXFP: u1,
    +            ///  RFLM
    +            RFLM: u1,
    +            ///  NART
    +            NART: u1,
    +            ///  AWUM
    +            AWUM: u1,
    +            ///  ABOM
    +            ABOM: u1,
    +            ///  TTCM
    +            TTCM: u1,
    +            reserved15: u7,
    +            ///  RESET
    +            RESET: u1,
    +            ///  DBF
    +            DBF: u1,
    +            padding: u15,
    +        }),
    +        ///  master status register
    +        MSR: mmio.Mmio(packed struct(u32) {
    +            ///  INAK
    +            INAK: u1,
    +            ///  SLAK
    +            SLAK: u1,
    +            ///  ERRI
    +            ERRI: u1,
    +            ///  WKUI
    +            WKUI: u1,
    +            ///  SLAKI
    +            SLAKI: u1,
    +            reserved8: u3,
    +            ///  TXM
    +            TXM: u1,
    +            ///  RXM
    +            RXM: u1,
    +            ///  SAMP
    +            SAMP: u1,
    +            ///  RX
    +            RX: u1,
    +            padding: u20,
    +        }),
    +        ///  transmit status register
    +        TSR: mmio.Mmio(packed struct(u32) {
    +            ///  RQCP0
    +            RQCP0: u1,
    +            ///  TXOK0
    +            TXOK0: u1,
    +            ///  ALST0
    +            ALST0: u1,
    +            ///  TERR0
    +            TERR0: u1,
    +            reserved7: u3,
    +            ///  ABRQ0
    +            ABRQ0: u1,
    +            ///  RQCP1
    +            RQCP1: u1,
    +            ///  TXOK1
    +            TXOK1: u1,
    +            ///  ALST1
    +            ALST1: u1,
    +            ///  TERR1
    +            TERR1: u1,
    +            reserved15: u3,
    +            ///  ABRQ1
    +            ABRQ1: u1,
    +            ///  RQCP2
    +            RQCP2: u1,
    +            ///  TXOK2
    +            TXOK2: u1,
    +            ///  ALST2
    +            ALST2: u1,
    +            ///  TERR2
    +            TERR2: u1,
    +            reserved23: u3,
    +            ///  ABRQ2
    +            ABRQ2: u1,
    +            ///  CODE
    +            CODE: u2,
    +            ///  Lowest priority flag for mailbox 0
    +            TME0: u1,
    +            ///  Lowest priority flag for mailbox 1
    +            TME1: u1,
    +            ///  Lowest priority flag for mailbox 2
    +            TME2: u1,
    +            ///  Lowest priority flag for mailbox 0
    +            LOW0: u1,
    +            ///  Lowest priority flag for mailbox 1
    +            LOW1: u1,
    +            ///  Lowest priority flag for mailbox 2
    +            LOW2: u1,
    +        }),
    +        ///  receive FIFO 0 register
    +        RF0R: mmio.Mmio(packed struct(u32) {
    +            ///  FMP0
    +            FMP0: u2,
    +            reserved3: u1,
    +            ///  FULL0
    +            FULL0: u1,
    +            ///  FOVR0
    +            FOVR0: u1,
    +            ///  RFOM0
    +            RFOM0: u1,
    +            padding: u26,
    +        }),
    +        ///  receive FIFO 1 register
    +        RF1R: mmio.Mmio(packed struct(u32) {
    +            ///  FMP1
    +            FMP1: u2,
    +            reserved3: u1,
    +            ///  FULL1
    +            FULL1: u1,
    +            ///  FOVR1
    +            FOVR1: u1,
    +            ///  RFOM1
    +            RFOM1: u1,
    +            padding: u26,
    +        }),
    +        ///  interrupt enable register
    +        IER: mmio.Mmio(packed struct(u32) {
    +            ///  TMEIE
    +            TMEIE: u1,
    +            ///  FMPIE0
    +            FMPIE0: u1,
    +            ///  FFIE0
    +            FFIE0: u1,
    +            ///  FOVIE0
    +            FOVIE0: u1,
    +            ///  FMPIE1
    +            FMPIE1: u1,
    +            ///  FFIE1
    +            FFIE1: u1,
    +            ///  FOVIE1
    +            FOVIE1: u1,
    +            reserved8: u1,
    +            ///  EWGIE
    +            EWGIE: u1,
    +            ///  EPVIE
    +            EPVIE: u1,
    +            ///  BOFIE
    +            BOFIE: u1,
    +            ///  LECIE
    +            LECIE: u1,
    +            reserved15: u3,
    +            ///  ERRIE
    +            ERRIE: u1,
    +            ///  WKUIE
    +            WKUIE: u1,
    +            ///  SLKIE
    +            SLKIE: u1,
    +            padding: u14,
    +        }),
    +        ///  interrupt enable register
    +        ESR: mmio.Mmio(packed struct(u32) {
    +            ///  EWGF
    +            EWGF: u1,
    +            ///  EPVF
    +            EPVF: u1,
    +            ///  BOFF
    +            BOFF: u1,
    +            reserved4: u1,
    +            ///  LEC
    +            LEC: u3,
    +            reserved16: u9,
    +            ///  TEC
    +            TEC: u8,
    +            ///  REC
    +            REC: u8,
    +        }),
    +        ///  bit timing register
    +        BTR: mmio.Mmio(packed struct(u32) {
    +            ///  BRP
    +            BRP: u10,
    +            reserved16: u6,
    +            ///  TS1
    +            TS1: u4,
    +            ///  TS2
    +            TS2: u3,
    +            reserved24: u1,
    +            ///  SJW
    +            SJW: u2,
    +            reserved30: u4,
    +            ///  LBKM
    +            LBKM: u1,
    +            ///  SILM
    +            SILM: u1,
    +        }),
    +        reserved384: [352]u8,
    +        ///  TX mailbox identifier register
    +        TI0R: mmio.Mmio(packed struct(u32) {
    +            ///  TXRQ
    +            TXRQ: u1,
    +            ///  RTR
    +            RTR: u1,
    +            ///  IDE
    +            IDE: u1,
    +            ///  EXID
    +            EXID: u18,
    +            ///  STID
    +            STID: u11,
    +        }),
    +        ///  mailbox data length control and time stamp register
    +        TDT0R: mmio.Mmio(packed struct(u32) {
    +            ///  DLC
    +            DLC: u4,
    +            reserved8: u4,
    +            ///  TGT
    +            TGT: u1,
    +            reserved16: u7,
    +            ///  TIME
    +            TIME: u16,
    +        }),
    +        ///  mailbox data low register
    +        TDL0R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA0
    +            DATA0: u8,
    +            ///  DATA1
    +            DATA1: u8,
    +            ///  DATA2
    +            DATA2: u8,
    +            ///  DATA3
    +            DATA3: u8,
    +        }),
    +        ///  mailbox data high register
    +        TDH0R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA4
    +            DATA4: u8,
    +            ///  DATA5
    +            DATA5: u8,
    +            ///  DATA6
    +            DATA6: u8,
    +            ///  DATA7
    +            DATA7: u8,
    +        }),
    +        ///  mailbox identifier register
    +        TI1R: mmio.Mmio(packed struct(u32) {
    +            ///  TXRQ
    +            TXRQ: u1,
    +            ///  RTR
    +            RTR: u1,
    +            ///  IDE
    +            IDE: u1,
    +            ///  EXID
    +            EXID: u18,
    +            ///  STID
    +            STID: u11,
    +        }),
    +        ///  mailbox data length control and time stamp register
    +        TDT1R: mmio.Mmio(packed struct(u32) {
    +            ///  DLC
    +            DLC: u4,
    +            reserved8: u4,
    +            ///  TGT
    +            TGT: u1,
    +            reserved16: u7,
    +            ///  TIME
    +            TIME: u16,
    +        }),
    +        ///  mailbox data low register
    +        TDL1R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA0
    +            DATA0: u8,
    +            ///  DATA1
    +            DATA1: u8,
    +            ///  DATA2
    +            DATA2: u8,
    +            ///  DATA3
    +            DATA3: u8,
    +        }),
    +        ///  mailbox data high register
    +        TDH1R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA4
    +            DATA4: u8,
    +            ///  DATA5
    +            DATA5: u8,
    +            ///  DATA6
    +            DATA6: u8,
    +            ///  DATA7
    +            DATA7: u8,
    +        }),
    +        ///  mailbox identifier register
    +        TI2R: mmio.Mmio(packed struct(u32) {
    +            ///  TXRQ
    +            TXRQ: u1,
    +            ///  RTR
    +            RTR: u1,
    +            ///  IDE
    +            IDE: u1,
    +            ///  EXID
    +            EXID: u18,
    +            ///  STID
    +            STID: u11,
    +        }),
    +        ///  mailbox data length control and time stamp register
    +        TDT2R: mmio.Mmio(packed struct(u32) {
    +            ///  DLC
    +            DLC: u4,
    +            reserved8: u4,
    +            ///  TGT
    +            TGT: u1,
    +            reserved16: u7,
    +            ///  TIME
    +            TIME: u16,
    +        }),
    +        ///  mailbox data low register
    +        TDL2R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA0
    +            DATA0: u8,
    +            ///  DATA1
    +            DATA1: u8,
    +            ///  DATA2
    +            DATA2: u8,
    +            ///  DATA3
    +            DATA3: u8,
    +        }),
    +        ///  mailbox data high register
    +        TDH2R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA4
    +            DATA4: u8,
    +            ///  DATA5
    +            DATA5: u8,
    +            ///  DATA6
    +            DATA6: u8,
    +            ///  DATA7
    +            DATA7: u8,
    +        }),
    +        ///  receive FIFO mailbox identifier register
    +        RI0R: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  RTR
    +            RTR: u1,
    +            ///  IDE
    +            IDE: u1,
    +            ///  EXID
    +            EXID: u18,
    +            ///  STID
    +            STID: u11,
    +        }),
    +        ///  mailbox data high register
    +        RDT0R: mmio.Mmio(packed struct(u32) {
    +            ///  DLC
    +            DLC: u4,
    +            reserved8: u4,
    +            ///  FMI
    +            FMI: u8,
    +            ///  TIME
    +            TIME: u16,
    +        }),
    +        ///  mailbox data high register
    +        RDL0R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA0
    +            DATA0: u8,
    +            ///  DATA1
    +            DATA1: u8,
    +            ///  DATA2
    +            DATA2: u8,
    +            ///  DATA3
    +            DATA3: u8,
    +        }),
    +        ///  receive FIFO mailbox data high register
    +        RDH0R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA4
    +            DATA4: u8,
    +            ///  DATA5
    +            DATA5: u8,
    +            ///  DATA6
    +            DATA6: u8,
    +            ///  DATA7
    +            DATA7: u8,
    +        }),
    +        ///  mailbox data high register
    +        RI1R: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  RTR
    +            RTR: u1,
    +            ///  IDE
    +            IDE: u1,
    +            ///  EXID
    +            EXID: u18,
    +            ///  STID
    +            STID: u11,
    +        }),
    +        ///  mailbox data high register
    +        RDT1R: mmio.Mmio(packed struct(u32) {
    +            ///  DLC
    +            DLC: u4,
    +            reserved8: u4,
    +            ///  FMI
    +            FMI: u8,
    +            ///  TIME
    +            TIME: u16,
    +        }),
    +        ///  mailbox data high register
    +        RDL1R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA0
    +            DATA0: u8,
    +            ///  DATA1
    +            DATA1: u8,
    +            ///  DATA2
    +            DATA2: u8,
    +            ///  DATA3
    +            DATA3: u8,
    +        }),
    +        ///  mailbox data high register
    +        RDH1R: mmio.Mmio(packed struct(u32) {
    +            ///  DATA4
    +            DATA4: u8,
    +            ///  DATA5
    +            DATA5: u8,
    +            ///  DATA6
    +            DATA6: u8,
    +            ///  DATA7
    +            DATA7: u8,
    +        }),
    +        reserved512: [48]u8,
    +        ///  filter master register
    +        FMR: mmio.Mmio(packed struct(u32) {
    +            ///  FINIT
    +            FINIT: u1,
    +            reserved8: u7,
    +            ///  CAN2SB
    +            CAN2SB: u6,
    +            padding: u18,
    +        }),
    +        ///  filter mode register
    +        FM1R: mmio.Mmio(packed struct(u32) {
    +            ///  Filter mode
    +            FBM0: u1,
    +            ///  Filter mode
    +            FBM1: u1,
    +            ///  Filter mode
    +            FBM2: u1,
    +            ///  Filter mode
    +            FBM3: u1,
    +            ///  Filter mode
    +            FBM4: u1,
    +            ///  Filter mode
    +            FBM5: u1,
    +            ///  Filter mode
    +            FBM6: u1,
    +            ///  Filter mode
    +            FBM7: u1,
    +            ///  Filter mode
    +            FBM8: u1,
    +            ///  Filter mode
    +            FBM9: u1,
    +            ///  Filter mode
    +            FBM10: u1,
    +            ///  Filter mode
    +            FBM11: u1,
    +            ///  Filter mode
    +            FBM12: u1,
    +            ///  Filter mode
    +            FBM13: u1,
    +            ///  Filter mode
    +            FBM14: u1,
    +            ///  Filter mode
    +            FBM15: u1,
    +            ///  Filter mode
    +            FBM16: u1,
    +            ///  Filter mode
    +            FBM17: u1,
    +            ///  Filter mode
    +            FBM18: u1,
    +            ///  Filter mode
    +            FBM19: u1,
    +            ///  Filter mode
    +            FBM20: u1,
    +            ///  Filter mode
    +            FBM21: u1,
    +            ///  Filter mode
    +            FBM22: u1,
    +            ///  Filter mode
    +            FBM23: u1,
    +            ///  Filter mode
    +            FBM24: u1,
    +            ///  Filter mode
    +            FBM25: u1,
    +            ///  Filter mode
    +            FBM26: u1,
    +            ///  Filter mode
    +            FBM27: u1,
    +            padding: u4,
    +        }),
    +        reserved524: [4]u8,
    +        ///  filter scale register
    +        FS1R: mmio.Mmio(packed struct(u32) {
    +            ///  Filter scale configuration
    +            FSC0: u1,
    +            ///  Filter scale configuration
    +            FSC1: u1,
    +            ///  Filter scale configuration
    +            FSC2: u1,
    +            ///  Filter scale configuration
    +            FSC3: u1,
    +            ///  Filter scale configuration
    +            FSC4: u1,
    +            ///  Filter scale configuration
    +            FSC5: u1,
    +            ///  Filter scale configuration
    +            FSC6: u1,
    +            ///  Filter scale configuration
    +            FSC7: u1,
    +            ///  Filter scale configuration
    +            FSC8: u1,
    +            ///  Filter scale configuration
    +            FSC9: u1,
    +            ///  Filter scale configuration
    +            FSC10: u1,
    +            ///  Filter scale configuration
    +            FSC11: u1,
    +            ///  Filter scale configuration
    +            FSC12: u1,
    +            ///  Filter scale configuration
    +            FSC13: u1,
    +            ///  Filter scale configuration
    +            FSC14: u1,
    +            ///  Filter scale configuration
    +            FSC15: u1,
    +            ///  Filter scale configuration
    +            FSC16: u1,
    +            ///  Filter scale configuration
    +            FSC17: u1,
    +            ///  Filter scale configuration
    +            FSC18: u1,
    +            ///  Filter scale configuration
    +            FSC19: u1,
    +            ///  Filter scale configuration
    +            FSC20: u1,
    +            ///  Filter scale configuration
    +            FSC21: u1,
    +            ///  Filter scale configuration
    +            FSC22: u1,
    +            ///  Filter scale configuration
    +            FSC23: u1,
    +            ///  Filter scale configuration
    +            FSC24: u1,
    +            ///  Filter scale configuration
    +            FSC25: u1,
    +            ///  Filter scale configuration
    +            FSC26: u1,
    +            ///  Filter scale configuration
    +            FSC27: u1,
    +            padding: u4,
    +        }),
    +        reserved532: [4]u8,
    +        ///  filter FIFO assignment register
    +        FFA1R: mmio.Mmio(packed struct(u32) {
    +            ///  Filter FIFO assignment for filter 0
    +            FFA0: u1,
    +            ///  Filter FIFO assignment for filter 1
    +            FFA1: u1,
    +            ///  Filter FIFO assignment for filter 2
    +            FFA2: u1,
    +            ///  Filter FIFO assignment for filter 3
    +            FFA3: u1,
    +            ///  Filter FIFO assignment for filter 4
    +            FFA4: u1,
    +            ///  Filter FIFO assignment for filter 5
    +            FFA5: u1,
    +            ///  Filter FIFO assignment for filter 6
    +            FFA6: u1,
    +            ///  Filter FIFO assignment for filter 7
    +            FFA7: u1,
    +            ///  Filter FIFO assignment for filter 8
    +            FFA8: u1,
    +            ///  Filter FIFO assignment for filter 9
    +            FFA9: u1,
    +            ///  Filter FIFO assignment for filter 10
    +            FFA10: u1,
    +            ///  Filter FIFO assignment for filter 11
    +            FFA11: u1,
    +            ///  Filter FIFO assignment for filter 12
    +            FFA12: u1,
    +            ///  Filter FIFO assignment for filter 13
    +            FFA13: u1,
    +            ///  Filter FIFO assignment for filter 14
    +            FFA14: u1,
    +            ///  Filter FIFO assignment for filter 15
    +            FFA15: u1,
    +            ///  Filter FIFO assignment for filter 16
    +            FFA16: u1,
    +            ///  Filter FIFO assignment for filter 17
    +            FFA17: u1,
    +            ///  Filter FIFO assignment for filter 18
    +            FFA18: u1,
    +            ///  Filter FIFO assignment for filter 19
    +            FFA19: u1,
    +            ///  Filter FIFO assignment for filter 20
    +            FFA20: u1,
    +            ///  Filter FIFO assignment for filter 21
    +            FFA21: u1,
    +            ///  Filter FIFO assignment for filter 22
    +            FFA22: u1,
    +            ///  Filter FIFO assignment for filter 23
    +            FFA23: u1,
    +            ///  Filter FIFO assignment for filter 24
    +            FFA24: u1,
    +            ///  Filter FIFO assignment for filter 25
    +            FFA25: u1,
    +            ///  Filter FIFO assignment for filter 26
    +            FFA26: u1,
    +            ///  Filter FIFO assignment for filter 27
    +            FFA27: u1,
    +            padding: u4,
    +        }),
    +        reserved540: [4]u8,
    +        ///  filter activation register
    +        FA1R: mmio.Mmio(packed struct(u32) {
    +            ///  Filter active
    +            FACT0: u1,
    +            ///  Filter active
    +            FACT1: u1,
    +            ///  Filter active
    +            FACT2: u1,
    +            ///  Filter active
    +            FACT3: u1,
    +            ///  Filter active
    +            FACT4: u1,
    +            ///  Filter active
    +            FACT5: u1,
    +            ///  Filter active
    +            FACT6: u1,
    +            ///  Filter active
    +            FACT7: u1,
    +            ///  Filter active
    +            FACT8: u1,
    +            ///  Filter active
    +            FACT9: u1,
    +            ///  Filter active
    +            FACT10: u1,
    +            ///  Filter active
    +            FACT11: u1,
    +            ///  Filter active
    +            FACT12: u1,
    +            ///  Filter active
    +            FACT13: u1,
    +            ///  Filter active
    +            FACT14: u1,
    +            ///  Filter active
    +            FACT15: u1,
    +            ///  Filter active
    +            FACT16: u1,
    +            ///  Filter active
    +            FACT17: u1,
    +            ///  Filter active
    +            FACT18: u1,
    +            ///  Filter active
    +            FACT19: u1,
    +            ///  Filter active
    +            FACT20: u1,
    +            ///  Filter active
    +            FACT21: u1,
    +            ///  Filter active
    +            FACT22: u1,
    +            ///  Filter active
    +            FACT23: u1,
    +            ///  Filter active
    +            FACT24: u1,
    +            ///  Filter active
    +            FACT25: u1,
    +            ///  Filter active
    +            FACT26: u1,
    +            ///  Filter active
    +            FACT27: u1,
    +            padding: u4,
    +        }),
    +        reserved576: [32]u8,
    +        ///  Filter bank 0 register 1
    +        F0R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 0 register 2
    +        F0R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 1 register 1
    +        F1R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 1 register 2
    +        F1R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 2 register 1
    +        F2R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 2 register 2
    +        F2R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 3 register 1
    +        F3R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 3 register 2
    +        F3R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 4 register 1
    +        F4R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 4 register 2
    +        F4R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 5 register 1
    +        F5R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 5 register 2
    +        F5R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 6 register 1
    +        F6R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 6 register 2
    +        F6R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 7 register 1
    +        F7R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 7 register 2
    +        F7R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 8 register 1
    +        F8R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 8 register 2
    +        F8R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 9 register 1
    +        F9R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 9 register 2
    +        F9R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 10 register 1
    +        F10R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 10 register 2
    +        F10R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 11 register 1
    +        F11R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 11 register 2
    +        F11R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 4 register 1
    +        F12R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 12 register 2
    +        F12R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 13 register 1
    +        F13R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 13 register 2
    +        F13R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 14 register 1
    +        F14R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 14 register 2
    +        F14R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 15 register 1
    +        F15R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 15 register 2
    +        F15R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 16 register 1
    +        F16R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 16 register 2
    +        F16R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 17 register 1
    +        F17R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 17 register 2
    +        F17R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 18 register 1
    +        F18R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 18 register 2
    +        F18R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 19 register 1
    +        F19R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 19 register 2
    +        F19R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 20 register 1
    +        F20R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 20 register 2
    +        F20R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 21 register 1
    +        F21R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 21 register 2
    +        F21R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 22 register 1
    +        F22R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 22 register 2
    +        F22R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 23 register 1
    +        F23R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 23 register 2
    +        F23R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 24 register 1
    +        F24R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 24 register 2
    +        F24R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 25 register 1
    +        F25R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 25 register 2
    +        F25R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 26 register 1
    +        F26R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 26 register 2
    +        F26R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 27 register 1
    +        F27R1: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +        ///  Filter bank 27 register 2
    +        F27R2: mmio.Mmio(packed struct(u32) {
    +            ///  Filter bits
    +            FB0: u1,
    +            ///  Filter bits
    +            FB1: u1,
    +            ///  Filter bits
    +            FB2: u1,
    +            ///  Filter bits
    +            FB3: u1,
    +            ///  Filter bits
    +            FB4: u1,
    +            ///  Filter bits
    +            FB5: u1,
    +            ///  Filter bits
    +            FB6: u1,
    +            ///  Filter bits
    +            FB7: u1,
    +            ///  Filter bits
    +            FB8: u1,
    +            ///  Filter bits
    +            FB9: u1,
    +            ///  Filter bits
    +            FB10: u1,
    +            ///  Filter bits
    +            FB11: u1,
    +            ///  Filter bits
    +            FB12: u1,
    +            ///  Filter bits
    +            FB13: u1,
    +            ///  Filter bits
    +            FB14: u1,
    +            ///  Filter bits
    +            FB15: u1,
    +            ///  Filter bits
    +            FB16: u1,
    +            ///  Filter bits
    +            FB17: u1,
    +            ///  Filter bits
    +            FB18: u1,
    +            ///  Filter bits
    +            FB19: u1,
    +            ///  Filter bits
    +            FB20: u1,
    +            ///  Filter bits
    +            FB21: u1,
    +            ///  Filter bits
    +            FB22: u1,
    +            ///  Filter bits
    +            FB23: u1,
    +            ///  Filter bits
    +            FB24: u1,
    +            ///  Filter bits
    +            FB25: u1,
    +            ///  Filter bits
    +            FB26: u1,
    +            ///  Filter bits
    +            FB27: u1,
    +            ///  Filter bits
    +            FB28: u1,
    +            ///  Filter bits
    +            FB29: u1,
    +            ///  Filter bits
    +            FB30: u1,
    +            ///  Filter bits
    +            FB31: u1,
    +        }),
    +    };
    +
    +    ///  USB on the go full speed
    +    pub const OTG_FS_PWRCLK = extern struct {
    +        ///  OTG_FS power and clock gating control register (OTG_FS_PCGCCTL)
    +        FS_PCGCCTL: mmio.Mmio(packed struct(u32) {
    +            ///  Stop PHY clock
    +            STPPCLK: u1,
    +            ///  Gate HCLK
    +            GATEHCLK: u1,
    +            reserved4: u2,
    +            ///  PHY Suspended
    +            PHYSUSP: u1,
    +            padding: u27,
    +        }),
    +    };
    +
    +    ///  Digital-to-analog converter
    +    pub const DAC = extern struct {
    +        ///  control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 enable
    +            EN1: u1,
    +            ///  DAC channel1 output buffer disable
    +            BOFF1: u1,
    +            ///  DAC channel1 trigger enable
    +            TEN1: u1,
    +            ///  DAC channel1 trigger selection
    +            TSEL1: u3,
    +            ///  DAC channel1 noise/triangle wave generation enable
    +            WAVE1: u2,
    +            ///  DAC channel1 mask/amplitude selector
    +            MAMP1: u4,
    +            ///  DAC channel1 DMA enable
    +            DMAEN1: u1,
    +            ///  DAC channel1 DMA Underrun Interrupt enable
    +            DMAUDRIE1: u1,
    +            reserved16: u2,
    +            ///  DAC channel2 enable
    +            EN2: u1,
    +            ///  DAC channel2 output buffer disable
    +            BOFF2: u1,
    +            ///  DAC channel2 trigger enable
    +            TEN2: u1,
    +            ///  DAC channel2 trigger selection
    +            TSEL2: u3,
    +            ///  DAC channel2 noise/triangle wave generation enable
    +            WAVE2: u2,
    +            ///  DAC channel2 mask/amplitude selector
    +            MAMP2: u4,
    +            ///  DAC channel2 DMA enable
    +            DMAEN2: u1,
    +            ///  DAC channel2 DMA underrun interrupt enable
    +            DMAUDRIE2: u1,
    +            padding: u2,
    +        }),
    +        ///  software trigger register
    +        SWTRIGR: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 software trigger
    +            SWTRIG1: u1,
    +            ///  DAC channel2 software trigger
    +            SWTRIG2: u1,
    +            padding: u30,
    +        }),
    +        ///  channel1 12-bit right-aligned data holding register
    +        DHR12R1: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 12-bit right-aligned data
    +            DACC1DHR: u12,
    +            padding: u20,
    +        }),
    +        ///  channel1 12-bit left aligned data holding register
    +        DHR12L1: mmio.Mmio(packed struct(u32) {
    +            reserved4: u4,
    +            ///  DAC channel1 12-bit left-aligned data
    +            DACC1DHR: u12,
    +            padding: u16,
    +        }),
    +        ///  channel1 8-bit right aligned data holding register
    +        DHR8R1: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 8-bit right-aligned data
    +            DACC1DHR: u8,
    +            padding: u24,
    +        }),
    +        ///  channel2 12-bit right aligned data holding register
    +        DHR12R2: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel2 12-bit right-aligned data
    +            DACC2DHR: u12,
    +            padding: u20,
    +        }),
    +        ///  channel2 12-bit left aligned data holding register
    +        DHR12L2: mmio.Mmio(packed struct(u32) {
    +            reserved4: u4,
    +            ///  DAC channel2 12-bit left-aligned data
    +            DACC2DHR: u12,
    +            padding: u16,
    +        }),
    +        ///  channel2 8-bit right-aligned data holding register
    +        DHR8R2: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel2 8-bit right-aligned data
    +            DACC2DHR: u8,
    +            padding: u24,
    +        }),
    +        ///  Dual DAC 12-bit right-aligned data holding register
    +        DHR12RD: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 12-bit right-aligned data
    +            DACC1DHR: u12,
    +            reserved16: u4,
    +            ///  DAC channel2 12-bit right-aligned data
    +            DACC2DHR: u12,
    +            padding: u4,
    +        }),
    +        ///  DUAL DAC 12-bit left aligned data holding register
    +        DHR12LD: mmio.Mmio(packed struct(u32) {
    +            reserved4: u4,
    +            ///  DAC channel1 12-bit left-aligned data
    +            DACC1DHR: u12,
    +            reserved20: u4,
    +            ///  DAC channel2 12-bit left-aligned data
    +            DACC2DHR: u12,
    +        }),
    +        ///  DUAL DAC 8-bit right aligned data holding register
    +        DHR8RD: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 8-bit right-aligned data
    +            DACC1DHR: u8,
    +            ///  DAC channel2 8-bit right-aligned data
    +            DACC2DHR: u8,
    +            padding: u16,
    +        }),
    +        ///  channel1 data output register
    +        DOR1: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel1 data output
    +            DACC1DOR: u12,
    +            padding: u20,
    +        }),
    +        ///  channel2 data output register
    +        DOR2: mmio.Mmio(packed struct(u32) {
    +            ///  DAC channel2 data output
    +            DACC2DOR: u12,
    +            padding: u20,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            reserved13: u13,
    +            ///  DAC channel1 DMA underrun flag
    +            DMAUDR1: u1,
    +            reserved29: u15,
    +            ///  DAC channel2 DMA underrun flag
    +            DMAUDR2: u1,
    +            padding: u2,
    +        }),
    +    };
    +
    +    ///  Power control
    +    pub const PWR = extern struct {
    +        ///  power control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  Low-power deep sleep
    +            LPDS: u1,
    +            ///  Power down deepsleep
    +            PDDS: u1,
    +            ///  Clear wakeup flag
    +            CWUF: u1,
    +            ///  Clear standby flag
    +            CSBF: u1,
    +            ///  Power voltage detector enable
    +            PVDE: u1,
    +            ///  PVD level selection
    +            PLS: u3,
    +            ///  Disable backup domain write protection
    +            DBP: u1,
    +            ///  Flash power down in Stop mode
    +            FPDS: u1,
    +            ///  Low-Power Regulator Low Voltage in deepsleep
    +            LPLVDS: u1,
    +            ///  Main regulator low voltage in deepsleep mode
    +            MRLVDS: u1,
    +            reserved14: u2,
    +            ///  Regulator voltage scaling output selection
    +            VOS: u2,
    +            ///  Over-drive enable
    +            ODEN: u1,
    +            ///  Over-drive switching enabled
    +            ODSWEN: u1,
    +            ///  Under-drive enable in stop mode
    +            UDEN: u2,
    +            padding: u12,
    +        }),
    +        ///  power control/status register
    +        CSR: mmio.Mmio(packed struct(u32) {
    +            ///  Wakeup flag
    +            WUF: u1,
    +            ///  Standby flag
    +            SBF: u1,
    +            ///  PVD output
    +            PVDO: u1,
    +            ///  Backup regulator ready
    +            BRR: u1,
    +            reserved8: u4,
    +            ///  Enable WKUP pin
    +            EWUP: u1,
    +            ///  Backup regulator enable
    +            BRE: u1,
    +            reserved14: u4,
    +            ///  Regulator voltage scaling output selection ready bit
    +            VOSRDY: u1,
    +            reserved16: u1,
    +            ///  Over-drive mode ready
    +            ODRDY: u1,
    +            ///  Over-drive mode switching ready
    +            ODSWRDY: u1,
    +            ///  Under-drive ready flag
    +            UDRDY: u2,
    +            padding: u12,
    +        }),
    +    };
    +
    +    ///  Independent watchdog
    +    pub const IWDG = extern struct {
    +        ///  Key register
    +        KR: mmio.Mmio(packed struct(u32) {
    +            ///  Key value (write only, read 0000h)
    +            KEY: u16,
    +            padding: u16,
    +        }),
    +        ///  Prescaler register
    +        PR: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler divider
    +            PR: u3,
    +            padding: u29,
    +        }),
    +        ///  Reload register
    +        RLR: mmio.Mmio(packed struct(u32) {
    +            ///  Watchdog counter reload value
    +            RL: u12,
    +            padding: u20,
    +        }),
    +        ///  Status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Watchdog prescaler value update
    +            PVU: u1,
    +            ///  Watchdog counter reload value update
    +            RVU: u1,
    +            padding: u30,
    +        }),
    +    };
    +
    +    ///  Window watchdog
    +    pub const WWDG = extern struct {
    +        ///  Control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  7-bit counter (MSB to LSB)
    +            T: u7,
    +            ///  Activation bit
    +            WDGA: u1,
    +            padding: u24,
    +        }),
    +        ///  Configuration register
    +        CFR: mmio.Mmio(packed struct(u32) {
    +            ///  7-bit window value
    +            W: u7,
    +            ///  Timer base
    +            WDGTB0: u1,
    +            ///  Timer base
    +            WDGTB1: u1,
    +            ///  Early wakeup interrupt
    +            EWI: u1,
    +            padding: u22,
    +        }),
    +        ///  Status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Early wakeup interrupt flag
    +            EWIF: u1,
    +            padding: u31,
    +        }),
    +    };
    +
    +    ///  Real-time clock
    +    pub const RTC = extern struct {
    +        ///  time register
    +        TR: mmio.Mmio(packed struct(u32) {
    +            ///  Second units in BCD format
    +            SU: u4,
    +            ///  Second tens in BCD format
    +            ST: u3,
    +            reserved8: u1,
    +            ///  Minute units in BCD format
    +            MNU: u4,
    +            ///  Minute tens in BCD format
    +            MNT: u3,
    +            reserved16: u1,
    +            ///  Hour units in BCD format
    +            HU: u4,
    +            ///  Hour tens in BCD format
    +            HT: u2,
    +            ///  AM/PM notation
    +            PM: u1,
    +            padding: u9,
    +        }),
    +        ///  date register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  Date units in BCD format
    +            DU: u4,
    +            ///  Date tens in BCD format
    +            DT: u2,
    +            reserved8: u2,
    +            ///  Month units in BCD format
    +            MU: u4,
    +            ///  Month tens in BCD format
    +            MT: u1,
    +            ///  Week day units
    +            WDU: u3,
    +            ///  Year units in BCD format
    +            YU: u4,
    +            ///  Year tens in BCD format
    +            YT: u4,
    +            padding: u8,
    +        }),
    +        ///  control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  Wakeup clock selection
    +            WCKSEL: u3,
    +            ///  Time-stamp event active edge
    +            TSEDGE: u1,
    +            ///  Reference clock detection enable (50 or 60 Hz)
    +            REFCKON: u1,
    +            reserved6: u1,
    +            ///  Hour format
    +            FMT: u1,
    +            ///  Coarse digital calibration enable
    +            DCE: u1,
    +            ///  Alarm A enable
    +            ALRAE: u1,
    +            ///  Alarm B enable
    +            ALRBE: u1,
    +            ///  Wakeup timer enable
    +            WUTE: u1,
    +            ///  Time stamp enable
    +            TSE: u1,
    +            ///  Alarm A interrupt enable
    +            ALRAIE: u1,
    +            ///  Alarm B interrupt enable
    +            ALRBIE: u1,
    +            ///  Wakeup timer interrupt enable
    +            WUTIE: u1,
    +            ///  Time-stamp interrupt enable
    +            TSIE: u1,
    +            ///  Add 1 hour (summer time change)
    +            ADD1H: u1,
    +            ///  Subtract 1 hour (winter time change)
    +            SUB1H: u1,
    +            ///  Backup
    +            BKP: u1,
    +            reserved20: u1,
    +            ///  Output polarity
    +            POL: u1,
    +            ///  Output selection
    +            OSEL: u2,
    +            ///  Calibration output enable
    +            COE: u1,
    +            padding: u8,
    +        }),
    +        ///  initialization and status register
    +        ISR: mmio.Mmio(packed struct(u32) {
    +            ///  Alarm A write flag
    +            ALRAWF: u1,
    +            ///  Alarm B write flag
    +            ALRBWF: u1,
    +            ///  Wakeup timer write flag
    +            WUTWF: u1,
    +            ///  Shift operation pending
    +            SHPF: u1,
    +            ///  Initialization status flag
    +            INITS: u1,
    +            ///  Registers synchronization flag
    +            RSF: u1,
    +            ///  Initialization flag
    +            INITF: u1,
    +            ///  Initialization mode
    +            INIT: u1,
    +            ///  Alarm A flag
    +            ALRAF: u1,
    +            ///  Alarm B flag
    +            ALRBF: u1,
    +            ///  Wakeup timer flag
    +            WUTF: u1,
    +            ///  Time-stamp flag
    +            TSF: u1,
    +            ///  Time-stamp overflow flag
    +            TSOVF: u1,
    +            ///  Tamper detection flag
    +            TAMP1F: u1,
    +            ///  TAMPER2 detection flag
    +            TAMP2F: u1,
    +            reserved16: u1,
    +            ///  Recalibration pending Flag
    +            RECALPF: u1,
    +            padding: u15,
    +        }),
    +        ///  prescaler register
    +        PRER: mmio.Mmio(packed struct(u32) {
    +            ///  Synchronous prescaler factor
    +            PREDIV_S: u15,
    +            reserved16: u1,
    +            ///  Asynchronous prescaler factor
    +            PREDIV_A: u7,
    +            padding: u9,
    +        }),
    +        ///  wakeup timer register
    +        WUTR: mmio.Mmio(packed struct(u32) {
    +            ///  Wakeup auto-reload value bits
    +            WUT: u16,
    +            padding: u16,
    +        }),
    +        ///  calibration register
    +        CALIBR: mmio.Mmio(packed struct(u32) {
    +            ///  Digital calibration
    +            DC: u5,
    +            reserved7: u2,
    +            ///  Digital calibration sign
    +            DCS: u1,
    +            padding: u24,
    +        }),
    +        ///  alarm A register
    +        ALRMAR: mmio.Mmio(packed struct(u32) {
    +            ///  Second units in BCD format
    +            SU: u4,
    +            ///  Second tens in BCD format
    +            ST: u3,
    +            ///  Alarm A seconds mask
    +            MSK1: u1,
    +            ///  Minute units in BCD format
    +            MNU: u4,
    +            ///  Minute tens in BCD format
    +            MNT: u3,
    +            ///  Alarm A minutes mask
    +            MSK2: u1,
    +            ///  Hour units in BCD format
    +            HU: u4,
    +            ///  Hour tens in BCD format
    +            HT: u2,
    +            ///  AM/PM notation
    +            PM: u1,
    +            ///  Alarm A hours mask
    +            MSK3: u1,
    +            ///  Date units or day in BCD format
    +            DU: u4,
    +            ///  Date tens in BCD format
    +            DT: u2,
    +            ///  Week day selection
    +            WDSEL: u1,
    +            ///  Alarm A date mask
    +            MSK4: u1,
    +        }),
    +        ///  alarm B register
    +        ALRMBR: mmio.Mmio(packed struct(u32) {
    +            ///  Second units in BCD format
    +            SU: u4,
    +            ///  Second tens in BCD format
    +            ST: u3,
    +            ///  Alarm B seconds mask
    +            MSK1: u1,
    +            ///  Minute units in BCD format
    +            MNU: u4,
    +            ///  Minute tens in BCD format
    +            MNT: u3,
    +            ///  Alarm B minutes mask
    +            MSK2: u1,
    +            ///  Hour units in BCD format
    +            HU: u4,
    +            ///  Hour tens in BCD format
    +            HT: u2,
    +            ///  AM/PM notation
    +            PM: u1,
    +            ///  Alarm B hours mask
    +            MSK3: u1,
    +            ///  Date units or day in BCD format
    +            DU: u4,
    +            ///  Date tens in BCD format
    +            DT: u2,
    +            ///  Week day selection
    +            WDSEL: u1,
    +            ///  Alarm B date mask
    +            MSK4: u1,
    +        }),
    +        ///  write protection register
    +        WPR: mmio.Mmio(packed struct(u32) {
    +            ///  Write protection key
    +            KEY: u8,
    +            padding: u24,
    +        }),
    +        ///  sub second register
    +        SSR: mmio.Mmio(packed struct(u32) {
    +            ///  Sub second value
    +            SS: u16,
    +            padding: u16,
    +        }),
    +        ///  shift control register
    +        SHIFTR: mmio.Mmio(packed struct(u32) {
    +            ///  Subtract a fraction of a second
    +            SUBFS: u15,
    +            reserved31: u16,
    +            ///  Add one second
    +            ADD1S: u1,
    +        }),
    +        ///  time stamp time register
    +        TSTR: mmio.Mmio(packed struct(u32) {
    +            ///  Tamper 1 detection enable
    +            TAMP1E: u1,
    +            ///  Active level for tamper 1
    +            TAMP1TRG: u1,
    +            ///  Tamper interrupt enable
    +            TAMPIE: u1,
    +            reserved16: u13,
    +            ///  TAMPER1 mapping
    +            TAMP1INSEL: u1,
    +            ///  TIMESTAMP mapping
    +            TSINSEL: u1,
    +            ///  AFO_ALARM output type
    +            ALARMOUTTYPE: u1,
    +            padding: u13,
    +        }),
    +        ///  time stamp date register
    +        TSDR: mmio.Mmio(packed struct(u32) {
    +            ///  Date units in BCD format
    +            DU: u4,
    +            ///  Date tens in BCD format
    +            DT: u2,
    +            reserved8: u2,
    +            ///  Month units in BCD format
    +            MU: u4,
    +            ///  Month tens in BCD format
    +            MT: u1,
    +            ///  Week day units
    +            WDU: u3,
    +            padding: u16,
    +        }),
    +        ///  timestamp sub second register
    +        TSSSR: mmio.Mmio(packed struct(u32) {
    +            ///  Sub second value
    +            SS: u16,
    +            padding: u16,
    +        }),
    +        ///  calibration register
    +        CALR: mmio.Mmio(packed struct(u32) {
    +            ///  Calibration minus
    +            CALM: u9,
    +            reserved13: u4,
    +            ///  Use a 16-second calibration cycle period
    +            CALW16: u1,
    +            ///  Use an 8-second calibration cycle period
    +            CALW8: u1,
    +            ///  Increase frequency of RTC by 488.5 ppm
    +            CALP: u1,
    +            padding: u16,
    +        }),
    +        ///  tamper and alternate function configuration register
    +        TAFCR: mmio.Mmio(packed struct(u32) {
    +            ///  Tamper 1 detection enable
    +            TAMP1E: u1,
    +            ///  Active level for tamper 1
    +            TAMP1TRG: u1,
    +            ///  Tamper interrupt enable
    +            TAMPIE: u1,
    +            ///  Tamper 2 detection enable
    +            TAMP2E: u1,
    +            ///  Active level for tamper 2
    +            TAMP2TRG: u1,
    +            reserved7: u2,
    +            ///  Activate timestamp on tamper detection event
    +            TAMPTS: u1,
    +            ///  Tamper sampling frequency
    +            TAMPFREQ: u3,
    +            ///  Tamper filter count
    +            TAMPFLT: u2,
    +            ///  Tamper precharge duration
    +            TAMPPRCH: u2,
    +            ///  TAMPER pull-up disable
    +            TAMPPUDIS: u1,
    +            ///  TAMPER1 mapping
    +            TAMP1INSEL: u1,
    +            ///  TIMESTAMP mapping
    +            TSINSEL: u1,
    +            ///  AFO_ALARM output type
    +            ALARMOUTTYPE: u1,
    +            padding: u13,
    +        }),
    +        ///  alarm A sub second register
    +        ALRMASSR: mmio.Mmio(packed struct(u32) {
    +            ///  Sub seconds value
    +            SS: u15,
    +            reserved24: u9,
    +            ///  Mask the most-significant bits starting at this bit
    +            MASKSS: u4,
    +            padding: u4,
    +        }),
    +        ///  alarm B sub second register
    +        ALRMBSSR: mmio.Mmio(packed struct(u32) {
    +            ///  Sub seconds value
    +            SS: u15,
    +            reserved24: u9,
    +            ///  Mask the most-significant bits starting at this bit
    +            MASKSS: u4,
    +            padding: u4,
    +        }),
    +        reserved80: [4]u8,
    +        ///  backup register
    +        BKP0R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP1R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP2R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP3R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP4R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP5R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP6R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP7R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP8R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP9R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP10R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP11R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP12R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP13R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP14R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP15R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP16R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP17R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP18R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +        ///  backup register
    +        BKP19R: mmio.Mmio(packed struct(u32) {
    +            ///  BKP
    +            BKP: u32,
    +        }),
    +    };
    +
    +    ///  Universal synchronous asynchronous receiver transmitter
    +    pub const UART4 = extern struct {
    +        ///  Status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Parity error
    +            PE: u1,
    +            ///  Framing error
    +            FE: u1,
    +            ///  Noise detected flag
    +            NF: u1,
    +            ///  Overrun error
    +            ORE: u1,
    +            ///  IDLE line detected
    +            IDLE: u1,
    +            ///  Read data register not empty
    +            RXNE: u1,
    +            ///  Transmission complete
    +            TC: u1,
    +            ///  Transmit data register empty
    +            TXE: u1,
    +            ///  LIN break detection flag
    +            LBD: u1,
    +            padding: u23,
    +        }),
    +        ///  Data register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  Data value
    +            DR: u9,
    +            padding: u23,
    +        }),
    +        ///  Baud rate register
    +        BRR: mmio.Mmio(packed struct(u32) {
    +            ///  fraction of USARTDIV
    +            DIV_Fraction: u4,
    +            ///  mantissa of USARTDIV
    +            DIV_Mantissa: u12,
    +            padding: u16,
    +        }),
    +        ///  Control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Send break
    +            SBK: u1,
    +            ///  Receiver wakeup
    +            RWU: u1,
    +            ///  Receiver enable
    +            RE: u1,
    +            ///  Transmitter enable
    +            TE: u1,
    +            ///  IDLE interrupt enable
    +            IDLEIE: u1,
    +            ///  RXNE interrupt enable
    +            RXNEIE: u1,
    +            ///  Transmission complete interrupt enable
    +            TCIE: u1,
    +            ///  TXE interrupt enable
    +            TXEIE: u1,
    +            ///  PE interrupt enable
    +            PEIE: u1,
    +            ///  Parity selection
    +            PS: u1,
    +            ///  Parity control enable
    +            PCE: u1,
    +            ///  Wakeup method
    +            WAKE: u1,
    +            ///  Word length
    +            M: u1,
    +            ///  USART enable
    +            UE: u1,
    +            reserved15: u1,
    +            ///  Oversampling mode
    +            OVER8: u1,
    +            padding: u16,
    +        }),
    +        ///  Control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            ///  Address of the USART node
    +            ADD: u4,
    +            reserved5: u1,
    +            ///  lin break detection length
    +            LBDL: u1,
    +            ///  LIN break detection interrupt enable
    +            LBDIE: u1,
    +            reserved12: u5,
    +            ///  STOP bits
    +            STOP: u2,
    +            ///  LIN mode enable
    +            LINEN: u1,
    +            padding: u17,
    +        }),
    +        ///  Control register 3
    +        CR3: mmio.Mmio(packed struct(u32) {
    +            ///  Error interrupt enable
    +            EIE: u1,
    +            ///  IrDA mode enable
    +            IREN: u1,
    +            ///  IrDA low-power
    +            IRLP: u1,
    +            ///  Half-duplex selection
    +            HDSEL: u1,
    +            reserved6: u2,
    +            ///  DMA enable receiver
    +            DMAR: u1,
    +            ///  DMA enable transmitter
    +            DMAT: u1,
    +            reserved11: u3,
    +            ///  One sample bit method enable
    +            ONEBIT: u1,
    +            padding: u20,
    +        }),
    +    };
    +
    +    ///  USB on the go full speed
    +    pub const OTG_FS_DEVICE = extern struct {
    +        ///  OTG_FS device configuration register (OTG_FS_DCFG)
    +        FS_DCFG: mmio.Mmio(packed struct(u32) {
    +            ///  Device speed
    +            DSPD: u2,
    +            ///  Non-zero-length status OUT handshake
    +            NZLSOHSK: u1,
    +            reserved4: u1,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Periodic frame interval
    +            PFIVL: u2,
    +            padding: u19,
    +        }),
    +        ///  OTG_FS device control register (OTG_FS_DCTL)
    +        FS_DCTL: mmio.Mmio(packed struct(u32) {
    +            ///  Remote wakeup signaling
    +            RWUSIG: u1,
    +            ///  Soft disconnect
    +            SDIS: u1,
    +            ///  Global IN NAK status
    +            GINSTS: u1,
    +            ///  Global OUT NAK status
    +            GONSTS: u1,
    +            ///  Test control
    +            TCTL: u3,
    +            ///  Set global IN NAK
    +            SGINAK: u1,
    +            ///  Clear global IN NAK
    +            CGINAK: u1,
    +            ///  Set global OUT NAK
    +            SGONAK: u1,
    +            ///  Clear global OUT NAK
    +            CGONAK: u1,
    +            ///  Power-on programming done
    +            POPRGDNE: u1,
    +            padding: u20,
    +        }),
    +        ///  OTG_FS device status register (OTG_FS_DSTS)
    +        FS_DSTS: mmio.Mmio(packed struct(u32) {
    +            ///  Suspend status
    +            SUSPSTS: u1,
    +            ///  Enumerated speed
    +            ENUMSPD: u2,
    +            ///  Erratic error
    +            EERR: u1,
    +            reserved8: u4,
    +            ///  Frame number of the received SOF
    +            FNSOF: u14,
    +            padding: u10,
    +        }),
    +        reserved16: [4]u8,
    +        ///  OTG_FS device IN endpoint common interrupt mask register (OTG_FS_DIEPMSK)
    +        FS_DIEPMSK: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt mask
    +            XFRCM: u1,
    +            ///  Endpoint disabled interrupt mask
    +            EPDM: u1,
    +            reserved3: u1,
    +            ///  Timeout condition mask (Non-isochronous endpoints)
    +            TOM: u1,
    +            ///  IN token received when TxFIFO empty mask
    +            ITTXFEMSK: u1,
    +            ///  IN token received with EP mismatch mask
    +            INEPNMM: u1,
    +            ///  IN endpoint NAK effective mask
    +            INEPNEM: u1,
    +            padding: u25,
    +        }),
    +        ///  OTG_FS device OUT endpoint common interrupt mask register (OTG_FS_DOEPMSK)
    +        FS_DOEPMSK: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed interrupt mask
    +            XFRCM: u1,
    +            ///  Endpoint disabled interrupt mask
    +            EPDM: u1,
    +            reserved3: u1,
    +            ///  SETUP phase done mask
    +            STUPM: u1,
    +            ///  OUT token received when endpoint disabled mask
    +            OTEPDM: u1,
    +            padding: u27,
    +        }),
    +        ///  OTG_FS device all endpoints interrupt register (OTG_FS_DAINT)
    +        FS_DAINT: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint interrupt bits
    +            IEPINT: u16,
    +            ///  OUT endpoint interrupt bits
    +            OEPINT: u16,
    +        }),
    +        ///  OTG_FS all endpoints interrupt mask register (OTG_FS_DAINTMSK)
    +        FS_DAINTMSK: mmio.Mmio(packed struct(u32) {
    +            ///  IN EP interrupt mask bits
    +            IEPM: u16,
    +            ///  OUT endpoint interrupt bits
    +            OEPINT: u16,
    +        }),
    +        reserved40: [8]u8,
    +        ///  OTG_FS device VBUS discharge time register
    +        DVBUSDIS: mmio.Mmio(packed struct(u32) {
    +            ///  Device VBUS discharge time
    +            VBUSDT: u16,
    +            padding: u16,
    +        }),
    +        ///  OTG_FS device VBUS pulsing time register
    +        DVBUSPULSE: mmio.Mmio(packed struct(u32) {
    +            ///  Device VBUS pulsing time
    +            DVBUSP: u12,
    +            padding: u20,
    +        }),
    +        reserved52: [4]u8,
    +        ///  OTG_FS device IN endpoint FIFO empty interrupt mask register
    +        DIEPEMPMSK: mmio.Mmio(packed struct(u32) {
    +            ///  IN EP Tx FIFO empty interrupt mask bits
    +            INEPTXFEM: u16,
    +            padding: u16,
    +        }),
    +        reserved256: [200]u8,
    +        ///  OTG_FS device control IN endpoint 0 control register (OTG_FS_DIEPCTL0)
    +        FS_DIEPCTL0: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u2,
    +            reserved15: u13,
    +            ///  USB active endpoint
    +            USBAEP: u1,
    +            reserved17: u1,
    +            ///  NAK status
    +            NAKSTS: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  STALL handshake
    +            STALL: u1,
    +            ///  TxFIFO number
    +            TXFNUM: u4,
    +            ///  Clear NAK
    +            CNAK: u1,
    +            ///  Set NAK
    +            SNAK: u1,
    +            reserved30: u2,
    +            ///  Endpoint disable
    +            EPDIS: u1,
    +            ///  Endpoint enable
    +            EPENA: u1,
    +        }),
    +        reserved264: [4]u8,
    +        ///  device endpoint-x interrupt register
    +        DIEPINT0: mmio.Mmio(packed struct(u32) {
    +            ///  XFRC
    +            XFRC: u1,
    +            ///  EPDISD
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  TOC
    +            TOC: u1,
    +            ///  ITTXFE
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  INEPNE
    +            INEPNE: u1,
    +            ///  TXFE
    +            TXFE: u1,
    +            padding: u24,
    +        }),
    +        reserved272: [4]u8,
    +        ///  device endpoint-0 transfer size register
    +        DIEPTSIZ0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u7,
    +            reserved19: u12,
    +            ///  Packet count
    +            PKTCNT: u2,
    +            padding: u11,
    +        }),
    +        reserved280: [4]u8,
    +        ///  OTG_FS device IN endpoint transmit FIFO status register
    +        DTXFSTS0: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint TxFIFO space available
    +            INEPTFSAV: u16,
    +            padding: u16,
    +        }),
    +        reserved288: [4]u8,
    +        ///  OTG device endpoint-1 control register
    +        DIEPCTL1: mmio.Mmio(packed struct(u32) {
    +            ///  MPSIZ
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USBAEP
    +            USBAEP: u1,
    +            ///  EONUM/DPID
    +            EONUM_DPID: u1,
    +            ///  NAKSTS
    +            NAKSTS: u1,
    +            ///  EPTYP
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  Stall
    +            Stall: u1,
    +            ///  TXFNUM
    +            TXFNUM: u4,
    +            ///  CNAK
    +            CNAK: u1,
    +            ///  SNAK
    +            SNAK: u1,
    +            ///  SD0PID/SEVNFRM
    +            SD0PID_SEVNFRM: u1,
    +            ///  SODDFRM/SD1PID
    +            SODDFRM_SD1PID: u1,
    +            ///  EPDIS
    +            EPDIS: u1,
    +            ///  EPENA
    +            EPENA: u1,
    +        }),
    +        reserved296: [4]u8,
    +        ///  device endpoint-1 interrupt register
    +        DIEPINT1: mmio.Mmio(packed struct(u32) {
    +            ///  XFRC
    +            XFRC: u1,
    +            ///  EPDISD
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  TOC
    +            TOC: u1,
    +            ///  ITTXFE
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  INEPNE
    +            INEPNE: u1,
    +            ///  TXFE
    +            TXFE: u1,
    +            padding: u24,
    +        }),
    +        reserved304: [4]u8,
    +        ///  device endpoint-1 transfer size register
    +        DIEPTSIZ1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Multi count
    +            MCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved312: [4]u8,
    +        ///  OTG_FS device IN endpoint transmit FIFO status register
    +        DTXFSTS1: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint TxFIFO space available
    +            INEPTFSAV: u16,
    +            padding: u16,
    +        }),
    +        reserved320: [4]u8,
    +        ///  OTG device endpoint-2 control register
    +        DIEPCTL2: mmio.Mmio(packed struct(u32) {
    +            ///  MPSIZ
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USBAEP
    +            USBAEP: u1,
    +            ///  EONUM/DPID
    +            EONUM_DPID: u1,
    +            ///  NAKSTS
    +            NAKSTS: u1,
    +            ///  EPTYP
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  Stall
    +            Stall: u1,
    +            ///  TXFNUM
    +            TXFNUM: u4,
    +            ///  CNAK
    +            CNAK: u1,
    +            ///  SNAK
    +            SNAK: u1,
    +            ///  SD0PID/SEVNFRM
    +            SD0PID_SEVNFRM: u1,
    +            ///  SODDFRM
    +            SODDFRM: u1,
    +            ///  EPDIS
    +            EPDIS: u1,
    +            ///  EPENA
    +            EPENA: u1,
    +        }),
    +        reserved328: [4]u8,
    +        ///  device endpoint-2 interrupt register
    +        DIEPINT2: mmio.Mmio(packed struct(u32) {
    +            ///  XFRC
    +            XFRC: u1,
    +            ///  EPDISD
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  TOC
    +            TOC: u1,
    +            ///  ITTXFE
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  INEPNE
    +            INEPNE: u1,
    +            ///  TXFE
    +            TXFE: u1,
    +            padding: u24,
    +        }),
    +        reserved336: [4]u8,
    +        ///  device endpoint-2 transfer size register
    +        DIEPTSIZ2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Multi count
    +            MCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved344: [4]u8,
    +        ///  OTG_FS device IN endpoint transmit FIFO status register
    +        DTXFSTS2: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint TxFIFO space available
    +            INEPTFSAV: u16,
    +            padding: u16,
    +        }),
    +        reserved352: [4]u8,
    +        ///  OTG device endpoint-3 control register
    +        DIEPCTL3: mmio.Mmio(packed struct(u32) {
    +            ///  MPSIZ
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USBAEP
    +            USBAEP: u1,
    +            ///  EONUM/DPID
    +            EONUM_DPID: u1,
    +            ///  NAKSTS
    +            NAKSTS: u1,
    +            ///  EPTYP
    +            EPTYP: u2,
    +            reserved21: u1,
    +            ///  Stall
    +            Stall: u1,
    +            ///  TXFNUM
    +            TXFNUM: u4,
    +            ///  CNAK
    +            CNAK: u1,
    +            ///  SNAK
    +            SNAK: u1,
    +            ///  SD0PID/SEVNFRM
    +            SD0PID_SEVNFRM: u1,
    +            ///  SODDFRM
    +            SODDFRM: u1,
    +            ///  EPDIS
    +            EPDIS: u1,
    +            ///  EPENA
    +            EPENA: u1,
    +        }),
    +        reserved360: [4]u8,
    +        ///  device endpoint-3 interrupt register
    +        DIEPINT3: mmio.Mmio(packed struct(u32) {
    +            ///  XFRC
    +            XFRC: u1,
    +            ///  EPDISD
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  TOC
    +            TOC: u1,
    +            ///  ITTXFE
    +            ITTXFE: u1,
    +            reserved6: u1,
    +            ///  INEPNE
    +            INEPNE: u1,
    +            ///  TXFE
    +            TXFE: u1,
    +            padding: u24,
    +        }),
    +        reserved368: [4]u8,
    +        ///  device endpoint-3 transfer size register
    +        DIEPTSIZ3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Multi count
    +            MCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved376: [4]u8,
    +        ///  OTG_FS device IN endpoint transmit FIFO status register
    +        DTXFSTS3: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint TxFIFO space available
    +            INEPTFSAV: u16,
    +            padding: u16,
    +        }),
    +        reserved768: [388]u8,
    +        ///  device endpoint-0 control register
    +        DOEPCTL0: mmio.Mmio(packed struct(u32) {
    +            ///  MPSIZ
    +            MPSIZ: u2,
    +            reserved15: u13,
    +            ///  USBAEP
    +            USBAEP: u1,
    +            reserved17: u1,
    +            ///  NAKSTS
    +            NAKSTS: u1,
    +            ///  EPTYP
    +            EPTYP: u2,
    +            ///  SNPM
    +            SNPM: u1,
    +            ///  Stall
    +            Stall: u1,
    +            reserved26: u4,
    +            ///  CNAK
    +            CNAK: u1,
    +            ///  SNAK
    +            SNAK: u1,
    +            reserved30: u2,
    +            ///  EPDIS
    +            EPDIS: u1,
    +            ///  EPENA
    +            EPENA: u1,
    +        }),
    +        reserved776: [4]u8,
    +        ///  device endpoint-0 interrupt register
    +        DOEPINT0: mmio.Mmio(packed struct(u32) {
    +            ///  XFRC
    +            XFRC: u1,
    +            ///  EPDISD
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  STUP
    +            STUP: u1,
    +            ///  OTEPDIS
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  B2BSTUP
    +            B2BSTUP: u1,
    +            padding: u25,
    +        }),
    +        reserved784: [4]u8,
    +        ///  device OUT endpoint-0 transfer size register
    +        DOEPTSIZ0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u7,
    +            reserved19: u12,
    +            ///  Packet count
    +            PKTCNT: u1,
    +            reserved29: u9,
    +            ///  SETUP packet count
    +            STUPCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved800: [12]u8,
    +        ///  device endpoint-1 control register
    +        DOEPCTL1: mmio.Mmio(packed struct(u32) {
    +            ///  MPSIZ
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USBAEP
    +            USBAEP: u1,
    +            ///  EONUM/DPID
    +            EONUM_DPID: u1,
    +            ///  NAKSTS
    +            NAKSTS: u1,
    +            ///  EPTYP
    +            EPTYP: u2,
    +            ///  SNPM
    +            SNPM: u1,
    +            ///  Stall
    +            Stall: u1,
    +            reserved26: u4,
    +            ///  CNAK
    +            CNAK: u1,
    +            ///  SNAK
    +            SNAK: u1,
    +            ///  SD0PID/SEVNFRM
    +            SD0PID_SEVNFRM: u1,
    +            ///  SODDFRM
    +            SODDFRM: u1,
    +            ///  EPDIS
    +            EPDIS: u1,
    +            ///  EPENA
    +            EPENA: u1,
    +        }),
    +        reserved808: [4]u8,
    +        ///  device endpoint-1 interrupt register
    +        DOEPINT1: mmio.Mmio(packed struct(u32) {
    +            ///  XFRC
    +            XFRC: u1,
    +            ///  EPDISD
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  STUP
    +            STUP: u1,
    +            ///  OTEPDIS
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  B2BSTUP
    +            B2BSTUP: u1,
    +            padding: u25,
    +        }),
    +        reserved816: [4]u8,
    +        ///  device OUT endpoint-1 transfer size register
    +        DOEPTSIZ1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Received data PID/SETUP packet count
    +            RXDPID_STUPCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved832: [12]u8,
    +        ///  device endpoint-2 control register
    +        DOEPCTL2: mmio.Mmio(packed struct(u32) {
    +            ///  MPSIZ
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USBAEP
    +            USBAEP: u1,
    +            ///  EONUM/DPID
    +            EONUM_DPID: u1,
    +            ///  NAKSTS
    +            NAKSTS: u1,
    +            ///  EPTYP
    +            EPTYP: u2,
    +            ///  SNPM
    +            SNPM: u1,
    +            ///  Stall
    +            Stall: u1,
    +            reserved26: u4,
    +            ///  CNAK
    +            CNAK: u1,
    +            ///  SNAK
    +            SNAK: u1,
    +            ///  SD0PID/SEVNFRM
    +            SD0PID_SEVNFRM: u1,
    +            ///  SODDFRM
    +            SODDFRM: u1,
    +            ///  EPDIS
    +            EPDIS: u1,
    +            ///  EPENA
    +            EPENA: u1,
    +        }),
    +        reserved840: [4]u8,
    +        ///  device endpoint-2 interrupt register
    +        DOEPINT2: mmio.Mmio(packed struct(u32) {
    +            ///  XFRC
    +            XFRC: u1,
    +            ///  EPDISD
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  STUP
    +            STUP: u1,
    +            ///  OTEPDIS
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  B2BSTUP
    +            B2BSTUP: u1,
    +            padding: u25,
    +        }),
    +        reserved848: [4]u8,
    +        ///  device OUT endpoint-2 transfer size register
    +        DOEPTSIZ2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Received data PID/SETUP packet count
    +            RXDPID_STUPCNT: u2,
    +            padding: u1,
    +        }),
    +        reserved864: [12]u8,
    +        ///  device endpoint-3 control register
    +        DOEPCTL3: mmio.Mmio(packed struct(u32) {
    +            ///  MPSIZ
    +            MPSIZ: u11,
    +            reserved15: u4,
    +            ///  USBAEP
    +            USBAEP: u1,
    +            ///  EONUM/DPID
    +            EONUM_DPID: u1,
    +            ///  NAKSTS
    +            NAKSTS: u1,
    +            ///  EPTYP
    +            EPTYP: u2,
    +            ///  SNPM
    +            SNPM: u1,
    +            ///  Stall
    +            Stall: u1,
    +            reserved26: u4,
    +            ///  CNAK
    +            CNAK: u1,
    +            ///  SNAK
    +            SNAK: u1,
    +            ///  SD0PID/SEVNFRM
    +            SD0PID_SEVNFRM: u1,
    +            ///  SODDFRM
    +            SODDFRM: u1,
    +            ///  EPDIS
    +            EPDIS: u1,
    +            ///  EPENA
    +            EPENA: u1,
    +        }),
    +        reserved872: [4]u8,
    +        ///  device endpoint-3 interrupt register
    +        DOEPINT3: mmio.Mmio(packed struct(u32) {
    +            ///  XFRC
    +            XFRC: u1,
    +            ///  EPDISD
    +            EPDISD: u1,
    +            reserved3: u1,
    +            ///  STUP
    +            STUP: u1,
    +            ///  OTEPDIS
    +            OTEPDIS: u1,
    +            reserved6: u1,
    +            ///  B2BSTUP
    +            B2BSTUP: u1,
    +            padding: u25,
    +        }),
    +        reserved880: [4]u8,
    +        ///  device OUT endpoint-3 transfer size register
    +        DOEPTSIZ3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Received data PID/SETUP packet count
    +            RXDPID_STUPCNT: u2,
    +            padding: u1,
    +        }),
    +    };
    +
    +    ///  Common ADC registers
    +    pub const C_ADC = extern struct {
    +        ///  ADC Common status register
    +        CSR: mmio.Mmio(packed struct(u32) {
    +            ///  Analog watchdog flag of ADC 1
    +            AWD1: u1,
    +            ///  End of conversion of ADC 1
    +            EOC1: u1,
    +            ///  Injected channel end of conversion of ADC 1
    +            JEOC1: u1,
    +            ///  Injected channel Start flag of ADC 1
    +            JSTRT1: u1,
    +            ///  Regular channel Start flag of ADC 1
    +            STRT1: u1,
    +            ///  Overrun flag of ADC 1
    +            OVR1: u1,
    +            reserved8: u2,
    +            ///  Analog watchdog flag of ADC 2
    +            AWD2: u1,
    +            ///  End of conversion of ADC 2
    +            EOC2: u1,
    +            ///  Injected channel end of conversion of ADC 2
    +            JEOC2: u1,
    +            ///  Injected channel Start flag of ADC 2
    +            JSTRT2: u1,
    +            ///  Regular channel Start flag of ADC 2
    +            STRT2: u1,
    +            ///  Overrun flag of ADC 2
    +            OVR2: u1,
    +            reserved16: u2,
    +            ///  Analog watchdog flag of ADC 3
    +            AWD3: u1,
    +            ///  End of conversion of ADC 3
    +            EOC3: u1,
    +            ///  Injected channel end of conversion of ADC 3
    +            JEOC3: u1,
    +            ///  Injected channel Start flag of ADC 3
    +            JSTRT3: u1,
    +            ///  Regular channel Start flag of ADC 3
    +            STRT3: u1,
    +            ///  Overrun flag of ADC3
    +            OVR3: u1,
    +            padding: u10,
    +        }),
    +        ///  ADC common control register
    +        CCR: mmio.Mmio(packed struct(u32) {
    +            ///  Multi ADC mode selection
    +            MULT: u5,
    +            reserved8: u3,
    +            ///  Delay between 2 sampling phases
    +            DELAY: u4,
    +            reserved13: u1,
    +            ///  DMA disable selection for multi-ADC mode
    +            DDS: u1,
    +            ///  Direct memory access mode for multi ADC mode
    +            DMA: u2,
    +            ///  ADC prescaler
    +            ADCPRE: u2,
    +            reserved22: u4,
    +            ///  VBAT enable
    +            VBATE: u1,
    +            ///  Temperature sensor and VREFINT enable
    +            TSVREFE: u1,
    +            padding: u8,
    +        }),
    +        ///  ADC common regular data register for dual and triple modes
    +        CDR: mmio.Mmio(packed struct(u32) {
    +            ///  1st data item of a pair of regular conversions
    +            DATA1: u16,
    +            ///  2nd data item of a pair of regular conversions
    +            DATA2: u16,
    +        }),
    +    };
    +
    +    ///  Advanced-timers
    +    pub const TIM1 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            ///  One-pulse mode
    +            OPM: u1,
    +            ///  Direction
    +            DIR: u1,
    +            ///  Center-aligned mode selection
    +            CMS: u2,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            ///  Clock division
    +            CKD: u2,
    +            padding: u22,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/compare preloaded control
    +            CCPC: u1,
    +            reserved2: u1,
    +            ///  Capture/compare control update selection
    +            CCUS: u1,
    +            ///  Capture/compare DMA selection
    +            CCDS: u1,
    +            ///  Master mode selection
    +            MMS: u3,
    +            ///  TI1 selection
    +            TI1S: u1,
    +            ///  Output Idle state 1
    +            OIS1: u1,
    +            ///  Output Idle state 1
    +            OIS1N: u1,
    +            ///  Output Idle state 2
    +            OIS2: u1,
    +            ///  Output Idle state 2
    +            OIS2N: u1,
    +            ///  Output Idle state 3
    +            OIS3: u1,
    +            ///  Output Idle state 3
    +            OIS3N: u1,
    +            ///  Output Idle state 4
    +            OIS4: u1,
    +            padding: u17,
    +        }),
    +        ///  slave mode control register
    +        SMCR: mmio.Mmio(packed struct(u32) {
    +            ///  Slave mode selection
    +            SMS: u3,
    +            reserved4: u1,
    +            ///  Trigger selection
    +            TS: u3,
    +            ///  Master/Slave mode
    +            MSM: u1,
    +            ///  External trigger filter
    +            ETF: u4,
    +            ///  External trigger prescaler
    +            ETPS: u2,
    +            ///  External clock enable
    +            ECE: u1,
    +            ///  External trigger polarity
    +            ETP: u1,
    +            padding: u16,
    +        }),
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            ///  Capture/Compare 1 interrupt enable
    +            CC1IE: u1,
    +            ///  Capture/Compare 2 interrupt enable
    +            CC2IE: u1,
    +            ///  Capture/Compare 3 interrupt enable
    +            CC3IE: u1,
    +            ///  Capture/Compare 4 interrupt enable
    +            CC4IE: u1,
    +            ///  COM interrupt enable
    +            COMIE: u1,
    +            ///  Trigger interrupt enable
    +            TIE: u1,
    +            ///  Break interrupt enable
    +            BIE: u1,
    +            ///  Update DMA request enable
    +            UDE: u1,
    +            ///  Capture/Compare 1 DMA request enable
    +            CC1DE: u1,
    +            ///  Capture/Compare 2 DMA request enable
    +            CC2DE: u1,
    +            ///  Capture/Compare 3 DMA request enable
    +            CC3DE: u1,
    +            ///  Capture/Compare 4 DMA request enable
    +            CC4DE: u1,
    +            ///  COM DMA request enable
    +            COMDE: u1,
    +            ///  Trigger DMA request enable
    +            TDE: u1,
    +            padding: u17,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            ///  Capture/compare 1 interrupt flag
    +            CC1IF: u1,
    +            ///  Capture/Compare 2 interrupt flag
    +            CC2IF: u1,
    +            ///  Capture/Compare 3 interrupt flag
    +            CC3IF: u1,
    +            ///  Capture/Compare 4 interrupt flag
    +            CC4IF: u1,
    +            ///  COM interrupt flag
    +            COMIF: u1,
    +            ///  Trigger interrupt flag
    +            TIF: u1,
    +            ///  Break interrupt flag
    +            BIF: u1,
    +            reserved9: u1,
    +            ///  Capture/Compare 1 overcapture flag
    +            CC1OF: u1,
    +            ///  Capture/compare 2 overcapture flag
    +            CC2OF: u1,
    +            ///  Capture/Compare 3 overcapture flag
    +            CC3OF: u1,
    +            ///  Capture/Compare 4 overcapture flag
    +            CC4OF: u1,
    +            padding: u19,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            ///  Capture/compare 1 generation
    +            CC1G: u1,
    +            ///  Capture/compare 2 generation
    +            CC2G: u1,
    +            ///  Capture/compare 3 generation
    +            CC3G: u1,
    +            ///  Capture/compare 4 generation
    +            CC4G: u1,
    +            ///  Capture/Compare control update generation
    +            COMG: u1,
    +            ///  Trigger generation
    +            TG: u1,
    +            ///  Break generation
    +            BG: u1,
    +            padding: u24,
    +        }),
    +        ///  capture/compare mode register 1 (output mode)
    +        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 selection
    +            CC1S: u2,
    +            ///  Output Compare 1 fast enable
    +            OC1FE: u1,
    +            ///  Output Compare 1 preload enable
    +            OC1PE: u1,
    +            ///  Output Compare 1 mode
    +            OC1M: u3,
    +            ///  Output Compare 1 clear enable
    +            OC1CE: u1,
    +            ///  Capture/Compare 2 selection
    +            CC2S: u2,
    +            ///  Output Compare 2 fast enable
    +            OC2FE: u1,
    +            ///  Output Compare 2 preload enable
    +            OC2PE: u1,
    +            ///  Output Compare 2 mode
    +            OC2M: u3,
    +            ///  Output Compare 2 clear enable
    +            OC2CE: u1,
    +            padding: u16,
    +        }),
    +        ///  capture/compare mode register 2 (output mode)
    +        CCMR2_Output: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 3 selection
    +            CC3S: u2,
    +            ///  Output compare 3 fast enable
    +            OC3FE: u1,
    +            ///  Output compare 3 preload enable
    +            OC3PE: u1,
    +            ///  Output compare 3 mode
    +            OC3M: u3,
    +            ///  Output compare 3 clear enable
    +            OC3CE: u1,
    +            ///  Capture/Compare 4 selection
    +            CC4S: u2,
    +            ///  Output compare 4 fast enable
    +            OC4FE: u1,
    +            ///  Output compare 4 preload enable
    +            OC4PE: u1,
    +            ///  Output compare 4 mode
    +            OC4M: u3,
    +            ///  Output compare 4 clear enable
    +            OC4CE: u1,
    +            padding: u16,
    +        }),
    +        ///  capture/compare enable register
    +        CCER: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 output enable
    +            CC1E: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1P: u1,
    +            ///  Capture/Compare 1 complementary output enable
    +            CC1NE: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1NP: u1,
    +            ///  Capture/Compare 2 output enable
    +            CC2E: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2P: u1,
    +            ///  Capture/Compare 2 complementary output enable
    +            CC2NE: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2NP: u1,
    +            ///  Capture/Compare 3 output enable
    +            CC3E: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC3P: u1,
    +            ///  Capture/Compare 3 complementary output enable
    +            CC3NE: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC3NP: u1,
    +            ///  Capture/Compare 4 output enable
    +            CC4E: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC4P: u1,
    +            padding: u18,
    +        }),
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  counter value
    +            CNT: u16,
    +            padding: u16,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Auto-reload value
    +            ARR: u16,
    +            padding: u16,
    +        }),
    +        ///  repetition counter register
    +        RCR: mmio.Mmio(packed struct(u32) {
    +            ///  Repetition counter value
    +            REP: u8,
    +            padding: u24,
    +        }),
    +        ///  capture/compare register 1
    +        CCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 value
    +            CCR1: u16,
    +            padding: u16,
    +        }),
    +        ///  capture/compare register 2
    +        CCR2: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 2 value
    +            CCR2: u16,
    +            padding: u16,
    +        }),
    +        ///  capture/compare register 3
    +        CCR3: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare value
    +            CCR3: u16,
    +            padding: u16,
    +        }),
    +        ///  capture/compare register 4
    +        CCR4: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare value
    +            CCR4: u16,
    +            padding: u16,
    +        }),
    +        ///  break and dead-time register
    +        BDTR: mmio.Mmio(packed struct(u32) {
    +            ///  Dead-time generator setup
    +            DTG: u8,
    +            ///  Lock configuration
    +            LOCK: u2,
    +            ///  Off-state selection for Idle mode
    +            OSSI: u1,
    +            ///  Off-state selection for Run mode
    +            OSSR: u1,
    +            ///  Break enable
    +            BKE: u1,
    +            ///  Break polarity
    +            BKP: u1,
    +            ///  Automatic output enable
    +            AOE: u1,
    +            ///  Main output enable
    +            MOE: u1,
    +            padding: u16,
    +        }),
    +        ///  DMA control register
    +        DCR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA base address
    +            DBA: u5,
    +            reserved8: u3,
    +            ///  DMA burst length
    +            DBL: u5,
    +            padding: u19,
    +        }),
    +        ///  DMA address for full transfer
    +        DMAR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA register for burst accesses
    +            DMAB: u16,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  USB on the go full speed
    +    pub const OTG_FS_HOST = extern struct {
    +        ///  OTG_FS host configuration register (OTG_FS_HCFG)
    +        FS_HCFG: mmio.Mmio(packed struct(u32) {
    +            ///  FS/LS PHY clock select
    +            FSLSPCS: u2,
    +            ///  FS- and LS-only support
    +            FSLSS: u1,
    +            padding: u29,
    +        }),
    +        ///  OTG_FS Host frame interval register
    +        HFIR: mmio.Mmio(packed struct(u32) {
    +            ///  Frame interval
    +            FRIVL: u16,
    +            padding: u16,
    +        }),
    +        ///  OTG_FS host frame number/frame time remaining register (OTG_FS_HFNUM)
    +        FS_HFNUM: mmio.Mmio(packed struct(u32) {
    +            ///  Frame number
    +            FRNUM: u16,
    +            ///  Frame time remaining
    +            FTREM: u16,
    +        }),
    +        reserved16: [4]u8,
    +        ///  OTG_FS_Host periodic transmit FIFO/queue status register (OTG_FS_HPTXSTS)
    +        FS_HPTXSTS: mmio.Mmio(packed struct(u32) {
    +            ///  Periodic transmit data FIFO space available
    +            PTXFSAVL: u16,
    +            ///  Periodic transmit request queue space available
    +            PTXQSAV: u8,
    +            ///  Top of the periodic transmit request queue
    +            PTXQTOP: u8,
    +        }),
    +        ///  OTG_FS Host all channels interrupt register
    +        HAINT: mmio.Mmio(packed struct(u32) {
    +            ///  Channel interrupts
    +            HAINT: u16,
    +            padding: u16,
    +        }),
    +        ///  OTG_FS host all channels interrupt mask register
    +        HAINTMSK: mmio.Mmio(packed struct(u32) {
    +            ///  Channel interrupt mask
    +            HAINTM: u16,
    +            padding: u16,
    +        }),
    +        reserved64: [36]u8,
    +        ///  OTG_FS host port control and status register (OTG_FS_HPRT)
    +        FS_HPRT: mmio.Mmio(packed struct(u32) {
    +            ///  Port connect status
    +            PCSTS: u1,
    +            ///  Port connect detected
    +            PCDET: u1,
    +            ///  Port enable
    +            PENA: u1,
    +            ///  Port enable/disable change
    +            PENCHNG: u1,
    +            ///  Port overcurrent active
    +            POCA: u1,
    +            ///  Port overcurrent change
    +            POCCHNG: u1,
    +            ///  Port resume
    +            PRES: u1,
    +            ///  Port suspend
    +            PSUSP: u1,
    +            ///  Port reset
    +            PRST: u1,
    +            reserved10: u1,
    +            ///  Port line status
    +            PLSTS: u2,
    +            ///  Port power
    +            PPWR: u1,
    +            ///  Port test control
    +            PTCTL: u4,
    +            ///  Port speed
    +            PSPD: u2,
    +            padding: u13,
    +        }),
    +        reserved256: [188]u8,
    +        ///  OTG_FS host channel-0 characteristics register (OTG_FS_HCCHAR0)
    +        FS_HCCHAR0: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multicount
    +            MCNT: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        reserved264: [4]u8,
    +        ///  OTG_FS host channel-0 interrupt register (OTG_FS_HCINT0)
    +        FS_HCINT0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            reserved7: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-0 mask register (OTG_FS_HCINTMSK0)
    +        FS_HCINTMSK0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-0 transfer size register
    +        FS_HCTSIZ0: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        reserved288: [12]u8,
    +        ///  OTG_FS host channel-1 characteristics register (OTG_FS_HCCHAR1)
    +        FS_HCCHAR1: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multicount
    +            MCNT: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        reserved296: [4]u8,
    +        ///  OTG_FS host channel-1 interrupt register (OTG_FS_HCINT1)
    +        FS_HCINT1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            reserved7: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-1 mask register (OTG_FS_HCINTMSK1)
    +        FS_HCINTMSK1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-1 transfer size register
    +        FS_HCTSIZ1: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        reserved320: [12]u8,
    +        ///  OTG_FS host channel-2 characteristics register (OTG_FS_HCCHAR2)
    +        FS_HCCHAR2: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multicount
    +            MCNT: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        reserved328: [4]u8,
    +        ///  OTG_FS host channel-2 interrupt register (OTG_FS_HCINT2)
    +        FS_HCINT2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            reserved7: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-2 mask register (OTG_FS_HCINTMSK2)
    +        FS_HCINTMSK2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-2 transfer size register
    +        FS_HCTSIZ2: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        reserved352: [12]u8,
    +        ///  OTG_FS host channel-3 characteristics register (OTG_FS_HCCHAR3)
    +        FS_HCCHAR3: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multicount
    +            MCNT: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        reserved360: [4]u8,
    +        ///  OTG_FS host channel-3 interrupt register (OTG_FS_HCINT3)
    +        FS_HCINT3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            reserved7: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-3 mask register (OTG_FS_HCINTMSK3)
    +        FS_HCINTMSK3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-3 transfer size register
    +        FS_HCTSIZ3: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        reserved384: [12]u8,
    +        ///  OTG_FS host channel-4 characteristics register (OTG_FS_HCCHAR4)
    +        FS_HCCHAR4: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multicount
    +            MCNT: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        reserved392: [4]u8,
    +        ///  OTG_FS host channel-4 interrupt register (OTG_FS_HCINT4)
    +        FS_HCINT4: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            reserved7: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-4 mask register (OTG_FS_HCINTMSK4)
    +        FS_HCINTMSK4: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-x transfer size register
    +        FS_HCTSIZ4: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        reserved416: [12]u8,
    +        ///  OTG_FS host channel-5 characteristics register (OTG_FS_HCCHAR5)
    +        FS_HCCHAR5: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multicount
    +            MCNT: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        reserved424: [4]u8,
    +        ///  OTG_FS host channel-5 interrupt register (OTG_FS_HCINT5)
    +        FS_HCINT5: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            reserved7: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-5 mask register (OTG_FS_HCINTMSK5)
    +        FS_HCINTMSK5: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-5 transfer size register
    +        FS_HCTSIZ5: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        reserved448: [12]u8,
    +        ///  OTG_FS host channel-6 characteristics register (OTG_FS_HCCHAR6)
    +        FS_HCCHAR6: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multicount
    +            MCNT: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        reserved456: [4]u8,
    +        ///  OTG_FS host channel-6 interrupt register (OTG_FS_HCINT6)
    +        FS_HCINT6: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            reserved7: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-6 mask register (OTG_FS_HCINTMSK6)
    +        FS_HCINTMSK6: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-6 transfer size register
    +        FS_HCTSIZ6: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +        reserved480: [12]u8,
    +        ///  OTG_FS host channel-7 characteristics register (OTG_FS_HCCHAR7)
    +        FS_HCCHAR7: mmio.Mmio(packed struct(u32) {
    +            ///  Maximum packet size
    +            MPSIZ: u11,
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Endpoint direction
    +            EPDIR: u1,
    +            reserved17: u1,
    +            ///  Low-speed device
    +            LSDEV: u1,
    +            ///  Endpoint type
    +            EPTYP: u2,
    +            ///  Multicount
    +            MCNT: u2,
    +            ///  Device address
    +            DAD: u7,
    +            ///  Odd frame
    +            ODDFRM: u1,
    +            ///  Channel disable
    +            CHDIS: u1,
    +            ///  Channel enable
    +            CHENA: u1,
    +        }),
    +        reserved488: [4]u8,
    +        ///  OTG_FS host channel-7 interrupt register (OTG_FS_HCINT7)
    +        FS_HCINT7: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed
    +            XFRC: u1,
    +            ///  Channel halted
    +            CHH: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt
    +            STALL: u1,
    +            ///  NAK response received interrupt
    +            NAK: u1,
    +            ///  ACK response received/transmitted interrupt
    +            ACK: u1,
    +            reserved7: u1,
    +            ///  Transaction error
    +            TXERR: u1,
    +            ///  Babble error
    +            BBERR: u1,
    +            ///  Frame overrun
    +            FRMOR: u1,
    +            ///  Data toggle error
    +            DTERR: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-7 mask register (OTG_FS_HCINTMSK7)
    +        FS_HCINTMSK7: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer completed mask
    +            XFRCM: u1,
    +            ///  Channel halted mask
    +            CHHM: u1,
    +            reserved3: u1,
    +            ///  STALL response received interrupt mask
    +            STALLM: u1,
    +            ///  NAK response received interrupt mask
    +            NAKM: u1,
    +            ///  ACK response received/transmitted interrupt mask
    +            ACKM: u1,
    +            ///  response received interrupt mask
    +            NYET: u1,
    +            ///  Transaction error mask
    +            TXERRM: u1,
    +            ///  Babble error mask
    +            BBERRM: u1,
    +            ///  Frame overrun mask
    +            FRMORM: u1,
    +            ///  Data toggle error mask
    +            DTERRM: u1,
    +            padding: u21,
    +        }),
    +        ///  OTG_FS host channel-7 transfer size register
    +        FS_HCTSIZ7: mmio.Mmio(packed struct(u32) {
    +            ///  Transfer size
    +            XFRSIZ: u19,
    +            ///  Packet count
    +            PKTCNT: u10,
    +            ///  Data PID
    +            DPID: u2,
    +            padding: u1,
    +        }),
    +    };
    +
    +    ///  General purpose timers
    +    pub const TIM2 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            ///  One-pulse mode
    +            OPM: u1,
    +            ///  Direction
    +            DIR: u1,
    +            ///  Center-aligned mode selection
    +            CMS: u2,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            ///  Clock division
    +            CKD: u2,
    +            padding: u22,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            reserved3: u3,
    +            ///  Capture/compare DMA selection
    +            CCDS: u1,
    +            ///  Master mode selection
    +            MMS: u3,
    +            ///  TI1 selection
    +            TI1S: u1,
    +            padding: u24,
    +        }),
    +        ///  slave mode control register
    +        SMCR: mmio.Mmio(packed struct(u32) {
    +            ///  Slave mode selection
    +            SMS: u3,
    +            reserved4: u1,
    +            ///  Trigger selection
    +            TS: u3,
    +            ///  Master/Slave mode
    +            MSM: u1,
    +            ///  External trigger filter
    +            ETF: u4,
    +            ///  External trigger prescaler
    +            ETPS: u2,
    +            ///  External clock enable
    +            ECE: u1,
    +            ///  External trigger polarity
    +            ETP: u1,
    +            padding: u16,
    +        }),
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            ///  Capture/Compare 1 interrupt enable
    +            CC1IE: u1,
    +            ///  Capture/Compare 2 interrupt enable
    +            CC2IE: u1,
    +            ///  Capture/Compare 3 interrupt enable
    +            CC3IE: u1,
    +            ///  Capture/Compare 4 interrupt enable
    +            CC4IE: u1,
    +            reserved6: u1,
    +            ///  Trigger interrupt enable
    +            TIE: u1,
    +            reserved8: u1,
    +            ///  Update DMA request enable
    +            UDE: u1,
    +            ///  Capture/Compare 1 DMA request enable
    +            CC1DE: u1,
    +            ///  Capture/Compare 2 DMA request enable
    +            CC2DE: u1,
    +            ///  Capture/Compare 3 DMA request enable
    +            CC3DE: u1,
    +            ///  Capture/Compare 4 DMA request enable
    +            CC4DE: u1,
    +            reserved14: u1,
    +            ///  Trigger DMA request enable
    +            TDE: u1,
    +            padding: u17,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            ///  Capture/compare 1 interrupt flag
    +            CC1IF: u1,
    +            ///  Capture/Compare 2 interrupt flag
    +            CC2IF: u1,
    +            ///  Capture/Compare 3 interrupt flag
    +            CC3IF: u1,
    +            ///  Capture/Compare 4 interrupt flag
    +            CC4IF: u1,
    +            reserved6: u1,
    +            ///  Trigger interrupt flag
    +            TIF: u1,
    +            reserved9: u2,
    +            ///  Capture/Compare 1 overcapture flag
    +            CC1OF: u1,
    +            ///  Capture/compare 2 overcapture flag
    +            CC2OF: u1,
    +            ///  Capture/Compare 3 overcapture flag
    +            CC3OF: u1,
    +            ///  Capture/Compare 4 overcapture flag
    +            CC4OF: u1,
    +            padding: u19,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            ///  Capture/compare 1 generation
    +            CC1G: u1,
    +            ///  Capture/compare 2 generation
    +            CC2G: u1,
    +            ///  Capture/compare 3 generation
    +            CC3G: u1,
    +            ///  Capture/compare 4 generation
    +            CC4G: u1,
    +            reserved6: u1,
    +            ///  Trigger generation
    +            TG: u1,
    +            padding: u25,
    +        }),
    +        ///  capture/compare mode register 1 (output mode)
    +        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    +            ///  CC1S
    +            CC1S: u2,
    +            ///  OC1FE
    +            OC1FE: u1,
    +            ///  OC1PE
    +            OC1PE: u1,
    +            ///  OC1M
    +            OC1M: u3,
    +            ///  OC1CE
    +            OC1CE: u1,
    +            ///  CC2S
    +            CC2S: u2,
    +            ///  OC2FE
    +            OC2FE: u1,
    +            ///  OC2PE
    +            OC2PE: u1,
    +            ///  OC2M
    +            OC2M: u3,
    +            ///  OC2CE
    +            OC2CE: u1,
    +            padding: u16,
    +        }),
    +        ///  capture/compare mode register 2 (output mode)
    +        CCMR2_Output: mmio.Mmio(packed struct(u32) {
    +            ///  CC3S
    +            CC3S: u2,
    +            ///  OC3FE
    +            OC3FE: u1,
    +            ///  OC3PE
    +            OC3PE: u1,
    +            ///  OC3M
    +            OC3M: u3,
    +            ///  OC3CE
    +            OC3CE: u1,
    +            ///  CC4S
    +            CC4S: u2,
    +            ///  OC4FE
    +            OC4FE: u1,
    +            ///  OC4PE
    +            OC4PE: u1,
    +            ///  OC4M
    +            OC4M: u3,
    +            ///  O24CE
    +            O24CE: u1,
    +            padding: u16,
    +        }),
    +        ///  capture/compare enable register
    +        CCER: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 output enable
    +            CC1E: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1P: u1,
    +            reserved3: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1NP: u1,
    +            ///  Capture/Compare 2 output enable
    +            CC2E: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2P: u1,
    +            reserved7: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2NP: u1,
    +            ///  Capture/Compare 3 output enable
    +            CC3E: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC3P: u1,
    +            reserved11: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC3NP: u1,
    +            ///  Capture/Compare 4 output enable
    +            CC4E: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC4P: u1,
    +            reserved15: u1,
    +            ///  Capture/Compare 4 output Polarity
    +            CC4NP: u1,
    +            padding: u16,
    +        }),
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  Low counter value
    +            CNT_L: u16,
    +            ///  High counter value
    +            CNT_H: u16,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Low Auto-reload value
    +            ARR_L: u16,
    +            ///  High Auto-reload value
    +            ARR_H: u16,
    +        }),
    +        reserved52: [4]u8,
    +        ///  capture/compare register 1
    +        CCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare 1 value
    +            CCR1_L: u16,
    +            ///  High Capture/Compare 1 value
    +            CCR1_H: u16,
    +        }),
    +        ///  capture/compare register 2
    +        CCR2: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare 2 value
    +            CCR2_L: u16,
    +            ///  High Capture/Compare 2 value
    +            CCR2_H: u16,
    +        }),
    +        ///  capture/compare register 3
    +        CCR3: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare value
    +            CCR3_L: u16,
    +            ///  High Capture/Compare value
    +            CCR3_H: u16,
    +        }),
    +        ///  capture/compare register 4
    +        CCR4: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare value
    +            CCR4_L: u16,
    +            ///  High Capture/Compare value
    +            CCR4_H: u16,
    +        }),
    +        reserved72: [4]u8,
    +        ///  DMA control register
    +        DCR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA base address
    +            DBA: u5,
    +            reserved8: u3,
    +            ///  DMA burst length
    +            DBL: u5,
    +            padding: u19,
    +        }),
    +        ///  DMA address for full transfer
    +        DMAR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA register for burst accesses
    +            DMAB: u16,
    +            padding: u16,
    +        }),
    +        ///  TIM5 option register
    +        OR: mmio.Mmio(packed struct(u32) {
    +            reserved10: u10,
    +            ///  Timer Input 4 remap
    +            ITR1_RMP: u2,
    +            padding: u20,
    +        }),
    +    };
    +
    +    ///  General purpose timers
    +    pub const TIM3 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            ///  One-pulse mode
    +            OPM: u1,
    +            ///  Direction
    +            DIR: u1,
    +            ///  Center-aligned mode selection
    +            CMS: u2,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            ///  Clock division
    +            CKD: u2,
    +            padding: u22,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            reserved3: u3,
    +            ///  Capture/compare DMA selection
    +            CCDS: u1,
    +            ///  Master mode selection
    +            MMS: u3,
    +            ///  TI1 selection
    +            TI1S: u1,
    +            padding: u24,
    +        }),
    +        ///  slave mode control register
    +        SMCR: mmio.Mmio(packed struct(u32) {
    +            ///  Slave mode selection
    +            SMS: u3,
    +            reserved4: u1,
    +            ///  Trigger selection
    +            TS: u3,
    +            ///  Master/Slave mode
    +            MSM: u1,
    +            ///  External trigger filter
    +            ETF: u4,
    +            ///  External trigger prescaler
    +            ETPS: u2,
    +            ///  External clock enable
    +            ECE: u1,
    +            ///  External trigger polarity
    +            ETP: u1,
    +            padding: u16,
    +        }),
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            ///  Capture/Compare 1 interrupt enable
    +            CC1IE: u1,
    +            ///  Capture/Compare 2 interrupt enable
    +            CC2IE: u1,
    +            ///  Capture/Compare 3 interrupt enable
    +            CC3IE: u1,
    +            ///  Capture/Compare 4 interrupt enable
    +            CC4IE: u1,
    +            reserved6: u1,
    +            ///  Trigger interrupt enable
    +            TIE: u1,
    +            reserved8: u1,
    +            ///  Update DMA request enable
    +            UDE: u1,
    +            ///  Capture/Compare 1 DMA request enable
    +            CC1DE: u1,
    +            ///  Capture/Compare 2 DMA request enable
    +            CC2DE: u1,
    +            ///  Capture/Compare 3 DMA request enable
    +            CC3DE: u1,
    +            ///  Capture/Compare 4 DMA request enable
    +            CC4DE: u1,
    +            reserved14: u1,
    +            ///  Trigger DMA request enable
    +            TDE: u1,
    +            padding: u17,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            ///  Capture/compare 1 interrupt flag
    +            CC1IF: u1,
    +            ///  Capture/Compare 2 interrupt flag
    +            CC2IF: u1,
    +            ///  Capture/Compare 3 interrupt flag
    +            CC3IF: u1,
    +            ///  Capture/Compare 4 interrupt flag
    +            CC4IF: u1,
    +            reserved6: u1,
    +            ///  Trigger interrupt flag
    +            TIF: u1,
    +            reserved9: u2,
    +            ///  Capture/Compare 1 overcapture flag
    +            CC1OF: u1,
    +            ///  Capture/compare 2 overcapture flag
    +            CC2OF: u1,
    +            ///  Capture/Compare 3 overcapture flag
    +            CC3OF: u1,
    +            ///  Capture/Compare 4 overcapture flag
    +            CC4OF: u1,
    +            padding: u19,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            ///  Capture/compare 1 generation
    +            CC1G: u1,
    +            ///  Capture/compare 2 generation
    +            CC2G: u1,
    +            ///  Capture/compare 3 generation
    +            CC3G: u1,
    +            ///  Capture/compare 4 generation
    +            CC4G: u1,
    +            reserved6: u1,
    +            ///  Trigger generation
    +            TG: u1,
    +            padding: u25,
    +        }),
    +        ///  capture/compare mode register 1 (output mode)
    +        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    +            ///  CC1S
    +            CC1S: u2,
    +            ///  OC1FE
    +            OC1FE: u1,
    +            ///  OC1PE
    +            OC1PE: u1,
    +            ///  OC1M
    +            OC1M: u3,
    +            ///  OC1CE
    +            OC1CE: u1,
    +            ///  CC2S
    +            CC2S: u2,
    +            ///  OC2FE
    +            OC2FE: u1,
    +            ///  OC2PE
    +            OC2PE: u1,
    +            ///  OC2M
    +            OC2M: u3,
    +            ///  OC2CE
    +            OC2CE: u1,
    +            padding: u16,
    +        }),
    +        ///  capture/compare mode register 2 (output mode)
    +        CCMR2_Output: mmio.Mmio(packed struct(u32) {
    +            ///  CC3S
    +            CC3S: u2,
    +            ///  OC3FE
    +            OC3FE: u1,
    +            ///  OC3PE
    +            OC3PE: u1,
    +            ///  OC3M
    +            OC3M: u3,
    +            ///  OC3CE
    +            OC3CE: u1,
    +            ///  CC4S
    +            CC4S: u2,
    +            ///  OC4FE
    +            OC4FE: u1,
    +            ///  OC4PE
    +            OC4PE: u1,
    +            ///  OC4M
    +            OC4M: u3,
    +            ///  O24CE
    +            O24CE: u1,
    +            padding: u16,
    +        }),
    +        ///  capture/compare enable register
    +        CCER: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 output enable
    +            CC1E: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1P: u1,
    +            reserved3: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1NP: u1,
    +            ///  Capture/Compare 2 output enable
    +            CC2E: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2P: u1,
    +            reserved7: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2NP: u1,
    +            ///  Capture/Compare 3 output enable
    +            CC3E: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC3P: u1,
    +            reserved11: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC3NP: u1,
    +            ///  Capture/Compare 4 output enable
    +            CC4E: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC4P: u1,
    +            reserved15: u1,
    +            ///  Capture/Compare 4 output Polarity
    +            CC4NP: u1,
    +            padding: u16,
    +        }),
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  Low counter value
    +            CNT_L: u16,
    +            ///  High counter value
    +            CNT_H: u16,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Low Auto-reload value
    +            ARR_L: u16,
    +            ///  High Auto-reload value
    +            ARR_H: u16,
    +        }),
    +        reserved52: [4]u8,
    +        ///  capture/compare register 1
    +        CCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare 1 value
    +            CCR1_L: u16,
    +            ///  High Capture/Compare 1 value
    +            CCR1_H: u16,
    +        }),
    +        ///  capture/compare register 2
    +        CCR2: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare 2 value
    +            CCR2_L: u16,
    +            ///  High Capture/Compare 2 value
    +            CCR2_H: u16,
    +        }),
    +        ///  capture/compare register 3
    +        CCR3: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare value
    +            CCR3_L: u16,
    +            ///  High Capture/Compare value
    +            CCR3_H: u16,
    +        }),
    +        ///  capture/compare register 4
    +        CCR4: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare value
    +            CCR4_L: u16,
    +            ///  High Capture/Compare value
    +            CCR4_H: u16,
    +        }),
    +        reserved72: [4]u8,
    +        ///  DMA control register
    +        DCR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA base address
    +            DBA: u5,
    +            reserved8: u3,
    +            ///  DMA burst length
    +            DBL: u5,
    +            padding: u19,
    +        }),
    +        ///  DMA address for full transfer
    +        DMAR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA register for burst accesses
    +            DMAB: u16,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  USB on the go full speed
    +    pub const OTG_FS_GLOBAL = extern struct {
    +        ///  OTG_FS control and status register (OTG_FS_GOTGCTL)
    +        FS_GOTGCTL: mmio.Mmio(packed struct(u32) {
    +            ///  Session request success
    +            SRQSCS: u1,
    +            ///  Session request
    +            SRQ: u1,
    +            reserved8: u6,
    +            ///  Host negotiation success
    +            HNGSCS: u1,
    +            ///  HNP request
    +            HNPRQ: u1,
    +            ///  Host set HNP enable
    +            HSHNPEN: u1,
    +            ///  Device HNP enabled
    +            DHNPEN: u1,
    +            reserved16: u4,
    +            ///  Connector ID status
    +            CIDSTS: u1,
    +            ///  Long/short debounce time
    +            DBCT: u1,
    +            ///  A-session valid
    +            ASVLD: u1,
    +            ///  B-session valid
    +            BSVLD: u1,
    +            padding: u12,
    +        }),
    +        ///  OTG_FS interrupt register (OTG_FS_GOTGINT)
    +        FS_GOTGINT: mmio.Mmio(packed struct(u32) {
    +            reserved2: u2,
    +            ///  Session end detected
    +            SEDET: u1,
    +            reserved8: u5,
    +            ///  Session request success status change
    +            SRSSCHG: u1,
    +            ///  Host negotiation success status change
    +            HNSSCHG: u1,
    +            reserved17: u7,
    +            ///  Host negotiation detected
    +            HNGDET: u1,
    +            ///  A-device timeout change
    +            ADTOCHG: u1,
    +            ///  Debounce done
    +            DBCDNE: u1,
    +            padding: u12,
    +        }),
    +        ///  OTG_FS AHB configuration register (OTG_FS_GAHBCFG)
    +        FS_GAHBCFG: mmio.Mmio(packed struct(u32) {
    +            ///  Global interrupt mask
    +            GINT: u1,
    +            reserved7: u6,
    +            ///  TxFIFO empty level
    +            TXFELVL: u1,
    +            ///  Periodic TxFIFO empty level
    +            PTXFELVL: u1,
    +            padding: u23,
    +        }),
    +        ///  OTG_FS USB configuration register (OTG_FS_GUSBCFG)
    +        FS_GUSBCFG: mmio.Mmio(packed struct(u32) {
    +            ///  FS timeout calibration
    +            TOCAL: u3,
    +            reserved6: u3,
    +            ///  Full Speed serial transceiver select
    +            PHYSEL: u1,
    +            reserved8: u1,
    +            ///  SRP-capable
    +            SRPCAP: u1,
    +            ///  HNP-capable
    +            HNPCAP: u1,
    +            ///  USB turnaround time
    +            TRDT: u4,
    +            reserved29: u15,
    +            ///  Force host mode
    +            FHMOD: u1,
    +            ///  Force device mode
    +            FDMOD: u1,
    +            ///  Corrupt Tx packet
    +            CTXPKT: u1,
    +        }),
    +        ///  OTG_FS reset register (OTG_FS_GRSTCTL)
    +        FS_GRSTCTL: mmio.Mmio(packed struct(u32) {
    +            ///  Core soft reset
    +            CSRST: u1,
    +            ///  HCLK soft reset
    +            HSRST: u1,
    +            ///  Host frame counter reset
    +            FCRST: u1,
    +            reserved4: u1,
    +            ///  RxFIFO flush
    +            RXFFLSH: u1,
    +            ///  TxFIFO flush
    +            TXFFLSH: u1,
    +            ///  TxFIFO number
    +            TXFNUM: u5,
    +            reserved31: u20,
    +            ///  AHB master idle
    +            AHBIDL: u1,
    +        }),
    +        ///  OTG_FS core interrupt register (OTG_FS_GINTSTS)
    +        FS_GINTSTS: mmio.Mmio(packed struct(u32) {
    +            ///  Current mode of operation
    +            CMOD: u1,
    +            ///  Mode mismatch interrupt
    +            MMIS: u1,
    +            ///  OTG interrupt
    +            OTGINT: u1,
    +            ///  Start of frame
    +            SOF: u1,
    +            ///  RxFIFO non-empty
    +            RXFLVL: u1,
    +            ///  Non-periodic TxFIFO empty
    +            NPTXFE: u1,
    +            ///  Global IN non-periodic NAK effective
    +            GINAKEFF: u1,
    +            ///  Global OUT NAK effective
    +            GOUTNAKEFF: u1,
    +            reserved10: u2,
    +            ///  Early suspend
    +            ESUSP: u1,
    +            ///  USB suspend
    +            USBSUSP: u1,
    +            ///  USB reset
    +            USBRST: u1,
    +            ///  Enumeration done
    +            ENUMDNE: u1,
    +            ///  Isochronous OUT packet dropped interrupt
    +            ISOODRP: u1,
    +            ///  End of periodic frame interrupt
    +            EOPF: u1,
    +            reserved18: u2,
    +            ///  IN endpoint interrupt
    +            IEPINT: u1,
    +            ///  OUT endpoint interrupt
    +            OEPINT: u1,
    +            ///  Incomplete isochronous IN transfer
    +            IISOIXFR: u1,
    +            ///  Incomplete periodic transfer(Host mode)/Incomplete isochronous OUT transfer(Device mode)
    +            IPXFR_INCOMPISOOUT: u1,
    +            reserved24: u2,
    +            ///  Host port interrupt
    +            HPRTINT: u1,
    +            ///  Host channels interrupt
    +            HCINT: u1,
    +            ///  Periodic TxFIFO empty
    +            PTXFE: u1,
    +            reserved28: u1,
    +            ///  Connector ID status change
    +            CIDSCHG: u1,
    +            ///  Disconnect detected interrupt
    +            DISCINT: u1,
    +            ///  Session request/new session detected interrupt
    +            SRQINT: u1,
    +            ///  Resume/remote wakeup detected interrupt
    +            WKUPINT: u1,
    +        }),
    +        ///  OTG_FS interrupt mask register (OTG_FS_GINTMSK)
    +        FS_GINTMSK: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  Mode mismatch interrupt mask
    +            MMISM: u1,
    +            ///  OTG interrupt mask
    +            OTGINT: u1,
    +            ///  Start of frame mask
    +            SOFM: u1,
    +            ///  Receive FIFO non-empty mask
    +            RXFLVLM: u1,
    +            ///  Non-periodic TxFIFO empty mask
    +            NPTXFEM: u1,
    +            ///  Global non-periodic IN NAK effective mask
    +            GINAKEFFM: u1,
    +            ///  Global OUT NAK effective mask
    +            GONAKEFFM: u1,
    +            reserved10: u2,
    +            ///  Early suspend mask
    +            ESUSPM: u1,
    +            ///  USB suspend mask
    +            USBSUSPM: u1,
    +            ///  USB reset mask
    +            USBRST: u1,
    +            ///  Enumeration done mask
    +            ENUMDNEM: u1,
    +            ///  Isochronous OUT packet dropped interrupt mask
    +            ISOODRPM: u1,
    +            ///  End of periodic frame interrupt mask
    +            EOPFM: u1,
    +            reserved17: u1,
    +            ///  Endpoint mismatch interrupt mask
    +            EPMISM: u1,
    +            ///  IN endpoints interrupt mask
    +            IEPINT: u1,
    +            ///  OUT endpoints interrupt mask
    +            OEPINT: u1,
    +            ///  Incomplete isochronous IN transfer mask
    +            IISOIXFRM: u1,
    +            ///  Incomplete periodic transfer mask(Host mode)/Incomplete isochronous OUT transfer mask(Device mode)
    +            IPXFRM_IISOOXFRM: u1,
    +            reserved24: u2,
    +            ///  Host port interrupt mask
    +            PRTIM: u1,
    +            ///  Host channels interrupt mask
    +            HCIM: u1,
    +            ///  Periodic TxFIFO empty mask
    +            PTXFEM: u1,
    +            reserved28: u1,
    +            ///  Connector ID status change mask
    +            CIDSCHGM: u1,
    +            ///  Disconnect detected interrupt mask
    +            DISCINT: u1,
    +            ///  Session request/new session detected interrupt mask
    +            SRQIM: u1,
    +            ///  Resume/remote wakeup detected interrupt mask
    +            WUIM: u1,
    +        }),
    +        ///  OTG_FS Receive status debug read(Device mode)
    +        FS_GRXSTSR_Device: mmio.Mmio(packed struct(u32) {
    +            ///  Endpoint number
    +            EPNUM: u4,
    +            ///  Byte count
    +            BCNT: u11,
    +            ///  Data PID
    +            DPID: u2,
    +            ///  Packet status
    +            PKTSTS: u4,
    +            ///  Frame number
    +            FRMNUM: u4,
    +            padding: u7,
    +        }),
    +        reserved36: [4]u8,
    +        ///  OTG_FS Receive FIFO size register (OTG_FS_GRXFSIZ)
    +        FS_GRXFSIZ: mmio.Mmio(packed struct(u32) {
    +            ///  RxFIFO depth
    +            RXFD: u16,
    +            padding: u16,
    +        }),
    +        ///  OTG_FS non-periodic transmit FIFO size register (Device mode)
    +        FS_GNPTXFSIZ_Device: mmio.Mmio(packed struct(u32) {
    +            ///  Endpoint 0 transmit RAM start address
    +            TX0FSA: u16,
    +            ///  Endpoint 0 TxFIFO depth
    +            TX0FD: u16,
    +        }),
    +        ///  OTG_FS non-periodic transmit FIFO/queue status register (OTG_FS_GNPTXSTS)
    +        FS_GNPTXSTS: mmio.Mmio(packed struct(u32) {
    +            ///  Non-periodic TxFIFO space available
    +            NPTXFSAV: u16,
    +            ///  Non-periodic transmit request queue space available
    +            NPTQXSAV: u8,
    +            ///  Top of the non-periodic transmit request queue
    +            NPTXQTOP: u7,
    +            padding: u1,
    +        }),
    +        reserved56: [8]u8,
    +        ///  OTG_FS general core configuration register (OTG_FS_GCCFG)
    +        FS_GCCFG: mmio.Mmio(packed struct(u32) {
    +            reserved16: u16,
    +            ///  Power down
    +            PWRDWN: u1,
    +            reserved18: u1,
    +            ///  Enable the VBUS sensing device
    +            VBUSASEN: u1,
    +            ///  Enable the VBUS sensing device
    +            VBUSBSEN: u1,
    +            ///  SOF output enable
    +            SOFOUTEN: u1,
    +            padding: u11,
    +        }),
    +        ///  core ID register
    +        FS_CID: mmio.Mmio(packed struct(u32) {
    +            ///  Product ID field
    +            PRODUCT_ID: u32,
    +        }),
    +        reserved256: [192]u8,
    +        ///  OTG_FS Host periodic transmit FIFO size register (OTG_FS_HPTXFSIZ)
    +        FS_HPTXFSIZ: mmio.Mmio(packed struct(u32) {
    +            ///  Host periodic TxFIFO start address
    +            PTXSA: u16,
    +            ///  Host periodic TxFIFO depth
    +            PTXFSIZ: u16,
    +        }),
    +        ///  OTG_FS device IN endpoint transmit FIFO size register (OTG_FS_DIEPTXF2)
    +        FS_DIEPTXF1: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint FIFO2 transmit RAM start address
    +            INEPTXSA: u16,
    +            ///  IN endpoint TxFIFO depth
    +            INEPTXFD: u16,
    +        }),
    +        ///  OTG_FS device IN endpoint transmit FIFO size register (OTG_FS_DIEPTXF3)
    +        FS_DIEPTXF2: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint FIFO3 transmit RAM start address
    +            INEPTXSA: u16,
    +            ///  IN endpoint TxFIFO depth
    +            INEPTXFD: u16,
    +        }),
    +        ///  OTG_FS device IN endpoint transmit FIFO size register (OTG_FS_DIEPTXF4)
    +        FS_DIEPTXF3: mmio.Mmio(packed struct(u32) {
    +            ///  IN endpoint FIFO4 transmit RAM start address
    +            INEPTXSA: u16,
    +            ///  IN endpoint TxFIFO depth
    +            INEPTXFD: u16,
    +        }),
    +    };
    +
    +    ///  General-purpose-timers
    +    pub const TIM5 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            ///  One-pulse mode
    +            OPM: u1,
    +            ///  Direction
    +            DIR: u1,
    +            ///  Center-aligned mode selection
    +            CMS: u2,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            ///  Clock division
    +            CKD: u2,
    +            padding: u22,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            reserved3: u3,
    +            ///  Capture/compare DMA selection
    +            CCDS: u1,
    +            ///  Master mode selection
    +            MMS: u3,
    +            ///  TI1 selection
    +            TI1S: u1,
    +            padding: u24,
    +        }),
    +        ///  slave mode control register
    +        SMCR: mmio.Mmio(packed struct(u32) {
    +            ///  Slave mode selection
    +            SMS: u3,
    +            reserved4: u1,
    +            ///  Trigger selection
    +            TS: u3,
    +            ///  Master/Slave mode
    +            MSM: u1,
    +            ///  External trigger filter
    +            ETF: u4,
    +            ///  External trigger prescaler
    +            ETPS: u2,
    +            ///  External clock enable
    +            ECE: u1,
    +            ///  External trigger polarity
    +            ETP: u1,
    +            padding: u16,
    +        }),
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            ///  Capture/Compare 1 interrupt enable
    +            CC1IE: u1,
    +            ///  Capture/Compare 2 interrupt enable
    +            CC2IE: u1,
    +            ///  Capture/Compare 3 interrupt enable
    +            CC3IE: u1,
    +            ///  Capture/Compare 4 interrupt enable
    +            CC4IE: u1,
    +            reserved6: u1,
    +            ///  Trigger interrupt enable
    +            TIE: u1,
    +            reserved8: u1,
    +            ///  Update DMA request enable
    +            UDE: u1,
    +            ///  Capture/Compare 1 DMA request enable
    +            CC1DE: u1,
    +            ///  Capture/Compare 2 DMA request enable
    +            CC2DE: u1,
    +            ///  Capture/Compare 3 DMA request enable
    +            CC3DE: u1,
    +            ///  Capture/Compare 4 DMA request enable
    +            CC4DE: u1,
    +            reserved14: u1,
    +            ///  Trigger DMA request enable
    +            TDE: u1,
    +            padding: u17,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            ///  Capture/compare 1 interrupt flag
    +            CC1IF: u1,
    +            ///  Capture/Compare 2 interrupt flag
    +            CC2IF: u1,
    +            ///  Capture/Compare 3 interrupt flag
    +            CC3IF: u1,
    +            ///  Capture/Compare 4 interrupt flag
    +            CC4IF: u1,
    +            reserved6: u1,
    +            ///  Trigger interrupt flag
    +            TIF: u1,
    +            reserved9: u2,
    +            ///  Capture/Compare 1 overcapture flag
    +            CC1OF: u1,
    +            ///  Capture/compare 2 overcapture flag
    +            CC2OF: u1,
    +            ///  Capture/Compare 3 overcapture flag
    +            CC3OF: u1,
    +            ///  Capture/Compare 4 overcapture flag
    +            CC4OF: u1,
    +            padding: u19,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            ///  Capture/compare 1 generation
    +            CC1G: u1,
    +            ///  Capture/compare 2 generation
    +            CC2G: u1,
    +            ///  Capture/compare 3 generation
    +            CC3G: u1,
    +            ///  Capture/compare 4 generation
    +            CC4G: u1,
    +            reserved6: u1,
    +            ///  Trigger generation
    +            TG: u1,
    +            padding: u25,
    +        }),
    +        ///  capture/compare mode register 1 (output mode)
    +        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    +            ///  CC1S
    +            CC1S: u2,
    +            ///  OC1FE
    +            OC1FE: u1,
    +            ///  OC1PE
    +            OC1PE: u1,
    +            ///  OC1M
    +            OC1M: u3,
    +            ///  OC1CE
    +            OC1CE: u1,
    +            ///  CC2S
    +            CC2S: u2,
    +            ///  OC2FE
    +            OC2FE: u1,
    +            ///  OC2PE
    +            OC2PE: u1,
    +            ///  OC2M
    +            OC2M: u3,
    +            ///  OC2CE
    +            OC2CE: u1,
    +            padding: u16,
    +        }),
    +        ///  capture/compare mode register 2 (output mode)
    +        CCMR2_Output: mmio.Mmio(packed struct(u32) {
    +            ///  CC3S
    +            CC3S: u2,
    +            ///  OC3FE
    +            OC3FE: u1,
    +            ///  OC3PE
    +            OC3PE: u1,
    +            ///  OC3M
    +            OC3M: u3,
    +            ///  OC3CE
    +            OC3CE: u1,
    +            ///  CC4S
    +            CC4S: u2,
    +            ///  OC4FE
    +            OC4FE: u1,
    +            ///  OC4PE
    +            OC4PE: u1,
    +            ///  OC4M
    +            OC4M: u3,
    +            ///  O24CE
    +            O24CE: u1,
    +            padding: u16,
    +        }),
    +        ///  capture/compare enable register
    +        CCER: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 output enable
    +            CC1E: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1P: u1,
    +            reserved3: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1NP: u1,
    +            ///  Capture/Compare 2 output enable
    +            CC2E: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2P: u1,
    +            reserved7: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2NP: u1,
    +            ///  Capture/Compare 3 output enable
    +            CC3E: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC3P: u1,
    +            reserved11: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC3NP: u1,
    +            ///  Capture/Compare 4 output enable
    +            CC4E: u1,
    +            ///  Capture/Compare 3 output Polarity
    +            CC4P: u1,
    +            reserved15: u1,
    +            ///  Capture/Compare 4 output Polarity
    +            CC4NP: u1,
    +            padding: u16,
    +        }),
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  Low counter value
    +            CNT_L: u16,
    +            ///  High counter value
    +            CNT_H: u16,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Low Auto-reload value
    +            ARR_L: u16,
    +            ///  High Auto-reload value
    +            ARR_H: u16,
    +        }),
    +        reserved52: [4]u8,
    +        ///  capture/compare register 1
    +        CCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare 1 value
    +            CCR1_L: u16,
    +            ///  High Capture/Compare 1 value
    +            CCR1_H: u16,
    +        }),
    +        ///  capture/compare register 2
    +        CCR2: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare 2 value
    +            CCR2_L: u16,
    +            ///  High Capture/Compare 2 value
    +            CCR2_H: u16,
    +        }),
    +        ///  capture/compare register 3
    +        CCR3: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare value
    +            CCR3_L: u16,
    +            ///  High Capture/Compare value
    +            CCR3_H: u16,
    +        }),
    +        ///  capture/compare register 4
    +        CCR4: mmio.Mmio(packed struct(u32) {
    +            ///  Low Capture/Compare value
    +            CCR4_L: u16,
    +            ///  High Capture/Compare value
    +            CCR4_H: u16,
    +        }),
    +        reserved72: [4]u8,
    +        ///  DMA control register
    +        DCR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA base address
    +            DBA: u5,
    +            reserved8: u3,
    +            ///  DMA burst length
    +            DBL: u5,
    +            padding: u19,
    +        }),
    +        ///  DMA address for full transfer
    +        DMAR: mmio.Mmio(packed struct(u32) {
    +            ///  DMA register for burst accesses
    +            DMAB: u16,
    +            padding: u16,
    +        }),
    +        ///  TIM5 option register
    +        OR: mmio.Mmio(packed struct(u32) {
    +            reserved6: u6,
    +            ///  Timer Input 4 remap
    +            IT4_RMP: u2,
    +            padding: u24,
    +        }),
    +    };
    +
    +    ///  General purpose timers
    +    pub const TIM9 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            ///  One-pulse mode
    +            OPM: u1,
    +            reserved7: u3,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            ///  Clock division
    +            CKD: u2,
    +            padding: u22,
    +        }),
    +        ///  control register 2
    +        CR2: mmio.Mmio(packed struct(u32) {
    +            reserved4: u4,
    +            ///  Master mode selection
    +            MMS: u3,
    +            padding: u25,
    +        }),
    +        ///  slave mode control register
    +        SMCR: mmio.Mmio(packed struct(u32) {
    +            ///  Slave mode selection
    +            SMS: u3,
    +            reserved4: u1,
    +            ///  Trigger selection
    +            TS: u3,
    +            ///  Master/Slave mode
    +            MSM: u1,
    +            padding: u24,
    +        }),
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            ///  Capture/Compare 1 interrupt enable
    +            CC1IE: u1,
    +            ///  Capture/Compare 2 interrupt enable
    +            CC2IE: u1,
    +            reserved6: u3,
    +            ///  Trigger interrupt enable
    +            TIE: u1,
    +            padding: u25,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            ///  Capture/compare 1 interrupt flag
    +            CC1IF: u1,
    +            ///  Capture/Compare 2 interrupt flag
    +            CC2IF: u1,
    +            reserved6: u3,
    +            ///  Trigger interrupt flag
    +            TIF: u1,
    +            reserved9: u2,
    +            ///  Capture/Compare 1 overcapture flag
    +            CC1OF: u1,
    +            ///  Capture/compare 2 overcapture flag
    +            CC2OF: u1,
    +            padding: u21,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            ///  Capture/compare 1 generation
    +            CC1G: u1,
    +            ///  Capture/compare 2 generation
    +            CC2G: u1,
    +            reserved6: u3,
    +            ///  Trigger generation
    +            TG: u1,
    +            padding: u25,
    +        }),
    +        ///  capture/compare mode register 1 (output mode)
    +        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 selection
    +            CC1S: u2,
    +            ///  Output Compare 1 fast enable
    +            OC1FE: u1,
    +            ///  Output Compare 1 preload enable
    +            OC1PE: u1,
    +            ///  Output Compare 1 mode
    +            OC1M: u3,
    +            reserved8: u1,
    +            ///  Capture/Compare 2 selection
    +            CC2S: u2,
    +            ///  Output Compare 2 fast enable
    +            OC2FE: u1,
    +            ///  Output Compare 2 preload enable
    +            OC2PE: u1,
    +            ///  Output Compare 2 mode
    +            OC2M: u3,
    +            padding: u17,
    +        }),
    +        reserved32: [4]u8,
    +        ///  capture/compare enable register
    +        CCER: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 output enable
    +            CC1E: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1P: u1,
    +            reserved3: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1NP: u1,
    +            ///  Capture/Compare 2 output enable
    +            CC2E: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2P: u1,
    +            reserved7: u1,
    +            ///  Capture/Compare 2 output Polarity
    +            CC2NP: u1,
    +            padding: u24,
    +        }),
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  counter value
    +            CNT: u16,
    +            padding: u16,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Auto-reload value
    +            ARR: u16,
    +            padding: u16,
    +        }),
    +        reserved52: [4]u8,
    +        ///  capture/compare register 1
    +        CCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 value
    +            CCR1: u16,
    +            padding: u16,
    +        }),
    +        ///  capture/compare register 2
    +        CCR2: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 2 value
    +            CCR2: u16,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  Cryptographic processor
    +    pub const CRC = extern struct {
    +        ///  Data register
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  Data Register
    +            DR: u32,
    +        }),
    +        ///  Independent Data register
    +        IDR: mmio.Mmio(packed struct(u32) {
    +            ///  Independent Data register
    +            IDR: u8,
    +            padding: u24,
    +        }),
    +        ///  Control register
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  Control regidter
    +            CR: u1,
    +            padding: u31,
    +        }),
    +    };
    +
    +    ///  General-purpose-timers
    +    pub const TIM10 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            reserved7: u4,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            ///  Clock division
    +            CKD: u2,
    +            padding: u22,
    +        }),
    +        reserved12: [8]u8,
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            ///  Capture/Compare 1 interrupt enable
    +            CC1IE: u1,
    +            padding: u30,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            ///  Capture/compare 1 interrupt flag
    +            CC1IF: u1,
    +            reserved9: u7,
    +            ///  Capture/Compare 1 overcapture flag
    +            CC1OF: u1,
    +            padding: u22,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            ///  Capture/compare 1 generation
    +            CC1G: u1,
    +            padding: u30,
    +        }),
    +        ///  capture/compare mode register 1 (output mode)
    +        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 selection
    +            CC1S: u2,
    +            ///  Output Compare 1 fast enable
    +            OC1FE: u1,
    +            ///  Output Compare 1 preload enable
    +            OC1PE: u1,
    +            ///  Output Compare 1 mode
    +            OC1M: u3,
    +            padding: u25,
    +        }),
    +        reserved32: [4]u8,
    +        ///  capture/compare enable register
    +        CCER: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 output enable
    +            CC1E: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1P: u1,
    +            reserved3: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1NP: u1,
    +            padding: u28,
    +        }),
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  counter value
    +            CNT: u16,
    +            padding: u16,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Auto-reload value
    +            ARR: u16,
    +            padding: u16,
    +        }),
    +        reserved52: [4]u8,
    +        ///  capture/compare register 1
    +        CCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 value
    +            CCR1: u16,
    +            padding: u16,
    +        }),
    +    };
    +
    +    ///  Ethernet: DMA controller operation
    +    pub const Ethernet_DMA = extern struct {
    +        ///  Ethernet DMA bus mode register
    +        DMABMR: mmio.Mmio(packed struct(u32) {
    +            ///  SR
    +            SR: u1,
    +            ///  DA
    +            DA: u1,
    +            ///  DSL
    +            DSL: u5,
    +            ///  EDFE
    +            EDFE: u1,
    +            ///  PBL
    +            PBL: u6,
    +            ///  RTPR
    +            RTPR: u2,
    +            ///  FB
    +            FB: u1,
    +            ///  RDP
    +            RDP: u6,
    +            ///  USP
    +            USP: u1,
    +            ///  FPM
    +            FPM: u1,
    +            ///  AAB
    +            AAB: u1,
    +            ///  MB
    +            MB: u1,
    +            padding: u5,
    +        }),
    +        ///  Ethernet DMA transmit poll demand register
    +        DMATPDR: mmio.Mmio(packed struct(u32) {
    +            ///  TPD
    +            TPD: u32,
    +        }),
    +        ///  EHERNET DMA receive poll demand register
    +        DMARPDR: mmio.Mmio(packed struct(u32) {
    +            ///  RPD
    +            RPD: u32,
    +        }),
    +        ///  Ethernet DMA receive descriptor list address register
    +        DMARDLAR: mmio.Mmio(packed struct(u32) {
    +            ///  SRL
    +            SRL: u32,
    +        }),
    +        ///  Ethernet DMA transmit descriptor list address register
    +        DMATDLAR: mmio.Mmio(packed struct(u32) {
    +            ///  STL
    +            STL: u32,
    +        }),
    +        ///  Ethernet DMA status register
    +        DMASR: mmio.Mmio(packed struct(u32) {
    +            ///  TS
    +            TS: u1,
    +            ///  TPSS
    +            TPSS: u1,
    +            ///  TBUS
    +            TBUS: u1,
    +            ///  TJTS
    +            TJTS: u1,
    +            ///  ROS
    +            ROS: u1,
    +            ///  TUS
    +            TUS: u1,
    +            ///  RS
    +            RS: u1,
    +            ///  RBUS
    +            RBUS: u1,
    +            ///  RPSS
    +            RPSS: u1,
    +            ///  PWTS
    +            PWTS: u1,
    +            ///  ETS
    +            ETS: u1,
    +            reserved13: u2,
    +            ///  FBES
    +            FBES: u1,
    +            ///  ERS
    +            ERS: u1,
    +            ///  AIS
    +            AIS: u1,
    +            ///  NIS
    +            NIS: u1,
    +            ///  RPS
    +            RPS: u3,
    +            ///  TPS
    +            TPS: u3,
    +            ///  EBS
    +            EBS: u3,
    +            reserved27: u1,
    +            ///  MMCS
    +            MMCS: u1,
    +            ///  PMTS
    +            PMTS: u1,
    +            ///  TSTS
    +            TSTS: u1,
    +            padding: u2,
    +        }),
    +        ///  Ethernet DMA operation mode register
    +        DMAOMR: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  SR
    +            SR: u1,
    +            ///  OSF
    +            OSF: u1,
    +            ///  RTC
    +            RTC: u2,
    +            reserved6: u1,
    +            ///  FUGF
    +            FUGF: u1,
    +            ///  FEF
    +            FEF: u1,
    +            reserved13: u5,
    +            ///  ST
    +            ST: u1,
    +            ///  TTC
    +            TTC: u3,
    +            reserved20: u3,
    +            ///  FTF
    +            FTF: u1,
    +            ///  TSF
    +            TSF: u1,
    +            reserved24: u2,
    +            ///  DFRF
    +            DFRF: u1,
    +            ///  RSF
    +            RSF: u1,
    +            ///  DTCEFD
    +            DTCEFD: u1,
    +            padding: u5,
    +        }),
    +        ///  Ethernet DMA interrupt enable register
    +        DMAIER: mmio.Mmio(packed struct(u32) {
    +            ///  TIE
    +            TIE: u1,
    +            ///  TPSIE
    +            TPSIE: u1,
    +            ///  TBUIE
    +            TBUIE: u1,
    +            ///  TJTIE
    +            TJTIE: u1,
    +            ///  ROIE
    +            ROIE: u1,
    +            ///  TUIE
    +            TUIE: u1,
    +            ///  RIE
    +            RIE: u1,
    +            ///  RBUIE
    +            RBUIE: u1,
    +            ///  RPSIE
    +            RPSIE: u1,
    +            ///  RWTIE
    +            RWTIE: u1,
    +            ///  ETIE
    +            ETIE: u1,
    +            reserved13: u2,
    +            ///  FBEIE
    +            FBEIE: u1,
    +            ///  ERIE
    +            ERIE: u1,
    +            ///  AISE
    +            AISE: u1,
    +            ///  NISE
    +            NISE: u1,
    +            padding: u15,
    +        }),
    +        ///  Ethernet DMA missed frame and buffer overflow counter register
    +        DMAMFBOCR: mmio.Mmio(packed struct(u32) {
    +            ///  MFC
    +            MFC: u16,
    +            ///  OMFC
    +            OMFC: u1,
    +            ///  MFA
    +            MFA: u11,
    +            ///  OFOC
    +            OFOC: u1,
    +            padding: u3,
    +        }),
    +        ///  Ethernet DMA receive status watchdog timer register
    +        DMARSWTR: mmio.Mmio(packed struct(u32) {
    +            ///  RSWTC
    +            RSWTC: u8,
    +            padding: u24,
    +        }),
    +        reserved72: [32]u8,
    +        ///  Ethernet DMA current host transmit descriptor register
    +        DMACHTDR: mmio.Mmio(packed struct(u32) {
    +            ///  HTDAP
    +            HTDAP: u32,
    +        }),
    +        ///  Ethernet DMA current host receive descriptor register
    +        DMACHRDR: mmio.Mmio(packed struct(u32) {
    +            ///  HRDAP
    +            HRDAP: u32,
    +        }),
    +        ///  Ethernet DMA current host transmit buffer address register
    +        DMACHTBAR: mmio.Mmio(packed struct(u32) {
    +            ///  HTBAP
    +            HTBAP: u32,
    +        }),
    +        ///  Ethernet DMA current host receive buffer address register
    +        DMACHRBAR: mmio.Mmio(packed struct(u32) {
    +            ///  HRBAP
    +            HRBAP: u32,
    +        }),
    +    };
    +
    +    ///  Ethernet: Precision time protocol
    +    pub const Ethernet_PTP = extern struct {
    +        ///  Ethernet PTP time stamp control register
    +        PTPTSCR: mmio.Mmio(packed struct(u32) {
    +            ///  TSE
    +            TSE: u1,
    +            ///  TSFCU
    +            TSFCU: u1,
    +            ///  TSSTI
    +            TSSTI: u1,
    +            ///  TSSTU
    +            TSSTU: u1,
    +            ///  TSITE
    +            TSITE: u1,
    +            ///  TTSARU
    +            TTSARU: u1,
    +            reserved8: u2,
    +            ///  TSSARFE
    +            TSSARFE: u1,
    +            ///  TSSSR
    +            TSSSR: u1,
    +            ///  TSPTPPSV2E
    +            TSPTPPSV2E: u1,
    +            ///  TSSPTPOEFE
    +            TSSPTPOEFE: u1,
    +            ///  TSSIPV6FE
    +            TSSIPV6FE: u1,
    +            ///  TSSIPV4FE
    +            TSSIPV4FE: u1,
    +            ///  TSSEME
    +            TSSEME: u1,
    +            ///  TSSMRME
    +            TSSMRME: u1,
    +            ///  TSCNT
    +            TSCNT: u2,
    +            ///  TSPFFMAE
    +            TSPFFMAE: u1,
    +            padding: u13,
    +        }),
    +        ///  Ethernet PTP subsecond increment register
    +        PTPSSIR: mmio.Mmio(packed struct(u32) {
    +            ///  STSSI
    +            STSSI: u8,
    +            padding: u24,
    +        }),
    +        ///  Ethernet PTP time stamp high register
    +        PTPTSHR: mmio.Mmio(packed struct(u32) {
    +            ///  STS
    +            STS: u32,
    +        }),
    +        ///  Ethernet PTP time stamp low register
    +        PTPTSLR: mmio.Mmio(packed struct(u32) {
    +            ///  STSS
    +            STSS: u31,
    +            ///  STPNS
    +            STPNS: u1,
    +        }),
    +        ///  Ethernet PTP time stamp high update register
    +        PTPTSHUR: mmio.Mmio(packed struct(u32) {
    +            ///  TSUS
    +            TSUS: u32,
    +        }),
    +        ///  Ethernet PTP time stamp low update register
    +        PTPTSLUR: mmio.Mmio(packed struct(u32) {
    +            ///  TSUSS
    +            TSUSS: u31,
    +            ///  TSUSS
    +            TSUPNS: u1,
    +        }),
    +        ///  Ethernet PTP time stamp addend register
    +        PTPTSAR: mmio.Mmio(packed struct(u32) {
    +            ///  TSA
    +            TSA: u32,
    +        }),
    +        ///  Ethernet PTP target time high register
    +        PTPTTHR: mmio.Mmio(packed struct(u32) {
    +            ///  0
    +            TTSH: u32,
    +        }),
    +        ///  Ethernet PTP target time low register
    +        PTPTTLR: mmio.Mmio(packed struct(u32) {
    +            ///  TTSL
    +            TTSL: u32,
    +        }),
    +        reserved40: [4]u8,
    +        ///  Ethernet PTP time stamp status register
    +        PTPTSSR: mmio.Mmio(packed struct(u32) {
    +            ///  TSSO
    +            TSSO: u1,
    +            ///  TSTTR
    +            TSTTR: u1,
    +            padding: u30,
    +        }),
    +        ///  Ethernet PTP PPS control register
    +        PTPPPSCR: mmio.Mmio(packed struct(u32) {
    +            ///  TSSO
    +            TSSO: u1,
    +            ///  TSTTR
    +            TSTTR: u1,
    +            padding: u30,
    +        }),
    +    };
    +
    +    ///  General-purpose-timers
    +    pub const TIM11 = extern struct {
    +        ///  control register 1
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Counter enable
    +            CEN: u1,
    +            ///  Update disable
    +            UDIS: u1,
    +            ///  Update request source
    +            URS: u1,
    +            reserved7: u4,
    +            ///  Auto-reload preload enable
    +            ARPE: u1,
    +            ///  Clock division
    +            CKD: u2,
    +            padding: u22,
    +        }),
    +        reserved12: [8]u8,
    +        ///  DMA/Interrupt enable register
    +        DIER: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt enable
    +            UIE: u1,
    +            ///  Capture/Compare 1 interrupt enable
    +            CC1IE: u1,
    +            padding: u30,
    +        }),
    +        ///  status register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Update interrupt flag
    +            UIF: u1,
    +            ///  Capture/compare 1 interrupt flag
    +            CC1IF: u1,
    +            reserved9: u7,
    +            ///  Capture/Compare 1 overcapture flag
    +            CC1OF: u1,
    +            padding: u22,
    +        }),
    +        ///  event generation register
    +        EGR: mmio.Mmio(packed struct(u32) {
    +            ///  Update generation
    +            UG: u1,
    +            ///  Capture/compare 1 generation
    +            CC1G: u1,
    +            padding: u30,
    +        }),
    +        ///  capture/compare mode register 1 (output mode)
    +        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 selection
    +            CC1S: u2,
    +            ///  Output Compare 1 fast enable
    +            OC1FE: u1,
    +            ///  Output Compare 1 preload enable
    +            OC1PE: u1,
    +            ///  Output Compare 1 mode
    +            OC1M: u3,
    +            padding: u25,
    +        }),
    +        reserved32: [4]u8,
    +        ///  capture/compare enable register
    +        CCER: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 output enable
    +            CC1E: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1P: u1,
    +            reserved3: u1,
    +            ///  Capture/Compare 1 output Polarity
    +            CC1NP: u1,
    +            padding: u28,
    +        }),
    +        ///  counter
    +        CNT: mmio.Mmio(packed struct(u32) {
    +            ///  counter value
    +            CNT: u16,
    +            padding: u16,
    +        }),
    +        ///  prescaler
    +        PSC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescaler value
    +            PSC: u16,
    +            padding: u16,
    +        }),
    +        ///  auto-reload register
    +        ARR: mmio.Mmio(packed struct(u32) {
    +            ///  Auto-reload value
    +            ARR: u16,
    +            padding: u16,
    +        }),
    +        reserved52: [4]u8,
    +        ///  capture/compare register 1
    +        CCR1: mmio.Mmio(packed struct(u32) {
    +            ///  Capture/Compare 1 value
    +            CCR1: u16,
    +            padding: u16,
    +        }),
    +        reserved80: [24]u8,
    +        ///  option register
    +        OR: mmio.Mmio(packed struct(u32) {
    +            ///  Input 1 remapping capability
    +            RMP: u2,
    +            padding: u30,
    +        }),
    +    };
    +};
    diff --git a/src/hals/stm32f103.zig b/src/hals/stm32f103.zig
    new file mode 100644
    index 000000000..e69de29bb
    diff --git a/src/hals/stm32f303.zig b/src/hals/stm32f303.zig
    new file mode 100644
    index 000000000..272e8b1d7
    --- /dev/null
    +++ b/src/hals/stm32f303.zig
    @@ -0,0 +1,602 @@
    +//! For now we keep all clock settings on the chip defaults.
    +//! This code currently assumes the STM32F303xB / STM32F303xC clock configuration.
    +//! TODO: Do something useful for other STM32f30x chips.
    +//!
    +//! Specifically, TIM6 is running on an 8 MHz clock,
    +//! HSI = 8 MHz is the SYSCLK after reset
    +//! default AHB prescaler = /1 (= values 0..7):
    +//!
    +//! ```
    +//! RCC.CFGR.modify(.{ .HPRE = 0 });
    +//! ```
    +//!
    +//! so also HCLK = 8 MHz.
    +//! And with the default APB1 prescaler = /2:
    +//!
    +//! ```
    +//! RCC.CFGR.modify(.{ .PPRE1 = 4 });
    +//! ```
    +//!
    +//! results in PCLK1,
    +//! and the resulting implicit factor *2 for TIM2/3/4/6/7
    +//! makes TIM6 run at 8MHz/2*2 = 8 MHz.
    +//!
    +//! The above default configuration makes U(S)ART2..5
    +//! (which use PCLK1 without that implicit *2 factor)
    +//! run at 4 MHz by default.
    +//!
    +//! USART1 uses PCLK2, which uses the APB2 prescaler on HCLK,
    +//! default APB2 prescaler = /1:
    +//!
    +//! ```
    +//! RCC.CFGR.modify(.{ .PPRE2 = 0 });
    +//! ```
    +//!
    +//! and therefore USART1 runs on 8 MHz.
    +
    +const std = @import("std");
    +const runtime_safety = std.debug.runtime_safety;
    +
    +const micro = @import("microzig");
    +const SPI1 = micro.peripherals.SPI1;
    +const RCC = micro.peripherals.RCC;
    +const USART1 = micro.peripherals.USART1;
    +const GPIOA = micro.peripherals.GPIOA;
    +const GPIOB = micro.peripherals.GPIOB;
    +const GPIOC = micro.peripherals.GPIOC;
    +const I2C1 = micro.peripherals.I2C1;
    +
    +pub const cpu = @import("cpu");
    +
    +pub const clock = struct {
    +    pub const Domain = enum {
    +        cpu,
    +        ahb,
    +        apb1,
    +        apb2,
    +    };
    +};
    +
    +// Default clock frequencies after reset, see top comment for calculation
    +pub const clock_frequencies = .{
    +    .cpu = 8_000_000,
    +    .ahb = 8_000_000,
    +    .apb1 = 8_000_000,
    +    .apb2 = 8_000_000,
    +};
    +
    +pub fn parse_pin(comptime spec: []const u8) type {
    +    const invalid_format_msg = "The given pin '" ++ spec ++ "' has an invalid format. Pins must follow the format \"P{Port}{Pin}\" scheme.";
    +
    +    if (spec[0] != 'P')
    +        @compileError(invalid_format_msg);
    +    if (spec[1] < 'A' or spec[1] > 'H')
    +        @compileError(invalid_format_msg);
    +
    +    const pin_number: comptime_int = std.fmt.parseInt(u4, spec[2..], 10) catch @compileError(invalid_format_msg);
    +
    +    return struct {
    +        /// 'A'...'H'
    +        const gpio_port_name = spec[1..2];
    +        const gpio_port = @field(micro.peripherals, "GPIO" ++ gpio_port_name);
    +        const suffix = std.fmt.comptimePrint("{d}", .{pin_number});
    +    };
    +}
    +
    +fn set_reg_field(reg: anytype, comptime field_name: anytype, value: anytype) void {
    +    var temp = reg.read();
    +    @field(temp, field_name) = value;
    +    reg.write(temp);
    +}
    +
    +pub const gpio = struct {
    +    pub fn set_output(comptime pin: type) void {
    +        set_reg_field(RCC.AHBENR, "IOP" ++ pin.gpio_port_name ++ "EN", 1);
    +        set_reg_field(@field(pin.gpio_port, "MODER"), "MODER" ++ pin.suffix, 0b01);
    +    }
    +
    +    pub fn set_input(comptime pin: type) void {
    +        set_reg_field(RCC.AHBENR, "IOP" ++ pin.gpio_port_name ++ "EN", 1);
    +        set_reg_field(@field(pin.gpio_port, "MODER"), "MODER" ++ pin.suffix, 0b00);
    +    }
    +
    +    pub fn read(comptime pin: type) micro.gpio.State {
    +        const idr_reg = pin.gpio_port.IDR;
    +        const reg_value = @field(idr_reg.read(), "IDR" ++ pin.suffix); // TODO extract to getRegField()?
    +        return @intToEnum(micro.gpio.State, reg_value);
    +    }
    +
    +    pub fn write(comptime pin: type, state: micro.gpio.State) void {
    +        switch (state) {
    +            .low => set_reg_field(pin.gpio_port.BRR, "BR" ++ pin.suffix, 1),
    +            .high => set_reg_field(pin.gpio_port.BSRR, "BS" ++ pin.suffix, 1),
    +        }
    +    }
    +};
    +
    +pub const uart = struct {
    +    pub const DataBits = enum(u4) {
    +        seven = 7,
    +        eight = 8,
    +    };
    +
    +    /// uses the values of USART_CR2.STOP
    +    pub const StopBits = enum(u2) {
    +        one = 0b00,
    +        half = 0b01,
    +        two = 0b10,
    +        one_and_half = 0b11,
    +    };
    +
    +    /// uses the values of USART_CR1.PS
    +    pub const Parity = enum(u1) {
    +        even = 0,
    +        odd = 1,
    +    };
    +};
    +
    +pub fn Uart(comptime index: usize, comptime pins: micro.uart.Pins) type {
    +    if (!(index == 1)) @compileError("TODO: only USART1 is currently supported");
    +    if (pins.tx != null or pins.rx != null)
    +        @compileError("TODO: custom pins are not currently supported");
    +
    +    return struct {
    +        parity_read_mask: u8,
    +
    +        const Self = @This();
    +
    +        pub fn init(config: micro.uart.Config) !Self {
    +            // The following must all be written when the USART is disabled (UE=0).
    +            if (USART1.CR1.read().UE == 1)
    +                @panic("Trying to initialize USART1 while it is already enabled");
    +            // LATER: Alternatively, set UE=0 at this point?  Then wait for something?
    +            // Or add a destroy() function which disables the USART?
    +
    +            // enable the USART1 clock
    +            RCC.APB2ENR.modify(.{ .USART1EN = 1 });
    +            // enable GPIOC clock
    +            RCC.AHBENR.modify(.{ .IOPCEN = 1 });
    +            // set PC4+PC5 to alternate function 7, USART1_TX + USART1_RX
    +            GPIOC.MODER.modify(.{ .MODER4 = 0b10, .MODER5 = 0b10 });
    +            GPIOC.AFRL.modify(.{ .AFRL4 = 7, .AFRL5 = 7 });
    +
    +            // clear USART1 configuration to its default
    +            USART1.CR1.raw = 0;
    +            USART1.CR2.raw = 0;
    +            USART1.CR3.raw = 0;
    +
    +            // set word length
    +            // Per the reference manual, M[1:0] means
    +            // - 00: 8 bits (7 data + 1 parity, or 8 data), probably the chip default
    +            // - 01: 9 bits (8 data + 1 parity)
    +            // - 10: 7 bits (7 data)
    +            // So M1==1 means "7-bit mode" (in which
    +            // "the Smartcard mode, LIN master mode and Auto baud rate [...] are not supported");
    +            // and M0==1 means 'the 9th bit (not the 8th bit) is the parity bit'.
    +            const m1: u1 = if (config.data_bits == .seven and config.parity == null) 1 else 0;
    +            const m0: u1 = if (config.data_bits == .eight and config.parity != null) 1 else 0;
    +            // Note that .padding0 = bit 28 = .M1 (.svd file bug?), and .M == .M0.
    +            USART1.CR1.modify(.{ .padding0 = m1, .M = m0 });
    +
    +            // set parity
    +            if (config.parity) |parity| {
    +                USART1.CR1.modify(.{ .PCE = 1, .PS = @enumToInt(parity) });
    +            } else USART1.CR1.modify(.{ .PCE = 0 }); // no parity, probably the chip default
    +
    +            // set number of stop bits
    +            USART1.CR2.modify(.{ .STOP = @enumToInt(config.stop_bits) });
    +
    +            // set the baud rate
    +            // TODO: Do not use the _board_'s frequency, but the _U(S)ARTx_ frequency
    +            // from the chip, which can be affected by how the board configures the chip.
    +            // In our case, these are accidentally the same at chip reset,
    +            // if the board doesn't configure e.g. an HSE external crystal.
    +            // TODO: Do some checks to see if the baud rate is too high (or perhaps too low)
    +            // TODO: Do a rounding div, instead of a truncating div?
    +            const usartdiv = @intCast(u16, @divTrunc(micro.clock.get().apb1, config.baud_rate));
    +            USART1.BRR.raw = usartdiv;
    +            // Above, ignore the BRR struct fields DIV_Mantissa and DIV_Fraction,
    +            // those seem to be for another chipset; .svd file bug?
    +            // TODO: We assume the default OVER8=0 configuration above.
    +
    +            // enable USART1, and its transmitter and receiver
    +            USART1.CR1.modify(.{ .UE = 1 });
    +            USART1.CR1.modify(.{ .TE = 1 });
    +            USART1.CR1.modify(.{ .RE = 1 });
    +
    +            // For code simplicity, at cost of one or more register reads,
    +            // we read back the actual configuration from the registers,
    +            // instead of using the `config` values.
    +            return read_from_registers();
    +        }
    +
    +        pub fn get_or_init(config: micro.uart.Config) !Self {
    +            if (USART1.CR1.read().UE == 1) {
    +                // UART1 already enabled, don't reinitialize and disturb things;
    +                // instead read and use the actual configuration.
    +                return read_from_registers();
    +            } else return init(config);
    +        }
    +
    +        fn read_from_registers() Self {
    +            const cr1 = USART1.CR1.read();
    +            // As documented in `init()`, M0==1 means 'the 9th bit (not the 8th bit) is the parity bit'.
    +            // So we always mask away the 9th bit, and if parity is enabled and it is in the 8th bit,
    +            // then we also mask away the 8th bit.
    +            return Self{ .parity_read_mask = if (cr1.PCE == 1 and cr1.M == 0) 0x7F else 0xFF };
    +        }
    +
    +        pub fn can_write(self: Self) bool {
    +            _ = self;
    +            return switch (USART1.ISR.read().TXE) {
    +                1 => true,
    +                0 => false,
    +            };
    +        }
    +
    +        pub fn tx(self: Self, ch: u8) void {
    +            while (!self.can_write()) {} // Wait for Previous transmission
    +            USART1.TDR.modify(ch);
    +        }
    +
    +        pub fn txflush(_: Self) void {
    +            while (USART1.ISR.read().TC == 0) {}
    +        }
    +
    +        pub fn can_read(self: Self) bool {
    +            _ = self;
    +            return switch (USART1.ISR.read().RXNE) {
    +                1 => true,
    +                0 => false,
    +            };
    +        }
    +
    +        pub fn rx(self: Self) u8 {
    +            while (!self.can_read()) {} // Wait till the data is received
    +            const data_with_parity_bit: u9 = USART1.RDR.read().RDR;
    +            return @intCast(u8, data_with_parity_bit & self.parity_read_mask);
    +        }
    +    };
    +}
    +
    +const enable_stm32f303_debug = false;
    +
    +fn debug_print(comptime format: []const u8, args: anytype) void {
    +    if (enable_stm32f303_debug) {
    +        micro.debug.writer().print(format, args) catch {};
    +    }
    +}
    +
    +/// This implementation does not use AUTOEND=1
    +pub fn I2CController(comptime index: usize, comptime pins: micro.i2c.Pins) type {
    +    if (!(index == 1)) @compileError("TODO: only I2C1 is currently supported");
    +    if (pins.scl != null or pins.sda != null)
    +        @compileError("TODO: custom pins are not currently supported");
    +
    +    return struct {
    +        const Self = @This();
    +
    +        pub fn init(config: micro.i2c.Config) !Self {
    +            // CONFIGURE I2C1
    +            // connected to APB1, MCU pins PB6 + PB7 = I2C1_SCL + I2C1_SDA,
    +            // if GPIO port B is configured for alternate function 4 for these PB pins.
    +
    +            // 1. Enable the I2C CLOCK and GPIO CLOCK
    +            RCC.APB1ENR.modify(.{ .I2C1EN = 1 });
    +            RCC.AHBENR.modify(.{ .IOPBEN = 1 });
    +            debug_print("I2C1 configuration step 1 complete\r\n", .{});
    +            // 2. Configure the I2C PINs for ALternate Functions
    +            // 	a) Select Alternate Function in MODER Register
    +            GPIOB.MODER.modify(.{ .MODER6 = 0b10, .MODER7 = 0b10 });
    +            // 	b) Select Open Drain Output
    +            GPIOB.OTYPER.modify(.{ .OT6 = 1, .OT7 = 1 });
    +            // 	c) Select High SPEED for the PINs
    +            GPIOB.OSPEEDR.modify(.{ .OSPEEDR6 = 0b11, .OSPEEDR7 = 0b11 });
    +            // 	d) Select Pull-up for both the Pins
    +            GPIOB.PUPDR.modify(.{ .PUPDR6 = 0b01, .PUPDR7 = 0b01 });
    +            // 	e) Configure the Alternate Function in AFR Register
    +            GPIOB.AFRL.modify(.{ .AFRL6 = 4, .AFRL7 = 4 });
    +            debug_print("I2C1 configuration step 2 complete\r\n", .{});
    +
    +            // 3. Reset the I2C
    +            I2C1.CR1.modify(.{ .PE = 0 });
    +            while (I2C1.CR1.read().PE == 1) {}
    +            // DO NOT RCC.APB1RSTR.modify(.{ .I2C1RST = 1 });
    +            debug_print("I2C1 configuration step 3 complete\r\n", .{});
    +
    +            // 4-6. Configure I2C1 timing, based on 8 MHz I2C clock, run at 100 kHz
    +            // (Not using https://controllerstech.com/stm32-i2c-configuration-using-registers/
    +            // but copying an example from the reference manual, RM0316 section 28.4.9.)
    +            if (config.target_speed != 100_000) @panic("TODO: Support speeds other than 100 kHz");
    +            I2C1.TIMINGR.modify(.{
    +                .PRESC = 1,
    +                .SCLL = 0x13,
    +                .SCLH = 0xF,
    +                .SDADEL = 0x2,
    +                .SCLDEL = 0x4,
    +            });
    +            debug_print("I2C1 configuration steps 4-6 complete\r\n", .{});
    +
    +            // 7. Program the I2C_CR1 register to enable the peripheral
    +            I2C1.CR1.modify(.{ .PE = 1 });
    +            debug_print("I2C1 configuration step 7 complete\r\n", .{});
    +
    +            return Self{};
    +        }
    +
    +        pub const WriteState = struct {
    +            address: u7,
    +            buffer: [255]u8 = undefined,
    +            buffer_size: u8 = 0,
    +
    +            pub fn start(address: u7) !WriteState {
    +                return WriteState{ .address = address };
    +            }
    +
    +            pub fn write_all(self: *WriteState, bytes: []const u8) !void {
    +                debug_print("I2C1 writeAll() with {d} byte(s); buffer={any}\r\n", .{ bytes.len, self.buffer[0..self.buffer_size] });
    +
    +                std.debug.assert(self.buffer_size < 255);
    +                for (bytes) |b| {
    +                    self.buffer[self.buffer_size] = b;
    +                    self.buffer_size += 1;
    +                    if (self.buffer_size == 255) {
    +                        try self.send_buffer(1);
    +                    }
    +                }
    +            }
    +
    +            fn send_buffer(self: *WriteState, reload: u1) !void {
    +                debug_print("I2C1 sendBuffer() with {d} byte(s); RELOAD={d}; buffer={any}\r\n", .{ self.buffer_size, reload, self.buffer[0..self.buffer_size] });
    +                if (self.buffer_size == 0) @panic("write of 0 bytes not supported");
    +
    +                std.debug.assert(reload == 0 or self.buffer_size == 255); // see TODOs below
    +
    +                // As master, initiate write from address, 7 bit address
    +                I2C1.CR2.modify(.{
    +                    .ADD10 = 0,
    +                    .SADD1 = self.address,
    +                    .RD_WRN = 0, // write
    +                    .NBYTES = self.buffer_size,
    +                    .RELOAD = reload,
    +                });
    +                if (reload == 0) {
    +                    I2C1.CR2.modify(.{ .START = 1 });
    +                } else {
    +                    // TODO: The RELOAD=1 path is untested but doesn't seem to work yet,
    +                    // even though we make sure that we set NBYTES=255 per the docs.
    +                }
    +                for (self.buffer[0..self.buffer_size]) |b| {
    +                    // wait for empty transmit buffer
    +                    while (I2C1.ISR.read().TXE == 0) {
    +                        debug_print("I2C1 waiting for ready to send (TXE=0)\r\n", .{});
    +                    }
    +                    debug_print("I2C1 ready to send (TXE=1)\r\n", .{});
    +                    // Write data byte
    +                    I2C1.TXDR.modify(.{ .TXDATA = b });
    +                }
    +                self.buffer_size = 0;
    +                debug_print("I2C1 data written\r\n", .{});
    +                if (reload == 1) {
    +                    // TODO: The RELOAD=1 path is untested but doesn't seem to work yet,
    +                    // the following loop never seems to finish.
    +                    while (I2C1.ISR.read().TCR == 0) {
    +                        debug_print("I2C1 waiting transmit complete (TCR=0)\r\n", .{});
    +                    }
    +                    debug_print("I2C1 transmit complete (TCR=1)\r\n", .{});
    +                } else {
    +                    while (I2C1.ISR.read().TC == 0) {
    +                        debug_print("I2C1 waiting for transmit complete (TC=0)\r\n", .{});
    +                    }
    +                    debug_print("I2C1 transmit complete (TC=1)\r\n", .{});
    +                }
    +            }
    +
    +            pub fn stop(self: *WriteState) !void {
    +                try self.send_buffer(0);
    +                // Communication STOP
    +                debug_print("I2C1 STOPping\r\n", .{});
    +                I2C1.CR2.modify(.{ .STOP = 1 });
    +                while (I2C1.ISR.read().BUSY == 1) {}
    +                debug_print("I2C1 STOPped\r\n", .{});
    +            }
    +
    +            pub fn restart_read(self: *WriteState) !ReadState {
    +                try self.send_buffer(0);
    +                return ReadState{ .address = self.address };
    +            }
    +            pub fn restart_write(self: *WriteState) !WriteState {
    +                try self.send_buffer(0);
    +                return WriteState{ .address = self.address };
    +            }
    +        };
    +
    +        pub const ReadState = struct {
    +            address: u7,
    +            read_allowed: if (runtime_safety) bool else void = if (runtime_safety) true else {},
    +
    +            pub fn start(address: u7) !ReadState {
    +                return ReadState{ .address = address };
    +            }
    +
    +            /// Fails with ReadError if incorrect number of bytes is received.
    +            pub fn read_no_eof(self: *ReadState, buffer: []u8) !void {
    +                if (runtime_safety and !self.read_allowed) @panic("second read call not allowed");
    +                std.debug.assert(buffer.len < 256); // TODO: use RELOAD to read more data
    +
    +                // As master, initiate read from accelerometer, 7 bit address
    +                I2C1.CR2.modify(.{
    +                    .ADD10 = 0,
    +                    .SADD1 = self.address,
    +                    .RD_WRN = 1, // read
    +                    .NBYTES = @intCast(u8, buffer.len),
    +                });
    +                debug_print("I2C1 prepared for read of {} byte(s) from 0b{b:0<7}\r\n", .{ buffer.len, self.address });
    +
    +                // Communication START
    +                I2C1.CR2.modify(.{ .START = 1 });
    +                debug_print("I2C1 RXNE={}\r\n", .{I2C1.ISR.read().RXNE});
    +                debug_print("I2C1 STARTed\r\n", .{});
    +                debug_print("I2C1 RXNE={}\r\n", .{I2C1.ISR.read().RXNE});
    +
    +                if (runtime_safety) self.read_allowed = false;
    +
    +                for (buffer) |_, i| {
    +                    // Wait for data to be received
    +                    while (I2C1.ISR.read().RXNE == 0) {
    +                        debug_print("I2C1 waiting for data (RXNE=0)\r\n", .{});
    +                    }
    +                    debug_print("I2C1 data ready (RXNE=1)\r\n", .{});
    +
    +                    // Read first data byte
    +                    buffer[i] = I2C1.RXDR.read().RXDATA;
    +                }
    +                debug_print("I2C1 data: {any}\r\n", .{buffer});
    +            }
    +
    +            pub fn stop(_: *ReadState) !void {
    +                // Communication STOP
    +                I2C1.CR2.modify(.{ .STOP = 1 });
    +                while (I2C1.ISR.read().BUSY == 1) {}
    +                debug_print("I2C1 STOPped\r\n", .{});
    +            }
    +
    +            pub fn restart_read(self: *ReadState) !ReadState {
    +                debug_print("I2C1 no action for restart\r\n", .{});
    +                return ReadState{ .address = self.address };
    +            }
    +            pub fn restart_write(self: *ReadState) !WriteState {
    +                debug_print("I2C1 no action for restart\r\n", .{});
    +                return WriteState{ .address = self.address };
    +            }
    +        };
    +    };
    +}
    +
    +/// An STM32F303 SPI bus
    +pub fn SpiBus(comptime index: usize) type {
    +    if (!(index == 1)) @compileError("TODO: only SPI1 is currently supported");
    +
    +    return struct {
    +        const Self = @This();
    +
    +        /// Initialize and enable the bus.
    +        pub fn init(config: micro.spi.BusConfig) !Self {
    +            _ = config; // unused for now
    +
    +            // CONFIGURE SPI1
    +            // connected to APB2, MCU pins PA5 + PA7 + PA6 = SPC + SDI + SDO,
    +            // if GPIO port A is configured for alternate function 5 for these PA pins.
    +
    +            // Enable the GPIO CLOCK
    +            RCC.AHBENR.modify(.{ .IOPAEN = 1 });
    +
    +            // Configure the I2C PINs for ALternate Functions
    +            // 	- Select Alternate Function in MODER Register
    +            GPIOA.MODER.modify(.{ .MODER5 = 0b10, .MODER6 = 0b10, .MODER7 = 0b10 });
    +            // 	- Select High SPEED for the PINs
    +            GPIOA.OSPEEDR.modify(.{ .OSPEEDR5 = 0b11, .OSPEEDR6 = 0b11, .OSPEEDR7 = 0b11 });
    +            // 	- Configure the Alternate Function in AFR Register
    +            GPIOA.AFRL.modify(.{ .AFRL5 = 5, .AFRL6 = 5, .AFRL7 = 5 });
    +
    +            // Enable the SPI1 CLOCK
    +            RCC.APB2ENR.modify(.{ .SPI1EN = 1 });
    +
    +            SPI1.CR1.modify(.{
    +                .MSTR = 1,
    +                .SSM = 1,
    +                .SSI = 1,
    +                .RXONLY = 0,
    +                .SPE = 1,
    +            });
    +            // the following configuration is assumed in `transceiveByte()`
    +            SPI1.CR2.raw = 0;
    +            SPI1.CR2.modify(.{
    +                .DS = 0b0111, // 8-bit data frames, seems default via '0b0000 is interpreted as 0b0111'
    +                .FRXTH = 1, // RXNE event after 1 byte received
    +            });
    +
    +            return Self{};
    +        }
    +
    +        /// Switch this SPI bus to the given device.
    +        pub fn switch_to_device(_: Self, comptime cs_pin: type, config: micro.spi.DeviceConfig) void {
    +            _ = config; // for future use
    +
    +            SPI1.CR1.modify(.{
    +                .CPOL = 1, // TODO: make configurable
    +                .CPHA = 1, // TODO: make configurable
    +                .BR = 0b111, // 1/256 the of PCLK TODO: make configurable
    +                .LSBFIRST = 0, // MSB first TODO: make configurable
    +            });
    +            gpio.set_output(cs_pin);
    +        }
    +
    +        /// Begin a transfer to the given device.  (Assumes `switchToDevice()` was called.)
    +        pub fn begin_transfer(_: Self, comptime cs_pin: type, config: micro.spi.DeviceConfig) void {
    +            _ = config; // for future use
    +            gpio.write(cs_pin, .low); // select the given device, TODO: support inverse CS devices
    +            debug_print("enabled SPI1\r\n", .{});
    +        }
    +
    +        /// The basic operation in the current simplistic implementation:
    +        /// send+receive a single byte.
    +        /// Writing `null` writes an arbitrary byte (`undefined`), and
    +        /// reading into `null` ignores the value received.
    +        pub fn transceive_byte(_: Self, optional_write_byte: ?u8, optional_read_pointer: ?*u8) !void {
    +
    +            // SPIx_DR's least significant byte is `@bitCast([dr_byte_size]u8, ...)[0]`
    +            const dr_byte_size = @sizeOf(@TypeOf(SPI1.DR.raw));
    +
    +            // wait unril ready for write
    +            while (SPI1.SR.read().TXE == 0) {
    +                debug_print("SPI1 TXE == 0\r\n", .{});
    +            }
    +            debug_print("SPI1 TXE == 1\r\n", .{});
    +
    +            // write
    +            const write_byte = if (optional_write_byte) |b| b else undefined; // dummy value
    +            @bitCast([dr_byte_size]u8, SPI1.DR.*)[0] = write_byte;
    +            debug_print("Sent: {X:2}.\r\n", .{write_byte});
    +
    +            // wait until read processed
    +            while (SPI1.SR.read().RXNE == 0) {
    +                debug_print("SPI1 RXNE == 0\r\n", .{});
    +            }
    +            debug_print("SPI1 RXNE == 1\r\n", .{});
    +
    +            // read
    +            var data_read = SPI1.DR.raw;
    +            _ = SPI1.SR.read(); // clear overrun flag
    +            const dr_lsb = @bitCast([dr_byte_size]u8, data_read)[0];
    +            debug_print("Received: {X:2} (DR = {X:8}).\r\n", .{ dr_lsb, data_read });
    +            if (optional_read_pointer) |read_pointer| read_pointer.* = dr_lsb;
    +        }
    +
    +        /// Write all given bytes on the bus, not reading anything back.
    +        pub fn write_all(self: Self, bytes: []const u8) !void {
    +            for (bytes) |b| {
    +                try self.transceive_byte(b, null);
    +            }
    +        }
    +
    +        /// Read bytes to fill the given buffer exactly, writing arbitrary bytes (`undefined`).
    +        pub fn read_into(self: Self, buffer: []u8) !void {
    +            for (buffer) |_, i| {
    +                try self.transceive_byte(null, &buffer[i]);
    +            }
    +        }
    +
    +        pub fn end_transfer(_: Self, comptime cs_pin: type, config: micro.spi.DeviceConfig) void {
    +            _ = config; // for future use
    +            // no delay should be needed here, since we know SPIx_SR's TXE is 1
    +            debug_print("(disabling SPI1)\r\n", .{});
    +            gpio.write(cs_pin, .high); // deselect the given device, TODO: support inverse CS devices
    +            // HACK: wait long enough to make any device end an ongoing transfer
    +            var i: u8 = 255; // with the default clock, this seems to delay ~185 microseconds
    +            while (i > 0) : (i -= 1) {
    +                asm volatile ("nop");
    +            }
    +        }
    +    };
    +}
    diff --git a/src/hals/stm32f407.zig b/src/hals/stm32f407.zig
    new file mode 100644
    index 000000000..6461bd899
    --- /dev/null
    +++ b/src/hals/stm32f407.zig
    @@ -0,0 +1,623 @@
    +//! For now we keep all clock settings on the chip defaults.
    +//! This code currently assumes the STM32F405xx / STM32F407xx clock configuration.
    +//! TODO: Do something useful for other STM32F40x chips.
    +//!
    +//! Specifically, TIM6 is running on a 16 MHz clock,
    +//! HSI = 16 MHz is the SYSCLK after reset
    +//! default AHB prescaler = /1 (= values 0..7):
    +//!
    +//! ```
    +//! RCC.CFGR.modify(.{ .HPRE = 0 });
    +//! ```
    +//!
    +//! so also HCLK = 16 MHz.
    +//! And with the default APB1 prescaler = /1:
    +//!
    +//! ```
    +//! RCC.CFGR.modify(.{ .PPRE1 = 0 });
    +//! ```
    +//!
    +//! results in PCLK1 = 16 MHz.
    +//!
    +//! The above default configuration makes U(S)ART2..5
    +//! receive a 16 MHz clock by default.
    +//!
    +//! USART1 and USART6 use PCLK2, which uses the APB2 prescaler on HCLK,
    +//! default APB2 prescaler = /1:
    +//!
    +//! ```
    +//! RCC.CFGR.modify(.{ .PPRE2 = 0 });
    +//! ```
    +//!
    +//! and therefore USART1 and USART6 receive a 16 MHz clock.
    +//!
    +
    +const std = @import("std");
    +const micro = @import("microzig");
    +const peripherals = micro.peripherals;
    +const RCC = peripherals.RCC;
    +
    +pub const clock = struct {
    +    pub const Domain = enum {
    +        cpu,
    +        ahb,
    +        apb1,
    +        apb2,
    +    };
    +};
    +
    +// Default clock frequencies after reset, see top comment for calculation
    +pub const clock_frequencies = .{
    +    .cpu = 16_000_000,
    +    .ahb = 16_000_000,
    +    .apb1 = 16_000_000,
    +    .apb2 = 16_000_000,
    +};
    +
    +pub fn parse_pin(comptime spec: []const u8) type {
    +    const invalid_format_msg = "The given pin '" ++ spec ++ "' has an invalid format. Pins must follow the format \"P{Port}{Pin}\" scheme.";
    +
    +    if (spec[0] != 'P')
    +        @compileError(invalid_format_msg);
    +    if (spec[1] < 'A' or spec[1] > 'I')
    +        @compileError(invalid_format_msg);
    +
    +    return struct {
    +        const pin_number: comptime_int = std.fmt.parseInt(u4, spec[2..], 10) catch @compileError(invalid_format_msg);
    +        /// 'A'...'I'
    +        const gpio_port_name = spec[1..2];
    +        const gpio_port = @field(peripherals, "GPIO" ++ gpio_port_name);
    +        const suffix = std.fmt.comptimePrint("{d}", .{pin_number});
    +    };
    +}
    +
    +fn set_reg_field(reg: anytype, comptime field_name: anytype, value: anytype) void {
    +    var temp = reg.read();
    +    @field(temp, field_name) = value;
    +    reg.write(temp);
    +}
    +
    +pub const gpio = struct {
    +    pub const AlternateFunction = enum(u4) {
    +        af0,
    +        af1,
    +        af2,
    +        af3,
    +        af4,
    +        af5,
    +        af6,
    +        af7,
    +        af8,
    +        af9,
    +        af10,
    +        af11,
    +        af12,
    +        af13,
    +        af14,
    +        af15,
    +    };
    +
    +    pub fn set_output(comptime pin: type) void {
    +        set_reg_field(RCC.AHB1ENR, "GPIO" ++ pin.gpio_port_name ++ "EN", 1);
    +        set_reg_field(@field(pin.gpio_port, "MODER"), "MODER" ++ pin.suffix, 0b01);
    +    }
    +
    +    pub fn set_input(comptime pin: type) void {
    +        set_reg_field(RCC.AHB1ENR, "GPIO" ++ pin.gpio_port_name ++ "EN", 1);
    +        set_reg_field(@field(pin.gpio_port, "MODER"), "MODER" ++ pin.suffix, 0b00);
    +    }
    +
    +    pub fn set_alternate_function(comptime pin: type, af: AlternateFunction) void {
    +        set_reg_field(RCC.AHB1ENR, "GPIO" ++ pin.gpio_port_name ++ "EN", 1);
    +        set_reg_field(@field(pin.gpio_port, "MODER"), "MODER" ++ pin.suffix, 0b10);
    +        if (pin.pin_number < 8) {
    +            set_reg_field(@field(pin.gpio_port, "AFRL"), "AFRL" ++ pin.suffix, @enumToInt(af));
    +        } else {
    +            set_reg_field(@field(pin.gpio_port, "AFRH"), "AFRH" ++ pin.suffix, @enumToInt(af));
    +        }
    +    }
    +
    +    pub fn read(comptime pin: type) micro.gpio.State {
    +        const idr_reg = pin.gpio_port.IDR;
    +        const reg_value = @field(idr_reg.read(), "IDR" ++ pin.suffix); // TODO extract to getRegField()?
    +        return @intToEnum(micro.gpio.State, reg_value);
    +    }
    +
    +    pub fn write(comptime pin: type, state: micro.gpio.State) void {
    +        switch (state) {
    +            .low => set_reg_field(pin.gpio_port.BSRR, "BR" ++ pin.suffix, 1),
    +            .high => set_reg_field(pin.gpio_port.BSRR, "BS" ++ pin.suffix, 1),
    +        }
    +    }
    +};
    +
    +pub const uart = struct {
    +    pub const DataBits = enum {
    +        seven,
    +        eight,
    +        nine,
    +    };
    +
    +    /// uses the values of USART_CR2.STOP
    +    pub const StopBits = enum(u2) {
    +        one = 0b00,
    +        half = 0b01,
    +        two = 0b10,
    +        one_and_half = 0b11,
    +    };
    +
    +    /// uses the values of USART_CR1.PS
    +    pub const Parity = enum(u1) {
    +        even = 0,
    +        odd = 1,
    +    };
    +
    +    const PinDirection = std.meta.FieldEnum(micro.uart.Pins);
    +
    +    /// Checks if a pin is valid for a given uart index and direction
    +    pub fn is_valid_pin(comptime pin: type, comptime index: usize, comptime direction: PinDirection) bool {
    +        const pin_name = pin.name;
    +
    +        return switch (direction) {
    +            .tx => switch (index) {
    +                1 => std.mem.eql(u8, pin_name, "PA9") or std.mem.eql(u8, pin_name, "PB6"),
    +                2 => std.mem.eql(u8, pin_name, "PA2") or std.mem.eql(u8, pin_name, "PD5"),
    +                3 => std.mem.eql(u8, pin_name, "PB10") or std.mem.eql(u8, pin_name, "PC10") or std.mem.eql(u8, pin_name, "PD8"),
    +                4 => std.mem.eql(u8, pin_name, "PA0") or std.mem.eql(u8, pin_name, "PC10"),
    +                5 => std.mem.eql(u8, pin_name, "PC12"),
    +                6 => std.mem.eql(u8, pin_name, "PC6") or std.mem.eql(u8, pin_name, "PG14"),
    +                else => unreachable,
    +            },
    +            // Valid RX pins for the UARTs
    +            .rx => switch (index) {
    +                1 => std.mem.eql(u8, pin_name, "PA10") or std.mem.eql(u8, pin_name, "PB7"),
    +                2 => std.mem.eql(u8, pin_name, "PA3") or std.mem.eql(u8, pin_name, "PD6"),
    +                3 => std.mem.eql(u8, pin_name, "PB11") or std.mem.eql(u8, pin_name, "PC11") or std.mem.eql(u8, pin_name, "PD9"),
    +                4 => std.mem.eql(u8, pin_name, "PA1") or std.mem.eql(u8, pin_name, "PC11"),
    +                5 => std.mem.eql(u8, pin_name, "PD2"),
    +                6 => std.mem.eql(u8, pin_name, "PC7") or std.mem.eql(u8, pin_name, "PG9"),
    +                else => unreachable,
    +            },
    +        };
    +    }
    +};
    +
    +pub fn Uart(comptime index: usize, comptime pins: micro.uart.Pins) type {
    +    if (index < 1 or index > 6) @compileError("Valid USART index are 1..6");
    +
    +    const usart_name = std.fmt.comptimePrint("USART{d}", .{index});
    +    const tx_pin =
    +        if (pins.tx) |tx|
    +        if (uart.is_valid_pin(tx, index, .tx))
    +            tx
    +        else
    +            @compileError(std.fmt.comptimePrint("Tx pin {s} is not valid for UART{}", .{ tx.name, index }))
    +    else switch (index) {
    +        // Provide default tx pins if no pin is specified
    +        1 => micro.Pin("PA9"),
    +        2 => micro.Pin("PA2"),
    +        3 => micro.Pin("PB10"),
    +        4 => micro.Pin("PA0"),
    +        5 => micro.Pin("PC12"),
    +        6 => micro.Pin("PC6"),
    +        else => unreachable,
    +    };
    +
    +    const rx_pin =
    +        if (pins.rx) |rx|
    +        if (uart.is_valid_pin(rx, index, .rx))
    +            rx
    +        else
    +            @compileError(std.fmt.comptimePrint("Rx pin {s} is not valid for UART{}", .{ rx.name, index }))
    +    else switch (index) {
    +        // Provide default rx pins if no pin is specified
    +        1 => micro.Pin("PA10"),
    +        2 => micro.Pin("PA3"),
    +        3 => micro.Pin("PB11"),
    +        4 => micro.Pin("PA1"),
    +        5 => micro.Pin("PD2"),
    +        6 => micro.Pin("PC7"),
    +        else => unreachable,
    +    };
    +
    +    // USART1..3 are AF7, USART 4..6 are AF8
    +    const alternate_function = if (index <= 3) .af7 else .af8;
    +
    +    const tx_gpio = micro.Gpio(tx_pin, .{
    +        .mode = .alternate_function,
    +        .alternate_function = alternate_function,
    +    });
    +    const rx_gpio = micro.Gpio(rx_pin, .{
    +        .mode = .alternate_function,
    +        .alternate_function = alternate_function,
    +    });
    +
    +    return struct {
    +        parity_read_mask: u8,
    +
    +        const Self = @This();
    +
    +        pub fn init(config: micro.uart.Config) !Self {
    +            // The following must all be written when the USART is disabled (UE=0).
    +            if (@field(peripherals, usart_name).CR1.read().UE == 1)
    +                @panic("Trying to initialize " ++ usart_name ++ " while it is already enabled");
    +            // LATER: Alternatively, set UE=0 at this point?  Then wait for something?
    +            // Or add a destroy() function which disables the USART?
    +
    +            // enable the USART clock
    +            const clk_enable_reg = switch (index) {
    +                1, 6 => RCC.APB2ENR,
    +                2...5 => RCC.APB1ENR,
    +                else => unreachable,
    +            };
    +            set_reg_field(clk_enable_reg, usart_name ++ "EN", 1);
    +
    +            tx_gpio.init();
    +            rx_gpio.init();
    +
    +            // clear USART configuration to its default
    +            @field(peripherals, usart_name).CR1.raw = 0;
    +            @field(peripherals, usart_name).CR2.raw = 0;
    +            @field(peripherals, usart_name).CR3.raw = 0;
    +
    +            // Return error for unsupported combinations
    +            if (config.data_bits == .nine and config.parity != null) {
    +                // TODO: should we consider this an unsupported word size or unsupported parity?
    +                return error.UnsupportedWordSize;
    +            } else if (config.data_bits == .seven and config.parity == null) {
    +                // TODO: should we consider this an unsupported word size or unsupported parity?
    +                return error.UnsupportedWordSize;
    +            }
    +
    +            // set word length
    +            // Per the reference manual, M means
    +            // - 0: 1 start bit, 8 data bits (7 data + 1 parity, or 8 data), n stop bits, the chip default
    +            // - 1: 1 start bit, 9 data bits (8 data + 1 parity, or 9 data), n stop bits
    +            const m: u1 = if (config.data_bits == .nine or (config.data_bits == .eight and config.parity != null)) 1 else 0;
    +            @field(peripherals, usart_name).CR1.modify(.{ .M = m });
    +
    +            // set parity
    +            if (config.parity) |parity| {
    +                @field(peripherals, usart_name).CR1.modify(.{ .PCE = 1, .PS = @enumToInt(parity) });
    +            } // otherwise, no need to set no parity since we reset Control Registers above, and it's the default
    +
    +            // set number of stop bits
    +            @field(peripherals, usart_name).CR2.modify(.{ .STOP = @enumToInt(config.stop_bits) });
    +
    +            // set the baud rate
    +            // Despite the reference manual talking about fractional calculation and other buzzwords,
    +            // it is actually just a simple divider. Just ignore DIV_Mantissa and DIV_Fraction and
    +            // set the result of the division as the lower 16 bits of BRR.
    +            // TODO: We assume the default OVER8=0 configuration above (i.e. 16x oversampling).
    +            // TODO: Do some checks to see if the baud rate is too high (or perhaps too low)
    +            // TODO: Do a rounding div, instead of a truncating div?
    +            const clocks = micro.clock.get();
    +            const bus_frequency = switch (index) {
    +                1, 6 => clocks.apb2,
    +                2...5 => clocks.apb1,
    +                else => unreachable,
    +            };
    +            const usartdiv = @intCast(u16, @divTrunc(bus_frequency, config.baud_rate));
    +            @field(peripherals, usart_name).BRR.raw = usartdiv;
    +
    +            // enable USART, and its transmitter and receiver
    +            @field(peripherals, usart_name).CR1.modify(.{ .UE = 1 });
    +            @field(peripherals, usart_name).CR1.modify(.{ .TE = 1 });
    +            @field(peripherals, usart_name).CR1.modify(.{ .RE = 1 });
    +
    +            // For code simplicity, at cost of one or more register reads,
    +            // we read back the actual configuration from the registers,
    +            // instead of using the `config` values.
    +            return read_from_registers();
    +        }
    +
    +        pub fn get_or_init(config: micro.uart.Config) !Self {
    +            if (@field(peripherals, usart_name).CR1.read().UE == 1) {
    +                // UART1 already enabled, don't reinitialize and disturb things;
    +                // instead read and use the actual configuration.
    +                return read_from_registers();
    +            } else return init(config);
    +        }
    +
    +        fn read_from_registers() Self {
    +            const cr1 = @field(peripherals, usart_name).CR1.read();
    +            // As documented in `init()`, M0==1 means 'the 9th bit (not the 8th bit) is the parity bit'.
    +            // So we always mask away the 9th bit, and if parity is enabled and it is in the 8th bit,
    +            // then we also mask away the 8th bit.
    +            return Self{ .parity_read_mask = if (cr1.PCE == 1 and cr1.M == 0) 0x7F else 0xFF };
    +        }
    +
    +        pub fn can_write(self: Self) bool {
    +            _ = self;
    +            return switch (@field(peripherals, usart_name).SR.read().TXE) {
    +                1 => true,
    +                0 => false,
    +            };
    +        }
    +
    +        pub fn tx(self: Self, ch: u8) void {
    +            while (!self.can_write()) {} // Wait for Previous transmission
    +            @field(peripherals, usart_name).DR.modify(ch);
    +        }
    +
    +        pub fn txflush(_: Self) void {
    +            while (@field(peripherals, usart_name).SR.read().TC == 0) {}
    +        }
    +
    +        pub fn can_read(self: Self) bool {
    +            _ = self;
    +            return switch (@field(peripherals, usart_name).SR.read().RXNE) {
    +                1 => true,
    +                0 => false,
    +            };
    +        }
    +
    +        pub fn rx(self: Self) u8 {
    +            while (!self.can_read()) {} // Wait till the data is received
    +            const data_with_parity_bit: u9 = @field(peripherals, usart_name).DR.read();
    +            return @intCast(u8, data_with_parity_bit & self.parity_read_mask);
    +        }
    +    };
    +}
    +
    +pub const i2c = struct {
    +    const PinLine = std.meta.FieldEnum(micro.i2c.Pins);
    +
    +    /// Checks if a pin is valid for a given i2c index and line
    +    pub fn is_valid_pin(comptime pin: type, comptime index: usize, comptime line: PinLine) bool {
    +        const pin_name = pin.name;
    +
    +        return switch (line) {
    +            .scl => switch (index) {
    +                1 => std.mem.eql(u8, pin_name, "PB6") or std.mem.eql(u8, pin_name, "PB8"),
    +                2 => std.mem.eql(u8, pin_name, "PB10") or std.mem.eql(u8, pin_name, "PF1") or std.mem.eql(u8, pin_name, "PH4"),
    +                3 => std.mem.eql(u8, pin_name, "PA8") or std.mem.eql(u8, pin_name, "PH7"),
    +                else => unreachable,
    +            },
    +            // Valid RX pins for the UARTs
    +            .sda => switch (index) {
    +                1 => std.mem.eql(u8, pin_name, "PB7") or std.mem.eql(u8, pin_name, "PB9"),
    +                2 => std.mem.eql(u8, pin_name, "PB11") or std.mem.eql(u8, pin_name, "PF0") or std.mem.eql(u8, pin_name, "PH5"),
    +                3 => std.mem.eql(u8, pin_name, "PC9") or std.mem.eql(u8, pin_name, "PH8"),
    +                else => unreachable,
    +            },
    +        };
    +    }
    +};
    +
    +pub fn I2CController(comptime index: usize, comptime pins: micro.i2c.Pins) type {
    +    if (index < 1 or index > 3) @compileError("Valid I2C index are 1..3");
    +
    +    const i2c_name = std.fmt.comptimePrint("I2C{d}", .{index});
    +    const scl_pin =
    +        if (pins.scl) |scl|
    +        if (uart.is_valid_pin(scl, index, .scl))
    +            scl
    +        else
    +            @compileError(std.fmt.comptimePrint("SCL pin {s} is not valid for I2C{}", .{ scl.name, index }))
    +    else switch (index) {
    +        // Provide default scl pins if no pin is specified
    +        1 => micro.Pin("PB6"),
    +        2 => micro.Pin("PB10"),
    +        3 => micro.Pin("PA8"),
    +        else => unreachable,
    +    };
    +
    +    const sda_pin =
    +        if (pins.sda) |sda|
    +        if (uart.is_valid_pin(sda, index, .sda))
    +            sda
    +        else
    +            @compileError(std.fmt.comptimePrint("SDA pin {s} is not valid for UART{}", .{ sda.name, index }))
    +    else switch (index) {
    +        // Provide default sda pins if no pin is specified
    +        1 => micro.Pin("PB7"),
    +        2 => micro.Pin("PB11"),
    +        3 => micro.Pin("PC9"),
    +        else => unreachable,
    +    };
    +
    +    const scl_gpio = micro.Gpio(scl_pin, .{
    +        .mode = .alternate_function,
    +        .alternate_function = .af4,
    +    });
    +    const sda_gpio = micro.Gpio(sda_pin, .{
    +        .mode = .alternate_function,
    +        .alternate_function = .af4,
    +    });
    +
    +    // Base field of the specific I2C peripheral
    +    const i2c_base = @field(peripherals, i2c_name);
    +
    +    return struct {
    +        const Self = @This();
    +
    +        pub fn init(config: micro.i2c.Config) !Self {
    +            // Configure I2C
    +
    +            // 1. Enable the I2C CLOCK and GPIO CLOCK
    +            RCC.APB1ENR.modify(.{ .I2C1EN = 1 });
    +            RCC.AHB1ENR.modify(.{ .GPIOBEN = 1 });
    +
    +            // 2. Configure the I2C PINs
    +            // This takes care of setting them alternate function mode with the correct AF
    +            scl_gpio.init();
    +            sda_gpio.init();
    +
    +            // TODO: the stuff below will probably use the microzig gpio API in the future
    +            const scl = scl_pin.source_pin;
    +            const sda = sda_pin.source_pin;
    +            // Select Open Drain Output
    +            set_reg_field(@field(scl.gpio_port, "OTYPER"), "OT" ++ scl.suffix, 1);
    +            set_reg_field(@field(sda.gpio_port, "OTYPER"), "OT" ++ sda.suffix, 1);
    +            // Select High Speed
    +            set_reg_field(@field(scl.gpio_port, "OSPEEDR"), "OSPEEDR" ++ scl.suffix, 0b10);
    +            set_reg_field(@field(sda.gpio_port, "OSPEEDR"), "OSPEEDR" ++ sda.suffix, 0b10);
    +            // Activate Pull-up
    +            set_reg_field(@field(scl.gpio_port, "PUPDR"), "PUPDR" ++ scl.suffix, 0b01);
    +            set_reg_field(@field(sda.gpio_port, "PUPDR"), "PUPDR" ++ sda.suffix, 0b01);
    +
    +            // 3. Reset the I2C
    +            i2c_base.CR1.modify(.{ .PE = 0 });
    +            while (i2c_base.CR1.read().PE == 1) {}
    +
    +            // 4. Configure I2C timing
    +            const bus_frequency_hz = micro.clock.get().apb1;
    +            const bus_frequency_mhz: u6 = @intCast(u6, @divExact(bus_frequency_hz, 1_000_000));
    +
    +            if (bus_frequency_mhz < 2 or bus_frequency_mhz > 50) {
    +                return error.InvalidBusFrequency;
    +            }
    +
    +            // .FREQ is set to the bus frequency in Mhz
    +            i2c_base.CR2.modify(.{ .FREQ = bus_frequency_mhz });
    +
    +            switch (config.target_speed) {
    +                10_000...100_000 => {
    +                    // CCR is bus_freq / (target_speed * 2). We use floor to avoid exceeding the target speed.
    +                    const ccr = @intCast(u12, @divFloor(bus_frequency_hz, config.target_speed * 2));
    +                    i2c_base.CCR.modify(.{ .CCR = ccr });
    +                    // Trise is bus frequency in Mhz + 1
    +                    i2c_base.TRISE.modify(bus_frequency_mhz + 1);
    +                },
    +                100_001...400_000 => {
    +                    // TODO: handle fast mode
    +                    return error.InvalidSpeed;
    +                },
    +                else => return error.InvalidSpeed,
    +            }
    +
    +            // 5. Program the I2C_CR1 register to enable the peripheral
    +            i2c_base.CR1.modify(.{ .PE = 1 });
    +
    +            return Self{};
    +        }
    +
    +        pub const WriteState = struct {
    +            address: u7,
    +            buffer: [255]u8 = undefined,
    +            buffer_size: u8 = 0,
    +
    +            pub fn start(address: u7) !WriteState {
    +                return WriteState{ .address = address };
    +            }
    +
    +            pub fn write_all(self: *WriteState, bytes: []const u8) !void {
    +                std.debug.assert(self.buffer_size < 255);
    +                for (bytes) |b| {
    +                    self.buffer[self.buffer_size] = b;
    +                    self.buffer_size += 1;
    +                    if (self.buffer_size == 255) {
    +                        try self.send_buffer();
    +                    }
    +                }
    +            }
    +
    +            fn send_buffer(self: *WriteState) !void {
    +                if (self.buffer_size == 0) @panic("write of 0 bytes not supported");
    +
    +                // Wait for the bus to be free
    +                while (i2c_base.SR2.read().BUSY == 1) {}
    +
    +                // Send start
    +                i2c_base.CR1.modify(.{ .START = 1 });
    +
    +                // Wait for the end of the start condition, master mode selected, and BUSY bit set
    +                while ((i2c_base.SR1.read().SB == 0 or
    +                    i2c_base.SR2.read().MSL == 0 or
    +                    i2c_base.SR2.read().BUSY == 0))
    +                {}
    +
    +                // Write the address to bits 7..1, bit 0 stays at 0 to indicate write operation
    +                i2c_base.DR.modify(@intCast(u8, self.address) << 1);
    +
    +                // Wait for address confirmation
    +                while (i2c_base.SR1.read().ADDR == 0) {}
    +
    +                // Read SR2 to clear address condition
    +                _ = i2c_base.SR2.read();
    +
    +                for (self.buffer[0..self.buffer_size]) |b| {
    +                    // Write data byte
    +                    i2c_base.DR.modify(b);
    +                    // Wait for transfer finished
    +                    while (i2c_base.SR1.read().BTF == 0) {}
    +                }
    +                self.buffer_size = 0;
    +            }
    +
    +            pub fn stop(self: *WriteState) !void {
    +                try self.send_buffer();
    +                // Communication STOP
    +                i2c_base.CR1.modify(.{ .STOP = 1 });
    +                while (i2c_base.SR2.read().BUSY == 1) {}
    +            }
    +
    +            pub fn restart_read(self: *WriteState) !ReadState {
    +                try self.send_buffer();
    +                return ReadState{ .address = self.address };
    +            }
    +            pub fn restart_write(self: *WriteState) !WriteState {
    +                try self.send_buffer();
    +                return WriteState{ .address = self.address };
    +            }
    +        };
    +
    +        pub const ReadState = struct {
    +            address: u7,
    +
    +            pub fn start(address: u7) !ReadState {
    +                return ReadState{ .address = address };
    +            }
    +
    +            /// Fails with ReadError if incorrect number of bytes is received.
    +            pub fn read_no_eof(self: *ReadState, buffer: []u8) !void {
    +                std.debug.assert(buffer.len < 256);
    +
    +                // Send start and enable ACK
    +                i2c_base.CR1.modify(.{ .START = 1, .ACK = 1 });
    +
    +                // Wait for the end of the start condition, master mode selected, and BUSY bit set
    +                while ((i2c_base.SR1.read().SB == 0 or
    +                    i2c_base.SR2.read().MSL == 0 or
    +                    i2c_base.SR2.read().BUSY == 0))
    +                {}
    +
    +                // Write the address to bits 7..1, bit 0 set to 1 to indicate read operation
    +                i2c_base.DR.modify((@intCast(u8, self.address) << 1) | 1);
    +
    +                // Wait for address confirmation
    +                while (i2c_base.SR1.read().ADDR == 0) {}
    +
    +                // Read SR2 to clear address condition
    +                _ = i2c_base.SR2.read();
    +
    +                for (buffer) |_, i| {
    +                    if (i == buffer.len - 1) {
    +                        // Disable ACK
    +                        i2c_base.CR1.modify(.{ .ACK = 0 });
    +                    }
    +
    +                    // Wait for data to be received
    +                    while (i2c_base.SR1.read().RxNE == 0) {}
    +
    +                    // Read data byte
    +                    buffer[i] = i2c_base.DR.read();
    +                }
    +            }
    +
    +            pub fn stop(_: *ReadState) !void {
    +                // Communication STOP
    +                i2c_base.CR1.modify(.{ .STOP = 1 });
    +                while (i2c_base.SR2.read().BUSY == 1) {}
    +            }
    +
    +            pub fn restart_read(self: *ReadState) !ReadState {
    +                return ReadState{ .address = self.address };
    +            }
    +            pub fn restart_write(self: *ReadState) !WriteState {
    +                return WriteState{ .address = self.address };
    +            }
    +        };
    +    };
    +}
    diff --git a/src/hals/stm32f429.zig b/src/hals/stm32f429.zig
    new file mode 100644
    index 000000000..3aed96341
    --- /dev/null
    +++ b/src/hals/stm32f429.zig
    @@ -0,0 +1,92 @@
    +//! For now we keep all clock settings on the chip defaults.
    +//! This code should work with all the STM32F42xx line
    +//!
    +//! Specifically, TIM6 is running on a 16 MHz clock,
    +//! HSI = 16 MHz is the SYSCLK after reset
    +//! default AHB prescaler = /1 (= values 0..7):
    +//!
    +//! ```
    +//! RCC.CFGR.modify(.{ .HPRE = 0 });
    +//! ```
    +//!
    +//! so also HCLK = 16 MHz.
    +//! And with the default APB1 prescaler = /1:
    +//!
    +//! ```
    +//! RCC.CFGR.modify(.{ .PPRE1 = 0 });
    +//! ```
    +//!
    +//! results in PCLK1 = 16 MHz.
    +//!
    +//! TODO: add more clock calculations when adding Uart
    +
    +const std = @import("std");
    +const micro = @import("microzig");
    +const peripherals = micro.peripherals;
    +const RCC = peripherals.RCC;
    +
    +pub const clock = struct {
    +    pub const Domain = enum {
    +        cpu,
    +        ahb,
    +        apb1,
    +        apb2,
    +    };
    +};
    +
    +// Default clock frequencies after reset, see top comment for calculation
    +pub const clock_frequencies = .{
    +    .cpu = 16_000_000,
    +    .ahb = 16_000_000,
    +    .apb1 = 16_000_000,
    +    .apb2 = 16_000_000,
    +};
    +
    +pub fn parsePin(comptime spec: []const u8) type {
    +    const invalid_format_msg = "The given pin '" ++ spec ++ "' has an invalid format. Pins must follow the format \"P{Port}{Pin}\" scheme.";
    +
    +    if (spec[0] != 'P')
    +        @compileError(invalid_format_msg);
    +    if (spec[1] < 'A' or spec[1] > 'K')
    +        @compileError(invalid_format_msg);
    +
    +    const pin_number: comptime_int = std.fmt.parseInt(u4, spec[2..], 10) catch @compileError(invalid_format_msg);
    +
    +    return struct {
    +        /// 'A'...'K'
    +        const gpio_port_name = spec[1..2];
    +        const gpio_port = @field(peripherals, "GPIO" ++ gpio_port_name);
    +        const suffix = std.fmt.comptimePrint("{d}", .{pin_number});
    +    };
    +}
    +
    +fn setRegField(reg: anytype, comptime field_name: anytype, value: anytype) void {
    +    var temp = reg.read();
    +    @field(temp, field_name) = value;
    +    reg.write(temp);
    +}
    +
    +pub const gpio = struct {
    +    pub fn setOutput(comptime pin: type) void {
    +        setRegField(RCC.AHB1ENR, "GPIO" ++ pin.gpio_port_name ++ "EN", 1);
    +        setRegField(@field(pin.gpio_port, "MODER"), "MODER" ++ pin.suffix, 0b01);
    +    }
    +
    +    pub fn setInput(comptime pin: type) void {
    +        setRegField(RCC.AHB1ENR, "GPIO" ++ pin.gpio_port_name ++ "EN", 1);
    +        setRegField(@field(pin.gpio_port, "MODER"), "MODER" ++ pin.suffix, 0b00);
    +    }
    +
    +    pub fn read(comptime pin: type) micro.gpio.State {
    +        const idr_reg = pin.gpio_port.IDR;
    +        const reg_value = @field(idr_reg.read(), "IDR" ++ pin.suffix); // TODO extract to getRegField()?
    +        return @intToEnum(micro.gpio.State, reg_value);
    +    }
    +
    +    pub fn write(comptime pin: type, state: micro.gpio.State) void {
    +        switch (state) {
    +            .low => setRegField(pin.gpio_port.BSRR, "BR" ++ pin.suffix, 1),
    +            .high => setRegField(pin.gpio_port.BSRR, "BS" ++ pin.suffix, 1),
    +        }
    +    }
    +};
    diff --git a/test/programs/minimal.zig b/test/programs/minimal.zig
    new file mode 100644
    index 000000000..5258ce311
    --- /dev/null
    +++ b/test/programs/minimal.zig
    @@ -0,0 +1,5 @@
    +const micro = @import("microzig");
    +
    +pub fn main() void {
    +    // This function will contain the application logic.
    +}
    diff --git a/tests/stm32f103.robot b/test/stm32f103.robot
    similarity index 100%
    rename from tests/stm32f103.robot
    rename to test/stm32f103.robot
    
    From 470cd86348977833936a477bccded645743ff444 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sat, 18 Feb 2023 12:01:58 -0500
    Subject: [PATCH 040/286] add microzig submodule and buildkite pipeline file
     (#1)
    
    ---
     .buildkite/pipeline.yml | 6 ++++++
     .gitmodules             | 3 +++
     deps/microzig           | 1 +
     3 files changed, 10 insertions(+)
     create mode 100644 .buildkite/pipeline.yml
     create mode 100644 .gitmodules
     create mode 160000 deps/microzig
    
    diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml
    new file mode 100644
    index 000000000..5fd8795bc
    --- /dev/null
    +++ b/.buildkite/pipeline.yml
    @@ -0,0 +1,6 @@
    +steps:
    +  - group: Build and Test
    +    steps:
    +    - command: zig build
    +    - label: 🔨 Test
    +      command: renode-test test/nrf52840.robot
    diff --git a/.gitmodules b/.gitmodules
    new file mode 100644
    index 000000000..32e895ccb
    --- /dev/null
    +++ b/.gitmodules
    @@ -0,0 +1,3 @@
    +[submodule "deps/microzig"]
    +	path = deps/microzig
    +	url = https://github.com/ZigEmbeddedGroup/microzig.git
    diff --git a/deps/microzig b/deps/microzig
    new file mode 160000
    index 000000000..97ca5497d
    --- /dev/null
    +++ b/deps/microzig
    @@ -0,0 +1 @@
    +Subproject commit 97ca5497da0f22d025e18bced9311efed088d893
    
    From 42c7a62a3f76d07086e506398f670b04e88fe618 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sat, 18 Feb 2023 16:37:02 -0500
    Subject: [PATCH 041/286] Initial commit
    
    ---
     .buildkite/pipeline.yml   |  4 ++++
     .gitignore                |  2 ++
     .gitmodules               |  3 +++
     LICENSE                   | 19 +++++++++++++++++++
     README.adoc               |  6 ++++++
     build.zig                 | 35 +++++++++++++++++++++++++++++++++++
     deps/microzig             |  1 +
     src/boards.zig            |  6 ++++++
     src/chips.zig             |  6 ++++++
     test/programs/minimal.zig |  5 +++++
     10 files changed, 87 insertions(+)
     create mode 100644 .buildkite/pipeline.yml
     create mode 100644 .gitignore
     create mode 100644 .gitmodules
     create mode 100644 LICENSE
     create mode 100644 README.adoc
     create mode 100644 build.zig
     create mode 160000 deps/microzig
     create mode 100644 src/boards.zig
     create mode 100644 src/chips.zig
     create mode 100644 test/programs/minimal.zig
    
    diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml
    new file mode 100644
    index 000000000..7767bbb66
    --- /dev/null
    +++ b/.buildkite/pipeline.yml
    @@ -0,0 +1,4 @@
    +steps:
    +  - group: Build
    +    steps:
    +    - command: zig build
    diff --git a/.gitignore b/.gitignore
    new file mode 100644
    index 000000000..4c82b07c0
    --- /dev/null
    +++ b/.gitignore
    @@ -0,0 +1,2 @@
    +zig-cache
    +zig-out
    diff --git a/.gitmodules b/.gitmodules
    new file mode 100644
    index 000000000..32e895ccb
    --- /dev/null
    +++ b/.gitmodules
    @@ -0,0 +1,3 @@
    +[submodule "deps/microzig"]
    +	path = deps/microzig
    +	url = https://github.com/ZigEmbeddedGroup/microzig.git
    diff --git a/LICENSE b/LICENSE
    new file mode 100644
    index 000000000..c1cc5ecad
    --- /dev/null
    +++ b/LICENSE
    @@ -0,0 +1,19 @@
    +Copyright (c) 2022 
    +
    +This software is provided 'as-is', without any express or implied warranty. In
    +no event will the authors be held liable for any damages arising from the use
    +of this software.
    +
    +Permission is granted to anyone to use this software for any purpose, including
    +commercial applications, and to alter it and redistribute it freely, subject to
    +the following restrictions:
    +
    +1. The origin of this software must not be misrepresented; you must not claim
    +that you wrote the original software. If you use this software in a product, an
    +acknowledgment in the product documentation would be appreciated but is not
    +required.
    +
    +2. Altered source versions must be plainly marked as such, and must not be
    +misrepresented as being the original software.
    +
    +3. This notice may not be removed or altered from any source distribution.
    diff --git a/README.adoc b/README.adoc
    new file mode 100644
    index 000000000..46ca05775
    --- /dev/null
    +++ b/README.adoc
    @@ -0,0 +1,6 @@
    += Hardware Support Package Template
    +
    +1. Update LICENSE file
    +2. Update `microzig` submodule under `deps/`
    +3. Add chips/boards/hals
    +4. Set up buildkite pipeline
    diff --git a/build.zig b/build.zig
    new file mode 100644
    index 000000000..3b787fe3f
    --- /dev/null
    +++ b/build.zig
    @@ -0,0 +1,35 @@
    +const std = @import("std");
    +const microzig = @import("deps/microzig/src/main.zig");
    +const boards = @import("src/boards.zig");
    +const chips = @import("src/chips.zig");
    +
    +pub fn build(b: *std.build.Builder) void {
    +    const optimize = b.standardOptimizeOption(.{});
    +    inline for (@typeInfo(boards).Struct.decls) |decl| {
    +        if (!decl.is_pub)
    +            continue;
    +
    +        const exe = microzig.addEmbeddedExecutable(
    +            b,
    +            @field(boards, decl.name).name ++ ".minimal",
    +            "test/programs/minimal.zig",
    +            .{ .board = @field(boards, decl.name) },
    +            .{ .optimize = optimize },
    +        );
    +        exe.install();
    +    }
    +
    +    inline for (@typeInfo(chips).Struct.decls) |decl| {
    +        if (!decl.is_pub)
    +            continue;
    +
    +        const exe = microzig.addEmbeddedExecutable(
    +            b,
    +            @field(chips, decl.name).name ++ ".minimal",
    +            "test/programs/minimal.zig",
    +            .{ .chip = @field(chips, decl.name) },
    +            .{ .optimize = optimize },
    +        );
    +        exe.install();
    +    }
    +}
    diff --git a/deps/microzig b/deps/microzig
    new file mode 160000
    index 000000000..97ca5497d
    --- /dev/null
    +++ b/deps/microzig
    @@ -0,0 +1 @@
    +Subproject commit 97ca5497da0f22d025e18bced9311efed088d893
    diff --git a/src/boards.zig b/src/boards.zig
    new file mode 100644
    index 000000000..2cb647a34
    --- /dev/null
    +++ b/src/boards.zig
    @@ -0,0 +1,6 @@
    +const std = @import("std");
    +const microzig = @import("../deps/microzig/src/main.zig");
    +
    +fn root_dir() []const u8 {
    +    return std.fs.path.dirname(@src().file) orelse ".";
    +}
    diff --git a/src/chips.zig b/src/chips.zig
    new file mode 100644
    index 000000000..2cb647a34
    --- /dev/null
    +++ b/src/chips.zig
    @@ -0,0 +1,6 @@
    +const std = @import("std");
    +const microzig = @import("../deps/microzig/src/main.zig");
    +
    +fn root_dir() []const u8 {
    +    return std.fs.path.dirname(@src().file) orelse ".";
    +}
    diff --git a/test/programs/minimal.zig b/test/programs/minimal.zig
    new file mode 100644
    index 000000000..5258ce311
    --- /dev/null
    +++ b/test/programs/minimal.zig
    @@ -0,0 +1,5 @@
    +const micro = @import("microzig");
    +
    +pub fn main() void {
    +    // This function will contain the application logic.
    +}
    
    From fe247e6669a5e7fb56fd74c1c70453bc5c8fcdac Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sat, 18 Feb 2023 17:01:25 -0500
    Subject: [PATCH 042/286] add chip and board definitions (#1)
    
    ---
     LICENSE                     |     2 +-
     README.adoc                 |     7 +-
     src/boards.zig              |     9 +-
     src/boards/mbed_LPC1768.zig |    84 +
     src/chips.zig               |    16 +-
     src/chips/LPC176x5x.json    | 29776 ++++++++++++++++++++++++++++++++++
     src/chips/LPC176x5x.zig     | 12741 +++++++++++++++
     src/hals/LPC176x5x.zig      |   205 +
     8 files changed, 42831 insertions(+), 9 deletions(-)
     create mode 100644 src/boards/mbed_LPC1768.zig
     create mode 100644 src/chips/LPC176x5x.json
     create mode 100644 src/chips/LPC176x5x.zig
     create mode 100644 src/hals/LPC176x5x.zig
    
    diff --git a/LICENSE b/LICENSE
    index c1cc5ecad..bcb425d88 100644
    --- a/LICENSE
    +++ b/LICENSE
    @@ -1,4 +1,4 @@
    -Copyright (c) 2022 
    +Copyright (c) 2022 Zig Embedded Group Contributors
     
     This software is provided 'as-is', without any express or implied warranty. In
     no event will the authors be held liable for any damages arising from the use
    diff --git a/README.adoc b/README.adoc
    index 46ca05775..6e0fc7d9c 100644
    --- a/README.adoc
    +++ b/README.adoc
    @@ -1,6 +1,3 @@
    -= Hardware Support Package Template
    += NXP LPC Hardware Support Package
     
    -1. Update LICENSE file
    -2. Update `microzig` submodule under `deps/`
    -3. Add chips/boards/hals
    -4. Set up buildkite pipeline
    +Please see https://github.com/ZigEmbeddedGroup/lpcboot[lpcboot] as well
    diff --git a/src/boards.zig b/src/boards.zig
    index 2cb647a34..1690f0d93 100644
    --- a/src/boards.zig
    +++ b/src/boards.zig
    @@ -1,6 +1,13 @@
     const std = @import("std");
    -const microzig = @import("../deps/microzig/src/main.zig");
    +const micro = @import("../deps/microzig/src/main.zig");
    +const chips = @import("chips.zig");
     
     fn root_dir() []const u8 {
         return std.fs.path.dirname(@src().file) orelse ".";
     }
    +
    +pub const mbed_lpc1768 = micro.Board{
    +    .name = "mbed LPC1768",
    +    .source = .{ .path = root_dir() ++ "/boards/mbed_LPC1768.zig" },
    +    .chip = chips.lpc176x5x,
    +};
    diff --git a/src/boards/mbed_LPC1768.zig b/src/boards/mbed_LPC1768.zig
    new file mode 100644
    index 000000000..5cf0bd09e
    --- /dev/null
    +++ b/src/boards/mbed_LPC1768.zig
    @@ -0,0 +1,84 @@
    +pub const chip = @import("chip");
    +pub const micro = @import("microzig");
    +
    +pub const clock_frequencies = .{
    +    .cpu = 100_000_000, // 100 Mhz
    +};
    +
    +pub fn debug_write(string: []const u8) void {
    +    const clk_pin = micro.Pin("DIP5");
    +    const dat_pin = micro.Pin("DIP6");
    +
    +    const clk = micro.core.experimental.Gpio(clk_pin, .{ .mode = .output, .initial_state = .low });
    +    const dat = micro.core.experimental.Gpio(dat_pin, .{ .mode = .output, .initial_state = .low });
    +
    +    clk.init();
    +    dat.init();
    +
    +    micro.debug.busy_sleep(1_000);
    +
    +    for (string) |c| {
    +        comptime var i: usize = 128;
    +        inline while (i > 0) : (i = i >> 1) {
    +            if ((c & i) != 0) {
    +                dat.write(.high);
    +            } else {
    +                dat.write(.low);
    +            }
    +            clk.write(.high);
    +            micro.debug.busy_sleep(1_000);
    +            clk.write(.low);
    +            micro.debug.busy_sleep(1_000);
    +        }
    +    }
    +    dat.write(.low);
    +    clk.write(.low);
    +}
    +
    +pub const pin_map = .{
    +    // Onboard-LEDs
    +    .@"LED-1" = "P1.18",
    +    .@"LED-2" = "P1.20",
    +    .@"LED-3" = "P1.21",
    +    .@"LED-4" = "P1.23",
    +    .LED_LINK = "P1.25",
    +    .LED_SPEED = "P1.26",
    +
    +    // Ethernet
    +    .@"TD+" = "P1.0",
    +    .@"TD-" = "P1.1",
    +    .@"RD+" = "P1.9",
    +    .@"RD-" = "P1.10",
    +
    +    // USB
    +    .@"D+" = "P0.29",
    +    .@"D-" = "P0.30",
    +
    +    // GPIO pins
    +    .DIP5 = "P0.9",
    +    .DIP6 = "P0.8",
    +    .DIP7 = "P0.7",
    +    .DIP8 = "P0.6",
    +    .DIP9 = "P0.0",
    +    .DIP10 = "P0.1",
    +    .DIP11 = "P0.18",
    +    .DIP12 = "P0.17",
    +    .DIP13 = "P0.15",
    +    .DIP14 = "P0.16",
    +    .DIP15 = "P0.23",
    +    .DIP16 = "P0.24",
    +    .DIP17 = "P0.25",
    +    .DIP18 = "P0.26",
    +    .DIP19 = "P1.30",
    +    .DIP20 = "P1.31",
    +    .DIP21 = "P2.5",
    +    .DIP22 = "P2.4",
    +    .DIP23 = "P2.3",
    +    .DIP24 = "P2.2",
    +    .DIP25 = "P2.1",
    +    .DIP26 = "P2.0",
    +    .DIP27 = "P0.11",
    +    .DIP28 = "P0.10",
    +    .DIP29 = "P0.5",
    +    .DIP30 = "P0.4",
    +};
    diff --git a/src/chips.zig b/src/chips.zig
    index 2cb647a34..0e8592591 100644
    --- a/src/chips.zig
    +++ b/src/chips.zig
    @@ -1,6 +1,18 @@
     const std = @import("std");
    -const microzig = @import("../deps/microzig/src/main.zig");
    +const micro = @import("../deps/microzig/src/main.zig");
    +const Chip = micro.Chip;
    +const MemoryRegion = micro.MemoryRegion;
     
     fn root_dir() []const u8 {
    -    return std.fs.path.dirname(@src().file) orelse ".";
    +    return std.fs.path.dirname(@src().file) orelse unreachable;
     }
    +
    +pub const lpc176x5x = Chip.from_standard_paths(root_dir(), .{
    +    .name = "LPC176x5x",
    +    .cpu = micro.cpus.cortex_m3,
    +    .memory_regions = &.{
    +        MemoryRegion{ .offset = 0x00000000, .length = 512 * 1024, .kind = .flash },
    +        MemoryRegion{ .offset = 0x10000000, .length = 32 * 1024, .kind = .ram },
    +        MemoryRegion{ .offset = 0x2007C000, .length = 32 * 1024, .kind = .ram },
    +    },
    +});
    diff --git a/src/chips/LPC176x5x.json b/src/chips/LPC176x5x.json
    new file mode 100644
    index 000000000..5b179895a
    --- /dev/null
    +++ b/src/chips/LPC176x5x.json
    @@ -0,0 +1,29776 @@
    +{
    +  "version": "0.1.0",
    +  "types": {
    +    "peripherals": {
    +      "WDT": {
    +        "description": "Watchdog Timer (WDT) ",
    +        "children": {
    +          "registers": {
    +            "MOD": {
    +              "description": "Watchdog mode register. This register determines the basic mode and status of the Watchdog Timer.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WDEN": {
    +                    "description": "Watchdog enable bit. This bit is Set Only.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "STOP": {
    +                            "description": "The watchdog timer is stopped.",
    +                            "value": 0
    +                          },
    +                          "RUN": {
    +                            "description": "The watchdog timer is running.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "WDRESET": {
    +                    "description": "Watchdog reset enable bit. This bit is Set Only. See Table 652.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORESET": {
    +                            "description": "A watchdog timeout will not cause a chip reset.",
    +                            "value": 0
    +                          },
    +                          "RESET": {
    +                            "description": "A watchdog timeout will cause a chip reset.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "WDTOF": {
    +                    "description": "Watchdog time-out flag. Set when the watchdog timer times out, cleared by software.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "WDINT": {
    +                    "description": "Watchdog interrupt flag.  Cleared by software.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 4,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            },
    +            "TC": {
    +              "description": "Watchdog timer constant register. The value in this register determines the time-out value.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 255,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "Count": {
    +                    "description": "Watchdog time-out interval.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "FEED": {
    +              "description": "Watchdog feed sequence register. Writing 0xAA followed by 0x55 to this register reloads the Watchdog timer with the value contained in WDTC.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "Feed": {
    +                    "description": "Feed value should be 0xAA followed by 0x55.",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TV": {
    +              "description": "Watchdog timer value register. This register reads out the current value of the Watchdog timer.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 255,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "Count": {
    +                    "description": "Counter timer value.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CLKSEL": {
    +              "description": "Watchdog clock select register.",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 1,
    +                    "size": 30
    +                  },
    +                  "LOCK": {
    +                    "description": "If this bit is set to one writing to this register does not affect bit 0. The clock source can only be changed by first clearing this bit, then writing the new value of bit 0.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "UNLOCKED": {
    +                            "description": "This bit is set to 0 on any reset. It cannot be cleared by software.",
    +                            "value": 0
    +                          },
    +                          "LOCKED": {
    +                            "description": "Software can set this bit to 1 at any time. Once WDLOCK is set, the bits of this register\n\t\t\t\t\t\t\t\t\t\tcannot be modified.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIMER0": {
    +        "description": "Timer0/1/2/3  ",
    +        "children": {
    +          "registers": {
    +            "IR": {
    +              "description": "Interrupt Register. The IR can be written to clear interrupts. The IR can be read to identify which of eight possible interrupt sources are pending.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MR0INT": {
    +                    "description": "Interrupt flag for match channel 0.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MR1INT": {
    +                    "description": "Interrupt flag for match channel 1.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MR2INT": {
    +                    "description": "Interrupt flag for match channel 2.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MR3INT": {
    +                    "description": "Interrupt flag for match channel 3.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CR0INT": {
    +                    "description": "Interrupt flag for capture channel 0 event.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CR1INT": {
    +                    "description": "Interrupt flag for capture channel 1 event.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 6,
    +                    "size": 26
    +                  }
    +                }
    +              }
    +            },
    +            "TCR": {
    +              "description": "Timer Control Register. The TCR is used to control the Timer Counter functions. The Timer Counter can be disabled or reset through the TCR.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CEN": {
    +                    "description": "When one, the Timer Counter and Prescale Counter are enabled for counting. When zero, the counters are disabled.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CRST": {
    +                    "description": "When one, the Timer Counter and the Prescale Counter are synchronously reset on the next positive edge of PCLK. The counters remain reset until TCR[1] is returned to zero.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 2,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "TC": {
    +              "description": "Timer Counter. The 32 bit TC is incremented every PR+1 cycles of PCLK. The TC is controlled through the TCR.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TC": {
    +                    "description": "Timer counter value.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PR": {
    +              "description": "Prescale Register. When the Prescale Counter (PC) is equal to this value, the next clock increments the TC and clears the PC.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PM": {
    +                    "description": "Prescale counter maximum value.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PC": {
    +              "description": "Prescale Counter. The 32 bit PC is a counter which is incremented to the value stored in PR. When the value in PR is reached, the TC is incremented and the PC is cleared. The PC is observable and controllable through the bus interface.",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PC": {
    +                    "description": "Prescale counter value.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MCR": {
    +              "description": "Match Control Register. The MCR is used to control if an interrupt is generated and if the TC is reset when a Match occurs.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MR0I": {
    +                    "description": "Interrupt on MR0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INTERRUPT_IS_GENERAT": {
    +                            "description": "Interrupt is generated when MR0 matches the value in the TC.",
    +                            "value": 1
    +                          },
    +                          "INTERRUPT_IS_DISABLE": {
    +                            "description": "Interrupt is disabled",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MR0R": {
    +                    "description": "Reset on MR0",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TC_WILL_BE_RESET_IF_": {
    +                            "description": "TC will be reset if MR0 matches it.",
    +                            "value": 1
    +                          },
    +                          "FEATURE_DISABLED_": {
    +                            "description": "Feature disabled.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MR0S": {
    +                    "description": "Stop on MR0",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TC_AND_PC_WILL_BE_ST": {
    +                            "description": "TC and PC will be stopped and TCR[0] will be set to 0 if MR0 matches the TC.",
    +                            "value": 1
    +                          },
    +                          "FEATURE_DISABLED_": {
    +                            "description": "Feature disabled.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MR1I": {
    +                    "description": "Interrupt on MR1",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INTERRUPT_IS_GENERAT": {
    +                            "description": "Interrupt is generated when MR1 matches the value in the TC.",
    +                            "value": 1
    +                          },
    +                          "INTERRUPT_IS_DISABLE": {
    +                            "description": "Interrupt is disabled.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MR1R": {
    +                    "description": "Reset on MR1",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TC_WILL_BE_RESET_IF_": {
    +                            "description": "TC will be reset if MR1 matches it.",
    +                            "value": 1
    +                          },
    +                          "FEATURE_DISABLED_": {
    +                            "description": "Feature disabled.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MR1S": {
    +                    "description": "Stop on MR1",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TC_AND_PC_WILL_BE_ST": {
    +                            "description": "TC and PC will be stopped and TCR[0] will be set to 0 if MR1 matches the TC.",
    +                            "value": 1
    +                          },
    +                          "FEATURE_DISABLED_": {
    +                            "description": "Feature disabled.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MR2I": {
    +                    "description": "Interrupt on MR2",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INTERRUPT_IS_GENERAT": {
    +                            "description": "Interrupt is generated when MR2 matches the value in the TC.",
    +                            "value": 1
    +                          },
    +                          "INTERRUPT_IS_DISABLE": {
    +                            "description": "Interrupt is disabled",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MR2R": {
    +                    "description": "Reset on MR2",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TC_WILL_BE_RESET_IF_": {
    +                            "description": "TC will be reset if MR2 matches it.",
    +                            "value": 1
    +                          },
    +                          "FEATURE_DISABLED_": {
    +                            "description": "Feature disabled.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MR2S": {
    +                    "description": "Stop on MR2.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TC_AND_PC_WILL_BE_ST": {
    +                            "description": "TC and PC will be stopped and TCR[0] will be set to 0 if MR2 matches the TC",
    +                            "value": 1
    +                          },
    +                          "FEATURE_DISABLED_": {
    +                            "description": "Feature disabled.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MR3I": {
    +                    "description": "Interrupt on MR3",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INTERRUPT_IS_GENERAT": {
    +                            "description": "Interrupt is generated when MR3 matches the value in the TC.",
    +                            "value": 1
    +                          },
    +                          "THIS_INTERRUPT_IS_DI": {
    +                            "description": "This interrupt is disabled",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MR3R": {
    +                    "description": "Reset on MR3",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TC_WILL_BE_RESET_IF_": {
    +                            "description": "TC will be reset if MR3 matches it.",
    +                            "value": 1
    +                          },
    +                          "FEATURE_DISABLED_": {
    +                            "description": "Feature disabled.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MR3S": {
    +                    "description": "Stop on MR3",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TC_AND_PC_WILL_BE_ST": {
    +                            "description": "TC and PC will be stopped and TCR[0] will be set to 0 if MR3 matches the TC.",
    +                            "value": 1
    +                          },
    +                          "FEATURE_DISABLED_": {
    +                            "description": "Feature disabled.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 12,
    +                    "size": 20
    +                  }
    +                }
    +              }
    +            },
    +            "CCR": {
    +              "description": "Capture Control Register. The CCR controls which edges of the capture inputs are used to load the Capture Registers and whether or not an interrupt is generated when a capture takes place.",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CAP0RE": {
    +                    "description": "Capture on CAPn.0 rising edge",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ENABLE": {
    +                            "description": "A sequence of 0 then 1 on CAPn.0 will cause CR0 to be loaded with the contents of TC.",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "This feature is disabled.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CAP0FE": {
    +                    "description": "Capture on CAPn.0 falling edge",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ENABLE": {
    +                            "description": "A sequence of 1 then 0 on CAPn.0 will cause CR0 to be loaded with the contents of TC.",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "This feature is disabled.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CAP0I": {
    +                    "description": "Interrupt on CAPn.0 event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ENABLE": {
    +                            "description": "A CR0 load due to a CAPn.0 event will generate an interrupt.",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "This feature is disabled.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CAP1RE": {
    +                    "description": "Capture on CAPn.1 rising edge",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ENABLE": {
    +                            "description": "A sequence of 0 then 1 on CAPn.1 will cause CR1 to be loaded with the contents of TC.",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "This feature is disabled.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CAP1FE": {
    +                    "description": "Capture on CAPn.1 falling edge",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ENABLE": {
    +                            "description": "A sequence of 1 then 0 on CAPn.1 will cause CR1 to be loaded with the contents of TC.",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "This feature is disabled.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CAP1I": {
    +                    "description": "Interrupt on CAPn.1 event",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ENABLE": {
    +                            "description": "A CR1 load due to a CAPn.1 event will generate an interrupt.",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "This feature is disabled.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 6,
    +                    "size": 26
    +                  }
    +                }
    +              }
    +            },
    +            "EMR": {
    +              "description": "External Match Register. The EMR controls the external match pins.",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EM0": {
    +                    "description": "External Match 0. When a match occurs between the TC and MR0, this bit can either toggle, go low, go high, or do nothing, depending on bits 5:4 of this register. This bit can be driven onto a MATn.0 pin, in a positive-logic manner (0 = low, 1 = high).",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EM1": {
    +                    "description": "External Match 1. When a match occurs between the TC and MR1, this bit can either toggle, go low, go high, or do nothing, depending on bits 7:6 of this register. This bit can be driven onto a MATn.1 pin, in a positive-logic manner (0 = low, 1 = high).",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EM2": {
    +                    "description": "External Match 2. When a match occurs between the TC and MR2, this bit can either toggle, go low, go high, or do nothing, depending on bits 9:8 of this register. This bit can be driven onto a MATn.0 pin, in a positive-logic manner (0 = low, 1 = high).",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EM3": {
    +                    "description": "External Match 3. When a match occurs between the TC and MR3, this bit can either toggle, go low, go high, or do nothing, depending on bits 11:10 of this register. This bit can be driven onto a MATn.0 pin, in a positive-logic manner (0 = low, 1 = high).",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EMC0": {
    +                    "description": "External Match Control 0. Determines the functionality of External Match 0.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DO_NOTHING_": {
    +                            "description": "Do Nothing.",
    +                            "value": 0
    +                          },
    +                          "CLEAR_THE_CORRESPOND": {
    +                            "description": "Clear the corresponding External Match bit/output to 0 (MATn.m pin is LOW if pinned out).",
    +                            "value": 1
    +                          },
    +                          "SET_THE_CORRESPONDIN": {
    +                            "description": "Set the corresponding External Match bit/output to 1 (MATn.m pin is HIGH if pinned out).",
    +                            "value": 2
    +                          },
    +                          "TOGGLE_THE_CORRESPON": {
    +                            "description": "Toggle the corresponding External Match bit/output.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EMC1": {
    +                    "description": "External Match Control 1. Determines the functionality of External Match 1.",
    +                    "offset": 6,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DO_NOTHING_": {
    +                            "description": "Do Nothing.",
    +                            "value": 0
    +                          },
    +                          "CLEAR_THE_CORRESPOND": {
    +                            "description": "Clear the corresponding External Match bit/output to 0 (MATn.m pin is LOW if pinned out).",
    +                            "value": 1
    +                          },
    +                          "SET_THE_CORRESPONDIN": {
    +                            "description": "Set the corresponding External Match bit/output to 1 (MATn.m pin is HIGH if pinned out).",
    +                            "value": 2
    +                          },
    +                          "TOGGLE_THE_CORRESPON": {
    +                            "description": "Toggle the corresponding External Match bit/output.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EMC2": {
    +                    "description": "External Match Control 2. Determines the functionality of External Match 2.",
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DO_NOTHING_": {
    +                            "description": "Do Nothing.",
    +                            "value": 0
    +                          },
    +                          "CLEAR_THE_CORRESPOND": {
    +                            "description": "Clear the corresponding External Match bit/output to 0 (MATn.m pin is LOW if pinned out).",
    +                            "value": 1
    +                          },
    +                          "SET_THE_CORRESPONDIN": {
    +                            "description": "Set the corresponding External Match bit/output to 1 (MATn.m pin is HIGH if pinned out).",
    +                            "value": 2
    +                          },
    +                          "TOGGLE_THE_CORRESPON": {
    +                            "description": "Toggle the corresponding External Match bit/output.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EMC3": {
    +                    "description": "External Match Control 3. Determines the functionality of External Match 3.",
    +                    "offset": 10,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DO_NOTHING_": {
    +                            "description": "Do Nothing.",
    +                            "value": 0
    +                          },
    +                          "CLEAR_THE_CORRESPOND": {
    +                            "description": "Clear the corresponding External Match bit/output to 0 (MATn.m pin is LOW if pinned out).",
    +                            "value": 1
    +                          },
    +                          "SET_THE_CORRESPONDIN": {
    +                            "description": "Set the corresponding External Match bit/output to 1 (MATn.m pin is HIGH if pinned out).",
    +                            "value": 2
    +                          },
    +                          "TOGGLE_THE_CORRESPON": {
    +                            "description": "Toggle the corresponding External Match bit/output.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 12,
    +                    "size": 20
    +                  }
    +                }
    +              }
    +            },
    +            "CTCR": {
    +              "description": "Count Control Register. The CTCR selects between Timer and Counter mode, and in Counter mode selects the signal and edge(s) for counting.",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTMODE": {
    +                    "description": "Counter/Timer Mode This field selects which rising PCLK edges can increment Timer's Prescale Counter (PC), or clear PC and increment Timer Counter (TC). Timer Mode: the TC is incremented when the Prescale Counter matches the Prescale Register.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TIMER_MODE_EVERY_RI": {
    +                            "description": "Timer Mode: every rising PCLK edge",
    +                            "value": 0
    +                          },
    +                          "RISING": {
    +                            "description": "Counter Mode: TC is incremented on rising edges on the CAP input selected by bits 3:2.",
    +                            "value": 1
    +                          },
    +                          "FALLING": {
    +                            "description": "Counter Mode: TC is incremented on falling edges on the CAP input selected by bits 3:2.",
    +                            "value": 2
    +                          },
    +                          "DUALEDGE": {
    +                            "description": "Counter Mode: TC is incremented on both edges on the CAP input selected by bits 3:2.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CINSEL": {
    +                    "description": "Count Input Select When bits 1:0 in this register are not 00, these bits select which CAP pin is sampled for clocking. Note: If Counter mode is selected for a particular CAPn input in the TnCTCR, the 3 bits for that input in the Capture Control Register (TnCCR) must be programmed as 000. However, capture and/or interrupt can be selected for the other 3 CAPn inputs in the same timer.",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CAPN_0_FOR_TIMERN": {
    +                            "description": "CAPn.0 for TIMERn",
    +                            "value": 0
    +                          },
    +                          "CAPN_1_FOR_TIMERN": {
    +                            "description": "CAPn.1 for TIMERn",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 4,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "GPIO": {
    +        "description": "General Purpose I/O "
    +      },
    +      "UART0": {
    +        "description": "UART0/2/3  ",
    +        "children": {
    +          "registers": {
    +            "RBR": {
    +              "description": "Receiver Buffer Register. Contains the next received character to be read (DLAB =0).",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RBR": {
    +                    "description": "The UARTn Receiver Buffer Register contains the oldest received byte in the UARTn Rx FIFO.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, the value read from a reserved bit is not defined.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "THR": {
    +              "description": "Transmit Holding Regiter. The next character to be transmitted is written here (DLAB =0).",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "THR": {
    +                    "description": "Writing to the UARTn Transmit Holding Register causes the data to be stored in the UARTn transmit FIFO. The byte will be sent when it reaches the bottom of the FIFO and the transmitter is available.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "DLL": {
    +              "description": "Divisor Latch LSB. Least significant byte of the baud rate divisor value. The full divisor is used to generate a baud rate from the fractional rate divider (DLAB =1).",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DLLSB": {
    +                    "description": "The UARTn Divisor Latch LSB Register, along with the UnDLM register, determines the baud rate of the UARTn.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "DLM": {
    +              "description": "Divisor Latch MSB. Most significant byte of the baud rate divisor value. The full divisor is used to generate a baud rate from the fractional rate divider (DLAB =1).",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DLMSB": {
    +                    "description": "The UARTn Divisor Latch MSB Register, along with the U0DLL register, determines the baud rate of the UARTn.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "IER": {
    +              "description": "Interrupt Enable Register. Contains individual interrupt enable bits for the 7 potential UART interrupts (DLAB =0).",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RBRIE": {
    +                    "description": "RBR Interrupt Enable. Enables the Receive Data Available interrupt for UARTn. It also controls the Character Receive Time-out interrupt.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_THE_RDA_INTE": {
    +                            "description": "Disable the RDA interrupts.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_THE_RDA_INTER": {
    +                            "description": "Enable the RDA interrupts.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "THREIE": {
    +                    "description": "THRE Interrupt Enable. Enables the THRE interrupt for UARTn. The status of this can be read from UnLSR[5].",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_THE_THRE_INT": {
    +                            "description": "Disable the THRE interrupts.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_THE_THRE_INTE": {
    +                            "description": "Enable the THRE interrupts.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXIE": {
    +                    "description": "RX Line Status Interrupt Enable. Enables the UARTn RX line status interrupts. The status of this interrupt can be read from UnLSR[4:1].",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_THE_RX_LINE_": {
    +                            "description": "Disable the RX line status interrupts.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_THE_RX_LINE_S": {
    +                            "description": "Enable the RX line status interrupts.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 10,
    +                    "size": 22
    +                  },
    +                  "ABEOINTEN": {
    +                    "description": "Enables the end of auto-baud interrupt.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_END_OF_AUTO_": {
    +                            "description": "Disable end of auto-baud Interrupt.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_END_OF_AUTO_B": {
    +                            "description": "Enable end of auto-baud Interrupt.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ABTOINTEN": {
    +                    "description": "Enables the auto-baud time-out interrupt.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_AUTO_BAUD_TI": {
    +                            "description": "Disable auto-baud time-out Interrupt.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_AUTO_BAUD_TIM": {
    +                            "description": "Enable auto-baud time-out Interrupt.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "IIR": {
    +              "description": "Interrupt ID Register. Identifies which interrupt(s) are pending.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INTSTATUS": {
    +                    "description": "Interrupt status. Note that UnIIR[0] is active low. The pending interrupt can be determined by evaluating UnIIR[3:1].",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "AT_LEAST_ONE_INTERRU": {
    +                            "description": "At least one interrupt is pending.",
    +                            "value": 0
    +                          },
    +                          "NO_INTERRUPT_IS_PEND": {
    +                            "description": "No interrupt is pending.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTID": {
    +                    "description": "Interrupt identification. UnIER[3:1] identifies an interrupt corresponding to the UARTn Rx or TX FIFO. All other combinations of UnIER[3:1] not listed below are reserved (000,100,101,111).",
    +                    "offset": 1,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "1_RECEIVE_LINE_S": {
    +                            "description": "1   - Receive Line Status (RLS).",
    +                            "value": 3
    +                          },
    +                          "2A__RECEIVE_DATA_AV": {
    +                            "description": "2a - Receive Data Available (RDA).",
    +                            "value": 2
    +                          },
    +                          "2B__CHARACTER_TIME_": {
    +                            "description": "2b - Character Time-out Indicator (CTI).",
    +                            "value": 6
    +                          },
    +                          "3_THRE_INTERRUPT": {
    +                            "description": "3   - THRE Interrupt",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 10,
    +                    "size": 22
    +                  },
    +                  "FIFOENABLE": {
    +                    "description": "Copies of UnFCR[0].",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "ABEOINT": {
    +                    "description": "End of auto-baud interrupt. True if auto-baud has finished successfully and interrupt is enabled.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ABTOINT": {
    +                    "description": "Auto-baud time-out interrupt. True if auto-baud has timed out and interrupt is enabled.",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FCR": {
    +              "description": "FIFO Control Register. Controls UART FIFO usage and modes.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "FIFOEN": {
    +                    "description": "FIFO Enable.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "UARTN_FIFOS_ARE_DISA": {
    +                            "description": "UARTn FIFOs are disabled. Must not be used in the application.",
    +                            "value": 0
    +                          },
    +                          "ACTIVE_HIGH_ENABLE_F": {
    +                            "description": "Active high enable for both UARTn Rx and TX FIFOs and UnFCR[7:1] access. This bit must be set for proper UART operation. Any transition on this bit will automatically clear the related UART FIFOs.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXFIFORES": {
    +                    "description": "RX FIFO Reset.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NO_IMPACT_ON_EITHER_": {
    +                            "description": "No impact on either of UARTn FIFOs.",
    +                            "value": 0
    +                          },
    +                          "WRITING_A_LOGIC_1_TO": {
    +                            "description": "Writing a logic 1 to UnFCR[1] will clear all bytes in UARTn Rx FIFO, reset the pointer logic. This bit is self-clearing.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXFIFORES": {
    +                    "description": "TX FIFO Reset.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NO_IMPACT_ON_EITHER_": {
    +                            "description": "No impact on either of UARTn FIFOs.",
    +                            "value": 0
    +                          },
    +                          "WRITING_A_LOGIC_1_TO": {
    +                            "description": "Writing a logic 1 to UnFCR[2] will clear all bytes in UARTn TX FIFO, reset the pointer logic. This bit is self-clearing.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DMAMODE": {
    +                    "description": "DMA Mode Select. When the FIFO enable (bit 0 of this register) is set, this bit selects the DMA mode. See Section 18.6.6.1.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  },
    +                  "RXTRIGLVL": {
    +                    "description": "RX Trigger Level. These two bits determine how many receiver UARTn FIFO characters must be written before an interrupt or DMA request is activated.",
    +                    "offset": 6,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TRIGGER_LEVEL_0_1_C": {
    +                            "description": "Trigger level 0 (1 character or 0x01).",
    +                            "value": 0
    +                          },
    +                          "TRIGGER_LEVEL_1_4_C": {
    +                            "description": "Trigger level 1 (4 characters or 0x04).",
    +                            "value": 1
    +                          },
    +                          "TRIGGER_LEVEL_2_8_C": {
    +                            "description": "Trigger level 2 (8 characters or 0x08).",
    +                            "value": 2
    +                          },
    +                          "TRIGGER_LEVEL_3_14_": {
    +                            "description": "Trigger level 3 (14 characters or 0x0E).",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "LCR": {
    +              "description": "Line Control Register. Contains controls for frame formatting and break generation.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WLS": {
    +                    "description": "Word Length Select.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "5_BIT_CHARACTER_LENG": {
    +                            "description": "5-bit character length",
    +                            "value": 0
    +                          },
    +                          "6_BIT_CHARACTER_LENG": {
    +                            "description": "6-bit character length",
    +                            "value": 1
    +                          },
    +                          "7_BIT_CHARACTER_LENG": {
    +                            "description": "7-bit character length",
    +                            "value": 2
    +                          },
    +                          "8_BIT_CHARACTER_LENG": {
    +                            "description": "8-bit character length",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SBS": {
    +                    "description": "Stop Bit Select",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "1_STOP_BIT_": {
    +                            "description": "1 stop bit.",
    +                            "value": 0
    +                          },
    +                          "2_STOP_BITS_1_5_IF_": {
    +                            "description": "2 stop bits (1.5 if UnLCR[1:0]=00).",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PE": {
    +                    "description": "Parity Enable.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_PARITY_GENER": {
    +                            "description": "Disable parity generation and checking.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_PARITY_GENERA": {
    +                            "description": "Enable parity generation and checking.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PS": {
    +                    "description": "Parity Select",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ODD_PARITY_NUMBER_O": {
    +                            "description": "Odd parity. Number of 1s in the transmitted character and the attached parity bit will be odd.",
    +                            "value": 0
    +                          },
    +                          "EVEN_PARITY_NUMBER_": {
    +                            "description": "Even Parity. Number of 1s in the transmitted character and the attached parity bit will be even.",
    +                            "value": 1
    +                          },
    +                          "FORCED_1_STICK_PARIT": {
    +                            "description": "Forced 1 stick parity.",
    +                            "value": 2
    +                          },
    +                          "FORCED_0_STICK_PARIT": {
    +                            "description": "Forced 0 stick parity.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "BC": {
    +                    "description": "Break Control",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_BREAK_TRANSM": {
    +                            "description": "Disable break transmission.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_BREAK_TRANSMI": {
    +                            "description": "Enable break transmission. Output pin UARTn TXD is forced to logic 0 when UnLCR[6] is active high.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DLAB": {
    +                    "description": "Divisor Latch Access Bit",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_ACCESS_TO_DI": {
    +                            "description": "Disable access to Divisor Latches.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_ACCESS_TO_DIV": {
    +                            "description": "Enable access to Divisor Latches.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "LSR": {
    +              "description": "Line Status Register. Contains flags for transmit and receive status, including line errors.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 96,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RDR": {
    +                    "description": "Receiver Data Ready. UnLSR[0] is set when the UnRBR holds an unread character and is cleared when the UARTn RBR FIFO is empty.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "EMPTY": {
    +                            "description": "The UARTn receiver FIFO is empty.",
    +                            "value": 0
    +                          },
    +                          "NOTEMPTY": {
    +                            "description": "The UARTn receiver FIFO is not empty.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OE": {
    +                    "description": "Overrun Error. The overrun error condition is set as soon as it occurs. An UnLSR read clears UnLSR[1]. UnLSR[1] is set when UARTn RSR has a new character assembled and the UARTn RBR FIFO is full. In this case, the UARTn RBR FIFO will not be overwritten and the character in the UARTn RSR will be lost.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "Overrun error status is inactive.",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "Overrun error status is active.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PE": {
    +                    "description": "Parity Error. When the parity bit of a received character is in the wrong state, a parity error occurs. An UnLSR read clears UnLSR[2]. Time of parity error detection is dependent on UnFCR[0]. Note: A parity error is associated with the character at the top of the UARTn RBR FIFO.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "Parity error status is inactive.",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "Parity error status is active.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FE": {
    +                    "description": "Framing Error. When the stop bit of a received character is a logic 0, a framing error occurs. An UnLSR read clears UnLSR[3]. The time of the framing error detection is dependent on UnFCR[0]. Upon detection of a framing error, the Rx will attempt to resynchronize to the data and assume that the bad stop bit is actually an early start bit. However, it cannot be assumed that the next received byte will be correct even if there is no Framing Error. Note: A framing error is associated with the character at the top of the UARTn RBR FIFO.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "Framing error status is inactive.",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "Framing error status is active.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "BI": {
    +                    "description": "Break Interrupt. When RXDn is held in the spacing state (all zeroes) for one full character transmission (start, data, parity, stop), a break interrupt occurs. Once the break condition has been detected, the receiver goes idle until RXDn goes to marking state (all ones). An UnLSR read clears this status bit. The time of break detection is dependent on UnFCR[0]. Note: The break interrupt is associated with the character at the top of the UARTn RBR FIFO.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "Break interrupt status is inactive.",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "Break interrupt status is active.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "THRE": {
    +                    "description": "Transmitter Holding Register Empty.  THRE is set immediately upon detection of an empty UARTn THR and is cleared on a UnTHR write.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "VALIDDATA": {
    +                            "description": "UnTHR contains valid data.",
    +                            "value": 0
    +                          },
    +                          "EMPTY": {
    +                            "description": "UnTHR is empty.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TEMT": {
    +                    "description": "Transmitter Empty. TEMT is set when both UnTHR and UnTSR are empty; TEMT is cleared when either the UnTSR or the UnTHR contain valid data.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "VALIDDATA": {
    +                            "description": "UnTHR and/or the UnTSR contains valid data.",
    +                            "value": 0
    +                          },
    +                          "EMPTY": {
    +                            "description": "UnTHR and the UnTSR are empty.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXFE": {
    +                    "description": "Error in RX FIFO . UnLSR[7] is set when a character with a Rx error such as framing error, parity error or break interrupt, is loaded into the UnRBR. This bit is cleared when the UnLSR register is read and there are no subsequent errors in the UARTn FIFO.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NOERROR": {
    +                            "description": "UnRBR contains no UARTn RX errors or UnFCR[0]=0.",
    +                            "value": 0
    +                          },
    +                          "ERRORS": {
    +                            "description": "UARTn RBR contains at least one UARTn RX error.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from a reserved bit is not defined.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "SCR": {
    +              "description": "Scratch Pad Register. 8-bit temporary storage for software.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PAD": {
    +                    "description": "A readable, writable byte.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "ACR": {
    +              "description": "Auto-baud Control Register. Contains controls for the auto-baud feature.",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "START": {
    +                    "description": "Start bit. This bit is automatically cleared after auto-baud completion.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "AUTO_BAUD_STOP_AUTO": {
    +                            "description": "Auto-baud stop (auto-baud is not running).",
    +                            "value": 0
    +                          },
    +                          "AUTO_BAUD_START_AUT": {
    +                            "description": "Auto-baud start (auto-baud is running). Auto-baud run bit. This bit is automatically cleared after auto-baud completion.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MODE": {
    +                    "description": "Auto-baud mode select bit.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "MODE_0_": {
    +                            "description": "Mode 0.",
    +                            "value": 0
    +                          },
    +                          "MODE_1_": {
    +                            "description": "Mode 1.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AUTORESTART": {
    +                    "description": "Restart bit.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NO_RESTART_": {
    +                            "description": "No restart.",
    +                            "value": 0
    +                          },
    +                          "RESTART_IN_CASE_OF_T": {
    +                            "description": "Restart in case of time-out (counter restarts at next UARTn Rx falling edge)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 10,
    +                    "size": 22
    +                  },
    +                  "ABEOINTCLR": {
    +                    "description": "End of auto-baud interrupt clear bit (write-only accessible). Writing a 1 will clear the corresponding interrupt in the UnIIR. Writing a 0 has no impact.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NO_IMPACT_": {
    +                            "description": "No impact.",
    +                            "value": 0
    +                          },
    +                          "CLEAR_THE_CORRESPOND": {
    +                            "description": "Clear the corresponding interrupt in the IIR.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ABTOINTCLR": {
    +                    "description": "Auto-baud time-out interrupt clear bit (write-only accessible). Writing a 1 will clear the corresponding interrupt in the UnIIR. Writing a 0 has no impact.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NO_IMPACT_": {
    +                            "description": "No impact.",
    +                            "value": 0
    +                          },
    +                          "CLEAR_THE_CORRESPOND": {
    +                            "description": "Clear the corresponding interrupt in the IIR.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "FDR": {
    +              "description": "Fractional Divider Register. Generates a clock input for the baud rate divider.",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 16,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DIVADDVAL": {
    +                    "description": "Baud-rate generation pre-scaler divisor value. If this field is 0, fractional baud-rate generator will not impact the UARTn baudrate.",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "MULVAL": {
    +                    "description": "Baud-rate pre-scaler multiplier value. This field must be greater or equal 1 for UARTn to operate properly, regardless of whether the fractional baud-rate generator is used or not.",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "TER": {
    +              "description": "Transmit Enable Register. Turns off UART transmitter for use with software flow control.",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  },
    +                  "TXEN": {
    +                    "description": "When this bit is 1, as it is after a Reset, data written to the THR is output on the TXD pin as soon as any preceding data has been sent. If this bit is cleared to 0 while a character is being sent, the transmission of that character is completed, but no further characters are sent until this bit is set again. In other words, a 0 in this bit blocks the transfer of characters from the THR or TX FIFO into the transmit shift register. Software implementing software-handshaking can clear this bit when it receives an XOFF character (DC3). Software can set this bit again when it receives an XON (DC1) character.",
    +                    "offset": 7,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RS485CTRL": {
    +              "description": "RS-485/EIA-485 Control. Contains controls to configure various aspects of RS-485/EIA-485 modes.",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NMMEN": {
    +                    "description": "NMM enable.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED": {
    +                            "description": "RS-485/EIA-485 Normal Multidrop Mode (NMM) is disabled.",
    +                            "value": 0
    +                          },
    +                          "ENABLED": {
    +                            "description": "RS-485/EIA-485 Normal Multidrop Mode (NMM) is enabled. In this mode, an address is detected when a received byte has the parity bit = 1, generating a received data interrupt. See Section 18.6.16 RS-485/EIA-485 modes of operation.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXDIS": {
    +                    "description": "Receiver enable.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ENABLED": {
    +                            "description": "The receiver is enabled.",
    +                            "value": 0
    +                          },
    +                          "DISABLED": {
    +                            "description": "The receiver is disabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AADEN": {
    +                    "description": "AAD enable.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED": {
    +                            "description": "Auto Address Detect (AAD) is disabled.",
    +                            "value": 0
    +                          },
    +                          "ENABLED": {
    +                            "description": "Auto Address Detect (AAD) is enabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 6,
    +                    "size": 26
    +                  },
    +                  "DCTRL": {
    +                    "description": "Direction control enable.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_AUTO_DIRECTI": {
    +                            "description": "Disable Auto Direction Control.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_AUTO_DIRECTIO": {
    +                            "description": "Enable Auto Direction Control.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OINV": {
    +                    "description": "Direction control pin polarity. This bit reverses the polarity of the direction control signal on the Un_OE pin.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DIRLOW": {
    +                            "description": "The direction control pin will be driven to logic 0 when the transmitter has data to be sent. It will be driven to logic 1 after the last bit of data has been transmitted.",
    +                            "value": 0
    +                          },
    +                          "DIRHIGH": {
    +                            "description": "The direction control pin will be driven to logic 1 when the transmitter has data to be sent. It will be driven to logic 0 after the last bit of data has been transmitted.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "RS485ADRMATCH": {
    +              "description": "RS-485/EIA-485 address match. Contains the address match value for RS-485/EIA-485 mode.",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADRMATCH": {
    +                    "description": "Contains the address match value.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "RS485DLY": {
    +              "description": "RS-485/EIA-485 direction control delay.",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DLY": {
    +                    "description": "Contains the direction control (UnOE) delay value. This register works in conjunction with an 8-bit counter.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "UART1": {
    +        "description": "UART1  ",
    +        "children": {
    +          "registers": {
    +            "RBR": {
    +              "description": "DLAB =0 Receiver Buffer Register. Contains the next received character to be read.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RBR": {
    +                    "description": "The UART1 Receiver Buffer Register contains the oldest received byte in the UART1 RX FIFO.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, the value read from a reserved bit is not defined.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "THR": {
    +              "description": "DLAB =0. Transmit Holding Register. The next character to be transmitted is written here.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "THR": {
    +                    "description": "Writing to the UART1 Transmit Holding Register causes the data to be stored in the UART1 transmit FIFO. The byte will be sent when it reaches the bottom of the FIFO and the transmitter is available.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "DLL": {
    +              "description": "DLAB =1. Divisor Latch LSB. Least significant byte of the baud rate divisor value. The full divisor is used to generate a baud rate from the fractional rate divider.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DLLSB": {
    +                    "description": "The UART1 Divisor Latch LSB Register, along with the U1DLM register, determines the baud rate of the UART1.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "DLM": {
    +              "description": "DLAB =1. Divisor Latch MSB. Most significant byte of the baud rate divisor value. The full divisor is used to generate a baud rate from the fractional rate divider.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DLMSB": {
    +                    "description": "The UART1 Divisor Latch MSB Register, along with the U1DLL register, determines the baud rate of the UART1.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "IER": {
    +              "description": "DLAB =0. Interrupt Enable Register. Contains individual interrupt enable bits for the 7 potential UART1 interrupts.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RBRIE": {
    +                    "description": "RBR Interrupt Enable. Enables the Receive Data Available interrupt for UART1. It also controls the Character Receive Time-out interrupt.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_THE_RDA_INTE": {
    +                            "description": "Disable the RDA interrupts.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_THE_RDA_INTER": {
    +                            "description": "Enable the RDA interrupts.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "THREIE": {
    +                    "description": "THRE Interrupt Enable. Enables the THRE interrupt for UART1. The status of this interrupt can be read from LSR[5].",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_THE_THRE_INT": {
    +                            "description": "Disable the THRE interrupts.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_THE_THRE_INTE": {
    +                            "description": "Enable the THRE interrupts.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXIE": {
    +                    "description": "RX Line Interrupt Enable. Enables the UART1 RX line status interrupts. The status of this interrupt can be read from LSR[4:1].",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_THE_RX_LINE_": {
    +                            "description": "Disable the RX line status interrupts.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_THE_RX_LINE_S": {
    +                            "description": "Enable the RX line status interrupts.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MSIE": {
    +                    "description": "Modem Status Interrupt Enable. Enables the modem interrupt. The status of this interrupt can be read from MSR[3:0].",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_THE_MODEM_IN": {
    +                            "description": "Disable the modem interrupt.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_THE_MODEM_INT": {
    +                            "description": "Enable the modem interrupt.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 10,
    +                    "size": 22
    +                  },
    +                  "CTSIE": {
    +                    "description": "CTS Interrupt Enable. If auto-cts mode is enabled this bit enables/disables the modem status interrupt generation on a CTS1 signal transition. If auto-cts mode is disabled a CTS1 transition will generate an interrupt if Modem Status Interrupt Enable (IER[3]) is set. In normal operation a CTS1 signal transition will generate a Modem Status Interrupt unless the interrupt has been disabled by clearing the IER[3] bit in the IER register. In auto-cts mode a transition on the CTS1 bit will trigger an interrupt only if both the IER[3] and IER[7] bits are set.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_THE_CTS_INTE": {
    +                            "description": "Disable the CTS interrupt.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_THE_CTS_INTER": {
    +                            "description": "Enable the CTS interrupt.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ABEOIE": {
    +                    "description": "Enables the end of auto-baud interrupt.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_END_OF_AUTO_": {
    +                            "description": "Disable end of auto-baud Interrupt.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_END_OF_AUTO_B": {
    +                            "description": "Enable end of auto-baud Interrupt.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ABTOIE": {
    +                    "description": "Enables the auto-baud time-out interrupt.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_AUTO_BAUD_TI": {
    +                            "description": "Disable auto-baud time-out Interrupt.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_AUTO_BAUD_TIM": {
    +                            "description": "Enable auto-baud time-out Interrupt.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "IIR": {
    +              "description": "Interrupt ID Register. Identifies which interrupt(s) are pending.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INTSTATUS": {
    +                    "description": "Interrupt status. Note that IIR[0] is active low. The pending interrupt can be determined by evaluating IIR[3:1].",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "AT_LEAST_ONE_INTERRU": {
    +                            "description": "At least one interrupt is pending.",
    +                            "value": 0
    +                          },
    +                          "NO_INTERRUPT_IS_PEND": {
    +                            "description": "No interrupt is pending.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTID": {
    +                    "description": "Interrupt identification. IER[3:1] identifies an interrupt corresponding to the UART1 Rx or TX FIFO. All other combinations of IER[3:1] not listed below are reserved (100,101,111).",
    +                    "offset": 1,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RLS": {
    +                            "description": "1   - Receive Line Status (RLS).",
    +                            "value": 3
    +                          },
    +                          "RDA": {
    +                            "description": "2a - Receive Data Available (RDA).",
    +                            "value": 2
    +                          },
    +                          "CTI": {
    +                            "description": "2b - Character Time-out Indicator (CTI).",
    +                            "value": 6
    +                          },
    +                          "THRE": {
    +                            "description": "3   - THRE Interrupt.",
    +                            "value": 1
    +                          },
    +                          "MODEM": {
    +                            "description": "4   - Modem Interrupt.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, the value read from a reserved bit is not defined.",
    +                    "offset": 10,
    +                    "size": 22
    +                  },
    +                  "FIFOENABLE": {
    +                    "description": "Copies of FCR[0].",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "ABEOINT": {
    +                    "description": "End of auto-baud interrupt. True if auto-baud has finished successfully and interrupt is enabled.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ABTOINT": {
    +                    "description": "Auto-baud time-out interrupt. True if auto-baud has timed out and interrupt is enabled.",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FCR": {
    +              "description": "FIFO Control Register. Controls UART1 FIFO usage and modes.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "FIFOEN": {
    +                    "description": "FIFO enable.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "MUST_NOT_BE_USED_IN_": {
    +                            "description": "Must not be used in the application.",
    +                            "value": 0
    +                          },
    +                          "ACTIVE_HIGH_ENABLE_F": {
    +                            "description": "Active high enable for both UART1 Rx and TX FIFOs and FCR[7:1] access. This bit must be set for proper UART1 operation. Any transition on this bit will automatically clear the UART1 FIFOs.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXFIFORES": {
    +                    "description": "RX FIFO Reset.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NO_IMPACT_ON_EITHER_": {
    +                            "description": "No impact on either of UART1 FIFOs.",
    +                            "value": 0
    +                          },
    +                          "WRITING_A_LOGIC_1_TO": {
    +                            "description": "Writing a logic 1 to FCR[1] will clear all bytes in UART1 Rx FIFO, reset the pointer logic. This bit is self-clearing.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TXFIFORES": {
    +                    "description": "TX FIFO Reset.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NO_IMPACT_ON_EITHER_": {
    +                            "description": "No impact on either of UART1 FIFOs.",
    +                            "value": 0
    +                          },
    +                          "WRITING_A_LOGIC_1_TO": {
    +                            "description": "Writing a logic 1 to FCR[2] will clear all bytes in UART1 TX FIFO, reset the pointer logic. This bit is self-clearing.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DMAMODE": {
    +                    "description": "DMA Mode Select. When the FIFO enable bit (bit 0 of this register) is set, this bit selects the DMA mode. See Section 36.6.6.1.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits.",
    +                    "offset": 8,
    +                    "size": 24
    +                  },
    +                  "RXTRIGLVL": {
    +                    "description": "RX Trigger Level. These two bits determine how many receiver UART1 FIFO characters must be written before an interrupt is activated.",
    +                    "offset": 6,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TRIGGER_LEVEL_0_1_C": {
    +                            "description": "Trigger level 0 (1 character or 0x01).",
    +                            "value": 0
    +                          },
    +                          "TRIGGER_LEVEL_1_4_C": {
    +                            "description": "Trigger level 1 (4 characters or 0x04).",
    +                            "value": 1
    +                          },
    +                          "TRIGGER_LEVEL_2_8_C": {
    +                            "description": "Trigger level 2 (8 characters or 0x08).",
    +                            "value": 2
    +                          },
    +                          "TRIGGER_LEVEL_3_14_": {
    +                            "description": "Trigger level 3 (14 characters or 0x0E).",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "LCR": {
    +              "description": "Line Control Register. Contains controls for frame formatting and break generation.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WLS": {
    +                    "description": "Word Length Select.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "5_BIT_CHARACTER_LENG": {
    +                            "description": "5-bit character length.",
    +                            "value": 0
    +                          },
    +                          "6_BIT_CHARACTER_LENG": {
    +                            "description": "6-bit character length.",
    +                            "value": 1
    +                          },
    +                          "7_BIT_CHARACTER_LENG": {
    +                            "description": "7-bit character length.",
    +                            "value": 2
    +                          },
    +                          "8_BIT_CHARACTER_LENG": {
    +                            "description": "8-bit character length.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SBS": {
    +                    "description": "Stop Bit Select.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "1_STOP_BIT_": {
    +                            "description": "1 stop bit.",
    +                            "value": 0
    +                          },
    +                          "2_STOP_BITS_1_5_IF_": {
    +                            "description": "2 stop bits (1.5 if LCR[1:0]=00).",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PE": {
    +                    "description": "Parity Enable.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_PARITY_GENER": {
    +                            "description": "Disable parity generation and checking.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_PARITY_GENERA": {
    +                            "description": "Enable parity generation and checking.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PS": {
    +                    "description": "Parity Select.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ODD_PARITY_NUMBER_O": {
    +                            "description": "Odd parity. Number of 1s in the transmitted character and the attached parity bit will be odd.",
    +                            "value": 0
    +                          },
    +                          "EVEN_PARITY_NUMBER_": {
    +                            "description": "Even Parity. Number of 1s in the transmitted character and the attached parity bit will be even.",
    +                            "value": 1
    +                          },
    +                          "FORCED1STICK_PAR": {
    +                            "description": "Forced 1 stick parity.",
    +                            "value": 2
    +                          },
    +                          "FORCED0STICK_PAR": {
    +                            "description": "Forced 0 stick parity.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "BC": {
    +                    "description": "Break Control.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_BREAK_TRANSM": {
    +                            "description": "Disable break transmission.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_BREAK_TRANSMI": {
    +                            "description": "Enable break transmission. Output pin UART1 TXD is forced to logic 0 when LCR[6] is active high.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DLAB": {
    +                    "description": "Divisor Latch Access Bit (DLAB)",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_ACCESS_TO_DI": {
    +                            "description": "Disable access to Divisor Latches.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_ACCESS_TO_DIV": {
    +                            "description": "Enable access to Divisor Latches.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "MCR": {
    +              "description": "Modem Control Register. Contains controls for flow control handshaking and loopback mode.",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DTRCTRL": {
    +                    "description": "DTR Control.  Source for modem output pin, DTR. This bit reads as 0 when modem loopback mode is active.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RTSCTRL": {
    +                    "description": "RTS Control.  Source for modem output pin RTS. This bit reads as 0 when modem loopback mode is active.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 8,
    +                    "size": 24
    +                  },
    +                  "LMS": {
    +                    "description": "Loopback Mode Select.  The modem loopback mode provides a mechanism to perform diagnostic loopback testing. Serial data from the transmitter is connected internally to serial input of the receiver. Input pin, RXD1, has no effect on loopback and output pin, TXD1 is held in marking state. The 4 modem inputs (CTS, DSR, RI and DCD) are disconnected externally. Externally, the modem outputs (RTS, DTR) are set inactive. Internally, the 4 modem outputs are connected to the 4 modem inputs. As a result of these connections, the upper 4 bits of the MSR will be driven by the lower 4 bits of the MCR rather than the 4 modem inputs in normal mode. This permits modem status interrupts to be generated in loopback mode by writing the lower 4 bits of MCR.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_MODEM_LOOPBA": {
    +                            "description": "Disable modem loopback mode.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_MODEM_LOOPBAC": {
    +                            "description": "Enable modem loopback mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RTSEN": {
    +                    "description": "RTS enable.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_AUTO_RTS_FLO": {
    +                            "description": "Disable auto-rts flow control.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_AUTO_RTS_FLOW": {
    +                            "description": "Enable auto-rts flow control.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CTSEN": {
    +                    "description": "CTS enable.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_AUTO_CTS_FLO": {
    +                            "description": "Disable auto-cts flow control.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_AUTO_CTS_FLOW": {
    +                            "description": "Enable auto-cts flow control.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "LSR": {
    +              "description": "Line Status Register. Contains flags for transmit and receive status, including line errors.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 96,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RDR": {
    +                    "description": "Receiver Data Ready.  LSR[0] is set when the RBR holds an unread character and is cleared when the UART1 RBR FIFO is empty.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "EMPTY": {
    +                            "description": "The UART1 receiver FIFO is empty.",
    +                            "value": 0
    +                          },
    +                          "NOTEMPTY": {
    +                            "description": "The UART1 receiver FIFO is not empty.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OE": {
    +                    "description": "Overrun Error. The overrun error condition is set as soon as it occurs. An LSR read clears LSR[1]. LSR[1] is set when UART1 RSR has a new character assembled and the UART1 RBR FIFO is full. In this case, the UART1 RBR FIFO will not be overwritten and the character in the UART1 RSR will be lost.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "Overrun error status is inactive.",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "Overrun error status is active.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PE": {
    +                    "description": "Parity Error. When the parity bit of a received character is in the wrong state, a parity error occurs. An LSR read clears LSR[2]. Time of parity error detection is dependent on FCR[0]. Note: A parity error is associated with the character at the top of the UART1 RBR FIFO.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "Parity error status is inactive.",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "Parity error status is active.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FE": {
    +                    "description": "Framing Error. When the stop bit of a received character is a logic 0, a framing error occurs. An LSR read clears LSR[3]. The time of the framing error detection is dependent on FCR0. Upon detection of a framing error, the RX will attempt to resynchronize to the data and assume that the bad stop bit is actually an early start bit. However, it cannot be assumed that the next received byte will be correct even if there is no Framing Error. Note: A framing error is associated with the character at the top of the UART1 RBR FIFO.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "Framing error status is inactive.",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "Framing error status is active.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "BI": {
    +                    "description": "Break Interrupt.  When RXD1 is held in the spacing state (all zeroes) for one full character transmission (start, data, parity, stop), a break interrupt occurs. Once the break condition has been detected, the receiver goes idle until RXD1 goes to marking state (all ones). An LSR read clears this status bit. The time of break detection is dependent on FCR[0]. Note: The break interrupt is associated with the character at the top of the UART1 RBR FIFO.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "Break interrupt status is inactive.",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "Break interrupt status is active.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "THRE": {
    +                    "description": "Transmitter Holding Register Empty.  THRE is set immediately upon detection of an empty UART1 THR and is cleared on a THR write.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "VALID": {
    +                            "description": "THR contains valid data.",
    +                            "value": 0
    +                          },
    +                          "THR_IS_EMPTY_": {
    +                            "description": "THR is empty.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TEMT": {
    +                    "description": "Transmitter Empty.  TEMT is set when both THR and TSR are empty; TEMT is cleared when either the TSR or the THR contain valid data.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "VALID": {
    +                            "description": "THR and/or the TSR contains valid data.",
    +                            "value": 0
    +                          },
    +                          "EMPTY": {
    +                            "description": "THR and the TSR are empty.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXFE": {
    +                    "description": "Error in RX FIFO. LSR[7] is set when a character with a RX error such as framing error, parity error or break interrupt, is loaded into the RBR. This bit is cleared when the LSR register is read and there are no subsequent errors in the UART1 FIFO.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NOERROR": {
    +                            "description": "RBR contains no UART1 RX errors or FCR[0]=0.",
    +                            "value": 0
    +                          },
    +                          "ERRORS": {
    +                            "description": "UART1 RBR contains at least one UART1 RX error.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, the value read from a reserved bit is not defined.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "MSR": {
    +              "description": "Modem Status Register. Contains handshake signal status flags.",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DCTS": {
    +                    "description": "Delta CTS. Set upon state change of input CTS. Cleared on an MSR read.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NO_CHANGE_DETECTED_O": {
    +                            "description": "No change detected on modem input, CTS.",
    +                            "value": 0
    +                          },
    +                          "STATE_CHANGE_DETECTE": {
    +                            "description": "State change detected on modem input, CTS.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DDSR": {
    +                    "description": "Delta DSR. Set upon state change of input DSR. Cleared on an MSR read.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NO_CHANGE_DETECTED_O": {
    +                            "description": "No change detected on modem input, DSR.",
    +                            "value": 0
    +                          },
    +                          "STATE_CHANGE_DETECTE": {
    +                            "description": "State change detected on modem input, DSR.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TERI": {
    +                    "description": "Trailing Edge RI. Set upon low to high transition of input RI. Cleared on an MSR read.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NO_CHANGE_DETECTED_O": {
    +                            "description": "No change detected on modem input, RI.",
    +                            "value": 0
    +                          },
    +                          "LOW_TO_HIGH_TRANSITI": {
    +                            "description": "Low-to-high transition detected on RI.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DDCD": {
    +                    "description": "Delta DCD. Set upon state change of input DCD. Cleared on an MSR read.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NO_CHANGE_DETECTED_O": {
    +                            "description": "No change detected on modem input, DCD.",
    +                            "value": 0
    +                          },
    +                          "STATE_CHANGE_DETECTE": {
    +                            "description": "State change detected on modem input, DCD.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CTS": {
    +                    "description": "Clear To Send State. Complement of input signal CTS. This bit is connected to MCR[1] in modem loopback mode.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DSR": {
    +                    "description": "Data Set Ready State. Complement of input signal DSR. This bit is connected to MCR[0] in modem loopback mode.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RI": {
    +                    "description": "Ring Indicator State. Complement of input RI. This bit is connected to MCR[2] in modem loopback mode.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DCD": {
    +                    "description": "Data Carrier Detect State. Complement of input DCD. This bit is connected to MCR[3] in modem loopback mode.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, the value read from a reserved bit is not defined.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "SCR": {
    +              "description": "Scratch Pad Register. 8-bit temporary storage for software.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "Pad": {
    +                    "description": "A readable, writable byte.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "ACR": {
    +              "description": "Auto-baud Control Register. Contains controls for the auto-baud feature.",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "START": {
    +                    "description": "Auto-baud start bit. This bit is automatically cleared after auto-baud completion.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "STOP": {
    +                            "description": "Auto-baud stop (auto-baud is not running).",
    +                            "value": 0
    +                          },
    +                          "START": {
    +                            "description": "Auto-baud start (auto-baud is running). Auto-baud run bit. This bit is automatically cleared after auto-baud completion.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MODE": {
    +                    "description": "Auto-baud mode select bit.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "MODE_0_": {
    +                            "description": "Mode 0.",
    +                            "value": 0
    +                          },
    +                          "MODE_1_": {
    +                            "description": "Mode 1.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AUTORESTART": {
    +                    "description": "Auto-baud restart bit.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NO_RESTART": {
    +                            "description": "No restart",
    +                            "value": 0
    +                          },
    +                          "RESTART_IN_CASE_OF_T": {
    +                            "description": "Restart in case of time-out (counter restarts at next UART1 Rx falling edge)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 10,
    +                    "size": 22
    +                  },
    +                  "ABEOINTCLR": {
    +                    "description": "End of auto-baud interrupt clear bit (write-only).",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "WRITING_A_0_HAS_NO_I": {
    +                            "description": "Writing a 0 has no impact.",
    +                            "value": 0
    +                          },
    +                          "WRITING_A_1_WILL_CLE": {
    +                            "description": "Writing a 1 will clear the corresponding interrupt in the IIR.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ABTOINTCLR": {
    +                    "description": "Auto-baud time-out interrupt clear bit (write-only).",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "WRITING_A_0_HAS_NO_I": {
    +                            "description": "Writing a 0 has no impact.",
    +                            "value": 0
    +                          },
    +                          "WRITING_A_1_WILL_CLE": {
    +                            "description": "Writing a 1 will clear the corresponding interrupt in the IIR.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "FDR": {
    +              "description": "Fractional Divider Register. Generates a clock input for the baud rate divider.",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 16,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DIVADDVAL": {
    +                    "description": "Baud rate generation pre-scaler divisor value. If this field is 0, fractional baud rate generator will not impact the UART1 baud rate.",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "MULVAL": {
    +                    "description": "Baud rate pre-scaler multiplier value. This field must be greater or equal 1 for UART1 to operate properly, regardless of whether the fractional baud rate generator is used or not.",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "TER": {
    +              "description": "Transmit Enable Register. Turns off UART transmitter for use with software flow control.",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  },
    +                  "TXEN": {
    +                    "description": "When this bit is 1, as it is after a Reset, data written to the THR is output on the TXD pin as soon as any preceding data has been sent. If this bit cleared to 0 while a character is being sent, the transmission of that character is completed, but no further characters are sent until this bit is set again. In other words, a 0 in this bit blocks the transfer of characters from the THR or TX FIFO into the transmit shift register. Software can clear this bit when it detects that the a hardware-handshaking TX-permit signal (CTS) has gone false, or with software handshaking, when it receives an XOFF character (DC3). Software can set this bit again when it detects that the TX-permit signal has gone true, or when it receives an XON (DC1) character.",
    +                    "offset": 7,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RS485CTRL": {
    +              "description": "RS-485/EIA-485 Control. Contains controls to configure various aspects of RS-485/EIA-485 modes.",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NMMEN": {
    +                    "description": "RS-485/EIA-485 Normal Multidrop Mode (NMM) mode select.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_": {
    +                            "description": "Disabled.",
    +                            "value": 0
    +                          },
    +                          "ENABLED_IN_THIS_MOD": {
    +                            "description": "Enabled. In this mode, an address is detected when a received byte causes the UART to set the parity error and generate an interrupt.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RXDIS": {
    +                    "description": "Receive enable.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ENABLED_": {
    +                            "description": "Enabled.",
    +                            "value": 0
    +                          },
    +                          "DISABLED_": {
    +                            "description": "Disabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AADEN": {
    +                    "description": "Auto Address Detect (AAD) enable.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_": {
    +                            "description": "Disabled.",
    +                            "value": 0
    +                          },
    +                          "ENABLED_": {
    +                            "description": "Enabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SEL": {
    +                    "description": "Direction control.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RTS_IF_DIRECTION_CO": {
    +                            "description": "RTS. If direction control is enabled (bit DCTRL = 1), pin RTS is used for direction control.",
    +                            "value": 0
    +                          },
    +                          "DTR_IF_DIRECTION_CO": {
    +                            "description": "DTR. If direction control is enabled (bit DCTRL = 1), pin DTR is used for direction control.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DCTRL": {
    +                    "description": "Direction control enable.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_AUTO_DIRECTI": {
    +                            "description": "Disable Auto Direction Control.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_AUTO_DIRECTIO": {
    +                            "description": "Enable Auto Direction Control.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OINV": {
    +                    "description": "Polarity. This bit reverses the polarity of the direction control signal on the RTS (or DTR) pin.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "LOW_THE_DIRECTION_C": {
    +                            "description": "LOW. The direction control pin will be driven to logic 0 when the transmitter has data to be sent. It will be driven to logic 1 after the last bit of data has been transmitted.",
    +                            "value": 0
    +                          },
    +                          "HIGH_THE_DIRECTION_": {
    +                            "description": "HIGH. The direction control pin will be driven to logic 1 when the transmitter has data to be sent. It will be driven to logic 0 after the last bit of data has been transmitted.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 6,
    +                    "size": 26
    +                  }
    +                }
    +              }
    +            },
    +            "RS485ADRMATCH": {
    +              "description": "RS-485/EIA-485 address match. Contains the address match value for RS-485/EIA-485 mode.",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADRMATCH": {
    +                    "description": "Contains the address match value.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "RS485DLY": {
    +              "description": "RS-485/EIA-485 direction control delay.",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DLY": {
    +                    "description": "Contains the direction control (RTS or DTR) delay value. This register works in conjunction with an 8-bit counter.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "PWM1": {
    +        "description": "Pulse Width Modulators (PWM1) ",
    +        "children": {
    +          "registers": {
    +            "IR": {
    +              "description": "Interrupt Register. The IR can be written to clear interrupts, or read to identify which PWM interrupt sources are pending.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PWMMR0INT": {
    +                    "description": "Interrupt flag for PWM match channel 0.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PWMMR1INT": {
    +                    "description": "Interrupt flag for PWM match channel 1.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PWMMR2INT": {
    +                    "description": "Interrupt flag for PWM match channel 2.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PWMMR3INT": {
    +                    "description": "Interrupt flag for PWM match channel 3.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PWMCAP0INT": {
    +                    "description": "Interrupt flag for capture input 0",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "PWMCAP1INT": {
    +                    "description": "Interrupt flag for capture input 1 (available in PWM1IR only; this bit is reserved in PWM0IR).",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 11,
    +                    "size": 21
    +                  },
    +                  "PWMMR4INT": {
    +                    "description": "Interrupt flag for PWM match channel 4.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PWMMR5INT": {
    +                    "description": "Interrupt flag for PWM match channel 5.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PWMMR6INT": {
    +                    "description": "Interrupt flag for PWM match channel 6.",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TCR": {
    +              "description": "Timer Control Register. The TCR is used to control the Timer Counter functions.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CE": {
    +                    "description": "Counter Enable",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "THE_PWM_TIMER_COUNTE": {
    +                            "description": "The PWM Timer Counter and PWM Prescale Counter are enabled for counting.",
    +                            "value": 1
    +                          },
    +                          "THE_COUNTERS_ARE_DIS": {
    +                            "description": "The counters are disabled.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CR": {
    +                    "description": "Counter Reset",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "THE_PWM_TIMER_COUNTE": {
    +                            "description": "The PWM Timer Counter and the PWM Prescale Counter are synchronously reset on the next positive edge of PCLK. The counters remain reset until this bit is returned to zero.",
    +                            "value": 1
    +                          },
    +                          "CLEAR_RESET_": {
    +                            "description": "Clear reset.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 5,
    +                    "size": 27
    +                  },
    +                  "PWMEN": {
    +                    "description": "PWM Enable",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PWM_MODE_IS_ENABLED_": {
    +                            "description": "PWM mode is enabled (counter resets to 1). PWM mode causes the shadow registers to operate in connection with the Match registers. A program write to a Match register will not have an effect on the Match result until the corresponding bit in PWMLER has been set, followed by the occurrence of a PWM Match 0 event. Note that the PWM Match register that determines the PWM rate (PWM Match Register 0 - MR0) must be set up prior to the PWM being enabled. Otherwise a Match event will not occur to cause shadow register contents to become effective.",
    +                            "value": 1
    +                          },
    +                          "TIMER_MODE_IS_ENABLE": {
    +                            "description": "Timer mode is enabled (counter resets to 0).",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MDIS": {
    +                    "description": "Master Disable (PWM0 only). The two PWMs may be synchronized using the Master Disable control bit. The Master disable bit of the Master PWM (PWM0 module) controls a secondary enable input to both PWMs, as shown in Figure 141.  This bit has no function in the Slave PWM (PWM1).",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "MASTER_USE_PWM0_IS_": {
    +                            "description": "Master use. PWM0 is the master, and both PWMs are enabled for counting.",
    +                            "value": 1
    +                          },
    +                          "INDIVIDUAL_USE_THE_": {
    +                            "description": "Individual use. The PWMs are used independently, and the individual Counter Enable bits are used to control the PWMs.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TC": {
    +              "description": "Timer Counter. The 32 bit TC is incremented every PR+1 cycles of PCLK. The TC is controlled through the TCR.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TC": {
    +                    "description": "Timer counter value.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PR": {
    +              "description": "Prescale Register. Determines how often the PWM counter is incremented.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PM": {
    +                    "description": "Prescale counter maximum value.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PC": {
    +              "description": "Prescale Counter. Prescaler for the main PWM counter.",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PC": {
    +                    "description": "Prescale counter value.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MCR": {
    +              "description": "Match Control Register. The MCR is used to control whether an interrupt is generated and if the PWM counter is reset when a Match occurs.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PWMMR0I": {
    +                    "description": "Interrupt PWM0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_": {
    +                            "description": "Disabled.",
    +                            "value": 0
    +                          },
    +                          "INTERRUPT_ON_PWMMR0": {
    +                            "description": "Interrupt on PWMMR0: an interrupt is generated when PWMMR0 matches the value in the PWMTC.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMMR0R": {
    +                    "description": "Reset PWM0",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_": {
    +                            "description": "Disabled.",
    +                            "value": 0
    +                          },
    +                          "RESET_ON_PWMMR0_THE": {
    +                            "description": "Reset on PWMMR0: the PWMTC will be reset if PWMMR0 matches it.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMMR0S": {
    +                    "description": "Stop PWM0",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "STOP_ON_PWMMR0_THE_": {
    +                            "description": "Stop on PWMMR0: the PWMTC and PWMPC will be stopped and PWMTCR bit 0 will be set to 0 if PWMMR0 matches the PWMTC.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMMR1I": {
    +                    "description": "Interrupt PWM1",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_": {
    +                            "description": "Disabled.",
    +                            "value": 0
    +                          },
    +                          "INTERRUPT_ON_PWMMR1": {
    +                            "description": "Interrupt on PWMMR1: an interrupt is generated when PWMMR1 matches the value in the PWMTC.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMMR1R": {
    +                    "description": "Reset PWM1",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_": {
    +                            "description": "Disabled.",
    +                            "value": 0
    +                          },
    +                          "RESET_ON_PWMMR1_THE": {
    +                            "description": "Reset on PWMMR1: the PWMTC will be reset if PWMMR1 matches it.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMMR1S": {
    +                    "description": "Stop PWM1",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "STOP_ON_PWMMR1_THE_": {
    +                            "description": "Stop on PWMMR1: the PWMTC and PWMPC will be stopped and PWMTCR bit 0 will be set to 0 if PWMMR1 matches the PWMTC.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMMR2I": {
    +                    "description": "Interrupt PWM0",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_": {
    +                            "description": "Disabled.",
    +                            "value": 0
    +                          },
    +                          "INTERRUPT_ON_PWMMR2": {
    +                            "description": "Interrupt on PWMMR2: an interrupt is generated when PWMMR2 matches the value in the PWMTC.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMMR2R": {
    +                    "description": "Reset PWM0",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_": {
    +                            "description": "Disabled.",
    +                            "value": 0
    +                          },
    +                          "RESET_ON_PWMMR2_THE": {
    +                            "description": "Reset on PWMMR2: the PWMTC will be reset if PWMMR2 matches it.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMMR2S": {
    +                    "description": "Stop PWM0",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "STOP_ON_PWMMR2_THE_": {
    +                            "description": "Stop on PWMMR2: the PWMTC and PWMPC will be stopped and PWMTCR bit 0 will be set to 0 if PWMMR0 matches the PWMTC.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMMR3I": {
    +                    "description": "Interrupt PWM3",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_": {
    +                            "description": "Disabled.",
    +                            "value": 0
    +                          },
    +                          "INTERRUPT_ON_PWMMR3": {
    +                            "description": "Interrupt on PWMMR3: an interrupt is generated when PWMMR3 matches the value in the PWMTC.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMMR3R": {
    +                    "description": "Reset PWM3",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_": {
    +                            "description": "Disabled.",
    +                            "value": 0
    +                          },
    +                          "RESET_ON_PWMMR3_THE": {
    +                            "description": "Reset on PWMMR3: the PWMTC will be reset if PWMMR3 matches it.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMMR3S": {
    +                    "description": "Stop PWM0",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "STOP_ON_PWMMR3_THE_": {
    +                            "description": "Stop on PWMMR3: the PWMTC and PWMPC will be stopped and PWMTCR bit 0 will be set to 0 if PWMMR0 matches the PWMTC.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMMR4I": {
    +                    "description": "Interrupt PWM4",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_": {
    +                            "description": "Disabled.",
    +                            "value": 0
    +                          },
    +                          "INTERRUPT_ON_PWMMR4": {
    +                            "description": "Interrupt on PWMMR4: an interrupt is generated when PWMMR4 matches the value in the PWMTC.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMMR4R": {
    +                    "description": "Reset PWM4",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_": {
    +                            "description": "Disabled.",
    +                            "value": 0
    +                          },
    +                          "RESET_ON_PWMMR4_THE": {
    +                            "description": "Reset on PWMMR4: the PWMTC will be reset if PWMMR4 matches it.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMMR4S": {
    +                    "description": "Stop PWM4",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "STOP_ON_PWMMR4_THE_": {
    +                            "description": "Stop on PWMMR4: the PWMTC and PWMPC will be stopped and PWMTCR bit 0 will be set to 0 if PWMMR4 matches the PWMTC.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMMR5I": {
    +                    "description": "Interrupt PWM5",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_": {
    +                            "description": "Disabled.",
    +                            "value": 0
    +                          },
    +                          "INTERRUPT_ON_PWMMR5": {
    +                            "description": "Interrupt on PWMMR5: an interrupt is generated when PWMMR5 matches the value in the PWMTC.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMMR5R": {
    +                    "description": "Reset PWM5",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_": {
    +                            "description": "Disabled.",
    +                            "value": 0
    +                          },
    +                          "RESET_ON_PWMMR5_THE": {
    +                            "description": "Reset on PWMMR5: the PWMTC will be reset if PWMMR5 matches it.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMMR5S": {
    +                    "description": "Stop PWM5",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "STOP_ON_PWMMR5_THE_": {
    +                            "description": "Stop on PWMMR5: the PWMTC and PWMPC will be stopped and PWMTCR bit 0 will be set to 0 if PWMMR5 matches the PWMTC.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMMR6I": {
    +                    "description": "Interrupt PWM6",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_": {
    +                            "description": "Disabled.",
    +                            "value": 0
    +                          },
    +                          "INTERRUPT_ON_PWMMR6": {
    +                            "description": "Interrupt on PWMMR6: an interrupt is generated when PWMMR6 matches the value in the PWMTC.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMMR6R": {
    +                    "description": "Reset PWM6",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_": {
    +                            "description": "Disabled.",
    +                            "value": 0
    +                          },
    +                          "RESET_ON_PWMMR6_THE": {
    +                            "description": "Reset on PWMMR6: the PWMTC will be reset if PWMMR6 matches it.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMMR6S": {
    +                    "description": "Stop PWM6",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED": {
    +                            "description": "Disabled",
    +                            "value": 0
    +                          },
    +                          "STOP_ON_PWMMR6_THE_": {
    +                            "description": "Stop on PWMMR6: the PWMTC and PWMPC will be stopped and PWMTCR bit 0 will be set to 0 if PWMMR6 matches the PWMTC.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 21,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "CCR": {
    +              "description": "Capture Control Register. The CCR controls which edges of the capture inputs are used to load the Capture Registers and whether or not an interrupt is generated for a capture event.",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CAP0_R": {
    +                    "description": "Capture on PWMn_CAP0 rising edge",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_THIS_FEATU": {
    +                            "description": "Disabled. This feature is disabled.",
    +                            "value": 0
    +                          },
    +                          "RISING_EDGE_A_SYNCH": {
    +                            "description": "Rising edge. A synchronously sampled rising edge on PWMn_CAP0 will cause CR0 to be loaded with the contents of the TC.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CAP0_F": {
    +                    "description": "Capture on PWMn_CAP0 falling edge",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_THIS_FEATU": {
    +                            "description": "Disabled. This feature is disabled.",
    +                            "value": 0
    +                          },
    +                          "FALLING_EDGE_A_SYNC": {
    +                            "description": "Falling edge. A synchronously sampled falling edge on PWMn_CAP0 will cause CR0 to be loaded with the contents of TC.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CAP0_I": {
    +                    "description": "Interrupt on PWMn_CAP0 event",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_THIS_FEATU": {
    +                            "description": "Disabled. This feature is disabled.",
    +                            "value": 0
    +                          },
    +                          "INTERRUPT_A_CR0_LOA": {
    +                            "description": "Interrupt. A CR0 load due to a PWMn_CAP0 event will generate an interrupt.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CAP1_R": {
    +                    "description": "Capture on PWMn_CAP1 rising edge. Reserved for PWM0.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_THIS_FEATU": {
    +                            "description": "Disabled. This feature is disabled.",
    +                            "value": 0
    +                          },
    +                          "RISING_EDGE_A_SYNCH": {
    +                            "description": "Rising edge. A synchronously sampled rising edge on PWMn_CAP1 will cause CR1 to be loaded with the contents of the TC.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CAP1_F": {
    +                    "description": "Capture on PWMn_CAP1 falling edge. Reserved for PWM0.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_THIS_FEATU": {
    +                            "description": "Disabled. This feature is disabled.",
    +                            "value": 0
    +                          },
    +                          "FALLING_EDGE_A_SYNC": {
    +                            "description": "Falling edge. A synchronously sampled falling edge on PWMn_CAP1 will cause CR1 to be loaded with the contents of TC.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CAP1_I": {
    +                    "description": "Interrupt on PWMn_CAP1 event. Reserved for PWM0.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_THIS_FEATU": {
    +                            "description": "Disabled. This feature is disabled.",
    +                            "value": 0
    +                          },
    +                          "INTERRUPT_A_CR1_LOA": {
    +                            "description": "Interrupt. A CR1 load due to a PWMn_CAP1 event will generate an interrupt.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 6,
    +                    "size": 26
    +                  }
    +                }
    +              }
    +            },
    +            "PCR": {
    +              "description": "PWM Control Register. Enables PWM outputs and selects either single edge or double edge controlled PWM outputs.",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Unused, always zero.",
    +                    "offset": 15,
    +                    "size": 17
    +                  },
    +                  "PWMSEL2": {
    +                    "description": "PWM[2] output single/double edge mode control.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SINGLE_EDGE_CONTROLL": {
    +                            "description": "Single edge controlled mode is selected.",
    +                            "value": 0
    +                          },
    +                          "DOUBLE_EDGE_CONTROLL": {
    +                            "description": "Double edge controlled mode is selected.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMSEL3": {
    +                    "description": "PWM[3] output edge control.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SINGLE_EDGE_CONTROLL": {
    +                            "description": "Single edge controlled mode is selected.",
    +                            "value": 0
    +                          },
    +                          "DOUBLE_EDGE_CONTROLL": {
    +                            "description": "Double edge controlled mode is selected.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMSEL4": {
    +                    "description": "PWM[4] output edge control.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SINGLE_EDGE_CONTROLL": {
    +                            "description": "Single edge controlled mode is selected.",
    +                            "value": 0
    +                          },
    +                          "DOUBLE_EDGE_CONTROLL": {
    +                            "description": "Double edge controlled mode is selected.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMSEL5": {
    +                    "description": "PWM[5] output edge control.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SINGLE_EDGE_CONTROLL": {
    +                            "description": "Single edge controlled mode is selected.",
    +                            "value": 0
    +                          },
    +                          "DOUBLE_EDGE_CONTROLL": {
    +                            "description": "Double edge controlled mode is selected.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMSEL6": {
    +                    "description": "PWM[6] output edge control.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SINGLE_EDGE_CONTROLL": {
    +                            "description": "Single edge controlled mode is selected.",
    +                            "value": 0
    +                          },
    +                          "DOUBLE_EDGE_CONTROLL": {
    +                            "description": "Double edge controlled mode is selected.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMENA1": {
    +                    "description": "PWM[1] output enable control.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "THE_PWM_OUTPUT_IS_DI": {
    +                            "description": "The PWM output is disabled.",
    +                            "value": 0
    +                          },
    +                          "THE_PWM_OUTPUT_IS_EN": {
    +                            "description": "The PWM output is enabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMENA2": {
    +                    "description": "PWM[2] output enable control.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "THE_PWM_OUTPUT_IS_DI": {
    +                            "description": "The PWM output is disabled.",
    +                            "value": 0
    +                          },
    +                          "THE_PWM_OUTPUT_IS_EN": {
    +                            "description": "The PWM output is enabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMENA3": {
    +                    "description": "PWM[3] output enable control.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "THE_PWM_OUTPUT_IS_DI": {
    +                            "description": "The PWM output is disabled.",
    +                            "value": 0
    +                          },
    +                          "THE_PWM_OUTPUT_IS_EN": {
    +                            "description": "The PWM output is enabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMENA4": {
    +                    "description": "PWM[4] output enable control.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "THE_PWM_OUTPUT_IS_DI": {
    +                            "description": "The PWM output is disabled.",
    +                            "value": 0
    +                          },
    +                          "THE_PWM_OUTPUT_IS_EN": {
    +                            "description": "The PWM output is enabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMENA5": {
    +                    "description": "PWM[5] output enable control.",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "THE_PWM_OUTPUT_IS_DI": {
    +                            "description": "The PWM output is disabled.",
    +                            "value": 0
    +                          },
    +                          "THE_PWM_OUTPUT_IS_EN": {
    +                            "description": "The PWM output is enabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PWMENA6": {
    +                    "description": "PWM[6] output enable control. See PWMENA1 for details.",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "THE_PWM_OUTPUT_IS_DI": {
    +                            "description": "The PWM output is disabled.",
    +                            "value": 0
    +                          },
    +                          "THE_PWM_OUTPUT_IS_EN": {
    +                            "description": "The PWM output is enabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "LER": {
    +              "description": "Load Enable Register. Enables use of updated PWM match values.",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MAT0LATCHEN": {
    +                    "description": "Enable PWM Match 0 Latch. PWM MR0 register update control. Writing a one to this bit allows the last value written to the PWM Match Register 0 to be become effective when the timer is next reset by a PWM Match event. See Section 27.6.7.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MAT1LATCHEN": {
    +                    "description": "Enable PWM Match 1 Latch. PWM MR1 register update control. See bit 0 for details.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MAT2LATCHEN": {
    +                    "description": "Enable PWM Match 2 Latch. PWM MR2 register update control. See bit 0 for details.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MAT3LATCHEN": {
    +                    "description": "Enable PWM Match 3 Latch. PWM MR3 register update control. See bit 0 for details.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MAT4LATCHEN": {
    +                    "description": "Enable PWM Match 4 Latch. PWM MR4 register update control. See bit 0 for details.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "MAT5LATCHEN": {
    +                    "description": "Enable PWM Match 5 Latch. PWM MR5 register update control. See bit 0 for details.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "MAT6LATCHEN": {
    +                    "description": "Enable PWM Match 6 Latch. PWM MR6 register update control. See bit 0 for details.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 7,
    +                    "size": 25
    +                  }
    +                }
    +              }
    +            },
    +            "CTCR": {
    +              "description": "Count Control Register. The CTCR selects between Timer and Counter mode, and in Counter mode selects the signal and edge(s) for counting.",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MOD": {
    +                    "description": "Counter/  Timer Mode",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TIMER_MODE_THE_TC_I": {
    +                            "description": "Timer Mode: the TC is incremented when the Prescale Counter matches the Prescale register.",
    +                            "value": 0
    +                          },
    +                          "RISING_EDGE_COUNTER_": {
    +                            "description": "Rising edge counter Mode: the TC is incremented on rising edges of the PWM_CAP input selected by bits 3:2.",
    +                            "value": 1
    +                          },
    +                          "FALLING_EDGE_COUNTER": {
    +                            "description": "Falling edge counter Mode: the TC is incremented on falling edges of the PWM_CAP input selected by bits 3:2.",
    +                            "value": 2
    +                          },
    +                          "DUAL_EDGE_COUNTER_MO": {
    +                            "description": "Dual edge counter Mode: the TC is incremented on both edges of the PWM_CAP input selected by bits 3:2.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CIS": {
    +                    "description": "Count Input Select. When bits 1:0 are not 00, these bits select which PWM_CAP pin carries the signal used to increment the TC. Other combinations are reserved.",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "FOR_PWM0_00_EQ_PWM0_": {
    +                            "description": "For PWM0: 00 = PWM0_CAP0 (Other combinations are reserved) For PWM1: 00 = PWM1_CAP0, 01 = PWM1_CAP1 (Other combinations are reserved)",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 4,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "I2C0": {
    +        "description": "I2C bus interface",
    +        "children": {
    +          "registers": {
    +            "CONSET": {
    +              "description": "I2C Control Set Register. When a one is written to a bit of this register, the corresponding bit in the I2C control register is set. Writing a zero has no effect on the corresponding bit in the I2C control register.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from a reserved bit is not defined.",
    +                    "offset": 7,
    +                    "size": 25
    +                  },
    +                  "AA": {
    +                    "description": "Assert acknowledge flag.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SI": {
    +                    "description": "I2C interrupt flag.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "STO": {
    +                    "description": "STOP flag.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "STA": {
    +                    "description": "START flag.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "I2EN": {
    +                    "description": "I2C interface enable.",
    +                    "offset": 6,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "STAT": {
    +              "description": "I2C Status Register. During I2C operation, this register provides detailed status codes that allow software to determine the next action needed.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 248,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from a reserved bit is not defined.",
    +                    "offset": 8,
    +                    "size": 24
    +                  },
    +                  "Status": {
    +                    "description": "These bits give the actual status information about the I 2C interface.",
    +                    "offset": 3,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "DAT": {
    +              "description": "I2C Data Register. During master or slave transmit mode, data to be transmitted is written to this register. During master or slave receive mode, data that has been received may be read from this register.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "Data": {
    +                    "description": "This register holds data values that have been received or are to be transmitted.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from a reserved bit is not defined.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "ADR0": {
    +              "description": "I2C Slave Address Register 0. Contains the 7-bit slave address for operation of the I2C interface in slave mode, and is not used in master mode. The least significant bit determines whether a slave responds to the General Call address.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "GC": {
    +                    "description": "General Call enable bit.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "Address": {
    +                    "description": "The I2C device address for slave mode.",
    +                    "offset": 1,
    +                    "size": 7
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from a reserved bit is not defined.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "SCLH": {
    +              "description": "SCH Duty Cycle Register High Half Word. Determines the high time of the I2C clock.",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 4,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SCLH": {
    +                    "description": "Count for SCL HIGH time period selection.",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from a reserved bit is not defined.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SCLL": {
    +              "description": "SCL Duty Cycle Register Low Half Word. Determines the low time of the I2C clock. SCLL and SCLH together determine the clock frequency generated by an I2C master and certain times used in slave mode.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 4,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SCLL": {
    +                    "description": "Count for SCL low time period selection.",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from a reserved bit is not defined.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CONCLR": {
    +              "description": "I2C Control Clear Register. When a one is written to a bit of this register, the corresponding bit in the I2C control register is cleared. Writing a zero has no effect on the corresponding bit in the I2C control register.",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from a reserved bit is not defined.",
    +                    "offset": 8,
    +                    "size": 24
    +                  },
    +                  "AAC": {
    +                    "description": "Assert acknowledge Clear bit.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SIC": {
    +                    "description": "I2C interrupt Clear bit.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "STAC": {
    +                    "description": "START flag Clear bit.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "I2ENC": {
    +                    "description": "I2C interface Disable bit.",
    +                    "offset": 6,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MMCTRL": {
    +              "description": "Monitor mode control register.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MM_ENA": {
    +                    "description": "Monitor mode enable.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "MONITOR_MODE_DISABLE": {
    +                            "description": "Monitor mode disabled.",
    +                            "value": 0
    +                          },
    +                          "THE_I_2C_MODULE_WILL": {
    +                            "description": "The I 2C module will enter monitor mode. In this mode the SDA output will be forced high. This will prevent the I2C module from outputting data of any kind (including ACK) onto the I2C data bus. Depending on the state of the ENA_SCL bit, the output may be also forced high, preventing the module from having control over the I2C clock line.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENA_SCL": {
    +                    "description": "SCL output enable.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "WHEN_THIS_BIT_IS_CLE": {
    +                            "description": "When this bit is cleared to 0, the SCL output will be forced high when the module is in monitor mode. As described above, this will prevent the module from having any control over the I2C clock line.",
    +                            "value": 0
    +                          },
    +                          "WHEN_THIS_BIT_IS_SET": {
    +                            "description": "When this bit is set, the I2C module may exercise the same control over the clock line that it would in normal operation. This means that, acting as a slave peripheral, the I2C module can stretch the clock line (hold it low) until it has had time to respond to an I2C interrupt.[1]",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MATCH_ALL": {
    +                    "description": "Select interrupt register match.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "WHEN_THIS_BIT_IS_CLE": {
    +                            "description": "When this bit is cleared, an interrupt will only be generated when a match occurs to one of the (up-to) four address registers described above.   That is, the module will respond as a normal slave as far as address-recognition is concerned.",
    +                            "value": 0
    +                          },
    +                          "WHEN_THIS_BIT_IS_SET": {
    +                            "description": "When this bit is set to 1 and the I2C is in monitor mode, an interrupt will be generated on ANY address received. This will enable the part to monitor all traffic on the bus.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from reserved bits is not defined.",
    +                    "offset": 3,
    +                    "size": 29
    +                  }
    +                }
    +              }
    +            },
    +            "DATA_BUFFER": {
    +              "description": "Data buffer register. The contents of the 8 MSBs of the DAT shift register will be transferred to the DATA_BUFFER automatically after every nine bits (8 bits of data plus ACK or NACK) has been received on the bus.",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "Data": {
    +                    "description": "This register holds contents of the 8 MSBs of the DAT shift register.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from a reserved bit is not defined.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SPI": {
    +        "description": "SPI ",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "SPI Control Register. This register controls the operation of the SPI.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 12,
    +                    "size": 20
    +                  },
    +                  "BITENABLE": {
    +                    "description": "The SPI controller sends and receives 8 bits of data per transfer.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "THE_SPI_CONTROLLER_S": {
    +                            "description": "The SPI controller sends and receives the number of bits selected by bits 11:8.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CPHA": {
    +                    "description": "Clock phase control determines the relationship between the data and the clock on SPI transfers, and controls when a slave transfer is defined as starting and ending.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "FIRST_EDGE": {
    +                            "description": "Data is sampled on the first clock edge of SCK. A transfer starts and ends with activation and deactivation of the SSEL signal.",
    +                            "value": 0
    +                          },
    +                          "SECOND_EDGE": {
    +                            "description": "Data is sampled on the second clock edge of the SCK. A transfer starts with the first clock edge, and ends with the last sampling edge when the SSEL signal is active.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CPOL": {
    +                    "description": "Clock polarity control.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SCK_IS_ACTIVE_HIGH_": {
    +                            "description": "SCK is active high.",
    +                            "value": 0
    +                          },
    +                          "SCK_IS_ACTIVE_LOW_": {
    +                            "description": "SCK is active low.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MSTR": {
    +                    "description": "Master mode select.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SLAVE": {
    +                            "description": "The SPI operates in Slave mode.",
    +                            "value": 0
    +                          },
    +                          "MASTER": {
    +                            "description": "The SPI operates in Master mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LSBF": {
    +                    "description": "LSB First controls which direction each byte is shifted when transferred.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "MSB": {
    +                            "description": "SPI data is transferred MSB (bit 7) first.",
    +                            "value": 0
    +                          },
    +                          "LSB": {
    +                            "description": "SPI data is transferred LSB (bit 0) first.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SPIE": {
    +                    "description": "Serial peripheral interrupt enable.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INTBLOCK": {
    +                            "description": "SPI interrupts are inhibited.",
    +                            "value": 0
    +                          },
    +                          "HWINT": {
    +                            "description": "A hardware interrupt is generated each time the SPIF or MODF bits are activated.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "BITS": {
    +                    "description": "When bit 2 of this register is 1, this field controls the number of bits per transfer:",
    +                    "offset": 8,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "8_BITS_PER_TRANSFER": {
    +                            "description": "8 bits per transfer",
    +                            "value": 8
    +                          },
    +                          "9_BITS_PER_TRANSFER": {
    +                            "description": "9 bits per transfer",
    +                            "value": 9
    +                          },
    +                          "10_BITS_PER_TRANSFER": {
    +                            "description": "10 bits per transfer",
    +                            "value": 10
    +                          },
    +                          "11_BITS_PER_TRANSFER": {
    +                            "description": "11 bits per transfer",
    +                            "value": 11
    +                          },
    +                          "12_BITS_PER_TRANSFER": {
    +                            "description": "12 bits per transfer",
    +                            "value": 12
    +                          },
    +                          "13_BITS_PER_TRANSFER": {
    +                            "description": "13 bits per transfer",
    +                            "value": 13
    +                          },
    +                          "14_BITS_PER_TRANSFER": {
    +                            "description": "14 bits per transfer",
    +                            "value": 14
    +                          },
    +                          "15_BITS_PER_TRANSFER": {
    +                            "description": "15 bits per transfer",
    +                            "value": 15
    +                          },
    +                          "16_BITS_PER_TRANSFER": {
    +                            "description": "16 bits per transfer",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "SPI Status Register. This register shows the status of the SPI.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 8,
    +                    "size": 24
    +                  },
    +                  "ABRT": {
    +                    "description": "Slave abort. When 1, this bit indicates that a slave abort has occurred. This bit is cleared by reading this register.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MODF": {
    +                    "description": "Mode fault. when 1, this bit indicates that a Mode fault error has occurred. This bit is cleared by reading this register, then writing the SPI0 control register.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ROVR": {
    +                    "description": "Read overrun. When 1, this bit indicates that a read overrun has occurred. This bit is cleared by reading this register.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "WCOL": {
    +                    "description": "Write collision. When 1, this bit indicates that a write collision has occurred. This bit is cleared by reading this register, then accessing the SPI Data Register.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SPIF": {
    +                    "description": "SPI transfer complete flag. When 1, this bit indicates when a SPI data transfer is complete. When a master, this bit is set at the end of the last cycle of the transfer. When a slave, this bit is set on the last data sampling edge of the SCK. This bit is cleared by first reading this register, then accessing the SPI Data Register. Note: this is not the SPI interrupt flag. This flag is found in the SPINT register.",
    +                    "offset": 7,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "SPI Data Register. This bi-directional register provides the transmit and receive data for the SPI. Transmit data is provided to the SPI0 by writing to this register. Data received by the SPI0 can be read from this register.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATALOW": {
    +                    "description": "SPI Bi-directional data port.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "DATAHIGH": {
    +                    "description": "If bit 2 of the SPCR is 1 and bits 11:8 are other than 1000, some or all of these bits contain the additional transmit and receive bits. When less than 16 bits are selected, the more significant among these bits read as zeroes.",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCR": {
    +              "description": "SPI Clock Counter Register. This register controls the frequency of a master's SCK0.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COUNTER": {
    +                    "description": "SPI0 Clock counter setting.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "INT": {
    +              "description": "SPI Interrupt Flag. This register contains the interrupt flag for the SPI interface.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SPIF": {
    +                    "description": "SPI interrupt flag. Set by the SPI interface to generate an interrupt. Cleared by writing a 1 to this bit. Note: this bit will be set once when SPIE = 1 and at least one of SPIF and WCOL bits is 1. However, only when the SPI Interrupt bit is set and SPI0 Interrupt is enabled in the NVIC, SPI based interrupt can be processed by interrupt handling software.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "RTC": {
    +        "description": " Real Time Clock (RTC)  ",
    +        "children": {
    +          "registers": {
    +            "ILR": {
    +              "description": "Interrupt Location Register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTCCIF": {
    +                    "description": "When one, the Counter Increment Interrupt block generated an interrupt. Writing a one to this bit location clears the counter increment interrupt.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RTCALF": {
    +                    "description": "When one, the alarm registers generated an interrupt. Writing a one to this bit location clears the alarm interrupt.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 21,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "CCR": {
    +              "description": "Clock Control Register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "children": {
    +                "fields": {
    +                  "CLKEN": {
    +                    "description": "Clock Enable.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "THE_TIME_COUNTERS_AR": {
    +                            "description": "The time counters are disabled so that they may be initialized.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CTCRST": {
    +                    "description": "CTC Reset.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RESET": {
    +                            "description": "When one, the elements in the internal oscillator divider are reset, and remain reset until CCR[1] is changed to zero. This is the divider that generates the 1 Hz clock from the 32.768 kHz crystal. The state of the divider is not visible to software.",
    +                            "value": 1
    +                          },
    +                          "NO_EFFECT_": {
    +                            "description": "No effect.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 5,
    +                    "size": 27
    +                  },
    +                  "CCALEN": {
    +                    "description": "Calibration counter enable.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "THE_CALIBRATION_COUN": {
    +                            "description": "The calibration counter is enabled and counting, using the 1 Hz clock. When the calibration counter is equal to the value of the CALIBRATION register, the counter resets and repeats counting up to the value of the CALIBRATION register. See Section 30.6.4.2 and  Section 30.6.5.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CIIR": {
    +              "description": "Counter Increment Interrupt Register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IMSEC": {
    +                    "description": "When 1, an increment of the Second value generates an interrupt.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "IMMIN": {
    +                    "description": "When 1, an increment of the Minute value generates an interrupt.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IMHOUR": {
    +                    "description": "When 1, an increment of the Hour value generates an interrupt.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IMDOM": {
    +                    "description": "When 1, an increment of the Day of Month value generates an interrupt.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IMDOW": {
    +                    "description": "When 1, an increment of the Day of Week value generates an interrupt.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IMDOY": {
    +                    "description": "When 1, an increment of the Day of Year value generates an interrupt.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IMMON": {
    +                    "description": "When 1, an increment of the Month value generates an interrupt.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "IMYEAR": {
    +                    "description": "When 1, an increment of the Year value generates an interrupt.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "AMR": {
    +              "description": "Alarm Mask Register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AMRSEC": {
    +                    "description": "When 1, the Second value is not compared for the alarm.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "AMRMIN": {
    +                    "description": "When 1, the Minutes value is not compared for the alarm.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AMRHOUR": {
    +                    "description": "When 1, the Hour value is not compared for the alarm.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "AMRDOM": {
    +                    "description": "When 1, the Day of Month value is not compared for the alarm.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "AMRDOW": {
    +                    "description": "When 1, the Day of Week value is not compared for the alarm.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "AMRDOY": {
    +                    "description": "When 1, the Day of Year value is not compared for the alarm.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "AMRMON": {
    +                    "description": "When 1, the Month value is not compared for the alarm.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "AMRYEAR": {
    +                    "description": "When 1, the Year value is not compared for the alarm.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "CTIME0": {
    +              "description": "Consolidated Time Register 0",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SECONDS": {
    +                    "description": "Seconds value in the range of 0 to 59",
    +                    "offset": 0,
    +                    "size": 6
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from a reserved bit is not defined.",
    +                    "offset": 27,
    +                    "size": 5
    +                  },
    +                  "MINUTES": {
    +                    "description": "Minutes value in the range of 0 to 59",
    +                    "offset": 8,
    +                    "size": 6
    +                  },
    +                  "HOURS": {
    +                    "description": "Hours value in the range of 0 to 23",
    +                    "offset": 16,
    +                    "size": 5
    +                  },
    +                  "DOW": {
    +                    "description": "Day of week value in the range of 0 to 6",
    +                    "offset": 24,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "CTIME1": {
    +              "description": "Consolidated Time Register 1",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DOM": {
    +                    "description": "Day of month value in the range of 1 to 28, 29, 30, or 31 (depending on the month and whether it is a leap year).",
    +                    "offset": 0,
    +                    "size": 5
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from a reserved bit is not defined.",
    +                    "offset": 28,
    +                    "size": 4
    +                  },
    +                  "MONTH": {
    +                    "description": "Month value in the range of 1 to 12.",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "YEAR": {
    +                    "description": "Year value in the range of 0 to 4095.",
    +                    "offset": 16,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "CTIME2": {
    +              "description": "Consolidated Time Register 2",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DOY": {
    +                    "description": "Day of year value in the range of 1 to 365 (366 for leap years).",
    +                    "offset": 0,
    +                    "size": 12
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from a reserved bit is not defined.",
    +                    "offset": 12,
    +                    "size": 20
    +                  }
    +                }
    +              }
    +            },
    +            "SEC": {
    +              "description": "Seconds Counter",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "children": {
    +                "fields": {
    +                  "SECONDS": {
    +                    "description": "Seconds value in the range of 0 to 59",
    +                    "offset": 0,
    +                    "size": 6
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 6,
    +                    "size": 26
    +                  }
    +                }
    +              }
    +            },
    +            "MIN": {
    +              "description": "Minutes Register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "children": {
    +                "fields": {
    +                  "MINUTES": {
    +                    "description": "Minutes value in the range of 0 to 59",
    +                    "offset": 0,
    +                    "size": 6
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 6,
    +                    "size": 26
    +                  }
    +                }
    +              }
    +            },
    +            "HRS": {
    +              "description": "Hours Register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "children": {
    +                "fields": {
    +                  "HOURS": {
    +                    "description": "Hours value in the range of 0 to 23",
    +                    "offset": 0,
    +                    "size": 5
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 5,
    +                    "size": 27
    +                  }
    +                }
    +              }
    +            },
    +            "DOM": {
    +              "description": "Day of Month Register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "children": {
    +                "fields": {
    +                  "DOM": {
    +                    "description": "Day of month value in the range of 1 to 28, 29, 30, or 31 (depending on the month and whether it is a leap year).",
    +                    "offset": 0,
    +                    "size": 5
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 5,
    +                    "size": 27
    +                  }
    +                }
    +              }
    +            },
    +            "DOW": {
    +              "description": "Day of Week Register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "children": {
    +                "fields": {
    +                  "DOW": {
    +                    "description": "Day of week value in the range of 0 to 6.",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 3,
    +                    "size": 29
    +                  }
    +                }
    +              }
    +            },
    +            "DOY": {
    +              "description": "Day of Year Register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "children": {
    +                "fields": {
    +                  "DOY": {
    +                    "description": "Day of year value in the range of 1 to 365 (366 for leap years).",
    +                    "offset": 0,
    +                    "size": 9
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 9,
    +                    "size": 23
    +                  }
    +                }
    +              }
    +            },
    +            "MONTH": {
    +              "description": "Months Register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "children": {
    +                "fields": {
    +                  "MONTH": {
    +                    "description": "Month value in the range of 1 to 12.",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 4,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            },
    +            "YEAR": {
    +              "description": "Years Register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "children": {
    +                "fields": {
    +                  "YEAR": {
    +                    "description": "Year value in the range of 0 to 4095.",
    +                    "offset": 0,
    +                    "size": 12
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 12,
    +                    "size": 20
    +                  }
    +                }
    +              }
    +            },
    +            "CALIBRATION": {
    +              "description": "Calibration Value Register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "children": {
    +                "fields": {
    +                  "CALVAL": {
    +                    "description": "If enabled, the calibration counter counts up to this value. The maximum value is 131, 072 corresponding to about 36.4 hours. Calibration is disabled if CALVAL = 0.",
    +                    "offset": 0,
    +                    "size": 17
    +                  },
    +                  "CALDIR": {
    +                    "description": "Calibration direction",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "BACKWARD_CALIBRATION": {
    +                            "description": "Backward calibration. When CALVAL is equal to the calibration counter, the RTC timers will stop incrementing for 1 second.",
    +                            "value": 1
    +                          },
    +                          "FORWARD_CALIBRATION_": {
    +                            "description": "Forward calibration. When CALVAL is equal to the calibration counter, the RTC timers will jump by 2 seconds.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "RTC_AUX": {
    +              "description": "RTC Auxiliary control register",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 16,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 7,
    +                    "size": 25
    +                  },
    +                  "RTC_OSCF": {
    +                    "description": "RTC Oscillator Fail detect flag. Read: this bit is set if the RTC oscillator stops, and when RTC power is first turned on. An interrupt will occur when this bit is set, the RTC_OSCFEN bit in RTC_AUXEN is a 1, and the RTC interrupt is enabled in the NVIC. Write: writing a 1 to this bit clears the flag.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RTC_PDOUT": {
    +                    "description": "When 0: the RTC_ALARM pin reflects the RTC alarm status. When 1: the RTC_ALARM pin indicates Deep Power-down mode.",
    +                    "offset": 6,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RTC_AUXEN": {
    +              "description": "RTC Auxiliary Enable register",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 5,
    +                    "size": 27
    +                  },
    +                  "RTC_OSCFEN": {
    +                    "description": "Oscillator Fail Detect interrupt enable. When 0: the RTC Oscillator Fail detect interrupt is disabled. When 1: the RTC Oscillator Fail detect interrupt is enabled. See Section 30.6.2.5.",
    +                    "offset": 4,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ASEC": {
    +              "description": "Alarm value for Seconds",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "children": {
    +                "fields": {
    +                  "SECONDS": {
    +                    "description": "Seconds value in the range of 0 to 59",
    +                    "offset": 0,
    +                    "size": 6
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 6,
    +                    "size": 26
    +                  }
    +                }
    +              }
    +            },
    +            "AMIN": {
    +              "description": "Alarm value for Minutes",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "children": {
    +                "fields": {
    +                  "MINUTES": {
    +                    "description": "Minutes value in the range of 0 to 59",
    +                    "offset": 0,
    +                    "size": 6
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 6,
    +                    "size": 26
    +                  }
    +                }
    +              }
    +            },
    +            "AHRS": {
    +              "description": "Alarm value for Hours",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "children": {
    +                "fields": {
    +                  "HOURS": {
    +                    "description": "Hours value in the range of 0 to 23",
    +                    "offset": 0,
    +                    "size": 5
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 5,
    +                    "size": 27
    +                  }
    +                }
    +              }
    +            },
    +            "ADOM": {
    +              "description": "Alarm value for Day of Month",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "children": {
    +                "fields": {
    +                  "DOM": {
    +                    "description": "Day of month value in the range of 1 to 28, 29, 30, or 31 (depending on the month and whether it is a leap year).",
    +                    "offset": 0,
    +                    "size": 5
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 5,
    +                    "size": 27
    +                  }
    +                }
    +              }
    +            },
    +            "ADOW": {
    +              "description": "Alarm value for Day of Week",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "children": {
    +                "fields": {
    +                  "DOW": {
    +                    "description": "Day of week value in the range of 0 to 6.",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 3,
    +                    "size": 29
    +                  }
    +                }
    +              }
    +            },
    +            "ADOY": {
    +              "description": "Alarm value for Day of Year",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "children": {
    +                "fields": {
    +                  "DOY": {
    +                    "description": "Day of year value in the range of 1 to 365 (366 for leap years).",
    +                    "offset": 0,
    +                    "size": 9
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 9,
    +                    "size": 23
    +                  }
    +                }
    +              }
    +            },
    +            "AMON": {
    +              "description": "Alarm value for Months",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "children": {
    +                "fields": {
    +                  "MONTH": {
    +                    "description": "Month value in the range of 1 to 12.",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 4,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            },
    +            "AYRS": {
    +              "description": "Alarm value for Year",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "children": {
    +                "fields": {
    +                  "YEAR": {
    +                    "description": "Year value in the range of 0 to 4095.",
    +                    "offset": 0,
    +                    "size": 12
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 12,
    +                    "size": 20
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "GPIOINT": {
    +        "description": "GPIO",
    +        "children": {
    +          "registers": {
    +            "STATUS": {
    +              "description": "GPIO overall Interrupt Status.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "P0INT": {
    +                    "description": "Port 0 GPIO interrupt pending.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NO_PENDING_INTERRUPT": {
    +                            "description": "No pending interrupts on Port 0.",
    +                            "value": 0
    +                          },
    +                          "AT_LEAST_ONE_PENDING": {
    +                            "description": "At least one pending interrupt on Port 0.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from a reserved bit is not defined.",
    +                    "offset": 2,
    +                    "size": 30
    +                  },
    +                  "P2INT": {
    +                    "description": "Port 2 GPIO interrupt pending.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NO_PENDING_INTERRUPT": {
    +                            "description": "No pending interrupts on Port 2.",
    +                            "value": 0
    +                          },
    +                          "AT_LEAST_ONE_PENDING": {
    +                            "description": "At least one pending interrupt on Port 2.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "STATR0": {
    +              "description": "GPIO Interrupt Status for Rising edge for Port 0.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "P0_0REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[0]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "P0_1REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[1]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "P0_2REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[2]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "P0_3REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[3]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "P0_4REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[4]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "P0_5REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[5]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "P0_6REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[6]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "P0_7REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[7]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "P0_8REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[8]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "P0_9REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[9]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "P0_10REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[10]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "P0_11REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[11]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "P0_12REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[12]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "P0_13REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[13]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "P0_14REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[14]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "P0_15REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[15]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "P0_16REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[16]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "P0_17REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[17]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "P0_18REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[18]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "P0_19REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[19]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "P0_20REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[20]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "P0_21REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[21]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "P0_22REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[22]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "P0_23REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[23]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "P0_24REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[24]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "P0_25REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[25]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "P0_26REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[26]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "P0_27REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[27]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "P0_28REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[28]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "P0_29REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[29]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "P0_30REI": {
    +                    "description": "Status of Rising Edge Interrupt for P0[30]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "STATF0": {
    +              "description": "GPIO Interrupt Status for Falling edge for Port 0.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "P0_0FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[0]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "P0_1FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[1]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "P0_2FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[2]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "P0_3FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[3]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "P0_4FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[4]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "P0_5FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[5]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "P0_6FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[6]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "P0_7FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[7]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "P0_8FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[8]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "P0_9FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[9]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "P0_10FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[10]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "P0_11FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[11]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "P0_12FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[12]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "P0_13FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[13]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "P0_14FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[14]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "P0_15FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[15]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "P0_16FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[16]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "P0_17FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[17]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "P0_18FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[18]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "P0_19FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[19]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "P0_20FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[20]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "P0_21FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[21]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "P0_22FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[22]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "P0_23FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[23]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "P0_24FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[24]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "P0_25FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[25]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "P0_26FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[26]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "P0_27FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[27]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "P0_28FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[28]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "P0_29FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[29]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "P0_30FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P0[30]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLR0": {
    +              "description": "GPIO Interrupt Clear.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "P0_0CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[0]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "P0_1CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[1]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "P0_2CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[2]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "P0_3CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[3]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "P0_4CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[4]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "P0_5CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[5]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "P0_6CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[6]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "P0_7CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[7]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "P0_8CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[8]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "P0_9CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[9]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "P0_10CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[10]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "P0_11CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[11]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "P0_12CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[12]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "P0_13CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[13]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "P0_14CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[14]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "P0_15CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[15]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "P0_16CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[16]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "P0_17CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[17]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "P0_18CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[18]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "P0_19CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[19]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "P0_20CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[20]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "P0_21CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[21]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "P0_22CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[22]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "P0_23CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[23]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "P0_24CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[24]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "P0_25CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[25]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "P0_26CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[26]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "P0_27CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[27]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "P0_28CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[28]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "P0_29CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[29]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "P0_30CI": {
    +                    "description": "Clear GPIO port Interrupts for P0[30]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ENR0": {
    +              "description": "GPIO Interrupt Enable for Rising edge for Port 0.",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "P0_0ER": {
    +                    "description": "Enable rising edge interrupt for P0[0]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "P0_1ER": {
    +                    "description": "Enable rising edge interrupt for P0[1]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "P0_2ER": {
    +                    "description": "Enable rising edge interrupt for P0[2]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "P0_3ER": {
    +                    "description": "Enable rising edge interrupt for P0[3]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "P0_4ER": {
    +                    "description": "Enable rising edge interrupt for P0[4]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "P0_5ER": {
    +                    "description": "Enable rising edge interrupt for P0[5]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "P0_6ER": {
    +                    "description": "Enable rising edge interrupt for P0[6]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "P0_7ER": {
    +                    "description": "Enable rising edge interrupt for P0[7]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "P0_8ER": {
    +                    "description": "Enable rising edge interrupt for P0[8]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "P0_9ER": {
    +                    "description": "Enable rising edge interrupt for P0[9]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "P0_10ER": {
    +                    "description": "Enable rising edge interrupt for P0[10]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "P0_11ER": {
    +                    "description": "Enable rising edge interrupt for P0[11]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "P0_12ER": {
    +                    "description": "Enable rising edge interrupt for P0[12]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "P0_13ER": {
    +                    "description": "Enable rising edge interrupt for P0[13]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "P0_14ER": {
    +                    "description": "Enable rising edge interrupt for P0[14]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "P0_15ER": {
    +                    "description": "Enable rising edge interrupt for P0[15]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "P0_16ER": {
    +                    "description": "Enable rising edge interrupt for P0[16]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "P0_17ER": {
    +                    "description": "Enable rising edge interrupt for P0[17]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "P0_18ER": {
    +                    "description": "Enable rising edge interrupt for P0[18]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "P0_19ER": {
    +                    "description": "Enable rising edge interrupt for P0[19]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "P0_20ER": {
    +                    "description": "Enable rising edge interrupt for P0[20]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "P0_21ER": {
    +                    "description": "Enable rising edge interrupt for P0[21]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "P0_22ER": {
    +                    "description": "Enable rising edge interrupt for P0[22]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "P0_23ER": {
    +                    "description": "Enable rising edge interrupt for P0[23]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "P0_24ER": {
    +                    "description": "Enable rising edge interrupt for P0[24]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "P0_25ER": {
    +                    "description": "Enable rising edge interrupt for P0[25]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "P0_26ER": {
    +                    "description": "Enable rising edge interrupt for P0[26]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "P0_27ER": {
    +                    "description": "Enable rising edge interrupt for P0[27]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "P0_28ER": {
    +                    "description": "Enable rising edge interrupt for P0[28]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "P0_29ER": {
    +                    "description": "Enable rising edge interrupt for P0[29]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "P0_30ER": {
    +                    "description": "Enable rising edge interrupt for P0[30]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ENF0": {
    +              "description": "GPIO Interrupt Enable for Falling edge for Port 0.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "P0_0EF": {
    +                    "description": "Enable falling edge interrupt for P0[0]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "P0_1EF": {
    +                    "description": "Enable falling edge interrupt for P0[1]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "P0_2EF": {
    +                    "description": "Enable falling edge interrupt for P0[2]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "P0_3EF": {
    +                    "description": "Enable falling edge interrupt for P0[3]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "P0_4EF": {
    +                    "description": "Enable falling edge interrupt for P0[4]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "P0_5EF": {
    +                    "description": "Enable falling edge interrupt for P0[5]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "P0_6EF": {
    +                    "description": "Enable falling edge interrupt for P0[6]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "P0_7EF": {
    +                    "description": "Enable falling edge interrupt for P0[7]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "P0_8EF": {
    +                    "description": "Enable falling edge interrupt for P0[8]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "P0_9EF": {
    +                    "description": "Enable falling edge interrupt for P0[9]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "P0_10EF": {
    +                    "description": "Enable falling edge interrupt for P0[10]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "P0_11EF": {
    +                    "description": "Enable falling edge interrupt for P0[11]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "P0_12EF": {
    +                    "description": "Enable falling edge interrupt for P0[12]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "P0_13EF": {
    +                    "description": "Enable falling edge interrupt for P0[13]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "P0_14EF": {
    +                    "description": "Enable falling edge interrupt for P0[14]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "P0_15EF": {
    +                    "description": "Enable falling edge interrupt for P0[15]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "P0_16EF": {
    +                    "description": "Enable falling edge interrupt for P0[16]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "P0_17EF": {
    +                    "description": "Enable falling edge interrupt for P0[17]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "P0_18EF": {
    +                    "description": "Enable falling edge interrupt for P0[18]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "P0_19EF": {
    +                    "description": "Enable falling edge interrupt for P0[19]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "P0_20EF": {
    +                    "description": "Enable falling edge interrupt for P0[20]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "P0_21EF": {
    +                    "description": "Enable falling edge interrupt for P0[21]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "P0_22EF": {
    +                    "description": "Enable falling edge interrupt for P0[22]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "P0_23EF": {
    +                    "description": "Enable falling edge interrupt for P0[23]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "P0_24EF": {
    +                    "description": "Enable falling edge interrupt for P0[24]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "P0_25EF": {
    +                    "description": "Enable falling edge interrupt for P0[25]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "P0_26EF": {
    +                    "description": "Enable falling edge interrupt for P0[26]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "P0_27EF": {
    +                    "description": "Enable falling edge interrupt for P0[27]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "P0_28EF": {
    +                    "description": "Enable falling edge interrupt for P0[28]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "P0_29EF": {
    +                    "description": "Enable falling edge interrupt for P0[29]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "P0_30EF": {
    +                    "description": "Enable falling edge interrupt for P0[30]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "STATR2": {
    +              "description": "GPIO Interrupt Status for Rising edge for Port 0.",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "P2_0REI": {
    +                    "description": "Status of Rising Edge Interrupt for P2[0]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "P2_1REI": {
    +                    "description": "Status of Rising Edge Interrupt for P2[1]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "P2_2REI": {
    +                    "description": "Status of Rising Edge Interrupt for P2[2]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "P2_3REI": {
    +                    "description": "Status of Rising Edge Interrupt for P2[3]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "P2_4REI": {
    +                    "description": "Status of Rising Edge Interrupt for P2[4]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "P2_5REI": {
    +                    "description": "Status of Rising Edge Interrupt for P2[5]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "P2_6REI": {
    +                    "description": "Status of Rising Edge Interrupt for P2[6]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "P2_7REI": {
    +                    "description": "Status of Rising Edge Interrupt for P2[7]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "P2_8REI": {
    +                    "description": "Status of Rising Edge Interrupt for P2[8]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "P2_9REI": {
    +                    "description": "Status of Rising Edge Interrupt for P2[9]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "P2_10REI": {
    +                    "description": "Status of Rising Edge Interrupt for P2[10]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "P2_11REI": {
    +                    "description": "Status of Rising Edge Interrupt for P2[11]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "P2_12REI": {
    +                    "description": "Status of Rising Edge Interrupt for P2[12]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "P2_13REI": {
    +                    "description": "Status of Rising Edge Interrupt for P2[13]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 14,
    +                    "size": 18
    +                  }
    +                }
    +              }
    +            },
    +            "STATF2": {
    +              "description": "GPIO Interrupt Status for Falling edge for Port 0.",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "P2_0FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P2[0]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "P2_1FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P2[1]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "P2_2FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P2[2]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "P2_3FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P2[3]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "P2_4FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P2[4]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "P2_5FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P2[5]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "P2_6FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P2[6]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "P2_7FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P2[7]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "P2_8FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P2[8]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "P2_9FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P2[9]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "P2_10FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P2[10]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "P2_11FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P2[11]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "P2_12FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P2[12]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "P2_13FEI": {
    +                    "description": "Status of Falling Edge Interrupt for P2[13]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 14,
    +                    "size": 18
    +                  }
    +                }
    +              }
    +            },
    +            "CLR2": {
    +              "description": "GPIO Interrupt Clear.",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "P2_0CI": {
    +                    "description": "Clear GPIO port Interrupts for P2[0]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "P2_1CI": {
    +                    "description": "Clear GPIO port Interrupts for P2[1]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "P2_2CI": {
    +                    "description": "Clear GPIO port Interrupts for P2[2]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "P2_3CI": {
    +                    "description": "Clear GPIO port Interrupts for P2[3]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "P2_4CI": {
    +                    "description": "Clear GPIO port Interrupts for P2[4]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "P2_5CI": {
    +                    "description": "Clear GPIO port Interrupts for P2[5]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "P2_6CI": {
    +                    "description": "Clear GPIO port Interrupts for P2[6]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "P2_7CI": {
    +                    "description": "Clear GPIO port Interrupts for P2[7]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "P2_8CI": {
    +                    "description": "Clear GPIO port Interrupts for P2[8]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "P2_9CI": {
    +                    "description": "Clear GPIO port Interrupts for P2[9]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "P2_10CI": {
    +                    "description": "Clear GPIO port Interrupts for P2[10]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "P2_11CI": {
    +                    "description": "Clear GPIO port Interrupts for P2[11]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "P2_12CI": {
    +                    "description": "Clear GPIO port Interrupts for P2[12]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "P2_13CI": {
    +                    "description": "Clear GPIO port Interrupts for P2[13]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 14,
    +                    "size": 18
    +                  }
    +                }
    +              }
    +            },
    +            "ENR2": {
    +              "description": "GPIO Interrupt Enable for Rising edge for Port 0.",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "P2_0ER": {
    +                    "description": "Enable rising edge interrupt for P2[0]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "P2_1ER": {
    +                    "description": "Enable rising edge interrupt for P2[1]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "P2_2ER": {
    +                    "description": "Enable rising edge interrupt for P2[2]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "P2_3ER": {
    +                    "description": "Enable rising edge interrupt for P2[3]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "P2_4ER": {
    +                    "description": "Enable rising edge interrupt for P2[4]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "P2_5ER": {
    +                    "description": "Enable rising edge interrupt for P2[5]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "P2_6ER": {
    +                    "description": "Enable rising edge interrupt for P2[6]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "P2_7ER": {
    +                    "description": "Enable rising edge interrupt for P2[7]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "P2_8ER": {
    +                    "description": "Enable rising edge interrupt for P2[8]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "P2_9ER": {
    +                    "description": "Enable rising edge interrupt for P2[9]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "P2_10ER": {
    +                    "description": "Enable rising edge interrupt for P2[10]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "P2_11ER": {
    +                    "description": "Enable rising edge interrupt for P2[11]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "P2_12ER": {
    +                    "description": "Enable rising edge interrupt for P2[12]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "P2_13ER": {
    +                    "description": "Enable rising edge interrupt for P2[13]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 14,
    +                    "size": 18
    +                  }
    +                }
    +              }
    +            },
    +            "ENF2": {
    +              "description": "GPIO Interrupt Enable for Falling edge for Port 0.",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "P2_0EF": {
    +                    "description": "Enable falling edge interrupt for P2[0]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "P2_1EF": {
    +                    "description": "Enable falling edge interrupt for P2[1]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "P2_2EF": {
    +                    "description": "Enable falling edge interrupt for P2[2]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "P2_3EF": {
    +                    "description": "Enable falling edge interrupt for P2[3]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "P2_4EF": {
    +                    "description": "Enable falling edge interrupt for P2[4]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "P2_5EF": {
    +                    "description": "Enable falling edge interrupt for P2[5]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "P2_6EF": {
    +                    "description": "Enable falling edge interrupt for P2[6]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "P2_7EF": {
    +                    "description": "Enable falling edge interrupt for P2[7]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "P2_8EF": {
    +                    "description": "Enable falling edge interrupt for P2[8]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "P2_9EF": {
    +                    "description": "Enable falling edge interrupt for P2[9]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "P2_10EF": {
    +                    "description": "Enable falling edge interrupt for P2[10]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "P2_11EF": {
    +                    "description": "Enable falling edge interrupt for P2[11]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "P2_12EF": {
    +                    "description": "Enable falling edge interrupt for P2[12]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "P2_13EF": {
    +                    "description": "Enable falling edge interrupt for P2[13]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 14,
    +                    "size": 18
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "PINCONNECT": {
    +        "description": "Pin connect block",
    +        "children": {
    +          "registers": {
    +            "PINSEL0": {
    +              "description": "Pin function select register 0.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "P0_0": {
    +                    "description": "Pin function select P0.0.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P0": {
    +                            "description": "GPIO P0.0",
    +                            "value": 0
    +                          },
    +                          "RD1": {
    +                            "description": "RD1",
    +                            "value": 1
    +                          },
    +                          "TXD3": {
    +                            "description": "TXD3",
    +                            "value": 2
    +                          },
    +                          "SDA1": {
    +                            "description": "SDA1",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_1": {
    +                    "description": "Pin function select P0.1.",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P0": {
    +                            "description": "GPIO P0.1",
    +                            "value": 0
    +                          },
    +                          "TD1": {
    +                            "description": "TD1",
    +                            "value": 1
    +                          },
    +                          "RXD3": {
    +                            "description": "RXD3",
    +                            "value": 2
    +                          },
    +                          "SCL1": {
    +                            "description": "SCL1",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_2": {
    +                    "description": "Pin function select P0.2.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P0": {
    +                            "description": "GPIO P0.2",
    +                            "value": 0
    +                          },
    +                          "TXD0": {
    +                            "description": "TXD0",
    +                            "value": 1
    +                          },
    +                          "AD0": {
    +                            "description": "AD0.7",
    +                            "value": 2
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_3": {
    +                    "description": "Pin function select P0.3.",
    +                    "offset": 6,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P0": {
    +                            "description": "GPIO P0.3.",
    +                            "value": 0
    +                          },
    +                          "RXD0": {
    +                            "description": "RXD0",
    +                            "value": 1
    +                          },
    +                          "AD0": {
    +                            "description": "AD0.6",
    +                            "value": 2
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_4": {
    +                    "description": "Pin function select P0.4.",
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P0": {
    +                            "description": "GPIO P0.4.",
    +                            "value": 0
    +                          },
    +                          "I2SRX_CLK": {
    +                            "description": "I2SRX_CLK",
    +                            "value": 1
    +                          },
    +                          "RD2": {
    +                            "description": "RD2",
    +                            "value": 2
    +                          },
    +                          "CAP2": {
    +                            "description": "CAP2.0",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_5": {
    +                    "description": "Pin function select P0.5.",
    +                    "offset": 10,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P0": {
    +                            "description": "GPIO P0.5.",
    +                            "value": 0
    +                          },
    +                          "I2SRX_WS": {
    +                            "description": "I2SRX_WS",
    +                            "value": 1
    +                          },
    +                          "TD2": {
    +                            "description": "TD2",
    +                            "value": 2
    +                          },
    +                          "CAP2": {
    +                            "description": "CAP2.1",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_6": {
    +                    "description": "Pin function select P0.6.",
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P0": {
    +                            "description": "GPIO P0.6.",
    +                            "value": 0
    +                          },
    +                          "I2SRX_SDA": {
    +                            "description": "I2SRX_SDA",
    +                            "value": 1
    +                          },
    +                          "SSEL1": {
    +                            "description": "SSEL1",
    +                            "value": 2
    +                          },
    +                          "MAT2": {
    +                            "description": "MAT2.0",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_7": {
    +                    "description": "Pin function select P0.7.",
    +                    "offset": 14,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P0": {
    +                            "description": "GPIO P0.7.",
    +                            "value": 0
    +                          },
    +                          "I2STX_CLK": {
    +                            "description": "I2STX_CLK",
    +                            "value": 1
    +                          },
    +                          "SCK1": {
    +                            "description": "SCK1",
    +                            "value": 2
    +                          },
    +                          "MAT2": {
    +                            "description": "MAT2.1",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_8": {
    +                    "description": "Pin function select P0.8.",
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P0": {
    +                            "description": "GPIO P0.8.",
    +                            "value": 0
    +                          },
    +                          "I2STX_WS": {
    +                            "description": "I2STX_WS",
    +                            "value": 1
    +                          },
    +                          "MISO1": {
    +                            "description": "MISO1",
    +                            "value": 2
    +                          },
    +                          "MAT2": {
    +                            "description": "MAT2.2",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_9": {
    +                    "description": "Pin function select P0.9.",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P0": {
    +                            "description": "GPIO P0.9",
    +                            "value": 0
    +                          },
    +                          "I2STX_SDA": {
    +                            "description": "I2STX_SDA",
    +                            "value": 1
    +                          },
    +                          "MOSI1": {
    +                            "description": "MOSI1",
    +                            "value": 2
    +                          },
    +                          "MAT2": {
    +                            "description": "MAT2.3",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_10": {
    +                    "description": "Pin function select P0.10.",
    +                    "offset": 20,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P0": {
    +                            "description": "GPIO P0.10",
    +                            "value": 0
    +                          },
    +                          "TXD2": {
    +                            "description": "TXD2",
    +                            "value": 1
    +                          },
    +                          "SDA2": {
    +                            "description": "SDA2",
    +                            "value": 2
    +                          },
    +                          "MAT3": {
    +                            "description": "MAT3.0",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_11": {
    +                    "description": "Pin function select P0.11.",
    +                    "offset": 22,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P0": {
    +                            "description": "GPIO P0.11",
    +                            "value": 0
    +                          },
    +                          "RXD2": {
    +                            "description": "RXD2",
    +                            "value": 1
    +                          },
    +                          "SCL2": {
    +                            "description": "SCL2",
    +                            "value": 2
    +                          },
    +                          "MAT3": {
    +                            "description": "MAT3.1",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 24,
    +                    "size": 6
    +                  },
    +                  "P0_15": {
    +                    "description": "Pin function select P0.15.",
    +                    "offset": 30,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P0": {
    +                            "description": "GPIO P0.15",
    +                            "value": 0
    +                          },
    +                          "TXD1": {
    +                            "description": "TXD1",
    +                            "value": 1
    +                          },
    +                          "SCK0": {
    +                            "description": "SCK0",
    +                            "value": 2
    +                          },
    +                          "SCK": {
    +                            "description": "SCK",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PINSEL1": {
    +              "description": "Pin function select register 1.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "P0_16": {
    +                    "description": "Pin function select P0.16.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P0": {
    +                            "description": "GPIO P0.16",
    +                            "value": 0
    +                          },
    +                          "RXD1": {
    +                            "description": "RXD1",
    +                            "value": 1
    +                          },
    +                          "SSEL0": {
    +                            "description": "SSEL0",
    +                            "value": 2
    +                          },
    +                          "SSEL": {
    +                            "description": "SSEL",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_17": {
    +                    "description": "Pin function select P0.17.",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P0": {
    +                            "description": "GPIO P0.17",
    +                            "value": 0
    +                          },
    +                          "CTS1": {
    +                            "description": "CTS1",
    +                            "value": 1
    +                          },
    +                          "MISO0": {
    +                            "description": "MISO0",
    +                            "value": 2
    +                          },
    +                          "MISO": {
    +                            "description": "MISO",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_18": {
    +                    "description": "Pin function select P0.18.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P0": {
    +                            "description": "GPIO P0.18",
    +                            "value": 0
    +                          },
    +                          "DCD1": {
    +                            "description": "DCD1",
    +                            "value": 1
    +                          },
    +                          "MOSI0": {
    +                            "description": "MOSI0",
    +                            "value": 2
    +                          },
    +                          "MOSI": {
    +                            "description": "MOSI",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_19": {
    +                    "description": "Pin function select P019.",
    +                    "offset": 6,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P0": {
    +                            "description": "GPIO P0.19.",
    +                            "value": 0
    +                          },
    +                          "DSR1": {
    +                            "description": "DSR1",
    +                            "value": 1
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 2
    +                          },
    +                          "SDA1": {
    +                            "description": "SDA1",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_20": {
    +                    "description": "Pin function select P0.20.",
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P0": {
    +                            "description": "GPIO P0.20.",
    +                            "value": 0
    +                          },
    +                          "DTR1": {
    +                            "description": "DTR1",
    +                            "value": 1
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 2
    +                          },
    +                          "SCL1": {
    +                            "description": "SCL1",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_21": {
    +                    "description": "Pin function select P0.21.",
    +                    "offset": 10,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_PORT_0": {
    +                            "description": "GPIO Port 0.21.",
    +                            "value": 0
    +                          },
    +                          "RI1": {
    +                            "description": "RI1",
    +                            "value": 1
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 2
    +                          },
    +                          "RD1": {
    +                            "description": "RD1",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_22": {
    +                    "description": "Pin function select P022",
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P0": {
    +                            "description": "GPIO P0.22.",
    +                            "value": 0
    +                          },
    +                          "RTS1": {
    +                            "description": "RTS1",
    +                            "value": 1
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 2
    +                          },
    +                          "TD1": {
    +                            "description": "TD1",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_23": {
    +                    "description": "Pin function select P023.",
    +                    "offset": 14,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P0": {
    +                            "description": "GPIO P0.23.",
    +                            "value": 0
    +                          },
    +                          "AD0": {
    +                            "description": "AD0.0",
    +                            "value": 1
    +                          },
    +                          "I2SRX_CLK": {
    +                            "description": "I2SRX_CLK",
    +                            "value": 2
    +                          },
    +                          "CAP3": {
    +                            "description": "CAP3.0",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_24": {
    +                    "description": "Pin function select P0.24.",
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P0": {
    +                            "description": "GPIO P0.24.",
    +                            "value": 0
    +                          },
    +                          "AD0": {
    +                            "description": "AD0.1",
    +                            "value": 1
    +                          },
    +                          "I2SRX_WS": {
    +                            "description": "I2SRX_WS",
    +                            "value": 2
    +                          },
    +                          "CAP3": {
    +                            "description": "CAP3.1",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_25": {
    +                    "description": "Pin function select P0.25.",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P0": {
    +                            "description": "GPIO P0.25",
    +                            "value": 0
    +                          },
    +                          "AD0": {
    +                            "description": "AD0.2",
    +                            "value": 1
    +                          },
    +                          "I2SRX_SDA": {
    +                            "description": "I2SRX_SDA",
    +                            "value": 2
    +                          },
    +                          "TXD3": {
    +                            "description": "TXD3",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_26": {
    +                    "description": "Pin function select P0.26.",
    +                    "offset": 20,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P0": {
    +                            "description": "GPIO P0.26",
    +                            "value": 0
    +                          },
    +                          "AD0": {
    +                            "description": "AD0.3",
    +                            "value": 1
    +                          },
    +                          "AOUT": {
    +                            "description": "AOUT",
    +                            "value": 2
    +                          },
    +                          "RXD3": {
    +                            "description": "RXD3",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_27": {
    +                    "description": "Pin function select P0.27.",
    +                    "offset": 22,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P0": {
    +                            "description": "GPIO P0.27",
    +                            "value": 0
    +                          },
    +                          "SDA0": {
    +                            "description": "SDA0",
    +                            "value": 1
    +                          },
    +                          "USB_SDA": {
    +                            "description": "USB_SDA",
    +                            "value": 2
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_28": {
    +                    "description": "Pin function select P0.28.",
    +                    "offset": 24,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P0": {
    +                            "description": "GPIO P0.28",
    +                            "value": 0
    +                          },
    +                          "SCL0": {
    +                            "description": "SCL0",
    +                            "value": 1
    +                          },
    +                          "USB_SCL": {
    +                            "description": "USB_SCL",
    +                            "value": 2
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_29": {
    +                    "description": "Pin function select P0.29",
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P0": {
    +                            "description": "GPIO P0.29",
    +                            "value": 0
    +                          },
    +                          "USB_DP": {
    +                            "description": "USB_D+",
    +                            "value": 1
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_30": {
    +                    "description": "Pin function select P0.30.",
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P0": {
    +                            "description": "GPIO P0.30",
    +                            "value": 0
    +                          },
    +                          "USB_DM": {
    +                            "description": "USB_D-",
    +                            "value": 1
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved",
    +                    "offset": 30,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "PINSEL2": {
    +              "description": "Pin function select register 2.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "P1_0": {
    +                    "description": "Pin function select P1.0.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P1": {
    +                            "description": "GPIO P1.0",
    +                            "value": 0
    +                          },
    +                          "ENET_TXD0": {
    +                            "description": "ENET_TXD0",
    +                            "value": 1
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_1": {
    +                    "description": "Pin function select P1.1.",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P1": {
    +                            "description": "GPIO P1.1",
    +                            "value": 0
    +                          },
    +                          "ENET_TXD1": {
    +                            "description": "ENET_TXD1",
    +                            "value": 1
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 24,
    +                    "size": 6
    +                  },
    +                  "P1_4": {
    +                    "description": "Pin function select P1.4.",
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P1": {
    +                            "description": "GPIO P1.4.",
    +                            "value": 0
    +                          },
    +                          "ENET_TX_EN": {
    +                            "description": "ENET_TX_EN",
    +                            "value": 1
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_8": {
    +                    "description": "Pin function select P1.8.",
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P1": {
    +                            "description": "GPIO P1.8.",
    +                            "value": 0
    +                          },
    +                          "ENET_CRS": {
    +                            "description": "ENET_CRS",
    +                            "value": 1
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_9": {
    +                    "description": "Pin function select P1.9.",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_PORT_1": {
    +                            "description": "GPIO Port 1.9",
    +                            "value": 0
    +                          },
    +                          "ENET_RXD0": {
    +                            "description": "ENET_RXD0",
    +                            "value": 1
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_10": {
    +                    "description": "Pin function select P1.10.",
    +                    "offset": 20,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P1": {
    +                            "description": "GPIO P1.10",
    +                            "value": 0
    +                          },
    +                          "ENET_RXD1": {
    +                            "description": "ENET_RXD1",
    +                            "value": 1
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_14": {
    +                    "description": "Pin function select P1.14.",
    +                    "offset": 22,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P1": {
    +                            "description": "GPIO P1.14",
    +                            "value": 0
    +                          },
    +                          "ENET_RX_ER": {
    +                            "description": "ENET_RX_ER",
    +                            "value": 1
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_15": {
    +                    "description": "Pin function select P1.15.",
    +                    "offset": 30,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P1": {
    +                            "description": "GPIO P1.15",
    +                            "value": 0
    +                          },
    +                          "ENET_REF_CLK": {
    +                            "description": "ENET_REF_CLK",
    +                            "value": 1
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PINSEL3": {
    +              "description": "Pin function select register 3.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "P1_16": {
    +                    "description": "Pin function select P1.16.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P1": {
    +                            "description": "GPIO P1.16",
    +                            "value": 0
    +                          },
    +                          "ENET_MDC": {
    +                            "description": "ENET_MDC",
    +                            "value": 1
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_17": {
    +                    "description": "Pin function select P1.17.",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P1": {
    +                            "description": "GPIO P1.17",
    +                            "value": 0
    +                          },
    +                          "ENET_MDIO": {
    +                            "description": "ENET_MDIO",
    +                            "value": 1
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_18": {
    +                    "description": "Pin function select P1.18.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P1": {
    +                            "description": "GPIO P1.18",
    +                            "value": 0
    +                          },
    +                          "USB_UP_LED": {
    +                            "description": "USB_UP_LED",
    +                            "value": 1
    +                          },
    +                          "PWM1": {
    +                            "description": "PWM1.1",
    +                            "value": 2
    +                          },
    +                          "CAP1": {
    +                            "description": "CAP1.0",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_19": {
    +                    "description": "Pin function select P1.19.",
    +                    "offset": 6,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P1": {
    +                            "description": "GPIO P1.19.",
    +                            "value": 0
    +                          },
    +                          "MCOA0": {
    +                            "description": "MCOA0",
    +                            "value": 1
    +                          },
    +                          "USB_PPWR": {
    +                            "description": "USB_PPWR",
    +                            "value": 2
    +                          },
    +                          "CAP1": {
    +                            "description": "CAP1.1",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_20": {
    +                    "description": "Pin function select P1.20.",
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P1": {
    +                            "description": "GPIO P1.20.",
    +                            "value": 0
    +                          },
    +                          "MCI0": {
    +                            "description": "MCI0",
    +                            "value": 1
    +                          },
    +                          "PWM1": {
    +                            "description": "PWM1.2",
    +                            "value": 2
    +                          },
    +                          "SCK0": {
    +                            "description": "SCK0",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_21": {
    +                    "description": "Pin function select P1.21.",
    +                    "offset": 10,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P1": {
    +                            "description": "GPIO P1.21.",
    +                            "value": 0
    +                          },
    +                          "MCABORT": {
    +                            "description": "MCABORT",
    +                            "value": 1
    +                          },
    +                          "PWM1": {
    +                            "description": "PWM1.3",
    +                            "value": 2
    +                          },
    +                          "SSEL0": {
    +                            "description": "SSEL0",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_22": {
    +                    "description": "Pin function select P1.22",
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P1": {
    +                            "description": "GPIO P1.22.",
    +                            "value": 0
    +                          },
    +                          "MCOB0": {
    +                            "description": "MCOB0",
    +                            "value": 1
    +                          },
    +                          "USB_PWRD": {
    +                            "description": "USB_PWRD",
    +                            "value": 2
    +                          },
    +                          "MAT1": {
    +                            "description": "MAT1.0",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_23": {
    +                    "description": "Pin function select P1.23.",
    +                    "offset": 14,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P1": {
    +                            "description": "GPIO P1.23.",
    +                            "value": 0
    +                          },
    +                          "MCI1": {
    +                            "description": "MCI1",
    +                            "value": 1
    +                          },
    +                          "PWM1": {
    +                            "description": "PWM1.4",
    +                            "value": 2
    +                          },
    +                          "MISO0": {
    +                            "description": "MISO0",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_24": {
    +                    "description": "Pin function select P1.24.",
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P1": {
    +                            "description": "GPIO P1.24.",
    +                            "value": 0
    +                          },
    +                          "MCI2": {
    +                            "description": "MCI2",
    +                            "value": 1
    +                          },
    +                          "PWM1": {
    +                            "description": "PWM1.5",
    +                            "value": 2
    +                          },
    +                          "MOSI0": {
    +                            "description": "MOSI0",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_25": {
    +                    "description": "Pin function select P1.25.",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P1": {
    +                            "description": "GPIO P1.25",
    +                            "value": 0
    +                          },
    +                          "MCOA1": {
    +                            "description": "MCOA1",
    +                            "value": 1
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 2
    +                          },
    +                          "MAT1": {
    +                            "description": "MAT1.1",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_26": {
    +                    "description": "Pin function select P1.26.",
    +                    "offset": 20,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P1": {
    +                            "description": "GPIO P1.26",
    +                            "value": 0
    +                          },
    +                          "MCOB1": {
    +                            "description": "MCOB1",
    +                            "value": 1
    +                          },
    +                          "PWM1": {
    +                            "description": "PWM1.6",
    +                            "value": 2
    +                          },
    +                          "CAP0": {
    +                            "description": "CAP0.0",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_27": {
    +                    "description": "Pin function select P1.27.",
    +                    "offset": 22,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P1": {
    +                            "description": "GPIO P1.27",
    +                            "value": 0
    +                          },
    +                          "CLKOUT": {
    +                            "description": "CLKOUT",
    +                            "value": 1
    +                          },
    +                          "USB_OVRCR": {
    +                            "description": "USB_OVRCR",
    +                            "value": 2
    +                          },
    +                          "CAP0": {
    +                            "description": "CAP0.1",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_28": {
    +                    "description": "Pin function select P1.28.",
    +                    "offset": 24,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P1": {
    +                            "description": "GPIO P1.28",
    +                            "value": 0
    +                          },
    +                          "MCOA2": {
    +                            "description": "MCOA2",
    +                            "value": 1
    +                          },
    +                          "PCAP1": {
    +                            "description": "PCAP1.0",
    +                            "value": 2
    +                          },
    +                          "MAT0": {
    +                            "description": "MAT0.0",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_29": {
    +                    "description": "Pin function select P1.29",
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P1": {
    +                            "description": "GPIO P1.29",
    +                            "value": 0
    +                          },
    +                          "MCOB2": {
    +                            "description": "MCOB2",
    +                            "value": 1
    +                          },
    +                          "PCAP1": {
    +                            "description": "PCAP1.1",
    +                            "value": 2
    +                          },
    +                          "MAT0": {
    +                            "description": "MAT0.1",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_30": {
    +                    "description": "Pin function select P1.30.",
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P1": {
    +                            "description": "GPIO P1.30",
    +                            "value": 0
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 1
    +                          },
    +                          "VBUS": {
    +                            "description": "VBUS",
    +                            "value": 2
    +                          },
    +                          "AD0": {
    +                            "description": "AD0.4",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_31": {
    +                    "description": "Pin function select P1.31.",
    +                    "offset": 30,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_PORT_1": {
    +                            "description": "GPIO Port 1.31",
    +                            "value": 0
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 1
    +                          },
    +                          "SCK1": {
    +                            "description": "SCK1",
    +                            "value": 2
    +                          },
    +                          "AD0": {
    +                            "description": "AD0.5",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PINSEL4": {
    +              "description": "Pin function select register 4",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "P2_0": {
    +                    "description": "Pin function select P2.0.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P2": {
    +                            "description": "GPIO P2.0",
    +                            "value": 0
    +                          },
    +                          "PWM1": {
    +                            "description": "PWM1.1",
    +                            "value": 1
    +                          },
    +                          "TXD1": {
    +                            "description": "TXD1",
    +                            "value": 2
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_1": {
    +                    "description": "Pin function select P2.1.",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P2": {
    +                            "description": "GPIO P2.1",
    +                            "value": 0
    +                          },
    +                          "PWM1": {
    +                            "description": "PWM1.2",
    +                            "value": 1
    +                          },
    +                          "RXD1": {
    +                            "description": "RXD1",
    +                            "value": 2
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_2": {
    +                    "description": "Pin function select P2.2.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P2": {
    +                            "description": "GPIO P2.2",
    +                            "value": 0
    +                          },
    +                          "PWM1": {
    +                            "description": "PWM1.3",
    +                            "value": 1
    +                          },
    +                          "CTS1": {
    +                            "description": "CTS1",
    +                            "value": 2
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_3": {
    +                    "description": "Pin function select P2.3.",
    +                    "offset": 6,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P2": {
    +                            "description": "GPIO P2.3.",
    +                            "value": 0
    +                          },
    +                          "PWM1": {
    +                            "description": "PWM1.4",
    +                            "value": 1
    +                          },
    +                          "DCD1": {
    +                            "description": "DCD1",
    +                            "value": 2
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_4": {
    +                    "description": "Pin function select P2.4.",
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P2": {
    +                            "description": "GPIO P2.4.",
    +                            "value": 0
    +                          },
    +                          "PWM1": {
    +                            "description": "PWM1.5",
    +                            "value": 1
    +                          },
    +                          "DSR1": {
    +                            "description": "DSR1",
    +                            "value": 2
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_5": {
    +                    "description": "Pin function select P2.5.",
    +                    "offset": 10,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P2": {
    +                            "description": "GPIO P2.5.",
    +                            "value": 0
    +                          },
    +                          "PWM1": {
    +                            "description": "PWM1.6",
    +                            "value": 1
    +                          },
    +                          "DTR1": {
    +                            "description": "DTR1",
    +                            "value": 2
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_6": {
    +                    "description": "Pin function select P2.6.",
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P2": {
    +                            "description": "GPIO P2.6.",
    +                            "value": 0
    +                          },
    +                          "PCAP1": {
    +                            "description": "PCAP1.0",
    +                            "value": 1
    +                          },
    +                          "RI1": {
    +                            "description": "RI1",
    +                            "value": 2
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_7": {
    +                    "description": "Pin function select P2.7.",
    +                    "offset": 14,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P2": {
    +                            "description": "GPIO P2.7.",
    +                            "value": 0
    +                          },
    +                          "RD2": {
    +                            "description": "RD2",
    +                            "value": 1
    +                          },
    +                          "RTS1": {
    +                            "description": "RTS1",
    +                            "value": 2
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_8": {
    +                    "description": "Pin function select P2.8.",
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P2": {
    +                            "description": "GPIO P2.8.",
    +                            "value": 0
    +                          },
    +                          "TD2": {
    +                            "description": "TD2",
    +                            "value": 1
    +                          },
    +                          "TXD2": {
    +                            "description": "TXD2",
    +                            "value": 2
    +                          },
    +                          "ENET_MDC": {
    +                            "description": "ENET_MDC",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_9": {
    +                    "description": "Pin function select P2.9.",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P2": {
    +                            "description": "GPIO P2.9",
    +                            "value": 0
    +                          },
    +                          "USB_CONNECT": {
    +                            "description": "USB_CONNECT",
    +                            "value": 1
    +                          },
    +                          "RXD2": {
    +                            "description": "RXD2",
    +                            "value": 2
    +                          },
    +                          "ENET_MDIO": {
    +                            "description": "ENET_MDIO",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_10": {
    +                    "description": "Pin function select P2.10.",
    +                    "offset": 20,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P2": {
    +                            "description": "GPIO P2.10",
    +                            "value": 0
    +                          },
    +                          "EINT0": {
    +                            "description": "EINT0",
    +                            "value": 1
    +                          },
    +                          "NMI": {
    +                            "description": "NMI",
    +                            "value": 2
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_11": {
    +                    "description": "Pin function select P2.11.",
    +                    "offset": 22,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P2": {
    +                            "description": "GPIO P2.11",
    +                            "value": 0
    +                          },
    +                          "EINT1": {
    +                            "description": "EINT1",
    +                            "value": 1
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 2
    +                          },
    +                          "I2STX_CLK": {
    +                            "description": "I2STX_CLK",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_12": {
    +                    "description": "Pin function select P2.12.",
    +                    "offset": 24,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P2": {
    +                            "description": "GPIO P2.12",
    +                            "value": 0
    +                          },
    +                          "EINT2": {
    +                            "description": "EINT2",
    +                            "value": 1
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 2
    +                          },
    +                          "I2STX_WS": {
    +                            "description": "I2STX_WS",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_13": {
    +                    "description": "Pin function select P2.13.",
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P2": {
    +                            "description": "GPIO P2.13",
    +                            "value": 0
    +                          },
    +                          "EINT3": {
    +                            "description": "EINT3",
    +                            "value": 1
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 2
    +                          },
    +                          "I2STX_SDA": {
    +                            "description": "I2STX_SDA",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 28,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "PINSEL7": {
    +              "description": "Pin function select register 7",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 22,
    +                    "size": 10
    +                  },
    +                  "P3_25": {
    +                    "description": "Pin function select P3.25.",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P3": {
    +                            "description": "GPIO P3.25",
    +                            "value": 0
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved",
    +                            "value": 1
    +                          },
    +                          "MAT0": {
    +                            "description": "MAT0.0",
    +                            "value": 2
    +                          },
    +                          "PWM1": {
    +                            "description": "PWM1.2",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P3_26": {
    +                    "description": "Pin function select P3.26.",
    +                    "offset": 20,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P3": {
    +                            "description": "GPIO P3.26",
    +                            "value": 0
    +                          },
    +                          "STCLK": {
    +                            "description": "STCLK",
    +                            "value": 1
    +                          },
    +                          "MAT0": {
    +                            "description": "MAT0.1",
    +                            "value": 2
    +                          },
    +                          "PWM1": {
    +                            "description": "PWM1.3",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PINSEL9": {
    +              "description": "Pin function select register 9",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 28,
    +                    "size": 4
    +                  },
    +                  "P4_28": {
    +                    "description": "Pin function select P4.28.",
    +                    "offset": 24,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P4": {
    +                            "description": "GPIO P4.28",
    +                            "value": 0
    +                          },
    +                          "RX_MCLK": {
    +                            "description": "RX_MCLK",
    +                            "value": 1
    +                          },
    +                          "MAT2": {
    +                            "description": "MAT2.0",
    +                            "value": 2
    +                          },
    +                          "TXD3": {
    +                            "description": "TXD3",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P4_29": {
    +                    "description": "Pin function select P4.29.",
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GPIO_P4": {
    +                            "description": "GPIO P4.29",
    +                            "value": 0
    +                          },
    +                          "TX_MCLK": {
    +                            "description": "TX_MCLK",
    +                            "value": 1
    +                          },
    +                          "MAT2": {
    +                            "description": "MAT2.1",
    +                            "value": 2
    +                          },
    +                          "RXD3": {
    +                            "description": "RXD3",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PINSEL10": {
    +              "description": "Pin function select register 10",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved. Software should not write 1 to these bits.",
    +                    "offset": 4,
    +                    "size": 28
    +                  },
    +                  "TPIUCTRL": {
    +                    "description": "TPIU interface pins control.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED": {
    +                            "description": "Disabled. TPIU interface is disabled.",
    +                            "value": 0
    +                          },
    +                          "ENABLED": {
    +                            "description": "Enabled. TPIU interface is enabled. TPIU signals are available on the pins hosting them regardless of the PINSEL4 content.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PINMODE0": {
    +              "description": "Pin mode select register 0",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "P0_00MODE": {
    +                    "description": "Port 0 pin 0 on-chip pull-up/down resistor control.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P0.0 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P0.0 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P0.0 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P0.0 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_01MODE": {
    +                    "description": "Port 0 pin 1 control.",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P0.1 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P0.1 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P0.1 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P0.1 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_02MODE": {
    +                    "description": "Port 0 pin 2 control.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P0.2 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P0.2 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P0.2 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P0.2 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_03MODE": {
    +                    "description": "Port 0 pin 3 control.",
    +                    "offset": 6,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P0.3 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P0.3 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P0.3 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P0.3 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_04MODE": {
    +                    "description": "Port 0 pin 4 control.",
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P0.4 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P0.4 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P0.4 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P0.4 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_05MODE": {
    +                    "description": "Port 0 pin 5 control.",
    +                    "offset": 10,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P0.5 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P0.5 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P0.5 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P0.5 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_06MODE": {
    +                    "description": "Port 0 pin 6 control.",
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P0.6 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P0.6 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P0.6 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_07MODE": {
    +                    "description": "Port 0 pin 7 control.",
    +                    "offset": 14,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P0.7 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P0.7 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P0.7 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P0.7 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_08MODE": {
    +                    "description": "Port 0 pin 8 control.",
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P0.8 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P0.8 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P0.8 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P0.8 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_09MODE": {
    +                    "description": "Port 0 pin 9 control.",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P0.9 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P0.9 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P0.9 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P0.9 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_10MODE": {
    +                    "description": "Port 0 pin 10 control.",
    +                    "offset": 20,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P0.10 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P0.10 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P0.10 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P0.10 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_11MODE": {
    +                    "description": "Port 0 pin 11 control.",
    +                    "offset": 22,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P0.11 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P0.11 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P0.11 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P0.11 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 24,
    +                    "size": 6
    +                  },
    +                  "P0_15MODE": {
    +                    "description": "Port 0 pin 15 control.",
    +                    "offset": 30,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P0.15 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P0.15 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P0.15 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P0.15 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PINMODE1": {
    +              "description": "Pin mode select register 1",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "P0_16MODE": {
    +                    "description": "Port 1 pin 16 control.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P0.16 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P0.16 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P0.16 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P0.16 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_17MODE": {
    +                    "description": "Port 1 pin 17 control.",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P0.17 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P0.17 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P0.17 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P0.17 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_18MODE": {
    +                    "description": "Port 1 pin 18 control.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P0.18 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P0.18 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P0.18 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P0.18 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_19MODE": {
    +                    "description": "Port 1 pin 19 control.",
    +                    "offset": 6,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P0.19 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P0.19 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P0.19 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P0.19 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_20MODE": {
    +                    "description": "Port 1 pin 20 control.",
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P0.20 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P0.20 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P0.20 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P0.20 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_21MODE": {
    +                    "description": "Port 1 pin 21 control.",
    +                    "offset": 10,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P0.21 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P0.21 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P0.21 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P0.21 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_22MODE": {
    +                    "description": "Port 1 pin 22 control.",
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P0.22 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P0.22 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P0.22 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P0.22 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_23MODE": {
    +                    "description": "Port 1 pin 23 control.",
    +                    "offset": 14,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P0.23 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P0.23 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P0.23 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P0.23 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_24MODE": {
    +                    "description": "Port 1 pin 24 control.",
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P0.24 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P0.24 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P0.24 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P0.24 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_25MODE": {
    +                    "description": "Port 1 pin 25 control.",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P0.25 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P0.25 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P0.25 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P0.25 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_26MODE": {
    +                    "description": "Port 1 pin 26 control.",
    +                    "offset": 20,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P0.26 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P0.26 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P0.26 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P0.26 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 30,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "PINMODE2": {
    +              "description": "Pin mode select register 2",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "P1_00MODE": {
    +                    "description": "Port 1 pin 0 control.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P1.0 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P1.0 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P1.0 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P1.0 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_01MODE": {
    +                    "description": "Port 1 pin 1 control.",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P1.1 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P1.1 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P1.1 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P1.1 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 22,
    +                    "size": 6
    +                  },
    +                  "P1_04MODE": {
    +                    "description": "Port 1 pin 4 control.",
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P1.4 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P1.4 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P1.4 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P1.4 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_08MODE": {
    +                    "description": "Port 1 pin 8 control.",
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P1.8 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P1.8 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P1.8 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P1.8 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_09MODE": {
    +                    "description": "Port 1 pin 9 control.",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P1.9 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P1.9 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P1.9 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P1.9 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_10MODE": {
    +                    "description": "Port 1 pin 10 control.",
    +                    "offset": 20,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P1.10 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P1.10 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P1.10 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P1.10 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_14MODE": {
    +                    "description": "Port 1 pin 14 control.",
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P1.14 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P1.14 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P1.14 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P1.14 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_15MODE": {
    +                    "description": "Port 1 pin 15 control.",
    +                    "offset": 30,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P1.15 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P1.15 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P1.15 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P1.15 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PINMODE3": {
    +              "description": "Pin mode select register 3.",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "P1_16MODE": {
    +                    "description": "Port 1 pin 16 control.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P1.16 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P1.16 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P1.16 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P1.16 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_17MODE": {
    +                    "description": "Port 1 pin 17 control.",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P1.17 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P1.17 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P1.17 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P1.17 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_18MODE": {
    +                    "description": "Port 1 pin 18 control.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P1.18 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P1.18 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P1.18 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P1.18 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_19MODE": {
    +                    "description": "Port 1 pin 19 control.",
    +                    "offset": 6,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P1.19 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P1.19 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P1.19 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P1.19 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_20MODE": {
    +                    "description": "Port 1 pin 20 control.",
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P1.20 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P1.20 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P1.20 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P1.20 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_21MODE": {
    +                    "description": "Port 1 pin 21 control.",
    +                    "offset": 10,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P1.21 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P1.21 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P1.21 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P1.21 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_22MODE": {
    +                    "description": "Port 1 pin 22 control.",
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P1.22 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P1.22 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P1.22 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P1.22 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_23MODE": {
    +                    "description": "Port 1 pin 23 control.",
    +                    "offset": 14,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P1.23 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P1.23 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P1.23 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P1.23 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_24MODE": {
    +                    "description": "Port 1 pin 24 control.",
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P1.24 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P1.24 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P1.24 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P1.24 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_25MODE": {
    +                    "description": "Port 1 pin 25 control.",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P1.25 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P1.25 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P1.25 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P1.25 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_26MODE": {
    +                    "description": "Port 1 pin 26 control.",
    +                    "offset": 20,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P1.26 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P1.26 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P1.26 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P1.26 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_27MODE": {
    +                    "description": "Port 1 pin 27 control.",
    +                    "offset": 22,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P1.27 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P1.27 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P1.27 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P1.27 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_28MODE": {
    +                    "description": "Port 1 pin 28 control.",
    +                    "offset": 24,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P1.28 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P1.28 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P1.28 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P1.28 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_29MODE": {
    +                    "description": "Port 1 pin 29 control.",
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P1.29 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P1.29 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P1.29 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P1.29 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_30MODE": {
    +                    "description": "Port 1 pin 30 control.",
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P1.30 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P1.30 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P1.30 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P1.30 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_31MODE": {
    +                    "description": "Port 1 pin 31 control.",
    +                    "offset": 30,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P1.31 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P1.31 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P1.31 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P1.31 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PINMODE4": {
    +              "description": "Pin mode select register 4",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "P2_00MODE": {
    +                    "description": "Port 2 pin 0 control.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P2.0 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P2.0 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P2.0 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P2.0 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_01MODE": {
    +                    "description": "Port 2 pin 1 control.",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P2.1 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P2.1 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P2.1 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P2.1 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_02MODE": {
    +                    "description": "Port 2 pin 2 control.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P2.2 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P2.2 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P2.2 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P2.2 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_03MODE": {
    +                    "description": "Port 2 pin 3 control.",
    +                    "offset": 6,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P2.3 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P2.3 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P2.3 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P2.3 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_04MODE": {
    +                    "description": "Port 2 pin 4 control.",
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P2.4 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P2.4 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P2.4 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P2.4 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_05MODE": {
    +                    "description": "Port 2 pin 5 control.",
    +                    "offset": 10,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P2.5 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P2.5 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P2.5 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P2.5 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_06MODE": {
    +                    "description": "Port 2 pin 6 control.",
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P2.6 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P2.6 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P2.6 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P2.6 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_07MODE": {
    +                    "description": "Port 2 pin 7 control.",
    +                    "offset": 14,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P2.7 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P2.7 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P2.7 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P2.7 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_08MODE": {
    +                    "description": "Port 2 pin 8 control.",
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P2.8 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P2.8 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P2.8 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P2.8 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_09MODE": {
    +                    "description": "Port 2 pin 9 control.",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P2.9 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P2.9 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P2.9 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P2.9 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_10MODE": {
    +                    "description": "Port 2 pin 10 control.",
    +                    "offset": 20,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P2.10 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P2.10 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P2.10 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P2.10 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_11MODE": {
    +                    "description": "Port 2 pin 11 control.",
    +                    "offset": 22,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P2.11 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P2.11 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P2.11 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P2.11 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_12MODE": {
    +                    "description": "Port 2 pin 12 control.",
    +                    "offset": 24,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P2.12 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P2.12 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P2.12 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P2.12 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_13MODE": {
    +                    "description": "Port 2 pin 13 control.",
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P2.13 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P2.13 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P2.13 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P2.13 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 28,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "PINMODE7": {
    +              "description": "Pin mode select register 7",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 22,
    +                    "size": 10
    +                  },
    +                  "P3_25MODE": {
    +                    "description": "Port 3 pin 25 control.",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P3.25 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P3.25 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P3.25 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P3.25 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P3_26MODE": {
    +                    "description": "Port 3 pin 26 control.",
    +                    "offset": 20,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P3.26 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P3.26 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P3.26 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P3.26 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PINMODE9": {
    +              "description": "Pin mode select register 9",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 28,
    +                    "size": 4
    +                  },
    +                  "P4_28MODE": {
    +                    "description": "Port 4 pin 28 control.",
    +                    "offset": 24,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P4.28 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P4.28 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P4.28 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P4.28 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P4_29MODE": {
    +                    "description": "Port 4 pin 29 control.",
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PULL_UP": {
    +                            "description": "Pull-up. P4.29 pin has a pull-up resistor enabled.",
    +                            "value": 0
    +                          },
    +                          "REPEATER": {
    +                            "description": "Repeater. P4.29 pin has repeater mode enabled.",
    +                            "value": 1
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. P4.29 pin has neither pull-up nor pull-down.",
    +                            "value": 2
    +                          },
    +                          "PULL_DOWN": {
    +                            "description": "Pull-down. P4.29 has a pull-down resistor enabled.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PINMODE_OD0": {
    +              "description": "Open drain mode control register 0",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "P0_00OD": {
    +                    "description": "Port 0 pin 0 open drain mode control. Pins may potentially be used for I2C-buses using standard port pins. If so, they should be configured for open drain mode via the related bits in PINMODE_OD0.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P0.0 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P0.0 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_01OD": {
    +                    "description": "Port 0 pin 1 open drain mode control. Pins may potentially be used for I2C-buses using standard port pins. If so, they should be configured for open drain mode via the related bits in PINMODE_OD0.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P0.1 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P0.1 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_02OD": {
    +                    "description": "Port 0 pin 2 open drain mode control",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P0.2 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P0.2 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_03OD": {
    +                    "description": "Port 0 pin 3 open drain mode control",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P0.3 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P0.3 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_04OD": {
    +                    "description": "Port 0 pin 4 open drain mode control",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P0.4 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P0.4 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_05OD": {
    +                    "description": "Port 0 pin 5 open drain mode control",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P0.5 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P0.5 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_06OD": {
    +                    "description": "Port 0 pin 6 open drain mode control",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P0.6 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P0.6 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_07OD": {
    +                    "description": "Port 0 pin 7 open drain mode control",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P0.7 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P0.7 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_08OD": {
    +                    "description": "Port 0 pin 8 open drain mode control",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P0.8 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P0.8 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_09OD": {
    +                    "description": "Port 0 pin 9 open drain mode control",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P0.9 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P0.9 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_10OD": {
    +                    "description": "Port 0 pin 10 open drain mode control. Pins may potentially be used for I2C-buses using standard port pins. If so, they should be configured for open drain mode via the related bits in PINMODE_OD0.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P0.10 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P0.10 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_11OD": {
    +                    "description": "Port 0 pin 11 open drain mode control. Pins may potentially be used for I2C-buses using standard port pins. If so, they should be configured for open drain mode via the related bits in PINMODE_OD0.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P0.11 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P0.11 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "P0_15OD": {
    +                    "description": "Port 0 pin 15 open drain mode control",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P0.15 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P0.15 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_16OD": {
    +                    "description": "Port 0 pin 16 open drain mode control",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P0.16 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P0.16 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_17OD": {
    +                    "description": "Port 0 pin 17 open drain mode control",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P0.17 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P0.17 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_18OD": {
    +                    "description": "Port 0 pin 18 open drain mode control",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P0.18 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P0.18 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_19OD": {
    +                    "description": "Port 0 pin 19 open drain mode control. Pins may potentially be used for I2C-buses using standard port pins. If so, they should be configured for open drain mode via the related bits in PINMODE_OD0.",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P0.19 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P0.19 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_20OD": {
    +                    "description": "Port 0 pin 20open drain mode control. Pins may potentially be used for I2C-buses using standard port pins. If so, they should be configured for open drain mode via the related bits in PINMODE_OD0.",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P0.20 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P0.20 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_21OD": {
    +                    "description": "Port 0 pin 21 open drain mode control",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P0.21 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P0.21 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_22OD": {
    +                    "description": "Port 0 pin 22 open drain mode control",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P0.22 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P0.22 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_23OD": {
    +                    "description": "Port 0 pin 23 open drain mode control",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P0.23 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P0.23 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_24OD": {
    +                    "description": "Port 0 pin 24open drain mode control",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P0.23 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P0.23 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_25OD": {
    +                    "description": "Port 0 pin 25 open drain mode control",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P0.25 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P0.25 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_26OD": {
    +                    "description": "Port 0 pin 26 open drain mode control",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P0.26 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P0.26 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_29OD": {
    +                    "description": "Port 0 pin 29 open drain mode control",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P0.29 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P0.29 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P0_30OD": {
    +                    "description": "Port 0 pin 30 open drain mode control",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P0.30 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P0.30 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PINMODE_OD1": {
    +              "description": "Open drain mode control register 1",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "P1_00OD": {
    +                    "description": "Port 1 pin 0 open drain mode control.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P1.0 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P1.0 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_01OD": {
    +                    "description": "Port 1 pin 1 open drain mode control, see P1.00OD",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P1.1 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P1.1 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 11,
    +                    "size": 3
    +                  },
    +                  "P1_04OD": {
    +                    "description": "Port 1 pin 4 open drain mode control, see P1.00OD",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P1.4 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P1.4 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_08OD": {
    +                    "description": "Port 1 pin 8 open drain mode control, see P1.00OD",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P1.8 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P1.8 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_09OD": {
    +                    "description": "Port 1 pin 9 open drain mode control, see P1.00OD",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P1.9 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P1.9 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_10OD": {
    +                    "description": "Port 1 pin 10 open drain mode control, see P1.00OD",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P1.10 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P1.10 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_14OD": {
    +                    "description": "Port 1 pin 14 open drain mode control, see P1.00OD",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P1.14 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P1.14 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_15OD": {
    +                    "description": "Port 1 pin 15 open drain mode control, see P1.00OD",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P1.15 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P1.15 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_16OD": {
    +                    "description": "Port 1 pin 16 open drain mode control, see P1.00OD",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P1.16 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P1.16 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_17OD": {
    +                    "description": "Port 1 pin 17 open drain mode control, see P1.00OD",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P1.17 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P1.17 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_18OD": {
    +                    "description": "Port 1 pin 18 open drain mode control, see P1.00OD",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P1.18 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P1.18 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_19OD": {
    +                    "description": "Port 1 pin 19 open drain mode control, see P1.00OD",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P1.19 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P1.19 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_20OD": {
    +                    "description": "Port 1 pin 20open drain mode control, see P1.00OD",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P1.20 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P1.20 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_21OD": {
    +                    "description": "Port 1 pin 21 open drain mode control, see P1.00OD",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P1.21 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P1.21 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_22OD": {
    +                    "description": "Port 1 pin 22 open drain mode control, see P1.00OD",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P1.22 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P1.22 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_23OD": {
    +                    "description": "Port 1 pin 23 open drain mode control, see P1.00OD",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P1.23 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P1.23 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_24OD": {
    +                    "description": "Port 1 pin 24open drain mode control, see P1.00OD",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P1.24 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P1.24 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_25OD": {
    +                    "description": "Port 1 pin 25 open drain mode control, see P1.00OD",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P1.25 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P1.25 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_26OD": {
    +                    "description": "Port 1 pin 26 open drain mode control, see P1.00OD",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P1.26 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P1.26 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_27OD": {
    +                    "description": "Port 1 pin 27 open drain mode control, see P1.00OD",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P1.27 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P1.27 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_28OD": {
    +                    "description": "Port 1 pin 28 open drain mode control, see P1.00OD",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P1.28 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P1.28 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_29OD": {
    +                    "description": "Port 1 pin 29 open drain mode control, see P1.00OD",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P1.29 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P1.29 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_30OD": {
    +                    "description": "Port 1 pin 30 open drain mode control, see P1.00OD",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P1.30 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P1.30 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P1_31OD": {
    +                    "description": "Port 1 pin 31 open drain mode control.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P1.31 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P1.31 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PINMODE_OD2": {
    +              "description": "Open drain mode control register 2",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "P2_00OD": {
    +                    "description": "Port 2 pin 0 open drain mode control.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P2.0 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P2.0 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_01OD": {
    +                    "description": "Port 2 pin 1 open drain mode control, see P2.00OD",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P2.1 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P2.1p in is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_02OD": {
    +                    "description": "Port 2 pin 2 open drain mode control, see P2.00OD",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P2.2 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P2.2 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_03OD": {
    +                    "description": "Port 2 pin 3 open drain mode control, see P2.00OD",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P2.3 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P2.3 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_04OD": {
    +                    "description": "Port 2 pin 4 open drain mode control, see P2.00OD",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P2.4 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P2.4 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_05OD": {
    +                    "description": "Port 2 pin 5 open drain mode control, see P2.00OD",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P2.5 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P2.5 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_06OD": {
    +                    "description": "Port 2 pin 6 open drain mode control, see P2.00OD",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P2.6 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P2.6 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_07OD": {
    +                    "description": "Port 2 pin 7 open drain mode control, see P2.00OD",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P2.7 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P2.7 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_08OD": {
    +                    "description": "Port 2 pin 8 open drain mode control, see P2.00OD",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P2.8 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P2.8 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_09OD": {
    +                    "description": "Port 2 pin 9 open drain mode control, see P2.00OD",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P2.9 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P2.9 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_10OD": {
    +                    "description": "Port 2 pin 10 open drain mode control, see P2.00OD",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P2.10 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P2.10 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_11OD": {
    +                    "description": "Port 2 pin 11 open drain mode control, see P2.00OD",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P2.11 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P2.11 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_12OD": {
    +                    "description": "Port 2 pin 12 open drain mode control, see P2.00OD",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P2.12 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P2.12 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P2_13OD": {
    +                    "description": "Port 2 pin 13 open drain mode control, see P2.00OD",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P2.13 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P2.13 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 14,
    +                    "size": 18
    +                  }
    +                }
    +              }
    +            },
    +            "PINMODE_OD3": {
    +              "description": "Open drain mode control register 3",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 27,
    +                    "size": 5
    +                  },
    +                  "P3_25OD": {
    +                    "description": "Port 3 pin 25 open drain mode control.",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P3.25 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P3.25 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P3_26OD": {
    +                    "description": "Port 3 pin 26 open drain mode control, see P3.25OD",
    +                    "offset": 26,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PINMODE_OD4": {
    +              "description": "Open drain mode control register 4",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "P4_28OD": {
    +                    "description": "Port 4 pin 28 open drain mode control.",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "Normal. P4.28 pin is in the normal (not open drain) mode.",
    +                            "value": 0
    +                          },
    +                          "OPEN_DRAIN": {
    +                            "description": "Open-drain. P4.28 pin is in the open drain mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "P4_29OD": {
    +                    "description": "Port 4 pin 29 open drain mode control, see P4.28OD",
    +                    "offset": 29,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "I2CPADCFG": {
    +              "description": "I2C Pin Configuration register",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SDADRV0": {
    +                    "description": "Drive mode control for the SDA0 pin, P0.27.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "STANDARD": {
    +                            "description": "Standard. The SDA0 pin is in the standard drive mode.",
    +                            "value": 0
    +                          },
    +                          "FAST_MODE_PLUS": {
    +                            "description": "Fast-mode plus. The SDA0 pin is in Fast Mode Plus drive mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SDAI2C0": {
    +                    "description": "I 2C filter mode control for the SDA0 pin, P0.27.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ENABLED": {
    +                            "description": "Enabled. The SDA0 pin has I2C glitch filtering and slew rate control enabled.",
    +                            "value": 0
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. The SDA0 pin has I2C glitch filtering and slew rate control disabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SCLDRV0": {
    +                    "description": "Drive mode control for the SCL0 pin, P0.28.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "STANDARD": {
    +                            "description": "Standard. The SCL0 pin is in the standard drive mode.",
    +                            "value": 0
    +                          },
    +                          "FAST_MODE_PLUS": {
    +                            "description": "Fast-mode plus. The SCL0 pin is in Fast Mode Plus drive mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SCLI2C0": {
    +                    "description": "I 2C filter mode control for the SCL0 pin, P0.28.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ENABLED": {
    +                            "description": "Enabled. The SCL0 pin has I2C glitch filtering and slew rate control enabled.",
    +                            "value": 0
    +                          },
    +                          "DISABLED": {
    +                            "description": "Disabled. The SCL0 pin has I2C glitch filtering and slew rate control disabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 4,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SSP1": {
    +        "description": "SSP1 controller",
    +        "children": {
    +          "registers": {
    +            "CR0": {
    +              "description": "Control Register 0. Selects the serial clock rate, bus type, and data size.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DSS": {
    +                    "description": "Data Size Select. This field controls the number of bits transferred in each frame. Values 0000-0010 are not supported and should not be used.",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "4_BIT_TRANSFER": {
    +                            "description": "4-bit transfer",
    +                            "value": 3
    +                          },
    +                          "5_BIT_TRANSFER": {
    +                            "description": "5-bit transfer",
    +                            "value": 4
    +                          },
    +                          "6_BIT_TRANSFER": {
    +                            "description": "6-bit transfer",
    +                            "value": 5
    +                          },
    +                          "7_BIT_TRANSFER": {
    +                            "description": "7-bit transfer",
    +                            "value": 6
    +                          },
    +                          "8_BIT_TRANSFER": {
    +                            "description": "8-bit transfer",
    +                            "value": 7
    +                          },
    +                          "9_BIT_TRANSFER": {
    +                            "description": "9-bit transfer",
    +                            "value": 8
    +                          },
    +                          "10_BIT_TRANSFER": {
    +                            "description": "10-bit transfer",
    +                            "value": 9
    +                          },
    +                          "11_BIT_TRANSFER": {
    +                            "description": "11-bit transfer",
    +                            "value": 10
    +                          },
    +                          "12_BIT_TRANSFER": {
    +                            "description": "12-bit transfer",
    +                            "value": 11
    +                          },
    +                          "13_BIT_TRANSFER": {
    +                            "description": "13-bit transfer",
    +                            "value": 12
    +                          },
    +                          "14_BIT_TRANSFER": {
    +                            "description": "14-bit transfer",
    +                            "value": 13
    +                          },
    +                          "15_BIT_TRANSFER": {
    +                            "description": "15-bit transfer",
    +                            "value": 14
    +                          },
    +                          "16_BIT_TRANSFER": {
    +                            "description": "16-bit transfer",
    +                            "value": 15
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FRF": {
    +                    "description": "Frame Format.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SPI": {
    +                            "description": "SPI",
    +                            "value": 0
    +                          },
    +                          "TI": {
    +                            "description": "TI",
    +                            "value": 1
    +                          },
    +                          "MICROWIRE": {
    +                            "description": "Microwire",
    +                            "value": 2
    +                          },
    +                          "THIS_COMBINATION_IS_": {
    +                            "description": "This combination is not supported and should not be used.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CPOL": {
    +                    "description": "Clock Out Polarity. This bit is only used in SPI mode.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "BUS_LOW": {
    +                            "description": "SSP controller maintains the bus clock low between frames.",
    +                            "value": 0
    +                          },
    +                          "BUS_HIGH": {
    +                            "description": "SSP controller maintains the bus clock high between frames.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CPHA": {
    +                    "description": "Clock Out Phase. This bit is only used in SPI mode.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "FIRST_CLOCK": {
    +                            "description": "SSP controller captures serial data on the first clock transition of the frame, that is, the transition away from the inter-frame state of the clock line.",
    +                            "value": 0
    +                          },
    +                          "SECOND_CLOCK": {
    +                            "description": "SSP controller captures serial data on the second clock transition of the frame, that is, the transition back to the inter-frame state of the clock line.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SCR": {
    +                    "description": "Serial Clock Rate. The number of prescaler-output clocks per bit on the bus, minus one. Given that CPSDVSR is the prescale divider, and the APB clock PCLK clocks the prescaler, the bit frequency is PCLK / (CPSDVSR X [SCR+1]).",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CR1": {
    +              "description": "Control Register 1. Selects master/slave and other modes.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LBM": {
    +                    "description": "Loop Back Mode.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "During normal operation.",
    +                            "value": 0
    +                          },
    +                          "OUPTU": {
    +                            "description": "Serial input is taken from the serial output (MOSI or MISO) rather than the serial input pin (MISO or MOSI respectively).",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SSE": {
    +                    "description": "SSP Enable.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED": {
    +                            "description": "The SSP controller is disabled.",
    +                            "value": 0
    +                          },
    +                          "ENABLED": {
    +                            "description": "The SSP controller will interact with other devices on the serial bus. Software should write the appropriate control information to the other SSP registers and interrupt controller registers, before setting this bit.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MS": {
    +                    "description": "Master/Slave Mode.This bit can only be written when the SSE bit is 0.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "MASTER": {
    +                            "description": "The SSP controller acts as a master on the bus, driving the SCLK, MOSI, and SSEL lines and receiving the MISO line.",
    +                            "value": 0
    +                          },
    +                          "SLAVE": {
    +                            "description": "The SSP controller acts as a slave on the bus, driving MISO line and receiving SCLK, MOSI, and SSEL lines.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SOD": {
    +                    "description": "Slave Output Disable. This bit is relevant only in slave mode (MS = 1). If it is 1, this blocks this SSP controller from driving the transmit data line (MISO).",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 4,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            },
    +            "DR": {
    +              "description": "Data Register. Writes fill the transmit FIFO, and reads empty the receive FIFO.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Write: software can write data to be sent in a future frame to this register whenever the TNF bit in the Status register is 1, indicating that the Tx FIFO is not full. If the Tx FIFO was previously empty and the SSP controller is not busy on the bus, transmission of the data will begin immediately. Otherwise the data written to this register will be sent as soon as all previous data has been sent (and received). If the data length is less than 16 bits, software must right-justify the data written to this register. Read: software can read data from this register whenever the RNE bit in the Status register is 1, indicating that the Rx FIFO is not empty. When software reads this register, the SSP controller returns data from the least recent frame in the Rx FIFO. If the data length is less than 16 bits, the data is right-justified in this field with higher order bits filled with 0s.",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "Status Register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 3,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TFE": {
    +                    "description": "Transmit FIFO Empty. This bit is 1 is the Transmit FIFO is empty, 0 if not.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TNF": {
    +                    "description": "Transmit FIFO Not Full. This bit is 0 if the Tx FIFO is full, 1 if not.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RNE": {
    +                    "description": "Receive FIFO Not Empty. This bit is 0 if the Receive FIFO is empty, 1 if not.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RFF": {
    +                    "description": "Receive FIFO Full. This bit is 1 if the Receive FIFO is full, 0 if not.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "BSY": {
    +                    "description": "Busy. This bit is 0 if the SSPn controller is idle, or 1 if it is currently sending/receiving a frame and/or the Tx FIFO is not empty.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 5,
    +                    "size": 27
    +                  }
    +                }
    +              }
    +            },
    +            "CPSR": {
    +              "description": "Clock Prescale Register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPSDVSR": {
    +                    "description": "This even value between 2 and 254, by which PCLK is divided to yield the prescaler output clock. Bit 0 always reads as 0.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "IMSC": {
    +              "description": "Interrupt Mask Set and Clear Register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RORIM": {
    +                    "description": "Software should set this bit to enable interrupt when a Receive Overrun occurs, that is, when the Rx FIFO is full and another frame is completely received. The ARM spec implies that the preceding frame data is overwritten by the new frame data when this occurs.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RTIM": {
    +                    "description": "Software should set this bit to enable interrupt when a Receive Time-out condition occurs. A Receive Time-out occurs when the Rx FIFO is not empty, and no has not been read for a time-out period. The time-out period is the same for master and slave modes and is determined by the SSP bit rate: 32 bits at PCLK / (CPSDVSR X [SCR+1]).",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RXIM": {
    +                    "description": "Software should set this bit to enable interrupt when the Rx FIFO is at least half full.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TXIM": {
    +                    "description": "Software should set this bit to enable interrupt when the Tx FIFO is at least half empty.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 4,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            },
    +            "RIS": {
    +              "description": "Raw Interrupt Status Register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 8,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RORRIS": {
    +                    "description": "This bit is 1 if another frame was completely received while the RxFIFO was full. The ARM spec implies that the preceding frame data is overwritten by the new frame data when this occurs.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RTRIS": {
    +                    "description": "This bit is 1 if the Rx FIFO is not empty, and has not been read for a time-out period. The time-out period is the same for master and slave modes and is determined by the SSP bit rate: 32 bits at PCLK / (CPSDVSR X [SCR+1]).",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RXRIS": {
    +                    "description": "This bit is 1 if the Rx FIFO is at least half full.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TXRIS": {
    +                    "description": "This bit is 1 if the Tx FIFO is at least half empty.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 4,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            },
    +            "MIS": {
    +              "description": "Masked Interrupt Status Register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RORMIS": {
    +                    "description": "This bit is 1 if another frame was completely received while the RxFIFO was full, and this interrupt is enabled.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RTMIS": {
    +                    "description": "This bit is 1 if the Rx FIFO is not empty, has not been read for a time-out period, and this interrupt is enabled. The time-out period is the same for master and slave modes and is determined by the SSP bit rate: 32 bits at PCLK / (CPSDVSR X [SCR+1]).",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RXMIS": {
    +                    "description": "This bit is 1 if the Rx FIFO is at least half full, and this interrupt is enabled.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TXMIS": {
    +                    "description": "This bit is 1 if the Tx FIFO is at least half empty, and this interrupt is enabled.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 4,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            },
    +            "ICR": {
    +              "description": "SSPICR Interrupt Clear Register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "RORIC": {
    +                    "description": "Writing a 1 to this bit clears the   frame was received when RxFIFO was full interrupt.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RTIC": {
    +                    "description": "Writing a 1 to this bit clears the Rx FIFO was not empty and has not been read for a time-out period interrupt. The time-out period is the same for master and slave modes and is determined by the SSP bit rate: 32 bits at PCLK / (CPSDVSR / [SCR+1]).",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 2,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "DMACR": {
    +              "description": "SSP0 DMA control register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXDMAE": {
    +                    "description": "Receive DMA Enable. When this bit is set to one 1, DMA for the receive FIFO is enabled, otherwise receive DMA is disabled.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TXDMAE": {
    +                    "description": "Transmit DMA Enable. When this bit is set to one 1, DMA for the transmit FIFO is enabled, otherwise transmit DMA is disabled",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 2,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "ADC": {
    +        "description": "Analog-to-Digital Converter (ADC) ",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "A/D Control Register. The ADCR register must be written to select the operating mode before A/D conversion can occur.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "children": {
    +                "fields": {
    +                  "SEL": {
    +                    "description": "Selects which of the AD0[7:0] pins is (are) to be sampled and converted. For AD0, bit 0 selects Pin AD0[0], and bit 7 selects pin AD0[7]. In software-controlled mode, only one of these bits should be 1. In hardware scan mode, any value containing 1 to 8 ones is allowed. All zeroes is equivalent to 0x01.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "CLKDIV": {
    +                    "description": "The APB clock (PCLK) is divided by (this value plus one) to produce the clock for the A/D converter, which should be less than or equal to 12.4 MHz. Typically, software should program the smallest value in this field that yields a clock of 12.4 MHz or slightly less, but in certain cases (such as a high-impedance analog source) a slower clock may be desirable.",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "BURST": {
    +                    "description": "Burst mode",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "BURST": {
    +                            "description": "The AD converter does repeated conversions at up to 400 kHz, scanning (if necessary) through the pins selected by bits set to ones in the SEL field. The first conversion after the start corresponds to the least-significant 1 in the SEL field, then higher numbered 1-bits (pins) if applicable. Repeated conversions can be terminated by clearing this bit, but the conversion that's in progress when this bit is cleared will be completed. START bits must be 000 when BURST = 1 or conversions will not start.",
    +                            "value": 1
    +                          },
    +                          "SW": {
    +                            "description": "Conversions are software controlled and require 31 clocks.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 28,
    +                    "size": 4
    +                  },
    +                  "PDN": {
    +                    "description": "Power down mode",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "POWERED": {
    +                            "description": "The A/D converter is operational.",
    +                            "value": 1
    +                          },
    +                          "POWERDOWN": {
    +                            "description": "The A/D converter is in power-down mode.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "START": {
    +                    "description": "When the BURST bit is 0, these bits control whether and when an A/D conversion is started:",
    +                    "offset": 24,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NO_START_THIS_VALUE": {
    +                            "description": "No start (this value should be used when clearing PDN to 0).",
    +                            "value": 0
    +                          },
    +                          "START_CONVERSION_NOW": {
    +                            "description": "Start conversion now.",
    +                            "value": 1
    +                          },
    +                          "P2_10": {
    +                            "description": "Start conversion when the edge selected by bit 27 occurs on the P2[10] pin.",
    +                            "value": 2
    +                          },
    +                          "P1_27": {
    +                            "description": "Start conversion when the edge selected by bit 27 occurs on the P1[27] pin.",
    +                            "value": 3
    +                          },
    +                          "MAT0_1": {
    +                            "description": "Start conversion when the edge selected by bit 27 occurs on MAT0.1. Note that this does not require that the MAT0.1 function appear on a device pin.",
    +                            "value": 4
    +                          },
    +                          "MAT0_3": {
    +                            "description": "Start conversion when the edge selected by bit 27 occurs on MAT0.3. Note that it is not possible to cause the MAT0.3 function to appear on a device pin.",
    +                            "value": 5
    +                          },
    +                          "MAT1_0": {
    +                            "description": "Start conversion when the edge selected by bit 27 occurs on MAT1.0. Note that this does not require that the MAT1.0 function appear on a device pin.",
    +                            "value": 6
    +                          },
    +                          "MAT1_1": {
    +                            "description": "Start conversion when the edge selected by bit 27 occurs on MAT1.1. Note that this does not require that the MAT1.1 function appear on a device pin.",
    +                            "value": 7
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EDGE": {
    +                    "description": "This bit is significant only when the START field contains 010-111. In these cases:",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "FALLLING": {
    +                            "description": "Start conversion on a falling edge on the selected CAP/MAT signal.",
    +                            "value": 1
    +                          },
    +                          "RISING": {
    +                            "description": "Start conversion on a rising edge on the selected CAP/MAT signal.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GDR": {
    +              "description": "A/D Global Data Register. This register contains the ADC's DONE bit and the result of the most recent A/D conversion.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 27,
    +                    "size": 3
    +                  },
    +                  "RESULT": {
    +                    "description": "When DONE is 1, this field contains a binary fraction representing the voltage on the AD0[n] pin selected by the SEL field, as it falls within the range of VREFP to VSS. Zero in the field indicates that the voltage on the input pin was less than, equal to, or close to that on VSS, while 0xFFF indicates that the voltage on the input was close to, equal to, or greater than that on VREFP.",
    +                    "offset": 4,
    +                    "size": 12
    +                  },
    +                  "CHN": {
    +                    "description": "These bits contain the channel from which the RESULT bits were converted (e.g. 000 identifies channel 0, 001 channel 1...).",
    +                    "offset": 24,
    +                    "size": 3
    +                  },
    +                  "OVERRUN": {
    +                    "description": "This bit is 1 in burst mode if the results of one or more conversions was (were) lost and overwritten before the conversion that produced the result in the RESULT bits. This bit is cleared by reading this register.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "DONE": {
    +                    "description": "This bit is set to 1 when an A/D conversion completes. It is cleared when this register is read and when the ADCR is written. If the ADCR is written while a conversion is still in progress, this bit is set and a new conversion is started.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTEN": {
    +              "description": "A/D Interrupt Enable Register. This register contains enable bits that allow the DONE flag of each A/D channel to be included or excluded from contributing to the generation of an A/D interrupt.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 256,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADINTEN0": {
    +                    "description": "Interrupt enable",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE": {
    +                            "description": "Completion of a conversion on ADC channel 0 will not generate an interrupt.",
    +                            "value": 0
    +                          },
    +                          "ENABLE": {
    +                            "description": "Completion of a conversion on ADC channel 0 will generate an interrupt.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADINTEN1": {
    +                    "description": "Interrupt enable",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE": {
    +                            "description": "Completion of a conversion on ADC channel 1 will not generate an interrupt.",
    +                            "value": 0
    +                          },
    +                          "ENABLE": {
    +                            "description": "Completion of a conversion on ADC channel 1 will generate an interrupt.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADINTEN2": {
    +                    "description": "Interrupt enable",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE": {
    +                            "description": "Completion of a conversion on ADC channel 2 will not generate an interrupt.",
    +                            "value": 0
    +                          },
    +                          "ENABLE": {
    +                            "description": "Completion of a conversion on ADC channel 2 will generate an interrupt.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADINTEN3": {
    +                    "description": "Interrupt enable",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE": {
    +                            "description": "Completion of a conversion on ADC channel 3 will not generate an interrupt.",
    +                            "value": 0
    +                          },
    +                          "ENABLE": {
    +                            "description": "Completion of a conversion on ADC channel 3 will generate an interrupt.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADINTEN4": {
    +                    "description": "Interrupt enable",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE": {
    +                            "description": "Completion of a conversion on ADC channel 4 will not generate an interrupt.",
    +                            "value": 0
    +                          },
    +                          "ENABLE": {
    +                            "description": "Completion of a conversion on ADC channel 4 will generate an interrupt.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADINTEN5": {
    +                    "description": "Interrupt enable",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE": {
    +                            "description": "Completion of a conversion on ADC channel 5 will not generate an interrupt.",
    +                            "value": 0
    +                          },
    +                          "ENABLE": {
    +                            "description": "Completion of a conversion on ADC channel 5 will generate an interrupt.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADINTEN6": {
    +                    "description": "Interrupt enable",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE": {
    +                            "description": "Completion of a conversion on ADC channel 6 will not generate an interrupt.",
    +                            "value": 0
    +                          },
    +                          "ENABLE": {
    +                            "description": "Completion of a conversion on ADC channel 6 will generate an interrupt.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADINTEN7": {
    +                    "description": "Interrupt enable",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE": {
    +                            "description": "Completion of a conversion on ADC channel 7 will not generate an interrupt.",
    +                            "value": 0
    +                          },
    +                          "ENABLE": {
    +                            "description": "Completion of a conversion on ADC channel 7 will generate an interrupt.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADGINTEN": {
    +                    "description": "Interrupt enable",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CHANNELS": {
    +                            "description": "Only the individual ADC channels enabled by ADINTEN7:0 will generate interrupts.",
    +                            "value": 0
    +                          },
    +                          "GLOBAL": {
    +                            "description": "The global DONE flag in ADDR is enabled to generate an interrupt in addition to any individual ADC channels that are enabled to generate interrupts.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 9,
    +                    "size": 23
    +                  }
    +                }
    +              }
    +            },
    +            "STAT": {
    +              "description": "A/D Status Register. This register contains DONE and OVERRUN flags for all of the A/D channels, as well as the A/D interrupt/DMA flag.",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DONE0": {
    +                    "description": "This bit mirrors the DONE status flag from the result register for A/D channel 0.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DONE1": {
    +                    "description": "This bit mirrors the DONE status flag from the result register for A/D channel 1.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DONE2": {
    +                    "description": "This bit mirrors the DONE status flag from the result register for A/D channel 2.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DONE3": {
    +                    "description": "This bit mirrors the DONE status flag from the result register for A/D channel 3.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DONE4": {
    +                    "description": "This bit mirrors the DONE status flag from the result register for A/D channel 4.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DONE5": {
    +                    "description": "This bit mirrors the DONE status flag from the result register for A/D channel 5.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "DONE6": {
    +                    "description": "This bit mirrors the DONE status flag from the result register for A/D channel 6.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DONE7": {
    +                    "description": "This bit mirrors the DONE status flag from the result register for A/D channel 7.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OVERRUN0": {
    +                    "description": "This bit mirrors the OVERRRUN status flag from the result register for A/D channel 0.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "OVERRUN1": {
    +                    "description": "This bit mirrors the OVERRRUN status flag from the result register for A/D channel 1.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "OVERRUN2": {
    +                    "description": "This bit mirrors the OVERRRUN status flag from the result register for A/D channel 2.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OVERRUN3": {
    +                    "description": "This bit mirrors the OVERRRUN status flag from the result register for A/D channel 3.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OVERRUN4": {
    +                    "description": "This bit mirrors the OVERRRUN status flag from the result register for A/D channel 4.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "OVERRUN5": {
    +                    "description": "This bit mirrors the OVERRRUN status flag from the result register for A/D channel 5.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "OVERRUN6": {
    +                    "description": "This bit mirrors the OVERRRUN status flag from the result register for A/D channel 6.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "OVERRUN7": {
    +                    "description": "This bit mirrors the OVERRRUN status flag from the result register for A/D channel 7.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ADINT": {
    +                    "description": "This bit is the A/D interrupt flag. It is one when any of the individual A/D channel Done flags is asserted and enabled to contribute to the A/D interrupt via the ADINTEN register.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 17,
    +                    "size": 15
    +                  }
    +                }
    +              }
    +            },
    +            "TRM": {
    +              "description": "ADC trim register.",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 12,
    +                    "size": 20
    +                  },
    +                  "ADCOFFS": {
    +                    "description": "Offset trim bits for ADC operation. Initialized by the boot code. Can be overwritten by the user.",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "TRIM": {
    +                    "description": "written-to by boot code. Can not be overwritten by the user. These bits are locked after boot code write.",
    +                    "offset": 8,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "CANAFRAM": {
    +        "description": "CAN acceptance filter RAM"
    +      },
    +      "CANAF": {
    +        "description": " CAN controller acceptance filter ",
    +        "children": {
    +          "registers": {
    +            "AFMR": {
    +              "description": "Acceptance Filter Register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "children": {
    +                "fields": {
    +                  "ACCOFF": {
    +                    "description": "if AccBP is 0, the Acceptance Filter is not operational. All Rx messages on all CAN buses are ignored.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ACCBP": {
    +                    "description": "All Rx messages are accepted on enabled CAN controllers. Software must set this bit before modifying the contents of any of the registers described below, and before modifying the contents of Lookup Table RAM in any way other than setting or clearing Disable bits in Standard Identifier entries. When both this bit and AccOff are 0, the Acceptance filter operates to screen received CAN Identifiers.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EFCAN": {
    +                    "description": "FullCAN mode",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SOFTWARE_MUST_READ_A": {
    +                            "description": "Software must read all messages for all enabled IDs on all enabled CAN buses, from the receiving CAN controllers.",
    +                            "value": 0
    +                          },
    +                          "THE_ACCEPTANCE_FILTE": {
    +                            "description": "The Acceptance Filter itself will take care of receiving and storing messages for selected Standard ID values on selected CAN buses. See Section 21.16 FullCAN mode on page 576.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 3,
    +                    "size": 29
    +                  }
    +                }
    +              }
    +            },
    +            "SFF_SA": {
    +              "description": "Standard Frame Individual Start Address Register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 11,
    +                    "size": 21
    +                  },
    +                  "SFF_SA": {
    +                    "description": "The start address of the table of individual Standard Identifiers in AF Lookup RAM. If the table is empty, write the same value in this register and the SFF_GRP_sa register described below. For compatibility with possible future devices, write zeroes in bits 31:11 and 1:0 of this register. If the eFCAN bit in the AFMR is 1, this value also indicates the size of the table of Standard IDs which the Acceptance Filter will search and (if found) automatically store received messages in Acceptance Filter RAM.",
    +                    "offset": 2,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "SFF_GRP_SA": {
    +              "description": "Standard Frame Group Start Address Register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 12,
    +                    "size": 20
    +                  },
    +                  "SFF_GRP_SA": {
    +                    "description": "The start address of the table of grouped Standard Identifiers in AF Lookup RAM. If the table is empty, write the same value in this register and the EFF_sa register described below. The largest value that should be written to this register is 0x800, when only the Standard Individual table is used, and the last word (address 0x7FC) in AF Lookup Table RAM is used. For compatibility with possible future devices, please write zeroes in bits 31:12 and 1:0 of this register.",
    +                    "offset": 2,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EFF_SA": {
    +              "description": "Extended Frame Start Address Register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 11,
    +                    "size": 21
    +                  },
    +                  "EFF_SA": {
    +                    "description": "The start address of the table of individual Extended Identifiers in AF Lookup RAM. If the table is empty, write the same value in this register and the EFF_GRP_sa register described below. The largest value that should be written to this register is 0x800, when both Extended Tables are empty and the last word (address 0x7FC) in AF Lookup Table RAM is used. For compatibility with possible future devices, please write zeroes in bits 31:11 and 1:0 of this register.",
    +                    "offset": 2,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "EFF_GRP_SA": {
    +              "description": "Extended Frame Group Start Address Register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 12,
    +                    "size": 20
    +                  },
    +                  "EFF_GRP_SA": {
    +                    "description": "The start address of the table of grouped Extended Identifiers in AF Lookup RAM. If the table is empty, write the same value in this register and the ENDofTable register described below. The largest value that should be written to this register is 0x800, when this table is empty and the last word (address 0x7FC) in AF Lookup Table RAM is used. For compatibility with possible future devices, please write zeroes in bits 31:12 and 1:0 of this register.",
    +                    "offset": 2,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "ENDOFTABLE": {
    +              "description": "End of AF Tables register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 12,
    +                    "size": 20
    +                  },
    +                  "ENDOFTABLE": {
    +                    "description": "The address above the last active address in the last active AF table. For compatibility with possible future devices, please write zeroes in bits 31:12 and 1:0 of this register. If the eFCAN bit in the AFMR is 0, the largest value that should be written to this register is 0x800, which allows the last word (address 0x7FC) in AF Lookup Table RAM to be used. If the eFCAN bit in the AFMR is 1, this value marks the start of the area of Acceptance Filter RAM, into which the Acceptance Filter will automatically receive messages for selected IDs on selected CAN buses. In this case, the maximum value that should be written to this register is 0x800 minus 6 times the value in SFF_sa. This allows 12 bytes of message storage between this address and the end of Acceptance Filter RAM, for each Standard ID that is specified between the start of Acceptance Filter RAM, and the next active AF table.",
    +                    "offset": 2,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "LUTERRAD": {
    +              "description": "LUT Error Address register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 11,
    +                    "size": 21
    +                  },
    +                  "LUTERRAD": {
    +                    "description": "It the LUT Error bit (below) is 1, this read-only field contains the address in AF Lookup Table RAM, at which the Acceptance Filter encountered an error in the content of the tables.",
    +                    "offset": 2,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "LUTERR": {
    +              "description": "LUT Error Register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "LUTERR": {
    +                    "description": "This read-only bit is set to 1 if the Acceptance Filter encounters an error in the content of the tables in AF RAM. It is cleared when software reads the LUTerrAd register. This condition is ORed with the other CAN interrupts from the CAN controllers, to produce the request that is connected to the NVIC.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, the value read from a reserved bit is not defined.",
    +                    "offset": 1,
    +                    "size": 31
    +                  }
    +                }
    +              }
    +            },
    +            "FCANIE": {
    +              "description": "FullCAN interrupt enable register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FCANIE": {
    +                    "description": "Global FullCAN Interrupt Enable. When 1, this interrupt is enabled.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 1,
    +                    "size": 31
    +                  }
    +                }
    +              }
    +            },
    +            "FCANIC0": {
    +              "description": "FullCAN interrupt and capture register0",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INTPND": {
    +                    "description": "FullCan Interrupt Pending 0 = FullCan Interrupt Pending bit 0. 1 = FullCan Interrupt Pending bit 1. ... 31 = FullCan Interrupt Pending bit 31.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "FCANIC1": {
    +              "description": "FullCAN interrupt and capture register1",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IntPnd32": {
    +                    "description": "FullCan Interrupt Pending bit 32. 0 = FullCan Interrupt Pending bit 32. 1 = FullCan Interrupt Pending bit 33. ... 31 = FullCan Interrupt Pending bit 63.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "CCAN": {
    +        "description": "Central CAN controller ",
    +        "children": {
    +          "registers": {
    +            "TXSR": {
    +              "description": "CAN Central Transmit Status Register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 197376,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TS1": {
    +                    "description": "When 1, the CAN controller 1 is sending a message (same as TS in the CAN1GSR).",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TS2": {
    +                    "description": "When 1, the CAN controller 2 is sending a message (same as TS in the CAN2GSR)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, the value read from a reserved bit is not defined.",
    +                    "offset": 18,
    +                    "size": 14
    +                  },
    +                  "TBS1": {
    +                    "description": "When 1, all 3 Tx Buffers of the CAN1 controller are available to the CPU (same as TBS in CAN1GSR).",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TBS2": {
    +                    "description": "When 1, all 3 Tx Buffers of the CAN2 controller are available to the CPU (same as TBS in CAN2GSR).",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TCS1": {
    +                    "description": "When 1, all requested transmissions have been completed successfully by the CAN1 controller (same as TCS in CAN1GSR).",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TCS2": {
    +                    "description": "When 1, all requested transmissions have been completed successfully by the CAN2 controller (same as TCS in CAN2GSR).",
    +                    "offset": 17,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RXSR": {
    +              "description": "CAN Central Receive Status Register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RS1": {
    +                    "description": "When 1, CAN1 is receiving a message (same as RS in CAN1GSR).",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RS2": {
    +                    "description": "When 1, CAN2 is receiving a message (same as RS in CAN2GSR).",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, the value read from a reserved bit is not defined.",
    +                    "offset": 18,
    +                    "size": 14
    +                  },
    +                  "RB1": {
    +                    "description": "When 1, a received message is available in the CAN1 controller (same as RBS in CAN1GSR).",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "RB2": {
    +                    "description": "When 1, a received message is available in the CAN2 controller (same as RBS in CAN2GSR).",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DOS1": {
    +                    "description": "When 1, a message was lost because the preceding message to CAN1 controller was not read out quickly enough (same as DOS in CAN1GSR).",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "DOS2": {
    +                    "description": "When 1, a message was lost because the preceding message to CAN2 controller was not read out quickly enough (same as DOS in CAN2GSR).",
    +                    "offset": 17,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MSR": {
    +              "description": "CAN Central Miscellaneous Register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "E1": {
    +                    "description": "When 1, one or both of the CAN1 Tx and Rx Error Counters has reached the limit set in the CAN1EWL register (same as ES in CAN1GSR)",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "E2": {
    +                    "description": "When 1, one or both of the CAN2 Tx and Rx Error Counters has reached the limit set in the CAN2EWL register (same as ES in CAN2GSR)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, the value read from a reserved bit is not defined.",
    +                    "offset": 10,
    +                    "size": 22
    +                  },
    +                  "BS1": {
    +                    "description": "When 1, the CAN1 controller is currently involved in bus activities (same as BS in CAN1GSR).",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BS2": {
    +                    "description": "When 1, the CAN2 controller is currently involved in bus activities (same as BS in CAN2GSR).",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "CAN1": {
    +        "description": "CAN1 controller ",
    +        "children": {
    +          "registers": {
    +            "MOD": {
    +              "description": "Controls the operating mode of the CAN Controller.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "children": {
    +                "fields": {
    +                  "RM": {
    +                    "description": "Reset Mode.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL_THE_CAN_CONTR": {
    +                            "description": "Normal.The CAN Controller is in the Operating Mode, and certain registers can not be written.",
    +                            "value": 0
    +                          },
    +                          "RESET_CAN_OPERATION": {
    +                            "description": "Reset. CAN operation is disabled, writable registers can be written and the current transmission/reception of a message is aborted.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LOM": {
    +                    "description": "Listen Only Mode.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL_THE_CAN_CONT": {
    +                            "description": "Normal. The CAN controller acknowledges a successfully received message on the CAN bus. The error counters are stopped at the current value.",
    +                            "value": 0
    +                          },
    +                          "LISTEN_ONLY_THE_CON": {
    +                            "description": "Listen only. The controller gives no acknowledgment, even if a message is successfully received. Messages cannot be sent, and the controller operates in error passive mode. This mode is intended for software bit rate detection and hot plugging.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STM": {
    +                    "description": "Self Test Mode.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL_A_TRANSMITTE": {
    +                            "description": "Normal. A transmitted message must be acknowledged to be considered successful.",
    +                            "value": 0
    +                          },
    +                          "SELF_TEST_THE_CONTR": {
    +                            "description": "Self test. The controller will consider a Tx message successful even if there is no acknowledgment received. In this mode a full node test is possible without any other active node on the bus using the SRR bit in CANxCMR.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TPM": {
    +                    "description": "Transmit Priority Mode.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CAN_ID_THE_TRANSMIT": {
    +                            "description": "CAN ID. The transmit priority for 3 Transmit Buffers depends on the CAN Identifier.",
    +                            "value": 0
    +                          },
    +                          "LOCAL_PRIORITY_THE_": {
    +                            "description": "Local priority. The transmit priority for 3 Transmit Buffers depends on the contents of the Tx Priority register within the Transmit Buffer.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SM": {
    +                    "description": "Sleep Mode.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "WAKE_UP_NORMAL_OPER": {
    +                            "description": "Wake-up. Normal operation.",
    +                            "value": 0
    +                          },
    +                          "SLEEP_THE_CAN_CONTR": {
    +                            "description": "Sleep. The CAN controller enters Sleep Mode if no CAN interrupt is pending and there is no bus activity. See the Sleep Mode description Section 21.8.2 on page 565.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RPM": {
    +                    "description": "Receive Polarity Mode.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "LOW_ACTIVE_RD_INPUT": {
    +                            "description": "Low active. RD input is active Low (dominant bit = 0).",
    +                            "value": 0
    +                          },
    +                          "HIGH_ACTIVE_RD_INPU": {
    +                            "description": "High active. RD input is active High (dominant bit = 1) -- reverse polarity.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  },
    +                  "TM": {
    +                    "description": "Test Mode.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_NORMAL_OPE": {
    +                            "description": "Disabled. Normal operation.",
    +                            "value": 0
    +                          },
    +                          "ENABLED_THE_TD_PIN_": {
    +                            "description": "Enabled. The TD pin will reflect the bit, detected on RD pin, with the next positive edge of the system clock.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CMR": {
    +              "description": "Command bits that affect the state of the CAN Controller",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TR": {
    +                    "description": "Transmission Request.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ABSENT_NO_TRANSMISSI": {
    +                            "description": "Absent.No transmission request.",
    +                            "value": 0
    +                          },
    +                          "PRESENT_THE_MESSAGE": {
    +                            "description": "Present. The message, previously written to the CANxTFI, CANxTID, and optionally the CANxTDA and CANxTDB registers, is queued for transmission from the selected Transmit Buffer. If at two or all three of STB1, STB2 and STB3 bits are selected when TR=1 is written, Transmit Buffer will be selected based on the chosen priority scheme (for details see Section 21.5.3 Transmit Buffers (TXB))",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AT": {
    +                    "description": "Abort Transmission.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NO_ACTION_DO_NOT_AB": {
    +                            "description": "No action. Do not abort the transmission.",
    +                            "value": 0
    +                          },
    +                          "PRESENT_IF_NOT_ALRE": {
    +                            "description": "Present. if not already in progress, a pending Transmission Request for the selected Transmit Buffer is cancelled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RRB": {
    +                    "description": "Release Receive Buffer.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NO_ACTION_DO_NOT_RE": {
    +                            "description": "No action. Do not release the receive buffer.",
    +                            "value": 0
    +                          },
    +                          "RELEASED_THE_INFORM": {
    +                            "description": "Released. The information in the Receive Buffer (consisting of CANxRFS, CANxRID, and if applicable the CANxRDA and CANxRDB registers) is released, and becomes eligible for replacement by the next received frame. If the next received frame is not available, writing this command clears the RBS bit in the Status Register(s).",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CDO": {
    +                    "description": "Clear Data Overrun.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NO_ACTION_DO_NOT_CL": {
    +                            "description": "No action. Do not clear the data overrun bit.",
    +                            "value": 0
    +                          },
    +                          "CLEAR_THE_DATA_OVER": {
    +                            "description": "Clear. The Data Overrun bit in Status Register(s) is cleared.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SRR": {
    +                    "description": "Self Reception Request.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ABSENT_NO_SELF_RECE": {
    +                            "description": "Absent. No self reception request.",
    +                            "value": 0
    +                          },
    +                          "PRESENT_THE_MESSAGE": {
    +                            "description": "Present. The message, previously written to the CANxTFS, CANxTID, and optionally the CANxTDA and CANxTDB registers, is queued for transmission from the selected Transmit Buffer and received simultaneously. This differs from the TR bit above in that the receiver is not disabled during the transmission, so that it receives the message if its Identifier is recognized by the Acceptance Filter.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STB1": {
    +                    "description": "Select Tx Buffer 1.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NOT_SELECTED_TX_BUF": {
    +                            "description": "Not selected. Tx Buffer 1 is not selected for transmission.",
    +                            "value": 0
    +                          },
    +                          "SELECTED_TX_BUFFER_": {
    +                            "description": "Selected. Tx Buffer 1 is selected for transmission.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STB2": {
    +                    "description": "Select Tx Buffer 2.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NOT_SELECTED_TX_BUF": {
    +                            "description": "Not selected. Tx Buffer 2 is not selected for transmission.",
    +                            "value": 0
    +                          },
    +                          "SELECTED_TX_BUFFER_": {
    +                            "description": "Selected. Tx Buffer 2 is selected for transmission.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STB3": {
    +                    "description": "Select Tx Buffer 3.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NOT_SELECTED_TX_BUF": {
    +                            "description": "Not selected. Tx Buffer 3 is not selected for transmission.",
    +                            "value": 0
    +                          },
    +                          "SELECTED_TX_BUFFER_": {
    +                            "description": "Selected. Tx Buffer 3 is selected for transmission.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "GSR": {
    +              "description": "Global Controller Status and Error Counters. The error counters can only be written when RM in CANMOD is 1.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 60,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RBS": {
    +                    "description": "Receive Buffer Status. After reading all messages and releasing their memory space with the command 'Release Receive Buffer,' this bit is cleared.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "EMPTY_NO_MESSAGE_IS": {
    +                            "description": "Empty. No message is available.",
    +                            "value": 0
    +                          },
    +                          "FULL_AT_LEAST_ONE_C": {
    +                            "description": "Full. At least one complete message is received by the Double Receive Buffer and available in the CANxRFS, CANxRID, and if applicable the CANxRDA and CANxRDB registers. This bit is cleared by the Release Receive Buffer command in CANxCMR, if no subsequent received message is available.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DOS": {
    +                    "description": "Data Overrun Status. If there is not enough space to store the message within the Receive Buffer, that message is dropped and the Data Overrun condition is signalled to the CPU in the moment this message becomes valid. If this message is not completed successfully (e.g. because of an error), no overrun condition is signalled.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ABSENT_NO_DATA_OVER": {
    +                            "description": "Absent. No data overrun has occurred since the last Clear Data Overrun command was given/written to CANxCMR (or since Reset).",
    +                            "value": 0
    +                          },
    +                          "OVERRUN_A_MESSAGE_W": {
    +                            "description": "Overrun. A message was lost because the preceding message to this CAN controller was not read and released quickly enough (there was not enough space for a new message in the Double Receive Buffer).",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TBS": {
    +                    "description": "Transmit Buffer Status.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "LOCKED_AT_LEAST_ONE": {
    +                            "description": "Locked. At least one of the Transmit Buffers is not available for the CPU, i.e. at least one previously queued message for this CAN controller has not yet been sent, and therefore software should not write to the CANxTFI, CANxTID, CANxTDA, nor CANxTDB registers of that (those) Tx buffer(s).",
    +                            "value": 0
    +                          },
    +                          "RELEASED_ALL_THREE_": {
    +                            "description": "Released. All three Transmit Buffers are available for the CPU. No transmit message is pending for this CAN controller (in any of the 3 Tx buffers), and software may write to any of the CANxTFI, CANxTID, CANxTDA, and CANxTDB registers.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TCS": {
    +                    "description": "Transmit Complete Status. The Transmission Complete Status bit is set '0' (incomplete) whenever the Transmission Request bit or the Self Reception Request bit is set '1' at least for one of the three Transmit Buffers. The Transmission Complete Status bit will remain '0' until all messages are transmitted successfully.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INCOMPLETE_AT_LEAST": {
    +                            "description": "Incomplete. At least one requested transmission has not been successfully completed yet.",
    +                            "value": 0
    +                          },
    +                          "COMPLETE_ALL_REQUES": {
    +                            "description": "Complete. All requested transmission(s) has (have) been successfully completed.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RS": {
    +                    "description": "Receive Status. If both the Receive Status and the Transmit Status bits are '0' (idle), the CAN-Bus is idle. If both bits are set, the controller is waiting to become idle again. After hardware reset 11 consecutive recessive bits have to be detected until idle status is reached. After Bus-off this will take 128 times of 11 consecutive recessive bits.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "IDLE_THE_CAN_CONTRO": {
    +                            "description": "Idle. The CAN controller is idle.",
    +                            "value": 0
    +                          },
    +                          "RECEIVE_THE_CAN_CON": {
    +                            "description": "Receive. The CAN controller is receiving a message.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TS": {
    +                    "description": "Transmit Status. If both the Receive Status and the Transmit Status bits are '0' (idle), the CAN-Bus is idle. If both bits are set, the controller is waiting to become idle again. After hardware reset 11 consecutive recessive bits have to be detected until idle status is reached. After Bus-off this will take 128 times of 11 consecutive recessive bits.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "IDLE_THE_CAN_CONTRO": {
    +                            "description": "Idle. The CAN controller is idle.",
    +                            "value": 0
    +                          },
    +                          "TRANSMIT_THE_CAN_CO": {
    +                            "description": "Transmit. The CAN controller is sending a message.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ES": {
    +                    "description": "Error Status. Errors detected during reception or transmission will effect the error counters according to the CAN specification. The Error Status bit is set when at least one of the error counters has reached or exceeded the Error Warning Limit. An Error Warning Interrupt is generated, if enabled. The default value of the Error Warning Limit after hardware reset is 96 decimal, see also Section 21.7.7 CAN Error Warning Limit register (CAN1EWL - 0x4004 4018, CAN2EWL - 0x4004 8018).",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "OK_BOTH_ERROR_COUNT": {
    +                            "description": "OK. Both error counters are below the Error Warning Limit.",
    +                            "value": 0
    +                          },
    +                          "ERROR_ONE_OR_BOTH_O": {
    +                            "description": "Error. One or both of the Transmit and Receive Error Counters has reached the limit set in the Error Warning Limit register.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "BS": {
    +                    "description": "Bus Status. Mode bit '1' (present) and an Error Warning Interrupt is generated, if enabled. Afterwards the Transmit Error Counter is set to '127', and the Receive Error Counter is cleared. It will stay in this mode until the CPU clears the Reset Mode bit. Once this is completed the CAN Controller will wait the minimum protocol-defined time (128 occurrences of the Bus-Free signal) counting down the Transmit Error Counter. After that, the Bus Status bit is cleared (Bus-On), the Error Status bit is set '0' (ok), the Error Counters are reset, and an Error Warning Interrupt is generated, if enabled. Reading the TX Error Counter during this time gives information about the status of the Bus-Off recovery.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "BUS_ON_THE_CAN_CONT": {
    +                            "description": "Bus-on. The CAN Controller is involved in bus activities",
    +                            "value": 0
    +                          },
    +                          "BUS_OFF_THE_CAN_CON": {
    +                            "description": "Bus-off. The CAN controller is currently not involved/prohibited from bus activity because the Transmit Error Counter reached its limiting value of 255.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "RXERR": {
    +                    "description": "The current value of the Rx Error Counter (an 8-bit value).",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "TXERR": {
    +                    "description": "The current value of the Tx Error Counter (an 8-bit value).",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "ICR": {
    +              "description": "Interrupt status, Arbitration Lost Capture, Error Code Capture",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RI": {
    +                    "description": "Receive Interrupt. This bit is set whenever the RBS bit in CANxSR and the RIE bit in CANxIER are both 1, indicating that a new message was received and stored in the Receive Buffer. The Receive Interrupt Bit is not cleared upon a read access to the Interrupt Register. Giving the Command Release Receive Buffer will clear RI temporarily. If there is another message available within the Receive Buffer after the release command, RI is set again. Otherwise RI remains cleared.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RESET": {
    +                            "description": "Reset",
    +                            "value": 0
    +                          },
    +                          "SET": {
    +                            "description": "Set",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TI1": {
    +                    "description": "Transmit Interrupt 1. This bit is set when the TBS1 bit in CANxSR goes from 0 to 1 (whenever a message out of TXB1 was successfully transmitted or aborted), indicating that Transmit buffer 1 is available, and the TIE1 bit in CANxIER is 1.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RESET": {
    +                            "description": "Reset",
    +                            "value": 0
    +                          },
    +                          "SET": {
    +                            "description": "Set",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EI": {
    +                    "description": "Error Warning Interrupt. This bit is set on every change (set or clear) of either the Error Status or Bus Status bit in CANxSR and the EIE bit bit is set within the Interrupt Enable Register at the time of the change.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RESET": {
    +                            "description": "Reset",
    +                            "value": 0
    +                          },
    +                          "SET": {
    +                            "description": "Set",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DOI": {
    +                    "description": "Data Overrun Interrupt. This bit is set when the DOS bit in CANxSR goes from 0 to 1 and the DOIE bit in CANxIER is 1.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RESET": {
    +                            "description": "Reset",
    +                            "value": 0
    +                          },
    +                          "SET": {
    +                            "description": "Set",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "WUI": {
    +                    "description": "Wake-Up Interrupt. This bit is set if the CAN controller is sleeping and bus activity is detected and the WUIE bit in CANxIER is 1. A Wake-Up Interrupt is also generated if the CPU tries to set the Sleep bit while the CAN controller is involved in bus activities or a CAN Interrupt is pending. The WUI flag can also get asserted when the according enable bit WUIE is not set. In this case a Wake-Up Interrupt does not get asserted.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RESET": {
    +                            "description": "Reset",
    +                            "value": 0
    +                          },
    +                          "SET": {
    +                            "description": "Set",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EPI": {
    +                    "description": "Error Passive Interrupt. This bit is set if the EPIE bit in CANxIER is 1, and the CAN controller switches between Error Passive and Error Active mode in either direction. This is the case when the CAN Controller has reached the Error Passive Status (at least one error counter exceeds the CAN protocol defined level of 127) or if the CAN Controller is in Error Passive Status and enters the Error Active Status again.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RESET": {
    +                            "description": "Reset",
    +                            "value": 0
    +                          },
    +                          "SET": {
    +                            "description": "Set",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ALI": {
    +                    "description": "Arbitration Lost Interrupt. This bit is set if the ALIE bit in CANxIER is 1, and the CAN controller loses arbitration while attempting to transmit. In this case the CAN node becomes a receiver.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RESET": {
    +                            "description": "Reset",
    +                            "value": 0
    +                          },
    +                          "SET": {
    +                            "description": "Set",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "BEI": {
    +                    "description": "Bus Error Interrupt -- this bit is set if the BEIE bit in CANxIER is 1, and the CAN controller detects an error on the bus.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RESET": {
    +                            "description": "Reset",
    +                            "value": 0
    +                          },
    +                          "SET": {
    +                            "description": "Set",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IDI": {
    +                    "description": "ID Ready Interrupt -- this bit is set if the IDIE bit in CANxIER is 1, and a CAN Identifier has been received (a message was successfully transmitted or aborted). This bit is set whenever a message was successfully transmitted or aborted and the IDIE bit is set in the IER register.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RESET": {
    +                            "description": "Reset",
    +                            "value": 0
    +                          },
    +                          "SET": {
    +                            "description": "Set",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TI2": {
    +                    "description": "Transmit Interrupt 2. This bit is set when the TBS2 bit in CANxSR goes from 0 to 1 (whenever a message out of TXB2 was successfully transmitted or aborted), indicating that Transmit buffer 2 is available, and the TIE2 bit in CANxIER is 1.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RESET": {
    +                            "description": "Reset",
    +                            "value": 0
    +                          },
    +                          "SET": {
    +                            "description": "Set",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TI3": {
    +                    "description": "Transmit Interrupt 3. This bit is set when the TBS3 bit in CANxSR goes from 0 to 1 (whenever a message out of TXB3 was successfully transmitted or aborted), indicating that Transmit buffer 3 is available, and the TIE3 bit in CANxIER is 1.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RESET": {
    +                            "description": "Reset",
    +                            "value": 0
    +                          },
    +                          "SET": {
    +                            "description": "Set",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from a reserved bit is not defined.",
    +                    "offset": 11,
    +                    "size": 5
    +                  },
    +                  "ERRBIT4_0": {
    +                    "description": "Error Code Capture: when the CAN controller detects a bus error, the location of the error within the frame is captured in this field. The value reflects an internal state variable, and as a result is not very linear: 00011 = Start of Frame 00010 = ID28 ... ID21 00110 = ID20 ... ID18 00100 = SRTR Bit 00101 = IDE bit 00111 = ID17 ... 13 01111 = ID12 ... ID5 01110 = ID4 ... ID0 01100 = RTR Bit 01101 = Reserved Bit 1 01001 = Reserved Bit 0 01011 = Data Length Code 01010 = Data Field 01000 = CRC Sequence 11000 = CRC Delimiter 11001 = Acknowledge Slot 11011 = Acknowledge Delimiter 11010 = End of Frame 10010 = Intermission Whenever a bus error occurs, the corresponding bus error interrupt is forced, if enabled. At the same time, the current position of the Bit Stream Processor is captured into the Error Code Capture Register. The content within this register is fixed until the user software has read out its content once. From now on, the capture mechanism is activated again, i.e. reading the CANxICR enables another Bus Error Interrupt.",
    +                    "offset": 16,
    +                    "size": 5
    +                  },
    +                  "ERRDIR": {
    +                    "description": "When the CAN controller detects a bus error, the direction of the current bit is captured in this bit.",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ERROR_OCCURRED_DURIN": {
    +                            "description": "Error occurred during receiving.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERRC1_0": {
    +                    "description": "When the CAN controller detects a bus error, the type of error is captured in this field:",
    +                    "offset": 22,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "BIT_ERROR": {
    +                            "description": "Bit error",
    +                            "value": 0
    +                          },
    +                          "FORM_ERROR": {
    +                            "description": "Form error",
    +                            "value": 1
    +                          },
    +                          "STUFF_ERROR": {
    +                            "description": "Stuff error",
    +                            "value": 2
    +                          },
    +                          "OTHER_ERROR": {
    +                            "description": "Other error",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ALCBIT": {
    +                    "description": "Each time arbitration is lost while trying to send on the CAN, the bit number within the frame is captured into this field. After the content of ALCBIT is read, the ALI bit is cleared and a new Arbitration Lost interrupt can occur. 00 = arbitration lost in the first bit (MS) of identifier ... 11 = arbitration lost in SRTS bit (RTR bit for standard frame messages) 12 = arbitration lost in IDE bit 13 = arbitration lost in 12th bit of identifier (extended frame only) ... 30 = arbitration lost in last bit of identifier (extended frame only) 31 = arbitration lost in RTR bit (extended frame only) On arbitration lost, the corresponding arbitration lost interrupt is forced, if enabled. At that time, the current bit position of the Bit Stream Processor is captured into the Arbitration Lost Capture Register. The content within this register is fixed until the user application has read out its contents once. From now on, the capture mechanism is activated again.",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IER": {
    +              "description": "Interrupt Enable",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RIE": {
    +                    "description": "Receiver Interrupt Enable. When the Receive Buffer Status is 'full', the CAN Controller requests the respective interrupt.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TIE1": {
    +                    "description": "Transmit Interrupt Enable for Buffer1. When a message has been successfully transmitted out of TXB1 or Transmit Buffer 1 is accessible again (e.g. after an Abort Transmission command), the CAN Controller requests the respective interrupt.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EIE": {
    +                    "description": "Error Warning Interrupt Enable. If the Error or Bus Status change (see Status Register), the CAN Controller requests the respective interrupt.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DOIE": {
    +                    "description": "Data Overrun Interrupt Enable. If the Data Overrun Status bit is set (see Status Register), the CAN Controller requests the respective interrupt.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "WUIE": {
    +                    "description": "Wake-Up Interrupt Enable. If the sleeping CAN controller wakes up, the respective interrupt is requested.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EPIE": {
    +                    "description": "Error Passive Interrupt Enable. If the error status of the CAN Controller changes from error active to error passive or vice versa, the respective interrupt is requested.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ALIE": {
    +                    "description": "Arbitration Lost Interrupt Enable. If the CAN Controller has lost arbitration, the respective interrupt is requested.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BEIE": {
    +                    "description": "Bus Error Interrupt Enable. If a bus error has been detected, the CAN Controller requests the respective interrupt.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IDIE": {
    +                    "description": "ID Ready Interrupt Enable. When a CAN identifier has been received, the CAN Controller requests the respective interrupt.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TIE2": {
    +                    "description": "Transmit Interrupt Enable for Buffer2. When a message has been successfully transmitted out of TXB2 or Transmit Buffer 2 is accessible again (e.g. after an Abort Transmission command), the CAN Controller requests the respective interrupt.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TIE3": {
    +                    "description": "Transmit Interrupt Enable for Buffer3. When a message has been successfully transmitted out of TXB3 or Transmit Buffer 3 is accessible again (e.g. after an Abort Transmission command), the CAN Controller requests the respective interrupt.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 11,
    +                    "size": 21
    +                  }
    +                }
    +              }
    +            },
    +            "BTR": {
    +              "description": "Bus Timing. Can only be written when RM in CANMOD is 1.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 1835008,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BRP": {
    +                    "description": "Baud Rate Prescaler. The APB clock is divided by (this value plus one) to produce the CAN clock.",
    +                    "offset": 0,
    +                    "size": 10
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "SJW": {
    +                    "description": "The Synchronization Jump Width is (this value plus one) CAN clocks.",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "TESG1": {
    +                    "description": "The delay from the nominal Sync point to the sample point is (this value plus one) CAN clocks.",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "TESG2": {
    +                    "description": "The delay from the sample point to the next nominal sync point is (this value plus one) CAN clocks. The nominal CAN bit time is (this value plus the value in TSEG1 plus 3) CAN clocks.",
    +                    "offset": 20,
    +                    "size": 3
    +                  },
    +                  "SAM": {
    +                    "description": "Sampling",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "THE_BUS_IS_SAMPLED_O": {
    +                            "description": "The bus is sampled once (recommended for high speed buses)",
    +                            "value": 0
    +                          },
    +                          "THE_BUS_IS_SAMPLED_3": {
    +                            "description": "The bus is sampled 3 times (recommended for low to medium speed buses to filter spikes on the bus-line)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "EWL": {
    +              "description": "Error Warning Limit. Can only be written when RM in CANMOD is 1.",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 96,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EWL": {
    +                    "description": "During CAN operation, this value is compared to both the Tx and Rx Error Counters. If either of these counter matches this value, the Error Status (ES) bit in CANSR is set.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "Status Register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 3947580,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RBS_1": {
    +                    "description": "Receive Buffer Status. This bit is identical to the RBS bit in the CANxGSR.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DOS_1": {
    +                    "description": "Data Overrun Status. This bit is identical to the DOS bit in the CANxGSR.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TBS1_1": {
    +                    "description": "Transmit Buffer Status 1.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "LOCKED_SOFTWARE_CAN": {
    +                            "description": "Locked. Software cannot access the Tx Buffer 1 nor write to the corresponding CANxTFI, CANxTID, CANxTDA, and CANxTDB registers because a message is either waiting for transmission or is in transmitting process.",
    +                            "value": 0
    +                          },
    +                          "RELEASED_SOFTWARE_M": {
    +                            "description": "Released. Software may write a message into the Transmit Buffer 1 and its CANxTFI, CANxTID, CANxTDA, and CANxTDB registers.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TCS1_1": {
    +                    "description": "Transmission Complete Status.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INCOMPLETE_THE_PREV": {
    +                            "description": "Incomplete. The previously requested transmission for Tx Buffer 1 is not complete.",
    +                            "value": 0
    +                          },
    +                          "COMPLETE_THE_PREVIO": {
    +                            "description": "Complete. The previously requested transmission for Tx Buffer 1 has been successfully completed.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RS_1": {
    +                    "description": "Receive Status. This bit is identical to the RS bit in the GSR.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TS1_1": {
    +                    "description": "Transmit Status 1.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "IDLE_THERE_IS_NO_TR": {
    +                            "description": "Idle. There is no transmission from Tx Buffer 1.",
    +                            "value": 0
    +                          },
    +                          "TRANSMIT_THE_CAN_CO": {
    +                            "description": "Transmit. The CAN Controller is transmitting a message from Tx Buffer 1.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ES_1": {
    +                    "description": "Error Status. This bit is identical to the ES bit in the CANxGSR.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BS_1": {
    +                    "description": "Bus Status. This bit is identical to the BS bit in the CANxGSR.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RBS_2": {
    +                    "description": "Receive Buffer Status. This bit is identical to the RBS bit in the CANxGSR.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DOS_2": {
    +                    "description": "Data Overrun Status. This bit is identical to the DOS bit in the CANxGSR.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TBS2_2": {
    +                    "description": "Transmit Buffer Status 2.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "LOCKED_SOFTWARE_CAN": {
    +                            "description": "Locked. Software cannot access the Tx Buffer 2 nor write to the corresponding CANxTFI, CANxTID, CANxTDA, and CANxTDB registers because a message is either waiting for transmission or is in transmitting process.",
    +                            "value": 0
    +                          },
    +                          "RELEASED_SOFTWARE_M": {
    +                            "description": "Released. Software may write a message into the Transmit Buffer 2 and its CANxTFI, CANxTID, CANxTDA, and CANxTDB registers.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TCS2_2": {
    +                    "description": "Transmission Complete Status.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INCOMPLETE_THE_PREV": {
    +                            "description": "Incomplete. The previously requested transmission for Tx Buffer 2 is not complete.",
    +                            "value": 0
    +                          },
    +                          "COMPLETE_THE_PREVIO": {
    +                            "description": "Complete. The previously requested transmission for Tx Buffer 2 has been successfully completed.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RS_2": {
    +                    "description": "Receive Status. This bit is identical to the RS bit in the GSR.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TS2_2": {
    +                    "description": "Transmit Status 2.",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "IDLE_THERE_IS_NO_TR": {
    +                            "description": "Idle. There is no transmission from Tx Buffer 2.",
    +                            "value": 0
    +                          },
    +                          "TRANSMIT_THE_CAN_CO": {
    +                            "description": "Transmit. The CAN Controller is transmitting a message from Tx Buffer 2.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ES_2": {
    +                    "description": "Error Status. This bit is identical to the ES bit in the CANxGSR.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "BS_2": {
    +                    "description": "Bus Status. This bit is identical to the BS bit in the CANxGSR.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "RBS_3": {
    +                    "description": "Receive Buffer Status. This bit is identical to the RBS bit in the CANxGSR.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "DOS_3": {
    +                    "description": "Data Overrun Status. This bit is identical to the DOS bit in the CANxGSR.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TBS3_3": {
    +                    "description": "Transmit Buffer Status 3.",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "LOCKED_SOFTWARE_CAN": {
    +                            "description": "Locked. Software cannot access the Tx Buffer 3 nor write to the corresponding CANxTFI, CANxTID, CANxTDA, and CANxTDB registers because a message is either waiting for transmission or is in transmitting process.",
    +                            "value": 0
    +                          },
    +                          "RELEASED_SOFTWARE_M": {
    +                            "description": "Released. Software may write a message into the Transmit Buffer 3 and its CANxTFI, CANxTID, CANxTDA, and CANxTDB registers.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TCS3_3": {
    +                    "description": "Transmission Complete Status.",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INCOMPLETE_THE_PREV": {
    +                            "description": "Incomplete. The previously requested transmission for Tx Buffer 3 is not complete.",
    +                            "value": 0
    +                          },
    +                          "COMPLETE_THE_PREVIO": {
    +                            "description": "Complete. The previously requested transmission for Tx Buffer 3 has been successfully completed.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RS_3": {
    +                    "description": "Receive Status. This bit is identical to the RS bit in the GSR.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "TS3_3": {
    +                    "description": "Transmit Status 3.",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "IDLE_THERE_IS_NO_TR": {
    +                            "description": "Idle. There is no transmission from Tx Buffer 3.",
    +                            "value": 0
    +                          },
    +                          "TRANSMIT_THE_CAN_CO": {
    +                            "description": "Transmit. The CAN Controller is transmitting a message from Tx Buffer 3.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ES_3": {
    +                    "description": "Error Status. This bit is identical to the ES bit in the CANxGSR.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "BS_3": {
    +                    "description": "Bus Status. This bit is identical to the BS bit in the CANxGSR.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, the value read from a reserved bit is not defined.",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "RFS": {
    +              "description": "Receive frame status. Can only be written when RM in CANMOD is 1.",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IDINDEX": {
    +                    "description": "ID Index. If the BP bit (below) is 0, this value is the zero-based number of the Lookup Table RAM entry at which the Acceptance Filter matched the received Identifier. Disabled entries in the Standard tables are included in this numbering, but will not be matched. See Section 21.17 Examples of acceptance filter tables and ID index values on page 587 for examples of ID Index values.",
    +                    "offset": 0,
    +                    "size": 10
    +                  },
    +                  "BP": {
    +                    "description": "If this bit is 1, the current message was received in AF Bypass mode, and the ID Index field (above) is meaningless.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 20,
    +                    "size": 10
    +                  },
    +                  "DLC": {
    +                    "description": "The field contains the Data Length Code (DLC) field of the current received message. When RTR = 0, this is related to the number of data bytes available in the CANRDA and CANRDB registers as follows: 0000-0111 = 0 to 7 bytes1000-1111 = 8 bytes With RTR = 1, this value indicates the number of data bytes requested to be sent back, with the same encoding.",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "RTR": {
    +                    "description": "This bit contains the Remote Transmission Request bit of the current received message. 0 indicates a Data Frame, in which (if DLC is non-zero) data can be read from the CANRDA and possibly the CANRDB registers. 1 indicates a Remote frame, in which case the DLC value identifies the number of data bytes requested to be sent using the same Identifier.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FF": {
    +                    "description": "A 0 in this bit indicates that the current received message included an 11-bit Identifier, while a 1 indicates a 29-bit Identifier. This affects the contents of the CANid register described below.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RID": {
    +              "description": "Received Identifier. Can only be written when RM in CANMOD is 1.",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ID": {
    +                    "description": "The 11-bit Identifier field of the current received message. In CAN 2.0A, these bits are called ID10-0, while in CAN 2.0B they're called ID29-18.",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from a reserved bit is not defined.",
    +                    "offset": 11,
    +                    "size": 21
    +                  }
    +                }
    +              }
    +            },
    +            "RDA": {
    +              "description": "Received data bytes 1-4. Can only be written when RM in CANMOD is 1.",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA1": {
    +                    "description": "Data 1. If the DLC field in CANRFS >= 0001, this contains the first Data byte of the current received message.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "DATA2": {
    +                    "description": "Data 2. If the DLC field in CANRFS >= 0010, this contains the first Data byte of the current received message.",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA3": {
    +                    "description": "Data 3. If the DLC field in CANRFS >= 0011, this contains the first Data byte of the current received message.",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA4": {
    +                    "description": "Data 4. If the DLC field in CANRFS >= 0100, this contains the first Data byte of the current received message.",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "RDB": {
    +              "description": "Received data bytes 5-8. Can only be written when RM in CANMOD is 1.",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA5": {
    +                    "description": "Data 5. If the DLC field in CANRFS >= 0101, this contains the first Data byte of the current received message.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "DATA6": {
    +                    "description": "Data 6. If the DLC field in CANRFS >= 0110, this contains the first Data byte of the current received message.",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DATA7": {
    +                    "description": "Data 7. If the DLC field in CANRFS >= 0111, this contains the first Data byte of the current received message.",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DATA8": {
    +                    "description": "Data 8. If the DLC field in CANRFS >= 1000, this contains the first Data byte of the current received message.",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "USB": {
    +        "description": "USB device/host/OTG controller",
    +        "children": {
    +          "registers": {
    +            "INTST": {
    +              "description": "OTG Interrupt Status",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TMR": {
    +                    "description": "Timer time-out.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "REMOVE_PU": {
    +                    "description": "Remove pull-up. This bit is set by hardware to indicate that software needs to disable the D+ pull-up resistor.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HNP_FAILURE": {
    +                    "description": "HNP failed. This bit is set by hardware to indicate that the HNP switching has failed.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "HNP_SUCCESS": {
    +                    "description": "HNP succeeded. This bit is set by hardware to indicate that the HNP switching has succeeded.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 4,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            },
    +            "INTEN": {
    +              "description": "OTG Interrupt Enable",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TMR_EN": {
    +                    "description": "1 = enable the corresponding bit in the IntSt register.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "REMOVE_PU_EN": {
    +                    "description": "1 = enable the corresponding bit in the IntSt register.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HNP_FAILURE_EN": {
    +                    "description": "1 = enable the corresponding bit in the IntSt register.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "HNP_SUCCES_EN": {
    +                    "description": "1 = enable the corresponding bit in the IntSt register.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 4,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            },
    +            "INTSET": {
    +              "description": "OTG Interrupt Set",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TMR_SET": {
    +                    "description": "0 = no effect. 1 = set the corresponding bit in the IntSt register.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "REMOVE_PU_SET": {
    +                    "description": "0 = no effect. 1 = set the corresponding bit in the IntSt register.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HNP_FAILURE_SET": {
    +                    "description": "0 = no effect. 1 = set the corresponding bit in the IntSt register.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "HNP_SUCCES_SET": {
    +                    "description": "0 = no effect. 1 = set the corresponding bit in the IntSt register.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 4,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            },
    +            "INTCLR": {
    +              "description": "OTG Interrupt Clear",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TMR_CLR": {
    +                    "description": "0 = no effect. 1 = clear the corresponding bit in the IntSt register.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "REMOVE_PU_CLR": {
    +                    "description": "0 = no effect. 1 = clear the corresponding bit in the IntSt register.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HNP_FAILURE_CLR": {
    +                    "description": "0 = no effect. 1 = clear the corresponding bit in the IntSt register.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "HNP_SUCCES_CLR": {
    +                    "description": "0 = no effect. 1 = clear the corresponding bit in the IntSt register.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 4,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            },
    +            "STCTRL": {
    +              "description": "OTG Status and Control and USB port select",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PORT_FUNC": {
    +                    "description": "Controls connection of USB functions (see Figure 51). Bit 0 is set or cleared by hardware when B_HNP_TRACK or A_HNP_TRACK is set and HNP succeeds. See Section 14.9. 00: U1 = device (OTG), U2 = host 01: U1 = host (OTG), U2 = host 10: Reserved 11: U1 = host, U2 = device In a device-only configuration, the following values are allowed: 00: U1 = device. The USB device controller signals are mapped to the U1 port: USB_CONNECT1, USB_UP_LED1, USB_D+1, USB_D-1. 11: U2 = device. The USB device controller signals are mapped to the U2 port: USB_CONNECT2, USB_UP_LED2, USB_D+2, USB_D-2.",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "TMR_SCALE": {
    +                    "description": "Timer scale selection. This field determines the duration of each timer count. 00: 10 ms (100 KHz) 01: 100 ms (10 KHz) 10: 1000 ms (1 KHz) 11: Reserved",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "TMR_MODE": {
    +                    "description": "Timer mode selection. 0: monoshot 1: free running",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TMR_EN": {
    +                    "description": "Timer enable. When set, TMR_CNT increments. When cleared, TMR_CNT is reset to 0.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TMR_RST": {
    +                    "description": "Timer reset. Writing one to this bit resets TMR_CNT to 0. This provides a single bit control for the software to restart the timer when the timer is enabled.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 11,
    +                    "size": 5
    +                  },
    +                  "B_HNP_TRACK": {
    +                    "description": "Enable HNP tracking for B-device (peripheral), see Section 14.9. Hardware clears this bit when HNP_SUCCESS or HNP_FAILURE is set.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "A_HNP_TRACK": {
    +                    "description": "Enable HNP tracking for A-device (host), see Section 14.9. Hardware clears this bit when HNP_SUCCESS or HNP_FAILURE is set.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PU_REMOVED": {
    +                    "description": "When the B-device changes its role from peripheral to host, software sets this bit when it removes the D+ pull-up, see Section 14.9. Hardware clears this bit when HNP_SUCCESS or HNP_FAILURE is set.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TMR_CNT": {
    +                    "description": "Current timer count value.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "TMR": {
    +              "description": "OTG Timer",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 65535,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMEOUT_CNT": {
    +                    "description": "The TMR interrupt is set when TMR_CNT reaches this value.",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DEVINTST": {
    +              "description": "USB Device Interrupt Status",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 16,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "FRAME": {
    +                    "description": "The frame interrupt occurs every 1 ms. This is used in isochronous packet transfers.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EP_FAST": {
    +                    "description": "Fast endpoint interrupt. If an Endpoint Interrupt Priority register (USBEpIntPri) bit is set, the corresponding endpoint interrupt will be routed to this bit.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EP_SLOW": {
    +                    "description": "Slow endpoints interrupt. If an Endpoint Interrupt Priority Register (USBEpIntPri) bit is not set, the corresponding endpoint interrupt will be routed to this bit.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DEV_STAT": {
    +                    "description": "Set when USB Bus reset, USB suspend change or Connect change event occurs. Refer to Section 13.12.6 Set Device Status (Command: 0xFE, Data: write 1 byte) on page 366.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CCEMPTY": {
    +                    "description": "The command code register (USBCmdCode) is empty (New command can be written).",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CDFULL": {
    +                    "description": "Command data register (USBCmdData) is full (Data can be read now).",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RxENDPKT": {
    +                    "description": "The current packet in the endpoint buffer is transferred to the CPU.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TxENDPKT": {
    +                    "description": "The number of data bytes transferred to the endpoint buffer equals the number of bytes programmed in the TxPacket length register (USBTxPLen).",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EP_RLZED": {
    +                    "description": "Endpoints realized. Set when Realize Endpoint register (USBReEp) or MaxPacketSize register (USBMaxPSize) is updated and the corresponding operation is completed.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ERR_INT": {
    +                    "description": "Error Interrupt. Any bus error interrupt from the USB device. Refer to Section 13.12.9 Read Error Status (Command: 0xFB, Data: read 1 byte) on page 368",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from a reserved bit is not defined.",
    +                    "offset": 10,
    +                    "size": 22
    +                  }
    +                }
    +              }
    +            },
    +            "DEVINTEN": {
    +              "description": "USB Device Interrupt Enable",
    +              "offset": 516,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FRAMEEN": {
    +                    "description": "0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EP_FASTEN": {
    +                    "description": "0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EP_SLOWEN": {
    +                    "description": "0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DEV_STATEN": {
    +                    "description": "0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CCEMPTYEN": {
    +                    "description": "0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CDFULLEN": {
    +                    "description": "0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RxENDPKTEN": {
    +                    "description": "0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TxENDPKTEN": {
    +                    "description": "0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EP_RLZEDEN": {
    +                    "description": "0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ERR_INTEN": {
    +                    "description": "0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved",
    +                    "offset": 10,
    +                    "size": 22
    +                  }
    +                }
    +              }
    +            },
    +            "DEVINTCLR": {
    +              "description": "USB Device Interrupt Clear",
    +              "offset": 520,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "FRAMECLR": {
    +                    "description": "0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EP_FASTCLR": {
    +                    "description": "0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EP_SLOWCLR": {
    +                    "description": "0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DEV_STATCLR": {
    +                    "description": "0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CCEMPTYCLR": {
    +                    "description": "0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CDFULLCLR": {
    +                    "description": "0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RxENDPKTCLR": {
    +                    "description": "0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TxENDPKTCLR": {
    +                    "description": "0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EP_RLZEDCLR": {
    +                    "description": "0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ERR_INTCLR": {
    +                    "description": "0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved",
    +                    "offset": 10,
    +                    "size": 22
    +                  }
    +                }
    +              }
    +            },
    +            "DEVINTSET": {
    +              "description": "USB Device Interrupt Set",
    +              "offset": 524,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "FRAMESET": {
    +                    "description": "0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EP_FASTSET": {
    +                    "description": "0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EP_SLOWSET": {
    +                    "description": "0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DEV_STATSET": {
    +                    "description": "0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CCEMPTYSET": {
    +                    "description": "0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CDFULLSET": {
    +                    "description": "0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RxENDPKTSET": {
    +                    "description": "0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TxENDPKTSET": {
    +                    "description": "0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EP_RLZEDSET": {
    +                    "description": "0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ERR_INTSET": {
    +                    "description": "0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved",
    +                    "offset": 10,
    +                    "size": 22
    +                  }
    +                }
    +              }
    +            },
    +            "CMDCODE": {
    +              "description": "USB Command Code",
    +              "offset": 528,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "CMD_PHASE": {
    +                    "description": "The command phase:",
    +                    "offset": 8,
    +                    "size": 8,
    +                    "enum": {
    +                      "size": 8,
    +                      "children": {
    +                        "enum_fields": {
    +                          "READ": {
    +                            "description": "Read",
    +                            "value": 2
    +                          },
    +                          "WRITE": {
    +                            "description": "Write",
    +                            "value": 1
    +                          },
    +                          "COMMAND": {
    +                            "description": "Command",
    +                            "value": 5
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CMD_CODE_WDATA": {
    +                    "description": "This is a multi-purpose field. When CMD_PHASE is Command or Read, this field contains the code for the command (CMD_CODE). When CMD_PHASE is Write, this field contains the command write data (CMD_WDATA).",
    +                    "offset": 16,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CMDDATA": {
    +              "description": "USB Command Data",
    +              "offset": 532,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CMD_RDATA": {
    +                    "description": "Command Read Data.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from a reserved bit is not defined.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "RXDATA": {
    +              "description": "USB Receive Data",
    +              "offset": 536,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RX_DATA": {
    +                    "description": "Data received.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "TXDATA": {
    +              "description": "USB Transmit Data",
    +              "offset": 540,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TX_DATA": {
    +                    "description": "Transmit Data.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "RXPLEN": {
    +              "description": "USB Receive Packet Length",
    +              "offset": 220,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "PKT_LNGTH": {
    +                    "description": "The remaining number of bytes to be read from the currently selected endpoint's buffer. When this field decrements to 0, the RxENDPKT bit will be set in USBDevIntSt.",
    +                    "offset": 0,
    +                    "size": 10
    +                  },
    +                  "DV": {
    +                    "description": "Data valid. This bit is useful for isochronous endpoints. Non-isochronous endpoints do not raise an interrupt when an erroneous data packet is received. But invalid data packet can be produced with a bus reset. For isochronous endpoints, data transfer will happen even if an erroneous packet is received. In this case DV bit will not be set for the packet.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DATA_IS_INVALID_": {
    +                            "description": "Data is invalid.",
    +                            "value": 0
    +                          },
    +                          "DATA_IS_VALID_": {
    +                            "description": "Data is valid.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PKT_RDY": {
    +                    "description": "The PKT_LNGTH field is valid and the packet is ready for reading.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from a reserved bit is not defined.",
    +                    "offset": 12,
    +                    "size": 20
    +                  }
    +                }
    +              }
    +            },
    +            "TXPLEN": {
    +              "description": "USB Transmit Packet Length",
    +              "offset": 548,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "PKT_LNGTH": {
    +                    "description": "The remaining number of bytes to be written to the selected endpoint buffer. This field is decremented by 4 by hardware after each write to USBTxData. When this field decrements to 0, the TxENDPKT bit will be set in USBDevIntSt.",
    +                    "offset": 0,
    +                    "size": 10
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 10,
    +                    "size": 22
    +                  }
    +                }
    +              }
    +            },
    +            "CTRL": {
    +              "description": "USB Control",
    +              "offset": 552,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RD_EN": {
    +                    "description": "Read mode control. Enables reading data from the OUT endpoint buffer for the endpoint specified in the LOG_ENDPOINT field using the USBRxData register. This bit is cleared by hardware when the last word of the current packet is read from USBRxData.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_": {
    +                            "description": "Disabled.",
    +                            "value": 0
    +                          },
    +                          "ENABLED_": {
    +                            "description": "Enabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "WR_EN": {
    +                    "description": "Write mode control. Enables writing data to the IN endpoint buffer for the endpoint specified in the LOG_ENDPOINT field using the USBTxData register. This bit is cleared by hardware when the number of bytes in USBTxLen have been sent.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_": {
    +                            "description": "Disabled.",
    +                            "value": 0
    +                          },
    +                          "ENABLED_": {
    +                            "description": "Enabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LOG_ENDPOINT": {
    +                    "description": "Logical Endpoint number.",
    +                    "offset": 2,
    +                    "size": 4
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 6,
    +                    "size": 26
    +                  }
    +                }
    +              }
    +            },
    +            "DEVINTPRI": {
    +              "description": "USB Device Interrupt Priority",
    +              "offset": 556,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "FRAME": {
    +                    "description": "Frame interrupt routing",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "LP": {
    +                            "description": "FRAME interrupt is routed to USB_INT_REQ_LP.",
    +                            "value": 0
    +                          },
    +                          "HP": {
    +                            "description": "FRAME interrupt is routed to USB_INT_REQ_HP.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EP_FAST": {
    +                    "description": "Fast endpoint interrupt routing",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "LP": {
    +                            "description": "EP_FAST interrupt is routed to USB_INT_REQ_LP.",
    +                            "value": 0
    +                          },
    +                          "HP": {
    +                            "description": "EP_FAST interrupt is routed to USB_INT_REQ_HP.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 2,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "EPINTST": {
    +              "description": "USB Endpoint Interrupt Status",
    +              "offset": 560,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "EPST0": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPST1": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EPST2": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EPST3": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPST4": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EPST5": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "EPST6": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EPST7": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EPST8": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EPST9": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EPST10": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EPST11": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "EPST12": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "EPST13": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EPST14": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EPST15": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EPST16": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EPST17": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPST18": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "EPST19": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "EPST20": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPST21": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPST22": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "EPST23": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "EPST24": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "EPST25": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "EPST26": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "EPST27": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "EPST28": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "EPST29": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "EPST30": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPST31": {
    +                    "description": "1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EPINTEN": {
    +              "description": "USB Endpoint Interrupt Enable",
    +              "offset": 564,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPEN0": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPEN1": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EPEN2": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EPEN3": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPEN4": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EPEN5": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "EPEN6": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EPEN7": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EPEN8": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EPEN9": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EPEN10": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EPEN11": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "EPEN12": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "EPEN13": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EPEN14": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EPEN15": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EPEN16": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EPEN17": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPEN18": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "EPEN19": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "EPEN20": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPEN21": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPEN22": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "EPEN23": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "EPEN24": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "EPEN25": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "EPEN26": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "EPEN27": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "EPEN28": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "EPEN29": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "EPEN30": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPEN31": {
    +                    "description": "0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EPINTCLR": {
    +              "description": "USB Endpoint Interrupt Clear",
    +              "offset": 568,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "EPCLR0": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPCLR1": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EPCLR2": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EPCLR3": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPCLR4": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EPCLR5": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "EPCLR6": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EPCLR7": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EPCLR8": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EPCLR9": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EPCLR10": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EPCLR11": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "EPCLR12": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "EPCLR13": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EPCLR14": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EPCLR15": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EPCLR16": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EPCLR17": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPCLR18": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "EPCLR19": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "EPCLR20": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPCLR21": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPCLR22": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "EPCLR23": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "EPCLR24": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "EPCLR25": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "EPCLR26": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "EPCLR27": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "EPCLR28": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "EPCLR29": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "EPCLR30": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPCLR31": {
    +                    "description": "0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EPINTSET": {
    +              "description": "USB Endpoint Interrupt Set",
    +              "offset": 572,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "EPSET0": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPSET1": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EPSET2": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EPSET3": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPSET4": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EPSET5": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "EPSET6": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EPSET7": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EPSET8": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EPSET9": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EPSET10": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EPSET11": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "EPSET12": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "EPSET13": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EPSET14": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EPSET15": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EPSET16": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EPSET17": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPSET18": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "EPSET19": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "EPSET20": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPSET21": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPSET22": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "EPSET23": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "EPSET24": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "EPSET25": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "EPSET26": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "EPSET27": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "EPSET28": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "EPSET29": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "EPSET30": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPSET31": {
    +                    "description": "0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EPINTPRI": {
    +              "description": "USB Endpoint Priority",
    +              "offset": 576,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "EPPRI0": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPPRI1": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EPPRI2": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EPPRI3": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPPRI4": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EPPRI5": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "EPPRI6": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EPPRI7": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EPPRI8": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EPPRI9": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EPPRI10": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EPPRI11": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "EPPRI12": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "EPPRI13": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EPPRI14": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EPPRI15": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EPPRI16": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EPPRI17": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPPRI18": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "EPPRI19": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "EPPRI20": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPPRI21": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPPRI22": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "EPPRI23": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "EPPRI24": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "EPPRI25": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "EPPRI26": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "EPPRI27": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "EPPRI28": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "EPPRI29": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "EPPRI30": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPPRI31": {
    +                    "description": "0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "REEP": {
    +              "description": "USB Realize Endpoint",
    +              "offset": 580,
    +              "size": 32,
    +              "reset_value": 3,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPR0": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPR1": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EPR2": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EPR3": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPR4": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EPR5": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "EPR6": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EPR7": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EPR8": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EPR9": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EPR10": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EPR11": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "EPR12": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "EPR13": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EPR14": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EPR15": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EPR16": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EPR17": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPR18": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "EPR19": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "EPR20": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPR21": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPR22": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "EPR23": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "EPR24": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "EPR25": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "EPR26": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "EPR27": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "EPR28": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "EPR29": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "EPR30": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPR31": {
    +                    "description": "0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EPIND": {
    +              "description": "USB Endpoint Index",
    +              "offset": 584,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "PHY_EP": {
    +                    "description": "Physical endpoint number (0-31)",
    +                    "offset": 0,
    +                    "size": 5
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 5,
    +                    "size": 27
    +                  }
    +                }
    +              }
    +            },
    +            "MAXPSIZE": {
    +              "description": "USB MaxPacketSize",
    +              "offset": 588,
    +              "size": 32,
    +              "reset_value": 8,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPS": {
    +                    "description": "The maximum packet size value.",
    +                    "offset": 0,
    +                    "size": 10
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 10,
    +                    "size": 22
    +                  }
    +                }
    +              }
    +            },
    +            "DMARST": {
    +              "description": "USB DMA Request Status",
    +              "offset": 592,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "EPRST0": {
    +                    "description": "Control endpoint OUT (DMA cannot be enabled for this endpoint and EP0 bit must be 0).",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPRST1": {
    +                    "description": "Control endpoint IN (DMA cannot be enabled for this endpoint and EP1 bit must be 0).",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EPRST2": {
    +                    "description": "Endpoint xx (2 <=  xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EPRST3": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPRST4": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EPRST5": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "EPRST6": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EPRST7": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EPRST8": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EPRST9": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EPRST10": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EPRST11": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "EPRST12": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "EPRST13": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EPRST14": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EPRST15": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EPRST16": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EPRST17": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPRST18": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "EPRST19": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "EPRST20": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPRST21": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPRST22": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "EPRST23": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "EPRST24": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "EPRST25": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "EPRST26": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "EPRST27": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "EPRST28": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "EPRST29": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "EPRST30": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPRST31": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMARCLR": {
    +              "description": "USB DMA Request Clear",
    +              "offset": 596,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "EPRCLR0": {
    +                    "description": "Control endpoint OUT (DMA cannot be enabled for this endpoint and the EP0 bit must be 0).",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPRCLR1": {
    +                    "description": "Control endpoint IN (DMA cannot be enabled for this endpoint and the EP1 bit must be 0).",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EPRCLR2": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EPRCLR3": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPRCLR4": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EPRCLR5": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "EPRCLR6": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EPRCLR7": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EPRCLR8": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EPRCLR9": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EPRCLR10": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EPRCLR11": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "EPRCLR12": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "EPRCLR13": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EPRCLR14": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EPRCLR15": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EPRCLR16": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EPRCLR17": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPRCLR18": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "EPRCLR19": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "EPRCLR20": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPRCLR21": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPRCLR22": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "EPRCLR23": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "EPRCLR24": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "EPRCLR25": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "EPRCLR26": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "EPRCLR27": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "EPRCLR28": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "EPRCLR29": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "EPRCLR30": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPRCLR31": {
    +                    "description": "Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMARSET": {
    +              "description": "USB DMA Request Set",
    +              "offset": 600,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "EPRSET0": {
    +                    "description": "Control endpoint OUT (DMA cannot be enabled for this endpoint and the EP0 bit must be 0).",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPRSET1": {
    +                    "description": "Control endpoint IN (DMA cannot be enabled for this endpoint and the EP1 bit must be 0).",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EPRSET2": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EPRSET3": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPRSET4": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EPRSET5": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "EPRSET6": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EPRSET7": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EPRSET8": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EPRSET9": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EPRSET10": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EPRSET11": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "EPRSET12": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "EPRSET13": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EPRSET14": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EPRSET15": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EPRSET16": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EPRSET17": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPRSET18": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "EPRSET19": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "EPRSET20": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPRSET21": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPRSET22": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "EPRSET23": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "EPRSET24": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "EPRSET25": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "EPRSET26": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "EPRSET27": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "EPRSET28": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "EPRSET29": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "EPRSET30": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPRSET31": {
    +                    "description": "Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "UDCAH": {
    +              "description": "USB UDCA Head",
    +              "offset": 640,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written. The UDCA is aligned to 128-byte boundaries.",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "UDCA_ADDR": {
    +                    "description": "Start address of the UDCA.",
    +                    "offset": 7,
    +                    "size": 25
    +                  }
    +                }
    +              }
    +            },
    +            "EPDMAST": {
    +              "description": "USB Endpoint DMA Status",
    +              "offset": 644,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "EP_DMA_ST0": {
    +                    "description": "Control endpoint OUT (DMA cannot be enabled for this endpoint and the EP0_DMA_ENABLE bit must be 0).",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST1": {
    +                    "description": "Control endpoint IN (DMA cannot be enabled for this endpoint and the EP1_DMA_ENABLE bit must be 0).",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST2": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST3": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST4": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST5": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST6": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST7": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST8": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST9": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST10": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST11": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST12": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST13": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST14": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST15": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST16": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST17": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST18": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST19": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST20": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST21": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST22": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST23": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST24": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST25": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST26": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST27": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST28": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST29": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST30": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_ST31": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EPDMAEN": {
    +              "description": "USB Endpoint DMA Enable",
    +              "offset": 648,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "EP_DMA_EN0": {
    +                    "description": "Control endpoint OUT (DMA cannot be enabled for this endpoint and the EP0_DMA_ENABLE bit value must be 0).",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_EN1": {
    +                    "description": "Control endpoint IN (DMA cannot be enabled for this endpoint and the EP1_DMA_ENABLE bit must be 0).",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_EN": {
    +                    "description": "Endpoint xx(2 <= xx <= 31) DMA enable control bit. 0 = No effect. 1 = Enable the DMA operation for endpoint EPxx.",
    +                    "offset": 2,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "EPDMADIS": {
    +              "description": "USB Endpoint DMA Disable",
    +              "offset": 652,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "EP_DMA_DIS0": {
    +                    "description": "Control endpoint OUT (DMA cannot be enabled for this endpoint and the EP0_DMA_DISABLE bit value must be 0).",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS1": {
    +                    "description": "Control endpoint IN (DMA cannot be enabled for this endpoint and the EP1_DMA_DISABLE bit value must be 0).",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS2": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS3": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS4": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS5": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS6": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS7": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS8": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS9": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS10": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS11": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS12": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS13": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS14": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS15": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS16": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS17": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS18": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS19": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS20": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS21": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS22": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS23": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS24": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS25": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS26": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS27": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS28": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS29": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS30": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EP_DMA_DIS31": {
    +                    "description": "Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMAINTST": {
    +              "description": "USB DMA Interrupt Status",
    +              "offset": 656,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "EOT": {
    +                    "description": "End of Transfer Interrupt bit.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ALL_BITS_IN_THE_USBE": {
    +                            "description": "All bits in the USBEoTIntSt register are 0.",
    +                            "value": 0
    +                          },
    +                          "AT_LEAST_ONE_BIT_IN_": {
    +                            "description": "At least one bit in the USBEoTIntSt is set.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "NDDR": {
    +                    "description": "New DD Request Interrupt bit.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ALL_BITS_IN_THE_USBN": {
    +                            "description": "All bits in the USBNDDRIntSt register are 0.",
    +                            "value": 0
    +                          },
    +                          "AT_LEAST_ONE_BIT_IN_": {
    +                            "description": "At least one bit in the USBNDDRIntSt is set.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERR": {
    +                    "description": "System Error Interrupt bit.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ALL_BITS_IN_THE_USBS": {
    +                            "description": "All bits in the USBSysErrIntSt register are 0.",
    +                            "value": 0
    +                          },
    +                          "AT_LEAST_ONE_BIT_IN_": {
    +                            "description": "At least one bit in the USBSysErrIntSt is set.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from a reserved bit is not defined.",
    +                    "offset": 3,
    +                    "size": 29
    +                  }
    +                }
    +              }
    +            },
    +            "DMAINTEN": {
    +              "description": "USB DMA Interrupt Enable",
    +              "offset": 660,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EOT": {
    +                    "description": "End of Transfer Interrupt enable bit.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_": {
    +                            "description": "Disabled.",
    +                            "value": 0
    +                          },
    +                          "ENABLED_": {
    +                            "description": "Enabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "NDDR": {
    +                    "description": "New DD Request Interrupt enable bit.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_": {
    +                            "description": "Disabled.",
    +                            "value": 0
    +                          },
    +                          "ENABLED_": {
    +                            "description": "Enabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ERR": {
    +                    "description": "System Error Interrupt enable bit.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED_": {
    +                            "description": "Disabled.",
    +                            "value": 0
    +                          },
    +                          "ENABLED_": {
    +                            "description": "Enabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 3,
    +                    "size": 29
    +                  }
    +                }
    +              }
    +            },
    +            "EOTINTST": {
    +              "description": "USB End of Transfer Interrupt Status",
    +              "offset": 672,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "EPTXINTST0": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST1": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST2": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST3": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST4": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST5": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST6": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST7": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST8": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST9": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST10": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST11": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST12": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST13": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST14": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST15": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST16": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST17": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST18": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST19": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST20": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST21": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST22": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST23": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST24": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST25": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST26": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST27": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST28": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST29": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST30": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPTXINTST31": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EOTINTCLR": {
    +              "description": "USB End of Transfer Interrupt Clear",
    +              "offset": 676,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "EPTXINTCLR0": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR1": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR2": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR3": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR4": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR5": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR6": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR7": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR8": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR9": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR10": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR11": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR12": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR13": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR14": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR15": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR16": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR17": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR18": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR19": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR20": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR21": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR22": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR23": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR24": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR25": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR26": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR27": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR28": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR29": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR30": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPTXINTCLR31": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EOTINTSET": {
    +              "description": "USB End of Transfer Interrupt Set",
    +              "offset": 680,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "EPTXINTSET0": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET1": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET2": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET3": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET4": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET5": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET6": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET7": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET8": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET9": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET10": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET11": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET12": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET13": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET14": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET15": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET16": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET17": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET18": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET19": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET20": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET21": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET22": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET23": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET24": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET25": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET26": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET27": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET28": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET29": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET30": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPTXINTSET31": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "NDDRINTST": {
    +              "description": "USB New DD Request Interrupt Status",
    +              "offset": 684,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "EPNDDINTST0": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST1": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST2": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST3": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST4": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST5": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST6": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST7": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST8": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST9": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST10": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST11": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST12": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST13": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST14": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST15": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST16": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST17": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST18": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST19": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST20": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST21": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST22": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST23": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST24": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST25": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST26": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST27": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST28": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST29": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST30": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTST31": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "NDDRINTCLR": {
    +              "description": "USB New DD Request Interrupt Clear",
    +              "offset": 688,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "EPNDDINTCLR0": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR1": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR2": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR3": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR4": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR5": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR6": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR7": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR8": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR9": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR10": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR11": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR12": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR13": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR14": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR15": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR16": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR17": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR18": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR19": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR20": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR21": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR22": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR23": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR24": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR25": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR26": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR27": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR28": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR29": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR30": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTCLR31": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "NDDRINTSET": {
    +              "description": "USB New DD Request Interrupt Set",
    +              "offset": 692,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "EPNDDINTSET0": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET1": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET2": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET3": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET4": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET5": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET6": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET7": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET8": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET9": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET10": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET11": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET12": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET13": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET14": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET15": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET16": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET17": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET18": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET19": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET20": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET21": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET22": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET23": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET24": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET25": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET26": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET27": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET28": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET29": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET30": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPNDDINTSET31": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SYSERRINTST": {
    +              "description": "USB System Error Interrupt Status",
    +              "offset": 696,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "EPERRINTST0": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST1": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST2": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST3": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST4": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST5": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST6": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST7": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST8": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST9": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST10": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST11": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST12": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST13": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST14": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST15": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST16": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST17": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST18": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST19": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST20": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST21": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST22": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST23": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST24": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST25": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST26": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST27": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST28": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST29": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST30": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPERRINTST31": {
    +                    "description": "Endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SYSERRINTCLR": {
    +              "description": "USB System Error Interrupt Clear",
    +              "offset": 700,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "EPERRINTCLR0": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR1": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR2": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR3": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR4": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR5": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR6": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR7": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR8": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR9": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR10": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR11": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR12": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR13": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR14": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR15": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR16": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR17": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR18": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR19": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR20": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR21": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR22": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR23": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR24": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR25": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR26": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR27": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR28": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR29": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR30": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPERRINTCLR31": {
    +                    "description": "Clear endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SYSERRINTSET": {
    +              "description": "USB System Error Interrupt Set",
    +              "offset": 704,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "EPERRINTSET0": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET1": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET2": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET3": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET4": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET5": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET6": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET7": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET8": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET9": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET10": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET11": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET12": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET13": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET14": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET15": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET16": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET17": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET18": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET19": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET20": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET21": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET22": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET23": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET24": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET25": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET26": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET27": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET28": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET29": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET30": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPERRINTSET31": {
    +                    "description": "Set endpoint xx (2 <= xx  <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "I2C_RX": {
    +              "description": "I2C Receive",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RXDATA": {
    +                    "description": "Receive data.",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "I2C_WO": {
    +              "description": "I2C Transmit",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TXDATA": {
    +                    "description": "Transmit data.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "START": {
    +                    "description": "When 1, issue a START condition before transmitting this byte.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "STOP": {
    +                    "description": "When 1, issue a STOP condition after transmitting this byte.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 10,
    +                    "size": 22
    +                  }
    +                }
    +              }
    +            },
    +            "I2C_STS": {
    +              "description": "I2C Status",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 2560,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TDI": {
    +                    "description": "Transaction Done Interrupt. This flag is set if a transaction completes successfully. It is cleared by writing a one to bit 0 of the status register. It is unaffected by slave transactions.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NOT_COMPLETE": {
    +                            "description": "Transaction has not completed.",
    +                            "value": 0
    +                          },
    +                          "COMPLETE": {
    +                            "description": "Transaction completed.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AFI": {
    +                    "description": "Arbitration Failure Interrupt. When transmitting, if the SDA is low when SDAOUT is high, then this I2C has lost the arbitration to another device on the bus. The Arbitration Failure bit is set when this happens. It is cleared by writing a one to bit 1 of the status register.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NO_ARBITRATION_FAILU": {
    +                            "description": "No arbitration failure on last transmission.",
    +                            "value": 0
    +                          },
    +                          "ARBITRATION_FAILURE_": {
    +                            "description": "Arbitration failure occurred on last transmission.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "NAI": {
    +                    "description": "No Acknowledge Interrupt. After every byte of data is sent, the transmitter expects an acknowledge from the receiver. This bit is set if the acknowledge is not received. It is cleared when a byte is written to the master TX FIFO.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ACKNOWLEDGE_RCVD": {
    +                            "description": "Last transmission received an acknowledge.",
    +                            "value": 0
    +                          },
    +                          "NO_ACKNOWLEDGE_RCVD": {
    +                            "description": "Last transmission did not receive an acknowledge.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DRMI": {
    +                    "description": "Master Data Request Interrupt. Once a transmission is started, the transmitter must have data to transmit as long as it isn't followed by a stop condition or it will hold SCL low until more data is available. The Master Data Request bit is set when the master transmitter is data-starved. If the master TX FIFO is empty and the last byte did not have a STOP condition flag, then SCL is held low until the CPU writes another byte to transmit. This bit is cleared when a byte is written to the master TX FIFO.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "BUSY": {
    +                            "description": "Master transmitter does not need data.",
    +                            "value": 0
    +                          },
    +                          "NEED_DATA": {
    +                            "description": "Master transmitter needs data.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DRSI": {
    +                    "description": "Slave Data Request Interrupt. Once a transmission is started, the transmitter must have data to transmit as long as it isn't followed by a STOP condition or it will hold SCL low until more data is available. The Slave Data Request bit is set when the slave transmitter is data-starved. If the slave TX FIFO is empty and the last byte transmitted was acknowledged, then SCL is held low until the CPU writes another byte to transmit. This bit is cleared when a byte is written to the slave Tx FIFO.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "BUSY": {
    +                            "description": "Slave transmitter does not need data.",
    +                            "value": 0
    +                          },
    +                          "NEED_DATA": {
    +                            "description": "Slave transmitter needs data.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "Active": {
    +                    "description": "Indicates whether the bus is busy. This bit is set when a START condition has been seen. It is cleared when a STOP condition is seen..",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "SCL": {
    +                    "description": "The current value of the SCL signal.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SDA": {
    +                    "description": "The current value of the SDA signal.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RFF": {
    +                    "description": "Receive FIFO Full (RFF). This bit is set when the RX FIFO is full and cannot accept any more data. It is cleared when the RX FIFO is not full. If a byte arrives when the Receive FIFO is full, the SCL is held low until the CPU reads the RX FIFO and makes room for it.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RX_FIFO_IS_NOT_FULL": {
    +                            "description": "RX FIFO is not full",
    +                            "value": 0
    +                          },
    +                          "RX_FIFO_IS_FULL": {
    +                            "description": "RX FIFO is full",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RFE": {
    +                    "description": "Receive FIFO Empty. RFE is set when the RX FIFO is empty and is cleared when the RX FIFO contains valid data.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DATA": {
    +                            "description": "RX FIFO contains data.",
    +                            "value": 0
    +                          },
    +                          "EMPTY": {
    +                            "description": "RX FIFO is empty",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TFF": {
    +                    "description": "Transmit FIFO Full. TFF is set when the TX FIFO is full and is cleared when the TX FIFO is not full.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TX_FIFO_IS_NOT_FULL_": {
    +                            "description": "TX FIFO is not full.",
    +                            "value": 0
    +                          },
    +                          "TX_FIFO_IS_FULL": {
    +                            "description": "TX FIFO is full",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TFE": {
    +                    "description": "Transmit FIFO Empty. TFE is set when the TX FIFO is empty and is cleared when the TX FIFO contains valid data.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "VALID_DATA": {
    +                            "description": "TX FIFO contains valid data.",
    +                            "value": 0
    +                          },
    +                          "EMPTY": {
    +                            "description": "TX FIFO is empty",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 12,
    +                    "size": 20
    +                  }
    +                }
    +              }
    +            },
    +            "I2C_CTL": {
    +              "description": "I2C Control",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TDIE": {
    +                    "description": "Transmit Done Interrupt Enable. This enables the TDI interrupt signalling that this I2C issued a STOP condition.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_THE_TDI_INTE": {
    +                            "description": "Disable the TDI interrupt.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_THE_TDI_INTER": {
    +                            "description": "Enable the TDI interrupt.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AFIE": {
    +                    "description": "Transmitter Arbitration Failure Interrupt Enable. This enables the AFI interrupt which is asserted during transmission when trying to set SDA high, but the bus is driven low by another device.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_THE_AFI_": {
    +                            "description": "Disable the AFI.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_THE_AFI_": {
    +                            "description": "Enable the AFI.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "NAIE": {
    +                    "description": "Transmitter No Acknowledge Interrupt Enable. This enables the NAI interrupt signalling that transmitted byte was not acknowledged.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_THE_NAI_": {
    +                            "description": "Disable the NAI.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_THE_NAI_": {
    +                            "description": "Enable the NAI.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DRMIE": {
    +                    "description": "Master Transmitter Data Request Interrupt Enable. This enables the DRMI interrupt which signals that the master transmitter has run out of data, has not issued a STOP, and is holding the SCL line low.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_THE_DRMI_INT": {
    +                            "description": "Disable the DRMI interrupt.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_THE_DRMI_INTE": {
    +                            "description": "Enable the DRMI interrupt.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DRSIE": {
    +                    "description": "Slave Transmitter Data Request Interrupt Enable. This enables the DRSI interrupt which signals that the slave transmitter has run out of data and the last byte was acknowledged, so the SCL line is being held low.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_THE_DRSI_INT": {
    +                            "description": "Disable the DRSI interrupt.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_THE_DRSI_INTE": {
    +                            "description": "Enable the DRSI interrupt.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "REFIE": {
    +                    "description": "Receive FIFO Full Interrupt Enable. This enables the Receive FIFO Full interrupt to indicate that the receive FIFO cannot accept any more data.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_THE_RFFI_": {
    +                            "description": "Disable the RFFI.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_THE_RFFI_": {
    +                            "description": "Enable the RFFI.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RFDAIE": {
    +                    "description": "Receive Data Available Interrupt Enable. This enables the DAI interrupt to indicate that data is available in the receive FIFO (i.e. not empty).",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_THE_DAI_": {
    +                            "description": "Disable the DAI.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_THE_DAI_": {
    +                            "description": "Enable the DAI.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TFFIE": {
    +                    "description": "Transmit FIFO Not Full Interrupt Enable. This enables the Transmit FIFO Not Full interrupt to indicate that the more data can be written to the transmit FIFO. Note that this is not full. It is intended help the CPU to write to the I2C block only when there is room in the FIFO and do this without polling the status register.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_THE_TFFI_": {
    +                            "description": "Disable the TFFI.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_THE_TFFI_": {
    +                            "description": "Enable the TFFI.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SRST": {
    +                    "description": "Soft reset. This is only needed in unusual circumstances. If a device issues a start condition without issuing a stop condition. A system timer may be used to reset the I2C if the bus remains busy longer than the time-out period. On a soft reset, the Tx and Rx FIFOs are flushed, I2C_STS register is cleared, and all internal state machines are reset to appear idle. The I2C_CLKHI, I2C_CLKLO and I2C_CTL (except Soft Reset Bit) are NOT modified by a soft reset.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NO_RESET": {
    +                            "description": "No reset.",
    +                            "value": 0
    +                          },
    +                          "RESET": {
    +                            "description": "Reset the I2C to idle state. Self clearing.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 9,
    +                    "size": 23
    +                  }
    +                }
    +              }
    +            },
    +            "I2C_CLKHI": {
    +              "description": "I2C Clock High",
    +              "offset": 780,
    +              "size": 32,
    +              "reset_value": 185,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CDHI": {
    +                    "description": "Clock divisor high. This value is the number of 48 MHz clocks the serial clock (SCL) will be high.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "I2C_CLKLO": {
    +              "description": "I2C Clock Low",
    +              "offset": 784,
    +              "size": 32,
    +              "reset_value": 185,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "CDLO": {
    +                    "description": "Clock divisor low. This value is the number of 48 MHz clocks the serial clock (SCL) will be low.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "USBCLKCTRL": {
    +              "description": "USB Clock Control",
    +              "offset": 4084,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 5,
    +                    "size": 27
    +                  },
    +                  "DEV_CLK_EN": {
    +                    "description": "Device clock enable.   Enables the usbclk input to the device controller",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PORTSEL_CLK_EN": {
    +                    "description": "Port select register clock enable.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "AHB_CLK_EN": {
    +                    "description": "AHB clock enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTGCLKCTRL": {
    +              "description": "OTG clock controller",
    +              "offset": 4084,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HOST_CLK_EN": {
    +                    "description": "Host clock enable",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_THE_HOST_CLO": {
    +                            "description": "Disable the Host clock.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_THE_HOST_CLOC": {
    +                            "description": "Enable the Host clock.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DEV_CLK_EN": {
    +                    "description": "Device clock enable",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_THE_DEVICE_C": {
    +                            "description": "Disable the Device clock.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_THE_DEVICE_CL": {
    +                            "description": "Enable the Device clock.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "I2C_CLK_EN": {
    +                    "description": "I2C clock enable",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_THE_I2C_CLOC": {
    +                            "description": "Disable the I2C clock.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_THE_I2C_CLOCK": {
    +                            "description": "Enable the I2C clock.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OTG_CLK_EN": {
    +                    "description": "OTG clock enable. In device-only applications, this bit enables access to the PORTSEL register.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_THE_OTG_CLOC": {
    +                            "description": "Disable the OTG clock.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_THE_OTG_CLOCK": {
    +                            "description": "Enable the OTG clock.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AHB_CLK_EN": {
    +                    "description": "AHB master clock enable",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE_THE_AHB_CLOC": {
    +                            "description": "Disable the AHB clock.",
    +                            "value": 0
    +                          },
    +                          "ENABLE_THE_AHB_CLOCK": {
    +                            "description": "Enable the AHB clock.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 5,
    +                    "size": 27
    +                  }
    +                }
    +              }
    +            },
    +            "USBCLKST": {
    +              "description": "USB Clock Status",
    +              "offset": 4088,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from a reserved bit is not defined.",
    +                    "offset": 5,
    +                    "size": 27
    +                  },
    +                  "DEV_CLK_ON": {
    +                    "description": "Device clock on. The usbclk input to the device controller is active\t.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PORTSEL_CLK_ON": {
    +                    "description": "Port select register clock on.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "AHB_CLK_ON": {
    +                    "description": "AHB clock on.",
    +                    "offset": 4,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OTGCLKST": {
    +              "description": "OTG clock status",
    +              "offset": 4088,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "HOST_CLK_ON": {
    +                    "description": "Host clock status.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "HOST_CLOCK_IS_NOT_AV": {
    +                            "description": "Host clock is not available.",
    +                            "value": 0
    +                          },
    +                          "HOST_CLOCK_IS_AVAILA": {
    +                            "description": "Host clock is available.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DEV_CLK_ON": {
    +                    "description": "Device clock status.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DEVICE_CLOCK_IS_NOT_": {
    +                            "description": "Device clock is not available.",
    +                            "value": 0
    +                          },
    +                          "DEVICE_CLOCK_IS_AVAI": {
    +                            "description": "Device clock is available.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "I2C_CLK_ON": {
    +                    "description": "I2C clock status.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "I2C_CLOCK_IS_NOT_AVA": {
    +                            "description": "I2C clock is not available.",
    +                            "value": 0
    +                          },
    +                          "I2C_CLOCK_IS_AVAILAB": {
    +                            "description": "I2C clock is available.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OTG_CLK_ON": {
    +                    "description": "OTG clock status.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "OTG_CLOCK_IS_NOT_AVA": {
    +                            "description": "OTG clock is not available.",
    +                            "value": 0
    +                          },
    +                          "OTG_CLOCK_IS_AVAILAB": {
    +                            "description": "OTG clock is available.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AHB_CLK_ON": {
    +                    "description": "AHB master clock status.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "AHB_CLOCK_IS_NOT_AVA": {
    +                            "description": "AHB clock is not available.",
    +                            "value": 0
    +                          },
    +                          "AHB_CLOCK_IS_AVAILAB": {
    +                            "description": "AHB clock is available.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 5,
    +                    "size": 27
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "GPDMA": {
    +        "description": "General purpose DMA controller",
    +        "children": {
    +          "registers": {
    +            "INTSTAT": {
    +              "description": "DMA Interrupt Status Register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INTSTAT0": {
    +                    "description": "Status of DMA channel interrupts after masking. Each bit represents one channel: 0 - the corresponding channel has no active interrupt request. 1 - the corresponding channel does have an active interrupt request.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "INTSTAT1": {
    +                    "description": "Status of DMA channel interrupts after masking. Each bit represents one channel: 0 - the corresponding channel has no active interrupt request. 1 - the corresponding channel does have an active interrupt request.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "INTSTAT2": {
    +                    "description": "Status of DMA channel interrupts after masking. Each bit represents one channel: 0 - the corresponding channel has no active interrupt request. 1 - the corresponding channel does have an active interrupt request.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "INTSTAT3": {
    +                    "description": "Status of DMA channel interrupts after masking. Each bit represents one channel: 0 - the corresponding channel has no active interrupt request. 1 - the corresponding channel does have an active interrupt request.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "INTSTAT4": {
    +                    "description": "Status of DMA channel interrupts after masking. Each bit represents one channel: 0 - the corresponding channel has no active interrupt request. 1 - the corresponding channel does have an active interrupt request.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INTSTAT5": {
    +                    "description": "Status of DMA channel interrupts after masking. Each bit represents one channel: 0 - the corresponding channel has no active interrupt request. 1 - the corresponding channel does have an active interrupt request.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INTSTAT6": {
    +                    "description": "Status of DMA channel interrupts after masking. Each bit represents one channel: 0 - the corresponding channel has no active interrupt request. 1 - the corresponding channel does have an active interrupt request.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "INTSTAT7": {
    +                    "description": "Status of DMA channel interrupts after masking. Each bit represents one channel: 0 - the corresponding channel has no active interrupt request. 1 - the corresponding channel does have an active interrupt request.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from a reserved bit is not defined.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "INTTCSTAT": {
    +              "description": "DMA Interrupt Terminal Count Request Status Register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INTTCSTAT0": {
    +                    "description": "Terminal count interrupt request status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "INTTCSTAT1": {
    +                    "description": "Terminal count interrupt request status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "INTTCSTAT2": {
    +                    "description": "Terminal count interrupt request status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "INTTCSTAT3": {
    +                    "description": "Terminal count interrupt request status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "INTTCSTAT4": {
    +                    "description": "Terminal count interrupt request status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INTTCSTAT5": {
    +                    "description": "Terminal count interrupt request status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INTTCSTAT6": {
    +                    "description": "Terminal count interrupt request status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "INTTCSTAT7": {
    +                    "description": "Terminal count interrupt request status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from a reserved bit is not defined.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "INTTCCLEAR": {
    +              "description": "DMA Interrupt Terminal Count Request Clear Register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "INTTCCLEAR0": {
    +                    "description": "Allows clearing the Terminal count interrupt request (IntTCStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel terminal count interrupt.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "INTTCCLEAR1": {
    +                    "description": "Allows clearing the Terminal count interrupt request (IntTCStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel terminal count interrupt.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "INTTCCLEAR2": {
    +                    "description": "Allows clearing the Terminal count interrupt request (IntTCStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel terminal count interrupt.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "INTTCCLEAR3": {
    +                    "description": "Allows clearing the Terminal count interrupt request (IntTCStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel terminal count interrupt.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "INTTCCLEAR4": {
    +                    "description": "Allows clearing the Terminal count interrupt request (IntTCStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel terminal count interrupt.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INTTCCLEAR5": {
    +                    "description": "Allows clearing the Terminal count interrupt request (IntTCStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel terminal count interrupt.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INTTCCLEAR6": {
    +                    "description": "Allows clearing the Terminal count interrupt request (IntTCStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel terminal count interrupt.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "INTTCCLEAR7": {
    +                    "description": "Allows clearing the Terminal count interrupt request (IntTCStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel terminal count interrupt.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "INTERRSTAT": {
    +              "description": "DMA Interrupt Error Status Register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INTERRSTAT0": {
    +                    "description": "Interrupt error status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "INTERRSTAT1": {
    +                    "description": "Interrupt error status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "INTERRSTAT2": {
    +                    "description": "Interrupt error status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "INTERRSTAT3": {
    +                    "description": "Interrupt error status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "INTERRSTAT4": {
    +                    "description": "Interrupt error status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INTERRSTAT5": {
    +                    "description": "Interrupt error status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INTERRSTAT6": {
    +                    "description": "Interrupt error status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "INTERRSTAT7": {
    +                    "description": "Interrupt error status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from a reserved bit is not defined.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "INTERRCLR": {
    +              "description": "DMA Interrupt Error Clear Register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "INTERRCLR0": {
    +                    "description": "Writing a 1 clears the error interrupt request (IntErrStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel error interrupt.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "INTERRCLR1": {
    +                    "description": "Writing a 1 clears the error interrupt request (IntErrStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel error interrupt.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "INTERRCLR2": {
    +                    "description": "Writing a 1 clears the error interrupt request (IntErrStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel error interrupt.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "INTERRCLR3": {
    +                    "description": "Writing a 1 clears the error interrupt request (IntErrStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel error interrupt.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "INTERRCLR4": {
    +                    "description": "Writing a 1 clears the error interrupt request (IntErrStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel error interrupt.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INTERRCLR5": {
    +                    "description": "Writing a 1 clears the error interrupt request (IntErrStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel error interrupt.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INTERRCLR6": {
    +                    "description": "Writing a 1 clears the error interrupt request (IntErrStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel error interrupt.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "INTERRCLR7": {
    +                    "description": "Writing a 1 clears the error interrupt request (IntErrStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel error interrupt.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "RAWINTTCSTAT": {
    +              "description": "DMA Raw Interrupt Terminal Count Status Register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RAWINTTCSTAT0": {
    +                    "description": "Status of the terminal count interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RAWINTTCSTAT1": {
    +                    "description": "Status of the terminal count interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RAWINTTCSTAT2": {
    +                    "description": "Status of the terminal count interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RAWINTTCSTAT3": {
    +                    "description": "Status of the terminal count interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RAWINTTCSTAT4": {
    +                    "description": "Status of the terminal count interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RAWINTTCSTAT5": {
    +                    "description": "Status of the terminal count interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RAWINTTCSTAT6": {
    +                    "description": "Status of the terminal count interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RAWINTTCSTAT7": {
    +                    "description": "Status of the terminal count interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from a reserved bit is not defined.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "RAWINTERRSTAT": {
    +              "description": "DMA Raw Error Interrupt Status Register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RAWINTERRSTAT0": {
    +                    "description": "Status of the error interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RAWINTERRSTAT1": {
    +                    "description": "Status of the error interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RAWINTERRSTAT2": {
    +                    "description": "Status of the error interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RAWINTERRSTAT3": {
    +                    "description": "Status of the error interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RAWINTERRSTAT4": {
    +                    "description": "Status of the error interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RAWINTERRSTAT5": {
    +                    "description": "Status of the error interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RAWINTERRSTAT6": {
    +                    "description": "Status of the error interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RAWINTERRSTAT7": {
    +                    "description": "Status of the error interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from a reserved bit is not defined.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "ENBLDCHNS": {
    +              "description": "DMA Enabled Channel Register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ENABLEDCHANNELS0": {
    +                    "description": "Enable status for DMA channels. Each bit represents one channel: 0 - DMA channel is disabled. 1 - DMA channel is enabled.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ENABLEDCHANNELS1": {
    +                    "description": "Enable status for DMA channels. Each bit represents one channel: 0 - DMA channel is disabled. 1 - DMA channel is enabled.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ENABLEDCHANNELS2": {
    +                    "description": "Enable status for DMA channels. Each bit represents one channel: 0 - DMA channel is disabled. 1 - DMA channel is enabled.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ENABLEDCHANNELS3": {
    +                    "description": "Enable status for DMA channels. Each bit represents one channel: 0 - DMA channel is disabled. 1 - DMA channel is enabled.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ENABLEDCHANNELS4": {
    +                    "description": "Enable status for DMA channels. Each bit represents one channel: 0 - DMA channel is disabled. 1 - DMA channel is enabled.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ENABLEDCHANNELS5": {
    +                    "description": "Enable status for DMA channels. Each bit represents one channel: 0 - DMA channel is disabled. 1 - DMA channel is enabled.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ENABLEDCHANNELS6": {
    +                    "description": "Enable status for DMA channels. Each bit represents one channel: 0 - DMA channel is disabled. 1 - DMA channel is enabled.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ENABLEDCHANNELS7": {
    +                    "description": "Enable status for DMA channels. Each bit represents one channel: 0 - DMA channel is disabled. 1 - DMA channel is enabled.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from a reserved bit is not defined.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "SOFTBREQ": {
    +              "description": "DMA Software Burst Request Register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SOFTBREQ0": {
    +                    "description": "Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SOFTBREQ1": {
    +                    "description": "Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SOFTBREQ2": {
    +                    "description": "Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SOFTBREQ3": {
    +                    "description": "Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SOFTBREQ4": {
    +                    "description": "Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SOFTBREQ5": {
    +                    "description": "Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "SOFTBREQ6": {
    +                    "description": "Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SOFTBREQ7": {
    +                    "description": "Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SOFTBREQ8": {
    +                    "description": "Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SOFTBREQ9": {
    +                    "description": "Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SOFTBREQ10": {
    +                    "description": "Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SOFTBREQ11": {
    +                    "description": "Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SOFTBREQ12": {
    +                    "description": "Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "SOFTBREQ13": {
    +                    "description": "Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "SOFTBREQ14": {
    +                    "description": "Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SOFTBREQ15": {
    +                    "description": "Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SOFTSREQ": {
    +              "description": "DMA Software Single Request Register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SOFTSREQ0": {
    +                    "description": "Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SOFTSREQ1": {
    +                    "description": "Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SOFTSREQ2": {
    +                    "description": "Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SOFTSREQ3": {
    +                    "description": "Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SOFTSREQ4": {
    +                    "description": "Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SOFTSREQ5": {
    +                    "description": "Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "SOFTSREQ6": {
    +                    "description": "Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SOFTSREQ7": {
    +                    "description": "Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SOFTSREQ8": {
    +                    "description": "Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SOFTSREQ9": {
    +                    "description": "Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SOFTSREQ10": {
    +                    "description": "Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SOFTSREQ11": {
    +                    "description": "Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SOFTSREQ12": {
    +                    "description": "Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "SOFTSREQ13": {
    +                    "description": "Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "SOFTSREQ14": {
    +                    "description": "Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SOFTSREQ15": {
    +                    "description": "Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read undefined. Write reserved bits as zero.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SOFTLBREQ": {
    +              "description": "DMA Software Last Burst Request Register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SOFTLBREQ0": {
    +                    "description": "Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SOFTLBREQ1": {
    +                    "description": "Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SOFTLBREQ2": {
    +                    "description": "Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SOFTLBREQ3": {
    +                    "description": "Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SOFTLBREQ4": {
    +                    "description": "Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SOFTLBREQ5": {
    +                    "description": "Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "SOFTLBREQ6": {
    +                    "description": "Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SOFTLBREQ7": {
    +                    "description": "Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SOFTLBREQ8": {
    +                    "description": "Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SOFTLBREQ9": {
    +                    "description": "Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SOFTLBREQ10": {
    +                    "description": "Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SOFTLBREQ11": {
    +                    "description": "Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SOFTLBREQ12": {
    +                    "description": "Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "SOFTLBREQ13": {
    +                    "description": "Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "SOFTLBREQ14": {
    +                    "description": "Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SOFTLBREQ15": {
    +                    "description": "Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SOFTLSREQ": {
    +              "description": "DMA Software Last Single Request Register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SOFTLSREQ0": {
    +                    "description": "Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SOFTLSREQ1": {
    +                    "description": "Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SOFTLSREQ2": {
    +                    "description": "Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SOFTLSREQ3": {
    +                    "description": "Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SOFTLSREQ4": {
    +                    "description": "Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SOFTLSREQ5": {
    +                    "description": "Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "SOFTLSREQ6": {
    +                    "description": "Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SOFTLSREQ7": {
    +                    "description": "Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SOFTLSREQ8": {
    +                    "description": "Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SOFTLSREQ9": {
    +                    "description": "Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SOFTLSREQ10": {
    +                    "description": "Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SOFTLSREQ11": {
    +                    "description": "Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SOFTLSREQ12": {
    +                    "description": "Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "SOFTLSREQ13": {
    +                    "description": "Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "SOFTLSREQ14": {
    +                    "description": "Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SOFTLSREQ15": {
    +                    "description": "Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CONFIG": {
    +              "description": "DMA Configuration Register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "E": {
    +                    "description": "DMA Controller enable: 0 = disabled (default). Disabling the DMA Controller reduces power consumption. 1 = enabled.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "M": {
    +                    "description": "AHB Master endianness configuration: 0 = little-endian mode (default). 1 = big-endian mode.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 2,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "SYNC": {
    +              "description": "DMA Synchronization Register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMACSYNC0": {
    +                    "description": "Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DMACSYNC1": {
    +                    "description": "Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DMACSYNC2": {
    +                    "description": "Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DMACSYNC3": {
    +                    "description": "Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DMACSYNC4": {
    +                    "description": "Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DMACSYNC5": {
    +                    "description": "Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "DMACSYNC6": {
    +                    "description": "Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DMACSYNC7": {
    +                    "description": "Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "DMACSYNC8": {
    +                    "description": "Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DMACSYNC9": {
    +                    "description": "Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DMACSYNC10": {
    +                    "description": "Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "DMACSYNC11": {
    +                    "description": "Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "DMACSYNC12": {
    +                    "description": "Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "DMACSYNC13": {
    +                    "description": "Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "DMACSYNC14": {
    +                    "description": "Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "DMACSYNC15": {
    +                    "description": "Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "EMAC": {
    +        "description": "Ethernet",
    +        "children": {
    +          "registers": {
    +            "MAC1": {
    +              "description": "MAC configuration register 1.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 32768,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXENABLE": {
    +                    "description": "RECEIVE ENABLE. Set this to allow receive frames to be received. Internally the MAC synchronizes this control bit to the incoming receive stream.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PARF": {
    +                    "description": "PASS ALL RECEIVE FRAMES. When enabled (set to 1), the MAC will pass all frames regardless of type (normal vs. Control). When disabled, the MAC does not pass valid Control frames.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RXFLOWCTRL": {
    +                    "description": "RX FLOW CONTROL. When enabled (set to 1), the MAC acts upon received PAUSE Flow Control frames. When disabled, received PAUSE Flow Control frames are ignored.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TXFLOWCTRL": {
    +                    "description": "TX FLOW CONTROL. When enabled (set to 1), PAUSE Flow Control frames are allowed to be transmitted. When disabled, Flow Control frames are blocked.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "LOOPBACK": {
    +                    "description": "Setting this bit will cause the MAC Transmit interface to be looped back to the MAC Receive interface. Clearing this bit results in normal operation.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "RESETTX": {
    +                    "description": "Setting this bit will put the Transmit Function logic in reset.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "RESETMCSTX": {
    +                    "description": "Setting this bit resets the MAC Control Sublayer / Transmit logic. The MCS logic implements flow control.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RESETRX": {
    +                    "description": "Setting this bit will put the Ethernet receive logic in reset.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "RESETMCSRX": {
    +                    "description": "Setting this bit resets the MAC Control Sublayer / Receive logic. The MCS logic implements flow control.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SIMRESET": {
    +                    "description": "SIMULATION RESET. Setting this bit will cause a reset to the random number generator within the Transmit Function.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SOFTRESET": {
    +                    "description": "SOFT RESET. Setting this bit will put all modules within the MAC in reset except the Host Interface.",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MAC2": {
    +              "description": "MAC configuration register 2.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FULLDUPLEX": {
    +                    "description": "When enabled (set to 1), the MAC operates in Full-Duplex mode. When disabled, the MAC operates in Half-Duplex mode.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FLC": {
    +                    "description": "FRAMELENGTH CHECKING. When enabled (set to 1), both transmit and receive frame lengths are compared to the Length/Type field. If the Length/Type field represents a length then the check is performed. Mismatches are reported in the StatusInfo word for each received frame.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HFEN": {
    +                    "description": "HUGE FRAME ENABLEWhen enabled (set to 1), frames of any length are transmitted and received.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DELAYEDCRC": {
    +                    "description": "DELAYED CRC. This bit determines the number of bytes, if any, of proprietary header information that exist on the front of IEEE 802.3 frames. When 1, four bytes of header (ignored by the CRC function) are added. When 0, there is no proprietary header.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CRCEN": {
    +                    "description": "CRC ENABLESet this bit to append a CRC to every frame whether padding was required or not. Must be set if PAD/CRC ENABLE is set. Clear this bit if frames presented to the MAC contain a CRC.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "PADCRCEN": {
    +                    "description": "PAD CRC ENABLE. Set this bit to have the MAC pad all short frames. Clear this bit if frames presented to the MAC have a valid length. This bit is used in conjunction with AUTO PAD ENABLE and VLAN PAD ENABLE. See Table 153 - Pad Operation for details on the pad function.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "VLANPADEN": {
    +                    "description": "VLAN PAD ENABLE. Set this bit to cause the MAC to pad all short frames to 64 bytes and append a valid CRC. Consult Table 153 - Pad Operation for more information on the various padding features. Note: This bit is ignored if PAD / CRC ENABLE is cleared.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "AUTODETPADEN": {
    +                    "description": "AUTODETECTPAD ENABLE. Set this bit to cause the MAC to automatically detect the type of frame, either tagged or un-tagged, by comparing the two octets following the source address with 0x8100 (VLAN Protocol ID) and pad accordingly. Table 153 - Pad Operation provides a description of the pad function based on the configuration of this register. Note: This bit is ignored if PAD / CRC ENABLE is cleared.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PPENF": {
    +                    "description": "PURE PREAMBLE ENFORCEMEN. When enabled (set to 1), the MAC will verify the content of the preamble to ensure it contains 0x55 and is error-free. A packet with an incorrect preamble is discarded. When disabled, no preamble checking is performed.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LPENF": {
    +                    "description": "LONG PREAMBLE ENFORCEMENT. When enabled (set to 1), the MAC only allows receive packets which contain preamble fields less than 12 bytes in length. When disabled, the MAC allows any length preamble as per the Standard.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 15,
    +                    "size": 17
    +                  },
    +                  "NOBACKOFF": {
    +                    "description": "When enabled (set to 1), the MAC will immediately retransmit following a collision rather than using the Binary Exponential Backoff algorithm as specified in the Standard.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "BP_NOBACKOFF": {
    +                    "description": "BACK PRESSURE / NO BACKOFF. When enabled (set to 1), after the MAC incidentally causes a collision during back pressure, it will immediately retransmit without backoff, reducing the chance of further collisions and ensuring transmit packets get sent.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EXCESSDEFER": {
    +                    "description": "When enabled (set to 1) the MAC will defer to carrier indefinitely as per the Standard. When disabled, the MAC will abort when the excessive deferral limit is reached.",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IPGT": {
    +              "description": "Back-to-Back Inter-Packet-Gap register.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BTOBINTEGAP": {
    +                    "description": "BACK-TO-BACK INTER-PACKET-GAP.This is a programmable field representing the nibble time offset of the minimum possible period between the end of any transmitted packet to the beginning of the next. In Full-Duplex mode, the register value should be the desired period in nibble times minus 3. In Half-Duplex mode, the register value should be the desired period in nibble times minus 6. In Full-Duplex the recommended setting is 0x15 (21d), which represents the minimum IPG of 960 ns (in 100 Mbps mode) or 9.6 us (in 10 Mbps mode). In Half-Duplex the recommended setting is 0x12 (18d), which also represents the minimum IPG of 960 ns (in 100 Mbps mode) or 9.6 us (in 10 Mbps mode).",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 7,
    +                    "size": 25
    +                  }
    +                }
    +              }
    +            },
    +            "IPGR": {
    +              "description": "Non Back-to-Back Inter-Packet-Gap register.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NBTOBINTEGAP2": {
    +                    "description": "NON-BACK-TO-BACK INTER-PACKET-GAP PART2. This is a programmable field representing the Non-Back-to-Back Inter-Packet-Gap. The recommended value is 0x12 (18d), which represents the minimum IPG of 960 ns (in 100 Mbps mode) or 9.6 us (in 10 Mbps mode).",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 15,
    +                    "size": 17
    +                  },
    +                  "NBTOBINTEGAP1": {
    +                    "description": "NON-BACK-TO-BACK INTER-PACKET-GAP PART1. This is a programmable field representing the optional carrierSense window referenced in IEEE 802.3/4.2.3.2.1 'Carrier Deference'. If carrier is detected during the timing of IPGR1, the MAC defers to carrier. If, however, carrier becomes active after IPGR1, the MAC continues timing IPGR2 and transmits, knowingly causing a collision, thus ensuring fair access to medium. Its range of values is 0x0 to IPGR2. The recommended value is 0xC (12d)",
    +                    "offset": 8,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "CLRT": {
    +              "description": "Collision window / Retry register.",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 14095,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RETRANSMAX": {
    +                    "description": "RETRANSMISSION MAXIMUM.This is a programmable field specifying the number of retransmission attempts following a collision before aborting the packet due to excessive collisions. The Standard specifies the attemptLimit to be 0xF (15d). See IEEE 802.3/4.2.3.2.5.",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 14,
    +                    "size": 18
    +                  },
    +                  "COLLWIN": {
    +                    "description": "COLLISION WINDOW. This is a programmable field representing the slot time or collision window during which collisions occur in properly configured networks. The default value of 0x37 (55d) represents a 56 byte window following the preamble and SFD.",
    +                    "offset": 8,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "MAXF": {
    +              "description": "Maximum Frame register.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 1536,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MAXFLEN": {
    +                    "description": "MAXIMUM FRAME LENGTH. This field resets to the value 0x0600, which represents a maximum receive frame of 1536 octets. An untagged maximum size Ethernet frame is 1518 octets. A tagged frame adds four octets for a total of 1522 octets. If a shorter maximum length restriction is desired, program this 16-bit field.",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SUPP": {
    +              "description": "PHY Support register.",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 9,
    +                    "size": 23
    +                  },
    +                  "SPEED": {
    +                    "description": "This bit configures the Reduced MII logic for the current operating speed. When set, 100 Mbps mode is selected. When cleared, 10 Mbps mode is selected.",
    +                    "offset": 8,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TEST": {
    +              "description": "Test register.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SCPQ": {
    +                    "description": "SHORTCUT PAUSE QUANTA. This bit reduces the effective PAUSE quanta from 64 byte-times to 1 byte-time.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TESTPAUSE": {
    +                    "description": "This bit causes the MAC Control sublayer to inhibit transmissions, just as if a PAUSE Receive Control frame with a nonzero pause time parameter was received.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TESTBP": {
    +                    "description": "TEST BACKPRESSURE. Setting this bit will cause the MAC to assert backpressure on the link. Backpressure causes preamble to be transmitted, raising carrier sense. A transmit packet from the system will be sent during backpressure.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 3,
    +                    "size": 29
    +                  }
    +                }
    +              }
    +            },
    +            "MCFG": {
    +              "description": "MII Mgmt Configuration register.",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SCANINC": {
    +                    "description": "SCAN INCREMENT. Set this bit to cause the MII Management hardware to perform read cycles across a range of PHYs. When set, the MII Management hardware will perform read cycles from address 1 through the value set in PHY ADDRESS[4:0]. Clear this bit to allow continuous reads of the same PHY.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SUPPPREAMBLE": {
    +                    "description": "SUPPRESS PREAMBLE. Set this bit to cause the MII Management hardware to perform read/write cycles without the 32-bit preamble field. Clear this bit to cause normal cycles to be performed. Some PHYs support suppressed preamble.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CLOCKSEL": {
    +                    "description": "CLOCK SELECT. This field is used by the clock divide logic in creating the MII Management Clock (MDC) which IEEE 802.3u defines to be no faster than 2.5 MHz. Some PHYs support clock rates up to 12.5 MHz, however. The AHB bus clock (HCLK) is divided by the specified amount. Refer to Table 160 below for the definition of values for this field.",
    +                    "offset": 2,
    +                    "size": 4
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "RESETMIIMGMT": {
    +                    "description": "RESET MII MGMT. This bit resets the MII Management hardware.",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MCMD": {
    +              "description": "MII Mgmt Command register.",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READ": {
    +                    "description": "This bit causes the MII Management hardware to perform a single Read cycle. The Read data is returned in Register MRDD (MII Mgmt Read Data).",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SCAN": {
    +                    "description": "This bit causes the MII Management hardware to perform Read cycles continuously. This is useful for monitoring Link Fail for example.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 2,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "MADR": {
    +              "description": "MII Mgmt Address register.",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGADDR": {
    +                    "description": "REGISTER ADDRESS. This field represents the 5-bit Register Address field of Mgmt cycles. Up to 32 registers can be accessed.",
    +                    "offset": 0,
    +                    "size": 5
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 13,
    +                    "size": 19
    +                  },
    +                  "PHYADDR": {
    +                    "description": "PHY ADDRESS. This field represents the 5-bit PHY Address field of Mgmt cycles. Up to 31 PHYs can be addressed (0 is reserved).",
    +                    "offset": 8,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "MWTD": {
    +              "description": "MII Mgmt Write Data register.",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "WRITEDATA": {
    +                    "description": "WRITE DATA. When written, an MII Mgmt write cycle is performed using the 16-bit data and the pre-configured PHY and Register addresses from the MII Mgmt Address register (MADR).",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "MRDD": {
    +              "description": "MII Mgmt Read Data register.",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "READDATA": {
    +                    "description": "READ DATA. Following an MII Mgmt Read Cycle, the 16-bit data can be read from this location.",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "MIND": {
    +              "description": "MII Mgmt Indicators register.",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "BUSY": {
    +                    "description": "When 1 is returned - indicates MII Mgmt is currently performing an MII Mgmt Read or Write cycle.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SCANNING": {
    +                    "description": "When 1 is returned - indicates a scan operation (continuous MII Mgmt Read cycles) is in progress.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "NOTVALID": {
    +                    "description": "When 1 is returned - indicates MII Mgmt Read cycle has not completed and the Read Data is not yet valid.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MIILINKFAIL": {
    +                    "description": "When 1 is returned - indicates that an MII Mgmt link fail has occurred.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 4,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            },
    +            "SA0": {
    +              "description": "Station Address 0 register.",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SADDR2": {
    +                    "description": "STATION ADDRESS, 2nd octet. This field holds the second octet of the station address.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "SADDR1": {
    +                    "description": "STATION ADDRESS, 1st octet. This field holds the first octet of the station address.",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SA1": {
    +              "description": "Station Address 1 register.",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SADDR4": {
    +                    "description": "STATION ADDRESS, 4th octet. This field holds the fourth octet of the station address.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "SADDR3": {
    +                    "description": "STATION ADDRESS, 3rd octet. This field holds the third octet of the station address.",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SA2": {
    +              "description": "Station Address 2 register.",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SADDR6": {
    +                    "description": "STATION ADDRESS, 6th octet. This field holds the sixth octet of the station address.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "SADDR5": {
    +                    "description": "STATION ADDRESS, 5th octet. This field holds the fifth octet of the station address.",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "COMMAND": {
    +              "description": "Command register.",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXENABLE": {
    +                    "description": "Enable receive.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TXENABLE": {
    +                    "description": "Enable transmit.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 11,
    +                    "size": 21
    +                  },
    +                  "REGRESET": {
    +                    "description": "When a  1  is written, all datapaths and the host registers are reset. The MAC needs to be reset separately.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TXRESET": {
    +                    "description": "When a  1  is written, the transmit datapath is reset.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RXRESET": {
    +                    "description": "When a  1  is written, the receive datapath is reset.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PASSRUNTFRAME": {
    +                    "description": "When set to  1 , passes runt frames s1maller than 64 bytes to memory unless they have a CRC error. If 0 runt frames are filtered out.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PASSRXFILTER": {
    +                    "description": "When set to  1 , disables receive filtering i.e. all frames received are written to memory.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TXFLOWCONTROL": {
    +                    "description": "Enable IEEE 802.3 / clause 31 flow control sending pause frames in full duplex and continuous preamble in half duplex.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "RMII": {
    +                    "description": "When set to  1 , RMII mode is selected; if 0, MII mode is selected.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FULLDUPLEX": {
    +                    "description": "When set to  1 , indicates full duplex operation.",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "STATUS": {
    +              "description": "Status register.",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RXSTATUS": {
    +                    "description": "If 1, the receive channel is active. If 0, the receive channel is inactive.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TXSTATUS": {
    +                    "description": "If 1, the transmit channel is active. If 0, the transmit channel is inactive.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 2,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "RXDESCRIPTOR": {
    +              "description": "Receive descriptor base address register.",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Fixed to 00",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "RXDESCRIPTOR": {
    +                    "description": "MSBs of receive descriptor base address.",
    +                    "offset": 2,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "RXSTATUS": {
    +              "description": "Receive status base address register.",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Fixed to 000",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "RXSTATUS": {
    +                    "description": "MSBs of receive status base address.",
    +                    "offset": 3,
    +                    "size": 29
    +                  }
    +                }
    +              }
    +            },
    +            "RXDESCRIPTORNUMBER": {
    +              "description": "Receive number of descriptors register.",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXDESCRIPTORN": {
    +                    "description": "RxDescriptorNumber. Number of descriptors in the descriptor array for which RxDescriptor is the base address. The number of descriptors is minus one encoded.",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "RXPRODUCEINDEX": {
    +              "description": "Receive produce index register.",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RXPRODUCEIX": {
    +                    "description": "Index of the descriptor that is going to be filled next by the receive datapath.",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "RXCONSUMEINDEX": {
    +              "description": "Receive consume index register.",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXCONSUMEIX": {
    +                    "description": "Index of the descriptor that is going to be processed next by the receive",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "TXDESCRIPTOR": {
    +              "description": "Transmit descriptor base address register.",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Fixed to 00",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "TXD": {
    +                    "description": "TxDescriptor. MSBs of transmit descriptor base address.",
    +                    "offset": 2,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "TXSTATUS": {
    +              "description": "Transmit status base address register.",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Fixed to 00",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "TXSTAT": {
    +                    "description": "TxStatus. MSBs of transmit status base address.",
    +                    "offset": 2,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "TXDESCRIPTORNUMBER": {
    +              "description": "Transmit number of descriptors register.",
    +              "offset": 292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXDN": {
    +                    "description": "TxDescriptorNumber. Number of descriptors in the descriptor array for which TxDescriptor is the base address. The register is minus one encoded.",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "TXPRODUCEINDEX": {
    +              "description": "Transmit produce index register.",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXPI": {
    +                    "description": "TxProduceIndex. Index of the descriptor that is going to be filled next by the transmit software driver.",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "TXCONSUMEINDEX": {
    +              "description": "Transmit consume index register.",
    +              "offset": 300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TXCI": {
    +                    "description": "TxConsumeIndex. Index of the descriptor that is going to be transmitted next by the transmit datapath.",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "TSV0": {
    +              "description": "Transmit status vector 0 register.",
    +              "offset": 344,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CRCERR": {
    +                    "description": "CRC error. The attached CRC in the packet did not match the internally generated CRC.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "LCE": {
    +                    "description": "Length check error. Indicates the frame length field does not match the actual number of data items and is not a type field.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "LOR": {
    +                    "description": "Length out of range. Indicates that frame type/length field was larger than 1500 bytes. The EMAC doesn't distinguish the frame type and frame length, so, e.g. when the IP(0x8000) or ARP(0x0806) packets are received, it compares the frame type with the max length and gives the \"Length out of range\" error. In fact, this bit is not an error indication, but simply a statement by the chip regarding the status of the received frame.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DONE": {
    +                    "description": "Transmission of packet was completed.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MULTICAST": {
    +                    "description": "Packet's destination was a multicast address.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BROADCAST": {
    +                    "description": "Packet's destination was a broadcast address.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PACKETDEFER": {
    +                    "description": "Packet was deferred for at least one attempt, but less than an excessive defer.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EXDF": {
    +                    "description": "Excessive Defer. Packet was deferred in excess of 6071 nibble times in 100 Mbps or 24287 bit times in 10 Mbps mode.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EXCOL": {
    +                    "description": "Excessive Collision. Packet was aborted due to exceeding of maximum allowed number of collisions.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LCOL": {
    +                    "description": "Late Collision. Collision occurred beyond collision window, 512 bit times.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GIANT": {
    +                    "description": "Byte count in frame was greater than can be represented in the transmit byte count field in TSV1.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "UNDERRUN": {
    +                    "description": "Host side caused buffer underrun.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TOTALBYTES": {
    +                    "description": "The total number of bytes transferred including collided attempts.",
    +                    "offset": 12,
    +                    "size": 16
    +                  },
    +                  "CONTROLFRAME": {
    +                    "description": "The frame was a control frame.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "PAUSE": {
    +                    "description": "The frame was a control frame with a valid PAUSE opcode.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "BACKPRESSURE": {
    +                    "description": "Carrier-sense method backpressure was previously applied.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "VLAN": {
    +                    "description": "Frame's length/type field contained 0x8100 which is the VLAN protocol identifier.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TSV1": {
    +              "description": "Transmit status vector 1 register.",
    +              "offset": 348,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TBC": {
    +                    "description": "Transmit byte count. The total number of bytes in the frame, not counting the collided bytes.",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "TCC": {
    +                    "description": "Transmit collision count. Number of collisions the current packet incurred during transmission attempts. The maximum number of collisions (16) cannot be represented.",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 20,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "RSV": {
    +              "description": "Receive status vector register.",
    +              "offset": 352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RBC": {
    +                    "description": "Received byte count. Indicates length of received frame.",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "PPI": {
    +                    "description": "Packet previously ignored. Indicates that a packet was dropped.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RXDVSEEN": {
    +                    "description": "RXDV event previously seen. Indicates that the last receive event seen was not long enough to be a valid packet.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "CESEEN": {
    +                    "description": "Carrier event previously seen. Indicates that at some time since the last receive statistics, a carrier event was detected.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "RCV": {
    +                    "description": "Receive code violation. Indicates that received PHY data does not represent a valid receive code.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "CRCERR": {
    +                    "description": "CRC error. The attached CRC in the packet did not match the internally generated CRC.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "LCERR": {
    +                    "description": "Length check error. Indicates the frame length field does not match the actual number of data items and is not a type field.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "LOR": {
    +                    "description": "Length out of range. Indicates that frame type/length field was larger than 1518 bytes. The EMAC doesn't distinguish the frame type and frame length, so, e.g. when the IP(0x8000) or ARP(0x0806) packets are received, it compares the frame type with the max length and gives the \"Length out of range\" error. In fact, this bit is not an error indication, but simply a statement by the chip regarding the status of the received frame.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "ROK": {
    +                    "description": "Receive OK. The packet had valid CRC and no symbol errors.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "MULTICAST": {
    +                    "description": "The packet destination was a multicast address.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "BROADCAST": {
    +                    "description": "The packet destination was a broadcast address.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "DRIBBLENIBBLE": {
    +                    "description": "Indicates that after the end of packet another 1-7 bits were received. A single nibble, called dribble nibble, is formed but not sent out.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "CONTROLFRAME": {
    +                    "description": "The frame was a control frame.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "PAUSE": {
    +                    "description": "The frame was a control frame with a valid PAUSE opcode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "UO": {
    +                    "description": "Unsupported Opcode. The current frame was recognized as a Control Frame but contains an unknown opcode.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "VLAN": {
    +                    "description": "Frame's length/type field contained 0x8100 which is the VLAN protocol identifier.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FLOWCONTROLCOUNTER": {
    +              "description": "Flow control counter register.",
    +              "offset": 368,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MC": {
    +                    "description": "MirrorCounter. In full duplex mode the MirrorCounter specifies the number of cycles before re-issuing the Pause control frame.",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "PT": {
    +                    "description": "PauseTimer. In full-duplex mode the PauseTimer specifies the value that is inserted into the pause timer field of a pause flow control frame. In half duplex mode the PauseTimer specifies the number of backpressure cycles.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "FLOWCONTROLSTATUS": {
    +              "description": "Flow control status register.",
    +              "offset": 372,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "MCC": {
    +                    "description": "MirrorCounterCurrent. In full duplex mode this register represents the current value of the datapath's mirror counter which counts up to the value specified by the MirrorCounter field in the FlowControlCounter register. In half duplex mode the register counts until it reaches the value of the PauseTimer bits in the FlowControlCounter register.",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "RXFILTERCTRL": {
    +              "description": "Receive filter control register.",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AUE": {
    +                    "description": "AcceptUnicastEn. When set to 1, all unicast frames are accepted.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ABE": {
    +                    "description": "AcceptBroadcastEn. When set to 1, all broadcast frames are accepted.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AME": {
    +                    "description": "AcceptMulticastEn. When set to 1, all multicast frames are accepted.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "AUHE": {
    +                    "description": "AcceptUnicastHashEn. When set to 1, unicast frames that pass the imperfect hash filter are accepted.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "AMHE": {
    +                    "description": "AcceptMulticastHashEn. When set to 1, multicast frames that pass the imperfect hash filter are accepted.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "APE": {
    +                    "description": "AcceptPerfectEn. When set to 1, the frames with a destination address identical to the station address are accepted.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 14,
    +                    "size": 18
    +                  },
    +                  "MPEW": {
    +                    "description": "MagicPacketEnWoL. When set to 1, the result of the magic packet filter will generate a WoL interrupt when there is a match.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "RFEW": {
    +                    "description": "RxFilterEnWoL. When set to 1, the result of the perfect address matching filter and the imperfect hash filter will generate a WoL interrupt when there is a match.",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RXFILTERWOLSTATUS": {
    +              "description": "Receive filter WoL status register.",
    +              "offset": 516,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "AUW": {
    +                    "description": "AcceptUnicastWoL. When the value is 1, a unicast frames caused WoL.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ABW": {
    +                    "description": "AcceptBroadcastWoL. When the value is 1, a broadcast frame caused WoL.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AMW": {
    +                    "description": "AcceptMulticastWoL. When the value is 1, a multicast frame caused WoL.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "AUHW": {
    +                    "description": "AcceptUnicastHashWoL. When the value is 1, a unicast frame that passes the imperfect hash filter caused WoL.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "AMHW": {
    +                    "description": "AcceptMulticastHashWoL. When the value is 1, a multicast frame that passes the imperfect hash filter caused WoL.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "APW": {
    +                    "description": "AcceptPerfectWoL. When the value is 1, the perfect address matching filter caused WoL.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 9,
    +                    "size": 23
    +                  },
    +                  "RFW": {
    +                    "description": "RxFilterWoL. When the value is 1, the receive filter caused WoL.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MPW": {
    +                    "description": "MagicPacketWoL. When the value is 1, the magic packet filter caused WoL.",
    +                    "offset": 8,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RXFILTERWOLCLEAR": {
    +              "description": "Receive filter WoL clear register.",
    +              "offset": 520,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "AUWCLR": {
    +                    "description": "AcceptUnicastWoLClr. When a 1 is written, the corresponding status bit in the RxFilterWoLStatus register is cleared.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ABWCLR": {
    +                    "description": "AcceptBroadcastWoLClr. When a 1 is written, the corresponding status bit in the RxFilterWoLStatus register is cleared.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AMWCLR": {
    +                    "description": "AcceptMulticastWoLClr. When a 1 is written, the corresponding status bit in the RxFilterWoLStatus register is cleared.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "AUHWCLR": {
    +                    "description": "AcceptUnicastHashWoLClr. When a 1 is written, the corresponding status bit in the RxFilterWoLStatus register is cleared.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "AMHWCLR": {
    +                    "description": "AcceptMulticastHashWoLClr. When a 1 is written, the corresponding status bit in the RxFilterWoLStatus register is cleared.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "APWCLR": {
    +                    "description": "AcceptPerfectWoLClr. When a 1 is written, the corresponding status bit in the RxFilterWoLStatus register is cleared.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 9,
    +                    "size": 23
    +                  },
    +                  "RFWCLR": {
    +                    "description": "RxFilterWoLClr. When a 1 is written, the corresponding status bit in the RxFilterWoLStatus register is cleared.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MPWCLR": {
    +                    "description": "MagicPacketWoLClr. When a 1 is written, the corresponding status bit in the RxFilterWoLStatus register is cleared.",
    +                    "offset": 8,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HASHFILTERL": {
    +              "description": "Hash filter table LSBs register.",
    +              "offset": 528,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HFL": {
    +                    "description": "HashFilterL. Bits 31:0 of the imperfect filter hash table for receive filtering.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HASHFILTERH": {
    +              "description": "Hash filter table MSBs register.",
    +              "offset": 532,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HFH": {
    +                    "description": "Bits 63:32 of the imperfect filter hash table for receive filtering.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "INTSTATUS": {
    +              "description": "Interrupt status register.",
    +              "offset": 4064,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RXOVERRUNINT": {
    +                    "description": "Interrupt set on a fatal overrun error in the receive queue. The fatal interrupt should be resolved by a Rx soft-reset. The bit is not set when there is a nonfatal overrun error.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RXERRORINT": {
    +                    "description": "Interrupt trigger on receive errors: AlignmentError, RangeError, LengthError, SymbolError, CRCError or NoDescriptor or Overrun.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RXFINISHEDINT": {
    +                    "description": "Interrupt triggered when all receive descriptors have been processed i.e. on the transition to the situation where ProduceIndex == ConsumeIndex.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RXDONEINT": {
    +                    "description": "Interrupt triggered when a receive descriptor has been processed while the Interrupt bit in the Control field of the descriptor was set.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TXUNDERRUNINT": {
    +                    "description": "Interrupt set on a fatal underrun error in the transmit queue. The fatal interrupt should be resolved by a Tx soft-reset. The bit is not set when there is a nonfatal underrun error.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TXERRORINT": {
    +                    "description": "Interrupt trigger on transmit errors: LateCollision, ExcessiveCollision and ExcessiveDefer, NoDescriptor or Underrun.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXFINISHEDINT": {
    +                    "description": "Interrupt triggered when all transmit descriptors have been processed i.e. on the transition to the situation where ProduceIndex == ConsumeIndex.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXDONEINT": {
    +                    "description": "Interrupt triggered when a descriptor has been transmitted while the Interrupt bit in the Control field of the descriptor was set.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 14,
    +                    "size": 18
    +                  },
    +                  "SOFTINT": {
    +                    "description": "Interrupt triggered by software writing a 1 to the SoftIntSet bit in the IntSet register.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WAKEUPINT": {
    +                    "description": "Interrupt triggered by a Wake-up event detected by the receive filter.",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTENABLE": {
    +              "description": "Interrupt enable register.",
    +              "offset": 4068,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXOVERRUNINTEN": {
    +                    "description": "Enable for interrupt trigger on receive buffer overrun or descriptor underrun situations.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RXERRORINTEN": {
    +                    "description": "Enable for interrupt trigger on receive errors.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RXFINISHEDINTEN": {
    +                    "description": "Enable for interrupt triggered when all receive descriptors have been processed i.e. on the transition to the situation where ProduceIndex == ConsumeIndex.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RXDONEINTEN": {
    +                    "description": "Enable for interrupt triggered when a receive descriptor has been processed while the Interrupt bit in the Control field of the descriptor was set.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TXUNDERRUNINTEN": {
    +                    "description": "Enable for interrupt trigger on transmit buffer or descriptor underrun situations.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TXERRORINTEN": {
    +                    "description": "Enable for interrupt trigger on transmit errors.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXFINISHEDINTEN": {
    +                    "description": "Enable for interrupt triggered when all transmit descriptors have been processed i.e. on the transition to the situation where ProduceIndex == ConsumeIndex.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXDONEINTEN": {
    +                    "description": "Enable for interrupt triggered when a descriptor has been transmitted while the Interrupt bit in the Control field of the descriptor was set.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 14,
    +                    "size": 18
    +                  },
    +                  "SOFTINTEN": {
    +                    "description": "Enable for interrupt triggered by the SoftInt bit in the IntStatus register, caused by software writing a 1 to the SoftIntSet bit in the IntSet register.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WAKEUPINTEN": {
    +                    "description": "Enable for interrupt triggered by a Wake-up event detected by the receive filter.",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTCLEAR": {
    +              "description": "Interrupt clear register.",
    +              "offset": 4072,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "RXOVERRUNINTCLR": {
    +                    "description": "Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RXERRORINTCLR": {
    +                    "description": "Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RXFINISHEDINTCLR": {
    +                    "description": "Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RXDONEINTCLR": {
    +                    "description": "Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TXUNDERRUNINTCLR": {
    +                    "description": "Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TXERRORINTCLR": {
    +                    "description": "Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXFINISHEDINTCLR": {
    +                    "description": "Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXDONEINTCLR": {
    +                    "description": "Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 14,
    +                    "size": 18
    +                  },
    +                  "SOFTINTCLR": {
    +                    "description": "Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WAKEUPINTCLR": {
    +                    "description": "Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTSET": {
    +              "description": "Interrupt set register.",
    +              "offset": 4076,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "RXOVERRUNINTSET": {
    +                    "description": "Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RXERRORINTSET": {
    +                    "description": "Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RXFINISHEDINTSET": {
    +                    "description": "Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RXDONEINTSET": {
    +                    "description": "Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TXUNDERRUNINTSET": {
    +                    "description": "Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TXERRORINTSET": {
    +                    "description": "Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXFINISHEDINTSET": {
    +                    "description": "Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXDONEINTSET": {
    +                    "description": "Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 14,
    +                    "size": 18
    +                  },
    +                  "SOFTINTSET": {
    +                    "description": "Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WAKEUPINTSET": {
    +                    "description": "Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "POWERDOWN": {
    +              "description": "Power-down register.",
    +              "offset": 4084,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Unused",
    +                    "offset": 0,
    +                    "size": 31
    +                  },
    +                  "PD": {
    +                    "description": "PowerDownMACAHB. If true, all AHB accesses will return a read/write error, except accesses to the Power-Down register.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "DAC": {
    +        "description": " Digital-to-Analog Converter (DAC) ",
    +        "children": {
    +          "registers": {
    +            "CR": {
    +              "description": "D/A Converter Register. This register contains the digital value to be converted to analog and a power control bit.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 17,
    +                    "size": 15
    +                  },
    +                  "VALUE": {
    +                    "description": "After the selected settling time after this field is written with a new VALUE, the voltage on the DAC_OUT pin (with respect to VSSA) is VALUE  x ((VREFP - V REFN)/1024) + VREFN.",
    +                    "offset": 6,
    +                    "size": 10
    +                  },
    +                  "BIAS": {
    +                    "description": "Settling time  The settling times noted in the description of the BIAS bit are valid for a capacitance load on the DAC_OUT pin not exceeding 100 pF. A load impedance value greater than that value will cause settling time longer than the specified time. One or more graphs of load impedance vs. settling time will be included in the final data sheet.",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "FAST": {
    +                            "description": "The settling time of the DAC is 1 us max, and the maximum current is 700 uA. This allows a maximum update rate of 1 MHz.",
    +                            "value": 0
    +                          },
    +                          "SLOW": {
    +                            "description": "The settling time of the DAC is 2.5 us and the maximum current is 350 uA. This allows a maximum update rate of 400 kHz.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CTRL": {
    +              "description": "DAC Control register. This register controls DMA and timer operation.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INT_DMA_REQ": {
    +                    "description": "DMA interrupt request",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CLEAR_ON_ANY_WRITE_T": {
    +                            "description": "Clear on any write to the DACR register.",
    +                            "value": 0
    +                          },
    +                          "SET_BY_HARDWARE_WHEN": {
    +                            "description": "Set by hardware when the timer times out.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DBLBUF_ENA": {
    +                    "description": "Double buffering",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "ENABLE_WHEN_THIS_BI": {
    +                            "description": "Enable. When this bit and the CNT_ENA bit are both set, the double-buffering feature in the DACR register will be enabled. Writes to the DACR register are written to a pre-buffer and then transferred to the DACR on the next time-out of the counter.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CNT_ENA": {
    +                    "description": "Time-out counter operation",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "ENABLE": {
    +                            "description": "Enable",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DMA_ENA": {
    +                    "description": "DMA access",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE": {
    +                            "description": "Disable",
    +                            "value": 0
    +                          },
    +                          "ENABLE_DMA_BURST_RE": {
    +                            "description": "Enable. DMA Burst Request Input 7 is enabled for the DAC (see Table 672).",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 4,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            },
    +            "CNTVAL": {
    +              "description": "DAC Counter Value register. This register contains the reload value for the DAC DMA/Interrupt timer.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VALUE": {
    +                    "description": "16-bit reload value for the DAC interrupt/DMA timer.",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SYSCON": {
    +        "description": "System and clock control",
    +        "children": {
    +          "registers": {
    +            "FLASHCFG": {
    +              "description": "Flash Accelerator Configuration Register. Controls flash access timing.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 12346,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved. The value read from a reserved bit is not defined.",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "FLASHTIM": {
    +                    "description": "Flash access time. The value of this field plus 1 gives the number of CPU clocks used for a flash access. Warning: improper setting of this value may result in incorrect operation of the device. Other values are reserved.",
    +                    "offset": 12,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "1CLK": {
    +                            "description": "Flash accesses use 1 CPU clock. Use for up to 20 MHz CPU clock.",
    +                            "value": 0
    +                          },
    +                          "2CLK": {
    +                            "description": "Flash accesses use 2 CPU clocks. Use for up to 40 MHz CPU clock.",
    +                            "value": 1
    +                          },
    +                          "3CLK": {
    +                            "description": "Flash accesses use 3 CPU clocks. Use for up to 60 MHz CPU clock.",
    +                            "value": 2
    +                          },
    +                          "4CLK": {
    +                            "description": "Flash accesses use 4 CPU clocks. Use for up to 80 MHz CPU clock.",
    +                            "value": 3
    +                          },
    +                          "5CLK": {
    +                            "description": "Flash accesses use 5 CPU clocks. Use for up to 100 MHz CPU clock. Use for up to 120 Mhz for LPC1759 and LPC1769 only.",
    +                            "value": 4
    +                          },
    +                          "6CLK": {
    +                            "description": "Flash accesses use 6 CPU clocks. This safe setting will work under any conditions.",
    +                            "value": 5
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PLL0CON": {
    +              "description": "PLL0 Control Register",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PLLE0": {
    +                    "description": "PLL0 Enable. When one, and after a valid PLL0 feed, this bit will activate PLL0 and allow it to lock to the requested frequency. See PLL0STAT register.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PLLC0": {
    +                    "description": "PLL0 Connect. Setting PLLC0 to one after PLL0 has been enabled and locked, then followed by a valid PLL0 feed sequence causes PLL0 to become the clock source for the CPU, AHB peripherals, and used to derive the clocks for APB peripherals. The PLL0 output may potentially be used to clock the USB subsystem if the frequency is 48 MHz. See PLL0STAT register.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 2,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "PLL0CFG": {
    +              "description": "PLL0 Configuration Register",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MSEL0": {
    +                    "description": "PLL0 Multiplier value. Supplies the value M in PLL0 frequency calculations. The value stored here is M - 1.  Note: Not all values of M are needed, and therefore some are not supported by hardware.",
    +                    "offset": 0,
    +                    "size": 15
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "NSEL0": {
    +                    "description": "PLL0 Pre-Divider value. Supplies the value N in PLL0 frequency calculations. The value stored here is N - 1. Supported values for N are 1 through 32.",
    +                    "offset": 16,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "PLL0STAT": {
    +              "description": "PLL0 Status Register",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "MSEL0": {
    +                    "description": "Read-back for the PLL0 Multiplier value. This is the value currently used by PLL0, and is one less than the actual multiplier.",
    +                    "offset": 0,
    +                    "size": 15
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 27,
    +                    "size": 5
    +                  },
    +                  "NSEL0": {
    +                    "description": "Read-back for the PLL0 Pre-Divider value. This is the value currently used by PLL0, and is one less than the actual divider.",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "PLLE0_STAT": {
    +                    "description": "Read-back for the PLL0 Enable bit. This bit reflects the state of the PLEC0 bit in PLL0CON after a valid PLL0 feed. When one, PLL0 is currently enabled. When zero, PLL0 is turned off. This bit is automatically cleared when Power-down mode is entered.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "PLLC0_STAT": {
    +                    "description": "Read-back for the PLL0 Connect bit. This bit reflects the state of the PLLC0 bit in PLL0CON after a valid PLL0 feed. When PLLC0 and PLLE0 are both one, PLL0 is connected as the clock source for the CPU. When either PLLC0 or PLLE0 is zero, PLL0 is bypassed. This bit is automatically cleared when Power-down mode is entered.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "PLOCK0": {
    +                    "description": "Reflects the PLL0 Lock status. When zero, PLL0 is not locked. When one, PLL0 is locked onto the requested frequency. See text for details.",
    +                    "offset": 26,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PLL0FEED": {
    +              "description": "PLL0 Feed Register",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "PLL0FEED": {
    +                    "description": "The PLL0 feed sequence must be written to this register in order for PLL0 configuration and control register changes to take effect.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "PLL1CON": {
    +              "description": "PLL1 Control Register",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PLLE1": {
    +                    "description": "PLL1 Enable. When one, and after a valid PLL1 feed, this bit will activate PLL1 and allow it to lock to the requested frequency.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PLLC1": {
    +                    "description": "PLL1 Connect. Setting PLLC to one after PLL1 has been enabled and locked, then followed by a valid PLL1 feed sequence causes PLL1 to become the clock source for the USB subsystem via the USB clock divider. See PLL1STAT register.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 2,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "PLL1CFG": {
    +              "description": "PLL1 Configuration Register",
    +              "offset": 164,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MSEL1": {
    +                    "description": "PLL1 Multiplier value. Supplies the value M in the PLL1 frequency calculations.",
    +                    "offset": 0,
    +                    "size": 5
    +                  },
    +                  "PSEL1": {
    +                    "description": "PLL1 Divider value. Supplies the value P in the PLL1 frequency calculations.",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 7,
    +                    "size": 25
    +                  }
    +                }
    +              }
    +            },
    +            "PLL1STAT": {
    +              "description": "PLL1 Status Register",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "MSEL1": {
    +                    "description": "Read-back for the PLL1 Multiplier value. This is the value currently used by PLL1.",
    +                    "offset": 0,
    +                    "size": 5
    +                  },
    +                  "PSEL1": {
    +                    "description": "Read-back for the PLL1 Divider value. This is the value currently used by PLL1.",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 11,
    +                    "size": 21
    +                  },
    +                  "PLLE1_STAT": {
    +                    "description": "Read-back for the PLL1 Enable bit. When one, PLL1 is currently activated. When zero, PLL1 is turned off. This bit is automatically cleared when Power-down mode is activated.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PLLC1_STAT": {
    +                    "description": "Read-back for the PLL1 Connect bit. When PLLC and PLLE are both one, PLL1 is connected as the clock source for the microcontroller. When either PLLC or PLLE is zero, PLL1 is bypassed and the oscillator clock is used directly by the microcontroller. This bit is automatically cleared when Power-down mode is activated.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PLOCK1": {
    +                    "description": "Reflects the PLL1 Lock status. When zero, PLL1 is not locked. When one, PLL1 is locked onto the requested frequency.",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PLL1FEED": {
    +              "description": "PLL1 Feed Register",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "PLL1FEED": {
    +                    "description": "The PLL1 feed sequence must be written to this register in order for PLL1 configuration and control register changes to take effect.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "PCON": {
    +              "description": "Power Control Register",
    +              "offset": 192,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PM0": {
    +                    "description": "Power mode control bit 0. This bit controls entry to the Power-down mode.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PM1": {
    +                    "description": "Power mode control bit 1. This bit controls entry to the Deep Power-down mode.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "BODRPM": {
    +                    "description": "Brown-Out Reduced Power Mode. When BODRPM is 1, the Brown-Out Detect circuitry will be turned off when chip Power-down mode or Deep Sleep mode is entered, resulting in a further reduction in power usage. However, the possibility of using Brown-Out Detect as a wake-up source from the reduced power mode will be lost. When 0, the Brown-Out Detect function remains active during Power-down and Deep Sleep modes. See the System Control Block chapter for details of Brown-Out detection.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "BOGD": {
    +                    "description": "Brown-Out Global Disable. When BOGD is 1, the Brown-Out Detect circuitry is fully disabled at all times, and does not consume power. When 0, the Brown-Out Detect circuitry is enabled. See the System Control Block chapter for details of Brown-Out detection. Note: the Brown-Out Reset Disable (BORD, in this register) and the Brown-Out Interrupt (xx) must be disabled when software changes the value of this bit.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "BORD": {
    +                    "description": "Brown-Out Reset Disable. When BORD is 1, the BOD will not reset the device when the VDD(REG)(3V3) voltage dips goes below the BOD reset trip level. The Brown-Out interrupt is not affected. When BORD is 0, the BOD reset is enabled.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 12,
    +                    "size": 20
    +                  },
    +                  "SMFLAG": {
    +                    "description": "Sleep Mode entry flag. Set when the Sleep mode is successfully entered. Cleared by software writing a one to this bit.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DSFLAG": {
    +                    "description": "Deep Sleep entry flag. Set when the Deep Sleep mode is successfully entered. Cleared by software writing a one to this bit.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PDFLAG": {
    +                    "description": "Power-down entry flag. Set when the Power-down mode is successfully entered. Cleared by software writing a one to this bit.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "DPDFLAG": {
    +                    "description": "Deep Power-down entry flag. Set when the Deep Power-down mode is successfully entered. Cleared by software writing a one to this bit.",
    +                    "offset": 11,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PCONP": {
    +              "description": "Power Control for Peripherals Register",
    +              "offset": 196,
    +              "size": 32,
    +              "reset_value": 958,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "PCTIM0": {
    +                    "description": "Timer/Counter 0 power/clock control bit.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PCTIM1": {
    +                    "description": "Timer/Counter 1 power/clock control bit.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PCUART0": {
    +                    "description": "UART0 power/clock control bit.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PCUART1": {
    +                    "description": "UART1 power/clock control bit.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "PCPWM1": {
    +                    "description": "PWM1 power/clock control bit.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PCI2C0": {
    +                    "description": "The I2C0 interface power/clock control bit.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PCSPI": {
    +                    "description": "The SPI interface power/clock control bit.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PCRTC": {
    +                    "description": "The RTC power/clock control bit.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PCSSP1": {
    +                    "description": "The SSP 1 interface power/clock control bit.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PCADC": {
    +                    "description": "A/D converter (ADC) power/clock control bit. Note: Clear the PDN bit in the AD0CR before clearing this bit, and set this bit before setting PDN.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "PCCAN1": {
    +                    "description": "CAN Controller 1 power/clock control bit.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "PCCAN2": {
    +                    "description": "CAN Controller 2 power/clock control bit.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PCGPIO": {
    +                    "description": "Power/clock control bit for IOCON, GPIO, and GPIO interrupts.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "PCRIT": {
    +                    "description": "Repetitive Interrupt Timer power/clock control bit.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "PCMCPWM": {
    +                    "description": "Motor Control PWM",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "PCQEI": {
    +                    "description": "Quadrature Encoder Interface power/clock control bit.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "PCI2C1": {
    +                    "description": "The I2C1 interface power/clock control bit.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "PCSSP0": {
    +                    "description": "The SSP0 interface power/clock control bit.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "PCTIM2": {
    +                    "description": "Timer 2 power/clock control bit.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "PCTIM3": {
    +                    "description": "Timer 3 power/clock control bit.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "PCUART2": {
    +                    "description": "UART 2 power/clock control bit.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "PCUART3": {
    +                    "description": "UART 3 power/clock control bit.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "PCI2C2": {
    +                    "description": "I2C interface 2 power/clock control bit.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "PCI2S": {
    +                    "description": "I2S interface power/clock control bit.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "PCGPDMA": {
    +                    "description": "GPDMA function power/clock control bit.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "PCENET": {
    +                    "description": "Ethernet block power/clock control bit.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PCUSB": {
    +                    "description": "USB interface power/clock control bit.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCLKCFG": {
    +              "description": "CPU Clock Configuration Register",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCLKSEL": {
    +                    "description": "Selects the divide value for creating the CPU clock (CCLK) from the PLL0 output. 0 = pllclk is divided by 1 to produce the CPU clock. This setting is not allowed when the PLL0 is connected, because the rate would always be greater than the maximum allowed CPU clock. 1 = pllclk is divided by 2 to produce the CPU clock. This setting is not allowed when the PLL0 is connected, because the rate would always be greater than the maximum allowed CPU clock. 2 = pllclk is divided by 3 to produce the CPU clock. 3 = pllclk is divided by 4 to produce the CPU clock. ... 255 = pllclk is divided by 256 to produce the CPU clock.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "USBCLKCFG": {
    +              "description": "USB Clock Configuration Register",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "USBSEL": {
    +                    "description": "Selects the divide value for creating the USB clock from the PLL0 output. Only the values shown below can produce even number multiples of 48 MHz from the PLL0 output.  Warning: Improper setting of this value will result in incorrect operation of the USB interface. 5 = PLL0 output is divided by 6. PLL0 output must be 288 MHz. 7 = PLL0 output is divided by 8. PLL0 output must be 384 MHz. 9 = PLL0 output is divided by 10. PLL0 output must be 480 MHz.",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 4,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            },
    +            "CLKSRCSEL": {
    +              "description": "Clock Source Select Register",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLKSRC": {
    +                    "description": "Selects the clock source for PLL0 as follows. Warning: Improper setting of this value, or an incorrect sequence of changing this value may result in incorrect operation of the device.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SELECTS_THE_INTERNAL": {
    +                            "description": "Selects the Internal RC oscillator as the PLL0 clock source (default).",
    +                            "value": 0
    +                          },
    +                          "SELECTS_THE_MAIN_OSC": {
    +                            "description": "Selects the main oscillator as the PLL0 clock source.  Select the main oscillator as PLL0 clock source if the PLL0 clock output is used for USB or for CAN with baudrates > 100 kBit/s.",
    +                            "value": 1
    +                          },
    +                          "SELECTS_THE_RTC_OSCI": {
    +                            "description": "Selects the RTC oscillator as the PLL0 clock source.",
    +                            "value": 2
    +                          },
    +                          "RESERVED": {
    +                            "description": "Reserved, do not use this setting.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 2,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "CANSLEEPCLR": {
    +              "description": "Allows clearing the current CAN channel sleep state as well as reading that state.",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 3,
    +                    "size": 29
    +                  },
    +                  "CAN1SLEEP": {
    +                    "description": "Sleep status and control for CAN channel 1. Read: when 1, indicates that CAN channel 1 is in the sleep mode. Write: writing a 1 causes clocks to be restored to CAN channel 1.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CAN2SLEEP": {
    +                    "description": "Sleep status and control for CAN channel 2. Read: when 1, indicates that CAN channel 2 is in the sleep mode. Write: writing a 1 causes clocks to be restored to CAN channel 2.",
    +                    "offset": 2,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CANWAKEFLAGS": {
    +              "description": "Allows reading the wake-up state of the CAN channels.",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 3,
    +                    "size": 29
    +                  },
    +                  "CAN1WAKE": {
    +                    "description": "Wake-up status for CAN channel 1. Read: when 1, indicates that a falling edge has occurred on the receive data line of CAN channel 1. Write: writing a 1 clears this bit.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CAN2WAKE": {
    +                    "description": "Wake-up status for CAN channel 2. Read: when 1, indicates that a falling edge has occurred on the receive data line of CAN channel 2. Write: writing a 1 clears this bit.",
    +                    "offset": 2,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EXTINT": {
    +              "description": "External Interrupt Flag Register",
    +              "offset": 320,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EINT0": {
    +                    "description": "In level-sensitive mode, this bit is set if the EINT0 function is selected for its pin, and the pin is in its active state. In edge-sensitive mode, this bit is set if the EINT0 function is selected for its pin, and the selected edge occurs on the pin. This bit is cleared by writing a one to it, except in level sensitive mode when the pin is in its active state.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EINT1": {
    +                    "description": "In level-sensitive mode, this bit is set if the EINT1 function is selected for its pin, and the pin is in its active state. In edge-sensitive mode, this bit is set if the EINT1 function is selected for its pin, and the selected edge occurs on the pin. This bit is cleared by writing a one to it, except in level sensitive mode when the pin is in its active state.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EINT2": {
    +                    "description": "In level-sensitive mode, this bit is set if the EINT2 function is selected for its pin, and the pin is in its active state. In edge-sensitive mode, this bit is set if the EINT2 function is selected for its pin, and the selected edge occurs on the pin. This bit is cleared by writing a one to it, except in level sensitive mode when the pin is in its active state.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EINT3": {
    +                    "description": "In level-sensitive mode, this bit is set if the EINT3 function is selected for its pin, and the pin is in its active state. In edge-sensitive mode, this bit is set if the EINT3 function is selected for its pin, and the selected edge occurs on the pin. This bit is cleared by writing a one to it, except in level sensitive mode when the pin is in its active state.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 4,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            },
    +            "EXTMODE": {
    +              "description": "External Interrupt Mode register",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXTMODE0": {
    +                    "description": "External interrupt 0 EINT0 mode.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "LEVEL_SENSITIVE": {
    +                            "description": "Level-sensitive. Level-sensitivity is selected for EINT0.",
    +                            "value": 0
    +                          },
    +                          "EDGE_SENSITIVE": {
    +                            "description": "Edge-sensitive. EINT0 is edge sensitive.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EXTMODE1": {
    +                    "description": "External interrupt 1 EINT1 mode.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "LEVEL_SENSITIVE": {
    +                            "description": "Level-sensitive. Level-sensitivity is selected for EINT1.",
    +                            "value": 0
    +                          },
    +                          "EDGE_SENSITIVE": {
    +                            "description": "Edge-sensitive. EINT1 is edge sensitive.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EXTMODE2": {
    +                    "description": "External interrupt 2 EINT2 mode.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "LEVEL_SENSITIVE": {
    +                            "description": "Level-sensitive. Level-sensitivity is selected for EINT2.",
    +                            "value": 0
    +                          },
    +                          "EDGE_SENSITIVE": {
    +                            "description": "Edge-sensitive. EINT2 is edge sensitive.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EXTMODE3": {
    +                    "description": "External interrupt 3 EINT3 mode.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "LEVEL_SENSITIVE": {
    +                            "description": "Level-sensitive. Level-sensitivity is selected for EINT3.",
    +                            "value": 0
    +                          },
    +                          "EDGE_SENSITIVE": {
    +                            "description": "Edge-sensitive. EINT3 is edge sensitive.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 4,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            },
    +            "EXTPOLAR": {
    +              "description": "External Interrupt Polarity Register",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXTPOLAR0": {
    +                    "description": "External interrupt 0 EINT0 polarity.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "FALLING_EDGE": {
    +                            "description": "Falling edge. EINT0 is low-active or falling-edge sensitive (depending on EXTMODE0).",
    +                            "value": 0
    +                          },
    +                          "RISING_EDGE": {
    +                            "description": "Rising edge. EINT0 is high-active or rising-edge sensitive (depending on EXTMODE0).",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EXTPOLAR1": {
    +                    "description": "External interrupt 1 EINT1 polarity.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "FALLING_EDGE": {
    +                            "description": "Falling edge. EINT1 is low-active or falling-edge sensitive (depending on EXTMODE1).",
    +                            "value": 0
    +                          },
    +                          "RISING_EDGE": {
    +                            "description": "Rising edge. EINT1 is high-active or rising-edge sensitive (depending on EXTMODE1).",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EXTPOLAR2": {
    +                    "description": "External interrupt 2 EINT2 polarity.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "FALLING_EDGE": {
    +                            "description": "Falling edge. EINT2 is low-active or falling-edge sensitive (depending on EXTMODE2).",
    +                            "value": 0
    +                          },
    +                          "RISING_EDGE": {
    +                            "description": "Rising edge. EINT2 is high-active or rising-edge sensitive (depending on EXTMODE2).",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "EXTPOLAR3": {
    +                    "description": "External interrupt 3 EINT3 polarity.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "FALLING_EDGE": {
    +                            "description": "Falling edge. EINT3 is low-active or falling-edge sensitive (depending on EXTMODE3).",
    +                            "value": 0
    +                          },
    +                          "RISING_EDGE": {
    +                            "description": "Rising edge. EINT3 is high-active or rising-edge sensitive (depending on EXTMODE3).",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 4,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            },
    +            "RSID": {
    +              "description": "Reset Source Identification Register",
    +              "offset": 384,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "children": {
    +                "fields": {
    +                  "POR": {
    +                    "description": "Assertion of the POR signal sets this bit, and clears all of the other bits in this register. But if another Reset signal (e.g., External Reset) remains asserted after the POR signal is negated, then its bit is set. This bit is not affected by any of the other sources of Reset.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EXTR": {
    +                    "description": "Assertion of the RESET signal sets this bit. This bit is cleared only by software or POR.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "WDTR": {
    +                    "description": "This bit is set when the Watchdog Timer times out and the WDTRESET bit in the Watchdog Mode Register is 1. This bit is cleared only by software or POR.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "BODR": {
    +                    "description": "This bit is set when the VDD(REG)(3V3) voltage reaches a level below the BOD reset trip level (typically 1.85 V under nominal room temperature conditions). If the VDD(REG)(3V3) voltage dips from the normal operating range to below the BOD reset trip level and recovers, the BODR bit will be set to 1. If the VDD(REG)(3V3) voltage dips from the normal operating range to below the BOD reset trip level and continues to decline to the level at which POR is asserted (nominally 1 V), the BODR bit is cleared. If the VDD(REG)(3V3) voltage rises continuously from below 1 V to a level above the BOD reset trip level, the BODR will be set to 1. This bit is cleared only by software or POR. Note: Only in the case where a reset occurs and the POR = 0, the BODR bit indicates if the VDD(REG)(3V3) voltage was below the BOD reset trip level or not.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 4,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            },
    +            "SCS": {
    +              "description": "System control and status",
    +              "offset": 416,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESERVED": {
    +                    "description": "Reserved. User software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 7,
    +                    "size": 25
    +                  },
    +                  "OSCRANGE": {
    +                    "description": "Main oscillator range select.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "LOW": {
    +                            "description": "Low. The frequency range of the main oscillator is 1 MHz to 20 MHz.",
    +                            "value": 0
    +                          },
    +                          "HIGH": {
    +                            "description": "High. The frequency range of the main oscillator is 15 MHz to 25 MHz.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OSCEN": {
    +                    "description": "Main oscillator enable.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED": {
    +                            "description": "Disabled. The main oscillator is disabled.",
    +                            "value": 0
    +                          },
    +                          "ENABLED": {
    +                            "description": "Enabled.The main oscillator is enabled, and will start up if the correct external circuitry is connected to the XTAL1 and XTAL2 pins.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OSCSTAT": {
    +                    "description": "Main oscillator status.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NOT_READY": {
    +                            "description": "Not ready. The main oscillator is not ready to be used as a clock source.",
    +                            "value": 0
    +                          },
    +                          "READY": {
    +                            "description": "Ready. The main oscillator is ready to be used as a clock source. The main oscillator must be enabled via the OSCEN bit.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PCLKSEL0": {
    +              "description": "Peripheral Clock Selection register 0.",
    +              "offset": 424,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PCLK_WDT": {
    +                    "description": "Peripheral clock selection for WDT.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_8": {
    +                            "description": "CCLK div 8. PCLK_peripheral = CCLK/8",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PCLK_TIMER0": {
    +                    "description": "Peripheral clock selection for TIMER0.",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_8": {
    +                            "description": "CCLK div 8. PCLK_peripheral = CCLK/8",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PCLK_TIMER1": {
    +                    "description": "Peripheral clock selection for TIMER1.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_8": {
    +                            "description": "CCLK div 8. PCLK_peripheral = CCLK/8",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PCLK_UART0": {
    +                    "description": "Peripheral clock selection for UART0.",
    +                    "offset": 6,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_8": {
    +                            "description": "CCLK div 8. PCLK_peripheral = CCLK/8",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PCLK_UART1": {
    +                    "description": "Peripheral clock selection for UART1.",
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_8": {
    +                            "description": "CCLK div 8. PCLK_peripheral = CCLK/8",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "PCLK_PWM1": {
    +                    "description": "Peripheral clock selection for PWM1.",
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_8": {
    +                            "description": "CCLK div 8. PCLK_peripheral = CCLK/8",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PCLK_I2C0": {
    +                    "description": "Peripheral clock selection for I2C0.",
    +                    "offset": 14,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_8": {
    +                            "description": "CCLK div 8. PCLK_peripheral = CCLK/8",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PCLK_SPI": {
    +                    "description": "Peripheral clock selection for SPI.",
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_8": {
    +                            "description": "CCLK div 8. PCLK_peripheral = CCLK/8",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PCLK_SSP1": {
    +                    "description": "Peripheral clock selection for SSP1.",
    +                    "offset": 20,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_8": {
    +                            "description": "CCLK div 8. PCLK_peripheral = CCLK/8",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PCLK_DAC": {
    +                    "description": "Peripheral clock selection for DAC.",
    +                    "offset": 22,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_8": {
    +                            "description": "CCLK div 8. PCLK_peripheral = CCLK/8",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PCLK_ADC": {
    +                    "description": "Peripheral clock selection for ADC.",
    +                    "offset": 24,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_8": {
    +                            "description": "CCLK div 8. PCLK_peripheral = CCLK/8",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PCLK_CAN1": {
    +                    "description": "Peripheral clock selection for CAN1.PCLK_CAN1 and PCLK_CAN2 must have the same PCLK divide value when the CAN function is used.",
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_6": {
    +                            "description": "CCLK div 6. PCLK_peripheral = CCLK/6.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PCLK_CAN2": {
    +                    "description": "Peripheral clock selection for CAN2.PCLK_CAN1 and PCLK_CAN2 must have the same PCLK divide value when the CAN function is used.",
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_6": {
    +                            "description": "CCLK div 6. PCLK_peripheral = CCLK/6,",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PCLK_ACF": {
    +                    "description": "Peripheral clock selection for CAN acceptance filtering.PCLK_CAN1 and PCLK_CAN2 must have the same PCLK divide value when the CAN function is used.",
    +                    "offset": 30,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_6": {
    +                            "description": "CCLK div 6. PCLK_peripheral = CCLK/6",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PCLKSEL1": {
    +              "description": "Peripheral Clock Selection register 1.",
    +              "offset": 428,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PCLK_QEI": {
    +                    "description": "Peripheral clock selection for the Quadrature Encoder Interface.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_8": {
    +                            "description": "CCLK div 8. PCLK_peripheral = CCLK/8",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PCLK_GPIOINT": {
    +                    "description": "Peripheral clock selection for GPIO interrupts.",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_8": {
    +                            "description": "CCLK div 8. PCLK_peripheral = CCLK/8",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PCLK_PCB": {
    +                    "description": "Peripheral clock selection for the Pin Connect block.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_8": {
    +                            "description": "CCLK div 8. PCLK_peripheral = CCLK/8",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PCLK_I2C1": {
    +                    "description": "Peripheral clock selection for I2C1.",
    +                    "offset": 6,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_8": {
    +                            "description": "CCLK div 8. PCLK_peripheral = CCLK/8",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "PCLK_SSP0": {
    +                    "description": "Peripheral clock selection for SSP0.",
    +                    "offset": 10,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_8": {
    +                            "description": "CCLK div 8. PCLK_peripheral = CCLK/8",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PCLK_TIMER2": {
    +                    "description": "Peripheral clock selection for TIMER2.",
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_8": {
    +                            "description": "CCLK div 8. PCLK_peripheral = CCLK/8",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PCLK_TIMER3": {
    +                    "description": "Peripheral clock selection for TIMER3.",
    +                    "offset": 14,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_8": {
    +                            "description": "CCLK div 8. PCLK_peripheral = CCLK/8",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PCLK_UART2": {
    +                    "description": "Peripheral clock selection for UART2.",
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_8": {
    +                            "description": "CCLK div 8. PCLK_peripheral = CCLK/8",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PCLK_UART3": {
    +                    "description": "Peripheral clock selection for UART3.",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_8": {
    +                            "description": "CCLK div 8. PCLK_peripheral = CCLK/8",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PCLK_I2C2": {
    +                    "description": "Peripheral clock selection for I2C2.",
    +                    "offset": 20,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_8": {
    +                            "description": "CCLK div 8. PCLK_peripheral = CCLK/8",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PCLK_I2S": {
    +                    "description": "Peripheral clock selection for I2S.",
    +                    "offset": 22,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_8": {
    +                            "description": "CCLK div 8. PCLK_peripheral = CCLK/8",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PCLK_RIT": {
    +                    "description": "Peripheral clock selection for Repetitive Interrupt Timer.",
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_8": {
    +                            "description": "CCLK div 8. PCLK_peripheral = CCLK/8",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PCLK_SYSCON": {
    +                    "description": "Peripheral clock selection for the System Control block.",
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_8": {
    +                            "description": "CCLK div 8. PCLK_peripheral = CCLK/8",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PCLK_MC": {
    +                    "description": "Peripheral clock selection for the Motor Control PWM.",
    +                    "offset": 30,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CCLK_DIV_4": {
    +                            "description": "CCLK div 4. PCLK_peripheral = CCLK/4",
    +                            "value": 0
    +                          },
    +                          "CCLK": {
    +                            "description": "CCLK. PCLK_peripheral = CCLK",
    +                            "value": 1
    +                          },
    +                          "CCLK_DIV_2": {
    +                            "description": "CCLK div 2. PCLK_peripheral = CCLK/2",
    +                            "value": 2
    +                          },
    +                          "CCLK_DIV_8": {
    +                            "description": "CCLK div 8. PCLK_peripheral = CCLK/8",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "USBINTST": {
    +              "description": "USB Interrupt Status",
    +              "offset": 448,
    +              "size": 32,
    +              "reset_value": 2147483648,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "USB_INT_REQ_LP": {
    +                    "description": "Low priority interrupt line status. This bit is read-only.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "USB_INT_REQ_HP": {
    +                    "description": "High priority interrupt line status. This bit is read-only.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "USB_INT_REQ_DMA": {
    +                    "description": "DMA interrupt line status. This bit is read-only.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "USB_HOST_INT": {
    +                    "description": "USB host interrupt line status. This bit is read-only.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "USB_ATX_INT": {
    +                    "description": "External ATX interrupt line status. This bit is read-only.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "USB_OTG_INT": {
    +                    "description": "OTG interrupt line status. This bit is read-only.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "USB_I2C_INT": {
    +                    "description": "I2C module interrupt line status. This bit is read-only.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 9,
    +                    "size": 22
    +                  },
    +                  "USB_NEED_CLK": {
    +                    "description": "USB need clock indicator. This bit is read-only. This bit is set to 1 when USB activity or a change of state on the USB data pins is detected, and it indicates that a PLL supplied clock of 48 MHz is needed. Once USB_NEED_CLK becomes one, it resets to zero 5 ms after the last packet has been received/sent, or 2 ms after the Suspend Change (SUS_CH) interrupt has occurred. A change of this bit from 0 to 1 can wake up the microcontroller if activity on the USB bus is selected to wake up the part from the Power-down mode (see Section 4.7.9 Wake-up from Reduced Power Modes for details). Also see Section 4.5.8 PLLs and Power-down mode and Section 4.7.10 Power Control for Peripherals register (PCONP - 0x400F C0C4) for considerations about the PLL and invoking the Power-down mode. This bit is read-only.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EN_USB_INTS": {
    +                    "description": "Enable all USB interrupts. When this bit is cleared, the NVIC does not see the ORed output of the USB interrupt lines.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMACREQSEL": {
    +              "description": "Selects between alternative requests on DMA channels 0 through 7 and 10 through 15",
    +              "offset": 452,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMASEL08": {
    +                    "description": "Selects the DMA request for GPDMA input 8: 0 - uart0 tx  1 - Timer 0 match 0 is selected.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DMASEL09": {
    +                    "description": "Selects the DMA request for GPDMA input 9: 0 - uart0 rx 1 - Timer 0 match 1 is selected.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DMASEL10": {
    +                    "description": "Selects the DMA request for GPDMA input 10: 0 - uart1 tx  is selected. 1 - Timer 1 match 0 is selected.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DMASEL11": {
    +                    "description": "Selects the DMA request for GPDMA input 11: 0 - uart1 rx  is selected. 1 - Timer 1 match 1 is selected.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DMASEL12": {
    +                    "description": "Selects the DMA request for GPDMA input 12: 0 - uart2 tx  is selected. 1 - Timer 2 match 0 is selected.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DMASEL13": {
    +                    "description": "Selects the DMA request for GPDMA input 13: 0 - uart2 rx  is selected. 1 - Timer 2 match 1 is selected.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "DMASEL14": {
    +                    "description": "Selects the DMA request for GPDMA input 14: 0 - uart3 tx  is selected. 1 - I2S channel 0 is selected.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DMASEL15": {
    +                    "description": "Selects the DMA request for GPDMA input 15: 0 - uart3 rx is selected. 1 - I2S channel 1 is selected.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "CLKOUTCFG": {
    +              "description": "Clock Output Configuration Register",
    +              "offset": 456,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLKOUTSEL": {
    +                    "description": "Selects the clock source for the CLKOUT function. Other values are reserved. Do not use.",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SELECTS_THE_CPU_CLOC": {
    +                            "description": "Selects the CPU clock as the CLKOUT source.",
    +                            "value": 0
    +                          },
    +                          "SELECTS_THE_MAIN_OSC": {
    +                            "description": "Selects the main oscillator as the CLKOUT source.",
    +                            "value": 1
    +                          },
    +                          "SELECTS_THE_INTERNAL": {
    +                            "description": "Selects the Internal RC oscillator as the CLKOUT source.",
    +                            "value": 2
    +                          },
    +                          "SELECTS_THE_USB_CLOC": {
    +                            "description": "Selects the USB clock as the CLKOUT source.",
    +                            "value": 3
    +                          },
    +                          "SELECTS_THE_RTC_OSCI": {
    +                            "description": "Selects the RTC oscillator as the CLKOUT source.",
    +                            "value": 4
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CLKOUTDIV": {
    +                    "description": "Integer value to divide the output clock by, minus one. 0 = Clock is divided by 1 1 = Clock is divided by 2. 2 = Clock is divided by 3. ... 15 = Clock is divided by 16.",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "CLKOUT_EN": {
    +                    "description": "CLKOUT enable control, allows switching the CLKOUT source without glitches. Clear to stop CLKOUT on the next falling edge. Set to enable CLKOUT.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CLKOUT_ACT": {
    +                    "description": "CLKOUT activity indication. Reads as 1 when CLKOUT is enabled. Read as 0 when CLKOUT has been disabled via the CLKOUT_EN bit and the clock has completed being stopped.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 10,
    +                    "size": 22
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "QEI": {
    +        "description": "Quadrature Encoder Interface (QEI) ",
    +        "children": {
    +          "registers": {
    +            "CON": {
    +              "description": "Control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "RESP": {
    +                    "description": "Reset position counter. When set = 1, resets the position counter to all zeros. Autoclears when the position counter is cleared.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RESPI": {
    +                    "description": "Reset position counter on index. When set = 1, resets the position counter to all zeros once only the first time an index pulse occurs. Autoclears when the position counter is cleared.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RESV": {
    +                    "description": "Reset velocity. When set = 1, resets the velocity counter to all zeros, reloads the velocity timer, and presets the velocity compare register. Autoclears when the velocity counter is cleared.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RESI": {
    +                    "description": "Reset index counter. When set = 1, resets the index counter to all zeros. Autoclears when the index counter is cleared.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 4,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            },
    +            "CONF": {
    +              "description": "Configuration register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DIRINV": {
    +                    "description": "Direction invert. When 1, complements the DIR bit.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SIGMODE": {
    +                    "description": "Signal Mode. When 0, PhA and PhB function as quadrature encoder inputs. When 1, PhA functions as the direction signal and PhB functions as the clock signal.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CAPMODE": {
    +                    "description": "Capture Mode. When 0, only PhA edges are counted (2X). When 1, BOTH PhA and PhB edges are counted (4X), increasing resolution but decreasing range.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "INVINX": {
    +                    "description": "Invert Index. When 1, inverts the sense of the index input.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CRESPI": {
    +                    "description": "Continuously reset the position counter on index. When 1, resets the position counter to all zeros whenever an index pulse occurs after the next position increase (recalibration).",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 20,
    +                    "size": 12
    +                  },
    +                  "INXGATE": {
    +                    "description": "Index gating configuration: When INXGATE[16] = 1, pass the index when PHA = 1 and PHB = 0, otherwise block index. When INXGATE[17] = 1, pass the index when PHA = 1 and PHB = 1, otherwise block index. When INXGATE[18] = 1, pass the index when PHA = 0 and PHB = 1, otherwise block index. When INXGATE[19] = 1, pass the index when PHA = 0 and PHB = 0, otherwise block index.",
    +                    "offset": 16,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "STAT": {
    +              "description": "Status register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DIR": {
    +                    "description": "Direction bit. In combination with DIRINV bit indicates forward or reverse direction. See Table 597.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 1,
    +                    "size": 31
    +                  }
    +                }
    +              }
    +            },
    +            "POS": {
    +              "description": "Position register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "POS": {
    +                    "description": "Current position value.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MAXPOS": {
    +              "description": "Maximum position register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MAXPOS": {
    +                    "description": "Current maximum position value.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CMPOS0": {
    +              "description": "Position compare register 0",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PCMP0": {
    +                    "description": "Position compare value 0.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CMPOS1": {
    +              "description": "Position compare register 1",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PCMP1": {
    +                    "description": "Position compare value 1.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CMPOS2": {
    +              "description": "Position compare register 2",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PCMP2": {
    +                    "description": "Position compare value 2.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "INXCNT": {
    +              "description": "Index count register 0",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ENCPOS": {
    +                    "description": "Current index counter value.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "INXCMP0": {
    +              "description": "Index compare register 0",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICMP0": {
    +                    "description": "Index compare value 0.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "LOAD": {
    +              "description": "Velocity timer reload register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VELLOAD": {
    +                    "description": "Current velocity timer load value.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "TIME": {
    +              "description": "Velocity timer register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "VELVAL": {
    +                    "description": "Current velocity timer value.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "VEL": {
    +              "description": "Velocity counter register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "VELPC": {
    +                    "description": "Current velocity pulse count.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CAP": {
    +              "description": "Velocity capture register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "VELCAP": {
    +                    "description": "Last velocity capture.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "VELCOMP": {
    +              "description": "Velocity compare register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VELPC": {
    +                    "description": "Compare velocity pulse count.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "FILTER": {
    +              "description": "Digital filter register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FILTA": {
    +                    "description": "Digital filter sampling delay.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "INTSTAT": {
    +              "description": "Interrupt status register",
    +              "offset": 4064,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INX_INT": {
    +                    "description": "Indicates that an index pulse was detected.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TIM_INT": {
    +                    "description": "Indicates that a velocity timer overflow occurred",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "VELC_INT": {
    +                    "description": "Indicates that captured velocity is less than compare velocity.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DIR_INT": {
    +                    "description": "Indicates that a change of direction was detected.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ERR_INT": {
    +                    "description": "Indicates that an encoder phase error was detected.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ENCLK_INT": {
    +                    "description": "Indicates that and encoder clock pulse was detected.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "POS0_INT": {
    +                    "description": "Indicates that the position 0 compare value is equal to the current position.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "POS1_INT": {
    +                    "description": "Indicates that the position 1compare value is equal to the current position.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "POS2_INT": {
    +                    "description": "Indicates that the position 2 compare value is equal to the current position.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "REV0_INT": {
    +                    "description": "Indicates that the index compare 0 value is equal to the current index count.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "POS0REV_INT": {
    +                    "description": "Combined position 0 and revolution count interrupt. Set when both the POS0_Int bit is set and the REV0_Int is set.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "POS1REV_INT": {
    +                    "description": "Combined position 1 and revolution count interrupt. Set when both the POS1_Int bit is set and the REV1_Int is set.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "POS2REV_INT": {
    +                    "description": "Combined position 2 and revolution count interrupt. Set when both the POS2_Int bit is set and the REV2_Int is set.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "REV1_INT": {
    +                    "description": "Indicates that the index compare 1value is equal to the current index count.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "REV2_INT": {
    +                    "description": "Indicates that the index compare 2 value is equal to the current index count.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "MAXPOS_INT": {
    +                    "description": "Indicates that the current position count goes through the MAXPOS value to zero in the forward direction, or through zero to MAXPOS in the reverse direction.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SET": {
    +              "description": "Interrupt status set register",
    +              "offset": 4076,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "INX_INT": {
    +                    "description": "Writing a 1 sets the INX_Int bit in QEIINTSTAT.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TIM_INT": {
    +                    "description": "Writing a 1 sets the TIN_Int bit in QEIINTSTAT.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "VELC_INT": {
    +                    "description": "Writing a 1 sets the VELC_Int bit in QEIINTSTAT.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DIR_INT": {
    +                    "description": "Writing a 1 sets the DIR_Int bit in QEIINTSTAT.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ERR_INT": {
    +                    "description": "Writing a 1 sets the ERR_Int bit in QEIINTSTAT.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ENCLK_INT": {
    +                    "description": "Writing a 1 sets the ENCLK_Int bit in QEIINTSTAT.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "POS0_INT": {
    +                    "description": "Writing a 1 sets the POS0_Int bit in QEIINTSTAT.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "POS1_INT": {
    +                    "description": "Writing a 1 sets the POS1_Int bit in QEIINTSTAT.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "POS2_INT": {
    +                    "description": "Writing a 1 sets the POS2_Int bit in QEIINTSTAT.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "REV0_INT": {
    +                    "description": "Writing a 1 sets the REV0_Int bit in QEIINTSTAT.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "POS0REV_INT": {
    +                    "description": "Writing a 1 sets the POS0REV_Int bit in QEIINTSTAT.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "POS1REV_INT": {
    +                    "description": "Writing a 1 sets the POS1REV_Int bit in QEIINTSTAT.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "POS2REV_INT": {
    +                    "description": "Writing a 1 sets the POS2REV_Int bit in QEIINTSTAT.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "REV1_INT": {
    +                    "description": "Writing a 1 sets the REV1_Int bit in QEIINTSTAT.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "REV2_INT": {
    +                    "description": "Writing a 1 sets the REV2_Int bit in QEIINTSTAT.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "MAXPOS_INT": {
    +                    "description": "Writing a 1 sets the MAXPOS_Int bit in QEIINTSTAT.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CLR": {
    +              "description": "Interrupt status clear register",
    +              "offset": 4072,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "INX_INT": {
    +                    "description": "Writing a 1 clears the INX_Int bit in QEIINTSTAT.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TIM_INT": {
    +                    "description": "Writing a 1 clears the TIN_Int bit in QEIINTSTAT.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "VELC_INT": {
    +                    "description": "Writing a 1 clears the VELC_Int bit in QEIINTSTAT.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DIR_INT": {
    +                    "description": "Writing a 1 clears the DIR_Int bit in QEIINTSTAT.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ERR_INT": {
    +                    "description": "Writing a 1 clears the ERR_Int bit in QEIINTSTAT.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ENCLK_INT": {
    +                    "description": "Writing a 1 clears the ENCLK_Int bit in QEIINTSTAT.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "POS0_INT": {
    +                    "description": "Writing a 1 clears the POS0_Int bit in QEIINTSTAT.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "POS1_INT": {
    +                    "description": "Writing a 1 clears the POS1_Int bit in QEIINTSTAT.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "POS2_INT": {
    +                    "description": "Writing a 1 clears the POS2_Int bit in QEIINTSTAT.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "REV0_INT": {
    +                    "description": "Writing a 1 clears the REV0_Int bit in QEIINTSTAT.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "POS0REV_INT": {
    +                    "description": "Writing a 1 clears the POS0REV_Int bit in QEIINTSTAT.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "POS1REV_INT": {
    +                    "description": "Writing a 1 clears the POS1REV_Int bit in QEIINTSTAT.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "POS2REV_INT": {
    +                    "description": "Writing a 1 clears the POS2REV_Int bit in QEIINTSTAT.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "REV1_INT": {
    +                    "description": "Writing a 1 clears the REV1_Int bit in QEIINTSTAT.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "REV2_INT": {
    +                    "description": "Writing a 1 clears the REV2_Int bit in QEIINTSTAT.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "MAXPOS_INT": {
    +                    "description": "Writing a 1 clears the MAXPOS_Int bit in QEIINTSTAT.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "IE": {
    +              "description": "Interrupt enable register",
    +              "offset": 4068,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "INX_INT": {
    +                    "description": "When 1, the INX_Int interrupt is enabled.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TIM_INT": {
    +                    "description": "When 1, the TIN_Int interrupt is enabled.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "VELC_INT": {
    +                    "description": "When 1, the VELC_Int interrupt is enabled.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DIR_INT": {
    +                    "description": "When 1, the DIR_Int interrupt is enabled.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ERR_INT": {
    +                    "description": "When 1, the ERR_Int interrupt is enabled.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ENCLK_INT": {
    +                    "description": "When 1, the ENCLK_Int interrupt is enabled.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "POS0_INT": {
    +                    "description": "When 1, the POS0_Int interrupt is enabled.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "POS1_INT": {
    +                    "description": "When 1, the POS1_Int interrupt is enabled.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "POS2_INT": {
    +                    "description": "When 1, the POS2_Int interrupt is enabled.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "REV0_INT": {
    +                    "description": "When 1, the REV0_Int interrupt is enabled.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "POS0REV_INT": {
    +                    "description": "When 1, the POS0REV_Int interrupt is enabled.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "POS1REV_INT": {
    +                    "description": "When 1, the POS1REV_Int interrupt is enabled.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "POS2REV_INT": {
    +                    "description": "When 1, the POS2REV_Int interrupt is enabled.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "REV1_INT": {
    +                    "description": "When 1, the REV1_Int interrupt is enabled.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "REV2_INT": {
    +                    "description": "When 1, the REV2_Int interrupt is enabled.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "MAXPOS_INT": {
    +                    "description": "When 1, the MAXPOS_Int interrupt is enabled.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "IES": {
    +              "description": "Interrupt enable set register",
    +              "offset": 4060,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "INX_INT": {
    +                    "description": "Writing a 1 enables the INX_Int interrupt in the QEIIE register.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TIM_INT": {
    +                    "description": "Writing a 1 enables the TIN_Int interrupt in the QEIIE register.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "VELC_INT": {
    +                    "description": "Writing a 1 enables the VELC_Int interrupt in the QEIIE register.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DIR_INT": {
    +                    "description": "Writing a 1 enables the DIR_Int interrupt in the QEIIE register.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ERR_INT": {
    +                    "description": "Writing a 1 enables the ERR_Int interrupt in the QEIIE register.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ENCLK_INT": {
    +                    "description": "Writing a 1 enables the ENCLK_Int interrupt in the QEIIE register.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "POS0_INT": {
    +                    "description": "Writing a 1 enables the POS0_Int interrupt in the QEIIE register.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "POS1_INT": {
    +                    "description": "Writing a 1 enables the POS1_Int interrupt in the QEIIE register.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "POS2_INT": {
    +                    "description": "Writing a 1 enables the POS2_Int interrupt in the QEIIE register.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "REV0_INT": {
    +                    "description": "Writing a 1 enables the REV0_Int interrupt in the QEIIE register.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "POS0REV_INT": {
    +                    "description": "Writing a 1 enables the POS0REV_Int interrupt in the QEIIE register.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "POS1REV_INT": {
    +                    "description": "Writing a 1 enables the POS1REV_Int interrupt in the QEIIE register.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "POS2REV_INT": {
    +                    "description": "Writing a 1 enables the POS2REV_Int interrupt in the QEIIE register.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "REV1_INT": {
    +                    "description": "Writing a 1 enables the REV1_Int interrupt in the QEIIE register.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "REV2_INT": {
    +                    "description": "Writing a 1 enables the REV2_Int interrupt in the QEIIE register.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "MAXPOS_INT": {
    +                    "description": "Writing a 1 enables the MAXPOS_Int interrupt in the QEIIE register.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "IEC": {
    +              "description": "Interrupt enable clear register",
    +              "offset": 4056,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "INX_INT": {
    +                    "description": "Writing a 1 disables the INX_Int interrupt in the QEIIE register.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TIM_INT": {
    +                    "description": "Writing a 1 disables the TIN_Int interrupt in the QEIIE register.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "VELC_INT": {
    +                    "description": "Writing a 1 disables the VELC_Int interrupt in the QEIIE register.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DIR_INT": {
    +                    "description": "Writing a 1 disables the DIR_Int interrupt in the QEIIE register.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ERR_INT": {
    +                    "description": "Writing a 1 disables the ERR_Int interrupt in the QEIIE register.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ENCLK_INT": {
    +                    "description": "Writing a 1 disables the ENCLK_Int interrupt in the QEIIE register.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "POS0_INT": {
    +                    "description": "Writing a 1 disables the POS0_Int interrupt in the QEIIE register.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "POS1_INT": {
    +                    "description": "Writing a 1 disables the POS1_Int interrupt in the QEIIE register.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "POS2_INT": {
    +                    "description": "Writing a 1 disables the POS2_Int interrupt in the QEIIE register.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "REV0_INT": {
    +                    "description": "Writing a 1 disables the REV0_Int interrupt in the QEIIE register.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "POS0REV_INT": {
    +                    "description": "Writing a 1 disables the POS0REV_Int interrupt in the QEIIE register.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "POS1REV_INT": {
    +                    "description": "Writing a 1 disables the POS1REV_Int interrupt in the QEIIE register.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "POS2REV_INT": {
    +                    "description": "Writing a 1 disables the POS2REV_Int interrupt in the QEIIE register.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "REV1_INT": {
    +                    "description": "Writing a 1 disables the REV1_Int interrupt in the QEIIE register.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "REV2_INT": {
    +                    "description": "Writing a 1 disables the REV2_Int interrupt in the QEIIE register.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "MAXPOS_INT": {
    +                    "description": "Writing a 1 disables the MAXPOS_Int interrupt in the QEIIE register.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved. Read value is undefined, only zero should be written.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "MCPWM": {
    +        "description": "Motor Control PWM",
    +        "children": {
    +          "registers": {
    +            "CON": {
    +              "description": "PWM Control read address",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RUN0": {
    +                    "description": "Stops/starts timer channel 0.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "STOP_": {
    +                            "description": "Stop.",
    +                            "value": 0
    +                          },
    +                          "RUN_": {
    +                            "description": "Run.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CENTER0": {
    +                    "description": "Edge/center aligned operation for channel 0.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "EDGE_ALIGNED_": {
    +                            "description": "Edge-aligned.",
    +                            "value": 0
    +                          },
    +                          "CENTER_ALIGNED_": {
    +                            "description": "Center-aligned.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "POLA0": {
    +                    "description": "Selects polarity of the MCOA0 and MCOB0 pins.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PASSIVE_STATE_IS_LOW": {
    +                            "description": "Passive state is LOW, active state is HIGH.",
    +                            "value": 0
    +                          },
    +                          "PASSIVE_STATE_IS_HIG": {
    +                            "description": "Passive state is HIGH, active state is LOW.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DTE0": {
    +                    "description": "Controls the dead-time feature for channel 0.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DEAD_TIME_DISABLED_": {
    +                            "description": "Dead-time disabled.",
    +                            "value": 0
    +                          },
    +                          "DEAD_TIME_ENABLED_": {
    +                            "description": "Dead-time enabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DISUP0": {
    +                    "description": "Enable/disable updates of functional registers for channel 0 (see Section 24.8.2).",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "UPDATE": {
    +                            "description": "Functional registers are updated from the write registers at the end of each PWM cycle.",
    +                            "value": 0
    +                          },
    +                          "NOUPDATE": {
    +                            "description": "Functional registers remain the same as long as the timer is running.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 21,
    +                    "size": 8
    +                  },
    +                  "RUN1": {
    +                    "description": "Stops/starts timer channel 1.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "STOP_": {
    +                            "description": "Stop.",
    +                            "value": 0
    +                          },
    +                          "RUN_": {
    +                            "description": "Run.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CENTER1": {
    +                    "description": "Edge/center aligned operation for channel 1.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "EDGE_ALIGNED_": {
    +                            "description": "Edge-aligned.",
    +                            "value": 0
    +                          },
    +                          "CENTER_ALIGNED_": {
    +                            "description": "Center-aligned.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "POLA1": {
    +                    "description": "Selects polarity of the MCOA1 and MCOB1 pins.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PASSIVE_STATE_IS_LOW": {
    +                            "description": "Passive state is LOW, active state is HIGH.",
    +                            "value": 0
    +                          },
    +                          "PASSIVE_STATE_IS_HIG": {
    +                            "description": "Passive state is HIGH, active state is LOW.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DTE1": {
    +                    "description": "Controls the dead-time feature for channel 1.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DEAD_TIME_DISABLED_": {
    +                            "description": "Dead-time disabled.",
    +                            "value": 0
    +                          },
    +                          "DEAD_TIME_ENABLED_": {
    +                            "description": "Dead-time enabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DISUP1": {
    +                    "description": "Enable/disable updates of functional registers for channel 1 (see Section 24.8.2).",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "UPDATE": {
    +                            "description": "Functional registers are updated from the write registers at the end of each PWM cycle.",
    +                            "value": 0
    +                          },
    +                          "NOUPDATE": {
    +                            "description": "Functional registers remain the same as long as the timer is running.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RUN2": {
    +                    "description": "Stops/starts timer channel 2.",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "STOP_": {
    +                            "description": "Stop.",
    +                            "value": 0
    +                          },
    +                          "RUN_": {
    +                            "description": "Run.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CENTER2": {
    +                    "description": "Edge/center aligned operation for channel 2.",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "EDGE_ALIGNED_": {
    +                            "description": "Edge-aligned.",
    +                            "value": 0
    +                          },
    +                          "CENTER_ALIGNED_": {
    +                            "description": "Center-aligned.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "POLA2": {
    +                    "description": "Selects polarity of the MCOA2 and MCOB2 pins.",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PASSIVE_STATE_IS_LOW": {
    +                            "description": "Passive state is LOW, active state is HIGH.",
    +                            "value": 0
    +                          },
    +                          "PASSIVE_STATE_IS_HIG": {
    +                            "description": "Passive state is HIGH, active state is LOW.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DTE2": {
    +                    "description": "Controls the dead-time feature for channel 1.",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DEAD_TIME_DISABLED_": {
    +                            "description": "Dead-time disabled.",
    +                            "value": 0
    +                          },
    +                          "DEAD_TIME_ENABLED_": {
    +                            "description": "Dead-time enabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DISUP2": {
    +                    "description": "Enable/disable updates of functional registers for channel 2 (see Section 24.8.2).",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "UPDATE": {
    +                            "description": "Functional registers are updated from the write registers at the end of each PWM cycle.",
    +                            "value": 0
    +                          },
    +                          "NOUPDATE": {
    +                            "description": "Functional registers remain the same as long as the timer is running.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INVBDC": {
    +                    "description": "Controls the polarity of the MCOB outputs for all 3 channels. This bit is typically set to 1 only in 3-phase DC mode.",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "OPPOSITE": {
    +                            "description": "The MCOB outputs have opposite polarity from the MCOA outputs (aside from dead time).",
    +                            "value": 0
    +                          },
    +                          "SAME": {
    +                            "description": "The MCOB outputs have the same basic polarity as the MCOA outputs. (see Section 24.8.6)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ACMODE": {
    +                    "description": "3-phase AC mode select (see Section 24.8.7).",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "3_PHASE_AC_MODE_OFF": {
    +                            "description": "3-phase AC-mode off: Each PWM channel uses its own timer-counter and period register.",
    +                            "value": 0
    +                          },
    +                          "3_PHASE_AC_MODE_ON_": {
    +                            "description": "3-phase AC-mode on: All PWM channels use the timer-counter and period register of channel 0.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DCMODE": {
    +                    "description": "3-phase DC mode select (see Section 24.8.6).",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "3_PHASE_DC_MODE_OFF": {
    +                            "description": "3-phase DC mode off: PWM channels are independent (unless bit ACMODE = 1)",
    +                            "value": 0
    +                          },
    +                          "3_PHASE_DC_MODE_ON_": {
    +                            "description": "3-phase DC mode on: The internal MCOA0 output is routed through the CP register (i.e. a mask) register to all six PWM outputs.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CON_SET": {
    +              "description": "PWM Control set address",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "RUN0_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CON register.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CENTER0_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CON register.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "POLA0_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CON register.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DTE0_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CON register.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DISUP0_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CON register.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Writing a one sets the corresponding bit in the CON register.",
    +                    "offset": 21,
    +                    "size": 8
    +                  },
    +                  "RUN1_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CON register.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CENTER1_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CON register.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "POLA1_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CON register.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "DTE1_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CON register.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "DISUP1_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CON register.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "RUN2_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CON register.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "CENTER2_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CON register.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "POLA2_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CON register.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "DTE2_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CON register.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DISUP2_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CON register.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "INVBDC_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CON register.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "ACMODE_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CON register.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "DCMODE_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CON register.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CON_CLR": {
    +              "description": "PWM Control clear address",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "RUN0_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CON register.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CENTER0_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CON register.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "POLA0_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CON register.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DTE0_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CON register.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DISUP0_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CON register.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Writing a one clears the corresponding bit in the CON register.",
    +                    "offset": 21,
    +                    "size": 8
    +                  },
    +                  "RUN1_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CON register.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CENTER1_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CON register.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "POLA1_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CON register.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "DTE1_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CON register.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "DISUP1_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CON register.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "RUN2_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CON register.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "CENTER2_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CON register.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "POLA2_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CON register.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "DTE2_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CON register.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DISUP2_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CON register.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "INVBDC_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CON register.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "ACMOD_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CON register.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "DCMODE_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CON register.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CAPCON": {
    +              "description": "Capture Control read address",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CAP0MCI0_RE": {
    +                    "description": "A 1 in this bit enables a channel 0 capture event on a rising edge on MCI0.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CAP0MCI0_FE": {
    +                    "description": "A 1 in this bit enables a channel 0 capture event on a falling edge on MCI0.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CAP0MCI1_RE": {
    +                    "description": "A 1 in this bit enables a channel 0 capture event on a rising edge on MCI1.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CAP0MCI1_FE": {
    +                    "description": "A 1 in this bit enables a channel 0 capture event on a falling edge on MCI1.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CAP0MCI2_RE": {
    +                    "description": "A 1 in this bit enables a channel 0 capture event on a rising edge on MCI2.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CAP0MCI2_FE": {
    +                    "description": "A 1 in this bit enables a channel 0 capture event on a falling edge on MCI2.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CAP1MCI0_RE": {
    +                    "description": "A 1 in this bit enables a channel 1 capture event on a rising edge on MCI0.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CAP1MCI0_FE": {
    +                    "description": "A 1 in this bit enables a channel 1 capture event on a falling edge on MCI0.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CAP1MCI1_RE": {
    +                    "description": "A 1 in this bit enables a channel 1 capture event on a rising edge on MCI1.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CAP1MCI1_FE": {
    +                    "description": "A 1 in this bit enables a channel 1 capture event on a falling edge on MCI1.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CAP1MCI2_RE": {
    +                    "description": "A 1 in this bit enables a channel 1 capture event on a rising edge on MCI2.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CAP1MCI2_FE": {
    +                    "description": "A 1 in this bit enables a channel 1 capture event on a falling edge on MCI2.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CAP2MCI0_RE": {
    +                    "description": "A 1 in this bit enables a channel 2 capture event on a rising edge on MCI0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CAP2MCI0_FE": {
    +                    "description": "A 1 in this bit enables a channel 2 capture event on a falling edge on MCI0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CAP2MCI1_RE": {
    +                    "description": "A 1 in this bit enables a channel 2 capture event on a rising edge on MCI1.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CAP2MCI1_FE": {
    +                    "description": "A 1 in this bit enables a channel 2 capture event on a falling edge on MCI1.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "CAP2MCI2_RE": {
    +                    "description": "A 1 in this bit enables a channel 2 capture event on a rising edge on MCI2.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "CAP2MCI2_FE": {
    +                    "description": "A 1 in this bit enables a channel 2 capture event on a falling edge on MCI2.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "RT0": {
    +                    "description": "If this bit is 1, TC0 is reset by a channel 0 capture event.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "RT1": {
    +                    "description": "If this bit is 1, TC1 is reset by a channel 1 capture event.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "RT2": {
    +                    "description": "If this bit is 1, TC2 is reset by a channel 2 capture event.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 21,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "CAPCON_SET": {
    +              "description": "Capture Control set address",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "CAP0MCI0_RE_SET": {
    +                    "description": "Writing a one sets the corresponding bits in the CAPCON register.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CAP0MCI0_FE_SET": {
    +                    "description": "Writing a one sets the corresponding bits in the CAPCON register.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CAP0MCI1_RE_SET": {
    +                    "description": "Writing a one sets the corresponding bits in the CAPCON register.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CAP0MCI1_FE_SET": {
    +                    "description": "Writing a one sets the corresponding bits in the CAPCON register.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CAP0MCI2_RE_SET": {
    +                    "description": "Writing a one sets the corresponding bits in the CAPCON register.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CAP0MCI2_FE_SET": {
    +                    "description": "Writing a one sets the corresponding bits in the CAPCON register.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CAP1MCI0_RE_SET": {
    +                    "description": "Writing a one sets the corresponding bits in the CAPCON register.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CAP1MCI0_FE_SET": {
    +                    "description": "Writing a one sets the corresponding bits in the CAPCON register.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CAP1MCI1_RE_SET": {
    +                    "description": "Writing a one sets the corresponding bits in the CAPCON register.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CAP1MCI1_FE_SET": {
    +                    "description": "Writing a one sets the corresponding bits in the CAPCON register.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CAP1MCI2_RE_SET": {
    +                    "description": "Writing a one sets the corresponding bits in the CAPCON register.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CAP1MCI2_FE_SET": {
    +                    "description": "Writing a one sets the corresponding bits in the CAPCON register.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CAP2MCI0_RE_SET": {
    +                    "description": "Writing a one sets the corresponding bits in the CAPCON register.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CAP2MCI0_FE_SET": {
    +                    "description": "Writing a one sets the corresponding bits in the CAPCON register.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CAP2MCI1_RE_SET": {
    +                    "description": "Writing a one sets the corresponding bits in the CAPCON register.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CAP2MCI1_FE_SET": {
    +                    "description": "Writing a one sets the corresponding bits in the CAPCON register.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "CAP2MCI2_RE_SET": {
    +                    "description": "Writing a one sets the corresponding bits in the CAPCON register.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "CAP2MCI2_FE_SET": {
    +                    "description": "Writing a one sets the corresponding bits in the CAPCON register.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "RT0_SET": {
    +                    "description": "Writing a one sets the corresponding bits in the CAPCON register.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "RT1_SET": {
    +                    "description": "Writing a one sets the corresponding bits in the CAPCON register.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "RT2_SET": {
    +                    "description": "Writing a one sets the corresponding bits in the CAPCON register.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 21,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "CAPCON_CLR": {
    +              "description": "Event Control clear address",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "CAP0MCI0_RE_CLR": {
    +                    "description": "Writing a one clears the corresponding bits in the CAPCON register.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CAP0MCI0_FE_CLR": {
    +                    "description": "Writing a one clears the corresponding bits in the CAPCON register.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CAP0MCI1_RE_CLR": {
    +                    "description": "Writing a one clears the corresponding bits in the CAPCON register.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CAP0MCI1_FE_CLR": {
    +                    "description": "Writing a one clears the corresponding bits in the CAPCON register.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CAP0MCI2_RE_CLR": {
    +                    "description": "Writing a one clears the corresponding bits in the CAPCON register.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CAP0MCI2_FE_CLR": {
    +                    "description": "Writing a one clears the corresponding bits in the CAPCON register.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CAP1MCI0_RE_CLR": {
    +                    "description": "Writing a one clears the corresponding bits in the CAPCON register.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CAP1MCI0_FE_CLR": {
    +                    "description": "Writing a one clears the corresponding bits in the CAPCON register.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CAP1MCI1_RE_CLR": {
    +                    "description": "Writing a one clears the corresponding bits in the CAPCON register.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CAP1MCI1_FE_CLR": {
    +                    "description": "Writing a one clears the corresponding bits in the CAPCON register.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CAP1MCI2_RE_CLR": {
    +                    "description": "Writing a one clears the corresponding bits in the CAPCON register.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CAP1MCI2_FE_CLR": {
    +                    "description": "Writing a one clears the corresponding bits in the CAPCON register.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CAP2MCI0_RE_CLR": {
    +                    "description": "Writing a one clears the corresponding bits in the CAPCON register.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CAP2MCI0_FE_CLR": {
    +                    "description": "Writing a one clears the corresponding bits in the CAPCON register.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CAP2MCI1_RE_CLR": {
    +                    "description": "Writing a one clears the corresponding bits in the CAPCON register.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CAP2MCI1_FE_CLR": {
    +                    "description": "Writing a one clears the corresponding bits in the CAPCON register.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "CAP2MCI2_RE_CLR": {
    +                    "description": "Writing a one clears the corresponding bits in the CAPCON register.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "CAP2MCI2_FE_CLR": {
    +                    "description": "Writing a one clears the corresponding bits in the CAPCON register.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "RT0_CLR": {
    +                    "description": "Writing a one clears the corresponding bits in the CAPCON register.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "RT1_CLR": {
    +                    "description": "Writing a one clears the corresponding bits in the CAPCON register.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "RT2_CLR": {
    +                    "description": "Writing a one clears the corresponding bits in the CAPCON register.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 21,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "DT": {
    +              "description": "Dead time register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 1073741823,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DT0": {
    +                    "description": "Dead time for channel 0.[1]",
    +                    "offset": 0,
    +                    "size": 10
    +                  },
    +                  "DT1": {
    +                    "description": "Dead time for channel 1.[2]",
    +                    "offset": 10,
    +                    "size": 10
    +                  },
    +                  "DT2": {
    +                    "description": "Dead time for channel 2.[2]",
    +                    "offset": 20,
    +                    "size": 10
    +                  },
    +                  "RESERVED": {
    +                    "description": "reserved",
    +                    "offset": 30,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CP": {
    +              "description": "Communication Pattern register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CCPA0": {
    +                    "description": "Communication pattern output A, channel 0.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "MCOA0_PASSIVE_": {
    +                            "description": "MCOA0 passive.",
    +                            "value": 0
    +                          },
    +                          "INTERNAL_MCOA0_": {
    +                            "description": "internal MCOA0.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CCPB0": {
    +                    "description": "Communication pattern output B, channel 0.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "MCOB0_PASSIVE_": {
    +                            "description": "MCOB0 passive.",
    +                            "value": 0
    +                          },
    +                          "MCOB0_TRACKS_INTERNA": {
    +                            "description": "MCOB0 tracks internal MCOA0.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CCPA1": {
    +                    "description": "Communication pattern output A, channel 1.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "MCOA1_PASSIVE_": {
    +                            "description": "MCOA1 passive.",
    +                            "value": 0
    +                          },
    +                          "MCOA1_TRACKS_INTERNA": {
    +                            "description": "MCOA1 tracks internal MCOA0.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CCPB1": {
    +                    "description": "Communication pattern output B, channel 1.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "MCOB1_PASSIVE_": {
    +                            "description": "MCOB1 passive.",
    +                            "value": 0
    +                          },
    +                          "MCOB1_TRACKS_INTERNA": {
    +                            "description": "MCOB1 tracks internal MCOA0.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CCPA2": {
    +                    "description": "Communication pattern output A, channel 2.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "MCOA2_PASSIVE_": {
    +                            "description": "MCOA2 passive.",
    +                            "value": 0
    +                          },
    +                          "MCOA2_TRACKS_INTERNA": {
    +                            "description": "MCOA2 tracks internal MCOA0.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CCPB2": {
    +                    "description": "Communication pattern output B, channel 2.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "MCOB2_PASSIVE_": {
    +                            "description": "MCOB2 passive.",
    +                            "value": 0
    +                          },
    +                          "MCOB2_TRACKS_INTERNA": {
    +                            "description": "MCOB2 tracks internal MCOA0.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 6,
    +                    "size": 26
    +                  }
    +                }
    +              }
    +            },
    +            "INTEN": {
    +              "description": "Interrupt Enable read address",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ILIM0": {
    +                    "description": "Limit interrupt for channel 0.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INTERRUPT_DISABLED_": {
    +                            "description": "Interrupt disabled.",
    +                            "value": 0
    +                          },
    +                          "INTERRUPT_ENABLED_": {
    +                            "description": "Interrupt enabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IMAT0": {
    +                    "description": "Match interrupt for channel 0.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INTERRUPT_DISABLED_": {
    +                            "description": "Interrupt disabled.",
    +                            "value": 0
    +                          },
    +                          "INTERRUPT_ENABLED_": {
    +                            "description": "Interrupt enabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ICAP0": {
    +                    "description": "Capture interrupt for channel 0.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INTERRUPT_DISABLED_": {
    +                            "description": "Interrupt disabled.",
    +                            "value": 0
    +                          },
    +                          "INTERRUPT_ENABLED_": {
    +                            "description": "Interrupt enabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "ILIM1": {
    +                    "description": "Limit interrupt for channel 1.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INTERRUPT_DISABLED_": {
    +                            "description": "Interrupt disabled.",
    +                            "value": 0
    +                          },
    +                          "INTERRUPT_ENABLED_": {
    +                            "description": "Interrupt enabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IMAT1": {
    +                    "description": "Match interrupt for channel 1.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INTERRUPT_DISABLED_": {
    +                            "description": "Interrupt disabled.",
    +                            "value": 0
    +                          },
    +                          "INTERRUPT_ENABLED_": {
    +                            "description": "Interrupt enabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ICAP1": {
    +                    "description": "Capture interrupt for channel 1.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INTERRUPT_DISABLED_": {
    +                            "description": "Interrupt disabled.",
    +                            "value": 0
    +                          },
    +                          "INTERRUPT_ENABLED_": {
    +                            "description": "Interrupt enabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ILIM2": {
    +                    "description": "Limit interrupt for channel 2.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INTERRUPT_DISABLED_": {
    +                            "description": "Interrupt disabled.",
    +                            "value": 0
    +                          },
    +                          "INTERRUPT_ENABLED_": {
    +                            "description": "Interrupt enabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IMAT2": {
    +                    "description": "Match interrupt for channel 2.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INTERRUPT_DISABLED_": {
    +                            "description": "Interrupt disabled.",
    +                            "value": 0
    +                          },
    +                          "INTERRUPT_ENABLED_": {
    +                            "description": "Interrupt enabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ICAP2": {
    +                    "description": "Capture interrupt for channel 2.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INTERRUPT_DISABLED_": {
    +                            "description": "Interrupt disabled.",
    +                            "value": 0
    +                          },
    +                          "INTERRUPT_ENABLED_": {
    +                            "description": "Interrupt enabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ABORT": {
    +                    "description": "Fast abort interrupt.",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INTERRUPT_DISABLED_": {
    +                            "description": "Interrupt disabled.",
    +                            "value": 0
    +                          },
    +                          "INTERRUPT_ENABLED_": {
    +                            "description": "Interrupt enabled.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTEN_SET": {
    +              "description": "Interrupt Enable set address",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "ILIM0_SET": {
    +                    "description": "Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "IMAT0_SET": {
    +                    "description": "Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ICAP0_SET": {
    +                    "description": "Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "ILIM1_SET": {
    +                    "description": "Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IMAT1_SET": {
    +                    "description": "Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ICAP1_SET": {
    +                    "description": "Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ILIM2_SET": {
    +                    "description": "Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "IMAT2_SET": {
    +                    "description": "Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ICAP2_SET": {
    +                    "description": "Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ABORT_SET": {
    +                    "description": "Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTEN_CLR": {
    +              "description": "Interrupt Enable clear address",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "ILIM0_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "IMAT0_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ICAP0_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "ILIM1_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IMAT1_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ICAP1_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ILIM2_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "IMAT2_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ICAP2_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ABORT_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTF": {
    +              "description": "Interrupt flags read address",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ILIM0_F": {
    +                    "description": "Limit interrupt flag for channel 0.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "THIS_INTERRUPT_SOURC": {
    +                            "description": "This interrupt source is not contributing to the MCPWM interrupt request.",
    +                            "value": 0
    +                          },
    +                          "IF_THE_CORRESPONDING": {
    +                            "description": "If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IMAT0_F": {
    +                    "description": "Match interrupt flag for channel 0.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "THIS_INTERRUPT_SOURC": {
    +                            "description": "This interrupt source is not contributing to the MCPWM interrupt request.",
    +                            "value": 0
    +                          },
    +                          "IF_THE_CORRESPONDING": {
    +                            "description": "If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ICAP0_F": {
    +                    "description": "Capture interrupt flag for channel 0.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "THIS_INTERRUPT_SOURC": {
    +                            "description": "This interrupt source is not contributing to the MCPWM interrupt request.",
    +                            "value": 0
    +                          },
    +                          "IF_THE_CORRESPONDING": {
    +                            "description": "If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "ILIM1_F": {
    +                    "description": "Limit interrupt flag for channel 1.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "THIS_INTERRUPT_SOURC": {
    +                            "description": "This interrupt source is not contributing to the MCPWM interrupt request.",
    +                            "value": 0
    +                          },
    +                          "IF_THE_CORRESPONDING": {
    +                            "description": "If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IMAT1_F": {
    +                    "description": "Match interrupt flag for channel 1.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "THIS_INTERRUPT_SOURC": {
    +                            "description": "This interrupt source is not contributing to the MCPWM interrupt request.",
    +                            "value": 0
    +                          },
    +                          "IF_THE_CORRESPONDING": {
    +                            "description": "If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ICAP1_F": {
    +                    "description": "Capture interrupt flag for channel 1.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "THIS_INTERRUPT_SOURC": {
    +                            "description": "This interrupt source is not contributing to the MCPWM interrupt request.",
    +                            "value": 0
    +                          },
    +                          "IF_THE_CORRESPONDING": {
    +                            "description": "If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ILIM2_F": {
    +                    "description": "Limit interrupt flag for channel 2.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "THIS_INTERRUPT_SOURC": {
    +                            "description": "This interrupt source is not contributing to the MCPWM interrupt request.",
    +                            "value": 0
    +                          },
    +                          "IF_THE_CORRESPONDING": {
    +                            "description": "If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IMAT2_F": {
    +                    "description": "Match interrupt flag for channel 2.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "THIS_INTERRUPT_SOURC": {
    +                            "description": "This interrupt source is not contributing to the MCPWM interrupt request.",
    +                            "value": 0
    +                          },
    +                          "IF_THE_CORRESPONDING": {
    +                            "description": "If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ICAP2_F": {
    +                    "description": "Capture interrupt flag for channel 2.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "THIS_INTERRUPT_SOURC": {
    +                            "description": "This interrupt source is not contributing to the MCPWM interrupt request.",
    +                            "value": 0
    +                          },
    +                          "IF_THE_CORRESPONDING": {
    +                            "description": "If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ABORT_F": {
    +                    "description": "Fast abort interrupt flag.",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "THIS_INTERRUPT_SOURC": {
    +                            "description": "This interrupt source is not contributing to the MCPWM interrupt request.",
    +                            "value": 0
    +                          },
    +                          "IF_THE_CORRESPONDING": {
    +                            "description": "If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTF_SET": {
    +              "description": "Interrupt flags set address",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "ILIM0_F_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "IMAT0_F_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ICAP0_F_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "ILIM1_F_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IMAT1_F_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ICAP1_F_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ILIM2_F_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "IMAT2_F_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ICAP2_F_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ABORT_F_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTF_CLR": {
    +              "description": "Interrupt flags clear address",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "ILIM0_F_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the INTF register, thus clearing the corresponding interrupt request.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "IMAT0_F_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ICAP0_F_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "ILIM1_F_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IMAT1_F_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ICAP1_F_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ILIM2_F_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "IMAT2_F_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ICAP2_F_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ABORT_F_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNTCON": {
    +              "description": "Count Control read address",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TC0MCI0_RE": {
    +                    "description": "Counter 0 rising edge mode, channel 0.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "A_RISING_EDGE_ON_MCI": {
    +                            "description": "A rising edge on MCI0 does not affect counter 0.",
    +                            "value": 0
    +                          },
    +                          "RISING": {
    +                            "description": "If MODE0 is 1, counter 0 advances on a rising edge on MCI0.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TC0MCI0_FE": {
    +                    "description": "Counter 0 falling edge mode, channel 0.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "A_FALLING_EDGE_ON_MC": {
    +                            "description": "A falling edge on MCI0 does not affect counter 0.",
    +                            "value": 0
    +                          },
    +                          "FALLING": {
    +                            "description": "If MODE0 is 1, counter 0 advances on a falling edge on MCI0.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TC0MCI1_RE": {
    +                    "description": "Counter 0 rising edge mode, channel 1.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "A_RISING_EDGE_ON_MCI": {
    +                            "description": "A rising edge on MCI1 does not affect counter 0.",
    +                            "value": 0
    +                          },
    +                          "RISING": {
    +                            "description": "If MODE0 is 1, counter 0 advances on a rising edge on MCI1.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TC0MCI1_FE": {
    +                    "description": "Counter 0 falling edge mode, channel 1.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "A_FALLING_EDGE_ON_MC": {
    +                            "description": "A falling edge on MCI1 does not affect counter 0.",
    +                            "value": 0
    +                          },
    +                          "FALLING": {
    +                            "description": "If MODE0 is 1, counter 0 advances on a falling edge on MCI1.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TC0MCI2_RE": {
    +                    "description": "Counter 0 rising edge mode, channel 2.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "A_RISING_EDGE_ON_MCI": {
    +                            "description": "A rising edge on MCI0 does not affect counter 0.",
    +                            "value": 0
    +                          },
    +                          "RISING": {
    +                            "description": "If MODE0 is 1, counter 0 advances on a rising edge on MCI2.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TC0MCI2_FE": {
    +                    "description": "Counter 0 falling edge mode, channel 2.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "A_FALLING_EDGE_ON_MC": {
    +                            "description": "A falling edge on MCI0 does not affect counter 0.",
    +                            "value": 0
    +                          },
    +                          "FALLLING": {
    +                            "description": "If MODE0 is 1, counter 0 advances on a falling edge on MCI2.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TC1MCI0_RE": {
    +                    "description": "Counter 1 rising edge mode, channel 0.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "A_RISING_EDGE_ON_MCI": {
    +                            "description": "A rising edge on MCI0 does not affect counter 1.",
    +                            "value": 0
    +                          },
    +                          "RISING": {
    +                            "description": "If MODE1 is 1, counter 1 advances on a rising edge on MCI0.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TC1MCI0_FE": {
    +                    "description": "Counter 1 falling edge mode, channel 0.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "A_FALLING_EDGE_ON_MC": {
    +                            "description": "A falling edge on MCI0 does not affect counter 1.",
    +                            "value": 0
    +                          },
    +                          "FALLING": {
    +                            "description": "If MODE1 is 1, counter 1 advances on a falling edge on MCI0.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TC1MCI1_RE": {
    +                    "description": "Counter 1 rising edge mode, channel 1.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "A_RISING_EDGE_ON_MCI": {
    +                            "description": "A rising edge on MCI1 does not affect counter 1.",
    +                            "value": 0
    +                          },
    +                          "RISING": {
    +                            "description": "If MODE1 is 1, counter 1 advances on a rising edge on MCI1.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TC1MCI1_FE": {
    +                    "description": "Counter 1 falling edge mode, channel 1.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "A_FALLING_EDGE_ON_MC": {
    +                            "description": "A falling edge on MCI0 does not affect counter 1.",
    +                            "value": 0
    +                          },
    +                          "FALLING": {
    +                            "description": "If MODE1 is 1, counter 1 advances on a falling edge on MCI1.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TC1MCI2_RE": {
    +                    "description": "Counter 1 rising edge mode, channel 2.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "A_RISING_EDGE_ON_MCI": {
    +                            "description": "A rising edge on MCI2 does not affect counter 1.",
    +                            "value": 0
    +                          },
    +                          "RISING": {
    +                            "description": "If MODE1 is 1, counter 1 advances on a rising edge on MCI2.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TC1MCI2_FE": {
    +                    "description": "Counter 1 falling edge mode, channel 2.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "A_FALLING_EDGE_ON_MC": {
    +                            "description": "A falling edge on MCI2 does not affect counter 1.",
    +                            "value": 0
    +                          },
    +                          "FALLING": {
    +                            "description": "If MODE1 is 1, counter 1 advances on a falling edge on MCI2.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TC2MCI0_RE": {
    +                    "description": "Counter 2 rising edge mode, channel 0.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "A_RISING_EDGE_ON_MCI": {
    +                            "description": "A rising edge on MCI0 does not affect counter 2.",
    +                            "value": 0
    +                          },
    +                          "RISING": {
    +                            "description": "If MODE2 is 1, counter 2 advances on a rising edge on MCI0.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TC2MCI0_FE": {
    +                    "description": "Counter 2 falling edge mode, channel 0.",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "A_FALLING_EDGE_ON_MC": {
    +                            "description": "A falling edge on MCI0 does not affect counter 2.",
    +                            "value": 0
    +                          },
    +                          "FALLING": {
    +                            "description": "If MODE2 is 1, counter 2 advances on a falling edge on MCI0.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TC2MCI1_RE": {
    +                    "description": "Counter 2 rising edge mode, channel 1.",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "A_RISING_EDGE_ON_MCI": {
    +                            "description": "A rising edge on MCI1 does not affect counter 2.",
    +                            "value": 0
    +                          },
    +                          "RISING": {
    +                            "description": "If MODE2 is 1, counter 2 advances on a rising edge on MCI1.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TC2MCI1_FE": {
    +                    "description": "Counter 2 falling edge mode, channel 1.",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "A_FALLING_EDGE_ON_MC": {
    +                            "description": "A falling edge on MCI1 does not affect counter 2.",
    +                            "value": 0
    +                          },
    +                          "FALLING": {
    +                            "description": "If MODE2 is 1, counter 2 advances on a falling edge on MCI1.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TC2MCI2_RE": {
    +                    "description": "Counter 2 rising edge mode, channel 2.",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "A_RISING_EDGE_ON_MCI": {
    +                            "description": "A rising edge on MCI2 does not affect counter 2.",
    +                            "value": 0
    +                          },
    +                          "RISIING": {
    +                            "description": "If MODE2 is 1, counter 2 advances on a rising edge on MCI2.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TC2MCI2_FE": {
    +                    "description": "Counter 2 falling edge mode, channel 2.",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "A_FALLING_EDGE_ON_MC": {
    +                            "description": "A falling edge on MCI2 does not affect counter 2.",
    +                            "value": 0
    +                          },
    +                          "FALLING": {
    +                            "description": "If MODE2 is 1, counter 2 advances on a falling edge on MCI2.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 18,
    +                    "size": 11
    +                  },
    +                  "CNTR0": {
    +                    "description": "Channel 0 counter/timer mode.",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CHANNEL_0_IS_IN_TIME": {
    +                            "description": "Channel 0 is in timer mode.",
    +                            "value": 0
    +                          },
    +                          "CHANNEL_0_IS_IN_COUN": {
    +                            "description": "Channel 0 is in counter mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CNTR1": {
    +                    "description": "Channel 1 counter/timer mode.",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CHANNEL_1_IS_IN_TIME": {
    +                            "description": "Channel 1 is in timer mode.",
    +                            "value": 0
    +                          },
    +                          "CHANNEL_1_IS_IN_COUN": {
    +                            "description": "Channel 1 is in counter mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CNTR2": {
    +                    "description": "Channel 2 counter/timer mode.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CHANNEL_2_IS_IN_TIME": {
    +                            "description": "Channel 2 is in timer mode.",
    +                            "value": 0
    +                          },
    +                          "CHANNEL_2_IS_IN_COUN": {
    +                            "description": "Channel 2 is in counter mode.",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CNTCON_SET": {
    +              "description": "Count Control set address",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TC0MCI0_RE_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CNTCON register.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TC0MCI0_FE_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CNTCON register.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TC0MCI1_RE_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CNTCON register.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TC0MCI1_FE_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CNTCON register.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TC0MCI2_RE_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CNTCON register.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TC0MCI2_FE_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CNTCON register.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TC1MCI0_RE_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CNTCON register.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TC1MCI0_FE_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CNTCON register.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TC1MCI1_RE_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CNTCON register.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TC1MCI1_FE_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CNTCON register.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TC1MCI2_RE_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CNTCON register.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TC1MCI2_FE_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CNTCON register.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TC2MCI0_RE_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CNTCON register.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TC2MCI0_FE_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CNTCON register.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TC2MCI1_RE_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CNTCON register.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TC2MCI1_FE_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CNTCON register.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TC2MCI2_RE_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CNTCON register.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TC2MCI2_FE_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CNTCON register.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 18,
    +                    "size": 11
    +                  },
    +                  "CNTR0_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CNTCON register.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CNTR1_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CNTCON register.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CNTR2_SET": {
    +                    "description": "Writing a one sets the corresponding bit in the CNTCON register.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNTCON_CLR": {
    +              "description": "Count Control clear address",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TC0MCI0_RE_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CNTCON register.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TC0MCI0_FE_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CNTCON register.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TC0MCI1_RE_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CNTCON register.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TC0MCI1_FE_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CNTCON register.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TC0MCI2_RE": {
    +                    "description": "Writing a one clears the corresponding bit in the CNTCON register.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TC0MCI2_FE_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CNTCON register.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TC1MCI0_RE_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CNTCON register.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TC1MCI0_FE_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CNTCON register.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TC1MCI1_RE_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CNTCON register.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TC1MCI1_FE_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CNTCON register.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TC1MCI2_RE_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CNTCON register.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TC1MCI2_FE_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CNTCON register.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TC2MCI0_RE_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CNTCON register.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TC2MCI0_FE_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CNTCON register.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TC2MCI1_RE_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CNTCON register.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TC2MCI1_FE_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CNTCON register.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TC2MCI2_RE_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CNTCON register.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TC2MCI2_FE_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CNTCON register.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved.",
    +                    "offset": 18,
    +                    "size": 11
    +                  },
    +                  "CNTR0_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CNTCON register.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CNTR1_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CNTCON register.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CNTR2_CLR": {
    +                    "description": "Writing a one clears the corresponding bit in the CNTCON register.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CAP_CLR": {
    +              "description": "Capture clear address",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 0,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "CAP_CLR0": {
    +                    "description": "Writing a 1 to this bit clears the CAP0 register.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CAP_CLR1": {
    +                    "description": "Writing a 1 to this bit clears the CAP1 register.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CAP_CLR2": {
    +                    "description": "Writing a 1 to this bit clears the CAP2 register.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved",
    +                    "offset": 3,
    +                    "size": 29
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "RITIMER": {
    +        "description": "Repetitive Interrupt Timer (RIT) ",
    +        "children": {
    +          "registers": {
    +            "COMPVAL": {
    +              "description": "Compare register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RICOMP": {
    +                    "description": "Compare register. Holds the compare value which is compared to the counter.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MASK": {
    +              "description": "Mask register. This register holds the 32-bit mask value. A 1 written to any bit will force a compare on the corresponding bit of the counter and compare register.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RIMASK": {
    +                    "description": "Mask register. This register holds the 32-bit mask value. A one written to any bit overrides the result of the comparison for the corresponding bit of the counter and compare register (causes the comparison of the register bits to be always true).",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CTRL": {
    +              "description": "Control register.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 12,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RITINT": {
    +                    "description": "Interrupt flag",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "THIS_BIT_IS_SET_TO_1": {
    +                            "description": "This bit is set to 1 by hardware whenever the counter value equals the masked compare value specified by the contents of RICOMPVAL and RIMASK registers. Writing a 1 to this bit will clear it to 0. Writing a 0 has no effect.",
    +                            "value": 1
    +                          },
    +                          "THE_COUNTER_VALUE_DO": {
    +                            "description": "The counter value does not equal the masked compare value.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RITENCLR": {
    +                    "description": "Timer enable clear",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "THE_TIMER_WILL_BE_CL": {
    +                            "description": "The timer will be cleared to 0 whenever the counter value equals the masked compare value specified by the contents of RICOMPVAL and RIMASK registers. This will occur on the same clock that sets the interrupt flag.",
    +                            "value": 1
    +                          },
    +                          "THE_TIMER_WILL_NOT_B": {
    +                            "description": "The timer will not be cleared to 0.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RITENBR": {
    +                    "description": "Timer enable for debug",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "THE_TIMER_IS_HALTED_": {
    +                            "description": "The timer is halted when the processor is halted for debugging.",
    +                            "value": 1
    +                          },
    +                          "DEBUG_HAS_NO_EFFECT_": {
    +                            "description": "Debug has no effect on the timer operation.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RITEN": {
    +                    "description": "Timer enable.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TIMER_ENABLED_THIS_": {
    +                            "description": "Timer enabled. This can be overruled by a debug halt if enabled in bit 2.",
    +                            "value": 1
    +                          },
    +                          "TIMER_DISABLED_": {
    +                            "description": "Timer disabled.",
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 4,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            },
    +            "COUNTER": {
    +              "description": "32-bit counter",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RICOUNTER": {
    +                    "description": "32-bit up counter. Counts continuously unless RITEN bit in RICTRL register is cleared or debug mode is entered (if enabled by the RITNEBR bit in RICTRL). Can be loaded to any value in software.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "I2S": {
    +        "description": "I2S interface",
    +        "children": {
    +          "registers": {
    +            "DAO": {
    +              "description": "I2S Digital Audio Output Register. Contains control bits for the I2S transmit channel.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 34785,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WORDWIDTH": {
    +                    "description": "Selects the number of bytes in data as follows:",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "8_BIT_DATA": {
    +                            "description": "8-bit data",
    +                            "value": 0
    +                          },
    +                          "16_BIT_DATA": {
    +                            "description": "16-bit data",
    +                            "value": 1
    +                          },
    +                          "32_BIT_DATA": {
    +                            "description": "32-bit data",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MONO": {
    +                    "description": "When 1, data is of monaural format. When 0, the data is in stereo format.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STOP": {
    +                    "description": "When 1, disables accesses on FIFOs, places the transmit channel in mute mode.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "When 1, asynchronously resets the transmit channel and FIFO.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "WS_SEL": {
    +                    "description": "When 0, the interface is in master mode. When 1, the interface is in slave mode. See Section 34.7.2 for a summary of useful combinations for this bit with TXMODE.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "WS_HALFPERIOD": {
    +                    "description": "Word select half period minus 1, i.e. WS 64clk period -> ws_halfperiod = 31.",
    +                    "offset": 6,
    +                    "size": 9
    +                  },
    +                  "MUTE": {
    +                    "description": "When 1, the transmit channel sends only zeroes.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DAI": {
    +              "description": "I2S Digital Audio Input Register. Contains control bits for the I2S receive channel.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 2017,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WORDWIDTH": {
    +                    "description": "Selects the number of bytes in data as follows:",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "8_BIT_DATA": {
    +                            "description": "8-bit data",
    +                            "value": 0
    +                          },
    +                          "16_BIT_DATA": {
    +                            "description": "16-bit data",
    +                            "value": 1
    +                          },
    +                          "32_BIT_DATA": {
    +                            "description": "32-bit data",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MONO": {
    +                    "description": "When 1, data is of monaural format. When 0, the data is in stereo format.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STOP": {
    +                    "description": "When 1, disables accesses on FIFOs, places the transmit channel in mute mode.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "When 1, asynchronously reset the transmit channel and FIFO.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "WS_SEL": {
    +                    "description": "When 0, the interface is in master mode. When 1, the interface is in slave mode. See Section 34.7.2 for a summary of useful combinations for this bit with RXMODE.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "WS_HALFPERIOD": {
    +                    "description": "Word select half period minus 1, i.e. WS 64clk period -> ws_halfperiod = 31.",
    +                    "offset": 6,
    +                    "size": 9
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 15,
    +                    "size": 17
    +                  }
    +                }
    +              }
    +            },
    +            "TXFIFO": {
    +              "description": "I2S Transmit FIFO. Access register for the 8 x 32-bit transmitter FIFO.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "I2STXFIFO": {
    +                    "description": "8 x 32-bit transmit FIFO.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "RXFIFO": {
    +              "description": "I2S Receive FIFO. Access register for the 8 x 32-bit receiver FIFO.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "I2SRXFIFO": {
    +                    "description": "8 x 32-bit transmit FIFO.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "STATE": {
    +              "description": "I2S Status Feedback Register. Contains status information about the I2S interface.",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 7,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IRQ": {
    +                    "description": "This bit reflects the presence of Receive Interrupt or Transmit Interrupt. This is determined by comparing the current FIFO levels to the rx_depth_irq and tx_depth_irq fields in the IRQ register.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DMAREQ1": {
    +                    "description": "This bit reflects the presence of Receive or Transmit DMA Request 1. This is determined by comparing the current FIFO levels to the rx_depth_dma1 and tx_depth_dma1 fields in the DMA1 register.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DMAREQ2": {
    +                    "description": "This bit reflects the presence of Receive or Transmit DMA Request 2. This is determined by comparing the current FIFO levels to the rx_depth_dma2 and tx_depth_dma2 fields in the DMA2 register.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 20,
    +                    "size": 12
    +                  },
    +                  "RX_LEVEL": {
    +                    "description": "Reflects the current level of the Receive FIFO.",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "TX_LEVEL": {
    +                    "description": "Reflects the current level of the Transmit FIFO.",
    +                    "offset": 16,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "DMA1": {
    +              "description": "I2S DMA Configuration Register 1. Contains control information for DMA request 1.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_DMA1_ENABLE": {
    +                    "description": "When 1, enables DMA1 for I2S receive.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TX_DMA1_ENABLE": {
    +                    "description": "When 1, enables DMA1 for I2S transmit.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 20,
    +                    "size": 12
    +                  },
    +                  "RX_DEPTH_DMA1": {
    +                    "description": "Set the FIFO level that triggers a receive DMA request on DMA1.",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "TX_DEPTH_DMA1": {
    +                    "description": "Set the FIFO level that triggers a transmit DMA request on DMA1.",
    +                    "offset": 16,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "DMA2": {
    +              "description": "I2S DMA Configuration Register 2. Contains control information for DMA request 2.",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_DMA2_ENABLE": {
    +                    "description": "When 1, enables DMA1 for I2S receive.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TX_DMA2_ENABLE": {
    +                    "description": "When 1, enables DMA1 for I2S transmit.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 20,
    +                    "size": 12
    +                  },
    +                  "RX_DEPTH_DMA2": {
    +                    "description": "Set the FIFO level that triggers a receive DMA request on DMA2.",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "TX_DEPTH_DMA2": {
    +                    "description": "Set the FIFO level that triggers a transmit DMA request on DMA2.",
    +                    "offset": 16,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "IRQ": {
    +              "description": "I2S Interrupt Request Control Register. Contains bits that control how the I2S interrupt request is generated.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_IRQ_ENABLE": {
    +                    "description": "When 1, enables I2S receive interrupt.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TX_IRQ_ENABLE": {
    +                    "description": "When 1, enables I2S transmit interrupt.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 20,
    +                    "size": 12
    +                  },
    +                  "RX_DEPTH_IRQ": {
    +                    "description": "Set the FIFO level on which to create an irq request.",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "TX_DEPTH_IRQ": {
    +                    "description": "Set the FIFO level on which to create an irq request.",
    +                    "offset": 16,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "TXRATE": {
    +              "description": "I2S Transmit MCLK divider. This register determines the I2S TX MCLK rate by specifying the value to divide PCLK by in order to produce MCLK.",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "Y_DIVIDER": {
    +                    "description": "I2S transmit MCLK rate denominator. This value is used to divide PCLK to produce the transmit MCLK. Eight bits of fractional divide supports a wide range of possibilities. A value of 0 stops the clock.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "X_DIVIDER": {
    +                    "description": "I2S transmit MCLK rate numerator. This value is used to multiply PCLK by to produce the transmit MCLK. A value of 0 stops the clock. Eight bits of fractional divide supports a wide range of possibilities. Note: the resulting ratio X/Y is divided by 2.",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "RXRATE": {
    +              "description": "I2S Receive MCLK divider. This register determines the I2S RX MCLK rate by specifying the value to divide PCLK by in order to produce MCLK.",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "Y_DIVIDER": {
    +                    "description": "I2S receive MCLK rate denominator. This value is used to divide PCLK to produce the receive MCLK. Eight bits of fractional divide supports a wide range of possibilities. A value of 0 stops the clock.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "X_DIVIDER": {
    +                    "description": "I2S receive MCLK rate numerator. This value is used to multiply PCLK by to produce the receive MCLK. A value of 0 stops the clock. Eight bits of fractional divide supports a wide range of possibilities. Note: the resulting ratio X/Y is divided by 2.",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "TXBITRATE": {
    +              "description": "I2S Transmit bit rate divider. This register determines the I2S transmit bit rate by specifying the value to divide TX_MCLK by in order to produce the transmit bit clock.",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_BITRATE": {
    +                    "description": "I2S transmit bit rate. This value plus one is used to divide TX_MCLK to produce the transmit bit clock.",
    +                    "offset": 0,
    +                    "size": 6
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 6,
    +                    "size": 26
    +                  }
    +                }
    +              }
    +            },
    +            "RXBITRATE": {
    +              "description": "I2S Receive bit rate divider. This register determines the I2S receive bit rate by specifying the value to divide RX_MCLK by in order to produce the receive bit clock.",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_BITRATE": {
    +                    "description": "I2S receive bit rate. This value plus one is used to divide RX_MCLK to produce the receive bit clock.",
    +                    "offset": 0,
    +                    "size": 6
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 6,
    +                    "size": 26
    +                  }
    +                }
    +              }
    +            },
    +            "TXMODE": {
    +              "description": "I2S Transmit mode control.",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXCLKSEL": {
    +                    "description": "Clock source selection for the transmit bit clock divider.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SELECT_THE_TX_FRACTI": {
    +                            "description": "Select the TX fractional rate divider clock output as the source",
    +                            "value": 0
    +                          },
    +                          "SELECT_THE_RX_MCLK_S": {
    +                            "description": "Select the RX_MCLK signal as the TX_MCLK clock source",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TX4PIN": {
    +                    "description": "Transmit 4-pin mode selection. When 1, enables 4-pin mode.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TXMCENA": {
    +                    "description": "Enable for the TX_MCLK output. When 0, output of TX_MCLK is not enabled. When 1, output of TX_MCLK is enabled.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 4,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            },
    +            "RXMODE": {
    +              "description": "I2S Receive mode control.",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXCLKSEL": {
    +                    "description": "Clock source selection for the receive bit clock divider.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SELECT_THE_RX_FRACTI": {
    +                            "description": "Select the RX fractional rate divider clock output as the source",
    +                            "value": 0
    +                          },
    +                          "SELECT_THE_TX_MCLK_S": {
    +                            "description": "Select the TX_MCLK signal as the RX_MCLK clock source",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RX4PIN": {
    +                    "description": "Receive 4-pin mode selection. When 1, enables 4-pin mode.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RXMCENA": {
    +                    "description": "Enable for the RX_MCLK output. When 0, output of RX_MCLK is not enabled. When 1, output of RX_MCLK is enabled.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.",
    +                    "offset": 4,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      }
    +    }
    +  },
    +  "devices": {
    +    "LPC176x5x": {
    +      "arch": "cortex_m3",
    +      "description": "LPC176x/LPC175x M3",
    +      "properties": {
    +        "cpu.nvic_prio_bits": "5",
    +        "cpu.mpu": "1",
    +        "cpu.fpu": "0",
    +        "cpu.revision": "r0p0",
    +        "cpu.vendor_systick_config": "0",
    +        "cpu.endian": "little",
    +        "cpu.name": "CM3"
    +      },
    +      "children": {
    +        "interrupts": {
    +          "MemManageFault": {
    +            "index": -12
    +          },
    +          "BusFault": {
    +            "index": -11
    +          },
    +          "UsageFault": {
    +            "index": -10
    +          },
    +          "DebugMonitor": {
    +            "index": -4
    +          },
    +          "NMI": {
    +            "index": -14
    +          },
    +          "HardFault": {
    +            "index": -13
    +          },
    +          "SVCall": {
    +            "index": -5
    +          },
    +          "PendSV": {
    +            "index": -2
    +          },
    +          "SysTick": {
    +            "index": -1
    +          },
    +          "WDT": {
    +            "index": 0
    +          },
    +          "TIMER0": {
    +            "index": 1
    +          },
    +          "TIMER1": {
    +            "index": 2
    +          },
    +          "UART0": {
    +            "index": 5
    +          },
    +          "UART1": {
    +            "index": 6
    +          },
    +          "PWM1": {
    +            "index": 9
    +          },
    +          "I2C0": {
    +            "index": 10
    +          },
    +          "SPI": {
    +            "index": 13
    +          },
    +          "RTC": {
    +            "index": 17
    +          },
    +          "SSP1": {
    +            "index": 15
    +          },
    +          "ADC": {
    +            "index": 22
    +          },
    +          "CANActivity": {
    +            "index": 34
    +          },
    +          "CAN": {
    +            "index": 25
    +          },
    +          "I2C1": {
    +            "index": 11
    +          },
    +          "SSP0": {
    +            "index": 14
    +          },
    +          "TIMER2": {
    +            "index": 3
    +          },
    +          "TIMER3": {
    +            "index": 4
    +          },
    +          "UART2": {
    +            "index": 7
    +          },
    +          "UART3": {
    +            "index": 8
    +          },
    +          "I2C2": {
    +            "index": 12
    +          },
    +          "I2S": {
    +            "index": 27
    +          },
    +          "RIT": {
    +            "index": 29
    +          },
    +          "MCPWM": {
    +            "index": 30
    +          },
    +          "QEI": {
    +            "index": 31
    +          },
    +          "EINT0": {
    +            "index": 18
    +          },
    +          "ENET": {
    +            "index": 28
    +          },
    +          "DMA": {
    +            "index": 26
    +          },
    +          "USB": {
    +            "index": 24
    +          }
    +        },
    +        "peripheral_instances": {
    +          "WDT": {
    +            "description": "Watchdog Timer (WDT) ",
    +            "offset": 1073741824,
    +            "type": "types.peripherals.WDT"
    +          },
    +          "TIMER0": {
    +            "description": "Timer0/1/2/3  ",
    +            "offset": 1073758208,
    +            "type": "types.peripherals.TIMER0"
    +          },
    +          "TIMER1": {
    +            "offset": 1073774592,
    +            "type": "types.peripherals.TIMER0"
    +          },
    +          "UART0": {
    +            "description": "UART0/2/3  ",
    +            "offset": 1073790976,
    +            "type": "types.peripherals.UART0"
    +          },
    +          "UART1": {
    +            "description": "UART1  ",
    +            "offset": 1073807360,
    +            "type": "types.peripherals.UART1"
    +          },
    +          "PWM1": {
    +            "description": "Pulse Width Modulators (PWM1) ",
    +            "offset": 1073840128,
    +            "type": "types.peripherals.PWM1"
    +          },
    +          "I2C0": {
    +            "description": "I2C bus interface",
    +            "offset": 1073856512,
    +            "type": "types.peripherals.I2C0"
    +          },
    +          "SPI": {
    +            "description": "SPI ",
    +            "offset": 1073872896,
    +            "type": "types.peripherals.SPI"
    +          },
    +          "RTC": {
    +            "description": " Real Time Clock (RTC)  ",
    +            "offset": 1073889280,
    +            "type": "types.peripherals.RTC"
    +          },
    +          "GPIOINT": {
    +            "description": "GPIO",
    +            "offset": 1073905792,
    +            "type": "types.peripherals.GPIOINT"
    +          },
    +          "PINCONNECT": {
    +            "description": "Pin connect block",
    +            "offset": 1073922048,
    +            "type": "types.peripherals.PINCONNECT"
    +          },
    +          "SSP1": {
    +            "description": "SSP1 controller",
    +            "offset": 1073938432,
    +            "type": "types.peripherals.SSP1"
    +          },
    +          "ADC": {
    +            "description": "Analog-to-Digital Converter (ADC) ",
    +            "offset": 1073954816,
    +            "type": "types.peripherals.ADC"
    +          },
    +          "CANAFRAM": {
    +            "description": "CAN acceptance filter RAM",
    +            "offset": 1073971200,
    +            "type": "types.peripherals.CANAFRAM"
    +          },
    +          "CANAF": {
    +            "description": " CAN controller acceptance filter ",
    +            "offset": 1073987584,
    +            "type": "types.peripherals.CANAF"
    +          },
    +          "CCAN": {
    +            "description": "Central CAN controller ",
    +            "offset": 1074003968,
    +            "type": "types.peripherals.CCAN"
    +          },
    +          "CAN1": {
    +            "description": "CAN1 controller ",
    +            "offset": 1074020352,
    +            "type": "types.peripherals.CAN1"
    +          },
    +          "CAN2": {
    +            "offset": 1074036736,
    +            "type": "types.peripherals.CAN1"
    +          },
    +          "I2C1": {
    +            "offset": 1074118656,
    +            "type": "types.peripherals.I2C0"
    +          },
    +          "SSP0": {
    +            "description": "SSP controller",
    +            "offset": 1074298880,
    +            "type": "types.peripherals.SSP1"
    +          },
    +          "DAC": {
    +            "description": " Digital-to-Analog Converter (DAC) ",
    +            "offset": 1074315264,
    +            "type": "types.peripherals.DAC"
    +          },
    +          "TIMER2": {
    +            "offset": 1074331648,
    +            "type": "types.peripherals.TIMER0"
    +          },
    +          "TIMER3": {
    +            "offset": 1074348032,
    +            "type": "types.peripherals.TIMER0"
    +          },
    +          "UART2": {
    +            "offset": 1074364416,
    +            "type": "types.peripherals.UART0"
    +          },
    +          "UART3": {
    +            "offset": 1074380800,
    +            "type": "types.peripherals.UART0"
    +          },
    +          "I2C2": {
    +            "offset": 1074397184,
    +            "type": "types.peripherals.I2C0"
    +          },
    +          "I2S": {
    +            "description": "I2S interface",
    +            "offset": 1074429952,
    +            "type": "types.peripherals.I2S"
    +          },
    +          "RITIMER": {
    +            "description": "Repetitive Interrupt Timer (RIT) ",
    +            "offset": 1074462720,
    +            "type": "types.peripherals.RITIMER"
    +          },
    +          "MCPWM": {
    +            "description": "Motor Control PWM",
    +            "offset": 1074495488,
    +            "type": "types.peripherals.MCPWM"
    +          },
    +          "QEI": {
    +            "description": "Quadrature Encoder Interface (QEI) ",
    +            "offset": 1074511872,
    +            "type": "types.peripherals.QEI"
    +          },
    +          "SYSCON": {
    +            "description": "System and clock control",
    +            "offset": 1074774016,
    +            "type": "types.peripherals.SYSCON"
    +          },
    +          "EMAC": {
    +            "description": "Ethernet",
    +            "offset": 1342177280,
    +            "type": "types.peripherals.EMAC"
    +          },
    +          "GPDMA": {
    +            "description": "General purpose DMA controller",
    +            "offset": 1342193664,
    +            "type": "types.peripherals.GPDMA"
    +          },
    +          "USB": {
    +            "description": "USB device/host/OTG controller",
    +            "offset": 1342210048,
    +            "type": "types.peripherals.USB"
    +          },
    +          "GPIO": {
    +            "description": "General Purpose I/O ",
    +            "offset": 537509888,
    +            "type": "types.peripherals.GPIO"
    +          }
    +        }
    +      }
    +    }
    +  }
    +}
    \ No newline at end of file
    diff --git a/src/chips/LPC176x5x.zig b/src/chips/LPC176x5x.zig
    new file mode 100644
    index 000000000..34e166cb0
    --- /dev/null
    +++ b/src/chips/LPC176x5x.zig
    @@ -0,0 +1,12741 @@
    +const micro = @import("microzig");
    +const mmio = micro.mmio;
    +
    +pub const devices = struct {
    +    ///  LPC176x/LPC175x M3
    +    pub const LPC176x5x = struct {
    +        pub const properties = struct {
    +            pub const @"cpu.nvic_prio_bits" = "5";
    +            pub const @"cpu.mpu" = "1";
    +            pub const @"cpu.fpu" = "0";
    +            pub const @"cpu.revision" = "r0p0";
    +            pub const @"cpu.vendor_systick_config" = "0";
    +            pub const @"cpu.endian" = "little";
    +            pub const @"cpu.name" = "CM3";
    +        };
    +
    +        pub const VectorTable = extern struct {
    +            const Handler = micro.interrupt.Handler;
    +            const unhandled = micro.interrupt.unhandled;
    +
    +            initial_stack_pointer: u32,
    +            Reset: Handler = unhandled,
    +            NMI: Handler = unhandled,
    +            HardFault: Handler = unhandled,
    +            MemManageFault: Handler = unhandled,
    +            BusFault: Handler = unhandled,
    +            UsageFault: Handler = unhandled,
    +            reserved5: [4]u32 = undefined,
    +            SVCall: Handler = unhandled,
    +            DebugMonitor: Handler = unhandled,
    +            reserved11: [1]u32 = undefined,
    +            PendSV: Handler = unhandled,
    +            SysTick: Handler = unhandled,
    +            WDT: Handler = unhandled,
    +            TIMER0: Handler = unhandled,
    +            TIMER1: Handler = unhandled,
    +            TIMER2: Handler = unhandled,
    +            TIMER3: Handler = unhandled,
    +            UART0: Handler = unhandled,
    +            UART1: Handler = unhandled,
    +            UART2: Handler = unhandled,
    +            UART3: Handler = unhandled,
    +            PWM1: Handler = unhandled,
    +            I2C0: Handler = unhandled,
    +            I2C1: Handler = unhandled,
    +            I2C2: Handler = unhandled,
    +            SPI: Handler = unhandled,
    +            SSP0: Handler = unhandled,
    +            SSP1: Handler = unhandled,
    +            reserved30: [1]u32 = undefined,
    +            RTC: Handler = unhandled,
    +            EINT0: Handler = unhandled,
    +            reserved33: [3]u32 = undefined,
    +            ADC: Handler = unhandled,
    +            reserved37: [1]u32 = undefined,
    +            USB: Handler = unhandled,
    +            CAN: Handler = unhandled,
    +            DMA: Handler = unhandled,
    +            I2S: Handler = unhandled,
    +            ENET: Handler = unhandled,
    +            RIT: Handler = unhandled,
    +            MCPWM: Handler = unhandled,
    +            QEI: Handler = unhandled,
    +            reserved46: [2]u32 = undefined,
    +            CANActivity: Handler = unhandled,
    +        };
    +
    +        pub const peripherals = struct {
    +            ///  General Purpose I/O
    +            pub const GPIO = @ptrCast(*volatile types.GPIO, 0x2009c000);
    +            ///  Watchdog Timer (WDT)
    +            pub const WDT = @ptrCast(*volatile types.WDT, 0x40000000);
    +            ///  Timer0/1/2/3
    +            pub const TIMER0 = @ptrCast(*volatile types.TIMER0, 0x40004000);
    +            ///  Timer0/1/2/3
    +            pub const TIMER1 = @ptrCast(*volatile types.TIMER0, 0x40008000);
    +            ///  UART0/2/3
    +            pub const UART0 = @ptrCast(*volatile types.UART0, 0x4000c000);
    +            ///  UART1
    +            pub const UART1 = @ptrCast(*volatile types.UART1, 0x40010000);
    +            ///  Pulse Width Modulators (PWM1)
    +            pub const PWM1 = @ptrCast(*volatile types.PWM1, 0x40018000);
    +            ///  I2C bus interface
    +            pub const I2C0 = @ptrCast(*volatile types.I2C0, 0x4001c000);
    +            ///  SPI
    +            pub const SPI = @ptrCast(*volatile types.SPI, 0x40020000);
    +            ///  Real Time Clock (RTC)
    +            pub const RTC = @ptrCast(*volatile types.RTC, 0x40024000);
    +            ///  GPIO
    +            pub const GPIOINT = @ptrCast(*volatile types.GPIOINT, 0x40028080);
    +            ///  Pin connect block
    +            pub const PINCONNECT = @ptrCast(*volatile types.PINCONNECT, 0x4002c000);
    +            ///  SSP1 controller
    +            pub const SSP1 = @ptrCast(*volatile types.SSP1, 0x40030000);
    +            ///  Analog-to-Digital Converter (ADC)
    +            pub const ADC = @ptrCast(*volatile types.ADC, 0x40034000);
    +            ///  CAN acceptance filter RAM
    +            pub const CANAFRAM = @ptrCast(*volatile types.CANAFRAM, 0x40038000);
    +            ///  CAN controller acceptance filter
    +            pub const CANAF = @ptrCast(*volatile types.CANAF, 0x4003c000);
    +            ///  Central CAN controller
    +            pub const CCAN = @ptrCast(*volatile types.CCAN, 0x40040000);
    +            ///  CAN1 controller
    +            pub const CAN1 = @ptrCast(*volatile types.CAN1, 0x40044000);
    +            ///  CAN1 controller
    +            pub const CAN2 = @ptrCast(*volatile types.CAN1, 0x40048000);
    +            ///  I2C bus interface
    +            pub const I2C1 = @ptrCast(*volatile types.I2C0, 0x4005c000);
    +            ///  SSP controller
    +            pub const SSP0 = @ptrCast(*volatile types.SSP1, 0x40088000);
    +            ///  Digital-to-Analog Converter (DAC)
    +            pub const DAC = @ptrCast(*volatile types.DAC, 0x4008c000);
    +            ///  Timer0/1/2/3
    +            pub const TIMER2 = @ptrCast(*volatile types.TIMER0, 0x40090000);
    +            ///  Timer0/1/2/3
    +            pub const TIMER3 = @ptrCast(*volatile types.TIMER0, 0x40094000);
    +            ///  UART0/2/3
    +            pub const UART2 = @ptrCast(*volatile types.UART0, 0x40098000);
    +            ///  UART0/2/3
    +            pub const UART3 = @ptrCast(*volatile types.UART0, 0x4009c000);
    +            ///  I2C bus interface
    +            pub const I2C2 = @ptrCast(*volatile types.I2C0, 0x400a0000);
    +            ///  I2S interface
    +            pub const I2S = @ptrCast(*volatile types.I2S, 0x400a8000);
    +            ///  Repetitive Interrupt Timer (RIT)
    +            pub const RITIMER = @ptrCast(*volatile types.RITIMER, 0x400b0000);
    +            ///  Motor Control PWM
    +            pub const MCPWM = @ptrCast(*volatile types.MCPWM, 0x400b8000);
    +            ///  Quadrature Encoder Interface (QEI)
    +            pub const QEI = @ptrCast(*volatile types.QEI, 0x400bc000);
    +            ///  System and clock control
    +            pub const SYSCON = @ptrCast(*volatile types.SYSCON, 0x400fc000);
    +            ///  Ethernet
    +            pub const EMAC = @ptrCast(*volatile types.EMAC, 0x50000000);
    +            ///  General purpose DMA controller
    +            pub const GPDMA = @ptrCast(*volatile types.GPDMA, 0x50004000);
    +            ///  USB device/host/OTG controller
    +            pub const USB = @ptrCast(*volatile types.USB, 0x50008000);
    +        };
    +    };
    +};
    +
    +pub const types = struct {
    +    ///  Watchdog Timer (WDT)
    +    pub const WDT = extern struct {
    +        ///  Watchdog mode register. This register determines the basic mode and status of the Watchdog Timer.
    +        MOD: mmio.Mmio(packed struct(u32) {
    +            ///  Watchdog enable bit. This bit is Set Only.
    +            WDEN: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  The watchdog timer is stopped.
    +                    STOP = 0x0,
    +                    ///  The watchdog timer is running.
    +                    RUN = 0x1,
    +                },
    +            },
    +            ///  Watchdog reset enable bit. This bit is Set Only. See Table 652.
    +            WDRESET: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  A watchdog timeout will not cause a chip reset.
    +                    NORESET = 0x0,
    +                    ///  A watchdog timeout will cause a chip reset.
    +                    RESET = 0x1,
    +                },
    +            },
    +            ///  Watchdog time-out flag. Set when the watchdog timer times out, cleared by software.
    +            WDTOF: u1,
    +            ///  Watchdog interrupt flag. Cleared by software.
    +            WDINT: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u28,
    +        }),
    +        ///  Watchdog timer constant register. The value in this register determines the time-out value.
    +        TC: mmio.Mmio(packed struct(u32) {
    +            ///  Watchdog time-out interval.
    +            Count: u32,
    +        }),
    +        ///  Watchdog feed sequence register. Writing 0xAA followed by 0x55 to this register reloads the Watchdog timer with the value contained in WDTC.
    +        FEED: mmio.Mmio(packed struct(u32) {
    +            ///  Feed value should be 0xAA followed by 0x55.
    +            Feed: u8,
    +            padding: u24,
    +        }),
    +        ///  Watchdog timer value register. This register reads out the current value of the Watchdog timer.
    +        TV: mmio.Mmio(packed struct(u32) {
    +            ///  Counter timer value.
    +            Count: u32,
    +        }),
    +        ///  Watchdog clock select register.
    +        CLKSEL: mmio.Mmio(packed struct(u32) {
    +            reserved1: u1,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u30,
    +            ///  If this bit is set to one writing to this register does not affect bit 0. The clock source can only be changed by first clearing this bit, then writing the new value of bit 0.
    +            LOCK: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  This bit is set to 0 on any reset. It cannot be cleared by software.
    +                    UNLOCKED = 0x0,
    +                    ///  Software can set this bit to 1 at any time. Once WDLOCK is set, the bits of this register cannot be modified.
    +                    LOCKED = 0x1,
    +                },
    +            },
    +        }),
    +    };
    +
    +    ///  Timer0/1/2/3
    +    pub const TIMER0 = extern struct {
    +        ///  Interrupt Register. The IR can be written to clear interrupts. The IR can be read to identify which of eight possible interrupt sources are pending.
    +        IR: mmio.Mmio(packed struct(u32) {
    +            ///  Interrupt flag for match channel 0.
    +            MR0INT: u1,
    +            ///  Interrupt flag for match channel 1.
    +            MR1INT: u1,
    +            ///  Interrupt flag for match channel 2.
    +            MR2INT: u1,
    +            ///  Interrupt flag for match channel 3.
    +            MR3INT: u1,
    +            ///  Interrupt flag for capture channel 0 event.
    +            CR0INT: u1,
    +            ///  Interrupt flag for capture channel 1 event.
    +            CR1INT: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u26,
    +        }),
    +        ///  Timer Control Register. The TCR is used to control the Timer Counter functions. The Timer Counter can be disabled or reset through the TCR.
    +        TCR: mmio.Mmio(packed struct(u32) {
    +            ///  When one, the Timer Counter and Prescale Counter are enabled for counting. When zero, the counters are disabled.
    +            CEN: u1,
    +            ///  When one, the Timer Counter and the Prescale Counter are synchronously reset on the next positive edge of PCLK. The counters remain reset until TCR[1] is returned to zero.
    +            CRST: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u30,
    +        }),
    +        ///  Timer Counter. The 32 bit TC is incremented every PR+1 cycles of PCLK. The TC is controlled through the TCR.
    +        TC: mmio.Mmio(packed struct(u32) {
    +            ///  Timer counter value.
    +            TC: u32,
    +        }),
    +        ///  Prescale Register. When the Prescale Counter (PC) is equal to this value, the next clock increments the TC and clears the PC.
    +        PR: mmio.Mmio(packed struct(u32) {
    +            ///  Prescale counter maximum value.
    +            PM: u32,
    +        }),
    +        ///  Prescale Counter. The 32 bit PC is a counter which is incremented to the value stored in PR. When the value in PR is reached, the TC is incremented and the PC is cleared. The PC is observable and controllable through the bus interface.
    +        PC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescale counter value.
    +            PC: u32,
    +        }),
    +        ///  Match Control Register. The MCR is used to control if an interrupt is generated and if the TC is reset when a Match occurs.
    +        MCR: mmio.Mmio(packed struct(u32) {
    +            ///  Interrupt on MR0
    +            MR0I: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Interrupt is generated when MR0 matches the value in the TC.
    +                    INTERRUPT_IS_GENERAT = 0x1,
    +                    ///  Interrupt is disabled
    +                    INTERRUPT_IS_DISABLE = 0x0,
    +                },
    +            },
    +            ///  Reset on MR0
    +            MR0R: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  TC will be reset if MR0 matches it.
    +                    TC_WILL_BE_RESET_IF_ = 0x1,
    +                    ///  Feature disabled.
    +                    FEATURE_DISABLED_ = 0x0,
    +                },
    +            },
    +            ///  Stop on MR0
    +            MR0S: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  TC and PC will be stopped and TCR[0] will be set to 0 if MR0 matches the TC.
    +                    TC_AND_PC_WILL_BE_ST = 0x1,
    +                    ///  Feature disabled.
    +                    FEATURE_DISABLED_ = 0x0,
    +                },
    +            },
    +            ///  Interrupt on MR1
    +            MR1I: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Interrupt is generated when MR1 matches the value in the TC.
    +                    INTERRUPT_IS_GENERAT = 0x1,
    +                    ///  Interrupt is disabled.
    +                    INTERRUPT_IS_DISABLE = 0x0,
    +                },
    +            },
    +            ///  Reset on MR1
    +            MR1R: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  TC will be reset if MR1 matches it.
    +                    TC_WILL_BE_RESET_IF_ = 0x1,
    +                    ///  Feature disabled.
    +                    FEATURE_DISABLED_ = 0x0,
    +                },
    +            },
    +            ///  Stop on MR1
    +            MR1S: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  TC and PC will be stopped and TCR[0] will be set to 0 if MR1 matches the TC.
    +                    TC_AND_PC_WILL_BE_ST = 0x1,
    +                    ///  Feature disabled.
    +                    FEATURE_DISABLED_ = 0x0,
    +                },
    +            },
    +            ///  Interrupt on MR2
    +            MR2I: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Interrupt is generated when MR2 matches the value in the TC.
    +                    INTERRUPT_IS_GENERAT = 0x1,
    +                    ///  Interrupt is disabled
    +                    INTERRUPT_IS_DISABLE = 0x0,
    +                },
    +            },
    +            ///  Reset on MR2
    +            MR2R: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  TC will be reset if MR2 matches it.
    +                    TC_WILL_BE_RESET_IF_ = 0x1,
    +                    ///  Feature disabled.
    +                    FEATURE_DISABLED_ = 0x0,
    +                },
    +            },
    +            ///  Stop on MR2.
    +            MR2S: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  TC and PC will be stopped and TCR[0] will be set to 0 if MR2 matches the TC
    +                    TC_AND_PC_WILL_BE_ST = 0x1,
    +                    ///  Feature disabled.
    +                    FEATURE_DISABLED_ = 0x0,
    +                },
    +            },
    +            ///  Interrupt on MR3
    +            MR3I: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Interrupt is generated when MR3 matches the value in the TC.
    +                    INTERRUPT_IS_GENERAT = 0x1,
    +                    ///  This interrupt is disabled
    +                    THIS_INTERRUPT_IS_DI = 0x0,
    +                },
    +            },
    +            ///  Reset on MR3
    +            MR3R: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  TC will be reset if MR3 matches it.
    +                    TC_WILL_BE_RESET_IF_ = 0x1,
    +                    ///  Feature disabled.
    +                    FEATURE_DISABLED_ = 0x0,
    +                },
    +            },
    +            ///  Stop on MR3
    +            MR3S: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  TC and PC will be stopped and TCR[0] will be set to 0 if MR3 matches the TC.
    +                    TC_AND_PC_WILL_BE_ST = 0x1,
    +                    ///  Feature disabled.
    +                    FEATURE_DISABLED_ = 0x0,
    +                },
    +            },
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u20,
    +        }),
    +        reserved40: [16]u8,
    +        ///  Capture Control Register. The CCR controls which edges of the capture inputs are used to load the Capture Registers and whether or not an interrupt is generated when a capture takes place.
    +        CCR: mmio.Mmio(packed struct(u32) {
    +            ///  Capture on CAPn.0 rising edge
    +            CAP0RE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  A sequence of 0 then 1 on CAPn.0 will cause CR0 to be loaded with the contents of TC.
    +                    ENABLE = 0x1,
    +                    ///  This feature is disabled.
    +                    DISABLE = 0x0,
    +                },
    +            },
    +            ///  Capture on CAPn.0 falling edge
    +            CAP0FE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  A sequence of 1 then 0 on CAPn.0 will cause CR0 to be loaded with the contents of TC.
    +                    ENABLE = 0x1,
    +                    ///  This feature is disabled.
    +                    DISABLE = 0x0,
    +                },
    +            },
    +            ///  Interrupt on CAPn.0 event
    +            CAP0I: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  A CR0 load due to a CAPn.0 event will generate an interrupt.
    +                    ENABLE = 0x1,
    +                    ///  This feature is disabled.
    +                    DISABLE = 0x0,
    +                },
    +            },
    +            ///  Capture on CAPn.1 rising edge
    +            CAP1RE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  A sequence of 0 then 1 on CAPn.1 will cause CR1 to be loaded with the contents of TC.
    +                    ENABLE = 0x1,
    +                    ///  This feature is disabled.
    +                    DISABLE = 0x0,
    +                },
    +            },
    +            ///  Capture on CAPn.1 falling edge
    +            CAP1FE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  A sequence of 1 then 0 on CAPn.1 will cause CR1 to be loaded with the contents of TC.
    +                    ENABLE = 0x1,
    +                    ///  This feature is disabled.
    +                    DISABLE = 0x0,
    +                },
    +            },
    +            ///  Interrupt on CAPn.1 event
    +            CAP1I: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  A CR1 load due to a CAPn.1 event will generate an interrupt.
    +                    ENABLE = 0x1,
    +                    ///  This feature is disabled.
    +                    DISABLE = 0x0,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u26,
    +        }),
    +        reserved60: [16]u8,
    +        ///  External Match Register. The EMR controls the external match pins.
    +        EMR: mmio.Mmio(packed struct(u32) {
    +            ///  External Match 0. When a match occurs between the TC and MR0, this bit can either toggle, go low, go high, or do nothing, depending on bits 5:4 of this register. This bit can be driven onto a MATn.0 pin, in a positive-logic manner (0 = low, 1 = high).
    +            EM0: u1,
    +            ///  External Match 1. When a match occurs between the TC and MR1, this bit can either toggle, go low, go high, or do nothing, depending on bits 7:6 of this register. This bit can be driven onto a MATn.1 pin, in a positive-logic manner (0 = low, 1 = high).
    +            EM1: u1,
    +            ///  External Match 2. When a match occurs between the TC and MR2, this bit can either toggle, go low, go high, or do nothing, depending on bits 9:8 of this register. This bit can be driven onto a MATn.0 pin, in a positive-logic manner (0 = low, 1 = high).
    +            EM2: u1,
    +            ///  External Match 3. When a match occurs between the TC and MR3, this bit can either toggle, go low, go high, or do nothing, depending on bits 11:10 of this register. This bit can be driven onto a MATn.0 pin, in a positive-logic manner (0 = low, 1 = high).
    +            EM3: u1,
    +            ///  External Match Control 0. Determines the functionality of External Match 0.
    +            EMC0: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Do Nothing.
    +                    DO_NOTHING_ = 0x0,
    +                    ///  Clear the corresponding External Match bit/output to 0 (MATn.m pin is LOW if pinned out).
    +                    CLEAR_THE_CORRESPOND = 0x1,
    +                    ///  Set the corresponding External Match bit/output to 1 (MATn.m pin is HIGH if pinned out).
    +                    SET_THE_CORRESPONDIN = 0x2,
    +                    ///  Toggle the corresponding External Match bit/output.
    +                    TOGGLE_THE_CORRESPON = 0x3,
    +                },
    +            },
    +            ///  External Match Control 1. Determines the functionality of External Match 1.
    +            EMC1: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Do Nothing.
    +                    DO_NOTHING_ = 0x0,
    +                    ///  Clear the corresponding External Match bit/output to 0 (MATn.m pin is LOW if pinned out).
    +                    CLEAR_THE_CORRESPOND = 0x1,
    +                    ///  Set the corresponding External Match bit/output to 1 (MATn.m pin is HIGH if pinned out).
    +                    SET_THE_CORRESPONDIN = 0x2,
    +                    ///  Toggle the corresponding External Match bit/output.
    +                    TOGGLE_THE_CORRESPON = 0x3,
    +                },
    +            },
    +            ///  External Match Control 2. Determines the functionality of External Match 2.
    +            EMC2: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Do Nothing.
    +                    DO_NOTHING_ = 0x0,
    +                    ///  Clear the corresponding External Match bit/output to 0 (MATn.m pin is LOW if pinned out).
    +                    CLEAR_THE_CORRESPOND = 0x1,
    +                    ///  Set the corresponding External Match bit/output to 1 (MATn.m pin is HIGH if pinned out).
    +                    SET_THE_CORRESPONDIN = 0x2,
    +                    ///  Toggle the corresponding External Match bit/output.
    +                    TOGGLE_THE_CORRESPON = 0x3,
    +                },
    +            },
    +            ///  External Match Control 3. Determines the functionality of External Match 3.
    +            EMC3: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Do Nothing.
    +                    DO_NOTHING_ = 0x0,
    +                    ///  Clear the corresponding External Match bit/output to 0 (MATn.m pin is LOW if pinned out).
    +                    CLEAR_THE_CORRESPOND = 0x1,
    +                    ///  Set the corresponding External Match bit/output to 1 (MATn.m pin is HIGH if pinned out).
    +                    SET_THE_CORRESPONDIN = 0x2,
    +                    ///  Toggle the corresponding External Match bit/output.
    +                    TOGGLE_THE_CORRESPON = 0x3,
    +                },
    +            },
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u20,
    +        }),
    +        reserved112: [48]u8,
    +        ///  Count Control Register. The CTCR selects between Timer and Counter mode, and in Counter mode selects the signal and edge(s) for counting.
    +        CTCR: mmio.Mmio(packed struct(u32) {
    +            ///  Counter/Timer Mode This field selects which rising PCLK edges can increment Timer's Prescale Counter (PC), or clear PC and increment Timer Counter (TC). Timer Mode: the TC is incremented when the Prescale Counter matches the Prescale Register.
    +            CTMODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Timer Mode: every rising PCLK edge
    +                    TIMER_MODE_EVERY_RI = 0x0,
    +                    ///  Counter Mode: TC is incremented on rising edges on the CAP input selected by bits 3:2.
    +                    RISING = 0x1,
    +                    ///  Counter Mode: TC is incremented on falling edges on the CAP input selected by bits 3:2.
    +                    FALLING = 0x2,
    +                    ///  Counter Mode: TC is incremented on both edges on the CAP input selected by bits 3:2.
    +                    DUALEDGE = 0x3,
    +                },
    +            },
    +            ///  Count Input Select When bits 1:0 in this register are not 00, these bits select which CAP pin is sampled for clocking. Note: If Counter mode is selected for a particular CAPn input in the TnCTCR, the 3 bits for that input in the Capture Control Register (TnCCR) must be programmed as 000. However, capture and/or interrupt can be selected for the other 3 CAPn inputs in the same timer.
    +            CINSEL: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CAPn.0 for TIMERn
    +                    CAPN_0_FOR_TIMERN = 0x0,
    +                    ///  CAPn.1 for TIMERn
    +                    CAPN_1_FOR_TIMERN = 0x1,
    +                    _,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u28,
    +        }),
    +    };
    +
    +    ///  General Purpose I/O
    +    pub const GPIO = struct {};
    +
    +    ///  UART0/2/3
    +    pub const UART0 = extern struct {
    +        ///  Receiver Buffer Register. Contains the next received character to be read (DLAB =0).
    +        RBR: mmio.Mmio(packed struct(u32) {
    +            ///  The UARTn Receiver Buffer Register contains the oldest received byte in the UARTn Rx FIFO.
    +            RBR: u8,
    +            ///  Reserved, the value read from a reserved bit is not defined.
    +            RESERVED: u24,
    +        }),
    +        ///  Divisor Latch MSB. Most significant byte of the baud rate divisor value. The full divisor is used to generate a baud rate from the fractional rate divider (DLAB =1).
    +        DLM: mmio.Mmio(packed struct(u32) {
    +            ///  The UARTn Divisor Latch MSB Register, along with the U0DLL register, determines the baud rate of the UARTn.
    +            DLMSB: u8,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u24,
    +        }),
    +        ///  Interrupt ID Register. Identifies which interrupt(s) are pending.
    +        IIR: mmio.Mmio(packed struct(u32) {
    +            ///  Interrupt status. Note that UnIIR[0] is active low. The pending interrupt can be determined by evaluating UnIIR[3:1].
    +            INTSTATUS: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  At least one interrupt is pending.
    +                    AT_LEAST_ONE_INTERRU = 0x0,
    +                    ///  No interrupt is pending.
    +                    NO_INTERRUPT_IS_PEND = 0x1,
    +                },
    +            },
    +            ///  Interrupt identification. UnIER[3:1] identifies an interrupt corresponding to the UARTn Rx or TX FIFO. All other combinations of UnIER[3:1] not listed below are reserved (000,100,101,111).
    +            INTID: packed union {
    +                raw: u3,
    +                value: enum(u3) {
    +                    ///  1 - Receive Line Status (RLS).
    +                    @"1_RECEIVE_LINE_S" = 0x3,
    +                    ///  2a - Receive Data Available (RDA).
    +                    @"2A__RECEIVE_DATA_AV" = 0x2,
    +                    ///  2b - Character Time-out Indicator (CTI).
    +                    @"2B__CHARACTER_TIME_" = 0x6,
    +                    ///  3 - THRE Interrupt
    +                    @"3_THRE_INTERRUPT" = 0x1,
    +                    _,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u2,
    +            ///  Copies of UnFCR[0].
    +            FIFOENABLE: u2,
    +            ///  End of auto-baud interrupt. True if auto-baud has finished successfully and interrupt is enabled.
    +            ABEOINT: u1,
    +            ///  Auto-baud time-out interrupt. True if auto-baud has timed out and interrupt is enabled.
    +            ABTOINT: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u22,
    +        }),
    +        ///  Line Control Register. Contains controls for frame formatting and break generation.
    +        LCR: mmio.Mmio(packed struct(u32) {
    +            ///  Word Length Select.
    +            WLS: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  5-bit character length
    +                    @"5_BIT_CHARACTER_LENG" = 0x0,
    +                    ///  6-bit character length
    +                    @"6_BIT_CHARACTER_LENG" = 0x1,
    +                    ///  7-bit character length
    +                    @"7_BIT_CHARACTER_LENG" = 0x2,
    +                    ///  8-bit character length
    +                    @"8_BIT_CHARACTER_LENG" = 0x3,
    +                },
    +            },
    +            ///  Stop Bit Select
    +            SBS: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  1 stop bit.
    +                    @"1_STOP_BIT_" = 0x0,
    +                    ///  2 stop bits (1.5 if UnLCR[1:0]=00).
    +                    @"2_STOP_BITS_1_5_IF_" = 0x1,
    +                },
    +            },
    +            ///  Parity Enable.
    +            PE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disable parity generation and checking.
    +                    DISABLE_PARITY_GENER = 0x0,
    +                    ///  Enable parity generation and checking.
    +                    ENABLE_PARITY_GENERA = 0x1,
    +                },
    +            },
    +            ///  Parity Select
    +            PS: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Odd parity. Number of 1s in the transmitted character and the attached parity bit will be odd.
    +                    ODD_PARITY_NUMBER_O = 0x0,
    +                    ///  Even Parity. Number of 1s in the transmitted character and the attached parity bit will be even.
    +                    EVEN_PARITY_NUMBER_ = 0x1,
    +                    ///  Forced 1 stick parity.
    +                    FORCED_1_STICK_PARIT = 0x2,
    +                    ///  Forced 0 stick parity.
    +                    FORCED_0_STICK_PARIT = 0x3,
    +                },
    +            },
    +            ///  Break Control
    +            BC: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disable break transmission.
    +                    DISABLE_BREAK_TRANSM = 0x0,
    +                    ///  Enable break transmission. Output pin UARTn TXD is forced to logic 0 when UnLCR[6] is active high.
    +                    ENABLE_BREAK_TRANSMI = 0x1,
    +                },
    +            },
    +            ///  Divisor Latch Access Bit
    +            DLAB: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disable access to Divisor Latches.
    +                    DISABLE_ACCESS_TO_DI = 0x0,
    +                    ///  Enable access to Divisor Latches.
    +                    ENABLE_ACCESS_TO_DIV = 0x1,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u24,
    +        }),
    +        reserved20: [4]u8,
    +        ///  Line Status Register. Contains flags for transmit and receive status, including line errors.
    +        LSR: mmio.Mmio(packed struct(u32) {
    +            ///  Receiver Data Ready. UnLSR[0] is set when the UnRBR holds an unread character and is cleared when the UARTn RBR FIFO is empty.
    +            RDR: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  The UARTn receiver FIFO is empty.
    +                    EMPTY = 0x0,
    +                    ///  The UARTn receiver FIFO is not empty.
    +                    NOTEMPTY = 0x1,
    +                },
    +            },
    +            ///  Overrun Error. The overrun error condition is set as soon as it occurs. An UnLSR read clears UnLSR[1]. UnLSR[1] is set when UARTn RSR has a new character assembled and the UARTn RBR FIFO is full. In this case, the UARTn RBR FIFO will not be overwritten and the character in the UARTn RSR will be lost.
    +            OE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Overrun error status is inactive.
    +                    INACTIVE = 0x0,
    +                    ///  Overrun error status is active.
    +                    ACTIVE = 0x1,
    +                },
    +            },
    +            ///  Parity Error. When the parity bit of a received character is in the wrong state, a parity error occurs. An UnLSR read clears UnLSR[2]. Time of parity error detection is dependent on UnFCR[0]. Note: A parity error is associated with the character at the top of the UARTn RBR FIFO.
    +            PE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Parity error status is inactive.
    +                    INACTIVE = 0x0,
    +                    ///  Parity error status is active.
    +                    ACTIVE = 0x1,
    +                },
    +            },
    +            ///  Framing Error. When the stop bit of a received character is a logic 0, a framing error occurs. An UnLSR read clears UnLSR[3]. The time of the framing error detection is dependent on UnFCR[0]. Upon detection of a framing error, the Rx will attempt to resynchronize to the data and assume that the bad stop bit is actually an early start bit. However, it cannot be assumed that the next received byte will be correct even if there is no Framing Error. Note: A framing error is associated with the character at the top of the UARTn RBR FIFO.
    +            FE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Framing error status is inactive.
    +                    INACTIVE = 0x0,
    +                    ///  Framing error status is active.
    +                    ACTIVE = 0x1,
    +                },
    +            },
    +            ///  Break Interrupt. When RXDn is held in the spacing state (all zeroes) for one full character transmission (start, data, parity, stop), a break interrupt occurs. Once the break condition has been detected, the receiver goes idle until RXDn goes to marking state (all ones). An UnLSR read clears this status bit. The time of break detection is dependent on UnFCR[0]. Note: The break interrupt is associated with the character at the top of the UARTn RBR FIFO.
    +            BI: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Break interrupt status is inactive.
    +                    INACTIVE = 0x0,
    +                    ///  Break interrupt status is active.
    +                    ACTIVE = 0x1,
    +                },
    +            },
    +            ///  Transmitter Holding Register Empty. THRE is set immediately upon detection of an empty UARTn THR and is cleared on a UnTHR write.
    +            THRE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  UnTHR contains valid data.
    +                    VALIDDATA = 0x0,
    +                    ///  UnTHR is empty.
    +                    EMPTY = 0x1,
    +                },
    +            },
    +            ///  Transmitter Empty. TEMT is set when both UnTHR and UnTSR are empty; TEMT is cleared when either the UnTSR or the UnTHR contain valid data.
    +            TEMT: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  UnTHR and/or the UnTSR contains valid data.
    +                    VALIDDATA = 0x0,
    +                    ///  UnTHR and the UnTSR are empty.
    +                    EMPTY = 0x1,
    +                },
    +            },
    +            ///  Error in RX FIFO . UnLSR[7] is set when a character with a Rx error such as framing error, parity error or break interrupt, is loaded into the UnRBR. This bit is cleared when the UnLSR register is read and there are no subsequent errors in the UARTn FIFO.
    +            RXFE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  UnRBR contains no UARTn RX errors or UnFCR[0]=0.
    +                    NOERROR = 0x0,
    +                    ///  UARTn RBR contains at least one UARTn RX error.
    +                    ERRORS = 0x1,
    +                },
    +            },
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u24,
    +        }),
    +        reserved28: [4]u8,
    +        ///  Scratch Pad Register. 8-bit temporary storage for software.
    +        SCR: mmio.Mmio(packed struct(u32) {
    +            ///  A readable, writable byte.
    +            PAD: u8,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u24,
    +        }),
    +        ///  Auto-baud Control Register. Contains controls for the auto-baud feature.
    +        ACR: mmio.Mmio(packed struct(u32) {
    +            ///  Start bit. This bit is automatically cleared after auto-baud completion.
    +            START: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Auto-baud stop (auto-baud is not running).
    +                    AUTO_BAUD_STOP_AUTO = 0x0,
    +                    ///  Auto-baud start (auto-baud is running). Auto-baud run bit. This bit is automatically cleared after auto-baud completion.
    +                    AUTO_BAUD_START_AUT = 0x1,
    +                },
    +            },
    +            ///  Auto-baud mode select bit.
    +            MODE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Mode 0.
    +                    MODE_0_ = 0x0,
    +                    ///  Mode 1.
    +                    MODE_1_ = 0x1,
    +                },
    +            },
    +            ///  Restart bit.
    +            AUTORESTART: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  No restart.
    +                    NO_RESTART_ = 0x0,
    +                    ///  Restart in case of time-out (counter restarts at next UARTn Rx falling edge)
    +                    RESTART_IN_CASE_OF_T = 0x1,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u5,
    +            ///  End of auto-baud interrupt clear bit (write-only accessible). Writing a 1 will clear the corresponding interrupt in the UnIIR. Writing a 0 has no impact.
    +            ABEOINTCLR: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  No impact.
    +                    NO_IMPACT_ = 0x0,
    +                    ///  Clear the corresponding interrupt in the IIR.
    +                    CLEAR_THE_CORRESPOND = 0x1,
    +                },
    +            },
    +            ///  Auto-baud time-out interrupt clear bit (write-only accessible). Writing a 1 will clear the corresponding interrupt in the UnIIR. Writing a 0 has no impact.
    +            ABTOINTCLR: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  No impact.
    +                    NO_IMPACT_ = 0x0,
    +                    ///  Clear the corresponding interrupt in the IIR.
    +                    CLEAR_THE_CORRESPOND = 0x1,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u22,
    +        }),
    +        reserved40: [4]u8,
    +        ///  Fractional Divider Register. Generates a clock input for the baud rate divider.
    +        FDR: mmio.Mmio(packed struct(u32) {
    +            ///  Baud-rate generation pre-scaler divisor value. If this field is 0, fractional baud-rate generator will not impact the UARTn baudrate.
    +            DIVADDVAL: u4,
    +            ///  Baud-rate pre-scaler multiplier value. This field must be greater or equal 1 for UARTn to operate properly, regardless of whether the fractional baud-rate generator is used or not.
    +            MULVAL: u4,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u24,
    +        }),
    +        reserved48: [4]u8,
    +        ///  Transmit Enable Register. Turns off UART transmitter for use with software flow control.
    +        TER: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u7,
    +            ///  When this bit is 1, as it is after a Reset, data written to the THR is output on the TXD pin as soon as any preceding data has been sent. If this bit is cleared to 0 while a character is being sent, the transmission of that character is completed, but no further characters are sent until this bit is set again. In other words, a 0 in this bit blocks the transfer of characters from the THR or TX FIFO into the transmit shift register. Software implementing software-handshaking can clear this bit when it receives an XOFF character (DC3). Software can set this bit again when it receives an XON (DC1) character.
    +            TXEN: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u24,
    +        }),
    +        reserved76: [24]u8,
    +        ///  RS-485/EIA-485 Control. Contains controls to configure various aspects of RS-485/EIA-485 modes.
    +        RS485CTRL: mmio.Mmio(packed struct(u32) {
    +            ///  NMM enable.
    +            NMMEN: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  RS-485/EIA-485 Normal Multidrop Mode (NMM) is disabled.
    +                    DISABLED = 0x0,
    +                    ///  RS-485/EIA-485 Normal Multidrop Mode (NMM) is enabled. In this mode, an address is detected when a received byte has the parity bit = 1, generating a received data interrupt. See Section 18.6.16 RS-485/EIA-485 modes of operation.
    +                    ENABLED = 0x1,
    +                },
    +            },
    +            ///  Receiver enable.
    +            RXDIS: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  The receiver is enabled.
    +                    ENABLED = 0x0,
    +                    ///  The receiver is disabled.
    +                    DISABLED = 0x1,
    +                },
    +            },
    +            ///  AAD enable.
    +            AADEN: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Auto Address Detect (AAD) is disabled.
    +                    DISABLED = 0x0,
    +                    ///  Auto Address Detect (AAD) is enabled.
    +                    ENABLED = 0x1,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u1,
    +            ///  Direction control enable.
    +            DCTRL: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disable Auto Direction Control.
    +                    DISABLE_AUTO_DIRECTI = 0x0,
    +                    ///  Enable Auto Direction Control.
    +                    ENABLE_AUTO_DIRECTIO = 0x1,
    +                },
    +            },
    +            ///  Direction control pin polarity. This bit reverses the polarity of the direction control signal on the Un_OE pin.
    +            OINV: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  The direction control pin will be driven to logic 0 when the transmitter has data to be sent. It will be driven to logic 1 after the last bit of data has been transmitted.
    +                    DIRLOW = 0x0,
    +                    ///  The direction control pin will be driven to logic 1 when the transmitter has data to be sent. It will be driven to logic 0 after the last bit of data has been transmitted.
    +                    DIRHIGH = 0x1,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u26,
    +        }),
    +        ///  RS-485/EIA-485 address match. Contains the address match value for RS-485/EIA-485 mode.
    +        RS485ADRMATCH: mmio.Mmio(packed struct(u32) {
    +            ///  Contains the address match value.
    +            ADRMATCH: u8,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u24,
    +        }),
    +        ///  RS-485/EIA-485 direction control delay.
    +        RS485DLY: mmio.Mmio(packed struct(u32) {
    +            ///  Contains the direction control (UnOE) delay value. This register works in conjunction with an 8-bit counter.
    +            DLY: u8,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u24,
    +        }),
    +    };
    +
    +    ///  UART1
    +    pub const UART1 = extern struct {
    +        ///  DLAB =0 Receiver Buffer Register. Contains the next received character to be read.
    +        RBR: mmio.Mmio(packed struct(u32) {
    +            ///  The UART1 Receiver Buffer Register contains the oldest received byte in the UART1 RX FIFO.
    +            RBR: u8,
    +            ///  Reserved, the value read from a reserved bit is not defined.
    +            RESERVED: u24,
    +        }),
    +        ///  DLAB =1. Divisor Latch MSB. Most significant byte of the baud rate divisor value. The full divisor is used to generate a baud rate from the fractional rate divider.
    +        DLM: mmio.Mmio(packed struct(u32) {
    +            ///  The UART1 Divisor Latch MSB Register, along with the U1DLL register, determines the baud rate of the UART1.
    +            DLMSB: u8,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u24,
    +        }),
    +        ///  Interrupt ID Register. Identifies which interrupt(s) are pending.
    +        IIR: mmio.Mmio(packed struct(u32) {
    +            ///  Interrupt status. Note that IIR[0] is active low. The pending interrupt can be determined by evaluating IIR[3:1].
    +            INTSTATUS: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  At least one interrupt is pending.
    +                    AT_LEAST_ONE_INTERRU = 0x0,
    +                    ///  No interrupt is pending.
    +                    NO_INTERRUPT_IS_PEND = 0x1,
    +                },
    +            },
    +            ///  Interrupt identification. IER[3:1] identifies an interrupt corresponding to the UART1 Rx or TX FIFO. All other combinations of IER[3:1] not listed below are reserved (100,101,111).
    +            INTID: packed union {
    +                raw: u3,
    +                value: enum(u3) {
    +                    ///  1 - Receive Line Status (RLS).
    +                    RLS = 0x3,
    +                    ///  2a - Receive Data Available (RDA).
    +                    RDA = 0x2,
    +                    ///  2b - Character Time-out Indicator (CTI).
    +                    CTI = 0x6,
    +                    ///  3 - THRE Interrupt.
    +                    THRE = 0x1,
    +                    ///  4 - Modem Interrupt.
    +                    MODEM = 0x0,
    +                    _,
    +                },
    +            },
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u2,
    +            ///  Copies of FCR[0].
    +            FIFOENABLE: u2,
    +            ///  End of auto-baud interrupt. True if auto-baud has finished successfully and interrupt is enabled.
    +            ABEOINT: u1,
    +            ///  Auto-baud time-out interrupt. True if auto-baud has timed out and interrupt is enabled.
    +            ABTOINT: u1,
    +            ///  Reserved, the value read from a reserved bit is not defined.
    +            RESERVED: u22,
    +        }),
    +        ///  Line Control Register. Contains controls for frame formatting and break generation.
    +        LCR: mmio.Mmio(packed struct(u32) {
    +            ///  Word Length Select.
    +            WLS: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  5-bit character length.
    +                    @"5_BIT_CHARACTER_LENG" = 0x0,
    +                    ///  6-bit character length.
    +                    @"6_BIT_CHARACTER_LENG" = 0x1,
    +                    ///  7-bit character length.
    +                    @"7_BIT_CHARACTER_LENG" = 0x2,
    +                    ///  8-bit character length.
    +                    @"8_BIT_CHARACTER_LENG" = 0x3,
    +                },
    +            },
    +            ///  Stop Bit Select.
    +            SBS: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  1 stop bit.
    +                    @"1_STOP_BIT_" = 0x0,
    +                    ///  2 stop bits (1.5 if LCR[1:0]=00).
    +                    @"2_STOP_BITS_1_5_IF_" = 0x1,
    +                },
    +            },
    +            ///  Parity Enable.
    +            PE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disable parity generation and checking.
    +                    DISABLE_PARITY_GENER = 0x0,
    +                    ///  Enable parity generation and checking.
    +                    ENABLE_PARITY_GENERA = 0x1,
    +                },
    +            },
    +            ///  Parity Select.
    +            PS: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Odd parity. Number of 1s in the transmitted character and the attached parity bit will be odd.
    +                    ODD_PARITY_NUMBER_O = 0x0,
    +                    ///  Even Parity. Number of 1s in the transmitted character and the attached parity bit will be even.
    +                    EVEN_PARITY_NUMBER_ = 0x1,
    +                    ///  Forced 1 stick parity.
    +                    FORCED1STICK_PAR = 0x2,
    +                    ///  Forced 0 stick parity.
    +                    FORCED0STICK_PAR = 0x3,
    +                },
    +            },
    +            ///  Break Control.
    +            BC: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disable break transmission.
    +                    DISABLE_BREAK_TRANSM = 0x0,
    +                    ///  Enable break transmission. Output pin UART1 TXD is forced to logic 0 when LCR[6] is active high.
    +                    ENABLE_BREAK_TRANSMI = 0x1,
    +                },
    +            },
    +            ///  Divisor Latch Access Bit (DLAB)
    +            DLAB: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disable access to Divisor Latches.
    +                    DISABLE_ACCESS_TO_DI = 0x0,
    +                    ///  Enable access to Divisor Latches.
    +                    ENABLE_ACCESS_TO_DIV = 0x1,
    +                },
    +            },
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u24,
    +        }),
    +        ///  Modem Control Register. Contains controls for flow control handshaking and loopback mode.
    +        MCR: mmio.Mmio(packed struct(u32) {
    +            ///  DTR Control. Source for modem output pin, DTR. This bit reads as 0 when modem loopback mode is active.
    +            DTRCTRL: u1,
    +            ///  RTS Control. Source for modem output pin RTS. This bit reads as 0 when modem loopback mode is active.
    +            RTSCTRL: u1,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u2,
    +            ///  Loopback Mode Select. The modem loopback mode provides a mechanism to perform diagnostic loopback testing. Serial data from the transmitter is connected internally to serial input of the receiver. Input pin, RXD1, has no effect on loopback and output pin, TXD1 is held in marking state. The 4 modem inputs (CTS, DSR, RI and DCD) are disconnected externally. Externally, the modem outputs (RTS, DTR) are set inactive. Internally, the 4 modem outputs are connected to the 4 modem inputs. As a result of these connections, the upper 4 bits of the MSR will be driven by the lower 4 bits of the MCR rather than the 4 modem inputs in normal mode. This permits modem status interrupts to be generated in loopback mode by writing the lower 4 bits of MCR.
    +            LMS: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disable modem loopback mode.
    +                    DISABLE_MODEM_LOOPBA = 0x0,
    +                    ///  Enable modem loopback mode.
    +                    ENABLE_MODEM_LOOPBAC = 0x1,
    +                },
    +            },
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u1,
    +            ///  RTS enable.
    +            RTSEN: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disable auto-rts flow control.
    +                    DISABLE_AUTO_RTS_FLO = 0x0,
    +                    ///  Enable auto-rts flow control.
    +                    ENABLE_AUTO_RTS_FLOW = 0x1,
    +                },
    +            },
    +            ///  CTS enable.
    +            CTSEN: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disable auto-cts flow control.
    +                    DISABLE_AUTO_CTS_FLO = 0x0,
    +                    ///  Enable auto-cts flow control.
    +                    ENABLE_AUTO_CTS_FLOW = 0x1,
    +                },
    +            },
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u24,
    +        }),
    +        ///  Line Status Register. Contains flags for transmit and receive status, including line errors.
    +        LSR: mmio.Mmio(packed struct(u32) {
    +            ///  Receiver Data Ready. LSR[0] is set when the RBR holds an unread character and is cleared when the UART1 RBR FIFO is empty.
    +            RDR: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  The UART1 receiver FIFO is empty.
    +                    EMPTY = 0x0,
    +                    ///  The UART1 receiver FIFO is not empty.
    +                    NOTEMPTY = 0x1,
    +                },
    +            },
    +            ///  Overrun Error. The overrun error condition is set as soon as it occurs. An LSR read clears LSR[1]. LSR[1] is set when UART1 RSR has a new character assembled and the UART1 RBR FIFO is full. In this case, the UART1 RBR FIFO will not be overwritten and the character in the UART1 RSR will be lost.
    +            OE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Overrun error status is inactive.
    +                    INACTIVE = 0x0,
    +                    ///  Overrun error status is active.
    +                    ACTIVE = 0x1,
    +                },
    +            },
    +            ///  Parity Error. When the parity bit of a received character is in the wrong state, a parity error occurs. An LSR read clears LSR[2]. Time of parity error detection is dependent on FCR[0]. Note: A parity error is associated with the character at the top of the UART1 RBR FIFO.
    +            PE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Parity error status is inactive.
    +                    INACTIVE = 0x0,
    +                    ///  Parity error status is active.
    +                    ACTIVE = 0x1,
    +                },
    +            },
    +            ///  Framing Error. When the stop bit of a received character is a logic 0, a framing error occurs. An LSR read clears LSR[3]. The time of the framing error detection is dependent on FCR0. Upon detection of a framing error, the RX will attempt to resynchronize to the data and assume that the bad stop bit is actually an early start bit. However, it cannot be assumed that the next received byte will be correct even if there is no Framing Error. Note: A framing error is associated with the character at the top of the UART1 RBR FIFO.
    +            FE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Framing error status is inactive.
    +                    INACTIVE = 0x0,
    +                    ///  Framing error status is active.
    +                    ACTIVE = 0x1,
    +                },
    +            },
    +            ///  Break Interrupt. When RXD1 is held in the spacing state (all zeroes) for one full character transmission (start, data, parity, stop), a break interrupt occurs. Once the break condition has been detected, the receiver goes idle until RXD1 goes to marking state (all ones). An LSR read clears this status bit. The time of break detection is dependent on FCR[0]. Note: The break interrupt is associated with the character at the top of the UART1 RBR FIFO.
    +            BI: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Break interrupt status is inactive.
    +                    INACTIVE = 0x0,
    +                    ///  Break interrupt status is active.
    +                    ACTIVE = 0x1,
    +                },
    +            },
    +            ///  Transmitter Holding Register Empty. THRE is set immediately upon detection of an empty UART1 THR and is cleared on a THR write.
    +            THRE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  THR contains valid data.
    +                    VALID = 0x0,
    +                    ///  THR is empty.
    +                    THR_IS_EMPTY_ = 0x1,
    +                },
    +            },
    +            ///  Transmitter Empty. TEMT is set when both THR and TSR are empty; TEMT is cleared when either the TSR or the THR contain valid data.
    +            TEMT: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  THR and/or the TSR contains valid data.
    +                    VALID = 0x0,
    +                    ///  THR and the TSR are empty.
    +                    EMPTY = 0x1,
    +                },
    +            },
    +            ///  Error in RX FIFO. LSR[7] is set when a character with a RX error such as framing error, parity error or break interrupt, is loaded into the RBR. This bit is cleared when the LSR register is read and there are no subsequent errors in the UART1 FIFO.
    +            RXFE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  RBR contains no UART1 RX errors or FCR[0]=0.
    +                    NOERROR = 0x0,
    +                    ///  UART1 RBR contains at least one UART1 RX error.
    +                    ERRORS = 0x1,
    +                },
    +            },
    +            ///  Reserved, the value read from a reserved bit is not defined.
    +            RESERVED: u24,
    +        }),
    +        ///  Modem Status Register. Contains handshake signal status flags.
    +        MSR: mmio.Mmio(packed struct(u32) {
    +            ///  Delta CTS. Set upon state change of input CTS. Cleared on an MSR read.
    +            DCTS: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  No change detected on modem input, CTS.
    +                    NO_CHANGE_DETECTED_O = 0x0,
    +                    ///  State change detected on modem input, CTS.
    +                    STATE_CHANGE_DETECTE = 0x1,
    +                },
    +            },
    +            ///  Delta DSR. Set upon state change of input DSR. Cleared on an MSR read.
    +            DDSR: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  No change detected on modem input, DSR.
    +                    NO_CHANGE_DETECTED_O = 0x0,
    +                    ///  State change detected on modem input, DSR.
    +                    STATE_CHANGE_DETECTE = 0x1,
    +                },
    +            },
    +            ///  Trailing Edge RI. Set upon low to high transition of input RI. Cleared on an MSR read.
    +            TERI: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  No change detected on modem input, RI.
    +                    NO_CHANGE_DETECTED_O = 0x0,
    +                    ///  Low-to-high transition detected on RI.
    +                    LOW_TO_HIGH_TRANSITI = 0x1,
    +                },
    +            },
    +            ///  Delta DCD. Set upon state change of input DCD. Cleared on an MSR read.
    +            DDCD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  No change detected on modem input, DCD.
    +                    NO_CHANGE_DETECTED_O = 0x0,
    +                    ///  State change detected on modem input, DCD.
    +                    STATE_CHANGE_DETECTE = 0x1,
    +                },
    +            },
    +            ///  Clear To Send State. Complement of input signal CTS. This bit is connected to MCR[1] in modem loopback mode.
    +            CTS: u1,
    +            ///  Data Set Ready State. Complement of input signal DSR. This bit is connected to MCR[0] in modem loopback mode.
    +            DSR: u1,
    +            ///  Ring Indicator State. Complement of input RI. This bit is connected to MCR[2] in modem loopback mode.
    +            RI: u1,
    +            ///  Data Carrier Detect State. Complement of input DCD. This bit is connected to MCR[3] in modem loopback mode.
    +            DCD: u1,
    +            ///  Reserved, the value read from a reserved bit is not defined.
    +            RESERVED: u24,
    +        }),
    +        ///  Scratch Pad Register. 8-bit temporary storage for software.
    +        SCR: mmio.Mmio(packed struct(u32) {
    +            ///  A readable, writable byte.
    +            Pad: u8,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u24,
    +        }),
    +        ///  Auto-baud Control Register. Contains controls for the auto-baud feature.
    +        ACR: mmio.Mmio(packed struct(u32) {
    +            ///  Auto-baud start bit. This bit is automatically cleared after auto-baud completion.
    +            START: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Auto-baud stop (auto-baud is not running).
    +                    STOP = 0x0,
    +                    ///  Auto-baud start (auto-baud is running). Auto-baud run bit. This bit is automatically cleared after auto-baud completion.
    +                    START = 0x1,
    +                },
    +            },
    +            ///  Auto-baud mode select bit.
    +            MODE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Mode 0.
    +                    MODE_0_ = 0x0,
    +                    ///  Mode 1.
    +                    MODE_1_ = 0x1,
    +                },
    +            },
    +            ///  Auto-baud restart bit.
    +            AUTORESTART: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  No restart
    +                    NO_RESTART = 0x0,
    +                    ///  Restart in case of time-out (counter restarts at next UART1 Rx falling edge)
    +                    RESTART_IN_CASE_OF_T = 0x1,
    +                },
    +            },
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u5,
    +            ///  End of auto-baud interrupt clear bit (write-only).
    +            ABEOINTCLR: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Writing a 0 has no impact.
    +                    WRITING_A_0_HAS_NO_I = 0x0,
    +                    ///  Writing a 1 will clear the corresponding interrupt in the IIR.
    +                    WRITING_A_1_WILL_CLE = 0x1,
    +                },
    +            },
    +            ///  Auto-baud time-out interrupt clear bit (write-only).
    +            ABTOINTCLR: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Writing a 0 has no impact.
    +                    WRITING_A_0_HAS_NO_I = 0x0,
    +                    ///  Writing a 1 will clear the corresponding interrupt in the IIR.
    +                    WRITING_A_1_WILL_CLE = 0x1,
    +                },
    +            },
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u22,
    +        }),
    +        reserved40: [4]u8,
    +        ///  Fractional Divider Register. Generates a clock input for the baud rate divider.
    +        FDR: mmio.Mmio(packed struct(u32) {
    +            ///  Baud rate generation pre-scaler divisor value. If this field is 0, fractional baud rate generator will not impact the UART1 baud rate.
    +            DIVADDVAL: u4,
    +            ///  Baud rate pre-scaler multiplier value. This field must be greater or equal 1 for UART1 to operate properly, regardless of whether the fractional baud rate generator is used or not.
    +            MULVAL: u4,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u24,
    +        }),
    +        reserved48: [4]u8,
    +        ///  Transmit Enable Register. Turns off UART transmitter for use with software flow control.
    +        TER: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u7,
    +            ///  When this bit is 1, as it is after a Reset, data written to the THR is output on the TXD pin as soon as any preceding data has been sent. If this bit cleared to 0 while a character is being sent, the transmission of that character is completed, but no further characters are sent until this bit is set again. In other words, a 0 in this bit blocks the transfer of characters from the THR or TX FIFO into the transmit shift register. Software can clear this bit when it detects that the a hardware-handshaking TX-permit signal (CTS) has gone false, or with software handshaking, when it receives an XOFF character (DC3). Software can set this bit again when it detects that the TX-permit signal has gone true, or when it receives an XON (DC1) character.
    +            TXEN: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u24,
    +        }),
    +        reserved76: [24]u8,
    +        ///  RS-485/EIA-485 Control. Contains controls to configure various aspects of RS-485/EIA-485 modes.
    +        RS485CTRL: mmio.Mmio(packed struct(u32) {
    +            ///  RS-485/EIA-485 Normal Multidrop Mode (NMM) mode select.
    +            NMMEN: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled.
    +                    DISABLED_ = 0x0,
    +                    ///  Enabled. In this mode, an address is detected when a received byte causes the UART to set the parity error and generate an interrupt.
    +                    ENABLED_IN_THIS_MOD = 0x1,
    +                },
    +            },
    +            ///  Receive enable.
    +            RXDIS: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Enabled.
    +                    ENABLED_ = 0x0,
    +                    ///  Disabled.
    +                    DISABLED_ = 0x1,
    +                },
    +            },
    +            ///  Auto Address Detect (AAD) enable.
    +            AADEN: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled.
    +                    DISABLED_ = 0x0,
    +                    ///  Enabled.
    +                    ENABLED_ = 0x1,
    +                },
    +            },
    +            ///  Direction control.
    +            SEL: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  RTS. If direction control is enabled (bit DCTRL = 1), pin RTS is used for direction control.
    +                    RTS_IF_DIRECTION_CO = 0x0,
    +                    ///  DTR. If direction control is enabled (bit DCTRL = 1), pin DTR is used for direction control.
    +                    DTR_IF_DIRECTION_CO = 0x1,
    +                },
    +            },
    +            ///  Direction control enable.
    +            DCTRL: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disable Auto Direction Control.
    +                    DISABLE_AUTO_DIRECTI = 0x0,
    +                    ///  Enable Auto Direction Control.
    +                    ENABLE_AUTO_DIRECTIO = 0x1,
    +                },
    +            },
    +            ///  Polarity. This bit reverses the polarity of the direction control signal on the RTS (or DTR) pin.
    +            OINV: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  LOW. The direction control pin will be driven to logic 0 when the transmitter has data to be sent. It will be driven to logic 1 after the last bit of data has been transmitted.
    +                    LOW_THE_DIRECTION_C = 0x0,
    +                    ///  HIGH. The direction control pin will be driven to logic 1 when the transmitter has data to be sent. It will be driven to logic 0 after the last bit of data has been transmitted.
    +                    HIGH_THE_DIRECTION_ = 0x1,
    +                },
    +            },
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u26,
    +        }),
    +        ///  RS-485/EIA-485 address match. Contains the address match value for RS-485/EIA-485 mode.
    +        RS485ADRMATCH: mmio.Mmio(packed struct(u32) {
    +            ///  Contains the address match value.
    +            ADRMATCH: u8,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u24,
    +        }),
    +        ///  RS-485/EIA-485 direction control delay.
    +        RS485DLY: mmio.Mmio(packed struct(u32) {
    +            ///  Contains the direction control (RTS or DTR) delay value. This register works in conjunction with an 8-bit counter.
    +            DLY: u8,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u24,
    +        }),
    +    };
    +
    +    ///  Pulse Width Modulators (PWM1)
    +    pub const PWM1 = extern struct {
    +        ///  Interrupt Register. The IR can be written to clear interrupts, or read to identify which PWM interrupt sources are pending.
    +        IR: mmio.Mmio(packed struct(u32) {
    +            ///  Interrupt flag for PWM match channel 0.
    +            PWMMR0INT: u1,
    +            ///  Interrupt flag for PWM match channel 1.
    +            PWMMR1INT: u1,
    +            ///  Interrupt flag for PWM match channel 2.
    +            PWMMR2INT: u1,
    +            ///  Interrupt flag for PWM match channel 3.
    +            PWMMR3INT: u1,
    +            ///  Interrupt flag for capture input 0
    +            PWMCAP0INT: u1,
    +            ///  Interrupt flag for capture input 1 (available in PWM1IR only; this bit is reserved in PWM0IR).
    +            PWMCAP1INT: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u2,
    +            ///  Interrupt flag for PWM match channel 4.
    +            PWMMR4INT: u1,
    +            ///  Interrupt flag for PWM match channel 5.
    +            PWMMR5INT: u1,
    +            ///  Interrupt flag for PWM match channel 6.
    +            PWMMR6INT: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u21,
    +        }),
    +        ///  Timer Control Register. The TCR is used to control the Timer Counter functions.
    +        TCR: mmio.Mmio(packed struct(u32) {
    +            ///  Counter Enable
    +            CE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  The PWM Timer Counter and PWM Prescale Counter are enabled for counting.
    +                    THE_PWM_TIMER_COUNTE = 0x1,
    +                    ///  The counters are disabled.
    +                    THE_COUNTERS_ARE_DIS = 0x0,
    +                },
    +            },
    +            ///  Counter Reset
    +            CR: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  The PWM Timer Counter and the PWM Prescale Counter are synchronously reset on the next positive edge of PCLK. The counters remain reset until this bit is returned to zero.
    +                    THE_PWM_TIMER_COUNTE = 0x1,
    +                    ///  Clear reset.
    +                    CLEAR_RESET_ = 0x0,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u1,
    +            ///  PWM Enable
    +            PWMEN: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  PWM mode is enabled (counter resets to 1). PWM mode causes the shadow registers to operate in connection with the Match registers. A program write to a Match register will not have an effect on the Match result until the corresponding bit in PWMLER has been set, followed by the occurrence of a PWM Match 0 event. Note that the PWM Match register that determines the PWM rate (PWM Match Register 0 - MR0) must be set up prior to the PWM being enabled. Otherwise a Match event will not occur to cause shadow register contents to become effective.
    +                    PWM_MODE_IS_ENABLED_ = 0x1,
    +                    ///  Timer mode is enabled (counter resets to 0).
    +                    TIMER_MODE_IS_ENABLE = 0x0,
    +                },
    +            },
    +            ///  Master Disable (PWM0 only). The two PWMs may be synchronized using the Master Disable control bit. The Master disable bit of the Master PWM (PWM0 module) controls a secondary enable input to both PWMs, as shown in Figure 141. This bit has no function in the Slave PWM (PWM1).
    +            MDIS: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Master use. PWM0 is the master, and both PWMs are enabled for counting.
    +                    MASTER_USE_PWM0_IS_ = 0x1,
    +                    ///  Individual use. The PWMs are used independently, and the individual Counter Enable bits are used to control the PWMs.
    +                    INDIVIDUAL_USE_THE_ = 0x0,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u27,
    +        }),
    +        ///  Timer Counter. The 32 bit TC is incremented every PR+1 cycles of PCLK. The TC is controlled through the TCR.
    +        TC: mmio.Mmio(packed struct(u32) {
    +            ///  Timer counter value.
    +            TC: u32,
    +        }),
    +        ///  Prescale Register. Determines how often the PWM counter is incremented.
    +        PR: mmio.Mmio(packed struct(u32) {
    +            ///  Prescale counter maximum value.
    +            PM: u32,
    +        }),
    +        ///  Prescale Counter. Prescaler for the main PWM counter.
    +        PC: mmio.Mmio(packed struct(u32) {
    +            ///  Prescale counter value.
    +            PC: u32,
    +        }),
    +        ///  Match Control Register. The MCR is used to control whether an interrupt is generated and if the PWM counter is reset when a Match occurs.
    +        MCR: mmio.Mmio(packed struct(u32) {
    +            ///  Interrupt PWM0
    +            PWMMR0I: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled.
    +                    DISABLED_ = 0x0,
    +                    ///  Interrupt on PWMMR0: an interrupt is generated when PWMMR0 matches the value in the PWMTC.
    +                    INTERRUPT_ON_PWMMR0 = 0x1,
    +                },
    +            },
    +            ///  Reset PWM0
    +            PWMMR0R: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled.
    +                    DISABLED_ = 0x0,
    +                    ///  Reset on PWMMR0: the PWMTC will be reset if PWMMR0 matches it.
    +                    RESET_ON_PWMMR0_THE = 0x1,
    +                },
    +            },
    +            ///  Stop PWM0
    +            PWMMR0S: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled
    +                    DISABLED = 0x0,
    +                    ///  Stop on PWMMR0: the PWMTC and PWMPC will be stopped and PWMTCR bit 0 will be set to 0 if PWMMR0 matches the PWMTC.
    +                    STOP_ON_PWMMR0_THE_ = 0x1,
    +                },
    +            },
    +            ///  Interrupt PWM1
    +            PWMMR1I: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled.
    +                    DISABLED_ = 0x0,
    +                    ///  Interrupt on PWMMR1: an interrupt is generated when PWMMR1 matches the value in the PWMTC.
    +                    INTERRUPT_ON_PWMMR1 = 0x1,
    +                },
    +            },
    +            ///  Reset PWM1
    +            PWMMR1R: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled.
    +                    DISABLED_ = 0x0,
    +                    ///  Reset on PWMMR1: the PWMTC will be reset if PWMMR1 matches it.
    +                    RESET_ON_PWMMR1_THE = 0x1,
    +                },
    +            },
    +            ///  Stop PWM1
    +            PWMMR1S: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled
    +                    DISABLED = 0x0,
    +                    ///  Stop on PWMMR1: the PWMTC and PWMPC will be stopped and PWMTCR bit 0 will be set to 0 if PWMMR1 matches the PWMTC.
    +                    STOP_ON_PWMMR1_THE_ = 0x1,
    +                },
    +            },
    +            ///  Interrupt PWM0
    +            PWMMR2I: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled.
    +                    DISABLED_ = 0x0,
    +                    ///  Interrupt on PWMMR2: an interrupt is generated when PWMMR2 matches the value in the PWMTC.
    +                    INTERRUPT_ON_PWMMR2 = 0x1,
    +                },
    +            },
    +            ///  Reset PWM0
    +            PWMMR2R: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled.
    +                    DISABLED_ = 0x0,
    +                    ///  Reset on PWMMR2: the PWMTC will be reset if PWMMR2 matches it.
    +                    RESET_ON_PWMMR2_THE = 0x1,
    +                },
    +            },
    +            ///  Stop PWM0
    +            PWMMR2S: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled
    +                    DISABLED = 0x0,
    +                    ///  Stop on PWMMR2: the PWMTC and PWMPC will be stopped and PWMTCR bit 0 will be set to 0 if PWMMR0 matches the PWMTC.
    +                    STOP_ON_PWMMR2_THE_ = 0x1,
    +                },
    +            },
    +            ///  Interrupt PWM3
    +            PWMMR3I: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled.
    +                    DISABLED_ = 0x0,
    +                    ///  Interrupt on PWMMR3: an interrupt is generated when PWMMR3 matches the value in the PWMTC.
    +                    INTERRUPT_ON_PWMMR3 = 0x1,
    +                },
    +            },
    +            ///  Reset PWM3
    +            PWMMR3R: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled.
    +                    DISABLED_ = 0x0,
    +                    ///  Reset on PWMMR3: the PWMTC will be reset if PWMMR3 matches it.
    +                    RESET_ON_PWMMR3_THE = 0x1,
    +                },
    +            },
    +            ///  Stop PWM0
    +            PWMMR3S: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled
    +                    DISABLED = 0x0,
    +                    ///  Stop on PWMMR3: the PWMTC and PWMPC will be stopped and PWMTCR bit 0 will be set to 0 if PWMMR0 matches the PWMTC.
    +                    STOP_ON_PWMMR3_THE_ = 0x1,
    +                },
    +            },
    +            ///  Interrupt PWM4
    +            PWMMR4I: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled.
    +                    DISABLED_ = 0x0,
    +                    ///  Interrupt on PWMMR4: an interrupt is generated when PWMMR4 matches the value in the PWMTC.
    +                    INTERRUPT_ON_PWMMR4 = 0x1,
    +                },
    +            },
    +            ///  Reset PWM4
    +            PWMMR4R: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled.
    +                    DISABLED_ = 0x0,
    +                    ///  Reset on PWMMR4: the PWMTC will be reset if PWMMR4 matches it.
    +                    RESET_ON_PWMMR4_THE = 0x1,
    +                },
    +            },
    +            ///  Stop PWM4
    +            PWMMR4S: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled
    +                    DISABLED = 0x0,
    +                    ///  Stop on PWMMR4: the PWMTC and PWMPC will be stopped and PWMTCR bit 0 will be set to 0 if PWMMR4 matches the PWMTC.
    +                    STOP_ON_PWMMR4_THE_ = 0x1,
    +                },
    +            },
    +            ///  Interrupt PWM5
    +            PWMMR5I: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled.
    +                    DISABLED_ = 0x0,
    +                    ///  Interrupt on PWMMR5: an interrupt is generated when PWMMR5 matches the value in the PWMTC.
    +                    INTERRUPT_ON_PWMMR5 = 0x1,
    +                },
    +            },
    +            ///  Reset PWM5
    +            PWMMR5R: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled.
    +                    DISABLED_ = 0x0,
    +                    ///  Reset on PWMMR5: the PWMTC will be reset if PWMMR5 matches it.
    +                    RESET_ON_PWMMR5_THE = 0x1,
    +                },
    +            },
    +            ///  Stop PWM5
    +            PWMMR5S: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled
    +                    DISABLED = 0x0,
    +                    ///  Stop on PWMMR5: the PWMTC and PWMPC will be stopped and PWMTCR bit 0 will be set to 0 if PWMMR5 matches the PWMTC.
    +                    STOP_ON_PWMMR5_THE_ = 0x1,
    +                },
    +            },
    +            ///  Interrupt PWM6
    +            PWMMR6I: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled.
    +                    DISABLED_ = 0x0,
    +                    ///  Interrupt on PWMMR6: an interrupt is generated when PWMMR6 matches the value in the PWMTC.
    +                    INTERRUPT_ON_PWMMR6 = 0x1,
    +                },
    +            },
    +            ///  Reset PWM6
    +            PWMMR6R: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled.
    +                    DISABLED_ = 0x0,
    +                    ///  Reset on PWMMR6: the PWMTC will be reset if PWMMR6 matches it.
    +                    RESET_ON_PWMMR6_THE = 0x1,
    +                },
    +            },
    +            ///  Stop PWM6
    +            PWMMR6S: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled
    +                    DISABLED = 0x0,
    +                    ///  Stop on PWMMR6: the PWMTC and PWMPC will be stopped and PWMTCR bit 0 will be set to 0 if PWMMR6 matches the PWMTC.
    +                    STOP_ON_PWMMR6_THE_ = 0x1,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u11,
    +        }),
    +        reserved40: [16]u8,
    +        ///  Capture Control Register. The CCR controls which edges of the capture inputs are used to load the Capture Registers and whether or not an interrupt is generated for a capture event.
    +        CCR: mmio.Mmio(packed struct(u32) {
    +            ///  Capture on PWMn_CAP0 rising edge
    +            CAP0_R: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled. This feature is disabled.
    +                    DISABLED_THIS_FEATU = 0x0,
    +                    ///  Rising edge. A synchronously sampled rising edge on PWMn_CAP0 will cause CR0 to be loaded with the contents of the TC.
    +                    RISING_EDGE_A_SYNCH = 0x1,
    +                },
    +            },
    +            ///  Capture on PWMn_CAP0 falling edge
    +            CAP0_F: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled. This feature is disabled.
    +                    DISABLED_THIS_FEATU = 0x0,
    +                    ///  Falling edge. A synchronously sampled falling edge on PWMn_CAP0 will cause CR0 to be loaded with the contents of TC.
    +                    FALLING_EDGE_A_SYNC = 0x1,
    +                },
    +            },
    +            ///  Interrupt on PWMn_CAP0 event
    +            CAP0_I: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled. This feature is disabled.
    +                    DISABLED_THIS_FEATU = 0x0,
    +                    ///  Interrupt. A CR0 load due to a PWMn_CAP0 event will generate an interrupt.
    +                    INTERRUPT_A_CR0_LOA = 0x1,
    +                },
    +            },
    +            ///  Capture on PWMn_CAP1 rising edge. Reserved for PWM0.
    +            CAP1_R: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled. This feature is disabled.
    +                    DISABLED_THIS_FEATU = 0x0,
    +                    ///  Rising edge. A synchronously sampled rising edge on PWMn_CAP1 will cause CR1 to be loaded with the contents of the TC.
    +                    RISING_EDGE_A_SYNCH = 0x1,
    +                },
    +            },
    +            ///  Capture on PWMn_CAP1 falling edge. Reserved for PWM0.
    +            CAP1_F: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled. This feature is disabled.
    +                    DISABLED_THIS_FEATU = 0x0,
    +                    ///  Falling edge. A synchronously sampled falling edge on PWMn_CAP1 will cause CR1 to be loaded with the contents of TC.
    +                    FALLING_EDGE_A_SYNC = 0x1,
    +                },
    +            },
    +            ///  Interrupt on PWMn_CAP1 event. Reserved for PWM0.
    +            CAP1_I: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled. This feature is disabled.
    +                    DISABLED_THIS_FEATU = 0x0,
    +                    ///  Interrupt. A CR1 load due to a PWMn_CAP1 event will generate an interrupt.
    +                    INTERRUPT_A_CR1_LOA = 0x1,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u26,
    +        }),
    +        reserved76: [32]u8,
    +        ///  PWM Control Register. Enables PWM outputs and selects either single edge or double edge controlled PWM outputs.
    +        PCR: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved.
    +            RESERVED: u2,
    +            ///  PWM[2] output single/double edge mode control.
    +            PWMSEL2: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Single edge controlled mode is selected.
    +                    SINGLE_EDGE_CONTROLL = 0x0,
    +                    ///  Double edge controlled mode is selected.
    +                    DOUBLE_EDGE_CONTROLL = 0x1,
    +                },
    +            },
    +            ///  PWM[3] output edge control.
    +            PWMSEL3: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Single edge controlled mode is selected.
    +                    SINGLE_EDGE_CONTROLL = 0x0,
    +                    ///  Double edge controlled mode is selected.
    +                    DOUBLE_EDGE_CONTROLL = 0x1,
    +                },
    +            },
    +            ///  PWM[4] output edge control.
    +            PWMSEL4: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Single edge controlled mode is selected.
    +                    SINGLE_EDGE_CONTROLL = 0x0,
    +                    ///  Double edge controlled mode is selected.
    +                    DOUBLE_EDGE_CONTROLL = 0x1,
    +                },
    +            },
    +            ///  PWM[5] output edge control.
    +            PWMSEL5: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Single edge controlled mode is selected.
    +                    SINGLE_EDGE_CONTROLL = 0x0,
    +                    ///  Double edge controlled mode is selected.
    +                    DOUBLE_EDGE_CONTROLL = 0x1,
    +                },
    +            },
    +            ///  PWM[6] output edge control.
    +            PWMSEL6: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Single edge controlled mode is selected.
    +                    SINGLE_EDGE_CONTROLL = 0x0,
    +                    ///  Double edge controlled mode is selected.
    +                    DOUBLE_EDGE_CONTROLL = 0x1,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u2,
    +            ///  PWM[1] output enable control.
    +            PWMENA1: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  The PWM output is disabled.
    +                    THE_PWM_OUTPUT_IS_DI = 0x0,
    +                    ///  The PWM output is enabled.
    +                    THE_PWM_OUTPUT_IS_EN = 0x1,
    +                },
    +            },
    +            ///  PWM[2] output enable control.
    +            PWMENA2: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  The PWM output is disabled.
    +                    THE_PWM_OUTPUT_IS_DI = 0x0,
    +                    ///  The PWM output is enabled.
    +                    THE_PWM_OUTPUT_IS_EN = 0x1,
    +                },
    +            },
    +            ///  PWM[3] output enable control.
    +            PWMENA3: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  The PWM output is disabled.
    +                    THE_PWM_OUTPUT_IS_DI = 0x0,
    +                    ///  The PWM output is enabled.
    +                    THE_PWM_OUTPUT_IS_EN = 0x1,
    +                },
    +            },
    +            ///  PWM[4] output enable control.
    +            PWMENA4: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  The PWM output is disabled.
    +                    THE_PWM_OUTPUT_IS_DI = 0x0,
    +                    ///  The PWM output is enabled.
    +                    THE_PWM_OUTPUT_IS_EN = 0x1,
    +                },
    +            },
    +            ///  PWM[5] output enable control.
    +            PWMENA5: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  The PWM output is disabled.
    +                    THE_PWM_OUTPUT_IS_DI = 0x0,
    +                    ///  The PWM output is enabled.
    +                    THE_PWM_OUTPUT_IS_EN = 0x1,
    +                },
    +            },
    +            ///  PWM[6] output enable control. See PWMENA1 for details.
    +            PWMENA6: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  The PWM output is disabled.
    +                    THE_PWM_OUTPUT_IS_DI = 0x0,
    +                    ///  The PWM output is enabled.
    +                    THE_PWM_OUTPUT_IS_EN = 0x1,
    +                },
    +            },
    +            ///  Unused, always zero.
    +            RESERVED: u17,
    +        }),
    +        ///  Load Enable Register. Enables use of updated PWM match values.
    +        LER: mmio.Mmio(packed struct(u32) {
    +            ///  Enable PWM Match 0 Latch. PWM MR0 register update control. Writing a one to this bit allows the last value written to the PWM Match Register 0 to be become effective when the timer is next reset by a PWM Match event. See Section 27.6.7.
    +            MAT0LATCHEN: u1,
    +            ///  Enable PWM Match 1 Latch. PWM MR1 register update control. See bit 0 for details.
    +            MAT1LATCHEN: u1,
    +            ///  Enable PWM Match 2 Latch. PWM MR2 register update control. See bit 0 for details.
    +            MAT2LATCHEN: u1,
    +            ///  Enable PWM Match 3 Latch. PWM MR3 register update control. See bit 0 for details.
    +            MAT3LATCHEN: u1,
    +            ///  Enable PWM Match 4 Latch. PWM MR4 register update control. See bit 0 for details.
    +            MAT4LATCHEN: u1,
    +            ///  Enable PWM Match 5 Latch. PWM MR5 register update control. See bit 0 for details.
    +            MAT5LATCHEN: u1,
    +            ///  Enable PWM Match 6 Latch. PWM MR6 register update control. See bit 0 for details.
    +            MAT6LATCHEN: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u25,
    +        }),
    +        reserved112: [28]u8,
    +        ///  Count Control Register. The CTCR selects between Timer and Counter mode, and in Counter mode selects the signal and edge(s) for counting.
    +        CTCR: mmio.Mmio(packed struct(u32) {
    +            ///  Counter/ Timer Mode
    +            MOD: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Timer Mode: the TC is incremented when the Prescale Counter matches the Prescale register.
    +                    TIMER_MODE_THE_TC_I = 0x0,
    +                    ///  Rising edge counter Mode: the TC is incremented on rising edges of the PWM_CAP input selected by bits 3:2.
    +                    RISING_EDGE_COUNTER_ = 0x1,
    +                    ///  Falling edge counter Mode: the TC is incremented on falling edges of the PWM_CAP input selected by bits 3:2.
    +                    FALLING_EDGE_COUNTER = 0x2,
    +                    ///  Dual edge counter Mode: the TC is incremented on both edges of the PWM_CAP input selected by bits 3:2.
    +                    DUAL_EDGE_COUNTER_MO = 0x3,
    +                },
    +            },
    +            ///  Count Input Select. When bits 1:0 are not 00, these bits select which PWM_CAP pin carries the signal used to increment the TC. Other combinations are reserved.
    +            CIS: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  For PWM0: 00 = PWM0_CAP0 (Other combinations are reserved) For PWM1: 00 = PWM1_CAP0, 01 = PWM1_CAP1 (Other combinations are reserved)
    +                    FOR_PWM0_00_EQ_PWM0_ = 0x0,
    +                    _,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u28,
    +        }),
    +    };
    +
    +    ///  I2C bus interface
    +    pub const I2C0 = extern struct {
    +        ///  I2C Control Set Register. When a one is written to a bit of this register, the corresponding bit in the I2C control register is set. Writing a zero has no effect on the corresponding bit in the I2C control register.
    +        CONSET: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved. User software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u2,
    +            ///  Assert acknowledge flag.
    +            AA: u1,
    +            ///  I2C interrupt flag.
    +            SI: u1,
    +            ///  STOP flag.
    +            STO: u1,
    +            ///  START flag.
    +            STA: u1,
    +            ///  I2C interface enable.
    +            I2EN: u1,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u25,
    +        }),
    +        ///  I2C Status Register. During I2C operation, this register provides detailed status codes that allow software to determine the next action needed.
    +        STAT: mmio.Mmio(packed struct(u32) {
    +            ///  These bits are unused and are always 0.
    +            RESERVED: u3,
    +            ///  These bits give the actual status information about the I 2C interface.
    +            Status: u5,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u24,
    +        }),
    +        ///  I2C Data Register. During master or slave transmit mode, data to be transmitted is written to this register. During master or slave receive mode, data that has been received may be read from this register.
    +        DAT: mmio.Mmio(packed struct(u32) {
    +            ///  This register holds data values that have been received or are to be transmitted.
    +            Data: u8,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u24,
    +        }),
    +        ///  I2C Slave Address Register 0. Contains the 7-bit slave address for operation of the I2C interface in slave mode, and is not used in master mode. The least significant bit determines whether a slave responds to the General Call address.
    +        ADR0: mmio.Mmio(packed struct(u32) {
    +            ///  General Call enable bit.
    +            GC: u1,
    +            ///  The I2C device address for slave mode.
    +            Address: u7,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u24,
    +        }),
    +        ///  SCH Duty Cycle Register High Half Word. Determines the high time of the I2C clock.
    +        SCLH: mmio.Mmio(packed struct(u32) {
    +            ///  Count for SCL HIGH time period selection.
    +            SCLH: u16,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u16,
    +        }),
    +        ///  SCL Duty Cycle Register Low Half Word. Determines the low time of the I2C clock. SCLL and SCLH together determine the clock frequency generated by an I2C master and certain times used in slave mode.
    +        SCLL: mmio.Mmio(packed struct(u32) {
    +            ///  Count for SCL low time period selection.
    +            SCLL: u16,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u16,
    +        }),
    +        ///  I2C Control Clear Register. When a one is written to a bit of this register, the corresponding bit in the I2C control register is cleared. Writing a zero has no effect on the corresponding bit in the I2C control register.
    +        CONCLR: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved. User software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u2,
    +            ///  Assert acknowledge Clear bit.
    +            AAC: u1,
    +            ///  I2C interrupt Clear bit.
    +            SIC: u1,
    +            ///  Reserved. User software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u1,
    +            ///  START flag Clear bit.
    +            STAC: u1,
    +            ///  I2C interface Disable bit.
    +            I2ENC: u1,
    +            ///  Reserved. User software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u1,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u24,
    +        }),
    +        ///  Monitor mode control register.
    +        MMCTRL: mmio.Mmio(packed struct(u32) {
    +            ///  Monitor mode enable.
    +            MM_ENA: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Monitor mode disabled.
    +                    MONITOR_MODE_DISABLE = 0x0,
    +                    ///  The I 2C module will enter monitor mode. In this mode the SDA output will be forced high. This will prevent the I2C module from outputting data of any kind (including ACK) onto the I2C data bus. Depending on the state of the ENA_SCL bit, the output may be also forced high, preventing the module from having control over the I2C clock line.
    +                    THE_I_2C_MODULE_WILL = 0x1,
    +                },
    +            },
    +            ///  SCL output enable.
    +            ENA_SCL: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  When this bit is cleared to 0, the SCL output will be forced high when the module is in monitor mode. As described above, this will prevent the module from having any control over the I2C clock line.
    +                    WHEN_THIS_BIT_IS_CLE = 0x0,
    +                    ///  When this bit is set, the I2C module may exercise the same control over the clock line that it would in normal operation. This means that, acting as a slave peripheral, the I2C module can stretch the clock line (hold it low) until it has had time to respond to an I2C interrupt.[1]
    +                    WHEN_THIS_BIT_IS_SET = 0x1,
    +                },
    +            },
    +            ///  Select interrupt register match.
    +            MATCH_ALL: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  When this bit is cleared, an interrupt will only be generated when a match occurs to one of the (up-to) four address registers described above. That is, the module will respond as a normal slave as far as address-recognition is concerned.
    +                    WHEN_THIS_BIT_IS_CLE = 0x0,
    +                    ///  When this bit is set to 1 and the I2C is in monitor mode, an interrupt will be generated on ANY address received. This will enable the part to monitor all traffic on the bus.
    +                    WHEN_THIS_BIT_IS_SET = 0x1,
    +                },
    +            },
    +            ///  Reserved. The value read from reserved bits is not defined.
    +            RESERVED: u29,
    +        }),
    +        reserved44: [12]u8,
    +        ///  Data buffer register. The contents of the 8 MSBs of the DAT shift register will be transferred to the DATA_BUFFER automatically after every nine bits (8 bits of data plus ACK or NACK) has been received on the bus.
    +        DATA_BUFFER: mmio.Mmio(packed struct(u32) {
    +            ///  This register holds contents of the 8 MSBs of the DAT shift register.
    +            Data: u8,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u24,
    +        }),
    +    };
    +
    +    ///  SPI
    +    pub const SPI = extern struct {
    +        ///  SPI Control Register. This register controls the operation of the SPI.
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u2,
    +            ///  The SPI controller sends and receives 8 bits of data per transfer.
    +            BITENABLE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  The SPI controller sends and receives the number of bits selected by bits 11:8.
    +                    THE_SPI_CONTROLLER_S = 0x1,
    +                    _,
    +                },
    +            },
    +            ///  Clock phase control determines the relationship between the data and the clock on SPI transfers, and controls when a slave transfer is defined as starting and ending.
    +            CPHA: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Data is sampled on the first clock edge of SCK. A transfer starts and ends with activation and deactivation of the SSEL signal.
    +                    FIRST_EDGE = 0x0,
    +                    ///  Data is sampled on the second clock edge of the SCK. A transfer starts with the first clock edge, and ends with the last sampling edge when the SSEL signal is active.
    +                    SECOND_EDGE = 0x1,
    +                },
    +            },
    +            ///  Clock polarity control.
    +            CPOL: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  SCK is active high.
    +                    SCK_IS_ACTIVE_HIGH_ = 0x0,
    +                    ///  SCK is active low.
    +                    SCK_IS_ACTIVE_LOW_ = 0x1,
    +                },
    +            },
    +            ///  Master mode select.
    +            MSTR: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  The SPI operates in Slave mode.
    +                    SLAVE = 0x0,
    +                    ///  The SPI operates in Master mode.
    +                    MASTER = 0x1,
    +                },
    +            },
    +            ///  LSB First controls which direction each byte is shifted when transferred.
    +            LSBF: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  SPI data is transferred MSB (bit 7) first.
    +                    MSB = 0x0,
    +                    ///  SPI data is transferred LSB (bit 0) first.
    +                    LSB = 0x1,
    +                },
    +            },
    +            ///  Serial peripheral interrupt enable.
    +            SPIE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  SPI interrupts are inhibited.
    +                    INTBLOCK = 0x0,
    +                    ///  A hardware interrupt is generated each time the SPIF or MODF bits are activated.
    +                    HWINT = 0x1,
    +                },
    +            },
    +            ///  When bit 2 of this register is 1, this field controls the number of bits per transfer:
    +            BITS: packed union {
    +                raw: u4,
    +                value: enum(u4) {
    +                    ///  8 bits per transfer
    +                    @"8_BITS_PER_TRANSFER" = 0x8,
    +                    ///  9 bits per transfer
    +                    @"9_BITS_PER_TRANSFER" = 0x9,
    +                    ///  10 bits per transfer
    +                    @"10_BITS_PER_TRANSFER" = 0xa,
    +                    ///  11 bits per transfer
    +                    @"11_BITS_PER_TRANSFER" = 0xb,
    +                    ///  12 bits per transfer
    +                    @"12_BITS_PER_TRANSFER" = 0xc,
    +                    ///  13 bits per transfer
    +                    @"13_BITS_PER_TRANSFER" = 0xd,
    +                    ///  14 bits per transfer
    +                    @"14_BITS_PER_TRANSFER" = 0xe,
    +                    ///  15 bits per transfer
    +                    @"15_BITS_PER_TRANSFER" = 0xf,
    +                    ///  16 bits per transfer
    +                    @"16_BITS_PER_TRANSFER" = 0x0,
    +                    _,
    +                },
    +            },
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u20,
    +        }),
    +        ///  SPI Status Register. This register shows the status of the SPI.
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u3,
    +            ///  Slave abort. When 1, this bit indicates that a slave abort has occurred. This bit is cleared by reading this register.
    +            ABRT: u1,
    +            ///  Mode fault. when 1, this bit indicates that a Mode fault error has occurred. This bit is cleared by reading this register, then writing the SPI0 control register.
    +            MODF: u1,
    +            ///  Read overrun. When 1, this bit indicates that a read overrun has occurred. This bit is cleared by reading this register.
    +            ROVR: u1,
    +            ///  Write collision. When 1, this bit indicates that a write collision has occurred. This bit is cleared by reading this register, then accessing the SPI Data Register.
    +            WCOL: u1,
    +            ///  SPI transfer complete flag. When 1, this bit indicates when a SPI data transfer is complete. When a master, this bit is set at the end of the last cycle of the transfer. When a slave, this bit is set on the last data sampling edge of the SCK. This bit is cleared by first reading this register, then accessing the SPI Data Register. Note: this is not the SPI interrupt flag. This flag is found in the SPINT register.
    +            SPIF: u1,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u24,
    +        }),
    +        ///  SPI Data Register. This bi-directional register provides the transmit and receive data for the SPI. Transmit data is provided to the SPI0 by writing to this register. Data received by the SPI0 can be read from this register.
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  SPI Bi-directional data port.
    +            DATALOW: u8,
    +            ///  If bit 2 of the SPCR is 1 and bits 11:8 are other than 1000, some or all of these bits contain the additional transmit and receive bits. When less than 16 bits are selected, the more significant among these bits read as zeroes.
    +            DATAHIGH: u8,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u16,
    +        }),
    +        ///  SPI Clock Counter Register. This register controls the frequency of a master's SCK0.
    +        CCR: mmio.Mmio(packed struct(u32) {
    +            ///  SPI0 Clock counter setting.
    +            COUNTER: u8,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u24,
    +        }),
    +        reserved28: [12]u8,
    +        ///  SPI Interrupt Flag. This register contains the interrupt flag for the SPI interface.
    +        INT: mmio.Mmio(packed struct(u32) {
    +            ///  SPI interrupt flag. Set by the SPI interface to generate an interrupt. Cleared by writing a 1 to this bit. Note: this bit will be set once when SPIE = 1 and at least one of SPIF and WCOL bits is 1. However, only when the SPI Interrupt bit is set and SPI0 Interrupt is enabled in the NVIC, SPI based interrupt can be processed by interrupt handling software.
    +            SPIF: u1,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u7,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u24,
    +        }),
    +    };
    +
    +    ///  Real Time Clock (RTC)
    +    pub const RTC = extern struct {
    +        ///  Interrupt Location Register
    +        ILR: mmio.Mmio(packed struct(u32) {
    +            ///  When one, the Counter Increment Interrupt block generated an interrupt. Writing a one to this bit location clears the counter increment interrupt.
    +            RTCCIF: u1,
    +            ///  When one, the alarm registers generated an interrupt. Writing a one to this bit location clears the alarm interrupt.
    +            RTCALF: u1,
    +            reserved21: u19,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u11,
    +        }),
    +        reserved8: [4]u8,
    +        ///  Clock Control Register
    +        CCR: mmio.Mmio(packed struct(u32) {
    +            ///  Clock Enable.
    +            CLKEN: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  The time counters are enabled.
    +                    THE_TIME_COUNTERS_AR = 0x1,
    +                    ///  The time counters are disabled so that they may be initialized.
    +                    THE_TIME_COUNTERS_AR = 0x0,
    +                },
    +            },
    +            ///  CTC Reset.
    +            CTCRST: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  When one, the elements in the internal oscillator divider are reset, and remain reset until CCR[1] is changed to zero. This is the divider that generates the 1 Hz clock from the 32.768 kHz crystal. The state of the divider is not visible to software.
    +                    RESET = 0x1,
    +                    ///  No effect.
    +                    NO_EFFECT_ = 0x0,
    +                },
    +            },
    +            ///  Internal test mode controls. These bits must be 0 for normal RTC operation.
    +            RESERVED: u2,
    +            ///  Calibration counter enable.
    +            CCALEN: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  The calibration counter is disabled and reset to zero.
    +                    THE_CALIBRATION_COUN = 0x1,
    +                    ///  The calibration counter is enabled and counting, using the 1 Hz clock. When the calibration counter is equal to the value of the CALIBRATION register, the counter resets and repeats counting up to the value of the CALIBRATION register. See Section 30.6.4.2 and Section 30.6.5.
    +                    THE_CALIBRATION_COUN = 0x0,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u27,
    +        }),
    +        ///  Counter Increment Interrupt Register
    +        CIIR: mmio.Mmio(packed struct(u32) {
    +            ///  When 1, an increment of the Second value generates an interrupt.
    +            IMSEC: u1,
    +            ///  When 1, an increment of the Minute value generates an interrupt.
    +            IMMIN: u1,
    +            ///  When 1, an increment of the Hour value generates an interrupt.
    +            IMHOUR: u1,
    +            ///  When 1, an increment of the Day of Month value generates an interrupt.
    +            IMDOM: u1,
    +            ///  When 1, an increment of the Day of Week value generates an interrupt.
    +            IMDOW: u1,
    +            ///  When 1, an increment of the Day of Year value generates an interrupt.
    +            IMDOY: u1,
    +            ///  When 1, an increment of the Month value generates an interrupt.
    +            IMMON: u1,
    +            ///  When 1, an increment of the Year value generates an interrupt.
    +            IMYEAR: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u24,
    +        }),
    +        ///  Alarm Mask Register
    +        AMR: mmio.Mmio(packed struct(u32) {
    +            ///  When 1, the Second value is not compared for the alarm.
    +            AMRSEC: u1,
    +            ///  When 1, the Minutes value is not compared for the alarm.
    +            AMRMIN: u1,
    +            ///  When 1, the Hour value is not compared for the alarm.
    +            AMRHOUR: u1,
    +            ///  When 1, the Day of Month value is not compared for the alarm.
    +            AMRDOM: u1,
    +            ///  When 1, the Day of Week value is not compared for the alarm.
    +            AMRDOW: u1,
    +            ///  When 1, the Day of Year value is not compared for the alarm.
    +            AMRDOY: u1,
    +            ///  When 1, the Month value is not compared for the alarm.
    +            AMRMON: u1,
    +            ///  When 1, the Year value is not compared for the alarm.
    +            AMRYEAR: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u24,
    +        }),
    +        ///  Consolidated Time Register 0
    +        CTIME0: mmio.Mmio(packed struct(u32) {
    +            ///  Seconds value in the range of 0 to 59
    +            SECONDS: u6,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u2,
    +            ///  Minutes value in the range of 0 to 59
    +            MINUTES: u6,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u2,
    +            ///  Hours value in the range of 0 to 23
    +            HOURS: u5,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u3,
    +            ///  Day of week value in the range of 0 to 6
    +            DOW: u3,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u5,
    +        }),
    +        ///  Consolidated Time Register 1
    +        CTIME1: mmio.Mmio(packed struct(u32) {
    +            ///  Day of month value in the range of 1 to 28, 29, 30, or 31 (depending on the month and whether it is a leap year).
    +            DOM: u5,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u3,
    +            ///  Month value in the range of 1 to 12.
    +            MONTH: u4,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u4,
    +            ///  Year value in the range of 0 to 4095.
    +            YEAR: u12,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u4,
    +        }),
    +        ///  Consolidated Time Register 2
    +        CTIME2: mmio.Mmio(packed struct(u32) {
    +            ///  Day of year value in the range of 1 to 365 (366 for leap years).
    +            DOY: u12,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u20,
    +        }),
    +        ///  Seconds Counter
    +        SEC: mmio.Mmio(packed struct(u32) {
    +            ///  Seconds value in the range of 0 to 59
    +            SECONDS: u6,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u26,
    +        }),
    +        ///  Minutes Register
    +        MIN: mmio.Mmio(packed struct(u32) {
    +            ///  Minutes value in the range of 0 to 59
    +            MINUTES: u6,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u26,
    +        }),
    +        ///  Hours Register
    +        HRS: mmio.Mmio(packed struct(u32) {
    +            ///  Hours value in the range of 0 to 23
    +            HOURS: u5,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u27,
    +        }),
    +        ///  Day of Month Register
    +        DOM: mmio.Mmio(packed struct(u32) {
    +            ///  Day of month value in the range of 1 to 28, 29, 30, or 31 (depending on the month and whether it is a leap year).
    +            DOM: u5,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u27,
    +        }),
    +        ///  Day of Week Register
    +        DOW: mmio.Mmio(packed struct(u32) {
    +            ///  Day of week value in the range of 0 to 6.
    +            DOW: u3,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u29,
    +        }),
    +        ///  Day of Year Register
    +        DOY: mmio.Mmio(packed struct(u32) {
    +            ///  Day of year value in the range of 1 to 365 (366 for leap years).
    +            DOY: u9,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u23,
    +        }),
    +        ///  Months Register
    +        MONTH: mmio.Mmio(packed struct(u32) {
    +            ///  Month value in the range of 1 to 12.
    +            MONTH: u4,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u28,
    +        }),
    +        ///  Years Register
    +        YEAR: mmio.Mmio(packed struct(u32) {
    +            ///  Year value in the range of 0 to 4095.
    +            YEAR: u12,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u20,
    +        }),
    +        ///  Calibration Value Register
    +        CALIBRATION: mmio.Mmio(packed struct(u32) {
    +            ///  If enabled, the calibration counter counts up to this value. The maximum value is 131, 072 corresponding to about 36.4 hours. Calibration is disabled if CALVAL = 0.
    +            CALVAL: u17,
    +            ///  Calibration direction
    +            CALDIR: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Backward calibration. When CALVAL is equal to the calibration counter, the RTC timers will stop incrementing for 1 second.
    +                    BACKWARD_CALIBRATION = 0x1,
    +                    ///  Forward calibration. When CALVAL is equal to the calibration counter, the RTC timers will jump by 2 seconds.
    +                    FORWARD_CALIBRATION_ = 0x0,
    +                },
    +            },
    +            padding: u14,
    +        }),
    +        reserved88: [20]u8,
    +        ///  RTC Auxiliary Enable register
    +        RTC_AUXEN: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u4,
    +            ///  Oscillator Fail Detect interrupt enable. When 0: the RTC Oscillator Fail detect interrupt is disabled. When 1: the RTC Oscillator Fail detect interrupt is enabled. See Section 30.6.2.5.
    +            RTC_OSCFEN: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u27,
    +        }),
    +        ///  RTC Auxiliary control register
    +        RTC_AUX: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u4,
    +            ///  RTC Oscillator Fail detect flag. Read: this bit is set if the RTC oscillator stops, and when RTC power is first turned on. An interrupt will occur when this bit is set, the RTC_OSCFEN bit in RTC_AUXEN is a 1, and the RTC interrupt is enabled in the NVIC. Write: writing a 1 to this bit clears the flag.
    +            RTC_OSCF: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u1,
    +            ///  When 0: the RTC_ALARM pin reflects the RTC alarm status. When 1: the RTC_ALARM pin indicates Deep Power-down mode.
    +            RTC_PDOUT: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u25,
    +        }),
    +        ///  Alarm value for Seconds
    +        ASEC: mmio.Mmio(packed struct(u32) {
    +            ///  Seconds value in the range of 0 to 59
    +            SECONDS: u6,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u26,
    +        }),
    +        ///  Alarm value for Minutes
    +        AMIN: mmio.Mmio(packed struct(u32) {
    +            ///  Minutes value in the range of 0 to 59
    +            MINUTES: u6,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u26,
    +        }),
    +        ///  Alarm value for Hours
    +        AHRS: mmio.Mmio(packed struct(u32) {
    +            ///  Hours value in the range of 0 to 23
    +            HOURS: u5,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u27,
    +        }),
    +        ///  Alarm value for Day of Month
    +        ADOM: mmio.Mmio(packed struct(u32) {
    +            ///  Day of month value in the range of 1 to 28, 29, 30, or 31 (depending on the month and whether it is a leap year).
    +            DOM: u5,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u27,
    +        }),
    +        ///  Alarm value for Day of Week
    +        ADOW: mmio.Mmio(packed struct(u32) {
    +            ///  Day of week value in the range of 0 to 6.
    +            DOW: u3,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u29,
    +        }),
    +        ///  Alarm value for Day of Year
    +        ADOY: mmio.Mmio(packed struct(u32) {
    +            ///  Day of year value in the range of 1 to 365 (366 for leap years).
    +            DOY: u9,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u23,
    +        }),
    +        ///  Alarm value for Months
    +        AMON: mmio.Mmio(packed struct(u32) {
    +            ///  Month value in the range of 1 to 12.
    +            MONTH: u4,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u28,
    +        }),
    +        ///  Alarm value for Year
    +        AYRS: mmio.Mmio(packed struct(u32) {
    +            ///  Year value in the range of 0 to 4095.
    +            YEAR: u12,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u20,
    +        }),
    +    };
    +
    +    ///  GPIO
    +    pub const GPIOINT = extern struct {
    +        ///  GPIO overall Interrupt Status.
    +        STATUS: mmio.Mmio(packed struct(u32) {
    +            ///  Port 0 GPIO interrupt pending.
    +            P0INT: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  No pending interrupts on Port 0.
    +                    NO_PENDING_INTERRUPT = 0x0,
    +                    ///  At least one pending interrupt on Port 0.
    +                    AT_LEAST_ONE_PENDING = 0x1,
    +                },
    +            },
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u1,
    +            ///  Port 2 GPIO interrupt pending.
    +            P2INT: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  No pending interrupts on Port 2.
    +                    NO_PENDING_INTERRUPT = 0x0,
    +                    ///  At least one pending interrupt on Port 2.
    +                    AT_LEAST_ONE_PENDING = 0x1,
    +                },
    +            },
    +            padding: u29,
    +        }),
    +        ///  GPIO Interrupt Status for Rising edge for Port 0.
    +        STATR0: mmio.Mmio(packed struct(u32) {
    +            ///  Status of Rising Edge Interrupt for P0[0]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_0REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[1]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_1REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[2]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_2REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[3]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_3REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[4]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_4REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[5]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_5REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[6]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_6REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[7]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_7REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[8]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_8REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[9]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_9REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[10]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_10REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[11]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_11REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[12]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_12REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[13]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_13REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[14]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_14REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[15]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_15REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[16]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_16REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[17]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_17REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[18]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_18REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[19]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_19REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[20]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_20REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[21]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_21REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[22]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_22REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[23]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_23REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[24]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_24REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[25]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_25REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[26]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_26REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[27]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_27REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[28]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_28REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[29]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_29REI: u1,
    +            ///  Status of Rising Edge Interrupt for P0[30]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P0_30REI: u1,
    +            ///  Reserved.
    +            RESERVED: u1,
    +        }),
    +        ///  GPIO Interrupt Status for Falling edge for Port 0.
    +        STATF0: mmio.Mmio(packed struct(u32) {
    +            ///  Status of Falling Edge Interrupt for P0[0]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_0FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[1]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_1FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[2]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_2FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[3]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_3FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[4]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_4FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[5]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_5FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[6]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_6FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[7]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_7FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[8]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_8FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[9]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_9FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[10]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_10FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[11]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_11FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[12]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_12FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[13]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_13FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[14]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_14FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[15]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_15FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[16]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_16FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[17]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_17FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[18]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_18FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[19]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_19FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[20]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_20FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[21]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_21FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[22]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_22FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[23]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_23FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[24]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_24FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[25]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_25FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[26]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_26FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[27]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_27FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[28]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_28FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[29]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_29FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P0[30]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P0_30FEI: u1,
    +            ///  Reserved.
    +            RESERVED: u1,
    +        }),
    +        ///  GPIO Interrupt Clear.
    +        CLR0: mmio.Mmio(packed struct(u32) {
    +            ///  Clear GPIO port Interrupts for P0[0]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_0CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[1]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_1CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[2]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_2CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[3]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_3CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[4]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_4CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[5]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_5CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[6]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_6CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[7]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_7CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[8]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_8CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[9]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_9CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[10]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_10CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[11]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_11CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[12]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_12CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[13]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_13CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[14]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_14CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[15]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_15CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[16]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_16CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[17]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_17CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[18]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_18CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[19]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_19CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[20]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_20CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[21]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_21CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[22]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_22CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[23]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_23CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[24]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_24CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[25]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_25CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[26]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_26CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[27]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_27CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[28]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_28CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[29]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_29CI: u1,
    +            ///  Clear GPIO port Interrupts for P0[30]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P0_30CI: u1,
    +            ///  Reserved.
    +            RESERVED: u1,
    +        }),
    +        ///  GPIO Interrupt Enable for Rising edge for Port 0.
    +        ENR0: mmio.Mmio(packed struct(u32) {
    +            ///  Enable rising edge interrupt for P0[0]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_0ER: u1,
    +            ///  Enable rising edge interrupt for P0[1]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_1ER: u1,
    +            ///  Enable rising edge interrupt for P0[2]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_2ER: u1,
    +            ///  Enable rising edge interrupt for P0[3]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_3ER: u1,
    +            ///  Enable rising edge interrupt for P0[4]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_4ER: u1,
    +            ///  Enable rising edge interrupt for P0[5]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_5ER: u1,
    +            ///  Enable rising edge interrupt for P0[6]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_6ER: u1,
    +            ///  Enable rising edge interrupt for P0[7]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_7ER: u1,
    +            ///  Enable rising edge interrupt for P0[8]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_8ER: u1,
    +            ///  Enable rising edge interrupt for P0[9]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_9ER: u1,
    +            ///  Enable rising edge interrupt for P0[10]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_10ER: u1,
    +            ///  Enable rising edge interrupt for P0[11]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_11ER: u1,
    +            ///  Enable rising edge interrupt for P0[12]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_12ER: u1,
    +            ///  Enable rising edge interrupt for P0[13]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_13ER: u1,
    +            ///  Enable rising edge interrupt for P0[14]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_14ER: u1,
    +            ///  Enable rising edge interrupt for P0[15]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_15ER: u1,
    +            ///  Enable rising edge interrupt for P0[16]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_16ER: u1,
    +            ///  Enable rising edge interrupt for P0[17]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_17ER: u1,
    +            ///  Enable rising edge interrupt for P0[18]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_18ER: u1,
    +            ///  Enable rising edge interrupt for P0[19]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_19ER: u1,
    +            ///  Enable rising edge interrupt for P0[20]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_20ER: u1,
    +            ///  Enable rising edge interrupt for P0[21]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_21ER: u1,
    +            ///  Enable rising edge interrupt for P0[22]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_22ER: u1,
    +            ///  Enable rising edge interrupt for P0[23]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_23ER: u1,
    +            ///  Enable rising edge interrupt for P0[24]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_24ER: u1,
    +            ///  Enable rising edge interrupt for P0[25]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_25ER: u1,
    +            ///  Enable rising edge interrupt for P0[26]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_26ER: u1,
    +            ///  Enable rising edge interrupt for P0[27]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_27ER: u1,
    +            ///  Enable rising edge interrupt for P0[28]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_28ER: u1,
    +            ///  Enable rising edge interrupt for P0[29]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_29ER: u1,
    +            ///  Enable rising edge interrupt for P0[30]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P0_30ER: u1,
    +            ///  Reserved.
    +            RESERVED: u1,
    +        }),
    +        ///  GPIO Interrupt Enable for Falling edge for Port 0.
    +        ENF0: mmio.Mmio(packed struct(u32) {
    +            ///  Enable falling edge interrupt for P0[0]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_0EF: u1,
    +            ///  Enable falling edge interrupt for P0[1]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_1EF: u1,
    +            ///  Enable falling edge interrupt for P0[2]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_2EF: u1,
    +            ///  Enable falling edge interrupt for P0[3]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_3EF: u1,
    +            ///  Enable falling edge interrupt for P0[4]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_4EF: u1,
    +            ///  Enable falling edge interrupt for P0[5]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_5EF: u1,
    +            ///  Enable falling edge interrupt for P0[6]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_6EF: u1,
    +            ///  Enable falling edge interrupt for P0[7]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_7EF: u1,
    +            ///  Enable falling edge interrupt for P0[8]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_8EF: u1,
    +            ///  Enable falling edge interrupt for P0[9]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_9EF: u1,
    +            ///  Enable falling edge interrupt for P0[10]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_10EF: u1,
    +            ///  Enable falling edge interrupt for P0[11]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_11EF: u1,
    +            ///  Enable falling edge interrupt for P0[12]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_12EF: u1,
    +            ///  Enable falling edge interrupt for P0[13]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_13EF: u1,
    +            ///  Enable falling edge interrupt for P0[14]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_14EF: u1,
    +            ///  Enable falling edge interrupt for P0[15]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_15EF: u1,
    +            ///  Enable falling edge interrupt for P0[16]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_16EF: u1,
    +            ///  Enable falling edge interrupt for P0[17]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_17EF: u1,
    +            ///  Enable falling edge interrupt for P0[18]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_18EF: u1,
    +            ///  Enable falling edge interrupt for P0[19]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_19EF: u1,
    +            ///  Enable falling edge interrupt for P0[20]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_20EF: u1,
    +            ///  Enable falling edge interrupt for P0[21]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_21EF: u1,
    +            ///  Enable falling edge interrupt for P0[22]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_22EF: u1,
    +            ///  Enable falling edge interrupt for P0[23]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_23EF: u1,
    +            ///  Enable falling edge interrupt for P0[24]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_24EF: u1,
    +            ///  Enable falling edge interrupt for P0[25]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_25EF: u1,
    +            ///  Enable falling edge interrupt for P0[26]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_26EF: u1,
    +            ///  Enable falling edge interrupt for P0[27]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_27EF: u1,
    +            ///  Enable falling edge interrupt for P0[28]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_28EF: u1,
    +            ///  Enable falling edge interrupt for P0[29]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_29EF: u1,
    +            ///  Enable falling edge interrupt for P0[30]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P0_30EF: u1,
    +            ///  Reserved.
    +            RESERVED: u1,
    +        }),
    +        reserved36: [12]u8,
    +        ///  GPIO Interrupt Status for Rising edge for Port 0.
    +        STATR2: mmio.Mmio(packed struct(u32) {
    +            ///  Status of Rising Edge Interrupt for P2[0]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P2_0REI: u1,
    +            ///  Status of Rising Edge Interrupt for P2[1]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P2_1REI: u1,
    +            ///  Status of Rising Edge Interrupt for P2[2]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P2_2REI: u1,
    +            ///  Status of Rising Edge Interrupt for P2[3]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P2_3REI: u1,
    +            ///  Status of Rising Edge Interrupt for P2[4]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P2_4REI: u1,
    +            ///  Status of Rising Edge Interrupt for P2[5]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P2_5REI: u1,
    +            ///  Status of Rising Edge Interrupt for P2[6]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P2_6REI: u1,
    +            ///  Status of Rising Edge Interrupt for P2[7]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P2_7REI: u1,
    +            ///  Status of Rising Edge Interrupt for P2[8]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P2_8REI: u1,
    +            ///  Status of Rising Edge Interrupt for P2[9]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P2_9REI: u1,
    +            ///  Status of Rising Edge Interrupt for P2[10]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P2_10REI: u1,
    +            ///  Status of Rising Edge Interrupt for P2[11]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P2_11REI: u1,
    +            ///  Status of Rising Edge Interrupt for P2[12]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P2_12REI: u1,
    +            ///  Status of Rising Edge Interrupt for P2[13]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    +            P2_13REI: u1,
    +            ///  Reserved.
    +            RESERVED: u18,
    +        }),
    +        ///  GPIO Interrupt Status for Falling edge for Port 0.
    +        STATF2: mmio.Mmio(packed struct(u32) {
    +            ///  Status of Falling Edge Interrupt for P2[0]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P2_0FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P2[1]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P2_1FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P2[2]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P2_2FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P2[3]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P2_3FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P2[4]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P2_4FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P2[5]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P2_5FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P2[6]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P2_6FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P2[7]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P2_7FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P2[8]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P2_8FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P2[9]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P2_9FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P2[10]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P2_10FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P2[11]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P2_11FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P2[12]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P2_12FEI: u1,
    +            ///  Status of Falling Edge Interrupt for P2[13]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    +            P2_13FEI: u1,
    +            ///  Reserved.
    +            RESERVED: u18,
    +        }),
    +        ///  GPIO Interrupt Clear.
    +        CLR2: mmio.Mmio(packed struct(u32) {
    +            ///  Clear GPIO port Interrupts for P2[0]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P2_0CI: u1,
    +            ///  Clear GPIO port Interrupts for P2[1]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P2_1CI: u1,
    +            ///  Clear GPIO port Interrupts for P2[2]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P2_2CI: u1,
    +            ///  Clear GPIO port Interrupts for P2[3]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P2_3CI: u1,
    +            ///  Clear GPIO port Interrupts for P2[4]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P2_4CI: u1,
    +            ///  Clear GPIO port Interrupts for P2[5]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P2_5CI: u1,
    +            ///  Clear GPIO port Interrupts for P2[6]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P2_6CI: u1,
    +            ///  Clear GPIO port Interrupts for P2[7]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P2_7CI: u1,
    +            ///  Clear GPIO port Interrupts for P2[8]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P2_8CI: u1,
    +            ///  Clear GPIO port Interrupts for P2[9]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P2_9CI: u1,
    +            ///  Clear GPIO port Interrupts for P2[10]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P2_10CI: u1,
    +            ///  Clear GPIO port Interrupts for P2[11]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P2_11CI: u1,
    +            ///  Clear GPIO port Interrupts for P2[12]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P2_12CI: u1,
    +            ///  Clear GPIO port Interrupts for P2[13]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    +            P2_13CI: u1,
    +            ///  Reserved.
    +            RESERVED: u18,
    +        }),
    +        ///  GPIO Interrupt Enable for Rising edge for Port 0.
    +        ENR2: mmio.Mmio(packed struct(u32) {
    +            ///  Enable rising edge interrupt for P2[0]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P2_0ER: u1,
    +            ///  Enable rising edge interrupt for P2[1]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P2_1ER: u1,
    +            ///  Enable rising edge interrupt for P2[2]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P2_2ER: u1,
    +            ///  Enable rising edge interrupt for P2[3]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P2_3ER: u1,
    +            ///  Enable rising edge interrupt for P2[4]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P2_4ER: u1,
    +            ///  Enable rising edge interrupt for P2[5]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P2_5ER: u1,
    +            ///  Enable rising edge interrupt for P2[6]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P2_6ER: u1,
    +            ///  Enable rising edge interrupt for P2[7]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P2_7ER: u1,
    +            ///  Enable rising edge interrupt for P2[8]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P2_8ER: u1,
    +            ///  Enable rising edge interrupt for P2[9]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P2_9ER: u1,
    +            ///  Enable rising edge interrupt for P2[10]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P2_10ER: u1,
    +            ///  Enable rising edge interrupt for P2[11]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P2_11ER: u1,
    +            ///  Enable rising edge interrupt for P2[12]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P2_12ER: u1,
    +            ///  Enable rising edge interrupt for P2[13]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    +            P2_13ER: u1,
    +            ///  Reserved.
    +            RESERVED: u18,
    +        }),
    +        ///  GPIO Interrupt Enable for Falling edge for Port 0.
    +        ENF2: mmio.Mmio(packed struct(u32) {
    +            ///  Enable falling edge interrupt for P2[0]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P2_0EF: u1,
    +            ///  Enable falling edge interrupt for P2[1]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P2_1EF: u1,
    +            ///  Enable falling edge interrupt for P2[2]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P2_2EF: u1,
    +            ///  Enable falling edge interrupt for P2[3]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P2_3EF: u1,
    +            ///  Enable falling edge interrupt for P2[4]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P2_4EF: u1,
    +            ///  Enable falling edge interrupt for P2[5]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P2_5EF: u1,
    +            ///  Enable falling edge interrupt for P2[6]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P2_6EF: u1,
    +            ///  Enable falling edge interrupt for P2[7]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P2_7EF: u1,
    +            ///  Enable falling edge interrupt for P2[8]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P2_8EF: u1,
    +            ///  Enable falling edge interrupt for P2[9]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P2_9EF: u1,
    +            ///  Enable falling edge interrupt for P2[10]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P2_10EF: u1,
    +            ///  Enable falling edge interrupt for P2[11]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P2_11EF: u1,
    +            ///  Enable falling edge interrupt for P2[12]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P2_12EF: u1,
    +            ///  Enable falling edge interrupt for P2[13]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    +            P2_13EF: u1,
    +            ///  Reserved.
    +            RESERVED: u18,
    +        }),
    +    };
    +
    +    ///  Pin connect block
    +    pub const PINCONNECT = extern struct {
    +        ///  Pin function select register 0.
    +        PINSEL0: mmio.Mmio(packed struct(u32) {
    +            ///  Pin function select P0.0.
    +            P0_0: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P0.0
    +                    GPIO_P0 = 0x0,
    +                    ///  RD1
    +                    RD1 = 0x1,
    +                    ///  TXD3
    +                    TXD3 = 0x2,
    +                    ///  SDA1
    +                    SDA1 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P0.1.
    +            P0_1: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P0.1
    +                    GPIO_P0 = 0x0,
    +                    ///  TD1
    +                    TD1 = 0x1,
    +                    ///  RXD3
    +                    RXD3 = 0x2,
    +                    ///  SCL1
    +                    SCL1 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P0.2.
    +            P0_2: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P0.2
    +                    GPIO_P0 = 0x0,
    +                    ///  TXD0
    +                    TXD0 = 0x1,
    +                    ///  AD0.7
    +                    AD0 = 0x2,
    +                    ///  Reserved
    +                    RESERVED = 0x3,
    +                },
    +            },
    +            ///  Pin function select P0.3.
    +            P0_3: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P0.3.
    +                    GPIO_P0 = 0x0,
    +                    ///  RXD0
    +                    RXD0 = 0x1,
    +                    ///  AD0.6
    +                    AD0 = 0x2,
    +                    ///  Reserved.
    +                    RESERVED = 0x3,
    +                },
    +            },
    +            ///  Pin function select P0.4.
    +            P0_4: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P0.4.
    +                    GPIO_P0 = 0x0,
    +                    ///  I2SRX_CLK
    +                    I2SRX_CLK = 0x1,
    +                    ///  RD2
    +                    RD2 = 0x2,
    +                    ///  CAP2.0
    +                    CAP2 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P0.5.
    +            P0_5: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P0.5.
    +                    GPIO_P0 = 0x0,
    +                    ///  I2SRX_WS
    +                    I2SRX_WS = 0x1,
    +                    ///  TD2
    +                    TD2 = 0x2,
    +                    ///  CAP2.1
    +                    CAP2 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P0.6.
    +            P0_6: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P0.6.
    +                    GPIO_P0 = 0x0,
    +                    ///  I2SRX_SDA
    +                    I2SRX_SDA = 0x1,
    +                    ///  SSEL1
    +                    SSEL1 = 0x2,
    +                    ///  MAT2.0
    +                    MAT2 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P0.7.
    +            P0_7: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P0.7.
    +                    GPIO_P0 = 0x0,
    +                    ///  I2STX_CLK
    +                    I2STX_CLK = 0x1,
    +                    ///  SCK1
    +                    SCK1 = 0x2,
    +                    ///  MAT2.1
    +                    MAT2 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P0.8.
    +            P0_8: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P0.8.
    +                    GPIO_P0 = 0x0,
    +                    ///  I2STX_WS
    +                    I2STX_WS = 0x1,
    +                    ///  MISO1
    +                    MISO1 = 0x2,
    +                    ///  MAT2.2
    +                    MAT2 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P0.9.
    +            P0_9: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P0.9
    +                    GPIO_P0 = 0x0,
    +                    ///  I2STX_SDA
    +                    I2STX_SDA = 0x1,
    +                    ///  MOSI1
    +                    MOSI1 = 0x2,
    +                    ///  MAT2.3
    +                    MAT2 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P0.10.
    +            P0_10: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P0.10
    +                    GPIO_P0 = 0x0,
    +                    ///  TXD2
    +                    TXD2 = 0x1,
    +                    ///  SDA2
    +                    SDA2 = 0x2,
    +                    ///  MAT3.0
    +                    MAT3 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P0.11.
    +            P0_11: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P0.11
    +                    GPIO_P0 = 0x0,
    +                    ///  RXD2
    +                    RXD2 = 0x1,
    +                    ///  SCL2
    +                    SCL2 = 0x2,
    +                    ///  MAT3.1
    +                    MAT3 = 0x3,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u6,
    +            ///  Pin function select P0.15.
    +            P0_15: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P0.15
    +                    GPIO_P0 = 0x0,
    +                    ///  TXD1
    +                    TXD1 = 0x1,
    +                    ///  SCK0
    +                    SCK0 = 0x2,
    +                    ///  SCK
    +                    SCK = 0x3,
    +                },
    +            },
    +        }),
    +        ///  Pin function select register 1.
    +        PINSEL1: mmio.Mmio(packed struct(u32) {
    +            ///  Pin function select P0.16.
    +            P0_16: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P0.16
    +                    GPIO_P0 = 0x0,
    +                    ///  RXD1
    +                    RXD1 = 0x1,
    +                    ///  SSEL0
    +                    SSEL0 = 0x2,
    +                    ///  SSEL
    +                    SSEL = 0x3,
    +                },
    +            },
    +            ///  Pin function select P0.17.
    +            P0_17: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P0.17
    +                    GPIO_P0 = 0x0,
    +                    ///  CTS1
    +                    CTS1 = 0x1,
    +                    ///  MISO0
    +                    MISO0 = 0x2,
    +                    ///  MISO
    +                    MISO = 0x3,
    +                },
    +            },
    +            ///  Pin function select P0.18.
    +            P0_18: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P0.18
    +                    GPIO_P0 = 0x0,
    +                    ///  DCD1
    +                    DCD1 = 0x1,
    +                    ///  MOSI0
    +                    MOSI0 = 0x2,
    +                    ///  MOSI
    +                    MOSI = 0x3,
    +                },
    +            },
    +            ///  Pin function select P019.
    +            P0_19: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P0.19.
    +                    GPIO_P0 = 0x0,
    +                    ///  DSR1
    +                    DSR1 = 0x1,
    +                    ///  Reserved
    +                    RESERVED = 0x2,
    +                    ///  SDA1
    +                    SDA1 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P0.20.
    +            P0_20: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P0.20.
    +                    GPIO_P0 = 0x0,
    +                    ///  DTR1
    +                    DTR1 = 0x1,
    +                    ///  Reserved
    +                    RESERVED = 0x2,
    +                    ///  SCL1
    +                    SCL1 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P0.21.
    +            P0_21: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO Port 0.21.
    +                    GPIO_PORT_0 = 0x0,
    +                    ///  RI1
    +                    RI1 = 0x1,
    +                    ///  Reserved
    +                    RESERVED = 0x2,
    +                    ///  RD1
    +                    RD1 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P022
    +            P0_22: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P0.22.
    +                    GPIO_P0 = 0x0,
    +                    ///  RTS1
    +                    RTS1 = 0x1,
    +                    ///  Reserved
    +                    RESERVED = 0x2,
    +                    ///  TD1
    +                    TD1 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P023.
    +            P0_23: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P0.23.
    +                    GPIO_P0 = 0x0,
    +                    ///  AD0.0
    +                    AD0 = 0x1,
    +                    ///  I2SRX_CLK
    +                    I2SRX_CLK = 0x2,
    +                    ///  CAP3.0
    +                    CAP3 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P0.24.
    +            P0_24: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P0.24.
    +                    GPIO_P0 = 0x0,
    +                    ///  AD0.1
    +                    AD0 = 0x1,
    +                    ///  I2SRX_WS
    +                    I2SRX_WS = 0x2,
    +                    ///  CAP3.1
    +                    CAP3 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P0.25.
    +            P0_25: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P0.25
    +                    GPIO_P0 = 0x0,
    +                    ///  AD0.2
    +                    AD0 = 0x1,
    +                    ///  I2SRX_SDA
    +                    I2SRX_SDA = 0x2,
    +                    ///  TXD3
    +                    TXD3 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P0.26.
    +            P0_26: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P0.26
    +                    GPIO_P0 = 0x0,
    +                    ///  AD0.3
    +                    AD0 = 0x1,
    +                    ///  AOUT
    +                    AOUT = 0x2,
    +                    ///  RXD3
    +                    RXD3 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P0.27.
    +            P0_27: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P0.27
    +                    GPIO_P0 = 0x0,
    +                    ///  SDA0
    +                    SDA0 = 0x1,
    +                    ///  USB_SDA
    +                    USB_SDA = 0x2,
    +                    ///  Reserved
    +                    RESERVED = 0x3,
    +                },
    +            },
    +            ///  Pin function select P0.28.
    +            P0_28: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P0.28
    +                    GPIO_P0 = 0x0,
    +                    ///  SCL0
    +                    SCL0 = 0x1,
    +                    ///  USB_SCL
    +                    USB_SCL = 0x2,
    +                    ///  Reserved
    +                    RESERVED = 0x3,
    +                },
    +            },
    +            ///  Pin function select P0.29
    +            P0_29: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P0.29
    +                    GPIO_P0 = 0x0,
    +                    ///  USB_D+
    +                    USB_DP = 0x1,
    +                    ///  Reserved
    +                    RESERVED = 0x2,
    +                    ///  Reserved
    +                    RESERVED = 0x3,
    +                },
    +            },
    +            ///  Pin function select P0.30.
    +            P0_30: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P0.30
    +                    GPIO_P0 = 0x0,
    +                    ///  USB_D-
    +                    USB_DM = 0x1,
    +                    ///  Reserved
    +                    RESERVED = 0x2,
    +                    ///  Reserved
    +                    RESERVED = 0x3,
    +                },
    +            },
    +            ///  Reserved
    +            RESERVED: u2,
    +        }),
    +        ///  Pin function select register 2.
    +        PINSEL2: mmio.Mmio(packed struct(u32) {
    +            ///  Pin function select P1.0.
    +            P1_0: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P1.0
    +                    GPIO_P1 = 0x0,
    +                    ///  ENET_TXD0
    +                    ENET_TXD0 = 0x1,
    +                    ///  Reserved
    +                    RESERVED = 0x2,
    +                    ///  Reserved
    +                    RESERVED = 0x3,
    +                },
    +            },
    +            ///  Pin function select P1.1.
    +            P1_1: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P1.1
    +                    GPIO_P1 = 0x0,
    +                    ///  ENET_TXD1
    +                    ENET_TXD1 = 0x1,
    +                    ///  Reserved
    +                    RESERVED = 0x2,
    +                    ///  Reserved
    +                    RESERVED = 0x3,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u4,
    +            ///  Pin function select P1.4.
    +            P1_4: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P1.4.
    +                    GPIO_P1 = 0x0,
    +                    ///  ENET_TX_EN
    +                    ENET_TX_EN = 0x1,
    +                    ///  Reserved
    +                    RESERVED = 0x2,
    +                    ///  Reserved
    +                    RESERVED = 0x3,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u6,
    +            ///  Pin function select P1.8.
    +            P1_8: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P1.8.
    +                    GPIO_P1 = 0x0,
    +                    ///  ENET_CRS
    +                    ENET_CRS = 0x1,
    +                    ///  Reserved
    +                    RESERVED = 0x2,
    +                    ///  Reserved
    +                    RESERVED = 0x3,
    +                },
    +            },
    +            ///  Pin function select P1.9.
    +            P1_9: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO Port 1.9
    +                    GPIO_PORT_1 = 0x0,
    +                    ///  ENET_RXD0
    +                    ENET_RXD0 = 0x1,
    +                    ///  Reserved
    +                    RESERVED = 0x2,
    +                    ///  Reserved
    +                    RESERVED = 0x3,
    +                },
    +            },
    +            ///  Pin function select P1.10.
    +            P1_10: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P1.10
    +                    GPIO_P1 = 0x0,
    +                    ///  ENET_RXD1
    +                    ENET_RXD1 = 0x1,
    +                    ///  Reserved
    +                    RESERVED = 0x2,
    +                    ///  Reserved
    +                    RESERVED = 0x3,
    +                },
    +            },
    +            ///  Pin function select P1.14.
    +            P1_14: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P1.14
    +                    GPIO_P1 = 0x0,
    +                    ///  ENET_RX_ER
    +                    ENET_RX_ER = 0x1,
    +                    ///  Reserved
    +                    RESERVED = 0x2,
    +                    ///  Reserved
    +                    RESERVED = 0x3,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u6,
    +            ///  Pin function select P1.15.
    +            P1_15: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P1.15
    +                    GPIO_P1 = 0x0,
    +                    ///  ENET_REF_CLK
    +                    ENET_REF_CLK = 0x1,
    +                    ///  Reserved
    +                    RESERVED = 0x2,
    +                    ///  Reserved
    +                    RESERVED = 0x3,
    +                },
    +            },
    +        }),
    +        ///  Pin function select register 3.
    +        PINSEL3: mmio.Mmio(packed struct(u32) {
    +            ///  Pin function select P1.16.
    +            P1_16: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P1.16
    +                    GPIO_P1 = 0x0,
    +                    ///  ENET_MDC
    +                    ENET_MDC = 0x1,
    +                    ///  Reserved
    +                    RESERVED = 0x2,
    +                    ///  Reserved
    +                    RESERVED = 0x3,
    +                },
    +            },
    +            ///  Pin function select P1.17.
    +            P1_17: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P1.17
    +                    GPIO_P1 = 0x0,
    +                    ///  ENET_MDIO
    +                    ENET_MDIO = 0x1,
    +                    ///  Reserved
    +                    RESERVED = 0x2,
    +                    ///  Reserved
    +                    RESERVED = 0x3,
    +                },
    +            },
    +            ///  Pin function select P1.18.
    +            P1_18: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P1.18
    +                    GPIO_P1 = 0x0,
    +                    ///  USB_UP_LED
    +                    USB_UP_LED = 0x1,
    +                    ///  PWM1.1
    +                    PWM1 = 0x2,
    +                    ///  CAP1.0
    +                    CAP1 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P1.19.
    +            P1_19: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P1.19.
    +                    GPIO_P1 = 0x0,
    +                    ///  MCOA0
    +                    MCOA0 = 0x1,
    +                    ///  USB_PPWR
    +                    USB_PPWR = 0x2,
    +                    ///  CAP1.1
    +                    CAP1 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P1.20.
    +            P1_20: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P1.20.
    +                    GPIO_P1 = 0x0,
    +                    ///  MCI0
    +                    MCI0 = 0x1,
    +                    ///  PWM1.2
    +                    PWM1 = 0x2,
    +                    ///  SCK0
    +                    SCK0 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P1.21.
    +            P1_21: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P1.21.
    +                    GPIO_P1 = 0x0,
    +                    ///  MCABORT
    +                    MCABORT = 0x1,
    +                    ///  PWM1.3
    +                    PWM1 = 0x2,
    +                    ///  SSEL0
    +                    SSEL0 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P1.22
    +            P1_22: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P1.22.
    +                    GPIO_P1 = 0x0,
    +                    ///  MCOB0
    +                    MCOB0 = 0x1,
    +                    ///  USB_PWRD
    +                    USB_PWRD = 0x2,
    +                    ///  MAT1.0
    +                    MAT1 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P1.23.
    +            P1_23: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P1.23.
    +                    GPIO_P1 = 0x0,
    +                    ///  MCI1
    +                    MCI1 = 0x1,
    +                    ///  PWM1.4
    +                    PWM1 = 0x2,
    +                    ///  MISO0
    +                    MISO0 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P1.24.
    +            P1_24: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P1.24.
    +                    GPIO_P1 = 0x0,
    +                    ///  MCI2
    +                    MCI2 = 0x1,
    +                    ///  PWM1.5
    +                    PWM1 = 0x2,
    +                    ///  MOSI0
    +                    MOSI0 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P1.25.
    +            P1_25: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P1.25
    +                    GPIO_P1 = 0x0,
    +                    ///  MCOA1
    +                    MCOA1 = 0x1,
    +                    ///  Reserved
    +                    RESERVED = 0x2,
    +                    ///  MAT1.1
    +                    MAT1 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P1.26.
    +            P1_26: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P1.26
    +                    GPIO_P1 = 0x0,
    +                    ///  MCOB1
    +                    MCOB1 = 0x1,
    +                    ///  PWM1.6
    +                    PWM1 = 0x2,
    +                    ///  CAP0.0
    +                    CAP0 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P1.27.
    +            P1_27: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P1.27
    +                    GPIO_P1 = 0x0,
    +                    ///  CLKOUT
    +                    CLKOUT = 0x1,
    +                    ///  USB_OVRCR
    +                    USB_OVRCR = 0x2,
    +                    ///  CAP0.1
    +                    CAP0 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P1.28.
    +            P1_28: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P1.28
    +                    GPIO_P1 = 0x0,
    +                    ///  MCOA2
    +                    MCOA2 = 0x1,
    +                    ///  PCAP1.0
    +                    PCAP1 = 0x2,
    +                    ///  MAT0.0
    +                    MAT0 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P1.29
    +            P1_29: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P1.29
    +                    GPIO_P1 = 0x0,
    +                    ///  MCOB2
    +                    MCOB2 = 0x1,
    +                    ///  PCAP1.1
    +                    PCAP1 = 0x2,
    +                    ///  MAT0.1
    +                    MAT0 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P1.30.
    +            P1_30: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P1.30
    +                    GPIO_P1 = 0x0,
    +                    ///  Reserved
    +                    RESERVED = 0x1,
    +                    ///  VBUS
    +                    VBUS = 0x2,
    +                    ///  AD0.4
    +                    AD0 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P1.31.
    +            P1_31: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO Port 1.31
    +                    GPIO_PORT_1 = 0x0,
    +                    ///  Reserved
    +                    RESERVED = 0x1,
    +                    ///  SCK1
    +                    SCK1 = 0x2,
    +                    ///  AD0.5
    +                    AD0 = 0x3,
    +                },
    +            },
    +        }),
    +        ///  Pin function select register 4
    +        PINSEL4: mmio.Mmio(packed struct(u32) {
    +            ///  Pin function select P2.0.
    +            P2_0: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P2.0
    +                    GPIO_P2 = 0x0,
    +                    ///  PWM1.1
    +                    PWM1 = 0x1,
    +                    ///  TXD1
    +                    TXD1 = 0x2,
    +                    ///  Reserved
    +                    RESERVED = 0x3,
    +                },
    +            },
    +            ///  Pin function select P2.1.
    +            P2_1: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P2.1
    +                    GPIO_P2 = 0x0,
    +                    ///  PWM1.2
    +                    PWM1 = 0x1,
    +                    ///  RXD1
    +                    RXD1 = 0x2,
    +                    ///  Reserved
    +                    RESERVED = 0x3,
    +                },
    +            },
    +            ///  Pin function select P2.2.
    +            P2_2: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P2.2
    +                    GPIO_P2 = 0x0,
    +                    ///  PWM1.3
    +                    PWM1 = 0x1,
    +                    ///  CTS1
    +                    CTS1 = 0x2,
    +                    ///  Reserved
    +                    RESERVED = 0x3,
    +                },
    +            },
    +            ///  Pin function select P2.3.
    +            P2_3: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P2.3.
    +                    GPIO_P2 = 0x0,
    +                    ///  PWM1.4
    +                    PWM1 = 0x1,
    +                    ///  DCD1
    +                    DCD1 = 0x2,
    +                    ///  Reserved.
    +                    RESERVED = 0x3,
    +                },
    +            },
    +            ///  Pin function select P2.4.
    +            P2_4: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P2.4.
    +                    GPIO_P2 = 0x0,
    +                    ///  PWM1.5
    +                    PWM1 = 0x1,
    +                    ///  DSR1
    +                    DSR1 = 0x2,
    +                    ///  Reserved.
    +                    RESERVED = 0x3,
    +                },
    +            },
    +            ///  Pin function select P2.5.
    +            P2_5: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P2.5.
    +                    GPIO_P2 = 0x0,
    +                    ///  PWM1.6
    +                    PWM1 = 0x1,
    +                    ///  DTR1
    +                    DTR1 = 0x2,
    +                    ///  Reserved
    +                    RESERVED = 0x3,
    +                },
    +            },
    +            ///  Pin function select P2.6.
    +            P2_6: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P2.6.
    +                    GPIO_P2 = 0x0,
    +                    ///  PCAP1.0
    +                    PCAP1 = 0x1,
    +                    ///  RI1
    +                    RI1 = 0x2,
    +                    ///  Reserved
    +                    RESERVED = 0x3,
    +                },
    +            },
    +            ///  Pin function select P2.7.
    +            P2_7: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P2.7.
    +                    GPIO_P2 = 0x0,
    +                    ///  RD2
    +                    RD2 = 0x1,
    +                    ///  RTS1
    +                    RTS1 = 0x2,
    +                    ///  Reserved
    +                    RESERVED = 0x3,
    +                },
    +            },
    +            ///  Pin function select P2.8.
    +            P2_8: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P2.8.
    +                    GPIO_P2 = 0x0,
    +                    ///  TD2
    +                    TD2 = 0x1,
    +                    ///  TXD2
    +                    TXD2 = 0x2,
    +                    ///  ENET_MDC
    +                    ENET_MDC = 0x3,
    +                },
    +            },
    +            ///  Pin function select P2.9.
    +            P2_9: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P2.9
    +                    GPIO_P2 = 0x0,
    +                    ///  USB_CONNECT
    +                    USB_CONNECT = 0x1,
    +                    ///  RXD2
    +                    RXD2 = 0x2,
    +                    ///  ENET_MDIO
    +                    ENET_MDIO = 0x3,
    +                },
    +            },
    +            ///  Pin function select P2.10.
    +            P2_10: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P2.10
    +                    GPIO_P2 = 0x0,
    +                    ///  EINT0
    +                    EINT0 = 0x1,
    +                    ///  NMI
    +                    NMI = 0x2,
    +                    ///  Reserved
    +                    RESERVED = 0x3,
    +                },
    +            },
    +            ///  Pin function select P2.11.
    +            P2_11: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P2.11
    +                    GPIO_P2 = 0x0,
    +                    ///  EINT1
    +                    EINT1 = 0x1,
    +                    ///  Reserved
    +                    RESERVED = 0x2,
    +                    ///  I2STX_CLK
    +                    I2STX_CLK = 0x3,
    +                },
    +            },
    +            ///  Pin function select P2.12.
    +            P2_12: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P2.12
    +                    GPIO_P2 = 0x0,
    +                    ///  EINT2
    +                    EINT2 = 0x1,
    +                    ///  Reserved
    +                    RESERVED = 0x2,
    +                    ///  I2STX_WS
    +                    I2STX_WS = 0x3,
    +                },
    +            },
    +            ///  Pin function select P2.13.
    +            P2_13: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P2.13
    +                    GPIO_P2 = 0x0,
    +                    ///  EINT3
    +                    EINT3 = 0x1,
    +                    ///  Reserved
    +                    RESERVED = 0x2,
    +                    ///  I2STX_SDA
    +                    I2STX_SDA = 0x3,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u4,
    +        }),
    +        reserved28: [8]u8,
    +        ///  Pin function select register 7
    +        PINSEL7: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved.
    +            RESERVED: u18,
    +            ///  Pin function select P3.25.
    +            P3_25: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P3.25
    +                    GPIO_P3 = 0x0,
    +                    ///  Reserved
    +                    RESERVED = 0x1,
    +                    ///  MAT0.0
    +                    MAT0 = 0x2,
    +                    ///  PWM1.2
    +                    PWM1 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P3.26.
    +            P3_26: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P3.26
    +                    GPIO_P3 = 0x0,
    +                    ///  STCLK
    +                    STCLK = 0x1,
    +                    ///  MAT0.1
    +                    MAT0 = 0x2,
    +                    ///  PWM1.3
    +                    PWM1 = 0x3,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u10,
    +        }),
    +        reserved36: [4]u8,
    +        ///  Pin function select register 9
    +        PINSEL9: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved.
    +            RESERVED: u24,
    +            ///  Pin function select P4.28.
    +            P4_28: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P4.28
    +                    GPIO_P4 = 0x0,
    +                    ///  RX_MCLK
    +                    RX_MCLK = 0x1,
    +                    ///  MAT2.0
    +                    MAT2 = 0x2,
    +                    ///  TXD3
    +                    TXD3 = 0x3,
    +                },
    +            },
    +            ///  Pin function select P4.29.
    +            P4_29: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  GPIO P4.29
    +                    GPIO_P4 = 0x0,
    +                    ///  TX_MCLK
    +                    TX_MCLK = 0x1,
    +                    ///  MAT2.1
    +                    MAT2 = 0x2,
    +                    ///  RXD3
    +                    RXD3 = 0x3,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u4,
    +        }),
    +        ///  Pin function select register 10
    +        PINSEL10: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved. Software should not write 1 to these bits.
    +            RESERVED: u3,
    +            ///  TPIU interface pins control.
    +            TPIUCTRL: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled. TPIU interface is disabled.
    +                    DISABLED = 0x0,
    +                    ///  Enabled. TPIU interface is enabled. TPIU signals are available on the pins hosting them regardless of the PINSEL4 content.
    +                    ENABLED = 0x1,
    +                },
    +            },
    +            ///  Reserved. Software should not write 1 to these bits.
    +            RESERVED: u28,
    +        }),
    +        reserved64: [20]u8,
    +        ///  Pin mode select register 0
    +        PINMODE0: mmio.Mmio(packed struct(u32) {
    +            ///  Port 0 pin 0 on-chip pull-up/down resistor control.
    +            P0_00MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P0.0 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P0.0 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P0.0 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P0.0 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 0 pin 1 control.
    +            P0_01MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P0.1 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P0.1 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P0.1 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P0.1 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 0 pin 2 control.
    +            P0_02MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P0.2 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P0.2 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P0.2 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P0.2 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 0 pin 3 control.
    +            P0_03MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P0.3 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P0.3 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P0.3 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P0.3 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 0 pin 4 control.
    +            P0_04MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P0.4 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P0.4 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P0.4 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P0.4 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 0 pin 5 control.
    +            P0_05MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P0.5 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P0.5 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P0.5 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P0.5 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 0 pin 6 control.
    +            P0_06MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P0.6 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Disabled. Repeater. P0.6 pin has repeater mode enabled.
    +                    DISABLED = 0x1,
    +                    ///  Disabled. P0.6 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P0.6 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 0 pin 7 control.
    +            P0_07MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P0.7 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P0.7 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P0.7 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P0.7 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 0 pin 8 control.
    +            P0_08MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P0.8 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P0.8 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P0.8 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P0.8 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 0 pin 9 control.
    +            P0_09MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P0.9 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P0.9 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P0.9 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P0.9 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 0 pin 10 control.
    +            P0_10MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P0.10 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P0.10 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P0.10 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P0.10 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 0 pin 11 control.
    +            P0_11MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P0.11 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P0.11 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P0.11 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P0.11 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u6,
    +            ///  Port 0 pin 15 control.
    +            P0_15MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P0.15 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P0.15 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P0.15 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P0.15 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +        }),
    +        ///  Pin mode select register 1
    +        PINMODE1: mmio.Mmio(packed struct(u32) {
    +            ///  Port 1 pin 16 control.
    +            P0_16MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P0.16 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P0.16 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P0.16 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P0.16 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 17 control.
    +            P0_17MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P0.17 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P0.17 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P0.17 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P0.17 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 18 control.
    +            P0_18MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P0.18 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P0.18 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P0.18 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P0.18 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 19 control.
    +            P0_19MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P0.19 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P0.19 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P0.19 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P0.19 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 20 control.
    +            P0_20MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P0.20 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P0.20 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P0.20 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P0.20 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 21 control.
    +            P0_21MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P0.21 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P0.21 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P0.21 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P0.21 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 22 control.
    +            P0_22MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P0.22 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P0.22 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P0.22 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P0.22 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 23 control.
    +            P0_23MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P0.23 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P0.23 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P0.23 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P0.23 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 24 control.
    +            P0_24MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P0.24 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P0.24 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P0.24 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P0.24 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 25 control.
    +            P0_25MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P0.25 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P0.25 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P0.25 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P0.25 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 26 control.
    +            P0_26MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P0.26 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P0.26 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P0.26 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P0.26 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u8,
    +            ///  Reserved.
    +            RESERVED: u2,
    +        }),
    +        ///  Pin mode select register 2
    +        PINMODE2: mmio.Mmio(packed struct(u32) {
    +            ///  Port 1 pin 0 control.
    +            P1_00MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P1.0 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P1.0 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P1.0 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P1.0 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 1 control.
    +            P1_01MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P1.1 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P1.1 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P1.1 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P1.1 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u4,
    +            ///  Port 1 pin 4 control.
    +            P1_04MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P1.4 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P1.4 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P1.4 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P1.4 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u6,
    +            ///  Port 1 pin 8 control.
    +            P1_08MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P1.8 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P1.8 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P1.8 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P1.8 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 9 control.
    +            P1_09MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P1.9 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P1.9 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P1.9 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P1.9 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 10 control.
    +            P1_10MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P1.10 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P1.10 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P1.10 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P1.10 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u6,
    +            ///  Port 1 pin 14 control.
    +            P1_14MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P1.14 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P1.14 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P1.14 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P1.14 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 15 control.
    +            P1_15MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P1.15 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P1.15 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P1.15 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P1.15 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +        }),
    +        ///  Pin mode select register 3.
    +        PINMODE3: mmio.Mmio(packed struct(u32) {
    +            ///  Port 1 pin 16 control.
    +            P1_16MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P1.16 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P1.16 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P1.16 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P1.16 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 17 control.
    +            P1_17MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P1.17 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P1.17 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P1.17 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P1.17 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 18 control.
    +            P1_18MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P1.18 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P1.18 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P1.18 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P1.18 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 19 control.
    +            P1_19MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P1.19 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P1.19 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P1.19 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P1.19 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 20 control.
    +            P1_20MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P1.20 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P1.20 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P1.20 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P1.20 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 21 control.
    +            P1_21MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P1.21 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P1.21 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P1.21 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P1.21 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 22 control.
    +            P1_22MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P1.22 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P1.22 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P1.22 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P1.22 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 23 control.
    +            P1_23MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P1.23 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P1.23 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P1.23 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P1.23 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 24 control.
    +            P1_24MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P1.24 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P1.24 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P1.24 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P1.24 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 25 control.
    +            P1_25MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P1.25 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P1.25 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P1.25 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P1.25 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 26 control.
    +            P1_26MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P1.26 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P1.26 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P1.26 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P1.26 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 27 control.
    +            P1_27MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P1.27 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P1.27 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P1.27 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P1.27 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 28 control.
    +            P1_28MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P1.28 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P1.28 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P1.28 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P1.28 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 29 control.
    +            P1_29MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P1.29 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P1.29 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P1.29 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P1.29 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 30 control.
    +            P1_30MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P1.30 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P1.30 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P1.30 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P1.30 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 1 pin 31 control.
    +            P1_31MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P1.31 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P1.31 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P1.31 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P1.31 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +        }),
    +        ///  Pin mode select register 4
    +        PINMODE4: mmio.Mmio(packed struct(u32) {
    +            ///  Port 2 pin 0 control.
    +            P2_00MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P2.0 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P2.0 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P2.0 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P2.0 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 2 pin 1 control.
    +            P2_01MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P2.1 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P2.1 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P2.1 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P2.1 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 2 pin 2 control.
    +            P2_02MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P2.2 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P2.2 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P2.2 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P2.2 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 2 pin 3 control.
    +            P2_03MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P2.3 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P2.3 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P2.3 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P2.3 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 2 pin 4 control.
    +            P2_04MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P2.4 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P2.4 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P2.4 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P2.4 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 2 pin 5 control.
    +            P2_05MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P2.5 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P2.5 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P2.5 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P2.5 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 2 pin 6 control.
    +            P2_06MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P2.6 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P2.6 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P2.6 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P2.6 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 2 pin 7 control.
    +            P2_07MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P2.7 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P2.7 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P2.7 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P2.7 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 2 pin 8 control.
    +            P2_08MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P2.8 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P2.8 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P2.8 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P2.8 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 2 pin 9 control.
    +            P2_09MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P2.9 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P2.9 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P2.9 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P2.9 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 2 pin 10 control.
    +            P2_10MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P2.10 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P2.10 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P2.10 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P2.10 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 2 pin 11 control.
    +            P2_11MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P2.11 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P2.11 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P2.11 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P2.11 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 2 pin 12 control.
    +            P2_12MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P2.12 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P2.12 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P2.12 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P2.12 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 2 pin 13 control.
    +            P2_13MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P2.13 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P2.13 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P2.13 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P2.13 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u4,
    +        }),
    +        reserved92: [8]u8,
    +        ///  Pin mode select register 7
    +        PINMODE7: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved
    +            RESERVED: u18,
    +            ///  Port 3 pin 25 control.
    +            P3_25MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P3.25 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P3.25 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P3.25 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P3.25 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 3 pin 26 control.
    +            P3_26MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P3.26 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P3.26 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P3.26 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P3.26 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u10,
    +        }),
    +        reserved100: [4]u8,
    +        ///  Pin mode select register 9
    +        PINMODE9: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved.
    +            RESERVED: u24,
    +            ///  Port 4 pin 28 control.
    +            P4_28MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P4.28 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P4.28 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P4.28 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P4.28 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Port 4 pin 29 control.
    +            P4_29MODE: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Pull-up. P4.29 pin has a pull-up resistor enabled.
    +                    PULL_UP = 0x0,
    +                    ///  Repeater. P4.29 pin has repeater mode enabled.
    +                    REPEATER = 0x1,
    +                    ///  Disabled. P4.29 pin has neither pull-up nor pull-down.
    +                    DISABLED = 0x2,
    +                    ///  Pull-down. P4.29 has a pull-down resistor enabled.
    +                    PULL_DOWN = 0x3,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u4,
    +        }),
    +        ///  Open drain mode control register 0
    +        PINMODE_OD0: mmio.Mmio(packed struct(u32) {
    +            ///  Port 0 pin 0 open drain mode control. Pins may potentially be used for I2C-buses using standard port pins. If so, they should be configured for open drain mode via the related bits in PINMODE_OD0.
    +            P0_00OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P0.0 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P0.0 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 0 pin 1 open drain mode control. Pins may potentially be used for I2C-buses using standard port pins. If so, they should be configured for open drain mode via the related bits in PINMODE_OD0.
    +            P0_01OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P0.1 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P0.1 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 0 pin 2 open drain mode control
    +            P0_02OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P0.2 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P0.2 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 0 pin 3 open drain mode control
    +            P0_03OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P0.3 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P0.3 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 0 pin 4 open drain mode control
    +            P0_04OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P0.4 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P0.4 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 0 pin 5 open drain mode control
    +            P0_05OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P0.5 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P0.5 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 0 pin 6 open drain mode control
    +            P0_06OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P0.6 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P0.6 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 0 pin 7 open drain mode control
    +            P0_07OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P0.7 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P0.7 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 0 pin 8 open drain mode control
    +            P0_08OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P0.8 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P0.8 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 0 pin 9 open drain mode control
    +            P0_09OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P0.9 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P0.9 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 0 pin 10 open drain mode control. Pins may potentially be used for I2C-buses using standard port pins. If so, they should be configured for open drain mode via the related bits in PINMODE_OD0.
    +            P0_10OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P0.10 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P0.10 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 0 pin 11 open drain mode control. Pins may potentially be used for I2C-buses using standard port pins. If so, they should be configured for open drain mode via the related bits in PINMODE_OD0.
    +            P0_11OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P0.11 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P0.11 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u3,
    +            ///  Port 0 pin 15 open drain mode control
    +            P0_15OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P0.15 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P0.15 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 0 pin 16 open drain mode control
    +            P0_16OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P0.16 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P0.16 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 0 pin 17 open drain mode control
    +            P0_17OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P0.17 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P0.17 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 0 pin 18 open drain mode control
    +            P0_18OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P0.18 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P0.18 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 0 pin 19 open drain mode control. Pins may potentially be used for I2C-buses using standard port pins. If so, they should be configured for open drain mode via the related bits in PINMODE_OD0.
    +            P0_19OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P0.19 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P0.19 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 0 pin 20open drain mode control. Pins may potentially be used for I2C-buses using standard port pins. If so, they should be configured for open drain mode via the related bits in PINMODE_OD0.
    +            P0_20OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P0.20 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P0.20 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 0 pin 21 open drain mode control
    +            P0_21OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P0.21 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P0.21 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 0 pin 22 open drain mode control
    +            P0_22OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P0.22 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P0.22 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 0 pin 23 open drain mode control
    +            P0_23OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P0.23 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P0.23 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 0 pin 24open drain mode control
    +            P0_24OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P0.23 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P0.23 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 0 pin 25 open drain mode control
    +            P0_25OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P0.25 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P0.25 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 0 pin 26 open drain mode control
    +            P0_26OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P0.26 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P0.26 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u2,
    +            ///  Port 0 pin 29 open drain mode control
    +            P0_29OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P0.29 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P0.29 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 0 pin 30 open drain mode control
    +            P0_30OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P0.30 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P0.30 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u1,
    +        }),
    +        ///  Open drain mode control register 1
    +        PINMODE_OD1: mmio.Mmio(packed struct(u32) {
    +            ///  Port 1 pin 0 open drain mode control.
    +            P1_00OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P1.0 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P1.0 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 1 pin 1 open drain mode control, see P1.00OD
    +            P1_01OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P1.1 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P1.1 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u2,
    +            ///  Port 1 pin 4 open drain mode control, see P1.00OD
    +            P1_04OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P1.4 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P1.4 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u3,
    +            ///  Port 1 pin 8 open drain mode control, see P1.00OD
    +            P1_08OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P1.8 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P1.8 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 1 pin 9 open drain mode control, see P1.00OD
    +            P1_09OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P1.9 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P1.9 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 1 pin 10 open drain mode control, see P1.00OD
    +            P1_10OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P1.10 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P1.10 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u3,
    +            ///  Port 1 pin 14 open drain mode control, see P1.00OD
    +            P1_14OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P1.14 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P1.14 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 1 pin 15 open drain mode control, see P1.00OD
    +            P1_15OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P1.15 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P1.15 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 1 pin 16 open drain mode control, see P1.00OD
    +            P1_16OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P1.16 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P1.16 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 1 pin 17 open drain mode control, see P1.00OD
    +            P1_17OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P1.17 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P1.17 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 1 pin 18 open drain mode control, see P1.00OD
    +            P1_18OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P1.18 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P1.18 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 1 pin 19 open drain mode control, see P1.00OD
    +            P1_19OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P1.19 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P1.19 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 1 pin 20open drain mode control, see P1.00OD
    +            P1_20OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P1.20 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P1.20 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 1 pin 21 open drain mode control, see P1.00OD
    +            P1_21OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P1.21 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P1.21 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 1 pin 22 open drain mode control, see P1.00OD
    +            P1_22OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P1.22 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P1.22 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 1 pin 23 open drain mode control, see P1.00OD
    +            P1_23OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P1.23 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P1.23 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 1 pin 24open drain mode control, see P1.00OD
    +            P1_24OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P1.24 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P1.24 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 1 pin 25 open drain mode control, see P1.00OD
    +            P1_25OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P1.25 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P1.25 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 1 pin 26 open drain mode control, see P1.00OD
    +            P1_26OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P1.26 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P1.26 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 1 pin 27 open drain mode control, see P1.00OD
    +            P1_27OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P1.27 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P1.27 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 1 pin 28 open drain mode control, see P1.00OD
    +            P1_28OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P1.28 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P1.28 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 1 pin 29 open drain mode control, see P1.00OD
    +            P1_29OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P1.29 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P1.29 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 1 pin 30 open drain mode control, see P1.00OD
    +            P1_30OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P1.30 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P1.30 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 1 pin 31 open drain mode control.
    +            P1_31OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P1.31 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P1.31 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +        }),
    +        ///  Open drain mode control register 2
    +        PINMODE_OD2: mmio.Mmio(packed struct(u32) {
    +            ///  Port 2 pin 0 open drain mode control.
    +            P2_00OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P2.0 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P2.0 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 2 pin 1 open drain mode control, see P2.00OD
    +            P2_01OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P2.1 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P2.1p in is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 2 pin 2 open drain mode control, see P2.00OD
    +            P2_02OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P2.2 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P2.2 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 2 pin 3 open drain mode control, see P2.00OD
    +            P2_03OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P2.3 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P2.3 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 2 pin 4 open drain mode control, see P2.00OD
    +            P2_04OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P2.4 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P2.4 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 2 pin 5 open drain mode control, see P2.00OD
    +            P2_05OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P2.5 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P2.5 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 2 pin 6 open drain mode control, see P2.00OD
    +            P2_06OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P2.6 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P2.6 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 2 pin 7 open drain mode control, see P2.00OD
    +            P2_07OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P2.7 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P2.7 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 2 pin 8 open drain mode control, see P2.00OD
    +            P2_08OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P2.8 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P2.8 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 2 pin 9 open drain mode control, see P2.00OD
    +            P2_09OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P2.9 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P2.9 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 2 pin 10 open drain mode control, see P2.00OD
    +            P2_10OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P2.10 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P2.10 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 2 pin 11 open drain mode control, see P2.00OD
    +            P2_11OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P2.11 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P2.11 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 2 pin 12 open drain mode control, see P2.00OD
    +            P2_12OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P2.12 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P2.12 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 2 pin 13 open drain mode control, see P2.00OD
    +            P2_13OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P2.13 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P2.13 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u18,
    +        }),
    +        ///  Open drain mode control register 3
    +        PINMODE_OD3: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved.
    +            RESERVED: u25,
    +            ///  Port 3 pin 25 open drain mode control.
    +            P3_25OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P3.25 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P3.25 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 3 pin 26 open drain mode control, see P3.25OD
    +            P3_26OD: u1,
    +            ///  Reserved.
    +            RESERVED: u5,
    +        }),
    +        ///  Open drain mode control register 4
    +        PINMODE_OD4: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved.
    +            RESERVED: u28,
    +            ///  Port 4 pin 28 open drain mode control.
    +            P4_28OD: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. P4.28 pin is in the normal (not open drain) mode.
    +                    NORMAL = 0x0,
    +                    ///  Open-drain. P4.28 pin is in the open drain mode.
    +                    OPEN_DRAIN = 0x1,
    +                },
    +            },
    +            ///  Port 4 pin 29 open drain mode control, see P4.28OD
    +            P4_29OD: u1,
    +            ///  Reserved.
    +            RESERVED: u2,
    +        }),
    +        ///  I2C Pin Configuration register
    +        I2CPADCFG: mmio.Mmio(packed struct(u32) {
    +            ///  Drive mode control for the SDA0 pin, P0.27.
    +            SDADRV0: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Standard. The SDA0 pin is in the standard drive mode.
    +                    STANDARD = 0x0,
    +                    ///  Fast-mode plus. The SDA0 pin is in Fast Mode Plus drive mode.
    +                    FAST_MODE_PLUS = 0x1,
    +                },
    +            },
    +            ///  I 2C filter mode control for the SDA0 pin, P0.27.
    +            SDAI2C0: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Enabled. The SDA0 pin has I2C glitch filtering and slew rate control enabled.
    +                    ENABLED = 0x0,
    +                    ///  Disabled. The SDA0 pin has I2C glitch filtering and slew rate control disabled.
    +                    DISABLED = 0x1,
    +                },
    +            },
    +            ///  Drive mode control for the SCL0 pin, P0.28.
    +            SCLDRV0: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Standard. The SCL0 pin is in the standard drive mode.
    +                    STANDARD = 0x0,
    +                    ///  Fast-mode plus. The SCL0 pin is in Fast Mode Plus drive mode.
    +                    FAST_MODE_PLUS = 0x1,
    +                },
    +            },
    +            ///  I 2C filter mode control for the SCL0 pin, P0.28.
    +            SCLI2C0: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Enabled. The SCL0 pin has I2C glitch filtering and slew rate control enabled.
    +                    ENABLED = 0x0,
    +                    ///  Disabled. The SCL0 pin has I2C glitch filtering and slew rate control disabled.
    +                    DISABLED = 0x1,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u28,
    +        }),
    +    };
    +
    +    ///  SSP1 controller
    +    pub const SSP1 = extern struct {
    +        ///  Control Register 0. Selects the serial clock rate, bus type, and data size.
    +        CR0: mmio.Mmio(packed struct(u32) {
    +            ///  Data Size Select. This field controls the number of bits transferred in each frame. Values 0000-0010 are not supported and should not be used.
    +            DSS: packed union {
    +                raw: u4,
    +                value: enum(u4) {
    +                    ///  4-bit transfer
    +                    @"4_BIT_TRANSFER" = 0x3,
    +                    ///  5-bit transfer
    +                    @"5_BIT_TRANSFER" = 0x4,
    +                    ///  6-bit transfer
    +                    @"6_BIT_TRANSFER" = 0x5,
    +                    ///  7-bit transfer
    +                    @"7_BIT_TRANSFER" = 0x6,
    +                    ///  8-bit transfer
    +                    @"8_BIT_TRANSFER" = 0x7,
    +                    ///  9-bit transfer
    +                    @"9_BIT_TRANSFER" = 0x8,
    +                    ///  10-bit transfer
    +                    @"10_BIT_TRANSFER" = 0x9,
    +                    ///  11-bit transfer
    +                    @"11_BIT_TRANSFER" = 0xa,
    +                    ///  12-bit transfer
    +                    @"12_BIT_TRANSFER" = 0xb,
    +                    ///  13-bit transfer
    +                    @"13_BIT_TRANSFER" = 0xc,
    +                    ///  14-bit transfer
    +                    @"14_BIT_TRANSFER" = 0xd,
    +                    ///  15-bit transfer
    +                    @"15_BIT_TRANSFER" = 0xe,
    +                    ///  16-bit transfer
    +                    @"16_BIT_TRANSFER" = 0xf,
    +                    _,
    +                },
    +            },
    +            ///  Frame Format.
    +            FRF: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  SPI
    +                    SPI = 0x0,
    +                    ///  TI
    +                    TI = 0x1,
    +                    ///  Microwire
    +                    MICROWIRE = 0x2,
    +                    ///  This combination is not supported and should not be used.
    +                    THIS_COMBINATION_IS_ = 0x3,
    +                },
    +            },
    +            ///  Clock Out Polarity. This bit is only used in SPI mode.
    +            CPOL: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  SSP controller maintains the bus clock low between frames.
    +                    BUS_LOW = 0x0,
    +                    ///  SSP controller maintains the bus clock high between frames.
    +                    BUS_HIGH = 0x1,
    +                },
    +            },
    +            ///  Clock Out Phase. This bit is only used in SPI mode.
    +            CPHA: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  SSP controller captures serial data on the first clock transition of the frame, that is, the transition away from the inter-frame state of the clock line.
    +                    FIRST_CLOCK = 0x0,
    +                    ///  SSP controller captures serial data on the second clock transition of the frame, that is, the transition back to the inter-frame state of the clock line.
    +                    SECOND_CLOCK = 0x1,
    +                },
    +            },
    +            ///  Serial Clock Rate. The number of prescaler-output clocks per bit on the bus, minus one. Given that CPSDVSR is the prescale divider, and the APB clock PCLK clocks the prescaler, the bit frequency is PCLK / (CPSDVSR X [SCR+1]).
    +            SCR: u8,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u16,
    +        }),
    +        ///  Control Register 1. Selects master/slave and other modes.
    +        CR1: mmio.Mmio(packed struct(u32) {
    +            ///  Loop Back Mode.
    +            LBM: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  During normal operation.
    +                    NORMAL = 0x0,
    +                    ///  Serial input is taken from the serial output (MOSI or MISO) rather than the serial input pin (MISO or MOSI respectively).
    +                    OUPTU = 0x1,
    +                },
    +            },
    +            ///  SSP Enable.
    +            SSE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  The SSP controller is disabled.
    +                    DISABLED = 0x0,
    +                    ///  The SSP controller will interact with other devices on the serial bus. Software should write the appropriate control information to the other SSP registers and interrupt controller registers, before setting this bit.
    +                    ENABLED = 0x1,
    +                },
    +            },
    +            ///  Master/Slave Mode.This bit can only be written when the SSE bit is 0.
    +            MS: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  The SSP controller acts as a master on the bus, driving the SCLK, MOSI, and SSEL lines and receiving the MISO line.
    +                    MASTER = 0x0,
    +                    ///  The SSP controller acts as a slave on the bus, driving MISO line and receiving SCLK, MOSI, and SSEL lines.
    +                    SLAVE = 0x1,
    +                },
    +            },
    +            ///  Slave Output Disable. This bit is relevant only in slave mode (MS = 1). If it is 1, this blocks this SSP controller from driving the transmit data line (MISO).
    +            SOD: u1,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u28,
    +        }),
    +        ///  Data Register. Writes fill the transmit FIFO, and reads empty the receive FIFO.
    +        DR: mmio.Mmio(packed struct(u32) {
    +            ///  Write: software can write data to be sent in a future frame to this register whenever the TNF bit in the Status register is 1, indicating that the Tx FIFO is not full. If the Tx FIFO was previously empty and the SSP controller is not busy on the bus, transmission of the data will begin immediately. Otherwise the data written to this register will be sent as soon as all previous data has been sent (and received). If the data length is less than 16 bits, software must right-justify the data written to this register. Read: software can read data from this register whenever the RNE bit in the Status register is 1, indicating that the Rx FIFO is not empty. When software reads this register, the SSP controller returns data from the least recent frame in the Rx FIFO. If the data length is less than 16 bits, the data is right-justified in this field with higher order bits filled with 0s.
    +            DATA: u16,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u16,
    +        }),
    +        ///  Status Register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Transmit FIFO Empty. This bit is 1 is the Transmit FIFO is empty, 0 if not.
    +            TFE: u1,
    +            ///  Transmit FIFO Not Full. This bit is 0 if the Tx FIFO is full, 1 if not.
    +            TNF: u1,
    +            ///  Receive FIFO Not Empty. This bit is 0 if the Receive FIFO is empty, 1 if not.
    +            RNE: u1,
    +            ///  Receive FIFO Full. This bit is 1 if the Receive FIFO is full, 0 if not.
    +            RFF: u1,
    +            ///  Busy. This bit is 0 if the SSPn controller is idle, or 1 if it is currently sending/receiving a frame and/or the Tx FIFO is not empty.
    +            BSY: u1,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u27,
    +        }),
    +        ///  Clock Prescale Register
    +        CPSR: mmio.Mmio(packed struct(u32) {
    +            ///  This even value between 2 and 254, by which PCLK is divided to yield the prescaler output clock. Bit 0 always reads as 0.
    +            CPSDVSR: u8,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u24,
    +        }),
    +        ///  Interrupt Mask Set and Clear Register
    +        IMSC: mmio.Mmio(packed struct(u32) {
    +            ///  Software should set this bit to enable interrupt when a Receive Overrun occurs, that is, when the Rx FIFO is full and another frame is completely received. The ARM spec implies that the preceding frame data is overwritten by the new frame data when this occurs.
    +            RORIM: u1,
    +            ///  Software should set this bit to enable interrupt when a Receive Time-out condition occurs. A Receive Time-out occurs when the Rx FIFO is not empty, and no has not been read for a time-out period. The time-out period is the same for master and slave modes and is determined by the SSP bit rate: 32 bits at PCLK / (CPSDVSR X [SCR+1]).
    +            RTIM: u1,
    +            ///  Software should set this bit to enable interrupt when the Rx FIFO is at least half full.
    +            RXIM: u1,
    +            ///  Software should set this bit to enable interrupt when the Tx FIFO is at least half empty.
    +            TXIM: u1,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u28,
    +        }),
    +        ///  Raw Interrupt Status Register
    +        RIS: mmio.Mmio(packed struct(u32) {
    +            ///  This bit is 1 if another frame was completely received while the RxFIFO was full. The ARM spec implies that the preceding frame data is overwritten by the new frame data when this occurs.
    +            RORRIS: u1,
    +            ///  This bit is 1 if the Rx FIFO is not empty, and has not been read for a time-out period. The time-out period is the same for master and slave modes and is determined by the SSP bit rate: 32 bits at PCLK / (CPSDVSR X [SCR+1]).
    +            RTRIS: u1,
    +            ///  This bit is 1 if the Rx FIFO is at least half full.
    +            RXRIS: u1,
    +            ///  This bit is 1 if the Tx FIFO is at least half empty.
    +            TXRIS: u1,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u28,
    +        }),
    +        ///  Masked Interrupt Status Register
    +        MIS: mmio.Mmio(packed struct(u32) {
    +            ///  This bit is 1 if another frame was completely received while the RxFIFO was full, and this interrupt is enabled.
    +            RORMIS: u1,
    +            ///  This bit is 1 if the Rx FIFO is not empty, has not been read for a time-out period, and this interrupt is enabled. The time-out period is the same for master and slave modes and is determined by the SSP bit rate: 32 bits at PCLK / (CPSDVSR X [SCR+1]).
    +            RTMIS: u1,
    +            ///  This bit is 1 if the Rx FIFO is at least half full, and this interrupt is enabled.
    +            RXMIS: u1,
    +            ///  This bit is 1 if the Tx FIFO is at least half empty, and this interrupt is enabled.
    +            TXMIS: u1,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u28,
    +        }),
    +        ///  SSPICR Interrupt Clear Register
    +        ICR: mmio.Mmio(packed struct(u32) {
    +            ///  Writing a 1 to this bit clears the frame was received when RxFIFO was full interrupt.
    +            RORIC: u1,
    +            ///  Writing a 1 to this bit clears the Rx FIFO was not empty and has not been read for a time-out period interrupt. The time-out period is the same for master and slave modes and is determined by the SSP bit rate: 32 bits at PCLK / (CPSDVSR / [SCR+1]).
    +            RTIC: u1,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u30,
    +        }),
    +        ///  SSP0 DMA control register
    +        DMACR: mmio.Mmio(packed struct(u32) {
    +            ///  Receive DMA Enable. When this bit is set to one 1, DMA for the receive FIFO is enabled, otherwise receive DMA is disabled.
    +            RXDMAE: u1,
    +            ///  Transmit DMA Enable. When this bit is set to one 1, DMA for the transmit FIFO is enabled, otherwise transmit DMA is disabled
    +            TXDMAE: u1,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u30,
    +        }),
    +    };
    +
    +    ///  Analog-to-Digital Converter (ADC)
    +    pub const ADC = extern struct {
    +        ///  A/D Control Register. The ADCR register must be written to select the operating mode before A/D conversion can occur.
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  Selects which of the AD0[7:0] pins is (are) to be sampled and converted. For AD0, bit 0 selects Pin AD0[0], and bit 7 selects pin AD0[7]. In software-controlled mode, only one of these bits should be 1. In hardware scan mode, any value containing 1 to 8 ones is allowed. All zeroes is equivalent to 0x01.
    +            SEL: u8,
    +            ///  The APB clock (PCLK) is divided by (this value plus one) to produce the clock for the A/D converter, which should be less than or equal to 12.4 MHz. Typically, software should program the smallest value in this field that yields a clock of 12.4 MHz or slightly less, but in certain cases (such as a high-impedance analog source) a slower clock may be desirable.
    +            CLKDIV: u8,
    +            ///  Burst mode
    +            BURST: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  The AD converter does repeated conversions at up to 400 kHz, scanning (if necessary) through the pins selected by bits set to ones in the SEL field. The first conversion after the start corresponds to the least-significant 1 in the SEL field, then higher numbered 1-bits (pins) if applicable. Repeated conversions can be terminated by clearing this bit, but the conversion that's in progress when this bit is cleared will be completed. START bits must be 000 when BURST = 1 or conversions will not start.
    +                    BURST = 0x1,
    +                    ///  Conversions are software controlled and require 31 clocks.
    +                    SW = 0x0,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u4,
    +            ///  Power down mode
    +            PDN: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  The A/D converter is operational.
    +                    POWERED = 0x1,
    +                    ///  The A/D converter is in power-down mode.
    +                    POWERDOWN = 0x0,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u2,
    +            ///  When the BURST bit is 0, these bits control whether and when an A/D conversion is started:
    +            START: packed union {
    +                raw: u3,
    +                value: enum(u3) {
    +                    ///  No start (this value should be used when clearing PDN to 0).
    +                    NO_START_THIS_VALUE = 0x0,
    +                    ///  Start conversion now.
    +                    START_CONVERSION_NOW = 0x1,
    +                    ///  Start conversion when the edge selected by bit 27 occurs on the P2[10] pin.
    +                    P2_10 = 0x2,
    +                    ///  Start conversion when the edge selected by bit 27 occurs on the P1[27] pin.
    +                    P1_27 = 0x3,
    +                    ///  Start conversion when the edge selected by bit 27 occurs on MAT0.1. Note that this does not require that the MAT0.1 function appear on a device pin.
    +                    MAT0_1 = 0x4,
    +                    ///  Start conversion when the edge selected by bit 27 occurs on MAT0.3. Note that it is not possible to cause the MAT0.3 function to appear on a device pin.
    +                    MAT0_3 = 0x5,
    +                    ///  Start conversion when the edge selected by bit 27 occurs on MAT1.0. Note that this does not require that the MAT1.0 function appear on a device pin.
    +                    MAT1_0 = 0x6,
    +                    ///  Start conversion when the edge selected by bit 27 occurs on MAT1.1. Note that this does not require that the MAT1.1 function appear on a device pin.
    +                    MAT1_1 = 0x7,
    +                },
    +            },
    +            ///  This bit is significant only when the START field contains 010-111. In these cases:
    +            EDGE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Start conversion on a falling edge on the selected CAP/MAT signal.
    +                    FALLLING = 0x1,
    +                    ///  Start conversion on a rising edge on the selected CAP/MAT signal.
    +                    RISING = 0x0,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u4,
    +        }),
    +        ///  A/D Global Data Register. This register contains the ADC's DONE bit and the result of the most recent A/D conversion.
    +        GDR: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u4,
    +            ///  When DONE is 1, this field contains a binary fraction representing the voltage on the AD0[n] pin selected by the SEL field, as it falls within the range of VREFP to VSS. Zero in the field indicates that the voltage on the input pin was less than, equal to, or close to that on VSS, while 0xFFF indicates that the voltage on the input was close to, equal to, or greater than that on VREFP.
    +            RESULT: u12,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u8,
    +            ///  These bits contain the channel from which the RESULT bits were converted (e.g. 000 identifies channel 0, 001 channel 1...).
    +            CHN: u3,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u3,
    +            ///  This bit is 1 in burst mode if the results of one or more conversions was (were) lost and overwritten before the conversion that produced the result in the RESULT bits. This bit is cleared by reading this register.
    +            OVERRUN: u1,
    +            ///  This bit is set to 1 when an A/D conversion completes. It is cleared when this register is read and when the ADCR is written. If the ADCR is written while a conversion is still in progress, this bit is set and a new conversion is started.
    +            DONE: u1,
    +        }),
    +        reserved12: [4]u8,
    +        ///  A/D Interrupt Enable Register. This register contains enable bits that allow the DONE flag of each A/D channel to be included or excluded from contributing to the generation of an A/D interrupt.
    +        INTEN: mmio.Mmio(packed struct(u32) {
    +            ///  Interrupt enable
    +            ADINTEN0: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Completion of a conversion on ADC channel 0 will not generate an interrupt.
    +                    DISABLE = 0x0,
    +                    ///  Completion of a conversion on ADC channel 0 will generate an interrupt.
    +                    ENABLE = 0x1,
    +                },
    +            },
    +            ///  Interrupt enable
    +            ADINTEN1: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Completion of a conversion on ADC channel 1 will not generate an interrupt.
    +                    DISABLE = 0x0,
    +                    ///  Completion of a conversion on ADC channel 1 will generate an interrupt.
    +                    ENABLE = 0x1,
    +                },
    +            },
    +            ///  Interrupt enable
    +            ADINTEN2: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Completion of a conversion on ADC channel 2 will not generate an interrupt.
    +                    DISABLE = 0x0,
    +                    ///  Completion of a conversion on ADC channel 2 will generate an interrupt.
    +                    ENABLE = 0x1,
    +                },
    +            },
    +            ///  Interrupt enable
    +            ADINTEN3: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Completion of a conversion on ADC channel 3 will not generate an interrupt.
    +                    DISABLE = 0x0,
    +                    ///  Completion of a conversion on ADC channel 3 will generate an interrupt.
    +                    ENABLE = 0x1,
    +                },
    +            },
    +            ///  Interrupt enable
    +            ADINTEN4: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Completion of a conversion on ADC channel 4 will not generate an interrupt.
    +                    DISABLE = 0x0,
    +                    ///  Completion of a conversion on ADC channel 4 will generate an interrupt.
    +                    ENABLE = 0x1,
    +                },
    +            },
    +            ///  Interrupt enable
    +            ADINTEN5: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Completion of a conversion on ADC channel 5 will not generate an interrupt.
    +                    DISABLE = 0x0,
    +                    ///  Completion of a conversion on ADC channel 5 will generate an interrupt.
    +                    ENABLE = 0x1,
    +                },
    +            },
    +            ///  Interrupt enable
    +            ADINTEN6: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Completion of a conversion on ADC channel 6 will not generate an interrupt.
    +                    DISABLE = 0x0,
    +                    ///  Completion of a conversion on ADC channel 6 will generate an interrupt.
    +                    ENABLE = 0x1,
    +                },
    +            },
    +            ///  Interrupt enable
    +            ADINTEN7: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Completion of a conversion on ADC channel 7 will not generate an interrupt.
    +                    DISABLE = 0x0,
    +                    ///  Completion of a conversion on ADC channel 7 will generate an interrupt.
    +                    ENABLE = 0x1,
    +                },
    +            },
    +            ///  Interrupt enable
    +            ADGINTEN: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Only the individual ADC channels enabled by ADINTEN7:0 will generate interrupts.
    +                    CHANNELS = 0x0,
    +                    ///  The global DONE flag in ADDR is enabled to generate an interrupt in addition to any individual ADC channels that are enabled to generate interrupts.
    +                    GLOBAL = 0x1,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u23,
    +        }),
    +        reserved48: [32]u8,
    +        ///  A/D Status Register. This register contains DONE and OVERRUN flags for all of the A/D channels, as well as the A/D interrupt/DMA flag.
    +        STAT: mmio.Mmio(packed struct(u32) {
    +            ///  This bit mirrors the DONE status flag from the result register for A/D channel 0.
    +            DONE0: u1,
    +            ///  This bit mirrors the DONE status flag from the result register for A/D channel 1.
    +            DONE1: u1,
    +            ///  This bit mirrors the DONE status flag from the result register for A/D channel 2.
    +            DONE2: u1,
    +            ///  This bit mirrors the DONE status flag from the result register for A/D channel 3.
    +            DONE3: u1,
    +            ///  This bit mirrors the DONE status flag from the result register for A/D channel 4.
    +            DONE4: u1,
    +            ///  This bit mirrors the DONE status flag from the result register for A/D channel 5.
    +            DONE5: u1,
    +            ///  This bit mirrors the DONE status flag from the result register for A/D channel 6.
    +            DONE6: u1,
    +            ///  This bit mirrors the DONE status flag from the result register for A/D channel 7.
    +            DONE7: u1,
    +            ///  This bit mirrors the OVERRRUN status flag from the result register for A/D channel 0.
    +            OVERRUN0: u1,
    +            ///  This bit mirrors the OVERRRUN status flag from the result register for A/D channel 1.
    +            OVERRUN1: u1,
    +            ///  This bit mirrors the OVERRRUN status flag from the result register for A/D channel 2.
    +            OVERRUN2: u1,
    +            ///  This bit mirrors the OVERRRUN status flag from the result register for A/D channel 3.
    +            OVERRUN3: u1,
    +            ///  This bit mirrors the OVERRRUN status flag from the result register for A/D channel 4.
    +            OVERRUN4: u1,
    +            ///  This bit mirrors the OVERRRUN status flag from the result register for A/D channel 5.
    +            OVERRUN5: u1,
    +            ///  This bit mirrors the OVERRRUN status flag from the result register for A/D channel 6.
    +            OVERRUN6: u1,
    +            ///  This bit mirrors the OVERRRUN status flag from the result register for A/D channel 7.
    +            OVERRUN7: u1,
    +            ///  This bit is the A/D interrupt flag. It is one when any of the individual A/D channel Done flags is asserted and enabled to contribute to the A/D interrupt via the ADINTEN register.
    +            ADINT: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u15,
    +        }),
    +        ///  ADC trim register.
    +        TRM: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u4,
    +            ///  Offset trim bits for ADC operation. Initialized by the boot code. Can be overwritten by the user.
    +            ADCOFFS: u4,
    +            ///  written-to by boot code. Can not be overwritten by the user. These bits are locked after boot code write.
    +            TRIM: u4,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u20,
    +        }),
    +    };
    +
    +    ///  CAN acceptance filter RAM
    +    pub const CANAFRAM = struct {};
    +
    +    ///  CAN controller acceptance filter
    +    pub const CANAF = extern struct {
    +        ///  Acceptance Filter Register
    +        AFMR: mmio.Mmio(packed struct(u32) {
    +            ///  if AccBP is 0, the Acceptance Filter is not operational. All Rx messages on all CAN buses are ignored.
    +            ACCOFF: u1,
    +            ///  All Rx messages are accepted on enabled CAN controllers. Software must set this bit before modifying the contents of any of the registers described below, and before modifying the contents of Lookup Table RAM in any way other than setting or clearing Disable bits in Standard Identifier entries. When both this bit and AccOff are 0, the Acceptance filter operates to screen received CAN Identifiers.
    +            ACCBP: u1,
    +            ///  FullCAN mode
    +            EFCAN: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Software must read all messages for all enabled IDs on all enabled CAN buses, from the receiving CAN controllers.
    +                    SOFTWARE_MUST_READ_A = 0x0,
    +                    ///  The Acceptance Filter itself will take care of receiving and storing messages for selected Standard ID values on selected CAN buses. See Section 21.16 FullCAN mode on page 576.
    +                    THE_ACCEPTANCE_FILTE = 0x1,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u29,
    +        }),
    +        ///  Standard Frame Individual Start Address Register
    +        SFF_SA: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u2,
    +            ///  The start address of the table of individual Standard Identifiers in AF Lookup RAM. If the table is empty, write the same value in this register and the SFF_GRP_sa register described below. For compatibility with possible future devices, write zeroes in bits 31:11 and 1:0 of this register. If the eFCAN bit in the AFMR is 1, this value also indicates the size of the table of Standard IDs which the Acceptance Filter will search and (if found) automatically store received messages in Acceptance Filter RAM.
    +            SFF_SA: u9,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u21,
    +        }),
    +        ///  Standard Frame Group Start Address Register
    +        SFF_GRP_SA: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u2,
    +            ///  The start address of the table of grouped Standard Identifiers in AF Lookup RAM. If the table is empty, write the same value in this register and the EFF_sa register described below. The largest value that should be written to this register is 0x800, when only the Standard Individual table is used, and the last word (address 0x7FC) in AF Lookup Table RAM is used. For compatibility with possible future devices, please write zeroes in bits 31:12 and 1:0 of this register.
    +            SFF_GRP_SA: u10,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u20,
    +        }),
    +        ///  Extended Frame Start Address Register
    +        EFF_SA: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u2,
    +            ///  The start address of the table of individual Extended Identifiers in AF Lookup RAM. If the table is empty, write the same value in this register and the EFF_GRP_sa register described below. The largest value that should be written to this register is 0x800, when both Extended Tables are empty and the last word (address 0x7FC) in AF Lookup Table RAM is used. For compatibility with possible future devices, please write zeroes in bits 31:11 and 1:0 of this register.
    +            EFF_SA: u9,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u21,
    +        }),
    +        ///  Extended Frame Group Start Address Register
    +        EFF_GRP_SA: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u2,
    +            ///  The start address of the table of grouped Extended Identifiers in AF Lookup RAM. If the table is empty, write the same value in this register and the ENDofTable register described below. The largest value that should be written to this register is 0x800, when this table is empty and the last word (address 0x7FC) in AF Lookup Table RAM is used. For compatibility with possible future devices, please write zeroes in bits 31:12 and 1:0 of this register.
    +            EFF_GRP_SA: u10,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u20,
    +        }),
    +        ///  End of AF Tables register
    +        ENDOFTABLE: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u2,
    +            ///  The address above the last active address in the last active AF table. For compatibility with possible future devices, please write zeroes in bits 31:12 and 1:0 of this register. If the eFCAN bit in the AFMR is 0, the largest value that should be written to this register is 0x800, which allows the last word (address 0x7FC) in AF Lookup Table RAM to be used. If the eFCAN bit in the AFMR is 1, this value marks the start of the area of Acceptance Filter RAM, into which the Acceptance Filter will automatically receive messages for selected IDs on selected CAN buses. In this case, the maximum value that should be written to this register is 0x800 minus 6 times the value in SFF_sa. This allows 12 bytes of message storage between this address and the end of Acceptance Filter RAM, for each Standard ID that is specified between the start of Acceptance Filter RAM, and the next active AF table.
    +            ENDOFTABLE: u10,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u20,
    +        }),
    +        ///  LUT Error Address register
    +        LUTERRAD: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u2,
    +            ///  It the LUT Error bit (below) is 1, this read-only field contains the address in AF Lookup Table RAM, at which the Acceptance Filter encountered an error in the content of the tables.
    +            LUTERRAD: u9,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u21,
    +        }),
    +        ///  LUT Error Register
    +        LUTERR: mmio.Mmio(packed struct(u32) {
    +            ///  This read-only bit is set to 1 if the Acceptance Filter encounters an error in the content of the tables in AF RAM. It is cleared when software reads the LUTerrAd register. This condition is ORed with the other CAN interrupts from the CAN controllers, to produce the request that is connected to the NVIC.
    +            LUTERR: u1,
    +            ///  Reserved, the value read from a reserved bit is not defined.
    +            RESERVED: u31,
    +        }),
    +        ///  FullCAN interrupt enable register
    +        FCANIE: mmio.Mmio(packed struct(u32) {
    +            ///  Global FullCAN Interrupt Enable. When 1, this interrupt is enabled.
    +            FCANIE: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u31,
    +        }),
    +        ///  FullCAN interrupt and capture register0
    +        FCANIC0: mmio.Mmio(packed struct(u32) {
    +            ///  FullCan Interrupt Pending 0 = FullCan Interrupt Pending bit 0. 1 = FullCan Interrupt Pending bit 1. ... 31 = FullCan Interrupt Pending bit 31.
    +            INTPND: u32,
    +        }),
    +        ///  FullCAN interrupt and capture register1
    +        FCANIC1: mmio.Mmio(packed struct(u32) {
    +            ///  FullCan Interrupt Pending bit 32. 0 = FullCan Interrupt Pending bit 32. 1 = FullCan Interrupt Pending bit 33. ... 31 = FullCan Interrupt Pending bit 63.
    +            IntPnd32: u32,
    +        }),
    +    };
    +
    +    ///  Central CAN controller
    +    pub const CCAN = extern struct {
    +        ///  CAN Central Transmit Status Register
    +        TXSR: mmio.Mmio(packed struct(u32) {
    +            ///  When 1, the CAN controller 1 is sending a message (same as TS in the CAN1GSR).
    +            TS1: u1,
    +            ///  When 1, the CAN controller 2 is sending a message (same as TS in the CAN2GSR)
    +            TS2: u1,
    +            ///  Reserved, the value read from a reserved bit is not defined.
    +            RESERVED: u6,
    +            ///  When 1, all 3 Tx Buffers of the CAN1 controller are available to the CPU (same as TBS in CAN1GSR).
    +            TBS1: u1,
    +            ///  When 1, all 3 Tx Buffers of the CAN2 controller are available to the CPU (same as TBS in CAN2GSR).
    +            TBS2: u1,
    +            ///  Reserved, the value read from a reserved bit is not defined.
    +            RESERVED: u6,
    +            ///  When 1, all requested transmissions have been completed successfully by the CAN1 controller (same as TCS in CAN1GSR).
    +            TCS1: u1,
    +            ///  When 1, all requested transmissions have been completed successfully by the CAN2 controller (same as TCS in CAN2GSR).
    +            TCS2: u1,
    +            ///  Reserved, the value read from a reserved bit is not defined.
    +            RESERVED: u14,
    +        }),
    +        ///  CAN Central Receive Status Register
    +        RXSR: mmio.Mmio(packed struct(u32) {
    +            ///  When 1, CAN1 is receiving a message (same as RS in CAN1GSR).
    +            RS1: u1,
    +            ///  When 1, CAN2 is receiving a message (same as RS in CAN2GSR).
    +            RS2: u1,
    +            ///  Reserved, the value read from a reserved bit is not defined.
    +            RESERVED: u6,
    +            ///  When 1, a received message is available in the CAN1 controller (same as RBS in CAN1GSR).
    +            RB1: u1,
    +            ///  When 1, a received message is available in the CAN2 controller (same as RBS in CAN2GSR).
    +            RB2: u1,
    +            ///  Reserved, the value read from a reserved bit is not defined.
    +            RESERVED: u6,
    +            ///  When 1, a message was lost because the preceding message to CAN1 controller was not read out quickly enough (same as DOS in CAN1GSR).
    +            DOS1: u1,
    +            ///  When 1, a message was lost because the preceding message to CAN2 controller was not read out quickly enough (same as DOS in CAN2GSR).
    +            DOS2: u1,
    +            ///  Reserved, the value read from a reserved bit is not defined.
    +            RESERVED: u14,
    +        }),
    +        ///  CAN Central Miscellaneous Register
    +        MSR: mmio.Mmio(packed struct(u32) {
    +            ///  When 1, one or both of the CAN1 Tx and Rx Error Counters has reached the limit set in the CAN1EWL register (same as ES in CAN1GSR)
    +            E1: u1,
    +            ///  When 1, one or both of the CAN2 Tx and Rx Error Counters has reached the limit set in the CAN2EWL register (same as ES in CAN2GSR)
    +            E2: u1,
    +            ///  Reserved, the value read from a reserved bit is not defined.
    +            RESERVED: u6,
    +            ///  When 1, the CAN1 controller is currently involved in bus activities (same as BS in CAN1GSR).
    +            BS1: u1,
    +            ///  When 1, the CAN2 controller is currently involved in bus activities (same as BS in CAN2GSR).
    +            BS2: u1,
    +            ///  Reserved, the value read from a reserved bit is not defined.
    +            RESERVED: u22,
    +        }),
    +    };
    +
    +    ///  CAN1 controller
    +    pub const CAN1 = extern struct {
    +        ///  Controls the operating mode of the CAN Controller.
    +        MOD: mmio.Mmio(packed struct(u32) {
    +            ///  Reset Mode.
    +            RM: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal.The CAN Controller is in the Operating Mode, and certain registers can not be written.
    +                    NORMAL_THE_CAN_CONTR = 0x0,
    +                    ///  Reset. CAN operation is disabled, writable registers can be written and the current transmission/reception of a message is aborted.
    +                    RESET_CAN_OPERATION = 0x1,
    +                },
    +            },
    +            ///  Listen Only Mode.
    +            LOM: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. The CAN controller acknowledges a successfully received message on the CAN bus. The error counters are stopped at the current value.
    +                    NORMAL_THE_CAN_CONT = 0x0,
    +                    ///  Listen only. The controller gives no acknowledgment, even if a message is successfully received. Messages cannot be sent, and the controller operates in error passive mode. This mode is intended for software bit rate detection and hot plugging.
    +                    LISTEN_ONLY_THE_CON = 0x1,
    +                },
    +            },
    +            ///  Self Test Mode.
    +            STM: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Normal. A transmitted message must be acknowledged to be considered successful.
    +                    NORMAL_A_TRANSMITTE = 0x0,
    +                    ///  Self test. The controller will consider a Tx message successful even if there is no acknowledgment received. In this mode a full node test is possible without any other active node on the bus using the SRR bit in CANxCMR.
    +                    SELF_TEST_THE_CONTR = 0x1,
    +                },
    +            },
    +            ///  Transmit Priority Mode.
    +            TPM: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  CAN ID. The transmit priority for 3 Transmit Buffers depends on the CAN Identifier.
    +                    CAN_ID_THE_TRANSMIT = 0x0,
    +                    ///  Local priority. The transmit priority for 3 Transmit Buffers depends on the contents of the Tx Priority register within the Transmit Buffer.
    +                    LOCAL_PRIORITY_THE_ = 0x1,
    +                },
    +            },
    +            ///  Sleep Mode.
    +            SM: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Wake-up. Normal operation.
    +                    WAKE_UP_NORMAL_OPER = 0x0,
    +                    ///  Sleep. The CAN controller enters Sleep Mode if no CAN interrupt is pending and there is no bus activity. See the Sleep Mode description Section 21.8.2 on page 565.
    +                    SLEEP_THE_CAN_CONTR = 0x1,
    +                },
    +            },
    +            ///  Receive Polarity Mode.
    +            RPM: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Low active. RD input is active Low (dominant bit = 0).
    +                    LOW_ACTIVE_RD_INPUT = 0x0,
    +                    ///  High active. RD input is active High (dominant bit = 1) -- reverse polarity.
    +                    HIGH_ACTIVE_RD_INPU = 0x1,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u1,
    +            ///  Test Mode.
    +            TM: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled. Normal operation.
    +                    DISABLED_NORMAL_OPE = 0x0,
    +                    ///  Enabled. The TD pin will reflect the bit, detected on RD pin, with the next positive edge of the system clock.
    +                    ENABLED_THE_TD_PIN_ = 0x1,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u24,
    +        }),
    +        ///  Command bits that affect the state of the CAN Controller
    +        CMR: mmio.Mmio(packed struct(u32) {
    +            ///  Transmission Request.
    +            TR: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Absent.No transmission request.
    +                    ABSENT_NO_TRANSMISSI = 0x0,
    +                    ///  Present. The message, previously written to the CANxTFI, CANxTID, and optionally the CANxTDA and CANxTDB registers, is queued for transmission from the selected Transmit Buffer. If at two or all three of STB1, STB2 and STB3 bits are selected when TR=1 is written, Transmit Buffer will be selected based on the chosen priority scheme (for details see Section 21.5.3 Transmit Buffers (TXB))
    +                    PRESENT_THE_MESSAGE = 0x1,
    +                },
    +            },
    +            ///  Abort Transmission.
    +            AT: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  No action. Do not abort the transmission.
    +                    NO_ACTION_DO_NOT_AB = 0x0,
    +                    ///  Present. if not already in progress, a pending Transmission Request for the selected Transmit Buffer is cancelled.
    +                    PRESENT_IF_NOT_ALRE = 0x1,
    +                },
    +            },
    +            ///  Release Receive Buffer.
    +            RRB: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  No action. Do not release the receive buffer.
    +                    NO_ACTION_DO_NOT_RE = 0x0,
    +                    ///  Released. The information in the Receive Buffer (consisting of CANxRFS, CANxRID, and if applicable the CANxRDA and CANxRDB registers) is released, and becomes eligible for replacement by the next received frame. If the next received frame is not available, writing this command clears the RBS bit in the Status Register(s).
    +                    RELEASED_THE_INFORM = 0x1,
    +                },
    +            },
    +            ///  Clear Data Overrun.
    +            CDO: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  No action. Do not clear the data overrun bit.
    +                    NO_ACTION_DO_NOT_CL = 0x0,
    +                    ///  Clear. The Data Overrun bit in Status Register(s) is cleared.
    +                    CLEAR_THE_DATA_OVER = 0x1,
    +                },
    +            },
    +            ///  Self Reception Request.
    +            SRR: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Absent. No self reception request.
    +                    ABSENT_NO_SELF_RECE = 0x0,
    +                    ///  Present. The message, previously written to the CANxTFS, CANxTID, and optionally the CANxTDA and CANxTDB registers, is queued for transmission from the selected Transmit Buffer and received simultaneously. This differs from the TR bit above in that the receiver is not disabled during the transmission, so that it receives the message if its Identifier is recognized by the Acceptance Filter.
    +                    PRESENT_THE_MESSAGE = 0x1,
    +                },
    +            },
    +            ///  Select Tx Buffer 1.
    +            STB1: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Not selected. Tx Buffer 1 is not selected for transmission.
    +                    NOT_SELECTED_TX_BUF = 0x0,
    +                    ///  Selected. Tx Buffer 1 is selected for transmission.
    +                    SELECTED_TX_BUFFER_ = 0x1,
    +                },
    +            },
    +            ///  Select Tx Buffer 2.
    +            STB2: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Not selected. Tx Buffer 2 is not selected for transmission.
    +                    NOT_SELECTED_TX_BUF = 0x0,
    +                    ///  Selected. Tx Buffer 2 is selected for transmission.
    +                    SELECTED_TX_BUFFER_ = 0x1,
    +                },
    +            },
    +            ///  Select Tx Buffer 3.
    +            STB3: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Not selected. Tx Buffer 3 is not selected for transmission.
    +                    NOT_SELECTED_TX_BUF = 0x0,
    +                    ///  Selected. Tx Buffer 3 is selected for transmission.
    +                    SELECTED_TX_BUFFER_ = 0x1,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u24,
    +        }),
    +        ///  Global Controller Status and Error Counters. The error counters can only be written when RM in CANMOD is 1.
    +        GSR: mmio.Mmio(packed struct(u32) {
    +            ///  Receive Buffer Status. After reading all messages and releasing their memory space with the command 'Release Receive Buffer,' this bit is cleared.
    +            RBS: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Empty. No message is available.
    +                    EMPTY_NO_MESSAGE_IS = 0x0,
    +                    ///  Full. At least one complete message is received by the Double Receive Buffer and available in the CANxRFS, CANxRID, and if applicable the CANxRDA and CANxRDB registers. This bit is cleared by the Release Receive Buffer command in CANxCMR, if no subsequent received message is available.
    +                    FULL_AT_LEAST_ONE_C = 0x1,
    +                },
    +            },
    +            ///  Data Overrun Status. If there is not enough space to store the message within the Receive Buffer, that message is dropped and the Data Overrun condition is signalled to the CPU in the moment this message becomes valid. If this message is not completed successfully (e.g. because of an error), no overrun condition is signalled.
    +            DOS: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Absent. No data overrun has occurred since the last Clear Data Overrun command was given/written to CANxCMR (or since Reset).
    +                    ABSENT_NO_DATA_OVER = 0x0,
    +                    ///  Overrun. A message was lost because the preceding message to this CAN controller was not read and released quickly enough (there was not enough space for a new message in the Double Receive Buffer).
    +                    OVERRUN_A_MESSAGE_W = 0x1,
    +                },
    +            },
    +            ///  Transmit Buffer Status.
    +            TBS: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Locked. At least one of the Transmit Buffers is not available for the CPU, i.e. at least one previously queued message for this CAN controller has not yet been sent, and therefore software should not write to the CANxTFI, CANxTID, CANxTDA, nor CANxTDB registers of that (those) Tx buffer(s).
    +                    LOCKED_AT_LEAST_ONE = 0x0,
    +                    ///  Released. All three Transmit Buffers are available for the CPU. No transmit message is pending for this CAN controller (in any of the 3 Tx buffers), and software may write to any of the CANxTFI, CANxTID, CANxTDA, and CANxTDB registers.
    +                    RELEASED_ALL_THREE_ = 0x1,
    +                },
    +            },
    +            ///  Transmit Complete Status. The Transmission Complete Status bit is set '0' (incomplete) whenever the Transmission Request bit or the Self Reception Request bit is set '1' at least for one of the three Transmit Buffers. The Transmission Complete Status bit will remain '0' until all messages are transmitted successfully.
    +            TCS: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Incomplete. At least one requested transmission has not been successfully completed yet.
    +                    INCOMPLETE_AT_LEAST = 0x0,
    +                    ///  Complete. All requested transmission(s) has (have) been successfully completed.
    +                    COMPLETE_ALL_REQUES = 0x1,
    +                },
    +            },
    +            ///  Receive Status. If both the Receive Status and the Transmit Status bits are '0' (idle), the CAN-Bus is idle. If both bits are set, the controller is waiting to become idle again. After hardware reset 11 consecutive recessive bits have to be detected until idle status is reached. After Bus-off this will take 128 times of 11 consecutive recessive bits.
    +            RS: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Idle. The CAN controller is idle.
    +                    IDLE_THE_CAN_CONTRO = 0x0,
    +                    ///  Receive. The CAN controller is receiving a message.
    +                    RECEIVE_THE_CAN_CON = 0x1,
    +                },
    +            },
    +            ///  Transmit Status. If both the Receive Status and the Transmit Status bits are '0' (idle), the CAN-Bus is idle. If both bits are set, the controller is waiting to become idle again. After hardware reset 11 consecutive recessive bits have to be detected until idle status is reached. After Bus-off this will take 128 times of 11 consecutive recessive bits.
    +            TS: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Idle. The CAN controller is idle.
    +                    IDLE_THE_CAN_CONTRO = 0x0,
    +                    ///  Transmit. The CAN controller is sending a message.
    +                    TRANSMIT_THE_CAN_CO = 0x1,
    +                },
    +            },
    +            ///  Error Status. Errors detected during reception or transmission will effect the error counters according to the CAN specification. The Error Status bit is set when at least one of the error counters has reached or exceeded the Error Warning Limit. An Error Warning Interrupt is generated, if enabled. The default value of the Error Warning Limit after hardware reset is 96 decimal, see also Section 21.7.7 CAN Error Warning Limit register (CAN1EWL - 0x4004 4018, CAN2EWL - 0x4004 8018).
    +            ES: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  OK. Both error counters are below the Error Warning Limit.
    +                    OK_BOTH_ERROR_COUNT = 0x0,
    +                    ///  Error. One or both of the Transmit and Receive Error Counters has reached the limit set in the Error Warning Limit register.
    +                    ERROR_ONE_OR_BOTH_O = 0x1,
    +                },
    +            },
    +            ///  Bus Status. Mode bit '1' (present) and an Error Warning Interrupt is generated, if enabled. Afterwards the Transmit Error Counter is set to '127', and the Receive Error Counter is cleared. It will stay in this mode until the CPU clears the Reset Mode bit. Once this is completed the CAN Controller will wait the minimum protocol-defined time (128 occurrences of the Bus-Free signal) counting down the Transmit Error Counter. After that, the Bus Status bit is cleared (Bus-On), the Error Status bit is set '0' (ok), the Error Counters are reset, and an Error Warning Interrupt is generated, if enabled. Reading the TX Error Counter during this time gives information about the status of the Bus-Off recovery.
    +            BS: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Bus-on. The CAN Controller is involved in bus activities
    +                    BUS_ON_THE_CAN_CONT = 0x0,
    +                    ///  Bus-off. The CAN controller is currently not involved/prohibited from bus activity because the Transmit Error Counter reached its limiting value of 255.
    +                    BUS_OFF_THE_CAN_CON = 0x1,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u8,
    +            ///  The current value of the Rx Error Counter (an 8-bit value).
    +            RXERR: u8,
    +            ///  The current value of the Tx Error Counter (an 8-bit value).
    +            TXERR: u8,
    +        }),
    +        ///  Interrupt status, Arbitration Lost Capture, Error Code Capture
    +        ICR: mmio.Mmio(packed struct(u32) {
    +            ///  Receive Interrupt. This bit is set whenever the RBS bit in CANxSR and the RIE bit in CANxIER are both 1, indicating that a new message was received and stored in the Receive Buffer. The Receive Interrupt Bit is not cleared upon a read access to the Interrupt Register. Giving the Command Release Receive Buffer will clear RI temporarily. If there is another message available within the Receive Buffer after the release command, RI is set again. Otherwise RI remains cleared.
    +            RI: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Reset
    +                    RESET = 0x0,
    +                    ///  Set
    +                    SET = 0x1,
    +                },
    +            },
    +            ///  Transmit Interrupt 1. This bit is set when the TBS1 bit in CANxSR goes from 0 to 1 (whenever a message out of TXB1 was successfully transmitted or aborted), indicating that Transmit buffer 1 is available, and the TIE1 bit in CANxIER is 1.
    +            TI1: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Reset
    +                    RESET = 0x0,
    +                    ///  Set
    +                    SET = 0x1,
    +                },
    +            },
    +            ///  Error Warning Interrupt. This bit is set on every change (set or clear) of either the Error Status or Bus Status bit in CANxSR and the EIE bit bit is set within the Interrupt Enable Register at the time of the change.
    +            EI: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Reset
    +                    RESET = 0x0,
    +                    ///  Set
    +                    SET = 0x1,
    +                },
    +            },
    +            ///  Data Overrun Interrupt. This bit is set when the DOS bit in CANxSR goes from 0 to 1 and the DOIE bit in CANxIER is 1.
    +            DOI: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Reset
    +                    RESET = 0x0,
    +                    ///  Set
    +                    SET = 0x1,
    +                },
    +            },
    +            ///  Wake-Up Interrupt. This bit is set if the CAN controller is sleeping and bus activity is detected and the WUIE bit in CANxIER is 1. A Wake-Up Interrupt is also generated if the CPU tries to set the Sleep bit while the CAN controller is involved in bus activities or a CAN Interrupt is pending. The WUI flag can also get asserted when the according enable bit WUIE is not set. In this case a Wake-Up Interrupt does not get asserted.
    +            WUI: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Reset
    +                    RESET = 0x0,
    +                    ///  Set
    +                    SET = 0x1,
    +                },
    +            },
    +            ///  Error Passive Interrupt. This bit is set if the EPIE bit in CANxIER is 1, and the CAN controller switches between Error Passive and Error Active mode in either direction. This is the case when the CAN Controller has reached the Error Passive Status (at least one error counter exceeds the CAN protocol defined level of 127) or if the CAN Controller is in Error Passive Status and enters the Error Active Status again.
    +            EPI: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Reset
    +                    RESET = 0x0,
    +                    ///  Set
    +                    SET = 0x1,
    +                },
    +            },
    +            ///  Arbitration Lost Interrupt. This bit is set if the ALIE bit in CANxIER is 1, and the CAN controller loses arbitration while attempting to transmit. In this case the CAN node becomes a receiver.
    +            ALI: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Reset
    +                    RESET = 0x0,
    +                    ///  Set
    +                    SET = 0x1,
    +                },
    +            },
    +            ///  Bus Error Interrupt -- this bit is set if the BEIE bit in CANxIER is 1, and the CAN controller detects an error on the bus.
    +            BEI: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Reset
    +                    RESET = 0x0,
    +                    ///  Set
    +                    SET = 0x1,
    +                },
    +            },
    +            ///  ID Ready Interrupt -- this bit is set if the IDIE bit in CANxIER is 1, and a CAN Identifier has been received (a message was successfully transmitted or aborted). This bit is set whenever a message was successfully transmitted or aborted and the IDIE bit is set in the IER register.
    +            IDI: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Reset
    +                    RESET = 0x0,
    +                    ///  Set
    +                    SET = 0x1,
    +                },
    +            },
    +            ///  Transmit Interrupt 2. This bit is set when the TBS2 bit in CANxSR goes from 0 to 1 (whenever a message out of TXB2 was successfully transmitted or aborted), indicating that Transmit buffer 2 is available, and the TIE2 bit in CANxIER is 1.
    +            TI2: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Reset
    +                    RESET = 0x0,
    +                    ///  Set
    +                    SET = 0x1,
    +                },
    +            },
    +            ///  Transmit Interrupt 3. This bit is set when the TBS3 bit in CANxSR goes from 0 to 1 (whenever a message out of TXB3 was successfully transmitted or aborted), indicating that Transmit buffer 3 is available, and the TIE3 bit in CANxIER is 1.
    +            TI3: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Reset
    +                    RESET = 0x0,
    +                    ///  Set
    +                    SET = 0x1,
    +                },
    +            },
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u5,
    +            ///  Error Code Capture: when the CAN controller detects a bus error, the location of the error within the frame is captured in this field. The value reflects an internal state variable, and as a result is not very linear: 00011 = Start of Frame 00010 = ID28 ... ID21 00110 = ID20 ... ID18 00100 = SRTR Bit 00101 = IDE bit 00111 = ID17 ... 13 01111 = ID12 ... ID5 01110 = ID4 ... ID0 01100 = RTR Bit 01101 = Reserved Bit 1 01001 = Reserved Bit 0 01011 = Data Length Code 01010 = Data Field 01000 = CRC Sequence 11000 = CRC Delimiter 11001 = Acknowledge Slot 11011 = Acknowledge Delimiter 11010 = End of Frame 10010 = Intermission Whenever a bus error occurs, the corresponding bus error interrupt is forced, if enabled. At the same time, the current position of the Bit Stream Processor is captured into the Error Code Capture Register. The content within this register is fixed until the user software has read out its content once. From now on, the capture mechanism is activated again, i.e. reading the CANxICR enables another Bus Error Interrupt.
    +            ERRBIT4_0: u5,
    +            ///  When the CAN controller detects a bus error, the direction of the current bit is captured in this bit.
    +            ERRDIR: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Error occurred during transmitting.
    +                    ERROR_OCCURRED_DURIN = 0x0,
    +                    ///  Error occurred during receiving.
    +                    ERROR_OCCURRED_DURIN = 0x1,
    +                },
    +            },
    +            ///  When the CAN controller detects a bus error, the type of error is captured in this field:
    +            ERRC1_0: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Bit error
    +                    BIT_ERROR = 0x0,
    +                    ///  Form error
    +                    FORM_ERROR = 0x1,
    +                    ///  Stuff error
    +                    STUFF_ERROR = 0x2,
    +                    ///  Other error
    +                    OTHER_ERROR = 0x3,
    +                },
    +            },
    +            ///  Each time arbitration is lost while trying to send on the CAN, the bit number within the frame is captured into this field. After the content of ALCBIT is read, the ALI bit is cleared and a new Arbitration Lost interrupt can occur. 00 = arbitration lost in the first bit (MS) of identifier ... 11 = arbitration lost in SRTS bit (RTR bit for standard frame messages) 12 = arbitration lost in IDE bit 13 = arbitration lost in 12th bit of identifier (extended frame only) ... 30 = arbitration lost in last bit of identifier (extended frame only) 31 = arbitration lost in RTR bit (extended frame only) On arbitration lost, the corresponding arbitration lost interrupt is forced, if enabled. At that time, the current bit position of the Bit Stream Processor is captured into the Arbitration Lost Capture Register. The content within this register is fixed until the user application has read out its contents once. From now on, the capture mechanism is activated again.
    +            ALCBIT: u8,
    +        }),
    +        ///  Interrupt Enable
    +        IER: mmio.Mmio(packed struct(u32) {
    +            ///  Receiver Interrupt Enable. When the Receive Buffer Status is 'full', the CAN Controller requests the respective interrupt.
    +            RIE: u1,
    +            ///  Transmit Interrupt Enable for Buffer1. When a message has been successfully transmitted out of TXB1 or Transmit Buffer 1 is accessible again (e.g. after an Abort Transmission command), the CAN Controller requests the respective interrupt.
    +            TIE1: u1,
    +            ///  Error Warning Interrupt Enable. If the Error or Bus Status change (see Status Register), the CAN Controller requests the respective interrupt.
    +            EIE: u1,
    +            ///  Data Overrun Interrupt Enable. If the Data Overrun Status bit is set (see Status Register), the CAN Controller requests the respective interrupt.
    +            DOIE: u1,
    +            ///  Wake-Up Interrupt Enable. If the sleeping CAN controller wakes up, the respective interrupt is requested.
    +            WUIE: u1,
    +            ///  Error Passive Interrupt Enable. If the error status of the CAN Controller changes from error active to error passive or vice versa, the respective interrupt is requested.
    +            EPIE: u1,
    +            ///  Arbitration Lost Interrupt Enable. If the CAN Controller has lost arbitration, the respective interrupt is requested.
    +            ALIE: u1,
    +            ///  Bus Error Interrupt Enable. If a bus error has been detected, the CAN Controller requests the respective interrupt.
    +            BEIE: u1,
    +            ///  ID Ready Interrupt Enable. When a CAN identifier has been received, the CAN Controller requests the respective interrupt.
    +            IDIE: u1,
    +            ///  Transmit Interrupt Enable for Buffer2. When a message has been successfully transmitted out of TXB2 or Transmit Buffer 2 is accessible again (e.g. after an Abort Transmission command), the CAN Controller requests the respective interrupt.
    +            TIE2: u1,
    +            ///  Transmit Interrupt Enable for Buffer3. When a message has been successfully transmitted out of TXB3 or Transmit Buffer 3 is accessible again (e.g. after an Abort Transmission command), the CAN Controller requests the respective interrupt.
    +            TIE3: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u21,
    +        }),
    +        ///  Bus Timing. Can only be written when RM in CANMOD is 1.
    +        BTR: mmio.Mmio(packed struct(u32) {
    +            ///  Baud Rate Prescaler. The APB clock is divided by (this value plus one) to produce the CAN clock.
    +            BRP: u10,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u4,
    +            ///  The Synchronization Jump Width is (this value plus one) CAN clocks.
    +            SJW: u2,
    +            ///  The delay from the nominal Sync point to the sample point is (this value plus one) CAN clocks.
    +            TESG1: u4,
    +            ///  The delay from the sample point to the next nominal sync point is (this value plus one) CAN clocks. The nominal CAN bit time is (this value plus the value in TSEG1 plus 3) CAN clocks.
    +            TESG2: u3,
    +            ///  Sampling
    +            SAM: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  The bus is sampled once (recommended for high speed buses)
    +                    THE_BUS_IS_SAMPLED_O = 0x0,
    +                    ///  The bus is sampled 3 times (recommended for low to medium speed buses to filter spikes on the bus-line)
    +                    THE_BUS_IS_SAMPLED_3 = 0x1,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u8,
    +        }),
    +        ///  Error Warning Limit. Can only be written when RM in CANMOD is 1.
    +        EWL: mmio.Mmio(packed struct(u32) {
    +            ///  During CAN operation, this value is compared to both the Tx and Rx Error Counters. If either of these counter matches this value, the Error Status (ES) bit in CANSR is set.
    +            EWL: u8,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u24,
    +        }),
    +        ///  Status Register
    +        SR: mmio.Mmio(packed struct(u32) {
    +            ///  Receive Buffer Status. This bit is identical to the RBS bit in the CANxGSR.
    +            RBS_1: u1,
    +            ///  Data Overrun Status. This bit is identical to the DOS bit in the CANxGSR.
    +            DOS_1: u1,
    +            ///  Transmit Buffer Status 1.
    +            TBS1_1: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Locked. Software cannot access the Tx Buffer 1 nor write to the corresponding CANxTFI, CANxTID, CANxTDA, and CANxTDB registers because a message is either waiting for transmission or is in transmitting process.
    +                    LOCKED_SOFTWARE_CAN = 0x0,
    +                    ///  Released. Software may write a message into the Transmit Buffer 1 and its CANxTFI, CANxTID, CANxTDA, and CANxTDB registers.
    +                    RELEASED_SOFTWARE_M = 0x1,
    +                },
    +            },
    +            ///  Transmission Complete Status.
    +            TCS1_1: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Incomplete. The previously requested transmission for Tx Buffer 1 is not complete.
    +                    INCOMPLETE_THE_PREV = 0x0,
    +                    ///  Complete. The previously requested transmission for Tx Buffer 1 has been successfully completed.
    +                    COMPLETE_THE_PREVIO = 0x1,
    +                },
    +            },
    +            ///  Receive Status. This bit is identical to the RS bit in the GSR.
    +            RS_1: u1,
    +            ///  Transmit Status 1.
    +            TS1_1: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Idle. There is no transmission from Tx Buffer 1.
    +                    IDLE_THERE_IS_NO_TR = 0x0,
    +                    ///  Transmit. The CAN Controller is transmitting a message from Tx Buffer 1.
    +                    TRANSMIT_THE_CAN_CO = 0x1,
    +                },
    +            },
    +            ///  Error Status. This bit is identical to the ES bit in the CANxGSR.
    +            ES_1: u1,
    +            ///  Bus Status. This bit is identical to the BS bit in the CANxGSR.
    +            BS_1: u1,
    +            ///  Receive Buffer Status. This bit is identical to the RBS bit in the CANxGSR.
    +            RBS_2: u1,
    +            ///  Data Overrun Status. This bit is identical to the DOS bit in the CANxGSR.
    +            DOS_2: u1,
    +            ///  Transmit Buffer Status 2.
    +            TBS2_2: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Locked. Software cannot access the Tx Buffer 2 nor write to the corresponding CANxTFI, CANxTID, CANxTDA, and CANxTDB registers because a message is either waiting for transmission or is in transmitting process.
    +                    LOCKED_SOFTWARE_CAN = 0x0,
    +                    ///  Released. Software may write a message into the Transmit Buffer 2 and its CANxTFI, CANxTID, CANxTDA, and CANxTDB registers.
    +                    RELEASED_SOFTWARE_M = 0x1,
    +                },
    +            },
    +            ///  Transmission Complete Status.
    +            TCS2_2: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Incomplete. The previously requested transmission for Tx Buffer 2 is not complete.
    +                    INCOMPLETE_THE_PREV = 0x0,
    +                    ///  Complete. The previously requested transmission for Tx Buffer 2 has been successfully completed.
    +                    COMPLETE_THE_PREVIO = 0x1,
    +                },
    +            },
    +            ///  Receive Status. This bit is identical to the RS bit in the GSR.
    +            RS_2: u1,
    +            ///  Transmit Status 2.
    +            TS2_2: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Idle. There is no transmission from Tx Buffer 2.
    +                    IDLE_THERE_IS_NO_TR = 0x0,
    +                    ///  Transmit. The CAN Controller is transmitting a message from Tx Buffer 2.
    +                    TRANSMIT_THE_CAN_CO = 0x1,
    +                },
    +            },
    +            ///  Error Status. This bit is identical to the ES bit in the CANxGSR.
    +            ES_2: u1,
    +            ///  Bus Status. This bit is identical to the BS bit in the CANxGSR.
    +            BS_2: u1,
    +            ///  Receive Buffer Status. This bit is identical to the RBS bit in the CANxGSR.
    +            RBS_3: u1,
    +            ///  Data Overrun Status. This bit is identical to the DOS bit in the CANxGSR.
    +            DOS_3: u1,
    +            ///  Transmit Buffer Status 3.
    +            TBS3_3: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Locked. Software cannot access the Tx Buffer 3 nor write to the corresponding CANxTFI, CANxTID, CANxTDA, and CANxTDB registers because a message is either waiting for transmission or is in transmitting process.
    +                    LOCKED_SOFTWARE_CAN = 0x0,
    +                    ///  Released. Software may write a message into the Transmit Buffer 3 and its CANxTFI, CANxTID, CANxTDA, and CANxTDB registers.
    +                    RELEASED_SOFTWARE_M = 0x1,
    +                },
    +            },
    +            ///  Transmission Complete Status.
    +            TCS3_3: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Incomplete. The previously requested transmission for Tx Buffer 3 is not complete.
    +                    INCOMPLETE_THE_PREV = 0x0,
    +                    ///  Complete. The previously requested transmission for Tx Buffer 3 has been successfully completed.
    +                    COMPLETE_THE_PREVIO = 0x1,
    +                },
    +            },
    +            ///  Receive Status. This bit is identical to the RS bit in the GSR.
    +            RS_3: u1,
    +            ///  Transmit Status 3.
    +            TS3_3: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Idle. There is no transmission from Tx Buffer 3.
    +                    IDLE_THERE_IS_NO_TR = 0x0,
    +                    ///  Transmit. The CAN Controller is transmitting a message from Tx Buffer 3.
    +                    TRANSMIT_THE_CAN_CO = 0x1,
    +                },
    +            },
    +            ///  Error Status. This bit is identical to the ES bit in the CANxGSR.
    +            ES_3: u1,
    +            ///  Bus Status. This bit is identical to the BS bit in the CANxGSR.
    +            BS_3: u1,
    +            ///  Reserved, the value read from a reserved bit is not defined.
    +            RESERVED: u8,
    +        }),
    +        ///  Receive frame status. Can only be written when RM in CANMOD is 1.
    +        RFS: mmio.Mmio(packed struct(u32) {
    +            ///  ID Index. If the BP bit (below) is 0, this value is the zero-based number of the Lookup Table RAM entry at which the Acceptance Filter matched the received Identifier. Disabled entries in the Standard tables are included in this numbering, but will not be matched. See Section 21.17 Examples of acceptance filter tables and ID index values on page 587 for examples of ID Index values.
    +            IDINDEX: u10,
    +            ///  If this bit is 1, the current message was received in AF Bypass mode, and the ID Index field (above) is meaningless.
    +            BP: u1,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u5,
    +            ///  The field contains the Data Length Code (DLC) field of the current received message. When RTR = 0, this is related to the number of data bytes available in the CANRDA and CANRDB registers as follows: 0000-0111 = 0 to 7 bytes1000-1111 = 8 bytes With RTR = 1, this value indicates the number of data bytes requested to be sent back, with the same encoding.
    +            DLC: u4,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u10,
    +            ///  This bit contains the Remote Transmission Request bit of the current received message. 0 indicates a Data Frame, in which (if DLC is non-zero) data can be read from the CANRDA and possibly the CANRDB registers. 1 indicates a Remote frame, in which case the DLC value identifies the number of data bytes requested to be sent using the same Identifier.
    +            RTR: u1,
    +            ///  A 0 in this bit indicates that the current received message included an 11-bit Identifier, while a 1 indicates a 29-bit Identifier. This affects the contents of the CANid register described below.
    +            FF: u1,
    +        }),
    +        ///  Received Identifier. Can only be written when RM in CANMOD is 1.
    +        RID: mmio.Mmio(packed struct(u32) {
    +            ///  The 11-bit Identifier field of the current received message. In CAN 2.0A, these bits are called ID10-0, while in CAN 2.0B they're called ID29-18.
    +            ID: u11,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u21,
    +        }),
    +        ///  Received data bytes 1-4. Can only be written when RM in CANMOD is 1.
    +        RDA: mmio.Mmio(packed struct(u32) {
    +            ///  Data 1. If the DLC field in CANRFS >= 0001, this contains the first Data byte of the current received message.
    +            DATA1: u8,
    +            ///  Data 2. If the DLC field in CANRFS >= 0010, this contains the first Data byte of the current received message.
    +            DATA2: u8,
    +            ///  Data 3. If the DLC field in CANRFS >= 0011, this contains the first Data byte of the current received message.
    +            DATA3: u8,
    +            ///  Data 4. If the DLC field in CANRFS >= 0100, this contains the first Data byte of the current received message.
    +            DATA4: u8,
    +        }),
    +        ///  Received data bytes 5-8. Can only be written when RM in CANMOD is 1.
    +        RDB: mmio.Mmio(packed struct(u32) {
    +            ///  Data 5. If the DLC field in CANRFS >= 0101, this contains the first Data byte of the current received message.
    +            DATA5: u8,
    +            ///  Data 6. If the DLC field in CANRFS >= 0110, this contains the first Data byte of the current received message.
    +            DATA6: u8,
    +            ///  Data 7. If the DLC field in CANRFS >= 0111, this contains the first Data byte of the current received message.
    +            DATA7: u8,
    +            ///  Data 8. If the DLC field in CANRFS >= 1000, this contains the first Data byte of the current received message.
    +            DATA8: u8,
    +        }),
    +    };
    +
    +    ///  USB device/host/OTG controller
    +    pub const USB = extern struct {
    +        reserved220: [220]u8,
    +        ///  USB Receive Packet Length
    +        RXPLEN: mmio.Mmio(packed struct(u32) {
    +            ///  The remaining number of bytes to be read from the currently selected endpoint's buffer. When this field decrements to 0, the RxENDPKT bit will be set in USBDevIntSt.
    +            PKT_LNGTH: u10,
    +            ///  Data valid. This bit is useful for isochronous endpoints. Non-isochronous endpoints do not raise an interrupt when an erroneous data packet is received. But invalid data packet can be produced with a bus reset. For isochronous endpoints, data transfer will happen even if an erroneous packet is received. In this case DV bit will not be set for the packet.
    +            DV: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Data is invalid.
    +                    DATA_IS_INVALID_ = 0x0,
    +                    ///  Data is valid.
    +                    DATA_IS_VALID_ = 0x1,
    +                },
    +            },
    +            ///  The PKT_LNGTH field is valid and the packet is ready for reading.
    +            PKT_RDY: u1,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u20,
    +        }),
    +        reserved256: [32]u8,
    +        ///  OTG Interrupt Status
    +        INTST: mmio.Mmio(packed struct(u32) {
    +            ///  Timer time-out.
    +            TMR: u1,
    +            ///  Remove pull-up. This bit is set by hardware to indicate that software needs to disable the D+ pull-up resistor.
    +            REMOVE_PU: u1,
    +            ///  HNP failed. This bit is set by hardware to indicate that the HNP switching has failed.
    +            HNP_FAILURE: u1,
    +            ///  HNP succeeded. This bit is set by hardware to indicate that the HNP switching has succeeded.
    +            HNP_SUCCESS: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u28,
    +        }),
    +        ///  OTG Interrupt Enable
    +        INTEN: mmio.Mmio(packed struct(u32) {
    +            ///  1 = enable the corresponding bit in the IntSt register.
    +            TMR_EN: u1,
    +            ///  1 = enable the corresponding bit in the IntSt register.
    +            REMOVE_PU_EN: u1,
    +            ///  1 = enable the corresponding bit in the IntSt register.
    +            HNP_FAILURE_EN: u1,
    +            ///  1 = enable the corresponding bit in the IntSt register.
    +            HNP_SUCCES_EN: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u28,
    +        }),
    +        ///  OTG Interrupt Set
    +        INTSET: mmio.Mmio(packed struct(u32) {
    +            ///  0 = no effect. 1 = set the corresponding bit in the IntSt register.
    +            TMR_SET: u1,
    +            ///  0 = no effect. 1 = set the corresponding bit in the IntSt register.
    +            REMOVE_PU_SET: u1,
    +            ///  0 = no effect. 1 = set the corresponding bit in the IntSt register.
    +            HNP_FAILURE_SET: u1,
    +            ///  0 = no effect. 1 = set the corresponding bit in the IntSt register.
    +            HNP_SUCCES_SET: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u28,
    +        }),
    +        ///  OTG Interrupt Clear
    +        INTCLR: mmio.Mmio(packed struct(u32) {
    +            ///  0 = no effect. 1 = clear the corresponding bit in the IntSt register.
    +            TMR_CLR: u1,
    +            ///  0 = no effect. 1 = clear the corresponding bit in the IntSt register.
    +            REMOVE_PU_CLR: u1,
    +            ///  0 = no effect. 1 = clear the corresponding bit in the IntSt register.
    +            HNP_FAILURE_CLR: u1,
    +            ///  0 = no effect. 1 = clear the corresponding bit in the IntSt register.
    +            HNP_SUCCES_CLR: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u28,
    +        }),
    +        ///  OTG Status and Control and USB port select
    +        STCTRL: mmio.Mmio(packed struct(u32) {
    +            ///  Controls connection of USB functions (see Figure 51). Bit 0 is set or cleared by hardware when B_HNP_TRACK or A_HNP_TRACK is set and HNP succeeds. See Section 14.9. 00: U1 = device (OTG), U2 = host 01: U1 = host (OTG), U2 = host 10: Reserved 11: U1 = host, U2 = device In a device-only configuration, the following values are allowed: 00: U1 = device. The USB device controller signals are mapped to the U1 port: USB_CONNECT1, USB_UP_LED1, USB_D+1, USB_D-1. 11: U2 = device. The USB device controller signals are mapped to the U2 port: USB_CONNECT2, USB_UP_LED2, USB_D+2, USB_D-2.
    +            PORT_FUNC: u2,
    +            ///  Timer scale selection. This field determines the duration of each timer count. 00: 10 ms (100 KHz) 01: 100 ms (10 KHz) 10: 1000 ms (1 KHz) 11: Reserved
    +            TMR_SCALE: u2,
    +            ///  Timer mode selection. 0: monoshot 1: free running
    +            TMR_MODE: u1,
    +            ///  Timer enable. When set, TMR_CNT increments. When cleared, TMR_CNT is reset to 0.
    +            TMR_EN: u1,
    +            ///  Timer reset. Writing one to this bit resets TMR_CNT to 0. This provides a single bit control for the software to restart the timer when the timer is enabled.
    +            TMR_RST: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u1,
    +            ///  Enable HNP tracking for B-device (peripheral), see Section 14.9. Hardware clears this bit when HNP_SUCCESS or HNP_FAILURE is set.
    +            B_HNP_TRACK: u1,
    +            ///  Enable HNP tracking for A-device (host), see Section 14.9. Hardware clears this bit when HNP_SUCCESS or HNP_FAILURE is set.
    +            A_HNP_TRACK: u1,
    +            ///  When the B-device changes its role from peripheral to host, software sets this bit when it removes the D+ pull-up, see Section 14.9. Hardware clears this bit when HNP_SUCCESS or HNP_FAILURE is set.
    +            PU_REMOVED: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u5,
    +            ///  Current timer count value.
    +            TMR_CNT: u16,
    +        }),
    +        ///  OTG Timer
    +        TMR: mmio.Mmio(packed struct(u32) {
    +            ///  The TMR interrupt is set when TMR_CNT reaches this value.
    +            TIMEOUT_CNT: u16,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u16,
    +        }),
    +        reserved512: [232]u8,
    +        ///  USB Device Interrupt Status
    +        DEVINTST: mmio.Mmio(packed struct(u32) {
    +            ///  The frame interrupt occurs every 1 ms. This is used in isochronous packet transfers.
    +            FRAME: u1,
    +            ///  Fast endpoint interrupt. If an Endpoint Interrupt Priority register (USBEpIntPri) bit is set, the corresponding endpoint interrupt will be routed to this bit.
    +            EP_FAST: u1,
    +            ///  Slow endpoints interrupt. If an Endpoint Interrupt Priority Register (USBEpIntPri) bit is not set, the corresponding endpoint interrupt will be routed to this bit.
    +            EP_SLOW: u1,
    +            ///  Set when USB Bus reset, USB suspend change or Connect change event occurs. Refer to Section 13.12.6 Set Device Status (Command: 0xFE, Data: write 1 byte) on page 366.
    +            DEV_STAT: u1,
    +            ///  The command code register (USBCmdCode) is empty (New command can be written).
    +            CCEMPTY: u1,
    +            ///  Command data register (USBCmdData) is full (Data can be read now).
    +            CDFULL: u1,
    +            ///  The current packet in the endpoint buffer is transferred to the CPU.
    +            RxENDPKT: u1,
    +            ///  The number of data bytes transferred to the endpoint buffer equals the number of bytes programmed in the TxPacket length register (USBTxPLen).
    +            TxENDPKT: u1,
    +            ///  Endpoints realized. Set when Realize Endpoint register (USBReEp) or MaxPacketSize register (USBMaxPSize) is updated and the corresponding operation is completed.
    +            EP_RLZED: u1,
    +            ///  Error Interrupt. Any bus error interrupt from the USB device. Refer to Section 13.12.9 Read Error Status (Command: 0xFB, Data: read 1 byte) on page 368
    +            ERR_INT: u1,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u22,
    +        }),
    +        ///  USB Device Interrupt Enable
    +        DEVINTEN: mmio.Mmio(packed struct(u32) {
    +            ///  0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.
    +            FRAMEEN: u1,
    +            ///  0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.
    +            EP_FASTEN: u1,
    +            ///  0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.
    +            EP_SLOWEN: u1,
    +            ///  0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.
    +            DEV_STATEN: u1,
    +            ///  0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.
    +            CCEMPTYEN: u1,
    +            ///  0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.
    +            CDFULLEN: u1,
    +            ///  0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.
    +            RxENDPKTEN: u1,
    +            ///  0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.
    +            TxENDPKTEN: u1,
    +            ///  0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.
    +            EP_RLZEDEN: u1,
    +            ///  0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.
    +            ERR_INTEN: u1,
    +            ///  Reserved
    +            RESERVED: u22,
    +        }),
    +        ///  USB Device Interrupt Clear
    +        DEVINTCLR: mmio.Mmio(packed struct(u32) {
    +            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.
    +            FRAMECLR: u1,
    +            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.
    +            EP_FASTCLR: u1,
    +            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.
    +            EP_SLOWCLR: u1,
    +            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.
    +            DEV_STATCLR: u1,
    +            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.
    +            CCEMPTYCLR: u1,
    +            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.
    +            CDFULLCLR: u1,
    +            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.
    +            RxENDPKTCLR: u1,
    +            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.
    +            TxENDPKTCLR: u1,
    +            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.
    +            EP_RLZEDCLR: u1,
    +            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.
    +            ERR_INTCLR: u1,
    +            ///  Reserved
    +            RESERVED: u22,
    +        }),
    +        ///  USB Device Interrupt Set
    +        DEVINTSET: mmio.Mmio(packed struct(u32) {
    +            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.
    +            FRAMESET: u1,
    +            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.
    +            EP_FASTSET: u1,
    +            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.
    +            EP_SLOWSET: u1,
    +            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.
    +            DEV_STATSET: u1,
    +            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.
    +            CCEMPTYSET: u1,
    +            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.
    +            CDFULLSET: u1,
    +            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.
    +            RxENDPKTSET: u1,
    +            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.
    +            TxENDPKTSET: u1,
    +            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.
    +            EP_RLZEDSET: u1,
    +            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.
    +            ERR_INTSET: u1,
    +            ///  Reserved
    +            RESERVED: u22,
    +        }),
    +        ///  USB Command Code
    +        CMDCODE: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u8,
    +            ///  The command phase:
    +            CMD_PHASE: packed union {
    +                raw: u8,
    +                value: enum(u8) {
    +                    ///  Read
    +                    READ = 0x2,
    +                    ///  Write
    +                    WRITE = 0x1,
    +                    ///  Command
    +                    COMMAND = 0x5,
    +                    _,
    +                },
    +            },
    +            ///  This is a multi-purpose field. When CMD_PHASE is Command or Read, this field contains the code for the command (CMD_CODE). When CMD_PHASE is Write, this field contains the command write data (CMD_WDATA).
    +            CMD_CODE_WDATA: u8,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u8,
    +        }),
    +        ///  USB Command Data
    +        CMDDATA: mmio.Mmio(packed struct(u32) {
    +            ///  Command Read Data.
    +            CMD_RDATA: u8,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u24,
    +        }),
    +        ///  USB Receive Data
    +        RXDATA: mmio.Mmio(packed struct(u32) {
    +            ///  Data received.
    +            RX_DATA: u32,
    +        }),
    +        ///  USB Transmit Data
    +        TXDATA: mmio.Mmio(packed struct(u32) {
    +            ///  Transmit Data.
    +            TX_DATA: u32,
    +        }),
    +        reserved548: [4]u8,
    +        ///  USB Transmit Packet Length
    +        TXPLEN: mmio.Mmio(packed struct(u32) {
    +            ///  The remaining number of bytes to be written to the selected endpoint buffer. This field is decremented by 4 by hardware after each write to USBTxData. When this field decrements to 0, the TxENDPKT bit will be set in USBDevIntSt.
    +            PKT_LNGTH: u10,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u22,
    +        }),
    +        ///  USB Control
    +        CTRL: mmio.Mmio(packed struct(u32) {
    +            ///  Read mode control. Enables reading data from the OUT endpoint buffer for the endpoint specified in the LOG_ENDPOINT field using the USBRxData register. This bit is cleared by hardware when the last word of the current packet is read from USBRxData.
    +            RD_EN: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled.
    +                    DISABLED_ = 0x0,
    +                    ///  Enabled.
    +                    ENABLED_ = 0x1,
    +                },
    +            },
    +            ///  Write mode control. Enables writing data to the IN endpoint buffer for the endpoint specified in the LOG_ENDPOINT field using the USBTxData register. This bit is cleared by hardware when the number of bytes in USBTxLen have been sent.
    +            WR_EN: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled.
    +                    DISABLED_ = 0x0,
    +                    ///  Enabled.
    +                    ENABLED_ = 0x1,
    +                },
    +            },
    +            ///  Logical Endpoint number.
    +            LOG_ENDPOINT: u4,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u26,
    +        }),
    +        ///  USB Device Interrupt Priority
    +        DEVINTPRI: mmio.Mmio(packed struct(u32) {
    +            ///  Frame interrupt routing
    +            FRAME: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  FRAME interrupt is routed to USB_INT_REQ_LP.
    +                    LP = 0x0,
    +                    ///  FRAME interrupt is routed to USB_INT_REQ_HP.
    +                    HP = 0x1,
    +                },
    +            },
    +            ///  Fast endpoint interrupt routing
    +            EP_FAST: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  EP_FAST interrupt is routed to USB_INT_REQ_LP.
    +                    LP = 0x0,
    +                    ///  EP_FAST interrupt is routed to USB_INT_REQ_HP.
    +                    HP = 0x1,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u30,
    +        }),
    +        ///  USB Endpoint Interrupt Status
    +        EPINTST: mmio.Mmio(packed struct(u32) {
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST0: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST1: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST2: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST3: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST4: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST5: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST6: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST7: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST8: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST9: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST10: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST11: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST12: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST13: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST14: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST15: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST16: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST17: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST18: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST19: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST20: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST21: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST22: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST23: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST24: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST25: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST26: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST27: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST28: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST29: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST30: u1,
    +            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    +            EPST31: u1,
    +        }),
    +        ///  USB Endpoint Interrupt Enable
    +        EPINTEN: mmio.Mmio(packed struct(u32) {
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN0: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN1: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN2: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN3: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN4: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN5: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN6: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN7: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN8: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN9: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN10: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN11: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN12: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN13: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN14: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN15: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN16: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN17: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN18: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN19: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN20: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN21: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN22: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN23: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN24: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN25: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN26: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN27: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN28: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN29: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN30: u1,
    +            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    +            EPEN31: u1,
    +        }),
    +        ///  USB Endpoint Interrupt Clear
    +        EPINTCLR: mmio.Mmio(packed struct(u32) {
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR0: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR1: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR2: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR3: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR4: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR5: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR6: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR7: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR8: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR9: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR10: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR11: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR12: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR13: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR14: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR15: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR16: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR17: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR18: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR19: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR20: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR21: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR22: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR23: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR24: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR25: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR26: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR27: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR28: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR29: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR30: u1,
    +            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    +            EPCLR31: u1,
    +        }),
    +        ///  USB Endpoint Interrupt Set
    +        EPINTSET: mmio.Mmio(packed struct(u32) {
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET0: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET1: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET2: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET3: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET4: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET5: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET6: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET7: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET8: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET9: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET10: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET11: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET12: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET13: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET14: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET15: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET16: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET17: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET18: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET19: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET20: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET21: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET22: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET23: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET24: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET25: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET26: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET27: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET28: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET29: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET30: u1,
    +            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    +            EPSET31: u1,
    +        }),
    +        ///  USB Endpoint Priority
    +        EPINTPRI: mmio.Mmio(packed struct(u32) {
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI0: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI1: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI2: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI3: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI4: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI5: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI6: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI7: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI8: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI9: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI10: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI11: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI12: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI13: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI14: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI15: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI16: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI17: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI18: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI19: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI20: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI21: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI22: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI23: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI24: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI25: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI26: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI27: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI28: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI29: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI30: u1,
    +            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    +            EPPRI31: u1,
    +        }),
    +        ///  USB Realize Endpoint
    +        REEP: mmio.Mmio(packed struct(u32) {
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR0: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR1: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR2: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR3: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR4: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR5: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR6: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR7: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR8: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR9: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR10: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR11: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR12: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR13: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR14: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR15: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR16: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR17: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR18: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR19: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR20: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR21: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR22: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR23: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR24: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR25: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR26: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR27: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR28: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR29: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR30: u1,
    +            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    +            EPR31: u1,
    +        }),
    +        ///  USB Endpoint Index
    +        EPIND: mmio.Mmio(packed struct(u32) {
    +            ///  Physical endpoint number (0-31)
    +            PHY_EP: u5,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u27,
    +        }),
    +        ///  USB MaxPacketSize
    +        MAXPSIZE: mmio.Mmio(packed struct(u32) {
    +            ///  The maximum packet size value.
    +            MPS: u10,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u22,
    +        }),
    +        ///  USB DMA Request Status
    +        DMARST: mmio.Mmio(packed struct(u32) {
    +            ///  Control endpoint OUT (DMA cannot be enabled for this endpoint and EP0 bit must be 0).
    +            EPRST0: u1,
    +            ///  Control endpoint IN (DMA cannot be enabled for this endpoint and EP1 bit must be 0).
    +            EPRST1: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST2: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST3: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST4: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST5: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST6: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST7: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST8: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST9: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST10: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST11: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST12: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST13: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST14: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST15: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST16: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST17: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST18: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST19: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST20: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST21: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST22: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST23: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST24: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST25: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST26: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST27: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST28: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST29: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST30: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    +            EPRST31: u1,
    +        }),
    +        ///  USB DMA Request Clear
    +        DMARCLR: mmio.Mmio(packed struct(u32) {
    +            ///  Control endpoint OUT (DMA cannot be enabled for this endpoint and the EP0 bit must be 0).
    +            EPRCLR0: u1,
    +            ///  Control endpoint IN (DMA cannot be enabled for this endpoint and the EP1 bit must be 0).
    +            EPRCLR1: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR2: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR3: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR4: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR5: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR6: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR7: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR8: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR9: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR10: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR11: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR12: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR13: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR14: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR15: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR16: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR17: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR18: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR19: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR20: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR21: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR22: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR23: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR24: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR25: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR26: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR27: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR28: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR29: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR30: u1,
    +            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    +            EPRCLR31: u1,
    +        }),
    +        ///  USB DMA Request Set
    +        DMARSET: mmio.Mmio(packed struct(u32) {
    +            ///  Control endpoint OUT (DMA cannot be enabled for this endpoint and the EP0 bit must be 0).
    +            EPRSET0: u1,
    +            ///  Control endpoint IN (DMA cannot be enabled for this endpoint and the EP1 bit must be 0).
    +            EPRSET1: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET2: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET3: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET4: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET5: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET6: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET7: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET8: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET9: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET10: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET11: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET12: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET13: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET14: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET15: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET16: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET17: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET18: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET19: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET20: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET21: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET22: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET23: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET24: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET25: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET26: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET27: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET28: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET29: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET30: u1,
    +            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    +            EPRSET31: u1,
    +        }),
    +        reserved640: [36]u8,
    +        ///  USB UDCA Head
    +        UDCAH: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved. Read value is undefined, only zero should be written. The UDCA is aligned to 128-byte boundaries.
    +            RESERVED: u7,
    +            ///  Start address of the UDCA.
    +            UDCA_ADDR: u25,
    +        }),
    +        ///  USB Endpoint DMA Status
    +        EPDMAST: mmio.Mmio(packed struct(u32) {
    +            ///  Control endpoint OUT (DMA cannot be enabled for this endpoint and the EP0_DMA_ENABLE bit must be 0).
    +            EP_DMA_ST0: u1,
    +            ///  Control endpoint IN (DMA cannot be enabled for this endpoint and the EP1_DMA_ENABLE bit must be 0).
    +            EP_DMA_ST1: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST2: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST3: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST4: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST5: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST6: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST7: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST8: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST9: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST10: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST11: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST12: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST13: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST14: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST15: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST16: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST17: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST18: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST19: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST20: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST21: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST22: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST23: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST24: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST25: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST26: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST27: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST28: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST29: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST30: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    +            EP_DMA_ST31: u1,
    +        }),
    +        ///  USB Endpoint DMA Enable
    +        EPDMAEN: mmio.Mmio(packed struct(u32) {
    +            ///  Control endpoint OUT (DMA cannot be enabled for this endpoint and the EP0_DMA_ENABLE bit value must be 0).
    +            EP_DMA_EN0: u1,
    +            ///  Control endpoint IN (DMA cannot be enabled for this endpoint and the EP1_DMA_ENABLE bit must be 0).
    +            EP_DMA_EN1: u1,
    +            ///  Endpoint xx(2 <= xx <= 31) DMA enable control bit. 0 = No effect. 1 = Enable the DMA operation for endpoint EPxx.
    +            EP_DMA_EN: u30,
    +        }),
    +        ///  USB Endpoint DMA Disable
    +        EPDMADIS: mmio.Mmio(packed struct(u32) {
    +            ///  Control endpoint OUT (DMA cannot be enabled for this endpoint and the EP0_DMA_DISABLE bit value must be 0).
    +            EP_DMA_DIS0: u1,
    +            ///  Control endpoint IN (DMA cannot be enabled for this endpoint and the EP1_DMA_DISABLE bit value must be 0).
    +            EP_DMA_DIS1: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS2: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS3: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS4: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS5: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS6: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS7: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS8: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS9: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS10: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS11: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS12: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS13: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS14: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS15: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS16: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS17: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS18: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS19: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS20: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS21: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS22: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS23: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS24: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS25: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS26: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS27: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS28: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS29: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS30: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    +            EP_DMA_DIS31: u1,
    +        }),
    +        ///  USB DMA Interrupt Status
    +        DMAINTST: mmio.Mmio(packed struct(u32) {
    +            ///  End of Transfer Interrupt bit.
    +            EOT: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  All bits in the USBEoTIntSt register are 0.
    +                    ALL_BITS_IN_THE_USBE = 0x0,
    +                    ///  At least one bit in the USBEoTIntSt is set.
    +                    AT_LEAST_ONE_BIT_IN_ = 0x1,
    +                },
    +            },
    +            ///  New DD Request Interrupt bit.
    +            NDDR: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  All bits in the USBNDDRIntSt register are 0.
    +                    ALL_BITS_IN_THE_USBN = 0x0,
    +                    ///  At least one bit in the USBNDDRIntSt is set.
    +                    AT_LEAST_ONE_BIT_IN_ = 0x1,
    +                },
    +            },
    +            ///  System Error Interrupt bit.
    +            ERR: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  All bits in the USBSysErrIntSt register are 0.
    +                    ALL_BITS_IN_THE_USBS = 0x0,
    +                    ///  At least one bit in the USBSysErrIntSt is set.
    +                    AT_LEAST_ONE_BIT_IN_ = 0x1,
    +                },
    +            },
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u29,
    +        }),
    +        ///  USB DMA Interrupt Enable
    +        DMAINTEN: mmio.Mmio(packed struct(u32) {
    +            ///  End of Transfer Interrupt enable bit.
    +            EOT: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled.
    +                    DISABLED_ = 0x0,
    +                    ///  Enabled.
    +                    ENABLED_ = 0x1,
    +                },
    +            },
    +            ///  New DD Request Interrupt enable bit.
    +            NDDR: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled.
    +                    DISABLED_ = 0x0,
    +                    ///  Enabled.
    +                    ENABLED_ = 0x1,
    +                },
    +            },
    +            ///  System Error Interrupt enable bit.
    +            ERR: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled.
    +                    DISABLED_ = 0x0,
    +                    ///  Enabled.
    +                    ENABLED_ = 0x1,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u29,
    +        }),
    +        reserved672: [8]u8,
    +        ///  USB End of Transfer Interrupt Status
    +        EOTINTST: mmio.Mmio(packed struct(u32) {
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST0: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST1: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST2: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST3: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST4: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST5: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST6: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST7: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST8: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST9: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST10: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST11: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST12: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST13: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST14: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST15: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST16: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST17: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST18: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST19: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST20: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST21: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST22: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST23: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST24: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST25: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST26: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST27: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST28: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST29: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST30: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    +            EPTXINTST31: u1,
    +        }),
    +        ///  USB End of Transfer Interrupt Clear
    +        EOTINTCLR: mmio.Mmio(packed struct(u32) {
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR0: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR1: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR2: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR3: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR4: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR5: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR6: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR7: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR8: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR9: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR10: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR11: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR12: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR13: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR14: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR15: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR16: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR17: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR18: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR19: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR20: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR21: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR22: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR23: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR24: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR25: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR26: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR27: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR28: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR29: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR30: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTCLR31: u1,
    +        }),
    +        ///  USB End of Transfer Interrupt Set
    +        EOTINTSET: mmio.Mmio(packed struct(u32) {
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET0: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET1: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET2: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET3: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET4: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET5: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET6: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET7: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET8: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET9: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET10: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET11: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET12: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET13: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET14: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET15: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET16: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET17: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET18: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET19: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET20: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET21: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET22: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET23: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET24: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET25: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET26: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET27: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET28: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET29: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET30: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    +            EPTXINTSET31: u1,
    +        }),
    +        ///  USB New DD Request Interrupt Status
    +        NDDRINTST: mmio.Mmio(packed struct(u32) {
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST0: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST1: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST2: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST3: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST4: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST5: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST6: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST7: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST8: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST9: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST10: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST11: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST12: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST13: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST14: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST15: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST16: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST17: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST18: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST19: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST20: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST21: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST22: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST23: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST24: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST25: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST26: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST27: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST28: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST29: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST30: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    +            EPNDDINTST31: u1,
    +        }),
    +        ///  USB New DD Request Interrupt Clear
    +        NDDRINTCLR: mmio.Mmio(packed struct(u32) {
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR0: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR1: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR2: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR3: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR4: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR5: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR6: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR7: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR8: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR9: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR10: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR11: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR12: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR13: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR14: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR15: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR16: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR17: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR18: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR19: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR20: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR21: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR22: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR23: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR24: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR25: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR26: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR27: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR28: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR29: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR30: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTCLR31: u1,
    +        }),
    +        ///  USB New DD Request Interrupt Set
    +        NDDRINTSET: mmio.Mmio(packed struct(u32) {
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET0: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET1: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET2: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET3: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET4: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET5: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET6: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET7: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET8: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET9: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET10: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET11: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET12: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET13: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET14: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET15: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET16: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET17: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET18: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET19: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET20: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET21: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET22: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET23: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET24: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET25: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET26: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET27: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET28: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET29: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET30: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    +            EPNDDINTSET31: u1,
    +        }),
    +        ///  USB System Error Interrupt Status
    +        SYSERRINTST: mmio.Mmio(packed struct(u32) {
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST0: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST1: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST2: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST3: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST4: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST5: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST6: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST7: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST8: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST9: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST10: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST11: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST12: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST13: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST14: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST15: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST16: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST17: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST18: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST19: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST20: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST21: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST22: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST23: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST24: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST25: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST26: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST27: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST28: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST29: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST30: u1,
    +            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    +            EPERRINTST31: u1,
    +        }),
    +        ///  USB System Error Interrupt Clear
    +        SYSERRINTCLR: mmio.Mmio(packed struct(u32) {
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR0: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR1: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR2: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR3: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR4: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR5: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR6: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR7: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR8: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR9: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR10: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR11: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR12: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR13: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR14: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR15: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR16: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR17: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR18: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR19: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR20: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR21: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR22: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR23: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR24: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR25: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR26: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR27: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR28: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR29: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR30: u1,
    +            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTCLR31: u1,
    +        }),
    +        ///  USB System Error Interrupt Set
    +        SYSERRINTSET: mmio.Mmio(packed struct(u32) {
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET0: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET1: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET2: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET3: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET4: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET5: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET6: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET7: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET8: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET9: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET10: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET11: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET12: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET13: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET14: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET15: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET16: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET17: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET18: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET19: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET20: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET21: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET22: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET23: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET24: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET25: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET26: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET27: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET28: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET29: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET30: u1,
    +            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    +            EPERRINTSET31: u1,
    +        }),
    +        reserved768: [60]u8,
    +        ///  I2C Receive
    +        I2C_RX: mmio.Mmio(packed struct(u32) {
    +            ///  Receive data.
    +            RXDATA: u8,
    +            padding: u24,
    +        }),
    +        ///  I2C Status
    +        I2C_STS: mmio.Mmio(packed struct(u32) {
    +            ///  Transaction Done Interrupt. This flag is set if a transaction completes successfully. It is cleared by writing a one to bit 0 of the status register. It is unaffected by slave transactions.
    +            TDI: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Transaction has not completed.
    +                    NOT_COMPLETE = 0x0,
    +                    ///  Transaction completed.
    +                    COMPLETE = 0x1,
    +                },
    +            },
    +            ///  Arbitration Failure Interrupt. When transmitting, if the SDA is low when SDAOUT is high, then this I2C has lost the arbitration to another device on the bus. The Arbitration Failure bit is set when this happens. It is cleared by writing a one to bit 1 of the status register.
    +            AFI: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  No arbitration failure on last transmission.
    +                    NO_ARBITRATION_FAILU = 0x0,
    +                    ///  Arbitration failure occurred on last transmission.
    +                    ARBITRATION_FAILURE_ = 0x1,
    +                },
    +            },
    +            ///  No Acknowledge Interrupt. After every byte of data is sent, the transmitter expects an acknowledge from the receiver. This bit is set if the acknowledge is not received. It is cleared when a byte is written to the master TX FIFO.
    +            NAI: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Last transmission received an acknowledge.
    +                    ACKNOWLEDGE_RCVD = 0x0,
    +                    ///  Last transmission did not receive an acknowledge.
    +                    NO_ACKNOWLEDGE_RCVD = 0x1,
    +                },
    +            },
    +            ///  Master Data Request Interrupt. Once a transmission is started, the transmitter must have data to transmit as long as it isn't followed by a stop condition or it will hold SCL low until more data is available. The Master Data Request bit is set when the master transmitter is data-starved. If the master TX FIFO is empty and the last byte did not have a STOP condition flag, then SCL is held low until the CPU writes another byte to transmit. This bit is cleared when a byte is written to the master TX FIFO.
    +            DRMI: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Master transmitter does not need data.
    +                    BUSY = 0x0,
    +                    ///  Master transmitter needs data.
    +                    NEED_DATA = 0x1,
    +                },
    +            },
    +            ///  Slave Data Request Interrupt. Once a transmission is started, the transmitter must have data to transmit as long as it isn't followed by a STOP condition or it will hold SCL low until more data is available. The Slave Data Request bit is set when the slave transmitter is data-starved. If the slave TX FIFO is empty and the last byte transmitted was acknowledged, then SCL is held low until the CPU writes another byte to transmit. This bit is cleared when a byte is written to the slave Tx FIFO.
    +            DRSI: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Slave transmitter does not need data.
    +                    BUSY = 0x0,
    +                    ///  Slave transmitter needs data.
    +                    NEED_DATA = 0x1,
    +                },
    +            },
    +            ///  Indicates whether the bus is busy. This bit is set when a START condition has been seen. It is cleared when a STOP condition is seen..
    +            Active: u1,
    +            ///  The current value of the SCL signal.
    +            SCL: u1,
    +            ///  The current value of the SDA signal.
    +            SDA: u1,
    +            ///  Receive FIFO Full (RFF). This bit is set when the RX FIFO is full and cannot accept any more data. It is cleared when the RX FIFO is not full. If a byte arrives when the Receive FIFO is full, the SCL is held low until the CPU reads the RX FIFO and makes room for it.
    +            RFF: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  RX FIFO is not full
    +                    RX_FIFO_IS_NOT_FULL = 0x0,
    +                    ///  RX FIFO is full
    +                    RX_FIFO_IS_FULL = 0x1,
    +                },
    +            },
    +            ///  Receive FIFO Empty. RFE is set when the RX FIFO is empty and is cleared when the RX FIFO contains valid data.
    +            RFE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  RX FIFO contains data.
    +                    DATA = 0x0,
    +                    ///  RX FIFO is empty
    +                    EMPTY = 0x1,
    +                },
    +            },
    +            ///  Transmit FIFO Full. TFF is set when the TX FIFO is full and is cleared when the TX FIFO is not full.
    +            TFF: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  TX FIFO is not full.
    +                    TX_FIFO_IS_NOT_FULL_ = 0x0,
    +                    ///  TX FIFO is full
    +                    TX_FIFO_IS_FULL = 0x1,
    +                },
    +            },
    +            ///  Transmit FIFO Empty. TFE is set when the TX FIFO is empty and is cleared when the TX FIFO contains valid data.
    +            TFE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  TX FIFO contains valid data.
    +                    VALID_DATA = 0x0,
    +                    ///  TX FIFO is empty
    +                    EMPTY = 0x1,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u20,
    +        }),
    +        ///  I2C Control
    +        I2C_CTL: mmio.Mmio(packed struct(u32) {
    +            ///  Transmit Done Interrupt Enable. This enables the TDI interrupt signalling that this I2C issued a STOP condition.
    +            TDIE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disable the TDI interrupt.
    +                    DISABLE_THE_TDI_INTE = 0x0,
    +                    ///  Enable the TDI interrupt.
    +                    ENABLE_THE_TDI_INTER = 0x1,
    +                },
    +            },
    +            ///  Transmitter Arbitration Failure Interrupt Enable. This enables the AFI interrupt which is asserted during transmission when trying to set SDA high, but the bus is driven low by another device.
    +            AFIE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disable the AFI.
    +                    DISABLE_THE_AFI_ = 0x0,
    +                    ///  Enable the AFI.
    +                    ENABLE_THE_AFI_ = 0x1,
    +                },
    +            },
    +            ///  Transmitter No Acknowledge Interrupt Enable. This enables the NAI interrupt signalling that transmitted byte was not acknowledged.
    +            NAIE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disable the NAI.
    +                    DISABLE_THE_NAI_ = 0x0,
    +                    ///  Enable the NAI.
    +                    ENABLE_THE_NAI_ = 0x1,
    +                },
    +            },
    +            ///  Master Transmitter Data Request Interrupt Enable. This enables the DRMI interrupt which signals that the master transmitter has run out of data, has not issued a STOP, and is holding the SCL line low.
    +            DRMIE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disable the DRMI interrupt.
    +                    DISABLE_THE_DRMI_INT = 0x0,
    +                    ///  Enable the DRMI interrupt.
    +                    ENABLE_THE_DRMI_INTE = 0x1,
    +                },
    +            },
    +            ///  Slave Transmitter Data Request Interrupt Enable. This enables the DRSI interrupt which signals that the slave transmitter has run out of data and the last byte was acknowledged, so the SCL line is being held low.
    +            DRSIE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disable the DRSI interrupt.
    +                    DISABLE_THE_DRSI_INT = 0x0,
    +                    ///  Enable the DRSI interrupt.
    +                    ENABLE_THE_DRSI_INTE = 0x1,
    +                },
    +            },
    +            ///  Receive FIFO Full Interrupt Enable. This enables the Receive FIFO Full interrupt to indicate that the receive FIFO cannot accept any more data.
    +            REFIE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disable the RFFI.
    +                    DISABLE_THE_RFFI_ = 0x0,
    +                    ///  Enable the RFFI.
    +                    ENABLE_THE_RFFI_ = 0x1,
    +                },
    +            },
    +            ///  Receive Data Available Interrupt Enable. This enables the DAI interrupt to indicate that data is available in the receive FIFO (i.e. not empty).
    +            RFDAIE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disable the DAI.
    +                    DISABLE_THE_DAI_ = 0x0,
    +                    ///  Enable the DAI.
    +                    ENABLE_THE_DAI_ = 0x1,
    +                },
    +            },
    +            ///  Transmit FIFO Not Full Interrupt Enable. This enables the Transmit FIFO Not Full interrupt to indicate that the more data can be written to the transmit FIFO. Note that this is not full. It is intended help the CPU to write to the I2C block only when there is room in the FIFO and do this without polling the status register.
    +            TFFIE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disable the TFFI.
    +                    DISABLE_THE_TFFI_ = 0x0,
    +                    ///  Enable the TFFI.
    +                    ENABLE_THE_TFFI_ = 0x1,
    +                },
    +            },
    +            ///  Soft reset. This is only needed in unusual circumstances. If a device issues a start condition without issuing a stop condition. A system timer may be used to reset the I2C if the bus remains busy longer than the time-out period. On a soft reset, the Tx and Rx FIFOs are flushed, I2C_STS register is cleared, and all internal state machines are reset to appear idle. The I2C_CLKHI, I2C_CLKLO and I2C_CTL (except Soft Reset Bit) are NOT modified by a soft reset.
    +            SRST: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  No reset.
    +                    NO_RESET = 0x0,
    +                    ///  Reset the I2C to idle state. Self clearing.
    +                    RESET = 0x1,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u23,
    +        }),
    +        ///  I2C Clock High
    +        I2C_CLKHI: mmio.Mmio(packed struct(u32) {
    +            ///  Clock divisor high. This value is the number of 48 MHz clocks the serial clock (SCL) will be high.
    +            CDHI: u8,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u24,
    +        }),
    +        ///  I2C Clock Low
    +        I2C_CLKLO: mmio.Mmio(packed struct(u32) {
    +            ///  Clock divisor low. This value is the number of 48 MHz clocks the serial clock (SCL) will be low.
    +            CDLO: u8,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u24,
    +        }),
    +        reserved4084: [3296]u8,
    +        ///  USB Clock Control
    +        USBCLKCTRL: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u1,
    +            ///  Device clock enable. Enables the usbclk input to the device controller
    +            DEV_CLK_EN: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u1,
    +            ///  Port select register clock enable.
    +            PORTSEL_CLK_EN: u1,
    +            ///  AHB clock enable
    +            AHB_CLK_EN: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u27,
    +        }),
    +        ///  USB Clock Status
    +        USBCLKST: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u1,
    +            ///  Device clock on. The usbclk input to the device controller is active .
    +            DEV_CLK_ON: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u1,
    +            ///  Port select register clock on.
    +            PORTSEL_CLK_ON: u1,
    +            ///  AHB clock on.
    +            AHB_CLK_ON: u1,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u27,
    +        }),
    +    };
    +
    +    ///  General purpose DMA controller
    +    pub const GPDMA = extern struct {
    +        ///  DMA Interrupt Status Register
    +        INTSTAT: mmio.Mmio(packed struct(u32) {
    +            ///  Status of DMA channel interrupts after masking. Each bit represents one channel: 0 - the corresponding channel has no active interrupt request. 1 - the corresponding channel does have an active interrupt request.
    +            INTSTAT0: u1,
    +            ///  Status of DMA channel interrupts after masking. Each bit represents one channel: 0 - the corresponding channel has no active interrupt request. 1 - the corresponding channel does have an active interrupt request.
    +            INTSTAT1: u1,
    +            ///  Status of DMA channel interrupts after masking. Each bit represents one channel: 0 - the corresponding channel has no active interrupt request. 1 - the corresponding channel does have an active interrupt request.
    +            INTSTAT2: u1,
    +            ///  Status of DMA channel interrupts after masking. Each bit represents one channel: 0 - the corresponding channel has no active interrupt request. 1 - the corresponding channel does have an active interrupt request.
    +            INTSTAT3: u1,
    +            ///  Status of DMA channel interrupts after masking. Each bit represents one channel: 0 - the corresponding channel has no active interrupt request. 1 - the corresponding channel does have an active interrupt request.
    +            INTSTAT4: u1,
    +            ///  Status of DMA channel interrupts after masking. Each bit represents one channel: 0 - the corresponding channel has no active interrupt request. 1 - the corresponding channel does have an active interrupt request.
    +            INTSTAT5: u1,
    +            ///  Status of DMA channel interrupts after masking. Each bit represents one channel: 0 - the corresponding channel has no active interrupt request. 1 - the corresponding channel does have an active interrupt request.
    +            INTSTAT6: u1,
    +            ///  Status of DMA channel interrupts after masking. Each bit represents one channel: 0 - the corresponding channel has no active interrupt request. 1 - the corresponding channel does have an active interrupt request.
    +            INTSTAT7: u1,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u24,
    +        }),
    +        ///  DMA Interrupt Terminal Count Request Status Register
    +        INTTCSTAT: mmio.Mmio(packed struct(u32) {
    +            ///  Terminal count interrupt request status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    +            INTTCSTAT0: u1,
    +            ///  Terminal count interrupt request status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    +            INTTCSTAT1: u1,
    +            ///  Terminal count interrupt request status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    +            INTTCSTAT2: u1,
    +            ///  Terminal count interrupt request status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    +            INTTCSTAT3: u1,
    +            ///  Terminal count interrupt request status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    +            INTTCSTAT4: u1,
    +            ///  Terminal count interrupt request status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    +            INTTCSTAT5: u1,
    +            ///  Terminal count interrupt request status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    +            INTTCSTAT6: u1,
    +            ///  Terminal count interrupt request status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    +            INTTCSTAT7: u1,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u24,
    +        }),
    +        ///  DMA Interrupt Terminal Count Request Clear Register
    +        INTTCCLEAR: mmio.Mmio(packed struct(u32) {
    +            ///  Allows clearing the Terminal count interrupt request (IntTCStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel terminal count interrupt.
    +            INTTCCLEAR0: u1,
    +            ///  Allows clearing the Terminal count interrupt request (IntTCStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel terminal count interrupt.
    +            INTTCCLEAR1: u1,
    +            ///  Allows clearing the Terminal count interrupt request (IntTCStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel terminal count interrupt.
    +            INTTCCLEAR2: u1,
    +            ///  Allows clearing the Terminal count interrupt request (IntTCStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel terminal count interrupt.
    +            INTTCCLEAR3: u1,
    +            ///  Allows clearing the Terminal count interrupt request (IntTCStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel terminal count interrupt.
    +            INTTCCLEAR4: u1,
    +            ///  Allows clearing the Terminal count interrupt request (IntTCStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel terminal count interrupt.
    +            INTTCCLEAR5: u1,
    +            ///  Allows clearing the Terminal count interrupt request (IntTCStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel terminal count interrupt.
    +            INTTCCLEAR6: u1,
    +            ///  Allows clearing the Terminal count interrupt request (IntTCStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel terminal count interrupt.
    +            INTTCCLEAR7: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u24,
    +        }),
    +        ///  DMA Interrupt Error Status Register
    +        INTERRSTAT: mmio.Mmio(packed struct(u32) {
    +            ///  Interrupt error status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    +            INTERRSTAT0: u1,
    +            ///  Interrupt error status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    +            INTERRSTAT1: u1,
    +            ///  Interrupt error status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    +            INTERRSTAT2: u1,
    +            ///  Interrupt error status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    +            INTERRSTAT3: u1,
    +            ///  Interrupt error status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    +            INTERRSTAT4: u1,
    +            ///  Interrupt error status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    +            INTERRSTAT5: u1,
    +            ///  Interrupt error status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    +            INTERRSTAT6: u1,
    +            ///  Interrupt error status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    +            INTERRSTAT7: u1,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u24,
    +        }),
    +        ///  DMA Interrupt Error Clear Register
    +        INTERRCLR: mmio.Mmio(packed struct(u32) {
    +            ///  Writing a 1 clears the error interrupt request (IntErrStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel error interrupt.
    +            INTERRCLR0: u1,
    +            ///  Writing a 1 clears the error interrupt request (IntErrStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel error interrupt.
    +            INTERRCLR1: u1,
    +            ///  Writing a 1 clears the error interrupt request (IntErrStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel error interrupt.
    +            INTERRCLR2: u1,
    +            ///  Writing a 1 clears the error interrupt request (IntErrStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel error interrupt.
    +            INTERRCLR3: u1,
    +            ///  Writing a 1 clears the error interrupt request (IntErrStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel error interrupt.
    +            INTERRCLR4: u1,
    +            ///  Writing a 1 clears the error interrupt request (IntErrStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel error interrupt.
    +            INTERRCLR5: u1,
    +            ///  Writing a 1 clears the error interrupt request (IntErrStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel error interrupt.
    +            INTERRCLR6: u1,
    +            ///  Writing a 1 clears the error interrupt request (IntErrStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel error interrupt.
    +            INTERRCLR7: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u24,
    +        }),
    +        ///  DMA Raw Interrupt Terminal Count Status Register
    +        RAWINTTCSTAT: mmio.Mmio(packed struct(u32) {
    +            ///  Status of the terminal count interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    +            RAWINTTCSTAT0: u1,
    +            ///  Status of the terminal count interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    +            RAWINTTCSTAT1: u1,
    +            ///  Status of the terminal count interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    +            RAWINTTCSTAT2: u1,
    +            ///  Status of the terminal count interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    +            RAWINTTCSTAT3: u1,
    +            ///  Status of the terminal count interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    +            RAWINTTCSTAT4: u1,
    +            ///  Status of the terminal count interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    +            RAWINTTCSTAT5: u1,
    +            ///  Status of the terminal count interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    +            RAWINTTCSTAT6: u1,
    +            ///  Status of the terminal count interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    +            RAWINTTCSTAT7: u1,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u24,
    +        }),
    +        ///  DMA Raw Error Interrupt Status Register
    +        RAWINTERRSTAT: mmio.Mmio(packed struct(u32) {
    +            ///  Status of the error interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    +            RAWINTERRSTAT0: u1,
    +            ///  Status of the error interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    +            RAWINTERRSTAT1: u1,
    +            ///  Status of the error interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    +            RAWINTERRSTAT2: u1,
    +            ///  Status of the error interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    +            RAWINTERRSTAT3: u1,
    +            ///  Status of the error interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    +            RAWINTERRSTAT4: u1,
    +            ///  Status of the error interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    +            RAWINTERRSTAT5: u1,
    +            ///  Status of the error interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    +            RAWINTERRSTAT6: u1,
    +            ///  Status of the error interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    +            RAWINTERRSTAT7: u1,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u24,
    +        }),
    +        ///  DMA Enabled Channel Register
    +        ENBLDCHNS: mmio.Mmio(packed struct(u32) {
    +            ///  Enable status for DMA channels. Each bit represents one channel: 0 - DMA channel is disabled. 1 - DMA channel is enabled.
    +            ENABLEDCHANNELS0: u1,
    +            ///  Enable status for DMA channels. Each bit represents one channel: 0 - DMA channel is disabled. 1 - DMA channel is enabled.
    +            ENABLEDCHANNELS1: u1,
    +            ///  Enable status for DMA channels. Each bit represents one channel: 0 - DMA channel is disabled. 1 - DMA channel is enabled.
    +            ENABLEDCHANNELS2: u1,
    +            ///  Enable status for DMA channels. Each bit represents one channel: 0 - DMA channel is disabled. 1 - DMA channel is enabled.
    +            ENABLEDCHANNELS3: u1,
    +            ///  Enable status for DMA channels. Each bit represents one channel: 0 - DMA channel is disabled. 1 - DMA channel is enabled.
    +            ENABLEDCHANNELS4: u1,
    +            ///  Enable status for DMA channels. Each bit represents one channel: 0 - DMA channel is disabled. 1 - DMA channel is enabled.
    +            ENABLEDCHANNELS5: u1,
    +            ///  Enable status for DMA channels. Each bit represents one channel: 0 - DMA channel is disabled. 1 - DMA channel is enabled.
    +            ENABLEDCHANNELS6: u1,
    +            ///  Enable status for DMA channels. Each bit represents one channel: 0 - DMA channel is disabled. 1 - DMA channel is enabled.
    +            ENABLEDCHANNELS7: u1,
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u24,
    +        }),
    +        ///  DMA Software Burst Request Register
    +        SOFTBREQ: mmio.Mmio(packed struct(u32) {
    +            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    +            SOFTBREQ0: u1,
    +            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    +            SOFTBREQ1: u1,
    +            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    +            SOFTBREQ2: u1,
    +            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    +            SOFTBREQ3: u1,
    +            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    +            SOFTBREQ4: u1,
    +            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    +            SOFTBREQ5: u1,
    +            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    +            SOFTBREQ6: u1,
    +            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    +            SOFTBREQ7: u1,
    +            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    +            SOFTBREQ8: u1,
    +            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    +            SOFTBREQ9: u1,
    +            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    +            SOFTBREQ10: u1,
    +            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    +            SOFTBREQ11: u1,
    +            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    +            SOFTBREQ12: u1,
    +            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    +            SOFTBREQ13: u1,
    +            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    +            SOFTBREQ14: u1,
    +            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    +            SOFTBREQ15: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u16,
    +        }),
    +        ///  DMA Software Single Request Register
    +        SOFTSREQ: mmio.Mmio(packed struct(u32) {
    +            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    +            SOFTSREQ0: u1,
    +            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    +            SOFTSREQ1: u1,
    +            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    +            SOFTSREQ2: u1,
    +            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    +            SOFTSREQ3: u1,
    +            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    +            SOFTSREQ4: u1,
    +            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    +            SOFTSREQ5: u1,
    +            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    +            SOFTSREQ6: u1,
    +            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    +            SOFTSREQ7: u1,
    +            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    +            SOFTSREQ8: u1,
    +            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    +            SOFTSREQ9: u1,
    +            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    +            SOFTSREQ10: u1,
    +            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    +            SOFTSREQ11: u1,
    +            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    +            SOFTSREQ12: u1,
    +            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    +            SOFTSREQ13: u1,
    +            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    +            SOFTSREQ14: u1,
    +            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    +            SOFTSREQ15: u1,
    +            ///  Reserved. Read undefined. Write reserved bits as zero.
    +            RESERVED: u16,
    +        }),
    +        ///  DMA Software Last Burst Request Register
    +        SOFTLBREQ: mmio.Mmio(packed struct(u32) {
    +            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    +            SOFTLBREQ0: u1,
    +            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    +            SOFTLBREQ1: u1,
    +            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    +            SOFTLBREQ2: u1,
    +            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    +            SOFTLBREQ3: u1,
    +            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    +            SOFTLBREQ4: u1,
    +            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    +            SOFTLBREQ5: u1,
    +            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    +            SOFTLBREQ6: u1,
    +            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    +            SOFTLBREQ7: u1,
    +            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    +            SOFTLBREQ8: u1,
    +            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    +            SOFTLBREQ9: u1,
    +            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    +            SOFTLBREQ10: u1,
    +            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    +            SOFTLBREQ11: u1,
    +            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    +            SOFTLBREQ12: u1,
    +            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    +            SOFTLBREQ13: u1,
    +            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    +            SOFTLBREQ14: u1,
    +            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    +            SOFTLBREQ15: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u16,
    +        }),
    +        ///  DMA Software Last Single Request Register
    +        SOFTLSREQ: mmio.Mmio(packed struct(u32) {
    +            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    +            SOFTLSREQ0: u1,
    +            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    +            SOFTLSREQ1: u1,
    +            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    +            SOFTLSREQ2: u1,
    +            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    +            SOFTLSREQ3: u1,
    +            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    +            SOFTLSREQ4: u1,
    +            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    +            SOFTLSREQ5: u1,
    +            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    +            SOFTLSREQ6: u1,
    +            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    +            SOFTLSREQ7: u1,
    +            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    +            SOFTLSREQ8: u1,
    +            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    +            SOFTLSREQ9: u1,
    +            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    +            SOFTLSREQ10: u1,
    +            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    +            SOFTLSREQ11: u1,
    +            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    +            SOFTLSREQ12: u1,
    +            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    +            SOFTLSREQ13: u1,
    +            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    +            SOFTLSREQ14: u1,
    +            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    +            SOFTLSREQ15: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u16,
    +        }),
    +        ///  DMA Configuration Register
    +        CONFIG: mmio.Mmio(packed struct(u32) {
    +            ///  DMA Controller enable: 0 = disabled (default). Disabling the DMA Controller reduces power consumption. 1 = enabled.
    +            E: u1,
    +            ///  AHB Master endianness configuration: 0 = little-endian mode (default). 1 = big-endian mode.
    +            M: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u30,
    +        }),
    +        ///  DMA Synchronization Register
    +        SYNC: mmio.Mmio(packed struct(u32) {
    +            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    +            DMACSYNC0: u1,
    +            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    +            DMACSYNC1: u1,
    +            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    +            DMACSYNC2: u1,
    +            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    +            DMACSYNC3: u1,
    +            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    +            DMACSYNC4: u1,
    +            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    +            DMACSYNC5: u1,
    +            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    +            DMACSYNC6: u1,
    +            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    +            DMACSYNC7: u1,
    +            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    +            DMACSYNC8: u1,
    +            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    +            DMACSYNC9: u1,
    +            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    +            DMACSYNC10: u1,
    +            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    +            DMACSYNC11: u1,
    +            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    +            DMACSYNC12: u1,
    +            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    +            DMACSYNC13: u1,
    +            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    +            DMACSYNC14: u1,
    +            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    +            DMACSYNC15: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u16,
    +        }),
    +    };
    +
    +    ///  Ethernet
    +    pub const EMAC = extern struct {
    +        ///  MAC configuration register 1.
    +        MAC1: mmio.Mmio(packed struct(u32) {
    +            ///  RECEIVE ENABLE. Set this to allow receive frames to be received. Internally the MAC synchronizes this control bit to the incoming receive stream.
    +            RXENABLE: u1,
    +            ///  PASS ALL RECEIVE FRAMES. When enabled (set to 1), the MAC will pass all frames regardless of type (normal vs. Control). When disabled, the MAC does not pass valid Control frames.
    +            PARF: u1,
    +            ///  RX FLOW CONTROL. When enabled (set to 1), the MAC acts upon received PAUSE Flow Control frames. When disabled, received PAUSE Flow Control frames are ignored.
    +            RXFLOWCTRL: u1,
    +            ///  TX FLOW CONTROL. When enabled (set to 1), PAUSE Flow Control frames are allowed to be transmitted. When disabled, Flow Control frames are blocked.
    +            TXFLOWCTRL: u1,
    +            ///  Setting this bit will cause the MAC Transmit interface to be looped back to the MAC Receive interface. Clearing this bit results in normal operation.
    +            LOOPBACK: u1,
    +            ///  Unused
    +            RESERVED: u3,
    +            ///  Setting this bit will put the Transmit Function logic in reset.
    +            RESETTX: u1,
    +            ///  Setting this bit resets the MAC Control Sublayer / Transmit logic. The MCS logic implements flow control.
    +            RESETMCSTX: u1,
    +            ///  Setting this bit will put the Ethernet receive logic in reset.
    +            RESETRX: u1,
    +            ///  Setting this bit resets the MAC Control Sublayer / Receive logic. The MCS logic implements flow control.
    +            RESETMCSRX: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u2,
    +            ///  SIMULATION RESET. Setting this bit will cause a reset to the random number generator within the Transmit Function.
    +            SIMRESET: u1,
    +            ///  SOFT RESET. Setting this bit will put all modules within the MAC in reset except the Host Interface.
    +            SOFTRESET: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u16,
    +        }),
    +        ///  MAC configuration register 2.
    +        MAC2: mmio.Mmio(packed struct(u32) {
    +            ///  When enabled (set to 1), the MAC operates in Full-Duplex mode. When disabled, the MAC operates in Half-Duplex mode.
    +            FULLDUPLEX: u1,
    +            ///  FRAMELENGTH CHECKING. When enabled (set to 1), both transmit and receive frame lengths are compared to the Length/Type field. If the Length/Type field represents a length then the check is performed. Mismatches are reported in the StatusInfo word for each received frame.
    +            FLC: u1,
    +            ///  HUGE FRAME ENABLEWhen enabled (set to 1), frames of any length are transmitted and received.
    +            HFEN: u1,
    +            ///  DELAYED CRC. This bit determines the number of bytes, if any, of proprietary header information that exist on the front of IEEE 802.3 frames. When 1, four bytes of header (ignored by the CRC function) are added. When 0, there is no proprietary header.
    +            DELAYEDCRC: u1,
    +            ///  CRC ENABLESet this bit to append a CRC to every frame whether padding was required or not. Must be set if PAD/CRC ENABLE is set. Clear this bit if frames presented to the MAC contain a CRC.
    +            CRCEN: u1,
    +            ///  PAD CRC ENABLE. Set this bit to have the MAC pad all short frames. Clear this bit if frames presented to the MAC have a valid length. This bit is used in conjunction with AUTO PAD ENABLE and VLAN PAD ENABLE. See Table 153 - Pad Operation for details on the pad function.
    +            PADCRCEN: u1,
    +            ///  VLAN PAD ENABLE. Set this bit to cause the MAC to pad all short frames to 64 bytes and append a valid CRC. Consult Table 153 - Pad Operation for more information on the various padding features. Note: This bit is ignored if PAD / CRC ENABLE is cleared.
    +            VLANPADEN: u1,
    +            ///  AUTODETECTPAD ENABLE. Set this bit to cause the MAC to automatically detect the type of frame, either tagged or un-tagged, by comparing the two octets following the source address with 0x8100 (VLAN Protocol ID) and pad accordingly. Table 153 - Pad Operation provides a description of the pad function based on the configuration of this register. Note: This bit is ignored if PAD / CRC ENABLE is cleared.
    +            AUTODETPADEN: u1,
    +            ///  PURE PREAMBLE ENFORCEMEN. When enabled (set to 1), the MAC will verify the content of the preamble to ensure it contains 0x55 and is error-free. A packet with an incorrect preamble is discarded. When disabled, no preamble checking is performed.
    +            PPENF: u1,
    +            ///  LONG PREAMBLE ENFORCEMENT. When enabled (set to 1), the MAC only allows receive packets which contain preamble fields less than 12 bytes in length. When disabled, the MAC allows any length preamble as per the Standard.
    +            LPENF: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u2,
    +            ///  When enabled (set to 1), the MAC will immediately retransmit following a collision rather than using the Binary Exponential Backoff algorithm as specified in the Standard.
    +            NOBACKOFF: u1,
    +            ///  BACK PRESSURE / NO BACKOFF. When enabled (set to 1), after the MAC incidentally causes a collision during back pressure, it will immediately retransmit without backoff, reducing the chance of further collisions and ensuring transmit packets get sent.
    +            BP_NOBACKOFF: u1,
    +            ///  When enabled (set to 1) the MAC will defer to carrier indefinitely as per the Standard. When disabled, the MAC will abort when the excessive deferral limit is reached.
    +            EXCESSDEFER: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u17,
    +        }),
    +        ///  Back-to-Back Inter-Packet-Gap register.
    +        IPGT: mmio.Mmio(packed struct(u32) {
    +            ///  BACK-TO-BACK INTER-PACKET-GAP.This is a programmable field representing the nibble time offset of the minimum possible period between the end of any transmitted packet to the beginning of the next. In Full-Duplex mode, the register value should be the desired period in nibble times minus 3. In Half-Duplex mode, the register value should be the desired period in nibble times minus 6. In Full-Duplex the recommended setting is 0x15 (21d), which represents the minimum IPG of 960 ns (in 100 Mbps mode) or 9.6 us (in 10 Mbps mode). In Half-Duplex the recommended setting is 0x12 (18d), which also represents the minimum IPG of 960 ns (in 100 Mbps mode) or 9.6 us (in 10 Mbps mode).
    +            BTOBINTEGAP: u7,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u25,
    +        }),
    +        ///  Non Back-to-Back Inter-Packet-Gap register.
    +        IPGR: mmio.Mmio(packed struct(u32) {
    +            ///  NON-BACK-TO-BACK INTER-PACKET-GAP PART2. This is a programmable field representing the Non-Back-to-Back Inter-Packet-Gap. The recommended value is 0x12 (18d), which represents the minimum IPG of 960 ns (in 100 Mbps mode) or 9.6 us (in 10 Mbps mode).
    +            NBTOBINTEGAP2: u7,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u1,
    +            ///  NON-BACK-TO-BACK INTER-PACKET-GAP PART1. This is a programmable field representing the optional carrierSense window referenced in IEEE 802.3/4.2.3.2.1 'Carrier Deference'. If carrier is detected during the timing of IPGR1, the MAC defers to carrier. If, however, carrier becomes active after IPGR1, the MAC continues timing IPGR2 and transmits, knowingly causing a collision, thus ensuring fair access to medium. Its range of values is 0x0 to IPGR2. The recommended value is 0xC (12d)
    +            NBTOBINTEGAP1: u7,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u17,
    +        }),
    +        ///  Collision window / Retry register.
    +        CLRT: mmio.Mmio(packed struct(u32) {
    +            ///  RETRANSMISSION MAXIMUM.This is a programmable field specifying the number of retransmission attempts following a collision before aborting the packet due to excessive collisions. The Standard specifies the attemptLimit to be 0xF (15d). See IEEE 802.3/4.2.3.2.5.
    +            RETRANSMAX: u4,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u4,
    +            ///  COLLISION WINDOW. This is a programmable field representing the slot time or collision window during which collisions occur in properly configured networks. The default value of 0x37 (55d) represents a 56 byte window following the preamble and SFD.
    +            COLLWIN: u6,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u18,
    +        }),
    +        ///  Maximum Frame register.
    +        MAXF: mmio.Mmio(packed struct(u32) {
    +            ///  MAXIMUM FRAME LENGTH. This field resets to the value 0x0600, which represents a maximum receive frame of 1536 octets. An untagged maximum size Ethernet frame is 1518 octets. A tagged frame adds four octets for a total of 1522 octets. If a shorter maximum length restriction is desired, program this 16-bit field.
    +            MAXFLEN: u16,
    +            ///  Unused
    +            RESERVED: u16,
    +        }),
    +        ///  PHY Support register.
    +        SUPP: mmio.Mmio(packed struct(u32) {
    +            ///  Unused
    +            RESERVED: u8,
    +            ///  This bit configures the Reduced MII logic for the current operating speed. When set, 100 Mbps mode is selected. When cleared, 10 Mbps mode is selected.
    +            SPEED: u1,
    +            ///  Unused
    +            RESERVED: u23,
    +        }),
    +        ///  Test register.
    +        TEST: mmio.Mmio(packed struct(u32) {
    +            ///  SHORTCUT PAUSE QUANTA. This bit reduces the effective PAUSE quanta from 64 byte-times to 1 byte-time.
    +            SCPQ: u1,
    +            ///  This bit causes the MAC Control sublayer to inhibit transmissions, just as if a PAUSE Receive Control frame with a nonzero pause time parameter was received.
    +            TESTPAUSE: u1,
    +            ///  TEST BACKPRESSURE. Setting this bit will cause the MAC to assert backpressure on the link. Backpressure causes preamble to be transmitted, raising carrier sense. A transmit packet from the system will be sent during backpressure.
    +            TESTBP: u1,
    +            ///  Unused
    +            RESERVED: u29,
    +        }),
    +        ///  MII Mgmt Configuration register.
    +        MCFG: mmio.Mmio(packed struct(u32) {
    +            ///  SCAN INCREMENT. Set this bit to cause the MII Management hardware to perform read cycles across a range of PHYs. When set, the MII Management hardware will perform read cycles from address 1 through the value set in PHY ADDRESS[4:0]. Clear this bit to allow continuous reads of the same PHY.
    +            SCANINC: u1,
    +            ///  SUPPRESS PREAMBLE. Set this bit to cause the MII Management hardware to perform read/write cycles without the 32-bit preamble field. Clear this bit to cause normal cycles to be performed. Some PHYs support suppressed preamble.
    +            SUPPPREAMBLE: u1,
    +            ///  CLOCK SELECT. This field is used by the clock divide logic in creating the MII Management Clock (MDC) which IEEE 802.3u defines to be no faster than 2.5 MHz. Some PHYs support clock rates up to 12.5 MHz, however. The AHB bus clock (HCLK) is divided by the specified amount. Refer to Table 160 below for the definition of values for this field.
    +            CLOCKSEL: u4,
    +            ///  Unused
    +            RESERVED: u9,
    +            ///  RESET MII MGMT. This bit resets the MII Management hardware.
    +            RESETMIIMGMT: u1,
    +            ///  Unused
    +            RESERVED: u16,
    +        }),
    +        ///  MII Mgmt Command register.
    +        MCMD: mmio.Mmio(packed struct(u32) {
    +            ///  This bit causes the MII Management hardware to perform a single Read cycle. The Read data is returned in Register MRDD (MII Mgmt Read Data).
    +            READ: u1,
    +            ///  This bit causes the MII Management hardware to perform Read cycles continuously. This is useful for monitoring Link Fail for example.
    +            SCAN: u1,
    +            ///  Unused
    +            RESERVED: u30,
    +        }),
    +        ///  MII Mgmt Address register.
    +        MADR: mmio.Mmio(packed struct(u32) {
    +            ///  REGISTER ADDRESS. This field represents the 5-bit Register Address field of Mgmt cycles. Up to 32 registers can be accessed.
    +            REGADDR: u5,
    +            ///  Unused
    +            RESERVED: u3,
    +            ///  PHY ADDRESS. This field represents the 5-bit PHY Address field of Mgmt cycles. Up to 31 PHYs can be addressed (0 is reserved).
    +            PHYADDR: u5,
    +            ///  Unused
    +            RESERVED: u19,
    +        }),
    +        ///  MII Mgmt Write Data register.
    +        MWTD: mmio.Mmio(packed struct(u32) {
    +            ///  WRITE DATA. When written, an MII Mgmt write cycle is performed using the 16-bit data and the pre-configured PHY and Register addresses from the MII Mgmt Address register (MADR).
    +            WRITEDATA: u16,
    +            ///  Unused
    +            RESERVED: u16,
    +        }),
    +        ///  MII Mgmt Read Data register.
    +        MRDD: mmio.Mmio(packed struct(u32) {
    +            ///  READ DATA. Following an MII Mgmt Read Cycle, the 16-bit data can be read from this location.
    +            READDATA: u16,
    +            ///  Unused
    +            RESERVED: u16,
    +        }),
    +        ///  MII Mgmt Indicators register.
    +        MIND: mmio.Mmio(packed struct(u32) {
    +            ///  When 1 is returned - indicates MII Mgmt is currently performing an MII Mgmt Read or Write cycle.
    +            BUSY: u1,
    +            ///  When 1 is returned - indicates a scan operation (continuous MII Mgmt Read cycles) is in progress.
    +            SCANNING: u1,
    +            ///  When 1 is returned - indicates MII Mgmt Read cycle has not completed and the Read Data is not yet valid.
    +            NOTVALID: u1,
    +            ///  When 1 is returned - indicates that an MII Mgmt link fail has occurred.
    +            MIILINKFAIL: u1,
    +            ///  Unused
    +            RESERVED: u28,
    +        }),
    +        reserved64: [8]u8,
    +        ///  Station Address 0 register.
    +        SA0: mmio.Mmio(packed struct(u32) {
    +            ///  STATION ADDRESS, 2nd octet. This field holds the second octet of the station address.
    +            SADDR2: u8,
    +            ///  STATION ADDRESS, 1st octet. This field holds the first octet of the station address.
    +            SADDR1: u8,
    +            ///  Unused
    +            RESERVED: u16,
    +        }),
    +        ///  Station Address 1 register.
    +        SA1: mmio.Mmio(packed struct(u32) {
    +            ///  STATION ADDRESS, 4th octet. This field holds the fourth octet of the station address.
    +            SADDR4: u8,
    +            ///  STATION ADDRESS, 3rd octet. This field holds the third octet of the station address.
    +            SADDR3: u8,
    +            ///  Unused
    +            RESERVED: u16,
    +        }),
    +        ///  Station Address 2 register.
    +        SA2: mmio.Mmio(packed struct(u32) {
    +            ///  STATION ADDRESS, 6th octet. This field holds the sixth octet of the station address.
    +            SADDR6: u8,
    +            ///  STATION ADDRESS, 5th octet. This field holds the fifth octet of the station address.
    +            SADDR5: u8,
    +            ///  Unused
    +            RESERVED: u16,
    +        }),
    +        reserved256: [180]u8,
    +        ///  Command register.
    +        COMMAND: mmio.Mmio(packed struct(u32) {
    +            ///  Enable receive.
    +            RXENABLE: u1,
    +            ///  Enable transmit.
    +            TXENABLE: u1,
    +            ///  Unused
    +            RESERVED: u1,
    +            ///  When a 1 is written, all datapaths and the host registers are reset. The MAC needs to be reset separately.
    +            REGRESET: u1,
    +            ///  When a 1 is written, the transmit datapath is reset.
    +            TXRESET: u1,
    +            ///  When a 1 is written, the receive datapath is reset.
    +            RXRESET: u1,
    +            ///  When set to 1 , passes runt frames s1maller than 64 bytes to memory unless they have a CRC error. If 0 runt frames are filtered out.
    +            PASSRUNTFRAME: u1,
    +            ///  When set to 1 , disables receive filtering i.e. all frames received are written to memory.
    +            PASSRXFILTER: u1,
    +            ///  Enable IEEE 802.3 / clause 31 flow control sending pause frames in full duplex and continuous preamble in half duplex.
    +            TXFLOWCONTROL: u1,
    +            ///  When set to 1 , RMII mode is selected; if 0, MII mode is selected.
    +            RMII: u1,
    +            ///  When set to 1 , indicates full duplex operation.
    +            FULLDUPLEX: u1,
    +            ///  Unused
    +            RESERVED: u21,
    +        }),
    +        ///  Status register.
    +        STATUS: mmio.Mmio(packed struct(u32) {
    +            ///  If 1, the receive channel is active. If 0, the receive channel is inactive.
    +            RXSTATUS: u1,
    +            ///  If 1, the transmit channel is active. If 0, the transmit channel is inactive.
    +            TXSTATUS: u1,
    +            ///  Unused
    +            RESERVED: u30,
    +        }),
    +        ///  Receive descriptor base address register.
    +        RXDESCRIPTOR: mmio.Mmio(packed struct(u32) {
    +            ///  Fixed to 00
    +            RESERVED: u2,
    +            ///  MSBs of receive descriptor base address.
    +            RXDESCRIPTOR: u30,
    +        }),
    +        ///  Receive status base address register.
    +        RXSTATUS: mmio.Mmio(packed struct(u32) {
    +            ///  Fixed to 000
    +            RESERVED: u3,
    +            ///  MSBs of receive status base address.
    +            RXSTATUS: u29,
    +        }),
    +        ///  Receive number of descriptors register.
    +        RXDESCRIPTORNUMBER: mmio.Mmio(packed struct(u32) {
    +            ///  RxDescriptorNumber. Number of descriptors in the descriptor array for which RxDescriptor is the base address. The number of descriptors is minus one encoded.
    +            RXDESCRIPTORN: u16,
    +            ///  Unused
    +            RESERVED: u16,
    +        }),
    +        ///  Receive produce index register.
    +        RXPRODUCEINDEX: mmio.Mmio(packed struct(u32) {
    +            ///  Index of the descriptor that is going to be filled next by the receive datapath.
    +            RXPRODUCEIX: u16,
    +            ///  Unused
    +            RESERVED: u16,
    +        }),
    +        ///  Receive consume index register.
    +        RXCONSUMEINDEX: mmio.Mmio(packed struct(u32) {
    +            ///  Index of the descriptor that is going to be processed next by the receive
    +            RXCONSUMEIX: u16,
    +            ///  Unused
    +            RESERVED: u16,
    +        }),
    +        ///  Transmit descriptor base address register.
    +        TXDESCRIPTOR: mmio.Mmio(packed struct(u32) {
    +            ///  Fixed to 00
    +            RESERVED: u2,
    +            ///  TxDescriptor. MSBs of transmit descriptor base address.
    +            TXD: u30,
    +        }),
    +        ///  Transmit status base address register.
    +        TXSTATUS: mmio.Mmio(packed struct(u32) {
    +            ///  Fixed to 00
    +            RESERVED: u2,
    +            ///  TxStatus. MSBs of transmit status base address.
    +            TXSTAT: u30,
    +        }),
    +        ///  Transmit number of descriptors register.
    +        TXDESCRIPTORNUMBER: mmio.Mmio(packed struct(u32) {
    +            ///  TxDescriptorNumber. Number of descriptors in the descriptor array for which TxDescriptor is the base address. The register is minus one encoded.
    +            TXDN: u16,
    +            ///  Unused
    +            RESERVED: u16,
    +        }),
    +        ///  Transmit produce index register.
    +        TXPRODUCEINDEX: mmio.Mmio(packed struct(u32) {
    +            ///  TxProduceIndex. Index of the descriptor that is going to be filled next by the transmit software driver.
    +            TXPI: u16,
    +            ///  Unused
    +            RESERVED: u16,
    +        }),
    +        ///  Transmit consume index register.
    +        TXCONSUMEINDEX: mmio.Mmio(packed struct(u32) {
    +            ///  TxConsumeIndex. Index of the descriptor that is going to be transmitted next by the transmit datapath.
    +            TXCI: u16,
    +            ///  Unused
    +            RESERVED: u16,
    +        }),
    +        reserved344: [40]u8,
    +        ///  Transmit status vector 0 register.
    +        TSV0: mmio.Mmio(packed struct(u32) {
    +            ///  CRC error. The attached CRC in the packet did not match the internally generated CRC.
    +            CRCERR: u1,
    +            ///  Length check error. Indicates the frame length field does not match the actual number of data items and is not a type field.
    +            LCE: u1,
    +            ///  Length out of range. Indicates that frame type/length field was larger than 1500 bytes. The EMAC doesn't distinguish the frame type and frame length, so, e.g. when the IP(0x8000) or ARP(0x0806) packets are received, it compares the frame type with the max length and gives the "Length out of range" error. In fact, this bit is not an error indication, but simply a statement by the chip regarding the status of the received frame.
    +            LOR: u1,
    +            ///  Transmission of packet was completed.
    +            DONE: u1,
    +            ///  Packet's destination was a multicast address.
    +            MULTICAST: u1,
    +            ///  Packet's destination was a broadcast address.
    +            BROADCAST: u1,
    +            ///  Packet was deferred for at least one attempt, but less than an excessive defer.
    +            PACKETDEFER: u1,
    +            ///  Excessive Defer. Packet was deferred in excess of 6071 nibble times in 100 Mbps or 24287 bit times in 10 Mbps mode.
    +            EXDF: u1,
    +            ///  Excessive Collision. Packet was aborted due to exceeding of maximum allowed number of collisions.
    +            EXCOL: u1,
    +            ///  Late Collision. Collision occurred beyond collision window, 512 bit times.
    +            LCOL: u1,
    +            ///  Byte count in frame was greater than can be represented in the transmit byte count field in TSV1.
    +            GIANT: u1,
    +            ///  Host side caused buffer underrun.
    +            UNDERRUN: u1,
    +            ///  The total number of bytes transferred including collided attempts.
    +            TOTALBYTES: u16,
    +            ///  The frame was a control frame.
    +            CONTROLFRAME: u1,
    +            ///  The frame was a control frame with a valid PAUSE opcode.
    +            PAUSE: u1,
    +            ///  Carrier-sense method backpressure was previously applied.
    +            BACKPRESSURE: u1,
    +            ///  Frame's length/type field contained 0x8100 which is the VLAN protocol identifier.
    +            VLAN: u1,
    +        }),
    +        ///  Transmit status vector 1 register.
    +        TSV1: mmio.Mmio(packed struct(u32) {
    +            ///  Transmit byte count. The total number of bytes in the frame, not counting the collided bytes.
    +            TBC: u16,
    +            ///  Transmit collision count. Number of collisions the current packet incurred during transmission attempts. The maximum number of collisions (16) cannot be represented.
    +            TCC: u4,
    +            ///  Unused
    +            RESERVED: u12,
    +        }),
    +        ///  Receive status vector register.
    +        RSV: mmio.Mmio(packed struct(u32) {
    +            ///  Received byte count. Indicates length of received frame.
    +            RBC: u16,
    +            ///  Packet previously ignored. Indicates that a packet was dropped.
    +            PPI: u1,
    +            ///  RXDV event previously seen. Indicates that the last receive event seen was not long enough to be a valid packet.
    +            RXDVSEEN: u1,
    +            ///  Carrier event previously seen. Indicates that at some time since the last receive statistics, a carrier event was detected.
    +            CESEEN: u1,
    +            ///  Receive code violation. Indicates that received PHY data does not represent a valid receive code.
    +            RCV: u1,
    +            ///  CRC error. The attached CRC in the packet did not match the internally generated CRC.
    +            CRCERR: u1,
    +            ///  Length check error. Indicates the frame length field does not match the actual number of data items and is not a type field.
    +            LCERR: u1,
    +            ///  Length out of range. Indicates that frame type/length field was larger than 1518 bytes. The EMAC doesn't distinguish the frame type and frame length, so, e.g. when the IP(0x8000) or ARP(0x0806) packets are received, it compares the frame type with the max length and gives the "Length out of range" error. In fact, this bit is not an error indication, but simply a statement by the chip regarding the status of the received frame.
    +            LOR: u1,
    +            ///  Receive OK. The packet had valid CRC and no symbol errors.
    +            ROK: u1,
    +            ///  The packet destination was a multicast address.
    +            MULTICAST: u1,
    +            ///  The packet destination was a broadcast address.
    +            BROADCAST: u1,
    +            ///  Indicates that after the end of packet another 1-7 bits were received. A single nibble, called dribble nibble, is formed but not sent out.
    +            DRIBBLENIBBLE: u1,
    +            ///  The frame was a control frame.
    +            CONTROLFRAME: u1,
    +            ///  The frame was a control frame with a valid PAUSE opcode.
    +            PAUSE: u1,
    +            ///  Unsupported Opcode. The current frame was recognized as a Control Frame but contains an unknown opcode.
    +            UO: u1,
    +            ///  Frame's length/type field contained 0x8100 which is the VLAN protocol identifier.
    +            VLAN: u1,
    +            ///  Unused
    +            RESERVED: u1,
    +        }),
    +        reserved368: [12]u8,
    +        ///  Flow control counter register.
    +        FLOWCONTROLCOUNTER: mmio.Mmio(packed struct(u32) {
    +            ///  MirrorCounter. In full duplex mode the MirrorCounter specifies the number of cycles before re-issuing the Pause control frame.
    +            MC: u16,
    +            ///  PauseTimer. In full-duplex mode the PauseTimer specifies the value that is inserted into the pause timer field of a pause flow control frame. In half duplex mode the PauseTimer specifies the number of backpressure cycles.
    +            PT: u16,
    +        }),
    +        ///  Flow control status register.
    +        FLOWCONTROLSTATUS: mmio.Mmio(packed struct(u32) {
    +            ///  MirrorCounterCurrent. In full duplex mode this register represents the current value of the datapath's mirror counter which counts up to the value specified by the MirrorCounter field in the FlowControlCounter register. In half duplex mode the register counts until it reaches the value of the PauseTimer bits in the FlowControlCounter register.
    +            MCC: u16,
    +            ///  Unused
    +            RESERVED: u16,
    +        }),
    +        reserved512: [136]u8,
    +        ///  Receive filter control register.
    +        RXFILTERCTRL: mmio.Mmio(packed struct(u32) {
    +            ///  AcceptUnicastEn. When set to 1, all unicast frames are accepted.
    +            AUE: u1,
    +            ///  AcceptBroadcastEn. When set to 1, all broadcast frames are accepted.
    +            ABE: u1,
    +            ///  AcceptMulticastEn. When set to 1, all multicast frames are accepted.
    +            AME: u1,
    +            ///  AcceptUnicastHashEn. When set to 1, unicast frames that pass the imperfect hash filter are accepted.
    +            AUHE: u1,
    +            ///  AcceptMulticastHashEn. When set to 1, multicast frames that pass the imperfect hash filter are accepted.
    +            AMHE: u1,
    +            ///  AcceptPerfectEn. When set to 1, the frames with a destination address identical to the station address are accepted.
    +            APE: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u6,
    +            ///  MagicPacketEnWoL. When set to 1, the result of the magic packet filter will generate a WoL interrupt when there is a match.
    +            MPEW: u1,
    +            ///  RxFilterEnWoL. When set to 1, the result of the perfect address matching filter and the imperfect hash filter will generate a WoL interrupt when there is a match.
    +            RFEW: u1,
    +            ///  Unused
    +            RESERVED: u18,
    +        }),
    +        ///  Receive filter WoL status register.
    +        RXFILTERWOLSTATUS: mmio.Mmio(packed struct(u32) {
    +            ///  AcceptUnicastWoL. When the value is 1, a unicast frames caused WoL.
    +            AUW: u1,
    +            ///  AcceptBroadcastWoL. When the value is 1, a broadcast frame caused WoL.
    +            ABW: u1,
    +            ///  AcceptMulticastWoL. When the value is 1, a multicast frame caused WoL.
    +            AMW: u1,
    +            ///  AcceptUnicastHashWoL. When the value is 1, a unicast frame that passes the imperfect hash filter caused WoL.
    +            AUHW: u1,
    +            ///  AcceptMulticastHashWoL. When the value is 1, a multicast frame that passes the imperfect hash filter caused WoL.
    +            AMHW: u1,
    +            ///  AcceptPerfectWoL. When the value is 1, the perfect address matching filter caused WoL.
    +            APW: u1,
    +            ///  Unused
    +            RESERVED: u1,
    +            ///  RxFilterWoL. When the value is 1, the receive filter caused WoL.
    +            RFW: u1,
    +            ///  MagicPacketWoL. When the value is 1, the magic packet filter caused WoL.
    +            MPW: u1,
    +            ///  Unused
    +            RESERVED: u23,
    +        }),
    +        ///  Receive filter WoL clear register.
    +        RXFILTERWOLCLEAR: mmio.Mmio(packed struct(u32) {
    +            ///  AcceptUnicastWoLClr. When a 1 is written, the corresponding status bit in the RxFilterWoLStatus register is cleared.
    +            AUWCLR: u1,
    +            ///  AcceptBroadcastWoLClr. When a 1 is written, the corresponding status bit in the RxFilterWoLStatus register is cleared.
    +            ABWCLR: u1,
    +            ///  AcceptMulticastWoLClr. When a 1 is written, the corresponding status bit in the RxFilterWoLStatus register is cleared.
    +            AMWCLR: u1,
    +            ///  AcceptUnicastHashWoLClr. When a 1 is written, the corresponding status bit in the RxFilterWoLStatus register is cleared.
    +            AUHWCLR: u1,
    +            ///  AcceptMulticastHashWoLClr. When a 1 is written, the corresponding status bit in the RxFilterWoLStatus register is cleared.
    +            AMHWCLR: u1,
    +            ///  AcceptPerfectWoLClr. When a 1 is written, the corresponding status bit in the RxFilterWoLStatus register is cleared.
    +            APWCLR: u1,
    +            ///  Unused
    +            RESERVED: u1,
    +            ///  RxFilterWoLClr. When a 1 is written, the corresponding status bit in the RxFilterWoLStatus register is cleared.
    +            RFWCLR: u1,
    +            ///  MagicPacketWoLClr. When a 1 is written, the corresponding status bit in the RxFilterWoLStatus register is cleared.
    +            MPWCLR: u1,
    +            ///  Unused
    +            RESERVED: u23,
    +        }),
    +        reserved528: [4]u8,
    +        ///  Hash filter table LSBs register.
    +        HASHFILTERL: mmio.Mmio(packed struct(u32) {
    +            ///  HashFilterL. Bits 31:0 of the imperfect filter hash table for receive filtering.
    +            HFL: u32,
    +        }),
    +        ///  Hash filter table MSBs register.
    +        HASHFILTERH: mmio.Mmio(packed struct(u32) {
    +            ///  Bits 63:32 of the imperfect filter hash table for receive filtering.
    +            HFH: u32,
    +        }),
    +        reserved4064: [3528]u8,
    +        ///  Interrupt status register.
    +        INTSTATUS: mmio.Mmio(packed struct(u32) {
    +            ///  Interrupt set on a fatal overrun error in the receive queue. The fatal interrupt should be resolved by a Rx soft-reset. The bit is not set when there is a nonfatal overrun error.
    +            RXOVERRUNINT: u1,
    +            ///  Interrupt trigger on receive errors: AlignmentError, RangeError, LengthError, SymbolError, CRCError or NoDescriptor or Overrun.
    +            RXERRORINT: u1,
    +            ///  Interrupt triggered when all receive descriptors have been processed i.e. on the transition to the situation where ProduceIndex == ConsumeIndex.
    +            RXFINISHEDINT: u1,
    +            ///  Interrupt triggered when a receive descriptor has been processed while the Interrupt bit in the Control field of the descriptor was set.
    +            RXDONEINT: u1,
    +            ///  Interrupt set on a fatal underrun error in the transmit queue. The fatal interrupt should be resolved by a Tx soft-reset. The bit is not set when there is a nonfatal underrun error.
    +            TXUNDERRUNINT: u1,
    +            ///  Interrupt trigger on transmit errors: LateCollision, ExcessiveCollision and ExcessiveDefer, NoDescriptor or Underrun.
    +            TXERRORINT: u1,
    +            ///  Interrupt triggered when all transmit descriptors have been processed i.e. on the transition to the situation where ProduceIndex == ConsumeIndex.
    +            TXFINISHEDINT: u1,
    +            ///  Interrupt triggered when a descriptor has been transmitted while the Interrupt bit in the Control field of the descriptor was set.
    +            TXDONEINT: u1,
    +            ///  Unused
    +            RESERVED: u4,
    +            ///  Interrupt triggered by software writing a 1 to the SoftIntSet bit in the IntSet register.
    +            SOFTINT: u1,
    +            ///  Interrupt triggered by a Wake-up event detected by the receive filter.
    +            WAKEUPINT: u1,
    +            ///  Unused
    +            RESERVED: u18,
    +        }),
    +        ///  Interrupt enable register.
    +        INTENABLE: mmio.Mmio(packed struct(u32) {
    +            ///  Enable for interrupt trigger on receive buffer overrun or descriptor underrun situations.
    +            RXOVERRUNINTEN: u1,
    +            ///  Enable for interrupt trigger on receive errors.
    +            RXERRORINTEN: u1,
    +            ///  Enable for interrupt triggered when all receive descriptors have been processed i.e. on the transition to the situation where ProduceIndex == ConsumeIndex.
    +            RXFINISHEDINTEN: u1,
    +            ///  Enable for interrupt triggered when a receive descriptor has been processed while the Interrupt bit in the Control field of the descriptor was set.
    +            RXDONEINTEN: u1,
    +            ///  Enable for interrupt trigger on transmit buffer or descriptor underrun situations.
    +            TXUNDERRUNINTEN: u1,
    +            ///  Enable for interrupt trigger on transmit errors.
    +            TXERRORINTEN: u1,
    +            ///  Enable for interrupt triggered when all transmit descriptors have been processed i.e. on the transition to the situation where ProduceIndex == ConsumeIndex.
    +            TXFINISHEDINTEN: u1,
    +            ///  Enable for interrupt triggered when a descriptor has been transmitted while the Interrupt bit in the Control field of the descriptor was set.
    +            TXDONEINTEN: u1,
    +            ///  Unused
    +            RESERVED: u4,
    +            ///  Enable for interrupt triggered by the SoftInt bit in the IntStatus register, caused by software writing a 1 to the SoftIntSet bit in the IntSet register.
    +            SOFTINTEN: u1,
    +            ///  Enable for interrupt triggered by a Wake-up event detected by the receive filter.
    +            WAKEUPINTEN: u1,
    +            ///  Unused
    +            RESERVED: u18,
    +        }),
    +        ///  Interrupt clear register.
    +        INTCLEAR: mmio.Mmio(packed struct(u32) {
    +            ///  Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.
    +            RXOVERRUNINTCLR: u1,
    +            ///  Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.
    +            RXERRORINTCLR: u1,
    +            ///  Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.
    +            RXFINISHEDINTCLR: u1,
    +            ///  Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.
    +            RXDONEINTCLR: u1,
    +            ///  Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.
    +            TXUNDERRUNINTCLR: u1,
    +            ///  Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.
    +            TXERRORINTCLR: u1,
    +            ///  Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.
    +            TXFINISHEDINTCLR: u1,
    +            ///  Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.
    +            TXDONEINTCLR: u1,
    +            ///  Unused
    +            RESERVED: u4,
    +            ///  Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.
    +            SOFTINTCLR: u1,
    +            ///  Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.
    +            WAKEUPINTCLR: u1,
    +            ///  Unused
    +            RESERVED: u18,
    +        }),
    +        ///  Interrupt set register.
    +        INTSET: mmio.Mmio(packed struct(u32) {
    +            ///  Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.
    +            RXOVERRUNINTSET: u1,
    +            ///  Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.
    +            RXERRORINTSET: u1,
    +            ///  Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.
    +            RXFINISHEDINTSET: u1,
    +            ///  Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.
    +            RXDONEINTSET: u1,
    +            ///  Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.
    +            TXUNDERRUNINTSET: u1,
    +            ///  Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.
    +            TXERRORINTSET: u1,
    +            ///  Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.
    +            TXFINISHEDINTSET: u1,
    +            ///  Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.
    +            TXDONEINTSET: u1,
    +            ///  Unused
    +            RESERVED: u4,
    +            ///  Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.
    +            SOFTINTSET: u1,
    +            ///  Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.
    +            WAKEUPINTSET: u1,
    +            ///  Unused
    +            RESERVED: u18,
    +        }),
    +        reserved4084: [4]u8,
    +        ///  Power-down register.
    +        POWERDOWN: mmio.Mmio(packed struct(u32) {
    +            ///  Unused
    +            RESERVED: u31,
    +            ///  PowerDownMACAHB. If true, all AHB accesses will return a read/write error, except accesses to the Power-Down register.
    +            PD: u1,
    +        }),
    +    };
    +
    +    ///  Digital-to-Analog Converter (DAC)
    +    pub const DAC = extern struct {
    +        ///  D/A Converter Register. This register contains the digital value to be converted to analog and a power control bit.
    +        CR: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u6,
    +            ///  After the selected settling time after this field is written with a new VALUE, the voltage on the DAC_OUT pin (with respect to VSSA) is VALUE x ((VREFP - V REFN)/1024) + VREFN.
    +            VALUE: u10,
    +            ///  Settling time The settling times noted in the description of the BIAS bit are valid for a capacitance load on the DAC_OUT pin not exceeding 100 pF. A load impedance value greater than that value will cause settling time longer than the specified time. One or more graphs of load impedance vs. settling time will be included in the final data sheet.
    +            BIAS: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  The settling time of the DAC is 1 us max, and the maximum current is 700 uA. This allows a maximum update rate of 1 MHz.
    +                    FAST = 0x0,
    +                    ///  The settling time of the DAC is 2.5 us and the maximum current is 350 uA. This allows a maximum update rate of 400 kHz.
    +                    SLOW = 0x1,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u15,
    +        }),
    +        ///  DAC Control register. This register controls DMA and timer operation.
    +        CTRL: mmio.Mmio(packed struct(u32) {
    +            ///  DMA interrupt request
    +            INT_DMA_REQ: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Clear on any write to the DACR register.
    +                    CLEAR_ON_ANY_WRITE_T = 0x0,
    +                    ///  Set by hardware when the timer times out.
    +                    SET_BY_HARDWARE_WHEN = 0x1,
    +                },
    +            },
    +            ///  Double buffering
    +            DBLBUF_ENA: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disable
    +                    DISABLE = 0x0,
    +                    ///  Enable. When this bit and the CNT_ENA bit are both set, the double-buffering feature in the DACR register will be enabled. Writes to the DACR register are written to a pre-buffer and then transferred to the DACR on the next time-out of the counter.
    +                    ENABLE_WHEN_THIS_BI = 0x1,
    +                },
    +            },
    +            ///  Time-out counter operation
    +            CNT_ENA: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disable
    +                    DISABLE = 0x0,
    +                    ///  Enable
    +                    ENABLE = 0x1,
    +                },
    +            },
    +            ///  DMA access
    +            DMA_ENA: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disable
    +                    DISABLE = 0x0,
    +                    ///  Enable. DMA Burst Request Input 7 is enabled for the DAC (see Table 672).
    +                    ENABLE_DMA_BURST_RE = 0x1,
    +                },
    +            },
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u28,
    +        }),
    +        ///  DAC Counter Value register. This register contains the reload value for the DAC DMA/Interrupt timer.
    +        CNTVAL: mmio.Mmio(packed struct(u32) {
    +            ///  16-bit reload value for the DAC interrupt/DMA timer.
    +            VALUE: u16,
    +            ///  Reserved
    +            RESERVED: u16,
    +        }),
    +    };
    +
    +    ///  System and clock control
    +    pub const SYSCON = extern struct {
    +        ///  Flash Accelerator Configuration Register. Controls flash access timing.
    +        FLASHCFG: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved, user software should not change these bits from the reset value.
    +            RESERVED: u12,
    +            ///  Flash access time. The value of this field plus 1 gives the number of CPU clocks used for a flash access. Warning: improper setting of this value may result in incorrect operation of the device. Other values are reserved.
    +            FLASHTIM: packed union {
    +                raw: u4,
    +                value: enum(u4) {
    +                    ///  Flash accesses use 1 CPU clock. Use for up to 20 MHz CPU clock.
    +                    @"1CLK" = 0x0,
    +                    ///  Flash accesses use 2 CPU clocks. Use for up to 40 MHz CPU clock.
    +                    @"2CLK" = 0x1,
    +                    ///  Flash accesses use 3 CPU clocks. Use for up to 60 MHz CPU clock.
    +                    @"3CLK" = 0x2,
    +                    ///  Flash accesses use 4 CPU clocks. Use for up to 80 MHz CPU clock.
    +                    @"4CLK" = 0x3,
    +                    ///  Flash accesses use 5 CPU clocks. Use for up to 100 MHz CPU clock. Use for up to 120 Mhz for LPC1759 and LPC1769 only.
    +                    @"5CLK" = 0x4,
    +                    ///  Flash accesses use 6 CPU clocks. This safe setting will work under any conditions.
    +                    @"6CLK" = 0x5,
    +                    _,
    +                },
    +            },
    +            ///  Reserved. The value read from a reserved bit is not defined.
    +            RESERVED: u16,
    +        }),
    +        reserved128: [124]u8,
    +        ///  PLL0 Control Register
    +        PLL0CON: mmio.Mmio(packed struct(u32) {
    +            ///  PLL0 Enable. When one, and after a valid PLL0 feed, this bit will activate PLL0 and allow it to lock to the requested frequency. See PLL0STAT register.
    +            PLLE0: u1,
    +            ///  PLL0 Connect. Setting PLLC0 to one after PLL0 has been enabled and locked, then followed by a valid PLL0 feed sequence causes PLL0 to become the clock source for the CPU, AHB peripherals, and used to derive the clocks for APB peripherals. The PLL0 output may potentially be used to clock the USB subsystem if the frequency is 48 MHz. See PLL0STAT register.
    +            PLLC0: u1,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u30,
    +        }),
    +        ///  PLL0 Configuration Register
    +        PLL0CFG: mmio.Mmio(packed struct(u32) {
    +            ///  PLL0 Multiplier value. Supplies the value M in PLL0 frequency calculations. The value stored here is M - 1. Note: Not all values of M are needed, and therefore some are not supported by hardware.
    +            MSEL0: u15,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u1,
    +            ///  PLL0 Pre-Divider value. Supplies the value N in PLL0 frequency calculations. The value stored here is N - 1. Supported values for N are 1 through 32.
    +            NSEL0: u8,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u8,
    +        }),
    +        ///  PLL0 Status Register
    +        PLL0STAT: mmio.Mmio(packed struct(u32) {
    +            ///  Read-back for the PLL0 Multiplier value. This is the value currently used by PLL0, and is one less than the actual multiplier.
    +            MSEL0: u15,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u1,
    +            ///  Read-back for the PLL0 Pre-Divider value. This is the value currently used by PLL0, and is one less than the actual divider.
    +            NSEL0: u8,
    +            ///  Read-back for the PLL0 Enable bit. This bit reflects the state of the PLEC0 bit in PLL0CON after a valid PLL0 feed. When one, PLL0 is currently enabled. When zero, PLL0 is turned off. This bit is automatically cleared when Power-down mode is entered.
    +            PLLE0_STAT: u1,
    +            ///  Read-back for the PLL0 Connect bit. This bit reflects the state of the PLLC0 bit in PLL0CON after a valid PLL0 feed. When PLLC0 and PLLE0 are both one, PLL0 is connected as the clock source for the CPU. When either PLLC0 or PLLE0 is zero, PLL0 is bypassed. This bit is automatically cleared when Power-down mode is entered.
    +            PLLC0_STAT: u1,
    +            ///  Reflects the PLL0 Lock status. When zero, PLL0 is not locked. When one, PLL0 is locked onto the requested frequency. See text for details.
    +            PLOCK0: u1,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u5,
    +        }),
    +        ///  PLL0 Feed Register
    +        PLL0FEED: mmio.Mmio(packed struct(u32) {
    +            ///  The PLL0 feed sequence must be written to this register in order for PLL0 configuration and control register changes to take effect.
    +            PLL0FEED: u8,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u24,
    +        }),
    +        reserved160: [16]u8,
    +        ///  PLL1 Control Register
    +        PLL1CON: mmio.Mmio(packed struct(u32) {
    +            ///  PLL1 Enable. When one, and after a valid PLL1 feed, this bit will activate PLL1 and allow it to lock to the requested frequency.
    +            PLLE1: u1,
    +            ///  PLL1 Connect. Setting PLLC to one after PLL1 has been enabled and locked, then followed by a valid PLL1 feed sequence causes PLL1 to become the clock source for the USB subsystem via the USB clock divider. See PLL1STAT register.
    +            PLLC1: u1,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u30,
    +        }),
    +        ///  PLL1 Configuration Register
    +        PLL1CFG: mmio.Mmio(packed struct(u32) {
    +            ///  PLL1 Multiplier value. Supplies the value M in the PLL1 frequency calculations.
    +            MSEL1: u5,
    +            ///  PLL1 Divider value. Supplies the value P in the PLL1 frequency calculations.
    +            PSEL1: u2,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u25,
    +        }),
    +        ///  PLL1 Status Register
    +        PLL1STAT: mmio.Mmio(packed struct(u32) {
    +            ///  Read-back for the PLL1 Multiplier value. This is the value currently used by PLL1.
    +            MSEL1: u5,
    +            ///  Read-back for the PLL1 Divider value. This is the value currently used by PLL1.
    +            PSEL1: u2,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u1,
    +            ///  Read-back for the PLL1 Enable bit. When one, PLL1 is currently activated. When zero, PLL1 is turned off. This bit is automatically cleared when Power-down mode is activated.
    +            PLLE1_STAT: u1,
    +            ///  Read-back for the PLL1 Connect bit. When PLLC and PLLE are both one, PLL1 is connected as the clock source for the microcontroller. When either PLLC or PLLE is zero, PLL1 is bypassed and the oscillator clock is used directly by the microcontroller. This bit is automatically cleared when Power-down mode is activated.
    +            PLLC1_STAT: u1,
    +            ///  Reflects the PLL1 Lock status. When zero, PLL1 is not locked. When one, PLL1 is locked onto the requested frequency.
    +            PLOCK1: u1,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u21,
    +        }),
    +        ///  PLL1 Feed Register
    +        PLL1FEED: mmio.Mmio(packed struct(u32) {
    +            ///  The PLL1 feed sequence must be written to this register in order for PLL1 configuration and control register changes to take effect.
    +            PLL1FEED: u8,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u24,
    +        }),
    +        reserved192: [16]u8,
    +        ///  Power Control Register
    +        PCON: mmio.Mmio(packed struct(u32) {
    +            ///  Power mode control bit 0. This bit controls entry to the Power-down mode.
    +            PM0: u1,
    +            ///  Power mode control bit 1. This bit controls entry to the Deep Power-down mode.
    +            PM1: u1,
    +            ///  Brown-Out Reduced Power Mode. When BODRPM is 1, the Brown-Out Detect circuitry will be turned off when chip Power-down mode or Deep Sleep mode is entered, resulting in a further reduction in power usage. However, the possibility of using Brown-Out Detect as a wake-up source from the reduced power mode will be lost. When 0, the Brown-Out Detect function remains active during Power-down and Deep Sleep modes. See the System Control Block chapter for details of Brown-Out detection.
    +            BODRPM: u1,
    +            ///  Brown-Out Global Disable. When BOGD is 1, the Brown-Out Detect circuitry is fully disabled at all times, and does not consume power. When 0, the Brown-Out Detect circuitry is enabled. See the System Control Block chapter for details of Brown-Out detection. Note: the Brown-Out Reset Disable (BORD, in this register) and the Brown-Out Interrupt (xx) must be disabled when software changes the value of this bit.
    +            BOGD: u1,
    +            ///  Brown-Out Reset Disable. When BORD is 1, the BOD will not reset the device when the VDD(REG)(3V3) voltage dips goes below the BOD reset trip level. The Brown-Out interrupt is not affected. When BORD is 0, the BOD reset is enabled.
    +            BORD: u1,
    +            reserved8: u3,
    +            ///  Sleep Mode entry flag. Set when the Sleep mode is successfully entered. Cleared by software writing a one to this bit.
    +            SMFLAG: u1,
    +            ///  Deep Sleep entry flag. Set when the Deep Sleep mode is successfully entered. Cleared by software writing a one to this bit.
    +            DSFLAG: u1,
    +            ///  Power-down entry flag. Set when the Power-down mode is successfully entered. Cleared by software writing a one to this bit.
    +            PDFLAG: u1,
    +            ///  Deep Power-down entry flag. Set when the Deep Power-down mode is successfully entered. Cleared by software writing a one to this bit.
    +            DPDFLAG: u1,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u20,
    +        }),
    +        ///  Power Control for Peripherals Register
    +        PCONP: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved.
    +            RESERVED: u1,
    +            ///  Timer/Counter 0 power/clock control bit.
    +            PCTIM0: u1,
    +            ///  Timer/Counter 1 power/clock control bit.
    +            PCTIM1: u1,
    +            ///  UART0 power/clock control bit.
    +            PCUART0: u1,
    +            ///  UART1 power/clock control bit.
    +            PCUART1: u1,
    +            ///  Reserved.
    +            RESERVED: u1,
    +            ///  PWM1 power/clock control bit.
    +            PCPWM1: u1,
    +            ///  The I2C0 interface power/clock control bit.
    +            PCI2C0: u1,
    +            ///  The SPI interface power/clock control bit.
    +            PCSPI: u1,
    +            ///  The RTC power/clock control bit.
    +            PCRTC: u1,
    +            ///  The SSP 1 interface power/clock control bit.
    +            PCSSP1: u1,
    +            ///  Reserved.
    +            RESERVED: u1,
    +            ///  A/D converter (ADC) power/clock control bit. Note: Clear the PDN bit in the AD0CR before clearing this bit, and set this bit before setting PDN.
    +            PCADC: u1,
    +            ///  CAN Controller 1 power/clock control bit.
    +            PCCAN1: u1,
    +            ///  CAN Controller 2 power/clock control bit.
    +            PCCAN2: u1,
    +            ///  Power/clock control bit for IOCON, GPIO, and GPIO interrupts.
    +            PCGPIO: u1,
    +            ///  Repetitive Interrupt Timer power/clock control bit.
    +            PCRIT: u1,
    +            ///  Motor Control PWM
    +            PCMCPWM: u1,
    +            ///  Quadrature Encoder Interface power/clock control bit.
    +            PCQEI: u1,
    +            ///  The I2C1 interface power/clock control bit.
    +            PCI2C1: u1,
    +            ///  Reserved.
    +            RESERVED: u1,
    +            ///  The SSP0 interface power/clock control bit.
    +            PCSSP0: u1,
    +            ///  Timer 2 power/clock control bit.
    +            PCTIM2: u1,
    +            ///  Timer 3 power/clock control bit.
    +            PCTIM3: u1,
    +            ///  UART 2 power/clock control bit.
    +            PCUART2: u1,
    +            ///  UART 3 power/clock control bit.
    +            PCUART3: u1,
    +            ///  I2C interface 2 power/clock control bit.
    +            PCI2C2: u1,
    +            ///  I2S interface power/clock control bit.
    +            PCI2S: u1,
    +            ///  Reserved.
    +            RESERVED: u1,
    +            ///  GPDMA function power/clock control bit.
    +            PCGPDMA: u1,
    +            ///  Ethernet block power/clock control bit.
    +            PCENET: u1,
    +            ///  USB interface power/clock control bit.
    +            PCUSB: u1,
    +        }),
    +        reserved260: [60]u8,
    +        ///  CPU Clock Configuration Register
    +        CCLKCFG: mmio.Mmio(packed struct(u32) {
    +            ///  Selects the divide value for creating the CPU clock (CCLK) from the PLL0 output. 0 = pllclk is divided by 1 to produce the CPU clock. This setting is not allowed when the PLL0 is connected, because the rate would always be greater than the maximum allowed CPU clock. 1 = pllclk is divided by 2 to produce the CPU clock. This setting is not allowed when the PLL0 is connected, because the rate would always be greater than the maximum allowed CPU clock. 2 = pllclk is divided by 3 to produce the CPU clock. 3 = pllclk is divided by 4 to produce the CPU clock. ... 255 = pllclk is divided by 256 to produce the CPU clock.
    +            CCLKSEL: u8,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u24,
    +        }),
    +        ///  USB Clock Configuration Register
    +        USBCLKCFG: mmio.Mmio(packed struct(u32) {
    +            ///  Selects the divide value for creating the USB clock from the PLL0 output. Only the values shown below can produce even number multiples of 48 MHz from the PLL0 output. Warning: Improper setting of this value will result in incorrect operation of the USB interface. 5 = PLL0 output is divided by 6. PLL0 output must be 288 MHz. 7 = PLL0 output is divided by 8. PLL0 output must be 384 MHz. 9 = PLL0 output is divided by 10. PLL0 output must be 480 MHz.
    +            USBSEL: u4,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u28,
    +        }),
    +        ///  Clock Source Select Register
    +        CLKSRCSEL: mmio.Mmio(packed struct(u32) {
    +            ///  Selects the clock source for PLL0 as follows. Warning: Improper setting of this value, or an incorrect sequence of changing this value may result in incorrect operation of the device.
    +            CLKSRC: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Selects the Internal RC oscillator as the PLL0 clock source (default).
    +                    SELECTS_THE_INTERNAL = 0x0,
    +                    ///  Selects the main oscillator as the PLL0 clock source. Select the main oscillator as PLL0 clock source if the PLL0 clock output is used for USB or for CAN with baudrates > 100 kBit/s.
    +                    SELECTS_THE_MAIN_OSC = 0x1,
    +                    ///  Selects the RTC oscillator as the PLL0 clock source.
    +                    SELECTS_THE_RTC_OSCI = 0x2,
    +                    ///  Reserved, do not use this setting.
    +                    RESERVED = 0x3,
    +                },
    +            },
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u30,
    +        }),
    +        ///  Allows clearing the current CAN channel sleep state as well as reading that state.
    +        CANSLEEPCLR: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u1,
    +            ///  Sleep status and control for CAN channel 1. Read: when 1, indicates that CAN channel 1 is in the sleep mode. Write: writing a 1 causes clocks to be restored to CAN channel 1.
    +            CAN1SLEEP: u1,
    +            ///  Sleep status and control for CAN channel 2. Read: when 1, indicates that CAN channel 2 is in the sleep mode. Write: writing a 1 causes clocks to be restored to CAN channel 2.
    +            CAN2SLEEP: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u29,
    +        }),
    +        ///  Allows reading the wake-up state of the CAN channels.
    +        CANWAKEFLAGS: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u1,
    +            ///  Wake-up status for CAN channel 1. Read: when 1, indicates that a falling edge has occurred on the receive data line of CAN channel 1. Write: writing a 1 clears this bit.
    +            CAN1WAKE: u1,
    +            ///  Wake-up status for CAN channel 2. Read: when 1, indicates that a falling edge has occurred on the receive data line of CAN channel 2. Write: writing a 1 clears this bit.
    +            CAN2WAKE: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u29,
    +        }),
    +        reserved320: [40]u8,
    +        ///  External Interrupt Flag Register
    +        EXTINT: mmio.Mmio(packed struct(u32) {
    +            ///  In level-sensitive mode, this bit is set if the EINT0 function is selected for its pin, and the pin is in its active state. In edge-sensitive mode, this bit is set if the EINT0 function is selected for its pin, and the selected edge occurs on the pin. This bit is cleared by writing a one to it, except in level sensitive mode when the pin is in its active state.
    +            EINT0: u1,
    +            ///  In level-sensitive mode, this bit is set if the EINT1 function is selected for its pin, and the pin is in its active state. In edge-sensitive mode, this bit is set if the EINT1 function is selected for its pin, and the selected edge occurs on the pin. This bit is cleared by writing a one to it, except in level sensitive mode when the pin is in its active state.
    +            EINT1: u1,
    +            ///  In level-sensitive mode, this bit is set if the EINT2 function is selected for its pin, and the pin is in its active state. In edge-sensitive mode, this bit is set if the EINT2 function is selected for its pin, and the selected edge occurs on the pin. This bit is cleared by writing a one to it, except in level sensitive mode when the pin is in its active state.
    +            EINT2: u1,
    +            ///  In level-sensitive mode, this bit is set if the EINT3 function is selected for its pin, and the pin is in its active state. In edge-sensitive mode, this bit is set if the EINT3 function is selected for its pin, and the selected edge occurs on the pin. This bit is cleared by writing a one to it, except in level sensitive mode when the pin is in its active state.
    +            EINT3: u1,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u28,
    +        }),
    +        reserved328: [4]u8,
    +        ///  External Interrupt Mode register
    +        EXTMODE: mmio.Mmio(packed struct(u32) {
    +            ///  External interrupt 0 EINT0 mode.
    +            EXTMODE0: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Level-sensitive. Level-sensitivity is selected for EINT0.
    +                    LEVEL_SENSITIVE = 0x0,
    +                    ///  Edge-sensitive. EINT0 is edge sensitive.
    +                    EDGE_SENSITIVE = 0x1,
    +                },
    +            },
    +            ///  External interrupt 1 EINT1 mode.
    +            EXTMODE1: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Level-sensitive. Level-sensitivity is selected for EINT1.
    +                    LEVEL_SENSITIVE = 0x0,
    +                    ///  Edge-sensitive. EINT1 is edge sensitive.
    +                    EDGE_SENSITIVE = 0x1,
    +                },
    +            },
    +            ///  External interrupt 2 EINT2 mode.
    +            EXTMODE2: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Level-sensitive. Level-sensitivity is selected for EINT2.
    +                    LEVEL_SENSITIVE = 0x0,
    +                    ///  Edge-sensitive. EINT2 is edge sensitive.
    +                    EDGE_SENSITIVE = 0x1,
    +                },
    +            },
    +            ///  External interrupt 3 EINT3 mode.
    +            EXTMODE3: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Level-sensitive. Level-sensitivity is selected for EINT3.
    +                    LEVEL_SENSITIVE = 0x0,
    +                    ///  Edge-sensitive. EINT3 is edge sensitive.
    +                    EDGE_SENSITIVE = 0x1,
    +                },
    +            },
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u28,
    +        }),
    +        ///  External Interrupt Polarity Register
    +        EXTPOLAR: mmio.Mmio(packed struct(u32) {
    +            ///  External interrupt 0 EINT0 polarity.
    +            EXTPOLAR0: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Falling edge. EINT0 is low-active or falling-edge sensitive (depending on EXTMODE0).
    +                    FALLING_EDGE = 0x0,
    +                    ///  Rising edge. EINT0 is high-active or rising-edge sensitive (depending on EXTMODE0).
    +                    RISING_EDGE = 0x1,
    +                },
    +            },
    +            ///  External interrupt 1 EINT1 polarity.
    +            EXTPOLAR1: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Falling edge. EINT1 is low-active or falling-edge sensitive (depending on EXTMODE1).
    +                    FALLING_EDGE = 0x0,
    +                    ///  Rising edge. EINT1 is high-active or rising-edge sensitive (depending on EXTMODE1).
    +                    RISING_EDGE = 0x1,
    +                },
    +            },
    +            ///  External interrupt 2 EINT2 polarity.
    +            EXTPOLAR2: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Falling edge. EINT2 is low-active or falling-edge sensitive (depending on EXTMODE2).
    +                    FALLING_EDGE = 0x0,
    +                    ///  Rising edge. EINT2 is high-active or rising-edge sensitive (depending on EXTMODE2).
    +                    RISING_EDGE = 0x1,
    +                },
    +            },
    +            ///  External interrupt 3 EINT3 polarity.
    +            EXTPOLAR3: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Falling edge. EINT3 is low-active or falling-edge sensitive (depending on EXTMODE3).
    +                    FALLING_EDGE = 0x0,
    +                    ///  Rising edge. EINT3 is high-active or rising-edge sensitive (depending on EXTMODE3).
    +                    RISING_EDGE = 0x1,
    +                },
    +            },
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u28,
    +        }),
    +        reserved384: [48]u8,
    +        ///  Reset Source Identification Register
    +        RSID: mmio.Mmio(packed struct(u32) {
    +            ///  Assertion of the POR signal sets this bit, and clears all of the other bits in this register. But if another Reset signal (e.g., External Reset) remains asserted after the POR signal is negated, then its bit is set. This bit is not affected by any of the other sources of Reset.
    +            POR: u1,
    +            ///  Assertion of the RESET signal sets this bit. This bit is cleared only by software or POR.
    +            EXTR: u1,
    +            ///  This bit is set when the Watchdog Timer times out and the WDTRESET bit in the Watchdog Mode Register is 1. This bit is cleared only by software or POR.
    +            WDTR: u1,
    +            ///  This bit is set when the VDD(REG)(3V3) voltage reaches a level below the BOD reset trip level (typically 1.85 V under nominal room temperature conditions). If the VDD(REG)(3V3) voltage dips from the normal operating range to below the BOD reset trip level and recovers, the BODR bit will be set to 1. If the VDD(REG)(3V3) voltage dips from the normal operating range to below the BOD reset trip level and continues to decline to the level at which POR is asserted (nominally 1 V), the BODR bit is cleared. If the VDD(REG)(3V3) voltage rises continuously from below 1 V to a level above the BOD reset trip level, the BODR will be set to 1. This bit is cleared only by software or POR. Note: Only in the case where a reset occurs and the POR = 0, the BODR bit indicates if the VDD(REG)(3V3) voltage was below the BOD reset trip level or not.
    +            BODR: u1,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u28,
    +        }),
    +        reserved416: [28]u8,
    +        ///  System control and status
    +        SCS: mmio.Mmio(packed struct(u32) {
    +            ///  Reserved. User software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u4,
    +            ///  Main oscillator range select.
    +            OSCRANGE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Low. The frequency range of the main oscillator is 1 MHz to 20 MHz.
    +                    LOW = 0x0,
    +                    ///  High. The frequency range of the main oscillator is 15 MHz to 25 MHz.
    +                    HIGH = 0x1,
    +                },
    +            },
    +            ///  Main oscillator enable.
    +            OSCEN: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Disabled. The main oscillator is disabled.
    +                    DISABLED = 0x0,
    +                    ///  Enabled.The main oscillator is enabled, and will start up if the correct external circuitry is connected to the XTAL1 and XTAL2 pins.
    +                    ENABLED = 0x1,
    +                },
    +            },
    +            ///  Main oscillator status.
    +            OSCSTAT: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Not ready. The main oscillator is not ready to be used as a clock source.
    +                    NOT_READY = 0x0,
    +                    ///  Ready. The main oscillator is ready to be used as a clock source. The main oscillator must be enabled via the OSCEN bit.
    +                    READY = 0x1,
    +                },
    +            },
    +            ///  Reserved. User software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u25,
    +        }),
    +        reserved424: [4]u8,
    +        ///  Peripheral Clock Selection register 0.
    +        PCLKSEL0: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral clock selection for WDT.
    +            PCLK_WDT: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    +                    CCLK_DIV_8 = 0x3,
    +                },
    +            },
    +            ///  Peripheral clock selection for TIMER0.
    +            PCLK_TIMER0: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    +                    CCLK_DIV_8 = 0x3,
    +                },
    +            },
    +            ///  Peripheral clock selection for TIMER1.
    +            PCLK_TIMER1: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    +                    CCLK_DIV_8 = 0x3,
    +                },
    +            },
    +            ///  Peripheral clock selection for UART0.
    +            PCLK_UART0: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    +                    CCLK_DIV_8 = 0x3,
    +                },
    +            },
    +            ///  Peripheral clock selection for UART1.
    +            PCLK_UART1: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    +                    CCLK_DIV_8 = 0x3,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u2,
    +            ///  Peripheral clock selection for PWM1.
    +            PCLK_PWM1: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    +                    CCLK_DIV_8 = 0x3,
    +                },
    +            },
    +            ///  Peripheral clock selection for I2C0.
    +            PCLK_I2C0: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    +                    CCLK_DIV_8 = 0x3,
    +                },
    +            },
    +            ///  Peripheral clock selection for SPI.
    +            PCLK_SPI: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    +                    CCLK_DIV_8 = 0x3,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u2,
    +            ///  Peripheral clock selection for SSP1.
    +            PCLK_SSP1: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    +                    CCLK_DIV_8 = 0x3,
    +                },
    +            },
    +            ///  Peripheral clock selection for DAC.
    +            PCLK_DAC: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    +                    CCLK_DIV_8 = 0x3,
    +                },
    +            },
    +            ///  Peripheral clock selection for ADC.
    +            PCLK_ADC: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    +                    CCLK_DIV_8 = 0x3,
    +                },
    +            },
    +            ///  Peripheral clock selection for CAN1.PCLK_CAN1 and PCLK_CAN2 must have the same PCLK divide value when the CAN function is used.
    +            PCLK_CAN1: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 6. PCLK_peripheral = CCLK/6.
    +                    CCLK_DIV_6 = 0x3,
    +                },
    +            },
    +            ///  Peripheral clock selection for CAN2.PCLK_CAN1 and PCLK_CAN2 must have the same PCLK divide value when the CAN function is used.
    +            PCLK_CAN2: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 6. PCLK_peripheral = CCLK/6,
    +                    CCLK_DIV_6 = 0x3,
    +                },
    +            },
    +            ///  Peripheral clock selection for CAN acceptance filtering.PCLK_CAN1 and PCLK_CAN2 must have the same PCLK divide value when the CAN function is used.
    +            PCLK_ACF: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 6. PCLK_peripheral = CCLK/6
    +                    CCLK_DIV_6 = 0x3,
    +                },
    +            },
    +        }),
    +        ///  Peripheral Clock Selection register 1.
    +        PCLKSEL1: mmio.Mmio(packed struct(u32) {
    +            ///  Peripheral clock selection for the Quadrature Encoder Interface.
    +            PCLK_QEI: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    +                    CCLK_DIV_8 = 0x3,
    +                },
    +            },
    +            ///  Peripheral clock selection for GPIO interrupts.
    +            PCLK_GPIOINT: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    +                    CCLK_DIV_8 = 0x3,
    +                },
    +            },
    +            ///  Peripheral clock selection for the Pin Connect block.
    +            PCLK_PCB: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    +                    CCLK_DIV_8 = 0x3,
    +                },
    +            },
    +            ///  Peripheral clock selection for I2C1.
    +            PCLK_I2C1: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    +                    CCLK_DIV_8 = 0x3,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u2,
    +            ///  Peripheral clock selection for SSP0.
    +            PCLK_SSP0: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    +                    CCLK_DIV_8 = 0x3,
    +                },
    +            },
    +            ///  Peripheral clock selection for TIMER2.
    +            PCLK_TIMER2: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    +                    CCLK_DIV_8 = 0x3,
    +                },
    +            },
    +            ///  Peripheral clock selection for TIMER3.
    +            PCLK_TIMER3: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    +                    CCLK_DIV_8 = 0x3,
    +                },
    +            },
    +            ///  Peripheral clock selection for UART2.
    +            PCLK_UART2: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    +                    CCLK_DIV_8 = 0x3,
    +                },
    +            },
    +            ///  Peripheral clock selection for UART3.
    +            PCLK_UART3: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    +                    CCLK_DIV_8 = 0x3,
    +                },
    +            },
    +            ///  Peripheral clock selection for I2C2.
    +            PCLK_I2C2: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    +                    CCLK_DIV_8 = 0x3,
    +                },
    +            },
    +            ///  Peripheral clock selection for I2S.
    +            PCLK_I2S: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    +                    CCLK_DIV_8 = 0x3,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u2,
    +            ///  Peripheral clock selection for Repetitive Interrupt Timer.
    +            PCLK_RIT: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    +                    CCLK_DIV_8 = 0x3,
    +                },
    +            },
    +            ///  Peripheral clock selection for the System Control block.
    +            PCLK_SYSCON: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    +                    CCLK_DIV_8 = 0x3,
    +                },
    +            },
    +            ///  Peripheral clock selection for the Motor Control PWM.
    +            PCLK_MC: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    +                    CCLK_DIV_4 = 0x0,
    +                    ///  CCLK. PCLK_peripheral = CCLK
    +                    CCLK = 0x1,
    +                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    +                    CCLK_DIV_2 = 0x2,
    +                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    +                    CCLK_DIV_8 = 0x3,
    +                },
    +            },
    +        }),
    +        reserved448: [16]u8,
    +        ///  USB Interrupt Status
    +        USBINTST: mmio.Mmio(packed struct(u32) {
    +            ///  Low priority interrupt line status. This bit is read-only.
    +            USB_INT_REQ_LP: u1,
    +            ///  High priority interrupt line status. This bit is read-only.
    +            USB_INT_REQ_HP: u1,
    +            ///  DMA interrupt line status. This bit is read-only.
    +            USB_INT_REQ_DMA: u1,
    +            ///  USB host interrupt line status. This bit is read-only.
    +            USB_HOST_INT: u1,
    +            ///  External ATX interrupt line status. This bit is read-only.
    +            USB_ATX_INT: u1,
    +            ///  OTG interrupt line status. This bit is read-only.
    +            USB_OTG_INT: u1,
    +            ///  I2C module interrupt line status. This bit is read-only.
    +            USB_I2C_INT: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u1,
    +            ///  USB need clock indicator. This bit is read-only. This bit is set to 1 when USB activity or a change of state on the USB data pins is detected, and it indicates that a PLL supplied clock of 48 MHz is needed. Once USB_NEED_CLK becomes one, it resets to zero 5 ms after the last packet has been received/sent, or 2 ms after the Suspend Change (SUS_CH) interrupt has occurred. A change of this bit from 0 to 1 can wake up the microcontroller if activity on the USB bus is selected to wake up the part from the Power-down mode (see Section 4.7.9 Wake-up from Reduced Power Modes for details). Also see Section 4.5.8 PLLs and Power-down mode and Section 4.7.10 Power Control for Peripherals register (PCONP - 0x400F C0C4) for considerations about the PLL and invoking the Power-down mode. This bit is read-only.
    +            USB_NEED_CLK: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u22,
    +            ///  Enable all USB interrupts. When this bit is cleared, the NVIC does not see the ORed output of the USB interrupt lines.
    +            EN_USB_INTS: u1,
    +        }),
    +        ///  Selects between alternative requests on DMA channels 0 through 7 and 10 through 15
    +        DMACREQSEL: mmio.Mmio(packed struct(u32) {
    +            ///  Selects the DMA request for GPDMA input 8: 0 - uart0 tx 1 - Timer 0 match 0 is selected.
    +            DMASEL08: u1,
    +            ///  Selects the DMA request for GPDMA input 9: 0 - uart0 rx 1 - Timer 0 match 1 is selected.
    +            DMASEL09: u1,
    +            ///  Selects the DMA request for GPDMA input 10: 0 - uart1 tx is selected. 1 - Timer 1 match 0 is selected.
    +            DMASEL10: u1,
    +            ///  Selects the DMA request for GPDMA input 11: 0 - uart1 rx is selected. 1 - Timer 1 match 1 is selected.
    +            DMASEL11: u1,
    +            ///  Selects the DMA request for GPDMA input 12: 0 - uart2 tx is selected. 1 - Timer 2 match 0 is selected.
    +            DMASEL12: u1,
    +            ///  Selects the DMA request for GPDMA input 13: 0 - uart2 rx is selected. 1 - Timer 2 match 1 is selected.
    +            DMASEL13: u1,
    +            ///  Selects the DMA request for GPDMA input 14: 0 - uart3 tx is selected. 1 - I2S channel 0 is selected.
    +            DMASEL14: u1,
    +            ///  Selects the DMA request for GPDMA input 15: 0 - uart3 rx is selected. 1 - I2S channel 1 is selected.
    +            DMASEL15: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u24,
    +        }),
    +        ///  Clock Output Configuration Register
    +        CLKOUTCFG: mmio.Mmio(packed struct(u32) {
    +            ///  Selects the clock source for the CLKOUT function. Other values are reserved. Do not use.
    +            CLKOUTSEL: packed union {
    +                raw: u4,
    +                value: enum(u4) {
    +                    ///  Selects the CPU clock as the CLKOUT source.
    +                    SELECTS_THE_CPU_CLOC = 0x0,
    +                    ///  Selects the main oscillator as the CLKOUT source.
    +                    SELECTS_THE_MAIN_OSC = 0x1,
    +                    ///  Selects the Internal RC oscillator as the CLKOUT source.
    +                    SELECTS_THE_INTERNAL = 0x2,
    +                    ///  Selects the USB clock as the CLKOUT source.
    +                    SELECTS_THE_USB_CLOC = 0x3,
    +                    ///  Selects the RTC oscillator as the CLKOUT source.
    +                    SELECTS_THE_RTC_OSCI = 0x4,
    +                    _,
    +                },
    +            },
    +            ///  Integer value to divide the output clock by, minus one. 0 = Clock is divided by 1 1 = Clock is divided by 2. 2 = Clock is divided by 3. ... 15 = Clock is divided by 16.
    +            CLKOUTDIV: u4,
    +            ///  CLKOUT enable control, allows switching the CLKOUT source without glitches. Clear to stop CLKOUT on the next falling edge. Set to enable CLKOUT.
    +            CLKOUT_EN: u1,
    +            ///  CLKOUT activity indication. Reads as 1 when CLKOUT is enabled. Read as 0 when CLKOUT has been disabled via the CLKOUT_EN bit and the clock has completed being stopped.
    +            CLKOUT_ACT: u1,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u22,
    +        }),
    +    };
    +
    +    ///  Quadrature Encoder Interface (QEI)
    +    pub const QEI = extern struct {
    +        ///  Control register
    +        CON: mmio.Mmio(packed struct(u32) {
    +            ///  Reset position counter. When set = 1, resets the position counter to all zeros. Autoclears when the position counter is cleared.
    +            RESP: u1,
    +            ///  Reset position counter on index. When set = 1, resets the position counter to all zeros once only the first time an index pulse occurs. Autoclears when the position counter is cleared.
    +            RESPI: u1,
    +            ///  Reset velocity. When set = 1, resets the velocity counter to all zeros, reloads the velocity timer, and presets the velocity compare register. Autoclears when the velocity counter is cleared.
    +            RESV: u1,
    +            ///  Reset index counter. When set = 1, resets the index counter to all zeros. Autoclears when the index counter is cleared.
    +            RESI: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u28,
    +        }),
    +        ///  Status register
    +        STAT: mmio.Mmio(packed struct(u32) {
    +            ///  Direction bit. In combination with DIRINV bit indicates forward or reverse direction. See Table 597.
    +            DIR: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u31,
    +        }),
    +        ///  Configuration register
    +        CONF: mmio.Mmio(packed struct(u32) {
    +            ///  Direction invert. When 1, complements the DIR bit.
    +            DIRINV: u1,
    +            ///  Signal Mode. When 0, PhA and PhB function as quadrature encoder inputs. When 1, PhA functions as the direction signal and PhB functions as the clock signal.
    +            SIGMODE: u1,
    +            ///  Capture Mode. When 0, only PhA edges are counted (2X). When 1, BOTH PhA and PhB edges are counted (4X), increasing resolution but decreasing range.
    +            CAPMODE: u1,
    +            ///  Invert Index. When 1, inverts the sense of the index input.
    +            INVINX: u1,
    +            ///  Continuously reset the position counter on index. When 1, resets the position counter to all zeros whenever an index pulse occurs after the next position increase (recalibration).
    +            CRESPI: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u11,
    +            ///  Index gating configuration: When INXGATE[16] = 1, pass the index when PHA = 1 and PHB = 0, otherwise block index. When INXGATE[17] = 1, pass the index when PHA = 1 and PHB = 1, otherwise block index. When INXGATE[18] = 1, pass the index when PHA = 0 and PHB = 1, otherwise block index. When INXGATE[19] = 1, pass the index when PHA = 0 and PHB = 0, otherwise block index.
    +            INXGATE: u4,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u12,
    +        }),
    +        ///  Position register
    +        POS: mmio.Mmio(packed struct(u32) {
    +            ///  Current position value.
    +            POS: u32,
    +        }),
    +        ///  Maximum position register
    +        MAXPOS: mmio.Mmio(packed struct(u32) {
    +            ///  Current maximum position value.
    +            MAXPOS: u32,
    +        }),
    +        ///  Position compare register 0
    +        CMPOS0: mmio.Mmio(packed struct(u32) {
    +            ///  Position compare value 0.
    +            PCMP0: u32,
    +        }),
    +        ///  Position compare register 1
    +        CMPOS1: mmio.Mmio(packed struct(u32) {
    +            ///  Position compare value 1.
    +            PCMP1: u32,
    +        }),
    +        ///  Position compare register 2
    +        CMPOS2: mmio.Mmio(packed struct(u32) {
    +            ///  Position compare value 2.
    +            PCMP2: u32,
    +        }),
    +        ///  Index count register 0
    +        INXCNT: mmio.Mmio(packed struct(u32) {
    +            ///  Current index counter value.
    +            ENCPOS: u32,
    +        }),
    +        ///  Index compare register 0
    +        INXCMP0: mmio.Mmio(packed struct(u32) {
    +            ///  Index compare value 0.
    +            ICMP0: u32,
    +        }),
    +        ///  Velocity timer reload register
    +        LOAD: mmio.Mmio(packed struct(u32) {
    +            ///  Current velocity timer load value.
    +            VELLOAD: u32,
    +        }),
    +        ///  Velocity timer register
    +        TIME: mmio.Mmio(packed struct(u32) {
    +            ///  Current velocity timer value.
    +            VELVAL: u32,
    +        }),
    +        ///  Velocity counter register
    +        VEL: mmio.Mmio(packed struct(u32) {
    +            ///  Current velocity pulse count.
    +            VELPC: u32,
    +        }),
    +        ///  Velocity capture register
    +        CAP: mmio.Mmio(packed struct(u32) {
    +            ///  Last velocity capture.
    +            VELCAP: u32,
    +        }),
    +        ///  Velocity compare register
    +        VELCOMP: mmio.Mmio(packed struct(u32) {
    +            ///  Compare velocity pulse count.
    +            VELPC: u32,
    +        }),
    +        ///  Digital filter register
    +        FILTER: mmio.Mmio(packed struct(u32) {
    +            ///  Digital filter sampling delay.
    +            FILTA: u32,
    +        }),
    +        reserved4056: [3992]u8,
    +        ///  Interrupt enable clear register
    +        IEC: mmio.Mmio(packed struct(u32) {
    +            ///  Writing a 1 disables the INX_Int interrupt in the QEIIE register.
    +            INX_INT: u1,
    +            ///  Writing a 1 disables the TIN_Int interrupt in the QEIIE register.
    +            TIM_INT: u1,
    +            ///  Writing a 1 disables the VELC_Int interrupt in the QEIIE register.
    +            VELC_INT: u1,
    +            ///  Writing a 1 disables the DIR_Int interrupt in the QEIIE register.
    +            DIR_INT: u1,
    +            ///  Writing a 1 disables the ERR_Int interrupt in the QEIIE register.
    +            ERR_INT: u1,
    +            ///  Writing a 1 disables the ENCLK_Int interrupt in the QEIIE register.
    +            ENCLK_INT: u1,
    +            ///  Writing a 1 disables the POS0_Int interrupt in the QEIIE register.
    +            POS0_INT: u1,
    +            ///  Writing a 1 disables the POS1_Int interrupt in the QEIIE register.
    +            POS1_INT: u1,
    +            ///  Writing a 1 disables the POS2_Int interrupt in the QEIIE register.
    +            POS2_INT: u1,
    +            ///  Writing a 1 disables the REV0_Int interrupt in the QEIIE register.
    +            REV0_INT: u1,
    +            ///  Writing a 1 disables the POS0REV_Int interrupt in the QEIIE register.
    +            POS0REV_INT: u1,
    +            ///  Writing a 1 disables the POS1REV_Int interrupt in the QEIIE register.
    +            POS1REV_INT: u1,
    +            ///  Writing a 1 disables the POS2REV_Int interrupt in the QEIIE register.
    +            POS2REV_INT: u1,
    +            ///  Writing a 1 disables the REV1_Int interrupt in the QEIIE register.
    +            REV1_INT: u1,
    +            ///  Writing a 1 disables the REV2_Int interrupt in the QEIIE register.
    +            REV2_INT: u1,
    +            ///  Writing a 1 disables the MAXPOS_Int interrupt in the QEIIE register.
    +            MAXPOS_INT: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u16,
    +        }),
    +        ///  Interrupt enable set register
    +        IES: mmio.Mmio(packed struct(u32) {
    +            ///  Writing a 1 enables the INX_Int interrupt in the QEIIE register.
    +            INX_INT: u1,
    +            ///  Writing a 1 enables the TIN_Int interrupt in the QEIIE register.
    +            TIM_INT: u1,
    +            ///  Writing a 1 enables the VELC_Int interrupt in the QEIIE register.
    +            VELC_INT: u1,
    +            ///  Writing a 1 enables the DIR_Int interrupt in the QEIIE register.
    +            DIR_INT: u1,
    +            ///  Writing a 1 enables the ERR_Int interrupt in the QEIIE register.
    +            ERR_INT: u1,
    +            ///  Writing a 1 enables the ENCLK_Int interrupt in the QEIIE register.
    +            ENCLK_INT: u1,
    +            ///  Writing a 1 enables the POS0_Int interrupt in the QEIIE register.
    +            POS0_INT: u1,
    +            ///  Writing a 1 enables the POS1_Int interrupt in the QEIIE register.
    +            POS1_INT: u1,
    +            ///  Writing a 1 enables the POS2_Int interrupt in the QEIIE register.
    +            POS2_INT: u1,
    +            ///  Writing a 1 enables the REV0_Int interrupt in the QEIIE register.
    +            REV0_INT: u1,
    +            ///  Writing a 1 enables the POS0REV_Int interrupt in the QEIIE register.
    +            POS0REV_INT: u1,
    +            ///  Writing a 1 enables the POS1REV_Int interrupt in the QEIIE register.
    +            POS1REV_INT: u1,
    +            ///  Writing a 1 enables the POS2REV_Int interrupt in the QEIIE register.
    +            POS2REV_INT: u1,
    +            ///  Writing a 1 enables the REV1_Int interrupt in the QEIIE register.
    +            REV1_INT: u1,
    +            ///  Writing a 1 enables the REV2_Int interrupt in the QEIIE register.
    +            REV2_INT: u1,
    +            ///  Writing a 1 enables the MAXPOS_Int interrupt in the QEIIE register.
    +            MAXPOS_INT: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u16,
    +        }),
    +        ///  Interrupt status register
    +        INTSTAT: mmio.Mmio(packed struct(u32) {
    +            ///  Indicates that an index pulse was detected.
    +            INX_INT: u1,
    +            ///  Indicates that a velocity timer overflow occurred
    +            TIM_INT: u1,
    +            ///  Indicates that captured velocity is less than compare velocity.
    +            VELC_INT: u1,
    +            ///  Indicates that a change of direction was detected.
    +            DIR_INT: u1,
    +            ///  Indicates that an encoder phase error was detected.
    +            ERR_INT: u1,
    +            ///  Indicates that and encoder clock pulse was detected.
    +            ENCLK_INT: u1,
    +            ///  Indicates that the position 0 compare value is equal to the current position.
    +            POS0_INT: u1,
    +            ///  Indicates that the position 1compare value is equal to the current position.
    +            POS1_INT: u1,
    +            ///  Indicates that the position 2 compare value is equal to the current position.
    +            POS2_INT: u1,
    +            ///  Indicates that the index compare 0 value is equal to the current index count.
    +            REV0_INT: u1,
    +            ///  Combined position 0 and revolution count interrupt. Set when both the POS0_Int bit is set and the REV0_Int is set.
    +            POS0REV_INT: u1,
    +            ///  Combined position 1 and revolution count interrupt. Set when both the POS1_Int bit is set and the REV1_Int is set.
    +            POS1REV_INT: u1,
    +            ///  Combined position 2 and revolution count interrupt. Set when both the POS2_Int bit is set and the REV2_Int is set.
    +            POS2REV_INT: u1,
    +            ///  Indicates that the index compare 1value is equal to the current index count.
    +            REV1_INT: u1,
    +            ///  Indicates that the index compare 2 value is equal to the current index count.
    +            REV2_INT: u1,
    +            ///  Indicates that the current position count goes through the MAXPOS value to zero in the forward direction, or through zero to MAXPOS in the reverse direction.
    +            MAXPOS_INT: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u16,
    +        }),
    +        ///  Interrupt enable register
    +        IE: mmio.Mmio(packed struct(u32) {
    +            ///  When 1, the INX_Int interrupt is enabled.
    +            INX_INT: u1,
    +            ///  When 1, the TIN_Int interrupt is enabled.
    +            TIM_INT: u1,
    +            ///  When 1, the VELC_Int interrupt is enabled.
    +            VELC_INT: u1,
    +            ///  When 1, the DIR_Int interrupt is enabled.
    +            DIR_INT: u1,
    +            ///  When 1, the ERR_Int interrupt is enabled.
    +            ERR_INT: u1,
    +            ///  When 1, the ENCLK_Int interrupt is enabled.
    +            ENCLK_INT: u1,
    +            ///  When 1, the POS0_Int interrupt is enabled.
    +            POS0_INT: u1,
    +            ///  When 1, the POS1_Int interrupt is enabled.
    +            POS1_INT: u1,
    +            ///  When 1, the POS2_Int interrupt is enabled.
    +            POS2_INT: u1,
    +            ///  When 1, the REV0_Int interrupt is enabled.
    +            REV0_INT: u1,
    +            ///  When 1, the POS0REV_Int interrupt is enabled.
    +            POS0REV_INT: u1,
    +            ///  When 1, the POS1REV_Int interrupt is enabled.
    +            POS1REV_INT: u1,
    +            ///  When 1, the POS2REV_Int interrupt is enabled.
    +            POS2REV_INT: u1,
    +            ///  When 1, the REV1_Int interrupt is enabled.
    +            REV1_INT: u1,
    +            ///  When 1, the REV2_Int interrupt is enabled.
    +            REV2_INT: u1,
    +            ///  When 1, the MAXPOS_Int interrupt is enabled.
    +            MAXPOS_INT: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u16,
    +        }),
    +        ///  Interrupt status clear register
    +        CLR: mmio.Mmio(packed struct(u32) {
    +            ///  Writing a 1 clears the INX_Int bit in QEIINTSTAT.
    +            INX_INT: u1,
    +            ///  Writing a 1 clears the TIN_Int bit in QEIINTSTAT.
    +            TIM_INT: u1,
    +            ///  Writing a 1 clears the VELC_Int bit in QEIINTSTAT.
    +            VELC_INT: u1,
    +            ///  Writing a 1 clears the DIR_Int bit in QEIINTSTAT.
    +            DIR_INT: u1,
    +            ///  Writing a 1 clears the ERR_Int bit in QEIINTSTAT.
    +            ERR_INT: u1,
    +            ///  Writing a 1 clears the ENCLK_Int bit in QEIINTSTAT.
    +            ENCLK_INT: u1,
    +            ///  Writing a 1 clears the POS0_Int bit in QEIINTSTAT.
    +            POS0_INT: u1,
    +            ///  Writing a 1 clears the POS1_Int bit in QEIINTSTAT.
    +            POS1_INT: u1,
    +            ///  Writing a 1 clears the POS2_Int bit in QEIINTSTAT.
    +            POS2_INT: u1,
    +            ///  Writing a 1 clears the REV0_Int bit in QEIINTSTAT.
    +            REV0_INT: u1,
    +            ///  Writing a 1 clears the POS0REV_Int bit in QEIINTSTAT.
    +            POS0REV_INT: u1,
    +            ///  Writing a 1 clears the POS1REV_Int bit in QEIINTSTAT.
    +            POS1REV_INT: u1,
    +            ///  Writing a 1 clears the POS2REV_Int bit in QEIINTSTAT.
    +            POS2REV_INT: u1,
    +            ///  Writing a 1 clears the REV1_Int bit in QEIINTSTAT.
    +            REV1_INT: u1,
    +            ///  Writing a 1 clears the REV2_Int bit in QEIINTSTAT.
    +            REV2_INT: u1,
    +            ///  Writing a 1 clears the MAXPOS_Int bit in QEIINTSTAT.
    +            MAXPOS_INT: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u16,
    +        }),
    +        ///  Interrupt status set register
    +        SET: mmio.Mmio(packed struct(u32) {
    +            ///  Writing a 1 sets the INX_Int bit in QEIINTSTAT.
    +            INX_INT: u1,
    +            ///  Writing a 1 sets the TIN_Int bit in QEIINTSTAT.
    +            TIM_INT: u1,
    +            ///  Writing a 1 sets the VELC_Int bit in QEIINTSTAT.
    +            VELC_INT: u1,
    +            ///  Writing a 1 sets the DIR_Int bit in QEIINTSTAT.
    +            DIR_INT: u1,
    +            ///  Writing a 1 sets the ERR_Int bit in QEIINTSTAT.
    +            ERR_INT: u1,
    +            ///  Writing a 1 sets the ENCLK_Int bit in QEIINTSTAT.
    +            ENCLK_INT: u1,
    +            ///  Writing a 1 sets the POS0_Int bit in QEIINTSTAT.
    +            POS0_INT: u1,
    +            ///  Writing a 1 sets the POS1_Int bit in QEIINTSTAT.
    +            POS1_INT: u1,
    +            ///  Writing a 1 sets the POS2_Int bit in QEIINTSTAT.
    +            POS2_INT: u1,
    +            ///  Writing a 1 sets the REV0_Int bit in QEIINTSTAT.
    +            REV0_INT: u1,
    +            ///  Writing a 1 sets the POS0REV_Int bit in QEIINTSTAT.
    +            POS0REV_INT: u1,
    +            ///  Writing a 1 sets the POS1REV_Int bit in QEIINTSTAT.
    +            POS1REV_INT: u1,
    +            ///  Writing a 1 sets the POS2REV_Int bit in QEIINTSTAT.
    +            POS2REV_INT: u1,
    +            ///  Writing a 1 sets the REV1_Int bit in QEIINTSTAT.
    +            REV1_INT: u1,
    +            ///  Writing a 1 sets the REV2_Int bit in QEIINTSTAT.
    +            REV2_INT: u1,
    +            ///  Writing a 1 sets the MAXPOS_Int bit in QEIINTSTAT.
    +            MAXPOS_INT: u1,
    +            ///  Reserved. Read value is undefined, only zero should be written.
    +            RESERVED: u16,
    +        }),
    +    };
    +
    +    ///  Motor Control PWM
    +    pub const MCPWM = extern struct {
    +        ///  PWM Control read address
    +        CON: mmio.Mmio(packed struct(u32) {
    +            ///  Stops/starts timer channel 0.
    +            RUN0: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Stop.
    +                    STOP_ = 0x0,
    +                    ///  Run.
    +                    RUN_ = 0x1,
    +                },
    +            },
    +            ///  Edge/center aligned operation for channel 0.
    +            CENTER0: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Edge-aligned.
    +                    EDGE_ALIGNED_ = 0x0,
    +                    ///  Center-aligned.
    +                    CENTER_ALIGNED_ = 0x1,
    +                },
    +            },
    +            ///  Selects polarity of the MCOA0 and MCOB0 pins.
    +            POLA0: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Passive state is LOW, active state is HIGH.
    +                    PASSIVE_STATE_IS_LOW = 0x0,
    +                    ///  Passive state is HIGH, active state is LOW.
    +                    PASSIVE_STATE_IS_HIG = 0x1,
    +                },
    +            },
    +            ///  Controls the dead-time feature for channel 0.
    +            DTE0: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Dead-time disabled.
    +                    DEAD_TIME_DISABLED_ = 0x0,
    +                    ///  Dead-time enabled.
    +                    DEAD_TIME_ENABLED_ = 0x1,
    +                },
    +            },
    +            ///  Enable/disable updates of functional registers for channel 0 (see Section 24.8.2).
    +            DISUP0: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Functional registers are updated from the write registers at the end of each PWM cycle.
    +                    UPDATE = 0x0,
    +                    ///  Functional registers remain the same as long as the timer is running.
    +                    NOUPDATE = 0x1,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u3,
    +            ///  Stops/starts timer channel 1.
    +            RUN1: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Stop.
    +                    STOP_ = 0x0,
    +                    ///  Run.
    +                    RUN_ = 0x1,
    +                },
    +            },
    +            ///  Edge/center aligned operation for channel 1.
    +            CENTER1: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Edge-aligned.
    +                    EDGE_ALIGNED_ = 0x0,
    +                    ///  Center-aligned.
    +                    CENTER_ALIGNED_ = 0x1,
    +                },
    +            },
    +            ///  Selects polarity of the MCOA1 and MCOB1 pins.
    +            POLA1: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Passive state is LOW, active state is HIGH.
    +                    PASSIVE_STATE_IS_LOW = 0x0,
    +                    ///  Passive state is HIGH, active state is LOW.
    +                    PASSIVE_STATE_IS_HIG = 0x1,
    +                },
    +            },
    +            ///  Controls the dead-time feature for channel 1.
    +            DTE1: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Dead-time disabled.
    +                    DEAD_TIME_DISABLED_ = 0x0,
    +                    ///  Dead-time enabled.
    +                    DEAD_TIME_ENABLED_ = 0x1,
    +                },
    +            },
    +            ///  Enable/disable updates of functional registers for channel 1 (see Section 24.8.2).
    +            DISUP1: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Functional registers are updated from the write registers at the end of each PWM cycle.
    +                    UPDATE = 0x0,
    +                    ///  Functional registers remain the same as long as the timer is running.
    +                    NOUPDATE = 0x1,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u3,
    +            ///  Stops/starts timer channel 2.
    +            RUN2: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Stop.
    +                    STOP_ = 0x0,
    +                    ///  Run.
    +                    RUN_ = 0x1,
    +                },
    +            },
    +            ///  Edge/center aligned operation for channel 2.
    +            CENTER2: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Edge-aligned.
    +                    EDGE_ALIGNED_ = 0x0,
    +                    ///  Center-aligned.
    +                    CENTER_ALIGNED_ = 0x1,
    +                },
    +            },
    +            ///  Selects polarity of the MCOA2 and MCOB2 pins.
    +            POLA2: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Passive state is LOW, active state is HIGH.
    +                    PASSIVE_STATE_IS_LOW = 0x0,
    +                    ///  Passive state is HIGH, active state is LOW.
    +                    PASSIVE_STATE_IS_HIG = 0x1,
    +                },
    +            },
    +            ///  Controls the dead-time feature for channel 1.
    +            DTE2: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Dead-time disabled.
    +                    DEAD_TIME_DISABLED_ = 0x0,
    +                    ///  Dead-time enabled.
    +                    DEAD_TIME_ENABLED_ = 0x1,
    +                },
    +            },
    +            ///  Enable/disable updates of functional registers for channel 2 (see Section 24.8.2).
    +            DISUP2: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Functional registers are updated from the write registers at the end of each PWM cycle.
    +                    UPDATE = 0x0,
    +                    ///  Functional registers remain the same as long as the timer is running.
    +                    NOUPDATE = 0x1,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u8,
    +            ///  Controls the polarity of the MCOB outputs for all 3 channels. This bit is typically set to 1 only in 3-phase DC mode.
    +            INVBDC: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  The MCOB outputs have opposite polarity from the MCOA outputs (aside from dead time).
    +                    OPPOSITE = 0x0,
    +                    ///  The MCOB outputs have the same basic polarity as the MCOA outputs. (see Section 24.8.6)
    +                    SAME = 0x1,
    +                },
    +            },
    +            ///  3-phase AC mode select (see Section 24.8.7).
    +            ACMODE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  3-phase AC-mode off: Each PWM channel uses its own timer-counter and period register.
    +                    @"3_PHASE_AC_MODE_OFF" = 0x0,
    +                    ///  3-phase AC-mode on: All PWM channels use the timer-counter and period register of channel 0.
    +                    @"3_PHASE_AC_MODE_ON_" = 0x1,
    +                },
    +            },
    +            ///  3-phase DC mode select (see Section 24.8.6).
    +            DCMODE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  3-phase DC mode off: PWM channels are independent (unless bit ACMODE = 1)
    +                    @"3_PHASE_DC_MODE_OFF" = 0x0,
    +                    ///  3-phase DC mode on: The internal MCOA0 output is routed through the CP register (i.e. a mask) register to all six PWM outputs.
    +                    @"3_PHASE_DC_MODE_ON_" = 0x1,
    +                },
    +            },
    +        }),
    +        ///  PWM Control set address
    +        CON_SET: mmio.Mmio(packed struct(u32) {
    +            ///  Writing a one sets the corresponding bit in the CON register.
    +            RUN0_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CON register.
    +            CENTER0_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CON register.
    +            POLA0_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CON register.
    +            DTE0_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CON register.
    +            DISUP0_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CON register.
    +            RESERVED: u3,
    +            ///  Writing a one sets the corresponding bit in the CON register.
    +            RUN1_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CON register.
    +            CENTER1_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CON register.
    +            POLA1_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CON register.
    +            DTE1_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CON register.
    +            DISUP1_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CON register.
    +            RESERVED: u3,
    +            ///  Writing a one sets the corresponding bit in the CON register.
    +            RUN2_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CON register.
    +            CENTER2_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CON register.
    +            POLA2_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CON register.
    +            DTE2_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CON register.
    +            DISUP2_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CON register.
    +            RESERVED: u8,
    +            ///  Writing a one sets the corresponding bit in the CON register.
    +            INVBDC_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CON register.
    +            ACMODE_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CON register.
    +            DCMODE_SET: u1,
    +        }),
    +        ///  PWM Control clear address
    +        CON_CLR: mmio.Mmio(packed struct(u32) {
    +            ///  Writing a one clears the corresponding bit in the CON register.
    +            RUN0_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CON register.
    +            CENTER0_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CON register.
    +            POLA0_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CON register.
    +            DTE0_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CON register.
    +            DISUP0_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CON register.
    +            RESERVED: u3,
    +            ///  Writing a one clears the corresponding bit in the CON register.
    +            RUN1_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CON register.
    +            CENTER1_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CON register.
    +            POLA1_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CON register.
    +            DTE1_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CON register.
    +            DISUP1_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CON register.
    +            RESERVED: u3,
    +            ///  Writing a one clears the corresponding bit in the CON register.
    +            RUN2_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CON register.
    +            CENTER2_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CON register.
    +            POLA2_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CON register.
    +            DTE2_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CON register.
    +            DISUP2_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CON register.
    +            RESERVED: u8,
    +            ///  Writing a one clears the corresponding bit in the CON register.
    +            INVBDC_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CON register.
    +            ACMOD_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CON register.
    +            DCMODE_CLR: u1,
    +        }),
    +        ///  Capture Control read address
    +        CAPCON: mmio.Mmio(packed struct(u32) {
    +            ///  A 1 in this bit enables a channel 0 capture event on a rising edge on MCI0.
    +            CAP0MCI0_RE: u1,
    +            ///  A 1 in this bit enables a channel 0 capture event on a falling edge on MCI0.
    +            CAP0MCI0_FE: u1,
    +            ///  A 1 in this bit enables a channel 0 capture event on a rising edge on MCI1.
    +            CAP0MCI1_RE: u1,
    +            ///  A 1 in this bit enables a channel 0 capture event on a falling edge on MCI1.
    +            CAP0MCI1_FE: u1,
    +            ///  A 1 in this bit enables a channel 0 capture event on a rising edge on MCI2.
    +            CAP0MCI2_RE: u1,
    +            ///  A 1 in this bit enables a channel 0 capture event on a falling edge on MCI2.
    +            CAP0MCI2_FE: u1,
    +            ///  A 1 in this bit enables a channel 1 capture event on a rising edge on MCI0.
    +            CAP1MCI0_RE: u1,
    +            ///  A 1 in this bit enables a channel 1 capture event on a falling edge on MCI0.
    +            CAP1MCI0_FE: u1,
    +            ///  A 1 in this bit enables a channel 1 capture event on a rising edge on MCI1.
    +            CAP1MCI1_RE: u1,
    +            ///  A 1 in this bit enables a channel 1 capture event on a falling edge on MCI1.
    +            CAP1MCI1_FE: u1,
    +            ///  A 1 in this bit enables a channel 1 capture event on a rising edge on MCI2.
    +            CAP1MCI2_RE: u1,
    +            ///  A 1 in this bit enables a channel 1 capture event on a falling edge on MCI2.
    +            CAP1MCI2_FE: u1,
    +            ///  A 1 in this bit enables a channel 2 capture event on a rising edge on MCI0.
    +            CAP2MCI0_RE: u1,
    +            ///  A 1 in this bit enables a channel 2 capture event on a falling edge on MCI0.
    +            CAP2MCI0_FE: u1,
    +            ///  A 1 in this bit enables a channel 2 capture event on a rising edge on MCI1.
    +            CAP2MCI1_RE: u1,
    +            ///  A 1 in this bit enables a channel 2 capture event on a falling edge on MCI1.
    +            CAP2MCI1_FE: u1,
    +            ///  A 1 in this bit enables a channel 2 capture event on a rising edge on MCI2.
    +            CAP2MCI2_RE: u1,
    +            ///  A 1 in this bit enables a channel 2 capture event on a falling edge on MCI2.
    +            CAP2MCI2_FE: u1,
    +            ///  If this bit is 1, TC0 is reset by a channel 0 capture event.
    +            RT0: u1,
    +            ///  If this bit is 1, TC1 is reset by a channel 1 capture event.
    +            RT1: u1,
    +            ///  If this bit is 1, TC2 is reset by a channel 2 capture event.
    +            RT2: u1,
    +            ///  Reserved.
    +            RESERVED: u11,
    +        }),
    +        ///  Capture Control set address
    +        CAPCON_SET: mmio.Mmio(packed struct(u32) {
    +            ///  Writing a one sets the corresponding bits in the CAPCON register.
    +            CAP0MCI0_RE_SET: u1,
    +            ///  Writing a one sets the corresponding bits in the CAPCON register.
    +            CAP0MCI0_FE_SET: u1,
    +            ///  Writing a one sets the corresponding bits in the CAPCON register.
    +            CAP0MCI1_RE_SET: u1,
    +            ///  Writing a one sets the corresponding bits in the CAPCON register.
    +            CAP0MCI1_FE_SET: u1,
    +            ///  Writing a one sets the corresponding bits in the CAPCON register.
    +            CAP0MCI2_RE_SET: u1,
    +            ///  Writing a one sets the corresponding bits in the CAPCON register.
    +            CAP0MCI2_FE_SET: u1,
    +            ///  Writing a one sets the corresponding bits in the CAPCON register.
    +            CAP1MCI0_RE_SET: u1,
    +            ///  Writing a one sets the corresponding bits in the CAPCON register.
    +            CAP1MCI0_FE_SET: u1,
    +            ///  Writing a one sets the corresponding bits in the CAPCON register.
    +            CAP1MCI1_RE_SET: u1,
    +            ///  Writing a one sets the corresponding bits in the CAPCON register.
    +            CAP1MCI1_FE_SET: u1,
    +            ///  Writing a one sets the corresponding bits in the CAPCON register.
    +            CAP1MCI2_RE_SET: u1,
    +            ///  Writing a one sets the corresponding bits in the CAPCON register.
    +            CAP1MCI2_FE_SET: u1,
    +            ///  Writing a one sets the corresponding bits in the CAPCON register.
    +            CAP2MCI0_RE_SET: u1,
    +            ///  Writing a one sets the corresponding bits in the CAPCON register.
    +            CAP2MCI0_FE_SET: u1,
    +            ///  Writing a one sets the corresponding bits in the CAPCON register.
    +            CAP2MCI1_RE_SET: u1,
    +            ///  Writing a one sets the corresponding bits in the CAPCON register.
    +            CAP2MCI1_FE_SET: u1,
    +            ///  Writing a one sets the corresponding bits in the CAPCON register.
    +            CAP2MCI2_RE_SET: u1,
    +            ///  Writing a one sets the corresponding bits in the CAPCON register.
    +            CAP2MCI2_FE_SET: u1,
    +            ///  Writing a one sets the corresponding bits in the CAPCON register.
    +            RT0_SET: u1,
    +            ///  Writing a one sets the corresponding bits in the CAPCON register.
    +            RT1_SET: u1,
    +            ///  Writing a one sets the corresponding bits in the CAPCON register.
    +            RT2_SET: u1,
    +            ///  Reserved.
    +            RESERVED: u11,
    +        }),
    +        ///  Event Control clear address
    +        CAPCON_CLR: mmio.Mmio(packed struct(u32) {
    +            ///  Writing a one clears the corresponding bits in the CAPCON register.
    +            CAP0MCI0_RE_CLR: u1,
    +            ///  Writing a one clears the corresponding bits in the CAPCON register.
    +            CAP0MCI0_FE_CLR: u1,
    +            ///  Writing a one clears the corresponding bits in the CAPCON register.
    +            CAP0MCI1_RE_CLR: u1,
    +            ///  Writing a one clears the corresponding bits in the CAPCON register.
    +            CAP0MCI1_FE_CLR: u1,
    +            ///  Writing a one clears the corresponding bits in the CAPCON register.
    +            CAP0MCI2_RE_CLR: u1,
    +            ///  Writing a one clears the corresponding bits in the CAPCON register.
    +            CAP0MCI2_FE_CLR: u1,
    +            ///  Writing a one clears the corresponding bits in the CAPCON register.
    +            CAP1MCI0_RE_CLR: u1,
    +            ///  Writing a one clears the corresponding bits in the CAPCON register.
    +            CAP1MCI0_FE_CLR: u1,
    +            ///  Writing a one clears the corresponding bits in the CAPCON register.
    +            CAP1MCI1_RE_CLR: u1,
    +            ///  Writing a one clears the corresponding bits in the CAPCON register.
    +            CAP1MCI1_FE_CLR: u1,
    +            ///  Writing a one clears the corresponding bits in the CAPCON register.
    +            CAP1MCI2_RE_CLR: u1,
    +            ///  Writing a one clears the corresponding bits in the CAPCON register.
    +            CAP1MCI2_FE_CLR: u1,
    +            ///  Writing a one clears the corresponding bits in the CAPCON register.
    +            CAP2MCI0_RE_CLR: u1,
    +            ///  Writing a one clears the corresponding bits in the CAPCON register.
    +            CAP2MCI0_FE_CLR: u1,
    +            ///  Writing a one clears the corresponding bits in the CAPCON register.
    +            CAP2MCI1_RE_CLR: u1,
    +            ///  Writing a one clears the corresponding bits in the CAPCON register.
    +            CAP2MCI1_FE_CLR: u1,
    +            ///  Writing a one clears the corresponding bits in the CAPCON register.
    +            CAP2MCI2_RE_CLR: u1,
    +            ///  Writing a one clears the corresponding bits in the CAPCON register.
    +            CAP2MCI2_FE_CLR: u1,
    +            ///  Writing a one clears the corresponding bits in the CAPCON register.
    +            RT0_CLR: u1,
    +            ///  Writing a one clears the corresponding bits in the CAPCON register.
    +            RT1_CLR: u1,
    +            ///  Writing a one clears the corresponding bits in the CAPCON register.
    +            RT2_CLR: u1,
    +            ///  Reserved.
    +            RESERVED: u11,
    +        }),
    +        reserved60: [36]u8,
    +        ///  Dead time register
    +        DT: mmio.Mmio(packed struct(u32) {
    +            ///  Dead time for channel 0.[1]
    +            DT0: u10,
    +            ///  Dead time for channel 1.[2]
    +            DT1: u10,
    +            ///  Dead time for channel 2.[2]
    +            DT2: u10,
    +            ///  reserved
    +            RESERVED: u2,
    +        }),
    +        ///  Communication Pattern register
    +        CP: mmio.Mmio(packed struct(u32) {
    +            ///  Communication pattern output A, channel 0.
    +            CCPA0: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  MCOA0 passive.
    +                    MCOA0_PASSIVE_ = 0x0,
    +                    ///  internal MCOA0.
    +                    INTERNAL_MCOA0_ = 0x1,
    +                },
    +            },
    +            ///  Communication pattern output B, channel 0.
    +            CCPB0: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  MCOB0 passive.
    +                    MCOB0_PASSIVE_ = 0x0,
    +                    ///  MCOB0 tracks internal MCOA0.
    +                    MCOB0_TRACKS_INTERNA = 0x1,
    +                },
    +            },
    +            ///  Communication pattern output A, channel 1.
    +            CCPA1: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  MCOA1 passive.
    +                    MCOA1_PASSIVE_ = 0x0,
    +                    ///  MCOA1 tracks internal MCOA0.
    +                    MCOA1_TRACKS_INTERNA = 0x1,
    +                },
    +            },
    +            ///  Communication pattern output B, channel 1.
    +            CCPB1: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  MCOB1 passive.
    +                    MCOB1_PASSIVE_ = 0x0,
    +                    ///  MCOB1 tracks internal MCOA0.
    +                    MCOB1_TRACKS_INTERNA = 0x1,
    +                },
    +            },
    +            ///  Communication pattern output A, channel 2.
    +            CCPA2: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  MCOA2 passive.
    +                    MCOA2_PASSIVE_ = 0x0,
    +                    ///  MCOA2 tracks internal MCOA0.
    +                    MCOA2_TRACKS_INTERNA = 0x1,
    +                },
    +            },
    +            ///  Communication pattern output B, channel 2.
    +            CCPB2: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  MCOB2 passive.
    +                    MCOB2_PASSIVE_ = 0x0,
    +                    ///  MCOB2 tracks internal MCOA0.
    +                    MCOB2_TRACKS_INTERNA = 0x1,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u26,
    +        }),
    +        reserved80: [12]u8,
    +        ///  Interrupt Enable read address
    +        INTEN: mmio.Mmio(packed struct(u32) {
    +            ///  Limit interrupt for channel 0.
    +            ILIM0: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Interrupt disabled.
    +                    INTERRUPT_DISABLED_ = 0x0,
    +                    ///  Interrupt enabled.
    +                    INTERRUPT_ENABLED_ = 0x1,
    +                },
    +            },
    +            ///  Match interrupt for channel 0.
    +            IMAT0: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Interrupt disabled.
    +                    INTERRUPT_DISABLED_ = 0x0,
    +                    ///  Interrupt enabled.
    +                    INTERRUPT_ENABLED_ = 0x1,
    +                },
    +            },
    +            ///  Capture interrupt for channel 0.
    +            ICAP0: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Interrupt disabled.
    +                    INTERRUPT_DISABLED_ = 0x0,
    +                    ///  Interrupt enabled.
    +                    INTERRUPT_ENABLED_ = 0x1,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u1,
    +            ///  Limit interrupt for channel 1.
    +            ILIM1: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Interrupt disabled.
    +                    INTERRUPT_DISABLED_ = 0x0,
    +                    ///  Interrupt enabled.
    +                    INTERRUPT_ENABLED_ = 0x1,
    +                },
    +            },
    +            ///  Match interrupt for channel 1.
    +            IMAT1: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Interrupt disabled.
    +                    INTERRUPT_DISABLED_ = 0x0,
    +                    ///  Interrupt enabled.
    +                    INTERRUPT_ENABLED_ = 0x1,
    +                },
    +            },
    +            ///  Capture interrupt for channel 1.
    +            ICAP1: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Interrupt disabled.
    +                    INTERRUPT_DISABLED_ = 0x0,
    +                    ///  Interrupt enabled.
    +                    INTERRUPT_ENABLED_ = 0x1,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u1,
    +            ///  Limit interrupt for channel 2.
    +            ILIM2: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Interrupt disabled.
    +                    INTERRUPT_DISABLED_ = 0x0,
    +                    ///  Interrupt enabled.
    +                    INTERRUPT_ENABLED_ = 0x1,
    +                },
    +            },
    +            ///  Match interrupt for channel 2.
    +            IMAT2: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Interrupt disabled.
    +                    INTERRUPT_DISABLED_ = 0x0,
    +                    ///  Interrupt enabled.
    +                    INTERRUPT_ENABLED_ = 0x1,
    +                },
    +            },
    +            ///  Capture interrupt for channel 2.
    +            ICAP2: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Interrupt disabled.
    +                    INTERRUPT_DISABLED_ = 0x0,
    +                    ///  Interrupt enabled.
    +                    INTERRUPT_ENABLED_ = 0x1,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u4,
    +            ///  Fast abort interrupt.
    +            ABORT: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Interrupt disabled.
    +                    INTERRUPT_DISABLED_ = 0x0,
    +                    ///  Interrupt enabled.
    +                    INTERRUPT_ENABLED_ = 0x1,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u16,
    +        }),
    +        ///  Interrupt Enable set address
    +        INTEN_SET: mmio.Mmio(packed struct(u32) {
    +            ///  Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.
    +            ILIM0_SET: u1,
    +            ///  Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.
    +            IMAT0_SET: u1,
    +            ///  Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.
    +            ICAP0_SET: u1,
    +            ///  Reserved.
    +            RESERVED: u1,
    +            ///  Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.
    +            ILIM1_SET: u1,
    +            ///  Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.
    +            IMAT1_SET: u1,
    +            ///  Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.
    +            ICAP1_SET: u1,
    +            ///  Reserved.
    +            RESERVED: u1,
    +            reserved9: u1,
    +            ///  Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.
    +            ILIM2_SET: u1,
    +            ///  Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.
    +            IMAT2_SET: u1,
    +            ///  Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.
    +            ICAP2_SET: u1,
    +            ///  Reserved.
    +            RESERVED: u3,
    +            ///  Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.
    +            ABORT_SET: u1,
    +            ///  Reserved.
    +            RESERVED: u16,
    +        }),
    +        ///  Interrupt Enable clear address
    +        INTEN_CLR: mmio.Mmio(packed struct(u32) {
    +            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    +            ILIM0_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    +            IMAT0_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    +            ICAP0_CLR: u1,
    +            ///  Reserved.
    +            RESERVED: u1,
    +            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    +            ILIM1_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    +            IMAT1_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    +            ICAP1_CLR: u1,
    +            ///  Reserved.
    +            RESERVED: u1,
    +            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    +            ILIM2_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    +            IMAT2_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    +            ICAP2_CLR: u1,
    +            ///  Reserved.
    +            RESERVED: u4,
    +            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    +            ABORT_CLR: u1,
    +            ///  Reserved.
    +            RESERVED: u16,
    +        }),
    +        ///  Count Control read address
    +        CNTCON: mmio.Mmio(packed struct(u32) {
    +            ///  Counter 0 rising edge mode, channel 0.
    +            TC0MCI0_RE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  A rising edge on MCI0 does not affect counter 0.
    +                    A_RISING_EDGE_ON_MCI = 0x0,
    +                    ///  If MODE0 is 1, counter 0 advances on a rising edge on MCI0.
    +                    RISING = 0x1,
    +                },
    +            },
    +            ///  Counter 0 falling edge mode, channel 0.
    +            TC0MCI0_FE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  A falling edge on MCI0 does not affect counter 0.
    +                    A_FALLING_EDGE_ON_MC = 0x0,
    +                    ///  If MODE0 is 1, counter 0 advances on a falling edge on MCI0.
    +                    FALLING = 0x1,
    +                },
    +            },
    +            ///  Counter 0 rising edge mode, channel 1.
    +            TC0MCI1_RE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  A rising edge on MCI1 does not affect counter 0.
    +                    A_RISING_EDGE_ON_MCI = 0x0,
    +                    ///  If MODE0 is 1, counter 0 advances on a rising edge on MCI1.
    +                    RISING = 0x1,
    +                },
    +            },
    +            ///  Counter 0 falling edge mode, channel 1.
    +            TC0MCI1_FE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  A falling edge on MCI1 does not affect counter 0.
    +                    A_FALLING_EDGE_ON_MC = 0x0,
    +                    ///  If MODE0 is 1, counter 0 advances on a falling edge on MCI1.
    +                    FALLING = 0x1,
    +                },
    +            },
    +            ///  Counter 0 rising edge mode, channel 2.
    +            TC0MCI2_RE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  A rising edge on MCI0 does not affect counter 0.
    +                    A_RISING_EDGE_ON_MCI = 0x0,
    +                    ///  If MODE0 is 1, counter 0 advances on a rising edge on MCI2.
    +                    RISING = 0x1,
    +                },
    +            },
    +            ///  Counter 0 falling edge mode, channel 2.
    +            TC0MCI2_FE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  A falling edge on MCI0 does not affect counter 0.
    +                    A_FALLING_EDGE_ON_MC = 0x0,
    +                    ///  If MODE0 is 1, counter 0 advances on a falling edge on MCI2.
    +                    FALLLING = 0x1,
    +                },
    +            },
    +            ///  Counter 1 rising edge mode, channel 0.
    +            TC1MCI0_RE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  A rising edge on MCI0 does not affect counter 1.
    +                    A_RISING_EDGE_ON_MCI = 0x0,
    +                    ///  If MODE1 is 1, counter 1 advances on a rising edge on MCI0.
    +                    RISING = 0x1,
    +                },
    +            },
    +            ///  Counter 1 falling edge mode, channel 0.
    +            TC1MCI0_FE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  A falling edge on MCI0 does not affect counter 1.
    +                    A_FALLING_EDGE_ON_MC = 0x0,
    +                    ///  If MODE1 is 1, counter 1 advances on a falling edge on MCI0.
    +                    FALLING = 0x1,
    +                },
    +            },
    +            ///  Counter 1 rising edge mode, channel 1.
    +            TC1MCI1_RE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  A rising edge on MCI1 does not affect counter 1.
    +                    A_RISING_EDGE_ON_MCI = 0x0,
    +                    ///  If MODE1 is 1, counter 1 advances on a rising edge on MCI1.
    +                    RISING = 0x1,
    +                },
    +            },
    +            ///  Counter 1 falling edge mode, channel 1.
    +            TC1MCI1_FE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  A falling edge on MCI0 does not affect counter 1.
    +                    A_FALLING_EDGE_ON_MC = 0x0,
    +                    ///  If MODE1 is 1, counter 1 advances on a falling edge on MCI1.
    +                    FALLING = 0x1,
    +                },
    +            },
    +            ///  Counter 1 rising edge mode, channel 2.
    +            TC1MCI2_RE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  A rising edge on MCI2 does not affect counter 1.
    +                    A_RISING_EDGE_ON_MCI = 0x0,
    +                    ///  If MODE1 is 1, counter 1 advances on a rising edge on MCI2.
    +                    RISING = 0x1,
    +                },
    +            },
    +            ///  Counter 1 falling edge mode, channel 2.
    +            TC1MCI2_FE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  A falling edge on MCI2 does not affect counter 1.
    +                    A_FALLING_EDGE_ON_MC = 0x0,
    +                    ///  If MODE1 is 1, counter 1 advances on a falling edge on MCI2.
    +                    FALLING = 0x1,
    +                },
    +            },
    +            ///  Counter 2 rising edge mode, channel 0.
    +            TC2MCI0_RE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  A rising edge on MCI0 does not affect counter 2.
    +                    A_RISING_EDGE_ON_MCI = 0x0,
    +                    ///  If MODE2 is 1, counter 2 advances on a rising edge on MCI0.
    +                    RISING = 0x1,
    +                },
    +            },
    +            ///  Counter 2 falling edge mode, channel 0.
    +            TC2MCI0_FE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  A falling edge on MCI0 does not affect counter 2.
    +                    A_FALLING_EDGE_ON_MC = 0x0,
    +                    ///  If MODE2 is 1, counter 2 advances on a falling edge on MCI0.
    +                    FALLING = 0x1,
    +                },
    +            },
    +            ///  Counter 2 rising edge mode, channel 1.
    +            TC2MCI1_RE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  A rising edge on MCI1 does not affect counter 2.
    +                    A_RISING_EDGE_ON_MCI = 0x0,
    +                    ///  If MODE2 is 1, counter 2 advances on a rising edge on MCI1.
    +                    RISING = 0x1,
    +                },
    +            },
    +            ///  Counter 2 falling edge mode, channel 1.
    +            TC2MCI1_FE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  A falling edge on MCI1 does not affect counter 2.
    +                    A_FALLING_EDGE_ON_MC = 0x0,
    +                    ///  If MODE2 is 1, counter 2 advances on a falling edge on MCI1.
    +                    FALLING = 0x1,
    +                },
    +            },
    +            ///  Counter 2 rising edge mode, channel 2.
    +            TC2MCI2_RE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  A rising edge on MCI2 does not affect counter 2.
    +                    A_RISING_EDGE_ON_MCI = 0x0,
    +                    ///  If MODE2 is 1, counter 2 advances on a rising edge on MCI2.
    +                    RISIING = 0x1,
    +                },
    +            },
    +            ///  Counter 2 falling edge mode, channel 2.
    +            TC2MCI2_FE: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  A falling edge on MCI2 does not affect counter 2.
    +                    A_FALLING_EDGE_ON_MC = 0x0,
    +                    ///  If MODE2 is 1, counter 2 advances on a falling edge on MCI2.
    +                    FALLING = 0x1,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u11,
    +            ///  Channel 0 counter/timer mode.
    +            CNTR0: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Channel 0 is in timer mode.
    +                    CHANNEL_0_IS_IN_TIME = 0x0,
    +                    ///  Channel 0 is in counter mode.
    +                    CHANNEL_0_IS_IN_COUN = 0x1,
    +                },
    +            },
    +            ///  Channel 1 counter/timer mode.
    +            CNTR1: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Channel 1 is in timer mode.
    +                    CHANNEL_1_IS_IN_TIME = 0x0,
    +                    ///  Channel 1 is in counter mode.
    +                    CHANNEL_1_IS_IN_COUN = 0x1,
    +                },
    +            },
    +            ///  Channel 2 counter/timer mode.
    +            CNTR2: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Channel 2 is in timer mode.
    +                    CHANNEL_2_IS_IN_TIME = 0x0,
    +                    ///  Channel 2 is in counter mode.
    +                    CHANNEL_2_IS_IN_COUN = 0x1,
    +                },
    +            },
    +        }),
    +        ///  Count Control set address
    +        CNTCON_SET: mmio.Mmio(packed struct(u32) {
    +            ///  Writing a one sets the corresponding bit in the CNTCON register.
    +            TC0MCI0_RE_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CNTCON register.
    +            TC0MCI0_FE_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CNTCON register.
    +            TC0MCI1_RE_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CNTCON register.
    +            TC0MCI1_FE_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CNTCON register.
    +            TC0MCI2_RE_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CNTCON register.
    +            TC0MCI2_FE_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CNTCON register.
    +            TC1MCI0_RE_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CNTCON register.
    +            TC1MCI0_FE_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CNTCON register.
    +            TC1MCI1_RE_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CNTCON register.
    +            TC1MCI1_FE_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CNTCON register.
    +            TC1MCI2_RE_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CNTCON register.
    +            TC1MCI2_FE_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CNTCON register.
    +            TC2MCI0_RE_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CNTCON register.
    +            TC2MCI0_FE_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CNTCON register.
    +            TC2MCI1_RE_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CNTCON register.
    +            TC2MCI1_FE_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CNTCON register.
    +            TC2MCI2_RE_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CNTCON register.
    +            TC2MCI2_FE_SET: u1,
    +            ///  Reserved.
    +            RESERVED: u11,
    +            ///  Writing a one sets the corresponding bit in the CNTCON register.
    +            CNTR0_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CNTCON register.
    +            CNTR1_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the CNTCON register.
    +            CNTR2_SET: u1,
    +        }),
    +        ///  Count Control clear address
    +        CNTCON_CLR: mmio.Mmio(packed struct(u32) {
    +            ///  Writing a one clears the corresponding bit in the CNTCON register.
    +            TC0MCI0_RE_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CNTCON register.
    +            TC0MCI0_FE_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CNTCON register.
    +            TC0MCI1_RE_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CNTCON register.
    +            TC0MCI1_FE_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CNTCON register.
    +            TC0MCI2_RE: u1,
    +            ///  Writing a one clears the corresponding bit in the CNTCON register.
    +            TC0MCI2_FE_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CNTCON register.
    +            TC1MCI0_RE_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CNTCON register.
    +            TC1MCI0_FE_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CNTCON register.
    +            TC1MCI1_RE_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CNTCON register.
    +            TC1MCI1_FE_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CNTCON register.
    +            TC1MCI2_RE_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CNTCON register.
    +            TC1MCI2_FE_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CNTCON register.
    +            TC2MCI0_RE_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CNTCON register.
    +            TC2MCI0_FE_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CNTCON register.
    +            TC2MCI1_RE_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CNTCON register.
    +            TC2MCI1_FE_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CNTCON register.
    +            TC2MCI2_RE_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CNTCON register.
    +            TC2MCI2_FE_CLR: u1,
    +            ///  Reserved.
    +            RESERVED: u11,
    +            ///  Writing a one clears the corresponding bit in the CNTCON register.
    +            CNTR0_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CNTCON register.
    +            CNTR1_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in the CNTCON register.
    +            CNTR2_CLR: u1,
    +        }),
    +        ///  Interrupt flags read address
    +        INTF: mmio.Mmio(packed struct(u32) {
    +            ///  Limit interrupt flag for channel 0.
    +            ILIM0_F: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  This interrupt source is not contributing to the MCPWM interrupt request.
    +                    THIS_INTERRUPT_SOURC = 0x0,
    +                    ///  If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.
    +                    IF_THE_CORRESPONDING = 0x1,
    +                },
    +            },
    +            ///  Match interrupt flag for channel 0.
    +            IMAT0_F: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  This interrupt source is not contributing to the MCPWM interrupt request.
    +                    THIS_INTERRUPT_SOURC = 0x0,
    +                    ///  If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.
    +                    IF_THE_CORRESPONDING = 0x1,
    +                },
    +            },
    +            ///  Capture interrupt flag for channel 0.
    +            ICAP0_F: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  This interrupt source is not contributing to the MCPWM interrupt request.
    +                    THIS_INTERRUPT_SOURC = 0x0,
    +                    ///  If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.
    +                    IF_THE_CORRESPONDING = 0x1,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u1,
    +            ///  Limit interrupt flag for channel 1.
    +            ILIM1_F: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  This interrupt source is not contributing to the MCPWM interrupt request.
    +                    THIS_INTERRUPT_SOURC = 0x0,
    +                    ///  If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.
    +                    IF_THE_CORRESPONDING = 0x1,
    +                },
    +            },
    +            ///  Match interrupt flag for channel 1.
    +            IMAT1_F: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  This interrupt source is not contributing to the MCPWM interrupt request.
    +                    THIS_INTERRUPT_SOURC = 0x0,
    +                    ///  If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.
    +                    IF_THE_CORRESPONDING = 0x1,
    +                },
    +            },
    +            ///  Capture interrupt flag for channel 1.
    +            ICAP1_F: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  This interrupt source is not contributing to the MCPWM interrupt request.
    +                    THIS_INTERRUPT_SOURC = 0x0,
    +                    ///  If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.
    +                    IF_THE_CORRESPONDING = 0x1,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u1,
    +            ///  Limit interrupt flag for channel 2.
    +            ILIM2_F: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  This interrupt source is not contributing to the MCPWM interrupt request.
    +                    THIS_INTERRUPT_SOURC = 0x0,
    +                    ///  If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.
    +                    IF_THE_CORRESPONDING = 0x1,
    +                },
    +            },
    +            ///  Match interrupt flag for channel 2.
    +            IMAT2_F: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  This interrupt source is not contributing to the MCPWM interrupt request.
    +                    THIS_INTERRUPT_SOURC = 0x0,
    +                    ///  If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.
    +                    IF_THE_CORRESPONDING = 0x1,
    +                },
    +            },
    +            ///  Capture interrupt flag for channel 2.
    +            ICAP2_F: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  This interrupt source is not contributing to the MCPWM interrupt request.
    +                    THIS_INTERRUPT_SOURC = 0x0,
    +                    ///  If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.
    +                    IF_THE_CORRESPONDING = 0x1,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u4,
    +            ///  Fast abort interrupt flag.
    +            ABORT_F: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  This interrupt source is not contributing to the MCPWM interrupt request.
    +                    THIS_INTERRUPT_SOURC = 0x0,
    +                    ///  If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.
    +                    IF_THE_CORRESPONDING = 0x1,
    +                },
    +            },
    +            ///  Reserved.
    +            RESERVED: u16,
    +        }),
    +        ///  Interrupt flags set address
    +        INTF_SET: mmio.Mmio(packed struct(u32) {
    +            ///  Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.
    +            ILIM0_F_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.
    +            IMAT0_F_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.
    +            ICAP0_F_SET: u1,
    +            ///  Reserved.
    +            RESERVED: u1,
    +            ///  Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.
    +            ILIM1_F_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.
    +            IMAT1_F_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.
    +            ICAP1_F_SET: u1,
    +            ///  Reserved.
    +            RESERVED: u1,
    +            ///  Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.
    +            ILIM2_F_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.
    +            IMAT2_F_SET: u1,
    +            ///  Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.
    +            ICAP2_F_SET: u1,
    +            ///  Reserved.
    +            RESERVED: u4,
    +            ///  Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.
    +            ABORT_F_SET: u1,
    +            ///  Reserved.
    +            RESERVED: u16,
    +        }),
    +        ///  Interrupt flags clear address
    +        INTF_CLR: mmio.Mmio(packed struct(u32) {
    +            ///  Writing a one clears the corresponding bit in the INTF register, thus clearing the corresponding interrupt request.
    +            ILIM0_F_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    +            IMAT0_F_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    +            ICAP0_F_CLR: u1,
    +            ///  Reserved.
    +            RESERVED: u1,
    +            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    +            ILIM1_F_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    +            IMAT1_F_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    +            ICAP1_F_CLR: u1,
    +            ///  Reserved.
    +            RESERVED: u1,
    +            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    +            ILIM2_F_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    +            IMAT2_F_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    +            ICAP2_F_CLR: u1,
    +            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    +            RESERVED: u4,
    +            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    +            ABORT_F_CLR: u1,
    +            ///  Reserved.
    +            RESERVED: u16,
    +        }),
    +        ///  Capture clear address
    +        CAP_CLR: mmio.Mmio(packed struct(u32) {
    +            ///  Writing a 1 to this bit clears the CAP0 register.
    +            CAP_CLR0: u1,
    +            ///  Writing a 1 to this bit clears the CAP1 register.
    +            CAP_CLR1: u1,
    +            ///  Writing a 1 to this bit clears the CAP2 register.
    +            CAP_CLR2: u1,
    +            ///  Reserved
    +            RESERVED: u29,
    +        }),
    +    };
    +
    +    ///  Repetitive Interrupt Timer (RIT)
    +    pub const RITIMER = extern struct {
    +        ///  Compare register
    +        COMPVAL: mmio.Mmio(packed struct(u32) {
    +            ///  Compare register. Holds the compare value which is compared to the counter.
    +            RICOMP: u32,
    +        }),
    +        ///  Mask register. This register holds the 32-bit mask value. A 1 written to any bit will force a compare on the corresponding bit of the counter and compare register.
    +        MASK: mmio.Mmio(packed struct(u32) {
    +            ///  Mask register. This register holds the 32-bit mask value. A one written to any bit overrides the result of the comparison for the corresponding bit of the counter and compare register (causes the comparison of the register bits to be always true).
    +            RIMASK: u32,
    +        }),
    +        ///  Control register.
    +        CTRL: mmio.Mmio(packed struct(u32) {
    +            ///  Interrupt flag
    +            RITINT: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  This bit is set to 1 by hardware whenever the counter value equals the masked compare value specified by the contents of RICOMPVAL and RIMASK registers. Writing a 1 to this bit will clear it to 0. Writing a 0 has no effect.
    +                    THIS_BIT_IS_SET_TO_1 = 0x1,
    +                    ///  The counter value does not equal the masked compare value.
    +                    THE_COUNTER_VALUE_DO = 0x0,
    +                },
    +            },
    +            ///  Timer enable clear
    +            RITENCLR: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  The timer will be cleared to 0 whenever the counter value equals the masked compare value specified by the contents of RICOMPVAL and RIMASK registers. This will occur on the same clock that sets the interrupt flag.
    +                    THE_TIMER_WILL_BE_CL = 0x1,
    +                    ///  The timer will not be cleared to 0.
    +                    THE_TIMER_WILL_NOT_B = 0x0,
    +                },
    +            },
    +            ///  Timer enable for debug
    +            RITENBR: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  The timer is halted when the processor is halted for debugging.
    +                    THE_TIMER_IS_HALTED_ = 0x1,
    +                    ///  Debug has no effect on the timer operation.
    +                    DEBUG_HAS_NO_EFFECT_ = 0x0,
    +                },
    +            },
    +            ///  Timer enable.
    +            RITEN: packed union {
    +                raw: u1,
    +                value: enum(u1) {
    +                    ///  Timer enabled. This can be overruled by a debug halt if enabled in bit 2.
    +                    TIMER_ENABLED_THIS_ = 0x1,
    +                    ///  Timer disabled.
    +                    TIMER_DISABLED_ = 0x0,
    +                },
    +            },
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u28,
    +        }),
    +        ///  32-bit counter
    +        COUNTER: mmio.Mmio(packed struct(u32) {
    +            ///  32-bit up counter. Counts continuously unless RITEN bit in RICTRL register is cleared or debug mode is entered (if enabled by the RITNEBR bit in RICTRL). Can be loaded to any value in software.
    +            RICOUNTER: u32,
    +        }),
    +    };
    +
    +    ///  I2S interface
    +    pub const I2S = extern struct {
    +        ///  I2S Digital Audio Output Register. Contains control bits for the I2S transmit channel.
    +        DAO: mmio.Mmio(packed struct(u32) {
    +            ///  Selects the number of bytes in data as follows:
    +            WORDWIDTH: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  8-bit data
    +                    @"8_BIT_DATA" = 0x0,
    +                    ///  16-bit data
    +                    @"16_BIT_DATA" = 0x1,
    +                    ///  32-bit data
    +                    @"32_BIT_DATA" = 0x3,
    +                    _,
    +                },
    +            },
    +            ///  When 1, data is of monaural format. When 0, the data is in stereo format.
    +            MONO: u1,
    +            ///  When 1, disables accesses on FIFOs, places the transmit channel in mute mode.
    +            STOP: u1,
    +            ///  When 1, asynchronously resets the transmit channel and FIFO.
    +            RESET: u1,
    +            ///  When 0, the interface is in master mode. When 1, the interface is in slave mode. See Section 34.7.2 for a summary of useful combinations for this bit with TXMODE.
    +            WS_SEL: u1,
    +            ///  Word select half period minus 1, i.e. WS 64clk period -> ws_halfperiod = 31.
    +            WS_HALFPERIOD: u9,
    +            ///  When 1, the transmit channel sends only zeroes.
    +            MUTE: u1,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u16,
    +        }),
    +        ///  I2S Digital Audio Input Register. Contains control bits for the I2S receive channel.
    +        DAI: mmio.Mmio(packed struct(u32) {
    +            ///  Selects the number of bytes in data as follows:
    +            WORDWIDTH: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  8-bit data
    +                    @"8_BIT_DATA" = 0x0,
    +                    ///  16-bit data
    +                    @"16_BIT_DATA" = 0x1,
    +                    ///  32-bit data
    +                    @"32_BIT_DATA" = 0x3,
    +                    _,
    +                },
    +            },
    +            ///  When 1, data is of monaural format. When 0, the data is in stereo format.
    +            MONO: u1,
    +            ///  When 1, disables accesses on FIFOs, places the transmit channel in mute mode.
    +            STOP: u1,
    +            ///  When 1, asynchronously reset the transmit channel and FIFO.
    +            RESET: u1,
    +            ///  When 0, the interface is in master mode. When 1, the interface is in slave mode. See Section 34.7.2 for a summary of useful combinations for this bit with RXMODE.
    +            WS_SEL: u1,
    +            ///  Word select half period minus 1, i.e. WS 64clk period -> ws_halfperiod = 31.
    +            WS_HALFPERIOD: u9,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u17,
    +        }),
    +        ///  I2S Transmit FIFO. Access register for the 8 x 32-bit transmitter FIFO.
    +        TXFIFO: mmio.Mmio(packed struct(u32) {
    +            ///  8 x 32-bit transmit FIFO.
    +            I2STXFIFO: u32,
    +        }),
    +        ///  I2S Receive FIFO. Access register for the 8 x 32-bit receiver FIFO.
    +        RXFIFO: mmio.Mmio(packed struct(u32) {
    +            ///  8 x 32-bit transmit FIFO.
    +            I2SRXFIFO: u32,
    +        }),
    +        ///  I2S Status Feedback Register. Contains status information about the I2S interface.
    +        STATE: mmio.Mmio(packed struct(u32) {
    +            ///  This bit reflects the presence of Receive Interrupt or Transmit Interrupt. This is determined by comparing the current FIFO levels to the rx_depth_irq and tx_depth_irq fields in the IRQ register.
    +            IRQ: u1,
    +            ///  This bit reflects the presence of Receive or Transmit DMA Request 1. This is determined by comparing the current FIFO levels to the rx_depth_dma1 and tx_depth_dma1 fields in the DMA1 register.
    +            DMAREQ1: u1,
    +            ///  This bit reflects the presence of Receive or Transmit DMA Request 2. This is determined by comparing the current FIFO levels to the rx_depth_dma2 and tx_depth_dma2 fields in the DMA2 register.
    +            DMAREQ2: u1,
    +            ///  Reserved.
    +            RESERVED: u5,
    +            ///  Reflects the current level of the Receive FIFO.
    +            RX_LEVEL: u4,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u4,
    +            ///  Reflects the current level of the Transmit FIFO.
    +            TX_LEVEL: u4,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u12,
    +        }),
    +        ///  I2S DMA Configuration Register 1. Contains control information for DMA request 1.
    +        DMA1: mmio.Mmio(packed struct(u32) {
    +            ///  When 1, enables DMA1 for I2S receive.
    +            RX_DMA1_ENABLE: u1,
    +            ///  When 1, enables DMA1 for I2S transmit.
    +            TX_DMA1_ENABLE: u1,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u6,
    +            ///  Set the FIFO level that triggers a receive DMA request on DMA1.
    +            RX_DEPTH_DMA1: u4,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u4,
    +            ///  Set the FIFO level that triggers a transmit DMA request on DMA1.
    +            TX_DEPTH_DMA1: u4,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u12,
    +        }),
    +        ///  I2S DMA Configuration Register 2. Contains control information for DMA request 2.
    +        DMA2: mmio.Mmio(packed struct(u32) {
    +            ///  When 1, enables DMA1 for I2S receive.
    +            RX_DMA2_ENABLE: u1,
    +            ///  When 1, enables DMA1 for I2S transmit.
    +            TX_DMA2_ENABLE: u1,
    +            ///  Reserved.
    +            RESERVED: u6,
    +            ///  Set the FIFO level that triggers a receive DMA request on DMA2.
    +            RX_DEPTH_DMA2: u4,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u4,
    +            ///  Set the FIFO level that triggers a transmit DMA request on DMA2.
    +            TX_DEPTH_DMA2: u4,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u12,
    +        }),
    +        ///  I2S Interrupt Request Control Register. Contains bits that control how the I2S interrupt request is generated.
    +        IRQ: mmio.Mmio(packed struct(u32) {
    +            ///  When 1, enables I2S receive interrupt.
    +            RX_IRQ_ENABLE: u1,
    +            ///  When 1, enables I2S transmit interrupt.
    +            TX_IRQ_ENABLE: u1,
    +            ///  Reserved.
    +            RESERVED: u6,
    +            ///  Set the FIFO level on which to create an irq request.
    +            RX_DEPTH_IRQ: u4,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u4,
    +            ///  Set the FIFO level on which to create an irq request.
    +            TX_DEPTH_IRQ: u4,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u12,
    +        }),
    +        ///  I2S Transmit MCLK divider. This register determines the I2S TX MCLK rate by specifying the value to divide PCLK by in order to produce MCLK.
    +        TXRATE: mmio.Mmio(packed struct(u32) {
    +            ///  I2S transmit MCLK rate denominator. This value is used to divide PCLK to produce the transmit MCLK. Eight bits of fractional divide supports a wide range of possibilities. A value of 0 stops the clock.
    +            Y_DIVIDER: u8,
    +            ///  I2S transmit MCLK rate numerator. This value is used to multiply PCLK by to produce the transmit MCLK. A value of 0 stops the clock. Eight bits of fractional divide supports a wide range of possibilities. Note: the resulting ratio X/Y is divided by 2.
    +            X_DIVIDER: u8,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u16,
    +        }),
    +        ///  I2S Receive MCLK divider. This register determines the I2S RX MCLK rate by specifying the value to divide PCLK by in order to produce MCLK.
    +        RXRATE: mmio.Mmio(packed struct(u32) {
    +            ///  I2S receive MCLK rate denominator. This value is used to divide PCLK to produce the receive MCLK. Eight bits of fractional divide supports a wide range of possibilities. A value of 0 stops the clock.
    +            Y_DIVIDER: u8,
    +            ///  I2S receive MCLK rate numerator. This value is used to multiply PCLK by to produce the receive MCLK. A value of 0 stops the clock. Eight bits of fractional divide supports a wide range of possibilities. Note: the resulting ratio X/Y is divided by 2.
    +            X_DIVIDER: u8,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u16,
    +        }),
    +        ///  I2S Transmit bit rate divider. This register determines the I2S transmit bit rate by specifying the value to divide TX_MCLK by in order to produce the transmit bit clock.
    +        TXBITRATE: mmio.Mmio(packed struct(u32) {
    +            ///  I2S transmit bit rate. This value plus one is used to divide TX_MCLK to produce the transmit bit clock.
    +            TX_BITRATE: u6,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u26,
    +        }),
    +        ///  I2S Receive bit rate divider. This register determines the I2S receive bit rate by specifying the value to divide RX_MCLK by in order to produce the receive bit clock.
    +        RXBITRATE: mmio.Mmio(packed struct(u32) {
    +            ///  I2S receive bit rate. This value plus one is used to divide RX_MCLK to produce the receive bit clock.
    +            RX_BITRATE: u6,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u26,
    +        }),
    +        ///  I2S Transmit mode control.
    +        TXMODE: mmio.Mmio(packed struct(u32) {
    +            ///  Clock source selection for the transmit bit clock divider.
    +            TXCLKSEL: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Select the TX fractional rate divider clock output as the source
    +                    SELECT_THE_TX_FRACTI = 0x0,
    +                    ///  Select the RX_MCLK signal as the TX_MCLK clock source
    +                    SELECT_THE_RX_MCLK_S = 0x2,
    +                    _,
    +                },
    +            },
    +            ///  Transmit 4-pin mode selection. When 1, enables 4-pin mode.
    +            TX4PIN: u1,
    +            ///  Enable for the TX_MCLK output. When 0, output of TX_MCLK is not enabled. When 1, output of TX_MCLK is enabled.
    +            TXMCENA: u1,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u28,
    +        }),
    +        ///  I2S Receive mode control.
    +        RXMODE: mmio.Mmio(packed struct(u32) {
    +            ///  Clock source selection for the receive bit clock divider.
    +            RXCLKSEL: packed union {
    +                raw: u2,
    +                value: enum(u2) {
    +                    ///  Select the RX fractional rate divider clock output as the source
    +                    SELECT_THE_RX_FRACTI = 0x0,
    +                    ///  Select the TX_MCLK signal as the RX_MCLK clock source
    +                    SELECT_THE_TX_MCLK_S = 0x2,
    +                    _,
    +                },
    +            },
    +            ///  Receive 4-pin mode selection. When 1, enables 4-pin mode.
    +            RX4PIN: u1,
    +            ///  Enable for the RX_MCLK output. When 0, output of RX_MCLK is not enabled. When 1, output of RX_MCLK is enabled.
    +            RXMCENA: u1,
    +            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    +            RESERVED: u28,
    +        }),
    +    };
    +};
    diff --git a/src/hals/LPC176x5x.zig b/src/hals/LPC176x5x.zig
    new file mode 100644
    index 000000000..3db032e0e
    --- /dev/null
    +++ b/src/hals/LPC176x5x.zig
    @@ -0,0 +1,205 @@
    +const std = @import("std");
    +const micro = @import("microzig");
    +const chip = @import("registers.zig");
    +const regs = chip.registers;
    +
    +pub usingnamespace chip;
    +
    +pub const clock = struct {
    +    pub const Domain = enum {
    +        cpu,
    +    };
    +};
    +
    +pub const clock_frequencies = .{
    +    .cpu = 100_000_000, // 100 Mhz
    +};
    +
    +pub const PinTarget = enum(u2) {
    +    func00 = 0b00,
    +    func01 = 0b01,
    +    func10 = 0b10,
    +    func11 = 0b11,
    +};
    +
    +pub fn parse_pin(comptime spec: []const u8) type {
    +    const invalid_format_msg = "The given pin '" ++ spec ++ "' has an invalid format. Pins must follow the format \"P{Port}.{Pin}\" scheme.";
    +    if (spec[0] != 'P')
    +        @compileError(invalid_format_msg);
    +
    +    const index = std.mem.indexOfScalar(u8, spec, '.') orelse @compileError(invalid_format_msg);
    +
    +    const _port: comptime_int = std.fmt.parseInt(u3, spec[1..index], 10) catch @compileError(invalid_format_msg);
    +    const _pin: comptime_int = std.fmt.parseInt(u5, spec[index + 1 ..], 10) catch @compileError(invalid_format_msg);
    +
    +    const sel_reg_name = std.fmt.comptimePrint("PINSEL{d}", .{(2 * _port + _pin / 16)});
    +
    +    const _regs = struct {
    +        const name_suffix = std.fmt.comptimePrint("{d}", .{_port});
    +
    +        const pinsel_reg = @field(regs.PINCONNECT, sel_reg_name);
    +        const pinsel_field = std.fmt.comptimePrint("P{d}_{d}", .{ _port, _pin });
    +
    +        const dir = @field(regs.GPIO, "DIR" ++ name_suffix);
    +        const pin = @field(regs.GPIO, "PIN" ++ name_suffix);
    +        const set = @field(regs.GPIO, "SET" ++ name_suffix);
    +        const clr = @field(regs.GPIO, "CLR" ++ name_suffix);
    +        const mask = @field(regs.GPIO, "MASK" ++ name_suffix);
    +    };
    +
    +    return struct {
    +        pub const port: u3 = _port;
    +        pub const pin: u5 = _pin;
    +        pub const regs = _regs;
    +        const gpio_mask: u32 = (1 << pin);
    +
    +        pub const Targets = PinTarget;
    +    };
    +}
    +
    +pub fn route_pin(comptime pin: type, function: PinTarget) void {
    +    var val = pin.regs.pinsel_reg.read();
    +    @field(val, pin.regs.pinsel_field) = @enumToInt(function);
    +    pin.regs.pinsel_reg.write(val);
    +}
    +
    +pub const gpio = struct {
    +    pub fn set_output(comptime pin: type) void {
    +        pin.regs.dir.raw |= pin.gpio_mask;
    +    }
    +    pub fn set_input(comptime pin: type) void {
    +        pin.regs.dir.raw &= ~pin.gpio_mask;
    +    }
    +
    +    pub fn read(comptime pin: type) micro.gpio.State {
    +        return if ((pin.regs.pin.raw & pin.gpio_mask) != 0)
    +            micro.gpio.State.high
    +        else
    +            micro.gpio.State.low;
    +    }
    +
    +    pub fn write(comptime pin: type, state: micro.gpio.State) void {
    +        if (state == .high) {
    +            pin.regs.set.raw = pin.gpio_mask;
    +        } else {
    +            pin.regs.clr.raw = pin.gpio_mask;
    +        }
    +    }
    +};
    +
    +pub const uart = struct {
    +    pub const DataBits = enum(u2) {
    +        five = 0,
    +        six = 1,
    +        seven = 2,
    +        eight = 3,
    +    };
    +
    +    pub const StopBits = enum(u1) {
    +        one = 0,
    +        two = 1,
    +    };
    +
    +    pub const Parity = enum(u2) {
    +        odd = 0,
    +        even = 1,
    +        mark = 2,
    +        space = 3,
    +    };
    +
    +    pub const CClkDiv = enum(u2) {
    +        four = 0,
    +        one = 1,
    +        two = 2,
    +        eight = 3,
    +    };
    +};
    +
    +pub fn Uart(comptime index: usize, comptime pins: micro.uart.Pins) type {
    +    if (pins.tx != null or pins.rx != null)
    +        @compileError("TODO: custom pins are not currently supported");
    +
    +    return struct {
    +        const UARTn = switch (index) {
    +            0 => regs.UART0,
    +            1 => regs.UART1,
    +            2 => regs.UART2,
    +            3 => regs.UART3,
    +            else => @compileError("LPC1768 has 4 UARTs available."),
    +        };
    +        const Self = @This();
    +
    +        pub fn init(config: micro.uart.Config) !Self {
    +            micro.debug.write("0");
    +            switch (index) {
    +                0 => {
    +                    regs.SYSCON.PCONP.modify(.{ .PCUART0 = 1 });
    +                    regs.SYSCON.PCLKSEL0.modify(.{ .PCLK_UART0 = @enumToInt(uart.CClkDiv.four) });
    +                },
    +                1 => {
    +                    regs.SYSCON.PCONP.modify(.{ .PCUART1 = 1 });
    +                    regs.SYSCON.PCLKSEL0.modify(.{ .PCLK_UART1 = @enumToInt(uart.CClkDiv.four) });
    +                },
    +                2 => {
    +                    regs.SYSCON.PCONP.modify(.{ .PCUART2 = 1 });
    +                    regs.SYSCON.PCLKSEL1.modify(.{ .PCLK_UART2 = @enumToInt(uart.CClkDiv.four) });
    +                },
    +                3 => {
    +                    regs.SYSCON.PCONP.modify(.{ .PCUART3 = 1 });
    +                    regs.SYSCON.PCLKSEL1.modify(.{ .PCLK_UART3 = @enumToInt(uart.CClkDiv.four) });
    +                },
    +                else => unreachable,
    +            }
    +            micro.debug.write("1");
    +
    +            UARTn.LCR.modify(.{
    +                // 8N1
    +                .WLS = @enumToInt(config.data_bits),
    +                .SBS = @enumToInt(config.stop_bits),
    +                .PE = if (config.parity != null) @as(u1, 1) else @as(u1, 0),
    +                .PS = if (config.parity) |p| @enumToInt(p) else @enumToInt(uart.Parity.odd),
    +                .BC = 0,
    +                .DLAB = 1,
    +            });
    +            micro.debug.write("2");
    +
    +            // TODO: UARTN_FIFOS_ARE_DISA is not available in all uarts
    +            //UARTn.FCR.modify(.{ .FIFOEN = .UARTN_FIFOS_ARE_DISA });
    +
    +            micro.debug.writer().print("clock: {} baud: {} ", .{
    +                micro.clock.get().cpu,
    +                config.baud_rate,
    +            }) catch {};
    +
    +            const pclk = micro.clock.get().cpu / 4;
    +            const divider = (pclk / (16 * config.baud_rate));
    +
    +            const regval = std.math.cast(u16, divider) orelse return error.UnsupportedBaudRate;
    +
    +            UARTn.DLL.modify(.{ .DLLSB = @truncate(u8, regval >> 0x00) });
    +            UARTn.DLM.modify(.{ .DLMSB = @truncate(u8, regval >> 0x08) });
    +
    +            UARTn.LCR.modify(.{ .DLAB = 0 });
    +
    +            return Self{};
    +        }
    +
    +        pub fn can_write(self: Self) bool {
    +            _ = self;
    +            return (UARTn.LSR.read().THRE == 1);
    +        }
    +        pub fn tx(self: Self, ch: u8) void {
    +            while (!self.can_write()) {} // Wait for Previous transmission
    +            UARTn.THR.raw = ch; // Load the data to be transmitted
    +        }
    +
    +        pub fn can_read(self: Self) bool {
    +            _ = self;
    +            return (UARTn.LSR.read().RDR == 1);
    +        }
    +        pub fn rx(self: Self) u8 {
    +            while (!self.can_read()) {} // Wait till the data is received
    +            return UARTn.RBR.read().RBR; // Read received data
    +        }
    +    };
    +}
    
    From 488cb11650bea6350ddc2ffe6a0db15a89627ae0 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sat, 18 Feb 2023 17:06:25 -0500
    Subject: [PATCH 043/286] Initial commit
    
    ---
     .buildkite/pipeline.yml   |  4 ++++
     .gitignore                |  2 ++
     .gitmodules               |  3 +++
     LICENSE                   | 19 +++++++++++++++++++
     README.adoc               |  6 ++++++
     build.zig                 | 35 +++++++++++++++++++++++++++++++++++
     deps/microzig             |  1 +
     src/boards.zig            |  6 ++++++
     src/chips.zig             |  6 ++++++
     test/programs/minimal.zig |  5 +++++
     10 files changed, 87 insertions(+)
     create mode 100644 .buildkite/pipeline.yml
     create mode 100644 .gitignore
     create mode 100644 .gitmodules
     create mode 100644 LICENSE
     create mode 100644 README.adoc
     create mode 100644 build.zig
     create mode 160000 deps/microzig
     create mode 100644 src/boards.zig
     create mode 100644 src/chips.zig
     create mode 100644 test/programs/minimal.zig
    
    diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml
    new file mode 100644
    index 000000000..7767bbb66
    --- /dev/null
    +++ b/.buildkite/pipeline.yml
    @@ -0,0 +1,4 @@
    +steps:
    +  - group: Build
    +    steps:
    +    - command: zig build
    diff --git a/.gitignore b/.gitignore
    new file mode 100644
    index 000000000..4c82b07c0
    --- /dev/null
    +++ b/.gitignore
    @@ -0,0 +1,2 @@
    +zig-cache
    +zig-out
    diff --git a/.gitmodules b/.gitmodules
    new file mode 100644
    index 000000000..32e895ccb
    --- /dev/null
    +++ b/.gitmodules
    @@ -0,0 +1,3 @@
    +[submodule "deps/microzig"]
    +	path = deps/microzig
    +	url = https://github.com/ZigEmbeddedGroup/microzig.git
    diff --git a/LICENSE b/LICENSE
    new file mode 100644
    index 000000000..c1cc5ecad
    --- /dev/null
    +++ b/LICENSE
    @@ -0,0 +1,19 @@
    +Copyright (c) 2022 
    +
    +This software is provided 'as-is', without any express or implied warranty. In
    +no event will the authors be held liable for any damages arising from the use
    +of this software.
    +
    +Permission is granted to anyone to use this software for any purpose, including
    +commercial applications, and to alter it and redistribute it freely, subject to
    +the following restrictions:
    +
    +1. The origin of this software must not be misrepresented; you must not claim
    +that you wrote the original software. If you use this software in a product, an
    +acknowledgment in the product documentation would be appreciated but is not
    +required.
    +
    +2. Altered source versions must be plainly marked as such, and must not be
    +misrepresented as being the original software.
    +
    +3. This notice may not be removed or altered from any source distribution.
    diff --git a/README.adoc b/README.adoc
    new file mode 100644
    index 000000000..46ca05775
    --- /dev/null
    +++ b/README.adoc
    @@ -0,0 +1,6 @@
    += Hardware Support Package Template
    +
    +1. Update LICENSE file
    +2. Update `microzig` submodule under `deps/`
    +3. Add chips/boards/hals
    +4. Set up buildkite pipeline
    diff --git a/build.zig b/build.zig
    new file mode 100644
    index 000000000..3b787fe3f
    --- /dev/null
    +++ b/build.zig
    @@ -0,0 +1,35 @@
    +const std = @import("std");
    +const microzig = @import("deps/microzig/src/main.zig");
    +const boards = @import("src/boards.zig");
    +const chips = @import("src/chips.zig");
    +
    +pub fn build(b: *std.build.Builder) void {
    +    const optimize = b.standardOptimizeOption(.{});
    +    inline for (@typeInfo(boards).Struct.decls) |decl| {
    +        if (!decl.is_pub)
    +            continue;
    +
    +        const exe = microzig.addEmbeddedExecutable(
    +            b,
    +            @field(boards, decl.name).name ++ ".minimal",
    +            "test/programs/minimal.zig",
    +            .{ .board = @field(boards, decl.name) },
    +            .{ .optimize = optimize },
    +        );
    +        exe.install();
    +    }
    +
    +    inline for (@typeInfo(chips).Struct.decls) |decl| {
    +        if (!decl.is_pub)
    +            continue;
    +
    +        const exe = microzig.addEmbeddedExecutable(
    +            b,
    +            @field(chips, decl.name).name ++ ".minimal",
    +            "test/programs/minimal.zig",
    +            .{ .chip = @field(chips, decl.name) },
    +            .{ .optimize = optimize },
    +        );
    +        exe.install();
    +    }
    +}
    diff --git a/deps/microzig b/deps/microzig
    new file mode 160000
    index 000000000..97ca5497d
    --- /dev/null
    +++ b/deps/microzig
    @@ -0,0 +1 @@
    +Subproject commit 97ca5497da0f22d025e18bced9311efed088d893
    diff --git a/src/boards.zig b/src/boards.zig
    new file mode 100644
    index 000000000..2cb647a34
    --- /dev/null
    +++ b/src/boards.zig
    @@ -0,0 +1,6 @@
    +const std = @import("std");
    +const microzig = @import("../deps/microzig/src/main.zig");
    +
    +fn root_dir() []const u8 {
    +    return std.fs.path.dirname(@src().file) orelse ".";
    +}
    diff --git a/src/chips.zig b/src/chips.zig
    new file mode 100644
    index 000000000..2cb647a34
    --- /dev/null
    +++ b/src/chips.zig
    @@ -0,0 +1,6 @@
    +const std = @import("std");
    +const microzig = @import("../deps/microzig/src/main.zig");
    +
    +fn root_dir() []const u8 {
    +    return std.fs.path.dirname(@src().file) orelse ".";
    +}
    diff --git a/test/programs/minimal.zig b/test/programs/minimal.zig
    new file mode 100644
    index 000000000..5258ce311
    --- /dev/null
    +++ b/test/programs/minimal.zig
    @@ -0,0 +1,5 @@
    +const micro = @import("microzig");
    +
    +pub fn main() void {
    +    // This function will contain the application logic.
    +}
    
    From 29221c27f54ba440e632620ffd3241d74a1ff3b2 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sat, 18 Feb 2023 17:10:04 -0500
    Subject: [PATCH 044/286] Initial commit
    
    ---
     .buildkite/pipeline.yml   |  4 ++++
     .gitignore                |  2 ++
     .gitmodules               |  3 +++
     LICENSE                   | 19 +++++++++++++++++++
     README.adoc               |  6 ++++++
     build.zig                 | 35 +++++++++++++++++++++++++++++++++++
     deps/microzig             |  1 +
     src/boards.zig            |  6 ++++++
     src/chips.zig             |  6 ++++++
     test/programs/minimal.zig |  5 +++++
     10 files changed, 87 insertions(+)
     create mode 100644 .buildkite/pipeline.yml
     create mode 100644 .gitignore
     create mode 100644 .gitmodules
     create mode 100644 LICENSE
     create mode 100644 README.adoc
     create mode 100644 build.zig
     create mode 160000 deps/microzig
     create mode 100644 src/boards.zig
     create mode 100644 src/chips.zig
     create mode 100644 test/programs/minimal.zig
    
    diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml
    new file mode 100644
    index 000000000..7767bbb66
    --- /dev/null
    +++ b/.buildkite/pipeline.yml
    @@ -0,0 +1,4 @@
    +steps:
    +  - group: Build
    +    steps:
    +    - command: zig build
    diff --git a/.gitignore b/.gitignore
    new file mode 100644
    index 000000000..4c82b07c0
    --- /dev/null
    +++ b/.gitignore
    @@ -0,0 +1,2 @@
    +zig-cache
    +zig-out
    diff --git a/.gitmodules b/.gitmodules
    new file mode 100644
    index 000000000..32e895ccb
    --- /dev/null
    +++ b/.gitmodules
    @@ -0,0 +1,3 @@
    +[submodule "deps/microzig"]
    +	path = deps/microzig
    +	url = https://github.com/ZigEmbeddedGroup/microzig.git
    diff --git a/LICENSE b/LICENSE
    new file mode 100644
    index 000000000..c1cc5ecad
    --- /dev/null
    +++ b/LICENSE
    @@ -0,0 +1,19 @@
    +Copyright (c) 2022 
    +
    +This software is provided 'as-is', without any express or implied warranty. In
    +no event will the authors be held liable for any damages arising from the use
    +of this software.
    +
    +Permission is granted to anyone to use this software for any purpose, including
    +commercial applications, and to alter it and redistribute it freely, subject to
    +the following restrictions:
    +
    +1. The origin of this software must not be misrepresented; you must not claim
    +that you wrote the original software. If you use this software in a product, an
    +acknowledgment in the product documentation would be appreciated but is not
    +required.
    +
    +2. Altered source versions must be plainly marked as such, and must not be
    +misrepresented as being the original software.
    +
    +3. This notice may not be removed or altered from any source distribution.
    diff --git a/README.adoc b/README.adoc
    new file mode 100644
    index 000000000..46ca05775
    --- /dev/null
    +++ b/README.adoc
    @@ -0,0 +1,6 @@
    += Hardware Support Package Template
    +
    +1. Update LICENSE file
    +2. Update `microzig` submodule under `deps/`
    +3. Add chips/boards/hals
    +4. Set up buildkite pipeline
    diff --git a/build.zig b/build.zig
    new file mode 100644
    index 000000000..3b787fe3f
    --- /dev/null
    +++ b/build.zig
    @@ -0,0 +1,35 @@
    +const std = @import("std");
    +const microzig = @import("deps/microzig/src/main.zig");
    +const boards = @import("src/boards.zig");
    +const chips = @import("src/chips.zig");
    +
    +pub fn build(b: *std.build.Builder) void {
    +    const optimize = b.standardOptimizeOption(.{});
    +    inline for (@typeInfo(boards).Struct.decls) |decl| {
    +        if (!decl.is_pub)
    +            continue;
    +
    +        const exe = microzig.addEmbeddedExecutable(
    +            b,
    +            @field(boards, decl.name).name ++ ".minimal",
    +            "test/programs/minimal.zig",
    +            .{ .board = @field(boards, decl.name) },
    +            .{ .optimize = optimize },
    +        );
    +        exe.install();
    +    }
    +
    +    inline for (@typeInfo(chips).Struct.decls) |decl| {
    +        if (!decl.is_pub)
    +            continue;
    +
    +        const exe = microzig.addEmbeddedExecutable(
    +            b,
    +            @field(chips, decl.name).name ++ ".minimal",
    +            "test/programs/minimal.zig",
    +            .{ .chip = @field(chips, decl.name) },
    +            .{ .optimize = optimize },
    +        );
    +        exe.install();
    +    }
    +}
    diff --git a/deps/microzig b/deps/microzig
    new file mode 160000
    index 000000000..97ca5497d
    --- /dev/null
    +++ b/deps/microzig
    @@ -0,0 +1 @@
    +Subproject commit 97ca5497da0f22d025e18bced9311efed088d893
    diff --git a/src/boards.zig b/src/boards.zig
    new file mode 100644
    index 000000000..2cb647a34
    --- /dev/null
    +++ b/src/boards.zig
    @@ -0,0 +1,6 @@
    +const std = @import("std");
    +const microzig = @import("../deps/microzig/src/main.zig");
    +
    +fn root_dir() []const u8 {
    +    return std.fs.path.dirname(@src().file) orelse ".";
    +}
    diff --git a/src/chips.zig b/src/chips.zig
    new file mode 100644
    index 000000000..2cb647a34
    --- /dev/null
    +++ b/src/chips.zig
    @@ -0,0 +1,6 @@
    +const std = @import("std");
    +const microzig = @import("../deps/microzig/src/main.zig");
    +
    +fn root_dir() []const u8 {
    +    return std.fs.path.dirname(@src().file) orelse ".";
    +}
    diff --git a/test/programs/minimal.zig b/test/programs/minimal.zig
    new file mode 100644
    index 000000000..5258ce311
    --- /dev/null
    +++ b/test/programs/minimal.zig
    @@ -0,0 +1,5 @@
    +const micro = @import("microzig");
    +
    +pub fn main() void {
    +    // This function will contain the application logic.
    +}
    
    From 5fb80ada81470de26b3cdb99707d62fd5c68c027 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sat, 18 Feb 2023 17:48:31 -0500
    Subject: [PATCH 045/286] add chips and boards (#1)
    
    ---
     .buildkite/pipeline.yml     |    2 +-
     LICENSE                     |    2 +-
     README.adoc                 |   22 +-
     deps/microzig               |    2 +-
     src/boards.zig              |   17 +-
     src/boards/arduino_nano.zig |   33 +
     src/boards/arduino_uno.zig  |   32 +
     src/chips.zig               |   13 +-
     src/chips/ATmega328P.json   | 2947 +++++++++++++++++++++++++++++++++++
     src/chips/ATmega328P.zig    | 1388 +++++++++++++++++
     src/hals/ATmega328P.zig     |  191 +++
     11 files changed, 4638 insertions(+), 11 deletions(-)
     create mode 100644 src/boards/arduino_nano.zig
     create mode 100644 src/boards/arduino_uno.zig
     create mode 100644 src/chips/ATmega328P.json
     create mode 100644 src/chips/ATmega328P.zig
     create mode 100644 src/hals/ATmega328P.zig
    
    diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml
    index 7767bbb66..24d964669 100644
    --- a/.buildkite/pipeline.yml
    +++ b/.buildkite/pipeline.yml
    @@ -1,4 +1,4 @@
     steps:
       - group: Build
         steps:
    -    - command: zig build
    +    - command: zig build -Doptimize=ReleaseSmall
    diff --git a/LICENSE b/LICENSE
    index c1cc5ecad..bcb425d88 100644
    --- a/LICENSE
    +++ b/LICENSE
    @@ -1,4 +1,4 @@
    -Copyright (c) 2022 
    +Copyright (c) 2022 Zig Embedded Group Contributors
     
     This software is provided 'as-is', without any express or implied warranty. In
     no event will the authors be held liable for any damages arising from the use
    diff --git a/README.adoc b/README.adoc
    index 46ca05775..f4214f4b0 100644
    --- a/README.adoc
    +++ b/README.adoc
    @@ -1,6 +1,18 @@
    -= Hardware Support Package Template
    += Microchip ATmega Hardware Support Package
     
    -1. Update LICENSE file
    -2. Update `microzig` submodule under `deps/`
    -3. Add chips/boards/hals
    -4. Set up buildkite pipeline
    +Note: for testing, renode supports arduino nano 33 BLE
    +
    +Currently LLVM is having trouble lowering AVR when this is built in debug mode:
    +
    +[source]
    +----
    +LLVM Emit Object... Don't know how to custom lower this!
    +UNREACHABLE executed at /Users/mattnite/code/llvm-project-15/llvm/lib/Target/AVR/AVRISelLowering.cpp:842!
    +----
    +
    +for now always build in release small:
    +
    +[source]
    +----
    +zig build -Doptimize=ReleaseSmall
    +----
    diff --git a/deps/microzig b/deps/microzig
    index 97ca5497d..2d0ee5c47 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 97ca5497da0f22d025e18bced9311efed088d893
    +Subproject commit 2d0ee5c4731de1d81afb9c8e08ba4e8c2c2cfbf3
    diff --git a/src/boards.zig b/src/boards.zig
    index 2cb647a34..928877039 100644
    --- a/src/boards.zig
    +++ b/src/boards.zig
    @@ -1,6 +1,19 @@
     const std = @import("std");
    -const microzig = @import("../deps/microzig/src/main.zig");
    +const micro = @import("../deps/microzig/src/main.zig");
    +const chips = @import("chips.zig");
     
     fn root_dir() []const u8 {
    -    return std.fs.path.dirname(@src().file) orelse ".";
    +    return std.fs.path.dirname(@src().file) orelse unreachable;
     }
    +
    +pub const arduino_nano = micro.Board{
    +    .name = "Arduino Nano",
    +    .source = .{ .path = root_dir() ++ "/boards/arduino_nano.zig" },
    +    .chip = chips.atmega328p,
    +};
    +
    +pub const arduino_uno = micro.Board{
    +    .name = "Arduino Uno",
    +    .source = .{ .path = root_dir() ++ "/boards/arduino_uno.zig" },
    +    .chip = chips.atmega328p,
    +};
    diff --git a/src/boards/arduino_nano.zig b/src/boards/arduino_nano.zig
    new file mode 100644
    index 000000000..96490f87a
    --- /dev/null
    +++ b/src/boards/arduino_nano.zig
    @@ -0,0 +1,33 @@
    +pub const chip = @import("chip");
    +
    +pub const clock_frequencies = .{
    +    .cpu = 16_000_000,
    +};
    +
    +pub const pin_map = .{
    +    // Port A
    +    .D0 = "PD0",
    +    .D1 = "PD1",
    +    .D2 = "PD2",
    +    .D3 = "PD3",
    +    .D4 = "PD4",
    +    .D5 = "PD5",
    +    .D6 = "PD6",
    +    .D7 = "PD7",
    +    // Port B
    +    .D8 = "PB0",
    +    .D9 = "PB1",
    +    .D10 = "PB2",
    +    .D11 = "PB3",
    +    .D12 = "PB4",
    +    .D13 = "PB5",
    +    // Port C (Analog)
    +    .A0 = "PC0",
    +    .A1 = "PC1",
    +    .A2 = "PC2",
    +    .A3 = "PC3",
    +    .A4 = "PC4",
    +    .A5 = "PC5",
    +    .A6 = "ADC6",
    +    .A7 = "ADC7",
    +};
    diff --git a/src/boards/arduino_uno.zig b/src/boards/arduino_uno.zig
    new file mode 100644
    index 000000000..9dd729c0d
    --- /dev/null
    +++ b/src/boards/arduino_uno.zig
    @@ -0,0 +1,32 @@
    +pub const chip = @import("chip");
    +
    +pub const clock_frequencies = .{
    +    .cpu = 16_000_000,
    +};
    +
    +pub const pin_map = .{
    +    // Port D
    +    .D0 = "PD0",
    +    .D1 = "PD1",
    +    .D2 = "PD2",
    +    .D3 = "PD3",
    +    .D4 = "PD4",
    +    .D5 = "PD5",
    +    .D6 = "PD6",
    +    .D7 = "PD7",
    +    // Port B
    +    .D8 = "PB0",
    +    .D9 = "PB1",
    +    .D10 = "PB2",
    +    .D11 = "PB3",
    +    .D12 = "PB4",
    +    // LED_BUILTIN
    +    .D13 = "PB5",
    +    // Port C (Analog)
    +    .A0 = "PC0",
    +    .A1 = "PC1",
    +    .A2 = "PC2",
    +    .A3 = "PC3",
    +    .A4 = "PC4",
    +    .A5 = "PC5",
    +};
    diff --git a/src/chips.zig b/src/chips.zig
    index 2cb647a34..b47fe15ec 100644
    --- a/src/chips.zig
    +++ b/src/chips.zig
    @@ -1,6 +1,17 @@
     const std = @import("std");
    -const microzig = @import("../deps/microzig/src/main.zig");
    +const micro = @import("../deps/microzig/src/main.zig");
    +const Chip = micro.Chip;
    +const MemoryRegion = micro.MemoryRegion;
     
     fn root_dir() []const u8 {
         return std.fs.path.dirname(@src().file) orelse ".";
     }
    +
    +pub const atmega328p = Chip.from_standard_paths(root_dir(), .{
    +    .name = "ATmega328P",
    +    .cpu = micro.cpus.avr5,
    +    .memory_regions = &.{
    +        MemoryRegion{ .offset = 0x000000, .length = 32 * 1024, .kind = .flash },
    +        MemoryRegion{ .offset = 0x800100, .length = 2048, .kind = .ram },
    +    },
    +});
    diff --git a/src/chips/ATmega328P.json b/src/chips/ATmega328P.json
    new file mode 100644
    index 000000000..7baa55cae
    --- /dev/null
    +++ b/src/chips/ATmega328P.json
    @@ -0,0 +1,2947 @@
    +{
    +  "version": "0.1.0",
    +  "types": {
    +    "peripherals": {
    +      "FUSE": {
    +        "description": "Fuses",
    +        "children": {
    +          "registers": {
    +            "EXTENDED": {
    +              "offset": 2,
    +              "size": 8,
    +              "reset_value": 255,
    +              "children": {
    +                "fields": {
    +                  "BODLEVEL": {
    +                    "description": "Brown-out Detector trigger level",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "enum": "types.peripherals.FUSE.children.enums.ENUM_BODLEVEL"
    +                  }
    +                }
    +              }
    +            },
    +            "HIGH": {
    +              "offset": 1,
    +              "size": 8,
    +              "reset_value": 217,
    +              "children": {
    +                "fields": {
    +                  "RSTDISBL": {
    +                    "description": "Reset Disabled (Enable PC6 as i/o pin)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "DWEN": {
    +                    "description": "Debug Wire enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SPIEN": {
    +                    "description": "Serial program downloading (SPI) enabled",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "WDTON": {
    +                    "description": "Watch-dog Timer always on",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EESAVE": {
    +                    "description": "Preserve EEPROM through the Chip Erase cycle",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "BOOTSZ": {
    +                    "description": "Select boot size",
    +                    "offset": 1,
    +                    "size": 2,
    +                    "enum": "types.peripherals.FUSE.children.enums.ENUM_BOOTSZ"
    +                  },
    +                  "BOOTRST": {
    +                    "description": "Boot Reset vector Enabled",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "LOW": {
    +              "offset": 0,
    +              "size": 8,
    +              "reset_value": 98,
    +              "children": {
    +                "fields": {
    +                  "CKDIV8": {
    +                    "description": "Divide clock by 8 internally",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CKOUT": {
    +                    "description": "Clock output on PORTB0",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SUT_CKSEL": {
    +                    "description": "Select Clock Source",
    +                    "offset": 0,
    +                    "size": 6,
    +                    "enum": "types.peripherals.FUSE.children.enums.ENUM_SUT_CKSEL"
    +                  }
    +                }
    +              }
    +            }
    +          },
    +          "enums": {
    +            "ENUM_SUT_CKSEL": {
    +              "size": 6,
    +              "children": {
    +                "enum_fields": {
    +                  "EXTCLK_6CK_14CK_0MS": {
    +                    "description": "Ext. Clock; Start-up time PWRDWN/RESET: 6 CK/14 CK + 0 ms",
    +                    "value": 0
    +                  },
    +                  "EXTCLK_6CK_14CK_4MS1": {
    +                    "description": "Ext. Clock; Start-up time PWRDWN/RESET: 6 CK/14 CK + 4.1 ms",
    +                    "value": 16
    +                  },
    +                  "EXTCLK_6CK_14CK_65MS": {
    +                    "description": "Ext. Clock; Start-up time PWRDWN/RESET: 6 CK/14 CK + 65 ms",
    +                    "value": 32
    +                  },
    +                  "INTRCOSC_8MHZ_6CK_14CK_0MS": {
    +                    "description": "Int. RC Osc. 8 MHz; Start-up time PWRDWN/RESET: 6 CK/14 CK + 0 ms",
    +                    "value": 2
    +                  },
    +                  "INTRCOSC_8MHZ_6CK_14CK_4MS1": {
    +                    "description": "Int. RC Osc. 8 MHz; Start-up time PWRDWN/RESET: 6 CK/14 CK + 4.1 ms",
    +                    "value": 18
    +                  },
    +                  "INTRCOSC_8MHZ_6CK_14CK_65MS": {
    +                    "description": "Int. RC Osc. 8 MHz; Start-up time PWRDWN/RESET: 6 CK/14 CK + 65 ms",
    +                    "value": 34
    +                  },
    +                  "INTRCOSC_128KHZ_6CK_14CK_0MS": {
    +                    "description": "Int. RC Osc. 128kHz; Start-up time PWRDWN/RESET: 6 CK/14 CK + 0 ms",
    +                    "value": 3
    +                  },
    +                  "INTRCOSC_128KHZ_6CK_14CK_4MS1": {
    +                    "description": "Int. RC Osc. 128kHz; Start-up time PWRDWN/RESET: 6 CK/14 CK + 4.1 ms",
    +                    "value": 19
    +                  },
    +                  "INTRCOSC_128KHZ_6CK_14CK_65MS": {
    +                    "description": "Int. RC Osc. 128kHz; Start-up time PWRDWN/RESET: 6 CK/14 CK + 65 ms",
    +                    "value": 35
    +                  },
    +                  "EXTLOFXTAL_1KCK_14CK_0MS": {
    +                    "description": "Ext. Low-Freq. Crystal; Start-up time PWRDWN/RESET: 1K CK/14 CK + 0 ms",
    +                    "value": 4
    +                  },
    +                  "EXTLOFXTAL_1KCK_14CK_4MS1": {
    +                    "description": "Ext. Low-Freq. Crystal; Start-up time PWRDWN/RESET: 1K CK/14 CK + 4.1 ms",
    +                    "value": 20
    +                  },
    +                  "EXTLOFXTAL_1KCK_14CK_65MS": {
    +                    "description": "Ext. Low-Freq. Crystal; Start-up time PWRDWN/RESET: 1K CK/14 CK + 65 ms",
    +                    "value": 36
    +                  },
    +                  "EXTLOFXTAL_32KCK_14CK_0MS": {
    +                    "description": "Ext. Low-Freq. Crystal; Start-up time PWRDWN/RESET: 32K CK/14 CK + 0 ms",
    +                    "value": 5
    +                  },
    +                  "EXTLOFXTAL_32KCK_14CK_4MS1": {
    +                    "description": "Ext. Low-Freq. Crystal; Start-up time PWRDWN/RESET: 32K CK/14 CK + 4.1 ms",
    +                    "value": 21
    +                  },
    +                  "EXTLOFXTAL_32KCK_14CK_65MS": {
    +                    "description": "Ext. Low-Freq. Crystal; Start-up time PWRDWN/RESET: 32K CK/14 CK + 65 ms",
    +                    "value": 37
    +                  },
    +                  "EXTFSXTAL_258CK_14CK_4MS1": {
    +                    "description": "Ext. Full-swing Crystal; Start-up time PWRDWN/RESET: 258 CK/14 CK + 4.1 ms",
    +                    "value": 6
    +                  },
    +                  "EXTFSXTAL_258CK_14CK_65MS": {
    +                    "description": "Ext. Full-swing Crystal; Start-up time PWRDWN/RESET: 258 CK/14 CK + 65 ms",
    +                    "value": 22
    +                  },
    +                  "EXTFSXTAL_1KCK_14CK_0MS": {
    +                    "description": "Ext. Full-swing Crystal; Start-up time PWRDWN/RESET: 1K CK /14 CK + 0 ms",
    +                    "value": 38
    +                  },
    +                  "EXTFSXTAL_1KCK_14CK_4MS1": {
    +                    "description": "Ext. Full-swing Crystal; Start-up time PWRDWN/RESET: 1K CK /14 CK + 4.1 ms",
    +                    "value": 54
    +                  },
    +                  "EXTFSXTAL_1KCK_14CK_65MS": {
    +                    "description": "Ext. Full-swing Crystal; Start-up time PWRDWN/RESET: 1K CK /14 CK + 65 ms",
    +                    "value": 7
    +                  },
    +                  "EXTFSXTAL_16KCK_14CK_0MS": {
    +                    "description": "Ext. Full-swing Crystal; Start-up time PWRDWN/RESET: 16K CK/14 CK + 0 ms",
    +                    "value": 23
    +                  },
    +                  "EXTFSXTAL_16KCK_14CK_4MS1": {
    +                    "description": "Ext. Full-swing Crystal; Start-up time PWRDWN/RESET: 16K CK/14 CK + 4.1 ms",
    +                    "value": 39
    +                  },
    +                  "EXTFSXTAL_16KCK_14CK_65MS": {
    +                    "description": "Ext. Full-swing Crystal; Start-up time PWRDWN/RESET: 16K CK/14 CK + 65 ms",
    +                    "value": 55
    +                  },
    +                  "EXTXOSC_0MHZ4_0MHZ9_258CK_14CK_4MS1": {
    +                    "description": "Ext. Crystal Osc. 0.4-0.9 MHz; Start-up time PWRDWN/RESET: 258 CK/14 CK + 4.1 ms",
    +                    "value": 8
    +                  },
    +                  "EXTXOSC_0MHZ4_0MHZ9_258CK_14CK_65MS": {
    +                    "description": "Ext. Crystal Osc. 0.4-0.9 MHz; Start-up time PWRDWN/RESET: 258 CK/14 CK + 65 ms",
    +                    "value": 24
    +                  },
    +                  "EXTXOSC_0MHZ4_0MHZ9_1KCK_14CK_0MS": {
    +                    "description": "Ext. Crystal Osc. 0.4-0.9 MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 0 ms",
    +                    "value": 40
    +                  },
    +                  "EXTXOSC_0MHZ4_0MHZ9_1KCK_14CK_4MS1": {
    +                    "description": "Ext. Crystal Osc. 0.4-0.9 MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 4.1 ms",
    +                    "value": 56
    +                  },
    +                  "EXTXOSC_0MHZ4_0MHZ9_1KCK_14CK_65MS": {
    +                    "description": "Ext. Crystal Osc. 0.4-0.9 MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 65 ms",
    +                    "value": 9
    +                  },
    +                  "EXTXOSC_0MHZ4_0MHZ9_16KCK_14CK_0MS": {
    +                    "description": "Ext. Crystal Osc. 0.4-0.9 MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 0 ms",
    +                    "value": 25
    +                  },
    +                  "EXTXOSC_0MHZ4_0MHZ9_16KCK_14CK_4MS1": {
    +                    "description": "Ext. Crystal Osc. 0.4-0.9 MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 4.1 ms",
    +                    "value": 41
    +                  },
    +                  "EXTXOSC_0MHZ4_0MHZ9_16KCK_14CK_65MS": {
    +                    "description": "Ext. Crystal Osc. 0.4-0.9 MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 65 ms",
    +                    "value": 57
    +                  },
    +                  "EXTXOSC_0MHZ9_3MHZ_258CK_14CK_4MS1": {
    +                    "description": "Ext. Crystal Osc. 0.9-3.0 MHz; Start-up time PWRDWN/RESET: 258 CK/14 CK + 4.1 ms",
    +                    "value": 10
    +                  },
    +                  "EXTXOSC_0MHZ9_3MHZ_258CK_14CK_65MS": {
    +                    "description": "Ext. Crystal Osc. 0.9-3.0 MHz; Start-up time PWRDWN/RESET: 258 CK/14 CK + 65 ms",
    +                    "value": 26
    +                  },
    +                  "EXTXOSC_0MHZ9_3MHZ_1KCK_14CK_0MS": {
    +                    "description": "Ext. Crystal Osc. 0.9-3.0 MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 0 ms",
    +                    "value": 42
    +                  },
    +                  "EXTXOSC_0MHZ9_3MHZ_1KCK_14CK_4MS1": {
    +                    "description": "Ext. Crystal Osc. 0.9-3.0 MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 4.1 ms",
    +                    "value": 58
    +                  },
    +                  "EXTXOSC_0MHZ9_3MHZ_1KCK_14CK_65MS": {
    +                    "description": "Ext. Crystal Osc. 0.9-3.0 MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 65 ms",
    +                    "value": 11
    +                  },
    +                  "EXTXOSC_0MHZ9_3MHZ_16KCK_14CK_0MS": {
    +                    "description": "Ext. Crystal Osc. 0.9-3.0 MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 0 ms",
    +                    "value": 27
    +                  },
    +                  "EXTXOSC_0MHZ9_3MHZ_16KCK_14CK_4MS1": {
    +                    "description": "Ext. Crystal Osc. 0.9-3.0 MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 4.1 ms",
    +                    "value": 43
    +                  },
    +                  "EXTXOSC_0MHZ9_3MHZ_16KCK_14CK_65MS": {
    +                    "description": "Ext. Crystal Osc. 0.9-3.0 MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 65 ms",
    +                    "value": 59
    +                  },
    +                  "EXTXOSC_3MHZ_8MHZ_258CK_14CK_4MS1": {
    +                    "description": "Ext. Crystal Osc. 3.0-8.0 MHz; Start-up time PWRDWN/RESET: 258 CK/14 CK + 4.1 ms",
    +                    "value": 12
    +                  },
    +                  "EXTXOSC_3MHZ_8MHZ_258CK_14CK_65MS": {
    +                    "description": "Ext. Crystal Osc. 3.0-8.0 MHz; Start-up time PWRDWN/RESET: 258 CK/14 CK + 65 ms",
    +                    "value": 28
    +                  },
    +                  "EXTXOSC_3MHZ_8MHZ_1KCK_14CK_0MS": {
    +                    "description": "Ext. Crystal Osc. 3.0-8.0 MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 0 ms",
    +                    "value": 44
    +                  },
    +                  "EXTXOSC_3MHZ_8MHZ_1KCK_14CK_4MS1": {
    +                    "description": "Ext. Crystal Osc. 3.0-8.0 MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 4.1 ms",
    +                    "value": 60
    +                  },
    +                  "EXTXOSC_3MHZ_8MHZ_1KCK_14CK_65MS": {
    +                    "description": "Ext. Crystal Osc. 3.0-8.0 MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 65 ms",
    +                    "value": 13
    +                  },
    +                  "EXTXOSC_3MHZ_8MHZ_16KCK_14CK_0MS": {
    +                    "description": "Ext. Crystal Osc. 3.0-8.0 MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 0 ms",
    +                    "value": 29
    +                  },
    +                  "EXTXOSC_3MHZ_8MHZ_16KCK_14CK_4MS1": {
    +                    "description": "Ext. Crystal Osc. 3.0-8.0 MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 4.1 ms",
    +                    "value": 45
    +                  },
    +                  "EXTXOSC_3MHZ_8MHZ_16KCK_14CK_65MS": {
    +                    "description": "Ext. Crystal Osc. 3.0-8.0 MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 65 ms",
    +                    "value": 61
    +                  },
    +                  "EXTXOSC_8MHZ_XX_258CK_14CK_4MS1": {
    +                    "description": "Ext. Crystal Osc. 8.0-    MHz; Start-up time PWRDWN/RESET: 258 CK/14 CK + 4.1 ms",
    +                    "value": 14
    +                  },
    +                  "EXTXOSC_8MHZ_XX_258CK_14CK_65MS": {
    +                    "description": "Ext. Crystal Osc. 8.0-    MHz; Start-up time PWRDWN/RESET: 258 CK/14 CK + 65 ms",
    +                    "value": 30
    +                  },
    +                  "EXTXOSC_8MHZ_XX_1KCK_14CK_0MS": {
    +                    "description": "Ext. Crystal Osc. 8.0-    MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 0 ms",
    +                    "value": 46
    +                  },
    +                  "EXTXOSC_8MHZ_XX_1KCK_14CK_4MS1": {
    +                    "description": "Ext. Crystal Osc. 8.0-    MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 4.1 ms",
    +                    "value": 62
    +                  },
    +                  "EXTXOSC_8MHZ_XX_1KCK_14CK_65MS": {
    +                    "description": "Ext. Crystal Osc. 8.0-    MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 65 ms",
    +                    "value": 15
    +                  },
    +                  "EXTXOSC_8MHZ_XX_16KCK_14CK_0MS": {
    +                    "description": "Ext. Crystal Osc. 8.0-    MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 0 ms",
    +                    "value": 31
    +                  },
    +                  "EXTXOSC_8MHZ_XX_16KCK_14CK_4MS1": {
    +                    "description": "Ext. Crystal Osc. 8.0-    MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 4.1 ms",
    +                    "value": 47
    +                  },
    +                  "EXTXOSC_8MHZ_XX_16KCK_14CK_65MS": {
    +                    "description": "Ext. Crystal Osc. 8.0-    MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 65 ms",
    +                    "value": 63
    +                  }
    +                }
    +              }
    +            },
    +            "ENUM_BODLEVEL": {
    +              "size": 3,
    +              "children": {
    +                "enum_fields": {
    +                  "4V3": {
    +                    "description": "Brown-out detection at VCC=4.3 V",
    +                    "value": 4
    +                  },
    +                  "2V7": {
    +                    "description": "Brown-out detection at VCC=2.7 V",
    +                    "value": 5
    +                  },
    +                  "1V8": {
    +                    "description": "Brown-out detection at VCC=1.8 V",
    +                    "value": 6
    +                  },
    +                  "DISABLED": {
    +                    "description": "Brown-out detection disabled",
    +                    "value": 7
    +                  }
    +                }
    +              }
    +            },
    +            "ENUM_BOOTSZ": {
    +              "size": 2,
    +              "children": {
    +                "enum_fields": {
    +                  "256W_3F00": {
    +                    "description": "Boot Flash size=256 words start address=$3F00",
    +                    "value": 3
    +                  },
    +                  "512W_3E00": {
    +                    "description": "Boot Flash size=512 words start address=$3E00",
    +                    "value": 2
    +                  },
    +                  "1024W_3C00": {
    +                    "description": "Boot Flash size=1024 words start address=$3C00",
    +                    "value": 1
    +                  },
    +                  "2048W_3800": {
    +                    "description": "Boot Flash size=2048 words start address=$3800",
    +                    "value": 0
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "LOCKBIT": {
    +        "description": "Lockbits",
    +        "children": {
    +          "registers": {
    +            "LOCKBIT": {
    +              "offset": 0,
    +              "size": 8,
    +              "reset_value": 255,
    +              "children": {
    +                "fields": {
    +                  "LB": {
    +                    "description": "Memory Lock",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": "types.peripherals.LOCKBIT.children.enums.ENUM_LB"
    +                  },
    +                  "BLB0": {
    +                    "description": "Boot Loader Protection Mode",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": "types.peripherals.LOCKBIT.children.enums.ENUM_BLB"
    +                  },
    +                  "BLB1": {
    +                    "description": "Boot Loader Protection Mode",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": "types.peripherals.LOCKBIT.children.enums.ENUM_BLB2"
    +                  }
    +                }
    +              }
    +            }
    +          },
    +          "enums": {
    +            "ENUM_LB": {
    +              "size": 2,
    +              "children": {
    +                "enum_fields": {
    +                  "PROG_VER_DISABLED": {
    +                    "description": "Further programming and verification disabled",
    +                    "value": 0
    +                  },
    +                  "PROG_DISABLED": {
    +                    "description": "Further programming disabled",
    +                    "value": 2
    +                  },
    +                  "NO_LOCK": {
    +                    "description": "No memory lock features enabled",
    +                    "value": 3
    +                  }
    +                }
    +              }
    +            },
    +            "ENUM_BLB": {
    +              "size": 2,
    +              "children": {
    +                "enum_fields": {
    +                  "LPM_SPM_DISABLE": {
    +                    "description": "LPM and SPM prohibited in Application Section",
    +                    "value": 0
    +                  },
    +                  "LPM_DISABLE": {
    +                    "description": "LPM prohibited in Application Section",
    +                    "value": 1
    +                  },
    +                  "SPM_DISABLE": {
    +                    "description": "SPM prohibited in Application Section",
    +                    "value": 2
    +                  },
    +                  "NO_LOCK": {
    +                    "description": "No lock on SPM and LPM in Application Section",
    +                    "value": 3
    +                  }
    +                }
    +              }
    +            },
    +            "ENUM_BLB2": {
    +              "size": 2,
    +              "children": {
    +                "enum_fields": {
    +                  "LPM_SPM_DISABLE": {
    +                    "description": "LPM and SPM prohibited in Boot Section",
    +                    "value": 0
    +                  },
    +                  "LPM_DISABLE": {
    +                    "description": "LPM prohibited in Boot Section",
    +                    "value": 1
    +                  },
    +                  "SPM_DISABLE": {
    +                    "description": "SPM prohibited in Boot Section",
    +                    "value": 2
    +                  },
    +                  "NO_LOCK": {
    +                    "description": "No lock on SPM and LPM in Boot Section",
    +                    "value": 3
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "USART": {
    +        "description": "USART",
    +        "children": {
    +          "register_groups": {
    +            "USART0": {
    +              "description": "USART",
    +              "children": {
    +                "registers": {
    +                  "UDR0": {
    +                    "description": "USART I/O Data Register",
    +                    "offset": 6,
    +                    "size": 8
    +                  },
    +                  "UCSR0A": {
    +                    "description": "USART Control and Status Register A",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "children": {
    +                      "fields": {
    +                        "RXC0": {
    +                          "description": "USART Receive Complete",
    +                          "offset": 7,
    +                          "size": 1
    +                        },
    +                        "TXC0": {
    +                          "description": "USART Transmitt Complete",
    +                          "offset": 6,
    +                          "size": 1
    +                        },
    +                        "UDRE0": {
    +                          "description": "USART Data Register Empty",
    +                          "offset": 5,
    +                          "size": 1
    +                        },
    +                        "FE0": {
    +                          "description": "Framing Error",
    +                          "offset": 4,
    +                          "size": 1
    +                        },
    +                        "DOR0": {
    +                          "description": "Data overRun",
    +                          "offset": 3,
    +                          "size": 1
    +                        },
    +                        "UPE0": {
    +                          "description": "Parity Error",
    +                          "offset": 2,
    +                          "size": 1
    +                        },
    +                        "U2X0": {
    +                          "description": "Double the USART transmission speed",
    +                          "offset": 1,
    +                          "size": 1
    +                        },
    +                        "MPCM0": {
    +                          "description": "Multi-processor Communication Mode",
    +                          "offset": 0,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "UCSR0B": {
    +                    "description": "USART Control and Status Register B",
    +                    "offset": 1,
    +                    "size": 8,
    +                    "children": {
    +                      "fields": {
    +                        "RXCIE0": {
    +                          "description": "RX Complete Interrupt Enable",
    +                          "offset": 7,
    +                          "size": 1
    +                        },
    +                        "TXCIE0": {
    +                          "description": "TX Complete Interrupt Enable",
    +                          "offset": 6,
    +                          "size": 1
    +                        },
    +                        "UDRIE0": {
    +                          "description": "USART Data register Empty Interrupt Enable",
    +                          "offset": 5,
    +                          "size": 1
    +                        },
    +                        "RXEN0": {
    +                          "description": "Receiver Enable",
    +                          "offset": 4,
    +                          "size": 1
    +                        },
    +                        "TXEN0": {
    +                          "description": "Transmitter Enable",
    +                          "offset": 3,
    +                          "size": 1
    +                        },
    +                        "UCSZ02": {
    +                          "description": "Character Size - together with UCSZ0 in UCSR0C",
    +                          "offset": 2,
    +                          "size": 1
    +                        },
    +                        "RXB80": {
    +                          "description": "Receive Data Bit 8",
    +                          "offset": 1,
    +                          "size": 1
    +                        },
    +                        "TXB80": {
    +                          "description": "Transmit Data Bit 8",
    +                          "offset": 0,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "UCSR0C": {
    +                    "description": "USART Control and Status Register C",
    +                    "offset": 2,
    +                    "size": 8,
    +                    "children": {
    +                      "fields": {
    +                        "UMSEL0": {
    +                          "description": "USART Mode Select",
    +                          "offset": 6,
    +                          "size": 2,
    +                          "enum": "types.peripherals.USART.children.enums.COMM_USART_MODE_2BIT"
    +                        },
    +                        "UPM0": {
    +                          "description": "Parity Mode Bits",
    +                          "offset": 4,
    +                          "size": 2,
    +                          "enum": "types.peripherals.USART.children.enums.COMM_UPM_PARITY_MODE"
    +                        },
    +                        "USBS0": {
    +                          "description": "Stop Bit Select",
    +                          "offset": 3,
    +                          "size": 1,
    +                          "enum": "types.peripherals.USART.children.enums.COMM_STOP_BIT_SEL"
    +                        },
    +                        "UCSZ0": {
    +                          "description": "Character Size - together with UCSZ2 in UCSR0B",
    +                          "offset": 1,
    +                          "size": 2
    +                        },
    +                        "UCPOL0": {
    +                          "description": "Clock Polarity",
    +                          "offset": 0,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "UBRR0": {
    +                    "description": "USART Baud Rate Register Bytes",
    +                    "offset": 4,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          },
    +          "enums": {
    +            "COMM_USART_MODE_2BIT": {
    +              "size": 2,
    +              "children": {
    +                "enum_fields": {
    +                  "ASYNCHRONOUS_USART": {
    +                    "description": "Asynchronous USART",
    +                    "value": 0
    +                  },
    +                  "SYNCHRONOUS_USART": {
    +                    "description": "Synchronous USART",
    +                    "value": 1
    +                  },
    +                  "MASTER_SPI": {
    +                    "description": "Master SPI",
    +                    "value": 3
    +                  }
    +                }
    +              }
    +            },
    +            "COMM_UPM_PARITY_MODE": {
    +              "size": 2,
    +              "children": {
    +                "enum_fields": {
    +                  "DISABLED": {
    +                    "description": "Disabled",
    +                    "value": 0
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved",
    +                    "value": 1
    +                  },
    +                  "ENABLED_EVEN_PARITY": {
    +                    "description": "Enabled, Even Parity",
    +                    "value": 2
    +                  },
    +                  "ENABLED_ODD_PARITY": {
    +                    "description": "Enabled, Odd Parity",
    +                    "value": 3
    +                  }
    +                }
    +              }
    +            },
    +            "COMM_STOP_BIT_SEL": {
    +              "size": 1,
    +              "children": {
    +                "enum_fields": {
    +                  "1_BIT": {
    +                    "description": "1-bit",
    +                    "value": 0
    +                  },
    +                  "2_BIT": {
    +                    "description": "2-bit",
    +                    "value": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TWI": {
    +        "description": "Two Wire Serial Interface",
    +        "children": {
    +          "registers": {
    +            "TWAMR": {
    +              "description": "TWI (Slave) Address Mask Register",
    +              "offset": 5,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "TWAM": {
    +                    "offset": 1,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "TWBR": {
    +              "description": "TWI Bit Rate register",
    +              "offset": 0,
    +              "size": 8
    +            },
    +            "TWCR": {
    +              "description": "TWI Control Register",
    +              "offset": 4,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "TWINT": {
    +                    "description": "TWI Interrupt Flag",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TWEA": {
    +                    "description": "TWI Enable Acknowledge Bit",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TWSTA": {
    +                    "description": "TWI Start Condition Bit",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TWSTO": {
    +                    "description": "TWI Stop Condition Bit",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TWWC": {
    +                    "description": "TWI Write Collition Flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TWEN": {
    +                    "description": "TWI Enable Bit",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TWIE": {
    +                    "description": "TWI Interrupt Enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TWSR": {
    +              "description": "TWI Status Register",
    +              "offset": 1,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "TWS": {
    +                    "description": "TWI Status",
    +                    "offset": 3,
    +                    "size": 5
    +                  },
    +                  "TWPS": {
    +                    "description": "TWI Prescaler",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": "types.peripherals.TWI.children.enums.COMM_TWI_PRESACLE"
    +                  }
    +                }
    +              }
    +            },
    +            "TWDR": {
    +              "description": "TWI Data register",
    +              "offset": 3,
    +              "size": 8
    +            },
    +            "TWAR": {
    +              "description": "TWI (Slave) Address register",
    +              "offset": 2,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "TWA": {
    +                    "description": "TWI (Slave) Address register Bits",
    +                    "offset": 1,
    +                    "size": 7
    +                  },
    +                  "TWGCE": {
    +                    "description": "TWI General Call Recognition Enable Bit",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          },
    +          "enums": {
    +            "COMM_TWI_PRESACLE": {
    +              "size": 2,
    +              "children": {
    +                "enum_fields": {
    +                  "1": {
    +                    "description": "1",
    +                    "value": 0
    +                  },
    +                  "4": {
    +                    "description": "4",
    +                    "value": 1
    +                  },
    +                  "16": {
    +                    "description": "16",
    +                    "value": 2
    +                  },
    +                  "64": {
    +                    "description": "64",
    +                    "value": 3
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TC16": {
    +        "description": "Timer/Counter, 16-bit",
    +        "children": {
    +          "register_groups": {
    +            "TC1": {
    +              "description": "Timer/Counter, 16-bit",
    +              "children": {
    +                "registers": {
    +                  "TIMSK1": {
    +                    "description": "Timer/Counter Interrupt Mask Register",
    +                    "offset": 57,
    +                    "size": 8,
    +                    "children": {
    +                      "fields": {
    +                        "ICIE1": {
    +                          "description": "Timer/Counter1 Input Capture Interrupt Enable",
    +                          "offset": 5,
    +                          "size": 1
    +                        },
    +                        "OCIE1B": {
    +                          "description": "Timer/Counter1 Output CompareB Match Interrupt Enable",
    +                          "offset": 2,
    +                          "size": 1
    +                        },
    +                        "OCIE1A": {
    +                          "description": "Timer/Counter1 Output CompareA Match Interrupt Enable",
    +                          "offset": 1,
    +                          "size": 1
    +                        },
    +                        "TOIE1": {
    +                          "description": "Timer/Counter1 Overflow Interrupt Enable",
    +                          "offset": 0,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TIFR1": {
    +                    "description": "Timer/Counter Interrupt Flag register",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "children": {
    +                      "fields": {
    +                        "ICF1": {
    +                          "description": "Input Capture Flag 1",
    +                          "offset": 5,
    +                          "size": 1
    +                        },
    +                        "OCF1B": {
    +                          "description": "Output Compare Flag 1B",
    +                          "offset": 2,
    +                          "size": 1
    +                        },
    +                        "OCF1A": {
    +                          "description": "Output Compare Flag 1A",
    +                          "offset": 1,
    +                          "size": 1
    +                        },
    +                        "TOV1": {
    +                          "description": "Timer/Counter1 Overflow Flag",
    +                          "offset": 0,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TCCR1A": {
    +                    "description": "Timer/Counter1 Control Register A",
    +                    "offset": 74,
    +                    "size": 8,
    +                    "children": {
    +                      "fields": {
    +                        "COM1A": {
    +                          "description": "Compare Output Mode 1A, bits",
    +                          "offset": 6,
    +                          "size": 2
    +                        },
    +                        "COM1B": {
    +                          "description": "Compare Output Mode 1B, bits",
    +                          "offset": 4,
    +                          "size": 2
    +                        },
    +                        "WGM1": {
    +                          "description": "Waveform Generation Mode",
    +                          "offset": 0,
    +                          "size": 2
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TCCR1B": {
    +                    "description": "Timer/Counter1 Control Register B",
    +                    "offset": 75,
    +                    "size": 8,
    +                    "children": {
    +                      "fields": {
    +                        "ICNC1": {
    +                          "description": "Input Capture 1 Noise Canceler",
    +                          "offset": 7,
    +                          "size": 1
    +                        },
    +                        "ICES1": {
    +                          "description": "Input Capture 1 Edge Select",
    +                          "offset": 6,
    +                          "size": 1
    +                        },
    +                        "WGM1": {
    +                          "description": "Waveform Generation Mode",
    +                          "offset": 3,
    +                          "size": 2
    +                        },
    +                        "CS1": {
    +                          "description": "Prescaler source of Timer/Counter 1",
    +                          "offset": 0,
    +                          "size": 3,
    +                          "enum": "types.peripherals.TC16.children.enums.CLK_SEL_3BIT_EXT"
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TCCR1C": {
    +                    "description": "Timer/Counter1 Control Register C",
    +                    "offset": 76,
    +                    "size": 8,
    +                    "children": {
    +                      "fields": {
    +                        "FOC1A": {
    +                          "offset": 7,
    +                          "size": 1
    +                        },
    +                        "FOC1B": {
    +                          "offset": 6,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TCNT1": {
    +                    "description": "Timer/Counter1  Bytes",
    +                    "offset": 78,
    +                    "size": 16
    +                  },
    +                  "OCR1A": {
    +                    "description": "Timer/Counter1 Output Compare Register  Bytes",
    +                    "offset": 82,
    +                    "size": 16
    +                  },
    +                  "OCR1B": {
    +                    "description": "Timer/Counter1 Output Compare Register  Bytes",
    +                    "offset": 84,
    +                    "size": 16
    +                  },
    +                  "ICR1": {
    +                    "description": "Timer/Counter1 Input Capture Register  Bytes",
    +                    "offset": 80,
    +                    "size": 16
    +                  },
    +                  "GTCCR": {
    +                    "description": "General Timer/Counter Control Register",
    +                    "offset": 13,
    +                    "size": 8,
    +                    "children": {
    +                      "fields": {
    +                        "TSM": {
    +                          "description": "Timer/Counter Synchronization Mode",
    +                          "offset": 7,
    +                          "size": 1
    +                        },
    +                        "PSRSYNC": {
    +                          "description": "Prescaler Reset Timer/Counter1 and Timer/Counter0",
    +                          "offset": 0,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          },
    +          "enums": {
    +            "CLK_SEL_3BIT_EXT": {
    +              "size": 3,
    +              "children": {
    +                "enum_fields": {
    +                  "NO_CLOCK_SOURCE_STOPPED": {
    +                    "description": "No Clock Source (Stopped)",
    +                    "value": 0
    +                  },
    +                  "RUNNING_NO_PRESCALING": {
    +                    "description": "Running, No Prescaling",
    +                    "value": 1
    +                  },
    +                  "RUNNING_CLK_8": {
    +                    "description": "Running, CLK/8",
    +                    "value": 2
    +                  },
    +                  "RUNNING_CLK_64": {
    +                    "description": "Running, CLK/64",
    +                    "value": 3
    +                  },
    +                  "RUNNING_CLK_256": {
    +                    "description": "Running, CLK/256",
    +                    "value": 4
    +                  },
    +                  "RUNNING_CLK_1024": {
    +                    "description": "Running, CLK/1024",
    +                    "value": 5
    +                  },
    +                  "RUNNING_EXTCLK_TN_FALLING_EDGE": {
    +                    "description": "Running, ExtClk Tn Falling Edge",
    +                    "value": 6
    +                  },
    +                  "RUNNING_EXTCLK_TN_RISING_EDGE": {
    +                    "description": "Running, ExtClk Tn Rising Edge",
    +                    "value": 7
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TC8_ASYNC": {
    +        "description": "Timer/Counter, 8-bit Async",
    +        "children": {
    +          "register_groups": {
    +            "TC2": {
    +              "description": "Timer/Counter, 8-bit Async",
    +              "children": {
    +                "registers": {
    +                  "TIMSK2": {
    +                    "description": "Timer/Counter Interrupt Mask register",
    +                    "offset": 57,
    +                    "size": 8,
    +                    "children": {
    +                      "fields": {
    +                        "OCIE2B": {
    +                          "description": "Timer/Counter2 Output Compare Match B Interrupt Enable",
    +                          "offset": 2,
    +                          "size": 1
    +                        },
    +                        "OCIE2A": {
    +                          "description": "Timer/Counter2 Output Compare Match A Interrupt Enable",
    +                          "offset": 1,
    +                          "size": 1
    +                        },
    +                        "TOIE2": {
    +                          "description": "Timer/Counter2 Overflow Interrupt Enable",
    +                          "offset": 0,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TIFR2": {
    +                    "description": "Timer/Counter Interrupt Flag Register",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "children": {
    +                      "fields": {
    +                        "OCF2B": {
    +                          "description": "Output Compare Flag 2B",
    +                          "offset": 2,
    +                          "size": 1
    +                        },
    +                        "OCF2A": {
    +                          "description": "Output Compare Flag 2A",
    +                          "offset": 1,
    +                          "size": 1
    +                        },
    +                        "TOV2": {
    +                          "description": "Timer/Counter2 Overflow Flag",
    +                          "offset": 0,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TCCR2A": {
    +                    "description": "Timer/Counter2 Control Register A",
    +                    "offset": 121,
    +                    "size": 8,
    +                    "children": {
    +                      "fields": {
    +                        "COM2A": {
    +                          "description": "Compare Output Mode bits",
    +                          "offset": 6,
    +                          "size": 2
    +                        },
    +                        "COM2B": {
    +                          "description": "Compare Output Mode bits",
    +                          "offset": 4,
    +                          "size": 2
    +                        },
    +                        "WGM2": {
    +                          "description": "Waveform Genration Mode",
    +                          "offset": 0,
    +                          "size": 2
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TCCR2B": {
    +                    "description": "Timer/Counter2 Control Register B",
    +                    "offset": 122,
    +                    "size": 8,
    +                    "children": {
    +                      "fields": {
    +                        "FOC2A": {
    +                          "description": "Force Output Compare A",
    +                          "offset": 7,
    +                          "size": 1
    +                        },
    +                        "FOC2B": {
    +                          "description": "Force Output Compare B",
    +                          "offset": 6,
    +                          "size": 1
    +                        },
    +                        "WGM22": {
    +                          "description": "Waveform Generation Mode",
    +                          "offset": 3,
    +                          "size": 1
    +                        },
    +                        "CS2": {
    +                          "description": "Clock Select bits",
    +                          "offset": 0,
    +                          "size": 3,
    +                          "enum": "types.peripherals.TC8_ASYNC.children.enums.CLK_SEL_3BIT"
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TCNT2": {
    +                    "description": "Timer/Counter2",
    +                    "offset": 123,
    +                    "size": 8
    +                  },
    +                  "OCR2B": {
    +                    "description": "Timer/Counter2 Output Compare Register B",
    +                    "offset": 125,
    +                    "size": 8
    +                  },
    +                  "OCR2A": {
    +                    "description": "Timer/Counter2 Output Compare Register A",
    +                    "offset": 124,
    +                    "size": 8
    +                  },
    +                  "ASSR": {
    +                    "description": "Asynchronous Status Register",
    +                    "offset": 127,
    +                    "size": 8,
    +                    "children": {
    +                      "fields": {
    +                        "EXCLK": {
    +                          "description": "Enable External Clock Input",
    +                          "offset": 6,
    +                          "size": 1
    +                        },
    +                        "AS2": {
    +                          "description": "Asynchronous Timer/Counter2",
    +                          "offset": 5,
    +                          "size": 1
    +                        },
    +                        "TCN2UB": {
    +                          "description": "Timer/Counter2 Update Busy",
    +                          "offset": 4,
    +                          "size": 1
    +                        },
    +                        "OCR2AUB": {
    +                          "description": "Output Compare Register2 Update Busy",
    +                          "offset": 3,
    +                          "size": 1
    +                        },
    +                        "OCR2BUB": {
    +                          "description": "Output Compare Register 2 Update Busy",
    +                          "offset": 2,
    +                          "size": 1
    +                        },
    +                        "TCR2AUB": {
    +                          "description": "Timer/Counter Control Register2 Update Busy",
    +                          "offset": 1,
    +                          "size": 1
    +                        },
    +                        "TCR2BUB": {
    +                          "description": "Timer/Counter Control Register2 Update Busy",
    +                          "offset": 0,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "GTCCR": {
    +                    "description": "General Timer Counter Control register",
    +                    "offset": 12,
    +                    "size": 8,
    +                    "children": {
    +                      "fields": {
    +                        "TSM": {
    +                          "description": "Timer/Counter Synchronization Mode",
    +                          "offset": 7,
    +                          "size": 1
    +                        },
    +                        "PSRASY": {
    +                          "description": "Prescaler Reset Timer/Counter2",
    +                          "offset": 1,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          },
    +          "enums": {
    +            "CLK_SEL_3BIT": {
    +              "size": 3,
    +              "children": {
    +                "enum_fields": {
    +                  "NO_CLOCK_SOURCE_STOPPED": {
    +                    "description": "No Clock Source (Stopped)",
    +                    "value": 0
    +                  },
    +                  "RUNNING_NO_PRESCALING": {
    +                    "description": "Running, No Prescaling",
    +                    "value": 1
    +                  },
    +                  "RUNNING_CLK_8": {
    +                    "description": "Running, CLK/8",
    +                    "value": 2
    +                  },
    +                  "RUNNING_CLK_32": {
    +                    "description": "Running, CLK/32",
    +                    "value": 3
    +                  },
    +                  "RUNNING_CLK_64": {
    +                    "description": "Running, CLK/64",
    +                    "value": 4
    +                  },
    +                  "RUNNING_CLK_128": {
    +                    "description": "Running, CLK/128",
    +                    "value": 5
    +                  },
    +                  "RUNNING_CLK_256": {
    +                    "description": "Running, CLK/256",
    +                    "value": 6
    +                  },
    +                  "RUNNING_CLK_1024": {
    +                    "description": "Running, CLK/1024",
    +                    "value": 7
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "ADC": {
    +        "description": "Analog-to-Digital Converter",
    +        "children": {
    +          "registers": {
    +            "ADMUX": {
    +              "description": "The ADC multiplexer Selection Register",
    +              "offset": 4,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "REFS": {
    +                    "description": "Reference Selection Bits",
    +                    "offset": 6,
    +                    "size": 2,
    +                    "enum": "types.peripherals.ADC.children.enums.ANALOG_ADC_V_REF3"
    +                  },
    +                  "ADLAR": {
    +                    "description": "Left Adjust Result",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "MUX": {
    +                    "description": "Analog Channel Selection Bits",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": "types.peripherals.ADC.children.enums.ADC_MUX_SINGLE"
    +                  }
    +                }
    +              }
    +            },
    +            "ADC": {
    +              "description": "ADC Data Register  Bytes",
    +              "offset": 0,
    +              "size": 16
    +            },
    +            "ADCSRA": {
    +              "description": "The ADC Control and Status register A",
    +              "offset": 2,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "ADEN": {
    +                    "description": "ADC Enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ADSC": {
    +                    "description": "ADC Start Conversion",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ADATE": {
    +                    "description": "ADC  Auto Trigger Enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ADIF": {
    +                    "description": "ADC Interrupt Flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ADIE": {
    +                    "description": "ADC Interrupt Enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ADPS": {
    +                    "description": "ADC  Prescaler Select Bits",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "enum": "types.peripherals.ADC.children.enums.ANALOG_ADC_PRESCALER"
    +                  }
    +                }
    +              }
    +            },
    +            "ADCSRB": {
    +              "description": "The ADC Control and Status register B",
    +              "offset": 3,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "ACME": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ADTS": {
    +                    "description": "ADC Auto Trigger Source bits",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "enum": "types.peripherals.ADC.children.enums.ANALOG_ADC_AUTO_TRIGGER"
    +                  }
    +                }
    +              }
    +            },
    +            "DIDR0": {
    +              "description": "Digital Input Disable Register",
    +              "offset": 6,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "ADC5D": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ADC4D": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ADC3D": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ADC2D": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ADC1D": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ADC0D": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          },
    +          "enums": {
    +            "ANALOG_ADC_V_REF3": {
    +              "size": 2,
    +              "children": {
    +                "enum_fields": {
    +                  "AREF_INTERNAL_VREF_TURNED_OFF": {
    +                    "description": "AREF, Internal Vref turned off",
    +                    "value": 0
    +                  },
    +                  "AVCC_WITH_EXTERNAL_CAPACITOR_AT_AREF_PIN": {
    +                    "description": "AVCC with external capacitor at AREF pin",
    +                    "value": 1
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved",
    +                    "value": 2
    +                  },
    +                  "INTERNAL_1_1V_VOLTAGE_REFERENCE_WITH_EXTERNAL_CAPACITOR_AT_AREF_PIN": {
    +                    "description": "Internal 1.1V Voltage Reference with external capacitor at AREF pin",
    +                    "value": 3
    +                  }
    +                }
    +              }
    +            },
    +            "ADC_MUX_SINGLE": {
    +              "size": 4,
    +              "children": {
    +                "enum_fields": {
    +                  "ADC0": {
    +                    "description": "ADC Single Ended Input pin 0",
    +                    "value": 0
    +                  },
    +                  "ADC1": {
    +                    "description": "ADC Single Ended Input pin 1",
    +                    "value": 1
    +                  },
    +                  "ADC2": {
    +                    "description": "ADC Single Ended Input pin 2",
    +                    "value": 2
    +                  },
    +                  "ADC3": {
    +                    "description": "ADC Single Ended Input pin 3",
    +                    "value": 3
    +                  },
    +                  "ADC4": {
    +                    "description": "ADC Single Ended Input pin 4",
    +                    "value": 4
    +                  },
    +                  "ADC5": {
    +                    "description": "ADC Single Ended Input pin 5",
    +                    "value": 5
    +                  },
    +                  "ADC6": {
    +                    "description": "ADC Single Ended Input pin 6",
    +                    "value": 6
    +                  },
    +                  "ADC7": {
    +                    "description": "ADC Single Ended Input pin 7",
    +                    "value": 7
    +                  },
    +                  "TEMPSENS": {
    +                    "description": "Temperature sensor",
    +                    "value": 8
    +                  },
    +                  "ADC_VBG": {
    +                    "description": "Internal Reference (VBG)",
    +                    "value": 14
    +                  },
    +                  "ADC_GND": {
    +                    "description": "0V (GND)",
    +                    "value": 15
    +                  }
    +                }
    +              }
    +            },
    +            "ANALOG_ADC_PRESCALER": {
    +              "size": 3,
    +              "children": {
    +                "enum_fields": {
    +                  "2": {
    +                    "description": "2",
    +                    "value": 1
    +                  },
    +                  "4": {
    +                    "description": "4",
    +                    "value": 2
    +                  },
    +                  "8": {
    +                    "description": "8",
    +                    "value": 3
    +                  },
    +                  "16": {
    +                    "description": "16",
    +                    "value": 4
    +                  },
    +                  "32": {
    +                    "description": "32",
    +                    "value": 5
    +                  },
    +                  "64": {
    +                    "description": "64",
    +                    "value": 6
    +                  },
    +                  "128": {
    +                    "description": "128",
    +                    "value": 7
    +                  }
    +                }
    +              }
    +            },
    +            "ANALOG_ADC_AUTO_TRIGGER": {
    +              "size": 3,
    +              "children": {
    +                "enum_fields": {
    +                  "FREE_RUNNING_MODE": {
    +                    "description": "Free Running mode",
    +                    "value": 0
    +                  },
    +                  "ANALOG_COMPARATOR": {
    +                    "description": "Analog Comparator",
    +                    "value": 1
    +                  },
    +                  "EXTERNAL_INTERRUPT_REQUEST_0": {
    +                    "description": "External Interrupt Request 0",
    +                    "value": 2
    +                  },
    +                  "TIMER_COUNTER0_COMPARE_MATCH_A": {
    +                    "description": "Timer/Counter0 Compare Match A",
    +                    "value": 3
    +                  },
    +                  "TIMER_COUNTER0_OVERFLOW": {
    +                    "description": "Timer/Counter0 Overflow",
    +                    "value": 4
    +                  },
    +                  "TIMER_COUNTER1_COMPARE_MATCH_B": {
    +                    "description": "Timer/Counter1 Compare Match B",
    +                    "value": 5
    +                  },
    +                  "TIMER_COUNTER1_OVERFLOW": {
    +                    "description": "Timer/Counter1 Overflow",
    +                    "value": 6
    +                  },
    +                  "TIMER_COUNTER1_CAPTURE_EVENT": {
    +                    "description": "Timer/Counter1 Capture Event",
    +                    "value": 7
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "AC": {
    +        "description": "Analog Comparator",
    +        "children": {
    +          "registers": {
    +            "ACSR": {
    +              "description": "Analog Comparator Control And Status Register",
    +              "offset": 0,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "ACD": {
    +                    "description": "Analog Comparator Disable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ACBG": {
    +                    "description": "Analog Comparator Bandgap Select",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ACO": {
    +                    "description": "Analog Compare Output",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ACI": {
    +                    "description": "Analog Comparator Interrupt Flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACIE": {
    +                    "description": "Analog Comparator Interrupt Enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ACIC": {
    +                    "description": "Analog Comparator Input Capture Enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ACIS": {
    +                    "description": "Analog Comparator Interrupt Mode Select bits",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": "types.peripherals.AC.children.enums.ANALOG_COMP_INTERRUPT"
    +                  }
    +                }
    +              }
    +            },
    +            "DIDR1": {
    +              "description": "Digital Input Disable Register 1",
    +              "offset": 47,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "AIN1D": {
    +                    "description": "AIN1 Digital Input Disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "AIN0D": {
    +                    "description": "AIN0 Digital Input Disable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          },
    +          "enums": {
    +            "ANALOG_COMP_INTERRUPT": {
    +              "size": 2,
    +              "children": {
    +                "enum_fields": {
    +                  "INTERRUPT_ON_TOGGLE": {
    +                    "description": "Interrupt on Toggle",
    +                    "value": 0
    +                  },
    +                  "RESERVED": {
    +                    "description": "Reserved",
    +                    "value": 1
    +                  },
    +                  "INTERRUPT_ON_FALLING_EDGE": {
    +                    "description": "Interrupt on Falling Edge",
    +                    "value": 2
    +                  },
    +                  "INTERRUPT_ON_RISING_EDGE": {
    +                    "description": "Interrupt on Rising Edge",
    +                    "value": 3
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "PORT": {
    +        "description": "I/O Port",
    +        "children": {
    +          "register_groups": {
    +            "PORTB": {
    +              "description": "I/O Port",
    +              "children": {
    +                "registers": {
    +                  "PORTB": {
    +                    "description": "Port B Data Register",
    +                    "offset": 2,
    +                    "size": 8
    +                  },
    +                  "DDRB": {
    +                    "description": "Port B Data Direction Register",
    +                    "offset": 1,
    +                    "size": 8
    +                  },
    +                  "PINB": {
    +                    "description": "Port B Input Pins",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "PORTC": {
    +              "description": "I/O Port",
    +              "children": {
    +                "registers": {
    +                  "PORTC": {
    +                    "description": "Port C Data Register",
    +                    "offset": 2,
    +                    "size": 8
    +                  },
    +                  "DDRC": {
    +                    "description": "Port C Data Direction Register",
    +                    "offset": 1,
    +                    "size": 8
    +                  },
    +                  "PINC": {
    +                    "description": "Port C Input Pins",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "PORTD": {
    +              "description": "I/O Port",
    +              "children": {
    +                "registers": {
    +                  "PORTD": {
    +                    "description": "Port D Data Register",
    +                    "offset": 2,
    +                    "size": 8
    +                  },
    +                  "DDRD": {
    +                    "description": "Port D Data Direction Register",
    +                    "offset": 1,
    +                    "size": 8
    +                  },
    +                  "PIND": {
    +                    "description": "Port D Input Pins",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TC8": {
    +        "description": "Timer/Counter, 8-bit",
    +        "children": {
    +          "register_groups": {
    +            "TC0": {
    +              "description": "Timer/Counter, 8-bit",
    +              "children": {
    +                "registers": {
    +                  "OCR0B": {
    +                    "description": "Timer/Counter0 Output Compare Register",
    +                    "offset": 19,
    +                    "size": 8
    +                  },
    +                  "OCR0A": {
    +                    "description": "Timer/Counter0 Output Compare Register",
    +                    "offset": 18,
    +                    "size": 8
    +                  },
    +                  "TCNT0": {
    +                    "description": "Timer/Counter0",
    +                    "offset": 17,
    +                    "size": 8
    +                  },
    +                  "TCCR0B": {
    +                    "description": "Timer/Counter Control Register B",
    +                    "offset": 16,
    +                    "size": 8,
    +                    "children": {
    +                      "fields": {
    +                        "FOC0A": {
    +                          "description": "Force Output Compare A",
    +                          "offset": 7,
    +                          "size": 1
    +                        },
    +                        "FOC0B": {
    +                          "description": "Force Output Compare B",
    +                          "offset": 6,
    +                          "size": 1
    +                        },
    +                        "WGM02": {
    +                          "offset": 3,
    +                          "size": 1
    +                        },
    +                        "CS0": {
    +                          "description": "Clock Select",
    +                          "offset": 0,
    +                          "size": 3,
    +                          "enum": "types.peripherals.TC16.children.enums.CLK_SEL_3BIT_EXT"
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TCCR0A": {
    +                    "description": "Timer/Counter  Control Register A",
    +                    "offset": 15,
    +                    "size": 8,
    +                    "children": {
    +                      "fields": {
    +                        "COM0A": {
    +                          "description": "Compare Output Mode, Phase Correct PWM Mode",
    +                          "offset": 6,
    +                          "size": 2
    +                        },
    +                        "COM0B": {
    +                          "description": "Compare Output Mode, Fast PWm",
    +                          "offset": 4,
    +                          "size": 2
    +                        },
    +                        "WGM0": {
    +                          "description": "Waveform Generation Mode",
    +                          "offset": 0,
    +                          "size": 2
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TIMSK0": {
    +                    "description": "Timer/Counter0 Interrupt Mask Register",
    +                    "offset": 57,
    +                    "size": 8,
    +                    "children": {
    +                      "fields": {
    +                        "OCIE0B": {
    +                          "description": "Timer/Counter0 Output Compare Match B Interrupt Enable",
    +                          "offset": 2,
    +                          "size": 1
    +                        },
    +                        "OCIE0A": {
    +                          "description": "Timer/Counter0 Output Compare Match A Interrupt Enable",
    +                          "offset": 1,
    +                          "size": 1
    +                        },
    +                        "TOIE0": {
    +                          "description": "Timer/Counter0 Overflow Interrupt Enable",
    +                          "offset": 0,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TIFR0": {
    +                    "description": "Timer/Counter0 Interrupt Flag register",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "children": {
    +                      "fields": {
    +                        "OCF0B": {
    +                          "description": "Timer/Counter0 Output Compare Flag 0B",
    +                          "offset": 2,
    +                          "size": 1
    +                        },
    +                        "OCF0A": {
    +                          "description": "Timer/Counter0 Output Compare Flag 0A",
    +                          "offset": 1,
    +                          "size": 1
    +                        },
    +                        "TOV0": {
    +                          "description": "Timer/Counter0 Overflow Flag",
    +                          "offset": 0,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "GTCCR": {
    +                    "description": "General Timer/Counter Control Register",
    +                    "offset": 14,
    +                    "size": 8,
    +                    "children": {
    +                      "fields": {
    +                        "TSM": {
    +                          "description": "Timer/Counter Synchronization Mode",
    +                          "offset": 7,
    +                          "size": 1
    +                        },
    +                        "PSRSYNC": {
    +                          "description": "Prescaler Reset Timer/Counter1 and Timer/Counter0",
    +                          "offset": 0,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          },
    +          "enums": {
    +            "CLK_SEL_3BIT_EXT": {
    +              "size": 3,
    +              "children": {
    +                "enum_fields": {
    +                  "NO_CLOCK_SOURCE_STOPPED": {
    +                    "description": "No Clock Source (Stopped)",
    +                    "value": 0
    +                  },
    +                  "RUNNING_NO_PRESCALING": {
    +                    "description": "Running, No Prescaling",
    +                    "value": 1
    +                  },
    +                  "RUNNING_CLK_8": {
    +                    "description": "Running, CLK/8",
    +                    "value": 2
    +                  },
    +                  "RUNNING_CLK_64": {
    +                    "description": "Running, CLK/64",
    +                    "value": 3
    +                  },
    +                  "RUNNING_CLK_256": {
    +                    "description": "Running, CLK/256",
    +                    "value": 4
    +                  },
    +                  "RUNNING_CLK_1024": {
    +                    "description": "Running, CLK/1024",
    +                    "value": 5
    +                  },
    +                  "RUNNING_EXTCLK_TN_FALLING_EDGE": {
    +                    "description": "Running, ExtClk Tn Falling Edge",
    +                    "value": 6
    +                  },
    +                  "RUNNING_EXTCLK_TN_RISING_EDGE": {
    +                    "description": "Running, ExtClk Tn Rising Edge",
    +                    "value": 7
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "EXINT": {
    +        "description": "External Interrupts",
    +        "children": {
    +          "registers": {
    +            "EICRA": {
    +              "description": "External Interrupt Control Register",
    +              "offset": 46,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "ISC1": {
    +                    "description": "External Interrupt Sense Control 1 Bits",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": "types.peripherals.EXINT.children.enums.INTERRUPT_SENSE_CONTROL"
    +                  },
    +                  "ISC0": {
    +                    "description": "External Interrupt Sense Control 0 Bits",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": "types.peripherals.EXINT.children.enums.INTERRUPT_SENSE_CONTROL"
    +                  }
    +                }
    +              }
    +            },
    +            "EIMSK": {
    +              "description": "External Interrupt Mask Register",
    +              "offset": 2,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "INT": {
    +                    "description": "External Interrupt Request 1 Enable",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "EIFR": {
    +              "description": "External Interrupt Flag Register",
    +              "offset": 1,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "INTF": {
    +                    "description": "External Interrupt Flags",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "PCICR": {
    +              "description": "Pin Change Interrupt Control Register",
    +              "offset": 45,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "PCIE": {
    +                    "description": "Pin Change Interrupt Enables",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "PCMSK2": {
    +              "description": "Pin Change Mask Register 2",
    +              "offset": 50,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "PCINT": {
    +                    "description": "Pin Change Enable Masks",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "PCMSK1": {
    +              "description": "Pin Change Mask Register 1",
    +              "offset": 49,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "PCINT": {
    +                    "description": "Pin Change Enable Masks",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "PCMSK0": {
    +              "description": "Pin Change Mask Register 0",
    +              "offset": 48,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "PCINT": {
    +                    "description": "Pin Change Enable Masks",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "PCIFR": {
    +              "description": "Pin Change Interrupt Flag Register",
    +              "offset": 0,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "PCIF": {
    +                    "description": "Pin Change Interrupt Flags",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            }
    +          },
    +          "enums": {
    +            "INTERRUPT_SENSE_CONTROL": {
    +              "description": "Interrupt Sense Control",
    +              "size": 2,
    +              "children": {
    +                "enum_fields": {
    +                  "LOW_LEVEL_OF_INTX": {
    +                    "description": "Low Level of INTX",
    +                    "value": 0
    +                  },
    +                  "ANY_LOGICAL_CHANGE_OF_INTX": {
    +                    "description": "Any Logical Change of INTX",
    +                    "value": 1
    +                  },
    +                  "FALLING_EDGE_OF_INTX": {
    +                    "description": "Falling Edge of INTX",
    +                    "value": 2
    +                  },
    +                  "RISING_EDGE_OF_INTX": {
    +                    "description": "Rising Edge of INTX",
    +                    "value": 3
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SPI": {
    +        "description": "Serial Peripheral Interface",
    +        "children": {
    +          "registers": {
    +            "SPDR": {
    +              "description": "SPI Data Register",
    +              "offset": 2,
    +              "size": 8
    +            },
    +            "SPSR": {
    +              "description": "SPI Status Register",
    +              "offset": 1,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "SPIF": {
    +                    "description": "SPI Interrupt Flag",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "WCOL": {
    +                    "description": "Write Collision Flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SPI2X": {
    +                    "description": "Double SPI Speed Bit",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SPCR": {
    +              "description": "SPI Control Register",
    +              "offset": 0,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "SPIE": {
    +                    "description": "SPI Interrupt Enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SPE": {
    +                    "description": "SPI Enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DORD": {
    +                    "description": "Data Order",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "MSTR": {
    +                    "description": "Master/Slave Select",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CPOL": {
    +                    "description": "Clock polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CPHA": {
    +                    "description": "Clock Phase",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SPR": {
    +                    "description": "SPI Clock Rate Selects",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": "types.peripherals.SPI.children.enums.COMM_SCK_RATE_3BIT"
    +                  }
    +                }
    +              }
    +            }
    +          },
    +          "enums": {
    +            "COMM_SCK_RATE_3BIT": {
    +              "size": 2,
    +              "children": {
    +                "enum_fields": {
    +                  "FOSC_2_OR_FOSC_4": {
    +                    "description": "fosc/2 or fosc/4",
    +                    "value": 0
    +                  },
    +                  "FOSC_8_OR_FOSC_16": {
    +                    "description": "fosc/8 or fosc/16",
    +                    "value": 1
    +                  },
    +                  "FOSC_32_OR_FOSC_64": {
    +                    "description": "fosc/32 or fosc/64",
    +                    "value": 2
    +                  },
    +                  "FOSC_64_OR_FOSC_128": {
    +                    "description": "fosc/64 or fosc/128",
    +                    "value": 3
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "WDT": {
    +        "description": "Watchdog Timer",
    +        "children": {
    +          "registers": {
    +            "WDTCSR": {
    +              "description": "Watchdog Timer Control Register",
    +              "offset": 0,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "WDIF": {
    +                    "description": "Watchdog Timeout Interrupt Flag",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "WDIE": {
    +                    "description": "Watchdog Timeout Interrupt Enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "WDP_bit0": {
    +                    "description": "Watchdog Timer Prescaler Bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "WDP_bit1": {
    +                    "description": "Watchdog Timer Prescaler Bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "WDP_bit2": {
    +                    "description": "Watchdog Timer Prescaler Bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "WDP_bit3": {
    +                    "description": "Watchdog Timer Prescaler Bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "WDCE": {
    +                    "description": "Watchdog Change Enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "WDE": {
    +                    "description": "Watch Dog Enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          },
    +          "enums": {
    +            "WDOG_TIMER_PRESCALE_4BITS": {
    +              "size": 4,
    +              "children": {
    +                "enum_fields": {
    +                  "OSCILLATOR_CYCLES_2K": {
    +                    "description": "Oscillator Cycles 2K",
    +                    "value": 0
    +                  },
    +                  "OSCILLATOR_CYCLES_4K": {
    +                    "description": "Oscillator Cycles 4K",
    +                    "value": 1
    +                  },
    +                  "OSCILLATOR_CYCLES_8K": {
    +                    "description": "Oscillator Cycles 8K",
    +                    "value": 2
    +                  },
    +                  "OSCILLATOR_CYCLES_16K": {
    +                    "description": "Oscillator Cycles 16K",
    +                    "value": 3
    +                  },
    +                  "OSCILLATOR_CYCLES_32K": {
    +                    "description": "Oscillator Cycles 32K",
    +                    "value": 4
    +                  },
    +                  "OSCILLATOR_CYCLES_64K": {
    +                    "description": "Oscillator Cycles 64K",
    +                    "value": 5
    +                  },
    +                  "OSCILLATOR_CYCLES_128K": {
    +                    "description": "Oscillator Cycles 128K",
    +                    "value": 6
    +                  },
    +                  "OSCILLATOR_CYCLES_256K": {
    +                    "description": "Oscillator Cycles 256K",
    +                    "value": 7
    +                  },
    +                  "OSCILLATOR_CYCLES_512K": {
    +                    "description": "Oscillator Cycles 512K",
    +                    "value": 8
    +                  },
    +                  "OSCILLATOR_CYCLES_1024K": {
    +                    "description": "Oscillator Cycles 1024K",
    +                    "value": 9
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "CPU": {
    +        "description": "CPU Registers",
    +        "children": {
    +          "registers": {
    +            "PRR": {
    +              "description": "Power Reduction Register",
    +              "offset": 38,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "PRTWI": {
    +                    "description": "Power Reduction TWI",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PRTIM2": {
    +                    "description": "Power Reduction Timer/Counter2",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PRTIM0": {
    +                    "description": "Power Reduction Timer/Counter0",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PRTIM1": {
    +                    "description": "Power Reduction Timer/Counter1",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PRSPI": {
    +                    "description": "Power Reduction Serial Peripheral Interface",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PRUSART0": {
    +                    "description": "Power Reduction USART",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PRADC": {
    +                    "description": "Power Reduction ADC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OSCCAL": {
    +              "description": "Oscillator Calibration Value",
    +              "offset": 40,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "OSCCAL": {
    +                    "description": "Oscillator Calibration ",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLKPR": {
    +              "description": "Clock Prescale Register",
    +              "offset": 35,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "CLKPCE": {
    +                    "description": "Clock Prescaler Change Enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CLKPS": {
    +                    "description": "Clock Prescaler Select Bits",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "enum": "types.peripherals.CPU.children.enums.CPU_CLK_PRESCALE_4_BITS_SMALL"
    +                  }
    +                }
    +              }
    +            },
    +            "SREG": {
    +              "description": "Status Register",
    +              "offset": 33,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "I": {
    +                    "description": "Global Interrupt Enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "T": {
    +                    "description": "Bit Copy Storage",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "H": {
    +                    "description": "Half Carry Flag",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "S": {
    +                    "description": "Sign Bit",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "V": {
    +                    "description": "Two's Complement Overflow Flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "N": {
    +                    "description": "Negative Flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "Z": {
    +                    "description": "Zero Flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "C": {
    +                    "description": "Carry Flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SP": {
    +              "description": "Stack Pointer ",
    +              "offset": 31,
    +              "size": 16
    +            },
    +            "SPMCSR": {
    +              "description": "Store Program Memory Control and Status Register",
    +              "offset": 25,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "SPMIE": {
    +                    "description": "SPM Interrupt Enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RWWSB": {
    +                    "description": "Read-While-Write Section Busy",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SIGRD": {
    +                    "description": "Signature Row Read",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RWWSRE": {
    +                    "description": "Read-While-Write section read enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BLBSET": {
    +                    "description": "Boot Lock Bit Set",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PGWRT": {
    +                    "description": "Page Write",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PGERS": {
    +                    "description": "Page Erase",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SPMEN": {
    +                    "description": "Store Program Memory",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MCUCR": {
    +              "description": "MCU Control Register",
    +              "offset": 23,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "BODS": {
    +                    "description": "BOD Sleep",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BODSE": {
    +                    "description": "BOD Sleep Enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PUD": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IVSEL": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IVCE": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MCUSR": {
    +              "description": "MCU Status Register",
    +              "offset": 22,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "WDRF": {
    +                    "description": "Watchdog Reset Flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "BORF": {
    +                    "description": "Brown-out Reset Flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EXTRF": {
    +                    "description": "External Reset Flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PORF": {
    +                    "description": "Power-on reset flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SMCR": {
    +              "description": "Sleep Mode Control Register",
    +              "offset": 21,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "SM": {
    +                    "description": "Sleep Mode Select Bits",
    +                    "offset": 1,
    +                    "size": 3,
    +                    "enum": "types.peripherals.CPU.children.enums.CPU_SLEEP_MODE_3BITS2"
    +                  },
    +                  "SE": {
    +                    "description": "Sleep Enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIOR2": {
    +              "description": "General Purpose I/O Register 2",
    +              "offset": 13,
    +              "size": 8
    +            },
    +            "GPIOR1": {
    +              "description": "General Purpose I/O Register 1",
    +              "offset": 12,
    +              "size": 8
    +            },
    +            "GPIOR0": {
    +              "description": "General Purpose I/O Register 0",
    +              "offset": 0,
    +              "size": 8
    +            }
    +          },
    +          "enums": {
    +            "CPU_CLK_PRESCALE_4_BITS_SMALL": {
    +              "size": 4,
    +              "children": {
    +                "enum_fields": {
    +                  "1": {
    +                    "description": "1",
    +                    "value": 0
    +                  },
    +                  "2": {
    +                    "description": "2",
    +                    "value": 1
    +                  },
    +                  "4": {
    +                    "description": "4",
    +                    "value": 2
    +                  },
    +                  "8": {
    +                    "description": "8",
    +                    "value": 3
    +                  },
    +                  "16": {
    +                    "description": "16",
    +                    "value": 4
    +                  },
    +                  "32": {
    +                    "description": "32",
    +                    "value": 5
    +                  },
    +                  "64": {
    +                    "description": "64",
    +                    "value": 6
    +                  },
    +                  "128": {
    +                    "description": "128",
    +                    "value": 7
    +                  },
    +                  "256": {
    +                    "description": "256",
    +                    "value": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_SLEEP_MODE_3BITS2": {
    +              "size": 3,
    +              "children": {
    +                "enum_fields": {
    +                  "IDLE": {
    +                    "description": "Idle",
    +                    "value": 0
    +                  },
    +                  "ADC": {
    +                    "description": "ADC Noise Reduction (If Available)",
    +                    "value": 1
    +                  },
    +                  "PDOWN": {
    +                    "description": "Power Down",
    +                    "value": 2
    +                  },
    +                  "PSAVE": {
    +                    "description": "Power Save",
    +                    "value": 3
    +                  },
    +                  "VAL_0x04": {
    +                    "description": "Reserved",
    +                    "value": 4
    +                  },
    +                  "VAL_0x05": {
    +                    "description": "Reserved",
    +                    "value": 5
    +                  },
    +                  "STDBY": {
    +                    "description": "Standby",
    +                    "value": 6
    +                  },
    +                  "ESTDBY": {
    +                    "description": "Extended Standby",
    +                    "value": 7
    +                  }
    +                }
    +              }
    +            },
    +            "OSCCAL_VALUE_ADDRESSES": {
    +              "description": "Oscillator Calibration Values",
    +              "size": 1,
    +              "children": {
    +                "enum_fields": {
    +                  "8_0_MHz": {
    +                    "description": "8.0 MHz",
    +                    "value": 0
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "EEPROM": {
    +        "description": "EEPROM",
    +        "children": {
    +          "registers": {
    +            "EEAR": {
    +              "description": "EEPROM Address Register  Bytes",
    +              "offset": 2,
    +              "size": 16
    +            },
    +            "EEDR": {
    +              "description": "EEPROM Data Register",
    +              "offset": 1,
    +              "size": 8
    +            },
    +            "EECR": {
    +              "description": "EEPROM Control Register",
    +              "offset": 0,
    +              "size": 8,
    +              "children": {
    +                "fields": {
    +                  "EEPM": {
    +                    "description": "EEPROM Programming Mode Bits",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": "types.peripherals.EEPROM.children.enums.EEP_MODE"
    +                  },
    +                  "EERIE": {
    +                    "description": "EEPROM Ready Interrupt Enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EEMPE": {
    +                    "description": "EEPROM Master Write Enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EEPE": {
    +                    "description": "EEPROM Write Enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EERE": {
    +                    "description": "EEPROM Read Enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          },
    +          "enums": {
    +            "EEP_MODE": {
    +              "size": 2,
    +              "children": {
    +                "enum_fields": {
    +                  "ERASE_AND_WRITE_IN_ONE_OPERATION": {
    +                    "description": "Erase and Write in one operation",
    +                    "value": 0
    +                  },
    +                  "ERASE_ONLY": {
    +                    "description": "Erase Only",
    +                    "value": 1
    +                  },
    +                  "WRITE_ONLY": {
    +                    "description": "Write Only",
    +                    "value": 2
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      }
    +    }
    +  },
    +  "devices": {
    +    "ATmega328P": {
    +      "arch": "avr8",
    +      "properties": {
    +        "family": "megaAVR",
    +        "arch": "AVR8"
    +      },
    +      "children": {
    +        "interrupts": {
    +          "RESET": {
    +            "index": 0,
    +            "description": "External Pin, Power-on Reset, Brown-out Reset and Watchdog Reset"
    +          },
    +          "INT0": {
    +            "index": 1,
    +            "description": "External Interrupt Request 0"
    +          },
    +          "INT1": {
    +            "index": 2,
    +            "description": "External Interrupt Request 1"
    +          },
    +          "PCINT0": {
    +            "index": 3,
    +            "description": "Pin Change Interrupt Request 0"
    +          },
    +          "PCINT1": {
    +            "index": 4,
    +            "description": "Pin Change Interrupt Request 1"
    +          },
    +          "PCINT2": {
    +            "index": 5,
    +            "description": "Pin Change Interrupt Request 2"
    +          },
    +          "WDT": {
    +            "index": 6,
    +            "description": "Watchdog Time-out Interrupt"
    +          },
    +          "TIMER2_COMPA": {
    +            "index": 7,
    +            "description": "Timer/Counter2 Compare Match A"
    +          },
    +          "TIMER2_COMPB": {
    +            "index": 8,
    +            "description": "Timer/Counter2 Compare Match B"
    +          },
    +          "TIMER2_OVF": {
    +            "index": 9,
    +            "description": "Timer/Counter2 Overflow"
    +          },
    +          "TIMER1_CAPT": {
    +            "index": 10,
    +            "description": "Timer/Counter1 Capture Event"
    +          },
    +          "TIMER1_COMPA": {
    +            "index": 11,
    +            "description": "Timer/Counter1 Compare Match A"
    +          },
    +          "TIMER1_COMPB": {
    +            "index": 12,
    +            "description": "Timer/Counter1 Compare Match B"
    +          },
    +          "TIMER1_OVF": {
    +            "index": 13,
    +            "description": "Timer/Counter1 Overflow"
    +          },
    +          "TIMER0_COMPA": {
    +            "index": 14,
    +            "description": "TimerCounter0 Compare Match A"
    +          },
    +          "TIMER0_COMPB": {
    +            "index": 15,
    +            "description": "TimerCounter0 Compare Match B"
    +          },
    +          "TIMER0_OVF": {
    +            "index": 16,
    +            "description": "Timer/Couner0 Overflow"
    +          },
    +          "SPI_STC": {
    +            "index": 17,
    +            "description": "SPI Serial Transfer Complete"
    +          },
    +          "USART_RX": {
    +            "index": 18,
    +            "description": "USART Rx Complete"
    +          },
    +          "USART_UDRE": {
    +            "index": 19,
    +            "description": "USART, Data Register Empty"
    +          },
    +          "USART_TX": {
    +            "index": 20,
    +            "description": "USART Tx Complete"
    +          },
    +          "ADC": {
    +            "index": 21,
    +            "description": "ADC Conversion Complete"
    +          },
    +          "EE_READY": {
    +            "index": 22,
    +            "description": "EEPROM Ready"
    +          },
    +          "ANALOG_COMP": {
    +            "index": 23,
    +            "description": "Analog Comparator"
    +          },
    +          "TWI": {
    +            "index": 24,
    +            "description": "Two-wire Serial Interface"
    +          },
    +          "SPM_Ready": {
    +            "index": 25,
    +            "description": "Store Program Memory Read"
    +          }
    +        },
    +        "peripheral_instances": {
    +          "USART0": {
    +            "description": "USART",
    +            "offset": 192,
    +            "type": "types.peripherals.USART.children.register_groups.USART0"
    +          },
    +          "TWI": {
    +            "description": "Two Wire Serial Interface",
    +            "offset": 184,
    +            "type": "types.peripherals.TWI"
    +          },
    +          "TC1": {
    +            "description": "Timer/Counter, 16-bit",
    +            "offset": 54,
    +            "type": "types.peripherals.TC16.children.register_groups.TC1"
    +          },
    +          "TC2": {
    +            "description": "Timer/Counter, 8-bit Async",
    +            "offset": 55,
    +            "type": "types.peripherals.TC8_ASYNC.children.register_groups.TC2"
    +          },
    +          "ADC": {
    +            "description": "Analog-to-Digital Converter",
    +            "offset": 120,
    +            "type": "types.peripherals.ADC"
    +          },
    +          "AC": {
    +            "description": "Analog Comparator",
    +            "offset": 80,
    +            "type": "types.peripherals.AC"
    +          },
    +          "PORTB": {
    +            "description": "I/O Port",
    +            "offset": 35,
    +            "type": "types.peripherals.PORT.children.register_groups.PORTB"
    +          },
    +          "PORTC": {
    +            "description": "I/O Port",
    +            "offset": 38,
    +            "type": "types.peripherals.PORT.children.register_groups.PORTC"
    +          },
    +          "PORTD": {
    +            "description": "I/O Port",
    +            "offset": 41,
    +            "type": "types.peripherals.PORT.children.register_groups.PORTD"
    +          },
    +          "TC0": {
    +            "description": "Timer/Counter, 8-bit",
    +            "offset": 53,
    +            "type": "types.peripherals.TC8.children.register_groups.TC0"
    +          },
    +          "EXINT": {
    +            "description": "External Interrupts",
    +            "offset": 59,
    +            "type": "types.peripherals.EXINT"
    +          },
    +          "SPI": {
    +            "description": "Serial Peripheral Interface",
    +            "offset": 76,
    +            "type": "types.peripherals.SPI"
    +          },
    +          "WDT": {
    +            "description": "Watchdog Timer",
    +            "offset": 96,
    +            "type": "types.peripherals.WDT"
    +          },
    +          "EEPROM": {
    +            "description": "EEPROM",
    +            "offset": 63,
    +            "type": "types.peripherals.EEPROM"
    +          },
    +          "CPU": {
    +            "description": "CPU Registers",
    +            "offset": 62,
    +            "type": "types.peripherals.CPU"
    +          },
    +          "FUSE": {
    +            "description": "Fuses",
    +            "offset": 0,
    +            "type": "types.peripherals.FUSE"
    +          },
    +          "LOCKBIT": {
    +            "description": "Lockbits",
    +            "offset": 0,
    +            "type": "types.peripherals.LOCKBIT"
    +          }
    +        }
    +      }
    +    }
    +  }
    +}
    \ No newline at end of file
    diff --git a/src/chips/ATmega328P.zig b/src/chips/ATmega328P.zig
    new file mode 100644
    index 000000000..604b37fec
    --- /dev/null
    +++ b/src/chips/ATmega328P.zig
    @@ -0,0 +1,1388 @@
    +const micro = @import("microzig");
    +const mmio = micro.mmio;
    +
    +pub const devices = struct {
    +    pub const ATmega328P = struct {
    +        pub const properties = struct {
    +            pub const family = "megaAVR";
    +            pub const arch = "AVR8";
    +        };
    +
    +        pub const VectorTable = extern struct {
    +            const Handler = micro.interrupt.Handler;
    +            const unhandled = micro.interrupt.unhandled;
    +
    +            RESET: Handler = unhandled,
    +            ///  External Interrupt Request 0
    +            INT0: Handler = unhandled,
    +            ///  External Interrupt Request 1
    +            INT1: Handler = unhandled,
    +            ///  Pin Change Interrupt Request 0
    +            PCINT0: Handler = unhandled,
    +            ///  Pin Change Interrupt Request 1
    +            PCINT1: Handler = unhandled,
    +            ///  Pin Change Interrupt Request 2
    +            PCINT2: Handler = unhandled,
    +            ///  Watchdog Time-out Interrupt
    +            WDT: Handler = unhandled,
    +            ///  Timer/Counter2 Compare Match A
    +            TIMER2_COMPA: Handler = unhandled,
    +            ///  Timer/Counter2 Compare Match B
    +            TIMER2_COMPB: Handler = unhandled,
    +            ///  Timer/Counter2 Overflow
    +            TIMER2_OVF: Handler = unhandled,
    +            ///  Timer/Counter1 Capture Event
    +            TIMER1_CAPT: Handler = unhandled,
    +            ///  Timer/Counter1 Compare Match A
    +            TIMER1_COMPA: Handler = unhandled,
    +            ///  Timer/Counter1 Compare Match B
    +            TIMER1_COMPB: Handler = unhandled,
    +            ///  Timer/Counter1 Overflow
    +            TIMER1_OVF: Handler = unhandled,
    +            ///  TimerCounter0 Compare Match A
    +            TIMER0_COMPA: Handler = unhandled,
    +            ///  TimerCounter0 Compare Match B
    +            TIMER0_COMPB: Handler = unhandled,
    +            ///  Timer/Couner0 Overflow
    +            TIMER0_OVF: Handler = unhandled,
    +            ///  SPI Serial Transfer Complete
    +            SPI_STC: Handler = unhandled,
    +            ///  USART Rx Complete
    +            USART_RX: Handler = unhandled,
    +            ///  USART, Data Register Empty
    +            USART_UDRE: Handler = unhandled,
    +            ///  USART Tx Complete
    +            USART_TX: Handler = unhandled,
    +            ///  ADC Conversion Complete
    +            ADC: Handler = unhandled,
    +            ///  EEPROM Ready
    +            EE_READY: Handler = unhandled,
    +            ///  Analog Comparator
    +            ANALOG_COMP: Handler = unhandled,
    +            ///  Two-wire Serial Interface
    +            TWI: Handler = unhandled,
    +            ///  Store Program Memory Read
    +            SPM_Ready: Handler = unhandled,
    +        };
    +
    +        pub const peripherals = struct {
    +            ///  Fuses
    +            pub const FUSE = @intToPtr(*volatile types.peripherals.FUSE, 0x0);
    +            ///  Lockbits
    +            pub const LOCKBIT = @intToPtr(*volatile types.peripherals.LOCKBIT, 0x0);
    +            ///  I/O Port
    +            pub const PORTB = @intToPtr(*volatile types.peripherals.PORT.PORTB, 0x23);
    +            ///  I/O Port
    +            pub const PORTC = @intToPtr(*volatile types.peripherals.PORT.PORTC, 0x26);
    +            ///  I/O Port
    +            pub const PORTD = @intToPtr(*volatile types.peripherals.PORT.PORTD, 0x29);
    +            ///  Timer/Counter, 8-bit
    +            pub const TC0 = @intToPtr(*volatile types.peripherals.TC8.TC0, 0x35);
    +            ///  Timer/Counter, 16-bit
    +            pub const TC1 = @intToPtr(*volatile types.peripherals.TC16.TC1, 0x36);
    +            ///  Timer/Counter, 8-bit Async
    +            pub const TC2 = @intToPtr(*volatile types.peripherals.TC8_ASYNC.TC2, 0x37);
    +            ///  External Interrupts
    +            pub const EXINT = @intToPtr(*volatile types.peripherals.EXINT, 0x3b);
    +            ///  CPU Registers
    +            pub const CPU = @intToPtr(*volatile types.peripherals.CPU, 0x3e);
    +            ///  EEPROM
    +            pub const EEPROM = @intToPtr(*volatile types.peripherals.EEPROM, 0x3f);
    +            ///  Serial Peripheral Interface
    +            pub const SPI = @intToPtr(*volatile types.peripherals.SPI, 0x4c);
    +            ///  Analog Comparator
    +            pub const AC = @intToPtr(*volatile types.peripherals.AC, 0x50);
    +            ///  Watchdog Timer
    +            pub const WDT = @intToPtr(*volatile types.peripherals.WDT, 0x60);
    +            ///  Analog-to-Digital Converter
    +            pub const ADC = @intToPtr(*volatile types.peripherals.ADC, 0x78);
    +            ///  Two Wire Serial Interface
    +            pub const TWI = @intToPtr(*volatile types.peripherals.TWI, 0xb8);
    +            ///  USART
    +            pub const USART0 = @intToPtr(*volatile types.peripherals.USART.USART0, 0xc0);
    +        };
    +    };
    +};
    +
    +pub const types = struct {
    +    pub const peripherals = struct {
    +        ///  Fuses
    +        pub const FUSE = extern struct {
    +            pub const ENUM_SUT_CKSEL = enum(u6) {
    +                ///  Ext. Clock; Start-up time PWRDWN/RESET: 6 CK/14 CK + 0 ms
    +                EXTCLK_6CK_14CK_0MS = 0x0,
    +                ///  Ext. Clock; Start-up time PWRDWN/RESET: 6 CK/14 CK + 4.1 ms
    +                EXTCLK_6CK_14CK_4MS1 = 0x10,
    +                ///  Ext. Clock; Start-up time PWRDWN/RESET: 6 CK/14 CK + 65 ms
    +                EXTCLK_6CK_14CK_65MS = 0x20,
    +                ///  Int. RC Osc. 8 MHz; Start-up time PWRDWN/RESET: 6 CK/14 CK + 0 ms
    +                INTRCOSC_8MHZ_6CK_14CK_0MS = 0x2,
    +                ///  Int. RC Osc. 8 MHz; Start-up time PWRDWN/RESET: 6 CK/14 CK + 4.1 ms
    +                INTRCOSC_8MHZ_6CK_14CK_4MS1 = 0x12,
    +                ///  Int. RC Osc. 8 MHz; Start-up time PWRDWN/RESET: 6 CK/14 CK + 65 ms
    +                INTRCOSC_8MHZ_6CK_14CK_65MS = 0x22,
    +                ///  Int. RC Osc. 128kHz; Start-up time PWRDWN/RESET: 6 CK/14 CK + 0 ms
    +                INTRCOSC_128KHZ_6CK_14CK_0MS = 0x3,
    +                ///  Int. RC Osc. 128kHz; Start-up time PWRDWN/RESET: 6 CK/14 CK + 4.1 ms
    +                INTRCOSC_128KHZ_6CK_14CK_4MS1 = 0x13,
    +                ///  Int. RC Osc. 128kHz; Start-up time PWRDWN/RESET: 6 CK/14 CK + 65 ms
    +                INTRCOSC_128KHZ_6CK_14CK_65MS = 0x23,
    +                ///  Ext. Low-Freq. Crystal; Start-up time PWRDWN/RESET: 1K CK/14 CK + 0 ms
    +                EXTLOFXTAL_1KCK_14CK_0MS = 0x4,
    +                ///  Ext. Low-Freq. Crystal; Start-up time PWRDWN/RESET: 1K CK/14 CK + 4.1 ms
    +                EXTLOFXTAL_1KCK_14CK_4MS1 = 0x14,
    +                ///  Ext. Low-Freq. Crystal; Start-up time PWRDWN/RESET: 1K CK/14 CK + 65 ms
    +                EXTLOFXTAL_1KCK_14CK_65MS = 0x24,
    +                ///  Ext. Low-Freq. Crystal; Start-up time PWRDWN/RESET: 32K CK/14 CK + 0 ms
    +                EXTLOFXTAL_32KCK_14CK_0MS = 0x5,
    +                ///  Ext. Low-Freq. Crystal; Start-up time PWRDWN/RESET: 32K CK/14 CK + 4.1 ms
    +                EXTLOFXTAL_32KCK_14CK_4MS1 = 0x15,
    +                ///  Ext. Low-Freq. Crystal; Start-up time PWRDWN/RESET: 32K CK/14 CK + 65 ms
    +                EXTLOFXTAL_32KCK_14CK_65MS = 0x25,
    +                ///  Ext. Full-swing Crystal; Start-up time PWRDWN/RESET: 258 CK/14 CK + 4.1 ms
    +                EXTFSXTAL_258CK_14CK_4MS1 = 0x6,
    +                ///  Ext. Full-swing Crystal; Start-up time PWRDWN/RESET: 258 CK/14 CK + 65 ms
    +                EXTFSXTAL_258CK_14CK_65MS = 0x16,
    +                ///  Ext. Full-swing Crystal; Start-up time PWRDWN/RESET: 1K CK /14 CK + 0 ms
    +                EXTFSXTAL_1KCK_14CK_0MS = 0x26,
    +                ///  Ext. Full-swing Crystal; Start-up time PWRDWN/RESET: 1K CK /14 CK + 4.1 ms
    +                EXTFSXTAL_1KCK_14CK_4MS1 = 0x36,
    +                ///  Ext. Full-swing Crystal; Start-up time PWRDWN/RESET: 1K CK /14 CK + 65 ms
    +                EXTFSXTAL_1KCK_14CK_65MS = 0x7,
    +                ///  Ext. Full-swing Crystal; Start-up time PWRDWN/RESET: 16K CK/14 CK + 0 ms
    +                EXTFSXTAL_16KCK_14CK_0MS = 0x17,
    +                ///  Ext. Full-swing Crystal; Start-up time PWRDWN/RESET: 16K CK/14 CK + 4.1 ms
    +                EXTFSXTAL_16KCK_14CK_4MS1 = 0x27,
    +                ///  Ext. Full-swing Crystal; Start-up time PWRDWN/RESET: 16K CK/14 CK + 65 ms
    +                EXTFSXTAL_16KCK_14CK_65MS = 0x37,
    +                ///  Ext. Crystal Osc. 0.4-0.9 MHz; Start-up time PWRDWN/RESET: 258 CK/14 CK + 4.1 ms
    +                EXTXOSC_0MHZ4_0MHZ9_258CK_14CK_4MS1 = 0x8,
    +                ///  Ext. Crystal Osc. 0.4-0.9 MHz; Start-up time PWRDWN/RESET: 258 CK/14 CK + 65 ms
    +                EXTXOSC_0MHZ4_0MHZ9_258CK_14CK_65MS = 0x18,
    +                ///  Ext. Crystal Osc. 0.4-0.9 MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 0 ms
    +                EXTXOSC_0MHZ4_0MHZ9_1KCK_14CK_0MS = 0x28,
    +                ///  Ext. Crystal Osc. 0.4-0.9 MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 4.1 ms
    +                EXTXOSC_0MHZ4_0MHZ9_1KCK_14CK_4MS1 = 0x38,
    +                ///  Ext. Crystal Osc. 0.4-0.9 MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 65 ms
    +                EXTXOSC_0MHZ4_0MHZ9_1KCK_14CK_65MS = 0x9,
    +                ///  Ext. Crystal Osc. 0.4-0.9 MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 0 ms
    +                EXTXOSC_0MHZ4_0MHZ9_16KCK_14CK_0MS = 0x19,
    +                ///  Ext. Crystal Osc. 0.4-0.9 MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 4.1 ms
    +                EXTXOSC_0MHZ4_0MHZ9_16KCK_14CK_4MS1 = 0x29,
    +                ///  Ext. Crystal Osc. 0.4-0.9 MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 65 ms
    +                EXTXOSC_0MHZ4_0MHZ9_16KCK_14CK_65MS = 0x39,
    +                ///  Ext. Crystal Osc. 0.9-3.0 MHz; Start-up time PWRDWN/RESET: 258 CK/14 CK + 4.1 ms
    +                EXTXOSC_0MHZ9_3MHZ_258CK_14CK_4MS1 = 0xa,
    +                ///  Ext. Crystal Osc. 0.9-3.0 MHz; Start-up time PWRDWN/RESET: 258 CK/14 CK + 65 ms
    +                EXTXOSC_0MHZ9_3MHZ_258CK_14CK_65MS = 0x1a,
    +                ///  Ext. Crystal Osc. 0.9-3.0 MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 0 ms
    +                EXTXOSC_0MHZ9_3MHZ_1KCK_14CK_0MS = 0x2a,
    +                ///  Ext. Crystal Osc. 0.9-3.0 MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 4.1 ms
    +                EXTXOSC_0MHZ9_3MHZ_1KCK_14CK_4MS1 = 0x3a,
    +                ///  Ext. Crystal Osc. 0.9-3.0 MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 65 ms
    +                EXTXOSC_0MHZ9_3MHZ_1KCK_14CK_65MS = 0xb,
    +                ///  Ext. Crystal Osc. 0.9-3.0 MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 0 ms
    +                EXTXOSC_0MHZ9_3MHZ_16KCK_14CK_0MS = 0x1b,
    +                ///  Ext. Crystal Osc. 0.9-3.0 MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 4.1 ms
    +                EXTXOSC_0MHZ9_3MHZ_16KCK_14CK_4MS1 = 0x2b,
    +                ///  Ext. Crystal Osc. 0.9-3.0 MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 65 ms
    +                EXTXOSC_0MHZ9_3MHZ_16KCK_14CK_65MS = 0x3b,
    +                ///  Ext. Crystal Osc. 3.0-8.0 MHz; Start-up time PWRDWN/RESET: 258 CK/14 CK + 4.1 ms
    +                EXTXOSC_3MHZ_8MHZ_258CK_14CK_4MS1 = 0xc,
    +                ///  Ext. Crystal Osc. 3.0-8.0 MHz; Start-up time PWRDWN/RESET: 258 CK/14 CK + 65 ms
    +                EXTXOSC_3MHZ_8MHZ_258CK_14CK_65MS = 0x1c,
    +                ///  Ext. Crystal Osc. 3.0-8.0 MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 0 ms
    +                EXTXOSC_3MHZ_8MHZ_1KCK_14CK_0MS = 0x2c,
    +                ///  Ext. Crystal Osc. 3.0-8.0 MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 4.1 ms
    +                EXTXOSC_3MHZ_8MHZ_1KCK_14CK_4MS1 = 0x3c,
    +                ///  Ext. Crystal Osc. 3.0-8.0 MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 65 ms
    +                EXTXOSC_3MHZ_8MHZ_1KCK_14CK_65MS = 0xd,
    +                ///  Ext. Crystal Osc. 3.0-8.0 MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 0 ms
    +                EXTXOSC_3MHZ_8MHZ_16KCK_14CK_0MS = 0x1d,
    +                ///  Ext. Crystal Osc. 3.0-8.0 MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 4.1 ms
    +                EXTXOSC_3MHZ_8MHZ_16KCK_14CK_4MS1 = 0x2d,
    +                ///  Ext. Crystal Osc. 3.0-8.0 MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 65 ms
    +                EXTXOSC_3MHZ_8MHZ_16KCK_14CK_65MS = 0x3d,
    +                ///  Ext. Crystal Osc. 8.0- MHz; Start-up time PWRDWN/RESET: 258 CK/14 CK + 4.1 ms
    +                EXTXOSC_8MHZ_XX_258CK_14CK_4MS1 = 0xe,
    +                ///  Ext. Crystal Osc. 8.0- MHz; Start-up time PWRDWN/RESET: 258 CK/14 CK + 65 ms
    +                EXTXOSC_8MHZ_XX_258CK_14CK_65MS = 0x1e,
    +                ///  Ext. Crystal Osc. 8.0- MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 0 ms
    +                EXTXOSC_8MHZ_XX_1KCK_14CK_0MS = 0x2e,
    +                ///  Ext. Crystal Osc. 8.0- MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 4.1 ms
    +                EXTXOSC_8MHZ_XX_1KCK_14CK_4MS1 = 0x3e,
    +                ///  Ext. Crystal Osc. 8.0- MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 65 ms
    +                EXTXOSC_8MHZ_XX_1KCK_14CK_65MS = 0xf,
    +                ///  Ext. Crystal Osc. 8.0- MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 0 ms
    +                EXTXOSC_8MHZ_XX_16KCK_14CK_0MS = 0x1f,
    +                ///  Ext. Crystal Osc. 8.0- MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 4.1 ms
    +                EXTXOSC_8MHZ_XX_16KCK_14CK_4MS1 = 0x2f,
    +                ///  Ext. Crystal Osc. 8.0- MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 65 ms
    +                EXTXOSC_8MHZ_XX_16KCK_14CK_65MS = 0x3f,
    +                _,
    +            };
    +
    +            pub const ENUM_BODLEVEL = enum(u3) {
    +                ///  Brown-out detection at VCC=4.3 V
    +                @"4V3" = 0x4,
    +                ///  Brown-out detection at VCC=2.7 V
    +                @"2V7" = 0x5,
    +                ///  Brown-out detection at VCC=1.8 V
    +                @"1V8" = 0x6,
    +                ///  Brown-out detection disabled
    +                DISABLED = 0x7,
    +                _,
    +            };
    +
    +            pub const ENUM_BOOTSZ = enum(u2) {
    +                ///  Boot Flash size=256 words start address=$3F00
    +                @"256W_3F00" = 0x3,
    +                ///  Boot Flash size=512 words start address=$3E00
    +                @"512W_3E00" = 0x2,
    +                ///  Boot Flash size=1024 words start address=$3C00
    +                @"1024W_3C00" = 0x1,
    +                ///  Boot Flash size=2048 words start address=$3800
    +                @"2048W_3800" = 0x0,
    +            };
    +
    +            LOW: mmio.Mmio(packed struct(u8) {
    +                ///  Select Clock Source
    +                SUT_CKSEL: packed union {
    +                    raw: u6,
    +                    value: ENUM_SUT_CKSEL,
    +                },
    +                ///  Clock output on PORTB0
    +                CKOUT: u1,
    +                ///  Divide clock by 8 internally
    +                CKDIV8: u1,
    +            }),
    +            HIGH: mmio.Mmio(packed struct(u8) {
    +                ///  Boot Reset vector Enabled
    +                BOOTRST: u1,
    +                ///  Select boot size
    +                BOOTSZ: packed union {
    +                    raw: u2,
    +                    value: ENUM_BOOTSZ,
    +                },
    +                ///  Preserve EEPROM through the Chip Erase cycle
    +                EESAVE: u1,
    +                ///  Watch-dog Timer always on
    +                WDTON: u1,
    +                ///  Serial program downloading (SPI) enabled
    +                SPIEN: u1,
    +                ///  Debug Wire enable
    +                DWEN: u1,
    +                ///  Reset Disabled (Enable PC6 as i/o pin)
    +                RSTDISBL: u1,
    +            }),
    +            EXTENDED: mmio.Mmio(packed struct(u8) {
    +                ///  Brown-out Detector trigger level
    +                BODLEVEL: packed union {
    +                    raw: u3,
    +                    value: ENUM_BODLEVEL,
    +                },
    +                padding: u5,
    +            }),
    +        };
    +
    +        ///  Lockbits
    +        pub const LOCKBIT = extern struct {
    +            pub const ENUM_LB = enum(u2) {
    +                ///  Further programming and verification disabled
    +                PROG_VER_DISABLED = 0x0,
    +                ///  Further programming disabled
    +                PROG_DISABLED = 0x2,
    +                ///  No memory lock features enabled
    +                NO_LOCK = 0x3,
    +                _,
    +            };
    +
    +            pub const ENUM_BLB = enum(u2) {
    +                ///  LPM and SPM prohibited in Application Section
    +                LPM_SPM_DISABLE = 0x0,
    +                ///  LPM prohibited in Application Section
    +                LPM_DISABLE = 0x1,
    +                ///  SPM prohibited in Application Section
    +                SPM_DISABLE = 0x2,
    +                ///  No lock on SPM and LPM in Application Section
    +                NO_LOCK = 0x3,
    +            };
    +
    +            pub const ENUM_BLB2 = enum(u2) {
    +                ///  LPM and SPM prohibited in Boot Section
    +                LPM_SPM_DISABLE = 0x0,
    +                ///  LPM prohibited in Boot Section
    +                LPM_DISABLE = 0x1,
    +                ///  SPM prohibited in Boot Section
    +                SPM_DISABLE = 0x2,
    +                ///  No lock on SPM and LPM in Boot Section
    +                NO_LOCK = 0x3,
    +            };
    +
    +            LOCKBIT: mmio.Mmio(packed struct(u8) {
    +                ///  Memory Lock
    +                LB: packed union {
    +                    raw: u2,
    +                    value: ENUM_LB,
    +                },
    +                ///  Boot Loader Protection Mode
    +                BLB0: packed union {
    +                    raw: u2,
    +                    value: ENUM_BLB,
    +                },
    +                ///  Boot Loader Protection Mode
    +                BLB1: packed union {
    +                    raw: u2,
    +                    value: ENUM_BLB2,
    +                },
    +                padding: u2,
    +            }),
    +        };
    +
    +        ///  USART
    +        pub const USART = struct {
    +            pub const COMM_USART_MODE_2BIT = enum(u2) {
    +                ///  Asynchronous USART
    +                ASYNCHRONOUS_USART = 0x0,
    +                ///  Synchronous USART
    +                SYNCHRONOUS_USART = 0x1,
    +                ///  Master SPI
    +                MASTER_SPI = 0x3,
    +                _,
    +            };
    +
    +            pub const COMM_UPM_PARITY_MODE = enum(u2) {
    +                ///  Disabled
    +                DISABLED = 0x0,
    +                ///  Reserved
    +                RESERVED = 0x1,
    +                ///  Enabled, Even Parity
    +                ENABLED_EVEN_PARITY = 0x2,
    +                ///  Enabled, Odd Parity
    +                ENABLED_ODD_PARITY = 0x3,
    +            };
    +
    +            pub const COMM_STOP_BIT_SEL = enum(u1) {
    +                ///  1-bit
    +                @"1_BIT" = 0x0,
    +                ///  2-bit
    +                @"2_BIT" = 0x1,
    +            };
    +
    +            ///  USART
    +            pub const USART0 = extern struct {
    +                ///  USART Control and Status Register A
    +                UCSR0A: mmio.Mmio(packed struct(u8) {
    +                    ///  Multi-processor Communication Mode
    +                    MPCM0: u1,
    +                    ///  Double the USART transmission speed
    +                    U2X0: u1,
    +                    ///  Parity Error
    +                    UPE0: u1,
    +                    ///  Data overRun
    +                    DOR0: u1,
    +                    ///  Framing Error
    +                    FE0: u1,
    +                    ///  USART Data Register Empty
    +                    UDRE0: u1,
    +                    ///  USART Transmitt Complete
    +                    TXC0: u1,
    +                    ///  USART Receive Complete
    +                    RXC0: u1,
    +                }),
    +                ///  USART Control and Status Register B
    +                UCSR0B: mmio.Mmio(packed struct(u8) {
    +                    ///  Transmit Data Bit 8
    +                    TXB80: u1,
    +                    ///  Receive Data Bit 8
    +                    RXB80: u1,
    +                    ///  Character Size - together with UCSZ0 in UCSR0C
    +                    UCSZ02: u1,
    +                    ///  Transmitter Enable
    +                    TXEN0: u1,
    +                    ///  Receiver Enable
    +                    RXEN0: u1,
    +                    ///  USART Data register Empty Interrupt Enable
    +                    UDRIE0: u1,
    +                    ///  TX Complete Interrupt Enable
    +                    TXCIE0: u1,
    +                    ///  RX Complete Interrupt Enable
    +                    RXCIE0: u1,
    +                }),
    +                ///  USART Control and Status Register C
    +                UCSR0C: mmio.Mmio(packed struct(u8) {
    +                    ///  Clock Polarity
    +                    UCPOL0: u1,
    +                    ///  Character Size - together with UCSZ2 in UCSR0B
    +                    UCSZ0: u2,
    +                    ///  Stop Bit Select
    +                    USBS0: packed union {
    +                        raw: u1,
    +                        value: COMM_STOP_BIT_SEL,
    +                    },
    +                    ///  Parity Mode Bits
    +                    UPM0: packed union {
    +                        raw: u2,
    +                        value: COMM_UPM_PARITY_MODE,
    +                    },
    +                    ///  USART Mode Select
    +                    UMSEL0: packed union {
    +                        raw: u2,
    +                        value: COMM_USART_MODE_2BIT,
    +                    },
    +                }),
    +                reserved4: [1]u8,
    +                ///  USART Baud Rate Register Bytes
    +                UBRR0: u16,
    +                ///  USART I/O Data Register
    +                UDR0: u8,
    +            };
    +        };
    +
    +        ///  Two Wire Serial Interface
    +        pub const TWI = extern struct {
    +            pub const COMM_TWI_PRESACLE = enum(u2) {
    +                ///  1
    +                @"1" = 0x0,
    +                ///  4
    +                @"4" = 0x1,
    +                ///  16
    +                @"16" = 0x2,
    +                ///  64
    +                @"64" = 0x3,
    +            };
    +
    +            ///  TWI Bit Rate register
    +            TWBR: u8,
    +            ///  TWI Status Register
    +            TWSR: mmio.Mmio(packed struct(u8) {
    +                ///  TWI Prescaler
    +                TWPS: packed union {
    +                    raw: u2,
    +                    value: COMM_TWI_PRESACLE,
    +                },
    +                reserved3: u1,
    +                ///  TWI Status
    +                TWS: u5,
    +            }),
    +            ///  TWI (Slave) Address register
    +            TWAR: mmio.Mmio(packed struct(u8) {
    +                ///  TWI General Call Recognition Enable Bit
    +                TWGCE: u1,
    +                ///  TWI (Slave) Address register Bits
    +                TWA: u7,
    +            }),
    +            ///  TWI Data register
    +            TWDR: u8,
    +            ///  TWI Control Register
    +            TWCR: mmio.Mmio(packed struct(u8) {
    +                ///  TWI Interrupt Enable
    +                TWIE: u1,
    +                reserved2: u1,
    +                ///  TWI Enable Bit
    +                TWEN: u1,
    +                ///  TWI Write Collition Flag
    +                TWWC: u1,
    +                ///  TWI Stop Condition Bit
    +                TWSTO: u1,
    +                ///  TWI Start Condition Bit
    +                TWSTA: u1,
    +                ///  TWI Enable Acknowledge Bit
    +                TWEA: u1,
    +                ///  TWI Interrupt Flag
    +                TWINT: u1,
    +            }),
    +            ///  TWI (Slave) Address Mask Register
    +            TWAMR: mmio.Mmio(packed struct(u8) {
    +                reserved1: u1,
    +                TWAM: u7,
    +            }),
    +        };
    +
    +        ///  Timer/Counter, 16-bit
    +        pub const TC16 = struct {
    +            pub const CLK_SEL_3BIT_EXT = enum(u3) {
    +                ///  No Clock Source (Stopped)
    +                NO_CLOCK_SOURCE_STOPPED = 0x0,
    +                ///  Running, No Prescaling
    +                RUNNING_NO_PRESCALING = 0x1,
    +                ///  Running, CLK/8
    +                RUNNING_CLK_8 = 0x2,
    +                ///  Running, CLK/64
    +                RUNNING_CLK_64 = 0x3,
    +                ///  Running, CLK/256
    +                RUNNING_CLK_256 = 0x4,
    +                ///  Running, CLK/1024
    +                RUNNING_CLK_1024 = 0x5,
    +                ///  Running, ExtClk Tn Falling Edge
    +                RUNNING_EXTCLK_TN_FALLING_EDGE = 0x6,
    +                ///  Running, ExtClk Tn Rising Edge
    +                RUNNING_EXTCLK_TN_RISING_EDGE = 0x7,
    +            };
    +
    +            ///  Timer/Counter, 16-bit
    +            pub const TC1 = extern struct {
    +                ///  Timer/Counter Interrupt Flag register
    +                TIFR1: mmio.Mmio(packed struct(u8) {
    +                    ///  Timer/Counter1 Overflow Flag
    +                    TOV1: u1,
    +                    ///  Output Compare Flag 1A
    +                    OCF1A: u1,
    +                    ///  Output Compare Flag 1B
    +                    OCF1B: u1,
    +                    reserved5: u2,
    +                    ///  Input Capture Flag 1
    +                    ICF1: u1,
    +                    padding: u2,
    +                }),
    +                reserved13: [12]u8,
    +                ///  General Timer/Counter Control Register
    +                GTCCR: mmio.Mmio(packed struct(u8) {
    +                    ///  Prescaler Reset Timer/Counter1 and Timer/Counter0
    +                    PSRSYNC: u1,
    +                    reserved7: u6,
    +                    ///  Timer/Counter Synchronization Mode
    +                    TSM: u1,
    +                }),
    +                reserved57: [43]u8,
    +                ///  Timer/Counter Interrupt Mask Register
    +                TIMSK1: mmio.Mmio(packed struct(u8) {
    +                    ///  Timer/Counter1 Overflow Interrupt Enable
    +                    TOIE1: u1,
    +                    ///  Timer/Counter1 Output CompareA Match Interrupt Enable
    +                    OCIE1A: u1,
    +                    ///  Timer/Counter1 Output CompareB Match Interrupt Enable
    +                    OCIE1B: u1,
    +                    reserved5: u2,
    +                    ///  Timer/Counter1 Input Capture Interrupt Enable
    +                    ICIE1: u1,
    +                    padding: u2,
    +                }),
    +                reserved74: [16]u8,
    +                ///  Timer/Counter1 Control Register A
    +                TCCR1A: mmio.Mmio(packed struct(u8) {
    +                    ///  Waveform Generation Mode
    +                    WGM1: u2,
    +                    reserved4: u2,
    +                    ///  Compare Output Mode 1B, bits
    +                    COM1B: u2,
    +                    ///  Compare Output Mode 1A, bits
    +                    COM1A: u2,
    +                }),
    +                ///  Timer/Counter1 Control Register B
    +                TCCR1B: mmio.Mmio(packed struct(u8) {
    +                    ///  Prescaler source of Timer/Counter 1
    +                    CS1: packed union {
    +                        raw: u3,
    +                        value: CLK_SEL_3BIT_EXT,
    +                    },
    +                    ///  Waveform Generation Mode
    +                    WGM1: u2,
    +                    reserved6: u1,
    +                    ///  Input Capture 1 Edge Select
    +                    ICES1: u1,
    +                    ///  Input Capture 1 Noise Canceler
    +                    ICNC1: u1,
    +                }),
    +                ///  Timer/Counter1 Control Register C
    +                TCCR1C: mmio.Mmio(packed struct(u8) {
    +                    reserved6: u6,
    +                    FOC1B: u1,
    +                    FOC1A: u1,
    +                }),
    +                reserved78: [1]u8,
    +                ///  Timer/Counter1 Bytes
    +                TCNT1: u16,
    +                ///  Timer/Counter1 Input Capture Register Bytes
    +                ICR1: u16,
    +                ///  Timer/Counter1 Output Compare Register Bytes
    +                OCR1A: u16,
    +                ///  Timer/Counter1 Output Compare Register Bytes
    +                OCR1B: u16,
    +            };
    +        };
    +
    +        ///  Timer/Counter, 8-bit Async
    +        pub const TC8_ASYNC = struct {
    +            pub const CLK_SEL_3BIT = enum(u3) {
    +                ///  No Clock Source (Stopped)
    +                NO_CLOCK_SOURCE_STOPPED = 0x0,
    +                ///  Running, No Prescaling
    +                RUNNING_NO_PRESCALING = 0x1,
    +                ///  Running, CLK/8
    +                RUNNING_CLK_8 = 0x2,
    +                ///  Running, CLK/32
    +                RUNNING_CLK_32 = 0x3,
    +                ///  Running, CLK/64
    +                RUNNING_CLK_64 = 0x4,
    +                ///  Running, CLK/128
    +                RUNNING_CLK_128 = 0x5,
    +                ///  Running, CLK/256
    +                RUNNING_CLK_256 = 0x6,
    +                ///  Running, CLK/1024
    +                RUNNING_CLK_1024 = 0x7,
    +            };
    +
    +            ///  Timer/Counter, 8-bit Async
    +            pub const TC2 = extern struct {
    +                ///  Timer/Counter Interrupt Flag Register
    +                TIFR2: mmio.Mmio(packed struct(u8) {
    +                    ///  Timer/Counter2 Overflow Flag
    +                    TOV2: u1,
    +                    ///  Output Compare Flag 2A
    +                    OCF2A: u1,
    +                    ///  Output Compare Flag 2B
    +                    OCF2B: u1,
    +                    padding: u5,
    +                }),
    +                reserved12: [11]u8,
    +                ///  General Timer Counter Control register
    +                GTCCR: mmio.Mmio(packed struct(u8) {
    +                    reserved1: u1,
    +                    ///  Prescaler Reset Timer/Counter2
    +                    PSRASY: u1,
    +                    reserved7: u5,
    +                    ///  Timer/Counter Synchronization Mode
    +                    TSM: u1,
    +                }),
    +                reserved57: [44]u8,
    +                ///  Timer/Counter Interrupt Mask register
    +                TIMSK2: mmio.Mmio(packed struct(u8) {
    +                    ///  Timer/Counter2 Overflow Interrupt Enable
    +                    TOIE2: u1,
    +                    ///  Timer/Counter2 Output Compare Match A Interrupt Enable
    +                    OCIE2A: u1,
    +                    ///  Timer/Counter2 Output Compare Match B Interrupt Enable
    +                    OCIE2B: u1,
    +                    padding: u5,
    +                }),
    +                reserved121: [63]u8,
    +                ///  Timer/Counter2 Control Register A
    +                TCCR2A: mmio.Mmio(packed struct(u8) {
    +                    ///  Waveform Genration Mode
    +                    WGM2: u2,
    +                    reserved4: u2,
    +                    ///  Compare Output Mode bits
    +                    COM2B: u2,
    +                    ///  Compare Output Mode bits
    +                    COM2A: u2,
    +                }),
    +                ///  Timer/Counter2 Control Register B
    +                TCCR2B: mmio.Mmio(packed struct(u8) {
    +                    ///  Clock Select bits
    +                    CS2: packed union {
    +                        raw: u3,
    +                        value: CLK_SEL_3BIT,
    +                    },
    +                    ///  Waveform Generation Mode
    +                    WGM22: u1,
    +                    reserved6: u2,
    +                    ///  Force Output Compare B
    +                    FOC2B: u1,
    +                    ///  Force Output Compare A
    +                    FOC2A: u1,
    +                }),
    +                ///  Timer/Counter2
    +                TCNT2: u8,
    +                ///  Timer/Counter2 Output Compare Register A
    +                OCR2A: u8,
    +                ///  Timer/Counter2 Output Compare Register B
    +                OCR2B: u8,
    +                reserved127: [1]u8,
    +                ///  Asynchronous Status Register
    +                ASSR: mmio.Mmio(packed struct(u8) {
    +                    ///  Timer/Counter Control Register2 Update Busy
    +                    TCR2BUB: u1,
    +                    ///  Timer/Counter Control Register2 Update Busy
    +                    TCR2AUB: u1,
    +                    ///  Output Compare Register 2 Update Busy
    +                    OCR2BUB: u1,
    +                    ///  Output Compare Register2 Update Busy
    +                    OCR2AUB: u1,
    +                    ///  Timer/Counter2 Update Busy
    +                    TCN2UB: u1,
    +                    ///  Asynchronous Timer/Counter2
    +                    AS2: u1,
    +                    ///  Enable External Clock Input
    +                    EXCLK: u1,
    +                    padding: u1,
    +                }),
    +            };
    +        };
    +
    +        ///  Analog-to-Digital Converter
    +        pub const ADC = extern struct {
    +            pub const ANALOG_ADC_V_REF3 = enum(u2) {
    +                ///  AREF, Internal Vref turned off
    +                AREF_INTERNAL_VREF_TURNED_OFF = 0x0,
    +                ///  AVCC with external capacitor at AREF pin
    +                AVCC_WITH_EXTERNAL_CAPACITOR_AT_AREF_PIN = 0x1,
    +                ///  Reserved
    +                RESERVED = 0x2,
    +                ///  Internal 1.1V Voltage Reference with external capacitor at AREF pin
    +                INTERNAL_1_1V_VOLTAGE_REFERENCE_WITH_EXTERNAL_CAPACITOR_AT_AREF_PIN = 0x3,
    +            };
    +
    +            pub const ADC_MUX_SINGLE = enum(u4) {
    +                ///  ADC Single Ended Input pin 0
    +                ADC0 = 0x0,
    +                ///  ADC Single Ended Input pin 1
    +                ADC1 = 0x1,
    +                ///  ADC Single Ended Input pin 2
    +                ADC2 = 0x2,
    +                ///  ADC Single Ended Input pin 3
    +                ADC3 = 0x3,
    +                ///  ADC Single Ended Input pin 4
    +                ADC4 = 0x4,
    +                ///  ADC Single Ended Input pin 5
    +                ADC5 = 0x5,
    +                ///  ADC Single Ended Input pin 6
    +                ADC6 = 0x6,
    +                ///  ADC Single Ended Input pin 7
    +                ADC7 = 0x7,
    +                ///  Temperature sensor
    +                TEMPSENS = 0x8,
    +                ///  Internal Reference (VBG)
    +                ADC_VBG = 0xe,
    +                ///  0V (GND)
    +                ADC_GND = 0xf,
    +                _,
    +            };
    +
    +            pub const ANALOG_ADC_PRESCALER = enum(u3) {
    +                ///  2
    +                @"2" = 0x0,
    +                ///  2
    +                @"2" = 0x1,
    +                ///  4
    +                @"4" = 0x2,
    +                ///  8
    +                @"8" = 0x3,
    +                ///  16
    +                @"16" = 0x4,
    +                ///  32
    +                @"32" = 0x5,
    +                ///  64
    +                @"64" = 0x6,
    +                ///  128
    +                @"128" = 0x7,
    +            };
    +
    +            pub const ANALOG_ADC_AUTO_TRIGGER = enum(u3) {
    +                ///  Free Running mode
    +                FREE_RUNNING_MODE = 0x0,
    +                ///  Analog Comparator
    +                ANALOG_COMPARATOR = 0x1,
    +                ///  External Interrupt Request 0
    +                EXTERNAL_INTERRUPT_REQUEST_0 = 0x2,
    +                ///  Timer/Counter0 Compare Match A
    +                TIMER_COUNTER0_COMPARE_MATCH_A = 0x3,
    +                ///  Timer/Counter0 Overflow
    +                TIMER_COUNTER0_OVERFLOW = 0x4,
    +                ///  Timer/Counter1 Compare Match B
    +                TIMER_COUNTER1_COMPARE_MATCH_B = 0x5,
    +                ///  Timer/Counter1 Overflow
    +                TIMER_COUNTER1_OVERFLOW = 0x6,
    +                ///  Timer/Counter1 Capture Event
    +                TIMER_COUNTER1_CAPTURE_EVENT = 0x7,
    +            };
    +
    +            ///  ADC Data Register Bytes
    +            ADC: u16,
    +            ///  The ADC Control and Status register A
    +            ADCSRA: mmio.Mmio(packed struct(u8) {
    +                ///  ADC Prescaler Select Bits
    +                ADPS: packed union {
    +                    raw: u3,
    +                    value: ANALOG_ADC_PRESCALER,
    +                },
    +                ///  ADC Interrupt Enable
    +                ADIE: u1,
    +                ///  ADC Interrupt Flag
    +                ADIF: u1,
    +                ///  ADC Auto Trigger Enable
    +                ADATE: u1,
    +                ///  ADC Start Conversion
    +                ADSC: u1,
    +                ///  ADC Enable
    +                ADEN: u1,
    +            }),
    +            ///  The ADC Control and Status register B
    +            ADCSRB: mmio.Mmio(packed struct(u8) {
    +                ///  ADC Auto Trigger Source bits
    +                ADTS: packed union {
    +                    raw: u3,
    +                    value: ANALOG_ADC_AUTO_TRIGGER,
    +                },
    +                reserved6: u3,
    +                ACME: u1,
    +                padding: u1,
    +            }),
    +            ///  The ADC multiplexer Selection Register
    +            ADMUX: mmio.Mmio(packed struct(u8) {
    +                ///  Analog Channel Selection Bits
    +                MUX: packed union {
    +                    raw: u4,
    +                    value: ADC_MUX_SINGLE,
    +                },
    +                reserved5: u1,
    +                ///  Left Adjust Result
    +                ADLAR: u1,
    +                ///  Reference Selection Bits
    +                REFS: packed union {
    +                    raw: u2,
    +                    value: ANALOG_ADC_V_REF3,
    +                },
    +            }),
    +            reserved6: [1]u8,
    +            ///  Digital Input Disable Register
    +            DIDR0: mmio.Mmio(packed struct(u8) {
    +                ADC0D: u1,
    +                ADC1D: u1,
    +                ADC2D: u1,
    +                ADC3D: u1,
    +                ADC4D: u1,
    +                ADC5D: u1,
    +                padding: u2,
    +            }),
    +        };
    +
    +        ///  Analog Comparator
    +        pub const AC = extern struct {
    +            pub const ANALOG_COMP_INTERRUPT = enum(u2) {
    +                ///  Interrupt on Toggle
    +                INTERRUPT_ON_TOGGLE = 0x0,
    +                ///  Reserved
    +                RESERVED = 0x1,
    +                ///  Interrupt on Falling Edge
    +                INTERRUPT_ON_FALLING_EDGE = 0x2,
    +                ///  Interrupt on Rising Edge
    +                INTERRUPT_ON_RISING_EDGE = 0x3,
    +            };
    +
    +            ///  Analog Comparator Control And Status Register
    +            ACSR: mmio.Mmio(packed struct(u8) {
    +                ///  Analog Comparator Interrupt Mode Select bits
    +                ACIS: packed union {
    +                    raw: u2,
    +                    value: ANALOG_COMP_INTERRUPT,
    +                },
    +                ///  Analog Comparator Input Capture Enable
    +                ACIC: u1,
    +                ///  Analog Comparator Interrupt Enable
    +                ACIE: u1,
    +                ///  Analog Comparator Interrupt Flag
    +                ACI: u1,
    +                ///  Analog Compare Output
    +                ACO: u1,
    +                ///  Analog Comparator Bandgap Select
    +                ACBG: u1,
    +                ///  Analog Comparator Disable
    +                ACD: u1,
    +            }),
    +            reserved47: [46]u8,
    +            ///  Digital Input Disable Register 1
    +            DIDR1: mmio.Mmio(packed struct(u8) {
    +                ///  AIN0 Digital Input Disable
    +                AIN0D: u1,
    +                ///  AIN1 Digital Input Disable
    +                AIN1D: u1,
    +                padding: u6,
    +            }),
    +        };
    +
    +        ///  I/O Port
    +        pub const PORT = struct {
    +            ///  I/O Port
    +            pub const PORTB = extern struct {
    +                ///  Port B Input Pins
    +                PINB: u8,
    +                ///  Port B Data Direction Register
    +                DDRB: u8,
    +                ///  Port B Data Register
    +                PORTB: u8,
    +            };
    +
    +            ///  I/O Port
    +            pub const PORTC = extern struct {
    +                ///  Port C Input Pins
    +                PINC: u8,
    +                ///  Port C Data Direction Register
    +                DDRC: u8,
    +                ///  Port C Data Register
    +                PORTC: u8,
    +            };
    +
    +            ///  I/O Port
    +            pub const PORTD = extern struct {
    +                ///  Port D Input Pins
    +                PIND: u8,
    +                ///  Port D Data Direction Register
    +                DDRD: u8,
    +                ///  Port D Data Register
    +                PORTD: u8,
    +            };
    +        };
    +
    +        ///  Timer/Counter, 8-bit
    +        pub const TC8 = struct {
    +            pub const CLK_SEL_3BIT_EXT = enum(u3) {
    +                ///  No Clock Source (Stopped)
    +                NO_CLOCK_SOURCE_STOPPED = 0x0,
    +                ///  Running, No Prescaling
    +                RUNNING_NO_PRESCALING = 0x1,
    +                ///  Running, CLK/8
    +                RUNNING_CLK_8 = 0x2,
    +                ///  Running, CLK/64
    +                RUNNING_CLK_64 = 0x3,
    +                ///  Running, CLK/256
    +                RUNNING_CLK_256 = 0x4,
    +                ///  Running, CLK/1024
    +                RUNNING_CLK_1024 = 0x5,
    +                ///  Running, ExtClk Tn Falling Edge
    +                RUNNING_EXTCLK_TN_FALLING_EDGE = 0x6,
    +                ///  Running, ExtClk Tn Rising Edge
    +                RUNNING_EXTCLK_TN_RISING_EDGE = 0x7,
    +            };
    +
    +            ///  Timer/Counter, 8-bit
    +            pub const TC0 = extern struct {
    +                ///  Timer/Counter0 Interrupt Flag register
    +                TIFR0: mmio.Mmio(packed struct(u8) {
    +                    ///  Timer/Counter0 Overflow Flag
    +                    TOV0: u1,
    +                    ///  Timer/Counter0 Output Compare Flag 0A
    +                    OCF0A: u1,
    +                    ///  Timer/Counter0 Output Compare Flag 0B
    +                    OCF0B: u1,
    +                    padding: u5,
    +                }),
    +                reserved14: [13]u8,
    +                ///  General Timer/Counter Control Register
    +                GTCCR: mmio.Mmio(packed struct(u8) {
    +                    ///  Prescaler Reset Timer/Counter1 and Timer/Counter0
    +                    PSRSYNC: u1,
    +                    reserved7: u6,
    +                    ///  Timer/Counter Synchronization Mode
    +                    TSM: u1,
    +                }),
    +                ///  Timer/Counter Control Register A
    +                TCCR0A: mmio.Mmio(packed struct(u8) {
    +                    ///  Waveform Generation Mode
    +                    WGM0: u2,
    +                    reserved4: u2,
    +                    ///  Compare Output Mode, Fast PWm
    +                    COM0B: u2,
    +                    ///  Compare Output Mode, Phase Correct PWM Mode
    +                    COM0A: u2,
    +                }),
    +                ///  Timer/Counter Control Register B
    +                TCCR0B: mmio.Mmio(packed struct(u8) {
    +                    ///  Clock Select
    +                    CS0: packed union {
    +                        raw: u3,
    +                        value: CLK_SEL_3BIT_EXT,
    +                    },
    +                    WGM02: u1,
    +                    reserved6: u2,
    +                    ///  Force Output Compare B
    +                    FOC0B: u1,
    +                    ///  Force Output Compare A
    +                    FOC0A: u1,
    +                }),
    +                ///  Timer/Counter0
    +                TCNT0: u8,
    +                ///  Timer/Counter0 Output Compare Register
    +                OCR0A: u8,
    +                ///  Timer/Counter0 Output Compare Register
    +                OCR0B: u8,
    +                reserved57: [37]u8,
    +                ///  Timer/Counter0 Interrupt Mask Register
    +                TIMSK0: mmio.Mmio(packed struct(u8) {
    +                    ///  Timer/Counter0 Overflow Interrupt Enable
    +                    TOIE0: u1,
    +                    ///  Timer/Counter0 Output Compare Match A Interrupt Enable
    +                    OCIE0A: u1,
    +                    ///  Timer/Counter0 Output Compare Match B Interrupt Enable
    +                    OCIE0B: u1,
    +                    padding: u5,
    +                }),
    +            };
    +        };
    +
    +        ///  External Interrupts
    +        pub const EXINT = extern struct {
    +            ///  Interrupt Sense Control
    +            pub const INTERRUPT_SENSE_CONTROL = enum(u2) {
    +                ///  Low Level of INTX
    +                LOW_LEVEL_OF_INTX = 0x0,
    +                ///  Any Logical Change of INTX
    +                ANY_LOGICAL_CHANGE_OF_INTX = 0x1,
    +                ///  Falling Edge of INTX
    +                FALLING_EDGE_OF_INTX = 0x2,
    +                ///  Rising Edge of INTX
    +                RISING_EDGE_OF_INTX = 0x3,
    +            };
    +
    +            ///  Pin Change Interrupt Flag Register
    +            PCIFR: mmio.Mmio(packed struct(u8) {
    +                ///  Pin Change Interrupt Flags
    +                PCIF: u3,
    +                padding: u5,
    +            }),
    +            ///  External Interrupt Flag Register
    +            EIFR: mmio.Mmio(packed struct(u8) {
    +                ///  External Interrupt Flags
    +                INTF: u2,
    +                padding: u6,
    +            }),
    +            ///  External Interrupt Mask Register
    +            EIMSK: mmio.Mmio(packed struct(u8) {
    +                ///  External Interrupt Request 1 Enable
    +                INT: u2,
    +                padding: u6,
    +            }),
    +            reserved45: [42]u8,
    +            ///  Pin Change Interrupt Control Register
    +            PCICR: mmio.Mmio(packed struct(u8) {
    +                ///  Pin Change Interrupt Enables
    +                PCIE: u3,
    +                padding: u5,
    +            }),
    +            ///  External Interrupt Control Register
    +            EICRA: mmio.Mmio(packed struct(u8) {
    +                ///  External Interrupt Sense Control 0 Bits
    +                ISC0: packed union {
    +                    raw: u2,
    +                    value: INTERRUPT_SENSE_CONTROL,
    +                },
    +                ///  External Interrupt Sense Control 1 Bits
    +                ISC1: packed union {
    +                    raw: u2,
    +                    value: INTERRUPT_SENSE_CONTROL,
    +                },
    +                padding: u4,
    +            }),
    +            reserved48: [1]u8,
    +            ///  Pin Change Mask Register 0
    +            PCMSK0: mmio.Mmio(packed struct(u8) {
    +                ///  Pin Change Enable Masks
    +                PCINT: u8,
    +            }),
    +            ///  Pin Change Mask Register 1
    +            PCMSK1: mmio.Mmio(packed struct(u8) {
    +                ///  Pin Change Enable Masks
    +                PCINT: u7,
    +                padding: u1,
    +            }),
    +            ///  Pin Change Mask Register 2
    +            PCMSK2: mmio.Mmio(packed struct(u8) {
    +                ///  Pin Change Enable Masks
    +                PCINT: u8,
    +            }),
    +        };
    +
    +        ///  Serial Peripheral Interface
    +        pub const SPI = extern struct {
    +            pub const COMM_SCK_RATE_3BIT = enum(u2) {
    +                ///  fosc/2 or fosc/4
    +                FOSC_2_OR_FOSC_4 = 0x0,
    +                ///  fosc/8 or fosc/16
    +                FOSC_8_OR_FOSC_16 = 0x1,
    +                ///  fosc/32 or fosc/64
    +                FOSC_32_OR_FOSC_64 = 0x2,
    +                ///  fosc/64 or fosc/128
    +                FOSC_64_OR_FOSC_128 = 0x3,
    +            };
    +
    +            ///  SPI Control Register
    +            SPCR: mmio.Mmio(packed struct(u8) {
    +                ///  SPI Clock Rate Selects
    +                SPR: packed union {
    +                    raw: u2,
    +                    value: COMM_SCK_RATE_3BIT,
    +                },
    +                ///  Clock Phase
    +                CPHA: u1,
    +                ///  Clock polarity
    +                CPOL: u1,
    +                ///  Master/Slave Select
    +                MSTR: u1,
    +                ///  Data Order
    +                DORD: u1,
    +                ///  SPI Enable
    +                SPE: u1,
    +                ///  SPI Interrupt Enable
    +                SPIE: u1,
    +            }),
    +            ///  SPI Status Register
    +            SPSR: mmio.Mmio(packed struct(u8) {
    +                ///  Double SPI Speed Bit
    +                SPI2X: u1,
    +                reserved6: u5,
    +                ///  Write Collision Flag
    +                WCOL: u1,
    +                ///  SPI Interrupt Flag
    +                SPIF: u1,
    +            }),
    +            ///  SPI Data Register
    +            SPDR: u8,
    +        };
    +
    +        ///  Watchdog Timer
    +        pub const WDT = extern struct {
    +            pub const WDOG_TIMER_PRESCALE_4BITS = enum(u4) {
    +                ///  Oscillator Cycles 2K
    +                OSCILLATOR_CYCLES_2K = 0x0,
    +                ///  Oscillator Cycles 4K
    +                OSCILLATOR_CYCLES_4K = 0x1,
    +                ///  Oscillator Cycles 8K
    +                OSCILLATOR_CYCLES_8K = 0x2,
    +                ///  Oscillator Cycles 16K
    +                OSCILLATOR_CYCLES_16K = 0x3,
    +                ///  Oscillator Cycles 32K
    +                OSCILLATOR_CYCLES_32K = 0x4,
    +                ///  Oscillator Cycles 64K
    +                OSCILLATOR_CYCLES_64K = 0x5,
    +                ///  Oscillator Cycles 128K
    +                OSCILLATOR_CYCLES_128K = 0x6,
    +                ///  Oscillator Cycles 256K
    +                OSCILLATOR_CYCLES_256K = 0x7,
    +                ///  Oscillator Cycles 512K
    +                OSCILLATOR_CYCLES_512K = 0x8,
    +                ///  Oscillator Cycles 1024K
    +                OSCILLATOR_CYCLES_1024K = 0x9,
    +                _,
    +            };
    +
    +            ///  Watchdog Timer Control Register
    +            WDTCSR: mmio.Mmio(packed struct(u8) {
    +                ///  Watchdog Timer Prescaler Bits
    +                WDP_bit0: u1,
    +                ///  Watchdog Timer Prescaler Bits
    +                WDP_bit1: u1,
    +                ///  Watchdog Timer Prescaler Bits
    +                WDP_bit2: u1,
    +                ///  Watch Dog Enable
    +                WDE: u1,
    +                ///  Watchdog Change Enable
    +                WDCE: u1,
    +                ///  Watchdog Timer Prescaler Bits
    +                WDP_bit3: u1,
    +                ///  Watchdog Timeout Interrupt Enable
    +                WDIE: u1,
    +                ///  Watchdog Timeout Interrupt Flag
    +                WDIF: u1,
    +            }),
    +        };
    +
    +        ///  CPU Registers
    +        pub const CPU = extern struct {
    +            pub const CPU_CLK_PRESCALE_4_BITS_SMALL = enum(u4) {
    +                ///  1
    +                @"1" = 0x0,
    +                ///  2
    +                @"2" = 0x1,
    +                ///  4
    +                @"4" = 0x2,
    +                ///  8
    +                @"8" = 0x3,
    +                ///  16
    +                @"16" = 0x4,
    +                ///  32
    +                @"32" = 0x5,
    +                ///  64
    +                @"64" = 0x6,
    +                ///  128
    +                @"128" = 0x7,
    +                ///  256
    +                @"256" = 0x8,
    +                _,
    +            };
    +
    +            pub const CPU_SLEEP_MODE_3BITS2 = enum(u3) {
    +                ///  Idle
    +                IDLE = 0x0,
    +                ///  ADC Noise Reduction (If Available)
    +                ADC = 0x1,
    +                ///  Power Down
    +                PDOWN = 0x2,
    +                ///  Power Save
    +                PSAVE = 0x3,
    +                ///  Reserved
    +                VAL_0x04 = 0x4,
    +                ///  Reserved
    +                VAL_0x05 = 0x5,
    +                ///  Standby
    +                STDBY = 0x6,
    +                ///  Extended Standby
    +                ESTDBY = 0x7,
    +            };
    +
    +            ///  Oscillator Calibration Values
    +            pub const OSCCAL_VALUE_ADDRESSES = enum(u1) {
    +                ///  8.0 MHz
    +                @"8_0_MHz" = 0x0,
    +                _,
    +            };
    +
    +            ///  General Purpose I/O Register 0
    +            GPIOR0: u8,
    +            reserved12: [11]u8,
    +            ///  General Purpose I/O Register 1
    +            GPIOR1: u8,
    +            ///  General Purpose I/O Register 2
    +            GPIOR2: u8,
    +            reserved21: [7]u8,
    +            ///  Sleep Mode Control Register
    +            SMCR: mmio.Mmio(packed struct(u8) {
    +                ///  Sleep Enable
    +                SE: u1,
    +                ///  Sleep Mode Select Bits
    +                SM: packed union {
    +                    raw: u3,
    +                    value: CPU_SLEEP_MODE_3BITS2,
    +                },
    +                padding: u4,
    +            }),
    +            ///  MCU Status Register
    +            MCUSR: mmio.Mmio(packed struct(u8) {
    +                ///  Power-on reset flag
    +                PORF: u1,
    +                ///  External Reset Flag
    +                EXTRF: u1,
    +                ///  Brown-out Reset Flag
    +                BORF: u1,
    +                ///  Watchdog Reset Flag
    +                WDRF: u1,
    +                padding: u4,
    +            }),
    +            ///  MCU Control Register
    +            MCUCR: mmio.Mmio(packed struct(u8) {
    +                IVCE: u1,
    +                IVSEL: u1,
    +                reserved4: u2,
    +                PUD: u1,
    +                ///  BOD Sleep Enable
    +                BODSE: u1,
    +                ///  BOD Sleep
    +                BODS: u1,
    +                padding: u1,
    +            }),
    +            reserved25: [1]u8,
    +            ///  Store Program Memory Control and Status Register
    +            SPMCSR: mmio.Mmio(packed struct(u8) {
    +                ///  Store Program Memory
    +                SPMEN: u1,
    +                ///  Page Erase
    +                PGERS: u1,
    +                ///  Page Write
    +                PGWRT: u1,
    +                ///  Boot Lock Bit Set
    +                BLBSET: u1,
    +                ///  Read-While-Write section read enable
    +                RWWSRE: u1,
    +                ///  Signature Row Read
    +                SIGRD: u1,
    +                ///  Read-While-Write Section Busy
    +                RWWSB: u1,
    +                ///  SPM Interrupt Enable
    +                SPMIE: u1,
    +            }),
    +            reserved31: [5]u8,
    +            ///  Stack Pointer
    +            SP: u16,
    +            ///  Status Register
    +            SREG: mmio.Mmio(packed struct(u8) {
    +                ///  Carry Flag
    +                C: u1,
    +                ///  Zero Flag
    +                Z: u1,
    +                ///  Negative Flag
    +                N: u1,
    +                ///  Two's Complement Overflow Flag
    +                V: u1,
    +                ///  Sign Bit
    +                S: u1,
    +                ///  Half Carry Flag
    +                H: u1,
    +                ///  Bit Copy Storage
    +                T: u1,
    +                ///  Global Interrupt Enable
    +                I: u1,
    +            }),
    +            reserved35: [1]u8,
    +            ///  Clock Prescale Register
    +            CLKPR: mmio.Mmio(packed struct(u8) {
    +                ///  Clock Prescaler Select Bits
    +                CLKPS: packed union {
    +                    raw: u4,
    +                    value: CPU_CLK_PRESCALE_4_BITS_SMALL,
    +                },
    +                reserved7: u3,
    +                ///  Clock Prescaler Change Enable
    +                CLKPCE: u1,
    +            }),
    +            reserved38: [2]u8,
    +            ///  Power Reduction Register
    +            PRR: mmio.Mmio(packed struct(u8) {
    +                ///  Power Reduction ADC
    +                PRADC: u1,
    +                ///  Power Reduction USART
    +                PRUSART0: u1,
    +                ///  Power Reduction Serial Peripheral Interface
    +                PRSPI: u1,
    +                ///  Power Reduction Timer/Counter1
    +                PRTIM1: u1,
    +                reserved5: u1,
    +                ///  Power Reduction Timer/Counter0
    +                PRTIM0: u1,
    +                ///  Power Reduction Timer/Counter2
    +                PRTIM2: u1,
    +                ///  Power Reduction TWI
    +                PRTWI: u1,
    +            }),
    +            reserved40: [1]u8,
    +            ///  Oscillator Calibration Value
    +            OSCCAL: mmio.Mmio(packed struct(u8) {
    +                ///  Oscillator Calibration
    +                OSCCAL: u8,
    +            }),
    +        };
    +
    +        ///  EEPROM
    +        pub const EEPROM = extern struct {
    +            pub const EEP_MODE = enum(u2) {
    +                ///  Erase and Write in one operation
    +                ERASE_AND_WRITE_IN_ONE_OPERATION = 0x0,
    +                ///  Erase Only
    +                ERASE_ONLY = 0x1,
    +                ///  Write Only
    +                WRITE_ONLY = 0x2,
    +                _,
    +            };
    +
    +            ///  EEPROM Control Register
    +            EECR: mmio.Mmio(packed struct(u8) {
    +                ///  EEPROM Read Enable
    +                EERE: u1,
    +                ///  EEPROM Write Enable
    +                EEPE: u1,
    +                ///  EEPROM Master Write Enable
    +                EEMPE: u1,
    +                ///  EEPROM Ready Interrupt Enable
    +                EERIE: u1,
    +                ///  EEPROM Programming Mode Bits
    +                EEPM: packed union {
    +                    raw: u2,
    +                    value: EEP_MODE,
    +                },
    +                padding: u2,
    +            }),
    +            ///  EEPROM Data Register
    +            EEDR: u8,
    +            ///  EEPROM Address Register Bytes
    +            EEAR: u16,
    +        };
    +    };
    +};
    diff --git a/src/hals/ATmega328P.zig b/src/hals/ATmega328P.zig
    new file mode 100644
    index 000000000..b836c651c
    --- /dev/null
    +++ b/src/hals/ATmega328P.zig
    @@ -0,0 +1,191 @@
    +const std = @import("std");
    +const micro = @import("microzig");
    +
    +pub usingnamespace @import("registers.zig");
    +const regz = @import("registers.zig").registers;
    +
    +pub const cpu = micro.cpu;
    +const Port = enum(u8) {
    +    B = 1,
    +    C = 2,
    +    D = 3,
    +};
    +
    +pub const clock = struct {
    +    pub const Domain = enum {
    +        cpu,
    +    };
    +};
    +
    +pub fn parsePin(comptime spec: []const u8) type {
    +    const invalid_format_msg = "The given pin '" ++ spec ++ "' has an invalid format. Pins must follow the format \"P{Port}{Pin}\" scheme.";
    +
    +    if (spec.len != 3)
    +        @compileError(invalid_format_msg);
    +    if (spec[0] != 'P')
    +        @compileError(invalid_format_msg);
    +
    +    return struct {
    +        pub const port: Port = std.meta.stringToEnum(Port, spec[1..2]) orelse @compileError(invalid_format_msg);
    +        pub const pin: u3 = std.fmt.parseInt(u3, spec[2..3], 10) catch @compileError(invalid_format_msg);
    +    };
    +}
    +
    +pub const gpio = struct {
    +    fn regs(comptime desc: type) type {
    +        return struct {
    +            // io address
    +            const pin_addr: u5 = 3 * @enumToInt(desc.port) + 0x00;
    +            const dir_addr: u5 = 3 * @enumToInt(desc.port) + 0x01;
    +            const port_addr: u5 = 3 * @enumToInt(desc.port) + 0x02;
    +
    +            // ram mapping
    +            const pin = @intToPtr(*volatile u8, 0x20 + @as(usize, pin_addr));
    +            const dir = @intToPtr(*volatile u8, 0x20 + @as(usize, dir_addr));
    +            const port = @intToPtr(*volatile u8, 0x20 + @as(usize, port_addr));
    +        };
    +    }
    +
    +    pub fn setOutput(comptime pin: type) void {
    +        cpu.sbi(regs(pin).dir_addr, pin.pin);
    +    }
    +
    +    pub fn setInput(comptime pin: type) void {
    +        cpu.cbi(regs(pin).dir_addr, pin.pin);
    +    }
    +
    +    pub fn read(comptime pin: type) micro.gpio.State {
    +        return if ((regs(pin).pin.* & (1 << pin.pin)) != 0)
    +            .high
    +        else
    +            .low;
    +    }
    +
    +    pub fn write(comptime pin: type, state: micro.gpio.State) void {
    +        if (state == .high) {
    +            cpu.sbi(regs(pin).port_addr, pin.pin);
    +        } else {
    +            cpu.cbi(regs(pin).port_addr, pin.pin);
    +        }
    +    }
    +
    +    pub fn toggle(comptime pin: type) void {
    +        cpu.sbi(regs(pin).pin_addr, pin.pin);
    +    }
    +};
    +
    +pub const uart = struct {
    +    pub const DataBits = enum {
    +        five,
    +        six,
    +        seven,
    +        eight,
    +        nine,
    +    };
    +
    +    pub const StopBits = enum {
    +        one,
    +        two,
    +    };
    +
    +    pub const Parity = enum {
    +        odd,
    +        even,
    +    };
    +};
    +
    +pub fn Uart(comptime index: usize, comptime pins: micro.uart.Pins) type {
    +    if (index != 0) @compileError("Atmega328p only has a single uart!");
    +    if (pins.tx != null or pins.rx != null)
    +        @compileError("Atmega328p has fixed pins for uart!");
    +
    +    return struct {
    +        const Self = @This();
    +
    +        fn computeDivider(baud_rate: u32) !u12 {
    +            const pclk = micro.clock.get().cpu;
    +            const divider = ((pclk + (8 * baud_rate)) / (16 * baud_rate)) - 1;
    +
    +            return std.math.cast(u12, divider) orelse return error.UnsupportedBaudRate;
    +        }
    +
    +        fn computeBaudRate(divider: u12) u32 {
    +            return micro.clock.get().cpu / (16 * @as(u32, divider) + 1);
    +        }
    +
    +        pub fn init(config: micro.uart.Config) !Self {
    +            const ucsz: u3 = switch (config.data_bits) {
    +                .five => 0b000,
    +                .six => 0b001,
    +                .seven => 0b010,
    +                .eight => 0b011,
    +                .nine => return error.UnsupportedWordSize, // 0b111
    +            };
    +
    +            const upm: u2 = if (config.parity) |parity| switch (parity) {
    +                .even => @as(u2, 0b10), // even
    +                .odd => @as(u2, 0b11), // odd
    +            } else 0b00; // parity disabled
    +
    +            const usbs: u1 = switch (config.stop_bits) {
    +                .one => 0b0,
    +                .two => 0b1,
    +            };
    +
    +            const umsel: u2 = 0b00; // Asynchronous USART
    +
    +            // baud is computed like this:
    +            //             f(osc)
    +            // BAUD = ----------------
    +            //        16 * (UBRRn + 1)
    +
    +            const ubrr_val = try computeDivider(config.baud_rate);
    +
    +            regz.USART0.UCSR0A.modify(.{
    +                .MPCM0 = 0,
    +                .U2X0 = 0,
    +            });
    +            regz.USART0.UCSR0B.write(.{
    +                .TXB80 = 0, // we don't care about these btw
    +                .RXB80 = 0, // we don't care about these btw
    +                .UCSZ02 = @truncate(u1, (ucsz & 0x04) >> 2),
    +                .TXEN0 = 1,
    +                .RXEN0 = 1,
    +                .UDRIE0 = 0, // no interrupts
    +                .TXCIE0 = 0, // no interrupts
    +                .RXCIE0 = 0, // no interrupts
    +            });
    +            regz.USART0.UCSR0C.write(.{
    +                .UCPOL0 = 0, // async mode
    +                .UCSZ0 = @truncate(u2, (ucsz & 0x03) >> 0),
    +                .USBS0 = usbs,
    +                .UPM0 = upm,
    +                .UMSEL0 = umsel,
    +            });
    +
    +            regz.USART0.UBRR0.modify(ubrr_val);
    +
    +            return Self{};
    +        }
    +
    +        pub fn canWrite(self: Self) bool {
    +            _ = self;
    +            return (regz.USART0.UCSR0A.read().UDRE0 == 1);
    +        }
    +
    +        pub fn tx(self: Self, ch: u8) void {
    +            while (!self.canWrite()) {} // Wait for Previous transmission
    +            regz.USART0.UDR0.* = ch; // Load the data to be transmitted
    +        }
    +
    +        pub fn canRead(self: Self) bool {
    +            _ = self;
    +            return (regz.USART0.UCSR0A.read().RXC0 == 1);
    +        }
    +
    +        pub fn rx(self: Self) u8 {
    +            while (!self.canRead()) {} // Wait till the data is received
    +            return regz.USART0.UDR0.*; // Read received data
    +        }
    +    };
    +}
    
    From 56e3d88bc0a0ebda41588f906a25437592d7f3a9 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sat, 18 Feb 2023 18:06:45 -0500
    Subject: [PATCH 046/286] add chips and board (#1)
    
    * add chips and board
    
    * fix up hal
    ---
     LICENSE                    |     2 +-
     README.adoc                |     7 +-
     src/boards.zig             |     9 +-
     src/boards/longan_nano.zig |   112 +
     src/chips.zig              |    24 +-
     src/chips/GD32VF103.json   | 32957 +++++++++++++++++++++++++++++++++++
     src/chips/GD32VF103.zig    | 12849 ++++++++++++++
     src/hals/GD32VF103.zig     |   112 +
     8 files changed, 46062 insertions(+), 10 deletions(-)
     create mode 100644 src/boards/longan_nano.zig
     create mode 100644 src/chips/GD32VF103.json
     create mode 100644 src/chips/GD32VF103.zig
     create mode 100644 src/hals/GD32VF103.zig
    
    diff --git a/LICENSE b/LICENSE
    index c1cc5ecad..bcb425d88 100644
    --- a/LICENSE
    +++ b/LICENSE
    @@ -1,4 +1,4 @@
    -Copyright (c) 2022 
    +Copyright (c) 2022 Zig Embedded Group Contributors
     
     This software is provided 'as-is', without any express or implied warranty. In
     no event will the authors be held liable for any damages arising from the use
    diff --git a/README.adoc b/README.adoc
    index 46ca05775..f23b1bfb8 100644
    --- a/README.adoc
    +++ b/README.adoc
    @@ -1,6 +1 @@
    -= Hardware Support Package Template
    -
    -1. Update LICENSE file
    -2. Update `microzig` submodule under `deps/`
    -3. Add chips/boards/hals
    -4. Set up buildkite pipeline
    += GigaDevice GD32 Hardware Support Package
    diff --git a/src/boards.zig b/src/boards.zig
    index 2cb647a34..d9a73b5f4 100644
    --- a/src/boards.zig
    +++ b/src/boards.zig
    @@ -1,6 +1,13 @@
     const std = @import("std");
    -const microzig = @import("../deps/microzig/src/main.zig");
    +const micro = @import("../deps/microzig/src/main.zig");
    +const chips = @import("chips.zig");
     
     fn root_dir() []const u8 {
         return std.fs.path.dirname(@src().file) orelse ".";
     }
    +
    +pub const longan_nano = micro.Board{
    +    .name = "Longan Nano",
    +    .source = .{ .path = root_dir() ++ "/boards/longan_nano.zig" },
    +    .chip = chips.gd32vf103xb,
    +};
    diff --git a/src/boards/longan_nano.zig b/src/boards/longan_nano.zig
    new file mode 100644
    index 000000000..e042be11b
    --- /dev/null
    +++ b/src/boards/longan_nano.zig
    @@ -0,0 +1,112 @@
    +pub const chip = @import("chip");
    +pub const micro = @import("microzig");
    +
    +pub const cpu_frequency = 8_000_000; // 8 MHz
    +
    +pub const pin_map = .{
    +
    +    // Port A
    +    .PA0 = "PA0",
    +    .PA1 = "PA1",
    +    .PA2 = "PA2",
    +    .PA3 = "PA3",
    +    .PA4 = "PA4",
    +    .PA5 = "PA5",
    +    .PA6 = "PA6",
    +    .PA7 = "PA7",
    +    .PA8 = "PA8",
    +    .PA9 = "PA9",
    +    .PA10 = "PA10",
    +    .PA11 = "PA11",
    +    .PA12 = "PA12",
    +    .PA13 = "PA13",
    +
    +    // Port B
    +    .PB0 = "PB0",
    +    .PB1 = "PB1",
    +    .PB2 = "PB2",
    +    .PB3 = "PB3",
    +    .PB4 = "PB4",
    +    .PB5 = "PB5",
    +    .PB6 = "PB6",
    +    .PB7 = "PB7",
    +    .PB8 = "PB8",
    +    .PB9 = "PB9",
    +    .PB10 = "PB10",
    +    .PB11 = "PB11",
    +    .PB12 = "PB12",
    +    .PB13 = "PB13",
    +    .PB14 = "PB14",
    +    .PB15 = "PB15",
    +
    +    // Port C
    +    .PC0 = "PC0",
    +    .PC1 = "PC1",
    +    .PC2 = "PC2",
    +    .PC3 = "PC3",
    +    .PC4 = "PC4",
    +    .PC5 = "PC5",
    +    .PC6 = "PC6",
    +    .PC7 = "PC7",
    +    .PC8 = "PC8",
    +    .PC9 = "PC9",
    +    .PC10 = "PC10",
    +    .PC11 = "PC11",
    +    .PC12 = "PC12",
    +    .PC13 = "PC13",
    +    .PC14 = "PC14",
    +    .PC15 = "PC15",
    +
    +    // Port D
    +    .PD0 = "PD0",
    +    .PD1 = "PD1",
    +    .PD2 = "PD2",
    +    .PD3 = "PD3",
    +    .PD4 = "PD4",
    +    .PD5 = "PD5",
    +    .PD6 = "PD6",
    +    .PD7 = "PD7",
    +    .PD8 = "PD8",
    +    .PD9 = "PD9",
    +    .PD10 = "PD10",
    +    .PD11 = "PD11",
    +    .PD12 = "PD12",
    +    .PD13 = "PD13",
    +    .PD14 = "PD14",
    +    .PD15 = "PD15",
    +
    +    // Port E
    +    .PE0 = "PE0",
    +    .PE1 = "PE1",
    +    .PE2 = "PE2",
    +    .PE3 = "PE3",
    +    .PE4 = "PE4",
    +    .PE5 = "PE5",
    +    .PE6 = "PE6",
    +    .PE7 = "PE7",
    +    .PE8 = "PE8",
    +    .PE9 = "PE9",
    +    .PE10 = "PE10",
    +    .PE11 = "PE11",
    +    .PE12 = "PE12",
    +    .PE13 = "PE13",
    +    .PE14 = "PE14",
    +    .PE15 = "PE15",
    +
    +    // Colors LED
    +    // LCD_COLOR_WHITE     0xFFFF
    +    // LCD_COLOR_BLACK     0x0000
    +    // LCD_COLOR_GREY      0xF7DE
    +    // LCD_COLOR_BLUE      0x001F
    +    // LCD_COLOR_BLUE2     0x051F
    +    // LCD_COLOR_RED       0xF800
    +    // LCD_COLOR_MAGENTA   0xF81F
    +    // LCD_COLOR_GREEN     0x07E0
    +    // LCD_COLOR_CYAN      0x7FFF
    +    // LCD_COLOR_YELLOW    0xFFE0
    +};
    +
    +pub fn debugWrite(string: []const u8) void {
    +    _ = string;
    +    // TODO: implement
    +}
    diff --git a/src/chips.zig b/src/chips.zig
    index 2cb647a34..ac1beefb0 100644
    --- a/src/chips.zig
    +++ b/src/chips.zig
    @@ -1,6 +1,26 @@
     const std = @import("std");
    -const microzig = @import("../deps/microzig/src/main.zig");
    +const micro = @import("../deps/microzig/src/main.zig");
    +const Chip = micro.Chip;
    +const MemoryRegion = micro.MemoryRegion;
     
     fn root_dir() []const u8 {
    -    return std.fs.path.dirname(@src().file) orelse ".";
    +    return std.fs.path.dirname(@src().file) orelse unreachable;
     }
    +
    +pub const gd32vf103xb = Chip.from_standard_paths(root_dir(), .{
    +    .name = "GD32VF103",
    +    .cpu = micro.cpus.riscv32_imac,
    +    .memory_regions = &.{
    +        MemoryRegion{ .offset = 0x08000000, .length = 128 * 1024, .kind = .flash },
    +        MemoryRegion{ .offset = 0x20000000, .length = 32 * 1024, .kind = .ram },
    +    },
    +});
    +
    +pub const gd32vf103x8 = Chip.from_standard_paths(root_dir(), .{
    +    .name = "GD32VF103",
    +    .cpu = micro.cpus.riscv32_imac,
    +    .memory_regions = &.{
    +        MemoryRegion{ .offset = 0x08000000, .length = 64 * 1024, .kind = .flash },
    +        MemoryRegion{ .offset = 0x20000000, .length = 20 * 1024, .kind = .ram },
    +    },
    +});
    diff --git a/src/chips/GD32VF103.json b/src/chips/GD32VF103.json
    new file mode 100644
    index 000000000..7b949cf6e
    --- /dev/null
    +++ b/src/chips/GD32VF103.json
    @@ -0,0 +1,32957 @@
    +{
    +  "version": "0.1.0",
    +  "types": {
    +    "peripherals": {
    +      "SCS": {
    +        "description": "System Control Space",
    +        "children": {
    +          "register_groups": {
    +            "SysTick": {
    +              "description": "System Tick Timer",
    +              "children": {
    +                "registers": {
    +                  "CTRL": {
    +                    "description": "SysTick Control and Status Register",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "ENABLE": {
    +                          "offset": 0,
    +                          "size": 1
    +                        },
    +                        "TICKINT": {
    +                          "offset": 1,
    +                          "size": 1
    +                        },
    +                        "CLKSOURCE": {
    +                          "offset": 2,
    +                          "size": 1
    +                        },
    +                        "COUNTFLAG": {
    +                          "offset": 16,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LOAD": {
    +                    "description": "SysTick Reload Value Register",
    +                    "offset": 4,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "RELOAD": {
    +                          "offset": 0,
    +                          "size": 24
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "VAL": {
    +                    "description": "SysTick Current Value Register",
    +                    "offset": 8,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "CURRENT": {
    +                          "offset": 0,
    +                          "size": 24
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CALIB": {
    +                    "description": "SysTick Calibration Register",
    +                    "offset": 12,
    +                    "size": 32,
    +                    "access": "read-only",
    +                    "children": {
    +                      "fields": {
    +                        "TENMS": {
    +                          "offset": 0,
    +                          "size": 24
    +                        },
    +                        "SKEW": {
    +                          "offset": 30,
    +                          "size": 1
    +                        },
    +                        "NOREF": {
    +                          "offset": 31,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "ADC0": {
    +        "description": "Analog to digital converter",
    +        "children": {
    +          "registers": {
    +            "STAT": {
    +              "description": "status register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STRC": {
    +                    "description": "Start flag of regular channel group",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "STIC": {
    +                    "description": "Start flag of inserted channel group",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EOIC": {
    +                    "description": "End of inserted group conversion flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EOC": {
    +                    "description": "End of group conversion flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "WDE": {
    +                    "description": "Analog watchdog event flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CTL0": {
    +              "description": "control register 0",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RWDEN": {
    +                    "description": "Regular channel analog watchdog  enable",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "IWDEN": {
    +                    "description": "Inserted channel analog watchdog \n\t     enable",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "SYNCM": {
    +                    "description": "sync mode selection",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "DISNUM": {
    +                    "description": "Number of conversions in \n\t     discontinuous mode",
    +                    "offset": 13,
    +                    "size": 3
    +                  },
    +                  "DISIC": {
    +                    "description": "Discontinuous mode on \n\t     inserted channels",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "DISRC": {
    +                    "description": "Discontinuous mode on regular\n              channels",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ICA": {
    +                    "description": "Inserted channel group convert \n\t     automatically",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "WDSC": {
    +                    "description": "When in scan mode, analog watchdog\n\t     is effective on a single channel",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SM": {
    +                    "description": "Scan mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EOICIE": {
    +                    "description": "Interrupt enable for EOIC",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "WDEIE": {
    +                    "description": "Interrupt enable for WDE",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EOCIE": {
    +                    "description": "Interrupt enable for EOC",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "WDCHSEL": {
    +                    "description": "Analog watchdog channel select",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "CTL1": {
    +              "description": "control register 1",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TSVREN": {
    +                    "description": "Channel 16 and 17 enable of ADC0",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "SWRCST": {
    +                    "description": "Start on regular channel",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "SWICST": {
    +                    "description": "Start on inserted channel",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "ETERC": {
    +                    "description": "External trigger enable for regular channel",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "ETSRC": {
    +                    "description": "External trigger select for regular channel",
    +                    "offset": 17,
    +                    "size": 3
    +                  },
    +                  "ETEIC": {
    +                    "description": "External trigger select for inserted channel",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ETSIC": {
    +                    "description": "External trigger select for inserted channel",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "DAL": {
    +                    "description": "Data alignment",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "DMA": {
    +                    "description": "DMA request enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "RSTCLB": {
    +                    "description": "Reset calibration",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CLB": {
    +                    "description": "ADC calibration",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CTN": {
    +                    "description": "Continuous mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ADCON": {
    +                    "description": "ADC on",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SAMPT0": {
    +              "description": "Sample time register 0",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SPT10": {
    +                    "description": "Channel 10 sample time\n              selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "SPT11": {
    +                    "description": "Channel 11 sample time\n              selection",
    +                    "offset": 3,
    +                    "size": 3
    +                  },
    +                  "SPT12": {
    +                    "description": "Channel 12 sample time\n              selection",
    +                    "offset": 6,
    +                    "size": 3
    +                  },
    +                  "SPT13": {
    +                    "description": "Channel 13 sample time\n              selection",
    +                    "offset": 9,
    +                    "size": 3
    +                  },
    +                  "SPT14": {
    +                    "description": "Channel 14 sample time\n              selection",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "SPT15": {
    +                    "description": "Channel 15 sample time\n              selection",
    +                    "offset": 15,
    +                    "size": 3
    +                  },
    +                  "SPT16": {
    +                    "description": "Channel 16 sample time\n              selection",
    +                    "offset": 18,
    +                    "size": 3
    +                  },
    +                  "SPT17": {
    +                    "description": "Channel 17 sample time\n              selection",
    +                    "offset": 21,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "SAMPT1": {
    +              "description": "Sample time register 1",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SPT0": {
    +                    "description": "Channel 0 sample time\n              selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "SPT1": {
    +                    "description": "Channel 1 sample time\n              selection",
    +                    "offset": 3,
    +                    "size": 3
    +                  },
    +                  "SPT2": {
    +                    "description": "Channel 2 sample time\n              selection",
    +                    "offset": 6,
    +                    "size": 3
    +                  },
    +                  "SPT3": {
    +                    "description": "Channel 3 sample time\n              selection",
    +                    "offset": 9,
    +                    "size": 3
    +                  },
    +                  "SPT4": {
    +                    "description": "Channel 4 sample time\n              selection",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "SPT5": {
    +                    "description": "Channel 5 sample time\n              selection",
    +                    "offset": 15,
    +                    "size": 3
    +                  },
    +                  "SPT6": {
    +                    "description": "Channel 6 sample time\n              selection",
    +                    "offset": 18,
    +                    "size": 3
    +                  },
    +                  "SPT7": {
    +                    "description": "Channel 7 sample time\n              selection",
    +                    "offset": 21,
    +                    "size": 3
    +                  },
    +                  "SPT8": {
    +                    "description": "Channel 8 sample time\n              selection",
    +                    "offset": 24,
    +                    "size": 3
    +                  },
    +                  "SPT9": {
    +                    "description": "Channel 9 sample time\n              selection",
    +                    "offset": 27,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "IOFF0": {
    +              "description": "Inserted channel data offset register\n          0",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IOFF": {
    +                    "description": "Data offset for inserted channel\n              0",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "IOFF1": {
    +              "description": "Inserted channel data offset register\n          1",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IOFF": {
    +                    "description": "Data offset for inserted channel\n              1",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "IOFF2": {
    +              "description": "Inserted channel data offset register\n          2",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IOFF": {
    +                    "description": "Data offset for inserted channel\n              2",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "IOFF3": {
    +              "description": "Inserted channel data offset register\n          3",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IOFF": {
    +                    "description": "Data offset for inserted channel\n              3",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "WDHT": {
    +              "description": "watchdog higher threshold\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 4095,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WDHT": {
    +                    "description": "Analog watchdog higher\n              threshold",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "WDLT": {
    +              "description": "watchdog lower threshold\n          register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WDLT": {
    +                    "description": "Analog watchdog lower\n              threshold",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "RSQ0": {
    +              "description": "regular sequence register 0",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RL": {
    +                    "description": "Regular channel group\n              length",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "RSQ15": {
    +                    "description": "16th conversion in regular\n              sequence",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "RSQ14": {
    +                    "description": "15th conversion in regular\n              sequence",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "RSQ13": {
    +                    "description": "14th conversion in regular\n              sequence",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "RSQ12": {
    +                    "description": "13th conversion in regular\n              sequence",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "RSQ1": {
    +              "description": "regular sequence register 1",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RSQ11": {
    +                    "description": "12th conversion in regular\n              sequence",
    +                    "offset": 25,
    +                    "size": 5
    +                  },
    +                  "RSQ10": {
    +                    "description": "11th conversion in regular\n              sequence",
    +                    "offset": 20,
    +                    "size": 5
    +                  },
    +                  "RSQ9": {
    +                    "description": "10th conversion in regular\n              sequence",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "RSQ8": {
    +                    "description": "9th conversion in regular\n              sequence",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "RSQ7": {
    +                    "description": "8th conversion in regular\n              sequence",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "RSQ6": {
    +                    "description": "7th conversion in regular\n              sequence",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "RSQ2": {
    +              "description": "regular sequence register 2",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RSQ5": {
    +                    "description": "6th conversion in regular\n              sequence",
    +                    "offset": 25,
    +                    "size": 5
    +                  },
    +                  "RSQ4": {
    +                    "description": "5th conversion in regular\n              sequence",
    +                    "offset": 20,
    +                    "size": 5
    +                  },
    +                  "RSQ3": {
    +                    "description": "4th conversion in regular\n              sequence",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "RSQ2": {
    +                    "description": "3rd conversion in regular\n              sequence",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "RSQ1": {
    +                    "description": "2nd conversion in regular\n              sequence",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "RSQ0": {
    +                    "description": "1st conversion in regular\n              sequence",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "ISQ": {
    +              "description": "Inserted sequence register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IL": {
    +                    "description": "Inserted channel group length",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "ISQ3": {
    +                    "description": "4th conversion in inserted\n              sequence",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "ISQ2": {
    +                    "description": "3rd conversion in inserted\n              sequence",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "ISQ1": {
    +                    "description": "2nd conversion in inserted\n              sequence",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "ISQ0": {
    +                    "description": "1st conversion in inserted\n              sequence",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "IDATA0": {
    +              "description": "Inserted data register 0",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IDATAn": {
    +                    "description": "Inserted number n conversion data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "IDATA1": {
    +              "description": "Inserted data register 1",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IDATAn": {
    +                    "description": "Inserted number n conversion data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "IDATA2": {
    +              "description": "Inserted data register 2",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IDATAn": {
    +                    "description": "Inserted number n conversion data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "IDATA3": {
    +              "description": "Inserted data register 3",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IDATAn": {
    +                    "description": "Inserted number n conversion data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "RDATA": {
    +              "description": "regular data register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ADC1RDTR": {
    +                    "description": "ADC regular channel data",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "RDATA": {
    +                    "description": "Regular channel data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OVSAMPCTL": {
    +              "description": "Oversample control register",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DRES": {
    +                    "description": "ADC resolution",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "TOVS": {
    +                    "description": "Triggered Oversampling",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "OVSS": {
    +                    "description": "Oversampling shift",
    +                    "offset": 5,
    +                    "size": 4
    +                  },
    +                  "OVSR": {
    +                    "description": "Oversampling ratio",
    +                    "offset": 2,
    +                    "size": 3
    +                  },
    +                  "OVSEN": {
    +                    "description": "Oversampler Enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "ADC1": {
    +        "description": "Analog to digital converter",
    +        "children": {
    +          "registers": {
    +            "STAT": {
    +              "description": "status register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STRC": {
    +                    "description": "Start flag of regular channel group",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "STIC": {
    +                    "description": "Start flag of inserted channel group",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EOIC": {
    +                    "description": "End of inserted group conversion flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EOC": {
    +                    "description": "End of group conversion flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "WDE": {
    +                    "description": "Analog watchdog event flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CTL0": {
    +              "description": "control register 0",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RWDEN": {
    +                    "description": "Regular channel analog watchdog \n\t     enable",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "IWDEN": {
    +                    "description": "Inserted channel analog watchdog \n\t     enable",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "DISNUM": {
    +                    "description": "Number of conversions in \n\t     discontinuous mode",
    +                    "offset": 13,
    +                    "size": 3
    +                  },
    +                  "DISIC": {
    +                    "description": "Discontinuous mode on \n\t     inserted channels",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "DISRC": {
    +                    "description": "Discontinuous mode on regular\n              channels",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ICA": {
    +                    "description": "Inserted channel group convert \n\t     automatically",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "WDSC": {
    +                    "description": "When in scan mode, analog watchdog\n\t     is effective on a single channel",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SM": {
    +                    "description": "Scan mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EOICIE": {
    +                    "description": "Interrupt enable for EOIC",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "WDEIE": {
    +                    "description": "Interrupt enable for WDE",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EOCIE": {
    +                    "description": "Interrupt enable for EOC",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "WDCHSEL": {
    +                    "description": "Analog watchdog channel select",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "CTL1": {
    +              "description": "control register 1",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SWRCST": {
    +                    "description": "Start on regular channel",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "SWICST": {
    +                    "description": "Start on inserted channel",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "ETERC": {
    +                    "description": "External trigger enable for regular channel",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "ETSRC": {
    +                    "description": "External trigger select for regular channel",
    +                    "offset": 17,
    +                    "size": 3
    +                  },
    +                  "ETEIC": {
    +                    "description": "External trigger enable for inserted channel",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ETSIC": {
    +                    "description": "External trigger select for inserted channel",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "DAL": {
    +                    "description": "Data alignment",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "DMA": {
    +                    "description": "DMA request enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "RSTCLB": {
    +                    "description": "Reset calibration",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CLB": {
    +                    "description": "ADC calibration",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CTN": {
    +                    "description": "Continuous mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ADCON": {
    +                    "description": "ADC on",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SAMPT0": {
    +              "description": "Sample time register 0",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SPT10": {
    +                    "description": "Channel 10 sample time\n              selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "SPT11": {
    +                    "description": "Channel 11 sample time\n              selection",
    +                    "offset": 3,
    +                    "size": 3
    +                  },
    +                  "SPT12": {
    +                    "description": "Channel 12 sample time\n              selection",
    +                    "offset": 6,
    +                    "size": 3
    +                  },
    +                  "SPT13": {
    +                    "description": "Channel 13 sample time\n              selection",
    +                    "offset": 9,
    +                    "size": 3
    +                  },
    +                  "SPT14": {
    +                    "description": "Channel 14 sample time\n              selection",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "SPT15": {
    +                    "description": "Channel 15 sample time\n              selection",
    +                    "offset": 15,
    +                    "size": 3
    +                  },
    +                  "SPT16": {
    +                    "description": "Channel 16 sample time\n              selection",
    +                    "offset": 18,
    +                    "size": 3
    +                  },
    +                  "SPT17": {
    +                    "description": "Channel 17 sample time\n              selection",
    +                    "offset": 21,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "SAMPT1": {
    +              "description": "Sample time register 1",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SPT0": {
    +                    "description": "Channel 0 sample time\n              selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "SPT1": {
    +                    "description": "Channel 1 sample time\n              selection",
    +                    "offset": 3,
    +                    "size": 3
    +                  },
    +                  "SPT2": {
    +                    "description": "Channel 2 sample time\n              selection",
    +                    "offset": 6,
    +                    "size": 3
    +                  },
    +                  "SPT3": {
    +                    "description": "Channel 3 sample time\n              selection",
    +                    "offset": 9,
    +                    "size": 3
    +                  },
    +                  "SPT4": {
    +                    "description": "Channel 4 sample time\n              selection",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "SPT5": {
    +                    "description": "Channel 5 sample time\n              selection",
    +                    "offset": 15,
    +                    "size": 3
    +                  },
    +                  "SPT6": {
    +                    "description": "Channel 6 sample time\n              selection",
    +                    "offset": 18,
    +                    "size": 3
    +                  },
    +                  "SPT7": {
    +                    "description": "Channel 7 sample time\n              selection",
    +                    "offset": 21,
    +                    "size": 3
    +                  },
    +                  "SPT8": {
    +                    "description": "Channel 8 sample time\n              selection",
    +                    "offset": 24,
    +                    "size": 3
    +                  },
    +                  "SPT9": {
    +                    "description": "Channel 9 sample time\n              selection",
    +                    "offset": 27,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "IOFF0": {
    +              "description": "Inserted channel data offset register\n          0",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IOFF": {
    +                    "description": "Data offset for inserted channel\n              0",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "IOFF1": {
    +              "description": "Inserted channel data offset register\n          1",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IOFF": {
    +                    "description": "Data offset for inserted channel\n              1",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "IOFF2": {
    +              "description": "Inserted channel data offset register\n          2",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IOFF": {
    +                    "description": "Data offset for inserted channel\n              2",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "IOFF3": {
    +              "description": "Inserted channel data offset register\n          3",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IOFF": {
    +                    "description": "Data offset for inserted channel\n              3",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "WDHT": {
    +              "description": "watchdog higher threshold\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 4095,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WDHT": {
    +                    "description": "Analog watchdog higher\n              threshold",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "WDLT": {
    +              "description": "watchdog lower threshold\n          register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WDLT": {
    +                    "description": "Analog watchdog lower\n              threshold",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "RSQ0": {
    +              "description": "regular sequence register 0",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RL": {
    +                    "description": "Regular channel group\n              length",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "RSQ15": {
    +                    "description": "16th conversion in regular\n              sequence",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "RSQ14": {
    +                    "description": "15th conversion in regular\n              sequence",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "RSQ13": {
    +                    "description": "14th conversion in regular\n              sequence",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "RSQ12": {
    +                    "description": "13th conversion in regular\n              sequence",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "RSQ1": {
    +              "description": "regular sequence register 1",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RSQ11": {
    +                    "description": "12th conversion in regular\n              sequence",
    +                    "offset": 25,
    +                    "size": 5
    +                  },
    +                  "RSQ10": {
    +                    "description": "11th conversion in regular\n              sequence",
    +                    "offset": 20,
    +                    "size": 5
    +                  },
    +                  "RSQ9": {
    +                    "description": "10th conversion in regular\n              sequence",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "RSQ8": {
    +                    "description": "9th conversion in regular\n              sequence",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "RSQ7": {
    +                    "description": "8th conversion in regular\n              sequence",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "RSQ6": {
    +                    "description": "7th conversion in regular\n              sequence",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "RSQ2": {
    +              "description": "regular sequence register 2",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RSQ5": {
    +                    "description": "6th conversion in regular\n              sequence",
    +                    "offset": 25,
    +                    "size": 5
    +                  },
    +                  "RSQ4": {
    +                    "description": "5th conversion in regular\n              sequence",
    +                    "offset": 20,
    +                    "size": 5
    +                  },
    +                  "RSQ3": {
    +                    "description": "4th conversion in regular\n              sequence",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "RSQ2": {
    +                    "description": "3rd conversion in regular\n              sequence",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "RSQ1": {
    +                    "description": "2nd conversion in regular\n              sequence",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "RSQ0": {
    +                    "description": "1st conversion in regular\n              sequence",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "ISQ": {
    +              "description": "Inserted sequence register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IL": {
    +                    "description": "Inserted channel group length",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "ISQ3": {
    +                    "description": "4th conversion in inserted\n              sequence",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "ISQ2": {
    +                    "description": "3rd conversion in inserted\n              sequence",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "ISQ1": {
    +                    "description": "2nd conversion in inserted\n              sequence",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "ISQ0": {
    +                    "description": "1st conversion in inserted\n              sequence",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "IDATA0": {
    +              "description": "Inserted data register 0",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IDATAn": {
    +                    "description": "Inserted number n conversion data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "IDATA1": {
    +              "description": "Inserted data register 1",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IDATAn": {
    +                    "description": "Inserted number n conversion data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "IDATA2": {
    +              "description": "Inserted data register 2",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IDATAn": {
    +                    "description": "Inserted number n conversion data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "IDATA3": {
    +              "description": "Inserted data register 3",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IDATAn": {
    +                    "description": "Inserted number n conversion data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "RDATA": {
    +              "description": "regular data register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RDATA": {
    +                    "description": "Regular channel data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "AFIO": {
    +        "description": "Alternate-function I/Os",
    +        "children": {
    +          "registers": {
    +            "EC": {
    +              "description": "Event control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EOE": {
    +                    "description": "Event output enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PORT": {
    +                    "description": "Event output port selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "PIN": {
    +                    "description": "Event output pin selection",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "PCF0": {
    +              "description": "AFIO port configuration register 0",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER1ITI1_REMAP": {
    +                    "description": "TIMER1 internal trigger 1 remapping",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "SPI2_REMAP": {
    +                    "description": " SPI2/I2S2 remapping",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "SWJ_CFG": {
    +                    "description": "Serial wire JTAG configuration",
    +                    "offset": 24,
    +                    "size": 3
    +                  },
    +                  "CAN1_REMAP": {
    +                    "description": "CAN1 I/O remapping",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "TIMER4CH3_IREMAP": {
    +                    "description": "TIMER4 channel3 internal remapping",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "PD01_REMAP": {
    +                    "description": "Port D0/Port D1 mapping on OSC_IN/OSC_OUT",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "CAN0_REMAP": {
    +                    "description": "CAN0 alternate interface remapping",
    +                    "offset": 13,
    +                    "size": 2
    +                  },
    +                  "TIMER3_REMAP": {
    +                    "description": "TIMER3 remapping",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TIMER2_REMAP": {
    +                    "description": "TIMER2 remapping",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "TIMER1_REMAP": {
    +                    "description": "TIMER1 remapping",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "TIMER0_REMAP": {
    +                    "description": "TIMER0 remapping",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "USART2_REMAP": {
    +                    "description": "USART2 remapping",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "USART1_REMAP": {
    +                    "description": "USART1 remapping",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "USART0_REMAP": {
    +                    "description": "USART0 remapping",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "I2C0_REMAP": {
    +                    "description": "I2C0 remapping",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SPI0_REMAP": {
    +                    "description": "SPI0 remapping",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EXTISS0": {
    +              "description": "EXTI sources selection register 0",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXTI3_SS": {
    +                    "description": "EXTI 3 sources selection",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "EXTI2_SS": {
    +                    "description": "EXTI 2 sources selection",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "EXTI1_SS": {
    +                    "description": "EXTI 1 sources selection",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "EXTI0_SS": {
    +                    "description": "EXTI 0 sources selection",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "EXTISS1": {
    +              "description": "EXTI sources selection register 1",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXTI7_SS": {
    +                    "description": "EXTI 7 sources selection",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "EXTI6_SS": {
    +                    "description": "EXTI 6 sources selection",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "EXTI5_SS": {
    +                    "description": "EXTI 5 sources selection",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "EXTI4_SS": {
    +                    "description": "EXTI 4 sources selection",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "EXTISS2": {
    +              "description": "EXTI sources selection register 2",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXTI11_SS": {
    +                    "description": "EXTI 11 sources selection",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "EXTI10_SS": {
    +                    "description": "EXTI 10 sources selection",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "EXTI9_SS": {
    +                    "description": "EXTI 9 sources selection",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "EXTI8_SS": {
    +                    "description": "EXTI 8 sources selection",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "EXTISS3": {
    +              "description": "EXTI sources selection register 3",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXTI15_SS": {
    +                    "description": "EXTI 15 sources selection",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "EXTI14_SS": {
    +                    "description": "EXTI 14 sources selection",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "EXTI13_SS": {
    +                    "description": "EXTI 13 sources selection",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "EXTI12_SS": {
    +                    "description": "EXTI 12 sources selection",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "PCF1": {
    +              "description": "AFIO port configuration register 1",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXMC_NADV": {
    +                    "description": "EXMC_NADV connect/disconnect",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "BKP": {
    +        "description": "Backup registers",
    +        "children": {
    +          "registers": {
    +            "DATA0": {
    +              "description": "Backup data register 0",
    +              "offset": 4,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA1": {
    +              "description": "Backup data register 1",
    +              "offset": 8,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA2": {
    +              "description": "Backup data register 2",
    +              "offset": 12,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA3": {
    +              "description": "Backup data register 3",
    +              "offset": 16,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA4": {
    +              "description": "Backup data register 4",
    +              "offset": 20,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA5": {
    +              "description": "Backup data register 5",
    +              "offset": 24,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA6": {
    +              "description": "Backup data register 6",
    +              "offset": 28,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA7": {
    +              "description": "Backup data register 7",
    +              "offset": 32,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA8": {
    +              "description": "Backup data register 8",
    +              "offset": 36,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA9": {
    +              "description": "Backup data register 9",
    +              "offset": 40,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA10": {
    +              "description": "Backup data register 10",
    +              "offset": 64,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA11": {
    +              "description": "Backup data register 11",
    +              "offset": 68,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA12": {
    +              "description": "Backup data register 12",
    +              "offset": 72,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA13": {
    +              "description": "Backup data register 13",
    +              "offset": 76,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA14": {
    +              "description": "Backup data register 14",
    +              "offset": 80,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA15": {
    +              "description": "Backup data register 15",
    +              "offset": 84,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA16": {
    +              "description": "Backup data register 16",
    +              "offset": 88,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA17": {
    +              "description": "Backup data register 17",
    +              "offset": 92,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA18": {
    +              "description": "Backup data register 18",
    +              "offset": 96,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA19": {
    +              "description": "Backup data register 19",
    +              "offset": 100,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA20": {
    +              "description": "Backup data register 20",
    +              "offset": 104,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA21": {
    +              "description": "Backup data register 21",
    +              "offset": 108,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA22": {
    +              "description": "Backup data register 22",
    +              "offset": 112,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA23": {
    +              "description": "Backup data register 23",
    +              "offset": 116,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA24": {
    +              "description": "Backup data register 24",
    +              "offset": 120,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA25": {
    +              "description": "Backup data register 25",
    +              "offset": 124,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA26": {
    +              "description": "Backup data register 26",
    +              "offset": 128,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA27": {
    +              "description": "Backup data register 27",
    +              "offset": 132,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA28": {
    +              "description": "Backup data register 28",
    +              "offset": 136,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA29": {
    +              "description": "Backup data register 29",
    +              "offset": 140,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA30": {
    +              "description": "Backup data register 30",
    +              "offset": 144,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA31": {
    +              "description": "Backup data register 31",
    +              "offset": 148,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA32": {
    +              "description": "Backup data register 32",
    +              "offset": 152,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA33": {
    +              "description": "Backup data register 33",
    +              "offset": 156,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA34": {
    +              "description": "Backup data register 34",
    +              "offset": 160,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA35": {
    +              "description": "Backup data register 35",
    +              "offset": 164,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA36": {
    +              "description": "Backup data register 36",
    +              "offset": 168,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA37": {
    +              "description": "Backup data register 37",
    +              "offset": 172,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA38": {
    +              "description": "Backup data register 38",
    +              "offset": 176,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA39": {
    +              "description": "Backup data register 39",
    +              "offset": 180,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA40": {
    +              "description": "Backup data register 40",
    +              "offset": 184,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATA41": {
    +              "description": "Backup data register 41",
    +              "offset": 188,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Backup data",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "OCTL": {
    +              "description": "RTC signal output control register",
    +              "offset": 44,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ROSEL": {
    +                    "description": "RTC output selection",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ASOEN": {
    +                    "description": "RTC alarm or second signal output enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "COEN": {
    +                    "description": "RTC clock calibration output enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RCCV": {
    +                    "description": "RTC clock calibration value",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "TPCTL": {
    +              "description": "Tamper pin control register",
    +              "offset": 48,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TPAL": {
    +                    "description": "TAMPER pin active level",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TPEN": {
    +                    "description": "TAMPER detection enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TPCS": {
    +              "description": "Tamper control and status register",
    +              "offset": 52,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIF": {
    +                    "description": "Tamper interrupt flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TEF": {
    +                    "description": "Tamper event flag",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TPIE": {
    +                    "description": "Tamper interrupt enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TIR": {
    +                    "description": "Tamper interrupt reset",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TER": {
    +                    "description": "Tamper event reset",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "CAN0": {
    +        "description": "Controller area network",
    +        "children": {
    +          "registers": {
    +            "CTL": {
    +              "description": "Control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 65538,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DFZ": {
    +                    "description": "Debug freeze",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SWRST": {
    +                    "description": "Software reset",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TTC": {
    +                    "description": "Time-triggered communication",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ABOR": {
    +                    "description": "Automatic bus-off recovery",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "AWU": {
    +                    "description": "Automatic wakeup",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ARD": {
    +                    "description": "Automatic retransmission disable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RFOD": {
    +                    "description": "Receive FIFO overwrite disable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TFO": {
    +                    "description": "Transmit FIFO order",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SLPWMOD": {
    +                    "description": "Sleep working mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IWMOD": {
    +                    "description": "Initial working mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "STAT": {
    +              "description": "Status register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 3074,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXL": {
    +                    "description": "RX level",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LASTRX": {
    +                    "description": "Last sample value of RX pin",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RS": {
    +                    "description": "Receiving state",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TS": {
    +                    "description": "Transmitting state",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SLPIF": {
    +                    "description": "Status change interrupt flag of sleep \n\t     working mode entering",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "WUIF": {
    +                    "description": "Status change interrupt flag of wakeup \n\t     from sleep working mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ERRIF": {
    +                    "description": "Error interrupt flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SLPWS": {
    +                    "description": "Sleep working state",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IWS": {
    +                    "description": "Initial working state",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "TSTAT": {
    +              "description": "Transmit status register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 469762048,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TMLS2": {
    +                    "description": "Transmit mailbox 2 last sending \n\t     in transmit FIFO",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TMLS1": {
    +                    "description": "Transmit mailbox 1 last sending \n\t     in transmit FIFO",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TMLS0": {
    +                    "description": "Transmit mailbox 0 last sending \n\t     in transmit FIFO",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TME2": {
    +                    "description": "Transmit mailbox 2 empty",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TME1": {
    +                    "description": "Transmit mailbox 1 empty",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TME0": {
    +                    "description": "Transmit mailbox 0 empty",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NUM": {
    +                    "description": "number of the transmit FIFO mailbox in \n\t     which the frame will be transmitted if at least one mailbox is empty",
    +                    "offset": 24,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "MST2": {
    +                    "description": "Mailbox 2 stop transmitting",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "MTE2": {
    +                    "description": "Mailbox 2 transmit error",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "MAL2": {
    +                    "description": "Mailbox 2 arbitration lost",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "MTFNERR2": {
    +                    "description": "Mailbox 2 transmit finished and no error",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "MTF2": {
    +                    "description": "Mailbox 2 transmit finished",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "MST1": {
    +                    "description": "Mailbox 1 stop transmitting",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MTE1": {
    +                    "description": "Mailbox 1 transmit error",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "MAL1": {
    +                    "description": "Mailbox 1 arbitration lost",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "MTFNERR1": {
    +                    "description": "Mailbox 1 transmit finished and no error",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "MTF1": {
    +                    "description": "Mailbox 1 transmit finished",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "MST0": {
    +                    "description": "Mailbox 0 stop transmitting",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MTE0": {
    +                    "description": "Mailbox 0 transmit error",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MAL0": {
    +                    "description": "Mailbox 0 arbitration lost",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MTFNERR0": {
    +                    "description": "Mailbox 0 transmit finished and no error",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MTF0": {
    +                    "description": "Mailbox 0 transmit finished",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RFIFO0": {
    +              "description": "Receive message FIFO0 register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RFD0": {
    +                    "description": "Receive FIFO0 dequeue",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RFO0": {
    +                    "description": "Receive FIFO0 overfull",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RFF0": {
    +                    "description": "Receive FIFO0 full",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RFL0": {
    +                    "description": "Receive FIFO0 length",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RFIFO1": {
    +              "description": "Receive message FIFO1 register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RFD1": {
    +                    "description": "Receive FIFO1 dequeue",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RFO1": {
    +                    "description": "Receive FIFO1 overfull",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RFF1": {
    +                    "description": "Receive FIFO1 full",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RFL1": {
    +                    "description": "Receive FIFO1 length",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INTEN": {
    +              "description": "Interrupt enable register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SLPWIE": {
    +                    "description": "Sleep working interrupt enable",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "WIE": {
    +                    "description": "Wakeup interrupt enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "Error interrupt enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ERRNIE": {
    +                    "description": "Error number interrupt enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BOIE": {
    +                    "description": "Bus-off interrupt enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PERRIE": {
    +                    "description": "Passive error interrupt enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "WERRIE": {
    +                    "description": "Warning error interrupt enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "RFOIE1": {
    +                    "description": "Receive FIFO1 overfull interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RFFIE1": {
    +                    "description": "Receive FIFO1 full interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RFNEIE1": {
    +                    "description": "Receive FIFO1 not empty interrupt enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RFOIE0": {
    +                    "description": "Receive FIFO0 overfull interrupt enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RFFIE0": {
    +                    "description": "Receive FIFO0 full interrupt enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RFNEIE0": {
    +                    "description": "Receive FIFO0 not empty interrupt enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TMEIE": {
    +                    "description": "Transmit mailbox empty interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ERR": {
    +              "description": "Error register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RECNT": {
    +                    "description": "Receive Error Count defined \n\t     by the CAN standard",
    +                    "offset": 24,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "TECNT": {
    +                    "description": "Transmit Error Count defined \n\t     by the CAN standard",
    +                    "offset": 16,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "ERRN": {
    +                    "description": "Error number",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "BOERR": {
    +                    "description": "Bus-off error",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PERR": {
    +                    "description": "Passive error",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "WERR": {
    +                    "description": "Warning error",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "BT": {
    +              "description": "Bit timing register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 19070976,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SCMOD": {
    +                    "description": "Silent communication mode",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LCMOD": {
    +                    "description": "Loopback communication mode",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SJW": {
    +                    "description": "Resynchronization jump width",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "BS2": {
    +                    "description": "Bit segment 2",
    +                    "offset": 20,
    +                    "size": 3
    +                  },
    +                  "BS1": {
    +                    "description": "Bit segment 1",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "BAUDPSC": {
    +                    "description": "Baud rate prescaler",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "TMI0": {
    +              "description": "Transmit mailbox identifier register 0",
    +              "offset": 384,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SFID_EFID": {
    +                    "description": "The frame identifier",
    +                    "offset": 21,
    +                    "size": 11
    +                  },
    +                  "EFID": {
    +                    "description": "The frame identifier",
    +                    "offset": 3,
    +                    "size": 18
    +                  },
    +                  "FF": {
    +                    "description": "Frame format",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FT": {
    +                    "description": "Frame type",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TEN": {
    +                    "description": "Transmit enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TMP0": {
    +              "description": "Transmit mailbox property register 0",
    +              "offset": 388,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TS": {
    +                    "description": "Time stamp",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "TSEN": {
    +                    "description": "Time stamp enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DLENC": {
    +                    "description": "Data length code",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "TMDATA00": {
    +              "description": "Transmit mailbox data0 register",
    +              "offset": 392,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DB3": {
    +                    "description": "Data byte 3",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DB2": {
    +                    "description": "Data byte 2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DB1": {
    +                    "description": "Data byte 1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DB0": {
    +                    "description": "Data byte 0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TMDATA10": {
    +              "description": "Transmit mailbox data1 register",
    +              "offset": 396,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DB7": {
    +                    "description": "Data byte 7",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DB6": {
    +                    "description": "Data byte 6",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DB5": {
    +                    "description": "Data byte 5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DB4": {
    +                    "description": "Data byte 4",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TMI1": {
    +              "description": "Transmit mailbox identifier register 1",
    +              "offset": 400,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SFID_EFID": {
    +                    "description": "The frame identifier",
    +                    "offset": 21,
    +                    "size": 11
    +                  },
    +                  "EFID": {
    +                    "description": "The frame identifier",
    +                    "offset": 3,
    +                    "size": 18
    +                  },
    +                  "FF": {
    +                    "description": "Frame format",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FT": {
    +                    "description": "Frame type",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TEN": {
    +                    "description": "Transmit enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TMP1": {
    +              "description": "Transmit mailbox property register 1",
    +              "offset": 404,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TS": {
    +                    "description": "Time stamp",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "TSEN": {
    +                    "description": "Time stamp enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DLENC": {
    +                    "description": "Data length code",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "TMDATA01": {
    +              "description": "Transmit mailbox data0 register",
    +              "offset": 408,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DB3": {
    +                    "description": "Data byte 3",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DB2": {
    +                    "description": "Data byte 2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DB1": {
    +                    "description": "Data byte 1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DB0": {
    +                    "description": "Data byte 0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TMDATA11": {
    +              "description": "Transmit mailbox data1 register",
    +              "offset": 412,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DB7": {
    +                    "description": "Data byte 7",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DB6": {
    +                    "description": "Data byte 6",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DB5": {
    +                    "description": "Data byte 5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DB4": {
    +                    "description": "Data byte 4",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TMI2": {
    +              "description": "Transmit mailbox identifier register 2",
    +              "offset": 416,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SFID_EFID": {
    +                    "description": "The frame identifier",
    +                    "offset": 21,
    +                    "size": 11
    +                  },
    +                  "EFID": {
    +                    "description": "The frame identifier",
    +                    "offset": 3,
    +                    "size": 18
    +                  },
    +                  "FF": {
    +                    "description": "Frame format",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FT": {
    +                    "description": "Frame type",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TEN": {
    +                    "description": "Transmit enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TMP2": {
    +              "description": "Transmit mailbox property register 2",
    +              "offset": 420,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TS": {
    +                    "description": "Time stamp",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "TSEN": {
    +                    "description": "Time stamp enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DLENC": {
    +                    "description": "Data length code",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "TMDATA02": {
    +              "description": "Transmit mailbox data0 register",
    +              "offset": 424,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DB3": {
    +                    "description": "Data byte 3",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DB2": {
    +                    "description": "Data byte 2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DB1": {
    +                    "description": "Data byte 1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DB0": {
    +                    "description": "Data byte 0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TMDATA12": {
    +              "description": "Transmit mailbox data1 register",
    +              "offset": 428,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DB7": {
    +                    "description": "Data byte 7",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DB6": {
    +                    "description": "Data byte 6",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DB5": {
    +                    "description": "Data byte 5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DB4": {
    +                    "description": "Data byte 4",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "RFIFOMI0": {
    +              "description": "Receive FIFO mailbox identifier register",
    +              "offset": 432,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SFID_EFID": {
    +                    "description": "The frame identifier",
    +                    "offset": 21,
    +                    "size": 11
    +                  },
    +                  "EFID": {
    +                    "description": "The frame identifier",
    +                    "offset": 3,
    +                    "size": 18
    +                  },
    +                  "FF": {
    +                    "description": "Frame format",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FT": {
    +                    "description": "Frame type",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RFIFOMP0": {
    +              "description": "Receive FIFO0 mailbox property register",
    +              "offset": 436,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TS": {
    +                    "description": "Time stamp",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "FI": {
    +                    "description": "Filtering index",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DLENC": {
    +                    "description": "Data length code",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "RFIFOMDATA00": {
    +              "description": "Receive FIFO0 mailbox data0 register",
    +              "offset": 440,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DB3": {
    +                    "description": "Data byte 3",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DB2": {
    +                    "description": "Data byte 2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DB1": {
    +                    "description": "Data byte 1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DB0": {
    +                    "description": "Data byte 0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "RFIFOMDATA10": {
    +              "description": "Receive FIFO0 mailbox data1 register",
    +              "offset": 444,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DB7": {
    +                    "description": "Data byte 7",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DB6": {
    +                    "description": "Data byte 6",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DB5": {
    +                    "description": "Data byte 5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DB4": {
    +                    "description": "Data byte 4",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "RFIFOMI1": {
    +              "description": "Receive FIFO1 mailbox identifier register",
    +              "offset": 448,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SFID_EFID": {
    +                    "description": "The frame identifier",
    +                    "offset": 21,
    +                    "size": 11
    +                  },
    +                  "EFID": {
    +                    "description": "The frame identifier",
    +                    "offset": 3,
    +                    "size": 18
    +                  },
    +                  "FF": {
    +                    "description": "Frame format",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FT": {
    +                    "description": "Frame type",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RFIFOMP1": {
    +              "description": "Receive FIFO1 mailbox property register",
    +              "offset": 452,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TS": {
    +                    "description": "Time stamp",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "FI": {
    +                    "description": "Filtering index",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DLENC": {
    +                    "description": "Data length code",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "RFIFOMDATA01": {
    +              "description": "Receive FIFO1 mailbox data0 register",
    +              "offset": 456,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DB3": {
    +                    "description": "Data byte 3",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DB2": {
    +                    "description": "Data byte 2",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DB1": {
    +                    "description": "Data byte 1",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DB0": {
    +                    "description": "Data byte 0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "RFIFOMDATA11": {
    +              "description": "Receive FIFO1 mailbox data1 register",
    +              "offset": 460,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DB7": {
    +                    "description": "Data byte 7",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "DB6": {
    +                    "description": "Data byte 6",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "DB5": {
    +                    "description": "Data byte 5",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DB4": {
    +                    "description": "Data byte 4",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "FCTL": {
    +              "description": "Filter control register",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 706481665,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HBC1F": {
    +                    "description": "Header bank of CAN1 filter",
    +                    "offset": 8,
    +                    "size": 6
    +                  },
    +                  "FLD": {
    +                    "description": "Filter lock disable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FMCFG": {
    +              "description": "Filter mode configuration register",
    +              "offset": 516,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FMOD27": {
    +                    "description": "Filter mode",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FMOD26": {
    +                    "description": "Filter mode",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FMOD25": {
    +                    "description": "Filter mode",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FMOD24": {
    +                    "description": "Filter mode",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FMOD23": {
    +                    "description": "Filter mode",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FMOD22": {
    +                    "description": "Filter mode",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FMOD21": {
    +                    "description": "Filter mode",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FMOD20": {
    +                    "description": "Filter mode",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FMOD19": {
    +                    "description": "Filter mode",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FMOD18": {
    +                    "description": "Filter mode",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FMOD17": {
    +                    "description": "Filter mode",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FMOD16": {
    +                    "description": "Filter mode",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FMOD15": {
    +                    "description": "Filter mode",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FMOD14": {
    +                    "description": "Filter mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FMOD13": {
    +                    "description": "Filter mode",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FMOD12": {
    +                    "description": "Filter mode",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FMOD11": {
    +                    "description": "Filter mode",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FMOD10": {
    +                    "description": "Filter mode",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FMOD9": {
    +                    "description": "Filter mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FMOD8": {
    +                    "description": "Filter mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FMOD7": {
    +                    "description": "Filter mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FMOD6": {
    +                    "description": "Filter mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FMOD5": {
    +                    "description": "Filter mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FMOD4": {
    +                    "description": "Filter mode",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FMOD3": {
    +                    "description": "Filter mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FMOD2": {
    +                    "description": "Filter mode",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FMOD1": {
    +                    "description": "Filter mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FMOD0": {
    +                    "description": "Filter mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FSCFG": {
    +              "description": "Filter scale configuration register",
    +              "offset": 524,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FS0": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FS1": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FS2": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FS3": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FS4": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FS5": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FS6": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FS7": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FS8": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FS9": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FS10": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FS11": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FS12": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FS13": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FS14": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FS15": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FS16": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FS17": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FS18": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FS19": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FS20": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FS21": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FS22": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FS23": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FS24": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FS25": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FS26": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FS27": {
    +                    "description": "Filter scale configuration",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FAFIFO": {
    +              "description": "Filter associated FIFO register",
    +              "offset": 532,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FAF0": {
    +                    "description": "Filter 0 associated with FIFO",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FAF1": {
    +                    "description": "Filter 1 associated with FIFO",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FAF2": {
    +                    "description": "Filter 2 associated with FIFO",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FAF3": {
    +                    "description": "Filter 3 associated with FIFO",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FAF4": {
    +                    "description": "Filter 4 associated with FIFO",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FAF5": {
    +                    "description": "Filter 5 associated with FIFO",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FAF6": {
    +                    "description": "Filter 6 associated with FIFO",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FAF7": {
    +                    "description": "Filter 7 associated with FIFO",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FAF8": {
    +                    "description": "Filter 8 associated with FIFO",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FAF9": {
    +                    "description": "Filter 9 associated with FIFO",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FAF10": {
    +                    "description": "Filter 10 associated with FIFO",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FAF11": {
    +                    "description": "Filter 11 associated with FIFO",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FAF12": {
    +                    "description": "Filter 12 associated with FIFO",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FAF13": {
    +                    "description": "Filter 13 associated with FIFO",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FAF14": {
    +                    "description": "Filter 14 associated with FIFO",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FAF15": {
    +                    "description": "Filter 15 associated with FIFO",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FAF16": {
    +                    "description": "Filter 16 associated with FIFO",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FAF17": {
    +                    "description": "Filter 17 associated with FIFO",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FAF18": {
    +                    "description": "Filter 18 associated with FIFO",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FAF19": {
    +                    "description": "Filter 19 associated with FIFO",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FAF20": {
    +                    "description": "Filter 20 associated with FIFO",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FAF21": {
    +                    "description": "Filter 21 associated with FIFO",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FAF22": {
    +                    "description": "Filter 22 associated with FIFO",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FAF23": {
    +                    "description": "Filter 23 associated with FIFO",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FAF24": {
    +                    "description": "Filter 24 associated with FIFO",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FAF25": {
    +                    "description": "Filter 25 associated with FIFO",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FAF26": {
    +                    "description": "Filter 26 associated with FIFO",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FAF27": {
    +                    "description": "Filter 27 associated with FIFO",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FW": {
    +              "description": "Filter working register",
    +              "offset": 540,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FW0": {
    +                    "description": "Filter working",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FW1": {
    +                    "description": "Filter working",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FW2": {
    +                    "description": "Filter working",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FW3": {
    +                    "description": "Filter working",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FW4": {
    +                    "description": "Filter working",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FW5": {
    +                    "description": "Filter working",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FW6": {
    +                    "description": "Filter working",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FW7": {
    +                    "description": "Filter working",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FW8": {
    +                    "description": "Filter working",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FW9": {
    +                    "description": "Filter working",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FW10": {
    +                    "description": "Filter working",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FW11": {
    +                    "description": "Filter working",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FW12": {
    +                    "description": "Filter working",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FW13": {
    +                    "description": "Filter working",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FW14": {
    +                    "description": "Filter working",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FW15": {
    +                    "description": "Filter working",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FW16": {
    +                    "description": "Filter working",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FW17": {
    +                    "description": "Filter working",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FW18": {
    +                    "description": "Filter working",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FW19": {
    +                    "description": "Filter working",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FW20": {
    +                    "description": "Filter working",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FW21": {
    +                    "description": "Filter working",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FW22": {
    +                    "description": "Filter working",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FW23": {
    +                    "description": "Filter working",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FW24": {
    +                    "description": "Filter working",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FW25": {
    +                    "description": "Filter working",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FW26": {
    +                    "description": "Filter working",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FW27": {
    +                    "description": "Filter working",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F0DATA0": {
    +              "description": "Filter 0 data 0 register",
    +              "offset": 576,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F0DATA1": {
    +              "description": "Filter 0 data 1 register",
    +              "offset": 580,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F1DATA0": {
    +              "description": "Filter 1 data 0 register",
    +              "offset": 584,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F1DATA1": {
    +              "description": "Filter 1 data 1 register",
    +              "offset": 588,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F2DATA0": {
    +              "description": "Filter 2 data 0 register",
    +              "offset": 592,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F2DATA1": {
    +              "description": "Filter 2 data 1 register",
    +              "offset": 596,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F3DATA0": {
    +              "description": "Filter 3 data 0 register",
    +              "offset": 600,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F3DATA1": {
    +              "description": "Filter 3 data 1 register",
    +              "offset": 604,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F4DATA0": {
    +              "description": "Filter 4 data 0 register",
    +              "offset": 608,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F4DATA1": {
    +              "description": "Filter 4 data 1 register",
    +              "offset": 612,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F5DATA0": {
    +              "description": "Filter 5 data 0 register",
    +              "offset": 616,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F5DATA1": {
    +              "description": "Filter 5 data 1 register",
    +              "offset": 620,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F6DATA0": {
    +              "description": "Filter 6 data 0 register",
    +              "offset": 624,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F6DATA1": {
    +              "description": "Filter 6 data 1 register",
    +              "offset": 628,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F7DATA0": {
    +              "description": "Filter 7 data 0 register",
    +              "offset": 632,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F7DATA1": {
    +              "description": "Filter 7 data 1 register",
    +              "offset": 636,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F8DATA0": {
    +              "description": "Filter 8 data 0 register",
    +              "offset": 640,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F8DATA1": {
    +              "description": "Filter 8 data 1 register",
    +              "offset": 644,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F9DATA0": {
    +              "description": "Filter 9 data 0 register",
    +              "offset": 648,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F9DATA1": {
    +              "description": "Filter 9 data 1 register",
    +              "offset": 652,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F10DATA0": {
    +              "description": "Filter 10 data 0 register",
    +              "offset": 656,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F10DATA1": {
    +              "description": "Filter 10 data 1 register",
    +              "offset": 660,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F11DATA0": {
    +              "description": "Filter 11 data 0 register",
    +              "offset": 664,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F11DATA1": {
    +              "description": "Filter 11 data 1 register",
    +              "offset": 668,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F12DATA0": {
    +              "description": "Filter 12 data 0 register",
    +              "offset": 672,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F12DATA1": {
    +              "description": "Filter 12 data 1 register",
    +              "offset": 676,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F13DATA0": {
    +              "description": "Filter 13 data 0 register",
    +              "offset": 680,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F13DATA1": {
    +              "description": "Filter 13 data 1 register",
    +              "offset": 684,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F14DATA0": {
    +              "description": "Filter 14 data 0 register",
    +              "offset": 688,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F14DATA1": {
    +              "description": "Filter 14 data 1 register",
    +              "offset": 692,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F15DATA0": {
    +              "description": "Filter 15 data 0 register",
    +              "offset": 696,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F15DATA1": {
    +              "description": "Filter 15 data 1 register",
    +              "offset": 700,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F16DATA0": {
    +              "description": "Filter 16 data 0 register",
    +              "offset": 704,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F16DATA1": {
    +              "description": "Filter 16 data 1 register",
    +              "offset": 708,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F17DATA0": {
    +              "description": "Filter 17 data 0 register",
    +              "offset": 712,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F17DATA1": {
    +              "description": "Filter 17 data 1 register",
    +              "offset": 716,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F18DATA0": {
    +              "description": "Filter 18 data 0 register",
    +              "offset": 720,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F18DATA1": {
    +              "description": "Filter 18 data 1 register",
    +              "offset": 724,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F19DATA0": {
    +              "description": "Filter 19 data 0 register",
    +              "offset": 728,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F19DATA1": {
    +              "description": "Filter 19 data 1 register",
    +              "offset": 732,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F20DATA0": {
    +              "description": "Filter 20 data 0 register",
    +              "offset": 736,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F20DATA1": {
    +              "description": "Filter 20 data 1 register",
    +              "offset": 740,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F21DATA0": {
    +              "description": "Filter 21 data 0 register",
    +              "offset": 744,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F21DATA1": {
    +              "description": "Filter 21 data 1 register",
    +              "offset": 748,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F22DATA0": {
    +              "description": "Filter 22 data 0 register",
    +              "offset": 752,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F22DATA1": {
    +              "description": "Filter 22 data 1 register",
    +              "offset": 756,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F23DATA0": {
    +              "description": "Filter 23 data 0 register",
    +              "offset": 760,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F23DATA1": {
    +              "description": "Filter 23 data 1 register",
    +              "offset": 764,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F24DATA0": {
    +              "description": "Filter 24 data 0 register",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F24DATA1": {
    +              "description": "Filter 24 data 1 register",
    +              "offset": 772,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F25DATA0": {
    +              "description": "Filter 25 data 0 register",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F25DATA1": {
    +              "description": "Filter 25 data 1 register",
    +              "offset": 780,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F26DATA0": {
    +              "description": "Filter 26 data 0 register",
    +              "offset": 784,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F26DATA1": {
    +              "description": "Filter 26 data 1 register",
    +              "offset": 788,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F27DATA0": {
    +              "description": "Filter 27 data 0 register",
    +              "offset": 792,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "F27DATA1": {
    +              "description": "Filter 27 data 1 register",
    +              "offset": 796,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FD0": {
    +                    "description": "Filter bits",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FD1": {
    +                    "description": "Filter bits",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FD2": {
    +                    "description": "Filter bits",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FD3": {
    +                    "description": "Filter bits",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FD4": {
    +                    "description": "Filter bits",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FD5": {
    +                    "description": "Filter bits",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FD6": {
    +                    "description": "Filter bits",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FD7": {
    +                    "description": "Filter bits",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FD8": {
    +                    "description": "Filter bits",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FD9": {
    +                    "description": "Filter bits",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FD10": {
    +                    "description": "Filter bits",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FD11": {
    +                    "description": "Filter bits",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FD12": {
    +                    "description": "Filter bits",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FD13": {
    +                    "description": "Filter bits",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FD14": {
    +                    "description": "Filter bits",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FD15": {
    +                    "description": "Filter bits",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FD16": {
    +                    "description": "Filter bits",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FD17": {
    +                    "description": "Filter bits",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FD18": {
    +                    "description": "Filter bits",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FD19": {
    +                    "description": "Filter bits",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FD20": {
    +                    "description": "Filter bits",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FD21": {
    +                    "description": "Filter bits",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FD22": {
    +                    "description": "Filter bits",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FD23": {
    +                    "description": "Filter bits",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FD24": {
    +                    "description": "Filter bits",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FD25": {
    +                    "description": "Filter bits",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FD26": {
    +                    "description": "Filter bits",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FD27": {
    +                    "description": "Filter bits",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FD28": {
    +                    "description": "Filter bits",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FD29": {
    +                    "description": "Filter bits",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FD30": {
    +                    "description": "Filter bits",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FD31": {
    +                    "description": "Filter bits",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "WWDGT": {
    +        "description": "Window watchdog timer",
    +        "children": {
    +          "registers": {
    +            "CTL": {
    +              "description": "Control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 127,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WDGTEN": {
    +                    "description": "Activation bit",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CNT": {
    +                    "description": "7-bit counter",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "CFG": {
    +              "description": "Configuration register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 127,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EWIE": {
    +                    "description": "Early wakeup interrupt",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PSC": {
    +                    "description": "Prescaler",
    +                    "offset": 7,
    +                    "size": 2
    +                  },
    +                  "WIN": {
    +                    "description": "7-bit window value",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "STAT": {
    +              "description": "Status register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EWIF": {
    +                    "description": "Early wakeup interrupt\n              flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "CRC": {
    +        "description": "cyclic redundancy check calculation unit",
    +        "children": {
    +          "registers": {
    +            "DATA": {
    +              "description": "Data register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "CRC calculation result bits",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "FDATA": {
    +              "description": "Free data register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FDATA": {
    +                    "description": "Free Data Register bits",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CTL": {
    +              "description": "Control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RST": {
    +                    "description": "reset bit",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "DAC": {
    +        "description": "Digital-to-analog converter",
    +        "children": {
    +          "registers": {
    +            "CTL": {
    +              "description": "control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DEN0": {
    +                    "description": "DAC0 enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DBOFF0": {
    +                    "description": "DAC0 output buffer turn off",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DTEN0": {
    +                    "description": "DAC0 trigger enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DTSEL0": {
    +                    "description": "DAC0 trigger selection",
    +                    "offset": 3,
    +                    "size": 3
    +                  },
    +                  "DWM0": {
    +                    "description": "DAC0 noise wave mode",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "DWBW0": {
    +                    "description": "DAC0 noise wave bit width",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "DDMAEN0": {
    +                    "description": "DAC0 DMA enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "DEN1": {
    +                    "description": "DAC1 enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "DBOFF1": {
    +                    "description": "DAC1 output buffer turn off",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "DTEN1": {
    +                    "description": "DAC1 trigger enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "DTSEL1": {
    +                    "description": "DAC1 trigger selection",
    +                    "offset": 19,
    +                    "size": 3
    +                  },
    +                  "DWM1": {
    +                    "description": "DAC1 noise wave mode",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "DWBW1": {
    +                    "description": "DAC1 noise wave bit width",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "DDMAEN1": {
    +                    "description": "DAC1 DMA enable",
    +                    "offset": 28,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SWT": {
    +              "description": "software trigger register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "SWTR0": {
    +                    "description": "DAC0 software trigger",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SWTR1": {
    +                    "description": "DAC1 software trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DAC0_R12DH": {
    +              "description": "DAC0 12-bit right-aligned data holding register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DAC0_DH": {
    +                    "description": "DAC0 12-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DAC0_L12DH": {
    +              "description": "DAC0 12-bit left-aligned data holding register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DAC0_DH": {
    +                    "description": "DAC0 12-bit left-aligned\n              data",
    +                    "offset": 4,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DAC0_R8DH": {
    +              "description": "DAC0 8-bit right aligned data holding\n          register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DAC0_DH": {
    +                    "description": "DAC0 8-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "DAC1_R12DH": {
    +              "description": "DAC1 12-bit right-aligned data holding\n          register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DAC1_DH": {
    +                    "description": "DAC1 12-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DAC1_L12DH": {
    +              "description": "DAC1 12-bit left aligned data holding\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DAC1_DH": {
    +                    "description": "DAC1 12-bit left-aligned\n              data",
    +                    "offset": 4,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DAC1_R8DH": {
    +              "description": "DAC1 8-bit right aligned data holding\n          register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DAC1_DH": {
    +                    "description": "DAC1 8-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "DACC_R12DH": {
    +              "description": "DAC concurrent mode 12-bit right-aligned data holding\n          register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DAC0_DH": {
    +                    "description": "DAC0 12-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 12
    +                  },
    +                  "DAC1_DH": {
    +                    "description": "DAC1 12-bit right-aligned\n              data",
    +                    "offset": 16,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DACC_L12DH": {
    +              "description": "DAC concurrent mode 12-bit left aligned data holding\n          register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DAC0_DH": {
    +                    "description": "DAC0 12-bit left-aligned\n              data",
    +                    "offset": 4,
    +                    "size": 12
    +                  },
    +                  "DAC1_DH": {
    +                    "description": "DAC1 12-bit left-aligned\n              data",
    +                    "offset": 20,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DACC_R8DH": {
    +              "description": "DAC concurrent mode 8-bit right aligned data holding\n          register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DAC0_DH": {
    +                    "description": "DAC0 8-bit right-aligned\n              data",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "DAC1_DH": {
    +                    "description": "DAC1 8-bit right-aligned\n              data",
    +                    "offset": 8,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "DAC0_DO": {
    +              "description": "DAC0 data output register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DAC0_DO": {
    +                    "description": "DAC0 data output",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DAC1_DO": {
    +              "description": "DAC1 data output register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DAC1_DO": {
    +                    "description": "DAC1 data output",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "DBG": {
    +        "description": "Debug support",
    +        "children": {
    +          "registers": {
    +            "ID": {
    +              "description": "ID code register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ID_CODE": {
    +                    "description": "DBG ID code register",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CTL": {
    +              "description": "Control register 0",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SLP_HOLD": {
    +                    "description": "Sleep mode hold register",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DSLP_HOLD": {
    +                    "description": "Deep-sleep mode hold register",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STB_HOLD": {
    +                    "description": "Standby mode hold register",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FWDGT_HOLD": {
    +                    "description": "FWDGT hold bit",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "WWDGT_HOLD": {
    +                    "description": "WWDGT hold bit",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TIMER0_HOLD": {
    +                    "description": "TIMER 0 hold bit",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TIMER1_HOLD": {
    +                    "description": "TIMER 1 hold bit",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TIMER2_HOLD": {
    +                    "description": "TIMER 2 hold bit",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TIMER3_HOLD": {
    +                    "description": "TIMER 23 hold bit",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CAN0_HOLD": {
    +                    "description": "CAN0 hold bit",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "I2C0_HOLD": {
    +                    "description": "I2C0 hold bit",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "I2C1_HOLD": {
    +                    "description": "I2C1 hold bit",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TIMER4_HOLD": {
    +                    "description": "TIMER4_HOLD",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TIMER5_HOLD": {
    +                    "description": "TIMER 5 hold bit",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "TIMER6_HOLD": {
    +                    "description": "TIMER 6 hold bit",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CAN1_HOLD": {
    +                    "description": "CAN1 hold bit",
    +                    "offset": 21,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "DMA0": {
    +        "description": "DMA controller",
    +        "children": {
    +          "registers": {
    +            "INTF": {
    +              "description": "Interrupt flag register ",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "GIF0": {
    +                    "description": "Global interrupt flag of channel 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FTFIF0": {
    +                    "description": "Full Transfer finish flag of channe 0",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTFIF0": {
    +                    "description": "Half transfer finish flag of channel 0",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ERRIF0": {
    +                    "description": "Error flag of channel 0",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GIF1": {
    +                    "description": "Global interrupt flag of channel 1",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FTFIF1": {
    +                    "description": "Full Transfer finish flag of channe 1",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "HTFIF1": {
    +                    "description": "Half transfer finish flag of channel 1",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ERRIF1": {
    +                    "description": "Error flag of channel 1",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GIF2": {
    +                    "description": "Global interrupt flag of channel 2",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FTFIF2": {
    +                    "description": "Full Transfer finish flag of channe 2",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "HTFIF2": {
    +                    "description": "Half transfer finish flag of channel 2",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ERRIF2": {
    +                    "description": "Error flag of channel 2",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GIF3": {
    +                    "description": "Global interrupt flag of channel 3",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FTFIF3": {
    +                    "description": "Full Transfer finish flag of channe 3",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "HTFIF3": {
    +                    "description": "Half transfer finish flag of channel 3",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ERRIF3": {
    +                    "description": "Error flag of channel 3",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GIF4": {
    +                    "description": "Global interrupt flag of channel 4",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FTFIF4": {
    +                    "description": "Full Transfer finish flag of channe 4",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "HTFIF4": {
    +                    "description": "Half transfer finish flag of channel 4",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "ERRIF4": {
    +                    "description": "Error flag of channel 4",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GIF5": {
    +                    "description": "Global interrupt flag of channel 5",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FTFIF5": {
    +                    "description": "Full Transfer finish flag of channe 5",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "HTFIF5": {
    +                    "description": "Half transfer finish flag of channel 5",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "ERRIF5": {
    +                    "description": "Error flag of channel 5",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GIF6": {
    +                    "description": "Global interrupt flag of channel 6",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FTFIF6": {
    +                    "description": "Full Transfer finish flag of channe 6",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "HTFIF6": {
    +                    "description": "Half transfer finish flag of channel 6",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "ERRIF6": {
    +                    "description": "Error flag of channel 6",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTC": {
    +              "description": "Interrupt flag clear register ",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "GIFC0": {
    +                    "description": "Clear global interrupt flag of channel 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FTFIFC0": {
    +                    "description": "Clear bit for full transfer finish flag of channel 0",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTFIFC0": {
    +                    "description": "Clear bit for half transfer finish flag of channel 0",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ERRIFC0": {
    +                    "description": "Clear bit for error flag of channel 0",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GIFC1": {
    +                    "description": "Clear global interrupt flag of channel 1",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FTFIFC1": {
    +                    "description": "Clear bit for full transfer finish flag of channel 1",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "HTFIFC1": {
    +                    "description": "Clear bit for half transfer finish flag of channel 1",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ERRIFC1": {
    +                    "description": "Clear bit for error flag of channel 1",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GIFC2": {
    +                    "description": "Clear global interrupt flag of channel 2",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FTFIFC2": {
    +                    "description": "Clear bit for full transfer finish flag of channel 2",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "HTFIFC2": {
    +                    "description": "Clear bit for half transfer finish flag of channel 2",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ERRIFC2": {
    +                    "description": "Clear bit for error flag of channel 2",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GIFC3": {
    +                    "description": "Clear global interrupt flag of channel 3",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FTFIFC3": {
    +                    "description": "Clear bit for full transfer finish flag of channel 3",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "HTFIFC3": {
    +                    "description": "Clear bit for half transfer finish flag of channel 3",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ERRIFC3": {
    +                    "description": "Clear bit for error flag of channel 3",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GIFC4": {
    +                    "description": "Clear global interrupt flag of channel 4",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FTFIFC4": {
    +                    "description": "Clear bit for full transfer finish flag of channel 4",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "HTFIFC4": {
    +                    "description": "Clear bit for half transfer finish flag of channel 4",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "ERRIFC4": {
    +                    "description": "Clear bit for error flag of channel 4",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GIFC5": {
    +                    "description": "Clear global interrupt flag of channel 5",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FTFIFC5": {
    +                    "description": "Clear bit for full transfer finish flag of channel 5",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "HTFIFC5": {
    +                    "description": "Clear bit for half transfer finish flag of channel 5",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "ERRIFC5": {
    +                    "description": "Clear bit for error flag of channel 5",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GIFC6": {
    +                    "description": "Clear global interrupt flag of channel 6",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FTFIFC6": {
    +                    "description": "Clear bit for full transfer finish flag of channel 6",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "HTFIFC6": {
    +                    "description": "Clear bit for half transfer finish flag of channel 6",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "ERRIFC6": {
    +                    "description": "Clear bit for error flag of channel 6",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH0CTL": {
    +              "description": "Channel 0 control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHEN": {
    +                    "description": "Channel enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FTFIE": {
    +                    "description": "Enable bit for channel full transfer finish interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTFIE": {
    +                    "description": "Enable bit for channel half transfer finish interrupt",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "Enable bit for channel error interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Transfer direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CMEN": {
    +                    "description": "Circular mode enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PNAGA": {
    +                    "description": "Next address generation algorithm of peripheral",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MNAGA": {
    +                    "description": "Next address generation algorithm of memory",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PWIDTH": {
    +                    "description": "Transfer data size of peripheral",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MWIDTH": {
    +                    "description": "Transfer data size of memory",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PRIO": {
    +                    "description": "Priority level",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "M2M": {
    +                    "description": "Memory to Memory Mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH0CNT": {
    +              "description": "Channel 0 counter register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "Transfer counter",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH0PADDR": {
    +              "description": "Channel 0 peripheral base address register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PADDR": {
    +                    "description": "Peripheral base address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CH0MADDR": {
    +              "description": "Channel 0 memory base address register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MADDR": {
    +                    "description": "Memory base address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CH1CTL": {
    +              "description": "Channel 1 control register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHEN": {
    +                    "description": "Channel enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FTFIE": {
    +                    "description": "Enable bit for channel full transfer finish interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTFIE": {
    +                    "description": "Enable bit for channel half transfer finish interrupt",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "Enable bit for channel error interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Transfer direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CMEN": {
    +                    "description": "Circular mode enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PNAGA": {
    +                    "description": "Next address generation algorithm of peripheral",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MNAGA": {
    +                    "description": "Next address generation algorithm of memory",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PWIDTH": {
    +                    "description": "Transfer data size of peripheral",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MWIDTH": {
    +                    "description": "Transfer data size of memory",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PRIO": {
    +                    "description": "Priority level",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "M2M": {
    +                    "description": "Memory to Memory Mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH1CNT": {
    +              "description": "Channel 1 counter register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "Transfer counter",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH1PADDR": {
    +              "description": "Channel 1 peripheral base address register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PADDR": {
    +                    "description": "Peripheral base address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CH1MADDR": {
    +              "description": "Channel 1 memory base address register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MADDR": {
    +                    "description": "Memory base address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CH2CTL": {
    +              "description": "Channel 2 control register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHEN": {
    +                    "description": "Channel enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FTFIE": {
    +                    "description": "Enable bit for channel full transfer finish interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTFIE": {
    +                    "description": "Enable bit for channel half transfer finish interrupt",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "Enable bit for channel error interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Transfer direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CMEN": {
    +                    "description": "Circular mode enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PNAGA": {
    +                    "description": "Next address generation algorithm of peripheral",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MNAGA": {
    +                    "description": "Next address generation algorithm of memory",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PWIDTH": {
    +                    "description": "Transfer data size of peripheral",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MWIDTH": {
    +                    "description": "Transfer data size of memory",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PRIO": {
    +                    "description": "Priority level",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "M2M": {
    +                    "description": "Memory to Memory Mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH2CNT": {
    +              "description": "Channel 2 counter register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "Transfer counter",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH2PADDR": {
    +              "description": "Channel 2 peripheral base address register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PADDR": {
    +                    "description": "Peripheral base address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CH2MADDR": {
    +              "description": "Channel 2 memory base address register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MADDR": {
    +                    "description": "Memory base address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CH3CTL": {
    +              "description": "Channel 3 control register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHEN": {
    +                    "description": "Channel enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FTFIE": {
    +                    "description": "Enable bit for channel full transfer finish interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTFIE": {
    +                    "description": "Enable bit for channel half transfer finish interrupt",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "Enable bit for channel error interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Transfer direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CMEN": {
    +                    "description": "Circular mode enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PNAGA": {
    +                    "description": "Next address generation algorithm of peripheral",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MNAGA": {
    +                    "description": "Next address generation algorithm of memory",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PWIDTH": {
    +                    "description": "Transfer data size of peripheral",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MWIDTH": {
    +                    "description": "Transfer data size of memory",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PRIO": {
    +                    "description": "Priority level",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "M2M": {
    +                    "description": "Memory to Memory Mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH3CNT": {
    +              "description": "Channel 3 counter register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "Transfer counter",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH3PADDR": {
    +              "description": "Channel 3 peripheral base address register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PADDR": {
    +                    "description": "Peripheral base address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CH3MADDR": {
    +              "description": "Channel 3 memory base address register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MADDR": {
    +                    "description": "Memory base address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CH4CTL": {
    +              "description": "Channel 4 control register",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHEN": {
    +                    "description": "Channel enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FTFIE": {
    +                    "description": "Enable bit for channel full transfer finish interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTFIE": {
    +                    "description": "Enable bit for channel half transfer finish interrupt",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "Enable bit for channel error interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Transfer direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CMEN": {
    +                    "description": "Circular mode enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PNAGA": {
    +                    "description": "Next address generation algorithm of peripheral",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MNAGA": {
    +                    "description": "Next address generation algorithm of memory",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PWIDTH": {
    +                    "description": "Transfer data size of peripheral",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MWIDTH": {
    +                    "description": "Transfer data size of memory",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PRIO": {
    +                    "description": "Priority level",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "M2M": {
    +                    "description": "Memory to Memory Mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH4CNT": {
    +              "description": "Channel 4 counter register",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "Transfer counter",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH4PADDR": {
    +              "description": "Channel 4 peripheral base address register",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PADDR": {
    +                    "description": "Peripheral base address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CH4MADDR": {
    +              "description": "Channel 4 memory base address register",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MADDR": {
    +                    "description": "Memory base address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CH5CTL": {
    +              "description": "Channel 5 control register",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHEN": {
    +                    "description": "Channel enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FTFIE": {
    +                    "description": "Enable bit for channel full transfer finish interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTFIE": {
    +                    "description": "Enable bit for channel half transfer finish interrupt",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "Enable bit for channel error interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Transfer direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CMEN": {
    +                    "description": "Circular mode enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PNAGA": {
    +                    "description": "Next address generation algorithm of peripheral",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MNAGA": {
    +                    "description": "Next address generation algorithm of memory",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PWIDTH": {
    +                    "description": "Transfer data size of peripheral",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MWIDTH": {
    +                    "description": "Transfer data size of memory",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PRIO": {
    +                    "description": "Priority level",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "M2M": {
    +                    "description": "Memory to Memory Mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH5CNT": {
    +              "description": "Channel 5 counter register",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "Transfer counter",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH5PADDR": {
    +              "description": "Channel 5 peripheral base address register",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PADDR": {
    +                    "description": "Peripheral base address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CH5MADDR": {
    +              "description": "Channel 5 memory base address register",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MADDR": {
    +                    "description": "Memory base address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CH6CTL": {
    +              "description": "Channel 6 control register",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHEN": {
    +                    "description": "Channel enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FTFIE": {
    +                    "description": "Enable bit for channel full transfer finish interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTFIE": {
    +                    "description": "Enable bit for channel half transfer finish interrupt",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "Enable bit for channel error interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Transfer direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CMEN": {
    +                    "description": "Circular mode enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PNAGA": {
    +                    "description": "Next address generation algorithm of peripheral",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MNAGA": {
    +                    "description": "Next address generation algorithm of memory",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PWIDTH": {
    +                    "description": "Transfer data size of peripheral",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MWIDTH": {
    +                    "description": "Transfer data size of memory",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PRIO": {
    +                    "description": "Priority level",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "M2M": {
    +                    "description": "Memory to Memory Mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH6CNT": {
    +              "description": "Channel 6 counter register",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "Transfer counter",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH6PADDR": {
    +              "description": "Channel 6 peripheral base address register",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PADDR": {
    +                    "description": "Peripheral base address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CH6MADDR": {
    +              "description": "Channel 6 memory base address register",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MADDR": {
    +                    "description": "Memory base address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "DMA1": {
    +        "description": "Direct memory access controller",
    +        "children": {
    +          "registers": {
    +            "INTF": {
    +              "description": "Interrupt flag register ",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "GIF0": {
    +                    "description": "Global interrupt flag of channel 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FTFIF0": {
    +                    "description": "Full Transfer finish flag of channe 0",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTFIF0": {
    +                    "description": "Half transfer finish flag of channel 0",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ERRIF0": {
    +                    "description": "Error flag of channel 0",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GIF1": {
    +                    "description": "Global interrupt flag of channel 1",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FTFIF1": {
    +                    "description": "Full Transfer finish flag of channe 1",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "HTFIF1": {
    +                    "description": "Half transfer finish flag of channel 1",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ERRIF1": {
    +                    "description": "Error flag of channel 1",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GIF2": {
    +                    "description": "Global interrupt flag of channel 2",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FTFIF2": {
    +                    "description": "Full Transfer finish flag of channe 2",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "HTFIF2": {
    +                    "description": "Half transfer finish flag of channel 2",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ERRIF2": {
    +                    "description": "Error flag of channel 2",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GIF3": {
    +                    "description": "Global interrupt flag of channel 3",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FTFIF3": {
    +                    "description": "Full Transfer finish flag of channe 3",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "HTFIF3": {
    +                    "description": "Half transfer finish flag of channel 3",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ERRIF3": {
    +                    "description": "Error flag of channel 3",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GIF4": {
    +                    "description": "Global interrupt flag of channel 4",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FTFIF4": {
    +                    "description": "Full Transfer finish flag of channe 4",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "HTFIF4": {
    +                    "description": "Half transfer finish flag of channel 4",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "ERRIF4": {
    +                    "description": "Error flag of channel 4",
    +                    "offset": 19,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTC": {
    +              "description": "Interrupt flag clear register ",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "GIFC0": {
    +                    "description": "Clear global interrupt flag of channel 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FTFIFC0": {
    +                    "description": "Clear bit for full transfer finish flag of channel 0",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTFIFC0": {
    +                    "description": "Clear bit for half transfer finish flag of channel 0",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ERRIFC0": {
    +                    "description": "Clear bit for error flag of channel 0",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GIFC1": {
    +                    "description": "Clear global interrupt flag of channel 1",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FTFIFC1": {
    +                    "description": "Clear bit for full transfer finish flag of channel 1",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "HTFIFC1": {
    +                    "description": "Clear bit for half transfer finish flag of channel 1",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ERRIFC1": {
    +                    "description": "Clear bit for error flag of channel 1",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GIFC2": {
    +                    "description": "Clear global interrupt flag of channel 2",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FTFIFC2": {
    +                    "description": "Clear bit for full transfer finish flag of channel 2",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "HTFIFC2": {
    +                    "description": "Clear bit for half transfer finish flag of channel 2",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ERRIFC2": {
    +                    "description": "Clear bit for error flag of channel 2",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GIFC3": {
    +                    "description": "Clear global interrupt flag of channel 3",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FTFIFC3": {
    +                    "description": "Clear bit for full transfer finish flag of channel 3",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "HTFIFC3": {
    +                    "description": "Clear bit for half transfer finish flag of channel 3",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ERRIFC3": {
    +                    "description": "Clear bit for error flag of channel 3",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GIFC4": {
    +                    "description": "Clear global interrupt flag of channel 4",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FTFIFC4": {
    +                    "description": "Clear bit for full transfer finish flag of channel 4",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "HTFIFC4": {
    +                    "description": "Clear bit for half transfer finish flag of channel 4",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "ERRIFC4": {
    +                    "description": "Clear bit for error flag of channel 4",
    +                    "offset": 19,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH0CTL": {
    +              "description": "Channel 0 control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHEN": {
    +                    "description": "Channel enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FTFIE": {
    +                    "description": "Enable bit for channel full transfer finish interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTFIE": {
    +                    "description": "Enable bit for channel half transfer finish interrupt",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "Enable bit for channel error interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Transfer direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CMEN": {
    +                    "description": "Circular mode enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PNAGA": {
    +                    "description": "Next address generation algorithm of peripheral",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MNAGA": {
    +                    "description": "Next address generation algorithm of memory",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PWIDTH": {
    +                    "description": "Transfer data size of peripheral",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MWIDTH": {
    +                    "description": "Transfer data size of memory",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PRIO": {
    +                    "description": "Priority level",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "M2M": {
    +                    "description": "Memory to Memory Mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH0CNT": {
    +              "description": "Channel 0 counter register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "Transfer counter",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH0PADDR": {
    +              "description": "Channel 0 peripheral base address register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PADDR": {
    +                    "description": "Peripheral base address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CH0MADDR": {
    +              "description": "Channel 0 memory base address register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MADDR": {
    +                    "description": "Memory base address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CH1CTL": {
    +              "description": "Channel 1 control register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHEN": {
    +                    "description": "Channel enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FTFIE": {
    +                    "description": "Enable bit for channel full transfer finish interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTFIE": {
    +                    "description": "Enable bit for channel half transfer finish interrupt",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "Enable bit for channel error interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Transfer direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CMEN": {
    +                    "description": "Circular mode enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PNAGA": {
    +                    "description": "Next address generation algorithm of peripheral",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MNAGA": {
    +                    "description": "Next address generation algorithm of memory",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PWIDTH": {
    +                    "description": "Transfer data size of peripheral",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MWIDTH": {
    +                    "description": "Transfer data size of memory",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PRIO": {
    +                    "description": "Priority level",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "M2M": {
    +                    "description": "Memory to Memory Mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH1CNT": {
    +              "description": "Channel 1 counter register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "Transfer counter",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH1PADDR": {
    +              "description": "Channel 1 peripheral base address register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PADDR": {
    +                    "description": "Peripheral base address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CH1MADDR": {
    +              "description": "Channel 1 memory base address register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MADDR": {
    +                    "description": "Memory base address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CH2CTL": {
    +              "description": "Channel 2 control register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHEN": {
    +                    "description": "Channel enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FTFIE": {
    +                    "description": "Enable bit for channel full transfer finish interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTFIE": {
    +                    "description": "Enable bit for channel half transfer finish interrupt",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "Enable bit for channel error interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Transfer direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CMEN": {
    +                    "description": "Circular mode enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PNAGA": {
    +                    "description": "Next address generation algorithm of peripheral",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MNAGA": {
    +                    "description": "Next address generation algorithm of memory",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PWIDTH": {
    +                    "description": "Transfer data size of peripheral",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MWIDTH": {
    +                    "description": "Transfer data size of memory",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PRIO": {
    +                    "description": "Priority level",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "M2M": {
    +                    "description": "Memory to Memory Mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH2CNT": {
    +              "description": "Channel 2 counter register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "Transfer counter",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH2PADDR": {
    +              "description": "Channel 2 peripheral base address register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PADDR": {
    +                    "description": "Peripheral base address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CH2MADDR": {
    +              "description": "Channel 2 memory base address register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MADDR": {
    +                    "description": "Memory base address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CH3CTL": {
    +              "description": "Channel 3 control register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHEN": {
    +                    "description": "Channel enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FTFIE": {
    +                    "description": "Enable bit for channel full transfer finish interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTFIE": {
    +                    "description": "Enable bit for channel half transfer finish interrupt",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "Enable bit for channel error interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Transfer direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CMEN": {
    +                    "description": "Circular mode enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PNAGA": {
    +                    "description": "Next address generation algorithm of peripheral",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MNAGA": {
    +                    "description": "Next address generation algorithm of memory",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PWIDTH": {
    +                    "description": "Transfer data size of peripheral",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MWIDTH": {
    +                    "description": "Transfer data size of memory",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PRIO": {
    +                    "description": "Priority level",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "M2M": {
    +                    "description": "Memory to Memory Mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH3CNT": {
    +              "description": "Channel 3 counter register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "Transfer counter",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH3PADDR": {
    +              "description": "Channel 3 peripheral base address register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PADDR": {
    +                    "description": "Peripheral base address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CH3MADDR": {
    +              "description": "Channel 3 memory base address register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MADDR": {
    +                    "description": "Memory base address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CH4CTL": {
    +              "description": "Channel 4 control register",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHEN": {
    +                    "description": "Channel enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FTFIE": {
    +                    "description": "Enable bit for channel full transfer finish interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HTFIE": {
    +                    "description": "Enable bit for channel half transfer finish interrupt",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "Enable bit for channel error interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DIR": {
    +                    "description": "Transfer direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CMEN": {
    +                    "description": "Circular mode enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PNAGA": {
    +                    "description": "Next address generation algorithm of peripheral",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MNAGA": {
    +                    "description": "Next address generation algorithm of memory",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PWIDTH": {
    +                    "description": "Transfer data size of peripheral",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "MWIDTH": {
    +                    "description": "Transfer data size of memory",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "PRIO": {
    +                    "description": "Priority level",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "M2M": {
    +                    "description": "Memory to Memory Mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH4CNT": {
    +              "description": "Channel 4 counter register",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "Transfer counter",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH4PADDR": {
    +              "description": "Channel 4 peripheral base address register",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PADDR": {
    +                    "description": "Peripheral base address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CH4MADDR": {
    +              "description": "Channel 4 memory base address register",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MADDR": {
    +                    "description": "Memory base address",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "EXMC": {
    +        "description": "External memory controller",
    +        "children": {
    +          "registers": {
    +            "SNCTL0": {
    +              "description": "SRAM/NOR flash control register 0",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 12506,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ASYNCWAIT": {
    +                    "description": "Asynchronous wait",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "NRWTEN": {
    +                    "description": "NWAIT signal enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "WREN": {
    +                    "description": "Write enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "NRWTPOL": {
    +                    "description": "NWAIT signal polarity",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "NREN": {
    +                    "description": "NOR Flash access enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "NRW": {
    +                    "description": "NOR bank memory data bus width",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "NRTP": {
    +                    "description": "NOR bank memory type",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "NRMUX": {
    +                    "description": "NOR bank memory address/data multiplexing",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "NRBKEN": {
    +                    "description": "NOR bank enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SNTCFG0": {
    +              "description": "SRAM/NOR flash timing configuration register 0",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 268435455,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUSLAT": {
    +                    "description": "Bus latency",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "DSET": {
    +                    "description": "Data setup time",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "AHLD": {
    +                    "description": "Address hold time",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "ASET": {
    +                    "description": "Address setup time",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "SNCTL1": {
    +              "description": "SRAM/NOR flash control register 1",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 12506,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ASYNCWAIT": {
    +                    "description": "Asynchronous wait",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "NRWTEN": {
    +                    "description": "NWAIT signal enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "WREN": {
    +                    "description": "Write enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "NRWTPOL": {
    +                    "description": "NWAIT signal polarity",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "NREN": {
    +                    "description": "NOR Flash access enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "NRW": {
    +                    "description": "NOR bank memory data bus width",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "NRTP": {
    +                    "description": "NOR bank memory type",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "NRMUX": {
    +                    "description": "NOR bank memory address/data multiplexing",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "NRBKEN": {
    +                    "description": "NOR bank enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "EXTI": {
    +        "description": "External interrupt/event\n      controller",
    +        "children": {
    +          "registers": {
    +            "INTEN": {
    +              "description": "Interrupt enable register\n          (EXTI_INTEN)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INTEN0": {
    +                    "description": "Enable Interrupt on line 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "INTEN1": {
    +                    "description": "Enable Interrupt on line 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "INTEN2": {
    +                    "description": "Enable Interrupt on line 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "INTEN3": {
    +                    "description": "Enable Interrupt on line 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "INTEN4": {
    +                    "description": "Enable Interrupt on line 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "INTEN5": {
    +                    "description": "Enable Interrupt on line 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INTEN6": {
    +                    "description": "Enable Interrupt on line 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "INTEN7": {
    +                    "description": "Enable Interrupt on line 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "INTEN8": {
    +                    "description": "Enable Interrupt on line 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "INTEN9": {
    +                    "description": "Enable Interrupt on line 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "INTEN10": {
    +                    "description": "Enable Interrupt on line 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "INTEN11": {
    +                    "description": "Enable Interrupt on line 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "INTEN12": {
    +                    "description": "Enable Interrupt on line 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "INTEN13": {
    +                    "description": "Enable Interrupt on line 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "INTEN14": {
    +                    "description": "Enable Interrupt on line 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "INTEN15": {
    +                    "description": "Enable Interrupt on line 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "INTEN16": {
    +                    "description": "Enable Interrupt on line 16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "INTEN17": {
    +                    "description": "Enable Interrupt on line 17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTEN18": {
    +                    "description": "Enable Interrupt on line 18",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EVEN": {
    +              "description": "Event enable register (EXTI_EVEN)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EVEN0": {
    +                    "description": "Enable Event on line 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EVEN1": {
    +                    "description": "Enable Event on line 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EVEN2": {
    +                    "description": "Enable Event on line 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EVEN3": {
    +                    "description": "Enable Event on line 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EVEN4": {
    +                    "description": "Enable Event on line 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EVEN5": {
    +                    "description": "Enable Event on line 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "EVEN6": {
    +                    "description": "Enable Event on line 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EVEN7": {
    +                    "description": "Enable Event on line 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EVEN8": {
    +                    "description": "Enable Event on line 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EVEN9": {
    +                    "description": "Enable Event on line 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EVEN10": {
    +                    "description": "Enable Event on line 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EVEN11": {
    +                    "description": "Enable Event on line 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "EVEN12": {
    +                    "description": "Enable Event on line 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "EVEN13": {
    +                    "description": "Enable Event on line 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EVEN14": {
    +                    "description": "Enable Event on line 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EVEN15": {
    +                    "description": "Enable Event on line 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EVEN16": {
    +                    "description": "Enable Event on line 16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EVEN17": {
    +                    "description": "Enable Event on line 17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EVEN18": {
    +                    "description": "Enable Event on line 18",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RTEN": {
    +              "description": "Rising Edge Trigger Enable register\n          (EXTI_RTEN)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTEN0": {
    +                    "description": "Rising edge trigger enable of\n              line 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RTEN1": {
    +                    "description": "Rising edge trigger enable of\n              line 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RTEN2": {
    +                    "description": "Rising edge trigger enable of\n              line 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTEN3": {
    +                    "description": "Rising edge trigger enable of\n              line 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RTEN4": {
    +                    "description": "Rising edge trigger enable of\n              line 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RTEN5": {
    +                    "description": "Rising edge trigger enable of\n              line 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RTEN6": {
    +                    "description": "Rising edge trigger enable of\n              line 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RTEN7": {
    +                    "description": "Rising edge trigger enable of\n              line 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RTEN8": {
    +                    "description": "Rising edge trigger enable of\n              line 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "RTEN9": {
    +                    "description": "Rising edge trigger enable of\n              line 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RTEN10": {
    +                    "description": "Rising edge trigger enable of\n              line 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "RTEN11": {
    +                    "description": "Rising edge trigger enable of\n              line 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "RTEN12": {
    +                    "description": "Rising edge trigger enable of\n              line 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "RTEN13": {
    +                    "description": "Rising edge trigger enable of\n              line 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RTEN14": {
    +                    "description": "Rising edge trigger enable of\n              line 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "RTEN15": {
    +                    "description": "Rising edge trigger enable of\n              line 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "RTEN16": {
    +                    "description": "Rising edge trigger enable of\n              line 16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RTEN17": {
    +                    "description": "Rising edge trigger enable of\n              line 17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "RTEN18": {
    +                    "description": "Rising edge trigger enable of\n              line 18",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FTEN": {
    +              "description": "Falling Egde Trigger Enable register\n          (EXTI_FTEN)",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FTEN0": {
    +                    "description": "Falling edge trigger enable of\n              line 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FTEN1": {
    +                    "description": "Falling edge trigger enable of\n              line 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FTEN2": {
    +                    "description": "Falling edge trigger enable of\n              line 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FTEN3": {
    +                    "description": "Falling edge trigger enable of\n              line 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FTEN4": {
    +                    "description": "Falling edge trigger enable of\n              line 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FTEN5": {
    +                    "description": "Falling edge trigger enable of\n              line 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FTEN6": {
    +                    "description": "Falling edge trigger enable of\n              line 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FTEN7": {
    +                    "description": "Falling edge trigger enable of\n              line 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FTEN8": {
    +                    "description": "Falling edge trigger enable of\n              line 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FTEN9": {
    +                    "description": "Falling edge trigger enable of\n              line 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FTEN10": {
    +                    "description": "Falling edge trigger enable of\n              line 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FTEN11": {
    +                    "description": "Falling edge trigger enable of\n              line 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FTEN12": {
    +                    "description": "Falling edge trigger enable of\n              line 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FTEN13": {
    +                    "description": "Falling edge trigger enable of\n              line 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FTEN14": {
    +                    "description": "Falling edge trigger enable of\n              line 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FTEN15": {
    +                    "description": "Falling edge trigger enable of\n              line 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "FTEN16": {
    +                    "description": "Falling edge trigger enable of\n              line 16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FTEN17": {
    +                    "description": "Falling edge trigger enable of\n              line 17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "FTEN18": {
    +                    "description": "Falling edge trigger enable of\n              line 18",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SWIEV": {
    +              "description": "Software interrupt event register\n          (EXTI_SWIEV)",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SWIEV0": {
    +                    "description": "Interrupt/Event software trigger on line\n              0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SWIEV1": {
    +                    "description": "Interrupt/Event software trigger on line\n              1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SWIEV2": {
    +                    "description": "Interrupt/Event software trigger on line\n              2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SWIEV3": {
    +                    "description": "Interrupt/Event software trigger on line\n              3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SWIEV4": {
    +                    "description": "Interrupt/Event software trigger on line\n              4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SWIEV5": {
    +                    "description": "Interrupt/Event software trigger on line\n              5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "SWIEV6": {
    +                    "description": "Interrupt/Event software trigger on line\n              6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SWIEV7": {
    +                    "description": "Interrupt/Event software trigger on line\n              7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SWIEV8": {
    +                    "description": "Interrupt/Event software trigger on line\n              8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SWIEV9": {
    +                    "description": "Interrupt/Event software trigger on line\n              9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SWIEV10": {
    +                    "description": "Interrupt/Event software trigger on line\n              10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SWIEV11": {
    +                    "description": "Interrupt/Event software trigger on line\n              11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SWIEV12": {
    +                    "description": "Interrupt/Event software trigger on line\n              12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "SWIEV13": {
    +                    "description": "Interrupt/Event software trigger on line\n              13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "SWIEV14": {
    +                    "description": "Interrupt/Event software trigger on line\n              14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SWIEV15": {
    +                    "description": "Interrupt/Event software trigger on line\n              15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "SWIEV16": {
    +                    "description": "Interrupt/Event software trigger on line\n              16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SWIEV17": {
    +                    "description": "Interrupt/Event software trigger on line\n              17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "SWIEV18": {
    +                    "description": "Interrupt/Event software trigger on line\n              18",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PD": {
    +              "description": "Pending register (EXTI_PD)",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PD0": {
    +                    "description": "Interrupt pending status of line 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PD1": {
    +                    "description": "Interrupt pending status of line 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PD2": {
    +                    "description": "Interrupt pending status of line 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PD3": {
    +                    "description": "Interrupt pending status of line 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PD4": {
    +                    "description": "Interrupt pending status of line 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "PD5": {
    +                    "description": "Interrupt pending status of line 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PD6": {
    +                    "description": "Interrupt pending status of line 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PD7": {
    +                    "description": "Interrupt pending status of line 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PD8": {
    +                    "description": "Interrupt pending status of line 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PD9": {
    +                    "description": "Interrupt pending status of line 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PD10": {
    +                    "description": "Interrupt pending status of line 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PD11": {
    +                    "description": "Interrupt pending status of line 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "PD12": {
    +                    "description": "Interrupt pending status of line 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "PD13": {
    +                    "description": "Interrupt pending status of line 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "PD14": {
    +                    "description": "Interrupt pending status of line 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PD15": {
    +                    "description": "Interrupt pending status of line 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "PD16": {
    +                    "description": "Interrupt pending status of line 16",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "PD17": {
    +                    "description": "Interrupt pending status of line 17",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "PD18": {
    +                    "description": "Interrupt pending status of line 18",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "FMC": {
    +        "description": "FMC",
    +        "children": {
    +          "registers": {
    +            "WS": {
    +              "description": "wait state counter register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WSCNT": {
    +                    "description": "wait state counter register",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "KEY0": {
    +              "description": "Unlock key register 0",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "KEY": {
    +                    "description": "FMC_CTL0 unlock key",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OBKEY": {
    +              "description": "Option byte unlock key register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "OBKEY": {
    +                    "description": "FMC_ CTL0 option byte operation unlock register",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "STAT0": {
    +              "description": "Status register 0",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENDF": {
    +                    "description": "End of operation flag bit",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "WPERR": {
    +                    "description": "Erase/Program protection error flag bit",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "PGERR": {
    +                    "description": "Program error flag bit",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "BUSY": {
    +                    "description": "The flash is busy bit",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CTL0": {
    +              "description": "Control register 0",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENDIE": {
    +                    "description": "End of operation interrupt enable bit",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "Error interrupt enable bit",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OBWEN": {
    +                    "description": "Option byte erase/program enable bit",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "LK": {
    +                    "description": "FMC_CTL0 lock bit",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "START": {
    +                    "description": "Send erase command to FMC bit",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "OBER": {
    +                    "description": "Option bytes erase command bit",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "OBPG": {
    +                    "description": "Option bytes program command bit",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "MER": {
    +                    "description": "Main flash mass erase for bank0 command bit",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PER": {
    +                    "description": "Main flash page erase for bank0 command bit",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PG": {
    +                    "description": "Main flash program for bank0 command bit",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ADDR0": {
    +              "description": "Address register 0",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "ADDR": {
    +                    "description": "Flash erase/program command address bits",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OBSTAT": {
    +              "description": "Option byte status register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "OBERR": {
    +                    "description": "Option bytes read error bit",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SPC": {
    +                    "description": "Option bytes security protection code",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "USER": {
    +                    "description": "Store USER of option bytes block after system reset",
    +                    "offset": 2,
    +                    "size": 8
    +                  },
    +                  "DATA": {
    +                    "description": "Store DATA[15:0] of option bytes block after system reset",
    +                    "offset": 10,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "WP": {
    +              "description": "Erase/Program Protection register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "WP": {
    +                    "description": "Store WP[31:0] of option bytes block after system reset",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PID": {
    +              "description": "Product ID register",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "PID": {
    +                    "description": "Product reserved ID code register",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "FWDGT": {
    +        "description": "free watchdog timer",
    +        "children": {
    +          "registers": {
    +            "CTL": {
    +              "description": "Control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "CMD": {
    +                    "description": "Key value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "Prescaler register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Free watchdog timer prescaler selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "RLD": {
    +              "description": "Reload register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 4095,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RLD": {
    +                    "description": "Free watchdog timer counter reload value",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "STAT": {
    +              "description": "Status register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "PUD": {
    +                    "description": "Free watchdog timer prescaler value update",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RUD": {
    +                    "description": "Free watchdog timer counter reload value update",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "GPIOA": {
    +        "description": "General-purpose I/Os",
    +        "children": {
    +          "registers": {
    +            "CTL0": {
    +              "description": "port control register 0",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 1145324612,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTL7": {
    +                    "description": "Port x configuration bits (x =\n              7)",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "MD7": {
    +                    "description": "Port x mode bits (x =\n              7)",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "CTL6": {
    +                    "description": "Port x configuration bits (x =\n              6)",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "MD6": {
    +                    "description": "Port x mode bits (x =\n              6)",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "CTL5": {
    +                    "description": "Port x configuration bits (x =\n              5)",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "MD5": {
    +                    "description": "Port x mode bits (x =\n              5)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "CTL4": {
    +                    "description": "Port x configuration bits (x =\n              4)",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MD4": {
    +                    "description": "Port x mode bits (x =\n              4)",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "CTL3": {
    +                    "description": "Port x configuration bits (x =\n              3)",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "MD3": {
    +                    "description": "Port x mode bits (x =\n             3 )",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "CTL2": {
    +                    "description": "Port x configuration bits (x =\n              2)",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "MD2": {
    +                    "description": "Port x mode bits (x =\n             2 )",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "CTL1": {
    +                    "description": "Port x configuration bits (x =\n              1)",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "MD1": {
    +                    "description": "Port x mode bits (x =\n              1)",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "CTL0": {
    +                    "description": "Port x configuration bits (x =\n              0)",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MD0": {
    +                    "description": "Port x mode bits (x =\n              0)",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CTL1": {
    +              "description": "port control register 1",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 1145324612,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTL15": {
    +                    "description": "Port x configuration bits (x =\n              15)",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "MD15": {
    +                    "description": "Port x mode bits (x =\n              15)",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "CTL14": {
    +                    "description": "Port x configuration bits (x =\n              14)",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "MD14": {
    +                    "description": "Port x mode bits (x =\n              14)",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "CTL13": {
    +                    "description": "Port x configuration bits (x =\n              13)",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "MD13": {
    +                    "description": "Port x mode bits (x =\n              13)",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "CTL12": {
    +                    "description": "Port x configuration bits (x =\n              12)",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "MD12": {
    +                    "description": "Port x mode bits (x =\n              12)",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "CTL11": {
    +                    "description": "Port x configuration bits (x =\n              11)",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "MD11": {
    +                    "description": "Port x mode bits (x =\n             11 )",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "CTL10": {
    +                    "description": "Port x configuration bits (x =\n              10)",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "MD10": {
    +                    "description": "Port x mode bits (x =\n             10 )",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "CTL9": {
    +                    "description": "Port x configuration bits (x =\n              9)",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "MD9": {
    +                    "description": "Port x mode bits (x =\n              9)",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "CTL8": {
    +                    "description": "Port x configuration bits (x =\n              8)",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "MD8": {
    +                    "description": "Port x mode bits (x =\n              8)",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "ISTAT": {
    +              "description": "Port input status register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "ISTAT15": {
    +                    "description": "Port input status",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ISTAT14": {
    +                    "description": "Port input status",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ISTAT13": {
    +                    "description": "Port input status",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ISTAT12": {
    +                    "description": "Port input status",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ISTAT11": {
    +                    "description": "Port input status",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ISTAT10": {
    +                    "description": "Port input status",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ISTAT9": {
    +                    "description": "Port input status",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ISTAT8": {
    +                    "description": "Port input status",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ISTAT7": {
    +                    "description": "Port input status",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ISTAT6": {
    +                    "description": "Port input status",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ISTAT5": {
    +                    "description": "Port input status",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ISTAT4": {
    +                    "description": "Port input status",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ISTAT3": {
    +                    "description": "Port input status",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ISTAT2": {
    +                    "description": "Port input status",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ISTAT1": {
    +                    "description": "Port input status",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ISTAT0": {
    +                    "description": "Port input status",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OCTL": {
    +              "description": "Port output control register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OCTL15": {
    +                    "description": "Port output control",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OCTL14": {
    +                    "description": "Port output control",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "OCTL13": {
    +                    "description": "Port output control",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "OCTL12": {
    +                    "description": "Port output control",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "OCTL11": {
    +                    "description": "Port output control",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OCTL10": {
    +                    "description": "Port output control",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OCTL9": {
    +                    "description": "Port output control",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "OCTL8": {
    +                    "description": "Port output control",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "OCTL7": {
    +                    "description": "Port output control",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OCTL6": {
    +                    "description": "Port output control",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "OCTL5": {
    +                    "description": "Port output control",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "OCTL4": {
    +                    "description": "Port output control",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "OCTL3": {
    +                    "description": "Port output control",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OCTL2": {
    +                    "description": "Port output control",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OCTL1": {
    +                    "description": "Port output control",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OCTL0": {
    +                    "description": "Port output control",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BOP": {
    +              "description": "Port bit operate register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "CR15": {
    +                    "description": "Port 15 Clear bit",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "CR14": {
    +                    "description": "Port 14 Clear bit",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CR13": {
    +                    "description": "Port 13 Clear bit",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CR12": {
    +                    "description": "Port 12 Clear bit",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "CR11": {
    +                    "description": "Port 11 Clear bit",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "CR10": {
    +                    "description": "Port 10 Clear bit",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "CR9": {
    +                    "description": "Port 9 Clear bit",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "CR8": {
    +                    "description": "Port 8 Clear bit",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "CR7": {
    +                    "description": "Port 7 Clear bit",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "CR6": {
    +                    "description": "Port 6 Clear bit",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "CR5": {
    +                    "description": "Port 5 Clear bit",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "CR4": {
    +                    "description": "Port 4 Clear bit",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CR3": {
    +                    "description": "Port 3 Clear bit",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "CR2": {
    +                    "description": "Port 2 Clear bit",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "CR1": {
    +                    "description": "Port 1 Clear bit",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "CR0": {
    +                    "description": "Port 0 Clear bit",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BOP15": {
    +                    "description": "Port 15 Set bit",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "BOP14": {
    +                    "description": "Port 14 Set bit",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "BOP13": {
    +                    "description": "Port 13 Set bit",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BOP12": {
    +                    "description": "Port 12 Set bit",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "BOP11": {
    +                    "description": "Port 11 Set bit",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BOP10": {
    +                    "description": "Port 10 Set bit",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "BOP9": {
    +                    "description": "Port 9 Set bit",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BOP8": {
    +                    "description": "Port 8 Set bit",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BOP7": {
    +                    "description": "Port 7 Set bit",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BOP6": {
    +                    "description": "Port 6 Set bit",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BOP5": {
    +                    "description": "Port 5 Set bit",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "BOP4": {
    +                    "description": "Port 4 Set bit",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BOP3": {
    +                    "description": "Port 3 Set bit",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "BOP2": {
    +                    "description": "Port 2 Set bit",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "BOP1": {
    +                    "description": "Port 1 Set bit",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "BOP0": {
    +                    "description": "Port 0 Set bit",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BC": {
    +              "description": "Port bit clear register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "CR15": {
    +                    "description": "Port 15 Clear bit",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "CR14": {
    +                    "description": "Port 14 Clear bit",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CR13": {
    +                    "description": "Port 13 Clear bit",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CR12": {
    +                    "description": "Port 12 Clear bit",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CR11": {
    +                    "description": "Port 11 Clear bit",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CR10": {
    +                    "description": "Port 10 Clear bit",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CR9": {
    +                    "description": "Port 9 Clear bit",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CR8": {
    +                    "description": "Port 8 Clear bit",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CR7": {
    +                    "description": "Port 7 Clear bit",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CR6": {
    +                    "description": "Port 6 Clear bit",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CR5": {
    +                    "description": "Port 5 Clear bit",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CR4": {
    +                    "description": "Port 4 Clear bit",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CR3": {
    +                    "description": "Port 3 Clear bit",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CR2": {
    +                    "description": "Port 2 Clear bit",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CR1": {
    +                    "description": "Port 1 Clear bit",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CR0": {
    +                    "description": "Port 0 Clear bit",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "LOCK": {
    +              "description": "GPIO port configuration lock\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LKK": {
    +                    "description": "Lock sequence key\n              ",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "LK15": {
    +                    "description": "Port Lock bit 15",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LK14": {
    +                    "description": "Port Lock bit 14",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "LK13": {
    +                    "description": "Port Lock bit 13",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "LK12": {
    +                    "description": "Port Lock bit 12",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "LK11": {
    +                    "description": "Port Lock bit 11",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "LK10": {
    +                    "description": "Port Lock bit 10",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LK9": {
    +                    "description": "Port Lock bit 9",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "LK8": {
    +                    "description": "Port Lock bit 8",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LK7": {
    +                    "description": "Port Lock bit 7",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "LK6": {
    +                    "description": "Port Lock bit 6",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "LK5": {
    +                    "description": "Port Lock bit 5",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "LK4": {
    +                    "description": "Port Lock bit 4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "LK3": {
    +                    "description": "Port Lock bit 3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "LK2": {
    +                    "description": "Port Lock bit 2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "LK1": {
    +                    "description": "Port Lock bit 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "LK0": {
    +                    "description": "Port Lock bit 0",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "USBFS_PWRCLK": {
    +        "description": "USB on the go full speed",
    +        "children": {
    +          "registers": {
    +            "PWRCLKCTL": {
    +              "description": "power and clock gating control\n          register (PWRCLKCTL)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SUCLK": {
    +                    "description": "Stop the USB clock",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SHCLK": {
    +                    "description": "Stop HCLK",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "USBFS_DEVICE": {
    +        "description": "USB on the go full speed device",
    +        "children": {
    +          "registers": {
    +            "DCFG": {
    +              "description": "device configuration register\n          (DCFG)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DS": {
    +                    "description": "Device speed",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "NZLSOH": {
    +                    "description": "Non-zero-length status OUT\n              handshake",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DAR": {
    +                    "description": "Device address",
    +                    "offset": 4,
    +                    "size": 7
    +                  },
    +                  "EOPFT": {
    +                    "description": "end of periodic frame time",
    +                    "offset": 11,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "DCTL": {
    +              "description": "device control register\n          (DCTL)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RWKUP": {
    +                    "description": "Remote wakeup",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SD": {
    +                    "description": "Soft disconnect",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GINS": {
    +                    "description": "Global IN NAK status",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GONS": {
    +                    "description": "Global OUT NAK status",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SGINAK": {
    +                    "description": "Set global IN NAK",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CGINAK": {
    +                    "description": "Clear global IN NAK",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SGONAK": {
    +                    "description": "Set global OUT NAK",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CGONAK": {
    +                    "description": "Clear global OUT NAK",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "POIF": {
    +                    "description": "Power-on initialization flag",
    +                    "offset": 11,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DSTAT": {
    +              "description": "device status register\n          (DSTAT)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "SPST": {
    +                    "description": "Suspend status",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ES": {
    +                    "description": "Enumerated speed",
    +                    "offset": 1,
    +                    "size": 2
    +                  },
    +                  "FNRSOF": {
    +                    "description": "Frame number of the received\n              SOF",
    +                    "offset": 8,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPINTEN": {
    +              "description": "device IN endpoint common interrupt\n          mask register (DIEPINTEN)",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TFEN": {
    +                    "description": "Transfer finished interrupt\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISEN": {
    +                    "description": "Endpoint disabled interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CITOEN": {
    +                    "description": "Control IN timeout condition interrupt enable (Non-isochronous\n              endpoints)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPTXFUDEN": {
    +                    "description": "Endpoint Tx FIFO underrun interrupt enable bit",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IEPNEEN": {
    +                    "description": "IN endpoint NAK effective\n              interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DOEPINTEN": {
    +              "description": "device OUT endpoint common interrupt\n          enable register (DOEPINTEN)",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TFEN": {
    +                    "description": "Transfer finished interrupt\n              enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EPDISEN": {
    +                    "description": "Endpoint disabled interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STPFEN": {
    +                    "description": "SETUP phase finished interrupt enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPRXFOVREN": {
    +                    "description": " Endpoint Rx FIFO overrun interrupt enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BTBSTPEN": {
    +                    "description": " Back-to-back SETUP packets\n               interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DAEPINT": {
    +              "description": "device all endpoints interrupt\n          register (DAEPINT)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IEPITB": {
    +                    "description": "Device all IN endpoint interrupt bits",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "OEPITB": {
    +                    "description": "Device all OUT endpoint interrupt bits",
    +                    "offset": 16,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "DAEPINTEN": {
    +              "description": "Device all endpoints interrupt enable register\n          (DAEPINTEN)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IEPIE": {
    +                    "description": "IN EP interrupt interrupt enable bits",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "OEPIE": {
    +                    "description": "OUT endpoint interrupt enable bits",
    +                    "offset": 16,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "DVBUSDT": {
    +              "description": "device VBUS discharge time\n          register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 6103,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DVBUSDT": {
    +                    "description": "Device VBUS discharge time",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DVBUSPT": {
    +              "description": "device VBUS pulsing time\n          register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 1464,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DVBUSPT": {
    +                    "description": "Device VBUS pulsing time",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DIEPFEINTEN": {
    +              "description": "device IN endpoint FIFO empty\n          interrupt enable register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IEPTXFEIE": {
    +                    "description": "IN EP Tx FIFO empty interrupt enable\n              bits",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "DIEP0CTL": {
    +              "description": "device IN endpoint 0 control\n          register (DIEP0CTL)",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 32768,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPL": {
    +                    "description": "Maximum packet length",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "EPACT": {
    +                    "description": "endpoint active",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NAKS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPTYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "STALL": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TxFIFO number",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "EPD": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EPEN": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIEP1CTL": {
    +              "description": "device in endpoint-1 control\n          register",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPEN": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EPD": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SD1PID_SODDFRM": {
    +                    "description": "Set DATA1 PID/Set odd frame",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVENFRM": {
    +                    "description": "SD0PID/SEVNFRM",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TXFNUM": {
    +                    "description": "Tx FIFO number",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "STALL": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPTYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "NAKS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EOFRM_DPID": {
    +                    "description": "EOFRM/DPID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPACT": {
    +                    "description": "Endpoint active",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MPL": {
    +                    "description": "maximum packet length",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "DIEP2CTL": {
    +              "description": "device endpoint-2 control\n          register",
    +              "offset": 320,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPEN": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EPD": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SD1PID_SODDFRM": {
    +                    "description": "Set DATA1 PID/Set odd frame",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVENFRM": {
    +                    "description": "SD0PID/SEVNFRM",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TXFNUM": {
    +                    "description": "Tx FIFO number",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "STALL": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPTYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "NAKS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EOFRM_DPID": {
    +                    "description": "EOFRM/DPID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPACT": {
    +                    "description": "Endpoint active",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MPL": {
    +                    "description": "maximum packet length",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "DIEP3CTL": {
    +              "description": "device endpoint-3 control\n          register",
    +              "offset": 352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPEN": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EPD": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SD1PID_SODDFRM": {
    +                    "description": "Set DATA1 PID/Set odd frame",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVENFRM": {
    +                    "description": "SD0PID/SEVNFRM",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TXFNUM": {
    +                    "description": "Tx FIFO number",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "STALL": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EPTYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "NAKS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EOFRM_DPID": {
    +                    "description": "EOFRM/DPID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPACT": {
    +                    "description": "Endpoint active",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MPL": {
    +                    "description": "maximum packet length",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "DOEP0CTL": {
    +              "description": "device endpoint-0 control\n          register",
    +              "offset": 768,
    +              "size": 32,
    +              "reset_value": 32768,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPEN": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EPD": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "STALL": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "SNOOP": {
    +                    "description": "Snoop mode",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPTYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "NAKS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPACT": {
    +                    "description": "Endpoint active",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MPL": {
    +                    "description": "Maximum packet length",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DOEP1CTL": {
    +              "description": "device endpoint-1 control\n          register",
    +              "offset": 800,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPEN": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EPD": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SD1PID_SODDFRM": {
    +                    "description": "SD1PID/SODDFRM",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVENFRM": {
    +                    "description": "SD0PID/SEVENFRM",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "STALL": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "SNOOP": {
    +                    "description": "Snoop mode",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPTYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "NAKS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EOFRM_DPID": {
    +                    "description": "EOFRM/DPID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPACT": {
    +                    "description": "Endpoint active",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MPL": {
    +                    "description": "maximum packet length",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "DOEP2CTL": {
    +              "description": "device endpoint-2 control\n          register",
    +              "offset": 832,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPEN": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EPD": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SD1PID_SODDFRM": {
    +                    "description": "SD1PID/SODDFRM",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVENFRM": {
    +                    "description": "SD0PID/SEVENFRM",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "STALL": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "SNOOP": {
    +                    "description": "Snoop mode",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPTYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "NAKS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EOFRM_DPID": {
    +                    "description": "EOFRM/DPID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPACT": {
    +                    "description": "Endpoint active",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MPL": {
    +                    "description": "maximum packet length",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "DOEP3CTL": {
    +              "description": "device endpoint-3 control\n          register",
    +              "offset": 864,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EPEN": {
    +                    "description": "Endpoint enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EPD": {
    +                    "description": "Endpoint disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SD1PID_SODDFRM": {
    +                    "description": "SD1PID/SODDFRM",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SD0PID_SEVENFRM": {
    +                    "description": "SD0PID/SEVENFRM",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SNAK": {
    +                    "description": "Set NAK",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CNAK": {
    +                    "description": "Clear NAK",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "STALL": {
    +                    "description": "STALL handshake",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "SNOOP": {
    +                    "description": "Snoop mode",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EPTYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "NAKS": {
    +                    "description": "NAK status",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EOFRM_DPID": {
    +                    "description": "EOFRM/DPID",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EPACT": {
    +                    "description": "Endpoint active",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MPL": {
    +                    "description": "maximum packet length",
    +                    "offset": 0,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "DIEP0INTF": {
    +              "description": "device endpoint-0 interrupt\n          register",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXFE": {
    +                    "description": "Transmit FIFO empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IEPNE": {
    +                    "description": "IN endpoint NAK effective",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EPTXFUD": {
    +                    "description": "Endpoint Tx FIFO underrun",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CITO": {
    +                    "description": "Control in timeout interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint finished",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TF": {
    +                    "description": "Transfer finished",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIEP1INTF": {
    +              "description": "device endpoint-1 interrupt\n          register",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXFE": {
    +                    "description": "Transmit FIFO empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IEPNE": {
    +                    "description": "IN endpoint NAK effective",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EPTXFUD": {
    +                    "description": "Endpoint Tx FIFO underrun",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CITO": {
    +                    "description": "Control in timeout interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint finished",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TF": {
    +                    "description": "Transfer finished",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIEP2INTF": {
    +              "description": "device endpoint-2 interrupt\n          register",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXFE": {
    +                    "description": "Transmit FIFO empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IEPNE": {
    +                    "description": "IN endpoint NAK effective",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EPTXFUD": {
    +                    "description": "Endpoint Tx FIFO underrun",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CITO": {
    +                    "description": "Control in timeout interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint finished",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TF": {
    +                    "description": "Transfer finished",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIEP3INTF": {
    +              "description": "device endpoint-3 interrupt\n          register",
    +              "offset": 360,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXFE": {
    +                    "description": "Transmit FIFO empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IEPNE": {
    +                    "description": "IN endpoint NAK effective",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EPTXFUD": {
    +                    "description": "Endpoint Tx FIFO underrun",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CITO": {
    +                    "description": "Control in timeout interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint finished",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TF": {
    +                    "description": "Transfer finished",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DOEP0INTF": {
    +              "description": "device out endpoint-0 interrupt flag \n          register",
    +              "offset": 776,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BTBSTP": {
    +                    "description": "Back-to-back SETUP packets",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EPRXFOVR": {
    +                    "description": "Endpoint Rx FIFO overrun",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "STPF": {
    +                    "description": "Setup phase finished",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disabled",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TF": {
    +                    "description": "Transfer finished",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DOEP1INTF": {
    +              "description": "device out endpoint-1 interrupt flag \n          register",
    +              "offset": 808,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BTBSTP": {
    +                    "description": "Back-to-back SETUP packets",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EPRXFOVR": {
    +                    "description": "Endpoint Rx FIFO overrun",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "STPF": {
    +                    "description": "Setup phase finished",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disabled",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TF": {
    +                    "description": "Transfer finished",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DOEP2INTF": {
    +              "description": "device out endpoint-2 interrupt flag \n          register",
    +              "offset": 840,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BTBSTP": {
    +                    "description": "Back-to-back SETUP packets",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EPRXFOVR": {
    +                    "description": "Endpoint Rx FIFO overrun",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "STPF": {
    +                    "description": "Setup phase finished",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disabled",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TF": {
    +                    "description": "Transfer finished",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DOEP3INTF": {
    +              "description": "device out endpoint-3 interrupt flag \n          register",
    +              "offset": 872,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BTBSTP": {
    +                    "description": "Back-to-back SETUP packets",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EPRXFOVR": {
    +                    "description": "Endpoint Rx FIFO overrun",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "STPF": {
    +                    "description": "Setup phase finished",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPDIS": {
    +                    "description": "Endpoint disabled",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TF": {
    +                    "description": "Transfer finished",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIEP0LEN": {
    +              "description": "device IN endpoint-0 transfer length\n          register",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 2
    +                  },
    +                  "TLEN": {
    +                    "description": "Transfer length",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "DOEP0LEN": {
    +              "description": "device OUT endpoint-0 transfer length\n          register",
    +              "offset": 784,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STPCNT": {
    +                    "description": "SETUP packet count",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "TLEN": {
    +                    "description": "Transfer length",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "DIEP1LEN": {
    +              "description": "device IN endpoint-1 transfer length\n          register",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MCPF": {
    +                    "description": "Multi packet count per frame",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "TLEN": {
    +                    "description": "Transfer length",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            },
    +            "DIEP2LEN": {
    +              "description": "device IN endpoint-2 transfer length\n          register",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MCPF": {
    +                    "description": "Multi packet count per frame",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "TLEN": {
    +                    "description": "Transfer length",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            },
    +            "DIEP3LEN": {
    +              "description": "device IN endpoint-3 transfer length\n          register",
    +              "offset": 368,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MCPF": {
    +                    "description": "Multi packet count per frame",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "TLEN": {
    +                    "description": "Transfer length",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            },
    +            "DOEP1LEN": {
    +              "description": "device OUT endpoint-1 transfer length\n          register",
    +              "offset": 816,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STPCNT_RXDPID": {
    +                    "description": "SETUP packet count/Received data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "TLEN": {
    +                    "description": "Transfer length",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            },
    +            "DOEP2LEN": {
    +              "description": "device OUT endpoint-2 transfer length\n          register",
    +              "offset": 848,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STPCNT_RXDPID": {
    +                    "description": "SETUP packet count/Received data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "TLEN": {
    +                    "description": "Transfer length",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            },
    +            "DOEP3LEN": {
    +              "description": "device OUT endpoint-3 transfer length\n          register",
    +              "offset": 880,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STPCNT_RXDPID": {
    +                    "description": "SETUP packet count/Received data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "PCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "TLEN": {
    +                    "description": "Transfer length",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            },
    +            "DIEP0TFSTAT": {
    +              "description": "device IN endpoint  0 transmit FIFO\n          status register",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 512,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IEPTFS": {
    +                    "description": "IN endpoint TxFIFO space\n              remaining",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DIEP1TFSTAT": {
    +              "description": "device IN endpoint 1 transmit FIFO\n          status register",
    +              "offset": 312,
    +              "size": 32,
    +              "reset_value": 512,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IEPTFS": {
    +                    "description": "IN endpoint TxFIFO space\n              remaining",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DIEP2TFSTAT": {
    +              "description": "device IN endpoint  2 transmit FIFO\n          status register",
    +              "offset": 344,
    +              "size": 32,
    +              "reset_value": 512,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IEPTFS": {
    +                    "description": "IN endpoint TxFIFO space\n              remaining",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DIEP3TFSTAT": {
    +              "description": "device IN endpoint  3 transmit FIFO\n          status register",
    +              "offset": 376,
    +              "size": 32,
    +              "reset_value": 512,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "IEPTFS": {
    +                    "description": "IN endpoint TxFIFO space\n              remaining",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "USBFS_HOST": {
    +        "description": "USB on the go full speed host",
    +        "children": {
    +          "registers": {
    +            "HCTL": {
    +              "description": "host configuration register\n          (HCTL)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLKSEL": {
    +                    "description": "clock select for USB clock",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "HFT": {
    +              "description": "Host frame interval\n          register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 48000,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FRI": {
    +                    "description": "Frame interval",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "HFINFR": {
    +              "description": "FS host frame number/frame time\n          remaining register (HFINFR)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 3145728000,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "FRNUM": {
    +                    "description": "Frame number",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "FRT": {
    +                    "description": "Frame remaining time",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "HPTFQSTAT": {
    +              "description": "Host periodic transmit FIFO/queue\n          status register (HPTFQSTAT)",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 524800,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PTXFS": {
    +                    "description": "Periodic transmit data FIFO space\n              available",
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "read-only"
    +                  },
    +                  "PTXREQS": {
    +                    "description": "Periodic transmit request queue space\n              available",
    +                    "offset": 16,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "PTXREQT": {
    +                    "description": "Top of the periodic transmit request\n              queue",
    +                    "offset": 24,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "HACHINT": {
    +              "description": " Host all channels interrupt\n          register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "HACHINT": {
    +                    "description": "Host all channel interrupts",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "HACHINTEN": {
    +              "description": "host all channels interrupt mask\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CINTEN": {
    +                    "description": "Channel interrupt enable",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "HPCS": {
    +              "description": "Host port control and status register (USBFS_HPCS)",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PCST": {
    +                    "description": "Port connect status",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PCD": {
    +                    "description": "Port connect detected",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PE": {
    +                    "description": "Port enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PEDC": {
    +                    "description": "Port enable/disable change",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PREM": {
    +                    "description": "Port resume",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PSP": {
    +                    "description": "Port suspend",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PRST": {
    +                    "description": "Port reset",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PLST": {
    +                    "description": "Port line status",
    +                    "offset": 10,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "PP": {
    +                    "description": "Port power",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "PS": {
    +                    "description": "Port speed",
    +                    "offset": 17,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "HCH0CTL": {
    +              "description": "host channel-0 characteristics\n          register (HCH0CTL)",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPL": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSD": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "DAR": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HCH1CTL": {
    +              "description": " host channel-1 characteristics\n          register (HCH1CTL)",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPL": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSD": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "DAR": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HCH2CTL": {
    +              "description": "host channel-2 characteristics\n          register (HCH2CTL)",
    +              "offset": 320,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPL": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSD": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "DAR": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HCH3CTL": {
    +              "description": "host channel-3 characteristics\n          register (HCH3CTL)",
    +              "offset": 352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPL": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSD": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "DAR": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HCH4CTL": {
    +              "description": " host channel-4 characteristics\n          register (HCH4CTL)",
    +              "offset": 384,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPL": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSD": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "DAR": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HCH5CTL": {
    +              "description": "host channel-5 characteristics\n          register (HCH5CTL)",
    +              "offset": 416,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPL": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSD": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "DAR": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HCH6CTL": {
    +              "description": "host channel-6 characteristics\n          register (HCH6CTL)",
    +              "offset": 448,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPL": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSD": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "DAR": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HCH7CTL": {
    +              "description": "host channel-7 characteristics\n          register (HCH7CTL)",
    +              "offset": 480,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MPL": {
    +                    "description": "Maximum packet size",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "EPDIR": {
    +                    "description": "Endpoint direction",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LSD": {
    +                    "description": "Low-speed device",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EPTYPE": {
    +                    "description": "Endpoint type",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "DAR": {
    +                    "description": "Device address",
    +                    "offset": 22,
    +                    "size": 7
    +                  },
    +                  "ODDFRM": {
    +                    "description": "Odd frame",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CDIS": {
    +                    "description": "Channel disable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Channel enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HCH0INTF": {
    +              "description": "host channel-0 interrupt register\n          (USBFS_HCHxINTF)",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TF": {
    +                    "description": "Transfer finished",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "USBER": {
    +                    "description": "USB bus error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBER": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "REQOVR": {
    +                    "description": "Request queue overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTER": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HCH1INTF": {
    +              "description": "host channel-1 interrupt register\n          (HCH1INTF)",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TF": {
    +                    "description": "Transfer finished",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "USBER": {
    +                    "description": "USB bus error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBER": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "REQOVR": {
    +                    "description": "Request queue overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTER": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HCH2INTF": {
    +              "description": "host channel-2 interrupt register\n          (HCH2INTF)",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TF": {
    +                    "description": "Transfer finished",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "USBER": {
    +                    "description": "USB bus error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBER": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "REQOVR": {
    +                    "description": "Request queue overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTER": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HCH3INTF": {
    +              "description": "host channel-3 interrupt register\n          (HCH3INTF)",
    +              "offset": 360,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TF": {
    +                    "description": "Transfer finished",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "USBER": {
    +                    "description": "USB bus error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBER": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "REQOVR": {
    +                    "description": "Request queue overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTER": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HCH4INTF": {
    +              "description": "host channel-4 interrupt register\n          (HCH4INTF)",
    +              "offset": 392,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TF": {
    +                    "description": "Transfer finished",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "USBER": {
    +                    "description": "USB bus error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBER": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "REQOVR": {
    +                    "description": "Request queue overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTER": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HCH5INTF": {
    +              "description": "host channel-5 interrupt register\n          (HCH5INTF)",
    +              "offset": 424,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TF": {
    +                    "description": "Transfer finished",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "USBER": {
    +                    "description": "USB bus error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBER": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "REQOVR": {
    +                    "description": "Request queue overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTER": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HCH6INTF": {
    +              "description": "host channel-6 interrupt register\n          (HCH6INTF)",
    +              "offset": 456,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TF": {
    +                    "description": "Transfer finished",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "USBER": {
    +                    "description": "USB bus error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBER": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "REQOVR": {
    +                    "description": "Request queue overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTER": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HCH7INTF": {
    +              "description": "host channel-7 interrupt register\n          (HCH7INTF)",
    +              "offset": 488,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TF": {
    +                    "description": "Transfer finished",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CH": {
    +                    "description": "Channel halted",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "STALL response received\n              interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAK": {
    +                    "description": "NAK response received\n              interrupt",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACK": {
    +                    "description": "ACK response received/transmitted\n              interrupt",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "USBER": {
    +                    "description": "USB bus error",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBER": {
    +                    "description": "Babble error",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "REQOVR": {
    +                    "description": "Request queue overrun",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTER": {
    +                    "description": "Data toggle error",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HCH0INTEN": {
    +              "description": "host channel-0 interrupt enable register\n          (HCH0INTEN)",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TFIE": {
    +                    "description": "Transfer completed interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHIE": {
    +                    "description": "Channel halted interrupt enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLIE": {
    +                    "description": "STALL interrupt enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKIE": {
    +                    "description": "NAK interrupt enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKIE": {
    +                    "description": "ACK interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "USBERIE": {
    +                    "description": "USB bus error interrupt enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERIE": {
    +                    "description": "Babble error interrupt enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "REQOVRIE": {
    +                    "description": "request queue overrun interrupt enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERIE": {
    +                    "description": "Data toggle error interrupt enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HCH1INTEN": {
    +              "description": "host channel-1 interrupt enable register\n          (HCH1INTEN)",
    +              "offset": 300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TFIE": {
    +                    "description": "Transfer completed interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHIE": {
    +                    "description": "Channel halted interrupt enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLIE": {
    +                    "description": "STALL interrupt enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKIE": {
    +                    "description": "NAK interrupt enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKIE": {
    +                    "description": "ACK interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "USBERIE": {
    +                    "description": "USB bus error interrupt enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERIE": {
    +                    "description": "Babble error interrupt enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "REQOVRIE": {
    +                    "description": "request queue overrun interrupt enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERIE": {
    +                    "description": "Data toggle error interrupt enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HCH2INTEN": {
    +              "description": "host channel-2 interrupt enable register\n          (HCH2INTEN)",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TFIE": {
    +                    "description": "Transfer completed interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHIE": {
    +                    "description": "Channel halted interrupt enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLIE": {
    +                    "description": "STALL interrupt enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKIE": {
    +                    "description": "NAK interrupt enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKIE": {
    +                    "description": "ACK interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "USBERIE": {
    +                    "description": "USB bus error interrupt enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERIE": {
    +                    "description": "Babble error interrupt enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "REQOVRIE": {
    +                    "description": "request queue overrun interrupt enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERIE": {
    +                    "description": "Data toggle error interrupt enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HCH3INTEN": {
    +              "description": "host channel-3 interrupt enable register\n          (HCH3INTEN)",
    +              "offset": 364,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TFIE": {
    +                    "description": "Transfer completed interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHIE": {
    +                    "description": "Channel halted interrupt enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLIE": {
    +                    "description": "STALL interrupt enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKIE": {
    +                    "description": "NAK interrupt enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKIE": {
    +                    "description": "ACK interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "USBERIE": {
    +                    "description": "USB bus error interrupt enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERIE": {
    +                    "description": "Babble error interrupt enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "REQOVRIE": {
    +                    "description": "request queue overrun interrupt enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERIE": {
    +                    "description": "Data toggle error interrupt enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HCH4INTEN": {
    +              "description": "host channel-4 interrupt enable register\n          (HCH4INTEN)",
    +              "offset": 396,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TFIE": {
    +                    "description": "Transfer completed interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHIE": {
    +                    "description": "Channel halted interrupt enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLIE": {
    +                    "description": "STALL interrupt enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKIE": {
    +                    "description": "NAK interrupt enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKIE": {
    +                    "description": "ACK interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "USBERIE": {
    +                    "description": "USB bus error interrupt enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERIE": {
    +                    "description": "Babble error interrupt enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "REQOVRIE": {
    +                    "description": "request queue overrun interrupt enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERIE": {
    +                    "description": "Data toggle error interrupt enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HCH5INTEN": {
    +              "description": "host channel-5 interrupt enable register\n          (HCH5INTEN)",
    +              "offset": 428,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TFIE": {
    +                    "description": "Transfer completed interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHIE": {
    +                    "description": "Channel halted interrupt enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLIE": {
    +                    "description": "STALL interrupt enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKIE": {
    +                    "description": "NAK interrupt enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKIE": {
    +                    "description": "ACK interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "USBERIE": {
    +                    "description": "USB bus error interrupt enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERIE": {
    +                    "description": "Babble error interrupt enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "REQOVRIE": {
    +                    "description": "request queue overrun interrupt enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERIE": {
    +                    "description": "Data toggle error interrupt enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HCH6INTEN": {
    +              "description": "host channel-6 interrupt enable register\n          (HCH6INTEN)",
    +              "offset": 460,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TFIE": {
    +                    "description": "Transfer completed interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHIE": {
    +                    "description": "Channel halted interrupt enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLIE": {
    +                    "description": "STALL interrupt enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKIE": {
    +                    "description": "NAK interrupt enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKIE": {
    +                    "description": "ACK interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "USBERIE": {
    +                    "description": "USB bus error interrupt enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERIE": {
    +                    "description": "Babble error interrupt enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "REQOVRIE": {
    +                    "description": "request queue overrun interrupt enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERIE": {
    +                    "description": "Data toggle error interrupt enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HCH7INTEN": {
    +              "description": "host channel-7 interrupt enable register\n          (HCH7INTEN)",
    +              "offset": 492,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TFIE": {
    +                    "description": "Transfer completed interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHIE": {
    +                    "description": "Channel halted interrupt enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "STALLIE": {
    +                    "description": "STALL interrupt enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NAKIE": {
    +                    "description": "NAK interrupt enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ACKIE": {
    +                    "description": "ACK interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "USBERIE": {
    +                    "description": "USB bus error interrupt enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBERIE": {
    +                    "description": "Babble error interrupt enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "REQOVRIE": {
    +                    "description": "request queue overrun interrupt enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DTERIE": {
    +                    "description": "Data toggle error interrupt enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HCH0LEN": {
    +              "description": "host channel-0 transfer length\n          register",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TLEN": {
    +                    "description": "Transfer length",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "HCH1LEN": {
    +              "description": "host channel-1 transfer length\n          register",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TLEN": {
    +                    "description": "Transfer length",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "HCH2LEN": {
    +              "description": " host channel-2 transfer length\n          register",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TLEN": {
    +                    "description": "Transfer length",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "HCH3LEN": {
    +              "description": " host channel-3 transfer length\n          register",
    +              "offset": 368,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TLEN": {
    +                    "description": "Transfer length",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "HCH4LEN": {
    +              "description": "host channel-4 transfer length\n          register",
    +              "offset": 400,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TLEN": {
    +                    "description": "Transfer length",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "HCH5LEN": {
    +              "description": "host channel-5 transfer length\n          register",
    +              "offset": 432,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TLEN": {
    +                    "description": "Transfer length",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "HCH6LEN": {
    +              "description": "host channel-6 transfer length\n          register",
    +              "offset": 464,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TLEN": {
    +                    "description": "Transfer length",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "HCH7LEN": {
    +              "description": "host channel-7 transfer length\n          register",
    +              "offset": 496,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TLEN": {
    +                    "description": "Transfer length",
    +                    "offset": 0,
    +                    "size": 19
    +                  },
    +                  "PCNT": {
    +                    "description": "Packet count",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 29,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "USBFS_GLOBAL": {
    +        "description": "USB full speed global registers",
    +        "children": {
    +          "registers": {
    +            "GOTGCS": {
    +              "description": "Global OTG control and status register \n          (USBFS_GOTGCS)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 2048,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SRPS": {
    +                    "description": "SRP success",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SRPREQ": {
    +                    "description": "SRP request",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HNPS": {
    +                    "description": "Host success",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HNPREQ": {
    +                    "description": "HNP request",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "HHNPEN": {
    +                    "description": "Host HNP enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "DHNPEN": {
    +                    "description": "Device HNP enabled",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "IDPS": {
    +                    "description": "ID pin status",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DI": {
    +                    "description": "Debounce interval",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ASV": {
    +                    "description": "A-session valid",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BSV": {
    +                    "description": "B-session valid",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GOTGINTF": {
    +              "description": "Global OTG interrupt flag register\n          (USBFS_GOTGINTF)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SESEND": {
    +                    "description": "Session end ",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SRPEND": {
    +                    "description": "Session request success status\n              change",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "HNPEND": {
    +                    "description": "HNP end",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "HNPDET": {
    +                    "description": "Host negotiation request detected",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "ADTO": {
    +                    "description": "A-device timeout",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "DF": {
    +                    "description": "Debounce finish",
    +                    "offset": 19,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GAHBCS": {
    +              "description": "Global AHB control and status register\n          (USBFS_GAHBCS)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "GINTEN": {
    +                    "description": "Global interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TXFTH": {
    +                    "description": "Tx FIFO threshold",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PTXFTH": {
    +                    "description": "Periodic Tx FIFO threshold",
    +                    "offset": 8,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GUSBCS": {
    +              "description": "Global USB control and status register\n          (USBFS_GUSBCSR)",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 2688,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TOC": {
    +                    "description": "Timeout calibration",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "SRPCEN": {
    +                    "description": "SRP capability enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "HNPCEN": {
    +                    "description": "HNP capability enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "UTT": {
    +                    "description": "USB turnaround time",
    +                    "offset": 10,
    +                    "size": 4
    +                  },
    +                  "FHM": {
    +                    "description": "Force host mode",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FDM": {
    +                    "description": "Force device mode",
    +                    "offset": 30,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GRSTCTL": {
    +              "description": "Global reset control register (USBFS_GRSTCTL)",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 2147483648,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSRST": {
    +                    "description": "Core soft reset",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "HCSRST": {
    +                    "description": "HCLK soft reset",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HFCRST": {
    +                    "description": "Host frame counter reset",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RXFF": {
    +                    "description": "RxFIFO flush",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TXFF": {
    +                    "description": "TxFIFO flush",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TXFNUM": {
    +                    "description": "TxFIFO number",
    +                    "offset": 6,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "GINTF": {
    +              "description": "Global interrupt flag register (USBFS_GINTF)",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 67108897,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COPM": {
    +                    "description": "Current operation mode",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MFIF": {
    +                    "description": "Mode fault interrupt flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OTGIF": {
    +                    "description": "OTG interrupt flag",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SOF": {
    +                    "description": "Start of frame",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RXFNEIF": {
    +                    "description": "RxFIFO non-empty interrupt flag",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NPTXFEIF": {
    +                    "description": "Non-periodic TxFIFO empty interrupt flag",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GNPINAK": {
    +                    "description": "Global Non-Periodic IN NAK effective",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GONAK": {
    +                    "description": "Global OUT NAK effective",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ESP": {
    +                    "description": "Early suspend",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SP": {
    +                    "description": "USB suspend",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "RST": {
    +                    "description": "USB reset",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ENUMF": {
    +                    "description": "Enumeration finished",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ISOOPDIF": {
    +                    "description": "Isochronous OUT packet dropped\n              interrupt",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EOPFIF": {
    +                    "description": "End of periodic frame\n              interrupt flag",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "IEPIF": {
    +                    "description": "IN endpoint interrupt flag",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEPIF": {
    +                    "description": "OUT endpoint interrupt flag",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ISOINCIF": {
    +                    "description": "Isochronous IN transfer Not Complete Interrupt Flag",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "PXNCIF_ISOONCIF": {
    +                    "description": "periodic transfer not complete interrupt flag(Host\n              mode)/isochronous OUT transfer not complete interrupt flag(Device\n              mode)",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "HPIF": {
    +                    "description": "Host port interrupt flag",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HCIF": {
    +                    "description": "Host channels interrupt flag",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PTXFEIF": {
    +                    "description": "Periodic TxFIFO empty interrupt flag",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IDPSC": {
    +                    "description": "ID pin status change",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "DISCIF": {
    +                    "description": "Disconnect interrupt flag",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "SESIF": {
    +                    "description": "Session interrupt flag",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "WKUPIF": {
    +                    "description": "Wakeup interrupt flag",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GINTEN": {
    +              "description": "Global interrupt enable register\n          (USBFS_GINTEN)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MFIE": {
    +                    "description": "Mode fault interrupt\n              enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OTGIE": {
    +                    "description": "OTG interrupt enable ",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SOFIE": {
    +                    "description": "Start of frame interrupt enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RXFNEIE": {
    +                    "description": "Receive FIFO non-empty\n              interrupt enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "NPTXFEIE": {
    +                    "description": "Non-periodic TxFIFO empty\n              interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GNPINAKIE": {
    +                    "description": "Global non-periodic IN NAK effective interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GONAKIE": {
    +                    "description": "Global OUT NAK effective\n              interrupt enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ESPIE": {
    +                    "description": "Early suspend interrupt enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SPIE": {
    +                    "description": "USB suspend interrupt enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "RSTIE": {
    +                    "description": "USB reset interrupt enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ENUMFIE": {
    +                    "description": "Enumeration finish interrupt enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ISOOPDIE": {
    +                    "description": "Isochronous OUT packet dropped interrupt enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EOPFIE": {
    +                    "description": "End of periodic frame interrupt enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "IEPIE": {
    +                    "description": "IN endpoints interrupt enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "OEPIE": {
    +                    "description": "OUT endpoints interrupt enable",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "ISOINCIE": {
    +                    "description": "isochronous IN transfer not complete\n              interrupt enable",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "PXNCIE_ISOONCIE": {
    +                    "description": "periodic transfer not compelete Interrupt enable(Host\n              mode)/isochronous OUT transfer not complete interrupt enable(Device\n              mode)",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "HPIE": {
    +                    "description": "Host port interrupt enable",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HCIE": {
    +                    "description": "Host channels interrupt enable",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "PTXFEIE": {
    +                    "description": "Periodic TxFIFO empty interrupt enable",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "IDPSCIE": {
    +                    "description": "ID pin status change interrupt enable",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "DISCIE": {
    +                    "description": "Disconnect interrupt enable",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "SESIE": {
    +                    "description": "Session interrupt enable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "WKUPIE": {
    +                    "description": "Wakeup interrupt enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GRSTATR_Device": {
    +              "description": "Global Receive status read(Device\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "BCOUNT": {
    +                    "description": "Byte count",
    +                    "offset": 4,
    +                    "size": 11
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 15,
    +                    "size": 2
    +                  },
    +                  "RPCKST": {
    +                    "description": "Recieve packet status",
    +                    "offset": 17,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "GRSTATR_Host": {
    +              "description": "Global Receive status read(Host\n          mode)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CNUM": {
    +                    "description": "Channel number",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "BCOUNT": {
    +                    "description": "Byte count",
    +                    "offset": 4,
    +                    "size": 11
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 15,
    +                    "size": 2
    +                  },
    +                  "RPCKST": {
    +                    "description": "Reivece packet status",
    +                    "offset": 17,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "GRSTATP_Device": {
    +              "description": "Global Receive status pop(Device\n          mode)",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "EPNUM": {
    +                    "description": "Endpoint number",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "BCOUNT": {
    +                    "description": "Byte count",
    +                    "offset": 4,
    +                    "size": 11
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 15,
    +                    "size": 2
    +                  },
    +                  "RPCKST": {
    +                    "description": "Recieve packet status",
    +                    "offset": 17,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "GRSTATP_Host": {
    +              "description": "Global Receive status pop(Host\n          mode)",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "CNUM": {
    +                    "description": "Channel number",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "BCOUNT": {
    +                    "description": "Byte count",
    +                    "offset": 4,
    +                    "size": 11
    +                  },
    +                  "DPID": {
    +                    "description": "Data PID",
    +                    "offset": 15,
    +                    "size": 2
    +                  },
    +                  "RPCKST": {
    +                    "description": "Reivece packet status",
    +                    "offset": 17,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "GRFLEN": {
    +              "description": "Global Receive FIFO size register\n          (USBFS_GRFLEN)",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 512,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXFD": {
    +                    "description": "Rx FIFO depth",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "HNPTFLEN": {
    +              "description": "Host non-periodic transmit FIFO length register\n          (Host mode)",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 33554944,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HNPTXRSAR": {
    +                    "description": "host non-periodic transmit Tx RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "HNPTXFD": {
    +                    "description": "host non-periodic TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DIEP0TFLEN": {
    +              "description": "Device IN endpoint 0 transmit FIFO length\n          (Device mode)",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 33554944,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IEP0TXFD": {
    +                    "description": "in endpoint 0 Tx FIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "IEP0TXRSAR": {
    +                    "description": "in endpoint 0 Tx RAM start address",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "HNPTFQSTAT": {
    +              "description": "Host non-periodic transmit FIFO/queue\n          status register (HNPTFQSTAT)",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 524800,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "NPTXFS": {
    +                    "description": "Non-periodic TxFIFO space",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "NPTXRQS": {
    +                    "description": "Non-periodic transmit request queue\n              space ",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "NPTXRQTOP": {
    +                    "description": "Top of the non-periodic transmit request\n              queue",
    +                    "offset": 24,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "GCCFG": {
    +              "description": "Global core configuration register (USBFS_GCCFG)",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PWRON": {
    +                    "description": "Power on",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "VBUSACEN": {
    +                    "description": "The VBUS A-device Comparer enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "VBUSBCEN": {
    +                    "description": "The VBUS B-device Comparer enable",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "SOFOEN": {
    +                    "description": "SOF output enable",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "VBUSIG": {
    +                    "description": "VBUS ignored",
    +                    "offset": 21,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CID": {
    +              "description": "core ID register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 4096,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CID": {
    +                    "description": "Core ID",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HPTFLEN": {
    +              "description": "Host periodic transmit FIFO length register (HPTFLEN)",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 33555968,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HPTXFSAR": {
    +                    "description": "Host periodic TxFIFO start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "HPTXFD": {
    +                    "description": "Host periodic TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DIEP1TFLEN": {
    +              "description": "device IN endpoint transmit FIFO size\n          register (DIEP1TFLEN)",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 33555456,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IEPTXRSAR": {
    +                    "description": "IN endpoint FIFO transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "IEPTXFD": {
    +                    "description": "IN endpoint TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DIEP2TFLEN": {
    +              "description": "device IN endpoint transmit FIFO size\n          register (DIEP2TFLEN)",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 33555456,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IEPTXRSAR": {
    +                    "description": "IN endpoint FIFO transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "IEPTXFD": {
    +                    "description": "IN endpoint TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DIEP3TFLEN": {
    +              "description": "device IN endpoint transmit FIFO size\n          register (FS_DIEP3TXFLEN)",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 33555456,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IEPTXRSAR": {
    +                    "description": "IN endpoint FIFO4 transmit RAM start\n              address",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "IEPTXFD": {
    +                    "description": "IN endpoint TxFIFO depth",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "I2C0": {
    +        "description": "Inter integrated circuit",
    +        "children": {
    +          "registers": {
    +            "CTL0": {
    +              "description": "Control register 0",
    +              "offset": 0,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SRESET": {
    +                    "description": "Software reset",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "SALT": {
    +                    "description": "SMBus alert",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "PECTRANS": {
    +                    "description": "PEC Transfer",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "POAP": {
    +                    "description": "Position of ACK and PEC when receiving",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ACKEN": {
    +                    "description": "Whether or not to send an ACK",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "STOP": {
    +                    "description": "Generate a STOP condition on I2C bus",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "START": {
    +                    "description": "Generate a START condition on I2C bus",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SS": {
    +                    "description": "Whether to stretch SCL low when data is not ready in slave mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GCEN": {
    +                    "description": "Whether or not to response to a General Call (0x00)",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PECEN": {
    +                    "description": "PEC Calculation Switch",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ARPEN": {
    +                    "description": "ARP protocol in SMBus switch",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SMBSEL": {
    +                    "description": "SMBusType Selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SMBEN": {
    +                    "description": "SMBus/I2C mode switch",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "I2CEN": {
    +                    "description": "I2C peripheral enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CTL1": {
    +              "description": "Control register 1",
    +              "offset": 4,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMALST": {
    +                    "description": "Flag indicating DMA last transfer",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "DMAON": {
    +                    "description": "DMA mode switch",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BUFIE": {
    +                    "description": "Buffer interrupt enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EVIE": {
    +                    "description": "Event interrupt enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "Error interrupt enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "I2CCLK": {
    +                    "description": "I2C Peripheral clock frequency",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "SADDR0": {
    +              "description": "Slave address register 0",
    +              "offset": 8,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADDFORMAT": {
    +                    "description": "Address mode for the I2C slave",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "ADDRESS9_8": {
    +                    "description": "Highest two bits of a 10-bit address",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "ADDRESS7_1": {
    +                    "description": "7-bit address or bits 7:1 of a 10-bit address",
    +                    "offset": 1,
    +                    "size": 7
    +                  },
    +                  "ADDRESS0": {
    +                    "description": "Bit 0 of a 10-bit address",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SADDR1": {
    +              "description": "Slave address register 1",
    +              "offset": 12,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADDRESS2": {
    +                    "description": "Second I2C address for the slave in Dual-Address mode",
    +                    "offset": 1,
    +                    "size": 7
    +                  },
    +                  "DUADEN": {
    +                    "description": "Dual-Address mode switch",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DATA": {
    +              "description": "Transfer buffer register",
    +              "offset": 16,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TRB": {
    +                    "description": "Transmission or reception data buffer register",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "STAT0": {
    +              "description": "Transfer status register 0",
    +              "offset": 20,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SMBALT": {
    +                    "description": "SMBus Alert status",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "SMBTO": {
    +                    "description": "Timeout signal in SMBus mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PECERR": {
    +                    "description": "PEC error when receiving data",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "OUERR": {
    +                    "description": "Over-run or under-run situation occurs in slave mode",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AERR": {
    +                    "description": "Acknowledge error",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LOSTARB": {
    +                    "description": "Arbitration Lost in master mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BERR": {
    +                    "description": "A bus error occurs indication a unexpected START or STOP condition on I2C bus",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TBE": {
    +                    "description": "I2C_DATA is Empty during transmitting",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RBNE": {
    +                    "description": "I2C_DATA is not Empty during receiving",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "STPDET": {
    +                    "description": "STOP condition detected in slave mode",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ADD10SEND": {
    +                    "description": "Header of 10-bit address is sent in master mode",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BTC": {
    +                    "description": "Byte transmission completed",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ADDSEND": {
    +                    "description": "Address is sent in master mode or received and matches in slave mode",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SBSEND": {
    +                    "description": "START condition sent out in master mode",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "STAT1": {
    +              "description": "Transfer status register 1",
    +              "offset": 24,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "PECV": {
    +                    "description": "Packet Error Checking Value that calculated by hardware when PEC is enabled",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "DUMODF": {
    +                    "description": "Dual Flag in slave mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "HSTSMB": {
    +                    "description": "SMBus Host Header detected in slave mode",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DEFSMB": {
    +                    "description": "Default address of SMBusDevice",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RXGC": {
    +                    "description": "General call address (00h) received",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TR": {
    +                    "description": "Whether the I2C is a transmitter or a receiver",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "I2CBSY": {
    +                    "description": "Busy flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MASTER": {
    +                    "description": "A flag indicating whether I2C block is in master or slave mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CKCFG": {
    +              "description": "Clock configure register",
    +              "offset": 28,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FAST": {
    +                    "description": "I2C speed selection in master mode",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "DTCY": {
    +                    "description": "Duty cycle in fast mode",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CLKC": {
    +                    "description": "I2C Clock control in master mode",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "RT": {
    +              "description": "Rise time register",
    +              "offset": 32,
    +              "size": 16,
    +              "reset_value": 2,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RISETIME": {
    +                    "description": "Maximum rise time in master mode",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIMER5": {
    +        "description": "Basic-timers",
    +        "children": {
    +          "registers": {
    +            "CTL0": {
    +              "description": "control register 0",
    +              "offset": 0,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARSE": {
    +                    "description": "Auto-reload shadow enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SPM": {
    +                    "description": "Single pulse mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "UPS": {
    +                    "description": "Update source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UPDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CTL1": {
    +              "description": "control register 1",
    +              "offset": 4,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MMC": {
    +                    "description": "Master mode control",
    +                    "offset": 4,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "DMAINTEN": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "UPDEN": {
    +                    "description": "Update DMA request enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "UPIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTF": {
    +              "description": "Interrupt flag register",
    +              "offset": 16,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "UPIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SWEVG": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "UPG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "Counter register",
    +              "offset": 36,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "Low counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "Prescaler register",
    +              "offset": 40,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value of the counter clock",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CAR": {
    +              "description": "Counter auto reload register",
    +              "offset": 44,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CARL": {
    +                    "description": "Counter auto reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "ECLIC": {
    +        "description": "Enhanced Core Local Interrupt Controller",
    +        "children": {
    +          "registers": {
    +            "CLICCFG": {
    +              "description": "cliccfg Register",
    +              "offset": 0,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NLBITS": {
    +                    "description": "NLBITS",
    +                    "offset": 1,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINFO": {
    +              "description": "clicinfo Register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "NUM_INTERRUPT": {
    +                    "description": "NUM_INTERRUPT",
    +                    "offset": 0,
    +                    "size": 13
    +                  },
    +                  "VERSION": {
    +                    "description": "VERSION",
    +                    "offset": 13,
    +                    "size": 8
    +                  },
    +                  "CLICINTCTLBITS": {
    +                    "description": "CLICINTCTLBITS",
    +                    "offset": 21,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "MTH": {
    +              "description": "MTH Register",
    +              "offset": 11,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MTH": {
    +                    "description": "MTH",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_0": {
    +              "description": "clicintip  Register",
    +              "offset": 4096,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_1": {
    +              "description": "clicintip  Register",
    +              "offset": 4100,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_2": {
    +              "description": "clicintip  Register",
    +              "offset": 4104,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_3": {
    +              "description": "clicintip  Register",
    +              "offset": 4108,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_4": {
    +              "description": "clicintip  Register",
    +              "offset": 4112,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_5": {
    +              "description": "clicintip  Register",
    +              "offset": 4116,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_6": {
    +              "description": "clicintip  Register",
    +              "offset": 4120,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_7": {
    +              "description": "clicintip  Register",
    +              "offset": 4124,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_8": {
    +              "description": "clicintip  Register",
    +              "offset": 4128,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_9": {
    +              "description": "clicintip  Register",
    +              "offset": 4132,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_10": {
    +              "description": "clicintip  Register",
    +              "offset": 4136,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_11": {
    +              "description": "clicintip  Register",
    +              "offset": 4140,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_12": {
    +              "description": "clicintip  Register",
    +              "offset": 4144,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_13": {
    +              "description": "clicintip  Register",
    +              "offset": 4148,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_14": {
    +              "description": "clicintip  Register",
    +              "offset": 4152,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_15": {
    +              "description": "clicintip  Register",
    +              "offset": 4156,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_16": {
    +              "description": "clicintip  Register",
    +              "offset": 4160,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_17": {
    +              "description": "clicintip  Register",
    +              "offset": 4164,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_18": {
    +              "description": "clicintip  Register",
    +              "offset": 4168,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_19": {
    +              "description": "clicintip  Register",
    +              "offset": 4172,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_20": {
    +              "description": "clicintip  Register",
    +              "offset": 4176,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_21": {
    +              "description": "clicintip  Register",
    +              "offset": 4180,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_22": {
    +              "description": "clicintip  Register",
    +              "offset": 4184,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_23": {
    +              "description": "clicintip  Register",
    +              "offset": 4188,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_24": {
    +              "description": "clicintip  Register",
    +              "offset": 4192,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_25": {
    +              "description": "clicintip  Register",
    +              "offset": 4196,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_26": {
    +              "description": "clicintip  Register",
    +              "offset": 4200,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_27": {
    +              "description": "clicintip  Register",
    +              "offset": 4204,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_28": {
    +              "description": "clicintip  Register",
    +              "offset": 4208,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_29": {
    +              "description": "clicintip  Register",
    +              "offset": 4212,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_30": {
    +              "description": "clicintip  Register",
    +              "offset": 4216,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_31": {
    +              "description": "clicintip  Register",
    +              "offset": 4220,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_32": {
    +              "description": "clicintip  Register",
    +              "offset": 4224,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_33": {
    +              "description": "clicintip  Register",
    +              "offset": 4228,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_34": {
    +              "description": "clicintip  Register",
    +              "offset": 4232,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_35": {
    +              "description": "clicintip  Register",
    +              "offset": 4236,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_36": {
    +              "description": "clicintip  Register",
    +              "offset": 4240,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_37": {
    +              "description": "clicintip  Register",
    +              "offset": 4244,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_38": {
    +              "description": "clicintip  Register",
    +              "offset": 4248,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_39": {
    +              "description": "clicintip  Register",
    +              "offset": 4252,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_40": {
    +              "description": "clicintip  Register",
    +              "offset": 4256,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_41": {
    +              "description": "clicintip  Register",
    +              "offset": 4260,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_42": {
    +              "description": "clicintip  Register",
    +              "offset": 4264,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_43": {
    +              "description": "clicintip  Register",
    +              "offset": 4268,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_44": {
    +              "description": "clicintip  Register",
    +              "offset": 4272,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_45": {
    +              "description": "clicintip  Register",
    +              "offset": 4276,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_46": {
    +              "description": "clicintip  Register",
    +              "offset": 4280,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_47": {
    +              "description": "clicintip  Register",
    +              "offset": 4284,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_48": {
    +              "description": "clicintip  Register",
    +              "offset": 4288,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_49": {
    +              "description": "clicintip  Register",
    +              "offset": 4292,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_50": {
    +              "description": "clicintip  Register",
    +              "offset": 4296,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_51": {
    +              "description": "clicintip  Register",
    +              "offset": 4300,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_52": {
    +              "description": "clicintip  Register",
    +              "offset": 4304,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_53": {
    +              "description": "clicintip  Register",
    +              "offset": 4308,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_54": {
    +              "description": "clicintip  Register",
    +              "offset": 4312,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_55": {
    +              "description": "clicintip  Register",
    +              "offset": 4316,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_56": {
    +              "description": "clicintip  Register",
    +              "offset": 4320,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_57": {
    +              "description": "clicintip  Register",
    +              "offset": 4324,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_58": {
    +              "description": "clicintip  Register",
    +              "offset": 4328,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_59": {
    +              "description": "clicintip  Register",
    +              "offset": 4332,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_60": {
    +              "description": "clicintip  Register",
    +              "offset": 4336,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_61": {
    +              "description": "clicintip  Register",
    +              "offset": 4340,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_62": {
    +              "description": "clicintip  Register",
    +              "offset": 4344,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_63": {
    +              "description": "clicintip  Register",
    +              "offset": 4348,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_64": {
    +              "description": "clicintip  Register",
    +              "offset": 4352,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_65": {
    +              "description": "clicintip  Register",
    +              "offset": 4356,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_66": {
    +              "description": "clicintip  Register",
    +              "offset": 4360,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_67": {
    +              "description": "clicintip  Register",
    +              "offset": 4364,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_68": {
    +              "description": "clicintip  Register",
    +              "offset": 4368,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_69": {
    +              "description": "clicintip  Register",
    +              "offset": 4372,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_70": {
    +              "description": "clicintip  Register",
    +              "offset": 4376,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_71": {
    +              "description": "clicintip  Register",
    +              "offset": 4380,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_72": {
    +              "description": "clicintip  Register",
    +              "offset": 4384,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_73": {
    +              "description": "clicintip  Register",
    +              "offset": 4388,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_74": {
    +              "description": "clicintip  Register",
    +              "offset": 4392,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_75": {
    +              "description": "clicintip  Register",
    +              "offset": 4396,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_76": {
    +              "description": "clicintip  Register",
    +              "offset": 4400,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_77": {
    +              "description": "clicintip  Register",
    +              "offset": 4404,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_78": {
    +              "description": "clicintip  Register",
    +              "offset": 4408,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_79": {
    +              "description": "clicintip  Register",
    +              "offset": 4412,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_80": {
    +              "description": "clicintip  Register",
    +              "offset": 4416,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_81": {
    +              "description": "clicintip  Register",
    +              "offset": 4420,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_82": {
    +              "description": "clicintip  Register",
    +              "offset": 4424,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_83": {
    +              "description": "clicintip  Register",
    +              "offset": 4428,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_84": {
    +              "description": "clicintip  Register",
    +              "offset": 4432,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_85": {
    +              "description": "clicintip  Register",
    +              "offset": 4440,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIP_86": {
    +              "description": "clicintip  Register",
    +              "offset": 4444,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IP": {
    +                    "description": "IP",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_0": {
    +              "description": "clicintie Register",
    +              "offset": 4097,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_1": {
    +              "description": "clicintie Register",
    +              "offset": 4101,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_2": {
    +              "description": "clicintie Register",
    +              "offset": 4105,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_3": {
    +              "description": "clicintie Register",
    +              "offset": 4109,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_4": {
    +              "description": "clicintie Register",
    +              "offset": 4113,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_5": {
    +              "description": "clicintie Register",
    +              "offset": 4117,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_6": {
    +              "description": "clicintie Register",
    +              "offset": 4121,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_7": {
    +              "description": "clicintie Register",
    +              "offset": 4125,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_8": {
    +              "description": "clicintie Register",
    +              "offset": 4129,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_9": {
    +              "description": "clicintie Register",
    +              "offset": 4133,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_10": {
    +              "description": "clicintie Register",
    +              "offset": 4137,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_11": {
    +              "description": "clicintie Register",
    +              "offset": 4141,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_12": {
    +              "description": "clicintie Register",
    +              "offset": 4145,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_13": {
    +              "description": "clicintie Register",
    +              "offset": 4149,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_14": {
    +              "description": "clicintie Register",
    +              "offset": 4153,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_15": {
    +              "description": "clicintie Register",
    +              "offset": 4157,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_16": {
    +              "description": "clicintie Register",
    +              "offset": 4161,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_17": {
    +              "description": "clicintie Register",
    +              "offset": 4165,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_18": {
    +              "description": "clicintie Register",
    +              "offset": 4169,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_19": {
    +              "description": "clicintie Register",
    +              "offset": 4173,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_20": {
    +              "description": "clicintie Register",
    +              "offset": 4177,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_21": {
    +              "description": "clicintie Register",
    +              "offset": 4181,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_22": {
    +              "description": "clicintie Register",
    +              "offset": 4185,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_23": {
    +              "description": "clicintie Register",
    +              "offset": 4189,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_24": {
    +              "description": "clicintie Register",
    +              "offset": 4193,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_25": {
    +              "description": "clicintie Register",
    +              "offset": 4197,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_26": {
    +              "description": "clicintie Register",
    +              "offset": 4201,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_27": {
    +              "description": "clicintie Register",
    +              "offset": 4205,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_28": {
    +              "description": "clicintie Register",
    +              "offset": 4209,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_29": {
    +              "description": "clicintie Register",
    +              "offset": 4213,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_30": {
    +              "description": "clicintie Register",
    +              "offset": 4217,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_31": {
    +              "description": "clicintie Register",
    +              "offset": 4221,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_32": {
    +              "description": "clicintie Register",
    +              "offset": 4225,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_33": {
    +              "description": "clicintie Register",
    +              "offset": 4229,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_34": {
    +              "description": "clicintie Register",
    +              "offset": 4233,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_35": {
    +              "description": "clicintie Register",
    +              "offset": 4237,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_36": {
    +              "description": "clicintie Register",
    +              "offset": 4241,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_37": {
    +              "description": "clicintie Register",
    +              "offset": 4245,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_38": {
    +              "description": "clicintie Register",
    +              "offset": 4249,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_39": {
    +              "description": "clicintie Register",
    +              "offset": 4253,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_40": {
    +              "description": "clicintie Register",
    +              "offset": 4257,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_41": {
    +              "description": "clicintie Register",
    +              "offset": 4261,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_42": {
    +              "description": "clicintie Register",
    +              "offset": 4265,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_43": {
    +              "description": "clicintie Register",
    +              "offset": 4269,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_44": {
    +              "description": "clicintie Register",
    +              "offset": 4273,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_45": {
    +              "description": "clicintie Register",
    +              "offset": 4277,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_46": {
    +              "description": "clicintie Register",
    +              "offset": 4281,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_47": {
    +              "description": "clicintie Register",
    +              "offset": 4285,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_48": {
    +              "description": "clicintie Register",
    +              "offset": 4289,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_49": {
    +              "description": "clicintie Register",
    +              "offset": 4293,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_50": {
    +              "description": "clicintie Register",
    +              "offset": 4297,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_51": {
    +              "description": "clicintie Register",
    +              "offset": 4301,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_52": {
    +              "description": "clicintie Register",
    +              "offset": 4305,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_53": {
    +              "description": "clicintie Register",
    +              "offset": 4309,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_54": {
    +              "description": "clicintie Register",
    +              "offset": 4313,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_55": {
    +              "description": "clicintie Register",
    +              "offset": 4317,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_56": {
    +              "description": "clicintie Register",
    +              "offset": 4321,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_57": {
    +              "description": "clicintie Register",
    +              "offset": 4325,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_58": {
    +              "description": "clicintie Register",
    +              "offset": 4329,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_59": {
    +              "description": "clicintie Register",
    +              "offset": 4333,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_60": {
    +              "description": "clicintie Register",
    +              "offset": 4337,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_61": {
    +              "description": "clicintie Register",
    +              "offset": 4341,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_62": {
    +              "description": "clicintie Register",
    +              "offset": 4345,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_63": {
    +              "description": "clicintie Register",
    +              "offset": 4349,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_64": {
    +              "description": "clicintie Register",
    +              "offset": 4353,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_65": {
    +              "description": "clicintie Register",
    +              "offset": 4357,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_66": {
    +              "description": "clicintie Register",
    +              "offset": 4361,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_67": {
    +              "description": "clicintie Register",
    +              "offset": 4365,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_68": {
    +              "description": "clicintie Register",
    +              "offset": 4369,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_69": {
    +              "description": "clicintie Register",
    +              "offset": 4373,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_70": {
    +              "description": "clicintie Register",
    +              "offset": 4377,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_71": {
    +              "description": "clicintie Register",
    +              "offset": 4381,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_72": {
    +              "description": "clicintie Register",
    +              "offset": 4385,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_73": {
    +              "description": "clicintie Register",
    +              "offset": 4389,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_74": {
    +              "description": "clicintie Register",
    +              "offset": 4393,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_75": {
    +              "description": "clicintie Register",
    +              "offset": 4397,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_76": {
    +              "description": "clicintie Register",
    +              "offset": 4401,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_77": {
    +              "description": "clicintie Register",
    +              "offset": 4405,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_78": {
    +              "description": "clicintie Register",
    +              "offset": 4409,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_79": {
    +              "description": "clicintie Register",
    +              "offset": 4413,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_80": {
    +              "description": "clicintie Register",
    +              "offset": 4417,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_81": {
    +              "description": "clicintie Register",
    +              "offset": 4421,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_82": {
    +              "description": "clicintie Register",
    +              "offset": 4425,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_83": {
    +              "description": "clicintie Register",
    +              "offset": 4429,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_84": {
    +              "description": "clicintie Register",
    +              "offset": 4433,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_85": {
    +              "description": "clicintie Register",
    +              "offset": 4437,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTIE_86": {
    +              "description": "clicintie Register",
    +              "offset": 4441,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IE": {
    +                    "description": "IE",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_0": {
    +              "description": "clicintattr Register",
    +              "offset": 4098,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_1": {
    +              "description": "clicintattr Register",
    +              "offset": 4102,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_2": {
    +              "description": "clicintattr Register",
    +              "offset": 4106,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_3": {
    +              "description": "clicintattr Register",
    +              "offset": 4110,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_4": {
    +              "description": "clicintattr Register",
    +              "offset": 4114,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_5": {
    +              "description": "clicintattr Register",
    +              "offset": 4118,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_6": {
    +              "description": "clicintattr Register",
    +              "offset": 4122,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_7": {
    +              "description": "clicintattr Register",
    +              "offset": 4126,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_8": {
    +              "description": "clicintattr Register",
    +              "offset": 4130,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_9": {
    +              "description": "clicintattr Register",
    +              "offset": 4134,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_10": {
    +              "description": "clicintattr Register",
    +              "offset": 4138,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_11": {
    +              "description": "clicintattr Register",
    +              "offset": 4142,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_12": {
    +              "description": "clicintattr Register",
    +              "offset": 4146,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_13": {
    +              "description": "clicintattr Register",
    +              "offset": 4150,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_14": {
    +              "description": "clicintattr Register",
    +              "offset": 4154,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_15": {
    +              "description": "clicintattr Register",
    +              "offset": 4158,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_16": {
    +              "description": "clicintattr Register",
    +              "offset": 4162,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_17": {
    +              "description": "clicintattr Register",
    +              "offset": 4166,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_18": {
    +              "description": "clicintattr Register",
    +              "offset": 4170,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_19": {
    +              "description": "clicintattr Register",
    +              "offset": 4174,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_20": {
    +              "description": "clicintattr Register",
    +              "offset": 4178,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_21": {
    +              "description": "clicintattr Register",
    +              "offset": 4182,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_22": {
    +              "description": "clicintattr Register",
    +              "offset": 4186,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_23": {
    +              "description": "clicintattr Register",
    +              "offset": 4190,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_24": {
    +              "description": "clicintattr Register",
    +              "offset": 4194,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_25": {
    +              "description": "clicintattr Register",
    +              "offset": 4198,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_26": {
    +              "description": "clicintattr Register",
    +              "offset": 4202,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_27": {
    +              "description": "clicintattr Register",
    +              "offset": 4206,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_28": {
    +              "description": "clicintattr Register",
    +              "offset": 4210,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_29": {
    +              "description": "clicintattr Register",
    +              "offset": 4214,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_30": {
    +              "description": "clicintattr Register",
    +              "offset": 4218,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_31": {
    +              "description": "clicintattr Register",
    +              "offset": 4222,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_32": {
    +              "description": "clicintattr Register",
    +              "offset": 4226,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_33": {
    +              "description": "clicintattr Register",
    +              "offset": 4230,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_34": {
    +              "description": "clicintattr Register",
    +              "offset": 4234,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_35": {
    +              "description": "clicintattr Register",
    +              "offset": 4238,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_36": {
    +              "description": "clicintattr Register",
    +              "offset": 4242,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_37": {
    +              "description": "clicintattr Register",
    +              "offset": 4246,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_38": {
    +              "description": "clicintattr Register",
    +              "offset": 4250,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_39": {
    +              "description": "clicintattr Register",
    +              "offset": 4254,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_40": {
    +              "description": "clicintattr Register",
    +              "offset": 4258,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_41": {
    +              "description": "clicintattr Register",
    +              "offset": 4262,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_42": {
    +              "description": "clicintattr Register",
    +              "offset": 4266,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_43": {
    +              "description": "clicintattr Register",
    +              "offset": 4270,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_44": {
    +              "description": "clicintattr Register",
    +              "offset": 4274,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_45": {
    +              "description": "clicintattr Register",
    +              "offset": 4278,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_46": {
    +              "description": "clicintattr Register",
    +              "offset": 4282,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_47": {
    +              "description": "clicintattr Register",
    +              "offset": 4286,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_48": {
    +              "description": "clicintattr Register",
    +              "offset": 4290,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_49": {
    +              "description": "clicintattr Register",
    +              "offset": 4294,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_50": {
    +              "description": "clicintattr Register",
    +              "offset": 4298,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_51": {
    +              "description": "clicintattr Register",
    +              "offset": 4302,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_52": {
    +              "description": "clicintattr Register",
    +              "offset": 4306,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_53": {
    +              "description": "clicintattr Register",
    +              "offset": 4310,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_54": {
    +              "description": "clicintattr Register",
    +              "offset": 4314,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_55": {
    +              "description": "clicintattr Register",
    +              "offset": 4318,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_56": {
    +              "description": "clicintattr Register",
    +              "offset": 4322,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_57": {
    +              "description": "clicintattr Register",
    +              "offset": 4326,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_58": {
    +              "description": "clicintattr Register",
    +              "offset": 4330,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_59": {
    +              "description": "clicintattr Register",
    +              "offset": 4334,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_60": {
    +              "description": "clicintattr Register",
    +              "offset": 4338,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_61": {
    +              "description": "clicintattr Register",
    +              "offset": 4342,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_62": {
    +              "description": "clicintattr Register",
    +              "offset": 4346,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_63": {
    +              "description": "clicintattr Register",
    +              "offset": 4350,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_64": {
    +              "description": "clicintattr Register",
    +              "offset": 4354,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_65": {
    +              "description": "clicintattr Register",
    +              "offset": 4358,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_66": {
    +              "description": "clicintattr Register",
    +              "offset": 4362,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_67": {
    +              "description": "clicintattr Register",
    +              "offset": 4366,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_68": {
    +              "description": "clicintattr Register",
    +              "offset": 4370,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_69": {
    +              "description": "clicintattr Register",
    +              "offset": 4374,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_70": {
    +              "description": "clicintattr Register",
    +              "offset": 4378,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_71": {
    +              "description": "clicintattr Register",
    +              "offset": 4382,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_72": {
    +              "description": "clicintattr Register",
    +              "offset": 4386,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_73": {
    +              "description": "clicintattr Register",
    +              "offset": 4390,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_74": {
    +              "description": "clicintattr Register",
    +              "offset": 4394,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_75": {
    +              "description": "clicintattr Register",
    +              "offset": 4398,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_76": {
    +              "description": "clicintattr Register",
    +              "offset": 4402,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_77": {
    +              "description": "clicintattr Register",
    +              "offset": 4406,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_78": {
    +              "description": "clicintattr Register",
    +              "offset": 4410,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_79": {
    +              "description": "clicintattr Register",
    +              "offset": 4414,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_80": {
    +              "description": "clicintattr Register",
    +              "offset": 4418,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_81": {
    +              "description": "clicintattr Register",
    +              "offset": 4422,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_82": {
    +              "description": "clicintattr Register",
    +              "offset": 4426,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_83": {
    +              "description": "clicintattr Register",
    +              "offset": 4430,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_84": {
    +              "description": "clicintattr Register",
    +              "offset": 4434,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_85": {
    +              "description": "clicintattr Register",
    +              "offset": 4438,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTATTR_86": {
    +              "description": "clicintattr Register",
    +              "offset": 4442,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHV": {
    +                    "description": "SHV",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TRIG": {
    +                    "description": "TRIG",
    +                    "offset": 1,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_0": {
    +              "description": "clicintctl Register",
    +              "offset": 4099,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_1": {
    +              "description": "clicintctl Register",
    +              "offset": 4103,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_2": {
    +              "description": "clicintctl Register",
    +              "offset": 4107,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_3": {
    +              "description": "clicintctl Register",
    +              "offset": 4111,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_4": {
    +              "description": "clicintctl Register",
    +              "offset": 4115,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_5": {
    +              "description": "clicintctl Register",
    +              "offset": 4119,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_6": {
    +              "description": "clicintctl Register",
    +              "offset": 4123,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_7": {
    +              "description": "clicintctl Register",
    +              "offset": 4127,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_8": {
    +              "description": "clicintctl Register",
    +              "offset": 4131,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_9": {
    +              "description": "clicintctl Register",
    +              "offset": 4135,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_10": {
    +              "description": "clicintctl Register",
    +              "offset": 4139,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_11": {
    +              "description": "clicintctl Register",
    +              "offset": 4143,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_12": {
    +              "description": "clicintctl Register",
    +              "offset": 4147,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_13": {
    +              "description": "clicintctl Register",
    +              "offset": 4151,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_14": {
    +              "description": "clicintctl Register",
    +              "offset": 4155,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_15": {
    +              "description": "clicintctl Register",
    +              "offset": 4159,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_16": {
    +              "description": "clicintctl Register",
    +              "offset": 4163,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_17": {
    +              "description": "clicintctl Register",
    +              "offset": 4167,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_18": {
    +              "description": "clicintctl Register",
    +              "offset": 4171,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_19": {
    +              "description": "clicintctl Register",
    +              "offset": 4175,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_20": {
    +              "description": "clicintctl Register",
    +              "offset": 4179,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_21": {
    +              "description": "clicintctl Register",
    +              "offset": 4183,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_22": {
    +              "description": "clicintctl Register",
    +              "offset": 4187,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_23": {
    +              "description": "clicintctl Register",
    +              "offset": 4191,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_24": {
    +              "description": "clicintctl Register",
    +              "offset": 4195,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_25": {
    +              "description": "clicintctl Register",
    +              "offset": 4199,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_26": {
    +              "description": "clicintctl Register",
    +              "offset": 4203,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_27": {
    +              "description": "clicintctl Register",
    +              "offset": 4207,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_28": {
    +              "description": "clicintctl Register",
    +              "offset": 4211,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_29": {
    +              "description": "clicintctl Register",
    +              "offset": 4215,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_30": {
    +              "description": "clicintctl Register",
    +              "offset": 4219,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_31": {
    +              "description": "clicintctl Register",
    +              "offset": 4223,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_32": {
    +              "description": "clicintctl Register",
    +              "offset": 4227,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_33": {
    +              "description": "clicintctl Register",
    +              "offset": 4231,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_34": {
    +              "description": "clicintctl Register",
    +              "offset": 4235,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_35": {
    +              "description": "clicintctl Register",
    +              "offset": 4239,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_36": {
    +              "description": "clicintctl Register",
    +              "offset": 4243,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_37": {
    +              "description": "clicintctl Register",
    +              "offset": 4247,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_38": {
    +              "description": "clicintctl Register",
    +              "offset": 4251,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_39": {
    +              "description": "clicintctl Register",
    +              "offset": 4255,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_40": {
    +              "description": "clicintctl Register",
    +              "offset": 4259,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_41": {
    +              "description": "clicintctl Register",
    +              "offset": 4263,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_42": {
    +              "description": "clicintctl Register",
    +              "offset": 4267,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_43": {
    +              "description": "clicintctl Register",
    +              "offset": 4271,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_44": {
    +              "description": "clicintctl Register",
    +              "offset": 4275,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_45": {
    +              "description": "clicintctl Register",
    +              "offset": 4279,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_46": {
    +              "description": "clicintctl Register",
    +              "offset": 4283,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_47": {
    +              "description": "clicintctl Register",
    +              "offset": 4287,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_48": {
    +              "description": "clicintctl Register",
    +              "offset": 4291,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_49": {
    +              "description": "clicintctl Register",
    +              "offset": 4295,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_50": {
    +              "description": "clicintctl Register",
    +              "offset": 4299,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_51": {
    +              "description": "clicintctl Register",
    +              "offset": 4303,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_52": {
    +              "description": "clicintctl Register",
    +              "offset": 4307,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_53": {
    +              "description": "clicintctl Register",
    +              "offset": 4311,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_54": {
    +              "description": "clicintctl Register",
    +              "offset": 4315,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_55": {
    +              "description": "clicintctl Register",
    +              "offset": 4319,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_56": {
    +              "description": "clicintctl Register",
    +              "offset": 4323,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_57": {
    +              "description": "clicintctl Register",
    +              "offset": 4327,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_58": {
    +              "description": "clicintctl Register",
    +              "offset": 4331,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_59": {
    +              "description": "clicintctl Register",
    +              "offset": 4335,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_60": {
    +              "description": "clicintctl Register",
    +              "offset": 4339,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_61": {
    +              "description": "clicintctl Register",
    +              "offset": 4343,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_62": {
    +              "description": "clicintctl Register",
    +              "offset": 4347,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_63": {
    +              "description": "clicintctl Register",
    +              "offset": 4351,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_64": {
    +              "description": "clicintctl Register",
    +              "offset": 4355,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_65": {
    +              "description": "clicintctl Register",
    +              "offset": 4359,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_66": {
    +              "description": "clicintctl Register",
    +              "offset": 4363,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_67": {
    +              "description": "clicintctl Register",
    +              "offset": 4367,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_68": {
    +              "description": "clicintctl Register",
    +              "offset": 4371,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_69": {
    +              "description": "clicintctl Register",
    +              "offset": 4375,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_70": {
    +              "description": "clicintctl Register",
    +              "offset": 4379,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_71": {
    +              "description": "clicintctl Register",
    +              "offset": 4383,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_72": {
    +              "description": "clicintctl Register",
    +              "offset": 4387,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_73": {
    +              "description": "clicintctl Register",
    +              "offset": 4391,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_74": {
    +              "description": "clicintctl Register",
    +              "offset": 4395,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_75": {
    +              "description": "clicintctl Register",
    +              "offset": 4399,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_76": {
    +              "description": "clicintctl Register",
    +              "offset": 4403,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_77": {
    +              "description": "clicintctl Register",
    +              "offset": 4407,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_78": {
    +              "description": "clicintctl Register",
    +              "offset": 4411,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_79": {
    +              "description": "clicintctl Register",
    +              "offset": 4415,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_80": {
    +              "description": "clicintctl Register",
    +              "offset": 4419,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_81": {
    +              "description": "clicintctl Register",
    +              "offset": 4423,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_82": {
    +              "description": "clicintctl Register",
    +              "offset": 4427,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_83": {
    +              "description": "clicintctl Register",
    +              "offset": 4431,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_84": {
    +              "description": "clicintctl Register",
    +              "offset": 4435,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_85": {
    +              "description": "clicintctl Register",
    +              "offset": 4439,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLICINTCTL_86": {
    +              "description": "clicintctl Register",
    +              "offset": 4443,
    +              "size": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEVEL_PRIORITY": {
    +                    "description": "LEVEL_PRIORITY",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "PMU": {
    +        "description": "Power management unit",
    +        "children": {
    +          "registers": {
    +            "CTL": {
    +              "description": "power control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BKPWEN": {
    +                    "description": "Backup Domain Write Enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LVDT": {
    +                    "description": "Low Voltage Detector Threshold",
    +                    "offset": 5,
    +                    "size": 3
    +                  },
    +                  "LVDEN": {
    +                    "description": "Low Voltage Detector Enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "STBRST": {
    +                    "description": "Standby Flag Reset",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "WURST": {
    +                    "description": "Wakeup Flag Reset",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "STBMOD": {
    +                    "description": "Standby Mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "LDOLP": {
    +                    "description": "LDO Low Power Mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CS": {
    +              "description": "power control/status register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WUPEN": {
    +                    "description": "Enable WKUP pin",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LVDF": {
    +                    "description": "Low Voltage Detector Status Flag",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "STBF": {
    +                    "description": "Standby flag",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "WUF": {
    +                    "description": "Wakeup flag",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "RCU": {
    +        "description": "Reset and clock unit",
    +        "children": {
    +          "registers": {
    +            "CTL": {
    +              "description": "Control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 131,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IRC8MEN": {
    +                    "description": "Internal 8MHz RC oscillator Enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "IRC8MSTB": {
    +                    "description": "IRC8M Internal 8MHz RC Oscillator stabilization Flag",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRC8MADJ": {
    +                    "description": "Internal 8MHz RC Oscillator clock trim adjust value",
    +                    "offset": 3,
    +                    "size": 5
    +                  },
    +                  "IRC8MCALIB": {
    +                    "description": "Internal 8MHz RC Oscillator calibration value register",
    +                    "offset": 8,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "HXTALEN": {
    +                    "description": "External High Speed oscillator Enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "HXTALSTB": {
    +                    "description": "External crystal oscillator (HXTAL) clock stabilization flag",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HXTALBPS": {
    +                    "description": "External crystal oscillator (HXTAL) clock bypass mode enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "CKMEN": {
    +                    "description": "HXTAL Clock Monitor Enable",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "PLLEN": {
    +                    "description": "PLL enable",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "PLLSTB": {
    +                    "description": "PLL Clock Stabilization Flag",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PLL1EN": {
    +                    "description": "PLL1 enable",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "PLL1STB": {
    +                    "description": "PLL1 Clock Stabilization Flag",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PLL2EN": {
    +                    "description": "PLL2 enable",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "PLL2STB": {
    +                    "description": "PLL2 Clock Stabilization Flag",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CFG0": {
    +              "description": "Clock configuration register 0\n          (RCU_CFG0)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SCS": {
    +                    "description": "System clock switch",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "SCSS": {
    +                    "description": "System clock switch status",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "AHBPSC": {
    +                    "description": "AHB prescaler selection",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "APB1PSC": {
    +                    "description": "APB1 prescaler selection",
    +                    "offset": 8,
    +                    "size": 3
    +                  },
    +                  "APB2PSC": {
    +                    "description": "APB2 prescaler selection",
    +                    "offset": 11,
    +                    "size": 3
    +                  },
    +                  "ADCPSC_1_0": {
    +                    "description": "ADC clock prescaler selection",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "PLLSEL": {
    +                    "description": "PLL Clock Source Selection",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "PREDV0_LSB": {
    +                    "description": "The LSB of PREDV0 division factor",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "PLLMF_3_0": {
    +                    "description": "The PLL clock multiplication factor",
    +                    "offset": 18,
    +                    "size": 4
    +                  },
    +                  "USBFSPSC": {
    +                    "description": "USBFS clock prescaler selection",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "CKOUT0SEL": {
    +                    "description": "CKOUT0 Clock Source Selection",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "ADCPSC_2": {
    +                    "description": "Bit 2 of ADCPSC",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "PLLMF_4": {
    +                    "description": "Bit 4 of PLLMF",
    +                    "offset": 29,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INT": {
    +              "description": "Clock interrupt register\n          (RCU_INT)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IRC40KSTBIF": {
    +                    "description": "IRC40K stabilization interrupt flag",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LXTALSTBIF": {
    +                    "description": "LXTAL stabilization interrupt flag",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRC8MSTBIF": {
    +                    "description": "IRC8M stabilization interrupt flag",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HXTALSTBIF": {
    +                    "description": "HXTAL stabilization interrupt flag",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PLLSTBIF": {
    +                    "description": "PLL stabilization interrupt flag",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PLL1STBIF": {
    +                    "description": "PLL1 stabilization interrupt flag",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PLL2STBIF": {
    +                    "description": "PLL2 stabilization interrupt flag",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CKMIF": {
    +                    "description": "HXTAL Clock Stuck Interrupt Flag",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRC40KSTBIE": {
    +                    "description": "IRC40K Stabilization interrupt enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LXTALSTBIE": {
    +                    "description": "LXTAL Stabilization Interrupt Enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "IRC8MSTBIE": {
    +                    "description": "IRC8M Stabilization Interrupt Enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "HXTALSTBIE": {
    +                    "description": "HXTAL Stabilization Interrupt Enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "PLLSTBIE": {
    +                    "description": "PLL Stabilization Interrupt Enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "PLL1STBIE": {
    +                    "description": "PLL1 Stabilization Interrupt Enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "PLL2STBIE": {
    +                    "description": "PLL2 Stabilization Interrupt Enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "IRC40KSTBIC": {
    +                    "description": "IRC40K Stabilization Interrupt Clear",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "LXTALSTBIC": {
    +                    "description": "LXTAL Stabilization Interrupt Clear",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "IRC8MSTBIC": {
    +                    "description": "IRC8M Stabilization Interrupt Clear",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "HXTALSTBIC": {
    +                    "description": "HXTAL Stabilization Interrupt Clear",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "PLLSTBIC": {
    +                    "description": "PLL stabilization Interrupt Clear",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "PLL1STBIC": {
    +                    "description": "PLL1 stabilization Interrupt Clear",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "PLL2STBIC": {
    +                    "description": "PLL2 stabilization Interrupt Clear",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CKMIC": {
    +                    "description": "HXTAL Clock Stuck Interrupt Clear",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "APB2RST": {
    +              "description": "APB2 reset register\n          (RCU_APB2RST)",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AFRST": {
    +                    "description": "Alternate function I/O reset",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PARST": {
    +                    "description": "GPIO port A reset",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PBRST": {
    +                    "description": "GPIO port B reset",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PCRST": {
    +                    "description": "GPIO port C reset",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "PDRST": {
    +                    "description": "GPIO port D reset",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PERST": {
    +                    "description": "GPIO port E reset",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ADC0RST": {
    +                    "description": "ADC0 reset",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ADC1RST": {
    +                    "description": "ADC1 reset",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TIMER0RST": {
    +                    "description": "Timer 0 reset",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SPI0RST": {
    +                    "description": "SPI0 reset",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "USART0RST": {
    +                    "description": "USART0 Reset",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "APB1RST": {
    +              "description": "APB1 reset register\n          (RCU_APB1RST)",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER1RST": {
    +                    "description": "TIMER1 timer reset",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TIMER2RST": {
    +                    "description": "TIMER2 timer reset",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TIMER3RST": {
    +                    "description": "TIMER3 timer reset",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TIMER4RST": {
    +                    "description": "TIMER4 timer reset",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TIMER5RST": {
    +                    "description": "TIMER5 timer reset",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TIMER6RST": {
    +                    "description": "TIMER6 timer reset",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "WWDGTRST": {
    +                    "description": "Window watchdog timer reset",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SPI1RST": {
    +                    "description": "SPI1 reset",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SPI2RST": {
    +                    "description": "SPI2 reset",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "USART1RST": {
    +                    "description": "USART1 reset",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "USART2RST": {
    +                    "description": "USART2 reset",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "UART3RST": {
    +                    "description": "UART3 reset",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "UART4RST": {
    +                    "description": "UART4 reset",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "I2C0RST": {
    +                    "description": "I2C0 reset",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "I2C1RST": {
    +                    "description": "I2C1 reset",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "CAN0RST": {
    +                    "description": "CAN0 reset",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "CAN1RST": {
    +                    "description": "CAN1 reset",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "BKPIRST": {
    +                    "description": "Backup interface reset",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "PMURST": {
    +                    "description": "Power control reset",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "DACRST": {
    +                    "description": "DAC reset",
    +                    "offset": 29,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AHBEN": {
    +              "description": "AHB enable register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 20,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA0EN": {
    +                    "description": "DMA0 clock enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DMA1EN": {
    +                    "description": "DMA1 clock enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SRAMSPEN": {
    +                    "description": "SRAM interface clock enable when sleep mode",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FMCSPEN": {
    +                    "description": "FMC clock enable when sleep mode",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CRCEN": {
    +                    "description": "CRC clock enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EXMCEN": {
    +                    "description": "EXMC clock enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "USBFSEN": {
    +                    "description": "USBFS clock enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "APB2EN": {
    +              "description": "APB2 clock enable register\n          (RCU_APB2EN)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AFEN": {
    +                    "description": "Alternate function IO clock enable ",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PAEN": {
    +                    "description": "GPIO port A clock enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PBEN": {
    +                    "description": "GPIO port B clock enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PCEN": {
    +                    "description": "GPIO port C clock enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "PDEN": {
    +                    "description": "GPIO port D clock enable ",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PEEN": {
    +                    "description": "GPIO port E clock enable ",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ADC0EN": {
    +                    "description": "ADC0 clock enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ADC1EN": {
    +                    "description": "ADC1 clock enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TIMER0EN": {
    +                    "description": "TIMER0 clock enable ",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SPI0EN": {
    +                    "description": "SPI0 clock enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "USART0EN": {
    +                    "description": "USART0 clock enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "APB1EN": {
    +              "description": "APB1 clock enable register\n          (RCU_APB1EN)",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER1EN": {
    +                    "description": "TIMER1 timer clock enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TIMER2EN": {
    +                    "description": "TIMER2 timer clock enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TIMER3EN": {
    +                    "description": "TIMER3 timer clock enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TIMER4EN": {
    +                    "description": "TIMER4 timer clock enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TIMER5EN": {
    +                    "description": "TIMER5 timer clock enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TIMER6EN": {
    +                    "description": "TIMER6 timer clock enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "WWDGTEN": {
    +                    "description": "Window watchdog timer clock enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SPI1EN": {
    +                    "description": "SPI1 clock enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SPI2EN": {
    +                    "description": "SPI2 clock enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "USART1EN": {
    +                    "description": "USART1 clock enable",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "USART2EN": {
    +                    "description": "USART2 clock enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "UART3EN": {
    +                    "description": "UART3 clock enable",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "UART4EN": {
    +                    "description": "UART4 clock enable",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "I2C0EN": {
    +                    "description": "I2C0 clock enable",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "I2C1EN": {
    +                    "description": "I2C1 clock enable",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "CAN0EN": {
    +                    "description": "CAN0 clock enable",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "CAN1EN": {
    +                    "description": "CAN1 clock enable",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "BKPIEN": {
    +                    "description": "Backup interface clock enable ",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "PMUEN": {
    +                    "description": "Power control clock enable ",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "DACEN": {
    +                    "description": "DAC clock enable",
    +                    "offset": 29,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BDCTL": {
    +              "description": "Backup domain control register\n          (RCU_BDCTL)",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 24,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LXTALEN": {
    +                    "description": "LXTAL enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "LXTALSTB": {
    +                    "description": "External low-speed oscillator stabilization",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LXTALBPS": {
    +                    "description": "LXTAL bypass mode enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTCSRC": {
    +                    "description": "RTC clock entry selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "RTCEN": {
    +                    "description": "RTC clock enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "BKPRST": {
    +                    "description": "Backup domain reset",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RSTSCK": {
    +              "description": "Reset source /clock register\n          (RCU_RSTSCK)",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 201326592,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IRC40KEN": {
    +                    "description": "IRC40K enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "IRC40KSTB": {
    +                    "description": "IRC40K stabilization",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RSTFC": {
    +                    "description": "Reset flag clear",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "EPRSTF": {
    +                    "description": "External PIN reset flag",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PORRSTF": {
    +                    "description": "Power reset flag",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SWRSTF": {
    +                    "description": "Software reset flag",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FWDGTRSTF": {
    +                    "description": "Free Watchdog timer reset flag",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "WWDGTRSTF": {
    +                    "description": "Window watchdog timer reset flag",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LPRSTF": {
    +                    "description": "Low-power reset flag",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "AHBRST": {
    +              "description": "AHB reset register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "USBFSRST": {
    +                    "description": "USBFS reset",
    +                    "offset": 12,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CFG1": {
    +              "description": "Clock Configuration register 1",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PREDV0": {
    +                    "description": "PREDV0 division factor",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "PREDV1": {
    +                    "description": "PREDV1 division factor",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "PLL1MF": {
    +                    "description": "The PLL1 clock multiplication factor",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "PLL2MF": {
    +                    "description": "The PLL2 clock multiplication factor",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "PREDV0SEL": {
    +                    "description": "PREDV0 input Clock Source Selection",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "I2S1SEL": {
    +                    "description": "I2S1 Clock Source Selection",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "I2S2SEL": {
    +                    "description": "I2S2 Clock Source Selection",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DSV": {
    +              "description": "Deep sleep mode Voltage register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DSLPVS": {
    +                    "description": "Deep-sleep mode voltage select",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "RTC": {
    +        "description": "Real-time clock",
    +        "children": {
    +          "registers": {
    +            "INTEN": {
    +              "description": "RTC interrupt enable register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OVIE": {
    +                    "description": "Overflow interrupt enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ALRMIE": {
    +                    "description": "Alarm interrupt enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SCIE": {
    +                    "description": "Second interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CTL": {
    +              "description": "control register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 32,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LWOFF": {
    +                    "description": "Last write operation finished flag",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CMF": {
    +                    "description": "Configuration mode flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RSYNF": {
    +                    "description": "Registers synchronized flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OVIF": {
    +                    "description": "Overflow interrupt flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ALRMIF": {
    +                    "description": "Alarm interrupt flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SCIF": {
    +                    "description": "Sencond interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PSCH": {
    +              "description": "RTC prescaler high register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "PSCL": {
    +              "description": " RTC prescaler low\n          register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 32768,
    +              "reset_mask": 4294967295
    +            },
    +            "DIVH": {
    +              "description": "RTC divider high register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DIV": {
    +                    "description": "RTC divider value high",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "DIVL": {
    +              "description": "RTC divider low register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 32768,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "DIV": {
    +                    "description": "RTC divider value low",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CNTH": {
    +              "description": "RTC counter high register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "RTC counter value high",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CNTL": {
    +              "description": "RTC counter low register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "RTC counter value low",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SPI0": {
    +        "description": "Serial peripheral interface",
    +        "children": {
    +          "registers": {
    +            "CTL0": {
    +              "description": "control register 0",
    +              "offset": 0,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BDEN": {
    +                    "description": "Bidirectional \n              enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "BDOEN": {
    +                    "description": "Bidirectional Transmit output enable\n              ",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CRCEN": {
    +                    "description": "CRC Calculation Enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CRCNT": {
    +                    "description": "CRC Next Transfer",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FF16": {
    +                    "description": "Data frame format",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "RO": {
    +                    "description": "Receive only",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SWNSSEN": {
    +                    "description": "NSS Software Mode Selection",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SWNSS": {
    +                    "description": "NSS Pin Selection In NSS Software Mode",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LF": {
    +                    "description": "LSB First Mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SPIEN": {
    +                    "description": "SPI enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PSC": {
    +                    "description": "Master Clock Prescaler Selection",
    +                    "offset": 3,
    +                    "size": 3
    +                  },
    +                  "MSTMOD": {
    +                    "description": "Master Mode Enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CKPL": {
    +                    "description": "Clock polarity Selection",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CKPH": {
    +                    "description": "Clock Phase Selection",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CTL1": {
    +              "description": "control register 1",
    +              "offset": 4,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TBEIE": {
    +                    "description": "Tx buffer empty interrupt\n              enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RBNEIE": {
    +                    "description": "RX buffer not empty interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "Error interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TMOD": {
    +                    "description": "SPI TI mode enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "NSSP": {
    +                    "description": "SPI NSS pulse mode enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "NSSDRV": {
    +                    "description": "Drive NSS Output",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DMATEN": {
    +                    "description": "Transmit Buffer DMA Enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DMAREN": {
    +                    "description": "Rx buffer DMA enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "STAT": {
    +              "description": "status register",
    +              "offset": 8,
    +              "size": 16,
    +              "reset_value": 2,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FERR": {
    +                    "description": "Format error",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TRANS": {
    +                    "description": "Transmitting On-going Bit",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXORERR": {
    +                    "description": "Reception Overrun Error Bit",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CONFERR": {
    +                    "description": "SPI Configuration error",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CRCERR": {
    +                    "description": "SPI CRC Error Bit",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TXURERR": {
    +                    "description": "Transmission underrun error bit",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "I2SCH": {
    +                    "description": "I2S channel side",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TBE": {
    +                    "description": "Transmit Buffer Empty",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RBNE": {
    +                    "description": "Receive Buffer Not Empty",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DATA": {
    +              "description": "data register",
    +              "offset": 12,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SPI_DATA": {
    +                    "description": "Data transfer register",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CRCPOLY": {
    +              "description": "CRC polynomial register",
    +              "offset": 16,
    +              "size": 16,
    +              "reset_value": 7,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CRCPOLY": {
    +                    "description": "CRC polynomial value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "RCRC": {
    +              "description": "RX CRC register",
    +              "offset": 20,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "RCRC": {
    +                    "description": "RX CRC value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "TCRC": {
    +              "description": "TX CRC register",
    +              "offset": 24,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "read-only",
    +              "children": {
    +                "fields": {
    +                  "TCRC": {
    +                    "description": "Tx CRC value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "I2SCTL": {
    +              "description": "I2S control register",
    +              "offset": 28,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "I2SSEL": {
    +                    "description": "I2S mode selection",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "I2SEN": {
    +                    "description": "I2S Enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "I2SOPMOD": {
    +                    "description": "I2S operation mode",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "PCMSMOD": {
    +                    "description": "PCM frame synchronization mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "I2SSTD": {
    +                    "description": "I2S standard selection",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "CKPL": {
    +                    "description": "Idle state clock polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DTLEN": {
    +                    "description": "Data length",
    +                    "offset": 1,
    +                    "size": 2
    +                  },
    +                  "CHLEN": {
    +                    "description": "Channel length (number of bits per audio\n              channel)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "I2SPSC": {
    +              "description": "I2S prescaler register",
    +              "offset": 32,
    +              "size": 16,
    +              "reset_value": 2,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MCKOEN": {
    +                    "description": "I2S_MCK output enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "OF": {
    +                    "description": "Odd factor for the\n              prescaler",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DIV": {
    +                    "description": "Dividing factor for the prescaler",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "UART3": {
    +        "description": "Universal  asynchronous receiver\n      transmitter",
    +        "children": {
    +          "registers": {
    +            "STAT": {
    +              "description": "Status register ",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 192,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LBDF": {
    +                    "description": "LIN break detection flag",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TBE": {
    +                    "description": "Transmit data buffer empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TC": {
    +                    "description": "Transmission complete",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RBNE": {
    +                    "description": "Read data buffer not empty",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IDLEF": {
    +                    "description": "IDLE frame detected flag",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ORERR": {
    +                    "description": "Overrun error",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NERR": {
    +                    "description": "Noise error flag",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FERR": {
    +                    "description": "Frame error flag",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PERR": {
    +                    "description": "Parity error flag",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DATA": {
    +              "description": "Data register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Transmit or read data value",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "BAUD": {
    +              "description": "Baud rate register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INTDIV": {
    +                    "description": "Integer part of baud-rate divider",
    +                    "offset": 4,
    +                    "size": 12
    +                  },
    +                  "FRADIV": {
    +                    "description": "Fraction part of baud-rate divider",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CTL0": {
    +              "description": "Control register 0",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "UEN": {
    +                    "description": "USART enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "WL": {
    +                    "description": "Word length",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WM": {
    +                    "description": "Wakeup method in mute mode",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "PCEN": {
    +                    "description": "Parity check function enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PM": {
    +                    "description": "Parity mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PERRIE": {
    +                    "description": "Parity error interrupt enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TBEIE": {
    +                    "description": "Transmitter buffer empty interrupt enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transmission complete interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RBNEIE": {
    +                    "description": "Read data buffer not empty interrupt and overrun error interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IDLEIE": {
    +                    "description": "IDLE line detected interrupt enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TEN": {
    +                    "description": "Transmitter enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "REN": {
    +                    "description": "Receiver enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RWU": {
    +                    "description": "Receiver wakeup from mute mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SBKCMD": {
    +                    "description": "Send break command",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CTL1": {
    +              "description": "Control register 1",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LMEN": {
    +                    "description": "LIN mode enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "STB": {
    +                    "description": "STOP bits length",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "LBDIE": {
    +                    "description": "LIN break detection interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "LBLEN": {
    +                    "description": "LIN break frame length",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ADDR": {
    +                    "description": "Address of the USART",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CTL2": {
    +              "description": "Control register 2",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DENT": {
    +                    "description": "DMA request enable for transmission",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "DENR": {
    +                    "description": "DMA request enable for reception",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "HDEN": {
    +                    "description": "Half-duplex selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IRLP": {
    +                    "description": "IrDA low-power",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IREN": {
    +                    "description": "IrDA mode enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "Error interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GP": {
    +              "description": "Guard time and prescaler\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "USART0": {
    +        "description": "Universal synchronous asynchronous receiver\n      transmitter",
    +        "children": {
    +          "registers": {
    +            "STAT": {
    +              "description": "Status register ",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 192,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTSF": {
    +                    "description": "CTS change flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "LBDF": {
    +                    "description": "LIN break detection flag",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TBE": {
    +                    "description": "Transmit data buffer empty",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TC": {
    +                    "description": "Transmission complete",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RBNE": {
    +                    "description": "Read data buffer not empty",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IDLEF": {
    +                    "description": "IDLE frame detected flag",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ORERR": {
    +                    "description": "Overrun error",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NERR": {
    +                    "description": "Noise error flag",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FERR": {
    +                    "description": "Frame error flag",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PERR": {
    +                    "description": "Parity error flag",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DATA": {
    +              "description": "Data register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Transmit or read data value",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "BAUD": {
    +              "description": "Baud rate register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INTDIV": {
    +                    "description": "Integer part of baud-rate divider",
    +                    "offset": 4,
    +                    "size": 12
    +                  },
    +                  "FRADIV": {
    +                    "description": "Fraction part of baud-rate divider",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CTL0": {
    +              "description": "Control register 0",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "UEN": {
    +                    "description": "USART enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "WL": {
    +                    "description": "Word length",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WM": {
    +                    "description": "Wakeup method in mute mode",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "PCEN": {
    +                    "description": "Parity check function enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PM": {
    +                    "description": "Parity mode",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PERRIE": {
    +                    "description": "Parity error interrupt enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TBEIE": {
    +                    "description": "Transmitter buffer empty interrupt enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TCIE": {
    +                    "description": "Transmission complete interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RBNEIE": {
    +                    "description": "Read data buffer not empty interrupt and overrun error interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IDLEIE": {
    +                    "description": "IDLE line detected interrupt enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TEN": {
    +                    "description": "Transmitter enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "REN": {
    +                    "description": "Receiver enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RWU": {
    +                    "description": "Receiver wakeup from mute mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SBKCMD": {
    +                    "description": "Send break command",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CTL1": {
    +              "description": "Control register 1",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LMEN": {
    +                    "description": "LIN mode enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "STB": {
    +                    "description": "STOP bits length",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "CKEN": {
    +                    "description": "CK pin enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CPL": {
    +                    "description": "Clock polarity",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CPH": {
    +                    "description": "Clock phase",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CLEN": {
    +                    "description": "CK Length",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LBDIE": {
    +                    "description": "LIN break detection interrupt\n              enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "LBLEN": {
    +                    "description": "LIN break frame length",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ADDR": {
    +                    "description": "Address of the USART",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CTL2": {
    +              "description": "Control register 2",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CTSIE": {
    +                    "description": "CTS interrupt enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CTSEN": {
    +                    "description": "CTS enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RTSEN": {
    +                    "description": "RTS enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DENT": {
    +                    "description": "DMA request enable for transmission",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "DENR": {
    +                    "description": "DMA request enable for reception",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SCEN": {
    +                    "description": "Smartcard mode enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "NKEN": {
    +                    "description": "Smartcard NACK enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "HDEN": {
    +                    "description": "Half-duplex selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "IRLP": {
    +                    "description": "IrDA low-power",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IREN": {
    +                    "description": "IrDA mode enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ERRIE": {
    +                    "description": "Error interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GP": {
    +              "description": "Guard time and prescaler\n          register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "GUAT": {
    +                    "description": "Guard time value in Smartcard mode",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "PSC": {
    +                    "description": "Prescaler value",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIMER0": {
    +        "description": "Advanced-timers",
    +        "children": {
    +          "registers": {
    +            "CTL0": {
    +              "description": "control register 0",
    +              "offset": 0,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CKDIV": {
    +                    "description": "Clock division",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "ARSE": {
    +                    "description": "Auto-reload shadow enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CAM": {
    +                    "description": "Counter aligns mode\n              selection",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "DIR": {
    +                    "description": "Direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SPM": {
    +                    "description": "Single pulse mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "UPS": {
    +                    "description": "Update source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UPDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CTL1": {
    +              "description": "control register 1",
    +              "offset": 4,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ISO3": {
    +                    "description": "Idle state of channel 3 output",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ISO2N": {
    +                    "description": "Idle state of channel 2 complementary output",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ISO2": {
    +                    "description": "Idle state of channel 2 output",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ISO1N": {
    +                    "description": "Idle state of channel 1 complementary output",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "ISO1": {
    +                    "description": "Idle state of channel 1 output",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ISO0N": {
    +                    "description": "Idle state of channel 0 complementary output",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ISO0": {
    +                    "description": "Idle state of channel 0 output",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TI0S": {
    +                    "description": "Channel 0 trigger input selection",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MMC": {
    +                    "description": "Master mode control",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "DMAS": {
    +                    "description": "DMA request source selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CCUC": {
    +                    "description": "Commutation control shadow register update control",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CCSE": {
    +                    "description": "Commutation control shadow enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SMCFG": {
    +              "description": "slave mode configuration register",
    +              "offset": 8,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ETP": {
    +                    "description": "External trigger polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "SMC1": {
    +                    "description": "Part of SMC for enable External clock mode1",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ETPSC": {
    +                    "description": "External trigger prescaler",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "ETFC": {
    +                    "description": "External trigger filter control",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "MSM": {
    +                    "description": "Master/Slave mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TRGS": {
    +                    "description": "Trigger selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SMC": {
    +                    "description": "Slave mode selection",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "DMAINTEN": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TRGDEN": {
    +                    "description": "Trigger DMA request enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CMTDEN": {
    +                    "description": "Commutation DMA request enable",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CH3DEN": {
    +                    "description": "Channel 3 capture/compare DMA request enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CH2DEN": {
    +                    "description": "Channel 2 capture/compare DMA request enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CH1DEN": {
    +                    "description": "Channel 1 capture/compare DMA request enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CH0DEN": {
    +                    "description": "Channel 0 capture/compare DMA request enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "UPDEN": {
    +                    "description": "Update DMA request enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BRKIE": {
    +                    "description": "Break interrupt enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TRGIE": {
    +                    "description": "Trigger interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CMTIE": {
    +                    "description": "commutation interrupt enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CH3IE": {
    +                    "description": "Channel 3 capture/compare interrupt enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CH2IE": {
    +                    "description": "Channel 2 capture/compare interrupt enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CH1IE": {
    +                    "description": "Channel 1 capture/compare interrupt enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CH0IE": {
    +                    "description": "Channel 0 capture/compare interrupt enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UPIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTF": {
    +              "description": "Interrupt flag register",
    +              "offset": 16,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH3OF": {
    +                    "description": "Channel 3 over capture flag",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CH2OF": {
    +                    "description": "Channel 2 over capture flag",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CH1OF": {
    +                    "description": "Channel 1 over capture flag",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CH0OF": {
    +                    "description": "Channel 0 over capture flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BRKIF": {
    +                    "description": "Break interrupt flag",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TRGIF": {
    +                    "description": "Trigger interrupt flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CMTIF": {
    +                    "description": "Channel commutation interrupt flag",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CH3IF": {
    +                    "description": "Channel 3 capture/compare interrupt flag",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CH2IF": {
    +                    "description": " Channel 2 capture/compare interrupt flag",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CH1IF": {
    +                    "description": "Channel 1  capture/compare interrupt flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CH0IF": {
    +                    "description": "Channel 0  capture/compare interrupt flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UPIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SWEVG": {
    +              "description": "Software event generation register",
    +              "offset": 20,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "BRKG": {
    +                    "description": "Break event generation",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TRGG": {
    +                    "description": "Trigger event generation",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CMTG": {
    +                    "description": "Channel commutation event generation",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CH3G": {
    +                    "description": "Channel  3 capture or compare event generation",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CH2G": {
    +                    "description": "Channel 2 capture or compare event generation",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CH1G": {
    +                    "description": "Channel 1 capture or compare event generation",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CH0G": {
    +                    "description": "Channel 0 capture or compare event generation",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UPG": {
    +                    "description": "Update event generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CHCTL0_Output": {
    +              "description": "Channel control register 0 (output\n          mode)",
    +              "offset": 24,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH1COMCEN": {
    +                    "description": "Channel 1 output compare clear enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "CH1COMCTL": {
    +                    "description": "Channel 1 compare output control",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "CH1COMSEN": {
    +                    "description": "Channel 1 output compare shadow enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CH1COMFEN": {
    +                    "description": "Channel 1 output compare fast enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CH1MS": {
    +                    "description": "Channel 1 mode selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "CH0COMCEN": {
    +                    "description": "Channel 0 output compare clear enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CH0COMCTL": {
    +                    "description": "Channel 0 compare output control",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "CH0COMSEN": {
    +                    "description": "Channel 0 compare output shadow enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CH0COMFEN": {
    +                    "description": "Channel 0 output compare fast enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CH0MS": {
    +                    "description": "Channel 0 I/O mode selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CHCTL0_Input": {
    +              "description": "Channel control register 0 (input\n          mode)",
    +              "offset": 24,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH1CAPFLT": {
    +                    "description": "Channel 1 input capture filter control",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "CH1CAPPSC": {
    +                    "description": "Channel 1 input capture prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CH1MS": {
    +                    "description": "Channel 1 mode selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "CH0CAPFLT": {
    +                    "description": "Channel 0 input capture filter control",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "CH0CAPPSC": {
    +                    "description": "Channel 0 input capture prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CH0MS": {
    +                    "description": "Channel 0 mode selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CHCTL1_Output": {
    +              "description": "Channel control register 1 (output\n          mode)",
    +              "offset": 28,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH3COMCEN": {
    +                    "description": "Channel 3 output compare clear enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "CH3COMCTL": {
    +                    "description": "Channel 3 compare output control",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "CH3COMSEN": {
    +                    "description": "Channel 3 output compare shadow enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CH3COMFEN": {
    +                    "description": "Channel 3 output compare fast enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CH3MS": {
    +                    "description": "Channel 3 mode selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "CH2COMCEN": {
    +                    "description": "Channel 2 output compare clear enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CH2COMCTL": {
    +                    "description": "Channel 2 compare output control",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "CH2COMSEN": {
    +                    "description": "Channel 2 compare output shadow enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CH2COMFEN": {
    +                    "description": "Channel 2 output compare fast enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CH2MS": {
    +                    "description": "Channel 2 I/O mode selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CHCTL1_Input": {
    +              "description": "Channel control register 1 (input\n          mode)",
    +              "offset": 28,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH3CAPFLT": {
    +                    "description": "Channel 3 input capture filter control",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "CH3CAPPSC": {
    +                    "description": "Channel 3 input capture prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CH3MS": {
    +                    "description": "Channel 3 mode selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "CH2CAPFLT": {
    +                    "description": "Channel 2 input capture filter control",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "CH2CAPPSC": {
    +                    "description": "Channel 2 input capture prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CH2MS": {
    +                    "description": "Channel 2 mode selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CHCTL2": {
    +              "description": "Channel control register 2",
    +              "offset": 32,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH3P": {
    +                    "description": "Channel 3 capture/compare function polarity",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CH3EN": {
    +                    "description": "Channel 3 capture/compare function enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CH2NP": {
    +                    "description": "Channel 2 complementary output polarity",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CH2NEN": {
    +                    "description": "Channel 2 complementary output enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CH2P": {
    +                    "description": "Channel 2 capture/compare function polarity",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CH2EN": {
    +                    "description": "Channel 2 capture/compare function enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CH1NP": {
    +                    "description": "Channel 1 complementary output polarity",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CH1NEN": {
    +                    "description": "Channel 1 complementary output enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CH1P": {
    +                    "description": "Channel 1 capture/compare function polarity",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CH1EN": {
    +                    "description": "Channel 1 capture/compare function enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CH0NP": {
    +                    "description": "Channel 0 complementary output polarity",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CH0NEN": {
    +                    "description": "Channel 0 complementary output enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CH0P": {
    +                    "description": "Channel 0 capture/compare function polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CH0EN": {
    +                    "description": "Channel 0 capture/compare function enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "counter",
    +              "offset": 36,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "current counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "prescaler",
    +              "offset": 40,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value of the counter clock",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CAR": {
    +              "description": "Counter auto reload register",
    +              "offset": 44,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CARL": {
    +                    "description": "Counter auto reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CREP": {
    +              "description": "Counter repetition register",
    +              "offset": 48,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CREP": {
    +                    "description": "Counter repetition value",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CH0CV": {
    +              "description": "Channel 0 capture/compare value register",
    +              "offset": 52,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH0VAL": {
    +                    "description": "Capture or compare value of channel0",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH1CV": {
    +              "description": "Channel 1 capture/compare value register",
    +              "offset": 56,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH1VAL": {
    +                    "description": "Capture or compare value of channel1",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH2CV": {
    +              "description": "Channel 2 capture/compare value register",
    +              "offset": 60,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH2VAL": {
    +                    "description": "Capture or compare value of channel 2",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH3CV": {
    +              "description": "Channel 3 capture/compare value register",
    +              "offset": 64,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH3VAL": {
    +                    "description": "Capture or compare value of channel 3",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CCHP": {
    +              "description": "channel complementary protection register",
    +              "offset": 68,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "POEN": {
    +                    "description": "Primary output enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OAEN": {
    +                    "description": "Output automatic enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "BRKP": {
    +                    "description": "Break polarity",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BRKEN": {
    +                    "description": "Break enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ROS": {
    +                    "description": "Run mode off-state configure",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "IOS": {
    +                    "description": "Idle mode off-state configure",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PROT": {
    +                    "description": "Complementary register protect control",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "DTCFG": {
    +                    "description": "Dead time configure",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "DMACFG": {
    +              "description": "DMA configuration register",
    +              "offset": 72,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMATC": {
    +                    "description": "DMA transfer count",
    +                    "offset": 8,
    +                    "size": 5
    +                  },
    +                  "DMATA": {
    +                    "description": "DMA transfer access start address",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "DMATB": {
    +              "description": "DMA transfer buffer register",
    +              "offset": 76,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMATB": {
    +                    "description": "DMA transfer buffer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIMER1": {
    +        "description": "General-purpose-timers",
    +        "children": {
    +          "registers": {
    +            "CTL0": {
    +              "description": "control register 0",
    +              "offset": 0,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CKDIV": {
    +                    "description": "Clock division",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "ARSE": {
    +                    "description": "Auto-reload shadow enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CAM": {
    +                    "description": "Counter aligns mode selection",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "DIR": {
    +                    "description": "Direction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SPM": {
    +                    "description": "Single pulse mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "UPS": {
    +                    "description": "Update source",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UPDIS": {
    +                    "description": "Update disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CEN": {
    +                    "description": "Counter enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CTL1": {
    +              "description": "control register 1",
    +              "offset": 4,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TI0S": {
    +                    "description": "Channel 0 trigger input selection",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "MMC": {
    +                    "description": "Master mode control",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "DMAS": {
    +                    "description": "DMA request source selection",
    +                    "offset": 3,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SMCFG": {
    +              "description": "slave mode control register",
    +              "offset": 8,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ETP": {
    +                    "description": "External trigger polarity",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "SMC1": {
    +                    "description": "Part of SMC for enable External clock mode1",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "ETPSC": {
    +                    "description": "External trigger prescaler",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "ETFC": {
    +                    "description": "External trigger filter control",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "MSM": {
    +                    "description": "Master-slave mode",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TRGS": {
    +                    "description": "Trigger selection",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "SMC": {
    +                    "description": "Slave mode control",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "DMAINTEN": {
    +              "description": "DMA/Interrupt enable register",
    +              "offset": 12,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TRGDEN": {
    +                    "description": "Trigger DMA request enable",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "CH3DEN": {
    +                    "description": "Channel 3 capture/compare DMA request enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CH2DEN": {
    +                    "description": "Channel 2 capture/compare DMA request enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CH1DEN": {
    +                    "description": "Channel 1 capture/compare DMA request enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CH0DEN": {
    +                    "description": "Channel 0 capture/compare DMA request enable",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "UPDEN": {
    +                    "description": "Update DMA request enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TRGIE": {
    +                    "description": "Trigger interrupt enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CH3IE": {
    +                    "description": "Channel 3 capture/compare interrupt enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CH2IE": {
    +                    "description": "Channel 2 capture/compare interrupt enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CH1IE": {
    +                    "description": "Channel 1 capture/compare interrupt enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CH0IE": {
    +                    "description": "Channel 0 capture/compare interrupt enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UPIE": {
    +                    "description": "Update interrupt enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTF": {
    +              "description": "interrupt flag register",
    +              "offset": 16,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH3OF": {
    +                    "description": "Channel 3 over capture flag",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CH2OF": {
    +                    "description": "Channel 2 over capture flag",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CH1OF": {
    +                    "description": "Channel 1 over capture flag",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CH0OF": {
    +                    "description": "Channel 0 over capture flag",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TRGIF": {
    +                    "description": "Trigger interrupt flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CH3IF": {
    +                    "description": "Channel 3  capture/compare interrupt enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CH2IF": {
    +                    "description": "Channel 2  capture/compare interrupt enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CH1IF": {
    +                    "description": "Channel 1  capture/compare interrupt flag",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CH0IF": {
    +                    "description": "Channel 0  capture/compare interrupt flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UPIF": {
    +                    "description": "Update interrupt flag",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SWEVG": {
    +              "description": "event generation register",
    +              "offset": 20,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "access": "write-only",
    +              "children": {
    +                "fields": {
    +                  "TRGG": {
    +                    "description": "Trigger event generation",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CH3G": {
    +                    "description": "Channel 3 capture or compare event generation",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CH2G": {
    +                    "description": "Channel 2 capture or compare event generation",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CH1G": {
    +                    "description": "Channel 1 capture or compare event generation",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CH0G": {
    +                    "description": "Channel 0 capture or compare event generation",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UPG": {
    +                    "description": "Update generation",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CHCTL0_Output": {
    +              "description": "Channel control register 0 (output\n          mode)",
    +              "offset": 24,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH1COMCEN": {
    +                    "description": "Channel 1 output compare clear enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "CH1COMCTL": {
    +                    "description": "Channel 1 compare output control",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "CH1COMSEN": {
    +                    "description": "Channel 1 output compare shadow enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CH1COMFEN": {
    +                    "description": "Channel 1 output compare fast enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CH1MS": {
    +                    "description": "Channel 1 mode selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "CH0COMCEN": {
    +                    "description": "Channel 0 output compare clear enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CH0COMCTL": {
    +                    "description": " Channel 0 compare output control",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "CH0COMSEN": {
    +                    "description": "Channel 0 compare output shadow enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CH0COMFEN": {
    +                    "description": "Channel 0 output compare fast enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CH0MS": {
    +                    "description": "Channel 0 I/O mode selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CHCTL0_Input": {
    +              "description": "Channel control register 0 (input\n          mode)",
    +              "offset": 24,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH1CAPFLT": {
    +                    "description": "Channel 1 input capture filter control",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "CH1CAPPSC": {
    +                    "description": "Channel 1 input capture prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CH1MS": {
    +                    "description": "Channel 1 mode selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "CH0CAPFLT": {
    +                    "description": "Channel 0 input capture filter control",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "CH0CAPPSC": {
    +                    "description": "Channel 0 input capture prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CH0MS": {
    +                    "description": "Channel 0 mode selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CHCTL1_Output": {
    +              "description": "Channel control register 1 (output mode)",
    +              "offset": 28,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH3COMCEN": {
    +                    "description": "Channel 3 output compare clear enable",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "CH3COMCTL": {
    +                    "description": "Channel 3 compare output control",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "CH3COMSEN": {
    +                    "description": "Channel 3 output compare shadow enable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "CH3COMFEN": {
    +                    "description": "Channel 3 output compare fast enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CH3MS": {
    +                    "description": "Channel 3 mode selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "CH2COMCEN": {
    +                    "description": "Channel 2 output compare clear enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CH2COMCTL": {
    +                    "description": "Channel 2 compare output control",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "CH2COMSEN": {
    +                    "description": "Channel 2 compare output shadow enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CH2COMFEN": {
    +                    "description": "Channel 2 output compare fast enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CH2MS": {
    +                    "description": "Channel 2 I/O mode selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CHCTL1_Input": {
    +              "description": "Channel control register 1 (input\n          mode)",
    +              "offset": 28,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH3CAPFLT": {
    +                    "description": "Channel 3 input capture filter control",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "CH3CAPPSC": {
    +                    "description": "Channel 3 input capture prescaler",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CH3MS": {
    +                    "description": "Channel 3 mode selection",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "CH2CAPFLT": {
    +                    "description": "Channel 2 input capture filter control",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "CH2CAPPSC": {
    +                    "description": "Channel 2 input capture prescaler",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CH2MS": {
    +                    "description": "Channel 2 mode selection",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CHCTL2": {
    +              "description": "Channel control register 2",
    +              "offset": 32,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH3P": {
    +                    "description": "Channel 3 capture/compare function polarity",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "CH3EN": {
    +                    "description": "Channel 3 capture/compare function enable",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "CH2P": {
    +                    "description": "Channel 2 capture/compare function polarity",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CH2EN": {
    +                    "description": "Channel 2 capture/compare function enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CH1P": {
    +                    "description": "Channel 1 capture/compare function polarity",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CH1EN": {
    +                    "description": "Channel 1 capture/compare function enable",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CH0P": {
    +                    "description": "Channel 0 capture/compare function polarity",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CH0EN": {
    +                    "description": "Channel 0 capture/compare function enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CNT": {
    +              "description": "Counter register",
    +              "offset": 36,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CNT": {
    +                    "description": "counter value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "PSC": {
    +              "description": "Prescaler register",
    +              "offset": 40,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PSC": {
    +                    "description": "Prescaler value of the counter clock",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CAR": {
    +              "description": "Counter auto reload register",
    +              "offset": 44,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CARL": {
    +                    "description": "Counter auto reload value",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH0CV": {
    +              "description": "Channel 0 capture/compare value register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH0VAL": {
    +                    "description": "Capture or compare value of channel 0",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH1CV": {
    +              "description": "Channel 1 capture/compare value register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH1VAL": {
    +                    "description": "Capture or compare value of channel1",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH2CV": {
    +              "description": "Channel 2 capture/compare value register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH2VAL": {
    +                    "description": "Capture or compare value of channel 2",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH3CV": {
    +              "description": "Channel 3 capture/compare value register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH3VAL": {
    +                    "description": "Capture or compare value of channel 3",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DMACFG": {
    +              "description": "DMA configuration register",
    +              "offset": 72,
    +              "size": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMATC": {
    +                    "description": "DMA transfer count",
    +                    "offset": 8,
    +                    "size": 5
    +                  },
    +                  "DMATA": {
    +                    "description": "DMA transfer access start address",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "DMATB": {
    +              "description": "DMA transfer buffer register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMATB": {
    +                    "description": "DMA transfer buffer",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      }
    +    }
    +  },
    +  "devices": {
    +    "GD32VF103": {
    +      "arch": "cortex_m3",
    +      "description": "GD32VF103 RISC-V Microcontroller based device",
    +      "properties": {
    +        "cpu.nvic_prio_bits": "4",
    +        "cpu.mpu": "0",
    +        "cpu.fpu": "0",
    +        "cpu.revision": "r2p1",
    +        "cpu.vendor_systick_config": "0",
    +        "license": "\n    Copyright 2019 Sipeed Co.,Ltd.\n  \n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n",
    +        "cpu.name": "CM3",
    +        "cpu.endian": "little"
    +      },
    +      "children": {
    +        "interrupts": {
    +          "MemManageFault": {
    +            "index": -12
    +          },
    +          "BusFault": {
    +            "index": -11
    +          },
    +          "UsageFault": {
    +            "index": -10
    +          },
    +          "DebugMonitor": {
    +            "index": -4
    +          },
    +          "NMI": {
    +            "index": -14
    +          },
    +          "HardFault": {
    +            "index": -13
    +          },
    +          "SVCall": {
    +            "index": -5
    +          },
    +          "PendSV": {
    +            "index": -2
    +          },
    +          "SysTick": {
    +            "index": -1
    +          },
    +          "ADC0_1": {
    +            "index": 37
    +          },
    +          "Tamper": {
    +            "index": 21
    +          },
    +          "CAN0_TX": {
    +            "index": 38
    +          },
    +          "CAN0_RX0": {
    +            "index": 39
    +          },
    +          "CAN0_RX1": {
    +            "index": 40
    +          },
    +          "CAN0_EWMC": {
    +            "index": 41
    +          },
    +          "CAN1_TX": {
    +            "index": 82
    +          },
    +          "CAN1_RX0": {
    +            "index": 83
    +          },
    +          "CAN1_RX1": {
    +            "index": 84
    +          },
    +          "CAN1_EWMC": {
    +            "index": 85
    +          },
    +          "DMA0_Channel0": {
    +            "index": 30
    +          },
    +          "DMA0_Channel1": {
    +            "index": 31
    +          },
    +          "DMA0_Channel2": {
    +            "index": 32
    +          },
    +          "DMA0_Channel3": {
    +            "index": 33
    +          },
    +          "DMA0_Channel4": {
    +            "index": 34
    +          },
    +          "DMA0_Channel5": {
    +            "index": 35
    +          },
    +          "DMA0_Channel6": {
    +            "index": 36
    +          },
    +          "DMA1_Channel0": {
    +            "index": 75
    +          },
    +          "DMA1_Channel1": {
    +            "index": 76
    +          },
    +          "DMA1_Channel2": {
    +            "index": 77
    +          },
    +          "DMA1_Channel3": {
    +            "index": 78
    +          },
    +          "DMA1_Channel4": {
    +            "index": 79
    +          },
    +          "EXTI_Line0": {
    +            "index": 25
    +          },
    +          "EXTI_Line1": {
    +            "index": 26
    +          },
    +          "EXTI_Line2": {
    +            "index": 27
    +          },
    +          "EXTI_Line3": {
    +            "index": 28
    +          },
    +          "EXTI_Line4": {
    +            "index": 29
    +          },
    +          "EXTI_line9_5": {
    +            "index": 42
    +          },
    +          "EXTI_line15_10": {
    +            "index": 59
    +          },
    +          "FMC": {
    +            "index": 23
    +          },
    +          "I2C0_EV": {
    +            "index": 50
    +          },
    +          "I2C0_ER": {
    +            "index": 51
    +          },
    +          "I2C1_EV": {
    +            "index": 52
    +          },
    +          "I2C1_ER": {
    +            "index": 53
    +          },
    +          "RCU": {
    +            "index": 24
    +          },
    +          "RTC": {
    +            "index": 22
    +          },
    +          "RTC_Alarm": {
    +            "index": 60
    +          },
    +          "SPI0": {
    +            "index": 54
    +          },
    +          "SPI1": {
    +            "index": 55
    +          },
    +          "SPI2": {
    +            "index": 70
    +          },
    +          "TIMER0_BRK": {
    +            "index": 43
    +          },
    +          "TIMER0_UP": {
    +            "index": 44
    +          },
    +          "TIMER0_TRG_CMT": {
    +            "index": 45
    +          },
    +          "TIMER0_Channel": {
    +            "index": 46
    +          },
    +          "TIMER1": {
    +            "index": 47
    +          },
    +          "TIMER2": {
    +            "index": 48
    +          },
    +          "TIMER3": {
    +            "index": 49
    +          },
    +          "TIMER4": {
    +            "index": 69
    +          },
    +          "TIMER5": {
    +            "index": 73
    +          },
    +          "TIMER6": {
    +            "index": 74
    +          },
    +          "USART0": {
    +            "index": 56
    +          },
    +          "USART1": {
    +            "index": 57
    +          },
    +          "USART2": {
    +            "index": 58
    +          },
    +          "UART3": {
    +            "index": 71
    +          },
    +          "UART4": {
    +            "index": 72
    +          },
    +          "USBFS_WKUP": {
    +            "index": 61
    +          },
    +          "USBFS": {
    +            "index": 86
    +          },
    +          "WWDGT": {
    +            "index": 0
    +          }
    +        },
    +        "peripheral_instances": {
    +          "SysTick": {
    +            "offset": 3758153744,
    +            "type": "types.peripherals.SCS.children.register_groups.SysTick"
    +          },
    +          "ADC0": {
    +            "description": "Analog to digital converter",
    +            "offset": 1073816576,
    +            "type": "types.peripherals.ADC0"
    +          },
    +          "ADC1": {
    +            "description": "Analog to digital converter",
    +            "offset": 1073817600,
    +            "type": "types.peripherals.ADC1"
    +          },
    +          "AFIO": {
    +            "description": "Alternate-function I/Os",
    +            "offset": 1073807360,
    +            "type": "types.peripherals.AFIO"
    +          },
    +          "BKP": {
    +            "description": "Backup registers",
    +            "offset": 1073769472,
    +            "type": "types.peripherals.BKP"
    +          },
    +          "CAN0": {
    +            "description": "Controller area network",
    +            "offset": 1073767424,
    +            "type": "types.peripherals.CAN0"
    +          },
    +          "CAN1": {
    +            "offset": 1073768448,
    +            "type": "types.peripherals.CAN0"
    +          },
    +          "CRC": {
    +            "description": "cyclic redundancy check calculation unit",
    +            "offset": 1073885184,
    +            "type": "types.peripherals.CRC"
    +          },
    +          "DAC": {
    +            "description": "Digital-to-analog converter",
    +            "offset": 1073771520,
    +            "type": "types.peripherals.DAC"
    +          },
    +          "DBG": {
    +            "description": "Debug support",
    +            "offset": 3758366720,
    +            "type": "types.peripherals.DBG"
    +          },
    +          "DMA0": {
    +            "description": "DMA controller",
    +            "offset": 1073872896,
    +            "type": "types.peripherals.DMA0"
    +          },
    +          "DMA1": {
    +            "description": "Direct memory access controller",
    +            "offset": 1073872896,
    +            "type": "types.peripherals.DMA1"
    +          },
    +          "EXMC": {
    +            "description": "External memory controller",
    +            "offset": 2684354560,
    +            "type": "types.peripherals.EXMC"
    +          },
    +          "EXTI": {
    +            "description": "External interrupt/event\n      controller",
    +            "offset": 1073808384,
    +            "type": "types.peripherals.EXTI"
    +          },
    +          "FMC": {
    +            "description": "FMC",
    +            "offset": 1073881088,
    +            "type": "types.peripherals.FMC"
    +          },
    +          "FWDGT": {
    +            "description": "free watchdog timer",
    +            "offset": 1073754112,
    +            "type": "types.peripherals.FWDGT"
    +          },
    +          "GPIOA": {
    +            "description": "General-purpose I/Os",
    +            "offset": 1073809408,
    +            "type": "types.peripherals.GPIOA"
    +          },
    +          "GPIOB": {
    +            "offset": 1073810432,
    +            "type": "types.peripherals.GPIOA"
    +          },
    +          "GPIOC": {
    +            "offset": 1073811456,
    +            "type": "types.peripherals.GPIOA"
    +          },
    +          "GPIOD": {
    +            "offset": 1073812480,
    +            "type": "types.peripherals.GPIOA"
    +          },
    +          "GPIOE": {
    +            "offset": 1073813504,
    +            "type": "types.peripherals.GPIOA"
    +          },
    +          "I2C0": {
    +            "description": "Inter integrated circuit",
    +            "offset": 1073763328,
    +            "type": "types.peripherals.I2C0"
    +          },
    +          "I2C1": {
    +            "offset": 1073764352,
    +            "type": "types.peripherals.I2C0"
    +          },
    +          "ECLIC": {
    +            "description": "Enhanced Core Local Interrupt Controller",
    +            "offset": 3523215360,
    +            "type": "types.peripherals.ECLIC"
    +          },
    +          "PMU": {
    +            "description": "Power management unit",
    +            "offset": 1073770496,
    +            "type": "types.peripherals.PMU"
    +          },
    +          "RCU": {
    +            "description": "Reset and clock unit",
    +            "offset": 1073876992,
    +            "type": "types.peripherals.RCU"
    +          },
    +          "RTC": {
    +            "description": "Real-time clock",
    +            "offset": 1073752064,
    +            "type": "types.peripherals.RTC"
    +          },
    +          "SPI0": {
    +            "description": "Serial peripheral interface",
    +            "offset": 1073819648,
    +            "type": "types.peripherals.SPI0"
    +          },
    +          "SPI1": {
    +            "offset": 1073756160,
    +            "type": "types.peripherals.SPI0"
    +          },
    +          "SPI2": {
    +            "offset": 1073757184,
    +            "type": "types.peripherals.SPI0"
    +          },
    +          "TIMER0": {
    +            "description": "Advanced-timers",
    +            "offset": 1073818624,
    +            "type": "types.peripherals.TIMER0"
    +          },
    +          "TIMER1": {
    +            "description": "General-purpose-timers",
    +            "offset": 1073741824,
    +            "type": "types.peripherals.TIMER1"
    +          },
    +          "TIMER2": {
    +            "offset": 1073742848,
    +            "type": "types.peripherals.TIMER1"
    +          },
    +          "TIMER3": {
    +            "offset": 1073743872,
    +            "type": "types.peripherals.TIMER1"
    +          },
    +          "TIMER4": {
    +            "offset": 1073744896,
    +            "type": "types.peripherals.TIMER1"
    +          },
    +          "TIMER5": {
    +            "description": "Basic-timers",
    +            "offset": 1073745920,
    +            "type": "types.peripherals.TIMER5"
    +          },
    +          "TIMER6": {
    +            "offset": 1073746944,
    +            "type": "types.peripherals.TIMER5"
    +          },
    +          "USART0": {
    +            "description": "Universal synchronous asynchronous receiver\n      transmitter",
    +            "offset": 1073821696,
    +            "type": "types.peripherals.USART0"
    +          },
    +          "USART1": {
    +            "offset": 1073759232,
    +            "type": "types.peripherals.USART0"
    +          },
    +          "USART2": {
    +            "offset": 1073760256,
    +            "type": "types.peripherals.USART0"
    +          },
    +          "UART3": {
    +            "description": "Universal  asynchronous receiver\n      transmitter",
    +            "offset": 1073761280,
    +            "type": "types.peripherals.UART3"
    +          },
    +          "UART4": {
    +            "offset": 1073762304,
    +            "type": "types.peripherals.UART3"
    +          },
    +          "USBFS_GLOBAL": {
    +            "description": "USB full speed global registers",
    +            "offset": 1342177280,
    +            "type": "types.peripherals.USBFS_GLOBAL"
    +          },
    +          "USBFS_HOST": {
    +            "description": "USB on the go full speed host",
    +            "offset": 1342178304,
    +            "type": "types.peripherals.USBFS_HOST"
    +          },
    +          "USBFS_DEVICE": {
    +            "description": "USB on the go full speed device",
    +            "offset": 1342179328,
    +            "type": "types.peripherals.USBFS_DEVICE"
    +          },
    +          "USBFS_PWRCLK": {
    +            "description": "USB on the go full speed",
    +            "offset": 1342180864,
    +            "type": "types.peripherals.USBFS_PWRCLK"
    +          },
    +          "WWDGT": {
    +            "description": "Window watchdog timer",
    +            "offset": 1073753088,
    +            "type": "types.peripherals.WWDGT"
    +          }
    +        }
    +      }
    +    }
    +  }
    +}
    \ No newline at end of file
    diff --git a/src/chips/GD32VF103.zig b/src/chips/GD32VF103.zig
    new file mode 100644
    index 000000000..77618b43e
    --- /dev/null
    +++ b/src/chips/GD32VF103.zig
    @@ -0,0 +1,12849 @@
    +const micro = @import("microzig");
    +const mmio = micro.mmio;
    +
    +pub const devices = struct {
    +    ///  GD32VF103 RISC-V Microcontroller based device
    +    pub const GD32VF103 = struct {
    +        pub const properties = struct {
    +            pub const @"cpu.nvic_prio_bits" = "4";
    +            pub const @"cpu.mpu" = "0";
    +            pub const @"cpu.fpu" = "0";
    +            pub const @"cpu.revision" = "r2p1";
    +            pub const @"cpu.vendor_systick_config" = "0";
    +            pub const license =
    +                \\
    +                \\    Copyright 2019 Sipeed Co.,Ltd.
    +                \\  
    +                \\    Licensed under the Apache License, Version 2.0 (the "License");
    +                \\    you may not use this file except in compliance with the License.
    +                \\    You may obtain a copy of the License at
    +                \\
    +                \\        http://www.apache.org/licenses/LICENSE-2.0
    +                \\
    +                \\    Unless required by applicable law or agreed to in writing, software
    +                \\    distributed under the License is distributed on an "AS IS" BASIS,
    +                \\    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +                \\    See the License for the specific language governing permissions and
    +                \\    limitations under the License.
    +                \\
    +            ;
    +            pub const @"cpu.name" = "CM3";
    +            pub const @"cpu.endian" = "little";
    +        };
    +
    +        pub const VectorTable = extern struct {
    +            const Handler = micro.interrupt.Handler;
    +            const unhandled = micro.interrupt.unhandled;
    +
    +            initial_stack_pointer: u32,
    +            Reset: Handler = unhandled,
    +            NMI: Handler = unhandled,
    +            HardFault: Handler = unhandled,
    +            MemManageFault: Handler = unhandled,
    +            BusFault: Handler = unhandled,
    +            UsageFault: Handler = unhandled,
    +            reserved5: [4]u32 = undefined,
    +            SVCall: Handler = unhandled,
    +            DebugMonitor: Handler = unhandled,
    +            reserved11: [1]u32 = undefined,
    +            PendSV: Handler = unhandled,
    +            SysTick: Handler = unhandled,
    +            WWDGT: Handler = unhandled,
    +            reserved15: [20]u32 = undefined,
    +            Tamper: Handler = unhandled,
    +            RTC: Handler = unhandled,
    +            FMC: Handler = unhandled,
    +            RCU: Handler = unhandled,
    +            EXTI_Line0: Handler = unhandled,
    +            EXTI_Line1: Handler = unhandled,
    +            EXTI_Line2: Handler = unhandled,
    +            EXTI_Line3: Handler = unhandled,
    +            EXTI_Line4: Handler = unhandled,
    +            DMA0_Channel0: Handler = unhandled,
    +            DMA0_Channel1: Handler = unhandled,
    +            DMA0_Channel2: Handler = unhandled,
    +            DMA0_Channel3: Handler = unhandled,
    +            DMA0_Channel4: Handler = unhandled,
    +            DMA0_Channel5: Handler = unhandled,
    +            DMA0_Channel6: Handler = unhandled,
    +            ADC0_1: Handler = unhandled,
    +            CAN0_TX: Handler = unhandled,
    +            CAN0_RX0: Handler = unhandled,
    +            CAN0_RX1: Handler = unhandled,
    +            CAN0_EWMC: Handler = unhandled,
    +            EXTI_line9_5: Handler = unhandled,
    +            TIMER0_BRK: Handler = unhandled,
    +            TIMER0_UP: Handler = unhandled,
    +            TIMER0_TRG_CMT: Handler = unhandled,
    +            TIMER0_Channel: Handler = unhandled,
    +            TIMER1: Handler = unhandled,
    +            TIMER2: Handler = unhandled,
    +            TIMER3: Handler = unhandled,
    +            I2C0_EV: Handler = unhandled,
    +            I2C0_ER: Handler = unhandled,
    +            I2C1_EV: Handler = unhandled,
    +            I2C1_ER: Handler = unhandled,
    +            SPI0: Handler = unhandled,
    +            SPI1: Handler = unhandled,
    +            USART0: Handler = unhandled,
    +            USART1: Handler = unhandled,
    +            USART2: Handler = unhandled,
    +            EXTI_line15_10: Handler = unhandled,
    +            RTC_Alarm: Handler = unhandled,
    +            USBFS_WKUP: Handler = unhandled,
    +            reserved76: [7]u32 = undefined,
    +            TIMER4: Handler = unhandled,
    +            SPI2: Handler = unhandled,
    +            UART3: Handler = unhandled,
    +            UART4: Handler = unhandled,
    +            TIMER5: Handler = unhandled,
    +            TIMER6: Handler = unhandled,
    +            DMA1_Channel0: Handler = unhandled,
    +            DMA1_Channel1: Handler = unhandled,
    +            DMA1_Channel2: Handler = unhandled,
    +            DMA1_Channel3: Handler = unhandled,
    +            DMA1_Channel4: Handler = unhandled,
    +            reserved94: [2]u32 = undefined,
    +            CAN1_TX: Handler = unhandled,
    +            CAN1_RX0: Handler = unhandled,
    +            CAN1_RX1: Handler = unhandled,
    +            CAN1_EWMC: Handler = unhandled,
    +            USBFS: Handler = unhandled,
    +        };
    +
    +        pub const peripherals = struct {
    +            ///  General-purpose-timers
    +            pub const TIMER1 = @intToPtr(*volatile types.peripherals.TIMER1, 0x40000000);
    +            ///  General-purpose-timers
    +            pub const TIMER2 = @intToPtr(*volatile types.peripherals.TIMER1, 0x40000400);
    +            ///  General-purpose-timers
    +            pub const TIMER3 = @intToPtr(*volatile types.peripherals.TIMER1, 0x40000800);
    +            ///  General-purpose-timers
    +            pub const TIMER4 = @intToPtr(*volatile types.peripherals.TIMER1, 0x40000c00);
    +            ///  Basic-timers
    +            pub const TIMER5 = @intToPtr(*volatile types.peripherals.TIMER5, 0x40001000);
    +            ///  Basic-timers
    +            pub const TIMER6 = @intToPtr(*volatile types.peripherals.TIMER5, 0x40001400);
    +            ///  Real-time clock
    +            pub const RTC = @intToPtr(*volatile types.peripherals.RTC, 0x40002800);
    +            ///  Window watchdog timer
    +            pub const WWDGT = @intToPtr(*volatile types.peripherals.WWDGT, 0x40002c00);
    +            ///  free watchdog timer
    +            pub const FWDGT = @intToPtr(*volatile types.peripherals.FWDGT, 0x40003000);
    +            ///  Serial peripheral interface
    +            pub const SPI1 = @intToPtr(*volatile types.peripherals.SPI0, 0x40003800);
    +            ///  Serial peripheral interface
    +            pub const SPI2 = @intToPtr(*volatile types.peripherals.SPI0, 0x40003c00);
    +            ///  Universal synchronous asynchronous receiver transmitter
    +            pub const USART1 = @intToPtr(*volatile types.peripherals.USART0, 0x40004400);
    +            ///  Universal synchronous asynchronous receiver transmitter
    +            pub const USART2 = @intToPtr(*volatile types.peripherals.USART0, 0x40004800);
    +            ///  Universal asynchronous receiver transmitter
    +            pub const UART3 = @intToPtr(*volatile types.peripherals.UART3, 0x40004c00);
    +            ///  Universal asynchronous receiver transmitter
    +            pub const UART4 = @intToPtr(*volatile types.peripherals.UART3, 0x40005000);
    +            ///  Inter integrated circuit
    +            pub const I2C0 = @intToPtr(*volatile types.peripherals.I2C0, 0x40005400);
    +            ///  Inter integrated circuit
    +            pub const I2C1 = @intToPtr(*volatile types.peripherals.I2C0, 0x40005800);
    +            ///  Controller area network
    +            pub const CAN0 = @intToPtr(*volatile types.peripherals.CAN0, 0x40006400);
    +            ///  Controller area network
    +            pub const CAN1 = @intToPtr(*volatile types.peripherals.CAN0, 0x40006800);
    +            ///  Backup registers
    +            pub const BKP = @intToPtr(*volatile types.peripherals.BKP, 0x40006c00);
    +            ///  Power management unit
    +            pub const PMU = @intToPtr(*volatile types.peripherals.PMU, 0x40007000);
    +            ///  Digital-to-analog converter
    +            pub const DAC = @intToPtr(*volatile types.peripherals.DAC, 0x40007400);
    +            ///  Alternate-function I/Os
    +            pub const AFIO = @intToPtr(*volatile types.peripherals.AFIO, 0x40010000);
    +            ///  External interrupt/event controller
    +            pub const EXTI = @intToPtr(*volatile types.peripherals.EXTI, 0x40010400);
    +            ///  General-purpose I/Os
    +            pub const GPIOA = @intToPtr(*volatile types.peripherals.GPIOA, 0x40010800);
    +            ///  General-purpose I/Os
    +            pub const GPIOB = @intToPtr(*volatile types.peripherals.GPIOA, 0x40010c00);
    +            ///  General-purpose I/Os
    +            pub const GPIOC = @intToPtr(*volatile types.peripherals.GPIOA, 0x40011000);
    +            ///  General-purpose I/Os
    +            pub const GPIOD = @intToPtr(*volatile types.peripherals.GPIOA, 0x40011400);
    +            ///  General-purpose I/Os
    +            pub const GPIOE = @intToPtr(*volatile types.peripherals.GPIOA, 0x40011800);
    +            ///  Analog to digital converter
    +            pub const ADC0 = @intToPtr(*volatile types.peripherals.ADC0, 0x40012400);
    +            ///  Analog to digital converter
    +            pub const ADC1 = @intToPtr(*volatile types.peripherals.ADC1, 0x40012800);
    +            ///  Advanced-timers
    +            pub const TIMER0 = @intToPtr(*volatile types.peripherals.TIMER0, 0x40012c00);
    +            ///  Serial peripheral interface
    +            pub const SPI0 = @intToPtr(*volatile types.peripherals.SPI0, 0x40013000);
    +            ///  Universal synchronous asynchronous receiver transmitter
    +            pub const USART0 = @intToPtr(*volatile types.peripherals.USART0, 0x40013800);
    +            ///  DMA controller
    +            pub const DMA0 = @intToPtr(*volatile types.peripherals.DMA0, 0x40020000);
    +            ///  Direct memory access controller
    +            pub const DMA1 = @intToPtr(*volatile types.peripherals.DMA1, 0x40020000);
    +            ///  Reset and clock unit
    +            pub const RCU = @intToPtr(*volatile types.peripherals.RCU, 0x40021000);
    +            ///  FMC
    +            pub const FMC = @intToPtr(*volatile types.peripherals.FMC, 0x40022000);
    +            ///  cyclic redundancy check calculation unit
    +            pub const CRC = @intToPtr(*volatile types.peripherals.CRC, 0x40023000);
    +            ///  USB full speed global registers
    +            pub const USBFS_GLOBAL = @intToPtr(*volatile types.peripherals.USBFS_GLOBAL, 0x50000000);
    +            ///  USB on the go full speed host
    +            pub const USBFS_HOST = @intToPtr(*volatile types.peripherals.USBFS_HOST, 0x50000400);
    +            ///  USB on the go full speed device
    +            pub const USBFS_DEVICE = @intToPtr(*volatile types.peripherals.USBFS_DEVICE, 0x50000800);
    +            ///  USB on the go full speed
    +            pub const USBFS_PWRCLK = @intToPtr(*volatile types.peripherals.USBFS_PWRCLK, 0x50000e00);
    +            ///  External memory controller
    +            pub const EXMC = @intToPtr(*volatile types.peripherals.EXMC, 0xa0000000);
    +            ///  Enhanced Core Local Interrupt Controller
    +            pub const ECLIC = @intToPtr(*volatile types.peripherals.ECLIC, 0xd2000000);
    +            ///  System Tick Timer
    +            pub const SysTick = @intToPtr(*volatile types.peripherals.SCS.SysTick, 0xe000e010);
    +            ///  Debug support
    +            pub const DBG = @intToPtr(*volatile types.peripherals.DBG, 0xe0042000);
    +        };
    +    };
    +};
    +
    +pub const types = struct {
    +    pub const peripherals = struct {
    +        ///  System Control Space
    +        pub const SCS = struct {
    +            ///  System Tick Timer
    +            pub const SysTick = extern struct {
    +                ///  SysTick Control and Status Register
    +                CTRL: mmio.Mmio(packed struct(u32) {
    +                    ENABLE: u1,
    +                    TICKINT: u1,
    +                    CLKSOURCE: u1,
    +                    reserved16: u13,
    +                    COUNTFLAG: u1,
    +                    padding: u15,
    +                }),
    +                ///  SysTick Reload Value Register
    +                LOAD: mmio.Mmio(packed struct(u32) {
    +                    RELOAD: u24,
    +                    padding: u8,
    +                }),
    +                ///  SysTick Current Value Register
    +                VAL: mmio.Mmio(packed struct(u32) {
    +                    CURRENT: u24,
    +                    padding: u8,
    +                }),
    +                ///  SysTick Calibration Register
    +                CALIB: mmio.Mmio(packed struct(u32) {
    +                    TENMS: u24,
    +                    reserved30: u6,
    +                    SKEW: u1,
    +                    NOREF: u1,
    +                }),
    +            };
    +        };
    +
    +        ///  Analog to digital converter
    +        pub const ADC0 = extern struct {
    +            ///  status register
    +            STAT: mmio.Mmio(packed struct(u32) {
    +                ///  Analog watchdog event flag
    +                WDE: u1,
    +                ///  End of group conversion flag
    +                EOC: u1,
    +                ///  End of inserted group conversion flag
    +                EOIC: u1,
    +                ///  Start flag of inserted channel group
    +                STIC: u1,
    +                ///  Start flag of regular channel group
    +                STRC: u1,
    +                padding: u27,
    +            }),
    +            ///  control register 0
    +            CTL0: mmio.Mmio(packed struct(u32) {
    +                ///  Analog watchdog channel select
    +                WDCHSEL: u5,
    +                ///  Interrupt enable for EOC
    +                EOCIE: u1,
    +                ///  Interrupt enable for WDE
    +                WDEIE: u1,
    +                ///  Interrupt enable for EOIC
    +                EOICIE: u1,
    +                ///  Scan mode
    +                SM: u1,
    +                ///  When in scan mode, analog watchdog is effective on a single channel
    +                WDSC: u1,
    +                ///  Inserted channel group convert automatically
    +                ICA: u1,
    +                ///  Discontinuous mode on regular channels
    +                DISRC: u1,
    +                ///  Discontinuous mode on inserted channels
    +                DISIC: u1,
    +                ///  Number of conversions in discontinuous mode
    +                DISNUM: u3,
    +                ///  sync mode selection
    +                SYNCM: u4,
    +                reserved22: u2,
    +                ///  Inserted channel analog watchdog enable
    +                IWDEN: u1,
    +                ///  Regular channel analog watchdog enable
    +                RWDEN: u1,
    +                padding: u8,
    +            }),
    +            ///  control register 1
    +            CTL1: mmio.Mmio(packed struct(u32) {
    +                ///  ADC on
    +                ADCON: u1,
    +                ///  Continuous mode
    +                CTN: u1,
    +                ///  ADC calibration
    +                CLB: u1,
    +                ///  Reset calibration
    +                RSTCLB: u1,
    +                reserved8: u4,
    +                ///  DMA request enable
    +                DMA: u1,
    +                reserved11: u2,
    +                ///  Data alignment
    +                DAL: u1,
    +                ///  External trigger select for inserted channel
    +                ETSIC: u3,
    +                ///  External trigger select for inserted channel
    +                ETEIC: u1,
    +                reserved17: u1,
    +                ///  External trigger select for regular channel
    +                ETSRC: u3,
    +                ///  External trigger enable for regular channel
    +                ETERC: u1,
    +                ///  Start on inserted channel
    +                SWICST: u1,
    +                ///  Start on regular channel
    +                SWRCST: u1,
    +                ///  Channel 16 and 17 enable of ADC0
    +                TSVREN: u1,
    +                padding: u8,
    +            }),
    +            ///  Sample time register 0
    +            SAMPT0: mmio.Mmio(packed struct(u32) {
    +                ///  Channel 10 sample time selection
    +                SPT10: u3,
    +                ///  Channel 11 sample time selection
    +                SPT11: u3,
    +                ///  Channel 12 sample time selection
    +                SPT12: u3,
    +                ///  Channel 13 sample time selection
    +                SPT13: u3,
    +                ///  Channel 14 sample time selection
    +                SPT14: u3,
    +                ///  Channel 15 sample time selection
    +                SPT15: u3,
    +                ///  Channel 16 sample time selection
    +                SPT16: u3,
    +                ///  Channel 17 sample time selection
    +                SPT17: u3,
    +                padding: u8,
    +            }),
    +            ///  Sample time register 1
    +            SAMPT1: mmio.Mmio(packed struct(u32) {
    +                ///  Channel 0 sample time selection
    +                SPT0: u3,
    +                ///  Channel 1 sample time selection
    +                SPT1: u3,
    +                ///  Channel 2 sample time selection
    +                SPT2: u3,
    +                ///  Channel 3 sample time selection
    +                SPT3: u3,
    +                ///  Channel 4 sample time selection
    +                SPT4: u3,
    +                ///  Channel 5 sample time selection
    +                SPT5: u3,
    +                ///  Channel 6 sample time selection
    +                SPT6: u3,
    +                ///  Channel 7 sample time selection
    +                SPT7: u3,
    +                ///  Channel 8 sample time selection
    +                SPT8: u3,
    +                ///  Channel 9 sample time selection
    +                SPT9: u3,
    +                padding: u2,
    +            }),
    +            ///  Inserted channel data offset register 0
    +            IOFF0: mmio.Mmio(packed struct(u32) {
    +                ///  Data offset for inserted channel 0
    +                IOFF: u12,
    +                padding: u20,
    +            }),
    +            ///  Inserted channel data offset register 1
    +            IOFF1: mmio.Mmio(packed struct(u32) {
    +                ///  Data offset for inserted channel 1
    +                IOFF: u12,
    +                padding: u20,
    +            }),
    +            ///  Inserted channel data offset register 2
    +            IOFF2: mmio.Mmio(packed struct(u32) {
    +                ///  Data offset for inserted channel 2
    +                IOFF: u12,
    +                padding: u20,
    +            }),
    +            ///  Inserted channel data offset register 3
    +            IOFF3: mmio.Mmio(packed struct(u32) {
    +                ///  Data offset for inserted channel 3
    +                IOFF: u12,
    +                padding: u20,
    +            }),
    +            ///  watchdog higher threshold register
    +            WDHT: mmio.Mmio(packed struct(u32) {
    +                ///  Analog watchdog higher threshold
    +                WDHT: u12,
    +                padding: u20,
    +            }),
    +            ///  watchdog lower threshold register
    +            WDLT: mmio.Mmio(packed struct(u32) {
    +                ///  Analog watchdog lower threshold
    +                WDLT: u12,
    +                padding: u20,
    +            }),
    +            ///  regular sequence register 0
    +            RSQ0: mmio.Mmio(packed struct(u32) {
    +                ///  13th conversion in regular sequence
    +                RSQ12: u5,
    +                ///  14th conversion in regular sequence
    +                RSQ13: u5,
    +                ///  15th conversion in regular sequence
    +                RSQ14: u5,
    +                ///  16th conversion in regular sequence
    +                RSQ15: u5,
    +                ///  Regular channel group length
    +                RL: u4,
    +                padding: u8,
    +            }),
    +            ///  regular sequence register 1
    +            RSQ1: mmio.Mmio(packed struct(u32) {
    +                ///  7th conversion in regular sequence
    +                RSQ6: u5,
    +                ///  8th conversion in regular sequence
    +                RSQ7: u5,
    +                ///  9th conversion in regular sequence
    +                RSQ8: u5,
    +                ///  10th conversion in regular sequence
    +                RSQ9: u5,
    +                ///  11th conversion in regular sequence
    +                RSQ10: u5,
    +                ///  12th conversion in regular sequence
    +                RSQ11: u5,
    +                padding: u2,
    +            }),
    +            ///  regular sequence register 2
    +            RSQ2: mmio.Mmio(packed struct(u32) {
    +                ///  1st conversion in regular sequence
    +                RSQ0: u5,
    +                ///  2nd conversion in regular sequence
    +                RSQ1: u5,
    +                ///  3rd conversion in regular sequence
    +                RSQ2: u5,
    +                ///  4th conversion in regular sequence
    +                RSQ3: u5,
    +                ///  5th conversion in regular sequence
    +                RSQ4: u5,
    +                ///  6th conversion in regular sequence
    +                RSQ5: u5,
    +                padding: u2,
    +            }),
    +            ///  Inserted sequence register
    +            ISQ: mmio.Mmio(packed struct(u32) {
    +                ///  1st conversion in inserted sequence
    +                ISQ0: u5,
    +                ///  2nd conversion in inserted sequence
    +                ISQ1: u5,
    +                ///  3rd conversion in inserted sequence
    +                ISQ2: u5,
    +                ///  4th conversion in inserted sequence
    +                ISQ3: u5,
    +                ///  Inserted channel group length
    +                IL: u2,
    +                padding: u10,
    +            }),
    +            ///  Inserted data register 0
    +            IDATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Inserted number n conversion data
    +                IDATAn: u16,
    +                padding: u16,
    +            }),
    +            ///  Inserted data register 1
    +            IDATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Inserted number n conversion data
    +                IDATAn: u16,
    +                padding: u16,
    +            }),
    +            ///  Inserted data register 2
    +            IDATA2: mmio.Mmio(packed struct(u32) {
    +                ///  Inserted number n conversion data
    +                IDATAn: u16,
    +                padding: u16,
    +            }),
    +            ///  Inserted data register 3
    +            IDATA3: mmio.Mmio(packed struct(u32) {
    +                ///  Inserted number n conversion data
    +                IDATAn: u16,
    +                padding: u16,
    +            }),
    +            ///  regular data register
    +            RDATA: mmio.Mmio(packed struct(u32) {
    +                ///  Regular channel data
    +                RDATA: u16,
    +                ///  ADC regular channel data
    +                ADC1RDTR: u16,
    +            }),
    +            reserved128: [48]u8,
    +            ///  Oversample control register
    +            OVSAMPCTL: mmio.Mmio(packed struct(u32) {
    +                ///  Oversampler Enable
    +                OVSEN: u1,
    +                reserved2: u1,
    +                ///  Oversampling ratio
    +                OVSR: u3,
    +                ///  Oversampling shift
    +                OVSS: u4,
    +                ///  Triggered Oversampling
    +                TOVS: u1,
    +                reserved12: u2,
    +                ///  ADC resolution
    +                DRES: u2,
    +                padding: u18,
    +            }),
    +        };
    +
    +        ///  Analog to digital converter
    +        pub const ADC1 = extern struct {
    +            ///  status register
    +            STAT: mmio.Mmio(packed struct(u32) {
    +                ///  Analog watchdog event flag
    +                WDE: u1,
    +                ///  End of group conversion flag
    +                EOC: u1,
    +                ///  End of inserted group conversion flag
    +                EOIC: u1,
    +                ///  Start flag of inserted channel group
    +                STIC: u1,
    +                ///  Start flag of regular channel group
    +                STRC: u1,
    +                padding: u27,
    +            }),
    +            ///  control register 0
    +            CTL0: mmio.Mmio(packed struct(u32) {
    +                ///  Analog watchdog channel select
    +                WDCHSEL: u5,
    +                ///  Interrupt enable for EOC
    +                EOCIE: u1,
    +                ///  Interrupt enable for WDE
    +                WDEIE: u1,
    +                ///  Interrupt enable for EOIC
    +                EOICIE: u1,
    +                ///  Scan mode
    +                SM: u1,
    +                ///  When in scan mode, analog watchdog is effective on a single channel
    +                WDSC: u1,
    +                ///  Inserted channel group convert automatically
    +                ICA: u1,
    +                ///  Discontinuous mode on regular channels
    +                DISRC: u1,
    +                ///  Discontinuous mode on inserted channels
    +                DISIC: u1,
    +                ///  Number of conversions in discontinuous mode
    +                DISNUM: u3,
    +                reserved22: u6,
    +                ///  Inserted channel analog watchdog enable
    +                IWDEN: u1,
    +                ///  Regular channel analog watchdog enable
    +                RWDEN: u1,
    +                padding: u8,
    +            }),
    +            ///  control register 1
    +            CTL1: mmio.Mmio(packed struct(u32) {
    +                ///  ADC on
    +                ADCON: u1,
    +                ///  Continuous mode
    +                CTN: u1,
    +                ///  ADC calibration
    +                CLB: u1,
    +                ///  Reset calibration
    +                RSTCLB: u1,
    +                reserved8: u4,
    +                ///  DMA request enable
    +                DMA: u1,
    +                reserved11: u2,
    +                ///  Data alignment
    +                DAL: u1,
    +                ///  External trigger select for inserted channel
    +                ETSIC: u3,
    +                ///  External trigger enable for inserted channel
    +                ETEIC: u1,
    +                reserved17: u1,
    +                ///  External trigger select for regular channel
    +                ETSRC: u3,
    +                ///  External trigger enable for regular channel
    +                ETERC: u1,
    +                ///  Start on inserted channel
    +                SWICST: u1,
    +                ///  Start on regular channel
    +                SWRCST: u1,
    +                padding: u9,
    +            }),
    +            ///  Sample time register 0
    +            SAMPT0: mmio.Mmio(packed struct(u32) {
    +                ///  Channel 10 sample time selection
    +                SPT10: u3,
    +                ///  Channel 11 sample time selection
    +                SPT11: u3,
    +                ///  Channel 12 sample time selection
    +                SPT12: u3,
    +                ///  Channel 13 sample time selection
    +                SPT13: u3,
    +                ///  Channel 14 sample time selection
    +                SPT14: u3,
    +                ///  Channel 15 sample time selection
    +                SPT15: u3,
    +                ///  Channel 16 sample time selection
    +                SPT16: u3,
    +                ///  Channel 17 sample time selection
    +                SPT17: u3,
    +                padding: u8,
    +            }),
    +            ///  Sample time register 1
    +            SAMPT1: mmio.Mmio(packed struct(u32) {
    +                ///  Channel 0 sample time selection
    +                SPT0: u3,
    +                ///  Channel 1 sample time selection
    +                SPT1: u3,
    +                ///  Channel 2 sample time selection
    +                SPT2: u3,
    +                ///  Channel 3 sample time selection
    +                SPT3: u3,
    +                ///  Channel 4 sample time selection
    +                SPT4: u3,
    +                ///  Channel 5 sample time selection
    +                SPT5: u3,
    +                ///  Channel 6 sample time selection
    +                SPT6: u3,
    +                ///  Channel 7 sample time selection
    +                SPT7: u3,
    +                ///  Channel 8 sample time selection
    +                SPT8: u3,
    +                ///  Channel 9 sample time selection
    +                SPT9: u3,
    +                padding: u2,
    +            }),
    +            ///  Inserted channel data offset register 0
    +            IOFF0: mmio.Mmio(packed struct(u32) {
    +                ///  Data offset for inserted channel 0
    +                IOFF: u12,
    +                padding: u20,
    +            }),
    +            ///  Inserted channel data offset register 1
    +            IOFF1: mmio.Mmio(packed struct(u32) {
    +                ///  Data offset for inserted channel 1
    +                IOFF: u12,
    +                padding: u20,
    +            }),
    +            ///  Inserted channel data offset register 2
    +            IOFF2: mmio.Mmio(packed struct(u32) {
    +                ///  Data offset for inserted channel 2
    +                IOFF: u12,
    +                padding: u20,
    +            }),
    +            ///  Inserted channel data offset register 3
    +            IOFF3: mmio.Mmio(packed struct(u32) {
    +                ///  Data offset for inserted channel 3
    +                IOFF: u12,
    +                padding: u20,
    +            }),
    +            ///  watchdog higher threshold register
    +            WDHT: mmio.Mmio(packed struct(u32) {
    +                ///  Analog watchdog higher threshold
    +                WDHT: u12,
    +                padding: u20,
    +            }),
    +            ///  watchdog lower threshold register
    +            WDLT: mmio.Mmio(packed struct(u32) {
    +                ///  Analog watchdog lower threshold
    +                WDLT: u12,
    +                padding: u20,
    +            }),
    +            ///  regular sequence register 0
    +            RSQ0: mmio.Mmio(packed struct(u32) {
    +                ///  13th conversion in regular sequence
    +                RSQ12: u5,
    +                ///  14th conversion in regular sequence
    +                RSQ13: u5,
    +                ///  15th conversion in regular sequence
    +                RSQ14: u5,
    +                ///  16th conversion in regular sequence
    +                RSQ15: u5,
    +                ///  Regular channel group length
    +                RL: u4,
    +                padding: u8,
    +            }),
    +            ///  regular sequence register 1
    +            RSQ1: mmio.Mmio(packed struct(u32) {
    +                ///  7th conversion in regular sequence
    +                RSQ6: u5,
    +                ///  8th conversion in regular sequence
    +                RSQ7: u5,
    +                ///  9th conversion in regular sequence
    +                RSQ8: u5,
    +                ///  10th conversion in regular sequence
    +                RSQ9: u5,
    +                ///  11th conversion in regular sequence
    +                RSQ10: u5,
    +                ///  12th conversion in regular sequence
    +                RSQ11: u5,
    +                padding: u2,
    +            }),
    +            ///  regular sequence register 2
    +            RSQ2: mmio.Mmio(packed struct(u32) {
    +                ///  1st conversion in regular sequence
    +                RSQ0: u5,
    +                ///  2nd conversion in regular sequence
    +                RSQ1: u5,
    +                ///  3rd conversion in regular sequence
    +                RSQ2: u5,
    +                ///  4th conversion in regular sequence
    +                RSQ3: u5,
    +                ///  5th conversion in regular sequence
    +                RSQ4: u5,
    +                ///  6th conversion in regular sequence
    +                RSQ5: u5,
    +                padding: u2,
    +            }),
    +            ///  Inserted sequence register
    +            ISQ: mmio.Mmio(packed struct(u32) {
    +                ///  1st conversion in inserted sequence
    +                ISQ0: u5,
    +                ///  2nd conversion in inserted sequence
    +                ISQ1: u5,
    +                ///  3rd conversion in inserted sequence
    +                ISQ2: u5,
    +                ///  4th conversion in inserted sequence
    +                ISQ3: u5,
    +                ///  Inserted channel group length
    +                IL: u2,
    +                padding: u10,
    +            }),
    +            ///  Inserted data register 0
    +            IDATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Inserted number n conversion data
    +                IDATAn: u16,
    +                padding: u16,
    +            }),
    +            ///  Inserted data register 1
    +            IDATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Inserted number n conversion data
    +                IDATAn: u16,
    +                padding: u16,
    +            }),
    +            ///  Inserted data register 2
    +            IDATA2: mmio.Mmio(packed struct(u32) {
    +                ///  Inserted number n conversion data
    +                IDATAn: u16,
    +                padding: u16,
    +            }),
    +            ///  Inserted data register 3
    +            IDATA3: mmio.Mmio(packed struct(u32) {
    +                ///  Inserted number n conversion data
    +                IDATAn: u16,
    +                padding: u16,
    +            }),
    +            ///  regular data register
    +            RDATA: mmio.Mmio(packed struct(u32) {
    +                ///  Regular channel data
    +                RDATA: u16,
    +                padding: u16,
    +            }),
    +        };
    +
    +        ///  Alternate-function I/Os
    +        pub const AFIO = extern struct {
    +            ///  Event control register
    +            EC: mmio.Mmio(packed struct(u32) {
    +                ///  Event output pin selection
    +                PIN: u4,
    +                ///  Event output port selection
    +                PORT: u3,
    +                ///  Event output enable
    +                EOE: u1,
    +                padding: u24,
    +            }),
    +            ///  AFIO port configuration register 0
    +            PCF0: mmio.Mmio(packed struct(u32) {
    +                ///  SPI0 remapping
    +                SPI0_REMAP: u1,
    +                ///  I2C0 remapping
    +                I2C0_REMAP: u1,
    +                ///  USART0 remapping
    +                USART0_REMAP: u1,
    +                ///  USART1 remapping
    +                USART1_REMAP: u1,
    +                ///  USART2 remapping
    +                USART2_REMAP: u2,
    +                ///  TIMER0 remapping
    +                TIMER0_REMAP: u2,
    +                ///  TIMER1 remapping
    +                TIMER1_REMAP: u2,
    +                ///  TIMER2 remapping
    +                TIMER2_REMAP: u2,
    +                ///  TIMER3 remapping
    +                TIMER3_REMAP: u1,
    +                ///  CAN0 alternate interface remapping
    +                CAN0_REMAP: u2,
    +                ///  Port D0/Port D1 mapping on OSC_IN/OSC_OUT
    +                PD01_REMAP: u1,
    +                ///  TIMER4 channel3 internal remapping
    +                TIMER4CH3_IREMAP: u1,
    +                reserved22: u5,
    +                ///  CAN1 I/O remapping
    +                CAN1_REMAP: u1,
    +                reserved24: u1,
    +                ///  Serial wire JTAG configuration
    +                SWJ_CFG: u3,
    +                reserved28: u1,
    +                ///  SPI2/I2S2 remapping
    +                SPI2_REMAP: u1,
    +                ///  TIMER1 internal trigger 1 remapping
    +                TIMER1ITI1_REMAP: u1,
    +                padding: u2,
    +            }),
    +            ///  EXTI sources selection register 0
    +            EXTISS0: mmio.Mmio(packed struct(u32) {
    +                ///  EXTI 0 sources selection
    +                EXTI0_SS: u4,
    +                ///  EXTI 1 sources selection
    +                EXTI1_SS: u4,
    +                ///  EXTI 2 sources selection
    +                EXTI2_SS: u4,
    +                ///  EXTI 3 sources selection
    +                EXTI3_SS: u4,
    +                padding: u16,
    +            }),
    +            ///  EXTI sources selection register 1
    +            EXTISS1: mmio.Mmio(packed struct(u32) {
    +                ///  EXTI 4 sources selection
    +                EXTI4_SS: u4,
    +                ///  EXTI 5 sources selection
    +                EXTI5_SS: u4,
    +                ///  EXTI 6 sources selection
    +                EXTI6_SS: u4,
    +                ///  EXTI 7 sources selection
    +                EXTI7_SS: u4,
    +                padding: u16,
    +            }),
    +            ///  EXTI sources selection register 2
    +            EXTISS2: mmio.Mmio(packed struct(u32) {
    +                ///  EXTI 8 sources selection
    +                EXTI8_SS: u4,
    +                ///  EXTI 9 sources selection
    +                EXTI9_SS: u4,
    +                ///  EXTI 10 sources selection
    +                EXTI10_SS: u4,
    +                ///  EXTI 11 sources selection
    +                EXTI11_SS: u4,
    +                padding: u16,
    +            }),
    +            ///  EXTI sources selection register 3
    +            EXTISS3: mmio.Mmio(packed struct(u32) {
    +                ///  EXTI 12 sources selection
    +                EXTI12_SS: u4,
    +                ///  EXTI 13 sources selection
    +                EXTI13_SS: u4,
    +                ///  EXTI 14 sources selection
    +                EXTI14_SS: u4,
    +                ///  EXTI 15 sources selection
    +                EXTI15_SS: u4,
    +                padding: u16,
    +            }),
    +            reserved28: [4]u8,
    +            ///  AFIO port configuration register 1
    +            PCF1: mmio.Mmio(packed struct(u32) {
    +                reserved10: u10,
    +                ///  EXMC_NADV connect/disconnect
    +                EXMC_NADV: u1,
    +                padding: u21,
    +            }),
    +        };
    +
    +        ///  Backup registers
    +        pub const BKP = extern struct {
    +            reserved4: [4]u8,
    +            ///  Backup data register 0
    +            DATA0: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved8: [2]u8,
    +            ///  Backup data register 1
    +            DATA1: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved12: [2]u8,
    +            ///  Backup data register 2
    +            DATA2: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved16: [2]u8,
    +            ///  Backup data register 3
    +            DATA3: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved20: [2]u8,
    +            ///  Backup data register 4
    +            DATA4: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved24: [2]u8,
    +            ///  Backup data register 5
    +            DATA5: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved28: [2]u8,
    +            ///  Backup data register 6
    +            DATA6: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved32: [2]u8,
    +            ///  Backup data register 7
    +            DATA7: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved36: [2]u8,
    +            ///  Backup data register 8
    +            DATA8: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved40: [2]u8,
    +            ///  Backup data register 9
    +            DATA9: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved44: [2]u8,
    +            ///  RTC signal output control register
    +            OCTL: mmio.Mmio(packed struct(u16) {
    +                ///  RTC clock calibration value
    +                RCCV: u7,
    +                ///  RTC clock calibration output enable
    +                COEN: u1,
    +                ///  RTC alarm or second signal output enable
    +                ASOEN: u1,
    +                ///  RTC output selection
    +                ROSEL: u1,
    +                padding: u6,
    +            }),
    +            reserved48: [2]u8,
    +            ///  Tamper pin control register
    +            TPCTL: mmio.Mmio(packed struct(u16) {
    +                ///  TAMPER detection enable
    +                TPEN: u1,
    +                ///  TAMPER pin active level
    +                TPAL: u1,
    +                padding: u14,
    +            }),
    +            reserved52: [2]u8,
    +            ///  Tamper control and status register
    +            TPCS: mmio.Mmio(packed struct(u16) {
    +                ///  Tamper event reset
    +                TER: u1,
    +                ///  Tamper interrupt reset
    +                TIR: u1,
    +                ///  Tamper interrupt enable
    +                TPIE: u1,
    +                reserved8: u5,
    +                ///  Tamper event flag
    +                TEF: u1,
    +                ///  Tamper interrupt flag
    +                TIF: u1,
    +                padding: u6,
    +            }),
    +            reserved64: [10]u8,
    +            ///  Backup data register 10
    +            DATA10: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved68: [2]u8,
    +            ///  Backup data register 11
    +            DATA11: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved72: [2]u8,
    +            ///  Backup data register 12
    +            DATA12: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved76: [2]u8,
    +            ///  Backup data register 13
    +            DATA13: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved80: [2]u8,
    +            ///  Backup data register 14
    +            DATA14: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved84: [2]u8,
    +            ///  Backup data register 15
    +            DATA15: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved88: [2]u8,
    +            ///  Backup data register 16
    +            DATA16: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved92: [2]u8,
    +            ///  Backup data register 17
    +            DATA17: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved96: [2]u8,
    +            ///  Backup data register 18
    +            DATA18: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved100: [2]u8,
    +            ///  Backup data register 19
    +            DATA19: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved104: [2]u8,
    +            ///  Backup data register 20
    +            DATA20: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved108: [2]u8,
    +            ///  Backup data register 21
    +            DATA21: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved112: [2]u8,
    +            ///  Backup data register 22
    +            DATA22: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved116: [2]u8,
    +            ///  Backup data register 23
    +            DATA23: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved120: [2]u8,
    +            ///  Backup data register 24
    +            DATA24: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved124: [2]u8,
    +            ///  Backup data register 25
    +            DATA25: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved128: [2]u8,
    +            ///  Backup data register 26
    +            DATA26: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved132: [2]u8,
    +            ///  Backup data register 27
    +            DATA27: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved136: [2]u8,
    +            ///  Backup data register 28
    +            DATA28: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved140: [2]u8,
    +            ///  Backup data register 29
    +            DATA29: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved144: [2]u8,
    +            ///  Backup data register 30
    +            DATA30: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved148: [2]u8,
    +            ///  Backup data register 31
    +            DATA31: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved152: [2]u8,
    +            ///  Backup data register 32
    +            DATA32: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved156: [2]u8,
    +            ///  Backup data register 33
    +            DATA33: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved160: [2]u8,
    +            ///  Backup data register 34
    +            DATA34: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved164: [2]u8,
    +            ///  Backup data register 35
    +            DATA35: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved168: [2]u8,
    +            ///  Backup data register 36
    +            DATA36: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved172: [2]u8,
    +            ///  Backup data register 37
    +            DATA37: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved176: [2]u8,
    +            ///  Backup data register 38
    +            DATA38: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved180: [2]u8,
    +            ///  Backup data register 39
    +            DATA39: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved184: [2]u8,
    +            ///  Backup data register 40
    +            DATA40: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +            reserved188: [2]u8,
    +            ///  Backup data register 41
    +            DATA41: mmio.Mmio(packed struct(u16) {
    +                ///  Backup data
    +                DATA: u16,
    +            }),
    +        };
    +
    +        ///  Controller area network
    +        pub const CAN0 = extern struct {
    +            ///  Control register
    +            CTL: mmio.Mmio(packed struct(u32) {
    +                ///  Initial working mode
    +                IWMOD: u1,
    +                ///  Sleep working mode
    +                SLPWMOD: u1,
    +                ///  Transmit FIFO order
    +                TFO: u1,
    +                ///  Receive FIFO overwrite disable
    +                RFOD: u1,
    +                ///  Automatic retransmission disable
    +                ARD: u1,
    +                ///  Automatic wakeup
    +                AWU: u1,
    +                ///  Automatic bus-off recovery
    +                ABOR: u1,
    +                ///  Time-triggered communication
    +                TTC: u1,
    +                reserved15: u7,
    +                ///  Software reset
    +                SWRST: u1,
    +                ///  Debug freeze
    +                DFZ: u1,
    +                padding: u15,
    +            }),
    +            ///  Status register
    +            STAT: mmio.Mmio(packed struct(u32) {
    +                ///  Initial working state
    +                IWS: u1,
    +                ///  Sleep working state
    +                SLPWS: u1,
    +                ///  Error interrupt flag
    +                ERRIF: u1,
    +                ///  Status change interrupt flag of wakeup from sleep working mode
    +                WUIF: u1,
    +                ///  Status change interrupt flag of sleep working mode entering
    +                SLPIF: u1,
    +                reserved8: u3,
    +                ///  Transmitting state
    +                TS: u1,
    +                ///  Receiving state
    +                RS: u1,
    +                ///  Last sample value of RX pin
    +                LASTRX: u1,
    +                ///  RX level
    +                RXL: u1,
    +                padding: u20,
    +            }),
    +            ///  Transmit status register
    +            TSTAT: mmio.Mmio(packed struct(u32) {
    +                ///  Mailbox 0 transmit finished
    +                MTF0: u1,
    +                ///  Mailbox 0 transmit finished and no error
    +                MTFNERR0: u1,
    +                ///  Mailbox 0 arbitration lost
    +                MAL0: u1,
    +                ///  Mailbox 0 transmit error
    +                MTE0: u1,
    +                reserved7: u3,
    +                ///  Mailbox 0 stop transmitting
    +                MST0: u1,
    +                ///  Mailbox 1 transmit finished
    +                MTF1: u1,
    +                ///  Mailbox 1 transmit finished and no error
    +                MTFNERR1: u1,
    +                ///  Mailbox 1 arbitration lost
    +                MAL1: u1,
    +                ///  Mailbox 1 transmit error
    +                MTE1: u1,
    +                reserved15: u3,
    +                ///  Mailbox 1 stop transmitting
    +                MST1: u1,
    +                ///  Mailbox 2 transmit finished
    +                MTF2: u1,
    +                ///  Mailbox 2 transmit finished and no error
    +                MTFNERR2: u1,
    +                ///  Mailbox 2 arbitration lost
    +                MAL2: u1,
    +                ///  Mailbox 2 transmit error
    +                MTE2: u1,
    +                reserved23: u3,
    +                ///  Mailbox 2 stop transmitting
    +                MST2: u1,
    +                ///  number of the transmit FIFO mailbox in which the frame will be transmitted if at least one mailbox is empty
    +                NUM: u2,
    +                ///  Transmit mailbox 0 empty
    +                TME0: u1,
    +                ///  Transmit mailbox 1 empty
    +                TME1: u1,
    +                ///  Transmit mailbox 2 empty
    +                TME2: u1,
    +                ///  Transmit mailbox 0 last sending in transmit FIFO
    +                TMLS0: u1,
    +                ///  Transmit mailbox 1 last sending in transmit FIFO
    +                TMLS1: u1,
    +                ///  Transmit mailbox 2 last sending in transmit FIFO
    +                TMLS2: u1,
    +            }),
    +            ///  Receive message FIFO0 register
    +            RFIFO0: mmio.Mmio(packed struct(u32) {
    +                ///  Receive FIFO0 length
    +                RFL0: u2,
    +                reserved3: u1,
    +                ///  Receive FIFO0 full
    +                RFF0: u1,
    +                ///  Receive FIFO0 overfull
    +                RFO0: u1,
    +                ///  Receive FIFO0 dequeue
    +                RFD0: u1,
    +                padding: u26,
    +            }),
    +            ///  Receive message FIFO1 register
    +            RFIFO1: mmio.Mmio(packed struct(u32) {
    +                ///  Receive FIFO1 length
    +                RFL1: u2,
    +                reserved3: u1,
    +                ///  Receive FIFO1 full
    +                RFF1: u1,
    +                ///  Receive FIFO1 overfull
    +                RFO1: u1,
    +                ///  Receive FIFO1 dequeue
    +                RFD1: u1,
    +                padding: u26,
    +            }),
    +            ///  Interrupt enable register
    +            INTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Transmit mailbox empty interrupt enable
    +                TMEIE: u1,
    +                ///  Receive FIFO0 not empty interrupt enable
    +                RFNEIE0: u1,
    +                ///  Receive FIFO0 full interrupt enable
    +                RFFIE0: u1,
    +                ///  Receive FIFO0 overfull interrupt enable
    +                RFOIE0: u1,
    +                ///  Receive FIFO1 not empty interrupt enable
    +                RFNEIE1: u1,
    +                ///  Receive FIFO1 full interrupt enable
    +                RFFIE1: u1,
    +                ///  Receive FIFO1 overfull interrupt enable
    +                RFOIE1: u1,
    +                reserved8: u1,
    +                ///  Warning error interrupt enable
    +                WERRIE: u1,
    +                ///  Passive error interrupt enable
    +                PERRIE: u1,
    +                ///  Bus-off interrupt enable
    +                BOIE: u1,
    +                ///  Error number interrupt enable
    +                ERRNIE: u1,
    +                reserved15: u3,
    +                ///  Error interrupt enable
    +                ERRIE: u1,
    +                ///  Wakeup interrupt enable
    +                WIE: u1,
    +                ///  Sleep working interrupt enable
    +                SLPWIE: u1,
    +                padding: u14,
    +            }),
    +            ///  Error register
    +            ERR: mmio.Mmio(packed struct(u32) {
    +                ///  Warning error
    +                WERR: u1,
    +                ///  Passive error
    +                PERR: u1,
    +                ///  Bus-off error
    +                BOERR: u1,
    +                reserved4: u1,
    +                ///  Error number
    +                ERRN: u3,
    +                reserved16: u9,
    +                ///  Transmit Error Count defined by the CAN standard
    +                TECNT: u8,
    +                ///  Receive Error Count defined by the CAN standard
    +                RECNT: u8,
    +            }),
    +            ///  Bit timing register
    +            BT: mmio.Mmio(packed struct(u32) {
    +                ///  Baud rate prescaler
    +                BAUDPSC: u10,
    +                reserved16: u6,
    +                ///  Bit segment 1
    +                BS1: u4,
    +                ///  Bit segment 2
    +                BS2: u3,
    +                reserved24: u1,
    +                ///  Resynchronization jump width
    +                SJW: u2,
    +                reserved30: u4,
    +                ///  Loopback communication mode
    +                LCMOD: u1,
    +                ///  Silent communication mode
    +                SCMOD: u1,
    +            }),
    +            reserved384: [352]u8,
    +            ///  Transmit mailbox identifier register 0
    +            TMI0: mmio.Mmio(packed struct(u32) {
    +                ///  Transmit enable
    +                TEN: u1,
    +                ///  Frame type
    +                FT: u1,
    +                ///  Frame format
    +                FF: u1,
    +                ///  The frame identifier
    +                EFID: u18,
    +                ///  The frame identifier
    +                SFID_EFID: u11,
    +            }),
    +            ///  Transmit mailbox property register 0
    +            TMP0: mmio.Mmio(packed struct(u32) {
    +                ///  Data length code
    +                DLENC: u4,
    +                reserved8: u4,
    +                ///  Time stamp enable
    +                TSEN: u1,
    +                reserved16: u7,
    +                ///  Time stamp
    +                TS: u16,
    +            }),
    +            ///  Transmit mailbox data0 register
    +            TMDATA00: mmio.Mmio(packed struct(u32) {
    +                ///  Data byte 0
    +                DB0: u8,
    +                ///  Data byte 1
    +                DB1: u8,
    +                ///  Data byte 2
    +                DB2: u8,
    +                ///  Data byte 3
    +                DB3: u8,
    +            }),
    +            ///  Transmit mailbox data1 register
    +            TMDATA10: mmio.Mmio(packed struct(u32) {
    +                ///  Data byte 4
    +                DB4: u8,
    +                ///  Data byte 5
    +                DB5: u8,
    +                ///  Data byte 6
    +                DB6: u8,
    +                ///  Data byte 7
    +                DB7: u8,
    +            }),
    +            ///  Transmit mailbox identifier register 1
    +            TMI1: mmio.Mmio(packed struct(u32) {
    +                ///  Transmit enable
    +                TEN: u1,
    +                ///  Frame type
    +                FT: u1,
    +                ///  Frame format
    +                FF: u1,
    +                ///  The frame identifier
    +                EFID: u18,
    +                ///  The frame identifier
    +                SFID_EFID: u11,
    +            }),
    +            ///  Transmit mailbox property register 1
    +            TMP1: mmio.Mmio(packed struct(u32) {
    +                ///  Data length code
    +                DLENC: u4,
    +                reserved8: u4,
    +                ///  Time stamp enable
    +                TSEN: u1,
    +                reserved16: u7,
    +                ///  Time stamp
    +                TS: u16,
    +            }),
    +            ///  Transmit mailbox data0 register
    +            TMDATA01: mmio.Mmio(packed struct(u32) {
    +                ///  Data byte 0
    +                DB0: u8,
    +                ///  Data byte 1
    +                DB1: u8,
    +                ///  Data byte 2
    +                DB2: u8,
    +                ///  Data byte 3
    +                DB3: u8,
    +            }),
    +            ///  Transmit mailbox data1 register
    +            TMDATA11: mmio.Mmio(packed struct(u32) {
    +                ///  Data byte 4
    +                DB4: u8,
    +                ///  Data byte 5
    +                DB5: u8,
    +                ///  Data byte 6
    +                DB6: u8,
    +                ///  Data byte 7
    +                DB7: u8,
    +            }),
    +            ///  Transmit mailbox identifier register 2
    +            TMI2: mmio.Mmio(packed struct(u32) {
    +                ///  Transmit enable
    +                TEN: u1,
    +                ///  Frame type
    +                FT: u1,
    +                ///  Frame format
    +                FF: u1,
    +                ///  The frame identifier
    +                EFID: u18,
    +                ///  The frame identifier
    +                SFID_EFID: u11,
    +            }),
    +            ///  Transmit mailbox property register 2
    +            TMP2: mmio.Mmio(packed struct(u32) {
    +                ///  Data length code
    +                DLENC: u4,
    +                reserved8: u4,
    +                ///  Time stamp enable
    +                TSEN: u1,
    +                reserved16: u7,
    +                ///  Time stamp
    +                TS: u16,
    +            }),
    +            ///  Transmit mailbox data0 register
    +            TMDATA02: mmio.Mmio(packed struct(u32) {
    +                ///  Data byte 0
    +                DB0: u8,
    +                ///  Data byte 1
    +                DB1: u8,
    +                ///  Data byte 2
    +                DB2: u8,
    +                ///  Data byte 3
    +                DB3: u8,
    +            }),
    +            ///  Transmit mailbox data1 register
    +            TMDATA12: mmio.Mmio(packed struct(u32) {
    +                ///  Data byte 4
    +                DB4: u8,
    +                ///  Data byte 5
    +                DB5: u8,
    +                ///  Data byte 6
    +                DB6: u8,
    +                ///  Data byte 7
    +                DB7: u8,
    +            }),
    +            ///  Receive FIFO mailbox identifier register
    +            RFIFOMI0: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Frame type
    +                FT: u1,
    +                ///  Frame format
    +                FF: u1,
    +                ///  The frame identifier
    +                EFID: u18,
    +                ///  The frame identifier
    +                SFID_EFID: u11,
    +            }),
    +            ///  Receive FIFO0 mailbox property register
    +            RFIFOMP0: mmio.Mmio(packed struct(u32) {
    +                ///  Data length code
    +                DLENC: u4,
    +                reserved8: u4,
    +                ///  Filtering index
    +                FI: u8,
    +                ///  Time stamp
    +                TS: u16,
    +            }),
    +            ///  Receive FIFO0 mailbox data0 register
    +            RFIFOMDATA00: mmio.Mmio(packed struct(u32) {
    +                ///  Data byte 0
    +                DB0: u8,
    +                ///  Data byte 1
    +                DB1: u8,
    +                ///  Data byte 2
    +                DB2: u8,
    +                ///  Data byte 3
    +                DB3: u8,
    +            }),
    +            ///  Receive FIFO0 mailbox data1 register
    +            RFIFOMDATA10: mmio.Mmio(packed struct(u32) {
    +                ///  Data byte 4
    +                DB4: u8,
    +                ///  Data byte 5
    +                DB5: u8,
    +                ///  Data byte 6
    +                DB6: u8,
    +                ///  Data byte 7
    +                DB7: u8,
    +            }),
    +            ///  Receive FIFO1 mailbox identifier register
    +            RFIFOMI1: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Frame type
    +                FT: u1,
    +                ///  Frame format
    +                FF: u1,
    +                ///  The frame identifier
    +                EFID: u18,
    +                ///  The frame identifier
    +                SFID_EFID: u11,
    +            }),
    +            ///  Receive FIFO1 mailbox property register
    +            RFIFOMP1: mmio.Mmio(packed struct(u32) {
    +                ///  Data length code
    +                DLENC: u4,
    +                reserved8: u4,
    +                ///  Filtering index
    +                FI: u8,
    +                ///  Time stamp
    +                TS: u16,
    +            }),
    +            ///  Receive FIFO1 mailbox data0 register
    +            RFIFOMDATA01: mmio.Mmio(packed struct(u32) {
    +                ///  Data byte 0
    +                DB0: u8,
    +                ///  Data byte 1
    +                DB1: u8,
    +                ///  Data byte 2
    +                DB2: u8,
    +                ///  Data byte 3
    +                DB3: u8,
    +            }),
    +            ///  Receive FIFO1 mailbox data1 register
    +            RFIFOMDATA11: mmio.Mmio(packed struct(u32) {
    +                ///  Data byte 4
    +                DB4: u8,
    +                ///  Data byte 5
    +                DB5: u8,
    +                ///  Data byte 6
    +                DB6: u8,
    +                ///  Data byte 7
    +                DB7: u8,
    +            }),
    +            reserved512: [48]u8,
    +            ///  Filter control register
    +            FCTL: mmio.Mmio(packed struct(u32) {
    +                ///  Filter lock disable
    +                FLD: u1,
    +                reserved8: u7,
    +                ///  Header bank of CAN1 filter
    +                HBC1F: u6,
    +                padding: u18,
    +            }),
    +            ///  Filter mode configuration register
    +            FMCFG: mmio.Mmio(packed struct(u32) {
    +                ///  Filter mode
    +                FMOD0: u1,
    +                ///  Filter mode
    +                FMOD1: u1,
    +                ///  Filter mode
    +                FMOD2: u1,
    +                ///  Filter mode
    +                FMOD3: u1,
    +                ///  Filter mode
    +                FMOD4: u1,
    +                ///  Filter mode
    +                FMOD5: u1,
    +                ///  Filter mode
    +                FMOD6: u1,
    +                ///  Filter mode
    +                FMOD7: u1,
    +                ///  Filter mode
    +                FMOD8: u1,
    +                ///  Filter mode
    +                FMOD9: u1,
    +                ///  Filter mode
    +                FMOD10: u1,
    +                ///  Filter mode
    +                FMOD11: u1,
    +                ///  Filter mode
    +                FMOD12: u1,
    +                ///  Filter mode
    +                FMOD13: u1,
    +                ///  Filter mode
    +                FMOD14: u1,
    +                ///  Filter mode
    +                FMOD15: u1,
    +                ///  Filter mode
    +                FMOD16: u1,
    +                ///  Filter mode
    +                FMOD17: u1,
    +                ///  Filter mode
    +                FMOD18: u1,
    +                ///  Filter mode
    +                FMOD19: u1,
    +                ///  Filter mode
    +                FMOD20: u1,
    +                ///  Filter mode
    +                FMOD21: u1,
    +                ///  Filter mode
    +                FMOD22: u1,
    +                ///  Filter mode
    +                FMOD23: u1,
    +                ///  Filter mode
    +                FMOD24: u1,
    +                ///  Filter mode
    +                FMOD25: u1,
    +                ///  Filter mode
    +                FMOD26: u1,
    +                ///  Filter mode
    +                FMOD27: u1,
    +                padding: u4,
    +            }),
    +            reserved524: [4]u8,
    +            ///  Filter scale configuration register
    +            FSCFG: mmio.Mmio(packed struct(u32) {
    +                ///  Filter scale configuration
    +                FS0: u1,
    +                ///  Filter scale configuration
    +                FS1: u1,
    +                ///  Filter scale configuration
    +                FS2: u1,
    +                ///  Filter scale configuration
    +                FS3: u1,
    +                ///  Filter scale configuration
    +                FS4: u1,
    +                ///  Filter scale configuration
    +                FS5: u1,
    +                ///  Filter scale configuration
    +                FS6: u1,
    +                ///  Filter scale configuration
    +                FS7: u1,
    +                ///  Filter scale configuration
    +                FS8: u1,
    +                ///  Filter scale configuration
    +                FS9: u1,
    +                ///  Filter scale configuration
    +                FS10: u1,
    +                ///  Filter scale configuration
    +                FS11: u1,
    +                ///  Filter scale configuration
    +                FS12: u1,
    +                ///  Filter scale configuration
    +                FS13: u1,
    +                ///  Filter scale configuration
    +                FS14: u1,
    +                ///  Filter scale configuration
    +                FS15: u1,
    +                ///  Filter scale configuration
    +                FS16: u1,
    +                ///  Filter scale configuration
    +                FS17: u1,
    +                ///  Filter scale configuration
    +                FS18: u1,
    +                ///  Filter scale configuration
    +                FS19: u1,
    +                ///  Filter scale configuration
    +                FS20: u1,
    +                ///  Filter scale configuration
    +                FS21: u1,
    +                ///  Filter scale configuration
    +                FS22: u1,
    +                ///  Filter scale configuration
    +                FS23: u1,
    +                ///  Filter scale configuration
    +                FS24: u1,
    +                ///  Filter scale configuration
    +                FS25: u1,
    +                ///  Filter scale configuration
    +                FS26: u1,
    +                ///  Filter scale configuration
    +                FS27: u1,
    +                padding: u4,
    +            }),
    +            reserved532: [4]u8,
    +            ///  Filter associated FIFO register
    +            FAFIFO: mmio.Mmio(packed struct(u32) {
    +                ///  Filter 0 associated with FIFO
    +                FAF0: u1,
    +                ///  Filter 1 associated with FIFO
    +                FAF1: u1,
    +                ///  Filter 2 associated with FIFO
    +                FAF2: u1,
    +                ///  Filter 3 associated with FIFO
    +                FAF3: u1,
    +                ///  Filter 4 associated with FIFO
    +                FAF4: u1,
    +                ///  Filter 5 associated with FIFO
    +                FAF5: u1,
    +                ///  Filter 6 associated with FIFO
    +                FAF6: u1,
    +                ///  Filter 7 associated with FIFO
    +                FAF7: u1,
    +                ///  Filter 8 associated with FIFO
    +                FAF8: u1,
    +                ///  Filter 9 associated with FIFO
    +                FAF9: u1,
    +                ///  Filter 10 associated with FIFO
    +                FAF10: u1,
    +                ///  Filter 11 associated with FIFO
    +                FAF11: u1,
    +                ///  Filter 12 associated with FIFO
    +                FAF12: u1,
    +                ///  Filter 13 associated with FIFO
    +                FAF13: u1,
    +                ///  Filter 14 associated with FIFO
    +                FAF14: u1,
    +                ///  Filter 15 associated with FIFO
    +                FAF15: u1,
    +                ///  Filter 16 associated with FIFO
    +                FAF16: u1,
    +                ///  Filter 17 associated with FIFO
    +                FAF17: u1,
    +                ///  Filter 18 associated with FIFO
    +                FAF18: u1,
    +                ///  Filter 19 associated with FIFO
    +                FAF19: u1,
    +                ///  Filter 20 associated with FIFO
    +                FAF20: u1,
    +                ///  Filter 21 associated with FIFO
    +                FAF21: u1,
    +                ///  Filter 22 associated with FIFO
    +                FAF22: u1,
    +                ///  Filter 23 associated with FIFO
    +                FAF23: u1,
    +                ///  Filter 24 associated with FIFO
    +                FAF24: u1,
    +                ///  Filter 25 associated with FIFO
    +                FAF25: u1,
    +                ///  Filter 26 associated with FIFO
    +                FAF26: u1,
    +                ///  Filter 27 associated with FIFO
    +                FAF27: u1,
    +                padding: u4,
    +            }),
    +            reserved540: [4]u8,
    +            ///  Filter working register
    +            FW: mmio.Mmio(packed struct(u32) {
    +                ///  Filter working
    +                FW0: u1,
    +                ///  Filter working
    +                FW1: u1,
    +                ///  Filter working
    +                FW2: u1,
    +                ///  Filter working
    +                FW3: u1,
    +                ///  Filter working
    +                FW4: u1,
    +                ///  Filter working
    +                FW5: u1,
    +                ///  Filter working
    +                FW6: u1,
    +                ///  Filter working
    +                FW7: u1,
    +                ///  Filter working
    +                FW8: u1,
    +                ///  Filter working
    +                FW9: u1,
    +                ///  Filter working
    +                FW10: u1,
    +                ///  Filter working
    +                FW11: u1,
    +                ///  Filter working
    +                FW12: u1,
    +                ///  Filter working
    +                FW13: u1,
    +                ///  Filter working
    +                FW14: u1,
    +                ///  Filter working
    +                FW15: u1,
    +                ///  Filter working
    +                FW16: u1,
    +                ///  Filter working
    +                FW17: u1,
    +                ///  Filter working
    +                FW18: u1,
    +                ///  Filter working
    +                FW19: u1,
    +                ///  Filter working
    +                FW20: u1,
    +                ///  Filter working
    +                FW21: u1,
    +                ///  Filter working
    +                FW22: u1,
    +                ///  Filter working
    +                FW23: u1,
    +                ///  Filter working
    +                FW24: u1,
    +                ///  Filter working
    +                FW25: u1,
    +                ///  Filter working
    +                FW26: u1,
    +                ///  Filter working
    +                FW27: u1,
    +                padding: u4,
    +            }),
    +            reserved576: [32]u8,
    +            ///  Filter 0 data 0 register
    +            F0DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 0 data 1 register
    +            F0DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 1 data 0 register
    +            F1DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 1 data 1 register
    +            F1DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 2 data 0 register
    +            F2DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 2 data 1 register
    +            F2DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 3 data 0 register
    +            F3DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 3 data 1 register
    +            F3DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 4 data 0 register
    +            F4DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 4 data 1 register
    +            F4DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 5 data 0 register
    +            F5DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 5 data 1 register
    +            F5DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 6 data 0 register
    +            F6DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 6 data 1 register
    +            F6DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 7 data 0 register
    +            F7DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 7 data 1 register
    +            F7DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 8 data 0 register
    +            F8DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 8 data 1 register
    +            F8DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 9 data 0 register
    +            F9DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 9 data 1 register
    +            F9DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 10 data 0 register
    +            F10DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 10 data 1 register
    +            F10DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 11 data 0 register
    +            F11DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 11 data 1 register
    +            F11DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 12 data 0 register
    +            F12DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 12 data 1 register
    +            F12DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 13 data 0 register
    +            F13DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 13 data 1 register
    +            F13DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 14 data 0 register
    +            F14DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 14 data 1 register
    +            F14DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 15 data 0 register
    +            F15DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 15 data 1 register
    +            F15DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 16 data 0 register
    +            F16DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 16 data 1 register
    +            F16DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 17 data 0 register
    +            F17DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 17 data 1 register
    +            F17DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 18 data 0 register
    +            F18DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 18 data 1 register
    +            F18DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 19 data 0 register
    +            F19DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 19 data 1 register
    +            F19DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 20 data 0 register
    +            F20DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 20 data 1 register
    +            F20DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 21 data 0 register
    +            F21DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 21 data 1 register
    +            F21DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 22 data 0 register
    +            F22DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 22 data 1 register
    +            F22DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 23 data 0 register
    +            F23DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 23 data 1 register
    +            F23DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 24 data 0 register
    +            F24DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 24 data 1 register
    +            F24DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 25 data 0 register
    +            F25DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 25 data 1 register
    +            F25DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 26 data 0 register
    +            F26DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 26 data 1 register
    +            F26DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 27 data 0 register
    +            F27DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +            ///  Filter 27 data 1 register
    +            F27DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Filter bits
    +                FD0: u1,
    +                ///  Filter bits
    +                FD1: u1,
    +                ///  Filter bits
    +                FD2: u1,
    +                ///  Filter bits
    +                FD3: u1,
    +                ///  Filter bits
    +                FD4: u1,
    +                ///  Filter bits
    +                FD5: u1,
    +                ///  Filter bits
    +                FD6: u1,
    +                ///  Filter bits
    +                FD7: u1,
    +                ///  Filter bits
    +                FD8: u1,
    +                ///  Filter bits
    +                FD9: u1,
    +                ///  Filter bits
    +                FD10: u1,
    +                ///  Filter bits
    +                FD11: u1,
    +                ///  Filter bits
    +                FD12: u1,
    +                ///  Filter bits
    +                FD13: u1,
    +                ///  Filter bits
    +                FD14: u1,
    +                ///  Filter bits
    +                FD15: u1,
    +                ///  Filter bits
    +                FD16: u1,
    +                ///  Filter bits
    +                FD17: u1,
    +                ///  Filter bits
    +                FD18: u1,
    +                ///  Filter bits
    +                FD19: u1,
    +                ///  Filter bits
    +                FD20: u1,
    +                ///  Filter bits
    +                FD21: u1,
    +                ///  Filter bits
    +                FD22: u1,
    +                ///  Filter bits
    +                FD23: u1,
    +                ///  Filter bits
    +                FD24: u1,
    +                ///  Filter bits
    +                FD25: u1,
    +                ///  Filter bits
    +                FD26: u1,
    +                ///  Filter bits
    +                FD27: u1,
    +                ///  Filter bits
    +                FD28: u1,
    +                ///  Filter bits
    +                FD29: u1,
    +                ///  Filter bits
    +                FD30: u1,
    +                ///  Filter bits
    +                FD31: u1,
    +            }),
    +        };
    +
    +        ///  Window watchdog timer
    +        pub const WWDGT = extern struct {
    +            ///  Control register
    +            CTL: mmio.Mmio(packed struct(u32) {
    +                ///  7-bit counter
    +                CNT: u7,
    +                ///  Activation bit
    +                WDGTEN: u1,
    +                padding: u24,
    +            }),
    +            ///  Configuration register
    +            CFG: mmio.Mmio(packed struct(u32) {
    +                ///  7-bit window value
    +                WIN: u7,
    +                ///  Prescaler
    +                PSC: u2,
    +                ///  Early wakeup interrupt
    +                EWIE: u1,
    +                padding: u22,
    +            }),
    +            ///  Status register
    +            STAT: mmio.Mmio(packed struct(u32) {
    +                ///  Early wakeup interrupt flag
    +                EWIF: u1,
    +                padding: u31,
    +            }),
    +        };
    +
    +        ///  cyclic redundancy check calculation unit
    +        pub const CRC = extern struct {
    +            ///  Data register
    +            DATA: mmio.Mmio(packed struct(u32) {
    +                ///  CRC calculation result bits
    +                DATA: u32,
    +            }),
    +            ///  Free data register
    +            FDATA: mmio.Mmio(packed struct(u32) {
    +                ///  Free Data Register bits
    +                FDATA: u8,
    +                padding: u24,
    +            }),
    +            ///  Control register
    +            CTL: mmio.Mmio(packed struct(u32) {
    +                ///  reset bit
    +                RST: u1,
    +                padding: u31,
    +            }),
    +        };
    +
    +        ///  Digital-to-analog converter
    +        pub const DAC = extern struct {
    +            ///  control register
    +            CTL: mmio.Mmio(packed struct(u32) {
    +                ///  DAC0 enable
    +                DEN0: u1,
    +                ///  DAC0 output buffer turn off
    +                DBOFF0: u1,
    +                ///  DAC0 trigger enable
    +                DTEN0: u1,
    +                ///  DAC0 trigger selection
    +                DTSEL0: u3,
    +                ///  DAC0 noise wave mode
    +                DWM0: u2,
    +                ///  DAC0 noise wave bit width
    +                DWBW0: u4,
    +                ///  DAC0 DMA enable
    +                DDMAEN0: u1,
    +                reserved16: u3,
    +                ///  DAC1 enable
    +                DEN1: u1,
    +                ///  DAC1 output buffer turn off
    +                DBOFF1: u1,
    +                ///  DAC1 trigger enable
    +                DTEN1: u1,
    +                ///  DAC1 trigger selection
    +                DTSEL1: u3,
    +                ///  DAC1 noise wave mode
    +                DWM1: u2,
    +                ///  DAC1 noise wave bit width
    +                DWBW1: u4,
    +                ///  DAC1 DMA enable
    +                DDMAEN1: u1,
    +                padding: u3,
    +            }),
    +            ///  software trigger register
    +            SWT: mmio.Mmio(packed struct(u32) {
    +                ///  DAC0 software trigger
    +                SWTR0: u1,
    +                ///  DAC1 software trigger
    +                SWTR1: u1,
    +                padding: u30,
    +            }),
    +            ///  DAC0 12-bit right-aligned data holding register
    +            DAC0_R12DH: mmio.Mmio(packed struct(u32) {
    +                ///  DAC0 12-bit right-aligned data
    +                DAC0_DH: u12,
    +                padding: u20,
    +            }),
    +            ///  DAC0 12-bit left-aligned data holding register
    +            DAC0_L12DH: mmio.Mmio(packed struct(u32) {
    +                reserved4: u4,
    +                ///  DAC0 12-bit left-aligned data
    +                DAC0_DH: u12,
    +                padding: u16,
    +            }),
    +            ///  DAC0 8-bit right aligned data holding register
    +            DAC0_R8DH: mmio.Mmio(packed struct(u32) {
    +                ///  DAC0 8-bit right-aligned data
    +                DAC0_DH: u8,
    +                padding: u24,
    +            }),
    +            ///  DAC1 12-bit right-aligned data holding register
    +            DAC1_R12DH: mmio.Mmio(packed struct(u32) {
    +                ///  DAC1 12-bit right-aligned data
    +                DAC1_DH: u12,
    +                padding: u20,
    +            }),
    +            ///  DAC1 12-bit left aligned data holding register
    +            DAC1_L12DH: mmio.Mmio(packed struct(u32) {
    +                reserved4: u4,
    +                ///  DAC1 12-bit left-aligned data
    +                DAC1_DH: u12,
    +                padding: u16,
    +            }),
    +            ///  DAC1 8-bit right aligned data holding register
    +            DAC1_R8DH: mmio.Mmio(packed struct(u32) {
    +                ///  DAC1 8-bit right-aligned data
    +                DAC1_DH: u8,
    +                padding: u24,
    +            }),
    +            ///  DAC concurrent mode 12-bit right-aligned data holding register
    +            DACC_R12DH: mmio.Mmio(packed struct(u32) {
    +                ///  DAC0 12-bit right-aligned data
    +                DAC0_DH: u12,
    +                reserved16: u4,
    +                ///  DAC1 12-bit right-aligned data
    +                DAC1_DH: u12,
    +                padding: u4,
    +            }),
    +            ///  DAC concurrent mode 12-bit left aligned data holding register
    +            DACC_L12DH: mmio.Mmio(packed struct(u32) {
    +                reserved4: u4,
    +                ///  DAC0 12-bit left-aligned data
    +                DAC0_DH: u12,
    +                reserved20: u4,
    +                ///  DAC1 12-bit left-aligned data
    +                DAC1_DH: u12,
    +            }),
    +            ///  DAC concurrent mode 8-bit right aligned data holding register
    +            DACC_R8DH: mmio.Mmio(packed struct(u32) {
    +                ///  DAC0 8-bit right-aligned data
    +                DAC0_DH: u8,
    +                ///  DAC1 8-bit right-aligned data
    +                DAC1_DH: u8,
    +                padding: u16,
    +            }),
    +            ///  DAC0 data output register
    +            DAC0_DO: mmio.Mmio(packed struct(u32) {
    +                ///  DAC0 data output
    +                DAC0_DO: u12,
    +                padding: u20,
    +            }),
    +            ///  DAC1 data output register
    +            DAC1_DO: mmio.Mmio(packed struct(u32) {
    +                ///  DAC1 data output
    +                DAC1_DO: u12,
    +                padding: u20,
    +            }),
    +        };
    +
    +        ///  Debug support
    +        pub const DBG = extern struct {
    +            ///  ID code register
    +            ID: mmio.Mmio(packed struct(u32) {
    +                ///  DBG ID code register
    +                ID_CODE: u32,
    +            }),
    +            ///  Control register 0
    +            CTL: mmio.Mmio(packed struct(u32) {
    +                ///  Sleep mode hold register
    +                SLP_HOLD: u1,
    +                ///  Deep-sleep mode hold register
    +                DSLP_HOLD: u1,
    +                ///  Standby mode hold register
    +                STB_HOLD: u1,
    +                reserved8: u5,
    +                ///  FWDGT hold bit
    +                FWDGT_HOLD: u1,
    +                ///  WWDGT hold bit
    +                WWDGT_HOLD: u1,
    +                ///  TIMER 0 hold bit
    +                TIMER0_HOLD: u1,
    +                ///  TIMER 1 hold bit
    +                TIMER1_HOLD: u1,
    +                ///  TIMER 2 hold bit
    +                TIMER2_HOLD: u1,
    +                ///  TIMER 23 hold bit
    +                TIMER3_HOLD: u1,
    +                ///  CAN0 hold bit
    +                CAN0_HOLD: u1,
    +                ///  I2C0 hold bit
    +                I2C0_HOLD: u1,
    +                ///  I2C1 hold bit
    +                I2C1_HOLD: u1,
    +                reserved18: u1,
    +                ///  TIMER4_HOLD
    +                TIMER4_HOLD: u1,
    +                ///  TIMER 5 hold bit
    +                TIMER5_HOLD: u1,
    +                ///  TIMER 6 hold bit
    +                TIMER6_HOLD: u1,
    +                ///  CAN1 hold bit
    +                CAN1_HOLD: u1,
    +                padding: u10,
    +            }),
    +        };
    +
    +        ///  DMA controller
    +        pub const DMA0 = extern struct {
    +            ///  Interrupt flag register
    +            INTF: mmio.Mmio(packed struct(u32) {
    +                ///  Global interrupt flag of channel 0
    +                GIF0: u1,
    +                ///  Full Transfer finish flag of channe 0
    +                FTFIF0: u1,
    +                ///  Half transfer finish flag of channel 0
    +                HTFIF0: u1,
    +                ///  Error flag of channel 0
    +                ERRIF0: u1,
    +                ///  Global interrupt flag of channel 1
    +                GIF1: u1,
    +                ///  Full Transfer finish flag of channe 1
    +                FTFIF1: u1,
    +                ///  Half transfer finish flag of channel 1
    +                HTFIF1: u1,
    +                ///  Error flag of channel 1
    +                ERRIF1: u1,
    +                ///  Global interrupt flag of channel 2
    +                GIF2: u1,
    +                ///  Full Transfer finish flag of channe 2
    +                FTFIF2: u1,
    +                ///  Half transfer finish flag of channel 2
    +                HTFIF2: u1,
    +                ///  Error flag of channel 2
    +                ERRIF2: u1,
    +                ///  Global interrupt flag of channel 3
    +                GIF3: u1,
    +                ///  Full Transfer finish flag of channe 3
    +                FTFIF3: u1,
    +                ///  Half transfer finish flag of channel 3
    +                HTFIF3: u1,
    +                ///  Error flag of channel 3
    +                ERRIF3: u1,
    +                ///  Global interrupt flag of channel 4
    +                GIF4: u1,
    +                ///  Full Transfer finish flag of channe 4
    +                FTFIF4: u1,
    +                ///  Half transfer finish flag of channel 4
    +                HTFIF4: u1,
    +                ///  Error flag of channel 4
    +                ERRIF4: u1,
    +                ///  Global interrupt flag of channel 5
    +                GIF5: u1,
    +                ///  Full Transfer finish flag of channe 5
    +                FTFIF5: u1,
    +                ///  Half transfer finish flag of channel 5
    +                HTFIF5: u1,
    +                ///  Error flag of channel 5
    +                ERRIF5: u1,
    +                ///  Global interrupt flag of channel 6
    +                GIF6: u1,
    +                ///  Full Transfer finish flag of channe 6
    +                FTFIF6: u1,
    +                ///  Half transfer finish flag of channel 6
    +                HTFIF6: u1,
    +                ///  Error flag of channel 6
    +                ERRIF6: u1,
    +                padding: u4,
    +            }),
    +            ///  Interrupt flag clear register
    +            INTC: mmio.Mmio(packed struct(u32) {
    +                ///  Clear global interrupt flag of channel 0
    +                GIFC0: u1,
    +                ///  Clear bit for full transfer finish flag of channel 0
    +                FTFIFC0: u1,
    +                ///  Clear bit for half transfer finish flag of channel 0
    +                HTFIFC0: u1,
    +                ///  Clear bit for error flag of channel 0
    +                ERRIFC0: u1,
    +                ///  Clear global interrupt flag of channel 1
    +                GIFC1: u1,
    +                ///  Clear bit for full transfer finish flag of channel 1
    +                FTFIFC1: u1,
    +                ///  Clear bit for half transfer finish flag of channel 1
    +                HTFIFC1: u1,
    +                ///  Clear bit for error flag of channel 1
    +                ERRIFC1: u1,
    +                ///  Clear global interrupt flag of channel 2
    +                GIFC2: u1,
    +                ///  Clear bit for full transfer finish flag of channel 2
    +                FTFIFC2: u1,
    +                ///  Clear bit for half transfer finish flag of channel 2
    +                HTFIFC2: u1,
    +                ///  Clear bit for error flag of channel 2
    +                ERRIFC2: u1,
    +                ///  Clear global interrupt flag of channel 3
    +                GIFC3: u1,
    +                ///  Clear bit for full transfer finish flag of channel 3
    +                FTFIFC3: u1,
    +                ///  Clear bit for half transfer finish flag of channel 3
    +                HTFIFC3: u1,
    +                ///  Clear bit for error flag of channel 3
    +                ERRIFC3: u1,
    +                ///  Clear global interrupt flag of channel 4
    +                GIFC4: u1,
    +                ///  Clear bit for full transfer finish flag of channel 4
    +                FTFIFC4: u1,
    +                ///  Clear bit for half transfer finish flag of channel 4
    +                HTFIFC4: u1,
    +                ///  Clear bit for error flag of channel 4
    +                ERRIFC4: u1,
    +                ///  Clear global interrupt flag of channel 5
    +                GIFC5: u1,
    +                ///  Clear bit for full transfer finish flag of channel 5
    +                FTFIFC5: u1,
    +                ///  Clear bit for half transfer finish flag of channel 5
    +                HTFIFC5: u1,
    +                ///  Clear bit for error flag of channel 5
    +                ERRIFC5: u1,
    +                ///  Clear global interrupt flag of channel 6
    +                GIFC6: u1,
    +                ///  Clear bit for full transfer finish flag of channel 6
    +                FTFIFC6: u1,
    +                ///  Clear bit for half transfer finish flag of channel 6
    +                HTFIFC6: u1,
    +                ///  Clear bit for error flag of channel 6
    +                ERRIFC6: u1,
    +                padding: u4,
    +            }),
    +            ///  Channel 0 control register
    +            CH0CTL: mmio.Mmio(packed struct(u32) {
    +                ///  Channel enable
    +                CHEN: u1,
    +                ///  Enable bit for channel full transfer finish interrupt
    +                FTFIE: u1,
    +                ///  Enable bit for channel half transfer finish interrupt
    +                HTFIE: u1,
    +                ///  Enable bit for channel error interrupt
    +                ERRIE: u1,
    +                ///  Transfer direction
    +                DIR: u1,
    +                ///  Circular mode enable
    +                CMEN: u1,
    +                ///  Next address generation algorithm of peripheral
    +                PNAGA: u1,
    +                ///  Next address generation algorithm of memory
    +                MNAGA: u1,
    +                ///  Transfer data size of peripheral
    +                PWIDTH: u2,
    +                ///  Transfer data size of memory
    +                MWIDTH: u2,
    +                ///  Priority level
    +                PRIO: u2,
    +                ///  Memory to Memory Mode
    +                M2M: u1,
    +                padding: u17,
    +            }),
    +            ///  Channel 0 counter register
    +            CH0CNT: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer counter
    +                CNT: u16,
    +                padding: u16,
    +            }),
    +            ///  Channel 0 peripheral base address register
    +            CH0PADDR: mmio.Mmio(packed struct(u32) {
    +                ///  Peripheral base address
    +                PADDR: u32,
    +            }),
    +            ///  Channel 0 memory base address register
    +            CH0MADDR: mmio.Mmio(packed struct(u32) {
    +                ///  Memory base address
    +                MADDR: u32,
    +            }),
    +            reserved28: [4]u8,
    +            ///  Channel 1 control register
    +            CH1CTL: mmio.Mmio(packed struct(u32) {
    +                ///  Channel enable
    +                CHEN: u1,
    +                ///  Enable bit for channel full transfer finish interrupt
    +                FTFIE: u1,
    +                ///  Enable bit for channel half transfer finish interrupt
    +                HTFIE: u1,
    +                ///  Enable bit for channel error interrupt
    +                ERRIE: u1,
    +                ///  Transfer direction
    +                DIR: u1,
    +                ///  Circular mode enable
    +                CMEN: u1,
    +                ///  Next address generation algorithm of peripheral
    +                PNAGA: u1,
    +                ///  Next address generation algorithm of memory
    +                MNAGA: u1,
    +                ///  Transfer data size of peripheral
    +                PWIDTH: u2,
    +                ///  Transfer data size of memory
    +                MWIDTH: u2,
    +                ///  Priority level
    +                PRIO: u2,
    +                ///  Memory to Memory Mode
    +                M2M: u1,
    +                padding: u17,
    +            }),
    +            ///  Channel 1 counter register
    +            CH1CNT: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer counter
    +                CNT: u16,
    +                padding: u16,
    +            }),
    +            ///  Channel 1 peripheral base address register
    +            CH1PADDR: mmio.Mmio(packed struct(u32) {
    +                ///  Peripheral base address
    +                PADDR: u32,
    +            }),
    +            ///  Channel 1 memory base address register
    +            CH1MADDR: mmio.Mmio(packed struct(u32) {
    +                ///  Memory base address
    +                MADDR: u32,
    +            }),
    +            reserved48: [4]u8,
    +            ///  Channel 2 control register
    +            CH2CTL: mmio.Mmio(packed struct(u32) {
    +                ///  Channel enable
    +                CHEN: u1,
    +                ///  Enable bit for channel full transfer finish interrupt
    +                FTFIE: u1,
    +                ///  Enable bit for channel half transfer finish interrupt
    +                HTFIE: u1,
    +                ///  Enable bit for channel error interrupt
    +                ERRIE: u1,
    +                ///  Transfer direction
    +                DIR: u1,
    +                ///  Circular mode enable
    +                CMEN: u1,
    +                ///  Next address generation algorithm of peripheral
    +                PNAGA: u1,
    +                ///  Next address generation algorithm of memory
    +                MNAGA: u1,
    +                ///  Transfer data size of peripheral
    +                PWIDTH: u2,
    +                ///  Transfer data size of memory
    +                MWIDTH: u2,
    +                ///  Priority level
    +                PRIO: u2,
    +                ///  Memory to Memory Mode
    +                M2M: u1,
    +                padding: u17,
    +            }),
    +            ///  Channel 2 counter register
    +            CH2CNT: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer counter
    +                CNT: u16,
    +                padding: u16,
    +            }),
    +            ///  Channel 2 peripheral base address register
    +            CH2PADDR: mmio.Mmio(packed struct(u32) {
    +                ///  Peripheral base address
    +                PADDR: u32,
    +            }),
    +            ///  Channel 2 memory base address register
    +            CH2MADDR: mmio.Mmio(packed struct(u32) {
    +                ///  Memory base address
    +                MADDR: u32,
    +            }),
    +            reserved68: [4]u8,
    +            ///  Channel 3 control register
    +            CH3CTL: mmio.Mmio(packed struct(u32) {
    +                ///  Channel enable
    +                CHEN: u1,
    +                ///  Enable bit for channel full transfer finish interrupt
    +                FTFIE: u1,
    +                ///  Enable bit for channel half transfer finish interrupt
    +                HTFIE: u1,
    +                ///  Enable bit for channel error interrupt
    +                ERRIE: u1,
    +                ///  Transfer direction
    +                DIR: u1,
    +                ///  Circular mode enable
    +                CMEN: u1,
    +                ///  Next address generation algorithm of peripheral
    +                PNAGA: u1,
    +                ///  Next address generation algorithm of memory
    +                MNAGA: u1,
    +                ///  Transfer data size of peripheral
    +                PWIDTH: u2,
    +                ///  Transfer data size of memory
    +                MWIDTH: u2,
    +                ///  Priority level
    +                PRIO: u2,
    +                ///  Memory to Memory Mode
    +                M2M: u1,
    +                padding: u17,
    +            }),
    +            ///  Channel 3 counter register
    +            CH3CNT: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer counter
    +                CNT: u16,
    +                padding: u16,
    +            }),
    +            ///  Channel 3 peripheral base address register
    +            CH3PADDR: mmio.Mmio(packed struct(u32) {
    +                ///  Peripheral base address
    +                PADDR: u32,
    +            }),
    +            ///  Channel 3 memory base address register
    +            CH3MADDR: mmio.Mmio(packed struct(u32) {
    +                ///  Memory base address
    +                MADDR: u32,
    +            }),
    +            reserved88: [4]u8,
    +            ///  Channel 4 control register
    +            CH4CTL: mmio.Mmio(packed struct(u32) {
    +                ///  Channel enable
    +                CHEN: u1,
    +                ///  Enable bit for channel full transfer finish interrupt
    +                FTFIE: u1,
    +                ///  Enable bit for channel half transfer finish interrupt
    +                HTFIE: u1,
    +                ///  Enable bit for channel error interrupt
    +                ERRIE: u1,
    +                ///  Transfer direction
    +                DIR: u1,
    +                ///  Circular mode enable
    +                CMEN: u1,
    +                ///  Next address generation algorithm of peripheral
    +                PNAGA: u1,
    +                ///  Next address generation algorithm of memory
    +                MNAGA: u1,
    +                ///  Transfer data size of peripheral
    +                PWIDTH: u2,
    +                ///  Transfer data size of memory
    +                MWIDTH: u2,
    +                ///  Priority level
    +                PRIO: u2,
    +                ///  Memory to Memory Mode
    +                M2M: u1,
    +                padding: u17,
    +            }),
    +            ///  Channel 4 counter register
    +            CH4CNT: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer counter
    +                CNT: u16,
    +                padding: u16,
    +            }),
    +            ///  Channel 4 peripheral base address register
    +            CH4PADDR: mmio.Mmio(packed struct(u32) {
    +                ///  Peripheral base address
    +                PADDR: u32,
    +            }),
    +            ///  Channel 4 memory base address register
    +            CH4MADDR: mmio.Mmio(packed struct(u32) {
    +                ///  Memory base address
    +                MADDR: u32,
    +            }),
    +            reserved108: [4]u8,
    +            ///  Channel 5 control register
    +            CH5CTL: mmio.Mmio(packed struct(u32) {
    +                ///  Channel enable
    +                CHEN: u1,
    +                ///  Enable bit for channel full transfer finish interrupt
    +                FTFIE: u1,
    +                ///  Enable bit for channel half transfer finish interrupt
    +                HTFIE: u1,
    +                ///  Enable bit for channel error interrupt
    +                ERRIE: u1,
    +                ///  Transfer direction
    +                DIR: u1,
    +                ///  Circular mode enable
    +                CMEN: u1,
    +                ///  Next address generation algorithm of peripheral
    +                PNAGA: u1,
    +                ///  Next address generation algorithm of memory
    +                MNAGA: u1,
    +                ///  Transfer data size of peripheral
    +                PWIDTH: u2,
    +                ///  Transfer data size of memory
    +                MWIDTH: u2,
    +                ///  Priority level
    +                PRIO: u2,
    +                ///  Memory to Memory Mode
    +                M2M: u1,
    +                padding: u17,
    +            }),
    +            ///  Channel 5 counter register
    +            CH5CNT: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer counter
    +                CNT: u16,
    +                padding: u16,
    +            }),
    +            ///  Channel 5 peripheral base address register
    +            CH5PADDR: mmio.Mmio(packed struct(u32) {
    +                ///  Peripheral base address
    +                PADDR: u32,
    +            }),
    +            ///  Channel 5 memory base address register
    +            CH5MADDR: mmio.Mmio(packed struct(u32) {
    +                ///  Memory base address
    +                MADDR: u32,
    +            }),
    +            reserved128: [4]u8,
    +            ///  Channel 6 control register
    +            CH6CTL: mmio.Mmio(packed struct(u32) {
    +                ///  Channel enable
    +                CHEN: u1,
    +                ///  Enable bit for channel full transfer finish interrupt
    +                FTFIE: u1,
    +                ///  Enable bit for channel half transfer finish interrupt
    +                HTFIE: u1,
    +                ///  Enable bit for channel error interrupt
    +                ERRIE: u1,
    +                ///  Transfer direction
    +                DIR: u1,
    +                ///  Circular mode enable
    +                CMEN: u1,
    +                ///  Next address generation algorithm of peripheral
    +                PNAGA: u1,
    +                ///  Next address generation algorithm of memory
    +                MNAGA: u1,
    +                ///  Transfer data size of peripheral
    +                PWIDTH: u2,
    +                ///  Transfer data size of memory
    +                MWIDTH: u2,
    +                ///  Priority level
    +                PRIO: u2,
    +                ///  Memory to Memory Mode
    +                M2M: u1,
    +                padding: u17,
    +            }),
    +            ///  Channel 6 counter register
    +            CH6CNT: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer counter
    +                CNT: u16,
    +                padding: u16,
    +            }),
    +            ///  Channel 6 peripheral base address register
    +            CH6PADDR: mmio.Mmio(packed struct(u32) {
    +                ///  Peripheral base address
    +                PADDR: u32,
    +            }),
    +            ///  Channel 6 memory base address register
    +            CH6MADDR: mmio.Mmio(packed struct(u32) {
    +                ///  Memory base address
    +                MADDR: u32,
    +            }),
    +        };
    +
    +        ///  Direct memory access controller
    +        pub const DMA1 = extern struct {
    +            ///  Interrupt flag register
    +            INTF: mmio.Mmio(packed struct(u32) {
    +                ///  Global interrupt flag of channel 0
    +                GIF0: u1,
    +                ///  Full Transfer finish flag of channe 0
    +                FTFIF0: u1,
    +                ///  Half transfer finish flag of channel 0
    +                HTFIF0: u1,
    +                ///  Error flag of channel 0
    +                ERRIF0: u1,
    +                ///  Global interrupt flag of channel 1
    +                GIF1: u1,
    +                ///  Full Transfer finish flag of channe 1
    +                FTFIF1: u1,
    +                ///  Half transfer finish flag of channel 1
    +                HTFIF1: u1,
    +                ///  Error flag of channel 1
    +                ERRIF1: u1,
    +                ///  Global interrupt flag of channel 2
    +                GIF2: u1,
    +                ///  Full Transfer finish flag of channe 2
    +                FTFIF2: u1,
    +                ///  Half transfer finish flag of channel 2
    +                HTFIF2: u1,
    +                ///  Error flag of channel 2
    +                ERRIF2: u1,
    +                ///  Global interrupt flag of channel 3
    +                GIF3: u1,
    +                ///  Full Transfer finish flag of channe 3
    +                FTFIF3: u1,
    +                ///  Half transfer finish flag of channel 3
    +                HTFIF3: u1,
    +                ///  Error flag of channel 3
    +                ERRIF3: u1,
    +                ///  Global interrupt flag of channel 4
    +                GIF4: u1,
    +                ///  Full Transfer finish flag of channe 4
    +                FTFIF4: u1,
    +                ///  Half transfer finish flag of channel 4
    +                HTFIF4: u1,
    +                ///  Error flag of channel 4
    +                ERRIF4: u1,
    +                padding: u12,
    +            }),
    +            ///  Interrupt flag clear register
    +            INTC: mmio.Mmio(packed struct(u32) {
    +                ///  Clear global interrupt flag of channel 0
    +                GIFC0: u1,
    +                ///  Clear bit for full transfer finish flag of channel 0
    +                FTFIFC0: u1,
    +                ///  Clear bit for half transfer finish flag of channel 0
    +                HTFIFC0: u1,
    +                ///  Clear bit for error flag of channel 0
    +                ERRIFC0: u1,
    +                ///  Clear global interrupt flag of channel 1
    +                GIFC1: u1,
    +                ///  Clear bit for full transfer finish flag of channel 1
    +                FTFIFC1: u1,
    +                ///  Clear bit for half transfer finish flag of channel 1
    +                HTFIFC1: u1,
    +                ///  Clear bit for error flag of channel 1
    +                ERRIFC1: u1,
    +                ///  Clear global interrupt flag of channel 2
    +                GIFC2: u1,
    +                ///  Clear bit for full transfer finish flag of channel 2
    +                FTFIFC2: u1,
    +                ///  Clear bit for half transfer finish flag of channel 2
    +                HTFIFC2: u1,
    +                ///  Clear bit for error flag of channel 2
    +                ERRIFC2: u1,
    +                ///  Clear global interrupt flag of channel 3
    +                GIFC3: u1,
    +                ///  Clear bit for full transfer finish flag of channel 3
    +                FTFIFC3: u1,
    +                ///  Clear bit for half transfer finish flag of channel 3
    +                HTFIFC3: u1,
    +                ///  Clear bit for error flag of channel 3
    +                ERRIFC3: u1,
    +                ///  Clear global interrupt flag of channel 4
    +                GIFC4: u1,
    +                ///  Clear bit for full transfer finish flag of channel 4
    +                FTFIFC4: u1,
    +                ///  Clear bit for half transfer finish flag of channel 4
    +                HTFIFC4: u1,
    +                ///  Clear bit for error flag of channel 4
    +                ERRIFC4: u1,
    +                padding: u12,
    +            }),
    +            ///  Channel 0 control register
    +            CH0CTL: mmio.Mmio(packed struct(u32) {
    +                ///  Channel enable
    +                CHEN: u1,
    +                ///  Enable bit for channel full transfer finish interrupt
    +                FTFIE: u1,
    +                ///  Enable bit for channel half transfer finish interrupt
    +                HTFIE: u1,
    +                ///  Enable bit for channel error interrupt
    +                ERRIE: u1,
    +                ///  Transfer direction
    +                DIR: u1,
    +                ///  Circular mode enable
    +                CMEN: u1,
    +                ///  Next address generation algorithm of peripheral
    +                PNAGA: u1,
    +                ///  Next address generation algorithm of memory
    +                MNAGA: u1,
    +                ///  Transfer data size of peripheral
    +                PWIDTH: u2,
    +                ///  Transfer data size of memory
    +                MWIDTH: u2,
    +                ///  Priority level
    +                PRIO: u2,
    +                ///  Memory to Memory Mode
    +                M2M: u1,
    +                padding: u17,
    +            }),
    +            ///  Channel 0 counter register
    +            CH0CNT: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer counter
    +                CNT: u16,
    +                padding: u16,
    +            }),
    +            ///  Channel 0 peripheral base address register
    +            CH0PADDR: mmio.Mmio(packed struct(u32) {
    +                ///  Peripheral base address
    +                PADDR: u32,
    +            }),
    +            ///  Channel 0 memory base address register
    +            CH0MADDR: mmio.Mmio(packed struct(u32) {
    +                ///  Memory base address
    +                MADDR: u32,
    +            }),
    +            reserved28: [4]u8,
    +            ///  Channel 1 control register
    +            CH1CTL: mmio.Mmio(packed struct(u32) {
    +                ///  Channel enable
    +                CHEN: u1,
    +                ///  Enable bit for channel full transfer finish interrupt
    +                FTFIE: u1,
    +                ///  Enable bit for channel half transfer finish interrupt
    +                HTFIE: u1,
    +                ///  Enable bit for channel error interrupt
    +                ERRIE: u1,
    +                ///  Transfer direction
    +                DIR: u1,
    +                ///  Circular mode enable
    +                CMEN: u1,
    +                ///  Next address generation algorithm of peripheral
    +                PNAGA: u1,
    +                ///  Next address generation algorithm of memory
    +                MNAGA: u1,
    +                ///  Transfer data size of peripheral
    +                PWIDTH: u2,
    +                ///  Transfer data size of memory
    +                MWIDTH: u2,
    +                ///  Priority level
    +                PRIO: u2,
    +                ///  Memory to Memory Mode
    +                M2M: u1,
    +                padding: u17,
    +            }),
    +            ///  Channel 1 counter register
    +            CH1CNT: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer counter
    +                CNT: u16,
    +                padding: u16,
    +            }),
    +            ///  Channel 1 peripheral base address register
    +            CH1PADDR: mmio.Mmio(packed struct(u32) {
    +                ///  Peripheral base address
    +                PADDR: u32,
    +            }),
    +            ///  Channel 1 memory base address register
    +            CH1MADDR: mmio.Mmio(packed struct(u32) {
    +                ///  Memory base address
    +                MADDR: u32,
    +            }),
    +            reserved48: [4]u8,
    +            ///  Channel 2 control register
    +            CH2CTL: mmio.Mmio(packed struct(u32) {
    +                ///  Channel enable
    +                CHEN: u1,
    +                ///  Enable bit for channel full transfer finish interrupt
    +                FTFIE: u1,
    +                ///  Enable bit for channel half transfer finish interrupt
    +                HTFIE: u1,
    +                ///  Enable bit for channel error interrupt
    +                ERRIE: u1,
    +                ///  Transfer direction
    +                DIR: u1,
    +                ///  Circular mode enable
    +                CMEN: u1,
    +                ///  Next address generation algorithm of peripheral
    +                PNAGA: u1,
    +                ///  Next address generation algorithm of memory
    +                MNAGA: u1,
    +                ///  Transfer data size of peripheral
    +                PWIDTH: u2,
    +                ///  Transfer data size of memory
    +                MWIDTH: u2,
    +                ///  Priority level
    +                PRIO: u2,
    +                ///  Memory to Memory Mode
    +                M2M: u1,
    +                padding: u17,
    +            }),
    +            ///  Channel 2 counter register
    +            CH2CNT: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer counter
    +                CNT: u16,
    +                padding: u16,
    +            }),
    +            ///  Channel 2 peripheral base address register
    +            CH2PADDR: mmio.Mmio(packed struct(u32) {
    +                ///  Peripheral base address
    +                PADDR: u32,
    +            }),
    +            ///  Channel 2 memory base address register
    +            CH2MADDR: mmio.Mmio(packed struct(u32) {
    +                ///  Memory base address
    +                MADDR: u32,
    +            }),
    +            reserved68: [4]u8,
    +            ///  Channel 3 control register
    +            CH3CTL: mmio.Mmio(packed struct(u32) {
    +                ///  Channel enable
    +                CHEN: u1,
    +                ///  Enable bit for channel full transfer finish interrupt
    +                FTFIE: u1,
    +                ///  Enable bit for channel half transfer finish interrupt
    +                HTFIE: u1,
    +                ///  Enable bit for channel error interrupt
    +                ERRIE: u1,
    +                ///  Transfer direction
    +                DIR: u1,
    +                ///  Circular mode enable
    +                CMEN: u1,
    +                ///  Next address generation algorithm of peripheral
    +                PNAGA: u1,
    +                ///  Next address generation algorithm of memory
    +                MNAGA: u1,
    +                ///  Transfer data size of peripheral
    +                PWIDTH: u2,
    +                ///  Transfer data size of memory
    +                MWIDTH: u2,
    +                ///  Priority level
    +                PRIO: u2,
    +                ///  Memory to Memory Mode
    +                M2M: u1,
    +                padding: u17,
    +            }),
    +            ///  Channel 3 counter register
    +            CH3CNT: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer counter
    +                CNT: u16,
    +                padding: u16,
    +            }),
    +            ///  Channel 3 peripheral base address register
    +            CH3PADDR: mmio.Mmio(packed struct(u32) {
    +                ///  Peripheral base address
    +                PADDR: u32,
    +            }),
    +            ///  Channel 3 memory base address register
    +            CH3MADDR: mmio.Mmio(packed struct(u32) {
    +                ///  Memory base address
    +                MADDR: u32,
    +            }),
    +            reserved88: [4]u8,
    +            ///  Channel 4 control register
    +            CH4CTL: mmio.Mmio(packed struct(u32) {
    +                ///  Channel enable
    +                CHEN: u1,
    +                ///  Enable bit for channel full transfer finish interrupt
    +                FTFIE: u1,
    +                ///  Enable bit for channel half transfer finish interrupt
    +                HTFIE: u1,
    +                ///  Enable bit for channel error interrupt
    +                ERRIE: u1,
    +                ///  Transfer direction
    +                DIR: u1,
    +                ///  Circular mode enable
    +                CMEN: u1,
    +                ///  Next address generation algorithm of peripheral
    +                PNAGA: u1,
    +                ///  Next address generation algorithm of memory
    +                MNAGA: u1,
    +                ///  Transfer data size of peripheral
    +                PWIDTH: u2,
    +                ///  Transfer data size of memory
    +                MWIDTH: u2,
    +                ///  Priority level
    +                PRIO: u2,
    +                ///  Memory to Memory Mode
    +                M2M: u1,
    +                padding: u17,
    +            }),
    +            ///  Channel 4 counter register
    +            CH4CNT: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer counter
    +                CNT: u16,
    +                padding: u16,
    +            }),
    +            ///  Channel 4 peripheral base address register
    +            CH4PADDR: mmio.Mmio(packed struct(u32) {
    +                ///  Peripheral base address
    +                PADDR: u32,
    +            }),
    +            ///  Channel 4 memory base address register
    +            CH4MADDR: mmio.Mmio(packed struct(u32) {
    +                ///  Memory base address
    +                MADDR: u32,
    +            }),
    +        };
    +
    +        ///  External memory controller
    +        pub const EXMC = extern struct {
    +            ///  SRAM/NOR flash control register 0
    +            SNCTL0: mmio.Mmio(packed struct(u32) {
    +                ///  NOR bank enable
    +                NRBKEN: u1,
    +                ///  NOR bank memory address/data multiplexing
    +                NRMUX: u1,
    +                ///  NOR bank memory type
    +                NRTP: u2,
    +                ///  NOR bank memory data bus width
    +                NRW: u2,
    +                ///  NOR Flash access enable
    +                NREN: u1,
    +                reserved9: u2,
    +                ///  NWAIT signal polarity
    +                NRWTPOL: u1,
    +                reserved12: u2,
    +                ///  Write enable
    +                WREN: u1,
    +                ///  NWAIT signal enable
    +                NRWTEN: u1,
    +                reserved15: u1,
    +                ///  Asynchronous wait
    +                ASYNCWAIT: u1,
    +                padding: u16,
    +            }),
    +            ///  SRAM/NOR flash timing configuration register 0
    +            SNTCFG0: mmio.Mmio(packed struct(u32) {
    +                ///  Address setup time
    +                ASET: u4,
    +                ///  Address hold time
    +                AHLD: u4,
    +                ///  Data setup time
    +                DSET: u8,
    +                ///  Bus latency
    +                BUSLAT: u4,
    +                padding: u12,
    +            }),
    +            ///  SRAM/NOR flash control register 1
    +            SNCTL1: mmio.Mmio(packed struct(u32) {
    +                ///  NOR bank enable
    +                NRBKEN: u1,
    +                ///  NOR bank memory address/data multiplexing
    +                NRMUX: u1,
    +                ///  NOR bank memory type
    +                NRTP: u2,
    +                ///  NOR bank memory data bus width
    +                NRW: u2,
    +                ///  NOR Flash access enable
    +                NREN: u1,
    +                reserved9: u2,
    +                ///  NWAIT signal polarity
    +                NRWTPOL: u1,
    +                reserved12: u2,
    +                ///  Write enable
    +                WREN: u1,
    +                ///  NWAIT signal enable
    +                NRWTEN: u1,
    +                reserved15: u1,
    +                ///  Asynchronous wait
    +                ASYNCWAIT: u1,
    +                padding: u16,
    +            }),
    +        };
    +
    +        ///  External interrupt/event controller
    +        pub const EXTI = extern struct {
    +            ///  Interrupt enable register (EXTI_INTEN)
    +            INTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable Interrupt on line 0
    +                INTEN0: u1,
    +                ///  Enable Interrupt on line 1
    +                INTEN1: u1,
    +                ///  Enable Interrupt on line 2
    +                INTEN2: u1,
    +                ///  Enable Interrupt on line 3
    +                INTEN3: u1,
    +                ///  Enable Interrupt on line 4
    +                INTEN4: u1,
    +                ///  Enable Interrupt on line 5
    +                INTEN5: u1,
    +                ///  Enable Interrupt on line 6
    +                INTEN6: u1,
    +                ///  Enable Interrupt on line 7
    +                INTEN7: u1,
    +                ///  Enable Interrupt on line 8
    +                INTEN8: u1,
    +                ///  Enable Interrupt on line 9
    +                INTEN9: u1,
    +                ///  Enable Interrupt on line 10
    +                INTEN10: u1,
    +                ///  Enable Interrupt on line 11
    +                INTEN11: u1,
    +                ///  Enable Interrupt on line 12
    +                INTEN12: u1,
    +                ///  Enable Interrupt on line 13
    +                INTEN13: u1,
    +                ///  Enable Interrupt on line 14
    +                INTEN14: u1,
    +                ///  Enable Interrupt on line 15
    +                INTEN15: u1,
    +                ///  Enable Interrupt on line 16
    +                INTEN16: u1,
    +                ///  Enable Interrupt on line 17
    +                INTEN17: u1,
    +                ///  Enable Interrupt on line 18
    +                INTEN18: u1,
    +                padding: u13,
    +            }),
    +            ///  Event enable register (EXTI_EVEN)
    +            EVEN: mmio.Mmio(packed struct(u32) {
    +                ///  Enable Event on line 0
    +                EVEN0: u1,
    +                ///  Enable Event on line 1
    +                EVEN1: u1,
    +                ///  Enable Event on line 2
    +                EVEN2: u1,
    +                ///  Enable Event on line 3
    +                EVEN3: u1,
    +                ///  Enable Event on line 4
    +                EVEN4: u1,
    +                ///  Enable Event on line 5
    +                EVEN5: u1,
    +                ///  Enable Event on line 6
    +                EVEN6: u1,
    +                ///  Enable Event on line 7
    +                EVEN7: u1,
    +                ///  Enable Event on line 8
    +                EVEN8: u1,
    +                ///  Enable Event on line 9
    +                EVEN9: u1,
    +                ///  Enable Event on line 10
    +                EVEN10: u1,
    +                ///  Enable Event on line 11
    +                EVEN11: u1,
    +                ///  Enable Event on line 12
    +                EVEN12: u1,
    +                ///  Enable Event on line 13
    +                EVEN13: u1,
    +                ///  Enable Event on line 14
    +                EVEN14: u1,
    +                ///  Enable Event on line 15
    +                EVEN15: u1,
    +                ///  Enable Event on line 16
    +                EVEN16: u1,
    +                ///  Enable Event on line 17
    +                EVEN17: u1,
    +                ///  Enable Event on line 18
    +                EVEN18: u1,
    +                padding: u13,
    +            }),
    +            ///  Rising Edge Trigger Enable register (EXTI_RTEN)
    +            RTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Rising edge trigger enable of line 0
    +                RTEN0: u1,
    +                ///  Rising edge trigger enable of line 1
    +                RTEN1: u1,
    +                ///  Rising edge trigger enable of line 2
    +                RTEN2: u1,
    +                ///  Rising edge trigger enable of line 3
    +                RTEN3: u1,
    +                ///  Rising edge trigger enable of line 4
    +                RTEN4: u1,
    +                ///  Rising edge trigger enable of line 5
    +                RTEN5: u1,
    +                ///  Rising edge trigger enable of line 6
    +                RTEN6: u1,
    +                ///  Rising edge trigger enable of line 7
    +                RTEN7: u1,
    +                ///  Rising edge trigger enable of line 8
    +                RTEN8: u1,
    +                ///  Rising edge trigger enable of line 9
    +                RTEN9: u1,
    +                ///  Rising edge trigger enable of line 10
    +                RTEN10: u1,
    +                ///  Rising edge trigger enable of line 11
    +                RTEN11: u1,
    +                ///  Rising edge trigger enable of line 12
    +                RTEN12: u1,
    +                ///  Rising edge trigger enable of line 13
    +                RTEN13: u1,
    +                ///  Rising edge trigger enable of line 14
    +                RTEN14: u1,
    +                ///  Rising edge trigger enable of line 15
    +                RTEN15: u1,
    +                ///  Rising edge trigger enable of line 16
    +                RTEN16: u1,
    +                ///  Rising edge trigger enable of line 17
    +                RTEN17: u1,
    +                ///  Rising edge trigger enable of line 18
    +                RTEN18: u1,
    +                padding: u13,
    +            }),
    +            ///  Falling Egde Trigger Enable register (EXTI_FTEN)
    +            FTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Falling edge trigger enable of line 0
    +                FTEN0: u1,
    +                ///  Falling edge trigger enable of line 1
    +                FTEN1: u1,
    +                ///  Falling edge trigger enable of line 2
    +                FTEN2: u1,
    +                ///  Falling edge trigger enable of line 3
    +                FTEN3: u1,
    +                ///  Falling edge trigger enable of line 4
    +                FTEN4: u1,
    +                ///  Falling edge trigger enable of line 5
    +                FTEN5: u1,
    +                ///  Falling edge trigger enable of line 6
    +                FTEN6: u1,
    +                ///  Falling edge trigger enable of line 7
    +                FTEN7: u1,
    +                ///  Falling edge trigger enable of line 8
    +                FTEN8: u1,
    +                ///  Falling edge trigger enable of line 9
    +                FTEN9: u1,
    +                ///  Falling edge trigger enable of line 10
    +                FTEN10: u1,
    +                ///  Falling edge trigger enable of line 11
    +                FTEN11: u1,
    +                ///  Falling edge trigger enable of line 12
    +                FTEN12: u1,
    +                ///  Falling edge trigger enable of line 13
    +                FTEN13: u1,
    +                ///  Falling edge trigger enable of line 14
    +                FTEN14: u1,
    +                ///  Falling edge trigger enable of line 15
    +                FTEN15: u1,
    +                ///  Falling edge trigger enable of line 16
    +                FTEN16: u1,
    +                ///  Falling edge trigger enable of line 17
    +                FTEN17: u1,
    +                ///  Falling edge trigger enable of line 18
    +                FTEN18: u1,
    +                padding: u13,
    +            }),
    +            ///  Software interrupt event register (EXTI_SWIEV)
    +            SWIEV: mmio.Mmio(packed struct(u32) {
    +                ///  Interrupt/Event software trigger on line 0
    +                SWIEV0: u1,
    +                ///  Interrupt/Event software trigger on line 1
    +                SWIEV1: u1,
    +                ///  Interrupt/Event software trigger on line 2
    +                SWIEV2: u1,
    +                ///  Interrupt/Event software trigger on line 3
    +                SWIEV3: u1,
    +                ///  Interrupt/Event software trigger on line 4
    +                SWIEV4: u1,
    +                ///  Interrupt/Event software trigger on line 5
    +                SWIEV5: u1,
    +                ///  Interrupt/Event software trigger on line 6
    +                SWIEV6: u1,
    +                ///  Interrupt/Event software trigger on line 7
    +                SWIEV7: u1,
    +                ///  Interrupt/Event software trigger on line 8
    +                SWIEV8: u1,
    +                ///  Interrupt/Event software trigger on line 9
    +                SWIEV9: u1,
    +                ///  Interrupt/Event software trigger on line 10
    +                SWIEV10: u1,
    +                ///  Interrupt/Event software trigger on line 11
    +                SWIEV11: u1,
    +                ///  Interrupt/Event software trigger on line 12
    +                SWIEV12: u1,
    +                ///  Interrupt/Event software trigger on line 13
    +                SWIEV13: u1,
    +                ///  Interrupt/Event software trigger on line 14
    +                SWIEV14: u1,
    +                ///  Interrupt/Event software trigger on line 15
    +                SWIEV15: u1,
    +                ///  Interrupt/Event software trigger on line 16
    +                SWIEV16: u1,
    +                ///  Interrupt/Event software trigger on line 17
    +                SWIEV17: u1,
    +                ///  Interrupt/Event software trigger on line 18
    +                SWIEV18: u1,
    +                padding: u13,
    +            }),
    +            ///  Pending register (EXTI_PD)
    +            PD: mmio.Mmio(packed struct(u32) {
    +                ///  Interrupt pending status of line 0
    +                PD0: u1,
    +                ///  Interrupt pending status of line 1
    +                PD1: u1,
    +                ///  Interrupt pending status of line 2
    +                PD2: u1,
    +                ///  Interrupt pending status of line 3
    +                PD3: u1,
    +                ///  Interrupt pending status of line 4
    +                PD4: u1,
    +                ///  Interrupt pending status of line 5
    +                PD5: u1,
    +                ///  Interrupt pending status of line 6
    +                PD6: u1,
    +                ///  Interrupt pending status of line 7
    +                PD7: u1,
    +                ///  Interrupt pending status of line 8
    +                PD8: u1,
    +                ///  Interrupt pending status of line 9
    +                PD9: u1,
    +                ///  Interrupt pending status of line 10
    +                PD10: u1,
    +                ///  Interrupt pending status of line 11
    +                PD11: u1,
    +                ///  Interrupt pending status of line 12
    +                PD12: u1,
    +                ///  Interrupt pending status of line 13
    +                PD13: u1,
    +                ///  Interrupt pending status of line 14
    +                PD14: u1,
    +                ///  Interrupt pending status of line 15
    +                PD15: u1,
    +                ///  Interrupt pending status of line 16
    +                PD16: u1,
    +                ///  Interrupt pending status of line 17
    +                PD17: u1,
    +                ///  Interrupt pending status of line 18
    +                PD18: u1,
    +                padding: u13,
    +            }),
    +        };
    +
    +        ///  FMC
    +        pub const FMC = extern struct {
    +            ///  wait state counter register
    +            WS: mmio.Mmio(packed struct(u32) {
    +                ///  wait state counter register
    +                WSCNT: u3,
    +                padding: u29,
    +            }),
    +            ///  Unlock key register 0
    +            KEY0: mmio.Mmio(packed struct(u32) {
    +                ///  FMC_CTL0 unlock key
    +                KEY: u32,
    +            }),
    +            ///  Option byte unlock key register
    +            OBKEY: mmio.Mmio(packed struct(u32) {
    +                ///  FMC_ CTL0 option byte operation unlock register
    +                OBKEY: u32,
    +            }),
    +            ///  Status register 0
    +            STAT0: mmio.Mmio(packed struct(u32) {
    +                ///  The flash is busy bit
    +                BUSY: u1,
    +                reserved2: u1,
    +                ///  Program error flag bit
    +                PGERR: u1,
    +                reserved4: u1,
    +                ///  Erase/Program protection error flag bit
    +                WPERR: u1,
    +                ///  End of operation flag bit
    +                ENDF: u1,
    +                padding: u26,
    +            }),
    +            ///  Control register 0
    +            CTL0: mmio.Mmio(packed struct(u32) {
    +                ///  Main flash program for bank0 command bit
    +                PG: u1,
    +                ///  Main flash page erase for bank0 command bit
    +                PER: u1,
    +                ///  Main flash mass erase for bank0 command bit
    +                MER: u1,
    +                reserved4: u1,
    +                ///  Option bytes program command bit
    +                OBPG: u1,
    +                ///  Option bytes erase command bit
    +                OBER: u1,
    +                ///  Send erase command to FMC bit
    +                START: u1,
    +                ///  FMC_CTL0 lock bit
    +                LK: u1,
    +                reserved9: u1,
    +                ///  Option byte erase/program enable bit
    +                OBWEN: u1,
    +                ///  Error interrupt enable bit
    +                ERRIE: u1,
    +                reserved12: u1,
    +                ///  End of operation interrupt enable bit
    +                ENDIE: u1,
    +                padding: u19,
    +            }),
    +            ///  Address register 0
    +            ADDR0: mmio.Mmio(packed struct(u32) {
    +                ///  Flash erase/program command address bits
    +                ADDR: u32,
    +            }),
    +            reserved28: [4]u8,
    +            ///  Option byte status register
    +            OBSTAT: mmio.Mmio(packed struct(u32) {
    +                ///  Option bytes read error bit
    +                OBERR: u1,
    +                ///  Option bytes security protection code
    +                SPC: u1,
    +                ///  Store USER of option bytes block after system reset
    +                USER: u8,
    +                ///  Store DATA[15:0] of option bytes block after system reset
    +                DATA: u16,
    +                padding: u6,
    +            }),
    +            ///  Erase/Program Protection register
    +            WP: mmio.Mmio(packed struct(u32) {
    +                ///  Store WP[31:0] of option bytes block after system reset
    +                WP: u32,
    +            }),
    +            reserved256: [220]u8,
    +            ///  Product ID register
    +            PID: mmio.Mmio(packed struct(u32) {
    +                ///  Product reserved ID code register
    +                PID: u32,
    +            }),
    +        };
    +
    +        ///  free watchdog timer
    +        pub const FWDGT = extern struct {
    +            ///  Control register
    +            CTL: mmio.Mmio(packed struct(u32) {
    +                ///  Key value
    +                CMD: u16,
    +                padding: u16,
    +            }),
    +            ///  Prescaler register
    +            PSC: mmio.Mmio(packed struct(u32) {
    +                ///  Free watchdog timer prescaler selection
    +                PSC: u3,
    +                padding: u29,
    +            }),
    +            ///  Reload register
    +            RLD: mmio.Mmio(packed struct(u32) {
    +                ///  Free watchdog timer counter reload value
    +                RLD: u12,
    +                padding: u20,
    +            }),
    +            ///  Status register
    +            STAT: mmio.Mmio(packed struct(u32) {
    +                ///  Free watchdog timer prescaler value update
    +                PUD: u1,
    +                ///  Free watchdog timer counter reload value update
    +                RUD: u1,
    +                padding: u30,
    +            }),
    +        };
    +
    +        ///  General-purpose I/Os
    +        pub const GPIOA = extern struct {
    +            ///  port control register 0
    +            CTL0: mmio.Mmio(packed struct(u32) {
    +                ///  Port x mode bits (x = 0)
    +                MD0: u2,
    +                ///  Port x configuration bits (x = 0)
    +                CTL0: u2,
    +                ///  Port x mode bits (x = 1)
    +                MD1: u2,
    +                ///  Port x configuration bits (x = 1)
    +                CTL1: u2,
    +                ///  Port x mode bits (x = 2 )
    +                MD2: u2,
    +                ///  Port x configuration bits (x = 2)
    +                CTL2: u2,
    +                ///  Port x mode bits (x = 3 )
    +                MD3: u2,
    +                ///  Port x configuration bits (x = 3)
    +                CTL3: u2,
    +                ///  Port x mode bits (x = 4)
    +                MD4: u2,
    +                ///  Port x configuration bits (x = 4)
    +                CTL4: u2,
    +                ///  Port x mode bits (x = 5)
    +                MD5: u2,
    +                ///  Port x configuration bits (x = 5)
    +                CTL5: u2,
    +                ///  Port x mode bits (x = 6)
    +                MD6: u2,
    +                ///  Port x configuration bits (x = 6)
    +                CTL6: u2,
    +                ///  Port x mode bits (x = 7)
    +                MD7: u2,
    +                ///  Port x configuration bits (x = 7)
    +                CTL7: u2,
    +            }),
    +            ///  port control register 1
    +            CTL1: mmio.Mmio(packed struct(u32) {
    +                ///  Port x mode bits (x = 8)
    +                MD8: u2,
    +                ///  Port x configuration bits (x = 8)
    +                CTL8: u2,
    +                ///  Port x mode bits (x = 9)
    +                MD9: u2,
    +                ///  Port x configuration bits (x = 9)
    +                CTL9: u2,
    +                ///  Port x mode bits (x = 10 )
    +                MD10: u2,
    +                ///  Port x configuration bits (x = 10)
    +                CTL10: u2,
    +                ///  Port x mode bits (x = 11 )
    +                MD11: u2,
    +                ///  Port x configuration bits (x = 11)
    +                CTL11: u2,
    +                ///  Port x mode bits (x = 12)
    +                MD12: u2,
    +                ///  Port x configuration bits (x = 12)
    +                CTL12: u2,
    +                ///  Port x mode bits (x = 13)
    +                MD13: u2,
    +                ///  Port x configuration bits (x = 13)
    +                CTL13: u2,
    +                ///  Port x mode bits (x = 14)
    +                MD14: u2,
    +                ///  Port x configuration bits (x = 14)
    +                CTL14: u2,
    +                ///  Port x mode bits (x = 15)
    +                MD15: u2,
    +                ///  Port x configuration bits (x = 15)
    +                CTL15: u2,
    +            }),
    +            ///  Port input status register
    +            ISTAT: mmio.Mmio(packed struct(u32) {
    +                ///  Port input status
    +                ISTAT0: u1,
    +                ///  Port input status
    +                ISTAT1: u1,
    +                ///  Port input status
    +                ISTAT2: u1,
    +                ///  Port input status
    +                ISTAT3: u1,
    +                ///  Port input status
    +                ISTAT4: u1,
    +                ///  Port input status
    +                ISTAT5: u1,
    +                ///  Port input status
    +                ISTAT6: u1,
    +                ///  Port input status
    +                ISTAT7: u1,
    +                ///  Port input status
    +                ISTAT8: u1,
    +                ///  Port input status
    +                ISTAT9: u1,
    +                ///  Port input status
    +                ISTAT10: u1,
    +                ///  Port input status
    +                ISTAT11: u1,
    +                ///  Port input status
    +                ISTAT12: u1,
    +                ///  Port input status
    +                ISTAT13: u1,
    +                ///  Port input status
    +                ISTAT14: u1,
    +                ///  Port input status
    +                ISTAT15: u1,
    +                padding: u16,
    +            }),
    +            ///  Port output control register
    +            OCTL: mmio.Mmio(packed struct(u32) {
    +                ///  Port output control
    +                OCTL0: u1,
    +                ///  Port output control
    +                OCTL1: u1,
    +                ///  Port output control
    +                OCTL2: u1,
    +                ///  Port output control
    +                OCTL3: u1,
    +                ///  Port output control
    +                OCTL4: u1,
    +                ///  Port output control
    +                OCTL5: u1,
    +                ///  Port output control
    +                OCTL6: u1,
    +                ///  Port output control
    +                OCTL7: u1,
    +                ///  Port output control
    +                OCTL8: u1,
    +                ///  Port output control
    +                OCTL9: u1,
    +                ///  Port output control
    +                OCTL10: u1,
    +                ///  Port output control
    +                OCTL11: u1,
    +                ///  Port output control
    +                OCTL12: u1,
    +                ///  Port output control
    +                OCTL13: u1,
    +                ///  Port output control
    +                OCTL14: u1,
    +                ///  Port output control
    +                OCTL15: u1,
    +                padding: u16,
    +            }),
    +            ///  Port bit operate register
    +            BOP: mmio.Mmio(packed struct(u32) {
    +                ///  Port 0 Set bit
    +                BOP0: u1,
    +                ///  Port 1 Set bit
    +                BOP1: u1,
    +                ///  Port 2 Set bit
    +                BOP2: u1,
    +                ///  Port 3 Set bit
    +                BOP3: u1,
    +                ///  Port 4 Set bit
    +                BOP4: u1,
    +                ///  Port 5 Set bit
    +                BOP5: u1,
    +                ///  Port 6 Set bit
    +                BOP6: u1,
    +                ///  Port 7 Set bit
    +                BOP7: u1,
    +                ///  Port 8 Set bit
    +                BOP8: u1,
    +                ///  Port 9 Set bit
    +                BOP9: u1,
    +                ///  Port 10 Set bit
    +                BOP10: u1,
    +                ///  Port 11 Set bit
    +                BOP11: u1,
    +                ///  Port 12 Set bit
    +                BOP12: u1,
    +                ///  Port 13 Set bit
    +                BOP13: u1,
    +                ///  Port 14 Set bit
    +                BOP14: u1,
    +                ///  Port 15 Set bit
    +                BOP15: u1,
    +                ///  Port 0 Clear bit
    +                CR0: u1,
    +                ///  Port 1 Clear bit
    +                CR1: u1,
    +                ///  Port 2 Clear bit
    +                CR2: u1,
    +                ///  Port 3 Clear bit
    +                CR3: u1,
    +                ///  Port 4 Clear bit
    +                CR4: u1,
    +                ///  Port 5 Clear bit
    +                CR5: u1,
    +                ///  Port 6 Clear bit
    +                CR6: u1,
    +                ///  Port 7 Clear bit
    +                CR7: u1,
    +                ///  Port 8 Clear bit
    +                CR8: u1,
    +                ///  Port 9 Clear bit
    +                CR9: u1,
    +                ///  Port 10 Clear bit
    +                CR10: u1,
    +                ///  Port 11 Clear bit
    +                CR11: u1,
    +                ///  Port 12 Clear bit
    +                CR12: u1,
    +                ///  Port 13 Clear bit
    +                CR13: u1,
    +                ///  Port 14 Clear bit
    +                CR14: u1,
    +                ///  Port 15 Clear bit
    +                CR15: u1,
    +            }),
    +            ///  Port bit clear register
    +            BC: mmio.Mmio(packed struct(u32) {
    +                ///  Port 0 Clear bit
    +                CR0: u1,
    +                ///  Port 1 Clear bit
    +                CR1: u1,
    +                ///  Port 2 Clear bit
    +                CR2: u1,
    +                ///  Port 3 Clear bit
    +                CR3: u1,
    +                ///  Port 4 Clear bit
    +                CR4: u1,
    +                ///  Port 5 Clear bit
    +                CR5: u1,
    +                ///  Port 6 Clear bit
    +                CR6: u1,
    +                ///  Port 7 Clear bit
    +                CR7: u1,
    +                ///  Port 8 Clear bit
    +                CR8: u1,
    +                ///  Port 9 Clear bit
    +                CR9: u1,
    +                ///  Port 10 Clear bit
    +                CR10: u1,
    +                ///  Port 11 Clear bit
    +                CR11: u1,
    +                ///  Port 12 Clear bit
    +                CR12: u1,
    +                ///  Port 13 Clear bit
    +                CR13: u1,
    +                ///  Port 14 Clear bit
    +                CR14: u1,
    +                ///  Port 15 Clear bit
    +                CR15: u1,
    +                padding: u16,
    +            }),
    +            ///  GPIO port configuration lock register
    +            LOCK: mmio.Mmio(packed struct(u32) {
    +                ///  Port Lock bit 0
    +                LK0: u1,
    +                ///  Port Lock bit 1
    +                LK1: u1,
    +                ///  Port Lock bit 2
    +                LK2: u1,
    +                ///  Port Lock bit 3
    +                LK3: u1,
    +                ///  Port Lock bit 4
    +                LK4: u1,
    +                ///  Port Lock bit 5
    +                LK5: u1,
    +                ///  Port Lock bit 6
    +                LK6: u1,
    +                ///  Port Lock bit 7
    +                LK7: u1,
    +                ///  Port Lock bit 8
    +                LK8: u1,
    +                ///  Port Lock bit 9
    +                LK9: u1,
    +                ///  Port Lock bit 10
    +                LK10: u1,
    +                ///  Port Lock bit 11
    +                LK11: u1,
    +                ///  Port Lock bit 12
    +                LK12: u1,
    +                ///  Port Lock bit 13
    +                LK13: u1,
    +                ///  Port Lock bit 14
    +                LK14: u1,
    +                ///  Port Lock bit 15
    +                LK15: u1,
    +                ///  Lock sequence key
    +                LKK: u1,
    +                padding: u15,
    +            }),
    +        };
    +
    +        ///  USB on the go full speed
    +        pub const USBFS_PWRCLK = extern struct {
    +            ///  power and clock gating control register (PWRCLKCTL)
    +            PWRCLKCTL: mmio.Mmio(packed struct(u32) {
    +                ///  Stop the USB clock
    +                SUCLK: u1,
    +                ///  Stop HCLK
    +                SHCLK: u1,
    +                padding: u30,
    +            }),
    +        };
    +
    +        ///  USB on the go full speed device
    +        pub const USBFS_DEVICE = extern struct {
    +            ///  device configuration register (DCFG)
    +            DCFG: mmio.Mmio(packed struct(u32) {
    +                ///  Device speed
    +                DS: u2,
    +                ///  Non-zero-length status OUT handshake
    +                NZLSOH: u1,
    +                reserved4: u1,
    +                ///  Device address
    +                DAR: u7,
    +                ///  end of periodic frame time
    +                EOPFT: u2,
    +                padding: u19,
    +            }),
    +            ///  device control register (DCTL)
    +            DCTL: mmio.Mmio(packed struct(u32) {
    +                ///  Remote wakeup
    +                RWKUP: u1,
    +                ///  Soft disconnect
    +                SD: u1,
    +                ///  Global IN NAK status
    +                GINS: u1,
    +                ///  Global OUT NAK status
    +                GONS: u1,
    +                reserved7: u3,
    +                ///  Set global IN NAK
    +                SGINAK: u1,
    +                ///  Clear global IN NAK
    +                CGINAK: u1,
    +                ///  Set global OUT NAK
    +                SGONAK: u1,
    +                ///  Clear global OUT NAK
    +                CGONAK: u1,
    +                ///  Power-on initialization flag
    +                POIF: u1,
    +                padding: u20,
    +            }),
    +            ///  device status register (DSTAT)
    +            DSTAT: mmio.Mmio(packed struct(u32) {
    +                ///  Suspend status
    +                SPST: u1,
    +                ///  Enumerated speed
    +                ES: u2,
    +                reserved8: u5,
    +                ///  Frame number of the received SOF
    +                FNRSOF: u14,
    +                padding: u10,
    +            }),
    +            reserved16: [4]u8,
    +            ///  device IN endpoint common interrupt mask register (DIEPINTEN)
    +            DIEPINTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer finished interrupt enable
    +                TFEN: u1,
    +                ///  Endpoint disabled interrupt enable
    +                EPDISEN: u1,
    +                reserved3: u1,
    +                ///  Control IN timeout condition interrupt enable (Non-isochronous endpoints)
    +                CITOEN: u1,
    +                ///  Endpoint Tx FIFO underrun interrupt enable bit
    +                EPTXFUDEN: u1,
    +                reserved6: u1,
    +                ///  IN endpoint NAK effective interrupt enable
    +                IEPNEEN: u1,
    +                padding: u25,
    +            }),
    +            ///  device OUT endpoint common interrupt enable register (DOEPINTEN)
    +            DOEPINTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer finished interrupt enable
    +                TFEN: u1,
    +                ///  Endpoint disabled interrupt enable
    +                EPDISEN: u1,
    +                reserved3: u1,
    +                ///  SETUP phase finished interrupt enable
    +                STPFEN: u1,
    +                ///  Endpoint Rx FIFO overrun interrupt enable
    +                EPRXFOVREN: u1,
    +                reserved6: u1,
    +                ///  Back-to-back SETUP packets interrupt enable
    +                BTBSTPEN: u1,
    +                padding: u25,
    +            }),
    +            ///  device all endpoints interrupt register (DAEPINT)
    +            DAEPINT: mmio.Mmio(packed struct(u32) {
    +                ///  Device all IN endpoint interrupt bits
    +                IEPITB: u4,
    +                reserved16: u12,
    +                ///  Device all OUT endpoint interrupt bits
    +                OEPITB: u4,
    +                padding: u12,
    +            }),
    +            ///  Device all endpoints interrupt enable register (DAEPINTEN)
    +            DAEPINTEN: mmio.Mmio(packed struct(u32) {
    +                ///  IN EP interrupt interrupt enable bits
    +                IEPIE: u4,
    +                reserved16: u12,
    +                ///  OUT endpoint interrupt enable bits
    +                OEPIE: u4,
    +                padding: u12,
    +            }),
    +            reserved40: [8]u8,
    +            ///  device VBUS discharge time register
    +            DVBUSDT: mmio.Mmio(packed struct(u32) {
    +                ///  Device VBUS discharge time
    +                DVBUSDT: u16,
    +                padding: u16,
    +            }),
    +            ///  device VBUS pulsing time register
    +            DVBUSPT: mmio.Mmio(packed struct(u32) {
    +                ///  Device VBUS pulsing time
    +                DVBUSPT: u12,
    +                padding: u20,
    +            }),
    +            reserved52: [4]u8,
    +            ///  device IN endpoint FIFO empty interrupt enable register
    +            DIEPFEINTEN: mmio.Mmio(packed struct(u32) {
    +                ///  IN EP Tx FIFO empty interrupt enable bits
    +                IEPTXFEIE: u4,
    +                padding: u28,
    +            }),
    +            reserved256: [200]u8,
    +            ///  device IN endpoint 0 control register (DIEP0CTL)
    +            DIEP0CTL: mmio.Mmio(packed struct(u32) {
    +                ///  Maximum packet length
    +                MPL: u2,
    +                reserved15: u13,
    +                ///  endpoint active
    +                EPACT: u1,
    +                reserved17: u1,
    +                ///  NAK status
    +                NAKS: u1,
    +                ///  Endpoint type
    +                EPTYPE: u2,
    +                reserved21: u1,
    +                ///  STALL handshake
    +                STALL: u1,
    +                ///  TxFIFO number
    +                TXFNUM: u4,
    +                ///  Clear NAK
    +                CNAK: u1,
    +                ///  Set NAK
    +                SNAK: u1,
    +                reserved30: u2,
    +                ///  Endpoint disable
    +                EPD: u1,
    +                ///  Endpoint enable
    +                EPEN: u1,
    +            }),
    +            reserved264: [4]u8,
    +            ///  device endpoint-0 interrupt register
    +            DIEP0INTF: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer finished
    +                TF: u1,
    +                ///  Endpoint finished
    +                EPDIS: u1,
    +                reserved3: u1,
    +                ///  Control in timeout interrupt
    +                CITO: u1,
    +                ///  Endpoint Tx FIFO underrun
    +                EPTXFUD: u1,
    +                reserved6: u1,
    +                ///  IN endpoint NAK effective
    +                IEPNE: u1,
    +                ///  Transmit FIFO empty
    +                TXFE: u1,
    +                padding: u24,
    +            }),
    +            reserved272: [4]u8,
    +            ///  device IN endpoint-0 transfer length register
    +            DIEP0LEN: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer length
    +                TLEN: u7,
    +                reserved19: u12,
    +                ///  Packet count
    +                PCNT: u2,
    +                padding: u11,
    +            }),
    +            reserved280: [4]u8,
    +            ///  device IN endpoint 0 transmit FIFO status register
    +            DIEP0TFSTAT: mmio.Mmio(packed struct(u32) {
    +                ///  IN endpoint TxFIFO space remaining
    +                IEPTFS: u16,
    +                padding: u16,
    +            }),
    +            reserved288: [4]u8,
    +            ///  device in endpoint-1 control register
    +            DIEP1CTL: mmio.Mmio(packed struct(u32) {
    +                ///  maximum packet length
    +                MPL: u11,
    +                reserved15: u4,
    +                ///  Endpoint active
    +                EPACT: u1,
    +                ///  EOFRM/DPID
    +                EOFRM_DPID: u1,
    +                ///  NAK status
    +                NAKS: u1,
    +                ///  Endpoint type
    +                EPTYPE: u2,
    +                reserved21: u1,
    +                ///  STALL handshake
    +                STALL: u1,
    +                ///  Tx FIFO number
    +                TXFNUM: u4,
    +                ///  Clear NAK
    +                CNAK: u1,
    +                ///  Set NAK
    +                SNAK: u1,
    +                ///  SD0PID/SEVNFRM
    +                SD0PID_SEVENFRM: u1,
    +                ///  Set DATA1 PID/Set odd frame
    +                SD1PID_SODDFRM: u1,
    +                ///  Endpoint disable
    +                EPD: u1,
    +                ///  Endpoint enable
    +                EPEN: u1,
    +            }),
    +            reserved296: [4]u8,
    +            ///  device endpoint-1 interrupt register
    +            DIEP1INTF: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer finished
    +                TF: u1,
    +                ///  Endpoint finished
    +                EPDIS: u1,
    +                reserved3: u1,
    +                ///  Control in timeout interrupt
    +                CITO: u1,
    +                ///  Endpoint Tx FIFO underrun
    +                EPTXFUD: u1,
    +                reserved6: u1,
    +                ///  IN endpoint NAK effective
    +                IEPNE: u1,
    +                ///  Transmit FIFO empty
    +                TXFE: u1,
    +                padding: u24,
    +            }),
    +            reserved304: [4]u8,
    +            ///  device IN endpoint-1 transfer length register
    +            DIEP1LEN: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer length
    +                TLEN: u19,
    +                ///  Packet count
    +                PCNT: u10,
    +                ///  Multi packet count per frame
    +                MCPF: u2,
    +                padding: u1,
    +            }),
    +            reserved312: [4]u8,
    +            ///  device IN endpoint 1 transmit FIFO status register
    +            DIEP1TFSTAT: mmio.Mmio(packed struct(u32) {
    +                ///  IN endpoint TxFIFO space remaining
    +                IEPTFS: u16,
    +                padding: u16,
    +            }),
    +            reserved320: [4]u8,
    +            ///  device endpoint-2 control register
    +            DIEP2CTL: mmio.Mmio(packed struct(u32) {
    +                ///  maximum packet length
    +                MPL: u11,
    +                reserved15: u4,
    +                ///  Endpoint active
    +                EPACT: u1,
    +                ///  EOFRM/DPID
    +                EOFRM_DPID: u1,
    +                ///  NAK status
    +                NAKS: u1,
    +                ///  Endpoint type
    +                EPTYPE: u2,
    +                reserved21: u1,
    +                ///  STALL handshake
    +                STALL: u1,
    +                ///  Tx FIFO number
    +                TXFNUM: u4,
    +                ///  Clear NAK
    +                CNAK: u1,
    +                ///  Set NAK
    +                SNAK: u1,
    +                ///  SD0PID/SEVNFRM
    +                SD0PID_SEVENFRM: u1,
    +                ///  Set DATA1 PID/Set odd frame
    +                SD1PID_SODDFRM: u1,
    +                ///  Endpoint disable
    +                EPD: u1,
    +                ///  Endpoint enable
    +                EPEN: u1,
    +            }),
    +            reserved328: [4]u8,
    +            ///  device endpoint-2 interrupt register
    +            DIEP2INTF: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer finished
    +                TF: u1,
    +                ///  Endpoint finished
    +                EPDIS: u1,
    +                reserved3: u1,
    +                ///  Control in timeout interrupt
    +                CITO: u1,
    +                ///  Endpoint Tx FIFO underrun
    +                EPTXFUD: u1,
    +                reserved6: u1,
    +                ///  IN endpoint NAK effective
    +                IEPNE: u1,
    +                ///  Transmit FIFO empty
    +                TXFE: u1,
    +                padding: u24,
    +            }),
    +            reserved336: [4]u8,
    +            ///  device IN endpoint-2 transfer length register
    +            DIEP2LEN: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer length
    +                TLEN: u19,
    +                ///  Packet count
    +                PCNT: u10,
    +                ///  Multi packet count per frame
    +                MCPF: u2,
    +                padding: u1,
    +            }),
    +            reserved344: [4]u8,
    +            ///  device IN endpoint 2 transmit FIFO status register
    +            DIEP2TFSTAT: mmio.Mmio(packed struct(u32) {
    +                ///  IN endpoint TxFIFO space remaining
    +                IEPTFS: u16,
    +                padding: u16,
    +            }),
    +            reserved352: [4]u8,
    +            ///  device endpoint-3 control register
    +            DIEP3CTL: mmio.Mmio(packed struct(u32) {
    +                ///  maximum packet length
    +                MPL: u11,
    +                reserved15: u4,
    +                ///  Endpoint active
    +                EPACT: u1,
    +                ///  EOFRM/DPID
    +                EOFRM_DPID: u1,
    +                ///  NAK status
    +                NAKS: u1,
    +                ///  Endpoint type
    +                EPTYPE: u2,
    +                reserved21: u1,
    +                ///  STALL handshake
    +                STALL: u1,
    +                ///  Tx FIFO number
    +                TXFNUM: u4,
    +                ///  Clear NAK
    +                CNAK: u1,
    +                ///  Set NAK
    +                SNAK: u1,
    +                ///  SD0PID/SEVNFRM
    +                SD0PID_SEVENFRM: u1,
    +                ///  Set DATA1 PID/Set odd frame
    +                SD1PID_SODDFRM: u1,
    +                ///  Endpoint disable
    +                EPD: u1,
    +                ///  Endpoint enable
    +                EPEN: u1,
    +            }),
    +            reserved360: [4]u8,
    +            ///  device endpoint-3 interrupt register
    +            DIEP3INTF: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer finished
    +                TF: u1,
    +                ///  Endpoint finished
    +                EPDIS: u1,
    +                reserved3: u1,
    +                ///  Control in timeout interrupt
    +                CITO: u1,
    +                ///  Endpoint Tx FIFO underrun
    +                EPTXFUD: u1,
    +                reserved6: u1,
    +                ///  IN endpoint NAK effective
    +                IEPNE: u1,
    +                ///  Transmit FIFO empty
    +                TXFE: u1,
    +                padding: u24,
    +            }),
    +            reserved368: [4]u8,
    +            ///  device IN endpoint-3 transfer length register
    +            DIEP3LEN: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer length
    +                TLEN: u19,
    +                ///  Packet count
    +                PCNT: u10,
    +                ///  Multi packet count per frame
    +                MCPF: u2,
    +                padding: u1,
    +            }),
    +            reserved376: [4]u8,
    +            ///  device IN endpoint 3 transmit FIFO status register
    +            DIEP3TFSTAT: mmio.Mmio(packed struct(u32) {
    +                ///  IN endpoint TxFIFO space remaining
    +                IEPTFS: u16,
    +                padding: u16,
    +            }),
    +            reserved768: [388]u8,
    +            ///  device endpoint-0 control register
    +            DOEP0CTL: mmio.Mmio(packed struct(u32) {
    +                ///  Maximum packet length
    +                MPL: u2,
    +                reserved15: u13,
    +                ///  Endpoint active
    +                EPACT: u1,
    +                reserved17: u1,
    +                ///  NAK status
    +                NAKS: u1,
    +                ///  Endpoint type
    +                EPTYPE: u2,
    +                ///  Snoop mode
    +                SNOOP: u1,
    +                ///  STALL handshake
    +                STALL: u1,
    +                reserved26: u4,
    +                ///  Clear NAK
    +                CNAK: u1,
    +                ///  Set NAK
    +                SNAK: u1,
    +                reserved30: u2,
    +                ///  Endpoint disable
    +                EPD: u1,
    +                ///  Endpoint enable
    +                EPEN: u1,
    +            }),
    +            reserved776: [4]u8,
    +            ///  device out endpoint-0 interrupt flag register
    +            DOEP0INTF: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer finished
    +                TF: u1,
    +                ///  Endpoint disabled
    +                EPDIS: u1,
    +                reserved3: u1,
    +                ///  Setup phase finished
    +                STPF: u1,
    +                ///  Endpoint Rx FIFO overrun
    +                EPRXFOVR: u1,
    +                reserved6: u1,
    +                ///  Back-to-back SETUP packets
    +                BTBSTP: u1,
    +                padding: u25,
    +            }),
    +            reserved784: [4]u8,
    +            ///  device OUT endpoint-0 transfer length register
    +            DOEP0LEN: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer length
    +                TLEN: u7,
    +                reserved19: u12,
    +                ///  Packet count
    +                PCNT: u1,
    +                reserved29: u9,
    +                ///  SETUP packet count
    +                STPCNT: u2,
    +                padding: u1,
    +            }),
    +            reserved800: [12]u8,
    +            ///  device endpoint-1 control register
    +            DOEP1CTL: mmio.Mmio(packed struct(u32) {
    +                ///  maximum packet length
    +                MPL: u11,
    +                reserved15: u4,
    +                ///  Endpoint active
    +                EPACT: u1,
    +                ///  EOFRM/DPID
    +                EOFRM_DPID: u1,
    +                ///  NAK status
    +                NAKS: u1,
    +                ///  Endpoint type
    +                EPTYPE: u2,
    +                ///  Snoop mode
    +                SNOOP: u1,
    +                ///  STALL handshake
    +                STALL: u1,
    +                reserved26: u4,
    +                ///  Clear NAK
    +                CNAK: u1,
    +                ///  Set NAK
    +                SNAK: u1,
    +                ///  SD0PID/SEVENFRM
    +                SD0PID_SEVENFRM: u1,
    +                ///  SD1PID/SODDFRM
    +                SD1PID_SODDFRM: u1,
    +                ///  Endpoint disable
    +                EPD: u1,
    +                ///  Endpoint enable
    +                EPEN: u1,
    +            }),
    +            reserved808: [4]u8,
    +            ///  device out endpoint-1 interrupt flag register
    +            DOEP1INTF: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer finished
    +                TF: u1,
    +                ///  Endpoint disabled
    +                EPDIS: u1,
    +                reserved3: u1,
    +                ///  Setup phase finished
    +                STPF: u1,
    +                ///  Endpoint Rx FIFO overrun
    +                EPRXFOVR: u1,
    +                reserved6: u1,
    +                ///  Back-to-back SETUP packets
    +                BTBSTP: u1,
    +                padding: u25,
    +            }),
    +            reserved816: [4]u8,
    +            ///  device OUT endpoint-1 transfer length register
    +            DOEP1LEN: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer length
    +                TLEN: u19,
    +                ///  Packet count
    +                PCNT: u10,
    +                ///  SETUP packet count/Received data PID
    +                STPCNT_RXDPID: u2,
    +                padding: u1,
    +            }),
    +            reserved832: [12]u8,
    +            ///  device endpoint-2 control register
    +            DOEP2CTL: mmio.Mmio(packed struct(u32) {
    +                ///  maximum packet length
    +                MPL: u11,
    +                reserved15: u4,
    +                ///  Endpoint active
    +                EPACT: u1,
    +                ///  EOFRM/DPID
    +                EOFRM_DPID: u1,
    +                ///  NAK status
    +                NAKS: u1,
    +                ///  Endpoint type
    +                EPTYPE: u2,
    +                ///  Snoop mode
    +                SNOOP: u1,
    +                ///  STALL handshake
    +                STALL: u1,
    +                reserved26: u4,
    +                ///  Clear NAK
    +                CNAK: u1,
    +                ///  Set NAK
    +                SNAK: u1,
    +                ///  SD0PID/SEVENFRM
    +                SD0PID_SEVENFRM: u1,
    +                ///  SD1PID/SODDFRM
    +                SD1PID_SODDFRM: u1,
    +                ///  Endpoint disable
    +                EPD: u1,
    +                ///  Endpoint enable
    +                EPEN: u1,
    +            }),
    +            reserved840: [4]u8,
    +            ///  device out endpoint-2 interrupt flag register
    +            DOEP2INTF: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer finished
    +                TF: u1,
    +                ///  Endpoint disabled
    +                EPDIS: u1,
    +                reserved3: u1,
    +                ///  Setup phase finished
    +                STPF: u1,
    +                ///  Endpoint Rx FIFO overrun
    +                EPRXFOVR: u1,
    +                reserved6: u1,
    +                ///  Back-to-back SETUP packets
    +                BTBSTP: u1,
    +                padding: u25,
    +            }),
    +            reserved848: [4]u8,
    +            ///  device OUT endpoint-2 transfer length register
    +            DOEP2LEN: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer length
    +                TLEN: u19,
    +                ///  Packet count
    +                PCNT: u10,
    +                ///  SETUP packet count/Received data PID
    +                STPCNT_RXDPID: u2,
    +                padding: u1,
    +            }),
    +            reserved864: [12]u8,
    +            ///  device endpoint-3 control register
    +            DOEP3CTL: mmio.Mmio(packed struct(u32) {
    +                ///  maximum packet length
    +                MPL: u11,
    +                reserved15: u4,
    +                ///  Endpoint active
    +                EPACT: u1,
    +                ///  EOFRM/DPID
    +                EOFRM_DPID: u1,
    +                ///  NAK status
    +                NAKS: u1,
    +                ///  Endpoint type
    +                EPTYPE: u2,
    +                ///  Snoop mode
    +                SNOOP: u1,
    +                ///  STALL handshake
    +                STALL: u1,
    +                reserved26: u4,
    +                ///  Clear NAK
    +                CNAK: u1,
    +                ///  Set NAK
    +                SNAK: u1,
    +                ///  SD0PID/SEVENFRM
    +                SD0PID_SEVENFRM: u1,
    +                ///  SD1PID/SODDFRM
    +                SD1PID_SODDFRM: u1,
    +                ///  Endpoint disable
    +                EPD: u1,
    +                ///  Endpoint enable
    +                EPEN: u1,
    +            }),
    +            reserved872: [4]u8,
    +            ///  device out endpoint-3 interrupt flag register
    +            DOEP3INTF: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer finished
    +                TF: u1,
    +                ///  Endpoint disabled
    +                EPDIS: u1,
    +                reserved3: u1,
    +                ///  Setup phase finished
    +                STPF: u1,
    +                ///  Endpoint Rx FIFO overrun
    +                EPRXFOVR: u1,
    +                reserved6: u1,
    +                ///  Back-to-back SETUP packets
    +                BTBSTP: u1,
    +                padding: u25,
    +            }),
    +            reserved880: [4]u8,
    +            ///  device OUT endpoint-3 transfer length register
    +            DOEP3LEN: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer length
    +                TLEN: u19,
    +                ///  Packet count
    +                PCNT: u10,
    +                ///  SETUP packet count/Received data PID
    +                STPCNT_RXDPID: u2,
    +                padding: u1,
    +            }),
    +        };
    +
    +        ///  USB on the go full speed host
    +        pub const USBFS_HOST = extern struct {
    +            ///  host configuration register (HCTL)
    +            HCTL: mmio.Mmio(packed struct(u32) {
    +                ///  clock select for USB clock
    +                CLKSEL: u2,
    +                padding: u30,
    +            }),
    +            ///  Host frame interval register
    +            HFT: mmio.Mmio(packed struct(u32) {
    +                ///  Frame interval
    +                FRI: u16,
    +                padding: u16,
    +            }),
    +            ///  FS host frame number/frame time remaining register (HFINFR)
    +            HFINFR: mmio.Mmio(packed struct(u32) {
    +                ///  Frame number
    +                FRNUM: u16,
    +                ///  Frame remaining time
    +                FRT: u16,
    +            }),
    +            reserved16: [4]u8,
    +            ///  Host periodic transmit FIFO/queue status register (HPTFQSTAT)
    +            HPTFQSTAT: mmio.Mmio(packed struct(u32) {
    +                ///  Periodic transmit data FIFO space available
    +                PTXFS: u16,
    +                ///  Periodic transmit request queue space available
    +                PTXREQS: u8,
    +                ///  Top of the periodic transmit request queue
    +                PTXREQT: u8,
    +            }),
    +            ///  Host all channels interrupt register
    +            HACHINT: mmio.Mmio(packed struct(u32) {
    +                ///  Host all channel interrupts
    +                HACHINT: u8,
    +                padding: u24,
    +            }),
    +            ///  host all channels interrupt mask register
    +            HACHINTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Channel interrupt enable
    +                CINTEN: u8,
    +                padding: u24,
    +            }),
    +            reserved64: [36]u8,
    +            ///  Host port control and status register (USBFS_HPCS)
    +            HPCS: mmio.Mmio(packed struct(u32) {
    +                ///  Port connect status
    +                PCST: u1,
    +                ///  Port connect detected
    +                PCD: u1,
    +                ///  Port enable
    +                PE: u1,
    +                ///  Port enable/disable change
    +                PEDC: u1,
    +                reserved6: u2,
    +                ///  Port resume
    +                PREM: u1,
    +                ///  Port suspend
    +                PSP: u1,
    +                ///  Port reset
    +                PRST: u1,
    +                reserved10: u1,
    +                ///  Port line status
    +                PLST: u2,
    +                ///  Port power
    +                PP: u1,
    +                reserved17: u4,
    +                ///  Port speed
    +                PS: u2,
    +                padding: u13,
    +            }),
    +            reserved256: [188]u8,
    +            ///  host channel-0 characteristics register (HCH0CTL)
    +            HCH0CTL: mmio.Mmio(packed struct(u32) {
    +                ///  Maximum packet size
    +                MPL: u11,
    +                ///  Endpoint number
    +                EPNUM: u4,
    +                ///  Endpoint direction
    +                EPDIR: u1,
    +                reserved17: u1,
    +                ///  Low-speed device
    +                LSD: u1,
    +                ///  Endpoint type
    +                EPTYPE: u2,
    +                reserved22: u2,
    +                ///  Device address
    +                DAR: u7,
    +                ///  Odd frame
    +                ODDFRM: u1,
    +                ///  Channel disable
    +                CDIS: u1,
    +                ///  Channel enable
    +                CEN: u1,
    +            }),
    +            reserved264: [4]u8,
    +            ///  host channel-0 interrupt register (USBFS_HCHxINTF)
    +            HCH0INTF: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer finished
    +                TF: u1,
    +                ///  Channel halted
    +                CH: u1,
    +                reserved3: u1,
    +                ///  STALL response received interrupt
    +                STALL: u1,
    +                ///  NAK response received interrupt
    +                NAK: u1,
    +                ///  ACK response received/transmitted interrupt
    +                ACK: u1,
    +                reserved7: u1,
    +                ///  USB bus error
    +                USBER: u1,
    +                ///  Babble error
    +                BBER: u1,
    +                ///  Request queue overrun
    +                REQOVR: u1,
    +                ///  Data toggle error
    +                DTER: u1,
    +                padding: u21,
    +            }),
    +            ///  host channel-0 interrupt enable register (HCH0INTEN)
    +            HCH0INTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer completed interrupt enable
    +                TFIE: u1,
    +                ///  Channel halted interrupt enable
    +                CHIE: u1,
    +                reserved3: u1,
    +                ///  STALL interrupt enable
    +                STALLIE: u1,
    +                ///  NAK interrupt enable
    +                NAKIE: u1,
    +                ///  ACK interrupt enable
    +                ACKIE: u1,
    +                reserved7: u1,
    +                ///  USB bus error interrupt enable
    +                USBERIE: u1,
    +                ///  Babble error interrupt enable
    +                BBERIE: u1,
    +                ///  request queue overrun interrupt enable
    +                REQOVRIE: u1,
    +                ///  Data toggle error interrupt enable
    +                DTERIE: u1,
    +                padding: u21,
    +            }),
    +            ///  host channel-0 transfer length register
    +            HCH0LEN: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer length
    +                TLEN: u19,
    +                ///  Packet count
    +                PCNT: u10,
    +                ///  Data PID
    +                DPID: u2,
    +                padding: u1,
    +            }),
    +            reserved288: [12]u8,
    +            ///  host channel-1 characteristics register (HCH1CTL)
    +            HCH1CTL: mmio.Mmio(packed struct(u32) {
    +                ///  Maximum packet size
    +                MPL: u11,
    +                ///  Endpoint number
    +                EPNUM: u4,
    +                ///  Endpoint direction
    +                EPDIR: u1,
    +                reserved17: u1,
    +                ///  Low-speed device
    +                LSD: u1,
    +                ///  Endpoint type
    +                EPTYPE: u2,
    +                reserved22: u2,
    +                ///  Device address
    +                DAR: u7,
    +                ///  Odd frame
    +                ODDFRM: u1,
    +                ///  Channel disable
    +                CDIS: u1,
    +                ///  Channel enable
    +                CEN: u1,
    +            }),
    +            reserved296: [4]u8,
    +            ///  host channel-1 interrupt register (HCH1INTF)
    +            HCH1INTF: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer finished
    +                TF: u1,
    +                ///  Channel halted
    +                CH: u1,
    +                reserved3: u1,
    +                ///  STALL response received interrupt
    +                STALL: u1,
    +                ///  NAK response received interrupt
    +                NAK: u1,
    +                ///  ACK response received/transmitted interrupt
    +                ACK: u1,
    +                reserved7: u1,
    +                ///  USB bus error
    +                USBER: u1,
    +                ///  Babble error
    +                BBER: u1,
    +                ///  Request queue overrun
    +                REQOVR: u1,
    +                ///  Data toggle error
    +                DTER: u1,
    +                padding: u21,
    +            }),
    +            ///  host channel-1 interrupt enable register (HCH1INTEN)
    +            HCH1INTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer completed interrupt enable
    +                TFIE: u1,
    +                ///  Channel halted interrupt enable
    +                CHIE: u1,
    +                reserved3: u1,
    +                ///  STALL interrupt enable
    +                STALLIE: u1,
    +                ///  NAK interrupt enable
    +                NAKIE: u1,
    +                ///  ACK interrupt enable
    +                ACKIE: u1,
    +                reserved7: u1,
    +                ///  USB bus error interrupt enable
    +                USBERIE: u1,
    +                ///  Babble error interrupt enable
    +                BBERIE: u1,
    +                ///  request queue overrun interrupt enable
    +                REQOVRIE: u1,
    +                ///  Data toggle error interrupt enable
    +                DTERIE: u1,
    +                padding: u21,
    +            }),
    +            ///  host channel-1 transfer length register
    +            HCH1LEN: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer length
    +                TLEN: u19,
    +                ///  Packet count
    +                PCNT: u10,
    +                ///  Data PID
    +                DPID: u2,
    +                padding: u1,
    +            }),
    +            reserved320: [12]u8,
    +            ///  host channel-2 characteristics register (HCH2CTL)
    +            HCH2CTL: mmio.Mmio(packed struct(u32) {
    +                ///  Maximum packet size
    +                MPL: u11,
    +                ///  Endpoint number
    +                EPNUM: u4,
    +                ///  Endpoint direction
    +                EPDIR: u1,
    +                reserved17: u1,
    +                ///  Low-speed device
    +                LSD: u1,
    +                ///  Endpoint type
    +                EPTYPE: u2,
    +                reserved22: u2,
    +                ///  Device address
    +                DAR: u7,
    +                ///  Odd frame
    +                ODDFRM: u1,
    +                ///  Channel disable
    +                CDIS: u1,
    +                ///  Channel enable
    +                CEN: u1,
    +            }),
    +            reserved328: [4]u8,
    +            ///  host channel-2 interrupt register (HCH2INTF)
    +            HCH2INTF: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer finished
    +                TF: u1,
    +                ///  Channel halted
    +                CH: u1,
    +                reserved3: u1,
    +                ///  STALL response received interrupt
    +                STALL: u1,
    +                ///  NAK response received interrupt
    +                NAK: u1,
    +                ///  ACK response received/transmitted interrupt
    +                ACK: u1,
    +                reserved7: u1,
    +                ///  USB bus error
    +                USBER: u1,
    +                ///  Babble error
    +                BBER: u1,
    +                ///  Request queue overrun
    +                REQOVR: u1,
    +                ///  Data toggle error
    +                DTER: u1,
    +                padding: u21,
    +            }),
    +            ///  host channel-2 interrupt enable register (HCH2INTEN)
    +            HCH2INTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer completed interrupt enable
    +                TFIE: u1,
    +                ///  Channel halted interrupt enable
    +                CHIE: u1,
    +                reserved3: u1,
    +                ///  STALL interrupt enable
    +                STALLIE: u1,
    +                ///  NAK interrupt enable
    +                NAKIE: u1,
    +                ///  ACK interrupt enable
    +                ACKIE: u1,
    +                reserved7: u1,
    +                ///  USB bus error interrupt enable
    +                USBERIE: u1,
    +                ///  Babble error interrupt enable
    +                BBERIE: u1,
    +                ///  request queue overrun interrupt enable
    +                REQOVRIE: u1,
    +                ///  Data toggle error interrupt enable
    +                DTERIE: u1,
    +                padding: u21,
    +            }),
    +            ///  host channel-2 transfer length register
    +            HCH2LEN: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer length
    +                TLEN: u19,
    +                ///  Packet count
    +                PCNT: u10,
    +                ///  Data PID
    +                DPID: u2,
    +                padding: u1,
    +            }),
    +            reserved352: [12]u8,
    +            ///  host channel-3 characteristics register (HCH3CTL)
    +            HCH3CTL: mmio.Mmio(packed struct(u32) {
    +                ///  Maximum packet size
    +                MPL: u11,
    +                ///  Endpoint number
    +                EPNUM: u4,
    +                ///  Endpoint direction
    +                EPDIR: u1,
    +                reserved17: u1,
    +                ///  Low-speed device
    +                LSD: u1,
    +                ///  Endpoint type
    +                EPTYPE: u2,
    +                reserved22: u2,
    +                ///  Device address
    +                DAR: u7,
    +                ///  Odd frame
    +                ODDFRM: u1,
    +                ///  Channel disable
    +                CDIS: u1,
    +                ///  Channel enable
    +                CEN: u1,
    +            }),
    +            reserved360: [4]u8,
    +            ///  host channel-3 interrupt register (HCH3INTF)
    +            HCH3INTF: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer finished
    +                TF: u1,
    +                ///  Channel halted
    +                CH: u1,
    +                reserved3: u1,
    +                ///  STALL response received interrupt
    +                STALL: u1,
    +                ///  NAK response received interrupt
    +                NAK: u1,
    +                ///  ACK response received/transmitted interrupt
    +                ACK: u1,
    +                reserved7: u1,
    +                ///  USB bus error
    +                USBER: u1,
    +                ///  Babble error
    +                BBER: u1,
    +                ///  Request queue overrun
    +                REQOVR: u1,
    +                ///  Data toggle error
    +                DTER: u1,
    +                padding: u21,
    +            }),
    +            ///  host channel-3 interrupt enable register (HCH3INTEN)
    +            HCH3INTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer completed interrupt enable
    +                TFIE: u1,
    +                ///  Channel halted interrupt enable
    +                CHIE: u1,
    +                reserved3: u1,
    +                ///  STALL interrupt enable
    +                STALLIE: u1,
    +                ///  NAK interrupt enable
    +                NAKIE: u1,
    +                ///  ACK interrupt enable
    +                ACKIE: u1,
    +                reserved7: u1,
    +                ///  USB bus error interrupt enable
    +                USBERIE: u1,
    +                ///  Babble error interrupt enable
    +                BBERIE: u1,
    +                ///  request queue overrun interrupt enable
    +                REQOVRIE: u1,
    +                ///  Data toggle error interrupt enable
    +                DTERIE: u1,
    +                padding: u21,
    +            }),
    +            ///  host channel-3 transfer length register
    +            HCH3LEN: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer length
    +                TLEN: u19,
    +                ///  Packet count
    +                PCNT: u10,
    +                ///  Data PID
    +                DPID: u2,
    +                padding: u1,
    +            }),
    +            reserved384: [12]u8,
    +            ///  host channel-4 characteristics register (HCH4CTL)
    +            HCH4CTL: mmio.Mmio(packed struct(u32) {
    +                ///  Maximum packet size
    +                MPL: u11,
    +                ///  Endpoint number
    +                EPNUM: u4,
    +                ///  Endpoint direction
    +                EPDIR: u1,
    +                reserved17: u1,
    +                ///  Low-speed device
    +                LSD: u1,
    +                ///  Endpoint type
    +                EPTYPE: u2,
    +                reserved22: u2,
    +                ///  Device address
    +                DAR: u7,
    +                ///  Odd frame
    +                ODDFRM: u1,
    +                ///  Channel disable
    +                CDIS: u1,
    +                ///  Channel enable
    +                CEN: u1,
    +            }),
    +            reserved392: [4]u8,
    +            ///  host channel-4 interrupt register (HCH4INTF)
    +            HCH4INTF: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer finished
    +                TF: u1,
    +                ///  Channel halted
    +                CH: u1,
    +                reserved3: u1,
    +                ///  STALL response received interrupt
    +                STALL: u1,
    +                ///  NAK response received interrupt
    +                NAK: u1,
    +                ///  ACK response received/transmitted interrupt
    +                ACK: u1,
    +                reserved7: u1,
    +                ///  USB bus error
    +                USBER: u1,
    +                ///  Babble error
    +                BBER: u1,
    +                ///  Request queue overrun
    +                REQOVR: u1,
    +                ///  Data toggle error
    +                DTER: u1,
    +                padding: u21,
    +            }),
    +            ///  host channel-4 interrupt enable register (HCH4INTEN)
    +            HCH4INTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer completed interrupt enable
    +                TFIE: u1,
    +                ///  Channel halted interrupt enable
    +                CHIE: u1,
    +                reserved3: u1,
    +                ///  STALL interrupt enable
    +                STALLIE: u1,
    +                ///  NAK interrupt enable
    +                NAKIE: u1,
    +                ///  ACK interrupt enable
    +                ACKIE: u1,
    +                reserved7: u1,
    +                ///  USB bus error interrupt enable
    +                USBERIE: u1,
    +                ///  Babble error interrupt enable
    +                BBERIE: u1,
    +                ///  request queue overrun interrupt enable
    +                REQOVRIE: u1,
    +                ///  Data toggle error interrupt enable
    +                DTERIE: u1,
    +                padding: u21,
    +            }),
    +            ///  host channel-4 transfer length register
    +            HCH4LEN: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer length
    +                TLEN: u19,
    +                ///  Packet count
    +                PCNT: u10,
    +                ///  Data PID
    +                DPID: u2,
    +                padding: u1,
    +            }),
    +            reserved416: [12]u8,
    +            ///  host channel-5 characteristics register (HCH5CTL)
    +            HCH5CTL: mmio.Mmio(packed struct(u32) {
    +                ///  Maximum packet size
    +                MPL: u11,
    +                ///  Endpoint number
    +                EPNUM: u4,
    +                ///  Endpoint direction
    +                EPDIR: u1,
    +                reserved17: u1,
    +                ///  Low-speed device
    +                LSD: u1,
    +                ///  Endpoint type
    +                EPTYPE: u2,
    +                reserved22: u2,
    +                ///  Device address
    +                DAR: u7,
    +                ///  Odd frame
    +                ODDFRM: u1,
    +                ///  Channel disable
    +                CDIS: u1,
    +                ///  Channel enable
    +                CEN: u1,
    +            }),
    +            reserved424: [4]u8,
    +            ///  host channel-5 interrupt register (HCH5INTF)
    +            HCH5INTF: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer finished
    +                TF: u1,
    +                ///  Channel halted
    +                CH: u1,
    +                reserved3: u1,
    +                ///  STALL response received interrupt
    +                STALL: u1,
    +                ///  NAK response received interrupt
    +                NAK: u1,
    +                ///  ACK response received/transmitted interrupt
    +                ACK: u1,
    +                reserved7: u1,
    +                ///  USB bus error
    +                USBER: u1,
    +                ///  Babble error
    +                BBER: u1,
    +                ///  Request queue overrun
    +                REQOVR: u1,
    +                ///  Data toggle error
    +                DTER: u1,
    +                padding: u21,
    +            }),
    +            ///  host channel-5 interrupt enable register (HCH5INTEN)
    +            HCH5INTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer completed interrupt enable
    +                TFIE: u1,
    +                ///  Channel halted interrupt enable
    +                CHIE: u1,
    +                reserved3: u1,
    +                ///  STALL interrupt enable
    +                STALLIE: u1,
    +                ///  NAK interrupt enable
    +                NAKIE: u1,
    +                ///  ACK interrupt enable
    +                ACKIE: u1,
    +                reserved7: u1,
    +                ///  USB bus error interrupt enable
    +                USBERIE: u1,
    +                ///  Babble error interrupt enable
    +                BBERIE: u1,
    +                ///  request queue overrun interrupt enable
    +                REQOVRIE: u1,
    +                ///  Data toggle error interrupt enable
    +                DTERIE: u1,
    +                padding: u21,
    +            }),
    +            ///  host channel-5 transfer length register
    +            HCH5LEN: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer length
    +                TLEN: u19,
    +                ///  Packet count
    +                PCNT: u10,
    +                ///  Data PID
    +                DPID: u2,
    +                padding: u1,
    +            }),
    +            reserved448: [12]u8,
    +            ///  host channel-6 characteristics register (HCH6CTL)
    +            HCH6CTL: mmio.Mmio(packed struct(u32) {
    +                ///  Maximum packet size
    +                MPL: u11,
    +                ///  Endpoint number
    +                EPNUM: u4,
    +                ///  Endpoint direction
    +                EPDIR: u1,
    +                reserved17: u1,
    +                ///  Low-speed device
    +                LSD: u1,
    +                ///  Endpoint type
    +                EPTYPE: u2,
    +                reserved22: u2,
    +                ///  Device address
    +                DAR: u7,
    +                ///  Odd frame
    +                ODDFRM: u1,
    +                ///  Channel disable
    +                CDIS: u1,
    +                ///  Channel enable
    +                CEN: u1,
    +            }),
    +            reserved456: [4]u8,
    +            ///  host channel-6 interrupt register (HCH6INTF)
    +            HCH6INTF: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer finished
    +                TF: u1,
    +                ///  Channel halted
    +                CH: u1,
    +                reserved3: u1,
    +                ///  STALL response received interrupt
    +                STALL: u1,
    +                ///  NAK response received interrupt
    +                NAK: u1,
    +                ///  ACK response received/transmitted interrupt
    +                ACK: u1,
    +                reserved7: u1,
    +                ///  USB bus error
    +                USBER: u1,
    +                ///  Babble error
    +                BBER: u1,
    +                ///  Request queue overrun
    +                REQOVR: u1,
    +                ///  Data toggle error
    +                DTER: u1,
    +                padding: u21,
    +            }),
    +            ///  host channel-6 interrupt enable register (HCH6INTEN)
    +            HCH6INTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer completed interrupt enable
    +                TFIE: u1,
    +                ///  Channel halted interrupt enable
    +                CHIE: u1,
    +                reserved3: u1,
    +                ///  STALL interrupt enable
    +                STALLIE: u1,
    +                ///  NAK interrupt enable
    +                NAKIE: u1,
    +                ///  ACK interrupt enable
    +                ACKIE: u1,
    +                reserved7: u1,
    +                ///  USB bus error interrupt enable
    +                USBERIE: u1,
    +                ///  Babble error interrupt enable
    +                BBERIE: u1,
    +                ///  request queue overrun interrupt enable
    +                REQOVRIE: u1,
    +                ///  Data toggle error interrupt enable
    +                DTERIE: u1,
    +                padding: u21,
    +            }),
    +            ///  host channel-6 transfer length register
    +            HCH6LEN: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer length
    +                TLEN: u19,
    +                ///  Packet count
    +                PCNT: u10,
    +                ///  Data PID
    +                DPID: u2,
    +                padding: u1,
    +            }),
    +            reserved480: [12]u8,
    +            ///  host channel-7 characteristics register (HCH7CTL)
    +            HCH7CTL: mmio.Mmio(packed struct(u32) {
    +                ///  Maximum packet size
    +                MPL: u11,
    +                ///  Endpoint number
    +                EPNUM: u4,
    +                ///  Endpoint direction
    +                EPDIR: u1,
    +                reserved17: u1,
    +                ///  Low-speed device
    +                LSD: u1,
    +                ///  Endpoint type
    +                EPTYPE: u2,
    +                reserved22: u2,
    +                ///  Device address
    +                DAR: u7,
    +                ///  Odd frame
    +                ODDFRM: u1,
    +                ///  Channel disable
    +                CDIS: u1,
    +                ///  Channel enable
    +                CEN: u1,
    +            }),
    +            reserved488: [4]u8,
    +            ///  host channel-7 interrupt register (HCH7INTF)
    +            HCH7INTF: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer finished
    +                TF: u1,
    +                ///  Channel halted
    +                CH: u1,
    +                reserved3: u1,
    +                ///  STALL response received interrupt
    +                STALL: u1,
    +                ///  NAK response received interrupt
    +                NAK: u1,
    +                ///  ACK response received/transmitted interrupt
    +                ACK: u1,
    +                reserved7: u1,
    +                ///  USB bus error
    +                USBER: u1,
    +                ///  Babble error
    +                BBER: u1,
    +                ///  Request queue overrun
    +                REQOVR: u1,
    +                ///  Data toggle error
    +                DTER: u1,
    +                padding: u21,
    +            }),
    +            ///  host channel-7 interrupt enable register (HCH7INTEN)
    +            HCH7INTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer completed interrupt enable
    +                TFIE: u1,
    +                ///  Channel halted interrupt enable
    +                CHIE: u1,
    +                reserved3: u1,
    +                ///  STALL interrupt enable
    +                STALLIE: u1,
    +                ///  NAK interrupt enable
    +                NAKIE: u1,
    +                ///  ACK interrupt enable
    +                ACKIE: u1,
    +                reserved7: u1,
    +                ///  USB bus error interrupt enable
    +                USBERIE: u1,
    +                ///  Babble error interrupt enable
    +                BBERIE: u1,
    +                ///  request queue overrun interrupt enable
    +                REQOVRIE: u1,
    +                ///  Data toggle error interrupt enable
    +                DTERIE: u1,
    +                padding: u21,
    +            }),
    +            ///  host channel-7 transfer length register
    +            HCH7LEN: mmio.Mmio(packed struct(u32) {
    +                ///  Transfer length
    +                TLEN: u19,
    +                ///  Packet count
    +                PCNT: u10,
    +                ///  Data PID
    +                DPID: u2,
    +                padding: u1,
    +            }),
    +        };
    +
    +        ///  USB full speed global registers
    +        pub const USBFS_GLOBAL = extern struct {
    +            ///  Global OTG control and status register (USBFS_GOTGCS)
    +            GOTGCS: mmio.Mmio(packed struct(u32) {
    +                ///  SRP success
    +                SRPS: u1,
    +                ///  SRP request
    +                SRPREQ: u1,
    +                reserved8: u6,
    +                ///  Host success
    +                HNPS: u1,
    +                ///  HNP request
    +                HNPREQ: u1,
    +                ///  Host HNP enable
    +                HHNPEN: u1,
    +                ///  Device HNP enabled
    +                DHNPEN: u1,
    +                reserved16: u4,
    +                ///  ID pin status
    +                IDPS: u1,
    +                ///  Debounce interval
    +                DI: u1,
    +                ///  A-session valid
    +                ASV: u1,
    +                ///  B-session valid
    +                BSV: u1,
    +                padding: u12,
    +            }),
    +            ///  Global OTG interrupt flag register (USBFS_GOTGINTF)
    +            GOTGINTF: mmio.Mmio(packed struct(u32) {
    +                reserved2: u2,
    +                ///  Session end
    +                SESEND: u1,
    +                reserved8: u5,
    +                ///  Session request success status change
    +                SRPEND: u1,
    +                ///  HNP end
    +                HNPEND: u1,
    +                reserved17: u7,
    +                ///  Host negotiation request detected
    +                HNPDET: u1,
    +                ///  A-device timeout
    +                ADTO: u1,
    +                ///  Debounce finish
    +                DF: u1,
    +                padding: u12,
    +            }),
    +            ///  Global AHB control and status register (USBFS_GAHBCS)
    +            GAHBCS: mmio.Mmio(packed struct(u32) {
    +                ///  Global interrupt enable
    +                GINTEN: u1,
    +                reserved7: u6,
    +                ///  Tx FIFO threshold
    +                TXFTH: u1,
    +                ///  Periodic Tx FIFO threshold
    +                PTXFTH: u1,
    +                padding: u23,
    +            }),
    +            ///  Global USB control and status register (USBFS_GUSBCSR)
    +            GUSBCS: mmio.Mmio(packed struct(u32) {
    +                ///  Timeout calibration
    +                TOC: u3,
    +                reserved8: u5,
    +                ///  SRP capability enable
    +                SRPCEN: u1,
    +                ///  HNP capability enable
    +                HNPCEN: u1,
    +                ///  USB turnaround time
    +                UTT: u4,
    +                reserved29: u15,
    +                ///  Force host mode
    +                FHM: u1,
    +                ///  Force device mode
    +                FDM: u1,
    +                padding: u1,
    +            }),
    +            ///  Global reset control register (USBFS_GRSTCTL)
    +            GRSTCTL: mmio.Mmio(packed struct(u32) {
    +                ///  Core soft reset
    +                CSRST: u1,
    +                ///  HCLK soft reset
    +                HCSRST: u1,
    +                ///  Host frame counter reset
    +                HFCRST: u1,
    +                reserved4: u1,
    +                ///  RxFIFO flush
    +                RXFF: u1,
    +                ///  TxFIFO flush
    +                TXFF: u1,
    +                ///  TxFIFO number
    +                TXFNUM: u5,
    +                padding: u21,
    +            }),
    +            ///  Global interrupt flag register (USBFS_GINTF)
    +            GINTF: mmio.Mmio(packed struct(u32) {
    +                ///  Current operation mode
    +                COPM: u1,
    +                ///  Mode fault interrupt flag
    +                MFIF: u1,
    +                ///  OTG interrupt flag
    +                OTGIF: u1,
    +                ///  Start of frame
    +                SOF: u1,
    +                ///  RxFIFO non-empty interrupt flag
    +                RXFNEIF: u1,
    +                ///  Non-periodic TxFIFO empty interrupt flag
    +                NPTXFEIF: u1,
    +                ///  Global Non-Periodic IN NAK effective
    +                GNPINAK: u1,
    +                ///  Global OUT NAK effective
    +                GONAK: u1,
    +                reserved10: u2,
    +                ///  Early suspend
    +                ESP: u1,
    +                ///  USB suspend
    +                SP: u1,
    +                ///  USB reset
    +                RST: u1,
    +                ///  Enumeration finished
    +                ENUMF: u1,
    +                ///  Isochronous OUT packet dropped interrupt
    +                ISOOPDIF: u1,
    +                ///  End of periodic frame interrupt flag
    +                EOPFIF: u1,
    +                reserved18: u2,
    +                ///  IN endpoint interrupt flag
    +                IEPIF: u1,
    +                ///  OUT endpoint interrupt flag
    +                OEPIF: u1,
    +                ///  Isochronous IN transfer Not Complete Interrupt Flag
    +                ISOINCIF: u1,
    +                ///  periodic transfer not complete interrupt flag(Host mode)/isochronous OUT transfer not complete interrupt flag(Device mode)
    +                PXNCIF_ISOONCIF: u1,
    +                reserved24: u2,
    +                ///  Host port interrupt flag
    +                HPIF: u1,
    +                ///  Host channels interrupt flag
    +                HCIF: u1,
    +                ///  Periodic TxFIFO empty interrupt flag
    +                PTXFEIF: u1,
    +                reserved28: u1,
    +                ///  ID pin status change
    +                IDPSC: u1,
    +                ///  Disconnect interrupt flag
    +                DISCIF: u1,
    +                ///  Session interrupt flag
    +                SESIF: u1,
    +                ///  Wakeup interrupt flag
    +                WKUPIF: u1,
    +            }),
    +            ///  Global interrupt enable register (USBFS_GINTEN)
    +            GINTEN: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Mode fault interrupt enable
    +                MFIE: u1,
    +                ///  OTG interrupt enable
    +                OTGIE: u1,
    +                ///  Start of frame interrupt enable
    +                SOFIE: u1,
    +                ///  Receive FIFO non-empty interrupt enable
    +                RXFNEIE: u1,
    +                ///  Non-periodic TxFIFO empty interrupt enable
    +                NPTXFEIE: u1,
    +                ///  Global non-periodic IN NAK effective interrupt enable
    +                GNPINAKIE: u1,
    +                ///  Global OUT NAK effective interrupt enable
    +                GONAKIE: u1,
    +                reserved10: u2,
    +                ///  Early suspend interrupt enable
    +                ESPIE: u1,
    +                ///  USB suspend interrupt enable
    +                SPIE: u1,
    +                ///  USB reset interrupt enable
    +                RSTIE: u1,
    +                ///  Enumeration finish interrupt enable
    +                ENUMFIE: u1,
    +                ///  Isochronous OUT packet dropped interrupt enable
    +                ISOOPDIE: u1,
    +                ///  End of periodic frame interrupt enable
    +                EOPFIE: u1,
    +                reserved18: u2,
    +                ///  IN endpoints interrupt enable
    +                IEPIE: u1,
    +                ///  OUT endpoints interrupt enable
    +                OEPIE: u1,
    +                ///  isochronous IN transfer not complete interrupt enable
    +                ISOINCIE: u1,
    +                ///  periodic transfer not compelete Interrupt enable(Host mode)/isochronous OUT transfer not complete interrupt enable(Device mode)
    +                PXNCIE_ISOONCIE: u1,
    +                reserved24: u2,
    +                ///  Host port interrupt enable
    +                HPIE: u1,
    +                ///  Host channels interrupt enable
    +                HCIE: u1,
    +                ///  Periodic TxFIFO empty interrupt enable
    +                PTXFEIE: u1,
    +                reserved28: u1,
    +                ///  ID pin status change interrupt enable
    +                IDPSCIE: u1,
    +                ///  Disconnect interrupt enable
    +                DISCIE: u1,
    +                ///  Session interrupt enable
    +                SESIE: u1,
    +                ///  Wakeup interrupt enable
    +                WKUPIE: u1,
    +            }),
    +            ///  Global Receive status read(Device mode)
    +            GRSTATR_Device: mmio.Mmio(packed struct(u32) {
    +                ///  Endpoint number
    +                EPNUM: u4,
    +                ///  Byte count
    +                BCOUNT: u11,
    +                ///  Data PID
    +                DPID: u2,
    +                ///  Recieve packet status
    +                RPCKST: u4,
    +                padding: u11,
    +            }),
    +            ///  Global Receive status pop(Device mode)
    +            GRSTATP_Device: mmio.Mmio(packed struct(u32) {
    +                ///  Endpoint number
    +                EPNUM: u4,
    +                ///  Byte count
    +                BCOUNT: u11,
    +                ///  Data PID
    +                DPID: u2,
    +                ///  Recieve packet status
    +                RPCKST: u4,
    +                padding: u11,
    +            }),
    +            ///  Global Receive FIFO size register (USBFS_GRFLEN)
    +            GRFLEN: mmio.Mmio(packed struct(u32) {
    +                ///  Rx FIFO depth
    +                RXFD: u16,
    +                padding: u16,
    +            }),
    +            ///  Host non-periodic transmit FIFO length register (Host mode)
    +            HNPTFLEN: mmio.Mmio(packed struct(u32) {
    +                ///  host non-periodic transmit Tx RAM start address
    +                HNPTXRSAR: u16,
    +                ///  host non-periodic TxFIFO depth
    +                HNPTXFD: u16,
    +            }),
    +            ///  Host non-periodic transmit FIFO/queue status register (HNPTFQSTAT)
    +            HNPTFQSTAT: mmio.Mmio(packed struct(u32) {
    +                ///  Non-periodic TxFIFO space
    +                NPTXFS: u16,
    +                ///  Non-periodic transmit request queue space
    +                NPTXRQS: u8,
    +                ///  Top of the non-periodic transmit request queue
    +                NPTXRQTOP: u7,
    +                padding: u1,
    +            }),
    +            reserved56: [8]u8,
    +            ///  Global core configuration register (USBFS_GCCFG)
    +            GCCFG: mmio.Mmio(packed struct(u32) {
    +                reserved16: u16,
    +                ///  Power on
    +                PWRON: u1,
    +                reserved18: u1,
    +                ///  The VBUS A-device Comparer enable
    +                VBUSACEN: u1,
    +                ///  The VBUS B-device Comparer enable
    +                VBUSBCEN: u1,
    +                ///  SOF output enable
    +                SOFOEN: u1,
    +                ///  VBUS ignored
    +                VBUSIG: u1,
    +                padding: u10,
    +            }),
    +            ///  core ID register
    +            CID: mmio.Mmio(packed struct(u32) {
    +                ///  Core ID
    +                CID: u32,
    +            }),
    +            reserved256: [192]u8,
    +            ///  Host periodic transmit FIFO length register (HPTFLEN)
    +            HPTFLEN: mmio.Mmio(packed struct(u32) {
    +                ///  Host periodic TxFIFO start address
    +                HPTXFSAR: u16,
    +                ///  Host periodic TxFIFO depth
    +                HPTXFD: u16,
    +            }),
    +            ///  device IN endpoint transmit FIFO size register (DIEP1TFLEN)
    +            DIEP1TFLEN: mmio.Mmio(packed struct(u32) {
    +                ///  IN endpoint FIFO transmit RAM start address
    +                IEPTXRSAR: u16,
    +                ///  IN endpoint TxFIFO depth
    +                IEPTXFD: u16,
    +            }),
    +            ///  device IN endpoint transmit FIFO size register (DIEP2TFLEN)
    +            DIEP2TFLEN: mmio.Mmio(packed struct(u32) {
    +                ///  IN endpoint FIFO transmit RAM start address
    +                IEPTXRSAR: u16,
    +                ///  IN endpoint TxFIFO depth
    +                IEPTXFD: u16,
    +            }),
    +            ///  device IN endpoint transmit FIFO size register (FS_DIEP3TXFLEN)
    +            DIEP3TFLEN: mmio.Mmio(packed struct(u32) {
    +                ///  IN endpoint FIFO4 transmit RAM start address
    +                IEPTXRSAR: u16,
    +                ///  IN endpoint TxFIFO depth
    +                IEPTXFD: u16,
    +            }),
    +        };
    +
    +        ///  Inter integrated circuit
    +        pub const I2C0 = extern struct {
    +            ///  Control register 0
    +            CTL0: mmio.Mmio(packed struct(u16) {
    +                ///  I2C peripheral enable
    +                I2CEN: u1,
    +                ///  SMBus/I2C mode switch
    +                SMBEN: u1,
    +                reserved3: u1,
    +                ///  SMBusType Selection
    +                SMBSEL: u1,
    +                ///  ARP protocol in SMBus switch
    +                ARPEN: u1,
    +                ///  PEC Calculation Switch
    +                PECEN: u1,
    +                ///  Whether or not to response to a General Call (0x00)
    +                GCEN: u1,
    +                ///  Whether to stretch SCL low when data is not ready in slave mode
    +                SS: u1,
    +                ///  Generate a START condition on I2C bus
    +                START: u1,
    +                ///  Generate a STOP condition on I2C bus
    +                STOP: u1,
    +                ///  Whether or not to send an ACK
    +                ACKEN: u1,
    +                ///  Position of ACK and PEC when receiving
    +                POAP: u1,
    +                ///  PEC Transfer
    +                PECTRANS: u1,
    +                ///  SMBus alert
    +                SALT: u1,
    +                reserved15: u1,
    +                ///  Software reset
    +                SRESET: u1,
    +            }),
    +            reserved4: [2]u8,
    +            ///  Control register 1
    +            CTL1: mmio.Mmio(packed struct(u16) {
    +                ///  I2C Peripheral clock frequency
    +                I2CCLK: u6,
    +                reserved8: u2,
    +                ///  Error interrupt enable
    +                ERRIE: u1,
    +                ///  Event interrupt enable
    +                EVIE: u1,
    +                ///  Buffer interrupt enable
    +                BUFIE: u1,
    +                ///  DMA mode switch
    +                DMAON: u1,
    +                ///  Flag indicating DMA last transfer
    +                DMALST: u1,
    +                padding: u3,
    +            }),
    +            reserved8: [2]u8,
    +            ///  Slave address register 0
    +            SADDR0: mmio.Mmio(packed struct(u16) {
    +                ///  Bit 0 of a 10-bit address
    +                ADDRESS0: u1,
    +                ///  7-bit address or bits 7:1 of a 10-bit address
    +                ADDRESS7_1: u7,
    +                ///  Highest two bits of a 10-bit address
    +                ADDRESS9_8: u2,
    +                reserved15: u5,
    +                ///  Address mode for the I2C slave
    +                ADDFORMAT: u1,
    +            }),
    +            reserved12: [2]u8,
    +            ///  Slave address register 1
    +            SADDR1: mmio.Mmio(packed struct(u16) {
    +                ///  Dual-Address mode switch
    +                DUADEN: u1,
    +                ///  Second I2C address for the slave in Dual-Address mode
    +                ADDRESS2: u7,
    +                padding: u8,
    +            }),
    +            reserved16: [2]u8,
    +            ///  Transfer buffer register
    +            DATA: mmio.Mmio(packed struct(u16) {
    +                ///  Transmission or reception data buffer register
    +                TRB: u8,
    +                padding: u8,
    +            }),
    +            reserved20: [2]u8,
    +            ///  Transfer status register 0
    +            STAT0: mmio.Mmio(packed struct(u16) {
    +                ///  START condition sent out in master mode
    +                SBSEND: u1,
    +                ///  Address is sent in master mode or received and matches in slave mode
    +                ADDSEND: u1,
    +                ///  Byte transmission completed
    +                BTC: u1,
    +                ///  Header of 10-bit address is sent in master mode
    +                ADD10SEND: u1,
    +                ///  STOP condition detected in slave mode
    +                STPDET: u1,
    +                reserved6: u1,
    +                ///  I2C_DATA is not Empty during receiving
    +                RBNE: u1,
    +                ///  I2C_DATA is Empty during transmitting
    +                TBE: u1,
    +                ///  A bus error occurs indication a unexpected START or STOP condition on I2C bus
    +                BERR: u1,
    +                ///  Arbitration Lost in master mode
    +                LOSTARB: u1,
    +                ///  Acknowledge error
    +                AERR: u1,
    +                ///  Over-run or under-run situation occurs in slave mode
    +                OUERR: u1,
    +                ///  PEC error when receiving data
    +                PECERR: u1,
    +                reserved14: u1,
    +                ///  Timeout signal in SMBus mode
    +                SMBTO: u1,
    +                ///  SMBus Alert status
    +                SMBALT: u1,
    +            }),
    +            reserved24: [2]u8,
    +            ///  Transfer status register 1
    +            STAT1: mmio.Mmio(packed struct(u16) {
    +                ///  A flag indicating whether I2C block is in master or slave mode
    +                MASTER: u1,
    +                ///  Busy flag
    +                I2CBSY: u1,
    +                ///  Whether the I2C is a transmitter or a receiver
    +                TR: u1,
    +                reserved4: u1,
    +                ///  General call address (00h) received
    +                RXGC: u1,
    +                ///  Default address of SMBusDevice
    +                DEFSMB: u1,
    +                ///  SMBus Host Header detected in slave mode
    +                HSTSMB: u1,
    +                ///  Dual Flag in slave mode
    +                DUMODF: u1,
    +                ///  Packet Error Checking Value that calculated by hardware when PEC is enabled
    +                PECV: u8,
    +            }),
    +            reserved28: [2]u8,
    +            ///  Clock configure register
    +            CKCFG: mmio.Mmio(packed struct(u16) {
    +                ///  I2C Clock control in master mode
    +                CLKC: u12,
    +                reserved14: u2,
    +                ///  Duty cycle in fast mode
    +                DTCY: u1,
    +                ///  I2C speed selection in master mode
    +                FAST: u1,
    +            }),
    +            reserved32: [2]u8,
    +            ///  Rise time register
    +            RT: mmio.Mmio(packed struct(u16) {
    +                ///  Maximum rise time in master mode
    +                RISETIME: u6,
    +                padding: u10,
    +            }),
    +        };
    +
    +        ///  Basic-timers
    +        pub const TIMER5 = extern struct {
    +            ///  control register 0
    +            CTL0: mmio.Mmio(packed struct(u16) {
    +                ///  Counter enable
    +                CEN: u1,
    +                ///  Update disable
    +                UPDIS: u1,
    +                ///  Update source
    +                UPS: u1,
    +                ///  Single pulse mode
    +                SPM: u1,
    +                reserved7: u3,
    +                ///  Auto-reload shadow enable
    +                ARSE: u1,
    +                padding: u8,
    +            }),
    +            reserved4: [2]u8,
    +            ///  control register 1
    +            CTL1: mmio.Mmio(packed struct(u16) {
    +                reserved4: u4,
    +                ///  Master mode control
    +                MMC: u3,
    +                padding: u9,
    +            }),
    +            reserved12: [6]u8,
    +            ///  DMA/Interrupt enable register
    +            DMAINTEN: mmio.Mmio(packed struct(u16) {
    +                ///  Update interrupt enable
    +                UPIE: u1,
    +                reserved8: u7,
    +                ///  Update DMA request enable
    +                UPDEN: u1,
    +                padding: u7,
    +            }),
    +            reserved16: [2]u8,
    +            ///  Interrupt flag register
    +            INTF: mmio.Mmio(packed struct(u16) {
    +                ///  Update interrupt flag
    +                UPIF: u1,
    +                padding: u15,
    +            }),
    +            reserved20: [2]u8,
    +            ///  event generation register
    +            SWEVG: mmio.Mmio(packed struct(u16) {
    +                ///  Update generation
    +                UPG: u1,
    +                padding: u15,
    +            }),
    +            reserved36: [14]u8,
    +            ///  Counter register
    +            CNT: mmio.Mmio(packed struct(u16) {
    +                ///  Low counter value
    +                CNT: u16,
    +            }),
    +            reserved40: [2]u8,
    +            ///  Prescaler register
    +            PSC: mmio.Mmio(packed struct(u16) {
    +                ///  Prescaler value of the counter clock
    +                PSC: u16,
    +            }),
    +            reserved44: [2]u8,
    +            ///  Counter auto reload register
    +            CAR: mmio.Mmio(packed struct(u16) {
    +                ///  Counter auto reload value
    +                CARL: u16,
    +            }),
    +        };
    +
    +        ///  Enhanced Core Local Interrupt Controller
    +        pub const ECLIC = extern struct {
    +            ///  cliccfg Register
    +            CLICCFG: mmio.Mmio(packed struct(u8) {
    +                reserved1: u1,
    +                ///  NLBITS
    +                NLBITS: u4,
    +                padding: u3,
    +            }),
    +            reserved4: [3]u8,
    +            ///  clicinfo Register
    +            CLICINFO: mmio.Mmio(packed struct(u32) {
    +                ///  NUM_INTERRUPT
    +                NUM_INTERRUPT: u13,
    +                ///  VERSION
    +                VERSION: u8,
    +                ///  CLICINTCTLBITS
    +                CLICINTCTLBITS: u4,
    +                padding: u7,
    +            }),
    +            reserved11: [3]u8,
    +            ///  MTH Register
    +            MTH: mmio.Mmio(packed struct(u8) {
    +                ///  MTH
    +                MTH: u8,
    +            }),
    +            reserved4096: [4084]u8,
    +            ///  clicintip Register
    +            CLICINTIP_0: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_0: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_0: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_0: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_1: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_1: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_1: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_1: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_2: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_2: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_2: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_2: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_3: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_3: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_3: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_3: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_4: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_4: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_4: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_4: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_5: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_5: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_5: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_5: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_6: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_6: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_6: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_6: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_7: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_7: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_7: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_7: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_8: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_8: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_8: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_8: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_9: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_9: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_9: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_9: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_10: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_10: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_10: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_10: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_11: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_11: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_11: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_11: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_12: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_12: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_12: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_12: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_13: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_13: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_13: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_13: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_14: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_14: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_14: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_14: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_15: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_15: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_15: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_15: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_16: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_16: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_16: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_16: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_17: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_17: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_17: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_17: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_18: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_18: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_18: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_18: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_19: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_19: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_19: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_19: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_20: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_20: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_20: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_20: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_21: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_21: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_21: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_21: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_22: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_22: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_22: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_22: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_23: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_23: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_23: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_23: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_24: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_24: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_24: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_24: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_25: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_25: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_25: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_25: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_26: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_26: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_26: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_26: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_27: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_27: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_27: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_27: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_28: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_28: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_28: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_28: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_29: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_29: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_29: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_29: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_30: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_30: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_30: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_30: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_31: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_31: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_31: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_31: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_32: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_32: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_32: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_32: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_33: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_33: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_33: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_33: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_34: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_34: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_34: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_34: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_35: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_35: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_35: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_35: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_36: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_36: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_36: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_36: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_37: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_37: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_37: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_37: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_38: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_38: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_38: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_38: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_39: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_39: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_39: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_39: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_40: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_40: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_40: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_40: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_41: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_41: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_41: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_41: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_42: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_42: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_42: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_42: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_43: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_43: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_43: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_43: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_44: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_44: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_44: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_44: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_45: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_45: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_45: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_45: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_46: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_46: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_46: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_46: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_47: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_47: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_47: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_47: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_48: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_48: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_48: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_48: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_49: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_49: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_49: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_49: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_50: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_50: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_50: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_50: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_51: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_51: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_51: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_51: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_52: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_52: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_52: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_52: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_53: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_53: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_53: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_53: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_54: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_54: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_54: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_54: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_55: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_55: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_55: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_55: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_56: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_56: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_56: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_56: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_57: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_57: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_57: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_57: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_58: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_58: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_58: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_58: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_59: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_59: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_59: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_59: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_60: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_60: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_60: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_60: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_61: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_61: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_61: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_61: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_62: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_62: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_62: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_62: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_63: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_63: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_63: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_63: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_64: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_64: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_64: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_64: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_65: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_65: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_65: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_65: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_66: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_66: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_66: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_66: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_67: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_67: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_67: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_67: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_68: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_68: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_68: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_68: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_69: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_69: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_69: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_69: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_70: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_70: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_70: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_70: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_71: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_71: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_71: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_71: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_72: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_72: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_72: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_72: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_73: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_73: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_73: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_73: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_74: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_74: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_74: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_74: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_75: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_75: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_75: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_75: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_76: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_76: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_76: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_76: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_77: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_77: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_77: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_77: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_78: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_78: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_78: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_78: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_79: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_79: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_79: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_79: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_80: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_80: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_80: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_80: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_81: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_81: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_81: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_81: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_82: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_82: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_82: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_82: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_83: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_83: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_83: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_83: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_84: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_84: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_84: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_84: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            reserved4437: [1]u8,
    +            ///  clicintie Register
    +            CLICINTIE_85: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_85: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_85: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_85: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintie Register
    +            CLICINTIE_86: mmio.Mmio(packed struct(u8) {
    +                ///  IE
    +                IE: u1,
    +                padding: u7,
    +            }),
    +            ///  clicintattr Register
    +            CLICINTATTR_86: mmio.Mmio(packed struct(u8) {
    +                ///  SHV
    +                SHV: u1,
    +                ///  TRIG
    +                TRIG: u2,
    +                padding: u5,
    +            }),
    +            ///  clicintctl Register
    +            CLICINTCTL_86: mmio.Mmio(packed struct(u8) {
    +                ///  LEVEL_PRIORITY
    +                LEVEL_PRIORITY: u8,
    +            }),
    +            ///  clicintip Register
    +            CLICINTIP_86: mmio.Mmio(packed struct(u8) {
    +                ///  IP
    +                IP: u1,
    +                padding: u7,
    +            }),
    +        };
    +
    +        ///  Power management unit
    +        pub const PMU = extern struct {
    +            ///  power control register
    +            CTL: mmio.Mmio(packed struct(u32) {
    +                ///  LDO Low Power Mode
    +                LDOLP: u1,
    +                ///  Standby Mode
    +                STBMOD: u1,
    +                ///  Wakeup Flag Reset
    +                WURST: u1,
    +                ///  Standby Flag Reset
    +                STBRST: u1,
    +                ///  Low Voltage Detector Enable
    +                LVDEN: u1,
    +                ///  Low Voltage Detector Threshold
    +                LVDT: u3,
    +                ///  Backup Domain Write Enable
    +                BKPWEN: u1,
    +                padding: u23,
    +            }),
    +            ///  power control/status register
    +            CS: mmio.Mmio(packed struct(u32) {
    +                ///  Wakeup flag
    +                WUF: u1,
    +                ///  Standby flag
    +                STBF: u1,
    +                ///  Low Voltage Detector Status Flag
    +                LVDF: u1,
    +                reserved8: u5,
    +                ///  Enable WKUP pin
    +                WUPEN: u1,
    +                padding: u23,
    +            }),
    +        };
    +
    +        ///  Reset and clock unit
    +        pub const RCU = extern struct {
    +            ///  Control register
    +            CTL: mmio.Mmio(packed struct(u32) {
    +                ///  Internal 8MHz RC oscillator Enable
    +                IRC8MEN: u1,
    +                ///  IRC8M Internal 8MHz RC Oscillator stabilization Flag
    +                IRC8MSTB: u1,
    +                reserved3: u1,
    +                ///  Internal 8MHz RC Oscillator clock trim adjust value
    +                IRC8MADJ: u5,
    +                ///  Internal 8MHz RC Oscillator calibration value register
    +                IRC8MCALIB: u8,
    +                ///  External High Speed oscillator Enable
    +                HXTALEN: u1,
    +                ///  External crystal oscillator (HXTAL) clock stabilization flag
    +                HXTALSTB: u1,
    +                ///  External crystal oscillator (HXTAL) clock bypass mode enable
    +                HXTALBPS: u1,
    +                ///  HXTAL Clock Monitor Enable
    +                CKMEN: u1,
    +                reserved24: u4,
    +                ///  PLL enable
    +                PLLEN: u1,
    +                ///  PLL Clock Stabilization Flag
    +                PLLSTB: u1,
    +                ///  PLL1 enable
    +                PLL1EN: u1,
    +                ///  PLL1 Clock Stabilization Flag
    +                PLL1STB: u1,
    +                ///  PLL2 enable
    +                PLL2EN: u1,
    +                ///  PLL2 Clock Stabilization Flag
    +                PLL2STB: u1,
    +                padding: u2,
    +            }),
    +            ///  Clock configuration register 0 (RCU_CFG0)
    +            CFG0: mmio.Mmio(packed struct(u32) {
    +                ///  System clock switch
    +                SCS: u2,
    +                ///  System clock switch status
    +                SCSS: u2,
    +                ///  AHB prescaler selection
    +                AHBPSC: u4,
    +                ///  APB1 prescaler selection
    +                APB1PSC: u3,
    +                ///  APB2 prescaler selection
    +                APB2PSC: u3,
    +                ///  ADC clock prescaler selection
    +                ADCPSC_1_0: u2,
    +                ///  PLL Clock Source Selection
    +                PLLSEL: u1,
    +                ///  The LSB of PREDV0 division factor
    +                PREDV0_LSB: u1,
    +                ///  The PLL clock multiplication factor
    +                PLLMF_3_0: u4,
    +                ///  USBFS clock prescaler selection
    +                USBFSPSC: u2,
    +                ///  CKOUT0 Clock Source Selection
    +                CKOUT0SEL: u4,
    +                ///  Bit 2 of ADCPSC
    +                ADCPSC_2: u1,
    +                ///  Bit 4 of PLLMF
    +                PLLMF_4: u1,
    +                padding: u2,
    +            }),
    +            ///  Clock interrupt register (RCU_INT)
    +            INT: mmio.Mmio(packed struct(u32) {
    +                ///  IRC40K stabilization interrupt flag
    +                IRC40KSTBIF: u1,
    +                ///  LXTAL stabilization interrupt flag
    +                LXTALSTBIF: u1,
    +                ///  IRC8M stabilization interrupt flag
    +                IRC8MSTBIF: u1,
    +                ///  HXTAL stabilization interrupt flag
    +                HXTALSTBIF: u1,
    +                ///  PLL stabilization interrupt flag
    +                PLLSTBIF: u1,
    +                ///  PLL1 stabilization interrupt flag
    +                PLL1STBIF: u1,
    +                ///  PLL2 stabilization interrupt flag
    +                PLL2STBIF: u1,
    +                ///  HXTAL Clock Stuck Interrupt Flag
    +                CKMIF: u1,
    +                ///  IRC40K Stabilization interrupt enable
    +                IRC40KSTBIE: u1,
    +                ///  LXTAL Stabilization Interrupt Enable
    +                LXTALSTBIE: u1,
    +                ///  IRC8M Stabilization Interrupt Enable
    +                IRC8MSTBIE: u1,
    +                ///  HXTAL Stabilization Interrupt Enable
    +                HXTALSTBIE: u1,
    +                ///  PLL Stabilization Interrupt Enable
    +                PLLSTBIE: u1,
    +                ///  PLL1 Stabilization Interrupt Enable
    +                PLL1STBIE: u1,
    +                ///  PLL2 Stabilization Interrupt Enable
    +                PLL2STBIE: u1,
    +                reserved16: u1,
    +                ///  IRC40K Stabilization Interrupt Clear
    +                IRC40KSTBIC: u1,
    +                ///  LXTAL Stabilization Interrupt Clear
    +                LXTALSTBIC: u1,
    +                ///  IRC8M Stabilization Interrupt Clear
    +                IRC8MSTBIC: u1,
    +                ///  HXTAL Stabilization Interrupt Clear
    +                HXTALSTBIC: u1,
    +                ///  PLL stabilization Interrupt Clear
    +                PLLSTBIC: u1,
    +                ///  PLL1 stabilization Interrupt Clear
    +                PLL1STBIC: u1,
    +                ///  PLL2 stabilization Interrupt Clear
    +                PLL2STBIC: u1,
    +                ///  HXTAL Clock Stuck Interrupt Clear
    +                CKMIC: u1,
    +                padding: u8,
    +            }),
    +            ///  APB2 reset register (RCU_APB2RST)
    +            APB2RST: mmio.Mmio(packed struct(u32) {
    +                ///  Alternate function I/O reset
    +                AFRST: u1,
    +                reserved2: u1,
    +                ///  GPIO port A reset
    +                PARST: u1,
    +                ///  GPIO port B reset
    +                PBRST: u1,
    +                ///  GPIO port C reset
    +                PCRST: u1,
    +                ///  GPIO port D reset
    +                PDRST: u1,
    +                ///  GPIO port E reset
    +                PERST: u1,
    +                reserved9: u2,
    +                ///  ADC0 reset
    +                ADC0RST: u1,
    +                ///  ADC1 reset
    +                ADC1RST: u1,
    +                ///  Timer 0 reset
    +                TIMER0RST: u1,
    +                ///  SPI0 reset
    +                SPI0RST: u1,
    +                reserved14: u1,
    +                ///  USART0 Reset
    +                USART0RST: u1,
    +                padding: u17,
    +            }),
    +            ///  APB1 reset register (RCU_APB1RST)
    +            APB1RST: mmio.Mmio(packed struct(u32) {
    +                ///  TIMER1 timer reset
    +                TIMER1RST: u1,
    +                ///  TIMER2 timer reset
    +                TIMER2RST: u1,
    +                ///  TIMER3 timer reset
    +                TIMER3RST: u1,
    +                ///  TIMER4 timer reset
    +                TIMER4RST: u1,
    +                ///  TIMER5 timer reset
    +                TIMER5RST: u1,
    +                ///  TIMER6 timer reset
    +                TIMER6RST: u1,
    +                reserved11: u5,
    +                ///  Window watchdog timer reset
    +                WWDGTRST: u1,
    +                reserved14: u2,
    +                ///  SPI1 reset
    +                SPI1RST: u1,
    +                ///  SPI2 reset
    +                SPI2RST: u1,
    +                reserved17: u1,
    +                ///  USART1 reset
    +                USART1RST: u1,
    +                ///  USART2 reset
    +                USART2RST: u1,
    +                ///  UART3 reset
    +                UART3RST: u1,
    +                ///  UART4 reset
    +                UART4RST: u1,
    +                ///  I2C0 reset
    +                I2C0RST: u1,
    +                ///  I2C1 reset
    +                I2C1RST: u1,
    +                reserved25: u2,
    +                ///  CAN0 reset
    +                CAN0RST: u1,
    +                ///  CAN1 reset
    +                CAN1RST: u1,
    +                ///  Backup interface reset
    +                BKPIRST: u1,
    +                ///  Power control reset
    +                PMURST: u1,
    +                ///  DAC reset
    +                DACRST: u1,
    +                padding: u2,
    +            }),
    +            ///  AHB enable register
    +            AHBEN: mmio.Mmio(packed struct(u32) {
    +                ///  DMA0 clock enable
    +                DMA0EN: u1,
    +                ///  DMA1 clock enable
    +                DMA1EN: u1,
    +                ///  SRAM interface clock enable when sleep mode
    +                SRAMSPEN: u1,
    +                reserved4: u1,
    +                ///  FMC clock enable when sleep mode
    +                FMCSPEN: u1,
    +                reserved6: u1,
    +                ///  CRC clock enable
    +                CRCEN: u1,
    +                reserved8: u1,
    +                ///  EXMC clock enable
    +                EXMCEN: u1,
    +                reserved12: u3,
    +                ///  USBFS clock enable
    +                USBFSEN: u1,
    +                padding: u19,
    +            }),
    +            ///  APB2 clock enable register (RCU_APB2EN)
    +            APB2EN: mmio.Mmio(packed struct(u32) {
    +                ///  Alternate function IO clock enable
    +                AFEN: u1,
    +                reserved2: u1,
    +                ///  GPIO port A clock enable
    +                PAEN: u1,
    +                ///  GPIO port B clock enable
    +                PBEN: u1,
    +                ///  GPIO port C clock enable
    +                PCEN: u1,
    +                ///  GPIO port D clock enable
    +                PDEN: u1,
    +                ///  GPIO port E clock enable
    +                PEEN: u1,
    +                reserved9: u2,
    +                ///  ADC0 clock enable
    +                ADC0EN: u1,
    +                ///  ADC1 clock enable
    +                ADC1EN: u1,
    +                ///  TIMER0 clock enable
    +                TIMER0EN: u1,
    +                ///  SPI0 clock enable
    +                SPI0EN: u1,
    +                reserved14: u1,
    +                ///  USART0 clock enable
    +                USART0EN: u1,
    +                padding: u17,
    +            }),
    +            ///  APB1 clock enable register (RCU_APB1EN)
    +            APB1EN: mmio.Mmio(packed struct(u32) {
    +                ///  TIMER1 timer clock enable
    +                TIMER1EN: u1,
    +                ///  TIMER2 timer clock enable
    +                TIMER2EN: u1,
    +                ///  TIMER3 timer clock enable
    +                TIMER3EN: u1,
    +                ///  TIMER4 timer clock enable
    +                TIMER4EN: u1,
    +                ///  TIMER5 timer clock enable
    +                TIMER5EN: u1,
    +                ///  TIMER6 timer clock enable
    +                TIMER6EN: u1,
    +                reserved11: u5,
    +                ///  Window watchdog timer clock enable
    +                WWDGTEN: u1,
    +                reserved14: u2,
    +                ///  SPI1 clock enable
    +                SPI1EN: u1,
    +                ///  SPI2 clock enable
    +                SPI2EN: u1,
    +                reserved17: u1,
    +                ///  USART1 clock enable
    +                USART1EN: u1,
    +                ///  USART2 clock enable
    +                USART2EN: u1,
    +                ///  UART3 clock enable
    +                UART3EN: u1,
    +                ///  UART4 clock enable
    +                UART4EN: u1,
    +                ///  I2C0 clock enable
    +                I2C0EN: u1,
    +                ///  I2C1 clock enable
    +                I2C1EN: u1,
    +                reserved25: u2,
    +                ///  CAN0 clock enable
    +                CAN0EN: u1,
    +                ///  CAN1 clock enable
    +                CAN1EN: u1,
    +                ///  Backup interface clock enable
    +                BKPIEN: u1,
    +                ///  Power control clock enable
    +                PMUEN: u1,
    +                ///  DAC clock enable
    +                DACEN: u1,
    +                padding: u2,
    +            }),
    +            ///  Backup domain control register (RCU_BDCTL)
    +            BDCTL: mmio.Mmio(packed struct(u32) {
    +                ///  LXTAL enable
    +                LXTALEN: u1,
    +                ///  External low-speed oscillator stabilization
    +                LXTALSTB: u1,
    +                ///  LXTAL bypass mode enable
    +                LXTALBPS: u1,
    +                reserved8: u5,
    +                ///  RTC clock entry selection
    +                RTCSRC: u2,
    +                reserved15: u5,
    +                ///  RTC clock enable
    +                RTCEN: u1,
    +                ///  Backup domain reset
    +                BKPRST: u1,
    +                padding: u15,
    +            }),
    +            ///  Reset source /clock register (RCU_RSTSCK)
    +            RSTSCK: mmio.Mmio(packed struct(u32) {
    +                ///  IRC40K enable
    +                IRC40KEN: u1,
    +                ///  IRC40K stabilization
    +                IRC40KSTB: u1,
    +                reserved24: u22,
    +                ///  Reset flag clear
    +                RSTFC: u1,
    +                reserved26: u1,
    +                ///  External PIN reset flag
    +                EPRSTF: u1,
    +                ///  Power reset flag
    +                PORRSTF: u1,
    +                ///  Software reset flag
    +                SWRSTF: u1,
    +                ///  Free Watchdog timer reset flag
    +                FWDGTRSTF: u1,
    +                ///  Window watchdog timer reset flag
    +                WWDGTRSTF: u1,
    +                ///  Low-power reset flag
    +                LPRSTF: u1,
    +            }),
    +            ///  AHB reset register
    +            AHBRST: mmio.Mmio(packed struct(u32) {
    +                reserved12: u12,
    +                ///  USBFS reset
    +                USBFSRST: u1,
    +                padding: u19,
    +            }),
    +            ///  Clock Configuration register 1
    +            CFG1: mmio.Mmio(packed struct(u32) {
    +                ///  PREDV0 division factor
    +                PREDV0: u4,
    +                ///  PREDV1 division factor
    +                PREDV1: u4,
    +                ///  The PLL1 clock multiplication factor
    +                PLL1MF: u4,
    +                ///  The PLL2 clock multiplication factor
    +                PLL2MF: u4,
    +                ///  PREDV0 input Clock Source Selection
    +                PREDV0SEL: u1,
    +                ///  I2S1 Clock Source Selection
    +                I2S1SEL: u1,
    +                ///  I2S2 Clock Source Selection
    +                I2S2SEL: u1,
    +                padding: u13,
    +            }),
    +            reserved52: [4]u8,
    +            ///  Deep sleep mode Voltage register
    +            DSV: mmio.Mmio(packed struct(u32) {
    +                ///  Deep-sleep mode voltage select
    +                DSLPVS: u2,
    +                padding: u30,
    +            }),
    +        };
    +
    +        ///  Real-time clock
    +        pub const RTC = extern struct {
    +            ///  RTC interrupt enable register
    +            INTEN: mmio.Mmio(packed struct(u32) {
    +                ///  Second interrupt
    +                SCIE: u1,
    +                ///  Alarm interrupt enable
    +                ALRMIE: u1,
    +                ///  Overflow interrupt enable
    +                OVIE: u1,
    +                padding: u29,
    +            }),
    +            ///  control register
    +            CTL: mmio.Mmio(packed struct(u32) {
    +                ///  Sencond interrupt flag
    +                SCIF: u1,
    +                ///  Alarm interrupt flag
    +                ALRMIF: u1,
    +                ///  Overflow interrupt flag
    +                OVIF: u1,
    +                ///  Registers synchronized flag
    +                RSYNF: u1,
    +                ///  Configuration mode flag
    +                CMF: u1,
    +                ///  Last write operation finished flag
    +                LWOFF: u1,
    +                padding: u26,
    +            }),
    +            ///  RTC prescaler high register
    +            PSCH: mmio.Mmio(packed struct(u32) {
    +                padding: u32,
    +            }),
    +            ///  RTC prescaler low register
    +            PSCL: mmio.Mmio(packed struct(u32) {
    +                padding: u32,
    +            }),
    +            ///  RTC divider high register
    +            DIVH: mmio.Mmio(packed struct(u32) {
    +                ///  RTC divider value high
    +                DIV: u4,
    +                padding: u28,
    +            }),
    +            ///  RTC divider low register
    +            DIVL: mmio.Mmio(packed struct(u32) {
    +                ///  RTC divider value low
    +                DIV: u16,
    +                padding: u16,
    +            }),
    +            ///  RTC counter high register
    +            CNTH: mmio.Mmio(packed struct(u32) {
    +                ///  RTC counter value high
    +                CNT: u16,
    +                padding: u16,
    +            }),
    +            ///  RTC counter low register
    +            CNTL: mmio.Mmio(packed struct(u32) {
    +                ///  RTC counter value low
    +                CNT: u16,
    +                padding: u16,
    +            }),
    +        };
    +
    +        ///  Serial peripheral interface
    +        pub const SPI0 = extern struct {
    +            ///  control register 0
    +            CTL0: mmio.Mmio(packed struct(u16) {
    +                ///  Clock Phase Selection
    +                CKPH: u1,
    +                ///  Clock polarity Selection
    +                CKPL: u1,
    +                ///  Master Mode Enable
    +                MSTMOD: u1,
    +                ///  Master Clock Prescaler Selection
    +                PSC: u3,
    +                ///  SPI enable
    +                SPIEN: u1,
    +                ///  LSB First Mode
    +                LF: u1,
    +                ///  NSS Pin Selection In NSS Software Mode
    +                SWNSS: u1,
    +                ///  NSS Software Mode Selection
    +                SWNSSEN: u1,
    +                ///  Receive only
    +                RO: u1,
    +                ///  Data frame format
    +                FF16: u1,
    +                ///  CRC Next Transfer
    +                CRCNT: u1,
    +                ///  CRC Calculation Enable
    +                CRCEN: u1,
    +                ///  Bidirectional Transmit output enable
    +                BDOEN: u1,
    +                ///  Bidirectional enable
    +                BDEN: u1,
    +            }),
    +            reserved4: [2]u8,
    +            ///  control register 1
    +            CTL1: mmio.Mmio(packed struct(u16) {
    +                ///  Rx buffer DMA enable
    +                DMAREN: u1,
    +                ///  Transmit Buffer DMA Enable
    +                DMATEN: u1,
    +                ///  Drive NSS Output
    +                NSSDRV: u1,
    +                ///  SPI NSS pulse mode enable
    +                NSSP: u1,
    +                ///  SPI TI mode enable
    +                TMOD: u1,
    +                ///  Error interrupt enable
    +                ERRIE: u1,
    +                ///  RX buffer not empty interrupt enable
    +                RBNEIE: u1,
    +                ///  Tx buffer empty interrupt enable
    +                TBEIE: u1,
    +                padding: u8,
    +            }),
    +            reserved8: [2]u8,
    +            ///  status register
    +            STAT: mmio.Mmio(packed struct(u16) {
    +                ///  Receive Buffer Not Empty
    +                RBNE: u1,
    +                ///  Transmit Buffer Empty
    +                TBE: u1,
    +                ///  I2S channel side
    +                I2SCH: u1,
    +                ///  Transmission underrun error bit
    +                TXURERR: u1,
    +                ///  SPI CRC Error Bit
    +                CRCERR: u1,
    +                ///  SPI Configuration error
    +                CONFERR: u1,
    +                ///  Reception Overrun Error Bit
    +                RXORERR: u1,
    +                ///  Transmitting On-going Bit
    +                TRANS: u1,
    +                ///  Format error
    +                FERR: u1,
    +                padding: u7,
    +            }),
    +            reserved12: [2]u8,
    +            ///  data register
    +            DATA: mmio.Mmio(packed struct(u16) {
    +                ///  Data transfer register
    +                SPI_DATA: u16,
    +            }),
    +            reserved16: [2]u8,
    +            ///  CRC polynomial register
    +            CRCPOLY: mmio.Mmio(packed struct(u16) {
    +                ///  CRC polynomial value
    +                CRCPOLY: u16,
    +            }),
    +            reserved20: [2]u8,
    +            ///  RX CRC register
    +            RCRC: mmio.Mmio(packed struct(u16) {
    +                ///  RX CRC value
    +                RCRC: u16,
    +            }),
    +            reserved24: [2]u8,
    +            ///  TX CRC register
    +            TCRC: mmio.Mmio(packed struct(u16) {
    +                ///  Tx CRC value
    +                TCRC: u16,
    +            }),
    +            reserved28: [2]u8,
    +            ///  I2S control register
    +            I2SCTL: mmio.Mmio(packed struct(u16) {
    +                ///  Channel length (number of bits per audio channel)
    +                CHLEN: u1,
    +                ///  Data length
    +                DTLEN: u2,
    +                ///  Idle state clock polarity
    +                CKPL: u1,
    +                ///  I2S standard selection
    +                I2SSTD: u2,
    +                reserved7: u1,
    +                ///  PCM frame synchronization mode
    +                PCMSMOD: u1,
    +                ///  I2S operation mode
    +                I2SOPMOD: u2,
    +                ///  I2S Enable
    +                I2SEN: u1,
    +                ///  I2S mode selection
    +                I2SSEL: u1,
    +                padding: u4,
    +            }),
    +            reserved32: [2]u8,
    +            ///  I2S prescaler register
    +            I2SPSC: mmio.Mmio(packed struct(u16) {
    +                ///  Dividing factor for the prescaler
    +                DIV: u8,
    +                ///  Odd factor for the prescaler
    +                OF: u1,
    +                ///  I2S_MCK output enable
    +                MCKOEN: u1,
    +                padding: u6,
    +            }),
    +        };
    +
    +        ///  Universal asynchronous receiver transmitter
    +        pub const UART3 = extern struct {
    +            ///  Status register
    +            STAT: mmio.Mmio(packed struct(u32) {
    +                ///  Parity error flag
    +                PERR: u1,
    +                ///  Frame error flag
    +                FERR: u1,
    +                ///  Noise error flag
    +                NERR: u1,
    +                ///  Overrun error
    +                ORERR: u1,
    +                ///  IDLE frame detected flag
    +                IDLEF: u1,
    +                ///  Read data buffer not empty
    +                RBNE: u1,
    +                ///  Transmission complete
    +                TC: u1,
    +                ///  Transmit data buffer empty
    +                TBE: u1,
    +                ///  LIN break detection flag
    +                LBDF: u1,
    +                padding: u23,
    +            }),
    +            ///  Data register
    +            DATA: mmio.Mmio(packed struct(u32) {
    +                ///  Transmit or read data value
    +                DATA: u9,
    +                padding: u23,
    +            }),
    +            ///  Baud rate register
    +            BAUD: mmio.Mmio(packed struct(u32) {
    +                ///  Fraction part of baud-rate divider
    +                FRADIV: u4,
    +                ///  Integer part of baud-rate divider
    +                INTDIV: u12,
    +                padding: u16,
    +            }),
    +            ///  Control register 0
    +            CTL0: mmio.Mmio(packed struct(u32) {
    +                ///  Send break command
    +                SBKCMD: u1,
    +                ///  Receiver wakeup from mute mode
    +                RWU: u1,
    +                ///  Receiver enable
    +                REN: u1,
    +                ///  Transmitter enable
    +                TEN: u1,
    +                ///  IDLE line detected interrupt enable
    +                IDLEIE: u1,
    +                ///  Read data buffer not empty interrupt and overrun error interrupt enable
    +                RBNEIE: u1,
    +                ///  Transmission complete interrupt enable
    +                TCIE: u1,
    +                ///  Transmitter buffer empty interrupt enable
    +                TBEIE: u1,
    +                ///  Parity error interrupt enable
    +                PERRIE: u1,
    +                ///  Parity mode
    +                PM: u1,
    +                ///  Parity check function enable
    +                PCEN: u1,
    +                ///  Wakeup method in mute mode
    +                WM: u1,
    +                ///  Word length
    +                WL: u1,
    +                ///  USART enable
    +                UEN: u1,
    +                padding: u18,
    +            }),
    +            ///  Control register 1
    +            CTL1: mmio.Mmio(packed struct(u32) {
    +                ///  Address of the USART
    +                ADDR: u4,
    +                reserved5: u1,
    +                ///  LIN break frame length
    +                LBLEN: u1,
    +                ///  LIN break detection interrupt enable
    +                LBDIE: u1,
    +                reserved12: u5,
    +                ///  STOP bits length
    +                STB: u2,
    +                ///  LIN mode enable
    +                LMEN: u1,
    +                padding: u17,
    +            }),
    +            ///  Control register 2
    +            CTL2: mmio.Mmio(packed struct(u32) {
    +                ///  Error interrupt enable
    +                ERRIE: u1,
    +                ///  IrDA mode enable
    +                IREN: u1,
    +                ///  IrDA low-power
    +                IRLP: u1,
    +                ///  Half-duplex selection
    +                HDEN: u1,
    +                reserved6: u2,
    +                ///  DMA request enable for reception
    +                DENR: u1,
    +                ///  DMA request enable for transmission
    +                DENT: u1,
    +                padding: u24,
    +            }),
    +            ///  Guard time and prescaler register
    +            GP: mmio.Mmio(packed struct(u32) {
    +                ///  Prescaler value
    +                PSC: u8,
    +                padding: u24,
    +            }),
    +        };
    +
    +        ///  Universal synchronous asynchronous receiver transmitter
    +        pub const USART0 = extern struct {
    +            ///  Status register
    +            STAT: mmio.Mmio(packed struct(u32) {
    +                ///  Parity error flag
    +                PERR: u1,
    +                ///  Frame error flag
    +                FERR: u1,
    +                ///  Noise error flag
    +                NERR: u1,
    +                ///  Overrun error
    +                ORERR: u1,
    +                ///  IDLE frame detected flag
    +                IDLEF: u1,
    +                ///  Read data buffer not empty
    +                RBNE: u1,
    +                ///  Transmission complete
    +                TC: u1,
    +                ///  Transmit data buffer empty
    +                TBE: u1,
    +                ///  LIN break detection flag
    +                LBDF: u1,
    +                ///  CTS change flag
    +                CTSF: u1,
    +                padding: u22,
    +            }),
    +            ///  Data register
    +            DATA: mmio.Mmio(packed struct(u32) {
    +                ///  Transmit or read data value
    +                DATA: u9,
    +                padding: u23,
    +            }),
    +            ///  Baud rate register
    +            BAUD: mmio.Mmio(packed struct(u32) {
    +                ///  Fraction part of baud-rate divider
    +                FRADIV: u4,
    +                ///  Integer part of baud-rate divider
    +                INTDIV: u12,
    +                padding: u16,
    +            }),
    +            ///  Control register 0
    +            CTL0: mmio.Mmio(packed struct(u32) {
    +                ///  Send break command
    +                SBKCMD: u1,
    +                ///  Receiver wakeup from mute mode
    +                RWU: u1,
    +                ///  Receiver enable
    +                REN: u1,
    +                ///  Transmitter enable
    +                TEN: u1,
    +                ///  IDLE line detected interrupt enable
    +                IDLEIE: u1,
    +                ///  Read data buffer not empty interrupt and overrun error interrupt enable
    +                RBNEIE: u1,
    +                ///  Transmission complete interrupt enable
    +                TCIE: u1,
    +                ///  Transmitter buffer empty interrupt enable
    +                TBEIE: u1,
    +                ///  Parity error interrupt enable
    +                PERRIE: u1,
    +                ///  Parity mode
    +                PM: u1,
    +                ///  Parity check function enable
    +                PCEN: u1,
    +                ///  Wakeup method in mute mode
    +                WM: u1,
    +                ///  Word length
    +                WL: u1,
    +                ///  USART enable
    +                UEN: u1,
    +                padding: u18,
    +            }),
    +            ///  Control register 1
    +            CTL1: mmio.Mmio(packed struct(u32) {
    +                ///  Address of the USART
    +                ADDR: u4,
    +                reserved5: u1,
    +                ///  LIN break frame length
    +                LBLEN: u1,
    +                ///  LIN break detection interrupt enable
    +                LBDIE: u1,
    +                reserved8: u1,
    +                ///  CK Length
    +                CLEN: u1,
    +                ///  Clock phase
    +                CPH: u1,
    +                ///  Clock polarity
    +                CPL: u1,
    +                ///  CK pin enable
    +                CKEN: u1,
    +                ///  STOP bits length
    +                STB: u2,
    +                ///  LIN mode enable
    +                LMEN: u1,
    +                padding: u17,
    +            }),
    +            ///  Control register 2
    +            CTL2: mmio.Mmio(packed struct(u32) {
    +                ///  Error interrupt enable
    +                ERRIE: u1,
    +                ///  IrDA mode enable
    +                IREN: u1,
    +                ///  IrDA low-power
    +                IRLP: u1,
    +                ///  Half-duplex selection
    +                HDEN: u1,
    +                ///  Smartcard NACK enable
    +                NKEN: u1,
    +                ///  Smartcard mode enable
    +                SCEN: u1,
    +                ///  DMA request enable for reception
    +                DENR: u1,
    +                ///  DMA request enable for transmission
    +                DENT: u1,
    +                ///  RTS enable
    +                RTSEN: u1,
    +                ///  CTS enable
    +                CTSEN: u1,
    +                ///  CTS interrupt enable
    +                CTSIE: u1,
    +                padding: u21,
    +            }),
    +            ///  Guard time and prescaler register
    +            GP: mmio.Mmio(packed struct(u32) {
    +                ///  Prescaler value
    +                PSC: u8,
    +                ///  Guard time value in Smartcard mode
    +                GUAT: u8,
    +                padding: u16,
    +            }),
    +        };
    +
    +        ///  Advanced-timers
    +        pub const TIMER0 = extern struct {
    +            ///  control register 0
    +            CTL0: mmio.Mmio(packed struct(u16) {
    +                ///  Counter enable
    +                CEN: u1,
    +                ///  Update disable
    +                UPDIS: u1,
    +                ///  Update source
    +                UPS: u1,
    +                ///  Single pulse mode
    +                SPM: u1,
    +                ///  Direction
    +                DIR: u1,
    +                ///  Counter aligns mode selection
    +                CAM: u2,
    +                ///  Auto-reload shadow enable
    +                ARSE: u1,
    +                ///  Clock division
    +                CKDIV: u2,
    +                padding: u6,
    +            }),
    +            reserved4: [2]u8,
    +            ///  control register 1
    +            CTL1: mmio.Mmio(packed struct(u16) {
    +                ///  Commutation control shadow enable
    +                CCSE: u1,
    +                reserved2: u1,
    +                ///  Commutation control shadow register update control
    +                CCUC: u1,
    +                ///  DMA request source selection
    +                DMAS: u1,
    +                ///  Master mode control
    +                MMC: u3,
    +                ///  Channel 0 trigger input selection
    +                TI0S: u1,
    +                ///  Idle state of channel 0 output
    +                ISO0: u1,
    +                ///  Idle state of channel 0 complementary output
    +                ISO0N: u1,
    +                ///  Idle state of channel 1 output
    +                ISO1: u1,
    +                ///  Idle state of channel 1 complementary output
    +                ISO1N: u1,
    +                ///  Idle state of channel 2 output
    +                ISO2: u1,
    +                ///  Idle state of channel 2 complementary output
    +                ISO2N: u1,
    +                ///  Idle state of channel 3 output
    +                ISO3: u1,
    +                padding: u1,
    +            }),
    +            reserved8: [2]u8,
    +            ///  slave mode configuration register
    +            SMCFG: mmio.Mmio(packed struct(u16) {
    +                ///  Slave mode selection
    +                SMC: u3,
    +                reserved4: u1,
    +                ///  Trigger selection
    +                TRGS: u3,
    +                ///  Master/Slave mode
    +                MSM: u1,
    +                ///  External trigger filter control
    +                ETFC: u4,
    +                ///  External trigger prescaler
    +                ETPSC: u2,
    +                ///  Part of SMC for enable External clock mode1
    +                SMC1: u1,
    +                ///  External trigger polarity
    +                ETP: u1,
    +            }),
    +            reserved12: [2]u8,
    +            ///  DMA/Interrupt enable register
    +            DMAINTEN: mmio.Mmio(packed struct(u16) {
    +                ///  Update interrupt enable
    +                UPIE: u1,
    +                ///  Channel 0 capture/compare interrupt enable
    +                CH0IE: u1,
    +                ///  Channel 1 capture/compare interrupt enable
    +                CH1IE: u1,
    +                ///  Channel 2 capture/compare interrupt enable
    +                CH2IE: u1,
    +                ///  Channel 3 capture/compare interrupt enable
    +                CH3IE: u1,
    +                ///  commutation interrupt enable
    +                CMTIE: u1,
    +                ///  Trigger interrupt enable
    +                TRGIE: u1,
    +                ///  Break interrupt enable
    +                BRKIE: u1,
    +                ///  Update DMA request enable
    +                UPDEN: u1,
    +                ///  Channel 0 capture/compare DMA request enable
    +                CH0DEN: u1,
    +                ///  Channel 1 capture/compare DMA request enable
    +                CH1DEN: u1,
    +                ///  Channel 2 capture/compare DMA request enable
    +                CH2DEN: u1,
    +                ///  Channel 3 capture/compare DMA request enable
    +                CH3DEN: u1,
    +                ///  Commutation DMA request enable
    +                CMTDEN: u1,
    +                ///  Trigger DMA request enable
    +                TRGDEN: u1,
    +                padding: u1,
    +            }),
    +            reserved16: [2]u8,
    +            ///  Interrupt flag register
    +            INTF: mmio.Mmio(packed struct(u16) {
    +                ///  Update interrupt flag
    +                UPIF: u1,
    +                ///  Channel 0 capture/compare interrupt flag
    +                CH0IF: u1,
    +                ///  Channel 1 capture/compare interrupt flag
    +                CH1IF: u1,
    +                ///  Channel 2 capture/compare interrupt flag
    +                CH2IF: u1,
    +                ///  Channel 3 capture/compare interrupt flag
    +                CH3IF: u1,
    +                ///  Channel commutation interrupt flag
    +                CMTIF: u1,
    +                ///  Trigger interrupt flag
    +                TRGIF: u1,
    +                ///  Break interrupt flag
    +                BRKIF: u1,
    +                reserved9: u1,
    +                ///  Channel 0 over capture flag
    +                CH0OF: u1,
    +                ///  Channel 1 over capture flag
    +                CH1OF: u1,
    +                ///  Channel 2 over capture flag
    +                CH2OF: u1,
    +                ///  Channel 3 over capture flag
    +                CH3OF: u1,
    +                padding: u3,
    +            }),
    +            reserved20: [2]u8,
    +            ///  Software event generation register
    +            SWEVG: mmio.Mmio(packed struct(u16) {
    +                ///  Update event generation
    +                UPG: u1,
    +                ///  Channel 0 capture or compare event generation
    +                CH0G: u1,
    +                ///  Channel 1 capture or compare event generation
    +                CH1G: u1,
    +                ///  Channel 2 capture or compare event generation
    +                CH2G: u1,
    +                ///  Channel 3 capture or compare event generation
    +                CH3G: u1,
    +                ///  Channel commutation event generation
    +                CMTG: u1,
    +                ///  Trigger event generation
    +                TRGG: u1,
    +                ///  Break event generation
    +                BRKG: u1,
    +                padding: u8,
    +            }),
    +            reserved24: [2]u8,
    +            ///  Channel control register 0 (output mode)
    +            CHCTL0_Output: mmio.Mmio(packed struct(u16) {
    +                ///  Channel 0 I/O mode selection
    +                CH0MS: u2,
    +                ///  Channel 0 output compare fast enable
    +                CH0COMFEN: u1,
    +                ///  Channel 0 compare output shadow enable
    +                CH0COMSEN: u1,
    +                ///  Channel 0 compare output control
    +                CH0COMCTL: u3,
    +                ///  Channel 0 output compare clear enable
    +                CH0COMCEN: u1,
    +                ///  Channel 1 mode selection
    +                CH1MS: u2,
    +                ///  Channel 1 output compare fast enable
    +                CH1COMFEN: u1,
    +                ///  Channel 1 output compare shadow enable
    +                CH1COMSEN: u1,
    +                ///  Channel 1 compare output control
    +                CH1COMCTL: u3,
    +                ///  Channel 1 output compare clear enable
    +                CH1COMCEN: u1,
    +            }),
    +            reserved28: [2]u8,
    +            ///  Channel control register 1 (output mode)
    +            CHCTL1_Output: mmio.Mmio(packed struct(u16) {
    +                ///  Channel 2 I/O mode selection
    +                CH2MS: u2,
    +                ///  Channel 2 output compare fast enable
    +                CH2COMFEN: u1,
    +                ///  Channel 2 compare output shadow enable
    +                CH2COMSEN: u1,
    +                ///  Channel 2 compare output control
    +                CH2COMCTL: u3,
    +                ///  Channel 2 output compare clear enable
    +                CH2COMCEN: u1,
    +                ///  Channel 3 mode selection
    +                CH3MS: u2,
    +                ///  Channel 3 output compare fast enable
    +                CH3COMFEN: u1,
    +                ///  Channel 3 output compare shadow enable
    +                CH3COMSEN: u1,
    +                ///  Channel 3 compare output control
    +                CH3COMCTL: u3,
    +                ///  Channel 3 output compare clear enable
    +                CH3COMCEN: u1,
    +            }),
    +            reserved32: [2]u8,
    +            ///  Channel control register 2
    +            CHCTL2: mmio.Mmio(packed struct(u16) {
    +                ///  Channel 0 capture/compare function enable
    +                CH0EN: u1,
    +                ///  Channel 0 capture/compare function polarity
    +                CH0P: u1,
    +                ///  Channel 0 complementary output enable
    +                CH0NEN: u1,
    +                ///  Channel 0 complementary output polarity
    +                CH0NP: u1,
    +                ///  Channel 1 capture/compare function enable
    +                CH1EN: u1,
    +                ///  Channel 1 capture/compare function polarity
    +                CH1P: u1,
    +                ///  Channel 1 complementary output enable
    +                CH1NEN: u1,
    +                ///  Channel 1 complementary output polarity
    +                CH1NP: u1,
    +                ///  Channel 2 capture/compare function enable
    +                CH2EN: u1,
    +                ///  Channel 2 capture/compare function polarity
    +                CH2P: u1,
    +                ///  Channel 2 complementary output enable
    +                CH2NEN: u1,
    +                ///  Channel 2 complementary output polarity
    +                CH2NP: u1,
    +                ///  Channel 3 capture/compare function enable
    +                CH3EN: u1,
    +                ///  Channel 3 capture/compare function polarity
    +                CH3P: u1,
    +                padding: u2,
    +            }),
    +            reserved36: [2]u8,
    +            ///  counter
    +            CNT: mmio.Mmio(packed struct(u16) {
    +                ///  current counter value
    +                CNT: u16,
    +            }),
    +            reserved40: [2]u8,
    +            ///  prescaler
    +            PSC: mmio.Mmio(packed struct(u16) {
    +                ///  Prescaler value of the counter clock
    +                PSC: u16,
    +            }),
    +            reserved44: [2]u8,
    +            ///  Counter auto reload register
    +            CAR: mmio.Mmio(packed struct(u16) {
    +                ///  Counter auto reload value
    +                CARL: u16,
    +            }),
    +            reserved48: [2]u8,
    +            ///  Counter repetition register
    +            CREP: mmio.Mmio(packed struct(u16) {
    +                ///  Counter repetition value
    +                CREP: u8,
    +                padding: u8,
    +            }),
    +            reserved52: [2]u8,
    +            ///  Channel 0 capture/compare value register
    +            CH0CV: mmio.Mmio(packed struct(u16) {
    +                ///  Capture or compare value of channel0
    +                CH0VAL: u16,
    +            }),
    +            reserved56: [2]u8,
    +            ///  Channel 1 capture/compare value register
    +            CH1CV: mmio.Mmio(packed struct(u16) {
    +                ///  Capture or compare value of channel1
    +                CH1VAL: u16,
    +            }),
    +            reserved60: [2]u8,
    +            ///  Channel 2 capture/compare value register
    +            CH2CV: mmio.Mmio(packed struct(u16) {
    +                ///  Capture or compare value of channel 2
    +                CH2VAL: u16,
    +            }),
    +            reserved64: [2]u8,
    +            ///  Channel 3 capture/compare value register
    +            CH3CV: mmio.Mmio(packed struct(u16) {
    +                ///  Capture or compare value of channel 3
    +                CH3VAL: u16,
    +            }),
    +            reserved68: [2]u8,
    +            ///  channel complementary protection register
    +            CCHP: mmio.Mmio(packed struct(u16) {
    +                ///  Dead time configure
    +                DTCFG: u8,
    +                ///  Complementary register protect control
    +                PROT: u2,
    +                ///  Idle mode off-state configure
    +                IOS: u1,
    +                ///  Run mode off-state configure
    +                ROS: u1,
    +                ///  Break enable
    +                BRKEN: u1,
    +                ///  Break polarity
    +                BRKP: u1,
    +                ///  Output automatic enable
    +                OAEN: u1,
    +                ///  Primary output enable
    +                POEN: u1,
    +            }),
    +            reserved72: [2]u8,
    +            ///  DMA configuration register
    +            DMACFG: mmio.Mmio(packed struct(u16) {
    +                ///  DMA transfer access start address
    +                DMATA: u5,
    +                reserved8: u3,
    +                ///  DMA transfer count
    +                DMATC: u5,
    +                padding: u3,
    +            }),
    +            reserved76: [2]u8,
    +            ///  DMA transfer buffer register
    +            DMATB: mmio.Mmio(packed struct(u16) {
    +                ///  DMA transfer buffer
    +                DMATB: u16,
    +            }),
    +        };
    +
    +        ///  General-purpose-timers
    +        pub const TIMER1 = extern struct {
    +            ///  control register 0
    +            CTL0: mmio.Mmio(packed struct(u16) {
    +                ///  Counter enable
    +                CEN: u1,
    +                ///  Update disable
    +                UPDIS: u1,
    +                ///  Update source
    +                UPS: u1,
    +                ///  Single pulse mode
    +                SPM: u1,
    +                ///  Direction
    +                DIR: u1,
    +                ///  Counter aligns mode selection
    +                CAM: u2,
    +                ///  Auto-reload shadow enable
    +                ARSE: u1,
    +                ///  Clock division
    +                CKDIV: u2,
    +                padding: u6,
    +            }),
    +            reserved4: [2]u8,
    +            ///  control register 1
    +            CTL1: mmio.Mmio(packed struct(u16) {
    +                reserved3: u3,
    +                ///  DMA request source selection
    +                DMAS: u1,
    +                ///  Master mode control
    +                MMC: u3,
    +                ///  Channel 0 trigger input selection
    +                TI0S: u1,
    +                padding: u8,
    +            }),
    +            reserved8: [2]u8,
    +            ///  slave mode control register
    +            SMCFG: mmio.Mmio(packed struct(u16) {
    +                ///  Slave mode control
    +                SMC: u3,
    +                reserved4: u1,
    +                ///  Trigger selection
    +                TRGS: u3,
    +                ///  Master-slave mode
    +                MSM: u1,
    +                ///  External trigger filter control
    +                ETFC: u4,
    +                ///  External trigger prescaler
    +                ETPSC: u2,
    +                ///  Part of SMC for enable External clock mode1
    +                SMC1: u1,
    +                ///  External trigger polarity
    +                ETP: u1,
    +            }),
    +            reserved12: [2]u8,
    +            ///  DMA/Interrupt enable register
    +            DMAINTEN: mmio.Mmio(packed struct(u16) {
    +                ///  Update interrupt enable
    +                UPIE: u1,
    +                ///  Channel 0 capture/compare interrupt enable
    +                CH0IE: u1,
    +                ///  Channel 1 capture/compare interrupt enable
    +                CH1IE: u1,
    +                ///  Channel 2 capture/compare interrupt enable
    +                CH2IE: u1,
    +                ///  Channel 3 capture/compare interrupt enable
    +                CH3IE: u1,
    +                reserved6: u1,
    +                ///  Trigger interrupt enable
    +                TRGIE: u1,
    +                reserved8: u1,
    +                ///  Update DMA request enable
    +                UPDEN: u1,
    +                ///  Channel 0 capture/compare DMA request enable
    +                CH0DEN: u1,
    +                ///  Channel 1 capture/compare DMA request enable
    +                CH1DEN: u1,
    +                ///  Channel 2 capture/compare DMA request enable
    +                CH2DEN: u1,
    +                ///  Channel 3 capture/compare DMA request enable
    +                CH3DEN: u1,
    +                reserved14: u1,
    +                ///  Trigger DMA request enable
    +                TRGDEN: u1,
    +                padding: u1,
    +            }),
    +            reserved16: [2]u8,
    +            ///  interrupt flag register
    +            INTF: mmio.Mmio(packed struct(u16) {
    +                ///  Update interrupt flag
    +                UPIF: u1,
    +                ///  Channel 0 capture/compare interrupt flag
    +                CH0IF: u1,
    +                ///  Channel 1 capture/compare interrupt flag
    +                CH1IF: u1,
    +                ///  Channel 2 capture/compare interrupt enable
    +                CH2IF: u1,
    +                ///  Channel 3 capture/compare interrupt enable
    +                CH3IF: u1,
    +                reserved6: u1,
    +                ///  Trigger interrupt flag
    +                TRGIF: u1,
    +                reserved9: u2,
    +                ///  Channel 0 over capture flag
    +                CH0OF: u1,
    +                ///  Channel 1 over capture flag
    +                CH1OF: u1,
    +                ///  Channel 2 over capture flag
    +                CH2OF: u1,
    +                ///  Channel 3 over capture flag
    +                CH3OF: u1,
    +                padding: u3,
    +            }),
    +            reserved20: [2]u8,
    +            ///  event generation register
    +            SWEVG: mmio.Mmio(packed struct(u16) {
    +                ///  Update generation
    +                UPG: u1,
    +                ///  Channel 0 capture or compare event generation
    +                CH0G: u1,
    +                ///  Channel 1 capture or compare event generation
    +                CH1G: u1,
    +                ///  Channel 2 capture or compare event generation
    +                CH2G: u1,
    +                ///  Channel 3 capture or compare event generation
    +                CH3G: u1,
    +                reserved6: u1,
    +                ///  Trigger event generation
    +                TRGG: u1,
    +                padding: u9,
    +            }),
    +            reserved24: [2]u8,
    +            ///  Channel control register 0 (output mode)
    +            CHCTL0_Output: mmio.Mmio(packed struct(u16) {
    +                ///  Channel 0 I/O mode selection
    +                CH0MS: u2,
    +                ///  Channel 0 output compare fast enable
    +                CH0COMFEN: u1,
    +                ///  Channel 0 compare output shadow enable
    +                CH0COMSEN: u1,
    +                ///  Channel 0 compare output control
    +                CH0COMCTL: u3,
    +                ///  Channel 0 output compare clear enable
    +                CH0COMCEN: u1,
    +                ///  Channel 1 mode selection
    +                CH1MS: u2,
    +                ///  Channel 1 output compare fast enable
    +                CH1COMFEN: u1,
    +                ///  Channel 1 output compare shadow enable
    +                CH1COMSEN: u1,
    +                ///  Channel 1 compare output control
    +                CH1COMCTL: u3,
    +                ///  Channel 1 output compare clear enable
    +                CH1COMCEN: u1,
    +            }),
    +            reserved28: [2]u8,
    +            ///  Channel control register 1 (output mode)
    +            CHCTL1_Output: mmio.Mmio(packed struct(u16) {
    +                ///  Channel 2 I/O mode selection
    +                CH2MS: u2,
    +                ///  Channel 2 output compare fast enable
    +                CH2COMFEN: u1,
    +                ///  Channel 2 compare output shadow enable
    +                CH2COMSEN: u1,
    +                ///  Channel 2 compare output control
    +                CH2COMCTL: u3,
    +                ///  Channel 2 output compare clear enable
    +                CH2COMCEN: u1,
    +                ///  Channel 3 mode selection
    +                CH3MS: u2,
    +                ///  Channel 3 output compare fast enable
    +                CH3COMFEN: u1,
    +                ///  Channel 3 output compare shadow enable
    +                CH3COMSEN: u1,
    +                ///  Channel 3 compare output control
    +                CH3COMCTL: u3,
    +                ///  Channel 3 output compare clear enable
    +                CH3COMCEN: u1,
    +            }),
    +            reserved32: [2]u8,
    +            ///  Channel control register 2
    +            CHCTL2: mmio.Mmio(packed struct(u16) {
    +                ///  Channel 0 capture/compare function enable
    +                CH0EN: u1,
    +                ///  Channel 0 capture/compare function polarity
    +                CH0P: u1,
    +                reserved4: u2,
    +                ///  Channel 1 capture/compare function enable
    +                CH1EN: u1,
    +                ///  Channel 1 capture/compare function polarity
    +                CH1P: u1,
    +                reserved8: u2,
    +                ///  Channel 2 capture/compare function enable
    +                CH2EN: u1,
    +                ///  Channel 2 capture/compare function polarity
    +                CH2P: u1,
    +                reserved12: u2,
    +                ///  Channel 3 capture/compare function enable
    +                CH3EN: u1,
    +                ///  Channel 3 capture/compare function polarity
    +                CH3P: u1,
    +                padding: u2,
    +            }),
    +            reserved36: [2]u8,
    +            ///  Counter register
    +            CNT: mmio.Mmio(packed struct(u16) {
    +                ///  counter value
    +                CNT: u16,
    +            }),
    +            reserved40: [2]u8,
    +            ///  Prescaler register
    +            PSC: mmio.Mmio(packed struct(u16) {
    +                ///  Prescaler value of the counter clock
    +                PSC: u16,
    +            }),
    +            reserved44: [2]u8,
    +            ///  Counter auto reload register
    +            CAR: mmio.Mmio(packed struct(u16) {
    +                ///  Counter auto reload value
    +                CARL: u16,
    +            }),
    +            reserved52: [6]u8,
    +            ///  Channel 0 capture/compare value register
    +            CH0CV: mmio.Mmio(packed struct(u32) {
    +                ///  Capture or compare value of channel 0
    +                CH0VAL: u16,
    +                padding: u16,
    +            }),
    +            ///  Channel 1 capture/compare value register
    +            CH1CV: mmio.Mmio(packed struct(u32) {
    +                ///  Capture or compare value of channel1
    +                CH1VAL: u16,
    +                padding: u16,
    +            }),
    +            ///  Channel 2 capture/compare value register
    +            CH2CV: mmio.Mmio(packed struct(u32) {
    +                ///  Capture or compare value of channel 2
    +                CH2VAL: u16,
    +                padding: u16,
    +            }),
    +            ///  Channel 3 capture/compare value register
    +            CH3CV: mmio.Mmio(packed struct(u32) {
    +                ///  Capture or compare value of channel 3
    +                CH3VAL: u16,
    +                padding: u16,
    +            }),
    +            reserved72: [4]u8,
    +            ///  DMA configuration register
    +            DMACFG: mmio.Mmio(packed struct(u16) {
    +                ///  DMA transfer access start address
    +                DMATA: u5,
    +                reserved8: u3,
    +                ///  DMA transfer count
    +                DMATC: u5,
    +                padding: u3,
    +            }),
    +            reserved76: [2]u8,
    +            ///  DMA transfer buffer register
    +            DMATB: mmio.Mmio(packed struct(u32) {
    +                ///  DMA transfer buffer
    +                DMATB: u16,
    +                padding: u16,
    +            }),
    +        };
    +    };
    +};
    diff --git a/src/hals/GD32VF103.zig b/src/hals/GD32VF103.zig
    new file mode 100644
    index 000000000..8b5c72840
    --- /dev/null
    +++ b/src/hals/GD32VF103.zig
    @@ -0,0 +1,112 @@
    +const micro = @import("microzig");
    +const peripherals = micro.chip.peripherals;
    +const UART3 = peripherals.UART3;
    +const UART4 = peripherals.UART4;
    +
    +pub const clock_frequencies = .{
    +    .cpu = 8_000_000, // 8 MHz
    +};
    +
    +pub fn parse_pin(comptime spec: []const u8) type {
    +    const invalid_format_msg = "The given pin '" ++ spec ++ "' has an invalid format. Pins must follow the format \"P{Port}{Pin}\" scheme.";
    +
    +    if (spec[0] != 'P')
    +        @compileError(invalid_format_msg);
    +    if (spec[1] < 'A' or spec[1] > 'E')
    +        @compileError(invalid_format_msg);
    +
    +    return struct {
    +        const pin_number: comptime_int = @import("std").fmt.parseInt(u2, spec[2..], 10) catch @compileError(invalid_format_msg);
    +        // 'A'...'E'
    +        const gpio_port_name = spec[1..2];
    +        const gpio_port = @field(peripherals, "GPIO" ++ gpio_port_name);
    +        const suffix = @import("std").fmt.comptimePrint("{d}", .{pin_number});
    +    };
    +}
    +
    +fn set_reg_field(reg: anytype, comptime field_name: anytype, value: anytype) void {
    +    var temp = reg.read();
    +    @field(temp, field_name) = value;
    +    reg.write(temp);
    +}
    +
    +pub const gpio = struct {
    +    pub fn set_output(comptime pin: type) void {
    +        _ = pin;
    +        // TODO: check if pin is already configured as output
    +    }
    +    pub fn set_input(comptime pin: type) void {
    +        _ = pin;
    +        // TODO: check if pin is already configured as input
    +    }
    +
    +    pub fn read(comptime pin: type) micro.gpio.State {
    +        _ = pin;
    +        // TODO: check if pin is configured as input
    +        return .low;
    +    }
    +
    +    pub fn write(comptime pin: type, state: micro.gpio.State) void {
    +        _ = pin;
    +        _ = state;
    +        // TODO: check if pin is configured as output
    +    }
    +};
    +
    +pub const uart = struct {
    +    pub const DataBits = enum(u2) {
    +        five = 0,
    +        six = 1,
    +        seven = 2,
    +        eight = 3,
    +    };
    +
    +    pub const StopBits = enum(u1) {
    +        one = 0,
    +        two = 1,
    +    };
    +
    +    pub const Parity = enum(u2) {
    +        odd = 0,
    +        even = 1,
    +        mark = 2,
    +        space = 3,
    +    };
    +};
    +
    +pub fn Uart(comptime index: usize, comptime pins: micro.uart.Pins) type {
    +    if (pins.tx != null or pins.rx != null)
    +        @compileError("TODO: custom pins are not currently supported");
    +
    +    return struct {
    +        const UARTn = switch (index) {
    +            0 => UART3,
    +            1 => UART4,
    +            else => @compileError("GD32VF103 has 2 UARTs available."),
    +        };
    +        const Self = @This();
    +
    +        pub fn init(config: micro.uart.Config) !Self {
    +            _ = config;
    +            return Self{};
    +        }
    +
    +        pub fn can_write(self: Self) bool {
    +            _ = self;
    +            return false;
    +        }
    +        pub fn tx(self: Self, ch: u8) void {
    +            _ = ch;
    +            while (!self.can_write()) {} // Wait for Previous transmission
    +        }
    +
    +        pub fn can_read(self: Self) bool {
    +            _ = self;
    +            return false;
    +        }
    +        pub fn rx(self: Self) u8 {
    +            while (!self.can_read()) {} // Wait till the data is received
    +            return 1; // Read received data
    +        }
    +    };
    +}
    
    From 7d81ecf65473cfa19ae7f8cbe9a7961dd79371d0 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sun, 19 Feb 2023 09:39:12 -0500
    Subject: [PATCH 047/286] Regz rewrite (#20)
    
    * update to new regz output
    
    * snake case
    
    * update with changes to microzig
    
    * remove symlink
    
    * add microzig submodule
    ---
     build.zig                              |    48 +-
     deps/microzig                          |     2 +-
     examples/adc.zig                       |     4 +-
     examples/blinky.zig                    |     2 +-
     examples/blinky_core1.zig              |     8 +-
     examples/gpio_clk.zig                  |     2 +-
     examples/pwm.zig                       |     6 +-
     examples/uart.zig                      |     8 +-
     src/boards.zig                         |    15 +
     src/{ => boards}/raspberry_pi_pico.zig |     0
     src/chips.zig                          |    25 +
     src/chips/RP2040.json                  | 43672 +++++++++++++++++++++++
     src/chips/RP2040.zig                   | 18145 ++++++++++
     src/hal.zig                            |     2 +-
     src/hal/adc.zig                        |    43 +-
     src/hal/clocks.zig                     |   150 +-
     src/hal/gpio.zig                       |    59 +-
     src/hal/irq.zig                        |     6 +-
     src/hal/multicore.zig                  |    46 +-
     src/hal/pins.zig                       |    66 +-
     src/hal/pll.zig                        |    78 +-
     src/hal/pwm.zig                        |    69 +-
     src/hal/resets.zig                     |    14 +-
     src/hal/time.zig                       |    24 +-
     src/hal/uart.zig                       |   121 +-
     src/hal/util.zig                       |     8 +-
     src/rp2040.zig                         | 28794 ---------------
     27 files changed, 62224 insertions(+), 29193 deletions(-)
     create mode 100644 src/boards.zig
     rename src/{ => boards}/raspberry_pi_pico.zig (100%)
     create mode 100644 src/chips.zig
     create mode 100644 src/chips/RP2040.json
     create mode 100644 src/chips/RP2040.zig
     delete mode 100644 src/rp2040.zig
    
    diff --git a/build.zig b/build.zig
    index 35bad24c9..51bb874e5 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -5,10 +5,10 @@ const comptimePrint = std.fmt.comptimePrint;
     
     pub const microzig = @import("deps/microzig/src/main.zig");
     
    -const chip_path = comptimePrint("{s}/src/rp2040.zig", .{root()});
    -const board_path = comptimePrint("{s}/src/raspberry_pi_pico.zig", .{root()});
    -const hal_path = comptimePrint("{s}/src/hal.zig", .{root()});
    -const linkerscript_path = comptimePrint("{s}/rp2040.ld", .{root()});
    +const chips = @import("src/chips.zig");
    +const boards = @import("src/boards.zig");
    +
    +const linkerscript_path = root() ++ "rp2040.ld";
     
     pub const BuildOptions = struct {
         optimize: std.builtin.OptimizeMode,
    @@ -19,32 +19,14 @@ pub fn addPiPicoExecutable(
         name: []const u8,
         source: []const u8,
         options: BuildOptions,
    -) microzig.EmbeddedExecutable {
    -    const rp2040 = microzig.Chip{
    -        .name = "RP2040",
    -        .path = chip_path,
    -        .cpu = microzig.cpus.cortex_m0plus,
    -        .memory_regions = &.{
    -            .{ .kind = .flash, .offset = 0x10000100, .length = (2048 * 1024) - 256 },
    -            .{ .kind = .flash, .offset = 0x10000000, .length = 256 },
    -            .{ .kind = .ram, .offset = 0x20000000, .length = 256 * 1024 },
    -        },
    -    };
    -
    -    const raspberry_pi_pico = microzig.Board{
    -        .name = "Raspberry Pi Pico",
    -        .path = board_path,
    -        .chip = rp2040,
    -    };
    -
    +) *microzig.EmbeddedExecutable {
         const ret = microzig.addEmbeddedExecutable(
             builder,
             name,
             source,
    -        .{ .board = raspberry_pi_pico },
    +        .{ .board = boards.raspberry_pi_pico },
             .{
                 .optimize = options.optimize,
    -            .hal_module_path = .{ .path = hal_path },
             },
         );
         ret.inner.setLinkerScriptPath(.{ .path = linkerscript_path });
    @@ -62,25 +44,27 @@ pub fn build(b: *Builder) !void {
     }
     
     fn root() []const u8 {
    -    return std.fs.path.dirname(@src().file) orelse ".";
    +    return comptime (std.fs.path.dirname(@src().file) orelse ".") ++ "/";
     }
     
     pub const Examples = struct {
    -    adc: microzig.EmbeddedExecutable,
    -    blinky: microzig.EmbeddedExecutable,
    -    blinky_core1: microzig.EmbeddedExecutable,
    -    gpio_clk: microzig.EmbeddedExecutable,
    -    pwm: microzig.EmbeddedExecutable,
    -    uart: microzig.EmbeddedExecutable,
    +    adc: *microzig.EmbeddedExecutable,
    +    blinky: *microzig.EmbeddedExecutable,
    +    blinky_core1: *microzig.EmbeddedExecutable,
    +    gpio_clk: *microzig.EmbeddedExecutable,
    +    pwm: *microzig.EmbeddedExecutable,
    +    uart: *microzig.EmbeddedExecutable,
         //uart_pins: microzig.EmbeddedExecutable,
     
         pub fn init(b: *Builder, optimize: std.builtin.OptimizeMode) Examples {
             var ret: Examples = undefined;
             inline for (@typeInfo(Examples).Struct.fields) |field| {
    +            const path = comptime root() ++ "examples/" ++ field.name ++ ".zig";
    +
                 @field(ret, field.name) = addPiPicoExecutable(
                     b,
                     field.name,
    -                comptime root() ++ "/examples/" ++ field.name ++ ".zig",
    +                path,
                     .{ .optimize = optimize },
                 );
             }
    diff --git a/deps/microzig b/deps/microzig
    index 9ccde9ff3..2d0ee5c47 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 9ccde9ff371b355394f65eacb6b51c5880768505
    +Subproject commit 2d0ee5c4731de1d81afb9c8e08ba4e8c2c2cfbf3
    diff --git a/examples/adc.zig b/examples/adc.zig
    index f8e8c6618..9800e9157 100644
    --- a/examples/adc.zig
    +++ b/examples/adc.zig
    @@ -27,11 +27,11 @@ pub fn init() void {
             .clock_config = rp2040.clock_config,
         });
     
    -    rp2040.uart.initLogger(uart);
    +    rp2040.uart.init_logger(uart);
     }
     
     pub fn main() void {
    -    while (true) : (time.sleepMs(1000)) {
    +    while (true) : (time.sleep_ms(1000)) {
             const sample = temp_sensor.read();
             std.log.info("temp value: {}", .{sample});
         }
    diff --git a/examples/blinky.zig b/examples/blinky.zig
    index ea3f2d8fd..5632fe349 100644
    --- a/examples/blinky.zig
    +++ b/examples/blinky.zig
    @@ -15,6 +15,6 @@ pub fn main() !void {
     
         while (true) {
             pins.led.toggle();
    -        time.sleepMs(250);
    +        time.sleep_ms(250);
         }
     }
    diff --git a/examples/blinky_core1.zig b/examples/blinky_core1.zig
    index a549f3094..b3fdd04da 100644
    --- a/examples/blinky_core1.zig
    +++ b/examples/blinky_core1.zig
    @@ -11,17 +11,17 @@ const led = 25;
     fn core1() void {
         while (true) {
             gpio.put(led, 1);
    -        time.sleepMs(250);
    +        time.sleep_ms(250);
             gpio.put(led, 0);
    -        time.sleepMs(250);
    +        time.sleep_ms(250);
         }
     }
     
     pub fn main() !void {
         gpio.init(led);
    -    gpio.setDir(led, .out);
    +    gpio.set_direction(led, .out);
     
    -    multicore.launchCore1(core1);
    +    multicore.launch_core1(core1);
     
         while (true) {
             microzig.cpu.wfi();
    diff --git a/examples/gpio_clk.zig b/examples/gpio_clk.zig
    index 52280e4a6..e66761c3b 100644
    --- a/examples/gpio_clk.zig
    +++ b/examples/gpio_clk.zig
    @@ -16,6 +16,6 @@ pub fn init() void {
     }
     
     pub fn main() !void {
    -    gpio.setFunction(gpout0_pin, .gpck);
    +    gpio.set_function(gpout0_pin, .gpck);
         while (true) {}
     }
    diff --git a/examples/pwm.zig b/examples/pwm.zig
    index 9eff04393..d372ef4c2 100644
    --- a/examples/pwm.zig
    +++ b/examples/pwm.zig
    @@ -13,11 +13,11 @@ const pin_config = rp2040.pins.GlobalConfiguration{
     
     pub fn main() !void {
         const pins = pin_config.apply();
    -    pins.led.slice().setWrap(100);
    -    pins.led.setLevel(10);
    +    pins.led.slice().set_wrap(100);
    +    pins.led.set_level(10);
         pins.led.slice().enable();
     
         while (true) {
    -        time.sleepMs(250);
    +        time.sleep_ms(250);
         }
     }
    diff --git a/examples/uart.zig b/examples/uart.zig
    index 7ccbe694a..6eb086415 100644
    --- a/examples/uart.zig
    +++ b/examples/uart.zig
    @@ -24,7 +24,7 @@ pub const log = rp2040.uart.log;
     pub fn main() !void {
         gpio.reset();
         gpio.init(led);
    -    gpio.setDir(led, .out);
    +    gpio.set_direction(led, .out);
         gpio.put(led, 1);
     
         const uart = rp2040.uart.UART.init(uart_id, .{
    @@ -34,15 +34,15 @@ pub fn main() !void {
             .clock_config = rp2040.clock_config,
         });
     
    -    rp2040.uart.initLogger(uart);
    +    rp2040.uart.init_logger(uart);
     
         var i: u32 = 0;
         while (true) : (i += 1) {
             gpio.put(led, 1);
             std.log.info("what {}", .{i});
    -        time.sleepMs(500);
    +        time.sleep_ms(500);
     
             gpio.put(led, 0);
    -        time.sleepMs(500);
    +        time.sleep_ms(500);
         }
     }
    diff --git a/src/boards.zig b/src/boards.zig
    new file mode 100644
    index 000000000..432918247
    --- /dev/null
    +++ b/src/boards.zig
    @@ -0,0 +1,15 @@
    +const std = @import("std");
    +const microzig = @import("../deps/microzig/src/main.zig");
    +const chips = @import("chips.zig");
    +
    +fn root_dir() []const u8 {
    +    return std.fs.path.dirname(@src().file) orelse ".";
    +}
    +
    +const board_path = std.fmt.comptimePrint("{s}/boards/raspberry_pi_pico.zig", .{root_dir()});
    +
    +pub const raspberry_pi_pico = microzig.Board{
    +    .name = "Raspberry Pi Pico",
    +    .source = .{ .path = board_path },
    +    .chip = chips.rp2040,
    +};
    diff --git a/src/raspberry_pi_pico.zig b/src/boards/raspberry_pi_pico.zig
    similarity index 100%
    rename from src/raspberry_pi_pico.zig
    rename to src/boards/raspberry_pi_pico.zig
    diff --git a/src/chips.zig b/src/chips.zig
    new file mode 100644
    index 000000000..5e0d39a20
    --- /dev/null
    +++ b/src/chips.zig
    @@ -0,0 +1,25 @@
    +const std = @import("std");
    +const microzig = @import("../deps/microzig/src/main.zig");
    +
    +fn root_dir() []const u8 {
    +    return std.fs.path.dirname(@src().file) orelse ".";
    +}
    +
    +const chip_path = std.fmt.comptimePrint("{s}/chips/RP2040.zig", .{root_dir()});
    +const hal_path = std.fmt.comptimePrint("{s}/hal.zig", .{root_dir()});
    +const json_register_schema_path = std.fmt.comptimePrint("{s}/chips/RP2040.json", .{root_dir()});
    +
    +pub const rp2040 = microzig.Chip{
    +    .name = "RP2040",
    +    .source = .{ .path = chip_path },
    +    .hal = .{ .path = hal_path },
    +    .cpu = microzig.cpus.cortex_m0plus,
    +    .memory_regions = &.{
    +        .{ .kind = .flash, .offset = 0x10000100, .length = (2048 * 1024) - 256 },
    +        .{ .kind = .flash, .offset = 0x10000000, .length = 256 },
    +        .{ .kind = .ram, .offset = 0x20000000, .length = 256 * 1024 },
    +    },
    +    .json_register_schema = .{
    +        .path = json_register_schema_path,
    +    },
    +};
    diff --git a/src/chips/RP2040.json b/src/chips/RP2040.json
    new file mode 100644
    index 000000000..6d26913ee
    --- /dev/null
    +++ b/src/chips/RP2040.json
    @@ -0,0 +1,43672 @@
    +{
    +  "version": "0.1.0",
    +  "types": {
    +    "peripherals": {
    +      "SCS": {
    +        "description": "System Control Space",
    +        "children": {
    +          "register_groups": {
    +            "SysTick": {
    +              "description": "System Tick Timer",
    +              "children": {
    +                "registers": {
    +                  "CTRL": {
    +                    "description": "SysTick Control and Status Register",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "ENABLE": {
    +                          "offset": 0,
    +                          "size": 1
    +                        },
    +                        "TICKINT": {
    +                          "offset": 1,
    +                          "size": 1
    +                        },
    +                        "CLKSOURCE": {
    +                          "offset": 2,
    +                          "size": 1
    +                        },
    +                        "COUNTFLAG": {
    +                          "offset": 16,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "LOAD": {
    +                    "description": "SysTick Reload Value Register",
    +                    "offset": 4,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "RELOAD": {
    +                          "offset": 0,
    +                          "size": 24
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "VAL": {
    +                    "description": "SysTick Current Value Register",
    +                    "offset": 8,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "CURRENT": {
    +                          "offset": 0,
    +                          "size": 24
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CALIB": {
    +                    "description": "SysTick Calibration Register",
    +                    "offset": 12,
    +                    "size": 32,
    +                    "access": "read-only",
    +                    "children": {
    +                      "fields": {
    +                        "TENMS": {
    +                          "offset": 0,
    +                          "size": 24
    +                        },
    +                        "SKEW": {
    +                          "offset": 30,
    +                          "size": 1
    +                        },
    +                        "NOREF": {
    +                          "offset": 31,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "SCB": {
    +              "description": "System Control Block",
    +              "children": {
    +                "registers": {
    +                  "CPUID": {
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only",
    +                    "children": {
    +                      "fields": {
    +                        "REVISION": {
    +                          "offset": 0,
    +                          "size": 4
    +                        },
    +                        "PARTNO": {
    +                          "offset": 4,
    +                          "size": 12
    +                        },
    +                        "ARCHITECTURE": {
    +                          "offset": 16,
    +                          "size": 4
    +                        },
    +                        "VARIANT": {
    +                          "offset": 20,
    +                          "size": 4
    +                        },
    +                        "IMPLEMENTER": {
    +                          "offset": 24,
    +                          "size": 8
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ICSR": {
    +                    "description": "Interrupt Control and State Register",
    +                    "offset": 4,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "VECTACTIVE": {
    +                          "offset": 0,
    +                          "size": 9
    +                        },
    +                        "VECTPENDING": {
    +                          "offset": 12,
    +                          "size": 9
    +                        },
    +                        "ISRPENDING": {
    +                          "offset": 22,
    +                          "size": 1
    +                        },
    +                        "ISRPREEMPT": {
    +                          "offset": 23,
    +                          "size": 1
    +                        },
    +                        "PENDSTCLR": {
    +                          "offset": 25,
    +                          "size": 1
    +                        },
    +                        "PENDSTSET": {
    +                          "offset": 26,
    +                          "size": 1
    +                        },
    +                        "PENDSVCLR": {
    +                          "offset": 27,
    +                          "size": 1
    +                        },
    +                        "PENDSVSET": {
    +                          "offset": 28,
    +                          "size": 1
    +                        },
    +                        "NMIPENDSET": {
    +                          "offset": 31,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AIRCR": {
    +                    "description": "Application Interrupt and Reset Control Register",
    +                    "offset": 12,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "VECTCLRACTIVE": {
    +                          "offset": 1,
    +                          "size": 1
    +                        },
    +                        "SYSRESETREQ": {
    +                          "offset": 2,
    +                          "size": 1
    +                        },
    +                        "ENDIANESS": {
    +                          "offset": 15,
    +                          "size": 1
    +                        },
    +                        "VECTKEY": {
    +                          "offset": 16,
    +                          "size": 16
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SCR": {
    +                    "description": "System Control Register",
    +                    "offset": 16,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "SLEEPONEXIT": {
    +                          "offset": 1,
    +                          "size": 1
    +                        },
    +                        "SLEEPDEEP": {
    +                          "offset": 2,
    +                          "size": 1
    +                        },
    +                        "SEVONPEND": {
    +                          "offset": 4,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CCR": {
    +                    "description": "Configuration Control Register",
    +                    "offset": 20,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "UNALIGN_TRP": {
    +                          "offset": 3,
    +                          "size": 1
    +                        },
    +                        "STKALIGN": {
    +                          "offset": 9,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SHP": {
    +                    "description": "System Handlers Priority Registers. [0] is RESERVED",
    +                    "offset": 28,
    +                    "size": 32
    +                  },
    +                  "SHCSR": {
    +                    "description": "System Handler Control and State Register",
    +                    "offset": 36,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "SVCALLPENDED": {
    +                          "offset": 15,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "VTOR": {
    +                    "description": "Vector Table Offset Register",
    +                    "offset": 8,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "TBLOFF": {
    +                          "offset": 8,
    +                          "size": 24
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "NVIC": {
    +              "description": "Nested Vectored Interrupt Controller",
    +              "children": {
    +                "registers": {
    +                  "ISER": {
    +                    "description": "Interrupt Set Enable Register",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "XIP_IRQ": {
    +                          "offset": 6,
    +                          "size": 1
    +                        },
    +                        "CLOCKS_IRQ": {
    +                          "offset": 17,
    +                          "size": 1
    +                        },
    +                        "IO_IRQ_BANK0": {
    +                          "offset": 13,
    +                          "size": 1
    +                        },
    +                        "IO_IRQ_QSPI": {
    +                          "offset": 14,
    +                          "size": 1
    +                        },
    +                        "UART0_IRQ": {
    +                          "offset": 20,
    +                          "size": 1
    +                        },
    +                        "UART1_IRQ": {
    +                          "offset": 21,
    +                          "size": 1
    +                        },
    +                        "SPI0_IRQ": {
    +                          "offset": 18,
    +                          "size": 1
    +                        },
    +                        "SPI1_IRQ": {
    +                          "offset": 19,
    +                          "size": 1
    +                        },
    +                        "I2C0_IRQ": {
    +                          "offset": 23,
    +                          "size": 1
    +                        },
    +                        "I2C1_IRQ": {
    +                          "offset": 24,
    +                          "size": 1
    +                        },
    +                        "ADC_IRQ_FIFO": {
    +                          "offset": 22,
    +                          "size": 1
    +                        },
    +                        "PWM_IRQ_WRAP": {
    +                          "offset": 4,
    +                          "size": 1
    +                        },
    +                        "TIMER_IRQ_0": {
    +                          "offset": 0,
    +                          "size": 1
    +                        },
    +                        "TIMER_IRQ_1": {
    +                          "offset": 1,
    +                          "size": 1
    +                        },
    +                        "TIMER_IRQ_2": {
    +                          "offset": 2,
    +                          "size": 1
    +                        },
    +                        "TIMER_IRQ_3": {
    +                          "offset": 3,
    +                          "size": 1
    +                        },
    +                        "RTC_IRQ": {
    +                          "offset": 25,
    +                          "size": 1
    +                        },
    +                        "DMA_IRQ_0": {
    +                          "offset": 11,
    +                          "size": 1
    +                        },
    +                        "DMA_IRQ_1": {
    +                          "offset": 12,
    +                          "size": 1
    +                        },
    +                        "USBCTRL_IRQ": {
    +                          "offset": 5,
    +                          "size": 1
    +                        },
    +                        "PIO0_IRQ_0": {
    +                          "offset": 7,
    +                          "size": 1
    +                        },
    +                        "PIO0_IRQ_1": {
    +                          "offset": 8,
    +                          "size": 1
    +                        },
    +                        "PIO1_IRQ_0": {
    +                          "offset": 9,
    +                          "size": 1
    +                        },
    +                        "PIO1_IRQ_1": {
    +                          "offset": 10,
    +                          "size": 1
    +                        },
    +                        "SIO_IRQ_PROC0": {
    +                          "offset": 15,
    +                          "size": 1
    +                        },
    +                        "SIO_IRQ_PROC1": {
    +                          "offset": 16,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ICER": {
    +                    "description": "Interrupt Clear Enable Register",
    +                    "offset": 128,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "XIP_IRQ": {
    +                          "offset": 6,
    +                          "size": 1
    +                        },
    +                        "CLOCKS_IRQ": {
    +                          "offset": 17,
    +                          "size": 1
    +                        },
    +                        "IO_IRQ_BANK0": {
    +                          "offset": 13,
    +                          "size": 1
    +                        },
    +                        "IO_IRQ_QSPI": {
    +                          "offset": 14,
    +                          "size": 1
    +                        },
    +                        "UART0_IRQ": {
    +                          "offset": 20,
    +                          "size": 1
    +                        },
    +                        "UART1_IRQ": {
    +                          "offset": 21,
    +                          "size": 1
    +                        },
    +                        "SPI0_IRQ": {
    +                          "offset": 18,
    +                          "size": 1
    +                        },
    +                        "SPI1_IRQ": {
    +                          "offset": 19,
    +                          "size": 1
    +                        },
    +                        "I2C0_IRQ": {
    +                          "offset": 23,
    +                          "size": 1
    +                        },
    +                        "I2C1_IRQ": {
    +                          "offset": 24,
    +                          "size": 1
    +                        },
    +                        "ADC_IRQ_FIFO": {
    +                          "offset": 22,
    +                          "size": 1
    +                        },
    +                        "PWM_IRQ_WRAP": {
    +                          "offset": 4,
    +                          "size": 1
    +                        },
    +                        "TIMER_IRQ_0": {
    +                          "offset": 0,
    +                          "size": 1
    +                        },
    +                        "TIMER_IRQ_1": {
    +                          "offset": 1,
    +                          "size": 1
    +                        },
    +                        "TIMER_IRQ_2": {
    +                          "offset": 2,
    +                          "size": 1
    +                        },
    +                        "TIMER_IRQ_3": {
    +                          "offset": 3,
    +                          "size": 1
    +                        },
    +                        "RTC_IRQ": {
    +                          "offset": 25,
    +                          "size": 1
    +                        },
    +                        "DMA_IRQ_0": {
    +                          "offset": 11,
    +                          "size": 1
    +                        },
    +                        "DMA_IRQ_1": {
    +                          "offset": 12,
    +                          "size": 1
    +                        },
    +                        "USBCTRL_IRQ": {
    +                          "offset": 5,
    +                          "size": 1
    +                        },
    +                        "PIO0_IRQ_0": {
    +                          "offset": 7,
    +                          "size": 1
    +                        },
    +                        "PIO0_IRQ_1": {
    +                          "offset": 8,
    +                          "size": 1
    +                        },
    +                        "PIO1_IRQ_0": {
    +                          "offset": 9,
    +                          "size": 1
    +                        },
    +                        "PIO1_IRQ_1": {
    +                          "offset": 10,
    +                          "size": 1
    +                        },
    +                        "SIO_IRQ_PROC0": {
    +                          "offset": 15,
    +                          "size": 1
    +                        },
    +                        "SIO_IRQ_PROC1": {
    +                          "offset": 16,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ISPR": {
    +                    "description": "Interrupt Set Pending Register",
    +                    "offset": 256,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "XIP_IRQ": {
    +                          "offset": 6,
    +                          "size": 1
    +                        },
    +                        "CLOCKS_IRQ": {
    +                          "offset": 17,
    +                          "size": 1
    +                        },
    +                        "IO_IRQ_BANK0": {
    +                          "offset": 13,
    +                          "size": 1
    +                        },
    +                        "IO_IRQ_QSPI": {
    +                          "offset": 14,
    +                          "size": 1
    +                        },
    +                        "UART0_IRQ": {
    +                          "offset": 20,
    +                          "size": 1
    +                        },
    +                        "UART1_IRQ": {
    +                          "offset": 21,
    +                          "size": 1
    +                        },
    +                        "SPI0_IRQ": {
    +                          "offset": 18,
    +                          "size": 1
    +                        },
    +                        "SPI1_IRQ": {
    +                          "offset": 19,
    +                          "size": 1
    +                        },
    +                        "I2C0_IRQ": {
    +                          "offset": 23,
    +                          "size": 1
    +                        },
    +                        "I2C1_IRQ": {
    +                          "offset": 24,
    +                          "size": 1
    +                        },
    +                        "ADC_IRQ_FIFO": {
    +                          "offset": 22,
    +                          "size": 1
    +                        },
    +                        "PWM_IRQ_WRAP": {
    +                          "offset": 4,
    +                          "size": 1
    +                        },
    +                        "TIMER_IRQ_0": {
    +                          "offset": 0,
    +                          "size": 1
    +                        },
    +                        "TIMER_IRQ_1": {
    +                          "offset": 1,
    +                          "size": 1
    +                        },
    +                        "TIMER_IRQ_2": {
    +                          "offset": 2,
    +                          "size": 1
    +                        },
    +                        "TIMER_IRQ_3": {
    +                          "offset": 3,
    +                          "size": 1
    +                        },
    +                        "RTC_IRQ": {
    +                          "offset": 25,
    +                          "size": 1
    +                        },
    +                        "DMA_IRQ_0": {
    +                          "offset": 11,
    +                          "size": 1
    +                        },
    +                        "DMA_IRQ_1": {
    +                          "offset": 12,
    +                          "size": 1
    +                        },
    +                        "USBCTRL_IRQ": {
    +                          "offset": 5,
    +                          "size": 1
    +                        },
    +                        "PIO0_IRQ_0": {
    +                          "offset": 7,
    +                          "size": 1
    +                        },
    +                        "PIO0_IRQ_1": {
    +                          "offset": 8,
    +                          "size": 1
    +                        },
    +                        "PIO1_IRQ_0": {
    +                          "offset": 9,
    +                          "size": 1
    +                        },
    +                        "PIO1_IRQ_1": {
    +                          "offset": 10,
    +                          "size": 1
    +                        },
    +                        "SIO_IRQ_PROC0": {
    +                          "offset": 15,
    +                          "size": 1
    +                        },
    +                        "SIO_IRQ_PROC1": {
    +                          "offset": 16,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ICPR": {
    +                    "description": "Interrupt Clear Pending Register",
    +                    "offset": 384,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "XIP_IRQ": {
    +                          "offset": 6,
    +                          "size": 1
    +                        },
    +                        "CLOCKS_IRQ": {
    +                          "offset": 17,
    +                          "size": 1
    +                        },
    +                        "IO_IRQ_BANK0": {
    +                          "offset": 13,
    +                          "size": 1
    +                        },
    +                        "IO_IRQ_QSPI": {
    +                          "offset": 14,
    +                          "size": 1
    +                        },
    +                        "UART0_IRQ": {
    +                          "offset": 20,
    +                          "size": 1
    +                        },
    +                        "UART1_IRQ": {
    +                          "offset": 21,
    +                          "size": 1
    +                        },
    +                        "SPI0_IRQ": {
    +                          "offset": 18,
    +                          "size": 1
    +                        },
    +                        "SPI1_IRQ": {
    +                          "offset": 19,
    +                          "size": 1
    +                        },
    +                        "I2C0_IRQ": {
    +                          "offset": 23,
    +                          "size": 1
    +                        },
    +                        "I2C1_IRQ": {
    +                          "offset": 24,
    +                          "size": 1
    +                        },
    +                        "ADC_IRQ_FIFO": {
    +                          "offset": 22,
    +                          "size": 1
    +                        },
    +                        "PWM_IRQ_WRAP": {
    +                          "offset": 4,
    +                          "size": 1
    +                        },
    +                        "TIMER_IRQ_0": {
    +                          "offset": 0,
    +                          "size": 1
    +                        },
    +                        "TIMER_IRQ_1": {
    +                          "offset": 1,
    +                          "size": 1
    +                        },
    +                        "TIMER_IRQ_2": {
    +                          "offset": 2,
    +                          "size": 1
    +                        },
    +                        "TIMER_IRQ_3": {
    +                          "offset": 3,
    +                          "size": 1
    +                        },
    +                        "RTC_IRQ": {
    +                          "offset": 25,
    +                          "size": 1
    +                        },
    +                        "DMA_IRQ_0": {
    +                          "offset": 11,
    +                          "size": 1
    +                        },
    +                        "DMA_IRQ_1": {
    +                          "offset": 12,
    +                          "size": 1
    +                        },
    +                        "USBCTRL_IRQ": {
    +                          "offset": 5,
    +                          "size": 1
    +                        },
    +                        "PIO0_IRQ_0": {
    +                          "offset": 7,
    +                          "size": 1
    +                        },
    +                        "PIO0_IRQ_1": {
    +                          "offset": 8,
    +                          "size": 1
    +                        },
    +                        "PIO1_IRQ_0": {
    +                          "offset": 9,
    +                          "size": 1
    +                        },
    +                        "PIO1_IRQ_1": {
    +                          "offset": 10,
    +                          "size": 1
    +                        },
    +                        "SIO_IRQ_PROC0": {
    +                          "offset": 15,
    +                          "size": 1
    +                        },
    +                        "SIO_IRQ_PROC1": {
    +                          "offset": 16,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IPR0": {
    +                    "description": "Interrupt Priority Register",
    +                    "offset": 768,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "TIMER_IRQ_0": {
    +                          "offset": 6,
    +                          "size": 2
    +                        },
    +                        "TIMER_IRQ_1": {
    +                          "offset": 14,
    +                          "size": 2
    +                        },
    +                        "TIMER_IRQ_2": {
    +                          "offset": 22,
    +                          "size": 2
    +                        },
    +                        "TIMER_IRQ_3": {
    +                          "offset": 30,
    +                          "size": 2
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IPR1": {
    +                    "description": "Interrupt Priority Register",
    +                    "offset": 772,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "XIP_IRQ": {
    +                          "offset": 22,
    +                          "size": 2
    +                        },
    +                        "PWM_IRQ_WRAP": {
    +                          "offset": 6,
    +                          "size": 2
    +                        },
    +                        "USBCTRL_IRQ": {
    +                          "offset": 14,
    +                          "size": 2
    +                        },
    +                        "PIO0_IRQ_0": {
    +                          "offset": 30,
    +                          "size": 2
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IPR2": {
    +                    "description": "Interrupt Priority Register",
    +                    "offset": 776,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "DMA_IRQ_0": {
    +                          "offset": 30,
    +                          "size": 2
    +                        },
    +                        "PIO0_IRQ_1": {
    +                          "offset": 6,
    +                          "size": 2
    +                        },
    +                        "PIO1_IRQ_0": {
    +                          "offset": 14,
    +                          "size": 2
    +                        },
    +                        "PIO1_IRQ_1": {
    +                          "offset": 22,
    +                          "size": 2
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IPR3": {
    +                    "description": "Interrupt Priority Register",
    +                    "offset": 780,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "IO_IRQ_BANK0": {
    +                          "offset": 14,
    +                          "size": 2
    +                        },
    +                        "IO_IRQ_QSPI": {
    +                          "offset": 22,
    +                          "size": 2
    +                        },
    +                        "DMA_IRQ_1": {
    +                          "offset": 6,
    +                          "size": 2
    +                        },
    +                        "SIO_IRQ_PROC0": {
    +                          "offset": 30,
    +                          "size": 2
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IPR4": {
    +                    "description": "Interrupt Priority Register",
    +                    "offset": 784,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "CLOCKS_IRQ": {
    +                          "offset": 14,
    +                          "size": 2
    +                        },
    +                        "SPI0_IRQ": {
    +                          "offset": 22,
    +                          "size": 2
    +                        },
    +                        "SPI1_IRQ": {
    +                          "offset": 30,
    +                          "size": 2
    +                        },
    +                        "SIO_IRQ_PROC1": {
    +                          "offset": 6,
    +                          "size": 2
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IPR5": {
    +                    "description": "Interrupt Priority Register",
    +                    "offset": 788,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "UART0_IRQ": {
    +                          "offset": 6,
    +                          "size": 2
    +                        },
    +                        "UART1_IRQ": {
    +                          "offset": 14,
    +                          "size": 2
    +                        },
    +                        "I2C0_IRQ": {
    +                          "offset": 30,
    +                          "size": 2
    +                        },
    +                        "ADC_IRQ_FIFO": {
    +                          "offset": 22,
    +                          "size": 2
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IPR6": {
    +                    "description": "Interrupt Priority Register",
    +                    "offset": 792,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "I2C1_IRQ": {
    +                          "offset": 6,
    +                          "size": 2
    +                        },
    +                        "RTC_IRQ": {
    +                          "offset": 14,
    +                          "size": 2
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IPR7": {
    +                    "description": "Interrupt Priority Register",
    +                    "offset": 796,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MPU": {
    +              "description": "Memory Protection Unit",
    +              "children": {
    +                "registers": {
    +                  "TYPE": {
    +                    "description": "MPU Type Register",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only",
    +                    "children": {
    +                      "fields": {
    +                        "SEPARATE": {
    +                          "offset": 0,
    +                          "size": 1
    +                        },
    +                        "DREGION": {
    +                          "offset": 8,
    +                          "size": 8
    +                        },
    +                        "IREGION": {
    +                          "offset": 16,
    +                          "size": 8
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CTRL": {
    +                    "description": "MPU Control Register",
    +                    "offset": 4,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "ENABLE": {
    +                          "offset": 0,
    +                          "size": 1
    +                        },
    +                        "HFNMIENA": {
    +                          "offset": 1,
    +                          "size": 1
    +                        },
    +                        "PRIVDEFENA": {
    +                          "offset": 2,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RNR": {
    +                    "description": "MPU Region RNRber Register",
    +                    "offset": 8,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "REGION": {
    +                          "offset": 0,
    +                          "size": 8
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RBAR": {
    +                    "description": "MPU Region Base Address Register",
    +                    "offset": 12,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "REGION": {
    +                          "offset": 0,
    +                          "size": 4
    +                        },
    +                        "VALID": {
    +                          "offset": 4,
    +                          "size": 1
    +                        },
    +                        "ADDR": {
    +                          "offset": 8,
    +                          "size": 24
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RASR": {
    +                    "description": "MPU Region Attribute and Size Register",
    +                    "offset": 16,
    +                    "size": 32,
    +                    "children": {
    +                      "fields": {
    +                        "ENABLE": {
    +                          "offset": 0,
    +                          "size": 1
    +                        },
    +                        "SIZE": {
    +                          "offset": 1,
    +                          "size": 5
    +                        },
    +                        "SRD": {
    +                          "offset": 8,
    +                          "size": 8
    +                        },
    +                        "B": {
    +                          "offset": 16,
    +                          "size": 1
    +                        },
    +                        "C": {
    +                          "offset": 17,
    +                          "size": 1
    +                        },
    +                        "S": {
    +                          "offset": 18,
    +                          "size": 1
    +                        },
    +                        "TEX": {
    +                          "offset": 19,
    +                          "size": 3
    +                        },
    +                        "AP": {
    +                          "offset": 24,
    +                          "size": 3
    +                        },
    +                        "XN": {
    +                          "offset": 28,
    +                          "size": 1
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "XIP_CTRL": {
    +        "description": "QSPI flash execute-in-place block",
    +        "children": {
    +          "registers": {
    +            "CTRL": {
    +              "description": "Cache control",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 3,
    +              "children": {
    +                "fields": {
    +                  "POWER_DOWN": {
    +                    "description": "When 1, the cache memories are powered down. They retain state,\\n\n                but can not be accessed. This reduces static power dissipation.\\n\n                Writing 1 to this bit forces CTRL_EN to 0, i.e. the cache cannot\\n\n                be enabled when powered down.\\n\n                Cache-as-SRAM accesses will produce a bus error response when\\n\n                the cache is powered down.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ERR_BADWRITE": {
    +                    "description": "When 1, writes to any alias other than 0x0 (caching, allocating)\\n\n                will produce a bus fault. When 0, these writes are silently ignored.\\n\n                In either case, writes to the 0x0 alias will deallocate on tag match,\\n\n                as usual.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "When 1, enable the cache. When the cache is disabled, all XIP accesses\\n\n                will go straight to the flash, without querying the cache. When enabled,\\n\n                cacheable XIP accesses will query the cache, and the flash will\\n\n                not be accessed if the tag matches and the valid bit is set.\\n\\n\n                If the cache is enabled, cache-as-SRAM accesses have no effect on the\\n\n                cache data RAM, and will produce a bus error response.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FLUSH": {
    +              "description": "Cache Flush control",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FLUSH": {
    +                    "description": "Write 1 to flush the cache. This clears the tag memory, but\\n\n                the data memory retains its contents. (This means cache-as-SRAM\\n\n                contents is not affected by flush or reset.)\\n\n                Reading will hold the bus (stall the processor) until the flush\\n\n                completes. Alternatively STAT can be polled until completion.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "STAT": {
    +              "description": "Cache Status",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 2,
    +              "children": {
    +                "fields": {
    +                  "FIFO_FULL": {
    +                    "description": "When 1, indicates the XIP streaming FIFO is completely full.\\n\n                The streaming FIFO is 2 entries deep, so the full and empty\\n\n                flag allow its level to be ascertained.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FIFO_EMPTY": {
    +                    "description": "When 1, indicates the XIP streaming FIFO is completely empty.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FLUSH_READY": {
    +                    "description": "Reads as 0 while a cache flush is in progress, and 1 otherwise.\\n\n                The cache is flushed whenever the XIP block is reset, and also\\n\n                when requested via the FLUSH register.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CTR_HIT": {
    +              "description": "Cache Hit counter\\n\n            A 32 bit saturating counter that increments upon each cache hit,\\n\n            i.e. when an XIP access is serviced directly from cached data.\\n\n            Write any value to clear.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CTR_ACC": {
    +              "description": "Cache Access counter\\n\n            A 32 bit saturating counter that increments upon each XIP access,\\n\n            whether the cache is hit or not. This includes noncacheable accesses.\\n\n            Write any value to clear.",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "STREAM_ADDR": {
    +              "description": "FIFO stream address",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "STREAM_ADDR": {
    +                    "description": "The address of the next word to be streamed from flash to the streaming FIFO.\\n\n                Increments automatically after each flash access.\\n\n                Write the initial access address here before starting a streaming read.",
    +                    "offset": 2,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "STREAM_CTR": {
    +              "description": "FIFO stream control",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "STREAM_CTR": {
    +                    "description": "Write a nonzero value to start a streaming read. This will then\\n\n                progress in the background, using flash idle cycles to transfer\\n\n                a linear data block from flash to the streaming FIFO.\\n\n                Decrements automatically (1 at a time) as the stream\\n\n                progresses, and halts on reaching 0.\\n\n                Write 0 to halt an in-progress stream, and discard any in-flight\\n\n                read, so that a new stream can immediately be started (after\\n\n                draining the FIFO and reinitialising STREAM_ADDR)",
    +                    "offset": 0,
    +                    "size": 22
    +                  }
    +                }
    +              }
    +            },
    +            "STREAM_FIFO": {
    +              "description": "FIFO stream data\\n\n            Streamed data is buffered here, for retrieval by the system DMA.\\n\n            This FIFO can also be accessed via the XIP_AUX slave, to avoid exposing\\n\n            the DMA to bus stalls caused by other XIP traffic.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            }
    +          }
    +        }
    +      },
    +      "XIP_SSI": {
    +        "description": "DW_apb_ssi has the following features:\\n\n        * APB interface – Allows for easy integration into a DesignWare Synthesizable Components for AMBA 2 implementation.\\n\n        * APB3 and APB4 protocol support.\\n\n        * Scalable APB data bus width – Supports APB data bus widths of 8, 16, and 32 bits.\\n\n        * Serial-master or serial-slave operation – Enables serial communication with serial-master or serial-slave peripheral devices.\\n\n        * Programmable Dual/Quad/Octal SPI support in Master Mode.\\n\n        * Dual Data Rate (DDR) and Read Data Strobe (RDS) Support - Enables the DW_apb_ssi master to perform operations with the device in DDR and RDS modes when working in Dual/Quad/Octal mode of operation.\\n\n        * Data Mask Support - Enables the DW_apb_ssi to selectively update the bytes in the device. This feature is applicable only in enhanced SPI modes.\\n\n        * eXecute-In-Place (XIP) support - Enables the DW_apb_ssi master to behave as a memory mapped I/O and fetches the data from the device based on the APB read request. This feature is applicable only in enhanced SPI modes.\\n\n        * DMA Controller Interface – Enables the DW_apb_ssi to interface to a DMA controller over the bus using a handshaking interface for transfer requests.\\n\n        * Independent masking of interrupts – Master collision, transmit FIFO overflow, transmit FIFO empty, receive FIFO full, receive FIFO underflow, and receive FIFO overflow interrupts can all be masked independently.\\n\n        * Multi-master contention detection – Informs the processor of multiple serial-master accesses on the serial bus.\\n\n        * Bypass of meta-stability flip-flops for synchronous clocks – When the APB clock (pclk) and the DW_apb_ssi serial clock (ssi_clk) are synchronous, meta-stable flip-flops are not used when transferring control signals across these clock domains.\\n\n        * Programmable delay on the sample time of the received serial data bit (rxd); enables programmable control of routing delays resulting in higher serial data-bit rates.\\n\n        * Programmable features:\\n\n        - Serial interface operation – Choice of Motorola SPI, Texas Instruments Synchronous Serial Protocol or National Semiconductor Microwire.\\n\n        - Clock bit-rate – Dynamic control of the serial bit rate of the data transfer; used in only serial-master mode of operation.\\n\n        - Data Item size (4 to 32 bits) – Item size of each data transfer under the control of the programmer.\\n\n        * Configured features:\\n\n        - FIFO depth – 16 words deep. The FIFO width is fixed at 32 bits.\\n\n        - 1 slave select output.\\n\n        - Hardware slave-select – Dedicated hardware slave-select line.\\n\n        - Combined interrupt line - one combined interrupt line from the DW_apb_ssi to the interrupt controller.\\n\n        - Interrupt polarity – active high interrupt lines.\\n\n        - Serial clock polarity – low serial-clock polarity directly after reset.\\n\n        - Serial clock phase – capture on first edge of serial-clock directly after reset.",
    +        "children": {
    +          "registers": {
    +            "CTRLR0": {
    +              "description": "Control register 0",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SSTE": {
    +                    "description": "Slave select toggle enable",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "SPI_FRF": {
    +                    "description": "SPI frame format",
    +                    "offset": 21,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "STD": {
    +                            "description": "Standard 1-bit SPI frame format; 1 bit per SCK, full-duplex",
    +                            "value": 0
    +                          },
    +                          "DUAL": {
    +                            "description": "Dual-SPI frame format; two bits per SCK, half-duplex",
    +                            "value": 1
    +                          },
    +                          "QUAD": {
    +                            "description": "Quad-SPI frame format; four bits per SCK, half-duplex",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DFS_32": {
    +                    "description": "Data frame size in 32b transfer mode\\n\n                Value of n -> n+1 clocks per frame.",
    +                    "offset": 16,
    +                    "size": 5
    +                  },
    +                  "CFS": {
    +                    "description": "Control frame size\\n\n                Value of n -> n+1 clocks per frame.",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "SRL": {
    +                    "description": "Shift register loop (test mode)",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SLV_OE": {
    +                    "description": "Slave output enable",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TMOD": {
    +                    "description": "Transfer mode",
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TX_AND_RX": {
    +                            "description": "Both transmit and receive",
    +                            "value": 0
    +                          },
    +                          "TX_ONLY": {
    +                            "description": "Transmit only (not for FRF == 0, standard SPI mode)",
    +                            "value": 1
    +                          },
    +                          "RX_ONLY": {
    +                            "description": "Receive only (not for FRF == 0, standard SPI mode)",
    +                            "value": 2
    +                          },
    +                          "EEPROM_READ": {
    +                            "description": "EEPROM read mode (TX then RX; RX starts after control data TX'd)",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SCPOL": {
    +                    "description": "Serial clock polarity",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SCPH": {
    +                    "description": "Serial clock phase",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FRF": {
    +                    "description": "Frame format",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DFS": {
    +                    "description": "Data frame size",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CTRLR1": {
    +              "description": "Master Control register 1",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "NDF": {
    +                    "description": "Number of data frames",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SSIENR": {
    +              "description": "SSI Enable",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SSI_EN": {
    +                    "description": "SSI enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MWCR": {
    +              "description": "Microwire Control",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "MHS": {
    +                    "description": "Microwire handshaking",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MDD": {
    +                    "description": "Microwire control",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MWMOD": {
    +                    "description": "Microwire transfer mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SER": {
    +              "description": "Slave enable",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SER": {
    +                    "description": "For each bit:\\n\n                0 -> slave not selected\\n\n                1 -> slave selected",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BAUDR": {
    +              "description": "Baud rate",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SCKDV": {
    +                    "description": "SSI clock divider",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "TXFTLR": {
    +              "description": "TX FIFO threshold level",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "TFT": {
    +                    "description": "Transmit FIFO threshold",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "RXFTLR": {
    +              "description": "RX FIFO threshold level",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "RFT": {
    +                    "description": "Receive FIFO threshold",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TXFLR": {
    +              "description": "TX FIFO level",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "TFTFL": {
    +                    "description": "Transmit FIFO level",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RXFLR": {
    +              "description": "RX FIFO level",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "RXTFL": {
    +                    "description": "Receive FIFO level",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "Status register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "DCOL": {
    +                    "description": "Data collision error",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXE": {
    +                    "description": "Transmission error",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RFF": {
    +                    "description": "Receive FIFO full",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RFNE": {
    +                    "description": "Receive FIFO not empty",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TFE": {
    +                    "description": "Transmit FIFO empty",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TFNF": {
    +                    "description": "Transmit FIFO not full",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BUSY": {
    +                    "description": "SSI busy flag",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IMR": {
    +              "description": "Interrupt mask",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "MSTIM": {
    +                    "description": "Multi-master contention interrupt mask",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RXFIM": {
    +                    "description": "Receive FIFO full interrupt mask",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RXOIM": {
    +                    "description": "Receive FIFO overflow interrupt mask",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RXUIM": {
    +                    "description": "Receive FIFO underflow interrupt mask",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TXOIM": {
    +                    "description": "Transmit FIFO overflow interrupt mask",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TXEIM": {
    +                    "description": "Transmit FIFO empty interrupt mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ISR": {
    +              "description": "Interrupt status",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "MSTIS": {
    +                    "description": "Multi-master contention interrupt status",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXFIS": {
    +                    "description": "Receive FIFO full interrupt status",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXOIS": {
    +                    "description": "Receive FIFO overflow interrupt status",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXUIS": {
    +                    "description": "Receive FIFO underflow interrupt status",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXOIS": {
    +                    "description": "Transmit FIFO overflow interrupt status",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXEIS": {
    +                    "description": "Transmit FIFO empty interrupt status",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RISR": {
    +              "description": "Raw interrupt status",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "MSTIR": {
    +                    "description": "Multi-master contention raw interrupt status",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXFIR": {
    +                    "description": "Receive FIFO full raw interrupt status",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXOIR": {
    +                    "description": "Receive FIFO overflow raw interrupt status",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXUIR": {
    +                    "description": "Receive FIFO underflow raw interrupt status",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXOIR": {
    +                    "description": "Transmit FIFO overflow raw interrupt status",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXEIR": {
    +                    "description": "Transmit FIFO empty raw interrupt status",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "TXOICR": {
    +              "description": "TX FIFO overflow interrupt clear",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "TXOICR": {
    +                    "description": "Clear-on-read transmit FIFO overflow interrupt",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RXOICR": {
    +              "description": "RX FIFO overflow interrupt clear",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "RXOICR": {
    +                    "description": "Clear-on-read receive FIFO overflow interrupt",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RXUICR": {
    +              "description": "RX FIFO underflow interrupt clear",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "RXUICR": {
    +                    "description": "Clear-on-read receive FIFO underflow interrupt",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "MSTICR": {
    +              "description": "Multi-master interrupt clear",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "MSTICR": {
    +                    "description": "Clear-on-read multi-master contention interrupt",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "ICR": {
    +              "description": "Interrupt clear",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ICR": {
    +                    "description": "Clear-on-read all active interrupts",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DMACR": {
    +              "description": "DMA control",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "TDMAE": {
    +                    "description": "Transmit DMA enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RDMAE": {
    +                    "description": "Receive DMA enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMATDLR": {
    +              "description": "DMA TX data level",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "DMATDL": {
    +                    "description": "Transmit data watermark level",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "DMARDLR": {
    +              "description": "DMA RX data level",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "DMARDL": {
    +                    "description": "Receive data watermark level (DMARDLR+1)",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IDR": {
    +              "description": "Identification register",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 1364414537,
    +              "children": {
    +                "fields": {
    +                  "IDCODE": {
    +                    "description": "Peripheral dentification code",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SSI_VERSION_ID": {
    +              "description": "Version ID",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 875573546,
    +              "children": {
    +                "fields": {
    +                  "SSI_COMP_VERSION": {
    +                    "description": "SNPS component version (format X.YY)",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DR0": {
    +              "description": "Data Register 0 (of 36)",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "DR": {
    +                    "description": "First data register of 36",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "RX_SAMPLE_DLY": {
    +              "description": "RX sample delay",
    +              "offset": 240,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "RSD": {
    +                    "description": "RXD sample delay (in SCLK cycles)",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SPI_CTRLR0": {
    +              "description": "SPI control",
    +              "offset": 244,
    +              "size": 32,
    +              "reset_value": 50331648,
    +              "children": {
    +                "fields": {
    +                  "XIP_CMD": {
    +                    "description": "SPI Command to send in XIP mode (INST_L = 8-bit) or to append to Address (INST_L = 0-bit)",
    +                    "offset": 24,
    +                    "size": 8
    +                  },
    +                  "SPI_RXDS_EN": {
    +                    "description": "Read data strobe enable",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "INST_DDR_EN": {
    +                    "description": "Instruction DDR transfer enable",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "SPI_DDR_EN": {
    +                    "description": "SPI DDR transfer enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "WAIT_CYCLES": {
    +                    "description": "Wait cycles between control frame transmit and data reception (in SCLK cycles)",
    +                    "offset": 11,
    +                    "size": 5
    +                  },
    +                  "INST_L": {
    +                    "description": "Instruction length (0/4/8/16b)",
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NONE": {
    +                            "description": "No instruction",
    +                            "value": 0
    +                          },
    +                          "4B": {
    +                            "description": "4-bit instruction",
    +                            "value": 1
    +                          },
    +                          "8B": {
    +                            "description": "8-bit instruction",
    +                            "value": 2
    +                          },
    +                          "16B": {
    +                            "description": "16-bit instruction",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ADDR_L": {
    +                    "description": "Address length (0b-60b in 4b increments)",
    +                    "offset": 2,
    +                    "size": 4
    +                  },
    +                  "TRANS_TYPE": {
    +                    "description": "Address and instruction transfer format",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "1C1A": {
    +                            "description": "Command and address both in standard SPI frame format",
    +                            "value": 0
    +                          },
    +                          "1C2A": {
    +                            "description": "Command in standard SPI format, address in format specified by FRF",
    +                            "value": 1
    +                          },
    +                          "2C2A": {
    +                            "description": "Command and address both in format specified by FRF (e.g. Dual-SPI)",
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "TXD_DRIVE_EDGE": {
    +              "description": "TX drive edge",
    +              "offset": 248,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "TDE": {
    +                    "description": "TXD drive edge",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SYSINFO": {
    +        "children": {
    +          "registers": {
    +            "CHIP_ID": {
    +              "description": "JEDEC JEP-106 compliant chip identifier.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "REVISION": {
    +                    "offset": 28,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "PART": {
    +                    "offset": 12,
    +                    "size": 16,
    +                    "access": "read-only"
    +                  },
    +                  "MANUFACTURER": {
    +                    "offset": 0,
    +                    "size": 12,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PLATFORM": {
    +              "description": "Platform register. Allows software to know what environment it is running in.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ASIC": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FPGA": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GITREF_RP2040": {
    +              "description": "Git hash of the chip source. Used to identify chip version.",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            }
    +          }
    +        }
    +      },
    +      "SYSCFG": {
    +        "description": "Register block for various chip control signals",
    +        "children": {
    +          "registers": {
    +            "PROC0_NMI_MASK": {
    +              "description": "Processor core 0 NMI source mask\\n\n            Set a bit high to enable NMI from that IRQ",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "PROC1_NMI_MASK": {
    +              "description": "Processor core 1 NMI source mask\\n\n            Set a bit high to enable NMI from that IRQ",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "PROC_CONFIG": {
    +              "description": "Configuration for processors",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 268435456,
    +              "children": {
    +                "fields": {
    +                  "PROC1_DAP_INSTID": {
    +                    "description": "Configure proc1 DAP instance ID.\\n\n                Recommend that this is NOT changed until you require debug access in multi-chip environment\\n\n                WARNING: do not set to 15 as this is reserved for RescueDP",
    +                    "offset": 28,
    +                    "size": 4
    +                  },
    +                  "PROC0_DAP_INSTID": {
    +                    "description": "Configure proc0 DAP instance ID.\\n\n                Recommend that this is NOT changed until you require debug access in multi-chip environment\\n\n                WARNING: do not set to 15 as this is reserved for RescueDP",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "PROC1_HALTED": {
    +                    "description": "Indication that proc1 has halted",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PROC0_HALTED": {
    +                    "description": "Indication that proc0 has halted",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PROC_IN_SYNC_BYPASS": {
    +              "description": "For each bit, if 1, bypass the input synchronizer between that GPIO\\n\n            and the GPIO input register in the SIO. The input synchronizers should\\n\n            generally be unbypassed, to avoid injecting metastabilities into processors.\\n\n            If you're feeling brave, you can bypass to save two cycles of input\\n\n            latency. This register applies to GPIO 0...29.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "PROC_IN_SYNC_BYPASS": {
    +                    "offset": 0,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "PROC_IN_SYNC_BYPASS_HI": {
    +              "description": "For each bit, if 1, bypass the input synchronizer between that GPIO\\n\n            and the GPIO input register in the SIO. The input synchronizers should\\n\n            generally be unbypassed, to avoid injecting metastabilities into processors.\\n\n            If you're feeling brave, you can bypass to save two cycles of input\\n\n            latency. This register applies to GPIO 30...35 (the QSPI IOs).",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "PROC_IN_SYNC_BYPASS_HI": {
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "DBGFORCE": {
    +              "description": "Directly control the SWD debug port of either processor",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 102,
    +              "children": {
    +                "fields": {
    +                  "PROC1_ATTACH": {
    +                    "description": "Attach processor 1 debug port to syscfg controls, and disconnect it from external SWD pads.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PROC1_SWCLK": {
    +                    "description": "Directly drive processor 1 SWCLK, if PROC1_ATTACH is set",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "PROC1_SWDI": {
    +                    "description": "Directly drive processor 1 SWDIO input, if PROC1_ATTACH is set",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PROC1_SWDO": {
    +                    "description": "Observe the value of processor 1 SWDIO output.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PROC0_ATTACH": {
    +                    "description": "Attach processor 0 debug port to syscfg controls, and disconnect it from external SWD pads.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PROC0_SWCLK": {
    +                    "description": "Directly drive processor 0 SWCLK, if PROC0_ATTACH is set",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PROC0_SWDI": {
    +                    "description": "Directly drive processor 0 SWDIO input, if PROC0_ATTACH is set",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PROC0_SWDO": {
    +                    "description": "Observe the value of processor 0 SWDIO output.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "MEMPOWERDOWN": {
    +              "description": "Control power downs to memories. Set high to power down memories.\\n\n            Use with extreme caution",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ROM": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "USB": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SRAM5": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "SRAM4": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SRAM3": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SRAM2": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SRAM1": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SRAM0": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "CLOCKS": {
    +        "children": {
    +          "registers": {
    +            "CLK_GPOUT0_CTRL": {
    +              "description": "Clock control, can be changed on-the-fly (except for auxsrc)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "NUDGE": {
    +                    "description": "An edge on this signal shifts the phase of the output by 1 cycle of the input clock\\n\n                This can be done at any time",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "PHASE": {
    +                    "description": "This delays the enable signal by up to 3 cycles of the input clock\\n\n                This must be set before the clock is enabled to have any effect",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "DC50": {
    +                    "description": "Enables duty cycle correction for odd divisors",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ENABLE": {
    +                    "description": "Starts and stops the clock generator cleanly",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "KILL": {
    +                    "description": "Asynchronously kills the clock generator",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "AUXSRC": {
    +                    "description": "Selects the auxiliary clock source, will glitch when switching",
    +                    "offset": 5,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "clksrc_pll_sys": {
    +                            "value": 0
    +                          },
    +                          "clksrc_gpin0": {
    +                            "value": 1
    +                          },
    +                          "clksrc_gpin1": {
    +                            "value": 2
    +                          },
    +                          "clksrc_pll_usb": {
    +                            "value": 3
    +                          },
    +                          "rosc_clksrc": {
    +                            "value": 4
    +                          },
    +                          "xosc_clksrc": {
    +                            "value": 5
    +                          },
    +                          "clk_sys": {
    +                            "value": 6
    +                          },
    +                          "clk_usb": {
    +                            "value": 7
    +                          },
    +                          "clk_adc": {
    +                            "value": 8
    +                          },
    +                          "clk_rtc": {
    +                            "value": 9
    +                          },
    +                          "clk_ref": {
    +                            "value": 10
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CLK_GPOUT0_DIV": {
    +              "description": "Clock divisor, can be changed on-the-fly",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 256,
    +              "children": {
    +                "fields": {
    +                  "INT": {
    +                    "description": "Integer component of the divisor, 0 -> divide by 2^16",
    +                    "offset": 8,
    +                    "size": 24
    +                  },
    +                  "FRAC": {
    +                    "description": "Fractional component of the divisor",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLK_GPOUT0_SELECTED": {
    +              "description": "Indicates which SRC is currently selected by the glitchless mux (one-hot).\\n\n            This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 1,
    +              "access": "read-only"
    +            },
    +            "CLK_GPOUT1_CTRL": {
    +              "description": "Clock control, can be changed on-the-fly (except for auxsrc)",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "NUDGE": {
    +                    "description": "An edge on this signal shifts the phase of the output by 1 cycle of the input clock\\n\n                This can be done at any time",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "PHASE": {
    +                    "description": "This delays the enable signal by up to 3 cycles of the input clock\\n\n                This must be set before the clock is enabled to have any effect",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "DC50": {
    +                    "description": "Enables duty cycle correction for odd divisors",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ENABLE": {
    +                    "description": "Starts and stops the clock generator cleanly",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "KILL": {
    +                    "description": "Asynchronously kills the clock generator",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "AUXSRC": {
    +                    "description": "Selects the auxiliary clock source, will glitch when switching",
    +                    "offset": 5,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "clksrc_pll_sys": {
    +                            "value": 0
    +                          },
    +                          "clksrc_gpin0": {
    +                            "value": 1
    +                          },
    +                          "clksrc_gpin1": {
    +                            "value": 2
    +                          },
    +                          "clksrc_pll_usb": {
    +                            "value": 3
    +                          },
    +                          "rosc_clksrc": {
    +                            "value": 4
    +                          },
    +                          "xosc_clksrc": {
    +                            "value": 5
    +                          },
    +                          "clk_sys": {
    +                            "value": 6
    +                          },
    +                          "clk_usb": {
    +                            "value": 7
    +                          },
    +                          "clk_adc": {
    +                            "value": 8
    +                          },
    +                          "clk_rtc": {
    +                            "value": 9
    +                          },
    +                          "clk_ref": {
    +                            "value": 10
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CLK_GPOUT1_DIV": {
    +              "description": "Clock divisor, can be changed on-the-fly",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 256,
    +              "children": {
    +                "fields": {
    +                  "INT": {
    +                    "description": "Integer component of the divisor, 0 -> divide by 2^16",
    +                    "offset": 8,
    +                    "size": 24
    +                  },
    +                  "FRAC": {
    +                    "description": "Fractional component of the divisor",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLK_GPOUT1_SELECTED": {
    +              "description": "Indicates which SRC is currently selected by the glitchless mux (one-hot).\\n\n            This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 1,
    +              "access": "read-only"
    +            },
    +            "CLK_GPOUT2_CTRL": {
    +              "description": "Clock control, can be changed on-the-fly (except for auxsrc)",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "NUDGE": {
    +                    "description": "An edge on this signal shifts the phase of the output by 1 cycle of the input clock\\n\n                This can be done at any time",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "PHASE": {
    +                    "description": "This delays the enable signal by up to 3 cycles of the input clock\\n\n                This must be set before the clock is enabled to have any effect",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "DC50": {
    +                    "description": "Enables duty cycle correction for odd divisors",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ENABLE": {
    +                    "description": "Starts and stops the clock generator cleanly",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "KILL": {
    +                    "description": "Asynchronously kills the clock generator",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "AUXSRC": {
    +                    "description": "Selects the auxiliary clock source, will glitch when switching",
    +                    "offset": 5,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "clksrc_pll_sys": {
    +                            "value": 0
    +                          },
    +                          "clksrc_gpin0": {
    +                            "value": 1
    +                          },
    +                          "clksrc_gpin1": {
    +                            "value": 2
    +                          },
    +                          "clksrc_pll_usb": {
    +                            "value": 3
    +                          },
    +                          "rosc_clksrc_ph": {
    +                            "value": 4
    +                          },
    +                          "xosc_clksrc": {
    +                            "value": 5
    +                          },
    +                          "clk_sys": {
    +                            "value": 6
    +                          },
    +                          "clk_usb": {
    +                            "value": 7
    +                          },
    +                          "clk_adc": {
    +                            "value": 8
    +                          },
    +                          "clk_rtc": {
    +                            "value": 9
    +                          },
    +                          "clk_ref": {
    +                            "value": 10
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CLK_GPOUT2_DIV": {
    +              "description": "Clock divisor, can be changed on-the-fly",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 256,
    +              "children": {
    +                "fields": {
    +                  "INT": {
    +                    "description": "Integer component of the divisor, 0 -> divide by 2^16",
    +                    "offset": 8,
    +                    "size": 24
    +                  },
    +                  "FRAC": {
    +                    "description": "Fractional component of the divisor",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLK_GPOUT2_SELECTED": {
    +              "description": "Indicates which SRC is currently selected by the glitchless mux (one-hot).\\n\n            This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1.",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 1,
    +              "access": "read-only"
    +            },
    +            "CLK_GPOUT3_CTRL": {
    +              "description": "Clock control, can be changed on-the-fly (except for auxsrc)",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "NUDGE": {
    +                    "description": "An edge on this signal shifts the phase of the output by 1 cycle of the input clock\\n\n                This can be done at any time",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "PHASE": {
    +                    "description": "This delays the enable signal by up to 3 cycles of the input clock\\n\n                This must be set before the clock is enabled to have any effect",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "DC50": {
    +                    "description": "Enables duty cycle correction for odd divisors",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ENABLE": {
    +                    "description": "Starts and stops the clock generator cleanly",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "KILL": {
    +                    "description": "Asynchronously kills the clock generator",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "AUXSRC": {
    +                    "description": "Selects the auxiliary clock source, will glitch when switching",
    +                    "offset": 5,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "clksrc_pll_sys": {
    +                            "value": 0
    +                          },
    +                          "clksrc_gpin0": {
    +                            "value": 1
    +                          },
    +                          "clksrc_gpin1": {
    +                            "value": 2
    +                          },
    +                          "clksrc_pll_usb": {
    +                            "value": 3
    +                          },
    +                          "rosc_clksrc_ph": {
    +                            "value": 4
    +                          },
    +                          "xosc_clksrc": {
    +                            "value": 5
    +                          },
    +                          "clk_sys": {
    +                            "value": 6
    +                          },
    +                          "clk_usb": {
    +                            "value": 7
    +                          },
    +                          "clk_adc": {
    +                            "value": 8
    +                          },
    +                          "clk_rtc": {
    +                            "value": 9
    +                          },
    +                          "clk_ref": {
    +                            "value": 10
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CLK_GPOUT3_DIV": {
    +              "description": "Clock divisor, can be changed on-the-fly",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 256,
    +              "children": {
    +                "fields": {
    +                  "INT": {
    +                    "description": "Integer component of the divisor, 0 -> divide by 2^16",
    +                    "offset": 8,
    +                    "size": 24
    +                  },
    +                  "FRAC": {
    +                    "description": "Fractional component of the divisor",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLK_GPOUT3_SELECTED": {
    +              "description": "Indicates which SRC is currently selected by the glitchless mux (one-hot).\\n\n            This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1.",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 1,
    +              "access": "read-only"
    +            },
    +            "CLK_REF_CTRL": {
    +              "description": "Clock control, can be changed on-the-fly (except for auxsrc)",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "AUXSRC": {
    +                    "description": "Selects the auxiliary clock source, will glitch when switching",
    +                    "offset": 5,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "clksrc_pll_usb": {
    +                            "value": 0
    +                          },
    +                          "clksrc_gpin0": {
    +                            "value": 1
    +                          },
    +                          "clksrc_gpin1": {
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SRC": {
    +                    "description": "Selects the clock source glitchlessly, can be changed on-the-fly",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "rosc_clksrc_ph": {
    +                            "value": 0
    +                          },
    +                          "clksrc_clk_ref_aux": {
    +                            "value": 1
    +                          },
    +                          "xosc_clksrc": {
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CLK_REF_DIV": {
    +              "description": "Clock divisor, can be changed on-the-fly",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 256,
    +              "children": {
    +                "fields": {
    +                  "INT": {
    +                    "description": "Integer component of the divisor, 0 -> divide by 2^16",
    +                    "offset": 8,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLK_REF_SELECTED": {
    +              "description": "Indicates which SRC is currently selected by the glitchless mux (one-hot).\\n\n            The glitchless multiplexer does not switch instantaneously (to avoid glitches), so software should poll this register to wait for the switch to complete. This register contains one decoded bit for each of the clock sources enumerated in the CTRL SRC field. At most one of these bits will be set at any time, indicating that clock is currently present at the output of the glitchless mux. Whilst switching is in progress, this register may briefly show all-0s.",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 1,
    +              "access": "read-only"
    +            },
    +            "CLK_SYS_CTRL": {
    +              "description": "Clock control, can be changed on-the-fly (except for auxsrc)",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "AUXSRC": {
    +                    "description": "Selects the auxiliary clock source, will glitch when switching",
    +                    "offset": 5,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "clksrc_pll_sys": {
    +                            "value": 0
    +                          },
    +                          "clksrc_pll_usb": {
    +                            "value": 1
    +                          },
    +                          "rosc_clksrc": {
    +                            "value": 2
    +                          },
    +                          "xosc_clksrc": {
    +                            "value": 3
    +                          },
    +                          "clksrc_gpin0": {
    +                            "value": 4
    +                          },
    +                          "clksrc_gpin1": {
    +                            "value": 5
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SRC": {
    +                    "description": "Selects the clock source glitchlessly, can be changed on-the-fly",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "clk_ref": {
    +                            "value": 0
    +                          },
    +                          "clksrc_clk_sys_aux": {
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CLK_SYS_DIV": {
    +              "description": "Clock divisor, can be changed on-the-fly",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 256,
    +              "children": {
    +                "fields": {
    +                  "INT": {
    +                    "description": "Integer component of the divisor, 0 -> divide by 2^16",
    +                    "offset": 8,
    +                    "size": 24
    +                  },
    +                  "FRAC": {
    +                    "description": "Fractional component of the divisor",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLK_SYS_SELECTED": {
    +              "description": "Indicates which SRC is currently selected by the glitchless mux (one-hot).\\n\n            The glitchless multiplexer does not switch instantaneously (to avoid glitches), so software should poll this register to wait for the switch to complete. This register contains one decoded bit for each of the clock sources enumerated in the CTRL SRC field. At most one of these bits will be set at any time, indicating that clock is currently present at the output of the glitchless mux. Whilst switching is in progress, this register may briefly show all-0s.",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 1,
    +              "access": "read-only"
    +            },
    +            "CLK_PERI_CTRL": {
    +              "description": "Clock control, can be changed on-the-fly (except for auxsrc)",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Starts and stops the clock generator cleanly",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "KILL": {
    +                    "description": "Asynchronously kills the clock generator",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "AUXSRC": {
    +                    "description": "Selects the auxiliary clock source, will glitch when switching",
    +                    "offset": 5,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "clk_sys": {
    +                            "value": 0
    +                          },
    +                          "clksrc_pll_sys": {
    +                            "value": 1
    +                          },
    +                          "clksrc_pll_usb": {
    +                            "value": 2
    +                          },
    +                          "rosc_clksrc_ph": {
    +                            "value": 3
    +                          },
    +                          "xosc_clksrc": {
    +                            "value": 4
    +                          },
    +                          "clksrc_gpin0": {
    +                            "value": 5
    +                          },
    +                          "clksrc_gpin1": {
    +                            "value": 6
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CLK_PERI_SELECTED": {
    +              "description": "Indicates which SRC is currently selected by the glitchless mux (one-hot).\\n\n            This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1.",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 1,
    +              "access": "read-only"
    +            },
    +            "CLK_USB_CTRL": {
    +              "description": "Clock control, can be changed on-the-fly (except for auxsrc)",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "NUDGE": {
    +                    "description": "An edge on this signal shifts the phase of the output by 1 cycle of the input clock\\n\n                This can be done at any time",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "PHASE": {
    +                    "description": "This delays the enable signal by up to 3 cycles of the input clock\\n\n                This must be set before the clock is enabled to have any effect",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "ENABLE": {
    +                    "description": "Starts and stops the clock generator cleanly",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "KILL": {
    +                    "description": "Asynchronously kills the clock generator",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "AUXSRC": {
    +                    "description": "Selects the auxiliary clock source, will glitch when switching",
    +                    "offset": 5,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "clksrc_pll_usb": {
    +                            "value": 0
    +                          },
    +                          "clksrc_pll_sys": {
    +                            "value": 1
    +                          },
    +                          "rosc_clksrc_ph": {
    +                            "value": 2
    +                          },
    +                          "xosc_clksrc": {
    +                            "value": 3
    +                          },
    +                          "clksrc_gpin0": {
    +                            "value": 4
    +                          },
    +                          "clksrc_gpin1": {
    +                            "value": 5
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CLK_USB_DIV": {
    +              "description": "Clock divisor, can be changed on-the-fly",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 256,
    +              "children": {
    +                "fields": {
    +                  "INT": {
    +                    "description": "Integer component of the divisor, 0 -> divide by 2^16",
    +                    "offset": 8,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLK_USB_SELECTED": {
    +              "description": "Indicates which SRC is currently selected by the glitchless mux (one-hot).\\n\n            This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1.",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 1,
    +              "access": "read-only"
    +            },
    +            "CLK_ADC_CTRL": {
    +              "description": "Clock control, can be changed on-the-fly (except for auxsrc)",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "NUDGE": {
    +                    "description": "An edge on this signal shifts the phase of the output by 1 cycle of the input clock\\n\n                This can be done at any time",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "PHASE": {
    +                    "description": "This delays the enable signal by up to 3 cycles of the input clock\\n\n                This must be set before the clock is enabled to have any effect",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "ENABLE": {
    +                    "description": "Starts and stops the clock generator cleanly",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "KILL": {
    +                    "description": "Asynchronously kills the clock generator",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "AUXSRC": {
    +                    "description": "Selects the auxiliary clock source, will glitch when switching",
    +                    "offset": 5,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "clksrc_pll_usb": {
    +                            "value": 0
    +                          },
    +                          "clksrc_pll_sys": {
    +                            "value": 1
    +                          },
    +                          "rosc_clksrc_ph": {
    +                            "value": 2
    +                          },
    +                          "xosc_clksrc": {
    +                            "value": 3
    +                          },
    +                          "clksrc_gpin0": {
    +                            "value": 4
    +                          },
    +                          "clksrc_gpin1": {
    +                            "value": 5
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CLK_ADC_DIV": {
    +              "description": "Clock divisor, can be changed on-the-fly",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 256,
    +              "children": {
    +                "fields": {
    +                  "INT": {
    +                    "description": "Integer component of the divisor, 0 -> divide by 2^16",
    +                    "offset": 8,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLK_ADC_SELECTED": {
    +              "description": "Indicates which SRC is currently selected by the glitchless mux (one-hot).\\n\n            This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1.",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 1,
    +              "access": "read-only"
    +            },
    +            "CLK_RTC_CTRL": {
    +              "description": "Clock control, can be changed on-the-fly (except for auxsrc)",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "NUDGE": {
    +                    "description": "An edge on this signal shifts the phase of the output by 1 cycle of the input clock\\n\n                This can be done at any time",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "PHASE": {
    +                    "description": "This delays the enable signal by up to 3 cycles of the input clock\\n\n                This must be set before the clock is enabled to have any effect",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "ENABLE": {
    +                    "description": "Starts and stops the clock generator cleanly",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "KILL": {
    +                    "description": "Asynchronously kills the clock generator",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "AUXSRC": {
    +                    "description": "Selects the auxiliary clock source, will glitch when switching",
    +                    "offset": 5,
    +                    "size": 3,
    +                    "enum": {
    +                      "size": 3,
    +                      "children": {
    +                        "enum_fields": {
    +                          "clksrc_pll_usb": {
    +                            "value": 0
    +                          },
    +                          "clksrc_pll_sys": {
    +                            "value": 1
    +                          },
    +                          "rosc_clksrc_ph": {
    +                            "value": 2
    +                          },
    +                          "xosc_clksrc": {
    +                            "value": 3
    +                          },
    +                          "clksrc_gpin0": {
    +                            "value": 4
    +                          },
    +                          "clksrc_gpin1": {
    +                            "value": 5
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "CLK_RTC_DIV": {
    +              "description": "Clock divisor, can be changed on-the-fly",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 256,
    +              "children": {
    +                "fields": {
    +                  "INT": {
    +                    "description": "Integer component of the divisor, 0 -> divide by 2^16",
    +                    "offset": 8,
    +                    "size": 24
    +                  },
    +                  "FRAC": {
    +                    "description": "Fractional component of the divisor",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLK_RTC_SELECTED": {
    +              "description": "Indicates which SRC is currently selected by the glitchless mux (one-hot).\\n\n            This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1.",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 1,
    +              "access": "read-only"
    +            },
    +            "CLK_SYS_RESUS_CTRL": {
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 255,
    +              "children": {
    +                "fields": {
    +                  "CLEAR": {
    +                    "description": "For clearing the resus after the fault that triggered it has been corrected",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "FRCE": {
    +                    "description": "Force a resus, for test purposes only",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ENABLE": {
    +                    "description": "Enable resus",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TIMEOUT": {
    +                    "description": "This is expressed as a number of clk_ref cycles\\n\n                and must be >= 2x clk_ref_freq/min_clk_tst_freq",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CLK_SYS_RESUS_STATUS": {
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "RESUSSED": {
    +                    "description": "Clock has been resuscitated, correct the error then send ctrl_clear=1",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "FC0_REF_KHZ": {
    +              "description": "Reference clock frequency in kHz",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FC0_REF_KHZ": {
    +                    "offset": 0,
    +                    "size": 20
    +                  }
    +                }
    +              }
    +            },
    +            "FC0_MIN_KHZ": {
    +              "description": "Minimum pass frequency in kHz. This is optional. Set to 0 if you are not using the pass/fail flags",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FC0_MIN_KHZ": {
    +                    "offset": 0,
    +                    "size": 25
    +                  }
    +                }
    +              }
    +            },
    +            "FC0_MAX_KHZ": {
    +              "description": "Maximum pass frequency in kHz. This is optional. Set to 0x1ffffff if you are not using the pass/fail flags",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 33554431,
    +              "children": {
    +                "fields": {
    +                  "FC0_MAX_KHZ": {
    +                    "offset": 0,
    +                    "size": 25
    +                  }
    +                }
    +              }
    +            },
    +            "FC0_DELAY": {
    +              "description": "Delays the start of frequency counting to allow the mux to settle\\n\n            Delay is measured in multiples of the reference clock period",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 1,
    +              "children": {
    +                "fields": {
    +                  "FC0_DELAY": {
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "FC0_INTERVAL": {
    +              "description": "The test interval is 0.98us * 2**interval, but let's call it 1us * 2**interval\\n\n            The default gives a test interval of 250us",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 8,
    +              "children": {
    +                "fields": {
    +                  "FC0_INTERVAL": {
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "FC0_SRC": {
    +              "description": "Clock sent to frequency counter, set to 0 when not required\\n\n            Writing to this register initiates the frequency count",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FC0_SRC": {
    +                    "offset": 0,
    +                    "size": 8,
    +                    "enum": {
    +                      "size": 8,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NULL": {
    +                            "value": 0
    +                          },
    +                          "pll_sys_clksrc_primary": {
    +                            "value": 1
    +                          },
    +                          "pll_usb_clksrc_primary": {
    +                            "value": 2
    +                          },
    +                          "rosc_clksrc": {
    +                            "value": 3
    +                          },
    +                          "rosc_clksrc_ph": {
    +                            "value": 4
    +                          },
    +                          "xosc_clksrc": {
    +                            "value": 5
    +                          },
    +                          "clksrc_gpin0": {
    +                            "value": 6
    +                          },
    +                          "clksrc_gpin1": {
    +                            "value": 7
    +                          },
    +                          "clk_ref": {
    +                            "value": 8
    +                          },
    +                          "clk_sys": {
    +                            "value": 9
    +                          },
    +                          "clk_peri": {
    +                            "value": 10
    +                          },
    +                          "clk_usb": {
    +                            "value": 11
    +                          },
    +                          "clk_adc": {
    +                            "value": 12
    +                          },
    +                          "clk_rtc": {
    +                            "value": 13
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "FC0_STATUS": {
    +              "description": "Frequency counter status",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "DIED": {
    +                    "description": "Test clock stopped during test",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FAST": {
    +                    "description": "Test clock faster than expected, only valid when status_done=1",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SLOW": {
    +                    "description": "Test clock slower than expected, only valid when status_done=1",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FAIL": {
    +                    "description": "Test failed",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "WAITING": {
    +                    "description": "Waiting for test clock to start",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RUNNING": {
    +                    "description": "Test running",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DONE": {
    +                    "description": "Test complete",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PASS": {
    +                    "description": "Test passed",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "FC0_RESULT": {
    +              "description": "Result of frequency measurement, only valid when status_done=1",
    +              "offset": 156,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "KHZ": {
    +                    "offset": 5,
    +                    "size": 25,
    +                    "access": "read-only"
    +                  },
    +                  "FRAC": {
    +                    "offset": 0,
    +                    "size": 5,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "WAKE_EN0": {
    +              "description": "enable clock in wake mode",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "clk_sys_sram3": {
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "clk_sys_sram2": {
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "clk_sys_sram1": {
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "clk_sys_sram0": {
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "clk_sys_spi1": {
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "clk_peri_spi1": {
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "clk_sys_spi0": {
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "clk_peri_spi0": {
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "clk_sys_sio": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "clk_sys_rtc": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "clk_rtc_rtc": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "clk_sys_rosc": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "clk_sys_rom": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "clk_sys_resets": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "clk_sys_pwm": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "clk_sys_psm": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "clk_sys_pll_usb": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "clk_sys_pll_sys": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "clk_sys_pio1": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "clk_sys_pio0": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "clk_sys_pads": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "clk_sys_vreg_and_chip_reset": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "clk_sys_jtag": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "clk_sys_io": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "clk_sys_i2c1": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "clk_sys_i2c0": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "clk_sys_dma": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "clk_sys_busfabric": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "clk_sys_busctrl": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "clk_sys_adc": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "clk_adc_adc": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "clk_sys_clocks": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "WAKE_EN1": {
    +              "description": "enable clock in wake mode",
    +              "offset": 164,
    +              "size": 32,
    +              "reset_value": 32767,
    +              "children": {
    +                "fields": {
    +                  "clk_sys_xosc": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "clk_sys_xip": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "clk_sys_watchdog": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "clk_usb_usbctrl": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "clk_sys_usbctrl": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "clk_sys_uart1": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "clk_peri_uart1": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "clk_sys_uart0": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "clk_peri_uart0": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "clk_sys_timer": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "clk_sys_tbman": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "clk_sys_sysinfo": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "clk_sys_syscfg": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "clk_sys_sram5": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "clk_sys_sram4": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SLEEP_EN0": {
    +              "description": "enable clock in sleep mode",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "clk_sys_sram3": {
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "clk_sys_sram2": {
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "clk_sys_sram1": {
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "clk_sys_sram0": {
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "clk_sys_spi1": {
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "clk_peri_spi1": {
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "clk_sys_spi0": {
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "clk_peri_spi0": {
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "clk_sys_sio": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "clk_sys_rtc": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "clk_rtc_rtc": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "clk_sys_rosc": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "clk_sys_rom": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "clk_sys_resets": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "clk_sys_pwm": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "clk_sys_psm": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "clk_sys_pll_usb": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "clk_sys_pll_sys": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "clk_sys_pio1": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "clk_sys_pio0": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "clk_sys_pads": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "clk_sys_vreg_and_chip_reset": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "clk_sys_jtag": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "clk_sys_io": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "clk_sys_i2c1": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "clk_sys_i2c0": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "clk_sys_dma": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "clk_sys_busfabric": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "clk_sys_busctrl": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "clk_sys_adc": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "clk_adc_adc": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "clk_sys_clocks": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SLEEP_EN1": {
    +              "description": "enable clock in sleep mode",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 32767,
    +              "children": {
    +                "fields": {
    +                  "clk_sys_xosc": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "clk_sys_xip": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "clk_sys_watchdog": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "clk_usb_usbctrl": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "clk_sys_usbctrl": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "clk_sys_uart1": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "clk_peri_uart1": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "clk_sys_uart0": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "clk_peri_uart0": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "clk_sys_timer": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "clk_sys_tbman": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "clk_sys_sysinfo": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "clk_sys_syscfg": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "clk_sys_sram5": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "clk_sys_sram4": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLED0": {
    +              "description": "indicates the state of the clock enable",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "clk_sys_sram3": {
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_sram2": {
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_sram1": {
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_sram0": {
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_spi1": {
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_peri_spi1": {
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_spi0": {
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_peri_spi0": {
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_sio": {
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_rtc": {
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_rtc_rtc": {
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_rosc": {
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_rom": {
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_resets": {
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_pwm": {
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_psm": {
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_pll_usb": {
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_pll_sys": {
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_pio1": {
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_pio0": {
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_pads": {
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_vreg_and_chip_reset": {
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_jtag": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_io": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_i2c1": {
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_i2c0": {
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_dma": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_busfabric": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_busctrl": {
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_adc": {
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_adc_adc": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_clocks": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLED1": {
    +              "description": "indicates the state of the clock enable",
    +              "offset": 180,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "clk_sys_xosc": {
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_xip": {
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_watchdog": {
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_usb_usbctrl": {
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_usbctrl": {
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_uart1": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_peri_uart1": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_uart0": {
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_peri_uart0": {
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_timer": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_tbman": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_sysinfo": {
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_syscfg": {
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_sram5": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clk_sys_sram4": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INTR": {
    +              "description": "Raw Interrupts",
    +              "offset": 184,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CLK_SYS_RESUS": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INTE": {
    +              "description": "Interrupt Enable",
    +              "offset": 188,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CLK_SYS_RESUS": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTF": {
    +              "description": "Interrupt Force",
    +              "offset": 192,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CLK_SYS_RESUS": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTS": {
    +              "description": "Interrupt status after masking & forcing",
    +              "offset": 196,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CLK_SYS_RESUS": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "RESETS": {
    +        "children": {
    +          "registers": {
    +            "RESET": {
    +              "description": "Reset control. If a bit is set it means the peripheral is in reset. 0 means the peripheral's reset is deasserted.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 33554431,
    +              "children": {
    +                "fields": {
    +                  "usbctrl": {
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "uart1": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "uart0": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "timer": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "tbman": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "sysinfo": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "syscfg": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "spi1": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "spi0": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "rtc": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "pwm": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "pll_usb": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "pll_sys": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "pio1": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "pio0": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "pads_qspi": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "pads_bank0": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "jtag": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "io_qspi": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "io_bank0": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "i2c1": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "i2c0": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "dma": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "busctrl": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "adc": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "WDSEL": {
    +              "description": "Watchdog select. If a bit is set then the watchdog will reset this peripheral when the watchdog fires.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "usbctrl": {
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "uart1": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "uart0": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "timer": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "tbman": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "sysinfo": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "syscfg": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "spi1": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "spi0": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "rtc": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "pwm": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "pll_usb": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "pll_sys": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "pio1": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "pio0": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "pads_qspi": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "pads_bank0": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "jtag": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "io_qspi": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "io_bank0": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "i2c1": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "i2c0": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "dma": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "busctrl": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "adc": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RESET_DONE": {
    +              "description": "Reset done. If a bit is set then a reset done signal has been returned by the peripheral. This indicates that the peripheral's registers are ready to be accessed.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "usbctrl": {
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "uart1": {
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "uart0": {
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "timer": {
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "tbman": {
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "sysinfo": {
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "syscfg": {
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "spi1": {
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "spi0": {
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "rtc": {
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "pwm": {
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "pll_usb": {
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "pll_sys": {
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "pio1": {
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "pio0": {
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "pads_qspi": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "pads_bank0": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "jtag": {
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "io_qspi": {
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "io_bank0": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "i2c1": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "i2c0": {
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "dma": {
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "busctrl": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "adc": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "PSM": {
    +        "children": {
    +          "registers": {
    +            "FRCE_ON": {
    +              "description": "Force block out of reset (i.e. power it on)",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "proc1": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "proc0": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "sio": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "vreg_and_chip_reset": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "xip": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "sram5": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "sram4": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "sram3": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "sram2": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "sram1": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "sram0": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "rom": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "busfabric": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "resets": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "clocks": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "xosc": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "rosc": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FRCE_OFF": {
    +              "description": "Force into reset (i.e. power it off)",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "proc1": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "proc0": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "sio": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "vreg_and_chip_reset": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "xip": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "sram5": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "sram4": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "sram3": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "sram2": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "sram1": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "sram0": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "rom": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "busfabric": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "resets": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "clocks": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "xosc": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "rosc": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "WDSEL": {
    +              "description": "Set to 1 if this peripheral should be reset when the watchdog fires.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "proc1": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "proc0": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "sio": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "vreg_and_chip_reset": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "xip": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "sram5": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "sram4": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "sram3": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "sram2": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "sram1": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "sram0": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "rom": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "busfabric": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "resets": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "clocks": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "xosc": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "rosc": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DONE": {
    +              "description": "Indicates the peripheral's registers are ready to access.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "proc1": {
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "proc0": {
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "sio": {
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "vreg_and_chip_reset": {
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "xip": {
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "sram5": {
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "sram4": {
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "sram3": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "sram2": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "sram1": {
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "sram0": {
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "rom": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "busfabric": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "resets": {
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "clocks": {
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "xosc": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "rosc": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "IO_BANK0": {
    +        "children": {
    +          "registers": {
    +            "GPIO0_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO0_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "jtag_tck": {
    +                            "value": 0
    +                          },
    +                          "spi0_rx": {
    +                            "value": 1
    +                          },
    +                          "uart0_tx": {
    +                            "value": 2
    +                          },
    +                          "i2c0_sda": {
    +                            "value": 3
    +                          },
    +                          "pwm_a_0": {
    +                            "value": 4
    +                          },
    +                          "sio_0": {
    +                            "value": 5
    +                          },
    +                          "pio0_0": {
    +                            "value": 6
    +                          },
    +                          "pio1_0": {
    +                            "value": 7
    +                          },
    +                          "usb_muxing_overcurr_detect": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO1_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO1_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "jtag_tms": {
    +                            "value": 0
    +                          },
    +                          "spi0_ss_n": {
    +                            "value": 1
    +                          },
    +                          "uart0_rx": {
    +                            "value": 2
    +                          },
    +                          "i2c0_scl": {
    +                            "value": 3
    +                          },
    +                          "pwm_b_0": {
    +                            "value": 4
    +                          },
    +                          "sio_1": {
    +                            "value": 5
    +                          },
    +                          "pio0_1": {
    +                            "value": 6
    +                          },
    +                          "pio1_1": {
    +                            "value": 7
    +                          },
    +                          "usb_muxing_vbus_detect": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO2_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO2_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "jtag_tdi": {
    +                            "value": 0
    +                          },
    +                          "spi0_sclk": {
    +                            "value": 1
    +                          },
    +                          "uart0_cts": {
    +                            "value": 2
    +                          },
    +                          "i2c1_sda": {
    +                            "value": 3
    +                          },
    +                          "pwm_a_1": {
    +                            "value": 4
    +                          },
    +                          "sio_2": {
    +                            "value": 5
    +                          },
    +                          "pio0_2": {
    +                            "value": 6
    +                          },
    +                          "pio1_2": {
    +                            "value": 7
    +                          },
    +                          "usb_muxing_vbus_en": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO3_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO3_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "jtag_tdo": {
    +                            "value": 0
    +                          },
    +                          "spi0_tx": {
    +                            "value": 1
    +                          },
    +                          "uart0_rts": {
    +                            "value": 2
    +                          },
    +                          "i2c1_scl": {
    +                            "value": 3
    +                          },
    +                          "pwm_b_1": {
    +                            "value": 4
    +                          },
    +                          "sio_3": {
    +                            "value": 5
    +                          },
    +                          "pio0_3": {
    +                            "value": 6
    +                          },
    +                          "pio1_3": {
    +                            "value": 7
    +                          },
    +                          "usb_muxing_overcurr_detect": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO4_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO4_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "spi0_rx": {
    +                            "value": 1
    +                          },
    +                          "uart1_tx": {
    +                            "value": 2
    +                          },
    +                          "i2c0_sda": {
    +                            "value": 3
    +                          },
    +                          "pwm_a_2": {
    +                            "value": 4
    +                          },
    +                          "sio_4": {
    +                            "value": 5
    +                          },
    +                          "pio0_4": {
    +                            "value": 6
    +                          },
    +                          "pio1_4": {
    +                            "value": 7
    +                          },
    +                          "usb_muxing_vbus_detect": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO5_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO5_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "spi0_ss_n": {
    +                            "value": 1
    +                          },
    +                          "uart1_rx": {
    +                            "value": 2
    +                          },
    +                          "i2c0_scl": {
    +                            "value": 3
    +                          },
    +                          "pwm_b_2": {
    +                            "value": 4
    +                          },
    +                          "sio_5": {
    +                            "value": 5
    +                          },
    +                          "pio0_5": {
    +                            "value": 6
    +                          },
    +                          "pio1_5": {
    +                            "value": 7
    +                          },
    +                          "usb_muxing_vbus_en": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO6_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO6_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "spi0_sclk": {
    +                            "value": 1
    +                          },
    +                          "uart1_cts": {
    +                            "value": 2
    +                          },
    +                          "i2c1_sda": {
    +                            "value": 3
    +                          },
    +                          "pwm_a_3": {
    +                            "value": 4
    +                          },
    +                          "sio_6": {
    +                            "value": 5
    +                          },
    +                          "pio0_6": {
    +                            "value": 6
    +                          },
    +                          "pio1_6": {
    +                            "value": 7
    +                          },
    +                          "usb_muxing_extphy_softcon": {
    +                            "value": 8
    +                          },
    +                          "usb_muxing_overcurr_detect": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO7_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO7_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "spi0_tx": {
    +                            "value": 1
    +                          },
    +                          "uart1_rts": {
    +                            "value": 2
    +                          },
    +                          "i2c1_scl": {
    +                            "value": 3
    +                          },
    +                          "pwm_b_3": {
    +                            "value": 4
    +                          },
    +                          "sio_7": {
    +                            "value": 5
    +                          },
    +                          "pio0_7": {
    +                            "value": 6
    +                          },
    +                          "pio1_7": {
    +                            "value": 7
    +                          },
    +                          "usb_muxing_extphy_oe_n": {
    +                            "value": 8
    +                          },
    +                          "usb_muxing_vbus_detect": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO8_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO8_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "spi1_rx": {
    +                            "value": 1
    +                          },
    +                          "uart1_tx": {
    +                            "value": 2
    +                          },
    +                          "i2c0_sda": {
    +                            "value": 3
    +                          },
    +                          "pwm_a_4": {
    +                            "value": 4
    +                          },
    +                          "sio_8": {
    +                            "value": 5
    +                          },
    +                          "pio0_8": {
    +                            "value": 6
    +                          },
    +                          "pio1_8": {
    +                            "value": 7
    +                          },
    +                          "usb_muxing_extphy_rcv": {
    +                            "value": 8
    +                          },
    +                          "usb_muxing_vbus_en": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO9_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO9_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "spi1_ss_n": {
    +                            "value": 1
    +                          },
    +                          "uart1_rx": {
    +                            "value": 2
    +                          },
    +                          "i2c0_scl": {
    +                            "value": 3
    +                          },
    +                          "pwm_b_4": {
    +                            "value": 4
    +                          },
    +                          "sio_9": {
    +                            "value": 5
    +                          },
    +                          "pio0_9": {
    +                            "value": 6
    +                          },
    +                          "pio1_9": {
    +                            "value": 7
    +                          },
    +                          "usb_muxing_extphy_vp": {
    +                            "value": 8
    +                          },
    +                          "usb_muxing_overcurr_detect": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO10_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO10_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "spi1_sclk": {
    +                            "value": 1
    +                          },
    +                          "uart1_cts": {
    +                            "value": 2
    +                          },
    +                          "i2c1_sda": {
    +                            "value": 3
    +                          },
    +                          "pwm_a_5": {
    +                            "value": 4
    +                          },
    +                          "sio_10": {
    +                            "value": 5
    +                          },
    +                          "pio0_10": {
    +                            "value": 6
    +                          },
    +                          "pio1_10": {
    +                            "value": 7
    +                          },
    +                          "usb_muxing_extphy_vm": {
    +                            "value": 8
    +                          },
    +                          "usb_muxing_vbus_detect": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO11_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO11_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "spi1_tx": {
    +                            "value": 1
    +                          },
    +                          "uart1_rts": {
    +                            "value": 2
    +                          },
    +                          "i2c1_scl": {
    +                            "value": 3
    +                          },
    +                          "pwm_b_5": {
    +                            "value": 4
    +                          },
    +                          "sio_11": {
    +                            "value": 5
    +                          },
    +                          "pio0_11": {
    +                            "value": 6
    +                          },
    +                          "pio1_11": {
    +                            "value": 7
    +                          },
    +                          "usb_muxing_extphy_suspnd": {
    +                            "value": 8
    +                          },
    +                          "usb_muxing_vbus_en": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO12_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO12_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "spi1_rx": {
    +                            "value": 1
    +                          },
    +                          "uart0_tx": {
    +                            "value": 2
    +                          },
    +                          "i2c0_sda": {
    +                            "value": 3
    +                          },
    +                          "pwm_a_6": {
    +                            "value": 4
    +                          },
    +                          "sio_12": {
    +                            "value": 5
    +                          },
    +                          "pio0_12": {
    +                            "value": 6
    +                          },
    +                          "pio1_12": {
    +                            "value": 7
    +                          },
    +                          "usb_muxing_extphy_speed": {
    +                            "value": 8
    +                          },
    +                          "usb_muxing_overcurr_detect": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO13_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO13_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "spi1_ss_n": {
    +                            "value": 1
    +                          },
    +                          "uart0_rx": {
    +                            "value": 2
    +                          },
    +                          "i2c0_scl": {
    +                            "value": 3
    +                          },
    +                          "pwm_b_6": {
    +                            "value": 4
    +                          },
    +                          "sio_13": {
    +                            "value": 5
    +                          },
    +                          "pio0_13": {
    +                            "value": 6
    +                          },
    +                          "pio1_13": {
    +                            "value": 7
    +                          },
    +                          "usb_muxing_extphy_vpo": {
    +                            "value": 8
    +                          },
    +                          "usb_muxing_vbus_detect": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO14_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO14_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "spi1_sclk": {
    +                            "value": 1
    +                          },
    +                          "uart0_cts": {
    +                            "value": 2
    +                          },
    +                          "i2c1_sda": {
    +                            "value": 3
    +                          },
    +                          "pwm_a_7": {
    +                            "value": 4
    +                          },
    +                          "sio_14": {
    +                            "value": 5
    +                          },
    +                          "pio0_14": {
    +                            "value": 6
    +                          },
    +                          "pio1_14": {
    +                            "value": 7
    +                          },
    +                          "usb_muxing_extphy_vmo": {
    +                            "value": 8
    +                          },
    +                          "usb_muxing_vbus_en": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO15_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO15_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "spi1_tx": {
    +                            "value": 1
    +                          },
    +                          "uart0_rts": {
    +                            "value": 2
    +                          },
    +                          "i2c1_scl": {
    +                            "value": 3
    +                          },
    +                          "pwm_b_7": {
    +                            "value": 4
    +                          },
    +                          "sio_15": {
    +                            "value": 5
    +                          },
    +                          "pio0_15": {
    +                            "value": 6
    +                          },
    +                          "pio1_15": {
    +                            "value": 7
    +                          },
    +                          "usb_muxing_digital_dp": {
    +                            "value": 8
    +                          },
    +                          "usb_muxing_overcurr_detect": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO16_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO16_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "spi0_rx": {
    +                            "value": 1
    +                          },
    +                          "uart0_tx": {
    +                            "value": 2
    +                          },
    +                          "i2c0_sda": {
    +                            "value": 3
    +                          },
    +                          "pwm_a_0": {
    +                            "value": 4
    +                          },
    +                          "sio_16": {
    +                            "value": 5
    +                          },
    +                          "pio0_16": {
    +                            "value": 6
    +                          },
    +                          "pio1_16": {
    +                            "value": 7
    +                          },
    +                          "usb_muxing_digital_dm": {
    +                            "value": 8
    +                          },
    +                          "usb_muxing_vbus_detect": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO17_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO17_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "spi0_ss_n": {
    +                            "value": 1
    +                          },
    +                          "uart0_rx": {
    +                            "value": 2
    +                          },
    +                          "i2c0_scl": {
    +                            "value": 3
    +                          },
    +                          "pwm_b_0": {
    +                            "value": 4
    +                          },
    +                          "sio_17": {
    +                            "value": 5
    +                          },
    +                          "pio0_17": {
    +                            "value": 6
    +                          },
    +                          "pio1_17": {
    +                            "value": 7
    +                          },
    +                          "usb_muxing_vbus_en": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO18_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO18_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "spi0_sclk": {
    +                            "value": 1
    +                          },
    +                          "uart0_cts": {
    +                            "value": 2
    +                          },
    +                          "i2c1_sda": {
    +                            "value": 3
    +                          },
    +                          "pwm_a_1": {
    +                            "value": 4
    +                          },
    +                          "sio_18": {
    +                            "value": 5
    +                          },
    +                          "pio0_18": {
    +                            "value": 6
    +                          },
    +                          "pio1_18": {
    +                            "value": 7
    +                          },
    +                          "usb_muxing_overcurr_detect": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO19_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO19_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 156,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "spi0_tx": {
    +                            "value": 1
    +                          },
    +                          "uart0_rts": {
    +                            "value": 2
    +                          },
    +                          "i2c1_scl": {
    +                            "value": 3
    +                          },
    +                          "pwm_b_1": {
    +                            "value": 4
    +                          },
    +                          "sio_19": {
    +                            "value": 5
    +                          },
    +                          "pio0_19": {
    +                            "value": 6
    +                          },
    +                          "pio1_19": {
    +                            "value": 7
    +                          },
    +                          "usb_muxing_vbus_detect": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO20_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO20_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 164,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "spi0_rx": {
    +                            "value": 1
    +                          },
    +                          "uart1_tx": {
    +                            "value": 2
    +                          },
    +                          "i2c0_sda": {
    +                            "value": 3
    +                          },
    +                          "pwm_a_2": {
    +                            "value": 4
    +                          },
    +                          "sio_20": {
    +                            "value": 5
    +                          },
    +                          "pio0_20": {
    +                            "value": 6
    +                          },
    +                          "pio1_20": {
    +                            "value": 7
    +                          },
    +                          "clocks_gpin_0": {
    +                            "value": 8
    +                          },
    +                          "usb_muxing_vbus_en": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO21_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO21_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "spi0_ss_n": {
    +                            "value": 1
    +                          },
    +                          "uart1_rx": {
    +                            "value": 2
    +                          },
    +                          "i2c0_scl": {
    +                            "value": 3
    +                          },
    +                          "pwm_b_2": {
    +                            "value": 4
    +                          },
    +                          "sio_21": {
    +                            "value": 5
    +                          },
    +                          "pio0_21": {
    +                            "value": 6
    +                          },
    +                          "pio1_21": {
    +                            "value": 7
    +                          },
    +                          "clocks_gpout_0": {
    +                            "value": 8
    +                          },
    +                          "usb_muxing_overcurr_detect": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO22_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO22_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 180,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "spi0_sclk": {
    +                            "value": 1
    +                          },
    +                          "uart1_cts": {
    +                            "value": 2
    +                          },
    +                          "i2c1_sda": {
    +                            "value": 3
    +                          },
    +                          "pwm_a_3": {
    +                            "value": 4
    +                          },
    +                          "sio_22": {
    +                            "value": 5
    +                          },
    +                          "pio0_22": {
    +                            "value": 6
    +                          },
    +                          "pio1_22": {
    +                            "value": 7
    +                          },
    +                          "clocks_gpin_1": {
    +                            "value": 8
    +                          },
    +                          "usb_muxing_vbus_detect": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO23_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 184,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO23_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 188,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "spi0_tx": {
    +                            "value": 1
    +                          },
    +                          "uart1_rts": {
    +                            "value": 2
    +                          },
    +                          "i2c1_scl": {
    +                            "value": 3
    +                          },
    +                          "pwm_b_3": {
    +                            "value": 4
    +                          },
    +                          "sio_23": {
    +                            "value": 5
    +                          },
    +                          "pio0_23": {
    +                            "value": 6
    +                          },
    +                          "pio1_23": {
    +                            "value": 7
    +                          },
    +                          "clocks_gpout_1": {
    +                            "value": 8
    +                          },
    +                          "usb_muxing_vbus_en": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO24_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 192,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO24_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 196,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "spi1_rx": {
    +                            "value": 1
    +                          },
    +                          "uart1_tx": {
    +                            "value": 2
    +                          },
    +                          "i2c0_sda": {
    +                            "value": 3
    +                          },
    +                          "pwm_a_4": {
    +                            "value": 4
    +                          },
    +                          "sio_24": {
    +                            "value": 5
    +                          },
    +                          "pio0_24": {
    +                            "value": 6
    +                          },
    +                          "pio1_24": {
    +                            "value": 7
    +                          },
    +                          "clocks_gpout_2": {
    +                            "value": 8
    +                          },
    +                          "usb_muxing_overcurr_detect": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO25_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 200,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO25_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 204,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "spi1_ss_n": {
    +                            "value": 1
    +                          },
    +                          "uart1_rx": {
    +                            "value": 2
    +                          },
    +                          "i2c0_scl": {
    +                            "value": 3
    +                          },
    +                          "pwm_b_4": {
    +                            "value": 4
    +                          },
    +                          "sio_25": {
    +                            "value": 5
    +                          },
    +                          "pio0_25": {
    +                            "value": 6
    +                          },
    +                          "pio1_25": {
    +                            "value": 7
    +                          },
    +                          "clocks_gpout_3": {
    +                            "value": 8
    +                          },
    +                          "usb_muxing_vbus_detect": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO26_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 208,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO26_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 212,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "spi1_sclk": {
    +                            "value": 1
    +                          },
    +                          "uart1_cts": {
    +                            "value": 2
    +                          },
    +                          "i2c1_sda": {
    +                            "value": 3
    +                          },
    +                          "pwm_a_5": {
    +                            "value": 4
    +                          },
    +                          "sio_26": {
    +                            "value": 5
    +                          },
    +                          "pio0_26": {
    +                            "value": 6
    +                          },
    +                          "pio1_26": {
    +                            "value": 7
    +                          },
    +                          "usb_muxing_vbus_en": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO27_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 216,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO27_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 220,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "spi1_tx": {
    +                            "value": 1
    +                          },
    +                          "uart1_rts": {
    +                            "value": 2
    +                          },
    +                          "i2c1_scl": {
    +                            "value": 3
    +                          },
    +                          "pwm_b_5": {
    +                            "value": 4
    +                          },
    +                          "sio_27": {
    +                            "value": 5
    +                          },
    +                          "pio0_27": {
    +                            "value": 6
    +                          },
    +                          "pio1_27": {
    +                            "value": 7
    +                          },
    +                          "usb_muxing_overcurr_detect": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO28_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 224,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO28_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 228,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "spi1_rx": {
    +                            "value": 1
    +                          },
    +                          "uart0_tx": {
    +                            "value": 2
    +                          },
    +                          "i2c0_sda": {
    +                            "value": 3
    +                          },
    +                          "pwm_a_6": {
    +                            "value": 4
    +                          },
    +                          "sio_28": {
    +                            "value": 5
    +                          },
    +                          "pio0_28": {
    +                            "value": 6
    +                          },
    +                          "pio1_28": {
    +                            "value": 7
    +                          },
    +                          "usb_muxing_vbus_detect": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO29_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 232,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO29_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 236,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "spi1_ss_n": {
    +                            "value": 1
    +                          },
    +                          "uart0_rx": {
    +                            "value": 2
    +                          },
    +                          "i2c0_scl": {
    +                            "value": 3
    +                          },
    +                          "pwm_b_6": {
    +                            "value": 4
    +                          },
    +                          "sio_29": {
    +                            "value": 5
    +                          },
    +                          "pio0_29": {
    +                            "value": 6
    +                          },
    +                          "pio1_29": {
    +                            "value": 7
    +                          },
    +                          "usb_muxing_vbus_en": {
    +                            "value": 9
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTR0": {
    +              "description": "Raw Interrupts",
    +              "offset": 240,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO7_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "GPIO7_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "GPIO7_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO7_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO6_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "GPIO6_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "GPIO6_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO6_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO5_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO5_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO5_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO5_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO4_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO4_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO4_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO4_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO3_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO3_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO3_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO3_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO2_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO2_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO2_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO2_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO1_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO1_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO1_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO1_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO0_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO0_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO0_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO0_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INTR1": {
    +              "description": "Raw Interrupts",
    +              "offset": 244,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO15_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "GPIO15_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "GPIO15_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO15_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO14_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "GPIO14_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "GPIO14_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO14_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO13_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO13_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO13_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO13_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO12_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO12_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO12_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO12_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO11_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO11_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO11_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO11_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO10_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO10_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO10_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO10_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO9_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO9_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO9_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO9_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO8_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO8_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO8_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO8_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INTR2": {
    +              "description": "Raw Interrupts",
    +              "offset": 248,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO23_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "GPIO23_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "GPIO23_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO23_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO22_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "GPIO22_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "GPIO22_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO22_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO21_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO21_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO21_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO21_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO20_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO20_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO20_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO20_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO19_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO19_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO19_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO19_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO18_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO18_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO18_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO18_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO17_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO17_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO17_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO17_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO16_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO16_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO16_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO16_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INTR3": {
    +              "description": "Raw Interrupts",
    +              "offset": 252,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO29_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO29_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO29_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO29_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO28_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO28_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO28_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO28_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO27_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO27_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO27_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO27_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO26_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO26_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO26_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO26_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO25_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO25_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO25_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO25_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO24_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO24_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO24_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO24_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PROC0_INTE0": {
    +              "description": "Interrupt Enable for proc0",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO7_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "GPIO7_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "GPIO7_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "GPIO7_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "GPIO6_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "GPIO6_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "GPIO6_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "GPIO6_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "GPIO5_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO5_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO5_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO5_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO4_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO4_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO4_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO4_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO3_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO3_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO3_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO3_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO2_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO2_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO2_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO2_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO1_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO1_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO1_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO1_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO0_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO0_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO0_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO0_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PROC0_INTE1": {
    +              "description": "Interrupt Enable for proc0",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO15_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "GPIO15_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "GPIO15_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "GPIO15_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "GPIO14_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "GPIO14_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "GPIO14_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "GPIO14_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "GPIO13_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO13_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO13_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO13_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO12_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO12_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO12_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO12_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO11_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO11_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO11_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO11_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO10_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO10_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO10_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO10_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO9_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO9_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO9_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO9_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO8_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO8_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO8_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO8_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PROC0_INTE2": {
    +              "description": "Interrupt Enable for proc0",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO23_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "GPIO23_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "GPIO23_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "GPIO23_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "GPIO22_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "GPIO22_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "GPIO22_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "GPIO22_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "GPIO21_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO21_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO21_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO21_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO20_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO20_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO20_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO20_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO19_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO19_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO19_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO19_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO18_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO18_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO18_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO18_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO17_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO17_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO17_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO17_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO16_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO16_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO16_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO16_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PROC0_INTE3": {
    +              "description": "Interrupt Enable for proc0",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO29_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO29_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO29_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO29_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO28_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO28_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO28_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO28_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO27_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO27_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO27_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO27_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO26_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO26_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO26_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO26_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO25_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO25_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO25_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO25_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO24_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO24_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO24_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO24_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PROC0_INTF0": {
    +              "description": "Interrupt Force for proc0",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO7_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "GPIO7_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "GPIO7_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "GPIO7_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "GPIO6_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "GPIO6_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "GPIO6_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "GPIO6_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "GPIO5_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO5_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO5_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO5_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO4_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO4_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO4_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO4_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO3_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO3_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO3_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO3_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO2_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO2_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO2_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO2_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO1_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO1_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO1_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO1_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO0_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO0_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO0_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO0_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PROC0_INTF1": {
    +              "description": "Interrupt Force for proc0",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO15_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "GPIO15_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "GPIO15_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "GPIO15_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "GPIO14_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "GPIO14_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "GPIO14_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "GPIO14_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "GPIO13_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO13_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO13_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO13_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO12_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO12_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO12_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO12_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO11_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO11_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO11_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO11_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO10_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO10_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO10_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO10_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO9_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO9_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO9_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO9_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO8_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO8_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO8_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO8_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PROC0_INTF2": {
    +              "description": "Interrupt Force for proc0",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO23_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "GPIO23_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "GPIO23_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "GPIO23_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "GPIO22_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "GPIO22_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "GPIO22_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "GPIO22_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "GPIO21_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO21_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO21_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO21_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO20_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO20_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO20_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO20_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO19_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO19_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO19_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO19_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO18_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO18_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO18_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO18_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO17_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO17_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO17_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO17_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO16_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO16_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO16_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO16_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PROC0_INTF3": {
    +              "description": "Interrupt Force for proc0",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO29_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO29_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO29_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO29_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO28_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO28_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO28_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO28_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO27_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO27_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO27_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO27_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO26_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO26_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO26_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO26_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO25_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO25_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO25_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO25_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO24_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO24_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO24_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO24_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PROC0_INTS0": {
    +              "description": "Interrupt status after masking & forcing for proc0",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO7_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO7_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO7_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO7_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO6_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO6_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO6_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO6_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO5_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO5_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO5_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO5_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO4_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO4_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO4_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO4_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO3_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO3_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO3_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO3_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO2_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO2_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO2_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO2_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO1_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO1_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO1_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO1_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO0_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO0_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO0_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO0_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PROC0_INTS1": {
    +              "description": "Interrupt status after masking & forcing for proc0",
    +              "offset": 292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO15_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO15_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO15_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO15_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO14_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO14_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO14_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO14_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO13_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO13_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO13_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO13_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO12_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO12_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO12_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO12_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO11_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO11_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO11_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO11_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO10_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO10_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO10_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO10_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO9_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO9_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO9_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO9_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO8_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO8_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO8_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO8_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PROC0_INTS2": {
    +              "description": "Interrupt status after masking & forcing for proc0",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO23_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO23_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO23_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO23_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO22_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO22_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO22_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO22_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO21_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO21_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO21_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO21_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO20_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO20_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO20_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO20_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO19_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO19_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO19_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO19_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO18_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO18_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO18_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO18_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO17_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO17_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO17_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO17_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO16_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO16_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO16_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO16_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PROC0_INTS3": {
    +              "description": "Interrupt status after masking & forcing for proc0",
    +              "offset": 300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO29_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO29_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO29_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO29_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO28_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO28_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO28_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO28_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO27_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO27_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO27_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO27_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO26_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO26_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO26_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO26_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO25_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO25_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO25_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO25_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO24_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO24_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO24_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO24_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PROC1_INTE0": {
    +              "description": "Interrupt Enable for proc1",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO7_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "GPIO7_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "GPIO7_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "GPIO7_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "GPIO6_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "GPIO6_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "GPIO6_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "GPIO6_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "GPIO5_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO5_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO5_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO5_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO4_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO4_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO4_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO4_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO3_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO3_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO3_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO3_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO2_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO2_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO2_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO2_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO1_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO1_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO1_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO1_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO0_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO0_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO0_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO0_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PROC1_INTE1": {
    +              "description": "Interrupt Enable for proc1",
    +              "offset": 308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO15_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "GPIO15_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "GPIO15_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "GPIO15_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "GPIO14_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "GPIO14_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "GPIO14_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "GPIO14_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "GPIO13_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO13_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO13_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO13_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO12_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO12_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO12_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO12_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO11_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO11_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO11_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO11_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO10_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO10_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO10_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO10_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO9_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO9_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO9_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO9_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO8_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO8_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO8_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO8_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PROC1_INTE2": {
    +              "description": "Interrupt Enable for proc1",
    +              "offset": 312,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO23_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "GPIO23_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "GPIO23_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "GPIO23_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "GPIO22_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "GPIO22_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "GPIO22_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "GPIO22_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "GPIO21_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO21_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO21_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO21_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO20_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO20_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO20_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO20_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO19_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO19_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO19_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO19_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO18_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO18_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO18_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO18_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO17_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO17_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO17_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO17_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO16_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO16_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO16_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO16_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PROC1_INTE3": {
    +              "description": "Interrupt Enable for proc1",
    +              "offset": 316,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO29_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO29_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO29_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO29_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO28_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO28_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO28_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO28_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO27_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO27_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO27_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO27_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO26_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO26_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO26_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO26_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO25_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO25_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO25_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO25_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO24_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO24_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO24_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO24_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PROC1_INTF0": {
    +              "description": "Interrupt Force for proc1",
    +              "offset": 320,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO7_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "GPIO7_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "GPIO7_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "GPIO7_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "GPIO6_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "GPIO6_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "GPIO6_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "GPIO6_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "GPIO5_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO5_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO5_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO5_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO4_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO4_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO4_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO4_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO3_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO3_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO3_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO3_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO2_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO2_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO2_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO2_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO1_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO1_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO1_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO1_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO0_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO0_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO0_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO0_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PROC1_INTF1": {
    +              "description": "Interrupt Force for proc1",
    +              "offset": 324,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO15_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "GPIO15_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "GPIO15_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "GPIO15_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "GPIO14_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "GPIO14_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "GPIO14_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "GPIO14_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "GPIO13_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO13_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO13_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO13_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO12_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO12_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO12_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO12_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO11_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO11_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO11_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO11_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO10_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO10_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO10_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO10_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO9_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO9_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO9_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO9_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO8_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO8_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO8_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO8_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PROC1_INTF2": {
    +              "description": "Interrupt Force for proc1",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO23_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "GPIO23_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "GPIO23_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "GPIO23_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "GPIO22_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "GPIO22_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "GPIO22_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "GPIO22_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "GPIO21_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO21_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO21_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO21_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO20_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO20_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO20_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO20_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO19_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO19_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO19_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO19_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO18_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO18_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO18_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO18_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO17_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO17_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO17_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO17_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO16_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO16_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO16_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO16_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PROC1_INTF3": {
    +              "description": "Interrupt Force for proc1",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO29_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO29_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO29_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO29_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO28_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO28_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO28_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO28_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO27_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO27_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO27_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO27_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO26_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO26_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO26_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO26_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO25_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO25_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO25_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO25_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO24_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO24_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO24_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO24_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PROC1_INTS0": {
    +              "description": "Interrupt status after masking & forcing for proc1",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO7_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO7_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO7_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO7_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO6_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO6_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO6_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO6_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO5_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO5_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO5_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO5_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO4_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO4_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO4_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO4_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO3_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO3_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO3_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO3_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO2_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO2_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO2_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO2_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO1_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO1_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO1_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO1_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO0_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO0_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO0_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO0_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PROC1_INTS1": {
    +              "description": "Interrupt status after masking & forcing for proc1",
    +              "offset": 340,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO15_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO15_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO15_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO15_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO14_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO14_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO14_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO14_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO13_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO13_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO13_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO13_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO12_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO12_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO12_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO12_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO11_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO11_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO11_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO11_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO10_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO10_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO10_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO10_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO9_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO9_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO9_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO9_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO8_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO8_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO8_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO8_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PROC1_INTS2": {
    +              "description": "Interrupt status after masking & forcing for proc1",
    +              "offset": 344,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO23_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO23_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO23_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO23_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO22_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO22_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO22_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO22_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO21_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO21_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO21_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO21_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO20_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO20_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO20_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO20_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO19_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO19_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO19_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO19_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO18_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO18_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO18_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO18_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO17_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO17_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO17_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO17_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO16_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO16_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO16_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO16_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PROC1_INTS3": {
    +              "description": "Interrupt status after masking & forcing for proc1",
    +              "offset": 348,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO29_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO29_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO29_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO29_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO28_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO28_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO28_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO28_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO27_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO27_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO27_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO27_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO26_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO26_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO26_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO26_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO25_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO25_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO25_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO25_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO24_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO24_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO24_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO24_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DORMANT_WAKE_INTE0": {
    +              "description": "Interrupt Enable for dormant_wake",
    +              "offset": 352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO7_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "GPIO7_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "GPIO7_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "GPIO7_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "GPIO6_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "GPIO6_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "GPIO6_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "GPIO6_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "GPIO5_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO5_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO5_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO5_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO4_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO4_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO4_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO4_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO3_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO3_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO3_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO3_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO2_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO2_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO2_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO2_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO1_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO1_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO1_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO1_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO0_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO0_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO0_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO0_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DORMANT_WAKE_INTE1": {
    +              "description": "Interrupt Enable for dormant_wake",
    +              "offset": 356,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO15_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "GPIO15_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "GPIO15_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "GPIO15_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "GPIO14_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "GPIO14_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "GPIO14_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "GPIO14_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "GPIO13_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO13_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO13_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO13_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO12_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO12_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO12_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO12_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO11_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO11_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO11_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO11_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO10_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO10_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO10_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO10_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO9_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO9_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO9_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO9_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO8_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO8_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO8_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO8_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DORMANT_WAKE_INTE2": {
    +              "description": "Interrupt Enable for dormant_wake",
    +              "offset": 360,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO23_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "GPIO23_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "GPIO23_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "GPIO23_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "GPIO22_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "GPIO22_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "GPIO22_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "GPIO22_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "GPIO21_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO21_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO21_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO21_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO20_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO20_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO20_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO20_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO19_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO19_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO19_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO19_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO18_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO18_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO18_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO18_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO17_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO17_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO17_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO17_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO16_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO16_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO16_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO16_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DORMANT_WAKE_INTE3": {
    +              "description": "Interrupt Enable for dormant_wake",
    +              "offset": 364,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO29_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO29_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO29_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO29_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO28_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO28_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO28_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO28_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO27_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO27_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO27_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO27_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO26_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO26_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO26_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO26_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO25_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO25_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO25_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO25_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO24_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO24_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO24_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO24_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DORMANT_WAKE_INTF0": {
    +              "description": "Interrupt Force for dormant_wake",
    +              "offset": 368,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO7_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "GPIO7_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "GPIO7_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "GPIO7_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "GPIO6_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "GPIO6_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "GPIO6_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "GPIO6_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "GPIO5_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO5_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO5_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO5_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO4_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO4_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO4_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO4_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO3_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO3_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO3_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO3_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO2_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO2_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO2_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO2_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO1_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO1_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO1_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO1_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO0_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO0_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO0_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO0_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DORMANT_WAKE_INTF1": {
    +              "description": "Interrupt Force for dormant_wake",
    +              "offset": 372,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO15_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "GPIO15_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "GPIO15_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "GPIO15_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "GPIO14_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "GPIO14_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "GPIO14_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "GPIO14_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "GPIO13_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO13_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO13_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO13_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO12_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO12_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO12_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO12_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO11_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO11_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO11_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO11_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO10_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO10_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO10_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO10_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO9_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO9_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO9_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO9_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO8_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO8_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO8_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO8_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DORMANT_WAKE_INTF2": {
    +              "description": "Interrupt Force for dormant_wake",
    +              "offset": 376,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO23_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "GPIO23_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "GPIO23_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "GPIO23_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "GPIO22_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "GPIO22_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "GPIO22_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "GPIO22_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "GPIO21_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO21_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO21_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO21_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO20_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO20_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO20_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO20_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO19_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO19_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO19_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO19_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO18_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO18_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO18_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO18_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO17_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO17_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO17_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO17_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO16_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO16_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO16_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO16_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DORMANT_WAKE_INTF3": {
    +              "description": "Interrupt Force for dormant_wake",
    +              "offset": 380,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO29_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO29_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO29_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO29_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO28_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO28_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO28_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO28_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO27_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO27_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO27_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO27_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO26_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO26_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO26_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO26_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO25_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO25_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO25_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO25_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO24_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO24_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO24_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO24_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DORMANT_WAKE_INTS0": {
    +              "description": "Interrupt status after masking & forcing for dormant_wake",
    +              "offset": 384,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO7_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO7_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO7_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO7_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO6_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO6_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO6_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO6_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO5_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO5_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO5_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO5_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO4_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO4_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO4_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO4_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO3_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO3_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO3_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO3_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO2_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO2_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO2_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO2_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO1_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO1_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO1_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO1_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO0_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO0_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO0_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO0_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DORMANT_WAKE_INTS1": {
    +              "description": "Interrupt status after masking & forcing for dormant_wake",
    +              "offset": 388,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO15_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO15_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO15_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO15_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO14_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO14_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO14_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO14_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO13_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO13_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO13_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO13_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO12_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO12_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO12_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO12_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO11_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO11_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO11_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO11_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO10_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO10_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO10_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO10_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO9_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO9_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO9_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO9_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO8_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO8_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO8_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO8_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DORMANT_WAKE_INTS2": {
    +              "description": "Interrupt status after masking & forcing for dormant_wake",
    +              "offset": 392,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO23_EDGE_HIGH": {
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO23_EDGE_LOW": {
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO23_LEVEL_HIGH": {
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO23_LEVEL_LOW": {
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO22_EDGE_HIGH": {
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO22_EDGE_LOW": {
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO22_LEVEL_HIGH": {
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO22_LEVEL_LOW": {
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO21_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO21_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO21_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO21_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO20_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO20_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO20_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO20_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO19_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO19_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO19_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO19_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO18_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO18_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO18_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO18_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO17_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO17_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO17_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO17_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO16_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO16_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO16_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO16_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DORMANT_WAKE_INTS3": {
    +              "description": "Interrupt status after masking & forcing for dormant_wake",
    +              "offset": 396,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO29_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO29_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO29_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO29_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO28_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO28_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO28_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO28_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO27_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO27_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO27_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO27_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO26_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO26_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO26_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO26_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO25_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO25_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO25_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO25_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO24_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO24_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO24_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO24_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "IO_QSPI": {
    +        "children": {
    +          "registers": {
    +            "GPIO_QSPI_SCLK_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_QSPI_SCLK_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "xip_sclk": {
    +                            "value": 0
    +                          },
    +                          "sio_30": {
    +                            "value": 5
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_QSPI_SS_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_QSPI_SS_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "xip_ss_n": {
    +                            "value": 0
    +                          },
    +                          "sio_31": {
    +                            "value": 5
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_QSPI_SD0_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_QSPI_SD0_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "xip_sd0": {
    +                            "value": 0
    +                          },
    +                          "sio_32": {
    +                            "value": 5
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_QSPI_SD1_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_QSPI_SD1_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "xip_sd1": {
    +                            "value": 0
    +                          },
    +                          "sio_33": {
    +                            "value": 5
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_QSPI_SD2_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_QSPI_SD2_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "xip_sd2": {
    +                            "value": 0
    +                          },
    +                          "sio_34": {
    +                            "value": 5
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_QSPI_SD3_STATUS": {
    +              "description": "GPIO status",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQTOPROC": {
    +                    "description": "interrupt to processors, after override is applied",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IRQFROMPAD": {
    +                    "description": "interrupt from pad before override is applied",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTOPERI": {
    +                    "description": "input signal to peripheral, after override is applied",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFROMPAD": {
    +                    "description": "input signal from pad, before override is applied",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OETOPAD": {
    +                    "description": "output enable to pad after register override is applied",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OEFROMPERI": {
    +                    "description": "output enable from selected peripheral, before register override is applied",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTTOPAD": {
    +                    "description": "output signal to pad after register override is applied",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFROMPERI": {
    +                    "description": "output signal from selected peripheral, before register override is applied",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_QSPI_SD3_CTRL": {
    +              "description": "GPIO control including function select and overrides.",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "IRQOVER": {
    +                    "offset": 28,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the interrupt",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the interrupt",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive interrupt low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive interrupt high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INOVER": {
    +                    "offset": 16,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "don't invert the peri input",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "invert the peri input",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive peri input low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive peri input high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OEOVER": {
    +                    "offset": 12,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output enable from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output enable from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "DISABLE": {
    +                            "description": "disable output",
    +                            "value": 2
    +                          },
    +                          "ENABLE": {
    +                            "description": "enable output",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "OUTOVER": {
    +                    "offset": 8,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NORMAL": {
    +                            "description": "drive output from peripheral signal selected by funcsel",
    +                            "value": 0
    +                          },
    +                          "INVERT": {
    +                            "description": "drive output from inverse of peripheral signal selected by funcsel",
    +                            "value": 1
    +                          },
    +                          "LOW": {
    +                            "description": "drive output low",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "drive output high",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FUNCSEL": {
    +                    "description": "0-31 -> selects pin function according to the gpio table\\n\n                31 == NULL",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "xip_sd3": {
    +                            "value": 0
    +                          },
    +                          "sio_35": {
    +                            "value": 5
    +                          },
    +                          "null": {
    +                            "value": 31
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "INTR": {
    +              "description": "Raw Interrupts",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_QSPI_SD3_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD3_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD3_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD3_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD2_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD2_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD2_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD2_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD1_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD1_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD1_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD1_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD0_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD0_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD0_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD0_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SS_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SS_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SS_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SS_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SCLK_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SCLK_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SCLK_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SCLK_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PROC0_INTE": {
    +              "description": "Interrupt Enable for proc0",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_QSPI_SD3_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD3_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD3_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD3_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD2_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD2_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD2_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD2_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD1_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD1_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD1_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD1_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD0_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD0_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD0_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD0_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SS_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SS_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SS_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SS_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SCLK_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SCLK_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SCLK_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SCLK_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PROC0_INTF": {
    +              "description": "Interrupt Force for proc0",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_QSPI_SD3_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD3_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD3_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD3_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD2_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD2_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD2_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD2_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD1_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD1_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD1_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD1_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD0_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD0_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD0_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD0_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SS_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SS_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SS_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SS_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SCLK_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SCLK_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SCLK_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SCLK_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PROC0_INTS": {
    +              "description": "Interrupt status after masking & forcing for proc0",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_QSPI_SD3_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD3_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD3_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD3_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD2_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD2_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD2_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD2_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD1_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD1_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD1_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD1_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD0_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD0_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD0_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD0_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SS_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SS_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SS_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SS_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SCLK_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SCLK_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SCLK_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SCLK_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PROC1_INTE": {
    +              "description": "Interrupt Enable for proc1",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_QSPI_SD3_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD3_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD3_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD3_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD2_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD2_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD2_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD2_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD1_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD1_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD1_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD1_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD0_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD0_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD0_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD0_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SS_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SS_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SS_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SS_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SCLK_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SCLK_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SCLK_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SCLK_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PROC1_INTF": {
    +              "description": "Interrupt Force for proc1",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_QSPI_SD3_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD3_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD3_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD3_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD2_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD2_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD2_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD2_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD1_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD1_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD1_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD1_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD0_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD0_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD0_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD0_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SS_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SS_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SS_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SS_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SCLK_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SCLK_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SCLK_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SCLK_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PROC1_INTS": {
    +              "description": "Interrupt status after masking & forcing for proc1",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_QSPI_SD3_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD3_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD3_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD3_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD2_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD2_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD2_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD2_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD1_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD1_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD1_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD1_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD0_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD0_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD0_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD0_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SS_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SS_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SS_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SS_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SCLK_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SCLK_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SCLK_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SCLK_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DORMANT_WAKE_INTE": {
    +              "description": "Interrupt Enable for dormant_wake",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_QSPI_SD3_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD3_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD3_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD3_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD2_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD2_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD2_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD2_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD1_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD1_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD1_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD1_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD0_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD0_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD0_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD0_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SS_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SS_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SS_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SS_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SCLK_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SCLK_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SCLK_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SCLK_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DORMANT_WAKE_INTF": {
    +              "description": "Interrupt Force for dormant_wake",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_QSPI_SD3_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD3_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD3_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD3_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD2_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD2_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD2_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD2_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD1_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD1_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD1_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD1_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD0_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD0_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD0_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SD0_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SS_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SS_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SS_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SS_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SCLK_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SCLK_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SCLK_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "GPIO_QSPI_SCLK_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DORMANT_WAKE_INTS": {
    +              "description": "Interrupt status after masking & forcing for dormant_wake",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_QSPI_SD3_EDGE_HIGH": {
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD3_EDGE_LOW": {
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD3_LEVEL_HIGH": {
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD3_LEVEL_LOW": {
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD2_EDGE_HIGH": {
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD2_EDGE_LOW": {
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD2_LEVEL_HIGH": {
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD2_LEVEL_LOW": {
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD1_EDGE_HIGH": {
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD1_EDGE_LOW": {
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD1_LEVEL_HIGH": {
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD1_LEVEL_LOW": {
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD0_EDGE_HIGH": {
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD0_EDGE_LOW": {
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD0_LEVEL_HIGH": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SD0_LEVEL_LOW": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SS_EDGE_HIGH": {
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SS_EDGE_LOW": {
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SS_LEVEL_HIGH": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SS_LEVEL_LOW": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SCLK_EDGE_HIGH": {
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SCLK_EDGE_LOW": {
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SCLK_LEVEL_HIGH": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GPIO_QSPI_SCLK_LEVEL_LOW": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "PADS_BANK0": {
    +        "children": {
    +          "registers": {
    +            "VOLTAGE_SELECT": {
    +              "description": "Voltage select. Per bank control",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "VOLTAGE_SELECT": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "3v3": {
    +                            "description": "Set voltage to 3.3V (DVDD >= 2V5)",
    +                            "value": 0
    +                          },
    +                          "1v8": {
    +                            "description": "Set voltage to 1.8V (DVDD <= 1V8)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO0": {
    +              "description": "Pad control register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO1": {
    +              "description": "Pad control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO2": {
    +              "description": "Pad control register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO3": {
    +              "description": "Pad control register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO4": {
    +              "description": "Pad control register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO5": {
    +              "description": "Pad control register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO6": {
    +              "description": "Pad control register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO7": {
    +              "description": "Pad control register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO8": {
    +              "description": "Pad control register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO9": {
    +              "description": "Pad control register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO10": {
    +              "description": "Pad control register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO11": {
    +              "description": "Pad control register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO12": {
    +              "description": "Pad control register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO13": {
    +              "description": "Pad control register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO14": {
    +              "description": "Pad control register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO15": {
    +              "description": "Pad control register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO16": {
    +              "description": "Pad control register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO17": {
    +              "description": "Pad control register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO18": {
    +              "description": "Pad control register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO19": {
    +              "description": "Pad control register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO20": {
    +              "description": "Pad control register",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO21": {
    +              "description": "Pad control register",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO22": {
    +              "description": "Pad control register",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO23": {
    +              "description": "Pad control register",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO24": {
    +              "description": "Pad control register",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO25": {
    +              "description": "Pad control register",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO26": {
    +              "description": "Pad control register",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO27": {
    +              "description": "Pad control register",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO28": {
    +              "description": "Pad control register",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO29": {
    +              "description": "Pad control register",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SWCLK": {
    +              "description": "Pad control register",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 218,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SWD": {
    +              "description": "Pad control register",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 90,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "PADS_QSPI": {
    +        "children": {
    +          "registers": {
    +            "VOLTAGE_SELECT": {
    +              "description": "Voltage select. Per bank control",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "VOLTAGE_SELECT": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "3v3": {
    +                            "description": "Set voltage to 3.3V (DVDD >= 2V5)",
    +                            "value": 0
    +                          },
    +                          "1v8": {
    +                            "description": "Set voltage to 1.8V (DVDD <= 1V8)",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_QSPI_SCLK": {
    +              "description": "Pad control register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 86,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_QSPI_SD0": {
    +              "description": "Pad control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 82,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_QSPI_SD1": {
    +              "description": "Pad control register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 82,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_QSPI_SD2": {
    +              "description": "Pad control register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 82,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_QSPI_SD3": {
    +              "description": "Pad control register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 82,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_QSPI_SS": {
    +              "description": "Pad control register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 90,
    +              "children": {
    +                "fields": {
    +                  "OD": {
    +                    "description": "Output disable. Has priority over output enable from peripherals",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IE": {
    +                    "description": "Input enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DRIVE": {
    +                    "description": "Drive strength.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "2mA": {
    +                            "value": 0
    +                          },
    +                          "4mA": {
    +                            "value": 1
    +                          },
    +                          "8mA": {
    +                            "value": 2
    +                          },
    +                          "12mA": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "PUE": {
    +                    "description": "Pull up enable",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PDE": {
    +                    "description": "Pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SCHMITT": {
    +                    "description": "Enable schmitt trigger",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLEWFAST": {
    +                    "description": "Slew rate control. 1 = Fast, 0 = Slow",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "XOSC": {
    +        "description": "Controls the crystal oscillator",
    +        "children": {
    +          "registers": {
    +            "CTRL": {
    +              "description": "Crystal Oscillator Control",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "On power-up this field is initialised to DISABLE and the chip runs from the ROSC.\\n\n                If the chip has subsequently been programmed to run from the XOSC then setting this field to DISABLE may lock-up the chip. If this is a concern then run the clk_ref from the ROSC and enable the clk_sys RESUS feature.\\n\n                The 12-bit code is intended to give some protection against accidental writes. An invalid setting will enable the oscillator.",
    +                    "offset": 12,
    +                    "size": 12,
    +                    "enum": {
    +                      "size": 12,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE": {
    +                            "value": 3358
    +                          },
    +                          "ENABLE": {
    +                            "value": 4011
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FREQ_RANGE": {
    +                    "description": "Frequency range. This resets to 0xAA0 and cannot be changed.",
    +                    "offset": 0,
    +                    "size": 12,
    +                    "enum": {
    +                      "size": 12,
    +                      "children": {
    +                        "enum_fields": {
    +                          "1_15MHZ": {
    +                            "value": 2720
    +                          },
    +                          "RESERVED_1": {
    +                            "value": 2721
    +                          },
    +                          "RESERVED_2": {
    +                            "value": 2722
    +                          },
    +                          "RESERVED_3": {
    +                            "value": 2723
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "STATUS": {
    +              "description": "Crystal Oscillator Status",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "STABLE": {
    +                    "description": "Oscillator is running and stable",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BADWRITE": {
    +                    "description": "An invalid value has been written to CTRL_ENABLE or CTRL_FREQ_RANGE or DORMANT",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "ENABLED": {
    +                    "description": "Oscillator is enabled but not necessarily running and stable, resets to 0",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FREQ_RANGE": {
    +                    "description": "The current frequency range setting, always reads 0",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "1_15MHZ": {
    +                            "value": 0
    +                          },
    +                          "RESERVED_1": {
    +                            "value": 1
    +                          },
    +                          "RESERVED_2": {
    +                            "value": 2
    +                          },
    +                          "RESERVED_3": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "DORMANT": {
    +              "description": "Crystal Oscillator pause control\\n\n            This is used to save power by pausing the XOSC\\n\n            On power-up this field is initialised to WAKE\\n\n            An invalid write will also select WAKE\\n\n            WARNING: stop the PLLs before selecting dormant mode\\n\n            WARNING: setup the irq before selecting dormant mode",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "STARTUP": {
    +              "description": "Controls the startup delay",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 196,
    +              "children": {
    +                "fields": {
    +                  "X4": {
    +                    "description": "Multiplies the startup_delay by 4. This is of little value to the user given that the delay can be programmed directly.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "DELAY": {
    +                    "description": "in multiples of 256*xtal_period. The reset value of 0xc4 corresponds to approx 50 000 cycles.",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "COUNT": {
    +              "description": "A down counter running at the xosc frequency which counts to zero and stops.\\n\n            To start the counter write a non-zero value.\\n\n            Can be used for short software pauses when setting up time sensitive hardware.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "COUNT": {
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "PLL_SYS": {
    +        "children": {
    +          "registers": {
    +            "CS": {
    +              "description": "Control and Status\\n\n            GENERAL CONSTRAINTS:\\n\n            Reference clock frequency min=5MHz, max=800MHz\\n\n            Feedback divider min=16, max=320\\n\n            VCO frequency min=400MHz, max=1600MHz",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 1,
    +              "children": {
    +                "fields": {
    +                  "LOCK": {
    +                    "description": "PLL is locked",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BYPASS": {
    +                    "description": "Passes the reference clock to the output instead of the divided VCO. The VCO continues to run so the user can switch between the reference clock and the divided VCO but the output will glitch when doing so.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "REFDIV": {
    +                    "description": "Divides the PLL input reference clock.\\n\n                Behaviour is undefined for div=0.\\n\n                PLL output will be unpredictable during refdiv changes, wait for lock=1 before using it.",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "PWR": {
    +              "description": "Controls the PLL power modes.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 45,
    +              "children": {
    +                "fields": {
    +                  "VCOPD": {
    +                    "description": "PLL VCO powerdown\\n\n                To save power set high when PLL output not required or bypass=1.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "POSTDIVPD": {
    +                    "description": "PLL post divider powerdown\\n\n                To save power set high when PLL output not required or bypass=1.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DSMPD": {
    +                    "description": "PLL DSM powerdown\\n\n                Nothing is achieved by setting this low.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PD": {
    +                    "description": "PLL powerdown\\n\n                To save power set high when PLL output not required.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FBDIV_INT": {
    +              "description": "Feedback divisor\\n\n            (note: this PLL does not support fractional division)",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FBDIV_INT": {
    +                    "description": "see ctrl reg description for constraints",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "PRIM": {
    +              "description": "Controls the PLL post dividers for the primary output\\n\n            (note: this PLL does not have a secondary output)\\n\n            the primary output is driven from VCO divided by postdiv1*postdiv2",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 487424,
    +              "children": {
    +                "fields": {
    +                  "POSTDIV1": {
    +                    "description": "divide by 1-7",
    +                    "offset": 16,
    +                    "size": 3
    +                  },
    +                  "POSTDIV2": {
    +                    "description": "divide by 1-7",
    +                    "offset": 12,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "PPB": {
    +        "children": {
    +          "registers": {
    +            "SYST_CSR": {
    +              "description": "Use the SysTick Control and Status Register to enable the SysTick features.",
    +              "offset": 57360,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "COUNTFLAG": {
    +                    "description": "Returns 1 if timer counted to 0 since last time this was read. Clears on read by application or debugger.",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CLKSOURCE": {
    +                    "description": "SysTick clock source. Always reads as one if SYST_CALIB reports NOREF.\\n\n                Selects the SysTick timer clock source:\\n\n                0 = External reference clock.\\n\n                1 = Processor clock.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TICKINT": {
    +                    "description": "Enables SysTick exception request:\\n\n                0 = Counting down to zero does not assert the SysTick exception request.\\n\n                1 = Counting down to zero to asserts the SysTick exception request.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ENABLE": {
    +                    "description": "Enable SysTick counter:\\n\n                0 = Counter disabled.\\n\n                1 = Counter enabled.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SYST_RVR": {
    +              "description": "Use the SysTick Reload Value Register to specify the start value to load into the current value register when the counter reaches 0. It can be any value between 0 and 0x00FFFFFF. A start value of 0 is possible, but has no effect because the SysTick interrupt and COUNTFLAG are activated when counting from 1 to 0. The reset value of this register is UNKNOWN.\\n\n            To generate a multi-shot timer with a period of N processor clock cycles, use a RELOAD value of N-1. For example, if the SysTick interrupt is required every 100 clock pulses, set RELOAD to 99.",
    +              "offset": 57364,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "RELOAD": {
    +                    "description": "Value to load into the SysTick Current Value Register when the counter reaches 0.",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "SYST_CVR": {
    +              "description": "Use the SysTick Current Value Register to find the current value in the register. The reset value of this register is UNKNOWN.",
    +              "offset": 57368,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CURRENT": {
    +                    "description": "Reads return the current value of the SysTick counter. This register is write-clear. Writing to it with any value clears the register to 0. Clearing this register also clears the COUNTFLAG bit of the SysTick Control and Status Register.",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "SYST_CALIB": {
    +              "description": "Use the SysTick Calibration Value Register to enable software to scale to any required speed using divide and multiply.",
    +              "offset": 57372,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "NOREF": {
    +                    "description": "If reads as 1, the Reference clock is not provided - the CLKSOURCE bit of the SysTick Control and Status register will be forced to 1 and cannot be cleared to 0.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SKEW": {
    +                    "description": "If reads as 1, the calibration value for 10ms is inexact (due to clock frequency).",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TENMS": {
    +                    "description": "An optional Reload value to be used for 10ms (100Hz) timing, subject to system clock skew errors. If the value reads as 0, the calibration value is not known.",
    +                    "offset": 0,
    +                    "size": 24,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "NVIC_ISER": {
    +              "description": "Use the Interrupt Set-Enable Register to enable interrupts and determine which interrupts are currently enabled.\\n\n            If a pending interrupt is enabled, the NVIC activates the interrupt based on its priority. If an interrupt is not enabled, asserting its interrupt signal changes the interrupt state to pending, but the NVIC never activates the interrupt, regardless of its priority.",
    +              "offset": 57600,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SETENA": {
    +                    "description": "Interrupt set-enable bits.\\n\n                Write:\\n\n                0 = No effect.\\n\n                1 = Enable interrupt.\\n\n                Read:\\n\n                0 = Interrupt disabled.\\n\n                1 = Interrupt enabled.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "NVIC_ICER": {
    +              "description": "Use the Interrupt Clear-Enable Registers to disable interrupts and determine which interrupts are currently enabled.",
    +              "offset": 57728,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CLRENA": {
    +                    "description": "Interrupt clear-enable bits.\\n\n                Write:\\n\n                0 = No effect.\\n\n                1 = Disable interrupt.\\n\n                Read:\\n\n                0 = Interrupt disabled.\\n\n                1 = Interrupt enabled.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "NVIC_ISPR": {
    +              "description": "The NVIC_ISPR forces interrupts into the pending state, and shows which interrupts are pending.",
    +              "offset": 57856,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SETPEND": {
    +                    "description": "Interrupt set-pending bits.\\n\n                Write:\\n\n                0 = No effect.\\n\n                1 = Changes interrupt state to pending.\\n\n                Read:\\n\n                0 = Interrupt is not pending.\\n\n                1 = Interrupt is pending.\\n\n                Note: Writing 1 to the NVIC_ISPR bit corresponding to:\\n\n                An interrupt that is pending has no effect.\\n\n                A disabled interrupt sets the state of that interrupt to pending.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "NVIC_ICPR": {
    +              "description": "Use the Interrupt Clear-Pending Register to clear pending interrupts and determine which interrupts are currently pending.",
    +              "offset": 57984,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CLRPEND": {
    +                    "description": "Interrupt clear-pending bits.\\n\n                Write:\\n\n                0 = No effect.\\n\n                1 = Removes pending state and interrupt.\\n\n                Read:\\n\n                0 = Interrupt is not pending.\\n\n                1 = Interrupt is pending.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "NVIC_IPR0": {
    +              "description": "Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest.\\n\n            Note: Writing 1 to an NVIC_ICPR bit does not affect the active state of the corresponding interrupt.\\n\n            These registers are only word-accessible",
    +              "offset": 58368,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IP_3": {
    +                    "description": "Priority of interrupt 3",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "IP_2": {
    +                    "description": "Priority of interrupt 2",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "IP_1": {
    +                    "description": "Priority of interrupt 1",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "IP_0": {
    +                    "description": "Priority of interrupt 0",
    +                    "offset": 6,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "NVIC_IPR1": {
    +              "description": "Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest.",
    +              "offset": 58372,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IP_7": {
    +                    "description": "Priority of interrupt 7",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "IP_6": {
    +                    "description": "Priority of interrupt 6",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "IP_5": {
    +                    "description": "Priority of interrupt 5",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "IP_4": {
    +                    "description": "Priority of interrupt 4",
    +                    "offset": 6,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "NVIC_IPR2": {
    +              "description": "Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest.",
    +              "offset": 58376,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IP_11": {
    +                    "description": "Priority of interrupt 11",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "IP_10": {
    +                    "description": "Priority of interrupt 10",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "IP_9": {
    +                    "description": "Priority of interrupt 9",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "IP_8": {
    +                    "description": "Priority of interrupt 8",
    +                    "offset": 6,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "NVIC_IPR3": {
    +              "description": "Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest.",
    +              "offset": 58380,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IP_15": {
    +                    "description": "Priority of interrupt 15",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "IP_14": {
    +                    "description": "Priority of interrupt 14",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "IP_13": {
    +                    "description": "Priority of interrupt 13",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "IP_12": {
    +                    "description": "Priority of interrupt 12",
    +                    "offset": 6,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "NVIC_IPR4": {
    +              "description": "Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest.",
    +              "offset": 58384,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IP_19": {
    +                    "description": "Priority of interrupt 19",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "IP_18": {
    +                    "description": "Priority of interrupt 18",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "IP_17": {
    +                    "description": "Priority of interrupt 17",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "IP_16": {
    +                    "description": "Priority of interrupt 16",
    +                    "offset": 6,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "NVIC_IPR5": {
    +              "description": "Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest.",
    +              "offset": 58388,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IP_23": {
    +                    "description": "Priority of interrupt 23",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "IP_22": {
    +                    "description": "Priority of interrupt 22",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "IP_21": {
    +                    "description": "Priority of interrupt 21",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "IP_20": {
    +                    "description": "Priority of interrupt 20",
    +                    "offset": 6,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "NVIC_IPR6": {
    +              "description": "Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest.",
    +              "offset": 58392,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IP_27": {
    +                    "description": "Priority of interrupt 27",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "IP_26": {
    +                    "description": "Priority of interrupt 26",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "IP_25": {
    +                    "description": "Priority of interrupt 25",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "IP_24": {
    +                    "description": "Priority of interrupt 24",
    +                    "offset": 6,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "NVIC_IPR7": {
    +              "description": "Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest.",
    +              "offset": 58396,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IP_31": {
    +                    "description": "Priority of interrupt 31",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "IP_30": {
    +                    "description": "Priority of interrupt 30",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "IP_29": {
    +                    "description": "Priority of interrupt 29",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "IP_28": {
    +                    "description": "Priority of interrupt 28",
    +                    "offset": 6,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CPUID": {
    +              "description": "Read the CPU ID Base Register to determine: the ID number of the processor core, the version number of the processor core, the implementation details of the processor core.",
    +              "offset": 60672,
    +              "size": 32,
    +              "reset_value": 1091356161,
    +              "children": {
    +                "fields": {
    +                  "IMPLEMENTER": {
    +                    "description": "Implementor code: 0x41 = ARM",
    +                    "offset": 24,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "VARIANT": {
    +                    "description": "Major revision number n in the rnpm revision status:\\n\n                0x0 = Revision 0.",
    +                    "offset": 20,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "ARCHITECTURE": {
    +                    "description": "Constant that defines the architecture of the processor:\\n\n                0xC = ARMv6-M architecture.",
    +                    "offset": 16,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "PARTNO": {
    +                    "description": "Number of processor within family: 0xC60 = Cortex-M0+",
    +                    "offset": 4,
    +                    "size": 12,
    +                    "access": "read-only"
    +                  },
    +                  "REVISION": {
    +                    "description": "Minor revision number m in the rnpm revision status:\\n\n                0x1 = Patch 1.",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "ICSR": {
    +              "description": "Use the Interrupt Control State Register to set a pending Non-Maskable Interrupt (NMI), set or clear a pending PendSV, set or clear a pending SysTick, check for pending exceptions, check the vector number of the highest priority pended exception, check the vector number of the active exception.",
    +              "offset": 60676,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "NMIPENDSET": {
    +                    "description": "Setting this bit will activate an NMI. Since NMI is the highest priority exception, it will activate as soon as it is registered.\\n\n                NMI set-pending bit.\\n\n                Write:\\n\n                0 = No effect.\\n\n                1 = Changes NMI exception state to pending.\\n\n                Read:\\n\n                0 = NMI exception is not pending.\\n\n                1 = NMI exception is pending.\\n\n                Because NMI is the highest-priority exception, normally the processor enters the NMI\\n\n                exception handler as soon as it detects a write of 1 to this bit. Entering the handler then clears\\n\n                this bit to 0. This means a read of this bit by the NMI exception handler returns 1 only if the\\n\n                NMI signal is reasserted while the processor is executing that handler.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "PENDSVSET": {
    +                    "description": "PendSV set-pending bit.\\n\n                Write:\\n\n                0 = No effect.\\n\n                1 = Changes PendSV exception state to pending.\\n\n                Read:\\n\n                0 = PendSV exception is not pending.\\n\n                1 = PendSV exception is pending.\\n\n                Writing 1 to this bit is the only way to set the PendSV exception state to pending.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "PENDSVCLR": {
    +                    "description": "PendSV clear-pending bit.\\n\n                Write:\\n\n                0 = No effect.\\n\n                1 = Removes the pending state from the PendSV exception.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "PENDSTSET": {
    +                    "description": "SysTick exception set-pending bit.\\n\n                Write:\\n\n                0 = No effect.\\n\n                1 = Changes SysTick exception state to pending.\\n\n                Read:\\n\n                0 = SysTick exception is not pending.\\n\n                1 = SysTick exception is pending.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "PENDSTCLR": {
    +                    "description": "SysTick exception clear-pending bit.\\n\n                Write:\\n\n                0 = No effect.\\n\n                1 = Removes the pending state from the SysTick exception.\\n\n                This bit is WO. On a register read its value is Unknown.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "ISRPREEMPT": {
    +                    "description": "The system can only access this bit when the core is halted. It indicates that a pending interrupt is to be taken in the next running cycle. If C_MASKINTS is clear in the Debug Halting Control and Status Register, the interrupt is serviced.",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ISRPENDING": {
    +                    "description": "External interrupt pending flag",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "VECTPENDING": {
    +                    "description": "Indicates the exception number for the highest priority pending exception: 0 = no pending exceptions. Non zero = The pending state includes the effect of memory-mapped enable and mask registers. It does not include the PRIMASK special-purpose register qualifier.",
    +                    "offset": 12,
    +                    "size": 9,
    +                    "access": "read-only"
    +                  },
    +                  "VECTACTIVE": {
    +                    "description": "Active exception number field. Reset clears the VECTACTIVE field.",
    +                    "offset": 0,
    +                    "size": 9,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "VTOR": {
    +              "description": "The VTOR holds the vector table offset address.",
    +              "offset": 60680,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "TBLOFF": {
    +                    "description": "Bits [31:8] of the indicate the vector table offset address.",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "AIRCR": {
    +              "description": "Use the Application Interrupt and Reset Control Register to: determine data endianness, clear all active state information from debug halt mode, request a system reset.",
    +              "offset": 60684,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "VECTKEY": {
    +                    "description": "Register key:\\n\n                Reads as Unknown\\n\n                On writes, write 0x05FA to VECTKEY, otherwise the write is ignored.",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "ENDIANESS": {
    +                    "description": "Data endianness implemented:\\n\n                0 = Little-endian.",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SYSRESETREQ": {
    +                    "description": "Writing 1 to this bit causes the SYSRESETREQ signal to the outer system to be asserted to request a reset. The intention is to force a large system reset of all major components except for debug. The C_HALT bit in the DHCSR is cleared as a result of the system reset requested. The debugger does not lose contact with the device.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "VECTCLRACTIVE": {
    +                    "description": "Clears all active state information for fixed and configurable exceptions. This bit: is self-clearing, can only be set by the DAP when the core is halted.  When set: clears all active exception status of the processor, forces a return to Thread mode, forces an IPSR of 0. A debugger must re-initialize the stack.",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SCR": {
    +              "description": "System Control Register. Use the System Control Register for power-management functions: signal to the system when the processor can enter a low power state, control how the processor enters and exits low power states.",
    +              "offset": 60688,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SEVONPEND": {
    +                    "description": "Send Event on Pending bit:\\n\n                0 = Only enabled interrupts or events can wakeup the processor, disabled interrupts are excluded.\\n\n                1 = Enabled events and all interrupts, including disabled interrupts, can wakeup the processor.\\n\n                When an event or interrupt becomes pending, the event signal wakes up the processor from WFE. If the\\n\n                processor is not waiting for an event, the event is registered and affects the next WFE.\\n\n                The processor also wakes up on execution of an SEV instruction or an external event.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SLEEPDEEP": {
    +                    "description": "Controls whether the processor uses sleep or deep sleep as its low power mode:\\n\n                0 = Sleep.\\n\n                1 = Deep sleep.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SLEEPONEXIT": {
    +                    "description": "Indicates sleep-on-exit when returning from Handler mode to Thread mode:\\n\n                0 = Do not sleep when returning to Thread mode.\\n\n                1 = Enter sleep, or deep sleep, on return from an ISR to Thread mode.\\n\n                Setting this bit to 1 enables an interrupt driven application to avoid returning to an empty main application.",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CCR": {
    +              "description": "The Configuration and Control Register permanently enables stack alignment and causes unaligned accesses to result in a Hard Fault.",
    +              "offset": 60692,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "STKALIGN": {
    +                    "description": "Always reads as one, indicates 8-byte stack alignment on exception entry. On exception entry, the processor uses bit[9] of the stacked PSR to indicate the stack alignment. On return from the exception it uses this stacked bit to restore the correct stack alignment.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "UNALIGN_TRP": {
    +                    "description": "Always reads as one, indicates that all unaligned accesses generate a HardFault.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SHPR2": {
    +              "description": "System handlers are a special class of exception handler that can have their priority set to any of the priority levels. Use the System Handler Priority Register 2 to set the priority of SVCall.",
    +              "offset": 60700,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "PRI_11": {
    +                    "description": "Priority of system handler 11, SVCall",
    +                    "offset": 30,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "SHPR3": {
    +              "description": "System handlers are a special class of exception handler that can have their priority set to any of the priority levels. Use the System Handler Priority Register 3 to set the priority of PendSV and SysTick.",
    +              "offset": 60704,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "PRI_15": {
    +                    "description": "Priority of system handler 15, SysTick",
    +                    "offset": 30,
    +                    "size": 2
    +                  },
    +                  "PRI_14": {
    +                    "description": "Priority of system handler 14, PendSV",
    +                    "offset": 22,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "SHCSR": {
    +              "description": "Use the System Handler Control and State Register to determine or clear the pending status of SVCall.",
    +              "offset": 60708,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SVCALLPENDED": {
    +                    "description": "Reads as 1 if SVCall is Pending.  Write 1 to set pending SVCall, write 0 to clear pending SVCall.",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MPU_TYPE": {
    +              "description": "Read the MPU Type Register to determine if the processor implements an MPU, and how many regions the MPU supports.",
    +              "offset": 60816,
    +              "size": 32,
    +              "reset_value": 2048,
    +              "children": {
    +                "fields": {
    +                  "IREGION": {
    +                    "description": "Instruction region. Reads as zero as ARMv6-M only supports a unified MPU.",
    +                    "offset": 16,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "DREGION": {
    +                    "description": "Number of regions supported by the MPU.",
    +                    "offset": 8,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "SEPARATE": {
    +                    "description": "Indicates support for separate instruction and data address maps. Reads as 0 as ARMv6-M only supports a unified MPU.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "MPU_CTRL": {
    +              "description": "Use the MPU Control Register to enable and disable the MPU, and to control whether the default memory map is enabled as a background region for privileged accesses, and whether the MPU is enabled for HardFaults and NMIs.",
    +              "offset": 60820,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "PRIVDEFENA": {
    +                    "description": "Controls whether the default memory map is enabled as a background region for privileged accesses. This bit is ignored when ENABLE is clear.\\n\n                0 = If the MPU is enabled, disables use of the default memory map. Any memory access to a location not\\n\n                covered by any enabled region causes a fault.\\n\n                1 = If the MPU is enabled, enables use of the default memory map as a background region for privileged software accesses.\\n\n                When enabled, the background region acts as if it is region number -1. Any region that is defined and enabled has priority over this default map.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "HFNMIENA": {
    +                    "description": "Controls the use of the MPU for HardFaults and NMIs. Setting this bit when ENABLE is clear results in UNPREDICTABLE behaviour.\\n\n                When the MPU is enabled:\\n\n                0 = MPU is disabled during HardFault and NMI handlers, regardless of the value of the ENABLE bit.\\n\n                1 = the MPU is enabled during HardFault and NMI handlers.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ENABLE": {
    +                    "description": "Enables the MPU. If the MPU is disabled, privileged and unprivileged accesses use the default memory map.\\n\n                0 = MPU disabled.\\n\n                1 = MPU enabled.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MPU_RNR": {
    +              "description": "Use the MPU Region Number Register to select the region currently accessed by MPU_RBAR and MPU_RASR.",
    +              "offset": 60824,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "REGION": {
    +                    "description": "Indicates the MPU region referenced by the MPU_RBAR and MPU_RASR registers.\\n\n                The MPU supports 8 memory regions, so the permitted values of this field are 0-7.",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "MPU_RBAR": {
    +              "description": "Read the MPU Region Base Address Register to determine the base address of the region identified by MPU_RNR. Write to update the base address of said region or that of a specified region, with whose number MPU_RNR will also be updated.",
    +              "offset": 60828,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ADDR": {
    +                    "description": "Base address of the region.",
    +                    "offset": 8,
    +                    "size": 24
    +                  },
    +                  "VALID": {
    +                    "description": "On writes, indicates whether the write must update the base address of the region identified by the REGION field, updating the MPU_RNR to indicate this new region.\\n\n                Write:\\n\n                0 = MPU_RNR not changed, and the processor:\\n\n                Updates the base address for the region specified in the MPU_RNR.\\n\n                Ignores the value of the REGION field.\\n\n                1 = The processor:\\n\n                Updates the value of the MPU_RNR to the value of the REGION field.\\n\n                Updates the base address for the region specified in the REGION field.\\n\n                Always reads as zero.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "REGION": {
    +                    "description": "On writes, specifies the number of the region whose base address to update provided VALID is set written as 1. On reads, returns bits [3:0] of MPU_RNR.",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "MPU_RASR": {
    +              "description": "Use the MPU Region Attribute and Size Register to define the size, access behaviour and memory type of the region identified by MPU_RNR, and enable that region.",
    +              "offset": 60832,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ATTRS": {
    +                    "description": "The MPU Region Attribute field. Use to define the region attribute control.\\n\n                28 = XN: Instruction access disable bit:\\n\n                0 = Instruction fetches enabled.\\n\n                1 = Instruction fetches disabled.\\n\n                26:24 = AP: Access permission field\\n\n                18 = S: Shareable bit\\n\n                17 = C: Cacheable bit\\n\n                16 = B: Bufferable bit",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "SRD": {
    +                    "description": "Subregion Disable. For regions of 256 bytes or larger, each bit of this field controls whether one of the eight equal subregions is enabled.",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "SIZE": {
    +                    "description": "Indicates the region size. Region size in bytes = 2^(SIZE+1). The minimum permitted value is 7 (b00111) = 256Bytes",
    +                    "offset": 1,
    +                    "size": 5
    +                  },
    +                  "ENABLE": {
    +                    "description": "Enables the region.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "BUSCTRL": {
    +        "description": "Register block for busfabric control signals and performance counters",
    +        "children": {
    +          "registers": {
    +            "BUS_PRIORITY": {
    +              "description": "Set the priority of each master for bus arbitration.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "DMA_W": {
    +                    "description": "0 - low priority, 1 - high priority",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "DMA_R": {
    +                    "description": "0 - low priority, 1 - high priority",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PROC1": {
    +                    "description": "0 - low priority, 1 - high priority",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "PROC0": {
    +                    "description": "0 - low priority, 1 - high priority",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BUS_PRIORITY_ACK": {
    +              "description": "Bus priority acknowledge",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "BUS_PRIORITY_ACK": {
    +                    "description": "Goes to 1 once all arbiters have registered the new global priority levels.\\n\n                Arbiters update their local priority when servicing a new nonsequential access.\\n\n                In normal circumstances this will happen almost immediately.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PERFCTR0": {
    +              "description": "Bus fabric performance counter 0",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "PERFCTR0": {
    +                    "description": "Busfabric saturating performance counter 0\\n\n                Count some event signal from the busfabric arbiters.\\n\n                Write any value to clear. Select an event to count using PERFSEL0",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "PERFSEL0": {
    +              "description": "Bus fabric performance event select for PERFCTR0",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "PERFSEL0": {
    +                    "description": "Select an event for PERFCTR0. Count either contested accesses, or all accesses, on a downstream port of the main crossbar.",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "apb_contested": {
    +                            "value": 0
    +                          },
    +                          "apb": {
    +                            "value": 1
    +                          },
    +                          "fastperi_contested": {
    +                            "value": 2
    +                          },
    +                          "fastperi": {
    +                            "value": 3
    +                          },
    +                          "sram5_contested": {
    +                            "value": 4
    +                          },
    +                          "sram5": {
    +                            "value": 5
    +                          },
    +                          "sram4_contested": {
    +                            "value": 6
    +                          },
    +                          "sram4": {
    +                            "value": 7
    +                          },
    +                          "sram3_contested": {
    +                            "value": 8
    +                          },
    +                          "sram3": {
    +                            "value": 9
    +                          },
    +                          "sram2_contested": {
    +                            "value": 10
    +                          },
    +                          "sram2": {
    +                            "value": 11
    +                          },
    +                          "sram1_contested": {
    +                            "value": 12
    +                          },
    +                          "sram1": {
    +                            "value": 13
    +                          },
    +                          "sram0_contested": {
    +                            "value": 14
    +                          },
    +                          "sram0": {
    +                            "value": 15
    +                          },
    +                          "xip_main_contested": {
    +                            "value": 16
    +                          },
    +                          "xip_main": {
    +                            "value": 17
    +                          },
    +                          "rom_contested": {
    +                            "value": 18
    +                          },
    +                          "rom": {
    +                            "value": 19
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PERFCTR1": {
    +              "description": "Bus fabric performance counter 1",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "PERFCTR1": {
    +                    "description": "Busfabric saturating performance counter 1\\n\n                Count some event signal from the busfabric arbiters.\\n\n                Write any value to clear. Select an event to count using PERFSEL1",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "PERFSEL1": {
    +              "description": "Bus fabric performance event select for PERFCTR1",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "PERFSEL1": {
    +                    "description": "Select an event for PERFCTR1. Count either contested accesses, or all accesses, on a downstream port of the main crossbar.",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "apb_contested": {
    +                            "value": 0
    +                          },
    +                          "apb": {
    +                            "value": 1
    +                          },
    +                          "fastperi_contested": {
    +                            "value": 2
    +                          },
    +                          "fastperi": {
    +                            "value": 3
    +                          },
    +                          "sram5_contested": {
    +                            "value": 4
    +                          },
    +                          "sram5": {
    +                            "value": 5
    +                          },
    +                          "sram4_contested": {
    +                            "value": 6
    +                          },
    +                          "sram4": {
    +                            "value": 7
    +                          },
    +                          "sram3_contested": {
    +                            "value": 8
    +                          },
    +                          "sram3": {
    +                            "value": 9
    +                          },
    +                          "sram2_contested": {
    +                            "value": 10
    +                          },
    +                          "sram2": {
    +                            "value": 11
    +                          },
    +                          "sram1_contested": {
    +                            "value": 12
    +                          },
    +                          "sram1": {
    +                            "value": 13
    +                          },
    +                          "sram0_contested": {
    +                            "value": 14
    +                          },
    +                          "sram0": {
    +                            "value": 15
    +                          },
    +                          "xip_main_contested": {
    +                            "value": 16
    +                          },
    +                          "xip_main": {
    +                            "value": 17
    +                          },
    +                          "rom_contested": {
    +                            "value": 18
    +                          },
    +                          "rom": {
    +                            "value": 19
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PERFCTR2": {
    +              "description": "Bus fabric performance counter 2",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "PERFCTR2": {
    +                    "description": "Busfabric saturating performance counter 2\\n\n                Count some event signal from the busfabric arbiters.\\n\n                Write any value to clear. Select an event to count using PERFSEL2",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "PERFSEL2": {
    +              "description": "Bus fabric performance event select for PERFCTR2",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "PERFSEL2": {
    +                    "description": "Select an event for PERFCTR2. Count either contested accesses, or all accesses, on a downstream port of the main crossbar.",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "apb_contested": {
    +                            "value": 0
    +                          },
    +                          "apb": {
    +                            "value": 1
    +                          },
    +                          "fastperi_contested": {
    +                            "value": 2
    +                          },
    +                          "fastperi": {
    +                            "value": 3
    +                          },
    +                          "sram5_contested": {
    +                            "value": 4
    +                          },
    +                          "sram5": {
    +                            "value": 5
    +                          },
    +                          "sram4_contested": {
    +                            "value": 6
    +                          },
    +                          "sram4": {
    +                            "value": 7
    +                          },
    +                          "sram3_contested": {
    +                            "value": 8
    +                          },
    +                          "sram3": {
    +                            "value": 9
    +                          },
    +                          "sram2_contested": {
    +                            "value": 10
    +                          },
    +                          "sram2": {
    +                            "value": 11
    +                          },
    +                          "sram1_contested": {
    +                            "value": 12
    +                          },
    +                          "sram1": {
    +                            "value": 13
    +                          },
    +                          "sram0_contested": {
    +                            "value": 14
    +                          },
    +                          "sram0": {
    +                            "value": 15
    +                          },
    +                          "xip_main_contested": {
    +                            "value": 16
    +                          },
    +                          "xip_main": {
    +                            "value": 17
    +                          },
    +                          "rom_contested": {
    +                            "value": 18
    +                          },
    +                          "rom": {
    +                            "value": 19
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PERFCTR3": {
    +              "description": "Bus fabric performance counter 3",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "PERFCTR3": {
    +                    "description": "Busfabric saturating performance counter 3\\n\n                Count some event signal from the busfabric arbiters.\\n\n                Write any value to clear. Select an event to count using PERFSEL3",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "PERFSEL3": {
    +              "description": "Bus fabric performance event select for PERFCTR3",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 31,
    +              "children": {
    +                "fields": {
    +                  "PERFSEL3": {
    +                    "description": "Select an event for PERFCTR3. Count either contested accesses, or all accesses, on a downstream port of the main crossbar.",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "enum": {
    +                      "size": 5,
    +                      "children": {
    +                        "enum_fields": {
    +                          "apb_contested": {
    +                            "value": 0
    +                          },
    +                          "apb": {
    +                            "value": 1
    +                          },
    +                          "fastperi_contested": {
    +                            "value": 2
    +                          },
    +                          "fastperi": {
    +                            "value": 3
    +                          },
    +                          "sram5_contested": {
    +                            "value": 4
    +                          },
    +                          "sram5": {
    +                            "value": 5
    +                          },
    +                          "sram4_contested": {
    +                            "value": 6
    +                          },
    +                          "sram4": {
    +                            "value": 7
    +                          },
    +                          "sram3_contested": {
    +                            "value": 8
    +                          },
    +                          "sram3": {
    +                            "value": 9
    +                          },
    +                          "sram2_contested": {
    +                            "value": 10
    +                          },
    +                          "sram2": {
    +                            "value": 11
    +                          },
    +                          "sram1_contested": {
    +                            "value": 12
    +                          },
    +                          "sram1": {
    +                            "value": 13
    +                          },
    +                          "sram0_contested": {
    +                            "value": 14
    +                          },
    +                          "sram0": {
    +                            "value": 15
    +                          },
    +                          "xip_main_contested": {
    +                            "value": 16
    +                          },
    +                          "xip_main": {
    +                            "value": 17
    +                          },
    +                          "rom_contested": {
    +                            "value": 18
    +                          },
    +                          "rom": {
    +                            "value": 19
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "UART0": {
    +        "children": {
    +          "registers": {
    +            "UARTDR": {
    +              "description": "Data Register, UARTDR",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "OE": {
    +                    "description": "Overrun error. This bit is set to 1 if data is received and the receive FIFO is already full. This is cleared to 0 once there is an empty space in the FIFO and a new character can be written to it.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BE": {
    +                    "description": "Break error. This bit is set to 1 if a break condition was detected, indicating that the received data input was held LOW for longer than a full-word transmission time (defined as start, data, parity and stop bits). In FIFO mode, this error is associated with the character at the top of the FIFO. When a break occurs, only one 0 character is loaded into the FIFO. The next character is only enabled after the receive data input goes to a 1 (marking state), and the next valid start bit is received.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PE": {
    +                    "description": "Parity error. When set to 1, it indicates that the parity of the received data character does not match the parity that the EPS and SPS bits in the Line Control Register, UARTLCR_H. In FIFO mode, this error is associated with the character at the top of the FIFO.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FE": {
    +                    "description": "Framing error. When set to 1, it indicates that the received character did not have a valid stop bit (a valid stop bit is 1). In FIFO mode, this error is associated with the character at the top of the FIFO.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DATA": {
    +                    "description": "Receive (read) data character. Transmit (write) data character.",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "UARTRSR": {
    +              "description": "Receive Status Register/Error Clear Register, UARTRSR/UARTECR",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "OE": {
    +                    "description": "Overrun error. This bit is set to 1 if data is received and the FIFO is already full. This bit is cleared to 0 by a write to UARTECR. The FIFO contents remain valid because no more data is written when the FIFO is full, only the contents of the shift register are overwritten. The CPU must now read the data, to empty the FIFO.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "BE": {
    +                    "description": "Break error. This bit is set to 1 if a break condition was detected, indicating that the received data input was held LOW for longer than a full-word transmission time (defined as start, data, parity, and stop bits). This bit is cleared to 0 after a write to UARTECR. In FIFO mode, this error is associated with the character at the top of the FIFO. When a break occurs, only one 0 character is loaded into the FIFO. The next character is only enabled after the receive data input goes to a 1 (marking state) and the next valid start bit is received.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PE": {
    +                    "description": "Parity error. When set to 1, it indicates that the parity of the received data character does not match the parity that the EPS and SPS bits in the Line Control Register, UARTLCR_H. This bit is cleared to 0 by a write to UARTECR. In FIFO mode, this error is associated with the character at the top of the FIFO.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FE": {
    +                    "description": "Framing error. When set to 1, it indicates that the received character did not have a valid stop bit (a valid stop bit is 1). This bit is cleared to 0 by a write to UARTECR. In FIFO mode, this error is associated with the character at the top of the FIFO.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "UARTFR": {
    +              "description": "Flag Register, UARTFR",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 144,
    +              "children": {
    +                "fields": {
    +                  "RI": {
    +                    "description": "Ring indicator. This bit is the complement of the UART ring indicator, nUARTRI, modem status input. That is, the bit is 1 when nUARTRI is LOW.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXFE": {
    +                    "description": "Transmit FIFO empty. The meaning of this bit depends on the state of the FEN bit in the Line Control Register, UARTLCR_H. If the FIFO is disabled, this bit is set when the transmit holding register is empty. If the FIFO is enabled, the TXFE bit is set when the transmit FIFO is empty. This bit does not indicate if there is data in the transmit shift register.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXFF": {
    +                    "description": "Receive FIFO full. The meaning of this bit depends on the state of the FEN bit in the UARTLCR_H Register. If the FIFO is disabled, this bit is set when the receive holding register is full. If the FIFO is enabled, the RXFF bit is set when the receive FIFO is full.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXFF": {
    +                    "description": "Transmit FIFO full. The meaning of this bit depends on the state of the FEN bit in the UARTLCR_H Register. If the FIFO is disabled, this bit is set when the transmit holding register is full. If the FIFO is enabled, the TXFF bit is set when the transmit FIFO is full.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXFE": {
    +                    "description": "Receive FIFO empty. The meaning of this bit depends on the state of the FEN bit in the UARTLCR_H Register. If the FIFO is disabled, this bit is set when the receive holding register is empty. If the FIFO is enabled, the RXFE bit is set when the receive FIFO is empty.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BUSY": {
    +                    "description": "UART busy. If this bit is set to 1, the UART is busy transmitting data. This bit remains set until the complete byte, including all the stop bits, has been sent from the shift register. This bit is set as soon as the transmit FIFO becomes non-empty, regardless of whether the UART is enabled or not.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DCD": {
    +                    "description": "Data carrier detect. This bit is the complement of the UART data carrier detect, nUARTDCD, modem status input. That is, the bit is 1 when nUARTDCD is LOW.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DSR": {
    +                    "description": "Data set ready. This bit is the complement of the UART data set ready, nUARTDSR, modem status input. That is, the bit is 1 when nUARTDSR is LOW.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CTS": {
    +                    "description": "Clear to send. This bit is the complement of the UART clear to send, nUARTCTS, modem status input. That is, the bit is 1 when nUARTCTS is LOW.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "UARTILPR": {
    +              "description": "IrDA Low-Power Counter Register, UARTILPR",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ILPDVSR": {
    +                    "description": "8-bit low-power divisor value. These bits are cleared to 0 at reset.",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "UARTIBRD": {
    +              "description": "Integer Baud Rate Register, UARTIBRD",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "BAUD_DIVINT": {
    +                    "description": "The integer baud rate divisor. These bits are cleared to 0 on reset.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "UARTFBRD": {
    +              "description": "Fractional Baud Rate Register, UARTFBRD",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "BAUD_DIVFRAC": {
    +                    "description": "The fractional baud rate divisor. These bits are cleared to 0 on reset.",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "UARTLCR_H": {
    +              "description": "Line Control Register, UARTLCR_H",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SPS": {
    +                    "description": "Stick parity select. 0 = stick parity is disabled 1 = either: * if the EPS bit is 0 then the parity bit is transmitted and checked as a 1 * if the EPS bit is 1 then the parity bit is transmitted and checked as a 0. This bit has no effect when the PEN bit disables parity checking and generation.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "WLEN": {
    +                    "description": "Word length. These bits indicate the number of data bits transmitted or received in a frame as follows: b11 = 8 bits b10 = 7 bits b01 = 6 bits b00 = 5 bits.",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "FEN": {
    +                    "description": "Enable FIFOs: 0 = FIFOs are disabled (character mode) that is, the FIFOs become 1-byte-deep holding registers 1 = transmit and receive FIFO buffers are enabled (FIFO mode).",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "STP2": {
    +                    "description": "Two stop bits select. If this bit is set to 1, two stop bits are transmitted at the end of the frame. The receive logic does not check for two stop bits being received.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EPS": {
    +                    "description": "Even parity select. Controls the type of parity the UART uses during transmission and reception: 0 = odd parity. The UART generates or checks for an odd number of 1s in the data and parity bits. 1 = even parity. The UART generates or checks for an even number of 1s in the data and parity bits. This bit has no effect when the PEN bit disables parity checking and generation.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PEN": {
    +                    "description": "Parity enable: 0 = parity is disabled and no parity bit added to the data frame 1 = parity checking and generation is enabled.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "BRK": {
    +                    "description": "Send break. If this bit is set to 1, a low-level is continually output on the UARTTXD output, after completing transmission of the current character. For the proper execution of the break command, the software must set this bit for at least two complete frames. For normal use, this bit must be cleared to 0.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "UARTCR": {
    +              "description": "Control Register, UARTCR",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 768,
    +              "children": {
    +                "fields": {
    +                  "CTSEN": {
    +                    "description": "CTS hardware flow control enable. If this bit is set to 1, CTS hardware flow control is enabled. Data is only transmitted when the nUARTCTS signal is asserted.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "RTSEN": {
    +                    "description": "RTS hardware flow control enable. If this bit is set to 1, RTS hardware flow control is enabled. Data is only requested when there is space in the receive FIFO for it to be received.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "OUT2": {
    +                    "description": "This bit is the complement of the UART Out2 (nUARTOut2) modem status output. That is, when the bit is programmed to a 1, the output is 0. For DTE this can be used as Ring Indicator (RI).",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "OUT1": {
    +                    "description": "This bit is the complement of the UART Out1 (nUARTOut1) modem status output. That is, when the bit is programmed to a 1 the output is 0. For DTE this can be used as Data Carrier Detect (DCD).",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "RTS": {
    +                    "description": "Request to send. This bit is the complement of the UART request to send, nUARTRTS, modem status output. That is, when the bit is programmed to a 1 then nUARTRTS is LOW.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "DTR": {
    +                    "description": "Data transmit ready. This bit is the complement of the UART data transmit ready, nUARTDTR, modem status output. That is, when the bit is programmed to a 1 then nUARTDTR is LOW.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "RXE": {
    +                    "description": "Receive enable. If this bit is set to 1, the receive section of the UART is enabled. Data reception occurs for either UART signals or SIR signals depending on the setting of the SIREN bit. When the UART is disabled in the middle of reception, it completes the current character before stopping.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TXE": {
    +                    "description": "Transmit enable. If this bit is set to 1, the transmit section of the UART is enabled. Data transmission occurs for either UART signals, or SIR signals depending on the setting of the SIREN bit. When the UART is disabled in the middle of transmission, it completes the current character before stopping.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LBE": {
    +                    "description": "Loopback enable. If this bit is set to 1 and the SIREN bit is set to 1 and the SIRTEST bit in the Test Control Register, UARTTCR is set to 1, then the nSIROUT path is inverted, and fed through to the SIRIN path. The SIRTEST bit in the test register must be set to 1 to override the normal half-duplex SIR operation. This must be the requirement for accessing the test registers during normal operation, and SIRTEST must be cleared to 0 when loopback testing is finished. This feature reduces the amount of external coupling required during system test. If this bit is set to 1, and the SIRTEST bit is set to 0, the UARTTXD path is fed through to the UARTRXD path. In either SIR mode or UART mode, when this bit is set, the modem outputs are also fed through to the modem inputs. This bit is cleared to 0 on reset, to disable loopback.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SIRLP": {
    +                    "description": "SIR low-power IrDA mode. This bit selects the IrDA encoding mode. If this bit is cleared to 0, low-level bits are transmitted as an active high pulse with a width of 3 / 16th of the bit period. If this bit is set to 1, low-level bits are transmitted with a pulse width that is 3 times the period of the IrLPBaud16 input signal, regardless of the selected bit rate. Setting this bit uses less power, but might reduce transmission distances.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SIREN": {
    +                    "description": "SIR enable: 0 = IrDA SIR ENDEC is disabled. nSIROUT remains LOW (no light pulse generated), and signal transitions on SIRIN have no effect. 1 = IrDA SIR ENDEC is enabled. Data is transmitted and received on nSIROUT and SIRIN. UARTTXD remains HIGH, in the marking state. Signal transitions on UARTRXD or modem status inputs have no effect. This bit has no effect if the UARTEN bit disables the UART.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UARTEN": {
    +                    "description": "UART enable: 0 = UART is disabled. If the UART is disabled in the middle of transmission or reception, it completes the current character before stopping. 1 = the UART is enabled. Data transmission and reception occurs for either UART signals or SIR signals depending on the setting of the SIREN bit.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "UARTIFLS": {
    +              "description": "Interrupt FIFO Level Select Register, UARTIFLS",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 18,
    +              "children": {
    +                "fields": {
    +                  "RXIFLSEL": {
    +                    "description": "Receive interrupt FIFO level select. The trigger points for the receive interrupt are as follows: b000 = Receive FIFO becomes >= 1 / 8 full b001 = Receive FIFO becomes >= 1 / 4 full b010 = Receive FIFO becomes >= 1 / 2 full b011 = Receive FIFO becomes >= 3 / 4 full b100 = Receive FIFO becomes >= 7 / 8 full b101-b111 = reserved.",
    +                    "offset": 3,
    +                    "size": 3
    +                  },
    +                  "TXIFLSEL": {
    +                    "description": "Transmit interrupt FIFO level select. The trigger points for the transmit interrupt are as follows: b000 = Transmit FIFO becomes <= 1 / 8 full b001 = Transmit FIFO becomes <= 1 / 4 full b010 = Transmit FIFO becomes <= 1 / 2 full b011 = Transmit FIFO becomes <= 3 / 4 full b100 = Transmit FIFO becomes <= 7 / 8 full b101-b111 = reserved.",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "UARTIMSC": {
    +              "description": "Interrupt Mask Set/Clear Register, UARTIMSC",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "OEIM": {
    +                    "description": "Overrun error interrupt mask. A read returns the current mask for the UARTOEINTR interrupt. On a write of 1, the mask of the UARTOEINTR interrupt is set. A write of 0 clears the mask.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "BEIM": {
    +                    "description": "Break error interrupt mask. A read returns the current mask for the UARTBEINTR interrupt. On a write of 1, the mask of the UARTBEINTR interrupt is set. A write of 0 clears the mask.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PEIM": {
    +                    "description": "Parity error interrupt mask. A read returns the current mask for the UARTPEINTR interrupt. On a write of 1, the mask of the UARTPEINTR interrupt is set. A write of 0 clears the mask.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FEIM": {
    +                    "description": "Framing error interrupt mask. A read returns the current mask for the UARTFEINTR interrupt. On a write of 1, the mask of the UARTFEINTR interrupt is set. A write of 0 clears the mask.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RTIM": {
    +                    "description": "Receive timeout interrupt mask. A read returns the current mask for the UARTRTINTR interrupt. On a write of 1, the mask of the UARTRTINTR interrupt is set. A write of 0 clears the mask.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXIM": {
    +                    "description": "Transmit interrupt mask. A read returns the current mask for the UARTTXINTR interrupt. On a write of 1, the mask of the UARTTXINTR interrupt is set. A write of 0 clears the mask.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RXIM": {
    +                    "description": "Receive interrupt mask. A read returns the current mask for the UARTRXINTR interrupt. On a write of 1, the mask of the UARTRXINTR interrupt is set. A write of 0 clears the mask.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DSRMIM": {
    +                    "description": "nUARTDSR modem interrupt mask. A read returns the current mask for the UARTDSRINTR interrupt. On a write of 1, the mask of the UARTDSRINTR interrupt is set. A write of 0 clears the mask.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DCDMIM": {
    +                    "description": "nUARTDCD modem interrupt mask. A read returns the current mask for the UARTDCDINTR interrupt. On a write of 1, the mask of the UARTDCDINTR interrupt is set. A write of 0 clears the mask.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CTSMIM": {
    +                    "description": "nUARTCTS modem interrupt mask. A read returns the current mask for the UARTCTSINTR interrupt. On a write of 1, the mask of the UARTCTSINTR interrupt is set. A write of 0 clears the mask.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RIMIM": {
    +                    "description": "nUARTRI modem interrupt mask. A read returns the current mask for the UARTRIINTR interrupt. On a write of 1, the mask of the UARTRIINTR interrupt is set. A write of 0 clears the mask.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "UARTRIS": {
    +              "description": "Raw Interrupt Status Register, UARTRIS",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "OERIS": {
    +                    "description": "Overrun error interrupt status. Returns the raw interrupt state of the UARTOEINTR interrupt.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BERIS": {
    +                    "description": "Break error interrupt status. Returns the raw interrupt state of the UARTBEINTR interrupt.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PERIS": {
    +                    "description": "Parity error interrupt status. Returns the raw interrupt state of the UARTPEINTR interrupt.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FERIS": {
    +                    "description": "Framing error interrupt status. Returns the raw interrupt state of the UARTFEINTR interrupt.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTRIS": {
    +                    "description": "Receive timeout interrupt status. Returns the raw interrupt state of the UARTRTINTR interrupt. a",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXRIS": {
    +                    "description": "Transmit interrupt status. Returns the raw interrupt state of the UARTTXINTR interrupt.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXRIS": {
    +                    "description": "Receive interrupt status. Returns the raw interrupt state of the UARTRXINTR interrupt.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DSRRMIS": {
    +                    "description": "nUARTDSR modem interrupt status. Returns the raw interrupt state of the UARTDSRINTR interrupt.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DCDRMIS": {
    +                    "description": "nUARTDCD modem interrupt status. Returns the raw interrupt state of the UARTDCDINTR interrupt.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CTSRMIS": {
    +                    "description": "nUARTCTS modem interrupt status. Returns the raw interrupt state of the UARTCTSINTR interrupt.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RIRMIS": {
    +                    "description": "nUARTRI modem interrupt status. Returns the raw interrupt state of the UARTRIINTR interrupt.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "UARTMIS": {
    +              "description": "Masked Interrupt Status Register, UARTMIS",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "OEMIS": {
    +                    "description": "Overrun error masked interrupt status. Returns the masked interrupt state of the UARTOEINTR interrupt.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BEMIS": {
    +                    "description": "Break error masked interrupt status. Returns the masked interrupt state of the UARTBEINTR interrupt.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PEMIS": {
    +                    "description": "Parity error masked interrupt status. Returns the masked interrupt state of the UARTPEINTR interrupt.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FEMIS": {
    +                    "description": "Framing error masked interrupt status. Returns the masked interrupt state of the UARTFEINTR interrupt.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTMIS": {
    +                    "description": "Receive timeout masked interrupt status. Returns the masked interrupt state of the UARTRTINTR interrupt.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXMIS": {
    +                    "description": "Transmit masked interrupt status. Returns the masked interrupt state of the UARTTXINTR interrupt.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXMIS": {
    +                    "description": "Receive masked interrupt status. Returns the masked interrupt state of the UARTRXINTR interrupt.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DSRMMIS": {
    +                    "description": "nUARTDSR modem masked interrupt status. Returns the masked interrupt state of the UARTDSRINTR interrupt.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DCDMMIS": {
    +                    "description": "nUARTDCD modem masked interrupt status. Returns the masked interrupt state of the UARTDCDINTR interrupt.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CTSMMIS": {
    +                    "description": "nUARTCTS modem masked interrupt status. Returns the masked interrupt state of the UARTCTSINTR interrupt.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RIMMIS": {
    +                    "description": "nUARTRI modem masked interrupt status. Returns the masked interrupt state of the UARTRIINTR interrupt.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "UARTICR": {
    +              "description": "Interrupt Clear Register, UARTICR",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "OEIC": {
    +                    "description": "Overrun error interrupt clear. Clears the UARTOEINTR interrupt.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "BEIC": {
    +                    "description": "Break error interrupt clear. Clears the UARTBEINTR interrupt.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PEIC": {
    +                    "description": "Parity error interrupt clear. Clears the UARTPEINTR interrupt.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FEIC": {
    +                    "description": "Framing error interrupt clear. Clears the UARTFEINTR interrupt.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RTIC": {
    +                    "description": "Receive timeout interrupt clear. Clears the UARTRTINTR interrupt.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TXIC": {
    +                    "description": "Transmit interrupt clear. Clears the UARTTXINTR interrupt.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RXIC": {
    +                    "description": "Receive interrupt clear. Clears the UARTRXINTR interrupt.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DSRMIC": {
    +                    "description": "nUARTDSR modem interrupt clear. Clears the UARTDSRINTR interrupt.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DCDMIC": {
    +                    "description": "nUARTDCD modem interrupt clear. Clears the UARTDCDINTR interrupt.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CTSMIC": {
    +                    "description": "nUARTCTS modem interrupt clear. Clears the UARTCTSINTR interrupt.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RIMIC": {
    +                    "description": "nUARTRI modem interrupt clear. Clears the UARTRIINTR interrupt.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "UARTDMACR": {
    +              "description": "DMA Control Register, UARTDMACR",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "DMAONERR": {
    +                    "description": "DMA on error. If this bit is set to 1, the DMA receive request outputs, UARTRXDMASREQ or UARTRXDMABREQ, are disabled when the UART error interrupt is asserted.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TXDMAE": {
    +                    "description": "Transmit DMA enable. If this bit is set to 1, DMA for the transmit FIFO is enabled.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RXDMAE": {
    +                    "description": "Receive DMA enable. If this bit is set to 1, DMA for the receive FIFO is enabled.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "UARTPERIPHID0": {
    +              "description": "UARTPeriphID0 Register",
    +              "offset": 4064,
    +              "size": 32,
    +              "reset_value": 17,
    +              "children": {
    +                "fields": {
    +                  "PARTNUMBER0": {
    +                    "description": "These bits read back as 0x11",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "UARTPERIPHID1": {
    +              "description": "UARTPeriphID1 Register",
    +              "offset": 4068,
    +              "size": 32,
    +              "reset_value": 16,
    +              "children": {
    +                "fields": {
    +                  "DESIGNER0": {
    +                    "description": "These bits read back as 0x1",
    +                    "offset": 4,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "PARTNUMBER1": {
    +                    "description": "These bits read back as 0x0",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "UARTPERIPHID2": {
    +              "description": "UARTPeriphID2 Register",
    +              "offset": 4072,
    +              "size": 32,
    +              "reset_value": 52,
    +              "children": {
    +                "fields": {
    +                  "REVISION": {
    +                    "description": "This field depends on the revision of the UART: r1p0 0x0 r1p1 0x1 r1p3 0x2 r1p4 0x2 r1p5 0x3",
    +                    "offset": 4,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "DESIGNER1": {
    +                    "description": "These bits read back as 0x4",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "UARTPERIPHID3": {
    +              "description": "UARTPeriphID3 Register",
    +              "offset": 4076,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CONFIGURATION": {
    +                    "description": "These bits read back as 0x00",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "UARTPCELLID0": {
    +              "description": "UARTPCellID0 Register",
    +              "offset": 4080,
    +              "size": 32,
    +              "reset_value": 13,
    +              "children": {
    +                "fields": {
    +                  "UARTPCELLID0": {
    +                    "description": "These bits read back as 0x0D",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "UARTPCELLID1": {
    +              "description": "UARTPCellID1 Register",
    +              "offset": 4084,
    +              "size": 32,
    +              "reset_value": 240,
    +              "children": {
    +                "fields": {
    +                  "UARTPCELLID1": {
    +                    "description": "These bits read back as 0xF0",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "UARTPCELLID2": {
    +              "description": "UARTPCellID2 Register",
    +              "offset": 4088,
    +              "size": 32,
    +              "reset_value": 5,
    +              "children": {
    +                "fields": {
    +                  "UARTPCELLID2": {
    +                    "description": "These bits read back as 0x05",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "UARTPCELLID3": {
    +              "description": "UARTPCellID3 Register",
    +              "offset": 4092,
    +              "size": 32,
    +              "reset_value": 177,
    +              "children": {
    +                "fields": {
    +                  "UARTPCELLID3": {
    +                    "description": "These bits read back as 0xB1",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SIO": {
    +        "description": "Single-cycle IO block\\n\n        Provides core-local and inter-core hardware for the two processors, with single-cycle access.",
    +        "children": {
    +          "registers": {
    +            "CPUID": {
    +              "description": "Processor core identifier\\n\n            Value is 0 when read from processor core 0, and 1 when read from processor core 1.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "GPIO_IN": {
    +              "description": "Input value for GPIO pins",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_IN": {
    +                    "description": "Input value for GPIO0...29",
    +                    "offset": 0,
    +                    "size": 30,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_HI_IN": {
    +              "description": "Input value for QSPI pins",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_HI_IN": {
    +                    "description": "Input value on QSPI IO in order 0..5: SCLK, SSn, SD0, SD1, SD2, SD3",
    +                    "offset": 0,
    +                    "size": 6,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_OUT": {
    +              "description": "GPIO output value",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_OUT": {
    +                    "description": "Set output level (1/0 -> high/low) for GPIO0...29.\\n\n                Reading back gives the last value written, NOT the input value from the pins.\\n\n                If core 0 and core 1 both write to GPIO_OUT simultaneously (or to a SET/CLR/XOR alias),\\n\n                the result is as though the write from core 0 took place first,\\n\n                and the write from core 1 was then applied to that intermediate result.",
    +                    "offset": 0,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_OUT_SET": {
    +              "description": "GPIO output value set",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_OUT_SET": {
    +                    "description": "Perform an atomic bit-set on GPIO_OUT, i.e. `GPIO_OUT |= wdata`",
    +                    "offset": 0,
    +                    "size": 30,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_OUT_CLR": {
    +              "description": "GPIO output value clear",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_OUT_CLR": {
    +                    "description": "Perform an atomic bit-clear on GPIO_OUT, i.e. `GPIO_OUT &= ~wdata`",
    +                    "offset": 0,
    +                    "size": 30,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_OUT_XOR": {
    +              "description": "GPIO output value XOR",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_OUT_XOR": {
    +                    "description": "Perform an atomic bitwise XOR on GPIO_OUT, i.e. `GPIO_OUT ^= wdata`",
    +                    "offset": 0,
    +                    "size": 30,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_OE": {
    +              "description": "GPIO output enable",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_OE": {
    +                    "description": "Set output enable (1/0 -> output/input) for GPIO0...29.\\n\n                Reading back gives the last value written.\\n\n                If core 0 and core 1 both write to GPIO_OE simultaneously (or to a SET/CLR/XOR alias),\\n\n                the result is as though the write from core 0 took place first,\\n\n                and the write from core 1 was then applied to that intermediate result.",
    +                    "offset": 0,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_OE_SET": {
    +              "description": "GPIO output enable set",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_OE_SET": {
    +                    "description": "Perform an atomic bit-set on GPIO_OE, i.e. `GPIO_OE |= wdata`",
    +                    "offset": 0,
    +                    "size": 30,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_OE_CLR": {
    +              "description": "GPIO output enable clear",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_OE_CLR": {
    +                    "description": "Perform an atomic bit-clear on GPIO_OE, i.e. `GPIO_OE &= ~wdata`",
    +                    "offset": 0,
    +                    "size": 30,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_OE_XOR": {
    +              "description": "GPIO output enable XOR",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_OE_XOR": {
    +                    "description": "Perform an atomic bitwise XOR on GPIO_OE, i.e. `GPIO_OE ^= wdata`",
    +                    "offset": 0,
    +                    "size": 30,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_HI_OUT": {
    +              "description": "QSPI output value",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_HI_OUT": {
    +                    "description": "Set output level (1/0 -> high/low) for QSPI IO0...5.\\n\n                Reading back gives the last value written, NOT the input value from the pins.\\n\n                If core 0 and core 1 both write to GPIO_HI_OUT simultaneously (or to a SET/CLR/XOR alias),\\n\n                the result is as though the write from core 0 took place first,\\n\n                and the write from core 1 was then applied to that intermediate result.",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_HI_OUT_SET": {
    +              "description": "QSPI output value set",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_HI_OUT_SET": {
    +                    "description": "Perform an atomic bit-set on GPIO_HI_OUT, i.e. `GPIO_HI_OUT |= wdata`",
    +                    "offset": 0,
    +                    "size": 6,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_HI_OUT_CLR": {
    +              "description": "QSPI output value clear",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_HI_OUT_CLR": {
    +                    "description": "Perform an atomic bit-clear on GPIO_HI_OUT, i.e. `GPIO_HI_OUT &= ~wdata`",
    +                    "offset": 0,
    +                    "size": 6,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_HI_OUT_XOR": {
    +              "description": "QSPI output value XOR",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_HI_OUT_XOR": {
    +                    "description": "Perform an atomic bitwise XOR on GPIO_HI_OUT, i.e. `GPIO_HI_OUT ^= wdata`",
    +                    "offset": 0,
    +                    "size": 6,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_HI_OE": {
    +              "description": "QSPI output enable",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_HI_OE": {
    +                    "description": "Set output enable (1/0 -> output/input) for QSPI IO0...5.\\n\n                Reading back gives the last value written.\\n\n                If core 0 and core 1 both write to GPIO_HI_OE simultaneously (or to a SET/CLR/XOR alias),\\n\n                the result is as though the write from core 0 took place first,\\n\n                and the write from core 1 was then applied to that intermediate result.",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_HI_OE_SET": {
    +              "description": "QSPI output enable set",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_HI_OE_SET": {
    +                    "description": "Perform an atomic bit-set on GPIO_HI_OE, i.e. `GPIO_HI_OE |= wdata`",
    +                    "offset": 0,
    +                    "size": 6,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_HI_OE_CLR": {
    +              "description": "QSPI output enable clear",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_HI_OE_CLR": {
    +                    "description": "Perform an atomic bit-clear on GPIO_HI_OE, i.e. `GPIO_HI_OE &= ~wdata`",
    +                    "offset": 0,
    +                    "size": 6,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_HI_OE_XOR": {
    +              "description": "QSPI output enable XOR",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "GPIO_HI_OE_XOR": {
    +                    "description": "Perform an atomic bitwise XOR on GPIO_HI_OE, i.e. `GPIO_HI_OE ^= wdata`",
    +                    "offset": 0,
    +                    "size": 6,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "FIFO_ST": {
    +              "description": "Status register for inter-core FIFOs (mailboxes).\\n\n            There is one FIFO in the core 0 -> core 1 direction, and one core 1 -> core 0. Both are 32 bits wide and 8 words deep.\\n\n            Core 0 can see the read side of the 1->0 FIFO (RX), and the write side of 0->1 FIFO (TX).\\n\n            Core 1 can see the read side of the 0->1 FIFO (RX), and the write side of 1->0 FIFO (TX).\\n\n            The SIO IRQ for each core is the logical OR of the VLD, WOF and ROE fields of its FIFO_ST register.",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 2,
    +              "children": {
    +                "fields": {
    +                  "ROE": {
    +                    "description": "Sticky flag indicating the RX FIFO was read when empty. This read was ignored by the FIFO.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "WOF": {
    +                    "description": "Sticky flag indicating the TX FIFO was written when full. This write was ignored by the FIFO.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RDY": {
    +                    "description": "Value is 1 if this core's TX FIFO is not full (i.e. if FIFO_WR is ready for more data)",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "VLD": {
    +                    "description": "Value is 1 if this core's RX FIFO is not empty (i.e. if FIFO_RD is valid)",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "FIFO_WR": {
    +              "description": "Write access to this core's TX FIFO",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "write-only"
    +            },
    +            "FIFO_RD": {
    +              "description": "Read access to this core's RX FIFO",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "SPINLOCK_ST": {
    +              "description": "Spinlock state\\n\n            A bitmap containing the state of all 32 spinlocks (1=locked).\\n\n            Mainly intended for debugging.",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "DIV_UDIVIDEND": {
    +              "description": "Divider unsigned dividend\\n\n            Write to the DIVIDEND operand of the divider, i.e. the p in `p / q`.\\n\n            Any operand write starts a new calculation. The results appear in QUOTIENT, REMAINDER.\\n\n            UDIVIDEND/SDIVIDEND are aliases of the same internal register. The U alias starts an\\n\n            unsigned calculation, and the S alias starts a signed calculation.",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "DIV_UDIVISOR": {
    +              "description": "Divider unsigned divisor\\n\n            Write to the DIVISOR operand of the divider, i.e. the q in `p / q`.\\n\n            Any operand write starts a new calculation. The results appear in QUOTIENT, REMAINDER.\\n\n            UDIVISOR/SDIVISOR are aliases of the same internal register. The U alias starts an\\n\n            unsigned calculation, and the S alias starts a signed calculation.",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "DIV_SDIVIDEND": {
    +              "description": "Divider signed dividend\\n\n            The same as UDIVIDEND, but starts a signed calculation, rather than unsigned.",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "DIV_SDIVISOR": {
    +              "description": "Divider signed divisor\\n\n            The same as UDIVISOR, but starts a signed calculation, rather than unsigned.",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "DIV_QUOTIENT": {
    +              "description": "Divider result quotient\\n\n            The result of `DIVIDEND / DIVISOR` (division). Contents undefined while CSR_READY is low.\\n\n            For signed calculations, QUOTIENT is negative when the signs of DIVIDEND and DIVISOR differ.\\n\n            This register can be written to directly, for context save/restore purposes. This halts any\\n\n            in-progress calculation and sets the CSR_READY and CSR_DIRTY flags.\\n\n            Reading from QUOTIENT clears the CSR_DIRTY flag, so should read results in the order\\n\n            REMAINDER, QUOTIENT if CSR_DIRTY is used.",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "DIV_REMAINDER": {
    +              "description": "Divider result remainder\\n\n            The result of `DIVIDEND % DIVISOR` (modulo). Contents undefined while CSR_READY is low.\\n\n            For signed calculations, REMAINDER is negative only when DIVIDEND is negative.\\n\n            This register can be written to directly, for context save/restore purposes. This halts any\\n\n            in-progress calculation and sets the CSR_READY and CSR_DIRTY flags.",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "DIV_CSR": {
    +              "description": "Control and status register for divider.",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 1,
    +              "children": {
    +                "fields": {
    +                  "DIRTY": {
    +                    "description": "Changes to 1 when any register is written, and back to 0 when QUOTIENT is read.\\n\n                Software can use this flag to make save/restore more efficient (skip if not DIRTY).\\n\n                If the flag is used in this way, it's recommended to either read QUOTIENT only,\\n\n                or REMAINDER and then QUOTIENT, to prevent data loss on context switch.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "READY": {
    +                    "description": "Reads as 0 when a calculation is in progress, 1 otherwise.\\n\n                Writing an operand (xDIVIDEND, xDIVISOR) will immediately start a new calculation, no\\n\n                matter if one is already in progress.\\n\n                Writing to a result register will immediately terminate any in-progress calculation\\n\n                and set the READY and DIRTY flags.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INTERP0_ACCUM0": {
    +              "description": "Read/write access to accumulator 0",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "INTERP0_ACCUM1": {
    +              "description": "Read/write access to accumulator 1",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "INTERP0_BASE0": {
    +              "description": "Read/write access to BASE0 register.",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "INTERP0_BASE1": {
    +              "description": "Read/write access to BASE1 register.",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "INTERP0_BASE2": {
    +              "description": "Read/write access to BASE2 register.",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "INTERP0_POP_LANE0": {
    +              "description": "Read LANE0 result, and simultaneously write lane results to both accumulators (POP).",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "INTERP0_POP_LANE1": {
    +              "description": "Read LANE1 result, and simultaneously write lane results to both accumulators (POP).",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "INTERP0_POP_FULL": {
    +              "description": "Read FULL result, and simultaneously write lane results to both accumulators (POP).",
    +              "offset": 156,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "INTERP0_PEEK_LANE0": {
    +              "description": "Read LANE0 result, without altering any internal state (PEEK).",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "INTERP0_PEEK_LANE1": {
    +              "description": "Read LANE1 result, without altering any internal state (PEEK).",
    +              "offset": 164,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "INTERP0_PEEK_FULL": {
    +              "description": "Read FULL result, without altering any internal state (PEEK).",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "INTERP0_CTRL_LANE0": {
    +              "description": "Control register for lane 0",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "OVERF": {
    +                    "description": "Set if either OVERF0 or OVERF1 is set.",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OVERF1": {
    +                    "description": "Indicates if any masked-off MSBs in ACCUM1 are set.",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OVERF0": {
    +                    "description": "Indicates if any masked-off MSBs in ACCUM0 are set.",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BLEND": {
    +                    "description": "Only present on INTERP0 on each core. If BLEND mode is enabled:\\n\n                - LANE1 result is a linear interpolation between BASE0 and BASE1, controlled\\n\n                by the 8 LSBs of lane 1 shift and mask value (a fractional number between\\n\n                0 and 255/256ths)\\n\n                - LANE0 result does not have BASE0 added (yields only the 8 LSBs of lane 1 shift+mask value)\\n\n                - FULL result does not have lane 1 shift+mask value added (BASE2 + lane 0 shift+mask)\\n\n                LANE1 SIGNED flag controls whether the interpolation is signed or unsigned.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FORCE_MSB": {
    +                    "description": "ORed into bits 29:28 of the lane result presented to the processor on the bus.\\n\n                No effect on the internal 32-bit datapath. Handy for using a lane to generate sequence\\n\n                of pointers into flash or SRAM.",
    +                    "offset": 19,
    +                    "size": 2
    +                  },
    +                  "ADD_RAW": {
    +                    "description": "If 1, mask + shift is bypassed for LANE0 result. This does not affect FULL result.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "CROSS_RESULT": {
    +                    "description": "If 1, feed the opposite lane's result into this lane's accumulator on POP.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "CROSS_INPUT": {
    +                    "description": "If 1, feed the opposite lane's accumulator into this lane's shift + mask hardware.\\n\n                Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is before the shift+mask bypass)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SIGNED": {
    +                    "description": "If SIGNED is set, the shifted and masked accumulator value is sign-extended to 32 bits\\n\n                before adding to BASE0, and LANE0 PEEK/POP appear extended to 32 bits when read by processor.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MASK_MSB": {
    +                    "description": "The most-significant bit allowed to pass by the mask (inclusive)\\n\n                Setting MSB < LSB may cause chip to turn inside-out",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "MASK_LSB": {
    +                    "description": "The least-significant bit allowed to pass by the mask (inclusive)",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "SHIFT": {
    +                    "description": "Logical right-shift applied to accumulator before masking",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "INTERP0_CTRL_LANE1": {
    +              "description": "Control register for lane 1",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FORCE_MSB": {
    +                    "description": "ORed into bits 29:28 of the lane result presented to the processor on the bus.\\n\n                No effect on the internal 32-bit datapath. Handy for using a lane to generate sequence\\n\n                of pointers into flash or SRAM.",
    +                    "offset": 19,
    +                    "size": 2
    +                  },
    +                  "ADD_RAW": {
    +                    "description": "If 1, mask + shift is bypassed for LANE1 result. This does not affect FULL result.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "CROSS_RESULT": {
    +                    "description": "If 1, feed the opposite lane's result into this lane's accumulator on POP.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "CROSS_INPUT": {
    +                    "description": "If 1, feed the opposite lane's accumulator into this lane's shift + mask hardware.\\n\n                Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is before the shift+mask bypass)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SIGNED": {
    +                    "description": "If SIGNED is set, the shifted and masked accumulator value is sign-extended to 32 bits\\n\n                before adding to BASE1, and LANE1 PEEK/POP appear extended to 32 bits when read by processor.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MASK_MSB": {
    +                    "description": "The most-significant bit allowed to pass by the mask (inclusive)\\n\n                Setting MSB < LSB may cause chip to turn inside-out",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "MASK_LSB": {
    +                    "description": "The least-significant bit allowed to pass by the mask (inclusive)",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "SHIFT": {
    +                    "description": "Logical right-shift applied to accumulator before masking",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "INTERP0_ACCUM0_ADD": {
    +              "description": "Values written here are atomically added to ACCUM0\\n\n            Reading yields lane 0's raw shift and mask value (BASE0 not added).",
    +              "offset": 180,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INTERP0_ACCUM0_ADD": {
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "INTERP0_ACCUM1_ADD": {
    +              "description": "Values written here are atomically added to ACCUM1\\n\n            Reading yields lane 1's raw shift and mask value (BASE1 not added).",
    +              "offset": 184,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INTERP0_ACCUM1_ADD": {
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "INTERP0_BASE_1AND0": {
    +              "description": "On write, the lower 16 bits go to BASE0, upper bits to BASE1 simultaneously.\\n\n            Each half is sign-extended to 32 bits if that lane's SIGNED flag is set.",
    +              "offset": 188,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "write-only"
    +            },
    +            "INTERP1_ACCUM0": {
    +              "description": "Read/write access to accumulator 0",
    +              "offset": 192,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "INTERP1_ACCUM1": {
    +              "description": "Read/write access to accumulator 1",
    +              "offset": 196,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "INTERP1_BASE0": {
    +              "description": "Read/write access to BASE0 register.",
    +              "offset": 200,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "INTERP1_BASE1": {
    +              "description": "Read/write access to BASE1 register.",
    +              "offset": 204,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "INTERP1_BASE2": {
    +              "description": "Read/write access to BASE2 register.",
    +              "offset": 208,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "INTERP1_POP_LANE0": {
    +              "description": "Read LANE0 result, and simultaneously write lane results to both accumulators (POP).",
    +              "offset": 212,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "INTERP1_POP_LANE1": {
    +              "description": "Read LANE1 result, and simultaneously write lane results to both accumulators (POP).",
    +              "offset": 216,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "INTERP1_POP_FULL": {
    +              "description": "Read FULL result, and simultaneously write lane results to both accumulators (POP).",
    +              "offset": 220,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "INTERP1_PEEK_LANE0": {
    +              "description": "Read LANE0 result, without altering any internal state (PEEK).",
    +              "offset": 224,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "INTERP1_PEEK_LANE1": {
    +              "description": "Read LANE1 result, without altering any internal state (PEEK).",
    +              "offset": 228,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "INTERP1_PEEK_FULL": {
    +              "description": "Read FULL result, without altering any internal state (PEEK).",
    +              "offset": 232,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "INTERP1_CTRL_LANE0": {
    +              "description": "Control register for lane 0",
    +              "offset": 236,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "OVERF": {
    +                    "description": "Set if either OVERF0 or OVERF1 is set.",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OVERF1": {
    +                    "description": "Indicates if any masked-off MSBs in ACCUM1 are set.",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OVERF0": {
    +                    "description": "Indicates if any masked-off MSBs in ACCUM0 are set.",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CLAMP": {
    +                    "description": "Only present on INTERP1 on each core. If CLAMP mode is enabled:\\n\n                - LANE0 result is shifted and masked ACCUM0, clamped by a lower bound of\\n\n                BASE0 and an upper bound of BASE1.\\n\n                - Signedness of these comparisons is determined by LANE0_CTRL_SIGNED",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FORCE_MSB": {
    +                    "description": "ORed into bits 29:28 of the lane result presented to the processor on the bus.\\n\n                No effect on the internal 32-bit datapath. Handy for using a lane to generate sequence\\n\n                of pointers into flash or SRAM.",
    +                    "offset": 19,
    +                    "size": 2
    +                  },
    +                  "ADD_RAW": {
    +                    "description": "If 1, mask + shift is bypassed for LANE0 result. This does not affect FULL result.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "CROSS_RESULT": {
    +                    "description": "If 1, feed the opposite lane's result into this lane's accumulator on POP.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "CROSS_INPUT": {
    +                    "description": "If 1, feed the opposite lane's accumulator into this lane's shift + mask hardware.\\n\n                Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is before the shift+mask bypass)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SIGNED": {
    +                    "description": "If SIGNED is set, the shifted and masked accumulator value is sign-extended to 32 bits\\n\n                before adding to BASE0, and LANE0 PEEK/POP appear extended to 32 bits when read by processor.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MASK_MSB": {
    +                    "description": "The most-significant bit allowed to pass by the mask (inclusive)\\n\n                Setting MSB < LSB may cause chip to turn inside-out",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "MASK_LSB": {
    +                    "description": "The least-significant bit allowed to pass by the mask (inclusive)",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "SHIFT": {
    +                    "description": "Logical right-shift applied to accumulator before masking",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "INTERP1_CTRL_LANE1": {
    +              "description": "Control register for lane 1",
    +              "offset": 240,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FORCE_MSB": {
    +                    "description": "ORed into bits 29:28 of the lane result presented to the processor on the bus.\\n\n                No effect on the internal 32-bit datapath. Handy for using a lane to generate sequence\\n\n                of pointers into flash or SRAM.",
    +                    "offset": 19,
    +                    "size": 2
    +                  },
    +                  "ADD_RAW": {
    +                    "description": "If 1, mask + shift is bypassed for LANE1 result. This does not affect FULL result.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "CROSS_RESULT": {
    +                    "description": "If 1, feed the opposite lane's result into this lane's accumulator on POP.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "CROSS_INPUT": {
    +                    "description": "If 1, feed the opposite lane's accumulator into this lane's shift + mask hardware.\\n\n                Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is before the shift+mask bypass)",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "SIGNED": {
    +                    "description": "If SIGNED is set, the shifted and masked accumulator value is sign-extended to 32 bits\\n\n                before adding to BASE1, and LANE1 PEEK/POP appear extended to 32 bits when read by processor.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "MASK_MSB": {
    +                    "description": "The most-significant bit allowed to pass by the mask (inclusive)\\n\n                Setting MSB < LSB may cause chip to turn inside-out",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "MASK_LSB": {
    +                    "description": "The least-significant bit allowed to pass by the mask (inclusive)",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "SHIFT": {
    +                    "description": "Logical right-shift applied to accumulator before masking",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "INTERP1_ACCUM0_ADD": {
    +              "description": "Values written here are atomically added to ACCUM0\\n\n            Reading yields lane 0's raw shift and mask value (BASE0 not added).",
    +              "offset": 244,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INTERP1_ACCUM0_ADD": {
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "INTERP1_ACCUM1_ADD": {
    +              "description": "Values written here are atomically added to ACCUM1\\n\n            Reading yields lane 1's raw shift and mask value (BASE1 not added).",
    +              "offset": 248,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INTERP1_ACCUM1_ADD": {
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "INTERP1_BASE_1AND0": {
    +              "description": "On write, the lower 16 bits go to BASE0, upper bits to BASE1 simultaneously.\\n\n            Each half is sign-extended to 32 bits if that lane's SIGNED flag is set.",
    +              "offset": 252,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "write-only"
    +            },
    +            "SPINLOCK0": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK1": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK2": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK3": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK4": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK5": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK6": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK7": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK8": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK9": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 292,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK10": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK11": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 300,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK12": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK13": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 308,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK14": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 312,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK15": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 316,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK16": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 320,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK17": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 324,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK18": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK19": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK20": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK21": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 340,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK22": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 344,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK23": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 348,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK24": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 352,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK25": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 356,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK26": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 360,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK27": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 364,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK28": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 368,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK29": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 372,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK30": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 376,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SPINLOCK31": {
    +              "description": "Reading from a spinlock address will:\\n\n            - Return 0 if lock is already locked\\n\n            - Otherwise return nonzero, and simultaneously claim the lock\\n\\n\n            Writing (any value) releases the lock.\\n\n            If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.\\n\n            The value returned on success is 0x1 << lock number.",
    +              "offset": 380,
    +              "size": 32,
    +              "reset_value": 0
    +            }
    +          }
    +        }
    +      },
    +      "SPI0": {
    +        "children": {
    +          "registers": {
    +            "SSPCR0": {
    +              "description": "Control register 0, SSPCR0 on page 3-4",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SCR": {
    +                    "description": "Serial clock rate. The value SCR is used to generate the transmit and receive bit rate of the PrimeCell SSP. The bit rate is: F SSPCLK CPSDVSR x (1+SCR) where CPSDVSR is an even value from 2-254, programmed through the SSPCPSR register and SCR is a value from 0-255.",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "SPH": {
    +                    "description": "SSPCLKOUT phase, applicable to Motorola SPI frame format only. See Motorola SPI frame format on page 2-10.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SPO": {
    +                    "description": "SSPCLKOUT polarity, applicable to Motorola SPI frame format only. See Motorola SPI frame format on page 2-10.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FRF": {
    +                    "description": "Frame format: 00 Motorola SPI frame format. 01 TI synchronous serial frame format. 10 National Microwire frame format. 11 Reserved, undefined operation.",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DSS": {
    +                    "description": "Data Size Select: 0000 Reserved, undefined operation. 0001 Reserved, undefined operation. 0010 Reserved, undefined operation. 0011 4-bit data. 0100 5-bit data. 0101 6-bit data. 0110 7-bit data. 0111 8-bit data. 1000 9-bit data. 1001 10-bit data. 1010 11-bit data. 1011 12-bit data. 1100 13-bit data. 1101 14-bit data. 1110 15-bit data. 1111 16-bit data.",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "SSPCR1": {
    +              "description": "Control register 1, SSPCR1 on page 3-5",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SOD": {
    +                    "description": "Slave-mode output disable. This bit is relevant only in the slave mode, MS=1. In multiple-slave systems, it is possible for an PrimeCell SSP master to broadcast a message to all slaves in the system while ensuring that only one slave drives data onto its serial output line. In such systems the RXD lines from multiple slaves could be tied together. To operate in such systems, the SOD bit can be set if the PrimeCell SSP slave is not supposed to drive the SSPTXD line: 0 SSP can drive the SSPTXD output in slave mode. 1 SSP must not drive the SSPTXD output in slave mode.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MS": {
    +                    "description": "Master or slave mode select. This bit can be modified only when the PrimeCell SSP is disabled, SSE=0: 0 Device configured as master, default. 1 Device configured as slave.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SSE": {
    +                    "description": "Synchronous serial port enable: 0 SSP operation disabled. 1 SSP operation enabled.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "LBM": {
    +                    "description": "Loop back mode: 0 Normal serial port operation enabled. 1 Output of transmit serial shifter is connected to input of receive serial shifter internally.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SSPDR": {
    +              "description": "Data register, SSPDR on page 3-6",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Transmit/Receive FIFO: Read Receive FIFO. Write Transmit FIFO. You must right-justify data when the PrimeCell SSP is programmed for a data size that is less than 16 bits. Unused bits at the top are ignored by transmit logic. The receive logic automatically right-justifies.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SSPSR": {
    +              "description": "Status register, SSPSR on page 3-7",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 3,
    +              "children": {
    +                "fields": {
    +                  "BSY": {
    +                    "description": "PrimeCell SSP busy flag, RO: 0 SSP is idle. 1 SSP is currently transmitting and/or receiving a frame or the transmit FIFO is not empty.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RFF": {
    +                    "description": "Receive FIFO full, RO: 0 Receive FIFO is not full. 1 Receive FIFO is full.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RNE": {
    +                    "description": "Receive FIFO not empty, RO: 0 Receive FIFO is empty. 1 Receive FIFO is not empty.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TNF": {
    +                    "description": "Transmit FIFO not full, RO: 0 Transmit FIFO is full. 1 Transmit FIFO is not full.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TFE": {
    +                    "description": "Transmit FIFO empty, RO: 0 Transmit FIFO is not empty. 1 Transmit FIFO is empty.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SSPCPSR": {
    +              "description": "Clock prescale register, SSPCPSR on page 3-8",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CPSDVSR": {
    +                    "description": "Clock prescale divisor. Must be an even number from 2-254, depending on the frequency of SSPCLK. The least significant bit always returns zero on reads.",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SSPIMSC": {
    +              "description": "Interrupt mask set or clear register, SSPIMSC on page 3-9",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "TXIM": {
    +                    "description": "Transmit FIFO interrupt mask: 0 Transmit FIFO half empty or less condition interrupt is masked. 1 Transmit FIFO half empty or less condition interrupt is not masked.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RXIM": {
    +                    "description": "Receive FIFO interrupt mask: 0 Receive FIFO half full or less condition interrupt is masked. 1 Receive FIFO half full or less condition interrupt is not masked.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTIM": {
    +                    "description": "Receive timeout interrupt mask: 0 Receive FIFO not empty and no read prior to timeout period interrupt is masked. 1 Receive FIFO not empty and no read prior to timeout period interrupt is not masked.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RORIM": {
    +                    "description": "Receive overrun interrupt mask: 0 Receive FIFO written to while full condition interrupt is masked. 1 Receive FIFO written to while full condition interrupt is not masked.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SSPRIS": {
    +              "description": "Raw interrupt status register, SSPRIS on page 3-10",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 8,
    +              "children": {
    +                "fields": {
    +                  "TXRIS": {
    +                    "description": "Gives the raw interrupt state, prior to masking, of the SSPTXINTR interrupt",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXRIS": {
    +                    "description": "Gives the raw interrupt state, prior to masking, of the SSPRXINTR interrupt",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTRIS": {
    +                    "description": "Gives the raw interrupt state, prior to masking, of the SSPRTINTR interrupt",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RORRIS": {
    +                    "description": "Gives the raw interrupt state, prior to masking, of the SSPRORINTR interrupt",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SSPMIS": {
    +              "description": "Masked interrupt status register, SSPMIS on page 3-11",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "TXMIS": {
    +                    "description": "Gives the transmit FIFO masked interrupt state, after masking, of the SSPTXINTR interrupt",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXMIS": {
    +                    "description": "Gives the receive FIFO masked interrupt state, after masking, of the SSPRXINTR interrupt",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTMIS": {
    +                    "description": "Gives the receive timeout masked interrupt state, after masking, of the SSPRTINTR interrupt",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RORMIS": {
    +                    "description": "Gives the receive over run masked interrupt status, after masking, of the SSPRORINTR interrupt",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SSPICR": {
    +              "description": "Interrupt clear register, SSPICR on page 3-11",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "RTIC": {
    +                    "description": "Clears the SSPRTINTR interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RORIC": {
    +                    "description": "Clears the SSPRORINTR interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SSPDMACR": {
    +              "description": "DMA control register, SSPDMACR on page 3-12",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "TXDMAE": {
    +                    "description": "Transmit DMA Enable. If this bit is set to 1, DMA for the transmit FIFO is enabled.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RXDMAE": {
    +                    "description": "Receive DMA Enable. If this bit is set to 1, DMA for the receive FIFO is enabled.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SSPPERIPHID0": {
    +              "description": "Peripheral identification registers, SSPPeriphID0-3 on page 3-13",
    +              "offset": 4064,
    +              "size": 32,
    +              "reset_value": 34,
    +              "children": {
    +                "fields": {
    +                  "PARTNUMBER0": {
    +                    "description": "These bits read back as 0x22",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SSPPERIPHID1": {
    +              "description": "Peripheral identification registers, SSPPeriphID0-3 on page 3-13",
    +              "offset": 4068,
    +              "size": 32,
    +              "reset_value": 16,
    +              "children": {
    +                "fields": {
    +                  "DESIGNER0": {
    +                    "description": "These bits read back as 0x1",
    +                    "offset": 4,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "PARTNUMBER1": {
    +                    "description": "These bits read back as 0x0",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SSPPERIPHID2": {
    +              "description": "Peripheral identification registers, SSPPeriphID0-3 on page 3-13",
    +              "offset": 4072,
    +              "size": 32,
    +              "reset_value": 52,
    +              "children": {
    +                "fields": {
    +                  "REVISION": {
    +                    "description": "These bits return the peripheral revision",
    +                    "offset": 4,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "DESIGNER1": {
    +                    "description": "These bits read back as 0x4",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SSPPERIPHID3": {
    +              "description": "Peripheral identification registers, SSPPeriphID0-3 on page 3-13",
    +              "offset": 4076,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CONFIGURATION": {
    +                    "description": "These bits read back as 0x00",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SSPPCELLID0": {
    +              "description": "PrimeCell identification registers, SSPPCellID0-3 on page 3-16",
    +              "offset": 4080,
    +              "size": 32,
    +              "reset_value": 13,
    +              "children": {
    +                "fields": {
    +                  "SSPPCELLID0": {
    +                    "description": "These bits read back as 0x0D",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SSPPCELLID1": {
    +              "description": "PrimeCell identification registers, SSPPCellID0-3 on page 3-16",
    +              "offset": 4084,
    +              "size": 32,
    +              "reset_value": 240,
    +              "children": {
    +                "fields": {
    +                  "SSPPCELLID1": {
    +                    "description": "These bits read back as 0xF0",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SSPPCELLID2": {
    +              "description": "PrimeCell identification registers, SSPPCellID0-3 on page 3-16",
    +              "offset": 4088,
    +              "size": 32,
    +              "reset_value": 5,
    +              "children": {
    +                "fields": {
    +                  "SSPPCELLID2": {
    +                    "description": "These bits read back as 0x05",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SSPPCELLID3": {
    +              "description": "PrimeCell identification registers, SSPPCellID0-3 on page 3-16",
    +              "offset": 4092,
    +              "size": 32,
    +              "reset_value": 177,
    +              "children": {
    +                "fields": {
    +                  "SSPPCELLID3": {
    +                    "description": "These bits read back as 0xB1",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "USBCTRL_REGS": {
    +        "description": "USB FS/LS controller device registers",
    +        "children": {
    +          "registers": {
    +            "ADDR_ENDP": {
    +              "description": "Device address and endpoint control",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENDPOINT": {
    +                    "description": "Device endpoint to send data to. Only valid for HOST mode.",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "ADDRESS": {
    +                    "description": "In device mode, the address that the device should respond to. Set in response to a SET_ADDR setup packet from the host. In host mode set to the address of the device to communicate with.",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "ADDR_ENDP1": {
    +              "description": "Interrupt endpoint 1. Only valid for HOST mode.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INTEP_PREAMBLE": {
    +                    "description": "Interrupt EP requires preamble (is a low speed device on a full speed hub)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "INTEP_DIR": {
    +                    "description": "Direction of the interrupt endpoint. In=0, Out=1",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT": {
    +                    "description": "Endpoint number of the interrupt endpoint",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "ADDRESS": {
    +                    "description": "Device address",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "ADDR_ENDP2": {
    +              "description": "Interrupt endpoint 2. Only valid for HOST mode.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INTEP_PREAMBLE": {
    +                    "description": "Interrupt EP requires preamble (is a low speed device on a full speed hub)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "INTEP_DIR": {
    +                    "description": "Direction of the interrupt endpoint. In=0, Out=1",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT": {
    +                    "description": "Endpoint number of the interrupt endpoint",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "ADDRESS": {
    +                    "description": "Device address",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "ADDR_ENDP3": {
    +              "description": "Interrupt endpoint 3. Only valid for HOST mode.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INTEP_PREAMBLE": {
    +                    "description": "Interrupt EP requires preamble (is a low speed device on a full speed hub)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "INTEP_DIR": {
    +                    "description": "Direction of the interrupt endpoint. In=0, Out=1",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT": {
    +                    "description": "Endpoint number of the interrupt endpoint",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "ADDRESS": {
    +                    "description": "Device address",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "ADDR_ENDP4": {
    +              "description": "Interrupt endpoint 4. Only valid for HOST mode.",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INTEP_PREAMBLE": {
    +                    "description": "Interrupt EP requires preamble (is a low speed device on a full speed hub)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "INTEP_DIR": {
    +                    "description": "Direction of the interrupt endpoint. In=0, Out=1",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT": {
    +                    "description": "Endpoint number of the interrupt endpoint",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "ADDRESS": {
    +                    "description": "Device address",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "ADDR_ENDP5": {
    +              "description": "Interrupt endpoint 5. Only valid for HOST mode.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INTEP_PREAMBLE": {
    +                    "description": "Interrupt EP requires preamble (is a low speed device on a full speed hub)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "INTEP_DIR": {
    +                    "description": "Direction of the interrupt endpoint. In=0, Out=1",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT": {
    +                    "description": "Endpoint number of the interrupt endpoint",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "ADDRESS": {
    +                    "description": "Device address",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "ADDR_ENDP6": {
    +              "description": "Interrupt endpoint 6. Only valid for HOST mode.",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INTEP_PREAMBLE": {
    +                    "description": "Interrupt EP requires preamble (is a low speed device on a full speed hub)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "INTEP_DIR": {
    +                    "description": "Direction of the interrupt endpoint. In=0, Out=1",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT": {
    +                    "description": "Endpoint number of the interrupt endpoint",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "ADDRESS": {
    +                    "description": "Device address",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "ADDR_ENDP7": {
    +              "description": "Interrupt endpoint 7. Only valid for HOST mode.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INTEP_PREAMBLE": {
    +                    "description": "Interrupt EP requires preamble (is a low speed device on a full speed hub)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "INTEP_DIR": {
    +                    "description": "Direction of the interrupt endpoint. In=0, Out=1",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT": {
    +                    "description": "Endpoint number of the interrupt endpoint",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "ADDRESS": {
    +                    "description": "Device address",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "ADDR_ENDP8": {
    +              "description": "Interrupt endpoint 8. Only valid for HOST mode.",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INTEP_PREAMBLE": {
    +                    "description": "Interrupt EP requires preamble (is a low speed device on a full speed hub)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "INTEP_DIR": {
    +                    "description": "Direction of the interrupt endpoint. In=0, Out=1",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT": {
    +                    "description": "Endpoint number of the interrupt endpoint",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "ADDRESS": {
    +                    "description": "Device address",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "ADDR_ENDP9": {
    +              "description": "Interrupt endpoint 9. Only valid for HOST mode.",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INTEP_PREAMBLE": {
    +                    "description": "Interrupt EP requires preamble (is a low speed device on a full speed hub)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "INTEP_DIR": {
    +                    "description": "Direction of the interrupt endpoint. In=0, Out=1",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT": {
    +                    "description": "Endpoint number of the interrupt endpoint",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "ADDRESS": {
    +                    "description": "Device address",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "ADDR_ENDP10": {
    +              "description": "Interrupt endpoint 10. Only valid for HOST mode.",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INTEP_PREAMBLE": {
    +                    "description": "Interrupt EP requires preamble (is a low speed device on a full speed hub)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "INTEP_DIR": {
    +                    "description": "Direction of the interrupt endpoint. In=0, Out=1",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT": {
    +                    "description": "Endpoint number of the interrupt endpoint",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "ADDRESS": {
    +                    "description": "Device address",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "ADDR_ENDP11": {
    +              "description": "Interrupt endpoint 11. Only valid for HOST mode.",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INTEP_PREAMBLE": {
    +                    "description": "Interrupt EP requires preamble (is a low speed device on a full speed hub)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "INTEP_DIR": {
    +                    "description": "Direction of the interrupt endpoint. In=0, Out=1",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT": {
    +                    "description": "Endpoint number of the interrupt endpoint",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "ADDRESS": {
    +                    "description": "Device address",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "ADDR_ENDP12": {
    +              "description": "Interrupt endpoint 12. Only valid for HOST mode.",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INTEP_PREAMBLE": {
    +                    "description": "Interrupt EP requires preamble (is a low speed device on a full speed hub)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "INTEP_DIR": {
    +                    "description": "Direction of the interrupt endpoint. In=0, Out=1",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT": {
    +                    "description": "Endpoint number of the interrupt endpoint",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "ADDRESS": {
    +                    "description": "Device address",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "ADDR_ENDP13": {
    +              "description": "Interrupt endpoint 13. Only valid for HOST mode.",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INTEP_PREAMBLE": {
    +                    "description": "Interrupt EP requires preamble (is a low speed device on a full speed hub)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "INTEP_DIR": {
    +                    "description": "Direction of the interrupt endpoint. In=0, Out=1",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT": {
    +                    "description": "Endpoint number of the interrupt endpoint",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "ADDRESS": {
    +                    "description": "Device address",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "ADDR_ENDP14": {
    +              "description": "Interrupt endpoint 14. Only valid for HOST mode.",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INTEP_PREAMBLE": {
    +                    "description": "Interrupt EP requires preamble (is a low speed device on a full speed hub)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "INTEP_DIR": {
    +                    "description": "Direction of the interrupt endpoint. In=0, Out=1",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT": {
    +                    "description": "Endpoint number of the interrupt endpoint",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "ADDRESS": {
    +                    "description": "Device address",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "ADDR_ENDP15": {
    +              "description": "Interrupt endpoint 15. Only valid for HOST mode.",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INTEP_PREAMBLE": {
    +                    "description": "Interrupt EP requires preamble (is a low speed device on a full speed hub)",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "INTEP_DIR": {
    +                    "description": "Direction of the interrupt endpoint. In=0, Out=1",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT": {
    +                    "description": "Endpoint number of the interrupt endpoint",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "ADDRESS": {
    +                    "description": "Device address",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "MAIN_CTRL": {
    +              "description": "Main control register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SIM_TIMING": {
    +                    "description": "Reduced timings for simulation",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "HOST_NDEVICE": {
    +                    "description": "Device mode = 0, Host mode = 1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CONTROLLER_EN": {
    +                    "description": "Enable controller",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SOF_WR": {
    +              "description": "Set the SOF (Start of Frame) frame number in the host controller. The SOF packet is sent every 1ms and the host will increment the frame number by 1 each time.",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "COUNT": {
    +                    "offset": 0,
    +                    "size": 11,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SOF_RD": {
    +              "description": "Read the last SOF (Start of Frame) frame number seen. In device mode the last SOF received from the host. In host mode the last SOF sent by the host.",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "COUNT": {
    +                    "offset": 0,
    +                    "size": 11,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SIE_CTRL": {
    +              "description": "SIE control register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "EP0_INT_STALL": {
    +                    "description": "Device: Set bit in EP_STATUS_STALL_NAK when EP0 sends a STALL",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EP0_DOUBLE_BUF": {
    +                    "description": "Device: EP0 single buffered = 0, double buffered = 1",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EP0_INT_1BUF": {
    +                    "description": "Device: Set bit in BUFF_STATUS for every buffer completed on EP0",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "EP0_INT_2BUF": {
    +                    "description": "Device: Set bit in BUFF_STATUS for every 2 buffers completed on EP0",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "EP0_INT_NAK": {
    +                    "description": "Device: Set bit in EP_STATUS_STALL_NAK when EP0 sends a NAK",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "DIRECT_EN": {
    +                    "description": "Direct bus drive enable",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "DIRECT_DP": {
    +                    "description": "Direct control of DP",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "DIRECT_DM": {
    +                    "description": "Direct control of DM",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "TRANSCEIVER_PD": {
    +                    "description": "Power down bus transceiver",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "RPU_OPT": {
    +                    "description": "Device: Pull-up strength (0=1K2, 1=2k3)",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "PULLUP_EN": {
    +                    "description": "Device: Enable pull up resistor",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "PULLDOWN_EN": {
    +                    "description": "Host: Enable pull down resistors",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "RESET_BUS": {
    +                    "description": "Host: Reset bus",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESUME": {
    +                    "description": "Device: Remote wakeup. Device can initiate its own resume after suspend.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "VBUS_EN": {
    +                    "description": "Host: Enable VBUS",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "KEEP_ALIVE_EN": {
    +                    "description": "Host: Enable keep alive packet (for low speed bus)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SOF_EN": {
    +                    "description": "Host: Enable SOF generation (for full speed bus)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SOF_SYNC": {
    +                    "description": "Host: Delay packet(s) until after SOF",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "PREAMBLE_EN": {
    +                    "description": "Host: Preable enable for LS device on FS hub",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "STOP_TRANS": {
    +                    "description": "Host: Stop transaction",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RECEIVE_DATA": {
    +                    "description": "Host: Receive transaction (IN to host)",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SEND_DATA": {
    +                    "description": "Host: Send transaction (OUT from host)",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SEND_SETUP": {
    +                    "description": "Host: Send Setup packet",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "START_TRANS": {
    +                    "description": "Host: Start transaction",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SIE_STATUS": {
    +              "description": "SIE status register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "DATA_SEQ_ERROR": {
    +                    "description": "Data Sequence Error.\\n\\n\n                The device can raise a sequence error in the following conditions:\\n\\n\n                * A SETUP packet is received followed by a DATA1 packet (data phase should always be DATA0) * An OUT packet is received from the host but doesn't match the data pid in the buffer control register read from DPSRAM\\n\\n\n                The host can raise a data sequence error in the following conditions:\\n\\n\n                * An IN packet from the device has the wrong data PID",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "ACK_REC": {
    +                    "description": "ACK received. Raised by both host and device.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "STALL_REC": {
    +                    "description": "Host: STALL received",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "NAK_REC": {
    +                    "description": "Host: NAK received",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "RX_TIMEOUT": {
    +                    "description": "RX timeout is raised by both the host and device if an ACK is not received in the maximum time specified by the USB spec.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "RX_OVERFLOW": {
    +                    "description": "RX overflow is raised by the Serial RX engine if the incoming data is too fast.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "BIT_STUFF_ERROR": {
    +                    "description": "Bit Stuff Error. Raised by the Serial RX engine.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "CRC_ERROR": {
    +                    "description": "CRC Error. Raised by the Serial RX engine.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "BUS_RESET": {
    +                    "description": "Device: bus reset received",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "TRANS_COMPLETE": {
    +                    "description": "Transaction complete.\\n\\n\n                Raised by device if:\\n\\n\n                * An IN or OUT packet is sent with the `LAST_BUFF` bit set in the buffer control register\\n\\n\n                Raised by host if:\\n\\n\n                * A setup packet is sent when no data in or data out transaction follows * An IN packet is received and the `LAST_BUFF` bit is set in the buffer control register * An IN packet is received with zero length * An OUT packet is sent and the `LAST_BUFF` bit is set",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "SETUP_REC": {
    +                    "description": "Device: Setup packet received",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "CONNECTED": {
    +                    "description": "Device: connected",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RESUME": {
    +                    "description": "Host: Device has initiated a remote resume. Device: host has initiated a resume.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "VBUS_OVER_CURR": {
    +                    "description": "VBUS over current detected",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SPEED": {
    +                    "description": "Host: device speed. Disconnected = 00, LS = 01, FS = 10",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "SUSPENDED": {
    +                    "description": "Bus in suspended state. Valid for device and host. Host and device will go into suspend if neither Keep Alive / SOF frames are enabled.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "LINE_STATE": {
    +                    "description": "USB bus line state",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "VBUS_DETECTED": {
    +                    "description": "Device: VBUS Detected",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_EP_CTRL": {
    +              "description": "interrupt endpoint control register",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INT_EP_ACTIVE": {
    +                    "description": "Host: Enable interrupt endpoint 1 -> 15",
    +                    "offset": 1,
    +                    "size": 15
    +                  }
    +                }
    +              }
    +            },
    +            "BUFF_STATUS": {
    +              "description": "Buffer status register. A bit set here indicates that a buffer has completed on the endpoint (if the buffer interrupt is enabled). It is possible for 2 buffers to be completed, so clearing the buffer status bit may instantly re set it on the next clock cycle.",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "EP15_OUT": {
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EP15_IN": {
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EP14_OUT": {
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "EP14_IN": {
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "EP13_OUT": {
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "EP13_IN": {
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "EP12_OUT": {
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "EP12_IN": {
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "EP11_OUT": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "EP11_IN": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "EP10_OUT": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EP10_IN": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EP9_OUT": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "EP9_IN": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "EP8_OUT": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EP8_IN": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EP7_OUT": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EP7_IN": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EP6_OUT": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EP6_IN": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "EP5_OUT": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "EP5_IN": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EP4_OUT": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EP4_IN": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EP3_OUT": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EP3_IN": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EP2_OUT": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "EP2_IN": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EP1_OUT": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EP1_IN": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EP0_OUT": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EP0_IN": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BUFF_CPU_SHOULD_HANDLE": {
    +              "description": "Which of the double buffers should be handled. Only valid if using an interrupt per buffer (i.e. not per 2 buffers). Not valid for host interrupt endpoint polling because they are only single buffered.",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "EP15_OUT": {
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP15_IN": {
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP14_OUT": {
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP14_IN": {
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP13_OUT": {
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP13_IN": {
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP12_OUT": {
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP12_IN": {
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP11_OUT": {
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP11_IN": {
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP10_OUT": {
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP10_IN": {
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP9_OUT": {
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP9_IN": {
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP8_OUT": {
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP8_IN": {
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP7_OUT": {
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP7_IN": {
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP6_OUT": {
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP6_IN": {
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP5_OUT": {
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP5_IN": {
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP4_OUT": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP4_IN": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP3_OUT": {
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP3_IN": {
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP2_OUT": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP2_IN": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP1_OUT": {
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP1_IN": {
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP0_OUT": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EP0_IN": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "EP_ABORT": {
    +              "description": "Device only: Can be set to ignore the buffer control register for this endpoint in case you would like to revoke a buffer. A NAK will be sent for every access to the endpoint until this bit is cleared. A corresponding bit in `EP_ABORT_DONE` is set when it is safe to modify the buffer control register.",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "EP15_OUT": {
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EP15_IN": {
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EP14_OUT": {
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "EP14_IN": {
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "EP13_OUT": {
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "EP13_IN": {
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "EP12_OUT": {
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "EP12_IN": {
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "EP11_OUT": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "EP11_IN": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "EP10_OUT": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EP10_IN": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EP9_OUT": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "EP9_IN": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "EP8_OUT": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EP8_IN": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EP7_OUT": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EP7_IN": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EP6_OUT": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EP6_IN": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "EP5_OUT": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "EP5_IN": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EP4_OUT": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EP4_IN": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EP3_OUT": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EP3_IN": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EP2_OUT": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "EP2_IN": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EP1_OUT": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EP1_IN": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EP0_OUT": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EP0_IN": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EP_ABORT_DONE": {
    +              "description": "Device only: Used in conjunction with `EP_ABORT`. Set once an endpoint is idle so the programmer knows it is safe to modify the buffer control register.",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "EP15_OUT": {
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EP15_IN": {
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EP14_OUT": {
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "EP14_IN": {
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "EP13_OUT": {
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "EP13_IN": {
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "EP12_OUT": {
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "EP12_IN": {
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "EP11_OUT": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "EP11_IN": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "EP10_OUT": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EP10_IN": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EP9_OUT": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "EP9_IN": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "EP8_OUT": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EP8_IN": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EP7_OUT": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EP7_IN": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EP6_OUT": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EP6_IN": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "EP5_OUT": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "EP5_IN": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EP4_OUT": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EP4_IN": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EP3_OUT": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EP3_IN": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EP2_OUT": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "EP2_IN": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EP1_OUT": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EP1_IN": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EP0_OUT": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EP0_IN": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EP_STALL_ARM": {
    +              "description": "Device: this bit must be set in conjunction with the `STALL` bit in the buffer control register to send a STALL on EP0. The device controller clears these bits when a SETUP packet is received because the USB spec requires that a STALL condition is cleared when a SETUP packet is received.",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "EP0_OUT": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EP0_IN": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "NAK_POLL": {
    +              "description": "Used by the host controller. Sets the wait time in microseconds before trying again if the device replies with a NAK.",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 1048592,
    +              "children": {
    +                "fields": {
    +                  "DELAY_FS": {
    +                    "description": "NAK polling interval for a full speed device",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "DELAY_LS": {
    +                    "description": "NAK polling interval for a low speed device",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP_STATUS_STALL_NAK": {
    +              "description": "Device: bits are set when the `IRQ_ON_NAK` or `IRQ_ON_STALL` bits are set. For EP0 this comes from `SIE_CTRL`. For all other endpoints it comes from the endpoint control register.",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "EP15_OUT": {
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "EP15_IN": {
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "EP14_OUT": {
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "EP14_IN": {
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "EP13_OUT": {
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "EP13_IN": {
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "EP12_OUT": {
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "EP12_IN": {
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "EP11_OUT": {
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "EP11_IN": {
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "EP10_OUT": {
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "EP10_IN": {
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "EP9_OUT": {
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "EP9_IN": {
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "EP8_OUT": {
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EP8_IN": {
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "EP7_OUT": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "EP7_IN": {
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "EP6_OUT": {
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EP6_IN": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "EP5_OUT": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "EP5_IN": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "EP4_OUT": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "EP4_IN": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "EP3_OUT": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "EP3_IN": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "EP2_OUT": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "EP2_IN": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "EP1_OUT": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "EP1_IN": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EP0_OUT": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EP0_IN": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "USB_MUXING": {
    +              "description": "Where to connect the USB controller. Should be to_phy by default.",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SOFTCON": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TO_DIGITAL_PAD": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TO_EXTPHY": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TO_PHY": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "USB_PWR": {
    +              "description": "Overrides for the power signals in the event that the VBUS signals are not hooked up to GPIO. Set the value of the override and then the override enable to switch over to the override value.",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "OVERCURR_DETECT_EN": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "OVERCURR_DETECT": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "VBUS_DETECT_OVERRIDE_EN": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "VBUS_DETECT": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "VBUS_EN_OVERRIDE_EN": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "VBUS_EN": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "USBPHY_DIRECT": {
    +              "description": "This register allows for direct control of the USB phy. Use in conjunction with usbphy_direct_override register to enable each override bit.",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "DM_OVV": {
    +                    "description": "DM over voltage",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DP_OVV": {
    +                    "description": "DP over voltage",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DM_OVCN": {
    +                    "description": "DM overcurrent",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DP_OVCN": {
    +                    "description": "DP overcurrent",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RX_DM": {
    +                    "description": "DPM pin state",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RX_DP": {
    +                    "description": "DPP pin state",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RX_DD": {
    +                    "description": "Differential RX",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TX_DIFFMODE": {
    +                    "description": "TX_DIFFMODE=0: Single ended mode\\n\n                TX_DIFFMODE=1: Differential drive mode (TX_DM, TX_DM_OE ignored)",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TX_FSSLEW": {
    +                    "description": "TX_FSSLEW=0: Low speed slew rate\\n\n                TX_FSSLEW=1: Full speed slew rate",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TX_PD": {
    +                    "description": "TX power down override (if override enable is set). 1 = powered down.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RX_PD": {
    +                    "description": "RX power down override (if override enable is set). 1 = powered down.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TX_DM": {
    +                    "description": "Output data. TX_DIFFMODE=1, Ignored\\n\n                TX_DIFFMODE=0, Drives DPM only. TX_DM_OE=1 to enable drive. DPM=TX_DM",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TX_DP": {
    +                    "description": "Output data. If TX_DIFFMODE=1, Drives DPP/DPM diff pair. TX_DP_OE=1 to enable drive. DPP=TX_DP, DPM=~TX_DP\\n\n                If TX_DIFFMODE=0, Drives DPP only. TX_DP_OE=1 to enable drive. DPP=TX_DP",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TX_DM_OE": {
    +                    "description": "Output enable. If TX_DIFFMODE=1, Ignored.\\n\n                If TX_DIFFMODE=0, OE for DPM only. 0 - DPM in Hi-Z state; 1 - DPM driving",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TX_DP_OE": {
    +                    "description": "Output enable. If TX_DIFFMODE=1, OE for DPP/DPM diff pair. 0 - DPP/DPM in Hi-Z state; 1 - DPP/DPM driving\\n\n                If TX_DIFFMODE=0, OE for DPP only. 0 - DPP in Hi-Z state; 1 - DPP driving",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DM_PULLDN_EN": {
    +                    "description": "DM pull down enable",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DM_PULLUP_EN": {
    +                    "description": "DM pull up enable",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "DM_PULLUP_HISEL": {
    +                    "description": "Enable the second DM pull up resistor. 0 - Pull = Rpu2; 1 - Pull = Rpu1 + Rpu2",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DP_PULLDN_EN": {
    +                    "description": "DP pull down enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DP_PULLUP_EN": {
    +                    "description": "DP pull up enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DP_PULLUP_HISEL": {
    +                    "description": "Enable the second DP pull up resistor. 0 - Pull = Rpu2; 1 - Pull = Rpu1 + Rpu2",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "USBPHY_DIRECT_OVERRIDE": {
    +              "description": "Override enable for each control in usbphy_direct",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "TX_DIFFMODE_OVERRIDE_EN": {
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "DM_PULLUP_OVERRIDE_EN": {
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TX_FSSLEW_OVERRIDE_EN": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TX_PD_OVERRIDE_EN": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "RX_PD_OVERRIDE_EN": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TX_DM_OVERRIDE_EN": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TX_DP_OVERRIDE_EN": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TX_DM_OE_OVERRIDE_EN": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TX_DP_OE_OVERRIDE_EN": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "DM_PULLDN_EN_OVERRIDE_EN": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DP_PULLDN_EN_OVERRIDE_EN": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DP_PULLUP_EN_OVERRIDE_EN": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DM_PULLUP_HISEL_OVERRIDE_EN": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DP_PULLUP_HISEL_OVERRIDE_EN": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "USBPHY_TRIM": {
    +              "description": "Used to adjust trim values of USB phy pull down resistors.",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 7967,
    +              "children": {
    +                "fields": {
    +                  "DM_PULLDN_TRIM": {
    +                    "description": "Value to drive to USB PHY\\n\n                DM pulldown resistor trim control\\n\n                Experimental data suggests that the reset value will work, but this register allows adjustment if required",
    +                    "offset": 8,
    +                    "size": 5
    +                  },
    +                  "DP_PULLDN_TRIM": {
    +                    "description": "Value to drive to USB PHY\\n\n                DP pulldown resistor trim control\\n\n                Experimental data suggests that the reset value will work, but this register allows adjustment if required",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "INTR": {
    +              "description": "Raw Interrupts",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "EP_STALL_NAK": {
    +                    "description": "Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by clearing all bits in EP_STATUS_STALL_NAK.",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ABORT_DONE": {
    +                    "description": "Raised when any bit in ABORT_DONE is set. Clear by clearing all bits in ABORT_DONE.",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DEV_SOF": {
    +                    "description": "Set every time the device receives a SOF (Start of Frame) packet. Cleared by reading SOF_RD",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SETUP_REQ": {
    +                    "description": "Device. Source: SIE_STATUS.SETUP_REC",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DEV_RESUME_FROM_HOST": {
    +                    "description": "Set when the device receives a resume from the host. Cleared by writing to SIE_STATUS.RESUME",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DEV_SUSPEND": {
    +                    "description": "Set when the device suspend state changes. Cleared by writing to SIE_STATUS.SUSPENDED",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DEV_CONN_DIS": {
    +                    "description": "Set when the device connection state changes. Cleared by writing to SIE_STATUS.CONNECTED",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BUS_RESET": {
    +                    "description": "Source: SIE_STATUS.BUS_RESET",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "VBUS_DETECT": {
    +                    "description": "Source: SIE_STATUS.VBUS_DETECTED",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "STALL": {
    +                    "description": "Source: SIE_STATUS.STALL_REC",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ERROR_CRC": {
    +                    "description": "Source: SIE_STATUS.CRC_ERROR",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ERROR_BIT_STUFF": {
    +                    "description": "Source: SIE_STATUS.BIT_STUFF_ERROR",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ERROR_RX_OVERFLOW": {
    +                    "description": "Source: SIE_STATUS.RX_OVERFLOW",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ERROR_RX_TIMEOUT": {
    +                    "description": "Source: SIE_STATUS.RX_TIMEOUT",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ERROR_DATA_SEQ": {
    +                    "description": "Source: SIE_STATUS.DATA_SEQ_ERROR",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BUFF_STATUS": {
    +                    "description": "Raised when any bit in BUFF_STATUS is set. Clear by clearing all bits in BUFF_STATUS.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TRANS_COMPLETE": {
    +                    "description": "Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by writing to this bit.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HOST_SOF": {
    +                    "description": "Host: raised every time the host sends a SOF (Start of Frame). Cleared by reading SOF_RD",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HOST_RESUME": {
    +                    "description": "Host: raised when a device wakes up the host. Cleared by writing to SIE_STATUS.RESUME",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HOST_CONN_DIS": {
    +                    "description": "Host: raised when a device is connected or disconnected (i.e. when SIE_STATUS.SPEED changes). Cleared by writing to SIE_STATUS.SPEED",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INTE": {
    +              "description": "Interrupt Enable",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "EP_STALL_NAK": {
    +                    "description": "Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by clearing all bits in EP_STATUS_STALL_NAK.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "ABORT_DONE": {
    +                    "description": "Raised when any bit in ABORT_DONE is set. Clear by clearing all bits in ABORT_DONE.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "DEV_SOF": {
    +                    "description": "Set every time the device receives a SOF (Start of Frame) packet. Cleared by reading SOF_RD",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "SETUP_REQ": {
    +                    "description": "Device. Source: SIE_STATUS.SETUP_REC",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "DEV_RESUME_FROM_HOST": {
    +                    "description": "Set when the device receives a resume from the host. Cleared by writing to SIE_STATUS.RESUME",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "DEV_SUSPEND": {
    +                    "description": "Set when the device suspend state changes. Cleared by writing to SIE_STATUS.SUSPENDED",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "DEV_CONN_DIS": {
    +                    "description": "Set when the device connection state changes. Cleared by writing to SIE_STATUS.CONNECTED",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BUS_RESET": {
    +                    "description": "Source: SIE_STATUS.BUS_RESET",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "VBUS_DETECT": {
    +                    "description": "Source: SIE_STATUS.VBUS_DETECTED",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Source: SIE_STATUS.STALL_REC",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ERROR_CRC": {
    +                    "description": "Source: SIE_STATUS.CRC_ERROR",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ERROR_BIT_STUFF": {
    +                    "description": "Source: SIE_STATUS.BIT_STUFF_ERROR",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ERROR_RX_OVERFLOW": {
    +                    "description": "Source: SIE_STATUS.RX_OVERFLOW",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ERROR_RX_TIMEOUT": {
    +                    "description": "Source: SIE_STATUS.RX_TIMEOUT",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ERROR_DATA_SEQ": {
    +                    "description": "Source: SIE_STATUS.DATA_SEQ_ERROR",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "BUFF_STATUS": {
    +                    "description": "Raised when any bit in BUFF_STATUS is set. Clear by clearing all bits in BUFF_STATUS.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TRANS_COMPLETE": {
    +                    "description": "Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by writing to this bit.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "HOST_SOF": {
    +                    "description": "Host: raised every time the host sends a SOF (Start of Frame). Cleared by reading SOF_RD",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "HOST_RESUME": {
    +                    "description": "Host: raised when a device wakes up the host. Cleared by writing to SIE_STATUS.RESUME",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HOST_CONN_DIS": {
    +                    "description": "Host: raised when a device is connected or disconnected (i.e. when SIE_STATUS.SPEED changes). Cleared by writing to SIE_STATUS.SPEED",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTF": {
    +              "description": "Interrupt Force",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "EP_STALL_NAK": {
    +                    "description": "Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by clearing all bits in EP_STATUS_STALL_NAK.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "ABORT_DONE": {
    +                    "description": "Raised when any bit in ABORT_DONE is set. Clear by clearing all bits in ABORT_DONE.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "DEV_SOF": {
    +                    "description": "Set every time the device receives a SOF (Start of Frame) packet. Cleared by reading SOF_RD",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "SETUP_REQ": {
    +                    "description": "Device. Source: SIE_STATUS.SETUP_REC",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "DEV_RESUME_FROM_HOST": {
    +                    "description": "Set when the device receives a resume from the host. Cleared by writing to SIE_STATUS.RESUME",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "DEV_SUSPEND": {
    +                    "description": "Set when the device suspend state changes. Cleared by writing to SIE_STATUS.SUSPENDED",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "DEV_CONN_DIS": {
    +                    "description": "Set when the device connection state changes. Cleared by writing to SIE_STATUS.CONNECTED",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "BUS_RESET": {
    +                    "description": "Source: SIE_STATUS.BUS_RESET",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "VBUS_DETECT": {
    +                    "description": "Source: SIE_STATUS.VBUS_DETECTED",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Source: SIE_STATUS.STALL_REC",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ERROR_CRC": {
    +                    "description": "Source: SIE_STATUS.CRC_ERROR",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ERROR_BIT_STUFF": {
    +                    "description": "Source: SIE_STATUS.BIT_STUFF_ERROR",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ERROR_RX_OVERFLOW": {
    +                    "description": "Source: SIE_STATUS.RX_OVERFLOW",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ERROR_RX_TIMEOUT": {
    +                    "description": "Source: SIE_STATUS.RX_TIMEOUT",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ERROR_DATA_SEQ": {
    +                    "description": "Source: SIE_STATUS.DATA_SEQ_ERROR",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "BUFF_STATUS": {
    +                    "description": "Raised when any bit in BUFF_STATUS is set. Clear by clearing all bits in BUFF_STATUS.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TRANS_COMPLETE": {
    +                    "description": "Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by writing to this bit.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "HOST_SOF": {
    +                    "description": "Host: raised every time the host sends a SOF (Start of Frame). Cleared by reading SOF_RD",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "HOST_RESUME": {
    +                    "description": "Host: raised when a device wakes up the host. Cleared by writing to SIE_STATUS.RESUME",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "HOST_CONN_DIS": {
    +                    "description": "Host: raised when a device is connected or disconnected (i.e. when SIE_STATUS.SPEED changes). Cleared by writing to SIE_STATUS.SPEED",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTS": {
    +              "description": "Interrupt status after masking & forcing",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "EP_STALL_NAK": {
    +                    "description": "Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by clearing all bits in EP_STATUS_STALL_NAK.",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ABORT_DONE": {
    +                    "description": "Raised when any bit in ABORT_DONE is set. Clear by clearing all bits in ABORT_DONE.",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DEV_SOF": {
    +                    "description": "Set every time the device receives a SOF (Start of Frame) packet. Cleared by reading SOF_RD",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SETUP_REQ": {
    +                    "description": "Device. Source: SIE_STATUS.SETUP_REC",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DEV_RESUME_FROM_HOST": {
    +                    "description": "Set when the device receives a resume from the host. Cleared by writing to SIE_STATUS.RESUME",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DEV_SUSPEND": {
    +                    "description": "Set when the device suspend state changes. Cleared by writing to SIE_STATUS.SUSPENDED",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DEV_CONN_DIS": {
    +                    "description": "Set when the device connection state changes. Cleared by writing to SIE_STATUS.CONNECTED",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BUS_RESET": {
    +                    "description": "Source: SIE_STATUS.BUS_RESET",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "VBUS_DETECT": {
    +                    "description": "Source: SIE_STATUS.VBUS_DETECTED",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "STALL": {
    +                    "description": "Source: SIE_STATUS.STALL_REC",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ERROR_CRC": {
    +                    "description": "Source: SIE_STATUS.CRC_ERROR",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ERROR_BIT_STUFF": {
    +                    "description": "Source: SIE_STATUS.BIT_STUFF_ERROR",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ERROR_RX_OVERFLOW": {
    +                    "description": "Source: SIE_STATUS.RX_OVERFLOW",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ERROR_RX_TIMEOUT": {
    +                    "description": "Source: SIE_STATUS.RX_TIMEOUT",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ERROR_DATA_SEQ": {
    +                    "description": "Source: SIE_STATUS.DATA_SEQ_ERROR",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BUFF_STATUS": {
    +                    "description": "Raised when any bit in BUFF_STATUS is set. Clear by clearing all bits in BUFF_STATUS.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TRANS_COMPLETE": {
    +                    "description": "Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by writing to this bit.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HOST_SOF": {
    +                    "description": "Host: raised every time the host sends a SOF (Start of Frame). Cleared by reading SOF_RD",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HOST_RESUME": {
    +                    "description": "Host: raised when a device wakes up the host. Cleared by writing to SIE_STATUS.RESUME",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HOST_CONN_DIS": {
    +                    "description": "Host: raised when a device is connected or disconnected (i.e. when SIE_STATUS.SPEED changes). Cleared by writing to SIE_STATUS.SPEED",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "I2C0": {
    +        "description": "DW_apb_i2c address block\\n\\n\n        List of configuration constants for the Synopsys I2C hardware (you may see references to these in I2C register header; these are *fixed* values, set at hardware design time):\\n\\n\n        IC_ULTRA_FAST_MODE ................ 0x0\\n\n        IC_UFM_TBUF_CNT_DEFAULT ........... 0x8\\n\n        IC_UFM_SCL_LOW_COUNT .............. 0x0008\\n\n        IC_UFM_SCL_HIGH_COUNT ............. 0x0006\\n\n        IC_TX_TL .......................... 0x0\\n\n        IC_TX_CMD_BLOCK ................... 0x1\\n\n        IC_HAS_DMA ........................ 0x1\\n\n        IC_HAS_ASYNC_FIFO ................. 0x0\\n\n        IC_SMBUS_ARP ...................... 0x0\\n\n        IC_FIRST_DATA_BYTE_STATUS ......... 0x1\\n\n        IC_INTR_IO ........................ 0x1\\n\n        IC_MASTER_MODE .................... 0x1\\n\n        IC_DEFAULT_ACK_GENERAL_CALL ....... 0x1\\n\n        IC_INTR_POL ....................... 0x1\\n\n        IC_OPTIONAL_SAR ................... 0x0\\n\n        IC_DEFAULT_TAR_SLAVE_ADDR ......... 0x055\\n\n        IC_DEFAULT_SLAVE_ADDR ............. 0x055\\n\n        IC_DEFAULT_HS_SPKLEN .............. 0x1\\n\n        IC_FS_SCL_HIGH_COUNT .............. 0x0006\\n\n        IC_HS_SCL_LOW_COUNT ............... 0x0008\\n\n        IC_DEVICE_ID_VALUE ................ 0x0\\n\n        IC_10BITADDR_MASTER ............... 0x0\\n\n        IC_CLK_FREQ_OPTIMIZATION .......... 0x0\\n\n        IC_DEFAULT_FS_SPKLEN .............. 0x7\\n\n        IC_ADD_ENCODED_PARAMS ............. 0x0\\n\n        IC_DEFAULT_SDA_HOLD ............... 0x000001\\n\n        IC_DEFAULT_SDA_SETUP .............. 0x64\\n\n        IC_AVOID_RX_FIFO_FLUSH_ON_TX_ABRT . 0x0\\n\n        IC_CLOCK_PERIOD ................... 100\\n\n        IC_EMPTYFIFO_HOLD_MASTER_EN ....... 1\\n\n        IC_RESTART_EN ..................... 0x1\\n\n        IC_TX_CMD_BLOCK_DEFAULT ........... 0x0\\n\n        IC_BUS_CLEAR_FEATURE .............. 0x0\\n\n        IC_CAP_LOADING .................... 100\\n\n        IC_FS_SCL_LOW_COUNT ............... 0x000d\\n\n        APB_DATA_WIDTH .................... 32\\n\n        IC_SDA_STUCK_TIMEOUT_DEFAULT ...... 0xffffffff\\n\n        IC_SLV_DATA_NACK_ONLY ............. 0x1\\n\n        IC_10BITADDR_SLAVE ................ 0x0\\n\n        IC_CLK_TYPE ....................... 0x0\\n\n        IC_SMBUS_UDID_MSB ................. 0x0\\n\n        IC_SMBUS_SUSPEND_ALERT ............ 0x0\\n\n        IC_HS_SCL_HIGH_COUNT .............. 0x0006\\n\n        IC_SLV_RESTART_DET_EN ............. 0x1\\n\n        IC_SMBUS .......................... 0x0\\n\n        IC_OPTIONAL_SAR_DEFAULT ........... 0x0\\n\n        IC_PERSISTANT_SLV_ADDR_DEFAULT .... 0x0\\n\n        IC_USE_COUNTS ..................... 0x0\\n\n        IC_RX_BUFFER_DEPTH ................ 16\\n\n        IC_SCL_STUCK_TIMEOUT_DEFAULT ...... 0xffffffff\\n\n        IC_RX_FULL_HLD_BUS_EN ............. 0x1\\n\n        IC_SLAVE_DISABLE .................. 0x1\\n\n        IC_RX_TL .......................... 0x0\\n\n        IC_DEVICE_ID ...................... 0x0\\n\n        IC_HC_COUNT_VALUES ................ 0x0\\n\n        I2C_DYNAMIC_TAR_UPDATE ............ 0\\n\n        IC_SMBUS_CLK_LOW_MEXT_DEFAULT ..... 0xffffffff\\n\n        IC_SMBUS_CLK_LOW_SEXT_DEFAULT ..... 0xffffffff\\n\n        IC_HS_MASTER_CODE ................. 0x1\\n\n        IC_SMBUS_RST_IDLE_CNT_DEFAULT ..... 0xffff\\n\n        IC_SMBUS_UDID_LSB_DEFAULT ......... 0xffffffff\\n\n        IC_SS_SCL_HIGH_COUNT .............. 0x0028\\n\n        IC_SS_SCL_LOW_COUNT ............... 0x002f\\n\n        IC_MAX_SPEED_MODE ................. 0x2\\n\n        IC_STAT_FOR_CLK_STRETCH ........... 0x0\\n\n        IC_STOP_DET_IF_MASTER_ACTIVE ...... 0x0\\n\n        IC_DEFAULT_UFM_SPKLEN ............. 0x1\\n\n        IC_TX_BUFFER_DEPTH ................ 16",
    +        "children": {
    +          "registers": {
    +            "IC_CON": {
    +              "description": "I2C Control Register. This register can be written only when the DW_apb_i2c is disabled, which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect.\\n\\n\n            Read/Write Access: - bit 10 is read only. - bit 11 is read only - bit 16 is read only - bit 17 is read only - bits 18 and 19 are read only.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 101,
    +              "children": {
    +                "fields": {
    +                  "STOP_DET_IF_MASTER_ACTIVE": {
    +                    "description": "Master issues the STOP_DET interrupt irrespective of whether master is active or not",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RX_FIFO_FULL_HLD_CTRL": {
    +                    "description": "This bit controls whether DW_apb_i2c should hold the bus when the Rx FIFO is physically full to its RX_BUFFER_DEPTH, as described in the IC_RX_FULL_HLD_BUS_EN parameter.\\n\\n\n                Reset value: 0x0.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED": {
    +                            "description": "Overflow when RX_FIFO is full",
    +                            "value": 0
    +                          },
    +                          "ENABLED": {
    +                            "description": "Hold bus when RX_FIFO is full",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TX_EMPTY_CTRL": {
    +                    "description": "This bit controls the generation of the TX_EMPTY interrupt, as described in the IC_RAW_INTR_STAT register.\\n\\n\n                Reset value: 0x0.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED": {
    +                            "description": "Default behaviour of TX_EMPTY interrupt",
    +                            "value": 0
    +                          },
    +                          "ENABLED": {
    +                            "description": "Controlled generation of TX_EMPTY interrupt",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STOP_DET_IFADDRESSED": {
    +                    "description": "In slave mode: - 1'b1:  issues the STOP_DET interrupt only when it is addressed. - 1'b0:  issues the STOP_DET irrespective of whether it's addressed or not. Reset value: 0x0\\n\\n\n                NOTE: During a general call address, this slave does not issue the STOP_DET interrupt if STOP_DET_IF_ADDRESSED = 1'b1, even if the slave responds to the general call address by generating ACK. The STOP_DET interrupt is generated only when the transmitted address matches the slave address (SAR).",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED": {
    +                            "description": "slave issues STOP_DET intr always",
    +                            "value": 0
    +                          },
    +                          "ENABLED": {
    +                            "description": "slave issues STOP_DET intr only if addressed",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IC_SLAVE_DISABLE": {
    +                    "description": "This bit controls whether I2C has its slave disabled, which means once the presetn signal is applied, then this bit is set and the slave is disabled.\\n\\n\n                If this bit is set (slave is disabled), DW_apb_i2c functions only as a master and does not perform any action that requires a slave.\\n\\n\n                NOTE: Software should ensure that if this bit is written with 0, then bit 0 should also be written with a 0.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SLAVE_ENABLED": {
    +                            "description": "Slave mode is enabled",
    +                            "value": 0
    +                          },
    +                          "SLAVE_DISABLED": {
    +                            "description": "Slave mode is disabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IC_RESTART_EN": {
    +                    "description": "Determines whether RESTART conditions may be sent when acting as a master. Some older slaves do not support handling RESTART conditions; however, RESTART conditions are used in several DW_apb_i2c operations. When RESTART is disabled, the master is prohibited from performing the following functions: - Sending a START BYTE - Performing any high-speed mode operation - High-speed mode operation - Performing direction changes in combined format mode - Performing a read operation with a 10-bit address By replacing RESTART condition followed by a STOP and a subsequent START condition, split operations are broken down into multiple DW_apb_i2c transfers. If the above operations are performed, it will result in setting bit 6 (TX_ABRT) of the IC_RAW_INTR_STAT register.\\n\\n\n                Reset value: ENABLED",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED": {
    +                            "description": "Master restart disabled",
    +                            "value": 0
    +                          },
    +                          "ENABLED": {
    +                            "description": "Master restart enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IC_10BITADDR_MASTER": {
    +                    "description": "Controls whether the DW_apb_i2c starts its transfers in 7- or 10-bit addressing mode when acting as a master. - 0: 7-bit addressing - 1: 10-bit addressing",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ADDR_7BITS": {
    +                            "description": "Master 7Bit addressing mode",
    +                            "value": 0
    +                          },
    +                          "ADDR_10BITS": {
    +                            "description": "Master 10Bit addressing mode",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IC_10BITADDR_SLAVE": {
    +                    "description": "When acting as a slave, this bit controls whether the DW_apb_i2c responds to 7- or 10-bit addresses. - 0: 7-bit addressing. The DW_apb_i2c ignores transactions that involve 10-bit addressing; for 7-bit addressing, only the lower 7 bits of the IC_SAR register are compared. - 1: 10-bit addressing. The DW_apb_i2c responds to only 10-bit addressing transfers that match the full 10 bits of the IC_SAR register.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ADDR_7BITS": {
    +                            "description": "Slave 7Bit addressing",
    +                            "value": 0
    +                          },
    +                          "ADDR_10BITS": {
    +                            "description": "Slave 10Bit addressing",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SPEED": {
    +                    "description": "These bits control at which speed the DW_apb_i2c operates; its setting is relevant only if one is operating the DW_apb_i2c in master mode. Hardware protects against illegal values being programmed by software. These bits must be programmed appropriately for slave mode also, as it is used to capture correct value of spike filter as per the speed mode.\\n\\n\n                This register should be programmed only with a value in the range of 1 to IC_MAX_SPEED_MODE; otherwise, hardware updates this register with the value of IC_MAX_SPEED_MODE.\\n\\n\n                1: standard mode (100 kbit/s)\\n\\n\n                2: fast mode (<=400 kbit/s) or fast mode plus (<=1000Kbit/s)\\n\\n\n                3: high speed mode (3.4 Mbit/s)\\n\\n\n                Note: This field is not applicable when IC_ULTRA_FAST_MODE=1",
    +                    "offset": 1,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "STANDARD": {
    +                            "description": "Standard Speed mode of operation",
    +                            "value": 1
    +                          },
    +                          "FAST": {
    +                            "description": "Fast or Fast Plus mode of operation",
    +                            "value": 2
    +                          },
    +                          "HIGH": {
    +                            "description": "High Speed mode of operation",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MASTER_MODE": {
    +                    "description": "This bit controls whether the DW_apb_i2c master is enabled.\\n\\n\n                NOTE: Software should ensure that if this bit is written with '1' then bit 6 should also be written with a '1'.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED": {
    +                            "description": "Master mode is disabled",
    +                            "value": 0
    +                          },
    +                          "ENABLED": {
    +                            "description": "Master mode is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "IC_TAR": {
    +              "description": "I2C Target Address Register\\n\\n\n            This register is 12 bits wide, and bits 31:12 are reserved. This register can be written to only when IC_ENABLE[0] is set to 0.\\n\\n\n            Note: If the software or application is aware that the DW_apb_i2c is not using the TAR address for the pending commands in the Tx FIFO, then it is possible to update the TAR address even while the Tx FIFO has entries (IC_STATUS[2]= 0). - It is not necessary to perform any write to this register if DW_apb_i2c is enabled as an I2C slave only.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 85,
    +              "children": {
    +                "fields": {
    +                  "SPECIAL": {
    +                    "description": "This bit indicates whether software performs a Device-ID or General Call or START BYTE command. - 0: ignore bit 10 GC_OR_START and use IC_TAR normally - 1: perform special I2C command as specified in Device_ID or GC_OR_START bit Reset value: 0x0",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED": {
    +                            "description": "Disables programming of GENERAL_CALL or START_BYTE transmission",
    +                            "value": 0
    +                          },
    +                          "ENABLED": {
    +                            "description": "Enables programming of GENERAL_CALL or START_BYTE transmission",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "GC_OR_START": {
    +                    "description": "If bit 11 (SPECIAL) is set to 1 and bit 13(Device-ID) is set to 0, then this bit indicates whether a General Call or START byte command is to be performed by the DW_apb_i2c. - 0: General Call Address - after issuing a General Call, only writes may be performed. Attempting to issue a read command results in setting bit 6 (TX_ABRT) of the IC_RAW_INTR_STAT register. The DW_apb_i2c remains in General Call mode until the SPECIAL bit value (bit 11) is cleared. - 1: START BYTE Reset value: 0x0",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "GENERAL_CALL": {
    +                            "description": "GENERAL_CALL byte transmission",
    +                            "value": 0
    +                          },
    +                          "START_BYTE": {
    +                            "description": "START byte transmission",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IC_TAR": {
    +                    "description": "This is the target address for any master transaction. When transmitting a General Call, these bits are ignored. To generate a START BYTE, the CPU needs to write only once into these bits.\\n\\n\n                If the IC_TAR and IC_SAR are the same, loopback exists but the FIFOs are shared between master and slave, so full loopback is not feasible. Only one direction loopback mode is supported (simplex), not duplex. A master cannot transmit to itself; it can transmit to only a slave.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "IC_SAR": {
    +              "description": "I2C Slave Address Register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 85,
    +              "children": {
    +                "fields": {
    +                  "IC_SAR": {
    +                    "description": "The IC_SAR holds the slave address when the I2C is operating as a slave. For 7-bit addressing, only IC_SAR[6:0] is used.\\n\\n\n                This register can be written only when the I2C interface is disabled, which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect.\\n\\n\n                Note: The default values cannot be any of the reserved address locations: that is, 0x00 to 0x07, or 0x78 to 0x7f. The correct operation of the device is not guaranteed if you program the IC_SAR or IC_TAR to a reserved value. Refer to <> for a complete list of these reserved values.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "IC_DATA_CMD": {
    +              "description": "I2C Rx/Tx Data Buffer and Command Register; this is the register the CPU writes to when filling the TX FIFO and the CPU reads from when retrieving bytes from RX FIFO.\\n\\n\n            The size of the register changes as follows:\\n\\n\n            Write: - 11 bits when IC_EMPTYFIFO_HOLD_MASTER_EN=1 - 9 bits when IC_EMPTYFIFO_HOLD_MASTER_EN=0 Read: - 12 bits when IC_FIRST_DATA_BYTE_STATUS = 1 - 8 bits when IC_FIRST_DATA_BYTE_STATUS = 0 Note: In order for the DW_apb_i2c to continue acknowledging reads, a read command should be written for every byte that is to be received; otherwise the DW_apb_i2c will stop acknowledging.",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FIRST_DATA_BYTE": {
    +                    "description": "Indicates the first data byte received after the address phase for receive transfer in Master receiver or Slave receiver mode.\\n\\n\n                Reset value : 0x0\\n\\n\n                NOTE:  In case of APB_DATA_WIDTH=8,\\n\\n\n                1. The user has to perform two APB Reads to IC_DATA_CMD in order to get status on 11 bit.\\n\\n\n                2. In order to read the 11 bit, the user has to perform the first data byte read [7:0] (offset 0x10) and then perform the second read [15:8] (offset 0x11) in order to know the status of 11 bit (whether the data received in previous read is a first data byte or not).\\n\\n\n                3. The 11th bit is an optional read field, user can ignore 2nd byte read [15:8] (offset 0x11) if not interested in FIRST_DATA_BYTE status.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "Sequential data byte received",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "Non sequential data byte received",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RESTART": {
    +                    "description": "This bit controls whether a RESTART is issued before the byte is sent or received.\\n\\n\n                1 - If IC_RESTART_EN is 1, a RESTART is issued before the data is sent/received (according to the value of CMD), regardless of whether or not the transfer direction is changing from the previous command; if IC_RESTART_EN is 0, a STOP followed by a START is issued instead.\\n\\n\n                0 - If IC_RESTART_EN is 1, a RESTART is issued only if the transfer direction is changing from the previous command; if IC_RESTART_EN is 0, a STOP followed by a START is issued instead.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE": {
    +                            "description": "Don't Issue RESTART before this command",
    +                            "value": 0
    +                          },
    +                          "ENABLE": {
    +                            "description": "Issue RESTART before this command",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STOP": {
    +                    "description": "This bit controls whether a STOP is issued after the byte is sent or received.\\n\\n\n                - 1 - STOP is issued after this byte, regardless of whether or not the Tx FIFO is empty. If the Tx FIFO is not empty, the master immediately tries to start a new transfer by issuing a START and arbitrating for the bus. - 0 - STOP is not issued after this byte, regardless of whether or not the Tx FIFO is empty. If the Tx FIFO is not empty, the master continues the current transfer by sending/receiving data bytes according to the value of the CMD bit. If the Tx FIFO is empty, the master holds the SCL line low and stalls the bus until a new command is available in the Tx FIFO. Reset value: 0x0",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE": {
    +                            "description": "Don't Issue STOP after this command",
    +                            "value": 0
    +                          },
    +                          "ENABLE": {
    +                            "description": "Issue STOP after this command",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CMD": {
    +                    "description": "This bit controls whether a read or a write is performed. This bit does not control the direction when the DW_apb_i2con acts as a slave. It controls only the direction when it acts as a master.\\n\\n\n                When a command is entered in the TX FIFO, this bit distinguishes the write and read commands. In slave-receiver mode, this bit is a 'don't care' because writes to this register are not required. In slave-transmitter mode, a '0' indicates that the data in IC_DATA_CMD is to be transmitted.\\n\\n\n                When programming this bit, you should remember the following: attempting to perform a read operation after a General Call command has been sent results in a TX_ABRT interrupt (bit 6 of the IC_RAW_INTR_STAT register), unless bit 11 (SPECIAL) in the IC_TAR register has been cleared. If a '1' is written to this bit after receiving a RD_REQ interrupt, then a TX_ABRT interrupt occurs.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "WRITE": {
    +                            "description": "Master Write Command",
    +                            "value": 0
    +                          },
    +                          "READ": {
    +                            "description": "Master Read Command",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DAT": {
    +                    "description": "This register contains the data to be transmitted or received on the I2C bus. If you are writing to this register and want to perform a read, bits 7:0 (DAT) are ignored by the DW_apb_i2c. However, when you read this register, these bits return the value of data received on the DW_apb_i2c interface.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IC_SS_SCL_HCNT": {
    +              "description": "Standard Speed I2C Clock SCL High Count Register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 40,
    +              "children": {
    +                "fields": {
    +                  "IC_SS_SCL_HCNT": {
    +                    "description": "This register must be set before any I2C bus transaction can take place to ensure proper I/O timing. This register sets the SCL clock high-period count for standard speed. For more information, refer to 'IC_CLK Frequency Configuration'.\\n\\n\n                This register can be written only when the I2C interface is disabled which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect.\\n\\n\n                The minimum valid value is 6; hardware prevents values less than this being written, and if attempted results in 6 being set. For designs with APB_DATA_WIDTH = 8, the order of programming is important to ensure the correct operation of the DW_apb_i2c. The lower byte must be programmed first. Then the upper byte is programmed.\\n\\n\n                NOTE: This register must not be programmed to a value higher than 65525, because DW_apb_i2c uses a 16-bit counter to flag an I2C bus idle condition when this counter reaches a value of IC_SS_SCL_HCNT + 10.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "IC_SS_SCL_LCNT": {
    +              "description": "Standard Speed I2C Clock SCL Low Count Register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 47,
    +              "children": {
    +                "fields": {
    +                  "IC_SS_SCL_LCNT": {
    +                    "description": "This register must be set before any I2C bus transaction can take place to ensure proper I/O timing. This register sets the SCL clock low period count for standard speed. For more information, refer to 'IC_CLK Frequency Configuration'\\n\\n\n                This register can be written only when the I2C interface is disabled which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect.\\n\\n\n                The minimum valid value is 8; hardware prevents values less than this being written, and if attempted, results in 8 being set. For designs with APB_DATA_WIDTH = 8, the order of programming is important to ensure the correct operation of DW_apb_i2c. The lower byte must be programmed first, and then the upper byte is programmed.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "IC_FS_SCL_HCNT": {
    +              "description": "Fast Mode or Fast Mode Plus I2C Clock SCL High Count Register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 6,
    +              "children": {
    +                "fields": {
    +                  "IC_FS_SCL_HCNT": {
    +                    "description": "This register must be set before any I2C bus transaction can take place to ensure proper I/O timing. This register sets the SCL clock high-period count for fast mode or fast mode plus. It is used in high-speed mode to send the Master Code and START BYTE or General CALL. For more information, refer to 'IC_CLK Frequency Configuration'.\\n\\n\n                This register goes away and becomes read-only returning 0s if IC_MAX_SPEED_MODE = standard. This register can be written only when the I2C interface is disabled, which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect.\\n\\n\n                The minimum valid value is 6; hardware prevents values less than this being written, and if attempted results in 6 being set. For designs with APB_DATA_WIDTH == 8 the order of programming is important to ensure the correct operation of the DW_apb_i2c. The lower byte must be programmed first. Then the upper byte is programmed.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "IC_FS_SCL_LCNT": {
    +              "description": "Fast Mode or Fast Mode Plus I2C Clock SCL Low Count Register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 13,
    +              "children": {
    +                "fields": {
    +                  "IC_FS_SCL_LCNT": {
    +                    "description": "This register must be set before any I2C bus transaction can take place to ensure proper I/O timing. This register sets the SCL clock low period count for fast speed. It is used in high-speed mode to send the Master Code and START BYTE or General CALL. For more information, refer to 'IC_CLK Frequency Configuration'.\\n\\n\n                This register goes away and becomes read-only returning 0s if IC_MAX_SPEED_MODE = standard.\\n\\n\n                This register can be written only when the I2C interface is disabled, which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect.\\n\\n\n                The minimum valid value is 8; hardware prevents values less than this being written, and if attempted results in 8 being set. For designs with APB_DATA_WIDTH = 8 the order of programming is important to ensure the correct operation of the DW_apb_i2c. The lower byte must be programmed first. Then the upper byte is programmed. If the value is less than 8 then the count value gets changed to 8.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "IC_INTR_STAT": {
    +              "description": "I2C Interrupt Status Register\\n\\n\n            Each bit in this register has a corresponding mask bit in the IC_INTR_MASK register. These bits are cleared by reading the matching interrupt clear register. The unmasked raw versions of these bits are available in the IC_RAW_INTR_STAT register.",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "R_RESTART_DET": {
    +                    "description": "See IC_RAW_INTR_STAT for a detailed description of R_RESTART_DET bit.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "R_RESTART_DET interrupt is inactive",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "R_RESTART_DET interrupt is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "R_GEN_CALL": {
    +                    "description": "See IC_RAW_INTR_STAT for a detailed description of R_GEN_CALL bit.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "R_GEN_CALL interrupt is inactive",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "R_GEN_CALL interrupt is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "R_START_DET": {
    +                    "description": "See IC_RAW_INTR_STAT for a detailed description of R_START_DET bit.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "R_START_DET interrupt is inactive",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "R_START_DET interrupt is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "R_STOP_DET": {
    +                    "description": "See IC_RAW_INTR_STAT for a detailed description of R_STOP_DET bit.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "R_STOP_DET interrupt is inactive",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "R_STOP_DET interrupt is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "R_ACTIVITY": {
    +                    "description": "See IC_RAW_INTR_STAT for a detailed description of R_ACTIVITY bit.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "R_ACTIVITY interrupt is inactive",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "R_ACTIVITY interrupt is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "R_RX_DONE": {
    +                    "description": "See IC_RAW_INTR_STAT for a detailed description of R_RX_DONE bit.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "R_RX_DONE interrupt is inactive",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "R_RX_DONE interrupt is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "R_TX_ABRT": {
    +                    "description": "See IC_RAW_INTR_STAT for a detailed description of R_TX_ABRT bit.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "R_TX_ABRT interrupt is inactive",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "R_TX_ABRT interrupt is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "R_RD_REQ": {
    +                    "description": "See IC_RAW_INTR_STAT for a detailed description of R_RD_REQ bit.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "R_RD_REQ interrupt is inactive",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "R_RD_REQ interrupt is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "R_TX_EMPTY": {
    +                    "description": "See IC_RAW_INTR_STAT for a detailed description of R_TX_EMPTY bit.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "R_TX_EMPTY interrupt is inactive",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "R_TX_EMPTY interrupt is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "R_TX_OVER": {
    +                    "description": "See IC_RAW_INTR_STAT for a detailed description of R_TX_OVER bit.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "R_TX_OVER interrupt is inactive",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "R_TX_OVER interrupt is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "R_RX_FULL": {
    +                    "description": "See IC_RAW_INTR_STAT for a detailed description of R_RX_FULL bit.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "R_RX_FULL interrupt is inactive",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "R_RX_FULL interrupt is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "R_RX_OVER": {
    +                    "description": "See IC_RAW_INTR_STAT for a detailed description of R_RX_OVER bit.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "R_RX_OVER interrupt is inactive",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "R_RX_OVER interrupt is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "R_RX_UNDER": {
    +                    "description": "See IC_RAW_INTR_STAT for a detailed description of R_RX_UNDER bit.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "RX_UNDER interrupt is inactive",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "RX_UNDER interrupt is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "IC_INTR_MASK": {
    +              "description": "I2C Interrupt Mask Register.\\n\\n\n            These bits mask their corresponding interrupt status bits. This register is active low; a value of 0 masks the interrupt, whereas a value of 1 unmasks the interrupt.",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 2303,
    +              "children": {
    +                "fields": {
    +                  "M_RESTART_DET": {
    +                    "description": "This bit masks the R_RESTART_DET interrupt in IC_INTR_STAT register.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ENABLED": {
    +                            "description": "RESTART_DET interrupt is masked",
    +                            "value": 0
    +                          },
    +                          "DISABLED": {
    +                            "description": "RESTART_DET interrupt is unmasked",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "M_GEN_CALL": {
    +                    "description": "This bit masks the R_GEN_CALL interrupt in IC_INTR_STAT register.\\n\\n\n                Reset value: 0x1",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ENABLED": {
    +                            "description": "GEN_CALL interrupt is masked",
    +                            "value": 0
    +                          },
    +                          "DISABLED": {
    +                            "description": "GEN_CALL interrupt is unmasked",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "M_START_DET": {
    +                    "description": "This bit masks the R_START_DET interrupt in IC_INTR_STAT register.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ENABLED": {
    +                            "description": "START_DET interrupt is masked",
    +                            "value": 0
    +                          },
    +                          "DISABLED": {
    +                            "description": "START_DET interrupt is unmasked",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "M_STOP_DET": {
    +                    "description": "This bit masks the R_STOP_DET interrupt in IC_INTR_STAT register.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ENABLED": {
    +                            "description": "STOP_DET interrupt is masked",
    +                            "value": 0
    +                          },
    +                          "DISABLED": {
    +                            "description": "STOP_DET interrupt is unmasked",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "M_ACTIVITY": {
    +                    "description": "This bit masks the R_ACTIVITY interrupt in IC_INTR_STAT register.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ENABLED": {
    +                            "description": "ACTIVITY interrupt is masked",
    +                            "value": 0
    +                          },
    +                          "DISABLED": {
    +                            "description": "ACTIVITY interrupt is unmasked",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "M_RX_DONE": {
    +                    "description": "This bit masks the R_RX_DONE interrupt in IC_INTR_STAT register.\\n\\n\n                Reset value: 0x1",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ENABLED": {
    +                            "description": "RX_DONE interrupt is masked",
    +                            "value": 0
    +                          },
    +                          "DISABLED": {
    +                            "description": "RX_DONE interrupt is unmasked",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "M_TX_ABRT": {
    +                    "description": "This bit masks the R_TX_ABRT interrupt in IC_INTR_STAT register.\\n\\n\n                Reset value: 0x1",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ENABLED": {
    +                            "description": "TX_ABORT interrupt is masked",
    +                            "value": 0
    +                          },
    +                          "DISABLED": {
    +                            "description": "TX_ABORT interrupt is unmasked",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "M_RD_REQ": {
    +                    "description": "This bit masks the R_RD_REQ interrupt in IC_INTR_STAT register.\\n\\n\n                Reset value: 0x1",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ENABLED": {
    +                            "description": "RD_REQ interrupt is masked",
    +                            "value": 0
    +                          },
    +                          "DISABLED": {
    +                            "description": "RD_REQ interrupt is unmasked",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "M_TX_EMPTY": {
    +                    "description": "This bit masks the R_TX_EMPTY interrupt in IC_INTR_STAT register.\\n\\n\n                Reset value: 0x1",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ENABLED": {
    +                            "description": "TX_EMPTY interrupt is masked",
    +                            "value": 0
    +                          },
    +                          "DISABLED": {
    +                            "description": "TX_EMPTY interrupt is unmasked",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "M_TX_OVER": {
    +                    "description": "This bit masks the R_TX_OVER interrupt in IC_INTR_STAT register.\\n\\n\n                Reset value: 0x1",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ENABLED": {
    +                            "description": "TX_OVER interrupt is masked",
    +                            "value": 0
    +                          },
    +                          "DISABLED": {
    +                            "description": "TX_OVER interrupt is unmasked",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "M_RX_FULL": {
    +                    "description": "This bit masks the R_RX_FULL interrupt in IC_INTR_STAT register.\\n\\n\n                Reset value: 0x1",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ENABLED": {
    +                            "description": "RX_FULL interrupt is masked",
    +                            "value": 0
    +                          },
    +                          "DISABLED": {
    +                            "description": "RX_FULL interrupt is unmasked",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "M_RX_OVER": {
    +                    "description": "This bit masks the R_RX_OVER interrupt in IC_INTR_STAT register.\\n\\n\n                Reset value: 0x1",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ENABLED": {
    +                            "description": "RX_OVER interrupt is masked",
    +                            "value": 0
    +                          },
    +                          "DISABLED": {
    +                            "description": "RX_OVER interrupt is unmasked",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "M_RX_UNDER": {
    +                    "description": "This bit masks the R_RX_UNDER interrupt in IC_INTR_STAT register.\\n\\n\n                Reset value: 0x1",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ENABLED": {
    +                            "description": "RX_UNDER interrupt is masked",
    +                            "value": 0
    +                          },
    +                          "DISABLED": {
    +                            "description": "RX_UNDER interrupt is unmasked",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "IC_RAW_INTR_STAT": {
    +              "description": "I2C Raw Interrupt Status Register\\n\\n\n            Unlike the IC_INTR_STAT register, these bits are not masked so they always show the true status of the DW_apb_i2c.",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "RESTART_DET": {
    +                    "description": "Indicates whether a RESTART condition has occurred on the I2C interface when DW_apb_i2c is operating in Slave mode and the slave is being addressed. Enabled only when IC_SLV_RESTART_DET_EN=1.\\n\\n\n                Note: However, in high-speed mode or during a START BYTE transfer, the RESTART comes before the address field as per the I2C protocol. In this case, the slave is not the addressed slave when the RESTART is issued, therefore DW_apb_i2c does not generate the RESTART_DET interrupt.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "RESTART_DET interrupt is inactive",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "RESTART_DET interrupt is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "GEN_CALL": {
    +                    "description": "Set only when a General Call address is received and it is acknowledged. It stays set until it is cleared either by disabling DW_apb_i2c or when the CPU reads bit 0 of the IC_CLR_GEN_CALL register. DW_apb_i2c stores the received data in the Rx buffer.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "GEN_CALL interrupt is inactive",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "GEN_CALL interrupt is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "START_DET": {
    +                    "description": "Indicates whether a START or RESTART condition has occurred on the I2C interface regardless of whether DW_apb_i2c is operating in slave or master mode.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "START_DET interrupt is inactive",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "START_DET interrupt is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STOP_DET": {
    +                    "description": "Indicates whether a STOP condition has occurred on the I2C interface regardless of whether DW_apb_i2c is operating in slave or master mode.\\n\\n\n                In Slave Mode: - If IC_CON[7]=1'b1  (STOP_DET_IFADDRESSED), the STOP_DET interrupt will be issued only if slave is addressed. Note: During a general call address, this slave does not issue a STOP_DET interrupt if STOP_DET_IF_ADDRESSED=1'b1, even if the slave responds to the general call address by generating ACK. The STOP_DET interrupt is generated only when the transmitted address matches the slave address (SAR). - If IC_CON[7]=1'b0 (STOP_DET_IFADDRESSED), the STOP_DET interrupt is issued irrespective of whether it is being addressed. In Master Mode: - If IC_CON[10]=1'b1  (STOP_DET_IF_MASTER_ACTIVE),the STOP_DET interrupt will be issued only if Master is active. - If IC_CON[10]=1'b0  (STOP_DET_IFADDRESSED),the STOP_DET interrupt will be issued irrespective of whether master is active or not. Reset value: 0x0",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "STOP_DET interrupt is inactive",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "STOP_DET interrupt is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ACTIVITY": {
    +                    "description": "This bit captures DW_apb_i2c activity and stays set until it is cleared. There are four ways to clear it: - Disabling the DW_apb_i2c - Reading the IC_CLR_ACTIVITY register - Reading the IC_CLR_INTR register - System reset Once this bit is set, it stays set unless one of the four methods is used to clear it. Even if the DW_apb_i2c module is idle, this bit remains set until cleared, indicating that there was activity on the bus.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "RAW_INTR_ACTIVITY interrupt is inactive",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "RAW_INTR_ACTIVITY interrupt is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RX_DONE": {
    +                    "description": "When the DW_apb_i2c is acting as a slave-transmitter, this bit is set to 1 if the master does not acknowledge a transmitted byte. This occurs on the last byte of the transmission, indicating that the transmission is done.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "RX_DONE interrupt is inactive",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "RX_DONE interrupt is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TX_ABRT": {
    +                    "description": "This bit indicates if DW_apb_i2c, as an I2C transmitter, is unable to complete the intended actions on the contents of the transmit FIFO. This situation can occur both as an I2C master or an I2C slave, and is referred to as a 'transmit abort'. When this bit is set to 1, the IC_TX_ABRT_SOURCE register indicates the reason why the transmit abort takes places.\\n\\n\n                Note:  The DW_apb_i2c flushes/resets/empties the TX_FIFO and RX_FIFO whenever there is a transmit abort caused by any of the events tracked by the IC_TX_ABRT_SOURCE register. The FIFOs remains in this flushed state until the register IC_CLR_TX_ABRT is read. Once this read is performed, the Tx FIFO is then ready to accept more data bytes from the APB interface.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "TX_ABRT interrupt is inactive",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "TX_ABRT interrupt is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RD_REQ": {
    +                    "description": "This bit is set to 1 when DW_apb_i2c is acting as a slave and another I2C master is attempting to read data from DW_apb_i2c. The DW_apb_i2c holds the I2C bus in a wait state (SCL=0) until this interrupt is serviced, which means that the slave has been addressed by a remote master that is asking for data to be transferred. The processor must respond to this interrupt and then write the requested data to the IC_DATA_CMD register. This bit is set to 0 just after the processor reads the IC_CLR_RD_REQ register.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "RD_REQ interrupt is inactive",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "RD_REQ interrupt is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TX_EMPTY": {
    +                    "description": "The behavior of the TX_EMPTY interrupt status differs based on the TX_EMPTY_CTRL selection in the IC_CON register. - When TX_EMPTY_CTRL = 0: This bit is set to 1 when the transmit buffer is at or below the threshold value set in the IC_TX_TL register. - When TX_EMPTY_CTRL = 1: This bit is set to 1 when the transmit buffer is at or below the threshold value set in the IC_TX_TL register and the transmission of the address/data from the internal shift register for the most recently popped command is completed. It is automatically cleared by hardware when the buffer level goes above the threshold. When IC_ENABLE[0] is set to 0, the TX FIFO is flushed and held in reset. There the TX FIFO looks like it has no data within it, so this bit is set to 1, provided there is activity in the master or slave state machines. When there is no longer any activity, then with ic_en=0, this bit is set to 0.\\n\\n\n                Reset value: 0x0.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "TX_EMPTY interrupt is inactive",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "TX_EMPTY interrupt is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TX_OVER": {
    +                    "description": "Set during transmit if the transmit buffer is filled to IC_TX_BUFFER_DEPTH and the processor attempts to issue another I2C command by writing to the IC_DATA_CMD register. When the module is disabled, this bit keeps its level until the master or slave state machines go into idle, and when ic_en goes to 0, this interrupt is cleared.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "TX_OVER interrupt is inactive",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "TX_OVER interrupt is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RX_FULL": {
    +                    "description": "Set when the receive buffer reaches or goes above the RX_TL threshold in the IC_RX_TL register. It is automatically cleared by hardware when buffer level goes below the threshold. If the module is disabled (IC_ENABLE[0]=0), the RX FIFO is flushed and held in reset; therefore the RX FIFO is not full. So this bit is cleared once the IC_ENABLE bit 0 is programmed with a 0, regardless of the activity that continues.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "RX_FULL interrupt is inactive",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "RX_FULL interrupt is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RX_OVER": {
    +                    "description": "Set if the receive buffer is completely filled to IC_RX_BUFFER_DEPTH and an additional byte is received from an external I2C device. The DW_apb_i2c acknowledges this, but any data bytes received after the FIFO is full are lost. If the module is disabled (IC_ENABLE[0]=0), this bit keeps its level until the master or slave state machines go into idle, and when ic_en goes to 0, this interrupt is cleared.\\n\\n\n                Note:  If bit 9 of the IC_CON register (RX_FIFO_FULL_HLD_CTRL) is programmed to HIGH, then the RX_OVER interrupt never occurs, because the Rx FIFO never overflows.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "RX_OVER interrupt is inactive",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "RX_OVER interrupt is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RX_UNDER": {
    +                    "description": "Set if the processor attempts to read the receive buffer when it is empty by reading from the IC_DATA_CMD register. If the module is disabled (IC_ENABLE[0]=0), this bit keeps its level until the master or slave state machines go into idle, and when ic_en goes to 0, this interrupt is cleared.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "RX_UNDER interrupt is inactive",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "RX_UNDER interrupt is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "IC_RX_TL": {
    +              "description": "I2C Receive FIFO Threshold Register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "RX_TL": {
    +                    "description": "Receive FIFO Threshold Level.\\n\\n\n                Controls the level of entries (or above) that triggers the RX_FULL interrupt (bit 2 in IC_RAW_INTR_STAT register). The valid range is 0-255, with the additional restriction that hardware does not allow this value to be set to a value larger than the depth of the buffer. If an attempt is made to do that, the actual value set will be the maximum depth of the buffer. A value of 0 sets the threshold for 1 entry, and a value of 255 sets the threshold for 256 entries.",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IC_TX_TL": {
    +              "description": "I2C Transmit FIFO Threshold Register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "TX_TL": {
    +                    "description": "Transmit FIFO Threshold Level.\\n\\n\n                Controls the level of entries (or below) that trigger the TX_EMPTY interrupt (bit 4 in IC_RAW_INTR_STAT register). The valid range is 0-255, with the additional restriction that it may not be set to value larger than the depth of the buffer. If an attempt is made to do that, the actual value set will be the maximum depth of the buffer. A value of 0 sets the threshold for 0 entries, and a value of 255 sets the threshold for 255 entries.",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IC_CLR_INTR": {
    +              "description": "Clear Combined and Individual Interrupt Register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CLR_INTR": {
    +                    "description": "Read this register to clear the combined interrupt, all individual interrupts, and the IC_TX_ABRT_SOURCE register. This bit does not clear hardware clearable interrupts but software clearable interrupts. Refer to Bit 9 of the IC_TX_ABRT_SOURCE register for an exception to clearing IC_TX_ABRT_SOURCE.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IC_CLR_RX_UNDER": {
    +              "description": "Clear RX_UNDER Interrupt Register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CLR_RX_UNDER": {
    +                    "description": "Read this register to clear the RX_UNDER interrupt (bit 0) of the IC_RAW_INTR_STAT register.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IC_CLR_RX_OVER": {
    +              "description": "Clear RX_OVER Interrupt Register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CLR_RX_OVER": {
    +                    "description": "Read this register to clear the RX_OVER interrupt (bit 1) of the IC_RAW_INTR_STAT register.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IC_CLR_TX_OVER": {
    +              "description": "Clear TX_OVER Interrupt Register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CLR_TX_OVER": {
    +                    "description": "Read this register to clear the TX_OVER interrupt (bit 3) of the IC_RAW_INTR_STAT register.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IC_CLR_RD_REQ": {
    +              "description": "Clear RD_REQ Interrupt Register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CLR_RD_REQ": {
    +                    "description": "Read this register to clear the RD_REQ interrupt (bit 5) of the IC_RAW_INTR_STAT register.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IC_CLR_TX_ABRT": {
    +              "description": "Clear TX_ABRT Interrupt Register",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CLR_TX_ABRT": {
    +                    "description": "Read this register to clear the TX_ABRT interrupt (bit 6) of the IC_RAW_INTR_STAT register, and the IC_TX_ABRT_SOURCE register. This also releases the TX FIFO from the flushed/reset state, allowing more writes to the TX FIFO. Refer to Bit 9 of the IC_TX_ABRT_SOURCE register for an exception to clearing IC_TX_ABRT_SOURCE.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IC_CLR_RX_DONE": {
    +              "description": "Clear RX_DONE Interrupt Register",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CLR_RX_DONE": {
    +                    "description": "Read this register to clear the RX_DONE interrupt (bit 7) of the IC_RAW_INTR_STAT register.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IC_CLR_ACTIVITY": {
    +              "description": "Clear ACTIVITY Interrupt Register",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CLR_ACTIVITY": {
    +                    "description": "Reading this register clears the ACTIVITY interrupt if the I2C is not active anymore. If the I2C module is still active on the bus, the ACTIVITY interrupt bit continues to be set. It is automatically cleared by hardware if the module is disabled and if there is no further activity on the bus. The value read from this register to get status of the ACTIVITY interrupt (bit 8) of the IC_RAW_INTR_STAT register.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IC_CLR_STOP_DET": {
    +              "description": "Clear STOP_DET Interrupt Register",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CLR_STOP_DET": {
    +                    "description": "Read this register to clear the STOP_DET interrupt (bit 9) of the IC_RAW_INTR_STAT register.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IC_CLR_START_DET": {
    +              "description": "Clear START_DET Interrupt Register",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CLR_START_DET": {
    +                    "description": "Read this register to clear the START_DET interrupt (bit 10) of the IC_RAW_INTR_STAT register.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IC_CLR_GEN_CALL": {
    +              "description": "Clear GEN_CALL Interrupt Register",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CLR_GEN_CALL": {
    +                    "description": "Read this register to clear the GEN_CALL interrupt (bit 11) of IC_RAW_INTR_STAT register.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IC_ENABLE": {
    +              "description": "I2C Enable Register",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "TX_CMD_BLOCK": {
    +                    "description": "In Master mode: - 1'b1: Blocks the transmission of data on I2C bus even if Tx FIFO has data to transmit. - 1'b0: The transmission of data starts on I2C bus automatically, as soon as the first data is available in the Tx FIFO. Note: To block the execution of Master commands, set the TX_CMD_BLOCK bit only when Tx FIFO is empty (IC_STATUS[2]==1) and Master is in Idle state (IC_STATUS[5] == 0). Any further commands put in the Tx FIFO are not executed until TX_CMD_BLOCK bit is unset. Reset value:  IC_TX_CMD_BLOCK_DEFAULT",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NOT_BLOCKED": {
    +                            "description": "Tx Command execution not blocked",
    +                            "value": 0
    +                          },
    +                          "BLOCKED": {
    +                            "description": "Tx Command execution blocked",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ABORT": {
    +                    "description": "When set, the controller initiates the transfer abort. - 0: ABORT not initiated or ABORT done - 1: ABORT operation in progress The software can abort the I2C transfer in master mode by setting this bit. The software can set this bit only when ENABLE is already set; otherwise, the controller ignores any write to ABORT bit. The software cannot clear the ABORT bit once set. In response to an ABORT, the controller issues a STOP and flushes the Tx FIFO after completing the current transfer, then sets the TX_ABORT interrupt after the abort operation. The ABORT bit is cleared automatically after the abort operation.\\n\\n\n                For a detailed description on how to abort I2C transfers, refer to 'Aborting I2C Transfers'.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE": {
    +                            "description": "ABORT operation not in progress",
    +                            "value": 0
    +                          },
    +                          "ENABLED": {
    +                            "description": "ABORT operation in progress",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ENABLE": {
    +                    "description": "Controls whether the DW_apb_i2c is enabled. - 0: Disables DW_apb_i2c (TX and RX FIFOs are held in an erased state) - 1: Enables DW_apb_i2c Software can disable DW_apb_i2c while it is active. However, it is important that care be taken to ensure that DW_apb_i2c is disabled properly. A recommended procedure is described in 'Disabling DW_apb_i2c'.\\n\\n\n                When DW_apb_i2c is disabled, the following occurs: - The TX FIFO and RX FIFO get flushed. - Status bits in the IC_INTR_STAT register are still active until DW_apb_i2c goes into IDLE state. If the module is transmitting, it stops as well as deletes the contents of the transmit buffer after the current transfer is complete. If the module is receiving, the DW_apb_i2c stops the current transfer at the end of the current byte and does not acknowledge the transfer.\\n\\n\n                In systems with asynchronous pclk and ic_clk when IC_CLK_TYPE parameter set to asynchronous (1), there is a two ic_clk delay when enabling or disabling the DW_apb_i2c. For a detailed description on how to disable DW_apb_i2c, refer to 'Disabling DW_apb_i2c'\\n\\n\n                Reset value: 0x0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED": {
    +                            "description": "I2C is disabled",
    +                            "value": 0
    +                          },
    +                          "ENABLED": {
    +                            "description": "I2C is enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "IC_STATUS": {
    +              "description": "I2C Status Register\\n\\n\n            This is a read-only register used to indicate the current transfer status and FIFO status. The status register may be read at any time. None of the bits in this register request an interrupt.\\n\\n\n            When the I2C is disabled by writing 0 in bit 0 of the IC_ENABLE register: - Bits 1 and 2 are set to 1 - Bits 3 and 10 are set to 0 When the master or slave state machines goes to idle and ic_en=0: - Bits 5 and 6 are set to 0",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 6,
    +              "children": {
    +                "fields": {
    +                  "SLV_ACTIVITY": {
    +                    "description": "Slave FSM Activity Status. When the Slave Finite State Machine (FSM) is not in the IDLE state, this bit is set. - 0: Slave FSM is in IDLE state so the Slave part of DW_apb_i2c is not Active - 1: Slave FSM is not in IDLE state so the Slave part of DW_apb_i2c is Active Reset value: 0x0",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "IDLE": {
    +                            "description": "Slave is idle",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "Slave not idle",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "MST_ACTIVITY": {
    +                    "description": "Master FSM Activity Status. When the Master Finite State Machine (FSM) is not in the IDLE state, this bit is set. - 0: Master FSM is in IDLE state so the Master part of DW_apb_i2c is not Active - 1: Master FSM is not in IDLE state so the Master part of DW_apb_i2c is Active Note: IC_STATUS[0]-that is, ACTIVITY bit-is the OR of SLV_ACTIVITY and MST_ACTIVITY bits.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "IDLE": {
    +                            "description": "Master is idle",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "Master not idle",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RFF": {
    +                    "description": "Receive FIFO Completely Full. When the receive FIFO is completely full, this bit is set. When the receive FIFO contains one or more empty location, this bit is cleared. - 0: Receive FIFO is not full - 1: Receive FIFO is full Reset value: 0x0",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NOT_FULL": {
    +                            "description": "Rx FIFO not full",
    +                            "value": 0
    +                          },
    +                          "FULL": {
    +                            "description": "Rx FIFO is full",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RFNE": {
    +                    "description": "Receive FIFO Not Empty. This bit is set when the receive FIFO contains one or more entries; it is cleared when the receive FIFO is empty. - 0: Receive FIFO is empty - 1: Receive FIFO is not empty Reset value: 0x0",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "EMPTY": {
    +                            "description": "Rx FIFO is empty",
    +                            "value": 0
    +                          },
    +                          "NOT_EMPTY": {
    +                            "description": "Rx FIFO not empty",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TFE": {
    +                    "description": "Transmit FIFO Completely Empty. When the transmit FIFO is completely empty, this bit is set. When it contains one or more valid entries, this bit is cleared. This bit field does not request an interrupt. - 0: Transmit FIFO is not empty - 1: Transmit FIFO is empty Reset value: 0x1",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "NON_EMPTY": {
    +                            "description": "Tx FIFO not empty",
    +                            "value": 0
    +                          },
    +                          "EMPTY": {
    +                            "description": "Tx FIFO is empty",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "TFNF": {
    +                    "description": "Transmit FIFO Not Full. Set when the transmit FIFO contains one or more empty locations, and is cleared when the FIFO is full. - 0: Transmit FIFO is full - 1: Transmit FIFO is not full Reset value: 0x1",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "FULL": {
    +                            "description": "Tx FIFO is full",
    +                            "value": 0
    +                          },
    +                          "NOT_FULL": {
    +                            "description": "Tx FIFO not full",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ACTIVITY": {
    +                    "description": "I2C Activity Status. Reset value: 0x0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "I2C is idle",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "I2C is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "IC_TXFLR": {
    +              "description": "I2C Transmit FIFO Level Register This register contains the number of valid data entries in the transmit FIFO buffer. It is cleared whenever: - The I2C is disabled - There is a transmit abort - that is, TX_ABRT bit is set in the IC_RAW_INTR_STAT register - The slave bulk transmit mode is aborted The register increments whenever data is placed into the transmit FIFO and decrements when data is taken from the transmit FIFO.",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "TXFLR": {
    +                    "description": "Transmit FIFO Level. Contains the number of valid data entries in the transmit FIFO.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IC_RXFLR": {
    +              "description": "I2C Receive FIFO Level Register This register contains the number of valid data entries in the receive FIFO buffer. It is cleared whenever: - The I2C is disabled - Whenever there is a transmit abort caused by any of the events tracked in IC_TX_ABRT_SOURCE The register increments whenever data is placed into the receive FIFO and decrements when data is taken from the receive FIFO.",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "RXFLR": {
    +                    "description": "Receive FIFO Level. Contains the number of valid data entries in the receive FIFO.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IC_SDA_HOLD": {
    +              "description": "I2C SDA Hold Time Length Register\\n\\n\n            The bits [15:0] of this register are used to control the hold time of SDA during transmit in both slave and master mode (after SCL goes from HIGH to LOW).\\n\\n\n            The bits [23:16] of this register are used to extend the SDA transition (if any) whenever SCL is HIGH in the receiver in either master or slave mode.\\n\\n\n            Writes to this register succeed only when IC_ENABLE[0]=0.\\n\\n\n            The values in this register are in units of ic_clk period. The value programmed in IC_SDA_TX_HOLD must be greater than the minimum hold time in each mode (one cycle in master mode, seven cycles in slave mode) for the value to be implemented.\\n\\n\n            The programmed SDA hold time during transmit (IC_SDA_TX_HOLD) cannot exceed at any time the duration of the low part of scl. Therefore the programmed value cannot be larger than N_SCL_LOW-2, where N_SCL_LOW is the duration of the low part of the scl period measured in ic_clk cycles.",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 1,
    +              "children": {
    +                "fields": {
    +                  "IC_SDA_RX_HOLD": {
    +                    "description": "Sets the required SDA hold time in units of ic_clk period, when DW_apb_i2c acts as a receiver.\\n\\n\n                Reset value: IC_DEFAULT_SDA_HOLD[23:16].",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "IC_SDA_TX_HOLD": {
    +                    "description": "Sets the required SDA hold time in units of ic_clk period, when DW_apb_i2c acts as a transmitter.\\n\\n\n                Reset value: IC_DEFAULT_SDA_HOLD[15:0].",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "IC_TX_ABRT_SOURCE": {
    +              "description": "I2C Transmit Abort Source Register\\n\\n\n            This register has 32 bits that indicate the source of the TX_ABRT bit. Except for Bit 9, this register is cleared whenever the IC_CLR_TX_ABRT register or the IC_CLR_INTR register is read. To clear Bit 9, the source of the ABRT_SBYTE_NORSTRT must be fixed first; RESTART must be enabled (IC_CON[5]=1), the SPECIAL bit must be cleared (IC_TAR[11]), or the GC_OR_START bit must be cleared (IC_TAR[10]).\\n\\n\n            Once the source of the ABRT_SBYTE_NORSTRT is fixed, then this bit can be cleared in the same manner as other bits in this register. If the source of the ABRT_SBYTE_NORSTRT is not fixed before attempting to clear this bit, Bit 9 clears for one cycle and is then re-asserted.",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "TX_FLUSH_CNT": {
    +                    "description": "This field indicates the number of Tx FIFO Data Commands which are flushed due to TX_ABRT interrupt. It is cleared whenever I2C is disabled.\\n\\n\n                Reset value: 0x0\\n\\n\n                Role of DW_apb_i2c:  Master-Transmitter or Slave-Transmitter",
    +                    "offset": 23,
    +                    "size": 9,
    +                    "access": "read-only"
    +                  },
    +                  "ABRT_USER_ABRT": {
    +                    "description": "This is a master-mode-only bit. Master has detected the transfer abort (IC_ENABLE[1])\\n\\n\n                Reset value: 0x0\\n\\n\n                Role of DW_apb_i2c:  Master-Transmitter",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ABRT_USER_ABRT_VOID": {
    +                            "description": "Transfer abort detected by master- scenario not present",
    +                            "value": 0
    +                          },
    +                          "ABRT_USER_ABRT_GENERATED": {
    +                            "description": "Transfer abort detected by master",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ABRT_SLVRD_INTX": {
    +                    "description": "1: When the processor side responds to a slave mode request for data to be transmitted to a remote master and user writes a 1 in CMD (bit 8) of IC_DATA_CMD register.\\n\\n\n                Reset value: 0x0\\n\\n\n                Role of DW_apb_i2c:  Slave-Transmitter",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ABRT_SLVRD_INTX_VOID": {
    +                            "description": "Slave trying to transmit to remote master in read mode- scenario not present",
    +                            "value": 0
    +                          },
    +                          "ABRT_SLVRD_INTX_GENERATED": {
    +                            "description": "Slave trying to transmit to remote master in read mode",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ABRT_SLV_ARBLOST": {
    +                    "description": "This field indicates that a Slave has lost the bus while transmitting data to a remote master. IC_TX_ABRT_SOURCE[12] is set at the same time. Note:  Even though the slave never 'owns' the bus, something could go wrong on the bus. This is a fail safe check. For instance, during a data transmission at the low-to-high transition of SCL, if what is on the data bus is not what is supposed to be transmitted, then DW_apb_i2c no longer own the bus.\\n\\n\n                Reset value: 0x0\\n\\n\n                Role of DW_apb_i2c:  Slave-Transmitter",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ABRT_SLV_ARBLOST_VOID": {
    +                            "description": "Slave lost arbitration to remote master- scenario not present",
    +                            "value": 0
    +                          },
    +                          "ABRT_SLV_ARBLOST_GENERATED": {
    +                            "description": "Slave lost arbitration to remote master",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ABRT_SLVFLUSH_TXFIFO": {
    +                    "description": "This field specifies that the Slave has received a read command and some data exists in the TX FIFO, so the slave issues a TX_ABRT interrupt to flush old data in TX FIFO.\\n\\n\n                Reset value: 0x0\\n\\n\n                Role of DW_apb_i2c:  Slave-Transmitter",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ABRT_SLVFLUSH_TXFIFO_VOID": {
    +                            "description": "Slave flushes existing data in TX-FIFO upon getting read command- scenario not present",
    +                            "value": 0
    +                          },
    +                          "ABRT_SLVFLUSH_TXFIFO_GENERATED": {
    +                            "description": "Slave flushes existing data in TX-FIFO upon getting read command",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ARB_LOST": {
    +                    "description": "This field specifies that the Master has lost arbitration, or if IC_TX_ABRT_SOURCE[14] is also set, then the slave transmitter has lost arbitration.\\n\\n\n                Reset value: 0x0\\n\\n\n                Role of DW_apb_i2c:  Master-Transmitter or Slave-Transmitter",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ABRT_LOST_VOID": {
    +                            "description": "Master or Slave-Transmitter lost arbitration- scenario not present",
    +                            "value": 0
    +                          },
    +                          "ABRT_LOST_GENERATED": {
    +                            "description": "Master or Slave-Transmitter lost arbitration",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ABRT_MASTER_DIS": {
    +                    "description": "This field indicates that the User tries to initiate a Master operation with the Master mode disabled.\\n\\n\n                Reset value: 0x0\\n\\n\n                Role of DW_apb_i2c:  Master-Transmitter or Master-Receiver",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ABRT_MASTER_DIS_VOID": {
    +                            "description": "User initiating master operation when MASTER disabled- scenario not present",
    +                            "value": 0
    +                          },
    +                          "ABRT_MASTER_DIS_GENERATED": {
    +                            "description": "User initiating master operation when MASTER disabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ABRT_10B_RD_NORSTRT": {
    +                    "description": "This field indicates that the restart is disabled (IC_RESTART_EN bit (IC_CON[5]) =0) and the master sends a read command in 10-bit addressing mode.\\n\\n\n                Reset value: 0x0\\n\\n\n                Role of DW_apb_i2c:  Master-Receiver",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ABRT_10B_RD_VOID": {
    +                            "description": "Master not trying to read in 10Bit addressing mode when RESTART disabled",
    +                            "value": 0
    +                          },
    +                          "ABRT_10B_RD_GENERATED": {
    +                            "description": "Master trying to read in 10Bit addressing mode when RESTART disabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ABRT_SBYTE_NORSTRT": {
    +                    "description": "To clear Bit 9, the source of the ABRT_SBYTE_NORSTRT must be fixed first; restart must be enabled (IC_CON[5]=1), the SPECIAL bit must be cleared (IC_TAR[11]), or the GC_OR_START bit must be cleared (IC_TAR[10]). Once the source of the ABRT_SBYTE_NORSTRT is fixed, then this bit can be cleared in the same manner as other bits in this register. If the source of the ABRT_SBYTE_NORSTRT is not fixed before attempting to clear this bit, bit 9 clears for one cycle and then gets reasserted. When this field is set to 1, the restart is disabled (IC_RESTART_EN bit (IC_CON[5]) =0) and the user is trying to send a START Byte.\\n\\n\n                Reset value: 0x0\\n\\n\n                Role of DW_apb_i2c:  Master",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ABRT_SBYTE_NORSTRT_VOID": {
    +                            "description": "User trying to send START byte when RESTART disabled- scenario not present",
    +                            "value": 0
    +                          },
    +                          "ABRT_SBYTE_NORSTRT_GENERATED": {
    +                            "description": "User trying to send START byte when RESTART disabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ABRT_HS_NORSTRT": {
    +                    "description": "This field indicates that the restart is disabled (IC_RESTART_EN bit (IC_CON[5]) =0) and the user is trying to use the master to transfer data in High Speed mode.\\n\\n\n                Reset value: 0x0\\n\\n\n                Role of DW_apb_i2c:  Master-Transmitter or Master-Receiver",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ABRT_HS_NORSTRT_VOID": {
    +                            "description": "User trying to switch Master to HS mode when RESTART disabled- scenario not present",
    +                            "value": 0
    +                          },
    +                          "ABRT_HS_NORSTRT_GENERATED": {
    +                            "description": "User trying to switch Master to HS mode when RESTART disabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ABRT_SBYTE_ACKDET": {
    +                    "description": "This field indicates that the Master has sent a START Byte and the START Byte was acknowledged (wrong behavior).\\n\\n\n                Reset value: 0x0\\n\\n\n                Role of DW_apb_i2c:  Master",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ABRT_SBYTE_ACKDET_VOID": {
    +                            "description": "ACK detected for START byte- scenario not present",
    +                            "value": 0
    +                          },
    +                          "ABRT_SBYTE_ACKDET_GENERATED": {
    +                            "description": "ACK detected for START byte",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ABRT_HS_ACKDET": {
    +                    "description": "This field indicates that the Master is in High Speed mode and the High Speed Master code was acknowledged (wrong behavior).\\n\\n\n                Reset value: 0x0\\n\\n\n                Role of DW_apb_i2c:  Master",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ABRT_HS_ACK_VOID": {
    +                            "description": "HS Master code ACKed in HS Mode- scenario not present",
    +                            "value": 0
    +                          },
    +                          "ABRT_HS_ACK_GENERATED": {
    +                            "description": "HS Master code ACKed in HS Mode",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ABRT_GCALL_READ": {
    +                    "description": "This field indicates that DW_apb_i2c in the master mode has sent a General Call but the user programmed the byte following the General Call to be a read from the bus (IC_DATA_CMD[9] is set to 1).\\n\\n\n                Reset value: 0x0\\n\\n\n                Role of DW_apb_i2c:  Master-Transmitter",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ABRT_GCALL_READ_VOID": {
    +                            "description": "GCALL is followed by read from bus-scenario not present",
    +                            "value": 0
    +                          },
    +                          "ABRT_GCALL_READ_GENERATED": {
    +                            "description": "GCALL is followed by read from bus",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ABRT_GCALL_NOACK": {
    +                    "description": "This field indicates that DW_apb_i2c in master mode has sent a General Call and no slave on the bus acknowledged the General Call.\\n\\n\n                Reset value: 0x0\\n\\n\n                Role of DW_apb_i2c:  Master-Transmitter",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ABRT_GCALL_NOACK_VOID": {
    +                            "description": "GCALL not ACKed by any slave-scenario not present",
    +                            "value": 0
    +                          },
    +                          "ABRT_GCALL_NOACK_GENERATED": {
    +                            "description": "GCALL not ACKed by any slave",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ABRT_TXDATA_NOACK": {
    +                    "description": "This field indicates the master-mode only bit. When the master receives an acknowledgement for the address, but when it sends data byte(s) following the address, it did not receive an acknowledge from the remote slave(s).\\n\\n\n                Reset value: 0x0\\n\\n\n                Role of DW_apb_i2c:  Master-Transmitter",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "ABRT_TXDATA_NOACK_VOID": {
    +                            "description": "Transmitted data non-ACKed by addressed slave-scenario not present",
    +                            "value": 0
    +                          },
    +                          "ABRT_TXDATA_NOACK_GENERATED": {
    +                            "description": "Transmitted data not ACKed by addressed slave",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ABRT_10ADDR2_NOACK": {
    +                    "description": "This field indicates that the Master is in 10-bit address mode and that the second address byte of the 10-bit address was not acknowledged by any slave.\\n\\n\n                Reset value: 0x0\\n\\n\n                Role of DW_apb_i2c:  Master-Transmitter or Master-Receiver",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "This abort is not generated",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "Byte 2 of 10Bit Address not ACKed by any slave",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ABRT_10ADDR1_NOACK": {
    +                    "description": "This field indicates that the Master is in 10-bit address mode and the first 10-bit address byte was not acknowledged by any slave.\\n\\n\n                Reset value: 0x0\\n\\n\n                Role of DW_apb_i2c:  Master-Transmitter or Master-Receiver",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "This abort is not generated",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "Byte 1 of 10Bit Address not ACKed by any slave",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "ABRT_7B_ADDR_NOACK": {
    +                    "description": "This field indicates that the Master is in 7-bit addressing mode and the address sent was not acknowledged by any slave.\\n\\n\n                Reset value: 0x0\\n\\n\n                Role of DW_apb_i2c:  Master-Transmitter or Master-Receiver",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "This abort is not generated",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "This abort is generated because of NOACK for 7-bit address",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "IC_SLV_DATA_NACK_ONLY": {
    +              "description": "Generate Slave Data NACK Register\\n\\n\n            The register is used to generate a NACK for the data part of a transfer when DW_apb_i2c is acting as a slave-receiver. This register only exists when the IC_SLV_DATA_NACK_ONLY parameter is set to 1. When this parameter disabled, this register does not exist and writing to the register's address has no effect.\\n\\n\n            A write can occur on this register if both of the following conditions are met: - DW_apb_i2c is disabled (IC_ENABLE[0] = 0) - Slave part is inactive (IC_STATUS[6] = 0) Note: The IC_STATUS[6] is a register read-back location for the internal slv_activity signal; the user should poll this before writing the ic_slv_data_nack_only bit.",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "NACK": {
    +                    "description": "Generate NACK. This NACK generation only occurs when DW_apb_i2c is a slave-receiver. If this register is set to a value of 1, it can only generate a NACK after a data byte is received; hence, the data transfer is aborted and the data received is not pushed to the receive buffer.\\n\\n\n                When the register is set to a value of 0, it generates NACK/ACK, depending on normal criteria. - 1: generate NACK after data byte received - 0: generate NACK/ACK normally Reset value: 0x0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED": {
    +                            "description": "Slave receiver generates NACK normally",
    +                            "value": 0
    +                          },
    +                          "ENABLED": {
    +                            "description": "Slave receiver generates NACK upon data reception only",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "IC_DMA_CR": {
    +              "description": "DMA Control Register\\n\\n\n            The register is used to enable the DMA Controller interface operation. There is a separate bit for transmit and receive. This can be programmed regardless of the state of IC_ENABLE.",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "TDMAE": {
    +                    "description": "Transmit DMA Enable. This bit enables/disables the transmit FIFO DMA channel. Reset value: 0x0",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED": {
    +                            "description": "transmit FIFO DMA channel disabled",
    +                            "value": 0
    +                          },
    +                          "ENABLED": {
    +                            "description": "Transmit FIFO DMA channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "RDMAE": {
    +                    "description": "Receive DMA Enable. This bit enables/disables the receive FIFO DMA channel. Reset value: 0x0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED": {
    +                            "description": "Receive FIFO DMA channel disabled",
    +                            "value": 0
    +                          },
    +                          "ENABLED": {
    +                            "description": "Receive FIFO DMA channel enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "IC_DMA_TDLR": {
    +              "description": "DMA Transmit Data Level Register",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "DMATDL": {
    +                    "description": "Transmit Data Level. This bit field controls the level at which a DMA request is made by the transmit logic. It is equal to the watermark level; that is, the dma_tx_req signal is generated when the number of valid data entries in the transmit FIFO is equal to or below this field value, and TDMAE = 1.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "IC_DMA_RDLR": {
    +              "description": "I2C Receive Data Level Register",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "DMARDL": {
    +                    "description": "Receive Data Level. This bit field controls the level at which a DMA request is made by the receive logic. The watermark level = DMARDL+1; that is, dma_rx_req is generated when the number of valid data entries in the receive FIFO is equal to or more than this field value + 1, and RDMAE =1. For instance, when DMARDL is 0, then dma_rx_req is asserted when 1 or more data entries are present in the receive FIFO.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "IC_SDA_SETUP": {
    +              "description": "I2C SDA Setup Register\\n\\n\n            This register controls the amount of time delay (in terms of number of ic_clk clock periods) introduced in the rising edge of SCL - relative to SDA changing - when DW_apb_i2c services a read request in a slave-transmitter operation. The relevant I2C requirement is tSU:DAT (note 4) as detailed in the I2C Bus Specification. This register must be programmed with a value equal to or greater than 2.\\n\\n\n            Writes to this register succeed only when IC_ENABLE[0] = 0.\\n\\n\n            Note: The length of setup time is calculated using [(IC_SDA_SETUP - 1) * (ic_clk_period)], so if the user requires 10 ic_clk periods of setup time, they should program a value of 11. The IC_SDA_SETUP register is only used by the DW_apb_i2c when operating as a slave transmitter.",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 100,
    +              "children": {
    +                "fields": {
    +                  "SDA_SETUP": {
    +                    "description": "SDA Setup. It is recommended that if the required delay is 1000ns, then for an ic_clk frequency of 10 MHz, IC_SDA_SETUP should be programmed to a value of 11. IC_SDA_SETUP must be programmed with a minimum value of 2.",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IC_ACK_GENERAL_CALL": {
    +              "description": "I2C ACK General Call Register\\n\\n\n            The register controls whether DW_apb_i2c responds with a ACK or NACK when it receives an I2C General Call address.\\n\\n\n            This register is applicable only when the DW_apb_i2c is in slave mode.",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 1,
    +              "children": {
    +                "fields": {
    +                  "ACK_GEN_CALL": {
    +                    "description": "ACK General Call. When set to 1, DW_apb_i2c responds with a ACK (by asserting ic_data_oe) when it receives a General Call. Otherwise, DW_apb_i2c responds with a NACK (by negating ic_data_oe).",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED": {
    +                            "description": "Generate NACK for a General Call",
    +                            "value": 0
    +                          },
    +                          "ENABLED": {
    +                            "description": "Generate ACK for a General Call",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "IC_ENABLE_STATUS": {
    +              "description": "I2C Enable Status Register\\n\\n\n            The register is used to report the DW_apb_i2c hardware status when the IC_ENABLE[0] register is set from 1 to 0; that is, when DW_apb_i2c is disabled.\\n\\n\n            If IC_ENABLE[0] has been set to 1, bits 2:1 are forced to 0, and bit 0 is forced to 1.\\n\\n\n            If IC_ENABLE[0] has been set to 0, bits 2:1 is only be valid as soon as bit 0 is read as '0'.\\n\\n\n            Note: When IC_ENABLE[0] has been set to 0, a delay occurs for bit 0 to be read as 0 because disabling the DW_apb_i2c depends on I2C bus activities.",
    +              "offset": 156,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SLV_RX_DATA_LOST": {
    +                    "description": "Slave Received Data Lost. This bit indicates if a Slave-Receiver operation has been aborted with at least one data byte received from an I2C transfer due to the setting bit 0 of IC_ENABLE from 1 to 0. When read as 1, DW_apb_i2c is deemed to have been actively engaged in an aborted I2C transfer (with matching address) and the data phase of the I2C transfer has been entered, even though a data byte has been responded with a NACK.\\n\\n\n                Note:  If the remote I2C master terminates the transfer with a STOP condition before the DW_apb_i2c has a chance to NACK a transfer, and IC_ENABLE[0] has been set to 0, then this bit is also set to 1.\\n\\n\n                When read as 0, DW_apb_i2c is deemed to have been disabled without being actively involved in the data phase of a Slave-Receiver transfer.\\n\\n\n                Note:  The CPU can safely read this bit when IC_EN (bit 0) is read as 0.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "Slave RX Data is not lost",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "Slave RX Data is lost",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "SLV_DISABLED_WHILE_BUSY": {
    +                    "description": "Slave Disabled While Busy (Transmit, Receive). This bit indicates if a potential or active Slave operation has been aborted due to the setting bit 0 of the IC_ENABLE register from 1 to 0. This bit is set when the CPU writes a 0 to the IC_ENABLE register while:\\n\\n\n                (a) DW_apb_i2c is receiving the address byte of the Slave-Transmitter operation from a remote master;\\n\\n\n                OR,\\n\\n\n                (b) address and data bytes of the Slave-Receiver operation from a remote master.\\n\\n\n                When read as 1, DW_apb_i2c is deemed to have forced a NACK during any part of an I2C transfer, irrespective of whether the I2C address matches the slave address set in DW_apb_i2c (IC_SAR register) OR if the transfer is completed before IC_ENABLE is set to 0 but has not taken effect.\\n\\n\n                Note:  If the remote I2C master terminates the transfer with a STOP condition before the DW_apb_i2c has a chance to NACK a transfer, and IC_ENABLE[0] has been set to 0, then this bit will also be set to 1.\\n\\n\n                When read as 0, DW_apb_i2c is deemed to have been disabled when there is master activity, or when the I2C bus is idle.\\n\\n\n                Note:  The CPU can safely read this bit when IC_EN (bit 0) is read as 0.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "INACTIVE": {
    +                            "description": "Slave is disabled when it is idle",
    +                            "value": 0
    +                          },
    +                          "ACTIVE": {
    +                            "description": "Slave is disabled when it is active",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "IC_EN": {
    +                    "description": "ic_en Status. This bit always reflects the value driven on the output port ic_en. - When read as 1, DW_apb_i2c is deemed to be in an enabled state. - When read as 0, DW_apb_i2c is deemed completely inactive. Note:  The CPU can safely read this bit anytime. When this bit is read as 0, the CPU can safely read SLV_RX_DATA_LOST (bit 2) and SLV_DISABLED_WHILE_BUSY (bit 1).\\n\\n\n                Reset value: 0x0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only",
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLED": {
    +                            "description": "I2C disabled",
    +                            "value": 0
    +                          },
    +                          "ENABLED": {
    +                            "description": "I2C enabled",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "IC_FS_SPKLEN": {
    +              "description": "I2C SS, FS or FM+ spike suppression limit\\n\\n\n            This register is used to store the duration, measured in ic_clk cycles, of the longest spike that is filtered out by the spike suppression logic when the component is operating in SS, FS or FM+ modes. The relevant I2C requirement is tSP (table 4) as detailed in the I2C Bus Specification. This register must be programmed with a minimum value of 1.",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 7,
    +              "children": {
    +                "fields": {
    +                  "IC_FS_SPKLEN": {
    +                    "description": "This register must be set before any I2C bus transaction can take place to ensure stable operation. This register sets the duration, measured in ic_clk cycles, of the longest spike in the SCL or SDA lines that will be filtered out by the spike suppression logic. This register can be written only when the I2C interface is disabled which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect. The minimum valid value is 1; hardware prevents values less than this being written, and if attempted results in 1 being set. or more information, refer to 'Spike Suppression'.",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IC_CLR_RESTART_DET": {
    +              "description": "Clear RESTART_DET Interrupt Register",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CLR_RESTART_DET": {
    +                    "description": "Read this register to clear the RESTART_DET interrupt (bit 12) of IC_RAW_INTR_STAT register.\\n\\n\n                Reset value: 0x0",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IC_COMP_PARAM_1": {
    +              "description": "Component Parameter Register 1\\n\\n\n            Note This register is not implemented and therefore reads as 0. If it was implemented it would be a constant read-only register that contains encoded information about the component's parameter settings. Fields shown below are the settings for those parameters",
    +              "offset": 244,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "TX_BUFFER_DEPTH": {
    +                    "description": "TX Buffer Depth = 16",
    +                    "offset": 16,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "RX_BUFFER_DEPTH": {
    +                    "description": "RX Buffer Depth = 16",
    +                    "offset": 8,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "ADD_ENCODED_PARAMS": {
    +                    "description": "Encoded parameters not visible",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HAS_DMA": {
    +                    "description": "DMA handshaking signals are enabled",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INTR_IO": {
    +                    "description": "COMBINED Interrupt outputs",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HC_COUNT_VALUES": {
    +                    "description": "Programmable count values for each mode.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MAX_SPEED_MODE": {
    +                    "description": "MAX SPEED MODE = FAST MODE",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "APB_DATA_WIDTH": {
    +                    "description": "APB data bus width is 32 bits",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IC_COMP_VERSION": {
    +              "description": "I2C Component Version Register",
    +              "offset": 248,
    +              "size": 32,
    +              "reset_value": 842019114,
    +              "children": {
    +                "fields": {
    +                  "IC_COMP_VERSION": {
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IC_COMP_TYPE": {
    +              "description": "I2C Component Type Register",
    +              "offset": 252,
    +              "size": 32,
    +              "reset_value": 1146552640,
    +              "children": {
    +                "fields": {
    +                  "IC_COMP_TYPE": {
    +                    "description": "Designware Component Type number = 0x44_57_01_40. This assigned unique hex value is constant and is derived from the two ASCII letters 'DW' followed by a 16-bit unsigned number.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "PIO0": {
    +        "description": "Programmable IO block",
    +        "children": {
    +          "registers": {
    +            "CTRL": {
    +              "description": "PIO control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CLKDIV_RESTART": {
    +                    "description": "Restart a state machine's clock divider from an initial phase of 0. Clock dividers are free-running, so once started, their output (including fractional jitter) is completely determined by the integer/fractional divisor configured in SMx_CLKDIV. This means that, if multiple clock dividers with the same divisor are restarted simultaneously, by writing multiple 1 bits to this field, the execution clocks of those state machines will run in precise lockstep.\\n\\n\n                Note that setting/clearing SM_ENABLE does not stop the clock divider from running, so once multiple state machines' clocks are synchronised, it is safe to disable/reenable a state machine, whilst keeping the clock dividers in sync.\\n\\n\n                Note also that CLKDIV_RESTART can be written to whilst the state machine is running, and this is useful to resynchronise clock dividers after the divisors (SMx_CLKDIV) have been changed on-the-fly.",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "SM_RESTART": {
    +                    "description": "Write 1 to instantly clear internal SM state which may be otherwise difficult to access and will affect future execution.\\n\\n\n                Specifically, the following are cleared: input and output shift counters; the contents of the input shift register; the delay counter; the waiting-on-IRQ state; any stalled instruction written to SMx_INSTR or run by OUT/MOV EXEC; any pin write left asserted due to OUT_STICKY.",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "SM_ENABLE": {
    +                    "description": "Enable/disable each of the four state machines by writing 1/0 to each of these four bits. When disabled, a state machine will cease executing instructions, except those written directly to SMx_INSTR by the system. Multiple bits can be set/cleared at once to run/halt multiple state machines simultaneously.",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "FSTAT": {
    +              "description": "FIFO status register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 251662080,
    +              "children": {
    +                "fields": {
    +                  "TXEMPTY": {
    +                    "description": "State machine TX FIFO is empty",
    +                    "offset": 24,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "TXFULL": {
    +                    "description": "State machine TX FIFO is full",
    +                    "offset": 16,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "RXEMPTY": {
    +                    "description": "State machine RX FIFO is empty",
    +                    "offset": 8,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "RXFULL": {
    +                    "description": "State machine RX FIFO is full",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "FDEBUG": {
    +              "description": "FIFO debug register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "TXSTALL": {
    +                    "description": "State machine has stalled on empty TX FIFO during a blocking PULL, or an OUT with autopull enabled. Write 1 to clear.",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "TXOVER": {
    +                    "description": "TX FIFO overflow (i.e. write-on-full by the system) has occurred. Write 1 to clear. Note that write-on-full does not alter the state or contents of the FIFO in any way, but the data that the system attempted to write is dropped, so if this flag is set, your software has quite likely dropped some data on the floor.",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "RXUNDER": {
    +                    "description": "RX FIFO underflow (i.e. read-on-empty by the system) has occurred. Write 1 to clear. Note that read-on-empty does not perturb the state of the FIFO in any way, but the data returned by reading from an empty FIFO is undefined, so this flag generally only becomes set due to some kind of software error.",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "RXSTALL": {
    +                    "description": "State machine has stalled on full RX FIFO during a blocking PUSH, or an IN with autopush enabled. This flag is also set when a nonblocking PUSH to a full FIFO took place, in which case the state machine has dropped data. Write 1 to clear.",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "FLEVEL": {
    +              "description": "FIFO levels",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "RX3": {
    +                    "offset": 28,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "TX3": {
    +                    "offset": 24,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "RX2": {
    +                    "offset": 20,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "TX2": {
    +                    "offset": 16,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "RX1": {
    +                    "offset": 12,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "TX1": {
    +                    "offset": 8,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "RX0": {
    +                    "offset": 4,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "TX0": {
    +                    "offset": 0,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "TXF0": {
    +              "description": "Direct write access to the TX FIFO for this state machine. Each write pushes one word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO.",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "write-only"
    +            },
    +            "TXF1": {
    +              "description": "Direct write access to the TX FIFO for this state machine. Each write pushes one word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "write-only"
    +            },
    +            "TXF2": {
    +              "description": "Direct write access to the TX FIFO for this state machine. Each write pushes one word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO.",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "write-only"
    +            },
    +            "TXF3": {
    +              "description": "Direct write access to the TX FIFO for this state machine. Each write pushes one word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "write-only"
    +            },
    +            "RXF0": {
    +              "description": "Direct read access to the RX FIFO for this state machine. Each read pops one word from the FIFO. Attempting to read from an empty FIFO has no effect on the FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The data returned to the system on a read from an empty FIFO is undefined.",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "RXF1": {
    +              "description": "Direct read access to the RX FIFO for this state machine. Each read pops one word from the FIFO. Attempting to read from an empty FIFO has no effect on the FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The data returned to the system on a read from an empty FIFO is undefined.",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "RXF2": {
    +              "description": "Direct read access to the RX FIFO for this state machine. Each read pops one word from the FIFO. Attempting to read from an empty FIFO has no effect on the FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The data returned to the system on a read from an empty FIFO is undefined.",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "RXF3": {
    +              "description": "Direct read access to the RX FIFO for this state machine. Each read pops one word from the FIFO. Attempting to read from an empty FIFO has no effect on the FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The data returned to the system on a read from an empty FIFO is undefined.",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "IRQ": {
    +              "description": "State machine IRQ flags register. Write 1 to clear. There are 8 state machine IRQ flags, which can be set, cleared, and waited on by the state machines. There's no fixed association between flags and state machines -- any state machine can use any flag.\\n\\n\n            Any of the 8 flags can be used for timing synchronisation between state machines, using IRQ and WAIT instructions. The lower four of these flags are also routed out to system-level interrupt requests, alongside FIFO status interrupts -- see e.g. IRQ0_INTE.",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQ": {
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IRQ_FORCE": {
    +              "description": "Writing a 1 to each of these bits will forcibly assert the corresponding IRQ. Note this is different to the INTF register: writing here affects PIO internal state. INTF just asserts the processor-facing IRQ signal for testing ISRs, and is not visible to the state machines.",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IRQ_FORCE": {
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INPUT_SYNC_BYPASS": {
    +              "description": "There is a 2-flipflop synchronizer on each GPIO input, which protects PIO logic from metastabilities. This increases input delay, and for fast synchronous IO (e.g. SPI) these synchronizers may need to be bypassed. Each bit in this register corresponds to one GPIO.\\n\n            0 -> input is synchronized (default)\\n\n            1 -> synchronizer is bypassed\\n\n            If in doubt, leave this register as all zeroes.",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "DBG_PADOUT": {
    +              "description": "Read to sample the pad output values PIO is currently driving to the GPIOs. On RP2040 there are 30 GPIOs, so the two most significant bits are hardwired to 0.",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "DBG_PADOE": {
    +              "description": "Read to sample the pad output enables (direction) PIO is currently driving to the GPIOs. On RP2040 there are 30 GPIOs, so the two most significant bits are hardwired to 0.",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "DBG_CFGINFO": {
    +              "description": "The PIO hardware has some free parameters that may vary between chip products.\\n\n            These should be provided in the chip datasheet, but are also exposed here.",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "IMEM_SIZE": {
    +                    "description": "The size of the instruction memory, measured in units of one instruction",
    +                    "offset": 16,
    +                    "size": 6,
    +                    "access": "read-only"
    +                  },
    +                  "SM_COUNT": {
    +                    "description": "The number of state machines this PIO instance is equipped with.",
    +                    "offset": 8,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "FIFO_DEPTH": {
    +                    "description": "The depth of the state machine TX/RX FIFOs, measured in words.\\n\n                Joining fifos via SHIFTCTRL_FJOIN gives one FIFO with double\\n\n                this depth.",
    +                    "offset": 0,
    +                    "size": 6,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM0": {
    +              "description": "Write-only access to instruction memory location 0",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM0": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM1": {
    +              "description": "Write-only access to instruction memory location 1",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM1": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM2": {
    +              "description": "Write-only access to instruction memory location 2",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM2": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM3": {
    +              "description": "Write-only access to instruction memory location 3",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM3": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM4": {
    +              "description": "Write-only access to instruction memory location 4",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM4": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM5": {
    +              "description": "Write-only access to instruction memory location 5",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM5": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM6": {
    +              "description": "Write-only access to instruction memory location 6",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM6": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM7": {
    +              "description": "Write-only access to instruction memory location 7",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM7": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM8": {
    +              "description": "Write-only access to instruction memory location 8",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM8": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM9": {
    +              "description": "Write-only access to instruction memory location 9",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM9": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM10": {
    +              "description": "Write-only access to instruction memory location 10",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM10": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM11": {
    +              "description": "Write-only access to instruction memory location 11",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM11": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM12": {
    +              "description": "Write-only access to instruction memory location 12",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM12": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM13": {
    +              "description": "Write-only access to instruction memory location 13",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM13": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM14": {
    +              "description": "Write-only access to instruction memory location 14",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM14": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM15": {
    +              "description": "Write-only access to instruction memory location 15",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM15": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM16": {
    +              "description": "Write-only access to instruction memory location 16",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM16": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM17": {
    +              "description": "Write-only access to instruction memory location 17",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM17": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM18": {
    +              "description": "Write-only access to instruction memory location 18",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM18": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM19": {
    +              "description": "Write-only access to instruction memory location 19",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM19": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM20": {
    +              "description": "Write-only access to instruction memory location 20",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM20": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM21": {
    +              "description": "Write-only access to instruction memory location 21",
    +              "offset": 156,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM21": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM22": {
    +              "description": "Write-only access to instruction memory location 22",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM22": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM23": {
    +              "description": "Write-only access to instruction memory location 23",
    +              "offset": 164,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM23": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM24": {
    +              "description": "Write-only access to instruction memory location 24",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM24": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM25": {
    +              "description": "Write-only access to instruction memory location 25",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM25": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM26": {
    +              "description": "Write-only access to instruction memory location 26",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM26": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM27": {
    +              "description": "Write-only access to instruction memory location 27",
    +              "offset": 180,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM27": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM28": {
    +              "description": "Write-only access to instruction memory location 28",
    +              "offset": 184,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM28": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM29": {
    +              "description": "Write-only access to instruction memory location 29",
    +              "offset": 188,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM29": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM30": {
    +              "description": "Write-only access to instruction memory location 30",
    +              "offset": 192,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM30": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INSTR_MEM31": {
    +              "description": "Write-only access to instruction memory location 31",
    +              "offset": 196,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INSTR_MEM31": {
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SM0_CLKDIV": {
    +              "description": "Clock divisor register for state machine 0\\n\n            Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256)",
    +              "offset": 200,
    +              "size": 32,
    +              "reset_value": 65536,
    +              "children": {
    +                "fields": {
    +                  "INT": {
    +                    "description": "Effective frequency is sysclk/(int + frac/256).\\n\n                Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0.",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "FRAC": {
    +                    "description": "Fractional part of clock divisor",
    +                    "offset": 8,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SM0_EXECCTRL": {
    +              "description": "Execution/behavioural settings for state machine 0",
    +              "offset": 204,
    +              "size": 32,
    +              "reset_value": 126976,
    +              "children": {
    +                "fields": {
    +                  "EXEC_STALLED": {
    +                    "description": "If 1, an instruction written to SMx_INSTR is stalled, and latched by the state machine. Will clear to 0 once this instruction completes.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SIDE_EN": {
    +                    "description": "If 1, the MSB of the Delay/Side-set instruction field is used as side-set enable, rather than a side-set data bit. This allows instructions to perform side-set optionally, rather than on every instruction, but the maximum possible side-set width is reduced from 5 to 4. Note that the value of PINCTRL_SIDESET_COUNT is inclusive of this enable bit.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SIDE_PINDIR": {
    +                    "description": "If 1, side-set data is asserted to pin directions, instead of pin values",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "JMP_PIN": {
    +                    "description": "The GPIO number to use as condition for JMP PIN. Unaffected by input mapping.",
    +                    "offset": 24,
    +                    "size": 5
    +                  },
    +                  "OUT_EN_SEL": {
    +                    "description": "Which data bit to use for inline OUT enable",
    +                    "offset": 19,
    +                    "size": 5
    +                  },
    +                  "INLINE_OUT_EN": {
    +                    "description": "If 1, use a bit of OUT data as an auxiliary write enable\\n\n                When used in conjunction with OUT_STICKY, writes with an enable of 0 will\\n\n                deassert the latest pin write. This can create useful masking/override behaviour\\n\n                due to the priority ordering of state machine pin writes (SM0 < SM1 < ...)",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "OUT_STICKY": {
    +                    "description": "Continuously assert the most recent OUT/SET to the pins",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "WRAP_TOP": {
    +                    "description": "After reaching this address, execution is wrapped to wrap_bottom.\\n\n                If the instruction is a jump, and the jump condition is true, the jump takes priority.",
    +                    "offset": 12,
    +                    "size": 5
    +                  },
    +                  "WRAP_BOTTOM": {
    +                    "description": "After reaching wrap_top, execution is wrapped to this address.",
    +                    "offset": 7,
    +                    "size": 5
    +                  },
    +                  "STATUS_SEL": {
    +                    "description": "Comparison used for the MOV x, STATUS instruction.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TXLEVEL": {
    +                            "description": "All-ones if TX FIFO level < N, otherwise all-zeroes",
    +                            "value": 0
    +                          },
    +                          "RXLEVEL": {
    +                            "description": "All-ones if RX FIFO level < N, otherwise all-zeroes",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STATUS_N": {
    +                    "description": "Comparison level for the MOV x, STATUS instruction",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "SM0_SHIFTCTRL": {
    +              "description": "Control behaviour of the input/output shift registers for state machine 0",
    +              "offset": 208,
    +              "size": 32,
    +              "reset_value": 786432,
    +              "children": {
    +                "fields": {
    +                  "FJOIN_RX": {
    +                    "description": "When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.\\n\n                TX FIFO is disabled as a result (always reads as both full and empty).\\n\n                FIFOs are flushed when this bit is changed.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "FJOIN_TX": {
    +                    "description": "When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.\\n\n                RX FIFO is disabled as a result (always reads as both full and empty).\\n\n                FIFOs are flushed when this bit is changed.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PULL_THRESH": {
    +                    "description": "Number of bits shifted out of OSR before autopull, or conditional pull (PULL IFEMPTY), will take place.\\n\n                Write 0 for value of 32.",
    +                    "offset": 25,
    +                    "size": 5
    +                  },
    +                  "PUSH_THRESH": {
    +                    "description": "Number of bits shifted into ISR before autopush, or conditional push (PUSH IFFULL), will take place.\\n\n                Write 0 for value of 32.",
    +                    "offset": 20,
    +                    "size": 5
    +                  },
    +                  "OUT_SHIFTDIR": {
    +                    "description": "1 = shift out of output shift register to right. 0 = to left.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "IN_SHIFTDIR": {
    +                    "description": "1 = shift input shift register to right (data enters from left). 0 = to left.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "AUTOPULL": {
    +                    "description": "Pull automatically when the output shift register is emptied, i.e. on or following an OUT instruction which causes the output shift counter to reach or exceed PULL_THRESH.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "AUTOPUSH": {
    +                    "description": "Push automatically when the input shift register is filled, i.e. on an IN instruction which causes the input shift counter to reach or exceed PUSH_THRESH.",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SM0_ADDR": {
    +              "description": "Current instruction address of state machine 0",
    +              "offset": 212,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SM0_ADDR": {
    +                    "offset": 0,
    +                    "size": 5,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SM0_INSTR": {
    +              "description": "Read to see the instruction currently addressed by state machine 0's program counter\\n\n            Write to execute an instruction immediately (including jumps) and then resume execution.",
    +              "offset": 216,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SM0_INSTR": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SM0_PINCTRL": {
    +              "description": "State machine pin control",
    +              "offset": 220,
    +              "size": 32,
    +              "reset_value": 335544320,
    +              "children": {
    +                "fields": {
    +                  "SIDESET_COUNT": {
    +                    "description": "The number of MSBs of the Delay/Side-set instruction field which are used for side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits, no side-set) and maximum of 5 (all side-set, no delay).",
    +                    "offset": 29,
    +                    "size": 3
    +                  },
    +                  "SET_COUNT": {
    +                    "description": "The number of pins asserted by a SET. In the range 0 to 5 inclusive.",
    +                    "offset": 26,
    +                    "size": 3
    +                  },
    +                  "OUT_COUNT": {
    +                    "description": "The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction. In the range 0 to 32 inclusive.",
    +                    "offset": 20,
    +                    "size": 6
    +                  },
    +                  "IN_BASE": {
    +                    "description": "The pin which is mapped to the least-significant bit of a state machine's IN data bus. Higher-numbered pins are mapped to consecutively more-significant data bits, with a modulo of 32 applied to pin number.",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "SIDESET_BASE": {
    +                    "description": "The lowest-numbered pin that will be affected by a side-set operation. The MSBs of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT) are used for side-set data, with the remaining LSBs used for delay. The least-significant bit of the side-set portion is the bit written to this pin, with more-significant bits written to higher-numbered pins.",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "SET_BASE": {
    +                    "description": "The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS instruction. The data written to this pin is the least-significant bit of the SET data.",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "OUT_BASE": {
    +                    "description": "The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV PINS instruction. The data written to this pin will always be the least-significant bit of the OUT or MOV data.",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "SM1_CLKDIV": {
    +              "description": "Clock divisor register for state machine 1\\n\n            Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256)",
    +              "offset": 224,
    +              "size": 32,
    +              "reset_value": 65536,
    +              "children": {
    +                "fields": {
    +                  "INT": {
    +                    "description": "Effective frequency is sysclk/(int + frac/256).\\n\n                Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0.",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "FRAC": {
    +                    "description": "Fractional part of clock divisor",
    +                    "offset": 8,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SM1_EXECCTRL": {
    +              "description": "Execution/behavioural settings for state machine 1",
    +              "offset": 228,
    +              "size": 32,
    +              "reset_value": 126976,
    +              "children": {
    +                "fields": {
    +                  "EXEC_STALLED": {
    +                    "description": "If 1, an instruction written to SMx_INSTR is stalled, and latched by the state machine. Will clear to 0 once this instruction completes.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SIDE_EN": {
    +                    "description": "If 1, the MSB of the Delay/Side-set instruction field is used as side-set enable, rather than a side-set data bit. This allows instructions to perform side-set optionally, rather than on every instruction, but the maximum possible side-set width is reduced from 5 to 4. Note that the value of PINCTRL_SIDESET_COUNT is inclusive of this enable bit.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SIDE_PINDIR": {
    +                    "description": "If 1, side-set data is asserted to pin directions, instead of pin values",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "JMP_PIN": {
    +                    "description": "The GPIO number to use as condition for JMP PIN. Unaffected by input mapping.",
    +                    "offset": 24,
    +                    "size": 5
    +                  },
    +                  "OUT_EN_SEL": {
    +                    "description": "Which data bit to use for inline OUT enable",
    +                    "offset": 19,
    +                    "size": 5
    +                  },
    +                  "INLINE_OUT_EN": {
    +                    "description": "If 1, use a bit of OUT data as an auxiliary write enable\\n\n                When used in conjunction with OUT_STICKY, writes with an enable of 0 will\\n\n                deassert the latest pin write. This can create useful masking/override behaviour\\n\n                due to the priority ordering of state machine pin writes (SM0 < SM1 < ...)",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "OUT_STICKY": {
    +                    "description": "Continuously assert the most recent OUT/SET to the pins",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "WRAP_TOP": {
    +                    "description": "After reaching this address, execution is wrapped to wrap_bottom.\\n\n                If the instruction is a jump, and the jump condition is true, the jump takes priority.",
    +                    "offset": 12,
    +                    "size": 5
    +                  },
    +                  "WRAP_BOTTOM": {
    +                    "description": "After reaching wrap_top, execution is wrapped to this address.",
    +                    "offset": 7,
    +                    "size": 5
    +                  },
    +                  "STATUS_SEL": {
    +                    "description": "Comparison used for the MOV x, STATUS instruction.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TXLEVEL": {
    +                            "description": "All-ones if TX FIFO level < N, otherwise all-zeroes",
    +                            "value": 0
    +                          },
    +                          "RXLEVEL": {
    +                            "description": "All-ones if RX FIFO level < N, otherwise all-zeroes",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STATUS_N": {
    +                    "description": "Comparison level for the MOV x, STATUS instruction",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "SM1_SHIFTCTRL": {
    +              "description": "Control behaviour of the input/output shift registers for state machine 1",
    +              "offset": 232,
    +              "size": 32,
    +              "reset_value": 786432,
    +              "children": {
    +                "fields": {
    +                  "FJOIN_RX": {
    +                    "description": "When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.\\n\n                TX FIFO is disabled as a result (always reads as both full and empty).\\n\n                FIFOs are flushed when this bit is changed.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "FJOIN_TX": {
    +                    "description": "When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.\\n\n                RX FIFO is disabled as a result (always reads as both full and empty).\\n\n                FIFOs are flushed when this bit is changed.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PULL_THRESH": {
    +                    "description": "Number of bits shifted out of OSR before autopull, or conditional pull (PULL IFEMPTY), will take place.\\n\n                Write 0 for value of 32.",
    +                    "offset": 25,
    +                    "size": 5
    +                  },
    +                  "PUSH_THRESH": {
    +                    "description": "Number of bits shifted into ISR before autopush, or conditional push (PUSH IFFULL), will take place.\\n\n                Write 0 for value of 32.",
    +                    "offset": 20,
    +                    "size": 5
    +                  },
    +                  "OUT_SHIFTDIR": {
    +                    "description": "1 = shift out of output shift register to right. 0 = to left.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "IN_SHIFTDIR": {
    +                    "description": "1 = shift input shift register to right (data enters from left). 0 = to left.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "AUTOPULL": {
    +                    "description": "Pull automatically when the output shift register is emptied, i.e. on or following an OUT instruction which causes the output shift counter to reach or exceed PULL_THRESH.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "AUTOPUSH": {
    +                    "description": "Push automatically when the input shift register is filled, i.e. on an IN instruction which causes the input shift counter to reach or exceed PUSH_THRESH.",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SM1_ADDR": {
    +              "description": "Current instruction address of state machine 1",
    +              "offset": 236,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SM1_ADDR": {
    +                    "offset": 0,
    +                    "size": 5,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SM1_INSTR": {
    +              "description": "Read to see the instruction currently addressed by state machine 1's program counter\\n\n            Write to execute an instruction immediately (including jumps) and then resume execution.",
    +              "offset": 240,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SM1_INSTR": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SM1_PINCTRL": {
    +              "description": "State machine pin control",
    +              "offset": 244,
    +              "size": 32,
    +              "reset_value": 335544320,
    +              "children": {
    +                "fields": {
    +                  "SIDESET_COUNT": {
    +                    "description": "The number of MSBs of the Delay/Side-set instruction field which are used for side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits, no side-set) and maximum of 5 (all side-set, no delay).",
    +                    "offset": 29,
    +                    "size": 3
    +                  },
    +                  "SET_COUNT": {
    +                    "description": "The number of pins asserted by a SET. In the range 0 to 5 inclusive.",
    +                    "offset": 26,
    +                    "size": 3
    +                  },
    +                  "OUT_COUNT": {
    +                    "description": "The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction. In the range 0 to 32 inclusive.",
    +                    "offset": 20,
    +                    "size": 6
    +                  },
    +                  "IN_BASE": {
    +                    "description": "The pin which is mapped to the least-significant bit of a state machine's IN data bus. Higher-numbered pins are mapped to consecutively more-significant data bits, with a modulo of 32 applied to pin number.",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "SIDESET_BASE": {
    +                    "description": "The lowest-numbered pin that will be affected by a side-set operation. The MSBs of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT) are used for side-set data, with the remaining LSBs used for delay. The least-significant bit of the side-set portion is the bit written to this pin, with more-significant bits written to higher-numbered pins.",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "SET_BASE": {
    +                    "description": "The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS instruction. The data written to this pin is the least-significant bit of the SET data.",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "OUT_BASE": {
    +                    "description": "The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV PINS instruction. The data written to this pin will always be the least-significant bit of the OUT or MOV data.",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "SM2_CLKDIV": {
    +              "description": "Clock divisor register for state machine 2\\n\n            Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256)",
    +              "offset": 248,
    +              "size": 32,
    +              "reset_value": 65536,
    +              "children": {
    +                "fields": {
    +                  "INT": {
    +                    "description": "Effective frequency is sysclk/(int + frac/256).\\n\n                Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0.",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "FRAC": {
    +                    "description": "Fractional part of clock divisor",
    +                    "offset": 8,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SM2_EXECCTRL": {
    +              "description": "Execution/behavioural settings for state machine 2",
    +              "offset": 252,
    +              "size": 32,
    +              "reset_value": 126976,
    +              "children": {
    +                "fields": {
    +                  "EXEC_STALLED": {
    +                    "description": "If 1, an instruction written to SMx_INSTR is stalled, and latched by the state machine. Will clear to 0 once this instruction completes.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SIDE_EN": {
    +                    "description": "If 1, the MSB of the Delay/Side-set instruction field is used as side-set enable, rather than a side-set data bit. This allows instructions to perform side-set optionally, rather than on every instruction, but the maximum possible side-set width is reduced from 5 to 4. Note that the value of PINCTRL_SIDESET_COUNT is inclusive of this enable bit.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SIDE_PINDIR": {
    +                    "description": "If 1, side-set data is asserted to pin directions, instead of pin values",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "JMP_PIN": {
    +                    "description": "The GPIO number to use as condition for JMP PIN. Unaffected by input mapping.",
    +                    "offset": 24,
    +                    "size": 5
    +                  },
    +                  "OUT_EN_SEL": {
    +                    "description": "Which data bit to use for inline OUT enable",
    +                    "offset": 19,
    +                    "size": 5
    +                  },
    +                  "INLINE_OUT_EN": {
    +                    "description": "If 1, use a bit of OUT data as an auxiliary write enable\\n\n                When used in conjunction with OUT_STICKY, writes with an enable of 0 will\\n\n                deassert the latest pin write. This can create useful masking/override behaviour\\n\n                due to the priority ordering of state machine pin writes (SM0 < SM1 < ...)",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "OUT_STICKY": {
    +                    "description": "Continuously assert the most recent OUT/SET to the pins",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "WRAP_TOP": {
    +                    "description": "After reaching this address, execution is wrapped to wrap_bottom.\\n\n                If the instruction is a jump, and the jump condition is true, the jump takes priority.",
    +                    "offset": 12,
    +                    "size": 5
    +                  },
    +                  "WRAP_BOTTOM": {
    +                    "description": "After reaching wrap_top, execution is wrapped to this address.",
    +                    "offset": 7,
    +                    "size": 5
    +                  },
    +                  "STATUS_SEL": {
    +                    "description": "Comparison used for the MOV x, STATUS instruction.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TXLEVEL": {
    +                            "description": "All-ones if TX FIFO level < N, otherwise all-zeroes",
    +                            "value": 0
    +                          },
    +                          "RXLEVEL": {
    +                            "description": "All-ones if RX FIFO level < N, otherwise all-zeroes",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STATUS_N": {
    +                    "description": "Comparison level for the MOV x, STATUS instruction",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "SM2_SHIFTCTRL": {
    +              "description": "Control behaviour of the input/output shift registers for state machine 2",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 786432,
    +              "children": {
    +                "fields": {
    +                  "FJOIN_RX": {
    +                    "description": "When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.\\n\n                TX FIFO is disabled as a result (always reads as both full and empty).\\n\n                FIFOs are flushed when this bit is changed.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "FJOIN_TX": {
    +                    "description": "When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.\\n\n                RX FIFO is disabled as a result (always reads as both full and empty).\\n\n                FIFOs are flushed when this bit is changed.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PULL_THRESH": {
    +                    "description": "Number of bits shifted out of OSR before autopull, or conditional pull (PULL IFEMPTY), will take place.\\n\n                Write 0 for value of 32.",
    +                    "offset": 25,
    +                    "size": 5
    +                  },
    +                  "PUSH_THRESH": {
    +                    "description": "Number of bits shifted into ISR before autopush, or conditional push (PUSH IFFULL), will take place.\\n\n                Write 0 for value of 32.",
    +                    "offset": 20,
    +                    "size": 5
    +                  },
    +                  "OUT_SHIFTDIR": {
    +                    "description": "1 = shift out of output shift register to right. 0 = to left.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "IN_SHIFTDIR": {
    +                    "description": "1 = shift input shift register to right (data enters from left). 0 = to left.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "AUTOPULL": {
    +                    "description": "Pull automatically when the output shift register is emptied, i.e. on or following an OUT instruction which causes the output shift counter to reach or exceed PULL_THRESH.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "AUTOPUSH": {
    +                    "description": "Push automatically when the input shift register is filled, i.e. on an IN instruction which causes the input shift counter to reach or exceed PUSH_THRESH.",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SM2_ADDR": {
    +              "description": "Current instruction address of state machine 2",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SM2_ADDR": {
    +                    "offset": 0,
    +                    "size": 5,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SM2_INSTR": {
    +              "description": "Read to see the instruction currently addressed by state machine 2's program counter\\n\n            Write to execute an instruction immediately (including jumps) and then resume execution.",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SM2_INSTR": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SM2_PINCTRL": {
    +              "description": "State machine pin control",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 335544320,
    +              "children": {
    +                "fields": {
    +                  "SIDESET_COUNT": {
    +                    "description": "The number of MSBs of the Delay/Side-set instruction field which are used for side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits, no side-set) and maximum of 5 (all side-set, no delay).",
    +                    "offset": 29,
    +                    "size": 3
    +                  },
    +                  "SET_COUNT": {
    +                    "description": "The number of pins asserted by a SET. In the range 0 to 5 inclusive.",
    +                    "offset": 26,
    +                    "size": 3
    +                  },
    +                  "OUT_COUNT": {
    +                    "description": "The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction. In the range 0 to 32 inclusive.",
    +                    "offset": 20,
    +                    "size": 6
    +                  },
    +                  "IN_BASE": {
    +                    "description": "The pin which is mapped to the least-significant bit of a state machine's IN data bus. Higher-numbered pins are mapped to consecutively more-significant data bits, with a modulo of 32 applied to pin number.",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "SIDESET_BASE": {
    +                    "description": "The lowest-numbered pin that will be affected by a side-set operation. The MSBs of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT) are used for side-set data, with the remaining LSBs used for delay. The least-significant bit of the side-set portion is the bit written to this pin, with more-significant bits written to higher-numbered pins.",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "SET_BASE": {
    +                    "description": "The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS instruction. The data written to this pin is the least-significant bit of the SET data.",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "OUT_BASE": {
    +                    "description": "The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV PINS instruction. The data written to this pin will always be the least-significant bit of the OUT or MOV data.",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "SM3_CLKDIV": {
    +              "description": "Clock divisor register for state machine 3\\n\n            Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256)",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 65536,
    +              "children": {
    +                "fields": {
    +                  "INT": {
    +                    "description": "Effective frequency is sysclk/(int + frac/256).\\n\n                Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0.",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "FRAC": {
    +                    "description": "Fractional part of clock divisor",
    +                    "offset": 8,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SM3_EXECCTRL": {
    +              "description": "Execution/behavioural settings for state machine 3",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 126976,
    +              "children": {
    +                "fields": {
    +                  "EXEC_STALLED": {
    +                    "description": "If 1, an instruction written to SMx_INSTR is stalled, and latched by the state machine. Will clear to 0 once this instruction completes.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SIDE_EN": {
    +                    "description": "If 1, the MSB of the Delay/Side-set instruction field is used as side-set enable, rather than a side-set data bit. This allows instructions to perform side-set optionally, rather than on every instruction, but the maximum possible side-set width is reduced from 5 to 4. Note that the value of PINCTRL_SIDESET_COUNT is inclusive of this enable bit.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SIDE_PINDIR": {
    +                    "description": "If 1, side-set data is asserted to pin directions, instead of pin values",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "JMP_PIN": {
    +                    "description": "The GPIO number to use as condition for JMP PIN. Unaffected by input mapping.",
    +                    "offset": 24,
    +                    "size": 5
    +                  },
    +                  "OUT_EN_SEL": {
    +                    "description": "Which data bit to use for inline OUT enable",
    +                    "offset": 19,
    +                    "size": 5
    +                  },
    +                  "INLINE_OUT_EN": {
    +                    "description": "If 1, use a bit of OUT data as an auxiliary write enable\\n\n                When used in conjunction with OUT_STICKY, writes with an enable of 0 will\\n\n                deassert the latest pin write. This can create useful masking/override behaviour\\n\n                due to the priority ordering of state machine pin writes (SM0 < SM1 < ...)",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "OUT_STICKY": {
    +                    "description": "Continuously assert the most recent OUT/SET to the pins",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "WRAP_TOP": {
    +                    "description": "After reaching this address, execution is wrapped to wrap_bottom.\\n\n                If the instruction is a jump, and the jump condition is true, the jump takes priority.",
    +                    "offset": 12,
    +                    "size": 5
    +                  },
    +                  "WRAP_BOTTOM": {
    +                    "description": "After reaching wrap_top, execution is wrapped to this address.",
    +                    "offset": 7,
    +                    "size": 5
    +                  },
    +                  "STATUS_SEL": {
    +                    "description": "Comparison used for the MOV x, STATUS instruction.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "enum": {
    +                      "size": 1,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TXLEVEL": {
    +                            "description": "All-ones if TX FIFO level < N, otherwise all-zeroes",
    +                            "value": 0
    +                          },
    +                          "RXLEVEL": {
    +                            "description": "All-ones if RX FIFO level < N, otherwise all-zeroes",
    +                            "value": 1
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "STATUS_N": {
    +                    "description": "Comparison level for the MOV x, STATUS instruction",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "SM3_SHIFTCTRL": {
    +              "description": "Control behaviour of the input/output shift registers for state machine 3",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 786432,
    +              "children": {
    +                "fields": {
    +                  "FJOIN_RX": {
    +                    "description": "When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.\\n\n                TX FIFO is disabled as a result (always reads as both full and empty).\\n\n                FIFOs are flushed when this bit is changed.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "FJOIN_TX": {
    +                    "description": "When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.\\n\n                RX FIFO is disabled as a result (always reads as both full and empty).\\n\n                FIFOs are flushed when this bit is changed.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PULL_THRESH": {
    +                    "description": "Number of bits shifted out of OSR before autopull, or conditional pull (PULL IFEMPTY), will take place.\\n\n                Write 0 for value of 32.",
    +                    "offset": 25,
    +                    "size": 5
    +                  },
    +                  "PUSH_THRESH": {
    +                    "description": "Number of bits shifted into ISR before autopush, or conditional push (PUSH IFFULL), will take place.\\n\n                Write 0 for value of 32.",
    +                    "offset": 20,
    +                    "size": 5
    +                  },
    +                  "OUT_SHIFTDIR": {
    +                    "description": "1 = shift out of output shift register to right. 0 = to left.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "IN_SHIFTDIR": {
    +                    "description": "1 = shift input shift register to right (data enters from left). 0 = to left.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "AUTOPULL": {
    +                    "description": "Pull automatically when the output shift register is emptied, i.e. on or following an OUT instruction which causes the output shift counter to reach or exceed PULL_THRESH.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "AUTOPUSH": {
    +                    "description": "Push automatically when the input shift register is filled, i.e. on an IN instruction which causes the input shift counter to reach or exceed PUSH_THRESH.",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SM3_ADDR": {
    +              "description": "Current instruction address of state machine 3",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SM3_ADDR": {
    +                    "offset": 0,
    +                    "size": 5,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SM3_INSTR": {
    +              "description": "Read to see the instruction currently addressed by state machine 3's program counter\\n\n            Write to execute an instruction immediately (including jumps) and then resume execution.",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SM3_INSTR": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SM3_PINCTRL": {
    +              "description": "State machine pin control",
    +              "offset": 292,
    +              "size": 32,
    +              "reset_value": 335544320,
    +              "children": {
    +                "fields": {
    +                  "SIDESET_COUNT": {
    +                    "description": "The number of MSBs of the Delay/Side-set instruction field which are used for side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits, no side-set) and maximum of 5 (all side-set, no delay).",
    +                    "offset": 29,
    +                    "size": 3
    +                  },
    +                  "SET_COUNT": {
    +                    "description": "The number of pins asserted by a SET. In the range 0 to 5 inclusive.",
    +                    "offset": 26,
    +                    "size": 3
    +                  },
    +                  "OUT_COUNT": {
    +                    "description": "The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction. In the range 0 to 32 inclusive.",
    +                    "offset": 20,
    +                    "size": 6
    +                  },
    +                  "IN_BASE": {
    +                    "description": "The pin which is mapped to the least-significant bit of a state machine's IN data bus. Higher-numbered pins are mapped to consecutively more-significant data bits, with a modulo of 32 applied to pin number.",
    +                    "offset": 15,
    +                    "size": 5
    +                  },
    +                  "SIDESET_BASE": {
    +                    "description": "The lowest-numbered pin that will be affected by a side-set operation. The MSBs of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT) are used for side-set data, with the remaining LSBs used for delay. The least-significant bit of the side-set portion is the bit written to this pin, with more-significant bits written to higher-numbered pins.",
    +                    "offset": 10,
    +                    "size": 5
    +                  },
    +                  "SET_BASE": {
    +                    "description": "The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS instruction. The data written to this pin is the least-significant bit of the SET data.",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "OUT_BASE": {
    +                    "description": "The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV PINS instruction. The data written to this pin will always be the least-significant bit of the OUT or MOV data.",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "INTR": {
    +              "description": "Raw Interrupts",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SM3": {
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM2": {
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM1": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM0": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM3_TXNFULL": {
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM2_TXNFULL": {
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM1_TXNFULL": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM0_TXNFULL": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM3_RXNEMPTY": {
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM2_RXNEMPTY": {
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM1_RXNEMPTY": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM0_RXNEMPTY": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IRQ0_INTE": {
    +              "description": "Interrupt Enable for irq0",
    +              "offset": 300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SM3": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SM2": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SM1": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SM0": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SM3_TXNFULL": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SM2_TXNFULL": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SM1_TXNFULL": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "SM0_TXNFULL": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SM3_RXNEMPTY": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SM2_RXNEMPTY": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SM1_RXNEMPTY": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SM0_RXNEMPTY": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IRQ0_INTF": {
    +              "description": "Interrupt Force for irq0",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SM3": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SM2": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SM1": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SM0": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SM3_TXNFULL": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SM2_TXNFULL": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SM1_TXNFULL": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "SM0_TXNFULL": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SM3_RXNEMPTY": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SM2_RXNEMPTY": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SM1_RXNEMPTY": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SM0_RXNEMPTY": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IRQ0_INTS": {
    +              "description": "Interrupt status after masking & forcing for irq0",
    +              "offset": 308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SM3": {
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM2": {
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM1": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM0": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM3_TXNFULL": {
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM2_TXNFULL": {
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM1_TXNFULL": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM0_TXNFULL": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM3_RXNEMPTY": {
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM2_RXNEMPTY": {
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM1_RXNEMPTY": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM0_RXNEMPTY": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IRQ1_INTE": {
    +              "description": "Interrupt Enable for irq1",
    +              "offset": 312,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SM3": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SM2": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SM1": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SM0": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SM3_TXNFULL": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SM2_TXNFULL": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SM1_TXNFULL": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "SM0_TXNFULL": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SM3_RXNEMPTY": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SM2_RXNEMPTY": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SM1_RXNEMPTY": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SM0_RXNEMPTY": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IRQ1_INTF": {
    +              "description": "Interrupt Force for irq1",
    +              "offset": 316,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SM3": {
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "SM2": {
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SM1": {
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SM0": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SM3_TXNFULL": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SM2_TXNFULL": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SM1_TXNFULL": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "SM0_TXNFULL": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SM3_RXNEMPTY": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SM2_RXNEMPTY": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SM1_RXNEMPTY": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SM0_RXNEMPTY": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IRQ1_INTS": {
    +              "description": "Interrupt status after masking & forcing for irq1",
    +              "offset": 320,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "SM3": {
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM2": {
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM1": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM0": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM3_TXNFULL": {
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM2_TXNFULL": {
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM1_TXNFULL": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM0_TXNFULL": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM3_RXNEMPTY": {
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM2_RXNEMPTY": {
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM1_RXNEMPTY": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SM0_RXNEMPTY": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "ADC": {
    +        "description": "Control and data interface to SAR ADC",
    +        "children": {
    +          "registers": {
    +            "CS": {
    +              "description": "ADC Control and Status",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "RROBIN": {
    +                    "description": "Round-robin sampling. 1 bit per channel. Set all bits to 0 to disable.\\n\n                Otherwise, the ADC will cycle through each enabled channel in a round-robin fashion.\\n\n                The first channel to be sampled will be the one currently indicated by AINSEL.\\n\n                AINSEL will be updated after each conversion with the newly-selected channel.",
    +                    "offset": 16,
    +                    "size": 5
    +                  },
    +                  "AINSEL": {
    +                    "description": "Select analog mux input. Updated automatically in round-robin mode.",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "ERR_STICKY": {
    +                    "description": "Some past ADC conversion encountered an error. Write 1 to clear.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "ERR": {
    +                    "description": "The most recent ADC conversion encountered an error; result is undefined or noisy.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "READY": {
    +                    "description": "1 if the ADC is ready to start a new conversion. Implies any previous conversion has completed.\\n\n                0 whilst conversion in progress.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "START_MANY": {
    +                    "description": "Continuously perform conversions whilst this bit is 1. A new conversion will start immediately after the previous finishes.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "START_ONCE": {
    +                    "description": "Start a single conversion. Self-clearing. Ignored if start_many is asserted.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TS_EN": {
    +                    "description": "Power on temperature sensor. 1 - enabled. 0 - disabled.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "Power on ADC and enable its clock.\\n\n                1 - enabled. 0 - disabled.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RESULT": {
    +              "description": "Result of most recent ADC conversion",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "RESULT": {
    +                    "offset": 0,
    +                    "size": 12,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "FCS": {
    +              "description": "FIFO control and status",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "THRESH": {
    +                    "description": "DREQ/IRQ asserted when level >= threshold",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "LEVEL": {
    +                    "description": "The number of conversion results currently waiting in the FIFO",
    +                    "offset": 16,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "OVER": {
    +                    "description": "1 if the FIFO has been overflowed. Write 1 to clear.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "UNDER": {
    +                    "description": "1 if the FIFO has been underflowed. Write 1 to clear.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FULL": {
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "EMPTY": {
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DREQ_EN": {
    +                    "description": "If 1: assert DMA requests when FIFO contains data",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ERR": {
    +                    "description": "If 1: conversion error bit appears in the FIFO alongside the result",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SHIFT": {
    +                    "description": "If 1: FIFO results are right-shifted to be one byte in size. Enables DMA to byte buffers.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "If 1: write result to the FIFO after each conversion.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FIFO": {
    +              "description": "Conversion result FIFO",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ERR": {
    +                    "description": "1 if this particular sample experienced a conversion error. Remains in the same location if the sample is shifted.",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "VAL": {
    +                    "offset": 0,
    +                    "size": 12,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DIV": {
    +              "description": "Clock divider. If non-zero, CS_START_MANY will start conversions\\n\n            at regular intervals rather than back-to-back.\\n\n            The divider is reset when either of these fields are written.\\n\n            Total period is 1 + INT + FRAC / 256",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INT": {
    +                    "description": "Integer part of clock divisor.",
    +                    "offset": 8,
    +                    "size": 16
    +                  },
    +                  "FRAC": {
    +                    "description": "Fractional part of clock divisor. First-order delta-sigma.",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "INTR": {
    +              "description": "Raw Interrupts",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FIFO": {
    +                    "description": "Triggered when the sample FIFO reaches a certain level.\\n\n                This level can be programmed via the FCS_THRESH field.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INTE": {
    +              "description": "Interrupt Enable",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FIFO": {
    +                    "description": "Triggered when the sample FIFO reaches a certain level.\\n\n                This level can be programmed via the FCS_THRESH field.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTF": {
    +              "description": "Interrupt Force",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FIFO": {
    +                    "description": "Triggered when the sample FIFO reaches a certain level.\\n\n                This level can be programmed via the FCS_THRESH field.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTS": {
    +              "description": "Interrupt status after masking & forcing",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FIFO": {
    +                    "description": "Triggered when the sample FIFO reaches a certain level.\\n\n                This level can be programmed via the FCS_THRESH field.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "PWM": {
    +        "description": "Simple PWM",
    +        "children": {
    +          "registers": {
    +            "CH0_CSR": {
    +              "description": "Control and status register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "PH_ADV": {
    +                    "description": "Advance the phase of the counter by 1 count, while it is running.\\n\n                Self-clearing. Write a 1, and poll until low. Counter must be running\\n\n                at less than full speed (div_int + div_frac / 16 > 1)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PH_RET": {
    +                    "description": "Retard the phase of the counter by 1 count, while it is running.\\n\n                Self-clearing. Write a 1, and poll until low. Counter must be running.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DIVMODE": {
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "div": {
    +                            "description": "Free-running counting at rate dictated by fractional divider",
    +                            "value": 0
    +                          },
    +                          "level": {
    +                            "description": "Fractional divider operation is gated by the PWM B pin.",
    +                            "value": 1
    +                          },
    +                          "rise": {
    +                            "description": "Counter advances with each rising edge of the PWM B pin.",
    +                            "value": 2
    +                          },
    +                          "fall": {
    +                            "description": "Counter advances with each falling edge of the PWM B pin.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "B_INV": {
    +                    "description": "Invert output B",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "A_INV": {
    +                    "description": "Invert output A",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PH_CORRECT": {
    +                    "description": "1: Enable phase-correct modulation. 0: Trailing-edge",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "Enable the PWM channel.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH0_DIV": {
    +              "description": "INT and FRAC form a fixed-point fractional number.\\n\n            Counting rate is system clock frequency divided by this number.\\n\n            Fractional division uses simple 1st-order sigma-delta.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 16,
    +              "children": {
    +                "fields": {
    +                  "INT": {
    +                    "offset": 4,
    +                    "size": 8
    +                  },
    +                  "FRAC": {
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CH0_CTR": {
    +              "description": "Direct access to the PWM counter",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CH0_CTR": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH0_CC": {
    +              "description": "Counter compare values",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "B": {
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "A": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH0_TOP": {
    +              "description": "Counter wrap value",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 65535,
    +              "children": {
    +                "fields": {
    +                  "CH0_TOP": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH1_CSR": {
    +              "description": "Control and status register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "PH_ADV": {
    +                    "description": "Advance the phase of the counter by 1 count, while it is running.\\n\n                Self-clearing. Write a 1, and poll until low. Counter must be running\\n\n                at less than full speed (div_int + div_frac / 16 > 1)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PH_RET": {
    +                    "description": "Retard the phase of the counter by 1 count, while it is running.\\n\n                Self-clearing. Write a 1, and poll until low. Counter must be running.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DIVMODE": {
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "div": {
    +                            "description": "Free-running counting at rate dictated by fractional divider",
    +                            "value": 0
    +                          },
    +                          "level": {
    +                            "description": "Fractional divider operation is gated by the PWM B pin.",
    +                            "value": 1
    +                          },
    +                          "rise": {
    +                            "description": "Counter advances with each rising edge of the PWM B pin.",
    +                            "value": 2
    +                          },
    +                          "fall": {
    +                            "description": "Counter advances with each falling edge of the PWM B pin.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "B_INV": {
    +                    "description": "Invert output B",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "A_INV": {
    +                    "description": "Invert output A",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PH_CORRECT": {
    +                    "description": "1: Enable phase-correct modulation. 0: Trailing-edge",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "Enable the PWM channel.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH1_DIV": {
    +              "description": "INT and FRAC form a fixed-point fractional number.\\n\n            Counting rate is system clock frequency divided by this number.\\n\n            Fractional division uses simple 1st-order sigma-delta.",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 16,
    +              "children": {
    +                "fields": {
    +                  "INT": {
    +                    "offset": 4,
    +                    "size": 8
    +                  },
    +                  "FRAC": {
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CH1_CTR": {
    +              "description": "Direct access to the PWM counter",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CH1_CTR": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH1_CC": {
    +              "description": "Counter compare values",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "B": {
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "A": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH1_TOP": {
    +              "description": "Counter wrap value",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 65535,
    +              "children": {
    +                "fields": {
    +                  "CH1_TOP": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH2_CSR": {
    +              "description": "Control and status register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "PH_ADV": {
    +                    "description": "Advance the phase of the counter by 1 count, while it is running.\\n\n                Self-clearing. Write a 1, and poll until low. Counter must be running\\n\n                at less than full speed (div_int + div_frac / 16 > 1)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PH_RET": {
    +                    "description": "Retard the phase of the counter by 1 count, while it is running.\\n\n                Self-clearing. Write a 1, and poll until low. Counter must be running.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DIVMODE": {
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "div": {
    +                            "description": "Free-running counting at rate dictated by fractional divider",
    +                            "value": 0
    +                          },
    +                          "level": {
    +                            "description": "Fractional divider operation is gated by the PWM B pin.",
    +                            "value": 1
    +                          },
    +                          "rise": {
    +                            "description": "Counter advances with each rising edge of the PWM B pin.",
    +                            "value": 2
    +                          },
    +                          "fall": {
    +                            "description": "Counter advances with each falling edge of the PWM B pin.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "B_INV": {
    +                    "description": "Invert output B",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "A_INV": {
    +                    "description": "Invert output A",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PH_CORRECT": {
    +                    "description": "1: Enable phase-correct modulation. 0: Trailing-edge",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "Enable the PWM channel.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH2_DIV": {
    +              "description": "INT and FRAC form a fixed-point fractional number.\\n\n            Counting rate is system clock frequency divided by this number.\\n\n            Fractional division uses simple 1st-order sigma-delta.",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 16,
    +              "children": {
    +                "fields": {
    +                  "INT": {
    +                    "offset": 4,
    +                    "size": 8
    +                  },
    +                  "FRAC": {
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CH2_CTR": {
    +              "description": "Direct access to the PWM counter",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CH2_CTR": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH2_CC": {
    +              "description": "Counter compare values",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "B": {
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "A": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH2_TOP": {
    +              "description": "Counter wrap value",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 65535,
    +              "children": {
    +                "fields": {
    +                  "CH2_TOP": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH3_CSR": {
    +              "description": "Control and status register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "PH_ADV": {
    +                    "description": "Advance the phase of the counter by 1 count, while it is running.\\n\n                Self-clearing. Write a 1, and poll until low. Counter must be running\\n\n                at less than full speed (div_int + div_frac / 16 > 1)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PH_RET": {
    +                    "description": "Retard the phase of the counter by 1 count, while it is running.\\n\n                Self-clearing. Write a 1, and poll until low. Counter must be running.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DIVMODE": {
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "div": {
    +                            "description": "Free-running counting at rate dictated by fractional divider",
    +                            "value": 0
    +                          },
    +                          "level": {
    +                            "description": "Fractional divider operation is gated by the PWM B pin.",
    +                            "value": 1
    +                          },
    +                          "rise": {
    +                            "description": "Counter advances with each rising edge of the PWM B pin.",
    +                            "value": 2
    +                          },
    +                          "fall": {
    +                            "description": "Counter advances with each falling edge of the PWM B pin.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "B_INV": {
    +                    "description": "Invert output B",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "A_INV": {
    +                    "description": "Invert output A",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PH_CORRECT": {
    +                    "description": "1: Enable phase-correct modulation. 0: Trailing-edge",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "Enable the PWM channel.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH3_DIV": {
    +              "description": "INT and FRAC form a fixed-point fractional number.\\n\n            Counting rate is system clock frequency divided by this number.\\n\n            Fractional division uses simple 1st-order sigma-delta.",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 16,
    +              "children": {
    +                "fields": {
    +                  "INT": {
    +                    "offset": 4,
    +                    "size": 8
    +                  },
    +                  "FRAC": {
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CH3_CTR": {
    +              "description": "Direct access to the PWM counter",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CH3_CTR": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH3_CC": {
    +              "description": "Counter compare values",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "B": {
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "A": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH3_TOP": {
    +              "description": "Counter wrap value",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 65535,
    +              "children": {
    +                "fields": {
    +                  "CH3_TOP": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH4_CSR": {
    +              "description": "Control and status register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "PH_ADV": {
    +                    "description": "Advance the phase of the counter by 1 count, while it is running.\\n\n                Self-clearing. Write a 1, and poll until low. Counter must be running\\n\n                at less than full speed (div_int + div_frac / 16 > 1)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PH_RET": {
    +                    "description": "Retard the phase of the counter by 1 count, while it is running.\\n\n                Self-clearing. Write a 1, and poll until low. Counter must be running.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DIVMODE": {
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "div": {
    +                            "description": "Free-running counting at rate dictated by fractional divider",
    +                            "value": 0
    +                          },
    +                          "level": {
    +                            "description": "Fractional divider operation is gated by the PWM B pin.",
    +                            "value": 1
    +                          },
    +                          "rise": {
    +                            "description": "Counter advances with each rising edge of the PWM B pin.",
    +                            "value": 2
    +                          },
    +                          "fall": {
    +                            "description": "Counter advances with each falling edge of the PWM B pin.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "B_INV": {
    +                    "description": "Invert output B",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "A_INV": {
    +                    "description": "Invert output A",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PH_CORRECT": {
    +                    "description": "1: Enable phase-correct modulation. 0: Trailing-edge",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "Enable the PWM channel.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH4_DIV": {
    +              "description": "INT and FRAC form a fixed-point fractional number.\\n\n            Counting rate is system clock frequency divided by this number.\\n\n            Fractional division uses simple 1st-order sigma-delta.",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 16,
    +              "children": {
    +                "fields": {
    +                  "INT": {
    +                    "offset": 4,
    +                    "size": 8
    +                  },
    +                  "FRAC": {
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CH4_CTR": {
    +              "description": "Direct access to the PWM counter",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CH4_CTR": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH4_CC": {
    +              "description": "Counter compare values",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "B": {
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "A": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH4_TOP": {
    +              "description": "Counter wrap value",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 65535,
    +              "children": {
    +                "fields": {
    +                  "CH4_TOP": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH5_CSR": {
    +              "description": "Control and status register",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "PH_ADV": {
    +                    "description": "Advance the phase of the counter by 1 count, while it is running.\\n\n                Self-clearing. Write a 1, and poll until low. Counter must be running\\n\n                at less than full speed (div_int + div_frac / 16 > 1)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PH_RET": {
    +                    "description": "Retard the phase of the counter by 1 count, while it is running.\\n\n                Self-clearing. Write a 1, and poll until low. Counter must be running.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DIVMODE": {
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "div": {
    +                            "description": "Free-running counting at rate dictated by fractional divider",
    +                            "value": 0
    +                          },
    +                          "level": {
    +                            "description": "Fractional divider operation is gated by the PWM B pin.",
    +                            "value": 1
    +                          },
    +                          "rise": {
    +                            "description": "Counter advances with each rising edge of the PWM B pin.",
    +                            "value": 2
    +                          },
    +                          "fall": {
    +                            "description": "Counter advances with each falling edge of the PWM B pin.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "B_INV": {
    +                    "description": "Invert output B",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "A_INV": {
    +                    "description": "Invert output A",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PH_CORRECT": {
    +                    "description": "1: Enable phase-correct modulation. 0: Trailing-edge",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "Enable the PWM channel.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH5_DIV": {
    +              "description": "INT and FRAC form a fixed-point fractional number.\\n\n            Counting rate is system clock frequency divided by this number.\\n\n            Fractional division uses simple 1st-order sigma-delta.",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 16,
    +              "children": {
    +                "fields": {
    +                  "INT": {
    +                    "offset": 4,
    +                    "size": 8
    +                  },
    +                  "FRAC": {
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CH5_CTR": {
    +              "description": "Direct access to the PWM counter",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CH5_CTR": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH5_CC": {
    +              "description": "Counter compare values",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "B": {
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "A": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH5_TOP": {
    +              "description": "Counter wrap value",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 65535,
    +              "children": {
    +                "fields": {
    +                  "CH5_TOP": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH6_CSR": {
    +              "description": "Control and status register",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "PH_ADV": {
    +                    "description": "Advance the phase of the counter by 1 count, while it is running.\\n\n                Self-clearing. Write a 1, and poll until low. Counter must be running\\n\n                at less than full speed (div_int + div_frac / 16 > 1)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PH_RET": {
    +                    "description": "Retard the phase of the counter by 1 count, while it is running.\\n\n                Self-clearing. Write a 1, and poll until low. Counter must be running.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DIVMODE": {
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "div": {
    +                            "description": "Free-running counting at rate dictated by fractional divider",
    +                            "value": 0
    +                          },
    +                          "level": {
    +                            "description": "Fractional divider operation is gated by the PWM B pin.",
    +                            "value": 1
    +                          },
    +                          "rise": {
    +                            "description": "Counter advances with each rising edge of the PWM B pin.",
    +                            "value": 2
    +                          },
    +                          "fall": {
    +                            "description": "Counter advances with each falling edge of the PWM B pin.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "B_INV": {
    +                    "description": "Invert output B",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "A_INV": {
    +                    "description": "Invert output A",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PH_CORRECT": {
    +                    "description": "1: Enable phase-correct modulation. 0: Trailing-edge",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "Enable the PWM channel.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH6_DIV": {
    +              "description": "INT and FRAC form a fixed-point fractional number.\\n\n            Counting rate is system clock frequency divided by this number.\\n\n            Fractional division uses simple 1st-order sigma-delta.",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 16,
    +              "children": {
    +                "fields": {
    +                  "INT": {
    +                    "offset": 4,
    +                    "size": 8
    +                  },
    +                  "FRAC": {
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CH6_CTR": {
    +              "description": "Direct access to the PWM counter",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CH6_CTR": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH6_CC": {
    +              "description": "Counter compare values",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "B": {
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "A": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH6_TOP": {
    +              "description": "Counter wrap value",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 65535,
    +              "children": {
    +                "fields": {
    +                  "CH6_TOP": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH7_CSR": {
    +              "description": "Control and status register",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "PH_ADV": {
    +                    "description": "Advance the phase of the counter by 1 count, while it is running.\\n\n                Self-clearing. Write a 1, and poll until low. Counter must be running\\n\n                at less than full speed (div_int + div_frac / 16 > 1)",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PH_RET": {
    +                    "description": "Retard the phase of the counter by 1 count, while it is running.\\n\n                Self-clearing. Write a 1, and poll until low. Counter must be running.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DIVMODE": {
    +                    "offset": 4,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "div": {
    +                            "description": "Free-running counting at rate dictated by fractional divider",
    +                            "value": 0
    +                          },
    +                          "level": {
    +                            "description": "Fractional divider operation is gated by the PWM B pin.",
    +                            "value": 1
    +                          },
    +                          "rise": {
    +                            "description": "Counter advances with each rising edge of the PWM B pin.",
    +                            "value": 2
    +                          },
    +                          "fall": {
    +                            "description": "Counter advances with each falling edge of the PWM B pin.",
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "B_INV": {
    +                    "description": "Invert output B",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "A_INV": {
    +                    "description": "Invert output A",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PH_CORRECT": {
    +                    "description": "1: Enable phase-correct modulation. 0: Trailing-edge",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "Enable the PWM channel.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH7_DIV": {
    +              "description": "INT and FRAC form a fixed-point fractional number.\\n\n            Counting rate is system clock frequency divided by this number.\\n\n            Fractional division uses simple 1st-order sigma-delta.",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 16,
    +              "children": {
    +                "fields": {
    +                  "INT": {
    +                    "offset": 4,
    +                    "size": 8
    +                  },
    +                  "FRAC": {
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CH7_CTR": {
    +              "description": "Direct access to the PWM counter",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CH7_CTR": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH7_CC": {
    +              "description": "Counter compare values",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "B": {
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "A": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH7_TOP": {
    +              "description": "Counter wrap value",
    +              "offset": 156,
    +              "size": 32,
    +              "reset_value": 65535,
    +              "children": {
    +                "fields": {
    +                  "CH7_TOP": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EN": {
    +              "description": "This register aliases the CSR_EN bits for all channels.\\n\n            Writing to this register allows multiple channels to be enabled\\n\n            or disabled simultaneously, so they can run in perfect sync.\\n\n            For each channel, there is only one physical EN register bit,\\n\n            which can be accessed through here or CHx_CSR.",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CH7": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CH6": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CH5": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CH4": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CH3": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CH2": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CH1": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CH0": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTR": {
    +              "description": "Raw Interrupts",
    +              "offset": 164,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CH7": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CH6": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CH5": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CH4": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CH3": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CH2": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CH1": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CH0": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTE": {
    +              "description": "Interrupt Enable",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CH7": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CH6": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CH5": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CH4": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CH3": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CH2": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CH1": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CH0": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTF": {
    +              "description": "Interrupt Force",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CH7": {
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CH6": {
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CH5": {
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CH4": {
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CH3": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CH2": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CH1": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CH0": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTS": {
    +              "description": "Interrupt status after masking & forcing",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CH7": {
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CH6": {
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CH5": {
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CH4": {
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CH3": {
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CH2": {
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CH1": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CH0": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIMER": {
    +        "description": "Controls time and alarms\\n\n        time is a 64 bit value indicating the time in usec since power-on\\n\n        timeh is the top 32 bits of time & timel is the bottom 32 bits\\n\n        to change time write to timelw before timehw\\n\n        to read time read from timelr before timehr\\n\n        An alarm is set by setting alarm_enable and writing to the corresponding alarm register\\n\n        When an alarm is pending, the corresponding alarm_running signal will be high\\n\n        An alarm can be cancelled before it has finished by clearing the alarm_enable\\n\n        When an alarm fires, the corresponding alarm_irq is set and alarm_running is cleared\\n\n        To clear the interrupt write a 1 to the corresponding alarm_irq",
    +        "children": {
    +          "registers": {
    +            "TIMEHW": {
    +              "description": "Write to bits 63:32 of time\\n\n            always write timelw before timehw",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "write-only"
    +            },
    +            "TIMELW": {
    +              "description": "Write to bits 31:0 of time\\n\n            writes do not get copied to time until timehw is written",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "write-only"
    +            },
    +            "TIMEHR": {
    +              "description": "Read from bits 63:32 of time\\n\n            always read timelr before timehr",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "TIMELR": {
    +              "description": "Read from bits 31:0 of time",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "ALARM0": {
    +              "description": "Arm alarm 0, and configure the time it will fire.\\n\n            Once armed, the alarm fires when TIMER_ALARM0 == TIMELR.\\n\n            The alarm will disarm itself once it fires, and can\\n\n            be disarmed early using the ARMED status register.",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "ALARM1": {
    +              "description": "Arm alarm 1, and configure the time it will fire.\\n\n            Once armed, the alarm fires when TIMER_ALARM1 == TIMELR.\\n\n            The alarm will disarm itself once it fires, and can\\n\n            be disarmed early using the ARMED status register.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "ALARM2": {
    +              "description": "Arm alarm 2, and configure the time it will fire.\\n\n            Once armed, the alarm fires when TIMER_ALARM2 == TIMELR.\\n\n            The alarm will disarm itself once it fires, and can\\n\n            be disarmed early using the ARMED status register.",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "ALARM3": {
    +              "description": "Arm alarm 3, and configure the time it will fire.\\n\n            Once armed, the alarm fires when TIMER_ALARM3 == TIMELR.\\n\n            The alarm will disarm itself once it fires, and can\\n\n            be disarmed early using the ARMED status register.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "ARMED": {
    +              "description": "Indicates the armed/disarmed status of each alarm.\\n\n            A write to the corresponding ALARMx register arms the alarm.\\n\n            Alarms automatically disarm upon firing, but writing ones here\\n\n            will disarm immediately without waiting to fire.",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ARMED": {
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "TIMERAWH": {
    +              "description": "Raw read from bits 63:32 of time (no side effects)",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "TIMERAWL": {
    +              "description": "Raw read from bits 31:0 of time (no side effects)",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "DBGPAUSE": {
    +              "description": "Set bits high to enable pause when the corresponding debug ports are active",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 7,
    +              "children": {
    +                "fields": {
    +                  "DBG1": {
    +                    "description": "Pause when processor 1 is in debug mode",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DBG0": {
    +                    "description": "Pause when processor 0 is in debug mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PAUSE": {
    +              "description": "Set high to pause the timer",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "PAUSE": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTR": {
    +              "description": "Raw Interrupts",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ALARM_3": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ALARM_2": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ALARM_1": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ALARM_0": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTE": {
    +              "description": "Interrupt Enable",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ALARM_3": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ALARM_2": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ALARM_1": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ALARM_0": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTF": {
    +              "description": "Interrupt Force",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ALARM_3": {
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ALARM_2": {
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ALARM_1": {
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ALARM_0": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTS": {
    +              "description": "Interrupt status after masking & forcing",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ALARM_3": {
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ALARM_2": {
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ALARM_1": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ALARM_0": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "WATCHDOG": {
    +        "children": {
    +          "registers": {
    +            "CTRL": {
    +              "description": "Watchdog control\\n\n            The rst_wdsel register determines which subsystems are reset when the watchdog is triggered.\\n\n            The watchdog can be triggered in software.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 117440512,
    +              "children": {
    +                "fields": {
    +                  "TRIGGER": {
    +                    "description": "Trigger a watchdog reset",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "ENABLE": {
    +                    "description": "When not enabled the watchdog timer is paused",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PAUSE_DBG1": {
    +                    "description": "Pause the watchdog timer when processor 1 is in debug mode",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "PAUSE_DBG0": {
    +                    "description": "Pause the watchdog timer when processor 0 is in debug mode",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "PAUSE_JTAG": {
    +                    "description": "Pause the watchdog timer when JTAG is accessing the bus fabric",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "TIME": {
    +                    "description": "Indicates the number of ticks / 2 (see errata RP2040-E1) before a watchdog reset will be triggered",
    +                    "offset": 0,
    +                    "size": 24,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "LOAD": {
    +              "description": "Load the watchdog timer. The maximum setting is 0xffffff which corresponds to 0xffffff / 2 ticks before triggering a watchdog reset (see errata RP2040-E1).",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "LOAD": {
    +                    "offset": 0,
    +                    "size": 24,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "REASON": {
    +              "description": "Logs the reason for the last reset. Both bits are zero for the case of a hardware reset.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FORCE": {
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TIMER": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SCRATCH0": {
    +              "description": "Scratch register. Information persists through soft reset of the chip.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SCRATCH1": {
    +              "description": "Scratch register. Information persists through soft reset of the chip.",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SCRATCH2": {
    +              "description": "Scratch register. Information persists through soft reset of the chip.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SCRATCH3": {
    +              "description": "Scratch register. Information persists through soft reset of the chip.",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SCRATCH4": {
    +              "description": "Scratch register. Information persists through soft reset of the chip.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SCRATCH5": {
    +              "description": "Scratch register. Information persists through soft reset of the chip.",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SCRATCH6": {
    +              "description": "Scratch register. Information persists through soft reset of the chip.",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "SCRATCH7": {
    +              "description": "Scratch register. Information persists through soft reset of the chip.",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "TICK": {
    +              "description": "Controls the tick generator",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 512,
    +              "children": {
    +                "fields": {
    +                  "COUNT": {
    +                    "description": "Count down timer: the remaining number clk_tick cycles before the next tick is generated.",
    +                    "offset": 11,
    +                    "size": 9,
    +                    "access": "read-only"
    +                  },
    +                  "RUNNING": {
    +                    "description": "Is the tick generator running?",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ENABLE": {
    +                    "description": "start / stop tick generation",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CYCLES": {
    +                    "description": "Total number of clk_tick cycles before the next tick.",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "RTC": {
    +        "description": "Register block to control RTC",
    +        "children": {
    +          "registers": {
    +            "CLKDIV_M1": {
    +              "description": "Divider minus 1 for the 1 second counter. Safe to change the value when RTC is not enabled.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CLKDIV_M1": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SETUP_0": {
    +              "description": "RTC setup register 0",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "YEAR": {
    +                    "description": "Year",
    +                    "offset": 12,
    +                    "size": 12
    +                  },
    +                  "MONTH": {
    +                    "description": "Month (1..12)",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "DAY": {
    +                    "description": "Day of the month (1..31)",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "SETUP_1": {
    +              "description": "RTC setup register 1",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "DOTW": {
    +                    "description": "Day of the week: 1-Monday...0-Sunday ISO 8601 mod 7",
    +                    "offset": 24,
    +                    "size": 3
    +                  },
    +                  "HOUR": {
    +                    "description": "Hours",
    +                    "offset": 16,
    +                    "size": 5
    +                  },
    +                  "MIN": {
    +                    "description": "Minutes",
    +                    "offset": 8,
    +                    "size": 6
    +                  },
    +                  "SEC": {
    +                    "description": "Seconds",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "CTRL": {
    +              "description": "RTC Control and status",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FORCE_NOTLEAPYEAR": {
    +                    "description": "If set, leapyear is forced off.\\n\n                Useful for years divisible by 100 but not by 400",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LOAD": {
    +                    "description": "Load RTC",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RTC_ACTIVE": {
    +                    "description": "RTC enabled (running)",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_ENABLE": {
    +                    "description": "Enable RTC",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IRQ_SETUP_0": {
    +              "description": "Interrupt setup register 0",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "MATCH_ACTIVE": {
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MATCH_ENA": {
    +                    "description": "Global match enable. Don't change any other value while this one is enabled",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "YEAR_ENA": {
    +                    "description": "Enable year matching",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "MONTH_ENA": {
    +                    "description": "Enable month matching",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "DAY_ENA": {
    +                    "description": "Enable day matching",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "YEAR": {
    +                    "description": "Year",
    +                    "offset": 12,
    +                    "size": 12
    +                  },
    +                  "MONTH": {
    +                    "description": "Month (1..12)",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "DAY": {
    +                    "description": "Day of the month (1..31)",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "IRQ_SETUP_1": {
    +              "description": "Interrupt setup register 1",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "DOTW_ENA": {
    +                    "description": "Enable day of the week matching",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "HOUR_ENA": {
    +                    "description": "Enable hour matching",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "MIN_ENA": {
    +                    "description": "Enable minute matching",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "SEC_ENA": {
    +                    "description": "Enable second matching",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "DOTW": {
    +                    "description": "Day of the week",
    +                    "offset": 24,
    +                    "size": 3
    +                  },
    +                  "HOUR": {
    +                    "description": "Hours",
    +                    "offset": 16,
    +                    "size": 5
    +                  },
    +                  "MIN": {
    +                    "description": "Minutes",
    +                    "offset": 8,
    +                    "size": 6
    +                  },
    +                  "SEC": {
    +                    "description": "Seconds",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "RTC_1": {
    +              "description": "RTC register 1.",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "YEAR": {
    +                    "description": "Year",
    +                    "offset": 12,
    +                    "size": 12,
    +                    "access": "read-only"
    +                  },
    +                  "MONTH": {
    +                    "description": "Month (1..12)",
    +                    "offset": 8,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "DAY": {
    +                    "description": "Day of the month (1..31)",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RTC_0": {
    +              "description": "RTC register 0\\n\n            Read this before RTC 1!",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "DOTW": {
    +                    "description": "Day of the week",
    +                    "offset": 24,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "HOUR": {
    +                    "description": "Hours",
    +                    "offset": 16,
    +                    "size": 5,
    +                    "access": "read-only"
    +                  },
    +                  "MIN": {
    +                    "description": "Minutes",
    +                    "offset": 8,
    +                    "size": 6,
    +                    "access": "read-only"
    +                  },
    +                  "SEC": {
    +                    "description": "Seconds",
    +                    "offset": 0,
    +                    "size": 6,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INTR": {
    +              "description": "Raw Interrupts",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "RTC": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INTE": {
    +              "description": "Interrupt Enable",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "RTC": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTF": {
    +              "description": "Interrupt Force",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "RTC": {
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTS": {
    +              "description": "Interrupt status after masking & forcing",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "RTC": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "ROSC": {
    +        "children": {
    +          "registers": {
    +            "CTRL": {
    +              "description": "Ring Oscillator control",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 2720,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "On power-up this field is initialised to ENABLE\\n\n                The system clock must be switched to another source before setting this field to DISABLE otherwise the chip will lock up\\n\n                The 12-bit code is intended to give some protection against accidental writes. An invalid setting will enable the oscillator.",
    +                    "offset": 12,
    +                    "size": 12,
    +                    "enum": {
    +                      "size": 12,
    +                      "children": {
    +                        "enum_fields": {
    +                          "DISABLE": {
    +                            "value": 3358
    +                          },
    +                          "ENABLE": {
    +                            "value": 4011
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "FREQ_RANGE": {
    +                    "description": "Controls the number of delay stages in the ROSC ring\\n\n                LOW uses stages 0 to 7\\n\n                MEDIUM uses stages 0 to 5\\n\n                HIGH uses stages 0 to 3\\n\n                TOOHIGH uses stages 0 to 1 and should not be used because its frequency exceeds design specifications\\n\n                The clock output will not glitch when changing the range up one step at a time\\n\n                The clock output will glitch when changing the range down\\n\n                Note: the values here are gray coded which is why HIGH comes before TOOHIGH",
    +                    "offset": 0,
    +                    "size": 12,
    +                    "enum": {
    +                      "size": 12,
    +                      "children": {
    +                        "enum_fields": {
    +                          "LOW": {
    +                            "value": 4004
    +                          },
    +                          "MEDIUM": {
    +                            "value": 4005
    +                          },
    +                          "HIGH": {
    +                            "value": 4007
    +                          },
    +                          "TOOHIGH": {
    +                            "value": 4006
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "FREQA": {
    +              "description": "The FREQA & FREQB registers control the frequency by controlling the drive strength of each stage\\n\n            The drive strength has 4 levels determined by the number of bits set\\n\n            Increasing the number of bits set increases the drive strength and increases the oscillation frequency\\n\n            0 bits set is the default drive strength\\n\n            1 bit set doubles the drive strength\\n\n            2 bits set triples drive strength\\n\n            3 bits set quadruples drive strength",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "PASSWD": {
    +                    "description": "Set to 0x9696 to apply the settings\\n\n                Any other value in this field will set all drive strengths to 0",
    +                    "offset": 16,
    +                    "size": 16,
    +                    "enum": {
    +                      "size": 16,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PASS": {
    +                            "value": 38550
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DS3": {
    +                    "description": "Stage 3 drive strength",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "DS2": {
    +                    "description": "Stage 2 drive strength",
    +                    "offset": 8,
    +                    "size": 3
    +                  },
    +                  "DS1": {
    +                    "description": "Stage 1 drive strength",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "DS0": {
    +                    "description": "Stage 0 drive strength",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "FREQB": {
    +              "description": "For a detailed description see freqa register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "PASSWD": {
    +                    "description": "Set to 0x9696 to apply the settings\\n\n                Any other value in this field will set all drive strengths to 0",
    +                    "offset": 16,
    +                    "size": 16,
    +                    "enum": {
    +                      "size": 16,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PASS": {
    +                            "value": 38550
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DS7": {
    +                    "description": "Stage 7 drive strength",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "DS6": {
    +                    "description": "Stage 6 drive strength",
    +                    "offset": 8,
    +                    "size": 3
    +                  },
    +                  "DS5": {
    +                    "description": "Stage 5 drive strength",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "DS4": {
    +                    "description": "Stage 4 drive strength",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "DORMANT": {
    +              "description": "Ring Oscillator pause control\\n\n            This is used to save power by pausing the ROSC\\n\n            On power-up this field is initialised to WAKE\\n\n            An invalid write will also select WAKE\\n\n            Warning: setup the irq before selecting dormant mode",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "DIV": {
    +              "description": "Controls the output divider",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "DIV": {
    +                    "description": "set to 0xaa0 + div where\\n\n                div = 0 divides by 32\\n\n                div = 1-31 divides by div\\n\n                any other value sets div=31\\n\n                this register resets to div=16",
    +                    "offset": 0,
    +                    "size": 12,
    +                    "enum": {
    +                      "size": 12,
    +                      "children": {
    +                        "enum_fields": {
    +                          "PASS": {
    +                            "value": 2720
    +                          }
    +                        }
    +                      }
    +                    }
    +                  }
    +                }
    +              }
    +            },
    +            "PHASE": {
    +              "description": "Controls the phase shifted output",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 8,
    +              "children": {
    +                "fields": {
    +                  "PASSWD": {
    +                    "description": "set to 0xaa\\n\n                any other value enables the output with shift=0",
    +                    "offset": 4,
    +                    "size": 8
    +                  },
    +                  "ENABLE": {
    +                    "description": "enable the phase-shifted output\\n\n                this can be changed on-the-fly",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FLIP": {
    +                    "description": "invert the phase-shifted output\\n\n                this is ignored when div=1",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SHIFT": {
    +                    "description": "phase shift the phase-shifted output by SHIFT input clocks\\n\n                this can be changed on-the-fly\\n\n                must be set to 0 before setting div=1",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "STATUS": {
    +              "description": "Ring Oscillator Status",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "STABLE": {
    +                    "description": "Oscillator is running and stable",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BADWRITE": {
    +                    "description": "An invalid value has been written to CTRL_ENABLE or CTRL_FREQ_RANGE or FREQA or FREQB or DIV or PHASE or DORMANT",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "DIV_RUNNING": {
    +                    "description": "post-divider is running\\n\n                this resets to 0 but transitions to 1 during chip startup",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ENABLED": {
    +                    "description": "Oscillator is enabled but not necessarily running and stable\\n\n                this resets to 0 but transitions to 1 during chip startup",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RANDOMBIT": {
    +              "description": "This just reads the state of the oscillator output so randomness is compromised if the ring oscillator is stopped or run at a harmonic of the bus frequency",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 1,
    +              "children": {
    +                "fields": {
    +                  "RANDOMBIT": {
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "COUNT": {
    +              "description": "A down counter running at the ROSC frequency which counts to zero and stops.\\n\n            To start the counter write a non-zero value.\\n\n            Can be used for short software pauses when setting up time sensitive hardware.",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "COUNT": {
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "VREG_AND_CHIP_RESET": {
    +        "description": "control and status for on-chip voltage regulator and chip level reset subsystem",
    +        "children": {
    +          "registers": {
    +            "VREG": {
    +              "description": "Voltage regulator control and status",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 177,
    +              "children": {
    +                "fields": {
    +                  "ROK": {
    +                    "description": "regulation status\\n\n                0=not in regulation, 1=in regulation",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "VSEL": {
    +                    "description": "output voltage select\\n\n                0000 to 0101 - 0.80V\\n\n                0110         - 0.85V\\n\n                0111         - 0.90V\\n\n                1000         - 0.95V\\n\n                1001         - 1.00V\\n\n                1010         - 1.05V\\n\n                1011         - 1.10V (default)\\n\n                1100         - 1.15V\\n\n                1101         - 1.20V\\n\n                1110         - 1.25V\\n\n                1111         - 1.30V",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "HIZ": {
    +                    "description": "high impedance mode select\\n\n                0=not in high impedance mode, 1=in high impedance mode",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "enable\\n\n                0=not enabled, 1=enabled",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BOD": {
    +              "description": "brown-out detection control",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 145,
    +              "children": {
    +                "fields": {
    +                  "VSEL": {
    +                    "description": "threshold select\\n\n                0000 - 0.473V\\n\n                0001 - 0.516V\\n\n                0010 - 0.559V\\n\n                0011 - 0.602V\\n\n                0100 - 0.645V\\n\n                0101 - 0.688V\\n\n                0110 - 0.731V\\n\n                0111 - 0.774V\\n\n                1000 - 0.817V\\n\n                1001 - 0.860V (default)\\n\n                1010 - 0.903V\\n\n                1011 - 0.946V\\n\n                1100 - 0.989V\\n\n                1101 - 1.032V\\n\n                1110 - 1.075V\\n\n                1111 - 1.118V",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "EN": {
    +                    "description": "enable\\n\n                0=not enabled, 1=enabled",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CHIP_RESET": {
    +              "description": "Chip reset control and status",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "PSM_RESTART_FLAG": {
    +                    "description": "This is set by psm_restart from the debugger.\\n\n                Its purpose is to branch bootcode to a safe mode when the debugger has issued a psm_restart in order to recover from a boot lock-up.\\n\n                In the safe mode the debugger can repair the boot code, clear this flag then reboot the processor.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "HAD_PSM_RESTART": {
    +                    "description": "Last reset was from the debug port",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HAD_RUN": {
    +                    "description": "Last reset was from the RUN pin",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "HAD_POR": {
    +                    "description": "Last reset was from the power-on reset or brown-out detection blocks",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TBMAN": {
    +        "description": "Testbench manager. Allows the programmer to know what platform their software is running on.",
    +        "children": {
    +          "registers": {
    +            "PLATFORM": {
    +              "description": "Indicates the type of platform in use",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 5,
    +              "children": {
    +                "fields": {
    +                  "FPGA": {
    +                    "description": "Indicates the platform is an FPGA",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ASIC": {
    +                    "description": "Indicates the platform is an ASIC",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "DMA": {
    +        "description": "DMA with separate read and write masters",
    +        "children": {
    +          "registers": {
    +            "CH0_READ_ADDR": {
    +              "description": "DMA Channel 0 Read Address pointer\\n\n            This register updates automatically each time a read completes. The current value is the next address to be read by this channel.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH0_WRITE_ADDR": {
    +              "description": "DMA Channel 0 Write Address pointer\\n\n            This register updates automatically each time a write completes. The current value is the next address to be written by this channel.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH0_TRANS_COUNT": {
    +              "description": "DMA Channel 0 Transfer Count\\n\n            Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).\\n\\n\n            When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.\\n\\n\n            Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.\\n\\n\n            The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH0_CTRL_TRIG": {
    +              "description": "DMA Channel 0 Control and Status",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "AHB_ERROR": {
    +                    "description": "Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "READ_ERROR": {
    +                    "description": "If 1, the channel received a read bus error. Write one to clear.\\n\n                READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "WRITE_ERROR": {
    +                    "description": "If 1, the channel received a write bus error. Write one to clear.\\n\n                WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "BUSY": {
    +                    "description": "This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.\\n\\n\n                To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SNIFF_EN": {
    +                    "description": "If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.\\n\\n\n                This allows checksum to be enabled or disabled on a per-control- block basis.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "BSWAP": {
    +                    "description": "Apply byte-swap transformation to DMA data.\\n\n                For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "IRQ_QUIET": {
    +                    "description": "In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.\\n\\n\n                This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TREQ_SEL": {
    +                    "description": "Select a Transfer Request signal.\\n\n                The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).\\n\n                0x0 to 0x3a -> select DREQ n as TREQ",
    +                    "offset": 15,
    +                    "size": 6,
    +                    "enum": {
    +                      "size": 6,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TIMER0": {
    +                            "description": "Select Timer 0 as TREQ",
    +                            "value": 59
    +                          },
    +                          "TIMER1": {
    +                            "description": "Select Timer 1 as TREQ",
    +                            "value": 60
    +                          },
    +                          "TIMER2": {
    +                            "description": "Select Timer 2 as TREQ (Optional)",
    +                            "value": 61
    +                          },
    +                          "TIMER3": {
    +                            "description": "Select Timer 3 as TREQ (Optional)",
    +                            "value": 62
    +                          },
    +                          "PERMANENT": {
    +                            "description": "Permanent request, for unpaced transfers.",
    +                            "value": 63
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CHAIN_TO": {
    +                    "description": "When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "RING_SEL": {
    +                    "description": "Select whether RING_SIZE applies to read or write addresses.\\n\n                If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "RING_SIZE": {
    +                    "description": "Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.\\n\\n\n                Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.",
    +                    "offset": 6,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RING_NONE": {
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INCR_WRITE": {
    +                    "description": "If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.\\n\\n\n                Generally this should be disabled for memory-to-peripheral transfers.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INCR_READ": {
    +                    "description": "If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.\\n\\n\n                Generally this should be disabled for peripheral-to-memory transfers.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DATA_SIZE": {
    +                    "description": "Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SIZE_BYTE": {
    +                            "value": 0
    +                          },
    +                          "SIZE_HALFWORD": {
    +                            "value": 1
    +                          },
    +                          "SIZE_WORD": {
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "HIGH_PRIORITY": {
    +                    "description": "HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.\\n\\n\n                This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "DMA Channel Enable.\\n\n                When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH0_AL1_CTRL": {
    +              "description": "Alias for channel 0 CTRL register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH0_AL1_READ_ADDR": {
    +              "description": "Alias for channel 0 READ_ADDR register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH0_AL1_WRITE_ADDR": {
    +              "description": "Alias for channel 0 WRITE_ADDR register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH0_AL1_TRANS_COUNT_TRIG": {
    +              "description": "Alias for channel 0 TRANS_COUNT register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH0_AL2_CTRL": {
    +              "description": "Alias for channel 0 CTRL register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH0_AL2_TRANS_COUNT": {
    +              "description": "Alias for channel 0 TRANS_COUNT register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH0_AL2_READ_ADDR": {
    +              "description": "Alias for channel 0 READ_ADDR register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH0_AL2_WRITE_ADDR_TRIG": {
    +              "description": "Alias for channel 0 WRITE_ADDR register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH0_AL3_CTRL": {
    +              "description": "Alias for channel 0 CTRL register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH0_AL3_WRITE_ADDR": {
    +              "description": "Alias for channel 0 WRITE_ADDR register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH0_AL3_TRANS_COUNT": {
    +              "description": "Alias for channel 0 TRANS_COUNT register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH0_AL3_READ_ADDR_TRIG": {
    +              "description": "Alias for channel 0 READ_ADDR register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH1_READ_ADDR": {
    +              "description": "DMA Channel 1 Read Address pointer\\n\n            This register updates automatically each time a read completes. The current value is the next address to be read by this channel.",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH1_WRITE_ADDR": {
    +              "description": "DMA Channel 1 Write Address pointer\\n\n            This register updates automatically each time a write completes. The current value is the next address to be written by this channel.",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH1_TRANS_COUNT": {
    +              "description": "DMA Channel 1 Transfer Count\\n\n            Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).\\n\\n\n            When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.\\n\\n\n            Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.\\n\\n\n            The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH1_CTRL_TRIG": {
    +              "description": "DMA Channel 1 Control and Status",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "AHB_ERROR": {
    +                    "description": "Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "READ_ERROR": {
    +                    "description": "If 1, the channel received a read bus error. Write one to clear.\\n\n                READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "WRITE_ERROR": {
    +                    "description": "If 1, the channel received a write bus error. Write one to clear.\\n\n                WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "BUSY": {
    +                    "description": "This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.\\n\\n\n                To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SNIFF_EN": {
    +                    "description": "If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.\\n\\n\n                This allows checksum to be enabled or disabled on a per-control- block basis.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "BSWAP": {
    +                    "description": "Apply byte-swap transformation to DMA data.\\n\n                For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "IRQ_QUIET": {
    +                    "description": "In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.\\n\\n\n                This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TREQ_SEL": {
    +                    "description": "Select a Transfer Request signal.\\n\n                The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).\\n\n                0x0 to 0x3a -> select DREQ n as TREQ",
    +                    "offset": 15,
    +                    "size": 6,
    +                    "enum": {
    +                      "size": 6,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TIMER0": {
    +                            "description": "Select Timer 0 as TREQ",
    +                            "value": 59
    +                          },
    +                          "TIMER1": {
    +                            "description": "Select Timer 1 as TREQ",
    +                            "value": 60
    +                          },
    +                          "TIMER2": {
    +                            "description": "Select Timer 2 as TREQ (Optional)",
    +                            "value": 61
    +                          },
    +                          "TIMER3": {
    +                            "description": "Select Timer 3 as TREQ (Optional)",
    +                            "value": 62
    +                          },
    +                          "PERMANENT": {
    +                            "description": "Permanent request, for unpaced transfers.",
    +                            "value": 63
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CHAIN_TO": {
    +                    "description": "When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "RING_SEL": {
    +                    "description": "Select whether RING_SIZE applies to read or write addresses.\\n\n                If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "RING_SIZE": {
    +                    "description": "Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.\\n\\n\n                Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.",
    +                    "offset": 6,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RING_NONE": {
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INCR_WRITE": {
    +                    "description": "If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.\\n\\n\n                Generally this should be disabled for memory-to-peripheral transfers.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INCR_READ": {
    +                    "description": "If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.\\n\\n\n                Generally this should be disabled for peripheral-to-memory transfers.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DATA_SIZE": {
    +                    "description": "Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SIZE_BYTE": {
    +                            "value": 0
    +                          },
    +                          "SIZE_HALFWORD": {
    +                            "value": 1
    +                          },
    +                          "SIZE_WORD": {
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "HIGH_PRIORITY": {
    +                    "description": "HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.\\n\\n\n                This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "DMA Channel Enable.\\n\n                When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH1_AL1_CTRL": {
    +              "description": "Alias for channel 1 CTRL register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH1_AL1_READ_ADDR": {
    +              "description": "Alias for channel 1 READ_ADDR register",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH1_AL1_WRITE_ADDR": {
    +              "description": "Alias for channel 1 WRITE_ADDR register",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH1_AL1_TRANS_COUNT_TRIG": {
    +              "description": "Alias for channel 1 TRANS_COUNT register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH1_AL2_CTRL": {
    +              "description": "Alias for channel 1 CTRL register",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH1_AL2_TRANS_COUNT": {
    +              "description": "Alias for channel 1 TRANS_COUNT register",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH1_AL2_READ_ADDR": {
    +              "description": "Alias for channel 1 READ_ADDR register",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH1_AL2_WRITE_ADDR_TRIG": {
    +              "description": "Alias for channel 1 WRITE_ADDR register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH1_AL3_CTRL": {
    +              "description": "Alias for channel 1 CTRL register",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH1_AL3_WRITE_ADDR": {
    +              "description": "Alias for channel 1 WRITE_ADDR register",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH1_AL3_TRANS_COUNT": {
    +              "description": "Alias for channel 1 TRANS_COUNT register",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH1_AL3_READ_ADDR_TRIG": {
    +              "description": "Alias for channel 1 READ_ADDR register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH2_READ_ADDR": {
    +              "description": "DMA Channel 2 Read Address pointer\\n\n            This register updates automatically each time a read completes. The current value is the next address to be read by this channel.",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH2_WRITE_ADDR": {
    +              "description": "DMA Channel 2 Write Address pointer\\n\n            This register updates automatically each time a write completes. The current value is the next address to be written by this channel.",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH2_TRANS_COUNT": {
    +              "description": "DMA Channel 2 Transfer Count\\n\n            Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).\\n\\n\n            When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.\\n\\n\n            Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.\\n\\n\n            The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH2_CTRL_TRIG": {
    +              "description": "DMA Channel 2 Control and Status",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "AHB_ERROR": {
    +                    "description": "Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "READ_ERROR": {
    +                    "description": "If 1, the channel received a read bus error. Write one to clear.\\n\n                READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "WRITE_ERROR": {
    +                    "description": "If 1, the channel received a write bus error. Write one to clear.\\n\n                WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "BUSY": {
    +                    "description": "This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.\\n\\n\n                To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SNIFF_EN": {
    +                    "description": "If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.\\n\\n\n                This allows checksum to be enabled or disabled on a per-control- block basis.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "BSWAP": {
    +                    "description": "Apply byte-swap transformation to DMA data.\\n\n                For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "IRQ_QUIET": {
    +                    "description": "In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.\\n\\n\n                This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TREQ_SEL": {
    +                    "description": "Select a Transfer Request signal.\\n\n                The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).\\n\n                0x0 to 0x3a -> select DREQ n as TREQ",
    +                    "offset": 15,
    +                    "size": 6,
    +                    "enum": {
    +                      "size": 6,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TIMER0": {
    +                            "description": "Select Timer 0 as TREQ",
    +                            "value": 59
    +                          },
    +                          "TIMER1": {
    +                            "description": "Select Timer 1 as TREQ",
    +                            "value": 60
    +                          },
    +                          "TIMER2": {
    +                            "description": "Select Timer 2 as TREQ (Optional)",
    +                            "value": 61
    +                          },
    +                          "TIMER3": {
    +                            "description": "Select Timer 3 as TREQ (Optional)",
    +                            "value": 62
    +                          },
    +                          "PERMANENT": {
    +                            "description": "Permanent request, for unpaced transfers.",
    +                            "value": 63
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CHAIN_TO": {
    +                    "description": "When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "RING_SEL": {
    +                    "description": "Select whether RING_SIZE applies to read or write addresses.\\n\n                If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "RING_SIZE": {
    +                    "description": "Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.\\n\\n\n                Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.",
    +                    "offset": 6,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RING_NONE": {
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INCR_WRITE": {
    +                    "description": "If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.\\n\\n\n                Generally this should be disabled for memory-to-peripheral transfers.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INCR_READ": {
    +                    "description": "If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.\\n\\n\n                Generally this should be disabled for peripheral-to-memory transfers.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DATA_SIZE": {
    +                    "description": "Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SIZE_BYTE": {
    +                            "value": 0
    +                          },
    +                          "SIZE_HALFWORD": {
    +                            "value": 1
    +                          },
    +                          "SIZE_WORD": {
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "HIGH_PRIORITY": {
    +                    "description": "HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.\\n\\n\n                This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "DMA Channel Enable.\\n\n                When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH2_AL1_CTRL": {
    +              "description": "Alias for channel 2 CTRL register",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH2_AL1_READ_ADDR": {
    +              "description": "Alias for channel 2 READ_ADDR register",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH2_AL1_WRITE_ADDR": {
    +              "description": "Alias for channel 2 WRITE_ADDR register",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH2_AL1_TRANS_COUNT_TRIG": {
    +              "description": "Alias for channel 2 TRANS_COUNT register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 156,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH2_AL2_CTRL": {
    +              "description": "Alias for channel 2 CTRL register",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH2_AL2_TRANS_COUNT": {
    +              "description": "Alias for channel 2 TRANS_COUNT register",
    +              "offset": 164,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH2_AL2_READ_ADDR": {
    +              "description": "Alias for channel 2 READ_ADDR register",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH2_AL2_WRITE_ADDR_TRIG": {
    +              "description": "Alias for channel 2 WRITE_ADDR register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH2_AL3_CTRL": {
    +              "description": "Alias for channel 2 CTRL register",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH2_AL3_WRITE_ADDR": {
    +              "description": "Alias for channel 2 WRITE_ADDR register",
    +              "offset": 180,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH2_AL3_TRANS_COUNT": {
    +              "description": "Alias for channel 2 TRANS_COUNT register",
    +              "offset": 184,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH2_AL3_READ_ADDR_TRIG": {
    +              "description": "Alias for channel 2 READ_ADDR register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 188,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH3_READ_ADDR": {
    +              "description": "DMA Channel 3 Read Address pointer\\n\n            This register updates automatically each time a read completes. The current value is the next address to be read by this channel.",
    +              "offset": 192,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH3_WRITE_ADDR": {
    +              "description": "DMA Channel 3 Write Address pointer\\n\n            This register updates automatically each time a write completes. The current value is the next address to be written by this channel.",
    +              "offset": 196,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH3_TRANS_COUNT": {
    +              "description": "DMA Channel 3 Transfer Count\\n\n            Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).\\n\\n\n            When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.\\n\\n\n            Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.\\n\\n\n            The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.",
    +              "offset": 200,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH3_CTRL_TRIG": {
    +              "description": "DMA Channel 3 Control and Status",
    +              "offset": 204,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "AHB_ERROR": {
    +                    "description": "Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "READ_ERROR": {
    +                    "description": "If 1, the channel received a read bus error. Write one to clear.\\n\n                READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "WRITE_ERROR": {
    +                    "description": "If 1, the channel received a write bus error. Write one to clear.\\n\n                WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "BUSY": {
    +                    "description": "This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.\\n\\n\n                To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SNIFF_EN": {
    +                    "description": "If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.\\n\\n\n                This allows checksum to be enabled or disabled on a per-control- block basis.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "BSWAP": {
    +                    "description": "Apply byte-swap transformation to DMA data.\\n\n                For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "IRQ_QUIET": {
    +                    "description": "In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.\\n\\n\n                This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TREQ_SEL": {
    +                    "description": "Select a Transfer Request signal.\\n\n                The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).\\n\n                0x0 to 0x3a -> select DREQ n as TREQ",
    +                    "offset": 15,
    +                    "size": 6,
    +                    "enum": {
    +                      "size": 6,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TIMER0": {
    +                            "description": "Select Timer 0 as TREQ",
    +                            "value": 59
    +                          },
    +                          "TIMER1": {
    +                            "description": "Select Timer 1 as TREQ",
    +                            "value": 60
    +                          },
    +                          "TIMER2": {
    +                            "description": "Select Timer 2 as TREQ (Optional)",
    +                            "value": 61
    +                          },
    +                          "TIMER3": {
    +                            "description": "Select Timer 3 as TREQ (Optional)",
    +                            "value": 62
    +                          },
    +                          "PERMANENT": {
    +                            "description": "Permanent request, for unpaced transfers.",
    +                            "value": 63
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CHAIN_TO": {
    +                    "description": "When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "RING_SEL": {
    +                    "description": "Select whether RING_SIZE applies to read or write addresses.\\n\n                If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "RING_SIZE": {
    +                    "description": "Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.\\n\\n\n                Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.",
    +                    "offset": 6,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RING_NONE": {
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INCR_WRITE": {
    +                    "description": "If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.\\n\\n\n                Generally this should be disabled for memory-to-peripheral transfers.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INCR_READ": {
    +                    "description": "If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.\\n\\n\n                Generally this should be disabled for peripheral-to-memory transfers.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DATA_SIZE": {
    +                    "description": "Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SIZE_BYTE": {
    +                            "value": 0
    +                          },
    +                          "SIZE_HALFWORD": {
    +                            "value": 1
    +                          },
    +                          "SIZE_WORD": {
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "HIGH_PRIORITY": {
    +                    "description": "HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.\\n\\n\n                This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "DMA Channel Enable.\\n\n                When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH3_AL1_CTRL": {
    +              "description": "Alias for channel 3 CTRL register",
    +              "offset": 208,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH3_AL1_READ_ADDR": {
    +              "description": "Alias for channel 3 READ_ADDR register",
    +              "offset": 212,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH3_AL1_WRITE_ADDR": {
    +              "description": "Alias for channel 3 WRITE_ADDR register",
    +              "offset": 216,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH3_AL1_TRANS_COUNT_TRIG": {
    +              "description": "Alias for channel 3 TRANS_COUNT register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 220,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH3_AL2_CTRL": {
    +              "description": "Alias for channel 3 CTRL register",
    +              "offset": 224,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH3_AL2_TRANS_COUNT": {
    +              "description": "Alias for channel 3 TRANS_COUNT register",
    +              "offset": 228,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH3_AL2_READ_ADDR": {
    +              "description": "Alias for channel 3 READ_ADDR register",
    +              "offset": 232,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH3_AL2_WRITE_ADDR_TRIG": {
    +              "description": "Alias for channel 3 WRITE_ADDR register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 236,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH3_AL3_CTRL": {
    +              "description": "Alias for channel 3 CTRL register",
    +              "offset": 240,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH3_AL3_WRITE_ADDR": {
    +              "description": "Alias for channel 3 WRITE_ADDR register",
    +              "offset": 244,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH3_AL3_TRANS_COUNT": {
    +              "description": "Alias for channel 3 TRANS_COUNT register",
    +              "offset": 248,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH3_AL3_READ_ADDR_TRIG": {
    +              "description": "Alias for channel 3 READ_ADDR register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 252,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH4_READ_ADDR": {
    +              "description": "DMA Channel 4 Read Address pointer\\n\n            This register updates automatically each time a read completes. The current value is the next address to be read by this channel.",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH4_WRITE_ADDR": {
    +              "description": "DMA Channel 4 Write Address pointer\\n\n            This register updates automatically each time a write completes. The current value is the next address to be written by this channel.",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH4_TRANS_COUNT": {
    +              "description": "DMA Channel 4 Transfer Count\\n\n            Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).\\n\\n\n            When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.\\n\\n\n            Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.\\n\\n\n            The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH4_CTRL_TRIG": {
    +              "description": "DMA Channel 4 Control and Status",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "AHB_ERROR": {
    +                    "description": "Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "READ_ERROR": {
    +                    "description": "If 1, the channel received a read bus error. Write one to clear.\\n\n                READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "WRITE_ERROR": {
    +                    "description": "If 1, the channel received a write bus error. Write one to clear.\\n\n                WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "BUSY": {
    +                    "description": "This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.\\n\\n\n                To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SNIFF_EN": {
    +                    "description": "If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.\\n\\n\n                This allows checksum to be enabled or disabled on a per-control- block basis.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "BSWAP": {
    +                    "description": "Apply byte-swap transformation to DMA data.\\n\n                For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "IRQ_QUIET": {
    +                    "description": "In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.\\n\\n\n                This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TREQ_SEL": {
    +                    "description": "Select a Transfer Request signal.\\n\n                The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).\\n\n                0x0 to 0x3a -> select DREQ n as TREQ",
    +                    "offset": 15,
    +                    "size": 6,
    +                    "enum": {
    +                      "size": 6,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TIMER0": {
    +                            "description": "Select Timer 0 as TREQ",
    +                            "value": 59
    +                          },
    +                          "TIMER1": {
    +                            "description": "Select Timer 1 as TREQ",
    +                            "value": 60
    +                          },
    +                          "TIMER2": {
    +                            "description": "Select Timer 2 as TREQ (Optional)",
    +                            "value": 61
    +                          },
    +                          "TIMER3": {
    +                            "description": "Select Timer 3 as TREQ (Optional)",
    +                            "value": 62
    +                          },
    +                          "PERMANENT": {
    +                            "description": "Permanent request, for unpaced transfers.",
    +                            "value": 63
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CHAIN_TO": {
    +                    "description": "When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "RING_SEL": {
    +                    "description": "Select whether RING_SIZE applies to read or write addresses.\\n\n                If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "RING_SIZE": {
    +                    "description": "Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.\\n\\n\n                Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.",
    +                    "offset": 6,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RING_NONE": {
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INCR_WRITE": {
    +                    "description": "If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.\\n\\n\n                Generally this should be disabled for memory-to-peripheral transfers.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INCR_READ": {
    +                    "description": "If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.\\n\\n\n                Generally this should be disabled for peripheral-to-memory transfers.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DATA_SIZE": {
    +                    "description": "Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SIZE_BYTE": {
    +                            "value": 0
    +                          },
    +                          "SIZE_HALFWORD": {
    +                            "value": 1
    +                          },
    +                          "SIZE_WORD": {
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "HIGH_PRIORITY": {
    +                    "description": "HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.\\n\\n\n                This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "DMA Channel Enable.\\n\n                When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH4_AL1_CTRL": {
    +              "description": "Alias for channel 4 CTRL register",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH4_AL1_READ_ADDR": {
    +              "description": "Alias for channel 4 READ_ADDR register",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH4_AL1_WRITE_ADDR": {
    +              "description": "Alias for channel 4 WRITE_ADDR register",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH4_AL1_TRANS_COUNT_TRIG": {
    +              "description": "Alias for channel 4 TRANS_COUNT register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH4_AL2_CTRL": {
    +              "description": "Alias for channel 4 CTRL register",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH4_AL2_TRANS_COUNT": {
    +              "description": "Alias for channel 4 TRANS_COUNT register",
    +              "offset": 292,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH4_AL2_READ_ADDR": {
    +              "description": "Alias for channel 4 READ_ADDR register",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH4_AL2_WRITE_ADDR_TRIG": {
    +              "description": "Alias for channel 4 WRITE_ADDR register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 300,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH4_AL3_CTRL": {
    +              "description": "Alias for channel 4 CTRL register",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH4_AL3_WRITE_ADDR": {
    +              "description": "Alias for channel 4 WRITE_ADDR register",
    +              "offset": 308,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH4_AL3_TRANS_COUNT": {
    +              "description": "Alias for channel 4 TRANS_COUNT register",
    +              "offset": 312,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH4_AL3_READ_ADDR_TRIG": {
    +              "description": "Alias for channel 4 READ_ADDR register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 316,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH5_READ_ADDR": {
    +              "description": "DMA Channel 5 Read Address pointer\\n\n            This register updates automatically each time a read completes. The current value is the next address to be read by this channel.",
    +              "offset": 320,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH5_WRITE_ADDR": {
    +              "description": "DMA Channel 5 Write Address pointer\\n\n            This register updates automatically each time a write completes. The current value is the next address to be written by this channel.",
    +              "offset": 324,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH5_TRANS_COUNT": {
    +              "description": "DMA Channel 5 Transfer Count\\n\n            Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).\\n\\n\n            When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.\\n\\n\n            Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.\\n\\n\n            The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH5_CTRL_TRIG": {
    +              "description": "DMA Channel 5 Control and Status",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "AHB_ERROR": {
    +                    "description": "Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "READ_ERROR": {
    +                    "description": "If 1, the channel received a read bus error. Write one to clear.\\n\n                READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "WRITE_ERROR": {
    +                    "description": "If 1, the channel received a write bus error. Write one to clear.\\n\n                WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "BUSY": {
    +                    "description": "This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.\\n\\n\n                To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SNIFF_EN": {
    +                    "description": "If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.\\n\\n\n                This allows checksum to be enabled or disabled on a per-control- block basis.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "BSWAP": {
    +                    "description": "Apply byte-swap transformation to DMA data.\\n\n                For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "IRQ_QUIET": {
    +                    "description": "In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.\\n\\n\n                This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TREQ_SEL": {
    +                    "description": "Select a Transfer Request signal.\\n\n                The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).\\n\n                0x0 to 0x3a -> select DREQ n as TREQ",
    +                    "offset": 15,
    +                    "size": 6,
    +                    "enum": {
    +                      "size": 6,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TIMER0": {
    +                            "description": "Select Timer 0 as TREQ",
    +                            "value": 59
    +                          },
    +                          "TIMER1": {
    +                            "description": "Select Timer 1 as TREQ",
    +                            "value": 60
    +                          },
    +                          "TIMER2": {
    +                            "description": "Select Timer 2 as TREQ (Optional)",
    +                            "value": 61
    +                          },
    +                          "TIMER3": {
    +                            "description": "Select Timer 3 as TREQ (Optional)",
    +                            "value": 62
    +                          },
    +                          "PERMANENT": {
    +                            "description": "Permanent request, for unpaced transfers.",
    +                            "value": 63
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CHAIN_TO": {
    +                    "description": "When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "RING_SEL": {
    +                    "description": "Select whether RING_SIZE applies to read or write addresses.\\n\n                If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "RING_SIZE": {
    +                    "description": "Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.\\n\\n\n                Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.",
    +                    "offset": 6,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RING_NONE": {
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INCR_WRITE": {
    +                    "description": "If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.\\n\\n\n                Generally this should be disabled for memory-to-peripheral transfers.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INCR_READ": {
    +                    "description": "If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.\\n\\n\n                Generally this should be disabled for peripheral-to-memory transfers.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DATA_SIZE": {
    +                    "description": "Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SIZE_BYTE": {
    +                            "value": 0
    +                          },
    +                          "SIZE_HALFWORD": {
    +                            "value": 1
    +                          },
    +                          "SIZE_WORD": {
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "HIGH_PRIORITY": {
    +                    "description": "HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.\\n\\n\n                This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "DMA Channel Enable.\\n\n                When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH5_AL1_CTRL": {
    +              "description": "Alias for channel 5 CTRL register",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH5_AL1_READ_ADDR": {
    +              "description": "Alias for channel 5 READ_ADDR register",
    +              "offset": 340,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH5_AL1_WRITE_ADDR": {
    +              "description": "Alias for channel 5 WRITE_ADDR register",
    +              "offset": 344,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH5_AL1_TRANS_COUNT_TRIG": {
    +              "description": "Alias for channel 5 TRANS_COUNT register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 348,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH5_AL2_CTRL": {
    +              "description": "Alias for channel 5 CTRL register",
    +              "offset": 352,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH5_AL2_TRANS_COUNT": {
    +              "description": "Alias for channel 5 TRANS_COUNT register",
    +              "offset": 356,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH5_AL2_READ_ADDR": {
    +              "description": "Alias for channel 5 READ_ADDR register",
    +              "offset": 360,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH5_AL2_WRITE_ADDR_TRIG": {
    +              "description": "Alias for channel 5 WRITE_ADDR register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 364,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH5_AL3_CTRL": {
    +              "description": "Alias for channel 5 CTRL register",
    +              "offset": 368,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH5_AL3_WRITE_ADDR": {
    +              "description": "Alias for channel 5 WRITE_ADDR register",
    +              "offset": 372,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH5_AL3_TRANS_COUNT": {
    +              "description": "Alias for channel 5 TRANS_COUNT register",
    +              "offset": 376,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH5_AL3_READ_ADDR_TRIG": {
    +              "description": "Alias for channel 5 READ_ADDR register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 380,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH6_READ_ADDR": {
    +              "description": "DMA Channel 6 Read Address pointer\\n\n            This register updates automatically each time a read completes. The current value is the next address to be read by this channel.",
    +              "offset": 384,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH6_WRITE_ADDR": {
    +              "description": "DMA Channel 6 Write Address pointer\\n\n            This register updates automatically each time a write completes. The current value is the next address to be written by this channel.",
    +              "offset": 388,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH6_TRANS_COUNT": {
    +              "description": "DMA Channel 6 Transfer Count\\n\n            Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).\\n\\n\n            When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.\\n\\n\n            Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.\\n\\n\n            The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.",
    +              "offset": 392,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH6_CTRL_TRIG": {
    +              "description": "DMA Channel 6 Control and Status",
    +              "offset": 396,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "AHB_ERROR": {
    +                    "description": "Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "READ_ERROR": {
    +                    "description": "If 1, the channel received a read bus error. Write one to clear.\\n\n                READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "WRITE_ERROR": {
    +                    "description": "If 1, the channel received a write bus error. Write one to clear.\\n\n                WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "BUSY": {
    +                    "description": "This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.\\n\\n\n                To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SNIFF_EN": {
    +                    "description": "If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.\\n\\n\n                This allows checksum to be enabled or disabled on a per-control- block basis.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "BSWAP": {
    +                    "description": "Apply byte-swap transformation to DMA data.\\n\n                For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "IRQ_QUIET": {
    +                    "description": "In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.\\n\\n\n                This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TREQ_SEL": {
    +                    "description": "Select a Transfer Request signal.\\n\n                The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).\\n\n                0x0 to 0x3a -> select DREQ n as TREQ",
    +                    "offset": 15,
    +                    "size": 6,
    +                    "enum": {
    +                      "size": 6,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TIMER0": {
    +                            "description": "Select Timer 0 as TREQ",
    +                            "value": 59
    +                          },
    +                          "TIMER1": {
    +                            "description": "Select Timer 1 as TREQ",
    +                            "value": 60
    +                          },
    +                          "TIMER2": {
    +                            "description": "Select Timer 2 as TREQ (Optional)",
    +                            "value": 61
    +                          },
    +                          "TIMER3": {
    +                            "description": "Select Timer 3 as TREQ (Optional)",
    +                            "value": 62
    +                          },
    +                          "PERMANENT": {
    +                            "description": "Permanent request, for unpaced transfers.",
    +                            "value": 63
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CHAIN_TO": {
    +                    "description": "When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "RING_SEL": {
    +                    "description": "Select whether RING_SIZE applies to read or write addresses.\\n\n                If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "RING_SIZE": {
    +                    "description": "Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.\\n\\n\n                Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.",
    +                    "offset": 6,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RING_NONE": {
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INCR_WRITE": {
    +                    "description": "If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.\\n\\n\n                Generally this should be disabled for memory-to-peripheral transfers.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INCR_READ": {
    +                    "description": "If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.\\n\\n\n                Generally this should be disabled for peripheral-to-memory transfers.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DATA_SIZE": {
    +                    "description": "Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SIZE_BYTE": {
    +                            "value": 0
    +                          },
    +                          "SIZE_HALFWORD": {
    +                            "value": 1
    +                          },
    +                          "SIZE_WORD": {
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "HIGH_PRIORITY": {
    +                    "description": "HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.\\n\\n\n                This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "DMA Channel Enable.\\n\n                When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH6_AL1_CTRL": {
    +              "description": "Alias for channel 6 CTRL register",
    +              "offset": 400,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH6_AL1_READ_ADDR": {
    +              "description": "Alias for channel 6 READ_ADDR register",
    +              "offset": 404,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH6_AL1_WRITE_ADDR": {
    +              "description": "Alias for channel 6 WRITE_ADDR register",
    +              "offset": 408,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH6_AL1_TRANS_COUNT_TRIG": {
    +              "description": "Alias for channel 6 TRANS_COUNT register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 412,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH6_AL2_CTRL": {
    +              "description": "Alias for channel 6 CTRL register",
    +              "offset": 416,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH6_AL2_TRANS_COUNT": {
    +              "description": "Alias for channel 6 TRANS_COUNT register",
    +              "offset": 420,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH6_AL2_READ_ADDR": {
    +              "description": "Alias for channel 6 READ_ADDR register",
    +              "offset": 424,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH6_AL2_WRITE_ADDR_TRIG": {
    +              "description": "Alias for channel 6 WRITE_ADDR register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 428,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH6_AL3_CTRL": {
    +              "description": "Alias for channel 6 CTRL register",
    +              "offset": 432,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH6_AL3_WRITE_ADDR": {
    +              "description": "Alias for channel 6 WRITE_ADDR register",
    +              "offset": 436,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH6_AL3_TRANS_COUNT": {
    +              "description": "Alias for channel 6 TRANS_COUNT register",
    +              "offset": 440,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH6_AL3_READ_ADDR_TRIG": {
    +              "description": "Alias for channel 6 READ_ADDR register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 444,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH7_READ_ADDR": {
    +              "description": "DMA Channel 7 Read Address pointer\\n\n            This register updates automatically each time a read completes. The current value is the next address to be read by this channel.",
    +              "offset": 448,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH7_WRITE_ADDR": {
    +              "description": "DMA Channel 7 Write Address pointer\\n\n            This register updates automatically each time a write completes. The current value is the next address to be written by this channel.",
    +              "offset": 452,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH7_TRANS_COUNT": {
    +              "description": "DMA Channel 7 Transfer Count\\n\n            Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).\\n\\n\n            When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.\\n\\n\n            Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.\\n\\n\n            The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.",
    +              "offset": 456,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH7_CTRL_TRIG": {
    +              "description": "DMA Channel 7 Control and Status",
    +              "offset": 460,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "AHB_ERROR": {
    +                    "description": "Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "READ_ERROR": {
    +                    "description": "If 1, the channel received a read bus error. Write one to clear.\\n\n                READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "WRITE_ERROR": {
    +                    "description": "If 1, the channel received a write bus error. Write one to clear.\\n\n                WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "BUSY": {
    +                    "description": "This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.\\n\\n\n                To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SNIFF_EN": {
    +                    "description": "If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.\\n\\n\n                This allows checksum to be enabled or disabled on a per-control- block basis.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "BSWAP": {
    +                    "description": "Apply byte-swap transformation to DMA data.\\n\n                For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "IRQ_QUIET": {
    +                    "description": "In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.\\n\\n\n                This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TREQ_SEL": {
    +                    "description": "Select a Transfer Request signal.\\n\n                The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).\\n\n                0x0 to 0x3a -> select DREQ n as TREQ",
    +                    "offset": 15,
    +                    "size": 6,
    +                    "enum": {
    +                      "size": 6,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TIMER0": {
    +                            "description": "Select Timer 0 as TREQ",
    +                            "value": 59
    +                          },
    +                          "TIMER1": {
    +                            "description": "Select Timer 1 as TREQ",
    +                            "value": 60
    +                          },
    +                          "TIMER2": {
    +                            "description": "Select Timer 2 as TREQ (Optional)",
    +                            "value": 61
    +                          },
    +                          "TIMER3": {
    +                            "description": "Select Timer 3 as TREQ (Optional)",
    +                            "value": 62
    +                          },
    +                          "PERMANENT": {
    +                            "description": "Permanent request, for unpaced transfers.",
    +                            "value": 63
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CHAIN_TO": {
    +                    "description": "When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "RING_SEL": {
    +                    "description": "Select whether RING_SIZE applies to read or write addresses.\\n\n                If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "RING_SIZE": {
    +                    "description": "Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.\\n\\n\n                Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.",
    +                    "offset": 6,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RING_NONE": {
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INCR_WRITE": {
    +                    "description": "If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.\\n\\n\n                Generally this should be disabled for memory-to-peripheral transfers.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INCR_READ": {
    +                    "description": "If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.\\n\\n\n                Generally this should be disabled for peripheral-to-memory transfers.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DATA_SIZE": {
    +                    "description": "Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SIZE_BYTE": {
    +                            "value": 0
    +                          },
    +                          "SIZE_HALFWORD": {
    +                            "value": 1
    +                          },
    +                          "SIZE_WORD": {
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "HIGH_PRIORITY": {
    +                    "description": "HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.\\n\\n\n                This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "DMA Channel Enable.\\n\n                When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH7_AL1_CTRL": {
    +              "description": "Alias for channel 7 CTRL register",
    +              "offset": 464,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH7_AL1_READ_ADDR": {
    +              "description": "Alias for channel 7 READ_ADDR register",
    +              "offset": 468,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH7_AL1_WRITE_ADDR": {
    +              "description": "Alias for channel 7 WRITE_ADDR register",
    +              "offset": 472,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH7_AL1_TRANS_COUNT_TRIG": {
    +              "description": "Alias for channel 7 TRANS_COUNT register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 476,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH7_AL2_CTRL": {
    +              "description": "Alias for channel 7 CTRL register",
    +              "offset": 480,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH7_AL2_TRANS_COUNT": {
    +              "description": "Alias for channel 7 TRANS_COUNT register",
    +              "offset": 484,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH7_AL2_READ_ADDR": {
    +              "description": "Alias for channel 7 READ_ADDR register",
    +              "offset": 488,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH7_AL2_WRITE_ADDR_TRIG": {
    +              "description": "Alias for channel 7 WRITE_ADDR register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 492,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH7_AL3_CTRL": {
    +              "description": "Alias for channel 7 CTRL register",
    +              "offset": 496,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH7_AL3_WRITE_ADDR": {
    +              "description": "Alias for channel 7 WRITE_ADDR register",
    +              "offset": 500,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH7_AL3_TRANS_COUNT": {
    +              "description": "Alias for channel 7 TRANS_COUNT register",
    +              "offset": 504,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH7_AL3_READ_ADDR_TRIG": {
    +              "description": "Alias for channel 7 READ_ADDR register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 508,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH8_READ_ADDR": {
    +              "description": "DMA Channel 8 Read Address pointer\\n\n            This register updates automatically each time a read completes. The current value is the next address to be read by this channel.",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH8_WRITE_ADDR": {
    +              "description": "DMA Channel 8 Write Address pointer\\n\n            This register updates automatically each time a write completes. The current value is the next address to be written by this channel.",
    +              "offset": 516,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH8_TRANS_COUNT": {
    +              "description": "DMA Channel 8 Transfer Count\\n\n            Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).\\n\\n\n            When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.\\n\\n\n            Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.\\n\\n\n            The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.",
    +              "offset": 520,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH8_CTRL_TRIG": {
    +              "description": "DMA Channel 8 Control and Status",
    +              "offset": 524,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "AHB_ERROR": {
    +                    "description": "Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "READ_ERROR": {
    +                    "description": "If 1, the channel received a read bus error. Write one to clear.\\n\n                READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "WRITE_ERROR": {
    +                    "description": "If 1, the channel received a write bus error. Write one to clear.\\n\n                WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "BUSY": {
    +                    "description": "This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.\\n\\n\n                To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SNIFF_EN": {
    +                    "description": "If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.\\n\\n\n                This allows checksum to be enabled or disabled on a per-control- block basis.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "BSWAP": {
    +                    "description": "Apply byte-swap transformation to DMA data.\\n\n                For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "IRQ_QUIET": {
    +                    "description": "In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.\\n\\n\n                This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TREQ_SEL": {
    +                    "description": "Select a Transfer Request signal.\\n\n                The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).\\n\n                0x0 to 0x3a -> select DREQ n as TREQ",
    +                    "offset": 15,
    +                    "size": 6,
    +                    "enum": {
    +                      "size": 6,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TIMER0": {
    +                            "description": "Select Timer 0 as TREQ",
    +                            "value": 59
    +                          },
    +                          "TIMER1": {
    +                            "description": "Select Timer 1 as TREQ",
    +                            "value": 60
    +                          },
    +                          "TIMER2": {
    +                            "description": "Select Timer 2 as TREQ (Optional)",
    +                            "value": 61
    +                          },
    +                          "TIMER3": {
    +                            "description": "Select Timer 3 as TREQ (Optional)",
    +                            "value": 62
    +                          },
    +                          "PERMANENT": {
    +                            "description": "Permanent request, for unpaced transfers.",
    +                            "value": 63
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CHAIN_TO": {
    +                    "description": "When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "RING_SEL": {
    +                    "description": "Select whether RING_SIZE applies to read or write addresses.\\n\n                If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "RING_SIZE": {
    +                    "description": "Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.\\n\\n\n                Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.",
    +                    "offset": 6,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RING_NONE": {
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INCR_WRITE": {
    +                    "description": "If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.\\n\\n\n                Generally this should be disabled for memory-to-peripheral transfers.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INCR_READ": {
    +                    "description": "If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.\\n\\n\n                Generally this should be disabled for peripheral-to-memory transfers.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DATA_SIZE": {
    +                    "description": "Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SIZE_BYTE": {
    +                            "value": 0
    +                          },
    +                          "SIZE_HALFWORD": {
    +                            "value": 1
    +                          },
    +                          "SIZE_WORD": {
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "HIGH_PRIORITY": {
    +                    "description": "HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.\\n\\n\n                This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "DMA Channel Enable.\\n\n                When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH8_AL1_CTRL": {
    +              "description": "Alias for channel 8 CTRL register",
    +              "offset": 528,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH8_AL1_READ_ADDR": {
    +              "description": "Alias for channel 8 READ_ADDR register",
    +              "offset": 532,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH8_AL1_WRITE_ADDR": {
    +              "description": "Alias for channel 8 WRITE_ADDR register",
    +              "offset": 536,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH8_AL1_TRANS_COUNT_TRIG": {
    +              "description": "Alias for channel 8 TRANS_COUNT register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 540,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH8_AL2_CTRL": {
    +              "description": "Alias for channel 8 CTRL register",
    +              "offset": 544,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH8_AL2_TRANS_COUNT": {
    +              "description": "Alias for channel 8 TRANS_COUNT register",
    +              "offset": 548,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH8_AL2_READ_ADDR": {
    +              "description": "Alias for channel 8 READ_ADDR register",
    +              "offset": 552,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH8_AL2_WRITE_ADDR_TRIG": {
    +              "description": "Alias for channel 8 WRITE_ADDR register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 556,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH8_AL3_CTRL": {
    +              "description": "Alias for channel 8 CTRL register",
    +              "offset": 560,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH8_AL3_WRITE_ADDR": {
    +              "description": "Alias for channel 8 WRITE_ADDR register",
    +              "offset": 564,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH8_AL3_TRANS_COUNT": {
    +              "description": "Alias for channel 8 TRANS_COUNT register",
    +              "offset": 568,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH8_AL3_READ_ADDR_TRIG": {
    +              "description": "Alias for channel 8 READ_ADDR register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 572,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH9_READ_ADDR": {
    +              "description": "DMA Channel 9 Read Address pointer\\n\n            This register updates automatically each time a read completes. The current value is the next address to be read by this channel.",
    +              "offset": 576,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH9_WRITE_ADDR": {
    +              "description": "DMA Channel 9 Write Address pointer\\n\n            This register updates automatically each time a write completes. The current value is the next address to be written by this channel.",
    +              "offset": 580,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH9_TRANS_COUNT": {
    +              "description": "DMA Channel 9 Transfer Count\\n\n            Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).\\n\\n\n            When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.\\n\\n\n            Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.\\n\\n\n            The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.",
    +              "offset": 584,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH9_CTRL_TRIG": {
    +              "description": "DMA Channel 9 Control and Status",
    +              "offset": 588,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "AHB_ERROR": {
    +                    "description": "Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "READ_ERROR": {
    +                    "description": "If 1, the channel received a read bus error. Write one to clear.\\n\n                READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "WRITE_ERROR": {
    +                    "description": "If 1, the channel received a write bus error. Write one to clear.\\n\n                WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "BUSY": {
    +                    "description": "This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.\\n\\n\n                To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SNIFF_EN": {
    +                    "description": "If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.\\n\\n\n                This allows checksum to be enabled or disabled on a per-control- block basis.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "BSWAP": {
    +                    "description": "Apply byte-swap transformation to DMA data.\\n\n                For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "IRQ_QUIET": {
    +                    "description": "In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.\\n\\n\n                This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TREQ_SEL": {
    +                    "description": "Select a Transfer Request signal.\\n\n                The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).\\n\n                0x0 to 0x3a -> select DREQ n as TREQ",
    +                    "offset": 15,
    +                    "size": 6,
    +                    "enum": {
    +                      "size": 6,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TIMER0": {
    +                            "description": "Select Timer 0 as TREQ",
    +                            "value": 59
    +                          },
    +                          "TIMER1": {
    +                            "description": "Select Timer 1 as TREQ",
    +                            "value": 60
    +                          },
    +                          "TIMER2": {
    +                            "description": "Select Timer 2 as TREQ (Optional)",
    +                            "value": 61
    +                          },
    +                          "TIMER3": {
    +                            "description": "Select Timer 3 as TREQ (Optional)",
    +                            "value": 62
    +                          },
    +                          "PERMANENT": {
    +                            "description": "Permanent request, for unpaced transfers.",
    +                            "value": 63
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CHAIN_TO": {
    +                    "description": "When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "RING_SEL": {
    +                    "description": "Select whether RING_SIZE applies to read or write addresses.\\n\n                If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "RING_SIZE": {
    +                    "description": "Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.\\n\\n\n                Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.",
    +                    "offset": 6,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RING_NONE": {
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INCR_WRITE": {
    +                    "description": "If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.\\n\\n\n                Generally this should be disabled for memory-to-peripheral transfers.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INCR_READ": {
    +                    "description": "If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.\\n\\n\n                Generally this should be disabled for peripheral-to-memory transfers.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DATA_SIZE": {
    +                    "description": "Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SIZE_BYTE": {
    +                            "value": 0
    +                          },
    +                          "SIZE_HALFWORD": {
    +                            "value": 1
    +                          },
    +                          "SIZE_WORD": {
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "HIGH_PRIORITY": {
    +                    "description": "HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.\\n\\n\n                This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "DMA Channel Enable.\\n\n                When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH9_AL1_CTRL": {
    +              "description": "Alias for channel 9 CTRL register",
    +              "offset": 592,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH9_AL1_READ_ADDR": {
    +              "description": "Alias for channel 9 READ_ADDR register",
    +              "offset": 596,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH9_AL1_WRITE_ADDR": {
    +              "description": "Alias for channel 9 WRITE_ADDR register",
    +              "offset": 600,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH9_AL1_TRANS_COUNT_TRIG": {
    +              "description": "Alias for channel 9 TRANS_COUNT register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 604,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH9_AL2_CTRL": {
    +              "description": "Alias for channel 9 CTRL register",
    +              "offset": 608,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH9_AL2_TRANS_COUNT": {
    +              "description": "Alias for channel 9 TRANS_COUNT register",
    +              "offset": 612,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH9_AL2_READ_ADDR": {
    +              "description": "Alias for channel 9 READ_ADDR register",
    +              "offset": 616,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH9_AL2_WRITE_ADDR_TRIG": {
    +              "description": "Alias for channel 9 WRITE_ADDR register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 620,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH9_AL3_CTRL": {
    +              "description": "Alias for channel 9 CTRL register",
    +              "offset": 624,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH9_AL3_WRITE_ADDR": {
    +              "description": "Alias for channel 9 WRITE_ADDR register",
    +              "offset": 628,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH9_AL3_TRANS_COUNT": {
    +              "description": "Alias for channel 9 TRANS_COUNT register",
    +              "offset": 632,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH9_AL3_READ_ADDR_TRIG": {
    +              "description": "Alias for channel 9 READ_ADDR register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 636,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH10_READ_ADDR": {
    +              "description": "DMA Channel 10 Read Address pointer\\n\n            This register updates automatically each time a read completes. The current value is the next address to be read by this channel.",
    +              "offset": 640,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH10_WRITE_ADDR": {
    +              "description": "DMA Channel 10 Write Address pointer\\n\n            This register updates automatically each time a write completes. The current value is the next address to be written by this channel.",
    +              "offset": 644,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH10_TRANS_COUNT": {
    +              "description": "DMA Channel 10 Transfer Count\\n\n            Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).\\n\\n\n            When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.\\n\\n\n            Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.\\n\\n\n            The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.",
    +              "offset": 648,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH10_CTRL_TRIG": {
    +              "description": "DMA Channel 10 Control and Status",
    +              "offset": 652,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "AHB_ERROR": {
    +                    "description": "Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "READ_ERROR": {
    +                    "description": "If 1, the channel received a read bus error. Write one to clear.\\n\n                READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "WRITE_ERROR": {
    +                    "description": "If 1, the channel received a write bus error. Write one to clear.\\n\n                WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "BUSY": {
    +                    "description": "This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.\\n\\n\n                To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SNIFF_EN": {
    +                    "description": "If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.\\n\\n\n                This allows checksum to be enabled or disabled on a per-control- block basis.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "BSWAP": {
    +                    "description": "Apply byte-swap transformation to DMA data.\\n\n                For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "IRQ_QUIET": {
    +                    "description": "In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.\\n\\n\n                This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TREQ_SEL": {
    +                    "description": "Select a Transfer Request signal.\\n\n                The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).\\n\n                0x0 to 0x3a -> select DREQ n as TREQ",
    +                    "offset": 15,
    +                    "size": 6,
    +                    "enum": {
    +                      "size": 6,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TIMER0": {
    +                            "description": "Select Timer 0 as TREQ",
    +                            "value": 59
    +                          },
    +                          "TIMER1": {
    +                            "description": "Select Timer 1 as TREQ",
    +                            "value": 60
    +                          },
    +                          "TIMER2": {
    +                            "description": "Select Timer 2 as TREQ (Optional)",
    +                            "value": 61
    +                          },
    +                          "TIMER3": {
    +                            "description": "Select Timer 3 as TREQ (Optional)",
    +                            "value": 62
    +                          },
    +                          "PERMANENT": {
    +                            "description": "Permanent request, for unpaced transfers.",
    +                            "value": 63
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CHAIN_TO": {
    +                    "description": "When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "RING_SEL": {
    +                    "description": "Select whether RING_SIZE applies to read or write addresses.\\n\n                If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "RING_SIZE": {
    +                    "description": "Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.\\n\\n\n                Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.",
    +                    "offset": 6,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RING_NONE": {
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INCR_WRITE": {
    +                    "description": "If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.\\n\\n\n                Generally this should be disabled for memory-to-peripheral transfers.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INCR_READ": {
    +                    "description": "If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.\\n\\n\n                Generally this should be disabled for peripheral-to-memory transfers.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DATA_SIZE": {
    +                    "description": "Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SIZE_BYTE": {
    +                            "value": 0
    +                          },
    +                          "SIZE_HALFWORD": {
    +                            "value": 1
    +                          },
    +                          "SIZE_WORD": {
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "HIGH_PRIORITY": {
    +                    "description": "HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.\\n\\n\n                This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "DMA Channel Enable.\\n\n                When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH10_AL1_CTRL": {
    +              "description": "Alias for channel 10 CTRL register",
    +              "offset": 656,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH10_AL1_READ_ADDR": {
    +              "description": "Alias for channel 10 READ_ADDR register",
    +              "offset": 660,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH10_AL1_WRITE_ADDR": {
    +              "description": "Alias for channel 10 WRITE_ADDR register",
    +              "offset": 664,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH10_AL1_TRANS_COUNT_TRIG": {
    +              "description": "Alias for channel 10 TRANS_COUNT register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 668,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH10_AL2_CTRL": {
    +              "description": "Alias for channel 10 CTRL register",
    +              "offset": 672,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH10_AL2_TRANS_COUNT": {
    +              "description": "Alias for channel 10 TRANS_COUNT register",
    +              "offset": 676,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH10_AL2_READ_ADDR": {
    +              "description": "Alias for channel 10 READ_ADDR register",
    +              "offset": 680,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH10_AL2_WRITE_ADDR_TRIG": {
    +              "description": "Alias for channel 10 WRITE_ADDR register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 684,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH10_AL3_CTRL": {
    +              "description": "Alias for channel 10 CTRL register",
    +              "offset": 688,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH10_AL3_WRITE_ADDR": {
    +              "description": "Alias for channel 10 WRITE_ADDR register",
    +              "offset": 692,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH10_AL3_TRANS_COUNT": {
    +              "description": "Alias for channel 10 TRANS_COUNT register",
    +              "offset": 696,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH10_AL3_READ_ADDR_TRIG": {
    +              "description": "Alias for channel 10 READ_ADDR register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 700,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH11_READ_ADDR": {
    +              "description": "DMA Channel 11 Read Address pointer\\n\n            This register updates automatically each time a read completes. The current value is the next address to be read by this channel.",
    +              "offset": 704,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH11_WRITE_ADDR": {
    +              "description": "DMA Channel 11 Write Address pointer\\n\n            This register updates automatically each time a write completes. The current value is the next address to be written by this channel.",
    +              "offset": 708,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH11_TRANS_COUNT": {
    +              "description": "DMA Channel 11 Transfer Count\\n\n            Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).\\n\\n\n            When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.\\n\\n\n            Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.\\n\\n\n            The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.",
    +              "offset": 712,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH11_CTRL_TRIG": {
    +              "description": "DMA Channel 11 Control and Status",
    +              "offset": 716,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "AHB_ERROR": {
    +                    "description": "Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "READ_ERROR": {
    +                    "description": "If 1, the channel received a read bus error. Write one to clear.\\n\n                READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "WRITE_ERROR": {
    +                    "description": "If 1, the channel received a write bus error. Write one to clear.\\n\n                WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "BUSY": {
    +                    "description": "This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.\\n\\n\n                To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SNIFF_EN": {
    +                    "description": "If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.\\n\\n\n                This allows checksum to be enabled or disabled on a per-control- block basis.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "BSWAP": {
    +                    "description": "Apply byte-swap transformation to DMA data.\\n\n                For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "IRQ_QUIET": {
    +                    "description": "In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.\\n\\n\n                This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TREQ_SEL": {
    +                    "description": "Select a Transfer Request signal.\\n\n                The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).\\n\n                0x0 to 0x3a -> select DREQ n as TREQ",
    +                    "offset": 15,
    +                    "size": 6,
    +                    "enum": {
    +                      "size": 6,
    +                      "children": {
    +                        "enum_fields": {
    +                          "TIMER0": {
    +                            "description": "Select Timer 0 as TREQ",
    +                            "value": 59
    +                          },
    +                          "TIMER1": {
    +                            "description": "Select Timer 1 as TREQ",
    +                            "value": 60
    +                          },
    +                          "TIMER2": {
    +                            "description": "Select Timer 2 as TREQ (Optional)",
    +                            "value": 61
    +                          },
    +                          "TIMER3": {
    +                            "description": "Select Timer 3 as TREQ (Optional)",
    +                            "value": 62
    +                          },
    +                          "PERMANENT": {
    +                            "description": "Permanent request, for unpaced transfers.",
    +                            "value": 63
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "CHAIN_TO": {
    +                    "description": "When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.",
    +                    "offset": 11,
    +                    "size": 4
    +                  },
    +                  "RING_SEL": {
    +                    "description": "Select whether RING_SIZE applies to read or write addresses.\\n\n                If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "RING_SIZE": {
    +                    "description": "Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.\\n\\n\n                Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.",
    +                    "offset": 6,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "RING_NONE": {
    +                            "value": 0
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INCR_WRITE": {
    +                    "description": "If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.\\n\\n\n                Generally this should be disabled for memory-to-peripheral transfers.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "INCR_READ": {
    +                    "description": "If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.\\n\\n\n                Generally this should be disabled for peripheral-to-memory transfers.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DATA_SIZE": {
    +                    "description": "Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "SIZE_BYTE": {
    +                            "value": 0
    +                          },
    +                          "SIZE_HALFWORD": {
    +                            "value": 1
    +                          },
    +                          "SIZE_WORD": {
    +                            "value": 2
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "HIGH_PRIORITY": {
    +                    "description": "HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.\\n\\n\n                This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "DMA Channel Enable.\\n\n                When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CH11_AL1_CTRL": {
    +              "description": "Alias for channel 11 CTRL register",
    +              "offset": 720,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH11_AL1_READ_ADDR": {
    +              "description": "Alias for channel 11 READ_ADDR register",
    +              "offset": 724,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH11_AL1_WRITE_ADDR": {
    +              "description": "Alias for channel 11 WRITE_ADDR register",
    +              "offset": 728,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH11_AL1_TRANS_COUNT_TRIG": {
    +              "description": "Alias for channel 11 TRANS_COUNT register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 732,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH11_AL2_CTRL": {
    +              "description": "Alias for channel 11 CTRL register",
    +              "offset": 736,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH11_AL2_TRANS_COUNT": {
    +              "description": "Alias for channel 11 TRANS_COUNT register",
    +              "offset": 740,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH11_AL2_READ_ADDR": {
    +              "description": "Alias for channel 11 READ_ADDR register",
    +              "offset": 744,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH11_AL2_WRITE_ADDR_TRIG": {
    +              "description": "Alias for channel 11 WRITE_ADDR register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 748,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH11_AL3_CTRL": {
    +              "description": "Alias for channel 11 CTRL register",
    +              "offset": 752,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH11_AL3_WRITE_ADDR": {
    +              "description": "Alias for channel 11 WRITE_ADDR register",
    +              "offset": 756,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH11_AL3_TRANS_COUNT": {
    +              "description": "Alias for channel 11 TRANS_COUNT register",
    +              "offset": 760,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "CH11_AL3_READ_ADDR_TRIG": {
    +              "description": "Alias for channel 11 READ_ADDR register\\n\n            This is a trigger register (0xc). Writing a nonzero value will\\n\n            reload the channel counter and start the channel.",
    +              "offset": 764,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "INTR": {
    +              "description": "Interrupt Status (raw)",
    +              "offset": 1024,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INTR": {
    +                    "description": "Raw interrupt status for DMA Channels 0..15. Bit n corresponds to channel n. Ignores any masking or forcing. Channel interrupts can be cleared by writing a bit mask to INTR, INTS0 or INTS1.\\n\\n\n                Channel interrupts can be routed to either of two system-level IRQs based on INTE0 and INTE1.\\n\\n\n                This can be used vector different channel interrupts to different ISRs: this might be done to allow NVIC IRQ preemption for more time-critical channels, or to spread IRQ load across different cores.\\n\\n\n                It is also valid to ignore this behaviour and just use INTE0/INTS0/IRQ 0.",
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INTE0": {
    +              "description": "Interrupt Enables for IRQ 0",
    +              "offset": 1028,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INTE0": {
    +                    "description": "Set bit n to pass interrupts from channel n to DMA IRQ 0.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "INTF0": {
    +              "description": "Force Interrupts",
    +              "offset": 1032,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INTF0": {
    +                    "description": "Write 1s to force the corresponding bits in INTE0. The interrupt remains asserted until INTF0 is cleared.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "INTS0": {
    +              "description": "Interrupt Status for IRQ 0",
    +              "offset": 1036,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INTS0": {
    +                    "description": "Indicates active channel interrupt requests which are currently causing IRQ 0 to be asserted.\\n\n                Channel interrupts can be cleared by writing a bit mask here.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "INTE1": {
    +              "description": "Interrupt Enables for IRQ 1",
    +              "offset": 1044,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INTE1": {
    +                    "description": "Set bit n to pass interrupts from channel n to DMA IRQ 1.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "INTF1": {
    +              "description": "Force Interrupts for IRQ 1",
    +              "offset": 1048,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INTF1": {
    +                    "description": "Write 1s to force the corresponding bits in INTE0. The interrupt remains asserted until INTF0 is cleared.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "INTS1": {
    +              "description": "Interrupt Status (masked) for IRQ 1",
    +              "offset": 1052,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "INTS1": {
    +                    "description": "Indicates active channel interrupt requests which are currently causing IRQ 1 to be asserted.\\n\n                Channel interrupts can be cleared by writing a bit mask here.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "TIMER0": {
    +              "description": "Pacing (X/Y) Fractional Timer\\n\n            The pacing timer produces TREQ assertions at a rate set by ((X/Y) * sys_clk). This equation is evaluated every sys_clk cycles and therefore can only generate TREQs at a rate of 1 per sys_clk (i.e. permanent TREQ) or less.",
    +              "offset": 1056,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "X": {
    +                    "description": "Pacing Timer Dividend. Specifies the X value for the (X/Y) fractional timer.",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "Y": {
    +                    "description": "Pacing Timer Divisor. Specifies the Y value for the (X/Y) fractional timer.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "TIMER1": {
    +              "description": "Pacing (X/Y) Fractional Timer\\n\n            The pacing timer produces TREQ assertions at a rate set by ((X/Y) * sys_clk). This equation is evaluated every sys_clk cycles and therefore can only generate TREQs at a rate of 1 per sys_clk (i.e. permanent TREQ) or less.",
    +              "offset": 1060,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "X": {
    +                    "description": "Pacing Timer Dividend. Specifies the X value for the (X/Y) fractional timer.",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "Y": {
    +                    "description": "Pacing Timer Divisor. Specifies the Y value for the (X/Y) fractional timer.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "TIMER2": {
    +              "description": "Pacing (X/Y) Fractional Timer\\n\n            The pacing timer produces TREQ assertions at a rate set by ((X/Y) * sys_clk). This equation is evaluated every sys_clk cycles and therefore can only generate TREQs at a rate of 1 per sys_clk (i.e. permanent TREQ) or less.",
    +              "offset": 1064,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "X": {
    +                    "description": "Pacing Timer Dividend. Specifies the X value for the (X/Y) fractional timer.",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "Y": {
    +                    "description": "Pacing Timer Divisor. Specifies the Y value for the (X/Y) fractional timer.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "TIMER3": {
    +              "description": "Pacing (X/Y) Fractional Timer\\n\n            The pacing timer produces TREQ assertions at a rate set by ((X/Y) * sys_clk). This equation is evaluated every sys_clk cycles and therefore can only generate TREQs at a rate of 1 per sys_clk (i.e. permanent TREQ) or less.",
    +              "offset": 1068,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "X": {
    +                    "description": "Pacing Timer Dividend. Specifies the X value for the (X/Y) fractional timer.",
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "Y": {
    +                    "description": "Pacing Timer Divisor. Specifies the Y value for the (X/Y) fractional timer.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "MULTI_CHAN_TRIGGER": {
    +              "description": "Trigger one or more channels simultaneously",
    +              "offset": 1072,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "MULTI_CHAN_TRIGGER": {
    +                    "description": "Each bit in this register corresponds to a DMA channel. Writing a 1 to the relevant bit is the same as writing to that channel's trigger register; the channel will start if it is currently enabled and not already busy.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SNIFF_CTRL": {
    +              "description": "Sniffer Control",
    +              "offset": 1076,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "OUT_INV": {
    +                    "description": "If set, the result appears inverted (bitwise complement) when read. This does not affect the way the checksum is calculated; the result is transformed on-the-fly between the result register and the bus.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OUT_REV": {
    +                    "description": "If set, the result appears bit-reversed when read. This does not affect the way the checksum is calculated; the result is transformed on-the-fly between the result register and the bus.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "BSWAP": {
    +                    "description": "Locally perform a byte reverse on the sniffed data, before feeding into checksum.\\n\\n\n                Note that the sniff hardware is downstream of the DMA channel byteswap performed in the read master: if channel CTRL_BSWAP and SNIFF_CTRL_BSWAP are both enabled, their effects cancel from the sniffer's point of view.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CALC": {
    +                    "offset": 5,
    +                    "size": 4,
    +                    "enum": {
    +                      "size": 4,
    +                      "children": {
    +                        "enum_fields": {
    +                          "CRC32": {
    +                            "description": "Calculate a CRC-32 (IEEE802.3 polynomial)",
    +                            "value": 0
    +                          },
    +                          "CRC32R": {
    +                            "description": "Calculate a CRC-32 (IEEE802.3 polynomial) with bit reversed data",
    +                            "value": 1
    +                          },
    +                          "CRC16": {
    +                            "description": "Calculate a CRC-16-CCITT",
    +                            "value": 2
    +                          },
    +                          "CRC16R": {
    +                            "description": "Calculate a CRC-16-CCITT with bit reversed data",
    +                            "value": 3
    +                          },
    +                          "EVEN": {
    +                            "description": "XOR reduction over all data. == 1 if the total 1 population count is odd.",
    +                            "value": 14
    +                          },
    +                          "SUM": {
    +                            "description": "Calculate a simple 32-bit checksum (addition with a 32 bit accumulator)",
    +                            "value": 15
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "DMACH": {
    +                    "description": "DMA channel for Sniffer to observe",
    +                    "offset": 1,
    +                    "size": 4
    +                  },
    +                  "EN": {
    +                    "description": "Enable sniffer",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SNIFF_DATA": {
    +              "description": "Data accumulator for sniff hardware\\n\n            Write an initial seed value here before starting a DMA transfer on the channel indicated by SNIFF_CTRL_DMACH. The hardware will update this register each time it observes a read from the indicated channel. Once the channel completes, the final result can be read from this register.",
    +              "offset": 1080,
    +              "size": 32,
    +              "reset_value": 0
    +            },
    +            "FIFO_LEVELS": {
    +              "description": "Debug RAF, WAF, TDF levels",
    +              "offset": 1088,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "RAF_LVL": {
    +                    "description": "Current Read-Address-FIFO fill level",
    +                    "offset": 16,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "WAF_LVL": {
    +                    "description": "Current Write-Address-FIFO fill level",
    +                    "offset": 8,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "TDF_LVL": {
    +                    "description": "Current Transfer-Data-FIFO fill level",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CHAN_ABORT": {
    +              "description": "Abort an in-progress transfer sequence on one or more channels",
    +              "offset": 1092,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CHAN_ABORT": {
    +                    "description": "Each bit corresponds to a channel. Writing a 1 aborts whatever transfer sequence is in progress on that channel. The bit will remain high until any in-flight transfers have been flushed through the address and data FIFOs.\\n\\n\n                After writing, this register must be polled until it returns all-zero. Until this point, it is unsafe to restart the channel.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "N_CHANNELS": {
    +              "description": "The number of channels this DMA instance is equipped with. This DMA supports up to 16 hardware channels, but can be configured with as few as one, to minimise silicon area.",
    +              "offset": 1096,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "N_CHANNELS": {
    +                    "offset": 0,
    +                    "size": 5,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CH0_DBG_CTDREQ": {
    +              "description": "Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.",
    +              "offset": 2048,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CH0_DBG_CTDREQ": {
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "CH0_DBG_TCR": {
    +              "description": "Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer",
    +              "offset": 2052,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "CH1_DBG_CTDREQ": {
    +              "description": "Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.",
    +              "offset": 2112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CH1_DBG_CTDREQ": {
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "CH1_DBG_TCR": {
    +              "description": "Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer",
    +              "offset": 2116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "CH2_DBG_CTDREQ": {
    +              "description": "Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.",
    +              "offset": 2176,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CH2_DBG_CTDREQ": {
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "CH2_DBG_TCR": {
    +              "description": "Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer",
    +              "offset": 2180,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "CH3_DBG_CTDREQ": {
    +              "description": "Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.",
    +              "offset": 2240,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CH3_DBG_CTDREQ": {
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "CH3_DBG_TCR": {
    +              "description": "Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer",
    +              "offset": 2244,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "CH4_DBG_CTDREQ": {
    +              "description": "Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.",
    +              "offset": 2304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CH4_DBG_CTDREQ": {
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "CH4_DBG_TCR": {
    +              "description": "Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer",
    +              "offset": 2308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "CH5_DBG_CTDREQ": {
    +              "description": "Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.",
    +              "offset": 2368,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CH5_DBG_CTDREQ": {
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "CH5_DBG_TCR": {
    +              "description": "Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer",
    +              "offset": 2372,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "CH6_DBG_CTDREQ": {
    +              "description": "Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.",
    +              "offset": 2432,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CH6_DBG_CTDREQ": {
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "CH6_DBG_TCR": {
    +              "description": "Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer",
    +              "offset": 2436,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "CH7_DBG_CTDREQ": {
    +              "description": "Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.",
    +              "offset": 2496,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CH7_DBG_CTDREQ": {
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "CH7_DBG_TCR": {
    +              "description": "Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer",
    +              "offset": 2500,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "CH8_DBG_CTDREQ": {
    +              "description": "Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.",
    +              "offset": 2560,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CH8_DBG_CTDREQ": {
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "CH8_DBG_TCR": {
    +              "description": "Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer",
    +              "offset": 2564,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "CH9_DBG_CTDREQ": {
    +              "description": "Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.",
    +              "offset": 2624,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CH9_DBG_CTDREQ": {
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "CH9_DBG_TCR": {
    +              "description": "Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer",
    +              "offset": 2628,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "CH10_DBG_CTDREQ": {
    +              "description": "Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.",
    +              "offset": 2688,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CH10_DBG_CTDREQ": {
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "CH10_DBG_TCR": {
    +              "description": "Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer",
    +              "offset": 2692,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            },
    +            "CH11_DBG_CTDREQ": {
    +              "description": "Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.",
    +              "offset": 2752,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "CH11_DBG_CTDREQ": {
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "CH11_DBG_TCR": {
    +              "description": "Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer",
    +              "offset": 2756,
    +              "size": 32,
    +              "reset_value": 0,
    +              "access": "read-only"
    +            }
    +          }
    +        }
    +      },
    +      "USBCTRL_DPRAM": {
    +        "description": "DPRAM layout for USB device.",
    +        "children": {
    +          "registers": {
    +            "SETUP_PACKET_LOW": {
    +              "description": "Bytes 0-3 of the SETUP packet from the host.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "WVALUE": {
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "BREQUEST": {
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "BMREQUESTTYPE": {
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SETUP_PACKET_HIGH": {
    +              "description": "Bytes 4-7 of the setup packet from the host.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "WLENGTH": {
    +                    "offset": 16,
    +                    "size": 16
    +                  },
    +                  "WINDEX": {
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP1_IN_CONTROL": {
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP1_OUT_CONTROL": {
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP2_IN_CONTROL": {
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP2_OUT_CONTROL": {
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP3_IN_CONTROL": {
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP3_OUT_CONTROL": {
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP4_IN_CONTROL": {
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP4_OUT_CONTROL": {
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP5_IN_CONTROL": {
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP5_OUT_CONTROL": {
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP6_IN_CONTROL": {
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP6_OUT_CONTROL": {
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP7_IN_CONTROL": {
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP7_OUT_CONTROL": {
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP8_IN_CONTROL": {
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP8_OUT_CONTROL": {
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP9_IN_CONTROL": {
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP9_OUT_CONTROL": {
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP10_IN_CONTROL": {
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP10_OUT_CONTROL": {
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP11_IN_CONTROL": {
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP11_OUT_CONTROL": {
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP12_IN_CONTROL": {
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP12_OUT_CONTROL": {
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP13_IN_CONTROL": {
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP13_OUT_CONTROL": {
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP14_IN_CONTROL": {
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP14_OUT_CONTROL": {
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP15_IN_CONTROL": {
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP15_OUT_CONTROL": {
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFERED": {
    +                    "description": "This endpoint is double buffered.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_BUFF": {
    +                    "description": "Trigger an interrupt each time a buffer is done.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_PER_DOUBLE_BUFF": {
    +                    "description": "Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "ENDPOINT_TYPE": {
    +                    "offset": 26,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "Control": {
    +                            "value": 0
    +                          },
    +                          "Isochronous": {
    +                            "value": 1
    +                          },
    +                          "Bulk": {
    +                            "value": 2
    +                          },
    +                          "Interrupt": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "INTERRUPT_ON_STALL": {
    +                    "description": "Trigger an interrupt if a STALL is sent. Intended for debug only.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "INTERRUPT_ON_NAK": {
    +                    "description": "Trigger an interrupt if a NAK is sent. Intended for debug only.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BUFFER_ADDRESS": {
    +                    "description": "64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "EP0_IN_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP0_OUT_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP1_IN_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP1_OUT_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP2_IN_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP2_OUT_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP3_IN_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP3_OUT_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 156,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP4_IN_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP4_OUT_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 164,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP5_IN_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP5_OUT_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP6_IN_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP6_OUT_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 180,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP7_IN_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 184,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP7_OUT_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 188,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP8_IN_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 192,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP8_OUT_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 196,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP9_IN_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 200,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP9_OUT_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 204,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP10_IN_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 208,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP10_OUT_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 212,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP11_IN_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 216,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP11_OUT_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 220,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP12_IN_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 224,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP12_OUT_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 228,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP13_IN_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 232,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP13_OUT_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 236,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP14_IN_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 240,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP14_OUT_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 244,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP15_IN_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 248,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "EP15_OUT_BUFFER_CONTROL": {
    +              "description": "Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.\\n\n            Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.",
    +              "offset": 252,
    +              "size": 32,
    +              "reset_value": 0,
    +              "children": {
    +                "fields": {
    +                  "FULL_1": {
    +                    "description": "Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 31,
    +                    "size": 1
    +                  },
    +                  "LAST_1": {
    +                    "description": "Buffer 1 is the last buffer of the transfer.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PID_1": {
    +                    "description": "The data pid of buffer 1.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DOUBLE_BUFFER_ISO_OFFSET": {
    +                    "description": "The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.\\n\n                For a non Isochronous endpoint the offset is always 64 bytes.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "enum": {
    +                      "size": 2,
    +                      "children": {
    +                        "enum_fields": {
    +                          "128": {
    +                            "value": 0
    +                          },
    +                          "256": {
    +                            "value": 1
    +                          },
    +                          "512": {
    +                            "value": 2
    +                          },
    +                          "1024": {
    +                            "value": 3
    +                          }
    +                        }
    +                      }
    +                    }
    +                  },
    +                  "AVAILABLE_1": {
    +                    "description": "Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LENGTH_1": {
    +                    "description": "The length of the data in buffer 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "FULL_0": {
    +                    "description": "Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "LAST_0": {
    +                    "description": "Buffer 0 is the last buffer of the transfer.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PID_0": {
    +                    "description": "The data pid of buffer 0.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RESET": {
    +                    "description": "Reset the buffer selector to buffer 0.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STALL": {
    +                    "description": "Reply with a stall (valid for both buffers).",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "AVAILABLE_0": {
    +                    "description": "Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LENGTH_0": {
    +                    "description": "The length of the data in buffer 0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      }
    +    }
    +  },
    +  "devices": {
    +    "RP2040": {
    +      "arch": "cortex_m0plus",
    +      "properties": {
    +        "cpu.nvic_prio_bits": "2",
    +        "cpu.mpu": "true",
    +        "cpu.fpu": "false",
    +        "cpu.num_interrupts": "26",
    +        "cpu.vtor": "1",
    +        "cpu.revision": "r0p1",
    +        "cpu.vendor_systick_config": "false",
    +        "license": "\n    Copyright (c) 2020 Raspberry Pi (Trading) Ltd. \\n\n    \\n\n    SPDX-License-Identifier: BSD-3-Clause\n  ",
    +        "cpu.name": "CM0PLUS",
    +        "cpu.endian": "little"
    +      },
    +      "children": {
    +        "interrupts": {
    +          "NMI": {
    +            "index": -14
    +          },
    +          "HardFault": {
    +            "index": -13
    +          },
    +          "SVCall": {
    +            "index": -5
    +          },
    +          "PendSV": {
    +            "index": -2
    +          },
    +          "SysTick": {
    +            "index": -1
    +          },
    +          "XIP_IRQ": {
    +            "index": 6
    +          },
    +          "CLOCKS_IRQ": {
    +            "index": 17
    +          },
    +          "IO_IRQ_BANK0": {
    +            "index": 13
    +          },
    +          "IO_IRQ_QSPI": {
    +            "index": 14
    +          },
    +          "UART0_IRQ": {
    +            "index": 20
    +          },
    +          "UART1_IRQ": {
    +            "index": 21
    +          },
    +          "SPI0_IRQ": {
    +            "index": 18
    +          },
    +          "SPI1_IRQ": {
    +            "index": 19
    +          },
    +          "I2C0_IRQ": {
    +            "index": 23
    +          },
    +          "I2C1_IRQ": {
    +            "index": 24
    +          },
    +          "ADC_IRQ_FIFO": {
    +            "index": 22
    +          },
    +          "PWM_IRQ_WRAP": {
    +            "index": 4
    +          },
    +          "TIMER_IRQ_0": {
    +            "index": 0
    +          },
    +          "TIMER_IRQ_1": {
    +            "index": 1
    +          },
    +          "TIMER_IRQ_2": {
    +            "index": 2
    +          },
    +          "TIMER_IRQ_3": {
    +            "index": 3
    +          },
    +          "RTC_IRQ": {
    +            "index": 25
    +          },
    +          "DMA_IRQ_0": {
    +            "index": 11
    +          },
    +          "DMA_IRQ_1": {
    +            "index": 12
    +          },
    +          "USBCTRL_IRQ": {
    +            "index": 5
    +          },
    +          "PIO0_IRQ_0": {
    +            "index": 7
    +          },
    +          "PIO0_IRQ_1": {
    +            "index": 8
    +          },
    +          "PIO1_IRQ_0": {
    +            "index": 9
    +          },
    +          "PIO1_IRQ_1": {
    +            "index": 10
    +          },
    +          "SIO_IRQ_PROC0": {
    +            "index": 15
    +          },
    +          "SIO_IRQ_PROC1": {
    +            "index": 16
    +          }
    +        },
    +        "peripheral_instances": {
    +          "SysTick": {
    +            "offset": 3758153744,
    +            "type": "types.peripherals.SCS.children.register_groups.SysTick"
    +          },
    +          "SCB": {
    +            "offset": 3758157056,
    +            "type": "types.peripherals.SCS"
    +          },
    +          "NVIC": {
    +            "offset": 3758153984,
    +            "type": "types.peripherals.SCS"
    +          },
    +          "MPU": {
    +            "offset": 3472,
    +            "type": "types.peripherals.SCS"
    +          },
    +          "XIP_CTRL": {
    +            "description": "QSPI flash execute-in-place block",
    +            "offset": 335544320,
    +            "version": "1",
    +            "type": "types.peripherals.XIP_CTRL"
    +          },
    +          "XIP_SSI": {
    +            "description": "DW_apb_ssi has the following features:\\n\n        * APB interface – Allows for easy integration into a DesignWare Synthesizable Components for AMBA 2 implementation.\\n\n        * APB3 and APB4 protocol support.\\n\n        * Scalable APB data bus width – Supports APB data bus widths of 8, 16, and 32 bits.\\n\n        * Serial-master or serial-slave operation – Enables serial communication with serial-master or serial-slave peripheral devices.\\n\n        * Programmable Dual/Quad/Octal SPI support in Master Mode.\\n\n        * Dual Data Rate (DDR) and Read Data Strobe (RDS) Support - Enables the DW_apb_ssi master to perform operations with the device in DDR and RDS modes when working in Dual/Quad/Octal mode of operation.\\n\n        * Data Mask Support - Enables the DW_apb_ssi to selectively update the bytes in the device. This feature is applicable only in enhanced SPI modes.\\n\n        * eXecute-In-Place (XIP) support - Enables the DW_apb_ssi master to behave as a memory mapped I/O and fetches the data from the device based on the APB read request. This feature is applicable only in enhanced SPI modes.\\n\n        * DMA Controller Interface – Enables the DW_apb_ssi to interface to a DMA controller over the bus using a handshaking interface for transfer requests.\\n\n        * Independent masking of interrupts – Master collision, transmit FIFO overflow, transmit FIFO empty, receive FIFO full, receive FIFO underflow, and receive FIFO overflow interrupts can all be masked independently.\\n\n        * Multi-master contention detection – Informs the processor of multiple serial-master accesses on the serial bus.\\n\n        * Bypass of meta-stability flip-flops for synchronous clocks – When the APB clock (pclk) and the DW_apb_ssi serial clock (ssi_clk) are synchronous, meta-stable flip-flops are not used when transferring control signals across these clock domains.\\n\n        * Programmable delay on the sample time of the received serial data bit (rxd); enables programmable control of routing delays resulting in higher serial data-bit rates.\\n\n        * Programmable features:\\n\n        - Serial interface operation – Choice of Motorola SPI, Texas Instruments Synchronous Serial Protocol or National Semiconductor Microwire.\\n\n        - Clock bit-rate – Dynamic control of the serial bit rate of the data transfer; used in only serial-master mode of operation.\\n\n        - Data Item size (4 to 32 bits) – Item size of each data transfer under the control of the programmer.\\n\n        * Configured features:\\n\n        - FIFO depth – 16 words deep. The FIFO width is fixed at 32 bits.\\n\n        - 1 slave select output.\\n\n        - Hardware slave-select – Dedicated hardware slave-select line.\\n\n        - Combined interrupt line - one combined interrupt line from the DW_apb_ssi to the interrupt controller.\\n\n        - Interrupt polarity – active high interrupt lines.\\n\n        - Serial clock polarity – low serial-clock polarity directly after reset.\\n\n        - Serial clock phase – capture on first edge of serial-clock directly after reset.",
    +            "offset": 402653184,
    +            "version": "1",
    +            "type": "types.peripherals.XIP_SSI"
    +          },
    +          "SYSINFO": {
    +            "offset": 1073741824,
    +            "version": "1",
    +            "type": "types.peripherals.SYSINFO"
    +          },
    +          "SYSCFG": {
    +            "description": "Register block for various chip control signals",
    +            "offset": 1073758208,
    +            "version": "1",
    +            "type": "types.peripherals.SYSCFG"
    +          },
    +          "CLOCKS": {
    +            "offset": 1073774592,
    +            "version": "1",
    +            "type": "types.peripherals.CLOCKS"
    +          },
    +          "RESETS": {
    +            "offset": 1073790976,
    +            "version": "1",
    +            "type": "types.peripherals.RESETS"
    +          },
    +          "PSM": {
    +            "offset": 1073807360,
    +            "version": "1",
    +            "type": "types.peripherals.PSM"
    +          },
    +          "IO_BANK0": {
    +            "offset": 1073823744,
    +            "version": "1",
    +            "type": "types.peripherals.IO_BANK0"
    +          },
    +          "IO_QSPI": {
    +            "offset": 1073840128,
    +            "version": "1",
    +            "type": "types.peripherals.IO_QSPI"
    +          },
    +          "PADS_BANK0": {
    +            "offset": 1073856512,
    +            "version": "1",
    +            "type": "types.peripherals.PADS_BANK0"
    +          },
    +          "PADS_QSPI": {
    +            "offset": 1073872896,
    +            "version": "1",
    +            "type": "types.peripherals.PADS_QSPI"
    +          },
    +          "XOSC": {
    +            "description": "Controls the crystal oscillator",
    +            "offset": 1073889280,
    +            "version": "1",
    +            "type": "types.peripherals.XOSC"
    +          },
    +          "PLL_SYS": {
    +            "offset": 1073905664,
    +            "version": "1",
    +            "type": "types.peripherals.PLL_SYS"
    +          },
    +          "PLL_USB": {
    +            "offset": 1073922048,
    +            "type": "types.peripherals.PLL_SYS"
    +          },
    +          "BUSCTRL": {
    +            "description": "Register block for busfabric control signals and performance counters",
    +            "offset": 1073938432,
    +            "version": "1",
    +            "type": "types.peripherals.BUSCTRL"
    +          },
    +          "UART0": {
    +            "offset": 1073954816,
    +            "version": "1",
    +            "type": "types.peripherals.UART0"
    +          },
    +          "UART1": {
    +            "offset": 1073971200,
    +            "type": "types.peripherals.UART0"
    +          },
    +          "SPI0": {
    +            "offset": 1073987584,
    +            "version": "1",
    +            "type": "types.peripherals.SPI0"
    +          },
    +          "SPI1": {
    +            "offset": 1074003968,
    +            "type": "types.peripherals.SPI0"
    +          },
    +          "I2C0": {
    +            "description": "DW_apb_i2c address block\\n\\n\n        List of configuration constants for the Synopsys I2C hardware (you may see references to these in I2C register header; these are *fixed* values, set at hardware design time):\\n\\n\n        IC_ULTRA_FAST_MODE ................ 0x0\\n\n        IC_UFM_TBUF_CNT_DEFAULT ........... 0x8\\n\n        IC_UFM_SCL_LOW_COUNT .............. 0x0008\\n\n        IC_UFM_SCL_HIGH_COUNT ............. 0x0006\\n\n        IC_TX_TL .......................... 0x0\\n\n        IC_TX_CMD_BLOCK ................... 0x1\\n\n        IC_HAS_DMA ........................ 0x1\\n\n        IC_HAS_ASYNC_FIFO ................. 0x0\\n\n        IC_SMBUS_ARP ...................... 0x0\\n\n        IC_FIRST_DATA_BYTE_STATUS ......... 0x1\\n\n        IC_INTR_IO ........................ 0x1\\n\n        IC_MASTER_MODE .................... 0x1\\n\n        IC_DEFAULT_ACK_GENERAL_CALL ....... 0x1\\n\n        IC_INTR_POL ....................... 0x1\\n\n        IC_OPTIONAL_SAR ................... 0x0\\n\n        IC_DEFAULT_TAR_SLAVE_ADDR ......... 0x055\\n\n        IC_DEFAULT_SLAVE_ADDR ............. 0x055\\n\n        IC_DEFAULT_HS_SPKLEN .............. 0x1\\n\n        IC_FS_SCL_HIGH_COUNT .............. 0x0006\\n\n        IC_HS_SCL_LOW_COUNT ............... 0x0008\\n\n        IC_DEVICE_ID_VALUE ................ 0x0\\n\n        IC_10BITADDR_MASTER ............... 0x0\\n\n        IC_CLK_FREQ_OPTIMIZATION .......... 0x0\\n\n        IC_DEFAULT_FS_SPKLEN .............. 0x7\\n\n        IC_ADD_ENCODED_PARAMS ............. 0x0\\n\n        IC_DEFAULT_SDA_HOLD ............... 0x000001\\n\n        IC_DEFAULT_SDA_SETUP .............. 0x64\\n\n        IC_AVOID_RX_FIFO_FLUSH_ON_TX_ABRT . 0x0\\n\n        IC_CLOCK_PERIOD ................... 100\\n\n        IC_EMPTYFIFO_HOLD_MASTER_EN ....... 1\\n\n        IC_RESTART_EN ..................... 0x1\\n\n        IC_TX_CMD_BLOCK_DEFAULT ........... 0x0\\n\n        IC_BUS_CLEAR_FEATURE .............. 0x0\\n\n        IC_CAP_LOADING .................... 100\\n\n        IC_FS_SCL_LOW_COUNT ............... 0x000d\\n\n        APB_DATA_WIDTH .................... 32\\n\n        IC_SDA_STUCK_TIMEOUT_DEFAULT ...... 0xffffffff\\n\n        IC_SLV_DATA_NACK_ONLY ............. 0x1\\n\n        IC_10BITADDR_SLAVE ................ 0x0\\n\n        IC_CLK_TYPE ....................... 0x0\\n\n        IC_SMBUS_UDID_MSB ................. 0x0\\n\n        IC_SMBUS_SUSPEND_ALERT ............ 0x0\\n\n        IC_HS_SCL_HIGH_COUNT .............. 0x0006\\n\n        IC_SLV_RESTART_DET_EN ............. 0x1\\n\n        IC_SMBUS .......................... 0x0\\n\n        IC_OPTIONAL_SAR_DEFAULT ........... 0x0\\n\n        IC_PERSISTANT_SLV_ADDR_DEFAULT .... 0x0\\n\n        IC_USE_COUNTS ..................... 0x0\\n\n        IC_RX_BUFFER_DEPTH ................ 16\\n\n        IC_SCL_STUCK_TIMEOUT_DEFAULT ...... 0xffffffff\\n\n        IC_RX_FULL_HLD_BUS_EN ............. 0x1\\n\n        IC_SLAVE_DISABLE .................. 0x1\\n\n        IC_RX_TL .......................... 0x0\\n\n        IC_DEVICE_ID ...................... 0x0\\n\n        IC_HC_COUNT_VALUES ................ 0x0\\n\n        I2C_DYNAMIC_TAR_UPDATE ............ 0\\n\n        IC_SMBUS_CLK_LOW_MEXT_DEFAULT ..... 0xffffffff\\n\n        IC_SMBUS_CLK_LOW_SEXT_DEFAULT ..... 0xffffffff\\n\n        IC_HS_MASTER_CODE ................. 0x1\\n\n        IC_SMBUS_RST_IDLE_CNT_DEFAULT ..... 0xffff\\n\n        IC_SMBUS_UDID_LSB_DEFAULT ......... 0xffffffff\\n\n        IC_SS_SCL_HIGH_COUNT .............. 0x0028\\n\n        IC_SS_SCL_LOW_COUNT ............... 0x002f\\n\n        IC_MAX_SPEED_MODE ................. 0x2\\n\n        IC_STAT_FOR_CLK_STRETCH ........... 0x0\\n\n        IC_STOP_DET_IF_MASTER_ACTIVE ...... 0x0\\n\n        IC_DEFAULT_UFM_SPKLEN ............. 0x1\\n\n        IC_TX_BUFFER_DEPTH ................ 16",
    +            "offset": 1074020352,
    +            "version": "1",
    +            "type": "types.peripherals.I2C0"
    +          },
    +          "I2C1": {
    +            "offset": 1074036736,
    +            "type": "types.peripherals.I2C0"
    +          },
    +          "ADC": {
    +            "description": "Control and data interface to SAR ADC",
    +            "offset": 1074053120,
    +            "version": "2",
    +            "type": "types.peripherals.ADC"
    +          },
    +          "PWM": {
    +            "description": "Simple PWM",
    +            "offset": 1074069504,
    +            "version": "1",
    +            "type": "types.peripherals.PWM"
    +          },
    +          "TIMER": {
    +            "description": "Controls time and alarms\\n\n        time is a 64 bit value indicating the time in usec since power-on\\n\n        timeh is the top 32 bits of time & timel is the bottom 32 bits\\n\n        to change time write to timelw before timehw\\n\n        to read time read from timelr before timehr\\n\n        An alarm is set by setting alarm_enable and writing to the corresponding alarm register\\n\n        When an alarm is pending, the corresponding alarm_running signal will be high\\n\n        An alarm can be cancelled before it has finished by clearing the alarm_enable\\n\n        When an alarm fires, the corresponding alarm_irq is set and alarm_running is cleared\\n\n        To clear the interrupt write a 1 to the corresponding alarm_irq",
    +            "offset": 1074085888,
    +            "version": "1",
    +            "type": "types.peripherals.TIMER"
    +          },
    +          "WATCHDOG": {
    +            "offset": 1074102272,
    +            "version": "1",
    +            "type": "types.peripherals.WATCHDOG"
    +          },
    +          "RTC": {
    +            "description": "Register block to control RTC",
    +            "offset": 1074118656,
    +            "version": "1",
    +            "type": "types.peripherals.RTC"
    +          },
    +          "ROSC": {
    +            "offset": 1074135040,
    +            "version": "1",
    +            "type": "types.peripherals.ROSC"
    +          },
    +          "VREG_AND_CHIP_RESET": {
    +            "description": "control and status for on-chip voltage regulator and chip level reset subsystem",
    +            "offset": 1074151424,
    +            "version": "1",
    +            "type": "types.peripherals.VREG_AND_CHIP_RESET"
    +          },
    +          "TBMAN": {
    +            "description": "Testbench manager. Allows the programmer to know what platform their software is running on.",
    +            "offset": 1074184192,
    +            "version": "1",
    +            "type": "types.peripherals.TBMAN"
    +          },
    +          "DMA": {
    +            "description": "DMA with separate read and write masters",
    +            "offset": 1342177280,
    +            "version": "1",
    +            "type": "types.peripherals.DMA"
    +          },
    +          "USBCTRL_DPRAM": {
    +            "description": "DPRAM layout for USB device.",
    +            "offset": 1343225856,
    +            "version": "1",
    +            "type": "types.peripherals.USBCTRL_DPRAM"
    +          },
    +          "USBCTRL_REGS": {
    +            "description": "USB FS/LS controller device registers",
    +            "offset": 1343291392,
    +            "version": "1",
    +            "type": "types.peripherals.USBCTRL_REGS"
    +          },
    +          "PIO0": {
    +            "description": "Programmable IO block",
    +            "offset": 1344274432,
    +            "version": "1",
    +            "type": "types.peripherals.PIO0"
    +          },
    +          "PIO1": {
    +            "offset": 1345323008,
    +            "type": "types.peripherals.PIO0"
    +          },
    +          "SIO": {
    +            "description": "Single-cycle IO block\\n\n        Provides core-local and inter-core hardware for the two processors, with single-cycle access.",
    +            "offset": 3489660928,
    +            "version": "1",
    +            "type": "types.peripherals.SIO"
    +          },
    +          "PPB": {
    +            "offset": 3758096384,
    +            "version": "1",
    +            "type": "types.peripherals.PPB"
    +          }
    +        }
    +      }
    +    }
    +  }
    +}
    diff --git a/src/chips/RP2040.zig b/src/chips/RP2040.zig
    new file mode 100644
    index 000000000..62af336a8
    --- /dev/null
    +++ b/src/chips/RP2040.zig
    @@ -0,0 +1,18145 @@
    +const micro = @import("microzig");
    +const mmio = micro.mmio;
    +
    +pub const devices = struct {
    +    pub const RP2040 = struct {
    +        pub const properties = struct {
    +            pub const @"cpu.nvic_prio_bits" = "2";
    +            pub const @"cpu.mpu" = "true";
    +            pub const @"cpu.fpu" = "false";
    +            pub const @"cpu.num_interrupts" = "26";
    +            pub const @"cpu.vtor" = "1";
    +            pub const @"cpu.revision" = "r0p1";
    +            pub const @"cpu.vendor_systick_config" = "false";
    +            pub const license =
    +                \\
    +                \\    Copyright (c) 2020 Raspberry Pi (Trading) Ltd. \n
    +                \\    \n
    +                \\    SPDX-License-Identifier: BSD-3-Clause
    +                \\  
    +            ;
    +            pub const @"cpu.name" = "CM0PLUS";
    +            pub const @"cpu.endian" = "little";
    +        };
    +
    +        pub const VectorTable = extern struct {
    +            const Handler = micro.interrupt.Handler;
    +            const unhandled = micro.interrupt.unhandled;
    +
    +            initial_stack_pointer: u32,
    +            Reset: Handler = unhandled,
    +            NMI: Handler = unhandled,
    +            HardFault: Handler = unhandled,
    +            reserved2: [7]u32 = undefined,
    +            SVCall: Handler = unhandled,
    +            reserved10: [2]u32 = undefined,
    +            PendSV: Handler = unhandled,
    +            SysTick: Handler = unhandled,
    +            TIMER_IRQ_0: Handler = unhandled,
    +            TIMER_IRQ_1: Handler = unhandled,
    +            TIMER_IRQ_2: Handler = unhandled,
    +            TIMER_IRQ_3: Handler = unhandled,
    +            PWM_IRQ_WRAP: Handler = unhandled,
    +            USBCTRL_IRQ: Handler = unhandled,
    +            XIP_IRQ: Handler = unhandled,
    +            PIO0_IRQ_0: Handler = unhandled,
    +            PIO0_IRQ_1: Handler = unhandled,
    +            PIO1_IRQ_0: Handler = unhandled,
    +            PIO1_IRQ_1: Handler = unhandled,
    +            DMA_IRQ_0: Handler = unhandled,
    +            DMA_IRQ_1: Handler = unhandled,
    +            IO_IRQ_BANK0: Handler = unhandled,
    +            IO_IRQ_QSPI: Handler = unhandled,
    +            SIO_IRQ_PROC0: Handler = unhandled,
    +            SIO_IRQ_PROC1: Handler = unhandled,
    +            CLOCKS_IRQ: Handler = unhandled,
    +            SPI0_IRQ: Handler = unhandled,
    +            SPI1_IRQ: Handler = unhandled,
    +            UART0_IRQ: Handler = unhandled,
    +            UART1_IRQ: Handler = unhandled,
    +            ADC_IRQ_FIFO: Handler = unhandled,
    +            I2C0_IRQ: Handler = unhandled,
    +            I2C1_IRQ: Handler = unhandled,
    +            RTC_IRQ: Handler = unhandled,
    +        };
    +
    +        pub const peripherals = struct {
    +            ///  System Control Space
    +            pub const MPU = @intToPtr(*volatile types.peripherals.SCS, 0xd90);
    +            ///  QSPI flash execute-in-place block
    +            pub const XIP_CTRL = @intToPtr(*volatile types.peripherals.XIP_CTRL, 0x14000000);
    +            ///  DW_apb_ssi has the following features:
    +            ///  * APB interface – Allows for easy integration into a DesignWare Synthesizable Components for AMBA 2 implementation.
    +            ///  * APB3 and APB4 protocol support.
    +            ///  * Scalable APB data bus width – Supports APB data bus widths of 8, 16, and 32 bits.
    +            ///  * Serial-master or serial-slave operation – Enables serial communication with serial-master or serial-slave peripheral devices.
    +            ///  * Programmable Dual/Quad/Octal SPI support in Master Mode.
    +            ///  * Dual Data Rate (DDR) and Read Data Strobe (RDS) Support - Enables the DW_apb_ssi master to perform operations with the device in DDR and RDS modes when working in Dual/Quad/Octal mode of operation.
    +            ///  * Data Mask Support - Enables the DW_apb_ssi to selectively update the bytes in the device. This feature is applicable only in enhanced SPI modes.
    +            ///  * eXecute-In-Place (XIP) support - Enables the DW_apb_ssi master to behave as a memory mapped I/O and fetches the data from the device based on the APB read request. This feature is applicable only in enhanced SPI modes.
    +            ///  * DMA Controller Interface – Enables the DW_apb_ssi to interface to a DMA controller over the bus using a handshaking interface for transfer requests.
    +            ///  * Independent masking of interrupts – Master collision, transmit FIFO overflow, transmit FIFO empty, receive FIFO full, receive FIFO underflow, and receive FIFO overflow interrupts can all be masked independently.
    +            ///  * Multi-master contention detection – Informs the processor of multiple serial-master accesses on the serial bus.
    +            ///  * Bypass of meta-stability flip-flops for synchronous clocks – When the APB clock (pclk) and the DW_apb_ssi serial clock (ssi_clk) are synchronous, meta-stable flip-flops are not used when transferring control signals across these clock domains.
    +            ///  * Programmable delay on the sample time of the received serial data bit (rxd); enables programmable control of routing delays resulting in higher serial data-bit rates.
    +            ///  * Programmable features:
    +            ///  - Serial interface operation – Choice of Motorola SPI, Texas Instruments Synchronous Serial Protocol or National Semiconductor Microwire.
    +            ///  - Clock bit-rate – Dynamic control of the serial bit rate of the data transfer; used in only serial-master mode of operation.
    +            ///  - Data Item size (4 to 32 bits) – Item size of each data transfer under the control of the programmer.
    +            ///  * Configured features:
    +            ///  - FIFO depth – 16 words deep. The FIFO width is fixed at 32 bits.
    +            ///  - 1 slave select output.
    +            ///  - Hardware slave-select – Dedicated hardware slave-select line.
    +            ///  - Combined interrupt line - one combined interrupt line from the DW_apb_ssi to the interrupt controller.
    +            ///  - Interrupt polarity – active high interrupt lines.
    +            ///  - Serial clock polarity – low serial-clock polarity directly after reset.
    +            ///  - Serial clock phase – capture on first edge of serial-clock directly after reset.
    +            pub const XIP_SSI = @intToPtr(*volatile types.peripherals.XIP_SSI, 0x18000000);
    +            pub const SYSINFO = @intToPtr(*volatile types.peripherals.SYSINFO, 0x40000000);
    +            ///  Register block for various chip control signals
    +            pub const SYSCFG = @intToPtr(*volatile types.peripherals.SYSCFG, 0x40004000);
    +            pub const CLOCKS = @intToPtr(*volatile types.peripherals.CLOCKS, 0x40008000);
    +            pub const RESETS = @intToPtr(*volatile types.peripherals.RESETS, 0x4000c000);
    +            pub const PSM = @intToPtr(*volatile types.peripherals.PSM, 0x40010000);
    +            pub const IO_BANK0 = @intToPtr(*volatile types.peripherals.IO_BANK0, 0x40014000);
    +            pub const IO_QSPI = @intToPtr(*volatile types.peripherals.IO_QSPI, 0x40018000);
    +            pub const PADS_BANK0 = @intToPtr(*volatile types.peripherals.PADS_BANK0, 0x4001c000);
    +            pub const PADS_QSPI = @intToPtr(*volatile types.peripherals.PADS_QSPI, 0x40020000);
    +            ///  Controls the crystal oscillator
    +            pub const XOSC = @intToPtr(*volatile types.peripherals.XOSC, 0x40024000);
    +            pub const PLL_SYS = @intToPtr(*volatile types.peripherals.PLL_SYS, 0x40028000);
    +            pub const PLL_USB = @intToPtr(*volatile types.peripherals.PLL_SYS, 0x4002c000);
    +            ///  Register block for busfabric control signals and performance counters
    +            pub const BUSCTRL = @intToPtr(*volatile types.peripherals.BUSCTRL, 0x40030000);
    +            pub const UART0 = @intToPtr(*volatile types.peripherals.UART0, 0x40034000);
    +            pub const UART1 = @intToPtr(*volatile types.peripherals.UART0, 0x40038000);
    +            pub const SPI0 = @intToPtr(*volatile types.peripherals.SPI0, 0x4003c000);
    +            pub const SPI1 = @intToPtr(*volatile types.peripherals.SPI0, 0x40040000);
    +            ///  DW_apb_i2c address block
    +            ///  List of configuration constants for the Synopsys I2C hardware (you may see references to these in I2C register header; these are *fixed* values, set at hardware design time):
    +            ///  IC_ULTRA_FAST_MODE ................ 0x0
    +            ///  IC_UFM_TBUF_CNT_DEFAULT ........... 0x8
    +            ///  IC_UFM_SCL_LOW_COUNT .............. 0x0008
    +            ///  IC_UFM_SCL_HIGH_COUNT ............. 0x0006
    +            ///  IC_TX_TL .......................... 0x0
    +            ///  IC_TX_CMD_BLOCK ................... 0x1
    +            ///  IC_HAS_DMA ........................ 0x1
    +            ///  IC_HAS_ASYNC_FIFO ................. 0x0
    +            ///  IC_SMBUS_ARP ...................... 0x0
    +            ///  IC_FIRST_DATA_BYTE_STATUS ......... 0x1
    +            ///  IC_INTR_IO ........................ 0x1
    +            ///  IC_MASTER_MODE .................... 0x1
    +            ///  IC_DEFAULT_ACK_GENERAL_CALL ....... 0x1
    +            ///  IC_INTR_POL ....................... 0x1
    +            ///  IC_OPTIONAL_SAR ................... 0x0
    +            ///  IC_DEFAULT_TAR_SLAVE_ADDR ......... 0x055
    +            ///  IC_DEFAULT_SLAVE_ADDR ............. 0x055
    +            ///  IC_DEFAULT_HS_SPKLEN .............. 0x1
    +            ///  IC_FS_SCL_HIGH_COUNT .............. 0x0006
    +            ///  IC_HS_SCL_LOW_COUNT ............... 0x0008
    +            ///  IC_DEVICE_ID_VALUE ................ 0x0
    +            ///  IC_10BITADDR_MASTER ............... 0x0
    +            ///  IC_CLK_FREQ_OPTIMIZATION .......... 0x0
    +            ///  IC_DEFAULT_FS_SPKLEN .............. 0x7
    +            ///  IC_ADD_ENCODED_PARAMS ............. 0x0
    +            ///  IC_DEFAULT_SDA_HOLD ............... 0x000001
    +            ///  IC_DEFAULT_SDA_SETUP .............. 0x64
    +            ///  IC_AVOID_RX_FIFO_FLUSH_ON_TX_ABRT . 0x0
    +            ///  IC_CLOCK_PERIOD ................... 100
    +            ///  IC_EMPTYFIFO_HOLD_MASTER_EN ....... 1
    +            ///  IC_RESTART_EN ..................... 0x1
    +            ///  IC_TX_CMD_BLOCK_DEFAULT ........... 0x0
    +            ///  IC_BUS_CLEAR_FEATURE .............. 0x0
    +            ///  IC_CAP_LOADING .................... 100
    +            ///  IC_FS_SCL_LOW_COUNT ............... 0x000d
    +            ///  APB_DATA_WIDTH .................... 32
    +            ///  IC_SDA_STUCK_TIMEOUT_DEFAULT ...... 0xffffffff
    +            ///  IC_SLV_DATA_NACK_ONLY ............. 0x1
    +            ///  IC_10BITADDR_SLAVE ................ 0x0
    +            ///  IC_CLK_TYPE ....................... 0x0
    +            ///  IC_SMBUS_UDID_MSB ................. 0x0
    +            ///  IC_SMBUS_SUSPEND_ALERT ............ 0x0
    +            ///  IC_HS_SCL_HIGH_COUNT .............. 0x0006
    +            ///  IC_SLV_RESTART_DET_EN ............. 0x1
    +            ///  IC_SMBUS .......................... 0x0
    +            ///  IC_OPTIONAL_SAR_DEFAULT ........... 0x0
    +            ///  IC_PERSISTANT_SLV_ADDR_DEFAULT .... 0x0
    +            ///  IC_USE_COUNTS ..................... 0x0
    +            ///  IC_RX_BUFFER_DEPTH ................ 16
    +            ///  IC_SCL_STUCK_TIMEOUT_DEFAULT ...... 0xffffffff
    +            ///  IC_RX_FULL_HLD_BUS_EN ............. 0x1
    +            ///  IC_SLAVE_DISABLE .................. 0x1
    +            ///  IC_RX_TL .......................... 0x0
    +            ///  IC_DEVICE_ID ...................... 0x0
    +            ///  IC_HC_COUNT_VALUES ................ 0x0
    +            ///  I2C_DYNAMIC_TAR_UPDATE ............ 0
    +            ///  IC_SMBUS_CLK_LOW_MEXT_DEFAULT ..... 0xffffffff
    +            ///  IC_SMBUS_CLK_LOW_SEXT_DEFAULT ..... 0xffffffff
    +            ///  IC_HS_MASTER_CODE ................. 0x1
    +            ///  IC_SMBUS_RST_IDLE_CNT_DEFAULT ..... 0xffff
    +            ///  IC_SMBUS_UDID_LSB_DEFAULT ......... 0xffffffff
    +            ///  IC_SS_SCL_HIGH_COUNT .............. 0x0028
    +            ///  IC_SS_SCL_LOW_COUNT ............... 0x002f
    +            ///  IC_MAX_SPEED_MODE ................. 0x2
    +            ///  IC_STAT_FOR_CLK_STRETCH ........... 0x0
    +            ///  IC_STOP_DET_IF_MASTER_ACTIVE ...... 0x0
    +            ///  IC_DEFAULT_UFM_SPKLEN ............. 0x1
    +            ///  IC_TX_BUFFER_DEPTH ................ 16
    +            pub const I2C0 = @intToPtr(*volatile types.peripherals.I2C0, 0x40044000);
    +            ///  DW_apb_i2c address block
    +            ///  List of configuration constants for the Synopsys I2C hardware (you may see references to these in I2C register header; these are *fixed* values, set at hardware design time):
    +            ///  IC_ULTRA_FAST_MODE ................ 0x0
    +            ///  IC_UFM_TBUF_CNT_DEFAULT ........... 0x8
    +            ///  IC_UFM_SCL_LOW_COUNT .............. 0x0008
    +            ///  IC_UFM_SCL_HIGH_COUNT ............. 0x0006
    +            ///  IC_TX_TL .......................... 0x0
    +            ///  IC_TX_CMD_BLOCK ................... 0x1
    +            ///  IC_HAS_DMA ........................ 0x1
    +            ///  IC_HAS_ASYNC_FIFO ................. 0x0
    +            ///  IC_SMBUS_ARP ...................... 0x0
    +            ///  IC_FIRST_DATA_BYTE_STATUS ......... 0x1
    +            ///  IC_INTR_IO ........................ 0x1
    +            ///  IC_MASTER_MODE .................... 0x1
    +            ///  IC_DEFAULT_ACK_GENERAL_CALL ....... 0x1
    +            ///  IC_INTR_POL ....................... 0x1
    +            ///  IC_OPTIONAL_SAR ................... 0x0
    +            ///  IC_DEFAULT_TAR_SLAVE_ADDR ......... 0x055
    +            ///  IC_DEFAULT_SLAVE_ADDR ............. 0x055
    +            ///  IC_DEFAULT_HS_SPKLEN .............. 0x1
    +            ///  IC_FS_SCL_HIGH_COUNT .............. 0x0006
    +            ///  IC_HS_SCL_LOW_COUNT ............... 0x0008
    +            ///  IC_DEVICE_ID_VALUE ................ 0x0
    +            ///  IC_10BITADDR_MASTER ............... 0x0
    +            ///  IC_CLK_FREQ_OPTIMIZATION .......... 0x0
    +            ///  IC_DEFAULT_FS_SPKLEN .............. 0x7
    +            ///  IC_ADD_ENCODED_PARAMS ............. 0x0
    +            ///  IC_DEFAULT_SDA_HOLD ............... 0x000001
    +            ///  IC_DEFAULT_SDA_SETUP .............. 0x64
    +            ///  IC_AVOID_RX_FIFO_FLUSH_ON_TX_ABRT . 0x0
    +            ///  IC_CLOCK_PERIOD ................... 100
    +            ///  IC_EMPTYFIFO_HOLD_MASTER_EN ....... 1
    +            ///  IC_RESTART_EN ..................... 0x1
    +            ///  IC_TX_CMD_BLOCK_DEFAULT ........... 0x0
    +            ///  IC_BUS_CLEAR_FEATURE .............. 0x0
    +            ///  IC_CAP_LOADING .................... 100
    +            ///  IC_FS_SCL_LOW_COUNT ............... 0x000d
    +            ///  APB_DATA_WIDTH .................... 32
    +            ///  IC_SDA_STUCK_TIMEOUT_DEFAULT ...... 0xffffffff
    +            ///  IC_SLV_DATA_NACK_ONLY ............. 0x1
    +            ///  IC_10BITADDR_SLAVE ................ 0x0
    +            ///  IC_CLK_TYPE ....................... 0x0
    +            ///  IC_SMBUS_UDID_MSB ................. 0x0
    +            ///  IC_SMBUS_SUSPEND_ALERT ............ 0x0
    +            ///  IC_HS_SCL_HIGH_COUNT .............. 0x0006
    +            ///  IC_SLV_RESTART_DET_EN ............. 0x1
    +            ///  IC_SMBUS .......................... 0x0
    +            ///  IC_OPTIONAL_SAR_DEFAULT ........... 0x0
    +            ///  IC_PERSISTANT_SLV_ADDR_DEFAULT .... 0x0
    +            ///  IC_USE_COUNTS ..................... 0x0
    +            ///  IC_RX_BUFFER_DEPTH ................ 16
    +            ///  IC_SCL_STUCK_TIMEOUT_DEFAULT ...... 0xffffffff
    +            ///  IC_RX_FULL_HLD_BUS_EN ............. 0x1
    +            ///  IC_SLAVE_DISABLE .................. 0x1
    +            ///  IC_RX_TL .......................... 0x0
    +            ///  IC_DEVICE_ID ...................... 0x0
    +            ///  IC_HC_COUNT_VALUES ................ 0x0
    +            ///  I2C_DYNAMIC_TAR_UPDATE ............ 0
    +            ///  IC_SMBUS_CLK_LOW_MEXT_DEFAULT ..... 0xffffffff
    +            ///  IC_SMBUS_CLK_LOW_SEXT_DEFAULT ..... 0xffffffff
    +            ///  IC_HS_MASTER_CODE ................. 0x1
    +            ///  IC_SMBUS_RST_IDLE_CNT_DEFAULT ..... 0xffff
    +            ///  IC_SMBUS_UDID_LSB_DEFAULT ......... 0xffffffff
    +            ///  IC_SS_SCL_HIGH_COUNT .............. 0x0028
    +            ///  IC_SS_SCL_LOW_COUNT ............... 0x002f
    +            ///  IC_MAX_SPEED_MODE ................. 0x2
    +            ///  IC_STAT_FOR_CLK_STRETCH ........... 0x0
    +            ///  IC_STOP_DET_IF_MASTER_ACTIVE ...... 0x0
    +            ///  IC_DEFAULT_UFM_SPKLEN ............. 0x1
    +            ///  IC_TX_BUFFER_DEPTH ................ 16
    +            pub const I2C1 = @intToPtr(*volatile types.peripherals.I2C0, 0x40048000);
    +            ///  Control and data interface to SAR ADC
    +            pub const ADC = @intToPtr(*volatile types.peripherals.ADC, 0x4004c000);
    +            ///  Simple PWM
    +            pub const PWM = @intToPtr(*volatile types.peripherals.PWM, 0x40050000);
    +            ///  Controls time and alarms
    +            ///  time is a 64 bit value indicating the time in usec since power-on
    +            ///  timeh is the top 32 bits of time & timel is the bottom 32 bits
    +            ///  to change time write to timelw before timehw
    +            ///  to read time read from timelr before timehr
    +            ///  An alarm is set by setting alarm_enable and writing to the corresponding alarm register
    +            ///  When an alarm is pending, the corresponding alarm_running signal will be high
    +            ///  An alarm can be cancelled before it has finished by clearing the alarm_enable
    +            ///  When an alarm fires, the corresponding alarm_irq is set and alarm_running is cleared
    +            ///  To clear the interrupt write a 1 to the corresponding alarm_irq
    +            pub const TIMER = @intToPtr(*volatile types.peripherals.TIMER, 0x40054000);
    +            pub const WATCHDOG = @intToPtr(*volatile types.peripherals.WATCHDOG, 0x40058000);
    +            ///  Register block to control RTC
    +            pub const RTC = @intToPtr(*volatile types.peripherals.RTC, 0x4005c000);
    +            pub const ROSC = @intToPtr(*volatile types.peripherals.ROSC, 0x40060000);
    +            ///  control and status for on-chip voltage regulator and chip level reset subsystem
    +            pub const VREG_AND_CHIP_RESET = @intToPtr(*volatile types.peripherals.VREG_AND_CHIP_RESET, 0x40064000);
    +            ///  Testbench manager. Allows the programmer to know what platform their software is running on.
    +            pub const TBMAN = @intToPtr(*volatile types.peripherals.TBMAN, 0x4006c000);
    +            ///  DMA with separate read and write masters
    +            pub const DMA = @intToPtr(*volatile types.peripherals.DMA, 0x50000000);
    +            ///  DPRAM layout for USB device.
    +            pub const USBCTRL_DPRAM = @intToPtr(*volatile types.peripherals.USBCTRL_DPRAM, 0x50100000);
    +            ///  USB FS/LS controller device registers
    +            pub const USBCTRL_REGS = @intToPtr(*volatile types.peripherals.USBCTRL_REGS, 0x50110000);
    +            ///  Programmable IO block
    +            pub const PIO0 = @intToPtr(*volatile types.peripherals.PIO0, 0x50200000);
    +            ///  Programmable IO block
    +            pub const PIO1 = @intToPtr(*volatile types.peripherals.PIO0, 0x50300000);
    +            ///  Single-cycle IO block
    +            ///  Provides core-local and inter-core hardware for the two processors, with single-cycle access.
    +            pub const SIO = @intToPtr(*volatile types.peripherals.SIO, 0xd0000000);
    +            pub const PPB = @intToPtr(*volatile types.peripherals.PPB, 0xe0000000);
    +            ///  System Tick Timer
    +            pub const SysTick = @intToPtr(*volatile types.peripherals.SysTick, 0xe000e010);
    +            ///  System Control Space
    +            pub const NVIC = @intToPtr(*volatile types.peripherals.NVIC, 0xe000e100);
    +            ///  System Control Space
    +            pub const SCB = @intToPtr(*volatile types.peripherals.SCB, 0xe000ed00);
    +        };
    +    };
    +};
    +
    +pub const types = struct {
    +    pub const peripherals = struct {
    +        ///  System Tick Timer
    +        pub const SysTick = extern struct {
    +            ///  SysTick Control and Status Register
    +            CTRL: mmio.Mmio(packed struct(u32) {
    +                ENABLE: u1,
    +                TICKINT: u1,
    +                CLKSOURCE: u1,
    +                reserved16: u13,
    +                COUNTFLAG: u1,
    +                padding: u15,
    +            }),
    +            ///  SysTick Reload Value Register
    +            LOAD: mmio.Mmio(packed struct(u32) {
    +                RELOAD: u24,
    +                padding: u8,
    +            }),
    +            ///  SysTick Current Value Register
    +            VAL: mmio.Mmio(packed struct(u32) {
    +                CURRENT: u24,
    +                padding: u8,
    +            }),
    +            ///  SysTick Calibration Register
    +            CALIB: mmio.Mmio(packed struct(u32) {
    +                TENMS: u24,
    +                reserved30: u6,
    +                SKEW: u1,
    +                NOREF: u1,
    +            }),
    +        };
    +
    +        ///  System Control Block
    +        pub const SCB = extern struct {
    +            CPUID: mmio.Mmio(packed struct(u32) {
    +                REVISION: u4,
    +                PARTNO: u12,
    +                ARCHITECTURE: u4,
    +                VARIANT: u4,
    +                IMPLEMENTER: u8,
    +            }),
    +            ///  Interrupt Control and State Register
    +            ICSR: mmio.Mmio(packed struct(u32) {
    +                VECTACTIVE: u9,
    +                reserved12: u3,
    +                VECTPENDING: u9,
    +                reserved22: u1,
    +                ISRPENDING: u1,
    +                ISRPREEMPT: u1,
    +                reserved25: u1,
    +                PENDSTCLR: u1,
    +                PENDSTSET: u1,
    +                PENDSVCLR: u1,
    +                PENDSVSET: u1,
    +                reserved31: u2,
    +                NMIPENDSET: u1,
    +            }),
    +            ///  Vector Table Offset Register
    +            VTOR: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                TBLOFF: u24,
    +            }),
    +            ///  Application Interrupt and Reset Control Register
    +            AIRCR: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                VECTCLRACTIVE: u1,
    +                SYSRESETREQ: u1,
    +                reserved15: u12,
    +                ENDIANESS: u1,
    +                VECTKEY: u16,
    +            }),
    +            ///  System Control Register
    +            SCR: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                SLEEPONEXIT: u1,
    +                SLEEPDEEP: u1,
    +                reserved4: u1,
    +                SEVONPEND: u1,
    +                padding: u27,
    +            }),
    +            ///  Configuration Control Register
    +            CCR: mmio.Mmio(packed struct(u32) {
    +                reserved3: u3,
    +                UNALIGN_TRP: u1,
    +                reserved9: u5,
    +                STKALIGN: u1,
    +                padding: u22,
    +            }),
    +            reserved28: [4]u8,
    +            ///  System Handlers Priority Registers. [0] is RESERVED
    +            SHP: u32,
    +            reserved36: [4]u8,
    +            ///  System Handler Control and State Register
    +            SHCSR: mmio.Mmio(packed struct(u32) {
    +                reserved15: u15,
    +                SVCALLPENDED: u1,
    +                padding: u16,
    +            }),
    +        };
    +
    +        ///  Nested Vectored Interrupt Controller
    +        pub const NVIC = extern struct {
    +            ///  Interrupt Set Enable Register
    +            ISER: mmio.Mmio(packed struct(u32) {
    +                TIMER_IRQ_0: u1,
    +                TIMER_IRQ_1: u1,
    +                TIMER_IRQ_2: u1,
    +                TIMER_IRQ_3: u1,
    +                PWM_IRQ_WRAP: u1,
    +                USBCTRL_IRQ: u1,
    +                XIP_IRQ: u1,
    +                PIO0_IRQ_0: u1,
    +                PIO0_IRQ_1: u1,
    +                PIO1_IRQ_0: u1,
    +                PIO1_IRQ_1: u1,
    +                DMA_IRQ_0: u1,
    +                DMA_IRQ_1: u1,
    +                IO_IRQ_BANK0: u1,
    +                IO_IRQ_QSPI: u1,
    +                SIO_IRQ_PROC0: u1,
    +                SIO_IRQ_PROC1: u1,
    +                CLOCKS_IRQ: u1,
    +                SPI0_IRQ: u1,
    +                SPI1_IRQ: u1,
    +                UART0_IRQ: u1,
    +                UART1_IRQ: u1,
    +                ADC_IRQ_FIFO: u1,
    +                I2C0_IRQ: u1,
    +                I2C1_IRQ: u1,
    +                RTC_IRQ: u1,
    +                padding: u6,
    +            }),
    +            reserved128: [124]u8,
    +            ///  Interrupt Clear Enable Register
    +            ICER: mmio.Mmio(packed struct(u32) {
    +                TIMER_IRQ_0: u1,
    +                TIMER_IRQ_1: u1,
    +                TIMER_IRQ_2: u1,
    +                TIMER_IRQ_3: u1,
    +                PWM_IRQ_WRAP: u1,
    +                USBCTRL_IRQ: u1,
    +                XIP_IRQ: u1,
    +                PIO0_IRQ_0: u1,
    +                PIO0_IRQ_1: u1,
    +                PIO1_IRQ_0: u1,
    +                PIO1_IRQ_1: u1,
    +                DMA_IRQ_0: u1,
    +                DMA_IRQ_1: u1,
    +                IO_IRQ_BANK0: u1,
    +                IO_IRQ_QSPI: u1,
    +                SIO_IRQ_PROC0: u1,
    +                SIO_IRQ_PROC1: u1,
    +                CLOCKS_IRQ: u1,
    +                SPI0_IRQ: u1,
    +                SPI1_IRQ: u1,
    +                UART0_IRQ: u1,
    +                UART1_IRQ: u1,
    +                ADC_IRQ_FIFO: u1,
    +                I2C0_IRQ: u1,
    +                I2C1_IRQ: u1,
    +                RTC_IRQ: u1,
    +                padding: u6,
    +            }),
    +            reserved256: [124]u8,
    +            ///  Interrupt Set Pending Register
    +            ISPR: mmio.Mmio(packed struct(u32) {
    +                TIMER_IRQ_0: u1,
    +                TIMER_IRQ_1: u1,
    +                TIMER_IRQ_2: u1,
    +                TIMER_IRQ_3: u1,
    +                PWM_IRQ_WRAP: u1,
    +                USBCTRL_IRQ: u1,
    +                XIP_IRQ: u1,
    +                PIO0_IRQ_0: u1,
    +                PIO0_IRQ_1: u1,
    +                PIO1_IRQ_0: u1,
    +                PIO1_IRQ_1: u1,
    +                DMA_IRQ_0: u1,
    +                DMA_IRQ_1: u1,
    +                IO_IRQ_BANK0: u1,
    +                IO_IRQ_QSPI: u1,
    +                SIO_IRQ_PROC0: u1,
    +                SIO_IRQ_PROC1: u1,
    +                CLOCKS_IRQ: u1,
    +                SPI0_IRQ: u1,
    +                SPI1_IRQ: u1,
    +                UART0_IRQ: u1,
    +                UART1_IRQ: u1,
    +                ADC_IRQ_FIFO: u1,
    +                I2C0_IRQ: u1,
    +                I2C1_IRQ: u1,
    +                RTC_IRQ: u1,
    +                padding: u6,
    +            }),
    +            reserved384: [124]u8,
    +            ///  Interrupt Clear Pending Register
    +            ICPR: mmio.Mmio(packed struct(u32) {
    +                TIMER_IRQ_0: u1,
    +                TIMER_IRQ_1: u1,
    +                TIMER_IRQ_2: u1,
    +                TIMER_IRQ_3: u1,
    +                PWM_IRQ_WRAP: u1,
    +                USBCTRL_IRQ: u1,
    +                XIP_IRQ: u1,
    +                PIO0_IRQ_0: u1,
    +                PIO0_IRQ_1: u1,
    +                PIO1_IRQ_0: u1,
    +                PIO1_IRQ_1: u1,
    +                DMA_IRQ_0: u1,
    +                DMA_IRQ_1: u1,
    +                IO_IRQ_BANK0: u1,
    +                IO_IRQ_QSPI: u1,
    +                SIO_IRQ_PROC0: u1,
    +                SIO_IRQ_PROC1: u1,
    +                CLOCKS_IRQ: u1,
    +                SPI0_IRQ: u1,
    +                SPI1_IRQ: u1,
    +                UART0_IRQ: u1,
    +                UART1_IRQ: u1,
    +                ADC_IRQ_FIFO: u1,
    +                I2C0_IRQ: u1,
    +                I2C1_IRQ: u1,
    +                RTC_IRQ: u1,
    +                padding: u6,
    +            }),
    +            reserved768: [380]u8,
    +            ///  Interrupt Priority Register
    +            IPR0: mmio.Mmio(packed struct(u32) {
    +                reserved6: u6,
    +                TIMER_IRQ_0: u2,
    +                reserved14: u6,
    +                TIMER_IRQ_1: u2,
    +                reserved22: u6,
    +                TIMER_IRQ_2: u2,
    +                reserved30: u6,
    +                TIMER_IRQ_3: u2,
    +            }),
    +            ///  Interrupt Priority Register
    +            IPR1: mmio.Mmio(packed struct(u32) {
    +                reserved6: u6,
    +                PWM_IRQ_WRAP: u2,
    +                reserved14: u6,
    +                USBCTRL_IRQ: u2,
    +                reserved22: u6,
    +                XIP_IRQ: u2,
    +                reserved30: u6,
    +                PIO0_IRQ_0: u2,
    +            }),
    +            ///  Interrupt Priority Register
    +            IPR2: mmio.Mmio(packed struct(u32) {
    +                reserved6: u6,
    +                PIO0_IRQ_1: u2,
    +                reserved14: u6,
    +                PIO1_IRQ_0: u2,
    +                reserved22: u6,
    +                PIO1_IRQ_1: u2,
    +                reserved30: u6,
    +                DMA_IRQ_0: u2,
    +            }),
    +            ///  Interrupt Priority Register
    +            IPR3: mmio.Mmio(packed struct(u32) {
    +                reserved6: u6,
    +                DMA_IRQ_1: u2,
    +                reserved14: u6,
    +                IO_IRQ_BANK0: u2,
    +                reserved22: u6,
    +                IO_IRQ_QSPI: u2,
    +                reserved30: u6,
    +                SIO_IRQ_PROC0: u2,
    +            }),
    +            ///  Interrupt Priority Register
    +            IPR4: mmio.Mmio(packed struct(u32) {
    +                reserved6: u6,
    +                SIO_IRQ_PROC1: u2,
    +                reserved14: u6,
    +                CLOCKS_IRQ: u2,
    +                reserved22: u6,
    +                SPI0_IRQ: u2,
    +                reserved30: u6,
    +                SPI1_IRQ: u2,
    +            }),
    +            ///  Interrupt Priority Register
    +            IPR5: mmio.Mmio(packed struct(u32) {
    +                reserved6: u6,
    +                UART0_IRQ: u2,
    +                reserved14: u6,
    +                UART1_IRQ: u2,
    +                reserved22: u6,
    +                ADC_IRQ_FIFO: u2,
    +                reserved30: u6,
    +                I2C0_IRQ: u2,
    +            }),
    +            ///  Interrupt Priority Register
    +            IPR6: mmio.Mmio(packed struct(u32) {
    +                reserved6: u6,
    +                I2C1_IRQ: u2,
    +                reserved14: u6,
    +                RTC_IRQ: u2,
    +                padding: u16,
    +            }),
    +            ///  Interrupt Priority Register
    +            IPR7: u32,
    +        };
    +
    +        ///  Memory Protection Unit
    +        pub const MPU = extern struct {
    +            ///  MPU Type Register
    +            TYPE: mmio.Mmio(packed struct(u32) {
    +                SEPARATE: u1,
    +                reserved8: u7,
    +                DREGION: u8,
    +                IREGION: u8,
    +                padding: u8,
    +            }),
    +            ///  MPU Control Register
    +            CTRL: mmio.Mmio(packed struct(u32) {
    +                ENABLE: u1,
    +                HFNMIENA: u1,
    +                PRIVDEFENA: u1,
    +                padding: u29,
    +            }),
    +            ///  MPU Region RNRber Register
    +            RNR: mmio.Mmio(packed struct(u32) {
    +                REGION: u8,
    +                padding: u24,
    +            }),
    +            ///  MPU Region Base Address Register
    +            RBAR: mmio.Mmio(packed struct(u32) {
    +                REGION: u4,
    +                VALID: u1,
    +                reserved8: u3,
    +                ADDR: u24,
    +            }),
    +            ///  MPU Region Attribute and Size Register
    +            RASR: mmio.Mmio(packed struct(u32) {
    +                ENABLE: u1,
    +                SIZE: u5,
    +                reserved8: u2,
    +                SRD: u8,
    +                B: u1,
    +                C: u1,
    +                S: u1,
    +                TEX: u3,
    +                reserved24: u2,
    +                AP: u3,
    +                reserved28: u1,
    +                XN: u1,
    +                padding: u3,
    +            }),
    +        };
    +
    +        ///  QSPI flash execute-in-place block
    +        pub const XIP_CTRL = extern struct {
    +            ///  Cache control
    +            CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  When 1, enable the cache. When the cache is disabled, all XIP accesses
    +                ///  will go straight to the flash, without querying the cache. When enabled,
    +                ///  cacheable XIP accesses will query the cache, and the flash will
    +                ///  not be accessed if the tag matches and the valid bit is set.
    +                ///  If the cache is enabled, cache-as-SRAM accesses have no effect on the
    +                ///  cache data RAM, and will produce a bus error response.
    +                EN: u1,
    +                ///  When 1, writes to any alias other than 0x0 (caching, allocating)
    +                ///  will produce a bus fault. When 0, these writes are silently ignored.
    +                ///  In either case, writes to the 0x0 alias will deallocate on tag match,
    +                ///  as usual.
    +                ERR_BADWRITE: u1,
    +                reserved3: u1,
    +                ///  When 1, the cache memories are powered down. They retain state,
    +                ///  but can not be accessed. This reduces static power dissipation.
    +                ///  Writing 1 to this bit forces CTRL_EN to 0, i.e. the cache cannot
    +                ///  be enabled when powered down.
    +                ///  Cache-as-SRAM accesses will produce a bus error response when
    +                ///  the cache is powered down.
    +                POWER_DOWN: u1,
    +                padding: u28,
    +            }),
    +            ///  Cache Flush control
    +            FLUSH: mmio.Mmio(packed struct(u32) {
    +                ///  Write 1 to flush the cache. This clears the tag memory, but
    +                ///  the data memory retains its contents. (This means cache-as-SRAM
    +                ///  contents is not affected by flush or reset.)
    +                ///  Reading will hold the bus (stall the processor) until the flush
    +                ///  completes. Alternatively STAT can be polled until completion.
    +                FLUSH: u1,
    +                padding: u31,
    +            }),
    +            ///  Cache Status
    +            STAT: mmio.Mmio(packed struct(u32) {
    +                ///  Reads as 0 while a cache flush is in progress, and 1 otherwise.
    +                ///  The cache is flushed whenever the XIP block is reset, and also
    +                ///  when requested via the FLUSH register.
    +                FLUSH_READY: u1,
    +                ///  When 1, indicates the XIP streaming FIFO is completely empty.
    +                FIFO_EMPTY: u1,
    +                ///  When 1, indicates the XIP streaming FIFO is completely full.
    +                ///  The streaming FIFO is 2 entries deep, so the full and empty
    +                ///  flag allow its level to be ascertained.
    +                FIFO_FULL: u1,
    +                padding: u29,
    +            }),
    +            ///  Cache Hit counter
    +            ///  A 32 bit saturating counter that increments upon each cache hit,
    +            ///  i.e. when an XIP access is serviced directly from cached data.
    +            ///  Write any value to clear.
    +            CTR_HIT: u32,
    +            ///  Cache Access counter
    +            ///  A 32 bit saturating counter that increments upon each XIP access,
    +            ///  whether the cache is hit or not. This includes noncacheable accesses.
    +            ///  Write any value to clear.
    +            CTR_ACC: u32,
    +            ///  FIFO stream address
    +            STREAM_ADDR: mmio.Mmio(packed struct(u32) {
    +                reserved2: u2,
    +                ///  The address of the next word to be streamed from flash to the streaming FIFO.
    +                ///  Increments automatically after each flash access.
    +                ///  Write the initial access address here before starting a streaming read.
    +                STREAM_ADDR: u30,
    +            }),
    +            ///  FIFO stream control
    +            STREAM_CTR: mmio.Mmio(packed struct(u32) {
    +                ///  Write a nonzero value to start a streaming read. This will then
    +                ///  progress in the background, using flash idle cycles to transfer
    +                ///  a linear data block from flash to the streaming FIFO.
    +                ///  Decrements automatically (1 at a time) as the stream
    +                ///  progresses, and halts on reaching 0.
    +                ///  Write 0 to halt an in-progress stream, and discard any in-flight
    +                ///  read, so that a new stream can immediately be started (after
    +                ///  draining the FIFO and reinitialising STREAM_ADDR)
    +                STREAM_CTR: u22,
    +                padding: u10,
    +            }),
    +            ///  FIFO stream data
    +            ///  Streamed data is buffered here, for retrieval by the system DMA.
    +            ///  This FIFO can also be accessed via the XIP_AUX slave, to avoid exposing
    +            ///  the DMA to bus stalls caused by other XIP traffic.
    +            STREAM_FIFO: u32,
    +        };
    +
    +        ///  DW_apb_ssi has the following features:
    +        ///  * APB interface – Allows for easy integration into a DesignWare Synthesizable Components for AMBA 2 implementation.
    +        ///  * APB3 and APB4 protocol support.
    +        ///  * Scalable APB data bus width – Supports APB data bus widths of 8, 16, and 32 bits.
    +        ///  * Serial-master or serial-slave operation – Enables serial communication with serial-master or serial-slave peripheral devices.
    +        ///  * Programmable Dual/Quad/Octal SPI support in Master Mode.
    +        ///  * Dual Data Rate (DDR) and Read Data Strobe (RDS) Support - Enables the DW_apb_ssi master to perform operations with the device in DDR and RDS modes when working in Dual/Quad/Octal mode of operation.
    +        ///  * Data Mask Support - Enables the DW_apb_ssi to selectively update the bytes in the device. This feature is applicable only in enhanced SPI modes.
    +        ///  * eXecute-In-Place (XIP) support - Enables the DW_apb_ssi master to behave as a memory mapped I/O and fetches the data from the device based on the APB read request. This feature is applicable only in enhanced SPI modes.
    +        ///  * DMA Controller Interface – Enables the DW_apb_ssi to interface to a DMA controller over the bus using a handshaking interface for transfer requests.
    +        ///  * Independent masking of interrupts – Master collision, transmit FIFO overflow, transmit FIFO empty, receive FIFO full, receive FIFO underflow, and receive FIFO overflow interrupts can all be masked independently.
    +        ///  * Multi-master contention detection – Informs the processor of multiple serial-master accesses on the serial bus.
    +        ///  * Bypass of meta-stability flip-flops for synchronous clocks – When the APB clock (pclk) and the DW_apb_ssi serial clock (ssi_clk) are synchronous, meta-stable flip-flops are not used when transferring control signals across these clock domains.
    +        ///  * Programmable delay on the sample time of the received serial data bit (rxd); enables programmable control of routing delays resulting in higher serial data-bit rates.
    +        ///  * Programmable features:
    +        ///  - Serial interface operation – Choice of Motorola SPI, Texas Instruments Synchronous Serial Protocol or National Semiconductor Microwire.
    +        ///  - Clock bit-rate – Dynamic control of the serial bit rate of the data transfer; used in only serial-master mode of operation.
    +        ///  - Data Item size (4 to 32 bits) – Item size of each data transfer under the control of the programmer.
    +        ///  * Configured features:
    +        ///  - FIFO depth – 16 words deep. The FIFO width is fixed at 32 bits.
    +        ///  - 1 slave select output.
    +        ///  - Hardware slave-select – Dedicated hardware slave-select line.
    +        ///  - Combined interrupt line - one combined interrupt line from the DW_apb_ssi to the interrupt controller.
    +        ///  - Interrupt polarity – active high interrupt lines.
    +        ///  - Serial clock polarity – low serial-clock polarity directly after reset.
    +        ///  - Serial clock phase – capture on first edge of serial-clock directly after reset.
    +        pub const XIP_SSI = extern struct {
    +            ///  Control register 0
    +            CTRLR0: mmio.Mmio(packed struct(u32) {
    +                ///  Data frame size
    +                DFS: u4,
    +                ///  Frame format
    +                FRF: u2,
    +                ///  Serial clock phase
    +                SCPH: u1,
    +                ///  Serial clock polarity
    +                SCPOL: u1,
    +                ///  Transfer mode
    +                TMOD: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Both transmit and receive
    +                        TX_AND_RX = 0x0,
    +                        ///  Transmit only (not for FRF == 0, standard SPI mode)
    +                        TX_ONLY = 0x1,
    +                        ///  Receive only (not for FRF == 0, standard SPI mode)
    +                        RX_ONLY = 0x2,
    +                        ///  EEPROM read mode (TX then RX; RX starts after control data TX'd)
    +                        EEPROM_READ = 0x3,
    +                    },
    +                },
    +                ///  Slave output enable
    +                SLV_OE: u1,
    +                ///  Shift register loop (test mode)
    +                SRL: u1,
    +                ///  Control frame size
    +                ///  Value of n -> n+1 clocks per frame.
    +                CFS: u4,
    +                ///  Data frame size in 32b transfer mode
    +                ///  Value of n -> n+1 clocks per frame.
    +                DFS_32: u5,
    +                ///  SPI frame format
    +                SPI_FRF: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Standard 1-bit SPI frame format; 1 bit per SCK, full-duplex
    +                        STD = 0x0,
    +                        ///  Dual-SPI frame format; two bits per SCK, half-duplex
    +                        DUAL = 0x1,
    +                        ///  Quad-SPI frame format; four bits per SCK, half-duplex
    +                        QUAD = 0x2,
    +                        _,
    +                    },
    +                },
    +                reserved24: u1,
    +                ///  Slave select toggle enable
    +                SSTE: u1,
    +                padding: u7,
    +            }),
    +            ///  Master Control register 1
    +            CTRLR1: mmio.Mmio(packed struct(u32) {
    +                ///  Number of data frames
    +                NDF: u16,
    +                padding: u16,
    +            }),
    +            ///  SSI Enable
    +            SSIENR: mmio.Mmio(packed struct(u32) {
    +                ///  SSI enable
    +                SSI_EN: u1,
    +                padding: u31,
    +            }),
    +            ///  Microwire Control
    +            MWCR: mmio.Mmio(packed struct(u32) {
    +                ///  Microwire transfer mode
    +                MWMOD: u1,
    +                ///  Microwire control
    +                MDD: u1,
    +                ///  Microwire handshaking
    +                MHS: u1,
    +                padding: u29,
    +            }),
    +            ///  Slave enable
    +            SER: mmio.Mmio(packed struct(u32) {
    +                ///  For each bit:
    +                ///  0 -> slave not selected
    +                ///  1 -> slave selected
    +                SER: u1,
    +                padding: u31,
    +            }),
    +            ///  Baud rate
    +            BAUDR: mmio.Mmio(packed struct(u32) {
    +                ///  SSI clock divider
    +                SCKDV: u16,
    +                padding: u16,
    +            }),
    +            ///  TX FIFO threshold level
    +            TXFTLR: mmio.Mmio(packed struct(u32) {
    +                ///  Transmit FIFO threshold
    +                TFT: u8,
    +                padding: u24,
    +            }),
    +            ///  RX FIFO threshold level
    +            RXFTLR: mmio.Mmio(packed struct(u32) {
    +                ///  Receive FIFO threshold
    +                RFT: u8,
    +                padding: u24,
    +            }),
    +            ///  TX FIFO level
    +            TXFLR: mmio.Mmio(packed struct(u32) {
    +                ///  Transmit FIFO level
    +                TFTFL: u8,
    +                padding: u24,
    +            }),
    +            ///  RX FIFO level
    +            RXFLR: mmio.Mmio(packed struct(u32) {
    +                ///  Receive FIFO level
    +                RXTFL: u8,
    +                padding: u24,
    +            }),
    +            ///  Status register
    +            SR: mmio.Mmio(packed struct(u32) {
    +                ///  SSI busy flag
    +                BUSY: u1,
    +                ///  Transmit FIFO not full
    +                TFNF: u1,
    +                ///  Transmit FIFO empty
    +                TFE: u1,
    +                ///  Receive FIFO not empty
    +                RFNE: u1,
    +                ///  Receive FIFO full
    +                RFF: u1,
    +                ///  Transmission error
    +                TXE: u1,
    +                ///  Data collision error
    +                DCOL: u1,
    +                padding: u25,
    +            }),
    +            ///  Interrupt mask
    +            IMR: mmio.Mmio(packed struct(u32) {
    +                ///  Transmit FIFO empty interrupt mask
    +                TXEIM: u1,
    +                ///  Transmit FIFO overflow interrupt mask
    +                TXOIM: u1,
    +                ///  Receive FIFO underflow interrupt mask
    +                RXUIM: u1,
    +                ///  Receive FIFO overflow interrupt mask
    +                RXOIM: u1,
    +                ///  Receive FIFO full interrupt mask
    +                RXFIM: u1,
    +                ///  Multi-master contention interrupt mask
    +                MSTIM: u1,
    +                padding: u26,
    +            }),
    +            ///  Interrupt status
    +            ISR: mmio.Mmio(packed struct(u32) {
    +                ///  Transmit FIFO empty interrupt status
    +                TXEIS: u1,
    +                ///  Transmit FIFO overflow interrupt status
    +                TXOIS: u1,
    +                ///  Receive FIFO underflow interrupt status
    +                RXUIS: u1,
    +                ///  Receive FIFO overflow interrupt status
    +                RXOIS: u1,
    +                ///  Receive FIFO full interrupt status
    +                RXFIS: u1,
    +                ///  Multi-master contention interrupt status
    +                MSTIS: u1,
    +                padding: u26,
    +            }),
    +            ///  Raw interrupt status
    +            RISR: mmio.Mmio(packed struct(u32) {
    +                ///  Transmit FIFO empty raw interrupt status
    +                TXEIR: u1,
    +                ///  Transmit FIFO overflow raw interrupt status
    +                TXOIR: u1,
    +                ///  Receive FIFO underflow raw interrupt status
    +                RXUIR: u1,
    +                ///  Receive FIFO overflow raw interrupt status
    +                RXOIR: u1,
    +                ///  Receive FIFO full raw interrupt status
    +                RXFIR: u1,
    +                ///  Multi-master contention raw interrupt status
    +                MSTIR: u1,
    +                padding: u26,
    +            }),
    +            ///  TX FIFO overflow interrupt clear
    +            TXOICR: mmio.Mmio(packed struct(u32) {
    +                ///  Clear-on-read transmit FIFO overflow interrupt
    +                TXOICR: u1,
    +                padding: u31,
    +            }),
    +            ///  RX FIFO overflow interrupt clear
    +            RXOICR: mmio.Mmio(packed struct(u32) {
    +                ///  Clear-on-read receive FIFO overflow interrupt
    +                RXOICR: u1,
    +                padding: u31,
    +            }),
    +            ///  RX FIFO underflow interrupt clear
    +            RXUICR: mmio.Mmio(packed struct(u32) {
    +                ///  Clear-on-read receive FIFO underflow interrupt
    +                RXUICR: u1,
    +                padding: u31,
    +            }),
    +            ///  Multi-master interrupt clear
    +            MSTICR: mmio.Mmio(packed struct(u32) {
    +                ///  Clear-on-read multi-master contention interrupt
    +                MSTICR: u1,
    +                padding: u31,
    +            }),
    +            ///  Interrupt clear
    +            ICR: mmio.Mmio(packed struct(u32) {
    +                ///  Clear-on-read all active interrupts
    +                ICR: u1,
    +                padding: u31,
    +            }),
    +            ///  DMA control
    +            DMACR: mmio.Mmio(packed struct(u32) {
    +                ///  Receive DMA enable
    +                RDMAE: u1,
    +                ///  Transmit DMA enable
    +                TDMAE: u1,
    +                padding: u30,
    +            }),
    +            ///  DMA TX data level
    +            DMATDLR: mmio.Mmio(packed struct(u32) {
    +                ///  Transmit data watermark level
    +                DMATDL: u8,
    +                padding: u24,
    +            }),
    +            ///  DMA RX data level
    +            DMARDLR: mmio.Mmio(packed struct(u32) {
    +                ///  Receive data watermark level (DMARDLR+1)
    +                DMARDL: u8,
    +                padding: u24,
    +            }),
    +            ///  Identification register
    +            IDR: mmio.Mmio(packed struct(u32) {
    +                ///  Peripheral dentification code
    +                IDCODE: u32,
    +            }),
    +            ///  Version ID
    +            SSI_VERSION_ID: mmio.Mmio(packed struct(u32) {
    +                ///  SNPS component version (format X.YY)
    +                SSI_COMP_VERSION: u32,
    +            }),
    +            ///  Data Register 0 (of 36)
    +            DR0: mmio.Mmio(packed struct(u32) {
    +                ///  First data register of 36
    +                DR: u32,
    +            }),
    +            reserved240: [140]u8,
    +            ///  RX sample delay
    +            RX_SAMPLE_DLY: mmio.Mmio(packed struct(u32) {
    +                ///  RXD sample delay (in SCLK cycles)
    +                RSD: u8,
    +                padding: u24,
    +            }),
    +            ///  SPI control
    +            SPI_CTRLR0: mmio.Mmio(packed struct(u32) {
    +                ///  Address and instruction transfer format
    +                TRANS_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Command and address both in standard SPI frame format
    +                        @"1C1A" = 0x0,
    +                        ///  Command in standard SPI format, address in format specified by FRF
    +                        @"1C2A" = 0x1,
    +                        ///  Command and address both in format specified by FRF (e.g. Dual-SPI)
    +                        @"2C2A" = 0x2,
    +                        _,
    +                    },
    +                },
    +                ///  Address length (0b-60b in 4b increments)
    +                ADDR_L: u4,
    +                reserved8: u2,
    +                ///  Instruction length (0/4/8/16b)
    +                INST_L: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  No instruction
    +                        NONE = 0x0,
    +                        ///  4-bit instruction
    +                        @"4B" = 0x1,
    +                        ///  8-bit instruction
    +                        @"8B" = 0x2,
    +                        ///  16-bit instruction
    +                        @"16B" = 0x3,
    +                    },
    +                },
    +                reserved11: u1,
    +                ///  Wait cycles between control frame transmit and data reception (in SCLK cycles)
    +                WAIT_CYCLES: u5,
    +                ///  SPI DDR transfer enable
    +                SPI_DDR_EN: u1,
    +                ///  Instruction DDR transfer enable
    +                INST_DDR_EN: u1,
    +                ///  Read data strobe enable
    +                SPI_RXDS_EN: u1,
    +                reserved24: u5,
    +                ///  SPI Command to send in XIP mode (INST_L = 8-bit) or to append to Address (INST_L = 0-bit)
    +                XIP_CMD: u8,
    +            }),
    +            ///  TX drive edge
    +            TXD_DRIVE_EDGE: mmio.Mmio(packed struct(u32) {
    +                ///  TXD drive edge
    +                TDE: u8,
    +                padding: u24,
    +            }),
    +        };
    +
    +        pub const SYSINFO = extern struct {
    +            ///  JEDEC JEP-106 compliant chip identifier.
    +            CHIP_ID: mmio.Mmio(packed struct(u32) {
    +                MANUFACTURER: u12,
    +                PART: u16,
    +                REVISION: u4,
    +            }),
    +            ///  Platform register. Allows software to know what environment it is running in.
    +            PLATFORM: mmio.Mmio(packed struct(u32) {
    +                FPGA: u1,
    +                ASIC: u1,
    +                padding: u30,
    +            }),
    +            reserved64: [56]u8,
    +            ///  Git hash of the chip source. Used to identify chip version.
    +            GITREF_RP2040: u32,
    +        };
    +
    +        ///  Register block for various chip control signals
    +        pub const SYSCFG = extern struct {
    +            ///  Processor core 0 NMI source mask
    +            ///  Set a bit high to enable NMI from that IRQ
    +            PROC0_NMI_MASK: u32,
    +            ///  Processor core 1 NMI source mask
    +            ///  Set a bit high to enable NMI from that IRQ
    +            PROC1_NMI_MASK: u32,
    +            ///  Configuration for processors
    +            PROC_CONFIG: mmio.Mmio(packed struct(u32) {
    +                ///  Indication that proc0 has halted
    +                PROC0_HALTED: u1,
    +                ///  Indication that proc1 has halted
    +                PROC1_HALTED: u1,
    +                reserved24: u22,
    +                ///  Configure proc0 DAP instance ID.
    +                ///  Recommend that this is NOT changed until you require debug access in multi-chip environment
    +                ///  WARNING: do not set to 15 as this is reserved for RescueDP
    +                PROC0_DAP_INSTID: u4,
    +                ///  Configure proc1 DAP instance ID.
    +                ///  Recommend that this is NOT changed until you require debug access in multi-chip environment
    +                ///  WARNING: do not set to 15 as this is reserved for RescueDP
    +                PROC1_DAP_INSTID: u4,
    +            }),
    +            ///  For each bit, if 1, bypass the input synchronizer between that GPIO
    +            ///  and the GPIO input register in the SIO. The input synchronizers should
    +            ///  generally be unbypassed, to avoid injecting metastabilities into processors.
    +            ///  If you're feeling brave, you can bypass to save two cycles of input
    +            ///  latency. This register applies to GPIO 0...29.
    +            PROC_IN_SYNC_BYPASS: mmio.Mmio(packed struct(u32) {
    +                PROC_IN_SYNC_BYPASS: u30,
    +                padding: u2,
    +            }),
    +            ///  For each bit, if 1, bypass the input synchronizer between that GPIO
    +            ///  and the GPIO input register in the SIO. The input synchronizers should
    +            ///  generally be unbypassed, to avoid injecting metastabilities into processors.
    +            ///  If you're feeling brave, you can bypass to save two cycles of input
    +            ///  latency. This register applies to GPIO 30...35 (the QSPI IOs).
    +            PROC_IN_SYNC_BYPASS_HI: mmio.Mmio(packed struct(u32) {
    +                PROC_IN_SYNC_BYPASS_HI: u6,
    +                padding: u26,
    +            }),
    +            ///  Directly control the SWD debug port of either processor
    +            DBGFORCE: mmio.Mmio(packed struct(u32) {
    +                ///  Observe the value of processor 0 SWDIO output.
    +                PROC0_SWDO: u1,
    +                ///  Directly drive processor 0 SWDIO input, if PROC0_ATTACH is set
    +                PROC0_SWDI: u1,
    +                ///  Directly drive processor 0 SWCLK, if PROC0_ATTACH is set
    +                PROC0_SWCLK: u1,
    +                ///  Attach processor 0 debug port to syscfg controls, and disconnect it from external SWD pads.
    +                PROC0_ATTACH: u1,
    +                ///  Observe the value of processor 1 SWDIO output.
    +                PROC1_SWDO: u1,
    +                ///  Directly drive processor 1 SWDIO input, if PROC1_ATTACH is set
    +                PROC1_SWDI: u1,
    +                ///  Directly drive processor 1 SWCLK, if PROC1_ATTACH is set
    +                PROC1_SWCLK: u1,
    +                ///  Attach processor 1 debug port to syscfg controls, and disconnect it from external SWD pads.
    +                PROC1_ATTACH: u1,
    +                padding: u24,
    +            }),
    +            ///  Control power downs to memories. Set high to power down memories.
    +            ///  Use with extreme caution
    +            MEMPOWERDOWN: mmio.Mmio(packed struct(u32) {
    +                SRAM0: u1,
    +                SRAM1: u1,
    +                SRAM2: u1,
    +                SRAM3: u1,
    +                SRAM4: u1,
    +                SRAM5: u1,
    +                USB: u1,
    +                ROM: u1,
    +                padding: u24,
    +            }),
    +        };
    +
    +        pub const CLOCKS = extern struct {
    +            ///  Clock control, can be changed on-the-fly (except for auxsrc)
    +            CLK_GPOUT0_CTRL: mmio.Mmio(packed struct(u32) {
    +                reserved5: u5,
    +                ///  Selects the auxiliary clock source, will glitch when switching
    +                AUXSRC: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        clksrc_pll_sys = 0x0,
    +                        clksrc_gpin0 = 0x1,
    +                        clksrc_gpin1 = 0x2,
    +                        clksrc_pll_usb = 0x3,
    +                        rosc_clksrc = 0x4,
    +                        xosc_clksrc = 0x5,
    +                        clk_sys = 0x6,
    +                        clk_usb = 0x7,
    +                        clk_adc = 0x8,
    +                        clk_rtc = 0x9,
    +                        clk_ref = 0xa,
    +                        _,
    +                    },
    +                },
    +                reserved10: u1,
    +                ///  Asynchronously kills the clock generator
    +                KILL: u1,
    +                ///  Starts and stops the clock generator cleanly
    +                ENABLE: u1,
    +                ///  Enables duty cycle correction for odd divisors
    +                DC50: u1,
    +                reserved16: u3,
    +                ///  This delays the enable signal by up to 3 cycles of the input clock
    +                ///  This must be set before the clock is enabled to have any effect
    +                PHASE: u2,
    +                reserved20: u2,
    +                ///  An edge on this signal shifts the phase of the output by 1 cycle of the input clock
    +                ///  This can be done at any time
    +                NUDGE: u1,
    +                padding: u11,
    +            }),
    +            ///  Clock divisor, can be changed on-the-fly
    +            CLK_GPOUT0_DIV: mmio.Mmio(packed struct(u32) {
    +                ///  Fractional component of the divisor
    +                FRAC: u8,
    +                ///  Integer component of the divisor, 0 -> divide by 2^16
    +                INT: u24,
    +            }),
    +            ///  Indicates which SRC is currently selected by the glitchless mux (one-hot).
    +            ///  This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1.
    +            CLK_GPOUT0_SELECTED: u32,
    +            ///  Clock control, can be changed on-the-fly (except for auxsrc)
    +            CLK_GPOUT1_CTRL: mmio.Mmio(packed struct(u32) {
    +                reserved5: u5,
    +                ///  Selects the auxiliary clock source, will glitch when switching
    +                AUXSRC: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        clksrc_pll_sys = 0x0,
    +                        clksrc_gpin0 = 0x1,
    +                        clksrc_gpin1 = 0x2,
    +                        clksrc_pll_usb = 0x3,
    +                        rosc_clksrc = 0x4,
    +                        xosc_clksrc = 0x5,
    +                        clk_sys = 0x6,
    +                        clk_usb = 0x7,
    +                        clk_adc = 0x8,
    +                        clk_rtc = 0x9,
    +                        clk_ref = 0xa,
    +                        _,
    +                    },
    +                },
    +                reserved10: u1,
    +                ///  Asynchronously kills the clock generator
    +                KILL: u1,
    +                ///  Starts and stops the clock generator cleanly
    +                ENABLE: u1,
    +                ///  Enables duty cycle correction for odd divisors
    +                DC50: u1,
    +                reserved16: u3,
    +                ///  This delays the enable signal by up to 3 cycles of the input clock
    +                ///  This must be set before the clock is enabled to have any effect
    +                PHASE: u2,
    +                reserved20: u2,
    +                ///  An edge on this signal shifts the phase of the output by 1 cycle of the input clock
    +                ///  This can be done at any time
    +                NUDGE: u1,
    +                padding: u11,
    +            }),
    +            ///  Clock divisor, can be changed on-the-fly
    +            CLK_GPOUT1_DIV: mmio.Mmio(packed struct(u32) {
    +                ///  Fractional component of the divisor
    +                FRAC: u8,
    +                ///  Integer component of the divisor, 0 -> divide by 2^16
    +                INT: u24,
    +            }),
    +            ///  Indicates which SRC is currently selected by the glitchless mux (one-hot).
    +            ///  This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1.
    +            CLK_GPOUT1_SELECTED: u32,
    +            ///  Clock control, can be changed on-the-fly (except for auxsrc)
    +            CLK_GPOUT2_CTRL: mmio.Mmio(packed struct(u32) {
    +                reserved5: u5,
    +                ///  Selects the auxiliary clock source, will glitch when switching
    +                AUXSRC: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        clksrc_pll_sys = 0x0,
    +                        clksrc_gpin0 = 0x1,
    +                        clksrc_gpin1 = 0x2,
    +                        clksrc_pll_usb = 0x3,
    +                        rosc_clksrc_ph = 0x4,
    +                        xosc_clksrc = 0x5,
    +                        clk_sys = 0x6,
    +                        clk_usb = 0x7,
    +                        clk_adc = 0x8,
    +                        clk_rtc = 0x9,
    +                        clk_ref = 0xa,
    +                        _,
    +                    },
    +                },
    +                reserved10: u1,
    +                ///  Asynchronously kills the clock generator
    +                KILL: u1,
    +                ///  Starts and stops the clock generator cleanly
    +                ENABLE: u1,
    +                ///  Enables duty cycle correction for odd divisors
    +                DC50: u1,
    +                reserved16: u3,
    +                ///  This delays the enable signal by up to 3 cycles of the input clock
    +                ///  This must be set before the clock is enabled to have any effect
    +                PHASE: u2,
    +                reserved20: u2,
    +                ///  An edge on this signal shifts the phase of the output by 1 cycle of the input clock
    +                ///  This can be done at any time
    +                NUDGE: u1,
    +                padding: u11,
    +            }),
    +            ///  Clock divisor, can be changed on-the-fly
    +            CLK_GPOUT2_DIV: mmio.Mmio(packed struct(u32) {
    +                ///  Fractional component of the divisor
    +                FRAC: u8,
    +                ///  Integer component of the divisor, 0 -> divide by 2^16
    +                INT: u24,
    +            }),
    +            ///  Indicates which SRC is currently selected by the glitchless mux (one-hot).
    +            ///  This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1.
    +            CLK_GPOUT2_SELECTED: u32,
    +            ///  Clock control, can be changed on-the-fly (except for auxsrc)
    +            CLK_GPOUT3_CTRL: mmio.Mmio(packed struct(u32) {
    +                reserved5: u5,
    +                ///  Selects the auxiliary clock source, will glitch when switching
    +                AUXSRC: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        clksrc_pll_sys = 0x0,
    +                        clksrc_gpin0 = 0x1,
    +                        clksrc_gpin1 = 0x2,
    +                        clksrc_pll_usb = 0x3,
    +                        rosc_clksrc_ph = 0x4,
    +                        xosc_clksrc = 0x5,
    +                        clk_sys = 0x6,
    +                        clk_usb = 0x7,
    +                        clk_adc = 0x8,
    +                        clk_rtc = 0x9,
    +                        clk_ref = 0xa,
    +                        _,
    +                    },
    +                },
    +                reserved10: u1,
    +                ///  Asynchronously kills the clock generator
    +                KILL: u1,
    +                ///  Starts and stops the clock generator cleanly
    +                ENABLE: u1,
    +                ///  Enables duty cycle correction for odd divisors
    +                DC50: u1,
    +                reserved16: u3,
    +                ///  This delays the enable signal by up to 3 cycles of the input clock
    +                ///  This must be set before the clock is enabled to have any effect
    +                PHASE: u2,
    +                reserved20: u2,
    +                ///  An edge on this signal shifts the phase of the output by 1 cycle of the input clock
    +                ///  This can be done at any time
    +                NUDGE: u1,
    +                padding: u11,
    +            }),
    +            ///  Clock divisor, can be changed on-the-fly
    +            CLK_GPOUT3_DIV: mmio.Mmio(packed struct(u32) {
    +                ///  Fractional component of the divisor
    +                FRAC: u8,
    +                ///  Integer component of the divisor, 0 -> divide by 2^16
    +                INT: u24,
    +            }),
    +            ///  Indicates which SRC is currently selected by the glitchless mux (one-hot).
    +            ///  This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1.
    +            CLK_GPOUT3_SELECTED: u32,
    +            ///  Clock control, can be changed on-the-fly (except for auxsrc)
    +            CLK_REF_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  Selects the clock source glitchlessly, can be changed on-the-fly
    +                SRC: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        rosc_clksrc_ph = 0x0,
    +                        clksrc_clk_ref_aux = 0x1,
    +                        xosc_clksrc = 0x2,
    +                        _,
    +                    },
    +                },
    +                reserved5: u3,
    +                ///  Selects the auxiliary clock source, will glitch when switching
    +                AUXSRC: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        clksrc_pll_usb = 0x0,
    +                        clksrc_gpin0 = 0x1,
    +                        clksrc_gpin1 = 0x2,
    +                        _,
    +                    },
    +                },
    +                padding: u25,
    +            }),
    +            ///  Clock divisor, can be changed on-the-fly
    +            CLK_REF_DIV: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  Integer component of the divisor, 0 -> divide by 2^16
    +                INT: u2,
    +                padding: u22,
    +            }),
    +            ///  Indicates which SRC is currently selected by the glitchless mux (one-hot).
    +            ///  The glitchless multiplexer does not switch instantaneously (to avoid glitches), so software should poll this register to wait for the switch to complete. This register contains one decoded bit for each of the clock sources enumerated in the CTRL SRC field. At most one of these bits will be set at any time, indicating that clock is currently present at the output of the glitchless mux. Whilst switching is in progress, this register may briefly show all-0s.
    +            CLK_REF_SELECTED: u32,
    +            ///  Clock control, can be changed on-the-fly (except for auxsrc)
    +            CLK_SYS_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  Selects the clock source glitchlessly, can be changed on-the-fly
    +                SRC: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        clk_ref = 0x0,
    +                        clksrc_clk_sys_aux = 0x1,
    +                    },
    +                },
    +                reserved5: u4,
    +                ///  Selects the auxiliary clock source, will glitch when switching
    +                AUXSRC: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        clksrc_pll_sys = 0x0,
    +                        clksrc_pll_usb = 0x1,
    +                        rosc_clksrc = 0x2,
    +                        xosc_clksrc = 0x3,
    +                        clksrc_gpin0 = 0x4,
    +                        clksrc_gpin1 = 0x5,
    +                        _,
    +                    },
    +                },
    +                padding: u24,
    +            }),
    +            ///  Clock divisor, can be changed on-the-fly
    +            CLK_SYS_DIV: mmio.Mmio(packed struct(u32) {
    +                ///  Fractional component of the divisor
    +                FRAC: u8,
    +                ///  Integer component of the divisor, 0 -> divide by 2^16
    +                INT: u24,
    +            }),
    +            ///  Indicates which SRC is currently selected by the glitchless mux (one-hot).
    +            ///  The glitchless multiplexer does not switch instantaneously (to avoid glitches), so software should poll this register to wait for the switch to complete. This register contains one decoded bit for each of the clock sources enumerated in the CTRL SRC field. At most one of these bits will be set at any time, indicating that clock is currently present at the output of the glitchless mux. Whilst switching is in progress, this register may briefly show all-0s.
    +            CLK_SYS_SELECTED: u32,
    +            ///  Clock control, can be changed on-the-fly (except for auxsrc)
    +            CLK_PERI_CTRL: mmio.Mmio(packed struct(u32) {
    +                reserved5: u5,
    +                ///  Selects the auxiliary clock source, will glitch when switching
    +                AUXSRC: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        clk_sys = 0x0,
    +                        clksrc_pll_sys = 0x1,
    +                        clksrc_pll_usb = 0x2,
    +                        rosc_clksrc_ph = 0x3,
    +                        xosc_clksrc = 0x4,
    +                        clksrc_gpin0 = 0x5,
    +                        clksrc_gpin1 = 0x6,
    +                        _,
    +                    },
    +                },
    +                reserved10: u2,
    +                ///  Asynchronously kills the clock generator
    +                KILL: u1,
    +                ///  Starts and stops the clock generator cleanly
    +                ENABLE: u1,
    +                padding: u20,
    +            }),
    +            reserved80: [4]u8,
    +            ///  Indicates which SRC is currently selected by the glitchless mux (one-hot).
    +            ///  This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1.
    +            CLK_PERI_SELECTED: u32,
    +            ///  Clock control, can be changed on-the-fly (except for auxsrc)
    +            CLK_USB_CTRL: mmio.Mmio(packed struct(u32) {
    +                reserved5: u5,
    +                ///  Selects the auxiliary clock source, will glitch when switching
    +                AUXSRC: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        clksrc_pll_usb = 0x0,
    +                        clksrc_pll_sys = 0x1,
    +                        rosc_clksrc_ph = 0x2,
    +                        xosc_clksrc = 0x3,
    +                        clksrc_gpin0 = 0x4,
    +                        clksrc_gpin1 = 0x5,
    +                        _,
    +                    },
    +                },
    +                reserved10: u2,
    +                ///  Asynchronously kills the clock generator
    +                KILL: u1,
    +                ///  Starts and stops the clock generator cleanly
    +                ENABLE: u1,
    +                reserved16: u4,
    +                ///  This delays the enable signal by up to 3 cycles of the input clock
    +                ///  This must be set before the clock is enabled to have any effect
    +                PHASE: u2,
    +                reserved20: u2,
    +                ///  An edge on this signal shifts the phase of the output by 1 cycle of the input clock
    +                ///  This can be done at any time
    +                NUDGE: u1,
    +                padding: u11,
    +            }),
    +            ///  Clock divisor, can be changed on-the-fly
    +            CLK_USB_DIV: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  Integer component of the divisor, 0 -> divide by 2^16
    +                INT: u2,
    +                padding: u22,
    +            }),
    +            ///  Indicates which SRC is currently selected by the glitchless mux (one-hot).
    +            ///  This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1.
    +            CLK_USB_SELECTED: u32,
    +            ///  Clock control, can be changed on-the-fly (except for auxsrc)
    +            CLK_ADC_CTRL: mmio.Mmio(packed struct(u32) {
    +                reserved5: u5,
    +                ///  Selects the auxiliary clock source, will glitch when switching
    +                AUXSRC: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        clksrc_pll_usb = 0x0,
    +                        clksrc_pll_sys = 0x1,
    +                        rosc_clksrc_ph = 0x2,
    +                        xosc_clksrc = 0x3,
    +                        clksrc_gpin0 = 0x4,
    +                        clksrc_gpin1 = 0x5,
    +                        _,
    +                    },
    +                },
    +                reserved10: u2,
    +                ///  Asynchronously kills the clock generator
    +                KILL: u1,
    +                ///  Starts and stops the clock generator cleanly
    +                ENABLE: u1,
    +                reserved16: u4,
    +                ///  This delays the enable signal by up to 3 cycles of the input clock
    +                ///  This must be set before the clock is enabled to have any effect
    +                PHASE: u2,
    +                reserved20: u2,
    +                ///  An edge on this signal shifts the phase of the output by 1 cycle of the input clock
    +                ///  This can be done at any time
    +                NUDGE: u1,
    +                padding: u11,
    +            }),
    +            ///  Clock divisor, can be changed on-the-fly
    +            CLK_ADC_DIV: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  Integer component of the divisor, 0 -> divide by 2^16
    +                INT: u2,
    +                padding: u22,
    +            }),
    +            ///  Indicates which SRC is currently selected by the glitchless mux (one-hot).
    +            ///  This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1.
    +            CLK_ADC_SELECTED: u32,
    +            ///  Clock control, can be changed on-the-fly (except for auxsrc)
    +            CLK_RTC_CTRL: mmio.Mmio(packed struct(u32) {
    +                reserved5: u5,
    +                ///  Selects the auxiliary clock source, will glitch when switching
    +                AUXSRC: packed union {
    +                    raw: u3,
    +                    value: enum(u3) {
    +                        clksrc_pll_usb = 0x0,
    +                        clksrc_pll_sys = 0x1,
    +                        rosc_clksrc_ph = 0x2,
    +                        xosc_clksrc = 0x3,
    +                        clksrc_gpin0 = 0x4,
    +                        clksrc_gpin1 = 0x5,
    +                        _,
    +                    },
    +                },
    +                reserved10: u2,
    +                ///  Asynchronously kills the clock generator
    +                KILL: u1,
    +                ///  Starts and stops the clock generator cleanly
    +                ENABLE: u1,
    +                reserved16: u4,
    +                ///  This delays the enable signal by up to 3 cycles of the input clock
    +                ///  This must be set before the clock is enabled to have any effect
    +                PHASE: u2,
    +                reserved20: u2,
    +                ///  An edge on this signal shifts the phase of the output by 1 cycle of the input clock
    +                ///  This can be done at any time
    +                NUDGE: u1,
    +                padding: u11,
    +            }),
    +            ///  Clock divisor, can be changed on-the-fly
    +            CLK_RTC_DIV: mmio.Mmio(packed struct(u32) {
    +                ///  Fractional component of the divisor
    +                FRAC: u8,
    +                ///  Integer component of the divisor, 0 -> divide by 2^16
    +                INT: u24,
    +            }),
    +            ///  Indicates which SRC is currently selected by the glitchless mux (one-hot).
    +            ///  This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1.
    +            CLK_RTC_SELECTED: u32,
    +            CLK_SYS_RESUS_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  This is expressed as a number of clk_ref cycles
    +                ///  and must be >= 2x clk_ref_freq/min_clk_tst_freq
    +                TIMEOUT: u8,
    +                ///  Enable resus
    +                ENABLE: u1,
    +                reserved12: u3,
    +                ///  Force a resus, for test purposes only
    +                FRCE: u1,
    +                reserved16: u3,
    +                ///  For clearing the resus after the fault that triggered it has been corrected
    +                CLEAR: u1,
    +                padding: u15,
    +            }),
    +            CLK_SYS_RESUS_STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  Clock has been resuscitated, correct the error then send ctrl_clear=1
    +                RESUSSED: u1,
    +                padding: u31,
    +            }),
    +            ///  Reference clock frequency in kHz
    +            FC0_REF_KHZ: mmio.Mmio(packed struct(u32) {
    +                FC0_REF_KHZ: u20,
    +                padding: u12,
    +            }),
    +            ///  Minimum pass frequency in kHz. This is optional. Set to 0 if you are not using the pass/fail flags
    +            FC0_MIN_KHZ: mmio.Mmio(packed struct(u32) {
    +                FC0_MIN_KHZ: u25,
    +                padding: u7,
    +            }),
    +            ///  Maximum pass frequency in kHz. This is optional. Set to 0x1ffffff if you are not using the pass/fail flags
    +            FC0_MAX_KHZ: mmio.Mmio(packed struct(u32) {
    +                FC0_MAX_KHZ: u25,
    +                padding: u7,
    +            }),
    +            ///  Delays the start of frequency counting to allow the mux to settle
    +            ///  Delay is measured in multiples of the reference clock period
    +            FC0_DELAY: mmio.Mmio(packed struct(u32) {
    +                FC0_DELAY: u3,
    +                padding: u29,
    +            }),
    +            ///  The test interval is 0.98us * 2**interval, but let's call it 1us * 2**interval
    +            ///  The default gives a test interval of 250us
    +            FC0_INTERVAL: mmio.Mmio(packed struct(u32) {
    +                FC0_INTERVAL: u4,
    +                padding: u28,
    +            }),
    +            ///  Clock sent to frequency counter, set to 0 when not required
    +            ///  Writing to this register initiates the frequency count
    +            FC0_SRC: mmio.Mmio(packed struct(u32) {
    +                FC0_SRC: packed union {
    +                    raw: u8,
    +                    value: enum(u8) {
    +                        NULL = 0x0,
    +                        pll_sys_clksrc_primary = 0x1,
    +                        pll_usb_clksrc_primary = 0x2,
    +                        rosc_clksrc = 0x3,
    +                        rosc_clksrc_ph = 0x4,
    +                        xosc_clksrc = 0x5,
    +                        clksrc_gpin0 = 0x6,
    +                        clksrc_gpin1 = 0x7,
    +                        clk_ref = 0x8,
    +                        clk_sys = 0x9,
    +                        clk_peri = 0xa,
    +                        clk_usb = 0xb,
    +                        clk_adc = 0xc,
    +                        clk_rtc = 0xd,
    +                        _,
    +                    },
    +                },
    +                padding: u24,
    +            }),
    +            ///  Frequency counter status
    +            FC0_STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  Test passed
    +                PASS: u1,
    +                reserved4: u3,
    +                ///  Test complete
    +                DONE: u1,
    +                reserved8: u3,
    +                ///  Test running
    +                RUNNING: u1,
    +                reserved12: u3,
    +                ///  Waiting for test clock to start
    +                WAITING: u1,
    +                reserved16: u3,
    +                ///  Test failed
    +                FAIL: u1,
    +                reserved20: u3,
    +                ///  Test clock slower than expected, only valid when status_done=1
    +                SLOW: u1,
    +                reserved24: u3,
    +                ///  Test clock faster than expected, only valid when status_done=1
    +                FAST: u1,
    +                reserved28: u3,
    +                ///  Test clock stopped during test
    +                DIED: u1,
    +                padding: u3,
    +            }),
    +            ///  Result of frequency measurement, only valid when status_done=1
    +            FC0_RESULT: mmio.Mmio(packed struct(u32) {
    +                FRAC: u5,
    +                KHZ: u25,
    +                padding: u2,
    +            }),
    +            ///  enable clock in wake mode
    +            WAKE_EN0: mmio.Mmio(packed struct(u32) {
    +                clk_sys_clocks: u1,
    +                clk_adc_adc: u1,
    +                clk_sys_adc: u1,
    +                clk_sys_busctrl: u1,
    +                clk_sys_busfabric: u1,
    +                clk_sys_dma: u1,
    +                clk_sys_i2c0: u1,
    +                clk_sys_i2c1: u1,
    +                clk_sys_io: u1,
    +                clk_sys_jtag: u1,
    +                clk_sys_vreg_and_chip_reset: u1,
    +                clk_sys_pads: u1,
    +                clk_sys_pio0: u1,
    +                clk_sys_pio1: u1,
    +                clk_sys_pll_sys: u1,
    +                clk_sys_pll_usb: u1,
    +                clk_sys_psm: u1,
    +                clk_sys_pwm: u1,
    +                clk_sys_resets: u1,
    +                clk_sys_rom: u1,
    +                clk_sys_rosc: u1,
    +                clk_rtc_rtc: u1,
    +                clk_sys_rtc: u1,
    +                clk_sys_sio: u1,
    +                clk_peri_spi0: u1,
    +                clk_sys_spi0: u1,
    +                clk_peri_spi1: u1,
    +                clk_sys_spi1: u1,
    +                clk_sys_sram0: u1,
    +                clk_sys_sram1: u1,
    +                clk_sys_sram2: u1,
    +                clk_sys_sram3: u1,
    +            }),
    +            ///  enable clock in wake mode
    +            WAKE_EN1: mmio.Mmio(packed struct(u32) {
    +                clk_sys_sram4: u1,
    +                clk_sys_sram5: u1,
    +                clk_sys_syscfg: u1,
    +                clk_sys_sysinfo: u1,
    +                clk_sys_tbman: u1,
    +                clk_sys_timer: u1,
    +                clk_peri_uart0: u1,
    +                clk_sys_uart0: u1,
    +                clk_peri_uart1: u1,
    +                clk_sys_uart1: u1,
    +                clk_sys_usbctrl: u1,
    +                clk_usb_usbctrl: u1,
    +                clk_sys_watchdog: u1,
    +                clk_sys_xip: u1,
    +                clk_sys_xosc: u1,
    +                padding: u17,
    +            }),
    +            ///  enable clock in sleep mode
    +            SLEEP_EN0: mmio.Mmio(packed struct(u32) {
    +                clk_sys_clocks: u1,
    +                clk_adc_adc: u1,
    +                clk_sys_adc: u1,
    +                clk_sys_busctrl: u1,
    +                clk_sys_busfabric: u1,
    +                clk_sys_dma: u1,
    +                clk_sys_i2c0: u1,
    +                clk_sys_i2c1: u1,
    +                clk_sys_io: u1,
    +                clk_sys_jtag: u1,
    +                clk_sys_vreg_and_chip_reset: u1,
    +                clk_sys_pads: u1,
    +                clk_sys_pio0: u1,
    +                clk_sys_pio1: u1,
    +                clk_sys_pll_sys: u1,
    +                clk_sys_pll_usb: u1,
    +                clk_sys_psm: u1,
    +                clk_sys_pwm: u1,
    +                clk_sys_resets: u1,
    +                clk_sys_rom: u1,
    +                clk_sys_rosc: u1,
    +                clk_rtc_rtc: u1,
    +                clk_sys_rtc: u1,
    +                clk_sys_sio: u1,
    +                clk_peri_spi0: u1,
    +                clk_sys_spi0: u1,
    +                clk_peri_spi1: u1,
    +                clk_sys_spi1: u1,
    +                clk_sys_sram0: u1,
    +                clk_sys_sram1: u1,
    +                clk_sys_sram2: u1,
    +                clk_sys_sram3: u1,
    +            }),
    +            ///  enable clock in sleep mode
    +            SLEEP_EN1: mmio.Mmio(packed struct(u32) {
    +                clk_sys_sram4: u1,
    +                clk_sys_sram5: u1,
    +                clk_sys_syscfg: u1,
    +                clk_sys_sysinfo: u1,
    +                clk_sys_tbman: u1,
    +                clk_sys_timer: u1,
    +                clk_peri_uart0: u1,
    +                clk_sys_uart0: u1,
    +                clk_peri_uart1: u1,
    +                clk_sys_uart1: u1,
    +                clk_sys_usbctrl: u1,
    +                clk_usb_usbctrl: u1,
    +                clk_sys_watchdog: u1,
    +                clk_sys_xip: u1,
    +                clk_sys_xosc: u1,
    +                padding: u17,
    +            }),
    +            ///  indicates the state of the clock enable
    +            ENABLED0: mmio.Mmio(packed struct(u32) {
    +                clk_sys_clocks: u1,
    +                clk_adc_adc: u1,
    +                clk_sys_adc: u1,
    +                clk_sys_busctrl: u1,
    +                clk_sys_busfabric: u1,
    +                clk_sys_dma: u1,
    +                clk_sys_i2c0: u1,
    +                clk_sys_i2c1: u1,
    +                clk_sys_io: u1,
    +                clk_sys_jtag: u1,
    +                clk_sys_vreg_and_chip_reset: u1,
    +                clk_sys_pads: u1,
    +                clk_sys_pio0: u1,
    +                clk_sys_pio1: u1,
    +                clk_sys_pll_sys: u1,
    +                clk_sys_pll_usb: u1,
    +                clk_sys_psm: u1,
    +                clk_sys_pwm: u1,
    +                clk_sys_resets: u1,
    +                clk_sys_rom: u1,
    +                clk_sys_rosc: u1,
    +                clk_rtc_rtc: u1,
    +                clk_sys_rtc: u1,
    +                clk_sys_sio: u1,
    +                clk_peri_spi0: u1,
    +                clk_sys_spi0: u1,
    +                clk_peri_spi1: u1,
    +                clk_sys_spi1: u1,
    +                clk_sys_sram0: u1,
    +                clk_sys_sram1: u1,
    +                clk_sys_sram2: u1,
    +                clk_sys_sram3: u1,
    +            }),
    +            ///  indicates the state of the clock enable
    +            ENABLED1: mmio.Mmio(packed struct(u32) {
    +                clk_sys_sram4: u1,
    +                clk_sys_sram5: u1,
    +                clk_sys_syscfg: u1,
    +                clk_sys_sysinfo: u1,
    +                clk_sys_tbman: u1,
    +                clk_sys_timer: u1,
    +                clk_peri_uart0: u1,
    +                clk_sys_uart0: u1,
    +                clk_peri_uart1: u1,
    +                clk_sys_uart1: u1,
    +                clk_sys_usbctrl: u1,
    +                clk_usb_usbctrl: u1,
    +                clk_sys_watchdog: u1,
    +                clk_sys_xip: u1,
    +                clk_sys_xosc: u1,
    +                padding: u17,
    +            }),
    +            ///  Raw Interrupts
    +            INTR: mmio.Mmio(packed struct(u32) {
    +                CLK_SYS_RESUS: u1,
    +                padding: u31,
    +            }),
    +            ///  Interrupt Enable
    +            INTE: mmio.Mmio(packed struct(u32) {
    +                CLK_SYS_RESUS: u1,
    +                padding: u31,
    +            }),
    +            ///  Interrupt Force
    +            INTF: mmio.Mmio(packed struct(u32) {
    +                CLK_SYS_RESUS: u1,
    +                padding: u31,
    +            }),
    +            ///  Interrupt status after masking & forcing
    +            INTS: mmio.Mmio(packed struct(u32) {
    +                CLK_SYS_RESUS: u1,
    +                padding: u31,
    +            }),
    +        };
    +
    +        pub const RESETS = extern struct {
    +            ///  Reset control. If a bit is set it means the peripheral is in reset. 0 means the peripheral's reset is deasserted.
    +            RESET: mmio.Mmio(packed struct(u32) {
    +                adc: u1,
    +                busctrl: u1,
    +                dma: u1,
    +                i2c0: u1,
    +                i2c1: u1,
    +                io_bank0: u1,
    +                io_qspi: u1,
    +                jtag: u1,
    +                pads_bank0: u1,
    +                pads_qspi: u1,
    +                pio0: u1,
    +                pio1: u1,
    +                pll_sys: u1,
    +                pll_usb: u1,
    +                pwm: u1,
    +                rtc: u1,
    +                spi0: u1,
    +                spi1: u1,
    +                syscfg: u1,
    +                sysinfo: u1,
    +                tbman: u1,
    +                timer: u1,
    +                uart0: u1,
    +                uart1: u1,
    +                usbctrl: u1,
    +                padding: u7,
    +            }),
    +            ///  Watchdog select. If a bit is set then the watchdog will reset this peripheral when the watchdog fires.
    +            WDSEL: mmio.Mmio(packed struct(u32) {
    +                adc: u1,
    +                busctrl: u1,
    +                dma: u1,
    +                i2c0: u1,
    +                i2c1: u1,
    +                io_bank0: u1,
    +                io_qspi: u1,
    +                jtag: u1,
    +                pads_bank0: u1,
    +                pads_qspi: u1,
    +                pio0: u1,
    +                pio1: u1,
    +                pll_sys: u1,
    +                pll_usb: u1,
    +                pwm: u1,
    +                rtc: u1,
    +                spi0: u1,
    +                spi1: u1,
    +                syscfg: u1,
    +                sysinfo: u1,
    +                tbman: u1,
    +                timer: u1,
    +                uart0: u1,
    +                uart1: u1,
    +                usbctrl: u1,
    +                padding: u7,
    +            }),
    +            ///  Reset done. If a bit is set then a reset done signal has been returned by the peripheral. This indicates that the peripheral's registers are ready to be accessed.
    +            RESET_DONE: mmio.Mmio(packed struct(u32) {
    +                adc: u1,
    +                busctrl: u1,
    +                dma: u1,
    +                i2c0: u1,
    +                i2c1: u1,
    +                io_bank0: u1,
    +                io_qspi: u1,
    +                jtag: u1,
    +                pads_bank0: u1,
    +                pads_qspi: u1,
    +                pio0: u1,
    +                pio1: u1,
    +                pll_sys: u1,
    +                pll_usb: u1,
    +                pwm: u1,
    +                rtc: u1,
    +                spi0: u1,
    +                spi1: u1,
    +                syscfg: u1,
    +                sysinfo: u1,
    +                tbman: u1,
    +                timer: u1,
    +                uart0: u1,
    +                uart1: u1,
    +                usbctrl: u1,
    +                padding: u7,
    +            }),
    +        };
    +
    +        pub const PSM = extern struct {
    +            ///  Force block out of reset (i.e. power it on)
    +            FRCE_ON: mmio.Mmio(packed struct(u32) {
    +                rosc: u1,
    +                xosc: u1,
    +                clocks: u1,
    +                resets: u1,
    +                busfabric: u1,
    +                rom: u1,
    +                sram0: u1,
    +                sram1: u1,
    +                sram2: u1,
    +                sram3: u1,
    +                sram4: u1,
    +                sram5: u1,
    +                xip: u1,
    +                vreg_and_chip_reset: u1,
    +                sio: u1,
    +                proc0: u1,
    +                proc1: u1,
    +                padding: u15,
    +            }),
    +            ///  Force into reset (i.e. power it off)
    +            FRCE_OFF: mmio.Mmio(packed struct(u32) {
    +                rosc: u1,
    +                xosc: u1,
    +                clocks: u1,
    +                resets: u1,
    +                busfabric: u1,
    +                rom: u1,
    +                sram0: u1,
    +                sram1: u1,
    +                sram2: u1,
    +                sram3: u1,
    +                sram4: u1,
    +                sram5: u1,
    +                xip: u1,
    +                vreg_and_chip_reset: u1,
    +                sio: u1,
    +                proc0: u1,
    +                proc1: u1,
    +                padding: u15,
    +            }),
    +            ///  Set to 1 if this peripheral should be reset when the watchdog fires.
    +            WDSEL: mmio.Mmio(packed struct(u32) {
    +                rosc: u1,
    +                xosc: u1,
    +                clocks: u1,
    +                resets: u1,
    +                busfabric: u1,
    +                rom: u1,
    +                sram0: u1,
    +                sram1: u1,
    +                sram2: u1,
    +                sram3: u1,
    +                sram4: u1,
    +                sram5: u1,
    +                xip: u1,
    +                vreg_and_chip_reset: u1,
    +                sio: u1,
    +                proc0: u1,
    +                proc1: u1,
    +                padding: u15,
    +            }),
    +            ///  Indicates the peripheral's registers are ready to access.
    +            DONE: mmio.Mmio(packed struct(u32) {
    +                rosc: u1,
    +                xosc: u1,
    +                clocks: u1,
    +                resets: u1,
    +                busfabric: u1,
    +                rom: u1,
    +                sram0: u1,
    +                sram1: u1,
    +                sram2: u1,
    +                sram3: u1,
    +                sram4: u1,
    +                sram5: u1,
    +                xip: u1,
    +                vreg_and_chip_reset: u1,
    +                sio: u1,
    +                proc0: u1,
    +                proc1: u1,
    +                padding: u15,
    +            }),
    +        };
    +
    +        pub const IO_BANK0 = extern struct {
    +            ///  GPIO status
    +            GPIO0_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO0_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        jtag_tck = 0x0,
    +                        spi0_rx = 0x1,
    +                        uart0_tx = 0x2,
    +                        i2c0_sda = 0x3,
    +                        pwm_a_0 = 0x4,
    +                        sio_0 = 0x5,
    +                        pio0_0 = 0x6,
    +                        pio1_0 = 0x7,
    +                        usb_muxing_overcurr_detect = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO1_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO1_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        jtag_tms = 0x0,
    +                        spi0_ss_n = 0x1,
    +                        uart0_rx = 0x2,
    +                        i2c0_scl = 0x3,
    +                        pwm_b_0 = 0x4,
    +                        sio_1 = 0x5,
    +                        pio0_1 = 0x6,
    +                        pio1_1 = 0x7,
    +                        usb_muxing_vbus_detect = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO2_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO2_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        jtag_tdi = 0x0,
    +                        spi0_sclk = 0x1,
    +                        uart0_cts = 0x2,
    +                        i2c1_sda = 0x3,
    +                        pwm_a_1 = 0x4,
    +                        sio_2 = 0x5,
    +                        pio0_2 = 0x6,
    +                        pio1_2 = 0x7,
    +                        usb_muxing_vbus_en = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO3_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO3_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        jtag_tdo = 0x0,
    +                        spi0_tx = 0x1,
    +                        uart0_rts = 0x2,
    +                        i2c1_scl = 0x3,
    +                        pwm_b_1 = 0x4,
    +                        sio_3 = 0x5,
    +                        pio0_3 = 0x6,
    +                        pio1_3 = 0x7,
    +                        usb_muxing_overcurr_detect = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO4_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO4_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        spi0_rx = 0x1,
    +                        uart1_tx = 0x2,
    +                        i2c0_sda = 0x3,
    +                        pwm_a_2 = 0x4,
    +                        sio_4 = 0x5,
    +                        pio0_4 = 0x6,
    +                        pio1_4 = 0x7,
    +                        usb_muxing_vbus_detect = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO5_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO5_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        spi0_ss_n = 0x1,
    +                        uart1_rx = 0x2,
    +                        i2c0_scl = 0x3,
    +                        pwm_b_2 = 0x4,
    +                        sio_5 = 0x5,
    +                        pio0_5 = 0x6,
    +                        pio1_5 = 0x7,
    +                        usb_muxing_vbus_en = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO6_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO6_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        spi0_sclk = 0x1,
    +                        uart1_cts = 0x2,
    +                        i2c1_sda = 0x3,
    +                        pwm_a_3 = 0x4,
    +                        sio_6 = 0x5,
    +                        pio0_6 = 0x6,
    +                        pio1_6 = 0x7,
    +                        usb_muxing_extphy_softcon = 0x8,
    +                        usb_muxing_overcurr_detect = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO7_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO7_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        spi0_tx = 0x1,
    +                        uart1_rts = 0x2,
    +                        i2c1_scl = 0x3,
    +                        pwm_b_3 = 0x4,
    +                        sio_7 = 0x5,
    +                        pio0_7 = 0x6,
    +                        pio1_7 = 0x7,
    +                        usb_muxing_extphy_oe_n = 0x8,
    +                        usb_muxing_vbus_detect = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO8_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO8_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        spi1_rx = 0x1,
    +                        uart1_tx = 0x2,
    +                        i2c0_sda = 0x3,
    +                        pwm_a_4 = 0x4,
    +                        sio_8 = 0x5,
    +                        pio0_8 = 0x6,
    +                        pio1_8 = 0x7,
    +                        usb_muxing_extphy_rcv = 0x8,
    +                        usb_muxing_vbus_en = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO9_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO9_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        spi1_ss_n = 0x1,
    +                        uart1_rx = 0x2,
    +                        i2c0_scl = 0x3,
    +                        pwm_b_4 = 0x4,
    +                        sio_9 = 0x5,
    +                        pio0_9 = 0x6,
    +                        pio1_9 = 0x7,
    +                        usb_muxing_extphy_vp = 0x8,
    +                        usb_muxing_overcurr_detect = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO10_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO10_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        spi1_sclk = 0x1,
    +                        uart1_cts = 0x2,
    +                        i2c1_sda = 0x3,
    +                        pwm_a_5 = 0x4,
    +                        sio_10 = 0x5,
    +                        pio0_10 = 0x6,
    +                        pio1_10 = 0x7,
    +                        usb_muxing_extphy_vm = 0x8,
    +                        usb_muxing_vbus_detect = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO11_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO11_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        spi1_tx = 0x1,
    +                        uart1_rts = 0x2,
    +                        i2c1_scl = 0x3,
    +                        pwm_b_5 = 0x4,
    +                        sio_11 = 0x5,
    +                        pio0_11 = 0x6,
    +                        pio1_11 = 0x7,
    +                        usb_muxing_extphy_suspnd = 0x8,
    +                        usb_muxing_vbus_en = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO12_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO12_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        spi1_rx = 0x1,
    +                        uart0_tx = 0x2,
    +                        i2c0_sda = 0x3,
    +                        pwm_a_6 = 0x4,
    +                        sio_12 = 0x5,
    +                        pio0_12 = 0x6,
    +                        pio1_12 = 0x7,
    +                        usb_muxing_extphy_speed = 0x8,
    +                        usb_muxing_overcurr_detect = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO13_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO13_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        spi1_ss_n = 0x1,
    +                        uart0_rx = 0x2,
    +                        i2c0_scl = 0x3,
    +                        pwm_b_6 = 0x4,
    +                        sio_13 = 0x5,
    +                        pio0_13 = 0x6,
    +                        pio1_13 = 0x7,
    +                        usb_muxing_extphy_vpo = 0x8,
    +                        usb_muxing_vbus_detect = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO14_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO14_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        spi1_sclk = 0x1,
    +                        uart0_cts = 0x2,
    +                        i2c1_sda = 0x3,
    +                        pwm_a_7 = 0x4,
    +                        sio_14 = 0x5,
    +                        pio0_14 = 0x6,
    +                        pio1_14 = 0x7,
    +                        usb_muxing_extphy_vmo = 0x8,
    +                        usb_muxing_vbus_en = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO15_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO15_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        spi1_tx = 0x1,
    +                        uart0_rts = 0x2,
    +                        i2c1_scl = 0x3,
    +                        pwm_b_7 = 0x4,
    +                        sio_15 = 0x5,
    +                        pio0_15 = 0x6,
    +                        pio1_15 = 0x7,
    +                        usb_muxing_digital_dp = 0x8,
    +                        usb_muxing_overcurr_detect = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO16_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO16_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        spi0_rx = 0x1,
    +                        uart0_tx = 0x2,
    +                        i2c0_sda = 0x3,
    +                        pwm_a_0 = 0x4,
    +                        sio_16 = 0x5,
    +                        pio0_16 = 0x6,
    +                        pio1_16 = 0x7,
    +                        usb_muxing_digital_dm = 0x8,
    +                        usb_muxing_vbus_detect = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO17_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO17_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        spi0_ss_n = 0x1,
    +                        uart0_rx = 0x2,
    +                        i2c0_scl = 0x3,
    +                        pwm_b_0 = 0x4,
    +                        sio_17 = 0x5,
    +                        pio0_17 = 0x6,
    +                        pio1_17 = 0x7,
    +                        usb_muxing_vbus_en = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO18_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO18_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        spi0_sclk = 0x1,
    +                        uart0_cts = 0x2,
    +                        i2c1_sda = 0x3,
    +                        pwm_a_1 = 0x4,
    +                        sio_18 = 0x5,
    +                        pio0_18 = 0x6,
    +                        pio1_18 = 0x7,
    +                        usb_muxing_overcurr_detect = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO19_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO19_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        spi0_tx = 0x1,
    +                        uart0_rts = 0x2,
    +                        i2c1_scl = 0x3,
    +                        pwm_b_1 = 0x4,
    +                        sio_19 = 0x5,
    +                        pio0_19 = 0x6,
    +                        pio1_19 = 0x7,
    +                        usb_muxing_vbus_detect = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO20_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO20_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        spi0_rx = 0x1,
    +                        uart1_tx = 0x2,
    +                        i2c0_sda = 0x3,
    +                        pwm_a_2 = 0x4,
    +                        sio_20 = 0x5,
    +                        pio0_20 = 0x6,
    +                        pio1_20 = 0x7,
    +                        clocks_gpin_0 = 0x8,
    +                        usb_muxing_vbus_en = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO21_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO21_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        spi0_ss_n = 0x1,
    +                        uart1_rx = 0x2,
    +                        i2c0_scl = 0x3,
    +                        pwm_b_2 = 0x4,
    +                        sio_21 = 0x5,
    +                        pio0_21 = 0x6,
    +                        pio1_21 = 0x7,
    +                        clocks_gpout_0 = 0x8,
    +                        usb_muxing_overcurr_detect = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO22_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO22_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        spi0_sclk = 0x1,
    +                        uart1_cts = 0x2,
    +                        i2c1_sda = 0x3,
    +                        pwm_a_3 = 0x4,
    +                        sio_22 = 0x5,
    +                        pio0_22 = 0x6,
    +                        pio1_22 = 0x7,
    +                        clocks_gpin_1 = 0x8,
    +                        usb_muxing_vbus_detect = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO23_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO23_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        spi0_tx = 0x1,
    +                        uart1_rts = 0x2,
    +                        i2c1_scl = 0x3,
    +                        pwm_b_3 = 0x4,
    +                        sio_23 = 0x5,
    +                        pio0_23 = 0x6,
    +                        pio1_23 = 0x7,
    +                        clocks_gpout_1 = 0x8,
    +                        usb_muxing_vbus_en = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO24_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO24_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        spi1_rx = 0x1,
    +                        uart1_tx = 0x2,
    +                        i2c0_sda = 0x3,
    +                        pwm_a_4 = 0x4,
    +                        sio_24 = 0x5,
    +                        pio0_24 = 0x6,
    +                        pio1_24 = 0x7,
    +                        clocks_gpout_2 = 0x8,
    +                        usb_muxing_overcurr_detect = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO25_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO25_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        spi1_ss_n = 0x1,
    +                        uart1_rx = 0x2,
    +                        i2c0_scl = 0x3,
    +                        pwm_b_4 = 0x4,
    +                        sio_25 = 0x5,
    +                        pio0_25 = 0x6,
    +                        pio1_25 = 0x7,
    +                        clocks_gpout_3 = 0x8,
    +                        usb_muxing_vbus_detect = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO26_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO26_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        spi1_sclk = 0x1,
    +                        uart1_cts = 0x2,
    +                        i2c1_sda = 0x3,
    +                        pwm_a_5 = 0x4,
    +                        sio_26 = 0x5,
    +                        pio0_26 = 0x6,
    +                        pio1_26 = 0x7,
    +                        usb_muxing_vbus_en = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO27_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO27_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        spi1_tx = 0x1,
    +                        uart1_rts = 0x2,
    +                        i2c1_scl = 0x3,
    +                        pwm_b_5 = 0x4,
    +                        sio_27 = 0x5,
    +                        pio0_27 = 0x6,
    +                        pio1_27 = 0x7,
    +                        usb_muxing_overcurr_detect = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO28_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO28_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        spi1_rx = 0x1,
    +                        uart0_tx = 0x2,
    +                        i2c0_sda = 0x3,
    +                        pwm_a_6 = 0x4,
    +                        sio_28 = 0x5,
    +                        pio0_28 = 0x6,
    +                        pio1_28 = 0x7,
    +                        usb_muxing_vbus_detect = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO29_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO29_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        spi1_ss_n = 0x1,
    +                        uart0_rx = 0x2,
    +                        i2c0_scl = 0x3,
    +                        pwm_b_6 = 0x4,
    +                        sio_29 = 0x5,
    +                        pio0_29 = 0x6,
    +                        pio1_29 = 0x7,
    +                        usb_muxing_vbus_en = 0x9,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  Raw Interrupts
    +            INTR0: mmio.Mmio(packed struct(u32) {
    +                GPIO0_LEVEL_LOW: u1,
    +                GPIO0_LEVEL_HIGH: u1,
    +                GPIO0_EDGE_LOW: u1,
    +                GPIO0_EDGE_HIGH: u1,
    +                GPIO1_LEVEL_LOW: u1,
    +                GPIO1_LEVEL_HIGH: u1,
    +                GPIO1_EDGE_LOW: u1,
    +                GPIO1_EDGE_HIGH: u1,
    +                GPIO2_LEVEL_LOW: u1,
    +                GPIO2_LEVEL_HIGH: u1,
    +                GPIO2_EDGE_LOW: u1,
    +                GPIO2_EDGE_HIGH: u1,
    +                GPIO3_LEVEL_LOW: u1,
    +                GPIO3_LEVEL_HIGH: u1,
    +                GPIO3_EDGE_LOW: u1,
    +                GPIO3_EDGE_HIGH: u1,
    +                GPIO4_LEVEL_LOW: u1,
    +                GPIO4_LEVEL_HIGH: u1,
    +                GPIO4_EDGE_LOW: u1,
    +                GPIO4_EDGE_HIGH: u1,
    +                GPIO5_LEVEL_LOW: u1,
    +                GPIO5_LEVEL_HIGH: u1,
    +                GPIO5_EDGE_LOW: u1,
    +                GPIO5_EDGE_HIGH: u1,
    +                GPIO6_LEVEL_LOW: u1,
    +                GPIO6_LEVEL_HIGH: u1,
    +                GPIO6_EDGE_LOW: u1,
    +                GPIO6_EDGE_HIGH: u1,
    +                GPIO7_LEVEL_LOW: u1,
    +                GPIO7_LEVEL_HIGH: u1,
    +                GPIO7_EDGE_LOW: u1,
    +                GPIO7_EDGE_HIGH: u1,
    +            }),
    +            ///  Raw Interrupts
    +            INTR1: mmio.Mmio(packed struct(u32) {
    +                GPIO8_LEVEL_LOW: u1,
    +                GPIO8_LEVEL_HIGH: u1,
    +                GPIO8_EDGE_LOW: u1,
    +                GPIO8_EDGE_HIGH: u1,
    +                GPIO9_LEVEL_LOW: u1,
    +                GPIO9_LEVEL_HIGH: u1,
    +                GPIO9_EDGE_LOW: u1,
    +                GPIO9_EDGE_HIGH: u1,
    +                GPIO10_LEVEL_LOW: u1,
    +                GPIO10_LEVEL_HIGH: u1,
    +                GPIO10_EDGE_LOW: u1,
    +                GPIO10_EDGE_HIGH: u1,
    +                GPIO11_LEVEL_LOW: u1,
    +                GPIO11_LEVEL_HIGH: u1,
    +                GPIO11_EDGE_LOW: u1,
    +                GPIO11_EDGE_HIGH: u1,
    +                GPIO12_LEVEL_LOW: u1,
    +                GPIO12_LEVEL_HIGH: u1,
    +                GPIO12_EDGE_LOW: u1,
    +                GPIO12_EDGE_HIGH: u1,
    +                GPIO13_LEVEL_LOW: u1,
    +                GPIO13_LEVEL_HIGH: u1,
    +                GPIO13_EDGE_LOW: u1,
    +                GPIO13_EDGE_HIGH: u1,
    +                GPIO14_LEVEL_LOW: u1,
    +                GPIO14_LEVEL_HIGH: u1,
    +                GPIO14_EDGE_LOW: u1,
    +                GPIO14_EDGE_HIGH: u1,
    +                GPIO15_LEVEL_LOW: u1,
    +                GPIO15_LEVEL_HIGH: u1,
    +                GPIO15_EDGE_LOW: u1,
    +                GPIO15_EDGE_HIGH: u1,
    +            }),
    +            ///  Raw Interrupts
    +            INTR2: mmio.Mmio(packed struct(u32) {
    +                GPIO16_LEVEL_LOW: u1,
    +                GPIO16_LEVEL_HIGH: u1,
    +                GPIO16_EDGE_LOW: u1,
    +                GPIO16_EDGE_HIGH: u1,
    +                GPIO17_LEVEL_LOW: u1,
    +                GPIO17_LEVEL_HIGH: u1,
    +                GPIO17_EDGE_LOW: u1,
    +                GPIO17_EDGE_HIGH: u1,
    +                GPIO18_LEVEL_LOW: u1,
    +                GPIO18_LEVEL_HIGH: u1,
    +                GPIO18_EDGE_LOW: u1,
    +                GPIO18_EDGE_HIGH: u1,
    +                GPIO19_LEVEL_LOW: u1,
    +                GPIO19_LEVEL_HIGH: u1,
    +                GPIO19_EDGE_LOW: u1,
    +                GPIO19_EDGE_HIGH: u1,
    +                GPIO20_LEVEL_LOW: u1,
    +                GPIO20_LEVEL_HIGH: u1,
    +                GPIO20_EDGE_LOW: u1,
    +                GPIO20_EDGE_HIGH: u1,
    +                GPIO21_LEVEL_LOW: u1,
    +                GPIO21_LEVEL_HIGH: u1,
    +                GPIO21_EDGE_LOW: u1,
    +                GPIO21_EDGE_HIGH: u1,
    +                GPIO22_LEVEL_LOW: u1,
    +                GPIO22_LEVEL_HIGH: u1,
    +                GPIO22_EDGE_LOW: u1,
    +                GPIO22_EDGE_HIGH: u1,
    +                GPIO23_LEVEL_LOW: u1,
    +                GPIO23_LEVEL_HIGH: u1,
    +                GPIO23_EDGE_LOW: u1,
    +                GPIO23_EDGE_HIGH: u1,
    +            }),
    +            ///  Raw Interrupts
    +            INTR3: mmio.Mmio(packed struct(u32) {
    +                GPIO24_LEVEL_LOW: u1,
    +                GPIO24_LEVEL_HIGH: u1,
    +                GPIO24_EDGE_LOW: u1,
    +                GPIO24_EDGE_HIGH: u1,
    +                GPIO25_LEVEL_LOW: u1,
    +                GPIO25_LEVEL_HIGH: u1,
    +                GPIO25_EDGE_LOW: u1,
    +                GPIO25_EDGE_HIGH: u1,
    +                GPIO26_LEVEL_LOW: u1,
    +                GPIO26_LEVEL_HIGH: u1,
    +                GPIO26_EDGE_LOW: u1,
    +                GPIO26_EDGE_HIGH: u1,
    +                GPIO27_LEVEL_LOW: u1,
    +                GPIO27_LEVEL_HIGH: u1,
    +                GPIO27_EDGE_LOW: u1,
    +                GPIO27_EDGE_HIGH: u1,
    +                GPIO28_LEVEL_LOW: u1,
    +                GPIO28_LEVEL_HIGH: u1,
    +                GPIO28_EDGE_LOW: u1,
    +                GPIO28_EDGE_HIGH: u1,
    +                GPIO29_LEVEL_LOW: u1,
    +                GPIO29_LEVEL_HIGH: u1,
    +                GPIO29_EDGE_LOW: u1,
    +                GPIO29_EDGE_HIGH: u1,
    +                padding: u8,
    +            }),
    +            ///  Interrupt Enable for proc0
    +            PROC0_INTE0: mmio.Mmio(packed struct(u32) {
    +                GPIO0_LEVEL_LOW: u1,
    +                GPIO0_LEVEL_HIGH: u1,
    +                GPIO0_EDGE_LOW: u1,
    +                GPIO0_EDGE_HIGH: u1,
    +                GPIO1_LEVEL_LOW: u1,
    +                GPIO1_LEVEL_HIGH: u1,
    +                GPIO1_EDGE_LOW: u1,
    +                GPIO1_EDGE_HIGH: u1,
    +                GPIO2_LEVEL_LOW: u1,
    +                GPIO2_LEVEL_HIGH: u1,
    +                GPIO2_EDGE_LOW: u1,
    +                GPIO2_EDGE_HIGH: u1,
    +                GPIO3_LEVEL_LOW: u1,
    +                GPIO3_LEVEL_HIGH: u1,
    +                GPIO3_EDGE_LOW: u1,
    +                GPIO3_EDGE_HIGH: u1,
    +                GPIO4_LEVEL_LOW: u1,
    +                GPIO4_LEVEL_HIGH: u1,
    +                GPIO4_EDGE_LOW: u1,
    +                GPIO4_EDGE_HIGH: u1,
    +                GPIO5_LEVEL_LOW: u1,
    +                GPIO5_LEVEL_HIGH: u1,
    +                GPIO5_EDGE_LOW: u1,
    +                GPIO5_EDGE_HIGH: u1,
    +                GPIO6_LEVEL_LOW: u1,
    +                GPIO6_LEVEL_HIGH: u1,
    +                GPIO6_EDGE_LOW: u1,
    +                GPIO6_EDGE_HIGH: u1,
    +                GPIO7_LEVEL_LOW: u1,
    +                GPIO7_LEVEL_HIGH: u1,
    +                GPIO7_EDGE_LOW: u1,
    +                GPIO7_EDGE_HIGH: u1,
    +            }),
    +            ///  Interrupt Enable for proc0
    +            PROC0_INTE1: mmio.Mmio(packed struct(u32) {
    +                GPIO8_LEVEL_LOW: u1,
    +                GPIO8_LEVEL_HIGH: u1,
    +                GPIO8_EDGE_LOW: u1,
    +                GPIO8_EDGE_HIGH: u1,
    +                GPIO9_LEVEL_LOW: u1,
    +                GPIO9_LEVEL_HIGH: u1,
    +                GPIO9_EDGE_LOW: u1,
    +                GPIO9_EDGE_HIGH: u1,
    +                GPIO10_LEVEL_LOW: u1,
    +                GPIO10_LEVEL_HIGH: u1,
    +                GPIO10_EDGE_LOW: u1,
    +                GPIO10_EDGE_HIGH: u1,
    +                GPIO11_LEVEL_LOW: u1,
    +                GPIO11_LEVEL_HIGH: u1,
    +                GPIO11_EDGE_LOW: u1,
    +                GPIO11_EDGE_HIGH: u1,
    +                GPIO12_LEVEL_LOW: u1,
    +                GPIO12_LEVEL_HIGH: u1,
    +                GPIO12_EDGE_LOW: u1,
    +                GPIO12_EDGE_HIGH: u1,
    +                GPIO13_LEVEL_LOW: u1,
    +                GPIO13_LEVEL_HIGH: u1,
    +                GPIO13_EDGE_LOW: u1,
    +                GPIO13_EDGE_HIGH: u1,
    +                GPIO14_LEVEL_LOW: u1,
    +                GPIO14_LEVEL_HIGH: u1,
    +                GPIO14_EDGE_LOW: u1,
    +                GPIO14_EDGE_HIGH: u1,
    +                GPIO15_LEVEL_LOW: u1,
    +                GPIO15_LEVEL_HIGH: u1,
    +                GPIO15_EDGE_LOW: u1,
    +                GPIO15_EDGE_HIGH: u1,
    +            }),
    +            ///  Interrupt Enable for proc0
    +            PROC0_INTE2: mmio.Mmio(packed struct(u32) {
    +                GPIO16_LEVEL_LOW: u1,
    +                GPIO16_LEVEL_HIGH: u1,
    +                GPIO16_EDGE_LOW: u1,
    +                GPIO16_EDGE_HIGH: u1,
    +                GPIO17_LEVEL_LOW: u1,
    +                GPIO17_LEVEL_HIGH: u1,
    +                GPIO17_EDGE_LOW: u1,
    +                GPIO17_EDGE_HIGH: u1,
    +                GPIO18_LEVEL_LOW: u1,
    +                GPIO18_LEVEL_HIGH: u1,
    +                GPIO18_EDGE_LOW: u1,
    +                GPIO18_EDGE_HIGH: u1,
    +                GPIO19_LEVEL_LOW: u1,
    +                GPIO19_LEVEL_HIGH: u1,
    +                GPIO19_EDGE_LOW: u1,
    +                GPIO19_EDGE_HIGH: u1,
    +                GPIO20_LEVEL_LOW: u1,
    +                GPIO20_LEVEL_HIGH: u1,
    +                GPIO20_EDGE_LOW: u1,
    +                GPIO20_EDGE_HIGH: u1,
    +                GPIO21_LEVEL_LOW: u1,
    +                GPIO21_LEVEL_HIGH: u1,
    +                GPIO21_EDGE_LOW: u1,
    +                GPIO21_EDGE_HIGH: u1,
    +                GPIO22_LEVEL_LOW: u1,
    +                GPIO22_LEVEL_HIGH: u1,
    +                GPIO22_EDGE_LOW: u1,
    +                GPIO22_EDGE_HIGH: u1,
    +                GPIO23_LEVEL_LOW: u1,
    +                GPIO23_LEVEL_HIGH: u1,
    +                GPIO23_EDGE_LOW: u1,
    +                GPIO23_EDGE_HIGH: u1,
    +            }),
    +            ///  Interrupt Enable for proc0
    +            PROC0_INTE3: mmio.Mmio(packed struct(u32) {
    +                GPIO24_LEVEL_LOW: u1,
    +                GPIO24_LEVEL_HIGH: u1,
    +                GPIO24_EDGE_LOW: u1,
    +                GPIO24_EDGE_HIGH: u1,
    +                GPIO25_LEVEL_LOW: u1,
    +                GPIO25_LEVEL_HIGH: u1,
    +                GPIO25_EDGE_LOW: u1,
    +                GPIO25_EDGE_HIGH: u1,
    +                GPIO26_LEVEL_LOW: u1,
    +                GPIO26_LEVEL_HIGH: u1,
    +                GPIO26_EDGE_LOW: u1,
    +                GPIO26_EDGE_HIGH: u1,
    +                GPIO27_LEVEL_LOW: u1,
    +                GPIO27_LEVEL_HIGH: u1,
    +                GPIO27_EDGE_LOW: u1,
    +                GPIO27_EDGE_HIGH: u1,
    +                GPIO28_LEVEL_LOW: u1,
    +                GPIO28_LEVEL_HIGH: u1,
    +                GPIO28_EDGE_LOW: u1,
    +                GPIO28_EDGE_HIGH: u1,
    +                GPIO29_LEVEL_LOW: u1,
    +                GPIO29_LEVEL_HIGH: u1,
    +                GPIO29_EDGE_LOW: u1,
    +                GPIO29_EDGE_HIGH: u1,
    +                padding: u8,
    +            }),
    +            ///  Interrupt Force for proc0
    +            PROC0_INTF0: mmio.Mmio(packed struct(u32) {
    +                GPIO0_LEVEL_LOW: u1,
    +                GPIO0_LEVEL_HIGH: u1,
    +                GPIO0_EDGE_LOW: u1,
    +                GPIO0_EDGE_HIGH: u1,
    +                GPIO1_LEVEL_LOW: u1,
    +                GPIO1_LEVEL_HIGH: u1,
    +                GPIO1_EDGE_LOW: u1,
    +                GPIO1_EDGE_HIGH: u1,
    +                GPIO2_LEVEL_LOW: u1,
    +                GPIO2_LEVEL_HIGH: u1,
    +                GPIO2_EDGE_LOW: u1,
    +                GPIO2_EDGE_HIGH: u1,
    +                GPIO3_LEVEL_LOW: u1,
    +                GPIO3_LEVEL_HIGH: u1,
    +                GPIO3_EDGE_LOW: u1,
    +                GPIO3_EDGE_HIGH: u1,
    +                GPIO4_LEVEL_LOW: u1,
    +                GPIO4_LEVEL_HIGH: u1,
    +                GPIO4_EDGE_LOW: u1,
    +                GPIO4_EDGE_HIGH: u1,
    +                GPIO5_LEVEL_LOW: u1,
    +                GPIO5_LEVEL_HIGH: u1,
    +                GPIO5_EDGE_LOW: u1,
    +                GPIO5_EDGE_HIGH: u1,
    +                GPIO6_LEVEL_LOW: u1,
    +                GPIO6_LEVEL_HIGH: u1,
    +                GPIO6_EDGE_LOW: u1,
    +                GPIO6_EDGE_HIGH: u1,
    +                GPIO7_LEVEL_LOW: u1,
    +                GPIO7_LEVEL_HIGH: u1,
    +                GPIO7_EDGE_LOW: u1,
    +                GPIO7_EDGE_HIGH: u1,
    +            }),
    +            ///  Interrupt Force for proc0
    +            PROC0_INTF1: mmio.Mmio(packed struct(u32) {
    +                GPIO8_LEVEL_LOW: u1,
    +                GPIO8_LEVEL_HIGH: u1,
    +                GPIO8_EDGE_LOW: u1,
    +                GPIO8_EDGE_HIGH: u1,
    +                GPIO9_LEVEL_LOW: u1,
    +                GPIO9_LEVEL_HIGH: u1,
    +                GPIO9_EDGE_LOW: u1,
    +                GPIO9_EDGE_HIGH: u1,
    +                GPIO10_LEVEL_LOW: u1,
    +                GPIO10_LEVEL_HIGH: u1,
    +                GPIO10_EDGE_LOW: u1,
    +                GPIO10_EDGE_HIGH: u1,
    +                GPIO11_LEVEL_LOW: u1,
    +                GPIO11_LEVEL_HIGH: u1,
    +                GPIO11_EDGE_LOW: u1,
    +                GPIO11_EDGE_HIGH: u1,
    +                GPIO12_LEVEL_LOW: u1,
    +                GPIO12_LEVEL_HIGH: u1,
    +                GPIO12_EDGE_LOW: u1,
    +                GPIO12_EDGE_HIGH: u1,
    +                GPIO13_LEVEL_LOW: u1,
    +                GPIO13_LEVEL_HIGH: u1,
    +                GPIO13_EDGE_LOW: u1,
    +                GPIO13_EDGE_HIGH: u1,
    +                GPIO14_LEVEL_LOW: u1,
    +                GPIO14_LEVEL_HIGH: u1,
    +                GPIO14_EDGE_LOW: u1,
    +                GPIO14_EDGE_HIGH: u1,
    +                GPIO15_LEVEL_LOW: u1,
    +                GPIO15_LEVEL_HIGH: u1,
    +                GPIO15_EDGE_LOW: u1,
    +                GPIO15_EDGE_HIGH: u1,
    +            }),
    +            ///  Interrupt Force for proc0
    +            PROC0_INTF2: mmio.Mmio(packed struct(u32) {
    +                GPIO16_LEVEL_LOW: u1,
    +                GPIO16_LEVEL_HIGH: u1,
    +                GPIO16_EDGE_LOW: u1,
    +                GPIO16_EDGE_HIGH: u1,
    +                GPIO17_LEVEL_LOW: u1,
    +                GPIO17_LEVEL_HIGH: u1,
    +                GPIO17_EDGE_LOW: u1,
    +                GPIO17_EDGE_HIGH: u1,
    +                GPIO18_LEVEL_LOW: u1,
    +                GPIO18_LEVEL_HIGH: u1,
    +                GPIO18_EDGE_LOW: u1,
    +                GPIO18_EDGE_HIGH: u1,
    +                GPIO19_LEVEL_LOW: u1,
    +                GPIO19_LEVEL_HIGH: u1,
    +                GPIO19_EDGE_LOW: u1,
    +                GPIO19_EDGE_HIGH: u1,
    +                GPIO20_LEVEL_LOW: u1,
    +                GPIO20_LEVEL_HIGH: u1,
    +                GPIO20_EDGE_LOW: u1,
    +                GPIO20_EDGE_HIGH: u1,
    +                GPIO21_LEVEL_LOW: u1,
    +                GPIO21_LEVEL_HIGH: u1,
    +                GPIO21_EDGE_LOW: u1,
    +                GPIO21_EDGE_HIGH: u1,
    +                GPIO22_LEVEL_LOW: u1,
    +                GPIO22_LEVEL_HIGH: u1,
    +                GPIO22_EDGE_LOW: u1,
    +                GPIO22_EDGE_HIGH: u1,
    +                GPIO23_LEVEL_LOW: u1,
    +                GPIO23_LEVEL_HIGH: u1,
    +                GPIO23_EDGE_LOW: u1,
    +                GPIO23_EDGE_HIGH: u1,
    +            }),
    +            ///  Interrupt Force for proc0
    +            PROC0_INTF3: mmio.Mmio(packed struct(u32) {
    +                GPIO24_LEVEL_LOW: u1,
    +                GPIO24_LEVEL_HIGH: u1,
    +                GPIO24_EDGE_LOW: u1,
    +                GPIO24_EDGE_HIGH: u1,
    +                GPIO25_LEVEL_LOW: u1,
    +                GPIO25_LEVEL_HIGH: u1,
    +                GPIO25_EDGE_LOW: u1,
    +                GPIO25_EDGE_HIGH: u1,
    +                GPIO26_LEVEL_LOW: u1,
    +                GPIO26_LEVEL_HIGH: u1,
    +                GPIO26_EDGE_LOW: u1,
    +                GPIO26_EDGE_HIGH: u1,
    +                GPIO27_LEVEL_LOW: u1,
    +                GPIO27_LEVEL_HIGH: u1,
    +                GPIO27_EDGE_LOW: u1,
    +                GPIO27_EDGE_HIGH: u1,
    +                GPIO28_LEVEL_LOW: u1,
    +                GPIO28_LEVEL_HIGH: u1,
    +                GPIO28_EDGE_LOW: u1,
    +                GPIO28_EDGE_HIGH: u1,
    +                GPIO29_LEVEL_LOW: u1,
    +                GPIO29_LEVEL_HIGH: u1,
    +                GPIO29_EDGE_LOW: u1,
    +                GPIO29_EDGE_HIGH: u1,
    +                padding: u8,
    +            }),
    +            ///  Interrupt status after masking & forcing for proc0
    +            PROC0_INTS0: mmio.Mmio(packed struct(u32) {
    +                GPIO0_LEVEL_LOW: u1,
    +                GPIO0_LEVEL_HIGH: u1,
    +                GPIO0_EDGE_LOW: u1,
    +                GPIO0_EDGE_HIGH: u1,
    +                GPIO1_LEVEL_LOW: u1,
    +                GPIO1_LEVEL_HIGH: u1,
    +                GPIO1_EDGE_LOW: u1,
    +                GPIO1_EDGE_HIGH: u1,
    +                GPIO2_LEVEL_LOW: u1,
    +                GPIO2_LEVEL_HIGH: u1,
    +                GPIO2_EDGE_LOW: u1,
    +                GPIO2_EDGE_HIGH: u1,
    +                GPIO3_LEVEL_LOW: u1,
    +                GPIO3_LEVEL_HIGH: u1,
    +                GPIO3_EDGE_LOW: u1,
    +                GPIO3_EDGE_HIGH: u1,
    +                GPIO4_LEVEL_LOW: u1,
    +                GPIO4_LEVEL_HIGH: u1,
    +                GPIO4_EDGE_LOW: u1,
    +                GPIO4_EDGE_HIGH: u1,
    +                GPIO5_LEVEL_LOW: u1,
    +                GPIO5_LEVEL_HIGH: u1,
    +                GPIO5_EDGE_LOW: u1,
    +                GPIO5_EDGE_HIGH: u1,
    +                GPIO6_LEVEL_LOW: u1,
    +                GPIO6_LEVEL_HIGH: u1,
    +                GPIO6_EDGE_LOW: u1,
    +                GPIO6_EDGE_HIGH: u1,
    +                GPIO7_LEVEL_LOW: u1,
    +                GPIO7_LEVEL_HIGH: u1,
    +                GPIO7_EDGE_LOW: u1,
    +                GPIO7_EDGE_HIGH: u1,
    +            }),
    +            ///  Interrupt status after masking & forcing for proc0
    +            PROC0_INTS1: mmio.Mmio(packed struct(u32) {
    +                GPIO8_LEVEL_LOW: u1,
    +                GPIO8_LEVEL_HIGH: u1,
    +                GPIO8_EDGE_LOW: u1,
    +                GPIO8_EDGE_HIGH: u1,
    +                GPIO9_LEVEL_LOW: u1,
    +                GPIO9_LEVEL_HIGH: u1,
    +                GPIO9_EDGE_LOW: u1,
    +                GPIO9_EDGE_HIGH: u1,
    +                GPIO10_LEVEL_LOW: u1,
    +                GPIO10_LEVEL_HIGH: u1,
    +                GPIO10_EDGE_LOW: u1,
    +                GPIO10_EDGE_HIGH: u1,
    +                GPIO11_LEVEL_LOW: u1,
    +                GPIO11_LEVEL_HIGH: u1,
    +                GPIO11_EDGE_LOW: u1,
    +                GPIO11_EDGE_HIGH: u1,
    +                GPIO12_LEVEL_LOW: u1,
    +                GPIO12_LEVEL_HIGH: u1,
    +                GPIO12_EDGE_LOW: u1,
    +                GPIO12_EDGE_HIGH: u1,
    +                GPIO13_LEVEL_LOW: u1,
    +                GPIO13_LEVEL_HIGH: u1,
    +                GPIO13_EDGE_LOW: u1,
    +                GPIO13_EDGE_HIGH: u1,
    +                GPIO14_LEVEL_LOW: u1,
    +                GPIO14_LEVEL_HIGH: u1,
    +                GPIO14_EDGE_LOW: u1,
    +                GPIO14_EDGE_HIGH: u1,
    +                GPIO15_LEVEL_LOW: u1,
    +                GPIO15_LEVEL_HIGH: u1,
    +                GPIO15_EDGE_LOW: u1,
    +                GPIO15_EDGE_HIGH: u1,
    +            }),
    +            ///  Interrupt status after masking & forcing for proc0
    +            PROC0_INTS2: mmio.Mmio(packed struct(u32) {
    +                GPIO16_LEVEL_LOW: u1,
    +                GPIO16_LEVEL_HIGH: u1,
    +                GPIO16_EDGE_LOW: u1,
    +                GPIO16_EDGE_HIGH: u1,
    +                GPIO17_LEVEL_LOW: u1,
    +                GPIO17_LEVEL_HIGH: u1,
    +                GPIO17_EDGE_LOW: u1,
    +                GPIO17_EDGE_HIGH: u1,
    +                GPIO18_LEVEL_LOW: u1,
    +                GPIO18_LEVEL_HIGH: u1,
    +                GPIO18_EDGE_LOW: u1,
    +                GPIO18_EDGE_HIGH: u1,
    +                GPIO19_LEVEL_LOW: u1,
    +                GPIO19_LEVEL_HIGH: u1,
    +                GPIO19_EDGE_LOW: u1,
    +                GPIO19_EDGE_HIGH: u1,
    +                GPIO20_LEVEL_LOW: u1,
    +                GPIO20_LEVEL_HIGH: u1,
    +                GPIO20_EDGE_LOW: u1,
    +                GPIO20_EDGE_HIGH: u1,
    +                GPIO21_LEVEL_LOW: u1,
    +                GPIO21_LEVEL_HIGH: u1,
    +                GPIO21_EDGE_LOW: u1,
    +                GPIO21_EDGE_HIGH: u1,
    +                GPIO22_LEVEL_LOW: u1,
    +                GPIO22_LEVEL_HIGH: u1,
    +                GPIO22_EDGE_LOW: u1,
    +                GPIO22_EDGE_HIGH: u1,
    +                GPIO23_LEVEL_LOW: u1,
    +                GPIO23_LEVEL_HIGH: u1,
    +                GPIO23_EDGE_LOW: u1,
    +                GPIO23_EDGE_HIGH: u1,
    +            }),
    +            ///  Interrupt status after masking & forcing for proc0
    +            PROC0_INTS3: mmio.Mmio(packed struct(u32) {
    +                GPIO24_LEVEL_LOW: u1,
    +                GPIO24_LEVEL_HIGH: u1,
    +                GPIO24_EDGE_LOW: u1,
    +                GPIO24_EDGE_HIGH: u1,
    +                GPIO25_LEVEL_LOW: u1,
    +                GPIO25_LEVEL_HIGH: u1,
    +                GPIO25_EDGE_LOW: u1,
    +                GPIO25_EDGE_HIGH: u1,
    +                GPIO26_LEVEL_LOW: u1,
    +                GPIO26_LEVEL_HIGH: u1,
    +                GPIO26_EDGE_LOW: u1,
    +                GPIO26_EDGE_HIGH: u1,
    +                GPIO27_LEVEL_LOW: u1,
    +                GPIO27_LEVEL_HIGH: u1,
    +                GPIO27_EDGE_LOW: u1,
    +                GPIO27_EDGE_HIGH: u1,
    +                GPIO28_LEVEL_LOW: u1,
    +                GPIO28_LEVEL_HIGH: u1,
    +                GPIO28_EDGE_LOW: u1,
    +                GPIO28_EDGE_HIGH: u1,
    +                GPIO29_LEVEL_LOW: u1,
    +                GPIO29_LEVEL_HIGH: u1,
    +                GPIO29_EDGE_LOW: u1,
    +                GPIO29_EDGE_HIGH: u1,
    +                padding: u8,
    +            }),
    +            ///  Interrupt Enable for proc1
    +            PROC1_INTE0: mmio.Mmio(packed struct(u32) {
    +                GPIO0_LEVEL_LOW: u1,
    +                GPIO0_LEVEL_HIGH: u1,
    +                GPIO0_EDGE_LOW: u1,
    +                GPIO0_EDGE_HIGH: u1,
    +                GPIO1_LEVEL_LOW: u1,
    +                GPIO1_LEVEL_HIGH: u1,
    +                GPIO1_EDGE_LOW: u1,
    +                GPIO1_EDGE_HIGH: u1,
    +                GPIO2_LEVEL_LOW: u1,
    +                GPIO2_LEVEL_HIGH: u1,
    +                GPIO2_EDGE_LOW: u1,
    +                GPIO2_EDGE_HIGH: u1,
    +                GPIO3_LEVEL_LOW: u1,
    +                GPIO3_LEVEL_HIGH: u1,
    +                GPIO3_EDGE_LOW: u1,
    +                GPIO3_EDGE_HIGH: u1,
    +                GPIO4_LEVEL_LOW: u1,
    +                GPIO4_LEVEL_HIGH: u1,
    +                GPIO4_EDGE_LOW: u1,
    +                GPIO4_EDGE_HIGH: u1,
    +                GPIO5_LEVEL_LOW: u1,
    +                GPIO5_LEVEL_HIGH: u1,
    +                GPIO5_EDGE_LOW: u1,
    +                GPIO5_EDGE_HIGH: u1,
    +                GPIO6_LEVEL_LOW: u1,
    +                GPIO6_LEVEL_HIGH: u1,
    +                GPIO6_EDGE_LOW: u1,
    +                GPIO6_EDGE_HIGH: u1,
    +                GPIO7_LEVEL_LOW: u1,
    +                GPIO7_LEVEL_HIGH: u1,
    +                GPIO7_EDGE_LOW: u1,
    +                GPIO7_EDGE_HIGH: u1,
    +            }),
    +            ///  Interrupt Enable for proc1
    +            PROC1_INTE1: mmio.Mmio(packed struct(u32) {
    +                GPIO8_LEVEL_LOW: u1,
    +                GPIO8_LEVEL_HIGH: u1,
    +                GPIO8_EDGE_LOW: u1,
    +                GPIO8_EDGE_HIGH: u1,
    +                GPIO9_LEVEL_LOW: u1,
    +                GPIO9_LEVEL_HIGH: u1,
    +                GPIO9_EDGE_LOW: u1,
    +                GPIO9_EDGE_HIGH: u1,
    +                GPIO10_LEVEL_LOW: u1,
    +                GPIO10_LEVEL_HIGH: u1,
    +                GPIO10_EDGE_LOW: u1,
    +                GPIO10_EDGE_HIGH: u1,
    +                GPIO11_LEVEL_LOW: u1,
    +                GPIO11_LEVEL_HIGH: u1,
    +                GPIO11_EDGE_LOW: u1,
    +                GPIO11_EDGE_HIGH: u1,
    +                GPIO12_LEVEL_LOW: u1,
    +                GPIO12_LEVEL_HIGH: u1,
    +                GPIO12_EDGE_LOW: u1,
    +                GPIO12_EDGE_HIGH: u1,
    +                GPIO13_LEVEL_LOW: u1,
    +                GPIO13_LEVEL_HIGH: u1,
    +                GPIO13_EDGE_LOW: u1,
    +                GPIO13_EDGE_HIGH: u1,
    +                GPIO14_LEVEL_LOW: u1,
    +                GPIO14_LEVEL_HIGH: u1,
    +                GPIO14_EDGE_LOW: u1,
    +                GPIO14_EDGE_HIGH: u1,
    +                GPIO15_LEVEL_LOW: u1,
    +                GPIO15_LEVEL_HIGH: u1,
    +                GPIO15_EDGE_LOW: u1,
    +                GPIO15_EDGE_HIGH: u1,
    +            }),
    +            ///  Interrupt Enable for proc1
    +            PROC1_INTE2: mmio.Mmio(packed struct(u32) {
    +                GPIO16_LEVEL_LOW: u1,
    +                GPIO16_LEVEL_HIGH: u1,
    +                GPIO16_EDGE_LOW: u1,
    +                GPIO16_EDGE_HIGH: u1,
    +                GPIO17_LEVEL_LOW: u1,
    +                GPIO17_LEVEL_HIGH: u1,
    +                GPIO17_EDGE_LOW: u1,
    +                GPIO17_EDGE_HIGH: u1,
    +                GPIO18_LEVEL_LOW: u1,
    +                GPIO18_LEVEL_HIGH: u1,
    +                GPIO18_EDGE_LOW: u1,
    +                GPIO18_EDGE_HIGH: u1,
    +                GPIO19_LEVEL_LOW: u1,
    +                GPIO19_LEVEL_HIGH: u1,
    +                GPIO19_EDGE_LOW: u1,
    +                GPIO19_EDGE_HIGH: u1,
    +                GPIO20_LEVEL_LOW: u1,
    +                GPIO20_LEVEL_HIGH: u1,
    +                GPIO20_EDGE_LOW: u1,
    +                GPIO20_EDGE_HIGH: u1,
    +                GPIO21_LEVEL_LOW: u1,
    +                GPIO21_LEVEL_HIGH: u1,
    +                GPIO21_EDGE_LOW: u1,
    +                GPIO21_EDGE_HIGH: u1,
    +                GPIO22_LEVEL_LOW: u1,
    +                GPIO22_LEVEL_HIGH: u1,
    +                GPIO22_EDGE_LOW: u1,
    +                GPIO22_EDGE_HIGH: u1,
    +                GPIO23_LEVEL_LOW: u1,
    +                GPIO23_LEVEL_HIGH: u1,
    +                GPIO23_EDGE_LOW: u1,
    +                GPIO23_EDGE_HIGH: u1,
    +            }),
    +            ///  Interrupt Enable for proc1
    +            PROC1_INTE3: mmio.Mmio(packed struct(u32) {
    +                GPIO24_LEVEL_LOW: u1,
    +                GPIO24_LEVEL_HIGH: u1,
    +                GPIO24_EDGE_LOW: u1,
    +                GPIO24_EDGE_HIGH: u1,
    +                GPIO25_LEVEL_LOW: u1,
    +                GPIO25_LEVEL_HIGH: u1,
    +                GPIO25_EDGE_LOW: u1,
    +                GPIO25_EDGE_HIGH: u1,
    +                GPIO26_LEVEL_LOW: u1,
    +                GPIO26_LEVEL_HIGH: u1,
    +                GPIO26_EDGE_LOW: u1,
    +                GPIO26_EDGE_HIGH: u1,
    +                GPIO27_LEVEL_LOW: u1,
    +                GPIO27_LEVEL_HIGH: u1,
    +                GPIO27_EDGE_LOW: u1,
    +                GPIO27_EDGE_HIGH: u1,
    +                GPIO28_LEVEL_LOW: u1,
    +                GPIO28_LEVEL_HIGH: u1,
    +                GPIO28_EDGE_LOW: u1,
    +                GPIO28_EDGE_HIGH: u1,
    +                GPIO29_LEVEL_LOW: u1,
    +                GPIO29_LEVEL_HIGH: u1,
    +                GPIO29_EDGE_LOW: u1,
    +                GPIO29_EDGE_HIGH: u1,
    +                padding: u8,
    +            }),
    +            ///  Interrupt Force for proc1
    +            PROC1_INTF0: mmio.Mmio(packed struct(u32) {
    +                GPIO0_LEVEL_LOW: u1,
    +                GPIO0_LEVEL_HIGH: u1,
    +                GPIO0_EDGE_LOW: u1,
    +                GPIO0_EDGE_HIGH: u1,
    +                GPIO1_LEVEL_LOW: u1,
    +                GPIO1_LEVEL_HIGH: u1,
    +                GPIO1_EDGE_LOW: u1,
    +                GPIO1_EDGE_HIGH: u1,
    +                GPIO2_LEVEL_LOW: u1,
    +                GPIO2_LEVEL_HIGH: u1,
    +                GPIO2_EDGE_LOW: u1,
    +                GPIO2_EDGE_HIGH: u1,
    +                GPIO3_LEVEL_LOW: u1,
    +                GPIO3_LEVEL_HIGH: u1,
    +                GPIO3_EDGE_LOW: u1,
    +                GPIO3_EDGE_HIGH: u1,
    +                GPIO4_LEVEL_LOW: u1,
    +                GPIO4_LEVEL_HIGH: u1,
    +                GPIO4_EDGE_LOW: u1,
    +                GPIO4_EDGE_HIGH: u1,
    +                GPIO5_LEVEL_LOW: u1,
    +                GPIO5_LEVEL_HIGH: u1,
    +                GPIO5_EDGE_LOW: u1,
    +                GPIO5_EDGE_HIGH: u1,
    +                GPIO6_LEVEL_LOW: u1,
    +                GPIO6_LEVEL_HIGH: u1,
    +                GPIO6_EDGE_LOW: u1,
    +                GPIO6_EDGE_HIGH: u1,
    +                GPIO7_LEVEL_LOW: u1,
    +                GPIO7_LEVEL_HIGH: u1,
    +                GPIO7_EDGE_LOW: u1,
    +                GPIO7_EDGE_HIGH: u1,
    +            }),
    +            ///  Interrupt Force for proc1
    +            PROC1_INTF1: mmio.Mmio(packed struct(u32) {
    +                GPIO8_LEVEL_LOW: u1,
    +                GPIO8_LEVEL_HIGH: u1,
    +                GPIO8_EDGE_LOW: u1,
    +                GPIO8_EDGE_HIGH: u1,
    +                GPIO9_LEVEL_LOW: u1,
    +                GPIO9_LEVEL_HIGH: u1,
    +                GPIO9_EDGE_LOW: u1,
    +                GPIO9_EDGE_HIGH: u1,
    +                GPIO10_LEVEL_LOW: u1,
    +                GPIO10_LEVEL_HIGH: u1,
    +                GPIO10_EDGE_LOW: u1,
    +                GPIO10_EDGE_HIGH: u1,
    +                GPIO11_LEVEL_LOW: u1,
    +                GPIO11_LEVEL_HIGH: u1,
    +                GPIO11_EDGE_LOW: u1,
    +                GPIO11_EDGE_HIGH: u1,
    +                GPIO12_LEVEL_LOW: u1,
    +                GPIO12_LEVEL_HIGH: u1,
    +                GPIO12_EDGE_LOW: u1,
    +                GPIO12_EDGE_HIGH: u1,
    +                GPIO13_LEVEL_LOW: u1,
    +                GPIO13_LEVEL_HIGH: u1,
    +                GPIO13_EDGE_LOW: u1,
    +                GPIO13_EDGE_HIGH: u1,
    +                GPIO14_LEVEL_LOW: u1,
    +                GPIO14_LEVEL_HIGH: u1,
    +                GPIO14_EDGE_LOW: u1,
    +                GPIO14_EDGE_HIGH: u1,
    +                GPIO15_LEVEL_LOW: u1,
    +                GPIO15_LEVEL_HIGH: u1,
    +                GPIO15_EDGE_LOW: u1,
    +                GPIO15_EDGE_HIGH: u1,
    +            }),
    +            ///  Interrupt Force for proc1
    +            PROC1_INTF2: mmio.Mmio(packed struct(u32) {
    +                GPIO16_LEVEL_LOW: u1,
    +                GPIO16_LEVEL_HIGH: u1,
    +                GPIO16_EDGE_LOW: u1,
    +                GPIO16_EDGE_HIGH: u1,
    +                GPIO17_LEVEL_LOW: u1,
    +                GPIO17_LEVEL_HIGH: u1,
    +                GPIO17_EDGE_LOW: u1,
    +                GPIO17_EDGE_HIGH: u1,
    +                GPIO18_LEVEL_LOW: u1,
    +                GPIO18_LEVEL_HIGH: u1,
    +                GPIO18_EDGE_LOW: u1,
    +                GPIO18_EDGE_HIGH: u1,
    +                GPIO19_LEVEL_LOW: u1,
    +                GPIO19_LEVEL_HIGH: u1,
    +                GPIO19_EDGE_LOW: u1,
    +                GPIO19_EDGE_HIGH: u1,
    +                GPIO20_LEVEL_LOW: u1,
    +                GPIO20_LEVEL_HIGH: u1,
    +                GPIO20_EDGE_LOW: u1,
    +                GPIO20_EDGE_HIGH: u1,
    +                GPIO21_LEVEL_LOW: u1,
    +                GPIO21_LEVEL_HIGH: u1,
    +                GPIO21_EDGE_LOW: u1,
    +                GPIO21_EDGE_HIGH: u1,
    +                GPIO22_LEVEL_LOW: u1,
    +                GPIO22_LEVEL_HIGH: u1,
    +                GPIO22_EDGE_LOW: u1,
    +                GPIO22_EDGE_HIGH: u1,
    +                GPIO23_LEVEL_LOW: u1,
    +                GPIO23_LEVEL_HIGH: u1,
    +                GPIO23_EDGE_LOW: u1,
    +                GPIO23_EDGE_HIGH: u1,
    +            }),
    +            ///  Interrupt Force for proc1
    +            PROC1_INTF3: mmio.Mmio(packed struct(u32) {
    +                GPIO24_LEVEL_LOW: u1,
    +                GPIO24_LEVEL_HIGH: u1,
    +                GPIO24_EDGE_LOW: u1,
    +                GPIO24_EDGE_HIGH: u1,
    +                GPIO25_LEVEL_LOW: u1,
    +                GPIO25_LEVEL_HIGH: u1,
    +                GPIO25_EDGE_LOW: u1,
    +                GPIO25_EDGE_HIGH: u1,
    +                GPIO26_LEVEL_LOW: u1,
    +                GPIO26_LEVEL_HIGH: u1,
    +                GPIO26_EDGE_LOW: u1,
    +                GPIO26_EDGE_HIGH: u1,
    +                GPIO27_LEVEL_LOW: u1,
    +                GPIO27_LEVEL_HIGH: u1,
    +                GPIO27_EDGE_LOW: u1,
    +                GPIO27_EDGE_HIGH: u1,
    +                GPIO28_LEVEL_LOW: u1,
    +                GPIO28_LEVEL_HIGH: u1,
    +                GPIO28_EDGE_LOW: u1,
    +                GPIO28_EDGE_HIGH: u1,
    +                GPIO29_LEVEL_LOW: u1,
    +                GPIO29_LEVEL_HIGH: u1,
    +                GPIO29_EDGE_LOW: u1,
    +                GPIO29_EDGE_HIGH: u1,
    +                padding: u8,
    +            }),
    +            ///  Interrupt status after masking & forcing for proc1
    +            PROC1_INTS0: mmio.Mmio(packed struct(u32) {
    +                GPIO0_LEVEL_LOW: u1,
    +                GPIO0_LEVEL_HIGH: u1,
    +                GPIO0_EDGE_LOW: u1,
    +                GPIO0_EDGE_HIGH: u1,
    +                GPIO1_LEVEL_LOW: u1,
    +                GPIO1_LEVEL_HIGH: u1,
    +                GPIO1_EDGE_LOW: u1,
    +                GPIO1_EDGE_HIGH: u1,
    +                GPIO2_LEVEL_LOW: u1,
    +                GPIO2_LEVEL_HIGH: u1,
    +                GPIO2_EDGE_LOW: u1,
    +                GPIO2_EDGE_HIGH: u1,
    +                GPIO3_LEVEL_LOW: u1,
    +                GPIO3_LEVEL_HIGH: u1,
    +                GPIO3_EDGE_LOW: u1,
    +                GPIO3_EDGE_HIGH: u1,
    +                GPIO4_LEVEL_LOW: u1,
    +                GPIO4_LEVEL_HIGH: u1,
    +                GPIO4_EDGE_LOW: u1,
    +                GPIO4_EDGE_HIGH: u1,
    +                GPIO5_LEVEL_LOW: u1,
    +                GPIO5_LEVEL_HIGH: u1,
    +                GPIO5_EDGE_LOW: u1,
    +                GPIO5_EDGE_HIGH: u1,
    +                GPIO6_LEVEL_LOW: u1,
    +                GPIO6_LEVEL_HIGH: u1,
    +                GPIO6_EDGE_LOW: u1,
    +                GPIO6_EDGE_HIGH: u1,
    +                GPIO7_LEVEL_LOW: u1,
    +                GPIO7_LEVEL_HIGH: u1,
    +                GPIO7_EDGE_LOW: u1,
    +                GPIO7_EDGE_HIGH: u1,
    +            }),
    +            ///  Interrupt status after masking & forcing for proc1
    +            PROC1_INTS1: mmio.Mmio(packed struct(u32) {
    +                GPIO8_LEVEL_LOW: u1,
    +                GPIO8_LEVEL_HIGH: u1,
    +                GPIO8_EDGE_LOW: u1,
    +                GPIO8_EDGE_HIGH: u1,
    +                GPIO9_LEVEL_LOW: u1,
    +                GPIO9_LEVEL_HIGH: u1,
    +                GPIO9_EDGE_LOW: u1,
    +                GPIO9_EDGE_HIGH: u1,
    +                GPIO10_LEVEL_LOW: u1,
    +                GPIO10_LEVEL_HIGH: u1,
    +                GPIO10_EDGE_LOW: u1,
    +                GPIO10_EDGE_HIGH: u1,
    +                GPIO11_LEVEL_LOW: u1,
    +                GPIO11_LEVEL_HIGH: u1,
    +                GPIO11_EDGE_LOW: u1,
    +                GPIO11_EDGE_HIGH: u1,
    +                GPIO12_LEVEL_LOW: u1,
    +                GPIO12_LEVEL_HIGH: u1,
    +                GPIO12_EDGE_LOW: u1,
    +                GPIO12_EDGE_HIGH: u1,
    +                GPIO13_LEVEL_LOW: u1,
    +                GPIO13_LEVEL_HIGH: u1,
    +                GPIO13_EDGE_LOW: u1,
    +                GPIO13_EDGE_HIGH: u1,
    +                GPIO14_LEVEL_LOW: u1,
    +                GPIO14_LEVEL_HIGH: u1,
    +                GPIO14_EDGE_LOW: u1,
    +                GPIO14_EDGE_HIGH: u1,
    +                GPIO15_LEVEL_LOW: u1,
    +                GPIO15_LEVEL_HIGH: u1,
    +                GPIO15_EDGE_LOW: u1,
    +                GPIO15_EDGE_HIGH: u1,
    +            }),
    +            ///  Interrupt status after masking & forcing for proc1
    +            PROC1_INTS2: mmio.Mmio(packed struct(u32) {
    +                GPIO16_LEVEL_LOW: u1,
    +                GPIO16_LEVEL_HIGH: u1,
    +                GPIO16_EDGE_LOW: u1,
    +                GPIO16_EDGE_HIGH: u1,
    +                GPIO17_LEVEL_LOW: u1,
    +                GPIO17_LEVEL_HIGH: u1,
    +                GPIO17_EDGE_LOW: u1,
    +                GPIO17_EDGE_HIGH: u1,
    +                GPIO18_LEVEL_LOW: u1,
    +                GPIO18_LEVEL_HIGH: u1,
    +                GPIO18_EDGE_LOW: u1,
    +                GPIO18_EDGE_HIGH: u1,
    +                GPIO19_LEVEL_LOW: u1,
    +                GPIO19_LEVEL_HIGH: u1,
    +                GPIO19_EDGE_LOW: u1,
    +                GPIO19_EDGE_HIGH: u1,
    +                GPIO20_LEVEL_LOW: u1,
    +                GPIO20_LEVEL_HIGH: u1,
    +                GPIO20_EDGE_LOW: u1,
    +                GPIO20_EDGE_HIGH: u1,
    +                GPIO21_LEVEL_LOW: u1,
    +                GPIO21_LEVEL_HIGH: u1,
    +                GPIO21_EDGE_LOW: u1,
    +                GPIO21_EDGE_HIGH: u1,
    +                GPIO22_LEVEL_LOW: u1,
    +                GPIO22_LEVEL_HIGH: u1,
    +                GPIO22_EDGE_LOW: u1,
    +                GPIO22_EDGE_HIGH: u1,
    +                GPIO23_LEVEL_LOW: u1,
    +                GPIO23_LEVEL_HIGH: u1,
    +                GPIO23_EDGE_LOW: u1,
    +                GPIO23_EDGE_HIGH: u1,
    +            }),
    +            ///  Interrupt status after masking & forcing for proc1
    +            PROC1_INTS3: mmio.Mmio(packed struct(u32) {
    +                GPIO24_LEVEL_LOW: u1,
    +                GPIO24_LEVEL_HIGH: u1,
    +                GPIO24_EDGE_LOW: u1,
    +                GPIO24_EDGE_HIGH: u1,
    +                GPIO25_LEVEL_LOW: u1,
    +                GPIO25_LEVEL_HIGH: u1,
    +                GPIO25_EDGE_LOW: u1,
    +                GPIO25_EDGE_HIGH: u1,
    +                GPIO26_LEVEL_LOW: u1,
    +                GPIO26_LEVEL_HIGH: u1,
    +                GPIO26_EDGE_LOW: u1,
    +                GPIO26_EDGE_HIGH: u1,
    +                GPIO27_LEVEL_LOW: u1,
    +                GPIO27_LEVEL_HIGH: u1,
    +                GPIO27_EDGE_LOW: u1,
    +                GPIO27_EDGE_HIGH: u1,
    +                GPIO28_LEVEL_LOW: u1,
    +                GPIO28_LEVEL_HIGH: u1,
    +                GPIO28_EDGE_LOW: u1,
    +                GPIO28_EDGE_HIGH: u1,
    +                GPIO29_LEVEL_LOW: u1,
    +                GPIO29_LEVEL_HIGH: u1,
    +                GPIO29_EDGE_LOW: u1,
    +                GPIO29_EDGE_HIGH: u1,
    +                padding: u8,
    +            }),
    +            ///  Interrupt Enable for dormant_wake
    +            DORMANT_WAKE_INTE0: mmio.Mmio(packed struct(u32) {
    +                GPIO0_LEVEL_LOW: u1,
    +                GPIO0_LEVEL_HIGH: u1,
    +                GPIO0_EDGE_LOW: u1,
    +                GPIO0_EDGE_HIGH: u1,
    +                GPIO1_LEVEL_LOW: u1,
    +                GPIO1_LEVEL_HIGH: u1,
    +                GPIO1_EDGE_LOW: u1,
    +                GPIO1_EDGE_HIGH: u1,
    +                GPIO2_LEVEL_LOW: u1,
    +                GPIO2_LEVEL_HIGH: u1,
    +                GPIO2_EDGE_LOW: u1,
    +                GPIO2_EDGE_HIGH: u1,
    +                GPIO3_LEVEL_LOW: u1,
    +                GPIO3_LEVEL_HIGH: u1,
    +                GPIO3_EDGE_LOW: u1,
    +                GPIO3_EDGE_HIGH: u1,
    +                GPIO4_LEVEL_LOW: u1,
    +                GPIO4_LEVEL_HIGH: u1,
    +                GPIO4_EDGE_LOW: u1,
    +                GPIO4_EDGE_HIGH: u1,
    +                GPIO5_LEVEL_LOW: u1,
    +                GPIO5_LEVEL_HIGH: u1,
    +                GPIO5_EDGE_LOW: u1,
    +                GPIO5_EDGE_HIGH: u1,
    +                GPIO6_LEVEL_LOW: u1,
    +                GPIO6_LEVEL_HIGH: u1,
    +                GPIO6_EDGE_LOW: u1,
    +                GPIO6_EDGE_HIGH: u1,
    +                GPIO7_LEVEL_LOW: u1,
    +                GPIO7_LEVEL_HIGH: u1,
    +                GPIO7_EDGE_LOW: u1,
    +                GPIO7_EDGE_HIGH: u1,
    +            }),
    +            ///  Interrupt Enable for dormant_wake
    +            DORMANT_WAKE_INTE1: mmio.Mmio(packed struct(u32) {
    +                GPIO8_LEVEL_LOW: u1,
    +                GPIO8_LEVEL_HIGH: u1,
    +                GPIO8_EDGE_LOW: u1,
    +                GPIO8_EDGE_HIGH: u1,
    +                GPIO9_LEVEL_LOW: u1,
    +                GPIO9_LEVEL_HIGH: u1,
    +                GPIO9_EDGE_LOW: u1,
    +                GPIO9_EDGE_HIGH: u1,
    +                GPIO10_LEVEL_LOW: u1,
    +                GPIO10_LEVEL_HIGH: u1,
    +                GPIO10_EDGE_LOW: u1,
    +                GPIO10_EDGE_HIGH: u1,
    +                GPIO11_LEVEL_LOW: u1,
    +                GPIO11_LEVEL_HIGH: u1,
    +                GPIO11_EDGE_LOW: u1,
    +                GPIO11_EDGE_HIGH: u1,
    +                GPIO12_LEVEL_LOW: u1,
    +                GPIO12_LEVEL_HIGH: u1,
    +                GPIO12_EDGE_LOW: u1,
    +                GPIO12_EDGE_HIGH: u1,
    +                GPIO13_LEVEL_LOW: u1,
    +                GPIO13_LEVEL_HIGH: u1,
    +                GPIO13_EDGE_LOW: u1,
    +                GPIO13_EDGE_HIGH: u1,
    +                GPIO14_LEVEL_LOW: u1,
    +                GPIO14_LEVEL_HIGH: u1,
    +                GPIO14_EDGE_LOW: u1,
    +                GPIO14_EDGE_HIGH: u1,
    +                GPIO15_LEVEL_LOW: u1,
    +                GPIO15_LEVEL_HIGH: u1,
    +                GPIO15_EDGE_LOW: u1,
    +                GPIO15_EDGE_HIGH: u1,
    +            }),
    +            ///  Interrupt Enable for dormant_wake
    +            DORMANT_WAKE_INTE2: mmio.Mmio(packed struct(u32) {
    +                GPIO16_LEVEL_LOW: u1,
    +                GPIO16_LEVEL_HIGH: u1,
    +                GPIO16_EDGE_LOW: u1,
    +                GPIO16_EDGE_HIGH: u1,
    +                GPIO17_LEVEL_LOW: u1,
    +                GPIO17_LEVEL_HIGH: u1,
    +                GPIO17_EDGE_LOW: u1,
    +                GPIO17_EDGE_HIGH: u1,
    +                GPIO18_LEVEL_LOW: u1,
    +                GPIO18_LEVEL_HIGH: u1,
    +                GPIO18_EDGE_LOW: u1,
    +                GPIO18_EDGE_HIGH: u1,
    +                GPIO19_LEVEL_LOW: u1,
    +                GPIO19_LEVEL_HIGH: u1,
    +                GPIO19_EDGE_LOW: u1,
    +                GPIO19_EDGE_HIGH: u1,
    +                GPIO20_LEVEL_LOW: u1,
    +                GPIO20_LEVEL_HIGH: u1,
    +                GPIO20_EDGE_LOW: u1,
    +                GPIO20_EDGE_HIGH: u1,
    +                GPIO21_LEVEL_LOW: u1,
    +                GPIO21_LEVEL_HIGH: u1,
    +                GPIO21_EDGE_LOW: u1,
    +                GPIO21_EDGE_HIGH: u1,
    +                GPIO22_LEVEL_LOW: u1,
    +                GPIO22_LEVEL_HIGH: u1,
    +                GPIO22_EDGE_LOW: u1,
    +                GPIO22_EDGE_HIGH: u1,
    +                GPIO23_LEVEL_LOW: u1,
    +                GPIO23_LEVEL_HIGH: u1,
    +                GPIO23_EDGE_LOW: u1,
    +                GPIO23_EDGE_HIGH: u1,
    +            }),
    +            ///  Interrupt Enable for dormant_wake
    +            DORMANT_WAKE_INTE3: mmio.Mmio(packed struct(u32) {
    +                GPIO24_LEVEL_LOW: u1,
    +                GPIO24_LEVEL_HIGH: u1,
    +                GPIO24_EDGE_LOW: u1,
    +                GPIO24_EDGE_HIGH: u1,
    +                GPIO25_LEVEL_LOW: u1,
    +                GPIO25_LEVEL_HIGH: u1,
    +                GPIO25_EDGE_LOW: u1,
    +                GPIO25_EDGE_HIGH: u1,
    +                GPIO26_LEVEL_LOW: u1,
    +                GPIO26_LEVEL_HIGH: u1,
    +                GPIO26_EDGE_LOW: u1,
    +                GPIO26_EDGE_HIGH: u1,
    +                GPIO27_LEVEL_LOW: u1,
    +                GPIO27_LEVEL_HIGH: u1,
    +                GPIO27_EDGE_LOW: u1,
    +                GPIO27_EDGE_HIGH: u1,
    +                GPIO28_LEVEL_LOW: u1,
    +                GPIO28_LEVEL_HIGH: u1,
    +                GPIO28_EDGE_LOW: u1,
    +                GPIO28_EDGE_HIGH: u1,
    +                GPIO29_LEVEL_LOW: u1,
    +                GPIO29_LEVEL_HIGH: u1,
    +                GPIO29_EDGE_LOW: u1,
    +                GPIO29_EDGE_HIGH: u1,
    +                padding: u8,
    +            }),
    +            ///  Interrupt Force for dormant_wake
    +            DORMANT_WAKE_INTF0: mmio.Mmio(packed struct(u32) {
    +                GPIO0_LEVEL_LOW: u1,
    +                GPIO0_LEVEL_HIGH: u1,
    +                GPIO0_EDGE_LOW: u1,
    +                GPIO0_EDGE_HIGH: u1,
    +                GPIO1_LEVEL_LOW: u1,
    +                GPIO1_LEVEL_HIGH: u1,
    +                GPIO1_EDGE_LOW: u1,
    +                GPIO1_EDGE_HIGH: u1,
    +                GPIO2_LEVEL_LOW: u1,
    +                GPIO2_LEVEL_HIGH: u1,
    +                GPIO2_EDGE_LOW: u1,
    +                GPIO2_EDGE_HIGH: u1,
    +                GPIO3_LEVEL_LOW: u1,
    +                GPIO3_LEVEL_HIGH: u1,
    +                GPIO3_EDGE_LOW: u1,
    +                GPIO3_EDGE_HIGH: u1,
    +                GPIO4_LEVEL_LOW: u1,
    +                GPIO4_LEVEL_HIGH: u1,
    +                GPIO4_EDGE_LOW: u1,
    +                GPIO4_EDGE_HIGH: u1,
    +                GPIO5_LEVEL_LOW: u1,
    +                GPIO5_LEVEL_HIGH: u1,
    +                GPIO5_EDGE_LOW: u1,
    +                GPIO5_EDGE_HIGH: u1,
    +                GPIO6_LEVEL_LOW: u1,
    +                GPIO6_LEVEL_HIGH: u1,
    +                GPIO6_EDGE_LOW: u1,
    +                GPIO6_EDGE_HIGH: u1,
    +                GPIO7_LEVEL_LOW: u1,
    +                GPIO7_LEVEL_HIGH: u1,
    +                GPIO7_EDGE_LOW: u1,
    +                GPIO7_EDGE_HIGH: u1,
    +            }),
    +            ///  Interrupt Force for dormant_wake
    +            DORMANT_WAKE_INTF1: mmio.Mmio(packed struct(u32) {
    +                GPIO8_LEVEL_LOW: u1,
    +                GPIO8_LEVEL_HIGH: u1,
    +                GPIO8_EDGE_LOW: u1,
    +                GPIO8_EDGE_HIGH: u1,
    +                GPIO9_LEVEL_LOW: u1,
    +                GPIO9_LEVEL_HIGH: u1,
    +                GPIO9_EDGE_LOW: u1,
    +                GPIO9_EDGE_HIGH: u1,
    +                GPIO10_LEVEL_LOW: u1,
    +                GPIO10_LEVEL_HIGH: u1,
    +                GPIO10_EDGE_LOW: u1,
    +                GPIO10_EDGE_HIGH: u1,
    +                GPIO11_LEVEL_LOW: u1,
    +                GPIO11_LEVEL_HIGH: u1,
    +                GPIO11_EDGE_LOW: u1,
    +                GPIO11_EDGE_HIGH: u1,
    +                GPIO12_LEVEL_LOW: u1,
    +                GPIO12_LEVEL_HIGH: u1,
    +                GPIO12_EDGE_LOW: u1,
    +                GPIO12_EDGE_HIGH: u1,
    +                GPIO13_LEVEL_LOW: u1,
    +                GPIO13_LEVEL_HIGH: u1,
    +                GPIO13_EDGE_LOW: u1,
    +                GPIO13_EDGE_HIGH: u1,
    +                GPIO14_LEVEL_LOW: u1,
    +                GPIO14_LEVEL_HIGH: u1,
    +                GPIO14_EDGE_LOW: u1,
    +                GPIO14_EDGE_HIGH: u1,
    +                GPIO15_LEVEL_LOW: u1,
    +                GPIO15_LEVEL_HIGH: u1,
    +                GPIO15_EDGE_LOW: u1,
    +                GPIO15_EDGE_HIGH: u1,
    +            }),
    +            ///  Interrupt Force for dormant_wake
    +            DORMANT_WAKE_INTF2: mmio.Mmio(packed struct(u32) {
    +                GPIO16_LEVEL_LOW: u1,
    +                GPIO16_LEVEL_HIGH: u1,
    +                GPIO16_EDGE_LOW: u1,
    +                GPIO16_EDGE_HIGH: u1,
    +                GPIO17_LEVEL_LOW: u1,
    +                GPIO17_LEVEL_HIGH: u1,
    +                GPIO17_EDGE_LOW: u1,
    +                GPIO17_EDGE_HIGH: u1,
    +                GPIO18_LEVEL_LOW: u1,
    +                GPIO18_LEVEL_HIGH: u1,
    +                GPIO18_EDGE_LOW: u1,
    +                GPIO18_EDGE_HIGH: u1,
    +                GPIO19_LEVEL_LOW: u1,
    +                GPIO19_LEVEL_HIGH: u1,
    +                GPIO19_EDGE_LOW: u1,
    +                GPIO19_EDGE_HIGH: u1,
    +                GPIO20_LEVEL_LOW: u1,
    +                GPIO20_LEVEL_HIGH: u1,
    +                GPIO20_EDGE_LOW: u1,
    +                GPIO20_EDGE_HIGH: u1,
    +                GPIO21_LEVEL_LOW: u1,
    +                GPIO21_LEVEL_HIGH: u1,
    +                GPIO21_EDGE_LOW: u1,
    +                GPIO21_EDGE_HIGH: u1,
    +                GPIO22_LEVEL_LOW: u1,
    +                GPIO22_LEVEL_HIGH: u1,
    +                GPIO22_EDGE_LOW: u1,
    +                GPIO22_EDGE_HIGH: u1,
    +                GPIO23_LEVEL_LOW: u1,
    +                GPIO23_LEVEL_HIGH: u1,
    +                GPIO23_EDGE_LOW: u1,
    +                GPIO23_EDGE_HIGH: u1,
    +            }),
    +            ///  Interrupt Force for dormant_wake
    +            DORMANT_WAKE_INTF3: mmio.Mmio(packed struct(u32) {
    +                GPIO24_LEVEL_LOW: u1,
    +                GPIO24_LEVEL_HIGH: u1,
    +                GPIO24_EDGE_LOW: u1,
    +                GPIO24_EDGE_HIGH: u1,
    +                GPIO25_LEVEL_LOW: u1,
    +                GPIO25_LEVEL_HIGH: u1,
    +                GPIO25_EDGE_LOW: u1,
    +                GPIO25_EDGE_HIGH: u1,
    +                GPIO26_LEVEL_LOW: u1,
    +                GPIO26_LEVEL_HIGH: u1,
    +                GPIO26_EDGE_LOW: u1,
    +                GPIO26_EDGE_HIGH: u1,
    +                GPIO27_LEVEL_LOW: u1,
    +                GPIO27_LEVEL_HIGH: u1,
    +                GPIO27_EDGE_LOW: u1,
    +                GPIO27_EDGE_HIGH: u1,
    +                GPIO28_LEVEL_LOW: u1,
    +                GPIO28_LEVEL_HIGH: u1,
    +                GPIO28_EDGE_LOW: u1,
    +                GPIO28_EDGE_HIGH: u1,
    +                GPIO29_LEVEL_LOW: u1,
    +                GPIO29_LEVEL_HIGH: u1,
    +                GPIO29_EDGE_LOW: u1,
    +                GPIO29_EDGE_HIGH: u1,
    +                padding: u8,
    +            }),
    +            ///  Interrupt status after masking & forcing for dormant_wake
    +            DORMANT_WAKE_INTS0: mmio.Mmio(packed struct(u32) {
    +                GPIO0_LEVEL_LOW: u1,
    +                GPIO0_LEVEL_HIGH: u1,
    +                GPIO0_EDGE_LOW: u1,
    +                GPIO0_EDGE_HIGH: u1,
    +                GPIO1_LEVEL_LOW: u1,
    +                GPIO1_LEVEL_HIGH: u1,
    +                GPIO1_EDGE_LOW: u1,
    +                GPIO1_EDGE_HIGH: u1,
    +                GPIO2_LEVEL_LOW: u1,
    +                GPIO2_LEVEL_HIGH: u1,
    +                GPIO2_EDGE_LOW: u1,
    +                GPIO2_EDGE_HIGH: u1,
    +                GPIO3_LEVEL_LOW: u1,
    +                GPIO3_LEVEL_HIGH: u1,
    +                GPIO3_EDGE_LOW: u1,
    +                GPIO3_EDGE_HIGH: u1,
    +                GPIO4_LEVEL_LOW: u1,
    +                GPIO4_LEVEL_HIGH: u1,
    +                GPIO4_EDGE_LOW: u1,
    +                GPIO4_EDGE_HIGH: u1,
    +                GPIO5_LEVEL_LOW: u1,
    +                GPIO5_LEVEL_HIGH: u1,
    +                GPIO5_EDGE_LOW: u1,
    +                GPIO5_EDGE_HIGH: u1,
    +                GPIO6_LEVEL_LOW: u1,
    +                GPIO6_LEVEL_HIGH: u1,
    +                GPIO6_EDGE_LOW: u1,
    +                GPIO6_EDGE_HIGH: u1,
    +                GPIO7_LEVEL_LOW: u1,
    +                GPIO7_LEVEL_HIGH: u1,
    +                GPIO7_EDGE_LOW: u1,
    +                GPIO7_EDGE_HIGH: u1,
    +            }),
    +            ///  Interrupt status after masking & forcing for dormant_wake
    +            DORMANT_WAKE_INTS1: mmio.Mmio(packed struct(u32) {
    +                GPIO8_LEVEL_LOW: u1,
    +                GPIO8_LEVEL_HIGH: u1,
    +                GPIO8_EDGE_LOW: u1,
    +                GPIO8_EDGE_HIGH: u1,
    +                GPIO9_LEVEL_LOW: u1,
    +                GPIO9_LEVEL_HIGH: u1,
    +                GPIO9_EDGE_LOW: u1,
    +                GPIO9_EDGE_HIGH: u1,
    +                GPIO10_LEVEL_LOW: u1,
    +                GPIO10_LEVEL_HIGH: u1,
    +                GPIO10_EDGE_LOW: u1,
    +                GPIO10_EDGE_HIGH: u1,
    +                GPIO11_LEVEL_LOW: u1,
    +                GPIO11_LEVEL_HIGH: u1,
    +                GPIO11_EDGE_LOW: u1,
    +                GPIO11_EDGE_HIGH: u1,
    +                GPIO12_LEVEL_LOW: u1,
    +                GPIO12_LEVEL_HIGH: u1,
    +                GPIO12_EDGE_LOW: u1,
    +                GPIO12_EDGE_HIGH: u1,
    +                GPIO13_LEVEL_LOW: u1,
    +                GPIO13_LEVEL_HIGH: u1,
    +                GPIO13_EDGE_LOW: u1,
    +                GPIO13_EDGE_HIGH: u1,
    +                GPIO14_LEVEL_LOW: u1,
    +                GPIO14_LEVEL_HIGH: u1,
    +                GPIO14_EDGE_LOW: u1,
    +                GPIO14_EDGE_HIGH: u1,
    +                GPIO15_LEVEL_LOW: u1,
    +                GPIO15_LEVEL_HIGH: u1,
    +                GPIO15_EDGE_LOW: u1,
    +                GPIO15_EDGE_HIGH: u1,
    +            }),
    +            ///  Interrupt status after masking & forcing for dormant_wake
    +            DORMANT_WAKE_INTS2: mmio.Mmio(packed struct(u32) {
    +                GPIO16_LEVEL_LOW: u1,
    +                GPIO16_LEVEL_HIGH: u1,
    +                GPIO16_EDGE_LOW: u1,
    +                GPIO16_EDGE_HIGH: u1,
    +                GPIO17_LEVEL_LOW: u1,
    +                GPIO17_LEVEL_HIGH: u1,
    +                GPIO17_EDGE_LOW: u1,
    +                GPIO17_EDGE_HIGH: u1,
    +                GPIO18_LEVEL_LOW: u1,
    +                GPIO18_LEVEL_HIGH: u1,
    +                GPIO18_EDGE_LOW: u1,
    +                GPIO18_EDGE_HIGH: u1,
    +                GPIO19_LEVEL_LOW: u1,
    +                GPIO19_LEVEL_HIGH: u1,
    +                GPIO19_EDGE_LOW: u1,
    +                GPIO19_EDGE_HIGH: u1,
    +                GPIO20_LEVEL_LOW: u1,
    +                GPIO20_LEVEL_HIGH: u1,
    +                GPIO20_EDGE_LOW: u1,
    +                GPIO20_EDGE_HIGH: u1,
    +                GPIO21_LEVEL_LOW: u1,
    +                GPIO21_LEVEL_HIGH: u1,
    +                GPIO21_EDGE_LOW: u1,
    +                GPIO21_EDGE_HIGH: u1,
    +                GPIO22_LEVEL_LOW: u1,
    +                GPIO22_LEVEL_HIGH: u1,
    +                GPIO22_EDGE_LOW: u1,
    +                GPIO22_EDGE_HIGH: u1,
    +                GPIO23_LEVEL_LOW: u1,
    +                GPIO23_LEVEL_HIGH: u1,
    +                GPIO23_EDGE_LOW: u1,
    +                GPIO23_EDGE_HIGH: u1,
    +            }),
    +            ///  Interrupt status after masking & forcing for dormant_wake
    +            DORMANT_WAKE_INTS3: mmio.Mmio(packed struct(u32) {
    +                GPIO24_LEVEL_LOW: u1,
    +                GPIO24_LEVEL_HIGH: u1,
    +                GPIO24_EDGE_LOW: u1,
    +                GPIO24_EDGE_HIGH: u1,
    +                GPIO25_LEVEL_LOW: u1,
    +                GPIO25_LEVEL_HIGH: u1,
    +                GPIO25_EDGE_LOW: u1,
    +                GPIO25_EDGE_HIGH: u1,
    +                GPIO26_LEVEL_LOW: u1,
    +                GPIO26_LEVEL_HIGH: u1,
    +                GPIO26_EDGE_LOW: u1,
    +                GPIO26_EDGE_HIGH: u1,
    +                GPIO27_LEVEL_LOW: u1,
    +                GPIO27_LEVEL_HIGH: u1,
    +                GPIO27_EDGE_LOW: u1,
    +                GPIO27_EDGE_HIGH: u1,
    +                GPIO28_LEVEL_LOW: u1,
    +                GPIO28_LEVEL_HIGH: u1,
    +                GPIO28_EDGE_LOW: u1,
    +                GPIO28_EDGE_HIGH: u1,
    +                GPIO29_LEVEL_LOW: u1,
    +                GPIO29_LEVEL_HIGH: u1,
    +                GPIO29_EDGE_LOW: u1,
    +                GPIO29_EDGE_HIGH: u1,
    +                padding: u8,
    +            }),
    +        };
    +
    +        pub const IO_QSPI = extern struct {
    +            ///  GPIO status
    +            GPIO_QSPI_SCLK_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO_QSPI_SCLK_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        xip_sclk = 0x0,
    +                        sio_30 = 0x5,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO_QSPI_SS_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO_QSPI_SS_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        xip_ss_n = 0x0,
    +                        sio_31 = 0x5,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO_QSPI_SD0_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO_QSPI_SD0_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        xip_sd0 = 0x0,
    +                        sio_32 = 0x5,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO_QSPI_SD1_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO_QSPI_SD1_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        xip_sd1 = 0x0,
    +                        sio_33 = 0x5,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO_QSPI_SD2_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO_QSPI_SD2_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        xip_sd2 = 0x0,
    +                        sio_34 = 0x5,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  GPIO status
    +            GPIO_QSPI_SD3_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  output signal from selected peripheral, before register override is applied
    +                OUTFROMPERI: u1,
    +                ///  output signal to pad after register override is applied
    +                OUTTOPAD: u1,
    +                reserved12: u2,
    +                ///  output enable from selected peripheral, before register override is applied
    +                OEFROMPERI: u1,
    +                ///  output enable to pad after register override is applied
    +                OETOPAD: u1,
    +                reserved17: u3,
    +                ///  input signal from pad, before override is applied
    +                INFROMPAD: u1,
    +                reserved19: u1,
    +                ///  input signal to peripheral, after override is applied
    +                INTOPERI: u1,
    +                reserved24: u4,
    +                ///  interrupt from pad before override is applied
    +                IRQFROMPAD: u1,
    +                reserved26: u1,
    +                ///  interrupt to processors, after override is applied
    +                IRQTOPROC: u1,
    +                padding: u5,
    +            }),
    +            ///  GPIO control including function select and overrides.
    +            GPIO_QSPI_SD3_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  0-31 -> selects pin function according to the gpio table
    +                ///  31 == NULL
    +                FUNCSEL: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        xip_sd3 = 0x0,
    +                        sio_35 = 0x5,
    +                        null = 0x1f,
    +                        _,
    +                    },
    +                },
    +                reserved8: u3,
    +                OUTOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  drive output low
    +                        LOW = 0x2,
    +                        ///  drive output high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved12: u2,
    +                OEOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  drive output enable from peripheral signal selected by funcsel
    +                        NORMAL = 0x0,
    +                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    +                        INVERT = 0x1,
    +                        ///  disable output
    +                        DISABLE = 0x2,
    +                        ///  enable output
    +                        ENABLE = 0x3,
    +                    },
    +                },
    +                reserved16: u2,
    +                INOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the peri input
    +                        NORMAL = 0x0,
    +                        ///  invert the peri input
    +                        INVERT = 0x1,
    +                        ///  drive peri input low
    +                        LOW = 0x2,
    +                        ///  drive peri input high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                reserved28: u10,
    +                IRQOVER: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  don't invert the interrupt
    +                        NORMAL = 0x0,
    +                        ///  invert the interrupt
    +                        INVERT = 0x1,
    +                        ///  drive interrupt low
    +                        LOW = 0x2,
    +                        ///  drive interrupt high
    +                        HIGH = 0x3,
    +                    },
    +                },
    +                padding: u2,
    +            }),
    +            ///  Raw Interrupts
    +            INTR: mmio.Mmio(packed struct(u32) {
    +                GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    +                GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SCLK_EDGE_LOW: u1,
    +                GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    +                GPIO_QSPI_SS_LEVEL_LOW: u1,
    +                GPIO_QSPI_SS_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SS_EDGE_LOW: u1,
    +                GPIO_QSPI_SS_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD0_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD0_EDGE_LOW: u1,
    +                GPIO_QSPI_SD0_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD1_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD1_EDGE_LOW: u1,
    +                GPIO_QSPI_SD1_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD2_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD2_EDGE_LOW: u1,
    +                GPIO_QSPI_SD2_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD3_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD3_EDGE_LOW: u1,
    +                GPIO_QSPI_SD3_EDGE_HIGH: u1,
    +                padding: u8,
    +            }),
    +            ///  Interrupt Enable for proc0
    +            PROC0_INTE: mmio.Mmio(packed struct(u32) {
    +                GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    +                GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SCLK_EDGE_LOW: u1,
    +                GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    +                GPIO_QSPI_SS_LEVEL_LOW: u1,
    +                GPIO_QSPI_SS_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SS_EDGE_LOW: u1,
    +                GPIO_QSPI_SS_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD0_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD0_EDGE_LOW: u1,
    +                GPIO_QSPI_SD0_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD1_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD1_EDGE_LOW: u1,
    +                GPIO_QSPI_SD1_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD2_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD2_EDGE_LOW: u1,
    +                GPIO_QSPI_SD2_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD3_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD3_EDGE_LOW: u1,
    +                GPIO_QSPI_SD3_EDGE_HIGH: u1,
    +                padding: u8,
    +            }),
    +            ///  Interrupt Force for proc0
    +            PROC0_INTF: mmio.Mmio(packed struct(u32) {
    +                GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    +                GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SCLK_EDGE_LOW: u1,
    +                GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    +                GPIO_QSPI_SS_LEVEL_LOW: u1,
    +                GPIO_QSPI_SS_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SS_EDGE_LOW: u1,
    +                GPIO_QSPI_SS_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD0_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD0_EDGE_LOW: u1,
    +                GPIO_QSPI_SD0_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD1_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD1_EDGE_LOW: u1,
    +                GPIO_QSPI_SD1_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD2_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD2_EDGE_LOW: u1,
    +                GPIO_QSPI_SD2_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD3_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD3_EDGE_LOW: u1,
    +                GPIO_QSPI_SD3_EDGE_HIGH: u1,
    +                padding: u8,
    +            }),
    +            ///  Interrupt status after masking & forcing for proc0
    +            PROC0_INTS: mmio.Mmio(packed struct(u32) {
    +                GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    +                GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SCLK_EDGE_LOW: u1,
    +                GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    +                GPIO_QSPI_SS_LEVEL_LOW: u1,
    +                GPIO_QSPI_SS_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SS_EDGE_LOW: u1,
    +                GPIO_QSPI_SS_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD0_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD0_EDGE_LOW: u1,
    +                GPIO_QSPI_SD0_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD1_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD1_EDGE_LOW: u1,
    +                GPIO_QSPI_SD1_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD2_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD2_EDGE_LOW: u1,
    +                GPIO_QSPI_SD2_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD3_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD3_EDGE_LOW: u1,
    +                GPIO_QSPI_SD3_EDGE_HIGH: u1,
    +                padding: u8,
    +            }),
    +            ///  Interrupt Enable for proc1
    +            PROC1_INTE: mmio.Mmio(packed struct(u32) {
    +                GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    +                GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SCLK_EDGE_LOW: u1,
    +                GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    +                GPIO_QSPI_SS_LEVEL_LOW: u1,
    +                GPIO_QSPI_SS_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SS_EDGE_LOW: u1,
    +                GPIO_QSPI_SS_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD0_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD0_EDGE_LOW: u1,
    +                GPIO_QSPI_SD0_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD1_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD1_EDGE_LOW: u1,
    +                GPIO_QSPI_SD1_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD2_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD2_EDGE_LOW: u1,
    +                GPIO_QSPI_SD2_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD3_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD3_EDGE_LOW: u1,
    +                GPIO_QSPI_SD3_EDGE_HIGH: u1,
    +                padding: u8,
    +            }),
    +            ///  Interrupt Force for proc1
    +            PROC1_INTF: mmio.Mmio(packed struct(u32) {
    +                GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    +                GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SCLK_EDGE_LOW: u1,
    +                GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    +                GPIO_QSPI_SS_LEVEL_LOW: u1,
    +                GPIO_QSPI_SS_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SS_EDGE_LOW: u1,
    +                GPIO_QSPI_SS_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD0_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD0_EDGE_LOW: u1,
    +                GPIO_QSPI_SD0_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD1_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD1_EDGE_LOW: u1,
    +                GPIO_QSPI_SD1_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD2_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD2_EDGE_LOW: u1,
    +                GPIO_QSPI_SD2_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD3_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD3_EDGE_LOW: u1,
    +                GPIO_QSPI_SD3_EDGE_HIGH: u1,
    +                padding: u8,
    +            }),
    +            ///  Interrupt status after masking & forcing for proc1
    +            PROC1_INTS: mmio.Mmio(packed struct(u32) {
    +                GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    +                GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SCLK_EDGE_LOW: u1,
    +                GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    +                GPIO_QSPI_SS_LEVEL_LOW: u1,
    +                GPIO_QSPI_SS_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SS_EDGE_LOW: u1,
    +                GPIO_QSPI_SS_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD0_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD0_EDGE_LOW: u1,
    +                GPIO_QSPI_SD0_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD1_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD1_EDGE_LOW: u1,
    +                GPIO_QSPI_SD1_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD2_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD2_EDGE_LOW: u1,
    +                GPIO_QSPI_SD2_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD3_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD3_EDGE_LOW: u1,
    +                GPIO_QSPI_SD3_EDGE_HIGH: u1,
    +                padding: u8,
    +            }),
    +            ///  Interrupt Enable for dormant_wake
    +            DORMANT_WAKE_INTE: mmio.Mmio(packed struct(u32) {
    +                GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    +                GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SCLK_EDGE_LOW: u1,
    +                GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    +                GPIO_QSPI_SS_LEVEL_LOW: u1,
    +                GPIO_QSPI_SS_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SS_EDGE_LOW: u1,
    +                GPIO_QSPI_SS_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD0_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD0_EDGE_LOW: u1,
    +                GPIO_QSPI_SD0_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD1_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD1_EDGE_LOW: u1,
    +                GPIO_QSPI_SD1_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD2_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD2_EDGE_LOW: u1,
    +                GPIO_QSPI_SD2_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD3_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD3_EDGE_LOW: u1,
    +                GPIO_QSPI_SD3_EDGE_HIGH: u1,
    +                padding: u8,
    +            }),
    +            ///  Interrupt Force for dormant_wake
    +            DORMANT_WAKE_INTF: mmio.Mmio(packed struct(u32) {
    +                GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    +                GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SCLK_EDGE_LOW: u1,
    +                GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    +                GPIO_QSPI_SS_LEVEL_LOW: u1,
    +                GPIO_QSPI_SS_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SS_EDGE_LOW: u1,
    +                GPIO_QSPI_SS_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD0_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD0_EDGE_LOW: u1,
    +                GPIO_QSPI_SD0_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD1_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD1_EDGE_LOW: u1,
    +                GPIO_QSPI_SD1_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD2_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD2_EDGE_LOW: u1,
    +                GPIO_QSPI_SD2_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD3_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD3_EDGE_LOW: u1,
    +                GPIO_QSPI_SD3_EDGE_HIGH: u1,
    +                padding: u8,
    +            }),
    +            ///  Interrupt status after masking & forcing for dormant_wake
    +            DORMANT_WAKE_INTS: mmio.Mmio(packed struct(u32) {
    +                GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    +                GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SCLK_EDGE_LOW: u1,
    +                GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    +                GPIO_QSPI_SS_LEVEL_LOW: u1,
    +                GPIO_QSPI_SS_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SS_EDGE_LOW: u1,
    +                GPIO_QSPI_SS_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD0_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD0_EDGE_LOW: u1,
    +                GPIO_QSPI_SD0_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD1_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD1_EDGE_LOW: u1,
    +                GPIO_QSPI_SD1_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD2_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD2_EDGE_LOW: u1,
    +                GPIO_QSPI_SD2_EDGE_HIGH: u1,
    +                GPIO_QSPI_SD3_LEVEL_LOW: u1,
    +                GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    +                GPIO_QSPI_SD3_EDGE_LOW: u1,
    +                GPIO_QSPI_SD3_EDGE_HIGH: u1,
    +                padding: u8,
    +            }),
    +        };
    +
    +        pub const PADS_BANK0 = extern struct {
    +            ///  Voltage select. Per bank control
    +            VOLTAGE_SELECT: mmio.Mmio(packed struct(u32) {
    +                VOLTAGE_SELECT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Set voltage to 3.3V (DVDD >= 2V5)
    +                        @"3v3" = 0x0,
    +                        ///  Set voltage to 1.8V (DVDD <= 1V8)
    +                        @"1v8" = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Pad control register
    +            GPIO0: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO1: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO2: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO3: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO4: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO5: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO6: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO7: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO8: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO9: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO10: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO11: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO12: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO13: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO14: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO15: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO16: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO17: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO18: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO19: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO20: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO21: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO22: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO23: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO24: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO25: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO26: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO27: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO28: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO29: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            SWCLK: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            SWD: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +        };
    +
    +        pub const PADS_QSPI = extern struct {
    +            ///  Voltage select. Per bank control
    +            VOLTAGE_SELECT: mmio.Mmio(packed struct(u32) {
    +                VOLTAGE_SELECT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Set voltage to 3.3V (DVDD >= 2V5)
    +                        @"3v3" = 0x0,
    +                        ///  Set voltage to 1.8V (DVDD <= 1V8)
    +                        @"1v8" = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  Pad control register
    +            GPIO_QSPI_SCLK: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO_QSPI_SD0: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO_QSPI_SD1: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO_QSPI_SD2: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO_QSPI_SD3: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +            ///  Pad control register
    +            GPIO_QSPI_SS: mmio.Mmio(packed struct(u32) {
    +                ///  Slew rate control. 1 = Fast, 0 = Slow
    +                SLEWFAST: u1,
    +                ///  Enable schmitt trigger
    +                SCHMITT: u1,
    +                ///  Pull down enable
    +                PDE: u1,
    +                ///  Pull up enable
    +                PUE: u1,
    +                ///  Drive strength.
    +                DRIVE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"2mA" = 0x0,
    +                        @"4mA" = 0x1,
    +                        @"8mA" = 0x2,
    +                        @"12mA" = 0x3,
    +                    },
    +                },
    +                ///  Input enable
    +                IE: u1,
    +                ///  Output disable. Has priority over output enable from peripherals
    +                OD: u1,
    +                padding: u24,
    +            }),
    +        };
    +
    +        ///  Controls the crystal oscillator
    +        pub const XOSC = extern struct {
    +            ///  Crystal Oscillator Control
    +            CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  Frequency range. This resets to 0xAA0 and cannot be changed.
    +                FREQ_RANGE: packed union {
    +                    raw: u12,
    +                    value: enum(u12) {
    +                        @"1_15MHZ" = 0xaa0,
    +                        RESERVED_1 = 0xaa1,
    +                        RESERVED_2 = 0xaa2,
    +                        RESERVED_3 = 0xaa3,
    +                        _,
    +                    },
    +                },
    +                ///  On power-up this field is initialised to DISABLE and the chip runs from the ROSC.
    +                ///  If the chip has subsequently been programmed to run from the XOSC then setting this field to DISABLE may lock-up the chip. If this is a concern then run the clk_ref from the ROSC and enable the clk_sys RESUS feature.
    +                ///  The 12-bit code is intended to give some protection against accidental writes. An invalid setting will enable the oscillator.
    +                ENABLE: packed union {
    +                    raw: u12,
    +                    value: enum(u12) {
    +                        DISABLE = 0xd1e,
    +                        ENABLE = 0xfab,
    +                        _,
    +                    },
    +                },
    +                padding: u8,
    +            }),
    +            ///  Crystal Oscillator Status
    +            STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  The current frequency range setting, always reads 0
    +                FREQ_RANGE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"1_15MHZ" = 0x0,
    +                        RESERVED_1 = 0x1,
    +                        RESERVED_2 = 0x2,
    +                        RESERVED_3 = 0x3,
    +                    },
    +                },
    +                reserved12: u10,
    +                ///  Oscillator is enabled but not necessarily running and stable, resets to 0
    +                ENABLED: u1,
    +                reserved24: u11,
    +                ///  An invalid value has been written to CTRL_ENABLE or CTRL_FREQ_RANGE or DORMANT
    +                BADWRITE: u1,
    +                reserved31: u6,
    +                ///  Oscillator is running and stable
    +                STABLE: u1,
    +            }),
    +            ///  Crystal Oscillator pause control
    +            ///  This is used to save power by pausing the XOSC
    +            ///  On power-up this field is initialised to WAKE
    +            ///  An invalid write will also select WAKE
    +            ///  WARNING: stop the PLLs before selecting dormant mode
    +            ///  WARNING: setup the irq before selecting dormant mode
    +            DORMANT: u32,
    +            ///  Controls the startup delay
    +            STARTUP: mmio.Mmio(packed struct(u32) {
    +                ///  in multiples of 256*xtal_period. The reset value of 0xc4 corresponds to approx 50 000 cycles.
    +                DELAY: u14,
    +                reserved20: u6,
    +                ///  Multiplies the startup_delay by 4. This is of little value to the user given that the delay can be programmed directly.
    +                X4: u1,
    +                padding: u11,
    +            }),
    +            reserved28: [12]u8,
    +            ///  A down counter running at the xosc frequency which counts to zero and stops.
    +            ///  To start the counter write a non-zero value.
    +            ///  Can be used for short software pauses when setting up time sensitive hardware.
    +            COUNT: mmio.Mmio(packed struct(u32) {
    +                COUNT: u8,
    +                padding: u24,
    +            }),
    +        };
    +
    +        pub const PLL_SYS = extern struct {
    +            ///  Control and Status
    +            ///  GENERAL CONSTRAINTS:
    +            ///  Reference clock frequency min=5MHz, max=800MHz
    +            ///  Feedback divider min=16, max=320
    +            ///  VCO frequency min=400MHz, max=1600MHz
    +            CS: mmio.Mmio(packed struct(u32) {
    +                ///  Divides the PLL input reference clock.
    +                ///  Behaviour is undefined for div=0.
    +                ///  PLL output will be unpredictable during refdiv changes, wait for lock=1 before using it.
    +                REFDIV: u6,
    +                reserved8: u2,
    +                ///  Passes the reference clock to the output instead of the divided VCO. The VCO continues to run so the user can switch between the reference clock and the divided VCO but the output will glitch when doing so.
    +                BYPASS: u1,
    +                reserved31: u22,
    +                ///  PLL is locked
    +                LOCK: u1,
    +            }),
    +            ///  Controls the PLL power modes.
    +            PWR: mmio.Mmio(packed struct(u32) {
    +                ///  PLL powerdown
    +                ///  To save power set high when PLL output not required.
    +                PD: u1,
    +                reserved2: u1,
    +                ///  PLL DSM powerdown
    +                ///  Nothing is achieved by setting this low.
    +                DSMPD: u1,
    +                ///  PLL post divider powerdown
    +                ///  To save power set high when PLL output not required or bypass=1.
    +                POSTDIVPD: u1,
    +                reserved5: u1,
    +                ///  PLL VCO powerdown
    +                ///  To save power set high when PLL output not required or bypass=1.
    +                VCOPD: u1,
    +                padding: u26,
    +            }),
    +            ///  Feedback divisor
    +            ///  (note: this PLL does not support fractional division)
    +            FBDIV_INT: mmio.Mmio(packed struct(u32) {
    +                ///  see ctrl reg description for constraints
    +                FBDIV_INT: u12,
    +                padding: u20,
    +            }),
    +            ///  Controls the PLL post dividers for the primary output
    +            ///  (note: this PLL does not have a secondary output)
    +            ///  the primary output is driven from VCO divided by postdiv1*postdiv2
    +            PRIM: mmio.Mmio(packed struct(u32) {
    +                reserved12: u12,
    +                ///  divide by 1-7
    +                POSTDIV2: u3,
    +                reserved16: u1,
    +                ///  divide by 1-7
    +                POSTDIV1: u3,
    +                padding: u13,
    +            }),
    +        };
    +
    +        pub const PPB = extern struct {
    +            reserved57360: [57360]u8,
    +            ///  Use the SysTick Control and Status Register to enable the SysTick features.
    +            SYST_CSR: mmio.Mmio(packed struct(u32) {
    +                ///  Enable SysTick counter:
    +                ///  0 = Counter disabled.
    +                ///  1 = Counter enabled.
    +                ENABLE: u1,
    +                ///  Enables SysTick exception request:
    +                ///  0 = Counting down to zero does not assert the SysTick exception request.
    +                ///  1 = Counting down to zero to asserts the SysTick exception request.
    +                TICKINT: u1,
    +                ///  SysTick clock source. Always reads as one if SYST_CALIB reports NOREF.
    +                ///  Selects the SysTick timer clock source:
    +                ///  0 = External reference clock.
    +                ///  1 = Processor clock.
    +                CLKSOURCE: u1,
    +                reserved16: u13,
    +                ///  Returns 1 if timer counted to 0 since last time this was read. Clears on read by application or debugger.
    +                COUNTFLAG: u1,
    +                padding: u15,
    +            }),
    +            ///  Use the SysTick Reload Value Register to specify the start value to load into the current value register when the counter reaches 0. It can be any value between 0 and 0x00FFFFFF. A start value of 0 is possible, but has no effect because the SysTick interrupt and COUNTFLAG are activated when counting from 1 to 0. The reset value of this register is UNKNOWN.
    +            ///  To generate a multi-shot timer with a period of N processor clock cycles, use a RELOAD value of N-1. For example, if the SysTick interrupt is required every 100 clock pulses, set RELOAD to 99.
    +            SYST_RVR: mmio.Mmio(packed struct(u32) {
    +                ///  Value to load into the SysTick Current Value Register when the counter reaches 0.
    +                RELOAD: u24,
    +                padding: u8,
    +            }),
    +            ///  Use the SysTick Current Value Register to find the current value in the register. The reset value of this register is UNKNOWN.
    +            SYST_CVR: mmio.Mmio(packed struct(u32) {
    +                ///  Reads return the current value of the SysTick counter. This register is write-clear. Writing to it with any value clears the register to 0. Clearing this register also clears the COUNTFLAG bit of the SysTick Control and Status Register.
    +                CURRENT: u24,
    +                padding: u8,
    +            }),
    +            ///  Use the SysTick Calibration Value Register to enable software to scale to any required speed using divide and multiply.
    +            SYST_CALIB: mmio.Mmio(packed struct(u32) {
    +                ///  An optional Reload value to be used for 10ms (100Hz) timing, subject to system clock skew errors. If the value reads as 0, the calibration value is not known.
    +                TENMS: u24,
    +                reserved30: u6,
    +                ///  If reads as 1, the calibration value for 10ms is inexact (due to clock frequency).
    +                SKEW: u1,
    +                ///  If reads as 1, the Reference clock is not provided - the CLKSOURCE bit of the SysTick Control and Status register will be forced to 1 and cannot be cleared to 0.
    +                NOREF: u1,
    +            }),
    +            reserved57600: [224]u8,
    +            ///  Use the Interrupt Set-Enable Register to enable interrupts and determine which interrupts are currently enabled.
    +            ///  If a pending interrupt is enabled, the NVIC activates the interrupt based on its priority. If an interrupt is not enabled, asserting its interrupt signal changes the interrupt state to pending, but the NVIC never activates the interrupt, regardless of its priority.
    +            NVIC_ISER: mmio.Mmio(packed struct(u32) {
    +                ///  Interrupt set-enable bits.
    +                ///  Write:
    +                ///  0 = No effect.
    +                ///  1 = Enable interrupt.
    +                ///  Read:
    +                ///  0 = Interrupt disabled.
    +                ///  1 = Interrupt enabled.
    +                SETENA: u32,
    +            }),
    +            reserved57728: [124]u8,
    +            ///  Use the Interrupt Clear-Enable Registers to disable interrupts and determine which interrupts are currently enabled.
    +            NVIC_ICER: mmio.Mmio(packed struct(u32) {
    +                ///  Interrupt clear-enable bits.
    +                ///  Write:
    +                ///  0 = No effect.
    +                ///  1 = Disable interrupt.
    +                ///  Read:
    +                ///  0 = Interrupt disabled.
    +                ///  1 = Interrupt enabled.
    +                CLRENA: u32,
    +            }),
    +            reserved57856: [124]u8,
    +            ///  The NVIC_ISPR forces interrupts into the pending state, and shows which interrupts are pending.
    +            NVIC_ISPR: mmio.Mmio(packed struct(u32) {
    +                ///  Interrupt set-pending bits.
    +                ///  Write:
    +                ///  0 = No effect.
    +                ///  1 = Changes interrupt state to pending.
    +                ///  Read:
    +                ///  0 = Interrupt is not pending.
    +                ///  1 = Interrupt is pending.
    +                ///  Note: Writing 1 to the NVIC_ISPR bit corresponding to:
    +                ///  An interrupt that is pending has no effect.
    +                ///  A disabled interrupt sets the state of that interrupt to pending.
    +                SETPEND: u32,
    +            }),
    +            reserved57984: [124]u8,
    +            ///  Use the Interrupt Clear-Pending Register to clear pending interrupts and determine which interrupts are currently pending.
    +            NVIC_ICPR: mmio.Mmio(packed struct(u32) {
    +                ///  Interrupt clear-pending bits.
    +                ///  Write:
    +                ///  0 = No effect.
    +                ///  1 = Removes pending state and interrupt.
    +                ///  Read:
    +                ///  0 = Interrupt is not pending.
    +                ///  1 = Interrupt is pending.
    +                CLRPEND: u32,
    +            }),
    +            reserved58368: [380]u8,
    +            ///  Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest.
    +            ///  Note: Writing 1 to an NVIC_ICPR bit does not affect the active state of the corresponding interrupt.
    +            ///  These registers are only word-accessible
    +            NVIC_IPR0: mmio.Mmio(packed struct(u32) {
    +                reserved6: u6,
    +                ///  Priority of interrupt 0
    +                IP_0: u2,
    +                reserved14: u6,
    +                ///  Priority of interrupt 1
    +                IP_1: u2,
    +                reserved22: u6,
    +                ///  Priority of interrupt 2
    +                IP_2: u2,
    +                reserved30: u6,
    +                ///  Priority of interrupt 3
    +                IP_3: u2,
    +            }),
    +            ///  Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest.
    +            NVIC_IPR1: mmio.Mmio(packed struct(u32) {
    +                reserved6: u6,
    +                ///  Priority of interrupt 4
    +                IP_4: u2,
    +                reserved14: u6,
    +                ///  Priority of interrupt 5
    +                IP_5: u2,
    +                reserved22: u6,
    +                ///  Priority of interrupt 6
    +                IP_6: u2,
    +                reserved30: u6,
    +                ///  Priority of interrupt 7
    +                IP_7: u2,
    +            }),
    +            ///  Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest.
    +            NVIC_IPR2: mmio.Mmio(packed struct(u32) {
    +                reserved6: u6,
    +                ///  Priority of interrupt 8
    +                IP_8: u2,
    +                reserved14: u6,
    +                ///  Priority of interrupt 9
    +                IP_9: u2,
    +                reserved22: u6,
    +                ///  Priority of interrupt 10
    +                IP_10: u2,
    +                reserved30: u6,
    +                ///  Priority of interrupt 11
    +                IP_11: u2,
    +            }),
    +            ///  Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest.
    +            NVIC_IPR3: mmio.Mmio(packed struct(u32) {
    +                reserved6: u6,
    +                ///  Priority of interrupt 12
    +                IP_12: u2,
    +                reserved14: u6,
    +                ///  Priority of interrupt 13
    +                IP_13: u2,
    +                reserved22: u6,
    +                ///  Priority of interrupt 14
    +                IP_14: u2,
    +                reserved30: u6,
    +                ///  Priority of interrupt 15
    +                IP_15: u2,
    +            }),
    +            ///  Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest.
    +            NVIC_IPR4: mmio.Mmio(packed struct(u32) {
    +                reserved6: u6,
    +                ///  Priority of interrupt 16
    +                IP_16: u2,
    +                reserved14: u6,
    +                ///  Priority of interrupt 17
    +                IP_17: u2,
    +                reserved22: u6,
    +                ///  Priority of interrupt 18
    +                IP_18: u2,
    +                reserved30: u6,
    +                ///  Priority of interrupt 19
    +                IP_19: u2,
    +            }),
    +            ///  Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest.
    +            NVIC_IPR5: mmio.Mmio(packed struct(u32) {
    +                reserved6: u6,
    +                ///  Priority of interrupt 20
    +                IP_20: u2,
    +                reserved14: u6,
    +                ///  Priority of interrupt 21
    +                IP_21: u2,
    +                reserved22: u6,
    +                ///  Priority of interrupt 22
    +                IP_22: u2,
    +                reserved30: u6,
    +                ///  Priority of interrupt 23
    +                IP_23: u2,
    +            }),
    +            ///  Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest.
    +            NVIC_IPR6: mmio.Mmio(packed struct(u32) {
    +                reserved6: u6,
    +                ///  Priority of interrupt 24
    +                IP_24: u2,
    +                reserved14: u6,
    +                ///  Priority of interrupt 25
    +                IP_25: u2,
    +                reserved22: u6,
    +                ///  Priority of interrupt 26
    +                IP_26: u2,
    +                reserved30: u6,
    +                ///  Priority of interrupt 27
    +                IP_27: u2,
    +            }),
    +            ///  Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest.
    +            NVIC_IPR7: mmio.Mmio(packed struct(u32) {
    +                reserved6: u6,
    +                ///  Priority of interrupt 28
    +                IP_28: u2,
    +                reserved14: u6,
    +                ///  Priority of interrupt 29
    +                IP_29: u2,
    +                reserved22: u6,
    +                ///  Priority of interrupt 30
    +                IP_30: u2,
    +                reserved30: u6,
    +                ///  Priority of interrupt 31
    +                IP_31: u2,
    +            }),
    +            reserved60672: [2272]u8,
    +            ///  Read the CPU ID Base Register to determine: the ID number of the processor core, the version number of the processor core, the implementation details of the processor core.
    +            CPUID: mmio.Mmio(packed struct(u32) {
    +                ///  Minor revision number m in the rnpm revision status:
    +                ///  0x1 = Patch 1.
    +                REVISION: u4,
    +                ///  Number of processor within family: 0xC60 = Cortex-M0+
    +                PARTNO: u12,
    +                ///  Constant that defines the architecture of the processor:
    +                ///  0xC = ARMv6-M architecture.
    +                ARCHITECTURE: u4,
    +                ///  Major revision number n in the rnpm revision status:
    +                ///  0x0 = Revision 0.
    +                VARIANT: u4,
    +                ///  Implementor code: 0x41 = ARM
    +                IMPLEMENTER: u8,
    +            }),
    +            ///  Use the Interrupt Control State Register to set a pending Non-Maskable Interrupt (NMI), set or clear a pending PendSV, set or clear a pending SysTick, check for pending exceptions, check the vector number of the highest priority pended exception, check the vector number of the active exception.
    +            ICSR: mmio.Mmio(packed struct(u32) {
    +                ///  Active exception number field. Reset clears the VECTACTIVE field.
    +                VECTACTIVE: u9,
    +                reserved12: u3,
    +                ///  Indicates the exception number for the highest priority pending exception: 0 = no pending exceptions. Non zero = The pending state includes the effect of memory-mapped enable and mask registers. It does not include the PRIMASK special-purpose register qualifier.
    +                VECTPENDING: u9,
    +                reserved22: u1,
    +                ///  External interrupt pending flag
    +                ISRPENDING: u1,
    +                ///  The system can only access this bit when the core is halted. It indicates that a pending interrupt is to be taken in the next running cycle. If C_MASKINTS is clear in the Debug Halting Control and Status Register, the interrupt is serviced.
    +                ISRPREEMPT: u1,
    +                reserved25: u1,
    +                ///  SysTick exception clear-pending bit.
    +                ///  Write:
    +                ///  0 = No effect.
    +                ///  1 = Removes the pending state from the SysTick exception.
    +                ///  This bit is WO. On a register read its value is Unknown.
    +                PENDSTCLR: u1,
    +                ///  SysTick exception set-pending bit.
    +                ///  Write:
    +                ///  0 = No effect.
    +                ///  1 = Changes SysTick exception state to pending.
    +                ///  Read:
    +                ///  0 = SysTick exception is not pending.
    +                ///  1 = SysTick exception is pending.
    +                PENDSTSET: u1,
    +                ///  PendSV clear-pending bit.
    +                ///  Write:
    +                ///  0 = No effect.
    +                ///  1 = Removes the pending state from the PendSV exception.
    +                PENDSVCLR: u1,
    +                ///  PendSV set-pending bit.
    +                ///  Write:
    +                ///  0 = No effect.
    +                ///  1 = Changes PendSV exception state to pending.
    +                ///  Read:
    +                ///  0 = PendSV exception is not pending.
    +                ///  1 = PendSV exception is pending.
    +                ///  Writing 1 to this bit is the only way to set the PendSV exception state to pending.
    +                PENDSVSET: u1,
    +                reserved31: u2,
    +                ///  Setting this bit will activate an NMI. Since NMI is the highest priority exception, it will activate as soon as it is registered.
    +                ///  NMI set-pending bit.
    +                ///  Write:
    +                ///  0 = No effect.
    +                ///  1 = Changes NMI exception state to pending.
    +                ///  Read:
    +                ///  0 = NMI exception is not pending.
    +                ///  1 = NMI exception is pending.
    +                ///  Because NMI is the highest-priority exception, normally the processor enters the NMI
    +                ///  exception handler as soon as it detects a write of 1 to this bit. Entering the handler then clears
    +                ///  this bit to 0. This means a read of this bit by the NMI exception handler returns 1 only if the
    +                ///  NMI signal is reasserted while the processor is executing that handler.
    +                NMIPENDSET: u1,
    +            }),
    +            ///  The VTOR holds the vector table offset address.
    +            VTOR: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  Bits [31:8] of the indicate the vector table offset address.
    +                TBLOFF: u24,
    +            }),
    +            ///  Use the Application Interrupt and Reset Control Register to: determine data endianness, clear all active state information from debug halt mode, request a system reset.
    +            AIRCR: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Clears all active state information for fixed and configurable exceptions. This bit: is self-clearing, can only be set by the DAP when the core is halted. When set: clears all active exception status of the processor, forces a return to Thread mode, forces an IPSR of 0. A debugger must re-initialize the stack.
    +                VECTCLRACTIVE: u1,
    +                ///  Writing 1 to this bit causes the SYSRESETREQ signal to the outer system to be asserted to request a reset. The intention is to force a large system reset of all major components except for debug. The C_HALT bit in the DHCSR is cleared as a result of the system reset requested. The debugger does not lose contact with the device.
    +                SYSRESETREQ: u1,
    +                reserved15: u12,
    +                ///  Data endianness implemented:
    +                ///  0 = Little-endian.
    +                ENDIANESS: u1,
    +                ///  Register key:
    +                ///  Reads as Unknown
    +                ///  On writes, write 0x05FA to VECTKEY, otherwise the write is ignored.
    +                VECTKEY: u16,
    +            }),
    +            ///  System Control Register. Use the System Control Register for power-management functions: signal to the system when the processor can enter a low power state, control how the processor enters and exits low power states.
    +            SCR: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Indicates sleep-on-exit when returning from Handler mode to Thread mode:
    +                ///  0 = Do not sleep when returning to Thread mode.
    +                ///  1 = Enter sleep, or deep sleep, on return from an ISR to Thread mode.
    +                ///  Setting this bit to 1 enables an interrupt driven application to avoid returning to an empty main application.
    +                SLEEPONEXIT: u1,
    +                ///  Controls whether the processor uses sleep or deep sleep as its low power mode:
    +                ///  0 = Sleep.
    +                ///  1 = Deep sleep.
    +                SLEEPDEEP: u1,
    +                reserved4: u1,
    +                ///  Send Event on Pending bit:
    +                ///  0 = Only enabled interrupts or events can wakeup the processor, disabled interrupts are excluded.
    +                ///  1 = Enabled events and all interrupts, including disabled interrupts, can wakeup the processor.
    +                ///  When an event or interrupt becomes pending, the event signal wakes up the processor from WFE. If the
    +                ///  processor is not waiting for an event, the event is registered and affects the next WFE.
    +                ///  The processor also wakes up on execution of an SEV instruction or an external event.
    +                SEVONPEND: u1,
    +                padding: u27,
    +            }),
    +            ///  The Configuration and Control Register permanently enables stack alignment and causes unaligned accesses to result in a Hard Fault.
    +            CCR: mmio.Mmio(packed struct(u32) {
    +                reserved3: u3,
    +                ///  Always reads as one, indicates that all unaligned accesses generate a HardFault.
    +                UNALIGN_TRP: u1,
    +                reserved9: u5,
    +                ///  Always reads as one, indicates 8-byte stack alignment on exception entry. On exception entry, the processor uses bit[9] of the stacked PSR to indicate the stack alignment. On return from the exception it uses this stacked bit to restore the correct stack alignment.
    +                STKALIGN: u1,
    +                padding: u22,
    +            }),
    +            reserved60700: [4]u8,
    +            ///  System handlers are a special class of exception handler that can have their priority set to any of the priority levels. Use the System Handler Priority Register 2 to set the priority of SVCall.
    +            SHPR2: mmio.Mmio(packed struct(u32) {
    +                reserved30: u30,
    +                ///  Priority of system handler 11, SVCall
    +                PRI_11: u2,
    +            }),
    +            ///  System handlers are a special class of exception handler that can have their priority set to any of the priority levels. Use the System Handler Priority Register 3 to set the priority of PendSV and SysTick.
    +            SHPR3: mmio.Mmio(packed struct(u32) {
    +                reserved22: u22,
    +                ///  Priority of system handler 14, PendSV
    +                PRI_14: u2,
    +                reserved30: u6,
    +                ///  Priority of system handler 15, SysTick
    +                PRI_15: u2,
    +            }),
    +            ///  Use the System Handler Control and State Register to determine or clear the pending status of SVCall.
    +            SHCSR: mmio.Mmio(packed struct(u32) {
    +                reserved15: u15,
    +                ///  Reads as 1 if SVCall is Pending. Write 1 to set pending SVCall, write 0 to clear pending SVCall.
    +                SVCALLPENDED: u1,
    +                padding: u16,
    +            }),
    +            reserved60816: [104]u8,
    +            ///  Read the MPU Type Register to determine if the processor implements an MPU, and how many regions the MPU supports.
    +            MPU_TYPE: mmio.Mmio(packed struct(u32) {
    +                ///  Indicates support for separate instruction and data address maps. Reads as 0 as ARMv6-M only supports a unified MPU.
    +                SEPARATE: u1,
    +                reserved8: u7,
    +                ///  Number of regions supported by the MPU.
    +                DREGION: u8,
    +                ///  Instruction region. Reads as zero as ARMv6-M only supports a unified MPU.
    +                IREGION: u8,
    +                padding: u8,
    +            }),
    +            ///  Use the MPU Control Register to enable and disable the MPU, and to control whether the default memory map is enabled as a background region for privileged accesses, and whether the MPU is enabled for HardFaults and NMIs.
    +            MPU_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  Enables the MPU. If the MPU is disabled, privileged and unprivileged accesses use the default memory map.
    +                ///  0 = MPU disabled.
    +                ///  1 = MPU enabled.
    +                ENABLE: u1,
    +                ///  Controls the use of the MPU for HardFaults and NMIs. Setting this bit when ENABLE is clear results in UNPREDICTABLE behaviour.
    +                ///  When the MPU is enabled:
    +                ///  0 = MPU is disabled during HardFault and NMI handlers, regardless of the value of the ENABLE bit.
    +                ///  1 = the MPU is enabled during HardFault and NMI handlers.
    +                HFNMIENA: u1,
    +                ///  Controls whether the default memory map is enabled as a background region for privileged accesses. This bit is ignored when ENABLE is clear.
    +                ///  0 = If the MPU is enabled, disables use of the default memory map. Any memory access to a location not
    +                ///  covered by any enabled region causes a fault.
    +                ///  1 = If the MPU is enabled, enables use of the default memory map as a background region for privileged software accesses.
    +                ///  When enabled, the background region acts as if it is region number -1. Any region that is defined and enabled has priority over this default map.
    +                PRIVDEFENA: u1,
    +                padding: u29,
    +            }),
    +            ///  Use the MPU Region Number Register to select the region currently accessed by MPU_RBAR and MPU_RASR.
    +            MPU_RNR: mmio.Mmio(packed struct(u32) {
    +                ///  Indicates the MPU region referenced by the MPU_RBAR and MPU_RASR registers.
    +                ///  The MPU supports 8 memory regions, so the permitted values of this field are 0-7.
    +                REGION: u4,
    +                padding: u28,
    +            }),
    +            ///  Read the MPU Region Base Address Register to determine the base address of the region identified by MPU_RNR. Write to update the base address of said region or that of a specified region, with whose number MPU_RNR will also be updated.
    +            MPU_RBAR: mmio.Mmio(packed struct(u32) {
    +                ///  On writes, specifies the number of the region whose base address to update provided VALID is set written as 1. On reads, returns bits [3:0] of MPU_RNR.
    +                REGION: u4,
    +                ///  On writes, indicates whether the write must update the base address of the region identified by the REGION field, updating the MPU_RNR to indicate this new region.
    +                ///  Write:
    +                ///  0 = MPU_RNR not changed, and the processor:
    +                ///  Updates the base address for the region specified in the MPU_RNR.
    +                ///  Ignores the value of the REGION field.
    +                ///  1 = The processor:
    +                ///  Updates the value of the MPU_RNR to the value of the REGION field.
    +                ///  Updates the base address for the region specified in the REGION field.
    +                ///  Always reads as zero.
    +                VALID: u1,
    +                reserved8: u3,
    +                ///  Base address of the region.
    +                ADDR: u24,
    +            }),
    +            ///  Use the MPU Region Attribute and Size Register to define the size, access behaviour and memory type of the region identified by MPU_RNR, and enable that region.
    +            MPU_RASR: mmio.Mmio(packed struct(u32) {
    +                ///  Enables the region.
    +                ENABLE: u1,
    +                ///  Indicates the region size. Region size in bytes = 2^(SIZE+1). The minimum permitted value is 7 (b00111) = 256Bytes
    +                SIZE: u5,
    +                reserved8: u2,
    +                ///  Subregion Disable. For regions of 256 bytes or larger, each bit of this field controls whether one of the eight equal subregions is enabled.
    +                SRD: u8,
    +                ///  The MPU Region Attribute field. Use to define the region attribute control.
    +                ///  28 = XN: Instruction access disable bit:
    +                ///  0 = Instruction fetches enabled.
    +                ///  1 = Instruction fetches disabled.
    +                ///  26:24 = AP: Access permission field
    +                ///  18 = S: Shareable bit
    +                ///  17 = C: Cacheable bit
    +                ///  16 = B: Bufferable bit
    +                ATTRS: u16,
    +            }),
    +        };
    +
    +        ///  Register block for busfabric control signals and performance counters
    +        pub const BUSCTRL = extern struct {
    +            ///  Set the priority of each master for bus arbitration.
    +            BUS_PRIORITY: mmio.Mmio(packed struct(u32) {
    +                ///  0 - low priority, 1 - high priority
    +                PROC0: u1,
    +                reserved4: u3,
    +                ///  0 - low priority, 1 - high priority
    +                PROC1: u1,
    +                reserved8: u3,
    +                ///  0 - low priority, 1 - high priority
    +                DMA_R: u1,
    +                reserved12: u3,
    +                ///  0 - low priority, 1 - high priority
    +                DMA_W: u1,
    +                padding: u19,
    +            }),
    +            ///  Bus priority acknowledge
    +            BUS_PRIORITY_ACK: mmio.Mmio(packed struct(u32) {
    +                ///  Goes to 1 once all arbiters have registered the new global priority levels.
    +                ///  Arbiters update their local priority when servicing a new nonsequential access.
    +                ///  In normal circumstances this will happen almost immediately.
    +                BUS_PRIORITY_ACK: u1,
    +                padding: u31,
    +            }),
    +            ///  Bus fabric performance counter 0
    +            PERFCTR0: mmio.Mmio(packed struct(u32) {
    +                ///  Busfabric saturating performance counter 0
    +                ///  Count some event signal from the busfabric arbiters.
    +                ///  Write any value to clear. Select an event to count using PERFSEL0
    +                PERFCTR0: u24,
    +                padding: u8,
    +            }),
    +            ///  Bus fabric performance event select for PERFCTR0
    +            PERFSEL0: mmio.Mmio(packed struct(u32) {
    +                ///  Select an event for PERFCTR0. Count either contested accesses, or all accesses, on a downstream port of the main crossbar.
    +                PERFSEL0: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        apb_contested = 0x0,
    +                        apb = 0x1,
    +                        fastperi_contested = 0x2,
    +                        fastperi = 0x3,
    +                        sram5_contested = 0x4,
    +                        sram5 = 0x5,
    +                        sram4_contested = 0x6,
    +                        sram4 = 0x7,
    +                        sram3_contested = 0x8,
    +                        sram3 = 0x9,
    +                        sram2_contested = 0xa,
    +                        sram2 = 0xb,
    +                        sram1_contested = 0xc,
    +                        sram1 = 0xd,
    +                        sram0_contested = 0xe,
    +                        sram0 = 0xf,
    +                        xip_main_contested = 0x10,
    +                        xip_main = 0x11,
    +                        rom_contested = 0x12,
    +                        rom = 0x13,
    +                        _,
    +                    },
    +                },
    +                padding: u27,
    +            }),
    +            ///  Bus fabric performance counter 1
    +            PERFCTR1: mmio.Mmio(packed struct(u32) {
    +                ///  Busfabric saturating performance counter 1
    +                ///  Count some event signal from the busfabric arbiters.
    +                ///  Write any value to clear. Select an event to count using PERFSEL1
    +                PERFCTR1: u24,
    +                padding: u8,
    +            }),
    +            ///  Bus fabric performance event select for PERFCTR1
    +            PERFSEL1: mmio.Mmio(packed struct(u32) {
    +                ///  Select an event for PERFCTR1. Count either contested accesses, or all accesses, on a downstream port of the main crossbar.
    +                PERFSEL1: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        apb_contested = 0x0,
    +                        apb = 0x1,
    +                        fastperi_contested = 0x2,
    +                        fastperi = 0x3,
    +                        sram5_contested = 0x4,
    +                        sram5 = 0x5,
    +                        sram4_contested = 0x6,
    +                        sram4 = 0x7,
    +                        sram3_contested = 0x8,
    +                        sram3 = 0x9,
    +                        sram2_contested = 0xa,
    +                        sram2 = 0xb,
    +                        sram1_contested = 0xc,
    +                        sram1 = 0xd,
    +                        sram0_contested = 0xe,
    +                        sram0 = 0xf,
    +                        xip_main_contested = 0x10,
    +                        xip_main = 0x11,
    +                        rom_contested = 0x12,
    +                        rom = 0x13,
    +                        _,
    +                    },
    +                },
    +                padding: u27,
    +            }),
    +            ///  Bus fabric performance counter 2
    +            PERFCTR2: mmio.Mmio(packed struct(u32) {
    +                ///  Busfabric saturating performance counter 2
    +                ///  Count some event signal from the busfabric arbiters.
    +                ///  Write any value to clear. Select an event to count using PERFSEL2
    +                PERFCTR2: u24,
    +                padding: u8,
    +            }),
    +            ///  Bus fabric performance event select for PERFCTR2
    +            PERFSEL2: mmio.Mmio(packed struct(u32) {
    +                ///  Select an event for PERFCTR2. Count either contested accesses, or all accesses, on a downstream port of the main crossbar.
    +                PERFSEL2: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        apb_contested = 0x0,
    +                        apb = 0x1,
    +                        fastperi_contested = 0x2,
    +                        fastperi = 0x3,
    +                        sram5_contested = 0x4,
    +                        sram5 = 0x5,
    +                        sram4_contested = 0x6,
    +                        sram4 = 0x7,
    +                        sram3_contested = 0x8,
    +                        sram3 = 0x9,
    +                        sram2_contested = 0xa,
    +                        sram2 = 0xb,
    +                        sram1_contested = 0xc,
    +                        sram1 = 0xd,
    +                        sram0_contested = 0xe,
    +                        sram0 = 0xf,
    +                        xip_main_contested = 0x10,
    +                        xip_main = 0x11,
    +                        rom_contested = 0x12,
    +                        rom = 0x13,
    +                        _,
    +                    },
    +                },
    +                padding: u27,
    +            }),
    +            ///  Bus fabric performance counter 3
    +            PERFCTR3: mmio.Mmio(packed struct(u32) {
    +                ///  Busfabric saturating performance counter 3
    +                ///  Count some event signal from the busfabric arbiters.
    +                ///  Write any value to clear. Select an event to count using PERFSEL3
    +                PERFCTR3: u24,
    +                padding: u8,
    +            }),
    +            ///  Bus fabric performance event select for PERFCTR3
    +            PERFSEL3: mmio.Mmio(packed struct(u32) {
    +                ///  Select an event for PERFCTR3. Count either contested accesses, or all accesses, on a downstream port of the main crossbar.
    +                PERFSEL3: packed union {
    +                    raw: u5,
    +                    value: enum(u5) {
    +                        apb_contested = 0x0,
    +                        apb = 0x1,
    +                        fastperi_contested = 0x2,
    +                        fastperi = 0x3,
    +                        sram5_contested = 0x4,
    +                        sram5 = 0x5,
    +                        sram4_contested = 0x6,
    +                        sram4 = 0x7,
    +                        sram3_contested = 0x8,
    +                        sram3 = 0x9,
    +                        sram2_contested = 0xa,
    +                        sram2 = 0xb,
    +                        sram1_contested = 0xc,
    +                        sram1 = 0xd,
    +                        sram0_contested = 0xe,
    +                        sram0 = 0xf,
    +                        xip_main_contested = 0x10,
    +                        xip_main = 0x11,
    +                        rom_contested = 0x12,
    +                        rom = 0x13,
    +                        _,
    +                    },
    +                },
    +                padding: u27,
    +            }),
    +        };
    +
    +        pub const UART0 = extern struct {
    +            ///  Data Register, UARTDR
    +            UARTDR: mmio.Mmio(packed struct(u32) {
    +                ///  Receive (read) data character. Transmit (write) data character.
    +                DATA: u8,
    +                ///  Framing error. When set to 1, it indicates that the received character did not have a valid stop bit (a valid stop bit is 1). In FIFO mode, this error is associated with the character at the top of the FIFO.
    +                FE: u1,
    +                ///  Parity error. When set to 1, it indicates that the parity of the received data character does not match the parity that the EPS and SPS bits in the Line Control Register, UARTLCR_H. In FIFO mode, this error is associated with the character at the top of the FIFO.
    +                PE: u1,
    +                ///  Break error. This bit is set to 1 if a break condition was detected, indicating that the received data input was held LOW for longer than a full-word transmission time (defined as start, data, parity and stop bits). In FIFO mode, this error is associated with the character at the top of the FIFO. When a break occurs, only one 0 character is loaded into the FIFO. The next character is only enabled after the receive data input goes to a 1 (marking state), and the next valid start bit is received.
    +                BE: u1,
    +                ///  Overrun error. This bit is set to 1 if data is received and the receive FIFO is already full. This is cleared to 0 once there is an empty space in the FIFO and a new character can be written to it.
    +                OE: u1,
    +                padding: u20,
    +            }),
    +            ///  Receive Status Register/Error Clear Register, UARTRSR/UARTECR
    +            UARTRSR: mmio.Mmio(packed struct(u32) {
    +                ///  Framing error. When set to 1, it indicates that the received character did not have a valid stop bit (a valid stop bit is 1). This bit is cleared to 0 by a write to UARTECR. In FIFO mode, this error is associated with the character at the top of the FIFO.
    +                FE: u1,
    +                ///  Parity error. When set to 1, it indicates that the parity of the received data character does not match the parity that the EPS and SPS bits in the Line Control Register, UARTLCR_H. This bit is cleared to 0 by a write to UARTECR. In FIFO mode, this error is associated with the character at the top of the FIFO.
    +                PE: u1,
    +                ///  Break error. This bit is set to 1 if a break condition was detected, indicating that the received data input was held LOW for longer than a full-word transmission time (defined as start, data, parity, and stop bits). This bit is cleared to 0 after a write to UARTECR. In FIFO mode, this error is associated with the character at the top of the FIFO. When a break occurs, only one 0 character is loaded into the FIFO. The next character is only enabled after the receive data input goes to a 1 (marking state) and the next valid start bit is received.
    +                BE: u1,
    +                ///  Overrun error. This bit is set to 1 if data is received and the FIFO is already full. This bit is cleared to 0 by a write to UARTECR. The FIFO contents remain valid because no more data is written when the FIFO is full, only the contents of the shift register are overwritten. The CPU must now read the data, to empty the FIFO.
    +                OE: u1,
    +                padding: u28,
    +            }),
    +            reserved24: [16]u8,
    +            ///  Flag Register, UARTFR
    +            UARTFR: mmio.Mmio(packed struct(u32) {
    +                ///  Clear to send. This bit is the complement of the UART clear to send, nUARTCTS, modem status input. That is, the bit is 1 when nUARTCTS is LOW.
    +                CTS: u1,
    +                ///  Data set ready. This bit is the complement of the UART data set ready, nUARTDSR, modem status input. That is, the bit is 1 when nUARTDSR is LOW.
    +                DSR: u1,
    +                ///  Data carrier detect. This bit is the complement of the UART data carrier detect, nUARTDCD, modem status input. That is, the bit is 1 when nUARTDCD is LOW.
    +                DCD: u1,
    +                ///  UART busy. If this bit is set to 1, the UART is busy transmitting data. This bit remains set until the complete byte, including all the stop bits, has been sent from the shift register. This bit is set as soon as the transmit FIFO becomes non-empty, regardless of whether the UART is enabled or not.
    +                BUSY: u1,
    +                ///  Receive FIFO empty. The meaning of this bit depends on the state of the FEN bit in the UARTLCR_H Register. If the FIFO is disabled, this bit is set when the receive holding register is empty. If the FIFO is enabled, the RXFE bit is set when the receive FIFO is empty.
    +                RXFE: u1,
    +                ///  Transmit FIFO full. The meaning of this bit depends on the state of the FEN bit in the UARTLCR_H Register. If the FIFO is disabled, this bit is set when the transmit holding register is full. If the FIFO is enabled, the TXFF bit is set when the transmit FIFO is full.
    +                TXFF: u1,
    +                ///  Receive FIFO full. The meaning of this bit depends on the state of the FEN bit in the UARTLCR_H Register. If the FIFO is disabled, this bit is set when the receive holding register is full. If the FIFO is enabled, the RXFF bit is set when the receive FIFO is full.
    +                RXFF: u1,
    +                ///  Transmit FIFO empty. The meaning of this bit depends on the state of the FEN bit in the Line Control Register, UARTLCR_H. If the FIFO is disabled, this bit is set when the transmit holding register is empty. If the FIFO is enabled, the TXFE bit is set when the transmit FIFO is empty. This bit does not indicate if there is data in the transmit shift register.
    +                TXFE: u1,
    +                ///  Ring indicator. This bit is the complement of the UART ring indicator, nUARTRI, modem status input. That is, the bit is 1 when nUARTRI is LOW.
    +                RI: u1,
    +                padding: u23,
    +            }),
    +            reserved32: [4]u8,
    +            ///  IrDA Low-Power Counter Register, UARTILPR
    +            UARTILPR: mmio.Mmio(packed struct(u32) {
    +                ///  8-bit low-power divisor value. These bits are cleared to 0 at reset.
    +                ILPDVSR: u8,
    +                padding: u24,
    +            }),
    +            ///  Integer Baud Rate Register, UARTIBRD
    +            UARTIBRD: mmio.Mmio(packed struct(u32) {
    +                ///  The integer baud rate divisor. These bits are cleared to 0 on reset.
    +                BAUD_DIVINT: u16,
    +                padding: u16,
    +            }),
    +            ///  Fractional Baud Rate Register, UARTFBRD
    +            UARTFBRD: mmio.Mmio(packed struct(u32) {
    +                ///  The fractional baud rate divisor. These bits are cleared to 0 on reset.
    +                BAUD_DIVFRAC: u6,
    +                padding: u26,
    +            }),
    +            ///  Line Control Register, UARTLCR_H
    +            UARTLCR_H: mmio.Mmio(packed struct(u32) {
    +                ///  Send break. If this bit is set to 1, a low-level is continually output on the UARTTXD output, after completing transmission of the current character. For the proper execution of the break command, the software must set this bit for at least two complete frames. For normal use, this bit must be cleared to 0.
    +                BRK: u1,
    +                ///  Parity enable: 0 = parity is disabled and no parity bit added to the data frame 1 = parity checking and generation is enabled.
    +                PEN: u1,
    +                ///  Even parity select. Controls the type of parity the UART uses during transmission and reception: 0 = odd parity. The UART generates or checks for an odd number of 1s in the data and parity bits. 1 = even parity. The UART generates or checks for an even number of 1s in the data and parity bits. This bit has no effect when the PEN bit disables parity checking and generation.
    +                EPS: u1,
    +                ///  Two stop bits select. If this bit is set to 1, two stop bits are transmitted at the end of the frame. The receive logic does not check for two stop bits being received.
    +                STP2: u1,
    +                ///  Enable FIFOs: 0 = FIFOs are disabled (character mode) that is, the FIFOs become 1-byte-deep holding registers 1 = transmit and receive FIFO buffers are enabled (FIFO mode).
    +                FEN: u1,
    +                ///  Word length. These bits indicate the number of data bits transmitted or received in a frame as follows: b11 = 8 bits b10 = 7 bits b01 = 6 bits b00 = 5 bits.
    +                WLEN: u2,
    +                ///  Stick parity select. 0 = stick parity is disabled 1 = either: * if the EPS bit is 0 then the parity bit is transmitted and checked as a 1 * if the EPS bit is 1 then the parity bit is transmitted and checked as a 0. This bit has no effect when the PEN bit disables parity checking and generation.
    +                SPS: u1,
    +                padding: u24,
    +            }),
    +            ///  Control Register, UARTCR
    +            UARTCR: mmio.Mmio(packed struct(u32) {
    +                ///  UART enable: 0 = UART is disabled. If the UART is disabled in the middle of transmission or reception, it completes the current character before stopping. 1 = the UART is enabled. Data transmission and reception occurs for either UART signals or SIR signals depending on the setting of the SIREN bit.
    +                UARTEN: u1,
    +                ///  SIR enable: 0 = IrDA SIR ENDEC is disabled. nSIROUT remains LOW (no light pulse generated), and signal transitions on SIRIN have no effect. 1 = IrDA SIR ENDEC is enabled. Data is transmitted and received on nSIROUT and SIRIN. UARTTXD remains HIGH, in the marking state. Signal transitions on UARTRXD or modem status inputs have no effect. This bit has no effect if the UARTEN bit disables the UART.
    +                SIREN: u1,
    +                ///  SIR low-power IrDA mode. This bit selects the IrDA encoding mode. If this bit is cleared to 0, low-level bits are transmitted as an active high pulse with a width of 3 / 16th of the bit period. If this bit is set to 1, low-level bits are transmitted with a pulse width that is 3 times the period of the IrLPBaud16 input signal, regardless of the selected bit rate. Setting this bit uses less power, but might reduce transmission distances.
    +                SIRLP: u1,
    +                reserved7: u4,
    +                ///  Loopback enable. If this bit is set to 1 and the SIREN bit is set to 1 and the SIRTEST bit in the Test Control Register, UARTTCR is set to 1, then the nSIROUT path is inverted, and fed through to the SIRIN path. The SIRTEST bit in the test register must be set to 1 to override the normal half-duplex SIR operation. This must be the requirement for accessing the test registers during normal operation, and SIRTEST must be cleared to 0 when loopback testing is finished. This feature reduces the amount of external coupling required during system test. If this bit is set to 1, and the SIRTEST bit is set to 0, the UARTTXD path is fed through to the UARTRXD path. In either SIR mode or UART mode, when this bit is set, the modem outputs are also fed through to the modem inputs. This bit is cleared to 0 on reset, to disable loopback.
    +                LBE: u1,
    +                ///  Transmit enable. If this bit is set to 1, the transmit section of the UART is enabled. Data transmission occurs for either UART signals, or SIR signals depending on the setting of the SIREN bit. When the UART is disabled in the middle of transmission, it completes the current character before stopping.
    +                TXE: u1,
    +                ///  Receive enable. If this bit is set to 1, the receive section of the UART is enabled. Data reception occurs for either UART signals or SIR signals depending on the setting of the SIREN bit. When the UART is disabled in the middle of reception, it completes the current character before stopping.
    +                RXE: u1,
    +                ///  Data transmit ready. This bit is the complement of the UART data transmit ready, nUARTDTR, modem status output. That is, when the bit is programmed to a 1 then nUARTDTR is LOW.
    +                DTR: u1,
    +                ///  Request to send. This bit is the complement of the UART request to send, nUARTRTS, modem status output. That is, when the bit is programmed to a 1 then nUARTRTS is LOW.
    +                RTS: u1,
    +                ///  This bit is the complement of the UART Out1 (nUARTOut1) modem status output. That is, when the bit is programmed to a 1 the output is 0. For DTE this can be used as Data Carrier Detect (DCD).
    +                OUT1: u1,
    +                ///  This bit is the complement of the UART Out2 (nUARTOut2) modem status output. That is, when the bit is programmed to a 1, the output is 0. For DTE this can be used as Ring Indicator (RI).
    +                OUT2: u1,
    +                ///  RTS hardware flow control enable. If this bit is set to 1, RTS hardware flow control is enabled. Data is only requested when there is space in the receive FIFO for it to be received.
    +                RTSEN: u1,
    +                ///  CTS hardware flow control enable. If this bit is set to 1, CTS hardware flow control is enabled. Data is only transmitted when the nUARTCTS signal is asserted.
    +                CTSEN: u1,
    +                padding: u16,
    +            }),
    +            ///  Interrupt FIFO Level Select Register, UARTIFLS
    +            UARTIFLS: mmio.Mmio(packed struct(u32) {
    +                ///  Transmit interrupt FIFO level select. The trigger points for the transmit interrupt are as follows: b000 = Transmit FIFO becomes <= 1 / 8 full b001 = Transmit FIFO becomes <= 1 / 4 full b010 = Transmit FIFO becomes <= 1 / 2 full b011 = Transmit FIFO becomes <= 3 / 4 full b100 = Transmit FIFO becomes <= 7 / 8 full b101-b111 = reserved.
    +                TXIFLSEL: u3,
    +                ///  Receive interrupt FIFO level select. The trigger points for the receive interrupt are as follows: b000 = Receive FIFO becomes >= 1 / 8 full b001 = Receive FIFO becomes >= 1 / 4 full b010 = Receive FIFO becomes >= 1 / 2 full b011 = Receive FIFO becomes >= 3 / 4 full b100 = Receive FIFO becomes >= 7 / 8 full b101-b111 = reserved.
    +                RXIFLSEL: u3,
    +                padding: u26,
    +            }),
    +            ///  Interrupt Mask Set/Clear Register, UARTIMSC
    +            UARTIMSC: mmio.Mmio(packed struct(u32) {
    +                ///  nUARTRI modem interrupt mask. A read returns the current mask for the UARTRIINTR interrupt. On a write of 1, the mask of the UARTRIINTR interrupt is set. A write of 0 clears the mask.
    +                RIMIM: u1,
    +                ///  nUARTCTS modem interrupt mask. A read returns the current mask for the UARTCTSINTR interrupt. On a write of 1, the mask of the UARTCTSINTR interrupt is set. A write of 0 clears the mask.
    +                CTSMIM: u1,
    +                ///  nUARTDCD modem interrupt mask. A read returns the current mask for the UARTDCDINTR interrupt. On a write of 1, the mask of the UARTDCDINTR interrupt is set. A write of 0 clears the mask.
    +                DCDMIM: u1,
    +                ///  nUARTDSR modem interrupt mask. A read returns the current mask for the UARTDSRINTR interrupt. On a write of 1, the mask of the UARTDSRINTR interrupt is set. A write of 0 clears the mask.
    +                DSRMIM: u1,
    +                ///  Receive interrupt mask. A read returns the current mask for the UARTRXINTR interrupt. On a write of 1, the mask of the UARTRXINTR interrupt is set. A write of 0 clears the mask.
    +                RXIM: u1,
    +                ///  Transmit interrupt mask. A read returns the current mask for the UARTTXINTR interrupt. On a write of 1, the mask of the UARTTXINTR interrupt is set. A write of 0 clears the mask.
    +                TXIM: u1,
    +                ///  Receive timeout interrupt mask. A read returns the current mask for the UARTRTINTR interrupt. On a write of 1, the mask of the UARTRTINTR interrupt is set. A write of 0 clears the mask.
    +                RTIM: u1,
    +                ///  Framing error interrupt mask. A read returns the current mask for the UARTFEINTR interrupt. On a write of 1, the mask of the UARTFEINTR interrupt is set. A write of 0 clears the mask.
    +                FEIM: u1,
    +                ///  Parity error interrupt mask. A read returns the current mask for the UARTPEINTR interrupt. On a write of 1, the mask of the UARTPEINTR interrupt is set. A write of 0 clears the mask.
    +                PEIM: u1,
    +                ///  Break error interrupt mask. A read returns the current mask for the UARTBEINTR interrupt. On a write of 1, the mask of the UARTBEINTR interrupt is set. A write of 0 clears the mask.
    +                BEIM: u1,
    +                ///  Overrun error interrupt mask. A read returns the current mask for the UARTOEINTR interrupt. On a write of 1, the mask of the UARTOEINTR interrupt is set. A write of 0 clears the mask.
    +                OEIM: u1,
    +                padding: u21,
    +            }),
    +            ///  Raw Interrupt Status Register, UARTRIS
    +            UARTRIS: mmio.Mmio(packed struct(u32) {
    +                ///  nUARTRI modem interrupt status. Returns the raw interrupt state of the UARTRIINTR interrupt.
    +                RIRMIS: u1,
    +                ///  nUARTCTS modem interrupt status. Returns the raw interrupt state of the UARTCTSINTR interrupt.
    +                CTSRMIS: u1,
    +                ///  nUARTDCD modem interrupt status. Returns the raw interrupt state of the UARTDCDINTR interrupt.
    +                DCDRMIS: u1,
    +                ///  nUARTDSR modem interrupt status. Returns the raw interrupt state of the UARTDSRINTR interrupt.
    +                DSRRMIS: u1,
    +                ///  Receive interrupt status. Returns the raw interrupt state of the UARTRXINTR interrupt.
    +                RXRIS: u1,
    +                ///  Transmit interrupt status. Returns the raw interrupt state of the UARTTXINTR interrupt.
    +                TXRIS: u1,
    +                ///  Receive timeout interrupt status. Returns the raw interrupt state of the UARTRTINTR interrupt. a
    +                RTRIS: u1,
    +                ///  Framing error interrupt status. Returns the raw interrupt state of the UARTFEINTR interrupt.
    +                FERIS: u1,
    +                ///  Parity error interrupt status. Returns the raw interrupt state of the UARTPEINTR interrupt.
    +                PERIS: u1,
    +                ///  Break error interrupt status. Returns the raw interrupt state of the UARTBEINTR interrupt.
    +                BERIS: u1,
    +                ///  Overrun error interrupt status. Returns the raw interrupt state of the UARTOEINTR interrupt.
    +                OERIS: u1,
    +                padding: u21,
    +            }),
    +            ///  Masked Interrupt Status Register, UARTMIS
    +            UARTMIS: mmio.Mmio(packed struct(u32) {
    +                ///  nUARTRI modem masked interrupt status. Returns the masked interrupt state of the UARTRIINTR interrupt.
    +                RIMMIS: u1,
    +                ///  nUARTCTS modem masked interrupt status. Returns the masked interrupt state of the UARTCTSINTR interrupt.
    +                CTSMMIS: u1,
    +                ///  nUARTDCD modem masked interrupt status. Returns the masked interrupt state of the UARTDCDINTR interrupt.
    +                DCDMMIS: u1,
    +                ///  nUARTDSR modem masked interrupt status. Returns the masked interrupt state of the UARTDSRINTR interrupt.
    +                DSRMMIS: u1,
    +                ///  Receive masked interrupt status. Returns the masked interrupt state of the UARTRXINTR interrupt.
    +                RXMIS: u1,
    +                ///  Transmit masked interrupt status. Returns the masked interrupt state of the UARTTXINTR interrupt.
    +                TXMIS: u1,
    +                ///  Receive timeout masked interrupt status. Returns the masked interrupt state of the UARTRTINTR interrupt.
    +                RTMIS: u1,
    +                ///  Framing error masked interrupt status. Returns the masked interrupt state of the UARTFEINTR interrupt.
    +                FEMIS: u1,
    +                ///  Parity error masked interrupt status. Returns the masked interrupt state of the UARTPEINTR interrupt.
    +                PEMIS: u1,
    +                ///  Break error masked interrupt status. Returns the masked interrupt state of the UARTBEINTR interrupt.
    +                BEMIS: u1,
    +                ///  Overrun error masked interrupt status. Returns the masked interrupt state of the UARTOEINTR interrupt.
    +                OEMIS: u1,
    +                padding: u21,
    +            }),
    +            ///  Interrupt Clear Register, UARTICR
    +            UARTICR: mmio.Mmio(packed struct(u32) {
    +                ///  nUARTRI modem interrupt clear. Clears the UARTRIINTR interrupt.
    +                RIMIC: u1,
    +                ///  nUARTCTS modem interrupt clear. Clears the UARTCTSINTR interrupt.
    +                CTSMIC: u1,
    +                ///  nUARTDCD modem interrupt clear. Clears the UARTDCDINTR interrupt.
    +                DCDMIC: u1,
    +                ///  nUARTDSR modem interrupt clear. Clears the UARTDSRINTR interrupt.
    +                DSRMIC: u1,
    +                ///  Receive interrupt clear. Clears the UARTRXINTR interrupt.
    +                RXIC: u1,
    +                ///  Transmit interrupt clear. Clears the UARTTXINTR interrupt.
    +                TXIC: u1,
    +                ///  Receive timeout interrupt clear. Clears the UARTRTINTR interrupt.
    +                RTIC: u1,
    +                ///  Framing error interrupt clear. Clears the UARTFEINTR interrupt.
    +                FEIC: u1,
    +                ///  Parity error interrupt clear. Clears the UARTPEINTR interrupt.
    +                PEIC: u1,
    +                ///  Break error interrupt clear. Clears the UARTBEINTR interrupt.
    +                BEIC: u1,
    +                ///  Overrun error interrupt clear. Clears the UARTOEINTR interrupt.
    +                OEIC: u1,
    +                padding: u21,
    +            }),
    +            ///  DMA Control Register, UARTDMACR
    +            UARTDMACR: mmio.Mmio(packed struct(u32) {
    +                ///  Receive DMA enable. If this bit is set to 1, DMA for the receive FIFO is enabled.
    +                RXDMAE: u1,
    +                ///  Transmit DMA enable. If this bit is set to 1, DMA for the transmit FIFO is enabled.
    +                TXDMAE: u1,
    +                ///  DMA on error. If this bit is set to 1, the DMA receive request outputs, UARTRXDMASREQ or UARTRXDMABREQ, are disabled when the UART error interrupt is asserted.
    +                DMAONERR: u1,
    +                padding: u29,
    +            }),
    +            reserved4064: [3988]u8,
    +            ///  UARTPeriphID0 Register
    +            UARTPERIPHID0: mmio.Mmio(packed struct(u32) {
    +                ///  These bits read back as 0x11
    +                PARTNUMBER0: u8,
    +                padding: u24,
    +            }),
    +            ///  UARTPeriphID1 Register
    +            UARTPERIPHID1: mmio.Mmio(packed struct(u32) {
    +                ///  These bits read back as 0x0
    +                PARTNUMBER1: u4,
    +                ///  These bits read back as 0x1
    +                DESIGNER0: u4,
    +                padding: u24,
    +            }),
    +            ///  UARTPeriphID2 Register
    +            UARTPERIPHID2: mmio.Mmio(packed struct(u32) {
    +                ///  These bits read back as 0x4
    +                DESIGNER1: u4,
    +                ///  This field depends on the revision of the UART: r1p0 0x0 r1p1 0x1 r1p3 0x2 r1p4 0x2 r1p5 0x3
    +                REVISION: u4,
    +                padding: u24,
    +            }),
    +            ///  UARTPeriphID3 Register
    +            UARTPERIPHID3: mmio.Mmio(packed struct(u32) {
    +                ///  These bits read back as 0x00
    +                CONFIGURATION: u8,
    +                padding: u24,
    +            }),
    +            ///  UARTPCellID0 Register
    +            UARTPCELLID0: mmio.Mmio(packed struct(u32) {
    +                ///  These bits read back as 0x0D
    +                UARTPCELLID0: u8,
    +                padding: u24,
    +            }),
    +            ///  UARTPCellID1 Register
    +            UARTPCELLID1: mmio.Mmio(packed struct(u32) {
    +                ///  These bits read back as 0xF0
    +                UARTPCELLID1: u8,
    +                padding: u24,
    +            }),
    +            ///  UARTPCellID2 Register
    +            UARTPCELLID2: mmio.Mmio(packed struct(u32) {
    +                ///  These bits read back as 0x05
    +                UARTPCELLID2: u8,
    +                padding: u24,
    +            }),
    +            ///  UARTPCellID3 Register
    +            UARTPCELLID3: mmio.Mmio(packed struct(u32) {
    +                ///  These bits read back as 0xB1
    +                UARTPCELLID3: u8,
    +                padding: u24,
    +            }),
    +        };
    +
    +        ///  Single-cycle IO block
    +        ///  Provides core-local and inter-core hardware for the two processors, with single-cycle access.
    +        pub const SIO = extern struct {
    +            ///  Processor core identifier
    +            ///  Value is 0 when read from processor core 0, and 1 when read from processor core 1.
    +            CPUID: u32,
    +            ///  Input value for GPIO pins
    +            GPIO_IN: mmio.Mmio(packed struct(u32) {
    +                ///  Input value for GPIO0...29
    +                GPIO_IN: u30,
    +                padding: u2,
    +            }),
    +            ///  Input value for QSPI pins
    +            GPIO_HI_IN: mmio.Mmio(packed struct(u32) {
    +                ///  Input value on QSPI IO in order 0..5: SCLK, SSn, SD0, SD1, SD2, SD3
    +                GPIO_HI_IN: u6,
    +                padding: u26,
    +            }),
    +            reserved16: [4]u8,
    +            ///  GPIO output value
    +            GPIO_OUT: mmio.Mmio(packed struct(u32) {
    +                ///  Set output level (1/0 -> high/low) for GPIO0...29.
    +                ///  Reading back gives the last value written, NOT the input value from the pins.
    +                ///  If core 0 and core 1 both write to GPIO_OUT simultaneously (or to a SET/CLR/XOR alias),
    +                ///  the result is as though the write from core 0 took place first,
    +                ///  and the write from core 1 was then applied to that intermediate result.
    +                GPIO_OUT: u30,
    +                padding: u2,
    +            }),
    +            ///  GPIO output value set
    +            GPIO_OUT_SET: mmio.Mmio(packed struct(u32) {
    +                ///  Perform an atomic bit-set on GPIO_OUT, i.e. `GPIO_OUT |= wdata`
    +                GPIO_OUT_SET: u30,
    +                padding: u2,
    +            }),
    +            ///  GPIO output value clear
    +            GPIO_OUT_CLR: mmio.Mmio(packed struct(u32) {
    +                ///  Perform an atomic bit-clear on GPIO_OUT, i.e. `GPIO_OUT &= ~wdata`
    +                GPIO_OUT_CLR: u30,
    +                padding: u2,
    +            }),
    +            ///  GPIO output value XOR
    +            GPIO_OUT_XOR: mmio.Mmio(packed struct(u32) {
    +                ///  Perform an atomic bitwise XOR on GPIO_OUT, i.e. `GPIO_OUT ^= wdata`
    +                GPIO_OUT_XOR: u30,
    +                padding: u2,
    +            }),
    +            ///  GPIO output enable
    +            GPIO_OE: mmio.Mmio(packed struct(u32) {
    +                ///  Set output enable (1/0 -> output/input) for GPIO0...29.
    +                ///  Reading back gives the last value written.
    +                ///  If core 0 and core 1 both write to GPIO_OE simultaneously (or to a SET/CLR/XOR alias),
    +                ///  the result is as though the write from core 0 took place first,
    +                ///  and the write from core 1 was then applied to that intermediate result.
    +                GPIO_OE: u30,
    +                padding: u2,
    +            }),
    +            ///  GPIO output enable set
    +            GPIO_OE_SET: mmio.Mmio(packed struct(u32) {
    +                ///  Perform an atomic bit-set on GPIO_OE, i.e. `GPIO_OE |= wdata`
    +                GPIO_OE_SET: u30,
    +                padding: u2,
    +            }),
    +            ///  GPIO output enable clear
    +            GPIO_OE_CLR: mmio.Mmio(packed struct(u32) {
    +                ///  Perform an atomic bit-clear on GPIO_OE, i.e. `GPIO_OE &= ~wdata`
    +                GPIO_OE_CLR: u30,
    +                padding: u2,
    +            }),
    +            ///  GPIO output enable XOR
    +            GPIO_OE_XOR: mmio.Mmio(packed struct(u32) {
    +                ///  Perform an atomic bitwise XOR on GPIO_OE, i.e. `GPIO_OE ^= wdata`
    +                GPIO_OE_XOR: u30,
    +                padding: u2,
    +            }),
    +            ///  QSPI output value
    +            GPIO_HI_OUT: mmio.Mmio(packed struct(u32) {
    +                ///  Set output level (1/0 -> high/low) for QSPI IO0...5.
    +                ///  Reading back gives the last value written, NOT the input value from the pins.
    +                ///  If core 0 and core 1 both write to GPIO_HI_OUT simultaneously (or to a SET/CLR/XOR alias),
    +                ///  the result is as though the write from core 0 took place first,
    +                ///  and the write from core 1 was then applied to that intermediate result.
    +                GPIO_HI_OUT: u6,
    +                padding: u26,
    +            }),
    +            ///  QSPI output value set
    +            GPIO_HI_OUT_SET: mmio.Mmio(packed struct(u32) {
    +                ///  Perform an atomic bit-set on GPIO_HI_OUT, i.e. `GPIO_HI_OUT |= wdata`
    +                GPIO_HI_OUT_SET: u6,
    +                padding: u26,
    +            }),
    +            ///  QSPI output value clear
    +            GPIO_HI_OUT_CLR: mmio.Mmio(packed struct(u32) {
    +                ///  Perform an atomic bit-clear on GPIO_HI_OUT, i.e. `GPIO_HI_OUT &= ~wdata`
    +                GPIO_HI_OUT_CLR: u6,
    +                padding: u26,
    +            }),
    +            ///  QSPI output value XOR
    +            GPIO_HI_OUT_XOR: mmio.Mmio(packed struct(u32) {
    +                ///  Perform an atomic bitwise XOR on GPIO_HI_OUT, i.e. `GPIO_HI_OUT ^= wdata`
    +                GPIO_HI_OUT_XOR: u6,
    +                padding: u26,
    +            }),
    +            ///  QSPI output enable
    +            GPIO_HI_OE: mmio.Mmio(packed struct(u32) {
    +                ///  Set output enable (1/0 -> output/input) for QSPI IO0...5.
    +                ///  Reading back gives the last value written.
    +                ///  If core 0 and core 1 both write to GPIO_HI_OE simultaneously (or to a SET/CLR/XOR alias),
    +                ///  the result is as though the write from core 0 took place first,
    +                ///  and the write from core 1 was then applied to that intermediate result.
    +                GPIO_HI_OE: u6,
    +                padding: u26,
    +            }),
    +            ///  QSPI output enable set
    +            GPIO_HI_OE_SET: mmio.Mmio(packed struct(u32) {
    +                ///  Perform an atomic bit-set on GPIO_HI_OE, i.e. `GPIO_HI_OE |= wdata`
    +                GPIO_HI_OE_SET: u6,
    +                padding: u26,
    +            }),
    +            ///  QSPI output enable clear
    +            GPIO_HI_OE_CLR: mmio.Mmio(packed struct(u32) {
    +                ///  Perform an atomic bit-clear on GPIO_HI_OE, i.e. `GPIO_HI_OE &= ~wdata`
    +                GPIO_HI_OE_CLR: u6,
    +                padding: u26,
    +            }),
    +            ///  QSPI output enable XOR
    +            GPIO_HI_OE_XOR: mmio.Mmio(packed struct(u32) {
    +                ///  Perform an atomic bitwise XOR on GPIO_HI_OE, i.e. `GPIO_HI_OE ^= wdata`
    +                GPIO_HI_OE_XOR: u6,
    +                padding: u26,
    +            }),
    +            ///  Status register for inter-core FIFOs (mailboxes).
    +            ///  There is one FIFO in the core 0 -> core 1 direction, and one core 1 -> core 0. Both are 32 bits wide and 8 words deep.
    +            ///  Core 0 can see the read side of the 1->0 FIFO (RX), and the write side of 0->1 FIFO (TX).
    +            ///  Core 1 can see the read side of the 0->1 FIFO (RX), and the write side of 1->0 FIFO (TX).
    +            ///  The SIO IRQ for each core is the logical OR of the VLD, WOF and ROE fields of its FIFO_ST register.
    +            FIFO_ST: mmio.Mmio(packed struct(u32) {
    +                ///  Value is 1 if this core's RX FIFO is not empty (i.e. if FIFO_RD is valid)
    +                VLD: u1,
    +                ///  Value is 1 if this core's TX FIFO is not full (i.e. if FIFO_WR is ready for more data)
    +                RDY: u1,
    +                ///  Sticky flag indicating the TX FIFO was written when full. This write was ignored by the FIFO.
    +                WOF: u1,
    +                ///  Sticky flag indicating the RX FIFO was read when empty. This read was ignored by the FIFO.
    +                ROE: u1,
    +                padding: u28,
    +            }),
    +            ///  Write access to this core's TX FIFO
    +            FIFO_WR: u32,
    +            ///  Read access to this core's RX FIFO
    +            FIFO_RD: u32,
    +            ///  Spinlock state
    +            ///  A bitmap containing the state of all 32 spinlocks (1=locked).
    +            ///  Mainly intended for debugging.
    +            SPINLOCK_ST: u32,
    +            ///  Divider unsigned dividend
    +            ///  Write to the DIVIDEND operand of the divider, i.e. the p in `p / q`.
    +            ///  Any operand write starts a new calculation. The results appear in QUOTIENT, REMAINDER.
    +            ///  UDIVIDEND/SDIVIDEND are aliases of the same internal register. The U alias starts an
    +            ///  unsigned calculation, and the S alias starts a signed calculation.
    +            DIV_UDIVIDEND: u32,
    +            ///  Divider unsigned divisor
    +            ///  Write to the DIVISOR operand of the divider, i.e. the q in `p / q`.
    +            ///  Any operand write starts a new calculation. The results appear in QUOTIENT, REMAINDER.
    +            ///  UDIVISOR/SDIVISOR are aliases of the same internal register. The U alias starts an
    +            ///  unsigned calculation, and the S alias starts a signed calculation.
    +            DIV_UDIVISOR: u32,
    +            ///  Divider signed dividend
    +            ///  The same as UDIVIDEND, but starts a signed calculation, rather than unsigned.
    +            DIV_SDIVIDEND: u32,
    +            ///  Divider signed divisor
    +            ///  The same as UDIVISOR, but starts a signed calculation, rather than unsigned.
    +            DIV_SDIVISOR: u32,
    +            ///  Divider result quotient
    +            ///  The result of `DIVIDEND / DIVISOR` (division). Contents undefined while CSR_READY is low.
    +            ///  For signed calculations, QUOTIENT is negative when the signs of DIVIDEND and DIVISOR differ.
    +            ///  This register can be written to directly, for context save/restore purposes. This halts any
    +            ///  in-progress calculation and sets the CSR_READY and CSR_DIRTY flags.
    +            ///  Reading from QUOTIENT clears the CSR_DIRTY flag, so should read results in the order
    +            ///  REMAINDER, QUOTIENT if CSR_DIRTY is used.
    +            DIV_QUOTIENT: u32,
    +            ///  Divider result remainder
    +            ///  The result of `DIVIDEND % DIVISOR` (modulo). Contents undefined while CSR_READY is low.
    +            ///  For signed calculations, REMAINDER is negative only when DIVIDEND is negative.
    +            ///  This register can be written to directly, for context save/restore purposes. This halts any
    +            ///  in-progress calculation and sets the CSR_READY and CSR_DIRTY flags.
    +            DIV_REMAINDER: u32,
    +            ///  Control and status register for divider.
    +            DIV_CSR: mmio.Mmio(packed struct(u32) {
    +                ///  Reads as 0 when a calculation is in progress, 1 otherwise.
    +                ///  Writing an operand (xDIVIDEND, xDIVISOR) will immediately start a new calculation, no
    +                ///  matter if one is already in progress.
    +                ///  Writing to a result register will immediately terminate any in-progress calculation
    +                ///  and set the READY and DIRTY flags.
    +                READY: u1,
    +                ///  Changes to 1 when any register is written, and back to 0 when QUOTIENT is read.
    +                ///  Software can use this flag to make save/restore more efficient (skip if not DIRTY).
    +                ///  If the flag is used in this way, it's recommended to either read QUOTIENT only,
    +                ///  or REMAINDER and then QUOTIENT, to prevent data loss on context switch.
    +                DIRTY: u1,
    +                padding: u30,
    +            }),
    +            reserved128: [4]u8,
    +            ///  Read/write access to accumulator 0
    +            INTERP0_ACCUM0: u32,
    +            ///  Read/write access to accumulator 1
    +            INTERP0_ACCUM1: u32,
    +            ///  Read/write access to BASE0 register.
    +            INTERP0_BASE0: u32,
    +            ///  Read/write access to BASE1 register.
    +            INTERP0_BASE1: u32,
    +            ///  Read/write access to BASE2 register.
    +            INTERP0_BASE2: u32,
    +            ///  Read LANE0 result, and simultaneously write lane results to both accumulators (POP).
    +            INTERP0_POP_LANE0: u32,
    +            ///  Read LANE1 result, and simultaneously write lane results to both accumulators (POP).
    +            INTERP0_POP_LANE1: u32,
    +            ///  Read FULL result, and simultaneously write lane results to both accumulators (POP).
    +            INTERP0_POP_FULL: u32,
    +            ///  Read LANE0 result, without altering any internal state (PEEK).
    +            INTERP0_PEEK_LANE0: u32,
    +            ///  Read LANE1 result, without altering any internal state (PEEK).
    +            INTERP0_PEEK_LANE1: u32,
    +            ///  Read FULL result, without altering any internal state (PEEK).
    +            INTERP0_PEEK_FULL: u32,
    +            ///  Control register for lane 0
    +            INTERP0_CTRL_LANE0: mmio.Mmio(packed struct(u32) {
    +                ///  Logical right-shift applied to accumulator before masking
    +                SHIFT: u5,
    +                ///  The least-significant bit allowed to pass by the mask (inclusive)
    +                MASK_LSB: u5,
    +                ///  The most-significant bit allowed to pass by the mask (inclusive)
    +                ///  Setting MSB < LSB may cause chip to turn inside-out
    +                MASK_MSB: u5,
    +                ///  If SIGNED is set, the shifted and masked accumulator value is sign-extended to 32 bits
    +                ///  before adding to BASE0, and LANE0 PEEK/POP appear extended to 32 bits when read by processor.
    +                SIGNED: u1,
    +                ///  If 1, feed the opposite lane's accumulator into this lane's shift + mask hardware.
    +                ///  Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is before the shift+mask bypass)
    +                CROSS_INPUT: u1,
    +                ///  If 1, feed the opposite lane's result into this lane's accumulator on POP.
    +                CROSS_RESULT: u1,
    +                ///  If 1, mask + shift is bypassed for LANE0 result. This does not affect FULL result.
    +                ADD_RAW: u1,
    +                ///  ORed into bits 29:28 of the lane result presented to the processor on the bus.
    +                ///  No effect on the internal 32-bit datapath. Handy for using a lane to generate sequence
    +                ///  of pointers into flash or SRAM.
    +                FORCE_MSB: u2,
    +                ///  Only present on INTERP0 on each core. If BLEND mode is enabled:
    +                ///  - LANE1 result is a linear interpolation between BASE0 and BASE1, controlled
    +                ///  by the 8 LSBs of lane 1 shift and mask value (a fractional number between
    +                ///  0 and 255/256ths)
    +                ///  - LANE0 result does not have BASE0 added (yields only the 8 LSBs of lane 1 shift+mask value)
    +                ///  - FULL result does not have lane 1 shift+mask value added (BASE2 + lane 0 shift+mask)
    +                ///  LANE1 SIGNED flag controls whether the interpolation is signed or unsigned.
    +                BLEND: u1,
    +                reserved23: u1,
    +                ///  Indicates if any masked-off MSBs in ACCUM0 are set.
    +                OVERF0: u1,
    +                ///  Indicates if any masked-off MSBs in ACCUM1 are set.
    +                OVERF1: u1,
    +                ///  Set if either OVERF0 or OVERF1 is set.
    +                OVERF: u1,
    +                padding: u6,
    +            }),
    +            ///  Control register for lane 1
    +            INTERP0_CTRL_LANE1: mmio.Mmio(packed struct(u32) {
    +                ///  Logical right-shift applied to accumulator before masking
    +                SHIFT: u5,
    +                ///  The least-significant bit allowed to pass by the mask (inclusive)
    +                MASK_LSB: u5,
    +                ///  The most-significant bit allowed to pass by the mask (inclusive)
    +                ///  Setting MSB < LSB may cause chip to turn inside-out
    +                MASK_MSB: u5,
    +                ///  If SIGNED is set, the shifted and masked accumulator value is sign-extended to 32 bits
    +                ///  before adding to BASE1, and LANE1 PEEK/POP appear extended to 32 bits when read by processor.
    +                SIGNED: u1,
    +                ///  If 1, feed the opposite lane's accumulator into this lane's shift + mask hardware.
    +                ///  Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is before the shift+mask bypass)
    +                CROSS_INPUT: u1,
    +                ///  If 1, feed the opposite lane's result into this lane's accumulator on POP.
    +                CROSS_RESULT: u1,
    +                ///  If 1, mask + shift is bypassed for LANE1 result. This does not affect FULL result.
    +                ADD_RAW: u1,
    +                ///  ORed into bits 29:28 of the lane result presented to the processor on the bus.
    +                ///  No effect on the internal 32-bit datapath. Handy for using a lane to generate sequence
    +                ///  of pointers into flash or SRAM.
    +                FORCE_MSB: u2,
    +                padding: u11,
    +            }),
    +            ///  Values written here are atomically added to ACCUM0
    +            ///  Reading yields lane 0's raw shift and mask value (BASE0 not added).
    +            INTERP0_ACCUM0_ADD: mmio.Mmio(packed struct(u32) {
    +                INTERP0_ACCUM0_ADD: u24,
    +                padding: u8,
    +            }),
    +            ///  Values written here are atomically added to ACCUM1
    +            ///  Reading yields lane 1's raw shift and mask value (BASE1 not added).
    +            INTERP0_ACCUM1_ADD: mmio.Mmio(packed struct(u32) {
    +                INTERP0_ACCUM1_ADD: u24,
    +                padding: u8,
    +            }),
    +            ///  On write, the lower 16 bits go to BASE0, upper bits to BASE1 simultaneously.
    +            ///  Each half is sign-extended to 32 bits if that lane's SIGNED flag is set.
    +            INTERP0_BASE_1AND0: u32,
    +            ///  Read/write access to accumulator 0
    +            INTERP1_ACCUM0: u32,
    +            ///  Read/write access to accumulator 1
    +            INTERP1_ACCUM1: u32,
    +            ///  Read/write access to BASE0 register.
    +            INTERP1_BASE0: u32,
    +            ///  Read/write access to BASE1 register.
    +            INTERP1_BASE1: u32,
    +            ///  Read/write access to BASE2 register.
    +            INTERP1_BASE2: u32,
    +            ///  Read LANE0 result, and simultaneously write lane results to both accumulators (POP).
    +            INTERP1_POP_LANE0: u32,
    +            ///  Read LANE1 result, and simultaneously write lane results to both accumulators (POP).
    +            INTERP1_POP_LANE1: u32,
    +            ///  Read FULL result, and simultaneously write lane results to both accumulators (POP).
    +            INTERP1_POP_FULL: u32,
    +            ///  Read LANE0 result, without altering any internal state (PEEK).
    +            INTERP1_PEEK_LANE0: u32,
    +            ///  Read LANE1 result, without altering any internal state (PEEK).
    +            INTERP1_PEEK_LANE1: u32,
    +            ///  Read FULL result, without altering any internal state (PEEK).
    +            INTERP1_PEEK_FULL: u32,
    +            ///  Control register for lane 0
    +            INTERP1_CTRL_LANE0: mmio.Mmio(packed struct(u32) {
    +                ///  Logical right-shift applied to accumulator before masking
    +                SHIFT: u5,
    +                ///  The least-significant bit allowed to pass by the mask (inclusive)
    +                MASK_LSB: u5,
    +                ///  The most-significant bit allowed to pass by the mask (inclusive)
    +                ///  Setting MSB < LSB may cause chip to turn inside-out
    +                MASK_MSB: u5,
    +                ///  If SIGNED is set, the shifted and masked accumulator value is sign-extended to 32 bits
    +                ///  before adding to BASE0, and LANE0 PEEK/POP appear extended to 32 bits when read by processor.
    +                SIGNED: u1,
    +                ///  If 1, feed the opposite lane's accumulator into this lane's shift + mask hardware.
    +                ///  Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is before the shift+mask bypass)
    +                CROSS_INPUT: u1,
    +                ///  If 1, feed the opposite lane's result into this lane's accumulator on POP.
    +                CROSS_RESULT: u1,
    +                ///  If 1, mask + shift is bypassed for LANE0 result. This does not affect FULL result.
    +                ADD_RAW: u1,
    +                ///  ORed into bits 29:28 of the lane result presented to the processor on the bus.
    +                ///  No effect on the internal 32-bit datapath. Handy for using a lane to generate sequence
    +                ///  of pointers into flash or SRAM.
    +                FORCE_MSB: u2,
    +                reserved22: u1,
    +                ///  Only present on INTERP1 on each core. If CLAMP mode is enabled:
    +                ///  - LANE0 result is shifted and masked ACCUM0, clamped by a lower bound of
    +                ///  BASE0 and an upper bound of BASE1.
    +                ///  - Signedness of these comparisons is determined by LANE0_CTRL_SIGNED
    +                CLAMP: u1,
    +                ///  Indicates if any masked-off MSBs in ACCUM0 are set.
    +                OVERF0: u1,
    +                ///  Indicates if any masked-off MSBs in ACCUM1 are set.
    +                OVERF1: u1,
    +                ///  Set if either OVERF0 or OVERF1 is set.
    +                OVERF: u1,
    +                padding: u6,
    +            }),
    +            ///  Control register for lane 1
    +            INTERP1_CTRL_LANE1: mmio.Mmio(packed struct(u32) {
    +                ///  Logical right-shift applied to accumulator before masking
    +                SHIFT: u5,
    +                ///  The least-significant bit allowed to pass by the mask (inclusive)
    +                MASK_LSB: u5,
    +                ///  The most-significant bit allowed to pass by the mask (inclusive)
    +                ///  Setting MSB < LSB may cause chip to turn inside-out
    +                MASK_MSB: u5,
    +                ///  If SIGNED is set, the shifted and masked accumulator value is sign-extended to 32 bits
    +                ///  before adding to BASE1, and LANE1 PEEK/POP appear extended to 32 bits when read by processor.
    +                SIGNED: u1,
    +                ///  If 1, feed the opposite lane's accumulator into this lane's shift + mask hardware.
    +                ///  Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is before the shift+mask bypass)
    +                CROSS_INPUT: u1,
    +                ///  If 1, feed the opposite lane's result into this lane's accumulator on POP.
    +                CROSS_RESULT: u1,
    +                ///  If 1, mask + shift is bypassed for LANE1 result. This does not affect FULL result.
    +                ADD_RAW: u1,
    +                ///  ORed into bits 29:28 of the lane result presented to the processor on the bus.
    +                ///  No effect on the internal 32-bit datapath. Handy for using a lane to generate sequence
    +                ///  of pointers into flash or SRAM.
    +                FORCE_MSB: u2,
    +                padding: u11,
    +            }),
    +            ///  Values written here are atomically added to ACCUM0
    +            ///  Reading yields lane 0's raw shift and mask value (BASE0 not added).
    +            INTERP1_ACCUM0_ADD: mmio.Mmio(packed struct(u32) {
    +                INTERP1_ACCUM0_ADD: u24,
    +                padding: u8,
    +            }),
    +            ///  Values written here are atomically added to ACCUM1
    +            ///  Reading yields lane 1's raw shift and mask value (BASE1 not added).
    +            INTERP1_ACCUM1_ADD: mmio.Mmio(packed struct(u32) {
    +                INTERP1_ACCUM1_ADD: u24,
    +                padding: u8,
    +            }),
    +            ///  On write, the lower 16 bits go to BASE0, upper bits to BASE1 simultaneously.
    +            ///  Each half is sign-extended to 32 bits if that lane's SIGNED flag is set.
    +            INTERP1_BASE_1AND0: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK0: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK1: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK2: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK3: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK4: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK5: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK6: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK7: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK8: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK9: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK10: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK11: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK12: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK13: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK14: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK15: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK16: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK17: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK18: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK19: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK20: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK21: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK22: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK23: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK24: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK25: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK26: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK27: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK28: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK29: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK30: u32,
    +            ///  Reading from a spinlock address will:
    +            ///  - Return 0 if lock is already locked
    +            ///  - Otherwise return nonzero, and simultaneously claim the lock
    +            ///  Writing (any value) releases the lock.
    +            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    +            ///  The value returned on success is 0x1 << lock number.
    +            SPINLOCK31: u32,
    +        };
    +
    +        pub const SPI0 = extern struct {
    +            ///  Control register 0, SSPCR0 on page 3-4
    +            SSPCR0: mmio.Mmio(packed struct(u32) {
    +                ///  Data Size Select: 0000 Reserved, undefined operation. 0001 Reserved, undefined operation. 0010 Reserved, undefined operation. 0011 4-bit data. 0100 5-bit data. 0101 6-bit data. 0110 7-bit data. 0111 8-bit data. 1000 9-bit data. 1001 10-bit data. 1010 11-bit data. 1011 12-bit data. 1100 13-bit data. 1101 14-bit data. 1110 15-bit data. 1111 16-bit data.
    +                DSS: u4,
    +                ///  Frame format: 00 Motorola SPI frame format. 01 TI synchronous serial frame format. 10 National Microwire frame format. 11 Reserved, undefined operation.
    +                FRF: u2,
    +                ///  SSPCLKOUT polarity, applicable to Motorola SPI frame format only. See Motorola SPI frame format on page 2-10.
    +                SPO: u1,
    +                ///  SSPCLKOUT phase, applicable to Motorola SPI frame format only. See Motorola SPI frame format on page 2-10.
    +                SPH: u1,
    +                ///  Serial clock rate. The value SCR is used to generate the transmit and receive bit rate of the PrimeCell SSP. The bit rate is: F SSPCLK CPSDVSR x (1+SCR) where CPSDVSR is an even value from 2-254, programmed through the SSPCPSR register and SCR is a value from 0-255.
    +                SCR: u8,
    +                padding: u16,
    +            }),
    +            ///  Control register 1, SSPCR1 on page 3-5
    +            SSPCR1: mmio.Mmio(packed struct(u32) {
    +                ///  Loop back mode: 0 Normal serial port operation enabled. 1 Output of transmit serial shifter is connected to input of receive serial shifter internally.
    +                LBM: u1,
    +                ///  Synchronous serial port enable: 0 SSP operation disabled. 1 SSP operation enabled.
    +                SSE: u1,
    +                ///  Master or slave mode select. This bit can be modified only when the PrimeCell SSP is disabled, SSE=0: 0 Device configured as master, default. 1 Device configured as slave.
    +                MS: u1,
    +                ///  Slave-mode output disable. This bit is relevant only in the slave mode, MS=1. In multiple-slave systems, it is possible for an PrimeCell SSP master to broadcast a message to all slaves in the system while ensuring that only one slave drives data onto its serial output line. In such systems the RXD lines from multiple slaves could be tied together. To operate in such systems, the SOD bit can be set if the PrimeCell SSP slave is not supposed to drive the SSPTXD line: 0 SSP can drive the SSPTXD output in slave mode. 1 SSP must not drive the SSPTXD output in slave mode.
    +                SOD: u1,
    +                padding: u28,
    +            }),
    +            ///  Data register, SSPDR on page 3-6
    +            SSPDR: mmio.Mmio(packed struct(u32) {
    +                ///  Transmit/Receive FIFO: Read Receive FIFO. Write Transmit FIFO. You must right-justify data when the PrimeCell SSP is programmed for a data size that is less than 16 bits. Unused bits at the top are ignored by transmit logic. The receive logic automatically right-justifies.
    +                DATA: u16,
    +                padding: u16,
    +            }),
    +            ///  Status register, SSPSR on page 3-7
    +            SSPSR: mmio.Mmio(packed struct(u32) {
    +                ///  Transmit FIFO empty, RO: 0 Transmit FIFO is not empty. 1 Transmit FIFO is empty.
    +                TFE: u1,
    +                ///  Transmit FIFO not full, RO: 0 Transmit FIFO is full. 1 Transmit FIFO is not full.
    +                TNF: u1,
    +                ///  Receive FIFO not empty, RO: 0 Receive FIFO is empty. 1 Receive FIFO is not empty.
    +                RNE: u1,
    +                ///  Receive FIFO full, RO: 0 Receive FIFO is not full. 1 Receive FIFO is full.
    +                RFF: u1,
    +                ///  PrimeCell SSP busy flag, RO: 0 SSP is idle. 1 SSP is currently transmitting and/or receiving a frame or the transmit FIFO is not empty.
    +                BSY: u1,
    +                padding: u27,
    +            }),
    +            ///  Clock prescale register, SSPCPSR on page 3-8
    +            SSPCPSR: mmio.Mmio(packed struct(u32) {
    +                ///  Clock prescale divisor. Must be an even number from 2-254, depending on the frequency of SSPCLK. The least significant bit always returns zero on reads.
    +                CPSDVSR: u8,
    +                padding: u24,
    +            }),
    +            ///  Interrupt mask set or clear register, SSPIMSC on page 3-9
    +            SSPIMSC: mmio.Mmio(packed struct(u32) {
    +                ///  Receive overrun interrupt mask: 0 Receive FIFO written to while full condition interrupt is masked. 1 Receive FIFO written to while full condition interrupt is not masked.
    +                RORIM: u1,
    +                ///  Receive timeout interrupt mask: 0 Receive FIFO not empty and no read prior to timeout period interrupt is masked. 1 Receive FIFO not empty and no read prior to timeout period interrupt is not masked.
    +                RTIM: u1,
    +                ///  Receive FIFO interrupt mask: 0 Receive FIFO half full or less condition interrupt is masked. 1 Receive FIFO half full or less condition interrupt is not masked.
    +                RXIM: u1,
    +                ///  Transmit FIFO interrupt mask: 0 Transmit FIFO half empty or less condition interrupt is masked. 1 Transmit FIFO half empty or less condition interrupt is not masked.
    +                TXIM: u1,
    +                padding: u28,
    +            }),
    +            ///  Raw interrupt status register, SSPRIS on page 3-10
    +            SSPRIS: mmio.Mmio(packed struct(u32) {
    +                ///  Gives the raw interrupt state, prior to masking, of the SSPRORINTR interrupt
    +                RORRIS: u1,
    +                ///  Gives the raw interrupt state, prior to masking, of the SSPRTINTR interrupt
    +                RTRIS: u1,
    +                ///  Gives the raw interrupt state, prior to masking, of the SSPRXINTR interrupt
    +                RXRIS: u1,
    +                ///  Gives the raw interrupt state, prior to masking, of the SSPTXINTR interrupt
    +                TXRIS: u1,
    +                padding: u28,
    +            }),
    +            ///  Masked interrupt status register, SSPMIS on page 3-11
    +            SSPMIS: mmio.Mmio(packed struct(u32) {
    +                ///  Gives the receive over run masked interrupt status, after masking, of the SSPRORINTR interrupt
    +                RORMIS: u1,
    +                ///  Gives the receive timeout masked interrupt state, after masking, of the SSPRTINTR interrupt
    +                RTMIS: u1,
    +                ///  Gives the receive FIFO masked interrupt state, after masking, of the SSPRXINTR interrupt
    +                RXMIS: u1,
    +                ///  Gives the transmit FIFO masked interrupt state, after masking, of the SSPTXINTR interrupt
    +                TXMIS: u1,
    +                padding: u28,
    +            }),
    +            ///  Interrupt clear register, SSPICR on page 3-11
    +            SSPICR: mmio.Mmio(packed struct(u32) {
    +                ///  Clears the SSPRORINTR interrupt
    +                RORIC: u1,
    +                ///  Clears the SSPRTINTR interrupt
    +                RTIC: u1,
    +                padding: u30,
    +            }),
    +            ///  DMA control register, SSPDMACR on page 3-12
    +            SSPDMACR: mmio.Mmio(packed struct(u32) {
    +                ///  Receive DMA Enable. If this bit is set to 1, DMA for the receive FIFO is enabled.
    +                RXDMAE: u1,
    +                ///  Transmit DMA Enable. If this bit is set to 1, DMA for the transmit FIFO is enabled.
    +                TXDMAE: u1,
    +                padding: u30,
    +            }),
    +            reserved4064: [4024]u8,
    +            ///  Peripheral identification registers, SSPPeriphID0-3 on page 3-13
    +            SSPPERIPHID0: mmio.Mmio(packed struct(u32) {
    +                ///  These bits read back as 0x22
    +                PARTNUMBER0: u8,
    +                padding: u24,
    +            }),
    +            ///  Peripheral identification registers, SSPPeriphID0-3 on page 3-13
    +            SSPPERIPHID1: mmio.Mmio(packed struct(u32) {
    +                ///  These bits read back as 0x0
    +                PARTNUMBER1: u4,
    +                ///  These bits read back as 0x1
    +                DESIGNER0: u4,
    +                padding: u24,
    +            }),
    +            ///  Peripheral identification registers, SSPPeriphID0-3 on page 3-13
    +            SSPPERIPHID2: mmio.Mmio(packed struct(u32) {
    +                ///  These bits read back as 0x4
    +                DESIGNER1: u4,
    +                ///  These bits return the peripheral revision
    +                REVISION: u4,
    +                padding: u24,
    +            }),
    +            ///  Peripheral identification registers, SSPPeriphID0-3 on page 3-13
    +            SSPPERIPHID3: mmio.Mmio(packed struct(u32) {
    +                ///  These bits read back as 0x00
    +                CONFIGURATION: u8,
    +                padding: u24,
    +            }),
    +            ///  PrimeCell identification registers, SSPPCellID0-3 on page 3-16
    +            SSPPCELLID0: mmio.Mmio(packed struct(u32) {
    +                ///  These bits read back as 0x0D
    +                SSPPCELLID0: u8,
    +                padding: u24,
    +            }),
    +            ///  PrimeCell identification registers, SSPPCellID0-3 on page 3-16
    +            SSPPCELLID1: mmio.Mmio(packed struct(u32) {
    +                ///  These bits read back as 0xF0
    +                SSPPCELLID1: u8,
    +                padding: u24,
    +            }),
    +            ///  PrimeCell identification registers, SSPPCellID0-3 on page 3-16
    +            SSPPCELLID2: mmio.Mmio(packed struct(u32) {
    +                ///  These bits read back as 0x05
    +                SSPPCELLID2: u8,
    +                padding: u24,
    +            }),
    +            ///  PrimeCell identification registers, SSPPCellID0-3 on page 3-16
    +            SSPPCELLID3: mmio.Mmio(packed struct(u32) {
    +                ///  These bits read back as 0xB1
    +                SSPPCELLID3: u8,
    +                padding: u24,
    +            }),
    +        };
    +
    +        ///  USB FS/LS controller device registers
    +        pub const USBCTRL_REGS = extern struct {
    +            ///  Device address and endpoint control
    +            ADDR_ENDP: mmio.Mmio(packed struct(u32) {
    +                ///  In device mode, the address that the device should respond to. Set in response to a SET_ADDR setup packet from the host. In host mode set to the address of the device to communicate with.
    +                ADDRESS: u7,
    +                reserved16: u9,
    +                ///  Device endpoint to send data to. Only valid for HOST mode.
    +                ENDPOINT: u4,
    +                padding: u12,
    +            }),
    +            ///  Interrupt endpoint 1. Only valid for HOST mode.
    +            ADDR_ENDP1: mmio.Mmio(packed struct(u32) {
    +                ///  Device address
    +                ADDRESS: u7,
    +                reserved16: u9,
    +                ///  Endpoint number of the interrupt endpoint
    +                ENDPOINT: u4,
    +                reserved25: u5,
    +                ///  Direction of the interrupt endpoint. In=0, Out=1
    +                INTEP_DIR: u1,
    +                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    +                INTEP_PREAMBLE: u1,
    +                padding: u5,
    +            }),
    +            ///  Interrupt endpoint 2. Only valid for HOST mode.
    +            ADDR_ENDP2: mmio.Mmio(packed struct(u32) {
    +                ///  Device address
    +                ADDRESS: u7,
    +                reserved16: u9,
    +                ///  Endpoint number of the interrupt endpoint
    +                ENDPOINT: u4,
    +                reserved25: u5,
    +                ///  Direction of the interrupt endpoint. In=0, Out=1
    +                INTEP_DIR: u1,
    +                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    +                INTEP_PREAMBLE: u1,
    +                padding: u5,
    +            }),
    +            ///  Interrupt endpoint 3. Only valid for HOST mode.
    +            ADDR_ENDP3: mmio.Mmio(packed struct(u32) {
    +                ///  Device address
    +                ADDRESS: u7,
    +                reserved16: u9,
    +                ///  Endpoint number of the interrupt endpoint
    +                ENDPOINT: u4,
    +                reserved25: u5,
    +                ///  Direction of the interrupt endpoint. In=0, Out=1
    +                INTEP_DIR: u1,
    +                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    +                INTEP_PREAMBLE: u1,
    +                padding: u5,
    +            }),
    +            ///  Interrupt endpoint 4. Only valid for HOST mode.
    +            ADDR_ENDP4: mmio.Mmio(packed struct(u32) {
    +                ///  Device address
    +                ADDRESS: u7,
    +                reserved16: u9,
    +                ///  Endpoint number of the interrupt endpoint
    +                ENDPOINT: u4,
    +                reserved25: u5,
    +                ///  Direction of the interrupt endpoint. In=0, Out=1
    +                INTEP_DIR: u1,
    +                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    +                INTEP_PREAMBLE: u1,
    +                padding: u5,
    +            }),
    +            ///  Interrupt endpoint 5. Only valid for HOST mode.
    +            ADDR_ENDP5: mmio.Mmio(packed struct(u32) {
    +                ///  Device address
    +                ADDRESS: u7,
    +                reserved16: u9,
    +                ///  Endpoint number of the interrupt endpoint
    +                ENDPOINT: u4,
    +                reserved25: u5,
    +                ///  Direction of the interrupt endpoint. In=0, Out=1
    +                INTEP_DIR: u1,
    +                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    +                INTEP_PREAMBLE: u1,
    +                padding: u5,
    +            }),
    +            ///  Interrupt endpoint 6. Only valid for HOST mode.
    +            ADDR_ENDP6: mmio.Mmio(packed struct(u32) {
    +                ///  Device address
    +                ADDRESS: u7,
    +                reserved16: u9,
    +                ///  Endpoint number of the interrupt endpoint
    +                ENDPOINT: u4,
    +                reserved25: u5,
    +                ///  Direction of the interrupt endpoint. In=0, Out=1
    +                INTEP_DIR: u1,
    +                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    +                INTEP_PREAMBLE: u1,
    +                padding: u5,
    +            }),
    +            ///  Interrupt endpoint 7. Only valid for HOST mode.
    +            ADDR_ENDP7: mmio.Mmio(packed struct(u32) {
    +                ///  Device address
    +                ADDRESS: u7,
    +                reserved16: u9,
    +                ///  Endpoint number of the interrupt endpoint
    +                ENDPOINT: u4,
    +                reserved25: u5,
    +                ///  Direction of the interrupt endpoint. In=0, Out=1
    +                INTEP_DIR: u1,
    +                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    +                INTEP_PREAMBLE: u1,
    +                padding: u5,
    +            }),
    +            ///  Interrupt endpoint 8. Only valid for HOST mode.
    +            ADDR_ENDP8: mmio.Mmio(packed struct(u32) {
    +                ///  Device address
    +                ADDRESS: u7,
    +                reserved16: u9,
    +                ///  Endpoint number of the interrupt endpoint
    +                ENDPOINT: u4,
    +                reserved25: u5,
    +                ///  Direction of the interrupt endpoint. In=0, Out=1
    +                INTEP_DIR: u1,
    +                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    +                INTEP_PREAMBLE: u1,
    +                padding: u5,
    +            }),
    +            ///  Interrupt endpoint 9. Only valid for HOST mode.
    +            ADDR_ENDP9: mmio.Mmio(packed struct(u32) {
    +                ///  Device address
    +                ADDRESS: u7,
    +                reserved16: u9,
    +                ///  Endpoint number of the interrupt endpoint
    +                ENDPOINT: u4,
    +                reserved25: u5,
    +                ///  Direction of the interrupt endpoint. In=0, Out=1
    +                INTEP_DIR: u1,
    +                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    +                INTEP_PREAMBLE: u1,
    +                padding: u5,
    +            }),
    +            ///  Interrupt endpoint 10. Only valid for HOST mode.
    +            ADDR_ENDP10: mmio.Mmio(packed struct(u32) {
    +                ///  Device address
    +                ADDRESS: u7,
    +                reserved16: u9,
    +                ///  Endpoint number of the interrupt endpoint
    +                ENDPOINT: u4,
    +                reserved25: u5,
    +                ///  Direction of the interrupt endpoint. In=0, Out=1
    +                INTEP_DIR: u1,
    +                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    +                INTEP_PREAMBLE: u1,
    +                padding: u5,
    +            }),
    +            ///  Interrupt endpoint 11. Only valid for HOST mode.
    +            ADDR_ENDP11: mmio.Mmio(packed struct(u32) {
    +                ///  Device address
    +                ADDRESS: u7,
    +                reserved16: u9,
    +                ///  Endpoint number of the interrupt endpoint
    +                ENDPOINT: u4,
    +                reserved25: u5,
    +                ///  Direction of the interrupt endpoint. In=0, Out=1
    +                INTEP_DIR: u1,
    +                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    +                INTEP_PREAMBLE: u1,
    +                padding: u5,
    +            }),
    +            ///  Interrupt endpoint 12. Only valid for HOST mode.
    +            ADDR_ENDP12: mmio.Mmio(packed struct(u32) {
    +                ///  Device address
    +                ADDRESS: u7,
    +                reserved16: u9,
    +                ///  Endpoint number of the interrupt endpoint
    +                ENDPOINT: u4,
    +                reserved25: u5,
    +                ///  Direction of the interrupt endpoint. In=0, Out=1
    +                INTEP_DIR: u1,
    +                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    +                INTEP_PREAMBLE: u1,
    +                padding: u5,
    +            }),
    +            ///  Interrupt endpoint 13. Only valid for HOST mode.
    +            ADDR_ENDP13: mmio.Mmio(packed struct(u32) {
    +                ///  Device address
    +                ADDRESS: u7,
    +                reserved16: u9,
    +                ///  Endpoint number of the interrupt endpoint
    +                ENDPOINT: u4,
    +                reserved25: u5,
    +                ///  Direction of the interrupt endpoint. In=0, Out=1
    +                INTEP_DIR: u1,
    +                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    +                INTEP_PREAMBLE: u1,
    +                padding: u5,
    +            }),
    +            ///  Interrupt endpoint 14. Only valid for HOST mode.
    +            ADDR_ENDP14: mmio.Mmio(packed struct(u32) {
    +                ///  Device address
    +                ADDRESS: u7,
    +                reserved16: u9,
    +                ///  Endpoint number of the interrupt endpoint
    +                ENDPOINT: u4,
    +                reserved25: u5,
    +                ///  Direction of the interrupt endpoint. In=0, Out=1
    +                INTEP_DIR: u1,
    +                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    +                INTEP_PREAMBLE: u1,
    +                padding: u5,
    +            }),
    +            ///  Interrupt endpoint 15. Only valid for HOST mode.
    +            ADDR_ENDP15: mmio.Mmio(packed struct(u32) {
    +                ///  Device address
    +                ADDRESS: u7,
    +                reserved16: u9,
    +                ///  Endpoint number of the interrupt endpoint
    +                ENDPOINT: u4,
    +                reserved25: u5,
    +                ///  Direction of the interrupt endpoint. In=0, Out=1
    +                INTEP_DIR: u1,
    +                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    +                INTEP_PREAMBLE: u1,
    +                padding: u5,
    +            }),
    +            ///  Main control register
    +            MAIN_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  Enable controller
    +                CONTROLLER_EN: u1,
    +                ///  Device mode = 0, Host mode = 1
    +                HOST_NDEVICE: u1,
    +                reserved31: u29,
    +                ///  Reduced timings for simulation
    +                SIM_TIMING: u1,
    +            }),
    +            ///  Set the SOF (Start of Frame) frame number in the host controller. The SOF packet is sent every 1ms and the host will increment the frame number by 1 each time.
    +            SOF_WR: mmio.Mmio(packed struct(u32) {
    +                COUNT: u11,
    +                padding: u21,
    +            }),
    +            ///  Read the last SOF (Start of Frame) frame number seen. In device mode the last SOF received from the host. In host mode the last SOF sent by the host.
    +            SOF_RD: mmio.Mmio(packed struct(u32) {
    +                COUNT: u11,
    +                padding: u21,
    +            }),
    +            ///  SIE control register
    +            SIE_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  Host: Start transaction
    +                START_TRANS: u1,
    +                ///  Host: Send Setup packet
    +                SEND_SETUP: u1,
    +                ///  Host: Send transaction (OUT from host)
    +                SEND_DATA: u1,
    +                ///  Host: Receive transaction (IN to host)
    +                RECEIVE_DATA: u1,
    +                ///  Host: Stop transaction
    +                STOP_TRANS: u1,
    +                reserved6: u1,
    +                ///  Host: Preable enable for LS device on FS hub
    +                PREAMBLE_EN: u1,
    +                reserved8: u1,
    +                ///  Host: Delay packet(s) until after SOF
    +                SOF_SYNC: u1,
    +                ///  Host: Enable SOF generation (for full speed bus)
    +                SOF_EN: u1,
    +                ///  Host: Enable keep alive packet (for low speed bus)
    +                KEEP_ALIVE_EN: u1,
    +                ///  Host: Enable VBUS
    +                VBUS_EN: u1,
    +                ///  Device: Remote wakeup. Device can initiate its own resume after suspend.
    +                RESUME: u1,
    +                ///  Host: Reset bus
    +                RESET_BUS: u1,
    +                reserved15: u1,
    +                ///  Host: Enable pull down resistors
    +                PULLDOWN_EN: u1,
    +                ///  Device: Enable pull up resistor
    +                PULLUP_EN: u1,
    +                ///  Device: Pull-up strength (0=1K2, 1=2k3)
    +                RPU_OPT: u1,
    +                ///  Power down bus transceiver
    +                TRANSCEIVER_PD: u1,
    +                reserved24: u5,
    +                ///  Direct control of DM
    +                DIRECT_DM: u1,
    +                ///  Direct control of DP
    +                DIRECT_DP: u1,
    +                ///  Direct bus drive enable
    +                DIRECT_EN: u1,
    +                ///  Device: Set bit in EP_STATUS_STALL_NAK when EP0 sends a NAK
    +                EP0_INT_NAK: u1,
    +                ///  Device: Set bit in BUFF_STATUS for every 2 buffers completed on EP0
    +                EP0_INT_2BUF: u1,
    +                ///  Device: Set bit in BUFF_STATUS for every buffer completed on EP0
    +                EP0_INT_1BUF: u1,
    +                ///  Device: EP0 single buffered = 0, double buffered = 1
    +                EP0_DOUBLE_BUF: u1,
    +                ///  Device: Set bit in EP_STATUS_STALL_NAK when EP0 sends a STALL
    +                EP0_INT_STALL: u1,
    +            }),
    +            ///  SIE status register
    +            SIE_STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  Device: VBUS Detected
    +                VBUS_DETECTED: u1,
    +                reserved2: u1,
    +                ///  USB bus line state
    +                LINE_STATE: u2,
    +                ///  Bus in suspended state. Valid for device and host. Host and device will go into suspend if neither Keep Alive / SOF frames are enabled.
    +                SUSPENDED: u1,
    +                reserved8: u3,
    +                ///  Host: device speed. Disconnected = 00, LS = 01, FS = 10
    +                SPEED: u2,
    +                ///  VBUS over current detected
    +                VBUS_OVER_CURR: u1,
    +                ///  Host: Device has initiated a remote resume. Device: host has initiated a resume.
    +                RESUME: u1,
    +                reserved16: u4,
    +                ///  Device: connected
    +                CONNECTED: u1,
    +                ///  Device: Setup packet received
    +                SETUP_REC: u1,
    +                ///  Transaction complete.
    +                ///  Raised by device if:
    +                ///  * An IN or OUT packet is sent with the `LAST_BUFF` bit set in the buffer control register
    +                ///  Raised by host if:
    +                ///  * A setup packet is sent when no data in or data out transaction follows * An IN packet is received and the `LAST_BUFF` bit is set in the buffer control register * An IN packet is received with zero length * An OUT packet is sent and the `LAST_BUFF` bit is set
    +                TRANS_COMPLETE: u1,
    +                ///  Device: bus reset received
    +                BUS_RESET: u1,
    +                reserved24: u4,
    +                ///  CRC Error. Raised by the Serial RX engine.
    +                CRC_ERROR: u1,
    +                ///  Bit Stuff Error. Raised by the Serial RX engine.
    +                BIT_STUFF_ERROR: u1,
    +                ///  RX overflow is raised by the Serial RX engine if the incoming data is too fast.
    +                RX_OVERFLOW: u1,
    +                ///  RX timeout is raised by both the host and device if an ACK is not received in the maximum time specified by the USB spec.
    +                RX_TIMEOUT: u1,
    +                ///  Host: NAK received
    +                NAK_REC: u1,
    +                ///  Host: STALL received
    +                STALL_REC: u1,
    +                ///  ACK received. Raised by both host and device.
    +                ACK_REC: u1,
    +                ///  Data Sequence Error.
    +                ///  The device can raise a sequence error in the following conditions:
    +                ///  * A SETUP packet is received followed by a DATA1 packet (data phase should always be DATA0) * An OUT packet is received from the host but doesn't match the data pid in the buffer control register read from DPSRAM
    +                ///  The host can raise a data sequence error in the following conditions:
    +                ///  * An IN packet from the device has the wrong data PID
    +                DATA_SEQ_ERROR: u1,
    +            }),
    +            ///  interrupt endpoint control register
    +            INT_EP_CTRL: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Host: Enable interrupt endpoint 1 -> 15
    +                INT_EP_ACTIVE: u15,
    +                padding: u16,
    +            }),
    +            ///  Buffer status register. A bit set here indicates that a buffer has completed on the endpoint (if the buffer interrupt is enabled). It is possible for 2 buffers to be completed, so clearing the buffer status bit may instantly re set it on the next clock cycle.
    +            BUFF_STATUS: mmio.Mmio(packed struct(u32) {
    +                EP0_IN: u1,
    +                EP0_OUT: u1,
    +                EP1_IN: u1,
    +                EP1_OUT: u1,
    +                EP2_IN: u1,
    +                EP2_OUT: u1,
    +                EP3_IN: u1,
    +                EP3_OUT: u1,
    +                EP4_IN: u1,
    +                EP4_OUT: u1,
    +                EP5_IN: u1,
    +                EP5_OUT: u1,
    +                EP6_IN: u1,
    +                EP6_OUT: u1,
    +                EP7_IN: u1,
    +                EP7_OUT: u1,
    +                EP8_IN: u1,
    +                EP8_OUT: u1,
    +                EP9_IN: u1,
    +                EP9_OUT: u1,
    +                EP10_IN: u1,
    +                EP10_OUT: u1,
    +                EP11_IN: u1,
    +                EP11_OUT: u1,
    +                EP12_IN: u1,
    +                EP12_OUT: u1,
    +                EP13_IN: u1,
    +                EP13_OUT: u1,
    +                EP14_IN: u1,
    +                EP14_OUT: u1,
    +                EP15_IN: u1,
    +                EP15_OUT: u1,
    +            }),
    +            ///  Which of the double buffers should be handled. Only valid if using an interrupt per buffer (i.e. not per 2 buffers). Not valid for host interrupt endpoint polling because they are only single buffered.
    +            BUFF_CPU_SHOULD_HANDLE: mmio.Mmio(packed struct(u32) {
    +                EP0_IN: u1,
    +                EP0_OUT: u1,
    +                EP1_IN: u1,
    +                EP1_OUT: u1,
    +                EP2_IN: u1,
    +                EP2_OUT: u1,
    +                EP3_IN: u1,
    +                EP3_OUT: u1,
    +                EP4_IN: u1,
    +                EP4_OUT: u1,
    +                EP5_IN: u1,
    +                EP5_OUT: u1,
    +                EP6_IN: u1,
    +                EP6_OUT: u1,
    +                EP7_IN: u1,
    +                EP7_OUT: u1,
    +                EP8_IN: u1,
    +                EP8_OUT: u1,
    +                EP9_IN: u1,
    +                EP9_OUT: u1,
    +                EP10_IN: u1,
    +                EP10_OUT: u1,
    +                EP11_IN: u1,
    +                EP11_OUT: u1,
    +                EP12_IN: u1,
    +                EP12_OUT: u1,
    +                EP13_IN: u1,
    +                EP13_OUT: u1,
    +                EP14_IN: u1,
    +                EP14_OUT: u1,
    +                EP15_IN: u1,
    +                EP15_OUT: u1,
    +            }),
    +            ///  Device only: Can be set to ignore the buffer control register for this endpoint in case you would like to revoke a buffer. A NAK will be sent for every access to the endpoint until this bit is cleared. A corresponding bit in `EP_ABORT_DONE` is set when it is safe to modify the buffer control register.
    +            EP_ABORT: mmio.Mmio(packed struct(u32) {
    +                EP0_IN: u1,
    +                EP0_OUT: u1,
    +                EP1_IN: u1,
    +                EP1_OUT: u1,
    +                EP2_IN: u1,
    +                EP2_OUT: u1,
    +                EP3_IN: u1,
    +                EP3_OUT: u1,
    +                EP4_IN: u1,
    +                EP4_OUT: u1,
    +                EP5_IN: u1,
    +                EP5_OUT: u1,
    +                EP6_IN: u1,
    +                EP6_OUT: u1,
    +                EP7_IN: u1,
    +                EP7_OUT: u1,
    +                EP8_IN: u1,
    +                EP8_OUT: u1,
    +                EP9_IN: u1,
    +                EP9_OUT: u1,
    +                EP10_IN: u1,
    +                EP10_OUT: u1,
    +                EP11_IN: u1,
    +                EP11_OUT: u1,
    +                EP12_IN: u1,
    +                EP12_OUT: u1,
    +                EP13_IN: u1,
    +                EP13_OUT: u1,
    +                EP14_IN: u1,
    +                EP14_OUT: u1,
    +                EP15_IN: u1,
    +                EP15_OUT: u1,
    +            }),
    +            ///  Device only: Used in conjunction with `EP_ABORT`. Set once an endpoint is idle so the programmer knows it is safe to modify the buffer control register.
    +            EP_ABORT_DONE: mmio.Mmio(packed struct(u32) {
    +                EP0_IN: u1,
    +                EP0_OUT: u1,
    +                EP1_IN: u1,
    +                EP1_OUT: u1,
    +                EP2_IN: u1,
    +                EP2_OUT: u1,
    +                EP3_IN: u1,
    +                EP3_OUT: u1,
    +                EP4_IN: u1,
    +                EP4_OUT: u1,
    +                EP5_IN: u1,
    +                EP5_OUT: u1,
    +                EP6_IN: u1,
    +                EP6_OUT: u1,
    +                EP7_IN: u1,
    +                EP7_OUT: u1,
    +                EP8_IN: u1,
    +                EP8_OUT: u1,
    +                EP9_IN: u1,
    +                EP9_OUT: u1,
    +                EP10_IN: u1,
    +                EP10_OUT: u1,
    +                EP11_IN: u1,
    +                EP11_OUT: u1,
    +                EP12_IN: u1,
    +                EP12_OUT: u1,
    +                EP13_IN: u1,
    +                EP13_OUT: u1,
    +                EP14_IN: u1,
    +                EP14_OUT: u1,
    +                EP15_IN: u1,
    +                EP15_OUT: u1,
    +            }),
    +            ///  Device: this bit must be set in conjunction with the `STALL` bit in the buffer control register to send a STALL on EP0. The device controller clears these bits when a SETUP packet is received because the USB spec requires that a STALL condition is cleared when a SETUP packet is received.
    +            EP_STALL_ARM: mmio.Mmio(packed struct(u32) {
    +                EP0_IN: u1,
    +                EP0_OUT: u1,
    +                padding: u30,
    +            }),
    +            ///  Used by the host controller. Sets the wait time in microseconds before trying again if the device replies with a NAK.
    +            NAK_POLL: mmio.Mmio(packed struct(u32) {
    +                ///  NAK polling interval for a low speed device
    +                DELAY_LS: u10,
    +                reserved16: u6,
    +                ///  NAK polling interval for a full speed device
    +                DELAY_FS: u10,
    +                padding: u6,
    +            }),
    +            ///  Device: bits are set when the `IRQ_ON_NAK` or `IRQ_ON_STALL` bits are set. For EP0 this comes from `SIE_CTRL`. For all other endpoints it comes from the endpoint control register.
    +            EP_STATUS_STALL_NAK: mmio.Mmio(packed struct(u32) {
    +                EP0_IN: u1,
    +                EP0_OUT: u1,
    +                EP1_IN: u1,
    +                EP1_OUT: u1,
    +                EP2_IN: u1,
    +                EP2_OUT: u1,
    +                EP3_IN: u1,
    +                EP3_OUT: u1,
    +                EP4_IN: u1,
    +                EP4_OUT: u1,
    +                EP5_IN: u1,
    +                EP5_OUT: u1,
    +                EP6_IN: u1,
    +                EP6_OUT: u1,
    +                EP7_IN: u1,
    +                EP7_OUT: u1,
    +                EP8_IN: u1,
    +                EP8_OUT: u1,
    +                EP9_IN: u1,
    +                EP9_OUT: u1,
    +                EP10_IN: u1,
    +                EP10_OUT: u1,
    +                EP11_IN: u1,
    +                EP11_OUT: u1,
    +                EP12_IN: u1,
    +                EP12_OUT: u1,
    +                EP13_IN: u1,
    +                EP13_OUT: u1,
    +                EP14_IN: u1,
    +                EP14_OUT: u1,
    +                EP15_IN: u1,
    +                EP15_OUT: u1,
    +            }),
    +            ///  Where to connect the USB controller. Should be to_phy by default.
    +            USB_MUXING: mmio.Mmio(packed struct(u32) {
    +                TO_PHY: u1,
    +                TO_EXTPHY: u1,
    +                TO_DIGITAL_PAD: u1,
    +                SOFTCON: u1,
    +                padding: u28,
    +            }),
    +            ///  Overrides for the power signals in the event that the VBUS signals are not hooked up to GPIO. Set the value of the override and then the override enable to switch over to the override value.
    +            USB_PWR: mmio.Mmio(packed struct(u32) {
    +                VBUS_EN: u1,
    +                VBUS_EN_OVERRIDE_EN: u1,
    +                VBUS_DETECT: u1,
    +                VBUS_DETECT_OVERRIDE_EN: u1,
    +                OVERCURR_DETECT: u1,
    +                OVERCURR_DETECT_EN: u1,
    +                padding: u26,
    +            }),
    +            ///  This register allows for direct control of the USB phy. Use in conjunction with usbphy_direct_override register to enable each override bit.
    +            USBPHY_DIRECT: mmio.Mmio(packed struct(u32) {
    +                ///  Enable the second DP pull up resistor. 0 - Pull = Rpu2; 1 - Pull = Rpu1 + Rpu2
    +                DP_PULLUP_HISEL: u1,
    +                ///  DP pull up enable
    +                DP_PULLUP_EN: u1,
    +                ///  DP pull down enable
    +                DP_PULLDN_EN: u1,
    +                reserved4: u1,
    +                ///  Enable the second DM pull up resistor. 0 - Pull = Rpu2; 1 - Pull = Rpu1 + Rpu2
    +                DM_PULLUP_HISEL: u1,
    +                ///  DM pull up enable
    +                DM_PULLUP_EN: u1,
    +                ///  DM pull down enable
    +                DM_PULLDN_EN: u1,
    +                reserved8: u1,
    +                ///  Output enable. If TX_DIFFMODE=1, OE for DPP/DPM diff pair. 0 - DPP/DPM in Hi-Z state; 1 - DPP/DPM driving
    +                ///  If TX_DIFFMODE=0, OE for DPP only. 0 - DPP in Hi-Z state; 1 - DPP driving
    +                TX_DP_OE: u1,
    +                ///  Output enable. If TX_DIFFMODE=1, Ignored.
    +                ///  If TX_DIFFMODE=0, OE for DPM only. 0 - DPM in Hi-Z state; 1 - DPM driving
    +                TX_DM_OE: u1,
    +                ///  Output data. If TX_DIFFMODE=1, Drives DPP/DPM diff pair. TX_DP_OE=1 to enable drive. DPP=TX_DP, DPM=~TX_DP
    +                ///  If TX_DIFFMODE=0, Drives DPP only. TX_DP_OE=1 to enable drive. DPP=TX_DP
    +                TX_DP: u1,
    +                ///  Output data. TX_DIFFMODE=1, Ignored
    +                ///  TX_DIFFMODE=0, Drives DPM only. TX_DM_OE=1 to enable drive. DPM=TX_DM
    +                TX_DM: u1,
    +                ///  RX power down override (if override enable is set). 1 = powered down.
    +                RX_PD: u1,
    +                ///  TX power down override (if override enable is set). 1 = powered down.
    +                TX_PD: u1,
    +                ///  TX_FSSLEW=0: Low speed slew rate
    +                ///  TX_FSSLEW=1: Full speed slew rate
    +                TX_FSSLEW: u1,
    +                ///  TX_DIFFMODE=0: Single ended mode
    +                ///  TX_DIFFMODE=1: Differential drive mode (TX_DM, TX_DM_OE ignored)
    +                TX_DIFFMODE: u1,
    +                ///  Differential RX
    +                RX_DD: u1,
    +                ///  DPP pin state
    +                RX_DP: u1,
    +                ///  DPM pin state
    +                RX_DM: u1,
    +                ///  DP overcurrent
    +                DP_OVCN: u1,
    +                ///  DM overcurrent
    +                DM_OVCN: u1,
    +                ///  DP over voltage
    +                DP_OVV: u1,
    +                ///  DM over voltage
    +                DM_OVV: u1,
    +                padding: u9,
    +            }),
    +            ///  Override enable for each control in usbphy_direct
    +            USBPHY_DIRECT_OVERRIDE: mmio.Mmio(packed struct(u32) {
    +                DP_PULLUP_HISEL_OVERRIDE_EN: u1,
    +                DM_PULLUP_HISEL_OVERRIDE_EN: u1,
    +                DP_PULLUP_EN_OVERRIDE_EN: u1,
    +                DP_PULLDN_EN_OVERRIDE_EN: u1,
    +                DM_PULLDN_EN_OVERRIDE_EN: u1,
    +                TX_DP_OE_OVERRIDE_EN: u1,
    +                TX_DM_OE_OVERRIDE_EN: u1,
    +                TX_DP_OVERRIDE_EN: u1,
    +                TX_DM_OVERRIDE_EN: u1,
    +                RX_PD_OVERRIDE_EN: u1,
    +                TX_PD_OVERRIDE_EN: u1,
    +                TX_FSSLEW_OVERRIDE_EN: u1,
    +                DM_PULLUP_OVERRIDE_EN: u1,
    +                reserved15: u2,
    +                TX_DIFFMODE_OVERRIDE_EN: u1,
    +                padding: u16,
    +            }),
    +            ///  Used to adjust trim values of USB phy pull down resistors.
    +            USBPHY_TRIM: mmio.Mmio(packed struct(u32) {
    +                ///  Value to drive to USB PHY
    +                ///  DP pulldown resistor trim control
    +                ///  Experimental data suggests that the reset value will work, but this register allows adjustment if required
    +                DP_PULLDN_TRIM: u5,
    +                reserved8: u3,
    +                ///  Value to drive to USB PHY
    +                ///  DM pulldown resistor trim control
    +                ///  Experimental data suggests that the reset value will work, but this register allows adjustment if required
    +                DM_PULLDN_TRIM: u5,
    +                padding: u19,
    +            }),
    +            reserved140: [4]u8,
    +            ///  Raw Interrupts
    +            INTR: mmio.Mmio(packed struct(u32) {
    +                ///  Host: raised when a device is connected or disconnected (i.e. when SIE_STATUS.SPEED changes). Cleared by writing to SIE_STATUS.SPEED
    +                HOST_CONN_DIS: u1,
    +                ///  Host: raised when a device wakes up the host. Cleared by writing to SIE_STATUS.RESUME
    +                HOST_RESUME: u1,
    +                ///  Host: raised every time the host sends a SOF (Start of Frame). Cleared by reading SOF_RD
    +                HOST_SOF: u1,
    +                ///  Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by writing to this bit.
    +                TRANS_COMPLETE: u1,
    +                ///  Raised when any bit in BUFF_STATUS is set. Clear by clearing all bits in BUFF_STATUS.
    +                BUFF_STATUS: u1,
    +                ///  Source: SIE_STATUS.DATA_SEQ_ERROR
    +                ERROR_DATA_SEQ: u1,
    +                ///  Source: SIE_STATUS.RX_TIMEOUT
    +                ERROR_RX_TIMEOUT: u1,
    +                ///  Source: SIE_STATUS.RX_OVERFLOW
    +                ERROR_RX_OVERFLOW: u1,
    +                ///  Source: SIE_STATUS.BIT_STUFF_ERROR
    +                ERROR_BIT_STUFF: u1,
    +                ///  Source: SIE_STATUS.CRC_ERROR
    +                ERROR_CRC: u1,
    +                ///  Source: SIE_STATUS.STALL_REC
    +                STALL: u1,
    +                ///  Source: SIE_STATUS.VBUS_DETECTED
    +                VBUS_DETECT: u1,
    +                ///  Source: SIE_STATUS.BUS_RESET
    +                BUS_RESET: u1,
    +                ///  Set when the device connection state changes. Cleared by writing to SIE_STATUS.CONNECTED
    +                DEV_CONN_DIS: u1,
    +                ///  Set when the device suspend state changes. Cleared by writing to SIE_STATUS.SUSPENDED
    +                DEV_SUSPEND: u1,
    +                ///  Set when the device receives a resume from the host. Cleared by writing to SIE_STATUS.RESUME
    +                DEV_RESUME_FROM_HOST: u1,
    +                ///  Device. Source: SIE_STATUS.SETUP_REC
    +                SETUP_REQ: u1,
    +                ///  Set every time the device receives a SOF (Start of Frame) packet. Cleared by reading SOF_RD
    +                DEV_SOF: u1,
    +                ///  Raised when any bit in ABORT_DONE is set. Clear by clearing all bits in ABORT_DONE.
    +                ABORT_DONE: u1,
    +                ///  Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by clearing all bits in EP_STATUS_STALL_NAK.
    +                EP_STALL_NAK: u1,
    +                padding: u12,
    +            }),
    +            ///  Interrupt Enable
    +            INTE: mmio.Mmio(packed struct(u32) {
    +                ///  Host: raised when a device is connected or disconnected (i.e. when SIE_STATUS.SPEED changes). Cleared by writing to SIE_STATUS.SPEED
    +                HOST_CONN_DIS: u1,
    +                ///  Host: raised when a device wakes up the host. Cleared by writing to SIE_STATUS.RESUME
    +                HOST_RESUME: u1,
    +                ///  Host: raised every time the host sends a SOF (Start of Frame). Cleared by reading SOF_RD
    +                HOST_SOF: u1,
    +                ///  Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by writing to this bit.
    +                TRANS_COMPLETE: u1,
    +                ///  Raised when any bit in BUFF_STATUS is set. Clear by clearing all bits in BUFF_STATUS.
    +                BUFF_STATUS: u1,
    +                ///  Source: SIE_STATUS.DATA_SEQ_ERROR
    +                ERROR_DATA_SEQ: u1,
    +                ///  Source: SIE_STATUS.RX_TIMEOUT
    +                ERROR_RX_TIMEOUT: u1,
    +                ///  Source: SIE_STATUS.RX_OVERFLOW
    +                ERROR_RX_OVERFLOW: u1,
    +                ///  Source: SIE_STATUS.BIT_STUFF_ERROR
    +                ERROR_BIT_STUFF: u1,
    +                ///  Source: SIE_STATUS.CRC_ERROR
    +                ERROR_CRC: u1,
    +                ///  Source: SIE_STATUS.STALL_REC
    +                STALL: u1,
    +                ///  Source: SIE_STATUS.VBUS_DETECTED
    +                VBUS_DETECT: u1,
    +                ///  Source: SIE_STATUS.BUS_RESET
    +                BUS_RESET: u1,
    +                ///  Set when the device connection state changes. Cleared by writing to SIE_STATUS.CONNECTED
    +                DEV_CONN_DIS: u1,
    +                ///  Set when the device suspend state changes. Cleared by writing to SIE_STATUS.SUSPENDED
    +                DEV_SUSPEND: u1,
    +                ///  Set when the device receives a resume from the host. Cleared by writing to SIE_STATUS.RESUME
    +                DEV_RESUME_FROM_HOST: u1,
    +                ///  Device. Source: SIE_STATUS.SETUP_REC
    +                SETUP_REQ: u1,
    +                ///  Set every time the device receives a SOF (Start of Frame) packet. Cleared by reading SOF_RD
    +                DEV_SOF: u1,
    +                ///  Raised when any bit in ABORT_DONE is set. Clear by clearing all bits in ABORT_DONE.
    +                ABORT_DONE: u1,
    +                ///  Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by clearing all bits in EP_STATUS_STALL_NAK.
    +                EP_STALL_NAK: u1,
    +                padding: u12,
    +            }),
    +            ///  Interrupt Force
    +            INTF: mmio.Mmio(packed struct(u32) {
    +                ///  Host: raised when a device is connected or disconnected (i.e. when SIE_STATUS.SPEED changes). Cleared by writing to SIE_STATUS.SPEED
    +                HOST_CONN_DIS: u1,
    +                ///  Host: raised when a device wakes up the host. Cleared by writing to SIE_STATUS.RESUME
    +                HOST_RESUME: u1,
    +                ///  Host: raised every time the host sends a SOF (Start of Frame). Cleared by reading SOF_RD
    +                HOST_SOF: u1,
    +                ///  Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by writing to this bit.
    +                TRANS_COMPLETE: u1,
    +                ///  Raised when any bit in BUFF_STATUS is set. Clear by clearing all bits in BUFF_STATUS.
    +                BUFF_STATUS: u1,
    +                ///  Source: SIE_STATUS.DATA_SEQ_ERROR
    +                ERROR_DATA_SEQ: u1,
    +                ///  Source: SIE_STATUS.RX_TIMEOUT
    +                ERROR_RX_TIMEOUT: u1,
    +                ///  Source: SIE_STATUS.RX_OVERFLOW
    +                ERROR_RX_OVERFLOW: u1,
    +                ///  Source: SIE_STATUS.BIT_STUFF_ERROR
    +                ERROR_BIT_STUFF: u1,
    +                ///  Source: SIE_STATUS.CRC_ERROR
    +                ERROR_CRC: u1,
    +                ///  Source: SIE_STATUS.STALL_REC
    +                STALL: u1,
    +                ///  Source: SIE_STATUS.VBUS_DETECTED
    +                VBUS_DETECT: u1,
    +                ///  Source: SIE_STATUS.BUS_RESET
    +                BUS_RESET: u1,
    +                ///  Set when the device connection state changes. Cleared by writing to SIE_STATUS.CONNECTED
    +                DEV_CONN_DIS: u1,
    +                ///  Set when the device suspend state changes. Cleared by writing to SIE_STATUS.SUSPENDED
    +                DEV_SUSPEND: u1,
    +                ///  Set when the device receives a resume from the host. Cleared by writing to SIE_STATUS.RESUME
    +                DEV_RESUME_FROM_HOST: u1,
    +                ///  Device. Source: SIE_STATUS.SETUP_REC
    +                SETUP_REQ: u1,
    +                ///  Set every time the device receives a SOF (Start of Frame) packet. Cleared by reading SOF_RD
    +                DEV_SOF: u1,
    +                ///  Raised when any bit in ABORT_DONE is set. Clear by clearing all bits in ABORT_DONE.
    +                ABORT_DONE: u1,
    +                ///  Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by clearing all bits in EP_STATUS_STALL_NAK.
    +                EP_STALL_NAK: u1,
    +                padding: u12,
    +            }),
    +            ///  Interrupt status after masking & forcing
    +            INTS: mmio.Mmio(packed struct(u32) {
    +                ///  Host: raised when a device is connected or disconnected (i.e. when SIE_STATUS.SPEED changes). Cleared by writing to SIE_STATUS.SPEED
    +                HOST_CONN_DIS: u1,
    +                ///  Host: raised when a device wakes up the host. Cleared by writing to SIE_STATUS.RESUME
    +                HOST_RESUME: u1,
    +                ///  Host: raised every time the host sends a SOF (Start of Frame). Cleared by reading SOF_RD
    +                HOST_SOF: u1,
    +                ///  Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by writing to this bit.
    +                TRANS_COMPLETE: u1,
    +                ///  Raised when any bit in BUFF_STATUS is set. Clear by clearing all bits in BUFF_STATUS.
    +                BUFF_STATUS: u1,
    +                ///  Source: SIE_STATUS.DATA_SEQ_ERROR
    +                ERROR_DATA_SEQ: u1,
    +                ///  Source: SIE_STATUS.RX_TIMEOUT
    +                ERROR_RX_TIMEOUT: u1,
    +                ///  Source: SIE_STATUS.RX_OVERFLOW
    +                ERROR_RX_OVERFLOW: u1,
    +                ///  Source: SIE_STATUS.BIT_STUFF_ERROR
    +                ERROR_BIT_STUFF: u1,
    +                ///  Source: SIE_STATUS.CRC_ERROR
    +                ERROR_CRC: u1,
    +                ///  Source: SIE_STATUS.STALL_REC
    +                STALL: u1,
    +                ///  Source: SIE_STATUS.VBUS_DETECTED
    +                VBUS_DETECT: u1,
    +                ///  Source: SIE_STATUS.BUS_RESET
    +                BUS_RESET: u1,
    +                ///  Set when the device connection state changes. Cleared by writing to SIE_STATUS.CONNECTED
    +                DEV_CONN_DIS: u1,
    +                ///  Set when the device suspend state changes. Cleared by writing to SIE_STATUS.SUSPENDED
    +                DEV_SUSPEND: u1,
    +                ///  Set when the device receives a resume from the host. Cleared by writing to SIE_STATUS.RESUME
    +                DEV_RESUME_FROM_HOST: u1,
    +                ///  Device. Source: SIE_STATUS.SETUP_REC
    +                SETUP_REQ: u1,
    +                ///  Set every time the device receives a SOF (Start of Frame) packet. Cleared by reading SOF_RD
    +                DEV_SOF: u1,
    +                ///  Raised when any bit in ABORT_DONE is set. Clear by clearing all bits in ABORT_DONE.
    +                ABORT_DONE: u1,
    +                ///  Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by clearing all bits in EP_STATUS_STALL_NAK.
    +                EP_STALL_NAK: u1,
    +                padding: u12,
    +            }),
    +        };
    +
    +        ///  DW_apb_i2c address block
    +        ///  List of configuration constants for the Synopsys I2C hardware (you may see references to these in I2C register header; these are *fixed* values, set at hardware design time):
    +        ///  IC_ULTRA_FAST_MODE ................ 0x0
    +        ///  IC_UFM_TBUF_CNT_DEFAULT ........... 0x8
    +        ///  IC_UFM_SCL_LOW_COUNT .............. 0x0008
    +        ///  IC_UFM_SCL_HIGH_COUNT ............. 0x0006
    +        ///  IC_TX_TL .......................... 0x0
    +        ///  IC_TX_CMD_BLOCK ................... 0x1
    +        ///  IC_HAS_DMA ........................ 0x1
    +        ///  IC_HAS_ASYNC_FIFO ................. 0x0
    +        ///  IC_SMBUS_ARP ...................... 0x0
    +        ///  IC_FIRST_DATA_BYTE_STATUS ......... 0x1
    +        ///  IC_INTR_IO ........................ 0x1
    +        ///  IC_MASTER_MODE .................... 0x1
    +        ///  IC_DEFAULT_ACK_GENERAL_CALL ....... 0x1
    +        ///  IC_INTR_POL ....................... 0x1
    +        ///  IC_OPTIONAL_SAR ................... 0x0
    +        ///  IC_DEFAULT_TAR_SLAVE_ADDR ......... 0x055
    +        ///  IC_DEFAULT_SLAVE_ADDR ............. 0x055
    +        ///  IC_DEFAULT_HS_SPKLEN .............. 0x1
    +        ///  IC_FS_SCL_HIGH_COUNT .............. 0x0006
    +        ///  IC_HS_SCL_LOW_COUNT ............... 0x0008
    +        ///  IC_DEVICE_ID_VALUE ................ 0x0
    +        ///  IC_10BITADDR_MASTER ............... 0x0
    +        ///  IC_CLK_FREQ_OPTIMIZATION .......... 0x0
    +        ///  IC_DEFAULT_FS_SPKLEN .............. 0x7
    +        ///  IC_ADD_ENCODED_PARAMS ............. 0x0
    +        ///  IC_DEFAULT_SDA_HOLD ............... 0x000001
    +        ///  IC_DEFAULT_SDA_SETUP .............. 0x64
    +        ///  IC_AVOID_RX_FIFO_FLUSH_ON_TX_ABRT . 0x0
    +        ///  IC_CLOCK_PERIOD ................... 100
    +        ///  IC_EMPTYFIFO_HOLD_MASTER_EN ....... 1
    +        ///  IC_RESTART_EN ..................... 0x1
    +        ///  IC_TX_CMD_BLOCK_DEFAULT ........... 0x0
    +        ///  IC_BUS_CLEAR_FEATURE .............. 0x0
    +        ///  IC_CAP_LOADING .................... 100
    +        ///  IC_FS_SCL_LOW_COUNT ............... 0x000d
    +        ///  APB_DATA_WIDTH .................... 32
    +        ///  IC_SDA_STUCK_TIMEOUT_DEFAULT ...... 0xffffffff
    +        ///  IC_SLV_DATA_NACK_ONLY ............. 0x1
    +        ///  IC_10BITADDR_SLAVE ................ 0x0
    +        ///  IC_CLK_TYPE ....................... 0x0
    +        ///  IC_SMBUS_UDID_MSB ................. 0x0
    +        ///  IC_SMBUS_SUSPEND_ALERT ............ 0x0
    +        ///  IC_HS_SCL_HIGH_COUNT .............. 0x0006
    +        ///  IC_SLV_RESTART_DET_EN ............. 0x1
    +        ///  IC_SMBUS .......................... 0x0
    +        ///  IC_OPTIONAL_SAR_DEFAULT ........... 0x0
    +        ///  IC_PERSISTANT_SLV_ADDR_DEFAULT .... 0x0
    +        ///  IC_USE_COUNTS ..................... 0x0
    +        ///  IC_RX_BUFFER_DEPTH ................ 16
    +        ///  IC_SCL_STUCK_TIMEOUT_DEFAULT ...... 0xffffffff
    +        ///  IC_RX_FULL_HLD_BUS_EN ............. 0x1
    +        ///  IC_SLAVE_DISABLE .................. 0x1
    +        ///  IC_RX_TL .......................... 0x0
    +        ///  IC_DEVICE_ID ...................... 0x0
    +        ///  IC_HC_COUNT_VALUES ................ 0x0
    +        ///  I2C_DYNAMIC_TAR_UPDATE ............ 0
    +        ///  IC_SMBUS_CLK_LOW_MEXT_DEFAULT ..... 0xffffffff
    +        ///  IC_SMBUS_CLK_LOW_SEXT_DEFAULT ..... 0xffffffff
    +        ///  IC_HS_MASTER_CODE ................. 0x1
    +        ///  IC_SMBUS_RST_IDLE_CNT_DEFAULT ..... 0xffff
    +        ///  IC_SMBUS_UDID_LSB_DEFAULT ......... 0xffffffff
    +        ///  IC_SS_SCL_HIGH_COUNT .............. 0x0028
    +        ///  IC_SS_SCL_LOW_COUNT ............... 0x002f
    +        ///  IC_MAX_SPEED_MODE ................. 0x2
    +        ///  IC_STAT_FOR_CLK_STRETCH ........... 0x0
    +        ///  IC_STOP_DET_IF_MASTER_ACTIVE ...... 0x0
    +        ///  IC_DEFAULT_UFM_SPKLEN ............. 0x1
    +        ///  IC_TX_BUFFER_DEPTH ................ 16
    +        pub const I2C0 = extern struct {
    +            ///  I2C Control Register. This register can be written only when the DW_apb_i2c is disabled, which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect.
    +            ///  Read/Write Access: - bit 10 is read only. - bit 11 is read only - bit 16 is read only - bit 17 is read only - bits 18 and 19 are read only.
    +            IC_CON: mmio.Mmio(packed struct(u32) {
    +                ///  This bit controls whether the DW_apb_i2c master is enabled.
    +                ///  NOTE: Software should ensure that if this bit is written with '1' then bit 6 should also be written with a '1'.
    +                MASTER_MODE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Master mode is disabled
    +                        DISABLED = 0x0,
    +                        ///  Master mode is enabled
    +                        ENABLED = 0x1,
    +                    },
    +                },
    +                ///  These bits control at which speed the DW_apb_i2c operates; its setting is relevant only if one is operating the DW_apb_i2c in master mode. Hardware protects against illegal values being programmed by software. These bits must be programmed appropriately for slave mode also, as it is used to capture correct value of spike filter as per the speed mode.
    +                ///  This register should be programmed only with a value in the range of 1 to IC_MAX_SPEED_MODE; otherwise, hardware updates this register with the value of IC_MAX_SPEED_MODE.
    +                ///  1: standard mode (100 kbit/s)
    +                ///  2: fast mode (<=400 kbit/s) or fast mode plus (<=1000Kbit/s)
    +                ///  3: high speed mode (3.4 Mbit/s)
    +                ///  Note: This field is not applicable when IC_ULTRA_FAST_MODE=1
    +                SPEED: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Standard Speed mode of operation
    +                        STANDARD = 0x1,
    +                        ///  Fast or Fast Plus mode of operation
    +                        FAST = 0x2,
    +                        ///  High Speed mode of operation
    +                        HIGH = 0x3,
    +                        _,
    +                    },
    +                },
    +                ///  When acting as a slave, this bit controls whether the DW_apb_i2c responds to 7- or 10-bit addresses. - 0: 7-bit addressing. The DW_apb_i2c ignores transactions that involve 10-bit addressing; for 7-bit addressing, only the lower 7 bits of the IC_SAR register are compared. - 1: 10-bit addressing. The DW_apb_i2c responds to only 10-bit addressing transfers that match the full 10 bits of the IC_SAR register.
    +                IC_10BITADDR_SLAVE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Slave 7Bit addressing
    +                        ADDR_7BITS = 0x0,
    +                        ///  Slave 10Bit addressing
    +                        ADDR_10BITS = 0x1,
    +                    },
    +                },
    +                ///  Controls whether the DW_apb_i2c starts its transfers in 7- or 10-bit addressing mode when acting as a master. - 0: 7-bit addressing - 1: 10-bit addressing
    +                IC_10BITADDR_MASTER: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Master 7Bit addressing mode
    +                        ADDR_7BITS = 0x0,
    +                        ///  Master 10Bit addressing mode
    +                        ADDR_10BITS = 0x1,
    +                    },
    +                },
    +                ///  Determines whether RESTART conditions may be sent when acting as a master. Some older slaves do not support handling RESTART conditions; however, RESTART conditions are used in several DW_apb_i2c operations. When RESTART is disabled, the master is prohibited from performing the following functions: - Sending a START BYTE - Performing any high-speed mode operation - High-speed mode operation - Performing direction changes in combined format mode - Performing a read operation with a 10-bit address By replacing RESTART condition followed by a STOP and a subsequent START condition, split operations are broken down into multiple DW_apb_i2c transfers. If the above operations are performed, it will result in setting bit 6 (TX_ABRT) of the IC_RAW_INTR_STAT register.
    +                ///  Reset value: ENABLED
    +                IC_RESTART_EN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Master restart disabled
    +                        DISABLED = 0x0,
    +                        ///  Master restart enabled
    +                        ENABLED = 0x1,
    +                    },
    +                },
    +                ///  This bit controls whether I2C has its slave disabled, which means once the presetn signal is applied, then this bit is set and the slave is disabled.
    +                ///  If this bit is set (slave is disabled), DW_apb_i2c functions only as a master and does not perform any action that requires a slave.
    +                ///  NOTE: Software should ensure that if this bit is written with 0, then bit 0 should also be written with a 0.
    +                IC_SLAVE_DISABLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Slave mode is enabled
    +                        SLAVE_ENABLED = 0x0,
    +                        ///  Slave mode is disabled
    +                        SLAVE_DISABLED = 0x1,
    +                    },
    +                },
    +                ///  In slave mode: - 1'b1: issues the STOP_DET interrupt only when it is addressed. - 1'b0: issues the STOP_DET irrespective of whether it's addressed or not. Reset value: 0x0
    +                ///  NOTE: During a general call address, this slave does not issue the STOP_DET interrupt if STOP_DET_IF_ADDRESSED = 1'b1, even if the slave responds to the general call address by generating ACK. The STOP_DET interrupt is generated only when the transmitted address matches the slave address (SAR).
    +                STOP_DET_IFADDRESSED: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  slave issues STOP_DET intr always
    +                        DISABLED = 0x0,
    +                        ///  slave issues STOP_DET intr only if addressed
    +                        ENABLED = 0x1,
    +                    },
    +                },
    +                ///  This bit controls the generation of the TX_EMPTY interrupt, as described in the IC_RAW_INTR_STAT register.
    +                ///  Reset value: 0x0.
    +                TX_EMPTY_CTRL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Default behaviour of TX_EMPTY interrupt
    +                        DISABLED = 0x0,
    +                        ///  Controlled generation of TX_EMPTY interrupt
    +                        ENABLED = 0x1,
    +                    },
    +                },
    +                ///  This bit controls whether DW_apb_i2c should hold the bus when the Rx FIFO is physically full to its RX_BUFFER_DEPTH, as described in the IC_RX_FULL_HLD_BUS_EN parameter.
    +                ///  Reset value: 0x0.
    +                RX_FIFO_FULL_HLD_CTRL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Overflow when RX_FIFO is full
    +                        DISABLED = 0x0,
    +                        ///  Hold bus when RX_FIFO is full
    +                        ENABLED = 0x1,
    +                    },
    +                },
    +                ///  Master issues the STOP_DET interrupt irrespective of whether master is active or not
    +                STOP_DET_IF_MASTER_ACTIVE: u1,
    +                padding: u21,
    +            }),
    +            ///  I2C Target Address Register
    +            ///  This register is 12 bits wide, and bits 31:12 are reserved. This register can be written to only when IC_ENABLE[0] is set to 0.
    +            ///  Note: If the software or application is aware that the DW_apb_i2c is not using the TAR address for the pending commands in the Tx FIFO, then it is possible to update the TAR address even while the Tx FIFO has entries (IC_STATUS[2]= 0). - It is not necessary to perform any write to this register if DW_apb_i2c is enabled as an I2C slave only.
    +            IC_TAR: mmio.Mmio(packed struct(u32) {
    +                ///  This is the target address for any master transaction. When transmitting a General Call, these bits are ignored. To generate a START BYTE, the CPU needs to write only once into these bits.
    +                ///  If the IC_TAR and IC_SAR are the same, loopback exists but the FIFOs are shared between master and slave, so full loopback is not feasible. Only one direction loopback mode is supported (simplex), not duplex. A master cannot transmit to itself; it can transmit to only a slave.
    +                IC_TAR: u10,
    +                ///  If bit 11 (SPECIAL) is set to 1 and bit 13(Device-ID) is set to 0, then this bit indicates whether a General Call or START byte command is to be performed by the DW_apb_i2c. - 0: General Call Address - after issuing a General Call, only writes may be performed. Attempting to issue a read command results in setting bit 6 (TX_ABRT) of the IC_RAW_INTR_STAT register. The DW_apb_i2c remains in General Call mode until the SPECIAL bit value (bit 11) is cleared. - 1: START BYTE Reset value: 0x0
    +                GC_OR_START: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  GENERAL_CALL byte transmission
    +                        GENERAL_CALL = 0x0,
    +                        ///  START byte transmission
    +                        START_BYTE = 0x1,
    +                    },
    +                },
    +                ///  This bit indicates whether software performs a Device-ID or General Call or START BYTE command. - 0: ignore bit 10 GC_OR_START and use IC_TAR normally - 1: perform special I2C command as specified in Device_ID or GC_OR_START bit Reset value: 0x0
    +                SPECIAL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Disables programming of GENERAL_CALL or START_BYTE transmission
    +                        DISABLED = 0x0,
    +                        ///  Enables programming of GENERAL_CALL or START_BYTE transmission
    +                        ENABLED = 0x1,
    +                    },
    +                },
    +                padding: u20,
    +            }),
    +            ///  I2C Slave Address Register
    +            IC_SAR: mmio.Mmio(packed struct(u32) {
    +                ///  The IC_SAR holds the slave address when the I2C is operating as a slave. For 7-bit addressing, only IC_SAR[6:0] is used.
    +                ///  This register can be written only when the I2C interface is disabled, which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect.
    +                ///  Note: The default values cannot be any of the reserved address locations: that is, 0x00 to 0x07, or 0x78 to 0x7f. The correct operation of the device is not guaranteed if you program the IC_SAR or IC_TAR to a reserved value. Refer to <> for a complete list of these reserved values.
    +                IC_SAR: u10,
    +                padding: u22,
    +            }),
    +            reserved16: [4]u8,
    +            ///  I2C Rx/Tx Data Buffer and Command Register; this is the register the CPU writes to when filling the TX FIFO and the CPU reads from when retrieving bytes from RX FIFO.
    +            ///  The size of the register changes as follows:
    +            ///  Write: - 11 bits when IC_EMPTYFIFO_HOLD_MASTER_EN=1 - 9 bits when IC_EMPTYFIFO_HOLD_MASTER_EN=0 Read: - 12 bits when IC_FIRST_DATA_BYTE_STATUS = 1 - 8 bits when IC_FIRST_DATA_BYTE_STATUS = 0 Note: In order for the DW_apb_i2c to continue acknowledging reads, a read command should be written for every byte that is to be received; otherwise the DW_apb_i2c will stop acknowledging.
    +            IC_DATA_CMD: mmio.Mmio(packed struct(u32) {
    +                ///  This register contains the data to be transmitted or received on the I2C bus. If you are writing to this register and want to perform a read, bits 7:0 (DAT) are ignored by the DW_apb_i2c. However, when you read this register, these bits return the value of data received on the DW_apb_i2c interface.
    +                ///  Reset value: 0x0
    +                DAT: u8,
    +                ///  This bit controls whether a read or a write is performed. This bit does not control the direction when the DW_apb_i2con acts as a slave. It controls only the direction when it acts as a master.
    +                ///  When a command is entered in the TX FIFO, this bit distinguishes the write and read commands. In slave-receiver mode, this bit is a 'don't care' because writes to this register are not required. In slave-transmitter mode, a '0' indicates that the data in IC_DATA_CMD is to be transmitted.
    +                ///  When programming this bit, you should remember the following: attempting to perform a read operation after a General Call command has been sent results in a TX_ABRT interrupt (bit 6 of the IC_RAW_INTR_STAT register), unless bit 11 (SPECIAL) in the IC_TAR register has been cleared. If a '1' is written to this bit after receiving a RD_REQ interrupt, then a TX_ABRT interrupt occurs.
    +                ///  Reset value: 0x0
    +                CMD: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Master Write Command
    +                        WRITE = 0x0,
    +                        ///  Master Read Command
    +                        READ = 0x1,
    +                    },
    +                },
    +                ///  This bit controls whether a STOP is issued after the byte is sent or received.
    +                ///  - 1 - STOP is issued after this byte, regardless of whether or not the Tx FIFO is empty. If the Tx FIFO is not empty, the master immediately tries to start a new transfer by issuing a START and arbitrating for the bus. - 0 - STOP is not issued after this byte, regardless of whether or not the Tx FIFO is empty. If the Tx FIFO is not empty, the master continues the current transfer by sending/receiving data bytes according to the value of the CMD bit. If the Tx FIFO is empty, the master holds the SCL line low and stalls the bus until a new command is available in the Tx FIFO. Reset value: 0x0
    +                STOP: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Don't Issue STOP after this command
    +                        DISABLE = 0x0,
    +                        ///  Issue STOP after this command
    +                        ENABLE = 0x1,
    +                    },
    +                },
    +                ///  This bit controls whether a RESTART is issued before the byte is sent or received.
    +                ///  1 - If IC_RESTART_EN is 1, a RESTART is issued before the data is sent/received (according to the value of CMD), regardless of whether or not the transfer direction is changing from the previous command; if IC_RESTART_EN is 0, a STOP followed by a START is issued instead.
    +                ///  0 - If IC_RESTART_EN is 1, a RESTART is issued only if the transfer direction is changing from the previous command; if IC_RESTART_EN is 0, a STOP followed by a START is issued instead.
    +                ///  Reset value: 0x0
    +                RESTART: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Don't Issue RESTART before this command
    +                        DISABLE = 0x0,
    +                        ///  Issue RESTART before this command
    +                        ENABLE = 0x1,
    +                    },
    +                },
    +                ///  Indicates the first data byte received after the address phase for receive transfer in Master receiver or Slave receiver mode.
    +                ///  Reset value : 0x0
    +                ///  NOTE: In case of APB_DATA_WIDTH=8,
    +                ///  1. The user has to perform two APB Reads to IC_DATA_CMD in order to get status on 11 bit.
    +                ///  2. In order to read the 11 bit, the user has to perform the first data byte read [7:0] (offset 0x10) and then perform the second read [15:8] (offset 0x11) in order to know the status of 11 bit (whether the data received in previous read is a first data byte or not).
    +                ///  3. The 11th bit is an optional read field, user can ignore 2nd byte read [15:8] (offset 0x11) if not interested in FIRST_DATA_BYTE status.
    +                FIRST_DATA_BYTE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Sequential data byte received
    +                        INACTIVE = 0x0,
    +                        ///  Non sequential data byte received
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                padding: u20,
    +            }),
    +            ///  Standard Speed I2C Clock SCL High Count Register
    +            IC_SS_SCL_HCNT: mmio.Mmio(packed struct(u32) {
    +                ///  This register must be set before any I2C bus transaction can take place to ensure proper I/O timing. This register sets the SCL clock high-period count for standard speed. For more information, refer to 'IC_CLK Frequency Configuration'.
    +                ///  This register can be written only when the I2C interface is disabled which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect.
    +                ///  The minimum valid value is 6; hardware prevents values less than this being written, and if attempted results in 6 being set. For designs with APB_DATA_WIDTH = 8, the order of programming is important to ensure the correct operation of the DW_apb_i2c. The lower byte must be programmed first. Then the upper byte is programmed.
    +                ///  NOTE: This register must not be programmed to a value higher than 65525, because DW_apb_i2c uses a 16-bit counter to flag an I2C bus idle condition when this counter reaches a value of IC_SS_SCL_HCNT + 10.
    +                IC_SS_SCL_HCNT: u16,
    +                padding: u16,
    +            }),
    +            ///  Standard Speed I2C Clock SCL Low Count Register
    +            IC_SS_SCL_LCNT: mmio.Mmio(packed struct(u32) {
    +                ///  This register must be set before any I2C bus transaction can take place to ensure proper I/O timing. This register sets the SCL clock low period count for standard speed. For more information, refer to 'IC_CLK Frequency Configuration'
    +                ///  This register can be written only when the I2C interface is disabled which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect.
    +                ///  The minimum valid value is 8; hardware prevents values less than this being written, and if attempted, results in 8 being set. For designs with APB_DATA_WIDTH = 8, the order of programming is important to ensure the correct operation of DW_apb_i2c. The lower byte must be programmed first, and then the upper byte is programmed.
    +                IC_SS_SCL_LCNT: u16,
    +                padding: u16,
    +            }),
    +            ///  Fast Mode or Fast Mode Plus I2C Clock SCL High Count Register
    +            IC_FS_SCL_HCNT: mmio.Mmio(packed struct(u32) {
    +                ///  This register must be set before any I2C bus transaction can take place to ensure proper I/O timing. This register sets the SCL clock high-period count for fast mode or fast mode plus. It is used in high-speed mode to send the Master Code and START BYTE or General CALL. For more information, refer to 'IC_CLK Frequency Configuration'.
    +                ///  This register goes away and becomes read-only returning 0s if IC_MAX_SPEED_MODE = standard. This register can be written only when the I2C interface is disabled, which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect.
    +                ///  The minimum valid value is 6; hardware prevents values less than this being written, and if attempted results in 6 being set. For designs with APB_DATA_WIDTH == 8 the order of programming is important to ensure the correct operation of the DW_apb_i2c. The lower byte must be programmed first. Then the upper byte is programmed.
    +                IC_FS_SCL_HCNT: u16,
    +                padding: u16,
    +            }),
    +            ///  Fast Mode or Fast Mode Plus I2C Clock SCL Low Count Register
    +            IC_FS_SCL_LCNT: mmio.Mmio(packed struct(u32) {
    +                ///  This register must be set before any I2C bus transaction can take place to ensure proper I/O timing. This register sets the SCL clock low period count for fast speed. It is used in high-speed mode to send the Master Code and START BYTE or General CALL. For more information, refer to 'IC_CLK Frequency Configuration'.
    +                ///  This register goes away and becomes read-only returning 0s if IC_MAX_SPEED_MODE = standard.
    +                ///  This register can be written only when the I2C interface is disabled, which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect.
    +                ///  The minimum valid value is 8; hardware prevents values less than this being written, and if attempted results in 8 being set. For designs with APB_DATA_WIDTH = 8 the order of programming is important to ensure the correct operation of the DW_apb_i2c. The lower byte must be programmed first. Then the upper byte is programmed. If the value is less than 8 then the count value gets changed to 8.
    +                IC_FS_SCL_LCNT: u16,
    +                padding: u16,
    +            }),
    +            reserved44: [8]u8,
    +            ///  I2C Interrupt Status Register
    +            ///  Each bit in this register has a corresponding mask bit in the IC_INTR_MASK register. These bits are cleared by reading the matching interrupt clear register. The unmasked raw versions of these bits are available in the IC_RAW_INTR_STAT register.
    +            IC_INTR_STAT: mmio.Mmio(packed struct(u32) {
    +                ///  See IC_RAW_INTR_STAT for a detailed description of R_RX_UNDER bit.
    +                ///  Reset value: 0x0
    +                R_RX_UNDER: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RX_UNDER interrupt is inactive
    +                        INACTIVE = 0x0,
    +                        ///  RX_UNDER interrupt is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  See IC_RAW_INTR_STAT for a detailed description of R_RX_OVER bit.
    +                ///  Reset value: 0x0
    +                R_RX_OVER: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  R_RX_OVER interrupt is inactive
    +                        INACTIVE = 0x0,
    +                        ///  R_RX_OVER interrupt is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  See IC_RAW_INTR_STAT for a detailed description of R_RX_FULL bit.
    +                ///  Reset value: 0x0
    +                R_RX_FULL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  R_RX_FULL interrupt is inactive
    +                        INACTIVE = 0x0,
    +                        ///  R_RX_FULL interrupt is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  See IC_RAW_INTR_STAT for a detailed description of R_TX_OVER bit.
    +                ///  Reset value: 0x0
    +                R_TX_OVER: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  R_TX_OVER interrupt is inactive
    +                        INACTIVE = 0x0,
    +                        ///  R_TX_OVER interrupt is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  See IC_RAW_INTR_STAT for a detailed description of R_TX_EMPTY bit.
    +                ///  Reset value: 0x0
    +                R_TX_EMPTY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  R_TX_EMPTY interrupt is inactive
    +                        INACTIVE = 0x0,
    +                        ///  R_TX_EMPTY interrupt is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  See IC_RAW_INTR_STAT for a detailed description of R_RD_REQ bit.
    +                ///  Reset value: 0x0
    +                R_RD_REQ: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  R_RD_REQ interrupt is inactive
    +                        INACTIVE = 0x0,
    +                        ///  R_RD_REQ interrupt is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  See IC_RAW_INTR_STAT for a detailed description of R_TX_ABRT bit.
    +                ///  Reset value: 0x0
    +                R_TX_ABRT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  R_TX_ABRT interrupt is inactive
    +                        INACTIVE = 0x0,
    +                        ///  R_TX_ABRT interrupt is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  See IC_RAW_INTR_STAT for a detailed description of R_RX_DONE bit.
    +                ///  Reset value: 0x0
    +                R_RX_DONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  R_RX_DONE interrupt is inactive
    +                        INACTIVE = 0x0,
    +                        ///  R_RX_DONE interrupt is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  See IC_RAW_INTR_STAT for a detailed description of R_ACTIVITY bit.
    +                ///  Reset value: 0x0
    +                R_ACTIVITY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  R_ACTIVITY interrupt is inactive
    +                        INACTIVE = 0x0,
    +                        ///  R_ACTIVITY interrupt is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  See IC_RAW_INTR_STAT for a detailed description of R_STOP_DET bit.
    +                ///  Reset value: 0x0
    +                R_STOP_DET: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  R_STOP_DET interrupt is inactive
    +                        INACTIVE = 0x0,
    +                        ///  R_STOP_DET interrupt is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  See IC_RAW_INTR_STAT for a detailed description of R_START_DET bit.
    +                ///  Reset value: 0x0
    +                R_START_DET: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  R_START_DET interrupt is inactive
    +                        INACTIVE = 0x0,
    +                        ///  R_START_DET interrupt is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  See IC_RAW_INTR_STAT for a detailed description of R_GEN_CALL bit.
    +                ///  Reset value: 0x0
    +                R_GEN_CALL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  R_GEN_CALL interrupt is inactive
    +                        INACTIVE = 0x0,
    +                        ///  R_GEN_CALL interrupt is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  See IC_RAW_INTR_STAT for a detailed description of R_RESTART_DET bit.
    +                ///  Reset value: 0x0
    +                R_RESTART_DET: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  R_RESTART_DET interrupt is inactive
    +                        INACTIVE = 0x0,
    +                        ///  R_RESTART_DET interrupt is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                padding: u19,
    +            }),
    +            ///  I2C Interrupt Mask Register.
    +            ///  These bits mask their corresponding interrupt status bits. This register is active low; a value of 0 masks the interrupt, whereas a value of 1 unmasks the interrupt.
    +            IC_INTR_MASK: mmio.Mmio(packed struct(u32) {
    +                ///  This bit masks the R_RX_UNDER interrupt in IC_INTR_STAT register.
    +                ///  Reset value: 0x1
    +                M_RX_UNDER: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RX_UNDER interrupt is masked
    +                        ENABLED = 0x0,
    +                        ///  RX_UNDER interrupt is unmasked
    +                        DISABLED = 0x1,
    +                    },
    +                },
    +                ///  This bit masks the R_RX_OVER interrupt in IC_INTR_STAT register.
    +                ///  Reset value: 0x1
    +                M_RX_OVER: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RX_OVER interrupt is masked
    +                        ENABLED = 0x0,
    +                        ///  RX_OVER interrupt is unmasked
    +                        DISABLED = 0x1,
    +                    },
    +                },
    +                ///  This bit masks the R_RX_FULL interrupt in IC_INTR_STAT register.
    +                ///  Reset value: 0x1
    +                M_RX_FULL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RX_FULL interrupt is masked
    +                        ENABLED = 0x0,
    +                        ///  RX_FULL interrupt is unmasked
    +                        DISABLED = 0x1,
    +                    },
    +                },
    +                ///  This bit masks the R_TX_OVER interrupt in IC_INTR_STAT register.
    +                ///  Reset value: 0x1
    +                M_TX_OVER: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  TX_OVER interrupt is masked
    +                        ENABLED = 0x0,
    +                        ///  TX_OVER interrupt is unmasked
    +                        DISABLED = 0x1,
    +                    },
    +                },
    +                ///  This bit masks the R_TX_EMPTY interrupt in IC_INTR_STAT register.
    +                ///  Reset value: 0x1
    +                M_TX_EMPTY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  TX_EMPTY interrupt is masked
    +                        ENABLED = 0x0,
    +                        ///  TX_EMPTY interrupt is unmasked
    +                        DISABLED = 0x1,
    +                    },
    +                },
    +                ///  This bit masks the R_RD_REQ interrupt in IC_INTR_STAT register.
    +                ///  Reset value: 0x1
    +                M_RD_REQ: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RD_REQ interrupt is masked
    +                        ENABLED = 0x0,
    +                        ///  RD_REQ interrupt is unmasked
    +                        DISABLED = 0x1,
    +                    },
    +                },
    +                ///  This bit masks the R_TX_ABRT interrupt in IC_INTR_STAT register.
    +                ///  Reset value: 0x1
    +                M_TX_ABRT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  TX_ABORT interrupt is masked
    +                        ENABLED = 0x0,
    +                        ///  TX_ABORT interrupt is unmasked
    +                        DISABLED = 0x1,
    +                    },
    +                },
    +                ///  This bit masks the R_RX_DONE interrupt in IC_INTR_STAT register.
    +                ///  Reset value: 0x1
    +                M_RX_DONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RX_DONE interrupt is masked
    +                        ENABLED = 0x0,
    +                        ///  RX_DONE interrupt is unmasked
    +                        DISABLED = 0x1,
    +                    },
    +                },
    +                ///  This bit masks the R_ACTIVITY interrupt in IC_INTR_STAT register.
    +                ///  Reset value: 0x0
    +                M_ACTIVITY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  ACTIVITY interrupt is masked
    +                        ENABLED = 0x0,
    +                        ///  ACTIVITY interrupt is unmasked
    +                        DISABLED = 0x1,
    +                    },
    +                },
    +                ///  This bit masks the R_STOP_DET interrupt in IC_INTR_STAT register.
    +                ///  Reset value: 0x0
    +                M_STOP_DET: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  STOP_DET interrupt is masked
    +                        ENABLED = 0x0,
    +                        ///  STOP_DET interrupt is unmasked
    +                        DISABLED = 0x1,
    +                    },
    +                },
    +                ///  This bit masks the R_START_DET interrupt in IC_INTR_STAT register.
    +                ///  Reset value: 0x0
    +                M_START_DET: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  START_DET interrupt is masked
    +                        ENABLED = 0x0,
    +                        ///  START_DET interrupt is unmasked
    +                        DISABLED = 0x1,
    +                    },
    +                },
    +                ///  This bit masks the R_GEN_CALL interrupt in IC_INTR_STAT register.
    +                ///  Reset value: 0x1
    +                M_GEN_CALL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  GEN_CALL interrupt is masked
    +                        ENABLED = 0x0,
    +                        ///  GEN_CALL interrupt is unmasked
    +                        DISABLED = 0x1,
    +                    },
    +                },
    +                ///  This bit masks the R_RESTART_DET interrupt in IC_INTR_STAT register.
    +                ///  Reset value: 0x0
    +                M_RESTART_DET: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RESTART_DET interrupt is masked
    +                        ENABLED = 0x0,
    +                        ///  RESTART_DET interrupt is unmasked
    +                        DISABLED = 0x1,
    +                    },
    +                },
    +                padding: u19,
    +            }),
    +            ///  I2C Raw Interrupt Status Register
    +            ///  Unlike the IC_INTR_STAT register, these bits are not masked so they always show the true status of the DW_apb_i2c.
    +            IC_RAW_INTR_STAT: mmio.Mmio(packed struct(u32) {
    +                ///  Set if the processor attempts to read the receive buffer when it is empty by reading from the IC_DATA_CMD register. If the module is disabled (IC_ENABLE[0]=0), this bit keeps its level until the master or slave state machines go into idle, and when ic_en goes to 0, this interrupt is cleared.
    +                ///  Reset value: 0x0
    +                RX_UNDER: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RX_UNDER interrupt is inactive
    +                        INACTIVE = 0x0,
    +                        ///  RX_UNDER interrupt is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  Set if the receive buffer is completely filled to IC_RX_BUFFER_DEPTH and an additional byte is received from an external I2C device. The DW_apb_i2c acknowledges this, but any data bytes received after the FIFO is full are lost. If the module is disabled (IC_ENABLE[0]=0), this bit keeps its level until the master or slave state machines go into idle, and when ic_en goes to 0, this interrupt is cleared.
    +                ///  Note: If bit 9 of the IC_CON register (RX_FIFO_FULL_HLD_CTRL) is programmed to HIGH, then the RX_OVER interrupt never occurs, because the Rx FIFO never overflows.
    +                ///  Reset value: 0x0
    +                RX_OVER: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RX_OVER interrupt is inactive
    +                        INACTIVE = 0x0,
    +                        ///  RX_OVER interrupt is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  Set when the receive buffer reaches or goes above the RX_TL threshold in the IC_RX_TL register. It is automatically cleared by hardware when buffer level goes below the threshold. If the module is disabled (IC_ENABLE[0]=0), the RX FIFO is flushed and held in reset; therefore the RX FIFO is not full. So this bit is cleared once the IC_ENABLE bit 0 is programmed with a 0, regardless of the activity that continues.
    +                ///  Reset value: 0x0
    +                RX_FULL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RX_FULL interrupt is inactive
    +                        INACTIVE = 0x0,
    +                        ///  RX_FULL interrupt is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  Set during transmit if the transmit buffer is filled to IC_TX_BUFFER_DEPTH and the processor attempts to issue another I2C command by writing to the IC_DATA_CMD register. When the module is disabled, this bit keeps its level until the master or slave state machines go into idle, and when ic_en goes to 0, this interrupt is cleared.
    +                ///  Reset value: 0x0
    +                TX_OVER: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  TX_OVER interrupt is inactive
    +                        INACTIVE = 0x0,
    +                        ///  TX_OVER interrupt is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  The behavior of the TX_EMPTY interrupt status differs based on the TX_EMPTY_CTRL selection in the IC_CON register. - When TX_EMPTY_CTRL = 0: This bit is set to 1 when the transmit buffer is at or below the threshold value set in the IC_TX_TL register. - When TX_EMPTY_CTRL = 1: This bit is set to 1 when the transmit buffer is at or below the threshold value set in the IC_TX_TL register and the transmission of the address/data from the internal shift register for the most recently popped command is completed. It is automatically cleared by hardware when the buffer level goes above the threshold. When IC_ENABLE[0] is set to 0, the TX FIFO is flushed and held in reset. There the TX FIFO looks like it has no data within it, so this bit is set to 1, provided there is activity in the master or slave state machines. When there is no longer any activity, then with ic_en=0, this bit is set to 0.
    +                ///  Reset value: 0x0.
    +                TX_EMPTY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  TX_EMPTY interrupt is inactive
    +                        INACTIVE = 0x0,
    +                        ///  TX_EMPTY interrupt is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  This bit is set to 1 when DW_apb_i2c is acting as a slave and another I2C master is attempting to read data from DW_apb_i2c. The DW_apb_i2c holds the I2C bus in a wait state (SCL=0) until this interrupt is serviced, which means that the slave has been addressed by a remote master that is asking for data to be transferred. The processor must respond to this interrupt and then write the requested data to the IC_DATA_CMD register. This bit is set to 0 just after the processor reads the IC_CLR_RD_REQ register.
    +                ///  Reset value: 0x0
    +                RD_REQ: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RD_REQ interrupt is inactive
    +                        INACTIVE = 0x0,
    +                        ///  RD_REQ interrupt is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  This bit indicates if DW_apb_i2c, as an I2C transmitter, is unable to complete the intended actions on the contents of the transmit FIFO. This situation can occur both as an I2C master or an I2C slave, and is referred to as a 'transmit abort'. When this bit is set to 1, the IC_TX_ABRT_SOURCE register indicates the reason why the transmit abort takes places.
    +                ///  Note: The DW_apb_i2c flushes/resets/empties the TX_FIFO and RX_FIFO whenever there is a transmit abort caused by any of the events tracked by the IC_TX_ABRT_SOURCE register. The FIFOs remains in this flushed state until the register IC_CLR_TX_ABRT is read. Once this read is performed, the Tx FIFO is then ready to accept more data bytes from the APB interface.
    +                ///  Reset value: 0x0
    +                TX_ABRT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  TX_ABRT interrupt is inactive
    +                        INACTIVE = 0x0,
    +                        ///  TX_ABRT interrupt is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  When the DW_apb_i2c is acting as a slave-transmitter, this bit is set to 1 if the master does not acknowledge a transmitted byte. This occurs on the last byte of the transmission, indicating that the transmission is done.
    +                ///  Reset value: 0x0
    +                RX_DONE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RX_DONE interrupt is inactive
    +                        INACTIVE = 0x0,
    +                        ///  RX_DONE interrupt is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  This bit captures DW_apb_i2c activity and stays set until it is cleared. There are four ways to clear it: - Disabling the DW_apb_i2c - Reading the IC_CLR_ACTIVITY register - Reading the IC_CLR_INTR register - System reset Once this bit is set, it stays set unless one of the four methods is used to clear it. Even if the DW_apb_i2c module is idle, this bit remains set until cleared, indicating that there was activity on the bus.
    +                ///  Reset value: 0x0
    +                ACTIVITY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RAW_INTR_ACTIVITY interrupt is inactive
    +                        INACTIVE = 0x0,
    +                        ///  RAW_INTR_ACTIVITY interrupt is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  Indicates whether a STOP condition has occurred on the I2C interface regardless of whether DW_apb_i2c is operating in slave or master mode.
    +                ///  In Slave Mode: - If IC_CON[7]=1'b1 (STOP_DET_IFADDRESSED), the STOP_DET interrupt will be issued only if slave is addressed. Note: During a general call address, this slave does not issue a STOP_DET interrupt if STOP_DET_IF_ADDRESSED=1'b1, even if the slave responds to the general call address by generating ACK. The STOP_DET interrupt is generated only when the transmitted address matches the slave address (SAR). - If IC_CON[7]=1'b0 (STOP_DET_IFADDRESSED), the STOP_DET interrupt is issued irrespective of whether it is being addressed. In Master Mode: - If IC_CON[10]=1'b1 (STOP_DET_IF_MASTER_ACTIVE),the STOP_DET interrupt will be issued only if Master is active. - If IC_CON[10]=1'b0 (STOP_DET_IFADDRESSED),the STOP_DET interrupt will be issued irrespective of whether master is active or not. Reset value: 0x0
    +                STOP_DET: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  STOP_DET interrupt is inactive
    +                        INACTIVE = 0x0,
    +                        ///  STOP_DET interrupt is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  Indicates whether a START or RESTART condition has occurred on the I2C interface regardless of whether DW_apb_i2c is operating in slave or master mode.
    +                ///  Reset value: 0x0
    +                START_DET: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  START_DET interrupt is inactive
    +                        INACTIVE = 0x0,
    +                        ///  START_DET interrupt is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  Set only when a General Call address is received and it is acknowledged. It stays set until it is cleared either by disabling DW_apb_i2c or when the CPU reads bit 0 of the IC_CLR_GEN_CALL register. DW_apb_i2c stores the received data in the Rx buffer.
    +                ///  Reset value: 0x0
    +                GEN_CALL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  GEN_CALL interrupt is inactive
    +                        INACTIVE = 0x0,
    +                        ///  GEN_CALL interrupt is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  Indicates whether a RESTART condition has occurred on the I2C interface when DW_apb_i2c is operating in Slave mode and the slave is being addressed. Enabled only when IC_SLV_RESTART_DET_EN=1.
    +                ///  Note: However, in high-speed mode or during a START BYTE transfer, the RESTART comes before the address field as per the I2C protocol. In this case, the slave is not the addressed slave when the RESTART is issued, therefore DW_apb_i2c does not generate the RESTART_DET interrupt.
    +                ///  Reset value: 0x0
    +                RESTART_DET: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  RESTART_DET interrupt is inactive
    +                        INACTIVE = 0x0,
    +                        ///  RESTART_DET interrupt is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                padding: u19,
    +            }),
    +            ///  I2C Receive FIFO Threshold Register
    +            IC_RX_TL: mmio.Mmio(packed struct(u32) {
    +                ///  Receive FIFO Threshold Level.
    +                ///  Controls the level of entries (or above) that triggers the RX_FULL interrupt (bit 2 in IC_RAW_INTR_STAT register). The valid range is 0-255, with the additional restriction that hardware does not allow this value to be set to a value larger than the depth of the buffer. If an attempt is made to do that, the actual value set will be the maximum depth of the buffer. A value of 0 sets the threshold for 1 entry, and a value of 255 sets the threshold for 256 entries.
    +                RX_TL: u8,
    +                padding: u24,
    +            }),
    +            ///  I2C Transmit FIFO Threshold Register
    +            IC_TX_TL: mmio.Mmio(packed struct(u32) {
    +                ///  Transmit FIFO Threshold Level.
    +                ///  Controls the level of entries (or below) that trigger the TX_EMPTY interrupt (bit 4 in IC_RAW_INTR_STAT register). The valid range is 0-255, with the additional restriction that it may not be set to value larger than the depth of the buffer. If an attempt is made to do that, the actual value set will be the maximum depth of the buffer. A value of 0 sets the threshold for 0 entries, and a value of 255 sets the threshold for 255 entries.
    +                TX_TL: u8,
    +                padding: u24,
    +            }),
    +            ///  Clear Combined and Individual Interrupt Register
    +            IC_CLR_INTR: mmio.Mmio(packed struct(u32) {
    +                ///  Read this register to clear the combined interrupt, all individual interrupts, and the IC_TX_ABRT_SOURCE register. This bit does not clear hardware clearable interrupts but software clearable interrupts. Refer to Bit 9 of the IC_TX_ABRT_SOURCE register for an exception to clearing IC_TX_ABRT_SOURCE.
    +                ///  Reset value: 0x0
    +                CLR_INTR: u1,
    +                padding: u31,
    +            }),
    +            ///  Clear RX_UNDER Interrupt Register
    +            IC_CLR_RX_UNDER: mmio.Mmio(packed struct(u32) {
    +                ///  Read this register to clear the RX_UNDER interrupt (bit 0) of the IC_RAW_INTR_STAT register.
    +                ///  Reset value: 0x0
    +                CLR_RX_UNDER: u1,
    +                padding: u31,
    +            }),
    +            ///  Clear RX_OVER Interrupt Register
    +            IC_CLR_RX_OVER: mmio.Mmio(packed struct(u32) {
    +                ///  Read this register to clear the RX_OVER interrupt (bit 1) of the IC_RAW_INTR_STAT register.
    +                ///  Reset value: 0x0
    +                CLR_RX_OVER: u1,
    +                padding: u31,
    +            }),
    +            ///  Clear TX_OVER Interrupt Register
    +            IC_CLR_TX_OVER: mmio.Mmio(packed struct(u32) {
    +                ///  Read this register to clear the TX_OVER interrupt (bit 3) of the IC_RAW_INTR_STAT register.
    +                ///  Reset value: 0x0
    +                CLR_TX_OVER: u1,
    +                padding: u31,
    +            }),
    +            ///  Clear RD_REQ Interrupt Register
    +            IC_CLR_RD_REQ: mmio.Mmio(packed struct(u32) {
    +                ///  Read this register to clear the RD_REQ interrupt (bit 5) of the IC_RAW_INTR_STAT register.
    +                ///  Reset value: 0x0
    +                CLR_RD_REQ: u1,
    +                padding: u31,
    +            }),
    +            ///  Clear TX_ABRT Interrupt Register
    +            IC_CLR_TX_ABRT: mmio.Mmio(packed struct(u32) {
    +                ///  Read this register to clear the TX_ABRT interrupt (bit 6) of the IC_RAW_INTR_STAT register, and the IC_TX_ABRT_SOURCE register. This also releases the TX FIFO from the flushed/reset state, allowing more writes to the TX FIFO. Refer to Bit 9 of the IC_TX_ABRT_SOURCE register for an exception to clearing IC_TX_ABRT_SOURCE.
    +                ///  Reset value: 0x0
    +                CLR_TX_ABRT: u1,
    +                padding: u31,
    +            }),
    +            ///  Clear RX_DONE Interrupt Register
    +            IC_CLR_RX_DONE: mmio.Mmio(packed struct(u32) {
    +                ///  Read this register to clear the RX_DONE interrupt (bit 7) of the IC_RAW_INTR_STAT register.
    +                ///  Reset value: 0x0
    +                CLR_RX_DONE: u1,
    +                padding: u31,
    +            }),
    +            ///  Clear ACTIVITY Interrupt Register
    +            IC_CLR_ACTIVITY: mmio.Mmio(packed struct(u32) {
    +                ///  Reading this register clears the ACTIVITY interrupt if the I2C is not active anymore. If the I2C module is still active on the bus, the ACTIVITY interrupt bit continues to be set. It is automatically cleared by hardware if the module is disabled and if there is no further activity on the bus. The value read from this register to get status of the ACTIVITY interrupt (bit 8) of the IC_RAW_INTR_STAT register.
    +                ///  Reset value: 0x0
    +                CLR_ACTIVITY: u1,
    +                padding: u31,
    +            }),
    +            ///  Clear STOP_DET Interrupt Register
    +            IC_CLR_STOP_DET: mmio.Mmio(packed struct(u32) {
    +                ///  Read this register to clear the STOP_DET interrupt (bit 9) of the IC_RAW_INTR_STAT register.
    +                ///  Reset value: 0x0
    +                CLR_STOP_DET: u1,
    +                padding: u31,
    +            }),
    +            ///  Clear START_DET Interrupt Register
    +            IC_CLR_START_DET: mmio.Mmio(packed struct(u32) {
    +                ///  Read this register to clear the START_DET interrupt (bit 10) of the IC_RAW_INTR_STAT register.
    +                ///  Reset value: 0x0
    +                CLR_START_DET: u1,
    +                padding: u31,
    +            }),
    +            ///  Clear GEN_CALL Interrupt Register
    +            IC_CLR_GEN_CALL: mmio.Mmio(packed struct(u32) {
    +                ///  Read this register to clear the GEN_CALL interrupt (bit 11) of IC_RAW_INTR_STAT register.
    +                ///  Reset value: 0x0
    +                CLR_GEN_CALL: u1,
    +                padding: u31,
    +            }),
    +            ///  I2C Enable Register
    +            IC_ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Controls whether the DW_apb_i2c is enabled. - 0: Disables DW_apb_i2c (TX and RX FIFOs are held in an erased state) - 1: Enables DW_apb_i2c Software can disable DW_apb_i2c while it is active. However, it is important that care be taken to ensure that DW_apb_i2c is disabled properly. A recommended procedure is described in 'Disabling DW_apb_i2c'.
    +                ///  When DW_apb_i2c is disabled, the following occurs: - The TX FIFO and RX FIFO get flushed. - Status bits in the IC_INTR_STAT register are still active until DW_apb_i2c goes into IDLE state. If the module is transmitting, it stops as well as deletes the contents of the transmit buffer after the current transfer is complete. If the module is receiving, the DW_apb_i2c stops the current transfer at the end of the current byte and does not acknowledge the transfer.
    +                ///  In systems with asynchronous pclk and ic_clk when IC_CLK_TYPE parameter set to asynchronous (1), there is a two ic_clk delay when enabling or disabling the DW_apb_i2c. For a detailed description on how to disable DW_apb_i2c, refer to 'Disabling DW_apb_i2c'
    +                ///  Reset value: 0x0
    +                ENABLE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  I2C is disabled
    +                        DISABLED = 0x0,
    +                        ///  I2C is enabled
    +                        ENABLED = 0x1,
    +                    },
    +                },
    +                ///  When set, the controller initiates the transfer abort. - 0: ABORT not initiated or ABORT done - 1: ABORT operation in progress The software can abort the I2C transfer in master mode by setting this bit. The software can set this bit only when ENABLE is already set; otherwise, the controller ignores any write to ABORT bit. The software cannot clear the ABORT bit once set. In response to an ABORT, the controller issues a STOP and flushes the Tx FIFO after completing the current transfer, then sets the TX_ABORT interrupt after the abort operation. The ABORT bit is cleared automatically after the abort operation.
    +                ///  For a detailed description on how to abort I2C transfers, refer to 'Aborting I2C Transfers'.
    +                ///  Reset value: 0x0
    +                ABORT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  ABORT operation not in progress
    +                        DISABLE = 0x0,
    +                        ///  ABORT operation in progress
    +                        ENABLED = 0x1,
    +                    },
    +                },
    +                ///  In Master mode: - 1'b1: Blocks the transmission of data on I2C bus even if Tx FIFO has data to transmit. - 1'b0: The transmission of data starts on I2C bus automatically, as soon as the first data is available in the Tx FIFO. Note: To block the execution of Master commands, set the TX_CMD_BLOCK bit only when Tx FIFO is empty (IC_STATUS[2]==1) and Master is in Idle state (IC_STATUS[5] == 0). Any further commands put in the Tx FIFO are not executed until TX_CMD_BLOCK bit is unset. Reset value: IC_TX_CMD_BLOCK_DEFAULT
    +                TX_CMD_BLOCK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Tx Command execution not blocked
    +                        NOT_BLOCKED = 0x0,
    +                        ///  Tx Command execution blocked
    +                        BLOCKED = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            ///  I2C Status Register
    +            ///  This is a read-only register used to indicate the current transfer status and FIFO status. The status register may be read at any time. None of the bits in this register request an interrupt.
    +            ///  When the I2C is disabled by writing 0 in bit 0 of the IC_ENABLE register: - Bits 1 and 2 are set to 1 - Bits 3 and 10 are set to 0 When the master or slave state machines goes to idle and ic_en=0: - Bits 5 and 6 are set to 0
    +            IC_STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  I2C Activity Status. Reset value: 0x0
    +                ACTIVITY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  I2C is idle
    +                        INACTIVE = 0x0,
    +                        ///  I2C is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  Transmit FIFO Not Full. Set when the transmit FIFO contains one or more empty locations, and is cleared when the FIFO is full. - 0: Transmit FIFO is full - 1: Transmit FIFO is not full Reset value: 0x1
    +                TFNF: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Tx FIFO is full
    +                        FULL = 0x0,
    +                        ///  Tx FIFO not full
    +                        NOT_FULL = 0x1,
    +                    },
    +                },
    +                ///  Transmit FIFO Completely Empty. When the transmit FIFO is completely empty, this bit is set. When it contains one or more valid entries, this bit is cleared. This bit field does not request an interrupt. - 0: Transmit FIFO is not empty - 1: Transmit FIFO is empty Reset value: 0x1
    +                TFE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Tx FIFO not empty
    +                        NON_EMPTY = 0x0,
    +                        ///  Tx FIFO is empty
    +                        EMPTY = 0x1,
    +                    },
    +                },
    +                ///  Receive FIFO Not Empty. This bit is set when the receive FIFO contains one or more entries; it is cleared when the receive FIFO is empty. - 0: Receive FIFO is empty - 1: Receive FIFO is not empty Reset value: 0x0
    +                RFNE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Rx FIFO is empty
    +                        EMPTY = 0x0,
    +                        ///  Rx FIFO not empty
    +                        NOT_EMPTY = 0x1,
    +                    },
    +                },
    +                ///  Receive FIFO Completely Full. When the receive FIFO is completely full, this bit is set. When the receive FIFO contains one or more empty location, this bit is cleared. - 0: Receive FIFO is not full - 1: Receive FIFO is full Reset value: 0x0
    +                RFF: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Rx FIFO not full
    +                        NOT_FULL = 0x0,
    +                        ///  Rx FIFO is full
    +                        FULL = 0x1,
    +                    },
    +                },
    +                ///  Master FSM Activity Status. When the Master Finite State Machine (FSM) is not in the IDLE state, this bit is set. - 0: Master FSM is in IDLE state so the Master part of DW_apb_i2c is not Active - 1: Master FSM is not in IDLE state so the Master part of DW_apb_i2c is Active Note: IC_STATUS[0]-that is, ACTIVITY bit-is the OR of SLV_ACTIVITY and MST_ACTIVITY bits.
    +                ///  Reset value: 0x0
    +                MST_ACTIVITY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Master is idle
    +                        IDLE = 0x0,
    +                        ///  Master not idle
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  Slave FSM Activity Status. When the Slave Finite State Machine (FSM) is not in the IDLE state, this bit is set. - 0: Slave FSM is in IDLE state so the Slave part of DW_apb_i2c is not Active - 1: Slave FSM is not in IDLE state so the Slave part of DW_apb_i2c is Active Reset value: 0x0
    +                SLV_ACTIVITY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Slave is idle
    +                        IDLE = 0x0,
    +                        ///  Slave not idle
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                padding: u25,
    +            }),
    +            ///  I2C Transmit FIFO Level Register This register contains the number of valid data entries in the transmit FIFO buffer. It is cleared whenever: - The I2C is disabled - There is a transmit abort - that is, TX_ABRT bit is set in the IC_RAW_INTR_STAT register - The slave bulk transmit mode is aborted The register increments whenever data is placed into the transmit FIFO and decrements when data is taken from the transmit FIFO.
    +            IC_TXFLR: mmio.Mmio(packed struct(u32) {
    +                ///  Transmit FIFO Level. Contains the number of valid data entries in the transmit FIFO.
    +                ///  Reset value: 0x0
    +                TXFLR: u5,
    +                padding: u27,
    +            }),
    +            ///  I2C Receive FIFO Level Register This register contains the number of valid data entries in the receive FIFO buffer. It is cleared whenever: - The I2C is disabled - Whenever there is a transmit abort caused by any of the events tracked in IC_TX_ABRT_SOURCE The register increments whenever data is placed into the receive FIFO and decrements when data is taken from the receive FIFO.
    +            IC_RXFLR: mmio.Mmio(packed struct(u32) {
    +                ///  Receive FIFO Level. Contains the number of valid data entries in the receive FIFO.
    +                ///  Reset value: 0x0
    +                RXFLR: u5,
    +                padding: u27,
    +            }),
    +            ///  I2C SDA Hold Time Length Register
    +            ///  The bits [15:0] of this register are used to control the hold time of SDA during transmit in both slave and master mode (after SCL goes from HIGH to LOW).
    +            ///  The bits [23:16] of this register are used to extend the SDA transition (if any) whenever SCL is HIGH in the receiver in either master or slave mode.
    +            ///  Writes to this register succeed only when IC_ENABLE[0]=0.
    +            ///  The values in this register are in units of ic_clk period. The value programmed in IC_SDA_TX_HOLD must be greater than the minimum hold time in each mode (one cycle in master mode, seven cycles in slave mode) for the value to be implemented.
    +            ///  The programmed SDA hold time during transmit (IC_SDA_TX_HOLD) cannot exceed at any time the duration of the low part of scl. Therefore the programmed value cannot be larger than N_SCL_LOW-2, where N_SCL_LOW is the duration of the low part of the scl period measured in ic_clk cycles.
    +            IC_SDA_HOLD: mmio.Mmio(packed struct(u32) {
    +                ///  Sets the required SDA hold time in units of ic_clk period, when DW_apb_i2c acts as a transmitter.
    +                ///  Reset value: IC_DEFAULT_SDA_HOLD[15:0].
    +                IC_SDA_TX_HOLD: u16,
    +                ///  Sets the required SDA hold time in units of ic_clk period, when DW_apb_i2c acts as a receiver.
    +                ///  Reset value: IC_DEFAULT_SDA_HOLD[23:16].
    +                IC_SDA_RX_HOLD: u8,
    +                padding: u8,
    +            }),
    +            ///  I2C Transmit Abort Source Register
    +            ///  This register has 32 bits that indicate the source of the TX_ABRT bit. Except for Bit 9, this register is cleared whenever the IC_CLR_TX_ABRT register or the IC_CLR_INTR register is read. To clear Bit 9, the source of the ABRT_SBYTE_NORSTRT must be fixed first; RESTART must be enabled (IC_CON[5]=1), the SPECIAL bit must be cleared (IC_TAR[11]), or the GC_OR_START bit must be cleared (IC_TAR[10]).
    +            ///  Once the source of the ABRT_SBYTE_NORSTRT is fixed, then this bit can be cleared in the same manner as other bits in this register. If the source of the ABRT_SBYTE_NORSTRT is not fixed before attempting to clear this bit, Bit 9 clears for one cycle and is then re-asserted.
    +            IC_TX_ABRT_SOURCE: mmio.Mmio(packed struct(u32) {
    +                ///  This field indicates that the Master is in 7-bit addressing mode and the address sent was not acknowledged by any slave.
    +                ///  Reset value: 0x0
    +                ///  Role of DW_apb_i2c: Master-Transmitter or Master-Receiver
    +                ABRT_7B_ADDR_NOACK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  This abort is not generated
    +                        INACTIVE = 0x0,
    +                        ///  This abort is generated because of NOACK for 7-bit address
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  This field indicates that the Master is in 10-bit address mode and the first 10-bit address byte was not acknowledged by any slave.
    +                ///  Reset value: 0x0
    +                ///  Role of DW_apb_i2c: Master-Transmitter or Master-Receiver
    +                ABRT_10ADDR1_NOACK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  This abort is not generated
    +                        INACTIVE = 0x0,
    +                        ///  Byte 1 of 10Bit Address not ACKed by any slave
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  This field indicates that the Master is in 10-bit address mode and that the second address byte of the 10-bit address was not acknowledged by any slave.
    +                ///  Reset value: 0x0
    +                ///  Role of DW_apb_i2c: Master-Transmitter or Master-Receiver
    +                ABRT_10ADDR2_NOACK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  This abort is not generated
    +                        INACTIVE = 0x0,
    +                        ///  Byte 2 of 10Bit Address not ACKed by any slave
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  This field indicates the master-mode only bit. When the master receives an acknowledgement for the address, but when it sends data byte(s) following the address, it did not receive an acknowledge from the remote slave(s).
    +                ///  Reset value: 0x0
    +                ///  Role of DW_apb_i2c: Master-Transmitter
    +                ABRT_TXDATA_NOACK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Transmitted data non-ACKed by addressed slave-scenario not present
    +                        ABRT_TXDATA_NOACK_VOID = 0x0,
    +                        ///  Transmitted data not ACKed by addressed slave
    +                        ABRT_TXDATA_NOACK_GENERATED = 0x1,
    +                    },
    +                },
    +                ///  This field indicates that DW_apb_i2c in master mode has sent a General Call and no slave on the bus acknowledged the General Call.
    +                ///  Reset value: 0x0
    +                ///  Role of DW_apb_i2c: Master-Transmitter
    +                ABRT_GCALL_NOACK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  GCALL not ACKed by any slave-scenario not present
    +                        ABRT_GCALL_NOACK_VOID = 0x0,
    +                        ///  GCALL not ACKed by any slave
    +                        ABRT_GCALL_NOACK_GENERATED = 0x1,
    +                    },
    +                },
    +                ///  This field indicates that DW_apb_i2c in the master mode has sent a General Call but the user programmed the byte following the General Call to be a read from the bus (IC_DATA_CMD[9] is set to 1).
    +                ///  Reset value: 0x0
    +                ///  Role of DW_apb_i2c: Master-Transmitter
    +                ABRT_GCALL_READ: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  GCALL is followed by read from bus-scenario not present
    +                        ABRT_GCALL_READ_VOID = 0x0,
    +                        ///  GCALL is followed by read from bus
    +                        ABRT_GCALL_READ_GENERATED = 0x1,
    +                    },
    +                },
    +                ///  This field indicates that the Master is in High Speed mode and the High Speed Master code was acknowledged (wrong behavior).
    +                ///  Reset value: 0x0
    +                ///  Role of DW_apb_i2c: Master
    +                ABRT_HS_ACKDET: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  HS Master code ACKed in HS Mode- scenario not present
    +                        ABRT_HS_ACK_VOID = 0x0,
    +                        ///  HS Master code ACKed in HS Mode
    +                        ABRT_HS_ACK_GENERATED = 0x1,
    +                    },
    +                },
    +                ///  This field indicates that the Master has sent a START Byte and the START Byte was acknowledged (wrong behavior).
    +                ///  Reset value: 0x0
    +                ///  Role of DW_apb_i2c: Master
    +                ABRT_SBYTE_ACKDET: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  ACK detected for START byte- scenario not present
    +                        ABRT_SBYTE_ACKDET_VOID = 0x0,
    +                        ///  ACK detected for START byte
    +                        ABRT_SBYTE_ACKDET_GENERATED = 0x1,
    +                    },
    +                },
    +                ///  This field indicates that the restart is disabled (IC_RESTART_EN bit (IC_CON[5]) =0) and the user is trying to use the master to transfer data in High Speed mode.
    +                ///  Reset value: 0x0
    +                ///  Role of DW_apb_i2c: Master-Transmitter or Master-Receiver
    +                ABRT_HS_NORSTRT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  User trying to switch Master to HS mode when RESTART disabled- scenario not present
    +                        ABRT_HS_NORSTRT_VOID = 0x0,
    +                        ///  User trying to switch Master to HS mode when RESTART disabled
    +                        ABRT_HS_NORSTRT_GENERATED = 0x1,
    +                    },
    +                },
    +                ///  To clear Bit 9, the source of the ABRT_SBYTE_NORSTRT must be fixed first; restart must be enabled (IC_CON[5]=1), the SPECIAL bit must be cleared (IC_TAR[11]), or the GC_OR_START bit must be cleared (IC_TAR[10]). Once the source of the ABRT_SBYTE_NORSTRT is fixed, then this bit can be cleared in the same manner as other bits in this register. If the source of the ABRT_SBYTE_NORSTRT is not fixed before attempting to clear this bit, bit 9 clears for one cycle and then gets reasserted. When this field is set to 1, the restart is disabled (IC_RESTART_EN bit (IC_CON[5]) =0) and the user is trying to send a START Byte.
    +                ///  Reset value: 0x0
    +                ///  Role of DW_apb_i2c: Master
    +                ABRT_SBYTE_NORSTRT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  User trying to send START byte when RESTART disabled- scenario not present
    +                        ABRT_SBYTE_NORSTRT_VOID = 0x0,
    +                        ///  User trying to send START byte when RESTART disabled
    +                        ABRT_SBYTE_NORSTRT_GENERATED = 0x1,
    +                    },
    +                },
    +                ///  This field indicates that the restart is disabled (IC_RESTART_EN bit (IC_CON[5]) =0) and the master sends a read command in 10-bit addressing mode.
    +                ///  Reset value: 0x0
    +                ///  Role of DW_apb_i2c: Master-Receiver
    +                ABRT_10B_RD_NORSTRT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Master not trying to read in 10Bit addressing mode when RESTART disabled
    +                        ABRT_10B_RD_VOID = 0x0,
    +                        ///  Master trying to read in 10Bit addressing mode when RESTART disabled
    +                        ABRT_10B_RD_GENERATED = 0x1,
    +                    },
    +                },
    +                ///  This field indicates that the User tries to initiate a Master operation with the Master mode disabled.
    +                ///  Reset value: 0x0
    +                ///  Role of DW_apb_i2c: Master-Transmitter or Master-Receiver
    +                ABRT_MASTER_DIS: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  User initiating master operation when MASTER disabled- scenario not present
    +                        ABRT_MASTER_DIS_VOID = 0x0,
    +                        ///  User initiating master operation when MASTER disabled
    +                        ABRT_MASTER_DIS_GENERATED = 0x1,
    +                    },
    +                },
    +                ///  This field specifies that the Master has lost arbitration, or if IC_TX_ABRT_SOURCE[14] is also set, then the slave transmitter has lost arbitration.
    +                ///  Reset value: 0x0
    +                ///  Role of DW_apb_i2c: Master-Transmitter or Slave-Transmitter
    +                ARB_LOST: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Master or Slave-Transmitter lost arbitration- scenario not present
    +                        ABRT_LOST_VOID = 0x0,
    +                        ///  Master or Slave-Transmitter lost arbitration
    +                        ABRT_LOST_GENERATED = 0x1,
    +                    },
    +                },
    +                ///  This field specifies that the Slave has received a read command and some data exists in the TX FIFO, so the slave issues a TX_ABRT interrupt to flush old data in TX FIFO.
    +                ///  Reset value: 0x0
    +                ///  Role of DW_apb_i2c: Slave-Transmitter
    +                ABRT_SLVFLUSH_TXFIFO: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Slave flushes existing data in TX-FIFO upon getting read command- scenario not present
    +                        ABRT_SLVFLUSH_TXFIFO_VOID = 0x0,
    +                        ///  Slave flushes existing data in TX-FIFO upon getting read command
    +                        ABRT_SLVFLUSH_TXFIFO_GENERATED = 0x1,
    +                    },
    +                },
    +                ///  This field indicates that a Slave has lost the bus while transmitting data to a remote master. IC_TX_ABRT_SOURCE[12] is set at the same time. Note: Even though the slave never 'owns' the bus, something could go wrong on the bus. This is a fail safe check. For instance, during a data transmission at the low-to-high transition of SCL, if what is on the data bus is not what is supposed to be transmitted, then DW_apb_i2c no longer own the bus.
    +                ///  Reset value: 0x0
    +                ///  Role of DW_apb_i2c: Slave-Transmitter
    +                ABRT_SLV_ARBLOST: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Slave lost arbitration to remote master- scenario not present
    +                        ABRT_SLV_ARBLOST_VOID = 0x0,
    +                        ///  Slave lost arbitration to remote master
    +                        ABRT_SLV_ARBLOST_GENERATED = 0x1,
    +                    },
    +                },
    +                ///  1: When the processor side responds to a slave mode request for data to be transmitted to a remote master and user writes a 1 in CMD (bit 8) of IC_DATA_CMD register.
    +                ///  Reset value: 0x0
    +                ///  Role of DW_apb_i2c: Slave-Transmitter
    +                ABRT_SLVRD_INTX: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Slave trying to transmit to remote master in read mode- scenario not present
    +                        ABRT_SLVRD_INTX_VOID = 0x0,
    +                        ///  Slave trying to transmit to remote master in read mode
    +                        ABRT_SLVRD_INTX_GENERATED = 0x1,
    +                    },
    +                },
    +                ///  This is a master-mode-only bit. Master has detected the transfer abort (IC_ENABLE[1])
    +                ///  Reset value: 0x0
    +                ///  Role of DW_apb_i2c: Master-Transmitter
    +                ABRT_USER_ABRT: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Transfer abort detected by master- scenario not present
    +                        ABRT_USER_ABRT_VOID = 0x0,
    +                        ///  Transfer abort detected by master
    +                        ABRT_USER_ABRT_GENERATED = 0x1,
    +                    },
    +                },
    +                reserved23: u6,
    +                ///  This field indicates the number of Tx FIFO Data Commands which are flushed due to TX_ABRT interrupt. It is cleared whenever I2C is disabled.
    +                ///  Reset value: 0x0
    +                ///  Role of DW_apb_i2c: Master-Transmitter or Slave-Transmitter
    +                TX_FLUSH_CNT: u9,
    +            }),
    +            ///  Generate Slave Data NACK Register
    +            ///  The register is used to generate a NACK for the data part of a transfer when DW_apb_i2c is acting as a slave-receiver. This register only exists when the IC_SLV_DATA_NACK_ONLY parameter is set to 1. When this parameter disabled, this register does not exist and writing to the register's address has no effect.
    +            ///  A write can occur on this register if both of the following conditions are met: - DW_apb_i2c is disabled (IC_ENABLE[0] = 0) - Slave part is inactive (IC_STATUS[6] = 0) Note: The IC_STATUS[6] is a register read-back location for the internal slv_activity signal; the user should poll this before writing the ic_slv_data_nack_only bit.
    +            IC_SLV_DATA_NACK_ONLY: mmio.Mmio(packed struct(u32) {
    +                ///  Generate NACK. This NACK generation only occurs when DW_apb_i2c is a slave-receiver. If this register is set to a value of 1, it can only generate a NACK after a data byte is received; hence, the data transfer is aborted and the data received is not pushed to the receive buffer.
    +                ///  When the register is set to a value of 0, it generates NACK/ACK, depending on normal criteria. - 1: generate NACK after data byte received - 0: generate NACK/ACK normally Reset value: 0x0
    +                NACK: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Slave receiver generates NACK normally
    +                        DISABLED = 0x0,
    +                        ///  Slave receiver generates NACK upon data reception only
    +                        ENABLED = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  DMA Control Register
    +            ///  The register is used to enable the DMA Controller interface operation. There is a separate bit for transmit and receive. This can be programmed regardless of the state of IC_ENABLE.
    +            IC_DMA_CR: mmio.Mmio(packed struct(u32) {
    +                ///  Receive DMA Enable. This bit enables/disables the receive FIFO DMA channel. Reset value: 0x0
    +                RDMAE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Receive FIFO DMA channel disabled
    +                        DISABLED = 0x0,
    +                        ///  Receive FIFO DMA channel enabled
    +                        ENABLED = 0x1,
    +                    },
    +                },
    +                ///  Transmit DMA Enable. This bit enables/disables the transmit FIFO DMA channel. Reset value: 0x0
    +                TDMAE: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  transmit FIFO DMA channel disabled
    +                        DISABLED = 0x0,
    +                        ///  Transmit FIFO DMA channel enabled
    +                        ENABLED = 0x1,
    +                    },
    +                },
    +                padding: u30,
    +            }),
    +            ///  DMA Transmit Data Level Register
    +            IC_DMA_TDLR: mmio.Mmio(packed struct(u32) {
    +                ///  Transmit Data Level. This bit field controls the level at which a DMA request is made by the transmit logic. It is equal to the watermark level; that is, the dma_tx_req signal is generated when the number of valid data entries in the transmit FIFO is equal to or below this field value, and TDMAE = 1.
    +                ///  Reset value: 0x0
    +                DMATDL: u4,
    +                padding: u28,
    +            }),
    +            ///  I2C Receive Data Level Register
    +            IC_DMA_RDLR: mmio.Mmio(packed struct(u32) {
    +                ///  Receive Data Level. This bit field controls the level at which a DMA request is made by the receive logic. The watermark level = DMARDL+1; that is, dma_rx_req is generated when the number of valid data entries in the receive FIFO is equal to or more than this field value + 1, and RDMAE =1. For instance, when DMARDL is 0, then dma_rx_req is asserted when 1 or more data entries are present in the receive FIFO.
    +                ///  Reset value: 0x0
    +                DMARDL: u4,
    +                padding: u28,
    +            }),
    +            ///  I2C SDA Setup Register
    +            ///  This register controls the amount of time delay (in terms of number of ic_clk clock periods) introduced in the rising edge of SCL - relative to SDA changing - when DW_apb_i2c services a read request in a slave-transmitter operation. The relevant I2C requirement is tSU:DAT (note 4) as detailed in the I2C Bus Specification. This register must be programmed with a value equal to or greater than 2.
    +            ///  Writes to this register succeed only when IC_ENABLE[0] = 0.
    +            ///  Note: The length of setup time is calculated using [(IC_SDA_SETUP - 1) * (ic_clk_period)], so if the user requires 10 ic_clk periods of setup time, they should program a value of 11. The IC_SDA_SETUP register is only used by the DW_apb_i2c when operating as a slave transmitter.
    +            IC_SDA_SETUP: mmio.Mmio(packed struct(u32) {
    +                ///  SDA Setup. It is recommended that if the required delay is 1000ns, then for an ic_clk frequency of 10 MHz, IC_SDA_SETUP should be programmed to a value of 11. IC_SDA_SETUP must be programmed with a minimum value of 2.
    +                SDA_SETUP: u8,
    +                padding: u24,
    +            }),
    +            ///  I2C ACK General Call Register
    +            ///  The register controls whether DW_apb_i2c responds with a ACK or NACK when it receives an I2C General Call address.
    +            ///  This register is applicable only when the DW_apb_i2c is in slave mode.
    +            IC_ACK_GENERAL_CALL: mmio.Mmio(packed struct(u32) {
    +                ///  ACK General Call. When set to 1, DW_apb_i2c responds with a ACK (by asserting ic_data_oe) when it receives a General Call. Otherwise, DW_apb_i2c responds with a NACK (by negating ic_data_oe).
    +                ACK_GEN_CALL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Generate NACK for a General Call
    +                        DISABLED = 0x0,
    +                        ///  Generate ACK for a General Call
    +                        ENABLED = 0x1,
    +                    },
    +                },
    +                padding: u31,
    +            }),
    +            ///  I2C Enable Status Register
    +            ///  The register is used to report the DW_apb_i2c hardware status when the IC_ENABLE[0] register is set from 1 to 0; that is, when DW_apb_i2c is disabled.
    +            ///  If IC_ENABLE[0] has been set to 1, bits 2:1 are forced to 0, and bit 0 is forced to 1.
    +            ///  If IC_ENABLE[0] has been set to 0, bits 2:1 is only be valid as soon as bit 0 is read as '0'.
    +            ///  Note: When IC_ENABLE[0] has been set to 0, a delay occurs for bit 0 to be read as 0 because disabling the DW_apb_i2c depends on I2C bus activities.
    +            IC_ENABLE_STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  ic_en Status. This bit always reflects the value driven on the output port ic_en. - When read as 1, DW_apb_i2c is deemed to be in an enabled state. - When read as 0, DW_apb_i2c is deemed completely inactive. Note: The CPU can safely read this bit anytime. When this bit is read as 0, the CPU can safely read SLV_RX_DATA_LOST (bit 2) and SLV_DISABLED_WHILE_BUSY (bit 1).
    +                ///  Reset value: 0x0
    +                IC_EN: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  I2C disabled
    +                        DISABLED = 0x0,
    +                        ///  I2C enabled
    +                        ENABLED = 0x1,
    +                    },
    +                },
    +                ///  Slave Disabled While Busy (Transmit, Receive). This bit indicates if a potential or active Slave operation has been aborted due to the setting bit 0 of the IC_ENABLE register from 1 to 0. This bit is set when the CPU writes a 0 to the IC_ENABLE register while:
    +                ///  (a) DW_apb_i2c is receiving the address byte of the Slave-Transmitter operation from a remote master;
    +                ///  OR,
    +                ///  (b) address and data bytes of the Slave-Receiver operation from a remote master.
    +                ///  When read as 1, DW_apb_i2c is deemed to have forced a NACK during any part of an I2C transfer, irrespective of whether the I2C address matches the slave address set in DW_apb_i2c (IC_SAR register) OR if the transfer is completed before IC_ENABLE is set to 0 but has not taken effect.
    +                ///  Note: If the remote I2C master terminates the transfer with a STOP condition before the DW_apb_i2c has a chance to NACK a transfer, and IC_ENABLE[0] has been set to 0, then this bit will also be set to 1.
    +                ///  When read as 0, DW_apb_i2c is deemed to have been disabled when there is master activity, or when the I2C bus is idle.
    +                ///  Note: The CPU can safely read this bit when IC_EN (bit 0) is read as 0.
    +                ///  Reset value: 0x0
    +                SLV_DISABLED_WHILE_BUSY: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Slave is disabled when it is idle
    +                        INACTIVE = 0x0,
    +                        ///  Slave is disabled when it is active
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                ///  Slave Received Data Lost. This bit indicates if a Slave-Receiver operation has been aborted with at least one data byte received from an I2C transfer due to the setting bit 0 of IC_ENABLE from 1 to 0. When read as 1, DW_apb_i2c is deemed to have been actively engaged in an aborted I2C transfer (with matching address) and the data phase of the I2C transfer has been entered, even though a data byte has been responded with a NACK.
    +                ///  Note: If the remote I2C master terminates the transfer with a STOP condition before the DW_apb_i2c has a chance to NACK a transfer, and IC_ENABLE[0] has been set to 0, then this bit is also set to 1.
    +                ///  When read as 0, DW_apb_i2c is deemed to have been disabled without being actively involved in the data phase of a Slave-Receiver transfer.
    +                ///  Note: The CPU can safely read this bit when IC_EN (bit 0) is read as 0.
    +                ///  Reset value: 0x0
    +                SLV_RX_DATA_LOST: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  Slave RX Data is not lost
    +                        INACTIVE = 0x0,
    +                        ///  Slave RX Data is lost
    +                        ACTIVE = 0x1,
    +                    },
    +                },
    +                padding: u29,
    +            }),
    +            ///  I2C SS, FS or FM+ spike suppression limit
    +            ///  This register is used to store the duration, measured in ic_clk cycles, of the longest spike that is filtered out by the spike suppression logic when the component is operating in SS, FS or FM+ modes. The relevant I2C requirement is tSP (table 4) as detailed in the I2C Bus Specification. This register must be programmed with a minimum value of 1.
    +            IC_FS_SPKLEN: mmio.Mmio(packed struct(u32) {
    +                ///  This register must be set before any I2C bus transaction can take place to ensure stable operation. This register sets the duration, measured in ic_clk cycles, of the longest spike in the SCL or SDA lines that will be filtered out by the spike suppression logic. This register can be written only when the I2C interface is disabled which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect. The minimum valid value is 1; hardware prevents values less than this being written, and if attempted results in 1 being set. or more information, refer to 'Spike Suppression'.
    +                IC_FS_SPKLEN: u8,
    +                padding: u24,
    +            }),
    +            reserved168: [4]u8,
    +            ///  Clear RESTART_DET Interrupt Register
    +            IC_CLR_RESTART_DET: mmio.Mmio(packed struct(u32) {
    +                ///  Read this register to clear the RESTART_DET interrupt (bit 12) of IC_RAW_INTR_STAT register.
    +                ///  Reset value: 0x0
    +                CLR_RESTART_DET: u1,
    +                padding: u31,
    +            }),
    +            reserved244: [72]u8,
    +            ///  Component Parameter Register 1
    +            ///  Note This register is not implemented and therefore reads as 0. If it was implemented it would be a constant read-only register that contains encoded information about the component's parameter settings. Fields shown below are the settings for those parameters
    +            IC_COMP_PARAM_1: mmio.Mmio(packed struct(u32) {
    +                ///  APB data bus width is 32 bits
    +                APB_DATA_WIDTH: u2,
    +                ///  MAX SPEED MODE = FAST MODE
    +                MAX_SPEED_MODE: u2,
    +                ///  Programmable count values for each mode.
    +                HC_COUNT_VALUES: u1,
    +                ///  COMBINED Interrupt outputs
    +                INTR_IO: u1,
    +                ///  DMA handshaking signals are enabled
    +                HAS_DMA: u1,
    +                ///  Encoded parameters not visible
    +                ADD_ENCODED_PARAMS: u1,
    +                ///  RX Buffer Depth = 16
    +                RX_BUFFER_DEPTH: u8,
    +                ///  TX Buffer Depth = 16
    +                TX_BUFFER_DEPTH: u8,
    +                padding: u8,
    +            }),
    +            ///  I2C Component Version Register
    +            IC_COMP_VERSION: mmio.Mmio(packed struct(u32) {
    +                IC_COMP_VERSION: u32,
    +            }),
    +            ///  I2C Component Type Register
    +            IC_COMP_TYPE: mmio.Mmio(packed struct(u32) {
    +                ///  Designware Component Type number = 0x44_57_01_40. This assigned unique hex value is constant and is derived from the two ASCII letters 'DW' followed by a 16-bit unsigned number.
    +                IC_COMP_TYPE: u32,
    +            }),
    +        };
    +
    +        ///  Programmable IO block
    +        pub const PIO0 = extern struct {
    +            ///  PIO control register
    +            CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  Enable/disable each of the four state machines by writing 1/0 to each of these four bits. When disabled, a state machine will cease executing instructions, except those written directly to SMx_INSTR by the system. Multiple bits can be set/cleared at once to run/halt multiple state machines simultaneously.
    +                SM_ENABLE: u4,
    +                ///  Write 1 to instantly clear internal SM state which may be otherwise difficult to access and will affect future execution.
    +                ///  Specifically, the following are cleared: input and output shift counters; the contents of the input shift register; the delay counter; the waiting-on-IRQ state; any stalled instruction written to SMx_INSTR or run by OUT/MOV EXEC; any pin write left asserted due to OUT_STICKY.
    +                SM_RESTART: u4,
    +                ///  Restart a state machine's clock divider from an initial phase of 0. Clock dividers are free-running, so once started, their output (including fractional jitter) is completely determined by the integer/fractional divisor configured in SMx_CLKDIV. This means that, if multiple clock dividers with the same divisor are restarted simultaneously, by writing multiple 1 bits to this field, the execution clocks of those state machines will run in precise lockstep.
    +                ///  Note that setting/clearing SM_ENABLE does not stop the clock divider from running, so once multiple state machines' clocks are synchronised, it is safe to disable/reenable a state machine, whilst keeping the clock dividers in sync.
    +                ///  Note also that CLKDIV_RESTART can be written to whilst the state machine is running, and this is useful to resynchronise clock dividers after the divisors (SMx_CLKDIV) have been changed on-the-fly.
    +                CLKDIV_RESTART: u4,
    +                padding: u20,
    +            }),
    +            ///  FIFO status register
    +            FSTAT: mmio.Mmio(packed struct(u32) {
    +                ///  State machine RX FIFO is full
    +                RXFULL: u4,
    +                reserved8: u4,
    +                ///  State machine RX FIFO is empty
    +                RXEMPTY: u4,
    +                reserved16: u4,
    +                ///  State machine TX FIFO is full
    +                TXFULL: u4,
    +                reserved24: u4,
    +                ///  State machine TX FIFO is empty
    +                TXEMPTY: u4,
    +                padding: u4,
    +            }),
    +            ///  FIFO debug register
    +            FDEBUG: mmio.Mmio(packed struct(u32) {
    +                ///  State machine has stalled on full RX FIFO during a blocking PUSH, or an IN with autopush enabled. This flag is also set when a nonblocking PUSH to a full FIFO took place, in which case the state machine has dropped data. Write 1 to clear.
    +                RXSTALL: u4,
    +                reserved8: u4,
    +                ///  RX FIFO underflow (i.e. read-on-empty by the system) has occurred. Write 1 to clear. Note that read-on-empty does not perturb the state of the FIFO in any way, but the data returned by reading from an empty FIFO is undefined, so this flag generally only becomes set due to some kind of software error.
    +                RXUNDER: u4,
    +                reserved16: u4,
    +                ///  TX FIFO overflow (i.e. write-on-full by the system) has occurred. Write 1 to clear. Note that write-on-full does not alter the state or contents of the FIFO in any way, but the data that the system attempted to write is dropped, so if this flag is set, your software has quite likely dropped some data on the floor.
    +                TXOVER: u4,
    +                reserved24: u4,
    +                ///  State machine has stalled on empty TX FIFO during a blocking PULL, or an OUT with autopull enabled. Write 1 to clear.
    +                TXSTALL: u4,
    +                padding: u4,
    +            }),
    +            ///  FIFO levels
    +            FLEVEL: mmio.Mmio(packed struct(u32) {
    +                TX0: u4,
    +                RX0: u4,
    +                TX1: u4,
    +                RX1: u4,
    +                TX2: u4,
    +                RX2: u4,
    +                TX3: u4,
    +                RX3: u4,
    +            }),
    +            ///  Direct write access to the TX FIFO for this state machine. Each write pushes one word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO.
    +            TXF0: u32,
    +            ///  Direct write access to the TX FIFO for this state machine. Each write pushes one word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO.
    +            TXF1: u32,
    +            ///  Direct write access to the TX FIFO for this state machine. Each write pushes one word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO.
    +            TXF2: u32,
    +            ///  Direct write access to the TX FIFO for this state machine. Each write pushes one word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO.
    +            TXF3: u32,
    +            ///  Direct read access to the RX FIFO for this state machine. Each read pops one word from the FIFO. Attempting to read from an empty FIFO has no effect on the FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The data returned to the system on a read from an empty FIFO is undefined.
    +            RXF0: u32,
    +            ///  Direct read access to the RX FIFO for this state machine. Each read pops one word from the FIFO. Attempting to read from an empty FIFO has no effect on the FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The data returned to the system on a read from an empty FIFO is undefined.
    +            RXF1: u32,
    +            ///  Direct read access to the RX FIFO for this state machine. Each read pops one word from the FIFO. Attempting to read from an empty FIFO has no effect on the FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The data returned to the system on a read from an empty FIFO is undefined.
    +            RXF2: u32,
    +            ///  Direct read access to the RX FIFO for this state machine. Each read pops one word from the FIFO. Attempting to read from an empty FIFO has no effect on the FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The data returned to the system on a read from an empty FIFO is undefined.
    +            RXF3: u32,
    +            ///  State machine IRQ flags register. Write 1 to clear. There are 8 state machine IRQ flags, which can be set, cleared, and waited on by the state machines. There's no fixed association between flags and state machines -- any state machine can use any flag.
    +            ///  Any of the 8 flags can be used for timing synchronisation between state machines, using IRQ and WAIT instructions. The lower four of these flags are also routed out to system-level interrupt requests, alongside FIFO status interrupts -- see e.g. IRQ0_INTE.
    +            IRQ: mmio.Mmio(packed struct(u32) {
    +                IRQ: u8,
    +                padding: u24,
    +            }),
    +            ///  Writing a 1 to each of these bits will forcibly assert the corresponding IRQ. Note this is different to the INTF register: writing here affects PIO internal state. INTF just asserts the processor-facing IRQ signal for testing ISRs, and is not visible to the state machines.
    +            IRQ_FORCE: mmio.Mmio(packed struct(u32) {
    +                IRQ_FORCE: u8,
    +                padding: u24,
    +            }),
    +            ///  There is a 2-flipflop synchronizer on each GPIO input, which protects PIO logic from metastabilities. This increases input delay, and for fast synchronous IO (e.g. SPI) these synchronizers may need to be bypassed. Each bit in this register corresponds to one GPIO.
    +            ///  0 -> input is synchronized (default)
    +            ///  1 -> synchronizer is bypassed
    +            ///  If in doubt, leave this register as all zeroes.
    +            INPUT_SYNC_BYPASS: u32,
    +            ///  Read to sample the pad output values PIO is currently driving to the GPIOs. On RP2040 there are 30 GPIOs, so the two most significant bits are hardwired to 0.
    +            DBG_PADOUT: u32,
    +            ///  Read to sample the pad output enables (direction) PIO is currently driving to the GPIOs. On RP2040 there are 30 GPIOs, so the two most significant bits are hardwired to 0.
    +            DBG_PADOE: u32,
    +            ///  The PIO hardware has some free parameters that may vary between chip products.
    +            ///  These should be provided in the chip datasheet, but are also exposed here.
    +            DBG_CFGINFO: mmio.Mmio(packed struct(u32) {
    +                ///  The depth of the state machine TX/RX FIFOs, measured in words.
    +                ///  Joining fifos via SHIFTCTRL_FJOIN gives one FIFO with double
    +                ///  this depth.
    +                FIFO_DEPTH: u6,
    +                reserved8: u2,
    +                ///  The number of state machines this PIO instance is equipped with.
    +                SM_COUNT: u4,
    +                reserved16: u4,
    +                ///  The size of the instruction memory, measured in units of one instruction
    +                IMEM_SIZE: u6,
    +                padding: u10,
    +            }),
    +            ///  Write-only access to instruction memory location 0
    +            INSTR_MEM0: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM0: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 1
    +            INSTR_MEM1: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM1: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 2
    +            INSTR_MEM2: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM2: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 3
    +            INSTR_MEM3: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM3: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 4
    +            INSTR_MEM4: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM4: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 5
    +            INSTR_MEM5: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM5: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 6
    +            INSTR_MEM6: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM6: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 7
    +            INSTR_MEM7: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM7: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 8
    +            INSTR_MEM8: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM8: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 9
    +            INSTR_MEM9: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM9: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 10
    +            INSTR_MEM10: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM10: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 11
    +            INSTR_MEM11: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM11: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 12
    +            INSTR_MEM12: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM12: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 13
    +            INSTR_MEM13: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM13: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 14
    +            INSTR_MEM14: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM14: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 15
    +            INSTR_MEM15: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM15: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 16
    +            INSTR_MEM16: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM16: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 17
    +            INSTR_MEM17: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM17: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 18
    +            INSTR_MEM18: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM18: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 19
    +            INSTR_MEM19: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM19: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 20
    +            INSTR_MEM20: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM20: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 21
    +            INSTR_MEM21: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM21: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 22
    +            INSTR_MEM22: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM22: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 23
    +            INSTR_MEM23: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM23: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 24
    +            INSTR_MEM24: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM24: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 25
    +            INSTR_MEM25: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM25: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 26
    +            INSTR_MEM26: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM26: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 27
    +            INSTR_MEM27: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM27: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 28
    +            INSTR_MEM28: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM28: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 29
    +            INSTR_MEM29: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM29: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 30
    +            INSTR_MEM30: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM30: u16,
    +                padding: u16,
    +            }),
    +            ///  Write-only access to instruction memory location 31
    +            INSTR_MEM31: mmio.Mmio(packed struct(u32) {
    +                INSTR_MEM31: u16,
    +                padding: u16,
    +            }),
    +            ///  Clock divisor register for state machine 0
    +            ///  Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256)
    +            SM0_CLKDIV: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  Fractional part of clock divisor
    +                FRAC: u8,
    +                ///  Effective frequency is sysclk/(int + frac/256).
    +                ///  Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0.
    +                INT: u16,
    +            }),
    +            ///  Execution/behavioural settings for state machine 0
    +            SM0_EXECCTRL: mmio.Mmio(packed struct(u32) {
    +                ///  Comparison level for the MOV x, STATUS instruction
    +                STATUS_N: u4,
    +                ///  Comparison used for the MOV x, STATUS instruction.
    +                STATUS_SEL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  All-ones if TX FIFO level < N, otherwise all-zeroes
    +                        TXLEVEL = 0x0,
    +                        ///  All-ones if RX FIFO level < N, otherwise all-zeroes
    +                        RXLEVEL = 0x1,
    +                    },
    +                },
    +                reserved7: u2,
    +                ///  After reaching wrap_top, execution is wrapped to this address.
    +                WRAP_BOTTOM: u5,
    +                ///  After reaching this address, execution is wrapped to wrap_bottom.
    +                ///  If the instruction is a jump, and the jump condition is true, the jump takes priority.
    +                WRAP_TOP: u5,
    +                ///  Continuously assert the most recent OUT/SET to the pins
    +                OUT_STICKY: u1,
    +                ///  If 1, use a bit of OUT data as an auxiliary write enable
    +                ///  When used in conjunction with OUT_STICKY, writes with an enable of 0 will
    +                ///  deassert the latest pin write. This can create useful masking/override behaviour
    +                ///  due to the priority ordering of state machine pin writes (SM0 < SM1 < ...)
    +                INLINE_OUT_EN: u1,
    +                ///  Which data bit to use for inline OUT enable
    +                OUT_EN_SEL: u5,
    +                ///  The GPIO number to use as condition for JMP PIN. Unaffected by input mapping.
    +                JMP_PIN: u5,
    +                ///  If 1, side-set data is asserted to pin directions, instead of pin values
    +                SIDE_PINDIR: u1,
    +                ///  If 1, the MSB of the Delay/Side-set instruction field is used as side-set enable, rather than a side-set data bit. This allows instructions to perform side-set optionally, rather than on every instruction, but the maximum possible side-set width is reduced from 5 to 4. Note that the value of PINCTRL_SIDESET_COUNT is inclusive of this enable bit.
    +                SIDE_EN: u1,
    +                ///  If 1, an instruction written to SMx_INSTR is stalled, and latched by the state machine. Will clear to 0 once this instruction completes.
    +                EXEC_STALLED: u1,
    +            }),
    +            ///  Control behaviour of the input/output shift registers for state machine 0
    +            SM0_SHIFTCTRL: mmio.Mmio(packed struct(u32) {
    +                reserved16: u16,
    +                ///  Push automatically when the input shift register is filled, i.e. on an IN instruction which causes the input shift counter to reach or exceed PUSH_THRESH.
    +                AUTOPUSH: u1,
    +                ///  Pull automatically when the output shift register is emptied, i.e. on or following an OUT instruction which causes the output shift counter to reach or exceed PULL_THRESH.
    +                AUTOPULL: u1,
    +                ///  1 = shift input shift register to right (data enters from left). 0 = to left.
    +                IN_SHIFTDIR: u1,
    +                ///  1 = shift out of output shift register to right. 0 = to left.
    +                OUT_SHIFTDIR: u1,
    +                ///  Number of bits shifted into ISR before autopush, or conditional push (PUSH IFFULL), will take place.
    +                ///  Write 0 for value of 32.
    +                PUSH_THRESH: u5,
    +                ///  Number of bits shifted out of OSR before autopull, or conditional pull (PULL IFEMPTY), will take place.
    +                ///  Write 0 for value of 32.
    +                PULL_THRESH: u5,
    +                ///  When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.
    +                ///  RX FIFO is disabled as a result (always reads as both full and empty).
    +                ///  FIFOs are flushed when this bit is changed.
    +                FJOIN_TX: u1,
    +                ///  When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.
    +                ///  TX FIFO is disabled as a result (always reads as both full and empty).
    +                ///  FIFOs are flushed when this bit is changed.
    +                FJOIN_RX: u1,
    +            }),
    +            ///  Current instruction address of state machine 0
    +            SM0_ADDR: mmio.Mmio(packed struct(u32) {
    +                SM0_ADDR: u5,
    +                padding: u27,
    +            }),
    +            ///  Read to see the instruction currently addressed by state machine 0's program counter
    +            ///  Write to execute an instruction immediately (including jumps) and then resume execution.
    +            SM0_INSTR: mmio.Mmio(packed struct(u32) {
    +                SM0_INSTR: u16,
    +                padding: u16,
    +            }),
    +            ///  State machine pin control
    +            SM0_PINCTRL: mmio.Mmio(packed struct(u32) {
    +                ///  The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV PINS instruction. The data written to this pin will always be the least-significant bit of the OUT or MOV data.
    +                OUT_BASE: u5,
    +                ///  The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS instruction. The data written to this pin is the least-significant bit of the SET data.
    +                SET_BASE: u5,
    +                ///  The lowest-numbered pin that will be affected by a side-set operation. The MSBs of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT) are used for side-set data, with the remaining LSBs used for delay. The least-significant bit of the side-set portion is the bit written to this pin, with more-significant bits written to higher-numbered pins.
    +                SIDESET_BASE: u5,
    +                ///  The pin which is mapped to the least-significant bit of a state machine's IN data bus. Higher-numbered pins are mapped to consecutively more-significant data bits, with a modulo of 32 applied to pin number.
    +                IN_BASE: u5,
    +                ///  The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction. In the range 0 to 32 inclusive.
    +                OUT_COUNT: u6,
    +                ///  The number of pins asserted by a SET. In the range 0 to 5 inclusive.
    +                SET_COUNT: u3,
    +                ///  The number of MSBs of the Delay/Side-set instruction field which are used for side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits, no side-set) and maximum of 5 (all side-set, no delay).
    +                SIDESET_COUNT: u3,
    +            }),
    +            ///  Clock divisor register for state machine 1
    +            ///  Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256)
    +            SM1_CLKDIV: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  Fractional part of clock divisor
    +                FRAC: u8,
    +                ///  Effective frequency is sysclk/(int + frac/256).
    +                ///  Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0.
    +                INT: u16,
    +            }),
    +            ///  Execution/behavioural settings for state machine 1
    +            SM1_EXECCTRL: mmio.Mmio(packed struct(u32) {
    +                ///  Comparison level for the MOV x, STATUS instruction
    +                STATUS_N: u4,
    +                ///  Comparison used for the MOV x, STATUS instruction.
    +                STATUS_SEL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  All-ones if TX FIFO level < N, otherwise all-zeroes
    +                        TXLEVEL = 0x0,
    +                        ///  All-ones if RX FIFO level < N, otherwise all-zeroes
    +                        RXLEVEL = 0x1,
    +                    },
    +                },
    +                reserved7: u2,
    +                ///  After reaching wrap_top, execution is wrapped to this address.
    +                WRAP_BOTTOM: u5,
    +                ///  After reaching this address, execution is wrapped to wrap_bottom.
    +                ///  If the instruction is a jump, and the jump condition is true, the jump takes priority.
    +                WRAP_TOP: u5,
    +                ///  Continuously assert the most recent OUT/SET to the pins
    +                OUT_STICKY: u1,
    +                ///  If 1, use a bit of OUT data as an auxiliary write enable
    +                ///  When used in conjunction with OUT_STICKY, writes with an enable of 0 will
    +                ///  deassert the latest pin write. This can create useful masking/override behaviour
    +                ///  due to the priority ordering of state machine pin writes (SM0 < SM1 < ...)
    +                INLINE_OUT_EN: u1,
    +                ///  Which data bit to use for inline OUT enable
    +                OUT_EN_SEL: u5,
    +                ///  The GPIO number to use as condition for JMP PIN. Unaffected by input mapping.
    +                JMP_PIN: u5,
    +                ///  If 1, side-set data is asserted to pin directions, instead of pin values
    +                SIDE_PINDIR: u1,
    +                ///  If 1, the MSB of the Delay/Side-set instruction field is used as side-set enable, rather than a side-set data bit. This allows instructions to perform side-set optionally, rather than on every instruction, but the maximum possible side-set width is reduced from 5 to 4. Note that the value of PINCTRL_SIDESET_COUNT is inclusive of this enable bit.
    +                SIDE_EN: u1,
    +                ///  If 1, an instruction written to SMx_INSTR is stalled, and latched by the state machine. Will clear to 0 once this instruction completes.
    +                EXEC_STALLED: u1,
    +            }),
    +            ///  Control behaviour of the input/output shift registers for state machine 1
    +            SM1_SHIFTCTRL: mmio.Mmio(packed struct(u32) {
    +                reserved16: u16,
    +                ///  Push automatically when the input shift register is filled, i.e. on an IN instruction which causes the input shift counter to reach or exceed PUSH_THRESH.
    +                AUTOPUSH: u1,
    +                ///  Pull automatically when the output shift register is emptied, i.e. on or following an OUT instruction which causes the output shift counter to reach or exceed PULL_THRESH.
    +                AUTOPULL: u1,
    +                ///  1 = shift input shift register to right (data enters from left). 0 = to left.
    +                IN_SHIFTDIR: u1,
    +                ///  1 = shift out of output shift register to right. 0 = to left.
    +                OUT_SHIFTDIR: u1,
    +                ///  Number of bits shifted into ISR before autopush, or conditional push (PUSH IFFULL), will take place.
    +                ///  Write 0 for value of 32.
    +                PUSH_THRESH: u5,
    +                ///  Number of bits shifted out of OSR before autopull, or conditional pull (PULL IFEMPTY), will take place.
    +                ///  Write 0 for value of 32.
    +                PULL_THRESH: u5,
    +                ///  When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.
    +                ///  RX FIFO is disabled as a result (always reads as both full and empty).
    +                ///  FIFOs are flushed when this bit is changed.
    +                FJOIN_TX: u1,
    +                ///  When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.
    +                ///  TX FIFO is disabled as a result (always reads as both full and empty).
    +                ///  FIFOs are flushed when this bit is changed.
    +                FJOIN_RX: u1,
    +            }),
    +            ///  Current instruction address of state machine 1
    +            SM1_ADDR: mmio.Mmio(packed struct(u32) {
    +                SM1_ADDR: u5,
    +                padding: u27,
    +            }),
    +            ///  Read to see the instruction currently addressed by state machine 1's program counter
    +            ///  Write to execute an instruction immediately (including jumps) and then resume execution.
    +            SM1_INSTR: mmio.Mmio(packed struct(u32) {
    +                SM1_INSTR: u16,
    +                padding: u16,
    +            }),
    +            ///  State machine pin control
    +            SM1_PINCTRL: mmio.Mmio(packed struct(u32) {
    +                ///  The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV PINS instruction. The data written to this pin will always be the least-significant bit of the OUT or MOV data.
    +                OUT_BASE: u5,
    +                ///  The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS instruction. The data written to this pin is the least-significant bit of the SET data.
    +                SET_BASE: u5,
    +                ///  The lowest-numbered pin that will be affected by a side-set operation. The MSBs of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT) are used for side-set data, with the remaining LSBs used for delay. The least-significant bit of the side-set portion is the bit written to this pin, with more-significant bits written to higher-numbered pins.
    +                SIDESET_BASE: u5,
    +                ///  The pin which is mapped to the least-significant bit of a state machine's IN data bus. Higher-numbered pins are mapped to consecutively more-significant data bits, with a modulo of 32 applied to pin number.
    +                IN_BASE: u5,
    +                ///  The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction. In the range 0 to 32 inclusive.
    +                OUT_COUNT: u6,
    +                ///  The number of pins asserted by a SET. In the range 0 to 5 inclusive.
    +                SET_COUNT: u3,
    +                ///  The number of MSBs of the Delay/Side-set instruction field which are used for side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits, no side-set) and maximum of 5 (all side-set, no delay).
    +                SIDESET_COUNT: u3,
    +            }),
    +            ///  Clock divisor register for state machine 2
    +            ///  Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256)
    +            SM2_CLKDIV: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  Fractional part of clock divisor
    +                FRAC: u8,
    +                ///  Effective frequency is sysclk/(int + frac/256).
    +                ///  Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0.
    +                INT: u16,
    +            }),
    +            ///  Execution/behavioural settings for state machine 2
    +            SM2_EXECCTRL: mmio.Mmio(packed struct(u32) {
    +                ///  Comparison level for the MOV x, STATUS instruction
    +                STATUS_N: u4,
    +                ///  Comparison used for the MOV x, STATUS instruction.
    +                STATUS_SEL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  All-ones if TX FIFO level < N, otherwise all-zeroes
    +                        TXLEVEL = 0x0,
    +                        ///  All-ones if RX FIFO level < N, otherwise all-zeroes
    +                        RXLEVEL = 0x1,
    +                    },
    +                },
    +                reserved7: u2,
    +                ///  After reaching wrap_top, execution is wrapped to this address.
    +                WRAP_BOTTOM: u5,
    +                ///  After reaching this address, execution is wrapped to wrap_bottom.
    +                ///  If the instruction is a jump, and the jump condition is true, the jump takes priority.
    +                WRAP_TOP: u5,
    +                ///  Continuously assert the most recent OUT/SET to the pins
    +                OUT_STICKY: u1,
    +                ///  If 1, use a bit of OUT data as an auxiliary write enable
    +                ///  When used in conjunction with OUT_STICKY, writes with an enable of 0 will
    +                ///  deassert the latest pin write. This can create useful masking/override behaviour
    +                ///  due to the priority ordering of state machine pin writes (SM0 < SM1 < ...)
    +                INLINE_OUT_EN: u1,
    +                ///  Which data bit to use for inline OUT enable
    +                OUT_EN_SEL: u5,
    +                ///  The GPIO number to use as condition for JMP PIN. Unaffected by input mapping.
    +                JMP_PIN: u5,
    +                ///  If 1, side-set data is asserted to pin directions, instead of pin values
    +                SIDE_PINDIR: u1,
    +                ///  If 1, the MSB of the Delay/Side-set instruction field is used as side-set enable, rather than a side-set data bit. This allows instructions to perform side-set optionally, rather than on every instruction, but the maximum possible side-set width is reduced from 5 to 4. Note that the value of PINCTRL_SIDESET_COUNT is inclusive of this enable bit.
    +                SIDE_EN: u1,
    +                ///  If 1, an instruction written to SMx_INSTR is stalled, and latched by the state machine. Will clear to 0 once this instruction completes.
    +                EXEC_STALLED: u1,
    +            }),
    +            ///  Control behaviour of the input/output shift registers for state machine 2
    +            SM2_SHIFTCTRL: mmio.Mmio(packed struct(u32) {
    +                reserved16: u16,
    +                ///  Push automatically when the input shift register is filled, i.e. on an IN instruction which causes the input shift counter to reach or exceed PUSH_THRESH.
    +                AUTOPUSH: u1,
    +                ///  Pull automatically when the output shift register is emptied, i.e. on or following an OUT instruction which causes the output shift counter to reach or exceed PULL_THRESH.
    +                AUTOPULL: u1,
    +                ///  1 = shift input shift register to right (data enters from left). 0 = to left.
    +                IN_SHIFTDIR: u1,
    +                ///  1 = shift out of output shift register to right. 0 = to left.
    +                OUT_SHIFTDIR: u1,
    +                ///  Number of bits shifted into ISR before autopush, or conditional push (PUSH IFFULL), will take place.
    +                ///  Write 0 for value of 32.
    +                PUSH_THRESH: u5,
    +                ///  Number of bits shifted out of OSR before autopull, or conditional pull (PULL IFEMPTY), will take place.
    +                ///  Write 0 for value of 32.
    +                PULL_THRESH: u5,
    +                ///  When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.
    +                ///  RX FIFO is disabled as a result (always reads as both full and empty).
    +                ///  FIFOs are flushed when this bit is changed.
    +                FJOIN_TX: u1,
    +                ///  When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.
    +                ///  TX FIFO is disabled as a result (always reads as both full and empty).
    +                ///  FIFOs are flushed when this bit is changed.
    +                FJOIN_RX: u1,
    +            }),
    +            ///  Current instruction address of state machine 2
    +            SM2_ADDR: mmio.Mmio(packed struct(u32) {
    +                SM2_ADDR: u5,
    +                padding: u27,
    +            }),
    +            ///  Read to see the instruction currently addressed by state machine 2's program counter
    +            ///  Write to execute an instruction immediately (including jumps) and then resume execution.
    +            SM2_INSTR: mmio.Mmio(packed struct(u32) {
    +                SM2_INSTR: u16,
    +                padding: u16,
    +            }),
    +            ///  State machine pin control
    +            SM2_PINCTRL: mmio.Mmio(packed struct(u32) {
    +                ///  The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV PINS instruction. The data written to this pin will always be the least-significant bit of the OUT or MOV data.
    +                OUT_BASE: u5,
    +                ///  The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS instruction. The data written to this pin is the least-significant bit of the SET data.
    +                SET_BASE: u5,
    +                ///  The lowest-numbered pin that will be affected by a side-set operation. The MSBs of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT) are used for side-set data, with the remaining LSBs used for delay. The least-significant bit of the side-set portion is the bit written to this pin, with more-significant bits written to higher-numbered pins.
    +                SIDESET_BASE: u5,
    +                ///  The pin which is mapped to the least-significant bit of a state machine's IN data bus. Higher-numbered pins are mapped to consecutively more-significant data bits, with a modulo of 32 applied to pin number.
    +                IN_BASE: u5,
    +                ///  The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction. In the range 0 to 32 inclusive.
    +                OUT_COUNT: u6,
    +                ///  The number of pins asserted by a SET. In the range 0 to 5 inclusive.
    +                SET_COUNT: u3,
    +                ///  The number of MSBs of the Delay/Side-set instruction field which are used for side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits, no side-set) and maximum of 5 (all side-set, no delay).
    +                SIDESET_COUNT: u3,
    +            }),
    +            ///  Clock divisor register for state machine 3
    +            ///  Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256)
    +            SM3_CLKDIV: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  Fractional part of clock divisor
    +                FRAC: u8,
    +                ///  Effective frequency is sysclk/(int + frac/256).
    +                ///  Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0.
    +                INT: u16,
    +            }),
    +            ///  Execution/behavioural settings for state machine 3
    +            SM3_EXECCTRL: mmio.Mmio(packed struct(u32) {
    +                ///  Comparison level for the MOV x, STATUS instruction
    +                STATUS_N: u4,
    +                ///  Comparison used for the MOV x, STATUS instruction.
    +                STATUS_SEL: packed union {
    +                    raw: u1,
    +                    value: enum(u1) {
    +                        ///  All-ones if TX FIFO level < N, otherwise all-zeroes
    +                        TXLEVEL = 0x0,
    +                        ///  All-ones if RX FIFO level < N, otherwise all-zeroes
    +                        RXLEVEL = 0x1,
    +                    },
    +                },
    +                reserved7: u2,
    +                ///  After reaching wrap_top, execution is wrapped to this address.
    +                WRAP_BOTTOM: u5,
    +                ///  After reaching this address, execution is wrapped to wrap_bottom.
    +                ///  If the instruction is a jump, and the jump condition is true, the jump takes priority.
    +                WRAP_TOP: u5,
    +                ///  Continuously assert the most recent OUT/SET to the pins
    +                OUT_STICKY: u1,
    +                ///  If 1, use a bit of OUT data as an auxiliary write enable
    +                ///  When used in conjunction with OUT_STICKY, writes with an enable of 0 will
    +                ///  deassert the latest pin write. This can create useful masking/override behaviour
    +                ///  due to the priority ordering of state machine pin writes (SM0 < SM1 < ...)
    +                INLINE_OUT_EN: u1,
    +                ///  Which data bit to use for inline OUT enable
    +                OUT_EN_SEL: u5,
    +                ///  The GPIO number to use as condition for JMP PIN. Unaffected by input mapping.
    +                JMP_PIN: u5,
    +                ///  If 1, side-set data is asserted to pin directions, instead of pin values
    +                SIDE_PINDIR: u1,
    +                ///  If 1, the MSB of the Delay/Side-set instruction field is used as side-set enable, rather than a side-set data bit. This allows instructions to perform side-set optionally, rather than on every instruction, but the maximum possible side-set width is reduced from 5 to 4. Note that the value of PINCTRL_SIDESET_COUNT is inclusive of this enable bit.
    +                SIDE_EN: u1,
    +                ///  If 1, an instruction written to SMx_INSTR is stalled, and latched by the state machine. Will clear to 0 once this instruction completes.
    +                EXEC_STALLED: u1,
    +            }),
    +            ///  Control behaviour of the input/output shift registers for state machine 3
    +            SM3_SHIFTCTRL: mmio.Mmio(packed struct(u32) {
    +                reserved16: u16,
    +                ///  Push automatically when the input shift register is filled, i.e. on an IN instruction which causes the input shift counter to reach or exceed PUSH_THRESH.
    +                AUTOPUSH: u1,
    +                ///  Pull automatically when the output shift register is emptied, i.e. on or following an OUT instruction which causes the output shift counter to reach or exceed PULL_THRESH.
    +                AUTOPULL: u1,
    +                ///  1 = shift input shift register to right (data enters from left). 0 = to left.
    +                IN_SHIFTDIR: u1,
    +                ///  1 = shift out of output shift register to right. 0 = to left.
    +                OUT_SHIFTDIR: u1,
    +                ///  Number of bits shifted into ISR before autopush, or conditional push (PUSH IFFULL), will take place.
    +                ///  Write 0 for value of 32.
    +                PUSH_THRESH: u5,
    +                ///  Number of bits shifted out of OSR before autopull, or conditional pull (PULL IFEMPTY), will take place.
    +                ///  Write 0 for value of 32.
    +                PULL_THRESH: u5,
    +                ///  When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.
    +                ///  RX FIFO is disabled as a result (always reads as both full and empty).
    +                ///  FIFOs are flushed when this bit is changed.
    +                FJOIN_TX: u1,
    +                ///  When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.
    +                ///  TX FIFO is disabled as a result (always reads as both full and empty).
    +                ///  FIFOs are flushed when this bit is changed.
    +                FJOIN_RX: u1,
    +            }),
    +            ///  Current instruction address of state machine 3
    +            SM3_ADDR: mmio.Mmio(packed struct(u32) {
    +                SM3_ADDR: u5,
    +                padding: u27,
    +            }),
    +            ///  Read to see the instruction currently addressed by state machine 3's program counter
    +            ///  Write to execute an instruction immediately (including jumps) and then resume execution.
    +            SM3_INSTR: mmio.Mmio(packed struct(u32) {
    +                SM3_INSTR: u16,
    +                padding: u16,
    +            }),
    +            ///  State machine pin control
    +            SM3_PINCTRL: mmio.Mmio(packed struct(u32) {
    +                ///  The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV PINS instruction. The data written to this pin will always be the least-significant bit of the OUT or MOV data.
    +                OUT_BASE: u5,
    +                ///  The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS instruction. The data written to this pin is the least-significant bit of the SET data.
    +                SET_BASE: u5,
    +                ///  The lowest-numbered pin that will be affected by a side-set operation. The MSBs of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT) are used for side-set data, with the remaining LSBs used for delay. The least-significant bit of the side-set portion is the bit written to this pin, with more-significant bits written to higher-numbered pins.
    +                SIDESET_BASE: u5,
    +                ///  The pin which is mapped to the least-significant bit of a state machine's IN data bus. Higher-numbered pins are mapped to consecutively more-significant data bits, with a modulo of 32 applied to pin number.
    +                IN_BASE: u5,
    +                ///  The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction. In the range 0 to 32 inclusive.
    +                OUT_COUNT: u6,
    +                ///  The number of pins asserted by a SET. In the range 0 to 5 inclusive.
    +                SET_COUNT: u3,
    +                ///  The number of MSBs of the Delay/Side-set instruction field which are used for side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits, no side-set) and maximum of 5 (all side-set, no delay).
    +                SIDESET_COUNT: u3,
    +            }),
    +            ///  Raw Interrupts
    +            INTR: mmio.Mmio(packed struct(u32) {
    +                SM0_RXNEMPTY: u1,
    +                SM1_RXNEMPTY: u1,
    +                SM2_RXNEMPTY: u1,
    +                SM3_RXNEMPTY: u1,
    +                SM0_TXNFULL: u1,
    +                SM1_TXNFULL: u1,
    +                SM2_TXNFULL: u1,
    +                SM3_TXNFULL: u1,
    +                SM0: u1,
    +                SM1: u1,
    +                SM2: u1,
    +                SM3: u1,
    +                padding: u20,
    +            }),
    +            ///  Interrupt Enable for irq0
    +            IRQ0_INTE: mmio.Mmio(packed struct(u32) {
    +                SM0_RXNEMPTY: u1,
    +                SM1_RXNEMPTY: u1,
    +                SM2_RXNEMPTY: u1,
    +                SM3_RXNEMPTY: u1,
    +                SM0_TXNFULL: u1,
    +                SM1_TXNFULL: u1,
    +                SM2_TXNFULL: u1,
    +                SM3_TXNFULL: u1,
    +                SM0: u1,
    +                SM1: u1,
    +                SM2: u1,
    +                SM3: u1,
    +                padding: u20,
    +            }),
    +            ///  Interrupt Force for irq0
    +            IRQ0_INTF: mmio.Mmio(packed struct(u32) {
    +                SM0_RXNEMPTY: u1,
    +                SM1_RXNEMPTY: u1,
    +                SM2_RXNEMPTY: u1,
    +                SM3_RXNEMPTY: u1,
    +                SM0_TXNFULL: u1,
    +                SM1_TXNFULL: u1,
    +                SM2_TXNFULL: u1,
    +                SM3_TXNFULL: u1,
    +                SM0: u1,
    +                SM1: u1,
    +                SM2: u1,
    +                SM3: u1,
    +                padding: u20,
    +            }),
    +            ///  Interrupt status after masking & forcing for irq0
    +            IRQ0_INTS: mmio.Mmio(packed struct(u32) {
    +                SM0_RXNEMPTY: u1,
    +                SM1_RXNEMPTY: u1,
    +                SM2_RXNEMPTY: u1,
    +                SM3_RXNEMPTY: u1,
    +                SM0_TXNFULL: u1,
    +                SM1_TXNFULL: u1,
    +                SM2_TXNFULL: u1,
    +                SM3_TXNFULL: u1,
    +                SM0: u1,
    +                SM1: u1,
    +                SM2: u1,
    +                SM3: u1,
    +                padding: u20,
    +            }),
    +            ///  Interrupt Enable for irq1
    +            IRQ1_INTE: mmio.Mmio(packed struct(u32) {
    +                SM0_RXNEMPTY: u1,
    +                SM1_RXNEMPTY: u1,
    +                SM2_RXNEMPTY: u1,
    +                SM3_RXNEMPTY: u1,
    +                SM0_TXNFULL: u1,
    +                SM1_TXNFULL: u1,
    +                SM2_TXNFULL: u1,
    +                SM3_TXNFULL: u1,
    +                SM0: u1,
    +                SM1: u1,
    +                SM2: u1,
    +                SM3: u1,
    +                padding: u20,
    +            }),
    +            ///  Interrupt Force for irq1
    +            IRQ1_INTF: mmio.Mmio(packed struct(u32) {
    +                SM0_RXNEMPTY: u1,
    +                SM1_RXNEMPTY: u1,
    +                SM2_RXNEMPTY: u1,
    +                SM3_RXNEMPTY: u1,
    +                SM0_TXNFULL: u1,
    +                SM1_TXNFULL: u1,
    +                SM2_TXNFULL: u1,
    +                SM3_TXNFULL: u1,
    +                SM0: u1,
    +                SM1: u1,
    +                SM2: u1,
    +                SM3: u1,
    +                padding: u20,
    +            }),
    +            ///  Interrupt status after masking & forcing for irq1
    +            IRQ1_INTS: mmio.Mmio(packed struct(u32) {
    +                SM0_RXNEMPTY: u1,
    +                SM1_RXNEMPTY: u1,
    +                SM2_RXNEMPTY: u1,
    +                SM3_RXNEMPTY: u1,
    +                SM0_TXNFULL: u1,
    +                SM1_TXNFULL: u1,
    +                SM2_TXNFULL: u1,
    +                SM3_TXNFULL: u1,
    +                SM0: u1,
    +                SM1: u1,
    +                SM2: u1,
    +                SM3: u1,
    +                padding: u20,
    +            }),
    +        };
    +
    +        ///  Control and data interface to SAR ADC
    +        pub const ADC = extern struct {
    +            ///  ADC Control and Status
    +            CS: mmio.Mmio(packed struct(u32) {
    +                ///  Power on ADC and enable its clock.
    +                ///  1 - enabled. 0 - disabled.
    +                EN: u1,
    +                ///  Power on temperature sensor. 1 - enabled. 0 - disabled.
    +                TS_EN: u1,
    +                ///  Start a single conversion. Self-clearing. Ignored if start_many is asserted.
    +                START_ONCE: u1,
    +                ///  Continuously perform conversions whilst this bit is 1. A new conversion will start immediately after the previous finishes.
    +                START_MANY: u1,
    +                reserved8: u4,
    +                ///  1 if the ADC is ready to start a new conversion. Implies any previous conversion has completed.
    +                ///  0 whilst conversion in progress.
    +                READY: u1,
    +                ///  The most recent ADC conversion encountered an error; result is undefined or noisy.
    +                ERR: u1,
    +                ///  Some past ADC conversion encountered an error. Write 1 to clear.
    +                ERR_STICKY: u1,
    +                reserved12: u1,
    +                ///  Select analog mux input. Updated automatically in round-robin mode.
    +                AINSEL: u3,
    +                reserved16: u1,
    +                ///  Round-robin sampling. 1 bit per channel. Set all bits to 0 to disable.
    +                ///  Otherwise, the ADC will cycle through each enabled channel in a round-robin fashion.
    +                ///  The first channel to be sampled will be the one currently indicated by AINSEL.
    +                ///  AINSEL will be updated after each conversion with the newly-selected channel.
    +                RROBIN: u5,
    +                padding: u11,
    +            }),
    +            ///  Result of most recent ADC conversion
    +            RESULT: mmio.Mmio(packed struct(u32) {
    +                RESULT: u12,
    +                padding: u20,
    +            }),
    +            ///  FIFO control and status
    +            FCS: mmio.Mmio(packed struct(u32) {
    +                ///  If 1: write result to the FIFO after each conversion.
    +                EN: u1,
    +                ///  If 1: FIFO results are right-shifted to be one byte in size. Enables DMA to byte buffers.
    +                SHIFT: u1,
    +                ///  If 1: conversion error bit appears in the FIFO alongside the result
    +                ERR: u1,
    +                ///  If 1: assert DMA requests when FIFO contains data
    +                DREQ_EN: u1,
    +                reserved8: u4,
    +                EMPTY: u1,
    +                FULL: u1,
    +                ///  1 if the FIFO has been underflowed. Write 1 to clear.
    +                UNDER: u1,
    +                ///  1 if the FIFO has been overflowed. Write 1 to clear.
    +                OVER: u1,
    +                reserved16: u4,
    +                ///  The number of conversion results currently waiting in the FIFO
    +                LEVEL: u4,
    +                reserved24: u4,
    +                ///  DREQ/IRQ asserted when level >= threshold
    +                THRESH: u4,
    +                padding: u4,
    +            }),
    +            ///  Conversion result FIFO
    +            FIFO: mmio.Mmio(packed struct(u32) {
    +                VAL: u12,
    +                reserved15: u3,
    +                ///  1 if this particular sample experienced a conversion error. Remains in the same location if the sample is shifted.
    +                ERR: u1,
    +                padding: u16,
    +            }),
    +            ///  Clock divider. If non-zero, CS_START_MANY will start conversions
    +            ///  at regular intervals rather than back-to-back.
    +            ///  The divider is reset when either of these fields are written.
    +            ///  Total period is 1 + INT + FRAC / 256
    +            DIV: mmio.Mmio(packed struct(u32) {
    +                ///  Fractional part of clock divisor. First-order delta-sigma.
    +                FRAC: u8,
    +                ///  Integer part of clock divisor.
    +                INT: u16,
    +                padding: u8,
    +            }),
    +            ///  Raw Interrupts
    +            INTR: mmio.Mmio(packed struct(u32) {
    +                ///  Triggered when the sample FIFO reaches a certain level.
    +                ///  This level can be programmed via the FCS_THRESH field.
    +                FIFO: u1,
    +                padding: u31,
    +            }),
    +            ///  Interrupt Enable
    +            INTE: mmio.Mmio(packed struct(u32) {
    +                ///  Triggered when the sample FIFO reaches a certain level.
    +                ///  This level can be programmed via the FCS_THRESH field.
    +                FIFO: u1,
    +                padding: u31,
    +            }),
    +            ///  Interrupt Force
    +            INTF: mmio.Mmio(packed struct(u32) {
    +                ///  Triggered when the sample FIFO reaches a certain level.
    +                ///  This level can be programmed via the FCS_THRESH field.
    +                FIFO: u1,
    +                padding: u31,
    +            }),
    +            ///  Interrupt status after masking & forcing
    +            INTS: mmio.Mmio(packed struct(u32) {
    +                ///  Triggered when the sample FIFO reaches a certain level.
    +                ///  This level can be programmed via the FCS_THRESH field.
    +                FIFO: u1,
    +                padding: u31,
    +            }),
    +        };
    +
    +        ///  Simple PWM
    +        pub const PWM = extern struct {
    +            ///  Control and status register
    +            CH0_CSR: mmio.Mmio(packed struct(u32) {
    +                ///  Enable the PWM channel.
    +                EN: u1,
    +                ///  1: Enable phase-correct modulation. 0: Trailing-edge
    +                PH_CORRECT: u1,
    +                ///  Invert output A
    +                A_INV: u1,
    +                ///  Invert output B
    +                B_INV: u1,
    +                DIVMODE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Free-running counting at rate dictated by fractional divider
    +                        div = 0x0,
    +                        ///  Fractional divider operation is gated by the PWM B pin.
    +                        level = 0x1,
    +                        ///  Counter advances with each rising edge of the PWM B pin.
    +                        rise = 0x2,
    +                        ///  Counter advances with each falling edge of the PWM B pin.
    +                        fall = 0x3,
    +                    },
    +                },
    +                ///  Retard the phase of the counter by 1 count, while it is running.
    +                ///  Self-clearing. Write a 1, and poll until low. Counter must be running.
    +                PH_RET: u1,
    +                ///  Advance the phase of the counter by 1 count, while it is running.
    +                ///  Self-clearing. Write a 1, and poll until low. Counter must be running
    +                ///  at less than full speed (div_int + div_frac / 16 > 1)
    +                PH_ADV: u1,
    +                padding: u24,
    +            }),
    +            ///  INT and FRAC form a fixed-point fractional number.
    +            ///  Counting rate is system clock frequency divided by this number.
    +            ///  Fractional division uses simple 1st-order sigma-delta.
    +            CH0_DIV: mmio.Mmio(packed struct(u32) {
    +                FRAC: u4,
    +                INT: u8,
    +                padding: u20,
    +            }),
    +            ///  Direct access to the PWM counter
    +            CH0_CTR: mmio.Mmio(packed struct(u32) {
    +                CH0_CTR: u16,
    +                padding: u16,
    +            }),
    +            ///  Counter compare values
    +            CH0_CC: mmio.Mmio(packed struct(u32) {
    +                A: u16,
    +                B: u16,
    +            }),
    +            ///  Counter wrap value
    +            CH0_TOP: mmio.Mmio(packed struct(u32) {
    +                CH0_TOP: u16,
    +                padding: u16,
    +            }),
    +            ///  Control and status register
    +            CH1_CSR: mmio.Mmio(packed struct(u32) {
    +                ///  Enable the PWM channel.
    +                EN: u1,
    +                ///  1: Enable phase-correct modulation. 0: Trailing-edge
    +                PH_CORRECT: u1,
    +                ///  Invert output A
    +                A_INV: u1,
    +                ///  Invert output B
    +                B_INV: u1,
    +                DIVMODE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Free-running counting at rate dictated by fractional divider
    +                        div = 0x0,
    +                        ///  Fractional divider operation is gated by the PWM B pin.
    +                        level = 0x1,
    +                        ///  Counter advances with each rising edge of the PWM B pin.
    +                        rise = 0x2,
    +                        ///  Counter advances with each falling edge of the PWM B pin.
    +                        fall = 0x3,
    +                    },
    +                },
    +                ///  Retard the phase of the counter by 1 count, while it is running.
    +                ///  Self-clearing. Write a 1, and poll until low. Counter must be running.
    +                PH_RET: u1,
    +                ///  Advance the phase of the counter by 1 count, while it is running.
    +                ///  Self-clearing. Write a 1, and poll until low. Counter must be running
    +                ///  at less than full speed (div_int + div_frac / 16 > 1)
    +                PH_ADV: u1,
    +                padding: u24,
    +            }),
    +            ///  INT and FRAC form a fixed-point fractional number.
    +            ///  Counting rate is system clock frequency divided by this number.
    +            ///  Fractional division uses simple 1st-order sigma-delta.
    +            CH1_DIV: mmio.Mmio(packed struct(u32) {
    +                FRAC: u4,
    +                INT: u8,
    +                padding: u20,
    +            }),
    +            ///  Direct access to the PWM counter
    +            CH1_CTR: mmio.Mmio(packed struct(u32) {
    +                CH1_CTR: u16,
    +                padding: u16,
    +            }),
    +            ///  Counter compare values
    +            CH1_CC: mmio.Mmio(packed struct(u32) {
    +                A: u16,
    +                B: u16,
    +            }),
    +            ///  Counter wrap value
    +            CH1_TOP: mmio.Mmio(packed struct(u32) {
    +                CH1_TOP: u16,
    +                padding: u16,
    +            }),
    +            ///  Control and status register
    +            CH2_CSR: mmio.Mmio(packed struct(u32) {
    +                ///  Enable the PWM channel.
    +                EN: u1,
    +                ///  1: Enable phase-correct modulation. 0: Trailing-edge
    +                PH_CORRECT: u1,
    +                ///  Invert output A
    +                A_INV: u1,
    +                ///  Invert output B
    +                B_INV: u1,
    +                DIVMODE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Free-running counting at rate dictated by fractional divider
    +                        div = 0x0,
    +                        ///  Fractional divider operation is gated by the PWM B pin.
    +                        level = 0x1,
    +                        ///  Counter advances with each rising edge of the PWM B pin.
    +                        rise = 0x2,
    +                        ///  Counter advances with each falling edge of the PWM B pin.
    +                        fall = 0x3,
    +                    },
    +                },
    +                ///  Retard the phase of the counter by 1 count, while it is running.
    +                ///  Self-clearing. Write a 1, and poll until low. Counter must be running.
    +                PH_RET: u1,
    +                ///  Advance the phase of the counter by 1 count, while it is running.
    +                ///  Self-clearing. Write a 1, and poll until low. Counter must be running
    +                ///  at less than full speed (div_int + div_frac / 16 > 1)
    +                PH_ADV: u1,
    +                padding: u24,
    +            }),
    +            ///  INT and FRAC form a fixed-point fractional number.
    +            ///  Counting rate is system clock frequency divided by this number.
    +            ///  Fractional division uses simple 1st-order sigma-delta.
    +            CH2_DIV: mmio.Mmio(packed struct(u32) {
    +                FRAC: u4,
    +                INT: u8,
    +                padding: u20,
    +            }),
    +            ///  Direct access to the PWM counter
    +            CH2_CTR: mmio.Mmio(packed struct(u32) {
    +                CH2_CTR: u16,
    +                padding: u16,
    +            }),
    +            ///  Counter compare values
    +            CH2_CC: mmio.Mmio(packed struct(u32) {
    +                A: u16,
    +                B: u16,
    +            }),
    +            ///  Counter wrap value
    +            CH2_TOP: mmio.Mmio(packed struct(u32) {
    +                CH2_TOP: u16,
    +                padding: u16,
    +            }),
    +            ///  Control and status register
    +            CH3_CSR: mmio.Mmio(packed struct(u32) {
    +                ///  Enable the PWM channel.
    +                EN: u1,
    +                ///  1: Enable phase-correct modulation. 0: Trailing-edge
    +                PH_CORRECT: u1,
    +                ///  Invert output A
    +                A_INV: u1,
    +                ///  Invert output B
    +                B_INV: u1,
    +                DIVMODE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Free-running counting at rate dictated by fractional divider
    +                        div = 0x0,
    +                        ///  Fractional divider operation is gated by the PWM B pin.
    +                        level = 0x1,
    +                        ///  Counter advances with each rising edge of the PWM B pin.
    +                        rise = 0x2,
    +                        ///  Counter advances with each falling edge of the PWM B pin.
    +                        fall = 0x3,
    +                    },
    +                },
    +                ///  Retard the phase of the counter by 1 count, while it is running.
    +                ///  Self-clearing. Write a 1, and poll until low. Counter must be running.
    +                PH_RET: u1,
    +                ///  Advance the phase of the counter by 1 count, while it is running.
    +                ///  Self-clearing. Write a 1, and poll until low. Counter must be running
    +                ///  at less than full speed (div_int + div_frac / 16 > 1)
    +                PH_ADV: u1,
    +                padding: u24,
    +            }),
    +            ///  INT and FRAC form a fixed-point fractional number.
    +            ///  Counting rate is system clock frequency divided by this number.
    +            ///  Fractional division uses simple 1st-order sigma-delta.
    +            CH3_DIV: mmio.Mmio(packed struct(u32) {
    +                FRAC: u4,
    +                INT: u8,
    +                padding: u20,
    +            }),
    +            ///  Direct access to the PWM counter
    +            CH3_CTR: mmio.Mmio(packed struct(u32) {
    +                CH3_CTR: u16,
    +                padding: u16,
    +            }),
    +            ///  Counter compare values
    +            CH3_CC: mmio.Mmio(packed struct(u32) {
    +                A: u16,
    +                B: u16,
    +            }),
    +            ///  Counter wrap value
    +            CH3_TOP: mmio.Mmio(packed struct(u32) {
    +                CH3_TOP: u16,
    +                padding: u16,
    +            }),
    +            ///  Control and status register
    +            CH4_CSR: mmio.Mmio(packed struct(u32) {
    +                ///  Enable the PWM channel.
    +                EN: u1,
    +                ///  1: Enable phase-correct modulation. 0: Trailing-edge
    +                PH_CORRECT: u1,
    +                ///  Invert output A
    +                A_INV: u1,
    +                ///  Invert output B
    +                B_INV: u1,
    +                DIVMODE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Free-running counting at rate dictated by fractional divider
    +                        div = 0x0,
    +                        ///  Fractional divider operation is gated by the PWM B pin.
    +                        level = 0x1,
    +                        ///  Counter advances with each rising edge of the PWM B pin.
    +                        rise = 0x2,
    +                        ///  Counter advances with each falling edge of the PWM B pin.
    +                        fall = 0x3,
    +                    },
    +                },
    +                ///  Retard the phase of the counter by 1 count, while it is running.
    +                ///  Self-clearing. Write a 1, and poll until low. Counter must be running.
    +                PH_RET: u1,
    +                ///  Advance the phase of the counter by 1 count, while it is running.
    +                ///  Self-clearing. Write a 1, and poll until low. Counter must be running
    +                ///  at less than full speed (div_int + div_frac / 16 > 1)
    +                PH_ADV: u1,
    +                padding: u24,
    +            }),
    +            ///  INT and FRAC form a fixed-point fractional number.
    +            ///  Counting rate is system clock frequency divided by this number.
    +            ///  Fractional division uses simple 1st-order sigma-delta.
    +            CH4_DIV: mmio.Mmio(packed struct(u32) {
    +                FRAC: u4,
    +                INT: u8,
    +                padding: u20,
    +            }),
    +            ///  Direct access to the PWM counter
    +            CH4_CTR: mmio.Mmio(packed struct(u32) {
    +                CH4_CTR: u16,
    +                padding: u16,
    +            }),
    +            ///  Counter compare values
    +            CH4_CC: mmio.Mmio(packed struct(u32) {
    +                A: u16,
    +                B: u16,
    +            }),
    +            ///  Counter wrap value
    +            CH4_TOP: mmio.Mmio(packed struct(u32) {
    +                CH4_TOP: u16,
    +                padding: u16,
    +            }),
    +            ///  Control and status register
    +            CH5_CSR: mmio.Mmio(packed struct(u32) {
    +                ///  Enable the PWM channel.
    +                EN: u1,
    +                ///  1: Enable phase-correct modulation. 0: Trailing-edge
    +                PH_CORRECT: u1,
    +                ///  Invert output A
    +                A_INV: u1,
    +                ///  Invert output B
    +                B_INV: u1,
    +                DIVMODE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Free-running counting at rate dictated by fractional divider
    +                        div = 0x0,
    +                        ///  Fractional divider operation is gated by the PWM B pin.
    +                        level = 0x1,
    +                        ///  Counter advances with each rising edge of the PWM B pin.
    +                        rise = 0x2,
    +                        ///  Counter advances with each falling edge of the PWM B pin.
    +                        fall = 0x3,
    +                    },
    +                },
    +                ///  Retard the phase of the counter by 1 count, while it is running.
    +                ///  Self-clearing. Write a 1, and poll until low. Counter must be running.
    +                PH_RET: u1,
    +                ///  Advance the phase of the counter by 1 count, while it is running.
    +                ///  Self-clearing. Write a 1, and poll until low. Counter must be running
    +                ///  at less than full speed (div_int + div_frac / 16 > 1)
    +                PH_ADV: u1,
    +                padding: u24,
    +            }),
    +            ///  INT and FRAC form a fixed-point fractional number.
    +            ///  Counting rate is system clock frequency divided by this number.
    +            ///  Fractional division uses simple 1st-order sigma-delta.
    +            CH5_DIV: mmio.Mmio(packed struct(u32) {
    +                FRAC: u4,
    +                INT: u8,
    +                padding: u20,
    +            }),
    +            ///  Direct access to the PWM counter
    +            CH5_CTR: mmio.Mmio(packed struct(u32) {
    +                CH5_CTR: u16,
    +                padding: u16,
    +            }),
    +            ///  Counter compare values
    +            CH5_CC: mmio.Mmio(packed struct(u32) {
    +                A: u16,
    +                B: u16,
    +            }),
    +            ///  Counter wrap value
    +            CH5_TOP: mmio.Mmio(packed struct(u32) {
    +                CH5_TOP: u16,
    +                padding: u16,
    +            }),
    +            ///  Control and status register
    +            CH6_CSR: mmio.Mmio(packed struct(u32) {
    +                ///  Enable the PWM channel.
    +                EN: u1,
    +                ///  1: Enable phase-correct modulation. 0: Trailing-edge
    +                PH_CORRECT: u1,
    +                ///  Invert output A
    +                A_INV: u1,
    +                ///  Invert output B
    +                B_INV: u1,
    +                DIVMODE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Free-running counting at rate dictated by fractional divider
    +                        div = 0x0,
    +                        ///  Fractional divider operation is gated by the PWM B pin.
    +                        level = 0x1,
    +                        ///  Counter advances with each rising edge of the PWM B pin.
    +                        rise = 0x2,
    +                        ///  Counter advances with each falling edge of the PWM B pin.
    +                        fall = 0x3,
    +                    },
    +                },
    +                ///  Retard the phase of the counter by 1 count, while it is running.
    +                ///  Self-clearing. Write a 1, and poll until low. Counter must be running.
    +                PH_RET: u1,
    +                ///  Advance the phase of the counter by 1 count, while it is running.
    +                ///  Self-clearing. Write a 1, and poll until low. Counter must be running
    +                ///  at less than full speed (div_int + div_frac / 16 > 1)
    +                PH_ADV: u1,
    +                padding: u24,
    +            }),
    +            ///  INT and FRAC form a fixed-point fractional number.
    +            ///  Counting rate is system clock frequency divided by this number.
    +            ///  Fractional division uses simple 1st-order sigma-delta.
    +            CH6_DIV: mmio.Mmio(packed struct(u32) {
    +                FRAC: u4,
    +                INT: u8,
    +                padding: u20,
    +            }),
    +            ///  Direct access to the PWM counter
    +            CH6_CTR: mmio.Mmio(packed struct(u32) {
    +                CH6_CTR: u16,
    +                padding: u16,
    +            }),
    +            ///  Counter compare values
    +            CH6_CC: mmio.Mmio(packed struct(u32) {
    +                A: u16,
    +                B: u16,
    +            }),
    +            ///  Counter wrap value
    +            CH6_TOP: mmio.Mmio(packed struct(u32) {
    +                CH6_TOP: u16,
    +                padding: u16,
    +            }),
    +            ///  Control and status register
    +            CH7_CSR: mmio.Mmio(packed struct(u32) {
    +                ///  Enable the PWM channel.
    +                EN: u1,
    +                ///  1: Enable phase-correct modulation. 0: Trailing-edge
    +                PH_CORRECT: u1,
    +                ///  Invert output A
    +                A_INV: u1,
    +                ///  Invert output B
    +                B_INV: u1,
    +                DIVMODE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        ///  Free-running counting at rate dictated by fractional divider
    +                        div = 0x0,
    +                        ///  Fractional divider operation is gated by the PWM B pin.
    +                        level = 0x1,
    +                        ///  Counter advances with each rising edge of the PWM B pin.
    +                        rise = 0x2,
    +                        ///  Counter advances with each falling edge of the PWM B pin.
    +                        fall = 0x3,
    +                    },
    +                },
    +                ///  Retard the phase of the counter by 1 count, while it is running.
    +                ///  Self-clearing. Write a 1, and poll until low. Counter must be running.
    +                PH_RET: u1,
    +                ///  Advance the phase of the counter by 1 count, while it is running.
    +                ///  Self-clearing. Write a 1, and poll until low. Counter must be running
    +                ///  at less than full speed (div_int + div_frac / 16 > 1)
    +                PH_ADV: u1,
    +                padding: u24,
    +            }),
    +            ///  INT and FRAC form a fixed-point fractional number.
    +            ///  Counting rate is system clock frequency divided by this number.
    +            ///  Fractional division uses simple 1st-order sigma-delta.
    +            CH7_DIV: mmio.Mmio(packed struct(u32) {
    +                FRAC: u4,
    +                INT: u8,
    +                padding: u20,
    +            }),
    +            ///  Direct access to the PWM counter
    +            CH7_CTR: mmio.Mmio(packed struct(u32) {
    +                CH7_CTR: u16,
    +                padding: u16,
    +            }),
    +            ///  Counter compare values
    +            CH7_CC: mmio.Mmio(packed struct(u32) {
    +                A: u16,
    +                B: u16,
    +            }),
    +            ///  Counter wrap value
    +            CH7_TOP: mmio.Mmio(packed struct(u32) {
    +                CH7_TOP: u16,
    +                padding: u16,
    +            }),
    +            ///  This register aliases the CSR_EN bits for all channels.
    +            ///  Writing to this register allows multiple channels to be enabled
    +            ///  or disabled simultaneously, so they can run in perfect sync.
    +            ///  For each channel, there is only one physical EN register bit,
    +            ///  which can be accessed through here or CHx_CSR.
    +            EN: mmio.Mmio(packed struct(u32) {
    +                CH0: u1,
    +                CH1: u1,
    +                CH2: u1,
    +                CH3: u1,
    +                CH4: u1,
    +                CH5: u1,
    +                CH6: u1,
    +                CH7: u1,
    +                padding: u24,
    +            }),
    +            ///  Raw Interrupts
    +            INTR: mmio.Mmio(packed struct(u32) {
    +                CH0: u1,
    +                CH1: u1,
    +                CH2: u1,
    +                CH3: u1,
    +                CH4: u1,
    +                CH5: u1,
    +                CH6: u1,
    +                CH7: u1,
    +                padding: u24,
    +            }),
    +            ///  Interrupt Enable
    +            INTE: mmio.Mmio(packed struct(u32) {
    +                CH0: u1,
    +                CH1: u1,
    +                CH2: u1,
    +                CH3: u1,
    +                CH4: u1,
    +                CH5: u1,
    +                CH6: u1,
    +                CH7: u1,
    +                padding: u24,
    +            }),
    +            ///  Interrupt Force
    +            INTF: mmio.Mmio(packed struct(u32) {
    +                CH0: u1,
    +                CH1: u1,
    +                CH2: u1,
    +                CH3: u1,
    +                CH4: u1,
    +                CH5: u1,
    +                CH6: u1,
    +                CH7: u1,
    +                padding: u24,
    +            }),
    +            ///  Interrupt status after masking & forcing
    +            INTS: mmio.Mmio(packed struct(u32) {
    +                CH0: u1,
    +                CH1: u1,
    +                CH2: u1,
    +                CH3: u1,
    +                CH4: u1,
    +                CH5: u1,
    +                CH6: u1,
    +                CH7: u1,
    +                padding: u24,
    +            }),
    +        };
    +
    +        ///  Controls time and alarms
    +        ///  time is a 64 bit value indicating the time in usec since power-on
    +        ///  timeh is the top 32 bits of time & timel is the bottom 32 bits
    +        ///  to change time write to timelw before timehw
    +        ///  to read time read from timelr before timehr
    +        ///  An alarm is set by setting alarm_enable and writing to the corresponding alarm register
    +        ///  When an alarm is pending, the corresponding alarm_running signal will be high
    +        ///  An alarm can be cancelled before it has finished by clearing the alarm_enable
    +        ///  When an alarm fires, the corresponding alarm_irq is set and alarm_running is cleared
    +        ///  To clear the interrupt write a 1 to the corresponding alarm_irq
    +        pub const TIMER = extern struct {
    +            ///  Write to bits 63:32 of time
    +            ///  always write timelw before timehw
    +            TIMEHW: u32,
    +            ///  Write to bits 31:0 of time
    +            ///  writes do not get copied to time until timehw is written
    +            TIMELW: u32,
    +            ///  Read from bits 63:32 of time
    +            ///  always read timelr before timehr
    +            TIMEHR: u32,
    +            ///  Read from bits 31:0 of time
    +            TIMELR: u32,
    +            ///  Arm alarm 0, and configure the time it will fire.
    +            ///  Once armed, the alarm fires when TIMER_ALARM0 == TIMELR.
    +            ///  The alarm will disarm itself once it fires, and can
    +            ///  be disarmed early using the ARMED status register.
    +            ALARM0: u32,
    +            ///  Arm alarm 1, and configure the time it will fire.
    +            ///  Once armed, the alarm fires when TIMER_ALARM1 == TIMELR.
    +            ///  The alarm will disarm itself once it fires, and can
    +            ///  be disarmed early using the ARMED status register.
    +            ALARM1: u32,
    +            ///  Arm alarm 2, and configure the time it will fire.
    +            ///  Once armed, the alarm fires when TIMER_ALARM2 == TIMELR.
    +            ///  The alarm will disarm itself once it fires, and can
    +            ///  be disarmed early using the ARMED status register.
    +            ALARM2: u32,
    +            ///  Arm alarm 3, and configure the time it will fire.
    +            ///  Once armed, the alarm fires when TIMER_ALARM3 == TIMELR.
    +            ///  The alarm will disarm itself once it fires, and can
    +            ///  be disarmed early using the ARMED status register.
    +            ALARM3: u32,
    +            ///  Indicates the armed/disarmed status of each alarm.
    +            ///  A write to the corresponding ALARMx register arms the alarm.
    +            ///  Alarms automatically disarm upon firing, but writing ones here
    +            ///  will disarm immediately without waiting to fire.
    +            ARMED: mmio.Mmio(packed struct(u32) {
    +                ARMED: u4,
    +                padding: u28,
    +            }),
    +            ///  Raw read from bits 63:32 of time (no side effects)
    +            TIMERAWH: u32,
    +            ///  Raw read from bits 31:0 of time (no side effects)
    +            TIMERAWL: u32,
    +            ///  Set bits high to enable pause when the corresponding debug ports are active
    +            DBGPAUSE: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Pause when processor 0 is in debug mode
    +                DBG0: u1,
    +                ///  Pause when processor 1 is in debug mode
    +                DBG1: u1,
    +                padding: u29,
    +            }),
    +            ///  Set high to pause the timer
    +            PAUSE: mmio.Mmio(packed struct(u32) {
    +                PAUSE: u1,
    +                padding: u31,
    +            }),
    +            ///  Raw Interrupts
    +            INTR: mmio.Mmio(packed struct(u32) {
    +                ALARM_0: u1,
    +                ALARM_1: u1,
    +                ALARM_2: u1,
    +                ALARM_3: u1,
    +                padding: u28,
    +            }),
    +            ///  Interrupt Enable
    +            INTE: mmio.Mmio(packed struct(u32) {
    +                ALARM_0: u1,
    +                ALARM_1: u1,
    +                ALARM_2: u1,
    +                ALARM_3: u1,
    +                padding: u28,
    +            }),
    +            ///  Interrupt Force
    +            INTF: mmio.Mmio(packed struct(u32) {
    +                ALARM_0: u1,
    +                ALARM_1: u1,
    +                ALARM_2: u1,
    +                ALARM_3: u1,
    +                padding: u28,
    +            }),
    +            ///  Interrupt status after masking & forcing
    +            INTS: mmio.Mmio(packed struct(u32) {
    +                ALARM_0: u1,
    +                ALARM_1: u1,
    +                ALARM_2: u1,
    +                ALARM_3: u1,
    +                padding: u28,
    +            }),
    +        };
    +
    +        pub const WATCHDOG = extern struct {
    +            ///  Watchdog control
    +            ///  The rst_wdsel register determines which subsystems are reset when the watchdog is triggered.
    +            ///  The watchdog can be triggered in software.
    +            CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  Indicates the number of ticks / 2 (see errata RP2040-E1) before a watchdog reset will be triggered
    +                TIME: u24,
    +                ///  Pause the watchdog timer when JTAG is accessing the bus fabric
    +                PAUSE_JTAG: u1,
    +                ///  Pause the watchdog timer when processor 0 is in debug mode
    +                PAUSE_DBG0: u1,
    +                ///  Pause the watchdog timer when processor 1 is in debug mode
    +                PAUSE_DBG1: u1,
    +                reserved30: u3,
    +                ///  When not enabled the watchdog timer is paused
    +                ENABLE: u1,
    +                ///  Trigger a watchdog reset
    +                TRIGGER: u1,
    +            }),
    +            ///  Load the watchdog timer. The maximum setting is 0xffffff which corresponds to 0xffffff / 2 ticks before triggering a watchdog reset (see errata RP2040-E1).
    +            LOAD: mmio.Mmio(packed struct(u32) {
    +                LOAD: u24,
    +                padding: u8,
    +            }),
    +            ///  Logs the reason for the last reset. Both bits are zero for the case of a hardware reset.
    +            REASON: mmio.Mmio(packed struct(u32) {
    +                TIMER: u1,
    +                FORCE: u1,
    +                padding: u30,
    +            }),
    +            ///  Scratch register. Information persists through soft reset of the chip.
    +            SCRATCH0: u32,
    +            ///  Scratch register. Information persists through soft reset of the chip.
    +            SCRATCH1: u32,
    +            ///  Scratch register. Information persists through soft reset of the chip.
    +            SCRATCH2: u32,
    +            ///  Scratch register. Information persists through soft reset of the chip.
    +            SCRATCH3: u32,
    +            ///  Scratch register. Information persists through soft reset of the chip.
    +            SCRATCH4: u32,
    +            ///  Scratch register. Information persists through soft reset of the chip.
    +            SCRATCH5: u32,
    +            ///  Scratch register. Information persists through soft reset of the chip.
    +            SCRATCH6: u32,
    +            ///  Scratch register. Information persists through soft reset of the chip.
    +            SCRATCH7: u32,
    +            ///  Controls the tick generator
    +            TICK: mmio.Mmio(packed struct(u32) {
    +                ///  Total number of clk_tick cycles before the next tick.
    +                CYCLES: u9,
    +                ///  start / stop tick generation
    +                ENABLE: u1,
    +                ///  Is the tick generator running?
    +                RUNNING: u1,
    +                ///  Count down timer: the remaining number clk_tick cycles before the next tick is generated.
    +                COUNT: u9,
    +                padding: u12,
    +            }),
    +        };
    +
    +        ///  Register block to control RTC
    +        pub const RTC = extern struct {
    +            ///  Divider minus 1 for the 1 second counter. Safe to change the value when RTC is not enabled.
    +            CLKDIV_M1: mmio.Mmio(packed struct(u32) {
    +                CLKDIV_M1: u16,
    +                padding: u16,
    +            }),
    +            ///  RTC setup register 0
    +            SETUP_0: mmio.Mmio(packed struct(u32) {
    +                ///  Day of the month (1..31)
    +                DAY: u5,
    +                reserved8: u3,
    +                ///  Month (1..12)
    +                MONTH: u4,
    +                ///  Year
    +                YEAR: u12,
    +                padding: u8,
    +            }),
    +            ///  RTC setup register 1
    +            SETUP_1: mmio.Mmio(packed struct(u32) {
    +                ///  Seconds
    +                SEC: u6,
    +                reserved8: u2,
    +                ///  Minutes
    +                MIN: u6,
    +                reserved16: u2,
    +                ///  Hours
    +                HOUR: u5,
    +                reserved24: u3,
    +                ///  Day of the week: 1-Monday...0-Sunday ISO 8601 mod 7
    +                DOTW: u3,
    +                padding: u5,
    +            }),
    +            ///  RTC Control and status
    +            CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  Enable RTC
    +                RTC_ENABLE: u1,
    +                ///  RTC enabled (running)
    +                RTC_ACTIVE: u1,
    +                reserved4: u2,
    +                ///  Load RTC
    +                LOAD: u1,
    +                reserved8: u3,
    +                ///  If set, leapyear is forced off.
    +                ///  Useful for years divisible by 100 but not by 400
    +                FORCE_NOTLEAPYEAR: u1,
    +                padding: u23,
    +            }),
    +            ///  Interrupt setup register 0
    +            IRQ_SETUP_0: mmio.Mmio(packed struct(u32) {
    +                ///  Day of the month (1..31)
    +                DAY: u5,
    +                reserved8: u3,
    +                ///  Month (1..12)
    +                MONTH: u4,
    +                ///  Year
    +                YEAR: u12,
    +                ///  Enable day matching
    +                DAY_ENA: u1,
    +                ///  Enable month matching
    +                MONTH_ENA: u1,
    +                ///  Enable year matching
    +                YEAR_ENA: u1,
    +                reserved28: u1,
    +                ///  Global match enable. Don't change any other value while this one is enabled
    +                MATCH_ENA: u1,
    +                MATCH_ACTIVE: u1,
    +                padding: u2,
    +            }),
    +            ///  Interrupt setup register 1
    +            IRQ_SETUP_1: mmio.Mmio(packed struct(u32) {
    +                ///  Seconds
    +                SEC: u6,
    +                reserved8: u2,
    +                ///  Minutes
    +                MIN: u6,
    +                reserved16: u2,
    +                ///  Hours
    +                HOUR: u5,
    +                reserved24: u3,
    +                ///  Day of the week
    +                DOTW: u3,
    +                reserved28: u1,
    +                ///  Enable second matching
    +                SEC_ENA: u1,
    +                ///  Enable minute matching
    +                MIN_ENA: u1,
    +                ///  Enable hour matching
    +                HOUR_ENA: u1,
    +                ///  Enable day of the week matching
    +                DOTW_ENA: u1,
    +            }),
    +            ///  RTC register 1.
    +            RTC_1: mmio.Mmio(packed struct(u32) {
    +                ///  Day of the month (1..31)
    +                DAY: u5,
    +                reserved8: u3,
    +                ///  Month (1..12)
    +                MONTH: u4,
    +                ///  Year
    +                YEAR: u12,
    +                padding: u8,
    +            }),
    +            ///  RTC register 0
    +            ///  Read this before RTC 1!
    +            RTC_0: mmio.Mmio(packed struct(u32) {
    +                ///  Seconds
    +                SEC: u6,
    +                reserved8: u2,
    +                ///  Minutes
    +                MIN: u6,
    +                reserved16: u2,
    +                ///  Hours
    +                HOUR: u5,
    +                reserved24: u3,
    +                ///  Day of the week
    +                DOTW: u3,
    +                padding: u5,
    +            }),
    +            ///  Raw Interrupts
    +            INTR: mmio.Mmio(packed struct(u32) {
    +                RTC: u1,
    +                padding: u31,
    +            }),
    +            ///  Interrupt Enable
    +            INTE: mmio.Mmio(packed struct(u32) {
    +                RTC: u1,
    +                padding: u31,
    +            }),
    +            ///  Interrupt Force
    +            INTF: mmio.Mmio(packed struct(u32) {
    +                RTC: u1,
    +                padding: u31,
    +            }),
    +            ///  Interrupt status after masking & forcing
    +            INTS: mmio.Mmio(packed struct(u32) {
    +                RTC: u1,
    +                padding: u31,
    +            }),
    +        };
    +
    +        pub const ROSC = extern struct {
    +            ///  Ring Oscillator control
    +            CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  Controls the number of delay stages in the ROSC ring
    +                ///  LOW uses stages 0 to 7
    +                ///  MEDIUM uses stages 0 to 5
    +                ///  HIGH uses stages 0 to 3
    +                ///  TOOHIGH uses stages 0 to 1 and should not be used because its frequency exceeds design specifications
    +                ///  The clock output will not glitch when changing the range up one step at a time
    +                ///  The clock output will glitch when changing the range down
    +                ///  Note: the values here are gray coded which is why HIGH comes before TOOHIGH
    +                FREQ_RANGE: packed union {
    +                    raw: u12,
    +                    value: enum(u12) {
    +                        LOW = 0xfa4,
    +                        MEDIUM = 0xfa5,
    +                        HIGH = 0xfa7,
    +                        TOOHIGH = 0xfa6,
    +                        _,
    +                    },
    +                },
    +                ///  On power-up this field is initialised to ENABLE
    +                ///  The system clock must be switched to another source before setting this field to DISABLE otherwise the chip will lock up
    +                ///  The 12-bit code is intended to give some protection against accidental writes. An invalid setting will enable the oscillator.
    +                ENABLE: packed union {
    +                    raw: u12,
    +                    value: enum(u12) {
    +                        DISABLE = 0xd1e,
    +                        ENABLE = 0xfab,
    +                        _,
    +                    },
    +                },
    +                padding: u8,
    +            }),
    +            ///  The FREQA & FREQB registers control the frequency by controlling the drive strength of each stage
    +            ///  The drive strength has 4 levels determined by the number of bits set
    +            ///  Increasing the number of bits set increases the drive strength and increases the oscillation frequency
    +            ///  0 bits set is the default drive strength
    +            ///  1 bit set doubles the drive strength
    +            ///  2 bits set triples drive strength
    +            ///  3 bits set quadruples drive strength
    +            FREQA: mmio.Mmio(packed struct(u32) {
    +                ///  Stage 0 drive strength
    +                DS0: u3,
    +                reserved4: u1,
    +                ///  Stage 1 drive strength
    +                DS1: u3,
    +                reserved8: u1,
    +                ///  Stage 2 drive strength
    +                DS2: u3,
    +                reserved12: u1,
    +                ///  Stage 3 drive strength
    +                DS3: u3,
    +                reserved16: u1,
    +                ///  Set to 0x9696 to apply the settings
    +                ///  Any other value in this field will set all drive strengths to 0
    +                PASSWD: packed union {
    +                    raw: u16,
    +                    value: enum(u16) {
    +                        PASS = 0x9696,
    +                        _,
    +                    },
    +                },
    +            }),
    +            ///  For a detailed description see freqa register
    +            FREQB: mmio.Mmio(packed struct(u32) {
    +                ///  Stage 4 drive strength
    +                DS4: u3,
    +                reserved4: u1,
    +                ///  Stage 5 drive strength
    +                DS5: u3,
    +                reserved8: u1,
    +                ///  Stage 6 drive strength
    +                DS6: u3,
    +                reserved12: u1,
    +                ///  Stage 7 drive strength
    +                DS7: u3,
    +                reserved16: u1,
    +                ///  Set to 0x9696 to apply the settings
    +                ///  Any other value in this field will set all drive strengths to 0
    +                PASSWD: packed union {
    +                    raw: u16,
    +                    value: enum(u16) {
    +                        PASS = 0x9696,
    +                        _,
    +                    },
    +                },
    +            }),
    +            ///  Ring Oscillator pause control
    +            ///  This is used to save power by pausing the ROSC
    +            ///  On power-up this field is initialised to WAKE
    +            ///  An invalid write will also select WAKE
    +            ///  Warning: setup the irq before selecting dormant mode
    +            DORMANT: u32,
    +            ///  Controls the output divider
    +            DIV: mmio.Mmio(packed struct(u32) {
    +                ///  set to 0xaa0 + div where
    +                ///  div = 0 divides by 32
    +                ///  div = 1-31 divides by div
    +                ///  any other value sets div=31
    +                ///  this register resets to div=16
    +                DIV: packed union {
    +                    raw: u12,
    +                    value: enum(u12) {
    +                        PASS = 0xaa0,
    +                        _,
    +                    },
    +                },
    +                padding: u20,
    +            }),
    +            ///  Controls the phase shifted output
    +            PHASE: mmio.Mmio(packed struct(u32) {
    +                ///  phase shift the phase-shifted output by SHIFT input clocks
    +                ///  this can be changed on-the-fly
    +                ///  must be set to 0 before setting div=1
    +                SHIFT: u2,
    +                ///  invert the phase-shifted output
    +                ///  this is ignored when div=1
    +                FLIP: u1,
    +                ///  enable the phase-shifted output
    +                ///  this can be changed on-the-fly
    +                ENABLE: u1,
    +                ///  set to 0xaa
    +                ///  any other value enables the output with shift=0
    +                PASSWD: u8,
    +                padding: u20,
    +            }),
    +            ///  Ring Oscillator Status
    +            STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved12: u12,
    +                ///  Oscillator is enabled but not necessarily running and stable
    +                ///  this resets to 0 but transitions to 1 during chip startup
    +                ENABLED: u1,
    +                reserved16: u3,
    +                ///  post-divider is running
    +                ///  this resets to 0 but transitions to 1 during chip startup
    +                DIV_RUNNING: u1,
    +                reserved24: u7,
    +                ///  An invalid value has been written to CTRL_ENABLE or CTRL_FREQ_RANGE or FREQA or FREQB or DIV or PHASE or DORMANT
    +                BADWRITE: u1,
    +                reserved31: u6,
    +                ///  Oscillator is running and stable
    +                STABLE: u1,
    +            }),
    +            ///  This just reads the state of the oscillator output so randomness is compromised if the ring oscillator is stopped or run at a harmonic of the bus frequency
    +            RANDOMBIT: mmio.Mmio(packed struct(u32) {
    +                RANDOMBIT: u1,
    +                padding: u31,
    +            }),
    +            ///  A down counter running at the ROSC frequency which counts to zero and stops.
    +            ///  To start the counter write a non-zero value.
    +            ///  Can be used for short software pauses when setting up time sensitive hardware.
    +            COUNT: mmio.Mmio(packed struct(u32) {
    +                COUNT: u8,
    +                padding: u24,
    +            }),
    +        };
    +
    +        ///  control and status for on-chip voltage regulator and chip level reset subsystem
    +        pub const VREG_AND_CHIP_RESET = extern struct {
    +            ///  Voltage regulator control and status
    +            VREG: mmio.Mmio(packed struct(u32) {
    +                ///  enable
    +                ///  0=not enabled, 1=enabled
    +                EN: u1,
    +                ///  high impedance mode select
    +                ///  0=not in high impedance mode, 1=in high impedance mode
    +                HIZ: u1,
    +                reserved4: u2,
    +                ///  output voltage select
    +                ///  0000 to 0101 - 0.80V
    +                ///  0110 - 0.85V
    +                ///  0111 - 0.90V
    +                ///  1000 - 0.95V
    +                ///  1001 - 1.00V
    +                ///  1010 - 1.05V
    +                ///  1011 - 1.10V (default)
    +                ///  1100 - 1.15V
    +                ///  1101 - 1.20V
    +                ///  1110 - 1.25V
    +                ///  1111 - 1.30V
    +                VSEL: u4,
    +                reserved12: u4,
    +                ///  regulation status
    +                ///  0=not in regulation, 1=in regulation
    +                ROK: u1,
    +                padding: u19,
    +            }),
    +            ///  brown-out detection control
    +            BOD: mmio.Mmio(packed struct(u32) {
    +                ///  enable
    +                ///  0=not enabled, 1=enabled
    +                EN: u1,
    +                reserved4: u3,
    +                ///  threshold select
    +                ///  0000 - 0.473V
    +                ///  0001 - 0.516V
    +                ///  0010 - 0.559V
    +                ///  0011 - 0.602V
    +                ///  0100 - 0.645V
    +                ///  0101 - 0.688V
    +                ///  0110 - 0.731V
    +                ///  0111 - 0.774V
    +                ///  1000 - 0.817V
    +                ///  1001 - 0.860V (default)
    +                ///  1010 - 0.903V
    +                ///  1011 - 0.946V
    +                ///  1100 - 0.989V
    +                ///  1101 - 1.032V
    +                ///  1110 - 1.075V
    +                ///  1111 - 1.118V
    +                VSEL: u4,
    +                padding: u24,
    +            }),
    +            ///  Chip reset control and status
    +            CHIP_RESET: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  Last reset was from the power-on reset or brown-out detection blocks
    +                HAD_POR: u1,
    +                reserved16: u7,
    +                ///  Last reset was from the RUN pin
    +                HAD_RUN: u1,
    +                reserved20: u3,
    +                ///  Last reset was from the debug port
    +                HAD_PSM_RESTART: u1,
    +                reserved24: u3,
    +                ///  This is set by psm_restart from the debugger.
    +                ///  Its purpose is to branch bootcode to a safe mode when the debugger has issued a psm_restart in order to recover from a boot lock-up.
    +                ///  In the safe mode the debugger can repair the boot code, clear this flag then reboot the processor.
    +                PSM_RESTART_FLAG: u1,
    +                padding: u7,
    +            }),
    +        };
    +
    +        ///  Testbench manager. Allows the programmer to know what platform their software is running on.
    +        pub const TBMAN = extern struct {
    +            ///  Indicates the type of platform in use
    +            PLATFORM: mmio.Mmio(packed struct(u32) {
    +                ///  Indicates the platform is an ASIC
    +                ASIC: u1,
    +                ///  Indicates the platform is an FPGA
    +                FPGA: u1,
    +                padding: u30,
    +            }),
    +        };
    +
    +        ///  DMA with separate read and write masters
    +        pub const DMA = extern struct {
    +            ///  DMA Channel 0 Read Address pointer
    +            ///  This register updates automatically each time a read completes. The current value is the next address to be read by this channel.
    +            CH0_READ_ADDR: u32,
    +            ///  DMA Channel 0 Write Address pointer
    +            ///  This register updates automatically each time a write completes. The current value is the next address to be written by this channel.
    +            CH0_WRITE_ADDR: u32,
    +            ///  DMA Channel 0 Transfer Count
    +            ///  Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).
    +            ///  When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.
    +            ///  Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.
    +            ///  The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.
    +            CH0_TRANS_COUNT: u32,
    +            ///  DMA Channel 0 Control and Status
    +            CH0_CTRL_TRIG: mmio.Mmio(packed struct(u32) {
    +                ///  DMA Channel Enable.
    +                ///  When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)
    +                EN: u1,
    +                ///  HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.
    +                ///  This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.
    +                HIGH_PRIORITY: u1,
    +                ///  Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.
    +                DATA_SIZE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        SIZE_BYTE = 0x0,
    +                        SIZE_HALFWORD = 0x1,
    +                        SIZE_WORD = 0x2,
    +                        _,
    +                    },
    +                },
    +                ///  If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.
    +                ///  Generally this should be disabled for peripheral-to-memory transfers.
    +                INCR_READ: u1,
    +                ///  If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.
    +                ///  Generally this should be disabled for memory-to-peripheral transfers.
    +                INCR_WRITE: u1,
    +                ///  Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.
    +                ///  Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.
    +                RING_SIZE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        RING_NONE = 0x0,
    +                        _,
    +                    },
    +                },
    +                ///  Select whether RING_SIZE applies to read or write addresses.
    +                ///  If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.
    +                RING_SEL: u1,
    +                ///  When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.
    +                CHAIN_TO: u4,
    +                ///  Select a Transfer Request signal.
    +                ///  The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).
    +                ///  0x0 to 0x3a -> select DREQ n as TREQ
    +                TREQ_SEL: packed union {
    +                    raw: u6,
    +                    value: enum(u6) {
    +                        ///  Select Timer 0 as TREQ
    +                        TIMER0 = 0x3b,
    +                        ///  Select Timer 1 as TREQ
    +                        TIMER1 = 0x3c,
    +                        ///  Select Timer 2 as TREQ (Optional)
    +                        TIMER2 = 0x3d,
    +                        ///  Select Timer 3 as TREQ (Optional)
    +                        TIMER3 = 0x3e,
    +                        ///  Permanent request, for unpaced transfers.
    +                        PERMANENT = 0x3f,
    +                        _,
    +                    },
    +                },
    +                ///  In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.
    +                ///  This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.
    +                IRQ_QUIET: u1,
    +                ///  Apply byte-swap transformation to DMA data.
    +                ///  For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.
    +                BSWAP: u1,
    +                ///  If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.
    +                ///  This allows checksum to be enabled or disabled on a per-control- block basis.
    +                SNIFF_EN: u1,
    +                ///  This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.
    +                ///  To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    +                BUSY: u1,
    +                reserved29: u4,
    +                ///  If 1, the channel received a write bus error. Write one to clear.
    +                ///  WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)
    +                WRITE_ERROR: u1,
    +                ///  If 1, the channel received a read bus error. Write one to clear.
    +                ///  READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)
    +                READ_ERROR: u1,
    +                ///  Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.
    +                AHB_ERROR: u1,
    +            }),
    +            ///  Alias for channel 0 CTRL register
    +            CH0_AL1_CTRL: u32,
    +            ///  Alias for channel 0 READ_ADDR register
    +            CH0_AL1_READ_ADDR: u32,
    +            ///  Alias for channel 0 WRITE_ADDR register
    +            CH0_AL1_WRITE_ADDR: u32,
    +            ///  Alias for channel 0 TRANS_COUNT register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH0_AL1_TRANS_COUNT_TRIG: u32,
    +            ///  Alias for channel 0 CTRL register
    +            CH0_AL2_CTRL: u32,
    +            ///  Alias for channel 0 TRANS_COUNT register
    +            CH0_AL2_TRANS_COUNT: u32,
    +            ///  Alias for channel 0 READ_ADDR register
    +            CH0_AL2_READ_ADDR: u32,
    +            ///  Alias for channel 0 WRITE_ADDR register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH0_AL2_WRITE_ADDR_TRIG: u32,
    +            ///  Alias for channel 0 CTRL register
    +            CH0_AL3_CTRL: u32,
    +            ///  Alias for channel 0 WRITE_ADDR register
    +            CH0_AL3_WRITE_ADDR: u32,
    +            ///  Alias for channel 0 TRANS_COUNT register
    +            CH0_AL3_TRANS_COUNT: u32,
    +            ///  Alias for channel 0 READ_ADDR register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH0_AL3_READ_ADDR_TRIG: u32,
    +            ///  DMA Channel 1 Read Address pointer
    +            ///  This register updates automatically each time a read completes. The current value is the next address to be read by this channel.
    +            CH1_READ_ADDR: u32,
    +            ///  DMA Channel 1 Write Address pointer
    +            ///  This register updates automatically each time a write completes. The current value is the next address to be written by this channel.
    +            CH1_WRITE_ADDR: u32,
    +            ///  DMA Channel 1 Transfer Count
    +            ///  Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).
    +            ///  When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.
    +            ///  Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.
    +            ///  The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.
    +            CH1_TRANS_COUNT: u32,
    +            ///  DMA Channel 1 Control and Status
    +            CH1_CTRL_TRIG: mmio.Mmio(packed struct(u32) {
    +                ///  DMA Channel Enable.
    +                ///  When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)
    +                EN: u1,
    +                ///  HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.
    +                ///  This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.
    +                HIGH_PRIORITY: u1,
    +                ///  Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.
    +                DATA_SIZE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        SIZE_BYTE = 0x0,
    +                        SIZE_HALFWORD = 0x1,
    +                        SIZE_WORD = 0x2,
    +                        _,
    +                    },
    +                },
    +                ///  If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.
    +                ///  Generally this should be disabled for peripheral-to-memory transfers.
    +                INCR_READ: u1,
    +                ///  If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.
    +                ///  Generally this should be disabled for memory-to-peripheral transfers.
    +                INCR_WRITE: u1,
    +                ///  Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.
    +                ///  Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.
    +                RING_SIZE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        RING_NONE = 0x0,
    +                        _,
    +                    },
    +                },
    +                ///  Select whether RING_SIZE applies to read or write addresses.
    +                ///  If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.
    +                RING_SEL: u1,
    +                ///  When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.
    +                CHAIN_TO: u4,
    +                ///  Select a Transfer Request signal.
    +                ///  The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).
    +                ///  0x0 to 0x3a -> select DREQ n as TREQ
    +                TREQ_SEL: packed union {
    +                    raw: u6,
    +                    value: enum(u6) {
    +                        ///  Select Timer 0 as TREQ
    +                        TIMER0 = 0x3b,
    +                        ///  Select Timer 1 as TREQ
    +                        TIMER1 = 0x3c,
    +                        ///  Select Timer 2 as TREQ (Optional)
    +                        TIMER2 = 0x3d,
    +                        ///  Select Timer 3 as TREQ (Optional)
    +                        TIMER3 = 0x3e,
    +                        ///  Permanent request, for unpaced transfers.
    +                        PERMANENT = 0x3f,
    +                        _,
    +                    },
    +                },
    +                ///  In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.
    +                ///  This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.
    +                IRQ_QUIET: u1,
    +                ///  Apply byte-swap transformation to DMA data.
    +                ///  For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.
    +                BSWAP: u1,
    +                ///  If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.
    +                ///  This allows checksum to be enabled or disabled on a per-control- block basis.
    +                SNIFF_EN: u1,
    +                ///  This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.
    +                ///  To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    +                BUSY: u1,
    +                reserved29: u4,
    +                ///  If 1, the channel received a write bus error. Write one to clear.
    +                ///  WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)
    +                WRITE_ERROR: u1,
    +                ///  If 1, the channel received a read bus error. Write one to clear.
    +                ///  READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)
    +                READ_ERROR: u1,
    +                ///  Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.
    +                AHB_ERROR: u1,
    +            }),
    +            ///  Alias for channel 1 CTRL register
    +            CH1_AL1_CTRL: u32,
    +            ///  Alias for channel 1 READ_ADDR register
    +            CH1_AL1_READ_ADDR: u32,
    +            ///  Alias for channel 1 WRITE_ADDR register
    +            CH1_AL1_WRITE_ADDR: u32,
    +            ///  Alias for channel 1 TRANS_COUNT register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH1_AL1_TRANS_COUNT_TRIG: u32,
    +            ///  Alias for channel 1 CTRL register
    +            CH1_AL2_CTRL: u32,
    +            ///  Alias for channel 1 TRANS_COUNT register
    +            CH1_AL2_TRANS_COUNT: u32,
    +            ///  Alias for channel 1 READ_ADDR register
    +            CH1_AL2_READ_ADDR: u32,
    +            ///  Alias for channel 1 WRITE_ADDR register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH1_AL2_WRITE_ADDR_TRIG: u32,
    +            ///  Alias for channel 1 CTRL register
    +            CH1_AL3_CTRL: u32,
    +            ///  Alias for channel 1 WRITE_ADDR register
    +            CH1_AL3_WRITE_ADDR: u32,
    +            ///  Alias for channel 1 TRANS_COUNT register
    +            CH1_AL3_TRANS_COUNT: u32,
    +            ///  Alias for channel 1 READ_ADDR register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH1_AL3_READ_ADDR_TRIG: u32,
    +            ///  DMA Channel 2 Read Address pointer
    +            ///  This register updates automatically each time a read completes. The current value is the next address to be read by this channel.
    +            CH2_READ_ADDR: u32,
    +            ///  DMA Channel 2 Write Address pointer
    +            ///  This register updates automatically each time a write completes. The current value is the next address to be written by this channel.
    +            CH2_WRITE_ADDR: u32,
    +            ///  DMA Channel 2 Transfer Count
    +            ///  Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).
    +            ///  When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.
    +            ///  Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.
    +            ///  The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.
    +            CH2_TRANS_COUNT: u32,
    +            ///  DMA Channel 2 Control and Status
    +            CH2_CTRL_TRIG: mmio.Mmio(packed struct(u32) {
    +                ///  DMA Channel Enable.
    +                ///  When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)
    +                EN: u1,
    +                ///  HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.
    +                ///  This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.
    +                HIGH_PRIORITY: u1,
    +                ///  Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.
    +                DATA_SIZE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        SIZE_BYTE = 0x0,
    +                        SIZE_HALFWORD = 0x1,
    +                        SIZE_WORD = 0x2,
    +                        _,
    +                    },
    +                },
    +                ///  If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.
    +                ///  Generally this should be disabled for peripheral-to-memory transfers.
    +                INCR_READ: u1,
    +                ///  If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.
    +                ///  Generally this should be disabled for memory-to-peripheral transfers.
    +                INCR_WRITE: u1,
    +                ///  Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.
    +                ///  Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.
    +                RING_SIZE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        RING_NONE = 0x0,
    +                        _,
    +                    },
    +                },
    +                ///  Select whether RING_SIZE applies to read or write addresses.
    +                ///  If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.
    +                RING_SEL: u1,
    +                ///  When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.
    +                CHAIN_TO: u4,
    +                ///  Select a Transfer Request signal.
    +                ///  The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).
    +                ///  0x0 to 0x3a -> select DREQ n as TREQ
    +                TREQ_SEL: packed union {
    +                    raw: u6,
    +                    value: enum(u6) {
    +                        ///  Select Timer 0 as TREQ
    +                        TIMER0 = 0x3b,
    +                        ///  Select Timer 1 as TREQ
    +                        TIMER1 = 0x3c,
    +                        ///  Select Timer 2 as TREQ (Optional)
    +                        TIMER2 = 0x3d,
    +                        ///  Select Timer 3 as TREQ (Optional)
    +                        TIMER3 = 0x3e,
    +                        ///  Permanent request, for unpaced transfers.
    +                        PERMANENT = 0x3f,
    +                        _,
    +                    },
    +                },
    +                ///  In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.
    +                ///  This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.
    +                IRQ_QUIET: u1,
    +                ///  Apply byte-swap transformation to DMA data.
    +                ///  For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.
    +                BSWAP: u1,
    +                ///  If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.
    +                ///  This allows checksum to be enabled or disabled on a per-control- block basis.
    +                SNIFF_EN: u1,
    +                ///  This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.
    +                ///  To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    +                BUSY: u1,
    +                reserved29: u4,
    +                ///  If 1, the channel received a write bus error. Write one to clear.
    +                ///  WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)
    +                WRITE_ERROR: u1,
    +                ///  If 1, the channel received a read bus error. Write one to clear.
    +                ///  READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)
    +                READ_ERROR: u1,
    +                ///  Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.
    +                AHB_ERROR: u1,
    +            }),
    +            ///  Alias for channel 2 CTRL register
    +            CH2_AL1_CTRL: u32,
    +            ///  Alias for channel 2 READ_ADDR register
    +            CH2_AL1_READ_ADDR: u32,
    +            ///  Alias for channel 2 WRITE_ADDR register
    +            CH2_AL1_WRITE_ADDR: u32,
    +            ///  Alias for channel 2 TRANS_COUNT register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH2_AL1_TRANS_COUNT_TRIG: u32,
    +            ///  Alias for channel 2 CTRL register
    +            CH2_AL2_CTRL: u32,
    +            ///  Alias for channel 2 TRANS_COUNT register
    +            CH2_AL2_TRANS_COUNT: u32,
    +            ///  Alias for channel 2 READ_ADDR register
    +            CH2_AL2_READ_ADDR: u32,
    +            ///  Alias for channel 2 WRITE_ADDR register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH2_AL2_WRITE_ADDR_TRIG: u32,
    +            ///  Alias for channel 2 CTRL register
    +            CH2_AL3_CTRL: u32,
    +            ///  Alias for channel 2 WRITE_ADDR register
    +            CH2_AL3_WRITE_ADDR: u32,
    +            ///  Alias for channel 2 TRANS_COUNT register
    +            CH2_AL3_TRANS_COUNT: u32,
    +            ///  Alias for channel 2 READ_ADDR register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH2_AL3_READ_ADDR_TRIG: u32,
    +            ///  DMA Channel 3 Read Address pointer
    +            ///  This register updates automatically each time a read completes. The current value is the next address to be read by this channel.
    +            CH3_READ_ADDR: u32,
    +            ///  DMA Channel 3 Write Address pointer
    +            ///  This register updates automatically each time a write completes. The current value is the next address to be written by this channel.
    +            CH3_WRITE_ADDR: u32,
    +            ///  DMA Channel 3 Transfer Count
    +            ///  Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).
    +            ///  When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.
    +            ///  Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.
    +            ///  The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.
    +            CH3_TRANS_COUNT: u32,
    +            ///  DMA Channel 3 Control and Status
    +            CH3_CTRL_TRIG: mmio.Mmio(packed struct(u32) {
    +                ///  DMA Channel Enable.
    +                ///  When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)
    +                EN: u1,
    +                ///  HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.
    +                ///  This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.
    +                HIGH_PRIORITY: u1,
    +                ///  Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.
    +                DATA_SIZE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        SIZE_BYTE = 0x0,
    +                        SIZE_HALFWORD = 0x1,
    +                        SIZE_WORD = 0x2,
    +                        _,
    +                    },
    +                },
    +                ///  If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.
    +                ///  Generally this should be disabled for peripheral-to-memory transfers.
    +                INCR_READ: u1,
    +                ///  If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.
    +                ///  Generally this should be disabled for memory-to-peripheral transfers.
    +                INCR_WRITE: u1,
    +                ///  Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.
    +                ///  Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.
    +                RING_SIZE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        RING_NONE = 0x0,
    +                        _,
    +                    },
    +                },
    +                ///  Select whether RING_SIZE applies to read or write addresses.
    +                ///  If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.
    +                RING_SEL: u1,
    +                ///  When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.
    +                CHAIN_TO: u4,
    +                ///  Select a Transfer Request signal.
    +                ///  The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).
    +                ///  0x0 to 0x3a -> select DREQ n as TREQ
    +                TREQ_SEL: packed union {
    +                    raw: u6,
    +                    value: enum(u6) {
    +                        ///  Select Timer 0 as TREQ
    +                        TIMER0 = 0x3b,
    +                        ///  Select Timer 1 as TREQ
    +                        TIMER1 = 0x3c,
    +                        ///  Select Timer 2 as TREQ (Optional)
    +                        TIMER2 = 0x3d,
    +                        ///  Select Timer 3 as TREQ (Optional)
    +                        TIMER3 = 0x3e,
    +                        ///  Permanent request, for unpaced transfers.
    +                        PERMANENT = 0x3f,
    +                        _,
    +                    },
    +                },
    +                ///  In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.
    +                ///  This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.
    +                IRQ_QUIET: u1,
    +                ///  Apply byte-swap transformation to DMA data.
    +                ///  For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.
    +                BSWAP: u1,
    +                ///  If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.
    +                ///  This allows checksum to be enabled or disabled on a per-control- block basis.
    +                SNIFF_EN: u1,
    +                ///  This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.
    +                ///  To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    +                BUSY: u1,
    +                reserved29: u4,
    +                ///  If 1, the channel received a write bus error. Write one to clear.
    +                ///  WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)
    +                WRITE_ERROR: u1,
    +                ///  If 1, the channel received a read bus error. Write one to clear.
    +                ///  READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)
    +                READ_ERROR: u1,
    +                ///  Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.
    +                AHB_ERROR: u1,
    +            }),
    +            ///  Alias for channel 3 CTRL register
    +            CH3_AL1_CTRL: u32,
    +            ///  Alias for channel 3 READ_ADDR register
    +            CH3_AL1_READ_ADDR: u32,
    +            ///  Alias for channel 3 WRITE_ADDR register
    +            CH3_AL1_WRITE_ADDR: u32,
    +            ///  Alias for channel 3 TRANS_COUNT register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH3_AL1_TRANS_COUNT_TRIG: u32,
    +            ///  Alias for channel 3 CTRL register
    +            CH3_AL2_CTRL: u32,
    +            ///  Alias for channel 3 TRANS_COUNT register
    +            CH3_AL2_TRANS_COUNT: u32,
    +            ///  Alias for channel 3 READ_ADDR register
    +            CH3_AL2_READ_ADDR: u32,
    +            ///  Alias for channel 3 WRITE_ADDR register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH3_AL2_WRITE_ADDR_TRIG: u32,
    +            ///  Alias for channel 3 CTRL register
    +            CH3_AL3_CTRL: u32,
    +            ///  Alias for channel 3 WRITE_ADDR register
    +            CH3_AL3_WRITE_ADDR: u32,
    +            ///  Alias for channel 3 TRANS_COUNT register
    +            CH3_AL3_TRANS_COUNT: u32,
    +            ///  Alias for channel 3 READ_ADDR register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH3_AL3_READ_ADDR_TRIG: u32,
    +            ///  DMA Channel 4 Read Address pointer
    +            ///  This register updates automatically each time a read completes. The current value is the next address to be read by this channel.
    +            CH4_READ_ADDR: u32,
    +            ///  DMA Channel 4 Write Address pointer
    +            ///  This register updates automatically each time a write completes. The current value is the next address to be written by this channel.
    +            CH4_WRITE_ADDR: u32,
    +            ///  DMA Channel 4 Transfer Count
    +            ///  Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).
    +            ///  When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.
    +            ///  Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.
    +            ///  The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.
    +            CH4_TRANS_COUNT: u32,
    +            ///  DMA Channel 4 Control and Status
    +            CH4_CTRL_TRIG: mmio.Mmio(packed struct(u32) {
    +                ///  DMA Channel Enable.
    +                ///  When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)
    +                EN: u1,
    +                ///  HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.
    +                ///  This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.
    +                HIGH_PRIORITY: u1,
    +                ///  Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.
    +                DATA_SIZE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        SIZE_BYTE = 0x0,
    +                        SIZE_HALFWORD = 0x1,
    +                        SIZE_WORD = 0x2,
    +                        _,
    +                    },
    +                },
    +                ///  If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.
    +                ///  Generally this should be disabled for peripheral-to-memory transfers.
    +                INCR_READ: u1,
    +                ///  If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.
    +                ///  Generally this should be disabled for memory-to-peripheral transfers.
    +                INCR_WRITE: u1,
    +                ///  Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.
    +                ///  Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.
    +                RING_SIZE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        RING_NONE = 0x0,
    +                        _,
    +                    },
    +                },
    +                ///  Select whether RING_SIZE applies to read or write addresses.
    +                ///  If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.
    +                RING_SEL: u1,
    +                ///  When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.
    +                CHAIN_TO: u4,
    +                ///  Select a Transfer Request signal.
    +                ///  The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).
    +                ///  0x0 to 0x3a -> select DREQ n as TREQ
    +                TREQ_SEL: packed union {
    +                    raw: u6,
    +                    value: enum(u6) {
    +                        ///  Select Timer 0 as TREQ
    +                        TIMER0 = 0x3b,
    +                        ///  Select Timer 1 as TREQ
    +                        TIMER1 = 0x3c,
    +                        ///  Select Timer 2 as TREQ (Optional)
    +                        TIMER2 = 0x3d,
    +                        ///  Select Timer 3 as TREQ (Optional)
    +                        TIMER3 = 0x3e,
    +                        ///  Permanent request, for unpaced transfers.
    +                        PERMANENT = 0x3f,
    +                        _,
    +                    },
    +                },
    +                ///  In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.
    +                ///  This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.
    +                IRQ_QUIET: u1,
    +                ///  Apply byte-swap transformation to DMA data.
    +                ///  For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.
    +                BSWAP: u1,
    +                ///  If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.
    +                ///  This allows checksum to be enabled or disabled on a per-control- block basis.
    +                SNIFF_EN: u1,
    +                ///  This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.
    +                ///  To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    +                BUSY: u1,
    +                reserved29: u4,
    +                ///  If 1, the channel received a write bus error. Write one to clear.
    +                ///  WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)
    +                WRITE_ERROR: u1,
    +                ///  If 1, the channel received a read bus error. Write one to clear.
    +                ///  READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)
    +                READ_ERROR: u1,
    +                ///  Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.
    +                AHB_ERROR: u1,
    +            }),
    +            ///  Alias for channel 4 CTRL register
    +            CH4_AL1_CTRL: u32,
    +            ///  Alias for channel 4 READ_ADDR register
    +            CH4_AL1_READ_ADDR: u32,
    +            ///  Alias for channel 4 WRITE_ADDR register
    +            CH4_AL1_WRITE_ADDR: u32,
    +            ///  Alias for channel 4 TRANS_COUNT register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH4_AL1_TRANS_COUNT_TRIG: u32,
    +            ///  Alias for channel 4 CTRL register
    +            CH4_AL2_CTRL: u32,
    +            ///  Alias for channel 4 TRANS_COUNT register
    +            CH4_AL2_TRANS_COUNT: u32,
    +            ///  Alias for channel 4 READ_ADDR register
    +            CH4_AL2_READ_ADDR: u32,
    +            ///  Alias for channel 4 WRITE_ADDR register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH4_AL2_WRITE_ADDR_TRIG: u32,
    +            ///  Alias for channel 4 CTRL register
    +            CH4_AL3_CTRL: u32,
    +            ///  Alias for channel 4 WRITE_ADDR register
    +            CH4_AL3_WRITE_ADDR: u32,
    +            ///  Alias for channel 4 TRANS_COUNT register
    +            CH4_AL3_TRANS_COUNT: u32,
    +            ///  Alias for channel 4 READ_ADDR register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH4_AL3_READ_ADDR_TRIG: u32,
    +            ///  DMA Channel 5 Read Address pointer
    +            ///  This register updates automatically each time a read completes. The current value is the next address to be read by this channel.
    +            CH5_READ_ADDR: u32,
    +            ///  DMA Channel 5 Write Address pointer
    +            ///  This register updates automatically each time a write completes. The current value is the next address to be written by this channel.
    +            CH5_WRITE_ADDR: u32,
    +            ///  DMA Channel 5 Transfer Count
    +            ///  Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).
    +            ///  When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.
    +            ///  Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.
    +            ///  The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.
    +            CH5_TRANS_COUNT: u32,
    +            ///  DMA Channel 5 Control and Status
    +            CH5_CTRL_TRIG: mmio.Mmio(packed struct(u32) {
    +                ///  DMA Channel Enable.
    +                ///  When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)
    +                EN: u1,
    +                ///  HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.
    +                ///  This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.
    +                HIGH_PRIORITY: u1,
    +                ///  Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.
    +                DATA_SIZE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        SIZE_BYTE = 0x0,
    +                        SIZE_HALFWORD = 0x1,
    +                        SIZE_WORD = 0x2,
    +                        _,
    +                    },
    +                },
    +                ///  If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.
    +                ///  Generally this should be disabled for peripheral-to-memory transfers.
    +                INCR_READ: u1,
    +                ///  If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.
    +                ///  Generally this should be disabled for memory-to-peripheral transfers.
    +                INCR_WRITE: u1,
    +                ///  Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.
    +                ///  Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.
    +                RING_SIZE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        RING_NONE = 0x0,
    +                        _,
    +                    },
    +                },
    +                ///  Select whether RING_SIZE applies to read or write addresses.
    +                ///  If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.
    +                RING_SEL: u1,
    +                ///  When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.
    +                CHAIN_TO: u4,
    +                ///  Select a Transfer Request signal.
    +                ///  The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).
    +                ///  0x0 to 0x3a -> select DREQ n as TREQ
    +                TREQ_SEL: packed union {
    +                    raw: u6,
    +                    value: enum(u6) {
    +                        ///  Select Timer 0 as TREQ
    +                        TIMER0 = 0x3b,
    +                        ///  Select Timer 1 as TREQ
    +                        TIMER1 = 0x3c,
    +                        ///  Select Timer 2 as TREQ (Optional)
    +                        TIMER2 = 0x3d,
    +                        ///  Select Timer 3 as TREQ (Optional)
    +                        TIMER3 = 0x3e,
    +                        ///  Permanent request, for unpaced transfers.
    +                        PERMANENT = 0x3f,
    +                        _,
    +                    },
    +                },
    +                ///  In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.
    +                ///  This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.
    +                IRQ_QUIET: u1,
    +                ///  Apply byte-swap transformation to DMA data.
    +                ///  For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.
    +                BSWAP: u1,
    +                ///  If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.
    +                ///  This allows checksum to be enabled or disabled on a per-control- block basis.
    +                SNIFF_EN: u1,
    +                ///  This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.
    +                ///  To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    +                BUSY: u1,
    +                reserved29: u4,
    +                ///  If 1, the channel received a write bus error. Write one to clear.
    +                ///  WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)
    +                WRITE_ERROR: u1,
    +                ///  If 1, the channel received a read bus error. Write one to clear.
    +                ///  READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)
    +                READ_ERROR: u1,
    +                ///  Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.
    +                AHB_ERROR: u1,
    +            }),
    +            ///  Alias for channel 5 CTRL register
    +            CH5_AL1_CTRL: u32,
    +            ///  Alias for channel 5 READ_ADDR register
    +            CH5_AL1_READ_ADDR: u32,
    +            ///  Alias for channel 5 WRITE_ADDR register
    +            CH5_AL1_WRITE_ADDR: u32,
    +            ///  Alias for channel 5 TRANS_COUNT register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH5_AL1_TRANS_COUNT_TRIG: u32,
    +            ///  Alias for channel 5 CTRL register
    +            CH5_AL2_CTRL: u32,
    +            ///  Alias for channel 5 TRANS_COUNT register
    +            CH5_AL2_TRANS_COUNT: u32,
    +            ///  Alias for channel 5 READ_ADDR register
    +            CH5_AL2_READ_ADDR: u32,
    +            ///  Alias for channel 5 WRITE_ADDR register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH5_AL2_WRITE_ADDR_TRIG: u32,
    +            ///  Alias for channel 5 CTRL register
    +            CH5_AL3_CTRL: u32,
    +            ///  Alias for channel 5 WRITE_ADDR register
    +            CH5_AL3_WRITE_ADDR: u32,
    +            ///  Alias for channel 5 TRANS_COUNT register
    +            CH5_AL3_TRANS_COUNT: u32,
    +            ///  Alias for channel 5 READ_ADDR register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH5_AL3_READ_ADDR_TRIG: u32,
    +            ///  DMA Channel 6 Read Address pointer
    +            ///  This register updates automatically each time a read completes. The current value is the next address to be read by this channel.
    +            CH6_READ_ADDR: u32,
    +            ///  DMA Channel 6 Write Address pointer
    +            ///  This register updates automatically each time a write completes. The current value is the next address to be written by this channel.
    +            CH6_WRITE_ADDR: u32,
    +            ///  DMA Channel 6 Transfer Count
    +            ///  Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).
    +            ///  When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.
    +            ///  Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.
    +            ///  The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.
    +            CH6_TRANS_COUNT: u32,
    +            ///  DMA Channel 6 Control and Status
    +            CH6_CTRL_TRIG: mmio.Mmio(packed struct(u32) {
    +                ///  DMA Channel Enable.
    +                ///  When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)
    +                EN: u1,
    +                ///  HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.
    +                ///  This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.
    +                HIGH_PRIORITY: u1,
    +                ///  Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.
    +                DATA_SIZE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        SIZE_BYTE = 0x0,
    +                        SIZE_HALFWORD = 0x1,
    +                        SIZE_WORD = 0x2,
    +                        _,
    +                    },
    +                },
    +                ///  If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.
    +                ///  Generally this should be disabled for peripheral-to-memory transfers.
    +                INCR_READ: u1,
    +                ///  If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.
    +                ///  Generally this should be disabled for memory-to-peripheral transfers.
    +                INCR_WRITE: u1,
    +                ///  Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.
    +                ///  Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.
    +                RING_SIZE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        RING_NONE = 0x0,
    +                        _,
    +                    },
    +                },
    +                ///  Select whether RING_SIZE applies to read or write addresses.
    +                ///  If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.
    +                RING_SEL: u1,
    +                ///  When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.
    +                CHAIN_TO: u4,
    +                ///  Select a Transfer Request signal.
    +                ///  The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).
    +                ///  0x0 to 0x3a -> select DREQ n as TREQ
    +                TREQ_SEL: packed union {
    +                    raw: u6,
    +                    value: enum(u6) {
    +                        ///  Select Timer 0 as TREQ
    +                        TIMER0 = 0x3b,
    +                        ///  Select Timer 1 as TREQ
    +                        TIMER1 = 0x3c,
    +                        ///  Select Timer 2 as TREQ (Optional)
    +                        TIMER2 = 0x3d,
    +                        ///  Select Timer 3 as TREQ (Optional)
    +                        TIMER3 = 0x3e,
    +                        ///  Permanent request, for unpaced transfers.
    +                        PERMANENT = 0x3f,
    +                        _,
    +                    },
    +                },
    +                ///  In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.
    +                ///  This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.
    +                IRQ_QUIET: u1,
    +                ///  Apply byte-swap transformation to DMA data.
    +                ///  For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.
    +                BSWAP: u1,
    +                ///  If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.
    +                ///  This allows checksum to be enabled or disabled on a per-control- block basis.
    +                SNIFF_EN: u1,
    +                ///  This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.
    +                ///  To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    +                BUSY: u1,
    +                reserved29: u4,
    +                ///  If 1, the channel received a write bus error. Write one to clear.
    +                ///  WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)
    +                WRITE_ERROR: u1,
    +                ///  If 1, the channel received a read bus error. Write one to clear.
    +                ///  READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)
    +                READ_ERROR: u1,
    +                ///  Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.
    +                AHB_ERROR: u1,
    +            }),
    +            ///  Alias for channel 6 CTRL register
    +            CH6_AL1_CTRL: u32,
    +            ///  Alias for channel 6 READ_ADDR register
    +            CH6_AL1_READ_ADDR: u32,
    +            ///  Alias for channel 6 WRITE_ADDR register
    +            CH6_AL1_WRITE_ADDR: u32,
    +            ///  Alias for channel 6 TRANS_COUNT register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH6_AL1_TRANS_COUNT_TRIG: u32,
    +            ///  Alias for channel 6 CTRL register
    +            CH6_AL2_CTRL: u32,
    +            ///  Alias for channel 6 TRANS_COUNT register
    +            CH6_AL2_TRANS_COUNT: u32,
    +            ///  Alias for channel 6 READ_ADDR register
    +            CH6_AL2_READ_ADDR: u32,
    +            ///  Alias for channel 6 WRITE_ADDR register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH6_AL2_WRITE_ADDR_TRIG: u32,
    +            ///  Alias for channel 6 CTRL register
    +            CH6_AL3_CTRL: u32,
    +            ///  Alias for channel 6 WRITE_ADDR register
    +            CH6_AL3_WRITE_ADDR: u32,
    +            ///  Alias for channel 6 TRANS_COUNT register
    +            CH6_AL3_TRANS_COUNT: u32,
    +            ///  Alias for channel 6 READ_ADDR register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH6_AL3_READ_ADDR_TRIG: u32,
    +            ///  DMA Channel 7 Read Address pointer
    +            ///  This register updates automatically each time a read completes. The current value is the next address to be read by this channel.
    +            CH7_READ_ADDR: u32,
    +            ///  DMA Channel 7 Write Address pointer
    +            ///  This register updates automatically each time a write completes. The current value is the next address to be written by this channel.
    +            CH7_WRITE_ADDR: u32,
    +            ///  DMA Channel 7 Transfer Count
    +            ///  Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).
    +            ///  When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.
    +            ///  Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.
    +            ///  The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.
    +            CH7_TRANS_COUNT: u32,
    +            ///  DMA Channel 7 Control and Status
    +            CH7_CTRL_TRIG: mmio.Mmio(packed struct(u32) {
    +                ///  DMA Channel Enable.
    +                ///  When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)
    +                EN: u1,
    +                ///  HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.
    +                ///  This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.
    +                HIGH_PRIORITY: u1,
    +                ///  Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.
    +                DATA_SIZE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        SIZE_BYTE = 0x0,
    +                        SIZE_HALFWORD = 0x1,
    +                        SIZE_WORD = 0x2,
    +                        _,
    +                    },
    +                },
    +                ///  If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.
    +                ///  Generally this should be disabled for peripheral-to-memory transfers.
    +                INCR_READ: u1,
    +                ///  If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.
    +                ///  Generally this should be disabled for memory-to-peripheral transfers.
    +                INCR_WRITE: u1,
    +                ///  Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.
    +                ///  Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.
    +                RING_SIZE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        RING_NONE = 0x0,
    +                        _,
    +                    },
    +                },
    +                ///  Select whether RING_SIZE applies to read or write addresses.
    +                ///  If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.
    +                RING_SEL: u1,
    +                ///  When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.
    +                CHAIN_TO: u4,
    +                ///  Select a Transfer Request signal.
    +                ///  The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).
    +                ///  0x0 to 0x3a -> select DREQ n as TREQ
    +                TREQ_SEL: packed union {
    +                    raw: u6,
    +                    value: enum(u6) {
    +                        ///  Select Timer 0 as TREQ
    +                        TIMER0 = 0x3b,
    +                        ///  Select Timer 1 as TREQ
    +                        TIMER1 = 0x3c,
    +                        ///  Select Timer 2 as TREQ (Optional)
    +                        TIMER2 = 0x3d,
    +                        ///  Select Timer 3 as TREQ (Optional)
    +                        TIMER3 = 0x3e,
    +                        ///  Permanent request, for unpaced transfers.
    +                        PERMANENT = 0x3f,
    +                        _,
    +                    },
    +                },
    +                ///  In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.
    +                ///  This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.
    +                IRQ_QUIET: u1,
    +                ///  Apply byte-swap transformation to DMA data.
    +                ///  For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.
    +                BSWAP: u1,
    +                ///  If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.
    +                ///  This allows checksum to be enabled or disabled on a per-control- block basis.
    +                SNIFF_EN: u1,
    +                ///  This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.
    +                ///  To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    +                BUSY: u1,
    +                reserved29: u4,
    +                ///  If 1, the channel received a write bus error. Write one to clear.
    +                ///  WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)
    +                WRITE_ERROR: u1,
    +                ///  If 1, the channel received a read bus error. Write one to clear.
    +                ///  READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)
    +                READ_ERROR: u1,
    +                ///  Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.
    +                AHB_ERROR: u1,
    +            }),
    +            ///  Alias for channel 7 CTRL register
    +            CH7_AL1_CTRL: u32,
    +            ///  Alias for channel 7 READ_ADDR register
    +            CH7_AL1_READ_ADDR: u32,
    +            ///  Alias for channel 7 WRITE_ADDR register
    +            CH7_AL1_WRITE_ADDR: u32,
    +            ///  Alias for channel 7 TRANS_COUNT register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH7_AL1_TRANS_COUNT_TRIG: u32,
    +            ///  Alias for channel 7 CTRL register
    +            CH7_AL2_CTRL: u32,
    +            ///  Alias for channel 7 TRANS_COUNT register
    +            CH7_AL2_TRANS_COUNT: u32,
    +            ///  Alias for channel 7 READ_ADDR register
    +            CH7_AL2_READ_ADDR: u32,
    +            ///  Alias for channel 7 WRITE_ADDR register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH7_AL2_WRITE_ADDR_TRIG: u32,
    +            ///  Alias for channel 7 CTRL register
    +            CH7_AL3_CTRL: u32,
    +            ///  Alias for channel 7 WRITE_ADDR register
    +            CH7_AL3_WRITE_ADDR: u32,
    +            ///  Alias for channel 7 TRANS_COUNT register
    +            CH7_AL3_TRANS_COUNT: u32,
    +            ///  Alias for channel 7 READ_ADDR register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH7_AL3_READ_ADDR_TRIG: u32,
    +            ///  DMA Channel 8 Read Address pointer
    +            ///  This register updates automatically each time a read completes. The current value is the next address to be read by this channel.
    +            CH8_READ_ADDR: u32,
    +            ///  DMA Channel 8 Write Address pointer
    +            ///  This register updates automatically each time a write completes. The current value is the next address to be written by this channel.
    +            CH8_WRITE_ADDR: u32,
    +            ///  DMA Channel 8 Transfer Count
    +            ///  Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).
    +            ///  When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.
    +            ///  Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.
    +            ///  The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.
    +            CH8_TRANS_COUNT: u32,
    +            ///  DMA Channel 8 Control and Status
    +            CH8_CTRL_TRIG: mmio.Mmio(packed struct(u32) {
    +                ///  DMA Channel Enable.
    +                ///  When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)
    +                EN: u1,
    +                ///  HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.
    +                ///  This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.
    +                HIGH_PRIORITY: u1,
    +                ///  Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.
    +                DATA_SIZE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        SIZE_BYTE = 0x0,
    +                        SIZE_HALFWORD = 0x1,
    +                        SIZE_WORD = 0x2,
    +                        _,
    +                    },
    +                },
    +                ///  If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.
    +                ///  Generally this should be disabled for peripheral-to-memory transfers.
    +                INCR_READ: u1,
    +                ///  If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.
    +                ///  Generally this should be disabled for memory-to-peripheral transfers.
    +                INCR_WRITE: u1,
    +                ///  Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.
    +                ///  Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.
    +                RING_SIZE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        RING_NONE = 0x0,
    +                        _,
    +                    },
    +                },
    +                ///  Select whether RING_SIZE applies to read or write addresses.
    +                ///  If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.
    +                RING_SEL: u1,
    +                ///  When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.
    +                CHAIN_TO: u4,
    +                ///  Select a Transfer Request signal.
    +                ///  The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).
    +                ///  0x0 to 0x3a -> select DREQ n as TREQ
    +                TREQ_SEL: packed union {
    +                    raw: u6,
    +                    value: enum(u6) {
    +                        ///  Select Timer 0 as TREQ
    +                        TIMER0 = 0x3b,
    +                        ///  Select Timer 1 as TREQ
    +                        TIMER1 = 0x3c,
    +                        ///  Select Timer 2 as TREQ (Optional)
    +                        TIMER2 = 0x3d,
    +                        ///  Select Timer 3 as TREQ (Optional)
    +                        TIMER3 = 0x3e,
    +                        ///  Permanent request, for unpaced transfers.
    +                        PERMANENT = 0x3f,
    +                        _,
    +                    },
    +                },
    +                ///  In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.
    +                ///  This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.
    +                IRQ_QUIET: u1,
    +                ///  Apply byte-swap transformation to DMA data.
    +                ///  For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.
    +                BSWAP: u1,
    +                ///  If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.
    +                ///  This allows checksum to be enabled or disabled on a per-control- block basis.
    +                SNIFF_EN: u1,
    +                ///  This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.
    +                ///  To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    +                BUSY: u1,
    +                reserved29: u4,
    +                ///  If 1, the channel received a write bus error. Write one to clear.
    +                ///  WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)
    +                WRITE_ERROR: u1,
    +                ///  If 1, the channel received a read bus error. Write one to clear.
    +                ///  READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)
    +                READ_ERROR: u1,
    +                ///  Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.
    +                AHB_ERROR: u1,
    +            }),
    +            ///  Alias for channel 8 CTRL register
    +            CH8_AL1_CTRL: u32,
    +            ///  Alias for channel 8 READ_ADDR register
    +            CH8_AL1_READ_ADDR: u32,
    +            ///  Alias for channel 8 WRITE_ADDR register
    +            CH8_AL1_WRITE_ADDR: u32,
    +            ///  Alias for channel 8 TRANS_COUNT register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH8_AL1_TRANS_COUNT_TRIG: u32,
    +            ///  Alias for channel 8 CTRL register
    +            CH8_AL2_CTRL: u32,
    +            ///  Alias for channel 8 TRANS_COUNT register
    +            CH8_AL2_TRANS_COUNT: u32,
    +            ///  Alias for channel 8 READ_ADDR register
    +            CH8_AL2_READ_ADDR: u32,
    +            ///  Alias for channel 8 WRITE_ADDR register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH8_AL2_WRITE_ADDR_TRIG: u32,
    +            ///  Alias for channel 8 CTRL register
    +            CH8_AL3_CTRL: u32,
    +            ///  Alias for channel 8 WRITE_ADDR register
    +            CH8_AL3_WRITE_ADDR: u32,
    +            ///  Alias for channel 8 TRANS_COUNT register
    +            CH8_AL3_TRANS_COUNT: u32,
    +            ///  Alias for channel 8 READ_ADDR register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH8_AL3_READ_ADDR_TRIG: u32,
    +            ///  DMA Channel 9 Read Address pointer
    +            ///  This register updates automatically each time a read completes. The current value is the next address to be read by this channel.
    +            CH9_READ_ADDR: u32,
    +            ///  DMA Channel 9 Write Address pointer
    +            ///  This register updates automatically each time a write completes. The current value is the next address to be written by this channel.
    +            CH9_WRITE_ADDR: u32,
    +            ///  DMA Channel 9 Transfer Count
    +            ///  Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).
    +            ///  When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.
    +            ///  Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.
    +            ///  The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.
    +            CH9_TRANS_COUNT: u32,
    +            ///  DMA Channel 9 Control and Status
    +            CH9_CTRL_TRIG: mmio.Mmio(packed struct(u32) {
    +                ///  DMA Channel Enable.
    +                ///  When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)
    +                EN: u1,
    +                ///  HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.
    +                ///  This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.
    +                HIGH_PRIORITY: u1,
    +                ///  Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.
    +                DATA_SIZE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        SIZE_BYTE = 0x0,
    +                        SIZE_HALFWORD = 0x1,
    +                        SIZE_WORD = 0x2,
    +                        _,
    +                    },
    +                },
    +                ///  If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.
    +                ///  Generally this should be disabled for peripheral-to-memory transfers.
    +                INCR_READ: u1,
    +                ///  If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.
    +                ///  Generally this should be disabled for memory-to-peripheral transfers.
    +                INCR_WRITE: u1,
    +                ///  Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.
    +                ///  Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.
    +                RING_SIZE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        RING_NONE = 0x0,
    +                        _,
    +                    },
    +                },
    +                ///  Select whether RING_SIZE applies to read or write addresses.
    +                ///  If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.
    +                RING_SEL: u1,
    +                ///  When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.
    +                CHAIN_TO: u4,
    +                ///  Select a Transfer Request signal.
    +                ///  The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).
    +                ///  0x0 to 0x3a -> select DREQ n as TREQ
    +                TREQ_SEL: packed union {
    +                    raw: u6,
    +                    value: enum(u6) {
    +                        ///  Select Timer 0 as TREQ
    +                        TIMER0 = 0x3b,
    +                        ///  Select Timer 1 as TREQ
    +                        TIMER1 = 0x3c,
    +                        ///  Select Timer 2 as TREQ (Optional)
    +                        TIMER2 = 0x3d,
    +                        ///  Select Timer 3 as TREQ (Optional)
    +                        TIMER3 = 0x3e,
    +                        ///  Permanent request, for unpaced transfers.
    +                        PERMANENT = 0x3f,
    +                        _,
    +                    },
    +                },
    +                ///  In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.
    +                ///  This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.
    +                IRQ_QUIET: u1,
    +                ///  Apply byte-swap transformation to DMA data.
    +                ///  For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.
    +                BSWAP: u1,
    +                ///  If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.
    +                ///  This allows checksum to be enabled or disabled on a per-control- block basis.
    +                SNIFF_EN: u1,
    +                ///  This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.
    +                ///  To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    +                BUSY: u1,
    +                reserved29: u4,
    +                ///  If 1, the channel received a write bus error. Write one to clear.
    +                ///  WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)
    +                WRITE_ERROR: u1,
    +                ///  If 1, the channel received a read bus error. Write one to clear.
    +                ///  READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)
    +                READ_ERROR: u1,
    +                ///  Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.
    +                AHB_ERROR: u1,
    +            }),
    +            ///  Alias for channel 9 CTRL register
    +            CH9_AL1_CTRL: u32,
    +            ///  Alias for channel 9 READ_ADDR register
    +            CH9_AL1_READ_ADDR: u32,
    +            ///  Alias for channel 9 WRITE_ADDR register
    +            CH9_AL1_WRITE_ADDR: u32,
    +            ///  Alias for channel 9 TRANS_COUNT register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH9_AL1_TRANS_COUNT_TRIG: u32,
    +            ///  Alias for channel 9 CTRL register
    +            CH9_AL2_CTRL: u32,
    +            ///  Alias for channel 9 TRANS_COUNT register
    +            CH9_AL2_TRANS_COUNT: u32,
    +            ///  Alias for channel 9 READ_ADDR register
    +            CH9_AL2_READ_ADDR: u32,
    +            ///  Alias for channel 9 WRITE_ADDR register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH9_AL2_WRITE_ADDR_TRIG: u32,
    +            ///  Alias for channel 9 CTRL register
    +            CH9_AL3_CTRL: u32,
    +            ///  Alias for channel 9 WRITE_ADDR register
    +            CH9_AL3_WRITE_ADDR: u32,
    +            ///  Alias for channel 9 TRANS_COUNT register
    +            CH9_AL3_TRANS_COUNT: u32,
    +            ///  Alias for channel 9 READ_ADDR register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH9_AL3_READ_ADDR_TRIG: u32,
    +            ///  DMA Channel 10 Read Address pointer
    +            ///  This register updates automatically each time a read completes. The current value is the next address to be read by this channel.
    +            CH10_READ_ADDR: u32,
    +            ///  DMA Channel 10 Write Address pointer
    +            ///  This register updates automatically each time a write completes. The current value is the next address to be written by this channel.
    +            CH10_WRITE_ADDR: u32,
    +            ///  DMA Channel 10 Transfer Count
    +            ///  Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).
    +            ///  When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.
    +            ///  Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.
    +            ///  The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.
    +            CH10_TRANS_COUNT: u32,
    +            ///  DMA Channel 10 Control and Status
    +            CH10_CTRL_TRIG: mmio.Mmio(packed struct(u32) {
    +                ///  DMA Channel Enable.
    +                ///  When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)
    +                EN: u1,
    +                ///  HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.
    +                ///  This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.
    +                HIGH_PRIORITY: u1,
    +                ///  Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.
    +                DATA_SIZE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        SIZE_BYTE = 0x0,
    +                        SIZE_HALFWORD = 0x1,
    +                        SIZE_WORD = 0x2,
    +                        _,
    +                    },
    +                },
    +                ///  If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.
    +                ///  Generally this should be disabled for peripheral-to-memory transfers.
    +                INCR_READ: u1,
    +                ///  If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.
    +                ///  Generally this should be disabled for memory-to-peripheral transfers.
    +                INCR_WRITE: u1,
    +                ///  Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.
    +                ///  Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.
    +                RING_SIZE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        RING_NONE = 0x0,
    +                        _,
    +                    },
    +                },
    +                ///  Select whether RING_SIZE applies to read or write addresses.
    +                ///  If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.
    +                RING_SEL: u1,
    +                ///  When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.
    +                CHAIN_TO: u4,
    +                ///  Select a Transfer Request signal.
    +                ///  The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).
    +                ///  0x0 to 0x3a -> select DREQ n as TREQ
    +                TREQ_SEL: packed union {
    +                    raw: u6,
    +                    value: enum(u6) {
    +                        ///  Select Timer 0 as TREQ
    +                        TIMER0 = 0x3b,
    +                        ///  Select Timer 1 as TREQ
    +                        TIMER1 = 0x3c,
    +                        ///  Select Timer 2 as TREQ (Optional)
    +                        TIMER2 = 0x3d,
    +                        ///  Select Timer 3 as TREQ (Optional)
    +                        TIMER3 = 0x3e,
    +                        ///  Permanent request, for unpaced transfers.
    +                        PERMANENT = 0x3f,
    +                        _,
    +                    },
    +                },
    +                ///  In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.
    +                ///  This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.
    +                IRQ_QUIET: u1,
    +                ///  Apply byte-swap transformation to DMA data.
    +                ///  For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.
    +                BSWAP: u1,
    +                ///  If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.
    +                ///  This allows checksum to be enabled or disabled on a per-control- block basis.
    +                SNIFF_EN: u1,
    +                ///  This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.
    +                ///  To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    +                BUSY: u1,
    +                reserved29: u4,
    +                ///  If 1, the channel received a write bus error. Write one to clear.
    +                ///  WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)
    +                WRITE_ERROR: u1,
    +                ///  If 1, the channel received a read bus error. Write one to clear.
    +                ///  READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)
    +                READ_ERROR: u1,
    +                ///  Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.
    +                AHB_ERROR: u1,
    +            }),
    +            ///  Alias for channel 10 CTRL register
    +            CH10_AL1_CTRL: u32,
    +            ///  Alias for channel 10 READ_ADDR register
    +            CH10_AL1_READ_ADDR: u32,
    +            ///  Alias for channel 10 WRITE_ADDR register
    +            CH10_AL1_WRITE_ADDR: u32,
    +            ///  Alias for channel 10 TRANS_COUNT register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH10_AL1_TRANS_COUNT_TRIG: u32,
    +            ///  Alias for channel 10 CTRL register
    +            CH10_AL2_CTRL: u32,
    +            ///  Alias for channel 10 TRANS_COUNT register
    +            CH10_AL2_TRANS_COUNT: u32,
    +            ///  Alias for channel 10 READ_ADDR register
    +            CH10_AL2_READ_ADDR: u32,
    +            ///  Alias for channel 10 WRITE_ADDR register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH10_AL2_WRITE_ADDR_TRIG: u32,
    +            ///  Alias for channel 10 CTRL register
    +            CH10_AL3_CTRL: u32,
    +            ///  Alias for channel 10 WRITE_ADDR register
    +            CH10_AL3_WRITE_ADDR: u32,
    +            ///  Alias for channel 10 TRANS_COUNT register
    +            CH10_AL3_TRANS_COUNT: u32,
    +            ///  Alias for channel 10 READ_ADDR register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH10_AL3_READ_ADDR_TRIG: u32,
    +            ///  DMA Channel 11 Read Address pointer
    +            ///  This register updates automatically each time a read completes. The current value is the next address to be read by this channel.
    +            CH11_READ_ADDR: u32,
    +            ///  DMA Channel 11 Write Address pointer
    +            ///  This register updates automatically each time a write completes. The current value is the next address to be written by this channel.
    +            CH11_WRITE_ADDR: u32,
    +            ///  DMA Channel 11 Transfer Count
    +            ///  Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).
    +            ///  When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.
    +            ///  Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.
    +            ///  The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.
    +            CH11_TRANS_COUNT: u32,
    +            ///  DMA Channel 11 Control and Status
    +            CH11_CTRL_TRIG: mmio.Mmio(packed struct(u32) {
    +                ///  DMA Channel Enable.
    +                ///  When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)
    +                EN: u1,
    +                ///  HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.
    +                ///  This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.
    +                HIGH_PRIORITY: u1,
    +                ///  Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.
    +                DATA_SIZE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        SIZE_BYTE = 0x0,
    +                        SIZE_HALFWORD = 0x1,
    +                        SIZE_WORD = 0x2,
    +                        _,
    +                    },
    +                },
    +                ///  If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.
    +                ///  Generally this should be disabled for peripheral-to-memory transfers.
    +                INCR_READ: u1,
    +                ///  If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.
    +                ///  Generally this should be disabled for memory-to-peripheral transfers.
    +                INCR_WRITE: u1,
    +                ///  Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.
    +                ///  Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.
    +                RING_SIZE: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        RING_NONE = 0x0,
    +                        _,
    +                    },
    +                },
    +                ///  Select whether RING_SIZE applies to read or write addresses.
    +                ///  If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.
    +                RING_SEL: u1,
    +                ///  When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.
    +                CHAIN_TO: u4,
    +                ///  Select a Transfer Request signal.
    +                ///  The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).
    +                ///  0x0 to 0x3a -> select DREQ n as TREQ
    +                TREQ_SEL: packed union {
    +                    raw: u6,
    +                    value: enum(u6) {
    +                        ///  Select Timer 0 as TREQ
    +                        TIMER0 = 0x3b,
    +                        ///  Select Timer 1 as TREQ
    +                        TIMER1 = 0x3c,
    +                        ///  Select Timer 2 as TREQ (Optional)
    +                        TIMER2 = 0x3d,
    +                        ///  Select Timer 3 as TREQ (Optional)
    +                        TIMER3 = 0x3e,
    +                        ///  Permanent request, for unpaced transfers.
    +                        PERMANENT = 0x3f,
    +                        _,
    +                    },
    +                },
    +                ///  In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.
    +                ///  This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.
    +                IRQ_QUIET: u1,
    +                ///  Apply byte-swap transformation to DMA data.
    +                ///  For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.
    +                BSWAP: u1,
    +                ///  If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.
    +                ///  This allows checksum to be enabled or disabled on a per-control- block basis.
    +                SNIFF_EN: u1,
    +                ///  This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.
    +                ///  To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    +                BUSY: u1,
    +                reserved29: u4,
    +                ///  If 1, the channel received a write bus error. Write one to clear.
    +                ///  WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)
    +                WRITE_ERROR: u1,
    +                ///  If 1, the channel received a read bus error. Write one to clear.
    +                ///  READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)
    +                READ_ERROR: u1,
    +                ///  Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.
    +                AHB_ERROR: u1,
    +            }),
    +            ///  Alias for channel 11 CTRL register
    +            CH11_AL1_CTRL: u32,
    +            ///  Alias for channel 11 READ_ADDR register
    +            CH11_AL1_READ_ADDR: u32,
    +            ///  Alias for channel 11 WRITE_ADDR register
    +            CH11_AL1_WRITE_ADDR: u32,
    +            ///  Alias for channel 11 TRANS_COUNT register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH11_AL1_TRANS_COUNT_TRIG: u32,
    +            ///  Alias for channel 11 CTRL register
    +            CH11_AL2_CTRL: u32,
    +            ///  Alias for channel 11 TRANS_COUNT register
    +            CH11_AL2_TRANS_COUNT: u32,
    +            ///  Alias for channel 11 READ_ADDR register
    +            CH11_AL2_READ_ADDR: u32,
    +            ///  Alias for channel 11 WRITE_ADDR register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH11_AL2_WRITE_ADDR_TRIG: u32,
    +            ///  Alias for channel 11 CTRL register
    +            CH11_AL3_CTRL: u32,
    +            ///  Alias for channel 11 WRITE_ADDR register
    +            CH11_AL3_WRITE_ADDR: u32,
    +            ///  Alias for channel 11 TRANS_COUNT register
    +            CH11_AL3_TRANS_COUNT: u32,
    +            ///  Alias for channel 11 READ_ADDR register
    +            ///  This is a trigger register (0xc). Writing a nonzero value will
    +            ///  reload the channel counter and start the channel.
    +            CH11_AL3_READ_ADDR_TRIG: u32,
    +            reserved1024: [256]u8,
    +            ///  Interrupt Status (raw)
    +            INTR: mmio.Mmio(packed struct(u32) {
    +                ///  Raw interrupt status for DMA Channels 0..15. Bit n corresponds to channel n. Ignores any masking or forcing. Channel interrupts can be cleared by writing a bit mask to INTR, INTS0 or INTS1.
    +                ///  Channel interrupts can be routed to either of two system-level IRQs based on INTE0 and INTE1.
    +                ///  This can be used vector different channel interrupts to different ISRs: this might be done to allow NVIC IRQ preemption for more time-critical channels, or to spread IRQ load across different cores.
    +                ///  It is also valid to ignore this behaviour and just use INTE0/INTS0/IRQ 0.
    +                INTR: u16,
    +                padding: u16,
    +            }),
    +            ///  Interrupt Enables for IRQ 0
    +            INTE0: mmio.Mmio(packed struct(u32) {
    +                ///  Set bit n to pass interrupts from channel n to DMA IRQ 0.
    +                INTE0: u16,
    +                padding: u16,
    +            }),
    +            ///  Force Interrupts
    +            INTF0: mmio.Mmio(packed struct(u32) {
    +                ///  Write 1s to force the corresponding bits in INTE0. The interrupt remains asserted until INTF0 is cleared.
    +                INTF0: u16,
    +                padding: u16,
    +            }),
    +            ///  Interrupt Status for IRQ 0
    +            INTS0: mmio.Mmio(packed struct(u32) {
    +                ///  Indicates active channel interrupt requests which are currently causing IRQ 0 to be asserted.
    +                ///  Channel interrupts can be cleared by writing a bit mask here.
    +                INTS0: u16,
    +                padding: u16,
    +            }),
    +            reserved1044: [4]u8,
    +            ///  Interrupt Enables for IRQ 1
    +            INTE1: mmio.Mmio(packed struct(u32) {
    +                ///  Set bit n to pass interrupts from channel n to DMA IRQ 1.
    +                INTE1: u16,
    +                padding: u16,
    +            }),
    +            ///  Force Interrupts for IRQ 1
    +            INTF1: mmio.Mmio(packed struct(u32) {
    +                ///  Write 1s to force the corresponding bits in INTE0. The interrupt remains asserted until INTF0 is cleared.
    +                INTF1: u16,
    +                padding: u16,
    +            }),
    +            ///  Interrupt Status (masked) for IRQ 1
    +            INTS1: mmio.Mmio(packed struct(u32) {
    +                ///  Indicates active channel interrupt requests which are currently causing IRQ 1 to be asserted.
    +                ///  Channel interrupts can be cleared by writing a bit mask here.
    +                INTS1: u16,
    +                padding: u16,
    +            }),
    +            ///  Pacing (X/Y) Fractional Timer
    +            ///  The pacing timer produces TREQ assertions at a rate set by ((X/Y) * sys_clk). This equation is evaluated every sys_clk cycles and therefore can only generate TREQs at a rate of 1 per sys_clk (i.e. permanent TREQ) or less.
    +            TIMER0: mmio.Mmio(packed struct(u32) {
    +                ///  Pacing Timer Divisor. Specifies the Y value for the (X/Y) fractional timer.
    +                Y: u16,
    +                ///  Pacing Timer Dividend. Specifies the X value for the (X/Y) fractional timer.
    +                X: u16,
    +            }),
    +            ///  Pacing (X/Y) Fractional Timer
    +            ///  The pacing timer produces TREQ assertions at a rate set by ((X/Y) * sys_clk). This equation is evaluated every sys_clk cycles and therefore can only generate TREQs at a rate of 1 per sys_clk (i.e. permanent TREQ) or less.
    +            TIMER1: mmio.Mmio(packed struct(u32) {
    +                ///  Pacing Timer Divisor. Specifies the Y value for the (X/Y) fractional timer.
    +                Y: u16,
    +                ///  Pacing Timer Dividend. Specifies the X value for the (X/Y) fractional timer.
    +                X: u16,
    +            }),
    +            ///  Pacing (X/Y) Fractional Timer
    +            ///  The pacing timer produces TREQ assertions at a rate set by ((X/Y) * sys_clk). This equation is evaluated every sys_clk cycles and therefore can only generate TREQs at a rate of 1 per sys_clk (i.e. permanent TREQ) or less.
    +            TIMER2: mmio.Mmio(packed struct(u32) {
    +                ///  Pacing Timer Divisor. Specifies the Y value for the (X/Y) fractional timer.
    +                Y: u16,
    +                ///  Pacing Timer Dividend. Specifies the X value for the (X/Y) fractional timer.
    +                X: u16,
    +            }),
    +            ///  Pacing (X/Y) Fractional Timer
    +            ///  The pacing timer produces TREQ assertions at a rate set by ((X/Y) * sys_clk). This equation is evaluated every sys_clk cycles and therefore can only generate TREQs at a rate of 1 per sys_clk (i.e. permanent TREQ) or less.
    +            TIMER3: mmio.Mmio(packed struct(u32) {
    +                ///  Pacing Timer Divisor. Specifies the Y value for the (X/Y) fractional timer.
    +                Y: u16,
    +                ///  Pacing Timer Dividend. Specifies the X value for the (X/Y) fractional timer.
    +                X: u16,
    +            }),
    +            ///  Trigger one or more channels simultaneously
    +            MULTI_CHAN_TRIGGER: mmio.Mmio(packed struct(u32) {
    +                ///  Each bit in this register corresponds to a DMA channel. Writing a 1 to the relevant bit is the same as writing to that channel's trigger register; the channel will start if it is currently enabled and not already busy.
    +                MULTI_CHAN_TRIGGER: u16,
    +                padding: u16,
    +            }),
    +            ///  Sniffer Control
    +            SNIFF_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  Enable sniffer
    +                EN: u1,
    +                ///  DMA channel for Sniffer to observe
    +                DMACH: u4,
    +                CALC: packed union {
    +                    raw: u4,
    +                    value: enum(u4) {
    +                        ///  Calculate a CRC-32 (IEEE802.3 polynomial)
    +                        CRC32 = 0x0,
    +                        ///  Calculate a CRC-32 (IEEE802.3 polynomial) with bit reversed data
    +                        CRC32R = 0x1,
    +                        ///  Calculate a CRC-16-CCITT
    +                        CRC16 = 0x2,
    +                        ///  Calculate a CRC-16-CCITT with bit reversed data
    +                        CRC16R = 0x3,
    +                        ///  XOR reduction over all data. == 1 if the total 1 population count is odd.
    +                        EVEN = 0xe,
    +                        ///  Calculate a simple 32-bit checksum (addition with a 32 bit accumulator)
    +                        SUM = 0xf,
    +                        _,
    +                    },
    +                },
    +                ///  Locally perform a byte reverse on the sniffed data, before feeding into checksum.
    +                ///  Note that the sniff hardware is downstream of the DMA channel byteswap performed in the read master: if channel CTRL_BSWAP and SNIFF_CTRL_BSWAP are both enabled, their effects cancel from the sniffer's point of view.
    +                BSWAP: u1,
    +                ///  If set, the result appears bit-reversed when read. This does not affect the way the checksum is calculated; the result is transformed on-the-fly between the result register and the bus.
    +                OUT_REV: u1,
    +                ///  If set, the result appears inverted (bitwise complement) when read. This does not affect the way the checksum is calculated; the result is transformed on-the-fly between the result register and the bus.
    +                OUT_INV: u1,
    +                padding: u20,
    +            }),
    +            ///  Data accumulator for sniff hardware
    +            ///  Write an initial seed value here before starting a DMA transfer on the channel indicated by SNIFF_CTRL_DMACH. The hardware will update this register each time it observes a read from the indicated channel. Once the channel completes, the final result can be read from this register.
    +            SNIFF_DATA: u32,
    +            reserved1088: [4]u8,
    +            ///  Debug RAF, WAF, TDF levels
    +            FIFO_LEVELS: mmio.Mmio(packed struct(u32) {
    +                ///  Current Transfer-Data-FIFO fill level
    +                TDF_LVL: u8,
    +                ///  Current Write-Address-FIFO fill level
    +                WAF_LVL: u8,
    +                ///  Current Read-Address-FIFO fill level
    +                RAF_LVL: u8,
    +                padding: u8,
    +            }),
    +            ///  Abort an in-progress transfer sequence on one or more channels
    +            CHAN_ABORT: mmio.Mmio(packed struct(u32) {
    +                ///  Each bit corresponds to a channel. Writing a 1 aborts whatever transfer sequence is in progress on that channel. The bit will remain high until any in-flight transfers have been flushed through the address and data FIFOs.
    +                ///  After writing, this register must be polled until it returns all-zero. Until this point, it is unsafe to restart the channel.
    +                CHAN_ABORT: u16,
    +                padding: u16,
    +            }),
    +            ///  The number of channels this DMA instance is equipped with. This DMA supports up to 16 hardware channels, but can be configured with as few as one, to minimise silicon area.
    +            N_CHANNELS: mmio.Mmio(packed struct(u32) {
    +                N_CHANNELS: u5,
    +                padding: u27,
    +            }),
    +            reserved2048: [948]u8,
    +            ///  Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.
    +            CH0_DBG_CTDREQ: mmio.Mmio(packed struct(u32) {
    +                CH0_DBG_CTDREQ: u6,
    +                padding: u26,
    +            }),
    +            ///  Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer
    +            CH0_DBG_TCR: u32,
    +            reserved2112: [56]u8,
    +            ///  Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.
    +            CH1_DBG_CTDREQ: mmio.Mmio(packed struct(u32) {
    +                CH1_DBG_CTDREQ: u6,
    +                padding: u26,
    +            }),
    +            ///  Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer
    +            CH1_DBG_TCR: u32,
    +            reserved2176: [56]u8,
    +            ///  Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.
    +            CH2_DBG_CTDREQ: mmio.Mmio(packed struct(u32) {
    +                CH2_DBG_CTDREQ: u6,
    +                padding: u26,
    +            }),
    +            ///  Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer
    +            CH2_DBG_TCR: u32,
    +            reserved2240: [56]u8,
    +            ///  Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.
    +            CH3_DBG_CTDREQ: mmio.Mmio(packed struct(u32) {
    +                CH3_DBG_CTDREQ: u6,
    +                padding: u26,
    +            }),
    +            ///  Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer
    +            CH3_DBG_TCR: u32,
    +            reserved2304: [56]u8,
    +            ///  Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.
    +            CH4_DBG_CTDREQ: mmio.Mmio(packed struct(u32) {
    +                CH4_DBG_CTDREQ: u6,
    +                padding: u26,
    +            }),
    +            ///  Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer
    +            CH4_DBG_TCR: u32,
    +            reserved2368: [56]u8,
    +            ///  Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.
    +            CH5_DBG_CTDREQ: mmio.Mmio(packed struct(u32) {
    +                CH5_DBG_CTDREQ: u6,
    +                padding: u26,
    +            }),
    +            ///  Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer
    +            CH5_DBG_TCR: u32,
    +            reserved2432: [56]u8,
    +            ///  Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.
    +            CH6_DBG_CTDREQ: mmio.Mmio(packed struct(u32) {
    +                CH6_DBG_CTDREQ: u6,
    +                padding: u26,
    +            }),
    +            ///  Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer
    +            CH6_DBG_TCR: u32,
    +            reserved2496: [56]u8,
    +            ///  Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.
    +            CH7_DBG_CTDREQ: mmio.Mmio(packed struct(u32) {
    +                CH7_DBG_CTDREQ: u6,
    +                padding: u26,
    +            }),
    +            ///  Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer
    +            CH7_DBG_TCR: u32,
    +            reserved2560: [56]u8,
    +            ///  Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.
    +            CH8_DBG_CTDREQ: mmio.Mmio(packed struct(u32) {
    +                CH8_DBG_CTDREQ: u6,
    +                padding: u26,
    +            }),
    +            ///  Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer
    +            CH8_DBG_TCR: u32,
    +            reserved2624: [56]u8,
    +            ///  Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.
    +            CH9_DBG_CTDREQ: mmio.Mmio(packed struct(u32) {
    +                CH9_DBG_CTDREQ: u6,
    +                padding: u26,
    +            }),
    +            ///  Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer
    +            CH9_DBG_TCR: u32,
    +            reserved2688: [56]u8,
    +            ///  Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.
    +            CH10_DBG_CTDREQ: mmio.Mmio(packed struct(u32) {
    +                CH10_DBG_CTDREQ: u6,
    +                padding: u26,
    +            }),
    +            ///  Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer
    +            CH10_DBG_TCR: u32,
    +            reserved2752: [56]u8,
    +            ///  Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.
    +            CH11_DBG_CTDREQ: mmio.Mmio(packed struct(u32) {
    +                CH11_DBG_CTDREQ: u6,
    +                padding: u26,
    +            }),
    +            ///  Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer
    +            CH11_DBG_TCR: u32,
    +        };
    +
    +        ///  DPRAM layout for USB device.
    +        pub const USBCTRL_DPRAM = extern struct {
    +            ///  Bytes 0-3 of the SETUP packet from the host.
    +            SETUP_PACKET_LOW: mmio.Mmio(packed struct(u32) {
    +                BMREQUESTTYPE: u8,
    +                BREQUEST: u8,
    +                WVALUE: u16,
    +            }),
    +            ///  Bytes 4-7 of the setup packet from the host.
    +            SETUP_PACKET_HIGH: mmio.Mmio(packed struct(u32) {
    +                WINDEX: u16,
    +                WLENGTH: u16,
    +            }),
    +            EP1_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP1_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP2_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP2_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP3_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP3_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP4_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP4_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP5_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP5_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP6_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP6_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP7_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP7_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP8_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP8_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP9_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP9_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP10_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP10_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP11_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP11_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP12_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP12_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP13_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP13_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP14_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP14_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP15_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            EP15_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    +                BUFFER_ADDRESS: u16,
    +                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    +                INTERRUPT_ON_NAK: u1,
    +                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    +                INTERRUPT_ON_STALL: u1,
    +                reserved26: u8,
    +                ENDPOINT_TYPE: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        Control = 0x0,
    +                        Isochronous = 0x1,
    +                        Bulk = 0x2,
    +                        Interrupt = 0x3,
    +                    },
    +                },
    +                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    +                INTERRUPT_PER_DOUBLE_BUFF: u1,
    +                ///  Trigger an interrupt each time a buffer is done.
    +                INTERRUPT_PER_BUFF: u1,
    +                ///  This endpoint is double buffered.
    +                DOUBLE_BUFFERED: u1,
    +                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    +                ENABLE: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP0_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP0_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP1_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP1_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP2_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP2_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP3_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP3_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP4_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP4_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP5_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP5_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP6_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP6_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP7_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP7_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP8_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP8_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP9_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP9_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP10_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP10_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP11_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP11_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP12_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP12_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP13_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP13_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP14_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP14_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP15_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    +            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    +            EP15_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  The length of the data in buffer 0.
    +                LENGTH_0: u10,
    +                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_0: u1,
    +                ///  Reply with a stall (valid for both buffers).
    +                STALL: u1,
    +                ///  Reset the buffer selector to buffer 0.
    +                RESET: u1,
    +                ///  The data pid of buffer 0.
    +                PID_0: u1,
    +                ///  Buffer 0 is the last buffer of the transfer.
    +                LAST_0: u1,
    +                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_0: u1,
    +                ///  The length of the data in buffer 1.
    +                LENGTH_1: u10,
    +                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    +                AVAILABLE_1: u1,
    +                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    +                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    +                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    +                    raw: u2,
    +                    value: enum(u2) {
    +                        @"128" = 0x0,
    +                        @"256" = 0x1,
    +                        @"512" = 0x2,
    +                        @"1024" = 0x3,
    +                    },
    +                },
    +                ///  The data pid of buffer 1.
    +                PID_1: u1,
    +                ///  Buffer 1 is the last buffer of the transfer.
    +                LAST_1: u1,
    +                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    +                FULL_1: u1,
    +            }),
    +        };
    +    };
    +};
    diff --git a/src/hal.zig b/src/hal.zig
    index 06c0cdd9d..21323dedd 100644
    --- a/src/hal.zig
    +++ b/src/hal.zig
    @@ -28,6 +28,6 @@ pub fn init() void {
         clock_config.apply();
     }
     
    -pub fn getCpuId() u32 {
    +pub fn get_cpu_id() u32 {
         return regs.SIO.CPUID.*;
     }
    diff --git a/src/hal/adc.zig b/src/hal/adc.zig
    index 3cf29fab0..1746ccc87 100644
    --- a/src/hal/adc.zig
    +++ b/src/hal/adc.zig
    @@ -4,28 +4,28 @@ const std = @import("std");
     const assert = std.debug.assert;
     
     const microzig = @import("microzig");
    -const ADC = microzig.chip.registers.ADC;
    +const ADC = microzig.chip.peripherals.ADC;
     const rp2040 = microzig.hal;
     const gpio = rp2040.gpio;
     const resets = rp2040.resets;
     
     pub const temperature_sensor = struct {
         pub inline fn init() void {
    -        setTempSensorEnabled(true);
    +        set_temp_sensor_enabled(true);
         }
     
         pub inline fn deinit() void {
    -        setTempSensorEnabled(false);
    +        set_temp_sensor_enabled(false);
         }
     
    -    pub inline fn readRaw() u16 {
    +    pub inline fn read_raw() u16 {
             return Input.read(.temperature_sensor);
         }
     
         // One-shot conversion returning the temperature in Celcius
         pub inline fn read(comptime T: type, comptime Vref: T) T {
             // TODO: consider fixed-point
    -        const raw = @intToFloat(T, readRaw());
    +        const raw = @intToFloat(T, read_raw());
             const voltage: T = Vref * raw / 0x0fff;
             return (27.0 - ((voltage - 0.706) / 0.001721));
         }
    @@ -41,11 +41,11 @@ pub const Input = enum(u3) {
         /// Setup the GPIO pin as an ADC input
         pub fn init(comptime input: Input) void {
             switch (input) {
    -            .temperature_sensor => setTempSensorEnabled(true),
    +            .temperature_sensor => set_temp_sensor_enabled(true),
                 else => {
                     const gpio_num = @as(u32, @enumToInt(input)) + 26;
     
    -                gpio.setFunction(gpio_num, .@"null");
    +                gpio.set_function(gpio_num, .null);
                     // TODO: implement these, otherwise adc isn't going to work.
                     //gpio.disablePulls(gpio_num);
                     //gpio.setInputEnabled(gpio_num, false);
    @@ -57,7 +57,7 @@ pub const Input = enum(u3) {
         /// one of the others.
         pub inline fn deinit(input: Input) void {
             switch (input) {
    -            .temperature_sensor => setTempSensorEnabled(true),
    +            .temperature_sensor => set_temp_sensor_enabled(true),
                 else => {},
             }
         }
    @@ -74,7 +74,7 @@ pub const Input = enum(u3) {
             // wait for the
             while (ADC.CS.read().READY == 0) {}
     
    -        return ADC.RESULT.read();
    +        return ADC.RESULT.read().RESULT;
         }
     };
     
    @@ -116,42 +116,47 @@ pub fn init() void {
             .ERR_STICKY = 0,
             .AINSEL = 0,
             .RROBIN = 0,
    +
    +        .reserved8 = 0,
    +        .reserved12 = 0,
    +        .reserved16 = 0,
    +        .padding = 0,
         });
         while (ADC.CS.read().READY == 0) {}
     }
     
     /// Enable/disable ADC interrupt
    -pub inline fn irqSetEnabled(enable: bool) void {
    +pub inline fn irq_set_enabled(enable: bool) void {
         // TODO: check if this works
         ADC.INTE.write(.{ .FIFO = if (enable) @as(u1, 1) else @as(u1, 0) });
     }
     
     /// Select analog input for next conversion.
    -pub inline fn selectInput(input: Input) void {
    +pub inline fn select_input(input: Input) void {
         ADC.CS.modify(.{ .AINSEL = @enumToInt(input) });
     }
     
     /// Get the currently selected analog input. 0..3 are GPIO 26..29 respectively,
     /// 4 is the temperature sensor.
    -pub inline fn getSelectedInput() Input {
    +pub inline fn get_selected_input() Input {
         // TODO: ensure that the field shouldn't have other values
         return @intToEnum(Input, ADC.CS.read().AINSEL);
     }
     
     /// Set to true to power on the temperature sensor.
    -pub inline fn setTempSensorEnabled(enable: bool) void {
    +pub inline fn set_temp_sensor_enabled(enable: bool) void {
         ADC.CS.modify(.{ .TS_EN = if (enable) @as(u1, 1) else @as(u1, 0) });
     }
     
     /// Sets which of the inputs are to be run in round-robin mode. Setting all to
     /// 0 will disable round-robin mode but `disableRoundRobin()` is provided so
     /// the user may be explicit.
    -pub inline fn setRoundRobin(comptime enabled_inputs: InputMask) void {
    +pub inline fn set_round_robin(comptime enabled_inputs: InputMask) void {
         ADC.CS.modify(.{ .RROBIN = @bitCast(u5, enabled_inputs) });
     }
     
     /// Disable round-robin sample mode.
    -pub inline fn disableRoundRobin() void {
    +pub inline fn disable_round_robin() void {
         ADC.CS.modify(.{ .RROBIN = 0 });
     }
     
    @@ -160,7 +165,7 @@ pub inline fn run(enable: bool) void {
         ADC.CS.modify(.{ .START_MANY = if (enable) @as(u1, 1) else @as(u1, 0) });
     }
     
    -pub inline fn setClkDiv() void {
    +pub inline fn set_clk_div() void {
         @compileError("todo");
     }
     
    @@ -173,12 +178,12 @@ pub const fifo = struct {
         }
     
         /// Return true if FIFO is empty.
    -    pub inline fn isEmpty() bool {
    +    pub inline fn is_empty() bool {
             @compileError("todo");
         }
     
         /// Read how many samples are in the FIFO.
    -    pub inline fn getLevel() u8 {
    +    pub inline fn get_level() u8 {
             @compileError("todo");
         }
     
    @@ -188,7 +193,7 @@ pub const fifo = struct {
         }
     
         /// Block until result is available in FIFO, then pop it.
    -    pub inline fn getBlocking() u16 {
    +    pub inline fn get_blocking() u16 {
             @compileError("todo");
         }
     
    diff --git a/src/hal/clocks.zig b/src/hal/clocks.zig
    index e703db46a..4a4980964 100644
    --- a/src/hal/clocks.zig
    +++ b/src/hal/clocks.zig
    @@ -1,5 +1,5 @@
     const std = @import("std");
    -const microzig = @import("microzig");
    +
     const pll = @import("pll.zig");
     const util = @import("util.zig");
     const assert = std.debug.assert;
    @@ -7,8 +7,11 @@ const assert = std.debug.assert;
     // TODO: remove
     const gpio = @import("gpio.zig");
     
    -const regs = microzig.chip.registers;
    -const CLOCKS = regs.CLOCKS;
    +const microzig = @import("microzig");
    +const peripherals = microzig.chip.peripherals;
    +const CLOCKS = peripherals.CLOCKS;
    +const WATCHDOG = peripherals.WATCHDOG;
    +const XOSC = peripherals.XOSC;
     const xosc_freq = microzig.board.xosc_freq;
     /// this is only nominal, very imprecise and prone to drift over time
     const rosc_freq = 6_500_000;
    @@ -22,25 +25,25 @@ pub const xosc = struct {
         const startup_delay_value = xosc_freq * startup_delay_ms / 1000 / 256;
     
         pub fn init() void {
    -        regs.XOSC.STARTUP.modify(.{ .DELAY = startup_delay_value });
    -        regs.XOSC.CTRL.modify(.{ .ENABLE = 4011 });
    +        XOSC.STARTUP.modify(.{ .DELAY = startup_delay_value });
    +        XOSC.CTRL.modify(.{ .ENABLE = .{ .value = .ENABLE } });
     
             // wait for xosc startup to complete:
    -        while (regs.XOSC.STATUS.read().STABLE == 0) {}
    +        while (XOSC.STATUS.read().STABLE == 0) {}
         }
     
    -    pub fn waitCycles(value: u8) void {
    +    pub fn wait_cycles(value: u8) void {
             assert(is_enabled: {
    -            const status = regs.XOSC.STATUS.read();
    +            const status = XOSC.STATUS.read();
                 break :is_enabled status.STABLE != 0 and status.ENABLED != 0;
             });
     
    -        regs.XOSC.COUNT.modify(value);
    -        while (regs.XOSC.COUNT.read() != 0) {}
    +        XOSC.COUNT.modify(value);
    +        while (XOSC.COUNT.read() != 0) {}
         }
     };
     
    -fn formatUppercase(
    +fn format_uppercase(
         bytes: []const u8,
         comptime fmt: []const u8,
         options: std.fmt.FormatOptions,
    @@ -52,7 +55,7 @@ fn formatUppercase(
             try writer.writeByte(std.ascii.toUpper(c));
     }
     
    -fn uppercase(bytes: []const u8) std.fmt.Formatter(formatUppercase) {
    +fn uppercase(bytes: []const u8) std.fmt.Formatter(format_uppercase) {
         return .{ .data = bytes };
     }
     
    @@ -81,16 +84,13 @@ pub const Generator = enum(u32) {
             assert(24 == @sizeOf([2]GeneratorRegs));
         }
     
    -    const generators = @intToPtr(
    -        *volatile [@typeInfo(Generator).Enum.fields.len]GeneratorRegs,
    -        regs.CLOCKS.base_address,
    -    );
    +    const generators = @ptrCast(*volatile [@typeInfo(Generator).Enum.fields.len]GeneratorRegs, CLOCKS);
     
    -    fn getRegs(generator: Generator) *volatile GeneratorRegs {
    +    fn get_regs(generator: Generator) *volatile GeneratorRegs {
             return &generators[@enumToInt(generator)];
         }
     
    -    pub fn hasGlitchlessMux(generator: Generator) bool {
    +    pub fn has_glitchless_mux(generator: Generator) bool {
             return switch (generator) {
                 .sys, .ref => true,
                 else => false,
    @@ -100,22 +100,22 @@ pub const Generator = enum(u32) {
         pub fn enable(generator: Generator) void {
             switch (generator) {
                 .ref, .sys => {},
    -            else => generator.getRegs().ctrl |= (1 << 11),
    +            else => generator.get_regs().ctrl |= (1 << 11),
             }
         }
     
    -    pub fn setDiv(generator: Generator, div: u32) void {
    +    pub fn set_div(generator: Generator, div: u32) void {
             if (generator == .peri)
                 return;
     
    -        generator.getRegs().div = div;
    +        generator.get_regs().div = div;
         }
     
    -    pub fn getDiv(generator: Generator) u32 {
    +    pub fn get_div(generator: Generator) u32 {
             if (generator == .peri)
                 return 1;
     
    -        return generator.getRegs().div;
    +        return generator.get_regs().div;
         }
     
         // The bitfields for the *_SELECTED registers are actually a mask of which
    @@ -125,21 +125,21 @@ pub const Generator = enum(u32) {
         //
         // Some mention that this is only for the glitchless mux, so if it is non-glitchless then return true
         pub fn selected(generator: Generator) bool {
    -        return (0 != generator.getRegs().selected);
    +        return (0 != generator.get_regs().selected);
         }
     
    -    pub fn clearSource(generator: Generator) void {
    -        generator.getRegs().ctrl &= ~@as(u32, 0x3);
    +    pub fn clear_source(generator: Generator) void {
    +        generator.get_regs().ctrl &= ~@as(u32, 0x3);
         }
     
         pub fn disable(generator: Generator) void {
             switch (generator) {
                 .sys, .ref => {},
    -            else => generator.getRegs().ctrl &= ~@as(u32, 1 << 11),
    +            else => generator.get_regs().ctrl &= ~@as(u32, 1 << 11),
             }
         }
     
    -    pub fn isAuxSource(generator: Generator, source: Source) bool {
    +    pub fn is_aux_source(generator: Generator, source: Source) bool {
             return switch (generator) {
                 .sys => switch (source) {
                     .clk_ref => false,
    @@ -153,16 +153,16 @@ pub const Generator = enum(u32) {
             };
         }
     
    -    pub fn setSource(generator: Generator, src: u32) void {
    -        std.debug.assert(generator.hasGlitchlessMux());
    -        const gen_regs = generator.getRegs();
    +    pub fn set_source(generator: Generator, src: u32) void {
    +        std.debug.assert(generator.has_glitchless_mux());
    +        const gen_regs = generator.get_regs();
             const mask = ~@as(u32, 0x3);
             const ctrl_value = gen_regs.ctrl;
             gen_regs.ctrl = (ctrl_value & mask) | src;
         }
     
    -    pub fn setAuxSource(generator: Generator, auxsrc: u32) void {
    -        const gen_regs = generator.getRegs();
    +    pub fn set_aux_source(generator: Generator, auxsrc: u32) void {
    +        const gen_regs = generator.get_regs();
             const mask = ~@as(u32, 0x1e0);
             const ctrl_value = gen_regs.ctrl;
             gen_regs.ctrl = (ctrl_value & mask) | (auxsrc << 5);
    @@ -183,7 +183,7 @@ pub const Source = enum {
         clk_rtc,
     };
     
    -fn srcValue(generator: Generator, source: Source) u32 {
    +fn src_value(generator: Generator, source: Source) u32 {
         return switch (generator) {
             .sys => src: {
                 const ret: u32 = switch (source) {
    @@ -204,7 +204,7 @@ fn srcValue(generator: Generator, source: Source) u32 {
         };
     }
     
    -fn auxSrcValue(generator: Generator, source: Source) u32 {
    +fn aux_src_value(generator: Generator, source: Source) u32 {
         return switch (generator) {
             .sys => auxsrc: {
                 const ret: u32 = switch (source) {
    @@ -308,7 +308,7 @@ pub const GlobalConfiguration = struct {
             // TODO: allow user to configure PLLs to optimize for low-jitter, low-power, or manually specify
         };
     
    -    pub fn getFrequency(config: GlobalConfiguration, source: Source) ?u32 {
    +    pub fn get_frequency(config: GlobalConfiguration, source: Source) ?u32 {
             return switch (source) {
                 .src_xosc => xosc_freq,
                 .src_rosc => rosc_freq,
    @@ -337,11 +337,11 @@ pub const GlobalConfiguration = struct {
                     .generator = .ref,
                     .input = .{
                         .source = ref_opts.source,
    -                    .freq = config.getFrequency(ref_opts.source).?,
    -                    .src_value = srcValue(.ref, ref_opts.source),
    -                    .auxsrc_value = auxSrcValue(.ref, ref_opts.source),
    +                    .freq = config.get_frequency(ref_opts.source).?,
    +                    .src_value = src_value(.ref, ref_opts.source),
    +                    .auxsrc_value = aux_src_value(.ref, ref_opts.source),
                     },
    -                .output_freq = config.getFrequency(ref_opts.source).?,
    +                .output_freq = config.get_frequency(ref_opts.source).?,
                 };
             } else if (config.pll_sys != null or config.pll_usb != null) ref_config: {
                 config.xosc_configured = true;
    @@ -350,8 +350,8 @@ pub const GlobalConfiguration = struct {
                     .input = .{
                         .source = .src_xosc,
                         .freq = xosc_freq,
    -                    .src_value = srcValue(.ref, .src_xosc),
    -                    .auxsrc_value = auxSrcValue(.ref, .src_xosc),
    +                    .src_value = src_value(.ref, .src_xosc),
    +                    .auxsrc_value = aux_src_value(.ref, .src_xosc),
                     },
                     .output_freq = xosc_freq,
                 };
    @@ -369,8 +369,8 @@ pub const GlobalConfiguration = struct {
                             break :input .{
                                 .source = .src_rosc,
                                 .freq = rosc_freq,
    -                            .src_value = srcValue(.sys, .src_rosc),
    -                            .auxsrc_value = auxSrcValue(.sys, .src_rosc),
    +                            .src_value = src_value(.sys, .src_rosc),
    +                            .auxsrc_value = aux_src_value(.sys, .src_rosc),
                             };
                         },
                         .src_xosc => input: {
    @@ -380,8 +380,8 @@ pub const GlobalConfiguration = struct {
                             break :input .{
                                 .source = .src_xosc,
                                 .freq = xosc_freq,
    -                            .src_value = srcValue(.sys, .src_xosc),
    -                            .auxsrc_value = auxSrcValue(.sys, .src_xosc),
    +                            .src_value = src_value(.sys, .src_xosc),
    +                            .auxsrc_value = aux_src_value(.sys, .src_xosc),
                             };
                         },
                         .pll_sys => input: {
    @@ -402,8 +402,8 @@ pub const GlobalConfiguration = struct {
                                 // TODO: not really sure what frequency to
                                 // drive pll at yet, but this is an okay start
                                 .freq = 125_000_000,
    -                            .src_value = srcValue(.sys, .pll_sys),
    -                            .auxsrc_value = auxSrcValue(.sys, .pll_sys),
    +                            .src_value = src_value(.sys, .pll_sys),
    +                            .auxsrc_value = aux_src_value(.sys, .pll_sys),
                             };
                         },
     
    @@ -433,8 +433,8 @@ pub const GlobalConfiguration = struct {
                     .input = .{
                         .source = .pll_usb,
                         .freq = 48_000_000,
    -                    .src_value = srcValue(.usb, .pll_usb),
    -                    .auxsrc_value = auxSrcValue(.usb, .pll_usb),
    +                    .src_value = src_value(.usb, .pll_usb),
    +                    .auxsrc_value = aux_src_value(.usb, .pll_usb),
                     },
                     .output_freq = 48_000_000,
                 };
    @@ -470,8 +470,8 @@ pub const GlobalConfiguration = struct {
                     .input = .{
                         .source = .pll_usb,
                         .freq = 48_000_000,
    -                    .src_value = srcValue(.adc, .pll_usb),
    -                    .auxsrc_value = auxSrcValue(.adc, .pll_usb),
    +                    .src_value = src_value(.adc, .pll_usb),
    +                    .auxsrc_value = aux_src_value(.adc, .pll_usb),
                     },
                     .output_freq = 48_000_000,
                 };
    @@ -501,8 +501,8 @@ pub const GlobalConfiguration = struct {
                     .input = .{
                         .source = .pll_usb,
                         .freq = 48_000_000,
    -                    .src_value = srcValue(.rtc, .pll_usb),
    -                    .auxsrc_value = auxSrcValue(.rtc, .pll_usb),
    +                    .src_value = src_value(.rtc, .pll_usb),
    +                    .auxsrc_value = aux_src_value(.rtc, .pll_usb),
                     },
                     .output_freq = 48_000_000,
                 };
    @@ -516,15 +516,15 @@ pub const GlobalConfiguration = struct {
                     .generator = .peri,
                     .input = .{
                         .source = peri_opts.source,
    -                    .freq = config.getFrequency(peri_opts.source) orelse
    +                    .freq = config.get_frequency(peri_opts.source) orelse
                             @compileError("you need to configure the source: " ++ @tagName(peri_opts.source)),
    -                    .src_value = srcValue(.peri, peri_opts.source),
    -                    .auxsrc_value = auxSrcValue(.peri, peri_opts.source),
    +                    .src_value = src_value(.peri, peri_opts.source),
    +                    .auxsrc_value = aux_src_value(.peri, peri_opts.source),
                     },
                     .output_freq = if (peri_opts.freq) |output_freq|
                         output_freq
                     else
    -                    config.getFrequency(peri_opts.source).?,
    +                    config.get_frequency(peri_opts.source).?,
                 };
             } else null;
     
    @@ -532,15 +532,15 @@ pub const GlobalConfiguration = struct {
                 .generator = .gpout0,
                 .input = .{
                     .source = gpout0_opts.source,
    -                .freq = config.getFrequency(gpout0_opts.source) orelse
    +                .freq = config.get_frequency(gpout0_opts.source) orelse
                         @compileError("you need to configure the source: " ++ @tagName(gpout0_opts.source)),
    -                .src_value = srcValue(.gpout0, gpout0_opts.source),
    -                .auxsrc_value = auxSrcValue(.gpout0, gpout0_opts.source),
    +                .src_value = src_value(.gpout0, gpout0_opts.source),
    +                .auxsrc_value = aux_src_value(.gpout0, gpout0_opts.source),
                 },
                 .output_freq = if (gpout0_opts.freq) |output_freq|
                     output_freq
                 else
    -                config.getFrequency(gpout0_opts.source).?,
    +                config.get_frequency(gpout0_opts.source).?,
             } else null;
     
             return config;
    @@ -551,10 +551,10 @@ pub const GlobalConfiguration = struct {
         pub fn apply(comptime config: GlobalConfiguration) void {
     
             // disable resus if it has been turned on elsewhere
    -        regs.CLOCKS.CLK_SYS_RESUS_CTRL.raw = 0;
    +        CLOCKS.CLK_SYS_RESUS_CTRL.raw = 0;
     
             if (config.xosc_configured) {
    -            regs.WATCHDOG.TICK.modify(.{
    +            WATCHDOG.TICK.modify(.{
                     .CYCLES = xosc_freq / 1_000_000,
                     .ENABLE = 1,
                 });
    @@ -565,7 +565,7 @@ pub const GlobalConfiguration = struct {
             // configured to use/be used from PLLs
             if (config.sys) |sys| switch (sys.input.source) {
                 .pll_usb, .pll_sys => {
    -                regs.CLOCKS.CLK_SYS_CTRL.modify(.{ .SRC = 0 });
    +                CLOCKS.CLK_SYS_CTRL.modify(.{ .SRC = .{ .raw = 0 } });
                     while (!Generator.sys.selected()) {}
                 },
                 else => {},
    @@ -573,7 +573,7 @@ pub const GlobalConfiguration = struct {
     
             if (config.ref) |ref| switch (ref.input.source) {
                 .pll_usb, .pll_sys => {
    -                regs.CLOCKS.CLK_REF_CTRL.modify(.{ .SRC = 0 });
    +                CLOCKS.CLK_REF_CTRL.modify(.{ .SRC = .{ .raw = 0 } });
                     while (!Generator.ref.selected()) {}
                 },
                 else => {},
    @@ -621,11 +621,11 @@ pub const Configuration = struct {
             const div = @intCast(u32, (@intCast(u64, input.freq) << 8) / output_freq);
     
             // check divisor
    -        if (div > generator.getDiv())
    -            generator.setDiv(div);
    +        if (div > generator.get_div())
    +            generator.set_div(div);
     
    -        if (generator.hasGlitchlessMux() and input.src_value == 1) {
    -            generator.clearSource();
    +        if (generator.has_glitchless_mux() and input.src_value == 1) {
    +            generator.clear_source();
     
                 while (!generator.selected()) {}
             } else {
    @@ -643,21 +643,21 @@ pub const Configuration = struct {
                 );
             }
     
    -        generator.setAuxSource(input.auxsrc_value);
    +        generator.set_aux_source(input.auxsrc_value);
     
             // set aux mux first and then glitchless mex if this clock has one
    -        if (generator.hasGlitchlessMux()) {
    -            generator.setSource(input.src_value);
    +        if (generator.has_glitchless_mux()) {
    +            generator.set_source(input.src_value);
                 while (!generator.selected()) {}
             }
     
             generator.enable();
    -        generator.setDiv(div);
    +        generator.set_div(div);
         }
     };
     
     // NOTE: untested
    -pub fn countFrequencyKhz(source: Source, comptime clock_config: GlobalConfiguration) u32 {
    +pub fn count_frequency_khz(source: Source, comptime clock_config: GlobalConfiguration) u32 {
         const ref_freq = clock_config.ref.?.output_freq;
     
         // wait for counter to be done
    diff --git a/src/hal/gpio.zig b/src/hal/gpio.zig
    index e725d79fa..1e333b148 100644
    --- a/src/hal/gpio.zig
    +++ b/src/hal/gpio.zig
    @@ -1,8 +1,13 @@
     const std = @import("std");
    +const assert = std.debug.assert;
    +
     const microzig = @import("microzig");
    +const peripherals = microzig.chip.peripherals;
    +const SIO = peripherals.SIO;
    +const PADS_BANK0 = peripherals.PADS_BANK0;
    +const IO_BANK0 = peripherals.IO_BANK0;
    +
     const resets = @import("resets.zig");
    -const regs = microzig.chip.registers;
    -const assert = std.debug.assert;
     
     const log = std.log.scoped(.gpio);
     
    @@ -17,7 +22,7 @@ pub const Function = enum(u5) {
         pio1,
         gpck,
         usb,
    -    @"null" = 0x1f,
    +    null = 0x1f,
     };
     
     pub const Direction = enum(u1) {
    @@ -65,14 +70,14 @@ pub inline fn reset() void {
     /// Initialize a GPIO, set func to SIO
     pub inline fn init(comptime gpio: u32) void {
         const mask = 1 << gpio;
    -    regs.SIO.GPIO_OE_CLR.raw = mask;
    -    regs.SIO.GPIO_OUT_CLR.raw = mask;
    -    setFunction(gpio, .sio);
    +    SIO.GPIO_OE_CLR.raw = mask;
    +    SIO.GPIO_OUT_CLR.raw = mask;
    +    set_function(gpio, .sio);
     }
     
     /// Reset GPIO back to null function (disables it)
     pub inline fn deinit(comptime gpio: u32) void {
    -    setFunction(gpio, .@"null");
    +    set_function(gpio, .null);
     }
     
     pub const PullUpDown = enum {
    @@ -80,9 +85,9 @@ pub const PullUpDown = enum {
         down,
     };
     
    -pub inline fn setPullUpDown(comptime gpio: u32, mode: ?PullUpDown) void {
    +pub inline fn set_pull(comptime gpio: u32, mode: ?PullUpDown) void {
         const gpio_name = comptime std.fmt.comptimePrint("GPIO{d}", .{gpio});
    -    const gpio_regs = @field(regs.PADS_BANK0, gpio_name);
    +    const gpio_regs = @field(PADS_BANK0, gpio_name);
     
         if (mode == null) {
             gpio_regs.modify(.{ .PUE = 0, .PDE = 0 });
    @@ -92,11 +97,11 @@ pub inline fn setPullUpDown(comptime gpio: u32, mode: ?PullUpDown) void {
         }
     }
     
    -pub inline fn setDir(comptime gpio: u32, direction: Direction) void {
    +pub inline fn set_direction(comptime gpio: u32, direction: Direction) void {
         const mask = 1 << gpio;
         switch (direction) {
    -        .in => regs.SIO.GPIO_OE_CLR.raw = mask,
    -        .out => regs.SIO.GPIO_OE_SET.raw = mask,
    +        .in => SIO.GPIO_OE_CLR.raw = mask,
    +        .out => SIO.GPIO_OE_SET.raw = mask,
         }
     }
     
    @@ -105,37 +110,43 @@ pub inline fn put(comptime gpio: u32, value: u1) void {
         std.log.debug("GPIO{} put: {}", .{ gpio, value });
         const mask = 1 << gpio;
         switch (value) {
    -        0 => regs.SIO.GPIO_OUT_CLR.raw = mask,
    -        1 => regs.SIO.GPIO_OUT_SET.raw = mask,
    +        0 => SIO.GPIO_OUT_CLR.raw = mask,
    +        1 => SIO.GPIO_OUT_SET.raw = mask,
         }
     }
     
     pub inline fn toggle(comptime gpio: u32) void {
    -    regs.SIO.GPIO_OUT_XOR.raw = (1 << gpio);
    +    SIO.GPIO_OUT_XOR.raw = (1 << gpio);
     }
     
     pub inline fn read(comptime gpio: u32) u1 {
         const mask = 1 << gpio;
    -    return if ((regs.SIO.GPIO_IN.raw & mask) != 0)
    +    return if ((SIO.GPIO_IN.raw & mask) != 0)
             1
         else
             0;
     }
     
    -pub inline fn setFunction(comptime gpio: u32, function: Function) void {
    +pub inline fn set_function(comptime gpio: u32, function: Function) void {
         const pad_bank_reg = comptime std.fmt.comptimePrint("GPIO{}", .{gpio});
    -    @field(regs.PADS_BANK0, pad_bank_reg).modify(.{
    +    @field(PADS_BANK0, pad_bank_reg).modify(.{
             .IE = 1,
             .OD = 0,
         });
     
         const io_bank_reg = comptime std.fmt.comptimePrint("GPIO{}_CTRL", .{gpio});
    -    @field(regs.IO_BANK0, io_bank_reg).write(.{
    -        .FUNCSEL = @enumToInt(function),
    -        .OUTOVER = 0,
    -        .INOVER = 0,
    -        .IRQOVER = 0,
    -        .OEOVER = 0,
    +    @field(IO_BANK0, io_bank_reg).write(.{
    +        .FUNCSEL = .{ .raw = @enumToInt(function) },
    +        .OUTOVER = .{ .value = .NORMAL },
    +        .INOVER = .{ .value = .NORMAL },
    +        .IRQOVER = .{ .value = .NORMAL },
    +        .OEOVER = .{ .value = .NORMAL },
    +
    +        .reserved8 = 0,
    +        .reserved12 = 0,
    +        .reserved16 = 0,
    +        .reserved28 = 0,
    +        .padding = 0,
         });
     }
     
    diff --git a/src/hal/irq.zig b/src/hal/irq.zig
    index 7d57c7854..f3502be5b 100644
    --- a/src/hal/irq.zig
    +++ b/src/hal/irq.zig
    @@ -3,18 +3,18 @@ const regs = microzig.chip.registers;
     
     // TODO: the register definitions are improved now, use them instead of raw
     // writes/reads
    -fn getInterruptMask(comptime interrupt_name: []const u8) u32 {
    +fn get_interrupt_mask(comptime interrupt_name: []const u8) u32 {
         const offset = @offsetOf(microzig.chip.VectorTable, interrupt_name);
     
         return (1 << ((offset / 4) - 16));
     }
     pub fn enable(comptime interrupt_name: []const u8) void {
    -    const mask = comptime getInterruptMask(interrupt_name);
    +    const mask = comptime get_interrupt_mask(interrupt_name);
         regs.SCS.NVIC.ICPR.raw = mask;
         regs.SCS.NVIC.ISER.raw = mask;
     }
     
     pub fn disable(comptime interrupt_name: []const u8) void {
    -    const mask = comptime getInterruptMask(interrupt_name);
    +    const mask = comptime get_interrupt_mask(interrupt_name);
         regs.SCS.NVIC.ICER.raw = mask;
     }
    diff --git a/src/hal/multicore.zig b/src/hal/multicore.zig
    index f1bcfe08c..e3199d9af 100644
    --- a/src/hal/multicore.zig
    +++ b/src/hal/multicore.zig
    @@ -1,25 +1,29 @@
     const std = @import("std");
    -const microzig = @import("microzig");
    -const regs = microzig.chip.registers;
     const assert = std.debug.assert;
     
    +const microzig = @import("microzig");
    +const peripherals = microzig.chip.peripherals;
    +const SIO = peripherals.SIO;
    +const PSM = peripherals.PSM;
    +const SCB = peripherals.SCB;
    +
     pub const fifo = struct {
         /// Check if the FIFO has valid data for reading.
    -    pub fn isReadReady() bool {
    -        return regs.SIO.FIFO_ST.read().VLD == 1;
    +    pub fn is_read_ready() bool {
    +        return SIO.FIFO_ST.read().VLD == 1;
         }
     
         /// Read from the FIFO
         /// Will return null if it is empty.
         pub fn read() ?u32 {
    -        if (!isReadReady())
    +        if (!is_read_ready())
                 return null;
     
    -        return regs.SIO.FIFO_RD.*;
    +        return SIO.FIFO_RD;
         }
     
         /// Read from the FIFO, waiting for data if there is none.
    -    pub fn readBloacking() u32 {
    +    pub fn read_blocking() u32 {
             while (true) {
                 if (read()) |value| return value;
                 microzig.cpu.wfe();
    @@ -32,20 +36,20 @@ pub const fifo = struct {
         }
     
         /// Check if the FIFO is ready to receive data.
    -    pub fn isWriteReady() bool {
    -        return regs.SIO.FIFO_ST.read().RDY == 1;
    +    pub fn is_write_ready() bool {
    +        return SIO.FIFO_ST.read().RDY == 1;
         }
     
         /// Write to the FIFO
         /// You must check if there is space by calling is_write_ready
         pub fn write(value: u32) void {
    -        regs.SIO.FIFO_WR.* = value;
    +        SIO.FIFO_WR = value;
             microzig.cpu.sev();
         }
     
         /// Write to the FIFO, waiting for room if it is full.
    -    pub fn writeBlocking(value: u32) void {
    -        while (!isWriteReady())
    +    pub fn write_blocking(value: u32) void {
    +        while (!is_write_ready())
                 std.mem.doNotOptimizeAway(value);
     
             write(value);
    @@ -55,11 +59,11 @@ pub const fifo = struct {
     var core1_stack: [128]u32 = undefined;
     
     /// Runs `entrypoint` on the second core.
    -pub fn launchCore1(entrypoint: *const fn () void) void {
    -    launchCore1WithStack(entrypoint, &core1_stack);
    +pub fn launch_core1(entrypoint: *const fn () void) void {
    +    launch_core1_with_stack(entrypoint, &core1_stack);
     }
     
    -pub fn launchCore1WithStack(entrypoint: *const fn () void, stack: []u32) void {
    +pub fn launch_core1_with_stack(entrypoint: *const fn () void, stack: []u32) void {
         // TODO: disable SIO interrupts
     
         const wrapper = &struct {
    @@ -71,9 +75,9 @@ pub fn launchCore1WithStack(entrypoint: *const fn () void, stack: []u32) void {
         }.wrapper;
     
         // reset the second core
    -    regs.PSM.FRCE_OFF.modify(.{ .proc1 = 1 });
    -    while (regs.PSM.FRCE_OFF.read().proc1 != 1) microzig.cpu.nop();
    -    regs.PSM.FRCE_OFF.modify(.{ .proc1 = 0 });
    +    PSM.FRCE_OFF.modify(.{ .proc1 = 1 });
    +    while (PSM.FRCE_OFF.read().proc1 != 1) microzig.cpu.nop();
    +    PSM.FRCE_OFF.modify(.{ .proc1 = 0 });
     
         stack[stack.len - 2] = @ptrToInt(entrypoint);
         stack[stack.len - 1] = @ptrToInt(stack.ptr);
    @@ -88,7 +92,7 @@ pub fn launchCore1WithStack(entrypoint: *const fn () void, stack: []u32) void {
             0,
             0,
             1,
    -        regs.SCS.SCB.VTOR.raw,
    +        SCB.VTOR.raw,
             stack_ptr,
             @ptrToInt(wrapper),
         };
    @@ -102,8 +106,8 @@ pub fn launchCore1WithStack(entrypoint: *const fn () void, stack: []u32) void {
                 microzig.cpu.sev();
             }
     
    -        fifo.writeBlocking(cmd);
    +        fifo.write_blocking(cmd);
             // the second core should respond with the same value, if it doesnt't lets start over
    -        seq = if (cmd == fifo.readBloacking()) seq + 1 else 0;
    +        seq = if (cmd == fifo.read_blocking()) seq + 1 else 0;
         }
     }
    diff --git a/src/hal/pins.zig b/src/hal/pins.zig
    index dce1c2418..24b9d7af6 100644
    --- a/src/hal/pins.zig
    +++ b/src/hal/pins.zig
    @@ -1,13 +1,15 @@
     const std = @import("std");
    +const assert = std.debug.assert;
    +const comptimePrint = std.fmt.comptimePrint;
    +const StructField = std.builtin.Type.StructField;
    +
    +const microzig = @import("microzig");
    +const SIO = microzig.chip.peripherals.SIO;
    +
     const gpio = @import("gpio.zig");
     const pwm = @import("pwm.zig");
     const adc = @import("adc.zig");
     const resets = @import("resets.zig");
    -const regs = @import("microzig").chip.registers;
    -
    -const assert = std.debug.assert;
    -const comptimePrint = std.fmt.comptimePrint;
    -const StructField = std.builtin.Type.StructField;
     
     pub const Pin = enum {
         GPIO0,
    @@ -52,16 +54,16 @@ pub const Pin = enum {
             // schmitt trigger
             // hysteresis
     
    -        pub fn getDirection(comptime config: Configuration) gpio.Direction {
    +        pub fn get_direction(comptime config: Configuration) gpio.Direction {
                 return if (config.direction) |direction|
                     direction
    -            else if (comptime config.function.isPwm())
    +            else if (comptime config.function.is_pwm())
                     .out
    -            else if (comptime config.function.isUartTx())
    +            else if (comptime config.function.is_uart_tx())
                     .out
    -            else if (comptime config.function.isUartRx())
    +            else if (comptime config.function.is_uart_rx())
                     .in
    -            else if (comptime config.function.isAdc())
    +            else if (comptime config.function.is_adc())
                     .in
                 else
                     @panic("TODO");
    @@ -142,7 +144,7 @@ pub const Function = enum {
         ADC2,
         ADC3,
     
    -    pub fn isPwm(function: Function) bool {
    +    pub fn is_pwm(function: Function) bool {
             return switch (function) {
                 .PWM0_A,
                 .PWM0_B,
    @@ -165,7 +167,7 @@ pub const Function = enum {
             };
         }
     
    -    pub fn isUartTx(function: Function) bool {
    +    pub fn is_uart_tx(function: Function) bool {
             return switch (function) {
                 .UART0_TX,
                 .UART1_TX,
    @@ -174,7 +176,7 @@ pub const Function = enum {
             };
         }
     
    -    pub fn isUartRx(function: Function) bool {
    +    pub fn is_uart_rx(function: Function) bool {
             return switch (function) {
                 .UART0_RX,
                 .UART1_RX,
    @@ -183,7 +185,7 @@ pub const Function = enum {
             };
         }
     
    -    pub fn pwmSlice(comptime function: Function) u32 {
    +    pub fn pwm_slice(comptime function: Function) u32 {
             return switch (function) {
                 .PWM0_A, .PWM0_B => 0,
                 .PWM1_A, .PWM1_B => 1,
    @@ -197,7 +199,7 @@ pub const Function = enum {
             };
         }
     
    -    pub fn isAdc(function: Function) bool {
    +    pub fn is_adc(function: Function) bool {
             return switch (function) {
                 .ADC0,
                 .ADC1,
    @@ -208,7 +210,7 @@ pub const Function = enum {
             };
         }
     
    -    pub fn pwmChannel(comptime function: Function) pwm.Channel {
    +    pub fn pwm_channel(comptime function: Function) pwm.Channel {
             return switch (function) {
                 .PWM0_A,
                 .PWM1_A,
    @@ -354,10 +356,10 @@ pub fn Pins(comptime config: GlobalConfiguration) type {
                     if (pin_config.function == .SIO) {
                         pin_field.name = pin_config.name orelse field.name;
                         pin_field.type = GPIO(@enumToInt(@field(Pin, field.name)), pin_config.direction orelse .in);
    -                } else if (pin_config.function.isPwm()) {
    +                } else if (pin_config.function.is_pwm()) {
                         pin_field.name = pin_config.name orelse @tagName(pin_config.function);
    -                    pin_field.type = pwm.PWM(pin_config.function.pwmSlice(), pin_config.function.pwmChannel());
    -                } else if (pin_config.function.isAdc()) {
    +                    pin_field.type = pwm.Pwm(pin_config.function.pwm_slice(), pin_config.function.pwm_channel());
    +                } else if (pin_config.function.is_adc()) {
                         pin_field.name = pin_config.name orelse @tagName(pin_config.function);
                         pin_field.type = adc.Input;
                         pin_field.default_value = @ptrCast(?*const anyopaque, switch (pin_config.function) {
    @@ -453,16 +455,16 @@ pub const GlobalConfiguration = struct {
                             @compileError(comptimePrint("{s} cannot be configured for {}", .{ field.name, pin_config.function }));
     
                         if (pin_config.function == .SIO) {
    -                        switch (pin_config.getDirection()) {
    +                        switch (pin_config.get_direction()) {
                                 .in => input_gpios |= 1 << gpio_num,
                                 .out => output_gpios |= 1 << gpio_num,
                             }
                         }
     
    -                    if (pin_config.function.isAdc()) {
    +                    if (pin_config.function.is_adc()) {
                             has_adc = true;
                         }
    -                    if (pin_config.function.isPwm()) {
    +                    if (pin_config.function.is_pwm()) {
                             has_pwm = true;
                         }
                     };
    @@ -474,8 +476,8 @@ pub const GlobalConfiguration = struct {
             gpio.reset();
     
             if (used_gpios != 0) {
    -            regs.SIO.GPIO_OE_CLR.raw = used_gpios;
    -            regs.SIO.GPIO_OUT_CLR.raw = used_gpios;
    +            SIO.GPIO_OE_CLR.raw = used_gpios;
    +            SIO.GPIO_OUT_CLR.raw = used_gpios;
             }
     
             inline for (@typeInfo(GlobalConfiguration).Struct.fields) |field| {
    @@ -494,13 +496,13 @@ pub const GlobalConfiguration = struct {
                     // @"null" = 0x1f,
     
                     if (func == .SIO) {
    -                    gpio.setFunction(gpio_num, .sio);
    -                } else if (comptime func.isPwm()) {
    -                    gpio.setFunction(gpio_num, .pwm);
    -                } else if (comptime func.isAdc()) {
    -                    gpio.setFunction(gpio_num, .null);
    +                    gpio.set_function(gpio_num, .sio);
    +                } else if (comptime func.is_pwm()) {
    +                    gpio.set_function(gpio_num, .pwm);
    +                } else if (comptime func.is_adc()) {
    +                    gpio.set_function(gpio_num, .null);
                     } else if (comptime func.isUartTx() or func.isUartRx()) {
    -                    gpio.setFunction(gpio_num, .uart);
    +                    gpio.set_function(gpio_num, .uart);
                     } else {
                         @compileError(std.fmt.comptimePrint("Unimplemented pin function. Please implement setting pin function {s} for GPIO {}", .{
                             @tagName(func),
    @@ -511,7 +513,7 @@ pub const GlobalConfiguration = struct {
             }
     
             if (output_gpios != 0)
    -            regs.SIO.GPIO_OE_SET.raw = output_gpios;
    +            SIO.GPIO_OE_SET.raw = output_gpios;
     
             if (input_gpios != 0) {
                 inline for (@typeInfo(GlobalConfiguration).Struct.fields) |field|
    @@ -521,7 +523,7 @@ pub const GlobalConfiguration = struct {
                         if (comptime pin_config.getDirection() != .in)
                             @compileError("Only input pins can have pull up/down enabled");
     
    -                    gpio.setPullUpDown(gpio_num, pull);
    +                    gpio.set_pull(gpio_num, pull);
                     };
             }
     
    diff --git a/src/hal/pll.zig b/src/hal/pll.zig
    index 117a42c14..62fd9ecd7 100644
    --- a/src/hal/pll.zig
    +++ b/src/hal/pll.zig
    @@ -1,12 +1,12 @@
     const std = @import("std");
    -const microzig = @import("microzig");
     const assert = std.debug.assert;
     
    -// TODO: remove
    -const gpio = @import("gpio.zig");
    -
    -const regs = microzig.chip.registers;
    +const microzig = @import("microzig");
     const xosc_freq = microzig.board.xosc_freq;
    +const peripherals = microzig.chip.peripherals;
    +const RESETS = peripherals.RESETS;
    +
    +const PllRegs = microzig.chip.types.peripherals.PLL_SYS;
     
     pub const Configuration = struct {
         refdiv: u6,
    @@ -23,28 +23,31 @@ pub const PLL = enum {
         sys,
         usb,
     
    -    fn getRegs(pll: PLL) *volatile PllRegs {
    -        return &plls[@enumToInt(pll)];
    +    fn get_regs(pll: PLL) *volatile PllRegs {
    +        return switch (pll) {
    +            .sys => peripherals.PLL_SYS,
    +            .usb => peripherals.PLL_USB,
    +        };
         }
     
         pub fn reset(pll: PLL) void {
             switch (pll) {
                 .sys => {
    -                regs.RESETS.RESET.modify(.{ .pll_sys = 1 });
    -                regs.RESETS.RESET.modify(.{ .pll_sys = 0 });
    -                while (regs.RESETS.RESET_DONE.read().pll_sys != 1) {}
    +                RESETS.RESET.modify(.{ .pll_sys = 1 });
    +                RESETS.RESET.modify(.{ .pll_sys = 0 });
    +                while (RESETS.RESET_DONE.read().pll_sys != 1) {}
                 },
                 .usb => {
    -                regs.RESETS.RESET.modify(.{ .pll_usb = 1 });
    -                regs.RESETS.RESET.modify(.{ .pll_usb = 0 });
    -                while (regs.RESETS.RESET_DONE.read().pll_usb != 1) {}
    +                RESETS.RESET.modify(.{ .pll_usb = 1 });
    +                RESETS.RESET.modify(.{ .pll_usb = 0 });
    +                while (RESETS.RESET_DONE.read().pll_usb != 1) {}
                 },
             }
         }
     
    -    pub fn isLocked(pll: PLL) bool {
    -        const pll_regs = pll.getRegs();
    -        return pll_regs.cs.read().LOCK == 1;
    +    pub fn is_locked(pll: PLL) bool {
    +        const pll_regs = pll.get_regs();
    +        return pll_regs.CS.read().LOCK == 1;
         }
     
         pub fn apply(pll: PLL, comptime config: Configuration) void {
    @@ -53,7 +56,7 @@ pub const PLL = enum {
             assert(config.postdiv2 >= 1 and config.postdiv2 <= 7);
             assert(config.postdiv2 <= config.postdiv1);
     
    -        const pll_regs = pll.getRegs();
    +        const pll_regs = pll.get_regs();
             const ref_freq = xosc_freq / @as(u32, config.refdiv);
             const vco_freq = ref_freq * config.fbdiv;
             assert(ref_freq <= vco_freq / 16);
    @@ -65,11 +68,11 @@ pub const PLL = enum {
             // 5. set up post dividers and turn them on
     
             // do not bother a PLL which is already configured
    -        if (pll.isLocked() and
    -            config.refdiv == pll_regs.cs.read().REFDIV and
    -            config.fbdiv == pll_regs.fbdiv_int.read() and
    -            config.postdiv1 == pll_regs.prim.read().POSTDIV1 and
    -            config.postdiv2 == pll_regs.prim.read().POSTDIV2)
    +        if (pll.is_locked() and
    +            config.refdiv == pll_regs.CS.read().REFDIV and
    +            config.fbdiv == pll_regs.FBDIV_INT.read().FBDIV_INT and
    +            config.postdiv1 == pll_regs.PRIM.read().POSTDIV1 and
    +            config.postdiv2 == pll_regs.PRIM.read().POSTDIV2)
             {
                 return;
             }
    @@ -77,39 +80,20 @@ pub const PLL = enum {
             pll.reset();
     
             // load vco related dividers
    -        pll_regs.cs.modify(.{ .REFDIV = config.refdiv });
    -        pll_regs.fbdiv_int.modify(config.fbdiv);
    +        pll_regs.CS.modify(.{ .REFDIV = config.refdiv });
    +        pll_regs.FBDIV_INT.modify(.{ .FBDIV_INT = config.fbdiv });
     
             // turn on PLL
    -        pll_regs.pwr.modify(.{ .PD = 0, .VCOPD = 0 });
    +        pll_regs.PWR.modify(.{ .PD = 0, .VCOPD = 0 });
     
             // wait for PLL to lock
    -        while (!pll.isLocked()) {}
    +        while (!pll.is_locked()) {}
     
    -        pll_regs.prim.modify(.{
    +        pll_regs.PRIM.modify(.{
                 .POSTDIV1 = config.postdiv1,
                 .POSTDIV2 = config.postdiv2,
             });
     
    -        pll_regs.pwr.modify(.{ .POSTDIVPD = 0 });
    +        pll_regs.PWR.modify(.{ .POSTDIVPD = 0 });
         }
     };
    -
    -const plls = @intToPtr(*volatile [2]PllRegs, regs.PLL_SYS.base_address);
    -comptime {
    -    assert(@sizeOf(PllRegs) == (regs.PLL_USB.base_address - regs.PLL_SYS.base_address));
    -}
    -
    -const CsReg = @typeInfo(@TypeOf(regs.PLL_SYS.CS)).Pointer.child;
    -const PwrReg = @typeInfo(@TypeOf(regs.PLL_SYS.PWR)).Pointer.child;
    -const FbdivIntReg = @typeInfo(@TypeOf(regs.PLL_SYS.FBDIV_INT)).Pointer.child;
    -const PrimReg = @typeInfo(@TypeOf(regs.PLL_SYS.PRIM)).Pointer.child;
    -
    -pub const PllRegs = extern struct {
    -    cs: CsReg,
    -    pwr: PwrReg,
    -    fbdiv_int: FbdivIntReg,
    -    prim: PrimReg,
    -
    -    padding: [4092]u32,
    -};
    diff --git a/src/hal/pwm.zig b/src/hal/pwm.zig
    index 8d2857300..7277b11e0 100644
    --- a/src/hal/pwm.zig
    +++ b/src/hal/pwm.zig
    @@ -1,24 +1,25 @@
     const std = @import("std");
     const microzig = @import("microzig");
    -const regs = microzig.chip.registers;
    +const PWM = microzig.chip.peripherals.PWM;
     
     const log = std.log.scoped(.pwm);
     
     pub const Config = struct {};
     
    -fn getRegs(comptime slice: u32) *volatile Regs {
    +fn get_regs(comptime slice: u32) *volatile Regs {
         @import("std").debug.assert(slice < 8);
    -    const reg_diff = comptime (@ptrToInt(regs.PWM.CH1_CSR) - @ptrToInt(regs.PWM.CH0_CSR));
    -    return @intToPtr(*volatile Regs, regs.PWM.base_address + reg_diff * slice);
    +    const PwmType = microzig.chip.types.peripherals.PWM;
    +    const reg_diff = comptime @offsetOf(PwmType, "CH1_CSR") - @offsetOf(PwmType, "CH0_CSR");
    +    return @intToPtr(*volatile Regs, @ptrToInt(PWM) + reg_diff * slice);
     }
     
    -pub fn PWM(comptime slice_num: u32, comptime chan: Channel) type {
    +pub fn Pwm(comptime slice_num: u32, comptime chan: Channel) type {
         return struct {
             pub const slice_number = slice_num;
             pub const channel = chan;
     
    -        pub inline fn setLevel(_: @This(), level: u16) void {
    -            setChannelLevel(slice_number, channel, level);
    +        pub inline fn set_level(_: @This(), level: u16) void {
    +            set_channel_level(slice_number, channel, level);
             }
     
             pub fn slice(_: @This()) Slice(slice_number) {
    @@ -31,24 +32,24 @@ pub fn Slice(comptime slice_num: u32) type {
         return struct {
             const slice_number = slice_num;
     
    -        pub inline fn setWrap(_: @This(), wrap: u16) void {
    -            setSliceWrap(slice_number, wrap);
    +        pub inline fn set_wrap(_: @This(), wrap: u16) void {
    +            set_slice_wrap(slice_number, wrap);
             }
     
             pub inline fn enable(_: @This()) void {
    -            getRegs(slice_number).csr.modify(.{ .EN = 1 });
    +            get_regs(slice_number).csr.modify(.{ .EN = 1 });
             }
     
             pub inline fn disable(_: @This()) void {
    -            getRegs(slice_number).csr.modify(.{ .EN = 0 });
    +            get_regs(slice_number).csr.modify(.{ .EN = 0 });
             }
     
    -        pub inline fn setPhaseCorrect(_: @This(), phase_correct: bool) void {
    -            setSlicePhaseCorrect(slice_number, phase_correct);
    +        pub inline fn set_phase_correct(_: @This(), phase_correct: bool) void {
    +            set_slice_phase_correct(slice_number, phase_correct);
             }
     
    -        pub inline fn setClkDiv(_: @This(), integer: u8, fraction: u4) void {
    -            setSliceClkDiv(slice_number, integer, fraction);
    +        pub inline fn set_clk_div(_: @This(), integer: u8, fraction: u4) void {
    +            set_slice_clk_div(slice_number, integer, fraction);
             }
         };
     }
    @@ -63,63 +64,63 @@ pub const ClkDivMode = enum(u2) {
     pub const Channel = enum(u1) { a, b };
     
     const Regs = extern struct {
    -    csr: @typeInfo(@TypeOf(regs.PWM.CH0_CSR)).Pointer.child,
    -    div: @typeInfo(@TypeOf(regs.PWM.CH0_DIV)).Pointer.child,
    -    ctr: @typeInfo(@TypeOf(regs.PWM.CH0_CTR)).Pointer.child,
    -    cc: @typeInfo(@TypeOf(regs.PWM.CH0_CC)).Pointer.child,
    -    top: @typeInfo(@TypeOf(regs.PWM.CH0_TOP)).Pointer.child,
    +    csr: @TypeOf(PWM.CH0_CSR),
    +    div: @TypeOf(PWM.CH0_DIV),
    +    ctr: @TypeOf(PWM.CH0_CTR),
    +    cc: @TypeOf(PWM.CH0_CC),
    +    top: @TypeOf(PWM.CH0_TOP),
     };
     
    -pub inline fn setSlicePhaseCorrect(comptime slice: u32, phase_correct: bool) void {
    +pub inline fn set_slice_phase_correct(comptime slice: u32, phase_correct: bool) void {
         log.debug("PWM{} set phase correct: {}", .{ slice, phase_correct });
    -    getRegs(slice).csr.modify(.{
    +    get_regs(slice).csr.modify(.{
             .PH_CORRECT = @boolToInt(phase_correct),
         });
     }
     
    -pub inline fn setSliceClkDiv(comptime slice: u32, integer: u8, fraction: u4) void {
    +pub inline fn set_slice_clk_div(comptime slice: u32, integer: u8, fraction: u4) void {
         log.debug("PWM{} set clk div: {}.{}", .{ slice, integer, fraction });
    -    getRegs(slice).div.modify(.{
    +    get_regs(slice).div.modify(.{
             .INT = integer,
             .FRAC = fraction,
         });
     }
     
    -pub inline fn setSliceClkDivMode(comptime slice: u32, mode: ClkDivMode) void {
    +pub inline fn set_slice_clk_div_mode(comptime slice: u32, mode: ClkDivMode) void {
         log.debug("PWM{} set clk div mode: {}", .{ slice, mode });
    -    getRegs(slice).csr.modify(.{
    +    get_regs(slice).csr.modify(.{
             .DIVMODE = @enumToInt(mode),
         });
     }
     
    -pub inline fn setChannelInversion(
    +pub inline fn set_channel_inversion(
         comptime slice: u32,
         comptime channel: Channel,
         invert: bool,
     ) void {
         switch (channel) {
    -        .a => getRegs(slice).csr.modify(.{
    +        .a => get_regs(slice).csr.modify(.{
                 .A_INV = @boolToInt(invert),
             }),
    -        .b => getRegs(slice).csr.modifi(.{
    +        .b => get_regs(slice).csr.modifi(.{
                 .B_INV = @boolToInt(invert),
             }),
         }
     }
     
    -pub inline fn setSliceWrap(comptime slice: u32, wrap: u16) void {
    +pub inline fn set_slice_wrap(comptime slice: u32, wrap: u16) void {
         log.debug("PWM{} set wrap: {}", .{ slice, wrap });
    -    getRegs(slice).top.raw = wrap;
    +    get_regs(slice).top.raw = wrap;
     }
     
    -pub inline fn setChannelLevel(
    +pub inline fn set_channel_level(
         comptime slice: u32,
         comptime channel: Channel,
         level: u16,
     ) void {
         log.debug("PWM{} {} set level: {}", .{ slice, channel, level });
         switch (channel) {
    -        .a => getRegs(slice).cc.modify(.{ .A = level }),
    -        .b => getRegs(slice).cc.modify(.{ .B = level }),
    +        .a => get_regs(slice).cc.modify(.{ .A = level }),
    +        .b => get_regs(slice).cc.modify(.{ .B = level }),
         }
     }
    diff --git a/src/hal/resets.zig b/src/hal/resets.zig
    index 45b22305a..218e6b427 100644
    --- a/src/hal/resets.zig
    +++ b/src/hal/resets.zig
    @@ -1,9 +1,9 @@
     const std = @import("std");
    -const microzig = @import("microzig");
    -
    -const regs = microzig.chip.registers;
     const EnumField = std.builtin.Type.EnumField;
    -const Mask = @typeInfo(@TypeOf(regs.RESETS.RESET)).Pointer.child.underlying_type;
    +
    +const microzig = @import("microzig");
    +const RESETS = microzig.chip.peripherals.RESETS;
    +const Mask = @TypeOf(RESETS.RESET).underlying_type;
     
     pub const Module = enum {
         adc,
    @@ -41,8 +41,8 @@ pub inline fn reset(comptime modules: []const Module) void {
     
         const raw_mask = @bitCast(u32, mask);
     
    -    regs.RESETS.RESET.raw = raw_mask;
    -    regs.RESETS.RESET.raw = 0;
    +    RESETS.RESET.raw = raw_mask;
    +    RESETS.RESET.raw = 0;
     
    -    while ((regs.RESETS.RESET_DONE.raw & raw_mask) != raw_mask) {}
    +    while ((RESETS.RESET_DONE.raw & raw_mask) != raw_mask) {}
     }
    diff --git a/src/hal/time.zig b/src/hal/time.zig
    index 2ed49aeb8..3b568bf5a 100644
    --- a/src/hal/time.zig
    +++ b/src/hal/time.zig
    @@ -1,16 +1,16 @@
     const microzig = @import("microzig");
    -const TIMER = microzig.chip.registers.TIMER;
    +const TIMER = microzig.chip.peripherals.TIMER;
     
     pub const Absolute = struct {
         us_since_boot: u64,
     };
     
    -pub fn getTimeSinceBoot() Absolute {
    -    var high_word = TIMER.TIMERAWH.*;
    +pub fn get_time_since_boot() Absolute {
    +    var high_word = TIMER.TIMERAWH;
     
         return while (true) {
    -        var low_word = TIMER.TIMERAWL.*;
    -        const next_high_word = TIMER.TIMERAWH.*;
    +        var low_word = TIMER.TIMERAWL;
    +        const next_high_word = TIMER.TIMERAWH;
             if (next_high_word == high_word)
                 break Absolute{
                     .us_since_boot = @intCast(u64, high_word) << 32 | low_word,
    @@ -20,24 +20,24 @@ pub fn getTimeSinceBoot() Absolute {
         } else unreachable;
     }
     
    -pub fn makeTimeoutUs(timeout_us: u64) Absolute {
    +pub fn make_timeout_us(timeout_us: u64) Absolute {
         return Absolute{
    -        .us_since_boot = getTimeSinceBoot().us_since_boot + timeout_us,
    +        .us_since_boot = get_time_since_boot().us_since_boot + timeout_us,
         };
     }
     
     pub fn reached(time: Absolute) bool {
    -    const now = getTimeSinceBoot();
    +    const now = get_time_since_boot();
         return now.us_since_boot >= time.us_since_boot;
     }
     
    -pub fn sleepMs(time_ms: u32) void {
    -    sleepUs(time_ms * 1000);
    +pub fn sleep_ms(time_ms: u32) void {
    +    sleep_us(time_ms * 1000);
     }
     
    -pub fn sleepUs(time_us: u64) void {
    +pub fn sleep_us(time_us: u64) void {
         const end_time = Absolute{
    -        .us_since_boot = time_us + getTimeSinceBoot().us_since_boot,
    +        .us_since_boot = time_us + get_time_since_boot().us_since_boot,
         };
     
         while (!reached(end_time)) {}
    diff --git a/src/hal/uart.zig b/src/hal/uart.zig
    index d1ca4193d..f4c72c5a6 100644
    --- a/src/hal/uart.zig
    +++ b/src/hal/uart.zig
    @@ -1,12 +1,17 @@
     const std = @import("std");
     const microzig = @import("microzig");
    +const peripherals = microzig.chip.peripherals;
    +const UART0 = peripherals.UART0;
    +const UART1 = peripherals.UART1;
    +
     const gpio = @import("gpio.zig");
     const clocks = @import("clocks.zig");
     const resets = @import("resets.zig");
     const time = @import("time.zig");
     
     const assert = std.debug.assert;
    -const regs = microzig.chip.registers;
    +
    +const UartRegs = microzig.chip.types.peripherals.UART0;
     
     pub const WordBits = enum {
         five,
    @@ -36,40 +41,6 @@ pub const Config = struct {
         parity: Parity = .none,
     };
     
    -pub const UartRegs = extern struct {
    -    dr: u32,
    -    rsr: u32,
    -    reserved0: [4]u32,
    -    fr: @typeInfo(@TypeOf(regs.UART0.UARTFR)).Pointer.child,
    -    reserved1: [1]u32,
    -    ilpr: u32,
    -    ibrd: u32,
    -    fbrd: u32,
    -    lcr_h: @typeInfo(@TypeOf(regs.UART0.UARTLCR_H)).Pointer.child,
    -    cr: @typeInfo(@TypeOf(regs.UART0.UARTCR)).Pointer.child,
    -    ifls: u32,
    -    imsc: u32,
    -    ris: u32,
    -    mis: u32,
    -    icr: u32,
    -    dmacr: @typeInfo(@TypeOf(regs.UART0.UARTDMACR)).Pointer.child,
    -    periphid0: u32,
    -    periphid1: u32,
    -    periphid2: u32,
    -    periphid3: u32,
    -    cellid0: u32,
    -    cellid1: u32,
    -    cellid2: u32,
    -    cellid3: u32,
    -
    -    padding: [4069]u32,
    -};
    -
    -const uarts = @intToPtr(*volatile [2]UartRegs, regs.UART0.base_address);
    -comptime {
    -    assert(@sizeOf(UartRegs) == (regs.UART1.base_address - regs.UART0.base_address));
    -}
    -
     pub const UART = enum {
         uart0,
         uart1,
    @@ -87,8 +58,11 @@ pub const UART = enum {
             return .{ .context = uart };
         }
     
    -    fn getRegs(uart: UART) *volatile UartRegs {
    -        return &uarts[@enumToInt(uart)];
    +    fn get_regs(uart: UART) *volatile UartRegs {
    +        return switch (uart) {
    +            .uart0 => UART0,
    +            .uart1 => UART1,
    +        };
         }
     
         pub fn init(comptime id: u32, comptime config: Config) UART {
    @@ -102,66 +76,69 @@ pub const UART = enum {
     
             uart.reset();
     
    -        const uart_regs = uart.getRegs();
    +        const uart_regs = uart.get_regs();
             const peri_freq = config.clock_config.peri.?.output_freq;
    -        uart.setBaudRate(config.baud_rate, peri_freq);
    -        uart.setFormat(config.word_bits, config.stop_bits, config.parity);
    +        uart.set_baudrate(config.baud_rate, peri_freq);
    +        uart.set_format(config.word_bits, config.stop_bits, config.parity);
     
    -        uart_regs.cr.modify(.{
    +        uart_regs.UARTCR.modify(.{
                 .UARTEN = 1,
                 .TXE = 1,
                 .RXE = 1,
             });
     
    -        uart_regs.lcr_h.modify(.{ .FEN = 1 });
    +        uart_regs.UARTLCR_H.modify(.{ .FEN = 1 });
     
             // - always enable DREQ signals -- no harm if dma isn't listening
    -        uart_regs.dmacr.modify(.{
    +        uart_regs.UARTDMACR.modify(.{
                 .TXDMAE = 1,
                 .RXDMAE = 1,
             });
     
             // TODO comptime assertions
    -        if (config.tx_pin) |tx_pin| gpio.setFunction(tx_pin, .uart);
    -        if (config.rx_pin) |rx_pin| gpio.setFunction(rx_pin, .uart);
    +        if (config.tx_pin) |tx_pin| gpio.set_function(tx_pin, .uart);
    +        if (config.rx_pin) |rx_pin| gpio.set_function(rx_pin, .uart);
     
             return uart;
         }
     
    -    pub fn isReadable(uart: UART) bool {
    -        return (0 == uart.getRegs().fr.read().RXFE);
    +    pub fn is_readable(uart: UART) bool {
    +        return (0 == uart.get_regs().UARTFR.read().RXFE);
         }
     
    -    pub fn isWritable(uart: UART) bool {
    -        return (0 == uart.getRegs().fr.read().TXFF);
    +    pub fn is_writeable(uart: UART) bool {
    +        return (0 == uart.get_regs().UARTFR.read().TXFF);
         }
     
         // TODO: implement tx fifo
         pub fn write(uart: UART, payload: []const u8) WriteError!usize {
    -        const uart_regs = uart.getRegs();
    +        const uart_regs = uart.get_regs();
             for (payload) |byte| {
    -            while (!uart.isWritable()) {}
    +            while (!uart.is_writeable()) {}
     
    -            uart_regs.dr = byte;
    +            uart_regs.UARTDR.raw = byte;
             }
     
             return payload.len;
         }
     
         pub fn read(uart: UART, buffer: []u8) ReadError!usize {
    -        const uart_regs = uart.getRegs();
    +        const uart_regs = uart.get_regs();
             for (buffer) |*byte| {
    -            while (!uart.isReadable()) {}
    -            byte.* = @truncate(u8, uart_regs.dr);
    +            while (!uart.is_readable()) {}
    +
    +            // TODO: error checking
    +            byte.* = uart_regs.UARTDR.read().DATA;
             }
             return buffer.len;
         }
     
    -    pub fn readWord(uart: UART) u8 {
    -        const uart_regs = uart.getRegs();
    -        while (!uart.isReadable()) {}
    +    pub fn read_word(uart: UART) u8 {
    +        const uart_regs = uart.get_regs();
    +        while (!uart.is_readable()) {}
     
    -        return @truncate(u8, uart_regs.dr);
    +        // TODO: error checking
    +        return uart_regs.UARTDR.read().DATA;
         }
     
         pub fn reset(uart: UART) void {
    @@ -171,14 +148,14 @@ pub const UART = enum {
             }
         }
     
    -    pub fn setFormat(
    +    pub fn set_format(
             uart: UART,
             word_bits: WordBits,
             stop_bits: StopBits,
             parity: Parity,
         ) void {
    -        const uart_regs = uart.getRegs();
    -        uart_regs.lcr_h.modify(.{
    +        const uart_regs = uart.get_regs();
    +        uart_regs.UARTLCR_H.modify(.{
                 .WLEN = switch (word_bits) {
                     .eight => @as(u2, 0b11),
                     .seven => @as(u2, 0b10),
    @@ -200,31 +177,31 @@ pub const UART = enum {
             });
         }
     
    -    fn setBaudRate(uart: UART, baud_rate: u32, peri_freq: u32) void {
    +    fn set_baudrate(uart: UART, baud_rate: u32, peri_freq: u32) void {
             assert(baud_rate > 0);
    -        const uart_regs = uart.getRegs();
    +        const uart_regs = uart.get_regs();
             const baud_rate_div = (8 * peri_freq / baud_rate);
    -        var baud_ibrd = baud_rate_div >> 7;
    +        var baud_ibrd = @intCast(u16, baud_rate_div >> 7);
     
    -        const baud_fbrd = if (baud_ibrd == 0) baud_fbrd: {
    +        const baud_fbrd: u6 = if (baud_ibrd == 0) baud_fbrd: {
                 baud_ibrd = 1;
                 break :baud_fbrd 0;
             } else if (baud_ibrd >= 65535) baud_fbrd: {
                 baud_ibrd = 65535;
                 break :baud_fbrd 0;
    -        } else ((baud_rate_div & 0x7f) + 1) / 2;
    +        } else @intCast(u6, ((@truncate(u7, baud_rate_div)) + 1) / 2);
     
    -        uart_regs.ibrd = baud_ibrd;
    -        uart_regs.fbrd = baud_fbrd;
    +        uart_regs.UARTIBRD.write(.{ .BAUD_DIVINT = baud_ibrd, .padding = 0 });
    +        uart_regs.UARTFBRD.write(.{ .BAUD_DIVFRAC = baud_fbrd, .padding = 0 });
     
             // just want a write, don't want to change these values
    -        uart_regs.lcr_h.modify(.{});
    +        uart_regs.UARTLCR_H.modify(.{});
         }
     };
     
     var uart_logger: ?UART.Writer = null;
     
    -pub fn initLogger(uart: UART) void {
    +pub fn init_logger(uart: UART) void {
         uart_logger = uart.writer();
         uart_logger.?.writeAll("\r\n================ STARTING NEW LOGGER ================\r\n") catch {};
     }
    @@ -242,7 +219,7 @@ pub fn log(
         };
     
         if (uart_logger) |uart| {
    -        const current_time = time.getTimeSinceBoot();
    +        const current_time = time.get_time_since_boot();
             const seconds = current_time.us_since_boot / std.time.us_per_s;
             const microseconds = current_time.us_since_boot % std.time.us_per_s;
     
    diff --git a/src/hal/util.zig b/src/hal/util.zig
    index 9d7863c17..4f0d71c6c 100644
    --- a/src/hal/util.zig
    +++ b/src/hal/util.zig
    @@ -1,18 +1,18 @@
    -pub fn xorAlias(ptr: anytype) @TypeOf(ptr) {
    +pub fn xor_alias(ptr: anytype) @TypeOf(ptr) {
         const xor_addr = @ptrToInt(ptr) | (1 << 12);
         return @ptrCast(@TypeOf(ptr), xor_addr);
     }
     
    -pub fn setAlias(ptr: anytype) @TypeOf(ptr) {
    +pub fn set_alias(ptr: anytype) @TypeOf(ptr) {
         const set_addr = @ptrToInt(ptr) | (2 << 12);
         return @ptrCast(@TypeOf(ptr), set_addr);
     }
     
    -pub fn clearAlias(ptr: anytype) @TypeOf(ptr) {
    +pub fn clear_alias(ptr: anytype) @TypeOf(ptr) {
         const clear_addr = @ptrToInt(ptr) | (3 << 12);
         return @ptrCast(@TypeOf(ptr), clear_addr);
     }
     
    -pub inline fn tightLoopContents() void {
    +pub inline fn tight_loop_contents() void {
         asm volatile ("" ::: "memory");
     }
    diff --git a/src/rp2040.zig b/src/rp2040.zig
    deleted file mode 100644
    index d3c2e1868..000000000
    --- a/src/rp2040.zig
    +++ /dev/null
    @@ -1,28794 +0,0 @@
    -// this file was generated by regz: https://github.com/ZigEmbeddedGroup/regz
    -// commit: 644b9d6f61ba1e49d90e4f606f82727f3d6581f2
    -//
    -// vendor: Raspberry Pi
    -// device: RP2040
    -// cpu: CM0PLUS
    -
    -pub const VectorTable = extern struct {
    -    initial_stack_pointer: u32,
    -    Reset: InterruptVector = unhandled,
    -    NMI: InterruptVector = unhandled,
    -    HardFault: InterruptVector = unhandled,
    -    reserved0: [7]u32 = undefined,
    -    SVCall: InterruptVector = unhandled,
    -    reserved1: [2]u32 = undefined,
    -    PendSV: InterruptVector = unhandled,
    -    SysTick: InterruptVector = unhandled,
    -    TIMER_IRQ_0: InterruptVector = unhandled,
    -    TIMER_IRQ_1: InterruptVector = unhandled,
    -    TIMER_IRQ_2: InterruptVector = unhandled,
    -    TIMER_IRQ_3: InterruptVector = unhandled,
    -    PWM_IRQ_WRAP: InterruptVector = unhandled,
    -    USBCTRL_IRQ: InterruptVector = unhandled,
    -    XIP_IRQ: InterruptVector = unhandled,
    -    PIO0_IRQ_0: InterruptVector = unhandled,
    -    PIO0_IRQ_1: InterruptVector = unhandled,
    -    PIO1_IRQ_0: InterruptVector = unhandled,
    -    PIO1_IRQ_1: InterruptVector = unhandled,
    -    DMA_IRQ_0: InterruptVector = unhandled,
    -    DMA_IRQ_1: InterruptVector = unhandled,
    -    IO_IRQ_BANK0: InterruptVector = unhandled,
    -    IO_IRQ_QSPI: InterruptVector = unhandled,
    -    SIO_IRQ_PROC0: InterruptVector = unhandled,
    -    SIO_IRQ_PROC1: InterruptVector = unhandled,
    -    CLOCKS_IRQ: InterruptVector = unhandled,
    -    SPI0_IRQ: InterruptVector = unhandled,
    -    SPI1_IRQ: InterruptVector = unhandled,
    -    UART0_IRQ: InterruptVector = unhandled,
    -    UART1_IRQ: InterruptVector = unhandled,
    -    ADC_IRQ_FIFO: InterruptVector = unhandled,
    -    I2C0_IRQ: InterruptVector = unhandled,
    -    I2C1_IRQ: InterruptVector = unhandled,
    -    RTC_IRQ: InterruptVector = unhandled,
    -};
    -
    -pub const registers = struct {
    -    /// System Control Space
    -    pub const SCS = struct {
    -        pub const base_address = 0xe000e000;
    -
    -        /// System Tick Timer
    -        pub const SysTick = struct {
    -            /// address: 0xe000e010
    -            /// SysTick Control and Status Register
    -            pub const CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -                ENABLE: u1,
    -                TICKINT: u1,
    -                CLKSOURCE: u1,
    -                reserved0: u1 = 0,
    -                reserved1: u1 = 0,
    -                reserved2: u1 = 0,
    -                reserved3: u1 = 0,
    -                reserved4: u1 = 0,
    -                reserved5: u1 = 0,
    -                reserved6: u1 = 0,
    -                reserved7: u1 = 0,
    -                reserved8: u1 = 0,
    -                reserved9: u1 = 0,
    -                reserved10: u1 = 0,
    -                reserved11: u1 = 0,
    -                reserved12: u1 = 0,
    -                COUNTFLAG: u1,
    -                padding0: u1 = 0,
    -                padding1: u1 = 0,
    -                padding2: u1 = 0,
    -                padding3: u1 = 0,
    -                padding4: u1 = 0,
    -                padding5: u1 = 0,
    -                padding6: u1 = 0,
    -                padding7: u1 = 0,
    -                padding8: u1 = 0,
    -                padding9: u1 = 0,
    -                padding10: u1 = 0,
    -                padding11: u1 = 0,
    -                padding12: u1 = 0,
    -                padding13: u1 = 0,
    -                padding14: u1 = 0,
    -            }), base_address + 0x10);
    -
    -            /// address: 0xe000e014
    -            /// SysTick Reload Value Register
    -            pub const LOAD = @intToPtr(*volatile Mmio(32, packed struct {
    -                RELOAD: u24,
    -                padding0: u1 = 0,
    -                padding1: u1 = 0,
    -                padding2: u1 = 0,
    -                padding3: u1 = 0,
    -                padding4: u1 = 0,
    -                padding5: u1 = 0,
    -                padding6: u1 = 0,
    -                padding7: u1 = 0,
    -            }), base_address + 0x14);
    -
    -            /// address: 0xe000e018
    -            /// SysTick Current Value Register
    -            pub const VAL = @intToPtr(*volatile Mmio(32, packed struct {
    -                CURRENT: u24,
    -                padding0: u1 = 0,
    -                padding1: u1 = 0,
    -                padding2: u1 = 0,
    -                padding3: u1 = 0,
    -                padding4: u1 = 0,
    -                padding5: u1 = 0,
    -                padding6: u1 = 0,
    -                padding7: u1 = 0,
    -            }), base_address + 0x18);
    -
    -            /// address: 0xe000e01c
    -            /// SysTick Calibration Register
    -            pub const CALIB = @intToPtr(*volatile Mmio(32, packed struct {
    -                TENMS: u24,
    -                reserved0: u1 = 0,
    -                reserved1: u1 = 0,
    -                reserved2: u1 = 0,
    -                reserved3: u1 = 0,
    -                reserved4: u1 = 0,
    -                reserved5: u1 = 0,
    -                SKEW: u1,
    -                NOREF: u1,
    -            }), base_address + 0x1c);
    -        };
    -
    -        /// Nested Vectored Interrupt Controller
    -        pub const NVIC = struct {
    -            /// address: 0xe000e100
    -            /// Interrupt Set Enable Register
    -            pub const ISER = @intToPtr(*volatile Mmio(32, packed struct {
    -                TIMER_IRQ_0: u1,
    -                TIMER_IRQ_1: u1,
    -                TIMER_IRQ_2: u1,
    -                TIMER_IRQ_3: u1,
    -                PWM_IRQ_WRAP: u1,
    -                USBCTRL_IRQ: u1,
    -                XIP_IRQ: u1,
    -                PIO0_IRQ_0: u1,
    -                PIO0_IRQ_1: u1,
    -                PIO1_IRQ_0: u1,
    -                PIO1_IRQ_1: u1,
    -                DMA_IRQ_0: u1,
    -                DMA_IRQ_1: u1,
    -                IO_IRQ_BANK0: u1,
    -                IO_IRQ_QSPI: u1,
    -                SIO_IRQ_PROC0: u1,
    -                SIO_IRQ_PROC1: u1,
    -                CLOCKS_IRQ: u1,
    -                SPI0_IRQ: u1,
    -                SPI1_IRQ: u1,
    -                UART0_IRQ: u1,
    -                UART1_IRQ: u1,
    -                ADC_IRQ_FIFO: u1,
    -                I2C0_IRQ: u1,
    -                I2C1_IRQ: u1,
    -                RTC_IRQ: u1,
    -                padding0: u1 = 0,
    -                padding1: u1 = 0,
    -                padding2: u1 = 0,
    -                padding3: u1 = 0,
    -                padding4: u1 = 0,
    -                padding5: u1 = 0,
    -            }), base_address + 0x100);
    -
    -            /// address: 0xe000e180
    -            /// Interrupt Clear Enable Register
    -            pub const ICER = @intToPtr(*volatile Mmio(32, packed struct {
    -                TIMER_IRQ_0: u1,
    -                TIMER_IRQ_1: u1,
    -                TIMER_IRQ_2: u1,
    -                TIMER_IRQ_3: u1,
    -                PWM_IRQ_WRAP: u1,
    -                USBCTRL_IRQ: u1,
    -                XIP_IRQ: u1,
    -                PIO0_IRQ_0: u1,
    -                PIO0_IRQ_1: u1,
    -                PIO1_IRQ_0: u1,
    -                PIO1_IRQ_1: u1,
    -                DMA_IRQ_0: u1,
    -                DMA_IRQ_1: u1,
    -                IO_IRQ_BANK0: u1,
    -                IO_IRQ_QSPI: u1,
    -                SIO_IRQ_PROC0: u1,
    -                SIO_IRQ_PROC1: u1,
    -                CLOCKS_IRQ: u1,
    -                SPI0_IRQ: u1,
    -                SPI1_IRQ: u1,
    -                UART0_IRQ: u1,
    -                UART1_IRQ: u1,
    -                ADC_IRQ_FIFO: u1,
    -                I2C0_IRQ: u1,
    -                I2C1_IRQ: u1,
    -                RTC_IRQ: u1,
    -                padding0: u1 = 0,
    -                padding1: u1 = 0,
    -                padding2: u1 = 0,
    -                padding3: u1 = 0,
    -                padding4: u1 = 0,
    -                padding5: u1 = 0,
    -            }), base_address + 0x180);
    -
    -            /// address: 0xe000e200
    -            /// Interrupt Set Pending Register
    -            pub const ISPR = @intToPtr(*volatile Mmio(32, packed struct {
    -                TIMER_IRQ_0: u1,
    -                TIMER_IRQ_1: u1,
    -                TIMER_IRQ_2: u1,
    -                TIMER_IRQ_3: u1,
    -                PWM_IRQ_WRAP: u1,
    -                USBCTRL_IRQ: u1,
    -                XIP_IRQ: u1,
    -                PIO0_IRQ_0: u1,
    -                PIO0_IRQ_1: u1,
    -                PIO1_IRQ_0: u1,
    -                PIO1_IRQ_1: u1,
    -                DMA_IRQ_0: u1,
    -                DMA_IRQ_1: u1,
    -                IO_IRQ_BANK0: u1,
    -                IO_IRQ_QSPI: u1,
    -                SIO_IRQ_PROC0: u1,
    -                SIO_IRQ_PROC1: u1,
    -                CLOCKS_IRQ: u1,
    -                SPI0_IRQ: u1,
    -                SPI1_IRQ: u1,
    -                UART0_IRQ: u1,
    -                UART1_IRQ: u1,
    -                ADC_IRQ_FIFO: u1,
    -                I2C0_IRQ: u1,
    -                I2C1_IRQ: u1,
    -                RTC_IRQ: u1,
    -                padding0: u1 = 0,
    -                padding1: u1 = 0,
    -                padding2: u1 = 0,
    -                padding3: u1 = 0,
    -                padding4: u1 = 0,
    -                padding5: u1 = 0,
    -            }), base_address + 0x200);
    -
    -            /// address: 0xe000e280
    -            /// Interrupt Clear Pending Register
    -            pub const ICPR = @intToPtr(*volatile Mmio(32, packed struct {
    -                TIMER_IRQ_0: u1,
    -                TIMER_IRQ_1: u1,
    -                TIMER_IRQ_2: u1,
    -                TIMER_IRQ_3: u1,
    -                PWM_IRQ_WRAP: u1,
    -                USBCTRL_IRQ: u1,
    -                XIP_IRQ: u1,
    -                PIO0_IRQ_0: u1,
    -                PIO0_IRQ_1: u1,
    -                PIO1_IRQ_0: u1,
    -                PIO1_IRQ_1: u1,
    -                DMA_IRQ_0: u1,
    -                DMA_IRQ_1: u1,
    -                IO_IRQ_BANK0: u1,
    -                IO_IRQ_QSPI: u1,
    -                SIO_IRQ_PROC0: u1,
    -                SIO_IRQ_PROC1: u1,
    -                CLOCKS_IRQ: u1,
    -                SPI0_IRQ: u1,
    -                SPI1_IRQ: u1,
    -                UART0_IRQ: u1,
    -                UART1_IRQ: u1,
    -                ADC_IRQ_FIFO: u1,
    -                I2C0_IRQ: u1,
    -                I2C1_IRQ: u1,
    -                RTC_IRQ: u1,
    -                padding0: u1 = 0,
    -                padding1: u1 = 0,
    -                padding2: u1 = 0,
    -                padding3: u1 = 0,
    -                padding4: u1 = 0,
    -                padding5: u1 = 0,
    -            }), base_address + 0x280);
    -
    -            /// address: 0xe000e400
    -            /// Interrupt Priority Register
    -            pub const IP0 = @intToPtr(*volatile Mmio(32, packed struct {
    -                reserved0: u1 = 0,
    -                reserved1: u1 = 0,
    -                reserved2: u1 = 0,
    -                reserved3: u1 = 0,
    -                reserved4: u1 = 0,
    -                reserved5: u1 = 0,
    -                TIMER_IRQ_0: u2,
    -                reserved6: u1 = 0,
    -                reserved7: u1 = 0,
    -                reserved8: u1 = 0,
    -                reserved9: u1 = 0,
    -                reserved10: u1 = 0,
    -                reserved11: u1 = 0,
    -                TIMER_IRQ_1: u2,
    -                reserved12: u1 = 0,
    -                reserved13: u1 = 0,
    -                reserved14: u1 = 0,
    -                reserved15: u1 = 0,
    -                reserved16: u1 = 0,
    -                reserved17: u1 = 0,
    -                TIMER_IRQ_2: u2,
    -                reserved18: u1 = 0,
    -                reserved19: u1 = 0,
    -                reserved20: u1 = 0,
    -                reserved21: u1 = 0,
    -                reserved22: u1 = 0,
    -                reserved23: u1 = 0,
    -                TIMER_IRQ_3: u2,
    -            }), base_address + 0x400);
    -
    -            /// address: 0xe000e404
    -            /// Interrupt Priority Register
    -            pub const IP1 = @intToPtr(*volatile Mmio(32, packed struct {
    -                reserved0: u1 = 0,
    -                reserved1: u1 = 0,
    -                reserved2: u1 = 0,
    -                reserved3: u1 = 0,
    -                reserved4: u1 = 0,
    -                reserved5: u1 = 0,
    -                PWM_IRQ_WRAP: u2,
    -                reserved6: u1 = 0,
    -                reserved7: u1 = 0,
    -                reserved8: u1 = 0,
    -                reserved9: u1 = 0,
    -                reserved10: u1 = 0,
    -                reserved11: u1 = 0,
    -                USBCTRL_IRQ: u2,
    -                reserved12: u1 = 0,
    -                reserved13: u1 = 0,
    -                reserved14: u1 = 0,
    -                reserved15: u1 = 0,
    -                reserved16: u1 = 0,
    -                reserved17: u1 = 0,
    -                XIP_IRQ: u2,
    -                reserved18: u1 = 0,
    -                reserved19: u1 = 0,
    -                reserved20: u1 = 0,
    -                reserved21: u1 = 0,
    -                reserved22: u1 = 0,
    -                reserved23: u1 = 0,
    -                PIO0_IRQ_0: u2,
    -            }), base_address + 0x404);
    -
    -            /// address: 0xe000e408
    -            /// Interrupt Priority Register
    -            pub const IP2 = @intToPtr(*volatile Mmio(32, packed struct {
    -                reserved0: u1 = 0,
    -                reserved1: u1 = 0,
    -                reserved2: u1 = 0,
    -                reserved3: u1 = 0,
    -                reserved4: u1 = 0,
    -                reserved5: u1 = 0,
    -                PIO0_IRQ_1: u2,
    -                reserved6: u1 = 0,
    -                reserved7: u1 = 0,
    -                reserved8: u1 = 0,
    -                reserved9: u1 = 0,
    -                reserved10: u1 = 0,
    -                reserved11: u1 = 0,
    -                PIO1_IRQ_0: u2,
    -                reserved12: u1 = 0,
    -                reserved13: u1 = 0,
    -                reserved14: u1 = 0,
    -                reserved15: u1 = 0,
    -                reserved16: u1 = 0,
    -                reserved17: u1 = 0,
    -                PIO1_IRQ_1: u2,
    -                reserved18: u1 = 0,
    -                reserved19: u1 = 0,
    -                reserved20: u1 = 0,
    -                reserved21: u1 = 0,
    -                reserved22: u1 = 0,
    -                reserved23: u1 = 0,
    -                DMA_IRQ_0: u2,
    -            }), base_address + 0x408);
    -
    -            /// address: 0xe000e40c
    -            /// Interrupt Priority Register
    -            pub const IP3 = @intToPtr(*volatile Mmio(32, packed struct {
    -                reserved0: u1 = 0,
    -                reserved1: u1 = 0,
    -                reserved2: u1 = 0,
    -                reserved3: u1 = 0,
    -                reserved4: u1 = 0,
    -                reserved5: u1 = 0,
    -                DMA_IRQ_1: u2,
    -                reserved6: u1 = 0,
    -                reserved7: u1 = 0,
    -                reserved8: u1 = 0,
    -                reserved9: u1 = 0,
    -                reserved10: u1 = 0,
    -                reserved11: u1 = 0,
    -                IO_IRQ_BANK0: u2,
    -                reserved12: u1 = 0,
    -                reserved13: u1 = 0,
    -                reserved14: u1 = 0,
    -                reserved15: u1 = 0,
    -                reserved16: u1 = 0,
    -                reserved17: u1 = 0,
    -                IO_IRQ_QSPI: u2,
    -                reserved18: u1 = 0,
    -                reserved19: u1 = 0,
    -                reserved20: u1 = 0,
    -                reserved21: u1 = 0,
    -                reserved22: u1 = 0,
    -                reserved23: u1 = 0,
    -                SIO_IRQ_PROC0: u2,
    -            }), base_address + 0x40c);
    -
    -            /// address: 0xe000e410
    -            /// Interrupt Priority Register
    -            pub const IP4 = @intToPtr(*volatile Mmio(32, packed struct {
    -                reserved0: u1 = 0,
    -                reserved1: u1 = 0,
    -                reserved2: u1 = 0,
    -                reserved3: u1 = 0,
    -                reserved4: u1 = 0,
    -                reserved5: u1 = 0,
    -                SIO_IRQ_PROC1: u2,
    -                reserved6: u1 = 0,
    -                reserved7: u1 = 0,
    -                reserved8: u1 = 0,
    -                reserved9: u1 = 0,
    -                reserved10: u1 = 0,
    -                reserved11: u1 = 0,
    -                CLOCKS_IRQ: u2,
    -                reserved12: u1 = 0,
    -                reserved13: u1 = 0,
    -                reserved14: u1 = 0,
    -                reserved15: u1 = 0,
    -                reserved16: u1 = 0,
    -                reserved17: u1 = 0,
    -                SPI0_IRQ: u2,
    -                reserved18: u1 = 0,
    -                reserved19: u1 = 0,
    -                reserved20: u1 = 0,
    -                reserved21: u1 = 0,
    -                reserved22: u1 = 0,
    -                reserved23: u1 = 0,
    -                SPI1_IRQ: u2,
    -            }), base_address + 0x410);
    -
    -            /// address: 0xe000e414
    -            /// Interrupt Priority Register
    -            pub const IP5 = @intToPtr(*volatile Mmio(32, packed struct {
    -                reserved0: u1 = 0,
    -                reserved1: u1 = 0,
    -                reserved2: u1 = 0,
    -                reserved3: u1 = 0,
    -                reserved4: u1 = 0,
    -                reserved5: u1 = 0,
    -                UART0_IRQ: u2,
    -                reserved6: u1 = 0,
    -                reserved7: u1 = 0,
    -                reserved8: u1 = 0,
    -                reserved9: u1 = 0,
    -                reserved10: u1 = 0,
    -                reserved11: u1 = 0,
    -                UART1_IRQ: u2,
    -                reserved12: u1 = 0,
    -                reserved13: u1 = 0,
    -                reserved14: u1 = 0,
    -                reserved15: u1 = 0,
    -                reserved16: u1 = 0,
    -                reserved17: u1 = 0,
    -                ADC_IRQ_FIFO: u2,
    -                reserved18: u1 = 0,
    -                reserved19: u1 = 0,
    -                reserved20: u1 = 0,
    -                reserved21: u1 = 0,
    -                reserved22: u1 = 0,
    -                reserved23: u1 = 0,
    -                I2C0_IRQ: u2,
    -            }), base_address + 0x414);
    -
    -            /// address: 0xe000e418
    -            /// Interrupt Priority Register
    -            pub const IP6 = @intToPtr(*volatile Mmio(32, packed struct {
    -                reserved0: u1 = 0,
    -                reserved1: u1 = 0,
    -                reserved2: u1 = 0,
    -                reserved3: u1 = 0,
    -                reserved4: u1 = 0,
    -                reserved5: u1 = 0,
    -                I2C1_IRQ: u2,
    -                reserved6: u1 = 0,
    -                reserved7: u1 = 0,
    -                reserved8: u1 = 0,
    -                reserved9: u1 = 0,
    -                reserved10: u1 = 0,
    -                reserved11: u1 = 0,
    -                RTC_IRQ: u2,
    -                padding0: u1 = 0,
    -                padding1: u1 = 0,
    -                padding2: u1 = 0,
    -                padding3: u1 = 0,
    -                padding4: u1 = 0,
    -                padding5: u1 = 0,
    -                padding6: u1 = 0,
    -                padding7: u1 = 0,
    -                padding8: u1 = 0,
    -                padding9: u1 = 0,
    -                padding10: u1 = 0,
    -                padding11: u1 = 0,
    -                padding12: u1 = 0,
    -                padding13: u1 = 0,
    -                padding14: u1 = 0,
    -                padding15: u1 = 0,
    -            }), base_address + 0x418);
    -
    -            /// address: 0xe000e41c
    -            /// Interrupt Priority Register
    -            pub const IP7 = @intToPtr(*volatile u32, base_address + 0x41c);
    -        };
    -
    -        /// System Control Block
    -        pub const SCB = struct {
    -            /// address: 0xe000ed00
    -            pub const CPUID = @intToPtr(*volatile Mmio(32, packed struct {
    -                REVISION: u4,
    -                PARTNO: u12,
    -                ARCHITECTURE: u4,
    -                VARIANT: u4,
    -                IMPLEMENTER: u8,
    -            }), base_address + 0xd00);
    -
    -            /// address: 0xe000ed04
    -            /// Interrupt Control and State Register
    -            pub const ICSR = @intToPtr(*volatile Mmio(32, packed struct {
    -                VECTACTIVE: u9,
    -                reserved0: u1 = 0,
    -                reserved1: u1 = 0,
    -                reserved2: u1 = 0,
    -                VECTPENDING: u9,
    -                reserved3: u1 = 0,
    -                ISRPENDING: u1,
    -                ISRPREEMPT: u1,
    -                reserved4: u1 = 0,
    -                PENDSTCLR: u1,
    -                PENDSTSET: u1,
    -                PENDSVCLR: u1,
    -                PENDSVSET: u1,
    -                reserved5: u1 = 0,
    -                reserved6: u1 = 0,
    -                NMIPENDSET: u1,
    -            }), base_address + 0xd04);
    -
    -            /// address: 0xe000ed0c
    -            /// Application Interrupt and Reset Control Register
    -            pub const AIRCR = @intToPtr(*volatile Mmio(32, packed struct {
    -                reserved0: u1 = 0,
    -                VECTCLRACTIVE: u1,
    -                SYSRESETREQ: u1,
    -                reserved1: u1 = 0,
    -                reserved2: u1 = 0,
    -                reserved3: u1 = 0,
    -                reserved4: u1 = 0,
    -                reserved5: u1 = 0,
    -                reserved6: u1 = 0,
    -                reserved7: u1 = 0,
    -                reserved8: u1 = 0,
    -                reserved9: u1 = 0,
    -                reserved10: u1 = 0,
    -                reserved11: u1 = 0,
    -                reserved12: u1 = 0,
    -                ENDIANESS: u1,
    -                VECTKEY: u16,
    -            }), base_address + 0xd0c);
    -
    -            /// address: 0xe000ed10
    -            /// System Control Register
    -            pub const SCR = @intToPtr(*volatile Mmio(32, packed struct {
    -                reserved0: u1 = 0,
    -                SLEEPONEXIT: u1,
    -                SLEEPDEEP: u1,
    -                reserved1: u1 = 0,
    -                SEVONPEND: u1,
    -                padding0: u1 = 0,
    -                padding1: u1 = 0,
    -                padding2: u1 = 0,
    -                padding3: u1 = 0,
    -                padding4: u1 = 0,
    -                padding5: u1 = 0,
    -                padding6: u1 = 0,
    -                padding7: u1 = 0,
    -                padding8: u1 = 0,
    -                padding9: u1 = 0,
    -                padding10: u1 = 0,
    -                padding11: u1 = 0,
    -                padding12: u1 = 0,
    -                padding13: u1 = 0,
    -                padding14: u1 = 0,
    -                padding15: u1 = 0,
    -                padding16: u1 = 0,
    -                padding17: u1 = 0,
    -                padding18: u1 = 0,
    -                padding19: u1 = 0,
    -                padding20: u1 = 0,
    -                padding21: u1 = 0,
    -                padding22: u1 = 0,
    -                padding23: u1 = 0,
    -                padding24: u1 = 0,
    -                padding25: u1 = 0,
    -                padding26: u1 = 0,
    -            }), base_address + 0xd10);
    -
    -            /// address: 0xe000ed14
    -            /// Configuration Control Register
    -            pub const CCR = @intToPtr(*volatile Mmio(32, packed struct {
    -                reserved0: u1 = 0,
    -                reserved1: u1 = 0,
    -                reserved2: u1 = 0,
    -                UNALIGN_TRP: u1,
    -                reserved3: u1 = 0,
    -                reserved4: u1 = 0,
    -                reserved5: u1 = 0,
    -                reserved6: u1 = 0,
    -                reserved7: u1 = 0,
    -                STKALIGN: u1,
    -                padding0: u1 = 0,
    -                padding1: u1 = 0,
    -                padding2: u1 = 0,
    -                padding3: u1 = 0,
    -                padding4: u1 = 0,
    -                padding5: u1 = 0,
    -                padding6: u1 = 0,
    -                padding7: u1 = 0,
    -                padding8: u1 = 0,
    -                padding9: u1 = 0,
    -                padding10: u1 = 0,
    -                padding11: u1 = 0,
    -                padding12: u1 = 0,
    -                padding13: u1 = 0,
    -                padding14: u1 = 0,
    -                padding15: u1 = 0,
    -                padding16: u1 = 0,
    -                padding17: u1 = 0,
    -                padding18: u1 = 0,
    -                padding19: u1 = 0,
    -                padding20: u1 = 0,
    -                padding21: u1 = 0,
    -            }), base_address + 0xd14);
    -
    -            /// address: 0xe000ed1c
    -            /// System Handlers Priority Registers. [0] is RESERVED
    -            pub const SHP = @intToPtr(*volatile u32, base_address + 0xd1c);
    -
    -            /// address: 0xe000ed24
    -            /// System Handler Control and State Register
    -            pub const SHCSR = @intToPtr(*volatile Mmio(32, packed struct {
    -                reserved0: u1 = 0,
    -                reserved1: u1 = 0,
    -                reserved2: u1 = 0,
    -                reserved3: u1 = 0,
    -                reserved4: u1 = 0,
    -                reserved5: u1 = 0,
    -                reserved6: u1 = 0,
    -                reserved7: u1 = 0,
    -                reserved8: u1 = 0,
    -                reserved9: u1 = 0,
    -                reserved10: u1 = 0,
    -                reserved11: u1 = 0,
    -                reserved12: u1 = 0,
    -                reserved13: u1 = 0,
    -                reserved14: u1 = 0,
    -                SVCALLPENDED: u1,
    -                padding0: u1 = 0,
    -                padding1: u1 = 0,
    -                padding2: u1 = 0,
    -                padding3: u1 = 0,
    -                padding4: u1 = 0,
    -                padding5: u1 = 0,
    -                padding6: u1 = 0,
    -                padding7: u1 = 0,
    -                padding8: u1 = 0,
    -                padding9: u1 = 0,
    -                padding10: u1 = 0,
    -                padding11: u1 = 0,
    -                padding12: u1 = 0,
    -                padding13: u1 = 0,
    -                padding14: u1 = 0,
    -                padding15: u1 = 0,
    -            }), base_address + 0xd24);
    -
    -            /// address: 0xe000ed08
    -            /// Vector Table Offset Register
    -            pub const VTOR = @intToPtr(*volatile Mmio(32, packed struct {
    -                reserved0: u1 = 0,
    -                reserved1: u1 = 0,
    -                reserved2: u1 = 0,
    -                reserved3: u1 = 0,
    -                reserved4: u1 = 0,
    -                reserved5: u1 = 0,
    -                reserved6: u1 = 0,
    -                reserved7: u1 = 0,
    -                TBLOFF: u24,
    -            }), base_address + 0xd08);
    -        };
    -
    -        /// Memory Protection Unit
    -        pub const MPU = struct {
    -            /// address: 0xe000ed90
    -            /// MPU Type Register
    -            pub const TYPE = @intToPtr(*volatile Mmio(32, packed struct {
    -                SEPARATE: u1,
    -                reserved0: u1 = 0,
    -                reserved1: u1 = 0,
    -                reserved2: u1 = 0,
    -                reserved3: u1 = 0,
    -                reserved4: u1 = 0,
    -                reserved5: u1 = 0,
    -                reserved6: u1 = 0,
    -                DREGION: u8,
    -                IREGION: u8,
    -                padding0: u1 = 0,
    -                padding1: u1 = 0,
    -                padding2: u1 = 0,
    -                padding3: u1 = 0,
    -                padding4: u1 = 0,
    -                padding5: u1 = 0,
    -                padding6: u1 = 0,
    -                padding7: u1 = 0,
    -            }), base_address + 0xd90);
    -
    -            /// address: 0xe000ed94
    -            /// MPU Control Register
    -            pub const CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -                ENABLE: u1,
    -                HFNMIENA: u1,
    -                PRIVDEFENA: u1,
    -                padding0: u1 = 0,
    -                padding1: u1 = 0,
    -                padding2: u1 = 0,
    -                padding3: u1 = 0,
    -                padding4: u1 = 0,
    -                padding5: u1 = 0,
    -                padding6: u1 = 0,
    -                padding7: u1 = 0,
    -                padding8: u1 = 0,
    -                padding9: u1 = 0,
    -                padding10: u1 = 0,
    -                padding11: u1 = 0,
    -                padding12: u1 = 0,
    -                padding13: u1 = 0,
    -                padding14: u1 = 0,
    -                padding15: u1 = 0,
    -                padding16: u1 = 0,
    -                padding17: u1 = 0,
    -                padding18: u1 = 0,
    -                padding19: u1 = 0,
    -                padding20: u1 = 0,
    -                padding21: u1 = 0,
    -                padding22: u1 = 0,
    -                padding23: u1 = 0,
    -                padding24: u1 = 0,
    -                padding25: u1 = 0,
    -                padding26: u1 = 0,
    -                padding27: u1 = 0,
    -                padding28: u1 = 0,
    -            }), base_address + 0xd94);
    -
    -            /// address: 0xe000ed98
    -            /// MPU Region RNRber Register
    -            pub const RNR = @intToPtr(*volatile Mmio(32, packed struct {
    -                REGION: u8,
    -                padding0: u1 = 0,
    -                padding1: u1 = 0,
    -                padding2: u1 = 0,
    -                padding3: u1 = 0,
    -                padding4: u1 = 0,
    -                padding5: u1 = 0,
    -                padding6: u1 = 0,
    -                padding7: u1 = 0,
    -                padding8: u1 = 0,
    -                padding9: u1 = 0,
    -                padding10: u1 = 0,
    -                padding11: u1 = 0,
    -                padding12: u1 = 0,
    -                padding13: u1 = 0,
    -                padding14: u1 = 0,
    -                padding15: u1 = 0,
    -                padding16: u1 = 0,
    -                padding17: u1 = 0,
    -                padding18: u1 = 0,
    -                padding19: u1 = 0,
    -                padding20: u1 = 0,
    -                padding21: u1 = 0,
    -                padding22: u1 = 0,
    -                padding23: u1 = 0,
    -            }), base_address + 0xd98);
    -
    -            /// address: 0xe000ed9c
    -            /// MPU Region Base Address Register
    -            pub const RBAR = @intToPtr(*volatile Mmio(32, packed struct {
    -                REGION: u4,
    -                VALID: u1,
    -                reserved0: u1 = 0,
    -                reserved1: u1 = 0,
    -                reserved2: u1 = 0,
    -                ADDR: u24,
    -            }), base_address + 0xd9c);
    -
    -            /// address: 0xe000eda0
    -            /// MPU Region Attribute and Size Register
    -            pub const RASR = @intToPtr(*volatile Mmio(32, packed struct {
    -                ENABLE: u1,
    -                SIZE: u5,
    -                reserved0: u1 = 0,
    -                reserved1: u1 = 0,
    -                SRD: u8,
    -                B: u1,
    -                C: u1,
    -                S: u1,
    -                TEX: u3,
    -                reserved2: u1 = 0,
    -                reserved3: u1 = 0,
    -                AP: u3,
    -                reserved4: u1 = 0,
    -                XN: u1,
    -                padding0: u1 = 0,
    -                padding1: u1 = 0,
    -                padding2: u1 = 0,
    -            }), base_address + 0xda0);
    -        };
    -    };
    -
    -    /// QSPI flash execute-in-place block
    -    pub const XIP_CTRL = struct {
    -        pub const base_address = 0x14000000;
    -        pub const version = "1";
    -
    -        /// address: 0x14000000
    -        /// Cache control
    -        pub const CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// When 1, enable the cache. When the cache is disabled, all XIP accesses\n
    -            /// will go straight to the flash, without querying the cache. When enabled,\n
    -            /// cacheable XIP accesses will query the cache, and the flash will\n
    -            /// not be accessed if the tag matches and the valid bit is set.\n\n
    -            /// If the cache is enabled, cache-as-SRAM accesses have no effect on the\n
    -            /// cache data RAM, and will produce a bus error response.
    -            EN: u1,
    -            /// When 1, writes to any alias other than 0x0 (caching, allocating)\n
    -            /// will produce a bus fault. When 0, these writes are silently ignored.\n
    -            /// In either case, writes to the 0x0 alias will deallocate on tag match,\n
    -            /// as usual.
    -            ERR_BADWRITE: u1,
    -            reserved0: u1 = 0,
    -            /// When 1, the cache memories are powered down. They retain state,\n
    -            /// but can not be accessed. This reduces static power dissipation.\n
    -            /// Writing 1 to this bit forces CTRL_EN to 0, i.e. the cache cannot\n
    -            /// be enabled when powered down.\n
    -            /// Cache-as-SRAM accesses will produce a bus error response when\n
    -            /// the cache is powered down.
    -            POWER_DOWN: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x14000004
    -        /// Cache Flush control
    -        pub const FLUSH = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x4);
    -
    -        /// address: 0x14000008
    -        /// Cache Status
    -        pub const STAT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Reads as 0 while a cache flush is in progress, and 1 otherwise.\n
    -            /// The cache is flushed whenever the XIP block is reset, and also\n
    -            /// when requested via the FLUSH register.
    -            FLUSH_READY: u1,
    -            /// When 1, indicates the XIP streaming FIFO is completely empty.
    -            FIFO_EMPTY: u1,
    -            /// When 1, indicates the XIP streaming FIFO is completely full.\n
    -            /// The streaming FIFO is 2 entries deep, so the full and empty\n
    -            /// flag allow its level to be ascertained.
    -            FIFO_FULL: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x1400000c
    -        /// Cache Hit counter\n
    -        /// A 32 bit saturating counter that increments upon each cache hit,\n
    -        /// i.e. when an XIP access is serviced directly from cached data.\n
    -        /// Write any value to clear.
    -        pub const CTR_HIT = @intToPtr(*volatile u32, base_address + 0xc);
    -
    -        /// address: 0x14000010
    -        /// Cache Access counter\n
    -        /// A 32 bit saturating counter that increments upon each XIP access,\n
    -        /// whether the cache is hit or not. This includes noncacheable accesses.\n
    -        /// Write any value to clear.
    -        pub const CTR_ACC = @intToPtr(*volatile u32, base_address + 0x10);
    -
    -        /// address: 0x14000014
    -        /// FIFO stream address
    -        pub const STREAM_ADDR = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x14);
    -
    -        /// address: 0x14000018
    -        /// FIFO stream control
    -        pub const STREAM_CTR = @intToPtr(*volatile MmioInt(32, u22), base_address + 0x18);
    -
    -        /// address: 0x1400001c
    -        /// FIFO stream data\n
    -        /// Streamed data is buffered here, for retrieval by the system DMA.\n
    -        /// This FIFO can also be accessed via the XIP_AUX slave, to avoid exposing\n
    -        /// the DMA to bus stalls caused by other XIP traffic.
    -        pub const STREAM_FIFO = @intToPtr(*volatile u32, base_address + 0x1c);
    -    };
    -
    -    /// DW_apb_ssi has the following features:\n
    -    /// * APB interface – Allows for easy integration into a DesignWare Synthesizable
    -    /// Components for AMBA 2 implementation.\n
    -    /// * APB3 and APB4 protocol support.\n
    -    /// * Scalable APB data bus width – Supports APB data bus widths of 8, 16, and 32
    -    /// bits.\n
    -    /// * Serial-master or serial-slave operation – Enables serial communication with
    -    /// serial-master or serial-slave peripheral devices.\n
    -    /// * Programmable Dual/Quad/Octal SPI support in Master Mode.\n
    -    /// * Dual Data Rate (DDR) and Read Data Strobe (RDS) Support - Enables the
    -    /// DW_apb_ssi master to perform operations with the device in DDR and RDS modes
    -    /// when working in Dual/Quad/Octal mode of operation.\n
    -    /// * Data Mask Support - Enables the DW_apb_ssi to selectively update the bytes in
    -    /// the device. This feature is applicable only in enhanced SPI modes.\n
    -    /// * eXecute-In-Place (XIP) support - Enables the DW_apb_ssi master to behave as a
    -    /// memory mapped I/O and fetches the data from the device based on the APB read
    -    /// request. This feature is applicable only in enhanced SPI modes.\n
    -    /// * DMA Controller Interface – Enables the DW_apb_ssi to interface to a DMA
    -    /// controller over the bus using a handshaking interface for transfer requests.\n
    -    /// * Independent masking of interrupts – Master collision, transmit FIFO
    -    /// overflow, transmit FIFO empty, receive FIFO full, receive FIFO underflow, and
    -    /// receive FIFO overflow interrupts can all be masked independently.\n
    -    /// * Multi-master contention detection – Informs the processor of multiple
    -    /// serial-master accesses on the serial bus.\n
    -    /// * Bypass of meta-stability flip-flops for synchronous clocks – When the APB
    -    /// clock (pclk) and the DW_apb_ssi serial clock (ssi_clk) are synchronous,
    -    /// meta-stable flip-flops are not used when transferring control signals across
    -    /// these clock domains.\n
    -    /// * Programmable delay on the sample time of the received serial data bit (rxd);
    -    /// enables programmable control of routing delays resulting in higher serial
    -    /// data-bit rates.\n
    -    /// * Programmable features:\n
    -    /// - Serial interface operation – Choice of Motorola SPI, Texas Instruments
    -    /// Synchronous Serial Protocol or National Semiconductor Microwire.\n
    -    /// - Clock bit-rate – Dynamic control of the serial bit rate of the data
    -    /// transfer; used in only serial-master mode of operation.\n
    -    /// - Data Item size (4 to 32 bits) – Item size of each data transfer under the
    -    /// control of the programmer.\n
    -    /// * Configured features:\n
    -    /// - FIFO depth – 16 words deep. The FIFO width is fixed at 32 bits.\n
    -    /// - 1 slave select output.\n
    -    /// - Hardware slave-select – Dedicated hardware slave-select line.\n
    -    /// - Combined interrupt line - one combined interrupt line from the DW_apb_ssi to
    -    /// the interrupt controller.\n
    -    /// - Interrupt polarity – active high interrupt lines.\n
    -    /// - Serial clock polarity – low serial-clock polarity directly after reset.\n
    -    /// - Serial clock phase – capture on first edge of serial-clock directly after
    -    /// reset.
    -    pub const XIP_SSI = struct {
    -        pub const base_address = 0x18000000;
    -        pub const version = "1";
    -
    -        /// address: 0x18000000
    -        /// Control register 0
    -        pub const CTRLR0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Data frame size
    -            DFS: u4,
    -            /// Frame format
    -            FRF: u2,
    -            /// Serial clock phase
    -            SCPH: u1,
    -            /// Serial clock polarity
    -            SCPOL: u1,
    -            /// Transfer mode
    -            TMOD: u2,
    -            /// Slave output enable
    -            SLV_OE: u1,
    -            /// Shift register loop (test mode)
    -            SRL: u1,
    -            /// Control frame size\n
    -            /// Value of n -> n+1 clocks per frame.
    -            CFS: u4,
    -            /// Data frame size in 32b transfer mode\n
    -            /// Value of n -> n+1 clocks per frame.
    -            DFS_32: u5,
    -            /// SPI frame format
    -            SPI_FRF: u2,
    -            reserved0: u1 = 0,
    -            /// Slave select toggle enable
    -            SSTE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x18000004
    -        /// Master Control register 1
    -        pub const CTRLR1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Number of data frames
    -            NDF: u16,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x18000008
    -        /// SSI Enable
    -        pub const SSIENR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// SSI enable
    -            SSI_EN: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x1800000c
    -        /// Microwire Control
    -        pub const MWCR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Microwire transfer mode
    -            MWMOD: u1,
    -            /// Microwire control
    -            MDD: u1,
    -            /// Microwire handshaking
    -            MHS: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x18000010
    -        /// Slave enable
    -        pub const SER = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x10);
    -
    -        /// address: 0x18000014
    -        /// Baud rate
    -        pub const BAUDR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// SSI clock divider
    -            SCKDV: u16,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x18000018
    -        /// TX FIFO threshold level
    -        pub const TXFTLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Transmit FIFO threshold
    -            TFT: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x1800001c
    -        /// RX FIFO threshold level
    -        pub const RXFTLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Receive FIFO threshold
    -            RFT: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x18000020
    -        /// TX FIFO level
    -        pub const TXFLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Transmit FIFO level
    -            TFTFL: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x18000024
    -        /// RX FIFO level
    -        pub const RXFLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Receive FIFO level
    -            RXTFL: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x18000028
    -        /// Status register
    -        pub const SR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// SSI busy flag
    -            BUSY: u1,
    -            /// Transmit FIFO not full
    -            TFNF: u1,
    -            /// Transmit FIFO empty
    -            TFE: u1,
    -            /// Receive FIFO not empty
    -            RFNE: u1,
    -            /// Receive FIFO full
    -            RFF: u1,
    -            /// Transmission error
    -            TXE: u1,
    -            /// Data collision error
    -            DCOL: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x1800002c
    -        /// Interrupt mask
    -        pub const IMR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Transmit FIFO empty interrupt mask
    -            TXEIM: u1,
    -            /// Transmit FIFO overflow interrupt mask
    -            TXOIM: u1,
    -            /// Receive FIFO underflow interrupt mask
    -            RXUIM: u1,
    -            /// Receive FIFO overflow interrupt mask
    -            RXOIM: u1,
    -            /// Receive FIFO full interrupt mask
    -            RXFIM: u1,
    -            /// Multi-master contention interrupt mask
    -            MSTIM: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x18000030
    -        /// Interrupt status
    -        pub const ISR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Transmit FIFO empty interrupt status
    -            TXEIS: u1,
    -            /// Transmit FIFO overflow interrupt status
    -            TXOIS: u1,
    -            /// Receive FIFO underflow interrupt status
    -            RXUIS: u1,
    -            /// Receive FIFO overflow interrupt status
    -            RXOIS: u1,
    -            /// Receive FIFO full interrupt status
    -            RXFIS: u1,
    -            /// Multi-master contention interrupt status
    -            MSTIS: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x18000034
    -        /// Raw interrupt status
    -        pub const RISR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Transmit FIFO empty raw interrupt status
    -            TXEIR: u1,
    -            /// Transmit FIFO overflow raw interrupt status
    -            TXOIR: u1,
    -            /// Receive FIFO underflow raw interrupt status
    -            RXUIR: u1,
    -            /// Receive FIFO overflow raw interrupt status
    -            RXOIR: u1,
    -            /// Receive FIFO full raw interrupt status
    -            RXFIR: u1,
    -            /// Multi-master contention raw interrupt status
    -            MSTIR: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x18000038
    -        /// TX FIFO overflow interrupt clear
    -        pub const TXOICR = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x38);
    -
    -        /// address: 0x1800003c
    -        /// RX FIFO overflow interrupt clear
    -        pub const RXOICR = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x3c);
    -
    -        /// address: 0x18000040
    -        /// RX FIFO underflow interrupt clear
    -        pub const RXUICR = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x40);
    -
    -        /// address: 0x18000044
    -        /// Multi-master interrupt clear
    -        pub const MSTICR = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x44);
    -
    -        /// address: 0x18000048
    -        /// Interrupt clear
    -        pub const ICR = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x48);
    -
    -        /// address: 0x1800004c
    -        /// DMA control
    -        pub const DMACR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Receive DMA enable
    -            RDMAE: u1,
    -            /// Transmit DMA enable
    -            TDMAE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -        }), base_address + 0x4c);
    -
    -        /// address: 0x18000050
    -        /// DMA TX data level
    -        pub const DMATDLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Transmit data watermark level
    -            DMATDL: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x18000054
    -        /// DMA RX data level
    -        pub const DMARDLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Receive data watermark level (DMARDLR+1)
    -            DMARDL: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x18000058
    -        /// Identification register
    -        pub const IDR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Peripheral dentification code
    -            IDCODE: u32,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x1800005c
    -        /// Version ID
    -        pub const SSI_VERSION_ID = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// SNPS component version (format X.YY)
    -            SSI_COMP_VERSION: u32,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x18000060
    -        /// Data Register 0 (of 36)
    -        pub const DR0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// First data register of 36
    -            DR: u32,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x180000f0
    -        /// RX sample delay
    -        pub const RX_SAMPLE_DLY = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// RXD sample delay (in SCLK cycles)
    -            RSD: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0xf0);
    -
    -        /// address: 0x180000f4
    -        /// SPI control
    -        pub const SPI_CTRLR0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Address and instruction transfer format
    -            TRANS_TYPE: u2,
    -            /// Address length (0b-60b in 4b increments)
    -            ADDR_L: u4,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            /// Instruction length (0/4/8/16b)
    -            INST_L: u2,
    -            reserved2: u1 = 0,
    -            /// Wait cycles between control frame transmit and data reception (in SCLK cycles)
    -            WAIT_CYCLES: u5,
    -            /// SPI DDR transfer enable
    -            SPI_DDR_EN: u1,
    -            /// Instruction DDR transfer enable
    -            INST_DDR_EN: u1,
    -            /// Read data strobe enable
    -            SPI_RXDS_EN: u1,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// SPI Command to send in XIP mode (INST_L = 8-bit) or to append to Address (INST_L
    -            /// = 0-bit)
    -            XIP_CMD: u8,
    -        }), base_address + 0xf4);
    -
    -        /// address: 0x180000f8
    -        /// TX drive edge
    -        pub const TXD_DRIVE_EDGE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// TXD drive edge
    -            TDE: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0xf8);
    -    };
    -    pub const SYSINFO = struct {
    -        pub const base_address = 0x40000000;
    -        pub const version = "1";
    -
    -        /// address: 0x40000000
    -        /// JEDEC JEP-106 compliant chip identifier.
    -        pub const CHIP_ID = @intToPtr(*volatile Mmio(32, packed struct {
    -            MANUFACTURER: u12,
    -            PART: u16,
    -            REVISION: u4,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x40000004
    -        /// Platform register. Allows software to know what environment it is running in.
    -        pub const PLATFORM = @intToPtr(*volatile Mmio(32, packed struct {
    -            FPGA: u1,
    -            ASIC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x40000040
    -        /// Git hash of the chip source. Used to identify chip version.
    -        pub const GITREF_RP2040 = @intToPtr(*volatile u32, base_address + 0x40);
    -    };
    -
    -    /// Register block for various chip control signals
    -    pub const SYSCFG = struct {
    -        pub const base_address = 0x40004000;
    -        pub const version = "1";
    -
    -        /// address: 0x40004000
    -        /// Processor core 0 NMI source mask\n
    -        /// Set a bit high to enable NMI from that IRQ
    -        pub const PROC0_NMI_MASK = @intToPtr(*volatile u32, base_address + 0x0);
    -
    -        /// address: 0x40004004
    -        /// Processor core 1 NMI source mask\n
    -        /// Set a bit high to enable NMI from that IRQ
    -        pub const PROC1_NMI_MASK = @intToPtr(*volatile u32, base_address + 0x4);
    -
    -        /// address: 0x40004008
    -        /// Configuration for processors
    -        pub const PROC_CONFIG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Indication that proc0 has halted
    -            PROC0_HALTED: u1,
    -            /// Indication that proc1 has halted
    -            PROC1_HALTED: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            reserved18: u1 = 0,
    -            reserved19: u1 = 0,
    -            reserved20: u1 = 0,
    -            reserved21: u1 = 0,
    -            /// Configure proc0 DAP instance ID.\n
    -            /// Recommend that this is NOT changed until you require debug access in multi-chip
    -            /// environment\n
    -            /// WARNING: do not set to 15 as this is reserved for RescueDP
    -            PROC0_DAP_INSTID: u4,
    -            /// Configure proc1 DAP instance ID.\n
    -            /// Recommend that this is NOT changed until you require debug access in multi-chip
    -            /// environment\n
    -            /// WARNING: do not set to 15 as this is reserved for RescueDP
    -            PROC1_DAP_INSTID: u4,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x4000400c
    -        /// For each bit, if 1, bypass the input synchronizer between that GPIO\n
    -        /// and the GPIO input register in the SIO. The input synchronizers should\n
    -        /// generally be unbypassed, to avoid injecting metastabilities into processors.\n
    -        /// If you're feeling brave, you can bypass to save two cycles of input\n
    -        /// latency. This register applies to GPIO 0...29.
    -        pub const PROC_IN_SYNC_BYPASS = @intToPtr(*volatile MmioInt(32, u30), base_address + 0xc);
    -
    -        /// address: 0x40004010
    -        /// For each bit, if 1, bypass the input synchronizer between that GPIO\n
    -        /// and the GPIO input register in the SIO. The input synchronizers should\n
    -        /// generally be unbypassed, to avoid injecting metastabilities into processors.\n
    -        /// If you're feeling brave, you can bypass to save two cycles of input\n
    -        /// latency. This register applies to GPIO 30...35 (the QSPI IOs).
    -        pub const PROC_IN_SYNC_BYPASS_HI = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x10);
    -
    -        /// address: 0x40004014
    -        /// Directly control the SWD debug port of either processor
    -        pub const DBGFORCE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Observe the value of processor 0 SWDIO output.
    -            PROC0_SWDO: u1,
    -            /// Directly drive processor 0 SWDIO input, if PROC0_ATTACH is set
    -            PROC0_SWDI: u1,
    -            /// Directly drive processor 0 SWCLK, if PROC0_ATTACH is set
    -            PROC0_SWCLK: u1,
    -            /// Attach processor 0 debug port to syscfg controls, and disconnect it from
    -            /// external SWD pads.
    -            PROC0_ATTACH: u1,
    -            /// Observe the value of processor 1 SWDIO output.
    -            PROC1_SWDO: u1,
    -            /// Directly drive processor 1 SWDIO input, if PROC1_ATTACH is set
    -            PROC1_SWDI: u1,
    -            /// Directly drive processor 1 SWCLK, if PROC1_ATTACH is set
    -            PROC1_SWCLK: u1,
    -            /// Attach processor 1 debug port to syscfg controls, and disconnect it from
    -            /// external SWD pads.
    -            PROC1_ATTACH: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x40004018
    -        /// Control power downs to memories. Set high to power down memories.\n
    -        /// Use with extreme caution
    -        pub const MEMPOWERDOWN = @intToPtr(*volatile Mmio(32, packed struct {
    -            SRAM0: u1,
    -            SRAM1: u1,
    -            SRAM2: u1,
    -            SRAM3: u1,
    -            SRAM4: u1,
    -            SRAM5: u1,
    -            USB: u1,
    -            ROM: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x18);
    -    };
    -    pub const CLOCKS = struct {
    -        pub const base_address = 0x40008000;
    -        pub const version = "1";
    -
    -        /// address: 0x40008000
    -        /// Clock control, can be changed on-the-fly (except for auxsrc)
    -        pub const CLK_GPOUT0_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            /// Selects the auxiliary clock source, will glitch when switching
    -            AUXSRC: u4,
    -            reserved5: u1 = 0,
    -            /// Asynchronously kills the clock generator
    -            KILL: u1,
    -            /// Starts and stops the clock generator cleanly
    -            ENABLE: u1,
    -            /// Enables duty cycle correction for odd divisors
    -            DC50: u1,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            /// This delays the enable signal by up to 3 cycles of the input clock\n
    -            /// This must be set before the clock is enabled to have any effect
    -            PHASE: u2,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            /// An edge on this signal shifts the phase of the output by 1 cycle of the input
    -            /// clock\n
    -            /// This can be done at any time
    -            NUDGE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x40008004
    -        /// Clock divisor, can be changed on-the-fly
    -        pub const CLK_GPOUT0_DIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Fractional component of the divisor
    -            FRAC: u8,
    -            /// Integer component of the divisor, 0 -> divide by 2^16
    -            INT: u24,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x40008008
    -        /// Indicates which SRC is currently selected by the glitchless mux (one-hot).\n
    -        /// This slice does not have a glitchless mux (only the AUX_SRC field is present,
    -        /// not SRC) so this register is hardwired to 0x1.
    -        pub const CLK_GPOUT0_SELECTED = @intToPtr(*volatile u32, base_address + 0x8);
    -
    -        /// address: 0x4000800c
    -        /// Clock control, can be changed on-the-fly (except for auxsrc)
    -        pub const CLK_GPOUT1_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            /// Selects the auxiliary clock source, will glitch when switching
    -            AUXSRC: u4,
    -            reserved5: u1 = 0,
    -            /// Asynchronously kills the clock generator
    -            KILL: u1,
    -            /// Starts and stops the clock generator cleanly
    -            ENABLE: u1,
    -            /// Enables duty cycle correction for odd divisors
    -            DC50: u1,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            /// This delays the enable signal by up to 3 cycles of the input clock\n
    -            /// This must be set before the clock is enabled to have any effect
    -            PHASE: u2,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            /// An edge on this signal shifts the phase of the output by 1 cycle of the input
    -            /// clock\n
    -            /// This can be done at any time
    -            NUDGE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x40008010
    -        /// Clock divisor, can be changed on-the-fly
    -        pub const CLK_GPOUT1_DIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Fractional component of the divisor
    -            FRAC: u8,
    -            /// Integer component of the divisor, 0 -> divide by 2^16
    -            INT: u24,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x40008014
    -        /// Indicates which SRC is currently selected by the glitchless mux (one-hot).\n
    -        /// This slice does not have a glitchless mux (only the AUX_SRC field is present,
    -        /// not SRC) so this register is hardwired to 0x1.
    -        pub const CLK_GPOUT1_SELECTED = @intToPtr(*volatile u32, base_address + 0x14);
    -
    -        /// address: 0x40008018
    -        /// Clock control, can be changed on-the-fly (except for auxsrc)
    -        pub const CLK_GPOUT2_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            /// Selects the auxiliary clock source, will glitch when switching
    -            AUXSRC: u4,
    -            reserved5: u1 = 0,
    -            /// Asynchronously kills the clock generator
    -            KILL: u1,
    -            /// Starts and stops the clock generator cleanly
    -            ENABLE: u1,
    -            /// Enables duty cycle correction for odd divisors
    -            DC50: u1,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            /// This delays the enable signal by up to 3 cycles of the input clock\n
    -            /// This must be set before the clock is enabled to have any effect
    -            PHASE: u2,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            /// An edge on this signal shifts the phase of the output by 1 cycle of the input
    -            /// clock\n
    -            /// This can be done at any time
    -            NUDGE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x4000801c
    -        /// Clock divisor, can be changed on-the-fly
    -        pub const CLK_GPOUT2_DIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Fractional component of the divisor
    -            FRAC: u8,
    -            /// Integer component of the divisor, 0 -> divide by 2^16
    -            INT: u24,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x40008020
    -        /// Indicates which SRC is currently selected by the glitchless mux (one-hot).\n
    -        /// This slice does not have a glitchless mux (only the AUX_SRC field is present,
    -        /// not SRC) so this register is hardwired to 0x1.
    -        pub const CLK_GPOUT2_SELECTED = @intToPtr(*volatile u32, base_address + 0x20);
    -
    -        /// address: 0x40008024
    -        /// Clock control, can be changed on-the-fly (except for auxsrc)
    -        pub const CLK_GPOUT3_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            /// Selects the auxiliary clock source, will glitch when switching
    -            AUXSRC: u4,
    -            reserved5: u1 = 0,
    -            /// Asynchronously kills the clock generator
    -            KILL: u1,
    -            /// Starts and stops the clock generator cleanly
    -            ENABLE: u1,
    -            /// Enables duty cycle correction for odd divisors
    -            DC50: u1,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            /// This delays the enable signal by up to 3 cycles of the input clock\n
    -            /// This must be set before the clock is enabled to have any effect
    -            PHASE: u2,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            /// An edge on this signal shifts the phase of the output by 1 cycle of the input
    -            /// clock\n
    -            /// This can be done at any time
    -            NUDGE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x40008028
    -        /// Clock divisor, can be changed on-the-fly
    -        pub const CLK_GPOUT3_DIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Fractional component of the divisor
    -            FRAC: u8,
    -            /// Integer component of the divisor, 0 -> divide by 2^16
    -            INT: u24,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x4000802c
    -        /// Indicates which SRC is currently selected by the glitchless mux (one-hot).\n
    -        /// This slice does not have a glitchless mux (only the AUX_SRC field is present,
    -        /// not SRC) so this register is hardwired to 0x1.
    -        pub const CLK_GPOUT3_SELECTED = @intToPtr(*volatile u32, base_address + 0x2c);
    -
    -        /// address: 0x40008030
    -        /// Clock control, can be changed on-the-fly (except for auxsrc)
    -        pub const CLK_REF_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Selects the clock source glitchlessly, can be changed on-the-fly
    -            SRC: u2,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            /// Selects the auxiliary clock source, will glitch when switching
    -            AUXSRC: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x40008034
    -        /// Clock divisor, can be changed on-the-fly
    -        pub const CLK_REF_DIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// Integer component of the divisor, 0 -> divide by 2^16
    -            INT: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x40008038
    -        /// Indicates which SRC is currently selected by the glitchless mux (one-hot).\n
    -        /// The glitchless multiplexer does not switch instantaneously (to avoid glitches),
    -        /// so software should poll this register to wait for the switch to complete. This
    -        /// register contains one decoded bit for each of the clock sources enumerated in
    -        /// the CTRL SRC field. At most one of these bits will be set at any time,
    -        /// indicating that clock is currently present at the output of the glitchless mux.
    -        /// Whilst switching is in progress, this register may briefly show all-0s.
    -        pub const CLK_REF_SELECTED = @intToPtr(*volatile u32, base_address + 0x38);
    -
    -        /// address: 0x4000803c
    -        /// Clock control, can be changed on-the-fly (except for auxsrc)
    -        pub const CLK_SYS_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Selects the clock source glitchlessly, can be changed on-the-fly
    -            SRC: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            /// Selects the auxiliary clock source, will glitch when switching
    -            AUXSRC: u3,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x40008040
    -        /// Clock divisor, can be changed on-the-fly
    -        pub const CLK_SYS_DIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Fractional component of the divisor
    -            FRAC: u8,
    -            /// Integer component of the divisor, 0 -> divide by 2^16
    -            INT: u24,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x40008044
    -        /// Indicates which SRC is currently selected by the glitchless mux (one-hot).\n
    -        /// The glitchless multiplexer does not switch instantaneously (to avoid glitches),
    -        /// so software should poll this register to wait for the switch to complete. This
    -        /// register contains one decoded bit for each of the clock sources enumerated in
    -        /// the CTRL SRC field. At most one of these bits will be set at any time,
    -        /// indicating that clock is currently present at the output of the glitchless mux.
    -        /// Whilst switching is in progress, this register may briefly show all-0s.
    -        pub const CLK_SYS_SELECTED = @intToPtr(*volatile u32, base_address + 0x44);
    -
    -        /// address: 0x40008048
    -        /// Clock control, can be changed on-the-fly (except for auxsrc)
    -        pub const CLK_PERI_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            /// Selects the auxiliary clock source, will glitch when switching
    -            AUXSRC: u3,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            /// Asynchronously kills the clock generator
    -            KILL: u1,
    -            /// Starts and stops the clock generator cleanly
    -            ENABLE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x40008050
    -        /// Indicates which SRC is currently selected by the glitchless mux (one-hot).\n
    -        /// This slice does not have a glitchless mux (only the AUX_SRC field is present,
    -        /// not SRC) so this register is hardwired to 0x1.
    -        pub const CLK_PERI_SELECTED = @intToPtr(*volatile u32, base_address + 0x50);
    -
    -        /// address: 0x40008054
    -        /// Clock control, can be changed on-the-fly (except for auxsrc)
    -        pub const CLK_USB_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            /// Selects the auxiliary clock source, will glitch when switching
    -            AUXSRC: u3,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            /// Asynchronously kills the clock generator
    -            KILL: u1,
    -            /// Starts and stops the clock generator cleanly
    -            ENABLE: u1,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            /// This delays the enable signal by up to 3 cycles of the input clock\n
    -            /// This must be set before the clock is enabled to have any effect
    -            PHASE: u2,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// An edge on this signal shifts the phase of the output by 1 cycle of the input
    -            /// clock\n
    -            /// This can be done at any time
    -            NUDGE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x40008058
    -        /// Clock divisor, can be changed on-the-fly
    -        pub const CLK_USB_DIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// Integer component of the divisor, 0 -> divide by 2^16
    -            INT: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x4000805c
    -        /// Indicates which SRC is currently selected by the glitchless mux (one-hot).\n
    -        /// This slice does not have a glitchless mux (only the AUX_SRC field is present,
    -        /// not SRC) so this register is hardwired to 0x1.
    -        pub const CLK_USB_SELECTED = @intToPtr(*volatile u32, base_address + 0x5c);
    -
    -        /// address: 0x40008060
    -        /// Clock control, can be changed on-the-fly (except for auxsrc)
    -        pub const CLK_ADC_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            /// Selects the auxiliary clock source, will glitch when switching
    -            AUXSRC: u3,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            /// Asynchronously kills the clock generator
    -            KILL: u1,
    -            /// Starts and stops the clock generator cleanly
    -            ENABLE: u1,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            /// This delays the enable signal by up to 3 cycles of the input clock\n
    -            /// This must be set before the clock is enabled to have any effect
    -            PHASE: u2,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// An edge on this signal shifts the phase of the output by 1 cycle of the input
    -            /// clock\n
    -            /// This can be done at any time
    -            NUDGE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x40008064
    -        /// Clock divisor, can be changed on-the-fly
    -        pub const CLK_ADC_DIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// Integer component of the divisor, 0 -> divide by 2^16
    -            INT: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x40008068
    -        /// Indicates which SRC is currently selected by the glitchless mux (one-hot).\n
    -        /// This slice does not have a glitchless mux (only the AUX_SRC field is present,
    -        /// not SRC) so this register is hardwired to 0x1.
    -        pub const CLK_ADC_SELECTED = @intToPtr(*volatile u32, base_address + 0x68);
    -
    -        /// address: 0x4000806c
    -        /// Clock control, can be changed on-the-fly (except for auxsrc)
    -        pub const CLK_RTC_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            /// Selects the auxiliary clock source, will glitch when switching
    -            AUXSRC: u3,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            /// Asynchronously kills the clock generator
    -            KILL: u1,
    -            /// Starts and stops the clock generator cleanly
    -            ENABLE: u1,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            /// This delays the enable signal by up to 3 cycles of the input clock\n
    -            /// This must be set before the clock is enabled to have any effect
    -            PHASE: u2,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// An edge on this signal shifts the phase of the output by 1 cycle of the input
    -            /// clock\n
    -            /// This can be done at any time
    -            NUDGE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -        }), base_address + 0x6c);
    -
    -        /// address: 0x40008070
    -        /// Clock divisor, can be changed on-the-fly
    -        pub const CLK_RTC_DIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Fractional component of the divisor
    -            FRAC: u8,
    -            /// Integer component of the divisor, 0 -> divide by 2^16
    -            INT: u24,
    -        }), base_address + 0x70);
    -
    -        /// address: 0x40008074
    -        /// Indicates which SRC is currently selected by the glitchless mux (one-hot).\n
    -        /// This slice does not have a glitchless mux (only the AUX_SRC field is present,
    -        /// not SRC) so this register is hardwired to 0x1.
    -        pub const CLK_RTC_SELECTED = @intToPtr(*volatile u32, base_address + 0x74);
    -
    -        /// address: 0x40008078
    -        pub const CLK_SYS_RESUS_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This is expressed as a number of clk_ref cycles\n
    -            /// and must be >= 2x clk_ref_freq/min_clk_tst_freq
    -            TIMEOUT: u8,
    -            /// Enable resus
    -            ENABLE: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            /// Force a resus, for test purposes only
    -            FRCE: u1,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            /// For clearing the resus after the fault that triggered it has been corrected
    -            CLEAR: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -        }), base_address + 0x78);
    -
    -        /// address: 0x4000807c
    -        pub const CLK_SYS_RESUS_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Clock has been resuscitated, correct the error then send ctrl_clear=1
    -            RESUSSED: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x7c);
    -
    -        /// address: 0x40008080
    -        /// Reference clock frequency in kHz
    -        pub const FC0_REF_KHZ = @intToPtr(*volatile MmioInt(32, u20), base_address + 0x80);
    -
    -        /// address: 0x40008084
    -        /// Minimum pass frequency in kHz. This is optional. Set to 0 if you are not using
    -        /// the pass/fail flags
    -        pub const FC0_MIN_KHZ = @intToPtr(*volatile MmioInt(32, u25), base_address + 0x84);
    -
    -        /// address: 0x40008088
    -        /// Maximum pass frequency in kHz. This is optional. Set to 0x1ffffff if you are not
    -        /// using the pass/fail flags
    -        pub const FC0_MAX_KHZ = @intToPtr(*volatile MmioInt(32, u25), base_address + 0x88);
    -
    -        /// address: 0x4000808c
    -        /// Delays the start of frequency counting to allow the mux to settle\n
    -        /// Delay is measured in multiples of the reference clock period
    -        pub const FC0_DELAY = @intToPtr(*volatile MmioInt(32, u3), base_address + 0x8c);
    -
    -        /// address: 0x40008090
    -        /// The test interval is 0.98us * 2**interval, but let's call it 1us * 2**interval\n
    -        /// The default gives a test interval of 250us
    -        pub const FC0_INTERVAL = @intToPtr(*volatile MmioInt(32, u4), base_address + 0x90);
    -
    -        /// address: 0x40008094
    -        /// Clock sent to frequency counter, set to 0 when not required\n
    -        /// Writing to this register initiates the frequency count
    -        pub const FC0_SRC = @intToPtr(*volatile MmioInt(32, u8), base_address + 0x94);
    -
    -        /// address: 0x40008098
    -        /// Frequency counter status
    -        pub const FC0_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Test passed
    -            PASS: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            /// Test complete
    -            DONE: u1,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            /// Test running
    -            RUNNING: u1,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            /// Waiting for test clock to start
    -            WAITING: u1,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            /// Test failed
    -            FAIL: u1,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            /// Test clock slower than expected, only valid when status_done=1
    -            SLOW: u1,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// Test clock faster than expected, only valid when status_done=1
    -            FAST: u1,
    -            reserved18: u1 = 0,
    -            reserved19: u1 = 0,
    -            reserved20: u1 = 0,
    -            /// Test clock stopped during test
    -            DIED: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -        }), base_address + 0x98);
    -
    -        /// address: 0x4000809c
    -        /// Result of frequency measurement, only valid when status_done=1
    -        pub const FC0_RESULT = @intToPtr(*volatile Mmio(32, packed struct {
    -            FRAC: u5,
    -            KHZ: u25,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0x9c);
    -
    -        /// address: 0x400080a0
    -        /// enable clock in wake mode
    -        pub const WAKE_EN0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            clk_sys_clocks: u1,
    -            clk_adc_adc: u1,
    -            clk_sys_adc: u1,
    -            clk_sys_busctrl: u1,
    -            clk_sys_busfabric: u1,
    -            clk_sys_dma: u1,
    -            clk_sys_i2c0: u1,
    -            clk_sys_i2c1: u1,
    -            clk_sys_io: u1,
    -            clk_sys_jtag: u1,
    -            clk_sys_vreg_and_chip_reset: u1,
    -            clk_sys_pads: u1,
    -            clk_sys_pio0: u1,
    -            clk_sys_pio1: u1,
    -            clk_sys_pll_sys: u1,
    -            clk_sys_pll_usb: u1,
    -            clk_sys_psm: u1,
    -            clk_sys_pwm: u1,
    -            clk_sys_resets: u1,
    -            clk_sys_rom: u1,
    -            clk_sys_rosc: u1,
    -            clk_rtc_rtc: u1,
    -            clk_sys_rtc: u1,
    -            clk_sys_sio: u1,
    -            clk_peri_spi0: u1,
    -            clk_sys_spi0: u1,
    -            clk_peri_spi1: u1,
    -            clk_sys_spi1: u1,
    -            clk_sys_sram0: u1,
    -            clk_sys_sram1: u1,
    -            clk_sys_sram2: u1,
    -            clk_sys_sram3: u1,
    -        }), base_address + 0xa0);
    -
    -        /// address: 0x400080a4
    -        /// enable clock in wake mode
    -        pub const WAKE_EN1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            clk_sys_sram4: u1,
    -            clk_sys_sram5: u1,
    -            clk_sys_syscfg: u1,
    -            clk_sys_sysinfo: u1,
    -            clk_sys_tbman: u1,
    -            clk_sys_timer: u1,
    -            clk_peri_uart0: u1,
    -            clk_sys_uart0: u1,
    -            clk_peri_uart1: u1,
    -            clk_sys_uart1: u1,
    -            clk_sys_usbctrl: u1,
    -            clk_usb_usbctrl: u1,
    -            clk_sys_watchdog: u1,
    -            clk_sys_xip: u1,
    -            clk_sys_xosc: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -        }), base_address + 0xa4);
    -
    -        /// address: 0x400080a8
    -        /// enable clock in sleep mode
    -        pub const SLEEP_EN0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            clk_sys_clocks: u1,
    -            clk_adc_adc: u1,
    -            clk_sys_adc: u1,
    -            clk_sys_busctrl: u1,
    -            clk_sys_busfabric: u1,
    -            clk_sys_dma: u1,
    -            clk_sys_i2c0: u1,
    -            clk_sys_i2c1: u1,
    -            clk_sys_io: u1,
    -            clk_sys_jtag: u1,
    -            clk_sys_vreg_and_chip_reset: u1,
    -            clk_sys_pads: u1,
    -            clk_sys_pio0: u1,
    -            clk_sys_pio1: u1,
    -            clk_sys_pll_sys: u1,
    -            clk_sys_pll_usb: u1,
    -            clk_sys_psm: u1,
    -            clk_sys_pwm: u1,
    -            clk_sys_resets: u1,
    -            clk_sys_rom: u1,
    -            clk_sys_rosc: u1,
    -            clk_rtc_rtc: u1,
    -            clk_sys_rtc: u1,
    -            clk_sys_sio: u1,
    -            clk_peri_spi0: u1,
    -            clk_sys_spi0: u1,
    -            clk_peri_spi1: u1,
    -            clk_sys_spi1: u1,
    -            clk_sys_sram0: u1,
    -            clk_sys_sram1: u1,
    -            clk_sys_sram2: u1,
    -            clk_sys_sram3: u1,
    -        }), base_address + 0xa8);
    -
    -        /// address: 0x400080ac
    -        /// enable clock in sleep mode
    -        pub const SLEEP_EN1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            clk_sys_sram4: u1,
    -            clk_sys_sram5: u1,
    -            clk_sys_syscfg: u1,
    -            clk_sys_sysinfo: u1,
    -            clk_sys_tbman: u1,
    -            clk_sys_timer: u1,
    -            clk_peri_uart0: u1,
    -            clk_sys_uart0: u1,
    -            clk_peri_uart1: u1,
    -            clk_sys_uart1: u1,
    -            clk_sys_usbctrl: u1,
    -            clk_usb_usbctrl: u1,
    -            clk_sys_watchdog: u1,
    -            clk_sys_xip: u1,
    -            clk_sys_xosc: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -        }), base_address + 0xac);
    -
    -        /// address: 0x400080b0
    -        /// indicates the state of the clock enable
    -        pub const ENABLED0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            clk_sys_clocks: u1,
    -            clk_adc_adc: u1,
    -            clk_sys_adc: u1,
    -            clk_sys_busctrl: u1,
    -            clk_sys_busfabric: u1,
    -            clk_sys_dma: u1,
    -            clk_sys_i2c0: u1,
    -            clk_sys_i2c1: u1,
    -            clk_sys_io: u1,
    -            clk_sys_jtag: u1,
    -            clk_sys_vreg_and_chip_reset: u1,
    -            clk_sys_pads: u1,
    -            clk_sys_pio0: u1,
    -            clk_sys_pio1: u1,
    -            clk_sys_pll_sys: u1,
    -            clk_sys_pll_usb: u1,
    -            clk_sys_psm: u1,
    -            clk_sys_pwm: u1,
    -            clk_sys_resets: u1,
    -            clk_sys_rom: u1,
    -            clk_sys_rosc: u1,
    -            clk_rtc_rtc: u1,
    -            clk_sys_rtc: u1,
    -            clk_sys_sio: u1,
    -            clk_peri_spi0: u1,
    -            clk_sys_spi0: u1,
    -            clk_peri_spi1: u1,
    -            clk_sys_spi1: u1,
    -            clk_sys_sram0: u1,
    -            clk_sys_sram1: u1,
    -            clk_sys_sram2: u1,
    -            clk_sys_sram3: u1,
    -        }), base_address + 0xb0);
    -
    -        /// address: 0x400080b4
    -        /// indicates the state of the clock enable
    -        pub const ENABLED1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            clk_sys_sram4: u1,
    -            clk_sys_sram5: u1,
    -            clk_sys_syscfg: u1,
    -            clk_sys_sysinfo: u1,
    -            clk_sys_tbman: u1,
    -            clk_sys_timer: u1,
    -            clk_peri_uart0: u1,
    -            clk_sys_uart0: u1,
    -            clk_peri_uart1: u1,
    -            clk_sys_uart1: u1,
    -            clk_sys_usbctrl: u1,
    -            clk_usb_usbctrl: u1,
    -            clk_sys_watchdog: u1,
    -            clk_sys_xip: u1,
    -            clk_sys_xosc: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -        }), base_address + 0xb4);
    -
    -        /// address: 0x400080b8
    -        /// Raw Interrupts
    -        pub const INTR = @intToPtr(*volatile Mmio(32, packed struct {
    -            CLK_SYS_RESUS: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0xb8);
    -
    -        /// address: 0x400080bc
    -        /// Interrupt Enable
    -        pub const INTE = @intToPtr(*volatile Mmio(32, packed struct {
    -            CLK_SYS_RESUS: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0xbc);
    -
    -        /// address: 0x400080c0
    -        /// Interrupt Force
    -        pub const INTF = @intToPtr(*volatile Mmio(32, packed struct {
    -            CLK_SYS_RESUS: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0xc0);
    -
    -        /// address: 0x400080c4
    -        /// Interrupt status after masking & forcing
    -        pub const INTS = @intToPtr(*volatile Mmio(32, packed struct {
    -            CLK_SYS_RESUS: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0xc4);
    -    };
    -    pub const RESETS = struct {
    -        pub const base_address = 0x4000c000;
    -        pub const version = "1";
    -
    -        /// address: 0x4000c000
    -        /// Reset control. If a bit is set it means the peripheral is in reset. 0 means the
    -        /// peripheral's reset is deasserted.
    -        pub const RESET = @intToPtr(*volatile Mmio(32, packed struct {
    -            adc: u1,
    -            busctrl: u1,
    -            dma: u1,
    -            i2c0: u1,
    -            i2c1: u1,
    -            io_bank0: u1,
    -            io_qspi: u1,
    -            jtag: u1,
    -            pads_bank0: u1,
    -            pads_qspi: u1,
    -            pio0: u1,
    -            pio1: u1,
    -            pll_sys: u1,
    -            pll_usb: u1,
    -            pwm: u1,
    -            rtc: u1,
    -            spi0: u1,
    -            spi1: u1,
    -            syscfg: u1,
    -            sysinfo: u1,
    -            tbman: u1,
    -            timer: u1,
    -            uart0: u1,
    -            uart1: u1,
    -            usbctrl: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x4000c004
    -        /// Watchdog select. If a bit is set then the watchdog will reset this peripheral
    -        /// when the watchdog fires.
    -        pub const WDSEL = @intToPtr(*volatile Mmio(32, packed struct {
    -            adc: u1,
    -            busctrl: u1,
    -            dma: u1,
    -            i2c0: u1,
    -            i2c1: u1,
    -            io_bank0: u1,
    -            io_qspi: u1,
    -            jtag: u1,
    -            pads_bank0: u1,
    -            pads_qspi: u1,
    -            pio0: u1,
    -            pio1: u1,
    -            pll_sys: u1,
    -            pll_usb: u1,
    -            pwm: u1,
    -            rtc: u1,
    -            spi0: u1,
    -            spi1: u1,
    -            syscfg: u1,
    -            sysinfo: u1,
    -            tbman: u1,
    -            timer: u1,
    -            uart0: u1,
    -            uart1: u1,
    -            usbctrl: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x4000c008
    -        /// Reset done. If a bit is set then a reset done signal has been returned by the
    -        /// peripheral. This indicates that the peripheral's registers are ready to be
    -        /// accessed.
    -        pub const RESET_DONE = @intToPtr(*volatile Mmio(32, packed struct {
    -            adc: u1,
    -            busctrl: u1,
    -            dma: u1,
    -            i2c0: u1,
    -            i2c1: u1,
    -            io_bank0: u1,
    -            io_qspi: u1,
    -            jtag: u1,
    -            pads_bank0: u1,
    -            pads_qspi: u1,
    -            pio0: u1,
    -            pio1: u1,
    -            pll_sys: u1,
    -            pll_usb: u1,
    -            pwm: u1,
    -            rtc: u1,
    -            spi0: u1,
    -            spi1: u1,
    -            syscfg: u1,
    -            sysinfo: u1,
    -            tbman: u1,
    -            timer: u1,
    -            uart0: u1,
    -            uart1: u1,
    -            usbctrl: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -        }), base_address + 0x8);
    -    };
    -    pub const PSM = struct {
    -        pub const base_address = 0x40010000;
    -        pub const version = "1";
    -
    -        /// address: 0x40010000
    -        /// Force block out of reset (i.e. power it on)
    -        pub const FRCE_ON = @intToPtr(*volatile Mmio(32, packed struct {
    -            rosc: u1,
    -            xosc: u1,
    -            clocks: u1,
    -            resets: u1,
    -            busfabric: u1,
    -            rom: u1,
    -            sram0: u1,
    -            sram1: u1,
    -            sram2: u1,
    -            sram3: u1,
    -            sram4: u1,
    -            sram5: u1,
    -            xip: u1,
    -            vreg_and_chip_reset: u1,
    -            sio: u1,
    -            proc0: u1,
    -            proc1: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x40010004
    -        /// Force into reset (i.e. power it off)
    -        pub const FRCE_OFF = @intToPtr(*volatile Mmio(32, packed struct {
    -            rosc: u1,
    -            xosc: u1,
    -            clocks: u1,
    -            resets: u1,
    -            busfabric: u1,
    -            rom: u1,
    -            sram0: u1,
    -            sram1: u1,
    -            sram2: u1,
    -            sram3: u1,
    -            sram4: u1,
    -            sram5: u1,
    -            xip: u1,
    -            vreg_and_chip_reset: u1,
    -            sio: u1,
    -            proc0: u1,
    -            proc1: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x40010008
    -        /// Set to 1 if this peripheral should be reset when the watchdog fires.
    -        pub const WDSEL = @intToPtr(*volatile Mmio(32, packed struct {
    -            rosc: u1,
    -            xosc: u1,
    -            clocks: u1,
    -            resets: u1,
    -            busfabric: u1,
    -            rom: u1,
    -            sram0: u1,
    -            sram1: u1,
    -            sram2: u1,
    -            sram3: u1,
    -            sram4: u1,
    -            sram5: u1,
    -            xip: u1,
    -            vreg_and_chip_reset: u1,
    -            sio: u1,
    -            proc0: u1,
    -            proc1: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x4001000c
    -        /// Indicates the peripheral's registers are ready to access.
    -        pub const DONE = @intToPtr(*volatile Mmio(32, packed struct {
    -            rosc: u1,
    -            xosc: u1,
    -            clocks: u1,
    -            resets: u1,
    -            busfabric: u1,
    -            rom: u1,
    -            sram0: u1,
    -            sram1: u1,
    -            sram2: u1,
    -            sram3: u1,
    -            sram4: u1,
    -            sram5: u1,
    -            xip: u1,
    -            vreg_and_chip_reset: u1,
    -            sio: u1,
    -            proc0: u1,
    -            proc1: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -        }), base_address + 0xc);
    -    };
    -    pub const IO_BANK0 = struct {
    -        pub const base_address = 0x40014000;
    -        pub const version = "1";
    -
    -        /// address: 0x40014000
    -        /// GPIO status
    -        pub const GPIO0_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x40014004
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO0_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x40014008
    -        /// GPIO status
    -        pub const GPIO1_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x4001400c
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO1_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x40014010
    -        /// GPIO status
    -        pub const GPIO2_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x40014014
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO2_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x40014018
    -        /// GPIO status
    -        pub const GPIO3_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x4001401c
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO3_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x40014020
    -        /// GPIO status
    -        pub const GPIO4_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x40014024
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO4_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x40014028
    -        /// GPIO status
    -        pub const GPIO5_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x4001402c
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO5_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x40014030
    -        /// GPIO status
    -        pub const GPIO6_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x40014034
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO6_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x40014038
    -        /// GPIO status
    -        pub const GPIO7_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x4001403c
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO7_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x40014040
    -        /// GPIO status
    -        pub const GPIO8_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x40014044
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO8_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x40014048
    -        /// GPIO status
    -        pub const GPIO9_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x4001404c
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO9_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0x4c);
    -
    -        /// address: 0x40014050
    -        /// GPIO status
    -        pub const GPIO10_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x40014054
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO10_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x40014058
    -        /// GPIO status
    -        pub const GPIO11_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x4001405c
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO11_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x40014060
    -        /// GPIO status
    -        pub const GPIO12_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x40014064
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO12_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x40014068
    -        /// GPIO status
    -        pub const GPIO13_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x68);
    -
    -        /// address: 0x4001406c
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO13_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0x6c);
    -
    -        /// address: 0x40014070
    -        /// GPIO status
    -        pub const GPIO14_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x70);
    -
    -        /// address: 0x40014074
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO14_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0x74);
    -
    -        /// address: 0x40014078
    -        /// GPIO status
    -        pub const GPIO15_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x78);
    -
    -        /// address: 0x4001407c
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO15_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0x7c);
    -
    -        /// address: 0x40014080
    -        /// GPIO status
    -        pub const GPIO16_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x80);
    -
    -        /// address: 0x40014084
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO16_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0x84);
    -
    -        /// address: 0x40014088
    -        /// GPIO status
    -        pub const GPIO17_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x88);
    -
    -        /// address: 0x4001408c
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO17_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0x8c);
    -
    -        /// address: 0x40014090
    -        /// GPIO status
    -        pub const GPIO18_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x90);
    -
    -        /// address: 0x40014094
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO18_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0x94);
    -
    -        /// address: 0x40014098
    -        /// GPIO status
    -        pub const GPIO19_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x98);
    -
    -        /// address: 0x4001409c
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO19_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0x9c);
    -
    -        /// address: 0x400140a0
    -        /// GPIO status
    -        pub const GPIO20_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0xa0);
    -
    -        /// address: 0x400140a4
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO20_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0xa4);
    -
    -        /// address: 0x400140a8
    -        /// GPIO status
    -        pub const GPIO21_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0xa8);
    -
    -        /// address: 0x400140ac
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO21_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0xac);
    -
    -        /// address: 0x400140b0
    -        /// GPIO status
    -        pub const GPIO22_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0xb0);
    -
    -        /// address: 0x400140b4
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO22_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0xb4);
    -
    -        /// address: 0x400140b8
    -        /// GPIO status
    -        pub const GPIO23_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0xb8);
    -
    -        /// address: 0x400140bc
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO23_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0xbc);
    -
    -        /// address: 0x400140c0
    -        /// GPIO status
    -        pub const GPIO24_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0xc0);
    -
    -        /// address: 0x400140c4
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO24_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0xc4);
    -
    -        /// address: 0x400140c8
    -        /// GPIO status
    -        pub const GPIO25_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0xc8);
    -
    -        /// address: 0x400140cc
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO25_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0xcc);
    -
    -        /// address: 0x400140d0
    -        /// GPIO status
    -        pub const GPIO26_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0xd0);
    -
    -        /// address: 0x400140d4
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO26_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0xd4);
    -
    -        /// address: 0x400140d8
    -        /// GPIO status
    -        pub const GPIO27_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0xd8);
    -
    -        /// address: 0x400140dc
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO27_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0xdc);
    -
    -        /// address: 0x400140e0
    -        /// GPIO status
    -        pub const GPIO28_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0xe0);
    -
    -        /// address: 0x400140e4
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO28_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0xe4);
    -
    -        /// address: 0x400140e8
    -        /// GPIO status
    -        pub const GPIO29_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0xe8);
    -
    -        /// address: 0x400140ec
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO29_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0xec);
    -
    -        /// address: 0x400140f0
    -        /// Raw Interrupts
    -        pub const INTR0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO0_LEVEL_LOW: u1,
    -            GPIO0_LEVEL_HIGH: u1,
    -            GPIO0_EDGE_LOW: u1,
    -            GPIO0_EDGE_HIGH: u1,
    -            GPIO1_LEVEL_LOW: u1,
    -            GPIO1_LEVEL_HIGH: u1,
    -            GPIO1_EDGE_LOW: u1,
    -            GPIO1_EDGE_HIGH: u1,
    -            GPIO2_LEVEL_LOW: u1,
    -            GPIO2_LEVEL_HIGH: u1,
    -            GPIO2_EDGE_LOW: u1,
    -            GPIO2_EDGE_HIGH: u1,
    -            GPIO3_LEVEL_LOW: u1,
    -            GPIO3_LEVEL_HIGH: u1,
    -            GPIO3_EDGE_LOW: u1,
    -            GPIO3_EDGE_HIGH: u1,
    -            GPIO4_LEVEL_LOW: u1,
    -            GPIO4_LEVEL_HIGH: u1,
    -            GPIO4_EDGE_LOW: u1,
    -            GPIO4_EDGE_HIGH: u1,
    -            GPIO5_LEVEL_LOW: u1,
    -            GPIO5_LEVEL_HIGH: u1,
    -            GPIO5_EDGE_LOW: u1,
    -            GPIO5_EDGE_HIGH: u1,
    -            GPIO6_LEVEL_LOW: u1,
    -            GPIO6_LEVEL_HIGH: u1,
    -            GPIO6_EDGE_LOW: u1,
    -            GPIO6_EDGE_HIGH: u1,
    -            GPIO7_LEVEL_LOW: u1,
    -            GPIO7_LEVEL_HIGH: u1,
    -            GPIO7_EDGE_LOW: u1,
    -            GPIO7_EDGE_HIGH: u1,
    -        }), base_address + 0xf0);
    -
    -        /// address: 0x400140f4
    -        /// Raw Interrupts
    -        pub const INTR1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO8_LEVEL_LOW: u1,
    -            GPIO8_LEVEL_HIGH: u1,
    -            GPIO8_EDGE_LOW: u1,
    -            GPIO8_EDGE_HIGH: u1,
    -            GPIO9_LEVEL_LOW: u1,
    -            GPIO9_LEVEL_HIGH: u1,
    -            GPIO9_EDGE_LOW: u1,
    -            GPIO9_EDGE_HIGH: u1,
    -            GPIO10_LEVEL_LOW: u1,
    -            GPIO10_LEVEL_HIGH: u1,
    -            GPIO10_EDGE_LOW: u1,
    -            GPIO10_EDGE_HIGH: u1,
    -            GPIO11_LEVEL_LOW: u1,
    -            GPIO11_LEVEL_HIGH: u1,
    -            GPIO11_EDGE_LOW: u1,
    -            GPIO11_EDGE_HIGH: u1,
    -            GPIO12_LEVEL_LOW: u1,
    -            GPIO12_LEVEL_HIGH: u1,
    -            GPIO12_EDGE_LOW: u1,
    -            GPIO12_EDGE_HIGH: u1,
    -            GPIO13_LEVEL_LOW: u1,
    -            GPIO13_LEVEL_HIGH: u1,
    -            GPIO13_EDGE_LOW: u1,
    -            GPIO13_EDGE_HIGH: u1,
    -            GPIO14_LEVEL_LOW: u1,
    -            GPIO14_LEVEL_HIGH: u1,
    -            GPIO14_EDGE_LOW: u1,
    -            GPIO14_EDGE_HIGH: u1,
    -            GPIO15_LEVEL_LOW: u1,
    -            GPIO15_LEVEL_HIGH: u1,
    -            GPIO15_EDGE_LOW: u1,
    -            GPIO15_EDGE_HIGH: u1,
    -        }), base_address + 0xf4);
    -
    -        /// address: 0x400140f8
    -        /// Raw Interrupts
    -        pub const INTR2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO16_LEVEL_LOW: u1,
    -            GPIO16_LEVEL_HIGH: u1,
    -            GPIO16_EDGE_LOW: u1,
    -            GPIO16_EDGE_HIGH: u1,
    -            GPIO17_LEVEL_LOW: u1,
    -            GPIO17_LEVEL_HIGH: u1,
    -            GPIO17_EDGE_LOW: u1,
    -            GPIO17_EDGE_HIGH: u1,
    -            GPIO18_LEVEL_LOW: u1,
    -            GPIO18_LEVEL_HIGH: u1,
    -            GPIO18_EDGE_LOW: u1,
    -            GPIO18_EDGE_HIGH: u1,
    -            GPIO19_LEVEL_LOW: u1,
    -            GPIO19_LEVEL_HIGH: u1,
    -            GPIO19_EDGE_LOW: u1,
    -            GPIO19_EDGE_HIGH: u1,
    -            GPIO20_LEVEL_LOW: u1,
    -            GPIO20_LEVEL_HIGH: u1,
    -            GPIO20_EDGE_LOW: u1,
    -            GPIO20_EDGE_HIGH: u1,
    -            GPIO21_LEVEL_LOW: u1,
    -            GPIO21_LEVEL_HIGH: u1,
    -            GPIO21_EDGE_LOW: u1,
    -            GPIO21_EDGE_HIGH: u1,
    -            GPIO22_LEVEL_LOW: u1,
    -            GPIO22_LEVEL_HIGH: u1,
    -            GPIO22_EDGE_LOW: u1,
    -            GPIO22_EDGE_HIGH: u1,
    -            GPIO23_LEVEL_LOW: u1,
    -            GPIO23_LEVEL_HIGH: u1,
    -            GPIO23_EDGE_LOW: u1,
    -            GPIO23_EDGE_HIGH: u1,
    -        }), base_address + 0xf8);
    -
    -        /// address: 0x400140fc
    -        /// Raw Interrupts
    -        pub const INTR3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO24_LEVEL_LOW: u1,
    -            GPIO24_LEVEL_HIGH: u1,
    -            GPIO24_EDGE_LOW: u1,
    -            GPIO24_EDGE_HIGH: u1,
    -            GPIO25_LEVEL_LOW: u1,
    -            GPIO25_LEVEL_HIGH: u1,
    -            GPIO25_EDGE_LOW: u1,
    -            GPIO25_EDGE_HIGH: u1,
    -            GPIO26_LEVEL_LOW: u1,
    -            GPIO26_LEVEL_HIGH: u1,
    -            GPIO26_EDGE_LOW: u1,
    -            GPIO26_EDGE_HIGH: u1,
    -            GPIO27_LEVEL_LOW: u1,
    -            GPIO27_LEVEL_HIGH: u1,
    -            GPIO27_EDGE_LOW: u1,
    -            GPIO27_EDGE_HIGH: u1,
    -            GPIO28_LEVEL_LOW: u1,
    -            GPIO28_LEVEL_HIGH: u1,
    -            GPIO28_EDGE_LOW: u1,
    -            GPIO28_EDGE_HIGH: u1,
    -            GPIO29_LEVEL_LOW: u1,
    -            GPIO29_LEVEL_HIGH: u1,
    -            GPIO29_EDGE_LOW: u1,
    -            GPIO29_EDGE_HIGH: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0xfc);
    -
    -        /// address: 0x40014100
    -        /// Interrupt Enable for proc0
    -        pub const PROC0_INTE0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO0_LEVEL_LOW: u1,
    -            GPIO0_LEVEL_HIGH: u1,
    -            GPIO0_EDGE_LOW: u1,
    -            GPIO0_EDGE_HIGH: u1,
    -            GPIO1_LEVEL_LOW: u1,
    -            GPIO1_LEVEL_HIGH: u1,
    -            GPIO1_EDGE_LOW: u1,
    -            GPIO1_EDGE_HIGH: u1,
    -            GPIO2_LEVEL_LOW: u1,
    -            GPIO2_LEVEL_HIGH: u1,
    -            GPIO2_EDGE_LOW: u1,
    -            GPIO2_EDGE_HIGH: u1,
    -            GPIO3_LEVEL_LOW: u1,
    -            GPIO3_LEVEL_HIGH: u1,
    -            GPIO3_EDGE_LOW: u1,
    -            GPIO3_EDGE_HIGH: u1,
    -            GPIO4_LEVEL_LOW: u1,
    -            GPIO4_LEVEL_HIGH: u1,
    -            GPIO4_EDGE_LOW: u1,
    -            GPIO4_EDGE_HIGH: u1,
    -            GPIO5_LEVEL_LOW: u1,
    -            GPIO5_LEVEL_HIGH: u1,
    -            GPIO5_EDGE_LOW: u1,
    -            GPIO5_EDGE_HIGH: u1,
    -            GPIO6_LEVEL_LOW: u1,
    -            GPIO6_LEVEL_HIGH: u1,
    -            GPIO6_EDGE_LOW: u1,
    -            GPIO6_EDGE_HIGH: u1,
    -            GPIO7_LEVEL_LOW: u1,
    -            GPIO7_LEVEL_HIGH: u1,
    -            GPIO7_EDGE_LOW: u1,
    -            GPIO7_EDGE_HIGH: u1,
    -        }), base_address + 0x100);
    -
    -        /// address: 0x40014104
    -        /// Interrupt Enable for proc0
    -        pub const PROC0_INTE1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO8_LEVEL_LOW: u1,
    -            GPIO8_LEVEL_HIGH: u1,
    -            GPIO8_EDGE_LOW: u1,
    -            GPIO8_EDGE_HIGH: u1,
    -            GPIO9_LEVEL_LOW: u1,
    -            GPIO9_LEVEL_HIGH: u1,
    -            GPIO9_EDGE_LOW: u1,
    -            GPIO9_EDGE_HIGH: u1,
    -            GPIO10_LEVEL_LOW: u1,
    -            GPIO10_LEVEL_HIGH: u1,
    -            GPIO10_EDGE_LOW: u1,
    -            GPIO10_EDGE_HIGH: u1,
    -            GPIO11_LEVEL_LOW: u1,
    -            GPIO11_LEVEL_HIGH: u1,
    -            GPIO11_EDGE_LOW: u1,
    -            GPIO11_EDGE_HIGH: u1,
    -            GPIO12_LEVEL_LOW: u1,
    -            GPIO12_LEVEL_HIGH: u1,
    -            GPIO12_EDGE_LOW: u1,
    -            GPIO12_EDGE_HIGH: u1,
    -            GPIO13_LEVEL_LOW: u1,
    -            GPIO13_LEVEL_HIGH: u1,
    -            GPIO13_EDGE_LOW: u1,
    -            GPIO13_EDGE_HIGH: u1,
    -            GPIO14_LEVEL_LOW: u1,
    -            GPIO14_LEVEL_HIGH: u1,
    -            GPIO14_EDGE_LOW: u1,
    -            GPIO14_EDGE_HIGH: u1,
    -            GPIO15_LEVEL_LOW: u1,
    -            GPIO15_LEVEL_HIGH: u1,
    -            GPIO15_EDGE_LOW: u1,
    -            GPIO15_EDGE_HIGH: u1,
    -        }), base_address + 0x104);
    -
    -        /// address: 0x40014108
    -        /// Interrupt Enable for proc0
    -        pub const PROC0_INTE2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO16_LEVEL_LOW: u1,
    -            GPIO16_LEVEL_HIGH: u1,
    -            GPIO16_EDGE_LOW: u1,
    -            GPIO16_EDGE_HIGH: u1,
    -            GPIO17_LEVEL_LOW: u1,
    -            GPIO17_LEVEL_HIGH: u1,
    -            GPIO17_EDGE_LOW: u1,
    -            GPIO17_EDGE_HIGH: u1,
    -            GPIO18_LEVEL_LOW: u1,
    -            GPIO18_LEVEL_HIGH: u1,
    -            GPIO18_EDGE_LOW: u1,
    -            GPIO18_EDGE_HIGH: u1,
    -            GPIO19_LEVEL_LOW: u1,
    -            GPIO19_LEVEL_HIGH: u1,
    -            GPIO19_EDGE_LOW: u1,
    -            GPIO19_EDGE_HIGH: u1,
    -            GPIO20_LEVEL_LOW: u1,
    -            GPIO20_LEVEL_HIGH: u1,
    -            GPIO20_EDGE_LOW: u1,
    -            GPIO20_EDGE_HIGH: u1,
    -            GPIO21_LEVEL_LOW: u1,
    -            GPIO21_LEVEL_HIGH: u1,
    -            GPIO21_EDGE_LOW: u1,
    -            GPIO21_EDGE_HIGH: u1,
    -            GPIO22_LEVEL_LOW: u1,
    -            GPIO22_LEVEL_HIGH: u1,
    -            GPIO22_EDGE_LOW: u1,
    -            GPIO22_EDGE_HIGH: u1,
    -            GPIO23_LEVEL_LOW: u1,
    -            GPIO23_LEVEL_HIGH: u1,
    -            GPIO23_EDGE_LOW: u1,
    -            GPIO23_EDGE_HIGH: u1,
    -        }), base_address + 0x108);
    -
    -        /// address: 0x4001410c
    -        /// Interrupt Enable for proc0
    -        pub const PROC0_INTE3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO24_LEVEL_LOW: u1,
    -            GPIO24_LEVEL_HIGH: u1,
    -            GPIO24_EDGE_LOW: u1,
    -            GPIO24_EDGE_HIGH: u1,
    -            GPIO25_LEVEL_LOW: u1,
    -            GPIO25_LEVEL_HIGH: u1,
    -            GPIO25_EDGE_LOW: u1,
    -            GPIO25_EDGE_HIGH: u1,
    -            GPIO26_LEVEL_LOW: u1,
    -            GPIO26_LEVEL_HIGH: u1,
    -            GPIO26_EDGE_LOW: u1,
    -            GPIO26_EDGE_HIGH: u1,
    -            GPIO27_LEVEL_LOW: u1,
    -            GPIO27_LEVEL_HIGH: u1,
    -            GPIO27_EDGE_LOW: u1,
    -            GPIO27_EDGE_HIGH: u1,
    -            GPIO28_LEVEL_LOW: u1,
    -            GPIO28_LEVEL_HIGH: u1,
    -            GPIO28_EDGE_LOW: u1,
    -            GPIO28_EDGE_HIGH: u1,
    -            GPIO29_LEVEL_LOW: u1,
    -            GPIO29_LEVEL_HIGH: u1,
    -            GPIO29_EDGE_LOW: u1,
    -            GPIO29_EDGE_HIGH: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0x10c);
    -
    -        /// address: 0x40014110
    -        /// Interrupt Force for proc0
    -        pub const PROC0_INTF0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO0_LEVEL_LOW: u1,
    -            GPIO0_LEVEL_HIGH: u1,
    -            GPIO0_EDGE_LOW: u1,
    -            GPIO0_EDGE_HIGH: u1,
    -            GPIO1_LEVEL_LOW: u1,
    -            GPIO1_LEVEL_HIGH: u1,
    -            GPIO1_EDGE_LOW: u1,
    -            GPIO1_EDGE_HIGH: u1,
    -            GPIO2_LEVEL_LOW: u1,
    -            GPIO2_LEVEL_HIGH: u1,
    -            GPIO2_EDGE_LOW: u1,
    -            GPIO2_EDGE_HIGH: u1,
    -            GPIO3_LEVEL_LOW: u1,
    -            GPIO3_LEVEL_HIGH: u1,
    -            GPIO3_EDGE_LOW: u1,
    -            GPIO3_EDGE_HIGH: u1,
    -            GPIO4_LEVEL_LOW: u1,
    -            GPIO4_LEVEL_HIGH: u1,
    -            GPIO4_EDGE_LOW: u1,
    -            GPIO4_EDGE_HIGH: u1,
    -            GPIO5_LEVEL_LOW: u1,
    -            GPIO5_LEVEL_HIGH: u1,
    -            GPIO5_EDGE_LOW: u1,
    -            GPIO5_EDGE_HIGH: u1,
    -            GPIO6_LEVEL_LOW: u1,
    -            GPIO6_LEVEL_HIGH: u1,
    -            GPIO6_EDGE_LOW: u1,
    -            GPIO6_EDGE_HIGH: u1,
    -            GPIO7_LEVEL_LOW: u1,
    -            GPIO7_LEVEL_HIGH: u1,
    -            GPIO7_EDGE_LOW: u1,
    -            GPIO7_EDGE_HIGH: u1,
    -        }), base_address + 0x110);
    -
    -        /// address: 0x40014114
    -        /// Interrupt Force for proc0
    -        pub const PROC0_INTF1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO8_LEVEL_LOW: u1,
    -            GPIO8_LEVEL_HIGH: u1,
    -            GPIO8_EDGE_LOW: u1,
    -            GPIO8_EDGE_HIGH: u1,
    -            GPIO9_LEVEL_LOW: u1,
    -            GPIO9_LEVEL_HIGH: u1,
    -            GPIO9_EDGE_LOW: u1,
    -            GPIO9_EDGE_HIGH: u1,
    -            GPIO10_LEVEL_LOW: u1,
    -            GPIO10_LEVEL_HIGH: u1,
    -            GPIO10_EDGE_LOW: u1,
    -            GPIO10_EDGE_HIGH: u1,
    -            GPIO11_LEVEL_LOW: u1,
    -            GPIO11_LEVEL_HIGH: u1,
    -            GPIO11_EDGE_LOW: u1,
    -            GPIO11_EDGE_HIGH: u1,
    -            GPIO12_LEVEL_LOW: u1,
    -            GPIO12_LEVEL_HIGH: u1,
    -            GPIO12_EDGE_LOW: u1,
    -            GPIO12_EDGE_HIGH: u1,
    -            GPIO13_LEVEL_LOW: u1,
    -            GPIO13_LEVEL_HIGH: u1,
    -            GPIO13_EDGE_LOW: u1,
    -            GPIO13_EDGE_HIGH: u1,
    -            GPIO14_LEVEL_LOW: u1,
    -            GPIO14_LEVEL_HIGH: u1,
    -            GPIO14_EDGE_LOW: u1,
    -            GPIO14_EDGE_HIGH: u1,
    -            GPIO15_LEVEL_LOW: u1,
    -            GPIO15_LEVEL_HIGH: u1,
    -            GPIO15_EDGE_LOW: u1,
    -            GPIO15_EDGE_HIGH: u1,
    -        }), base_address + 0x114);
    -
    -        /// address: 0x40014118
    -        /// Interrupt Force for proc0
    -        pub const PROC0_INTF2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO16_LEVEL_LOW: u1,
    -            GPIO16_LEVEL_HIGH: u1,
    -            GPIO16_EDGE_LOW: u1,
    -            GPIO16_EDGE_HIGH: u1,
    -            GPIO17_LEVEL_LOW: u1,
    -            GPIO17_LEVEL_HIGH: u1,
    -            GPIO17_EDGE_LOW: u1,
    -            GPIO17_EDGE_HIGH: u1,
    -            GPIO18_LEVEL_LOW: u1,
    -            GPIO18_LEVEL_HIGH: u1,
    -            GPIO18_EDGE_LOW: u1,
    -            GPIO18_EDGE_HIGH: u1,
    -            GPIO19_LEVEL_LOW: u1,
    -            GPIO19_LEVEL_HIGH: u1,
    -            GPIO19_EDGE_LOW: u1,
    -            GPIO19_EDGE_HIGH: u1,
    -            GPIO20_LEVEL_LOW: u1,
    -            GPIO20_LEVEL_HIGH: u1,
    -            GPIO20_EDGE_LOW: u1,
    -            GPIO20_EDGE_HIGH: u1,
    -            GPIO21_LEVEL_LOW: u1,
    -            GPIO21_LEVEL_HIGH: u1,
    -            GPIO21_EDGE_LOW: u1,
    -            GPIO21_EDGE_HIGH: u1,
    -            GPIO22_LEVEL_LOW: u1,
    -            GPIO22_LEVEL_HIGH: u1,
    -            GPIO22_EDGE_LOW: u1,
    -            GPIO22_EDGE_HIGH: u1,
    -            GPIO23_LEVEL_LOW: u1,
    -            GPIO23_LEVEL_HIGH: u1,
    -            GPIO23_EDGE_LOW: u1,
    -            GPIO23_EDGE_HIGH: u1,
    -        }), base_address + 0x118);
    -
    -        /// address: 0x4001411c
    -        /// Interrupt Force for proc0
    -        pub const PROC0_INTF3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO24_LEVEL_LOW: u1,
    -            GPIO24_LEVEL_HIGH: u1,
    -            GPIO24_EDGE_LOW: u1,
    -            GPIO24_EDGE_HIGH: u1,
    -            GPIO25_LEVEL_LOW: u1,
    -            GPIO25_LEVEL_HIGH: u1,
    -            GPIO25_EDGE_LOW: u1,
    -            GPIO25_EDGE_HIGH: u1,
    -            GPIO26_LEVEL_LOW: u1,
    -            GPIO26_LEVEL_HIGH: u1,
    -            GPIO26_EDGE_LOW: u1,
    -            GPIO26_EDGE_HIGH: u1,
    -            GPIO27_LEVEL_LOW: u1,
    -            GPIO27_LEVEL_HIGH: u1,
    -            GPIO27_EDGE_LOW: u1,
    -            GPIO27_EDGE_HIGH: u1,
    -            GPIO28_LEVEL_LOW: u1,
    -            GPIO28_LEVEL_HIGH: u1,
    -            GPIO28_EDGE_LOW: u1,
    -            GPIO28_EDGE_HIGH: u1,
    -            GPIO29_LEVEL_LOW: u1,
    -            GPIO29_LEVEL_HIGH: u1,
    -            GPIO29_EDGE_LOW: u1,
    -            GPIO29_EDGE_HIGH: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0x11c);
    -
    -        /// address: 0x40014120
    -        /// Interrupt status after masking & forcing for proc0
    -        pub const PROC0_INTS0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO0_LEVEL_LOW: u1,
    -            GPIO0_LEVEL_HIGH: u1,
    -            GPIO0_EDGE_LOW: u1,
    -            GPIO0_EDGE_HIGH: u1,
    -            GPIO1_LEVEL_LOW: u1,
    -            GPIO1_LEVEL_HIGH: u1,
    -            GPIO1_EDGE_LOW: u1,
    -            GPIO1_EDGE_HIGH: u1,
    -            GPIO2_LEVEL_LOW: u1,
    -            GPIO2_LEVEL_HIGH: u1,
    -            GPIO2_EDGE_LOW: u1,
    -            GPIO2_EDGE_HIGH: u1,
    -            GPIO3_LEVEL_LOW: u1,
    -            GPIO3_LEVEL_HIGH: u1,
    -            GPIO3_EDGE_LOW: u1,
    -            GPIO3_EDGE_HIGH: u1,
    -            GPIO4_LEVEL_LOW: u1,
    -            GPIO4_LEVEL_HIGH: u1,
    -            GPIO4_EDGE_LOW: u1,
    -            GPIO4_EDGE_HIGH: u1,
    -            GPIO5_LEVEL_LOW: u1,
    -            GPIO5_LEVEL_HIGH: u1,
    -            GPIO5_EDGE_LOW: u1,
    -            GPIO5_EDGE_HIGH: u1,
    -            GPIO6_LEVEL_LOW: u1,
    -            GPIO6_LEVEL_HIGH: u1,
    -            GPIO6_EDGE_LOW: u1,
    -            GPIO6_EDGE_HIGH: u1,
    -            GPIO7_LEVEL_LOW: u1,
    -            GPIO7_LEVEL_HIGH: u1,
    -            GPIO7_EDGE_LOW: u1,
    -            GPIO7_EDGE_HIGH: u1,
    -        }), base_address + 0x120);
    -
    -        /// address: 0x40014124
    -        /// Interrupt status after masking & forcing for proc0
    -        pub const PROC0_INTS1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO8_LEVEL_LOW: u1,
    -            GPIO8_LEVEL_HIGH: u1,
    -            GPIO8_EDGE_LOW: u1,
    -            GPIO8_EDGE_HIGH: u1,
    -            GPIO9_LEVEL_LOW: u1,
    -            GPIO9_LEVEL_HIGH: u1,
    -            GPIO9_EDGE_LOW: u1,
    -            GPIO9_EDGE_HIGH: u1,
    -            GPIO10_LEVEL_LOW: u1,
    -            GPIO10_LEVEL_HIGH: u1,
    -            GPIO10_EDGE_LOW: u1,
    -            GPIO10_EDGE_HIGH: u1,
    -            GPIO11_LEVEL_LOW: u1,
    -            GPIO11_LEVEL_HIGH: u1,
    -            GPIO11_EDGE_LOW: u1,
    -            GPIO11_EDGE_HIGH: u1,
    -            GPIO12_LEVEL_LOW: u1,
    -            GPIO12_LEVEL_HIGH: u1,
    -            GPIO12_EDGE_LOW: u1,
    -            GPIO12_EDGE_HIGH: u1,
    -            GPIO13_LEVEL_LOW: u1,
    -            GPIO13_LEVEL_HIGH: u1,
    -            GPIO13_EDGE_LOW: u1,
    -            GPIO13_EDGE_HIGH: u1,
    -            GPIO14_LEVEL_LOW: u1,
    -            GPIO14_LEVEL_HIGH: u1,
    -            GPIO14_EDGE_LOW: u1,
    -            GPIO14_EDGE_HIGH: u1,
    -            GPIO15_LEVEL_LOW: u1,
    -            GPIO15_LEVEL_HIGH: u1,
    -            GPIO15_EDGE_LOW: u1,
    -            GPIO15_EDGE_HIGH: u1,
    -        }), base_address + 0x124);
    -
    -        /// address: 0x40014128
    -        /// Interrupt status after masking & forcing for proc0
    -        pub const PROC0_INTS2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO16_LEVEL_LOW: u1,
    -            GPIO16_LEVEL_HIGH: u1,
    -            GPIO16_EDGE_LOW: u1,
    -            GPIO16_EDGE_HIGH: u1,
    -            GPIO17_LEVEL_LOW: u1,
    -            GPIO17_LEVEL_HIGH: u1,
    -            GPIO17_EDGE_LOW: u1,
    -            GPIO17_EDGE_HIGH: u1,
    -            GPIO18_LEVEL_LOW: u1,
    -            GPIO18_LEVEL_HIGH: u1,
    -            GPIO18_EDGE_LOW: u1,
    -            GPIO18_EDGE_HIGH: u1,
    -            GPIO19_LEVEL_LOW: u1,
    -            GPIO19_LEVEL_HIGH: u1,
    -            GPIO19_EDGE_LOW: u1,
    -            GPIO19_EDGE_HIGH: u1,
    -            GPIO20_LEVEL_LOW: u1,
    -            GPIO20_LEVEL_HIGH: u1,
    -            GPIO20_EDGE_LOW: u1,
    -            GPIO20_EDGE_HIGH: u1,
    -            GPIO21_LEVEL_LOW: u1,
    -            GPIO21_LEVEL_HIGH: u1,
    -            GPIO21_EDGE_LOW: u1,
    -            GPIO21_EDGE_HIGH: u1,
    -            GPIO22_LEVEL_LOW: u1,
    -            GPIO22_LEVEL_HIGH: u1,
    -            GPIO22_EDGE_LOW: u1,
    -            GPIO22_EDGE_HIGH: u1,
    -            GPIO23_LEVEL_LOW: u1,
    -            GPIO23_LEVEL_HIGH: u1,
    -            GPIO23_EDGE_LOW: u1,
    -            GPIO23_EDGE_HIGH: u1,
    -        }), base_address + 0x128);
    -
    -        /// address: 0x4001412c
    -        /// Interrupt status after masking & forcing for proc0
    -        pub const PROC0_INTS3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO24_LEVEL_LOW: u1,
    -            GPIO24_LEVEL_HIGH: u1,
    -            GPIO24_EDGE_LOW: u1,
    -            GPIO24_EDGE_HIGH: u1,
    -            GPIO25_LEVEL_LOW: u1,
    -            GPIO25_LEVEL_HIGH: u1,
    -            GPIO25_EDGE_LOW: u1,
    -            GPIO25_EDGE_HIGH: u1,
    -            GPIO26_LEVEL_LOW: u1,
    -            GPIO26_LEVEL_HIGH: u1,
    -            GPIO26_EDGE_LOW: u1,
    -            GPIO26_EDGE_HIGH: u1,
    -            GPIO27_LEVEL_LOW: u1,
    -            GPIO27_LEVEL_HIGH: u1,
    -            GPIO27_EDGE_LOW: u1,
    -            GPIO27_EDGE_HIGH: u1,
    -            GPIO28_LEVEL_LOW: u1,
    -            GPIO28_LEVEL_HIGH: u1,
    -            GPIO28_EDGE_LOW: u1,
    -            GPIO28_EDGE_HIGH: u1,
    -            GPIO29_LEVEL_LOW: u1,
    -            GPIO29_LEVEL_HIGH: u1,
    -            GPIO29_EDGE_LOW: u1,
    -            GPIO29_EDGE_HIGH: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0x12c);
    -
    -        /// address: 0x40014130
    -        /// Interrupt Enable for proc1
    -        pub const PROC1_INTE0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO0_LEVEL_LOW: u1,
    -            GPIO0_LEVEL_HIGH: u1,
    -            GPIO0_EDGE_LOW: u1,
    -            GPIO0_EDGE_HIGH: u1,
    -            GPIO1_LEVEL_LOW: u1,
    -            GPIO1_LEVEL_HIGH: u1,
    -            GPIO1_EDGE_LOW: u1,
    -            GPIO1_EDGE_HIGH: u1,
    -            GPIO2_LEVEL_LOW: u1,
    -            GPIO2_LEVEL_HIGH: u1,
    -            GPIO2_EDGE_LOW: u1,
    -            GPIO2_EDGE_HIGH: u1,
    -            GPIO3_LEVEL_LOW: u1,
    -            GPIO3_LEVEL_HIGH: u1,
    -            GPIO3_EDGE_LOW: u1,
    -            GPIO3_EDGE_HIGH: u1,
    -            GPIO4_LEVEL_LOW: u1,
    -            GPIO4_LEVEL_HIGH: u1,
    -            GPIO4_EDGE_LOW: u1,
    -            GPIO4_EDGE_HIGH: u1,
    -            GPIO5_LEVEL_LOW: u1,
    -            GPIO5_LEVEL_HIGH: u1,
    -            GPIO5_EDGE_LOW: u1,
    -            GPIO5_EDGE_HIGH: u1,
    -            GPIO6_LEVEL_LOW: u1,
    -            GPIO6_LEVEL_HIGH: u1,
    -            GPIO6_EDGE_LOW: u1,
    -            GPIO6_EDGE_HIGH: u1,
    -            GPIO7_LEVEL_LOW: u1,
    -            GPIO7_LEVEL_HIGH: u1,
    -            GPIO7_EDGE_LOW: u1,
    -            GPIO7_EDGE_HIGH: u1,
    -        }), base_address + 0x130);
    -
    -        /// address: 0x40014134
    -        /// Interrupt Enable for proc1
    -        pub const PROC1_INTE1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO8_LEVEL_LOW: u1,
    -            GPIO8_LEVEL_HIGH: u1,
    -            GPIO8_EDGE_LOW: u1,
    -            GPIO8_EDGE_HIGH: u1,
    -            GPIO9_LEVEL_LOW: u1,
    -            GPIO9_LEVEL_HIGH: u1,
    -            GPIO9_EDGE_LOW: u1,
    -            GPIO9_EDGE_HIGH: u1,
    -            GPIO10_LEVEL_LOW: u1,
    -            GPIO10_LEVEL_HIGH: u1,
    -            GPIO10_EDGE_LOW: u1,
    -            GPIO10_EDGE_HIGH: u1,
    -            GPIO11_LEVEL_LOW: u1,
    -            GPIO11_LEVEL_HIGH: u1,
    -            GPIO11_EDGE_LOW: u1,
    -            GPIO11_EDGE_HIGH: u1,
    -            GPIO12_LEVEL_LOW: u1,
    -            GPIO12_LEVEL_HIGH: u1,
    -            GPIO12_EDGE_LOW: u1,
    -            GPIO12_EDGE_HIGH: u1,
    -            GPIO13_LEVEL_LOW: u1,
    -            GPIO13_LEVEL_HIGH: u1,
    -            GPIO13_EDGE_LOW: u1,
    -            GPIO13_EDGE_HIGH: u1,
    -            GPIO14_LEVEL_LOW: u1,
    -            GPIO14_LEVEL_HIGH: u1,
    -            GPIO14_EDGE_LOW: u1,
    -            GPIO14_EDGE_HIGH: u1,
    -            GPIO15_LEVEL_LOW: u1,
    -            GPIO15_LEVEL_HIGH: u1,
    -            GPIO15_EDGE_LOW: u1,
    -            GPIO15_EDGE_HIGH: u1,
    -        }), base_address + 0x134);
    -
    -        /// address: 0x40014138
    -        /// Interrupt Enable for proc1
    -        pub const PROC1_INTE2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO16_LEVEL_LOW: u1,
    -            GPIO16_LEVEL_HIGH: u1,
    -            GPIO16_EDGE_LOW: u1,
    -            GPIO16_EDGE_HIGH: u1,
    -            GPIO17_LEVEL_LOW: u1,
    -            GPIO17_LEVEL_HIGH: u1,
    -            GPIO17_EDGE_LOW: u1,
    -            GPIO17_EDGE_HIGH: u1,
    -            GPIO18_LEVEL_LOW: u1,
    -            GPIO18_LEVEL_HIGH: u1,
    -            GPIO18_EDGE_LOW: u1,
    -            GPIO18_EDGE_HIGH: u1,
    -            GPIO19_LEVEL_LOW: u1,
    -            GPIO19_LEVEL_HIGH: u1,
    -            GPIO19_EDGE_LOW: u1,
    -            GPIO19_EDGE_HIGH: u1,
    -            GPIO20_LEVEL_LOW: u1,
    -            GPIO20_LEVEL_HIGH: u1,
    -            GPIO20_EDGE_LOW: u1,
    -            GPIO20_EDGE_HIGH: u1,
    -            GPIO21_LEVEL_LOW: u1,
    -            GPIO21_LEVEL_HIGH: u1,
    -            GPIO21_EDGE_LOW: u1,
    -            GPIO21_EDGE_HIGH: u1,
    -            GPIO22_LEVEL_LOW: u1,
    -            GPIO22_LEVEL_HIGH: u1,
    -            GPIO22_EDGE_LOW: u1,
    -            GPIO22_EDGE_HIGH: u1,
    -            GPIO23_LEVEL_LOW: u1,
    -            GPIO23_LEVEL_HIGH: u1,
    -            GPIO23_EDGE_LOW: u1,
    -            GPIO23_EDGE_HIGH: u1,
    -        }), base_address + 0x138);
    -
    -        /// address: 0x4001413c
    -        /// Interrupt Enable for proc1
    -        pub const PROC1_INTE3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO24_LEVEL_LOW: u1,
    -            GPIO24_LEVEL_HIGH: u1,
    -            GPIO24_EDGE_LOW: u1,
    -            GPIO24_EDGE_HIGH: u1,
    -            GPIO25_LEVEL_LOW: u1,
    -            GPIO25_LEVEL_HIGH: u1,
    -            GPIO25_EDGE_LOW: u1,
    -            GPIO25_EDGE_HIGH: u1,
    -            GPIO26_LEVEL_LOW: u1,
    -            GPIO26_LEVEL_HIGH: u1,
    -            GPIO26_EDGE_LOW: u1,
    -            GPIO26_EDGE_HIGH: u1,
    -            GPIO27_LEVEL_LOW: u1,
    -            GPIO27_LEVEL_HIGH: u1,
    -            GPIO27_EDGE_LOW: u1,
    -            GPIO27_EDGE_HIGH: u1,
    -            GPIO28_LEVEL_LOW: u1,
    -            GPIO28_LEVEL_HIGH: u1,
    -            GPIO28_EDGE_LOW: u1,
    -            GPIO28_EDGE_HIGH: u1,
    -            GPIO29_LEVEL_LOW: u1,
    -            GPIO29_LEVEL_HIGH: u1,
    -            GPIO29_EDGE_LOW: u1,
    -            GPIO29_EDGE_HIGH: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0x13c);
    -
    -        /// address: 0x40014140
    -        /// Interrupt Force for proc1
    -        pub const PROC1_INTF0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO0_LEVEL_LOW: u1,
    -            GPIO0_LEVEL_HIGH: u1,
    -            GPIO0_EDGE_LOW: u1,
    -            GPIO0_EDGE_HIGH: u1,
    -            GPIO1_LEVEL_LOW: u1,
    -            GPIO1_LEVEL_HIGH: u1,
    -            GPIO1_EDGE_LOW: u1,
    -            GPIO1_EDGE_HIGH: u1,
    -            GPIO2_LEVEL_LOW: u1,
    -            GPIO2_LEVEL_HIGH: u1,
    -            GPIO2_EDGE_LOW: u1,
    -            GPIO2_EDGE_HIGH: u1,
    -            GPIO3_LEVEL_LOW: u1,
    -            GPIO3_LEVEL_HIGH: u1,
    -            GPIO3_EDGE_LOW: u1,
    -            GPIO3_EDGE_HIGH: u1,
    -            GPIO4_LEVEL_LOW: u1,
    -            GPIO4_LEVEL_HIGH: u1,
    -            GPIO4_EDGE_LOW: u1,
    -            GPIO4_EDGE_HIGH: u1,
    -            GPIO5_LEVEL_LOW: u1,
    -            GPIO5_LEVEL_HIGH: u1,
    -            GPIO5_EDGE_LOW: u1,
    -            GPIO5_EDGE_HIGH: u1,
    -            GPIO6_LEVEL_LOW: u1,
    -            GPIO6_LEVEL_HIGH: u1,
    -            GPIO6_EDGE_LOW: u1,
    -            GPIO6_EDGE_HIGH: u1,
    -            GPIO7_LEVEL_LOW: u1,
    -            GPIO7_LEVEL_HIGH: u1,
    -            GPIO7_EDGE_LOW: u1,
    -            GPIO7_EDGE_HIGH: u1,
    -        }), base_address + 0x140);
    -
    -        /// address: 0x40014144
    -        /// Interrupt Force for proc1
    -        pub const PROC1_INTF1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO8_LEVEL_LOW: u1,
    -            GPIO8_LEVEL_HIGH: u1,
    -            GPIO8_EDGE_LOW: u1,
    -            GPIO8_EDGE_HIGH: u1,
    -            GPIO9_LEVEL_LOW: u1,
    -            GPIO9_LEVEL_HIGH: u1,
    -            GPIO9_EDGE_LOW: u1,
    -            GPIO9_EDGE_HIGH: u1,
    -            GPIO10_LEVEL_LOW: u1,
    -            GPIO10_LEVEL_HIGH: u1,
    -            GPIO10_EDGE_LOW: u1,
    -            GPIO10_EDGE_HIGH: u1,
    -            GPIO11_LEVEL_LOW: u1,
    -            GPIO11_LEVEL_HIGH: u1,
    -            GPIO11_EDGE_LOW: u1,
    -            GPIO11_EDGE_HIGH: u1,
    -            GPIO12_LEVEL_LOW: u1,
    -            GPIO12_LEVEL_HIGH: u1,
    -            GPIO12_EDGE_LOW: u1,
    -            GPIO12_EDGE_HIGH: u1,
    -            GPIO13_LEVEL_LOW: u1,
    -            GPIO13_LEVEL_HIGH: u1,
    -            GPIO13_EDGE_LOW: u1,
    -            GPIO13_EDGE_HIGH: u1,
    -            GPIO14_LEVEL_LOW: u1,
    -            GPIO14_LEVEL_HIGH: u1,
    -            GPIO14_EDGE_LOW: u1,
    -            GPIO14_EDGE_HIGH: u1,
    -            GPIO15_LEVEL_LOW: u1,
    -            GPIO15_LEVEL_HIGH: u1,
    -            GPIO15_EDGE_LOW: u1,
    -            GPIO15_EDGE_HIGH: u1,
    -        }), base_address + 0x144);
    -
    -        /// address: 0x40014148
    -        /// Interrupt Force for proc1
    -        pub const PROC1_INTF2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO16_LEVEL_LOW: u1,
    -            GPIO16_LEVEL_HIGH: u1,
    -            GPIO16_EDGE_LOW: u1,
    -            GPIO16_EDGE_HIGH: u1,
    -            GPIO17_LEVEL_LOW: u1,
    -            GPIO17_LEVEL_HIGH: u1,
    -            GPIO17_EDGE_LOW: u1,
    -            GPIO17_EDGE_HIGH: u1,
    -            GPIO18_LEVEL_LOW: u1,
    -            GPIO18_LEVEL_HIGH: u1,
    -            GPIO18_EDGE_LOW: u1,
    -            GPIO18_EDGE_HIGH: u1,
    -            GPIO19_LEVEL_LOW: u1,
    -            GPIO19_LEVEL_HIGH: u1,
    -            GPIO19_EDGE_LOW: u1,
    -            GPIO19_EDGE_HIGH: u1,
    -            GPIO20_LEVEL_LOW: u1,
    -            GPIO20_LEVEL_HIGH: u1,
    -            GPIO20_EDGE_LOW: u1,
    -            GPIO20_EDGE_HIGH: u1,
    -            GPIO21_LEVEL_LOW: u1,
    -            GPIO21_LEVEL_HIGH: u1,
    -            GPIO21_EDGE_LOW: u1,
    -            GPIO21_EDGE_HIGH: u1,
    -            GPIO22_LEVEL_LOW: u1,
    -            GPIO22_LEVEL_HIGH: u1,
    -            GPIO22_EDGE_LOW: u1,
    -            GPIO22_EDGE_HIGH: u1,
    -            GPIO23_LEVEL_LOW: u1,
    -            GPIO23_LEVEL_HIGH: u1,
    -            GPIO23_EDGE_LOW: u1,
    -            GPIO23_EDGE_HIGH: u1,
    -        }), base_address + 0x148);
    -
    -        /// address: 0x4001414c
    -        /// Interrupt Force for proc1
    -        pub const PROC1_INTF3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO24_LEVEL_LOW: u1,
    -            GPIO24_LEVEL_HIGH: u1,
    -            GPIO24_EDGE_LOW: u1,
    -            GPIO24_EDGE_HIGH: u1,
    -            GPIO25_LEVEL_LOW: u1,
    -            GPIO25_LEVEL_HIGH: u1,
    -            GPIO25_EDGE_LOW: u1,
    -            GPIO25_EDGE_HIGH: u1,
    -            GPIO26_LEVEL_LOW: u1,
    -            GPIO26_LEVEL_HIGH: u1,
    -            GPIO26_EDGE_LOW: u1,
    -            GPIO26_EDGE_HIGH: u1,
    -            GPIO27_LEVEL_LOW: u1,
    -            GPIO27_LEVEL_HIGH: u1,
    -            GPIO27_EDGE_LOW: u1,
    -            GPIO27_EDGE_HIGH: u1,
    -            GPIO28_LEVEL_LOW: u1,
    -            GPIO28_LEVEL_HIGH: u1,
    -            GPIO28_EDGE_LOW: u1,
    -            GPIO28_EDGE_HIGH: u1,
    -            GPIO29_LEVEL_LOW: u1,
    -            GPIO29_LEVEL_HIGH: u1,
    -            GPIO29_EDGE_LOW: u1,
    -            GPIO29_EDGE_HIGH: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0x14c);
    -
    -        /// address: 0x40014150
    -        /// Interrupt status after masking & forcing for proc1
    -        pub const PROC1_INTS0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO0_LEVEL_LOW: u1,
    -            GPIO0_LEVEL_HIGH: u1,
    -            GPIO0_EDGE_LOW: u1,
    -            GPIO0_EDGE_HIGH: u1,
    -            GPIO1_LEVEL_LOW: u1,
    -            GPIO1_LEVEL_HIGH: u1,
    -            GPIO1_EDGE_LOW: u1,
    -            GPIO1_EDGE_HIGH: u1,
    -            GPIO2_LEVEL_LOW: u1,
    -            GPIO2_LEVEL_HIGH: u1,
    -            GPIO2_EDGE_LOW: u1,
    -            GPIO2_EDGE_HIGH: u1,
    -            GPIO3_LEVEL_LOW: u1,
    -            GPIO3_LEVEL_HIGH: u1,
    -            GPIO3_EDGE_LOW: u1,
    -            GPIO3_EDGE_HIGH: u1,
    -            GPIO4_LEVEL_LOW: u1,
    -            GPIO4_LEVEL_HIGH: u1,
    -            GPIO4_EDGE_LOW: u1,
    -            GPIO4_EDGE_HIGH: u1,
    -            GPIO5_LEVEL_LOW: u1,
    -            GPIO5_LEVEL_HIGH: u1,
    -            GPIO5_EDGE_LOW: u1,
    -            GPIO5_EDGE_HIGH: u1,
    -            GPIO6_LEVEL_LOW: u1,
    -            GPIO6_LEVEL_HIGH: u1,
    -            GPIO6_EDGE_LOW: u1,
    -            GPIO6_EDGE_HIGH: u1,
    -            GPIO7_LEVEL_LOW: u1,
    -            GPIO7_LEVEL_HIGH: u1,
    -            GPIO7_EDGE_LOW: u1,
    -            GPIO7_EDGE_HIGH: u1,
    -        }), base_address + 0x150);
    -
    -        /// address: 0x40014154
    -        /// Interrupt status after masking & forcing for proc1
    -        pub const PROC1_INTS1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO8_LEVEL_LOW: u1,
    -            GPIO8_LEVEL_HIGH: u1,
    -            GPIO8_EDGE_LOW: u1,
    -            GPIO8_EDGE_HIGH: u1,
    -            GPIO9_LEVEL_LOW: u1,
    -            GPIO9_LEVEL_HIGH: u1,
    -            GPIO9_EDGE_LOW: u1,
    -            GPIO9_EDGE_HIGH: u1,
    -            GPIO10_LEVEL_LOW: u1,
    -            GPIO10_LEVEL_HIGH: u1,
    -            GPIO10_EDGE_LOW: u1,
    -            GPIO10_EDGE_HIGH: u1,
    -            GPIO11_LEVEL_LOW: u1,
    -            GPIO11_LEVEL_HIGH: u1,
    -            GPIO11_EDGE_LOW: u1,
    -            GPIO11_EDGE_HIGH: u1,
    -            GPIO12_LEVEL_LOW: u1,
    -            GPIO12_LEVEL_HIGH: u1,
    -            GPIO12_EDGE_LOW: u1,
    -            GPIO12_EDGE_HIGH: u1,
    -            GPIO13_LEVEL_LOW: u1,
    -            GPIO13_LEVEL_HIGH: u1,
    -            GPIO13_EDGE_LOW: u1,
    -            GPIO13_EDGE_HIGH: u1,
    -            GPIO14_LEVEL_LOW: u1,
    -            GPIO14_LEVEL_HIGH: u1,
    -            GPIO14_EDGE_LOW: u1,
    -            GPIO14_EDGE_HIGH: u1,
    -            GPIO15_LEVEL_LOW: u1,
    -            GPIO15_LEVEL_HIGH: u1,
    -            GPIO15_EDGE_LOW: u1,
    -            GPIO15_EDGE_HIGH: u1,
    -        }), base_address + 0x154);
    -
    -        /// address: 0x40014158
    -        /// Interrupt status after masking & forcing for proc1
    -        pub const PROC1_INTS2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO16_LEVEL_LOW: u1,
    -            GPIO16_LEVEL_HIGH: u1,
    -            GPIO16_EDGE_LOW: u1,
    -            GPIO16_EDGE_HIGH: u1,
    -            GPIO17_LEVEL_LOW: u1,
    -            GPIO17_LEVEL_HIGH: u1,
    -            GPIO17_EDGE_LOW: u1,
    -            GPIO17_EDGE_HIGH: u1,
    -            GPIO18_LEVEL_LOW: u1,
    -            GPIO18_LEVEL_HIGH: u1,
    -            GPIO18_EDGE_LOW: u1,
    -            GPIO18_EDGE_HIGH: u1,
    -            GPIO19_LEVEL_LOW: u1,
    -            GPIO19_LEVEL_HIGH: u1,
    -            GPIO19_EDGE_LOW: u1,
    -            GPIO19_EDGE_HIGH: u1,
    -            GPIO20_LEVEL_LOW: u1,
    -            GPIO20_LEVEL_HIGH: u1,
    -            GPIO20_EDGE_LOW: u1,
    -            GPIO20_EDGE_HIGH: u1,
    -            GPIO21_LEVEL_LOW: u1,
    -            GPIO21_LEVEL_HIGH: u1,
    -            GPIO21_EDGE_LOW: u1,
    -            GPIO21_EDGE_HIGH: u1,
    -            GPIO22_LEVEL_LOW: u1,
    -            GPIO22_LEVEL_HIGH: u1,
    -            GPIO22_EDGE_LOW: u1,
    -            GPIO22_EDGE_HIGH: u1,
    -            GPIO23_LEVEL_LOW: u1,
    -            GPIO23_LEVEL_HIGH: u1,
    -            GPIO23_EDGE_LOW: u1,
    -            GPIO23_EDGE_HIGH: u1,
    -        }), base_address + 0x158);
    -
    -        /// address: 0x4001415c
    -        /// Interrupt status after masking & forcing for proc1
    -        pub const PROC1_INTS3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO24_LEVEL_LOW: u1,
    -            GPIO24_LEVEL_HIGH: u1,
    -            GPIO24_EDGE_LOW: u1,
    -            GPIO24_EDGE_HIGH: u1,
    -            GPIO25_LEVEL_LOW: u1,
    -            GPIO25_LEVEL_HIGH: u1,
    -            GPIO25_EDGE_LOW: u1,
    -            GPIO25_EDGE_HIGH: u1,
    -            GPIO26_LEVEL_LOW: u1,
    -            GPIO26_LEVEL_HIGH: u1,
    -            GPIO26_EDGE_LOW: u1,
    -            GPIO26_EDGE_HIGH: u1,
    -            GPIO27_LEVEL_LOW: u1,
    -            GPIO27_LEVEL_HIGH: u1,
    -            GPIO27_EDGE_LOW: u1,
    -            GPIO27_EDGE_HIGH: u1,
    -            GPIO28_LEVEL_LOW: u1,
    -            GPIO28_LEVEL_HIGH: u1,
    -            GPIO28_EDGE_LOW: u1,
    -            GPIO28_EDGE_HIGH: u1,
    -            GPIO29_LEVEL_LOW: u1,
    -            GPIO29_LEVEL_HIGH: u1,
    -            GPIO29_EDGE_LOW: u1,
    -            GPIO29_EDGE_HIGH: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0x15c);
    -
    -        /// address: 0x40014160
    -        /// Interrupt Enable for dormant_wake
    -        pub const DORMANT_WAKE_INTE0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO0_LEVEL_LOW: u1,
    -            GPIO0_LEVEL_HIGH: u1,
    -            GPIO0_EDGE_LOW: u1,
    -            GPIO0_EDGE_HIGH: u1,
    -            GPIO1_LEVEL_LOW: u1,
    -            GPIO1_LEVEL_HIGH: u1,
    -            GPIO1_EDGE_LOW: u1,
    -            GPIO1_EDGE_HIGH: u1,
    -            GPIO2_LEVEL_LOW: u1,
    -            GPIO2_LEVEL_HIGH: u1,
    -            GPIO2_EDGE_LOW: u1,
    -            GPIO2_EDGE_HIGH: u1,
    -            GPIO3_LEVEL_LOW: u1,
    -            GPIO3_LEVEL_HIGH: u1,
    -            GPIO3_EDGE_LOW: u1,
    -            GPIO3_EDGE_HIGH: u1,
    -            GPIO4_LEVEL_LOW: u1,
    -            GPIO4_LEVEL_HIGH: u1,
    -            GPIO4_EDGE_LOW: u1,
    -            GPIO4_EDGE_HIGH: u1,
    -            GPIO5_LEVEL_LOW: u1,
    -            GPIO5_LEVEL_HIGH: u1,
    -            GPIO5_EDGE_LOW: u1,
    -            GPIO5_EDGE_HIGH: u1,
    -            GPIO6_LEVEL_LOW: u1,
    -            GPIO6_LEVEL_HIGH: u1,
    -            GPIO6_EDGE_LOW: u1,
    -            GPIO6_EDGE_HIGH: u1,
    -            GPIO7_LEVEL_LOW: u1,
    -            GPIO7_LEVEL_HIGH: u1,
    -            GPIO7_EDGE_LOW: u1,
    -            GPIO7_EDGE_HIGH: u1,
    -        }), base_address + 0x160);
    -
    -        /// address: 0x40014164
    -        /// Interrupt Enable for dormant_wake
    -        pub const DORMANT_WAKE_INTE1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO8_LEVEL_LOW: u1,
    -            GPIO8_LEVEL_HIGH: u1,
    -            GPIO8_EDGE_LOW: u1,
    -            GPIO8_EDGE_HIGH: u1,
    -            GPIO9_LEVEL_LOW: u1,
    -            GPIO9_LEVEL_HIGH: u1,
    -            GPIO9_EDGE_LOW: u1,
    -            GPIO9_EDGE_HIGH: u1,
    -            GPIO10_LEVEL_LOW: u1,
    -            GPIO10_LEVEL_HIGH: u1,
    -            GPIO10_EDGE_LOW: u1,
    -            GPIO10_EDGE_HIGH: u1,
    -            GPIO11_LEVEL_LOW: u1,
    -            GPIO11_LEVEL_HIGH: u1,
    -            GPIO11_EDGE_LOW: u1,
    -            GPIO11_EDGE_HIGH: u1,
    -            GPIO12_LEVEL_LOW: u1,
    -            GPIO12_LEVEL_HIGH: u1,
    -            GPIO12_EDGE_LOW: u1,
    -            GPIO12_EDGE_HIGH: u1,
    -            GPIO13_LEVEL_LOW: u1,
    -            GPIO13_LEVEL_HIGH: u1,
    -            GPIO13_EDGE_LOW: u1,
    -            GPIO13_EDGE_HIGH: u1,
    -            GPIO14_LEVEL_LOW: u1,
    -            GPIO14_LEVEL_HIGH: u1,
    -            GPIO14_EDGE_LOW: u1,
    -            GPIO14_EDGE_HIGH: u1,
    -            GPIO15_LEVEL_LOW: u1,
    -            GPIO15_LEVEL_HIGH: u1,
    -            GPIO15_EDGE_LOW: u1,
    -            GPIO15_EDGE_HIGH: u1,
    -        }), base_address + 0x164);
    -
    -        /// address: 0x40014168
    -        /// Interrupt Enable for dormant_wake
    -        pub const DORMANT_WAKE_INTE2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO16_LEVEL_LOW: u1,
    -            GPIO16_LEVEL_HIGH: u1,
    -            GPIO16_EDGE_LOW: u1,
    -            GPIO16_EDGE_HIGH: u1,
    -            GPIO17_LEVEL_LOW: u1,
    -            GPIO17_LEVEL_HIGH: u1,
    -            GPIO17_EDGE_LOW: u1,
    -            GPIO17_EDGE_HIGH: u1,
    -            GPIO18_LEVEL_LOW: u1,
    -            GPIO18_LEVEL_HIGH: u1,
    -            GPIO18_EDGE_LOW: u1,
    -            GPIO18_EDGE_HIGH: u1,
    -            GPIO19_LEVEL_LOW: u1,
    -            GPIO19_LEVEL_HIGH: u1,
    -            GPIO19_EDGE_LOW: u1,
    -            GPIO19_EDGE_HIGH: u1,
    -            GPIO20_LEVEL_LOW: u1,
    -            GPIO20_LEVEL_HIGH: u1,
    -            GPIO20_EDGE_LOW: u1,
    -            GPIO20_EDGE_HIGH: u1,
    -            GPIO21_LEVEL_LOW: u1,
    -            GPIO21_LEVEL_HIGH: u1,
    -            GPIO21_EDGE_LOW: u1,
    -            GPIO21_EDGE_HIGH: u1,
    -            GPIO22_LEVEL_LOW: u1,
    -            GPIO22_LEVEL_HIGH: u1,
    -            GPIO22_EDGE_LOW: u1,
    -            GPIO22_EDGE_HIGH: u1,
    -            GPIO23_LEVEL_LOW: u1,
    -            GPIO23_LEVEL_HIGH: u1,
    -            GPIO23_EDGE_LOW: u1,
    -            GPIO23_EDGE_HIGH: u1,
    -        }), base_address + 0x168);
    -
    -        /// address: 0x4001416c
    -        /// Interrupt Enable for dormant_wake
    -        pub const DORMANT_WAKE_INTE3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO24_LEVEL_LOW: u1,
    -            GPIO24_LEVEL_HIGH: u1,
    -            GPIO24_EDGE_LOW: u1,
    -            GPIO24_EDGE_HIGH: u1,
    -            GPIO25_LEVEL_LOW: u1,
    -            GPIO25_LEVEL_HIGH: u1,
    -            GPIO25_EDGE_LOW: u1,
    -            GPIO25_EDGE_HIGH: u1,
    -            GPIO26_LEVEL_LOW: u1,
    -            GPIO26_LEVEL_HIGH: u1,
    -            GPIO26_EDGE_LOW: u1,
    -            GPIO26_EDGE_HIGH: u1,
    -            GPIO27_LEVEL_LOW: u1,
    -            GPIO27_LEVEL_HIGH: u1,
    -            GPIO27_EDGE_LOW: u1,
    -            GPIO27_EDGE_HIGH: u1,
    -            GPIO28_LEVEL_LOW: u1,
    -            GPIO28_LEVEL_HIGH: u1,
    -            GPIO28_EDGE_LOW: u1,
    -            GPIO28_EDGE_HIGH: u1,
    -            GPIO29_LEVEL_LOW: u1,
    -            GPIO29_LEVEL_HIGH: u1,
    -            GPIO29_EDGE_LOW: u1,
    -            GPIO29_EDGE_HIGH: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0x16c);
    -
    -        /// address: 0x40014170
    -        /// Interrupt Force for dormant_wake
    -        pub const DORMANT_WAKE_INTF0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO0_LEVEL_LOW: u1,
    -            GPIO0_LEVEL_HIGH: u1,
    -            GPIO0_EDGE_LOW: u1,
    -            GPIO0_EDGE_HIGH: u1,
    -            GPIO1_LEVEL_LOW: u1,
    -            GPIO1_LEVEL_HIGH: u1,
    -            GPIO1_EDGE_LOW: u1,
    -            GPIO1_EDGE_HIGH: u1,
    -            GPIO2_LEVEL_LOW: u1,
    -            GPIO2_LEVEL_HIGH: u1,
    -            GPIO2_EDGE_LOW: u1,
    -            GPIO2_EDGE_HIGH: u1,
    -            GPIO3_LEVEL_LOW: u1,
    -            GPIO3_LEVEL_HIGH: u1,
    -            GPIO3_EDGE_LOW: u1,
    -            GPIO3_EDGE_HIGH: u1,
    -            GPIO4_LEVEL_LOW: u1,
    -            GPIO4_LEVEL_HIGH: u1,
    -            GPIO4_EDGE_LOW: u1,
    -            GPIO4_EDGE_HIGH: u1,
    -            GPIO5_LEVEL_LOW: u1,
    -            GPIO5_LEVEL_HIGH: u1,
    -            GPIO5_EDGE_LOW: u1,
    -            GPIO5_EDGE_HIGH: u1,
    -            GPIO6_LEVEL_LOW: u1,
    -            GPIO6_LEVEL_HIGH: u1,
    -            GPIO6_EDGE_LOW: u1,
    -            GPIO6_EDGE_HIGH: u1,
    -            GPIO7_LEVEL_LOW: u1,
    -            GPIO7_LEVEL_HIGH: u1,
    -            GPIO7_EDGE_LOW: u1,
    -            GPIO7_EDGE_HIGH: u1,
    -        }), base_address + 0x170);
    -
    -        /// address: 0x40014174
    -        /// Interrupt Force for dormant_wake
    -        pub const DORMANT_WAKE_INTF1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO8_LEVEL_LOW: u1,
    -            GPIO8_LEVEL_HIGH: u1,
    -            GPIO8_EDGE_LOW: u1,
    -            GPIO8_EDGE_HIGH: u1,
    -            GPIO9_LEVEL_LOW: u1,
    -            GPIO9_LEVEL_HIGH: u1,
    -            GPIO9_EDGE_LOW: u1,
    -            GPIO9_EDGE_HIGH: u1,
    -            GPIO10_LEVEL_LOW: u1,
    -            GPIO10_LEVEL_HIGH: u1,
    -            GPIO10_EDGE_LOW: u1,
    -            GPIO10_EDGE_HIGH: u1,
    -            GPIO11_LEVEL_LOW: u1,
    -            GPIO11_LEVEL_HIGH: u1,
    -            GPIO11_EDGE_LOW: u1,
    -            GPIO11_EDGE_HIGH: u1,
    -            GPIO12_LEVEL_LOW: u1,
    -            GPIO12_LEVEL_HIGH: u1,
    -            GPIO12_EDGE_LOW: u1,
    -            GPIO12_EDGE_HIGH: u1,
    -            GPIO13_LEVEL_LOW: u1,
    -            GPIO13_LEVEL_HIGH: u1,
    -            GPIO13_EDGE_LOW: u1,
    -            GPIO13_EDGE_HIGH: u1,
    -            GPIO14_LEVEL_LOW: u1,
    -            GPIO14_LEVEL_HIGH: u1,
    -            GPIO14_EDGE_LOW: u1,
    -            GPIO14_EDGE_HIGH: u1,
    -            GPIO15_LEVEL_LOW: u1,
    -            GPIO15_LEVEL_HIGH: u1,
    -            GPIO15_EDGE_LOW: u1,
    -            GPIO15_EDGE_HIGH: u1,
    -        }), base_address + 0x174);
    -
    -        /// address: 0x40014178
    -        /// Interrupt Force for dormant_wake
    -        pub const DORMANT_WAKE_INTF2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO16_LEVEL_LOW: u1,
    -            GPIO16_LEVEL_HIGH: u1,
    -            GPIO16_EDGE_LOW: u1,
    -            GPIO16_EDGE_HIGH: u1,
    -            GPIO17_LEVEL_LOW: u1,
    -            GPIO17_LEVEL_HIGH: u1,
    -            GPIO17_EDGE_LOW: u1,
    -            GPIO17_EDGE_HIGH: u1,
    -            GPIO18_LEVEL_LOW: u1,
    -            GPIO18_LEVEL_HIGH: u1,
    -            GPIO18_EDGE_LOW: u1,
    -            GPIO18_EDGE_HIGH: u1,
    -            GPIO19_LEVEL_LOW: u1,
    -            GPIO19_LEVEL_HIGH: u1,
    -            GPIO19_EDGE_LOW: u1,
    -            GPIO19_EDGE_HIGH: u1,
    -            GPIO20_LEVEL_LOW: u1,
    -            GPIO20_LEVEL_HIGH: u1,
    -            GPIO20_EDGE_LOW: u1,
    -            GPIO20_EDGE_HIGH: u1,
    -            GPIO21_LEVEL_LOW: u1,
    -            GPIO21_LEVEL_HIGH: u1,
    -            GPIO21_EDGE_LOW: u1,
    -            GPIO21_EDGE_HIGH: u1,
    -            GPIO22_LEVEL_LOW: u1,
    -            GPIO22_LEVEL_HIGH: u1,
    -            GPIO22_EDGE_LOW: u1,
    -            GPIO22_EDGE_HIGH: u1,
    -            GPIO23_LEVEL_LOW: u1,
    -            GPIO23_LEVEL_HIGH: u1,
    -            GPIO23_EDGE_LOW: u1,
    -            GPIO23_EDGE_HIGH: u1,
    -        }), base_address + 0x178);
    -
    -        /// address: 0x4001417c
    -        /// Interrupt Force for dormant_wake
    -        pub const DORMANT_WAKE_INTF3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO24_LEVEL_LOW: u1,
    -            GPIO24_LEVEL_HIGH: u1,
    -            GPIO24_EDGE_LOW: u1,
    -            GPIO24_EDGE_HIGH: u1,
    -            GPIO25_LEVEL_LOW: u1,
    -            GPIO25_LEVEL_HIGH: u1,
    -            GPIO25_EDGE_LOW: u1,
    -            GPIO25_EDGE_HIGH: u1,
    -            GPIO26_LEVEL_LOW: u1,
    -            GPIO26_LEVEL_HIGH: u1,
    -            GPIO26_EDGE_LOW: u1,
    -            GPIO26_EDGE_HIGH: u1,
    -            GPIO27_LEVEL_LOW: u1,
    -            GPIO27_LEVEL_HIGH: u1,
    -            GPIO27_EDGE_LOW: u1,
    -            GPIO27_EDGE_HIGH: u1,
    -            GPIO28_LEVEL_LOW: u1,
    -            GPIO28_LEVEL_HIGH: u1,
    -            GPIO28_EDGE_LOW: u1,
    -            GPIO28_EDGE_HIGH: u1,
    -            GPIO29_LEVEL_LOW: u1,
    -            GPIO29_LEVEL_HIGH: u1,
    -            GPIO29_EDGE_LOW: u1,
    -            GPIO29_EDGE_HIGH: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0x17c);
    -
    -        /// address: 0x40014180
    -        /// Interrupt status after masking & forcing for dormant_wake
    -        pub const DORMANT_WAKE_INTS0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO0_LEVEL_LOW: u1,
    -            GPIO0_LEVEL_HIGH: u1,
    -            GPIO0_EDGE_LOW: u1,
    -            GPIO0_EDGE_HIGH: u1,
    -            GPIO1_LEVEL_LOW: u1,
    -            GPIO1_LEVEL_HIGH: u1,
    -            GPIO1_EDGE_LOW: u1,
    -            GPIO1_EDGE_HIGH: u1,
    -            GPIO2_LEVEL_LOW: u1,
    -            GPIO2_LEVEL_HIGH: u1,
    -            GPIO2_EDGE_LOW: u1,
    -            GPIO2_EDGE_HIGH: u1,
    -            GPIO3_LEVEL_LOW: u1,
    -            GPIO3_LEVEL_HIGH: u1,
    -            GPIO3_EDGE_LOW: u1,
    -            GPIO3_EDGE_HIGH: u1,
    -            GPIO4_LEVEL_LOW: u1,
    -            GPIO4_LEVEL_HIGH: u1,
    -            GPIO4_EDGE_LOW: u1,
    -            GPIO4_EDGE_HIGH: u1,
    -            GPIO5_LEVEL_LOW: u1,
    -            GPIO5_LEVEL_HIGH: u1,
    -            GPIO5_EDGE_LOW: u1,
    -            GPIO5_EDGE_HIGH: u1,
    -            GPIO6_LEVEL_LOW: u1,
    -            GPIO6_LEVEL_HIGH: u1,
    -            GPIO6_EDGE_LOW: u1,
    -            GPIO6_EDGE_HIGH: u1,
    -            GPIO7_LEVEL_LOW: u1,
    -            GPIO7_LEVEL_HIGH: u1,
    -            GPIO7_EDGE_LOW: u1,
    -            GPIO7_EDGE_HIGH: u1,
    -        }), base_address + 0x180);
    -
    -        /// address: 0x40014184
    -        /// Interrupt status after masking & forcing for dormant_wake
    -        pub const DORMANT_WAKE_INTS1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO8_LEVEL_LOW: u1,
    -            GPIO8_LEVEL_HIGH: u1,
    -            GPIO8_EDGE_LOW: u1,
    -            GPIO8_EDGE_HIGH: u1,
    -            GPIO9_LEVEL_LOW: u1,
    -            GPIO9_LEVEL_HIGH: u1,
    -            GPIO9_EDGE_LOW: u1,
    -            GPIO9_EDGE_HIGH: u1,
    -            GPIO10_LEVEL_LOW: u1,
    -            GPIO10_LEVEL_HIGH: u1,
    -            GPIO10_EDGE_LOW: u1,
    -            GPIO10_EDGE_HIGH: u1,
    -            GPIO11_LEVEL_LOW: u1,
    -            GPIO11_LEVEL_HIGH: u1,
    -            GPIO11_EDGE_LOW: u1,
    -            GPIO11_EDGE_HIGH: u1,
    -            GPIO12_LEVEL_LOW: u1,
    -            GPIO12_LEVEL_HIGH: u1,
    -            GPIO12_EDGE_LOW: u1,
    -            GPIO12_EDGE_HIGH: u1,
    -            GPIO13_LEVEL_LOW: u1,
    -            GPIO13_LEVEL_HIGH: u1,
    -            GPIO13_EDGE_LOW: u1,
    -            GPIO13_EDGE_HIGH: u1,
    -            GPIO14_LEVEL_LOW: u1,
    -            GPIO14_LEVEL_HIGH: u1,
    -            GPIO14_EDGE_LOW: u1,
    -            GPIO14_EDGE_HIGH: u1,
    -            GPIO15_LEVEL_LOW: u1,
    -            GPIO15_LEVEL_HIGH: u1,
    -            GPIO15_EDGE_LOW: u1,
    -            GPIO15_EDGE_HIGH: u1,
    -        }), base_address + 0x184);
    -
    -        /// address: 0x40014188
    -        /// Interrupt status after masking & forcing for dormant_wake
    -        pub const DORMANT_WAKE_INTS2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO16_LEVEL_LOW: u1,
    -            GPIO16_LEVEL_HIGH: u1,
    -            GPIO16_EDGE_LOW: u1,
    -            GPIO16_EDGE_HIGH: u1,
    -            GPIO17_LEVEL_LOW: u1,
    -            GPIO17_LEVEL_HIGH: u1,
    -            GPIO17_EDGE_LOW: u1,
    -            GPIO17_EDGE_HIGH: u1,
    -            GPIO18_LEVEL_LOW: u1,
    -            GPIO18_LEVEL_HIGH: u1,
    -            GPIO18_EDGE_LOW: u1,
    -            GPIO18_EDGE_HIGH: u1,
    -            GPIO19_LEVEL_LOW: u1,
    -            GPIO19_LEVEL_HIGH: u1,
    -            GPIO19_EDGE_LOW: u1,
    -            GPIO19_EDGE_HIGH: u1,
    -            GPIO20_LEVEL_LOW: u1,
    -            GPIO20_LEVEL_HIGH: u1,
    -            GPIO20_EDGE_LOW: u1,
    -            GPIO20_EDGE_HIGH: u1,
    -            GPIO21_LEVEL_LOW: u1,
    -            GPIO21_LEVEL_HIGH: u1,
    -            GPIO21_EDGE_LOW: u1,
    -            GPIO21_EDGE_HIGH: u1,
    -            GPIO22_LEVEL_LOW: u1,
    -            GPIO22_LEVEL_HIGH: u1,
    -            GPIO22_EDGE_LOW: u1,
    -            GPIO22_EDGE_HIGH: u1,
    -            GPIO23_LEVEL_LOW: u1,
    -            GPIO23_LEVEL_HIGH: u1,
    -            GPIO23_EDGE_LOW: u1,
    -            GPIO23_EDGE_HIGH: u1,
    -        }), base_address + 0x188);
    -
    -        /// address: 0x4001418c
    -        /// Interrupt status after masking & forcing for dormant_wake
    -        pub const DORMANT_WAKE_INTS3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO24_LEVEL_LOW: u1,
    -            GPIO24_LEVEL_HIGH: u1,
    -            GPIO24_EDGE_LOW: u1,
    -            GPIO24_EDGE_HIGH: u1,
    -            GPIO25_LEVEL_LOW: u1,
    -            GPIO25_LEVEL_HIGH: u1,
    -            GPIO25_EDGE_LOW: u1,
    -            GPIO25_EDGE_HIGH: u1,
    -            GPIO26_LEVEL_LOW: u1,
    -            GPIO26_LEVEL_HIGH: u1,
    -            GPIO26_EDGE_LOW: u1,
    -            GPIO26_EDGE_HIGH: u1,
    -            GPIO27_LEVEL_LOW: u1,
    -            GPIO27_LEVEL_HIGH: u1,
    -            GPIO27_EDGE_LOW: u1,
    -            GPIO27_EDGE_HIGH: u1,
    -            GPIO28_LEVEL_LOW: u1,
    -            GPIO28_LEVEL_HIGH: u1,
    -            GPIO28_EDGE_LOW: u1,
    -            GPIO28_EDGE_HIGH: u1,
    -            GPIO29_LEVEL_LOW: u1,
    -            GPIO29_LEVEL_HIGH: u1,
    -            GPIO29_EDGE_LOW: u1,
    -            GPIO29_EDGE_HIGH: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0x18c);
    -    };
    -    pub const IO_QSPI = struct {
    -        pub const base_address = 0x40018000;
    -        pub const version = "1";
    -
    -        /// address: 0x40018000
    -        /// GPIO status
    -        pub const GPIO_QSPI_SCLK_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x40018004
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO_QSPI_SCLK_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x40018008
    -        /// GPIO status
    -        pub const GPIO_QSPI_SS_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x4001800c
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO_QSPI_SS_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x40018010
    -        /// GPIO status
    -        pub const GPIO_QSPI_SD0_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x40018014
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO_QSPI_SD0_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x40018018
    -        /// GPIO status
    -        pub const GPIO_QSPI_SD1_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x4001801c
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO_QSPI_SD1_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x40018020
    -        /// GPIO status
    -        pub const GPIO_QSPI_SD2_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x40018024
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO_QSPI_SD2_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x40018028
    -        /// GPIO status
    -        pub const GPIO_QSPI_SD3_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// output signal from selected peripheral, before register override is applied
    -            OUTFROMPERI: u1,
    -            /// output signal to pad after register override is applied
    -            OUTTOPAD: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// output enable from selected peripheral, before register override is applied
    -            OEFROMPERI: u1,
    -            /// output enable to pad after register override is applied
    -            OETOPAD: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            /// input signal from pad, before override is applied
    -            INFROMPAD: u1,
    -            reserved13: u1 = 0,
    -            /// input signal to peripheral, after override is applied
    -            INTOPERI: u1,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// interrupt from pad before override is applied
    -            IRQFROMPAD: u1,
    -            reserved18: u1 = 0,
    -            /// interrupt to processors, after override is applied
    -            IRQTOPROC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x4001802c
    -        /// GPIO control including function select and overrides.
    -        pub const GPIO_QSPI_SD3_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0-31 -> selects pin function according to the gpio table\n
    -            /// 31 == NULL
    -            FUNCSEL: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            OUTOVER: u2,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            OEOVER: u2,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            INOVER: u2,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            IRQOVER: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x40018030
    -        /// Raw Interrupts
    -        pub const INTR = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    -            GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SCLK_EDGE_LOW: u1,
    -            GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    -            GPIO_QSPI_SS_LEVEL_LOW: u1,
    -            GPIO_QSPI_SS_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SS_EDGE_LOW: u1,
    -            GPIO_QSPI_SS_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD0_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD0_EDGE_LOW: u1,
    -            GPIO_QSPI_SD0_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD1_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD1_EDGE_LOW: u1,
    -            GPIO_QSPI_SD1_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD2_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD2_EDGE_LOW: u1,
    -            GPIO_QSPI_SD2_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD3_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD3_EDGE_LOW: u1,
    -            GPIO_QSPI_SD3_EDGE_HIGH: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x40018034
    -        /// Interrupt Enable for proc0
    -        pub const PROC0_INTE = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    -            GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SCLK_EDGE_LOW: u1,
    -            GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    -            GPIO_QSPI_SS_LEVEL_LOW: u1,
    -            GPIO_QSPI_SS_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SS_EDGE_LOW: u1,
    -            GPIO_QSPI_SS_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD0_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD0_EDGE_LOW: u1,
    -            GPIO_QSPI_SD0_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD1_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD1_EDGE_LOW: u1,
    -            GPIO_QSPI_SD1_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD2_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD2_EDGE_LOW: u1,
    -            GPIO_QSPI_SD2_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD3_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD3_EDGE_LOW: u1,
    -            GPIO_QSPI_SD3_EDGE_HIGH: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x40018038
    -        /// Interrupt Force for proc0
    -        pub const PROC0_INTF = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    -            GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SCLK_EDGE_LOW: u1,
    -            GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    -            GPIO_QSPI_SS_LEVEL_LOW: u1,
    -            GPIO_QSPI_SS_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SS_EDGE_LOW: u1,
    -            GPIO_QSPI_SS_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD0_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD0_EDGE_LOW: u1,
    -            GPIO_QSPI_SD0_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD1_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD1_EDGE_LOW: u1,
    -            GPIO_QSPI_SD1_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD2_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD2_EDGE_LOW: u1,
    -            GPIO_QSPI_SD2_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD3_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD3_EDGE_LOW: u1,
    -            GPIO_QSPI_SD3_EDGE_HIGH: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x4001803c
    -        /// Interrupt status after masking & forcing for proc0
    -        pub const PROC0_INTS = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    -            GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SCLK_EDGE_LOW: u1,
    -            GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    -            GPIO_QSPI_SS_LEVEL_LOW: u1,
    -            GPIO_QSPI_SS_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SS_EDGE_LOW: u1,
    -            GPIO_QSPI_SS_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD0_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD0_EDGE_LOW: u1,
    -            GPIO_QSPI_SD0_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD1_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD1_EDGE_LOW: u1,
    -            GPIO_QSPI_SD1_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD2_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD2_EDGE_LOW: u1,
    -            GPIO_QSPI_SD2_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD3_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD3_EDGE_LOW: u1,
    -            GPIO_QSPI_SD3_EDGE_HIGH: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x40018040
    -        /// Interrupt Enable for proc1
    -        pub const PROC1_INTE = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    -            GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SCLK_EDGE_LOW: u1,
    -            GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    -            GPIO_QSPI_SS_LEVEL_LOW: u1,
    -            GPIO_QSPI_SS_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SS_EDGE_LOW: u1,
    -            GPIO_QSPI_SS_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD0_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD0_EDGE_LOW: u1,
    -            GPIO_QSPI_SD0_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD1_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD1_EDGE_LOW: u1,
    -            GPIO_QSPI_SD1_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD2_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD2_EDGE_LOW: u1,
    -            GPIO_QSPI_SD2_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD3_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD3_EDGE_LOW: u1,
    -            GPIO_QSPI_SD3_EDGE_HIGH: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x40018044
    -        /// Interrupt Force for proc1
    -        pub const PROC1_INTF = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    -            GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SCLK_EDGE_LOW: u1,
    -            GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    -            GPIO_QSPI_SS_LEVEL_LOW: u1,
    -            GPIO_QSPI_SS_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SS_EDGE_LOW: u1,
    -            GPIO_QSPI_SS_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD0_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD0_EDGE_LOW: u1,
    -            GPIO_QSPI_SD0_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD1_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD1_EDGE_LOW: u1,
    -            GPIO_QSPI_SD1_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD2_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD2_EDGE_LOW: u1,
    -            GPIO_QSPI_SD2_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD3_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD3_EDGE_LOW: u1,
    -            GPIO_QSPI_SD3_EDGE_HIGH: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x40018048
    -        /// Interrupt status after masking & forcing for proc1
    -        pub const PROC1_INTS = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    -            GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SCLK_EDGE_LOW: u1,
    -            GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    -            GPIO_QSPI_SS_LEVEL_LOW: u1,
    -            GPIO_QSPI_SS_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SS_EDGE_LOW: u1,
    -            GPIO_QSPI_SS_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD0_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD0_EDGE_LOW: u1,
    -            GPIO_QSPI_SD0_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD1_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD1_EDGE_LOW: u1,
    -            GPIO_QSPI_SD1_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD2_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD2_EDGE_LOW: u1,
    -            GPIO_QSPI_SD2_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD3_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD3_EDGE_LOW: u1,
    -            GPIO_QSPI_SD3_EDGE_HIGH: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x4001804c
    -        /// Interrupt Enable for dormant_wake
    -        pub const DORMANT_WAKE_INTE = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    -            GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SCLK_EDGE_LOW: u1,
    -            GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    -            GPIO_QSPI_SS_LEVEL_LOW: u1,
    -            GPIO_QSPI_SS_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SS_EDGE_LOW: u1,
    -            GPIO_QSPI_SS_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD0_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD0_EDGE_LOW: u1,
    -            GPIO_QSPI_SD0_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD1_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD1_EDGE_LOW: u1,
    -            GPIO_QSPI_SD1_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD2_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD2_EDGE_LOW: u1,
    -            GPIO_QSPI_SD2_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD3_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD3_EDGE_LOW: u1,
    -            GPIO_QSPI_SD3_EDGE_HIGH: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0x4c);
    -
    -        /// address: 0x40018050
    -        /// Interrupt Force for dormant_wake
    -        pub const DORMANT_WAKE_INTF = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    -            GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SCLK_EDGE_LOW: u1,
    -            GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    -            GPIO_QSPI_SS_LEVEL_LOW: u1,
    -            GPIO_QSPI_SS_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SS_EDGE_LOW: u1,
    -            GPIO_QSPI_SS_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD0_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD0_EDGE_LOW: u1,
    -            GPIO_QSPI_SD0_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD1_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD1_EDGE_LOW: u1,
    -            GPIO_QSPI_SD1_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD2_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD2_EDGE_LOW: u1,
    -            GPIO_QSPI_SD2_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD3_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD3_EDGE_LOW: u1,
    -            GPIO_QSPI_SD3_EDGE_HIGH: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x40018054
    -        /// Interrupt status after masking & forcing for dormant_wake
    -        pub const DORMANT_WAKE_INTS = @intToPtr(*volatile Mmio(32, packed struct {
    -            GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    -            GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SCLK_EDGE_LOW: u1,
    -            GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    -            GPIO_QSPI_SS_LEVEL_LOW: u1,
    -            GPIO_QSPI_SS_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SS_EDGE_LOW: u1,
    -            GPIO_QSPI_SS_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD0_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD0_EDGE_LOW: u1,
    -            GPIO_QSPI_SD0_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD1_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD1_EDGE_LOW: u1,
    -            GPIO_QSPI_SD1_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD2_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD2_EDGE_LOW: u1,
    -            GPIO_QSPI_SD2_EDGE_HIGH: u1,
    -            GPIO_QSPI_SD3_LEVEL_LOW: u1,
    -            GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    -            GPIO_QSPI_SD3_EDGE_LOW: u1,
    -            GPIO_QSPI_SD3_EDGE_HIGH: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0x54);
    -    };
    -    pub const PADS_BANK0 = struct {
    -        pub const base_address = 0x4001c000;
    -        pub const version = "1";
    -
    -        /// address: 0x4001c000
    -        /// Voltage select. Per bank control
    -        pub const VOLTAGE_SELECT = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x0);
    -
    -        /// address: 0x4001c004
    -        /// Pad control register
    -        pub const GPIO0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x4001c008
    -        /// Pad control register
    -        pub const GPIO1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x4001c00c
    -        /// Pad control register
    -        pub const GPIO2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x4001c010
    -        /// Pad control register
    -        pub const GPIO3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x4001c014
    -        /// Pad control register
    -        pub const GPIO4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x4001c018
    -        /// Pad control register
    -        pub const GPIO5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x4001c01c
    -        /// Pad control register
    -        pub const GPIO6 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x4001c020
    -        /// Pad control register
    -        pub const GPIO7 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x4001c024
    -        /// Pad control register
    -        pub const GPIO8 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x4001c028
    -        /// Pad control register
    -        pub const GPIO9 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x4001c02c
    -        /// Pad control register
    -        pub const GPIO10 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x4001c030
    -        /// Pad control register
    -        pub const GPIO11 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x4001c034
    -        /// Pad control register
    -        pub const GPIO12 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x4001c038
    -        /// Pad control register
    -        pub const GPIO13 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x4001c03c
    -        /// Pad control register
    -        pub const GPIO14 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x4001c040
    -        /// Pad control register
    -        pub const GPIO15 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x4001c044
    -        /// Pad control register
    -        pub const GPIO16 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x4001c048
    -        /// Pad control register
    -        pub const GPIO17 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x4001c04c
    -        /// Pad control register
    -        pub const GPIO18 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x4c);
    -
    -        /// address: 0x4001c050
    -        /// Pad control register
    -        pub const GPIO19 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x4001c054
    -        /// Pad control register
    -        pub const GPIO20 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x4001c058
    -        /// Pad control register
    -        pub const GPIO21 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x4001c05c
    -        /// Pad control register
    -        pub const GPIO22 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x4001c060
    -        /// Pad control register
    -        pub const GPIO23 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x4001c064
    -        /// Pad control register
    -        pub const GPIO24 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x4001c068
    -        /// Pad control register
    -        pub const GPIO25 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x68);
    -
    -        /// address: 0x4001c06c
    -        /// Pad control register
    -        pub const GPIO26 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x6c);
    -
    -        /// address: 0x4001c070
    -        /// Pad control register
    -        pub const GPIO27 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x70);
    -
    -        /// address: 0x4001c074
    -        /// Pad control register
    -        pub const GPIO28 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x74);
    -
    -        /// address: 0x4001c078
    -        /// Pad control register
    -        pub const GPIO29 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x78);
    -
    -        /// address: 0x4001c07c
    -        /// Pad control register
    -        pub const SWCLK = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x7c);
    -
    -        /// address: 0x4001c080
    -        /// Pad control register
    -        pub const SWD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x80);
    -    };
    -    pub const PADS_QSPI = struct {
    -        pub const base_address = 0x40020000;
    -        pub const version = "1";
    -
    -        /// address: 0x40020000
    -        /// Voltage select. Per bank control
    -        pub const VOLTAGE_SELECT = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x0);
    -
    -        /// address: 0x40020004
    -        /// Pad control register
    -        pub const GPIO_QSPI_SCLK = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x40020008
    -        /// Pad control register
    -        pub const GPIO_QSPI_SD0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x4002000c
    -        /// Pad control register
    -        pub const GPIO_QSPI_SD1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x40020010
    -        /// Pad control register
    -        pub const GPIO_QSPI_SD2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x40020014
    -        /// Pad control register
    -        pub const GPIO_QSPI_SD3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x40020018
    -        /// Pad control register
    -        pub const GPIO_QSPI_SS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Slew rate control. 1 = Fast, 0 = Slow
    -            SLEWFAST: u1,
    -            /// Enable schmitt trigger
    -            SCHMITT: u1,
    -            /// Pull down enable
    -            PDE: u1,
    -            /// Pull up enable
    -            PUE: u1,
    -            /// Drive strength.
    -            DRIVE: u2,
    -            /// Input enable
    -            IE: u1,
    -            /// Output disable. Has priority over output enable from peripherals
    -            OD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x18);
    -    };
    -
    -    /// Controls the crystal oscillator
    -    pub const XOSC = struct {
    -        pub const base_address = 0x40024000;
    -        pub const version = "1";
    -
    -        /// address: 0x40024000
    -        /// Crystal Oscillator Control
    -        pub const CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Frequency range. This resets to 0xAA0 and cannot be changed.
    -            FREQ_RANGE: u12,
    -            /// On power-up this field is initialised to DISABLE and the chip runs from the
    -            /// ROSC.\n
    -            /// If the chip has subsequently been programmed to run from the XOSC then setting
    -            /// this field to DISABLE may lock-up the chip. If this is a concern then run the
    -            /// clk_ref from the ROSC and enable the clk_sys RESUS feature.\n
    -            /// The 12-bit code is intended to give some protection against accidental writes.
    -            /// An invalid setting will enable the oscillator.
    -            ENABLE: u12,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x40024004
    -        /// Crystal Oscillator Status
    -        pub const STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The current frequency range setting, always reads 0
    -            FREQ_RANGE: u2,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            /// Oscillator is enabled but not necessarily running and stable, resets to 0
    -            ENABLED: u1,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            reserved18: u1 = 0,
    -            reserved19: u1 = 0,
    -            reserved20: u1 = 0,
    -            /// An invalid value has been written to CTRL_ENABLE or CTRL_FREQ_RANGE or DORMANT
    -            BADWRITE: u1,
    -            reserved21: u1 = 0,
    -            reserved22: u1 = 0,
    -            reserved23: u1 = 0,
    -            reserved24: u1 = 0,
    -            reserved25: u1 = 0,
    -            reserved26: u1 = 0,
    -            /// Oscillator is running and stable
    -            STABLE: u1,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x40024008
    -        /// Crystal Oscillator pause control\n
    -        /// This is used to save power by pausing the XOSC\n
    -        /// On power-up this field is initialised to WAKE\n
    -        /// An invalid write will also select WAKE\n
    -        /// WARNING: stop the PLLs before selecting dormant mode\n
    -        /// WARNING: setup the irq before selecting dormant mode
    -        pub const DORMANT = @intToPtr(*volatile u32, base_address + 0x8);
    -
    -        /// address: 0x4002400c
    -        /// Controls the startup delay
    -        pub const STARTUP = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// in multiples of 256*xtal_period. The reset value of 0xc4 corresponds to approx
    -            /// 50 000 cycles.
    -            DELAY: u14,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            /// Multiplies the startup_delay by 4. This is of little value to the user given
    -            /// that the delay can be programmed directly.
    -            X4: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x4002401c
    -        /// A down counter running at the xosc frequency which counts to zero and stops.\n
    -        /// To start the counter write a non-zero value.\n
    -        /// Can be used for short software pauses when setting up time sensitive hardware.
    -        pub const COUNT = @intToPtr(*volatile MmioInt(32, u8), base_address + 0x1c);
    -    };
    -    pub const PLL_SYS = struct {
    -        pub const base_address = 0x40028000;
    -        pub const version = "1";
    -
    -        /// address: 0x40028000
    -        /// Control and Status\n
    -        /// GENERAL CONSTRAINTS:\n
    -        /// Reference clock frequency min=5MHz, max=800MHz\n
    -        /// Feedback divider min=16, max=320\n
    -        /// VCO frequency min=400MHz, max=1600MHz
    -        pub const CS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Divides the PLL input reference clock.\n
    -            /// Behaviour is undefined for div=0.\n
    -            /// PLL output will be unpredictable during refdiv changes, wait for lock=1 before
    -            /// using it.
    -            REFDIV: u6,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            /// Passes the reference clock to the output instead of the divided VCO. The VCO
    -            /// continues to run so the user can switch between the reference clock and the
    -            /// divided VCO but the output will glitch when doing so.
    -            BYPASS: u1,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            reserved18: u1 = 0,
    -            reserved19: u1 = 0,
    -            reserved20: u1 = 0,
    -            reserved21: u1 = 0,
    -            reserved22: u1 = 0,
    -            reserved23: u1 = 0,
    -            /// PLL is locked
    -            LOCK: u1,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x40028004
    -        /// Controls the PLL power modes.
    -        pub const PWR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// PLL powerdown\n
    -            /// To save power set high when PLL output not required.
    -            PD: u1,
    -            reserved0: u1 = 0,
    -            /// PLL DSM powerdown\n
    -            /// Nothing is achieved by setting this low.
    -            DSMPD: u1,
    -            /// PLL post divider powerdown\n
    -            /// To save power set high when PLL output not required or bypass=1.
    -            POSTDIVPD: u1,
    -            reserved1: u1 = 0,
    -            /// PLL VCO powerdown\n
    -            /// To save power set high when PLL output not required or bypass=1.
    -            VCOPD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x40028008
    -        /// Feedback divisor\n
    -        /// (note: this PLL does not support fractional division)
    -        pub const FBDIV_INT = @intToPtr(*volatile MmioInt(32, u12), base_address + 0x8);
    -
    -        /// address: 0x4002800c
    -        /// Controls the PLL post dividers for the primary output\n
    -        /// (note: this PLL does not have a secondary output)\n
    -        /// the primary output is driven from VCO divided by postdiv1*postdiv2
    -        pub const PRIM = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            /// divide by 1-7
    -            POSTDIV2: u3,
    -            reserved12: u1 = 0,
    -            /// divide by 1-7
    -            POSTDIV1: u3,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -        }), base_address + 0xc);
    -    };
    -    pub const PLL_USB = struct {
    -        pub const base_address = 0x4002c000;
    -
    -        /// address: 0x4002c000
    -        /// Control and Status\n
    -        /// GENERAL CONSTRAINTS:\n
    -        /// Reference clock frequency min=5MHz, max=800MHz\n
    -        /// Feedback divider min=16, max=320\n
    -        /// VCO frequency min=400MHz, max=1600MHz
    -        pub const CS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Divides the PLL input reference clock.\n
    -            /// Behaviour is undefined for div=0.\n
    -            /// PLL output will be unpredictable during refdiv changes, wait for lock=1 before
    -            /// using it.
    -            REFDIV: u6,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            /// Passes the reference clock to the output instead of the divided VCO. The VCO
    -            /// continues to run so the user can switch between the reference clock and the
    -            /// divided VCO but the output will glitch when doing so.
    -            BYPASS: u1,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            reserved18: u1 = 0,
    -            reserved19: u1 = 0,
    -            reserved20: u1 = 0,
    -            reserved21: u1 = 0,
    -            reserved22: u1 = 0,
    -            reserved23: u1 = 0,
    -            /// PLL is locked
    -            LOCK: u1,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x4002c004
    -        /// Controls the PLL power modes.
    -        pub const PWR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// PLL powerdown\n
    -            /// To save power set high when PLL output not required.
    -            PD: u1,
    -            reserved0: u1 = 0,
    -            /// PLL DSM powerdown\n
    -            /// Nothing is achieved by setting this low.
    -            DSMPD: u1,
    -            /// PLL post divider powerdown\n
    -            /// To save power set high when PLL output not required or bypass=1.
    -            POSTDIVPD: u1,
    -            reserved1: u1 = 0,
    -            /// PLL VCO powerdown\n
    -            /// To save power set high when PLL output not required or bypass=1.
    -            VCOPD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x4002c008
    -        /// Feedback divisor\n
    -        /// (note: this PLL does not support fractional division)
    -        pub const FBDIV_INT = @intToPtr(*volatile MmioInt(32, u12), base_address + 0x8);
    -
    -        /// address: 0x4002c00c
    -        /// Controls the PLL post dividers for the primary output\n
    -        /// (note: this PLL does not have a secondary output)\n
    -        /// the primary output is driven from VCO divided by postdiv1*postdiv2
    -        pub const PRIM = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            /// divide by 1-7
    -            POSTDIV2: u3,
    -            reserved12: u1 = 0,
    -            /// divide by 1-7
    -            POSTDIV1: u3,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -        }), base_address + 0xc);
    -    };
    -
    -    /// Register block for busfabric control signals and performance counters
    -    pub const BUSCTRL = struct {
    -        pub const base_address = 0x40030000;
    -        pub const version = "1";
    -
    -        /// address: 0x40030000
    -        /// Set the priority of each master for bus arbitration.
    -        pub const BUS_PRIORITY = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0 - low priority, 1 - high priority
    -            PROC0: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            /// 0 - low priority, 1 - high priority
    -            PROC1: u1,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            /// 0 - low priority, 1 - high priority
    -            DMA_R: u1,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            /// 0 - low priority, 1 - high priority
    -            DMA_W: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x40030004
    -        /// Bus priority acknowledge
    -        pub const BUS_PRIORITY_ACK = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x4);
    -
    -        /// address: 0x40030008
    -        /// Bus fabric performance counter 0
    -        pub const PERFCTR0 = @intToPtr(*volatile MmioInt(32, u24), base_address + 0x8);
    -
    -        /// address: 0x4003000c
    -        /// Bus fabric performance event select for PERFCTR0
    -        pub const PERFSEL0 = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xc);
    -
    -        /// address: 0x40030010
    -        /// Bus fabric performance counter 1
    -        pub const PERFCTR1 = @intToPtr(*volatile MmioInt(32, u24), base_address + 0x10);
    -
    -        /// address: 0x40030014
    -        /// Bus fabric performance event select for PERFCTR1
    -        pub const PERFSEL1 = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x14);
    -
    -        /// address: 0x40030018
    -        /// Bus fabric performance counter 2
    -        pub const PERFCTR2 = @intToPtr(*volatile MmioInt(32, u24), base_address + 0x18);
    -
    -        /// address: 0x4003001c
    -        /// Bus fabric performance event select for PERFCTR2
    -        pub const PERFSEL2 = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x1c);
    -
    -        /// address: 0x40030020
    -        /// Bus fabric performance counter 3
    -        pub const PERFCTR3 = @intToPtr(*volatile MmioInt(32, u24), base_address + 0x20);
    -
    -        /// address: 0x40030024
    -        /// Bus fabric performance event select for PERFCTR3
    -        pub const PERFSEL3 = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x24);
    -    };
    -    pub const UART0 = struct {
    -        pub const base_address = 0x40034000;
    -        pub const version = "1";
    -
    -        /// address: 0x40034000
    -        /// Data Register, UARTDR
    -        pub const UARTDR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Receive (read) data character. Transmit (write) data character.
    -            DATA: u8,
    -            /// Framing error. When set to 1, it indicates that the received character did not
    -            /// have a valid stop bit (a valid stop bit is 1). In FIFO mode, this error is
    -            /// associated with the character at the top of the FIFO.
    -            FE: u1,
    -            /// Parity error. When set to 1, it indicates that the parity of the received data
    -            /// character does not match the parity that the EPS and SPS bits in the Line
    -            /// Control Register, UARTLCR_H. In FIFO mode, this error is associated with the
    -            /// character at the top of the FIFO.
    -            PE: u1,
    -            /// Break error. This bit is set to 1 if a break condition was detected, indicating
    -            /// that the received data input was held LOW for longer than a full-word
    -            /// transmission time (defined as start, data, parity and stop bits). In FIFO mode,
    -            /// this error is associated with the character at the top of the FIFO. When a break
    -            /// occurs, only one 0 character is loaded into the FIFO. The next character is only
    -            /// enabled after the receive data input goes to a 1 (marking state), and the next
    -            /// valid start bit is received.
    -            BE: u1,
    -            /// Overrun error. This bit is set to 1 if data is received and the receive FIFO is
    -            /// already full. This is cleared to 0 once there is an empty space in the FIFO and
    -            /// a new character can be written to it.
    -            OE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x40034004
    -        /// Receive Status Register/Error Clear Register, UARTRSR/UARTECR
    -        pub const UARTRSR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Framing error. When set to 1, it indicates that the received character did not
    -            /// have a valid stop bit (a valid stop bit is 1). This bit is cleared to 0 by a
    -            /// write to UARTECR. In FIFO mode, this error is associated with the character at
    -            /// the top of the FIFO.
    -            FE: u1,
    -            /// Parity error. When set to 1, it indicates that the parity of the received data
    -            /// character does not match the parity that the EPS and SPS bits in the Line
    -            /// Control Register, UARTLCR_H. This bit is cleared to 0 by a write to UARTECR. In
    -            /// FIFO mode, this error is associated with the character at the top of the FIFO.
    -            PE: u1,
    -            /// Break error. This bit is set to 1 if a break condition was detected, indicating
    -            /// that the received data input was held LOW for longer than a full-word
    -            /// transmission time (defined as start, data, parity, and stop bits). This bit is
    -            /// cleared to 0 after a write to UARTECR. In FIFO mode, this error is associated
    -            /// with the character at the top of the FIFO. When a break occurs, only one 0
    -            /// character is loaded into the FIFO. The next character is only enabled after the
    -            /// receive data input goes to a 1 (marking state) and the next valid start bit is
    -            /// received.
    -            BE: u1,
    -            /// Overrun error. This bit is set to 1 if data is received and the FIFO is already
    -            /// full. This bit is cleared to 0 by a write to UARTECR. The FIFO contents remain
    -            /// valid because no more data is written when the FIFO is full, only the contents
    -            /// of the shift register are overwritten. The CPU must now read the data, to empty
    -            /// the FIFO.
    -            OE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x40034018
    -        /// Flag Register, UARTFR
    -        pub const UARTFR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Clear to send. This bit is the complement of the UART clear to send, nUARTCTS,
    -            /// modem status input. That is, the bit is 1 when nUARTCTS is LOW.
    -            CTS: u1,
    -            /// Data set ready. This bit is the complement of the UART data set ready, nUARTDSR,
    -            /// modem status input. That is, the bit is 1 when nUARTDSR is LOW.
    -            DSR: u1,
    -            /// Data carrier detect. This bit is the complement of the UART data carrier detect,
    -            /// nUARTDCD, modem status input. That is, the bit is 1 when nUARTDCD is LOW.
    -            DCD: u1,
    -            /// UART busy. If this bit is set to 1, the UART is busy transmitting data. This bit
    -            /// remains set until the complete byte, including all the stop bits, has been sent
    -            /// from the shift register. This bit is set as soon as the transmit FIFO becomes
    -            /// non-empty, regardless of whether the UART is enabled or not.
    -            BUSY: u1,
    -            /// Receive FIFO empty. The meaning of this bit depends on the state of the FEN bit
    -            /// in the UARTLCR_H Register. If the FIFO is disabled, this bit is set when the
    -            /// receive holding register is empty. If the FIFO is enabled, the RXFE bit is set
    -            /// when the receive FIFO is empty.
    -            RXFE: u1,
    -            /// Transmit FIFO full. The meaning of this bit depends on the state of the FEN bit
    -            /// in the UARTLCR_H Register. If the FIFO is disabled, this bit is set when the
    -            /// transmit holding register is full. If the FIFO is enabled, the TXFF bit is set
    -            /// when the transmit FIFO is full.
    -            TXFF: u1,
    -            /// Receive FIFO full. The meaning of this bit depends on the state of the FEN bit
    -            /// in the UARTLCR_H Register. If the FIFO is disabled, this bit is set when the
    -            /// receive holding register is full. If the FIFO is enabled, the RXFF bit is set
    -            /// when the receive FIFO is full.
    -            RXFF: u1,
    -            /// Transmit FIFO empty. The meaning of this bit depends on the state of the FEN bit
    -            /// in the Line Control Register, UARTLCR_H. If the FIFO is disabled, this bit is
    -            /// set when the transmit holding register is empty. If the FIFO is enabled, the
    -            /// TXFE bit is set when the transmit FIFO is empty. This bit does not indicate if
    -            /// there is data in the transmit shift register.
    -            TXFE: u1,
    -            /// Ring indicator. This bit is the complement of the UART ring indicator, nUARTRI,
    -            /// modem status input. That is, the bit is 1 when nUARTRI is LOW.
    -            RI: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x40034020
    -        /// IrDA Low-Power Counter Register, UARTILPR
    -        pub const UARTILPR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 8-bit low-power divisor value. These bits are cleared to 0 at reset.
    -            ILPDVSR: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x40034024
    -        /// Integer Baud Rate Register, UARTIBRD
    -        pub const UARTIBRD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The integer baud rate divisor. These bits are cleared to 0 on reset.
    -            BAUD_DIVINT: u16,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x40034028
    -        /// Fractional Baud Rate Register, UARTFBRD
    -        pub const UARTFBRD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The fractional baud rate divisor. These bits are cleared to 0 on reset.
    -            BAUD_DIVFRAC: u6,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x4003402c
    -        /// Line Control Register, UARTLCR_H
    -        pub const UARTLCR_H = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Send break. If this bit is set to 1, a low-level is continually output on the
    -            /// UARTTXD output, after completing transmission of the current character. For the
    -            /// proper execution of the break command, the software must set this bit for at
    -            /// least two complete frames. For normal use, this bit must be cleared to 0.
    -            BRK: u1,
    -            /// Parity enable: 0 = parity is disabled and no parity bit added to the data frame
    -            /// 1 = parity checking and generation is enabled.
    -            PEN: u1,
    -            /// Even parity select. Controls the type of parity the UART uses during
    -            /// transmission and reception: 0 = odd parity. The UART generates or checks for an
    -            /// odd number of 1s in the data and parity bits. 1 = even parity. The UART
    -            /// generates or checks for an even number of 1s in the data and parity bits. This
    -            /// bit has no effect when the PEN bit disables parity checking and generation.
    -            EPS: u1,
    -            /// Two stop bits select. If this bit is set to 1, two stop bits are transmitted at
    -            /// the end of the frame. The receive logic does not check for two stop bits being
    -            /// received.
    -            STP2: u1,
    -            /// Enable FIFOs: 0 = FIFOs are disabled (character mode) that is, the FIFOs become
    -            /// 1-byte-deep holding registers 1 = transmit and receive FIFO buffers are enabled
    -            /// (FIFO mode).
    -            FEN: u1,
    -            /// Word length. These bits indicate the number of data bits transmitted or received
    -            /// in a frame as follows: b11 = 8 bits b10 = 7 bits b01 = 6 bits b00 = 5 bits.
    -            WLEN: u2,
    -            /// Stick parity select. 0 = stick parity is disabled 1 = either: * if the EPS bit
    -            /// is 0 then the parity bit is transmitted and checked as a 1 * if the EPS bit is 1
    -            /// then the parity bit is transmitted and checked as a 0. This bit has no effect
    -            /// when the PEN bit disables parity checking and generation.
    -            SPS: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x40034030
    -        /// Control Register, UARTCR
    -        pub const UARTCR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// UART enable: 0 = UART is disabled. If the UART is disabled in the middle of
    -            /// transmission or reception, it completes the current character before stopping. 1
    -            /// = the UART is enabled. Data transmission and reception occurs for either UART
    -            /// signals or SIR signals depending on the setting of the SIREN bit.
    -            UARTEN: u1,
    -            /// SIR enable: 0 = IrDA SIR ENDEC is disabled. nSIROUT remains LOW (no light pulse
    -            /// generated), and signal transitions on SIRIN have no effect. 1 = IrDA SIR ENDEC
    -            /// is enabled. Data is transmitted and received on nSIROUT and SIRIN. UARTTXD
    -            /// remains HIGH, in the marking state. Signal transitions on UARTRXD or modem
    -            /// status inputs have no effect. This bit has no effect if the UARTEN bit disables
    -            /// the UART.
    -            SIREN: u1,
    -            /// SIR low-power IrDA mode. This bit selects the IrDA encoding mode. If this bit is
    -            /// cleared to 0, low-level bits are transmitted as an active high pulse with a
    -            /// width of 3 / 16th of the bit period. If this bit is set to 1, low-level bits are
    -            /// transmitted with a pulse width that is 3 times the period of the IrLPBaud16
    -            /// input signal, regardless of the selected bit rate. Setting this bit uses less
    -            /// power, but might reduce transmission distances.
    -            SIRLP: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            /// Loopback enable. If this bit is set to 1 and the SIREN bit is set to 1 and the
    -            /// SIRTEST bit in the Test Control Register, UARTTCR is set to 1, then the nSIROUT
    -            /// path is inverted, and fed through to the SIRIN path. The SIRTEST bit in the test
    -            /// register must be set to 1 to override the normal half-duplex SIR operation. This
    -            /// must be the requirement for accessing the test registers during normal
    -            /// operation, and SIRTEST must be cleared to 0 when loopback testing is finished.
    -            /// This feature reduces the amount of external coupling required during system
    -            /// test. If this bit is set to 1, and the SIRTEST bit is set to 0, the UARTTXD path
    -            /// is fed through to the UARTRXD path. In either SIR mode or UART mode, when this
    -            /// bit is set, the modem outputs are also fed through to the modem inputs. This bit
    -            /// is cleared to 0 on reset, to disable loopback.
    -            LBE: u1,
    -            /// Transmit enable. If this bit is set to 1, the transmit section of the UART is
    -            /// enabled. Data transmission occurs for either UART signals, or SIR signals
    -            /// depending on the setting of the SIREN bit. When the UART is disabled in the
    -            /// middle of transmission, it completes the current character before stopping.
    -            TXE: u1,
    -            /// Receive enable. If this bit is set to 1, the receive section of the UART is
    -            /// enabled. Data reception occurs for either UART signals or SIR signals depending
    -            /// on the setting of the SIREN bit. When the UART is disabled in the middle of
    -            /// reception, it completes the current character before stopping.
    -            RXE: u1,
    -            /// Data transmit ready. This bit is the complement of the UART data transmit ready,
    -            /// nUARTDTR, modem status output. That is, when the bit is programmed to a 1 then
    -            /// nUARTDTR is LOW.
    -            DTR: u1,
    -            /// Request to send. This bit is the complement of the UART request to send,
    -            /// nUARTRTS, modem status output. That is, when the bit is programmed to a 1 then
    -            /// nUARTRTS is LOW.
    -            RTS: u1,
    -            /// This bit is the complement of the UART Out1 (nUARTOut1) modem status output.
    -            /// That is, when the bit is programmed to a 1 the output is 0. For DTE this can be
    -            /// used as Data Carrier Detect (DCD).
    -            OUT1: u1,
    -            /// This bit is the complement of the UART Out2 (nUARTOut2) modem status output.
    -            /// That is, when the bit is programmed to a 1, the output is 0. For DTE this can be
    -            /// used as Ring Indicator (RI).
    -            OUT2: u1,
    -            /// RTS hardware flow control enable. If this bit is set to 1, RTS hardware flow
    -            /// control is enabled. Data is only requested when there is space in the receive
    -            /// FIFO for it to be received.
    -            RTSEN: u1,
    -            /// CTS hardware flow control enable. If this bit is set to 1, CTS hardware flow
    -            /// control is enabled. Data is only transmitted when the nUARTCTS signal is
    -            /// asserted.
    -            CTSEN: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x40034034
    -        /// Interrupt FIFO Level Select Register, UARTIFLS
    -        pub const UARTIFLS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Transmit interrupt FIFO level select. The trigger points for the transmit
    -            /// interrupt are as follows: b000 = Transmit FIFO becomes <= 1 / 8 full b001 =
    -            /// Transmit FIFO becomes <= 1 / 4 full b010 = Transmit FIFO becomes <= 1 / 2 full
    -            /// b011 = Transmit FIFO becomes <= 3 / 4 full b100 = Transmit FIFO becomes <= 7 / 8
    -            /// full b101-b111 = reserved.
    -            TXIFLSEL: u3,
    -            /// Receive interrupt FIFO level select. The trigger points for the receive
    -            /// interrupt are as follows: b000 = Receive FIFO becomes >= 1 / 8 full b001 =
    -            /// Receive FIFO becomes >= 1 / 4 full b010 = Receive FIFO becomes >= 1 / 2 full
    -            /// b011 = Receive FIFO becomes >= 3 / 4 full b100 = Receive FIFO becomes >= 7 / 8
    -            /// full b101-b111 = reserved.
    -            RXIFLSEL: u3,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x40034038
    -        /// Interrupt Mask Set/Clear Register, UARTIMSC
    -        pub const UARTIMSC = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// nUARTRI modem interrupt mask. A read returns the current mask for the UARTRIINTR
    -            /// interrupt. On a write of 1, the mask of the UARTRIINTR interrupt is set. A write
    -            /// of 0 clears the mask.
    -            RIMIM: u1,
    -            /// nUARTCTS modem interrupt mask. A read returns the current mask for the
    -            /// UARTCTSINTR interrupt. On a write of 1, the mask of the UARTCTSINTR interrupt is
    -            /// set. A write of 0 clears the mask.
    -            CTSMIM: u1,
    -            /// nUARTDCD modem interrupt mask. A read returns the current mask for the
    -            /// UARTDCDINTR interrupt. On a write of 1, the mask of the UARTDCDINTR interrupt is
    -            /// set. A write of 0 clears the mask.
    -            DCDMIM: u1,
    -            /// nUARTDSR modem interrupt mask. A read returns the current mask for the
    -            /// UARTDSRINTR interrupt. On a write of 1, the mask of the UARTDSRINTR interrupt is
    -            /// set. A write of 0 clears the mask.
    -            DSRMIM: u1,
    -            /// Receive interrupt mask. A read returns the current mask for the UARTRXINTR
    -            /// interrupt. On a write of 1, the mask of the UARTRXINTR interrupt is set. A write
    -            /// of 0 clears the mask.
    -            RXIM: u1,
    -            /// Transmit interrupt mask. A read returns the current mask for the UARTTXINTR
    -            /// interrupt. On a write of 1, the mask of the UARTTXINTR interrupt is set. A write
    -            /// of 0 clears the mask.
    -            TXIM: u1,
    -            /// Receive timeout interrupt mask. A read returns the current mask for the
    -            /// UARTRTINTR interrupt. On a write of 1, the mask of the UARTRTINTR interrupt is
    -            /// set. A write of 0 clears the mask.
    -            RTIM: u1,
    -            /// Framing error interrupt mask. A read returns the current mask for the UARTFEINTR
    -            /// interrupt. On a write of 1, the mask of the UARTFEINTR interrupt is set. A write
    -            /// of 0 clears the mask.
    -            FEIM: u1,
    -            /// Parity error interrupt mask. A read returns the current mask for the UARTPEINTR
    -            /// interrupt. On a write of 1, the mask of the UARTPEINTR interrupt is set. A write
    -            /// of 0 clears the mask.
    -            PEIM: u1,
    -            /// Break error interrupt mask. A read returns the current mask for the UARTBEINTR
    -            /// interrupt. On a write of 1, the mask of the UARTBEINTR interrupt is set. A write
    -            /// of 0 clears the mask.
    -            BEIM: u1,
    -            /// Overrun error interrupt mask. A read returns the current mask for the UARTOEINTR
    -            /// interrupt. On a write of 1, the mask of the UARTOEINTR interrupt is set. A write
    -            /// of 0 clears the mask.
    -            OEIM: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x4003403c
    -        /// Raw Interrupt Status Register, UARTRIS
    -        pub const UARTRIS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// nUARTRI modem interrupt status. Returns the raw interrupt state of the
    -            /// UARTRIINTR interrupt.
    -            RIRMIS: u1,
    -            /// nUARTCTS modem interrupt status. Returns the raw interrupt state of the
    -            /// UARTCTSINTR interrupt.
    -            CTSRMIS: u1,
    -            /// nUARTDCD modem interrupt status. Returns the raw interrupt state of the
    -            /// UARTDCDINTR interrupt.
    -            DCDRMIS: u1,
    -            /// nUARTDSR modem interrupt status. Returns the raw interrupt state of the
    -            /// UARTDSRINTR interrupt.
    -            DSRRMIS: u1,
    -            /// Receive interrupt status. Returns the raw interrupt state of the UARTRXINTR
    -            /// interrupt.
    -            RXRIS: u1,
    -            /// Transmit interrupt status. Returns the raw interrupt state of the UARTTXINTR
    -            /// interrupt.
    -            TXRIS: u1,
    -            /// Receive timeout interrupt status. Returns the raw interrupt state of the
    -            /// UARTRTINTR interrupt. a
    -            RTRIS: u1,
    -            /// Framing error interrupt status. Returns the raw interrupt state of the
    -            /// UARTFEINTR interrupt.
    -            FERIS: u1,
    -            /// Parity error interrupt status. Returns the raw interrupt state of the UARTPEINTR
    -            /// interrupt.
    -            PERIS: u1,
    -            /// Break error interrupt status. Returns the raw interrupt state of the UARTBEINTR
    -            /// interrupt.
    -            BERIS: u1,
    -            /// Overrun error interrupt status. Returns the raw interrupt state of the
    -            /// UARTOEINTR interrupt.
    -            OERIS: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x40034040
    -        /// Masked Interrupt Status Register, UARTMIS
    -        pub const UARTMIS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// nUARTRI modem masked interrupt status. Returns the masked interrupt state of the
    -            /// UARTRIINTR interrupt.
    -            RIMMIS: u1,
    -            /// nUARTCTS modem masked interrupt status. Returns the masked interrupt state of
    -            /// the UARTCTSINTR interrupt.
    -            CTSMMIS: u1,
    -            /// nUARTDCD modem masked interrupt status. Returns the masked interrupt state of
    -            /// the UARTDCDINTR interrupt.
    -            DCDMMIS: u1,
    -            /// nUARTDSR modem masked interrupt status. Returns the masked interrupt state of
    -            /// the UARTDSRINTR interrupt.
    -            DSRMMIS: u1,
    -            /// Receive masked interrupt status. Returns the masked interrupt state of the
    -            /// UARTRXINTR interrupt.
    -            RXMIS: u1,
    -            /// Transmit masked interrupt status. Returns the masked interrupt state of the
    -            /// UARTTXINTR interrupt.
    -            TXMIS: u1,
    -            /// Receive timeout masked interrupt status. Returns the masked interrupt state of
    -            /// the UARTRTINTR interrupt.
    -            RTMIS: u1,
    -            /// Framing error masked interrupt status. Returns the masked interrupt state of the
    -            /// UARTFEINTR interrupt.
    -            FEMIS: u1,
    -            /// Parity error masked interrupt status. Returns the masked interrupt state of the
    -            /// UARTPEINTR interrupt.
    -            PEMIS: u1,
    -            /// Break error masked interrupt status. Returns the masked interrupt state of the
    -            /// UARTBEINTR interrupt.
    -            BEMIS: u1,
    -            /// Overrun error masked interrupt status. Returns the masked interrupt state of the
    -            /// UARTOEINTR interrupt.
    -            OEMIS: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x40034044
    -        /// Interrupt Clear Register, UARTICR
    -        pub const UARTICR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// nUARTRI modem interrupt clear. Clears the UARTRIINTR interrupt.
    -            RIMIC: u1,
    -            /// nUARTCTS modem interrupt clear. Clears the UARTCTSINTR interrupt.
    -            CTSMIC: u1,
    -            /// nUARTDCD modem interrupt clear. Clears the UARTDCDINTR interrupt.
    -            DCDMIC: u1,
    -            /// nUARTDSR modem interrupt clear. Clears the UARTDSRINTR interrupt.
    -            DSRMIC: u1,
    -            /// Receive interrupt clear. Clears the UARTRXINTR interrupt.
    -            RXIC: u1,
    -            /// Transmit interrupt clear. Clears the UARTTXINTR interrupt.
    -            TXIC: u1,
    -            /// Receive timeout interrupt clear. Clears the UARTRTINTR interrupt.
    -            RTIC: u1,
    -            /// Framing error interrupt clear. Clears the UARTFEINTR interrupt.
    -            FEIC: u1,
    -            /// Parity error interrupt clear. Clears the UARTPEINTR interrupt.
    -            PEIC: u1,
    -            /// Break error interrupt clear. Clears the UARTBEINTR interrupt.
    -            BEIC: u1,
    -            /// Overrun error interrupt clear. Clears the UARTOEINTR interrupt.
    -            OEIC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x40034048
    -        /// DMA Control Register, UARTDMACR
    -        pub const UARTDMACR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Receive DMA enable. If this bit is set to 1, DMA for the receive FIFO is
    -            /// enabled.
    -            RXDMAE: u1,
    -            /// Transmit DMA enable. If this bit is set to 1, DMA for the transmit FIFO is
    -            /// enabled.
    -            TXDMAE: u1,
    -            /// DMA on error. If this bit is set to 1, the DMA receive request outputs,
    -            /// UARTRXDMASREQ or UARTRXDMABREQ, are disabled when the UART error interrupt is
    -            /// asserted.
    -            DMAONERR: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x40034fe0
    -        /// UARTPeriphID0 Register
    -        pub const UARTPERIPHID0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// These bits read back as 0x11
    -            PARTNUMBER0: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0xfe0);
    -
    -        /// address: 0x40034fe4
    -        /// UARTPeriphID1 Register
    -        pub const UARTPERIPHID1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// These bits read back as 0x0
    -            PARTNUMBER1: u4,
    -            /// These bits read back as 0x1
    -            DESIGNER0: u4,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0xfe4);
    -
    -        /// address: 0x40034fe8
    -        /// UARTPeriphID2 Register
    -        pub const UARTPERIPHID2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// These bits read back as 0x4
    -            DESIGNER1: u4,
    -            /// This field depends on the revision of the UART: r1p0 0x0 r1p1 0x1 r1p3 0x2 r1p4
    -            /// 0x2 r1p5 0x3
    -            REVISION: u4,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0xfe8);
    -
    -        /// address: 0x40034fec
    -        /// UARTPeriphID3 Register
    -        pub const UARTPERIPHID3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// These bits read back as 0x00
    -            CONFIGURATION: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0xfec);
    -
    -        /// address: 0x40034ff0
    -        /// UARTPCellID0 Register
    -        pub const UARTPCELLID0 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xff0);
    -
    -        /// address: 0x40034ff4
    -        /// UARTPCellID1 Register
    -        pub const UARTPCELLID1 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xff4);
    -
    -        /// address: 0x40034ff8
    -        /// UARTPCellID2 Register
    -        pub const UARTPCELLID2 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xff8);
    -
    -        /// address: 0x40034ffc
    -        /// UARTPCellID3 Register
    -        pub const UARTPCELLID3 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xffc);
    -    };
    -    pub const UART1 = struct {
    -        pub const base_address = 0x40038000;
    -
    -        /// address: 0x40038000
    -        /// Data Register, UARTDR
    -        pub const UARTDR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Receive (read) data character. Transmit (write) data character.
    -            DATA: u8,
    -            /// Framing error. When set to 1, it indicates that the received character did not
    -            /// have a valid stop bit (a valid stop bit is 1). In FIFO mode, this error is
    -            /// associated with the character at the top of the FIFO.
    -            FE: u1,
    -            /// Parity error. When set to 1, it indicates that the parity of the received data
    -            /// character does not match the parity that the EPS and SPS bits in the Line
    -            /// Control Register, UARTLCR_H. In FIFO mode, this error is associated with the
    -            /// character at the top of the FIFO.
    -            PE: u1,
    -            /// Break error. This bit is set to 1 if a break condition was detected, indicating
    -            /// that the received data input was held LOW for longer than a full-word
    -            /// transmission time (defined as start, data, parity and stop bits). In FIFO mode,
    -            /// this error is associated with the character at the top of the FIFO. When a break
    -            /// occurs, only one 0 character is loaded into the FIFO. The next character is only
    -            /// enabled after the receive data input goes to a 1 (marking state), and the next
    -            /// valid start bit is received.
    -            BE: u1,
    -            /// Overrun error. This bit is set to 1 if data is received and the receive FIFO is
    -            /// already full. This is cleared to 0 once there is an empty space in the FIFO and
    -            /// a new character can be written to it.
    -            OE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x40038004
    -        /// Receive Status Register/Error Clear Register, UARTRSR/UARTECR
    -        pub const UARTRSR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Framing error. When set to 1, it indicates that the received character did not
    -            /// have a valid stop bit (a valid stop bit is 1). This bit is cleared to 0 by a
    -            /// write to UARTECR. In FIFO mode, this error is associated with the character at
    -            /// the top of the FIFO.
    -            FE: u1,
    -            /// Parity error. When set to 1, it indicates that the parity of the received data
    -            /// character does not match the parity that the EPS and SPS bits in the Line
    -            /// Control Register, UARTLCR_H. This bit is cleared to 0 by a write to UARTECR. In
    -            /// FIFO mode, this error is associated with the character at the top of the FIFO.
    -            PE: u1,
    -            /// Break error. This bit is set to 1 if a break condition was detected, indicating
    -            /// that the received data input was held LOW for longer than a full-word
    -            /// transmission time (defined as start, data, parity, and stop bits). This bit is
    -            /// cleared to 0 after a write to UARTECR. In FIFO mode, this error is associated
    -            /// with the character at the top of the FIFO. When a break occurs, only one 0
    -            /// character is loaded into the FIFO. The next character is only enabled after the
    -            /// receive data input goes to a 1 (marking state) and the next valid start bit is
    -            /// received.
    -            BE: u1,
    -            /// Overrun error. This bit is set to 1 if data is received and the FIFO is already
    -            /// full. This bit is cleared to 0 by a write to UARTECR. The FIFO contents remain
    -            /// valid because no more data is written when the FIFO is full, only the contents
    -            /// of the shift register are overwritten. The CPU must now read the data, to empty
    -            /// the FIFO.
    -            OE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x40038018
    -        /// Flag Register, UARTFR
    -        pub const UARTFR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Clear to send. This bit is the complement of the UART clear to send, nUARTCTS,
    -            /// modem status input. That is, the bit is 1 when nUARTCTS is LOW.
    -            CTS: u1,
    -            /// Data set ready. This bit is the complement of the UART data set ready, nUARTDSR,
    -            /// modem status input. That is, the bit is 1 when nUARTDSR is LOW.
    -            DSR: u1,
    -            /// Data carrier detect. This bit is the complement of the UART data carrier detect,
    -            /// nUARTDCD, modem status input. That is, the bit is 1 when nUARTDCD is LOW.
    -            DCD: u1,
    -            /// UART busy. If this bit is set to 1, the UART is busy transmitting data. This bit
    -            /// remains set until the complete byte, including all the stop bits, has been sent
    -            /// from the shift register. This bit is set as soon as the transmit FIFO becomes
    -            /// non-empty, regardless of whether the UART is enabled or not.
    -            BUSY: u1,
    -            /// Receive FIFO empty. The meaning of this bit depends on the state of the FEN bit
    -            /// in the UARTLCR_H Register. If the FIFO is disabled, this bit is set when the
    -            /// receive holding register is empty. If the FIFO is enabled, the RXFE bit is set
    -            /// when the receive FIFO is empty.
    -            RXFE: u1,
    -            /// Transmit FIFO full. The meaning of this bit depends on the state of the FEN bit
    -            /// in the UARTLCR_H Register. If the FIFO is disabled, this bit is set when the
    -            /// transmit holding register is full. If the FIFO is enabled, the TXFF bit is set
    -            /// when the transmit FIFO is full.
    -            TXFF: u1,
    -            /// Receive FIFO full. The meaning of this bit depends on the state of the FEN bit
    -            /// in the UARTLCR_H Register. If the FIFO is disabled, this bit is set when the
    -            /// receive holding register is full. If the FIFO is enabled, the RXFF bit is set
    -            /// when the receive FIFO is full.
    -            RXFF: u1,
    -            /// Transmit FIFO empty. The meaning of this bit depends on the state of the FEN bit
    -            /// in the Line Control Register, UARTLCR_H. If the FIFO is disabled, this bit is
    -            /// set when the transmit holding register is empty. If the FIFO is enabled, the
    -            /// TXFE bit is set when the transmit FIFO is empty. This bit does not indicate if
    -            /// there is data in the transmit shift register.
    -            TXFE: u1,
    -            /// Ring indicator. This bit is the complement of the UART ring indicator, nUARTRI,
    -            /// modem status input. That is, the bit is 1 when nUARTRI is LOW.
    -            RI: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x40038020
    -        /// IrDA Low-Power Counter Register, UARTILPR
    -        pub const UARTILPR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 8-bit low-power divisor value. These bits are cleared to 0 at reset.
    -            ILPDVSR: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x40038024
    -        /// Integer Baud Rate Register, UARTIBRD
    -        pub const UARTIBRD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The integer baud rate divisor. These bits are cleared to 0 on reset.
    -            BAUD_DIVINT: u16,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x40038028
    -        /// Fractional Baud Rate Register, UARTFBRD
    -        pub const UARTFBRD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The fractional baud rate divisor. These bits are cleared to 0 on reset.
    -            BAUD_DIVFRAC: u6,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x4003802c
    -        /// Line Control Register, UARTLCR_H
    -        pub const UARTLCR_H = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Send break. If this bit is set to 1, a low-level is continually output on the
    -            /// UARTTXD output, after completing transmission of the current character. For the
    -            /// proper execution of the break command, the software must set this bit for at
    -            /// least two complete frames. For normal use, this bit must be cleared to 0.
    -            BRK: u1,
    -            /// Parity enable: 0 = parity is disabled and no parity bit added to the data frame
    -            /// 1 = parity checking and generation is enabled.
    -            PEN: u1,
    -            /// Even parity select. Controls the type of parity the UART uses during
    -            /// transmission and reception: 0 = odd parity. The UART generates or checks for an
    -            /// odd number of 1s in the data and parity bits. 1 = even parity. The UART
    -            /// generates or checks for an even number of 1s in the data and parity bits. This
    -            /// bit has no effect when the PEN bit disables parity checking and generation.
    -            EPS: u1,
    -            /// Two stop bits select. If this bit is set to 1, two stop bits are transmitted at
    -            /// the end of the frame. The receive logic does not check for two stop bits being
    -            /// received.
    -            STP2: u1,
    -            /// Enable FIFOs: 0 = FIFOs are disabled (character mode) that is, the FIFOs become
    -            /// 1-byte-deep holding registers 1 = transmit and receive FIFO buffers are enabled
    -            /// (FIFO mode).
    -            FEN: u1,
    -            /// Word length. These bits indicate the number of data bits transmitted or received
    -            /// in a frame as follows: b11 = 8 bits b10 = 7 bits b01 = 6 bits b00 = 5 bits.
    -            WLEN: u2,
    -            /// Stick parity select. 0 = stick parity is disabled 1 = either: * if the EPS bit
    -            /// is 0 then the parity bit is transmitted and checked as a 1 * if the EPS bit is 1
    -            /// then the parity bit is transmitted and checked as a 0. This bit has no effect
    -            /// when the PEN bit disables parity checking and generation.
    -            SPS: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x40038030
    -        /// Control Register, UARTCR
    -        pub const UARTCR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// UART enable: 0 = UART is disabled. If the UART is disabled in the middle of
    -            /// transmission or reception, it completes the current character before stopping. 1
    -            /// = the UART is enabled. Data transmission and reception occurs for either UART
    -            /// signals or SIR signals depending on the setting of the SIREN bit.
    -            UARTEN: u1,
    -            /// SIR enable: 0 = IrDA SIR ENDEC is disabled. nSIROUT remains LOW (no light pulse
    -            /// generated), and signal transitions on SIRIN have no effect. 1 = IrDA SIR ENDEC
    -            /// is enabled. Data is transmitted and received on nSIROUT and SIRIN. UARTTXD
    -            /// remains HIGH, in the marking state. Signal transitions on UARTRXD or modem
    -            /// status inputs have no effect. This bit has no effect if the UARTEN bit disables
    -            /// the UART.
    -            SIREN: u1,
    -            /// SIR low-power IrDA mode. This bit selects the IrDA encoding mode. If this bit is
    -            /// cleared to 0, low-level bits are transmitted as an active high pulse with a
    -            /// width of 3 / 16th of the bit period. If this bit is set to 1, low-level bits are
    -            /// transmitted with a pulse width that is 3 times the period of the IrLPBaud16
    -            /// input signal, regardless of the selected bit rate. Setting this bit uses less
    -            /// power, but might reduce transmission distances.
    -            SIRLP: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            /// Loopback enable. If this bit is set to 1 and the SIREN bit is set to 1 and the
    -            /// SIRTEST bit in the Test Control Register, UARTTCR is set to 1, then the nSIROUT
    -            /// path is inverted, and fed through to the SIRIN path. The SIRTEST bit in the test
    -            /// register must be set to 1 to override the normal half-duplex SIR operation. This
    -            /// must be the requirement for accessing the test registers during normal
    -            /// operation, and SIRTEST must be cleared to 0 when loopback testing is finished.
    -            /// This feature reduces the amount of external coupling required during system
    -            /// test. If this bit is set to 1, and the SIRTEST bit is set to 0, the UARTTXD path
    -            /// is fed through to the UARTRXD path. In either SIR mode or UART mode, when this
    -            /// bit is set, the modem outputs are also fed through to the modem inputs. This bit
    -            /// is cleared to 0 on reset, to disable loopback.
    -            LBE: u1,
    -            /// Transmit enable. If this bit is set to 1, the transmit section of the UART is
    -            /// enabled. Data transmission occurs for either UART signals, or SIR signals
    -            /// depending on the setting of the SIREN bit. When the UART is disabled in the
    -            /// middle of transmission, it completes the current character before stopping.
    -            TXE: u1,
    -            /// Receive enable. If this bit is set to 1, the receive section of the UART is
    -            /// enabled. Data reception occurs for either UART signals or SIR signals depending
    -            /// on the setting of the SIREN bit. When the UART is disabled in the middle of
    -            /// reception, it completes the current character before stopping.
    -            RXE: u1,
    -            /// Data transmit ready. This bit is the complement of the UART data transmit ready,
    -            /// nUARTDTR, modem status output. That is, when the bit is programmed to a 1 then
    -            /// nUARTDTR is LOW.
    -            DTR: u1,
    -            /// Request to send. This bit is the complement of the UART request to send,
    -            /// nUARTRTS, modem status output. That is, when the bit is programmed to a 1 then
    -            /// nUARTRTS is LOW.
    -            RTS: u1,
    -            /// This bit is the complement of the UART Out1 (nUARTOut1) modem status output.
    -            /// That is, when the bit is programmed to a 1 the output is 0. For DTE this can be
    -            /// used as Data Carrier Detect (DCD).
    -            OUT1: u1,
    -            /// This bit is the complement of the UART Out2 (nUARTOut2) modem status output.
    -            /// That is, when the bit is programmed to a 1, the output is 0. For DTE this can be
    -            /// used as Ring Indicator (RI).
    -            OUT2: u1,
    -            /// RTS hardware flow control enable. If this bit is set to 1, RTS hardware flow
    -            /// control is enabled. Data is only requested when there is space in the receive
    -            /// FIFO for it to be received.
    -            RTSEN: u1,
    -            /// CTS hardware flow control enable. If this bit is set to 1, CTS hardware flow
    -            /// control is enabled. Data is only transmitted when the nUARTCTS signal is
    -            /// asserted.
    -            CTSEN: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x40038034
    -        /// Interrupt FIFO Level Select Register, UARTIFLS
    -        pub const UARTIFLS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Transmit interrupt FIFO level select. The trigger points for the transmit
    -            /// interrupt are as follows: b000 = Transmit FIFO becomes <= 1 / 8 full b001 =
    -            /// Transmit FIFO becomes <= 1 / 4 full b010 = Transmit FIFO becomes <= 1 / 2 full
    -            /// b011 = Transmit FIFO becomes <= 3 / 4 full b100 = Transmit FIFO becomes <= 7 / 8
    -            /// full b101-b111 = reserved.
    -            TXIFLSEL: u3,
    -            /// Receive interrupt FIFO level select. The trigger points for the receive
    -            /// interrupt are as follows: b000 = Receive FIFO becomes >= 1 / 8 full b001 =
    -            /// Receive FIFO becomes >= 1 / 4 full b010 = Receive FIFO becomes >= 1 / 2 full
    -            /// b011 = Receive FIFO becomes >= 3 / 4 full b100 = Receive FIFO becomes >= 7 / 8
    -            /// full b101-b111 = reserved.
    -            RXIFLSEL: u3,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x40038038
    -        /// Interrupt Mask Set/Clear Register, UARTIMSC
    -        pub const UARTIMSC = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// nUARTRI modem interrupt mask. A read returns the current mask for the UARTRIINTR
    -            /// interrupt. On a write of 1, the mask of the UARTRIINTR interrupt is set. A write
    -            /// of 0 clears the mask.
    -            RIMIM: u1,
    -            /// nUARTCTS modem interrupt mask. A read returns the current mask for the
    -            /// UARTCTSINTR interrupt. On a write of 1, the mask of the UARTCTSINTR interrupt is
    -            /// set. A write of 0 clears the mask.
    -            CTSMIM: u1,
    -            /// nUARTDCD modem interrupt mask. A read returns the current mask for the
    -            /// UARTDCDINTR interrupt. On a write of 1, the mask of the UARTDCDINTR interrupt is
    -            /// set. A write of 0 clears the mask.
    -            DCDMIM: u1,
    -            /// nUARTDSR modem interrupt mask. A read returns the current mask for the
    -            /// UARTDSRINTR interrupt. On a write of 1, the mask of the UARTDSRINTR interrupt is
    -            /// set. A write of 0 clears the mask.
    -            DSRMIM: u1,
    -            /// Receive interrupt mask. A read returns the current mask for the UARTRXINTR
    -            /// interrupt. On a write of 1, the mask of the UARTRXINTR interrupt is set. A write
    -            /// of 0 clears the mask.
    -            RXIM: u1,
    -            /// Transmit interrupt mask. A read returns the current mask for the UARTTXINTR
    -            /// interrupt. On a write of 1, the mask of the UARTTXINTR interrupt is set. A write
    -            /// of 0 clears the mask.
    -            TXIM: u1,
    -            /// Receive timeout interrupt mask. A read returns the current mask for the
    -            /// UARTRTINTR interrupt. On a write of 1, the mask of the UARTRTINTR interrupt is
    -            /// set. A write of 0 clears the mask.
    -            RTIM: u1,
    -            /// Framing error interrupt mask. A read returns the current mask for the UARTFEINTR
    -            /// interrupt. On a write of 1, the mask of the UARTFEINTR interrupt is set. A write
    -            /// of 0 clears the mask.
    -            FEIM: u1,
    -            /// Parity error interrupt mask. A read returns the current mask for the UARTPEINTR
    -            /// interrupt. On a write of 1, the mask of the UARTPEINTR interrupt is set. A write
    -            /// of 0 clears the mask.
    -            PEIM: u1,
    -            /// Break error interrupt mask. A read returns the current mask for the UARTBEINTR
    -            /// interrupt. On a write of 1, the mask of the UARTBEINTR interrupt is set. A write
    -            /// of 0 clears the mask.
    -            BEIM: u1,
    -            /// Overrun error interrupt mask. A read returns the current mask for the UARTOEINTR
    -            /// interrupt. On a write of 1, the mask of the UARTOEINTR interrupt is set. A write
    -            /// of 0 clears the mask.
    -            OEIM: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x4003803c
    -        /// Raw Interrupt Status Register, UARTRIS
    -        pub const UARTRIS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// nUARTRI modem interrupt status. Returns the raw interrupt state of the
    -            /// UARTRIINTR interrupt.
    -            RIRMIS: u1,
    -            /// nUARTCTS modem interrupt status. Returns the raw interrupt state of the
    -            /// UARTCTSINTR interrupt.
    -            CTSRMIS: u1,
    -            /// nUARTDCD modem interrupt status. Returns the raw interrupt state of the
    -            /// UARTDCDINTR interrupt.
    -            DCDRMIS: u1,
    -            /// nUARTDSR modem interrupt status. Returns the raw interrupt state of the
    -            /// UARTDSRINTR interrupt.
    -            DSRRMIS: u1,
    -            /// Receive interrupt status. Returns the raw interrupt state of the UARTRXINTR
    -            /// interrupt.
    -            RXRIS: u1,
    -            /// Transmit interrupt status. Returns the raw interrupt state of the UARTTXINTR
    -            /// interrupt.
    -            TXRIS: u1,
    -            /// Receive timeout interrupt status. Returns the raw interrupt state of the
    -            /// UARTRTINTR interrupt. a
    -            RTRIS: u1,
    -            /// Framing error interrupt status. Returns the raw interrupt state of the
    -            /// UARTFEINTR interrupt.
    -            FERIS: u1,
    -            /// Parity error interrupt status. Returns the raw interrupt state of the UARTPEINTR
    -            /// interrupt.
    -            PERIS: u1,
    -            /// Break error interrupt status. Returns the raw interrupt state of the UARTBEINTR
    -            /// interrupt.
    -            BERIS: u1,
    -            /// Overrun error interrupt status. Returns the raw interrupt state of the
    -            /// UARTOEINTR interrupt.
    -            OERIS: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x40038040
    -        /// Masked Interrupt Status Register, UARTMIS
    -        pub const UARTMIS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// nUARTRI modem masked interrupt status. Returns the masked interrupt state of the
    -            /// UARTRIINTR interrupt.
    -            RIMMIS: u1,
    -            /// nUARTCTS modem masked interrupt status. Returns the masked interrupt state of
    -            /// the UARTCTSINTR interrupt.
    -            CTSMMIS: u1,
    -            /// nUARTDCD modem masked interrupt status. Returns the masked interrupt state of
    -            /// the UARTDCDINTR interrupt.
    -            DCDMMIS: u1,
    -            /// nUARTDSR modem masked interrupt status. Returns the masked interrupt state of
    -            /// the UARTDSRINTR interrupt.
    -            DSRMMIS: u1,
    -            /// Receive masked interrupt status. Returns the masked interrupt state of the
    -            /// UARTRXINTR interrupt.
    -            RXMIS: u1,
    -            /// Transmit masked interrupt status. Returns the masked interrupt state of the
    -            /// UARTTXINTR interrupt.
    -            TXMIS: u1,
    -            /// Receive timeout masked interrupt status. Returns the masked interrupt state of
    -            /// the UARTRTINTR interrupt.
    -            RTMIS: u1,
    -            /// Framing error masked interrupt status. Returns the masked interrupt state of the
    -            /// UARTFEINTR interrupt.
    -            FEMIS: u1,
    -            /// Parity error masked interrupt status. Returns the masked interrupt state of the
    -            /// UARTPEINTR interrupt.
    -            PEMIS: u1,
    -            /// Break error masked interrupt status. Returns the masked interrupt state of the
    -            /// UARTBEINTR interrupt.
    -            BEMIS: u1,
    -            /// Overrun error masked interrupt status. Returns the masked interrupt state of the
    -            /// UARTOEINTR interrupt.
    -            OEMIS: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x40038044
    -        /// Interrupt Clear Register, UARTICR
    -        pub const UARTICR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// nUARTRI modem interrupt clear. Clears the UARTRIINTR interrupt.
    -            RIMIC: u1,
    -            /// nUARTCTS modem interrupt clear. Clears the UARTCTSINTR interrupt.
    -            CTSMIC: u1,
    -            /// nUARTDCD modem interrupt clear. Clears the UARTDCDINTR interrupt.
    -            DCDMIC: u1,
    -            /// nUARTDSR modem interrupt clear. Clears the UARTDSRINTR interrupt.
    -            DSRMIC: u1,
    -            /// Receive interrupt clear. Clears the UARTRXINTR interrupt.
    -            RXIC: u1,
    -            /// Transmit interrupt clear. Clears the UARTTXINTR interrupt.
    -            TXIC: u1,
    -            /// Receive timeout interrupt clear. Clears the UARTRTINTR interrupt.
    -            RTIC: u1,
    -            /// Framing error interrupt clear. Clears the UARTFEINTR interrupt.
    -            FEIC: u1,
    -            /// Parity error interrupt clear. Clears the UARTPEINTR interrupt.
    -            PEIC: u1,
    -            /// Break error interrupt clear. Clears the UARTBEINTR interrupt.
    -            BEIC: u1,
    -            /// Overrun error interrupt clear. Clears the UARTOEINTR interrupt.
    -            OEIC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x40038048
    -        /// DMA Control Register, UARTDMACR
    -        pub const UARTDMACR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Receive DMA enable. If this bit is set to 1, DMA for the receive FIFO is
    -            /// enabled.
    -            RXDMAE: u1,
    -            /// Transmit DMA enable. If this bit is set to 1, DMA for the transmit FIFO is
    -            /// enabled.
    -            TXDMAE: u1,
    -            /// DMA on error. If this bit is set to 1, the DMA receive request outputs,
    -            /// UARTRXDMASREQ or UARTRXDMABREQ, are disabled when the UART error interrupt is
    -            /// asserted.
    -            DMAONERR: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x40038fe0
    -        /// UARTPeriphID0 Register
    -        pub const UARTPERIPHID0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// These bits read back as 0x11
    -            PARTNUMBER0: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0xfe0);
    -
    -        /// address: 0x40038fe4
    -        /// UARTPeriphID1 Register
    -        pub const UARTPERIPHID1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// These bits read back as 0x0
    -            PARTNUMBER1: u4,
    -            /// These bits read back as 0x1
    -            DESIGNER0: u4,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0xfe4);
    -
    -        /// address: 0x40038fe8
    -        /// UARTPeriphID2 Register
    -        pub const UARTPERIPHID2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// These bits read back as 0x4
    -            DESIGNER1: u4,
    -            /// This field depends on the revision of the UART: r1p0 0x0 r1p1 0x1 r1p3 0x2 r1p4
    -            /// 0x2 r1p5 0x3
    -            REVISION: u4,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0xfe8);
    -
    -        /// address: 0x40038fec
    -        /// UARTPeriphID3 Register
    -        pub const UARTPERIPHID3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// These bits read back as 0x00
    -            CONFIGURATION: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0xfec);
    -
    -        /// address: 0x40038ff0
    -        /// UARTPCellID0 Register
    -        pub const UARTPCELLID0 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xff0);
    -
    -        /// address: 0x40038ff4
    -        /// UARTPCellID1 Register
    -        pub const UARTPCELLID1 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xff4);
    -
    -        /// address: 0x40038ff8
    -        /// UARTPCellID2 Register
    -        pub const UARTPCELLID2 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xff8);
    -
    -        /// address: 0x40038ffc
    -        /// UARTPCellID3 Register
    -        pub const UARTPCELLID3 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xffc);
    -    };
    -    pub const SPI0 = struct {
    -        pub const base_address = 0x4003c000;
    -        pub const version = "1";
    -
    -        /// address: 0x4003c000
    -        /// Control register 0, SSPCR0 on page 3-4
    -        pub const SSPCR0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Data Size Select: 0000 Reserved, undefined operation. 0001 Reserved, undefined
    -            /// operation. 0010 Reserved, undefined operation. 0011 4-bit data. 0100 5-bit data.
    -            /// 0101 6-bit data. 0110 7-bit data. 0111 8-bit data. 1000 9-bit data. 1001 10-bit
    -            /// data. 1010 11-bit data. 1011 12-bit data. 1100 13-bit data. 1101 14-bit data.
    -            /// 1110 15-bit data. 1111 16-bit data.
    -            DSS: u4,
    -            /// Frame format: 00 Motorola SPI frame format. 01 TI synchronous serial frame
    -            /// format. 10 National Microwire frame format. 11 Reserved, undefined operation.
    -            FRF: u2,
    -            /// SSPCLKOUT polarity, applicable to Motorola SPI frame format only. See Motorola
    -            /// SPI frame format on page 2-10.
    -            SPO: u1,
    -            /// SSPCLKOUT phase, applicable to Motorola SPI frame format only. See Motorola SPI
    -            /// frame format on page 2-10.
    -            SPH: u1,
    -            /// Serial clock rate. The value SCR is used to generate the transmit and receive
    -            /// bit rate of the PrimeCell SSP. The bit rate is: F SSPCLK CPSDVSR x (1+SCR) where
    -            /// CPSDVSR is an even value from 2-254, programmed through the SSPCPSR register and
    -            /// SCR is a value from 0-255.
    -            SCR: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x4003c004
    -        /// Control register 1, SSPCR1 on page 3-5
    -        pub const SSPCR1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Loop back mode: 0 Normal serial port operation enabled. 1 Output of transmit
    -            /// serial shifter is connected to input of receive serial shifter internally.
    -            LBM: u1,
    -            /// Synchronous serial port enable: 0 SSP operation disabled. 1 SSP operation
    -            /// enabled.
    -            SSE: u1,
    -            /// Master or slave mode select. This bit can be modified only when the PrimeCell
    -            /// SSP is disabled, SSE=0: 0 Device configured as master, default. 1 Device
    -            /// configured as slave.
    -            MS: u1,
    -            /// Slave-mode output disable. This bit is relevant only in the slave mode, MS=1. In
    -            /// multiple-slave systems, it is possible for an PrimeCell SSP master to broadcast
    -            /// a message to all slaves in the system while ensuring that only one slave drives
    -            /// data onto its serial output line. In such systems the RXD lines from multiple
    -            /// slaves could be tied together. To operate in such systems, the SOD bit can be
    -            /// set if the PrimeCell SSP slave is not supposed to drive the SSPTXD line: 0 SSP
    -            /// can drive the SSPTXD output in slave mode. 1 SSP must not drive the SSPTXD
    -            /// output in slave mode.
    -            SOD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x4003c008
    -        /// Data register, SSPDR on page 3-6
    -        pub const SSPDR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Transmit/Receive FIFO: Read Receive FIFO. Write Transmit FIFO. You must
    -            /// right-justify data when the PrimeCell SSP is programmed for a data size that is
    -            /// less than 16 bits. Unused bits at the top are ignored by transmit logic. The
    -            /// receive logic automatically right-justifies.
    -            DATA: u16,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x4003c00c
    -        /// Status register, SSPSR on page 3-7
    -        pub const SSPSR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Transmit FIFO empty, RO: 0 Transmit FIFO is not empty. 1 Transmit FIFO is empty.
    -            TFE: u1,
    -            /// Transmit FIFO not full, RO: 0 Transmit FIFO is full. 1 Transmit FIFO is not
    -            /// full.
    -            TNF: u1,
    -            /// Receive FIFO not empty, RO: 0 Receive FIFO is empty. 1 Receive FIFO is not
    -            /// empty.
    -            RNE: u1,
    -            /// Receive FIFO full, RO: 0 Receive FIFO is not full. 1 Receive FIFO is full.
    -            RFF: u1,
    -            /// PrimeCell SSP busy flag, RO: 0 SSP is idle. 1 SSP is currently transmitting
    -            /// and/or receiving a frame or the transmit FIFO is not empty.
    -            BSY: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x4003c010
    -        /// Clock prescale register, SSPCPSR on page 3-8
    -        pub const SSPCPSR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Clock prescale divisor. Must be an even number from 2-254, depending on the
    -            /// frequency of SSPCLK. The least significant bit always returns zero on reads.
    -            CPSDVSR: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x4003c014
    -        /// Interrupt mask set or clear register, SSPIMSC on page 3-9
    -        pub const SSPIMSC = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Receive overrun interrupt mask: 0 Receive FIFO written to while full condition
    -            /// interrupt is masked. 1 Receive FIFO written to while full condition interrupt is
    -            /// not masked.
    -            RORIM: u1,
    -            /// Receive timeout interrupt mask: 0 Receive FIFO not empty and no read prior to
    -            /// timeout period interrupt is masked. 1 Receive FIFO not empty and no read prior
    -            /// to timeout period interrupt is not masked.
    -            RTIM: u1,
    -            /// Receive FIFO interrupt mask: 0 Receive FIFO half full or less condition
    -            /// interrupt is masked. 1 Receive FIFO half full or less condition interrupt is not
    -            /// masked.
    -            RXIM: u1,
    -            /// Transmit FIFO interrupt mask: 0 Transmit FIFO half empty or less condition
    -            /// interrupt is masked. 1 Transmit FIFO half empty or less condition interrupt is
    -            /// not masked.
    -            TXIM: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x4003c018
    -        /// Raw interrupt status register, SSPRIS on page 3-10
    -        pub const SSPRIS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Gives the raw interrupt state, prior to masking, of the SSPRORINTR interrupt
    -            RORRIS: u1,
    -            /// Gives the raw interrupt state, prior to masking, of the SSPRTINTR interrupt
    -            RTRIS: u1,
    -            /// Gives the raw interrupt state, prior to masking, of the SSPRXINTR interrupt
    -            RXRIS: u1,
    -            /// Gives the raw interrupt state, prior to masking, of the SSPTXINTR interrupt
    -            TXRIS: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x4003c01c
    -        /// Masked interrupt status register, SSPMIS on page 3-11
    -        pub const SSPMIS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Gives the receive over run masked interrupt status, after masking, of the
    -            /// SSPRORINTR interrupt
    -            RORMIS: u1,
    -            /// Gives the receive timeout masked interrupt state, after masking, of the
    -            /// SSPRTINTR interrupt
    -            RTMIS: u1,
    -            /// Gives the receive FIFO masked interrupt state, after masking, of the SSPRXINTR
    -            /// interrupt
    -            RXMIS: u1,
    -            /// Gives the transmit FIFO masked interrupt state, after masking, of the SSPTXINTR
    -            /// interrupt
    -            TXMIS: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x4003c020
    -        /// Interrupt clear register, SSPICR on page 3-11
    -        pub const SSPICR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Clears the SSPRORINTR interrupt
    -            RORIC: u1,
    -            /// Clears the SSPRTINTR interrupt
    -            RTIC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x4003c024
    -        /// DMA control register, SSPDMACR on page 3-12
    -        pub const SSPDMACR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Receive DMA Enable. If this bit is set to 1, DMA for the receive FIFO is
    -            /// enabled.
    -            RXDMAE: u1,
    -            /// Transmit DMA Enable. If this bit is set to 1, DMA for the transmit FIFO is
    -            /// enabled.
    -            TXDMAE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x4003cfe0
    -        /// Peripheral identification registers, SSPPeriphID0-3 on page 3-13
    -        pub const SSPPERIPHID0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// These bits read back as 0x22
    -            PARTNUMBER0: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0xfe0);
    -
    -        /// address: 0x4003cfe4
    -        /// Peripheral identification registers, SSPPeriphID0-3 on page 3-13
    -        pub const SSPPERIPHID1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// These bits read back as 0x0
    -            PARTNUMBER1: u4,
    -            /// These bits read back as 0x1
    -            DESIGNER0: u4,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0xfe4);
    -
    -        /// address: 0x4003cfe8
    -        /// Peripheral identification registers, SSPPeriphID0-3 on page 3-13
    -        pub const SSPPERIPHID2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// These bits read back as 0x4
    -            DESIGNER1: u4,
    -            /// These bits return the peripheral revision
    -            REVISION: u4,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0xfe8);
    -
    -        /// address: 0x4003cfec
    -        /// Peripheral identification registers, SSPPeriphID0-3 on page 3-13
    -        pub const SSPPERIPHID3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// These bits read back as 0x00
    -            CONFIGURATION: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0xfec);
    -
    -        /// address: 0x4003cff0
    -        /// PrimeCell identification registers, SSPPCellID0-3 on page 3-16
    -        pub const SSPPCELLID0 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xff0);
    -
    -        /// address: 0x4003cff4
    -        /// PrimeCell identification registers, SSPPCellID0-3 on page 3-16
    -        pub const SSPPCELLID1 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xff4);
    -
    -        /// address: 0x4003cff8
    -        /// PrimeCell identification registers, SSPPCellID0-3 on page 3-16
    -        pub const SSPPCELLID2 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xff8);
    -
    -        /// address: 0x4003cffc
    -        /// PrimeCell identification registers, SSPPCellID0-3 on page 3-16
    -        pub const SSPPCELLID3 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xffc);
    -    };
    -    pub const SPI1 = struct {
    -        pub const base_address = 0x40040000;
    -
    -        /// address: 0x40040000
    -        /// Control register 0, SSPCR0 on page 3-4
    -        pub const SSPCR0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Data Size Select: 0000 Reserved, undefined operation. 0001 Reserved, undefined
    -            /// operation. 0010 Reserved, undefined operation. 0011 4-bit data. 0100 5-bit data.
    -            /// 0101 6-bit data. 0110 7-bit data. 0111 8-bit data. 1000 9-bit data. 1001 10-bit
    -            /// data. 1010 11-bit data. 1011 12-bit data. 1100 13-bit data. 1101 14-bit data.
    -            /// 1110 15-bit data. 1111 16-bit data.
    -            DSS: u4,
    -            /// Frame format: 00 Motorola SPI frame format. 01 TI synchronous serial frame
    -            /// format. 10 National Microwire frame format. 11 Reserved, undefined operation.
    -            FRF: u2,
    -            /// SSPCLKOUT polarity, applicable to Motorola SPI frame format only. See Motorola
    -            /// SPI frame format on page 2-10.
    -            SPO: u1,
    -            /// SSPCLKOUT phase, applicable to Motorola SPI frame format only. See Motorola SPI
    -            /// frame format on page 2-10.
    -            SPH: u1,
    -            /// Serial clock rate. The value SCR is used to generate the transmit and receive
    -            /// bit rate of the PrimeCell SSP. The bit rate is: F SSPCLK CPSDVSR x (1+SCR) where
    -            /// CPSDVSR is an even value from 2-254, programmed through the SSPCPSR register and
    -            /// SCR is a value from 0-255.
    -            SCR: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x40040004
    -        /// Control register 1, SSPCR1 on page 3-5
    -        pub const SSPCR1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Loop back mode: 0 Normal serial port operation enabled. 1 Output of transmit
    -            /// serial shifter is connected to input of receive serial shifter internally.
    -            LBM: u1,
    -            /// Synchronous serial port enable: 0 SSP operation disabled. 1 SSP operation
    -            /// enabled.
    -            SSE: u1,
    -            /// Master or slave mode select. This bit can be modified only when the PrimeCell
    -            /// SSP is disabled, SSE=0: 0 Device configured as master, default. 1 Device
    -            /// configured as slave.
    -            MS: u1,
    -            /// Slave-mode output disable. This bit is relevant only in the slave mode, MS=1. In
    -            /// multiple-slave systems, it is possible for an PrimeCell SSP master to broadcast
    -            /// a message to all slaves in the system while ensuring that only one slave drives
    -            /// data onto its serial output line. In such systems the RXD lines from multiple
    -            /// slaves could be tied together. To operate in such systems, the SOD bit can be
    -            /// set if the PrimeCell SSP slave is not supposed to drive the SSPTXD line: 0 SSP
    -            /// can drive the SSPTXD output in slave mode. 1 SSP must not drive the SSPTXD
    -            /// output in slave mode.
    -            SOD: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x40040008
    -        /// Data register, SSPDR on page 3-6
    -        pub const SSPDR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Transmit/Receive FIFO: Read Receive FIFO. Write Transmit FIFO. You must
    -            /// right-justify data when the PrimeCell SSP is programmed for a data size that is
    -            /// less than 16 bits. Unused bits at the top are ignored by transmit logic. The
    -            /// receive logic automatically right-justifies.
    -            DATA: u16,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x4004000c
    -        /// Status register, SSPSR on page 3-7
    -        pub const SSPSR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Transmit FIFO empty, RO: 0 Transmit FIFO is not empty. 1 Transmit FIFO is empty.
    -            TFE: u1,
    -            /// Transmit FIFO not full, RO: 0 Transmit FIFO is full. 1 Transmit FIFO is not
    -            /// full.
    -            TNF: u1,
    -            /// Receive FIFO not empty, RO: 0 Receive FIFO is empty. 1 Receive FIFO is not
    -            /// empty.
    -            RNE: u1,
    -            /// Receive FIFO full, RO: 0 Receive FIFO is not full. 1 Receive FIFO is full.
    -            RFF: u1,
    -            /// PrimeCell SSP busy flag, RO: 0 SSP is idle. 1 SSP is currently transmitting
    -            /// and/or receiving a frame or the transmit FIFO is not empty.
    -            BSY: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x40040010
    -        /// Clock prescale register, SSPCPSR on page 3-8
    -        pub const SSPCPSR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Clock prescale divisor. Must be an even number from 2-254, depending on the
    -            /// frequency of SSPCLK. The least significant bit always returns zero on reads.
    -            CPSDVSR: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x40040014
    -        /// Interrupt mask set or clear register, SSPIMSC on page 3-9
    -        pub const SSPIMSC = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Receive overrun interrupt mask: 0 Receive FIFO written to while full condition
    -            /// interrupt is masked. 1 Receive FIFO written to while full condition interrupt is
    -            /// not masked.
    -            RORIM: u1,
    -            /// Receive timeout interrupt mask: 0 Receive FIFO not empty and no read prior to
    -            /// timeout period interrupt is masked. 1 Receive FIFO not empty and no read prior
    -            /// to timeout period interrupt is not masked.
    -            RTIM: u1,
    -            /// Receive FIFO interrupt mask: 0 Receive FIFO half full or less condition
    -            /// interrupt is masked. 1 Receive FIFO half full or less condition interrupt is not
    -            /// masked.
    -            RXIM: u1,
    -            /// Transmit FIFO interrupt mask: 0 Transmit FIFO half empty or less condition
    -            /// interrupt is masked. 1 Transmit FIFO half empty or less condition interrupt is
    -            /// not masked.
    -            TXIM: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x40040018
    -        /// Raw interrupt status register, SSPRIS on page 3-10
    -        pub const SSPRIS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Gives the raw interrupt state, prior to masking, of the SSPRORINTR interrupt
    -            RORRIS: u1,
    -            /// Gives the raw interrupt state, prior to masking, of the SSPRTINTR interrupt
    -            RTRIS: u1,
    -            /// Gives the raw interrupt state, prior to masking, of the SSPRXINTR interrupt
    -            RXRIS: u1,
    -            /// Gives the raw interrupt state, prior to masking, of the SSPTXINTR interrupt
    -            TXRIS: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x4004001c
    -        /// Masked interrupt status register, SSPMIS on page 3-11
    -        pub const SSPMIS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Gives the receive over run masked interrupt status, after masking, of the
    -            /// SSPRORINTR interrupt
    -            RORMIS: u1,
    -            /// Gives the receive timeout masked interrupt state, after masking, of the
    -            /// SSPRTINTR interrupt
    -            RTMIS: u1,
    -            /// Gives the receive FIFO masked interrupt state, after masking, of the SSPRXINTR
    -            /// interrupt
    -            RXMIS: u1,
    -            /// Gives the transmit FIFO masked interrupt state, after masking, of the SSPTXINTR
    -            /// interrupt
    -            TXMIS: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x40040020
    -        /// Interrupt clear register, SSPICR on page 3-11
    -        pub const SSPICR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Clears the SSPRORINTR interrupt
    -            RORIC: u1,
    -            /// Clears the SSPRTINTR interrupt
    -            RTIC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x40040024
    -        /// DMA control register, SSPDMACR on page 3-12
    -        pub const SSPDMACR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Receive DMA Enable. If this bit is set to 1, DMA for the receive FIFO is
    -            /// enabled.
    -            RXDMAE: u1,
    -            /// Transmit DMA Enable. If this bit is set to 1, DMA for the transmit FIFO is
    -            /// enabled.
    -            TXDMAE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x40040fe0
    -        /// Peripheral identification registers, SSPPeriphID0-3 on page 3-13
    -        pub const SSPPERIPHID0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// These bits read back as 0x22
    -            PARTNUMBER0: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0xfe0);
    -
    -        /// address: 0x40040fe4
    -        /// Peripheral identification registers, SSPPeriphID0-3 on page 3-13
    -        pub const SSPPERIPHID1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// These bits read back as 0x0
    -            PARTNUMBER1: u4,
    -            /// These bits read back as 0x1
    -            DESIGNER0: u4,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0xfe4);
    -
    -        /// address: 0x40040fe8
    -        /// Peripheral identification registers, SSPPeriphID0-3 on page 3-13
    -        pub const SSPPERIPHID2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// These bits read back as 0x4
    -            DESIGNER1: u4,
    -            /// These bits return the peripheral revision
    -            REVISION: u4,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0xfe8);
    -
    -        /// address: 0x40040fec
    -        /// Peripheral identification registers, SSPPeriphID0-3 on page 3-13
    -        pub const SSPPERIPHID3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// These bits read back as 0x00
    -            CONFIGURATION: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0xfec);
    -
    -        /// address: 0x40040ff0
    -        /// PrimeCell identification registers, SSPPCellID0-3 on page 3-16
    -        pub const SSPPCELLID0 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xff0);
    -
    -        /// address: 0x40040ff4
    -        /// PrimeCell identification registers, SSPPCellID0-3 on page 3-16
    -        pub const SSPPCELLID1 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xff4);
    -
    -        /// address: 0x40040ff8
    -        /// PrimeCell identification registers, SSPPCellID0-3 on page 3-16
    -        pub const SSPPCELLID2 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xff8);
    -
    -        /// address: 0x40040ffc
    -        /// PrimeCell identification registers, SSPPCellID0-3 on page 3-16
    -        pub const SSPPCELLID3 = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xffc);
    -    };
    -
    -    /// DW_apb_i2c address block\n\n
    -    /// List of configuration constants for the Synopsys I2C hardware (you may see
    -    /// references to these in I2C register header; these are *fixed* values, set at
    -    /// hardware design time):\n\n
    -    /// IC_ULTRA_FAST_MODE ................ 0x0\n
    -    /// IC_UFM_TBUF_CNT_DEFAULT ........... 0x8\n
    -    /// IC_UFM_SCL_LOW_COUNT .............. 0x0008\n
    -    /// IC_UFM_SCL_HIGH_COUNT ............. 0x0006\n
    -    /// IC_TX_TL .......................... 0x0\n
    -    /// IC_TX_CMD_BLOCK ................... 0x1\n
    -    /// IC_HAS_DMA ........................ 0x1\n
    -    /// IC_HAS_ASYNC_FIFO ................. 0x0\n
    -    /// IC_SMBUS_ARP ...................... 0x0\n
    -    /// IC_FIRST_DATA_BYTE_STATUS ......... 0x1\n
    -    /// IC_INTR_IO ........................ 0x1\n
    -    /// IC_MASTER_MODE .................... 0x1\n
    -    /// IC_DEFAULT_ACK_GENERAL_CALL ....... 0x1\n
    -    /// IC_INTR_POL ....................... 0x1\n
    -    /// IC_OPTIONAL_SAR ................... 0x0\n
    -    /// IC_DEFAULT_TAR_SLAVE_ADDR ......... 0x055\n
    -    /// IC_DEFAULT_SLAVE_ADDR ............. 0x055\n
    -    /// IC_DEFAULT_HS_SPKLEN .............. 0x1\n
    -    /// IC_FS_SCL_HIGH_COUNT .............. 0x0006\n
    -    /// IC_HS_SCL_LOW_COUNT ............... 0x0008\n
    -    /// IC_DEVICE_ID_VALUE ................ 0x0\n
    -    /// IC_10BITADDR_MASTER ............... 0x0\n
    -    /// IC_CLK_FREQ_OPTIMIZATION .......... 0x0\n
    -    /// IC_DEFAULT_FS_SPKLEN .............. 0x7\n
    -    /// IC_ADD_ENCODED_PARAMS ............. 0x0\n
    -    /// IC_DEFAULT_SDA_HOLD ............... 0x000001\n
    -    /// IC_DEFAULT_SDA_SETUP .............. 0x64\n
    -    /// IC_AVOID_RX_FIFO_FLUSH_ON_TX_ABRT . 0x0\n
    -    /// IC_CLOCK_PERIOD ................... 100\n
    -    /// IC_EMPTYFIFO_HOLD_MASTER_EN ....... 1\n
    -    /// IC_RESTART_EN ..................... 0x1\n
    -    /// IC_TX_CMD_BLOCK_DEFAULT ........... 0x0\n
    -    /// IC_BUS_CLEAR_FEATURE .............. 0x0\n
    -    /// IC_CAP_LOADING .................... 100\n
    -    /// IC_FS_SCL_LOW_COUNT ............... 0x000d\n
    -    /// APB_DATA_WIDTH .................... 32\n
    -    /// IC_SDA_STUCK_TIMEOUT_DEFAULT ...... 0xffffffff\n
    -    /// IC_SLV_DATA_NACK_ONLY ............. 0x1\n
    -    /// IC_10BITADDR_SLAVE ................ 0x0\n
    -    /// IC_CLK_TYPE ....................... 0x0\n
    -    /// IC_SMBUS_UDID_MSB ................. 0x0\n
    -    /// IC_SMBUS_SUSPEND_ALERT ............ 0x0\n
    -    /// IC_HS_SCL_HIGH_COUNT .............. 0x0006\n
    -    /// IC_SLV_RESTART_DET_EN ............. 0x1\n
    -    /// IC_SMBUS .......................... 0x0\n
    -    /// IC_OPTIONAL_SAR_DEFAULT ........... 0x0\n
    -    /// IC_PERSISTANT_SLV_ADDR_DEFAULT .... 0x0\n
    -    /// IC_USE_COUNTS ..................... 0x0\n
    -    /// IC_RX_BUFFER_DEPTH ................ 16\n
    -    /// IC_SCL_STUCK_TIMEOUT_DEFAULT ...... 0xffffffff\n
    -    /// IC_RX_FULL_HLD_BUS_EN ............. 0x1\n
    -    /// IC_SLAVE_DISABLE .................. 0x1\n
    -    /// IC_RX_TL .......................... 0x0\n
    -    /// IC_DEVICE_ID ...................... 0x0\n
    -    /// IC_HC_COUNT_VALUES ................ 0x0\n
    -    /// I2C_DYNAMIC_TAR_UPDATE ............ 0\n
    -    /// IC_SMBUS_CLK_LOW_MEXT_DEFAULT ..... 0xffffffff\n
    -    /// IC_SMBUS_CLK_LOW_SEXT_DEFAULT ..... 0xffffffff\n
    -    /// IC_HS_MASTER_CODE ................. 0x1\n
    -    /// IC_SMBUS_RST_IDLE_CNT_DEFAULT ..... 0xffff\n
    -    /// IC_SMBUS_UDID_LSB_DEFAULT ......... 0xffffffff\n
    -    /// IC_SS_SCL_HIGH_COUNT .............. 0x0028\n
    -    /// IC_SS_SCL_LOW_COUNT ............... 0x002f\n
    -    /// IC_MAX_SPEED_MODE ................. 0x2\n
    -    /// IC_STAT_FOR_CLK_STRETCH ........... 0x0\n
    -    /// IC_STOP_DET_IF_MASTER_ACTIVE ...... 0x0\n
    -    /// IC_DEFAULT_UFM_SPKLEN ............. 0x1\n
    -    /// IC_TX_BUFFER_DEPTH ................ 16
    -    pub const I2C0 = struct {
    -        pub const base_address = 0x40044000;
    -        pub const version = "1";
    -
    -        /// address: 0x40044000
    -        /// I2C Control Register. This register can be written only when the DW_apb_i2c is
    -        /// disabled, which corresponds to the IC_ENABLE[0] register being set to 0. Writes
    -        /// at other times have no effect.\n\n
    -        /// Read/Write Access: - bit 10 is read only. - bit 11 is read only - bit 16 is read
    -        /// only - bit 17 is read only - bits 18 and 19 are read only.
    -        pub const IC_CON = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This bit controls whether the DW_apb_i2c master is enabled.\n\n
    -            /// NOTE: Software should ensure that if this bit is written with '1' then bit 6
    -            /// should also be written with a '1'.
    -            MASTER_MODE: u1,
    -            /// These bits control at which speed the DW_apb_i2c operates; its setting is
    -            /// relevant only if one is operating the DW_apb_i2c in master mode. Hardware
    -            /// protects against illegal values being programmed by software. These bits must be
    -            /// programmed appropriately for slave mode also, as it is used to capture correct
    -            /// value of spike filter as per the speed mode.\n\n
    -            /// This register should be programmed only with a value in the range of 1 to
    -            /// IC_MAX_SPEED_MODE; otherwise, hardware updates this register with the value of
    -            /// IC_MAX_SPEED_MODE.\n\n
    -            /// 1: standard mode (100 kbit/s)\n\n
    -            /// 2: fast mode (<=400 kbit/s) or fast mode plus (<=1000Kbit/s)\n\n
    -            /// 3: high speed mode (3.4 Mbit/s)\n\n
    -            /// Note: This field is not applicable when IC_ULTRA_FAST_MODE=1
    -            SPEED: u2,
    -            /// When acting as a slave, this bit controls whether the DW_apb_i2c responds to 7-
    -            /// or 10-bit addresses. - 0: 7-bit addressing. The DW_apb_i2c ignores transactions
    -            /// that involve 10-bit addressing; for 7-bit addressing, only the lower 7 bits of
    -            /// the IC_SAR register are compared. - 1: 10-bit addressing. The DW_apb_i2c
    -            /// responds to only 10-bit addressing transfers that match the full 10 bits of the
    -            /// IC_SAR register.
    -            IC_10BITADDR_SLAVE: u1,
    -            /// Controls whether the DW_apb_i2c starts its transfers in 7- or 10-bit addressing
    -            /// mode when acting as a master. - 0: 7-bit addressing - 1: 10-bit addressing
    -            IC_10BITADDR_MASTER: u1,
    -            /// Determines whether RESTART conditions may be sent when acting as a master. Some
    -            /// older slaves do not support handling RESTART conditions; however, RESTART
    -            /// conditions are used in several DW_apb_i2c operations. When RESTART is disabled,
    -            /// the master is prohibited from performing the following functions: - Sending a
    -            /// START BYTE - Performing any high-speed mode operation - High-speed mode
    -            /// operation - Performing direction changes in combined format mode - Performing a
    -            /// read operation with a 10-bit address By replacing RESTART condition followed by
    -            /// a STOP and a subsequent START condition, split operations are broken down into
    -            /// multiple DW_apb_i2c transfers. If the above operations are performed, it will
    -            /// result in setting bit 6 (TX_ABRT) of the IC_RAW_INTR_STAT register.\n\n
    -            /// Reset value: ENABLED
    -            IC_RESTART_EN: u1,
    -            /// This bit controls whether I2C has its slave disabled, which means once the
    -            /// presetn signal is applied, then this bit is set and the slave is disabled.\n\n
    -            /// If this bit is set (slave is disabled), DW_apb_i2c functions only as a master
    -            /// and does not perform any action that requires a slave.\n\n
    -            /// NOTE: Software should ensure that if this bit is written with 0, then bit 0
    -            /// should also be written with a 0.
    -            IC_SLAVE_DISABLE: u1,
    -            /// In slave mode: - 1'b1: issues the STOP_DET interrupt only when it is addressed.
    -            /// - 1'b0: issues the STOP_DET irrespective of whether it's addressed or not. Reset
    -            /// value: 0x0\n\n
    -            /// NOTE: During a general call address, this slave does not issue the STOP_DET
    -            /// interrupt if STOP_DET_IF_ADDRESSED = 1'b1, even if the slave responds to the
    -            /// general call address by generating ACK. The STOP_DET interrupt is generated only
    -            /// when the transmitted address matches the slave address (SAR).
    -            STOP_DET_IFADDRESSED: u1,
    -            /// This bit controls the generation of the TX_EMPTY interrupt, as described in the
    -            /// IC_RAW_INTR_STAT register.\n\n
    -            /// Reset value: 0x0.
    -            TX_EMPTY_CTRL: u1,
    -            /// This bit controls whether DW_apb_i2c should hold the bus when the Rx FIFO is
    -            /// physically full to its RX_BUFFER_DEPTH, as described in the
    -            /// IC_RX_FULL_HLD_BUS_EN parameter.\n\n
    -            /// Reset value: 0x0.
    -            RX_FIFO_FULL_HLD_CTRL: u1,
    -            /// Master issues the STOP_DET interrupt irrespective of whether master is active or
    -            /// not
    -            STOP_DET_IF_MASTER_ACTIVE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x40044004
    -        /// I2C Target Address Register\n\n
    -        /// This register is 12 bits wide, and bits 31:12 are reserved. This register can be
    -        /// written to only when IC_ENABLE[0] is set to 0.\n\n
    -        /// Note: If the software or application is aware that the DW_apb_i2c is not using
    -        /// the TAR address for the pending commands in the Tx FIFO, then it is possible to
    -        /// update the TAR address even while the Tx FIFO has entries (IC_STATUS[2]= 0). -
    -        /// It is not necessary to perform any write to this register if DW_apb_i2c is
    -        /// enabled as an I2C slave only.
    -        pub const IC_TAR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This is the target address for any master transaction. When transmitting a
    -            /// General Call, these bits are ignored. To generate a START BYTE, the CPU needs to
    -            /// write only once into these bits.\n\n
    -            /// If the IC_TAR and IC_SAR are the same, loopback exists but the FIFOs are shared
    -            /// between master and slave, so full loopback is not feasible. Only one direction
    -            /// loopback mode is supported (simplex), not duplex. A master cannot transmit to
    -            /// itself; it can transmit to only a slave.
    -            IC_TAR: u10,
    -            /// If bit 11 (SPECIAL) is set to 1 and bit 13(Device-ID) is set to 0, then this bit
    -            /// indicates whether a General Call or START byte command is to be performed by the
    -            /// DW_apb_i2c. - 0: General Call Address - after issuing a General Call, only
    -            /// writes may be performed. Attempting to issue a read command results in setting
    -            /// bit 6 (TX_ABRT) of the IC_RAW_INTR_STAT register. The DW_apb_i2c remains in
    -            /// General Call mode until the SPECIAL bit value (bit 11) is cleared. - 1: START
    -            /// BYTE Reset value: 0x0
    -            GC_OR_START: u1,
    -            /// This bit indicates whether software performs a Device-ID or General Call or
    -            /// START BYTE command. - 0: ignore bit 10 GC_OR_START and use IC_TAR normally - 1:
    -            /// perform special I2C command as specified in Device_ID or GC_OR_START bit Reset
    -            /// value: 0x0
    -            SPECIAL: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x40044008
    -        /// I2C Slave Address Register
    -        pub const IC_SAR = @intToPtr(*volatile MmioInt(32, u10), base_address + 0x8);
    -
    -        /// address: 0x40044010
    -        /// I2C Rx/Tx Data Buffer and Command Register; this is the register the CPU writes
    -        /// to when filling the TX FIFO and the CPU reads from when retrieving bytes from RX
    -        /// FIFO.\n\n
    -        /// The size of the register changes as follows:\n\n
    -        /// Write: - 11 bits when IC_EMPTYFIFO_HOLD_MASTER_EN=1 - 9 bits when
    -        /// IC_EMPTYFIFO_HOLD_MASTER_EN=0 Read: - 12 bits when IC_FIRST_DATA_BYTE_STATUS = 1
    -        /// - 8 bits when IC_FIRST_DATA_BYTE_STATUS = 0 Note: In order for the DW_apb_i2c to
    -        /// continue acknowledging reads, a read command should be written for every byte
    -        /// that is to be received; otherwise the DW_apb_i2c will stop acknowledging.
    -        pub const IC_DATA_CMD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register contains the data to be transmitted or received on the I2C bus. If
    -            /// you are writing to this register and want to perform a read, bits 7:0 (DAT) are
    -            /// ignored by the DW_apb_i2c. However, when you read this register, these bits
    -            /// return the value of data received on the DW_apb_i2c interface.\n\n
    -            /// Reset value: 0x0
    -            DAT: u8,
    -            /// This bit controls whether a read or a write is performed. This bit does not
    -            /// control the direction when the DW_apb_i2con acts as a slave. It controls only
    -            /// the direction when it acts as a master.\n\n
    -            /// When a command is entered in the TX FIFO, this bit distinguishes the write and
    -            /// read commands. In slave-receiver mode, this bit is a 'don't care' because writes
    -            /// to this register are not required. In slave-transmitter mode, a '0' indicates
    -            /// that the data in IC_DATA_CMD is to be transmitted.\n\n
    -            /// When programming this bit, you should remember the following: attempting to
    -            /// perform a read operation after a General Call command has been sent results in a
    -            /// TX_ABRT interrupt (bit 6 of the IC_RAW_INTR_STAT register), unless bit 11
    -            /// (SPECIAL) in the IC_TAR register has been cleared. If a '1' is written to this
    -            /// bit after receiving a RD_REQ interrupt, then a TX_ABRT interrupt occurs.\n\n
    -            /// Reset value: 0x0
    -            CMD: u1,
    -            /// This bit controls whether a STOP is issued after the byte is sent or
    -            /// received.\n\n
    -            /// - 1 - STOP is issued after this byte, regardless of whether or not the Tx FIFO
    -            /// is empty. If the Tx FIFO is not empty, the master immediately tries to start a
    -            /// new transfer by issuing a START and arbitrating for the bus. - 0 - STOP is not
    -            /// issued after this byte, regardless of whether or not the Tx FIFO is empty. If
    -            /// the Tx FIFO is not empty, the master continues the current transfer by
    -            /// sending/receiving data bytes according to the value of the CMD bit. If the Tx
    -            /// FIFO is empty, the master holds the SCL line low and stalls the bus until a new
    -            /// command is available in the Tx FIFO. Reset value: 0x0
    -            STOP: u1,
    -            /// This bit controls whether a RESTART is issued before the byte is sent or
    -            /// received.\n\n
    -            /// 1 - If IC_RESTART_EN is 1, a RESTART is issued before the data is sent/received
    -            /// (according to the value of CMD), regardless of whether or not the transfer
    -            /// direction is changing from the previous command; if IC_RESTART_EN is 0, a STOP
    -            /// followed by a START is issued instead.\n\n
    -            /// 0 - If IC_RESTART_EN is 1, a RESTART is issued only if the transfer direction is
    -            /// changing from the previous command; if IC_RESTART_EN is 0, a STOP followed by a
    -            /// START is issued instead.\n\n
    -            /// Reset value: 0x0
    -            RESTART: u1,
    -            /// Indicates the first data byte received after the address phase for receive
    -            /// transfer in Master receiver or Slave receiver mode.\n\n
    -            /// Reset value : 0x0\n\n
    -            /// NOTE: In case of APB_DATA_WIDTH=8,\n\n
    -            /// 1. The user has to perform two APB Reads to IC_DATA_CMD in order to get status
    -            /// on 11 bit.\n\n
    -            /// 2. In order to read the 11 bit, the user has to perform the first data byte read
    -            /// [7:0] (offset 0x10) and then perform the second read [15:8] (offset 0x11) in
    -            /// order to know the status of 11 bit (whether the data received in previous read
    -            /// is a first data byte or not).\n\n
    -            /// 3. The 11th bit is an optional read field, user can ignore 2nd byte read [15:8]
    -            /// (offset 0x11) if not interested in FIRST_DATA_BYTE status.
    -            FIRST_DATA_BYTE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x40044014
    -        /// Standard Speed I2C Clock SCL High Count Register
    -        pub const IC_SS_SCL_HCNT = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x14);
    -
    -        /// address: 0x40044018
    -        /// Standard Speed I2C Clock SCL Low Count Register
    -        pub const IC_SS_SCL_LCNT = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x18);
    -
    -        /// address: 0x4004401c
    -        /// Fast Mode or Fast Mode Plus I2C Clock SCL High Count Register
    -        pub const IC_FS_SCL_HCNT = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x1c);
    -
    -        /// address: 0x40044020
    -        /// Fast Mode or Fast Mode Plus I2C Clock SCL Low Count Register
    -        pub const IC_FS_SCL_LCNT = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x20);
    -
    -        /// address: 0x4004402c
    -        /// I2C Interrupt Status Register\n\n
    -        /// Each bit in this register has a corresponding mask bit in the IC_INTR_MASK
    -        /// register. These bits are cleared by reading the matching interrupt clear
    -        /// register. The unmasked raw versions of these bits are available in the
    -        /// IC_RAW_INTR_STAT register.
    -        pub const IC_INTR_STAT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// See IC_RAW_INTR_STAT for a detailed description of R_RX_UNDER bit.\n\n
    -            /// Reset value: 0x0
    -            R_RX_UNDER: u1,
    -            /// See IC_RAW_INTR_STAT for a detailed description of R_RX_OVER bit.\n\n
    -            /// Reset value: 0x0
    -            R_RX_OVER: u1,
    -            /// See IC_RAW_INTR_STAT for a detailed description of R_RX_FULL bit.\n\n
    -            /// Reset value: 0x0
    -            R_RX_FULL: u1,
    -            /// See IC_RAW_INTR_STAT for a detailed description of R_TX_OVER bit.\n\n
    -            /// Reset value: 0x0
    -            R_TX_OVER: u1,
    -            /// See IC_RAW_INTR_STAT for a detailed description of R_TX_EMPTY bit.\n\n
    -            /// Reset value: 0x0
    -            R_TX_EMPTY: u1,
    -            /// See IC_RAW_INTR_STAT for a detailed description of R_RD_REQ bit.\n\n
    -            /// Reset value: 0x0
    -            R_RD_REQ: u1,
    -            /// See IC_RAW_INTR_STAT for a detailed description of R_TX_ABRT bit.\n\n
    -            /// Reset value: 0x0
    -            R_TX_ABRT: u1,
    -            /// See IC_RAW_INTR_STAT for a detailed description of R_RX_DONE bit.\n\n
    -            /// Reset value: 0x0
    -            R_RX_DONE: u1,
    -            /// See IC_RAW_INTR_STAT for a detailed description of R_ACTIVITY bit.\n\n
    -            /// Reset value: 0x0
    -            R_ACTIVITY: u1,
    -            /// See IC_RAW_INTR_STAT for a detailed description of R_STOP_DET bit.\n\n
    -            /// Reset value: 0x0
    -            R_STOP_DET: u1,
    -            /// See IC_RAW_INTR_STAT for a detailed description of R_START_DET bit.\n\n
    -            /// Reset value: 0x0
    -            R_START_DET: u1,
    -            /// See IC_RAW_INTR_STAT for a detailed description of R_GEN_CALL bit.\n\n
    -            /// Reset value: 0x0
    -            R_GEN_CALL: u1,
    -            /// See IC_RAW_INTR_STAT for a detailed description of R_RESTART_DET bit.\n\n
    -            /// Reset value: 0x0
    -            R_RESTART_DET: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x40044030
    -        /// I2C Interrupt Mask Register.\n\n
    -        /// These bits mask their corresponding interrupt status bits. This register is
    -        /// active low; a value of 0 masks the interrupt, whereas a value of 1 unmasks the
    -        /// interrupt.
    -        pub const IC_INTR_MASK = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This bit masks the R_RX_UNDER interrupt in IC_INTR_STAT register.\n\n
    -            /// Reset value: 0x1
    -            M_RX_UNDER: u1,
    -            /// This bit masks the R_RX_OVER interrupt in IC_INTR_STAT register.\n\n
    -            /// Reset value: 0x1
    -            M_RX_OVER: u1,
    -            /// This bit masks the R_RX_FULL interrupt in IC_INTR_STAT register.\n\n
    -            /// Reset value: 0x1
    -            M_RX_FULL: u1,
    -            /// This bit masks the R_TX_OVER interrupt in IC_INTR_STAT register.\n\n
    -            /// Reset value: 0x1
    -            M_TX_OVER: u1,
    -            /// This bit masks the R_TX_EMPTY interrupt in IC_INTR_STAT register.\n\n
    -            /// Reset value: 0x1
    -            M_TX_EMPTY: u1,
    -            /// This bit masks the R_RD_REQ interrupt in IC_INTR_STAT register.\n\n
    -            /// Reset value: 0x1
    -            M_RD_REQ: u1,
    -            /// This bit masks the R_TX_ABRT interrupt in IC_INTR_STAT register.\n\n
    -            /// Reset value: 0x1
    -            M_TX_ABRT: u1,
    -            /// This bit masks the R_RX_DONE interrupt in IC_INTR_STAT register.\n\n
    -            /// Reset value: 0x1
    -            M_RX_DONE: u1,
    -            /// This bit masks the R_ACTIVITY interrupt in IC_INTR_STAT register.\n\n
    -            /// Reset value: 0x0
    -            M_ACTIVITY: u1,
    -            /// This bit masks the R_STOP_DET interrupt in IC_INTR_STAT register.\n\n
    -            /// Reset value: 0x0
    -            M_STOP_DET: u1,
    -            /// This bit masks the R_START_DET interrupt in IC_INTR_STAT register.\n\n
    -            /// Reset value: 0x0
    -            M_START_DET: u1,
    -            /// This bit masks the R_GEN_CALL interrupt in IC_INTR_STAT register.\n\n
    -            /// Reset value: 0x1
    -            M_GEN_CALL: u1,
    -            /// This bit masks the R_RESTART_DET interrupt in IC_INTR_STAT register.\n\n
    -            /// Reset value: 0x0
    -            M_RESTART_DET: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x40044034
    -        /// I2C Raw Interrupt Status Register\n\n
    -        /// Unlike the IC_INTR_STAT register, these bits are not masked so they always show
    -        /// the true status of the DW_apb_i2c.
    -        pub const IC_RAW_INTR_STAT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Set if the processor attempts to read the receive buffer when it is empty by
    -            /// reading from the IC_DATA_CMD register. If the module is disabled
    -            /// (IC_ENABLE[0]=0), this bit keeps its level until the master or slave state
    -            /// machines go into idle, and when ic_en goes to 0, this interrupt is cleared.\n\n
    -            /// Reset value: 0x0
    -            RX_UNDER: u1,
    -            /// Set if the receive buffer is completely filled to IC_RX_BUFFER_DEPTH and an
    -            /// additional byte is received from an external I2C device. The DW_apb_i2c
    -            /// acknowledges this, but any data bytes received after the FIFO is full are lost.
    -            /// If the module is disabled (IC_ENABLE[0]=0), this bit keeps its level until the
    -            /// master or slave state machines go into idle, and when ic_en goes to 0, this
    -            /// interrupt is cleared.\n\n
    -            /// Note: If bit 9 of the IC_CON register (RX_FIFO_FULL_HLD_CTRL) is programmed to
    -            /// HIGH, then the RX_OVER interrupt never occurs, because the Rx FIFO never
    -            /// overflows.\n\n
    -            /// Reset value: 0x0
    -            RX_OVER: u1,
    -            /// Set when the receive buffer reaches or goes above the RX_TL threshold in the
    -            /// IC_RX_TL register. It is automatically cleared by hardware when buffer level
    -            /// goes below the threshold. If the module is disabled (IC_ENABLE[0]=0), the RX
    -            /// FIFO is flushed and held in reset; therefore the RX FIFO is not full. So this
    -            /// bit is cleared once the IC_ENABLE bit 0 is programmed with a 0, regardless of
    -            /// the activity that continues.\n\n
    -            /// Reset value: 0x0
    -            RX_FULL: u1,
    -            /// Set during transmit if the transmit buffer is filled to IC_TX_BUFFER_DEPTH and
    -            /// the processor attempts to issue another I2C command by writing to the
    -            /// IC_DATA_CMD register. When the module is disabled, this bit keeps its level
    -            /// until the master or slave state machines go into idle, and when ic_en goes to 0,
    -            /// this interrupt is cleared.\n\n
    -            /// Reset value: 0x0
    -            TX_OVER: u1,
    -            /// The behavior of the TX_EMPTY interrupt status differs based on the TX_EMPTY_CTRL
    -            /// selection in the IC_CON register. - When TX_EMPTY_CTRL = 0: This bit is set to 1
    -            /// when the transmit buffer is at or below the threshold value set in the IC_TX_TL
    -            /// register. - When TX_EMPTY_CTRL = 1: This bit is set to 1 when the transmit
    -            /// buffer is at or below the threshold value set in the IC_TX_TL register and the
    -            /// transmission of the address/data from the internal shift register for the most
    -            /// recently popped command is completed. It is automatically cleared by hardware
    -            /// when the buffer level goes above the threshold. When IC_ENABLE[0] is set to 0,
    -            /// the TX FIFO is flushed and held in reset. There the TX FIFO looks like it has no
    -            /// data within it, so this bit is set to 1, provided there is activity in the
    -            /// master or slave state machines. When there is no longer any activity, then with
    -            /// ic_en=0, this bit is set to 0.\n\n
    -            /// Reset value: 0x0.
    -            TX_EMPTY: u1,
    -            /// This bit is set to 1 when DW_apb_i2c is acting as a slave and another I2C master
    -            /// is attempting to read data from DW_apb_i2c. The DW_apb_i2c holds the I2C bus in
    -            /// a wait state (SCL=0) until this interrupt is serviced, which means that the
    -            /// slave has been addressed by a remote master that is asking for data to be
    -            /// transferred. The processor must respond to this interrupt and then write the
    -            /// requested data to the IC_DATA_CMD register. This bit is set to 0 just after the
    -            /// processor reads the IC_CLR_RD_REQ register.\n\n
    -            /// Reset value: 0x0
    -            RD_REQ: u1,
    -            /// This bit indicates if DW_apb_i2c, as an I2C transmitter, is unable to complete
    -            /// the intended actions on the contents of the transmit FIFO. This situation can
    -            /// occur both as an I2C master or an I2C slave, and is referred to as a 'transmit
    -            /// abort'. When this bit is set to 1, the IC_TX_ABRT_SOURCE register indicates the
    -            /// reason why the transmit abort takes places.\n\n
    -            /// Note: The DW_apb_i2c flushes/resets/empties the TX_FIFO and RX_FIFO whenever
    -            /// there is a transmit abort caused by any of the events tracked by the
    -            /// IC_TX_ABRT_SOURCE register. The FIFOs remains in this flushed state until the
    -            /// register IC_CLR_TX_ABRT is read. Once this read is performed, the Tx FIFO is
    -            /// then ready to accept more data bytes from the APB interface.\n\n
    -            /// Reset value: 0x0
    -            TX_ABRT: u1,
    -            /// When the DW_apb_i2c is acting as a slave-transmitter, this bit is set to 1 if
    -            /// the master does not acknowledge a transmitted byte. This occurs on the last byte
    -            /// of the transmission, indicating that the transmission is done.\n\n
    -            /// Reset value: 0x0
    -            RX_DONE: u1,
    -            /// This bit captures DW_apb_i2c activity and stays set until it is cleared. There
    -            /// are four ways to clear it: - Disabling the DW_apb_i2c - Reading the
    -            /// IC_CLR_ACTIVITY register - Reading the IC_CLR_INTR register - System reset Once
    -            /// this bit is set, it stays set unless one of the four methods is used to clear
    -            /// it. Even if the DW_apb_i2c module is idle, this bit remains set until cleared,
    -            /// indicating that there was activity on the bus.\n\n
    -            /// Reset value: 0x0
    -            ACTIVITY: u1,
    -            /// Indicates whether a STOP condition has occurred on the I2C interface regardless
    -            /// of whether DW_apb_i2c is operating in slave or master mode.\n\n
    -            /// In Slave Mode: - If IC_CON[7]=1'b1 (STOP_DET_IFADDRESSED), the STOP_DET
    -            /// interrupt will be issued only if slave is addressed. Note: During a general call
    -            /// address, this slave does not issue a STOP_DET interrupt if
    -            /// STOP_DET_IF_ADDRESSED=1'b1, even if the slave responds to the general call
    -            /// address by generating ACK. The STOP_DET interrupt is generated only when the
    -            /// transmitted address matches the slave address (SAR). - If IC_CON[7]=1'b0
    -            /// (STOP_DET_IFADDRESSED), the STOP_DET interrupt is issued irrespective of whether
    -            /// it is being addressed. In Master Mode: - If IC_CON[10]=1'b1
    -            /// (STOP_DET_IF_MASTER_ACTIVE),the STOP_DET interrupt will be issued only if Master
    -            /// is active. - If IC_CON[10]=1'b0 (STOP_DET_IFADDRESSED),the STOP_DET interrupt
    -            /// will be issued irrespective of whether master is active or not. Reset value: 0x0
    -            STOP_DET: u1,
    -            /// Indicates whether a START or RESTART condition has occurred on the I2C interface
    -            /// regardless of whether DW_apb_i2c is operating in slave or master mode.\n\n
    -            /// Reset value: 0x0
    -            START_DET: u1,
    -            /// Set only when a General Call address is received and it is acknowledged. It
    -            /// stays set until it is cleared either by disabling DW_apb_i2c or when the CPU
    -            /// reads bit 0 of the IC_CLR_GEN_CALL register. DW_apb_i2c stores the received data
    -            /// in the Rx buffer.\n\n
    -            /// Reset value: 0x0
    -            GEN_CALL: u1,
    -            /// Indicates whether a RESTART condition has occurred on the I2C interface when
    -            /// DW_apb_i2c is operating in Slave mode and the slave is being addressed. Enabled
    -            /// only when IC_SLV_RESTART_DET_EN=1.\n\n
    -            /// Note: However, in high-speed mode or during a START BYTE transfer, the RESTART
    -            /// comes before the address field as per the I2C protocol. In this case, the slave
    -            /// is not the addressed slave when the RESTART is issued, therefore DW_apb_i2c does
    -            /// not generate the RESTART_DET interrupt.\n\n
    -            /// Reset value: 0x0
    -            RESTART_DET: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x40044038
    -        /// I2C Receive FIFO Threshold Register
    -        pub const IC_RX_TL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Receive FIFO Threshold Level.\n\n
    -            /// Controls the level of entries (or above) that triggers the RX_FULL interrupt
    -            /// (bit 2 in IC_RAW_INTR_STAT register). The valid range is 0-255, with the
    -            /// additional restriction that hardware does not allow this value to be set to a
    -            /// value larger than the depth of the buffer. If an attempt is made to do that, the
    -            /// actual value set will be the maximum depth of the buffer. A value of 0 sets the
    -            /// threshold for 1 entry, and a value of 255 sets the threshold for 256 entries.
    -            RX_TL: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x4004403c
    -        /// I2C Transmit FIFO Threshold Register
    -        pub const IC_TX_TL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Transmit FIFO Threshold Level.\n\n
    -            /// Controls the level of entries (or below) that trigger the TX_EMPTY interrupt
    -            /// (bit 4 in IC_RAW_INTR_STAT register). The valid range is 0-255, with the
    -            /// additional restriction that it may not be set to value larger than the depth of
    -            /// the buffer. If an attempt is made to do that, the actual value set will be the
    -            /// maximum depth of the buffer. A value of 0 sets the threshold for 0 entries, and
    -            /// a value of 255 sets the threshold for 255 entries.
    -            TX_TL: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x40044040
    -        /// Clear Combined and Individual Interrupt Register
    -        pub const IC_CLR_INTR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Read this register to clear the combined interrupt, all individual interrupts,
    -            /// and the IC_TX_ABRT_SOURCE register. This bit does not clear hardware clearable
    -            /// interrupts but software clearable interrupts. Refer to Bit 9 of the
    -            /// IC_TX_ABRT_SOURCE register for an exception to clearing IC_TX_ABRT_SOURCE.\n\n
    -            /// Reset value: 0x0
    -            CLR_INTR: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x40044044
    -        /// Clear RX_UNDER Interrupt Register
    -        pub const IC_CLR_RX_UNDER = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Read this register to clear the RX_UNDER interrupt (bit 0) of the
    -            /// IC_RAW_INTR_STAT register.\n\n
    -            /// Reset value: 0x0
    -            CLR_RX_UNDER: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x40044048
    -        /// Clear RX_OVER Interrupt Register
    -        pub const IC_CLR_RX_OVER = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Read this register to clear the RX_OVER interrupt (bit 1) of the
    -            /// IC_RAW_INTR_STAT register.\n\n
    -            /// Reset value: 0x0
    -            CLR_RX_OVER: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x4004404c
    -        /// Clear TX_OVER Interrupt Register
    -        pub const IC_CLR_TX_OVER = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Read this register to clear the TX_OVER interrupt (bit 3) of the
    -            /// IC_RAW_INTR_STAT register.\n\n
    -            /// Reset value: 0x0
    -            CLR_TX_OVER: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x4c);
    -
    -        /// address: 0x40044050
    -        /// Clear RD_REQ Interrupt Register
    -        pub const IC_CLR_RD_REQ = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Read this register to clear the RD_REQ interrupt (bit 5) of the IC_RAW_INTR_STAT
    -            /// register.\n\n
    -            /// Reset value: 0x0
    -            CLR_RD_REQ: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x40044054
    -        /// Clear TX_ABRT Interrupt Register
    -        pub const IC_CLR_TX_ABRT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Read this register to clear the TX_ABRT interrupt (bit 6) of the
    -            /// IC_RAW_INTR_STAT register, and the IC_TX_ABRT_SOURCE register. This also
    -            /// releases the TX FIFO from the flushed/reset state, allowing more writes to the
    -            /// TX FIFO. Refer to Bit 9 of the IC_TX_ABRT_SOURCE register for an exception to
    -            /// clearing IC_TX_ABRT_SOURCE.\n\n
    -            /// Reset value: 0x0
    -            CLR_TX_ABRT: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x40044058
    -        /// Clear RX_DONE Interrupt Register
    -        pub const IC_CLR_RX_DONE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Read this register to clear the RX_DONE interrupt (bit 7) of the
    -            /// IC_RAW_INTR_STAT register.\n\n
    -            /// Reset value: 0x0
    -            CLR_RX_DONE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x4004405c
    -        /// Clear ACTIVITY Interrupt Register
    -        pub const IC_CLR_ACTIVITY = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Reading this register clears the ACTIVITY interrupt if the I2C is not active
    -            /// anymore. If the I2C module is still active on the bus, the ACTIVITY interrupt
    -            /// bit continues to be set. It is automatically cleared by hardware if the module
    -            /// is disabled and if there is no further activity on the bus. The value read from
    -            /// this register to get status of the ACTIVITY interrupt (bit 8) of the
    -            /// IC_RAW_INTR_STAT register.\n\n
    -            /// Reset value: 0x0
    -            CLR_ACTIVITY: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x40044060
    -        /// Clear STOP_DET Interrupt Register
    -        pub const IC_CLR_STOP_DET = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Read this register to clear the STOP_DET interrupt (bit 9) of the
    -            /// IC_RAW_INTR_STAT register.\n\n
    -            /// Reset value: 0x0
    -            CLR_STOP_DET: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x40044064
    -        /// Clear START_DET Interrupt Register
    -        pub const IC_CLR_START_DET = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Read this register to clear the START_DET interrupt (bit 10) of the
    -            /// IC_RAW_INTR_STAT register.\n\n
    -            /// Reset value: 0x0
    -            CLR_START_DET: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x40044068
    -        /// Clear GEN_CALL Interrupt Register
    -        pub const IC_CLR_GEN_CALL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Read this register to clear the GEN_CALL interrupt (bit 11) of IC_RAW_INTR_STAT
    -            /// register.\n\n
    -            /// Reset value: 0x0
    -            CLR_GEN_CALL: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x68);
    -
    -        /// address: 0x4004406c
    -        /// I2C Enable Register
    -        pub const IC_ENABLE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Controls whether the DW_apb_i2c is enabled. - 0: Disables DW_apb_i2c (TX and RX
    -            /// FIFOs are held in an erased state) - 1: Enables DW_apb_i2c Software can disable
    -            /// DW_apb_i2c while it is active. However, it is important that care be taken to
    -            /// ensure that DW_apb_i2c is disabled properly. A recommended procedure is
    -            /// described in 'Disabling DW_apb_i2c'.\n\n
    -            /// When DW_apb_i2c is disabled, the following occurs: - The TX FIFO and RX FIFO get
    -            /// flushed. - Status bits in the IC_INTR_STAT register are still active until
    -            /// DW_apb_i2c goes into IDLE state. If the module is transmitting, it stops as well
    -            /// as deletes the contents of the transmit buffer after the current transfer is
    -            /// complete. If the module is receiving, the DW_apb_i2c stops the current transfer
    -            /// at the end of the current byte and does not acknowledge the transfer.\n\n
    -            /// In systems with asynchronous pclk and ic_clk when IC_CLK_TYPE parameter set to
    -            /// asynchronous (1), there is a two ic_clk delay when enabling or disabling the
    -            /// DW_apb_i2c. For a detailed description on how to disable DW_apb_i2c, refer to
    -            /// 'Disabling DW_apb_i2c'\n\n
    -            /// Reset value: 0x0
    -            ENABLE: u1,
    -            /// When set, the controller initiates the transfer abort. - 0: ABORT not initiated
    -            /// or ABORT done - 1: ABORT operation in progress The software can abort the I2C
    -            /// transfer in master mode by setting this bit. The software can set this bit only
    -            /// when ENABLE is already set; otherwise, the controller ignores any write to ABORT
    -            /// bit. The software cannot clear the ABORT bit once set. In response to an ABORT,
    -            /// the controller issues a STOP and flushes the Tx FIFO after completing the
    -            /// current transfer, then sets the TX_ABORT interrupt after the abort operation.
    -            /// The ABORT bit is cleared automatically after the abort operation.\n\n
    -            /// For a detailed description on how to abort I2C transfers, refer to 'Aborting I2C
    -            /// Transfers'.\n\n
    -            /// Reset value: 0x0
    -            ABORT: u1,
    -            /// In Master mode: - 1'b1: Blocks the transmission of data on I2C bus even if Tx
    -            /// FIFO has data to transmit. - 1'b0: The transmission of data starts on I2C bus
    -            /// automatically, as soon as the first data is available in the Tx FIFO. Note: To
    -            /// block the execution of Master commands, set the TX_CMD_BLOCK bit only when Tx
    -            /// FIFO is empty (IC_STATUS[2]==1) and Master is in Idle state (IC_STATUS[5] == 0).
    -            /// Any further commands put in the Tx FIFO are not executed until TX_CMD_BLOCK bit
    -            /// is unset. Reset value: IC_TX_CMD_BLOCK_DEFAULT
    -            TX_CMD_BLOCK: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -        }), base_address + 0x6c);
    -
    -        /// address: 0x40044070
    -        /// I2C Status Register\n\n
    -        /// This is a read-only register used to indicate the current transfer status and
    -        /// FIFO status. The status register may be read at any time. None of the bits in
    -        /// this register request an interrupt.\n\n
    -        /// When the I2C is disabled by writing 0 in bit 0 of the IC_ENABLE register: - Bits
    -        /// 1 and 2 are set to 1 - Bits 3 and 10 are set to 0 When the master or slave state
    -        /// machines goes to idle and ic_en=0: - Bits 5 and 6 are set to 0
    -        pub const IC_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// I2C Activity Status. Reset value: 0x0
    -            ACTIVITY: u1,
    -            /// Transmit FIFO Not Full. Set when the transmit FIFO contains one or more empty
    -            /// locations, and is cleared when the FIFO is full. - 0: Transmit FIFO is full - 1:
    -            /// Transmit FIFO is not full Reset value: 0x1
    -            TFNF: u1,
    -            /// Transmit FIFO Completely Empty. When the transmit FIFO is completely empty, this
    -            /// bit is set. When it contains one or more valid entries, this bit is cleared.
    -            /// This bit field does not request an interrupt. - 0: Transmit FIFO is not empty -
    -            /// 1: Transmit FIFO is empty Reset value: 0x1
    -            TFE: u1,
    -            /// Receive FIFO Not Empty. This bit is set when the receive FIFO contains one or
    -            /// more entries; it is cleared when the receive FIFO is empty. - 0: Receive FIFO is
    -            /// empty - 1: Receive FIFO is not empty Reset value: 0x0
    -            RFNE: u1,
    -            /// Receive FIFO Completely Full. When the receive FIFO is completely full, this bit
    -            /// is set. When the receive FIFO contains one or more empty location, this bit is
    -            /// cleared. - 0: Receive FIFO is not full - 1: Receive FIFO is full Reset value:
    -            /// 0x0
    -            RFF: u1,
    -            /// Master FSM Activity Status. When the Master Finite State Machine (FSM) is not in
    -            /// the IDLE state, this bit is set. - 0: Master FSM is in IDLE state so the Master
    -            /// part of DW_apb_i2c is not Active - 1: Master FSM is not in IDLE state so the
    -            /// Master part of DW_apb_i2c is Active Note: IC_STATUS[0]-that is, ACTIVITY bit-is
    -            /// the OR of SLV_ACTIVITY and MST_ACTIVITY bits.\n\n
    -            /// Reset value: 0x0
    -            MST_ACTIVITY: u1,
    -            /// Slave FSM Activity Status. When the Slave Finite State Machine (FSM) is not in
    -            /// the IDLE state, this bit is set. - 0: Slave FSM is in IDLE state so the Slave
    -            /// part of DW_apb_i2c is not Active - 1: Slave FSM is not in IDLE state so the
    -            /// Slave part of DW_apb_i2c is Active Reset value: 0x0
    -            SLV_ACTIVITY: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -        }), base_address + 0x70);
    -
    -        /// address: 0x40044074
    -        /// I2C Transmit FIFO Level Register This register contains the number of valid data
    -        /// entries in the transmit FIFO buffer. It is cleared whenever: - The I2C is
    -        /// disabled - There is a transmit abort - that is, TX_ABRT bit is set in the
    -        /// IC_RAW_INTR_STAT register - The slave bulk transmit mode is aborted The register
    -        /// increments whenever data is placed into the transmit FIFO and decrements when
    -        /// data is taken from the transmit FIFO.
    -        pub const IC_TXFLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Transmit FIFO Level. Contains the number of valid data entries in the transmit
    -            /// FIFO.\n\n
    -            /// Reset value: 0x0
    -            TXFLR: u5,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -        }), base_address + 0x74);
    -
    -        /// address: 0x40044078
    -        /// I2C Receive FIFO Level Register This register contains the number of valid data
    -        /// entries in the receive FIFO buffer. It is cleared whenever: - The I2C is
    -        /// disabled - Whenever there is a transmit abort caused by any of the events
    -        /// tracked in IC_TX_ABRT_SOURCE The register increments whenever data is placed
    -        /// into the receive FIFO and decrements when data is taken from the receive FIFO.
    -        pub const IC_RXFLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Receive FIFO Level. Contains the number of valid data entries in the receive
    -            /// FIFO.\n\n
    -            /// Reset value: 0x0
    -            RXFLR: u5,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -        }), base_address + 0x78);
    -
    -        /// address: 0x4004407c
    -        /// I2C SDA Hold Time Length Register\n\n
    -        /// The bits [15:0] of this register are used to control the hold time of SDA during
    -        /// transmit in both slave and master mode (after SCL goes from HIGH to LOW).\n\n
    -        /// The bits [23:16] of this register are used to extend the SDA transition (if any)
    -        /// whenever SCL is HIGH in the receiver in either master or slave mode.\n\n
    -        /// Writes to this register succeed only when IC_ENABLE[0]=0.\n\n
    -        /// The values in this register are in units of ic_clk period. The value programmed
    -        /// in IC_SDA_TX_HOLD must be greater than the minimum hold time in each mode (one
    -        /// cycle in master mode, seven cycles in slave mode) for the value to be
    -        /// implemented.\n\n
    -        /// The programmed SDA hold time during transmit (IC_SDA_TX_HOLD) cannot exceed at
    -        /// any time the duration of the low part of scl. Therefore the programmed value
    -        /// cannot be larger than N_SCL_LOW-2, where N_SCL_LOW is the duration of the low
    -        /// part of the scl period measured in ic_clk cycles.
    -        pub const IC_SDA_HOLD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Sets the required SDA hold time in units of ic_clk period, when DW_apb_i2c acts
    -            /// as a transmitter.\n\n
    -            /// Reset value: IC_DEFAULT_SDA_HOLD[15:0].
    -            IC_SDA_TX_HOLD: u16,
    -            /// Sets the required SDA hold time in units of ic_clk period, when DW_apb_i2c acts
    -            /// as a receiver.\n\n
    -            /// Reset value: IC_DEFAULT_SDA_HOLD[23:16].
    -            IC_SDA_RX_HOLD: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0x7c);
    -
    -        /// address: 0x40044080
    -        /// I2C Transmit Abort Source Register\n\n
    -        /// This register has 32 bits that indicate the source of the TX_ABRT bit. Except
    -        /// for Bit 9, this register is cleared whenever the IC_CLR_TX_ABRT register or the
    -        /// IC_CLR_INTR register is read. To clear Bit 9, the source of the
    -        /// ABRT_SBYTE_NORSTRT must be fixed first; RESTART must be enabled (IC_CON[5]=1),
    -        /// the SPECIAL bit must be cleared (IC_TAR[11]), or the GC_OR_START bit must be
    -        /// cleared (IC_TAR[10]).\n\n
    -        /// Once the source of the ABRT_SBYTE_NORSTRT is fixed, then this bit can be cleared
    -        /// in the same manner as other bits in this register. If the source of the
    -        /// ABRT_SBYTE_NORSTRT is not fixed before attempting to clear this bit, Bit 9
    -        /// clears for one cycle and is then re-asserted.
    -        pub const IC_TX_ABRT_SOURCE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This field indicates that the Master is in 7-bit addressing mode and the address
    -            /// sent was not acknowledged by any slave.\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master-Transmitter or Master-Receiver
    -            ABRT_7B_ADDR_NOACK: u1,
    -            /// This field indicates that the Master is in 10-bit address mode and the first
    -            /// 10-bit address byte was not acknowledged by any slave.\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master-Transmitter or Master-Receiver
    -            ABRT_10ADDR1_NOACK: u1,
    -            /// This field indicates that the Master is in 10-bit address mode and that the
    -            /// second address byte of the 10-bit address was not acknowledged by any slave.\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master-Transmitter or Master-Receiver
    -            ABRT_10ADDR2_NOACK: u1,
    -            /// This field indicates the master-mode only bit. When the master receives an
    -            /// acknowledgement for the address, but when it sends data byte(s) following the
    -            /// address, it did not receive an acknowledge from the remote slave(s).\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master-Transmitter
    -            ABRT_TXDATA_NOACK: u1,
    -            /// This field indicates that DW_apb_i2c in master mode has sent a General Call and
    -            /// no slave on the bus acknowledged the General Call.\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master-Transmitter
    -            ABRT_GCALL_NOACK: u1,
    -            /// This field indicates that DW_apb_i2c in the master mode has sent a General Call
    -            /// but the user programmed the byte following the General Call to be a read from
    -            /// the bus (IC_DATA_CMD[9] is set to 1).\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master-Transmitter
    -            ABRT_GCALL_READ: u1,
    -            /// This field indicates that the Master is in High Speed mode and the High Speed
    -            /// Master code was acknowledged (wrong behavior).\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master
    -            ABRT_HS_ACKDET: u1,
    -            /// This field indicates that the Master has sent a START Byte and the START Byte
    -            /// was acknowledged (wrong behavior).\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master
    -            ABRT_SBYTE_ACKDET: u1,
    -            /// This field indicates that the restart is disabled (IC_RESTART_EN bit (IC_CON[5])
    -            /// =0) and the user is trying to use the master to transfer data in High Speed
    -            /// mode.\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master-Transmitter or Master-Receiver
    -            ABRT_HS_NORSTRT: u1,
    -            /// To clear Bit 9, the source of the ABRT_SBYTE_NORSTRT must be fixed first;
    -            /// restart must be enabled (IC_CON[5]=1), the SPECIAL bit must be cleared
    -            /// (IC_TAR[11]), or the GC_OR_START bit must be cleared (IC_TAR[10]). Once the
    -            /// source of the ABRT_SBYTE_NORSTRT is fixed, then this bit can be cleared in the
    -            /// same manner as other bits in this register. If the source of the
    -            /// ABRT_SBYTE_NORSTRT is not fixed before attempting to clear this bit, bit 9
    -            /// clears for one cycle and then gets reasserted. When this field is set to 1, the
    -            /// restart is disabled (IC_RESTART_EN bit (IC_CON[5]) =0) and the user is trying to
    -            /// send a START Byte.\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master
    -            ABRT_SBYTE_NORSTRT: u1,
    -            /// This field indicates that the restart is disabled (IC_RESTART_EN bit (IC_CON[5])
    -            /// =0) and the master sends a read command in 10-bit addressing mode.\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master-Receiver
    -            ABRT_10B_RD_NORSTRT: u1,
    -            /// This field indicates that the User tries to initiate a Master operation with the
    -            /// Master mode disabled.\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master-Transmitter or Master-Receiver
    -            ABRT_MASTER_DIS: u1,
    -            /// This field specifies that the Master has lost arbitration, or if
    -            /// IC_TX_ABRT_SOURCE[14] is also set, then the slave transmitter has lost
    -            /// arbitration.\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master-Transmitter or Slave-Transmitter
    -            ARB_LOST: u1,
    -            /// This field specifies that the Slave has received a read command and some data
    -            /// exists in the TX FIFO, so the slave issues a TX_ABRT interrupt to flush old data
    -            /// in TX FIFO.\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Slave-Transmitter
    -            ABRT_SLVFLUSH_TXFIFO: u1,
    -            /// This field indicates that a Slave has lost the bus while transmitting data to a
    -            /// remote master. IC_TX_ABRT_SOURCE[12] is set at the same time. Note: Even though
    -            /// the slave never 'owns' the bus, something could go wrong on the bus. This is a
    -            /// fail safe check. For instance, during a data transmission at the low-to-high
    -            /// transition of SCL, if what is on the data bus is not what is supposed to be
    -            /// transmitted, then DW_apb_i2c no longer own the bus.\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Slave-Transmitter
    -            ABRT_SLV_ARBLOST: u1,
    -            /// 1: When the processor side responds to a slave mode request for data to be
    -            /// transmitted to a remote master and user writes a 1 in CMD (bit 8) of IC_DATA_CMD
    -            /// register.\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Slave-Transmitter
    -            ABRT_SLVRD_INTX: u1,
    -            /// This is a master-mode-only bit. Master has detected the transfer abort
    -            /// (IC_ENABLE[1])\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master-Transmitter
    -            ABRT_USER_ABRT: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            /// This field indicates the number of Tx FIFO Data Commands which are flushed due
    -            /// to TX_ABRT interrupt. It is cleared whenever I2C is disabled.\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master-Transmitter or Slave-Transmitter
    -            TX_FLUSH_CNT: u9,
    -        }), base_address + 0x80);
    -
    -        /// address: 0x40044084
    -        /// Generate Slave Data NACK Register\n\n
    -        /// The register is used to generate a NACK for the data part of a transfer when
    -        /// DW_apb_i2c is acting as a slave-receiver. This register only exists when the
    -        /// IC_SLV_DATA_NACK_ONLY parameter is set to 1. When this parameter disabled, this
    -        /// register does not exist and writing to the register's address has no effect.\n\n
    -        /// A write can occur on this register if both of the following conditions are met:
    -        /// - DW_apb_i2c is disabled (IC_ENABLE[0] = 0) - Slave part is inactive
    -        /// (IC_STATUS[6] = 0) Note: The IC_STATUS[6] is a register read-back location for
    -        /// the internal slv_activity signal; the user should poll this before writing the
    -        /// ic_slv_data_nack_only bit.
    -        pub const IC_SLV_DATA_NACK_ONLY = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Generate NACK. This NACK generation only occurs when DW_apb_i2c is a
    -            /// slave-receiver. If this register is set to a value of 1, it can only generate a
    -            /// NACK after a data byte is received; hence, the data transfer is aborted and the
    -            /// data received is not pushed to the receive buffer.\n\n
    -            /// When the register is set to a value of 0, it generates NACK/ACK, depending on
    -            /// normal criteria. - 1: generate NACK after data byte received - 0: generate
    -            /// NACK/ACK normally Reset value: 0x0
    -            NACK: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x84);
    -
    -        /// address: 0x40044088
    -        /// DMA Control Register\n\n
    -        /// The register is used to enable the DMA Controller interface operation. There is
    -        /// a separate bit for transmit and receive. This can be programmed regardless of
    -        /// the state of IC_ENABLE.
    -        pub const IC_DMA_CR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Receive DMA Enable. This bit enables/disables the receive FIFO DMA channel.
    -            /// Reset value: 0x0
    -            RDMAE: u1,
    -            /// Transmit DMA Enable. This bit enables/disables the transmit FIFO DMA channel.
    -            /// Reset value: 0x0
    -            TDMAE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -        }), base_address + 0x88);
    -
    -        /// address: 0x4004408c
    -        /// DMA Transmit Data Level Register
    -        pub const IC_DMA_TDLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Transmit Data Level. This bit field controls the level at which a DMA request is
    -            /// made by the transmit logic. It is equal to the watermark level; that is, the
    -            /// dma_tx_req signal is generated when the number of valid data entries in the
    -            /// transmit FIFO is equal to or below this field value, and TDMAE = 1.\n\n
    -            /// Reset value: 0x0
    -            DMATDL: u4,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -        }), base_address + 0x8c);
    -
    -        /// address: 0x40044090
    -        /// I2C Receive Data Level Register
    -        pub const IC_DMA_RDLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Receive Data Level. This bit field controls the level at which a DMA request is
    -            /// made by the receive logic. The watermark level = DMARDL+1; that is, dma_rx_req
    -            /// is generated when the number of valid data entries in the receive FIFO is equal
    -            /// to or more than this field value + 1, and RDMAE =1. For instance, when DMARDL is
    -            /// 0, then dma_rx_req is asserted when 1 or more data entries are present in the
    -            /// receive FIFO.\n\n
    -            /// Reset value: 0x0
    -            DMARDL: u4,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -        }), base_address + 0x90);
    -
    -        /// address: 0x40044094
    -        /// I2C SDA Setup Register\n\n
    -        /// This register controls the amount of time delay (in terms of number of ic_clk
    -        /// clock periods) introduced in the rising edge of SCL - relative to SDA changing -
    -        /// when DW_apb_i2c services a read request in a slave-transmitter operation. The
    -        /// relevant I2C requirement is tSU:DAT (note 4) as detailed in the I2C Bus
    -        /// Specification. This register must be programmed with a value equal to or greater
    -        /// than 2.\n\n
    -        /// Writes to this register succeed only when IC_ENABLE[0] = 0.\n\n
    -        /// Note: The length of setup time is calculated using [(IC_SDA_SETUP - 1) *
    -        /// (ic_clk_period)], so if the user requires 10 ic_clk periods of setup time, they
    -        /// should program a value of 11. The IC_SDA_SETUP register is only used by the
    -        /// DW_apb_i2c when operating as a slave transmitter.
    -        pub const IC_SDA_SETUP = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// SDA Setup. It is recommended that if the required delay is 1000ns, then for an
    -            /// ic_clk frequency of 10 MHz, IC_SDA_SETUP should be programmed to a value of 11.
    -            /// IC_SDA_SETUP must be programmed with a minimum value of 2.
    -            SDA_SETUP: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x94);
    -
    -        /// address: 0x40044098
    -        /// I2C ACK General Call Register\n\n
    -        /// The register controls whether DW_apb_i2c responds with a ACK or NACK when it
    -        /// receives an I2C General Call address.\n\n
    -        /// This register is applicable only when the DW_apb_i2c is in slave mode.
    -        pub const IC_ACK_GENERAL_CALL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// ACK General Call. When set to 1, DW_apb_i2c responds with a ACK (by asserting
    -            /// ic_data_oe) when it receives a General Call. Otherwise, DW_apb_i2c responds with
    -            /// a NACK (by negating ic_data_oe).
    -            ACK_GEN_CALL: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x98);
    -
    -        /// address: 0x4004409c
    -        /// I2C Enable Status Register\n\n
    -        /// The register is used to report the DW_apb_i2c hardware status when the
    -        /// IC_ENABLE[0] register is set from 1 to 0; that is, when DW_apb_i2c is
    -        /// disabled.\n\n
    -        /// If IC_ENABLE[0] has been set to 1, bits 2:1 are forced to 0, and bit 0 is forced
    -        /// to 1.\n\n
    -        /// If IC_ENABLE[0] has been set to 0, bits 2:1 is only be valid as soon as bit 0 is
    -        /// read as '0'.\n\n
    -        /// Note: When IC_ENABLE[0] has been set to 0, a delay occurs for bit 0 to be read
    -        /// as 0 because disabling the DW_apb_i2c depends on I2C bus activities.
    -        pub const IC_ENABLE_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// ic_en Status. This bit always reflects the value driven on the output port
    -            /// ic_en. - When read as 1, DW_apb_i2c is deemed to be in an enabled state. - When
    -            /// read as 0, DW_apb_i2c is deemed completely inactive. Note: The CPU can safely
    -            /// read this bit anytime. When this bit is read as 0, the CPU can safely read
    -            /// SLV_RX_DATA_LOST (bit 2) and SLV_DISABLED_WHILE_BUSY (bit 1).\n\n
    -            /// Reset value: 0x0
    -            IC_EN: u1,
    -            /// Slave Disabled While Busy (Transmit, Receive). This bit indicates if a potential
    -            /// or active Slave operation has been aborted due to the setting bit 0 of the
    -            /// IC_ENABLE register from 1 to 0. This bit is set when the CPU writes a 0 to the
    -            /// IC_ENABLE register while:\n\n
    -            /// (a) DW_apb_i2c is receiving the address byte of the Slave-Transmitter operation
    -            /// from a remote master;\n\n
    -            /// OR,\n\n
    -            /// (b) address and data bytes of the Slave-Receiver operation from a remote
    -            /// master.\n\n
    -            /// When read as 1, DW_apb_i2c is deemed to have forced a NACK during any part of an
    -            /// I2C transfer, irrespective of whether the I2C address matches the slave address
    -            /// set in DW_apb_i2c (IC_SAR register) OR if the transfer is completed before
    -            /// IC_ENABLE is set to 0 but has not taken effect.\n\n
    -            /// Note: If the remote I2C master terminates the transfer with a STOP condition
    -            /// before the DW_apb_i2c has a chance to NACK a transfer, and IC_ENABLE[0] has been
    -            /// set to 0, then this bit will also be set to 1.\n\n
    -            /// When read as 0, DW_apb_i2c is deemed to have been disabled when there is master
    -            /// activity, or when the I2C bus is idle.\n\n
    -            /// Note: The CPU can safely read this bit when IC_EN (bit 0) is read as 0.\n\n
    -            /// Reset value: 0x0
    -            SLV_DISABLED_WHILE_BUSY: u1,
    -            /// Slave Received Data Lost. This bit indicates if a Slave-Receiver operation has
    -            /// been aborted with at least one data byte received from an I2C transfer due to
    -            /// the setting bit 0 of IC_ENABLE from 1 to 0. When read as 1, DW_apb_i2c is deemed
    -            /// to have been actively engaged in an aborted I2C transfer (with matching address)
    -            /// and the data phase of the I2C transfer has been entered, even though a data byte
    -            /// has been responded with a NACK.\n\n
    -            /// Note: If the remote I2C master terminates the transfer with a STOP condition
    -            /// before the DW_apb_i2c has a chance to NACK a transfer, and IC_ENABLE[0] has been
    -            /// set to 0, then this bit is also set to 1.\n\n
    -            /// When read as 0, DW_apb_i2c is deemed to have been disabled without being
    -            /// actively involved in the data phase of a Slave-Receiver transfer.\n\n
    -            /// Note: The CPU can safely read this bit when IC_EN (bit 0) is read as 0.\n\n
    -            /// Reset value: 0x0
    -            SLV_RX_DATA_LOST: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -        }), base_address + 0x9c);
    -
    -        /// address: 0x400440a0
    -        /// I2C SS, FS or FM+ spike suppression limit\n\n
    -        /// This register is used to store the duration, measured in ic_clk cycles, of the
    -        /// longest spike that is filtered out by the spike suppression logic when the
    -        /// component is operating in SS, FS or FM+ modes. The relevant I2C requirement is
    -        /// tSP (table 4) as detailed in the I2C Bus Specification. This register must be
    -        /// programmed with a minimum value of 1.
    -        pub const IC_FS_SPKLEN = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xa0);
    -
    -        /// address: 0x400440a8
    -        /// Clear RESTART_DET Interrupt Register
    -        pub const IC_CLR_RESTART_DET = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Read this register to clear the RESTART_DET interrupt (bit 12) of
    -            /// IC_RAW_INTR_STAT register.\n\n
    -            /// Reset value: 0x0
    -            CLR_RESTART_DET: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0xa8);
    -
    -        /// address: 0x400440f4
    -        /// Component Parameter Register 1\n\n
    -        /// Note This register is not implemented and therefore reads as 0. If it was
    -        /// implemented it would be a constant read-only register that contains encoded
    -        /// information about the component's parameter settings. Fields shown below are the
    -        /// settings for those parameters
    -        pub const IC_COMP_PARAM_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// APB data bus width is 32 bits
    -            APB_DATA_WIDTH: u2,
    -            /// MAX SPEED MODE = FAST MODE
    -            MAX_SPEED_MODE: u2,
    -            /// Programmable count values for each mode.
    -            HC_COUNT_VALUES: u1,
    -            /// COMBINED Interrupt outputs
    -            INTR_IO: u1,
    -            /// DMA handshaking signals are enabled
    -            HAS_DMA: u1,
    -            /// Encoded parameters not visible
    -            ADD_ENCODED_PARAMS: u1,
    -            /// RX Buffer Depth = 16
    -            RX_BUFFER_DEPTH: u8,
    -            /// TX Buffer Depth = 16
    -            TX_BUFFER_DEPTH: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0xf4);
    -
    -        /// address: 0x400440f8
    -        /// I2C Component Version Register
    -        pub const IC_COMP_VERSION = @intToPtr(*volatile u32, base_address + 0xf8);
    -
    -        /// address: 0x400440fc
    -        /// I2C Component Type Register
    -        pub const IC_COMP_TYPE = @intToPtr(*volatile u32, base_address + 0xfc);
    -    };
    -    pub const I2C1 = struct {
    -        pub const base_address = 0x40048000;
    -
    -        /// address: 0x40048000
    -        /// I2C Control Register. This register can be written only when the DW_apb_i2c is
    -        /// disabled, which corresponds to the IC_ENABLE[0] register being set to 0. Writes
    -        /// at other times have no effect.\n\n
    -        /// Read/Write Access: - bit 10 is read only. - bit 11 is read only - bit 16 is read
    -        /// only - bit 17 is read only - bits 18 and 19 are read only.
    -        pub const IC_CON = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This bit controls whether the DW_apb_i2c master is enabled.\n\n
    -            /// NOTE: Software should ensure that if this bit is written with '1' then bit 6
    -            /// should also be written with a '1'.
    -            MASTER_MODE: u1,
    -            /// These bits control at which speed the DW_apb_i2c operates; its setting is
    -            /// relevant only if one is operating the DW_apb_i2c in master mode. Hardware
    -            /// protects against illegal values being programmed by software. These bits must be
    -            /// programmed appropriately for slave mode also, as it is used to capture correct
    -            /// value of spike filter as per the speed mode.\n\n
    -            /// This register should be programmed only with a value in the range of 1 to
    -            /// IC_MAX_SPEED_MODE; otherwise, hardware updates this register with the value of
    -            /// IC_MAX_SPEED_MODE.\n\n
    -            /// 1: standard mode (100 kbit/s)\n\n
    -            /// 2: fast mode (<=400 kbit/s) or fast mode plus (<=1000Kbit/s)\n\n
    -            /// 3: high speed mode (3.4 Mbit/s)\n\n
    -            /// Note: This field is not applicable when IC_ULTRA_FAST_MODE=1
    -            SPEED: u2,
    -            /// When acting as a slave, this bit controls whether the DW_apb_i2c responds to 7-
    -            /// or 10-bit addresses. - 0: 7-bit addressing. The DW_apb_i2c ignores transactions
    -            /// that involve 10-bit addressing; for 7-bit addressing, only the lower 7 bits of
    -            /// the IC_SAR register are compared. - 1: 10-bit addressing. The DW_apb_i2c
    -            /// responds to only 10-bit addressing transfers that match the full 10 bits of the
    -            /// IC_SAR register.
    -            IC_10BITADDR_SLAVE: u1,
    -            /// Controls whether the DW_apb_i2c starts its transfers in 7- or 10-bit addressing
    -            /// mode when acting as a master. - 0: 7-bit addressing - 1: 10-bit addressing
    -            IC_10BITADDR_MASTER: u1,
    -            /// Determines whether RESTART conditions may be sent when acting as a master. Some
    -            /// older slaves do not support handling RESTART conditions; however, RESTART
    -            /// conditions are used in several DW_apb_i2c operations. When RESTART is disabled,
    -            /// the master is prohibited from performing the following functions: - Sending a
    -            /// START BYTE - Performing any high-speed mode operation - High-speed mode
    -            /// operation - Performing direction changes in combined format mode - Performing a
    -            /// read operation with a 10-bit address By replacing RESTART condition followed by
    -            /// a STOP and a subsequent START condition, split operations are broken down into
    -            /// multiple DW_apb_i2c transfers. If the above operations are performed, it will
    -            /// result in setting bit 6 (TX_ABRT) of the IC_RAW_INTR_STAT register.\n\n
    -            /// Reset value: ENABLED
    -            IC_RESTART_EN: u1,
    -            /// This bit controls whether I2C has its slave disabled, which means once the
    -            /// presetn signal is applied, then this bit is set and the slave is disabled.\n\n
    -            /// If this bit is set (slave is disabled), DW_apb_i2c functions only as a master
    -            /// and does not perform any action that requires a slave.\n\n
    -            /// NOTE: Software should ensure that if this bit is written with 0, then bit 0
    -            /// should also be written with a 0.
    -            IC_SLAVE_DISABLE: u1,
    -            /// In slave mode: - 1'b1: issues the STOP_DET interrupt only when it is addressed.
    -            /// - 1'b0: issues the STOP_DET irrespective of whether it's addressed or not. Reset
    -            /// value: 0x0\n\n
    -            /// NOTE: During a general call address, this slave does not issue the STOP_DET
    -            /// interrupt if STOP_DET_IF_ADDRESSED = 1'b1, even if the slave responds to the
    -            /// general call address by generating ACK. The STOP_DET interrupt is generated only
    -            /// when the transmitted address matches the slave address (SAR).
    -            STOP_DET_IFADDRESSED: u1,
    -            /// This bit controls the generation of the TX_EMPTY interrupt, as described in the
    -            /// IC_RAW_INTR_STAT register.\n\n
    -            /// Reset value: 0x0.
    -            TX_EMPTY_CTRL: u1,
    -            /// This bit controls whether DW_apb_i2c should hold the bus when the Rx FIFO is
    -            /// physically full to its RX_BUFFER_DEPTH, as described in the
    -            /// IC_RX_FULL_HLD_BUS_EN parameter.\n\n
    -            /// Reset value: 0x0.
    -            RX_FIFO_FULL_HLD_CTRL: u1,
    -            /// Master issues the STOP_DET interrupt irrespective of whether master is active or
    -            /// not
    -            STOP_DET_IF_MASTER_ACTIVE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x40048004
    -        /// I2C Target Address Register\n\n
    -        /// This register is 12 bits wide, and bits 31:12 are reserved. This register can be
    -        /// written to only when IC_ENABLE[0] is set to 0.\n\n
    -        /// Note: If the software or application is aware that the DW_apb_i2c is not using
    -        /// the TAR address for the pending commands in the Tx FIFO, then it is possible to
    -        /// update the TAR address even while the Tx FIFO has entries (IC_STATUS[2]= 0). -
    -        /// It is not necessary to perform any write to this register if DW_apb_i2c is
    -        /// enabled as an I2C slave only.
    -        pub const IC_TAR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This is the target address for any master transaction. When transmitting a
    -            /// General Call, these bits are ignored. To generate a START BYTE, the CPU needs to
    -            /// write only once into these bits.\n\n
    -            /// If the IC_TAR and IC_SAR are the same, loopback exists but the FIFOs are shared
    -            /// between master and slave, so full loopback is not feasible. Only one direction
    -            /// loopback mode is supported (simplex), not duplex. A master cannot transmit to
    -            /// itself; it can transmit to only a slave.
    -            IC_TAR: u10,
    -            /// If bit 11 (SPECIAL) is set to 1 and bit 13(Device-ID) is set to 0, then this bit
    -            /// indicates whether a General Call or START byte command is to be performed by the
    -            /// DW_apb_i2c. - 0: General Call Address - after issuing a General Call, only
    -            /// writes may be performed. Attempting to issue a read command results in setting
    -            /// bit 6 (TX_ABRT) of the IC_RAW_INTR_STAT register. The DW_apb_i2c remains in
    -            /// General Call mode until the SPECIAL bit value (bit 11) is cleared. - 1: START
    -            /// BYTE Reset value: 0x0
    -            GC_OR_START: u1,
    -            /// This bit indicates whether software performs a Device-ID or General Call or
    -            /// START BYTE command. - 0: ignore bit 10 GC_OR_START and use IC_TAR normally - 1:
    -            /// perform special I2C command as specified in Device_ID or GC_OR_START bit Reset
    -            /// value: 0x0
    -            SPECIAL: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x40048008
    -        /// I2C Slave Address Register
    -        pub const IC_SAR = @intToPtr(*volatile MmioInt(32, u10), base_address + 0x8);
    -
    -        /// address: 0x40048010
    -        /// I2C Rx/Tx Data Buffer and Command Register; this is the register the CPU writes
    -        /// to when filling the TX FIFO and the CPU reads from when retrieving bytes from RX
    -        /// FIFO.\n\n
    -        /// The size of the register changes as follows:\n\n
    -        /// Write: - 11 bits when IC_EMPTYFIFO_HOLD_MASTER_EN=1 - 9 bits when
    -        /// IC_EMPTYFIFO_HOLD_MASTER_EN=0 Read: - 12 bits when IC_FIRST_DATA_BYTE_STATUS = 1
    -        /// - 8 bits when IC_FIRST_DATA_BYTE_STATUS = 0 Note: In order for the DW_apb_i2c to
    -        /// continue acknowledging reads, a read command should be written for every byte
    -        /// that is to be received; otherwise the DW_apb_i2c will stop acknowledging.
    -        pub const IC_DATA_CMD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register contains the data to be transmitted or received on the I2C bus. If
    -            /// you are writing to this register and want to perform a read, bits 7:0 (DAT) are
    -            /// ignored by the DW_apb_i2c. However, when you read this register, these bits
    -            /// return the value of data received on the DW_apb_i2c interface.\n\n
    -            /// Reset value: 0x0
    -            DAT: u8,
    -            /// This bit controls whether a read or a write is performed. This bit does not
    -            /// control the direction when the DW_apb_i2con acts as a slave. It controls only
    -            /// the direction when it acts as a master.\n\n
    -            /// When a command is entered in the TX FIFO, this bit distinguishes the write and
    -            /// read commands. In slave-receiver mode, this bit is a 'don't care' because writes
    -            /// to this register are not required. In slave-transmitter mode, a '0' indicates
    -            /// that the data in IC_DATA_CMD is to be transmitted.\n\n
    -            /// When programming this bit, you should remember the following: attempting to
    -            /// perform a read operation after a General Call command has been sent results in a
    -            /// TX_ABRT interrupt (bit 6 of the IC_RAW_INTR_STAT register), unless bit 11
    -            /// (SPECIAL) in the IC_TAR register has been cleared. If a '1' is written to this
    -            /// bit after receiving a RD_REQ interrupt, then a TX_ABRT interrupt occurs.\n\n
    -            /// Reset value: 0x0
    -            CMD: u1,
    -            /// This bit controls whether a STOP is issued after the byte is sent or
    -            /// received.\n\n
    -            /// - 1 - STOP is issued after this byte, regardless of whether or not the Tx FIFO
    -            /// is empty. If the Tx FIFO is not empty, the master immediately tries to start a
    -            /// new transfer by issuing a START and arbitrating for the bus. - 0 - STOP is not
    -            /// issued after this byte, regardless of whether or not the Tx FIFO is empty. If
    -            /// the Tx FIFO is not empty, the master continues the current transfer by
    -            /// sending/receiving data bytes according to the value of the CMD bit. If the Tx
    -            /// FIFO is empty, the master holds the SCL line low and stalls the bus until a new
    -            /// command is available in the Tx FIFO. Reset value: 0x0
    -            STOP: u1,
    -            /// This bit controls whether a RESTART is issued before the byte is sent or
    -            /// received.\n\n
    -            /// 1 - If IC_RESTART_EN is 1, a RESTART is issued before the data is sent/received
    -            /// (according to the value of CMD), regardless of whether or not the transfer
    -            /// direction is changing from the previous command; if IC_RESTART_EN is 0, a STOP
    -            /// followed by a START is issued instead.\n\n
    -            /// 0 - If IC_RESTART_EN is 1, a RESTART is issued only if the transfer direction is
    -            /// changing from the previous command; if IC_RESTART_EN is 0, a STOP followed by a
    -            /// START is issued instead.\n\n
    -            /// Reset value: 0x0
    -            RESTART: u1,
    -            /// Indicates the first data byte received after the address phase for receive
    -            /// transfer in Master receiver or Slave receiver mode.\n\n
    -            /// Reset value : 0x0\n\n
    -            /// NOTE: In case of APB_DATA_WIDTH=8,\n\n
    -            /// 1. The user has to perform two APB Reads to IC_DATA_CMD in order to get status
    -            /// on 11 bit.\n\n
    -            /// 2. In order to read the 11 bit, the user has to perform the first data byte read
    -            /// [7:0] (offset 0x10) and then perform the second read [15:8] (offset 0x11) in
    -            /// order to know the status of 11 bit (whether the data received in previous read
    -            /// is a first data byte or not).\n\n
    -            /// 3. The 11th bit is an optional read field, user can ignore 2nd byte read [15:8]
    -            /// (offset 0x11) if not interested in FIRST_DATA_BYTE status.
    -            FIRST_DATA_BYTE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x40048014
    -        /// Standard Speed I2C Clock SCL High Count Register
    -        pub const IC_SS_SCL_HCNT = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x14);
    -
    -        /// address: 0x40048018
    -        /// Standard Speed I2C Clock SCL Low Count Register
    -        pub const IC_SS_SCL_LCNT = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x18);
    -
    -        /// address: 0x4004801c
    -        /// Fast Mode or Fast Mode Plus I2C Clock SCL High Count Register
    -        pub const IC_FS_SCL_HCNT = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x1c);
    -
    -        /// address: 0x40048020
    -        /// Fast Mode or Fast Mode Plus I2C Clock SCL Low Count Register
    -        pub const IC_FS_SCL_LCNT = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x20);
    -
    -        /// address: 0x4004802c
    -        /// I2C Interrupt Status Register\n\n
    -        /// Each bit in this register has a corresponding mask bit in the IC_INTR_MASK
    -        /// register. These bits are cleared by reading the matching interrupt clear
    -        /// register. The unmasked raw versions of these bits are available in the
    -        /// IC_RAW_INTR_STAT register.
    -        pub const IC_INTR_STAT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// See IC_RAW_INTR_STAT for a detailed description of R_RX_UNDER bit.\n\n
    -            /// Reset value: 0x0
    -            R_RX_UNDER: u1,
    -            /// See IC_RAW_INTR_STAT for a detailed description of R_RX_OVER bit.\n\n
    -            /// Reset value: 0x0
    -            R_RX_OVER: u1,
    -            /// See IC_RAW_INTR_STAT for a detailed description of R_RX_FULL bit.\n\n
    -            /// Reset value: 0x0
    -            R_RX_FULL: u1,
    -            /// See IC_RAW_INTR_STAT for a detailed description of R_TX_OVER bit.\n\n
    -            /// Reset value: 0x0
    -            R_TX_OVER: u1,
    -            /// See IC_RAW_INTR_STAT for a detailed description of R_TX_EMPTY bit.\n\n
    -            /// Reset value: 0x0
    -            R_TX_EMPTY: u1,
    -            /// See IC_RAW_INTR_STAT for a detailed description of R_RD_REQ bit.\n\n
    -            /// Reset value: 0x0
    -            R_RD_REQ: u1,
    -            /// See IC_RAW_INTR_STAT for a detailed description of R_TX_ABRT bit.\n\n
    -            /// Reset value: 0x0
    -            R_TX_ABRT: u1,
    -            /// See IC_RAW_INTR_STAT for a detailed description of R_RX_DONE bit.\n\n
    -            /// Reset value: 0x0
    -            R_RX_DONE: u1,
    -            /// See IC_RAW_INTR_STAT for a detailed description of R_ACTIVITY bit.\n\n
    -            /// Reset value: 0x0
    -            R_ACTIVITY: u1,
    -            /// See IC_RAW_INTR_STAT for a detailed description of R_STOP_DET bit.\n\n
    -            /// Reset value: 0x0
    -            R_STOP_DET: u1,
    -            /// See IC_RAW_INTR_STAT for a detailed description of R_START_DET bit.\n\n
    -            /// Reset value: 0x0
    -            R_START_DET: u1,
    -            /// See IC_RAW_INTR_STAT for a detailed description of R_GEN_CALL bit.\n\n
    -            /// Reset value: 0x0
    -            R_GEN_CALL: u1,
    -            /// See IC_RAW_INTR_STAT for a detailed description of R_RESTART_DET bit.\n\n
    -            /// Reset value: 0x0
    -            R_RESTART_DET: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x40048030
    -        /// I2C Interrupt Mask Register.\n\n
    -        /// These bits mask their corresponding interrupt status bits. This register is
    -        /// active low; a value of 0 masks the interrupt, whereas a value of 1 unmasks the
    -        /// interrupt.
    -        pub const IC_INTR_MASK = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This bit masks the R_RX_UNDER interrupt in IC_INTR_STAT register.\n\n
    -            /// Reset value: 0x1
    -            M_RX_UNDER: u1,
    -            /// This bit masks the R_RX_OVER interrupt in IC_INTR_STAT register.\n\n
    -            /// Reset value: 0x1
    -            M_RX_OVER: u1,
    -            /// This bit masks the R_RX_FULL interrupt in IC_INTR_STAT register.\n\n
    -            /// Reset value: 0x1
    -            M_RX_FULL: u1,
    -            /// This bit masks the R_TX_OVER interrupt in IC_INTR_STAT register.\n\n
    -            /// Reset value: 0x1
    -            M_TX_OVER: u1,
    -            /// This bit masks the R_TX_EMPTY interrupt in IC_INTR_STAT register.\n\n
    -            /// Reset value: 0x1
    -            M_TX_EMPTY: u1,
    -            /// This bit masks the R_RD_REQ interrupt in IC_INTR_STAT register.\n\n
    -            /// Reset value: 0x1
    -            M_RD_REQ: u1,
    -            /// This bit masks the R_TX_ABRT interrupt in IC_INTR_STAT register.\n\n
    -            /// Reset value: 0x1
    -            M_TX_ABRT: u1,
    -            /// This bit masks the R_RX_DONE interrupt in IC_INTR_STAT register.\n\n
    -            /// Reset value: 0x1
    -            M_RX_DONE: u1,
    -            /// This bit masks the R_ACTIVITY interrupt in IC_INTR_STAT register.\n\n
    -            /// Reset value: 0x0
    -            M_ACTIVITY: u1,
    -            /// This bit masks the R_STOP_DET interrupt in IC_INTR_STAT register.\n\n
    -            /// Reset value: 0x0
    -            M_STOP_DET: u1,
    -            /// This bit masks the R_START_DET interrupt in IC_INTR_STAT register.\n\n
    -            /// Reset value: 0x0
    -            M_START_DET: u1,
    -            /// This bit masks the R_GEN_CALL interrupt in IC_INTR_STAT register.\n\n
    -            /// Reset value: 0x1
    -            M_GEN_CALL: u1,
    -            /// This bit masks the R_RESTART_DET interrupt in IC_INTR_STAT register.\n\n
    -            /// Reset value: 0x0
    -            M_RESTART_DET: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x40048034
    -        /// I2C Raw Interrupt Status Register\n\n
    -        /// Unlike the IC_INTR_STAT register, these bits are not masked so they always show
    -        /// the true status of the DW_apb_i2c.
    -        pub const IC_RAW_INTR_STAT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Set if the processor attempts to read the receive buffer when it is empty by
    -            /// reading from the IC_DATA_CMD register. If the module is disabled
    -            /// (IC_ENABLE[0]=0), this bit keeps its level until the master or slave state
    -            /// machines go into idle, and when ic_en goes to 0, this interrupt is cleared.\n\n
    -            /// Reset value: 0x0
    -            RX_UNDER: u1,
    -            /// Set if the receive buffer is completely filled to IC_RX_BUFFER_DEPTH and an
    -            /// additional byte is received from an external I2C device. The DW_apb_i2c
    -            /// acknowledges this, but any data bytes received after the FIFO is full are lost.
    -            /// If the module is disabled (IC_ENABLE[0]=0), this bit keeps its level until the
    -            /// master or slave state machines go into idle, and when ic_en goes to 0, this
    -            /// interrupt is cleared.\n\n
    -            /// Note: If bit 9 of the IC_CON register (RX_FIFO_FULL_HLD_CTRL) is programmed to
    -            /// HIGH, then the RX_OVER interrupt never occurs, because the Rx FIFO never
    -            /// overflows.\n\n
    -            /// Reset value: 0x0
    -            RX_OVER: u1,
    -            /// Set when the receive buffer reaches or goes above the RX_TL threshold in the
    -            /// IC_RX_TL register. It is automatically cleared by hardware when buffer level
    -            /// goes below the threshold. If the module is disabled (IC_ENABLE[0]=0), the RX
    -            /// FIFO is flushed and held in reset; therefore the RX FIFO is not full. So this
    -            /// bit is cleared once the IC_ENABLE bit 0 is programmed with a 0, regardless of
    -            /// the activity that continues.\n\n
    -            /// Reset value: 0x0
    -            RX_FULL: u1,
    -            /// Set during transmit if the transmit buffer is filled to IC_TX_BUFFER_DEPTH and
    -            /// the processor attempts to issue another I2C command by writing to the
    -            /// IC_DATA_CMD register. When the module is disabled, this bit keeps its level
    -            /// until the master or slave state machines go into idle, and when ic_en goes to 0,
    -            /// this interrupt is cleared.\n\n
    -            /// Reset value: 0x0
    -            TX_OVER: u1,
    -            /// The behavior of the TX_EMPTY interrupt status differs based on the TX_EMPTY_CTRL
    -            /// selection in the IC_CON register. - When TX_EMPTY_CTRL = 0: This bit is set to 1
    -            /// when the transmit buffer is at or below the threshold value set in the IC_TX_TL
    -            /// register. - When TX_EMPTY_CTRL = 1: This bit is set to 1 when the transmit
    -            /// buffer is at or below the threshold value set in the IC_TX_TL register and the
    -            /// transmission of the address/data from the internal shift register for the most
    -            /// recently popped command is completed. It is automatically cleared by hardware
    -            /// when the buffer level goes above the threshold. When IC_ENABLE[0] is set to 0,
    -            /// the TX FIFO is flushed and held in reset. There the TX FIFO looks like it has no
    -            /// data within it, so this bit is set to 1, provided there is activity in the
    -            /// master or slave state machines. When there is no longer any activity, then with
    -            /// ic_en=0, this bit is set to 0.\n\n
    -            /// Reset value: 0x0.
    -            TX_EMPTY: u1,
    -            /// This bit is set to 1 when DW_apb_i2c is acting as a slave and another I2C master
    -            /// is attempting to read data from DW_apb_i2c. The DW_apb_i2c holds the I2C bus in
    -            /// a wait state (SCL=0) until this interrupt is serviced, which means that the
    -            /// slave has been addressed by a remote master that is asking for data to be
    -            /// transferred. The processor must respond to this interrupt and then write the
    -            /// requested data to the IC_DATA_CMD register. This bit is set to 0 just after the
    -            /// processor reads the IC_CLR_RD_REQ register.\n\n
    -            /// Reset value: 0x0
    -            RD_REQ: u1,
    -            /// This bit indicates if DW_apb_i2c, as an I2C transmitter, is unable to complete
    -            /// the intended actions on the contents of the transmit FIFO. This situation can
    -            /// occur both as an I2C master or an I2C slave, and is referred to as a 'transmit
    -            /// abort'. When this bit is set to 1, the IC_TX_ABRT_SOURCE register indicates the
    -            /// reason why the transmit abort takes places.\n\n
    -            /// Note: The DW_apb_i2c flushes/resets/empties the TX_FIFO and RX_FIFO whenever
    -            /// there is a transmit abort caused by any of the events tracked by the
    -            /// IC_TX_ABRT_SOURCE register. The FIFOs remains in this flushed state until the
    -            /// register IC_CLR_TX_ABRT is read. Once this read is performed, the Tx FIFO is
    -            /// then ready to accept more data bytes from the APB interface.\n\n
    -            /// Reset value: 0x0
    -            TX_ABRT: u1,
    -            /// When the DW_apb_i2c is acting as a slave-transmitter, this bit is set to 1 if
    -            /// the master does not acknowledge a transmitted byte. This occurs on the last byte
    -            /// of the transmission, indicating that the transmission is done.\n\n
    -            /// Reset value: 0x0
    -            RX_DONE: u1,
    -            /// This bit captures DW_apb_i2c activity and stays set until it is cleared. There
    -            /// are four ways to clear it: - Disabling the DW_apb_i2c - Reading the
    -            /// IC_CLR_ACTIVITY register - Reading the IC_CLR_INTR register - System reset Once
    -            /// this bit is set, it stays set unless one of the four methods is used to clear
    -            /// it. Even if the DW_apb_i2c module is idle, this bit remains set until cleared,
    -            /// indicating that there was activity on the bus.\n\n
    -            /// Reset value: 0x0
    -            ACTIVITY: u1,
    -            /// Indicates whether a STOP condition has occurred on the I2C interface regardless
    -            /// of whether DW_apb_i2c is operating in slave or master mode.\n\n
    -            /// In Slave Mode: - If IC_CON[7]=1'b1 (STOP_DET_IFADDRESSED), the STOP_DET
    -            /// interrupt will be issued only if slave is addressed. Note: During a general call
    -            /// address, this slave does not issue a STOP_DET interrupt if
    -            /// STOP_DET_IF_ADDRESSED=1'b1, even if the slave responds to the general call
    -            /// address by generating ACK. The STOP_DET interrupt is generated only when the
    -            /// transmitted address matches the slave address (SAR). - If IC_CON[7]=1'b0
    -            /// (STOP_DET_IFADDRESSED), the STOP_DET interrupt is issued irrespective of whether
    -            /// it is being addressed. In Master Mode: - If IC_CON[10]=1'b1
    -            /// (STOP_DET_IF_MASTER_ACTIVE),the STOP_DET interrupt will be issued only if Master
    -            /// is active. - If IC_CON[10]=1'b0 (STOP_DET_IFADDRESSED),the STOP_DET interrupt
    -            /// will be issued irrespective of whether master is active or not. Reset value: 0x0
    -            STOP_DET: u1,
    -            /// Indicates whether a START or RESTART condition has occurred on the I2C interface
    -            /// regardless of whether DW_apb_i2c is operating in slave or master mode.\n\n
    -            /// Reset value: 0x0
    -            START_DET: u1,
    -            /// Set only when a General Call address is received and it is acknowledged. It
    -            /// stays set until it is cleared either by disabling DW_apb_i2c or when the CPU
    -            /// reads bit 0 of the IC_CLR_GEN_CALL register. DW_apb_i2c stores the received data
    -            /// in the Rx buffer.\n\n
    -            /// Reset value: 0x0
    -            GEN_CALL: u1,
    -            /// Indicates whether a RESTART condition has occurred on the I2C interface when
    -            /// DW_apb_i2c is operating in Slave mode and the slave is being addressed. Enabled
    -            /// only when IC_SLV_RESTART_DET_EN=1.\n\n
    -            /// Note: However, in high-speed mode or during a START BYTE transfer, the RESTART
    -            /// comes before the address field as per the I2C protocol. In this case, the slave
    -            /// is not the addressed slave when the RESTART is issued, therefore DW_apb_i2c does
    -            /// not generate the RESTART_DET interrupt.\n\n
    -            /// Reset value: 0x0
    -            RESTART_DET: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x40048038
    -        /// I2C Receive FIFO Threshold Register
    -        pub const IC_RX_TL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Receive FIFO Threshold Level.\n\n
    -            /// Controls the level of entries (or above) that triggers the RX_FULL interrupt
    -            /// (bit 2 in IC_RAW_INTR_STAT register). The valid range is 0-255, with the
    -            /// additional restriction that hardware does not allow this value to be set to a
    -            /// value larger than the depth of the buffer. If an attempt is made to do that, the
    -            /// actual value set will be the maximum depth of the buffer. A value of 0 sets the
    -            /// threshold for 1 entry, and a value of 255 sets the threshold for 256 entries.
    -            RX_TL: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x4004803c
    -        /// I2C Transmit FIFO Threshold Register
    -        pub const IC_TX_TL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Transmit FIFO Threshold Level.\n\n
    -            /// Controls the level of entries (or below) that trigger the TX_EMPTY interrupt
    -            /// (bit 4 in IC_RAW_INTR_STAT register). The valid range is 0-255, with the
    -            /// additional restriction that it may not be set to value larger than the depth of
    -            /// the buffer. If an attempt is made to do that, the actual value set will be the
    -            /// maximum depth of the buffer. A value of 0 sets the threshold for 0 entries, and
    -            /// a value of 255 sets the threshold for 255 entries.
    -            TX_TL: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x40048040
    -        /// Clear Combined and Individual Interrupt Register
    -        pub const IC_CLR_INTR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Read this register to clear the combined interrupt, all individual interrupts,
    -            /// and the IC_TX_ABRT_SOURCE register. This bit does not clear hardware clearable
    -            /// interrupts but software clearable interrupts. Refer to Bit 9 of the
    -            /// IC_TX_ABRT_SOURCE register for an exception to clearing IC_TX_ABRT_SOURCE.\n\n
    -            /// Reset value: 0x0
    -            CLR_INTR: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x40048044
    -        /// Clear RX_UNDER Interrupt Register
    -        pub const IC_CLR_RX_UNDER = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Read this register to clear the RX_UNDER interrupt (bit 0) of the
    -            /// IC_RAW_INTR_STAT register.\n\n
    -            /// Reset value: 0x0
    -            CLR_RX_UNDER: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x40048048
    -        /// Clear RX_OVER Interrupt Register
    -        pub const IC_CLR_RX_OVER = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Read this register to clear the RX_OVER interrupt (bit 1) of the
    -            /// IC_RAW_INTR_STAT register.\n\n
    -            /// Reset value: 0x0
    -            CLR_RX_OVER: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x4004804c
    -        /// Clear TX_OVER Interrupt Register
    -        pub const IC_CLR_TX_OVER = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Read this register to clear the TX_OVER interrupt (bit 3) of the
    -            /// IC_RAW_INTR_STAT register.\n\n
    -            /// Reset value: 0x0
    -            CLR_TX_OVER: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x4c);
    -
    -        /// address: 0x40048050
    -        /// Clear RD_REQ Interrupt Register
    -        pub const IC_CLR_RD_REQ = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Read this register to clear the RD_REQ interrupt (bit 5) of the IC_RAW_INTR_STAT
    -            /// register.\n\n
    -            /// Reset value: 0x0
    -            CLR_RD_REQ: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x40048054
    -        /// Clear TX_ABRT Interrupt Register
    -        pub const IC_CLR_TX_ABRT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Read this register to clear the TX_ABRT interrupt (bit 6) of the
    -            /// IC_RAW_INTR_STAT register, and the IC_TX_ABRT_SOURCE register. This also
    -            /// releases the TX FIFO from the flushed/reset state, allowing more writes to the
    -            /// TX FIFO. Refer to Bit 9 of the IC_TX_ABRT_SOURCE register for an exception to
    -            /// clearing IC_TX_ABRT_SOURCE.\n\n
    -            /// Reset value: 0x0
    -            CLR_TX_ABRT: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x40048058
    -        /// Clear RX_DONE Interrupt Register
    -        pub const IC_CLR_RX_DONE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Read this register to clear the RX_DONE interrupt (bit 7) of the
    -            /// IC_RAW_INTR_STAT register.\n\n
    -            /// Reset value: 0x0
    -            CLR_RX_DONE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x4004805c
    -        /// Clear ACTIVITY Interrupt Register
    -        pub const IC_CLR_ACTIVITY = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Reading this register clears the ACTIVITY interrupt if the I2C is not active
    -            /// anymore. If the I2C module is still active on the bus, the ACTIVITY interrupt
    -            /// bit continues to be set. It is automatically cleared by hardware if the module
    -            /// is disabled and if there is no further activity on the bus. The value read from
    -            /// this register to get status of the ACTIVITY interrupt (bit 8) of the
    -            /// IC_RAW_INTR_STAT register.\n\n
    -            /// Reset value: 0x0
    -            CLR_ACTIVITY: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x40048060
    -        /// Clear STOP_DET Interrupt Register
    -        pub const IC_CLR_STOP_DET = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Read this register to clear the STOP_DET interrupt (bit 9) of the
    -            /// IC_RAW_INTR_STAT register.\n\n
    -            /// Reset value: 0x0
    -            CLR_STOP_DET: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x40048064
    -        /// Clear START_DET Interrupt Register
    -        pub const IC_CLR_START_DET = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Read this register to clear the START_DET interrupt (bit 10) of the
    -            /// IC_RAW_INTR_STAT register.\n\n
    -            /// Reset value: 0x0
    -            CLR_START_DET: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x40048068
    -        /// Clear GEN_CALL Interrupt Register
    -        pub const IC_CLR_GEN_CALL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Read this register to clear the GEN_CALL interrupt (bit 11) of IC_RAW_INTR_STAT
    -            /// register.\n\n
    -            /// Reset value: 0x0
    -            CLR_GEN_CALL: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x68);
    -
    -        /// address: 0x4004806c
    -        /// I2C Enable Register
    -        pub const IC_ENABLE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Controls whether the DW_apb_i2c is enabled. - 0: Disables DW_apb_i2c (TX and RX
    -            /// FIFOs are held in an erased state) - 1: Enables DW_apb_i2c Software can disable
    -            /// DW_apb_i2c while it is active. However, it is important that care be taken to
    -            /// ensure that DW_apb_i2c is disabled properly. A recommended procedure is
    -            /// described in 'Disabling DW_apb_i2c'.\n\n
    -            /// When DW_apb_i2c is disabled, the following occurs: - The TX FIFO and RX FIFO get
    -            /// flushed. - Status bits in the IC_INTR_STAT register are still active until
    -            /// DW_apb_i2c goes into IDLE state. If the module is transmitting, it stops as well
    -            /// as deletes the contents of the transmit buffer after the current transfer is
    -            /// complete. If the module is receiving, the DW_apb_i2c stops the current transfer
    -            /// at the end of the current byte and does not acknowledge the transfer.\n\n
    -            /// In systems with asynchronous pclk and ic_clk when IC_CLK_TYPE parameter set to
    -            /// asynchronous (1), there is a two ic_clk delay when enabling or disabling the
    -            /// DW_apb_i2c. For a detailed description on how to disable DW_apb_i2c, refer to
    -            /// 'Disabling DW_apb_i2c'\n\n
    -            /// Reset value: 0x0
    -            ENABLE: u1,
    -            /// When set, the controller initiates the transfer abort. - 0: ABORT not initiated
    -            /// or ABORT done - 1: ABORT operation in progress The software can abort the I2C
    -            /// transfer in master mode by setting this bit. The software can set this bit only
    -            /// when ENABLE is already set; otherwise, the controller ignores any write to ABORT
    -            /// bit. The software cannot clear the ABORT bit once set. In response to an ABORT,
    -            /// the controller issues a STOP and flushes the Tx FIFO after completing the
    -            /// current transfer, then sets the TX_ABORT interrupt after the abort operation.
    -            /// The ABORT bit is cleared automatically after the abort operation.\n\n
    -            /// For a detailed description on how to abort I2C transfers, refer to 'Aborting I2C
    -            /// Transfers'.\n\n
    -            /// Reset value: 0x0
    -            ABORT: u1,
    -            /// In Master mode: - 1'b1: Blocks the transmission of data on I2C bus even if Tx
    -            /// FIFO has data to transmit. - 1'b0: The transmission of data starts on I2C bus
    -            /// automatically, as soon as the first data is available in the Tx FIFO. Note: To
    -            /// block the execution of Master commands, set the TX_CMD_BLOCK bit only when Tx
    -            /// FIFO is empty (IC_STATUS[2]==1) and Master is in Idle state (IC_STATUS[5] == 0).
    -            /// Any further commands put in the Tx FIFO are not executed until TX_CMD_BLOCK bit
    -            /// is unset. Reset value: IC_TX_CMD_BLOCK_DEFAULT
    -            TX_CMD_BLOCK: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -        }), base_address + 0x6c);
    -
    -        /// address: 0x40048070
    -        /// I2C Status Register\n\n
    -        /// This is a read-only register used to indicate the current transfer status and
    -        /// FIFO status. The status register may be read at any time. None of the bits in
    -        /// this register request an interrupt.\n\n
    -        /// When the I2C is disabled by writing 0 in bit 0 of the IC_ENABLE register: - Bits
    -        /// 1 and 2 are set to 1 - Bits 3 and 10 are set to 0 When the master or slave state
    -        /// machines goes to idle and ic_en=0: - Bits 5 and 6 are set to 0
    -        pub const IC_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// I2C Activity Status. Reset value: 0x0
    -            ACTIVITY: u1,
    -            /// Transmit FIFO Not Full. Set when the transmit FIFO contains one or more empty
    -            /// locations, and is cleared when the FIFO is full. - 0: Transmit FIFO is full - 1:
    -            /// Transmit FIFO is not full Reset value: 0x1
    -            TFNF: u1,
    -            /// Transmit FIFO Completely Empty. When the transmit FIFO is completely empty, this
    -            /// bit is set. When it contains one or more valid entries, this bit is cleared.
    -            /// This bit field does not request an interrupt. - 0: Transmit FIFO is not empty -
    -            /// 1: Transmit FIFO is empty Reset value: 0x1
    -            TFE: u1,
    -            /// Receive FIFO Not Empty. This bit is set when the receive FIFO contains one or
    -            /// more entries; it is cleared when the receive FIFO is empty. - 0: Receive FIFO is
    -            /// empty - 1: Receive FIFO is not empty Reset value: 0x0
    -            RFNE: u1,
    -            /// Receive FIFO Completely Full. When the receive FIFO is completely full, this bit
    -            /// is set. When the receive FIFO contains one or more empty location, this bit is
    -            /// cleared. - 0: Receive FIFO is not full - 1: Receive FIFO is full Reset value:
    -            /// 0x0
    -            RFF: u1,
    -            /// Master FSM Activity Status. When the Master Finite State Machine (FSM) is not in
    -            /// the IDLE state, this bit is set. - 0: Master FSM is in IDLE state so the Master
    -            /// part of DW_apb_i2c is not Active - 1: Master FSM is not in IDLE state so the
    -            /// Master part of DW_apb_i2c is Active Note: IC_STATUS[0]-that is, ACTIVITY bit-is
    -            /// the OR of SLV_ACTIVITY and MST_ACTIVITY bits.\n\n
    -            /// Reset value: 0x0
    -            MST_ACTIVITY: u1,
    -            /// Slave FSM Activity Status. When the Slave Finite State Machine (FSM) is not in
    -            /// the IDLE state, this bit is set. - 0: Slave FSM is in IDLE state so the Slave
    -            /// part of DW_apb_i2c is not Active - 1: Slave FSM is not in IDLE state so the
    -            /// Slave part of DW_apb_i2c is Active Reset value: 0x0
    -            SLV_ACTIVITY: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -        }), base_address + 0x70);
    -
    -        /// address: 0x40048074
    -        /// I2C Transmit FIFO Level Register This register contains the number of valid data
    -        /// entries in the transmit FIFO buffer. It is cleared whenever: - The I2C is
    -        /// disabled - There is a transmit abort - that is, TX_ABRT bit is set in the
    -        /// IC_RAW_INTR_STAT register - The slave bulk transmit mode is aborted The register
    -        /// increments whenever data is placed into the transmit FIFO and decrements when
    -        /// data is taken from the transmit FIFO.
    -        pub const IC_TXFLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Transmit FIFO Level. Contains the number of valid data entries in the transmit
    -            /// FIFO.\n\n
    -            /// Reset value: 0x0
    -            TXFLR: u5,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -        }), base_address + 0x74);
    -
    -        /// address: 0x40048078
    -        /// I2C Receive FIFO Level Register This register contains the number of valid data
    -        /// entries in the receive FIFO buffer. It is cleared whenever: - The I2C is
    -        /// disabled - Whenever there is a transmit abort caused by any of the events
    -        /// tracked in IC_TX_ABRT_SOURCE The register increments whenever data is placed
    -        /// into the receive FIFO and decrements when data is taken from the receive FIFO.
    -        pub const IC_RXFLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Receive FIFO Level. Contains the number of valid data entries in the receive
    -            /// FIFO.\n\n
    -            /// Reset value: 0x0
    -            RXFLR: u5,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -        }), base_address + 0x78);
    -
    -        /// address: 0x4004807c
    -        /// I2C SDA Hold Time Length Register\n\n
    -        /// The bits [15:0] of this register are used to control the hold time of SDA during
    -        /// transmit in both slave and master mode (after SCL goes from HIGH to LOW).\n\n
    -        /// The bits [23:16] of this register are used to extend the SDA transition (if any)
    -        /// whenever SCL is HIGH in the receiver in either master or slave mode.\n\n
    -        /// Writes to this register succeed only when IC_ENABLE[0]=0.\n\n
    -        /// The values in this register are in units of ic_clk period. The value programmed
    -        /// in IC_SDA_TX_HOLD must be greater than the minimum hold time in each mode (one
    -        /// cycle in master mode, seven cycles in slave mode) for the value to be
    -        /// implemented.\n\n
    -        /// The programmed SDA hold time during transmit (IC_SDA_TX_HOLD) cannot exceed at
    -        /// any time the duration of the low part of scl. Therefore the programmed value
    -        /// cannot be larger than N_SCL_LOW-2, where N_SCL_LOW is the duration of the low
    -        /// part of the scl period measured in ic_clk cycles.
    -        pub const IC_SDA_HOLD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Sets the required SDA hold time in units of ic_clk period, when DW_apb_i2c acts
    -            /// as a transmitter.\n\n
    -            /// Reset value: IC_DEFAULT_SDA_HOLD[15:0].
    -            IC_SDA_TX_HOLD: u16,
    -            /// Sets the required SDA hold time in units of ic_clk period, when DW_apb_i2c acts
    -            /// as a receiver.\n\n
    -            /// Reset value: IC_DEFAULT_SDA_HOLD[23:16].
    -            IC_SDA_RX_HOLD: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0x7c);
    -
    -        /// address: 0x40048080
    -        /// I2C Transmit Abort Source Register\n\n
    -        /// This register has 32 bits that indicate the source of the TX_ABRT bit. Except
    -        /// for Bit 9, this register is cleared whenever the IC_CLR_TX_ABRT register or the
    -        /// IC_CLR_INTR register is read. To clear Bit 9, the source of the
    -        /// ABRT_SBYTE_NORSTRT must be fixed first; RESTART must be enabled (IC_CON[5]=1),
    -        /// the SPECIAL bit must be cleared (IC_TAR[11]), or the GC_OR_START bit must be
    -        /// cleared (IC_TAR[10]).\n\n
    -        /// Once the source of the ABRT_SBYTE_NORSTRT is fixed, then this bit can be cleared
    -        /// in the same manner as other bits in this register. If the source of the
    -        /// ABRT_SBYTE_NORSTRT is not fixed before attempting to clear this bit, Bit 9
    -        /// clears for one cycle and is then re-asserted.
    -        pub const IC_TX_ABRT_SOURCE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This field indicates that the Master is in 7-bit addressing mode and the address
    -            /// sent was not acknowledged by any slave.\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master-Transmitter or Master-Receiver
    -            ABRT_7B_ADDR_NOACK: u1,
    -            /// This field indicates that the Master is in 10-bit address mode and the first
    -            /// 10-bit address byte was not acknowledged by any slave.\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master-Transmitter or Master-Receiver
    -            ABRT_10ADDR1_NOACK: u1,
    -            /// This field indicates that the Master is in 10-bit address mode and that the
    -            /// second address byte of the 10-bit address was not acknowledged by any slave.\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master-Transmitter or Master-Receiver
    -            ABRT_10ADDR2_NOACK: u1,
    -            /// This field indicates the master-mode only bit. When the master receives an
    -            /// acknowledgement for the address, but when it sends data byte(s) following the
    -            /// address, it did not receive an acknowledge from the remote slave(s).\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master-Transmitter
    -            ABRT_TXDATA_NOACK: u1,
    -            /// This field indicates that DW_apb_i2c in master mode has sent a General Call and
    -            /// no slave on the bus acknowledged the General Call.\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master-Transmitter
    -            ABRT_GCALL_NOACK: u1,
    -            /// This field indicates that DW_apb_i2c in the master mode has sent a General Call
    -            /// but the user programmed the byte following the General Call to be a read from
    -            /// the bus (IC_DATA_CMD[9] is set to 1).\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master-Transmitter
    -            ABRT_GCALL_READ: u1,
    -            /// This field indicates that the Master is in High Speed mode and the High Speed
    -            /// Master code was acknowledged (wrong behavior).\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master
    -            ABRT_HS_ACKDET: u1,
    -            /// This field indicates that the Master has sent a START Byte and the START Byte
    -            /// was acknowledged (wrong behavior).\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master
    -            ABRT_SBYTE_ACKDET: u1,
    -            /// This field indicates that the restart is disabled (IC_RESTART_EN bit (IC_CON[5])
    -            /// =0) and the user is trying to use the master to transfer data in High Speed
    -            /// mode.\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master-Transmitter or Master-Receiver
    -            ABRT_HS_NORSTRT: u1,
    -            /// To clear Bit 9, the source of the ABRT_SBYTE_NORSTRT must be fixed first;
    -            /// restart must be enabled (IC_CON[5]=1), the SPECIAL bit must be cleared
    -            /// (IC_TAR[11]), or the GC_OR_START bit must be cleared (IC_TAR[10]). Once the
    -            /// source of the ABRT_SBYTE_NORSTRT is fixed, then this bit can be cleared in the
    -            /// same manner as other bits in this register. If the source of the
    -            /// ABRT_SBYTE_NORSTRT is not fixed before attempting to clear this bit, bit 9
    -            /// clears for one cycle and then gets reasserted. When this field is set to 1, the
    -            /// restart is disabled (IC_RESTART_EN bit (IC_CON[5]) =0) and the user is trying to
    -            /// send a START Byte.\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master
    -            ABRT_SBYTE_NORSTRT: u1,
    -            /// This field indicates that the restart is disabled (IC_RESTART_EN bit (IC_CON[5])
    -            /// =0) and the master sends a read command in 10-bit addressing mode.\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master-Receiver
    -            ABRT_10B_RD_NORSTRT: u1,
    -            /// This field indicates that the User tries to initiate a Master operation with the
    -            /// Master mode disabled.\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master-Transmitter or Master-Receiver
    -            ABRT_MASTER_DIS: u1,
    -            /// This field specifies that the Master has lost arbitration, or if
    -            /// IC_TX_ABRT_SOURCE[14] is also set, then the slave transmitter has lost
    -            /// arbitration.\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master-Transmitter or Slave-Transmitter
    -            ARB_LOST: u1,
    -            /// This field specifies that the Slave has received a read command and some data
    -            /// exists in the TX FIFO, so the slave issues a TX_ABRT interrupt to flush old data
    -            /// in TX FIFO.\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Slave-Transmitter
    -            ABRT_SLVFLUSH_TXFIFO: u1,
    -            /// This field indicates that a Slave has lost the bus while transmitting data to a
    -            /// remote master. IC_TX_ABRT_SOURCE[12] is set at the same time. Note: Even though
    -            /// the slave never 'owns' the bus, something could go wrong on the bus. This is a
    -            /// fail safe check. For instance, during a data transmission at the low-to-high
    -            /// transition of SCL, if what is on the data bus is not what is supposed to be
    -            /// transmitted, then DW_apb_i2c no longer own the bus.\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Slave-Transmitter
    -            ABRT_SLV_ARBLOST: u1,
    -            /// 1: When the processor side responds to a slave mode request for data to be
    -            /// transmitted to a remote master and user writes a 1 in CMD (bit 8) of IC_DATA_CMD
    -            /// register.\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Slave-Transmitter
    -            ABRT_SLVRD_INTX: u1,
    -            /// This is a master-mode-only bit. Master has detected the transfer abort
    -            /// (IC_ENABLE[1])\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master-Transmitter
    -            ABRT_USER_ABRT: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            /// This field indicates the number of Tx FIFO Data Commands which are flushed due
    -            /// to TX_ABRT interrupt. It is cleared whenever I2C is disabled.\n\n
    -            /// Reset value: 0x0\n\n
    -            /// Role of DW_apb_i2c: Master-Transmitter or Slave-Transmitter
    -            TX_FLUSH_CNT: u9,
    -        }), base_address + 0x80);
    -
    -        /// address: 0x40048084
    -        /// Generate Slave Data NACK Register\n\n
    -        /// The register is used to generate a NACK for the data part of a transfer when
    -        /// DW_apb_i2c is acting as a slave-receiver. This register only exists when the
    -        /// IC_SLV_DATA_NACK_ONLY parameter is set to 1. When this parameter disabled, this
    -        /// register does not exist and writing to the register's address has no effect.\n\n
    -        /// A write can occur on this register if both of the following conditions are met:
    -        /// - DW_apb_i2c is disabled (IC_ENABLE[0] = 0) - Slave part is inactive
    -        /// (IC_STATUS[6] = 0) Note: The IC_STATUS[6] is a register read-back location for
    -        /// the internal slv_activity signal; the user should poll this before writing the
    -        /// ic_slv_data_nack_only bit.
    -        pub const IC_SLV_DATA_NACK_ONLY = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Generate NACK. This NACK generation only occurs when DW_apb_i2c is a
    -            /// slave-receiver. If this register is set to a value of 1, it can only generate a
    -            /// NACK after a data byte is received; hence, the data transfer is aborted and the
    -            /// data received is not pushed to the receive buffer.\n\n
    -            /// When the register is set to a value of 0, it generates NACK/ACK, depending on
    -            /// normal criteria. - 1: generate NACK after data byte received - 0: generate
    -            /// NACK/ACK normally Reset value: 0x0
    -            NACK: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x84);
    -
    -        /// address: 0x40048088
    -        /// DMA Control Register\n\n
    -        /// The register is used to enable the DMA Controller interface operation. There is
    -        /// a separate bit for transmit and receive. This can be programmed regardless of
    -        /// the state of IC_ENABLE.
    -        pub const IC_DMA_CR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Receive DMA Enable. This bit enables/disables the receive FIFO DMA channel.
    -            /// Reset value: 0x0
    -            RDMAE: u1,
    -            /// Transmit DMA Enable. This bit enables/disables the transmit FIFO DMA channel.
    -            /// Reset value: 0x0
    -            TDMAE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -        }), base_address + 0x88);
    -
    -        /// address: 0x4004808c
    -        /// DMA Transmit Data Level Register
    -        pub const IC_DMA_TDLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Transmit Data Level. This bit field controls the level at which a DMA request is
    -            /// made by the transmit logic. It is equal to the watermark level; that is, the
    -            /// dma_tx_req signal is generated when the number of valid data entries in the
    -            /// transmit FIFO is equal to or below this field value, and TDMAE = 1.\n\n
    -            /// Reset value: 0x0
    -            DMATDL: u4,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -        }), base_address + 0x8c);
    -
    -        /// address: 0x40048090
    -        /// I2C Receive Data Level Register
    -        pub const IC_DMA_RDLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Receive Data Level. This bit field controls the level at which a DMA request is
    -            /// made by the receive logic. The watermark level = DMARDL+1; that is, dma_rx_req
    -            /// is generated when the number of valid data entries in the receive FIFO is equal
    -            /// to or more than this field value + 1, and RDMAE =1. For instance, when DMARDL is
    -            /// 0, then dma_rx_req is asserted when 1 or more data entries are present in the
    -            /// receive FIFO.\n\n
    -            /// Reset value: 0x0
    -            DMARDL: u4,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -        }), base_address + 0x90);
    -
    -        /// address: 0x40048094
    -        /// I2C SDA Setup Register\n\n
    -        /// This register controls the amount of time delay (in terms of number of ic_clk
    -        /// clock periods) introduced in the rising edge of SCL - relative to SDA changing -
    -        /// when DW_apb_i2c services a read request in a slave-transmitter operation. The
    -        /// relevant I2C requirement is tSU:DAT (note 4) as detailed in the I2C Bus
    -        /// Specification. This register must be programmed with a value equal to or greater
    -        /// than 2.\n\n
    -        /// Writes to this register succeed only when IC_ENABLE[0] = 0.\n\n
    -        /// Note: The length of setup time is calculated using [(IC_SDA_SETUP - 1) *
    -        /// (ic_clk_period)], so if the user requires 10 ic_clk periods of setup time, they
    -        /// should program a value of 11. The IC_SDA_SETUP register is only used by the
    -        /// DW_apb_i2c when operating as a slave transmitter.
    -        pub const IC_SDA_SETUP = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// SDA Setup. It is recommended that if the required delay is 1000ns, then for an
    -            /// ic_clk frequency of 10 MHz, IC_SDA_SETUP should be programmed to a value of 11.
    -            /// IC_SDA_SETUP must be programmed with a minimum value of 2.
    -            SDA_SETUP: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x94);
    -
    -        /// address: 0x40048098
    -        /// I2C ACK General Call Register\n\n
    -        /// The register controls whether DW_apb_i2c responds with a ACK or NACK when it
    -        /// receives an I2C General Call address.\n\n
    -        /// This register is applicable only when the DW_apb_i2c is in slave mode.
    -        pub const IC_ACK_GENERAL_CALL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// ACK General Call. When set to 1, DW_apb_i2c responds with a ACK (by asserting
    -            /// ic_data_oe) when it receives a General Call. Otherwise, DW_apb_i2c responds with
    -            /// a NACK (by negating ic_data_oe).
    -            ACK_GEN_CALL: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x98);
    -
    -        /// address: 0x4004809c
    -        /// I2C Enable Status Register\n\n
    -        /// The register is used to report the DW_apb_i2c hardware status when the
    -        /// IC_ENABLE[0] register is set from 1 to 0; that is, when DW_apb_i2c is
    -        /// disabled.\n\n
    -        /// If IC_ENABLE[0] has been set to 1, bits 2:1 are forced to 0, and bit 0 is forced
    -        /// to 1.\n\n
    -        /// If IC_ENABLE[0] has been set to 0, bits 2:1 is only be valid as soon as bit 0 is
    -        /// read as '0'.\n\n
    -        /// Note: When IC_ENABLE[0] has been set to 0, a delay occurs for bit 0 to be read
    -        /// as 0 because disabling the DW_apb_i2c depends on I2C bus activities.
    -        pub const IC_ENABLE_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// ic_en Status. This bit always reflects the value driven on the output port
    -            /// ic_en. - When read as 1, DW_apb_i2c is deemed to be in an enabled state. - When
    -            /// read as 0, DW_apb_i2c is deemed completely inactive. Note: The CPU can safely
    -            /// read this bit anytime. When this bit is read as 0, the CPU can safely read
    -            /// SLV_RX_DATA_LOST (bit 2) and SLV_DISABLED_WHILE_BUSY (bit 1).\n\n
    -            /// Reset value: 0x0
    -            IC_EN: u1,
    -            /// Slave Disabled While Busy (Transmit, Receive). This bit indicates if a potential
    -            /// or active Slave operation has been aborted due to the setting bit 0 of the
    -            /// IC_ENABLE register from 1 to 0. This bit is set when the CPU writes a 0 to the
    -            /// IC_ENABLE register while:\n\n
    -            /// (a) DW_apb_i2c is receiving the address byte of the Slave-Transmitter operation
    -            /// from a remote master;\n\n
    -            /// OR,\n\n
    -            /// (b) address and data bytes of the Slave-Receiver operation from a remote
    -            /// master.\n\n
    -            /// When read as 1, DW_apb_i2c is deemed to have forced a NACK during any part of an
    -            /// I2C transfer, irrespective of whether the I2C address matches the slave address
    -            /// set in DW_apb_i2c (IC_SAR register) OR if the transfer is completed before
    -            /// IC_ENABLE is set to 0 but has not taken effect.\n\n
    -            /// Note: If the remote I2C master terminates the transfer with a STOP condition
    -            /// before the DW_apb_i2c has a chance to NACK a transfer, and IC_ENABLE[0] has been
    -            /// set to 0, then this bit will also be set to 1.\n\n
    -            /// When read as 0, DW_apb_i2c is deemed to have been disabled when there is master
    -            /// activity, or when the I2C bus is idle.\n\n
    -            /// Note: The CPU can safely read this bit when IC_EN (bit 0) is read as 0.\n\n
    -            /// Reset value: 0x0
    -            SLV_DISABLED_WHILE_BUSY: u1,
    -            /// Slave Received Data Lost. This bit indicates if a Slave-Receiver operation has
    -            /// been aborted with at least one data byte received from an I2C transfer due to
    -            /// the setting bit 0 of IC_ENABLE from 1 to 0. When read as 1, DW_apb_i2c is deemed
    -            /// to have been actively engaged in an aborted I2C transfer (with matching address)
    -            /// and the data phase of the I2C transfer has been entered, even though a data byte
    -            /// has been responded with a NACK.\n\n
    -            /// Note: If the remote I2C master terminates the transfer with a STOP condition
    -            /// before the DW_apb_i2c has a chance to NACK a transfer, and IC_ENABLE[0] has been
    -            /// set to 0, then this bit is also set to 1.\n\n
    -            /// When read as 0, DW_apb_i2c is deemed to have been disabled without being
    -            /// actively involved in the data phase of a Slave-Receiver transfer.\n\n
    -            /// Note: The CPU can safely read this bit when IC_EN (bit 0) is read as 0.\n\n
    -            /// Reset value: 0x0
    -            SLV_RX_DATA_LOST: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -        }), base_address + 0x9c);
    -
    -        /// address: 0x400480a0
    -        /// I2C SS, FS or FM+ spike suppression limit\n\n
    -        /// This register is used to store the duration, measured in ic_clk cycles, of the
    -        /// longest spike that is filtered out by the spike suppression logic when the
    -        /// component is operating in SS, FS or FM+ modes. The relevant I2C requirement is
    -        /// tSP (table 4) as detailed in the I2C Bus Specification. This register must be
    -        /// programmed with a minimum value of 1.
    -        pub const IC_FS_SPKLEN = @intToPtr(*volatile MmioInt(32, u8), base_address + 0xa0);
    -
    -        /// address: 0x400480a8
    -        /// Clear RESTART_DET Interrupt Register
    -        pub const IC_CLR_RESTART_DET = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Read this register to clear the RESTART_DET interrupt (bit 12) of
    -            /// IC_RAW_INTR_STAT register.\n\n
    -            /// Reset value: 0x0
    -            CLR_RESTART_DET: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0xa8);
    -
    -        /// address: 0x400480f4
    -        /// Component Parameter Register 1\n\n
    -        /// Note This register is not implemented and therefore reads as 0. If it was
    -        /// implemented it would be a constant read-only register that contains encoded
    -        /// information about the component's parameter settings. Fields shown below are the
    -        /// settings for those parameters
    -        pub const IC_COMP_PARAM_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// APB data bus width is 32 bits
    -            APB_DATA_WIDTH: u2,
    -            /// MAX SPEED MODE = FAST MODE
    -            MAX_SPEED_MODE: u2,
    -            /// Programmable count values for each mode.
    -            HC_COUNT_VALUES: u1,
    -            /// COMBINED Interrupt outputs
    -            INTR_IO: u1,
    -            /// DMA handshaking signals are enabled
    -            HAS_DMA: u1,
    -            /// Encoded parameters not visible
    -            ADD_ENCODED_PARAMS: u1,
    -            /// RX Buffer Depth = 16
    -            RX_BUFFER_DEPTH: u8,
    -            /// TX Buffer Depth = 16
    -            TX_BUFFER_DEPTH: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0xf4);
    -
    -        /// address: 0x400480f8
    -        /// I2C Component Version Register
    -        pub const IC_COMP_VERSION = @intToPtr(*volatile u32, base_address + 0xf8);
    -
    -        /// address: 0x400480fc
    -        /// I2C Component Type Register
    -        pub const IC_COMP_TYPE = @intToPtr(*volatile u32, base_address + 0xfc);
    -    };
    -
    -    /// Control and data interface to SAR ADC
    -    pub const ADC = struct {
    -        pub const base_address = 0x4004c000;
    -        pub const version = "2";
    -
    -        /// address: 0x4004c000
    -        /// ADC Control and Status
    -        pub const CS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Power on ADC and enable its clock.\n
    -            /// 1 - enabled. 0 - disabled.
    -            EN: u1,
    -            /// Power on temperature sensor. 1 - enabled. 0 - disabled.
    -            TS_EN: u1,
    -            /// Start a single conversion. Self-clearing. Ignored if start_many is asserted.
    -            START_ONCE: u1,
    -            /// Continuously perform conversions whilst this bit is 1. A new conversion will
    -            /// start immediately after the previous finishes.
    -            START_MANY: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            /// 1 if the ADC is ready to start a new conversion. Implies any previous conversion
    -            /// has completed.\n
    -            /// 0 whilst conversion in progress.
    -            READY: u1,
    -            /// The most recent ADC conversion encountered an error; result is undefined or
    -            /// noisy.
    -            ERR: u1,
    -            /// Some past ADC conversion encountered an error. Write 1 to clear.
    -            ERR_STICKY: u1,
    -            reserved4: u1 = 0,
    -            /// Select analog mux input. Updated automatically in round-robin mode.
    -            AINSEL: u3,
    -            reserved5: u1 = 0,
    -            /// Round-robin sampling. 1 bit per channel. Set all bits to 0 to disable.\n
    -            /// Otherwise, the ADC will cycle through each enabled channel in a round-robin
    -            /// fashion.\n
    -            /// The first channel to be sampled will be the one currently indicated by AINSEL.\n
    -            /// AINSEL will be updated after each conversion with the newly-selected channel.
    -            RROBIN: u5,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x4004c004
    -        /// Result of most recent ADC conversion
    -        pub const RESULT = @intToPtr(*volatile MmioInt(32, u12), base_address + 0x4);
    -
    -        /// address: 0x4004c008
    -        /// FIFO control and status
    -        pub const FCS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// If 1: write result to the FIFO after each conversion.
    -            EN: u1,
    -            /// If 1: FIFO results are right-shifted to be one byte in size. Enables DMA to byte
    -            /// buffers.
    -            SHIFT: u1,
    -            /// If 1: conversion error bit appears in the FIFO alongside the result
    -            ERR: u1,
    -            /// If 1: assert DMA requests when FIFO contains data
    -            DREQ_EN: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            EMPTY: u1,
    -            FULL: u1,
    -            /// 1 if the FIFO has been underflowed. Write 1 to clear.
    -            UNDER: u1,
    -            /// 1 if the FIFO has been overflowed. Write 1 to clear.
    -            OVER: u1,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// The number of conversion results currently waiting in the FIFO
    -            LEVEL: u4,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            /// DREQ/IRQ asserted when level >= threshold
    -            THRESH: u4,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x4004c00c
    -        /// Conversion result FIFO
    -        pub const FIFO = @intToPtr(*volatile Mmio(32, packed struct {
    -            VAL: u12,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            /// 1 if this particular sample experienced a conversion error. Remains in the same
    -            /// location if the sample is shifted.
    -            ERR: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x4004c010
    -        /// Clock divider. If non-zero, CS_START_MANY will start conversions\n
    -        /// at regular intervals rather than back-to-back.\n
    -        /// The divider is reset when either of these fields are written.\n
    -        /// Total period is 1 + INT + FRAC / 256
    -        pub const DIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Fractional part of clock divisor. First-order delta-sigma.
    -            FRAC: u8,
    -            /// Integer part of clock divisor.
    -            INT: u16,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x4004c014
    -        /// Raw Interrupts
    -        pub const INTR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Triggered when the sample FIFO reaches a certain level.\n
    -            /// This level can be programmed via the FCS_THRESH field.
    -            FIFO: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x4004c018
    -        /// Interrupt Enable
    -        pub const INTE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Triggered when the sample FIFO reaches a certain level.\n
    -            /// This level can be programmed via the FCS_THRESH field.
    -            FIFO: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x4004c01c
    -        /// Interrupt Force
    -        pub const INTF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Triggered when the sample FIFO reaches a certain level.\n
    -            /// This level can be programmed via the FCS_THRESH field.
    -            FIFO: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x4004c020
    -        /// Interrupt status after masking & forcing
    -        pub const INTS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Triggered when the sample FIFO reaches a certain level.\n
    -            /// This level can be programmed via the FCS_THRESH field.
    -            FIFO: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x20);
    -    };
    -
    -    /// Simple PWM
    -    pub const PWM = struct {
    -        pub const base_address = 0x40050000;
    -        pub const version = "1";
    -
    -        /// address: 0x40050000
    -        /// Control and status register
    -        pub const CH0_CSR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Enable the PWM channel.
    -            EN: u1,
    -            /// 1: Enable phase-correct modulation. 0: Trailing-edge
    -            PH_CORRECT: u1,
    -            /// Invert output A
    -            A_INV: u1,
    -            /// Invert output B
    -            B_INV: u1,
    -            DIVMODE: u2,
    -            /// Retard the phase of the counter by 1 count, while it is running.\n
    -            /// Self-clearing. Write a 1, and poll until low. Counter must be running.
    -            PH_RET: u1,
    -            /// Advance the phase of the counter by 1 count, while it is running.\n
    -            /// Self-clearing. Write a 1, and poll until low. Counter must be running\n
    -            /// at less than full speed (div_int + div_frac / 16 > 1)
    -            PH_ADV: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x40050004
    -        /// INT and FRAC form a fixed-point fractional number.\n
    -        /// Counting rate is system clock frequency divided by this number.\n
    -        /// Fractional division uses simple 1st-order sigma-delta.
    -        pub const CH0_DIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            FRAC: u4,
    -            INT: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x40050008
    -        /// Direct access to the PWM counter
    -        pub const CH0_CTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x8);
    -
    -        /// address: 0x4005000c
    -        /// Counter compare values
    -        pub const CH0_CC = @intToPtr(*volatile Mmio(32, packed struct {
    -            A: u16,
    -            B: u16,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x40050010
    -        /// Counter wrap value
    -        pub const CH0_TOP = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x10);
    -
    -        /// address: 0x40050014
    -        /// Control and status register
    -        pub const CH1_CSR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Enable the PWM channel.
    -            EN: u1,
    -            /// 1: Enable phase-correct modulation. 0: Trailing-edge
    -            PH_CORRECT: u1,
    -            /// Invert output A
    -            A_INV: u1,
    -            /// Invert output B
    -            B_INV: u1,
    -            DIVMODE: u2,
    -            /// Retard the phase of the counter by 1 count, while it is running.\n
    -            /// Self-clearing. Write a 1, and poll until low. Counter must be running.
    -            PH_RET: u1,
    -            /// Advance the phase of the counter by 1 count, while it is running.\n
    -            /// Self-clearing. Write a 1, and poll until low. Counter must be running\n
    -            /// at less than full speed (div_int + div_frac / 16 > 1)
    -            PH_ADV: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x40050018
    -        /// INT and FRAC form a fixed-point fractional number.\n
    -        /// Counting rate is system clock frequency divided by this number.\n
    -        /// Fractional division uses simple 1st-order sigma-delta.
    -        pub const CH1_DIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            FRAC: u4,
    -            INT: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x4005001c
    -        /// Direct access to the PWM counter
    -        pub const CH1_CTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x1c);
    -
    -        /// address: 0x40050020
    -        /// Counter compare values
    -        pub const CH1_CC = @intToPtr(*volatile Mmio(32, packed struct {
    -            A: u16,
    -            B: u16,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x40050024
    -        /// Counter wrap value
    -        pub const CH1_TOP = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x24);
    -
    -        /// address: 0x40050028
    -        /// Control and status register
    -        pub const CH2_CSR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Enable the PWM channel.
    -            EN: u1,
    -            /// 1: Enable phase-correct modulation. 0: Trailing-edge
    -            PH_CORRECT: u1,
    -            /// Invert output A
    -            A_INV: u1,
    -            /// Invert output B
    -            B_INV: u1,
    -            DIVMODE: u2,
    -            /// Retard the phase of the counter by 1 count, while it is running.\n
    -            /// Self-clearing. Write a 1, and poll until low. Counter must be running.
    -            PH_RET: u1,
    -            /// Advance the phase of the counter by 1 count, while it is running.\n
    -            /// Self-clearing. Write a 1, and poll until low. Counter must be running\n
    -            /// at less than full speed (div_int + div_frac / 16 > 1)
    -            PH_ADV: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x4005002c
    -        /// INT and FRAC form a fixed-point fractional number.\n
    -        /// Counting rate is system clock frequency divided by this number.\n
    -        /// Fractional division uses simple 1st-order sigma-delta.
    -        pub const CH2_DIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            FRAC: u4,
    -            INT: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x40050030
    -        /// Direct access to the PWM counter
    -        pub const CH2_CTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x30);
    -
    -        /// address: 0x40050034
    -        /// Counter compare values
    -        pub const CH2_CC = @intToPtr(*volatile Mmio(32, packed struct {
    -            A: u16,
    -            B: u16,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x40050038
    -        /// Counter wrap value
    -        pub const CH2_TOP = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x38);
    -
    -        /// address: 0x4005003c
    -        /// Control and status register
    -        pub const CH3_CSR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Enable the PWM channel.
    -            EN: u1,
    -            /// 1: Enable phase-correct modulation. 0: Trailing-edge
    -            PH_CORRECT: u1,
    -            /// Invert output A
    -            A_INV: u1,
    -            /// Invert output B
    -            B_INV: u1,
    -            DIVMODE: u2,
    -            /// Retard the phase of the counter by 1 count, while it is running.\n
    -            /// Self-clearing. Write a 1, and poll until low. Counter must be running.
    -            PH_RET: u1,
    -            /// Advance the phase of the counter by 1 count, while it is running.\n
    -            /// Self-clearing. Write a 1, and poll until low. Counter must be running\n
    -            /// at less than full speed (div_int + div_frac / 16 > 1)
    -            PH_ADV: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x40050040
    -        /// INT and FRAC form a fixed-point fractional number.\n
    -        /// Counting rate is system clock frequency divided by this number.\n
    -        /// Fractional division uses simple 1st-order sigma-delta.
    -        pub const CH3_DIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            FRAC: u4,
    -            INT: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x40050044
    -        /// Direct access to the PWM counter
    -        pub const CH3_CTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x44);
    -
    -        /// address: 0x40050048
    -        /// Counter compare values
    -        pub const CH3_CC = @intToPtr(*volatile Mmio(32, packed struct {
    -            A: u16,
    -            B: u16,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x4005004c
    -        /// Counter wrap value
    -        pub const CH3_TOP = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x4c);
    -
    -        /// address: 0x40050050
    -        /// Control and status register
    -        pub const CH4_CSR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Enable the PWM channel.
    -            EN: u1,
    -            /// 1: Enable phase-correct modulation. 0: Trailing-edge
    -            PH_CORRECT: u1,
    -            /// Invert output A
    -            A_INV: u1,
    -            /// Invert output B
    -            B_INV: u1,
    -            DIVMODE: u2,
    -            /// Retard the phase of the counter by 1 count, while it is running.\n
    -            /// Self-clearing. Write a 1, and poll until low. Counter must be running.
    -            PH_RET: u1,
    -            /// Advance the phase of the counter by 1 count, while it is running.\n
    -            /// Self-clearing. Write a 1, and poll until low. Counter must be running\n
    -            /// at less than full speed (div_int + div_frac / 16 > 1)
    -            PH_ADV: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x40050054
    -        /// INT and FRAC form a fixed-point fractional number.\n
    -        /// Counting rate is system clock frequency divided by this number.\n
    -        /// Fractional division uses simple 1st-order sigma-delta.
    -        pub const CH4_DIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            FRAC: u4,
    -            INT: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x40050058
    -        /// Direct access to the PWM counter
    -        pub const CH4_CTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x58);
    -
    -        /// address: 0x4005005c
    -        /// Counter compare values
    -        pub const CH4_CC = @intToPtr(*volatile Mmio(32, packed struct {
    -            A: u16,
    -            B: u16,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x40050060
    -        /// Counter wrap value
    -        pub const CH4_TOP = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x60);
    -
    -        /// address: 0x40050064
    -        /// Control and status register
    -        pub const CH5_CSR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Enable the PWM channel.
    -            EN: u1,
    -            /// 1: Enable phase-correct modulation. 0: Trailing-edge
    -            PH_CORRECT: u1,
    -            /// Invert output A
    -            A_INV: u1,
    -            /// Invert output B
    -            B_INV: u1,
    -            DIVMODE: u2,
    -            /// Retard the phase of the counter by 1 count, while it is running.\n
    -            /// Self-clearing. Write a 1, and poll until low. Counter must be running.
    -            PH_RET: u1,
    -            /// Advance the phase of the counter by 1 count, while it is running.\n
    -            /// Self-clearing. Write a 1, and poll until low. Counter must be running\n
    -            /// at less than full speed (div_int + div_frac / 16 > 1)
    -            PH_ADV: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x40050068
    -        /// INT and FRAC form a fixed-point fractional number.\n
    -        /// Counting rate is system clock frequency divided by this number.\n
    -        /// Fractional division uses simple 1st-order sigma-delta.
    -        pub const CH5_DIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            FRAC: u4,
    -            INT: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x68);
    -
    -        /// address: 0x4005006c
    -        /// Direct access to the PWM counter
    -        pub const CH5_CTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x6c);
    -
    -        /// address: 0x40050070
    -        /// Counter compare values
    -        pub const CH5_CC = @intToPtr(*volatile Mmio(32, packed struct {
    -            A: u16,
    -            B: u16,
    -        }), base_address + 0x70);
    -
    -        /// address: 0x40050074
    -        /// Counter wrap value
    -        pub const CH5_TOP = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x74);
    -
    -        /// address: 0x40050078
    -        /// Control and status register
    -        pub const CH6_CSR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Enable the PWM channel.
    -            EN: u1,
    -            /// 1: Enable phase-correct modulation. 0: Trailing-edge
    -            PH_CORRECT: u1,
    -            /// Invert output A
    -            A_INV: u1,
    -            /// Invert output B
    -            B_INV: u1,
    -            DIVMODE: u2,
    -            /// Retard the phase of the counter by 1 count, while it is running.\n
    -            /// Self-clearing. Write a 1, and poll until low. Counter must be running.
    -            PH_RET: u1,
    -            /// Advance the phase of the counter by 1 count, while it is running.\n
    -            /// Self-clearing. Write a 1, and poll until low. Counter must be running\n
    -            /// at less than full speed (div_int + div_frac / 16 > 1)
    -            PH_ADV: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x78);
    -
    -        /// address: 0x4005007c
    -        /// INT and FRAC form a fixed-point fractional number.\n
    -        /// Counting rate is system clock frequency divided by this number.\n
    -        /// Fractional division uses simple 1st-order sigma-delta.
    -        pub const CH6_DIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            FRAC: u4,
    -            INT: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x7c);
    -
    -        /// address: 0x40050080
    -        /// Direct access to the PWM counter
    -        pub const CH6_CTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x80);
    -
    -        /// address: 0x40050084
    -        /// Counter compare values
    -        pub const CH6_CC = @intToPtr(*volatile Mmio(32, packed struct {
    -            A: u16,
    -            B: u16,
    -        }), base_address + 0x84);
    -
    -        /// address: 0x40050088
    -        /// Counter wrap value
    -        pub const CH6_TOP = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x88);
    -
    -        /// address: 0x4005008c
    -        /// Control and status register
    -        pub const CH7_CSR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Enable the PWM channel.
    -            EN: u1,
    -            /// 1: Enable phase-correct modulation. 0: Trailing-edge
    -            PH_CORRECT: u1,
    -            /// Invert output A
    -            A_INV: u1,
    -            /// Invert output B
    -            B_INV: u1,
    -            DIVMODE: u2,
    -            /// Retard the phase of the counter by 1 count, while it is running.\n
    -            /// Self-clearing. Write a 1, and poll until low. Counter must be running.
    -            PH_RET: u1,
    -            /// Advance the phase of the counter by 1 count, while it is running.\n
    -            /// Self-clearing. Write a 1, and poll until low. Counter must be running\n
    -            /// at less than full speed (div_int + div_frac / 16 > 1)
    -            PH_ADV: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x8c);
    -
    -        /// address: 0x40050090
    -        /// INT and FRAC form a fixed-point fractional number.\n
    -        /// Counting rate is system clock frequency divided by this number.\n
    -        /// Fractional division uses simple 1st-order sigma-delta.
    -        pub const CH7_DIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            FRAC: u4,
    -            INT: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x90);
    -
    -        /// address: 0x40050094
    -        /// Direct access to the PWM counter
    -        pub const CH7_CTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x94);
    -
    -        /// address: 0x40050098
    -        /// Counter compare values
    -        pub const CH7_CC = @intToPtr(*volatile Mmio(32, packed struct {
    -            A: u16,
    -            B: u16,
    -        }), base_address + 0x98);
    -
    -        /// address: 0x4005009c
    -        /// Counter wrap value
    -        pub const CH7_TOP = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x9c);
    -
    -        /// address: 0x400500a0
    -        /// This register aliases the CSR_EN bits for all channels.\n
    -        /// Writing to this register allows multiple channels to be enabled\n
    -        /// or disabled simultaneously, so they can run in perfect sync.\n
    -        /// For each channel, there is only one physical EN register bit,\n
    -        /// which can be accessed through here or CHx_CSR.
    -        pub const EN = @intToPtr(*volatile Mmio(32, packed struct {
    -            CH0: u1,
    -            CH1: u1,
    -            CH2: u1,
    -            CH3: u1,
    -            CH4: u1,
    -            CH5: u1,
    -            CH6: u1,
    -            CH7: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0xa0);
    -
    -        /// address: 0x400500a4
    -        /// Raw Interrupts
    -        pub const INTR = @intToPtr(*volatile Mmio(32, packed struct {
    -            CH0: u1,
    -            CH1: u1,
    -            CH2: u1,
    -            CH3: u1,
    -            CH4: u1,
    -            CH5: u1,
    -            CH6: u1,
    -            CH7: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0xa4);
    -
    -        /// address: 0x400500a8
    -        /// Interrupt Enable
    -        pub const INTE = @intToPtr(*volatile Mmio(32, packed struct {
    -            CH0: u1,
    -            CH1: u1,
    -            CH2: u1,
    -            CH3: u1,
    -            CH4: u1,
    -            CH5: u1,
    -            CH6: u1,
    -            CH7: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0xa8);
    -
    -        /// address: 0x400500ac
    -        /// Interrupt Force
    -        pub const INTF = @intToPtr(*volatile Mmio(32, packed struct {
    -            CH0: u1,
    -            CH1: u1,
    -            CH2: u1,
    -            CH3: u1,
    -            CH4: u1,
    -            CH5: u1,
    -            CH6: u1,
    -            CH7: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0xac);
    -
    -        /// address: 0x400500b0
    -        /// Interrupt status after masking & forcing
    -        pub const INTS = @intToPtr(*volatile Mmio(32, packed struct {
    -            CH0: u1,
    -            CH1: u1,
    -            CH2: u1,
    -            CH3: u1,
    -            CH4: u1,
    -            CH5: u1,
    -            CH6: u1,
    -            CH7: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0xb0);
    -    };
    -
    -    /// Controls time and alarms\n
    -    /// time is a 64 bit value indicating the time in usec since power-on\n
    -    /// timeh is the top 32 bits of time & timel is the bottom 32 bits\n
    -    /// to change time write to timelw before timehw\n
    -    /// to read time read from timelr before timehr\n
    -    /// An alarm is set by setting alarm_enable and writing to the corresponding alarm
    -    /// register\n
    -    /// When an alarm is pending, the corresponding alarm_running signal will be high\n
    -    /// An alarm can be cancelled before it has finished by clearing the alarm_enable\n
    -    /// When an alarm fires, the corresponding alarm_irq is set and alarm_running is
    -    /// cleared\n
    -    /// To clear the interrupt write a 1 to the corresponding alarm_irq
    -    pub const TIMER = struct {
    -        pub const base_address = 0x40054000;
    -        pub const version = "1";
    -
    -        /// address: 0x40054000
    -        /// Write to bits 63:32 of time\n
    -        /// always write timelw before timehw
    -        pub const TIMEHW = @intToPtr(*volatile u32, base_address + 0x0);
    -
    -        /// address: 0x40054004
    -        /// Write to bits 31:0 of time\n
    -        /// writes do not get copied to time until timehw is written
    -        pub const TIMELW = @intToPtr(*volatile u32, base_address + 0x4);
    -
    -        /// address: 0x40054008
    -        /// Read from bits 63:32 of time\n
    -        /// always read timelr before timehr
    -        pub const TIMEHR = @intToPtr(*volatile u32, base_address + 0x8);
    -
    -        /// address: 0x4005400c
    -        /// Read from bits 31:0 of time
    -        pub const TIMELR = @intToPtr(*volatile u32, base_address + 0xc);
    -
    -        /// address: 0x40054010
    -        /// Arm alarm 0, and configure the time it will fire.\n
    -        /// Once armed, the alarm fires when TIMER_ALARM0 == TIMELR.\n
    -        /// The alarm will disarm itself once it fires, and can\n
    -        /// be disarmed early using the ARMED status register.
    -        pub const ALARM0 = @intToPtr(*volatile u32, base_address + 0x10);
    -
    -        /// address: 0x40054014
    -        /// Arm alarm 1, and configure the time it will fire.\n
    -        /// Once armed, the alarm fires when TIMER_ALARM1 == TIMELR.\n
    -        /// The alarm will disarm itself once it fires, and can\n
    -        /// be disarmed early using the ARMED status register.
    -        pub const ALARM1 = @intToPtr(*volatile u32, base_address + 0x14);
    -
    -        /// address: 0x40054018
    -        /// Arm alarm 2, and configure the time it will fire.\n
    -        /// Once armed, the alarm fires when TIMER_ALARM2 == TIMELR.\n
    -        /// The alarm will disarm itself once it fires, and can\n
    -        /// be disarmed early using the ARMED status register.
    -        pub const ALARM2 = @intToPtr(*volatile u32, base_address + 0x18);
    -
    -        /// address: 0x4005401c
    -        /// Arm alarm 3, and configure the time it will fire.\n
    -        /// Once armed, the alarm fires when TIMER_ALARM3 == TIMELR.\n
    -        /// The alarm will disarm itself once it fires, and can\n
    -        /// be disarmed early using the ARMED status register.
    -        pub const ALARM3 = @intToPtr(*volatile u32, base_address + 0x1c);
    -
    -        /// address: 0x40054020
    -        /// Indicates the armed/disarmed status of each alarm.\n
    -        /// A write to the corresponding ALARMx register arms the alarm.\n
    -        /// Alarms automatically disarm upon firing, but writing ones here\n
    -        /// will disarm immediately without waiting to fire.
    -        pub const ARMED = @intToPtr(*volatile MmioInt(32, u4), base_address + 0x20);
    -
    -        /// address: 0x40054024
    -        /// Raw read from bits 63:32 of time (no side effects)
    -        pub const TIMERAWH = @intToPtr(*volatile u32, base_address + 0x24);
    -
    -        /// address: 0x40054028
    -        /// Raw read from bits 31:0 of time (no side effects)
    -        pub const TIMERAWL = @intToPtr(*volatile u32, base_address + 0x28);
    -
    -        /// address: 0x4005402c
    -        /// Set bits high to enable pause when the corresponding debug ports are active
    -        pub const DBGPAUSE = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            /// Pause when processor 0 is in debug mode
    -            DBG0: u1,
    -            /// Pause when processor 1 is in debug mode
    -            DBG1: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x40054030
    -        /// Set high to pause the timer
    -        pub const PAUSE = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x30);
    -
    -        /// address: 0x40054034
    -        /// Raw Interrupts
    -        pub const INTR = @intToPtr(*volatile Mmio(32, packed struct {
    -            ALARM_0: u1,
    -            ALARM_1: u1,
    -            ALARM_2: u1,
    -            ALARM_3: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x40054038
    -        /// Interrupt Enable
    -        pub const INTE = @intToPtr(*volatile Mmio(32, packed struct {
    -            ALARM_0: u1,
    -            ALARM_1: u1,
    -            ALARM_2: u1,
    -            ALARM_3: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x4005403c
    -        /// Interrupt Force
    -        pub const INTF = @intToPtr(*volatile Mmio(32, packed struct {
    -            ALARM_0: u1,
    -            ALARM_1: u1,
    -            ALARM_2: u1,
    -            ALARM_3: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x40054040
    -        /// Interrupt status after masking & forcing
    -        pub const INTS = @intToPtr(*volatile Mmio(32, packed struct {
    -            ALARM_0: u1,
    -            ALARM_1: u1,
    -            ALARM_2: u1,
    -            ALARM_3: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -        }), base_address + 0x40);
    -    };
    -    pub const WATCHDOG = struct {
    -        pub const base_address = 0x40058000;
    -        pub const version = "1";
    -
    -        /// address: 0x40058000
    -        /// Watchdog control\n
    -        /// The rst_wdsel register determines which subsystems are reset when the watchdog
    -        /// is triggered.\n
    -        /// The watchdog can be triggered in software.
    -        pub const CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Indicates the number of ticks / 2 (see errata RP2040-E1) before a watchdog reset
    -            /// will be triggered
    -            TIME: u24,
    -            /// Pause the watchdog timer when JTAG is accessing the bus fabric
    -            PAUSE_JTAG: u1,
    -            /// Pause the watchdog timer when processor 0 is in debug mode
    -            PAUSE_DBG0: u1,
    -            /// Pause the watchdog timer when processor 1 is in debug mode
    -            PAUSE_DBG1: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            /// When not enabled the watchdog timer is paused
    -            ENABLE: u1,
    -            /// Trigger a watchdog reset
    -            TRIGGER: u1,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x40058004
    -        /// Load the watchdog timer. The maximum setting is 0xffffff which corresponds to
    -        /// 0xffffff / 2 ticks before triggering a watchdog reset (see errata RP2040-E1).
    -        pub const LOAD = @intToPtr(*volatile MmioInt(32, u24), base_address + 0x4);
    -
    -        /// address: 0x40058008
    -        /// Logs the reason for the last reset. Both bits are zero for the case of a
    -        /// hardware reset.
    -        pub const REASON = @intToPtr(*volatile Mmio(32, packed struct {
    -            TIMER: u1,
    -            FORCE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x4005800c
    -        /// Scratch register. Information persists through soft reset of the chip.
    -        pub const SCRATCH0 = @intToPtr(*volatile u32, base_address + 0xc);
    -
    -        /// address: 0x40058010
    -        /// Scratch register. Information persists through soft reset of the chip.
    -        pub const SCRATCH1 = @intToPtr(*volatile u32, base_address + 0x10);
    -
    -        /// address: 0x40058014
    -        /// Scratch register. Information persists through soft reset of the chip.
    -        pub const SCRATCH2 = @intToPtr(*volatile u32, base_address + 0x14);
    -
    -        /// address: 0x40058018
    -        /// Scratch register. Information persists through soft reset of the chip.
    -        pub const SCRATCH3 = @intToPtr(*volatile u32, base_address + 0x18);
    -
    -        /// address: 0x4005801c
    -        /// Scratch register. Information persists through soft reset of the chip.
    -        pub const SCRATCH4 = @intToPtr(*volatile u32, base_address + 0x1c);
    -
    -        /// address: 0x40058020
    -        /// Scratch register. Information persists through soft reset of the chip.
    -        pub const SCRATCH5 = @intToPtr(*volatile u32, base_address + 0x20);
    -
    -        /// address: 0x40058024
    -        /// Scratch register. Information persists through soft reset of the chip.
    -        pub const SCRATCH6 = @intToPtr(*volatile u32, base_address + 0x24);
    -
    -        /// address: 0x40058028
    -        /// Scratch register. Information persists through soft reset of the chip.
    -        pub const SCRATCH7 = @intToPtr(*volatile u32, base_address + 0x28);
    -
    -        /// address: 0x4005802c
    -        /// Controls the tick generator
    -        pub const TICK = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Total number of clk_tick cycles before the next tick.
    -            CYCLES: u9,
    -            /// start / stop tick generation
    -            ENABLE: u1,
    -            /// Is the tick generator running?
    -            RUNNING: u1,
    -            /// Count down timer: the remaining number clk_tick cycles before the next tick is
    -            /// generated.
    -            COUNT: u9,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -        }), base_address + 0x2c);
    -    };
    -
    -    /// Register block to control RTC
    -    pub const RTC = struct {
    -        pub const base_address = 0x4005c000;
    -        pub const version = "1";
    -
    -        /// address: 0x4005c000
    -        /// Divider minus 1 for the 1 second counter. Safe to change the value when RTC is
    -        /// not enabled.
    -        pub const CLKDIV_M1 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x0);
    -
    -        /// address: 0x4005c004
    -        /// RTC setup register 0
    -        pub const SETUP_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Day of the month (1..31)
    -            DAY: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            /// Month (1..12)
    -            MONTH: u4,
    -            /// Year
    -            YEAR: u12,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x4005c008
    -        /// RTC setup register 1
    -        pub const SETUP_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Seconds
    -            SEC: u6,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            /// Minutes
    -            MIN: u6,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            /// Hours
    -            HOUR: u5,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            /// Day of the week: 1-Monday...0-Sunday ISO 8601 mod 7
    -            DOTW: u3,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x4005c00c
    -        /// RTC Control and status
    -        pub const CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Enable RTC
    -            RTC_ENABLE: u1,
    -            /// RTC enabled (running)
    -            RTC_ACTIVE: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            /// Load RTC
    -            LOAD: u1,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            /// If set, leapyear is forced off.\n
    -            /// Useful for years divisible by 100 but not by 400
    -            FORCE_NOTLEAPYEAR: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x4005c010
    -        /// Interrupt setup register 0
    -        pub const IRQ_SETUP_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Day of the month (1..31)
    -            DAY: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            /// Month (1..12)
    -            MONTH: u4,
    -            /// Year
    -            YEAR: u12,
    -            /// Enable day matching
    -            DAY_ENA: u1,
    -            /// Enable month matching
    -            MONTH_ENA: u1,
    -            /// Enable year matching
    -            YEAR_ENA: u1,
    -            reserved3: u1 = 0,
    -            /// Global match enable. Don't change any other value while this one is enabled
    -            MATCH_ENA: u1,
    -            MATCH_ACTIVE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x4005c014
    -        /// Interrupt setup register 1
    -        pub const IRQ_SETUP_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Seconds
    -            SEC: u6,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            /// Minutes
    -            MIN: u6,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            /// Hours
    -            HOUR: u5,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            /// Day of the week
    -            DOTW: u3,
    -            reserved7: u1 = 0,
    -            /// Enable second matching
    -            SEC_ENA: u1,
    -            /// Enable minute matching
    -            MIN_ENA: u1,
    -            /// Enable hour matching
    -            HOUR_ENA: u1,
    -            /// Enable day of the week matching
    -            DOTW_ENA: u1,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x4005c018
    -        /// RTC register 1.
    -        pub const RTC_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Day of the month (1..31)
    -            DAY: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            /// Month (1..12)
    -            MONTH: u4,
    -            /// Year
    -            YEAR: u12,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x4005c01c
    -        /// RTC register 0\n
    -        /// Read this before RTC 1!
    -        pub const RTC_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Seconds
    -            SEC: u6,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            /// Minutes
    -            MIN: u6,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            /// Hours
    -            HOUR: u5,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            /// Day of the week
    -            DOTW: u3,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x4005c020
    -        /// Raw Interrupts
    -        pub const INTR = @intToPtr(*volatile Mmio(32, packed struct {
    -            RTC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x4005c024
    -        /// Interrupt Enable
    -        pub const INTE = @intToPtr(*volatile Mmio(32, packed struct {
    -            RTC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x4005c028
    -        /// Interrupt Force
    -        pub const INTF = @intToPtr(*volatile Mmio(32, packed struct {
    -            RTC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x4005c02c
    -        /// Interrupt status after masking & forcing
    -        pub const INTS = @intToPtr(*volatile Mmio(32, packed struct {
    -            RTC: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -            padding30: u1 = 0,
    -        }), base_address + 0x2c);
    -    };
    -    pub const ROSC = struct {
    -        pub const base_address = 0x40060000;
    -        pub const version = "1";
    -
    -        /// address: 0x40060000
    -        /// Ring Oscillator control
    -        pub const CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Controls the number of delay stages in the ROSC ring\n
    -            /// LOW uses stages 0 to 7\n
    -            /// MEDIUM uses stages 0 to 5\n
    -            /// HIGH uses stages 0 to 3\n
    -            /// TOOHIGH uses stages 0 to 1 and should not be used because its frequency exceeds
    -            /// design specifications\n
    -            /// The clock output will not glitch when changing the range up one step at a time\n
    -            /// The clock output will glitch when changing the range down\n
    -            /// Note: the values here are gray coded which is why HIGH comes before TOOHIGH
    -            FREQ_RANGE: u12,
    -            /// On power-up this field is initialised to ENABLE\n
    -            /// The system clock must be switched to another source before setting this field to
    -            /// DISABLE otherwise the chip will lock up\n
    -            /// The 12-bit code is intended to give some protection against accidental writes.
    -            /// An invalid setting will enable the oscillator.
    -            ENABLE: u12,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x40060004
    -        /// The FREQA & FREQB registers control the frequency by controlling the drive
    -        /// strength of each stage\n
    -        /// The drive strength has 4 levels determined by the number of bits set\n
    -        /// Increasing the number of bits set increases the drive strength and increases the
    -        /// oscillation frequency\n
    -        /// 0 bits set is the default drive strength\n
    -        /// 1 bit set doubles the drive strength\n
    -        /// 2 bits set triples drive strength\n
    -        /// 3 bits set quadruples drive strength
    -        pub const FREQA = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stage 0 drive strength
    -            DS0: u3,
    -            reserved0: u1 = 0,
    -            /// Stage 1 drive strength
    -            DS1: u3,
    -            reserved1: u1 = 0,
    -            /// Stage 2 drive strength
    -            DS2: u3,
    -            reserved2: u1 = 0,
    -            /// Stage 3 drive strength
    -            DS3: u3,
    -            reserved3: u1 = 0,
    -            /// Set to 0x9696 to apply the settings\n
    -            /// Any other value in this field will set all drive strengths to 0
    -            PASSWD: u16,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x40060008
    -        /// For a detailed description see freqa register
    -        pub const FREQB = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stage 4 drive strength
    -            DS4: u3,
    -            reserved0: u1 = 0,
    -            /// Stage 5 drive strength
    -            DS5: u3,
    -            reserved1: u1 = 0,
    -            /// Stage 6 drive strength
    -            DS6: u3,
    -            reserved2: u1 = 0,
    -            /// Stage 7 drive strength
    -            DS7: u3,
    -            reserved3: u1 = 0,
    -            /// Set to 0x9696 to apply the settings\n
    -            /// Any other value in this field will set all drive strengths to 0
    -            PASSWD: u16,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x4006000c
    -        /// Ring Oscillator pause control\n
    -        /// This is used to save power by pausing the ROSC\n
    -        /// On power-up this field is initialised to WAKE\n
    -        /// An invalid write will also select WAKE\n
    -        /// Warning: setup the irq before selecting dormant mode
    -        pub const DORMANT = @intToPtr(*volatile u32, base_address + 0xc);
    -
    -        /// address: 0x40060010
    -        /// Controls the output divider
    -        pub const DIV = @intToPtr(*volatile MmioInt(32, u12), base_address + 0x10);
    -
    -        /// address: 0x40060014
    -        /// Controls the phase shifted output
    -        pub const PHASE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// phase shift the phase-shifted output by SHIFT input clocks\n
    -            /// this can be changed on-the-fly\n
    -            /// must be set to 0 before setting div=1
    -            SHIFT: u2,
    -            /// invert the phase-shifted output\n
    -            /// this is ignored when div=1
    -            FLIP: u1,
    -            /// enable the phase-shifted output\n
    -            /// this can be changed on-the-fly
    -            ENABLE: u1,
    -            /// set to 0xaa\n
    -            /// any other value enables the output with shift=0
    -            PASSWD: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x40060018
    -        /// Ring Oscillator Status
    -        pub const STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            /// Oscillator is enabled but not necessarily running and stable\n
    -            /// this resets to 0 but transitions to 1 during chip startup
    -            ENABLED: u1,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            /// post-divider is running\n
    -            /// this resets to 0 but transitions to 1 during chip startup
    -            DIV_RUNNING: u1,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            reserved18: u1 = 0,
    -            reserved19: u1 = 0,
    -            reserved20: u1 = 0,
    -            reserved21: u1 = 0,
    -            /// An invalid value has been written to CTRL_ENABLE or CTRL_FREQ_RANGE or FREQA or
    -            /// FREQB or DIV or PHASE or DORMANT
    -            BADWRITE: u1,
    -            reserved22: u1 = 0,
    -            reserved23: u1 = 0,
    -            reserved24: u1 = 0,
    -            reserved25: u1 = 0,
    -            reserved26: u1 = 0,
    -            reserved27: u1 = 0,
    -            /// Oscillator is running and stable
    -            STABLE: u1,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x4006001c
    -        /// This just reads the state of the oscillator output so randomness is compromised
    -        /// if the ring oscillator is stopped or run at a harmonic of the bus frequency
    -        pub const RANDOMBIT = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x1c);
    -
    -        /// address: 0x40060020
    -        /// A down counter running at the ROSC frequency which counts to zero and stops.\n
    -        /// To start the counter write a non-zero value.\n
    -        /// Can be used for short software pauses when setting up time sensitive hardware.
    -        pub const COUNT = @intToPtr(*volatile MmioInt(32, u8), base_address + 0x20);
    -    };
    -
    -    /// control and status for on-chip voltage regulator and chip level reset subsystem
    -    pub const VREG_AND_CHIP_RESET = struct {
    -        pub const base_address = 0x40064000;
    -        pub const version = "1";
    -
    -        /// address: 0x40064000
    -        /// Voltage regulator control and status
    -        pub const VREG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// enable\n
    -            /// 0=not enabled, 1=enabled
    -            EN: u1,
    -            /// high impedance mode select\n
    -            /// 0=not in high impedance mode, 1=in high impedance mode
    -            HIZ: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            /// output voltage select\n
    -            /// 0000 to 0101 - 0.80V\n
    -            /// 0110 - 0.85V\n
    -            /// 0111 - 0.90V\n
    -            /// 1000 - 0.95V\n
    -            /// 1001 - 1.00V\n
    -            /// 1010 - 1.05V\n
    -            /// 1011 - 1.10V (default)\n
    -            /// 1100 - 1.15V\n
    -            /// 1101 - 1.20V\n
    -            /// 1110 - 1.25V\n
    -            /// 1111 - 1.30V
    -            VSEL: u4,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            /// regulation status\n
    -            /// 0=not in regulation, 1=in regulation
    -            ROK: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x40064004
    -        /// brown-out detection control
    -        pub const BOD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// enable\n
    -            /// 0=not enabled, 1=enabled
    -            EN: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            /// threshold select\n
    -            /// 0000 - 0.473V\n
    -            /// 0001 - 0.516V\n
    -            /// 0010 - 0.559V\n
    -            /// 0011 - 0.602V\n
    -            /// 0100 - 0.645V\n
    -            /// 0101 - 0.688V\n
    -            /// 0110 - 0.731V\n
    -            /// 0111 - 0.774V\n
    -            /// 1000 - 0.817V\n
    -            /// 1001 - 0.860V (default)\n
    -            /// 1010 - 0.903V\n
    -            /// 1011 - 0.946V\n
    -            /// 1100 - 0.989V\n
    -            /// 1101 - 1.032V\n
    -            /// 1110 - 1.075V\n
    -            /// 1111 - 1.118V
    -            VSEL: u4,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x40064008
    -        /// Chip reset control and status
    -        pub const CHIP_RESET = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// Last reset was from the power-on reset or brown-out detection blocks
    -            HAD_POR: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            /// Last reset was from the RUN pin
    -            HAD_RUN: u1,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            /// Last reset was from the debug port
    -            HAD_PSM_RESTART: u1,
    -            reserved18: u1 = 0,
    -            reserved19: u1 = 0,
    -            reserved20: u1 = 0,
    -            /// This is set by psm_restart from the debugger.\n
    -            /// Its purpose is to branch bootcode to a safe mode when the debugger has issued a
    -            /// psm_restart in order to recover from a boot lock-up.\n
    -            /// In the safe mode the debugger can repair the boot code, clear this flag then
    -            /// reboot the processor.
    -            PSM_RESTART_FLAG: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -        }), base_address + 0x8);
    -    };
    -
    -    /// Testbench manager. Allows the programmer to know what platform their software is
    -    /// running on.
    -    pub const TBMAN = struct {
    -        pub const base_address = 0x4006c000;
    -        pub const version = "1";
    -
    -        /// address: 0x4006c000
    -        /// Indicates the type of platform in use
    -        pub const PLATFORM = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Indicates the platform is an ASIC
    -            ASIC: u1,
    -            /// Indicates the platform is an FPGA
    -            FPGA: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -        }), base_address + 0x0);
    -    };
    -
    -    /// DMA with separate read and write masters
    -    pub const DMA = struct {
    -        pub const base_address = 0x50000000;
    -        pub const version = "1";
    -
    -        /// address: 0x50000000
    -        /// DMA Channel 0 Read Address pointer\n
    -        /// This register updates automatically each time a read completes. The current
    -        /// value is the next address to be read by this channel.
    -        pub const CH0_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x0);
    -
    -        /// address: 0x50000004
    -        /// DMA Channel 0 Write Address pointer\n
    -        /// This register updates automatically each time a write completes. The current
    -        /// value is the next address to be written by this channel.
    -        pub const CH0_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x4);
    -
    -        /// address: 0x50000008
    -        /// DMA Channel 0 Transfer Count\n
    -        /// Program the number of bus transfers a channel will perform before halting. Note
    -        /// that, if transfers are larger than one byte in size, this is not equal to the
    -        /// number of bytes transferred (see CTRL_DATA_SIZE).\n\n
    -        /// When the channel is active, reading this register shows the number of transfers
    -        /// remaining, updating automatically each time a write transfer completes.\n\n
    -        /// Writing this register sets the RELOAD value for the transfer counter. Each time
    -        /// this channel is triggered, the RELOAD value is copied into the live transfer
    -        /// counter. The channel can be started multiple times, and will perform the same
    -        /// number of transfers each time, as programmed by most recent write.\n\n
    -        /// The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a
    -        /// trigger, the written value is used immediately as the length of the new transfer
    -        /// sequence, as well as being written to RELOAD.
    -        pub const CH0_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x8);
    -
    -        /// address: 0x5000000c
    -        /// DMA Channel 0 Control and Status
    -        pub const CH0_CTRL_TRIG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// DMA Channel Enable.\n
    -            /// When 1, the channel will respond to triggering events, which will cause it to
    -            /// become BUSY and start transferring data. When 0, the channel will ignore
    -            /// triggers, stop issuing transfers, and pause the current transfer sequence (i.e.
    -            /// BUSY will remain high if already high)
    -            EN: u1,
    -            /// HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in
    -            /// each scheduling round, all high priority channels are considered first, and then
    -            /// only a single low priority channel, before returning to the high priority
    -            /// channels.\n\n
    -            /// This only affects the order in which the DMA schedules channels. The DMA's bus
    -            /// priority is not changed. If the DMA is not saturated then a low priority channel
    -            /// will see no loss of throughput.
    -            HIGH_PRIORITY: u1,
    -            /// Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR
    -            /// advance by this amount (1/2/4 bytes) with each transfer.
    -            DATA_SIZE: u2,
    -            /// If 1, the read address increments with each transfer. If 0, each read is
    -            /// directed to the same, initial address.\n\n
    -            /// Generally this should be disabled for peripheral-to-memory transfers.
    -            INCR_READ: u1,
    -            /// If 1, the write address increments with each transfer. If 0, each write is
    -            /// directed to the same, initial address.\n\n
    -            /// Generally this should be disabled for memory-to-peripheral transfers.
    -            INCR_WRITE: u1,
    -            /// Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower
    -            /// n bits of the address will change. This wraps the address on a (1 << n) byte
    -            /// boundary, facilitating access to naturally-aligned ring buffers.\n\n
    -            /// Ring sizes between 2 and 32768 bytes are possible. This can apply to either read
    -            /// or write addresses, based on value of RING_SEL.
    -            RING_SIZE: u4,
    -            /// Select whether RING_SIZE applies to read or write addresses.\n
    -            /// If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write
    -            /// addresses are wrapped.
    -            RING_SEL: u1,
    -            /// When this channel completes, it will trigger the channel indicated by CHAIN_TO.
    -            /// Disable by setting CHAIN_TO = _(this channel)_.\n
    -            /// Reset value is equal to channel number (0).
    -            CHAIN_TO: u4,
    -            /// Select a Transfer Request signal.\n
    -            /// The channel uses the transfer request signal to pace its data transfer rate.
    -            /// Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request
    -            /// from the system).\n
    -            /// 0x0 to 0x3a -> select DREQ n as TREQ
    -            TREQ_SEL: u6,
    -            /// In QUIET mode, the channel does not generate IRQs at the end of every transfer
    -            /// block. Instead, an IRQ is raised when NULL is written to a trigger register,
    -            /// indicating the end of a control block chain.\n\n
    -            /// This reduces the number of interrupts to be serviced by the CPU when
    -            /// transferring a DMA chain of many small control blocks.
    -            IRQ_QUIET: u1,
    -            /// Apply byte-swap transformation to DMA data.\n
    -            /// For byte data, this has no effect. For halfword data, the two bytes of each
    -            /// halfword are swapped. For word data, the four bytes of each word are swapped to
    -            /// reverse order.
    -            BSWAP: u1,
    -            /// If 1, this channel's data transfers are visible to the sniff hardware, and each
    -            /// transfer will advance the state of the checksum. This only applies if the sniff
    -            /// hardware is enabled, and has this channel selected.\n\n
    -            /// This allows checksum to be enabled or disabled on a per-control- block basis.
    -            SNIFF_EN: u1,
    -            /// This flag goes high when the channel starts a new transfer sequence, and low
    -            /// when the last transfer of that sequence completes. Clearing EN while BUSY is
    -            /// high pauses the channel, and BUSY will stay high while paused.\n\n
    -            /// To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    -            BUSY: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            /// If 1, the channel received a write bus error. Write one to clear.\n
    -            /// WRITE_ADDR shows the approximate address where the bus error was encountered
    -            /// (will not to be earlier, or more than 5 transfers later)
    -            WRITE_ERROR: u1,
    -            /// If 1, the channel received a read bus error. Write one to clear.\n
    -            /// READ_ADDR shows the approximate address where the bus error was encountered
    -            /// (will not to be earlier, or more than 3 transfers later)
    -            READ_ERROR: u1,
    -            /// Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it
    -            /// encounters any bus error, and always raises its channel IRQ flag.
    -            AHB_ERROR: u1,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x50000010
    -        /// Alias for channel 0 CTRL register
    -        pub const CH0_AL1_CTRL = @intToPtr(*volatile u32, base_address + 0x10);
    -
    -        /// address: 0x50000014
    -        /// Alias for channel 0 READ_ADDR register
    -        pub const CH0_AL1_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x14);
    -
    -        /// address: 0x50000018
    -        /// Alias for channel 0 WRITE_ADDR register
    -        pub const CH0_AL1_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x18);
    -
    -        /// address: 0x5000001c
    -        /// Alias for channel 0 TRANS_COUNT register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH0_AL1_TRANS_COUNT_TRIG = @intToPtr(*volatile u32, base_address + 0x1c);
    -
    -        /// address: 0x50000020
    -        /// Alias for channel 0 CTRL register
    -        pub const CH0_AL2_CTRL = @intToPtr(*volatile u32, base_address + 0x20);
    -
    -        /// address: 0x50000024
    -        /// Alias for channel 0 TRANS_COUNT register
    -        pub const CH0_AL2_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x24);
    -
    -        /// address: 0x50000028
    -        /// Alias for channel 0 READ_ADDR register
    -        pub const CH0_AL2_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x28);
    -
    -        /// address: 0x5000002c
    -        /// Alias for channel 0 WRITE_ADDR register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH0_AL2_WRITE_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x2c);
    -
    -        /// address: 0x50000030
    -        /// Alias for channel 0 CTRL register
    -        pub const CH0_AL3_CTRL = @intToPtr(*volatile u32, base_address + 0x30);
    -
    -        /// address: 0x50000034
    -        /// Alias for channel 0 WRITE_ADDR register
    -        pub const CH0_AL3_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x34);
    -
    -        /// address: 0x50000038
    -        /// Alias for channel 0 TRANS_COUNT register
    -        pub const CH0_AL3_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x38);
    -
    -        /// address: 0x5000003c
    -        /// Alias for channel 0 READ_ADDR register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH0_AL3_READ_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x3c);
    -
    -        /// address: 0x50000040
    -        /// DMA Channel 1 Read Address pointer\n
    -        /// This register updates automatically each time a read completes. The current
    -        /// value is the next address to be read by this channel.
    -        pub const CH1_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x40);
    -
    -        /// address: 0x50000044
    -        /// DMA Channel 1 Write Address pointer\n
    -        /// This register updates automatically each time a write completes. The current
    -        /// value is the next address to be written by this channel.
    -        pub const CH1_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x44);
    -
    -        /// address: 0x50000048
    -        /// DMA Channel 1 Transfer Count\n
    -        /// Program the number of bus transfers a channel will perform before halting. Note
    -        /// that, if transfers are larger than one byte in size, this is not equal to the
    -        /// number of bytes transferred (see CTRL_DATA_SIZE).\n\n
    -        /// When the channel is active, reading this register shows the number of transfers
    -        /// remaining, updating automatically each time a write transfer completes.\n\n
    -        /// Writing this register sets the RELOAD value for the transfer counter. Each time
    -        /// this channel is triggered, the RELOAD value is copied into the live transfer
    -        /// counter. The channel can be started multiple times, and will perform the same
    -        /// number of transfers each time, as programmed by most recent write.\n\n
    -        /// The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a
    -        /// trigger, the written value is used immediately as the length of the new transfer
    -        /// sequence, as well as being written to RELOAD.
    -        pub const CH1_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x48);
    -
    -        /// address: 0x5000004c
    -        /// DMA Channel 1 Control and Status
    -        pub const CH1_CTRL_TRIG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// DMA Channel Enable.\n
    -            /// When 1, the channel will respond to triggering events, which will cause it to
    -            /// become BUSY and start transferring data. When 0, the channel will ignore
    -            /// triggers, stop issuing transfers, and pause the current transfer sequence (i.e.
    -            /// BUSY will remain high if already high)
    -            EN: u1,
    -            /// HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in
    -            /// each scheduling round, all high priority channels are considered first, and then
    -            /// only a single low priority channel, before returning to the high priority
    -            /// channels.\n\n
    -            /// This only affects the order in which the DMA schedules channels. The DMA's bus
    -            /// priority is not changed. If the DMA is not saturated then a low priority channel
    -            /// will see no loss of throughput.
    -            HIGH_PRIORITY: u1,
    -            /// Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR
    -            /// advance by this amount (1/2/4 bytes) with each transfer.
    -            DATA_SIZE: u2,
    -            /// If 1, the read address increments with each transfer. If 0, each read is
    -            /// directed to the same, initial address.\n\n
    -            /// Generally this should be disabled for peripheral-to-memory transfers.
    -            INCR_READ: u1,
    -            /// If 1, the write address increments with each transfer. If 0, each write is
    -            /// directed to the same, initial address.\n\n
    -            /// Generally this should be disabled for memory-to-peripheral transfers.
    -            INCR_WRITE: u1,
    -            /// Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower
    -            /// n bits of the address will change. This wraps the address on a (1 << n) byte
    -            /// boundary, facilitating access to naturally-aligned ring buffers.\n\n
    -            /// Ring sizes between 2 and 32768 bytes are possible. This can apply to either read
    -            /// or write addresses, based on value of RING_SEL.
    -            RING_SIZE: u4,
    -            /// Select whether RING_SIZE applies to read or write addresses.\n
    -            /// If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write
    -            /// addresses are wrapped.
    -            RING_SEL: u1,
    -            /// When this channel completes, it will trigger the channel indicated by CHAIN_TO.
    -            /// Disable by setting CHAIN_TO = _(this channel)_.\n
    -            /// Reset value is equal to channel number (1).
    -            CHAIN_TO: u4,
    -            /// Select a Transfer Request signal.\n
    -            /// The channel uses the transfer request signal to pace its data transfer rate.
    -            /// Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request
    -            /// from the system).\n
    -            /// 0x0 to 0x3a -> select DREQ n as TREQ
    -            TREQ_SEL: u6,
    -            /// In QUIET mode, the channel does not generate IRQs at the end of every transfer
    -            /// block. Instead, an IRQ is raised when NULL is written to a trigger register,
    -            /// indicating the end of a control block chain.\n\n
    -            /// This reduces the number of interrupts to be serviced by the CPU when
    -            /// transferring a DMA chain of many small control blocks.
    -            IRQ_QUIET: u1,
    -            /// Apply byte-swap transformation to DMA data.\n
    -            /// For byte data, this has no effect. For halfword data, the two bytes of each
    -            /// halfword are swapped. For word data, the four bytes of each word are swapped to
    -            /// reverse order.
    -            BSWAP: u1,
    -            /// If 1, this channel's data transfers are visible to the sniff hardware, and each
    -            /// transfer will advance the state of the checksum. This only applies if the sniff
    -            /// hardware is enabled, and has this channel selected.\n\n
    -            /// This allows checksum to be enabled or disabled on a per-control- block basis.
    -            SNIFF_EN: u1,
    -            /// This flag goes high when the channel starts a new transfer sequence, and low
    -            /// when the last transfer of that sequence completes. Clearing EN while BUSY is
    -            /// high pauses the channel, and BUSY will stay high while paused.\n\n
    -            /// To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    -            BUSY: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            /// If 1, the channel received a write bus error. Write one to clear.\n
    -            /// WRITE_ADDR shows the approximate address where the bus error was encountered
    -            /// (will not to be earlier, or more than 5 transfers later)
    -            WRITE_ERROR: u1,
    -            /// If 1, the channel received a read bus error. Write one to clear.\n
    -            /// READ_ADDR shows the approximate address where the bus error was encountered
    -            /// (will not to be earlier, or more than 3 transfers later)
    -            READ_ERROR: u1,
    -            /// Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it
    -            /// encounters any bus error, and always raises its channel IRQ flag.
    -            AHB_ERROR: u1,
    -        }), base_address + 0x4c);
    -
    -        /// address: 0x50000050
    -        /// Alias for channel 1 CTRL register
    -        pub const CH1_AL1_CTRL = @intToPtr(*volatile u32, base_address + 0x50);
    -
    -        /// address: 0x50000054
    -        /// Alias for channel 1 READ_ADDR register
    -        pub const CH1_AL1_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x54);
    -
    -        /// address: 0x50000058
    -        /// Alias for channel 1 WRITE_ADDR register
    -        pub const CH1_AL1_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x58);
    -
    -        /// address: 0x5000005c
    -        /// Alias for channel 1 TRANS_COUNT register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH1_AL1_TRANS_COUNT_TRIG = @intToPtr(*volatile u32, base_address + 0x5c);
    -
    -        /// address: 0x50000060
    -        /// Alias for channel 1 CTRL register
    -        pub const CH1_AL2_CTRL = @intToPtr(*volatile u32, base_address + 0x60);
    -
    -        /// address: 0x50000064
    -        /// Alias for channel 1 TRANS_COUNT register
    -        pub const CH1_AL2_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x64);
    -
    -        /// address: 0x50000068
    -        /// Alias for channel 1 READ_ADDR register
    -        pub const CH1_AL2_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x68);
    -
    -        /// address: 0x5000006c
    -        /// Alias for channel 1 WRITE_ADDR register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH1_AL2_WRITE_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x6c);
    -
    -        /// address: 0x50000070
    -        /// Alias for channel 1 CTRL register
    -        pub const CH1_AL3_CTRL = @intToPtr(*volatile u32, base_address + 0x70);
    -
    -        /// address: 0x50000074
    -        /// Alias for channel 1 WRITE_ADDR register
    -        pub const CH1_AL3_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x74);
    -
    -        /// address: 0x50000078
    -        /// Alias for channel 1 TRANS_COUNT register
    -        pub const CH1_AL3_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x78);
    -
    -        /// address: 0x5000007c
    -        /// Alias for channel 1 READ_ADDR register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH1_AL3_READ_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x7c);
    -
    -        /// address: 0x50000080
    -        /// DMA Channel 2 Read Address pointer\n
    -        /// This register updates automatically each time a read completes. The current
    -        /// value is the next address to be read by this channel.
    -        pub const CH2_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x80);
    -
    -        /// address: 0x50000084
    -        /// DMA Channel 2 Write Address pointer\n
    -        /// This register updates automatically each time a write completes. The current
    -        /// value is the next address to be written by this channel.
    -        pub const CH2_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x84);
    -
    -        /// address: 0x50000088
    -        /// DMA Channel 2 Transfer Count\n
    -        /// Program the number of bus transfers a channel will perform before halting. Note
    -        /// that, if transfers are larger than one byte in size, this is not equal to the
    -        /// number of bytes transferred (see CTRL_DATA_SIZE).\n\n
    -        /// When the channel is active, reading this register shows the number of transfers
    -        /// remaining, updating automatically each time a write transfer completes.\n\n
    -        /// Writing this register sets the RELOAD value for the transfer counter. Each time
    -        /// this channel is triggered, the RELOAD value is copied into the live transfer
    -        /// counter. The channel can be started multiple times, and will perform the same
    -        /// number of transfers each time, as programmed by most recent write.\n\n
    -        /// The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a
    -        /// trigger, the written value is used immediately as the length of the new transfer
    -        /// sequence, as well as being written to RELOAD.
    -        pub const CH2_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x88);
    -
    -        /// address: 0x5000008c
    -        /// DMA Channel 2 Control and Status
    -        pub const CH2_CTRL_TRIG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// DMA Channel Enable.\n
    -            /// When 1, the channel will respond to triggering events, which will cause it to
    -            /// become BUSY and start transferring data. When 0, the channel will ignore
    -            /// triggers, stop issuing transfers, and pause the current transfer sequence (i.e.
    -            /// BUSY will remain high if already high)
    -            EN: u1,
    -            /// HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in
    -            /// each scheduling round, all high priority channels are considered first, and then
    -            /// only a single low priority channel, before returning to the high priority
    -            /// channels.\n\n
    -            /// This only affects the order in which the DMA schedules channels. The DMA's bus
    -            /// priority is not changed. If the DMA is not saturated then a low priority channel
    -            /// will see no loss of throughput.
    -            HIGH_PRIORITY: u1,
    -            /// Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR
    -            /// advance by this amount (1/2/4 bytes) with each transfer.
    -            DATA_SIZE: u2,
    -            /// If 1, the read address increments with each transfer. If 0, each read is
    -            /// directed to the same, initial address.\n\n
    -            /// Generally this should be disabled for peripheral-to-memory transfers.
    -            INCR_READ: u1,
    -            /// If 1, the write address increments with each transfer. If 0, each write is
    -            /// directed to the same, initial address.\n\n
    -            /// Generally this should be disabled for memory-to-peripheral transfers.
    -            INCR_WRITE: u1,
    -            /// Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower
    -            /// n bits of the address will change. This wraps the address on a (1 << n) byte
    -            /// boundary, facilitating access to naturally-aligned ring buffers.\n\n
    -            /// Ring sizes between 2 and 32768 bytes are possible. This can apply to either read
    -            /// or write addresses, based on value of RING_SEL.
    -            RING_SIZE: u4,
    -            /// Select whether RING_SIZE applies to read or write addresses.\n
    -            /// If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write
    -            /// addresses are wrapped.
    -            RING_SEL: u1,
    -            /// When this channel completes, it will trigger the channel indicated by CHAIN_TO.
    -            /// Disable by setting CHAIN_TO = _(this channel)_.\n
    -            /// Reset value is equal to channel number (2).
    -            CHAIN_TO: u4,
    -            /// Select a Transfer Request signal.\n
    -            /// The channel uses the transfer request signal to pace its data transfer rate.
    -            /// Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request
    -            /// from the system).\n
    -            /// 0x0 to 0x3a -> select DREQ n as TREQ
    -            TREQ_SEL: u6,
    -            /// In QUIET mode, the channel does not generate IRQs at the end of every transfer
    -            /// block. Instead, an IRQ is raised when NULL is written to a trigger register,
    -            /// indicating the end of a control block chain.\n\n
    -            /// This reduces the number of interrupts to be serviced by the CPU when
    -            /// transferring a DMA chain of many small control blocks.
    -            IRQ_QUIET: u1,
    -            /// Apply byte-swap transformation to DMA data.\n
    -            /// For byte data, this has no effect. For halfword data, the two bytes of each
    -            /// halfword are swapped. For word data, the four bytes of each word are swapped to
    -            /// reverse order.
    -            BSWAP: u1,
    -            /// If 1, this channel's data transfers are visible to the sniff hardware, and each
    -            /// transfer will advance the state of the checksum. This only applies if the sniff
    -            /// hardware is enabled, and has this channel selected.\n\n
    -            /// This allows checksum to be enabled or disabled on a per-control- block basis.
    -            SNIFF_EN: u1,
    -            /// This flag goes high when the channel starts a new transfer sequence, and low
    -            /// when the last transfer of that sequence completes. Clearing EN while BUSY is
    -            /// high pauses the channel, and BUSY will stay high while paused.\n\n
    -            /// To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    -            BUSY: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            /// If 1, the channel received a write bus error. Write one to clear.\n
    -            /// WRITE_ADDR shows the approximate address where the bus error was encountered
    -            /// (will not to be earlier, or more than 5 transfers later)
    -            WRITE_ERROR: u1,
    -            /// If 1, the channel received a read bus error. Write one to clear.\n
    -            /// READ_ADDR shows the approximate address where the bus error was encountered
    -            /// (will not to be earlier, or more than 3 transfers later)
    -            READ_ERROR: u1,
    -            /// Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it
    -            /// encounters any bus error, and always raises its channel IRQ flag.
    -            AHB_ERROR: u1,
    -        }), base_address + 0x8c);
    -
    -        /// address: 0x50000090
    -        /// Alias for channel 2 CTRL register
    -        pub const CH2_AL1_CTRL = @intToPtr(*volatile u32, base_address + 0x90);
    -
    -        /// address: 0x50000094
    -        /// Alias for channel 2 READ_ADDR register
    -        pub const CH2_AL1_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x94);
    -
    -        /// address: 0x50000098
    -        /// Alias for channel 2 WRITE_ADDR register
    -        pub const CH2_AL1_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x98);
    -
    -        /// address: 0x5000009c
    -        /// Alias for channel 2 TRANS_COUNT register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH2_AL1_TRANS_COUNT_TRIG = @intToPtr(*volatile u32, base_address + 0x9c);
    -
    -        /// address: 0x500000a0
    -        /// Alias for channel 2 CTRL register
    -        pub const CH2_AL2_CTRL = @intToPtr(*volatile u32, base_address + 0xa0);
    -
    -        /// address: 0x500000a4
    -        /// Alias for channel 2 TRANS_COUNT register
    -        pub const CH2_AL2_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0xa4);
    -
    -        /// address: 0x500000a8
    -        /// Alias for channel 2 READ_ADDR register
    -        pub const CH2_AL2_READ_ADDR = @intToPtr(*volatile u32, base_address + 0xa8);
    -
    -        /// address: 0x500000ac
    -        /// Alias for channel 2 WRITE_ADDR register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH2_AL2_WRITE_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0xac);
    -
    -        /// address: 0x500000b0
    -        /// Alias for channel 2 CTRL register
    -        pub const CH2_AL3_CTRL = @intToPtr(*volatile u32, base_address + 0xb0);
    -
    -        /// address: 0x500000b4
    -        /// Alias for channel 2 WRITE_ADDR register
    -        pub const CH2_AL3_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0xb4);
    -
    -        /// address: 0x500000b8
    -        /// Alias for channel 2 TRANS_COUNT register
    -        pub const CH2_AL3_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0xb8);
    -
    -        /// address: 0x500000bc
    -        /// Alias for channel 2 READ_ADDR register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH2_AL3_READ_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0xbc);
    -
    -        /// address: 0x500000c0
    -        /// DMA Channel 3 Read Address pointer\n
    -        /// This register updates automatically each time a read completes. The current
    -        /// value is the next address to be read by this channel.
    -        pub const CH3_READ_ADDR = @intToPtr(*volatile u32, base_address + 0xc0);
    -
    -        /// address: 0x500000c4
    -        /// DMA Channel 3 Write Address pointer\n
    -        /// This register updates automatically each time a write completes. The current
    -        /// value is the next address to be written by this channel.
    -        pub const CH3_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0xc4);
    -
    -        /// address: 0x500000c8
    -        /// DMA Channel 3 Transfer Count\n
    -        /// Program the number of bus transfers a channel will perform before halting. Note
    -        /// that, if transfers are larger than one byte in size, this is not equal to the
    -        /// number of bytes transferred (see CTRL_DATA_SIZE).\n\n
    -        /// When the channel is active, reading this register shows the number of transfers
    -        /// remaining, updating automatically each time a write transfer completes.\n\n
    -        /// Writing this register sets the RELOAD value for the transfer counter. Each time
    -        /// this channel is triggered, the RELOAD value is copied into the live transfer
    -        /// counter. The channel can be started multiple times, and will perform the same
    -        /// number of transfers each time, as programmed by most recent write.\n\n
    -        /// The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a
    -        /// trigger, the written value is used immediately as the length of the new transfer
    -        /// sequence, as well as being written to RELOAD.
    -        pub const CH3_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0xc8);
    -
    -        /// address: 0x500000cc
    -        /// DMA Channel 3 Control and Status
    -        pub const CH3_CTRL_TRIG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// DMA Channel Enable.\n
    -            /// When 1, the channel will respond to triggering events, which will cause it to
    -            /// become BUSY and start transferring data. When 0, the channel will ignore
    -            /// triggers, stop issuing transfers, and pause the current transfer sequence (i.e.
    -            /// BUSY will remain high if already high)
    -            EN: u1,
    -            /// HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in
    -            /// each scheduling round, all high priority channels are considered first, and then
    -            /// only a single low priority channel, before returning to the high priority
    -            /// channels.\n\n
    -            /// This only affects the order in which the DMA schedules channels. The DMA's bus
    -            /// priority is not changed. If the DMA is not saturated then a low priority channel
    -            /// will see no loss of throughput.
    -            HIGH_PRIORITY: u1,
    -            /// Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR
    -            /// advance by this amount (1/2/4 bytes) with each transfer.
    -            DATA_SIZE: u2,
    -            /// If 1, the read address increments with each transfer. If 0, each read is
    -            /// directed to the same, initial address.\n\n
    -            /// Generally this should be disabled for peripheral-to-memory transfers.
    -            INCR_READ: u1,
    -            /// If 1, the write address increments with each transfer. If 0, each write is
    -            /// directed to the same, initial address.\n\n
    -            /// Generally this should be disabled for memory-to-peripheral transfers.
    -            INCR_WRITE: u1,
    -            /// Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower
    -            /// n bits of the address will change. This wraps the address on a (1 << n) byte
    -            /// boundary, facilitating access to naturally-aligned ring buffers.\n\n
    -            /// Ring sizes between 2 and 32768 bytes are possible. This can apply to either read
    -            /// or write addresses, based on value of RING_SEL.
    -            RING_SIZE: u4,
    -            /// Select whether RING_SIZE applies to read or write addresses.\n
    -            /// If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write
    -            /// addresses are wrapped.
    -            RING_SEL: u1,
    -            /// When this channel completes, it will trigger the channel indicated by CHAIN_TO.
    -            /// Disable by setting CHAIN_TO = _(this channel)_.\n
    -            /// Reset value is equal to channel number (3).
    -            CHAIN_TO: u4,
    -            /// Select a Transfer Request signal.\n
    -            /// The channel uses the transfer request signal to pace its data transfer rate.
    -            /// Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request
    -            /// from the system).\n
    -            /// 0x0 to 0x3a -> select DREQ n as TREQ
    -            TREQ_SEL: u6,
    -            /// In QUIET mode, the channel does not generate IRQs at the end of every transfer
    -            /// block. Instead, an IRQ is raised when NULL is written to a trigger register,
    -            /// indicating the end of a control block chain.\n\n
    -            /// This reduces the number of interrupts to be serviced by the CPU when
    -            /// transferring a DMA chain of many small control blocks.
    -            IRQ_QUIET: u1,
    -            /// Apply byte-swap transformation to DMA data.\n
    -            /// For byte data, this has no effect. For halfword data, the two bytes of each
    -            /// halfword are swapped. For word data, the four bytes of each word are swapped to
    -            /// reverse order.
    -            BSWAP: u1,
    -            /// If 1, this channel's data transfers are visible to the sniff hardware, and each
    -            /// transfer will advance the state of the checksum. This only applies if the sniff
    -            /// hardware is enabled, and has this channel selected.\n\n
    -            /// This allows checksum to be enabled or disabled on a per-control- block basis.
    -            SNIFF_EN: u1,
    -            /// This flag goes high when the channel starts a new transfer sequence, and low
    -            /// when the last transfer of that sequence completes. Clearing EN while BUSY is
    -            /// high pauses the channel, and BUSY will stay high while paused.\n\n
    -            /// To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    -            BUSY: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            /// If 1, the channel received a write bus error. Write one to clear.\n
    -            /// WRITE_ADDR shows the approximate address where the bus error was encountered
    -            /// (will not to be earlier, or more than 5 transfers later)
    -            WRITE_ERROR: u1,
    -            /// If 1, the channel received a read bus error. Write one to clear.\n
    -            /// READ_ADDR shows the approximate address where the bus error was encountered
    -            /// (will not to be earlier, or more than 3 transfers later)
    -            READ_ERROR: u1,
    -            /// Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it
    -            /// encounters any bus error, and always raises its channel IRQ flag.
    -            AHB_ERROR: u1,
    -        }), base_address + 0xcc);
    -
    -        /// address: 0x500000d0
    -        /// Alias for channel 3 CTRL register
    -        pub const CH3_AL1_CTRL = @intToPtr(*volatile u32, base_address + 0xd0);
    -
    -        /// address: 0x500000d4
    -        /// Alias for channel 3 READ_ADDR register
    -        pub const CH3_AL1_READ_ADDR = @intToPtr(*volatile u32, base_address + 0xd4);
    -
    -        /// address: 0x500000d8
    -        /// Alias for channel 3 WRITE_ADDR register
    -        pub const CH3_AL1_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0xd8);
    -
    -        /// address: 0x500000dc
    -        /// Alias for channel 3 TRANS_COUNT register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH3_AL1_TRANS_COUNT_TRIG = @intToPtr(*volatile u32, base_address + 0xdc);
    -
    -        /// address: 0x500000e0
    -        /// Alias for channel 3 CTRL register
    -        pub const CH3_AL2_CTRL = @intToPtr(*volatile u32, base_address + 0xe0);
    -
    -        /// address: 0x500000e4
    -        /// Alias for channel 3 TRANS_COUNT register
    -        pub const CH3_AL2_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0xe4);
    -
    -        /// address: 0x500000e8
    -        /// Alias for channel 3 READ_ADDR register
    -        pub const CH3_AL2_READ_ADDR = @intToPtr(*volatile u32, base_address + 0xe8);
    -
    -        /// address: 0x500000ec
    -        /// Alias for channel 3 WRITE_ADDR register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH3_AL2_WRITE_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0xec);
    -
    -        /// address: 0x500000f0
    -        /// Alias for channel 3 CTRL register
    -        pub const CH3_AL3_CTRL = @intToPtr(*volatile u32, base_address + 0xf0);
    -
    -        /// address: 0x500000f4
    -        /// Alias for channel 3 WRITE_ADDR register
    -        pub const CH3_AL3_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0xf4);
    -
    -        /// address: 0x500000f8
    -        /// Alias for channel 3 TRANS_COUNT register
    -        pub const CH3_AL3_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0xf8);
    -
    -        /// address: 0x500000fc
    -        /// Alias for channel 3 READ_ADDR register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH3_AL3_READ_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0xfc);
    -
    -        /// address: 0x50000100
    -        /// DMA Channel 4 Read Address pointer\n
    -        /// This register updates automatically each time a read completes. The current
    -        /// value is the next address to be read by this channel.
    -        pub const CH4_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x100);
    -
    -        /// address: 0x50000104
    -        /// DMA Channel 4 Write Address pointer\n
    -        /// This register updates automatically each time a write completes. The current
    -        /// value is the next address to be written by this channel.
    -        pub const CH4_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x104);
    -
    -        /// address: 0x50000108
    -        /// DMA Channel 4 Transfer Count\n
    -        /// Program the number of bus transfers a channel will perform before halting. Note
    -        /// that, if transfers are larger than one byte in size, this is not equal to the
    -        /// number of bytes transferred (see CTRL_DATA_SIZE).\n\n
    -        /// When the channel is active, reading this register shows the number of transfers
    -        /// remaining, updating automatically each time a write transfer completes.\n\n
    -        /// Writing this register sets the RELOAD value for the transfer counter. Each time
    -        /// this channel is triggered, the RELOAD value is copied into the live transfer
    -        /// counter. The channel can be started multiple times, and will perform the same
    -        /// number of transfers each time, as programmed by most recent write.\n\n
    -        /// The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a
    -        /// trigger, the written value is used immediately as the length of the new transfer
    -        /// sequence, as well as being written to RELOAD.
    -        pub const CH4_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x108);
    -
    -        /// address: 0x5000010c
    -        /// DMA Channel 4 Control and Status
    -        pub const CH4_CTRL_TRIG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// DMA Channel Enable.\n
    -            /// When 1, the channel will respond to triggering events, which will cause it to
    -            /// become BUSY and start transferring data. When 0, the channel will ignore
    -            /// triggers, stop issuing transfers, and pause the current transfer sequence (i.e.
    -            /// BUSY will remain high if already high)
    -            EN: u1,
    -            /// HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in
    -            /// each scheduling round, all high priority channels are considered first, and then
    -            /// only a single low priority channel, before returning to the high priority
    -            /// channels.\n\n
    -            /// This only affects the order in which the DMA schedules channels. The DMA's bus
    -            /// priority is not changed. If the DMA is not saturated then a low priority channel
    -            /// will see no loss of throughput.
    -            HIGH_PRIORITY: u1,
    -            /// Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR
    -            /// advance by this amount (1/2/4 bytes) with each transfer.
    -            DATA_SIZE: u2,
    -            /// If 1, the read address increments with each transfer. If 0, each read is
    -            /// directed to the same, initial address.\n\n
    -            /// Generally this should be disabled for peripheral-to-memory transfers.
    -            INCR_READ: u1,
    -            /// If 1, the write address increments with each transfer. If 0, each write is
    -            /// directed to the same, initial address.\n\n
    -            /// Generally this should be disabled for memory-to-peripheral transfers.
    -            INCR_WRITE: u1,
    -            /// Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower
    -            /// n bits of the address will change. This wraps the address on a (1 << n) byte
    -            /// boundary, facilitating access to naturally-aligned ring buffers.\n\n
    -            /// Ring sizes between 2 and 32768 bytes are possible. This can apply to either read
    -            /// or write addresses, based on value of RING_SEL.
    -            RING_SIZE: u4,
    -            /// Select whether RING_SIZE applies to read or write addresses.\n
    -            /// If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write
    -            /// addresses are wrapped.
    -            RING_SEL: u1,
    -            /// When this channel completes, it will trigger the channel indicated by CHAIN_TO.
    -            /// Disable by setting CHAIN_TO = _(this channel)_.\n
    -            /// Reset value is equal to channel number (4).
    -            CHAIN_TO: u4,
    -            /// Select a Transfer Request signal.\n
    -            /// The channel uses the transfer request signal to pace its data transfer rate.
    -            /// Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request
    -            /// from the system).\n
    -            /// 0x0 to 0x3a -> select DREQ n as TREQ
    -            TREQ_SEL: u6,
    -            /// In QUIET mode, the channel does not generate IRQs at the end of every transfer
    -            /// block. Instead, an IRQ is raised when NULL is written to a trigger register,
    -            /// indicating the end of a control block chain.\n\n
    -            /// This reduces the number of interrupts to be serviced by the CPU when
    -            /// transferring a DMA chain of many small control blocks.
    -            IRQ_QUIET: u1,
    -            /// Apply byte-swap transformation to DMA data.\n
    -            /// For byte data, this has no effect. For halfword data, the two bytes of each
    -            /// halfword are swapped. For word data, the four bytes of each word are swapped to
    -            /// reverse order.
    -            BSWAP: u1,
    -            /// If 1, this channel's data transfers are visible to the sniff hardware, and each
    -            /// transfer will advance the state of the checksum. This only applies if the sniff
    -            /// hardware is enabled, and has this channel selected.\n\n
    -            /// This allows checksum to be enabled or disabled on a per-control- block basis.
    -            SNIFF_EN: u1,
    -            /// This flag goes high when the channel starts a new transfer sequence, and low
    -            /// when the last transfer of that sequence completes. Clearing EN while BUSY is
    -            /// high pauses the channel, and BUSY will stay high while paused.\n\n
    -            /// To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    -            BUSY: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            /// If 1, the channel received a write bus error. Write one to clear.\n
    -            /// WRITE_ADDR shows the approximate address where the bus error was encountered
    -            /// (will not to be earlier, or more than 5 transfers later)
    -            WRITE_ERROR: u1,
    -            /// If 1, the channel received a read bus error. Write one to clear.\n
    -            /// READ_ADDR shows the approximate address where the bus error was encountered
    -            /// (will not to be earlier, or more than 3 transfers later)
    -            READ_ERROR: u1,
    -            /// Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it
    -            /// encounters any bus error, and always raises its channel IRQ flag.
    -            AHB_ERROR: u1,
    -        }), base_address + 0x10c);
    -
    -        /// address: 0x50000110
    -        /// Alias for channel 4 CTRL register
    -        pub const CH4_AL1_CTRL = @intToPtr(*volatile u32, base_address + 0x110);
    -
    -        /// address: 0x50000114
    -        /// Alias for channel 4 READ_ADDR register
    -        pub const CH4_AL1_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x114);
    -
    -        /// address: 0x50000118
    -        /// Alias for channel 4 WRITE_ADDR register
    -        pub const CH4_AL1_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x118);
    -
    -        /// address: 0x5000011c
    -        /// Alias for channel 4 TRANS_COUNT register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH4_AL1_TRANS_COUNT_TRIG = @intToPtr(*volatile u32, base_address + 0x11c);
    -
    -        /// address: 0x50000120
    -        /// Alias for channel 4 CTRL register
    -        pub const CH4_AL2_CTRL = @intToPtr(*volatile u32, base_address + 0x120);
    -
    -        /// address: 0x50000124
    -        /// Alias for channel 4 TRANS_COUNT register
    -        pub const CH4_AL2_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x124);
    -
    -        /// address: 0x50000128
    -        /// Alias for channel 4 READ_ADDR register
    -        pub const CH4_AL2_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x128);
    -
    -        /// address: 0x5000012c
    -        /// Alias for channel 4 WRITE_ADDR register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH4_AL2_WRITE_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x12c);
    -
    -        /// address: 0x50000130
    -        /// Alias for channel 4 CTRL register
    -        pub const CH4_AL3_CTRL = @intToPtr(*volatile u32, base_address + 0x130);
    -
    -        /// address: 0x50000134
    -        /// Alias for channel 4 WRITE_ADDR register
    -        pub const CH4_AL3_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x134);
    -
    -        /// address: 0x50000138
    -        /// Alias for channel 4 TRANS_COUNT register
    -        pub const CH4_AL3_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x138);
    -
    -        /// address: 0x5000013c
    -        /// Alias for channel 4 READ_ADDR register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH4_AL3_READ_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x13c);
    -
    -        /// address: 0x50000140
    -        /// DMA Channel 5 Read Address pointer\n
    -        /// This register updates automatically each time a read completes. The current
    -        /// value is the next address to be read by this channel.
    -        pub const CH5_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x140);
    -
    -        /// address: 0x50000144
    -        /// DMA Channel 5 Write Address pointer\n
    -        /// This register updates automatically each time a write completes. The current
    -        /// value is the next address to be written by this channel.
    -        pub const CH5_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x144);
    -
    -        /// address: 0x50000148
    -        /// DMA Channel 5 Transfer Count\n
    -        /// Program the number of bus transfers a channel will perform before halting. Note
    -        /// that, if transfers are larger than one byte in size, this is not equal to the
    -        /// number of bytes transferred (see CTRL_DATA_SIZE).\n\n
    -        /// When the channel is active, reading this register shows the number of transfers
    -        /// remaining, updating automatically each time a write transfer completes.\n\n
    -        /// Writing this register sets the RELOAD value for the transfer counter. Each time
    -        /// this channel is triggered, the RELOAD value is copied into the live transfer
    -        /// counter. The channel can be started multiple times, and will perform the same
    -        /// number of transfers each time, as programmed by most recent write.\n\n
    -        /// The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a
    -        /// trigger, the written value is used immediately as the length of the new transfer
    -        /// sequence, as well as being written to RELOAD.
    -        pub const CH5_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x148);
    -
    -        /// address: 0x5000014c
    -        /// DMA Channel 5 Control and Status
    -        pub const CH5_CTRL_TRIG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// DMA Channel Enable.\n
    -            /// When 1, the channel will respond to triggering events, which will cause it to
    -            /// become BUSY and start transferring data. When 0, the channel will ignore
    -            /// triggers, stop issuing transfers, and pause the current transfer sequence (i.e.
    -            /// BUSY will remain high if already high)
    -            EN: u1,
    -            /// HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in
    -            /// each scheduling round, all high priority channels are considered first, and then
    -            /// only a single low priority channel, before returning to the high priority
    -            /// channels.\n\n
    -            /// This only affects the order in which the DMA schedules channels. The DMA's bus
    -            /// priority is not changed. If the DMA is not saturated then a low priority channel
    -            /// will see no loss of throughput.
    -            HIGH_PRIORITY: u1,
    -            /// Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR
    -            /// advance by this amount (1/2/4 bytes) with each transfer.
    -            DATA_SIZE: u2,
    -            /// If 1, the read address increments with each transfer. If 0, each read is
    -            /// directed to the same, initial address.\n\n
    -            /// Generally this should be disabled for peripheral-to-memory transfers.
    -            INCR_READ: u1,
    -            /// If 1, the write address increments with each transfer. If 0, each write is
    -            /// directed to the same, initial address.\n\n
    -            /// Generally this should be disabled for memory-to-peripheral transfers.
    -            INCR_WRITE: u1,
    -            /// Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower
    -            /// n bits of the address will change. This wraps the address on a (1 << n) byte
    -            /// boundary, facilitating access to naturally-aligned ring buffers.\n\n
    -            /// Ring sizes between 2 and 32768 bytes are possible. This can apply to either read
    -            /// or write addresses, based on value of RING_SEL.
    -            RING_SIZE: u4,
    -            /// Select whether RING_SIZE applies to read or write addresses.\n
    -            /// If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write
    -            /// addresses are wrapped.
    -            RING_SEL: u1,
    -            /// When this channel completes, it will trigger the channel indicated by CHAIN_TO.
    -            /// Disable by setting CHAIN_TO = _(this channel)_.\n
    -            /// Reset value is equal to channel number (5).
    -            CHAIN_TO: u4,
    -            /// Select a Transfer Request signal.\n
    -            /// The channel uses the transfer request signal to pace its data transfer rate.
    -            /// Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request
    -            /// from the system).\n
    -            /// 0x0 to 0x3a -> select DREQ n as TREQ
    -            TREQ_SEL: u6,
    -            /// In QUIET mode, the channel does not generate IRQs at the end of every transfer
    -            /// block. Instead, an IRQ is raised when NULL is written to a trigger register,
    -            /// indicating the end of a control block chain.\n\n
    -            /// This reduces the number of interrupts to be serviced by the CPU when
    -            /// transferring a DMA chain of many small control blocks.
    -            IRQ_QUIET: u1,
    -            /// Apply byte-swap transformation to DMA data.\n
    -            /// For byte data, this has no effect. For halfword data, the two bytes of each
    -            /// halfword are swapped. For word data, the four bytes of each word are swapped to
    -            /// reverse order.
    -            BSWAP: u1,
    -            /// If 1, this channel's data transfers are visible to the sniff hardware, and each
    -            /// transfer will advance the state of the checksum. This only applies if the sniff
    -            /// hardware is enabled, and has this channel selected.\n\n
    -            /// This allows checksum to be enabled or disabled on a per-control- block basis.
    -            SNIFF_EN: u1,
    -            /// This flag goes high when the channel starts a new transfer sequence, and low
    -            /// when the last transfer of that sequence completes. Clearing EN while BUSY is
    -            /// high pauses the channel, and BUSY will stay high while paused.\n\n
    -            /// To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    -            BUSY: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            /// If 1, the channel received a write bus error. Write one to clear.\n
    -            /// WRITE_ADDR shows the approximate address where the bus error was encountered
    -            /// (will not to be earlier, or more than 5 transfers later)
    -            WRITE_ERROR: u1,
    -            /// If 1, the channel received a read bus error. Write one to clear.\n
    -            /// READ_ADDR shows the approximate address where the bus error was encountered
    -            /// (will not to be earlier, or more than 3 transfers later)
    -            READ_ERROR: u1,
    -            /// Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it
    -            /// encounters any bus error, and always raises its channel IRQ flag.
    -            AHB_ERROR: u1,
    -        }), base_address + 0x14c);
    -
    -        /// address: 0x50000150
    -        /// Alias for channel 5 CTRL register
    -        pub const CH5_AL1_CTRL = @intToPtr(*volatile u32, base_address + 0x150);
    -
    -        /// address: 0x50000154
    -        /// Alias for channel 5 READ_ADDR register
    -        pub const CH5_AL1_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x154);
    -
    -        /// address: 0x50000158
    -        /// Alias for channel 5 WRITE_ADDR register
    -        pub const CH5_AL1_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x158);
    -
    -        /// address: 0x5000015c
    -        /// Alias for channel 5 TRANS_COUNT register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH5_AL1_TRANS_COUNT_TRIG = @intToPtr(*volatile u32, base_address + 0x15c);
    -
    -        /// address: 0x50000160
    -        /// Alias for channel 5 CTRL register
    -        pub const CH5_AL2_CTRL = @intToPtr(*volatile u32, base_address + 0x160);
    -
    -        /// address: 0x50000164
    -        /// Alias for channel 5 TRANS_COUNT register
    -        pub const CH5_AL2_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x164);
    -
    -        /// address: 0x50000168
    -        /// Alias for channel 5 READ_ADDR register
    -        pub const CH5_AL2_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x168);
    -
    -        /// address: 0x5000016c
    -        /// Alias for channel 5 WRITE_ADDR register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH5_AL2_WRITE_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x16c);
    -
    -        /// address: 0x50000170
    -        /// Alias for channel 5 CTRL register
    -        pub const CH5_AL3_CTRL = @intToPtr(*volatile u32, base_address + 0x170);
    -
    -        /// address: 0x50000174
    -        /// Alias for channel 5 WRITE_ADDR register
    -        pub const CH5_AL3_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x174);
    -
    -        /// address: 0x50000178
    -        /// Alias for channel 5 TRANS_COUNT register
    -        pub const CH5_AL3_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x178);
    -
    -        /// address: 0x5000017c
    -        /// Alias for channel 5 READ_ADDR register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH5_AL3_READ_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x17c);
    -
    -        /// address: 0x50000180
    -        /// DMA Channel 6 Read Address pointer\n
    -        /// This register updates automatically each time a read completes. The current
    -        /// value is the next address to be read by this channel.
    -        pub const CH6_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x180);
    -
    -        /// address: 0x50000184
    -        /// DMA Channel 6 Write Address pointer\n
    -        /// This register updates automatically each time a write completes. The current
    -        /// value is the next address to be written by this channel.
    -        pub const CH6_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x184);
    -
    -        /// address: 0x50000188
    -        /// DMA Channel 6 Transfer Count\n
    -        /// Program the number of bus transfers a channel will perform before halting. Note
    -        /// that, if transfers are larger than one byte in size, this is not equal to the
    -        /// number of bytes transferred (see CTRL_DATA_SIZE).\n\n
    -        /// When the channel is active, reading this register shows the number of transfers
    -        /// remaining, updating automatically each time a write transfer completes.\n\n
    -        /// Writing this register sets the RELOAD value for the transfer counter. Each time
    -        /// this channel is triggered, the RELOAD value is copied into the live transfer
    -        /// counter. The channel can be started multiple times, and will perform the same
    -        /// number of transfers each time, as programmed by most recent write.\n\n
    -        /// The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a
    -        /// trigger, the written value is used immediately as the length of the new transfer
    -        /// sequence, as well as being written to RELOAD.
    -        pub const CH6_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x188);
    -
    -        /// address: 0x5000018c
    -        /// DMA Channel 6 Control and Status
    -        pub const CH6_CTRL_TRIG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// DMA Channel Enable.\n
    -            /// When 1, the channel will respond to triggering events, which will cause it to
    -            /// become BUSY and start transferring data. When 0, the channel will ignore
    -            /// triggers, stop issuing transfers, and pause the current transfer sequence (i.e.
    -            /// BUSY will remain high if already high)
    -            EN: u1,
    -            /// HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in
    -            /// each scheduling round, all high priority channels are considered first, and then
    -            /// only a single low priority channel, before returning to the high priority
    -            /// channels.\n\n
    -            /// This only affects the order in which the DMA schedules channels. The DMA's bus
    -            /// priority is not changed. If the DMA is not saturated then a low priority channel
    -            /// will see no loss of throughput.
    -            HIGH_PRIORITY: u1,
    -            /// Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR
    -            /// advance by this amount (1/2/4 bytes) with each transfer.
    -            DATA_SIZE: u2,
    -            /// If 1, the read address increments with each transfer. If 0, each read is
    -            /// directed to the same, initial address.\n\n
    -            /// Generally this should be disabled for peripheral-to-memory transfers.
    -            INCR_READ: u1,
    -            /// If 1, the write address increments with each transfer. If 0, each write is
    -            /// directed to the same, initial address.\n\n
    -            /// Generally this should be disabled for memory-to-peripheral transfers.
    -            INCR_WRITE: u1,
    -            /// Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower
    -            /// n bits of the address will change. This wraps the address on a (1 << n) byte
    -            /// boundary, facilitating access to naturally-aligned ring buffers.\n\n
    -            /// Ring sizes between 2 and 32768 bytes are possible. This can apply to either read
    -            /// or write addresses, based on value of RING_SEL.
    -            RING_SIZE: u4,
    -            /// Select whether RING_SIZE applies to read or write addresses.\n
    -            /// If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write
    -            /// addresses are wrapped.
    -            RING_SEL: u1,
    -            /// When this channel completes, it will trigger the channel indicated by CHAIN_TO.
    -            /// Disable by setting CHAIN_TO = _(this channel)_.\n
    -            /// Reset value is equal to channel number (6).
    -            CHAIN_TO: u4,
    -            /// Select a Transfer Request signal.\n
    -            /// The channel uses the transfer request signal to pace its data transfer rate.
    -            /// Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request
    -            /// from the system).\n
    -            /// 0x0 to 0x3a -> select DREQ n as TREQ
    -            TREQ_SEL: u6,
    -            /// In QUIET mode, the channel does not generate IRQs at the end of every transfer
    -            /// block. Instead, an IRQ is raised when NULL is written to a trigger register,
    -            /// indicating the end of a control block chain.\n\n
    -            /// This reduces the number of interrupts to be serviced by the CPU when
    -            /// transferring a DMA chain of many small control blocks.
    -            IRQ_QUIET: u1,
    -            /// Apply byte-swap transformation to DMA data.\n
    -            /// For byte data, this has no effect. For halfword data, the two bytes of each
    -            /// halfword are swapped. For word data, the four bytes of each word are swapped to
    -            /// reverse order.
    -            BSWAP: u1,
    -            /// If 1, this channel's data transfers are visible to the sniff hardware, and each
    -            /// transfer will advance the state of the checksum. This only applies if the sniff
    -            /// hardware is enabled, and has this channel selected.\n\n
    -            /// This allows checksum to be enabled or disabled on a per-control- block basis.
    -            SNIFF_EN: u1,
    -            /// This flag goes high when the channel starts a new transfer sequence, and low
    -            /// when the last transfer of that sequence completes. Clearing EN while BUSY is
    -            /// high pauses the channel, and BUSY will stay high while paused.\n\n
    -            /// To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    -            BUSY: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            /// If 1, the channel received a write bus error. Write one to clear.\n
    -            /// WRITE_ADDR shows the approximate address where the bus error was encountered
    -            /// (will not to be earlier, or more than 5 transfers later)
    -            WRITE_ERROR: u1,
    -            /// If 1, the channel received a read bus error. Write one to clear.\n
    -            /// READ_ADDR shows the approximate address where the bus error was encountered
    -            /// (will not to be earlier, or more than 3 transfers later)
    -            READ_ERROR: u1,
    -            /// Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it
    -            /// encounters any bus error, and always raises its channel IRQ flag.
    -            AHB_ERROR: u1,
    -        }), base_address + 0x18c);
    -
    -        /// address: 0x50000190
    -        /// Alias for channel 6 CTRL register
    -        pub const CH6_AL1_CTRL = @intToPtr(*volatile u32, base_address + 0x190);
    -
    -        /// address: 0x50000194
    -        /// Alias for channel 6 READ_ADDR register
    -        pub const CH6_AL1_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x194);
    -
    -        /// address: 0x50000198
    -        /// Alias for channel 6 WRITE_ADDR register
    -        pub const CH6_AL1_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x198);
    -
    -        /// address: 0x5000019c
    -        /// Alias for channel 6 TRANS_COUNT register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH6_AL1_TRANS_COUNT_TRIG = @intToPtr(*volatile u32, base_address + 0x19c);
    -
    -        /// address: 0x500001a0
    -        /// Alias for channel 6 CTRL register
    -        pub const CH6_AL2_CTRL = @intToPtr(*volatile u32, base_address + 0x1a0);
    -
    -        /// address: 0x500001a4
    -        /// Alias for channel 6 TRANS_COUNT register
    -        pub const CH6_AL2_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x1a4);
    -
    -        /// address: 0x500001a8
    -        /// Alias for channel 6 READ_ADDR register
    -        pub const CH6_AL2_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x1a8);
    -
    -        /// address: 0x500001ac
    -        /// Alias for channel 6 WRITE_ADDR register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH6_AL2_WRITE_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x1ac);
    -
    -        /// address: 0x500001b0
    -        /// Alias for channel 6 CTRL register
    -        pub const CH6_AL3_CTRL = @intToPtr(*volatile u32, base_address + 0x1b0);
    -
    -        /// address: 0x500001b4
    -        /// Alias for channel 6 WRITE_ADDR register
    -        pub const CH6_AL3_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x1b4);
    -
    -        /// address: 0x500001b8
    -        /// Alias for channel 6 TRANS_COUNT register
    -        pub const CH6_AL3_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x1b8);
    -
    -        /// address: 0x500001bc
    -        /// Alias for channel 6 READ_ADDR register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH6_AL3_READ_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x1bc);
    -
    -        /// address: 0x500001c0
    -        /// DMA Channel 7 Read Address pointer\n
    -        /// This register updates automatically each time a read completes. The current
    -        /// value is the next address to be read by this channel.
    -        pub const CH7_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x1c0);
    -
    -        /// address: 0x500001c4
    -        /// DMA Channel 7 Write Address pointer\n
    -        /// This register updates automatically each time a write completes. The current
    -        /// value is the next address to be written by this channel.
    -        pub const CH7_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x1c4);
    -
    -        /// address: 0x500001c8
    -        /// DMA Channel 7 Transfer Count\n
    -        /// Program the number of bus transfers a channel will perform before halting. Note
    -        /// that, if transfers are larger than one byte in size, this is not equal to the
    -        /// number of bytes transferred (see CTRL_DATA_SIZE).\n\n
    -        /// When the channel is active, reading this register shows the number of transfers
    -        /// remaining, updating automatically each time a write transfer completes.\n\n
    -        /// Writing this register sets the RELOAD value for the transfer counter. Each time
    -        /// this channel is triggered, the RELOAD value is copied into the live transfer
    -        /// counter. The channel can be started multiple times, and will perform the same
    -        /// number of transfers each time, as programmed by most recent write.\n\n
    -        /// The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a
    -        /// trigger, the written value is used immediately as the length of the new transfer
    -        /// sequence, as well as being written to RELOAD.
    -        pub const CH7_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x1c8);
    -
    -        /// address: 0x500001cc
    -        /// DMA Channel 7 Control and Status
    -        pub const CH7_CTRL_TRIG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// DMA Channel Enable.\n
    -            /// When 1, the channel will respond to triggering events, which will cause it to
    -            /// become BUSY and start transferring data. When 0, the channel will ignore
    -            /// triggers, stop issuing transfers, and pause the current transfer sequence (i.e.
    -            /// BUSY will remain high if already high)
    -            EN: u1,
    -            /// HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in
    -            /// each scheduling round, all high priority channels are considered first, and then
    -            /// only a single low priority channel, before returning to the high priority
    -            /// channels.\n\n
    -            /// This only affects the order in which the DMA schedules channels. The DMA's bus
    -            /// priority is not changed. If the DMA is not saturated then a low priority channel
    -            /// will see no loss of throughput.
    -            HIGH_PRIORITY: u1,
    -            /// Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR
    -            /// advance by this amount (1/2/4 bytes) with each transfer.
    -            DATA_SIZE: u2,
    -            /// If 1, the read address increments with each transfer. If 0, each read is
    -            /// directed to the same, initial address.\n\n
    -            /// Generally this should be disabled for peripheral-to-memory transfers.
    -            INCR_READ: u1,
    -            /// If 1, the write address increments with each transfer. If 0, each write is
    -            /// directed to the same, initial address.\n\n
    -            /// Generally this should be disabled for memory-to-peripheral transfers.
    -            INCR_WRITE: u1,
    -            /// Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower
    -            /// n bits of the address will change. This wraps the address on a (1 << n) byte
    -            /// boundary, facilitating access to naturally-aligned ring buffers.\n\n
    -            /// Ring sizes between 2 and 32768 bytes are possible. This can apply to either read
    -            /// or write addresses, based on value of RING_SEL.
    -            RING_SIZE: u4,
    -            /// Select whether RING_SIZE applies to read or write addresses.\n
    -            /// If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write
    -            /// addresses are wrapped.
    -            RING_SEL: u1,
    -            /// When this channel completes, it will trigger the channel indicated by CHAIN_TO.
    -            /// Disable by setting CHAIN_TO = _(this channel)_.\n
    -            /// Reset value is equal to channel number (7).
    -            CHAIN_TO: u4,
    -            /// Select a Transfer Request signal.\n
    -            /// The channel uses the transfer request signal to pace its data transfer rate.
    -            /// Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request
    -            /// from the system).\n
    -            /// 0x0 to 0x3a -> select DREQ n as TREQ
    -            TREQ_SEL: u6,
    -            /// In QUIET mode, the channel does not generate IRQs at the end of every transfer
    -            /// block. Instead, an IRQ is raised when NULL is written to a trigger register,
    -            /// indicating the end of a control block chain.\n\n
    -            /// This reduces the number of interrupts to be serviced by the CPU when
    -            /// transferring a DMA chain of many small control blocks.
    -            IRQ_QUIET: u1,
    -            /// Apply byte-swap transformation to DMA data.\n
    -            /// For byte data, this has no effect. For halfword data, the two bytes of each
    -            /// halfword are swapped. For word data, the four bytes of each word are swapped to
    -            /// reverse order.
    -            BSWAP: u1,
    -            /// If 1, this channel's data transfers are visible to the sniff hardware, and each
    -            /// transfer will advance the state of the checksum. This only applies if the sniff
    -            /// hardware is enabled, and has this channel selected.\n\n
    -            /// This allows checksum to be enabled or disabled on a per-control- block basis.
    -            SNIFF_EN: u1,
    -            /// This flag goes high when the channel starts a new transfer sequence, and low
    -            /// when the last transfer of that sequence completes. Clearing EN while BUSY is
    -            /// high pauses the channel, and BUSY will stay high while paused.\n\n
    -            /// To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    -            BUSY: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            /// If 1, the channel received a write bus error. Write one to clear.\n
    -            /// WRITE_ADDR shows the approximate address where the bus error was encountered
    -            /// (will not to be earlier, or more than 5 transfers later)
    -            WRITE_ERROR: u1,
    -            /// If 1, the channel received a read bus error. Write one to clear.\n
    -            /// READ_ADDR shows the approximate address where the bus error was encountered
    -            /// (will not to be earlier, or more than 3 transfers later)
    -            READ_ERROR: u1,
    -            /// Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it
    -            /// encounters any bus error, and always raises its channel IRQ flag.
    -            AHB_ERROR: u1,
    -        }), base_address + 0x1cc);
    -
    -        /// address: 0x500001d0
    -        /// Alias for channel 7 CTRL register
    -        pub const CH7_AL1_CTRL = @intToPtr(*volatile u32, base_address + 0x1d0);
    -
    -        /// address: 0x500001d4
    -        /// Alias for channel 7 READ_ADDR register
    -        pub const CH7_AL1_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x1d4);
    -
    -        /// address: 0x500001d8
    -        /// Alias for channel 7 WRITE_ADDR register
    -        pub const CH7_AL1_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x1d8);
    -
    -        /// address: 0x500001dc
    -        /// Alias for channel 7 TRANS_COUNT register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH7_AL1_TRANS_COUNT_TRIG = @intToPtr(*volatile u32, base_address + 0x1dc);
    -
    -        /// address: 0x500001e0
    -        /// Alias for channel 7 CTRL register
    -        pub const CH7_AL2_CTRL = @intToPtr(*volatile u32, base_address + 0x1e0);
    -
    -        /// address: 0x500001e4
    -        /// Alias for channel 7 TRANS_COUNT register
    -        pub const CH7_AL2_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x1e4);
    -
    -        /// address: 0x500001e8
    -        /// Alias for channel 7 READ_ADDR register
    -        pub const CH7_AL2_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x1e8);
    -
    -        /// address: 0x500001ec
    -        /// Alias for channel 7 WRITE_ADDR register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH7_AL2_WRITE_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x1ec);
    -
    -        /// address: 0x500001f0
    -        /// Alias for channel 7 CTRL register
    -        pub const CH7_AL3_CTRL = @intToPtr(*volatile u32, base_address + 0x1f0);
    -
    -        /// address: 0x500001f4
    -        /// Alias for channel 7 WRITE_ADDR register
    -        pub const CH7_AL3_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x1f4);
    -
    -        /// address: 0x500001f8
    -        /// Alias for channel 7 TRANS_COUNT register
    -        pub const CH7_AL3_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x1f8);
    -
    -        /// address: 0x500001fc
    -        /// Alias for channel 7 READ_ADDR register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH7_AL3_READ_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x1fc);
    -
    -        /// address: 0x50000200
    -        /// DMA Channel 8 Read Address pointer\n
    -        /// This register updates automatically each time a read completes. The current
    -        /// value is the next address to be read by this channel.
    -        pub const CH8_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x200);
    -
    -        /// address: 0x50000204
    -        /// DMA Channel 8 Write Address pointer\n
    -        /// This register updates automatically each time a write completes. The current
    -        /// value is the next address to be written by this channel.
    -        pub const CH8_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x204);
    -
    -        /// address: 0x50000208
    -        /// DMA Channel 8 Transfer Count\n
    -        /// Program the number of bus transfers a channel will perform before halting. Note
    -        /// that, if transfers are larger than one byte in size, this is not equal to the
    -        /// number of bytes transferred (see CTRL_DATA_SIZE).\n\n
    -        /// When the channel is active, reading this register shows the number of transfers
    -        /// remaining, updating automatically each time a write transfer completes.\n\n
    -        /// Writing this register sets the RELOAD value for the transfer counter. Each time
    -        /// this channel is triggered, the RELOAD value is copied into the live transfer
    -        /// counter. The channel can be started multiple times, and will perform the same
    -        /// number of transfers each time, as programmed by most recent write.\n\n
    -        /// The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a
    -        /// trigger, the written value is used immediately as the length of the new transfer
    -        /// sequence, as well as being written to RELOAD.
    -        pub const CH8_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x208);
    -
    -        /// address: 0x5000020c
    -        /// DMA Channel 8 Control and Status
    -        pub const CH8_CTRL_TRIG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// DMA Channel Enable.\n
    -            /// When 1, the channel will respond to triggering events, which will cause it to
    -            /// become BUSY and start transferring data. When 0, the channel will ignore
    -            /// triggers, stop issuing transfers, and pause the current transfer sequence (i.e.
    -            /// BUSY will remain high if already high)
    -            EN: u1,
    -            /// HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in
    -            /// each scheduling round, all high priority channels are considered first, and then
    -            /// only a single low priority channel, before returning to the high priority
    -            /// channels.\n\n
    -            /// This only affects the order in which the DMA schedules channels. The DMA's bus
    -            /// priority is not changed. If the DMA is not saturated then a low priority channel
    -            /// will see no loss of throughput.
    -            HIGH_PRIORITY: u1,
    -            /// Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR
    -            /// advance by this amount (1/2/4 bytes) with each transfer.
    -            DATA_SIZE: u2,
    -            /// If 1, the read address increments with each transfer. If 0, each read is
    -            /// directed to the same, initial address.\n\n
    -            /// Generally this should be disabled for peripheral-to-memory transfers.
    -            INCR_READ: u1,
    -            /// If 1, the write address increments with each transfer. If 0, each write is
    -            /// directed to the same, initial address.\n\n
    -            /// Generally this should be disabled for memory-to-peripheral transfers.
    -            INCR_WRITE: u1,
    -            /// Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower
    -            /// n bits of the address will change. This wraps the address on a (1 << n) byte
    -            /// boundary, facilitating access to naturally-aligned ring buffers.\n\n
    -            /// Ring sizes between 2 and 32768 bytes are possible. This can apply to either read
    -            /// or write addresses, based on value of RING_SEL.
    -            RING_SIZE: u4,
    -            /// Select whether RING_SIZE applies to read or write addresses.\n
    -            /// If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write
    -            /// addresses are wrapped.
    -            RING_SEL: u1,
    -            /// When this channel completes, it will trigger the channel indicated by CHAIN_TO.
    -            /// Disable by setting CHAIN_TO = _(this channel)_.\n
    -            /// Reset value is equal to channel number (8).
    -            CHAIN_TO: u4,
    -            /// Select a Transfer Request signal.\n
    -            /// The channel uses the transfer request signal to pace its data transfer rate.
    -            /// Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request
    -            /// from the system).\n
    -            /// 0x0 to 0x3a -> select DREQ n as TREQ
    -            TREQ_SEL: u6,
    -            /// In QUIET mode, the channel does not generate IRQs at the end of every transfer
    -            /// block. Instead, an IRQ is raised when NULL is written to a trigger register,
    -            /// indicating the end of a control block chain.\n\n
    -            /// This reduces the number of interrupts to be serviced by the CPU when
    -            /// transferring a DMA chain of many small control blocks.
    -            IRQ_QUIET: u1,
    -            /// Apply byte-swap transformation to DMA data.\n
    -            /// For byte data, this has no effect. For halfword data, the two bytes of each
    -            /// halfword are swapped. For word data, the four bytes of each word are swapped to
    -            /// reverse order.
    -            BSWAP: u1,
    -            /// If 1, this channel's data transfers are visible to the sniff hardware, and each
    -            /// transfer will advance the state of the checksum. This only applies if the sniff
    -            /// hardware is enabled, and has this channel selected.\n\n
    -            /// This allows checksum to be enabled or disabled on a per-control- block basis.
    -            SNIFF_EN: u1,
    -            /// This flag goes high when the channel starts a new transfer sequence, and low
    -            /// when the last transfer of that sequence completes. Clearing EN while BUSY is
    -            /// high pauses the channel, and BUSY will stay high while paused.\n\n
    -            /// To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    -            BUSY: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            /// If 1, the channel received a write bus error. Write one to clear.\n
    -            /// WRITE_ADDR shows the approximate address where the bus error was encountered
    -            /// (will not to be earlier, or more than 5 transfers later)
    -            WRITE_ERROR: u1,
    -            /// If 1, the channel received a read bus error. Write one to clear.\n
    -            /// READ_ADDR shows the approximate address where the bus error was encountered
    -            /// (will not to be earlier, or more than 3 transfers later)
    -            READ_ERROR: u1,
    -            /// Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it
    -            /// encounters any bus error, and always raises its channel IRQ flag.
    -            AHB_ERROR: u1,
    -        }), base_address + 0x20c);
    -
    -        /// address: 0x50000210
    -        /// Alias for channel 8 CTRL register
    -        pub const CH8_AL1_CTRL = @intToPtr(*volatile u32, base_address + 0x210);
    -
    -        /// address: 0x50000214
    -        /// Alias for channel 8 READ_ADDR register
    -        pub const CH8_AL1_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x214);
    -
    -        /// address: 0x50000218
    -        /// Alias for channel 8 WRITE_ADDR register
    -        pub const CH8_AL1_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x218);
    -
    -        /// address: 0x5000021c
    -        /// Alias for channel 8 TRANS_COUNT register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH8_AL1_TRANS_COUNT_TRIG = @intToPtr(*volatile u32, base_address + 0x21c);
    -
    -        /// address: 0x50000220
    -        /// Alias for channel 8 CTRL register
    -        pub const CH8_AL2_CTRL = @intToPtr(*volatile u32, base_address + 0x220);
    -
    -        /// address: 0x50000224
    -        /// Alias for channel 8 TRANS_COUNT register
    -        pub const CH8_AL2_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x224);
    -
    -        /// address: 0x50000228
    -        /// Alias for channel 8 READ_ADDR register
    -        pub const CH8_AL2_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x228);
    -
    -        /// address: 0x5000022c
    -        /// Alias for channel 8 WRITE_ADDR register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH8_AL2_WRITE_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x22c);
    -
    -        /// address: 0x50000230
    -        /// Alias for channel 8 CTRL register
    -        pub const CH8_AL3_CTRL = @intToPtr(*volatile u32, base_address + 0x230);
    -
    -        /// address: 0x50000234
    -        /// Alias for channel 8 WRITE_ADDR register
    -        pub const CH8_AL3_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x234);
    -
    -        /// address: 0x50000238
    -        /// Alias for channel 8 TRANS_COUNT register
    -        pub const CH8_AL3_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x238);
    -
    -        /// address: 0x5000023c
    -        /// Alias for channel 8 READ_ADDR register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH8_AL3_READ_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x23c);
    -
    -        /// address: 0x50000240
    -        /// DMA Channel 9 Read Address pointer\n
    -        /// This register updates automatically each time a read completes. The current
    -        /// value is the next address to be read by this channel.
    -        pub const CH9_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x240);
    -
    -        /// address: 0x50000244
    -        /// DMA Channel 9 Write Address pointer\n
    -        /// This register updates automatically each time a write completes. The current
    -        /// value is the next address to be written by this channel.
    -        pub const CH9_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x244);
    -
    -        /// address: 0x50000248
    -        /// DMA Channel 9 Transfer Count\n
    -        /// Program the number of bus transfers a channel will perform before halting. Note
    -        /// that, if transfers are larger than one byte in size, this is not equal to the
    -        /// number of bytes transferred (see CTRL_DATA_SIZE).\n\n
    -        /// When the channel is active, reading this register shows the number of transfers
    -        /// remaining, updating automatically each time a write transfer completes.\n\n
    -        /// Writing this register sets the RELOAD value for the transfer counter. Each time
    -        /// this channel is triggered, the RELOAD value is copied into the live transfer
    -        /// counter. The channel can be started multiple times, and will perform the same
    -        /// number of transfers each time, as programmed by most recent write.\n\n
    -        /// The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a
    -        /// trigger, the written value is used immediately as the length of the new transfer
    -        /// sequence, as well as being written to RELOAD.
    -        pub const CH9_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x248);
    -
    -        /// address: 0x5000024c
    -        /// DMA Channel 9 Control and Status
    -        pub const CH9_CTRL_TRIG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// DMA Channel Enable.\n
    -            /// When 1, the channel will respond to triggering events, which will cause it to
    -            /// become BUSY and start transferring data. When 0, the channel will ignore
    -            /// triggers, stop issuing transfers, and pause the current transfer sequence (i.e.
    -            /// BUSY will remain high if already high)
    -            EN: u1,
    -            /// HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in
    -            /// each scheduling round, all high priority channels are considered first, and then
    -            /// only a single low priority channel, before returning to the high priority
    -            /// channels.\n\n
    -            /// This only affects the order in which the DMA schedules channels. The DMA's bus
    -            /// priority is not changed. If the DMA is not saturated then a low priority channel
    -            /// will see no loss of throughput.
    -            HIGH_PRIORITY: u1,
    -            /// Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR
    -            /// advance by this amount (1/2/4 bytes) with each transfer.
    -            DATA_SIZE: u2,
    -            /// If 1, the read address increments with each transfer. If 0, each read is
    -            /// directed to the same, initial address.\n\n
    -            /// Generally this should be disabled for peripheral-to-memory transfers.
    -            INCR_READ: u1,
    -            /// If 1, the write address increments with each transfer. If 0, each write is
    -            /// directed to the same, initial address.\n\n
    -            /// Generally this should be disabled for memory-to-peripheral transfers.
    -            INCR_WRITE: u1,
    -            /// Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower
    -            /// n bits of the address will change. This wraps the address on a (1 << n) byte
    -            /// boundary, facilitating access to naturally-aligned ring buffers.\n\n
    -            /// Ring sizes between 2 and 32768 bytes are possible. This can apply to either read
    -            /// or write addresses, based on value of RING_SEL.
    -            RING_SIZE: u4,
    -            /// Select whether RING_SIZE applies to read or write addresses.\n
    -            /// If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write
    -            /// addresses are wrapped.
    -            RING_SEL: u1,
    -            /// When this channel completes, it will trigger the channel indicated by CHAIN_TO.
    -            /// Disable by setting CHAIN_TO = _(this channel)_.\n
    -            /// Reset value is equal to channel number (9).
    -            CHAIN_TO: u4,
    -            /// Select a Transfer Request signal.\n
    -            /// The channel uses the transfer request signal to pace its data transfer rate.
    -            /// Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request
    -            /// from the system).\n
    -            /// 0x0 to 0x3a -> select DREQ n as TREQ
    -            TREQ_SEL: u6,
    -            /// In QUIET mode, the channel does not generate IRQs at the end of every transfer
    -            /// block. Instead, an IRQ is raised when NULL is written to a trigger register,
    -            /// indicating the end of a control block chain.\n\n
    -            /// This reduces the number of interrupts to be serviced by the CPU when
    -            /// transferring a DMA chain of many small control blocks.
    -            IRQ_QUIET: u1,
    -            /// Apply byte-swap transformation to DMA data.\n
    -            /// For byte data, this has no effect. For halfword data, the two bytes of each
    -            /// halfword are swapped. For word data, the four bytes of each word are swapped to
    -            /// reverse order.
    -            BSWAP: u1,
    -            /// If 1, this channel's data transfers are visible to the sniff hardware, and each
    -            /// transfer will advance the state of the checksum. This only applies if the sniff
    -            /// hardware is enabled, and has this channel selected.\n\n
    -            /// This allows checksum to be enabled or disabled on a per-control- block basis.
    -            SNIFF_EN: u1,
    -            /// This flag goes high when the channel starts a new transfer sequence, and low
    -            /// when the last transfer of that sequence completes. Clearing EN while BUSY is
    -            /// high pauses the channel, and BUSY will stay high while paused.\n\n
    -            /// To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    -            BUSY: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            /// If 1, the channel received a write bus error. Write one to clear.\n
    -            /// WRITE_ADDR shows the approximate address where the bus error was encountered
    -            /// (will not to be earlier, or more than 5 transfers later)
    -            WRITE_ERROR: u1,
    -            /// If 1, the channel received a read bus error. Write one to clear.\n
    -            /// READ_ADDR shows the approximate address where the bus error was encountered
    -            /// (will not to be earlier, or more than 3 transfers later)
    -            READ_ERROR: u1,
    -            /// Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it
    -            /// encounters any bus error, and always raises its channel IRQ flag.
    -            AHB_ERROR: u1,
    -        }), base_address + 0x24c);
    -
    -        /// address: 0x50000250
    -        /// Alias for channel 9 CTRL register
    -        pub const CH9_AL1_CTRL = @intToPtr(*volatile u32, base_address + 0x250);
    -
    -        /// address: 0x50000254
    -        /// Alias for channel 9 READ_ADDR register
    -        pub const CH9_AL1_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x254);
    -
    -        /// address: 0x50000258
    -        /// Alias for channel 9 WRITE_ADDR register
    -        pub const CH9_AL1_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x258);
    -
    -        /// address: 0x5000025c
    -        /// Alias for channel 9 TRANS_COUNT register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH9_AL1_TRANS_COUNT_TRIG = @intToPtr(*volatile u32, base_address + 0x25c);
    -
    -        /// address: 0x50000260
    -        /// Alias for channel 9 CTRL register
    -        pub const CH9_AL2_CTRL = @intToPtr(*volatile u32, base_address + 0x260);
    -
    -        /// address: 0x50000264
    -        /// Alias for channel 9 TRANS_COUNT register
    -        pub const CH9_AL2_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x264);
    -
    -        /// address: 0x50000268
    -        /// Alias for channel 9 READ_ADDR register
    -        pub const CH9_AL2_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x268);
    -
    -        /// address: 0x5000026c
    -        /// Alias for channel 9 WRITE_ADDR register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH9_AL2_WRITE_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x26c);
    -
    -        /// address: 0x50000270
    -        /// Alias for channel 9 CTRL register
    -        pub const CH9_AL3_CTRL = @intToPtr(*volatile u32, base_address + 0x270);
    -
    -        /// address: 0x50000274
    -        /// Alias for channel 9 WRITE_ADDR register
    -        pub const CH9_AL3_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x274);
    -
    -        /// address: 0x50000278
    -        /// Alias for channel 9 TRANS_COUNT register
    -        pub const CH9_AL3_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x278);
    -
    -        /// address: 0x5000027c
    -        /// Alias for channel 9 READ_ADDR register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH9_AL3_READ_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x27c);
    -
    -        /// address: 0x50000280
    -        /// DMA Channel 10 Read Address pointer\n
    -        /// This register updates automatically each time a read completes. The current
    -        /// value is the next address to be read by this channel.
    -        pub const CH10_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x280);
    -
    -        /// address: 0x50000284
    -        /// DMA Channel 10 Write Address pointer\n
    -        /// This register updates automatically each time a write completes. The current
    -        /// value is the next address to be written by this channel.
    -        pub const CH10_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x284);
    -
    -        /// address: 0x50000288
    -        /// DMA Channel 10 Transfer Count\n
    -        /// Program the number of bus transfers a channel will perform before halting. Note
    -        /// that, if transfers are larger than one byte in size, this is not equal to the
    -        /// number of bytes transferred (see CTRL_DATA_SIZE).\n\n
    -        /// When the channel is active, reading this register shows the number of transfers
    -        /// remaining, updating automatically each time a write transfer completes.\n\n
    -        /// Writing this register sets the RELOAD value for the transfer counter. Each time
    -        /// this channel is triggered, the RELOAD value is copied into the live transfer
    -        /// counter. The channel can be started multiple times, and will perform the same
    -        /// number of transfers each time, as programmed by most recent write.\n\n
    -        /// The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a
    -        /// trigger, the written value is used immediately as the length of the new transfer
    -        /// sequence, as well as being written to RELOAD.
    -        pub const CH10_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x288);
    -
    -        /// address: 0x5000028c
    -        /// DMA Channel 10 Control and Status
    -        pub const CH10_CTRL_TRIG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// DMA Channel Enable.\n
    -            /// When 1, the channel will respond to triggering events, which will cause it to
    -            /// become BUSY and start transferring data. When 0, the channel will ignore
    -            /// triggers, stop issuing transfers, and pause the current transfer sequence (i.e.
    -            /// BUSY will remain high if already high)
    -            EN: u1,
    -            /// HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in
    -            /// each scheduling round, all high priority channels are considered first, and then
    -            /// only a single low priority channel, before returning to the high priority
    -            /// channels.\n\n
    -            /// This only affects the order in which the DMA schedules channels. The DMA's bus
    -            /// priority is not changed. If the DMA is not saturated then a low priority channel
    -            /// will see no loss of throughput.
    -            HIGH_PRIORITY: u1,
    -            /// Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR
    -            /// advance by this amount (1/2/4 bytes) with each transfer.
    -            DATA_SIZE: u2,
    -            /// If 1, the read address increments with each transfer. If 0, each read is
    -            /// directed to the same, initial address.\n\n
    -            /// Generally this should be disabled for peripheral-to-memory transfers.
    -            INCR_READ: u1,
    -            /// If 1, the write address increments with each transfer. If 0, each write is
    -            /// directed to the same, initial address.\n\n
    -            /// Generally this should be disabled for memory-to-peripheral transfers.
    -            INCR_WRITE: u1,
    -            /// Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower
    -            /// n bits of the address will change. This wraps the address on a (1 << n) byte
    -            /// boundary, facilitating access to naturally-aligned ring buffers.\n\n
    -            /// Ring sizes between 2 and 32768 bytes are possible. This can apply to either read
    -            /// or write addresses, based on value of RING_SEL.
    -            RING_SIZE: u4,
    -            /// Select whether RING_SIZE applies to read or write addresses.\n
    -            /// If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write
    -            /// addresses are wrapped.
    -            RING_SEL: u1,
    -            /// When this channel completes, it will trigger the channel indicated by CHAIN_TO.
    -            /// Disable by setting CHAIN_TO = _(this channel)_.\n
    -            /// Reset value is equal to channel number (10).
    -            CHAIN_TO: u4,
    -            /// Select a Transfer Request signal.\n
    -            /// The channel uses the transfer request signal to pace its data transfer rate.
    -            /// Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request
    -            /// from the system).\n
    -            /// 0x0 to 0x3a -> select DREQ n as TREQ
    -            TREQ_SEL: u6,
    -            /// In QUIET mode, the channel does not generate IRQs at the end of every transfer
    -            /// block. Instead, an IRQ is raised when NULL is written to a trigger register,
    -            /// indicating the end of a control block chain.\n\n
    -            /// This reduces the number of interrupts to be serviced by the CPU when
    -            /// transferring a DMA chain of many small control blocks.
    -            IRQ_QUIET: u1,
    -            /// Apply byte-swap transformation to DMA data.\n
    -            /// For byte data, this has no effect. For halfword data, the two bytes of each
    -            /// halfword are swapped. For word data, the four bytes of each word are swapped to
    -            /// reverse order.
    -            BSWAP: u1,
    -            /// If 1, this channel's data transfers are visible to the sniff hardware, and each
    -            /// transfer will advance the state of the checksum. This only applies if the sniff
    -            /// hardware is enabled, and has this channel selected.\n\n
    -            /// This allows checksum to be enabled or disabled on a per-control- block basis.
    -            SNIFF_EN: u1,
    -            /// This flag goes high when the channel starts a new transfer sequence, and low
    -            /// when the last transfer of that sequence completes. Clearing EN while BUSY is
    -            /// high pauses the channel, and BUSY will stay high while paused.\n\n
    -            /// To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    -            BUSY: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            /// If 1, the channel received a write bus error. Write one to clear.\n
    -            /// WRITE_ADDR shows the approximate address where the bus error was encountered
    -            /// (will not to be earlier, or more than 5 transfers later)
    -            WRITE_ERROR: u1,
    -            /// If 1, the channel received a read bus error. Write one to clear.\n
    -            /// READ_ADDR shows the approximate address where the bus error was encountered
    -            /// (will not to be earlier, or more than 3 transfers later)
    -            READ_ERROR: u1,
    -            /// Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it
    -            /// encounters any bus error, and always raises its channel IRQ flag.
    -            AHB_ERROR: u1,
    -        }), base_address + 0x28c);
    -
    -        /// address: 0x50000290
    -        /// Alias for channel 10 CTRL register
    -        pub const CH10_AL1_CTRL = @intToPtr(*volatile u32, base_address + 0x290);
    -
    -        /// address: 0x50000294
    -        /// Alias for channel 10 READ_ADDR register
    -        pub const CH10_AL1_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x294);
    -
    -        /// address: 0x50000298
    -        /// Alias for channel 10 WRITE_ADDR register
    -        pub const CH10_AL1_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x298);
    -
    -        /// address: 0x5000029c
    -        /// Alias for channel 10 TRANS_COUNT register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH10_AL1_TRANS_COUNT_TRIG = @intToPtr(*volatile u32, base_address + 0x29c);
    -
    -        /// address: 0x500002a0
    -        /// Alias for channel 10 CTRL register
    -        pub const CH10_AL2_CTRL = @intToPtr(*volatile u32, base_address + 0x2a0);
    -
    -        /// address: 0x500002a4
    -        /// Alias for channel 10 TRANS_COUNT register
    -        pub const CH10_AL2_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x2a4);
    -
    -        /// address: 0x500002a8
    -        /// Alias for channel 10 READ_ADDR register
    -        pub const CH10_AL2_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x2a8);
    -
    -        /// address: 0x500002ac
    -        /// Alias for channel 10 WRITE_ADDR register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH10_AL2_WRITE_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x2ac);
    -
    -        /// address: 0x500002b0
    -        /// Alias for channel 10 CTRL register
    -        pub const CH10_AL3_CTRL = @intToPtr(*volatile u32, base_address + 0x2b0);
    -
    -        /// address: 0x500002b4
    -        /// Alias for channel 10 WRITE_ADDR register
    -        pub const CH10_AL3_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x2b4);
    -
    -        /// address: 0x500002b8
    -        /// Alias for channel 10 TRANS_COUNT register
    -        pub const CH10_AL3_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x2b8);
    -
    -        /// address: 0x500002bc
    -        /// Alias for channel 10 READ_ADDR register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH10_AL3_READ_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x2bc);
    -
    -        /// address: 0x500002c0
    -        /// DMA Channel 11 Read Address pointer\n
    -        /// This register updates automatically each time a read completes. The current
    -        /// value is the next address to be read by this channel.
    -        pub const CH11_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x2c0);
    -
    -        /// address: 0x500002c4
    -        /// DMA Channel 11 Write Address pointer\n
    -        /// This register updates automatically each time a write completes. The current
    -        /// value is the next address to be written by this channel.
    -        pub const CH11_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x2c4);
    -
    -        /// address: 0x500002c8
    -        /// DMA Channel 11 Transfer Count\n
    -        /// Program the number of bus transfers a channel will perform before halting. Note
    -        /// that, if transfers are larger than one byte in size, this is not equal to the
    -        /// number of bytes transferred (see CTRL_DATA_SIZE).\n\n
    -        /// When the channel is active, reading this register shows the number of transfers
    -        /// remaining, updating automatically each time a write transfer completes.\n\n
    -        /// Writing this register sets the RELOAD value for the transfer counter. Each time
    -        /// this channel is triggered, the RELOAD value is copied into the live transfer
    -        /// counter. The channel can be started multiple times, and will perform the same
    -        /// number of transfers each time, as programmed by most recent write.\n\n
    -        /// The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a
    -        /// trigger, the written value is used immediately as the length of the new transfer
    -        /// sequence, as well as being written to RELOAD.
    -        pub const CH11_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x2c8);
    -
    -        /// address: 0x500002cc
    -        /// DMA Channel 11 Control and Status
    -        pub const CH11_CTRL_TRIG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// DMA Channel Enable.\n
    -            /// When 1, the channel will respond to triggering events, which will cause it to
    -            /// become BUSY and start transferring data. When 0, the channel will ignore
    -            /// triggers, stop issuing transfers, and pause the current transfer sequence (i.e.
    -            /// BUSY will remain high if already high)
    -            EN: u1,
    -            /// HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in
    -            /// each scheduling round, all high priority channels are considered first, and then
    -            /// only a single low priority channel, before returning to the high priority
    -            /// channels.\n\n
    -            /// This only affects the order in which the DMA schedules channels. The DMA's bus
    -            /// priority is not changed. If the DMA is not saturated then a low priority channel
    -            /// will see no loss of throughput.
    -            HIGH_PRIORITY: u1,
    -            /// Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR
    -            /// advance by this amount (1/2/4 bytes) with each transfer.
    -            DATA_SIZE: u2,
    -            /// If 1, the read address increments with each transfer. If 0, each read is
    -            /// directed to the same, initial address.\n\n
    -            /// Generally this should be disabled for peripheral-to-memory transfers.
    -            INCR_READ: u1,
    -            /// If 1, the write address increments with each transfer. If 0, each write is
    -            /// directed to the same, initial address.\n\n
    -            /// Generally this should be disabled for memory-to-peripheral transfers.
    -            INCR_WRITE: u1,
    -            /// Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower
    -            /// n bits of the address will change. This wraps the address on a (1 << n) byte
    -            /// boundary, facilitating access to naturally-aligned ring buffers.\n\n
    -            /// Ring sizes between 2 and 32768 bytes are possible. This can apply to either read
    -            /// or write addresses, based on value of RING_SEL.
    -            RING_SIZE: u4,
    -            /// Select whether RING_SIZE applies to read or write addresses.\n
    -            /// If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write
    -            /// addresses are wrapped.
    -            RING_SEL: u1,
    -            /// When this channel completes, it will trigger the channel indicated by CHAIN_TO.
    -            /// Disable by setting CHAIN_TO = _(this channel)_.\n
    -            /// Reset value is equal to channel number (11).
    -            CHAIN_TO: u4,
    -            /// Select a Transfer Request signal.\n
    -            /// The channel uses the transfer request signal to pace its data transfer rate.
    -            /// Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request
    -            /// from the system).\n
    -            /// 0x0 to 0x3a -> select DREQ n as TREQ
    -            TREQ_SEL: u6,
    -            /// In QUIET mode, the channel does not generate IRQs at the end of every transfer
    -            /// block. Instead, an IRQ is raised when NULL is written to a trigger register,
    -            /// indicating the end of a control block chain.\n\n
    -            /// This reduces the number of interrupts to be serviced by the CPU when
    -            /// transferring a DMA chain of many small control blocks.
    -            IRQ_QUIET: u1,
    -            /// Apply byte-swap transformation to DMA data.\n
    -            /// For byte data, this has no effect. For halfword data, the two bytes of each
    -            /// halfword are swapped. For word data, the four bytes of each word are swapped to
    -            /// reverse order.
    -            BSWAP: u1,
    -            /// If 1, this channel's data transfers are visible to the sniff hardware, and each
    -            /// transfer will advance the state of the checksum. This only applies if the sniff
    -            /// hardware is enabled, and has this channel selected.\n\n
    -            /// This allows checksum to be enabled or disabled on a per-control- block basis.
    -            SNIFF_EN: u1,
    -            /// This flag goes high when the channel starts a new transfer sequence, and low
    -            /// when the last transfer of that sequence completes. Clearing EN while BUSY is
    -            /// high pauses the channel, and BUSY will stay high while paused.\n\n
    -            /// To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    -            BUSY: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            /// If 1, the channel received a write bus error. Write one to clear.\n
    -            /// WRITE_ADDR shows the approximate address where the bus error was encountered
    -            /// (will not to be earlier, or more than 5 transfers later)
    -            WRITE_ERROR: u1,
    -            /// If 1, the channel received a read bus error. Write one to clear.\n
    -            /// READ_ADDR shows the approximate address where the bus error was encountered
    -            /// (will not to be earlier, or more than 3 transfers later)
    -            READ_ERROR: u1,
    -            /// Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it
    -            /// encounters any bus error, and always raises its channel IRQ flag.
    -            AHB_ERROR: u1,
    -        }), base_address + 0x2cc);
    -
    -        /// address: 0x500002d0
    -        /// Alias for channel 11 CTRL register
    -        pub const CH11_AL1_CTRL = @intToPtr(*volatile u32, base_address + 0x2d0);
    -
    -        /// address: 0x500002d4
    -        /// Alias for channel 11 READ_ADDR register
    -        pub const CH11_AL1_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x2d4);
    -
    -        /// address: 0x500002d8
    -        /// Alias for channel 11 WRITE_ADDR register
    -        pub const CH11_AL1_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x2d8);
    -
    -        /// address: 0x500002dc
    -        /// Alias for channel 11 TRANS_COUNT register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH11_AL1_TRANS_COUNT_TRIG = @intToPtr(*volatile u32, base_address + 0x2dc);
    -
    -        /// address: 0x500002e0
    -        /// Alias for channel 11 CTRL register
    -        pub const CH11_AL2_CTRL = @intToPtr(*volatile u32, base_address + 0x2e0);
    -
    -        /// address: 0x500002e4
    -        /// Alias for channel 11 TRANS_COUNT register
    -        pub const CH11_AL2_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x2e4);
    -
    -        /// address: 0x500002e8
    -        /// Alias for channel 11 READ_ADDR register
    -        pub const CH11_AL2_READ_ADDR = @intToPtr(*volatile u32, base_address + 0x2e8);
    -
    -        /// address: 0x500002ec
    -        /// Alias for channel 11 WRITE_ADDR register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH11_AL2_WRITE_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x2ec);
    -
    -        /// address: 0x500002f0
    -        /// Alias for channel 11 CTRL register
    -        pub const CH11_AL3_CTRL = @intToPtr(*volatile u32, base_address + 0x2f0);
    -
    -        /// address: 0x500002f4
    -        /// Alias for channel 11 WRITE_ADDR register
    -        pub const CH11_AL3_WRITE_ADDR = @intToPtr(*volatile u32, base_address + 0x2f4);
    -
    -        /// address: 0x500002f8
    -        /// Alias for channel 11 TRANS_COUNT register
    -        pub const CH11_AL3_TRANS_COUNT = @intToPtr(*volatile u32, base_address + 0x2f8);
    -
    -        /// address: 0x500002fc
    -        /// Alias for channel 11 READ_ADDR register\n
    -        /// This is a trigger register (0xc). Writing a nonzero value will\n
    -        /// reload the channel counter and start the channel.
    -        pub const CH11_AL3_READ_ADDR_TRIG = @intToPtr(*volatile u32, base_address + 0x2fc);
    -
    -        /// address: 0x50000400
    -        /// Interrupt Status (raw)
    -        pub const INTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x400);
    -
    -        /// address: 0x50000404
    -        /// Interrupt Enables for IRQ 0
    -        pub const INTE0 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x404);
    -
    -        /// address: 0x50000408
    -        /// Force Interrupts
    -        pub const INTF0 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x408);
    -
    -        /// address: 0x5000040c
    -        /// Interrupt Status for IRQ 0
    -        pub const INTS0 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x40c);
    -
    -        /// address: 0x50000414
    -        /// Interrupt Enables for IRQ 1
    -        pub const INTE1 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x414);
    -
    -        /// address: 0x50000418
    -        /// Force Interrupts for IRQ 1
    -        pub const INTF1 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x418);
    -
    -        /// address: 0x5000041c
    -        /// Interrupt Status (masked) for IRQ 1
    -        pub const INTS1 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x41c);
    -
    -        /// address: 0x50000420
    -        /// Pacing (X/Y) Fractional Timer\n
    -        /// The pacing timer produces TREQ assertions at a rate set by ((X/Y) * sys_clk).
    -        /// This equation is evaluated every sys_clk cycles and therefore can only generate
    -        /// TREQs at a rate of 1 per sys_clk (i.e. permanent TREQ) or less.
    -        pub const TIMER0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Pacing Timer Divisor. Specifies the Y value for the (X/Y) fractional timer.
    -            Y: u16,
    -            /// Pacing Timer Dividend. Specifies the X value for the (X/Y) fractional timer.
    -            X: u16,
    -        }), base_address + 0x420);
    -
    -        /// address: 0x50000424
    -        /// Pacing (X/Y) Fractional Timer\n
    -        /// The pacing timer produces TREQ assertions at a rate set by ((X/Y) * sys_clk).
    -        /// This equation is evaluated every sys_clk cycles and therefore can only generate
    -        /// TREQs at a rate of 1 per sys_clk (i.e. permanent TREQ) or less.
    -        pub const TIMER1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Pacing Timer Divisor. Specifies the Y value for the (X/Y) fractional timer.
    -            Y: u16,
    -            /// Pacing Timer Dividend. Specifies the X value for the (X/Y) fractional timer.
    -            X: u16,
    -        }), base_address + 0x424);
    -
    -        /// address: 0x50000428
    -        /// Pacing (X/Y) Fractional Timer\n
    -        /// The pacing timer produces TREQ assertions at a rate set by ((X/Y) * sys_clk).
    -        /// This equation is evaluated every sys_clk cycles and therefore can only generate
    -        /// TREQs at a rate of 1 per sys_clk (i.e. permanent TREQ) or less.
    -        pub const TIMER2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Pacing Timer Divisor. Specifies the Y value for the (X/Y) fractional timer.
    -            Y: u16,
    -            /// Pacing Timer Dividend. Specifies the X value for the (X/Y) fractional timer.
    -            X: u16,
    -        }), base_address + 0x428);
    -
    -        /// address: 0x5000042c
    -        /// Pacing (X/Y) Fractional Timer\n
    -        /// The pacing timer produces TREQ assertions at a rate set by ((X/Y) * sys_clk).
    -        /// This equation is evaluated every sys_clk cycles and therefore can only generate
    -        /// TREQs at a rate of 1 per sys_clk (i.e. permanent TREQ) or less.
    -        pub const TIMER3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Pacing Timer Divisor. Specifies the Y value for the (X/Y) fractional timer.
    -            Y: u16,
    -            /// Pacing Timer Dividend. Specifies the X value for the (X/Y) fractional timer.
    -            X: u16,
    -        }), base_address + 0x42c);
    -
    -        /// address: 0x50000430
    -        /// Trigger one or more channels simultaneously
    -        pub const MULTI_CHAN_TRIGGER = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x430);
    -
    -        /// address: 0x50000434
    -        /// Sniffer Control
    -        pub const SNIFF_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Enable sniffer
    -            EN: u1,
    -            /// DMA channel for Sniffer to observe
    -            DMACH: u4,
    -            CALC: u4,
    -            /// Locally perform a byte reverse on the sniffed data, before feeding into
    -            /// checksum.\n\n
    -            /// Note that the sniff hardware is downstream of the DMA channel byteswap performed
    -            /// in the read master: if channel CTRL_BSWAP and SNIFF_CTRL_BSWAP are both enabled,
    -            /// their effects cancel from the sniffer's point of view.
    -            BSWAP: u1,
    -            /// If set, the result appears bit-reversed when read. This does not affect the way
    -            /// the checksum is calculated; the result is transformed on-the-fly between the
    -            /// result register and the bus.
    -            OUT_REV: u1,
    -            /// If set, the result appears inverted (bitwise complement) when read. This does
    -            /// not affect the way the checksum is calculated; the result is transformed
    -            /// on-the-fly between the result register and the bus.
    -            OUT_INV: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x434);
    -
    -        /// address: 0x50000438
    -        /// Data accumulator for sniff hardware\n
    -        /// Write an initial seed value here before starting a DMA transfer on the channel
    -        /// indicated by SNIFF_CTRL_DMACH. The hardware will update this register each time
    -        /// it observes a read from the indicated channel. Once the channel completes, the
    -        /// final result can be read from this register.
    -        pub const SNIFF_DATA = @intToPtr(*volatile u32, base_address + 0x438);
    -
    -        /// address: 0x50000440
    -        /// Debug RAF, WAF, TDF levels
    -        pub const FIFO_LEVELS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Current Transfer-Data-FIFO fill level
    -            TDF_LVL: u8,
    -            /// Current Write-Address-FIFO fill level
    -            WAF_LVL: u8,
    -            /// Current Read-Address-FIFO fill level
    -            RAF_LVL: u8,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -        }), base_address + 0x440);
    -
    -        /// address: 0x50000444
    -        /// Abort an in-progress transfer sequence on one or more channels
    -        pub const CHAN_ABORT = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x444);
    -
    -        /// address: 0x50000448
    -        /// The number of channels this DMA instance is equipped with. This DMA supports up
    -        /// to 16 hardware channels, but can be configured with as few as one, to minimise
    -        /// silicon area.
    -        pub const N_CHANNELS = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x448);
    -
    -        /// address: 0x50000800
    -        /// Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can
    -        /// perform on the peripheral without overflow/underflow. Write any value: clears
    -        /// the counter, and cause channel to re-initiate DREQ handshake.
    -        pub const CH0_DBG_CTDREQ = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x800);
    -
    -        /// address: 0x50000804
    -        /// Read to get channel TRANS_COUNT reload value, i.e. the length of the next
    -        /// transfer
    -        pub const CH0_DBG_TCR = @intToPtr(*volatile u32, base_address + 0x804);
    -
    -        /// address: 0x50000840
    -        /// Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can
    -        /// perform on the peripheral without overflow/underflow. Write any value: clears
    -        /// the counter, and cause channel to re-initiate DREQ handshake.
    -        pub const CH1_DBG_CTDREQ = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x840);
    -
    -        /// address: 0x50000844
    -        /// Read to get channel TRANS_COUNT reload value, i.e. the length of the next
    -        /// transfer
    -        pub const CH1_DBG_TCR = @intToPtr(*volatile u32, base_address + 0x844);
    -
    -        /// address: 0x50000880
    -        /// Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can
    -        /// perform on the peripheral without overflow/underflow. Write any value: clears
    -        /// the counter, and cause channel to re-initiate DREQ handshake.
    -        pub const CH2_DBG_CTDREQ = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x880);
    -
    -        /// address: 0x50000884
    -        /// Read to get channel TRANS_COUNT reload value, i.e. the length of the next
    -        /// transfer
    -        pub const CH2_DBG_TCR = @intToPtr(*volatile u32, base_address + 0x884);
    -
    -        /// address: 0x500008c0
    -        /// Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can
    -        /// perform on the peripheral without overflow/underflow. Write any value: clears
    -        /// the counter, and cause channel to re-initiate DREQ handshake.
    -        pub const CH3_DBG_CTDREQ = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x8c0);
    -
    -        /// address: 0x500008c4
    -        /// Read to get channel TRANS_COUNT reload value, i.e. the length of the next
    -        /// transfer
    -        pub const CH3_DBG_TCR = @intToPtr(*volatile u32, base_address + 0x8c4);
    -
    -        /// address: 0x50000900
    -        /// Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can
    -        /// perform on the peripheral without overflow/underflow. Write any value: clears
    -        /// the counter, and cause channel to re-initiate DREQ handshake.
    -        pub const CH4_DBG_CTDREQ = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x900);
    -
    -        /// address: 0x50000904
    -        /// Read to get channel TRANS_COUNT reload value, i.e. the length of the next
    -        /// transfer
    -        pub const CH4_DBG_TCR = @intToPtr(*volatile u32, base_address + 0x904);
    -
    -        /// address: 0x50000940
    -        /// Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can
    -        /// perform on the peripheral without overflow/underflow. Write any value: clears
    -        /// the counter, and cause channel to re-initiate DREQ handshake.
    -        pub const CH5_DBG_CTDREQ = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x940);
    -
    -        /// address: 0x50000944
    -        /// Read to get channel TRANS_COUNT reload value, i.e. the length of the next
    -        /// transfer
    -        pub const CH5_DBG_TCR = @intToPtr(*volatile u32, base_address + 0x944);
    -
    -        /// address: 0x50000980
    -        /// Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can
    -        /// perform on the peripheral without overflow/underflow. Write any value: clears
    -        /// the counter, and cause channel to re-initiate DREQ handshake.
    -        pub const CH6_DBG_CTDREQ = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x980);
    -
    -        /// address: 0x50000984
    -        /// Read to get channel TRANS_COUNT reload value, i.e. the length of the next
    -        /// transfer
    -        pub const CH6_DBG_TCR = @intToPtr(*volatile u32, base_address + 0x984);
    -
    -        /// address: 0x500009c0
    -        /// Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can
    -        /// perform on the peripheral without overflow/underflow. Write any value: clears
    -        /// the counter, and cause channel to re-initiate DREQ handshake.
    -        pub const CH7_DBG_CTDREQ = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x9c0);
    -
    -        /// address: 0x500009c4
    -        /// Read to get channel TRANS_COUNT reload value, i.e. the length of the next
    -        /// transfer
    -        pub const CH7_DBG_TCR = @intToPtr(*volatile u32, base_address + 0x9c4);
    -
    -        /// address: 0x50000a00
    -        /// Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can
    -        /// perform on the peripheral without overflow/underflow. Write any value: clears
    -        /// the counter, and cause channel to re-initiate DREQ handshake.
    -        pub const CH8_DBG_CTDREQ = @intToPtr(*volatile MmioInt(32, u6), base_address + 0xa00);
    -
    -        /// address: 0x50000a04
    -        /// Read to get channel TRANS_COUNT reload value, i.e. the length of the next
    -        /// transfer
    -        pub const CH8_DBG_TCR = @intToPtr(*volatile u32, base_address + 0xa04);
    -
    -        /// address: 0x50000a40
    -        /// Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can
    -        /// perform on the peripheral without overflow/underflow. Write any value: clears
    -        /// the counter, and cause channel to re-initiate DREQ handshake.
    -        pub const CH9_DBG_CTDREQ = @intToPtr(*volatile MmioInt(32, u6), base_address + 0xa40);
    -
    -        /// address: 0x50000a44
    -        /// Read to get channel TRANS_COUNT reload value, i.e. the length of the next
    -        /// transfer
    -        pub const CH9_DBG_TCR = @intToPtr(*volatile u32, base_address + 0xa44);
    -
    -        /// address: 0x50000a80
    -        /// Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can
    -        /// perform on the peripheral without overflow/underflow. Write any value: clears
    -        /// the counter, and cause channel to re-initiate DREQ handshake.
    -        pub const CH10_DBG_CTDREQ = @intToPtr(*volatile MmioInt(32, u6), base_address + 0xa80);
    -
    -        /// address: 0x50000a84
    -        /// Read to get channel TRANS_COUNT reload value, i.e. the length of the next
    -        /// transfer
    -        pub const CH10_DBG_TCR = @intToPtr(*volatile u32, base_address + 0xa84);
    -
    -        /// address: 0x50000ac0
    -        /// Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can
    -        /// perform on the peripheral without overflow/underflow. Write any value: clears
    -        /// the counter, and cause channel to re-initiate DREQ handshake.
    -        pub const CH11_DBG_CTDREQ = @intToPtr(*volatile MmioInt(32, u6), base_address + 0xac0);
    -
    -        /// address: 0x50000ac4
    -        /// Read to get channel TRANS_COUNT reload value, i.e. the length of the next
    -        /// transfer
    -        pub const CH11_DBG_TCR = @intToPtr(*volatile u32, base_address + 0xac4);
    -    };
    -
    -    /// DPRAM layout for USB device.
    -    pub const USBCTRL_DPRAM = struct {
    -        pub const base_address = 0x50100000;
    -        pub const version = "1";
    -
    -        /// address: 0x50100000
    -        /// Bytes 0-3 of the SETUP packet from the host.
    -        pub const SETUP_PACKET_LOW = @intToPtr(*volatile Mmio(32, packed struct {
    -            BMREQUESTTYPE: u8,
    -            BREQUEST: u8,
    -            WVALUE: u16,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x50100004
    -        /// Bytes 4-7 of the setup packet from the host.
    -        pub const SETUP_PACKET_HIGH = @intToPtr(*volatile Mmio(32, packed struct {
    -            WINDEX: u16,
    -            WLENGTH: u16,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x50100008
    -        pub const EP1_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x5010000c
    -        pub const EP1_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x50100010
    -        pub const EP2_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x50100014
    -        pub const EP2_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x50100018
    -        pub const EP3_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x5010001c
    -        pub const EP3_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x50100020
    -        pub const EP4_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x50100024
    -        pub const EP4_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x50100028
    -        pub const EP5_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x5010002c
    -        pub const EP5_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x50100030
    -        pub const EP6_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x50100034
    -        pub const EP6_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x50100038
    -        pub const EP7_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x5010003c
    -        pub const EP7_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x50100040
    -        pub const EP8_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x50100044
    -        pub const EP8_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x50100048
    -        pub const EP9_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x5010004c
    -        pub const EP9_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x4c);
    -
    -        /// address: 0x50100050
    -        pub const EP10_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x50100054
    -        pub const EP10_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x50100058
    -        pub const EP11_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x5010005c
    -        pub const EP11_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x50100060
    -        pub const EP12_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x50100064
    -        pub const EP12_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x50100068
    -        pub const EP13_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x68);
    -
    -        /// address: 0x5010006c
    -        pub const EP13_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x6c);
    -
    -        /// address: 0x50100070
    -        pub const EP14_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x70);
    -
    -        /// address: 0x50100074
    -        pub const EP14_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x74);
    -
    -        /// address: 0x50100078
    -        pub const EP15_IN_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x78);
    -
    -        /// address: 0x5010007c
    -        pub const EP15_OUT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to
    -            /// the start of the DPRAM.
    -            BUFFER_ADDRESS: u16,
    -            /// Trigger an interrupt if a NAK is sent. Intended for debug only.
    -            INTERRUPT_ON_NAK: u1,
    -            /// Trigger an interrupt if a STALL is sent. Intended for debug only.
    -            INTERRUPT_ON_STALL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            ENDPOINT_TYPE: u2,
    -            /// Trigger an interrupt each time both buffers are done. Only valid in double
    -            /// buffered mode.
    -            INTERRUPT_PER_DOUBLE_BUFF: u1,
    -            /// Trigger an interrupt each time a buffer is done.
    -            INTERRUPT_PER_BUFF: u1,
    -            /// This endpoint is double buffered.
    -            DOUBLE_BUFFERED: u1,
    -            /// Enable this endpoint. The device will not reply to any packets for this endpoint
    -            /// if this bit is not set.
    -            ENABLE: u1,
    -        }), base_address + 0x7c);
    -
    -        /// address: 0x50100080
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP0_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0x80);
    -
    -        /// address: 0x50100084
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP0_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0x84);
    -
    -        /// address: 0x50100088
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP1_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0x88);
    -
    -        /// address: 0x5010008c
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP1_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0x8c);
    -
    -        /// address: 0x50100090
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP2_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0x90);
    -
    -        /// address: 0x50100094
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP2_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0x94);
    -
    -        /// address: 0x50100098
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP3_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0x98);
    -
    -        /// address: 0x5010009c
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP3_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0x9c);
    -
    -        /// address: 0x501000a0
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP4_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0xa0);
    -
    -        /// address: 0x501000a4
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP4_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0xa4);
    -
    -        /// address: 0x501000a8
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP5_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0xa8);
    -
    -        /// address: 0x501000ac
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP5_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0xac);
    -
    -        /// address: 0x501000b0
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP6_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0xb0);
    -
    -        /// address: 0x501000b4
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP6_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0xb4);
    -
    -        /// address: 0x501000b8
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP7_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0xb8);
    -
    -        /// address: 0x501000bc
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP7_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0xbc);
    -
    -        /// address: 0x501000c0
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP8_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0xc0);
    -
    -        /// address: 0x501000c4
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP8_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0xc4);
    -
    -        /// address: 0x501000c8
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP9_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0xc8);
    -
    -        /// address: 0x501000cc
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP9_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0xcc);
    -
    -        /// address: 0x501000d0
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP10_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0xd0);
    -
    -        /// address: 0x501000d4
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP10_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0xd4);
    -
    -        /// address: 0x501000d8
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP11_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0xd8);
    -
    -        /// address: 0x501000dc
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP11_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0xdc);
    -
    -        /// address: 0x501000e0
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP12_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0xe0);
    -
    -        /// address: 0x501000e4
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP12_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0xe4);
    -
    -        /// address: 0x501000e8
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP13_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0xe8);
    -
    -        /// address: 0x501000ec
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP13_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0xec);
    -
    -        /// address: 0x501000f0
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP14_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0xf0);
    -
    -        /// address: 0x501000f4
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP14_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0xf4);
    -
    -        /// address: 0x501000f8
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP15_IN_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0xf8);
    -
    -        /// address: 0x501000fc
    -        /// Buffer control for both buffers of an endpoint. Fields ending in a _1 are for
    -        /// buffer 1.\n
    -        /// Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the
    -        /// endpoint is in double buffered mode.
    -        pub const EP15_OUT_BUFFER_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length of the data in buffer 0.
    -            LENGTH_0: u10,
    -            /// Buffer 0 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_0: u1,
    -            /// Reply with a stall (valid for both buffers).
    -            STALL: u1,
    -            /// Reset the buffer selector to buffer 0.
    -            RESET: u1,
    -            /// The data pid of buffer 0.
    -            PID_0: u1,
    -            /// Buffer 0 is the last buffer of the transfer.
    -            LAST_0: u1,
    -            /// Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_0: u1,
    -            /// The length of the data in buffer 1.
    -            LENGTH_1: u10,
    -            /// Buffer 1 is available. This bit is set to indicate the buffer can be used by the
    -            /// controller. The controller clears the available bit when writing the status
    -            /// back.
    -            AVAILABLE_1: u1,
    -            /// The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only
    -            /// valid in double buffered mode for an Isochronous endpoint.\n
    -            /// For a non Isochronous endpoint the offset is always 64 bytes.
    -            DOUBLE_BUFFER_ISO_OFFSET: u2,
    -            /// The data pid of buffer 1.
    -            PID_1: u1,
    -            /// Buffer 1 is the last buffer of the transfer.
    -            LAST_1: u1,
    -            /// Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate
    -            /// the data is valid. For an OUT transfer (RX from the host) this bit should be
    -            /// left as a 0. The host will set it when it has filled the buffer with data.
    -            FULL_1: u1,
    -        }), base_address + 0xfc);
    -    };
    -
    -    /// USB FS/LS controller device registers
    -    pub const USBCTRL_REGS = struct {
    -        pub const base_address = 0x50110000;
    -        pub const version = "1";
    -
    -        /// address: 0x50110000
    -        /// Device address and endpoint control
    -        pub const ADDR_ENDP = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// In device mode, the address that the device should respond to. Set in response
    -            /// to a SET_ADDR setup packet from the host. In host mode set to the address of the
    -            /// device to communicate with.
    -            ADDRESS: u7,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            /// Device endpoint to send data to. Only valid for HOST mode.
    -            ENDPOINT: u4,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x50110004
    -        /// Interrupt endpoint 1. Only valid for HOST mode.
    -        pub const ADDR_ENDP1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Device address
    -            ADDRESS: u7,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            /// Endpoint number of the interrupt endpoint
    -            ENDPOINT: u4,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            /// Direction of the interrupt endpoint. In=0, Out=1
    -            INTEP_DIR: u1,
    -            /// Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -            INTEP_PREAMBLE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x50110008
    -        /// Interrupt endpoint 2. Only valid for HOST mode.
    -        pub const ADDR_ENDP2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Device address
    -            ADDRESS: u7,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            /// Endpoint number of the interrupt endpoint
    -            ENDPOINT: u4,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            /// Direction of the interrupt endpoint. In=0, Out=1
    -            INTEP_DIR: u1,
    -            /// Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -            INTEP_PREAMBLE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x5011000c
    -        /// Interrupt endpoint 3. Only valid for HOST mode.
    -        pub const ADDR_ENDP3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Device address
    -            ADDRESS: u7,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            /// Endpoint number of the interrupt endpoint
    -            ENDPOINT: u4,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            /// Direction of the interrupt endpoint. In=0, Out=1
    -            INTEP_DIR: u1,
    -            /// Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -            INTEP_PREAMBLE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x50110010
    -        /// Interrupt endpoint 4. Only valid for HOST mode.
    -        pub const ADDR_ENDP4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Device address
    -            ADDRESS: u7,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            /// Endpoint number of the interrupt endpoint
    -            ENDPOINT: u4,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            /// Direction of the interrupt endpoint. In=0, Out=1
    -            INTEP_DIR: u1,
    -            /// Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -            INTEP_PREAMBLE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x50110014
    -        /// Interrupt endpoint 5. Only valid for HOST mode.
    -        pub const ADDR_ENDP5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Device address
    -            ADDRESS: u7,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            /// Endpoint number of the interrupt endpoint
    -            ENDPOINT: u4,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            /// Direction of the interrupt endpoint. In=0, Out=1
    -            INTEP_DIR: u1,
    -            /// Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -            INTEP_PREAMBLE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x50110018
    -        /// Interrupt endpoint 6. Only valid for HOST mode.
    -        pub const ADDR_ENDP6 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Device address
    -            ADDRESS: u7,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            /// Endpoint number of the interrupt endpoint
    -            ENDPOINT: u4,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            /// Direction of the interrupt endpoint. In=0, Out=1
    -            INTEP_DIR: u1,
    -            /// Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -            INTEP_PREAMBLE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x5011001c
    -        /// Interrupt endpoint 7. Only valid for HOST mode.
    -        pub const ADDR_ENDP7 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Device address
    -            ADDRESS: u7,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            /// Endpoint number of the interrupt endpoint
    -            ENDPOINT: u4,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            /// Direction of the interrupt endpoint. In=0, Out=1
    -            INTEP_DIR: u1,
    -            /// Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -            INTEP_PREAMBLE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x50110020
    -        /// Interrupt endpoint 8. Only valid for HOST mode.
    -        pub const ADDR_ENDP8 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Device address
    -            ADDRESS: u7,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            /// Endpoint number of the interrupt endpoint
    -            ENDPOINT: u4,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            /// Direction of the interrupt endpoint. In=0, Out=1
    -            INTEP_DIR: u1,
    -            /// Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -            INTEP_PREAMBLE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x50110024
    -        /// Interrupt endpoint 9. Only valid for HOST mode.
    -        pub const ADDR_ENDP9 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Device address
    -            ADDRESS: u7,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            /// Endpoint number of the interrupt endpoint
    -            ENDPOINT: u4,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            /// Direction of the interrupt endpoint. In=0, Out=1
    -            INTEP_DIR: u1,
    -            /// Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -            INTEP_PREAMBLE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x50110028
    -        /// Interrupt endpoint 10. Only valid for HOST mode.
    -        pub const ADDR_ENDP10 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Device address
    -            ADDRESS: u7,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            /// Endpoint number of the interrupt endpoint
    -            ENDPOINT: u4,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            /// Direction of the interrupt endpoint. In=0, Out=1
    -            INTEP_DIR: u1,
    -            /// Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -            INTEP_PREAMBLE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x5011002c
    -        /// Interrupt endpoint 11. Only valid for HOST mode.
    -        pub const ADDR_ENDP11 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Device address
    -            ADDRESS: u7,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            /// Endpoint number of the interrupt endpoint
    -            ENDPOINT: u4,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            /// Direction of the interrupt endpoint. In=0, Out=1
    -            INTEP_DIR: u1,
    -            /// Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -            INTEP_PREAMBLE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x50110030
    -        /// Interrupt endpoint 12. Only valid for HOST mode.
    -        pub const ADDR_ENDP12 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Device address
    -            ADDRESS: u7,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            /// Endpoint number of the interrupt endpoint
    -            ENDPOINT: u4,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            /// Direction of the interrupt endpoint. In=0, Out=1
    -            INTEP_DIR: u1,
    -            /// Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -            INTEP_PREAMBLE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x50110034
    -        /// Interrupt endpoint 13. Only valid for HOST mode.
    -        pub const ADDR_ENDP13 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Device address
    -            ADDRESS: u7,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            /// Endpoint number of the interrupt endpoint
    -            ENDPOINT: u4,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            /// Direction of the interrupt endpoint. In=0, Out=1
    -            INTEP_DIR: u1,
    -            /// Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -            INTEP_PREAMBLE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x50110038
    -        /// Interrupt endpoint 14. Only valid for HOST mode.
    -        pub const ADDR_ENDP14 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Device address
    -            ADDRESS: u7,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            /// Endpoint number of the interrupt endpoint
    -            ENDPOINT: u4,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            /// Direction of the interrupt endpoint. In=0, Out=1
    -            INTEP_DIR: u1,
    -            /// Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -            INTEP_PREAMBLE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x5011003c
    -        /// Interrupt endpoint 15. Only valid for HOST mode.
    -        pub const ADDR_ENDP15 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Device address
    -            ADDRESS: u7,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            /// Endpoint number of the interrupt endpoint
    -            ENDPOINT: u4,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            /// Direction of the interrupt endpoint. In=0, Out=1
    -            INTEP_DIR: u1,
    -            /// Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -            INTEP_PREAMBLE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x50110040
    -        /// Main control register
    -        pub const MAIN_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Enable controller
    -            CONTROLLER_EN: u1,
    -            /// Device mode = 0, Host mode = 1
    -            HOST_NDEVICE: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            reserved18: u1 = 0,
    -            reserved19: u1 = 0,
    -            reserved20: u1 = 0,
    -            reserved21: u1 = 0,
    -            reserved22: u1 = 0,
    -            reserved23: u1 = 0,
    -            reserved24: u1 = 0,
    -            reserved25: u1 = 0,
    -            reserved26: u1 = 0,
    -            reserved27: u1 = 0,
    -            reserved28: u1 = 0,
    -            /// Reduced timings for simulation
    -            SIM_TIMING: u1,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x50110044
    -        /// Set the SOF (Start of Frame) frame number in the host controller. The SOF packet
    -        /// is sent every 1ms and the host will increment the frame number by 1 each time.
    -        pub const SOF_WR = @intToPtr(*volatile Mmio(32, packed struct {
    -            COUNT: u11,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x50110048
    -        /// Read the last SOF (Start of Frame) frame number seen. In device mode the last
    -        /// SOF received from the host. In host mode the last SOF sent by the host.
    -        pub const SOF_RD = @intToPtr(*volatile Mmio(32, packed struct {
    -            COUNT: u11,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x5011004c
    -        /// SIE control register
    -        pub const SIE_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Host: Start transaction
    -            START_TRANS: u1,
    -            /// Host: Send Setup packet
    -            SEND_SETUP: u1,
    -            /// Host: Send transaction (OUT from host)
    -            SEND_DATA: u1,
    -            /// Host: Receive transaction (IN to host)
    -            RECEIVE_DATA: u1,
    -            /// Host: Stop transaction
    -            STOP_TRANS: u1,
    -            reserved0: u1 = 0,
    -            /// Host: Preable enable for LS device on FS hub
    -            PREAMBLE_EN: u1,
    -            reserved1: u1 = 0,
    -            /// Host: Delay packet(s) until after SOF
    -            SOF_SYNC: u1,
    -            /// Host: Enable SOF generation (for full speed bus)
    -            SOF_EN: u1,
    -            /// Host: Enable keep alive packet (for low speed bus)
    -            KEEP_ALIVE_EN: u1,
    -            /// Host: Enable VBUS
    -            VBUS_EN: u1,
    -            /// Device: Remote wakeup. Device can initiate its own resume after suspend.
    -            RESUME: u1,
    -            /// Host: Reset bus
    -            RESET_BUS: u1,
    -            reserved2: u1 = 0,
    -            /// Host: Enable pull down resistors
    -            PULLDOWN_EN: u1,
    -            /// Device: Enable pull up resistor
    -            PULLUP_EN: u1,
    -            /// Device: Pull-up strength (0=1K2, 1=2k3)
    -            RPU_OPT: u1,
    -            /// Power down bus transceiver
    -            TRANSCEIVER_PD: u1,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// Direct control of DM
    -            DIRECT_DM: u1,
    -            /// Direct control of DP
    -            DIRECT_DP: u1,
    -            /// Direct bus drive enable
    -            DIRECT_EN: u1,
    -            /// Device: Set bit in EP_STATUS_STALL_NAK when EP0 sends a NAK
    -            EP0_INT_NAK: u1,
    -            /// Device: Set bit in BUFF_STATUS for every 2 buffers completed on EP0
    -            EP0_INT_2BUF: u1,
    -            /// Device: Set bit in BUFF_STATUS for every buffer completed on EP0
    -            EP0_INT_1BUF: u1,
    -            /// Device: EP0 single buffered = 0, double buffered = 1
    -            EP0_DOUBLE_BUF: u1,
    -            /// Device: Set bit in EP_STATUS_STALL_NAK when EP0 sends a STALL
    -            EP0_INT_STALL: u1,
    -        }), base_address + 0x4c);
    -
    -        /// address: 0x50110050
    -        /// SIE status register
    -        pub const SIE_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Device: VBUS Detected
    -            VBUS_DETECTED: u1,
    -            reserved0: u1 = 0,
    -            /// USB bus line state
    -            LINE_STATE: u2,
    -            /// Bus in suspended state. Valid for device and host. Host and device will go into
    -            /// suspend if neither Keep Alive / SOF frames are enabled.
    -            SUSPENDED: u1,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            /// Host: device speed. Disconnected = 00, LS = 01, FS = 10
    -            SPEED: u2,
    -            /// VBUS over current detected
    -            VBUS_OVER_CURR: u1,
    -            /// Host: Device has initiated a remote resume. Device: host has initiated a resume.
    -            RESUME: u1,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// Device: connected
    -            CONNECTED: u1,
    -            /// Device: Setup packet received
    -            SETUP_REC: u1,
    -            /// Transaction complete.\n\n
    -            /// Raised by device if:\n\n
    -            /// * An IN or OUT packet is sent with the `LAST_BUFF` bit set in the buffer control
    -            /// register\n\n
    -            /// Raised by host if:\n\n
    -            /// * A setup packet is sent when no data in or data out transaction follows * An IN
    -            /// packet is received and the `LAST_BUFF` bit is set in the buffer control register
    -            /// * An IN packet is received with zero length * An OUT packet is sent and the
    -            /// `LAST_BUFF` bit is set
    -            TRANS_COMPLETE: u1,
    -            /// Device: bus reset received
    -            BUS_RESET: u1,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            /// CRC Error. Raised by the Serial RX engine.
    -            CRC_ERROR: u1,
    -            /// Bit Stuff Error. Raised by the Serial RX engine.
    -            BIT_STUFF_ERROR: u1,
    -            /// RX overflow is raised by the Serial RX engine if the incoming data is too fast.
    -            RX_OVERFLOW: u1,
    -            /// RX timeout is raised by both the host and device if an ACK is not received in
    -            /// the maximum time specified by the USB spec.
    -            RX_TIMEOUT: u1,
    -            /// Host: NAK received
    -            NAK_REC: u1,
    -            /// Host: STALL received
    -            STALL_REC: u1,
    -            /// ACK received. Raised by both host and device.
    -            ACK_REC: u1,
    -            /// Data Sequence Error.\n\n
    -            /// The device can raise a sequence error in the following conditions:\n\n
    -            /// * A SETUP packet is received followed by a DATA1 packet (data phase should
    -            /// always be DATA0) * An OUT packet is received from the host but doesn't match the
    -            /// data pid in the buffer control register read from DPSRAM\n\n
    -            /// The host can raise a data sequence error in the following conditions:\n\n
    -            /// * An IN packet from the device has the wrong data PID
    -            DATA_SEQ_ERROR: u1,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x50110054
    -        /// interrupt endpoint control register
    -        pub const INT_EP_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            /// Host: Enable interrupt endpoint 1 -> 15
    -            INT_EP_ACTIVE: u15,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x50110058
    -        /// Buffer status register. A bit set here indicates that a buffer has completed on
    -        /// the endpoint (if the buffer interrupt is enabled). It is possible for 2 buffers
    -        /// to be completed, so clearing the buffer status bit may instantly re set it on
    -        /// the next clock cycle.
    -        pub const BUFF_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            EP0_IN: u1,
    -            EP0_OUT: u1,
    -            EP1_IN: u1,
    -            EP1_OUT: u1,
    -            EP2_IN: u1,
    -            EP2_OUT: u1,
    -            EP3_IN: u1,
    -            EP3_OUT: u1,
    -            EP4_IN: u1,
    -            EP4_OUT: u1,
    -            EP5_IN: u1,
    -            EP5_OUT: u1,
    -            EP6_IN: u1,
    -            EP6_OUT: u1,
    -            EP7_IN: u1,
    -            EP7_OUT: u1,
    -            EP8_IN: u1,
    -            EP8_OUT: u1,
    -            EP9_IN: u1,
    -            EP9_OUT: u1,
    -            EP10_IN: u1,
    -            EP10_OUT: u1,
    -            EP11_IN: u1,
    -            EP11_OUT: u1,
    -            EP12_IN: u1,
    -            EP12_OUT: u1,
    -            EP13_IN: u1,
    -            EP13_OUT: u1,
    -            EP14_IN: u1,
    -            EP14_OUT: u1,
    -            EP15_IN: u1,
    -            EP15_OUT: u1,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x5011005c
    -        /// Which of the double buffers should be handled. Only valid if using an interrupt
    -        /// per buffer (i.e. not per 2 buffers). Not valid for host interrupt endpoint
    -        /// polling because they are only single buffered.
    -        pub const BUFF_CPU_SHOULD_HANDLE = @intToPtr(*volatile Mmio(32, packed struct {
    -            EP0_IN: u1,
    -            EP0_OUT: u1,
    -            EP1_IN: u1,
    -            EP1_OUT: u1,
    -            EP2_IN: u1,
    -            EP2_OUT: u1,
    -            EP3_IN: u1,
    -            EP3_OUT: u1,
    -            EP4_IN: u1,
    -            EP4_OUT: u1,
    -            EP5_IN: u1,
    -            EP5_OUT: u1,
    -            EP6_IN: u1,
    -            EP6_OUT: u1,
    -            EP7_IN: u1,
    -            EP7_OUT: u1,
    -            EP8_IN: u1,
    -            EP8_OUT: u1,
    -            EP9_IN: u1,
    -            EP9_OUT: u1,
    -            EP10_IN: u1,
    -            EP10_OUT: u1,
    -            EP11_IN: u1,
    -            EP11_OUT: u1,
    -            EP12_IN: u1,
    -            EP12_OUT: u1,
    -            EP13_IN: u1,
    -            EP13_OUT: u1,
    -            EP14_IN: u1,
    -            EP14_OUT: u1,
    -            EP15_IN: u1,
    -            EP15_OUT: u1,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x50110060
    -        /// Device only: Can be set to ignore the buffer control register for this endpoint
    -        /// in case you would like to revoke a buffer. A NAK will be sent for every access
    -        /// to the endpoint until this bit is cleared. A corresponding bit in
    -        /// `EP_ABORT_DONE` is set when it is safe to modify the buffer control register.
    -        pub const EP_ABORT = @intToPtr(*volatile Mmio(32, packed struct {
    -            EP0_IN: u1,
    -            EP0_OUT: u1,
    -            EP1_IN: u1,
    -            EP1_OUT: u1,
    -            EP2_IN: u1,
    -            EP2_OUT: u1,
    -            EP3_IN: u1,
    -            EP3_OUT: u1,
    -            EP4_IN: u1,
    -            EP4_OUT: u1,
    -            EP5_IN: u1,
    -            EP5_OUT: u1,
    -            EP6_IN: u1,
    -            EP6_OUT: u1,
    -            EP7_IN: u1,
    -            EP7_OUT: u1,
    -            EP8_IN: u1,
    -            EP8_OUT: u1,
    -            EP9_IN: u1,
    -            EP9_OUT: u1,
    -            EP10_IN: u1,
    -            EP10_OUT: u1,
    -            EP11_IN: u1,
    -            EP11_OUT: u1,
    -            EP12_IN: u1,
    -            EP12_OUT: u1,
    -            EP13_IN: u1,
    -            EP13_OUT: u1,
    -            EP14_IN: u1,
    -            EP14_OUT: u1,
    -            EP15_IN: u1,
    -            EP15_OUT: u1,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x50110064
    -        /// Device only: Used in conjunction with `EP_ABORT`. Set once an endpoint is idle
    -        /// so the programmer knows it is safe to modify the buffer control register.
    -        pub const EP_ABORT_DONE = @intToPtr(*volatile Mmio(32, packed struct {
    -            EP0_IN: u1,
    -            EP0_OUT: u1,
    -            EP1_IN: u1,
    -            EP1_OUT: u1,
    -            EP2_IN: u1,
    -            EP2_OUT: u1,
    -            EP3_IN: u1,
    -            EP3_OUT: u1,
    -            EP4_IN: u1,
    -            EP4_OUT: u1,
    -            EP5_IN: u1,
    -            EP5_OUT: u1,
    -            EP6_IN: u1,
    -            EP6_OUT: u1,
    -            EP7_IN: u1,
    -            EP7_OUT: u1,
    -            EP8_IN: u1,
    -            EP8_OUT: u1,
    -            EP9_IN: u1,
    -            EP9_OUT: u1,
    -            EP10_IN: u1,
    -            EP10_OUT: u1,
    -            EP11_IN: u1,
    -            EP11_OUT: u1,
    -            EP12_IN: u1,
    -            EP12_OUT: u1,
    -            EP13_IN: u1,
    -            EP13_OUT: u1,
    -            EP14_IN: u1,
    -            EP14_OUT: u1,
    -            EP15_IN: u1,
    -            EP15_OUT: u1,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x50110068
    -        /// Device: this bit must be set in conjunction with the `STALL` bit in the buffer
    -        /// control register to send a STALL on EP0. The device controller clears these bits
    -        /// when a SETUP packet is received because the USB spec requires that a STALL
    -        /// condition is cleared when a SETUP packet is received.
    -        pub const EP_STALL_ARM = @intToPtr(*volatile Mmio(32, packed struct {
    -            EP0_IN: u1,
    -            EP0_OUT: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -        }), base_address + 0x68);
    -
    -        /// address: 0x5011006c
    -        /// Used by the host controller. Sets the wait time in microseconds before trying
    -        /// again if the device replies with a NAK.
    -        pub const NAK_POLL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// NAK polling interval for a low speed device
    -            DELAY_LS: u10,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            /// NAK polling interval for a full speed device
    -            DELAY_FS: u10,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -        }), base_address + 0x6c);
    -
    -        /// address: 0x50110070
    -        /// Device: bits are set when the `IRQ_ON_NAK` or `IRQ_ON_STALL` bits are set. For
    -        /// EP0 this comes from `SIE_CTRL`. For all other endpoints it comes from the
    -        /// endpoint control register.
    -        pub const EP_STATUS_STALL_NAK = @intToPtr(*volatile Mmio(32, packed struct {
    -            EP0_IN: u1,
    -            EP0_OUT: u1,
    -            EP1_IN: u1,
    -            EP1_OUT: u1,
    -            EP2_IN: u1,
    -            EP2_OUT: u1,
    -            EP3_IN: u1,
    -            EP3_OUT: u1,
    -            EP4_IN: u1,
    -            EP4_OUT: u1,
    -            EP5_IN: u1,
    -            EP5_OUT: u1,
    -            EP6_IN: u1,
    -            EP6_OUT: u1,
    -            EP7_IN: u1,
    -            EP7_OUT: u1,
    -            EP8_IN: u1,
    -            EP8_OUT: u1,
    -            EP9_IN: u1,
    -            EP9_OUT: u1,
    -            EP10_IN: u1,
    -            EP10_OUT: u1,
    -            EP11_IN: u1,
    -            EP11_OUT: u1,
    -            EP12_IN: u1,
    -            EP12_OUT: u1,
    -            EP13_IN: u1,
    -            EP13_OUT: u1,
    -            EP14_IN: u1,
    -            EP14_OUT: u1,
    -            EP15_IN: u1,
    -            EP15_OUT: u1,
    -        }), base_address + 0x70);
    -
    -        /// address: 0x50110074
    -        /// Where to connect the USB controller. Should be to_phy by default.
    -        pub const USB_MUXING = @intToPtr(*volatile Mmio(32, packed struct {
    -            TO_PHY: u1,
    -            TO_EXTPHY: u1,
    -            TO_DIGITAL_PAD: u1,
    -            SOFTCON: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -        }), base_address + 0x74);
    -
    -        /// address: 0x50110078
    -        /// Overrides for the power signals in the event that the VBUS signals are not
    -        /// hooked up to GPIO. Set the value of the override and then the override enable to
    -        /// switch over to the override value.
    -        pub const USB_PWR = @intToPtr(*volatile Mmio(32, packed struct {
    -            VBUS_EN: u1,
    -            VBUS_EN_OVERRIDE_EN: u1,
    -            VBUS_DETECT: u1,
    -            VBUS_DETECT_OVERRIDE_EN: u1,
    -            OVERCURR_DETECT: u1,
    -            OVERCURR_DETECT_EN: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -        }), base_address + 0x78);
    -
    -        /// address: 0x5011007c
    -        /// This register allows for direct control of the USB phy. Use in conjunction with
    -        /// usbphy_direct_override register to enable each override bit.
    -        pub const USBPHY_DIRECT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Enable the second DP pull up resistor. 0 - Pull = Rpu2; 1 - Pull = Rpu1 + Rpu2
    -            DP_PULLUP_HISEL: u1,
    -            /// DP pull up enable
    -            DP_PULLUP_EN: u1,
    -            /// DP pull down enable
    -            DP_PULLDN_EN: u1,
    -            reserved0: u1 = 0,
    -            /// Enable the second DM pull up resistor. 0 - Pull = Rpu2; 1 - Pull = Rpu1 + Rpu2
    -            DM_PULLUP_HISEL: u1,
    -            /// DM pull up enable
    -            DM_PULLUP_EN: u1,
    -            /// DM pull down enable
    -            DM_PULLDN_EN: u1,
    -            reserved1: u1 = 0,
    -            /// Output enable. If TX_DIFFMODE=1, OE for DPP/DPM diff pair. 0 - DPP/DPM in Hi-Z
    -            /// state; 1 - DPP/DPM driving\n
    -            /// If TX_DIFFMODE=0, OE for DPP only. 0 - DPP in Hi-Z state; 1 - DPP driving
    -            TX_DP_OE: u1,
    -            /// Output enable. If TX_DIFFMODE=1, Ignored.\n
    -            /// If TX_DIFFMODE=0, OE for DPM only. 0 - DPM in Hi-Z state; 1 - DPM driving
    -            TX_DM_OE: u1,
    -            /// Output data. If TX_DIFFMODE=1, Drives DPP/DPM diff pair. TX_DP_OE=1 to enable
    -            /// drive. DPP=TX_DP, DPM=~TX_DP\n
    -            /// If TX_DIFFMODE=0, Drives DPP only. TX_DP_OE=1 to enable drive. DPP=TX_DP
    -            TX_DP: u1,
    -            /// Output data. TX_DIFFMODE=1, Ignored\n
    -            /// TX_DIFFMODE=0, Drives DPM only. TX_DM_OE=1 to enable drive. DPM=TX_DM
    -            TX_DM: u1,
    -            /// RX power down override (if override enable is set). 1 = powered down.
    -            RX_PD: u1,
    -            /// TX power down override (if override enable is set). 1 = powered down.
    -            TX_PD: u1,
    -            /// TX_FSSLEW=0: Low speed slew rate\n
    -            /// TX_FSSLEW=1: Full speed slew rate
    -            TX_FSSLEW: u1,
    -            /// TX_DIFFMODE=0: Single ended mode\n
    -            /// TX_DIFFMODE=1: Differential drive mode (TX_DM, TX_DM_OE ignored)
    -            TX_DIFFMODE: u1,
    -            /// Differential RX
    -            RX_DD: u1,
    -            /// DPP pin state
    -            RX_DP: u1,
    -            /// DPM pin state
    -            RX_DM: u1,
    -            /// DP overcurrent
    -            DP_OVCN: u1,
    -            /// DM overcurrent
    -            DM_OVCN: u1,
    -            /// DP over voltage
    -            DP_OVV: u1,
    -            /// DM over voltage
    -            DM_OVV: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -        }), base_address + 0x7c);
    -
    -        /// address: 0x50110080
    -        /// Override enable for each control in usbphy_direct
    -        pub const USBPHY_DIRECT_OVERRIDE = @intToPtr(*volatile Mmio(32, packed struct {
    -            DP_PULLUP_HISEL_OVERRIDE_EN: u1,
    -            DM_PULLUP_HISEL_OVERRIDE_EN: u1,
    -            DP_PULLUP_EN_OVERRIDE_EN: u1,
    -            DP_PULLDN_EN_OVERRIDE_EN: u1,
    -            DM_PULLDN_EN_OVERRIDE_EN: u1,
    -            TX_DP_OE_OVERRIDE_EN: u1,
    -            TX_DM_OE_OVERRIDE_EN: u1,
    -            TX_DP_OVERRIDE_EN: u1,
    -            TX_DM_OVERRIDE_EN: u1,
    -            RX_PD_OVERRIDE_EN: u1,
    -            TX_PD_OVERRIDE_EN: u1,
    -            TX_FSSLEW_OVERRIDE_EN: u1,
    -            DM_PULLUP_OVERRIDE_EN: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            TX_DIFFMODE_OVERRIDE_EN: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -        }), base_address + 0x80);
    -
    -        /// address: 0x50110084
    -        /// Used to adjust trim values of USB phy pull down resistors.
    -        pub const USBPHY_TRIM = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Value to drive to USB PHY\n
    -            /// DP pulldown resistor trim control\n
    -            /// Experimental data suggests that the reset value will work, but this register
    -            /// allows adjustment if required
    -            DP_PULLDN_TRIM: u5,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            /// Value to drive to USB PHY\n
    -            /// DM pulldown resistor trim control\n
    -            /// Experimental data suggests that the reset value will work, but this register
    -            /// allows adjustment if required
    -            DM_PULLDN_TRIM: u5,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -        }), base_address + 0x84);
    -
    -        /// address: 0x5011008c
    -        /// Raw Interrupts
    -        pub const INTR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Host: raised when a device is connected or disconnected (i.e. when
    -            /// SIE_STATUS.SPEED changes). Cleared by writing to SIE_STATUS.SPEED
    -            HOST_CONN_DIS: u1,
    -            /// Host: raised when a device wakes up the host. Cleared by writing to
    -            /// SIE_STATUS.RESUME
    -            HOST_RESUME: u1,
    -            /// Host: raised every time the host sends a SOF (Start of Frame). Cleared by
    -            /// reading SOF_RD
    -            HOST_SOF: u1,
    -            /// Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by writing to this
    -            /// bit.
    -            TRANS_COMPLETE: u1,
    -            /// Raised when any bit in BUFF_STATUS is set. Clear by clearing all bits in
    -            /// BUFF_STATUS.
    -            BUFF_STATUS: u1,
    -            /// Source: SIE_STATUS.DATA_SEQ_ERROR
    -            ERROR_DATA_SEQ: u1,
    -            /// Source: SIE_STATUS.RX_TIMEOUT
    -            ERROR_RX_TIMEOUT: u1,
    -            /// Source: SIE_STATUS.RX_OVERFLOW
    -            ERROR_RX_OVERFLOW: u1,
    -            /// Source: SIE_STATUS.BIT_STUFF_ERROR
    -            ERROR_BIT_STUFF: u1,
    -            /// Source: SIE_STATUS.CRC_ERROR
    -            ERROR_CRC: u1,
    -            /// Source: SIE_STATUS.STALL_REC
    -            STALL: u1,
    -            /// Source: SIE_STATUS.VBUS_DETECTED
    -            VBUS_DETECT: u1,
    -            /// Source: SIE_STATUS.BUS_RESET
    -            BUS_RESET: u1,
    -            /// Set when the device connection state changes. Cleared by writing to
    -            /// SIE_STATUS.CONNECTED
    -            DEV_CONN_DIS: u1,
    -            /// Set when the device suspend state changes. Cleared by writing to
    -            /// SIE_STATUS.SUSPENDED
    -            DEV_SUSPEND: u1,
    -            /// Set when the device receives a resume from the host. Cleared by writing to
    -            /// SIE_STATUS.RESUME
    -            DEV_RESUME_FROM_HOST: u1,
    -            /// Device. Source: SIE_STATUS.SETUP_REC
    -            SETUP_REQ: u1,
    -            /// Set every time the device receives a SOF (Start of Frame) packet. Cleared by
    -            /// reading SOF_RD
    -            DEV_SOF: u1,
    -            /// Raised when any bit in ABORT_DONE is set. Clear by clearing all bits in
    -            /// ABORT_DONE.
    -            ABORT_DONE: u1,
    -            /// Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by clearing all bits in
    -            /// EP_STATUS_STALL_NAK.
    -            EP_STALL_NAK: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -        }), base_address + 0x8c);
    -
    -        /// address: 0x50110090
    -        /// Interrupt Enable
    -        pub const INTE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Host: raised when a device is connected or disconnected (i.e. when
    -            /// SIE_STATUS.SPEED changes). Cleared by writing to SIE_STATUS.SPEED
    -            HOST_CONN_DIS: u1,
    -            /// Host: raised when a device wakes up the host. Cleared by writing to
    -            /// SIE_STATUS.RESUME
    -            HOST_RESUME: u1,
    -            /// Host: raised every time the host sends a SOF (Start of Frame). Cleared by
    -            /// reading SOF_RD
    -            HOST_SOF: u1,
    -            /// Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by writing to this
    -            /// bit.
    -            TRANS_COMPLETE: u1,
    -            /// Raised when any bit in BUFF_STATUS is set. Clear by clearing all bits in
    -            /// BUFF_STATUS.
    -            BUFF_STATUS: u1,
    -            /// Source: SIE_STATUS.DATA_SEQ_ERROR
    -            ERROR_DATA_SEQ: u1,
    -            /// Source: SIE_STATUS.RX_TIMEOUT
    -            ERROR_RX_TIMEOUT: u1,
    -            /// Source: SIE_STATUS.RX_OVERFLOW
    -            ERROR_RX_OVERFLOW: u1,
    -            /// Source: SIE_STATUS.BIT_STUFF_ERROR
    -            ERROR_BIT_STUFF: u1,
    -            /// Source: SIE_STATUS.CRC_ERROR
    -            ERROR_CRC: u1,
    -            /// Source: SIE_STATUS.STALL_REC
    -            STALL: u1,
    -            /// Source: SIE_STATUS.VBUS_DETECTED
    -            VBUS_DETECT: u1,
    -            /// Source: SIE_STATUS.BUS_RESET
    -            BUS_RESET: u1,
    -            /// Set when the device connection state changes. Cleared by writing to
    -            /// SIE_STATUS.CONNECTED
    -            DEV_CONN_DIS: u1,
    -            /// Set when the device suspend state changes. Cleared by writing to
    -            /// SIE_STATUS.SUSPENDED
    -            DEV_SUSPEND: u1,
    -            /// Set when the device receives a resume from the host. Cleared by writing to
    -            /// SIE_STATUS.RESUME
    -            DEV_RESUME_FROM_HOST: u1,
    -            /// Device. Source: SIE_STATUS.SETUP_REC
    -            SETUP_REQ: u1,
    -            /// Set every time the device receives a SOF (Start of Frame) packet. Cleared by
    -            /// reading SOF_RD
    -            DEV_SOF: u1,
    -            /// Raised when any bit in ABORT_DONE is set. Clear by clearing all bits in
    -            /// ABORT_DONE.
    -            ABORT_DONE: u1,
    -            /// Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by clearing all bits in
    -            /// EP_STATUS_STALL_NAK.
    -            EP_STALL_NAK: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -        }), base_address + 0x90);
    -
    -        /// address: 0x50110094
    -        /// Interrupt Force
    -        pub const INTF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Host: raised when a device is connected or disconnected (i.e. when
    -            /// SIE_STATUS.SPEED changes). Cleared by writing to SIE_STATUS.SPEED
    -            HOST_CONN_DIS: u1,
    -            /// Host: raised when a device wakes up the host. Cleared by writing to
    -            /// SIE_STATUS.RESUME
    -            HOST_RESUME: u1,
    -            /// Host: raised every time the host sends a SOF (Start of Frame). Cleared by
    -            /// reading SOF_RD
    -            HOST_SOF: u1,
    -            /// Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by writing to this
    -            /// bit.
    -            TRANS_COMPLETE: u1,
    -            /// Raised when any bit in BUFF_STATUS is set. Clear by clearing all bits in
    -            /// BUFF_STATUS.
    -            BUFF_STATUS: u1,
    -            /// Source: SIE_STATUS.DATA_SEQ_ERROR
    -            ERROR_DATA_SEQ: u1,
    -            /// Source: SIE_STATUS.RX_TIMEOUT
    -            ERROR_RX_TIMEOUT: u1,
    -            /// Source: SIE_STATUS.RX_OVERFLOW
    -            ERROR_RX_OVERFLOW: u1,
    -            /// Source: SIE_STATUS.BIT_STUFF_ERROR
    -            ERROR_BIT_STUFF: u1,
    -            /// Source: SIE_STATUS.CRC_ERROR
    -            ERROR_CRC: u1,
    -            /// Source: SIE_STATUS.STALL_REC
    -            STALL: u1,
    -            /// Source: SIE_STATUS.VBUS_DETECTED
    -            VBUS_DETECT: u1,
    -            /// Source: SIE_STATUS.BUS_RESET
    -            BUS_RESET: u1,
    -            /// Set when the device connection state changes. Cleared by writing to
    -            /// SIE_STATUS.CONNECTED
    -            DEV_CONN_DIS: u1,
    -            /// Set when the device suspend state changes. Cleared by writing to
    -            /// SIE_STATUS.SUSPENDED
    -            DEV_SUSPEND: u1,
    -            /// Set when the device receives a resume from the host. Cleared by writing to
    -            /// SIE_STATUS.RESUME
    -            DEV_RESUME_FROM_HOST: u1,
    -            /// Device. Source: SIE_STATUS.SETUP_REC
    -            SETUP_REQ: u1,
    -            /// Set every time the device receives a SOF (Start of Frame) packet. Cleared by
    -            /// reading SOF_RD
    -            DEV_SOF: u1,
    -            /// Raised when any bit in ABORT_DONE is set. Clear by clearing all bits in
    -            /// ABORT_DONE.
    -            ABORT_DONE: u1,
    -            /// Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by clearing all bits in
    -            /// EP_STATUS_STALL_NAK.
    -            EP_STALL_NAK: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -        }), base_address + 0x94);
    -
    -        /// address: 0x50110098
    -        /// Interrupt status after masking & forcing
    -        pub const INTS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Host: raised when a device is connected or disconnected (i.e. when
    -            /// SIE_STATUS.SPEED changes). Cleared by writing to SIE_STATUS.SPEED
    -            HOST_CONN_DIS: u1,
    -            /// Host: raised when a device wakes up the host. Cleared by writing to
    -            /// SIE_STATUS.RESUME
    -            HOST_RESUME: u1,
    -            /// Host: raised every time the host sends a SOF (Start of Frame). Cleared by
    -            /// reading SOF_RD
    -            HOST_SOF: u1,
    -            /// Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by writing to this
    -            /// bit.
    -            TRANS_COMPLETE: u1,
    -            /// Raised when any bit in BUFF_STATUS is set. Clear by clearing all bits in
    -            /// BUFF_STATUS.
    -            BUFF_STATUS: u1,
    -            /// Source: SIE_STATUS.DATA_SEQ_ERROR
    -            ERROR_DATA_SEQ: u1,
    -            /// Source: SIE_STATUS.RX_TIMEOUT
    -            ERROR_RX_TIMEOUT: u1,
    -            /// Source: SIE_STATUS.RX_OVERFLOW
    -            ERROR_RX_OVERFLOW: u1,
    -            /// Source: SIE_STATUS.BIT_STUFF_ERROR
    -            ERROR_BIT_STUFF: u1,
    -            /// Source: SIE_STATUS.CRC_ERROR
    -            ERROR_CRC: u1,
    -            /// Source: SIE_STATUS.STALL_REC
    -            STALL: u1,
    -            /// Source: SIE_STATUS.VBUS_DETECTED
    -            VBUS_DETECT: u1,
    -            /// Source: SIE_STATUS.BUS_RESET
    -            BUS_RESET: u1,
    -            /// Set when the device connection state changes. Cleared by writing to
    -            /// SIE_STATUS.CONNECTED
    -            DEV_CONN_DIS: u1,
    -            /// Set when the device suspend state changes. Cleared by writing to
    -            /// SIE_STATUS.SUSPENDED
    -            DEV_SUSPEND: u1,
    -            /// Set when the device receives a resume from the host. Cleared by writing to
    -            /// SIE_STATUS.RESUME
    -            DEV_RESUME_FROM_HOST: u1,
    -            /// Device. Source: SIE_STATUS.SETUP_REC
    -            SETUP_REQ: u1,
    -            /// Set every time the device receives a SOF (Start of Frame) packet. Cleared by
    -            /// reading SOF_RD
    -            DEV_SOF: u1,
    -            /// Raised when any bit in ABORT_DONE is set. Clear by clearing all bits in
    -            /// ABORT_DONE.
    -            ABORT_DONE: u1,
    -            /// Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by clearing all bits in
    -            /// EP_STATUS_STALL_NAK.
    -            EP_STALL_NAK: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -        }), base_address + 0x98);
    -    };
    -
    -    /// Programmable IO block
    -    pub const PIO0 = struct {
    -        pub const base_address = 0x50200000;
    -        pub const version = "1";
    -
    -        /// address: 0x50200000
    -        /// PIO control register
    -        pub const CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Enable/disable each of the four state machines by writing 1/0 to each of these
    -            /// four bits. When disabled, a state machine will cease executing instructions,
    -            /// except those written directly to SMx_INSTR by the system. Multiple bits can be
    -            /// set/cleared at once to run/halt multiple state machines simultaneously.
    -            SM_ENABLE: u4,
    -            /// Write 1 to instantly clear internal SM state which may be otherwise difficult to
    -            /// access and will affect future execution.\n\n
    -            /// Specifically, the following are cleared: input and output shift counters; the
    -            /// contents of the input shift register; the delay counter; the waiting-on-IRQ
    -            /// state; any stalled instruction written to SMx_INSTR or run by OUT/MOV EXEC; any
    -            /// pin write left asserted due to OUT_STICKY.
    -            SM_RESTART: u4,
    -            /// Restart a state machine's clock divider from an initial phase of 0. Clock
    -            /// dividers are free-running, so once started, their output (including fractional
    -            /// jitter) is completely determined by the integer/fractional divisor configured in
    -            /// SMx_CLKDIV. This means that, if multiple clock dividers with the same divisor
    -            /// are restarted simultaneously, by writing multiple 1 bits to this field, the
    -            /// execution clocks of those state machines will run in precise lockstep.\n\n
    -            /// Note that setting/clearing SM_ENABLE does not stop the clock divider from
    -            /// running, so once multiple state machines' clocks are synchronised, it is safe to
    -            /// disable/reenable a state machine, whilst keeping the clock dividers in sync.\n\n
    -            /// Note also that CLKDIV_RESTART can be written to whilst the state machine is
    -            /// running, and this is useful to resynchronise clock dividers after the divisors
    -            /// (SMx_CLKDIV) have been changed on-the-fly.
    -            CLKDIV_RESTART: u4,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x50200004
    -        /// FIFO status register
    -        pub const FSTAT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// State machine RX FIFO is full
    -            RXFULL: u4,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            /// State machine RX FIFO is empty
    -            RXEMPTY: u4,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// State machine TX FIFO is full
    -            TXFULL: u4,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            /// State machine TX FIFO is empty
    -            TXEMPTY: u4,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x50200008
    -        /// FIFO debug register
    -        pub const FDEBUG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// State machine has stalled on full RX FIFO during a blocking PUSH, or an IN with
    -            /// autopush enabled. This flag is also set when a nonblocking PUSH to a full FIFO
    -            /// took place, in which case the state machine has dropped data. Write 1 to clear.
    -            RXSTALL: u4,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            /// RX FIFO underflow (i.e. read-on-empty by the system) has occurred. Write 1 to
    -            /// clear. Note that read-on-empty does not perturb the state of the FIFO in any
    -            /// way, but the data returned by reading from an empty FIFO is undefined, so this
    -            /// flag generally only becomes set due to some kind of software error.
    -            RXUNDER: u4,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// TX FIFO overflow (i.e. write-on-full by the system) has occurred. Write 1 to
    -            /// clear. Note that write-on-full does not alter the state or contents of the FIFO
    -            /// in any way, but the data that the system attempted to write is dropped, so if
    -            /// this flag is set, your software has quite likely dropped some data on the floor.
    -            TXOVER: u4,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            /// State machine has stalled on empty TX FIFO during a blocking PULL, or an OUT
    -            /// with autopull enabled. Write 1 to clear.
    -            TXSTALL: u4,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x5020000c
    -        /// FIFO levels
    -        pub const FLEVEL = @intToPtr(*volatile Mmio(32, packed struct {
    -            TX0: u4,
    -            RX0: u4,
    -            TX1: u4,
    -            RX1: u4,
    -            TX2: u4,
    -            RX2: u4,
    -            TX3: u4,
    -            RX3: u4,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x50200010
    -        /// Direct write access to the TX FIFO for this state machine. Each write pushes one
    -        /// word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO
    -        /// state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO.
    -        pub const TXF0 = @intToPtr(*volatile u32, base_address + 0x10);
    -
    -        /// address: 0x50200014
    -        /// Direct write access to the TX FIFO for this state machine. Each write pushes one
    -        /// word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO
    -        /// state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO.
    -        pub const TXF1 = @intToPtr(*volatile u32, base_address + 0x14);
    -
    -        /// address: 0x50200018
    -        /// Direct write access to the TX FIFO for this state machine. Each write pushes one
    -        /// word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO
    -        /// state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO.
    -        pub const TXF2 = @intToPtr(*volatile u32, base_address + 0x18);
    -
    -        /// address: 0x5020001c
    -        /// Direct write access to the TX FIFO for this state machine. Each write pushes one
    -        /// word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO
    -        /// state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO.
    -        pub const TXF3 = @intToPtr(*volatile u32, base_address + 0x1c);
    -
    -        /// address: 0x50200020
    -        /// Direct read access to the RX FIFO for this state machine. Each read pops one
    -        /// word from the FIFO. Attempting to read from an empty FIFO has no effect on the
    -        /// FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The
    -        /// data returned to the system on a read from an empty FIFO is undefined.
    -        pub const RXF0 = @intToPtr(*volatile u32, base_address + 0x20);
    -
    -        /// address: 0x50200024
    -        /// Direct read access to the RX FIFO for this state machine. Each read pops one
    -        /// word from the FIFO. Attempting to read from an empty FIFO has no effect on the
    -        /// FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The
    -        /// data returned to the system on a read from an empty FIFO is undefined.
    -        pub const RXF1 = @intToPtr(*volatile u32, base_address + 0x24);
    -
    -        /// address: 0x50200028
    -        /// Direct read access to the RX FIFO for this state machine. Each read pops one
    -        /// word from the FIFO. Attempting to read from an empty FIFO has no effect on the
    -        /// FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The
    -        /// data returned to the system on a read from an empty FIFO is undefined.
    -        pub const RXF2 = @intToPtr(*volatile u32, base_address + 0x28);
    -
    -        /// address: 0x5020002c
    -        /// Direct read access to the RX FIFO for this state machine. Each read pops one
    -        /// word from the FIFO. Attempting to read from an empty FIFO has no effect on the
    -        /// FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The
    -        /// data returned to the system on a read from an empty FIFO is undefined.
    -        pub const RXF3 = @intToPtr(*volatile u32, base_address + 0x2c);
    -
    -        /// address: 0x50200030
    -        /// State machine IRQ flags register. Write 1 to clear. There are 8 state machine
    -        /// IRQ flags, which can be set, cleared, and waited on by the state machines.
    -        /// There's no fixed association between flags and state machines -- any state
    -        /// machine can use any flag.\n\n
    -        /// Any of the 8 flags can be used for timing synchronisation between state
    -        /// machines, using IRQ and WAIT instructions. The lower four of these flags are
    -        /// also routed out to system-level interrupt requests, alongside FIFO status
    -        /// interrupts -- see e.g. IRQ0_INTE.
    -        pub const IRQ = @intToPtr(*volatile MmioInt(32, u8), base_address + 0x30);
    -
    -        /// address: 0x50200034
    -        /// Writing a 1 to each of these bits will forcibly assert the corresponding IRQ.
    -        /// Note this is different to the INTF register: writing here affects PIO internal
    -        /// state. INTF just asserts the processor-facing IRQ signal for testing ISRs, and
    -        /// is not visible to the state machines.
    -        pub const IRQ_FORCE = @intToPtr(*volatile MmioInt(32, u8), base_address + 0x34);
    -
    -        /// address: 0x50200038
    -        /// There is a 2-flipflop synchronizer on each GPIO input, which protects PIO logic
    -        /// from metastabilities. This increases input delay, and for fast synchronous IO
    -        /// (e.g. SPI) these synchronizers may need to be bypassed. Each bit in this
    -        /// register corresponds to one GPIO.\n
    -        /// 0 -> input is synchronized (default)\n
    -        /// 1 -> synchronizer is bypassed\n
    -        /// If in doubt, leave this register as all zeroes.
    -        pub const INPUT_SYNC_BYPASS = @intToPtr(*volatile u32, base_address + 0x38);
    -
    -        /// address: 0x5020003c
    -        /// Read to sample the pad output values PIO is currently driving to the GPIOs. On
    -        /// RP2040 there are 30 GPIOs, so the two most significant bits are hardwired to 0.
    -        pub const DBG_PADOUT = @intToPtr(*volatile u32, base_address + 0x3c);
    -
    -        /// address: 0x50200040
    -        /// Read to sample the pad output enables (direction) PIO is currently driving to
    -        /// the GPIOs. On RP2040 there are 30 GPIOs, so the two most significant bits are
    -        /// hardwired to 0.
    -        pub const DBG_PADOE = @intToPtr(*volatile u32, base_address + 0x40);
    -
    -        /// address: 0x50200044
    -        /// The PIO hardware has some free parameters that may vary between chip products.\n
    -        /// These should be provided in the chip datasheet, but are also exposed here.
    -        pub const DBG_CFGINFO = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The depth of the state machine TX/RX FIFOs, measured in words.\n
    -            /// Joining fifos via SHIFTCTRL_FJOIN gives one FIFO with double\n
    -            /// this depth.
    -            FIFO_DEPTH: u6,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            /// The number of state machines this PIO instance is equipped with.
    -            SM_COUNT: u4,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            /// The size of the instruction memory, measured in units of one instruction
    -            IMEM_SIZE: u6,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x50200048
    -        /// Write-only access to instruction memory location 0
    -        pub const INSTR_MEM0 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x48);
    -
    -        /// address: 0x5020004c
    -        /// Write-only access to instruction memory location 1
    -        pub const INSTR_MEM1 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x4c);
    -
    -        /// address: 0x50200050
    -        /// Write-only access to instruction memory location 2
    -        pub const INSTR_MEM2 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x50);
    -
    -        /// address: 0x50200054
    -        /// Write-only access to instruction memory location 3
    -        pub const INSTR_MEM3 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x54);
    -
    -        /// address: 0x50200058
    -        /// Write-only access to instruction memory location 4
    -        pub const INSTR_MEM4 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x58);
    -
    -        /// address: 0x5020005c
    -        /// Write-only access to instruction memory location 5
    -        pub const INSTR_MEM5 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x5c);
    -
    -        /// address: 0x50200060
    -        /// Write-only access to instruction memory location 6
    -        pub const INSTR_MEM6 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x60);
    -
    -        /// address: 0x50200064
    -        /// Write-only access to instruction memory location 7
    -        pub const INSTR_MEM7 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x64);
    -
    -        /// address: 0x50200068
    -        /// Write-only access to instruction memory location 8
    -        pub const INSTR_MEM8 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x68);
    -
    -        /// address: 0x5020006c
    -        /// Write-only access to instruction memory location 9
    -        pub const INSTR_MEM9 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x6c);
    -
    -        /// address: 0x50200070
    -        /// Write-only access to instruction memory location 10
    -        pub const INSTR_MEM10 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x70);
    -
    -        /// address: 0x50200074
    -        /// Write-only access to instruction memory location 11
    -        pub const INSTR_MEM11 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x74);
    -
    -        /// address: 0x50200078
    -        /// Write-only access to instruction memory location 12
    -        pub const INSTR_MEM12 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x78);
    -
    -        /// address: 0x5020007c
    -        /// Write-only access to instruction memory location 13
    -        pub const INSTR_MEM13 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x7c);
    -
    -        /// address: 0x50200080
    -        /// Write-only access to instruction memory location 14
    -        pub const INSTR_MEM14 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x80);
    -
    -        /// address: 0x50200084
    -        /// Write-only access to instruction memory location 15
    -        pub const INSTR_MEM15 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x84);
    -
    -        /// address: 0x50200088
    -        /// Write-only access to instruction memory location 16
    -        pub const INSTR_MEM16 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x88);
    -
    -        /// address: 0x5020008c
    -        /// Write-only access to instruction memory location 17
    -        pub const INSTR_MEM17 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x8c);
    -
    -        /// address: 0x50200090
    -        /// Write-only access to instruction memory location 18
    -        pub const INSTR_MEM18 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x90);
    -
    -        /// address: 0x50200094
    -        /// Write-only access to instruction memory location 19
    -        pub const INSTR_MEM19 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x94);
    -
    -        /// address: 0x50200098
    -        /// Write-only access to instruction memory location 20
    -        pub const INSTR_MEM20 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x98);
    -
    -        /// address: 0x5020009c
    -        /// Write-only access to instruction memory location 21
    -        pub const INSTR_MEM21 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x9c);
    -
    -        /// address: 0x502000a0
    -        /// Write-only access to instruction memory location 22
    -        pub const INSTR_MEM22 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xa0);
    -
    -        /// address: 0x502000a4
    -        /// Write-only access to instruction memory location 23
    -        pub const INSTR_MEM23 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xa4);
    -
    -        /// address: 0x502000a8
    -        /// Write-only access to instruction memory location 24
    -        pub const INSTR_MEM24 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xa8);
    -
    -        /// address: 0x502000ac
    -        /// Write-only access to instruction memory location 25
    -        pub const INSTR_MEM25 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xac);
    -
    -        /// address: 0x502000b0
    -        /// Write-only access to instruction memory location 26
    -        pub const INSTR_MEM26 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xb0);
    -
    -        /// address: 0x502000b4
    -        /// Write-only access to instruction memory location 27
    -        pub const INSTR_MEM27 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xb4);
    -
    -        /// address: 0x502000b8
    -        /// Write-only access to instruction memory location 28
    -        pub const INSTR_MEM28 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xb8);
    -
    -        /// address: 0x502000bc
    -        /// Write-only access to instruction memory location 29
    -        pub const INSTR_MEM29 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xbc);
    -
    -        /// address: 0x502000c0
    -        /// Write-only access to instruction memory location 30
    -        pub const INSTR_MEM30 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xc0);
    -
    -        /// address: 0x502000c4
    -        /// Write-only access to instruction memory location 31
    -        pub const INSTR_MEM31 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xc4);
    -
    -        /// address: 0x502000c8
    -        /// Clock divisor register for state machine 0\n
    -        /// Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256)
    -        pub const SM0_CLKDIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// Fractional part of clock divisor
    -            FRAC: u8,
    -            /// Effective frequency is sysclk/(int + frac/256).\n
    -            /// Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0.
    -            INT: u16,
    -        }), base_address + 0xc8);
    -
    -        /// address: 0x502000cc
    -        /// Execution/behavioural settings for state machine 0
    -        pub const SM0_EXECCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Comparison level for the MOV x, STATUS instruction
    -            STATUS_N: u4,
    -            /// Comparison used for the MOV x, STATUS instruction.
    -            STATUS_SEL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            /// After reaching wrap_top, execution is wrapped to this address.
    -            WRAP_BOTTOM: u5,
    -            /// After reaching this address, execution is wrapped to wrap_bottom.\n
    -            /// If the instruction is a jump, and the jump condition is true, the jump takes
    -            /// priority.
    -            WRAP_TOP: u5,
    -            /// Continuously assert the most recent OUT/SET to the pins
    -            OUT_STICKY: u1,
    -            /// If 1, use a bit of OUT data as an auxiliary write enable\n
    -            /// When used in conjunction with OUT_STICKY, writes with an enable of 0 will\n
    -            /// deassert the latest pin write. This can create useful masking/override
    -            /// behaviour\n
    -            /// due to the priority ordering of state machine pin writes (SM0 < SM1 < ...)
    -            INLINE_OUT_EN: u1,
    -            /// Which data bit to use for inline OUT enable
    -            OUT_EN_SEL: u5,
    -            /// The GPIO number to use as condition for JMP PIN. Unaffected by input mapping.
    -            JMP_PIN: u5,
    -            /// If 1, side-set data is asserted to pin directions, instead of pin values
    -            SIDE_PINDIR: u1,
    -            /// If 1, the MSB of the Delay/Side-set instruction field is used as side-set
    -            /// enable, rather than a side-set data bit. This allows instructions to perform
    -            /// side-set optionally, rather than on every instruction, but the maximum possible
    -            /// side-set width is reduced from 5 to 4. Note that the value of
    -            /// PINCTRL_SIDESET_COUNT is inclusive of this enable bit.
    -            SIDE_EN: u1,
    -            /// If 1, an instruction written to SMx_INSTR is stalled, and latched by the state
    -            /// machine. Will clear to 0 once this instruction completes.
    -            EXEC_STALLED: u1,
    -        }), base_address + 0xcc);
    -
    -        /// address: 0x502000d0
    -        /// Control behaviour of the input/output shift registers for state machine 0
    -        pub const SM0_SHIFTCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            /// Push automatically when the input shift register is filled, i.e. on an IN
    -            /// instruction which causes the input shift counter to reach or exceed PUSH_THRESH.
    -            AUTOPUSH: u1,
    -            /// Pull automatically when the output shift register is emptied, i.e. on or
    -            /// following an OUT instruction which causes the output shift counter to reach or
    -            /// exceed PULL_THRESH.
    -            AUTOPULL: u1,
    -            /// 1 = shift input shift register to right (data enters from left). 0 = to left.
    -            IN_SHIFTDIR: u1,
    -            /// 1 = shift out of output shift register to right. 0 = to left.
    -            OUT_SHIFTDIR: u1,
    -            /// Number of bits shifted into ISR before autopush, or conditional push (PUSH
    -            /// IFFULL), will take place.\n
    -            /// Write 0 for value of 32.
    -            PUSH_THRESH: u5,
    -            /// Number of bits shifted out of OSR before autopull, or conditional pull (PULL
    -            /// IFEMPTY), will take place.\n
    -            /// Write 0 for value of 32.
    -            PULL_THRESH: u5,
    -            /// When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.\n
    -            /// RX FIFO is disabled as a result (always reads as both full and empty).\n
    -            /// FIFOs are flushed when this bit is changed.
    -            FJOIN_TX: u1,
    -            /// When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.\n
    -            /// TX FIFO is disabled as a result (always reads as both full and empty).\n
    -            /// FIFOs are flushed when this bit is changed.
    -            FJOIN_RX: u1,
    -        }), base_address + 0xd0);
    -
    -        /// address: 0x502000d4
    -        /// Current instruction address of state machine 0
    -        pub const SM0_ADDR = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xd4);
    -
    -        /// address: 0x502000d8
    -        /// Read to see the instruction currently addressed by state machine 0's program
    -        /// counter\n
    -        /// Write to execute an instruction immediately (including jumps) and then resume
    -        /// execution.
    -        pub const SM0_INSTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xd8);
    -
    -        /// address: 0x502000dc
    -        /// State machine pin control
    -        pub const SM0_PINCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV
    -            /// PINS instruction. The data written to this pin will always be the
    -            /// least-significant bit of the OUT or MOV data.
    -            OUT_BASE: u5,
    -            /// The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS
    -            /// instruction. The data written to this pin is the least-significant bit of the
    -            /// SET data.
    -            SET_BASE: u5,
    -            /// The lowest-numbered pin that will be affected by a side-set operation. The MSBs
    -            /// of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT)
    -            /// are used for side-set data, with the remaining LSBs used for delay. The
    -            /// least-significant bit of the side-set portion is the bit written to this pin,
    -            /// with more-significant bits written to higher-numbered pins.
    -            SIDESET_BASE: u5,
    -            /// The pin which is mapped to the least-significant bit of a state machine's IN
    -            /// data bus. Higher-numbered pins are mapped to consecutively more-significant data
    -            /// bits, with a modulo of 32 applied to pin number.
    -            IN_BASE: u5,
    -            /// The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction.
    -            /// In the range 0 to 32 inclusive.
    -            OUT_COUNT: u6,
    -            /// The number of pins asserted by a SET. In the range 0 to 5 inclusive.
    -            SET_COUNT: u3,
    -            /// The number of MSBs of the Delay/Side-set instruction field which are used for
    -            /// side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits,
    -            /// no side-set) and maximum of 5 (all side-set, no delay).
    -            SIDESET_COUNT: u3,
    -        }), base_address + 0xdc);
    -
    -        /// address: 0x502000e0
    -        /// Clock divisor register for state machine 1\n
    -        /// Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256)
    -        pub const SM1_CLKDIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// Fractional part of clock divisor
    -            FRAC: u8,
    -            /// Effective frequency is sysclk/(int + frac/256).\n
    -            /// Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0.
    -            INT: u16,
    -        }), base_address + 0xe0);
    -
    -        /// address: 0x502000e4
    -        /// Execution/behavioural settings for state machine 1
    -        pub const SM1_EXECCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Comparison level for the MOV x, STATUS instruction
    -            STATUS_N: u4,
    -            /// Comparison used for the MOV x, STATUS instruction.
    -            STATUS_SEL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            /// After reaching wrap_top, execution is wrapped to this address.
    -            WRAP_BOTTOM: u5,
    -            /// After reaching this address, execution is wrapped to wrap_bottom.\n
    -            /// If the instruction is a jump, and the jump condition is true, the jump takes
    -            /// priority.
    -            WRAP_TOP: u5,
    -            /// Continuously assert the most recent OUT/SET to the pins
    -            OUT_STICKY: u1,
    -            /// If 1, use a bit of OUT data as an auxiliary write enable\n
    -            /// When used in conjunction with OUT_STICKY, writes with an enable of 0 will\n
    -            /// deassert the latest pin write. This can create useful masking/override
    -            /// behaviour\n
    -            /// due to the priority ordering of state machine pin writes (SM0 < SM1 < ...)
    -            INLINE_OUT_EN: u1,
    -            /// Which data bit to use for inline OUT enable
    -            OUT_EN_SEL: u5,
    -            /// The GPIO number to use as condition for JMP PIN. Unaffected by input mapping.
    -            JMP_PIN: u5,
    -            /// If 1, side-set data is asserted to pin directions, instead of pin values
    -            SIDE_PINDIR: u1,
    -            /// If 1, the MSB of the Delay/Side-set instruction field is used as side-set
    -            /// enable, rather than a side-set data bit. This allows instructions to perform
    -            /// side-set optionally, rather than on every instruction, but the maximum possible
    -            /// side-set width is reduced from 5 to 4. Note that the value of
    -            /// PINCTRL_SIDESET_COUNT is inclusive of this enable bit.
    -            SIDE_EN: u1,
    -            /// If 1, an instruction written to SMx_INSTR is stalled, and latched by the state
    -            /// machine. Will clear to 0 once this instruction completes.
    -            EXEC_STALLED: u1,
    -        }), base_address + 0xe4);
    -
    -        /// address: 0x502000e8
    -        /// Control behaviour of the input/output shift registers for state machine 1
    -        pub const SM1_SHIFTCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            /// Push automatically when the input shift register is filled, i.e. on an IN
    -            /// instruction which causes the input shift counter to reach or exceed PUSH_THRESH.
    -            AUTOPUSH: u1,
    -            /// Pull automatically when the output shift register is emptied, i.e. on or
    -            /// following an OUT instruction which causes the output shift counter to reach or
    -            /// exceed PULL_THRESH.
    -            AUTOPULL: u1,
    -            /// 1 = shift input shift register to right (data enters from left). 0 = to left.
    -            IN_SHIFTDIR: u1,
    -            /// 1 = shift out of output shift register to right. 0 = to left.
    -            OUT_SHIFTDIR: u1,
    -            /// Number of bits shifted into ISR before autopush, or conditional push (PUSH
    -            /// IFFULL), will take place.\n
    -            /// Write 0 for value of 32.
    -            PUSH_THRESH: u5,
    -            /// Number of bits shifted out of OSR before autopull, or conditional pull (PULL
    -            /// IFEMPTY), will take place.\n
    -            /// Write 0 for value of 32.
    -            PULL_THRESH: u5,
    -            /// When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.\n
    -            /// RX FIFO is disabled as a result (always reads as both full and empty).\n
    -            /// FIFOs are flushed when this bit is changed.
    -            FJOIN_TX: u1,
    -            /// When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.\n
    -            /// TX FIFO is disabled as a result (always reads as both full and empty).\n
    -            /// FIFOs are flushed when this bit is changed.
    -            FJOIN_RX: u1,
    -        }), base_address + 0xe8);
    -
    -        /// address: 0x502000ec
    -        /// Current instruction address of state machine 1
    -        pub const SM1_ADDR = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xec);
    -
    -        /// address: 0x502000f0
    -        /// Read to see the instruction currently addressed by state machine 1's program
    -        /// counter\n
    -        /// Write to execute an instruction immediately (including jumps) and then resume
    -        /// execution.
    -        pub const SM1_INSTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xf0);
    -
    -        /// address: 0x502000f4
    -        /// State machine pin control
    -        pub const SM1_PINCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV
    -            /// PINS instruction. The data written to this pin will always be the
    -            /// least-significant bit of the OUT or MOV data.
    -            OUT_BASE: u5,
    -            /// The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS
    -            /// instruction. The data written to this pin is the least-significant bit of the
    -            /// SET data.
    -            SET_BASE: u5,
    -            /// The lowest-numbered pin that will be affected by a side-set operation. The MSBs
    -            /// of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT)
    -            /// are used for side-set data, with the remaining LSBs used for delay. The
    -            /// least-significant bit of the side-set portion is the bit written to this pin,
    -            /// with more-significant bits written to higher-numbered pins.
    -            SIDESET_BASE: u5,
    -            /// The pin which is mapped to the least-significant bit of a state machine's IN
    -            /// data bus. Higher-numbered pins are mapped to consecutively more-significant data
    -            /// bits, with a modulo of 32 applied to pin number.
    -            IN_BASE: u5,
    -            /// The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction.
    -            /// In the range 0 to 32 inclusive.
    -            OUT_COUNT: u6,
    -            /// The number of pins asserted by a SET. In the range 0 to 5 inclusive.
    -            SET_COUNT: u3,
    -            /// The number of MSBs of the Delay/Side-set instruction field which are used for
    -            /// side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits,
    -            /// no side-set) and maximum of 5 (all side-set, no delay).
    -            SIDESET_COUNT: u3,
    -        }), base_address + 0xf4);
    -
    -        /// address: 0x502000f8
    -        /// Clock divisor register for state machine 2\n
    -        /// Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256)
    -        pub const SM2_CLKDIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// Fractional part of clock divisor
    -            FRAC: u8,
    -            /// Effective frequency is sysclk/(int + frac/256).\n
    -            /// Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0.
    -            INT: u16,
    -        }), base_address + 0xf8);
    -
    -        /// address: 0x502000fc
    -        /// Execution/behavioural settings for state machine 2
    -        pub const SM2_EXECCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Comparison level for the MOV x, STATUS instruction
    -            STATUS_N: u4,
    -            /// Comparison used for the MOV x, STATUS instruction.
    -            STATUS_SEL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            /// After reaching wrap_top, execution is wrapped to this address.
    -            WRAP_BOTTOM: u5,
    -            /// After reaching this address, execution is wrapped to wrap_bottom.\n
    -            /// If the instruction is a jump, and the jump condition is true, the jump takes
    -            /// priority.
    -            WRAP_TOP: u5,
    -            /// Continuously assert the most recent OUT/SET to the pins
    -            OUT_STICKY: u1,
    -            /// If 1, use a bit of OUT data as an auxiliary write enable\n
    -            /// When used in conjunction with OUT_STICKY, writes with an enable of 0 will\n
    -            /// deassert the latest pin write. This can create useful masking/override
    -            /// behaviour\n
    -            /// due to the priority ordering of state machine pin writes (SM0 < SM1 < ...)
    -            INLINE_OUT_EN: u1,
    -            /// Which data bit to use for inline OUT enable
    -            OUT_EN_SEL: u5,
    -            /// The GPIO number to use as condition for JMP PIN. Unaffected by input mapping.
    -            JMP_PIN: u5,
    -            /// If 1, side-set data is asserted to pin directions, instead of pin values
    -            SIDE_PINDIR: u1,
    -            /// If 1, the MSB of the Delay/Side-set instruction field is used as side-set
    -            /// enable, rather than a side-set data bit. This allows instructions to perform
    -            /// side-set optionally, rather than on every instruction, but the maximum possible
    -            /// side-set width is reduced from 5 to 4. Note that the value of
    -            /// PINCTRL_SIDESET_COUNT is inclusive of this enable bit.
    -            SIDE_EN: u1,
    -            /// If 1, an instruction written to SMx_INSTR is stalled, and latched by the state
    -            /// machine. Will clear to 0 once this instruction completes.
    -            EXEC_STALLED: u1,
    -        }), base_address + 0xfc);
    -
    -        /// address: 0x50200100
    -        /// Control behaviour of the input/output shift registers for state machine 2
    -        pub const SM2_SHIFTCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            /// Push automatically when the input shift register is filled, i.e. on an IN
    -            /// instruction which causes the input shift counter to reach or exceed PUSH_THRESH.
    -            AUTOPUSH: u1,
    -            /// Pull automatically when the output shift register is emptied, i.e. on or
    -            /// following an OUT instruction which causes the output shift counter to reach or
    -            /// exceed PULL_THRESH.
    -            AUTOPULL: u1,
    -            /// 1 = shift input shift register to right (data enters from left). 0 = to left.
    -            IN_SHIFTDIR: u1,
    -            /// 1 = shift out of output shift register to right. 0 = to left.
    -            OUT_SHIFTDIR: u1,
    -            /// Number of bits shifted into ISR before autopush, or conditional push (PUSH
    -            /// IFFULL), will take place.\n
    -            /// Write 0 for value of 32.
    -            PUSH_THRESH: u5,
    -            /// Number of bits shifted out of OSR before autopull, or conditional pull (PULL
    -            /// IFEMPTY), will take place.\n
    -            /// Write 0 for value of 32.
    -            PULL_THRESH: u5,
    -            /// When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.\n
    -            /// RX FIFO is disabled as a result (always reads as both full and empty).\n
    -            /// FIFOs are flushed when this bit is changed.
    -            FJOIN_TX: u1,
    -            /// When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.\n
    -            /// TX FIFO is disabled as a result (always reads as both full and empty).\n
    -            /// FIFOs are flushed when this bit is changed.
    -            FJOIN_RX: u1,
    -        }), base_address + 0x100);
    -
    -        /// address: 0x50200104
    -        /// Current instruction address of state machine 2
    -        pub const SM2_ADDR = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x104);
    -
    -        /// address: 0x50200108
    -        /// Read to see the instruction currently addressed by state machine 2's program
    -        /// counter\n
    -        /// Write to execute an instruction immediately (including jumps) and then resume
    -        /// execution.
    -        pub const SM2_INSTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x108);
    -
    -        /// address: 0x5020010c
    -        /// State machine pin control
    -        pub const SM2_PINCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV
    -            /// PINS instruction. The data written to this pin will always be the
    -            /// least-significant bit of the OUT or MOV data.
    -            OUT_BASE: u5,
    -            /// The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS
    -            /// instruction. The data written to this pin is the least-significant bit of the
    -            /// SET data.
    -            SET_BASE: u5,
    -            /// The lowest-numbered pin that will be affected by a side-set operation. The MSBs
    -            /// of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT)
    -            /// are used for side-set data, with the remaining LSBs used for delay. The
    -            /// least-significant bit of the side-set portion is the bit written to this pin,
    -            /// with more-significant bits written to higher-numbered pins.
    -            SIDESET_BASE: u5,
    -            /// The pin which is mapped to the least-significant bit of a state machine's IN
    -            /// data bus. Higher-numbered pins are mapped to consecutively more-significant data
    -            /// bits, with a modulo of 32 applied to pin number.
    -            IN_BASE: u5,
    -            /// The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction.
    -            /// In the range 0 to 32 inclusive.
    -            OUT_COUNT: u6,
    -            /// The number of pins asserted by a SET. In the range 0 to 5 inclusive.
    -            SET_COUNT: u3,
    -            /// The number of MSBs of the Delay/Side-set instruction field which are used for
    -            /// side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits,
    -            /// no side-set) and maximum of 5 (all side-set, no delay).
    -            SIDESET_COUNT: u3,
    -        }), base_address + 0x10c);
    -
    -        /// address: 0x50200110
    -        /// Clock divisor register for state machine 3\n
    -        /// Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256)
    -        pub const SM3_CLKDIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// Fractional part of clock divisor
    -            FRAC: u8,
    -            /// Effective frequency is sysclk/(int + frac/256).\n
    -            /// Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0.
    -            INT: u16,
    -        }), base_address + 0x110);
    -
    -        /// address: 0x50200114
    -        /// Execution/behavioural settings for state machine 3
    -        pub const SM3_EXECCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Comparison level for the MOV x, STATUS instruction
    -            STATUS_N: u4,
    -            /// Comparison used for the MOV x, STATUS instruction.
    -            STATUS_SEL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            /// After reaching wrap_top, execution is wrapped to this address.
    -            WRAP_BOTTOM: u5,
    -            /// After reaching this address, execution is wrapped to wrap_bottom.\n
    -            /// If the instruction is a jump, and the jump condition is true, the jump takes
    -            /// priority.
    -            WRAP_TOP: u5,
    -            /// Continuously assert the most recent OUT/SET to the pins
    -            OUT_STICKY: u1,
    -            /// If 1, use a bit of OUT data as an auxiliary write enable\n
    -            /// When used in conjunction with OUT_STICKY, writes with an enable of 0 will\n
    -            /// deassert the latest pin write. This can create useful masking/override
    -            /// behaviour\n
    -            /// due to the priority ordering of state machine pin writes (SM0 < SM1 < ...)
    -            INLINE_OUT_EN: u1,
    -            /// Which data bit to use for inline OUT enable
    -            OUT_EN_SEL: u5,
    -            /// The GPIO number to use as condition for JMP PIN. Unaffected by input mapping.
    -            JMP_PIN: u5,
    -            /// If 1, side-set data is asserted to pin directions, instead of pin values
    -            SIDE_PINDIR: u1,
    -            /// If 1, the MSB of the Delay/Side-set instruction field is used as side-set
    -            /// enable, rather than a side-set data bit. This allows instructions to perform
    -            /// side-set optionally, rather than on every instruction, but the maximum possible
    -            /// side-set width is reduced from 5 to 4. Note that the value of
    -            /// PINCTRL_SIDESET_COUNT is inclusive of this enable bit.
    -            SIDE_EN: u1,
    -            /// If 1, an instruction written to SMx_INSTR is stalled, and latched by the state
    -            /// machine. Will clear to 0 once this instruction completes.
    -            EXEC_STALLED: u1,
    -        }), base_address + 0x114);
    -
    -        /// address: 0x50200118
    -        /// Control behaviour of the input/output shift registers for state machine 3
    -        pub const SM3_SHIFTCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            /// Push automatically when the input shift register is filled, i.e. on an IN
    -            /// instruction which causes the input shift counter to reach or exceed PUSH_THRESH.
    -            AUTOPUSH: u1,
    -            /// Pull automatically when the output shift register is emptied, i.e. on or
    -            /// following an OUT instruction which causes the output shift counter to reach or
    -            /// exceed PULL_THRESH.
    -            AUTOPULL: u1,
    -            /// 1 = shift input shift register to right (data enters from left). 0 = to left.
    -            IN_SHIFTDIR: u1,
    -            /// 1 = shift out of output shift register to right. 0 = to left.
    -            OUT_SHIFTDIR: u1,
    -            /// Number of bits shifted into ISR before autopush, or conditional push (PUSH
    -            /// IFFULL), will take place.\n
    -            /// Write 0 for value of 32.
    -            PUSH_THRESH: u5,
    -            /// Number of bits shifted out of OSR before autopull, or conditional pull (PULL
    -            /// IFEMPTY), will take place.\n
    -            /// Write 0 for value of 32.
    -            PULL_THRESH: u5,
    -            /// When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.\n
    -            /// RX FIFO is disabled as a result (always reads as both full and empty).\n
    -            /// FIFOs are flushed when this bit is changed.
    -            FJOIN_TX: u1,
    -            /// When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.\n
    -            /// TX FIFO is disabled as a result (always reads as both full and empty).\n
    -            /// FIFOs are flushed when this bit is changed.
    -            FJOIN_RX: u1,
    -        }), base_address + 0x118);
    -
    -        /// address: 0x5020011c
    -        /// Current instruction address of state machine 3
    -        pub const SM3_ADDR = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x11c);
    -
    -        /// address: 0x50200120
    -        /// Read to see the instruction currently addressed by state machine 3's program
    -        /// counter\n
    -        /// Write to execute an instruction immediately (including jumps) and then resume
    -        /// execution.
    -        pub const SM3_INSTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x120);
    -
    -        /// address: 0x50200124
    -        /// State machine pin control
    -        pub const SM3_PINCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV
    -            /// PINS instruction. The data written to this pin will always be the
    -            /// least-significant bit of the OUT or MOV data.
    -            OUT_BASE: u5,
    -            /// The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS
    -            /// instruction. The data written to this pin is the least-significant bit of the
    -            /// SET data.
    -            SET_BASE: u5,
    -            /// The lowest-numbered pin that will be affected by a side-set operation. The MSBs
    -            /// of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT)
    -            /// are used for side-set data, with the remaining LSBs used for delay. The
    -            /// least-significant bit of the side-set portion is the bit written to this pin,
    -            /// with more-significant bits written to higher-numbered pins.
    -            SIDESET_BASE: u5,
    -            /// The pin which is mapped to the least-significant bit of a state machine's IN
    -            /// data bus. Higher-numbered pins are mapped to consecutively more-significant data
    -            /// bits, with a modulo of 32 applied to pin number.
    -            IN_BASE: u5,
    -            /// The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction.
    -            /// In the range 0 to 32 inclusive.
    -            OUT_COUNT: u6,
    -            /// The number of pins asserted by a SET. In the range 0 to 5 inclusive.
    -            SET_COUNT: u3,
    -            /// The number of MSBs of the Delay/Side-set instruction field which are used for
    -            /// side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits,
    -            /// no side-set) and maximum of 5 (all side-set, no delay).
    -            SIDESET_COUNT: u3,
    -        }), base_address + 0x124);
    -
    -        /// address: 0x50200128
    -        /// Raw Interrupts
    -        pub const INTR = @intToPtr(*volatile Mmio(32, packed struct {
    -            SM0_RXNEMPTY: u1,
    -            SM1_RXNEMPTY: u1,
    -            SM2_RXNEMPTY: u1,
    -            SM3_RXNEMPTY: u1,
    -            SM0_TXNFULL: u1,
    -            SM1_TXNFULL: u1,
    -            SM2_TXNFULL: u1,
    -            SM3_TXNFULL: u1,
    -            SM0: u1,
    -            SM1: u1,
    -            SM2: u1,
    -            SM3: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x128);
    -
    -        /// address: 0x5020012c
    -        /// Interrupt Enable for irq0
    -        pub const IRQ0_INTE = @intToPtr(*volatile Mmio(32, packed struct {
    -            SM0_RXNEMPTY: u1,
    -            SM1_RXNEMPTY: u1,
    -            SM2_RXNEMPTY: u1,
    -            SM3_RXNEMPTY: u1,
    -            SM0_TXNFULL: u1,
    -            SM1_TXNFULL: u1,
    -            SM2_TXNFULL: u1,
    -            SM3_TXNFULL: u1,
    -            SM0: u1,
    -            SM1: u1,
    -            SM2: u1,
    -            SM3: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x12c);
    -
    -        /// address: 0x50200130
    -        /// Interrupt Force for irq0
    -        pub const IRQ0_INTF = @intToPtr(*volatile Mmio(32, packed struct {
    -            SM0_RXNEMPTY: u1,
    -            SM1_RXNEMPTY: u1,
    -            SM2_RXNEMPTY: u1,
    -            SM3_RXNEMPTY: u1,
    -            SM0_TXNFULL: u1,
    -            SM1_TXNFULL: u1,
    -            SM2_TXNFULL: u1,
    -            SM3_TXNFULL: u1,
    -            SM0: u1,
    -            SM1: u1,
    -            SM2: u1,
    -            SM3: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x130);
    -
    -        /// address: 0x50200134
    -        /// Interrupt status after masking & forcing for irq0
    -        pub const IRQ0_INTS = @intToPtr(*volatile Mmio(32, packed struct {
    -            SM0_RXNEMPTY: u1,
    -            SM1_RXNEMPTY: u1,
    -            SM2_RXNEMPTY: u1,
    -            SM3_RXNEMPTY: u1,
    -            SM0_TXNFULL: u1,
    -            SM1_TXNFULL: u1,
    -            SM2_TXNFULL: u1,
    -            SM3_TXNFULL: u1,
    -            SM0: u1,
    -            SM1: u1,
    -            SM2: u1,
    -            SM3: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x134);
    -
    -        /// address: 0x50200138
    -        /// Interrupt Enable for irq1
    -        pub const IRQ1_INTE = @intToPtr(*volatile Mmio(32, packed struct {
    -            SM0_RXNEMPTY: u1,
    -            SM1_RXNEMPTY: u1,
    -            SM2_RXNEMPTY: u1,
    -            SM3_RXNEMPTY: u1,
    -            SM0_TXNFULL: u1,
    -            SM1_TXNFULL: u1,
    -            SM2_TXNFULL: u1,
    -            SM3_TXNFULL: u1,
    -            SM0: u1,
    -            SM1: u1,
    -            SM2: u1,
    -            SM3: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x138);
    -
    -        /// address: 0x5020013c
    -        /// Interrupt Force for irq1
    -        pub const IRQ1_INTF = @intToPtr(*volatile Mmio(32, packed struct {
    -            SM0_RXNEMPTY: u1,
    -            SM1_RXNEMPTY: u1,
    -            SM2_RXNEMPTY: u1,
    -            SM3_RXNEMPTY: u1,
    -            SM0_TXNFULL: u1,
    -            SM1_TXNFULL: u1,
    -            SM2_TXNFULL: u1,
    -            SM3_TXNFULL: u1,
    -            SM0: u1,
    -            SM1: u1,
    -            SM2: u1,
    -            SM3: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x13c);
    -
    -        /// address: 0x50200140
    -        /// Interrupt status after masking & forcing for irq1
    -        pub const IRQ1_INTS = @intToPtr(*volatile Mmio(32, packed struct {
    -            SM0_RXNEMPTY: u1,
    -            SM1_RXNEMPTY: u1,
    -            SM2_RXNEMPTY: u1,
    -            SM3_RXNEMPTY: u1,
    -            SM0_TXNFULL: u1,
    -            SM1_TXNFULL: u1,
    -            SM2_TXNFULL: u1,
    -            SM3_TXNFULL: u1,
    -            SM0: u1,
    -            SM1: u1,
    -            SM2: u1,
    -            SM3: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x140);
    -    };
    -    pub const PIO1 = struct {
    -        pub const base_address = 0x50300000;
    -
    -        /// address: 0x50300000
    -        /// PIO control register
    -        pub const CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Enable/disable each of the four state machines by writing 1/0 to each of these
    -            /// four bits. When disabled, a state machine will cease executing instructions,
    -            /// except those written directly to SMx_INSTR by the system. Multiple bits can be
    -            /// set/cleared at once to run/halt multiple state machines simultaneously.
    -            SM_ENABLE: u4,
    -            /// Write 1 to instantly clear internal SM state which may be otherwise difficult to
    -            /// access and will affect future execution.\n\n
    -            /// Specifically, the following are cleared: input and output shift counters; the
    -            /// contents of the input shift register; the delay counter; the waiting-on-IRQ
    -            /// state; any stalled instruction written to SMx_INSTR or run by OUT/MOV EXEC; any
    -            /// pin write left asserted due to OUT_STICKY.
    -            SM_RESTART: u4,
    -            /// Restart a state machine's clock divider from an initial phase of 0. Clock
    -            /// dividers are free-running, so once started, their output (including fractional
    -            /// jitter) is completely determined by the integer/fractional divisor configured in
    -            /// SMx_CLKDIV. This means that, if multiple clock dividers with the same divisor
    -            /// are restarted simultaneously, by writing multiple 1 bits to this field, the
    -            /// execution clocks of those state machines will run in precise lockstep.\n\n
    -            /// Note that setting/clearing SM_ENABLE does not stop the clock divider from
    -            /// running, so once multiple state machines' clocks are synchronised, it is safe to
    -            /// disable/reenable a state machine, whilst keeping the clock dividers in sync.\n\n
    -            /// Note also that CLKDIV_RESTART can be written to whilst the state machine is
    -            /// running, and this is useful to resynchronise clock dividers after the divisors
    -            /// (SMx_CLKDIV) have been changed on-the-fly.
    -            CLKDIV_RESTART: u4,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x50300004
    -        /// FIFO status register
    -        pub const FSTAT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// State machine RX FIFO is full
    -            RXFULL: u4,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            /// State machine RX FIFO is empty
    -            RXEMPTY: u4,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// State machine TX FIFO is full
    -            TXFULL: u4,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            /// State machine TX FIFO is empty
    -            TXEMPTY: u4,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x50300008
    -        /// FIFO debug register
    -        pub const FDEBUG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// State machine has stalled on full RX FIFO during a blocking PUSH, or an IN with
    -            /// autopush enabled. This flag is also set when a nonblocking PUSH to a full FIFO
    -            /// took place, in which case the state machine has dropped data. Write 1 to clear.
    -            RXSTALL: u4,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            /// RX FIFO underflow (i.e. read-on-empty by the system) has occurred. Write 1 to
    -            /// clear. Note that read-on-empty does not perturb the state of the FIFO in any
    -            /// way, but the data returned by reading from an empty FIFO is undefined, so this
    -            /// flag generally only becomes set due to some kind of software error.
    -            RXUNDER: u4,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// TX FIFO overflow (i.e. write-on-full by the system) has occurred. Write 1 to
    -            /// clear. Note that write-on-full does not alter the state or contents of the FIFO
    -            /// in any way, but the data that the system attempted to write is dropped, so if
    -            /// this flag is set, your software has quite likely dropped some data on the floor.
    -            TXOVER: u4,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            /// State machine has stalled on empty TX FIFO during a blocking PULL, or an OUT
    -            /// with autopull enabled. Write 1 to clear.
    -            TXSTALL: u4,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x5030000c
    -        /// FIFO levels
    -        pub const FLEVEL = @intToPtr(*volatile Mmio(32, packed struct {
    -            TX0: u4,
    -            RX0: u4,
    -            TX1: u4,
    -            RX1: u4,
    -            TX2: u4,
    -            RX2: u4,
    -            TX3: u4,
    -            RX3: u4,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x50300010
    -        /// Direct write access to the TX FIFO for this state machine. Each write pushes one
    -        /// word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO
    -        /// state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO.
    -        pub const TXF0 = @intToPtr(*volatile u32, base_address + 0x10);
    -
    -        /// address: 0x50300014
    -        /// Direct write access to the TX FIFO for this state machine. Each write pushes one
    -        /// word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO
    -        /// state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO.
    -        pub const TXF1 = @intToPtr(*volatile u32, base_address + 0x14);
    -
    -        /// address: 0x50300018
    -        /// Direct write access to the TX FIFO for this state machine. Each write pushes one
    -        /// word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO
    -        /// state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO.
    -        pub const TXF2 = @intToPtr(*volatile u32, base_address + 0x18);
    -
    -        /// address: 0x5030001c
    -        /// Direct write access to the TX FIFO for this state machine. Each write pushes one
    -        /// word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO
    -        /// state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO.
    -        pub const TXF3 = @intToPtr(*volatile u32, base_address + 0x1c);
    -
    -        /// address: 0x50300020
    -        /// Direct read access to the RX FIFO for this state machine. Each read pops one
    -        /// word from the FIFO. Attempting to read from an empty FIFO has no effect on the
    -        /// FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The
    -        /// data returned to the system on a read from an empty FIFO is undefined.
    -        pub const RXF0 = @intToPtr(*volatile u32, base_address + 0x20);
    -
    -        /// address: 0x50300024
    -        /// Direct read access to the RX FIFO for this state machine. Each read pops one
    -        /// word from the FIFO. Attempting to read from an empty FIFO has no effect on the
    -        /// FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The
    -        /// data returned to the system on a read from an empty FIFO is undefined.
    -        pub const RXF1 = @intToPtr(*volatile u32, base_address + 0x24);
    -
    -        /// address: 0x50300028
    -        /// Direct read access to the RX FIFO for this state machine. Each read pops one
    -        /// word from the FIFO. Attempting to read from an empty FIFO has no effect on the
    -        /// FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The
    -        /// data returned to the system on a read from an empty FIFO is undefined.
    -        pub const RXF2 = @intToPtr(*volatile u32, base_address + 0x28);
    -
    -        /// address: 0x5030002c
    -        /// Direct read access to the RX FIFO for this state machine. Each read pops one
    -        /// word from the FIFO. Attempting to read from an empty FIFO has no effect on the
    -        /// FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The
    -        /// data returned to the system on a read from an empty FIFO is undefined.
    -        pub const RXF3 = @intToPtr(*volatile u32, base_address + 0x2c);
    -
    -        /// address: 0x50300030
    -        /// State machine IRQ flags register. Write 1 to clear. There are 8 state machine
    -        /// IRQ flags, which can be set, cleared, and waited on by the state machines.
    -        /// There's no fixed association between flags and state machines -- any state
    -        /// machine can use any flag.\n\n
    -        /// Any of the 8 flags can be used for timing synchronisation between state
    -        /// machines, using IRQ and WAIT instructions. The lower four of these flags are
    -        /// also routed out to system-level interrupt requests, alongside FIFO status
    -        /// interrupts -- see e.g. IRQ0_INTE.
    -        pub const IRQ = @intToPtr(*volatile MmioInt(32, u8), base_address + 0x30);
    -
    -        /// address: 0x50300034
    -        /// Writing a 1 to each of these bits will forcibly assert the corresponding IRQ.
    -        /// Note this is different to the INTF register: writing here affects PIO internal
    -        /// state. INTF just asserts the processor-facing IRQ signal for testing ISRs, and
    -        /// is not visible to the state machines.
    -        pub const IRQ_FORCE = @intToPtr(*volatile MmioInt(32, u8), base_address + 0x34);
    -
    -        /// address: 0x50300038
    -        /// There is a 2-flipflop synchronizer on each GPIO input, which protects PIO logic
    -        /// from metastabilities. This increases input delay, and for fast synchronous IO
    -        /// (e.g. SPI) these synchronizers may need to be bypassed. Each bit in this
    -        /// register corresponds to one GPIO.\n
    -        /// 0 -> input is synchronized (default)\n
    -        /// 1 -> synchronizer is bypassed\n
    -        /// If in doubt, leave this register as all zeroes.
    -        pub const INPUT_SYNC_BYPASS = @intToPtr(*volatile u32, base_address + 0x38);
    -
    -        /// address: 0x5030003c
    -        /// Read to sample the pad output values PIO is currently driving to the GPIOs. On
    -        /// RP2040 there are 30 GPIOs, so the two most significant bits are hardwired to 0.
    -        pub const DBG_PADOUT = @intToPtr(*volatile u32, base_address + 0x3c);
    -
    -        /// address: 0x50300040
    -        /// Read to sample the pad output enables (direction) PIO is currently driving to
    -        /// the GPIOs. On RP2040 there are 30 GPIOs, so the two most significant bits are
    -        /// hardwired to 0.
    -        pub const DBG_PADOE = @intToPtr(*volatile u32, base_address + 0x40);
    -
    -        /// address: 0x50300044
    -        /// The PIO hardware has some free parameters that may vary between chip products.\n
    -        /// These should be provided in the chip datasheet, but are also exposed here.
    -        pub const DBG_CFGINFO = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The depth of the state machine TX/RX FIFOs, measured in words.\n
    -            /// Joining fifos via SHIFTCTRL_FJOIN gives one FIFO with double\n
    -            /// this depth.
    -            FIFO_DEPTH: u6,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            /// The number of state machines this PIO instance is equipped with.
    -            SM_COUNT: u4,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            /// The size of the instruction memory, measured in units of one instruction
    -            IMEM_SIZE: u6,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x50300048
    -        /// Write-only access to instruction memory location 0
    -        pub const INSTR_MEM0 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x48);
    -
    -        /// address: 0x5030004c
    -        /// Write-only access to instruction memory location 1
    -        pub const INSTR_MEM1 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x4c);
    -
    -        /// address: 0x50300050
    -        /// Write-only access to instruction memory location 2
    -        pub const INSTR_MEM2 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x50);
    -
    -        /// address: 0x50300054
    -        /// Write-only access to instruction memory location 3
    -        pub const INSTR_MEM3 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x54);
    -
    -        /// address: 0x50300058
    -        /// Write-only access to instruction memory location 4
    -        pub const INSTR_MEM4 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x58);
    -
    -        /// address: 0x5030005c
    -        /// Write-only access to instruction memory location 5
    -        pub const INSTR_MEM5 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x5c);
    -
    -        /// address: 0x50300060
    -        /// Write-only access to instruction memory location 6
    -        pub const INSTR_MEM6 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x60);
    -
    -        /// address: 0x50300064
    -        /// Write-only access to instruction memory location 7
    -        pub const INSTR_MEM7 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x64);
    -
    -        /// address: 0x50300068
    -        /// Write-only access to instruction memory location 8
    -        pub const INSTR_MEM8 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x68);
    -
    -        /// address: 0x5030006c
    -        /// Write-only access to instruction memory location 9
    -        pub const INSTR_MEM9 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x6c);
    -
    -        /// address: 0x50300070
    -        /// Write-only access to instruction memory location 10
    -        pub const INSTR_MEM10 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x70);
    -
    -        /// address: 0x50300074
    -        /// Write-only access to instruction memory location 11
    -        pub const INSTR_MEM11 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x74);
    -
    -        /// address: 0x50300078
    -        /// Write-only access to instruction memory location 12
    -        pub const INSTR_MEM12 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x78);
    -
    -        /// address: 0x5030007c
    -        /// Write-only access to instruction memory location 13
    -        pub const INSTR_MEM13 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x7c);
    -
    -        /// address: 0x50300080
    -        /// Write-only access to instruction memory location 14
    -        pub const INSTR_MEM14 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x80);
    -
    -        /// address: 0x50300084
    -        /// Write-only access to instruction memory location 15
    -        pub const INSTR_MEM15 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x84);
    -
    -        /// address: 0x50300088
    -        /// Write-only access to instruction memory location 16
    -        pub const INSTR_MEM16 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x88);
    -
    -        /// address: 0x5030008c
    -        /// Write-only access to instruction memory location 17
    -        pub const INSTR_MEM17 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x8c);
    -
    -        /// address: 0x50300090
    -        /// Write-only access to instruction memory location 18
    -        pub const INSTR_MEM18 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x90);
    -
    -        /// address: 0x50300094
    -        /// Write-only access to instruction memory location 19
    -        pub const INSTR_MEM19 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x94);
    -
    -        /// address: 0x50300098
    -        /// Write-only access to instruction memory location 20
    -        pub const INSTR_MEM20 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x98);
    -
    -        /// address: 0x5030009c
    -        /// Write-only access to instruction memory location 21
    -        pub const INSTR_MEM21 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x9c);
    -
    -        /// address: 0x503000a0
    -        /// Write-only access to instruction memory location 22
    -        pub const INSTR_MEM22 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xa0);
    -
    -        /// address: 0x503000a4
    -        /// Write-only access to instruction memory location 23
    -        pub const INSTR_MEM23 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xa4);
    -
    -        /// address: 0x503000a8
    -        /// Write-only access to instruction memory location 24
    -        pub const INSTR_MEM24 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xa8);
    -
    -        /// address: 0x503000ac
    -        /// Write-only access to instruction memory location 25
    -        pub const INSTR_MEM25 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xac);
    -
    -        /// address: 0x503000b0
    -        /// Write-only access to instruction memory location 26
    -        pub const INSTR_MEM26 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xb0);
    -
    -        /// address: 0x503000b4
    -        /// Write-only access to instruction memory location 27
    -        pub const INSTR_MEM27 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xb4);
    -
    -        /// address: 0x503000b8
    -        /// Write-only access to instruction memory location 28
    -        pub const INSTR_MEM28 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xb8);
    -
    -        /// address: 0x503000bc
    -        /// Write-only access to instruction memory location 29
    -        pub const INSTR_MEM29 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xbc);
    -
    -        /// address: 0x503000c0
    -        /// Write-only access to instruction memory location 30
    -        pub const INSTR_MEM30 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xc0);
    -
    -        /// address: 0x503000c4
    -        /// Write-only access to instruction memory location 31
    -        pub const INSTR_MEM31 = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xc4);
    -
    -        /// address: 0x503000c8
    -        /// Clock divisor register for state machine 0\n
    -        /// Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256)
    -        pub const SM0_CLKDIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// Fractional part of clock divisor
    -            FRAC: u8,
    -            /// Effective frequency is sysclk/(int + frac/256).\n
    -            /// Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0.
    -            INT: u16,
    -        }), base_address + 0xc8);
    -
    -        /// address: 0x503000cc
    -        /// Execution/behavioural settings for state machine 0
    -        pub const SM0_EXECCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Comparison level for the MOV x, STATUS instruction
    -            STATUS_N: u4,
    -            /// Comparison used for the MOV x, STATUS instruction.
    -            STATUS_SEL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            /// After reaching wrap_top, execution is wrapped to this address.
    -            WRAP_BOTTOM: u5,
    -            /// After reaching this address, execution is wrapped to wrap_bottom.\n
    -            /// If the instruction is a jump, and the jump condition is true, the jump takes
    -            /// priority.
    -            WRAP_TOP: u5,
    -            /// Continuously assert the most recent OUT/SET to the pins
    -            OUT_STICKY: u1,
    -            /// If 1, use a bit of OUT data as an auxiliary write enable\n
    -            /// When used in conjunction with OUT_STICKY, writes with an enable of 0 will\n
    -            /// deassert the latest pin write. This can create useful masking/override
    -            /// behaviour\n
    -            /// due to the priority ordering of state machine pin writes (SM0 < SM1 < ...)
    -            INLINE_OUT_EN: u1,
    -            /// Which data bit to use for inline OUT enable
    -            OUT_EN_SEL: u5,
    -            /// The GPIO number to use as condition for JMP PIN. Unaffected by input mapping.
    -            JMP_PIN: u5,
    -            /// If 1, side-set data is asserted to pin directions, instead of pin values
    -            SIDE_PINDIR: u1,
    -            /// If 1, the MSB of the Delay/Side-set instruction field is used as side-set
    -            /// enable, rather than a side-set data bit. This allows instructions to perform
    -            /// side-set optionally, rather than on every instruction, but the maximum possible
    -            /// side-set width is reduced from 5 to 4. Note that the value of
    -            /// PINCTRL_SIDESET_COUNT is inclusive of this enable bit.
    -            SIDE_EN: u1,
    -            /// If 1, an instruction written to SMx_INSTR is stalled, and latched by the state
    -            /// machine. Will clear to 0 once this instruction completes.
    -            EXEC_STALLED: u1,
    -        }), base_address + 0xcc);
    -
    -        /// address: 0x503000d0
    -        /// Control behaviour of the input/output shift registers for state machine 0
    -        pub const SM0_SHIFTCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            /// Push automatically when the input shift register is filled, i.e. on an IN
    -            /// instruction which causes the input shift counter to reach or exceed PUSH_THRESH.
    -            AUTOPUSH: u1,
    -            /// Pull automatically when the output shift register is emptied, i.e. on or
    -            /// following an OUT instruction which causes the output shift counter to reach or
    -            /// exceed PULL_THRESH.
    -            AUTOPULL: u1,
    -            /// 1 = shift input shift register to right (data enters from left). 0 = to left.
    -            IN_SHIFTDIR: u1,
    -            /// 1 = shift out of output shift register to right. 0 = to left.
    -            OUT_SHIFTDIR: u1,
    -            /// Number of bits shifted into ISR before autopush, or conditional push (PUSH
    -            /// IFFULL), will take place.\n
    -            /// Write 0 for value of 32.
    -            PUSH_THRESH: u5,
    -            /// Number of bits shifted out of OSR before autopull, or conditional pull (PULL
    -            /// IFEMPTY), will take place.\n
    -            /// Write 0 for value of 32.
    -            PULL_THRESH: u5,
    -            /// When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.\n
    -            /// RX FIFO is disabled as a result (always reads as both full and empty).\n
    -            /// FIFOs are flushed when this bit is changed.
    -            FJOIN_TX: u1,
    -            /// When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.\n
    -            /// TX FIFO is disabled as a result (always reads as both full and empty).\n
    -            /// FIFOs are flushed when this bit is changed.
    -            FJOIN_RX: u1,
    -        }), base_address + 0xd0);
    -
    -        /// address: 0x503000d4
    -        /// Current instruction address of state machine 0
    -        pub const SM0_ADDR = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xd4);
    -
    -        /// address: 0x503000d8
    -        /// Read to see the instruction currently addressed by state machine 0's program
    -        /// counter\n
    -        /// Write to execute an instruction immediately (including jumps) and then resume
    -        /// execution.
    -        pub const SM0_INSTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xd8);
    -
    -        /// address: 0x503000dc
    -        /// State machine pin control
    -        pub const SM0_PINCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV
    -            /// PINS instruction. The data written to this pin will always be the
    -            /// least-significant bit of the OUT or MOV data.
    -            OUT_BASE: u5,
    -            /// The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS
    -            /// instruction. The data written to this pin is the least-significant bit of the
    -            /// SET data.
    -            SET_BASE: u5,
    -            /// The lowest-numbered pin that will be affected by a side-set operation. The MSBs
    -            /// of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT)
    -            /// are used for side-set data, with the remaining LSBs used for delay. The
    -            /// least-significant bit of the side-set portion is the bit written to this pin,
    -            /// with more-significant bits written to higher-numbered pins.
    -            SIDESET_BASE: u5,
    -            /// The pin which is mapped to the least-significant bit of a state machine's IN
    -            /// data bus. Higher-numbered pins are mapped to consecutively more-significant data
    -            /// bits, with a modulo of 32 applied to pin number.
    -            IN_BASE: u5,
    -            /// The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction.
    -            /// In the range 0 to 32 inclusive.
    -            OUT_COUNT: u6,
    -            /// The number of pins asserted by a SET. In the range 0 to 5 inclusive.
    -            SET_COUNT: u3,
    -            /// The number of MSBs of the Delay/Side-set instruction field which are used for
    -            /// side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits,
    -            /// no side-set) and maximum of 5 (all side-set, no delay).
    -            SIDESET_COUNT: u3,
    -        }), base_address + 0xdc);
    -
    -        /// address: 0x503000e0
    -        /// Clock divisor register for state machine 1\n
    -        /// Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256)
    -        pub const SM1_CLKDIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// Fractional part of clock divisor
    -            FRAC: u8,
    -            /// Effective frequency is sysclk/(int + frac/256).\n
    -            /// Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0.
    -            INT: u16,
    -        }), base_address + 0xe0);
    -
    -        /// address: 0x503000e4
    -        /// Execution/behavioural settings for state machine 1
    -        pub const SM1_EXECCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Comparison level for the MOV x, STATUS instruction
    -            STATUS_N: u4,
    -            /// Comparison used for the MOV x, STATUS instruction.
    -            STATUS_SEL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            /// After reaching wrap_top, execution is wrapped to this address.
    -            WRAP_BOTTOM: u5,
    -            /// After reaching this address, execution is wrapped to wrap_bottom.\n
    -            /// If the instruction is a jump, and the jump condition is true, the jump takes
    -            /// priority.
    -            WRAP_TOP: u5,
    -            /// Continuously assert the most recent OUT/SET to the pins
    -            OUT_STICKY: u1,
    -            /// If 1, use a bit of OUT data as an auxiliary write enable\n
    -            /// When used in conjunction with OUT_STICKY, writes with an enable of 0 will\n
    -            /// deassert the latest pin write. This can create useful masking/override
    -            /// behaviour\n
    -            /// due to the priority ordering of state machine pin writes (SM0 < SM1 < ...)
    -            INLINE_OUT_EN: u1,
    -            /// Which data bit to use for inline OUT enable
    -            OUT_EN_SEL: u5,
    -            /// The GPIO number to use as condition for JMP PIN. Unaffected by input mapping.
    -            JMP_PIN: u5,
    -            /// If 1, side-set data is asserted to pin directions, instead of pin values
    -            SIDE_PINDIR: u1,
    -            /// If 1, the MSB of the Delay/Side-set instruction field is used as side-set
    -            /// enable, rather than a side-set data bit. This allows instructions to perform
    -            /// side-set optionally, rather than on every instruction, but the maximum possible
    -            /// side-set width is reduced from 5 to 4. Note that the value of
    -            /// PINCTRL_SIDESET_COUNT is inclusive of this enable bit.
    -            SIDE_EN: u1,
    -            /// If 1, an instruction written to SMx_INSTR is stalled, and latched by the state
    -            /// machine. Will clear to 0 once this instruction completes.
    -            EXEC_STALLED: u1,
    -        }), base_address + 0xe4);
    -
    -        /// address: 0x503000e8
    -        /// Control behaviour of the input/output shift registers for state machine 1
    -        pub const SM1_SHIFTCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            /// Push automatically when the input shift register is filled, i.e. on an IN
    -            /// instruction which causes the input shift counter to reach or exceed PUSH_THRESH.
    -            AUTOPUSH: u1,
    -            /// Pull automatically when the output shift register is emptied, i.e. on or
    -            /// following an OUT instruction which causes the output shift counter to reach or
    -            /// exceed PULL_THRESH.
    -            AUTOPULL: u1,
    -            /// 1 = shift input shift register to right (data enters from left). 0 = to left.
    -            IN_SHIFTDIR: u1,
    -            /// 1 = shift out of output shift register to right. 0 = to left.
    -            OUT_SHIFTDIR: u1,
    -            /// Number of bits shifted into ISR before autopush, or conditional push (PUSH
    -            /// IFFULL), will take place.\n
    -            /// Write 0 for value of 32.
    -            PUSH_THRESH: u5,
    -            /// Number of bits shifted out of OSR before autopull, or conditional pull (PULL
    -            /// IFEMPTY), will take place.\n
    -            /// Write 0 for value of 32.
    -            PULL_THRESH: u5,
    -            /// When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.\n
    -            /// RX FIFO is disabled as a result (always reads as both full and empty).\n
    -            /// FIFOs are flushed when this bit is changed.
    -            FJOIN_TX: u1,
    -            /// When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.\n
    -            /// TX FIFO is disabled as a result (always reads as both full and empty).\n
    -            /// FIFOs are flushed when this bit is changed.
    -            FJOIN_RX: u1,
    -        }), base_address + 0xe8);
    -
    -        /// address: 0x503000ec
    -        /// Current instruction address of state machine 1
    -        pub const SM1_ADDR = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xec);
    -
    -        /// address: 0x503000f0
    -        /// Read to see the instruction currently addressed by state machine 1's program
    -        /// counter\n
    -        /// Write to execute an instruction immediately (including jumps) and then resume
    -        /// execution.
    -        pub const SM1_INSTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0xf0);
    -
    -        /// address: 0x503000f4
    -        /// State machine pin control
    -        pub const SM1_PINCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV
    -            /// PINS instruction. The data written to this pin will always be the
    -            /// least-significant bit of the OUT or MOV data.
    -            OUT_BASE: u5,
    -            /// The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS
    -            /// instruction. The data written to this pin is the least-significant bit of the
    -            /// SET data.
    -            SET_BASE: u5,
    -            /// The lowest-numbered pin that will be affected by a side-set operation. The MSBs
    -            /// of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT)
    -            /// are used for side-set data, with the remaining LSBs used for delay. The
    -            /// least-significant bit of the side-set portion is the bit written to this pin,
    -            /// with more-significant bits written to higher-numbered pins.
    -            SIDESET_BASE: u5,
    -            /// The pin which is mapped to the least-significant bit of a state machine's IN
    -            /// data bus. Higher-numbered pins are mapped to consecutively more-significant data
    -            /// bits, with a modulo of 32 applied to pin number.
    -            IN_BASE: u5,
    -            /// The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction.
    -            /// In the range 0 to 32 inclusive.
    -            OUT_COUNT: u6,
    -            /// The number of pins asserted by a SET. In the range 0 to 5 inclusive.
    -            SET_COUNT: u3,
    -            /// The number of MSBs of the Delay/Side-set instruction field which are used for
    -            /// side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits,
    -            /// no side-set) and maximum of 5 (all side-set, no delay).
    -            SIDESET_COUNT: u3,
    -        }), base_address + 0xf4);
    -
    -        /// address: 0x503000f8
    -        /// Clock divisor register for state machine 2\n
    -        /// Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256)
    -        pub const SM2_CLKDIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// Fractional part of clock divisor
    -            FRAC: u8,
    -            /// Effective frequency is sysclk/(int + frac/256).\n
    -            /// Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0.
    -            INT: u16,
    -        }), base_address + 0xf8);
    -
    -        /// address: 0x503000fc
    -        /// Execution/behavioural settings for state machine 2
    -        pub const SM2_EXECCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Comparison level for the MOV x, STATUS instruction
    -            STATUS_N: u4,
    -            /// Comparison used for the MOV x, STATUS instruction.
    -            STATUS_SEL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            /// After reaching wrap_top, execution is wrapped to this address.
    -            WRAP_BOTTOM: u5,
    -            /// After reaching this address, execution is wrapped to wrap_bottom.\n
    -            /// If the instruction is a jump, and the jump condition is true, the jump takes
    -            /// priority.
    -            WRAP_TOP: u5,
    -            /// Continuously assert the most recent OUT/SET to the pins
    -            OUT_STICKY: u1,
    -            /// If 1, use a bit of OUT data as an auxiliary write enable\n
    -            /// When used in conjunction with OUT_STICKY, writes with an enable of 0 will\n
    -            /// deassert the latest pin write. This can create useful masking/override
    -            /// behaviour\n
    -            /// due to the priority ordering of state machine pin writes (SM0 < SM1 < ...)
    -            INLINE_OUT_EN: u1,
    -            /// Which data bit to use for inline OUT enable
    -            OUT_EN_SEL: u5,
    -            /// The GPIO number to use as condition for JMP PIN. Unaffected by input mapping.
    -            JMP_PIN: u5,
    -            /// If 1, side-set data is asserted to pin directions, instead of pin values
    -            SIDE_PINDIR: u1,
    -            /// If 1, the MSB of the Delay/Side-set instruction field is used as side-set
    -            /// enable, rather than a side-set data bit. This allows instructions to perform
    -            /// side-set optionally, rather than on every instruction, but the maximum possible
    -            /// side-set width is reduced from 5 to 4. Note that the value of
    -            /// PINCTRL_SIDESET_COUNT is inclusive of this enable bit.
    -            SIDE_EN: u1,
    -            /// If 1, an instruction written to SMx_INSTR is stalled, and latched by the state
    -            /// machine. Will clear to 0 once this instruction completes.
    -            EXEC_STALLED: u1,
    -        }), base_address + 0xfc);
    -
    -        /// address: 0x50300100
    -        /// Control behaviour of the input/output shift registers for state machine 2
    -        pub const SM2_SHIFTCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            /// Push automatically when the input shift register is filled, i.e. on an IN
    -            /// instruction which causes the input shift counter to reach or exceed PUSH_THRESH.
    -            AUTOPUSH: u1,
    -            /// Pull automatically when the output shift register is emptied, i.e. on or
    -            /// following an OUT instruction which causes the output shift counter to reach or
    -            /// exceed PULL_THRESH.
    -            AUTOPULL: u1,
    -            /// 1 = shift input shift register to right (data enters from left). 0 = to left.
    -            IN_SHIFTDIR: u1,
    -            /// 1 = shift out of output shift register to right. 0 = to left.
    -            OUT_SHIFTDIR: u1,
    -            /// Number of bits shifted into ISR before autopush, or conditional push (PUSH
    -            /// IFFULL), will take place.\n
    -            /// Write 0 for value of 32.
    -            PUSH_THRESH: u5,
    -            /// Number of bits shifted out of OSR before autopull, or conditional pull (PULL
    -            /// IFEMPTY), will take place.\n
    -            /// Write 0 for value of 32.
    -            PULL_THRESH: u5,
    -            /// When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.\n
    -            /// RX FIFO is disabled as a result (always reads as both full and empty).\n
    -            /// FIFOs are flushed when this bit is changed.
    -            FJOIN_TX: u1,
    -            /// When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.\n
    -            /// TX FIFO is disabled as a result (always reads as both full and empty).\n
    -            /// FIFOs are flushed when this bit is changed.
    -            FJOIN_RX: u1,
    -        }), base_address + 0x100);
    -
    -        /// address: 0x50300104
    -        /// Current instruction address of state machine 2
    -        pub const SM2_ADDR = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x104);
    -
    -        /// address: 0x50300108
    -        /// Read to see the instruction currently addressed by state machine 2's program
    -        /// counter\n
    -        /// Write to execute an instruction immediately (including jumps) and then resume
    -        /// execution.
    -        pub const SM2_INSTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x108);
    -
    -        /// address: 0x5030010c
    -        /// State machine pin control
    -        pub const SM2_PINCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV
    -            /// PINS instruction. The data written to this pin will always be the
    -            /// least-significant bit of the OUT or MOV data.
    -            OUT_BASE: u5,
    -            /// The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS
    -            /// instruction. The data written to this pin is the least-significant bit of the
    -            /// SET data.
    -            SET_BASE: u5,
    -            /// The lowest-numbered pin that will be affected by a side-set operation. The MSBs
    -            /// of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT)
    -            /// are used for side-set data, with the remaining LSBs used for delay. The
    -            /// least-significant bit of the side-set portion is the bit written to this pin,
    -            /// with more-significant bits written to higher-numbered pins.
    -            SIDESET_BASE: u5,
    -            /// The pin which is mapped to the least-significant bit of a state machine's IN
    -            /// data bus. Higher-numbered pins are mapped to consecutively more-significant data
    -            /// bits, with a modulo of 32 applied to pin number.
    -            IN_BASE: u5,
    -            /// The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction.
    -            /// In the range 0 to 32 inclusive.
    -            OUT_COUNT: u6,
    -            /// The number of pins asserted by a SET. In the range 0 to 5 inclusive.
    -            SET_COUNT: u3,
    -            /// The number of MSBs of the Delay/Side-set instruction field which are used for
    -            /// side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits,
    -            /// no side-set) and maximum of 5 (all side-set, no delay).
    -            SIDESET_COUNT: u3,
    -        }), base_address + 0x10c);
    -
    -        /// address: 0x50300110
    -        /// Clock divisor register for state machine 3\n
    -        /// Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256)
    -        pub const SM3_CLKDIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            /// Fractional part of clock divisor
    -            FRAC: u8,
    -            /// Effective frequency is sysclk/(int + frac/256).\n
    -            /// Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0.
    -            INT: u16,
    -        }), base_address + 0x110);
    -
    -        /// address: 0x50300114
    -        /// Execution/behavioural settings for state machine 3
    -        pub const SM3_EXECCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Comparison level for the MOV x, STATUS instruction
    -            STATUS_N: u4,
    -            /// Comparison used for the MOV x, STATUS instruction.
    -            STATUS_SEL: u1,
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            /// After reaching wrap_top, execution is wrapped to this address.
    -            WRAP_BOTTOM: u5,
    -            /// After reaching this address, execution is wrapped to wrap_bottom.\n
    -            /// If the instruction is a jump, and the jump condition is true, the jump takes
    -            /// priority.
    -            WRAP_TOP: u5,
    -            /// Continuously assert the most recent OUT/SET to the pins
    -            OUT_STICKY: u1,
    -            /// If 1, use a bit of OUT data as an auxiliary write enable\n
    -            /// When used in conjunction with OUT_STICKY, writes with an enable of 0 will\n
    -            /// deassert the latest pin write. This can create useful masking/override
    -            /// behaviour\n
    -            /// due to the priority ordering of state machine pin writes (SM0 < SM1 < ...)
    -            INLINE_OUT_EN: u1,
    -            /// Which data bit to use for inline OUT enable
    -            OUT_EN_SEL: u5,
    -            /// The GPIO number to use as condition for JMP PIN. Unaffected by input mapping.
    -            JMP_PIN: u5,
    -            /// If 1, side-set data is asserted to pin directions, instead of pin values
    -            SIDE_PINDIR: u1,
    -            /// If 1, the MSB of the Delay/Side-set instruction field is used as side-set
    -            /// enable, rather than a side-set data bit. This allows instructions to perform
    -            /// side-set optionally, rather than on every instruction, but the maximum possible
    -            /// side-set width is reduced from 5 to 4. Note that the value of
    -            /// PINCTRL_SIDESET_COUNT is inclusive of this enable bit.
    -            SIDE_EN: u1,
    -            /// If 1, an instruction written to SMx_INSTR is stalled, and latched by the state
    -            /// machine. Will clear to 0 once this instruction completes.
    -            EXEC_STALLED: u1,
    -        }), base_address + 0x114);
    -
    -        /// address: 0x50300118
    -        /// Control behaviour of the input/output shift registers for state machine 3
    -        pub const SM3_SHIFTCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            /// Push automatically when the input shift register is filled, i.e. on an IN
    -            /// instruction which causes the input shift counter to reach or exceed PUSH_THRESH.
    -            AUTOPUSH: u1,
    -            /// Pull automatically when the output shift register is emptied, i.e. on or
    -            /// following an OUT instruction which causes the output shift counter to reach or
    -            /// exceed PULL_THRESH.
    -            AUTOPULL: u1,
    -            /// 1 = shift input shift register to right (data enters from left). 0 = to left.
    -            IN_SHIFTDIR: u1,
    -            /// 1 = shift out of output shift register to right. 0 = to left.
    -            OUT_SHIFTDIR: u1,
    -            /// Number of bits shifted into ISR before autopush, or conditional push (PUSH
    -            /// IFFULL), will take place.\n
    -            /// Write 0 for value of 32.
    -            PUSH_THRESH: u5,
    -            /// Number of bits shifted out of OSR before autopull, or conditional pull (PULL
    -            /// IFEMPTY), will take place.\n
    -            /// Write 0 for value of 32.
    -            PULL_THRESH: u5,
    -            /// When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.\n
    -            /// RX FIFO is disabled as a result (always reads as both full and empty).\n
    -            /// FIFOs are flushed when this bit is changed.
    -            FJOIN_TX: u1,
    -            /// When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.\n
    -            /// TX FIFO is disabled as a result (always reads as both full and empty).\n
    -            /// FIFOs are flushed when this bit is changed.
    -            FJOIN_RX: u1,
    -        }), base_address + 0x118);
    -
    -        /// address: 0x5030011c
    -        /// Current instruction address of state machine 3
    -        pub const SM3_ADDR = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x11c);
    -
    -        /// address: 0x50300120
    -        /// Read to see the instruction currently addressed by state machine 3's program
    -        /// counter\n
    -        /// Write to execute an instruction immediately (including jumps) and then resume
    -        /// execution.
    -        pub const SM3_INSTR = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x120);
    -
    -        /// address: 0x50300124
    -        /// State machine pin control
    -        pub const SM3_PINCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV
    -            /// PINS instruction. The data written to this pin will always be the
    -            /// least-significant bit of the OUT or MOV data.
    -            OUT_BASE: u5,
    -            /// The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS
    -            /// instruction. The data written to this pin is the least-significant bit of the
    -            /// SET data.
    -            SET_BASE: u5,
    -            /// The lowest-numbered pin that will be affected by a side-set operation. The MSBs
    -            /// of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT)
    -            /// are used for side-set data, with the remaining LSBs used for delay. The
    -            /// least-significant bit of the side-set portion is the bit written to this pin,
    -            /// with more-significant bits written to higher-numbered pins.
    -            SIDESET_BASE: u5,
    -            /// The pin which is mapped to the least-significant bit of a state machine's IN
    -            /// data bus. Higher-numbered pins are mapped to consecutively more-significant data
    -            /// bits, with a modulo of 32 applied to pin number.
    -            IN_BASE: u5,
    -            /// The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction.
    -            /// In the range 0 to 32 inclusive.
    -            OUT_COUNT: u6,
    -            /// The number of pins asserted by a SET. In the range 0 to 5 inclusive.
    -            SET_COUNT: u3,
    -            /// The number of MSBs of the Delay/Side-set instruction field which are used for
    -            /// side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits,
    -            /// no side-set) and maximum of 5 (all side-set, no delay).
    -            SIDESET_COUNT: u3,
    -        }), base_address + 0x124);
    -
    -        /// address: 0x50300128
    -        /// Raw Interrupts
    -        pub const INTR = @intToPtr(*volatile Mmio(32, packed struct {
    -            SM0_RXNEMPTY: u1,
    -            SM1_RXNEMPTY: u1,
    -            SM2_RXNEMPTY: u1,
    -            SM3_RXNEMPTY: u1,
    -            SM0_TXNFULL: u1,
    -            SM1_TXNFULL: u1,
    -            SM2_TXNFULL: u1,
    -            SM3_TXNFULL: u1,
    -            SM0: u1,
    -            SM1: u1,
    -            SM2: u1,
    -            SM3: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x128);
    -
    -        /// address: 0x5030012c
    -        /// Interrupt Enable for irq0
    -        pub const IRQ0_INTE = @intToPtr(*volatile Mmio(32, packed struct {
    -            SM0_RXNEMPTY: u1,
    -            SM1_RXNEMPTY: u1,
    -            SM2_RXNEMPTY: u1,
    -            SM3_RXNEMPTY: u1,
    -            SM0_TXNFULL: u1,
    -            SM1_TXNFULL: u1,
    -            SM2_TXNFULL: u1,
    -            SM3_TXNFULL: u1,
    -            SM0: u1,
    -            SM1: u1,
    -            SM2: u1,
    -            SM3: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x12c);
    -
    -        /// address: 0x50300130
    -        /// Interrupt Force for irq0
    -        pub const IRQ0_INTF = @intToPtr(*volatile Mmio(32, packed struct {
    -            SM0_RXNEMPTY: u1,
    -            SM1_RXNEMPTY: u1,
    -            SM2_RXNEMPTY: u1,
    -            SM3_RXNEMPTY: u1,
    -            SM0_TXNFULL: u1,
    -            SM1_TXNFULL: u1,
    -            SM2_TXNFULL: u1,
    -            SM3_TXNFULL: u1,
    -            SM0: u1,
    -            SM1: u1,
    -            SM2: u1,
    -            SM3: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x130);
    -
    -        /// address: 0x50300134
    -        /// Interrupt status after masking & forcing for irq0
    -        pub const IRQ0_INTS = @intToPtr(*volatile Mmio(32, packed struct {
    -            SM0_RXNEMPTY: u1,
    -            SM1_RXNEMPTY: u1,
    -            SM2_RXNEMPTY: u1,
    -            SM3_RXNEMPTY: u1,
    -            SM0_TXNFULL: u1,
    -            SM1_TXNFULL: u1,
    -            SM2_TXNFULL: u1,
    -            SM3_TXNFULL: u1,
    -            SM0: u1,
    -            SM1: u1,
    -            SM2: u1,
    -            SM3: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x134);
    -
    -        /// address: 0x50300138
    -        /// Interrupt Enable for irq1
    -        pub const IRQ1_INTE = @intToPtr(*volatile Mmio(32, packed struct {
    -            SM0_RXNEMPTY: u1,
    -            SM1_RXNEMPTY: u1,
    -            SM2_RXNEMPTY: u1,
    -            SM3_RXNEMPTY: u1,
    -            SM0_TXNFULL: u1,
    -            SM1_TXNFULL: u1,
    -            SM2_TXNFULL: u1,
    -            SM3_TXNFULL: u1,
    -            SM0: u1,
    -            SM1: u1,
    -            SM2: u1,
    -            SM3: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x138);
    -
    -        /// address: 0x5030013c
    -        /// Interrupt Force for irq1
    -        pub const IRQ1_INTF = @intToPtr(*volatile Mmio(32, packed struct {
    -            SM0_RXNEMPTY: u1,
    -            SM1_RXNEMPTY: u1,
    -            SM2_RXNEMPTY: u1,
    -            SM3_RXNEMPTY: u1,
    -            SM0_TXNFULL: u1,
    -            SM1_TXNFULL: u1,
    -            SM2_TXNFULL: u1,
    -            SM3_TXNFULL: u1,
    -            SM0: u1,
    -            SM1: u1,
    -            SM2: u1,
    -            SM3: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x13c);
    -
    -        /// address: 0x50300140
    -        /// Interrupt status after masking & forcing for irq1
    -        pub const IRQ1_INTS = @intToPtr(*volatile Mmio(32, packed struct {
    -            SM0_RXNEMPTY: u1,
    -            SM1_RXNEMPTY: u1,
    -            SM2_RXNEMPTY: u1,
    -            SM3_RXNEMPTY: u1,
    -            SM0_TXNFULL: u1,
    -            SM1_TXNFULL: u1,
    -            SM2_TXNFULL: u1,
    -            SM3_TXNFULL: u1,
    -            SM0: u1,
    -            SM1: u1,
    -            SM2: u1,
    -            SM3: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -        }), base_address + 0x140);
    -    };
    -
    -    /// Single-cycle IO block\n
    -    /// Provides core-local and inter-core hardware for the two processors, with
    -    /// single-cycle access.
    -    pub const SIO = struct {
    -        pub const base_address = 0xd0000000;
    -        pub const version = "1";
    -
    -        /// address: 0xd0000000
    -        /// Processor core identifier\n
    -        /// Value is 0 when read from processor core 0, and 1 when read from processor core
    -        /// 1.
    -        pub const CPUID = @intToPtr(*volatile u32, base_address + 0x0);
    -
    -        /// address: 0xd0000004
    -        /// Input value for GPIO pins
    -        pub const GPIO_IN = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x4);
    -
    -        /// address: 0xd0000008
    -        /// Input value for QSPI pins
    -        pub const GPIO_HI_IN = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x8);
    -
    -        /// address: 0xd0000010
    -        /// GPIO output value
    -        pub const GPIO_OUT = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x10);
    -
    -        /// address: 0xd0000014
    -        /// GPIO output value set
    -        pub const GPIO_OUT_SET = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x14);
    -
    -        /// address: 0xd0000018
    -        /// GPIO output value clear
    -        pub const GPIO_OUT_CLR = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x18);
    -
    -        /// address: 0xd000001c
    -        /// GPIO output value XOR
    -        pub const GPIO_OUT_XOR = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x1c);
    -
    -        /// address: 0xd0000020
    -        /// GPIO output enable
    -        pub const GPIO_OE = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x20);
    -
    -        /// address: 0xd0000024
    -        /// GPIO output enable set
    -        pub const GPIO_OE_SET = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x24);
    -
    -        /// address: 0xd0000028
    -        /// GPIO output enable clear
    -        pub const GPIO_OE_CLR = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x28);
    -
    -        /// address: 0xd000002c
    -        /// GPIO output enable XOR
    -        pub const GPIO_OE_XOR = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x2c);
    -
    -        /// address: 0xd0000030
    -        /// QSPI output value
    -        pub const GPIO_HI_OUT = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x30);
    -
    -        /// address: 0xd0000034
    -        /// QSPI output value set
    -        pub const GPIO_HI_OUT_SET = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x34);
    -
    -        /// address: 0xd0000038
    -        /// QSPI output value clear
    -        pub const GPIO_HI_OUT_CLR = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x38);
    -
    -        /// address: 0xd000003c
    -        /// QSPI output value XOR
    -        pub const GPIO_HI_OUT_XOR = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x3c);
    -
    -        /// address: 0xd0000040
    -        /// QSPI output enable
    -        pub const GPIO_HI_OE = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x40);
    -
    -        /// address: 0xd0000044
    -        /// QSPI output enable set
    -        pub const GPIO_HI_OE_SET = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x44);
    -
    -        /// address: 0xd0000048
    -        /// QSPI output enable clear
    -        pub const GPIO_HI_OE_CLR = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x48);
    -
    -        /// address: 0xd000004c
    -        /// QSPI output enable XOR
    -        pub const GPIO_HI_OE_XOR = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x4c);
    -
    -        /// address: 0xd0000050
    -        /// Status register for inter-core FIFOs (mailboxes).\n
    -        /// There is one FIFO in the core 0 -> core 1 direction, and one core 1 -> core 0.
    -        /// Both are 32 bits wide and 8 words deep.\n
    -        /// Core 0 can see the read side of the 1->0 FIFO (RX), and the write side of 0->1
    -        /// FIFO (TX).\n
    -        /// Core 1 can see the read side of the 0->1 FIFO (RX), and the write side of 1->0
    -        /// FIFO (TX).\n
    -        /// The SIO IRQ for each core is the logical OR of the VLD, WOF and ROE fields of
    -        /// its FIFO_ST register.
    -        pub const FIFO_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Value is 1 if this core's RX FIFO is not empty (i.e. if FIFO_RD is valid)
    -            VLD: u1,
    -            /// Value is 1 if this core's TX FIFO is not full (i.e. if FIFO_WR is ready for more
    -            /// data)
    -            RDY: u1,
    -            /// Sticky flag indicating the TX FIFO was written when full. This write was ignored
    -            /// by the FIFO.
    -            WOF: u1,
    -            /// Sticky flag indicating the RX FIFO was read when empty. This read was ignored by
    -            /// the FIFO.
    -            ROE: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -        }), base_address + 0x50);
    -
    -        /// address: 0xd0000054
    -        /// Write access to this core's TX FIFO
    -        pub const FIFO_WR = @intToPtr(*volatile u32, base_address + 0x54);
    -
    -        /// address: 0xd0000058
    -        /// Read access to this core's RX FIFO
    -        pub const FIFO_RD = @intToPtr(*volatile u32, base_address + 0x58);
    -
    -        /// address: 0xd000005c
    -        /// Spinlock state\n
    -        /// A bitmap containing the state of all 32 spinlocks (1=locked).\n
    -        /// Mainly intended for debugging.
    -        pub const SPINLOCK_ST = @intToPtr(*volatile u32, base_address + 0x5c);
    -
    -        /// address: 0xd0000060
    -        /// Divider unsigned dividend\n
    -        /// Write to the DIVIDEND operand of the divider, i.e. the p in `p / q`.\n
    -        /// Any operand write starts a new calculation. The results appear in QUOTIENT,
    -        /// REMAINDER.\n
    -        /// UDIVIDEND/SDIVIDEND are aliases of the same internal register. The U alias
    -        /// starts an\n
    -        /// unsigned calculation, and the S alias starts a signed calculation.
    -        pub const DIV_UDIVIDEND = @intToPtr(*volatile u32, base_address + 0x60);
    -
    -        /// address: 0xd0000064
    -        /// Divider unsigned divisor\n
    -        /// Write to the DIVISOR operand of the divider, i.e. the q in `p / q`.\n
    -        /// Any operand write starts a new calculation. The results appear in QUOTIENT,
    -        /// REMAINDER.\n
    -        /// UDIVIDEND/SDIVIDEND are aliases of the same internal register. The U alias
    -        /// starts an\n
    -        /// unsigned calculation, and the S alias starts a signed calculation.
    -        pub const DIV_UDIVISOR = @intToPtr(*volatile u32, base_address + 0x64);
    -
    -        /// address: 0xd0000068
    -        /// Divider signed dividend\n
    -        /// The same as UDIVIDEND, but starts a signed calculation, rather than unsigned.
    -        pub const DIV_SDIVIDEND = @intToPtr(*volatile u32, base_address + 0x68);
    -
    -        /// address: 0xd000006c
    -        /// Divider signed divisor\n
    -        /// The same as UDIVISOR, but starts a signed calculation, rather than unsigned.
    -        pub const DIV_SDIVISOR = @intToPtr(*volatile u32, base_address + 0x6c);
    -
    -        /// address: 0xd0000070
    -        /// Divider result quotient\n
    -        /// The result of `DIVIDEND / DIVISOR` (division). Contents undefined while
    -        /// CSR_READY is low.\n
    -        /// For signed calculations, QUOTIENT is negative when the signs of DIVIDEND and
    -        /// DIVISOR differ.\n
    -        /// This register can be written to directly, for context save/restore purposes.
    -        /// This halts any\n
    -        /// in-progress calculation and sets the CSR_READY and CSR_DIRTY flags.\n
    -        /// Reading from QUOTIENT clears the CSR_DIRTY flag, so should read results in the
    -        /// order\n
    -        /// REMAINDER, QUOTIENT if CSR_DIRTY is used.
    -        pub const DIV_QUOTIENT = @intToPtr(*volatile u32, base_address + 0x70);
    -
    -        /// address: 0xd0000074
    -        /// Divider result remainder\n
    -        /// The result of `DIVIDEND % DIVISOR` (modulo). Contents undefined while CSR_READY
    -        /// is low.\n
    -        /// For signed calculations, REMAINDER is negative only when DIVIDEND is negative.\n
    -        /// This register can be written to directly, for context save/restore purposes.
    -        /// This halts any\n
    -        /// in-progress calculation and sets the CSR_READY and CSR_DIRTY flags.
    -        pub const DIV_REMAINDER = @intToPtr(*volatile u32, base_address + 0x74);
    -
    -        /// address: 0xd0000078
    -        /// Control and status register for divider.
    -        pub const DIV_CSR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Reads as 0 when a calculation is in progress, 1 otherwise.\n
    -            /// Writing an operand (xDIVIDEND, xDIVISOR) will immediately start a new
    -            /// calculation, no\n
    -            /// matter if one is already in progress.\n
    -            /// Writing to a result register will immediately terminate any in-progress
    -            /// calculation\n
    -            /// and set the READY and DIRTY flags.
    -            READY: u1,
    -            /// Changes to 1 when any register is written, and back to 0 when QUOTIENT is
    -            /// read.\n
    -            /// Software can use this flag to make save/restore more efficient (skip if not
    -            /// DIRTY).\n
    -            /// If the flag is used in this way, it's recommended to either read QUOTIENT
    -            /// only,\n
    -            /// or REMAINDER and then QUOTIENT, to prevent data loss on context switch.
    -            DIRTY: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -            padding11: u1 = 0,
    -            padding12: u1 = 0,
    -            padding13: u1 = 0,
    -            padding14: u1 = 0,
    -            padding15: u1 = 0,
    -            padding16: u1 = 0,
    -            padding17: u1 = 0,
    -            padding18: u1 = 0,
    -            padding19: u1 = 0,
    -            padding20: u1 = 0,
    -            padding21: u1 = 0,
    -            padding22: u1 = 0,
    -            padding23: u1 = 0,
    -            padding24: u1 = 0,
    -            padding25: u1 = 0,
    -            padding26: u1 = 0,
    -            padding27: u1 = 0,
    -            padding28: u1 = 0,
    -            padding29: u1 = 0,
    -        }), base_address + 0x78);
    -
    -        /// address: 0xd0000080
    -        /// Read/write access to accumulator 0
    -        pub const INTERP0_ACCUM0 = @intToPtr(*volatile u32, base_address + 0x80);
    -
    -        /// address: 0xd0000084
    -        /// Read/write access to accumulator 1
    -        pub const INTERP0_ACCUM1 = @intToPtr(*volatile u32, base_address + 0x84);
    -
    -        /// address: 0xd0000088
    -        /// Read/write access to BASE0 register.
    -        pub const INTERP0_BASE0 = @intToPtr(*volatile u32, base_address + 0x88);
    -
    -        /// address: 0xd000008c
    -        /// Read/write access to BASE1 register.
    -        pub const INTERP0_BASE1 = @intToPtr(*volatile u32, base_address + 0x8c);
    -
    -        /// address: 0xd0000090
    -        /// Read/write access to BASE2 register.
    -        pub const INTERP0_BASE2 = @intToPtr(*volatile u32, base_address + 0x90);
    -
    -        /// address: 0xd0000094
    -        /// Read LANE0 result, and simultaneously write lane results to both accumulators
    -        /// (POP).
    -        pub const INTERP0_POP_LANE0 = @intToPtr(*volatile u32, base_address + 0x94);
    -
    -        /// address: 0xd0000098
    -        /// Read LANE1 result, and simultaneously write lane results to both accumulators
    -        /// (POP).
    -        pub const INTERP0_POP_LANE1 = @intToPtr(*volatile u32, base_address + 0x98);
    -
    -        /// address: 0xd000009c
    -        /// Read FULL result, and simultaneously write lane results to both accumulators
    -        /// (POP).
    -        pub const INTERP0_POP_FULL = @intToPtr(*volatile u32, base_address + 0x9c);
    -
    -        /// address: 0xd00000a0
    -        /// Read LANE0 result, without altering any internal state (PEEK).
    -        pub const INTERP0_PEEK_LANE0 = @intToPtr(*volatile u32, base_address + 0xa0);
    -
    -        /// address: 0xd00000a4
    -        /// Read LANE1 result, without altering any internal state (PEEK).
    -        pub const INTERP0_PEEK_LANE1 = @intToPtr(*volatile u32, base_address + 0xa4);
    -
    -        /// address: 0xd00000a8
    -        /// Read FULL result, without altering any internal state (PEEK).
    -        pub const INTERP0_PEEK_FULL = @intToPtr(*volatile u32, base_address + 0xa8);
    -
    -        /// address: 0xd00000ac
    -        /// Control register for lane 0
    -        pub const INTERP0_CTRL_LANE0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Logical right-shift applied to accumulator before masking
    -            SHIFT: u5,
    -            /// The least-significant bit allowed to pass by the mask (inclusive)
    -            MASK_LSB: u5,
    -            /// The most-significant bit allowed to pass by the mask (inclusive)\n
    -            /// Setting MSB < LSB may cause chip to turn inside-out
    -            MASK_MSB: u5,
    -            /// If SIGNED is set, the shifted and masked accumulator value is sign-extended to
    -            /// 32 bits\n
    -            /// before adding to BASE0, and LANE0 PEEK/POP appear extended to 32 bits when read
    -            /// by processor.
    -            SIGNED: u1,
    -            /// If 1, feed the opposite lane's accumulator into this lane's shift + mask
    -            /// hardware.\n
    -            /// Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is before the
    -            /// shift+mask bypass)
    -            CROSS_INPUT: u1,
    -            /// If 1, feed the opposite lane's result into this lane's accumulator on POP.
    -            CROSS_RESULT: u1,
    -            /// If 1, mask + shift is bypassed for LANE0 result. This does not affect FULL
    -            /// result.
    -            ADD_RAW: u1,
    -            /// ORed into bits 29:28 of the lane result presented to the processor on the bus.\n
    -            /// No effect on the internal 32-bit datapath. Handy for using a lane to generate
    -            /// sequence\n
    -            /// of pointers into flash or SRAM.
    -            FORCE_MSB: u2,
    -            /// Only present on INTERP0 on each core. If BLEND mode is enabled:\n
    -            /// - LANE1 result is a linear interpolation between BASE0 and BASE1, controlled\n
    -            /// by the 8 LSBs of lane 1 shift and mask value (a fractional number between\n
    -            /// 0 and 255/256ths)\n
    -            /// - LANE0 result does not have BASE0 added (yields only the 8 LSBs of lane 1
    -            /// shift+mask value)\n
    -            /// - FULL result does not have lane 1 shift+mask value added (BASE2 + lane 0
    -            /// shift+mask)\n
    -            /// LANE1 SIGNED flag controls whether the interpolation is signed or unsigned.
    -            BLEND: u1,
    -            reserved0: u1 = 0,
    -            /// Indicates if any masked-off MSBs in ACCUM0 are set.
    -            OVERF0: u1,
    -            /// Indicates if any masked-off MSBs in ACCUM1 are set.
    -            OVERF1: u1,
    -            /// Set if either OVERF0 or OVERF1 is set.
    -            OVERF: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -        }), base_address + 0xac);
    -
    -        /// address: 0xd00000b0
    -        /// Control register for lane 1
    -        pub const INTERP0_CTRL_LANE1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Logical right-shift applied to accumulator before masking
    -            SHIFT: u5,
    -            /// The least-significant bit allowed to pass by the mask (inclusive)
    -            MASK_LSB: u5,
    -            /// The most-significant bit allowed to pass by the mask (inclusive)\n
    -            /// Setting MSB < LSB may cause chip to turn inside-out
    -            MASK_MSB: u5,
    -            /// If SIGNED is set, the shifted and masked accumulator value is sign-extended to
    -            /// 32 bits\n
    -            /// before adding to BASE1, and LANE1 PEEK/POP appear extended to 32 bits when read
    -            /// by processor.
    -            SIGNED: u1,
    -            /// If 1, feed the opposite lane's accumulator into this lane's shift + mask
    -            /// hardware.\n
    -            /// Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is before the
    -            /// shift+mask bypass)
    -            CROSS_INPUT: u1,
    -            /// If 1, feed the opposite lane's result into this lane's accumulator on POP.
    -            CROSS_RESULT: u1,
    -            /// If 1, mask + shift is bypassed for LANE1 result. This does not affect FULL
    -            /// result.
    -            ADD_RAW: u1,
    -            /// ORed into bits 29:28 of the lane result presented to the processor on the bus.\n
    -            /// No effect on the internal 32-bit datapath. Handy for using a lane to generate
    -            /// sequence\n
    -            /// of pointers into flash or SRAM.
    -            FORCE_MSB: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -        }), base_address + 0xb0);
    -
    -        /// address: 0xd00000b4
    -        /// Values written here are atomically added to ACCUM0\n
    -        /// Reading yields lane 0's raw shift and mask value (BASE0 not added).
    -        pub const INTERP0_ACCUM0_ADD = @intToPtr(*volatile MmioInt(32, u24), base_address + 0xb4);
    -
    -        /// address: 0xd00000b8
    -        /// Values written here are atomically added to ACCUM1\n
    -        /// Reading yields lane 1's raw shift and mask value (BASE1 not added).
    -        pub const INTERP0_ACCUM1_ADD = @intToPtr(*volatile MmioInt(32, u24), base_address + 0xb8);
    -
    -        /// address: 0xd00000bc
    -        /// On write, the lower 16 bits go to BASE0, upper bits to BASE1 simultaneously.\n
    -        /// Each half is sign-extended to 32 bits if that lane's SIGNED flag is set.
    -        pub const INTERP0_BASE_1AND0 = @intToPtr(*volatile u32, base_address + 0xbc);
    -
    -        /// address: 0xd00000c0
    -        /// Read/write access to accumulator 0
    -        pub const INTERP1_ACCUM0 = @intToPtr(*volatile u32, base_address + 0xc0);
    -
    -        /// address: 0xd00000c4
    -        /// Read/write access to accumulator 1
    -        pub const INTERP1_ACCUM1 = @intToPtr(*volatile u32, base_address + 0xc4);
    -
    -        /// address: 0xd00000c8
    -        /// Read/write access to BASE0 register.
    -        pub const INTERP1_BASE0 = @intToPtr(*volatile u32, base_address + 0xc8);
    -
    -        /// address: 0xd00000cc
    -        /// Read/write access to BASE1 register.
    -        pub const INTERP1_BASE1 = @intToPtr(*volatile u32, base_address + 0xcc);
    -
    -        /// address: 0xd00000d0
    -        /// Read/write access to BASE2 register.
    -        pub const INTERP1_BASE2 = @intToPtr(*volatile u32, base_address + 0xd0);
    -
    -        /// address: 0xd00000d4
    -        /// Read LANE0 result, and simultaneously write lane results to both accumulators
    -        /// (POP).
    -        pub const INTERP1_POP_LANE0 = @intToPtr(*volatile u32, base_address + 0xd4);
    -
    -        /// address: 0xd00000d8
    -        /// Read LANE1 result, and simultaneously write lane results to both accumulators
    -        /// (POP).
    -        pub const INTERP1_POP_LANE1 = @intToPtr(*volatile u32, base_address + 0xd8);
    -
    -        /// address: 0xd00000dc
    -        /// Read FULL result, and simultaneously write lane results to both accumulators
    -        /// (POP).
    -        pub const INTERP1_POP_FULL = @intToPtr(*volatile u32, base_address + 0xdc);
    -
    -        /// address: 0xd00000e0
    -        /// Read LANE0 result, without altering any internal state (PEEK).
    -        pub const INTERP1_PEEK_LANE0 = @intToPtr(*volatile u32, base_address + 0xe0);
    -
    -        /// address: 0xd00000e4
    -        /// Read LANE1 result, without altering any internal state (PEEK).
    -        pub const INTERP1_PEEK_LANE1 = @intToPtr(*volatile u32, base_address + 0xe4);
    -
    -        /// address: 0xd00000e8
    -        /// Read FULL result, without altering any internal state (PEEK).
    -        pub const INTERP1_PEEK_FULL = @intToPtr(*volatile u32, base_address + 0xe8);
    -
    -        /// address: 0xd00000ec
    -        /// Control register for lane 0
    -        pub const INTERP1_CTRL_LANE0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Logical right-shift applied to accumulator before masking
    -            SHIFT: u5,
    -            /// The least-significant bit allowed to pass by the mask (inclusive)
    -            MASK_LSB: u5,
    -            /// The most-significant bit allowed to pass by the mask (inclusive)\n
    -            /// Setting MSB < LSB may cause chip to turn inside-out
    -            MASK_MSB: u5,
    -            /// If SIGNED is set, the shifted and masked accumulator value is sign-extended to
    -            /// 32 bits\n
    -            /// before adding to BASE0, and LANE0 PEEK/POP appear extended to 32 bits when read
    -            /// by processor.
    -            SIGNED: u1,
    -            /// If 1, feed the opposite lane's accumulator into this lane's shift + mask
    -            /// hardware.\n
    -            /// Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is before the
    -            /// shift+mask bypass)
    -            CROSS_INPUT: u1,
    -            /// If 1, feed the opposite lane's result into this lane's accumulator on POP.
    -            CROSS_RESULT: u1,
    -            /// If 1, mask + shift is bypassed for LANE0 result. This does not affect FULL
    -            /// result.
    -            ADD_RAW: u1,
    -            /// ORed into bits 29:28 of the lane result presented to the processor on the bus.\n
    -            /// No effect on the internal 32-bit datapath. Handy for using a lane to generate
    -            /// sequence\n
    -            /// of pointers into flash or SRAM.
    -            FORCE_MSB: u2,
    -            reserved0: u1 = 0,
    -            /// Only present on INTERP1 on each core. If CLAMP mode is enabled:\n
    -            /// - LANE0 result is shifted and masked ACCUM0, clamped by a lower bound of\n
    -            /// BASE0 and an upper bound of BASE1.\n
    -            /// - Signedness of these comparisons is determined by LANE0_CTRL_SIGNED
    -            CLAMP: u1,
    -            /// Indicates if any masked-off MSBs in ACCUM0 are set.
    -            OVERF0: u1,
    -            /// Indicates if any masked-off MSBs in ACCUM1 are set.
    -            OVERF1: u1,
    -            /// Set if either OVERF0 or OVERF1 is set.
    -            OVERF: u1,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -        }), base_address + 0xec);
    -
    -        /// address: 0xd00000f0
    -        /// Control register for lane 1
    -        pub const INTERP1_CTRL_LANE1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Logical right-shift applied to accumulator before masking
    -            SHIFT: u5,
    -            /// The least-significant bit allowed to pass by the mask (inclusive)
    -            MASK_LSB: u5,
    -            /// The most-significant bit allowed to pass by the mask (inclusive)\n
    -            /// Setting MSB < LSB may cause chip to turn inside-out
    -            MASK_MSB: u5,
    -            /// If SIGNED is set, the shifted and masked accumulator value is sign-extended to
    -            /// 32 bits\n
    -            /// before adding to BASE1, and LANE1 PEEK/POP appear extended to 32 bits when read
    -            /// by processor.
    -            SIGNED: u1,
    -            /// If 1, feed the opposite lane's accumulator into this lane's shift + mask
    -            /// hardware.\n
    -            /// Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is before the
    -            /// shift+mask bypass)
    -            CROSS_INPUT: u1,
    -            /// If 1, feed the opposite lane's result into this lane's accumulator on POP.
    -            CROSS_RESULT: u1,
    -            /// If 1, mask + shift is bypassed for LANE1 result. This does not affect FULL
    -            /// result.
    -            ADD_RAW: u1,
    -            /// ORed into bits 29:28 of the lane result presented to the processor on the bus.\n
    -            /// No effect on the internal 32-bit datapath. Handy for using a lane to generate
    -            /// sequence\n
    -            /// of pointers into flash or SRAM.
    -            FORCE_MSB: u2,
    -            padding0: u1 = 0,
    -            padding1: u1 = 0,
    -            padding2: u1 = 0,
    -            padding3: u1 = 0,
    -            padding4: u1 = 0,
    -            padding5: u1 = 0,
    -            padding6: u1 = 0,
    -            padding7: u1 = 0,
    -            padding8: u1 = 0,
    -            padding9: u1 = 0,
    -            padding10: u1 = 0,
    -        }), base_address + 0xf0);
    -
    -        /// address: 0xd00000f4
    -        /// Values written here are atomically added to ACCUM0\n
    -        /// Reading yields lane 0's raw shift and mask value (BASE0 not added).
    -        pub const INTERP1_ACCUM0_ADD = @intToPtr(*volatile MmioInt(32, u24), base_address + 0xf4);
    -
    -        /// address: 0xd00000f8
    -        /// Values written here are atomically added to ACCUM1\n
    -        /// Reading yields lane 1's raw shift and mask value (BASE1 not added).
    -        pub const INTERP1_ACCUM1_ADD = @intToPtr(*volatile MmioInt(32, u24), base_address + 0xf8);
    -
    -        /// address: 0xd00000fc
    -        /// On write, the lower 16 bits go to BASE0, upper bits to BASE1 simultaneously.\n
    -        /// Each half is sign-extended to 32 bits if that lane's SIGNED flag is set.
    -        pub const INTERP1_BASE_1AND0 = @intToPtr(*volatile u32, base_address + 0xfc);
    -
    -        /// address: 0xd0000100
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK0 = @intToPtr(*volatile u32, base_address + 0x100);
    -
    -        /// address: 0xd0000104
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK1 = @intToPtr(*volatile u32, base_address + 0x104);
    -
    -        /// address: 0xd0000108
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK2 = @intToPtr(*volatile u32, base_address + 0x108);
    -
    -        /// address: 0xd000010c
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK3 = @intToPtr(*volatile u32, base_address + 0x10c);
    -
    -        /// address: 0xd0000110
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK4 = @intToPtr(*volatile u32, base_address + 0x110);
    -
    -        /// address: 0xd0000114
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK5 = @intToPtr(*volatile u32, base_address + 0x114);
    -
    -        /// address: 0xd0000118
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK6 = @intToPtr(*volatile u32, base_address + 0x118);
    -
    -        /// address: 0xd000011c
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK7 = @intToPtr(*volatile u32, base_address + 0x11c);
    -
    -        /// address: 0xd0000120
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK8 = @intToPtr(*volatile u32, base_address + 0x120);
    -
    -        /// address: 0xd0000124
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK9 = @intToPtr(*volatile u32, base_address + 0x124);
    -
    -        /// address: 0xd0000128
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK10 = @intToPtr(*volatile u32, base_address + 0x128);
    -
    -        /// address: 0xd000012c
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK11 = @intToPtr(*volatile u32, base_address + 0x12c);
    -
    -        /// address: 0xd0000130
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK12 = @intToPtr(*volatile u32, base_address + 0x130);
    -
    -        /// address: 0xd0000134
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK13 = @intToPtr(*volatile u32, base_address + 0x134);
    -
    -        /// address: 0xd0000138
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK14 = @intToPtr(*volatile u32, base_address + 0x138);
    -
    -        /// address: 0xd000013c
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK15 = @intToPtr(*volatile u32, base_address + 0x13c);
    -
    -        /// address: 0xd0000140
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK16 = @intToPtr(*volatile u32, base_address + 0x140);
    -
    -        /// address: 0xd0000144
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK17 = @intToPtr(*volatile u32, base_address + 0x144);
    -
    -        /// address: 0xd0000148
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK18 = @intToPtr(*volatile u32, base_address + 0x148);
    -
    -        /// address: 0xd000014c
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK19 = @intToPtr(*volatile u32, base_address + 0x14c);
    -
    -        /// address: 0xd0000150
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK20 = @intToPtr(*volatile u32, base_address + 0x150);
    -
    -        /// address: 0xd0000154
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK21 = @intToPtr(*volatile u32, base_address + 0x154);
    -
    -        /// address: 0xd0000158
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK22 = @intToPtr(*volatile u32, base_address + 0x158);
    -
    -        /// address: 0xd000015c
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK23 = @intToPtr(*volatile u32, base_address + 0x15c);
    -
    -        /// address: 0xd0000160
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK24 = @intToPtr(*volatile u32, base_address + 0x160);
    -
    -        /// address: 0xd0000164
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK25 = @intToPtr(*volatile u32, base_address + 0x164);
    -
    -        /// address: 0xd0000168
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK26 = @intToPtr(*volatile u32, base_address + 0x168);
    -
    -        /// address: 0xd000016c
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK27 = @intToPtr(*volatile u32, base_address + 0x16c);
    -
    -        /// address: 0xd0000170
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK28 = @intToPtr(*volatile u32, base_address + 0x170);
    -
    -        /// address: 0xd0000174
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK29 = @intToPtr(*volatile u32, base_address + 0x174);
    -
    -        /// address: 0xd0000178
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK30 = @intToPtr(*volatile u32, base_address + 0x178);
    -
    -        /// address: 0xd000017c
    -        /// Reading from a spinlock address will:\n
    -        /// - Return 0 if lock is already locked\n
    -        /// - Otherwise return nonzero, and simultaneously claim the lock\n\n
    -        /// Writing (any value) releases the lock.\n
    -        /// If core 0 and core 1 attempt to claim the same lock simultaneously, core 0
    -        /// wins.\n
    -        /// The value returned on success is 0x1 << lock number.
    -        pub const SPINLOCK31 = @intToPtr(*volatile u32, base_address + 0x17c);
    -    };
    -    pub const PPB = struct {
    -        pub const base_address = 0xe0000000;
    -        pub const version = "1";
    -
    -        /// address: 0xe000ed20
    -        /// System handlers are a special class of exception handler that can have their
    -        /// priority set to any of the priority levels. Use the System Handler Priority
    -        /// Register 3 to set the priority of PendSV and SysTick.
    -        pub const SHPR3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1 = 0,
    -            reserved1: u1 = 0,
    -            reserved2: u1 = 0,
    -            reserved3: u1 = 0,
    -            reserved4: u1 = 0,
    -            reserved5: u1 = 0,
    -            reserved6: u1 = 0,
    -            reserved7: u1 = 0,
    -            reserved8: u1 = 0,
    -            reserved9: u1 = 0,
    -            reserved10: u1 = 0,
    -            reserved11: u1 = 0,
    -            reserved12: u1 = 0,
    -            reserved13: u1 = 0,
    -            reserved14: u1 = 0,
    -            reserved15: u1 = 0,
    -            reserved16: u1 = 0,
    -            reserved17: u1 = 0,
    -            reserved18: u1 = 0,
    -            reserved19: u1 = 0,
    -            reserved20: u1 = 0,
    -            reserved21: u1 = 0,
    -            /// Priority of system handler 14, PendSV
    -            PRI_14: u2,
    -            reserved22: u1 = 0,
    -            reserved23: u1 = 0,
    -            reserved24: u1 = 0,
    -            reserved25: u1 = 0,
    -            reserved26: u1 = 0,
    -            reserved27: u1 = 0,
    -            /// Priority of system handler 15, SysTick
    -            PRI_15: u2,
    -        }), base_address + 0xed20);
    -    };
    -};
    -
    -const std = @import("std");
    -
    -pub fn mmio(addr: usize, comptime size: u8, comptime PackedT: type) *volatile Mmio(size, PackedT) {
    -    return @intToPtr(*volatile Mmio(size, PackedT), addr);
    -}
    -
    -pub fn Mmio(comptime size: u8, comptime PackedT: type) type {
    -    if ((size % 8) != 0)
    -        @compileError("size must be divisible by 8!");
    -
    -    if (!std.math.isPowerOfTwo(size / 8))
    -        @compileError("size must encode a power of two number of bytes!");
    -
    -    const IntT = std.meta.Int(.unsigned, size);
    -
    -    if (@sizeOf(PackedT) != (size / 8))
    -        @compileError(std.fmt.comptimePrint("IntT and PackedT must have the same size!, they are {} and {} bytes respectively", .{ size / 8, @sizeOf(PackedT) }));
    -
    -    return extern struct {
    -        const Self = @This();
    -
    -        raw: IntT,
    -
    -        pub const underlying_type = PackedT;
    -
    -        pub inline fn read(addr: *volatile Self) PackedT {
    -            return @bitCast(PackedT, addr.raw);
    -        }
    -
    -        pub inline fn write(addr: *volatile Self, val: PackedT) void {
    -            // This is a workaround for a compiler bug related to miscompilation
    -            // If the tmp var is not used, result location will fuck things up
    -            var tmp = @bitCast(IntT, val);
    -            addr.raw = tmp;
    -        }
    -
    -        pub inline fn modify(addr: *volatile Self, fields: anytype) void {
    -            var val = read(addr);
    -            inline for (@typeInfo(@TypeOf(fields)).Struct.fields) |field| {
    -                @field(val, field.name) = @field(fields, field.name);
    -            }
    -            write(addr, val);
    -        }
    -
    -        pub inline fn toggle(addr: *volatile Self, fields: anytype) void {
    -            var val = read(addr);
    -            inline for (@typeInfo(@TypeOf(fields)).Struct.fields) |field| {
    -                @field(val, @tagName(field.default_value.?)) = !@field(val, @tagName(field.default_value.?));
    -            }
    -            write(addr, val);
    -        }
    -    };
    -}
    -
    -pub fn MmioInt(comptime size: u8, comptime T: type) type {
    -    return extern struct {
    -        const Self = @This();
    -
    -        raw: std.meta.Int(.unsigned, size),
    -
    -        pub inline fn read(addr: *volatile Self) T {
    -            return @truncate(T, addr.raw);
    -        }
    -
    -        pub inline fn modify(addr: *volatile Self, val: T) void {
    -            const Int = std.meta.Int(.unsigned, size);
    -            const mask = ~@as(Int, (1 << @bitSizeOf(T)) - 1);
    -
    -            var tmp = addr.raw;
    -            addr.raw = (tmp & mask) | val;
    -        }
    -    };
    -}
    -
    -pub fn mmioInt(addr: usize, comptime size: usize, comptime T: type) *volatile MmioInt(size, T) {
    -    return @intToPtr(*volatile MmioInt(size, T), addr);
    -}
    -
    -pub const InterruptVector = extern union {
    -    C: *const fn () callconv(.C) void,
    -    Naked: *const fn () callconv(.Naked) void,
    -    // Interrupt is not supported on arm
    -};
    -
    -const unhandled = InterruptVector{
    -    .C = struct {
    -        fn tmp() callconv(.C) noreturn {
    -            @panic("unhandled interrupt");
    -        }
    -    }.tmp,
    -};
    
    From 24bb6dced705bef2d5db29a4cdb398327ff1dffb Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Mon, 20 Feb 2023 11:03:20 -0800
    Subject: [PATCH 048/286] add microzig submodule (#1)
    
    ---
     .gitmodules   | 3 +++
     deps/microzig | 1 +
     2 files changed, 4 insertions(+)
     create mode 160000 deps/microzig
    
    diff --git a/.gitmodules b/.gitmodules
    index 54620ef7a..911b8cfac 100644
    --- a/.gitmodules
    +++ b/.gitmodules
    @@ -1,3 +1,6 @@
     [submodule "vendor/microzig"]
     	path = vendor/microzig
     	url = https://github.com/ZigEmbeddedGroup/microzig
    +[submodule "deps/microzig"]
    +	path = deps/microzig
    +	url = https://github.com/ZigEmbeddedGroup/microzig.git
    diff --git a/deps/microzig b/deps/microzig
    new file mode 160000
    index 000000000..4bb65617a
    --- /dev/null
    +++ b/deps/microzig
    @@ -0,0 +1 @@
    +Subproject commit 4bb65617a47dc30282ffe340cc45d202b973650b
    
    From 8cb150e968c16e7633fb4ddcae1d38dd8c405afc Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Mon, 20 Feb 2023 11:09:18 -0800
    Subject: [PATCH 049/286] update microzig (#2)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 2d0ee5c47..831cfff35 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 2d0ee5c4731de1d81afb9c8e08ba4e8c2c2cfbf3
    +Subproject commit 831cfff35c259d68ee023ba7bb94dae8b7b94bec
    
    From 026af75f81fa6ad0b5033e9c3ed1565ec9369b92 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Mon, 20 Feb 2023 11:09:54 -0800
    Subject: [PATCH 050/286] update microzig (#22)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 2d0ee5c47..4bb65617a 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 2d0ee5c4731de1d81afb9c8e08ba4e8c2c2cfbf3
    +Subproject commit 4bb65617a47dc30282ffe340cc45d202b973650b
    
    From f26efd50424daa962d7aa11cac1edecacc63d1a4 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Mon, 20 Feb 2023 11:10:08 -0800
    Subject: [PATCH 051/286] update microzig (#2)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 97ca5497d..831cfff35 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 97ca5497da0f22d025e18bced9311efed088d893
    +Subproject commit 831cfff35c259d68ee023ba7bb94dae8b7b94bec
    
    From b8b5df0dc66f4b2ff11051ddbaf820fdf4b46b4d Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Mon, 20 Feb 2023 11:10:38 -0800
    Subject: [PATCH 052/286] update microzig (#2)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 97ca5497d..831cfff35 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 97ca5497da0f22d025e18bced9311efed088d893
    +Subproject commit 831cfff35c259d68ee023ba7bb94dae8b7b94bec
    
    From 49c61c7e1417c013612c26b52c175df16722cc2b Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Mon, 20 Feb 2023 11:11:42 -0800
    Subject: [PATCH 053/286] update microzig (#2)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 97ca5497d..831cfff35 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 97ca5497da0f22d025e18bced9311efed088d893
    +Subproject commit 831cfff35c259d68ee023ba7bb94dae8b7b94bec
    
    From f625be1dff15eb1dac1fd5c29e2c7dec4604d3bd Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Mon, 20 Feb 2023 11:11:54 -0800
    Subject: [PATCH 054/286] update microzig (#2)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 4bb65617a..831cfff35 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 4bb65617a47dc30282ffe340cc45d202b973650b
    +Subproject commit 831cfff35c259d68ee023ba7bb94dae8b7b94bec
    
    From c15e52ba1da72c04ccb664dff57619ca51be8aa2 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Mon, 20 Feb 2023 11:12:04 -0800
    Subject: [PATCH 055/286] update microzig (#2)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 97ca5497d..831cfff35 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 97ca5497da0f22d025e18bced9311efed088d893
    +Subproject commit 831cfff35c259d68ee023ba7bb94dae8b7b94bec
    
    From 0e22da698beee3bca49af1ebd400b5bb02f8c151 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Fri, 24 Feb 2023 09:12:06 -0800
    Subject: [PATCH 056/286] Update microzig (#3)
    
    * update microzig
    
    * update paths and for loops
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     build.zig      | 2 +-
     deps/microzig  | 2 +-
     src/boards.zig | 2 +-
     src/chips.zig  | 2 +-
     4 files changed, 4 insertions(+), 4 deletions(-)
    
    diff --git a/build.zig b/build.zig
    index 3b787fe3f..30cd9c99e 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -1,5 +1,5 @@
     const std = @import("std");
    -const microzig = @import("deps/microzig/src/main.zig");
    +const microzig = @import("deps/microzig/build.zig");
     const boards = @import("src/boards.zig");
     const chips = @import("src/chips.zig");
     
    diff --git a/deps/microzig b/deps/microzig
    index 831cfff35..11214ed8b 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 831cfff35c259d68ee023ba7bb94dae8b7b94bec
    +Subproject commit 11214ed8ba05e380a516beef3f3f594571a1c732
    diff --git a/src/boards.zig b/src/boards.zig
    index d9a73b5f4..264bfeef9 100644
    --- a/src/boards.zig
    +++ b/src/boards.zig
    @@ -1,5 +1,5 @@
     const std = @import("std");
    -const micro = @import("../deps/microzig/src/main.zig");
    +const micro = @import("../deps/microzig/build.zig");
     const chips = @import("chips.zig");
     
     fn root_dir() []const u8 {
    diff --git a/src/chips.zig b/src/chips.zig
    index ac1beefb0..2822bd7cd 100644
    --- a/src/chips.zig
    +++ b/src/chips.zig
    @@ -1,5 +1,5 @@
     const std = @import("std");
    -const micro = @import("../deps/microzig/src/main.zig");
    +const micro = @import("../deps/microzig/build.zig");
     const Chip = micro.Chip;
     const MemoryRegion = micro.MemoryRegion;
     
    
    From 58d73abc08952aac55301bd1ac66af49a3022711 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Fri, 24 Feb 2023 09:12:22 -0800
    Subject: [PATCH 057/286] Update microzig (#24)
    
    * update microzig
    
    * update paths and for loops
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     build.zig        | 2 +-
     deps/microzig    | 2 +-
     src/boards.zig   | 2 +-
     src/chips.zig    | 2 +-
     src/hal/adc.zig  | 4 ++--
     src/hal/pins.zig | 2 +-
     6 files changed, 7 insertions(+), 7 deletions(-)
    
    diff --git a/build.zig b/build.zig
    index 51bb874e5..a0ed86cf1 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -3,7 +3,7 @@ const Builder = std.build.Builder;
     const Pkg = std.build.Pkg;
     const comptimePrint = std.fmt.comptimePrint;
     
    -pub const microzig = @import("deps/microzig/src/main.zig");
    +pub const microzig = @import("deps/microzig/build.zig");
     
     const chips = @import("src/chips.zig");
     const boards = @import("src/boards.zig");
    diff --git a/deps/microzig b/deps/microzig
    index 4bb65617a..11214ed8b 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 4bb65617a47dc30282ffe340cc45d202b973650b
    +Subproject commit 11214ed8ba05e380a516beef3f3f594571a1c732
    diff --git a/src/boards.zig b/src/boards.zig
    index 432918247..ebbf0d8cc 100644
    --- a/src/boards.zig
    +++ b/src/boards.zig
    @@ -1,5 +1,5 @@
     const std = @import("std");
    -const microzig = @import("../deps/microzig/src/main.zig");
    +const microzig = @import("../deps/microzig/build.zig");
     const chips = @import("chips.zig");
     
     fn root_dir() []const u8 {
    diff --git a/src/chips.zig b/src/chips.zig
    index 5e0d39a20..8363cea7a 100644
    --- a/src/chips.zig
    +++ b/src/chips.zig
    @@ -1,5 +1,5 @@
     const std = @import("std");
    -const microzig = @import("../deps/microzig/src/main.zig");
    +const microzig = @import("../deps/microzig/build.zig");
     
     fn root_dir() []const u8 {
         return std.fs.path.dirname(@src().file) orelse ".";
    diff --git a/src/hal/adc.zig b/src/hal/adc.zig
    index 1746ccc87..ba293b096 100644
    --- a/src/hal/adc.zig
    +++ b/src/hal/adc.zig
    @@ -83,8 +83,8 @@ pub const InputMask = InputMask: {
         var fields: [enum_fields.len]std.builtin.Type.StructField = undefined;
     
         const default_value: u1 = 0;
    -    for (enum_fields) |enum_field, i|
    -        fields[i] = std.builtin.Type.StructField{
    +    for (enum_fields, &fields) |enum_field, *field|
    +        field = std.builtin.Type.StructField{
                 .name = enum_field.name,
                 .field_type = u1,
                 .default_value = &default_value,
    diff --git a/src/hal/pins.zig b/src/hal/pins.zig
    index 24b9d7af6..7a204b8d2 100644
    --- a/src/hal/pins.zig
    +++ b/src/hal/pins.zig
    @@ -237,7 +237,7 @@ pub const Function = enum {
     
     fn all() [30]u1 {
         var ret: [30]u1 = undefined;
    -    for (ret) |*elem|
    +    for (&ret) |*elem|
             elem.* = 1;
     
         return ret;
    
    From 39245b48ac1dea7f070fdbd50ddecaa73fb5bc45 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Fri, 24 Feb 2023 09:12:42 -0800
    Subject: [PATCH 058/286] Update microzig (#3)
    
    * update microzig
    
    * update paths and for loops
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     build.zig     | 2 +-
     deps/microzig | 2 +-
     src/chips.zig | 2 +-
     3 files changed, 3 insertions(+), 3 deletions(-)
    
    diff --git a/build.zig b/build.zig
    index 40398384d..d6590025b 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -1,5 +1,5 @@
     const std = @import("std");
    -const microzig = @import("deps/microzig/src/main.zig");
    +const microzig = @import("deps/microzig/build.zig");
     const chips = @import("src/chips.zig");
     
     pub fn build(b: *std.build.Builder) void {
    diff --git a/deps/microzig b/deps/microzig
    index 831cfff35..11214ed8b 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 831cfff35c259d68ee023ba7bb94dae8b7b94bec
    +Subproject commit 11214ed8ba05e380a516beef3f3f594571a1c732
    diff --git a/src/chips.zig b/src/chips.zig
    index 50b2aad62..2487aa066 100644
    --- a/src/chips.zig
    +++ b/src/chips.zig
    @@ -1,5 +1,5 @@
     const std = @import("std");
    -const micro = @import("../deps/microzig/src/main.zig");
    +const micro = @import("../deps/microzig/build.zig");
     const Chip = micro.Chip;
     const MemoryRegion = micro.MemoryRegion;
     
    
    From e8ad894d942b133bc45847d8fcbcb6b4b7aca47f Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Fri, 24 Feb 2023 09:23:02 -0800
    Subject: [PATCH 059/286] Update microzig (#3)
    
    * update microzig
    
    * update paths and for loops
    
    * update paths
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     build.zig                                 | 2 +-
     deps/microzig                             | 2 +-
     src/boards.zig                            | 2 +-
     src/chips.zig                             | 2 +-
     src/hals/{stm32f103.zig => STM32F103.zig} | 0
     src/hals/{stm32f303.zig => STM32F303.zig} | 4 ++--
     src/hals/{stm32f407.zig => STM32F407.zig} | 2 +-
     src/hals/{stm32f429.zig => STM32F429.zig} | 0
     8 files changed, 7 insertions(+), 7 deletions(-)
     rename src/hals/{stm32f103.zig => STM32F103.zig} (100%)
     rename src/hals/{stm32f303.zig => STM32F303.zig} (99%)
     rename src/hals/{stm32f407.zig => STM32F407.zig} (99%)
     rename src/hals/{stm32f429.zig => STM32F429.zig} (100%)
    
    diff --git a/build.zig b/build.zig
    index 3b787fe3f..30cd9c99e 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -1,5 +1,5 @@
     const std = @import("std");
    -const microzig = @import("deps/microzig/src/main.zig");
    +const microzig = @import("deps/microzig/build.zig");
     const boards = @import("src/boards.zig");
     const chips = @import("src/chips.zig");
     
    diff --git a/deps/microzig b/deps/microzig
    index 831cfff35..11214ed8b 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 831cfff35c259d68ee023ba7bb94dae8b7b94bec
    +Subproject commit 11214ed8ba05e380a516beef3f3f594571a1c732
    diff --git a/src/boards.zig b/src/boards.zig
    index 13f4c6156..9f9c3fa5d 100644
    --- a/src/boards.zig
    +++ b/src/boards.zig
    @@ -1,5 +1,5 @@
     const std = @import("std");
    -const microzig = @import("../deps/microzig/src/main.zig");
    +const microzig = @import("../deps/microzig/build.zig");
     const Board = microzig.Board;
     
     const chips = @import("chips.zig");
    diff --git a/src/chips.zig b/src/chips.zig
    index c492323bf..c7a2eda64 100644
    --- a/src/chips.zig
    +++ b/src/chips.zig
    @@ -1,5 +1,5 @@
     const std = @import("std");
    -const microzig = @import("../deps/microzig/src/main.zig");
    +const microzig = @import("../deps/microzig/build.zig");
     const Chip = microzig.Chip;
     const MemoryRegion = microzig.MemoryRegion;
     
    diff --git a/src/hals/stm32f103.zig b/src/hals/STM32F103.zig
    similarity index 100%
    rename from src/hals/stm32f103.zig
    rename to src/hals/STM32F103.zig
    diff --git a/src/hals/stm32f303.zig b/src/hals/STM32F303.zig
    similarity index 99%
    rename from src/hals/stm32f303.zig
    rename to src/hals/STM32F303.zig
    index 272e8b1d7..5c470c83b 100644
    --- a/src/hals/stm32f303.zig
    +++ b/src/hals/STM32F303.zig
    @@ -441,7 +441,7 @@ pub fn I2CController(comptime index: usize, comptime pins: micro.i2c.Pins) type
     
                     if (runtime_safety) self.read_allowed = false;
     
    -                for (buffer) |_, i| {
    +                for (buffer, 0..) |_, i| {
                         // Wait for data to be received
                         while (I2C1.ISR.read().RXNE == 0) {
                             debug_print("I2C1 waiting for data (RXNE=0)\r\n", .{});
    @@ -582,7 +582,7 @@ pub fn SpiBus(comptime index: usize) type {
     
             /// Read bytes to fill the given buffer exactly, writing arbitrary bytes (`undefined`).
             pub fn read_into(self: Self, buffer: []u8) !void {
    -            for (buffer) |_, i| {
    +            for (buffer, 0..) |_, i| {
                     try self.transceive_byte(null, &buffer[i]);
                 }
             }
    diff --git a/src/hals/stm32f407.zig b/src/hals/STM32F407.zig
    similarity index 99%
    rename from src/hals/stm32f407.zig
    rename to src/hals/STM32F407.zig
    index 6461bd899..f48e05c8d 100644
    --- a/src/hals/stm32f407.zig
    +++ b/src/hals/STM32F407.zig
    @@ -592,7 +592,7 @@ pub fn I2CController(comptime index: usize, comptime pins: micro.i2c.Pins) type
                     // Read SR2 to clear address condition
                     _ = i2c_base.SR2.read();
     
    -                for (buffer) |_, i| {
    +                for (buffer, 0..) |_, i| {
                         if (i == buffer.len - 1) {
                             // Disable ACK
                             i2c_base.CR1.modify(.{ .ACK = 0 });
    diff --git a/src/hals/stm32f429.zig b/src/hals/STM32F429.zig
    similarity index 100%
    rename from src/hals/stm32f429.zig
    rename to src/hals/STM32F429.zig
    
    From 1d6d7d98a59863427b28c26ea553f464ee3c54ce Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Fri, 24 Feb 2023 09:23:29 -0800
    Subject: [PATCH 060/286] Update microzig (#3)
    
    * update microzig
    
    * update paths
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     build.zig               |  2 +-
     deps/microzig           |  2 +-
     src/boards.zig          |  2 +-
     src/chips.zig           |  2 +-
     src/hals/ATmega328P.zig | 21 ++++++++++-----------
     5 files changed, 14 insertions(+), 15 deletions(-)
    
    diff --git a/build.zig b/build.zig
    index 3b787fe3f..30cd9c99e 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -1,5 +1,5 @@
     const std = @import("std");
    -const microzig = @import("deps/microzig/src/main.zig");
    +const microzig = @import("deps/microzig/build.zig");
     const boards = @import("src/boards.zig");
     const chips = @import("src/chips.zig");
     
    diff --git a/deps/microzig b/deps/microzig
    index 831cfff35..11214ed8b 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 831cfff35c259d68ee023ba7bb94dae8b7b94bec
    +Subproject commit 11214ed8ba05e380a516beef3f3f594571a1c732
    diff --git a/src/boards.zig b/src/boards.zig
    index 928877039..55fc2208e 100644
    --- a/src/boards.zig
    +++ b/src/boards.zig
    @@ -1,5 +1,5 @@
     const std = @import("std");
    -const micro = @import("../deps/microzig/src/main.zig");
    +const micro = @import("../deps/microzig/build.zig");
     const chips = @import("chips.zig");
     
     fn root_dir() []const u8 {
    diff --git a/src/chips.zig b/src/chips.zig
    index b47fe15ec..cc7816b83 100644
    --- a/src/chips.zig
    +++ b/src/chips.zig
    @@ -1,5 +1,5 @@
     const std = @import("std");
    -const micro = @import("../deps/microzig/src/main.zig");
    +const micro = @import("../deps/microzig/build.zig");
     const Chip = micro.Chip;
     const MemoryRegion = micro.MemoryRegion;
     
    diff --git a/src/hals/ATmega328P.zig b/src/hals/ATmega328P.zig
    index b836c651c..6e4ef9400 100644
    --- a/src/hals/ATmega328P.zig
    +++ b/src/hals/ATmega328P.zig
    @@ -1,8 +1,7 @@
     const std = @import("std");
     const micro = @import("microzig");
    -
    -pub usingnamespace @import("registers.zig");
    -const regz = @import("registers.zig").registers;
    +const peripherals = micro.chip.peripherals;
    +const USART0 = peripherals.USART0;
     
     pub const cpu = micro.cpu;
     const Port = enum(u8) {
    @@ -141,11 +140,11 @@ pub fn Uart(comptime index: usize, comptime pins: micro.uart.Pins) type {
     
                 const ubrr_val = try computeDivider(config.baud_rate);
     
    -            regz.USART0.UCSR0A.modify(.{
    +            USART0.UCSR0A.modify(.{
                     .MPCM0 = 0,
                     .U2X0 = 0,
                 });
    -            regz.USART0.UCSR0B.write(.{
    +            USART0.UCSR0B.write(.{
                     .TXB80 = 0, // we don't care about these btw
                     .RXB80 = 0, // we don't care about these btw
                     .UCSZ02 = @truncate(u1, (ucsz & 0x04) >> 2),
    @@ -155,7 +154,7 @@ pub fn Uart(comptime index: usize, comptime pins: micro.uart.Pins) type {
                     .TXCIE0 = 0, // no interrupts
                     .RXCIE0 = 0, // no interrupts
                 });
    -            regz.USART0.UCSR0C.write(.{
    +            USART0.UCSR0C.write(.{
                     .UCPOL0 = 0, // async mode
                     .UCSZ0 = @truncate(u2, (ucsz & 0x03) >> 0),
                     .USBS0 = usbs,
    @@ -163,29 +162,29 @@ pub fn Uart(comptime index: usize, comptime pins: micro.uart.Pins) type {
                     .UMSEL0 = umsel,
                 });
     
    -            regz.USART0.UBRR0.modify(ubrr_val);
    +            USART0.UBRR0.modify(ubrr_val);
     
                 return Self{};
             }
     
             pub fn canWrite(self: Self) bool {
                 _ = self;
    -            return (regz.USART0.UCSR0A.read().UDRE0 == 1);
    +            return (USART0.UCSR0A.read().UDRE0 == 1);
             }
     
             pub fn tx(self: Self, ch: u8) void {
                 while (!self.canWrite()) {} // Wait for Previous transmission
    -            regz.USART0.UDR0.* = ch; // Load the data to be transmitted
    +            USART0.UDR0.* = ch; // Load the data to be transmitted
             }
     
             pub fn canRead(self: Self) bool {
                 _ = self;
    -            return (regz.USART0.UCSR0A.read().RXC0 == 1);
    +            return (USART0.UCSR0A.read().RXC0 == 1);
             }
     
             pub fn rx(self: Self) u8 {
                 while (!self.canRead()) {} // Wait till the data is received
    -            return regz.USART0.UDR0.*; // Read received data
    +            return USART0.UDR0.*; // Read received data
             }
         };
     }
    
    From 38d8d86941922bebb72d27edfc4daa9629c38629 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Fri, 24 Feb 2023 09:23:51 -0800
    Subject: [PATCH 061/286] Update microzig (#3)
    
    * update microzig
    
    * update paths
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     build.zig              |  2 +-
     deps/microzig          |  2 +-
     src/boards.zig         |  2 +-
     src/chips.zig          |  2 +-
     src/hals/LPC176x5x.zig | 48 +++++++++++++++++++++++-------------------
     5 files changed, 30 insertions(+), 26 deletions(-)
    
    diff --git a/build.zig b/build.zig
    index 3b787fe3f..30cd9c99e 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -1,5 +1,5 @@
     const std = @import("std");
    -const microzig = @import("deps/microzig/src/main.zig");
    +const microzig = @import("deps/microzig/build.zig");
     const boards = @import("src/boards.zig");
     const chips = @import("src/chips.zig");
     
    diff --git a/deps/microzig b/deps/microzig
    index 831cfff35..11214ed8b 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 831cfff35c259d68ee023ba7bb94dae8b7b94bec
    +Subproject commit 11214ed8ba05e380a516beef3f3f594571a1c732
    diff --git a/src/boards.zig b/src/boards.zig
    index 1690f0d93..9890a0c00 100644
    --- a/src/boards.zig
    +++ b/src/boards.zig
    @@ -1,5 +1,5 @@
     const std = @import("std");
    -const micro = @import("../deps/microzig/src/main.zig");
    +const micro = @import("../deps/microzig/build.zig");
     const chips = @import("chips.zig");
     
     fn root_dir() []const u8 {
    diff --git a/src/chips.zig b/src/chips.zig
    index 0e8592591..741fabadb 100644
    --- a/src/chips.zig
    +++ b/src/chips.zig
    @@ -1,5 +1,5 @@
     const std = @import("std");
    -const micro = @import("../deps/microzig/src/main.zig");
    +const micro = @import("../deps/microzig/build.zig");
     const Chip = micro.Chip;
     const MemoryRegion = micro.MemoryRegion;
     
    diff --git a/src/hals/LPC176x5x.zig b/src/hals/LPC176x5x.zig
    index 3db032e0e..8202d52ba 100644
    --- a/src/hals/LPC176x5x.zig
    +++ b/src/hals/LPC176x5x.zig
    @@ -1,9 +1,13 @@
     const std = @import("std");
     const micro = @import("microzig");
    -const chip = @import("registers.zig");
    -const regs = chip.registers;
    -
    -pub usingnamespace chip;
    +const peripherals = micro.chip.peripherals;
    +const GPIO = peripherals.GPIO;
    +const PINCONNECT = peripherals.PINCONNECT;
    +const UART0 = peripherals.UART0;
    +const UART1 = peripherals.UART1;
    +const UART2 = peripherals.UART2;
    +const UART3 = peripherals.UART3;
    +const SYSCON = peripherals.SYSCON;
     
     pub const clock = struct {
         pub const Domain = enum {
    @@ -37,14 +41,14 @@ pub fn parse_pin(comptime spec: []const u8) type {
         const _regs = struct {
             const name_suffix = std.fmt.comptimePrint("{d}", .{_port});
     
    -        const pinsel_reg = @field(regs.PINCONNECT, sel_reg_name);
    +        const pinsel_reg = @field(PINCONNECT, sel_reg_name);
             const pinsel_field = std.fmt.comptimePrint("P{d}_{d}", .{ _port, _pin });
     
    -        const dir = @field(regs.GPIO, "DIR" ++ name_suffix);
    -        const pin = @field(regs.GPIO, "PIN" ++ name_suffix);
    -        const set = @field(regs.GPIO, "SET" ++ name_suffix);
    -        const clr = @field(regs.GPIO, "CLR" ++ name_suffix);
    -        const mask = @field(regs.GPIO, "MASK" ++ name_suffix);
    +        const dir = @field(GPIO, "DIR" ++ name_suffix);
    +        const pin = @field(GPIO, "PIN" ++ name_suffix);
    +        const set = @field(GPIO, "SET" ++ name_suffix);
    +        const clr = @field(GPIO, "CLR" ++ name_suffix);
    +        const mask = @field(GPIO, "MASK" ++ name_suffix);
         };
     
         return struct {
    @@ -121,10 +125,10 @@ pub fn Uart(comptime index: usize, comptime pins: micro.uart.Pins) type {
     
         return struct {
             const UARTn = switch (index) {
    -            0 => regs.UART0,
    -            1 => regs.UART1,
    -            2 => regs.UART2,
    -            3 => regs.UART3,
    +            0 => UART0,
    +            1 => UART1,
    +            2 => UART2,
    +            3 => UART3,
                 else => @compileError("LPC1768 has 4 UARTs available."),
             };
             const Self = @This();
    @@ -133,20 +137,20 @@ pub fn Uart(comptime index: usize, comptime pins: micro.uart.Pins) type {
                 micro.debug.write("0");
                 switch (index) {
                     0 => {
    -                    regs.SYSCON.PCONP.modify(.{ .PCUART0 = 1 });
    -                    regs.SYSCON.PCLKSEL0.modify(.{ .PCLK_UART0 = @enumToInt(uart.CClkDiv.four) });
    +                    SYSCON.PCONP.modify(.{ .PCUART0 = 1 });
    +                    SYSCON.PCLKSEL0.modify(.{ .PCLK_UART0 = @enumToInt(uart.CClkDiv.four) });
                     },
                     1 => {
    -                    regs.SYSCON.PCONP.modify(.{ .PCUART1 = 1 });
    -                    regs.SYSCON.PCLKSEL0.modify(.{ .PCLK_UART1 = @enumToInt(uart.CClkDiv.four) });
    +                    SYSCON.PCONP.modify(.{ .PCUART1 = 1 });
    +                    SYSCON.PCLKSEL0.modify(.{ .PCLK_UART1 = @enumToInt(uart.CClkDiv.four) });
                     },
                     2 => {
    -                    regs.SYSCON.PCONP.modify(.{ .PCUART2 = 1 });
    -                    regs.SYSCON.PCLKSEL1.modify(.{ .PCLK_UART2 = @enumToInt(uart.CClkDiv.four) });
    +                    SYSCON.PCONP.modify(.{ .PCUART2 = 1 });
    +                    SYSCON.PCLKSEL1.modify(.{ .PCLK_UART2 = @enumToInt(uart.CClkDiv.four) });
                     },
                     3 => {
    -                    regs.SYSCON.PCONP.modify(.{ .PCUART3 = 1 });
    -                    regs.SYSCON.PCLKSEL1.modify(.{ .PCLK_UART3 = @enumToInt(uart.CClkDiv.four) });
    +                    SYSCON.PCONP.modify(.{ .PCUART3 = 1 });
    +                    SYSCON.PCLKSEL1.modify(.{ .PCLK_UART3 = @enumToInt(uart.CClkDiv.four) });
                     },
                     else => unreachable,
                 }
    
    From 31613f43a145b46be4ed140e0a538b5da447320c Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 28 Feb 2023 01:26:10 -0800
    Subject: [PATCH 062/286] Update microzig (#4)
    
    * update microzig
    
    * update to new api
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     build.zig     | 35 +++++++++++++++++++----------------
     deps/microzig |  2 +-
     2 files changed, 20 insertions(+), 17 deletions(-)
    
    diff --git a/build.zig b/build.zig
    index 30cd9c99e..86ad2161d 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -1,7 +1,8 @@
     const std = @import("std");
     const microzig = @import("deps/microzig/build.zig");
    -const boards = @import("src/boards.zig");
    -const chips = @import("src/chips.zig");
    +
    +pub const boards = @import("src/boards.zig");
    +pub const chips = @import("src/chips.zig");
     
     pub fn build(b: *std.build.Builder) void {
         const optimize = b.standardOptimizeOption(.{});
    @@ -9,13 +10,14 @@ pub fn build(b: *std.build.Builder) void {
             if (!decl.is_pub)
                 continue;
     
    -        const exe = microzig.addEmbeddedExecutable(
    -            b,
    -            @field(boards, decl.name).name ++ ".minimal",
    -            "test/programs/minimal.zig",
    -            .{ .board = @field(boards, decl.name) },
    -            .{ .optimize = optimize },
    -        );
    +        const exe = microzig.addEmbeddedExecutable(b, .{
    +            .name = @field(boards, decl.name).name ++ ".minimal",
    +            .source_file = .{
    +                .path = "test/programs/minimal.zig",
    +            },
    +            .backing = .{ .board = @field(boards, decl.name) },
    +            .optimize = optimize,
    +        });
             exe.install();
         }
     
    @@ -23,13 +25,14 @@ pub fn build(b: *std.build.Builder) void {
             if (!decl.is_pub)
                 continue;
     
    -        const exe = microzig.addEmbeddedExecutable(
    -            b,
    -            @field(chips, decl.name).name ++ ".minimal",
    -            "test/programs/minimal.zig",
    -            .{ .chip = @field(chips, decl.name) },
    -            .{ .optimize = optimize },
    -        );
    +        const exe = microzig.addEmbeddedExecutable(b, .{
    +            .name = @field(chips, decl.name).name ++ ".minimal",
    +            .source_file = .{
    +                .path = "test/programs/minimal.zig",
    +            },
    +            .backing = .{ .chip = @field(chips, decl.name) },
    +            .optimize = optimize,
    +        });
             exe.install();
         }
     }
    diff --git a/deps/microzig b/deps/microzig
    index 11214ed8b..b6fc3abbf 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 11214ed8ba05e380a516beef3f3f594571a1c732
    +Subproject commit b6fc3abbf7a91cb0cdafc7843ac7e6c26042ff84
    
    From 1a9e4cdbc3c2cfdd3ecfef1df447d67283f1f7b5 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 28 Feb 2023 01:26:24 -0800
    Subject: [PATCH 063/286] Update microzig (#4)
    
    * update microzig
    
    * update to new api
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     build.zig     | 35 +++++++++++++++++++----------------
     deps/microzig |  2 +-
     2 files changed, 20 insertions(+), 17 deletions(-)
    
    diff --git a/build.zig b/build.zig
    index 30cd9c99e..86ad2161d 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -1,7 +1,8 @@
     const std = @import("std");
     const microzig = @import("deps/microzig/build.zig");
    -const boards = @import("src/boards.zig");
    -const chips = @import("src/chips.zig");
    +
    +pub const boards = @import("src/boards.zig");
    +pub const chips = @import("src/chips.zig");
     
     pub fn build(b: *std.build.Builder) void {
         const optimize = b.standardOptimizeOption(.{});
    @@ -9,13 +10,14 @@ pub fn build(b: *std.build.Builder) void {
             if (!decl.is_pub)
                 continue;
     
    -        const exe = microzig.addEmbeddedExecutable(
    -            b,
    -            @field(boards, decl.name).name ++ ".minimal",
    -            "test/programs/minimal.zig",
    -            .{ .board = @field(boards, decl.name) },
    -            .{ .optimize = optimize },
    -        );
    +        const exe = microzig.addEmbeddedExecutable(b, .{
    +            .name = @field(boards, decl.name).name ++ ".minimal",
    +            .source_file = .{
    +                .path = "test/programs/minimal.zig",
    +            },
    +            .backing = .{ .board = @field(boards, decl.name) },
    +            .optimize = optimize,
    +        });
             exe.install();
         }
     
    @@ -23,13 +25,14 @@ pub fn build(b: *std.build.Builder) void {
             if (!decl.is_pub)
                 continue;
     
    -        const exe = microzig.addEmbeddedExecutable(
    -            b,
    -            @field(chips, decl.name).name ++ ".minimal",
    -            "test/programs/minimal.zig",
    -            .{ .chip = @field(chips, decl.name) },
    -            .{ .optimize = optimize },
    -        );
    +        const exe = microzig.addEmbeddedExecutable(b, .{
    +            .name = @field(chips, decl.name).name ++ ".minimal",
    +            .source_file = .{
    +                .path = "test/programs/minimal.zig",
    +            },
    +            .backing = .{ .chip = @field(chips, decl.name) },
    +            .optimize = optimize,
    +        });
             exe.install();
         }
     }
    diff --git a/deps/microzig b/deps/microzig
    index 11214ed8b..b6fc3abbf 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 11214ed8ba05e380a516beef3f3f594571a1c732
    +Subproject commit b6fc3abbf7a91cb0cdafc7843ac7e6c26042ff84
    
    From 44ac467baa882c755a7d102efc437cc42eba578f Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 28 Feb 2023 01:32:24 -0800
    Subject: [PATCH 064/286] Update microzig (#4)
    
    * update microzig
    
    * update to new api
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     build.zig     | 35 +++++++++++++++++++----------------
     deps/microzig |  2 +-
     2 files changed, 20 insertions(+), 17 deletions(-)
    
    diff --git a/build.zig b/build.zig
    index 30cd9c99e..86ad2161d 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -1,7 +1,8 @@
     const std = @import("std");
     const microzig = @import("deps/microzig/build.zig");
    -const boards = @import("src/boards.zig");
    -const chips = @import("src/chips.zig");
    +
    +pub const boards = @import("src/boards.zig");
    +pub const chips = @import("src/chips.zig");
     
     pub fn build(b: *std.build.Builder) void {
         const optimize = b.standardOptimizeOption(.{});
    @@ -9,13 +10,14 @@ pub fn build(b: *std.build.Builder) void {
             if (!decl.is_pub)
                 continue;
     
    -        const exe = microzig.addEmbeddedExecutable(
    -            b,
    -            @field(boards, decl.name).name ++ ".minimal",
    -            "test/programs/minimal.zig",
    -            .{ .board = @field(boards, decl.name) },
    -            .{ .optimize = optimize },
    -        );
    +        const exe = microzig.addEmbeddedExecutable(b, .{
    +            .name = @field(boards, decl.name).name ++ ".minimal",
    +            .source_file = .{
    +                .path = "test/programs/minimal.zig",
    +            },
    +            .backing = .{ .board = @field(boards, decl.name) },
    +            .optimize = optimize,
    +        });
             exe.install();
         }
     
    @@ -23,13 +25,14 @@ pub fn build(b: *std.build.Builder) void {
             if (!decl.is_pub)
                 continue;
     
    -        const exe = microzig.addEmbeddedExecutable(
    -            b,
    -            @field(chips, decl.name).name ++ ".minimal",
    -            "test/programs/minimal.zig",
    -            .{ .chip = @field(chips, decl.name) },
    -            .{ .optimize = optimize },
    -        );
    +        const exe = microzig.addEmbeddedExecutable(b, .{
    +            .name = @field(chips, decl.name).name ++ ".minimal",
    +            .source_file = .{
    +                .path = "test/programs/minimal.zig",
    +            },
    +            .backing = .{ .chip = @field(chips, decl.name) },
    +            .optimize = optimize,
    +        });
             exe.install();
         }
     }
    diff --git a/deps/microzig b/deps/microzig
    index 11214ed8b..b6fc3abbf 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 11214ed8ba05e380a516beef3f3f594571a1c732
    +Subproject commit b6fc3abbf7a91cb0cdafc7843ac7e6c26042ff84
    
    From 3b129e1ca5ce7317e29f50cb1beaf67ce6281122 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 28 Feb 2023 01:32:34 -0800
    Subject: [PATCH 065/286] Update microzig (#26)
    
    * update microzig
    
    * update to new api
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     build.zig         | 45 ++++++++++++++++++++++-----------------------
     deps/microzig     |  2 +-
     examples/adc.zig  |  4 +++-
     examples/uart.zig |  6 ++++--
     4 files changed, 30 insertions(+), 27 deletions(-)
    
    diff --git a/build.zig b/build.zig
    index a0ed86cf1..5da87f7b7 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -2,11 +2,12 @@ const std = @import("std");
     const Builder = std.build.Builder;
     const Pkg = std.build.Pkg;
     const comptimePrint = std.fmt.comptimePrint;
    +const FileSource = std.build.FileSource;
     
     pub const microzig = @import("deps/microzig/build.zig");
     
    -const chips = @import("src/chips.zig");
    -const boards = @import("src/boards.zig");
    +pub const chips = @import("src/chips.zig");
    +pub const boards = @import("src/boards.zig");
     
     const linkerscript_path = root() ++ "rp2040.ld";
     
    @@ -14,24 +15,23 @@ pub const BuildOptions = struct {
         optimize: std.builtin.OptimizeMode,
     };
     
    +pub const PicoExecutableOptions = struct {
    +    name: []const u8,
    +    source_file: FileSource,
    +    optimize: std.builtin.OptimizeMode = .Debug,
    +};
    +
     pub fn addPiPicoExecutable(
         builder: *Builder,
    -    name: []const u8,
    -    source: []const u8,
    -    options: BuildOptions,
    +    opts: PicoExecutableOptions,
     ) *microzig.EmbeddedExecutable {
    -    const ret = microzig.addEmbeddedExecutable(
    -        builder,
    -        name,
    -        source,
    -        .{ .board = boards.raspberry_pi_pico },
    -        .{
    -            .optimize = options.optimize,
    -        },
    -    );
    -    ret.inner.setLinkerScriptPath(.{ .path = linkerscript_path });
    -
    -    return ret;
    +    return microzig.addEmbeddedExecutable(builder, .{
    +        .name = opts.name,
    +        .source_file = opts.source_file,
    +        .backing = .{ .board = boards.raspberry_pi_pico },
    +        .optimize = opts.optimize,
    +        .linkerscript_source_file = .{ .path = linkerscript_path },
    +    });
     }
     
     // this build script is mostly for testing and verification of this
    @@ -61,12 +61,11 @@ pub const Examples = struct {
             inline for (@typeInfo(Examples).Struct.fields) |field| {
                 const path = comptime root() ++ "examples/" ++ field.name ++ ".zig";
     
    -            @field(ret, field.name) = addPiPicoExecutable(
    -                b,
    -                field.name,
    -                path,
    -                .{ .optimize = optimize },
    -            );
    +            @field(ret, field.name) = addPiPicoExecutable(b, .{
    +                .name = field.name,
    +                .source_file = .{ .path = path },
    +                .optimize = optimize,
    +            });
             }
     
             return ret;
    diff --git a/deps/microzig b/deps/microzig
    index 11214ed8b..b6fc3abbf 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 11214ed8ba05e380a516beef3f3f594571a1c732
    +Subproject commit b6fc3abbf7a91cb0cdafc7843ac7e6c26042ff84
    diff --git a/examples/adc.zig b/examples/adc.zig
    index 9800e9157..5d8f0c3eb 100644
    --- a/examples/adc.zig
    +++ b/examples/adc.zig
    @@ -12,7 +12,9 @@ const baud_rate = 115200;
     const uart_tx_pin = 0;
     const uart_rx_pin = 1;
     
    -pub const log = rp2040.uart.log;
    +pub const std_options = struct {
    +    pub const logFn = rp2040.uart.log;
    +};
     
     pub fn init() void {
         rp2040.clock_config.apply();
    diff --git a/examples/uart.zig b/examples/uart.zig
    index 6eb086415..57cf1c49f 100644
    --- a/examples/uart.zig
    +++ b/examples/uart.zig
    @@ -18,8 +18,10 @@ pub fn panic(message: []const u8, _: ?*std.builtin.StackTrace, _: ?usize) noretu
         while (true) {}
     }
     
    -pub const log_level = .debug;
    -pub const log = rp2040.uart.log;
    +pub const std_options = struct {
    +    pub const log_level = .debug;
    +    pub const logFn = rp2040.uart.log;
    +};
     
     pub fn main() !void {
         gpio.reset();
    
    From 50429bcc852c2574c280dc2c4b50107c57f98976 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 28 Feb 2023 01:37:10 -0800
    Subject: [PATCH 066/286] Update microzig (#4)
    
    * update microzig
    
    * update to new api
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     build.zig     | 35 +++++++++++++++++++----------------
     deps/microzig |  2 +-
     2 files changed, 20 insertions(+), 17 deletions(-)
    
    diff --git a/build.zig b/build.zig
    index 30cd9c99e..86ad2161d 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -1,7 +1,8 @@
     const std = @import("std");
     const microzig = @import("deps/microzig/build.zig");
    -const boards = @import("src/boards.zig");
    -const chips = @import("src/chips.zig");
    +
    +pub const boards = @import("src/boards.zig");
    +pub const chips = @import("src/chips.zig");
     
     pub fn build(b: *std.build.Builder) void {
         const optimize = b.standardOptimizeOption(.{});
    @@ -9,13 +10,14 @@ pub fn build(b: *std.build.Builder) void {
             if (!decl.is_pub)
                 continue;
     
    -        const exe = microzig.addEmbeddedExecutable(
    -            b,
    -            @field(boards, decl.name).name ++ ".minimal",
    -            "test/programs/minimal.zig",
    -            .{ .board = @field(boards, decl.name) },
    -            .{ .optimize = optimize },
    -        );
    +        const exe = microzig.addEmbeddedExecutable(b, .{
    +            .name = @field(boards, decl.name).name ++ ".minimal",
    +            .source_file = .{
    +                .path = "test/programs/minimal.zig",
    +            },
    +            .backing = .{ .board = @field(boards, decl.name) },
    +            .optimize = optimize,
    +        });
             exe.install();
         }
     
    @@ -23,13 +25,14 @@ pub fn build(b: *std.build.Builder) void {
             if (!decl.is_pub)
                 continue;
     
    -        const exe = microzig.addEmbeddedExecutable(
    -            b,
    -            @field(chips, decl.name).name ++ ".minimal",
    -            "test/programs/minimal.zig",
    -            .{ .chip = @field(chips, decl.name) },
    -            .{ .optimize = optimize },
    -        );
    +        const exe = microzig.addEmbeddedExecutable(b, .{
    +            .name = @field(chips, decl.name).name ++ ".minimal",
    +            .source_file = .{
    +                .path = "test/programs/minimal.zig",
    +            },
    +            .backing = .{ .chip = @field(chips, decl.name) },
    +            .optimize = optimize,
    +        });
             exe.install();
         }
     }
    diff --git a/deps/microzig b/deps/microzig
    index 11214ed8b..b6fc3abbf 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 11214ed8ba05e380a516beef3f3f594571a1c732
    +Subproject commit b6fc3abbf7a91cb0cdafc7843ac7e6c26042ff84
    
    From 92d7d14d124c799f20c3074633565993fbc2585b Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 28 Feb 2023 01:37:40 -0800
    Subject: [PATCH 067/286] Update microzig (#3)
    
    * update microzig
    
    * update to new api
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     build.zig     | 25 ++++++++++++++++---------
     deps/microzig |  2 +-
     2 files changed, 17 insertions(+), 10 deletions(-)
    
    diff --git a/build.zig b/build.zig
    index c0d71db84..dd5a65c3d 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -2,7 +2,7 @@ const std = @import("std");
     const microzig = @import("zpm.zig").sdks.microzig;
     
     pub fn build(b: *std.build.Builder) void {
    -    const mode = b.standardReleaseOptions();
    +    const optimize = b.standardOptimizeOption(.{});
     
         const esp32_c3_cpu = microzig.Cpu{
             .name = "Espressif RISC-V",
    @@ -21,7 +21,13 @@ pub fn build(b: *std.build.Builder) void {
     
         const esp32_c3 = microzig.Chip{
             .name = "ESP32 C3",
    -        .path = "src/package/esp32-c3.zig",
    +        .source = .{
    +            .path = "src/package/esp32-c3.zig",
    +        },
    +        .hal = .{
    +            .source = "src/hal/root.zig",
    +        },
    +
             .cpu = esp32_c3_cpu,
             .memory_regions = &.{
                 .{ .kind = .flash, .offset = 0x4200_0000, .length = 0x0080_0000 }, // external memory, ibus
    @@ -29,13 +35,14 @@ pub fn build(b: *std.build.Builder) void {
             },
         };
     
    -    var exe = microzig.addEmbeddedExecutable(
    -        b,
    -        "esp-bringup",
    -        "src/example/blinky.zig",
    -        .{ .chip = esp32_c3 },
    -        .{ .hal_package_path = .{ .path = "src/hal/root.zig" } },
    -    );
    +    var exe = microzig.addEmbeddedExecutable(b, .{
    +        .name = "esp-bringup",
    +        .source_file = .{
    +            .path = "src/example/blinky.zig",
    +        },
    +        .backing = .{ .chip = esp32_c3 },
    +        .optimize = optimize,
    +    });
         exe.setBuildMode(mode);
         exe.install();
     
    diff --git a/deps/microzig b/deps/microzig
    index 831cfff35..b6fc3abbf 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 831cfff35c259d68ee023ba7bb94dae8b7b94bec
    +Subproject commit b6fc3abbf7a91cb0cdafc7843ac7e6c26042ff84
    
    From 359e25db56a2c932692cab1ad3f45091aabce014 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 28 Feb 2023 01:45:54 -0800
    Subject: [PATCH 068/286] update microzig (#5)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index b6fc3abbf..08e7d5b01 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit b6fc3abbf7a91cb0cdafc7843ac7e6c26042ff84
    +Subproject commit 08e7d5b01a8ca6a53e3892f763507f1ff3b07725
    
    From d31c4ce02ce4e8f1be9e7fc6b730e1d7a4aa7639 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 28 Feb 2023 01:46:06 -0800
    Subject: [PATCH 069/286] update microzig (#5)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index b6fc3abbf..08e7d5b01 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit b6fc3abbf7a91cb0cdafc7843ac7e6c26042ff84
    +Subproject commit 08e7d5b01a8ca6a53e3892f763507f1ff3b07725
    
    From b60328ea97e2a1951cdc201056bac3e6740cda00 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 28 Feb 2023 01:46:17 -0800
    Subject: [PATCH 070/286] update microzig (#5)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index b6fc3abbf..08e7d5b01 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit b6fc3abbf7a91cb0cdafc7843ac7e6c26042ff84
    +Subproject commit 08e7d5b01a8ca6a53e3892f763507f1ff3b07725
    
    From 52092330a2a251962bf8681f0148b5dafb682c4a Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 28 Feb 2023 01:46:44 -0800
    Subject: [PATCH 071/286] update microzig (#4)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index b6fc3abbf..08e7d5b01 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit b6fc3abbf7a91cb0cdafc7843ac7e6c26042ff84
    +Subproject commit 08e7d5b01a8ca6a53e3892f763507f1ff3b07725
    
    From 9a47a0183e58d68ff3889147c99e0789292bdf7f Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 28 Feb 2023 01:47:34 -0800
    Subject: [PATCH 072/286] update microzig (#27)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index b6fc3abbf..08e7d5b01 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit b6fc3abbf7a91cb0cdafc7843ac7e6c26042ff84
    +Subproject commit 08e7d5b01a8ca6a53e3892f763507f1ff3b07725
    
    From 5570bfa13f464b47f53755428c9bfc1d4f4f428d Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 28 Feb 2023 01:47:45 -0800
    Subject: [PATCH 073/286] update microzig (#5)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index b6fc3abbf..08e7d5b01 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit b6fc3abbf7a91cb0cdafc7843ac7e6c26042ff84
    +Subproject commit 08e7d5b01a8ca6a53e3892f763507f1ff3b07725
    
    From 2872b218e0c21d9f023b81360407cb173e8becd0 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 28 Feb 2023 01:47:56 -0800
    Subject: [PATCH 074/286] Update microzig (#5)
    
    * update microzig
    
    * update to new api
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     build.zig     | 18 ++++++++++--------
     deps/microzig |  2 +-
     2 files changed, 11 insertions(+), 9 deletions(-)
    
    diff --git a/build.zig b/build.zig
    index d6590025b..edb8df879 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -1,6 +1,7 @@
     const std = @import("std");
     const microzig = @import("deps/microzig/build.zig");
    -const chips = @import("src/chips.zig");
    +
    +pub const chips = @import("src/chips.zig");
     
     pub fn build(b: *std.build.Builder) void {
         const optimize = b.standardOptimizeOption(.{});
    @@ -8,13 +9,14 @@ pub fn build(b: *std.build.Builder) void {
             if (!decl.is_pub)
                 continue;
     
    -        const exe = microzig.addEmbeddedExecutable(
    -            b,
    -            decl.name ++ ".minimal",
    -            "test/programs/minimal.zig",
    -            .{ .chip = @field(chips, decl.name) },
    -            .{ .optimize = optimize },
    -        );
    +        const exe = microzig.addEmbeddedExecutable(b, .{
    +            .name = decl.name ++ ".minimal",
    +            .source_file = .{
    +                .path = "test/programs/minimal.zig",
    +            },
    +            .backing = .{ .chip = @field(chips, decl.name) },
    +            .optimize = optimize,
    +        });
             exe.install();
         }
     }
    diff --git a/deps/microzig b/deps/microzig
    index 11214ed8b..08e7d5b01 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 11214ed8ba05e380a516beef3f3f594571a1c732
    +Subproject commit 08e7d5b01a8ca6a53e3892f763507f1ff3b07725
    
    From 2381f96b9afee214b3e7f84beab937038e0b947b Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Thu, 2 Mar 2023 01:13:42 -0800
    Subject: [PATCH 075/286] organzie (#5)
    
    * organzie
    
    * add buildkite pipeline
    ---
     .buildkite/pipeline.yml                       |     4 +
     build.zig                                     |    43 +-
     src/chips.zig                                 |    23 +
     src/chips/ESP32_C3.json                       | 33570 ++++++++++++++
     src/chips/ESP32_C3.zig                        | 12378 +++++
     src/cpus.zig                                  |    23 +
     .../esp32-c3.zig => cpus/espressif-riscv.zig} |    38 +-
     src/example/blinky.zig                        |    37 +-
     src/{hal/root.zig => hals/ESP32_C3.zig}       |    23 +-
     src/package/espressif-riscv.zig               |    39 -
     src/package/registers.zig                     | 37956 ----------------
     11 files changed, 46068 insertions(+), 38066 deletions(-)
     create mode 100644 .buildkite/pipeline.yml
     create mode 100644 src/chips.zig
     create mode 100644 src/chips/ESP32_C3.json
     create mode 100644 src/chips/ESP32_C3.zig
     create mode 100644 src/cpus.zig
     rename src/{package/esp32-c3.zig => cpus/espressif-riscv.zig} (72%)
     rename src/{hal/root.zig => hals/ESP32_C3.zig} (57%)
     delete mode 100644 src/package/espressif-riscv.zig
     delete mode 100644 src/package/registers.zig
    
    diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml
    new file mode 100644
    index 000000000..7767bbb66
    --- /dev/null
    +++ b/.buildkite/pipeline.yml
    @@ -0,0 +1,4 @@
    +steps:
    +  - group: Build
    +    steps:
    +    - command: zig build
    diff --git a/build.zig b/build.zig
    index dd5a65c3d..f96f446c5 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -1,52 +1,19 @@
     const std = @import("std");
    -const microzig = @import("zpm.zig").sdks.microzig;
    +const microzig = @import("deps/microzig/build.zig");
    +
    +pub const chips = @import("src/chips.zig");
    +pub const cpus = @import("src/cpus.zig");
     
     pub fn build(b: *std.build.Builder) void {
         const optimize = b.standardOptimizeOption(.{});
     
    -    const esp32_c3_cpu = microzig.Cpu{
    -        .name = "Espressif RISC-V",
    -        .path = "src/package/espressif-riscv.zig",
    -        .target = std.zig.CrossTarget{
    -            .cpu_arch = .riscv32,
    -            .cpu_model = .{ .explicit = &std.Target.riscv.cpu.generic_rv32 },
    -            .cpu_features_add = std.Target.riscv.featureSet(&.{
    -                std.Target.riscv.Feature.c,
    -                std.Target.riscv.Feature.m,
    -            }),
    -            .os_tag = .freestanding,
    -            .abi = .eabi,
    -        },
    -    };
    -
    -    const esp32_c3 = microzig.Chip{
    -        .name = "ESP32 C3",
    -        .source = .{
    -            .path = "src/package/esp32-c3.zig",
    -        },
    -        .hal = .{
    -            .source = "src/hal/root.zig",
    -        },
    -
    -        .cpu = esp32_c3_cpu,
    -        .memory_regions = &.{
    -            .{ .kind = .flash, .offset = 0x4200_0000, .length = 0x0080_0000 }, // external memory, ibus
    -            .{ .kind = .ram, .offset = 0x3FC8_0000, .length = 0x0006_0000 }, // sram 1, data bus
    -        },
    -    };
    -
         var exe = microzig.addEmbeddedExecutable(b, .{
             .name = "esp-bringup",
             .source_file = .{
                 .path = "src/example/blinky.zig",
             },
    -        .backing = .{ .chip = esp32_c3 },
    +        .backing = .{ .chip = chips.esp32_c3 },
             .optimize = optimize,
         });
    -    exe.setBuildMode(mode);
         exe.install();
    -
    -    const raw_step = exe.installRaw("firmware.bin", .{});
    -
    -    b.getInstallStep().dependOn(&raw_step.step);
     }
    diff --git a/src/chips.zig b/src/chips.zig
    new file mode 100644
    index 000000000..14769f383
    --- /dev/null
    +++ b/src/chips.zig
    @@ -0,0 +1,23 @@
    +const std = @import("std");
    +const microzig = @import("../deps/microzig/build.zig");
    +const cpus = @import("cpus.zig");
    +
    +fn root_dir() []const u8 {
    +    return std.fs.path.dirname(@src().file) orelse unreachable;
    +}
    +
    +pub const esp32_c3 = microzig.Chip{
    +    .name = "ESP32-C3",
    +    .source = .{
    +        .path = root_dir() ++ "/chips/ESP32_C3.zig",
    +    },
    +    .hal = .{
    +        .path = root_dir() ++ "/hals/ESP32_C3.zig",
    +    },
    +
    +    .cpu = cpus.esp32_c3,
    +    .memory_regions = &.{
    +        .{ .kind = .flash, .offset = 0x4200_0000, .length = 0x0080_0000 }, // external memory, ibus
    +        .{ .kind = .ram, .offset = 0x3FC8_0000, .length = 0x0006_0000 }, // sram 1, data bus
    +    },
    +};
    diff --git a/src/chips/ESP32_C3.json b/src/chips/ESP32_C3.json
    new file mode 100644
    index 000000000..4691dc788
    --- /dev/null
    +++ b/src/chips/ESP32_C3.json
    @@ -0,0 +1,33570 @@
    +{
    +  "version": "0.1.0",
    +  "types": {
    +    "peripherals": {
    +      "AES": {
    +        "description": "AES (Advanced Encryption Standard) Accelerator",
    +        "children": {
    +          "registers": {
    +            "KEY_0": {
    +              "description": "Key material key_0 configure register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY_0": {
    +                    "description": "This bits stores key_0 that is a part of key material.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "KEY_1": {
    +              "description": "Key material key_1 configure register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY_1": {
    +                    "description": "This bits stores key_1 that is a part of key material.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "KEY_2": {
    +              "description": "Key material key_2 configure register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY_2": {
    +                    "description": "This bits stores key_2 that is a part of key material.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "KEY_3": {
    +              "description": "Key material key_3 configure register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY_3": {
    +                    "description": "This bits stores key_3 that is a part of key material.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "KEY_4": {
    +              "description": "Key material key_4 configure register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY_4": {
    +                    "description": "This bits stores key_4 that is a part of key material.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "KEY_5": {
    +              "description": "Key material key_5 configure register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY_5": {
    +                    "description": "This bits stores key_5 that is a part of key material.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "KEY_6": {
    +              "description": "Key material key_6 configure register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY_6": {
    +                    "description": "This bits stores key_6 that is a part of key material.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "KEY_7": {
    +              "description": "Key material key_7 configure register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY_7": {
    +                    "description": "This bits stores key_7 that is a part of key material.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "TEXT_IN_0": {
    +              "description": "source text material text_in_0 configure register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TEXT_IN_0": {
    +                    "description": "This bits stores text_in_0 that is a part of source text material.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "TEXT_IN_1": {
    +              "description": "source text material text_in_1 configure register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TEXT_IN_1": {
    +                    "description": "This bits stores text_in_1 that is a part of source text material.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "TEXT_IN_2": {
    +              "description": "source text material text_in_2 configure register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TEXT_IN_2": {
    +                    "description": "This bits stores text_in_2 that is a part of source text material.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "TEXT_IN_3": {
    +              "description": "source text material text_in_3 configure register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TEXT_IN_3": {
    +                    "description": "This bits stores text_in_3 that is a part of source text material.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "TEXT_OUT_0": {
    +              "description": "result text material text_out_0 configure register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TEXT_OUT_0": {
    +                    "description": "This bits stores text_out_0 that is a part of result text material.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "TEXT_OUT_1": {
    +              "description": "result text material text_out_1 configure register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TEXT_OUT_1": {
    +                    "description": "This bits stores text_out_1 that is a part of result text material.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "TEXT_OUT_2": {
    +              "description": "result text material text_out_2 configure register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TEXT_OUT_2": {
    +                    "description": "This bits stores text_out_2 that is a part of result text material.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "TEXT_OUT_3": {
    +              "description": "result text material text_out_3 configure register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TEXT_OUT_3": {
    +                    "description": "This bits stores text_out_3 that is a part of result text material.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MODE": {
    +              "description": "AES Mode register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MODE": {
    +                    "description": "This bits decides which one operation mode will be used. 3'd0: AES-EN-128, 3'd1: AES-EN-192, 3'd2: AES-EN-256, 3'd4: AES-DE-128, 3'd5: AES-DE-192, 3'd6: AES-DE-256.",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "ENDIAN": {
    +              "description": "AES Endian configure register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENDIAN": {
    +                    "description": "endian. [1:0] key endian, [3:2] text_in endian or in_stream endian,  [5:4] text_out endian or out_stream endian",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "TRIGGER": {
    +              "description": "AES trigger register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TRIGGER": {
    +                    "description": "Set this bit to start AES calculation.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "STATE": {
    +              "description": "AES state register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STATE": {
    +                    "description": "Those bits shows AES status. For typical AES, 0: idle, 1: busy. For DMA-AES, 0: idle, 1: busy, 2: calculation_done.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IV_MEM": {
    +              "description": "The memory that stores initialization vector",
    +              "offset": 80,
    +              "size": 8,
    +              "count": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "H_MEM": {
    +              "description": "The memory that stores GCM hash subkey",
    +              "offset": 96,
    +              "size": 8,
    +              "count": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "J0_MEM": {
    +              "description": "The memory that stores J0",
    +              "offset": 112,
    +              "size": 8,
    +              "count": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "T0_MEM": {
    +              "description": "The memory that stores T0",
    +              "offset": 128,
    +              "size": 8,
    +              "count": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "DMA_ENABLE": {
    +              "description": "DMA-AES working mode register",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_ENABLE": {
    +                    "description": "1'b0: typical AES working mode, 1'b1: DMA-AES working mode.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BLOCK_MODE": {
    +              "description": "AES cipher block mode register",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BLOCK_MODE": {
    +                    "description": "Those bits decides which block mode will be used. 0x0: ECB, 0x1: CBC, 0x2: OFB, 0x3: CTR, 0x4: CFB-8, 0x5: CFB-128, 0x6: GCM, 0x7: reserved.",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "BLOCK_NUM": {
    +              "description": "AES block number register",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BLOCK_NUM": {
    +                    "description": "Those bits stores the number of Plaintext/ciphertext block.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "INC_SEL": {
    +              "description": "Standard incrementing function configure register",
    +              "offset": 156,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INC_SEL": {
    +                    "description": "This bit decides the standard incrementing function. 0: INC32. 1: INC128.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "AAD_BLOCK_NUM": {
    +              "description": "Additional Authential Data block number register",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AAD_BLOCK_NUM": {
    +                    "description": "Those bits stores the number of AAD block.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "REMAINDER_BIT_NUM": {
    +              "description": "AES remainder bit number register",
    +              "offset": 164,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REMAINDER_BIT_NUM": {
    +                    "description": "Those bits stores the number of remainder bit.",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "CONTINUE": {
    +              "description": "AES continue register",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CONTINUE": {
    +                    "description": "Set this bit to continue GCM operation.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_CLEAR": {
    +              "description": "AES Interrupt clear register",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INT_CLEAR": {
    +                    "description": "Set this bit to clear the AES interrupt.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ENA": {
    +              "description": "AES Interrupt enable register",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INT_ENA": {
    +                    "description": "Set this bit to enable interrupt that occurs when DMA-AES calculation is done.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DATE": {
    +              "description": "AES version control register",
    +              "offset": 180,
    +              "size": 32,
    +              "reset_value": 538513936,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATE": {
    +                    "description": "This bits stores the version information of AES.",
    +                    "offset": 0,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_EXIT": {
    +              "description": "AES-DMA exit config",
    +              "offset": 184,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_EXIT": {
    +                    "description": "Set this register to leave calculation done stage. Recommend to use it after software finishes reading DMA's output buffer.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "APB_CTRL": {
    +        "description": "Advanced Peripheral Bus Controller",
    +        "children": {
    +          "registers": {
    +            "SYSCLK_CONF": {
    +              "description": "APB_CTRL_SYSCLK_CONF_REG",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRE_DIV_CNT": {
    +                    "description": "reg_pre_div_cnt",
    +                    "offset": 0,
    +                    "size": 10
    +                  },
    +                  "CLK_320M_EN": {
    +                    "description": "reg_clk_320m_en",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CLK_EN": {
    +                    "description": "reg_clk_en",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "RST_TICK_CNT": {
    +                    "description": "reg_rst_tick_cnt",
    +                    "offset": 12,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TICK_CONF": {
    +              "description": "APB_CTRL_TICK_CONF_REG",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 67367,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XTAL_TICK_NUM": {
    +                    "description": "reg_xtal_tick_num",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "CK8M_TICK_NUM": {
    +                    "description": "reg_ck8m_tick_num",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "TICK_ENABLE": {
    +                    "description": "reg_tick_enable",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLK_OUT_EN": {
    +              "description": "APB_CTRL_CLK_OUT_EN_REG",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 2047,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLK20_OEN": {
    +                    "description": "reg_clk20_oen",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CLK22_OEN": {
    +                    "description": "reg_clk22_oen",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CLK44_OEN": {
    +                    "description": "reg_clk44_oen",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CLK_BB_OEN": {
    +                    "description": "reg_clk_bb_oen",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CLK80_OEN": {
    +                    "description": "reg_clk80_oen",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CLK160_OEN": {
    +                    "description": "reg_clk160_oen",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CLK_320M_OEN": {
    +                    "description": "reg_clk_320m_oen",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CLK_ADC_INF_OEN": {
    +                    "description": "reg_clk_adc_inf_oen",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CLK_DAC_CPU_OEN": {
    +                    "description": "reg_clk_dac_cpu_oen",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CLK40X_BB_OEN": {
    +                    "description": "reg_clk40x_bb_oen",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CLK_XTAL_OEN": {
    +                    "description": "reg_clk_xtal_oen",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "WIFI_BB_CFG": {
    +              "description": "APB_CTRL_WIFI_BB_CFG_REG",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WIFI_BB_CFG": {
    +                    "description": "reg_wifi_bb_cfg",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "WIFI_BB_CFG_2": {
    +              "description": "APB_CTRL_WIFI_BB_CFG_2_REG",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WIFI_BB_CFG_2": {
    +                    "description": "reg_wifi_bb_cfg_2",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "WIFI_CLK_EN": {
    +              "description": "APB_CTRL_WIFI_CLK_EN_REG",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 4294762544,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WIFI_CLK_EN": {
    +                    "description": "reg_wifi_clk_en",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "WIFI_RST_EN": {
    +              "description": "APB_CTRL_WIFI_RST_EN_REG",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WIFI_RST": {
    +                    "description": "reg_wifi_rst",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "HOST_INF_SEL": {
    +              "description": "APB_CTRL_HOST_INF_SEL_REG",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PERI_IO_SWAP": {
    +                    "description": "reg_peri_io_swap",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "EXT_MEM_PMS_LOCK": {
    +              "description": "APB_CTRL_EXT_MEM_PMS_LOCK_REG",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EXT_MEM_PMS_LOCK": {
    +                    "description": "reg_ext_mem_pms_lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FLASH_ACE0_ATTR": {
    +              "description": "APB_CTRL_FLASH_ACE0_ATTR_REG",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 3,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FLASH_ACE0_ATTR": {
    +                    "description": "reg_flash_ace0_attr",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FLASH_ACE1_ATTR": {
    +              "description": "APB_CTRL_FLASH_ACE1_ATTR_REG",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 3,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FLASH_ACE1_ATTR": {
    +                    "description": "reg_flash_ace1_attr",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FLASH_ACE2_ATTR": {
    +              "description": "APB_CTRL_FLASH_ACE2_ATTR_REG",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 3,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FLASH_ACE2_ATTR": {
    +                    "description": "reg_flash_ace2_attr",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FLASH_ACE3_ATTR": {
    +              "description": "APB_CTRL_FLASH_ACE3_ATTR_REG",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 3,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FLASH_ACE3_ATTR": {
    +                    "description": "reg_flash_ace3_attr",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "FLASH_ACE0_ADDR": {
    +              "description": "APB_CTRL_FLASH_ACE0_ADDR_REG",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "S": {
    +                    "description": "reg_flash_ace0_addr_s",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "FLASH_ACE1_ADDR": {
    +              "description": "APB_CTRL_FLASH_ACE1_ADDR_REG",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 4194304,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "S": {
    +                    "description": "reg_flash_ace1_addr_s",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "FLASH_ACE2_ADDR": {
    +              "description": "APB_CTRL_FLASH_ACE2_ADDR_REG",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 8388608,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "S": {
    +                    "description": "reg_flash_ace2_addr_s",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "FLASH_ACE3_ADDR": {
    +              "description": "APB_CTRL_FLASH_ACE3_ADDR_REG",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 12582912,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "S": {
    +                    "description": "reg_flash_ace3_addr_s",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "FLASH_ACE0_SIZE": {
    +              "description": "APB_CTRL_FLASH_ACE0_SIZE_REG",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 1024,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FLASH_ACE0_SIZE": {
    +                    "description": "reg_flash_ace0_size",
    +                    "offset": 0,
    +                    "size": 13
    +                  }
    +                }
    +              }
    +            },
    +            "FLASH_ACE1_SIZE": {
    +              "description": "APB_CTRL_FLASH_ACE1_SIZE_REG",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 1024,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FLASH_ACE1_SIZE": {
    +                    "description": "reg_flash_ace1_size",
    +                    "offset": 0,
    +                    "size": 13
    +                  }
    +                }
    +              }
    +            },
    +            "FLASH_ACE2_SIZE": {
    +              "description": "APB_CTRL_FLASH_ACE2_SIZE_REG",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 1024,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FLASH_ACE2_SIZE": {
    +                    "description": "reg_flash_ace2_size",
    +                    "offset": 0,
    +                    "size": 13
    +                  }
    +                }
    +              }
    +            },
    +            "FLASH_ACE3_SIZE": {
    +              "description": "APB_CTRL_FLASH_ACE3_SIZE_REG",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 1024,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FLASH_ACE3_SIZE": {
    +                    "description": "reg_flash_ace3_size",
    +                    "offset": 0,
    +                    "size": 13
    +                  }
    +                }
    +              }
    +            },
    +            "SPI_MEM_PMS_CTRL": {
    +              "description": "APB_CTRL_SPI_MEM_PMS_CTRL_REG",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SPI_MEM_REJECT_INT": {
    +                    "description": "reg_spi_mem_reject_int",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SPI_MEM_REJECT_CLR": {
    +                    "description": "reg_spi_mem_reject_clr",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SPI_MEM_REJECT_CDE": {
    +                    "description": "reg_spi_mem_reject_cde",
    +                    "offset": 2,
    +                    "size": 5,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SPI_MEM_REJECT_ADDR": {
    +              "description": "APB_CTRL_SPI_MEM_REJECT_ADDR_REG",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SPI_MEM_REJECT_ADDR": {
    +                    "description": "reg_spi_mem_reject_addr",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SDIO_CTRL": {
    +              "description": "APB_CTRL_SDIO_CTRL_REG",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SDIO_WIN_ACCESS_EN": {
    +                    "description": "reg_sdio_win_access_en",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "REDCY_SIG0": {
    +              "description": "APB_CTRL_REDCY_SIG0_REG",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REDCY_SIG0": {
    +                    "description": "reg_redcy_sig0",
    +                    "offset": 0,
    +                    "size": 31
    +                  },
    +                  "REDCY_ANDOR": {
    +                    "description": "reg_redcy_andor",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "REDCY_SIG1": {
    +              "description": "APB_CTRL_REDCY_SIG1_REG",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REDCY_SIG1": {
    +                    "description": "reg_redcy_sig1",
    +                    "offset": 0,
    +                    "size": 31
    +                  },
    +                  "REDCY_NANDOR": {
    +                    "description": "reg_redcy_nandor",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "FRONT_END_MEM_PD": {
    +              "description": "APB_CTRL_FRONT_END_MEM_PD_REG",
    +              "offset": 156,
    +              "size": 32,
    +              "reset_value": 21,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AGC_MEM_FORCE_PU": {
    +                    "description": "reg_agc_mem_force_pu",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "AGC_MEM_FORCE_PD": {
    +                    "description": "reg_agc_mem_force_pd",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PBUS_MEM_FORCE_PU": {
    +                    "description": "reg_pbus_mem_force_pu",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PBUS_MEM_FORCE_PD": {
    +                    "description": "reg_pbus_mem_force_pd",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DC_MEM_FORCE_PU": {
    +                    "description": "reg_dc_mem_force_pu",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DC_MEM_FORCE_PD": {
    +                    "description": "reg_dc_mem_force_pd",
    +                    "offset": 5,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RETENTION_CTRL": {
    +              "description": "APB_CTRL_RETENTION_CTRL_REG",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RETENTION_LINK_ADDR": {
    +                    "description": "reg_retention_link_addr",
    +                    "offset": 0,
    +                    "size": 27
    +                  },
    +                  "NOBYPASS_CPU_ISO_RST": {
    +                    "description": "reg_nobypass_cpu_iso_rst",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLKGATE_FORCE_ON": {
    +              "description": "APB_CTRL_CLKGATE_FORCE_ON_REG",
    +              "offset": 164,
    +              "size": 32,
    +              "reset_value": 63,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ROM_CLKGATE_FORCE_ON": {
    +                    "description": "reg_rom_clkgate_force_on",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "SRAM_CLKGATE_FORCE_ON": {
    +                    "description": "reg_sram_clkgate_force_on",
    +                    "offset": 2,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "MEM_POWER_DOWN": {
    +              "description": "APB_CTRL_MEM_POWER_DOWN_REG",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ROM_POWER_DOWN": {
    +                    "description": "reg_rom_power_down",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "SRAM_POWER_DOWN": {
    +                    "description": "reg_sram_power_down",
    +                    "offset": 2,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "MEM_POWER_UP": {
    +              "description": "APB_CTRL_MEM_POWER_UP_REG",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 63,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ROM_POWER_UP": {
    +                    "description": "reg_rom_power_up",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "SRAM_POWER_UP": {
    +                    "description": "reg_sram_power_up",
    +                    "offset": 2,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "RND_DATA": {
    +              "description": "APB_CTRL_RND_DATA_REG",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RND_DATA": {
    +                    "description": "reg_rnd_data",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PERI_BACKUP_CONFIG": {
    +              "description": "APB_CTRL_PERI_BACKUP_CONFIG_REG",
    +              "offset": 180,
    +              "size": 32,
    +              "reset_value": 25728,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PERI_BACKUP_FLOW_ERR": {
    +                    "description": "reg_peri_backup_flow_err",
    +                    "offset": 1,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "PERI_BACKUP_BURST_LIMIT": {
    +                    "description": "reg_peri_backup_burst_limit",
    +                    "offset": 4,
    +                    "size": 5
    +                  },
    +                  "PERI_BACKUP_TOUT_THRES": {
    +                    "description": "reg_peri_backup_tout_thres",
    +                    "offset": 9,
    +                    "size": 10
    +                  },
    +                  "PERI_BACKUP_SIZE": {
    +                    "description": "reg_peri_backup_size",
    +                    "offset": 19,
    +                    "size": 10
    +                  },
    +                  "PERI_BACKUP_START": {
    +                    "description": "reg_peri_backup_start",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "PERI_BACKUP_TO_MEM": {
    +                    "description": "reg_peri_backup_to_mem",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PERI_BACKUP_ENA": {
    +                    "description": "reg_peri_backup_ena",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PERI_BACKUP_APB_ADDR": {
    +              "description": "APB_CTRL_PERI_BACKUP_APB_ADDR_REG",
    +              "offset": 184,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BACKUP_APB_START_ADDR": {
    +                    "description": "reg_backup_apb_start_addr",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PERI_BACKUP_MEM_ADDR": {
    +              "description": "APB_CTRL_PERI_BACKUP_MEM_ADDR_REG",
    +              "offset": 188,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BACKUP_MEM_START_ADDR": {
    +                    "description": "reg_backup_mem_start_addr",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PERI_BACKUP_INT_RAW": {
    +              "description": "APB_CTRL_PERI_BACKUP_INT_RAW_REG",
    +              "offset": 192,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PERI_BACKUP_DONE_INT_RAW": {
    +                    "description": "reg_peri_backup_done_int_raw",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PERI_BACKUP_ERR_INT_RAW": {
    +                    "description": "reg_peri_backup_err_int_raw",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PERI_BACKUP_INT_ST": {
    +              "description": "APB_CTRL_PERI_BACKUP_INT_ST_REG",
    +              "offset": 196,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PERI_BACKUP_DONE_INT_ST": {
    +                    "description": "reg_peri_backup_done_int_st",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PERI_BACKUP_ERR_INT_ST": {
    +                    "description": "reg_peri_backup_err_int_st",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PERI_BACKUP_INT_ENA": {
    +              "description": "APB_CTRL_PERI_BACKUP_INT_ENA_REG",
    +              "offset": 200,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PERI_BACKUP_DONE_INT_ENA": {
    +                    "description": "reg_peri_backup_done_int_ena",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PERI_BACKUP_ERR_INT_ENA": {
    +                    "description": "reg_peri_backup_err_int_ena",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PERI_BACKUP_INT_CLR": {
    +              "description": "APB_CTRL_PERI_BACKUP_INT_CLR_REG",
    +              "offset": 208,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PERI_BACKUP_DONE_INT_CLR": {
    +                    "description": "reg_peri_backup_done_int_clr",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "PERI_BACKUP_ERR_INT_CLR": {
    +                    "description": "reg_peri_backup_err_int_clr",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DATE": {
    +              "description": "APB_CTRL_DATE_REG",
    +              "offset": 1020,
    +              "size": 32,
    +              "reset_value": 33583632,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATE": {
    +                    "description": "reg_dateVersion control",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "APB_SARADC": {
    +        "description": "Successive Approximation Register Analog to Digital Converter",
    +        "children": {
    +          "registers": {
    +            "CTRL": {
    +              "description": "digital saradc configure register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 1073971776,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SARADC_START_FORCE": {
    +                    "description": "select software enable saradc sample",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SARADC_START": {
    +                    "description": "software enable saradc sample",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SARADC_SAR_CLK_GATED": {
    +                    "description": "SAR clock gated",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SARADC_SAR_CLK_DIV": {
    +                    "description": "SAR clock divider",
    +                    "offset": 7,
    +                    "size": 8
    +                  },
    +                  "SARADC_SAR_PATT_LEN": {
    +                    "description": "0 ~ 15 means length 1 ~ 16",
    +                    "offset": 15,
    +                    "size": 3
    +                  },
    +                  "SARADC_SAR_PATT_P_CLEAR": {
    +                    "description": "clear the pointer of pattern table for DIG ADC1 CTRL",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "SARADC_XPD_SAR_FORCE": {
    +                    "description": "force option to xpd sar blocks",
    +                    "offset": 27,
    +                    "size": 2
    +                  },
    +                  "SARADC_WAIT_ARB_CYCLE": {
    +                    "description": "wait arbit signal stable after sar_done",
    +                    "offset": 30,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CTRL2": {
    +              "description": "digital saradc configure register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 41470,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SARADC_MEAS_NUM_LIMIT": {
    +                    "description": "enable max meas num",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SARADC_MAX_MEAS_NUM": {
    +                    "description": "max conversion number",
    +                    "offset": 1,
    +                    "size": 8
    +                  },
    +                  "SARADC_SAR1_INV": {
    +                    "description": "1: data to DIG ADC1 CTRL is inverted, otherwise not",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SARADC_SAR2_INV": {
    +                    "description": "1: data to DIG ADC2 CTRL is inverted, otherwise not",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SARADC_TIMER_TARGET": {
    +                    "description": "to set saradc timer target",
    +                    "offset": 12,
    +                    "size": 12
    +                  },
    +                  "SARADC_TIMER_EN": {
    +                    "description": "to enable saradc timer trigger",
    +                    "offset": 24,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FILTER_CTRL1": {
    +              "description": "digital saradc configure register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "APB_SARADC_FILTER_FACTOR1": {
    +                    "description": "Factor of saradc filter1",
    +                    "offset": 26,
    +                    "size": 3
    +                  },
    +                  "APB_SARADC_FILTER_FACTOR0": {
    +                    "description": "Factor of saradc filter0",
    +                    "offset": 29,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "FSM_WAIT": {
    +              "description": "digital saradc configure register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 16713736,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SARADC_XPD_WAIT": {
    +                    "description": "saradc_xpd_wait",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "SARADC_RSTB_WAIT": {
    +                    "description": "saradc_rstb_wait",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "SARADC_STANDBY_WAIT": {
    +                    "description": "saradc_standby_wait",
    +                    "offset": 16,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SAR1_STATUS": {
    +              "description": "digital saradc configure register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SARADC_SAR1_STATUS": {
    +                    "description": "saradc1 status about data and channel",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SAR2_STATUS": {
    +              "description": "digital saradc configure register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SARADC_SAR2_STATUS": {
    +                    "description": "saradc2 status about data and channel",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SAR_PATT_TAB1": {
    +              "description": "digital saradc configure register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SARADC_SAR_PATT_TAB1": {
    +                    "description": "item 0 ~ 3 for pattern table 1 (each item one byte)",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "SAR_PATT_TAB2": {
    +              "description": "digital saradc configure register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SARADC_SAR_PATT_TAB2": {
    +                    "description": "Item 4 ~ 7 for pattern table 1 (each item one byte)",
    +                    "offset": 0,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "ONETIME_SAMPLE": {
    +              "description": "digital saradc configure register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 436207616,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SARADC_ONETIME_ATTEN": {
    +                    "description": "configure onetime atten",
    +                    "offset": 23,
    +                    "size": 2
    +                  },
    +                  "SARADC_ONETIME_CHANNEL": {
    +                    "description": "configure onetime channel",
    +                    "offset": 25,
    +                    "size": 4
    +                  },
    +                  "SARADC_ONETIME_START": {
    +                    "description": "trigger adc onetime sample",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "SARADC2_ONETIME_SAMPLE": {
    +                    "description": "enable adc2 onetime sample",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SARADC1_ONETIME_SAMPLE": {
    +                    "description": "enable adc1 onetime sample",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ARB_CTRL": {
    +              "description": "digital saradc configure register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 2304,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ADC_ARB_APB_FORCE": {
    +                    "description": "adc2 arbiter force to enableapb controller",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ADC_ARB_RTC_FORCE": {
    +                    "description": "adc2 arbiter force to enable rtc controller",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ADC_ARB_WIFI_FORCE": {
    +                    "description": "adc2 arbiter force to enable wifi controller",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ADC_ARB_GRANT_FORCE": {
    +                    "description": "adc2 arbiter force grant",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ADC_ARB_APB_PRIORITY": {
    +                    "description": "Set adc2 arbiterapb priority",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "ADC_ARB_RTC_PRIORITY": {
    +                    "description": "Set adc2 arbiter rtc priority",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "ADC_ARB_WIFI_PRIORITY": {
    +                    "description": "Set adc2 arbiter wifi priority",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "ADC_ARB_FIX_PRIORITY": {
    +                    "description": "adc2 arbiter uses fixed priority",
    +                    "offset": 12,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FILTER_CTRL0": {
    +              "description": "digital saradc configure register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 57933824,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "APB_SARADC_FILTER_CHANNEL1": {
    +                    "description": "configure filter1 to adc channel",
    +                    "offset": 18,
    +                    "size": 4
    +                  },
    +                  "APB_SARADC_FILTER_CHANNEL0": {
    +                    "description": "configure filter0 to adc channel",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "APB_SARADC_FILTER_RESET": {
    +                    "description": "enable apb_adc1_filter",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SAR1DATA_STATUS": {
    +              "description": "digital saradc configure register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "APB_SARADC1_DATA": {
    +                    "description": "saradc1 data",
    +                    "offset": 0,
    +                    "size": 17,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SAR2DATA_STATUS": {
    +              "description": "digital saradc configure register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "APB_SARADC2_DATA": {
    +                    "description": "saradc2 data",
    +                    "offset": 0,
    +                    "size": 17,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "THRES0_CTRL": {
    +              "description": "digital saradc configure register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 262125,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "APB_SARADC_THRES0_CHANNEL": {
    +                    "description": "configure thres0 to adc channel",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "APB_SARADC_THRES0_HIGH": {
    +                    "description": "saradc thres0 monitor thres",
    +                    "offset": 5,
    +                    "size": 13
    +                  },
    +                  "APB_SARADC_THRES0_LOW": {
    +                    "description": "saradc thres0 monitor thres",
    +                    "offset": 18,
    +                    "size": 13
    +                  }
    +                }
    +              }
    +            },
    +            "THRES1_CTRL": {
    +              "description": "digital saradc configure register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 262125,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "APB_SARADC_THRES1_CHANNEL": {
    +                    "description": "configure thres1 to adc channel",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "APB_SARADC_THRES1_HIGH": {
    +                    "description": "saradc thres1 monitor thres",
    +                    "offset": 5,
    +                    "size": 13
    +                  },
    +                  "APB_SARADC_THRES1_LOW": {
    +                    "description": "saradc thres1 monitor thres",
    +                    "offset": 18,
    +                    "size": 13
    +                  }
    +                }
    +              }
    +            },
    +            "THRES_CTRL": {
    +              "description": "digital saradc configure register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "APB_SARADC_THRES_ALL_EN": {
    +                    "description": "enable thres to all channel",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "APB_SARADC_THRES1_EN": {
    +                    "description": "enable thres1",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "APB_SARADC_THRES0_EN": {
    +                    "description": "enable thres0",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ENA": {
    +              "description": "digital saradc int register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "APB_SARADC_THRES1_LOW_INT_ENA": {
    +                    "description": "saradc thres1 low  interrupt enable",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "APB_SARADC_THRES0_LOW_INT_ENA": {
    +                    "description": "saradc thres0 low interrupt enable",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "APB_SARADC_THRES1_HIGH_INT_ENA": {
    +                    "description": "saradc thres1 high interrupt enable",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "APB_SARADC_THRES0_HIGH_INT_ENA": {
    +                    "description": "saradc thres0 high interrupt enable",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "APB_SARADC2_DONE_INT_ENA": {
    +                    "description": "saradc2 done interrupt enable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "APB_SARADC1_DONE_INT_ENA": {
    +                    "description": "saradc1 done interrupt enable",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INT_RAW": {
    +              "description": "digital saradc int register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "APB_SARADC_THRES1_LOW_INT_RAW": {
    +                    "description": "saradc thres1 low  interrupt raw",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "APB_SARADC_THRES0_LOW_INT_RAW": {
    +                    "description": "saradc thres0 low interrupt raw",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "APB_SARADC_THRES1_HIGH_INT_RAW": {
    +                    "description": "saradc thres1 high interrupt raw",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "APB_SARADC_THRES0_HIGH_INT_RAW": {
    +                    "description": "saradc thres0 high interrupt raw",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "APB_SARADC2_DONE_INT_RAW": {
    +                    "description": "saradc2 done interrupt raw",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "APB_SARADC1_DONE_INT_RAW": {
    +                    "description": "saradc1 done interrupt raw",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ST": {
    +              "description": "digital saradc int register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "APB_SARADC_THRES1_LOW_INT_ST": {
    +                    "description": "saradc thres1 low  interrupt state",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "APB_SARADC_THRES0_LOW_INT_ST": {
    +                    "description": "saradc thres0 low interrupt state",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "APB_SARADC_THRES1_HIGH_INT_ST": {
    +                    "description": "saradc thres1 high interrupt state",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "APB_SARADC_THRES0_HIGH_INT_ST": {
    +                    "description": "saradc thres0 high interrupt state",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "APB_SARADC2_DONE_INT_ST": {
    +                    "description": "saradc2 done interrupt state",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "APB_SARADC1_DONE_INT_ST": {
    +                    "description": "saradc1 done interrupt state",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_CLR": {
    +              "description": "digital saradc int register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "APB_SARADC_THRES1_LOW_INT_CLR": {
    +                    "description": "saradc thres1 low  interrupt clear",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "APB_SARADC_THRES0_LOW_INT_CLR": {
    +                    "description": "saradc thres0 low interrupt clear",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "APB_SARADC_THRES1_HIGH_INT_CLR": {
    +                    "description": "saradc thres1 high interrupt clear",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "APB_SARADC_THRES0_HIGH_INT_CLR": {
    +                    "description": "saradc thres0 high interrupt clear",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "APB_SARADC2_DONE_INT_CLR": {
    +                    "description": "saradc2 done interrupt clear",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "APB_SARADC1_DONE_INT_CLR": {
    +                    "description": "saradc1 done interrupt clear",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_CONF": {
    +              "description": "digital saradc configure register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 255,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "APB_ADC_EOF_NUM": {
    +                    "description": "the dma_in_suc_eof gen when sample cnt = spi_eof_num",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "APB_ADC_RESET_FSM": {
    +                    "description": "reset_apb_adc_state",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "APB_ADC_TRANS": {
    +                    "description": "enable apb_adc use spi_dma",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLKM_CONF": {
    +              "description": "digital saradc configure register",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 4,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLKM_DIV_NUM": {
    +                    "description": "Integral I2S clock divider value",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "CLKM_DIV_B": {
    +                    "description": "Fractional clock divider numerator value",
    +                    "offset": 8,
    +                    "size": 6
    +                  },
    +                  "CLKM_DIV_A": {
    +                    "description": "Fractional clock divider denominator value",
    +                    "offset": 14,
    +                    "size": 6
    +                  },
    +                  "CLK_EN": {
    +                    "description": "reg clk en",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CLK_SEL": {
    +                    "description": "Set this bit to enable clk_apll",
    +                    "offset": 21,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "APB_TSENS_CTRL": {
    +              "description": "digital tsens configure register",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 98304,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TSENS_OUT": {
    +                    "description": "temperature sensor data out",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  },
    +                  "TSENS_IN_INV": {
    +                    "description": "invert temperature sensor data",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TSENS_CLK_DIV": {
    +                    "description": "temperature sensor clock divider",
    +                    "offset": 14,
    +                    "size": 8
    +                  },
    +                  "TSENS_PU": {
    +                    "description": "temperature sensor power up",
    +                    "offset": 22,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TSENS_CTRL2": {
    +              "description": "digital tsens configure register",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 16386,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TSENS_XPD_WAIT": {
    +                    "description": "the time that power up tsens need wait",
    +                    "offset": 0,
    +                    "size": 12
    +                  },
    +                  "TSENS_XPD_FORCE": {
    +                    "description": "force power up tsens",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "TSENS_CLK_INV": {
    +                    "description": "inv tsens clk",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TSENS_CLK_SEL": {
    +                    "description": "tsens clk select",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CALI": {
    +              "description": "digital saradc configure register",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 32768,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "APB_SARADC_CALI_CFG": {
    +                    "description": "saradc cali factor",
    +                    "offset": 0,
    +                    "size": 17
    +                  }
    +                }
    +              }
    +            },
    +            "CTRL_DATE": {
    +              "description": "version",
    +              "offset": 1020,
    +              "size": 32,
    +              "reset_value": 33583473,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATE": {
    +                    "description": "version",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "ASSIST_DEBUG": {
    +        "description": "Debug Assist",
    +        "children": {
    +          "registers": {
    +            "C0RE_0_MONTR_ENA": {
    +              "description": "ASSIST_DEBUG_C0RE_0_MONTR_ENA_REG",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_AREA_DRAM0_0_RD_ENA": {
    +                    "description": "reg_core_0_area_dram0_0_rd_ena",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CORE_0_AREA_DRAM0_0_WR_ENA": {
    +                    "description": "reg_core_0_area_dram0_0_wr_ena",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CORE_0_AREA_DRAM0_1_RD_ENA": {
    +                    "description": "reg_core_0_area_dram0_1_rd_ena",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CORE_0_AREA_DRAM0_1_WR_ENA": {
    +                    "description": "reg_core_0_area_dram0_1_wr_ena",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CORE_0_AREA_PIF_0_RD_ENA": {
    +                    "description": "reg_core_0_area_pif_0_rd_ena",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CORE_0_AREA_PIF_0_WR_ENA": {
    +                    "description": "reg_core_0_area_pif_0_wr_ena",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CORE_0_AREA_PIF_1_RD_ENA": {
    +                    "description": "reg_core_0_area_pif_1_rd_ena",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CORE_0_AREA_PIF_1_WR_ENA": {
    +                    "description": "reg_core_0_area_pif_1_wr_ena",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CORE_0_SP_SPILL_MIN_ENA": {
    +                    "description": "reg_core_0_sp_spill_min_ena",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CORE_0_SP_SPILL_MAX_ENA": {
    +                    "description": "reg_core_0_sp_spill_max_ena",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CORE_0_IRAM0_EXCEPTION_MONITOR_ENA": {
    +                    "description": "reg_core_0_iram0_exception_monitor_ena",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CORE_0_DRAM0_EXCEPTION_MONITOR_ENA": {
    +                    "description": "reg_core_0_dram0_exception_monitor_ena",
    +                    "offset": 11,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_INTR_RAW": {
    +              "description": "ASSIST_DEBUG_CORE_0_INTR_RAW_REG",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_AREA_DRAM0_0_RD_RAW": {
    +                    "description": "reg_core_0_area_dram0_0_rd_raw",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_AREA_DRAM0_0_WR_RAW": {
    +                    "description": "reg_core_0_area_dram0_0_wr_raw",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_AREA_DRAM0_1_RD_RAW": {
    +                    "description": "reg_core_0_area_dram0_1_rd_raw",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_AREA_DRAM0_1_WR_RAW": {
    +                    "description": "reg_core_0_area_dram0_1_wr_raw",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_AREA_PIF_0_RD_RAW": {
    +                    "description": "reg_core_0_area_pif_0_rd_raw",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_AREA_PIF_0_WR_RAW": {
    +                    "description": "reg_core_0_area_pif_0_wr_raw",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_AREA_PIF_1_RD_RAW": {
    +                    "description": "reg_core_0_area_pif_1_rd_raw",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_AREA_PIF_1_WR_RAW": {
    +                    "description": "reg_core_0_area_pif_1_wr_raw",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_SP_SPILL_MIN_RAW": {
    +                    "description": "reg_core_0_sp_spill_min_raw",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_SP_SPILL_MAX_RAW": {
    +                    "description": "reg_core_0_sp_spill_max_raw",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_IRAM0_EXCEPTION_MONITOR_RAW": {
    +                    "description": "reg_core_0_iram0_exception_monitor_raw",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_DRAM0_EXCEPTION_MONITOR_RAW": {
    +                    "description": "reg_core_0_dram0_exception_monitor_raw",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_INTR_ENA": {
    +              "description": "ASSIST_DEBUG_CORE_0_INTR_ENA_REG",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_AREA_DRAM0_0_RD_INTR_ENA": {
    +                    "description": "reg_core_0_area_dram0_0_rd_intr_ena",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CORE_0_AREA_DRAM0_0_WR_INTR_ENA": {
    +                    "description": "reg_core_0_area_dram0_0_wr_intr_ena",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CORE_0_AREA_DRAM0_1_RD_INTR_ENA": {
    +                    "description": "reg_core_0_area_dram0_1_rd_intr_ena",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CORE_0_AREA_DRAM0_1_WR_INTR_ENA": {
    +                    "description": "reg_core_0_area_dram0_1_wr_intr_ena",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CORE_0_AREA_PIF_0_RD_INTR_ENA": {
    +                    "description": "reg_core_0_area_pif_0_rd_intr_ena",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CORE_0_AREA_PIF_0_WR_INTR_ENA": {
    +                    "description": "reg_core_0_area_pif_0_wr_intr_ena",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CORE_0_AREA_PIF_1_RD_INTR_ENA": {
    +                    "description": "reg_core_0_area_pif_1_rd_intr_ena",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CORE_0_AREA_PIF_1_WR_INTR_ENA": {
    +                    "description": "reg_core_0_area_pif_1_wr_intr_ena",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CORE_0_SP_SPILL_MIN_INTR_ENA": {
    +                    "description": "reg_core_0_sp_spill_min_intr_ena",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CORE_0_SP_SPILL_MAX_INTR_ENA": {
    +                    "description": "reg_core_0_sp_spill_max_intr_ena",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CORE_0_IRAM0_EXCEPTION_MONITOR_RLS": {
    +                    "description": "reg_core_0_iram0_exception_monitor_ena",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CORE_0_DRAM0_EXCEPTION_MONITOR_RLS": {
    +                    "description": "reg_core_0_dram0_exception_monitor_ena",
    +                    "offset": 11,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_INTR_CLR": {
    +              "description": "ASSIST_DEBUG_CORE_0_INTR_CLR_REG",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_AREA_DRAM0_0_RD_CLR": {
    +                    "description": "reg_core_0_area_dram0_0_rd_clr",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CORE_0_AREA_DRAM0_0_WR_CLR": {
    +                    "description": "reg_core_0_area_dram0_0_wr_clr",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CORE_0_AREA_DRAM0_1_RD_CLR": {
    +                    "description": "reg_core_0_area_dram0_1_rd_clr",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CORE_0_AREA_DRAM0_1_WR_CLR": {
    +                    "description": "reg_core_0_area_dram0_1_wr_clr",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CORE_0_AREA_PIF_0_RD_CLR": {
    +                    "description": "reg_core_0_area_pif_0_rd_clr",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CORE_0_AREA_PIF_0_WR_CLR": {
    +                    "description": "reg_core_0_area_pif_0_wr_clr",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CORE_0_AREA_PIF_1_RD_CLR": {
    +                    "description": "reg_core_0_area_pif_1_rd_clr",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CORE_0_AREA_PIF_1_WR_CLR": {
    +                    "description": "reg_core_0_area_pif_1_wr_clr",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CORE_0_SP_SPILL_MIN_CLR": {
    +                    "description": "reg_core_0_sp_spill_min_clr",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CORE_0_SP_SPILL_MAX_CLR": {
    +                    "description": "reg_core_0_sp_spill_max_clr",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CORE_0_IRAM0_EXCEPTION_MONITOR_CLR": {
    +                    "description": "reg_core_0_iram0_exception_monitor_clr",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CORE_0_DRAM0_EXCEPTION_MONITOR_CLR": {
    +                    "description": "reg_core_0_dram0_exception_monitor_clr",
    +                    "offset": 11,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_AREA_DRAM0_0_MIN": {
    +              "description": "ASSIST_DEBUG_CORE_0_AREA_DRAM0_0_MIN_REG",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_AREA_DRAM0_0_MIN": {
    +                    "description": "reg_core_0_area_dram0_0_min",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_AREA_DRAM0_0_MAX": {
    +              "description": "ASSIST_DEBUG_CORE_0_AREA_DRAM0_0_MAX_REG",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_AREA_DRAM0_0_MAX": {
    +                    "description": "reg_core_0_area_dram0_0_max",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_AREA_DRAM0_1_MIN": {
    +              "description": "ASSIST_DEBUG_CORE_0_AREA_DRAM0_1_MIN_REG",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_AREA_DRAM0_1_MIN": {
    +                    "description": "reg_core_0_area_dram0_1_min",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_AREA_DRAM0_1_MAX": {
    +              "description": "ASSIST_DEBUG_CORE_0_AREA_DRAM0_1_MAX_REG",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_AREA_DRAM0_1_MAX": {
    +                    "description": "reg_core_0_area_dram0_1_max",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_AREA_PIF_0_MIN": {
    +              "description": "ASSIST_DEBUG_CORE_0_AREA_PIF_0_MIN_REG",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_AREA_PIF_0_MIN": {
    +                    "description": "reg_core_0_area_pif_0_min",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_AREA_PIF_0_MAX": {
    +              "description": "ASSIST_DEBUG_CORE_0_AREA_PIF_0_MAX_REG",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_AREA_PIF_0_MAX": {
    +                    "description": "reg_core_0_area_pif_0_max",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_AREA_PIF_1_MIN": {
    +              "description": "ASSIST_DEBUG_CORE_0_AREA_PIF_1_MIN_REG",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_AREA_PIF_1_MIN": {
    +                    "description": "reg_core_0_area_pif_1_min",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_AREA_PIF_1_MAX": {
    +              "description": "ASSIST_DEBUG_CORE_0_AREA_PIF_1_MAX_REG",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_AREA_PIF_1_MAX": {
    +                    "description": "reg_core_0_area_pif_1_max",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_AREA_PC": {
    +              "description": "ASSIST_DEBUG_CORE_0_AREA_PC_REG",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_AREA_PC": {
    +                    "description": "reg_core_0_area_pc",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_AREA_SP": {
    +              "description": "ASSIST_DEBUG_CORE_0_AREA_SP_REG",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_AREA_SP": {
    +                    "description": "reg_core_0_area_sp",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_SP_MIN": {
    +              "description": "ASSIST_DEBUG_CORE_0_SP_MIN_REG",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_SP_MIN": {
    +                    "description": "reg_core_0_sp_min",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_SP_MAX": {
    +              "description": "ASSIST_DEBUG_CORE_0_SP_MAX_REG",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_SP_MAX": {
    +                    "description": "reg_core_0_sp_max",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_SP_PC": {
    +              "description": "ASSIST_DEBUG_CORE_0_SP_PC_REG",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_SP_PC": {
    +                    "description": "reg_core_0_sp_pc",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_RCD_EN": {
    +              "description": "ASSIST_DEBUG_CORE_0_RCD_EN_REG",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_RCD_RECORDEN": {
    +                    "description": "reg_core_0_rcd_recorden",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CORE_0_RCD_PDEBUGEN": {
    +                    "description": "reg_core_0_rcd_pdebugen",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_RCD_PDEBUGPC": {
    +              "description": "ASSIST_DEBUG_CORE_0_RCD_PDEBUGPC_REG",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_RCD_PDEBUGPC": {
    +                    "description": "reg_core_0_rcd_pdebugpc",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_RCD_PDEBUGSP": {
    +              "description": "ASSIST_DEBUG_CORE_0_RCD_PDEBUGSP_REG",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_RCD_PDEBUGSP": {
    +                    "description": "reg_core_0_rcd_pdebugsp",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_IRAM0_EXCEPTION_MONITOR_0": {
    +              "description": "ASSIST_DEBUG_CORE_0_RCD_PDEBUGSP_REG",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_IRAM0_RECORDING_ADDR_0": {
    +                    "description": "reg_core_0_iram0_recording_addr_0",
    +                    "offset": 0,
    +                    "size": 24,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_IRAM0_RECORDING_WR_0": {
    +                    "description": "reg_core_0_iram0_recording_wr_0",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_IRAM0_RECORDING_LOADSTORE_0": {
    +                    "description": "reg_core_0_iram0_recording_loadstore_0",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_IRAM0_EXCEPTION_MONITOR_1": {
    +              "description": "ASSIST_DEBUG_CORE_0_IRAM0_EXCEPTION_MONITOR_1_REG",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_IRAM0_RECORDING_ADDR_1": {
    +                    "description": "reg_core_0_iram0_recording_addr_1",
    +                    "offset": 0,
    +                    "size": 24,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_IRAM0_RECORDING_WR_1": {
    +                    "description": "reg_core_0_iram0_recording_wr_1",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_IRAM0_RECORDING_LOADSTORE_1": {
    +                    "description": "reg_core_0_iram0_recording_loadstore_1",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_DRAM0_EXCEPTION_MONITOR_0": {
    +              "description": "ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_0_REG",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_DRAM0_RECORDING_ADDR_0": {
    +                    "description": "reg_core_0_dram0_recording_addr_0",
    +                    "offset": 0,
    +                    "size": 24,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_DRAM0_RECORDING_WR_0": {
    +                    "description": "reg_core_0_dram0_recording_wr_0",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_DRAM0_RECORDING_BYTEEN_0": {
    +                    "description": "reg_core_0_dram0_recording_byteen_0",
    +                    "offset": 25,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_DRAM0_EXCEPTION_MONITOR_1": {
    +              "description": "ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_1_REG",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_DRAM0_RECORDING_PC_0": {
    +                    "description": "reg_core_0_dram0_recording_pc_0",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_DRAM0_EXCEPTION_MONITOR_2": {
    +              "description": "ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_1_REG",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_DRAM0_RECORDING_ADDR_1": {
    +                    "description": "reg_core_0_dram0_recording_addr_1",
    +                    "offset": 0,
    +                    "size": 24,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_DRAM0_RECORDING_WR_1": {
    +                    "description": "reg_core_0_dram0_recording_wr_1",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_DRAM0_RECORDING_BYTEEN_1": {
    +                    "description": "reg_core_0_dram0_recording_byteen_1",
    +                    "offset": 25,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_DRAM0_EXCEPTION_MONITOR_3": {
    +              "description": "ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_3_REG",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_DRAM0_RECORDING_PC_1": {
    +                    "description": "reg_core_0_dram0_recording_pc_1",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_0": {
    +              "description": "ASSIST_DEBUG_CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_0_REG",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_X_IRAM0_DRAM0_LIMIT_CYCLE_0": {
    +                    "description": "reg_core_x_iram0_dram0_limit_cycle_0",
    +                    "offset": 0,
    +                    "size": 20
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_1": {
    +              "description": "ASSIST_DEBUG_CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_1_REG",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_X_IRAM0_DRAM0_LIMIT_CYCLE_1": {
    +                    "description": "reg_core_x_iram0_dram0_limit_cycle_1",
    +                    "offset": 0,
    +                    "size": 20
    +                  }
    +                }
    +              }
    +            },
    +            "LOG_SETTING": {
    +              "description": "ASSIST_DEBUG_LOG_SETTING",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LOG_ENA": {
    +                    "description": "reg_log_ena",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "LOG_MODE": {
    +                    "description": "reg_log_mode",
    +                    "offset": 3,
    +                    "size": 4
    +                  },
    +                  "LOG_MEM_LOOP_ENABLE": {
    +                    "description": "reg_log_mem_loop_enable",
    +                    "offset": 7,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "LOG_DATA_0": {
    +              "description": "ASSIST_DEBUG_LOG_DATA_0_REG",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LOG_DATA_0": {
    +                    "description": "reg_log_data_0",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "LOG_DATA_MASK": {
    +              "description": "ASSIST_DEBUG_LOG_DATA_MASK_REG",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LOG_DATA_SIZE": {
    +                    "description": "reg_log_data_size",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "LOG_MIN": {
    +              "description": "ASSIST_DEBUG_LOG_MIN_REG",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LOG_MIN": {
    +                    "description": "reg_log_min",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "LOG_MAX": {
    +              "description": "ASSIST_DEBUG_LOG_MAX_REG",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LOG_MAX": {
    +                    "description": "reg_log_max",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "LOG_MEM_START": {
    +              "description": "ASSIST_DEBUG_LOG_MEM_START_REG",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LOG_MEM_START": {
    +                    "description": "reg_log_mem_start",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "LOG_MEM_END": {
    +              "description": "ASSIST_DEBUG_LOG_MEM_END_REG",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LOG_MEM_END": {
    +                    "description": "reg_log_mem_end",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "LOG_MEM_WRITING_ADDR": {
    +              "description": "ASSIST_DEBUG_LOG_MEM_WRITING_ADDR_REG",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LOG_MEM_WRITING_ADDR": {
    +                    "description": "reg_log_mem_writing_addr",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "LOG_MEM_FULL_FLAG": {
    +              "description": "ASSIST_DEBUG_LOG_MEM_FULL_FLAG_REG",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LOG_MEM_FULL_FLAG": {
    +                    "description": "reg_log_mem_full_flag",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CLR_LOG_MEM_FULL_FLAG": {
    +                    "description": "reg_clr_log_mem_full_flag",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "C0RE_0_LASTPC_BEFORE_EXCEPTION": {
    +              "description": "ASSIST_DEBUG_C0RE_0_LASTPC_BEFORE_EXCEPTION",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_LASTPC_BEFORE_EXC": {
    +                    "description": "reg_core_0_lastpc_before_exc",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "C0RE_0_DEBUG_MODE": {
    +              "description": "ASSIST_DEBUG_C0RE_0_DEBUG_MODE",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_DEBUG_MODE": {
    +                    "description": "reg_core_0_debug_mode",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_DEBUG_MODULE_ACTIVE": {
    +                    "description": "reg_core_0_debug_module_active",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DATE": {
    +              "description": "ASSIST_DEBUG_DATE_REG",
    +              "offset": 508,
    +              "size": 32,
    +              "reset_value": 33587216,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ASSIST_DEBUG_DATE": {
    +                    "description": "reg_assist_debug_date",
    +                    "offset": 0,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "DMA": {
    +        "description": "DMA (Direct Memory Access) Controller",
    +        "children": {
    +          "registers": {
    +            "INT_RAW_CH0": {
    +              "description": "DMA_INT_RAW_CH0_REG.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_DONE_CH0_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 0.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_SUC_EOF_CH0_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 0. For UHCI0, the raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received and no data error is detected for Rx channel 0.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_ERR_EOF_CH0_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when data error is detected only in the case that the peripheral is UHCI0 for Rx channel 0. For other peripherals, this raw interrupt is reserved.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_DONE_CH0_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been transmitted to peripherals for Tx channel 0.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_EOF_CH0_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been read from memory for Tx channel 0.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_DSCR_ERR_CH0_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when detecting inlink descriptor error, including owner error, the second and third word error of inlink descriptor for Rx channel 0.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_DSCR_ERR_CH0_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when detecting outlink descriptor error, including owner error, the second and third word error of outlink descriptor for Tx channel 0.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_DSCR_EMPTY_CH0_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when Rx buffer pointed by inlink is full and receiving data is not completed, but there is no more inlink for Rx channel 0.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_TOTAL_EOF_CH0_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when data corresponding a outlink (includes one link descriptor or few link descriptors) is transmitted out for Tx channel 0.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFIFO_OVF_CH0_INT_RAW": {
    +                    "description": "This raw interrupt bit turns to high level when level 1 fifo of Rx channel 0 is overflow.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFIFO_UDF_CH0_INT_RAW": {
    +                    "description": "This raw interrupt bit turns to high level when level 1 fifo of Rx channel 0 is underflow.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFIFO_OVF_CH0_INT_RAW": {
    +                    "description": "This raw interrupt bit turns to high level when level 1 fifo of Tx channel 0 is overflow.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFIFO_UDF_CH0_INT_RAW": {
    +                    "description": "This raw interrupt bit turns to high level when level 1 fifo of Tx channel 0 is underflow.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ST_CH0": {
    +              "description": "DMA_INT_ST_CH0_REG.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_DONE_CH0_INT_ST": {
    +                    "description": "The raw interrupt status bit for the IN_DONE_CH_INT interrupt.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_SUC_EOF_CH0_INT_ST": {
    +                    "description": "The raw interrupt status bit for the IN_SUC_EOF_CH_INT interrupt.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_ERR_EOF_CH0_INT_ST": {
    +                    "description": "The raw interrupt status bit for the IN_ERR_EOF_CH_INT interrupt.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_DONE_CH0_INT_ST": {
    +                    "description": "The raw interrupt status bit for the OUT_DONE_CH_INT interrupt.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_EOF_CH0_INT_ST": {
    +                    "description": "The raw interrupt status bit for the OUT_EOF_CH_INT interrupt.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_DSCR_ERR_CH0_INT_ST": {
    +                    "description": "The raw interrupt status bit for the IN_DSCR_ERR_CH_INT interrupt.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_DSCR_ERR_CH0_INT_ST": {
    +                    "description": "The raw interrupt status bit for the OUT_DSCR_ERR_CH_INT interrupt.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_DSCR_EMPTY_CH0_INT_ST": {
    +                    "description": "The raw interrupt status bit for the IN_DSCR_EMPTY_CH_INT interrupt.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_TOTAL_EOF_CH0_INT_ST": {
    +                    "description": "The raw interrupt status bit for the OUT_TOTAL_EOF_CH_INT interrupt.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFIFO_OVF_CH0_INT_ST": {
    +                    "description": "The raw interrupt status bit for the INFIFO_OVF_L1_CH_INT interrupt.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFIFO_UDF_CH0_INT_ST": {
    +                    "description": "The raw interrupt status bit for the INFIFO_UDF_L1_CH_INT interrupt.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFIFO_OVF_CH0_INT_ST": {
    +                    "description": "The raw interrupt status bit for the OUTFIFO_OVF_L1_CH_INT interrupt.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFIFO_UDF_CH0_INT_ST": {
    +                    "description": "The raw interrupt status bit for the OUTFIFO_UDF_L1_CH_INT interrupt.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ENA_CH0": {
    +              "description": "DMA_INT_ENA_CH0_REG.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_DONE_CH0_INT_ENA": {
    +                    "description": "The interrupt enable bit for the IN_DONE_CH_INT interrupt.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "IN_SUC_EOF_CH0_INT_ENA": {
    +                    "description": "The interrupt enable bit for the IN_SUC_EOF_CH_INT interrupt.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IN_ERR_EOF_CH0_INT_ENA": {
    +                    "description": "The interrupt enable bit for the IN_ERR_EOF_CH_INT interrupt.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OUT_DONE_CH0_INT_ENA": {
    +                    "description": "The interrupt enable bit for the OUT_DONE_CH_INT interrupt.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OUT_EOF_CH0_INT_ENA": {
    +                    "description": "The interrupt enable bit for the OUT_EOF_CH_INT interrupt.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IN_DSCR_ERR_CH0_INT_ENA": {
    +                    "description": "The interrupt enable bit for the IN_DSCR_ERR_CH_INT interrupt.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "OUT_DSCR_ERR_CH0_INT_ENA": {
    +                    "description": "The interrupt enable bit for the OUT_DSCR_ERR_CH_INT interrupt.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "IN_DSCR_EMPTY_CH0_INT_ENA": {
    +                    "description": "The interrupt enable bit for the IN_DSCR_EMPTY_CH_INT interrupt.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OUT_TOTAL_EOF_CH0_INT_ENA": {
    +                    "description": "The interrupt enable bit for the OUT_TOTAL_EOF_CH_INT interrupt.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "INFIFO_OVF_CH0_INT_ENA": {
    +                    "description": "The interrupt enable bit for the INFIFO_OVF_L1_CH_INT interrupt.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "INFIFO_UDF_CH0_INT_ENA": {
    +                    "description": "The interrupt enable bit for the INFIFO_UDF_L1_CH_INT interrupt.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OUTFIFO_OVF_CH0_INT_ENA": {
    +                    "description": "The interrupt enable bit for the OUTFIFO_OVF_L1_CH_INT interrupt.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OUTFIFO_UDF_CH0_INT_ENA": {
    +                    "description": "The interrupt enable bit for the OUTFIFO_UDF_L1_CH_INT interrupt.",
    +                    "offset": 12,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INT_CLR_CH0": {
    +              "description": "DMA_INT_CLR_CH0_REG.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_DONE_CH0_INT_CLR": {
    +                    "description": "Set this bit to clear the IN_DONE_CH_INT interrupt.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "IN_SUC_EOF_CH0_INT_CLR": {
    +                    "description": "Set this bit to clear the IN_SUC_EOF_CH_INT interrupt.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "IN_ERR_EOF_CH0_INT_CLR": {
    +                    "description": "Set this bit to clear the IN_ERR_EOF_CH_INT interrupt.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OUT_DONE_CH0_INT_CLR": {
    +                    "description": "Set this bit to clear the OUT_DONE_CH_INT interrupt.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OUT_EOF_CH0_INT_CLR": {
    +                    "description": "Set this bit to clear the OUT_EOF_CH_INT interrupt.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "IN_DSCR_ERR_CH0_INT_CLR": {
    +                    "description": "Set this bit to clear the IN_DSCR_ERR_CH_INT interrupt.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OUT_DSCR_ERR_CH0_INT_CLR": {
    +                    "description": "Set this bit to clear the OUT_DSCR_ERR_CH_INT interrupt.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "IN_DSCR_EMPTY_CH0_INT_CLR": {
    +                    "description": "Set this bit to clear the IN_DSCR_EMPTY_CH_INT interrupt.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OUT_TOTAL_EOF_CH0_INT_CLR": {
    +                    "description": "Set this bit to clear the OUT_TOTAL_EOF_CH_INT interrupt.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "INFIFO_OVF_CH0_INT_CLR": {
    +                    "description": "Set this bit to clear the INFIFO_OVF_L1_CH_INT interrupt.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "INFIFO_UDF_CH0_INT_CLR": {
    +                    "description": "Set this bit to clear the INFIFO_UDF_L1_CH_INT interrupt.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OUTFIFO_OVF_CH0_INT_CLR": {
    +                    "description": "Set this bit to clear the OUTFIFO_OVF_L1_CH_INT interrupt.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OUTFIFO_UDF_CH0_INT_CLR": {
    +                    "description": "Set this bit to clear the OUTFIFO_UDF_L1_CH_INT interrupt.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_RAW_CH1": {
    +              "description": "DMA_INT_RAW_CH1_REG.",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_DONE_CH1_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 1.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_SUC_EOF_CH1_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 1. For UHCI0, the raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received and no data error is detected for Rx channel 1.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_ERR_EOF_CH1_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when data error is detected only in the case that the peripheral is UHCI0 for Rx channel 1. For other peripherals, this raw interrupt is reserved.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_DONE_CH1_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been transmitted to peripherals for Tx channel 1.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_EOF_CH1_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been read from memory for Tx channel 1.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_DSCR_ERR_CH1_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when detecting inlink descriptor error, including owner error, the second and third word error of inlink descriptor for Rx channel 1.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_DSCR_ERR_CH1_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when detecting outlink descriptor error, including owner error, the second and third word error of outlink descriptor for Tx channel 1.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_DSCR_EMPTY_CH1_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when Rx buffer pointed by inlink is full and receiving data is not completed, but there is no more inlink for Rx channel 1.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_TOTAL_EOF_CH1_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when data corresponding a outlink (includes one link descriptor or few link descriptors) is transmitted out for Tx channel 1.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFIFO_OVF_CH1_INT_RAW": {
    +                    "description": "This raw interrupt bit turns to high level when level 1 fifo of Rx channel 1 is overflow.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFIFO_UDF_CH1_INT_RAW": {
    +                    "description": "This raw interrupt bit turns to high level when level 1 fifo of Rx channel 1 is underflow.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFIFO_OVF_CH1_INT_RAW": {
    +                    "description": "This raw interrupt bit turns to high level when level 1 fifo of Tx channel 1 is overflow.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFIFO_UDF_CH1_INT_RAW": {
    +                    "description": "This raw interrupt bit turns to high level when level 1 fifo of Tx channel 1 is underflow.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ST_CH1": {
    +              "description": "DMA_INT_ST_CH1_REG.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_DONE_CH1_INT_ST": {
    +                    "description": "The raw interrupt status bit for the IN_DONE_CH_INT interrupt.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_SUC_EOF_CH1_INT_ST": {
    +                    "description": "The raw interrupt status bit for the IN_SUC_EOF_CH_INT interrupt.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_ERR_EOF_CH1_INT_ST": {
    +                    "description": "The raw interrupt status bit for the IN_ERR_EOF_CH_INT interrupt.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_DONE_CH1_INT_ST": {
    +                    "description": "The raw interrupt status bit for the OUT_DONE_CH_INT interrupt.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_EOF_CH1_INT_ST": {
    +                    "description": "The raw interrupt status bit for the OUT_EOF_CH_INT interrupt.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_DSCR_ERR_CH1_INT_ST": {
    +                    "description": "The raw interrupt status bit for the IN_DSCR_ERR_CH_INT interrupt.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_DSCR_ERR_CH1_INT_ST": {
    +                    "description": "The raw interrupt status bit for the OUT_DSCR_ERR_CH_INT interrupt.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_DSCR_EMPTY_CH1_INT_ST": {
    +                    "description": "The raw interrupt status bit for the IN_DSCR_EMPTY_CH_INT interrupt.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_TOTAL_EOF_CH1_INT_ST": {
    +                    "description": "The raw interrupt status bit for the OUT_TOTAL_EOF_CH_INT interrupt.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFIFO_OVF_CH1_INT_ST": {
    +                    "description": "The raw interrupt status bit for the INFIFO_OVF_L1_CH_INT interrupt.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFIFO_UDF_CH1_INT_ST": {
    +                    "description": "The raw interrupt status bit for the INFIFO_UDF_L1_CH_INT interrupt.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFIFO_OVF_CH1_INT_ST": {
    +                    "description": "The raw interrupt status bit for the OUTFIFO_OVF_L1_CH_INT interrupt.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFIFO_UDF_CH1_INT_ST": {
    +                    "description": "The raw interrupt status bit for the OUTFIFO_UDF_L1_CH_INT interrupt.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ENA_CH1": {
    +              "description": "DMA_INT_ENA_CH1_REG.",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_DONE_CH1_INT_ENA": {
    +                    "description": "The interrupt enable bit for the IN_DONE_CH_INT interrupt.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "IN_SUC_EOF_CH1_INT_ENA": {
    +                    "description": "The interrupt enable bit for the IN_SUC_EOF_CH_INT interrupt.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IN_ERR_EOF_CH1_INT_ENA": {
    +                    "description": "The interrupt enable bit for the IN_ERR_EOF_CH_INT interrupt.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OUT_DONE_CH1_INT_ENA": {
    +                    "description": "The interrupt enable bit for the OUT_DONE_CH_INT interrupt.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OUT_EOF_CH1_INT_ENA": {
    +                    "description": "The interrupt enable bit for the OUT_EOF_CH_INT interrupt.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IN_DSCR_ERR_CH1_INT_ENA": {
    +                    "description": "The interrupt enable bit for the IN_DSCR_ERR_CH_INT interrupt.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "OUT_DSCR_ERR_CH1_INT_ENA": {
    +                    "description": "The interrupt enable bit for the OUT_DSCR_ERR_CH_INT interrupt.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "IN_DSCR_EMPTY_CH1_INT_ENA": {
    +                    "description": "The interrupt enable bit for the IN_DSCR_EMPTY_CH_INT interrupt.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OUT_TOTAL_EOF_CH1_INT_ENA": {
    +                    "description": "The interrupt enable bit for the OUT_TOTAL_EOF_CH_INT interrupt.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "INFIFO_OVF_CH1_INT_ENA": {
    +                    "description": "The interrupt enable bit for the INFIFO_OVF_L1_CH_INT interrupt.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "INFIFO_UDF_CH1_INT_ENA": {
    +                    "description": "The interrupt enable bit for the INFIFO_UDF_L1_CH_INT interrupt.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OUTFIFO_OVF_CH1_INT_ENA": {
    +                    "description": "The interrupt enable bit for the OUTFIFO_OVF_L1_CH_INT interrupt.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OUTFIFO_UDF_CH1_INT_ENA": {
    +                    "description": "The interrupt enable bit for the OUTFIFO_UDF_L1_CH_INT interrupt.",
    +                    "offset": 12,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INT_CLR_CH1": {
    +              "description": "DMA_INT_CLR_CH1_REG.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_DONE_CH1_INT_CLR": {
    +                    "description": "Set this bit to clear the IN_DONE_CH_INT interrupt.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "IN_SUC_EOF_CH1_INT_CLR": {
    +                    "description": "Set this bit to clear the IN_SUC_EOF_CH_INT interrupt.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "IN_ERR_EOF_CH1_INT_CLR": {
    +                    "description": "Set this bit to clear the IN_ERR_EOF_CH_INT interrupt.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OUT_DONE_CH1_INT_CLR": {
    +                    "description": "Set this bit to clear the OUT_DONE_CH_INT interrupt.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OUT_EOF_CH1_INT_CLR": {
    +                    "description": "Set this bit to clear the OUT_EOF_CH_INT interrupt.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "IN_DSCR_ERR_CH1_INT_CLR": {
    +                    "description": "Set this bit to clear the IN_DSCR_ERR_CH_INT interrupt.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OUT_DSCR_ERR_CH1_INT_CLR": {
    +                    "description": "Set this bit to clear the OUT_DSCR_ERR_CH_INT interrupt.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "IN_DSCR_EMPTY_CH1_INT_CLR": {
    +                    "description": "Set this bit to clear the IN_DSCR_EMPTY_CH_INT interrupt.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OUT_TOTAL_EOF_CH1_INT_CLR": {
    +                    "description": "Set this bit to clear the OUT_TOTAL_EOF_CH_INT interrupt.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "INFIFO_OVF_CH1_INT_CLR": {
    +                    "description": "Set this bit to clear the INFIFO_OVF_L1_CH_INT interrupt.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "INFIFO_UDF_CH1_INT_CLR": {
    +                    "description": "Set this bit to clear the INFIFO_UDF_L1_CH_INT interrupt.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OUTFIFO_OVF_CH1_INT_CLR": {
    +                    "description": "Set this bit to clear the OUTFIFO_OVF_L1_CH_INT interrupt.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OUTFIFO_UDF_CH1_INT_CLR": {
    +                    "description": "Set this bit to clear the OUTFIFO_UDF_L1_CH_INT interrupt.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_RAW_CH2": {
    +              "description": "DMA_INT_RAW_CH2_REG.",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_DONE_CH2_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 2.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_SUC_EOF_CH2_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 2. For UHCI0, the raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received and no data error is detected for Rx channel 2.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_ERR_EOF_CH2_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when data error is detected only in the case that the peripheral is UHCI0 for Rx channel 2. For other peripherals, this raw interrupt is reserved.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_DONE_CH2_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been transmitted to peripherals for Tx channel 2.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_EOF_CH2_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been read from memory for Tx channel 2.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_DSCR_ERR_CH2_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when detecting inlink descriptor error, including owner error, the second and third word error of inlink descriptor for Rx channel 2.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_DSCR_ERR_CH2_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when detecting outlink descriptor error, including owner error, the second and third word error of outlink descriptor for Tx channel 2.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_DSCR_EMPTY_CH2_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when Rx buffer pointed by inlink is full and receiving data is not completed, but there is no more inlink for Rx channel 2.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_TOTAL_EOF_CH2_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when data corresponding a outlink (includes one link descriptor or few link descriptors) is transmitted out for Tx channel 2.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFIFO_OVF_CH2_INT_RAW": {
    +                    "description": "This raw interrupt bit turns to high level when level 1 fifo of Rx channel 2 is overflow.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFIFO_UDF_CH2_INT_RAW": {
    +                    "description": "This raw interrupt bit turns to high level when level 1 fifo of Rx channel 2 is underflow.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFIFO_OVF_CH2_INT_RAW": {
    +                    "description": "This raw interrupt bit turns to high level when level 1 fifo of Tx channel 2 is overflow.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFIFO_UDF_CH2_INT_RAW": {
    +                    "description": "This raw interrupt bit turns to high level when level 1 fifo of Tx channel 2 is underflow.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ST_CH2": {
    +              "description": "DMA_INT_ST_CH2_REG.",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_DONE_CH2_INT_ST": {
    +                    "description": "The raw interrupt status bit for the IN_DONE_CH_INT interrupt.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_SUC_EOF_CH2_INT_ST": {
    +                    "description": "The raw interrupt status bit for the IN_SUC_EOF_CH_INT interrupt.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_ERR_EOF_CH2_INT_ST": {
    +                    "description": "The raw interrupt status bit for the IN_ERR_EOF_CH_INT interrupt.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_DONE_CH2_INT_ST": {
    +                    "description": "The raw interrupt status bit for the OUT_DONE_CH_INT interrupt.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_EOF_CH2_INT_ST": {
    +                    "description": "The raw interrupt status bit for the OUT_EOF_CH_INT interrupt.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_DSCR_ERR_CH2_INT_ST": {
    +                    "description": "The raw interrupt status bit for the IN_DSCR_ERR_CH_INT interrupt.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_DSCR_ERR_CH2_INT_ST": {
    +                    "description": "The raw interrupt status bit for the OUT_DSCR_ERR_CH_INT interrupt.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_DSCR_EMPTY_CH2_INT_ST": {
    +                    "description": "The raw interrupt status bit for the IN_DSCR_EMPTY_CH_INT interrupt.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_TOTAL_EOF_CH2_INT_ST": {
    +                    "description": "The raw interrupt status bit for the OUT_TOTAL_EOF_CH_INT interrupt.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFIFO_OVF_CH2_INT_ST": {
    +                    "description": "The raw interrupt status bit for the INFIFO_OVF_L1_CH_INT interrupt.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFIFO_UDF_CH2_INT_ST": {
    +                    "description": "The raw interrupt status bit for the INFIFO_UDF_L1_CH_INT interrupt.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFIFO_OVF_CH2_INT_ST": {
    +                    "description": "The raw interrupt status bit for the OUTFIFO_OVF_L1_CH_INT interrupt.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFIFO_UDF_CH2_INT_ST": {
    +                    "description": "The raw interrupt status bit for the OUTFIFO_UDF_L1_CH_INT interrupt.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ENA_CH2": {
    +              "description": "DMA_INT_ENA_CH2_REG.",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_DONE_CH2_INT_ENA": {
    +                    "description": "The interrupt enable bit for the IN_DONE_CH_INT interrupt.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "IN_SUC_EOF_CH2_INT_ENA": {
    +                    "description": "The interrupt enable bit for the IN_SUC_EOF_CH_INT interrupt.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "IN_ERR_EOF_CH2_INT_ENA": {
    +                    "description": "The interrupt enable bit for the IN_ERR_EOF_CH_INT interrupt.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OUT_DONE_CH2_INT_ENA": {
    +                    "description": "The interrupt enable bit for the OUT_DONE_CH_INT interrupt.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OUT_EOF_CH2_INT_ENA": {
    +                    "description": "The interrupt enable bit for the OUT_EOF_CH_INT interrupt.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "IN_DSCR_ERR_CH2_INT_ENA": {
    +                    "description": "The interrupt enable bit for the IN_DSCR_ERR_CH_INT interrupt.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "OUT_DSCR_ERR_CH2_INT_ENA": {
    +                    "description": "The interrupt enable bit for the OUT_DSCR_ERR_CH_INT interrupt.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "IN_DSCR_EMPTY_CH2_INT_ENA": {
    +                    "description": "The interrupt enable bit for the IN_DSCR_EMPTY_CH_INT interrupt.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "OUT_TOTAL_EOF_CH2_INT_ENA": {
    +                    "description": "The interrupt enable bit for the OUT_TOTAL_EOF_CH_INT interrupt.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "INFIFO_OVF_CH2_INT_ENA": {
    +                    "description": "The interrupt enable bit for the INFIFO_OVF_L1_CH_INT interrupt.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "INFIFO_UDF_CH2_INT_ENA": {
    +                    "description": "The interrupt enable bit for the INFIFO_UDF_L1_CH_INT interrupt.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OUTFIFO_OVF_CH2_INT_ENA": {
    +                    "description": "The interrupt enable bit for the OUTFIFO_OVF_L1_CH_INT interrupt.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OUTFIFO_UDF_CH2_INT_ENA": {
    +                    "description": "The interrupt enable bit for the OUTFIFO_UDF_L1_CH_INT interrupt.",
    +                    "offset": 12,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INT_CLR_CH2": {
    +              "description": "DMA_INT_CLR_CH2_REG.",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_DONE_CH2_INT_CLR": {
    +                    "description": "Set this bit to clear the IN_DONE_CH_INT interrupt.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "IN_SUC_EOF_CH2_INT_CLR": {
    +                    "description": "Set this bit to clear the IN_SUC_EOF_CH_INT interrupt.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "IN_ERR_EOF_CH2_INT_CLR": {
    +                    "description": "Set this bit to clear the IN_ERR_EOF_CH_INT interrupt.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OUT_DONE_CH2_INT_CLR": {
    +                    "description": "Set this bit to clear the OUT_DONE_CH_INT interrupt.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OUT_EOF_CH2_INT_CLR": {
    +                    "description": "Set this bit to clear the OUT_EOF_CH_INT interrupt.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "IN_DSCR_ERR_CH2_INT_CLR": {
    +                    "description": "Set this bit to clear the IN_DSCR_ERR_CH_INT interrupt.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OUT_DSCR_ERR_CH2_INT_CLR": {
    +                    "description": "Set this bit to clear the OUT_DSCR_ERR_CH_INT interrupt.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "IN_DSCR_EMPTY_CH2_INT_CLR": {
    +                    "description": "Set this bit to clear the IN_DSCR_EMPTY_CH_INT interrupt.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OUT_TOTAL_EOF_CH2_INT_CLR": {
    +                    "description": "Set this bit to clear the OUT_TOTAL_EOF_CH_INT interrupt.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "INFIFO_OVF_CH2_INT_CLR": {
    +                    "description": "Set this bit to clear the INFIFO_OVF_L1_CH_INT interrupt.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "INFIFO_UDF_CH2_INT_CLR": {
    +                    "description": "Set this bit to clear the INFIFO_UDF_L1_CH_INT interrupt.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OUTFIFO_OVF_CH2_INT_CLR": {
    +                    "description": "Set this bit to clear the OUTFIFO_OVF_L1_CH_INT interrupt.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OUTFIFO_UDF_CH2_INT_CLR": {
    +                    "description": "Set this bit to clear the OUTFIFO_UDF_L1_CH_INT interrupt.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "AHB_TEST": {
    +              "description": "DMA_AHB_TEST_REG.",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AHB_TESTMODE": {
    +                    "description": "reserved",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "AHB_TESTADDR": {
    +                    "description": "reserved",
    +                    "offset": 4,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "MISC_CONF": {
    +              "description": "DMA_MISC_CONF_REG.",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AHBM_RST_INTER": {
    +                    "description": "Set this bit, then clear this bit to reset the internal ahb FSM.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ARB_PRI_DIS": {
    +                    "description": "Set this bit to disable priority arbitration function.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CLK_EN": {
    +                    "description": "reg_clk_en",
    +                    "offset": 3,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DATE": {
    +              "description": "DMA_DATE_REG.",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 33587792,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATE": {
    +                    "description": "register version.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IN_CONF0_CH0": {
    +              "description": "DMA_IN_CONF0_CH0_REG.",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_RST_CH0": {
    +                    "description": "This bit is used to reset DMA channel 0 Rx FSM and Rx FIFO pointer.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "IN_LOOP_TEST_CH0": {
    +                    "description": "reserved",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "INDSCR_BURST_EN_CH0": {
    +                    "description": "Set this bit to 1 to enable INCR burst transfer for Rx channel 0 reading link descriptor when accessing internal SRAM.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IN_DATA_BURST_EN_CH0": {
    +                    "description": "Set this bit to 1 to enable INCR burst transfer for Rx channel 0 receiving data when accessing internal SRAM.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MEM_TRANS_EN_CH0": {
    +                    "description": "Set this bit 1 to enable automatic transmitting data from memory to memory via DMA.",
    +                    "offset": 4,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IN_CONF1_CH0": {
    +              "description": "DMA_IN_CONF1_CH0_REG.",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_CHECK_OWNER_CH0": {
    +                    "description": "Set this bit to enable checking the owner attribute of the link descriptor.",
    +                    "offset": 12,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INFIFO_STATUS_CH0": {
    +              "description": "DMA_INFIFO_STATUS_CH0_REG.",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 125829123,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INFIFO_FULL_CH0": {
    +                    "description": "L1 Rx FIFO full signal for Rx channel 0.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFIFO_EMPTY_CH0": {
    +                    "description": "L1 Rx FIFO empty signal for Rx channel 0.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFIFO_CNT_CH0": {
    +                    "description": "The register stores the byte number of the data in L1 Rx FIFO for Rx channel 0.",
    +                    "offset": 2,
    +                    "size": 6,
    +                    "access": "read-only"
    +                  },
    +                  "IN_REMAIN_UNDER_1B_CH0": {
    +                    "description": "reserved",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_REMAIN_UNDER_2B_CH0": {
    +                    "description": "reserved",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_REMAIN_UNDER_3B_CH0": {
    +                    "description": "reserved",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_REMAIN_UNDER_4B_CH0": {
    +                    "description": "reserved",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_BUF_HUNGRY_CH0": {
    +                    "description": "reserved",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_POP_CH0": {
    +              "description": "DMA_IN_POP_CH0_REG.",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 2048,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INFIFO_RDATA_CH0": {
    +                    "description": "This register stores the data popping from DMA FIFO.",
    +                    "offset": 0,
    +                    "size": 12,
    +                    "access": "read-only"
    +                  },
    +                  "INFIFO_POP_CH0": {
    +                    "description": "Set this bit to pop data from DMA FIFO.",
    +                    "offset": 12,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IN_LINK_CH0": {
    +              "description": "DMA_IN_LINK_CH0_REG.",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 17825792,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INLINK_ADDR_CH0": {
    +                    "description": "This register stores the 20 least significant bits of the first inlink descriptor's address.",
    +                    "offset": 0,
    +                    "size": 20
    +                  },
    +                  "INLINK_AUTO_RET_CH0": {
    +                    "description": "Set this bit to return to current inlink descriptor's address, when there are some errors in current receiving data.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "INLINK_STOP_CH0": {
    +                    "description": "Set this bit to stop dealing with the inlink descriptors.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "INLINK_START_CH0": {
    +                    "description": "Set this bit to start dealing with the inlink descriptors.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "INLINK_RESTART_CH0": {
    +                    "description": "Set this bit to mount a new inlink descriptor.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "INLINK_PARK_CH0": {
    +                    "description": "1: the inlink descriptor's FSM is in idle state.  0: the inlink descriptor's FSM is working.",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_STATE_CH0": {
    +              "description": "DMA_IN_STATE_CH0_REG.",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INLINK_DSCR_ADDR_CH0": {
    +                    "description": "This register stores the current inlink descriptor's address.",
    +                    "offset": 0,
    +                    "size": 18,
    +                    "access": "read-only"
    +                  },
    +                  "IN_DSCR_STATE_CH0": {
    +                    "description": "reserved",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "IN_STATE_CH0": {
    +                    "description": "reserved",
    +                    "offset": 20,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_SUC_EOF_DES_ADDR_CH0": {
    +              "description": "DMA_IN_SUC_EOF_DES_ADDR_CH0_REG.",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_SUC_EOF_DES_ADDR_CH0": {
    +                    "description": "This register stores the address of the inlink descriptor when the EOF bit in this descriptor is 1.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_ERR_EOF_DES_ADDR_CH0": {
    +              "description": "DMA_IN_ERR_EOF_DES_ADDR_CH0_REG.",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_ERR_EOF_DES_ADDR_CH0": {
    +                    "description": "This register stores the address of the inlink descriptor when there are some errors in current receiving data. Only used when peripheral is UHCI0.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_DSCR_CH0": {
    +              "description": "DMA_IN_DSCR_CH0_REG.",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INLINK_DSCR_CH0": {
    +                    "description": "The address of the current inlink descriptor x.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_DSCR_BF0_CH0": {
    +              "description": "DMA_IN_DSCR_BF0_CH0_REG.",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INLINK_DSCR_BF0_CH0": {
    +                    "description": "The address of the last inlink descriptor x-1.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_DSCR_BF1_CH0": {
    +              "description": "DMA_IN_DSCR_BF1_CH0_REG.",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INLINK_DSCR_BF1_CH0": {
    +                    "description": "The address of the second-to-last inlink descriptor x-2.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_PRI_CH0": {
    +              "description": "DMA_IN_PRI_CH0_REG.",
    +              "offset": 156,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_PRI_CH0": {
    +                    "description": "The priority of Rx channel 0. The larger of the value, the higher of the priority.",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "IN_PERI_SEL_CH0": {
    +              "description": "DMA_IN_PERI_SEL_CH0_REG.",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 63,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PERI_IN_SEL_CH0": {
    +                    "description": "This register is used to select peripheral for Rx channel 0. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_CONF0_CH0": {
    +              "description": "DMA_OUT_CONF0_CH0_REG.",
    +              "offset": 208,
    +              "size": 32,
    +              "reset_value": 8,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUT_RST_CH0": {
    +                    "description": "This bit is used to reset DMA channel 0 Tx FSM and Tx FIFO pointer.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "OUT_LOOP_TEST_CH0": {
    +                    "description": "reserved",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OUT_AUTO_WRBACK_CH0": {
    +                    "description": "Set this bit to enable automatic outlink-writeback when all the data in tx buffer has been transmitted.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OUT_EOF_MODE_CH0": {
    +                    "description": "EOF flag generation mode when transmitting data. 1: EOF flag for Tx channel 0 is generated when data need to transmit has been popped from FIFO in DMA",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OUTDSCR_BURST_EN_CH0": {
    +                    "description": "Set this bit to 1 to enable INCR burst transfer for Tx channel 0 reading link descriptor when accessing internal SRAM.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "OUT_DATA_BURST_EN_CH0": {
    +                    "description": "Set this bit to 1 to enable INCR burst transfer for Tx channel 0 transmitting data when accessing internal SRAM.",
    +                    "offset": 5,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_CONF1_CH0": {
    +              "description": "DMA_OUT_CONF1_CH0_REG.",
    +              "offset": 212,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUT_CHECK_OWNER_CH0": {
    +                    "description": "Set this bit to enable checking the owner attribute of the link descriptor.",
    +                    "offset": 12,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OUTFIFO_STATUS_CH0": {
    +              "description": "DMA_OUTFIFO_STATUS_CH0_REG.",
    +              "offset": 216,
    +              "size": 32,
    +              "reset_value": 125829122,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUTFIFO_FULL_CH0": {
    +                    "description": "L1 Tx FIFO full signal for Tx channel 0.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFIFO_EMPTY_CH0": {
    +                    "description": "L1 Tx FIFO empty signal for Tx channel 0.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFIFO_CNT_CH0": {
    +                    "description": "The register stores the byte number of the data in L1 Tx FIFO for Tx channel 0.",
    +                    "offset": 2,
    +                    "size": 6,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_REMAIN_UNDER_1B_CH0": {
    +                    "description": "reserved",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_REMAIN_UNDER_2B_CH0": {
    +                    "description": "reserved",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_REMAIN_UNDER_3B_CH0": {
    +                    "description": "reserved",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_REMAIN_UNDER_4B_CH0": {
    +                    "description": "reserved",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_PUSH_CH0": {
    +              "description": "DMA_OUT_PUSH_CH0_REG.",
    +              "offset": 220,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUTFIFO_WDATA_CH0": {
    +                    "description": "This register stores the data that need to be pushed into DMA FIFO.",
    +                    "offset": 0,
    +                    "size": 9
    +                  },
    +                  "OUTFIFO_PUSH_CH0": {
    +                    "description": "Set this bit to push data into DMA FIFO.",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_LINK_CH0": {
    +              "description": "DMA_OUT_LINK_CH0_REG.",
    +              "offset": 224,
    +              "size": 32,
    +              "reset_value": 8388608,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUTLINK_ADDR_CH0": {
    +                    "description": "This register stores the 20 least significant bits of the first outlink descriptor's address.",
    +                    "offset": 0,
    +                    "size": 20
    +                  },
    +                  "OUTLINK_STOP_CH0": {
    +                    "description": "Set this bit to stop dealing with the outlink descriptors.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "OUTLINK_START_CH0": {
    +                    "description": "Set this bit to start dealing with the outlink descriptors.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "OUTLINK_RESTART_CH0": {
    +                    "description": "Set this bit to restart a new outlink from the last address.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "OUTLINK_PARK_CH0": {
    +                    "description": "1: the outlink descriptor's FSM is in idle state.  0: the outlink descriptor's FSM is working.",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_STATE_CH0": {
    +              "description": "DMA_OUT_STATE_CH0_REG.",
    +              "offset": 228,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUTLINK_DSCR_ADDR_CH0": {
    +                    "description": "This register stores the current outlink descriptor's address.",
    +                    "offset": 0,
    +                    "size": 18,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_DSCR_STATE_CH0": {
    +                    "description": "reserved",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_STATE_CH0": {
    +                    "description": "reserved",
    +                    "offset": 20,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_EOF_DES_ADDR_CH0": {
    +              "description": "DMA_OUT_EOF_DES_ADDR_CH0_REG.",
    +              "offset": 232,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUT_EOF_DES_ADDR_CH0": {
    +                    "description": "This register stores the address of the outlink descriptor when the EOF bit in this descriptor is 1.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_EOF_BFR_DES_ADDR_CH0": {
    +              "description": "DMA_OUT_EOF_BFR_DES_ADDR_CH0_REG.",
    +              "offset": 236,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUT_EOF_BFR_DES_ADDR_CH0": {
    +                    "description": "This register stores the address of the outlink descriptor before the last outlink descriptor.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_DSCR_CH0": {
    +              "description": "DMA_OUT_DSCR_CH0_REG.",
    +              "offset": 240,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUTLINK_DSCR_CH0": {
    +                    "description": "The address of the current outlink descriptor y.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_DSCR_BF0_CH0": {
    +              "description": "DMA_OUT_DSCR_BF0_CH0_REG.",
    +              "offset": 244,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUTLINK_DSCR_BF0_CH0": {
    +                    "description": "The address of the last outlink descriptor y-1.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_DSCR_BF1_CH0": {
    +              "description": "DMA_OUT_DSCR_BF1_CH0_REG.",
    +              "offset": 248,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUTLINK_DSCR_BF1_CH0": {
    +                    "description": "The address of the second-to-last inlink descriptor x-2.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_PRI_CH0": {
    +              "description": "DMA_OUT_PRI_CH0_REG.",
    +              "offset": 252,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_PRI_CH0": {
    +                    "description": "The priority of Tx channel 0. The larger of the value, the higher of the priority.",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_PERI_SEL_CH0": {
    +              "description": "DMA_OUT_PERI_SEL_CH0_REG.",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 63,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PERI_OUT_SEL_CH0": {
    +                    "description": "This register is used to select peripheral for Tx channel 0. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "IN_CONF0_CH1": {
    +              "description": "DMA_IN_CONF0_CH1_REG.",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_RST_CH1": {
    +                    "description": "This bit is used to reset DMA channel 1 Rx FSM and Rx FIFO pointer.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "IN_LOOP_TEST_CH1": {
    +                    "description": "reserved",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "INDSCR_BURST_EN_CH1": {
    +                    "description": "Set this bit to 1 to enable INCR burst transfer for Rx channel 1 reading link descriptor when accessing internal SRAM.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IN_DATA_BURST_EN_CH1": {
    +                    "description": "Set this bit to 1 to enable INCR burst transfer for Rx channel 1 receiving data when accessing internal SRAM.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MEM_TRANS_EN_CH1": {
    +                    "description": "Set this bit 1 to enable automatic transmitting data from memory to memory via DMA.",
    +                    "offset": 4,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IN_CONF1_CH1": {
    +              "description": "DMA_IN_CONF1_CH1_REG.",
    +              "offset": 308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_CHECK_OWNER_CH1": {
    +                    "description": "Set this bit to enable checking the owner attribute of the link descriptor.",
    +                    "offset": 12,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INFIFO_STATUS_CH1": {
    +              "description": "DMA_INFIFO_STATUS_CH1_REG.",
    +              "offset": 312,
    +              "size": 32,
    +              "reset_value": 125829123,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INFIFO_FULL_CH1": {
    +                    "description": "L1 Rx FIFO full signal for Rx channel 1.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFIFO_EMPTY_CH1": {
    +                    "description": "L1 Rx FIFO empty signal for Rx channel 1.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFIFO_CNT_CH1": {
    +                    "description": "The register stores the byte number of the data in L1 Rx FIFO for Rx channel 1.",
    +                    "offset": 2,
    +                    "size": 6,
    +                    "access": "read-only"
    +                  },
    +                  "IN_REMAIN_UNDER_1B_CH1": {
    +                    "description": "reserved",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_REMAIN_UNDER_2B_CH1": {
    +                    "description": "reserved",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_REMAIN_UNDER_3B_CH1": {
    +                    "description": "reserved",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_REMAIN_UNDER_4B_CH1": {
    +                    "description": "reserved",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_BUF_HUNGRY_CH1": {
    +                    "description": "reserved",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_POP_CH1": {
    +              "description": "DMA_IN_POP_CH1_REG.",
    +              "offset": 316,
    +              "size": 32,
    +              "reset_value": 2048,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INFIFO_RDATA_CH1": {
    +                    "description": "This register stores the data popping from DMA FIFO.",
    +                    "offset": 0,
    +                    "size": 12,
    +                    "access": "read-only"
    +                  },
    +                  "INFIFO_POP_CH1": {
    +                    "description": "Set this bit to pop data from DMA FIFO.",
    +                    "offset": 12,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IN_LINK_CH1": {
    +              "description": "DMA_IN_LINK_CH1_REG.",
    +              "offset": 320,
    +              "size": 32,
    +              "reset_value": 17825792,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INLINK_ADDR_CH1": {
    +                    "description": "This register stores the 20 least significant bits of the first inlink descriptor's address.",
    +                    "offset": 0,
    +                    "size": 20
    +                  },
    +                  "INLINK_AUTO_RET_CH1": {
    +                    "description": "Set this bit to return to current inlink descriptor's address, when there are some errors in current receiving data.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "INLINK_STOP_CH1": {
    +                    "description": "Set this bit to stop dealing with the inlink descriptors.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "INLINK_START_CH1": {
    +                    "description": "Set this bit to start dealing with the inlink descriptors.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "INLINK_RESTART_CH1": {
    +                    "description": "Set this bit to mount a new inlink descriptor.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "INLINK_PARK_CH1": {
    +                    "description": "1: the inlink descriptor's FSM is in idle state.  0: the inlink descriptor's FSM is working.",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_STATE_CH1": {
    +              "description": "DMA_IN_STATE_CH1_REG.",
    +              "offset": 324,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INLINK_DSCR_ADDR_CH1": {
    +                    "description": "This register stores the current inlink descriptor's address.",
    +                    "offset": 0,
    +                    "size": 18,
    +                    "access": "read-only"
    +                  },
    +                  "IN_DSCR_STATE_CH1": {
    +                    "description": "reserved",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "IN_STATE_CH1": {
    +                    "description": "reserved",
    +                    "offset": 20,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_SUC_EOF_DES_ADDR_CH1": {
    +              "description": "DMA_IN_SUC_EOF_DES_ADDR_CH1_REG.",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_SUC_EOF_DES_ADDR_CH1": {
    +                    "description": "This register stores the address of the inlink descriptor when the EOF bit in this descriptor is 1.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_ERR_EOF_DES_ADDR_CH1": {
    +              "description": "DMA_IN_ERR_EOF_DES_ADDR_CH1_REG.",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_ERR_EOF_DES_ADDR_CH1": {
    +                    "description": "This register stores the address of the inlink descriptor when there are some errors in current receiving data. Only used when peripheral is UHCI0.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_DSCR_CH1": {
    +              "description": "DMA_IN_DSCR_CH1_REG.",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INLINK_DSCR_CH1": {
    +                    "description": "The address of the current inlink descriptor x.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_DSCR_BF0_CH1": {
    +              "description": "DMA_IN_DSCR_BF0_CH1_REG.",
    +              "offset": 340,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INLINK_DSCR_BF0_CH1": {
    +                    "description": "The address of the last inlink descriptor x-1.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_DSCR_BF1_CH1": {
    +              "description": "DMA_IN_DSCR_BF1_CH1_REG.",
    +              "offset": 344,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INLINK_DSCR_BF1_CH1": {
    +                    "description": "The address of the second-to-last inlink descriptor x-2.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_PRI_CH1": {
    +              "description": "DMA_IN_PRI_CH1_REG.",
    +              "offset": 348,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_PRI_CH1": {
    +                    "description": "The priority of Rx channel 1. The larger of the value, the higher of the priority.",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "IN_PERI_SEL_CH1": {
    +              "description": "DMA_IN_PERI_SEL_CH1_REG.",
    +              "offset": 352,
    +              "size": 32,
    +              "reset_value": 63,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PERI_IN_SEL_CH1": {
    +                    "description": "This register is used to select peripheral for Rx channel 1. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_CONF0_CH1": {
    +              "description": "DMA_OUT_CONF0_CH1_REG.",
    +              "offset": 400,
    +              "size": 32,
    +              "reset_value": 8,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUT_RST_CH1": {
    +                    "description": "This bit is used to reset DMA channel 1 Tx FSM and Tx FIFO pointer.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "OUT_LOOP_TEST_CH1": {
    +                    "description": "reserved",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OUT_AUTO_WRBACK_CH1": {
    +                    "description": "Set this bit to enable automatic outlink-writeback when all the data in tx buffer has been transmitted.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OUT_EOF_MODE_CH1": {
    +                    "description": "EOF flag generation mode when transmitting data. 1: EOF flag for Tx channel 1 is generated when data need to transmit has been popped from FIFO in DMA",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OUTDSCR_BURST_EN_CH1": {
    +                    "description": "Set this bit to 1 to enable INCR burst transfer for Tx channel 1 reading link descriptor when accessing internal SRAM.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "OUT_DATA_BURST_EN_CH1": {
    +                    "description": "Set this bit to 1 to enable INCR burst transfer for Tx channel 1 transmitting data when accessing internal SRAM.",
    +                    "offset": 5,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_CONF1_CH1": {
    +              "description": "DMA_OUT_CONF1_CH1_REG.",
    +              "offset": 404,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUT_CHECK_OWNER_CH1": {
    +                    "description": "Set this bit to enable checking the owner attribute of the link descriptor.",
    +                    "offset": 12,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OUTFIFO_STATUS_CH1": {
    +              "description": "DMA_OUTFIFO_STATUS_CH1_REG.",
    +              "offset": 408,
    +              "size": 32,
    +              "reset_value": 125829122,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUTFIFO_FULL_CH1": {
    +                    "description": "L1 Tx FIFO full signal for Tx channel 1.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFIFO_EMPTY_CH1": {
    +                    "description": "L1 Tx FIFO empty signal for Tx channel 1.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFIFO_CNT_CH1": {
    +                    "description": "The register stores the byte number of the data in L1 Tx FIFO for Tx channel 1.",
    +                    "offset": 2,
    +                    "size": 6,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_REMAIN_UNDER_1B_CH1": {
    +                    "description": "reserved",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_REMAIN_UNDER_2B_CH1": {
    +                    "description": "reserved",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_REMAIN_UNDER_3B_CH1": {
    +                    "description": "reserved",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_REMAIN_UNDER_4B_CH1": {
    +                    "description": "reserved",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_PUSH_CH1": {
    +              "description": "DMA_OUT_PUSH_CH1_REG.",
    +              "offset": 412,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUTFIFO_WDATA_CH1": {
    +                    "description": "This register stores the data that need to be pushed into DMA FIFO.",
    +                    "offset": 0,
    +                    "size": 9
    +                  },
    +                  "OUTFIFO_PUSH_CH1": {
    +                    "description": "Set this bit to push data into DMA FIFO.",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_LINK_CH1": {
    +              "description": "DMA_OUT_LINK_CH1_REG.",
    +              "offset": 416,
    +              "size": 32,
    +              "reset_value": 8388608,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUTLINK_ADDR_CH1": {
    +                    "description": "This register stores the 20 least significant bits of the first outlink descriptor's address.",
    +                    "offset": 0,
    +                    "size": 20
    +                  },
    +                  "OUTLINK_STOP_CH1": {
    +                    "description": "Set this bit to stop dealing with the outlink descriptors.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "OUTLINK_START_CH1": {
    +                    "description": "Set this bit to start dealing with the outlink descriptors.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "OUTLINK_RESTART_CH1": {
    +                    "description": "Set this bit to restart a new outlink from the last address.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "OUTLINK_PARK_CH1": {
    +                    "description": "1: the outlink descriptor's FSM is in idle state.  0: the outlink descriptor's FSM is working.",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_STATE_CH1": {
    +              "description": "DMA_OUT_STATE_CH1_REG.",
    +              "offset": 420,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUTLINK_DSCR_ADDR_CH1": {
    +                    "description": "This register stores the current outlink descriptor's address.",
    +                    "offset": 0,
    +                    "size": 18,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_DSCR_STATE_CH1": {
    +                    "description": "reserved",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_STATE_CH1": {
    +                    "description": "reserved",
    +                    "offset": 20,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_EOF_DES_ADDR_CH1": {
    +              "description": "DMA_OUT_EOF_DES_ADDR_CH1_REG.",
    +              "offset": 424,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUT_EOF_DES_ADDR_CH1": {
    +                    "description": "This register stores the address of the outlink descriptor when the EOF bit in this descriptor is 1.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_EOF_BFR_DES_ADDR_CH1": {
    +              "description": "DMA_OUT_EOF_BFR_DES_ADDR_CH1_REG.",
    +              "offset": 428,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUT_EOF_BFR_DES_ADDR_CH1": {
    +                    "description": "This register stores the address of the outlink descriptor before the last outlink descriptor.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_DSCR_CH1": {
    +              "description": "DMA_OUT_DSCR_CH1_REG.",
    +              "offset": 432,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUTLINK_DSCR_CH1": {
    +                    "description": "The address of the current outlink descriptor y.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_DSCR_BF0_CH1": {
    +              "description": "DMA_OUT_DSCR_BF0_CH1_REG.",
    +              "offset": 436,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUTLINK_DSCR_BF0_CH1": {
    +                    "description": "The address of the last outlink descriptor y-1.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_DSCR_BF1_CH1": {
    +              "description": "DMA_OUT_DSCR_BF1_CH1_REG.",
    +              "offset": 440,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUTLINK_DSCR_BF1_CH1": {
    +                    "description": "The address of the second-to-last inlink descriptor x-2.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_PRI_CH1": {
    +              "description": "DMA_OUT_PRI_CH1_REG.",
    +              "offset": 444,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_PRI_CH1": {
    +                    "description": "The priority of Tx channel 1. The larger of the value, the higher of the priority.",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_PERI_SEL_CH1": {
    +              "description": "DMA_OUT_PERI_SEL_CH1_REG.",
    +              "offset": 448,
    +              "size": 32,
    +              "reset_value": 63,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PERI_OUT_SEL_CH1": {
    +                    "description": "This register is used to select peripheral for Tx channel 1. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "IN_CONF0_CH2": {
    +              "description": "DMA_IN_CONF0_CH2_REG.",
    +              "offset": 496,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_RST_CH2": {
    +                    "description": "This bit is used to reset DMA channel 2 Rx FSM and Rx FIFO pointer.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "IN_LOOP_TEST_CH2": {
    +                    "description": "reserved",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "INDSCR_BURST_EN_CH2": {
    +                    "description": "Set this bit to 1 to enable INCR burst transfer for Rx channel 2 reading link descriptor when accessing internal SRAM.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IN_DATA_BURST_EN_CH2": {
    +                    "description": "Set this bit to 1 to enable INCR burst transfer for Rx channel 2 receiving data when accessing internal SRAM.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MEM_TRANS_EN_CH2": {
    +                    "description": "Set this bit 1 to enable automatic transmitting data from memory to memory via DMA.",
    +                    "offset": 4,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IN_CONF1_CH2": {
    +              "description": "DMA_IN_CONF1_CH2_REG.",
    +              "offset": 500,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_CHECK_OWNER_CH2": {
    +                    "description": "Set this bit to enable checking the owner attribute of the link descriptor.",
    +                    "offset": 12,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INFIFO_STATUS_CH2": {
    +              "description": "DMA_INFIFO_STATUS_CH2_REG.",
    +              "offset": 504,
    +              "size": 32,
    +              "reset_value": 125829123,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INFIFO_FULL_CH2": {
    +                    "description": "L1 Rx FIFO full signal for Rx channel 2.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFIFO_EMPTY_CH2": {
    +                    "description": "L1 Rx FIFO empty signal for Rx channel 2.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "INFIFO_CNT_CH2": {
    +                    "description": "The register stores the byte number of the data in L1 Rx FIFO for Rx channel 2.",
    +                    "offset": 2,
    +                    "size": 6,
    +                    "access": "read-only"
    +                  },
    +                  "IN_REMAIN_UNDER_1B_CH2": {
    +                    "description": "reserved",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_REMAIN_UNDER_2B_CH2": {
    +                    "description": "reserved",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_REMAIN_UNDER_3B_CH2": {
    +                    "description": "reserved",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_REMAIN_UNDER_4B_CH2": {
    +                    "description": "reserved",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_BUF_HUNGRY_CH2": {
    +                    "description": "reserved",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_POP_CH2": {
    +              "description": "DMA_IN_POP_CH2_REG.",
    +              "offset": 508,
    +              "size": 32,
    +              "reset_value": 2048,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INFIFO_RDATA_CH2": {
    +                    "description": "This register stores the data popping from DMA FIFO.",
    +                    "offset": 0,
    +                    "size": 12,
    +                    "access": "read-only"
    +                  },
    +                  "INFIFO_POP_CH2": {
    +                    "description": "Set this bit to pop data from DMA FIFO.",
    +                    "offset": 12,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IN_LINK_CH2": {
    +              "description": "DMA_IN_LINK_CH2_REG.",
    +              "offset": 512,
    +              "size": 32,
    +              "reset_value": 17825792,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INLINK_ADDR_CH2": {
    +                    "description": "This register stores the 20 least significant bits of the first inlink descriptor's address.",
    +                    "offset": 0,
    +                    "size": 20
    +                  },
    +                  "INLINK_AUTO_RET_CH2": {
    +                    "description": "Set this bit to return to current inlink descriptor's address, when there are some errors in current receiving data.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "INLINK_STOP_CH2": {
    +                    "description": "Set this bit to stop dealing with the inlink descriptors.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "INLINK_START_CH2": {
    +                    "description": "Set this bit to start dealing with the inlink descriptors.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "INLINK_RESTART_CH2": {
    +                    "description": "Set this bit to mount a new inlink descriptor.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "INLINK_PARK_CH2": {
    +                    "description": "1: the inlink descriptor's FSM is in idle state.  0: the inlink descriptor's FSM is working.",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_STATE_CH2": {
    +              "description": "DMA_IN_STATE_CH2_REG.",
    +              "offset": 516,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INLINK_DSCR_ADDR_CH2": {
    +                    "description": "This register stores the current inlink descriptor's address.",
    +                    "offset": 0,
    +                    "size": 18,
    +                    "access": "read-only"
    +                  },
    +                  "IN_DSCR_STATE_CH2": {
    +                    "description": "reserved",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "IN_STATE_CH2": {
    +                    "description": "reserved",
    +                    "offset": 20,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_SUC_EOF_DES_ADDR_CH2": {
    +              "description": "DMA_IN_SUC_EOF_DES_ADDR_CH2_REG.",
    +              "offset": 520,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_SUC_EOF_DES_ADDR_CH2": {
    +                    "description": "This register stores the address of the inlink descriptor when the EOF bit in this descriptor is 1.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_ERR_EOF_DES_ADDR_CH2": {
    +              "description": "DMA_IN_ERR_EOF_DES_ADDR_CH2_REG.",
    +              "offset": 524,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_ERR_EOF_DES_ADDR_CH2": {
    +                    "description": "This register stores the address of the inlink descriptor when there are some errors in current receiving data. Only used when peripheral is UHCI0.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_DSCR_CH2": {
    +              "description": "DMA_IN_DSCR_CH2_REG.",
    +              "offset": 528,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INLINK_DSCR_CH2": {
    +                    "description": "The address of the current inlink descriptor x.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_DSCR_BF0_CH2": {
    +              "description": "DMA_IN_DSCR_BF0_CH2_REG.",
    +              "offset": 532,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INLINK_DSCR_BF0_CH2": {
    +                    "description": "The address of the last inlink descriptor x-1.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_DSCR_BF1_CH2": {
    +              "description": "DMA_IN_DSCR_BF1_CH2_REG.",
    +              "offset": 536,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INLINK_DSCR_BF1_CH2": {
    +                    "description": "The address of the second-to-last inlink descriptor x-2.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_PRI_CH2": {
    +              "description": "DMA_IN_PRI_CH2_REG.",
    +              "offset": 540,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_PRI_CH2": {
    +                    "description": "The priority of Rx channel 2. The larger of the value, the higher of the priority.",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "IN_PERI_SEL_CH2": {
    +              "description": "DMA_IN_PERI_SEL_CH2_REG.",
    +              "offset": 544,
    +              "size": 32,
    +              "reset_value": 63,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PERI_IN_SEL_CH2": {
    +                    "description": "This register is used to select peripheral for Rx channel 2. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_CONF0_CH2": {
    +              "description": "DMA_OUT_CONF0_CH2_REG.",
    +              "offset": 592,
    +              "size": 32,
    +              "reset_value": 8,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUT_RST_CH2": {
    +                    "description": "This bit is used to reset DMA channel 2 Tx FSM and Tx FIFO pointer.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "OUT_LOOP_TEST_CH2": {
    +                    "description": "reserved",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "OUT_AUTO_WRBACK_CH2": {
    +                    "description": "Set this bit to enable automatic outlink-writeback when all the data in tx buffer has been transmitted.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OUT_EOF_MODE_CH2": {
    +                    "description": "EOF flag generation mode when transmitting data. 1: EOF flag for Tx channel 2 is generated when data need to transmit has been popped from FIFO in DMA",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "OUTDSCR_BURST_EN_CH2": {
    +                    "description": "Set this bit to 1 to enable INCR burst transfer for Tx channel 2 reading link descriptor when accessing internal SRAM.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "OUT_DATA_BURST_EN_CH2": {
    +                    "description": "Set this bit to 1 to enable INCR burst transfer for Tx channel 2 transmitting data when accessing internal SRAM.",
    +                    "offset": 5,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_CONF1_CH2": {
    +              "description": "DMA_OUT_CONF1_CH2_REG.",
    +              "offset": 596,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUT_CHECK_OWNER_CH2": {
    +                    "description": "Set this bit to enable checking the owner attribute of the link descriptor.",
    +                    "offset": 12,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OUTFIFO_STATUS_CH2": {
    +              "description": "DMA_OUTFIFO_STATUS_CH2_REG.",
    +              "offset": 600,
    +              "size": 32,
    +              "reset_value": 125829122,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUTFIFO_FULL_CH2": {
    +                    "description": "L1 Tx FIFO full signal for Tx channel 2.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFIFO_EMPTY_CH2": {
    +                    "description": "L1 Tx FIFO empty signal for Tx channel 2.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTFIFO_CNT_CH2": {
    +                    "description": "The register stores the byte number of the data in L1 Tx FIFO for Tx channel 2.",
    +                    "offset": 2,
    +                    "size": 6,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_REMAIN_UNDER_1B_CH2": {
    +                    "description": "reserved",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_REMAIN_UNDER_2B_CH2": {
    +                    "description": "reserved",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_REMAIN_UNDER_3B_CH2": {
    +                    "description": "reserved",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_REMAIN_UNDER_4B_CH2": {
    +                    "description": "reserved",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_PUSH_CH2": {
    +              "description": "DMA_OUT_PUSH_CH2_REG.",
    +              "offset": 604,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUTFIFO_WDATA_CH2": {
    +                    "description": "This register stores the data that need to be pushed into DMA FIFO.",
    +                    "offset": 0,
    +                    "size": 9
    +                  },
    +                  "OUTFIFO_PUSH_CH2": {
    +                    "description": "Set this bit to push data into DMA FIFO.",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_LINK_CH2": {
    +              "description": "DMA_OUT_LINK_CH2_REG.",
    +              "offset": 608,
    +              "size": 32,
    +              "reset_value": 8388608,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUTLINK_ADDR_CH2": {
    +                    "description": "This register stores the 20 least significant bits of the first outlink descriptor's address.",
    +                    "offset": 0,
    +                    "size": 20
    +                  },
    +                  "OUTLINK_STOP_CH2": {
    +                    "description": "Set this bit to stop dealing with the outlink descriptors.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "OUTLINK_START_CH2": {
    +                    "description": "Set this bit to start dealing with the outlink descriptors.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "OUTLINK_RESTART_CH2": {
    +                    "description": "Set this bit to restart a new outlink from the last address.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "OUTLINK_PARK_CH2": {
    +                    "description": "1: the outlink descriptor's FSM is in idle state.  0: the outlink descriptor's FSM is working.",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_STATE_CH2": {
    +              "description": "DMA_OUT_STATE_CH2_REG.",
    +              "offset": 612,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUTLINK_DSCR_ADDR_CH2": {
    +                    "description": "This register stores the current outlink descriptor's address.",
    +                    "offset": 0,
    +                    "size": 18,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_DSCR_STATE_CH2": {
    +                    "description": "reserved",
    +                    "offset": 18,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_STATE_CH2": {
    +                    "description": "reserved",
    +                    "offset": 20,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_EOF_DES_ADDR_CH2": {
    +              "description": "DMA_OUT_EOF_DES_ADDR_CH2_REG.",
    +              "offset": 616,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUT_EOF_DES_ADDR_CH2": {
    +                    "description": "This register stores the address of the outlink descriptor when the EOF bit in this descriptor is 1.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_EOF_BFR_DES_ADDR_CH2": {
    +              "description": "DMA_OUT_EOF_BFR_DES_ADDR_CH2_REG.",
    +              "offset": 620,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUT_EOF_BFR_DES_ADDR_CH2": {
    +                    "description": "This register stores the address of the outlink descriptor before the last outlink descriptor.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_DSCR_CH2": {
    +              "description": "DMA_OUT_DSCR_CH2_REG.",
    +              "offset": 624,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUTLINK_DSCR_CH2": {
    +                    "description": "The address of the current outlink descriptor y.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_DSCR_BF0_CH2": {
    +              "description": "DMA_OUT_DSCR_BF0_CH2_REG.",
    +              "offset": 628,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUTLINK_DSCR_BF0_CH2": {
    +                    "description": "The address of the last outlink descriptor y-1.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_DSCR_BF1_CH2": {
    +              "description": "DMA_OUT_DSCR_BF1_CH2_REG.",
    +              "offset": 632,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUTLINK_DSCR_BF1_CH2": {
    +                    "description": "The address of the second-to-last inlink descriptor x-2.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_PRI_CH2": {
    +              "description": "DMA_OUT_PRI_CH2_REG.",
    +              "offset": 636,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_PRI_CH2": {
    +                    "description": "The priority of Tx channel 2. The larger of the value, the higher of the priority.",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_PERI_SEL_CH2": {
    +              "description": "DMA_OUT_PERI_SEL_CH2_REG.",
    +              "offset": 640,
    +              "size": 32,
    +              "reset_value": 63,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PERI_OUT_SEL_CH2": {
    +                    "description": "This register is used to select peripheral for Tx channel 2. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "DS": {
    +        "description": "Digital Signature",
    +        "children": {
    +          "registers": {
    +            "Y_MEM": {
    +              "description": "memory that stores Y",
    +              "offset": 0,
    +              "size": 8,
    +              "count": 512,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "M_MEM": {
    +              "description": "memory that stores M",
    +              "offset": 512,
    +              "size": 8,
    +              "count": 512,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "RB_MEM": {
    +              "description": "memory that stores Rb",
    +              "offset": 1024,
    +              "size": 8,
    +              "count": 512,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "BOX_MEM": {
    +              "description": "memory that stores BOX",
    +              "offset": 1536,
    +              "size": 8,
    +              "count": 48,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "X_MEM": {
    +              "description": "memory that stores X",
    +              "offset": 2048,
    +              "size": 8,
    +              "count": 512,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "Z_MEM": {
    +              "description": "memory that stores Z",
    +              "offset": 2560,
    +              "size": 8,
    +              "count": 512,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "SET_START": {
    +              "description": "DS start control register",
    +              "offset": 3584,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SET_START": {
    +                    "description": "set this bit to start DS operation.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SET_CONTINUE": {
    +              "description": "DS continue control register",
    +              "offset": 3588,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SET_CONTINUE": {
    +                    "description": "set this bit to continue DS operation.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SET_FINISH": {
    +              "description": "DS finish control register",
    +              "offset": 3592,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SET_FINISH": {
    +                    "description": "Set this bit to finish DS process.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "QUERY_BUSY": {
    +              "description": "DS query busy register",
    +              "offset": 3596,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "QUERY_BUSY": {
    +                    "description": "digital signature state. 1'b0: idle, 1'b1: busy",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "QUERY_KEY_WRONG": {
    +              "description": "DS query key-wrong counter register",
    +              "offset": 3600,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "QUERY_KEY_WRONG": {
    +                    "description": "digital signature key wrong counter",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "QUERY_CHECK": {
    +              "description": "DS query check result register",
    +              "offset": 3604,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MD_ERROR": {
    +                    "description": "MD checkout result. 1'b0: MD check pass, 1'b1: MD check fail",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PADDING_BAD": {
    +                    "description": "padding checkout result. 1'b0: a good padding, 1'b1: a bad padding",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DATE": {
    +              "description": "DS version control register",
    +              "offset": 3616,
    +              "size": 32,
    +              "reset_value": 538969624,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATE": {
    +                    "description": "ds version information",
    +                    "offset": 0,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "EFUSE": {
    +        "description": "eFuse Controller",
    +        "children": {
    +          "registers": {
    +            "PGM_DATA0": {
    +              "description": "Register 0 that stores data to be programmed.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PGM_DATA_0": {
    +                    "description": "The content of the 0th 32-bit data to be programmed.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PGM_DATA1": {
    +              "description": "Register 1 that stores data to be programmed.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PGM_DATA_1": {
    +                    "description": "The content of the 1st 32-bit data to be programmed.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PGM_DATA2": {
    +              "description": "Register 2 that stores data to be programmed.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PGM_DATA_2": {
    +                    "description": "The content of the 2nd 32-bit data to be programmed.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PGM_DATA3": {
    +              "description": "Register 3 that stores data to be programmed.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PGM_DATA_3": {
    +                    "description": "The content of the 3rd 32-bit data to be programmed.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PGM_DATA4": {
    +              "description": "Register 4 that stores data to be programmed.",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PGM_DATA_4": {
    +                    "description": "The content of the 4th 32-bit data to be programmed.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PGM_DATA5": {
    +              "description": "Register 5 that stores data to be programmed.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PGM_DATA_5": {
    +                    "description": "The content of the 5th 32-bit data to be programmed.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PGM_DATA6": {
    +              "description": "Register 6 that stores data to be programmed.",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PGM_DATA_6": {
    +                    "description": "The content of the 6th 32-bit data to be programmed.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PGM_DATA7": {
    +              "description": "Register 7 that stores data to be programmed.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PGM_DATA_7": {
    +                    "description": "The content of the 7th 32-bit data to be programmed.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PGM_CHECK_VALUE0": {
    +              "description": "Register 0 that stores the RS code to be programmed.",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PGM_RS_DATA_0": {
    +                    "description": "The content of the 0th 32-bit RS code to be programmed.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PGM_CHECK_VALUE1": {
    +              "description": "Register 1 that stores the RS code to be programmed.",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PGM_RS_DATA_1": {
    +                    "description": "The content of the 1st 32-bit RS code to be programmed.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PGM_CHECK_VALUE2": {
    +              "description": "Register 2 that stores the RS code to be programmed.",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PGM_RS_DATA_2": {
    +                    "description": "The content of the 2nd 32-bit RS code to be programmed.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "RD_WR_DIS": {
    +              "description": "BLOCK0 data register 0.",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WR_DIS": {
    +                    "description": "Disable programming of individual eFuses.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_REPEAT_DATA0": {
    +              "description": "BLOCK0 data register 1.",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RD_DIS": {
    +                    "description": "Set this bit to disable reading from BlOCK4-10.",
    +                    "offset": 0,
    +                    "size": 7,
    +                    "access": "read-only"
    +                  },
    +                  "DIS_RTC_RAM_BOOT": {
    +                    "description": "Set this bit to disable boot from RTC RAM.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DIS_ICACHE": {
    +                    "description": "Set this bit to disable Icache.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DIS_USB_JTAG": {
    +                    "description": "Set this bit to disable function of usb switch to jtag in module of usb device.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DIS_DOWNLOAD_ICACHE": {
    +                    "description": "Set this bit to disable Icache in download mode (boot_mode[3:0] is 0, 1, 2, 3, 6, 7).",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DIS_USB_DEVICE": {
    +                    "description": "Set this bit to disable usb device.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DIS_FORCE_DOWNLOAD": {
    +                    "description": "Set this bit to disable the function that forces chip into download mode.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RPT4_RESERVED6": {
    +                    "description": "Reserved (used for four backups method).",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DIS_CAN": {
    +                    "description": "Set this bit to disable CAN function.",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "JTAG_SEL_ENABLE": {
    +                    "description": "Set this bit to enable selection between usb_to_jtag and pad_to_jtag through strapping gpio10 when both reg_dis_usb_jtag and reg_dis_pad_jtag are equal to 0.",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SOFT_DIS_JTAG": {
    +                    "description": "Set these bits to disable JTAG in the soft way (odd number 1 means disable ). JTAG can be enabled in HMAC module.",
    +                    "offset": 16,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "DIS_PAD_JTAG": {
    +                    "description": "Set this bit to disable JTAG in the hard way. JTAG is disabled permanently.",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DIS_DOWNLOAD_MANUAL_ENCRYPT": {
    +                    "description": "Set this bit to disable flash encryption when in download boot modes.",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "USB_DREFH": {
    +                    "description": "Controls single-end input threshold vrefh, 1.76 V to 2 V with step of 80 mV, stored in eFuse.",
    +                    "offset": 21,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "USB_DREFL": {
    +                    "description": "Controls single-end input threshold vrefl, 0.8 V to 1.04 V with step of 80 mV, stored in eFuse.",
    +                    "offset": 23,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "USB_EXCHG_PINS": {
    +                    "description": "Set this bit to exchange USB D+ and D- pins.",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "VDD_SPI_AS_GPIO": {
    +                    "description": "Set this bit to vdd spi pin function as gpio.",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BTLC_GPIO_ENABLE": {
    +                    "description": "Enable btlc gpio.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "POWERGLITCH_EN": {
    +                    "description": "Set this bit to enable power glitch function.",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "POWER_GLITCH_DSENSE": {
    +                    "description": "Sample delay configuration of power glitch.",
    +                    "offset": 30,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_REPEAT_DATA1": {
    +              "description": "BLOCK0 data register 2.",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RPT4_RESERVED2": {
    +                    "description": "Reserved (used for four backups method).",
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "read-only"
    +                  },
    +                  "WDT_DELAY_SEL": {
    +                    "description": "Selects RTC watchdog timeout threshold, in unit of slow clock cycle. 0: 40000. 1: 80000. 2: 160000. 3:320000.",
    +                    "offset": 16,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "SPI_BOOT_CRYPT_CNT": {
    +                    "description": "Set this bit to enable SPI boot encrypt/decrypt. Odd number of 1: enable. even number of 1: disable.",
    +                    "offset": 18,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "SECURE_BOOT_KEY_REVOKE0": {
    +                    "description": "Set this bit to enable revoking first secure boot key.",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SECURE_BOOT_KEY_REVOKE1": {
    +                    "description": "Set this bit to enable revoking second secure boot key.",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SECURE_BOOT_KEY_REVOKE2": {
    +                    "description": "Set this bit to enable revoking third secure boot key.",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "KEY_PURPOSE_0": {
    +                    "description": "Purpose of Key0.",
    +                    "offset": 24,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "KEY_PURPOSE_1": {
    +                    "description": "Purpose of Key1.",
    +                    "offset": 28,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_REPEAT_DATA2": {
    +              "description": "BLOCK0 data register 3.",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY_PURPOSE_2": {
    +                    "description": "Purpose of Key2.",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "KEY_PURPOSE_3": {
    +                    "description": "Purpose of Key3.",
    +                    "offset": 4,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "KEY_PURPOSE_4": {
    +                    "description": "Purpose of Key4.",
    +                    "offset": 8,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "KEY_PURPOSE_5": {
    +                    "description": "Purpose of Key5.",
    +                    "offset": 12,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "RPT4_RESERVED3": {
    +                    "description": "Reserved (used for four backups method).",
    +                    "offset": 16,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "SECURE_BOOT_EN": {
    +                    "description": "Set this bit to enable secure boot.",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SECURE_BOOT_AGGRESSIVE_REVOKE": {
    +                    "description": "Set this bit to enable revoking aggressive secure boot.",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RPT4_RESERVED0": {
    +                    "description": "Reserved (used for four backups method).",
    +                    "offset": 22,
    +                    "size": 6,
    +                    "access": "read-only"
    +                  },
    +                  "FLASH_TPUW": {
    +                    "description": "Configures flash waiting time after power-up, in unit of ms. If the value is less than 15, the waiting time is the configurable value; Otherwise, the waiting time is twice the configurable value.",
    +                    "offset": 28,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_REPEAT_DATA3": {
    +              "description": "BLOCK0 data register 4.",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DIS_DOWNLOAD_MODE": {
    +                    "description": "Set this bit to disable download mode (boot_mode[3:0] = 0, 1, 2, 3, 6, 7).",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DIS_LEGACY_SPI_BOOT": {
    +                    "description": "Set this bit to disable Legacy SPI boot mode (boot_mode[3:0] = 4).",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "UART_PRINT_CHANNEL": {
    +                    "description": "Selectes the default UART print channel. 0: UART0. 1: UART1.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FLASH_ECC_MODE": {
    +                    "description": "Set ECC mode in ROM, 0: ROM would Enable Flash ECC 16to18 byte mode. 1:ROM would use 16to17 byte mode.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DIS_USB_DOWNLOAD_MODE": {
    +                    "description": "Set this bit to disable UART download mode through USB.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ENABLE_SECURITY_DOWNLOAD": {
    +                    "description": "Set this bit to enable secure UART download mode.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "UART_PRINT_CONTROL": {
    +                    "description": "Set the default UARTboot message output mode. 00: Enabled. 01: Enabled when GPIO8 is low at reset. 10: Enabled when GPIO8 is high at reset. 11:disabled.",
    +                    "offset": 6,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "PIN_POWER_SELECTION": {
    +                    "description": "GPIO33-GPIO37 power supply selection in ROM code. 0: VDD3P3_CPU. 1: VDD_SPI.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FLASH_TYPE": {
    +                    "description": "Set the maximum lines of SPI flash. 0: four lines. 1: eight lines.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FLASH_PAGE_SIZE": {
    +                    "description": "Set Flash page size.",
    +                    "offset": 10,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "FLASH_ECC_EN": {
    +                    "description": "Set 1 to enable ECC for flash boot.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FORCE_SEND_RESUME": {
    +                    "description": "Set this bit to force ROM code to send a resume command during SPI boot.",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SECURE_VERSION": {
    +                    "description": "Secure version (used by ESP-IDF anti-rollback feature).",
    +                    "offset": 14,
    +                    "size": 16,
    +                    "access": "read-only"
    +                  },
    +                  "RPT4_RESERVED1": {
    +                    "description": "Reserved (used for four backups method).",
    +                    "offset": 30,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_REPEAT_DATA4": {
    +              "description": "BLOCK0 data register 5.",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RPT4_RESERVED4": {
    +                    "description": "Reserved (used for four backups method).",
    +                    "offset": 0,
    +                    "size": 24,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_MAC_SPI_SYS_0": {
    +              "description": "BLOCK1 data register 0.",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MAC_0": {
    +                    "description": "Stores the low 32 bits of MAC address.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_MAC_SPI_SYS_1": {
    +              "description": "BLOCK1 data register 1.",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MAC_1": {
    +                    "description": "Stores the high 16 bits of MAC address.",
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "read-only"
    +                  },
    +                  "SPI_PAD_CONF_0": {
    +                    "description": "Stores the zeroth part of SPI_PAD_CONF.",
    +                    "offset": 16,
    +                    "size": 16,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_MAC_SPI_SYS_2": {
    +              "description": "BLOCK1 data register 2.",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SPI_PAD_CONF_1": {
    +                    "description": "Stores the first part of SPI_PAD_CONF.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_MAC_SPI_SYS_3": {
    +              "description": "BLOCK1 data register 3.",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SPI_PAD_CONF_2": {
    +                    "description": "Stores the second part of SPI_PAD_CONF.",
    +                    "offset": 0,
    +                    "size": 18,
    +                    "access": "read-only"
    +                  },
    +                  "SYS_DATA_PART0_0": {
    +                    "description": "Stores the fist 14 bits of the zeroth part of system data.",
    +                    "offset": 18,
    +                    "size": 14,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_MAC_SPI_SYS_4": {
    +              "description": "BLOCK1 data register 4.",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SYS_DATA_PART0_1": {
    +                    "description": "Stores the fist 32 bits of the zeroth part of system data.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_MAC_SPI_SYS_5": {
    +              "description": "BLOCK1 data register 5.",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SYS_DATA_PART0_2": {
    +                    "description": "Stores the second 32 bits of the zeroth part of system data.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_SYS_PART1_DATA0": {
    +              "description": "Register 0 of BLOCK2 (system).",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SYS_DATA_PART1_0": {
    +                    "description": "Stores the zeroth 32 bits of the first part of system data.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_SYS_PART1_DATA1": {
    +              "description": "Register 1 of BLOCK2 (system).",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SYS_DATA_PART1_1": {
    +                    "description": "Stores the first 32 bits of the first part of system data.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_SYS_PART1_DATA2": {
    +              "description": "Register 2 of BLOCK2 (system).",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SYS_DATA_PART1_2": {
    +                    "description": "Stores the second 32 bits of the first part of system data.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_SYS_PART1_DATA3": {
    +              "description": "Register 3 of BLOCK2 (system).",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SYS_DATA_PART1_3": {
    +                    "description": "Stores the third 32 bits of the first part of system data.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_SYS_PART1_DATA4": {
    +              "description": "Register 4 of BLOCK2 (system).",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SYS_DATA_PART1_4": {
    +                    "description": "Stores the fourth 32 bits of the first part of system data.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_SYS_PART1_DATA5": {
    +              "description": "Register 5 of BLOCK2 (system).",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SYS_DATA_PART1_5": {
    +                    "description": "Stores the fifth 32 bits of the first part of system data.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_SYS_PART1_DATA6": {
    +              "description": "Register 6 of BLOCK2 (system).",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SYS_DATA_PART1_6": {
    +                    "description": "Stores the sixth 32 bits of the first part of system data.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_SYS_PART1_DATA7": {
    +              "description": "Register 7 of BLOCK2 (system).",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SYS_DATA_PART1_7": {
    +                    "description": "Stores the seventh 32 bits of the first part of system data.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_USR_DATA0": {
    +              "description": "Register 0 of BLOCK3 (user).",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "USR_DATA0": {
    +                    "description": "Stores the zeroth 32 bits of BLOCK3 (user).",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_USR_DATA1": {
    +              "description": "Register 1 of BLOCK3 (user).",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "USR_DATA1": {
    +                    "description": "Stores the first 32 bits of BLOCK3 (user).",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_USR_DATA2": {
    +              "description": "Register 2 of BLOCK3 (user).",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "USR_DATA2": {
    +                    "description": "Stores the second 32 bits of BLOCK3 (user).",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_USR_DATA3": {
    +              "description": "Register 3 of BLOCK3 (user).",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "USR_DATA3": {
    +                    "description": "Stores the third 32 bits of BLOCK3 (user).",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_USR_DATA4": {
    +              "description": "Register 4 of BLOCK3 (user).",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "USR_DATA4": {
    +                    "description": "Stores the fourth 32 bits of BLOCK3 (user).",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_USR_DATA5": {
    +              "description": "Register 5 of BLOCK3 (user).",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "USR_DATA5": {
    +                    "description": "Stores the fifth 32 bits of BLOCK3 (user).",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_USR_DATA6": {
    +              "description": "Register 6 of BLOCK3 (user).",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "USR_DATA6": {
    +                    "description": "Stores the sixth 32 bits of BLOCK3 (user).",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_USR_DATA7": {
    +              "description": "Register 7 of BLOCK3 (user).",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "USR_DATA7": {
    +                    "description": "Stores the seventh 32 bits of BLOCK3 (user).",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY0_DATA0": {
    +              "description": "Register 0 of BLOCK4 (KEY0).",
    +              "offset": 156,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY0_DATA0": {
    +                    "description": "Stores the zeroth 32 bits of KEY0.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY0_DATA1": {
    +              "description": "Register 1 of BLOCK4 (KEY0).",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY0_DATA1": {
    +                    "description": "Stores the first 32 bits of KEY0.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY0_DATA2": {
    +              "description": "Register 2 of BLOCK4 (KEY0).",
    +              "offset": 164,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY0_DATA2": {
    +                    "description": "Stores the second 32 bits of KEY0.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY0_DATA3": {
    +              "description": "Register 3 of BLOCK4 (KEY0).",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY0_DATA3": {
    +                    "description": "Stores the third 32 bits of KEY0.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY0_DATA4": {
    +              "description": "Register 4 of BLOCK4 (KEY0).",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY0_DATA4": {
    +                    "description": "Stores the fourth 32 bits of KEY0.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY0_DATA5": {
    +              "description": "Register 5 of BLOCK4 (KEY0).",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY0_DATA5": {
    +                    "description": "Stores the fifth 32 bits of KEY0.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY0_DATA6": {
    +              "description": "Register 6 of BLOCK4 (KEY0).",
    +              "offset": 180,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY0_DATA6": {
    +                    "description": "Stores the sixth 32 bits of KEY0.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY0_DATA7": {
    +              "description": "Register 7 of BLOCK4 (KEY0).",
    +              "offset": 184,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY0_DATA7": {
    +                    "description": "Stores the seventh 32 bits of KEY0.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY1_DATA0": {
    +              "description": "Register 0 of BLOCK5 (KEY1).",
    +              "offset": 188,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY1_DATA0": {
    +                    "description": "Stores the zeroth 32 bits of KEY1.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY1_DATA1": {
    +              "description": "Register 1 of BLOCK5 (KEY1).",
    +              "offset": 192,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY1_DATA1": {
    +                    "description": "Stores the first 32 bits of KEY1.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY1_DATA2": {
    +              "description": "Register 2 of BLOCK5 (KEY1).",
    +              "offset": 196,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY1_DATA2": {
    +                    "description": "Stores the second 32 bits of KEY1.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY1_DATA3": {
    +              "description": "Register 3 of BLOCK5 (KEY1).",
    +              "offset": 200,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY1_DATA3": {
    +                    "description": "Stores the third 32 bits of KEY1.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY1_DATA4": {
    +              "description": "Register 4 of BLOCK5 (KEY1).",
    +              "offset": 204,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY1_DATA4": {
    +                    "description": "Stores the fourth 32 bits of KEY1.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY1_DATA5": {
    +              "description": "Register 5 of BLOCK5 (KEY1).",
    +              "offset": 208,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY1_DATA5": {
    +                    "description": "Stores the fifth 32 bits of KEY1.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY1_DATA6": {
    +              "description": "Register 6 of BLOCK5 (KEY1).",
    +              "offset": 212,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY1_DATA6": {
    +                    "description": "Stores the sixth 32 bits of KEY1.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY1_DATA7": {
    +              "description": "Register 7 of BLOCK5 (KEY1).",
    +              "offset": 216,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY1_DATA7": {
    +                    "description": "Stores the seventh 32 bits of KEY1.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY2_DATA0": {
    +              "description": "Register 0 of BLOCK6 (KEY2).",
    +              "offset": 220,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY2_DATA0": {
    +                    "description": "Stores the zeroth 32 bits of KEY2.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY2_DATA1": {
    +              "description": "Register 1 of BLOCK6 (KEY2).",
    +              "offset": 224,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY2_DATA1": {
    +                    "description": "Stores the first 32 bits of KEY2.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY2_DATA2": {
    +              "description": "Register 2 of BLOCK6 (KEY2).",
    +              "offset": 228,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY2_DATA2": {
    +                    "description": "Stores the second 32 bits of KEY2.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY2_DATA3": {
    +              "description": "Register 3 of BLOCK6 (KEY2).",
    +              "offset": 232,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY2_DATA3": {
    +                    "description": "Stores the third 32 bits of KEY2.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY2_DATA4": {
    +              "description": "Register 4 of BLOCK6 (KEY2).",
    +              "offset": 236,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY2_DATA4": {
    +                    "description": "Stores the fourth 32 bits of KEY2.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY2_DATA5": {
    +              "description": "Register 5 of BLOCK6 (KEY2).",
    +              "offset": 240,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY2_DATA5": {
    +                    "description": "Stores the fifth 32 bits of KEY2.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY2_DATA6": {
    +              "description": "Register 6 of BLOCK6 (KEY2).",
    +              "offset": 244,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY2_DATA6": {
    +                    "description": "Stores the sixth 32 bits of KEY2.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY2_DATA7": {
    +              "description": "Register 7 of BLOCK6 (KEY2).",
    +              "offset": 248,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY2_DATA7": {
    +                    "description": "Stores the seventh 32 bits of KEY2.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY3_DATA0": {
    +              "description": "Register 0 of BLOCK7 (KEY3).",
    +              "offset": 252,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY3_DATA0": {
    +                    "description": "Stores the zeroth 32 bits of KEY3.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY3_DATA1": {
    +              "description": "Register 1 of BLOCK7 (KEY3).",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY3_DATA1": {
    +                    "description": "Stores the first 32 bits of KEY3.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY3_DATA2": {
    +              "description": "Register 2 of BLOCK7 (KEY3).",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY3_DATA2": {
    +                    "description": "Stores the second 32 bits of KEY3.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY3_DATA3": {
    +              "description": "Register 3 of BLOCK7 (KEY3).",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY3_DATA3": {
    +                    "description": "Stores the third 32 bits of KEY3.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY3_DATA4": {
    +              "description": "Register 4 of BLOCK7 (KEY3).",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY3_DATA4": {
    +                    "description": "Stores the fourth 32 bits of KEY3.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY3_DATA5": {
    +              "description": "Register 5 of BLOCK7 (KEY3).",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY3_DATA5": {
    +                    "description": "Stores the fifth 32 bits of KEY3.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY3_DATA6": {
    +              "description": "Register 6 of BLOCK7 (KEY3).",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY3_DATA6": {
    +                    "description": "Stores the sixth 32 bits of KEY3.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY3_DATA7": {
    +              "description": "Register 7 of BLOCK7 (KEY3).",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY3_DATA7": {
    +                    "description": "Stores the seventh 32 bits of KEY3.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY4_DATA0": {
    +              "description": "Register 0 of BLOCK8 (KEY4).",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY4_DATA0": {
    +                    "description": "Stores the zeroth 32 bits of KEY4.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY4_DATA1": {
    +              "description": "Register 1 of BLOCK8 (KEY4).",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY4_DATA1": {
    +                    "description": "Stores the first 32 bits of KEY4.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY4_DATA2": {
    +              "description": "Register 2 of BLOCK8 (KEY4).",
    +              "offset": 292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY4_DATA2": {
    +                    "description": "Stores the second 32 bits of KEY4.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY4_DATA3": {
    +              "description": "Register 3 of BLOCK8 (KEY4).",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY4_DATA3": {
    +                    "description": "Stores the third 32 bits of KEY4.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY4_DATA4": {
    +              "description": "Register 4 of BLOCK8 (KEY4).",
    +              "offset": 300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY4_DATA4": {
    +                    "description": "Stores the fourth 32 bits of KEY4.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY4_DATA5": {
    +              "description": "Register 5 of BLOCK8 (KEY4).",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY4_DATA5": {
    +                    "description": "Stores the fifth 32 bits of KEY4.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY4_DATA6": {
    +              "description": "Register 6 of BLOCK8 (KEY4).",
    +              "offset": 308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY4_DATA6": {
    +                    "description": "Stores the sixth 32 bits of KEY4.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY4_DATA7": {
    +              "description": "Register 7 of BLOCK8 (KEY4).",
    +              "offset": 312,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY4_DATA7": {
    +                    "description": "Stores the seventh 32 bits of KEY4.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY5_DATA0": {
    +              "description": "Register 0 of BLOCK9 (KEY5).",
    +              "offset": 316,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY5_DATA0": {
    +                    "description": "Stores the zeroth 32 bits of KEY5.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY5_DATA1": {
    +              "description": "Register 1 of BLOCK9 (KEY5).",
    +              "offset": 320,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY5_DATA1": {
    +                    "description": "Stores the first 32 bits of KEY5.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY5_DATA2": {
    +              "description": "Register 2 of BLOCK9 (KEY5).",
    +              "offset": 324,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY5_DATA2": {
    +                    "description": "Stores the second 32 bits of KEY5.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY5_DATA3": {
    +              "description": "Register 3 of BLOCK9 (KEY5).",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY5_DATA3": {
    +                    "description": "Stores the third 32 bits of KEY5.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY5_DATA4": {
    +              "description": "Register 4 of BLOCK9 (KEY5).",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY5_DATA4": {
    +                    "description": "Stores the fourth 32 bits of KEY5.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY5_DATA5": {
    +              "description": "Register 5 of BLOCK9 (KEY5).",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY5_DATA5": {
    +                    "description": "Stores the fifth 32 bits of KEY5.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY5_DATA6": {
    +              "description": "Register 6 of BLOCK9 (KEY5).",
    +              "offset": 340,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY5_DATA6": {
    +                    "description": "Stores the sixth 32 bits of KEY5.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_KEY5_DATA7": {
    +              "description": "Register 7 of BLOCK9 (KEY5).",
    +              "offset": 344,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY5_DATA7": {
    +                    "description": "Stores the seventh 32 bits of KEY5.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_SYS_PART2_DATA0": {
    +              "description": "Register 0 of BLOCK10 (system).",
    +              "offset": 348,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SYS_DATA_PART2_0": {
    +                    "description": "Stores the 0th 32 bits of the 2nd part of system data.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_SYS_PART2_DATA1": {
    +              "description": "Register 1 of BLOCK9 (KEY5).",
    +              "offset": 352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SYS_DATA_PART2_1": {
    +                    "description": "Stores the 1st 32 bits of the 2nd part of system data.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_SYS_PART2_DATA2": {
    +              "description": "Register 2 of BLOCK10 (system).",
    +              "offset": 356,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SYS_DATA_PART2_2": {
    +                    "description": "Stores the 2nd 32 bits of the 2nd part of system data.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_SYS_PART2_DATA3": {
    +              "description": "Register 3 of BLOCK10 (system).",
    +              "offset": 360,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SYS_DATA_PART2_3": {
    +                    "description": "Stores the 3rd 32 bits of the 2nd part of system data.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_SYS_PART2_DATA4": {
    +              "description": "Register 4 of BLOCK10 (system).",
    +              "offset": 364,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SYS_DATA_PART2_4": {
    +                    "description": "Stores the 4th 32 bits of the 2nd part of system data.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_SYS_PART2_DATA5": {
    +              "description": "Register 5 of BLOCK10 (system).",
    +              "offset": 368,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SYS_DATA_PART2_5": {
    +                    "description": "Stores the 5th 32 bits of the 2nd part of system data.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_SYS_PART2_DATA6": {
    +              "description": "Register 6 of BLOCK10 (system).",
    +              "offset": 372,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SYS_DATA_PART2_6": {
    +                    "description": "Stores the 6th 32 bits of the 2nd part of system data.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_SYS_PART2_DATA7": {
    +              "description": "Register 7 of BLOCK10 (system).",
    +              "offset": 376,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SYS_DATA_PART2_7": {
    +                    "description": "Stores the 7th 32 bits of the 2nd part of system data.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_REPEAT_ERR0": {
    +              "description": "Programming error record register 0 of BLOCK0.",
    +              "offset": 380,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RD_DIS_ERR": {
    +                    "description": "If any bit in RD_DIS is 1, then it indicates a programming error.",
    +                    "offset": 0,
    +                    "size": 7,
    +                    "access": "read-only"
    +                  },
    +                  "DIS_RTC_RAM_BOOT_ERR": {
    +                    "description": "If DIS_RTC_RAM_BOOT is 1, then it indicates a programming error.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DIS_ICACHE_ERR": {
    +                    "description": "If DIS_ICACHE is 1, then it indicates a programming error.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DIS_USB_JTAG_ERR": {
    +                    "description": "If DIS_USB_JTAG is 1, then it indicates a programming error.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DIS_DOWNLOAD_ICACHE_ERR": {
    +                    "description": "If DIS_DOWNLOAD_ICACHE is 1, then it indicates a programming error.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DIS_USB_DEVICE_ERR": {
    +                    "description": "If DIS_USB_DEVICE is 1, then it indicates a programming error.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DIS_FORCE_DOWNLOAD_ERR": {
    +                    "description": "If DIS_FORCE_DOWNLOAD is 1, then it indicates a programming error.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RPT4_RESERVED6_ERR": {
    +                    "description": "Reserved.",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DIS_CAN_ERR": {
    +                    "description": "If DIS_CAN is 1, then it indicates a programming error.",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "JTAG_SEL_ENABLE_ERR": {
    +                    "description": "If JTAG_SEL_ENABLE is 1, then it indicates a programming error.",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SOFT_DIS_JTAG_ERR": {
    +                    "description": "If SOFT_DIS_JTAG is 1, then it indicates a programming error.",
    +                    "offset": 16,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "DIS_PAD_JTAG_ERR": {
    +                    "description": "If DIS_PAD_JTAG is 1, then it indicates a programming error.",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DIS_DOWNLOAD_MANUAL_ENCRYPT_ERR": {
    +                    "description": "If DIS_DOWNLOAD_MANUAL_ENCRYPT is 1, then it indicates a programming error.",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "USB_DREFH_ERR": {
    +                    "description": "If any bit in USB_DREFH is 1, then it indicates a programming error.",
    +                    "offset": 21,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "USB_DREFL_ERR": {
    +                    "description": "If any bit in USB_DREFL is 1, then it indicates a programming error.",
    +                    "offset": 23,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "USB_EXCHG_PINS_ERR": {
    +                    "description": "If USB_EXCHG_PINS is 1, then it indicates a programming error.",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "VDD_SPI_AS_GPIO_ERR": {
    +                    "description": "If VDD_SPI_AS_GPIO is 1, then it indicates a programming error.",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BTLC_GPIO_ENABLE_ERR": {
    +                    "description": "If any bit in BTLC_GPIO_ENABLE is 1, then it indicates a programming error.",
    +                    "offset": 27,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "POWERGLITCH_EN_ERR": {
    +                    "description": "If POWERGLITCH_EN is 1, then it indicates a programming error.",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "POWER_GLITCH_DSENSE_ERR": {
    +                    "description": "If any bit in POWER_GLITCH_DSENSE is 1, then it indicates a programming error.",
    +                    "offset": 30,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_REPEAT_ERR1": {
    +              "description": "Programming error record register 1 of BLOCK0.",
    +              "offset": 384,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RPT4_RESERVED2_ERR": {
    +                    "description": "Reserved.",
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "read-only"
    +                  },
    +                  "WDT_DELAY_SEL_ERR": {
    +                    "description": "If any bit in WDT_DELAY_SEL is 1, then it indicates a programming error.",
    +                    "offset": 16,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "SPI_BOOT_CRYPT_CNT_ERR": {
    +                    "description": "If any bit in SPI_BOOT_CRYPT_CNT is 1, then it indicates a programming error.",
    +                    "offset": 18,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "SECURE_BOOT_KEY_REVOKE0_ERR": {
    +                    "description": "If SECURE_BOOT_KEY_REVOKE0 is 1, then it indicates a programming error.",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SECURE_BOOT_KEY_REVOKE1_ERR": {
    +                    "description": "If SECURE_BOOT_KEY_REVOKE1 is 1, then it indicates a programming error.",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SECURE_BOOT_KEY_REVOKE2_ERR": {
    +                    "description": "If SECURE_BOOT_KEY_REVOKE2 is 1, then it indicates a programming error.",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "KEY_PURPOSE_0_ERR": {
    +                    "description": "If any bit in KEY_PURPOSE_0 is 1, then it indicates a programming error.",
    +                    "offset": 24,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "KEY_PURPOSE_1_ERR": {
    +                    "description": "If any bit in KEY_PURPOSE_1 is 1, then it indicates a programming error.",
    +                    "offset": 28,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_REPEAT_ERR2": {
    +              "description": "Programming error record register 2 of BLOCK0.",
    +              "offset": 388,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY_PURPOSE_2_ERR": {
    +                    "description": "If any bit in KEY_PURPOSE_2 is 1, then it indicates a programming error.",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "KEY_PURPOSE_3_ERR": {
    +                    "description": "If any bit in KEY_PURPOSE_3 is 1, then it indicates a programming error.",
    +                    "offset": 4,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "KEY_PURPOSE_4_ERR": {
    +                    "description": "If any bit in KEY_PURPOSE_4 is 1, then it indicates a programming error.",
    +                    "offset": 8,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "KEY_PURPOSE_5_ERR": {
    +                    "description": "If any bit in KEY_PURPOSE_5 is 1, then it indicates a programming error.",
    +                    "offset": 12,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "RPT4_RESERVED3_ERR": {
    +                    "description": "Reserved.",
    +                    "offset": 16,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "SECURE_BOOT_EN_ERR": {
    +                    "description": "If SECURE_BOOT_EN is 1, then it indicates a programming error.",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SECURE_BOOT_AGGRESSIVE_REVOKE_ERR": {
    +                    "description": "If SECURE_BOOT_AGGRESSIVE_REVOKE is 1, then it indicates a programming error.",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RPT4_RESERVED0_ERR": {
    +                    "description": "Reserved.",
    +                    "offset": 22,
    +                    "size": 6,
    +                    "access": "read-only"
    +                  },
    +                  "FLASH_TPUW_ERR": {
    +                    "description": "If any bit in FLASH_TPUM is 1, then it indicates a programming error.",
    +                    "offset": 28,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_REPEAT_ERR3": {
    +              "description": "Programming error record register 3 of BLOCK0.",
    +              "offset": 392,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DIS_DOWNLOAD_MODE_ERR": {
    +                    "description": "If DIS_DOWNLOAD_MODE is 1, then it indicates a programming error.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DIS_LEGACY_SPI_BOOT_ERR": {
    +                    "description": "If DIS_LEGACY_SPI_BOOT is 1, then it indicates a programming error.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "UART_PRINT_CHANNEL_ERR": {
    +                    "description": "If UART_PRINT_CHANNEL is 1, then it indicates a programming error.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FLASH_ECC_MODE_ERR": {
    +                    "description": "If FLASH_ECC_MODE is 1, then it indicates a programming error.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DIS_USB_DOWNLOAD_MODE_ERR": {
    +                    "description": "If DIS_USB_DOWNLOAD_MODE is 1, then it indicates a programming error.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ENABLE_SECURITY_DOWNLOAD_ERR": {
    +                    "description": "If ENABLE_SECURITY_DOWNLOAD is 1, then it indicates a programming error.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "UART_PRINT_CONTROL_ERR": {
    +                    "description": "If any bit in UART_PRINT_CONTROL is 1, then it indicates a programming error.",
    +                    "offset": 6,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "PIN_POWER_SELECTION_ERR": {
    +                    "description": "If PIN_POWER_SELECTION is 1, then it indicates a programming error.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FLASH_TYPE_ERR": {
    +                    "description": "If FLASH_TYPE is 1, then it indicates a programming error.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FLASH_PAGE_SIZE_ERR": {
    +                    "description": "If any bits in FLASH_PAGE_SIZE is 1, then it indicates a programming error.",
    +                    "offset": 10,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "FLASH_ECC_EN_ERR": {
    +                    "description": "If FLASH_ECC_EN_ERR is 1, then it indicates a programming error.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FORCE_SEND_RESUME_ERR": {
    +                    "description": "If FORCE_SEND_RESUME is 1, then it indicates a programming error.",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SECURE_VERSION_ERR": {
    +                    "description": "If any bit in SECURE_VERSION is 1, then it indicates a programming error.",
    +                    "offset": 14,
    +                    "size": 16,
    +                    "access": "read-only"
    +                  },
    +                  "RPT4_RESERVED1_ERR": {
    +                    "description": "Reserved.",
    +                    "offset": 30,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_REPEAT_ERR4": {
    +              "description": "Programming error record register 4 of BLOCK0.",
    +              "offset": 400,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RPT4_RESERVED4_ERR": {
    +                    "description": "Reserved.",
    +                    "offset": 0,
    +                    "size": 24,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_RS_ERR0": {
    +              "description": "Programming error record register 0 of BLOCK1-10.",
    +              "offset": 448,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MAC_SPI_8M_ERR_NUM": {
    +                    "description": "The value of this signal means the number of error bytes.",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "MAC_SPI_8M_FAIL": {
    +                    "description": "0: Means no failure and that the data of MAC_SPI_8M is reliable 1: Means that programming user data failed and the number of error bytes is over 6.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SYS_PART1_NUM": {
    +                    "description": "The value of this signal means the number of error bytes.",
    +                    "offset": 4,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "SYS_PART1_FAIL": {
    +                    "description": "0: Means no failure and that the data of system part1 is reliable 1: Means that programming user data failed and the number of error bytes is over 6.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "USR_DATA_ERR_NUM": {
    +                    "description": "The value of this signal means the number of error bytes.",
    +                    "offset": 8,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "USR_DATA_FAIL": {
    +                    "description": "0: Means no failure and that the user data is reliable 1: Means that programming user data failed and the number of error bytes is over 6.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "KEY0_ERR_NUM": {
    +                    "description": "The value of this signal means the number of error bytes.",
    +                    "offset": 12,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "KEY0_FAIL": {
    +                    "description": "0: Means no failure and that the data of key0 is reliable 1: Means that programming key0 failed and the number of error bytes is over 6.",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "KEY1_ERR_NUM": {
    +                    "description": "The value of this signal means the number of error bytes.",
    +                    "offset": 16,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "KEY1_FAIL": {
    +                    "description": "0: Means no failure and that the data of key1 is reliable 1: Means that programming key1 failed and the number of error bytes is over 6.",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "KEY2_ERR_NUM": {
    +                    "description": "The value of this signal means the number of error bytes.",
    +                    "offset": 20,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "KEY2_FAIL": {
    +                    "description": "0: Means no failure and that the data of key2 is reliable 1: Means that programming key2 failed and the number of error bytes is over 6.",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "KEY3_ERR_NUM": {
    +                    "description": "The value of this signal means the number of error bytes.",
    +                    "offset": 24,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "KEY3_FAIL": {
    +                    "description": "0: Means no failure and that the data of key3 is reliable 1: Means that programming key3 failed and the number of error bytes is over 6.",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "KEY4_ERR_NUM": {
    +                    "description": "The value of this signal means the number of error bytes.",
    +                    "offset": 28,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "KEY4_FAIL": {
    +                    "description": "0: Means no failure and that the data of key4 is reliable 1: Means that programming key4 failed and the number of error bytes is over 6.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RD_RS_ERR1": {
    +              "description": "Programming error record register 1 of BLOCK1-10.",
    +              "offset": 452,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY5_ERR_NUM": {
    +                    "description": "The value of this signal means the number of error bytes.",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "KEY5_FAIL": {
    +                    "description": "0: Means no failure and that the data of KEY5 is reliable 1: Means that programming user data failed and the number of error bytes is over 6.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SYS_PART2_ERR_NUM": {
    +                    "description": "The value of this signal means the number of error bytes.",
    +                    "offset": 4,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "SYS_PART2_FAIL": {
    +                    "description": "0: Means no failure and that the data of system part2 is reliable 1: Means that programming user data failed and the number of error bytes is over 6.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CLK": {
    +              "description": "eFuse clcok configuration register.",
    +              "offset": 456,
    +              "size": 32,
    +              "reset_value": 2,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EFUSE_MEM_FORCE_PD": {
    +                    "description": "Set this bit to force eFuse SRAM into power-saving mode.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MEM_CLK_FORCE_ON": {
    +                    "description": "Set this bit and force to activate clock signal of eFuse SRAM.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EFUSE_MEM_FORCE_PU": {
    +                    "description": "Set this bit to force eFuse SRAM into working mode.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "EN": {
    +                    "description": "Set this bit and force to enable clock signal of eFuse memory.",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CONF": {
    +              "description": "eFuse operation mode configuraiton register;",
    +              "offset": 460,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OP_CODE": {
    +                    "description": "0x5A5A: Operate programming command 0x5AA5: Operate read command.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "STATUS": {
    +              "description": "eFuse status register.",
    +              "offset": 464,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STATE": {
    +                    "description": "Indicates the state of the eFuse state machine.",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "OTP_LOAD_SW": {
    +                    "description": "The value of OTP_LOAD_SW.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OTP_VDDQ_C_SYNC2": {
    +                    "description": "The value of OTP_VDDQ_C_SYNC2.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OTP_STROBE_SW": {
    +                    "description": "The value of OTP_STROBE_SW.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OTP_CSB_SW": {
    +                    "description": "The value of OTP_CSB_SW.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OTP_PGENB_SW": {
    +                    "description": "The value of OTP_PGENB_SW.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OTP_VDDQ_IS_SW": {
    +                    "description": "The value of OTP_VDDQ_IS_SW.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "REPEAT_ERR_CNT": {
    +                    "description": "Indicates the number of error bits during programming BLOCK0.",
    +                    "offset": 10,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CMD": {
    +              "description": "eFuse command register.",
    +              "offset": 468,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READ_CMD": {
    +                    "description": "Set this bit to send read command.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PGM_CMD": {
    +                    "description": "Set this bit to send programming command.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "BLK_NUM": {
    +                    "description": "The serial number of the block to be programmed. Value 0-10 corresponds to block number 0-10, respectively.",
    +                    "offset": 2,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "INT_RAW": {
    +              "description": "eFuse raw interrupt register.",
    +              "offset": 472,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READ_DONE_INT_RAW": {
    +                    "description": "The raw bit signal for read_done interrupt.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PGM_DONE_INT_RAW": {
    +                    "description": "The raw bit signal for pgm_done interrupt.",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ST": {
    +              "description": "eFuse interrupt status register.",
    +              "offset": 476,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READ_DONE_INT_ST": {
    +                    "description": "The status signal for read_done interrupt.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PGM_DONE_INT_ST": {
    +                    "description": "The status signal for pgm_done interrupt.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ENA": {
    +              "description": "eFuse interrupt enable register.",
    +              "offset": 480,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READ_DONE_INT_ENA": {
    +                    "description": "The enable signal for read_done interrupt.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PGM_DONE_INT_ENA": {
    +                    "description": "The enable signal for pgm_done interrupt.",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INT_CLR": {
    +              "description": "eFuse interrupt clear register.",
    +              "offset": 484,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READ_DONE_INT_CLR": {
    +                    "description": "The clear signal for read_done interrupt.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "PGM_DONE_INT_CLR": {
    +                    "description": "The clear signal for pgm_done interrupt.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DAC_CONF": {
    +              "description": "Controls the eFuse programming voltage.",
    +              "offset": 488,
    +              "size": 32,
    +              "reset_value": 130588,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DAC_CLK_DIV": {
    +                    "description": "Controls the division factor of the rising clock of the programming voltage.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "DAC_CLK_PAD_SEL": {
    +                    "description": "Don't care.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DAC_NUM": {
    +                    "description": "Controls the rising period of the programming voltage.",
    +                    "offset": 9,
    +                    "size": 8
    +                  },
    +                  "OE_CLR": {
    +                    "description": "Reduces the power supply of the programming voltage.",
    +                    "offset": 17,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RD_TIM_CONF": {
    +              "description": "Configures read timing parameters.",
    +              "offset": 492,
    +              "size": 32,
    +              "reset_value": 301989888,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "READ_INIT_NUM": {
    +                    "description": "Configures the initial read time of eFuse.",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "WR_TIM_CONF1": {
    +              "description": "Configurarion register 1 of eFuse programming timing parameters.",
    +              "offset": 496,
    +              "size": 32,
    +              "reset_value": 2654208,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PWR_ON_NUM": {
    +                    "description": "Configures the power up time for VDDQ.",
    +                    "offset": 8,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "WR_TIM_CONF2": {
    +              "description": "Configurarion register 2 of eFuse programming timing parameters.",
    +              "offset": 500,
    +              "size": 32,
    +              "reset_value": 400,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PWR_OFF_NUM": {
    +                    "description": "Configures the power outage time for VDDQ.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "DATE": {
    +              "description": "eFuse version register.",
    +              "offset": 508,
    +              "size": 32,
    +              "reset_value": 33583616,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATE": {
    +                    "description": "Stores eFuse version.",
    +                    "offset": 0,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "EXTMEM": {
    +        "description": "External Memory",
    +        "children": {
    +          "registers": {
    +            "ICACHE_CTRL": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_ENABLE": {
    +                    "description": "The bit is used to activate the data cache. 0: disable, 1: enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ICACHE_CTRL1": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 3,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_SHUT_IBUS": {
    +                    "description": "The bit is used to disable core0 ibus, 0: enable, 1: disable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ICACHE_SHUT_DBUS": {
    +                    "description": "The bit is used to disable core1 ibus, 0: enable, 1: disable",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ICACHE_TAG_POWER_CTRL": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 5,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_TAG_MEM_FORCE_ON": {
    +                    "description": "The bit is used to close clock gating of  icache tag memory. 1: close gating, 0: open clock gating.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ICACHE_TAG_MEM_FORCE_PD": {
    +                    "description": "The bit is used to power  icache tag memory down, 0: follow rtc_lslp, 1: power down",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ICACHE_TAG_MEM_FORCE_PU": {
    +                    "description": "The bit is used to power  icache tag memory up, 0: follow rtc_lslp, 1: power up",
    +                    "offset": 2,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ICACHE_PRELOCK_CTRL": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_PRELOCK_SCT0_EN": {
    +                    "description": "The bit is used to enable the first section of prelock function.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ICACHE_PRELOCK_SCT1_EN": {
    +                    "description": "The bit is used to enable the second section of prelock function.",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ICACHE_PRELOCK_SCT0_ADDR": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_PRELOCK_SCT0_ADDR": {
    +                    "description": "The bits are used to configure the first start virtual address of data prelock, which is combined with ICACHE_PRELOCK_SCT0_SIZE_REG",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICACHE_PRELOCK_SCT1_ADDR": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_PRELOCK_SCT1_ADDR": {
    +                    "description": "The bits are used to configure the second start virtual address of data prelock, which is combined with ICACHE_PRELOCK_SCT1_SIZE_REG",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICACHE_PRELOCK_SCT_SIZE": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_PRELOCK_SCT1_SIZE": {
    +                    "description": "The bits are used to configure the second length of data locking, which is combined with ICACHE_PRELOCK_SCT1_ADDR_REG",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "ICACHE_PRELOCK_SCT0_SIZE": {
    +                    "description": "The bits are used to configure the first length of data locking, which is combined with ICACHE_PRELOCK_SCT0_ADDR_REG",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ICACHE_LOCK_CTRL": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 4,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_LOCK_ENA": {
    +                    "description": "The bit is used to enable lock operation. It will be cleared by hardware after lock operation done.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ICACHE_UNLOCK_ENA": {
    +                    "description": "The bit is used to enable unlock operation. It will be cleared by hardware after unlock operation done.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ICACHE_LOCK_DONE": {
    +                    "description": "The bit is used to indicate unlock/lock operation is finished.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "ICACHE_LOCK_ADDR": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_LOCK_ADDR": {
    +                    "description": "The bits are used to configure the start virtual address for lock operations. It should be combined with ICACHE_LOCK_SIZE_REG.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICACHE_LOCK_SIZE": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_LOCK_SIZE": {
    +                    "description": "The bits are used to configure the length for lock operations. The bits are the counts of cache block. It should be combined with ICACHE_LOCK_ADDR_REG.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ICACHE_SYNC_CTRL": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_INVALIDATE_ENA": {
    +                    "description": "The bit is used to enable invalidate operation. It will be cleared by hardware after invalidate operation done.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ICACHE_SYNC_DONE": {
    +                    "description": "The bit is used to indicate invalidate operation is finished.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "ICACHE_SYNC_ADDR": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_SYNC_ADDR": {
    +                    "description": "The bits are used to configure the start virtual address for clean operations. It should be combined with ICACHE_SYNC_SIZE_REG.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICACHE_SYNC_SIZE": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_SYNC_SIZE": {
    +                    "description": "The bits are used to configure the length for sync operations. The bits are the counts of cache block. It should be combined with ICACHE_SYNC_ADDR_REG.",
    +                    "offset": 0,
    +                    "size": 23
    +                  }
    +                }
    +              }
    +            },
    +            "ICACHE_PRELOAD_CTRL": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 2,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_PRELOAD_ENA": {
    +                    "description": "The bit is used to enable preload operation. It will be cleared by hardware after preload operation done.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ICACHE_PRELOAD_DONE": {
    +                    "description": "The bit is used to indicate preload operation is finished.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ICACHE_PRELOAD_ORDER": {
    +                    "description": "The bit is used to configure the direction of preload operation. 1: descending, 0: ascending.",
    +                    "offset": 2,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ICACHE_PRELOAD_ADDR": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_PRELOAD_ADDR": {
    +                    "description": "The bits are used to configure the start virtual address for preload operation. It should be combined with ICACHE_PRELOAD_SIZE_REG.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICACHE_PRELOAD_SIZE": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_PRELOAD_SIZE": {
    +                    "description": "The bits are used to configure the length for preload operation. The bits are the counts of cache block. It should be combined with ICACHE_PRELOAD_ADDR_REG..",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "ICACHE_AUTOLOAD_CTRL": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 8,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_AUTOLOAD_SCT0_ENA": {
    +                    "description": "The bits are used to enable the first section for autoload operation.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ICACHE_AUTOLOAD_SCT1_ENA": {
    +                    "description": "The bits are used to enable the second section for autoload operation.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ICACHE_AUTOLOAD_ENA": {
    +                    "description": "The bit is used to enable and disable autoload operation. It is combined with icache_autoload_done. 1: enable, 0: disable.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ICACHE_AUTOLOAD_DONE": {
    +                    "description": "The bit is used to indicate autoload operation is finished.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ICACHE_AUTOLOAD_ORDER": {
    +                    "description": "The bits are used to configure the direction of autoload. 1: descending, 0: ascending.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ICACHE_AUTOLOAD_RQST": {
    +                    "description": "The bits are used to configure trigger conditions for autoload. 0/3: cache miss, 1: cache hit, 2: both cache miss and hit.",
    +                    "offset": 5,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "ICACHE_AUTOLOAD_SCT0_ADDR": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_AUTOLOAD_SCT0_ADDR": {
    +                    "description": "The bits are used to configure the start virtual address of the first section for autoload operation. It should be combined with icache_autoload_sct0_ena.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICACHE_AUTOLOAD_SCT0_SIZE": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_AUTOLOAD_SCT0_SIZE": {
    +                    "description": "The bits are used to configure the length of the first section for autoload operation. It should be combined with icache_autoload_sct0_ena.",
    +                    "offset": 0,
    +                    "size": 27
    +                  }
    +                }
    +              }
    +            },
    +            "ICACHE_AUTOLOAD_SCT1_ADDR": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_AUTOLOAD_SCT1_ADDR": {
    +                    "description": "The bits are used to configure the start virtual address of the second section for autoload operation. It should be combined with icache_autoload_sct1_ena.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ICACHE_AUTOLOAD_SCT1_SIZE": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_AUTOLOAD_SCT1_SIZE": {
    +                    "description": "The bits are used to configure the length of the second section for autoload operation. It should be combined with icache_autoload_sct1_ena.",
    +                    "offset": 0,
    +                    "size": 27
    +                  }
    +                }
    +              }
    +            },
    +            "IBUS_TO_FLASH_START_VADDR": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 1107296256,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IBUS_TO_FLASH_START_VADDR": {
    +                    "description": "The bits are used to configure the start virtual address of ibus to access flash. The register is used to give constraints to ibus access counter.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "IBUS_TO_FLASH_END_VADDR": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 1115684863,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IBUS_TO_FLASH_END_VADDR": {
    +                    "description": "The bits are used to configure the end virtual address of ibus to access flash. The register is used to give constraints to ibus access counter.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DBUS_TO_FLASH_START_VADDR": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 1006632960,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBUS_TO_FLASH_START_VADDR": {
    +                    "description": "The bits are used to configure the start virtual address of dbus to access flash. The register is used to give constraints to dbus access counter.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "DBUS_TO_FLASH_END_VADDR": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 1015021567,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBUS_TO_FLASH_END_VADDR": {
    +                    "description": "The bits are used to configure the end virtual address of dbus to access flash. The register is used to give constraints to dbus access counter.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CACHE_ACS_CNT_CLR": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IBUS_ACS_CNT_CLR": {
    +                    "description": "The bit is used to clear ibus counter.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "DBUS_ACS_CNT_CLR": {
    +                    "description": "The bit is used to clear dbus counter.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IBUS_ACS_MISS_CNT": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IBUS_ACS_MISS_CNT": {
    +                    "description": "The bits are used to count the number of the cache miss caused by ibus access flash.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IBUS_ACS_CNT": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IBUS_ACS_CNT": {
    +                    "description": "The bits are used to count the number of ibus access flash through icache.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DBUS_ACS_FLASH_MISS_CNT": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBUS_ACS_FLASH_MISS_CNT": {
    +                    "description": "The bits are used to count the number of the cache miss caused by dbus access flash.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DBUS_ACS_CNT": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBUS_ACS_CNT": {
    +                    "description": "The bits are used to count the number of dbus access flash through icache.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CACHE_ILG_INT_ENA": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_SYNC_OP_FAULT_INT_ENA": {
    +                    "description": "The bit is used to enable interrupt by sync configurations fault.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ICACHE_PRELOAD_OP_FAULT_INT_ENA": {
    +                    "description": "The bit is used to enable interrupt by preload configurations fault.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MMU_ENTRY_FAULT_INT_ENA": {
    +                    "description": "The bit is used to enable interrupt by mmu entry fault.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "IBUS_CNT_OVF_INT_ENA": {
    +                    "description": "The bit is used to enable interrupt by ibus counter overflow.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "DBUS_CNT_OVF_INT_ENA": {
    +                    "description": "The bit is used to enable interrupt by dbus counter overflow.",
    +                    "offset": 8,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CACHE_ILG_INT_CLR": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_SYNC_OP_FAULT_INT_CLR": {
    +                    "description": "The bit is used to clear interrupt by sync configurations fault.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "ICACHE_PRELOAD_OP_FAULT_INT_CLR": {
    +                    "description": "The bit is used to clear interrupt by preload configurations fault.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "MMU_ENTRY_FAULT_INT_CLR": {
    +                    "description": "The bit is used to clear interrupt by mmu entry fault.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "IBUS_CNT_OVF_INT_CLR": {
    +                    "description": "The bit is used to clear interrupt by ibus counter overflow.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "DBUS_CNT_OVF_INT_CLR": {
    +                    "description": "The bit is used to clear interrupt by dbus counter overflow.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CACHE_ILG_INT_ST": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_SYNC_OP_FAULT_ST": {
    +                    "description": "The bit is used to indicate interrupt by sync configurations fault.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ICACHE_PRELOAD_OP_FAULT_ST": {
    +                    "description": "The bit is used to indicate interrupt by preload configurations fault.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MMU_ENTRY_FAULT_ST": {
    +                    "description": "The bit is used to indicate interrupt by mmu entry fault.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IBUS_ACS_CNT_OVF_ST": {
    +                    "description": "The bit is used to indicate interrupt by ibus access flash/spiram counter overflow.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IBUS_ACS_MISS_CNT_OVF_ST": {
    +                    "description": "The bit is used to indicate interrupt by ibus access flash/spiram miss counter overflow.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DBUS_ACS_CNT_OVF_ST": {
    +                    "description": "The bit is used to indicate interrupt by dbus access flash/spiram counter overflow.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DBUS_ACS_FLASH_MISS_CNT_OVF_ST": {
    +                    "description": "The bit is used to indicate interrupt by dbus access flash miss counter overflow.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CORE0_ACS_CACHE_INT_ENA": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE0_IBUS_ACS_MSK_IC_INT_ENA": {
    +                    "description": "The bit is used to enable interrupt by cpu access icache while the corresponding ibus is disabled which include speculative access.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CORE0_IBUS_WR_IC_INT_ENA": {
    +                    "description": "The bit is used to enable interrupt by ibus trying to write icache",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CORE0_IBUS_REJECT_INT_ENA": {
    +                    "description": "The bit is used to enable interrupt by authentication fail.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CORE0_DBUS_ACS_MSK_IC_INT_ENA": {
    +                    "description": "The bit is used to enable interrupt by cpu access icache while the corresponding dbus is disabled which include speculative access.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CORE0_DBUS_REJECT_INT_ENA": {
    +                    "description": "The bit is used to enable interrupt by authentication fail.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CORE0_DBUS_WR_IC_INT_ENA": {
    +                    "description": "The bit is used to enable interrupt by dbus trying to write icache",
    +                    "offset": 5,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CORE0_ACS_CACHE_INT_CLR": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE0_IBUS_ACS_MSK_IC_INT_CLR": {
    +                    "description": "The bit is used to clear interrupt by cpu access icache while the corresponding ibus is disabled or icache is disabled which include speculative access.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CORE0_IBUS_WR_IC_INT_CLR": {
    +                    "description": "The bit is used to clear interrupt by ibus trying to write icache",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CORE0_IBUS_REJECT_INT_CLR": {
    +                    "description": "The bit is used to clear interrupt by authentication fail.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CORE0_DBUS_ACS_MSK_IC_INT_CLR": {
    +                    "description": "The bit is used to clear interrupt by cpu access icache while the corresponding dbus is disabled or icache is disabled which include speculative access.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CORE0_DBUS_REJECT_INT_CLR": {
    +                    "description": "The bit is used to clear interrupt by authentication fail.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CORE0_DBUS_WR_IC_INT_CLR": {
    +                    "description": "The bit is used to clear interrupt by dbus trying to write icache",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CORE0_ACS_CACHE_INT_ST": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE0_IBUS_ACS_MSK_ICACHE_ST": {
    +                    "description": "The bit is used to indicate interrupt by cpu access  icache while the core0_ibus is disabled or icache is disabled which include speculative access.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE0_IBUS_WR_ICACHE_ST": {
    +                    "description": "The bit is used to indicate interrupt by ibus trying to write icache",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE0_IBUS_REJECT_ST": {
    +                    "description": "The bit is used to indicate interrupt by authentication fail.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE0_DBUS_ACS_MSK_ICACHE_ST": {
    +                    "description": "The bit is used to indicate interrupt by cpu access icache while the core0_dbus is disabled or icache is disabled which include speculative access.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE0_DBUS_REJECT_ST": {
    +                    "description": "The bit is used to indicate interrupt by authentication fail.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE0_DBUS_WR_ICACHE_ST": {
    +                    "description": "The bit is used to indicate interrupt by dbus trying to write icache",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CORE0_DBUS_REJECT_ST": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE0_DBUS_ATTR": {
    +                    "description": "The bits are used to indicate the attribute of CPU access dbus when authentication fail. 0: invalidate, 1: execute-able, 2: read-able, 4: write-able.",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "CORE0_DBUS_WORLD": {
    +                    "description": "The bit is used to indicate the world of CPU access dbus when authentication fail. 0: WORLD0, 1: WORLD1",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CORE0_DBUS_REJECT_VADDR": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE0_DBUS_VADDR": {
    +                    "description": "The bits are used to indicate the virtual address of CPU access dbus when authentication fail.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CORE0_IBUS_REJECT_ST": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE0_IBUS_ATTR": {
    +                    "description": "The bits are used to indicate the attribute of CPU access ibus when authentication fail. 0: invalidate, 1: execute-able, 2: read-able",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "CORE0_IBUS_WORLD": {
    +                    "description": "The bit is used to indicate the world of CPU access ibus when authentication fail. 0: WORLD0, 1: WORLD1",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CORE0_IBUS_REJECT_VADDR": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 156,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE0_IBUS_VADDR": {
    +                    "description": "The bits are used to indicate the virtual address of CPU access  ibus when authentication fail.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CACHE_MMU_FAULT_CONTENT": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CACHE_MMU_FAULT_CONTENT": {
    +                    "description": "The bits are used to indicate the content of mmu entry which cause mmu fault..",
    +                    "offset": 0,
    +                    "size": 10,
    +                    "access": "read-only"
    +                  },
    +                  "CACHE_MMU_FAULT_CODE": {
    +                    "description": "The right-most 3 bits are used to indicate the operations which cause mmu fault occurrence. 0: default, 1: cpu miss, 2: preload miss, 3: writeback, 4: cpu miss evict recovery address, 5: load miss evict recovery address, 6: external dma tx, 7: external dma rx. The most significant bit is used to indicate this operation occurs in which one icache.",
    +                    "offset": 10,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CACHE_MMU_FAULT_VADDR": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 164,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CACHE_MMU_FAULT_VADDR": {
    +                    "description": "The bits are used to indicate the virtual address which cause mmu fault..",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CACHE_WRAP_AROUND_CTRL": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CACHE_FLASH_WRAP_AROUND": {
    +                    "description": "The bit is used to enable wrap around mode when read data from flash.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CACHE_MMU_POWER_CTRL": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 5,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CACHE_MMU_MEM_FORCE_ON": {
    +                    "description": "The bit is used to enable clock gating to save power when access mmu memory, 0: enable, 1: disable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CACHE_MMU_MEM_FORCE_PD": {
    +                    "description": "The bit is used to power mmu memory down, 0: follow_rtc_lslp_pd, 1: power down",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CACHE_MMU_MEM_FORCE_PU": {
    +                    "description": "The bit is used to power mmu memory down, 0: follow_rtc_lslp_pd, 1: power up",
    +                    "offset": 2,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CACHE_STATE": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_STATE": {
    +                    "description": "The bit is used to indicate whether  icache main fsm is in idle state or not. 1: in idle state,  0: not in idle state",
    +                    "offset": 0,
    +                    "size": 12,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CACHE_ENCRYPT_DECRYPT_RECORD_DISABLE": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 180,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RECORD_DISABLE_DB_ENCRYPT": {
    +                    "description": "Reserved.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RECORD_DISABLE_G0CB_DECRYPT": {
    +                    "description": "Reserved.",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CACHE_ENCRYPT_DECRYPT_CLK_FORCE_ON": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 184,
    +              "size": 32,
    +              "reset_value": 7,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLK_FORCE_ON_MANUAL_CRYPT": {
    +                    "description": "The bit is used to close clock gating of manual crypt clock. 1: close gating, 0: open clock gating.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CLK_FORCE_ON_AUTO_CRYPT": {
    +                    "description": "The bit is used to close clock gating of automatic crypt clock. 1: close gating, 0: open clock gating.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CLK_FORCE_ON_CRYPT": {
    +                    "description": "The bit is used to close clock gating of external memory encrypt and decrypt clock. 1: close gating, 0: open clock gating.",
    +                    "offset": 2,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CACHE_PRELOAD_INT_CTRL": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 188,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_PRELOAD_INT_ST": {
    +                    "description": "The bit is used to indicate the interrupt by  icache pre-load done.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ICACHE_PRELOAD_INT_ENA": {
    +                    "description": "The bit is used to enable the interrupt by  icache pre-load done.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ICACHE_PRELOAD_INT_CLR": {
    +                    "description": "The bit is used to clear the interrupt by  icache pre-load done.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CACHE_SYNC_INT_CTRL": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 192,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_SYNC_INT_ST": {
    +                    "description": "The bit is used to indicate the interrupt by  icache sync done.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ICACHE_SYNC_INT_ENA": {
    +                    "description": "The bit is used to enable the interrupt by  icache sync done.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ICACHE_SYNC_INT_CLR": {
    +                    "description": "The bit is used to clear the interrupt by  icache sync done.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CACHE_MMU_OWNER": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 196,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CACHE_MMU_OWNER": {
    +                    "description": "The bits are used to specify the owner of MMU.bit0/bit2: ibus, bit1/bit3: dbus",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CACHE_CONF_MISC": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 200,
    +              "size": 32,
    +              "reset_value": 7,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CACHE_IGNORE_PRELOAD_MMU_ENTRY_FAULT": {
    +                    "description": "The bit is used to disable checking mmu entry fault by preload operation.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CACHE_IGNORE_SYNC_MMU_ENTRY_FAULT": {
    +                    "description": "The bit is used to disable checking mmu entry fault by sync operation.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CACHE_TRACE_ENA": {
    +                    "description": "The bit is used to enable cache trace function.",
    +                    "offset": 2,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ICACHE_FREEZE": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 204,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENA": {
    +                    "description": "The bit is used to enable icache freeze mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MODE": {
    +                    "description": "The bit is used to configure freeze mode, 0:  assert busy if CPU miss 1: assert hit if CPU miss",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DONE": {
    +                    "description": "The bit is used to indicate icache freeze success",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "ICACHE_ATOMIC_OPERATE_ENA": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 208,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_ATOMIC_OPERATE_ENA": {
    +                    "description": "The bit is used to activate icache atomic operation protection. In this case, sync/lock operation can not interrupt miss-work. This feature does not work during invalidateAll operation.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CACHE_REQUEST": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 212,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BYPASS": {
    +                    "description": "The bit is used to disable request recording which could cause performance issue",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IBUS_PMS_TBL_LOCK": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 216,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IBUS_PMS_LOCK": {
    +                    "description": "The bit is used to configure the ibus permission control section boundary0",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "IBUS_PMS_TBL_BOUNDARY0": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 220,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IBUS_PMS_BOUNDARY0": {
    +                    "description": "The bit is used to configure the ibus permission control section boundary0",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "IBUS_PMS_TBL_BOUNDARY1": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 224,
    +              "size": 32,
    +              "reset_value": 2048,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IBUS_PMS_BOUNDARY1": {
    +                    "description": "The bit is used to configure the ibus permission control section boundary1",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "IBUS_PMS_TBL_BOUNDARY2": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 228,
    +              "size": 32,
    +              "reset_value": 2048,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IBUS_PMS_BOUNDARY2": {
    +                    "description": "The bit is used to configure the ibus permission control section boundary2",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "IBUS_PMS_TBL_ATTR": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 232,
    +              "size": 32,
    +              "reset_value": 255,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IBUS_PMS_SCT1_ATTR": {
    +                    "description": "The bit is used to configure attribute of the ibus permission control section1, bit0: fetch in world0, bit1: load in world0, bit2: fetch in world1, bit3: load in world1",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "IBUS_PMS_SCT2_ATTR": {
    +                    "description": "The bit is used to configure attribute of the ibus permission control section2, bit0: fetch in world0, bit1: load in world0, bit2: fetch in world1, bit3: load in world1",
    +                    "offset": 4,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "DBUS_PMS_TBL_LOCK": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 236,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBUS_PMS_LOCK": {
    +                    "description": "The bit is used to configure the ibus permission control section boundary0",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DBUS_PMS_TBL_BOUNDARY0": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 240,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBUS_PMS_BOUNDARY0": {
    +                    "description": "The bit is used to configure the dbus permission control section boundary0",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DBUS_PMS_TBL_BOUNDARY1": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 244,
    +              "size": 32,
    +              "reset_value": 2048,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBUS_PMS_BOUNDARY1": {
    +                    "description": "The bit is used to configure the dbus permission control section boundary1",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DBUS_PMS_TBL_BOUNDARY2": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 248,
    +              "size": 32,
    +              "reset_value": 2048,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBUS_PMS_BOUNDARY2": {
    +                    "description": "The bit is used to configure the dbus permission control section boundary2",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "DBUS_PMS_TBL_ATTR": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 252,
    +              "size": 32,
    +              "reset_value": 15,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DBUS_PMS_SCT1_ATTR": {
    +                    "description": "The bit is used to configure attribute of the dbus permission control section1, bit0: load in world0, bit2: load in world1",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "DBUS_PMS_SCT2_ATTR": {
    +                    "description": "The bit is used to configure attribute of the dbus permission control section2, bit0: load in world0, bit2: load in world1",
    +                    "offset": 2,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLOCK_GATE": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLK_EN": {
    +                    "description": "clock gate enable.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "REG_DATE": {
    +              "description": "This description will be updated in the near future.",
    +              "offset": 1020,
    +              "size": 32,
    +              "reset_value": 33583456,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATE": {
    +                    "description": "version information",
    +                    "offset": 0,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "GPIO": {
    +        "description": "General Purpose Input/Output",
    +        "children": {
    +          "registers": {
    +            "BT_SELECT": {
    +              "description": "GPIO bit select register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BT_SEL": {
    +                    "description": "GPIO bit select register",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "OUT": {
    +              "description": "GPIO output register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA_ORIG": {
    +                    "description": "GPIO output register for GPIO0-25",
    +                    "offset": 0,
    +                    "size": 26
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_W1TS": {
    +              "description": "GPIO output set register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUT_W1TS": {
    +                    "description": "GPIO output set register for GPIO0-25",
    +                    "offset": 0,
    +                    "size": 26,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_W1TC": {
    +              "description": "GPIO output clear register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUT_W1TC": {
    +                    "description": "GPIO output clear register for GPIO0-25",
    +                    "offset": 0,
    +                    "size": 26,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SDIO_SELECT": {
    +              "description": "GPIO sdio select register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SDIO_SEL": {
    +                    "description": "GPIO sdio select register",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE": {
    +              "description": "GPIO output enable register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "GPIO output enable register for GPIO0-25",
    +                    "offset": 0,
    +                    "size": 26
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE_W1TS": {
    +              "description": "GPIO output enable set register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE_W1TS": {
    +                    "description": "GPIO output enable set register for GPIO0-25",
    +                    "offset": 0,
    +                    "size": 26,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "ENABLE_W1TC": {
    +              "description": "GPIO output enable clear register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE_W1TC": {
    +                    "description": "GPIO output enable clear register for GPIO0-25",
    +                    "offset": 0,
    +                    "size": 26,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "STRAP": {
    +              "description": "pad strapping register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STRAPPING": {
    +                    "description": "pad strapping register",
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN": {
    +              "description": "GPIO input register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA_NEXT": {
    +                    "description": "GPIO input register for GPIO0-25",
    +                    "offset": 0,
    +                    "size": 26,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "STATUS": {
    +              "description": "GPIO interrupt status register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INTERRUPT": {
    +                    "description": "GPIO interrupt status register for GPIO0-25",
    +                    "offset": 0,
    +                    "size": 26
    +                  }
    +                }
    +              }
    +            },
    +            "STATUS_W1TS": {
    +              "description": "GPIO interrupt status set register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STATUS_W1TS": {
    +                    "description": "GPIO interrupt status set register for GPIO0-25",
    +                    "offset": 0,
    +                    "size": 26,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "STATUS_W1TC": {
    +              "description": "GPIO interrupt status clear register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STATUS_W1TC": {
    +                    "description": "GPIO interrupt status clear register for GPIO0-25",
    +                    "offset": 0,
    +                    "size": 26,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PCPU_INT": {
    +              "description": "GPIO PRO_CPU interrupt status register",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PROCPU_INT": {
    +                    "description": "GPIO PRO_CPU interrupt status register for GPIO0-25",
    +                    "offset": 0,
    +                    "size": 26,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PCPU_NMI_INT": {
    +              "description": "GPIO PRO_CPU(not shielded) interrupt status register",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PROCPU_NMI_INT": {
    +                    "description": "GPIO PRO_CPU(not shielded) interrupt status register for GPIO0-25",
    +                    "offset": 0,
    +                    "size": 26,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CPUSDIO_INT": {
    +              "description": "GPIO CPUSDIO interrupt status register",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SDIO_INT": {
    +                    "description": "GPIO CPUSDIO interrupt status register for GPIO0-25",
    +                    "offset": 0,
    +                    "size": 26,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PIN": {
    +              "description": "GPIO pin configuration register",
    +              "offset": 116,
    +              "size": 32,
    +              "count": 26,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PIN_SYNC2_BYPASS": {
    +                    "description": "set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger at posedge.",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "PIN_PAD_DRIVER": {
    +                    "description": "set this bit to select pad driver. 1:open-drain. :normal.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PIN_SYNC1_BYPASS": {
    +                    "description": "set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger at posedge.",
    +                    "offset": 3,
    +                    "size": 2
    +                  },
    +                  "PIN_INT_TYPE": {
    +                    "description": "set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level. 5:valid at high level",
    +                    "offset": 7,
    +                    "size": 3
    +                  },
    +                  "PIN_WAKEUP_ENABLE": {
    +                    "description": "set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "PIN_CONFIG": {
    +                    "description": "reserved",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "PIN_INT_ENA": {
    +                    "description": "set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded) interrupt.",
    +                    "offset": 13,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "STATUS_NEXT": {
    +              "description": "GPIO interrupt source register",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STATUS_INTERRUPT_NEXT": {
    +                    "description": "GPIO interrupt source register for GPIO0-25",
    +                    "offset": 0,
    +                    "size": 26,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "FUNC_IN_SEL_CFG": {
    +              "description": "GPIO input function configuration register",
    +              "offset": 340,
    +              "size": 32,
    +              "count": 128,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_SEL": {
    +                    "description": "set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always high level. s=x3C: set this port always low level.",
    +                    "offset": 0,
    +                    "size": 5
    +                  },
    +                  "IN_INV_SEL": {
    +                    "description": "set this bit to invert input signal. 1:invert. :not invert.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "SEL": {
    +                    "description": "set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.",
    +                    "offset": 6,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FUNC_OUT_SEL_CFG": {
    +              "description": "GPIO output function select register",
    +              "offset": 1364,
    +              "size": 32,
    +              "count": 26,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUT_SEL": {
    +                    "description": "The value of the bits: <=s<=256. Set the value to select output signal. s=-255: output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals GPIO_OUT_REG[n].",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "INV_SEL": {
    +                    "description": "set this bit to invert output signal.1:invert.:not invert.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "OEN_SEL": {
    +                    "description": "set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output enable signal.:use peripheral output enable signal.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "OEN_INV_SEL": {
    +                    "description": "set this bit to invert output enable signal.1:invert.:not invert.",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLOCK_GATE": {
    +              "description": "GPIO clock gate register",
    +              "offset": 1580,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLK_EN": {
    +                    "description": "set this bit to enable GPIO clock gate",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "REG_DATE": {
    +              "description": "GPIO version register",
    +              "offset": 1788,
    +              "size": 32,
    +              "reset_value": 33579312,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REG_DATE": {
    +                    "description": "version register",
    +                    "offset": 0,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "GPIOSD": {
    +        "description": "Sigma-Delta Modulation",
    +        "children": {
    +          "registers": {
    +            "SIGMADELTA": {
    +              "description": "Duty Cycle Configure Register of SDM%s",
    +              "offset": 0,
    +              "size": 32,
    +              "count": 4,
    +              "reset_value": 65280,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SD0_IN": {
    +                    "description": "This field is used to configure the duty cycle of sigma delta modulation output.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "SD0_PRESCALE": {
    +                    "description": "This field is used to set a divider value to divide APB clock.",
    +                    "offset": 8,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SIGMADELTA_CG": {
    +              "description": "Clock Gating Configure Register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLK_EN": {
    +                    "description": "Clock enable bit of configuration registers for sigma delta modulation.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SIGMADELTA_MISC": {
    +              "description": "MISC Register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FUNCTION_CLK_EN": {
    +                    "description": "Clock enable bit of sigma delta modulation.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SPI_SWAP": {
    +                    "description": "Reserved.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SIGMADELTA_VERSION": {
    +              "description": "Version Control Register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 33579568,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "GPIO_SD_DATE": {
    +                    "description": "Version control register.",
    +                    "offset": 0,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "HMAC": {
    +        "description": "HMAC (Hash-based Message Authentication Code) Accelerator",
    +        "children": {
    +          "registers": {
    +            "SET_START": {
    +              "description": "Process control register 0.",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SET_START": {
    +                    "description": "Start hmac operation.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SET_PARA_PURPOSE": {
    +              "description": "Configure purpose.",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PURPOSE_SET": {
    +                    "description": "Set hmac parameter purpose.",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SET_PARA_KEY": {
    +              "description": "Configure key.",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "KEY_SET": {
    +                    "description": "Set hmac parameter key.",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SET_PARA_FINISH": {
    +              "description": "Finish initial configuration.",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SET_PARA_END": {
    +                    "description": "Finish hmac configuration.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SET_MESSAGE_ONE": {
    +              "description": "Process control register 1.",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SET_TEXT_ONE": {
    +                    "description": "Call SHA to calculate one message block.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SET_MESSAGE_ING": {
    +              "description": "Process control register 2.",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SET_TEXT_ING": {
    +                    "description": "Continue typical hmac.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SET_MESSAGE_END": {
    +              "description": "Process control register 3.",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SET_TEXT_END": {
    +                    "description": "Start hardware padding.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SET_RESULT_FINISH": {
    +              "description": "Process control register 4.",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SET_RESULT_END": {
    +                    "description": "After read result from upstream, then let hmac back to idle.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SET_INVALIDATE_JTAG": {
    +              "description": "Invalidate register 0.",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SET_INVALIDATE_JTAG": {
    +                    "description": "Clear result from hmac downstream JTAG.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SET_INVALIDATE_DS": {
    +              "description": "Invalidate register 1.",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SET_INVALIDATE_DS": {
    +                    "description": "Clear result from hmac downstream DS.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "QUERY_ERROR": {
    +              "description": "Error register.",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "QUREY_CHECK": {
    +                    "description": "Hmac configuration state. 0: key are agree with purpose. 1: error",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "QUERY_BUSY": {
    +              "description": "Busy register.",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUSY_STATE": {
    +                    "description": "Hmac state. 1'b0: idle. 1'b1: busy",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "WR_MESSAGE_MEM": {
    +              "description": "Message block memory.",
    +              "offset": 128,
    +              "size": 8,
    +              "count": 64,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "RD_RESULT_MEM": {
    +              "description": "Result from upstream.",
    +              "offset": 192,
    +              "size": 8,
    +              "count": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "SET_MESSAGE_PAD": {
    +              "description": "Process control register 5.",
    +              "offset": 240,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SET_TEXT_PAD": {
    +                    "description": "Start software padding.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "ONE_BLOCK": {
    +              "description": "Process control register 6.",
    +              "offset": 244,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SET_ONE_BLOCK": {
    +                    "description": "Don't have to do padding.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SOFT_JTAG_CTRL": {
    +              "description": "Jtag register 0.",
    +              "offset": 248,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SOFT_JTAG_CTRL": {
    +                    "description": "Turn on JTAG verification.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "WR_JTAG": {
    +              "description": "Jtag register 1.",
    +              "offset": 252,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WR_JTAG": {
    +                    "description": "32-bit of key to be compared.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "I2C0": {
    +        "description": "I2C (Inter-Integrated Circuit) Controller",
    +        "children": {
    +          "registers": {
    +            "SCL_LOW_PERIOD": {
    +              "description": "I2C_SCL_LOW_PERIOD_REG",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SCL_LOW_PERIOD": {
    +                    "description": "reg_scl_low_period",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "CTR": {
    +              "description": "I2C_CTR_REG",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 523,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SDA_FORCE_OUT": {
    +                    "description": "reg_sda_force_out",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SCL_FORCE_OUT": {
    +                    "description": "reg_scl_force_out",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SAMPLE_SCL_LEVEL": {
    +                    "description": "reg_sample_scl_level",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RX_FULL_ACK_LEVEL": {
    +                    "description": "reg_rx_full_ack_level",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MS_MODE": {
    +                    "description": "reg_ms_mode",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TRANS_START": {
    +                    "description": "reg_trans_start",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TX_LSB_FIRST": {
    +                    "description": "reg_tx_lsb_first",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RX_LSB_FIRST": {
    +                    "description": "reg_rx_lsb_first",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CLK_EN": {
    +                    "description": "reg_clk_en",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "ARBITRATION_EN": {
    +                    "description": "reg_arbitration_en",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FSM_RST": {
    +                    "description": "reg_fsm_rst",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CONF_UPGATE": {
    +                    "description": "reg_conf_upgate",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SLV_TX_AUTO_START_EN": {
    +                    "description": "reg_slv_tx_auto_start_en",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "ADDR_10BIT_RW_CHECK_EN": {
    +                    "description": "reg_addr_10bit_rw_check_en",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ADDR_BROADCASTING_EN": {
    +                    "description": "reg_addr_broadcasting_en",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SR": {
    +              "description": "I2C_SR_REG",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 49152,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESP_REC": {
    +                    "description": "reg_resp_rec",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SLAVE_RW": {
    +                    "description": "reg_slave_rw",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ARB_LOST": {
    +                    "description": "reg_arb_lost",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BUS_BUSY": {
    +                    "description": "reg_bus_busy",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SLAVE_ADDRESSED": {
    +                    "description": "reg_slave_addressed",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXFIFO_CNT": {
    +                    "description": "reg_rxfifo_cnt",
    +                    "offset": 8,
    +                    "size": 6,
    +                    "access": "read-only"
    +                  },
    +                  "STRETCH_CAUSE": {
    +                    "description": "reg_stretch_cause",
    +                    "offset": 14,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "TXFIFO_CNT": {
    +                    "description": "reg_txfifo_cnt",
    +                    "offset": 18,
    +                    "size": 6,
    +                    "access": "read-only"
    +                  },
    +                  "SCL_MAIN_STATE_LAST": {
    +                    "description": "reg_scl_main_state_last",
    +                    "offset": 24,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "SCL_STATE_LAST": {
    +                    "description": "reg_scl_state_last",
    +                    "offset": 28,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "TO": {
    +              "description": "I2C_TO_REG",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 16,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIME_OUT_VALUE": {
    +                    "description": "reg_time_out_value",
    +                    "offset": 0,
    +                    "size": 5
    +                  },
    +                  "TIME_OUT_EN": {
    +                    "description": "reg_time_out_en",
    +                    "offset": 5,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SLAVE_ADDR": {
    +              "description": "I2C_SLAVE_ADDR_REG",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SLAVE_ADDR": {
    +                    "description": "reg_slave_addr",
    +                    "offset": 0,
    +                    "size": 15
    +                  },
    +                  "ADDR_10BIT_EN": {
    +                    "description": "reg_addr_10bit_en",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FIFO_ST": {
    +              "description": "I2C_FIFO_ST_REG",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXFIFO_RADDR": {
    +                    "description": "reg_rxfifo_raddr",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "access": "read-only"
    +                  },
    +                  "RXFIFO_WADDR": {
    +                    "description": "reg_rxfifo_waddr",
    +                    "offset": 5,
    +                    "size": 5,
    +                    "access": "read-only"
    +                  },
    +                  "TXFIFO_RADDR": {
    +                    "description": "reg_txfifo_raddr",
    +                    "offset": 10,
    +                    "size": 5,
    +                    "access": "read-only"
    +                  },
    +                  "TXFIFO_WADDR": {
    +                    "description": "reg_txfifo_waddr",
    +                    "offset": 15,
    +                    "size": 5,
    +                    "access": "read-only"
    +                  },
    +                  "SLAVE_RW_POINT": {
    +                    "description": "reg_slave_rw_point",
    +                    "offset": 22,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "FIFO_CONF": {
    +              "description": "I2C_FIFO_CONF_REG",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 16523,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXFIFO_WM_THRHD": {
    +                    "description": "reg_rxfifo_wm_thrhd",
    +                    "offset": 0,
    +                    "size": 5
    +                  },
    +                  "TXFIFO_WM_THRHD": {
    +                    "description": "reg_txfifo_wm_thrhd",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "NONFIFO_EN": {
    +                    "description": "reg_nonfifo_en",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "FIFO_ADDR_CFG_EN": {
    +                    "description": "reg_fifo_addr_cfg_en",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "RX_FIFO_RST": {
    +                    "description": "reg_rx_fifo_rst",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TX_FIFO_RST": {
    +                    "description": "reg_tx_fifo_rst",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FIFO_PRT_EN": {
    +                    "description": "reg_fifo_prt_en",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DATA": {
    +              "description": "I2C_FIFO_DATA_REG",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FIFO_RDATA": {
    +                    "description": "reg_fifo_rdata",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "INT_RAW": {
    +              "description": "I2C_INT_RAW_REG",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 2,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXFIFO_WM_INT_RAW": {
    +                    "description": "reg_rxfifo_wm_int_raw",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXFIFO_WM_INT_RAW": {
    +                    "description": "reg_txfifo_wm_int_raw",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXFIFO_OVF_INT_RAW": {
    +                    "description": "reg_rxfifo_ovf_int_raw",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "END_DETECT_INT_RAW": {
    +                    "description": "reg_end_detect_int_raw",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BYTE_TRANS_DONE_INT_RAW": {
    +                    "description": "reg_byte_trans_done_int_raw",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ARBITRATION_LOST_INT_RAW": {
    +                    "description": "reg_arbitration_lost_int_raw",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MST_TXFIFO_UDF_INT_RAW": {
    +                    "description": "reg_mst_txfifo_udf_int_raw",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TRANS_COMPLETE_INT_RAW": {
    +                    "description": "reg_trans_complete_int_raw",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TIME_OUT_INT_RAW": {
    +                    "description": "reg_time_out_int_raw",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TRANS_START_INT_RAW": {
    +                    "description": "reg_trans_start_int_raw",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NACK_INT_RAW": {
    +                    "description": "reg_nack_int_raw",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXFIFO_OVF_INT_RAW": {
    +                    "description": "reg_txfifo_ovf_int_raw",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXFIFO_UDF_INT_RAW": {
    +                    "description": "reg_rxfifo_udf_int_raw",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SCL_ST_TO_INT_RAW": {
    +                    "description": "reg_scl_st_to_int_raw",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SCL_MAIN_ST_TO_INT_RAW": {
    +                    "description": "reg_scl_main_st_to_int_raw",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DET_START_INT_RAW": {
    +                    "description": "reg_det_start_int_raw",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SLAVE_STRETCH_INT_RAW": {
    +                    "description": "reg_slave_stretch_int_raw",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GENERAL_CALL_INT_RAW": {
    +                    "description": "reg_general_call_int_raw",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_CLR": {
    +              "description": "I2C_INT_CLR_REG",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXFIFO_WM_INT_CLR": {
    +                    "description": "reg_rxfifo_wm_int_clr",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TXFIFO_WM_INT_CLR": {
    +                    "description": "reg_txfifo_wm_int_clr",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RXFIFO_OVF_INT_CLR": {
    +                    "description": "reg_rxfifo_ovf_int_clr",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "END_DETECT_INT_CLR": {
    +                    "description": "reg_end_detect_int_clr",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "BYTE_TRANS_DONE_INT_CLR": {
    +                    "description": "reg_byte_trans_done_int_clr",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "ARBITRATION_LOST_INT_CLR": {
    +                    "description": "reg_arbitration_lost_int_clr",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "MST_TXFIFO_UDF_INT_CLR": {
    +                    "description": "reg_mst_txfifo_udf_int_clr",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TRANS_COMPLETE_INT_CLR": {
    +                    "description": "reg_trans_complete_int_clr",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TIME_OUT_INT_CLR": {
    +                    "description": "reg_time_out_int_clr",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TRANS_START_INT_CLR": {
    +                    "description": "reg_trans_start_int_clr",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "NACK_INT_CLR": {
    +                    "description": "reg_nack_int_clr",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TXFIFO_OVF_INT_CLR": {
    +                    "description": "reg_txfifo_ovf_int_clr",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RXFIFO_UDF_INT_CLR": {
    +                    "description": "reg_rxfifo_udf_int_clr",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SCL_ST_TO_INT_CLR": {
    +                    "description": "reg_scl_st_to_int_clr",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SCL_MAIN_ST_TO_INT_CLR": {
    +                    "description": "reg_scl_main_st_to_int_clr",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "DET_START_INT_CLR": {
    +                    "description": "reg_det_start_int_clr",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SLAVE_STRETCH_INT_CLR": {
    +                    "description": "reg_slave_stretch_int_clr",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "GENERAL_CALL_INT_CLR": {
    +                    "description": "reg_general_call_int_clr",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ENA": {
    +              "description": "I2C_INT_ENA_REG",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXFIFO_WM_INT_ENA": {
    +                    "description": "reg_rxfifo_wm_int_ena",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TXFIFO_WM_INT_ENA": {
    +                    "description": "reg_txfifo_wm_int_ena",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RXFIFO_OVF_INT_ENA": {
    +                    "description": "reg_rxfifo_ovf_int_ena",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "END_DETECT_INT_ENA": {
    +                    "description": "reg_end_detect_int_ena",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "BYTE_TRANS_DONE_INT_ENA": {
    +                    "description": "reg_byte_trans_done_int_ena",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "ARBITRATION_LOST_INT_ENA": {
    +                    "description": "reg_arbitration_lost_int_ena",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "MST_TXFIFO_UDF_INT_ENA": {
    +                    "description": "reg_mst_txfifo_udf_int_ena",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TRANS_COMPLETE_INT_ENA": {
    +                    "description": "reg_trans_complete_int_ena",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TIME_OUT_INT_ENA": {
    +                    "description": "reg_time_out_int_ena",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TRANS_START_INT_ENA": {
    +                    "description": "reg_trans_start_int_ena",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "NACK_INT_ENA": {
    +                    "description": "reg_nack_int_ena",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TXFIFO_OVF_INT_ENA": {
    +                    "description": "reg_txfifo_ovf_int_ena",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "RXFIFO_UDF_INT_ENA": {
    +                    "description": "reg_rxfifo_udf_int_ena",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "SCL_ST_TO_INT_ENA": {
    +                    "description": "reg_scl_st_to_int_ena",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "SCL_MAIN_ST_TO_INT_ENA": {
    +                    "description": "reg_scl_main_st_to_int_ena",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "DET_START_INT_ENA": {
    +                    "description": "reg_det_start_int_ena",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "SLAVE_STRETCH_INT_ENA": {
    +                    "description": "reg_slave_stretch_int_ena",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "GENERAL_CALL_INT_ENA": {
    +                    "description": "reg_general_call_int_ena",
    +                    "offset": 17,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INT_STATUS": {
    +              "description": "I2C_INT_STATUS_REG",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXFIFO_WM_INT_ST": {
    +                    "description": "reg_rxfifo_wm_int_st",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXFIFO_WM_INT_ST": {
    +                    "description": "reg_txfifo_wm_int_st",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXFIFO_OVF_INT_ST": {
    +                    "description": "reg_rxfifo_ovf_int_st",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "END_DETECT_INT_ST": {
    +                    "description": "reg_end_detect_int_st",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BYTE_TRANS_DONE_INT_ST": {
    +                    "description": "reg_byte_trans_done_int_st",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ARBITRATION_LOST_INT_ST": {
    +                    "description": "reg_arbitration_lost_int_st",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MST_TXFIFO_UDF_INT_ST": {
    +                    "description": "reg_mst_txfifo_udf_int_st",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TRANS_COMPLETE_INT_ST": {
    +                    "description": "reg_trans_complete_int_st",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TIME_OUT_INT_ST": {
    +                    "description": "reg_time_out_int_st",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TRANS_START_INT_ST": {
    +                    "description": "reg_trans_start_int_st",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "NACK_INT_ST": {
    +                    "description": "reg_nack_int_st",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXFIFO_OVF_INT_ST": {
    +                    "description": "reg_txfifo_ovf_int_st",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXFIFO_UDF_INT_ST": {
    +                    "description": "reg_rxfifo_udf_int_st",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SCL_ST_TO_INT_ST": {
    +                    "description": "reg_scl_st_to_int_st",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SCL_MAIN_ST_TO_INT_ST": {
    +                    "description": "reg_scl_main_st_to_int_st",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DET_START_INT_ST": {
    +                    "description": "reg_det_start_int_st",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SLAVE_STRETCH_INT_ST": {
    +                    "description": "reg_slave_stretch_int_st",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GENERAL_CALL_INT_ST": {
    +                    "description": "reg_general_call_int_st",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SDA_HOLD": {
    +              "description": "I2C_SDA_HOLD_REG",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIME": {
    +                    "description": "reg_sda_hold_time",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "SDA_SAMPLE": {
    +              "description": "I2C_SDA_SAMPLE_REG",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIME": {
    +                    "description": "reg_sda_sample_time",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "SCL_HIGH_PERIOD": {
    +              "description": "I2C_SCL_HIGH_PERIOD_REG",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SCL_HIGH_PERIOD": {
    +                    "description": "reg_scl_high_period",
    +                    "offset": 0,
    +                    "size": 9
    +                  },
    +                  "SCL_WAIT_HIGH_PERIOD": {
    +                    "description": "reg_scl_wait_high_period",
    +                    "offset": 9,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "SCL_START_HOLD": {
    +              "description": "I2C_SCL_START_HOLD_REG",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 8,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIME": {
    +                    "description": "reg_scl_start_hold_time",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "SCL_RSTART_SETUP": {
    +              "description": "I2C_SCL_RSTART_SETUP_REG",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 8,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIME": {
    +                    "description": "reg_scl_rstart_setup_time",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "SCL_STOP_HOLD": {
    +              "description": "I2C_SCL_STOP_HOLD_REG",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 8,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIME": {
    +                    "description": "reg_scl_stop_hold_time",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "SCL_STOP_SETUP": {
    +              "description": "I2C_SCL_STOP_SETUP_REG",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 8,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIME": {
    +                    "description": "reg_scl_stop_setup_time",
    +                    "offset": 0,
    +                    "size": 9
    +                  }
    +                }
    +              }
    +            },
    +            "FILTER_CFG": {
    +              "description": "I2C_FILTER_CFG_REG",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 768,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SCL_FILTER_THRES": {
    +                    "description": "reg_scl_filter_thres",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "SDA_FILTER_THRES": {
    +                    "description": "reg_sda_filter_thres",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "SCL_FILTER_EN": {
    +                    "description": "reg_scl_filter_en",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SDA_FILTER_EN": {
    +                    "description": "reg_sda_filter_en",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLK_CONF": {
    +              "description": "I2C_CLK_CONF_REG",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 2097152,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SCLK_DIV_NUM": {
    +                    "description": "reg_sclk_div_num",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "SCLK_DIV_A": {
    +                    "description": "reg_sclk_div_a",
    +                    "offset": 8,
    +                    "size": 6
    +                  },
    +                  "SCLK_DIV_B": {
    +                    "description": "reg_sclk_div_b",
    +                    "offset": 14,
    +                    "size": 6
    +                  },
    +                  "SCLK_SEL": {
    +                    "description": "reg_sclk_sel",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "SCLK_ACTIVE": {
    +                    "description": "reg_sclk_active",
    +                    "offset": 21,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "COMD": {
    +              "description": "I2C_COMD%s_REG",
    +              "offset": 88,
    +              "size": 32,
    +              "count": 8,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMMAND": {
    +                    "description": "reg_command",
    +                    "offset": 0,
    +                    "size": 14
    +                  },
    +                  "COMMAND_DONE": {
    +                    "description": "reg_command_done",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SCL_ST_TIME_OUT": {
    +              "description": "I2C_SCL_ST_TIME_OUT_REG",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 16,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SCL_ST_TO_I2C": {
    +                    "description": "reg_scl_st_to_regno more than 23",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "SCL_MAIN_ST_TIME_OUT": {
    +              "description": "I2C_SCL_MAIN_ST_TIME_OUT_REG",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 16,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SCL_MAIN_ST_TO_I2C": {
    +                    "description": "reg_scl_main_st_to_regno more than 23",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "SCL_SP_CONF": {
    +              "description": "I2C_SCL_SP_CONF_REG",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SCL_RST_SLV_EN": {
    +                    "description": "reg_scl_rst_slv_en",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SCL_RST_SLV_NUM": {
    +                    "description": "reg_scl_rst_slv_num",
    +                    "offset": 1,
    +                    "size": 5
    +                  },
    +                  "SCL_PD_EN": {
    +                    "description": "reg_scl_pd_en",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SDA_PD_EN": {
    +                    "description": "reg_sda_pd_en",
    +                    "offset": 7,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SCL_STRETCH_CONF": {
    +              "description": "I2C_SCL_STRETCH_CONF_REG",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STRETCH_PROTECT_NUM": {
    +                    "description": "reg_stretch_protect_num",
    +                    "offset": 0,
    +                    "size": 10
    +                  },
    +                  "SLAVE_SCL_STRETCH_EN": {
    +                    "description": "reg_slave_scl_stretch_en",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SLAVE_SCL_STRETCH_CLR": {
    +                    "description": "reg_slave_scl_stretch_clr",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SLAVE_BYTE_ACK_CTL_EN": {
    +                    "description": "reg_slave_byte_ack_ctl_en",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "SLAVE_BYTE_ACK_LVL": {
    +                    "description": "reg_slave_byte_ack_lvl",
    +                    "offset": 13,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DATE": {
    +              "description": "I2C_DATE_REG",
    +              "offset": 248,
    +              "size": 32,
    +              "reset_value": 537330177,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATE": {
    +                    "description": "reg_date",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "TXFIFO_START_ADDR": {
    +              "description": "I2C_TXFIFO_START_ADDR_REG",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXFIFO_START_ADDR": {
    +                    "description": "reg_txfifo_start_addr.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RXFIFO_START_ADDR": {
    +              "description": "I2C_RXFIFO_START_ADDR_REG",
    +              "offset": 384,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXFIFO_START_ADDR": {
    +                    "description": "reg_rxfifo_start_addr.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "I2S": {
    +        "description": "I2S (Inter-IC Sound) Controller",
    +        "children": {
    +          "registers": {
    +            "INT_RAW": {
    +              "description": "I2S interrupt raw register, valid in level.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_DONE_INT_RAW": {
    +                    "description": "The raw interrupt status bit  for the i2s_rx_done_int interrupt",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TX_DONE_INT_RAW": {
    +                    "description": "The raw interrupt status bit  for the i2s_tx_done_int interrupt",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RX_HUNG_INT_RAW": {
    +                    "description": "The raw interrupt status bit  for the i2s_rx_hung_int interrupt",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TX_HUNG_INT_RAW": {
    +                    "description": "The raw interrupt status bit  for the i2s_tx_hung_int interrupt",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ST": {
    +              "description": "I2S interrupt status register.",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_DONE_INT_ST": {
    +                    "description": "The masked interrupt status bit  for the i2s_rx_done_int interrupt",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TX_DONE_INT_ST": {
    +                    "description": "The masked interrupt status bit  for the i2s_tx_done_int interrupt",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RX_HUNG_INT_ST": {
    +                    "description": "The masked interrupt status bit  for the i2s_rx_hung_int interrupt",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TX_HUNG_INT_ST": {
    +                    "description": "The masked interrupt status bit  for the i2s_tx_hung_int interrupt",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ENA": {
    +              "description": "I2S interrupt enable register.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_DONE_INT_ENA": {
    +                    "description": "The interrupt enable bit  for the i2s_rx_done_int interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TX_DONE_INT_ENA": {
    +                    "description": "The interrupt enable bit  for the i2s_tx_done_int interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RX_HUNG_INT_ENA": {
    +                    "description": "The interrupt enable bit  for the i2s_rx_hung_int interrupt",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TX_HUNG_INT_ENA": {
    +                    "description": "The interrupt enable bit  for the i2s_tx_hung_int interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INT_CLR": {
    +              "description": "I2S interrupt clear register.",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_DONE_INT_CLR": {
    +                    "description": "Set this bit to clear the i2s_rx_done_int interrupt",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TX_DONE_INT_CLR": {
    +                    "description": "Set this bit to clear the i2s_tx_done_int interrupt",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RX_HUNG_INT_CLR": {
    +                    "description": "Set this bit to clear the i2s_rx_hung_int interrupt",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TX_HUNG_INT_CLR": {
    +                    "description": "Set this bit to clear the i2s_tx_hung_int interrupt",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RX_CONF": {
    +              "description": "I2S RX configure register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 38400,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_RESET": {
    +                    "description": "Set this bit to reset receiver",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RX_FIFO_RESET": {
    +                    "description": "Set this bit to reset Rx AFIFO",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RX_START": {
    +                    "description": "Set this bit to start receiving data",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RX_SLAVE_MOD": {
    +                    "description": "Set this bit to enable slave receiver mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RX_MONO": {
    +                    "description": "Set this bit to enable receiver  in mono mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RX_BIG_ENDIAN": {
    +                    "description": "I2S Rx byte endian, 1: low addr value to high addr. 0: low addr with low addr value.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RX_UPDATE": {
    +                    "description": "Set 1 to update I2S RX registers from APB clock domain to I2S RX clock domain. This bit will be cleared by hardware after update register done.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "RX_MONO_FST_VLD": {
    +                    "description": "1: The first channel data value is valid in I2S RX mono mode.   0: The second channel data value is valid in I2S RX mono mode.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RX_PCM_CONF": {
    +                    "description": "I2S RX compress/decompress configuration bit. & 0 (atol): A-Law decompress, 1 (ltoa) : A-Law compress, 2 (utol) : u-Law decompress, 3 (ltou) : u-Law compress. &",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "RX_PCM_BYPASS": {
    +                    "description": "Set this bit to bypass Compress/Decompress module for received data.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "RX_STOP_MODE": {
    +                    "description": "0  : I2S Rx only stop when reg_rx_start is cleared.   1: Stop when reg_rx_start is 0 or in_suc_eof is 1.   2:  Stop I2S RX when reg_rx_start is 0 or RX FIFO is full.",
    +                    "offset": 13,
    +                    "size": 2
    +                  },
    +                  "RX_LEFT_ALIGN": {
    +                    "description": "1: I2S RX left alignment mode. 0: I2S RX right alignment mode.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "RX_24_FILL_EN": {
    +                    "description": "1: store 24 channel bits to 32 bits. 0:store 24 channel bits to 24 bits.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RX_WS_IDLE_POL": {
    +                    "description": "0: WS should be 0 when receiving left channel data, and WS is 1in right channel.  1: WS should be 1 when receiving left channel data, and WS is 0in right channel.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "RX_BIT_ORDER": {
    +                    "description": "I2S Rx bit endian. 1:small endian, the LSB is received first. 0:big endian, the MSB is received first.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "RX_TDM_EN": {
    +                    "description": "1: Enable I2S TDM Rx mode . 0: Disable.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "RX_PDM_EN": {
    +                    "description": "1: Enable I2S PDM Rx mode . 0: Disable.",
    +                    "offset": 20,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TX_CONF": {
    +              "description": "I2S TX configure register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 45568,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_RESET": {
    +                    "description": "Set this bit to reset transmitter",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TX_FIFO_RESET": {
    +                    "description": "Set this bit to reset Tx AFIFO",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TX_START": {
    +                    "description": "Set this bit to start transmitting data",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TX_SLAVE_MOD": {
    +                    "description": "Set this bit to enable slave transmitter mode",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TX_MONO": {
    +                    "description": "Set this bit to enable transmitter in mono mode",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TX_CHAN_EQUAL": {
    +                    "description": "1: The value of Left channel data is equal to the value of right channel data in I2S TX mono mode or TDM channel select mode. 0: The invalid channel data is reg_i2s_single_data in I2S TX mono mode or TDM channel select mode.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TX_BIG_ENDIAN": {
    +                    "description": "I2S Tx byte endian, 1: low addr value to high addr.  0: low addr with low addr value.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TX_UPDATE": {
    +                    "description": "Set 1 to update I2S TX registers from APB clock domain to I2S TX clock domain. This bit will be cleared by hardware after update register done.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TX_MONO_FST_VLD": {
    +                    "description": "1: The first channel data value is valid in I2S TX mono mode.   0: The second channel data value is valid in I2S TX mono mode.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TX_PCM_CONF": {
    +                    "description": "I2S TX compress/decompress configuration bit. & 0 (atol): A-Law decompress, 1 (ltoa) : A-Law compress, 2 (utol) : u-Law decompress, 3 (ltou) : u-Law compress. &",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "TX_PCM_BYPASS": {
    +                    "description": "Set this bit to bypass  Compress/Decompress module for transmitted data.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TX_STOP_EN": {
    +                    "description": "Set this bit to stop disable output BCK signal and WS signal when tx FIFO is emtpy",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TX_LEFT_ALIGN": {
    +                    "description": "1: I2S TX left alignment mode. 0: I2S TX right alignment mode.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TX_24_FILL_EN": {
    +                    "description": "1: Sent 32 bits in 24 channel bits mode. 0: Sent 24 bits in 24 channel bits mode",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "TX_WS_IDLE_POL": {
    +                    "description": "0: WS should be 0 when sending left channel data, and WS is 1in right channel.  1: WS should be 1 when sending left channel data, and WS is 0in right channel.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TX_BIT_ORDER": {
    +                    "description": "I2S Tx bit endian. 1:small endian, the LSB is sent first. 0:big endian, the MSB is sent first.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "TX_TDM_EN": {
    +                    "description": "1: Enable I2S TDM Tx mode . 0: Disable.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "TX_PDM_EN": {
    +                    "description": "1: Enable I2S PDM Tx mode . 0: Disable.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "TX_CHAN_MOD": {
    +                    "description": "I2S transmitter channel mode configuration bits.",
    +                    "offset": 24,
    +                    "size": 3
    +                  },
    +                  "SIG_LOOPBACK": {
    +                    "description": "Enable signal loop back mode with transmitter module and receiver module sharing the same WS and BCK signals.",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RX_CONF1": {
    +              "description": "I2S RX configure register 1",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 792584960,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_TDM_WS_WIDTH": {
    +                    "description": "The width of rx_ws_out in TDM mode is (I2S_RX_TDM_WS_WIDTH[6:0] +1) * T_bck",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "RX_BCK_DIV_NUM": {
    +                    "description": "Bit clock configuration bits in receiver mode.",
    +                    "offset": 7,
    +                    "size": 6
    +                  },
    +                  "RX_BITS_MOD": {
    +                    "description": "Set the bits to configure the valid data bit length of I2S receiver channel. 7: all the valid channel data is in 8-bit-mode. 15: all the valid channel data is in 16-bit-mode. 23: all the valid channel data is in 24-bit-mode. 31:all the valid channel data is in 32-bit-mode.",
    +                    "offset": 13,
    +                    "size": 5
    +                  },
    +                  "RX_HALF_SAMPLE_BITS": {
    +                    "description": "I2S Rx half sample bits -1.",
    +                    "offset": 18,
    +                    "size": 6
    +                  },
    +                  "RX_TDM_CHAN_BITS": {
    +                    "description": "The Rx bit number for each channel minus 1in TDM mode.",
    +                    "offset": 24,
    +                    "size": 5
    +                  },
    +                  "RX_MSB_SHIFT": {
    +                    "description": "Set this bit to enable receiver in Phillips standard mode",
    +                    "offset": 29,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TX_CONF1": {
    +              "description": "I2S TX configure register 1",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 1866326784,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_TDM_WS_WIDTH": {
    +                    "description": "The width of tx_ws_out in TDM mode is (I2S_TX_TDM_WS_WIDTH[6:0] +1) * T_bck",
    +                    "offset": 0,
    +                    "size": 7
    +                  },
    +                  "TX_BCK_DIV_NUM": {
    +                    "description": "Bit clock configuration bits in transmitter mode.",
    +                    "offset": 7,
    +                    "size": 6
    +                  },
    +                  "TX_BITS_MOD": {
    +                    "description": "Set the bits to configure the valid data bit length of I2S transmitter channel. 7: all the valid channel data is in 8-bit-mode. 15: all the valid channel data is in 16-bit-mode. 23: all the valid channel data is in 24-bit-mode. 31:all the valid channel data is in 32-bit-mode.",
    +                    "offset": 13,
    +                    "size": 5
    +                  },
    +                  "TX_HALF_SAMPLE_BITS": {
    +                    "description": "I2S Tx half sample bits -1.",
    +                    "offset": 18,
    +                    "size": 6
    +                  },
    +                  "TX_TDM_CHAN_BITS": {
    +                    "description": "The Tx bit number for each channel minus 1in TDM mode.",
    +                    "offset": 24,
    +                    "size": 5
    +                  },
    +                  "TX_MSB_SHIFT": {
    +                    "description": "Set this bit to enable transmitter in Phillips standard mode",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "TX_BCK_NO_DLY": {
    +                    "description": "1: BCK is not delayed to generate pos/neg edge in master mode. 0: BCK is delayed to generate pos/neg edge in master mode.",
    +                    "offset": 30,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RX_CLKM_CONF": {
    +              "description": "I2S RX clock configure register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 2,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_CLKM_DIV_NUM": {
    +                    "description": "Integral I2S clock divider value",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "RX_CLK_ACTIVE": {
    +                    "description": "I2S Rx module clock enable signal.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "RX_CLK_SEL": {
    +                    "description": "Select I2S Rx module source clock. 0: no clock. 1: APLL. 2: CLK160. 3: I2S_MCLK_in.",
    +                    "offset": 27,
    +                    "size": 2
    +                  },
    +                  "MCLK_SEL": {
    +                    "description": "0: UseI2S Tx module clock as I2S_MCLK_OUT.  1: UseI2S Rx module clock as I2S_MCLK_OUT.",
    +                    "offset": 29,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TX_CLKM_CONF": {
    +              "description": "I2S TX clock configure register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 2,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_CLKM_DIV_NUM": {
    +                    "description": "Integral I2S TX clock divider value. f_I2S_CLK = f_I2S_CLK_S/(N+b/a). There will be (a-b) * n-div and b * (n+1)-div.  So the average combination will be:  for b <= a/2, z * [x * n-div + (n+1)-div] + y * n-div. For b > a/2, z * [n-div + x * (n+1)-div] + y * (n+1)-div.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "TX_CLK_ACTIVE": {
    +                    "description": "I2S Tx module clock enable signal.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "TX_CLK_SEL": {
    +                    "description": "Select I2S Tx module source clock. 0: XTAL clock. 1: APLL. 2: CLK160. 3: I2S_MCLK_in.",
    +                    "offset": 27,
    +                    "size": 2
    +                  },
    +                  "CLK_EN": {
    +                    "description": "Set this bit to enable clk gate",
    +                    "offset": 29,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RX_CLKM_DIV_CONF": {
    +              "description": "I2S RX module clock divider configure register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 512,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_CLKM_DIV_Z": {
    +                    "description": "For b <= a/2, the value of I2S_RX_CLKM_DIV_Z is b. For b > a/2, the value of I2S_RX_CLKM_DIV_Z is (a-b).",
    +                    "offset": 0,
    +                    "size": 9
    +                  },
    +                  "RX_CLKM_DIV_Y": {
    +                    "description": "For b <= a/2, the value of I2S_RX_CLKM_DIV_Y is (a%b) . For b > a/2, the value of I2S_RX_CLKM_DIV_Y is (a%(a-b)).",
    +                    "offset": 9,
    +                    "size": 9
    +                  },
    +                  "RX_CLKM_DIV_X": {
    +                    "description": "For b <= a/2, the value of I2S_RX_CLKM_DIV_X is (a/b) - 1. For b > a/2, the value of I2S_RX_CLKM_DIV_X is (a/(a-b)) - 1.",
    +                    "offset": 18,
    +                    "size": 9
    +                  },
    +                  "RX_CLKM_DIV_YN1": {
    +                    "description": "For b <= a/2, the value of I2S_RX_CLKM_DIV_YN1 is 0 . For b > a/2, the value of I2S_RX_CLKM_DIV_YN1 is 1.",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TX_CLKM_DIV_CONF": {
    +              "description": "I2S TX module clock divider configure register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 512,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_CLKM_DIV_Z": {
    +                    "description": "For b <= a/2, the value of I2S_TX_CLKM_DIV_Z is b. For b > a/2, the value of I2S_TX_CLKM_DIV_Z is (a-b).",
    +                    "offset": 0,
    +                    "size": 9
    +                  },
    +                  "TX_CLKM_DIV_Y": {
    +                    "description": "For b <= a/2, the value of I2S_TX_CLKM_DIV_Y is (a%b) . For b > a/2, the value of I2S_TX_CLKM_DIV_Y is (a%(a-b)).",
    +                    "offset": 9,
    +                    "size": 9
    +                  },
    +                  "TX_CLKM_DIV_X": {
    +                    "description": "For b <= a/2, the value of I2S_TX_CLKM_DIV_X is (a/b) - 1. For b > a/2, the value of I2S_TX_CLKM_DIV_X is (a/(a-b)) - 1.",
    +                    "offset": 18,
    +                    "size": 9
    +                  },
    +                  "TX_CLKM_DIV_YN1": {
    +                    "description": "For b <= a/2, the value of I2S_TX_CLKM_DIV_YN1 is 0 . For b > a/2, the value of I2S_TX_CLKM_DIV_YN1 is 1.",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TX_PCM2PDM_CONF": {
    +              "description": "I2S TX PCM2PDM configuration register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 4890628,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_PDM_HP_BYPASS": {
    +                    "description": "I2S TX PDM bypass hp filter or not. The option has been removed.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TX_PDM_SINC_OSR2": {
    +                    "description": "I2S TX PDM OSR2 value",
    +                    "offset": 1,
    +                    "size": 4
    +                  },
    +                  "TX_PDM_PRESCALE": {
    +                    "description": "I2S TX PDM prescale for sigmadelta",
    +                    "offset": 5,
    +                    "size": 8
    +                  },
    +                  "TX_PDM_HP_IN_SHIFT": {
    +                    "description": "I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4",
    +                    "offset": 13,
    +                    "size": 2
    +                  },
    +                  "TX_PDM_LP_IN_SHIFT": {
    +                    "description": "I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4",
    +                    "offset": 15,
    +                    "size": 2
    +                  },
    +                  "TX_PDM_SINC_IN_SHIFT": {
    +                    "description": "I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4",
    +                    "offset": 17,
    +                    "size": 2
    +                  },
    +                  "TX_PDM_SIGMADELTA_IN_SHIFT": {
    +                    "description": "I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4",
    +                    "offset": 19,
    +                    "size": 2
    +                  },
    +                  "TX_PDM_SIGMADELTA_DITHER2": {
    +                    "description": "I2S TX PDM sigmadelta dither2 value",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TX_PDM_SIGMADELTA_DITHER": {
    +                    "description": "I2S TX PDM sigmadelta dither value",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "TX_PDM_DAC_2OUT_EN": {
    +                    "description": "I2S TX PDM dac mode enable",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "TX_PDM_DAC_MODE_EN": {
    +                    "description": "I2S TX PDM dac 2channel enable",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "PCM2PDM_CONV_EN": {
    +                    "description": "I2S TX PDM Converter enable",
    +                    "offset": 25,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TX_PCM2PDM_CONF1": {
    +              "description": "I2S TX PCM2PDM configuration register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 66552768,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_PDM_FP": {
    +                    "description": "I2S TX PDM Fp",
    +                    "offset": 0,
    +                    "size": 10
    +                  },
    +                  "TX_PDM_FS": {
    +                    "description": "I2S TX PDM Fs",
    +                    "offset": 10,
    +                    "size": 10
    +                  },
    +                  "TX_IIR_HP_MULT12_5": {
    +                    "description": "The fourth parameter of PDM TX IIR_HP filter stage 2 is (504 + I2S_TX_IIR_HP_MULT12_5[2:0])",
    +                    "offset": 20,
    +                    "size": 3
    +                  },
    +                  "TX_IIR_HP_MULT12_0": {
    +                    "description": "The fourth parameter of PDM TX IIR_HP filter stage 1 is (504 + I2S_TX_IIR_HP_MULT12_0[2:0])",
    +                    "offset": 23,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "RX_TDM_CTRL": {
    +              "description": "I2S TX TDM mode control register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 65535,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_TDM_PDM_CHAN0_EN": {
    +                    "description": "1: Enable the valid data input of I2S RX TDM or PDM channel 0. 0:  Disable, just input 0 in this channel.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RX_TDM_PDM_CHAN1_EN": {
    +                    "description": "1: Enable the valid data input of I2S RX TDM or PDM channel 1. 0:  Disable, just input 0 in this channel.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RX_TDM_PDM_CHAN2_EN": {
    +                    "description": "1: Enable the valid data input of I2S RX TDM or PDM channel 2. 0:  Disable, just input 0 in this channel.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RX_TDM_PDM_CHAN3_EN": {
    +                    "description": "1: Enable the valid data input of I2S RX TDM or PDM channel 3. 0:  Disable, just input 0 in this channel.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RX_TDM_PDM_CHAN4_EN": {
    +                    "description": "1: Enable the valid data input of I2S RX TDM or PDM channel 4. 0:  Disable, just input 0 in this channel.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RX_TDM_PDM_CHAN5_EN": {
    +                    "description": "1: Enable the valid data input of I2S RX TDM or PDM channel 5. 0:  Disable, just input 0 in this channel.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RX_TDM_PDM_CHAN6_EN": {
    +                    "description": "1: Enable the valid data input of I2S RX TDM or PDM channel 6. 0:  Disable, just input 0 in this channel.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RX_TDM_PDM_CHAN7_EN": {
    +                    "description": "1: Enable the valid data input of I2S RX TDM or PDM channel 7. 0:  Disable, just input 0 in this channel.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RX_TDM_CHAN8_EN": {
    +                    "description": "1: Enable the valid data input of I2S RX TDM channel 8. 0:  Disable, just input 0 in this channel.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "RX_TDM_CHAN9_EN": {
    +                    "description": "1: Enable the valid data input of I2S RX TDM channel 9. 0:  Disable, just input 0 in this channel.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RX_TDM_CHAN10_EN": {
    +                    "description": "1: Enable the valid data input of I2S RX TDM channel 10. 0:  Disable, just input 0 in this channel.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "RX_TDM_CHAN11_EN": {
    +                    "description": "1: Enable the valid data input of I2S RX TDM channel 11. 0:  Disable, just input 0 in this channel.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "RX_TDM_CHAN12_EN": {
    +                    "description": "1: Enable the valid data input of I2S RX TDM channel 12. 0:  Disable, just input 0 in this channel.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "RX_TDM_CHAN13_EN": {
    +                    "description": "1: Enable the valid data input of I2S RX TDM channel 13. 0:  Disable, just input 0 in this channel.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "RX_TDM_CHAN14_EN": {
    +                    "description": "1: Enable the valid data input of I2S RX TDM channel 14. 0:  Disable, just input 0 in this channel.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "RX_TDM_CHAN15_EN": {
    +                    "description": "1: Enable the valid data input of I2S RX TDM channel 15. 0:  Disable, just input 0 in this channel.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "RX_TDM_TOT_CHAN_NUM": {
    +                    "description": "The total channel number of I2S TX TDM mode.",
    +                    "offset": 16,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "TX_TDM_CTRL": {
    +              "description": "I2S TX TDM mode control register",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 65535,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_TDM_CHAN0_EN": {
    +                    "description": "1: Enable the valid data output of I2S TX TDM channel 0. 0:  Disable, just output 0 in this channel.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TX_TDM_CHAN1_EN": {
    +                    "description": "1: Enable the valid data output of I2S TX TDM channel 1. 0:  Disable, just output 0 in this channel.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TX_TDM_CHAN2_EN": {
    +                    "description": "1: Enable the valid data output of I2S TX TDM channel 2. 0:  Disable, just output 0 in this channel.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TX_TDM_CHAN3_EN": {
    +                    "description": "1: Enable the valid data output of I2S TX TDM channel 3. 0:  Disable, just output 0 in this channel.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TX_TDM_CHAN4_EN": {
    +                    "description": "1: Enable the valid data output of I2S TX TDM channel 4. 0:  Disable, just output 0 in this channel.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TX_TDM_CHAN5_EN": {
    +                    "description": "1: Enable the valid data output of I2S TX TDM channel 5. 0:  Disable, just output 0 in this channel.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "TX_TDM_CHAN6_EN": {
    +                    "description": "1: Enable the valid data output of I2S TX TDM channel 6. 0:  Disable, just output 0 in this channel.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "TX_TDM_CHAN7_EN": {
    +                    "description": "1: Enable the valid data output of I2S TX TDM channel 7. 0:  Disable, just output 0 in this channel.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TX_TDM_CHAN8_EN": {
    +                    "description": "1: Enable the valid data output of I2S TX TDM channel 8. 0:  Disable, just output 0 in this channel.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "TX_TDM_CHAN9_EN": {
    +                    "description": "1: Enable the valid data output of I2S TX TDM channel 9. 0:  Disable, just output 0 in this channel.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TX_TDM_CHAN10_EN": {
    +                    "description": "1: Enable the valid data output of I2S TX TDM channel 10. 0:  Disable, just output 0 in this channel.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TX_TDM_CHAN11_EN": {
    +                    "description": "1: Enable the valid data output of I2S TX TDM channel 11. 0:  Disable, just output 0 in this channel.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TX_TDM_CHAN12_EN": {
    +                    "description": "1: Enable the valid data output of I2S TX TDM channel 12. 0:  Disable, just output 0 in this channel.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TX_TDM_CHAN13_EN": {
    +                    "description": "1: Enable the valid data output of I2S TX TDM channel 13. 0:  Disable, just output 0 in this channel.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TX_TDM_CHAN14_EN": {
    +                    "description": "1: Enable the valid data output of I2S TX TDM channel 14. 0:  Disable, just output 0 in this channel.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TX_TDM_CHAN15_EN": {
    +                    "description": "1: Enable the valid data output of I2S TX TDM channel 15. 0:  Disable, just output 0 in this channel.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "TX_TDM_TOT_CHAN_NUM": {
    +                    "description": "The total channel number of I2S TX TDM mode.",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "TX_TDM_SKIP_MSK_EN": {
    +                    "description": "When DMA TX buffer stores the data of (REG_TX_TDM_TOT_CHAN_NUM + 1)  channels, and only the data of the enabled channels is sent, then this bit should be set. Clear it when all the data stored in DMA TX buffer is for enabled channels.",
    +                    "offset": 20,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RX_TIMING": {
    +              "description": "I2S RX timing control register",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_SD_IN_DM": {
    +                    "description": "The delay mode of I2S Rx SD input signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "RX_WS_OUT_DM": {
    +                    "description": "The delay mode of I2S Rx WS output signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "RX_BCK_OUT_DM": {
    +                    "description": "The delay mode of I2S Rx BCK output signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "RX_WS_IN_DM": {
    +                    "description": "The delay mode of I2S Rx WS input signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "RX_BCK_IN_DM": {
    +                    "description": "The delay mode of I2S Rx BCK input signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.",
    +                    "offset": 28,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "TX_TIMING": {
    +              "description": "I2S TX timing control register",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_SD_OUT_DM": {
    +                    "description": "The delay mode of I2S TX SD output signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "TX_SD1_OUT_DM": {
    +                    "description": "The delay mode of I2S TX SD1 output signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "TX_WS_OUT_DM": {
    +                    "description": "The delay mode of I2S TX WS output signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "TX_BCK_OUT_DM": {
    +                    "description": "The delay mode of I2S TX BCK output signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "TX_WS_IN_DM": {
    +                    "description": "The delay mode of I2S TX WS input signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "TX_BCK_IN_DM": {
    +                    "description": "The delay mode of I2S TX BCK input signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.",
    +                    "offset": 28,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "LC_HUNG_CONF": {
    +              "description": "I2S HUNG configure register.",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 2064,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LC_FIFO_TIMEOUT": {
    +                    "description": "the i2s_tx_hung_int interrupt or the i2s_rx_hung_int interrupt will be triggered when fifo hung counter is equal to this value",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "LC_FIFO_TIMEOUT_SHIFT": {
    +                    "description": "The bits are used to scale tick counter threshold. The tick counter is reset when counter value >= 88000/2^i2s_lc_fifo_timeout_shift",
    +                    "offset": 8,
    +                    "size": 3
    +                  },
    +                  "LC_FIFO_TIMEOUT_ENA": {
    +                    "description": "The enable bit for FIFO timeout",
    +                    "offset": 11,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RXEOF_NUM": {
    +              "description": "I2S RX data number control register.",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 64,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_EOF_NUM": {
    +                    "description": "The receive data bit length is (I2S_RX_BITS_MOD[4:0] + 1) * (REG_RX_EOF_NUM[11:0] + 1) . It will trigger in_suc_eof interrupt in the configured DMA RX channel.",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "CONF_SIGLE_DATA": {
    +              "description": "I2S signal data register",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SINGLE_DATA": {
    +                    "description": "The configured constant channel data to be sent out.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "STATE": {
    +              "description": "I2S TX status register",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_IDLE": {
    +                    "description": "1: i2s_tx is idle state. 0: i2s_tx is working.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DATE": {
    +              "description": "Version control register",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 33583648,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATE": {
    +                    "description": "I2S version control register",
    +                    "offset": 0,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "INTERRUPT_CORE0": {
    +        "description": "Interrupt Core",
    +        "children": {
    +          "registers": {
    +            "MAC_INTR_MAP": {
    +              "description": "mac intr map register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MAC_INTR_MAP": {
    +                    "description": "core0_mac_intr_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "MAC_NMI_MAP": {
    +              "description": "mac nmi_intr map register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MAC_NMI_MAP": {
    +                    "description": "reg_core0_mac_nmi_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "PWR_INTR_MAP": {
    +              "description": "pwr intr map register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PWR_INTR_MAP": {
    +                    "description": "reg_core0_pwr_intr_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "BB_INT_MAP": {
    +              "description": "bb intr map register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BB_INT_MAP": {
    +                    "description": "reg_core0_bb_int_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "BT_MAC_INT_MAP": {
    +              "description": "bt intr map register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BT_MAC_INT_MAP": {
    +                    "description": "reg_core0_bt_mac_int_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "BT_BB_INT_MAP": {
    +              "description": "bb_bt intr map register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BT_BB_INT_MAP": {
    +                    "description": "reg_core0_bt_bb_int_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "BT_BB_NMI_MAP": {
    +              "description": "bb_bt_nmi intr map register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BT_BB_NMI_MAP": {
    +                    "description": "reg_core0_bt_bb_nmi_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "RWBT_IRQ_MAP": {
    +              "description": "rwbt intr map register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RWBT_IRQ_MAP": {
    +                    "description": "reg_core0_rwbt_irq_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "RWBLE_IRQ_MAP": {
    +              "description": "rwble intr map register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RWBLE_IRQ_MAP": {
    +                    "description": "reg_core0_rwble_irq_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "RWBT_NMI_MAP": {
    +              "description": "rwbt_nmi intr map register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RWBT_NMI_MAP": {
    +                    "description": "reg_core0_rwbt_nmi_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "RWBLE_NMI_MAP": {
    +              "description": "rwble_nmi intr map register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RWBLE_NMI_MAP": {
    +                    "description": "reg_core0_rwble_nmi_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "I2C_MST_INT_MAP": {
    +              "description": "i2c intr map register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "I2C_MST_INT_MAP": {
    +                    "description": "reg_core0_i2c_mst_int_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "SLC0_INTR_MAP": {
    +              "description": "slc0 intr map register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SLC0_INTR_MAP": {
    +                    "description": "reg_core0_slc0_intr_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "SLC1_INTR_MAP": {
    +              "description": "slc1 intr map register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SLC1_INTR_MAP": {
    +                    "description": "reg_core0_slc1_intr_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "APB_CTRL_INTR_MAP": {
    +              "description": "apb_ctrl intr map register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "APB_CTRL_INTR_MAP": {
    +                    "description": "reg_core0_apb_ctrl_intr_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "UHCI0_INTR_MAP": {
    +              "description": "uchi0 intr map register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "UHCI0_INTR_MAP": {
    +                    "description": "reg_core0_uhci0_intr_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_INTERRUPT_PRO_MAP": {
    +              "description": "gpio intr map register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "GPIO_INTERRUPT_PRO_MAP": {
    +                    "description": "reg_core0_gpio_interrupt_pro_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_INTERRUPT_PRO_NMI_MAP": {
    +              "description": "gpio_pro intr map register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "GPIO_INTERRUPT_PRO_NMI_MAP": {
    +                    "description": "reg_core0_gpio_interrupt_pro_nmi_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "SPI_INTR_1_MAP": {
    +              "description": "gpio_pro_nmi intr map register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SPI_INTR_1_MAP": {
    +                    "description": "reg_core0_spi_intr_1_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "SPI_INTR_2_MAP": {
    +              "description": "spi1 intr map register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SPI_INTR_2_MAP": {
    +                    "description": "reg_core0_spi_intr_2_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "I2S1_INT_MAP": {
    +              "description": "spi2 intr map register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "I2S1_INT_MAP": {
    +                    "description": "reg_core0_i2s1_int_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "UART_INTR_MAP": {
    +              "description": "i2s1 intr map register",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "UART_INTR_MAP": {
    +                    "description": "reg_core0_uart_intr_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "UART1_INTR_MAP": {
    +              "description": "uart1 intr map register",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "UART1_INTR_MAP": {
    +                    "description": "reg_core0_uart1_intr_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "LEDC_INT_MAP": {
    +              "description": "ledc intr map register",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEDC_INT_MAP": {
    +                    "description": "reg_core0_ledc_int_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "EFUSE_INT_MAP": {
    +              "description": "efuse intr map register",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EFUSE_INT_MAP": {
    +                    "description": "reg_core0_efuse_int_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "CAN_INT_MAP": {
    +              "description": "can intr map register",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CAN_INT_MAP": {
    +                    "description": "reg_core0_can_int_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "USB_INTR_MAP": {
    +              "description": "usb intr map register",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "USB_INTR_MAP": {
    +                    "description": "reg_core0_usb_intr_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "RTC_CORE_INTR_MAP": {
    +              "description": "rtc intr map register",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_CORE_INTR_MAP": {
    +                    "description": "reg_core0_rtc_core_intr_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "RMT_INTR_MAP": {
    +              "description": "rmt intr map register",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RMT_INTR_MAP": {
    +                    "description": "reg_core0_rmt_intr_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "I2C_EXT0_INTR_MAP": {
    +              "description": "i2c intr map register",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "I2C_EXT0_INTR_MAP": {
    +                    "description": "reg_core0_i2c_ext0_intr_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "TIMER_INT1_MAP": {
    +              "description": "timer1 intr map register",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_INT1_MAP": {
    +                    "description": "reg_core0_timer_int1_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "TIMER_INT2_MAP": {
    +              "description": "timer2 intr map register",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_INT2_MAP": {
    +                    "description": "reg_core0_timer_int2_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "TG_T0_INT_MAP": {
    +              "description": "tg to intr map register",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TG_T0_INT_MAP": {
    +                    "description": "reg_core0_tg_t0_int_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "TG_WDT_INT_MAP": {
    +              "description": "tg wdt intr map register",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TG_WDT_INT_MAP": {
    +                    "description": "reg_core0_tg_wdt_int_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "TG1_T0_INT_MAP": {
    +              "description": "tg1 to intr map register",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TG1_T0_INT_MAP": {
    +                    "description": "reg_core0_tg1_t0_int_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "TG1_WDT_INT_MAP": {
    +              "description": "tg1 wdt intr map register",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TG1_WDT_INT_MAP": {
    +                    "description": "reg_core0_tg1_wdt_int_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "CACHE_IA_INT_MAP": {
    +              "description": "cache ia intr map register",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CACHE_IA_INT_MAP": {
    +                    "description": "reg_core0_cache_ia_int_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "SYSTIMER_TARGET0_INT_MAP": {
    +              "description": "systimer intr map register",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SYSTIMER_TARGET0_INT_MAP": {
    +                    "description": "reg_core0_systimer_target0_int_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "SYSTIMER_TARGET1_INT_MAP": {
    +              "description": "systimer target1 intr map register",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SYSTIMER_TARGET1_INT_MAP": {
    +                    "description": "reg_core0_systimer_target1_int_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "SYSTIMER_TARGET2_INT_MAP": {
    +              "description": "systimer target2 intr map register",
    +              "offset": 156,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SYSTIMER_TARGET2_INT_MAP": {
    +                    "description": "reg_core0_systimer_target2_int_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "SPI_MEM_REJECT_INTR_MAP": {
    +              "description": "spi mem reject intr map register",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SPI_MEM_REJECT_INTR_MAP": {
    +                    "description": "reg_core0_spi_mem_reject_intr_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "ICACHE_PRELOAD_INT_MAP": {
    +              "description": "icache perload intr map register",
    +              "offset": 164,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_PRELOAD_INT_MAP": {
    +                    "description": "reg_core0_icache_preload_int_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "ICACHE_SYNC_INT_MAP": {
    +              "description": "icache sync intr map register",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_SYNC_INT_MAP": {
    +                    "description": "reg_core0_icache_sync_int_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "APB_ADC_INT_MAP": {
    +              "description": "adc intr map register",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "APB_ADC_INT_MAP": {
    +                    "description": "reg_core0_apb_adc_int_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_CH0_INT_MAP": {
    +              "description": "dma ch0 intr map register",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_CH0_INT_MAP": {
    +                    "description": "reg_core0_dma_ch0_int_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_CH1_INT_MAP": {
    +              "description": "dma ch1 intr map register",
    +              "offset": 180,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_CH1_INT_MAP": {
    +                    "description": "reg_core0_dma_ch1_int_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_CH2_INT_MAP": {
    +              "description": "dma ch2 intr map register",
    +              "offset": 184,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_CH2_INT_MAP": {
    +                    "description": "reg_core0_dma_ch2_int_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "RSA_INT_MAP": {
    +              "description": "rsa intr map register",
    +              "offset": 188,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RSA_INT_MAP": {
    +                    "description": "reg_core0_rsa_int_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "AES_INT_MAP": {
    +              "description": "aes intr map register",
    +              "offset": 192,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AES_INT_MAP": {
    +                    "description": "reg_core0_aes_int_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "SHA_INT_MAP": {
    +              "description": "sha intr map register",
    +              "offset": 196,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SHA_INT_MAP": {
    +                    "description": "reg_core0_sha_int_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INTR_FROM_CPU_0_MAP": {
    +              "description": "cpu from cpu 0 intr map register",
    +              "offset": 200,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_INTR_FROM_CPU_0_MAP": {
    +                    "description": "reg_core0_cpu_intr_from_cpu_0_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INTR_FROM_CPU_1_MAP": {
    +              "description": "cpu from cpu 0 intr map register",
    +              "offset": 204,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_INTR_FROM_CPU_1_MAP": {
    +                    "description": "reg_core0_cpu_intr_from_cpu_1_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INTR_FROM_CPU_2_MAP": {
    +              "description": "cpu from cpu 1 intr map register",
    +              "offset": 208,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_INTR_FROM_CPU_2_MAP": {
    +                    "description": "reg_core0_cpu_intr_from_cpu_2_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INTR_FROM_CPU_3_MAP": {
    +              "description": "cpu from cpu 3 intr map register",
    +              "offset": 212,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_INTR_FROM_CPU_3_MAP": {
    +                    "description": "reg_core0_cpu_intr_from_cpu_3_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "ASSIST_DEBUG_INTR_MAP": {
    +              "description": "assist debug intr map register",
    +              "offset": 216,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ASSIST_DEBUG_INTR_MAP": {
    +                    "description": "reg_core0_assist_debug_intr_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR_MAP": {
    +              "description": "dma pms violatile intr map register",
    +              "offset": 220,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR_MAP": {
    +                    "description": "reg_core0_dma_apbperi_pms_monitor_violate_intr_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP": {
    +              "description": "iram0 pms violatile intr map register",
    +              "offset": 224,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP": {
    +                    "description": "reg_core0_core_0_iram0_pms_monitor_violate_intr_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP": {
    +              "description": "mac intr map register",
    +              "offset": 228,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP": {
    +                    "description": "reg_core0_core_0_dram0_pms_monitor_violate_intr_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR_MAP": {
    +              "description": "mac intr map register",
    +              "offset": 232,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR_MAP": {
    +                    "description": "reg_core0_core_0_pif_pms_monitor_violate_intr_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP": {
    +              "description": "mac intr map register",
    +              "offset": 236,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP": {
    +                    "description": "reg_core0_core_0_pif_pms_monitor_violate_size_intr_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "BACKUP_PMS_VIOLATE_INTR_MAP": {
    +              "description": "mac intr map register",
    +              "offset": 240,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BACKUP_PMS_VIOLATE_INTR_MAP": {
    +                    "description": "reg_core0_backup_pms_violate_intr_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "CACHE_CORE0_ACS_INT_MAP": {
    +              "description": "mac intr map register",
    +              "offset": 244,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CACHE_CORE0_ACS_INT_MAP": {
    +                    "description": "reg_core0_cache_core0_acs_int_map",
    +                    "offset": 0,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "INTR_STATUS_REG_0": {
    +              "description": "mac intr map register",
    +              "offset": 248,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INTR_STATUS_0": {
    +                    "description": "reg_core0_intr_status_0",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INTR_STATUS_REG_1": {
    +              "description": "mac intr map register",
    +              "offset": 252,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INTR_STATUS_1": {
    +                    "description": "reg_core0_intr_status_1",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CLOCK_GATE": {
    +              "description": "mac intr map register",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REG_CLK_EN": {
    +                    "description": "reg_core0_reg_clk_en",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_ENABLE": {
    +              "description": "mac intr map register",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_INT_ENABLE": {
    +                    "description": "reg_core0_cpu_int_enable",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_TYPE": {
    +              "description": "mac intr map register",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_INT_TYPE": {
    +                    "description": "reg_core0_cpu_int_type",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_CLEAR": {
    +              "description": "mac intr map register",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_INT_CLEAR": {
    +                    "description": "reg_core0_cpu_int_clear",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_EIP_STATUS": {
    +              "description": "mac intr map register",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_INT_EIP_STATUS": {
    +                    "description": "reg_core0_cpu_int_eip_status",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_0": {
    +              "description": "mac intr map register",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_0_MAP": {
    +                    "description": "reg_core0_cpu_pri_0_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_1": {
    +              "description": "mac intr map register",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_1_MAP": {
    +                    "description": "reg_core0_cpu_pri_1_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_2": {
    +              "description": "mac intr map register",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_2_MAP": {
    +                    "description": "reg_core0_cpu_pri_2_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_3": {
    +              "description": "mac intr map register",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_3_MAP": {
    +                    "description": "reg_core0_cpu_pri_3_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_4": {
    +              "description": "mac intr map register",
    +              "offset": 292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_4_MAP": {
    +                    "description": "reg_core0_cpu_pri_4_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_5": {
    +              "description": "mac intr map register",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_5_MAP": {
    +                    "description": "reg_core0_cpu_pri_5_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_6": {
    +              "description": "mac intr map register",
    +              "offset": 300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_6_MAP": {
    +                    "description": "reg_core0_cpu_pri_6_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_7": {
    +              "description": "mac intr map register",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_7_MAP": {
    +                    "description": "reg_core0_cpu_pri_7_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_8": {
    +              "description": "mac intr map register",
    +              "offset": 308,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_8_MAP": {
    +                    "description": "reg_core0_cpu_pri_8_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_9": {
    +              "description": "mac intr map register",
    +              "offset": 312,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_9_MAP": {
    +                    "description": "reg_core0_cpu_pri_9_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_10": {
    +              "description": "mac intr map register",
    +              "offset": 316,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_10_MAP": {
    +                    "description": "reg_core0_cpu_pri_10_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_11": {
    +              "description": "mac intr map register",
    +              "offset": 320,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_11_MAP": {
    +                    "description": "reg_core0_cpu_pri_11_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_12": {
    +              "description": "mac intr map register",
    +              "offset": 324,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_12_MAP": {
    +                    "description": "reg_core0_cpu_pri_12_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_13": {
    +              "description": "mac intr map register",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_13_MAP": {
    +                    "description": "reg_core0_cpu_pri_13_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_14": {
    +              "description": "mac intr map register",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_14_MAP": {
    +                    "description": "reg_core0_cpu_pri_14_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_15": {
    +              "description": "mac intr map register",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_15_MAP": {
    +                    "description": "reg_core0_cpu_pri_15_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_16": {
    +              "description": "mac intr map register",
    +              "offset": 340,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_16_MAP": {
    +                    "description": "reg_core0_cpu_pri_16_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_17": {
    +              "description": "mac intr map register",
    +              "offset": 344,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_17_MAP": {
    +                    "description": "reg_core0_cpu_pri_17_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_18": {
    +              "description": "mac intr map register",
    +              "offset": 348,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_18_MAP": {
    +                    "description": "reg_core0_cpu_pri_18_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_19": {
    +              "description": "mac intr map register",
    +              "offset": 352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_19_MAP": {
    +                    "description": "reg_core0_cpu_pri_19_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_20": {
    +              "description": "mac intr map register",
    +              "offset": 356,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_20_MAP": {
    +                    "description": "reg_core0_cpu_pri_20_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_21": {
    +              "description": "mac intr map register",
    +              "offset": 360,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_21_MAP": {
    +                    "description": "reg_core0_cpu_pri_21_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_22": {
    +              "description": "mac intr map register",
    +              "offset": 364,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_22_MAP": {
    +                    "description": "reg_core0_cpu_pri_22_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_23": {
    +              "description": "mac intr map register",
    +              "offset": 368,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_23_MAP": {
    +                    "description": "reg_core0_cpu_pri_23_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_24": {
    +              "description": "mac intr map register",
    +              "offset": 372,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_24_MAP": {
    +                    "description": "reg_core0_cpu_pri_24_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_25": {
    +              "description": "mac intr map register",
    +              "offset": 376,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_25_MAP": {
    +                    "description": "reg_core0_cpu_pri_25_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_26": {
    +              "description": "mac intr map register",
    +              "offset": 380,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_26_MAP": {
    +                    "description": "reg_core0_cpu_pri_26_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_27": {
    +              "description": "mac intr map register",
    +              "offset": 384,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_27_MAP": {
    +                    "description": "reg_core0_cpu_pri_27_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_28": {
    +              "description": "mac intr map register",
    +              "offset": 388,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_28_MAP": {
    +                    "description": "reg_core0_cpu_pri_28_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_29": {
    +              "description": "mac intr map register",
    +              "offset": 392,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_29_MAP": {
    +                    "description": "reg_core0_cpu_pri_29_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_30": {
    +              "description": "mac intr map register",
    +              "offset": 396,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_30_MAP": {
    +                    "description": "reg_core0_cpu_pri_30_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_PRI_31": {
    +              "description": "mac intr map register",
    +              "offset": 400,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_PRI_31_MAP": {
    +                    "description": "reg_core0_cpu_pri_31_map",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INT_THRESH": {
    +              "description": "mac intr map register",
    +              "offset": 404,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_INT_THRESH": {
    +                    "description": "reg_core0_cpu_int_thresh",
    +                    "offset": 0,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "INTERRUPT_REG_DATE": {
    +              "description": "mac intr map register",
    +              "offset": 2044,
    +              "size": 32,
    +              "reset_value": 33583632,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INTERRUPT_REG_DATE": {
    +                    "description": "reg_core0_interrupt_reg_date",
    +                    "offset": 0,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "IO_MUX": {
    +        "description": "Input/Output Multiplexer",
    +        "children": {
    +          "registers": {
    +            "PIN_CTRL": {
    +              "description": "Clock Output Configuration Register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 2047,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLK_OUT1": {
    +                    "description": "If you want to output clock for I2S to CLK_OUT_out1, set this register to 0x0. CLK_OUT_out1 can be found in peripheral output signals.",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "CLK_OUT2": {
    +                    "description": "If you want to output clock for I2S to CLK_OUT_out2, set this register to 0x0. CLK_OUT_out2 can be found in peripheral output signals.",
    +                    "offset": 4,
    +                    "size": 4
    +                  },
    +                  "CLK_OUT3": {
    +                    "description": "If you want to output clock for I2S to CLK_OUT_out3, set this register to 0x0. CLK_OUT_out3 can be found in peripheral output signals.",
    +                    "offset": 8,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO": {
    +              "description": "IO MUX Configure Register for pad XTAL_32K_P",
    +              "offset": 4,
    +              "size": 32,
    +              "count": 22,
    +              "reset_value": 2816,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MCU_OE": {
    +                    "description": "Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SLP_SEL": {
    +                    "description": "Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MCU_WPD": {
    +                    "description": "Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0: internal pull-down disabled.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MCU_WPU": {
    +                    "description": "Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0: internal pull-up disabled.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MCU_IE": {
    +                    "description": "Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FUN_WPD": {
    +                    "description": "Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal pull-down disabled.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FUN_WPU": {
    +                    "description": "Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up disabled.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FUN_IE": {
    +                    "description": "Input enable of the pad. 1: input enabled; 0: input disabled.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FUN_DRV": {
    +                    "description": "Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "MCU_SEL": {
    +                    "description": "Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function 2; etc.",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "FILTER_EN": {
    +                    "description": "Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DATE": {
    +              "description": "IO MUX Version Control Register",
    +              "offset": 252,
    +              "size": 32,
    +              "reset_value": 33579088,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REG_DATE": {
    +                    "description": "Version control register",
    +                    "offset": 0,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "LEDC": {
    +        "description": "LED Control PWM (Pulse Width Modulation)",
    +        "children": {
    +          "registers": {
    +            "LSCH0_CONF0": {
    +              "description": "LEDC_LSCH0_CONF0.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_SEL_LSCH0": {
    +                    "description": "reg_timer_sel_lsch0.",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "SIG_OUT_EN_LSCH0": {
    +                    "description": "reg_sig_out_en_lsch0.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IDLE_LV_LSCH0": {
    +                    "description": "reg_idle_lv_lsch0.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PARA_UP_LSCH0": {
    +                    "description": "reg_para_up_lsch0.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OVF_NUM_LSCH0": {
    +                    "description": "reg_ovf_num_lsch0.",
    +                    "offset": 5,
    +                    "size": 10
    +                  },
    +                  "OVF_CNT_EN_LSCH0": {
    +                    "description": "reg_ovf_cnt_en_lsch0.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OVF_CNT_RESET_LSCH0": {
    +                    "description": "reg_ovf_cnt_reset_lsch0.",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH0_HPOINT": {
    +              "description": "LEDC_LSCH0_HPOINT.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HPOINT_LSCH0": {
    +                    "description": "reg_hpoint_lsch0.",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH0_DUTY": {
    +              "description": "LEDC_LSCH0_DUTY.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DUTY_LSCH0": {
    +                    "description": "reg_duty_lsch0.",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH0_CONF1": {
    +              "description": "LEDC_LSCH0_CONF1.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 1073741824,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DUTY_SCALE_LSCH0": {
    +                    "description": "reg_duty_scale_lsch0.",
    +                    "offset": 0,
    +                    "size": 10
    +                  },
    +                  "DUTY_CYCLE_LSCH0": {
    +                    "description": "reg_duty_cycle_lsch0.",
    +                    "offset": 10,
    +                    "size": 10
    +                  },
    +                  "DUTY_NUM_LSCH0": {
    +                    "description": "reg_duty_num_lsch0.",
    +                    "offset": 20,
    +                    "size": 10
    +                  },
    +                  "DUTY_INC_LSCH0": {
    +                    "description": "reg_duty_inc_lsch0.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "DUTY_START_LSCH0": {
    +                    "description": "reg_duty_start_lsch0.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH0_DUTY_R": {
    +              "description": "LEDC_LSCH0_DUTY_R.",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DUTY_LSCH0_R": {
    +                    "description": "reg_duty_lsch0_r.",
    +                    "offset": 0,
    +                    "size": 19,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH1_CONF0": {
    +              "description": "LEDC_LSCH1_CONF0.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_SEL_LSCH1": {
    +                    "description": "reg_timer_sel_lsch1.",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "SIG_OUT_EN_LSCH1": {
    +                    "description": "reg_sig_out_en_lsch1.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IDLE_LV_LSCH1": {
    +                    "description": "reg_idle_lv_lsch1.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PARA_UP_LSCH1": {
    +                    "description": "reg_para_up_lsch1.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OVF_NUM_LSCH1": {
    +                    "description": "reg_ovf_num_lsch1.",
    +                    "offset": 5,
    +                    "size": 10
    +                  },
    +                  "OVF_CNT_EN_LSCH1": {
    +                    "description": "reg_ovf_cnt_en_lsch1.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OVF_CNT_RESET_LSCH1": {
    +                    "description": "reg_ovf_cnt_reset_lsch1.",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH1_HPOINT": {
    +              "description": "LEDC_LSCH1_HPOINT.",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HPOINT_LSCH1": {
    +                    "description": "reg_hpoint_lsch1.",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH1_DUTY": {
    +              "description": "LEDC_LSCH1_DUTY.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DUTY_LSCH1": {
    +                    "description": "reg_duty_lsch1.",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH1_CONF1": {
    +              "description": "LEDC_LSCH1_CONF1.",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 1073741824,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DUTY_SCALE_LSCH1": {
    +                    "description": "reg_duty_scale_lsch1.",
    +                    "offset": 0,
    +                    "size": 10
    +                  },
    +                  "DUTY_CYCLE_LSCH1": {
    +                    "description": "reg_duty_cycle_lsch1.",
    +                    "offset": 10,
    +                    "size": 10
    +                  },
    +                  "DUTY_NUM_LSCH1": {
    +                    "description": "reg_duty_num_lsch1.",
    +                    "offset": 20,
    +                    "size": 10
    +                  },
    +                  "DUTY_INC_LSCH1": {
    +                    "description": "reg_duty_inc_lsch1.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "DUTY_START_LSCH1": {
    +                    "description": "reg_duty_start_lsch1.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH1_DUTY_R": {
    +              "description": "LEDC_LSCH1_DUTY_R.",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DUTY_LSCH1_R": {
    +                    "description": "reg_duty_lsch1_r.",
    +                    "offset": 0,
    +                    "size": 19,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH2_CONF0": {
    +              "description": "LEDC_LSCH2_CONF0.",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_SEL_LSCH2": {
    +                    "description": "reg_timer_sel_lsch2.",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "SIG_OUT_EN_LSCH2": {
    +                    "description": "reg_sig_out_en_lsch2.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IDLE_LV_LSCH2": {
    +                    "description": "reg_idle_lv_lsch2.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PARA_UP_LSCH2": {
    +                    "description": "reg_para_up_lsch2.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OVF_NUM_LSCH2": {
    +                    "description": "reg_ovf_num_lsch2.",
    +                    "offset": 5,
    +                    "size": 10
    +                  },
    +                  "OVF_CNT_EN_LSCH2": {
    +                    "description": "reg_ovf_cnt_en_lsch2.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OVF_CNT_RESET_LSCH2": {
    +                    "description": "reg_ovf_cnt_reset_lsch2.",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH2_HPOINT": {
    +              "description": "LEDC_LSCH2_HPOINT.",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HPOINT_LSCH2": {
    +                    "description": "reg_hpoint_lsch2.",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH2_DUTY": {
    +              "description": "LEDC_LSCH2_DUTY.",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DUTY_LSCH2": {
    +                    "description": "reg_duty_lsch2.",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH2_CONF1": {
    +              "description": "LEDC_LSCH2_CONF1.",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 1073741824,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DUTY_SCALE_LSCH2": {
    +                    "description": "reg_duty_scale_lsch2.",
    +                    "offset": 0,
    +                    "size": 10
    +                  },
    +                  "DUTY_CYCLE_LSCH2": {
    +                    "description": "reg_duty_cycle_lsch2.",
    +                    "offset": 10,
    +                    "size": 10
    +                  },
    +                  "DUTY_NUM_LSCH2": {
    +                    "description": "reg_duty_num_lsch2.",
    +                    "offset": 20,
    +                    "size": 10
    +                  },
    +                  "DUTY_INC_LSCH2": {
    +                    "description": "reg_duty_inc_lsch2.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "DUTY_START_LSCH2": {
    +                    "description": "reg_duty_start_lsch2.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH2_DUTY_R": {
    +              "description": "LEDC_LSCH2_DUTY_R.",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DUTY_LSCH2_R": {
    +                    "description": "reg_duty_lsch2_r.",
    +                    "offset": 0,
    +                    "size": 19,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH3_CONF0": {
    +              "description": "LEDC_LSCH3_CONF0.",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_SEL_LSCH3": {
    +                    "description": "reg_timer_sel_lsch3.",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "SIG_OUT_EN_LSCH3": {
    +                    "description": "reg_sig_out_en_lsch3.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IDLE_LV_LSCH3": {
    +                    "description": "reg_idle_lv_lsch3.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PARA_UP_LSCH3": {
    +                    "description": "reg_para_up_lsch3.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OVF_NUM_LSCH3": {
    +                    "description": "reg_ovf_num_lsch3.",
    +                    "offset": 5,
    +                    "size": 10
    +                  },
    +                  "OVF_CNT_EN_LSCH3": {
    +                    "description": "reg_ovf_cnt_en_lsch3.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OVF_CNT_RESET_LSCH3": {
    +                    "description": "reg_ovf_cnt_reset_lsch3.",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH3_HPOINT": {
    +              "description": "LEDC_LSCH3_HPOINT.",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HPOINT_LSCH3": {
    +                    "description": "reg_hpoint_lsch3.",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH3_DUTY": {
    +              "description": "LEDC_LSCH3_DUTY.",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DUTY_LSCH3": {
    +                    "description": "reg_duty_lsch3.",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH3_CONF1": {
    +              "description": "LEDC_LSCH3_CONF1.",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 1073741824,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DUTY_SCALE_LSCH3": {
    +                    "description": "reg_duty_scale_lsch3.",
    +                    "offset": 0,
    +                    "size": 10
    +                  },
    +                  "DUTY_CYCLE_LSCH3": {
    +                    "description": "reg_duty_cycle_lsch3.",
    +                    "offset": 10,
    +                    "size": 10
    +                  },
    +                  "DUTY_NUM_LSCH3": {
    +                    "description": "reg_duty_num_lsch3.",
    +                    "offset": 20,
    +                    "size": 10
    +                  },
    +                  "DUTY_INC_LSCH3": {
    +                    "description": "reg_duty_inc_lsch3.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "DUTY_START_LSCH3": {
    +                    "description": "reg_duty_start_lsch3.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH3_DUTY_R": {
    +              "description": "LEDC_LSCH3_DUTY_R.",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DUTY_LSCH3_R": {
    +                    "description": "reg_duty_lsch3_r.",
    +                    "offset": 0,
    +                    "size": 19,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH4_CONF0": {
    +              "description": "LEDC_LSCH4_CONF0.",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_SEL_LSCH4": {
    +                    "description": "reg_timer_sel_lsch4.",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "SIG_OUT_EN_LSCH4": {
    +                    "description": "reg_sig_out_en_lsch4.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IDLE_LV_LSCH4": {
    +                    "description": "reg_idle_lv_lsch4.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PARA_UP_LSCH4": {
    +                    "description": "reg_para_up_lsch4.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OVF_NUM_LSCH4": {
    +                    "description": "reg_ovf_num_lsch4.",
    +                    "offset": 5,
    +                    "size": 10
    +                  },
    +                  "OVF_CNT_EN_LSCH4": {
    +                    "description": "reg_ovf_cnt_en_lsch4.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OVF_CNT_RESET_LSCH4": {
    +                    "description": "reg_ovf_cnt_reset_lsch4.",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH4_HPOINT": {
    +              "description": "LEDC_LSCH4_HPOINT.",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HPOINT_LSCH4": {
    +                    "description": "reg_hpoint_lsch4.",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH4_DUTY": {
    +              "description": "LEDC_LSCH4_DUTY.",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DUTY_LSCH4": {
    +                    "description": "reg_duty_lsch4.",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH4_CONF1": {
    +              "description": "LEDC_LSCH4_CONF1.",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 1073741824,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DUTY_SCALE_LSCH4": {
    +                    "description": "reg_duty_scale_lsch4.",
    +                    "offset": 0,
    +                    "size": 10
    +                  },
    +                  "DUTY_CYCLE_LSCH4": {
    +                    "description": "reg_duty_cycle_lsch4.",
    +                    "offset": 10,
    +                    "size": 10
    +                  },
    +                  "DUTY_NUM_LSCH4": {
    +                    "description": "reg_duty_num_lsch4.",
    +                    "offset": 20,
    +                    "size": 10
    +                  },
    +                  "DUTY_INC_LSCH4": {
    +                    "description": "reg_duty_inc_lsch4.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "DUTY_START_LSCH4": {
    +                    "description": "reg_duty_start_lsch4.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH4_DUTY_R": {
    +              "description": "LEDC_LSCH4_DUTY_R.",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DUTY_LSCH4_R": {
    +                    "description": "reg_duty_lsch4_r.",
    +                    "offset": 0,
    +                    "size": 19,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH5_CONF0": {
    +              "description": "LEDC_LSCH5_CONF0.",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_SEL_LSCH5": {
    +                    "description": "reg_timer_sel_lsch5.",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "SIG_OUT_EN_LSCH5": {
    +                    "description": "reg_sig_out_en_lsch5.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "IDLE_LV_LSCH5": {
    +                    "description": "reg_idle_lv_lsch5.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PARA_UP_LSCH5": {
    +                    "description": "reg_para_up_lsch5.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OVF_NUM_LSCH5": {
    +                    "description": "reg_ovf_num_lsch5.",
    +                    "offset": 5,
    +                    "size": 10
    +                  },
    +                  "OVF_CNT_EN_LSCH5": {
    +                    "description": "reg_ovf_cnt_en_lsch5.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "OVF_CNT_RESET_LSCH5": {
    +                    "description": "reg_ovf_cnt_reset_lsch5.",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH5_HPOINT": {
    +              "description": "LEDC_LSCH5_HPOINT.",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "HPOINT_LSCH5": {
    +                    "description": "reg_hpoint_lsch5.",
    +                    "offset": 0,
    +                    "size": 14
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH5_DUTY": {
    +              "description": "LEDC_LSCH5_DUTY.",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DUTY_LSCH5": {
    +                    "description": "reg_duty_lsch5.",
    +                    "offset": 0,
    +                    "size": 19
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH5_CONF1": {
    +              "description": "LEDC_LSCH5_CONF1.",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 1073741824,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DUTY_SCALE_LSCH5": {
    +                    "description": "reg_duty_scale_lsch5.",
    +                    "offset": 0,
    +                    "size": 10
    +                  },
    +                  "DUTY_CYCLE_LSCH5": {
    +                    "description": "reg_duty_cycle_lsch5.",
    +                    "offset": 10,
    +                    "size": 10
    +                  },
    +                  "DUTY_NUM_LSCH5": {
    +                    "description": "reg_duty_num_lsch5.",
    +                    "offset": 20,
    +                    "size": 10
    +                  },
    +                  "DUTY_INC_LSCH5": {
    +                    "description": "reg_duty_inc_lsch5.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "DUTY_START_LSCH5": {
    +                    "description": "reg_duty_start_lsch5.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "LSCH5_DUTY_R": {
    +              "description": "LEDC_LSCH5_DUTY_R.",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DUTY_LSCH5_R": {
    +                    "description": "reg_duty_lsch5_r.",
    +                    "offset": 0,
    +                    "size": 19,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "LSTIMER0_CONF": {
    +              "description": "LEDC_LSTIMER0_CONF.",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 8388608,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LSTIMER0_DUTY_RES": {
    +                    "description": "reg_lstimer0_duty_res.",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "CLK_DIV_LSTIMER0": {
    +                    "description": "reg_clk_div_lstimer0.",
    +                    "offset": 4,
    +                    "size": 18
    +                  },
    +                  "LSTIMER0_PAUSE": {
    +                    "description": "reg_lstimer0_pause.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "LSTIMER0_RST": {
    +                    "description": "reg_lstimer0_rst.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "TICK_SEL_LSTIMER0": {
    +                    "description": "reg_tick_sel_lstimer0.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "LSTIMER0_PARA_UP": {
    +                    "description": "reg_lstimer0_para_up.",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "LSTIMER0_VALUE": {
    +              "description": "LEDC_LSTIMER0_VALUE.",
    +              "offset": 164,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LSTIMER0_CNT": {
    +                    "description": "reg_lstimer0_cnt.",
    +                    "offset": 0,
    +                    "size": 14,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "LSTIMER1_CONF": {
    +              "description": "LEDC_LSTIMER1_CONF.",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 8388608,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LSTIMER1_DUTY_RES": {
    +                    "description": "reg_lstimer1_duty_res.",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "CLK_DIV_LSTIMER1": {
    +                    "description": "reg_clk_div_lstimer1.",
    +                    "offset": 4,
    +                    "size": 18
    +                  },
    +                  "LSTIMER1_PAUSE": {
    +                    "description": "reg_lstimer1_pause.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "LSTIMER1_RST": {
    +                    "description": "reg_lstimer1_rst.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "TICK_SEL_LSTIMER1": {
    +                    "description": "reg_tick_sel_lstimer1.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "LSTIMER1_PARA_UP": {
    +                    "description": "reg_lstimer1_para_up.",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "LSTIMER1_VALUE": {
    +              "description": "LEDC_LSTIMER1_VALUE.",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LSTIMER1_CNT": {
    +                    "description": "reg_lstimer1_cnt.",
    +                    "offset": 0,
    +                    "size": 14,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "LSTIMER2_CONF": {
    +              "description": "LEDC_LSTIMER2_CONF.",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 8388608,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LSTIMER2_DUTY_RES": {
    +                    "description": "reg_lstimer2_duty_res.",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "CLK_DIV_LSTIMER2": {
    +                    "description": "reg_clk_div_lstimer2.",
    +                    "offset": 4,
    +                    "size": 18
    +                  },
    +                  "LSTIMER2_PAUSE": {
    +                    "description": "reg_lstimer2_pause.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "LSTIMER2_RST": {
    +                    "description": "reg_lstimer2_rst.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "TICK_SEL_LSTIMER2": {
    +                    "description": "reg_tick_sel_lstimer2.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "LSTIMER2_PARA_UP": {
    +                    "description": "reg_lstimer2_para_up.",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "LSTIMER2_VALUE": {
    +              "description": "LEDC_LSTIMER2_VALUE.",
    +              "offset": 180,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LSTIMER2_CNT": {
    +                    "description": "reg_lstimer2_cnt.",
    +                    "offset": 0,
    +                    "size": 14,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "LSTIMER3_CONF": {
    +              "description": "LEDC_LSTIMER3_CONF.",
    +              "offset": 184,
    +              "size": 32,
    +              "reset_value": 8388608,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LSTIMER3_DUTY_RES": {
    +                    "description": "reg_lstimer3_duty_res.",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "CLK_DIV_LSTIMER3": {
    +                    "description": "reg_clk_div_lstimer3.",
    +                    "offset": 4,
    +                    "size": 18
    +                  },
    +                  "LSTIMER3_PAUSE": {
    +                    "description": "reg_lstimer3_pause.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "LSTIMER3_RST": {
    +                    "description": "reg_lstimer3_rst.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "TICK_SEL_LSTIMER3": {
    +                    "description": "reg_tick_sel_lstimer3.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "LSTIMER3_PARA_UP": {
    +                    "description": "reg_lstimer3_para_up.",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "LSTIMER3_VALUE": {
    +              "description": "LEDC_LSTIMER3_VALUE.",
    +              "offset": 188,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LSTIMER3_CNT": {
    +                    "description": "reg_lstimer3_cnt.",
    +                    "offset": 0,
    +                    "size": 14,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_RAW": {
    +              "description": "LEDC_INT_RAW.",
    +              "offset": 192,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LSTIMER0_OVF_INT_RAW": {
    +                    "description": "reg_lstimer0_ovf_int_raw.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LSTIMER1_OVF_INT_RAW": {
    +                    "description": "reg_lstimer1_ovf_int_raw.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LSTIMER2_OVF_INT_RAW": {
    +                    "description": "reg_lstimer2_ovf_int_raw.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LSTIMER3_OVF_INT_RAW": {
    +                    "description": "reg_lstimer3_ovf_int_raw.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DUTY_CHNG_END_LSCH0_INT_RAW": {
    +                    "description": "reg_duty_chng_end_lsch0_int_raw.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DUTY_CHNG_END_LSCH1_INT_RAW": {
    +                    "description": "reg_duty_chng_end_lsch1_int_raw.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DUTY_CHNG_END_LSCH2_INT_RAW": {
    +                    "description": "reg_duty_chng_end_lsch2_int_raw.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DUTY_CHNG_END_LSCH3_INT_RAW": {
    +                    "description": "reg_duty_chng_end_lsch3_int_raw.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DUTY_CHNG_END_LSCH4_INT_RAW": {
    +                    "description": "reg_duty_chng_end_lsch4_int_raw.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DUTY_CHNG_END_LSCH5_INT_RAW": {
    +                    "description": "reg_duty_chng_end_lsch5_int_raw.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OVF_CNT_LSCH0_INT_RAW": {
    +                    "description": "reg_ovf_cnt_lsch0_int_raw.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OVF_CNT_LSCH1_INT_RAW": {
    +                    "description": "reg_ovf_cnt_lsch1_int_raw.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OVF_CNT_LSCH2_INT_RAW": {
    +                    "description": "reg_ovf_cnt_lsch2_int_raw.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OVF_CNT_LSCH3_INT_RAW": {
    +                    "description": "reg_ovf_cnt_lsch3_int_raw.",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OVF_CNT_LSCH4_INT_RAW": {
    +                    "description": "reg_ovf_cnt_lsch4_int_raw.",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OVF_CNT_LSCH5_INT_RAW": {
    +                    "description": "reg_ovf_cnt_lsch5_int_raw.",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ST": {
    +              "description": "LEDC_INT_ST.",
    +              "offset": 196,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LSTIMER0_OVF_INT_ST": {
    +                    "description": "reg_lstimer0_ovf_int_st.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LSTIMER1_OVF_INT_ST": {
    +                    "description": "reg_lstimer1_ovf_int_st.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LSTIMER2_OVF_INT_ST": {
    +                    "description": "reg_lstimer2_ovf_int_st.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "LSTIMER3_OVF_INT_ST": {
    +                    "description": "reg_lstimer3_ovf_int_st.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DUTY_CHNG_END_LSCH0_INT_ST": {
    +                    "description": "reg_duty_chng_end_lsch0_int_st.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DUTY_CHNG_END_LSCH1_INT_ST": {
    +                    "description": "reg_duty_chng_end_lsch1_int_st.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DUTY_CHNG_END_LSCH2_INT_ST": {
    +                    "description": "reg_duty_chng_end_lsch2_int_st.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DUTY_CHNG_END_LSCH3_INT_ST": {
    +                    "description": "reg_duty_chng_end_lsch3_int_st.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DUTY_CHNG_END_LSCH4_INT_ST": {
    +                    "description": "reg_duty_chng_end_lsch4_int_st.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DUTY_CHNG_END_LSCH5_INT_ST": {
    +                    "description": "reg_duty_chng_end_lsch5_int_st.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OVF_CNT_LSCH0_INT_ST": {
    +                    "description": "reg_ovf_cnt_lsch0_int_st.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OVF_CNT_LSCH1_INT_ST": {
    +                    "description": "reg_ovf_cnt_lsch1_int_st.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OVF_CNT_LSCH2_INT_ST": {
    +                    "description": "reg_ovf_cnt_lsch2_int_st.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OVF_CNT_LSCH3_INT_ST": {
    +                    "description": "reg_ovf_cnt_lsch3_int_st.",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OVF_CNT_LSCH4_INT_ST": {
    +                    "description": "reg_ovf_cnt_lsch4_int_st.",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OVF_CNT_LSCH5_INT_ST": {
    +                    "description": "reg_ovf_cnt_lsch5_int_st.",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ENA": {
    +              "description": "LEDC_INT_ENA.",
    +              "offset": 200,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LSTIMER0_OVF_INT_ENA": {
    +                    "description": "reg_lstimer0_ovf_int_ena.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "LSTIMER1_OVF_INT_ENA": {
    +                    "description": "reg_lstimer1_ovf_int_ena.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "LSTIMER2_OVF_INT_ENA": {
    +                    "description": "reg_lstimer2_ovf_int_ena.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "LSTIMER3_OVF_INT_ENA": {
    +                    "description": "reg_lstimer3_ovf_int_ena.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "DUTY_CHNG_END_LSCH0_INT_ENA": {
    +                    "description": "reg_duty_chng_end_lsch0_int_ena.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DUTY_CHNG_END_LSCH1_INT_ENA": {
    +                    "description": "reg_duty_chng_end_lsch1_int_ena.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "DUTY_CHNG_END_LSCH2_INT_ENA": {
    +                    "description": "reg_duty_chng_end_lsch2_int_ena.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "DUTY_CHNG_END_LSCH3_INT_ENA": {
    +                    "description": "reg_duty_chng_end_lsch3_int_ena.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "DUTY_CHNG_END_LSCH4_INT_ENA": {
    +                    "description": "reg_duty_chng_end_lsch4_int_ena.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DUTY_CHNG_END_LSCH5_INT_ENA": {
    +                    "description": "reg_duty_chng_end_lsch5_int_ena.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "OVF_CNT_LSCH0_INT_ENA": {
    +                    "description": "reg_ovf_cnt_lsch0_int_ena.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OVF_CNT_LSCH1_INT_ENA": {
    +                    "description": "reg_ovf_cnt_lsch1_int_ena.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "OVF_CNT_LSCH2_INT_ENA": {
    +                    "description": "reg_ovf_cnt_lsch2_int_ena.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "OVF_CNT_LSCH3_INT_ENA": {
    +                    "description": "reg_ovf_cnt_lsch3_int_ena.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "OVF_CNT_LSCH4_INT_ENA": {
    +                    "description": "reg_ovf_cnt_lsch4_int_ena.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "OVF_CNT_LSCH5_INT_ENA": {
    +                    "description": "reg_ovf_cnt_lsch5_int_ena.",
    +                    "offset": 15,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INT_CLR": {
    +              "description": "LEDC_INT_CLR.",
    +              "offset": 204,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LSTIMER0_OVF_INT_CLR": {
    +                    "description": "reg_lstimer0_ovf_int_clr.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "LSTIMER1_OVF_INT_CLR": {
    +                    "description": "reg_lstimer1_ovf_int_clr.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "LSTIMER2_OVF_INT_CLR": {
    +                    "description": "reg_lstimer2_ovf_int_clr.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "LSTIMER3_OVF_INT_CLR": {
    +                    "description": "reg_lstimer3_ovf_int_clr.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "DUTY_CHNG_END_LSCH0_INT_CLR": {
    +                    "description": "reg_duty_chng_end_lsch0_int_clr.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "DUTY_CHNG_END_LSCH1_INT_CLR": {
    +                    "description": "reg_duty_chng_end_lsch1_int_clr.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "DUTY_CHNG_END_LSCH2_INT_CLR": {
    +                    "description": "reg_duty_chng_end_lsch2_int_clr.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "DUTY_CHNG_END_LSCH3_INT_CLR": {
    +                    "description": "reg_duty_chng_end_lsch3_int_clr.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "DUTY_CHNG_END_LSCH4_INT_CLR": {
    +                    "description": "reg_duty_chng_end_lsch4_int_clr.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "DUTY_CHNG_END_LSCH5_INT_CLR": {
    +                    "description": "reg_duty_chng_end_lsch5_int_clr.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OVF_CNT_LSCH0_INT_CLR": {
    +                    "description": "reg_ovf_cnt_lsch0_int_clr.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OVF_CNT_LSCH1_INT_CLR": {
    +                    "description": "reg_ovf_cnt_lsch1_int_clr.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OVF_CNT_LSCH2_INT_CLR": {
    +                    "description": "reg_ovf_cnt_lsch2_int_clr.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OVF_CNT_LSCH3_INT_CLR": {
    +                    "description": "reg_ovf_cnt_lsch3_int_clr.",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OVF_CNT_LSCH4_INT_CLR": {
    +                    "description": "reg_ovf_cnt_lsch4_int_clr.",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OVF_CNT_LSCH5_INT_CLR": {
    +                    "description": "reg_ovf_cnt_lsch5_int_clr.",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CONF": {
    +              "description": "LEDC_CONF.",
    +              "offset": 208,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "APB_CLK_SEL": {
    +                    "description": "reg_apb_clk_sel.",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "CLK_EN": {
    +                    "description": "reg_clk_en.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DATE": {
    +              "description": "LEDC_DATE.",
    +              "offset": 252,
    +              "size": 32,
    +              "reset_value": 419829504,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LEDC_DATE": {
    +                    "description": "reg_ledc_date.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "RMT": {
    +        "description": "Remote Control Peripheral",
    +        "children": {
    +          "registers": {
    +            "CH0DATA": {
    +              "description": "RMT_CH0DATA_REG.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Reserved.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CH1DATA": {
    +              "description": "RMT_CH1DATA_REG.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Reserved.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CH2DATA": {
    +              "description": "RMT_CH2DATA_REG.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Reserved.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CH3DATA": {
    +              "description": "RMT_CH3DATA_REG.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "Reserved.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CH2CONF1": {
    +              "description": "RMT_CH2CONF1_REG.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 488,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_EN": {
    +                    "description": "reg_rx_en_ch2.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MEM_WR_RST": {
    +                    "description": "reg_mem_wr_rst_ch2.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "APB_MEM_RST": {
    +                    "description": "reg_apb_mem_rst_ch2.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "MEM_OWNER": {
    +                    "description": "reg_mem_owner_ch2.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RX_FILTER_EN": {
    +                    "description": "reg_rx_filter_en_ch2.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RX_FILTER_THRES": {
    +                    "description": "reg_rx_filter_thres_ch2.",
    +                    "offset": 5,
    +                    "size": 8
    +                  },
    +                  "MEM_RX_WRAP_EN": {
    +                    "description": "reg_mem_rx_wrap_en_ch2.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "AFIFO_RST": {
    +                    "description": "reg_afifo_rst_ch2.",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CONF_UPDATE": {
    +                    "description": "reg_conf_update_ch2.",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CH3CONF1": {
    +              "description": "RMT_CH3CONF1_REG.",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 488,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_EN": {
    +                    "description": "reg_rx_en_ch3.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MEM_WR_RST": {
    +                    "description": "reg_mem_wr_rst_ch3.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "APB_MEM_RST": {
    +                    "description": "reg_apb_mem_rst_ch3.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "MEM_OWNER": {
    +                    "description": "reg_mem_owner_ch3.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RX_FILTER_EN": {
    +                    "description": "reg_rx_filter_en_ch3.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RX_FILTER_THRES": {
    +                    "description": "reg_rx_filter_thres_ch3.",
    +                    "offset": 5,
    +                    "size": 8
    +                  },
    +                  "MEM_RX_WRAP_EN": {
    +                    "description": "reg_mem_rx_wrap_en_ch3.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "AFIFO_RST": {
    +                    "description": "reg_afifo_rst_ch3.",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CONF_UPDATE": {
    +                    "description": "reg_conf_update_ch3.",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CH0STATUS": {
    +              "description": "RMT_CH0STATUS_REG.",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MEM_RADDR_EX": {
    +                    "description": "reg_mem_raddr_ex_ch0.",
    +                    "offset": 0,
    +                    "size": 9,
    +                    "access": "read-only"
    +                  },
    +                  "STATE": {
    +                    "description": "reg_state_ch0.",
    +                    "offset": 9,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "APB_MEM_WADDR": {
    +                    "description": "reg_apb_mem_waddr_ch0.",
    +                    "offset": 12,
    +                    "size": 9,
    +                    "access": "read-only"
    +                  },
    +                  "APB_MEM_RD_ERR": {
    +                    "description": "reg_apb_mem_rd_err_ch0.",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MEM_EMPTY": {
    +                    "description": "reg_mem_empty_ch0.",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "APB_MEM_WR_ERR": {
    +                    "description": "reg_apb_mem_wr_err_ch0.",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "APB_MEM_RADDR": {
    +                    "description": "reg_apb_mem_raddr_ch0.",
    +                    "offset": 24,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CH1STATUS": {
    +              "description": "RMT_CH1STATUS_REG.",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MEM_RADDR_EX": {
    +                    "description": "reg_mem_raddr_ex_ch1.",
    +                    "offset": 0,
    +                    "size": 9,
    +                    "access": "read-only"
    +                  },
    +                  "STATE": {
    +                    "description": "reg_state_ch1.",
    +                    "offset": 9,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "APB_MEM_WADDR": {
    +                    "description": "reg_apb_mem_waddr_ch1.",
    +                    "offset": 12,
    +                    "size": 9,
    +                    "access": "read-only"
    +                  },
    +                  "APB_MEM_RD_ERR": {
    +                    "description": "reg_apb_mem_rd_err_ch1.",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MEM_EMPTY": {
    +                    "description": "reg_mem_empty_ch1.",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "APB_MEM_WR_ERR": {
    +                    "description": "reg_apb_mem_wr_err_ch1.",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "APB_MEM_RADDR": {
    +                    "description": "reg_apb_mem_raddr_ch1.",
    +                    "offset": 24,
    +                    "size": 8,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CH2STATUS": {
    +              "description": "RMT_CH2STATUS_REG.",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MEM_WADDR_EX": {
    +                    "description": "reg_mem_waddr_ex_ch2.",
    +                    "offset": 0,
    +                    "size": 9,
    +                    "access": "read-only"
    +                  },
    +                  "APB_MEM_RADDR": {
    +                    "description": "reg_apb_mem_raddr_ch2.",
    +                    "offset": 12,
    +                    "size": 9,
    +                    "access": "read-only"
    +                  },
    +                  "STATE": {
    +                    "description": "reg_state_ch2.",
    +                    "offset": 22,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "MEM_OWNER_ERR": {
    +                    "description": "reg_mem_owner_err_ch2.",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MEM_FULL": {
    +                    "description": "reg_mem_full_ch2.",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "APB_MEM_RD_ERR": {
    +                    "description": "reg_apb_mem_rd_err_ch2.",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CH3STATUS": {
    +              "description": "RMT_CH3STATUS_REG.",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MEM_WADDR_EX": {
    +                    "description": "reg_mem_waddr_ex_ch3.",
    +                    "offset": 0,
    +                    "size": 9,
    +                    "access": "read-only"
    +                  },
    +                  "APB_MEM_RADDR": {
    +                    "description": "reg_apb_mem_raddr_ch3.",
    +                    "offset": 12,
    +                    "size": 9,
    +                    "access": "read-only"
    +                  },
    +                  "STATE": {
    +                    "description": "reg_state_ch3.",
    +                    "offset": 22,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "MEM_OWNER_ERR": {
    +                    "description": "reg_mem_owner_err_ch3.",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MEM_FULL": {
    +                    "description": "reg_mem_full_ch3.",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "APB_MEM_RD_ERR": {
    +                    "description": "reg_apb_mem_rd_err_ch3.",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_RAW": {
    +              "description": "RMT_INT_RAW_REG.",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH2_RX_THR_EVENT_INT_RAW": {
    +                    "description": "reg_ch2_rx_thr_event_int_raw.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CH3_RX_THR_EVENT_INT_RAW": {
    +                    "description": "reg_ch3_rx_thr_event_int_raw.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ST": {
    +              "description": "RMT_INT_ST_REG.",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH2_RX_THR_EVENT_INT_ST": {
    +                    "description": "reg_ch2_rx_thr_event_int_st.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CH3_RX_THR_EVENT_INT_ST": {
    +                    "description": "reg_ch3_rx_thr_event_int_st.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ENA": {
    +              "description": "RMT_INT_ENA_REG.",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH2_RX_THR_EVENT_INT_ENA": {
    +                    "description": "reg_ch2_rx_thr_event_int_ena.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CH3_RX_THR_EVENT_INT_ENA": {
    +                    "description": "reg_ch3_rx_thr_event_int_ena.",
    +                    "offset": 11,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INT_CLR": {
    +              "description": "RMT_INT_CLR_REG.",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH2_RX_THR_EVENT_INT_CLR": {
    +                    "description": "reg_ch2_rx_thr_event_int_clr.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CH3_RX_THR_EVENT_INT_CLR": {
    +                    "description": "reg_ch3_rx_thr_event_int_clr.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CH0CARRIER_DUTY": {
    +              "description": "RMT_CH0CARRIER_DUTY_REG.",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 4194368,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CARRIER_LOW": {
    +                    "description": "reg_carrier_low_ch0.",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "CARRIER_HIGH": {
    +                    "description": "reg_carrier_high_ch0.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH1CARRIER_DUTY": {
    +              "description": "RMT_CH1CARRIER_DUTY_REG.",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 4194368,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CARRIER_LOW": {
    +                    "description": "reg_carrier_low_ch1.",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "CARRIER_HIGH": {
    +                    "description": "reg_carrier_high_ch1.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH2_RX_CARRIER_RM": {
    +              "description": "RMT_CH2_RX_CARRIER_RM_REG.",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CARRIER_LOW_THRES": {
    +                    "description": "reg_carrier_low_thres_ch2.",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "CARRIER_HIGH_THRES": {
    +                    "description": "reg_carrier_high_thres_ch2.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "CH3_RX_CARRIER_RM": {
    +              "description": "RMT_CH3_RX_CARRIER_RM_REG.",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CARRIER_LOW_THRES": {
    +                    "description": "reg_carrier_low_thres_ch3.",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "CARRIER_HIGH_THRES": {
    +                    "description": "reg_carrier_high_thres_ch3.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SYS_CONF": {
    +              "description": "RMT_SYS_CONF_REG.",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 83886096,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "APB_FIFO_MASK": {
    +                    "description": "reg_apb_fifo_mask.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MEM_CLK_FORCE_ON": {
    +                    "description": "reg_mem_clk_force_on.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MEM_FORCE_PD": {
    +                    "description": "reg_rmt_mem_force_pd.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "MEM_FORCE_PU": {
    +                    "description": "reg_rmt_mem_force_pu.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SCLK_DIV_NUM": {
    +                    "description": "reg_rmt_sclk_div_num.",
    +                    "offset": 4,
    +                    "size": 8
    +                  },
    +                  "SCLK_DIV_A": {
    +                    "description": "reg_rmt_sclk_div_a.",
    +                    "offset": 12,
    +                    "size": 6
    +                  },
    +                  "SCLK_DIV_B": {
    +                    "description": "reg_rmt_sclk_div_b.",
    +                    "offset": 18,
    +                    "size": 6
    +                  },
    +                  "SCLK_SEL": {
    +                    "description": "reg_rmt_sclk_sel.",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "SCLK_ACTIVE": {
    +                    "description": "reg_rmt_sclk_active.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "CLK_EN": {
    +                    "description": "reg_clk_en.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TX_SIM": {
    +              "description": "RMT_TX_SIM_REG.",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_SIM_CH0": {
    +                    "description": "reg_rmt_tx_sim_ch0.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TX_SIM_CH1": {
    +                    "description": "reg_rmt_tx_sim_ch1.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TX_SIM_EN": {
    +                    "description": "reg_rmt_tx_sim_en.",
    +                    "offset": 2,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "REF_CNT_RST": {
    +              "description": "RMT_REF_CNT_RST_REG.",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CH0": {
    +                    "description": "reg_ref_cnt_rst_ch0.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CH1": {
    +                    "description": "reg_ref_cnt_rst_ch1.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CH2": {
    +                    "description": "reg_ref_cnt_rst_ch2.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CH3": {
    +                    "description": "reg_ref_cnt_rst_ch3.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DATE": {
    +              "description": "RMT_DATE_REG.",
    +              "offset": 204,
    +              "size": 32,
    +              "reset_value": 33579569,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATE": {
    +                    "description": "reg_rmt_date.",
    +                    "offset": 0,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "RNG": {
    +        "description": "Hardware random number generator",
    +        "children": {
    +          "registers": {
    +            "DATA": {
    +              "description": "Random number data",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            }
    +          }
    +        }
    +      },
    +      "RSA": {
    +        "description": "RSA (Rivest Shamir Adleman) Accelerator",
    +        "children": {
    +          "registers": {
    +            "M_MEM": {
    +              "description": "The memory that stores M",
    +              "offset": 0,
    +              "size": 8,
    +              "count": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "Z_MEM": {
    +              "description": "The memory that stores Z",
    +              "offset": 512,
    +              "size": 8,
    +              "count": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "Y_MEM": {
    +              "description": "The memory that stores Y",
    +              "offset": 1024,
    +              "size": 8,
    +              "count": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "X_MEM": {
    +              "description": "The memory that stores X",
    +              "offset": 1536,
    +              "size": 8,
    +              "count": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "M_PRIME": {
    +              "description": "RSA M_prime register",
    +              "offset": 2048,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "M_PRIME": {
    +                    "description": "Those bits stores m'",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "MODE": {
    +              "description": "RSA mode register",
    +              "offset": 2052,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MODE": {
    +                    "description": "rsa mode (rsa length).",
    +                    "offset": 0,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "QUERY_CLEAN": {
    +              "description": "RSA query clean register",
    +              "offset": 2056,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "QUERY_CLEAN": {
    +                    "description": "query clean",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SET_START_MODEXP": {
    +              "description": "RSA modular exponentiation trigger register.",
    +              "offset": 2060,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SET_START_MODEXP": {
    +                    "description": "start modular exponentiation",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SET_START_MODMULT": {
    +              "description": "RSA modular multiplication trigger register.",
    +              "offset": 2064,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SET_START_MODMULT": {
    +                    "description": "start modular multiplication",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SET_START_MULT": {
    +              "description": "RSA normal multiplication trigger register.",
    +              "offset": 2068,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SET_START_MULT": {
    +                    "description": "start multiplicaiton",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "QUERY_IDLE": {
    +              "description": "RSA query idle register",
    +              "offset": 2072,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "QUERY_IDLE": {
    +                    "description": "query rsa idle. 1'b0: busy, 1'b1: idle",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_CLR": {
    +              "description": "RSA interrupt clear register",
    +              "offset": 2076,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLEAR_INTERRUPT": {
    +                    "description": "set this bit to clear RSA interrupt.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CONSTANT_TIME": {
    +              "description": "RSA constant time option register",
    +              "offset": 2080,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CONSTANT_TIME": {
    +                    "description": "Configure this bit to 0 for acceleration. 0: with acceleration, 1: without acceleration(defalut).",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SEARCH_ENABLE": {
    +              "description": "RSA search option",
    +              "offset": 2084,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SEARCH_ENABLE": {
    +                    "description": "Configure this bit to 1 for acceleration. 1: with acceleration, 0: without acceleration(default). This option should be used together with RSA_SEARCH_POS.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SEARCH_POS": {
    +              "description": "RSA search position configure register",
    +              "offset": 2088,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SEARCH_POS": {
    +                    "description": "Configure this field to set search position. This field should be used together with RSA_SEARCH_ENABLE. The field is only meaningful when RSA_SEARCH_ENABLE is high.",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ENA": {
    +              "description": "RSA interrupt enable register",
    +              "offset": 2092,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INT_ENA": {
    +                    "description": "Set this bit to enable interrupt that occurs when rsa calculation is done. 1'b0: disable, 1'b1: enable(default).",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DATE": {
    +              "description": "RSA version control register",
    +              "offset": 2096,
    +              "size": 32,
    +              "reset_value": 538969624,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATE": {
    +                    "description": "rsa version information",
    +                    "offset": 0,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "RTC_CNTL": {
    +        "description": "Real-Time Clock Control",
    +        "children": {
    +          "registers": {
    +            "OPTIONS0": {
    +              "description": "rtc configure register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 469803008,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SW_STALL_APPCPU_C0": {
    +                    "description": "{reg_sw_stall_appcpu_c1[5:0],  reg_sw_stall_appcpu_c0[1:0]} == 0x86 will stall APP CPU",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "SW_STALL_PROCPU_C0": {
    +                    "description": "{reg_sw_stall_procpu_c1[5:0],  reg_sw_stall_procpu_c0[1:0]} == 0x86 will stall PRO CPU",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "SW_APPCPU_RST": {
    +                    "description": "APP CPU SW reset",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SW_PROCPU_RST": {
    +                    "description": "PRO CPU SW reset",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "BB_I2C_FORCE_PD": {
    +                    "description": "BB_I2C force power down",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BB_I2C_FORCE_PU": {
    +                    "description": "BB_I2C force power up",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "BBPLL_I2C_FORCE_PD": {
    +                    "description": "BB_PLL _I2C force power down",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BBPLL_I2C_FORCE_PU": {
    +                    "description": "BB_PLL_I2C force power up",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "BBPLL_FORCE_PD": {
    +                    "description": "BB_PLL force power down",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "BBPLL_FORCE_PU": {
    +                    "description": "BB_PLL force power up",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "XTL_FORCE_PD": {
    +                    "description": "crystall force power down",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "XTL_FORCE_PU": {
    +                    "description": "crystall force power up",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "XTL_EN_WAIT": {
    +                    "description": "wait bias_sleep and current source wakeup",
    +                    "offset": 14,
    +                    "size": 4
    +                  },
    +                  "XTL_EXT_CTR_SEL": {
    +                    "description": "analog configure",
    +                    "offset": 20,
    +                    "size": 3
    +                  },
    +                  "XTL_FORCE_ISO": {
    +                    "description": "analog configure",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "PLL_FORCE_ISO": {
    +                    "description": "analog configure",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "ANALOG_FORCE_ISO": {
    +                    "description": "analog configure",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "XTL_FORCE_NOISO": {
    +                    "description": "analog configure",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "PLL_FORCE_NOISO": {
    +                    "description": "analog configure",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "ANALOG_FORCE_NOISO": {
    +                    "description": "analog configure",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "DG_WRAP_FORCE_RST": {
    +                    "description": "digital wrap force reset in deep sleep",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DG_WRAP_FORCE_NORST": {
    +                    "description": "digital core force no reset in deep sleep",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SW_SYS_RST": {
    +                    "description": "SW system reset",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SLP_TIMER0": {
    +              "description": "rtc configure register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SLP_VAL_LO": {
    +                    "description": "configure the  sleep time",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "SLP_TIMER1": {
    +              "description": "rtc configure register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SLP_VAL_HI": {
    +                    "description": "RTC sleep timer high 16 bits",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "RTC_MAIN_TIMER_ALARM_EN": {
    +                    "description": "timer alarm enable bit",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "TIME_UPDATE": {
    +              "description": "rtc configure register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_SYS_STALL": {
    +                    "description": "Enable to record system stall time",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "TIMER_XTL_OFF": {
    +                    "description": "Enable to record 40M XTAL OFF time",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "TIMER_SYS_RST": {
    +                    "description": "enable to record system reset time",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "RTC_TIME_UPDATE": {
    +                    "description": "Set 1: to update register with RTC timer",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "TIME_LOW0": {
    +              "description": "rtc configure register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_TIMER_VALUE0_LOW": {
    +                    "description": "RTC timer low 32 bits",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "TIME_HIGH0": {
    +              "description": "rtc configure register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_TIMER_VALUE0_HIGH": {
    +                    "description": "RTC timer high 16 bits",
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "STATE0": {
    +              "description": "rtc configure register",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_SW_CPU_INT": {
    +                    "description": "rtc software interrupt to main cpu",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RTC_SLP_REJECT_CAUSE_CLR": {
    +                    "description": "clear rtc sleep reject cause",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "APB2RTC_BRIDGE_SEL": {
    +                    "description": "1: APB to RTC using bridge",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "SDIO_ACTIVE_IND": {
    +                    "description": "SDIO active indication",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SLP_WAKEUP": {
    +                    "description": "leep wakeup bit",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "SLP_REJECT": {
    +                    "description": "leep reject bit",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SLEEP_EN": {
    +                    "description": "sleep enable bit",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TIMER1": {
    +              "description": "rtc configure register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 672400387,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_STALL_EN": {
    +                    "description": "CPU stall enable bit",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CPU_STALL_WAIT": {
    +                    "description": "CPU stall wait cycles in fast_clk_rtc",
    +                    "offset": 1,
    +                    "size": 5
    +                  },
    +                  "CK8M_WAIT": {
    +                    "description": "CK8M wait cycles in slow_clk_rtc",
    +                    "offset": 6,
    +                    "size": 8
    +                  },
    +                  "XTL_BUF_WAIT": {
    +                    "description": "XTAL wait cycles in slow_clk_rtc",
    +                    "offset": 14,
    +                    "size": 10
    +                  },
    +                  "PLL_BUF_WAIT": {
    +                    "description": "PLL wait cycles in slow_clk_rtc",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TIMER2": {
    +              "description": "rtc configure register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 16777216,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MIN_TIME_CK8M_OFF": {
    +                    "description": "minimal cycles in slow_clk_rtc for CK8M in power down state",
    +                    "offset": 24,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TIMER3": {
    +              "description": "rtc configure register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 168299016,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WIFI_WAIT_TIMER": {
    +                    "description": "wifi power domain wakeup time",
    +                    "offset": 0,
    +                    "size": 9
    +                  },
    +                  "WIFI_POWERUP_TIMER": {
    +                    "description": "wifi power domain power on time",
    +                    "offset": 9,
    +                    "size": 7
    +                  },
    +                  "BT_WAIT_TIMER": {
    +                    "description": "bt power domain wakeup time",
    +                    "offset": 16,
    +                    "size": 9
    +                  },
    +                  "BT_POWERUP_TIMER": {
    +                    "description": "bt power domain power on time",
    +                    "offset": 25,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "TIMER4": {
    +              "description": "rtc configure register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 270535176,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_TOP_WAIT_TIMER": {
    +                    "description": "cpu top power domain wakeup time",
    +                    "offset": 0,
    +                    "size": 9
    +                  },
    +                  "CPU_TOP_POWERUP_TIMER": {
    +                    "description": "cpu top power domain power on time",
    +                    "offset": 9,
    +                    "size": 7
    +                  },
    +                  "DG_WRAP_WAIT_TIMER": {
    +                    "description": "digital wrap power domain wakeup time",
    +                    "offset": 16,
    +                    "size": 9
    +                  },
    +                  "DG_WRAP_POWERUP_TIMER": {
    +                    "description": "digital wrap power domain power on time",
    +                    "offset": 25,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "TIMER5": {
    +              "description": "rtc configure register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 32768,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MIN_SLP_VAL": {
    +                    "description": "minimal sleep cycles in slow_clk_rtc",
    +                    "offset": 8,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TIMER6": {
    +              "description": "rtc configure register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 168296448,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DG_PERI_WAIT_TIMER": {
    +                    "description": "digital peri power domain wakeup time",
    +                    "offset": 16,
    +                    "size": 9
    +                  },
    +                  "DG_PERI_POWERUP_TIMER": {
    +                    "description": "digital peri power domain power on time",
    +                    "offset": 25,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "ANA_CONF": {
    +              "description": "rtc configure register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 12845056,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESET_POR_FORCE_PD": {
    +                    "description": "force no bypass i2c power on reset",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "RESET_POR_FORCE_PU": {
    +                    "description": "force bypass i2c power on reset",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "GLITCH_RST_EN": {
    +                    "description": "enable glitch reset",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "SAR_I2C_PU": {
    +                    "description": "PLLA force power up",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "PLLA_FORCE_PD": {
    +                    "description": "PLLA force power down",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "PLLA_FORCE_PU": {
    +                    "description": "PLLA force power up",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "BBPLL_CAL_SLP_START": {
    +                    "description": "start BBPLL calibration during sleep",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "PVTMON_PU": {
    +                    "description": "1: PVTMON power up",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "TXRF_I2C_PU": {
    +                    "description": "1: TXRF_I2C power up",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "RFRX_PBUS_PU": {
    +                    "description": "1: RFRX_PBUS power up",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "CKGEN_I2C_PU": {
    +                    "description": "1: CKGEN_I2C power up",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "PLL_I2C_PU": {
    +                    "description": "power up pll i2c",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RESET_STATE": {
    +              "description": "rtc configure register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 12288,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESET_CAUSE_PROCPU": {
    +                    "description": "reset cause of PRO CPU",
    +                    "offset": 0,
    +                    "size": 6,
    +                    "access": "read-only"
    +                  },
    +                  "RESET_CAUSE_APPCPU": {
    +                    "description": "reset cause of APP CPU",
    +                    "offset": 6,
    +                    "size": 6,
    +                    "access": "read-only"
    +                  },
    +                  "STAT_VECTOR_SEL_APPCPU": {
    +                    "description": "APP CPU state vector sel",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "STAT_VECTOR_SEL_PROCPU": {
    +                    "description": "PRO CPU state vector sel",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "ALL_RESET_FLAG_PROCPU": {
    +                    "description": "PRO CPU reset_flag",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ALL_RESET_FLAG_APPCPU": {
    +                    "description": "APP CPU reset flag",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ALL_RESET_FLAG_CLR_PROCPU": {
    +                    "description": "clear PRO CPU reset_flag",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "ALL_RESET_FLAG_CLR_APPCPU": {
    +                    "description": "clear APP CPU reset flag",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OCD_HALT_ON_RESET_APPCPU": {
    +                    "description": "APPCPU OcdHaltOnReset",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "OCD_HALT_ON_RESET_PROCPU": {
    +                    "description": "PROCPU OcdHaltOnReset",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "JTAG_RESET_FLAG_PROCPU": {
    +                    "description": "configure jtag reset configure",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "JTAG_RESET_FLAG_APPCPU": {
    +                    "description": "configure jtag reset configure",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "JTAG_RESET_FLAG_CLR_PROCPU": {
    +                    "description": "configure jtag reset configure",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "JTAG_RESET_FLAG_CLR_APPCPU": {
    +                    "description": "configure jtag reset configure",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RTC_DRESET_MASK_APPCPU": {
    +                    "description": "configure dreset configure",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "RTC_DRESET_MASK_PROCPU": {
    +                    "description": "configure dreset configure",
    +                    "offset": 25,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "WAKEUP_STATE": {
    +              "description": "rtc configure register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 393216,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_WAKEUP_ENA": {
    +                    "description": "wakeup enable bitmap",
    +                    "offset": 15,
    +                    "size": 17
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ENA_RTC": {
    +              "description": "rtc configure register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SLP_WAKEUP_INT_ENA": {
    +                    "description": "enable sleep wakeup interrupt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SLP_REJECT_INT_ENA": {
    +                    "description": "enable sleep reject interrupt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RTC_WDT_INT_ENA": {
    +                    "description": "enable RTC WDT interrupt",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RTC_BROWN_OUT_INT_ENA": {
    +                    "description": "enable brown out interrupt",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "RTC_MAIN_TIMER_INT_ENA": {
    +                    "description": "enable RTC main timer interrupt",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "RTC_SWD_INT_ENA": {
    +                    "description": "enable super watch dog interrupt",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "RTC_XTAL32K_DEAD_INT_ENA": {
    +                    "description": "enable xtal32k_dead  interrupt",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RTC_GLITCH_DET_INT_ENA": {
    +                    "description": "enbale gitch det interrupt",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "RTC_BBPLL_CAL_INT_ENA": {
    +                    "description": "enbale bbpll cal end interrupt",
    +                    "offset": 20,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INT_RAW_RTC": {
    +              "description": "rtc configure register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SLP_WAKEUP_INT_RAW": {
    +                    "description": "sleep wakeup interrupt raw",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SLP_REJECT_INT_RAW": {
    +                    "description": "sleep reject interrupt raw",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_WDT_INT_RAW": {
    +                    "description": "RTC WDT interrupt raw",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_BROWN_OUT_INT_RAW": {
    +                    "description": "brown out interrupt raw",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_MAIN_TIMER_INT_RAW": {
    +                    "description": "RTC main timer interrupt raw",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_SWD_INT_RAW": {
    +                    "description": "super watch dog interrupt raw",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_XTAL32K_DEAD_INT_RAW": {
    +                    "description": "xtal32k dead detection interrupt raw",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_GLITCH_DET_INT_RAW": {
    +                    "description": "glitch_det_interrupt_raw",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_BBPLL_CAL_INT_RAW": {
    +                    "description": "bbpll cal end interrupt state",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ST_RTC": {
    +              "description": "rtc configure register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SLP_WAKEUP_INT_ST": {
    +                    "description": "sleep wakeup interrupt state",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SLP_REJECT_INT_ST": {
    +                    "description": "sleep reject interrupt state",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_WDT_INT_ST": {
    +                    "description": "RTC WDT interrupt state",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_BROWN_OUT_INT_ST": {
    +                    "description": "brown out interrupt state",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_MAIN_TIMER_INT_ST": {
    +                    "description": "RTC main timer interrupt state",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_SWD_INT_ST": {
    +                    "description": "super watch dog interrupt state",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_XTAL32K_DEAD_INT_ST": {
    +                    "description": "xtal32k dead detection interrupt state",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_GLITCH_DET_INT_ST": {
    +                    "description": "glitch_det_interrupt state",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_BBPLL_CAL_INT_ST": {
    +                    "description": "bbpll cal end interrupt state",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_CLR_RTC": {
    +              "description": "rtc configure register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SLP_WAKEUP_INT_CLR": {
    +                    "description": "Clear sleep wakeup interrupt state",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SLP_REJECT_INT_CLR": {
    +                    "description": "Clear sleep reject interrupt state",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RTC_WDT_INT_CLR": {
    +                    "description": "Clear RTC WDT interrupt state",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RTC_BROWN_OUT_INT_CLR": {
    +                    "description": "Clear brown out interrupt state",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RTC_MAIN_TIMER_INT_CLR": {
    +                    "description": "Clear RTC main timer interrupt state",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RTC_SWD_INT_CLR": {
    +                    "description": "Clear super watch dog interrupt state",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RTC_XTAL32K_DEAD_INT_CLR": {
    +                    "description": "Clear RTC WDT interrupt state",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RTC_GLITCH_DET_INT_CLR": {
    +                    "description": "Clear glitch det interrupt state",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RTC_BBPLL_CAL_INT_CLR": {
    +                    "description": "clear bbpll cal end interrupt state",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "STORE0": {
    +              "description": "rtc configure register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_SCRATCH0": {
    +                    "description": "reserved register",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "STORE1": {
    +              "description": "rtc configure register",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_SCRATCH1": {
    +                    "description": "reserved register",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "STORE2": {
    +              "description": "rtc configure register",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_SCRATCH2": {
    +                    "description": "reserved register",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "STORE3": {
    +              "description": "rtc configure register",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_SCRATCH3": {
    +                    "description": "reserved register",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "EXT_XTL_CONF": {
    +              "description": "rtc configure register",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 420992,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XTAL32K_WDT_EN": {
    +                    "description": "xtal 32k watch dog enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "XTAL32K_WDT_CLK_FO": {
    +                    "description": "xtal 32k watch dog clock force on",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "XTAL32K_WDT_RESET": {
    +                    "description": "xtal 32k watch dog sw reset",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "XTAL32K_EXT_CLK_FO": {
    +                    "description": "xtal 32k external xtal clock force on",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "XTAL32K_AUTO_BACKUP": {
    +                    "description": "xtal 32k switch to back up clock when xtal is dead",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "XTAL32K_AUTO_RESTART": {
    +                    "description": "xtal 32k restart xtal when xtal is dead",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "XTAL32K_AUTO_RETURN": {
    +                    "description": "xtal 32k switch back xtal when xtal is restarted",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "XTAL32K_XPD_FORCE": {
    +                    "description": "Xtal 32k xpd control by sw or fsm",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "ENCKINIT_XTAL_32K": {
    +                    "description": "apply an internal clock to help xtal 32k to start",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DBUF_XTAL_32K": {
    +                    "description": "0: single-end buffer 1: differential buffer",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DGM_XTAL_32K": {
    +                    "description": "xtal_32k gm control",
    +                    "offset": 10,
    +                    "size": 3
    +                  },
    +                  "DRES_XTAL_32K": {
    +                    "description": "DRES_XTAL_32K",
    +                    "offset": 13,
    +                    "size": 3
    +                  },
    +                  "XPD_XTAL_32K": {
    +                    "description": "XPD_XTAL_32K",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "DAC_XTAL_32K": {
    +                    "description": "DAC_XTAL_32K",
    +                    "offset": 17,
    +                    "size": 3
    +                  },
    +                  "RTC_WDT_STATE": {
    +                    "description": "state of 32k_wdt",
    +                    "offset": 20,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_XTAL32K_GPIO_SEL": {
    +                    "description": "XTAL_32K sel. 0: external XTAL_32K",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "XTL_EXT_CTR_LV": {
    +                    "description": "0: power down XTAL at high level",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "XTL_EXT_CTR_EN": {
    +                    "description": "enable gpio configure xtal power on",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EXT_WAKEUP_CONF": {
    +              "description": "rtc configure register",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "GPIO_WAKEUP_FILTER": {
    +                    "description": "enable filter for gpio wakeup event",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SLP_REJECT_CONF": {
    +              "description": "rtc configure register",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_SLEEP_REJECT_ENA": {
    +                    "description": "sleep reject enable",
    +                    "offset": 12,
    +                    "size": 18
    +                  },
    +                  "LIGHT_SLP_REJECT_EN": {
    +                    "description": "enable reject for light sleep",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "DEEP_SLP_REJECT_EN": {
    +                    "description": "enable reject for deep sleep",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_PERIOD_CONF": {
    +              "description": "rtc configure register",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_CPUSEL_CONF": {
    +                    "description": "CPU sel option",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "RTC_CPUPERIOD_SEL": {
    +                    "description": "CPU clk sel option",
    +                    "offset": 30,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CLK_CONF": {
    +              "description": "rtc configure register",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 290992664,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EFUSE_CLK_FORCE_GATING": {
    +                    "description": "efuse_clk_force_gating",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EFUSE_CLK_FORCE_NOGATING": {
    +                    "description": "efuse_clk_force_nogating",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CK8M_DIV_SEL_VLD": {
    +                    "description": "used to sync reg_ck8m_div_sel bus. Clear vld before set reg_ck8m_div_sel",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CK8M_DIV": {
    +                    "description": "CK8M_D256_OUT divider. 00: div128",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "ENB_CK8M": {
    +                    "description": "disable CK8M and CK8M_D256_OUT",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "ENB_CK8M_DIV": {
    +                    "description": "1: CK8M_D256_OUT is actually CK8M",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "DIG_XTAL32K_EN": {
    +                    "description": "enable CK_XTAL_32K for digital core (no relationship with RTC core)",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DIG_CLK8M_D256_EN": {
    +                    "description": "enable CK8M_D256_OUT for digital core (no relationship with RTC core)",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DIG_CLK8M_EN": {
    +                    "description": "enable CK8M for digital core (no relationship with RTC core)",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CK8M_DIV_SEL": {
    +                    "description": "divider = reg_ck8m_div_sel + 1",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "XTAL_FORCE_NOGATING": {
    +                    "description": "XTAL force no gating during sleep",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "CK8M_FORCE_NOGATING": {
    +                    "description": "CK8M force no gating during sleep",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "CK8M_DFREQ": {
    +                    "description": "CK8M_DFREQ",
    +                    "offset": 17,
    +                    "size": 8
    +                  },
    +                  "CK8M_FORCE_PD": {
    +                    "description": "CK8M force power down",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "CK8M_FORCE_PU": {
    +                    "description": "CK8M force power up",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "XTAL_GLOBAL_FORCE_GATING": {
    +                    "description": "force enable xtal clk gating",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "XTAL_GLOBAL_FORCE_NOGATING": {
    +                    "description": "force bypass xtal clk gating",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FAST_CLK_RTC_SEL": {
    +                    "description": "fast_clk_rtc sel. 0: XTAL div 4",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "ANA_CLK_RTC_SEL": {
    +                    "description": "slelect rtc slow clk",
    +                    "offset": 30,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "SLOW_CLK_CONF": {
    +              "description": "rtc configure register",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 4194304,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_ANA_CLK_DIV_VLD": {
    +                    "description": "used to sync div bus. clear vld before set reg_rtc_ana_clk_div",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "RTC_ANA_CLK_DIV": {
    +                    "description": "the clk divider num of RTC_CLK",
    +                    "offset": 23,
    +                    "size": 8
    +                  },
    +                  "RTC_SLOW_CLK_NEXT_EDGE": {
    +                    "description": "flag rtc_slow_clk_next_edge",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SDIO_CONF": {
    +              "description": "rtc configure register",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 179355146,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SDIO_TIMER_TARGET": {
    +                    "description": "timer count to apply reg_sdio_dcap after sdio power on",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "SDIO_DTHDRV": {
    +                    "description": "Tieh = 1 mode drive ability. Initially set to 0 to limit charge current",
    +                    "offset": 9,
    +                    "size": 2
    +                  },
    +                  "SDIO_DCAP": {
    +                    "description": "ability to prevent LDO from overshoot",
    +                    "offset": 11,
    +                    "size": 2
    +                  },
    +                  "SDIO_INITI": {
    +                    "description": "add resistor from ldo output to ground. 0: no res",
    +                    "offset": 13,
    +                    "size": 2
    +                  },
    +                  "SDIO_EN_INITI": {
    +                    "description": "0 to set init[1:0]=0",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "SDIO_DCURLIM": {
    +                    "description": "tune current limit threshold when tieh = 0. About 800mA/(8+d)",
    +                    "offset": 16,
    +                    "size": 3
    +                  },
    +                  "SDIO_MODECURLIM": {
    +                    "description": "select current limit mode",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "SDIO_ENCURLIM": {
    +                    "description": "enable current limit",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "SDIO_REG_PD_EN": {
    +                    "description": "power down SDIO_REG in sleep. Only active when reg_sdio_force = 0",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "SDIO_FORCE": {
    +                    "description": "1: use SW option to control SDIO_REG",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "SDIO_TIEH": {
    +                    "description": "SW option for SDIO_TIEH. Only active when reg_sdio_force = 1",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "_1P8_READY": {
    +                    "description": "read only register for REG1P8_READY",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DREFL_SDIO": {
    +                    "description": "SW option for DREFL_SDIO. Only active when reg_sdio_force = 1",
    +                    "offset": 25,
    +                    "size": 2
    +                  },
    +                  "DREFM_SDIO": {
    +                    "description": "SW option for DREFM_SDIO. Only active when reg_sdio_force = 1",
    +                    "offset": 27,
    +                    "size": 2
    +                  },
    +                  "DREFH_SDIO": {
    +                    "description": "SW option for DREFH_SDIO. Only active when reg_sdio_force = 1",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "XPD_SDIO": {
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BIAS_CONF": {
    +              "description": "rtc configure register",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 67584,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DG_VDD_DRV_B_SLP": {
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "DG_VDD_DRV_B_SLP_EN": {
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "BIAS_BUF_IDLE": {
    +                    "description": "bias buf when rtc in normal work state",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "BIAS_BUF_WAKE": {
    +                    "description": "bias buf when rtc in wakeup state",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BIAS_BUF_DEEP_SLP": {
    +                    "description": "bias buf when rtc in sleep state",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "BIAS_BUF_MONITOR": {
    +                    "description": "bias buf when rtc in monitor state",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "PD_CUR_DEEP_SLP": {
    +                    "description": "xpd cur when rtc in sleep_state",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PD_CUR_MONITOR": {
    +                    "description": "xpd cur when rtc in monitor state",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "BIAS_SLEEP_DEEP_SLP": {
    +                    "description": "bias_sleep when rtc in sleep_state",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "BIAS_SLEEP_MONITOR": {
    +                    "description": "bias_sleep when rtc in monitor state",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "DBG_ATTEN_DEEP_SLP": {
    +                    "description": "DBG_ATTEN when rtc in sleep state",
    +                    "offset": 18,
    +                    "size": 4
    +                  },
    +                  "DBG_ATTEN_MONITOR": {
    +                    "description": "DBG_ATTEN when rtc in monitor state",
    +                    "offset": 22,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "RTC_CNTL": {
    +              "description": "rtc configure register",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 2684354560,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DIG_REG_CAL_EN": {
    +                    "description": "software enable digital regulator cali",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SCK_DCAP": {
    +                    "description": "SCK_DCAP",
    +                    "offset": 14,
    +                    "size": 8
    +                  },
    +                  "DBOOST_FORCE_PD": {
    +                    "description": "RTC_DBOOST force power down",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "DBOOST_FORCE_PU": {
    +                    "description": "RTC_DBOOST force power up",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "REGULATOR_FORCE_PD": {
    +                    "description": "RTC_REG force power down (for RTC_REG power down means decrease the voltage to 0.8v or lower )",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "REGULATOR_FORCE_PU": {
    +                    "description": "RTC_REG force power up",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PWC": {
    +              "description": "rtc configure register",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_PAD_FORCE_HOLD": {
    +                    "description": "rtc pad force hold",
    +                    "offset": 21,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIG_PWC": {
    +              "description": "rtc configure register",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 5591056,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "VDD_SPI_PWR_DRV": {
    +                    "description": "vdd_spi drv's software value",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "VDD_SPI_PWR_FORCE": {
    +                    "description": "vdd_spi drv use software value",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "LSLP_MEM_FORCE_PD": {
    +                    "description": "memories in digital core force PD in sleep",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "LSLP_MEM_FORCE_PU": {
    +                    "description": "memories in digital core force PU in sleep",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "BT_FORCE_PD": {
    +                    "description": "bt force power down",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "BT_FORCE_PU": {
    +                    "description": "bt force power up",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "DG_PERI_FORCE_PD": {
    +                    "description": "digital peri force power down",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "DG_PERI_FORCE_PU": {
    +                    "description": "digital peri force power up",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "RTC_FASTMEM_FORCE_LPD": {
    +                    "description": "fastmemory  retention mode in sleep",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "RTC_FASTMEM_FORCE_LPU": {
    +                    "description": "fastmemory donlt entry retention mode in sleep",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "WIFI_FORCE_PD": {
    +                    "description": "wifi force power down",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "WIFI_FORCE_PU": {
    +                    "description": "wifi force power up",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "DG_WRAP_FORCE_PD": {
    +                    "description": "digital core force power down",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "DG_WRAP_FORCE_PU": {
    +                    "description": "digital core force power up",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "CPU_TOP_FORCE_PD": {
    +                    "description": "cpu core force power down",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "CPU_TOP_FORCE_PU": {
    +                    "description": "cpu force power up",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "BT_PD_EN": {
    +                    "description": "enable power down bt in sleep",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "DG_PERI_PD_EN": {
    +                    "description": "enable power down digital peri in sleep",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "CPU_TOP_PD_EN": {
    +                    "description": "enable power down cpu in sleep",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "WIFI_PD_EN": {
    +                    "description": "enable power down wifi in sleep",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "DG_WRAP_PD_EN": {
    +                    "description": "enable power down digital wrap in sleep",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIG_ISO": {
    +              "description": "rtc configure register",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 2860535936,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FORCE_OFF": {
    +                    "description": "DIG_ISO force off",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FORCE_ON": {
    +                    "description": "DIG_ISO force on",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DG_PAD_AUTOHOLD": {
    +                    "description": "read only register to indicate digital pad auto-hold status",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CLR_DG_PAD_AUTOHOLD": {
    +                    "description": "wtite only register to clear digital pad auto-hold",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "DG_PAD_AUTOHOLD_EN": {
    +                    "description": "digital pad enable auto-hold",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "DG_PAD_FORCE_NOISO": {
    +                    "description": "digital pad force no ISO",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "DG_PAD_FORCE_ISO": {
    +                    "description": "digital pad force ISO",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "DG_PAD_FORCE_UNHOLD": {
    +                    "description": "digital pad force un-hold",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "DG_PAD_FORCE_HOLD": {
    +                    "description": "digital pad force hold",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "BT_FORCE_ISO": {
    +                    "description": "bt force ISO",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "BT_FORCE_NOISO": {
    +                    "description": "bt force no ISO",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "DG_PERI_FORCE_ISO": {
    +                    "description": "Digital peri force ISO",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "DG_PERI_FORCE_NOISO": {
    +                    "description": "digital peri force no ISO",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "CPU_TOP_FORCE_ISO": {
    +                    "description": "cpu force ISO",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "CPU_TOP_FORCE_NOISO": {
    +                    "description": "cpu force no ISO",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "WIFI_FORCE_ISO": {
    +                    "description": "wifi force ISO",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "WIFI_FORCE_NOISO": {
    +                    "description": "wifi force no ISO",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "DG_WRAP_FORCE_ISO": {
    +                    "description": "digital core force ISO",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "DG_WRAP_FORCE_NOISO": {
    +                    "description": "digital core force no ISO",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "WDTCONFIG0": {
    +              "description": "rtc configure register",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 78356,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WDT_CHIP_RESET_WIDTH": {
    +                    "description": "chip reset siginal pulse width",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "WDT_CHIP_RESET_EN": {
    +                    "description": "wdt reset whole chip enable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "WDT_PAUSE_IN_SLP": {
    +                    "description": "pause WDT in sleep",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "WDT_APPCPU_RESET_EN": {
    +                    "description": "enable WDT reset APP CPU",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "WDT_PROCPU_RESET_EN": {
    +                    "description": "enable WDT reset PRO CPU",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "WDT_FLASHBOOT_MOD_EN": {
    +                    "description": "enable WDT in flash boot",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WDT_SYS_RESET_LENGTH": {
    +                    "description": "system reset counter length",
    +                    "offset": 13,
    +                    "size": 3
    +                  },
    +                  "WDT_CPU_RESET_LENGTH": {
    +                    "description": "CPU reset counter length",
    +                    "offset": 16,
    +                    "size": 3
    +                  },
    +                  "WDT_STG3": {
    +                    "description": "1: interrupt stage en",
    +                    "offset": 19,
    +                    "size": 3
    +                  },
    +                  "WDT_STG2": {
    +                    "description": "1: interrupt stage en",
    +                    "offset": 22,
    +                    "size": 3
    +                  },
    +                  "WDT_STG1": {
    +                    "description": "1: interrupt stage en",
    +                    "offset": 25,
    +                    "size": 3
    +                  },
    +                  "WDT_STG0": {
    +                    "description": "1: interrupt stage en",
    +                    "offset": 28,
    +                    "size": 3
    +                  },
    +                  "WDT_EN": {
    +                    "description": "enable rtc wdt",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "WDTCONFIG1": {
    +              "description": "rtc configure register",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 200000,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WDT_STG0_HOLD": {
    +                    "description": "the hold time of stage0",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "WDTCONFIG2": {
    +              "description": "rtc configure register",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 80000,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WDT_STG1_HOLD": {
    +                    "description": "the hold time of stage1",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "WDTCONFIG3": {
    +              "description": "rtc configure register",
    +              "offset": 156,
    +              "size": 32,
    +              "reset_value": 4095,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WDT_STG2_HOLD": {
    +                    "description": "the hold time of stage2",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "WDTCONFIG4": {
    +              "description": "rtc configure register",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 4095,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WDT_STG3_HOLD": {
    +                    "description": "the hold time of stage3",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "WDTFEED": {
    +              "description": "rtc configure register",
    +              "offset": 164,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_WDT_FEED": {
    +                    "description": "sw feed rtc wdt",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "WDTWPROTECT": {
    +              "description": "rtc configure register",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WDT_WKEY": {
    +                    "description": "the key of rtc wdt",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "SWD_CONF": {
    +              "description": "rtc configure register",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 78643200,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SWD_RESET_FLAG": {
    +                    "description": "swd reset flag",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SWD_FEED_INT": {
    +                    "description": "swd interrupt for feeding",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SWD_BYPASS_RST": {
    +                    "description": "Bypass swd rst",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "SWD_SIGNAL_WIDTH": {
    +                    "description": "adjust signal width send to swd",
    +                    "offset": 18,
    +                    "size": 10
    +                  },
    +                  "SWD_RST_FLAG_CLR": {
    +                    "description": "reset swd reset flag",
    +                    "offset": 28,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SWD_FEED": {
    +                    "description": "Sw feed swd",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SWD_DISABLE": {
    +                    "description": "disabel SWD",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SWD_AUTO_FEED_EN": {
    +                    "description": "automatically feed swd when int comes",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SWD_WPROTECT": {
    +              "description": "rtc configure register",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SWD_WKEY": {
    +                    "description": "the key of super wdt",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "SW_CPU_STALL": {
    +              "description": "rtc configure register",
    +              "offset": 180,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SW_STALL_APPCPU_C1": {
    +                    "description": "{reg_sw_stall_appcpu_c1[5:0]",
    +                    "offset": 20,
    +                    "size": 6
    +                  },
    +                  "SW_STALL_PROCPU_C1": {
    +                    "description": "stall cpu by software",
    +                    "offset": 26,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "STORE4": {
    +              "description": "rtc configure register",
    +              "offset": 184,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_SCRATCH4": {
    +                    "description": "reserved register",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "STORE5": {
    +              "description": "rtc configure register",
    +              "offset": 188,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_SCRATCH5": {
    +                    "description": "reserved register",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "STORE6": {
    +              "description": "rtc configure register",
    +              "offset": 192,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_SCRATCH6": {
    +                    "description": "reserved register",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "STORE7": {
    +              "description": "rtc configure register",
    +              "offset": 196,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_SCRATCH7": {
    +                    "description": "reserved register",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "LOW_POWER_ST": {
    +              "description": "rtc configure register",
    +              "offset": 200,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XPD_ROM0": {
    +                    "description": "rom0 power down",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "XPD_DIG_DCDC": {
    +                    "description": "External DCDC power down",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_PERI_ISO": {
    +                    "description": "rtc peripheral iso",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "XPD_RTC_PERI": {
    +                    "description": "rtc peripheral power down",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "WIFI_ISO": {
    +                    "description": "wifi iso",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "XPD_WIFI": {
    +                    "description": "wifi wrap power down",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DIG_ISO": {
    +                    "description": "digital wrap iso",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "XPD_DIG": {
    +                    "description": "digital wrap power down",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_TOUCH_STATE_START": {
    +                    "description": "touch should start to work",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_TOUCH_STATE_SWITCH": {
    +                    "description": "touch is about to working. Switch rtc main state",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_TOUCH_STATE_SLP": {
    +                    "description": "touch is in sleep state",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_TOUCH_STATE_DONE": {
    +                    "description": "touch is done",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_COCPU_STATE_START": {
    +                    "description": "ulp/cocpu should start to work",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_COCPU_STATE_SWITCH": {
    +                    "description": "ulp/cocpu is about to working. Switch rtc main state",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_COCPU_STATE_SLP": {
    +                    "description": "ulp/cocpu is in sleep state",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_COCPU_STATE_DONE": {
    +                    "description": "ulp/cocpu is done",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_MAIN_STATE_XTAL_ISO": {
    +                    "description": "no use any more",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_MAIN_STATE_PLL_ON": {
    +                    "description": "rtc main state machine is in states that pll should be running",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_RDY_FOR_WAKEUP": {
    +                    "description": "rtc is ready to receive wake up trigger from wake up source",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_MAIN_STATE_WAIT_END": {
    +                    "description": "rtc main state machine has been waited for some cycles",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_IN_WAKEUP_STATE": {
    +                    "description": "rtc main state machine is in the states of wakeup process",
    +                    "offset": 21,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_IN_LOW_POWER_STATE": {
    +                    "description": "rtc main state machine is in the states of low power",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_MAIN_STATE_IN_WAIT_8M": {
    +                    "description": "rtc main state machine is in wait 8m state",
    +                    "offset": 23,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_MAIN_STATE_IN_WAIT_PLL": {
    +                    "description": "rtc main state machine is in wait pll state",
    +                    "offset": 24,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_MAIN_STATE_IN_WAIT_XTL": {
    +                    "description": "rtc main state machine is in wait xtal state",
    +                    "offset": 25,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_MAIN_STATE_IN_SLP": {
    +                    "description": "rtc main state machine is in sleep state",
    +                    "offset": 26,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_MAIN_STATE_IN_IDLE": {
    +                    "description": "rtc main state machine is in idle state",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_MAIN_STATE": {
    +                    "description": "rtc main state machine status",
    +                    "offset": 28,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DIAG0": {
    +              "description": "rtc configure register",
    +              "offset": 204,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_LOW_POWER_DIAG1": {
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "PAD_HOLD": {
    +              "description": "rtc configure register",
    +              "offset": 208,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_GPIO_PIN0_HOLD": {
    +                    "description": "the hold configure of rtc gpio0",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RTC_GPIO_PIN1_HOLD": {
    +                    "description": "the hold configure of rtc gpio1",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RTC_GPIO_PIN2_HOLD": {
    +                    "description": "the hold configure of rtc gpio2",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTC_GPIO_PIN3_HOLD": {
    +                    "description": "the hold configure of rtc gpio3",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RTC_GPIO_PIN4_HOLD": {
    +                    "description": "the hold configure of rtc gpio4",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RTC_GPIO_PIN5_HOLD": {
    +                    "description": "the hold configure of rtc gpio5",
    +                    "offset": 5,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIG_PAD_HOLD": {
    +              "description": "rtc configure register",
    +              "offset": 212,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DIG_PAD_HOLD": {
    +                    "description": "the configure of digital pad",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "BROWN_OUT": {
    +              "description": "rtc configure register",
    +              "offset": 216,
    +              "size": 32,
    +              "reset_value": 1140785168,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INT_WAIT": {
    +                    "description": "brown out interrupt wait cycles",
    +                    "offset": 4,
    +                    "size": 10
    +                  },
    +                  "CLOSE_FLASH_ENA": {
    +                    "description": "enable close flash when brown out happens",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "PD_RF_ENA": {
    +                    "description": "enable power down RF when brown out happens",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "RST_WAIT": {
    +                    "description": "brown out reset wait cycles",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "RST_ENA": {
    +                    "description": "enable brown out reset",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "RST_SEL": {
    +                    "description": "1:  4-pos reset",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "ANA_RST_EN": {
    +                    "description": "brown_out origin reset enable",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "CNT_CLR": {
    +                    "description": "clear brown out counter",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "ENA": {
    +                    "description": "enable brown out",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "DET": {
    +                    "description": "the flag of brown det from analog",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "TIME_LOW1": {
    +              "description": "rtc configure register",
    +              "offset": 220,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_TIMER_VALUE1_LOW": {
    +                    "description": "RTC timer low 32 bits",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "TIME_HIGH1": {
    +              "description": "rtc configure register",
    +              "offset": 224,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_TIMER_VALUE1_HIGH": {
    +                    "description": "RTC timer high 16 bits",
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "XTAL32K_CLK_FACTOR": {
    +              "description": "rtc configure register",
    +              "offset": 228,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XTAL32K_CLK_FACTOR": {
    +                    "description": "xtal 32k watch dog backup clock factor",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "XTAL32K_CONF": {
    +              "description": "rtc configure register",
    +              "offset": 232,
    +              "size": 32,
    +              "reset_value": 267386880,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XTAL32K_RETURN_WAIT": {
    +                    "description": "cycles to wait to return noral xtal 32k",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "XTAL32K_RESTART_WAIT": {
    +                    "description": "cycles to wait to repower on xtal 32k",
    +                    "offset": 4,
    +                    "size": 16
    +                  },
    +                  "XTAL32K_WDT_TIMEOUT": {
    +                    "description": "If no clock detected for this amount of time",
    +                    "offset": 20,
    +                    "size": 8
    +                  },
    +                  "XTAL32K_STABLE_THRES": {
    +                    "description": "if restarted xtal32k period is smaller than this",
    +                    "offset": 28,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "USB_CONF": {
    +              "description": "rtc configure register",
    +              "offset": 236,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IO_MUX_RESET_DISABLE": {
    +                    "description": "disable io_mux reset",
    +                    "offset": 18,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SLP_REJECT_CAUSE": {
    +              "description": "RTC_CNTL_RTC_SLP_REJECT_CAUSE_REG",
    +              "offset": 240,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REJECT_CAUSE": {
    +                    "description": "sleep reject cause",
    +                    "offset": 0,
    +                    "size": 18,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OPTION1": {
    +              "description": "rtc configure register",
    +              "offset": 244,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FORCE_DOWNLOAD_BOOT": {
    +                    "description": "force chip entry download mode",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SLP_WAKEUP_CAUSE": {
    +              "description": "RTC_CNTL_RTC_SLP_WAKEUP_CAUSE_REG",
    +              "offset": 248,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WAKEUP_CAUSE": {
    +                    "description": "sleep wakeup cause",
    +                    "offset": 0,
    +                    "size": 17,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "ULP_CP_TIMER_1": {
    +              "description": "rtc configure register",
    +              "offset": 252,
    +              "size": 32,
    +              "reset_value": 51200,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ULP_CP_TIMER_SLP_CYCLE": {
    +                    "description": "sleep cycles for ULP-coprocessor timer",
    +                    "offset": 8,
    +                    "size": 24
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ENA_RTC_W1TS": {
    +              "description": "rtc configure register",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SLP_WAKEUP_INT_ENA_W1TS": {
    +                    "description": "enable sleep wakeup interrupt",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SLP_REJECT_INT_ENA_W1TS": {
    +                    "description": "enable sleep reject interrupt",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RTC_WDT_INT_ENA_W1TS": {
    +                    "description": "enable RTC WDT interrupt",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RTC_BROWN_OUT_INT_ENA_W1TS": {
    +                    "description": "enable brown out interrupt",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RTC_MAIN_TIMER_INT_ENA_W1TS": {
    +                    "description": "enable RTC main timer interrupt",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RTC_SWD_INT_ENA_W1TS": {
    +                    "description": "enable super watch dog interrupt",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RTC_XTAL32K_DEAD_INT_ENA_W1TS": {
    +                    "description": "enable xtal32k_dead  interrupt",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RTC_GLITCH_DET_INT_ENA_W1TS": {
    +                    "description": "enbale gitch det interrupt",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RTC_BBPLL_CAL_INT_ENA_W1TS": {
    +                    "description": "enbale bbpll cal interrupt",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ENA_RTC_W1TC": {
    +              "description": "rtc configure register",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SLP_WAKEUP_INT_ENA_W1TC": {
    +                    "description": "clear sleep wakeup interrupt enable",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SLP_REJECT_INT_ENA_W1TC": {
    +                    "description": "clear sleep reject interrupt enable",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RTC_WDT_INT_ENA_W1TC": {
    +                    "description": "clear RTC WDT interrupt enable",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RTC_BROWN_OUT_INT_ENA_W1TC": {
    +                    "description": "clear brown out interrupt enable",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RTC_MAIN_TIMER_INT_ENA_W1TC": {
    +                    "description": "Clear RTC main timer interrupt enable",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RTC_SWD_INT_ENA_W1TC": {
    +                    "description": "clear super watch dog interrupt enable",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RTC_XTAL32K_DEAD_INT_ENA_W1TC": {
    +                    "description": "clear xtal32k_dead  interrupt enable",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RTC_GLITCH_DET_INT_ENA_W1TC": {
    +                    "description": "clear gitch det interrupt enable",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RTC_BBPLL_CAL_INT_ENA_W1TC": {
    +                    "description": "clear bbpll cal interrupt enable",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RETENTION_CTRL": {
    +              "description": "rtc configure register",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 2697986048,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RETENTION_CLK_SEL": {
    +                    "description": "Retention clk sel",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "RETENTION_DONE_WAIT": {
    +                    "description": "Retention done wait time",
    +                    "offset": 19,
    +                    "size": 3
    +                  },
    +                  "RETENTION_CLKOFF_WAIT": {
    +                    "description": "Retention clkoff wait time",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "RETENTION_EN": {
    +                    "description": "enable cpu retention when light sleep",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "RETENTION_WAIT": {
    +                    "description": "wait cycles for rention operation",
    +                    "offset": 27,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "FIB_SEL": {
    +              "description": "rtc configure register",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 7,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_FIB_SEL": {
    +                    "description": "select use analog fib signal",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "GPIO_WAKEUP": {
    +              "description": "rtc configure register",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_GPIO_WAKEUP_STATUS": {
    +                    "description": "rtc gpio wakeup flag",
    +                    "offset": 0,
    +                    "size": 6,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_GPIO_WAKEUP_STATUS_CLR": {
    +                    "description": "clear rtc gpio wakeup flag",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RTC_GPIO_PIN_CLK_GATE": {
    +                    "description": "enable rtc io clk gate",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RTC_GPIO_PIN5_INT_TYPE": {
    +                    "description": "configure gpio wakeup type",
    +                    "offset": 8,
    +                    "size": 3
    +                  },
    +                  "RTC_GPIO_PIN4_INT_TYPE": {
    +                    "description": "configure gpio wakeup type",
    +                    "offset": 11,
    +                    "size": 3
    +                  },
    +                  "RTC_GPIO_PIN3_INT_TYPE": {
    +                    "description": "configure gpio wakeup type",
    +                    "offset": 14,
    +                    "size": 3
    +                  },
    +                  "RTC_GPIO_PIN2_INT_TYPE": {
    +                    "description": "configure gpio wakeup type",
    +                    "offset": 17,
    +                    "size": 3
    +                  },
    +                  "RTC_GPIO_PIN1_INT_TYPE": {
    +                    "description": "configure gpio wakeup type",
    +                    "offset": 20,
    +                    "size": 3
    +                  },
    +                  "RTC_GPIO_PIN0_INT_TYPE": {
    +                    "description": "configure gpio wakeup type",
    +                    "offset": 23,
    +                    "size": 3
    +                  },
    +                  "RTC_GPIO_PIN5_WAKEUP_ENABLE": {
    +                    "description": "enable wakeup from rtc gpio5",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "RTC_GPIO_PIN4_WAKEUP_ENABLE": {
    +                    "description": "enable wakeup from rtc gpio4",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "RTC_GPIO_PIN3_WAKEUP_ENABLE": {
    +                    "description": "enable wakeup from rtc gpio3",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "RTC_GPIO_PIN2_WAKEUP_ENABLE": {
    +                    "description": "enable wakeup from rtc gpio2",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "RTC_GPIO_PIN1_WAKEUP_ENABLE": {
    +                    "description": "enable wakeup from rtc gpio1",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "RTC_GPIO_PIN0_WAKEUP_ENABLE": {
    +                    "description": "enable wakeup from rtc gpio0",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DBG_SEL": {
    +              "description": "rtc configure register",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_DEBUG_12M_NO_GATING": {
    +                    "description": "use for debug",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RTC_DEBUG_BIT_SEL": {
    +                    "description": "use for debug",
    +                    "offset": 2,
    +                    "size": 5
    +                  },
    +                  "RTC_DEBUG_SEL0": {
    +                    "description": "use for debug",
    +                    "offset": 7,
    +                    "size": 5
    +                  },
    +                  "RTC_DEBUG_SEL1": {
    +                    "description": "use for debug",
    +                    "offset": 12,
    +                    "size": 5
    +                  },
    +                  "RTC_DEBUG_SEL2": {
    +                    "description": "use for debug",
    +                    "offset": 17,
    +                    "size": 5
    +                  },
    +                  "RTC_DEBUG_SEL3": {
    +                    "description": "use for debug",
    +                    "offset": 22,
    +                    "size": 5
    +                  },
    +                  "RTC_DEBUG_SEL4": {
    +                    "description": "use for debug",
    +                    "offset": 27,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "DBG_MAP": {
    +              "description": "rtc configure register",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_GPIO_PIN5_MUX_SEL": {
    +                    "description": "use for debug",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RTC_GPIO_PIN4_MUX_SEL": {
    +                    "description": "use for debug",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RTC_GPIO_PIN3_MUX_SEL": {
    +                    "description": "use for debug",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RTC_GPIO_PIN2_MUX_SEL": {
    +                    "description": "use for debug",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RTC_GPIO_PIN1_MUX_SEL": {
    +                    "description": "use for debug",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RTC_GPIO_PIN0_MUX_SEL": {
    +                    "description": "use for debug",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RTC_GPIO_PIN5_FUN_SEL": {
    +                    "description": "use for debug",
    +                    "offset": 8,
    +                    "size": 4
    +                  },
    +                  "RTC_GPIO_PIN4_FUN_SEL": {
    +                    "description": "use for debug",
    +                    "offset": 12,
    +                    "size": 4
    +                  },
    +                  "RTC_GPIO_PIN3_FUN_SEL": {
    +                    "description": "use for debug",
    +                    "offset": 16,
    +                    "size": 4
    +                  },
    +                  "RTC_GPIO_PIN2_FUN_SEL": {
    +                    "description": "use for debug",
    +                    "offset": 20,
    +                    "size": 4
    +                  },
    +                  "RTC_GPIO_PIN1_FUN_SEL": {
    +                    "description": "use for debug",
    +                    "offset": 24,
    +                    "size": 4
    +                  },
    +                  "RTC_GPIO_PIN0_FUN_SEL": {
    +                    "description": "use for debug",
    +                    "offset": 28,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "SENSOR_CTRL": {
    +              "description": "rtc configure register",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SAR2_PWDET_CCT": {
    +                    "description": "reg_sar2_pwdet_cct",
    +                    "offset": 27,
    +                    "size": 3
    +                  },
    +                  "FORCE_XPD_SAR": {
    +                    "description": "force power up SAR",
    +                    "offset": 30,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "DBG_SAR_SEL": {
    +              "description": "rtc configure register",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SAR_DEBUG_SEL": {
    +                    "description": "use for debug",
    +                    "offset": 27,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "PG_CTRL": {
    +              "description": "rtc configure register",
    +              "offset": 292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "POWER_GLITCH_DSENSE": {
    +                    "description": "power glitch desense",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "POWER_GLITCH_FORCE_PD": {
    +                    "description": "force disable power glitch",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "POWER_GLITCH_FORCE_PU": {
    +                    "description": "force enable power glitch",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "POWER_GLITCH_EFUSE_SEL": {
    +                    "description": "use efuse value control power glitch enable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "POWER_GLITCH_EN": {
    +                    "description": "enable power glitch",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DATE": {
    +              "description": "rtc configure register",
    +              "offset": 508,
    +              "size": 32,
    +              "reset_value": 33583728,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_CNTL_DATE": {
    +                    "description": "verision",
    +                    "offset": 0,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SENSITIVE": {
    +        "description": "Sensitive",
    +        "children": {
    +          "registers": {
    +            "ROM_TABLE_LOCK": {
    +              "description": "SENSITIVE_ROM_TABLE_LOCK_REG",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ROM_TABLE_LOCK": {
    +                    "description": "rom_table_lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ROM_TABLE": {
    +              "description": "SENSITIVE_ROM_TABLE_REG",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ROM_TABLE": {
    +                    "description": "rom_table",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "PRIVILEGE_MODE_SEL_LOCK": {
    +              "description": "SENSITIVE_PRIVILEGE_MODE_SEL_LOCK_REG",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRIVILEGE_MODE_SEL_LOCK": {
    +                    "description": "privilege_mode_sel_lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PRIVILEGE_MODE_SEL": {
    +              "description": "SENSITIVE_PRIVILEGE_MODE_SEL_REG",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRIVILEGE_MODE_SEL": {
    +                    "description": "privilege_mode_sel",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "APB_PERIPHERAL_ACCESS_0": {
    +              "description": "SENSITIVE_APB_PERIPHERAL_ACCESS_0_REG",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "APB_PERIPHERAL_ACCESS_LOCK": {
    +                    "description": "apb_peripheral_access_lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "APB_PERIPHERAL_ACCESS_1": {
    +              "description": "SENSITIVE_APB_PERIPHERAL_ACCESS_1_REG",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "APB_PERIPHERAL_ACCESS_SPLIT_BURST": {
    +                    "description": "apb_peripheral_access_split_burst",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTERNAL_SRAM_USAGE_0": {
    +              "description": "SENSITIVE_INTERNAL_SRAM_USAGE_0_REG",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INTERNAL_SRAM_USAGE_LOCK": {
    +                    "description": "internal_sram_usage_lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTERNAL_SRAM_USAGE_1": {
    +              "description": "SENSITIVE_INTERNAL_SRAM_USAGE_1_REG",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 15,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INTERNAL_SRAM_USAGE_CPU_CACHE": {
    +                    "description": "internal_sram_usage_cpu_cache",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "INTERNAL_SRAM_USAGE_CPU_SRAM": {
    +                    "description": "internal_sram_usage_cpu_sram",
    +                    "offset": 1,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "INTERNAL_SRAM_USAGE_3": {
    +              "description": "SENSITIVE_INTERNAL_SRAM_USAGE_3_REG",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INTERNAL_SRAM_USAGE_MAC_DUMP_SRAM": {
    +                    "description": "internal_sram_usage_mac_dump_sram",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "INTERNAL_SRAM_ALLOC_MAC_DUMP": {
    +                    "description": "internal_sram_alloc_mac_dump",
    +                    "offset": 3,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INTERNAL_SRAM_USAGE_4": {
    +              "description": "SENSITIVE_INTERNAL_SRAM_USAGE_4_REG",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INTERNAL_SRAM_USAGE_LOG_SRAM": {
    +                    "description": "internal_sram_usage_log_sram",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CACHE_TAG_ACCESS_0": {
    +              "description": "SENSITIVE_CACHE_TAG_ACCESS_0_REG",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CACHE_TAG_ACCESS_LOCK": {
    +                    "description": "cache_tag_access_lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CACHE_TAG_ACCESS_1": {
    +              "description": "SENSITIVE_CACHE_TAG_ACCESS_1_REG",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 15,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRO_I_TAG_RD_ACS": {
    +                    "description": "pro_i_tag_rd_acs",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PRO_I_TAG_WR_ACS": {
    +                    "description": "pro_i_tag_wr_acs",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PRO_D_TAG_RD_ACS": {
    +                    "description": "pro_d_tag_rd_acs",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "PRO_D_TAG_WR_ACS": {
    +                    "description": "pro_d_tag_wr_acs",
    +                    "offset": 3,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CACHE_MMU_ACCESS_0": {
    +              "description": "SENSITIVE_CACHE_MMU_ACCESS_0_REG",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CACHE_MMU_ACCESS_LOCK": {
    +                    "description": "cache_mmu_access_lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CACHE_MMU_ACCESS_1": {
    +              "description": "SENSITIVE_CACHE_MMU_ACCESS_1_REG",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 3,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRO_MMU_RD_ACS": {
    +                    "description": "pro_mmu_rd_acs",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PRO_MMU_WR_ACS": {
    +                    "description": "pro_mmu_wr_acs",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_APBPERI_SPI2_PMS_CONSTRAIN_0": {
    +              "description": "SENSITIVE_DMA_APBPERI_SPI2_PMS_CONSTRAIN_0_REG",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_APBPERI_SPI2_PMS_CONSTRAIN_LOCK": {
    +                    "description": "dma_apbperi_spi2_pms_constrain_lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_APBPERI_SPI2_PMS_CONSTRAIN_1": {
    +              "description": "SENSITIVE_DMA_APBPERI_SPI2_PMS_CONSTRAIN_1_REG",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 1044735,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0": {
    +                    "description": "dma_apbperi_spi2_pms_constrain_sram_world_0_pms_0",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1": {
    +                    "description": "dma_apbperi_spi2_pms_constrain_sram_world_0_pms_1",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2": {
    +                    "description": "dma_apbperi_spi2_pms_constrain_sram_world_0_pms_2",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3": {
    +                    "description": "dma_apbperi_spi2_pms_constrain_sram_world_0_pms_3",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0": {
    +                    "description": "dma_apbperi_spi2_pms_constrain_sram_world_1_pms_0",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1": {
    +                    "description": "dma_apbperi_spi2_pms_constrain_sram_world_1_pms_1",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2": {
    +                    "description": "dma_apbperi_spi2_pms_constrain_sram_world_1_pms_2",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3": {
    +                    "description": "dma_apbperi_spi2_pms_constrain_sram_world_1_pms_3",
    +                    "offset": 18,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_APBPERI_UCHI0_PMS_CONSTRAIN_0": {
    +              "description": "SENSITIVE_DMA_APBPERI_UCHI0_PMS_CONSTRAIN_0_REG",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_APBPERI_UCHI0_PMS_CONSTRAIN_LOCK": {
    +                    "description": "dma_apbperi_uchi0_pms_constrain_lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_APBPERI_UCHI0_PMS_CONSTRAIN_1": {
    +              "description": "SENSITIVE_DMA_APBPERI_UCHI0_PMS_CONSTRAIN_1_REG",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 1044735,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0": {
    +                    "description": "dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_0",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1": {
    +                    "description": "dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_1",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2": {
    +                    "description": "dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_2",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3": {
    +                    "description": "dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_3",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0": {
    +                    "description": "dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_0",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1": {
    +                    "description": "dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_1",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2": {
    +                    "description": "dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_2",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3": {
    +                    "description": "dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_3",
    +                    "offset": 18,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_APBPERI_I2S0_PMS_CONSTRAIN_0": {
    +              "description": "SENSITIVE_DMA_APBPERI_I2S0_PMS_CONSTRAIN_0_REG",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_APBPERI_I2S0_PMS_CONSTRAIN_LOCK": {
    +                    "description": "dma_apbperi_i2s0_pms_constrain_lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_APBPERI_I2S0_PMS_CONSTRAIN_1": {
    +              "description": "SENSITIVE_DMA_APBPERI_I2S0_PMS_CONSTRAIN_1_REG",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 1044735,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0": {
    +                    "description": "dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_0",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1": {
    +                    "description": "dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_1",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2": {
    +                    "description": "dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_2",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3": {
    +                    "description": "dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_3",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0": {
    +                    "description": "dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_0",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1": {
    +                    "description": "dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_1",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2": {
    +                    "description": "dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_2",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3": {
    +                    "description": "dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_3",
    +                    "offset": 18,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_APBPERI_MAC_PMS_CONSTRAIN_0": {
    +              "description": "SENSITIVE_DMA_APBPERI_MAC_PMS_CONSTRAIN_0_REG",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_APBPERI_MAC_PMS_CONSTRAIN_LOCK": {
    +                    "description": "dma_apbperi_mac_pms_constrain_lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_APBPERI_MAC_PMS_CONSTRAIN_1": {
    +              "description": "SENSITIVE_DMA_APBPERI_MAC_PMS_CONSTRAIN_1_REG",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 1044735,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0": {
    +                    "description": "dma_apbperi_mac_pms_constrain_sram_world_0_pms_0",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1": {
    +                    "description": "dma_apbperi_mac_pms_constrain_sram_world_0_pms_1",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2": {
    +                    "description": "dma_apbperi_mac_pms_constrain_sram_world_0_pms_2",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3": {
    +                    "description": "dma_apbperi_mac_pms_constrain_sram_world_0_pms_3",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0": {
    +                    "description": "dma_apbperi_mac_pms_constrain_sram_world_1_pms_0",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1": {
    +                    "description": "dma_apbperi_mac_pms_constrain_sram_world_1_pms_1",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2": {
    +                    "description": "dma_apbperi_mac_pms_constrain_sram_world_1_pms_2",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3": {
    +                    "description": "dma_apbperi_mac_pms_constrain_sram_world_1_pms_3",
    +                    "offset": 18,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_APBPERI_BACKUP_PMS_CONSTRAIN_0": {
    +              "description": "SENSITIVE_DMA_APBPERI_BACKUP_PMS_CONSTRAIN_0_REG",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_APBPERI_BACKUP_PMS_CONSTRAIN_LOCK": {
    +                    "description": "dma_apbperi_backup_pms_constrain_lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_APBPERI_BACKUP_PMS_CONSTRAIN_1": {
    +              "description": "SENSITIVE_DMA_APBPERI_BACKUP_PMS_CONSTRAIN_1_REG",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 1044735,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0": {
    +                    "description": "dma_apbperi_backup_pms_constrain_sram_world_0_pms_0",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1": {
    +                    "description": "dma_apbperi_backup_pms_constrain_sram_world_0_pms_1",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2": {
    +                    "description": "dma_apbperi_backup_pms_constrain_sram_world_0_pms_2",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3": {
    +                    "description": "dma_apbperi_backup_pms_constrain_sram_world_0_pms_3",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0": {
    +                    "description": "dma_apbperi_backup_pms_constrain_sram_world_1_pms_0",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1": {
    +                    "description": "dma_apbperi_backup_pms_constrain_sram_world_1_pms_1",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2": {
    +                    "description": "dma_apbperi_backup_pms_constrain_sram_world_1_pms_2",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3": {
    +                    "description": "dma_apbperi_backup_pms_constrain_sram_world_1_pms_3",
    +                    "offset": 18,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_APBPERI_LC_PMS_CONSTRAIN_0": {
    +              "description": "SENSITIVE_DMA_APBPERI_LC_PMS_CONSTRAIN_0_REG",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_APBPERI_LC_PMS_CONSTRAIN_LOCK": {
    +                    "description": "dma_apbperi_lc_pms_constrain_lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_APBPERI_LC_PMS_CONSTRAIN_1": {
    +              "description": "SENSITIVE_DMA_APBPERI_LC_PMS_CONSTRAIN_1_REG",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 1044735,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0": {
    +                    "description": "dma_apbperi_lc_pms_constrain_sram_world_0_pms_0",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1": {
    +                    "description": "dma_apbperi_lc_pms_constrain_sram_world_0_pms_1",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2": {
    +                    "description": "dma_apbperi_lc_pms_constrain_sram_world_0_pms_2",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3": {
    +                    "description": "dma_apbperi_lc_pms_constrain_sram_world_0_pms_3",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0": {
    +                    "description": "dma_apbperi_lc_pms_constrain_sram_world_1_pms_0",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1": {
    +                    "description": "dma_apbperi_lc_pms_constrain_sram_world_1_pms_1",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2": {
    +                    "description": "dma_apbperi_lc_pms_constrain_sram_world_1_pms_2",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3": {
    +                    "description": "dma_apbperi_lc_pms_constrain_sram_world_1_pms_3",
    +                    "offset": 18,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_APBPERI_AES_PMS_CONSTRAIN_0": {
    +              "description": "SENSITIVE_DMA_APBPERI_AES_PMS_CONSTRAIN_0_REG",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_APBPERI_AES_PMS_CONSTRAIN_LOCK": {
    +                    "description": "dma_apbperi_aes_pms_constrain_lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_APBPERI_AES_PMS_CONSTRAIN_1": {
    +              "description": "SENSITIVE_DMA_APBPERI_AES_PMS_CONSTRAIN_1_REG",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 1044735,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0": {
    +                    "description": "dma_apbperi_aes_pms_constrain_sram_world_0_pms_0",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1": {
    +                    "description": "dma_apbperi_aes_pms_constrain_sram_world_0_pms_1",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2": {
    +                    "description": "dma_apbperi_aes_pms_constrain_sram_world_0_pms_2",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3": {
    +                    "description": "dma_apbperi_aes_pms_constrain_sram_world_0_pms_3",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0": {
    +                    "description": "dma_apbperi_aes_pms_constrain_sram_world_1_pms_0",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1": {
    +                    "description": "dma_apbperi_aes_pms_constrain_sram_world_1_pms_1",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2": {
    +                    "description": "dma_apbperi_aes_pms_constrain_sram_world_1_pms_2",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3": {
    +                    "description": "dma_apbperi_aes_pms_constrain_sram_world_1_pms_3",
    +                    "offset": 18,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_APBPERI_SHA_PMS_CONSTRAIN_0": {
    +              "description": "SENSITIVE_DMA_APBPERI_SHA_PMS_CONSTRAIN_0_REG",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_APBPERI_SHA_PMS_CONSTRAIN_LOCK": {
    +                    "description": "dma_apbperi_sha_pms_constrain_lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_APBPERI_SHA_PMS_CONSTRAIN_1": {
    +              "description": "SENSITIVE_DMA_APBPERI_SHA_PMS_CONSTRAIN_1_REG",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 1044735,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0": {
    +                    "description": "dma_apbperi_sha_pms_constrain_sram_world_0_pms_0",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1": {
    +                    "description": "dma_apbperi_sha_pms_constrain_sram_world_0_pms_1",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2": {
    +                    "description": "dma_apbperi_sha_pms_constrain_sram_world_0_pms_2",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3": {
    +                    "description": "dma_apbperi_sha_pms_constrain_sram_world_0_pms_3",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0": {
    +                    "description": "dma_apbperi_sha_pms_constrain_sram_world_1_pms_0",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1": {
    +                    "description": "dma_apbperi_sha_pms_constrain_sram_world_1_pms_1",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2": {
    +                    "description": "dma_apbperi_sha_pms_constrain_sram_world_1_pms_2",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3": {
    +                    "description": "dma_apbperi_sha_pms_constrain_sram_world_1_pms_3",
    +                    "offset": 18,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_0": {
    +              "description": "SENSITIVE_DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_0_REG",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_LOCK": {
    +                    "description": "dma_apbperi_adc_dac_pms_constrain_lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_1": {
    +              "description": "SENSITIVE_DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_1_REG",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 1044735,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0": {
    +                    "description": "dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_0",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1": {
    +                    "description": "dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_1",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2": {
    +                    "description": "dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_2",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3": {
    +                    "description": "dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_3",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0": {
    +                    "description": "dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_0",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1": {
    +                    "description": "dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_1",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2": {
    +                    "description": "dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_2",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3": {
    +                    "description": "dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_3",
    +                    "offset": 18,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_APBPERI_PMS_MONITOR_0": {
    +              "description": "SENSITIVE_DMA_APBPERI_PMS_MONITOR_0_REG",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_APBPERI_PMS_MONITOR_LOCK": {
    +                    "description": "dma_apbperi_pms_monitor_lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_APBPERI_PMS_MONITOR_1": {
    +              "description": "SENSITIVE_DMA_APBPERI_PMS_MONITOR_1_REG",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 3,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_APBPERI_PMS_MONITOR_VIOLATE_CLR": {
    +                    "description": "dma_apbperi_pms_monitor_violate_clr",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DMA_APBPERI_PMS_MONITOR_VIOLATE_EN": {
    +                    "description": "dma_apbperi_pms_monitor_violate_en",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_APBPERI_PMS_MONITOR_2": {
    +              "description": "SENSITIVE_DMA_APBPERI_PMS_MONITOR_2_REG",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR": {
    +                    "description": "dma_apbperi_pms_monitor_violate_intr",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_WORLD": {
    +                    "description": "dma_apbperi_pms_monitor_violate_status_world",
    +                    "offset": 1,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_ADDR": {
    +                    "description": "dma_apbperi_pms_monitor_violate_status_addr",
    +                    "offset": 3,
    +                    "size": 24,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_APBPERI_PMS_MONITOR_3": {
    +              "description": "SENSITIVE_DMA_APBPERI_PMS_MONITOR_3_REG",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_WR": {
    +                    "description": "dma_apbperi_pms_monitor_violate_status_wr",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_BYTEEN": {
    +                    "description": "dma_apbperi_pms_monitor_violate_status_byteen",
    +                    "offset": 1,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_0": {
    +              "description": "SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_0_REG",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_LOCK": {
    +                    "description": "core_x_iram0_dram0_dma_split_line_constrain_lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_1": {
    +              "description": "SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_1_REG",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_0": {
    +                    "description": "core_x_iram0_dram0_dma_sram_category_0",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_1": {
    +                    "description": "core_x_iram0_dram0_dma_sram_category_1",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_2": {
    +                    "description": "core_x_iram0_dram0_dma_sram_category_2",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "CORE_X_IRAM0_DRAM0_DMA_SRAM_SPLITADDR": {
    +                    "description": "core_x_iram0_dram0_dma_sram_splitaddr",
    +                    "offset": 14,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_2": {
    +              "description": "SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_2_REG",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_0": {
    +                    "description": "core_x_iram0_sram_line_0_category_0",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_1": {
    +                    "description": "core_x_iram0_sram_line_0_category_1",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_2": {
    +                    "description": "core_x_iram0_sram_line_0_category_2",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "CORE_X_IRAM0_SRAM_LINE_0_SPLITADDR": {
    +                    "description": "core_x_iram0_sram_line_0_splitaddr",
    +                    "offset": 14,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_3": {
    +              "description": "SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_3_REG",
    +              "offset": 156,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_0": {
    +                    "description": "core_x_iram0_sram_line_1_category_0",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_1": {
    +                    "description": "core_x_iram0_sram_line_1_category_1",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_2": {
    +                    "description": "core_x_iram0_sram_line_1_category_2",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "CORE_X_IRAM0_SRAM_LINE_1_SPLITADDR": {
    +                    "description": "core_x_iram0_sram_line_1_splitaddr",
    +                    "offset": 14,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_4": {
    +              "description": "SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_4_REG",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_0": {
    +                    "description": "core_x_dram0_dma_sram_line_0_category_0",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_1": {
    +                    "description": "core_x_dram0_dma_sram_line_0_category_1",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_2": {
    +                    "description": "core_x_dram0_dma_sram_line_0_category_2",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "CORE_X_DRAM0_DMA_SRAM_LINE_0_SPLITADDR": {
    +                    "description": "core_x_dram0_dma_sram_line_0_splitaddr",
    +                    "offset": 14,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_5": {
    +              "description": "SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_5_REG",
    +              "offset": 164,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_0": {
    +                    "description": "core_x_dram0_dma_sram_line_1_category_0",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_1": {
    +                    "description": "core_x_dram0_dma_sram_line_1_category_1",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_2": {
    +                    "description": "core_x_dram0_dma_sram_line_1_category_2",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "CORE_X_DRAM0_DMA_SRAM_LINE_1_SPLITADDR": {
    +                    "description": "core_x_dram0_dma_sram_line_1_splitaddr",
    +                    "offset": 14,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_X_IRAM0_PMS_CONSTRAIN_0": {
    +              "description": "SENSITIVE_CORE_X_IRAM0_PMS_CONSTRAIN_0_REG",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_X_IRAM0_PMS_CONSTRAIN_LOCK": {
    +                    "description": "core_x_iram0_pms_constrain_lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_X_IRAM0_PMS_CONSTRAIN_1": {
    +              "description": "SENSITIVE_CORE_X_IRAM0_PMS_CONSTRAIN_1_REG",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 1867775,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0": {
    +                    "description": "core_x_iram0_pms_constrain_sram_world_1_pms_0",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1": {
    +                    "description": "core_x_iram0_pms_constrain_sram_world_1_pms_1",
    +                    "offset": 3,
    +                    "size": 3
    +                  },
    +                  "CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2": {
    +                    "description": "core_x_iram0_pms_constrain_sram_world_1_pms_2",
    +                    "offset": 6,
    +                    "size": 3
    +                  },
    +                  "CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3": {
    +                    "description": "core_x_iram0_pms_constrain_sram_world_1_pms_3",
    +                    "offset": 9,
    +                    "size": 3
    +                  },
    +                  "CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_CACHEDATAARRAY_PMS_0": {
    +                    "description": "core_x_iram0_pms_constrain_sram_world_1_cachedataarray_pms_0",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "CORE_X_IRAM0_PMS_CONSTRAIN_ROM_WORLD_1_PMS": {
    +                    "description": "core_x_iram0_pms_constrain_rom_world_1_pms",
    +                    "offset": 18,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_X_IRAM0_PMS_CONSTRAIN_2": {
    +              "description": "SENSITIVE_CORE_X_IRAM0_PMS_CONSTRAIN_2_REG",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 1867775,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0": {
    +                    "description": "core_x_iram0_pms_constrain_sram_world_0_pms_0",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1": {
    +                    "description": "core_x_iram0_pms_constrain_sram_world_0_pms_1",
    +                    "offset": 3,
    +                    "size": 3
    +                  },
    +                  "CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2": {
    +                    "description": "core_x_iram0_pms_constrain_sram_world_0_pms_2",
    +                    "offset": 6,
    +                    "size": 3
    +                  },
    +                  "CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3": {
    +                    "description": "core_x_iram0_pms_constrain_sram_world_0_pms_3",
    +                    "offset": 9,
    +                    "size": 3
    +                  },
    +                  "CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_CACHEDATAARRAY_PMS_0": {
    +                    "description": "core_x_iram0_pms_constrain_sram_world_0_cachedataarray_pms_0",
    +                    "offset": 12,
    +                    "size": 3
    +                  },
    +                  "CORE_X_IRAM0_PMS_CONSTRAIN_ROM_WORLD_0_PMS": {
    +                    "description": "core_x_iram0_pms_constrain_rom_world_0_pms",
    +                    "offset": 18,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_IRAM0_PMS_MONITOR_0": {
    +              "description": "SENSITIVE_CORE_0_IRAM0_PMS_MONITOR_0_REG",
    +              "offset": 180,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_IRAM0_PMS_MONITOR_LOCK": {
    +                    "description": "core_0_iram0_pms_monitor_lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_IRAM0_PMS_MONITOR_1": {
    +              "description": "SENSITIVE_CORE_0_IRAM0_PMS_MONITOR_1_REG",
    +              "offset": 184,
    +              "size": 32,
    +              "reset_value": 3,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_IRAM0_PMS_MONITOR_VIOLATE_CLR": {
    +                    "description": "core_0_iram0_pms_monitor_violate_clr",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CORE_0_IRAM0_PMS_MONITOR_VIOLATE_EN": {
    +                    "description": "core_0_iram0_pms_monitor_violate_en",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_IRAM0_PMS_MONITOR_2": {
    +              "description": "SENSITIVE_CORE_0_IRAM0_PMS_MONITOR_2_REG",
    +              "offset": 188,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR": {
    +                    "description": "core_0_iram0_pms_monitor_violate_intr",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_WR": {
    +                    "description": "core_0_iram0_pms_monitor_violate_status_wr",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_LOADSTORE": {
    +                    "description": "core_0_iram0_pms_monitor_violate_status_loadstore",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_WORLD": {
    +                    "description": "core_0_iram0_pms_monitor_violate_status_world",
    +                    "offset": 3,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_ADDR": {
    +                    "description": "core_0_iram0_pms_monitor_violate_status_addr",
    +                    "offset": 5,
    +                    "size": 24,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_X_DRAM0_PMS_CONSTRAIN_0": {
    +              "description": "SENSITIVE_CORE_X_DRAM0_PMS_CONSTRAIN_0_REG",
    +              "offset": 192,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_X_DRAM0_PMS_CONSTRAIN_LOCK": {
    +                    "description": "core_x_dram0_pms_constrain_lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_X_DRAM0_PMS_CONSTRAIN_1": {
    +              "description": "SENSITIVE_CORE_X_DRAM0_PMS_CONSTRAIN_1_REG",
    +              "offset": 196,
    +              "size": 32,
    +              "reset_value": 252702975,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0": {
    +                    "description": "core_x_dram0_pms_constrain_sram_world_0_pms_0",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1": {
    +                    "description": "core_x_dram0_pms_constrain_sram_world_0_pms_1",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2": {
    +                    "description": "core_x_dram0_pms_constrain_sram_world_0_pms_2",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3": {
    +                    "description": "core_x_dram0_pms_constrain_sram_world_0_pms_3",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0": {
    +                    "description": "core_x_dram0_pms_constrain_sram_world_1_pms_0",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1": {
    +                    "description": "core_x_dram0_pms_constrain_sram_world_1_pms_1",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2": {
    +                    "description": "core_x_dram0_pms_constrain_sram_world_1_pms_2",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3": {
    +                    "description": "core_x_dram0_pms_constrain_sram_world_1_pms_3",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "CORE_X_DRAM0_PMS_CONSTRAIN_ROM_WORLD_0_PMS": {
    +                    "description": "core_x_dram0_pms_constrain_rom_world_0_pms",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "CORE_X_DRAM0_PMS_CONSTRAIN_ROM_WORLD_1_PMS": {
    +                    "description": "core_x_dram0_pms_constrain_rom_world_1_pms",
    +                    "offset": 26,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_DRAM0_PMS_MONITOR_0": {
    +              "description": "SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_0_REG",
    +              "offset": 200,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_DRAM0_PMS_MONITOR_LOCK": {
    +                    "description": "core_0_dram0_pms_monitor_lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_DRAM0_PMS_MONITOR_1": {
    +              "description": "SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_1_REG",
    +              "offset": 204,
    +              "size": 32,
    +              "reset_value": 3,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_DRAM0_PMS_MONITOR_VIOLATE_CLR": {
    +                    "description": "core_0_dram0_pms_monitor_violate_clr",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CORE_0_DRAM0_PMS_MONITOR_VIOLATE_EN": {
    +                    "description": "core_0_dram0_pms_monitor_violate_en",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_DRAM0_PMS_MONITOR_2": {
    +              "description": "SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_2_REG",
    +              "offset": 208,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR": {
    +                    "description": "core_0_dram0_pms_monitor_violate_intr",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_LOCK": {
    +                    "description": "core_0_dram0_pms_monitor_violate_status_lock",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_WORLD": {
    +                    "description": "core_0_dram0_pms_monitor_violate_status_world",
    +                    "offset": 2,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_ADDR": {
    +                    "description": "core_0_dram0_pms_monitor_violate_status_addr",
    +                    "offset": 4,
    +                    "size": 24,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_DRAM0_PMS_MONITOR_3": {
    +              "description": "SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_3_REG",
    +              "offset": 212,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_WR": {
    +                    "description": "core_0_dram0_pms_monitor_violate_status_wr",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_BYTEEN": {
    +                    "description": "core_0_dram0_pms_monitor_violate_status_byteen",
    +                    "offset": 1,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_PIF_PMS_CONSTRAIN_0": {
    +              "description": "SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_0_REG",
    +              "offset": 216,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_PIF_PMS_CONSTRAIN_LOCK": {
    +                    "description": "core_0_pif_pms_constrain_lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_PIF_PMS_CONSTRAIN_1": {
    +              "description": "SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_1_REG",
    +              "offset": 220,
    +              "size": 32,
    +              "reset_value": 3473932287,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_UART": {
    +                    "description": "core_0_pif_pms_constrain_world_0_uart",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_G0SPI_1": {
    +                    "description": "core_0_pif_pms_constrain_world_0_g0spi_1",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_G0SPI_0": {
    +                    "description": "core_0_pif_pms_constrain_world_0_g0spi_0",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_GPIO": {
    +                    "description": "core_0_pif_pms_constrain_world_0_gpio",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_FE2": {
    +                    "description": "core_0_pif_pms_constrain_world_0_fe2",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_FE": {
    +                    "description": "core_0_pif_pms_constrain_world_0_fe",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_TIMER": {
    +                    "description": "core_0_pif_pms_constrain_world_0_timer",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_RTC": {
    +                    "description": "core_0_pif_pms_constrain_world_0_rtc",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_IO_MUX": {
    +                    "description": "core_0_pif_pms_constrain_world_0_io_mux",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_WDG": {
    +                    "description": "core_0_pif_pms_constrain_world_0_wdg",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_MISC": {
    +                    "description": "core_0_pif_pms_constrain_world_0_misc",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_I2C": {
    +                    "description": "core_0_pif_pms_constrain_world_0_i2c",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_UART1": {
    +                    "description": "core_0_pif_pms_constrain_world_0_uart1",
    +                    "offset": 30,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_PIF_PMS_CONSTRAIN_2": {
    +              "description": "SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_2_REG",
    +              "offset": 224,
    +              "size": 32,
    +              "reset_value": 4240641267,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_BT": {
    +                    "description": "core_0_pif_pms_constrain_world_0_bt",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_I2C_EXT0": {
    +                    "description": "core_0_pif_pms_constrain_world_0_i2c_ext0",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_UHCI0": {
    +                    "description": "core_0_pif_pms_constrain_world_0_uhci0",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_RMT": {
    +                    "description": "core_0_pif_pms_constrain_world_0_rmt",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_LEDC": {
    +                    "description": "core_0_pif_pms_constrain_world_0_ledc",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_BB": {
    +                    "description": "core_0_pif_pms_constrain_world_0_bb",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_TIMERGROUP": {
    +                    "description": "core_0_pif_pms_constrain_world_0_timergroup",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_TIMERGROUP1": {
    +                    "description": "core_0_pif_pms_constrain_world_0_timergroup1",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SYSTIMER": {
    +                    "description": "core_0_pif_pms_constrain_world_0_systimer",
    +                    "offset": 30,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_PIF_PMS_CONSTRAIN_3": {
    +              "description": "SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_3_REG",
    +              "offset": 228,
    +              "size": 32,
    +              "reset_value": 1019268147,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SPI_2": {
    +                    "description": "core_0_pif_pms_constrain_world_0_spi_2",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_APB_CTRL": {
    +                    "description": "core_0_pif_pms_constrain_world_0_apb_ctrl",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CAN": {
    +                    "description": "core_0_pif_pms_constrain_world_0_can",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_I2S1": {
    +                    "description": "core_0_pif_pms_constrain_world_0_i2s1",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_RWBT": {
    +                    "description": "core_0_pif_pms_constrain_world_0_rwbt",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_WIFIMAC": {
    +                    "description": "core_0_pif_pms_constrain_world_0_wifimac",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_PWR": {
    +                    "description": "core_0_pif_pms_constrain_world_0_pwr",
    +                    "offset": 28,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_PIF_PMS_CONSTRAIN_4": {
    +              "description": "SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_4_REG",
    +              "offset": 232,
    +              "size": 32,
    +              "reset_value": 4294964220,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_USB_WRAP": {
    +                    "description": "core_0_pif_pms_constrain_world_0_usb_wrap",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CRYPTO_PERI": {
    +                    "description": "core_0_pif_pms_constrain_world_0_crypto_peri",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CRYPTO_DMA": {
    +                    "description": "core_0_pif_pms_constrain_world_0_crypto_dma",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_APB_ADC": {
    +                    "description": "core_0_pif_pms_constrain_world_0_apb_adc",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_BT_PWR": {
    +                    "description": "core_0_pif_pms_constrain_world_0_bt_pwr",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_USB_DEVICE": {
    +                    "description": "core_0_pif_pms_constrain_world_0_usb_device",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SYSTEM": {
    +                    "description": "core_0_pif_pms_constrain_world_0_system",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SENSITIVE": {
    +                    "description": "core_0_pif_pms_constrain_world_0_sensitive",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_INTERRUPT": {
    +                    "description": "core_0_pif_pms_constrain_world_0_interrupt",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_DMA_COPY": {
    +                    "description": "core_0_pif_pms_constrain_world_0_dma_copy",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CACHE_CONFIG": {
    +                    "description": "core_0_pif_pms_constrain_world_0_cache_config",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_AD": {
    +                    "description": "core_0_pif_pms_constrain_world_0_ad",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_DIO": {
    +                    "description": "core_0_pif_pms_constrain_world_0_dio",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_WORLD_CONTROLLER": {
    +                    "description": "core_0_pif_pms_constrain_world_0_world_controller",
    +                    "offset": 30,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_PIF_PMS_CONSTRAIN_5": {
    +              "description": "SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_5_REG",
    +              "offset": 236,
    +              "size": 32,
    +              "reset_value": 3473932287,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_UART": {
    +                    "description": "core_0_pif_pms_constrain_world_1_uart",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_G0SPI_1": {
    +                    "description": "core_0_pif_pms_constrain_world_1_g0spi_1",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_G0SPI_0": {
    +                    "description": "core_0_pif_pms_constrain_world_1_g0spi_0",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_GPIO": {
    +                    "description": "core_0_pif_pms_constrain_world_1_gpio",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_FE2": {
    +                    "description": "core_0_pif_pms_constrain_world_1_fe2",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_FE": {
    +                    "description": "core_0_pif_pms_constrain_world_1_fe",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_TIMER": {
    +                    "description": "core_0_pif_pms_constrain_world_1_timer",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_RTC": {
    +                    "description": "core_0_pif_pms_constrain_world_1_rtc",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_IO_MUX": {
    +                    "description": "core_0_pif_pms_constrain_world_1_io_mux",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_WDG": {
    +                    "description": "core_0_pif_pms_constrain_world_1_wdg",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_MISC": {
    +                    "description": "core_0_pif_pms_constrain_world_1_misc",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_I2C": {
    +                    "description": "core_0_pif_pms_constrain_world_1_i2c",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_UART1": {
    +                    "description": "core_0_pif_pms_constrain_world_1_uart1",
    +                    "offset": 30,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_PIF_PMS_CONSTRAIN_6": {
    +              "description": "SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_6_REG",
    +              "offset": 240,
    +              "size": 32,
    +              "reset_value": 4240641267,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_BT": {
    +                    "description": "core_0_pif_pms_constrain_world_1_bt",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_I2C_EXT0": {
    +                    "description": "core_0_pif_pms_constrain_world_1_i2c_ext0",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_UHCI0": {
    +                    "description": "core_0_pif_pms_constrain_world_1_uhci0",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_RMT": {
    +                    "description": "core_0_pif_pms_constrain_world_1_rmt",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_LEDC": {
    +                    "description": "core_0_pif_pms_constrain_world_1_ledc",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_BB": {
    +                    "description": "core_0_pif_pms_constrain_world_1_bb",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_TIMERGROUP": {
    +                    "description": "core_0_pif_pms_constrain_world_1_timergroup",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_TIMERGROUP1": {
    +                    "description": "core_0_pif_pms_constrain_world_1_timergroup1",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SYSTIMER": {
    +                    "description": "core_0_pif_pms_constrain_world_1_systimer",
    +                    "offset": 30,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_PIF_PMS_CONSTRAIN_7": {
    +              "description": "SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_7_REG",
    +              "offset": 244,
    +              "size": 32,
    +              "reset_value": 1019268147,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SPI_2": {
    +                    "description": "core_0_pif_pms_constrain_world_1_spi_2",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_APB_CTRL": {
    +                    "description": "core_0_pif_pms_constrain_world_1_apb_ctrl",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CAN": {
    +                    "description": "core_0_pif_pms_constrain_world_1_can",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_I2S1": {
    +                    "description": "core_0_pif_pms_constrain_world_1_i2s1",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_RWBT": {
    +                    "description": "core_0_pif_pms_constrain_world_1_rwbt",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_WIFIMAC": {
    +                    "description": "core_0_pif_pms_constrain_world_1_wifimac",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_PWR": {
    +                    "description": "core_0_pif_pms_constrain_world_1_pwr",
    +                    "offset": 28,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_PIF_PMS_CONSTRAIN_8": {
    +              "description": "SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_8_REG",
    +              "offset": 248,
    +              "size": 32,
    +              "reset_value": 4294964220,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_USB_WRAP": {
    +                    "description": "core_0_pif_pms_constrain_world_1_usb_wrap",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CRYPTO_PERI": {
    +                    "description": "core_0_pif_pms_constrain_world_1_crypto_peri",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CRYPTO_DMA": {
    +                    "description": "core_0_pif_pms_constrain_world_1_crypto_dma",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_APB_ADC": {
    +                    "description": "core_0_pif_pms_constrain_world_1_apb_adc",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_BT_PWR": {
    +                    "description": "core_0_pif_pms_constrain_world_1_bt_pwr",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_USB_DEVICE": {
    +                    "description": "core_0_pif_pms_constrain_world_1_usb_device",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SYSTEM": {
    +                    "description": "core_0_pif_pms_constrain_world_1_system",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SENSITIVE": {
    +                    "description": "core_0_pif_pms_constrain_world_1_sensitive",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_INTERRUPT": {
    +                    "description": "core_0_pif_pms_constrain_world_1_interrupt",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_DMA_COPY": {
    +                    "description": "core_0_pif_pms_constrain_world_1_dma_copy",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CACHE_CONFIG": {
    +                    "description": "core_0_pif_pms_constrain_world_1_cache_config",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_AD": {
    +                    "description": "core_0_pif_pms_constrain_world_1_ad",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_DIO": {
    +                    "description": "core_0_pif_pms_constrain_world_1_dio",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_WORLD_CONTROLLER": {
    +                    "description": "core_0_pif_pms_constrain_world_1_world_controller",
    +                    "offset": 30,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_PIF_PMS_CONSTRAIN_9": {
    +              "description": "SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_9_REG",
    +              "offset": 252,
    +              "size": 32,
    +              "reset_value": 4194303,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_SPLTADDR_WORLD_0": {
    +                    "description": "core_0_pif_pms_constrain_rtcfast_spltaddr_world_0",
    +                    "offset": 0,
    +                    "size": 11
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_SPLTADDR_WORLD_1": {
    +                    "description": "core_0_pif_pms_constrain_rtcfast_spltaddr_world_1",
    +                    "offset": 11,
    +                    "size": 11
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_PIF_PMS_CONSTRAIN_10": {
    +              "description": "SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_10_REG",
    +              "offset": 256,
    +              "size": 32,
    +              "reset_value": 4095,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_0_L": {
    +                    "description": "core_0_pif_pms_constrain_rtcfast_world_0_l",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_0_H": {
    +                    "description": "core_0_pif_pms_constrain_rtcfast_world_0_h",
    +                    "offset": 3,
    +                    "size": 3
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_1_L": {
    +                    "description": "core_0_pif_pms_constrain_rtcfast_world_1_l",
    +                    "offset": 6,
    +                    "size": 3
    +                  },
    +                  "CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_1_H": {
    +                    "description": "core_0_pif_pms_constrain_rtcfast_world_1_h",
    +                    "offset": 9,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "REGION_PMS_CONSTRAIN_0": {
    +              "description": "SENSITIVE_REGION_PMS_CONSTRAIN_0_REG",
    +              "offset": 260,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION_PMS_CONSTRAIN_LOCK": {
    +                    "description": "region_pms_constrain_lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "REGION_PMS_CONSTRAIN_1": {
    +              "description": "SENSITIVE_REGION_PMS_CONSTRAIN_1_REG",
    +              "offset": 264,
    +              "size": 32,
    +              "reset_value": 16383,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION_PMS_CONSTRAIN_WORLD_0_AREA_0": {
    +                    "description": "region_pms_constrain_world_0_area_0",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "REGION_PMS_CONSTRAIN_WORLD_0_AREA_1": {
    +                    "description": "region_pms_constrain_world_0_area_1",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "REGION_PMS_CONSTRAIN_WORLD_0_AREA_2": {
    +                    "description": "region_pms_constrain_world_0_area_2",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "REGION_PMS_CONSTRAIN_WORLD_0_AREA_3": {
    +                    "description": "region_pms_constrain_world_0_area_3",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "REGION_PMS_CONSTRAIN_WORLD_0_AREA_4": {
    +                    "description": "region_pms_constrain_world_0_area_4",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "REGION_PMS_CONSTRAIN_WORLD_0_AREA_5": {
    +                    "description": "region_pms_constrain_world_0_area_5",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "REGION_PMS_CONSTRAIN_WORLD_0_AREA_6": {
    +                    "description": "region_pms_constrain_world_0_area_6",
    +                    "offset": 12,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "REGION_PMS_CONSTRAIN_2": {
    +              "description": "SENSITIVE_REGION_PMS_CONSTRAIN_2_REG",
    +              "offset": 268,
    +              "size": 32,
    +              "reset_value": 16383,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION_PMS_CONSTRAIN_WORLD_1_AREA_0": {
    +                    "description": "region_pms_constrain_world_1_area_0",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "REGION_PMS_CONSTRAIN_WORLD_1_AREA_1": {
    +                    "description": "region_pms_constrain_world_1_area_1",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "REGION_PMS_CONSTRAIN_WORLD_1_AREA_2": {
    +                    "description": "region_pms_constrain_world_1_area_2",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "REGION_PMS_CONSTRAIN_WORLD_1_AREA_3": {
    +                    "description": "region_pms_constrain_world_1_area_3",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "REGION_PMS_CONSTRAIN_WORLD_1_AREA_4": {
    +                    "description": "region_pms_constrain_world_1_area_4",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "REGION_PMS_CONSTRAIN_WORLD_1_AREA_5": {
    +                    "description": "region_pms_constrain_world_1_area_5",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "REGION_PMS_CONSTRAIN_WORLD_1_AREA_6": {
    +                    "description": "region_pms_constrain_world_1_area_6",
    +                    "offset": 12,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "REGION_PMS_CONSTRAIN_3": {
    +              "description": "SENSITIVE_REGION_PMS_CONSTRAIN_3_REG",
    +              "offset": 272,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION_PMS_CONSTRAIN_ADDR_0": {
    +                    "description": "region_pms_constrain_addr_0",
    +                    "offset": 0,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "REGION_PMS_CONSTRAIN_4": {
    +              "description": "SENSITIVE_REGION_PMS_CONSTRAIN_4_REG",
    +              "offset": 276,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION_PMS_CONSTRAIN_ADDR_1": {
    +                    "description": "region_pms_constrain_addr_1",
    +                    "offset": 0,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "REGION_PMS_CONSTRAIN_5": {
    +              "description": "SENSITIVE_REGION_PMS_CONSTRAIN_5_REG",
    +              "offset": 280,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION_PMS_CONSTRAIN_ADDR_2": {
    +                    "description": "region_pms_constrain_addr_2",
    +                    "offset": 0,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "REGION_PMS_CONSTRAIN_6": {
    +              "description": "SENSITIVE_REGION_PMS_CONSTRAIN_6_REG",
    +              "offset": 284,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION_PMS_CONSTRAIN_ADDR_3": {
    +                    "description": "region_pms_constrain_addr_3",
    +                    "offset": 0,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "REGION_PMS_CONSTRAIN_7": {
    +              "description": "SENSITIVE_REGION_PMS_CONSTRAIN_7_REG",
    +              "offset": 288,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION_PMS_CONSTRAIN_ADDR_4": {
    +                    "description": "region_pms_constrain_addr_4",
    +                    "offset": 0,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "REGION_PMS_CONSTRAIN_8": {
    +              "description": "SENSITIVE_REGION_PMS_CONSTRAIN_8_REG",
    +              "offset": 292,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION_PMS_CONSTRAIN_ADDR_5": {
    +                    "description": "region_pms_constrain_addr_5",
    +                    "offset": 0,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "REGION_PMS_CONSTRAIN_9": {
    +              "description": "SENSITIVE_REGION_PMS_CONSTRAIN_9_REG",
    +              "offset": 296,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION_PMS_CONSTRAIN_ADDR_6": {
    +                    "description": "region_pms_constrain_addr_6",
    +                    "offset": 0,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "REGION_PMS_CONSTRAIN_10": {
    +              "description": "SENSITIVE_REGION_PMS_CONSTRAIN_10_REG",
    +              "offset": 300,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REGION_PMS_CONSTRAIN_ADDR_7": {
    +                    "description": "region_pms_constrain_addr_7",
    +                    "offset": 0,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_PIF_PMS_MONITOR_0": {
    +              "description": "SENSITIVE_CORE_0_PIF_PMS_MONITOR_0_REG",
    +              "offset": 304,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_PIF_PMS_MONITOR_LOCK": {
    +                    "description": "core_0_pif_pms_monitor_lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_PIF_PMS_MONITOR_1": {
    +              "description": "SENSITIVE_CORE_0_PIF_PMS_MONITOR_1_REG",
    +              "offset": 308,
    +              "size": 32,
    +              "reset_value": 3,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_PIF_PMS_MONITOR_VIOLATE_CLR": {
    +                    "description": "core_0_pif_pms_monitor_violate_clr",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CORE_0_PIF_PMS_MONITOR_VIOLATE_EN": {
    +                    "description": "core_0_pif_pms_monitor_violate_en",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_PIF_PMS_MONITOR_2": {
    +              "description": "SENSITIVE_CORE_0_PIF_PMS_MONITOR_2_REG",
    +              "offset": 312,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR": {
    +                    "description": "core_0_pif_pms_monitor_violate_intr",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HPORT_0": {
    +                    "description": "core_0_pif_pms_monitor_violate_status_hport_0",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HSIZE": {
    +                    "description": "core_0_pif_pms_monitor_violate_status_hsize",
    +                    "offset": 2,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HWRITE": {
    +                    "description": "core_0_pif_pms_monitor_violate_status_hwrite",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HWORLD": {
    +                    "description": "core_0_pif_pms_monitor_violate_status_hworld",
    +                    "offset": 6,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_PIF_PMS_MONITOR_3": {
    +              "description": "SENSITIVE_CORE_0_PIF_PMS_MONITOR_3_REG",
    +              "offset": 316,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HADDR": {
    +                    "description": "core_0_pif_pms_monitor_violate_status_haddr",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_PIF_PMS_MONITOR_4": {
    +              "description": "SENSITIVE_CORE_0_PIF_PMS_MONITOR_4_REG",
    +              "offset": 320,
    +              "size": 32,
    +              "reset_value": 3,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_CLR": {
    +                    "description": "core_0_pif_pms_monitor_nonword_violate_clr",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_EN": {
    +                    "description": "core_0_pif_pms_monitor_nonword_violate_en",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_PIF_PMS_MONITOR_5": {
    +              "description": "SENSITIVE_CORE_0_PIF_PMS_MONITOR_5_REG",
    +              "offset": 324,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_INTR": {
    +                    "description": "core_0_pif_pms_monitor_nonword_violate_intr",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_STATUS_HSIZE": {
    +                    "description": "core_0_pif_pms_monitor_nonword_violate_status_hsize",
    +                    "offset": 1,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_STATUS_HWORLD": {
    +                    "description": "core_0_pif_pms_monitor_nonword_violate_status_hworld",
    +                    "offset": 3,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_0_PIF_PMS_MONITOR_6": {
    +              "description": "SENSITIVE_CORE_0_PIF_PMS_MONITOR_6_REG",
    +              "offset": 328,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_STATUS_HADDR": {
    +                    "description": "core_0_pif_pms_monitor_nonword_violate_status_haddr",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "BACKUP_BUS_PMS_CONSTRAIN_0": {
    +              "description": "SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_0_REG",
    +              "offset": 332,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BACKUP_BUS_PMS_CONSTRAIN_LOCK": {
    +                    "description": "backup_bus_pms_constrain_lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BACKUP_BUS_PMS_CONSTRAIN_1": {
    +              "description": "SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_1_REG",
    +              "offset": 336,
    +              "size": 32,
    +              "reset_value": 3473932287,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BACKUP_BUS_PMS_CONSTRAIN_UART": {
    +                    "description": "backup_bus_pms_constrain_uart",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_G0SPI_1": {
    +                    "description": "backup_bus_pms_constrain_g0spi_1",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_G0SPI_0": {
    +                    "description": "backup_bus_pms_constrain_g0spi_0",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_GPIO": {
    +                    "description": "backup_bus_pms_constrain_gpio",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_FE2": {
    +                    "description": "backup_bus_pms_constrain_fe2",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_FE": {
    +                    "description": "backup_bus_pms_constrain_fe",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_TIMER": {
    +                    "description": "backup_bus_pms_constrain_timer",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_RTC": {
    +                    "description": "backup_bus_pms_constrain_rtc",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_IO_MUX": {
    +                    "description": "backup_bus_pms_constrain_io_mux",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_WDG": {
    +                    "description": "backup_bus_pms_constrain_wdg",
    +                    "offset": 18,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_MISC": {
    +                    "description": "backup_bus_pms_constrain_misc",
    +                    "offset": 24,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_I2C": {
    +                    "description": "backup_bus_pms_constrain_i2c",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_UART1": {
    +                    "description": "backup_bus_pms_constrain_uart1",
    +                    "offset": 30,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "BACKUP_BUS_PMS_CONSTRAIN_2": {
    +              "description": "SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_2_REG",
    +              "offset": 340,
    +              "size": 32,
    +              "reset_value": 4240641267,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BACKUP_BUS_PMS_CONSTRAIN_BT": {
    +                    "description": "backup_bus_pms_constrain_bt",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_I2C_EXT0": {
    +                    "description": "backup_bus_pms_constrain_i2c_ext0",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_UHCI0": {
    +                    "description": "backup_bus_pms_constrain_uhci0",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_RMT": {
    +                    "description": "backup_bus_pms_constrain_rmt",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_LEDC": {
    +                    "description": "backup_bus_pms_constrain_ledc",
    +                    "offset": 16,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_BB": {
    +                    "description": "backup_bus_pms_constrain_bb",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_TIMERGROUP": {
    +                    "description": "backup_bus_pms_constrain_timergroup",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_TIMERGROUP1": {
    +                    "description": "backup_bus_pms_constrain_timergroup1",
    +                    "offset": 28,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_SYSTIMER": {
    +                    "description": "backup_bus_pms_constrain_systimer",
    +                    "offset": 30,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "BACKUP_BUS_PMS_CONSTRAIN_3": {
    +              "description": "SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_3_REG",
    +              "offset": 344,
    +              "size": 32,
    +              "reset_value": 1019268147,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BACKUP_BUS_PMS_CONSTRAIN_SPI_2": {
    +                    "description": "backup_bus_pms_constrain_spi_2",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_APB_CTRL": {
    +                    "description": "backup_bus_pms_constrain_apb_ctrl",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_CAN": {
    +                    "description": "backup_bus_pms_constrain_can",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_I2S1": {
    +                    "description": "backup_bus_pms_constrain_i2s1",
    +                    "offset": 14,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_RWBT": {
    +                    "description": "backup_bus_pms_constrain_rwbt",
    +                    "offset": 22,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_WIFIMAC": {
    +                    "description": "backup_bus_pms_constrain_wifimac",
    +                    "offset": 26,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_PWR": {
    +                    "description": "backup_bus_pms_constrain_pwr",
    +                    "offset": 28,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "BACKUP_BUS_PMS_CONSTRAIN_4": {
    +              "description": "SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_4_REG",
    +              "offset": 348,
    +              "size": 32,
    +              "reset_value": 62460,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BACKUP_BUS_PMS_CONSTRAIN_USB_WRAP": {
    +                    "description": "backup_bus_pms_constrain_usb_wrap",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_CRYPTO_PERI": {
    +                    "description": "backup_bus_pms_constrain_crypto_peri",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_CRYPTO_DMA": {
    +                    "description": "backup_bus_pms_constrain_crypto_dma",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_APB_ADC": {
    +                    "description": "backup_bus_pms_constrain_apb_adc",
    +                    "offset": 8,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_BT_PWR": {
    +                    "description": "backup_bus_pms_constrain_bt_pwr",
    +                    "offset": 12,
    +                    "size": 2
    +                  },
    +                  "BACKUP_BUS_PMS_CONSTRAIN_USB_DEVICE": {
    +                    "description": "backup_bus_pms_constrain_usb_device",
    +                    "offset": 14,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "BACKUP_BUS_PMS_MONITOR_0": {
    +              "description": "SENSITIVE_BACKUP_BUS_PMS_MONITOR_0_REG",
    +              "offset": 352,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BACKUP_BUS_PMS_MONITOR_LOCK": {
    +                    "description": "backup_bus_pms_monitor_lock",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BACKUP_BUS_PMS_MONITOR_1": {
    +              "description": "SENSITIVE_BACKUP_BUS_PMS_MONITOR_1_REG",
    +              "offset": 356,
    +              "size": 32,
    +              "reset_value": 3,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BACKUP_BUS_PMS_MONITOR_VIOLATE_CLR": {
    +                    "description": "backup_bus_pms_monitor_violate_clr",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "BACKUP_BUS_PMS_MONITOR_VIOLATE_EN": {
    +                    "description": "backup_bus_pms_monitor_violate_en",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BACKUP_BUS_PMS_MONITOR_2": {
    +              "description": "SENSITIVE_BACKUP_BUS_PMS_MONITOR_2_REG",
    +              "offset": 360,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BACKUP_BUS_PMS_MONITOR_VIOLATE_INTR": {
    +                    "description": "backup_bus_pms_monitor_violate_intr",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BACKUP_BUS_PMS_MONITOR_VIOLATE_STATUS_HTRANS": {
    +                    "description": "backup_bus_pms_monitor_violate_status_htrans",
    +                    "offset": 1,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "BACKUP_BUS_PMS_MONITOR_VIOLATE_STATUS_HSIZE": {
    +                    "description": "backup_bus_pms_monitor_violate_status_hsize",
    +                    "offset": 3,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "BACKUP_BUS_PMS_MONITOR_VIOLATE_STATUS_HWRITE": {
    +                    "description": "backup_bus_pms_monitor_violate_status_hwrite",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "BACKUP_BUS_PMS_MONITOR_3": {
    +              "description": "SENSITIVE_BACKUP_BUS_PMS_MONITOR_3_REG",
    +              "offset": 364,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BACKUP_BUS_PMS_MONITOR_VIOLATE_HADDR": {
    +                    "description": "backup_bus_pms_monitor_violate_haddr",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CLOCK_GATE": {
    +              "description": "SENSITIVE_CLOCK_GATE_REG",
    +              "offset": 368,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLK_EN": {
    +                    "description": "clk_en",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DATE": {
    +              "description": "SENSITIVE_DATE_REG",
    +              "offset": 4092,
    +              "size": 32,
    +              "reset_value": 33620480,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATE": {
    +                    "description": "reg_date",
    +                    "offset": 0,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SHA": {
    +        "description": "SHA (Secure Hash Algorithm) Accelerator",
    +        "children": {
    +          "registers": {
    +            "MODE": {
    +              "description": "Initial configuration register.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MODE": {
    +                    "description": "Sha mode.",
    +                    "offset": 0,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "T_STRING": {
    +              "description": "SHA 512/t configuration register 0.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "T_STRING": {
    +                    "description": "Sha t_string (used if and only if mode == SHA_512/t).",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "T_LENGTH": {
    +              "description": "SHA 512/t configuration register 1.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "T_LENGTH": {
    +                    "description": "Sha t_length (used if and only if mode == SHA_512/t).",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_BLOCK_NUM": {
    +              "description": "DMA configuration register 0.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_BLOCK_NUM": {
    +                    "description": "Dma-sha block number.",
    +                    "offset": 0,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "START": {
    +              "description": "Typical SHA configuration register 0.",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "START": {
    +                    "description": "Reserved.",
    +                    "offset": 1,
    +                    "size": 31,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CONTINUE": {
    +              "description": "Typical SHA configuration register 1.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CONTINUE": {
    +                    "description": "Reserved.",
    +                    "offset": 1,
    +                    "size": 31,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "BUSY": {
    +              "description": "Busy register.",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STATE": {
    +                    "description": "Sha busy state. 1'b0: idle. 1'b1: busy.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_START": {
    +              "description": "DMA configuration register 1.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_START": {
    +                    "description": "Start dma-sha.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_CONTINUE": {
    +              "description": "DMA configuration register 2.",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_CONTINUE": {
    +                    "description": "Continue dma-sha.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CLEAR_IRQ": {
    +              "description": "Interrupt clear register.",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLEAR_INTERRUPT": {
    +                    "description": "Clear sha interrupt.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IRQ_ENA": {
    +              "description": "Interrupt enable register.",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "INTERRUPT_ENA": {
    +                    "description": "Sha interrupt enable register. 1'b0: disable(default). 1'b1: enable.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DATE": {
    +              "description": "Date register.",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 538969622,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATE": {
    +                    "description": "Sha date information/ sha version information.",
    +                    "offset": 0,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "H_MEM": {
    +              "description": "Sha H memory which contains intermediate hash or finial hash.",
    +              "offset": 64,
    +              "size": 8,
    +              "count": 64,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "M_MEM": {
    +              "description": "Sha M memory which contains message.",
    +              "offset": 128,
    +              "size": 8,
    +              "count": 64,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            }
    +          }
    +        }
    +      },
    +      "SPI0": {
    +        "description": "SPI (Serial Peripheral Interface) Controller",
    +        "children": {
    +          "registers": {
    +            "CTRL": {
    +              "description": "SPI0 control register.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 2891776,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FDUMMY_OUT": {
    +                    "description": "In the dummy phase the signal level of spi is output by the spi controller.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FCMD_DUAL": {
    +                    "description": "Apply 2 signals during command phase 1:enable 0: disable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FCMD_QUAD": {
    +                    "description": "Apply 4 signals during command phase 1:enable 0: disable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FASTRD_MODE": {
    +                    "description": "This bit enable the bits: spi_mem_fread_qio, spi_mem_fread_dio, spi_mem_fread_qout and spi_mem_fread_dout. 1: enable 0: disable.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FREAD_DUAL": {
    +                    "description": "In the read operations, read-data phase apply 2 signals. 1: enable 0: disable.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "Q_POL": {
    +                    "description": "The bit is used to set MISO line polarity, 1: high 0, low",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "D_POL": {
    +                    "description": "The bit is used to set MOSI line polarity, 1: high 0, low",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FREAD_QUAD": {
    +                    "description": "In the read operations read-data phase apply 4 signals. 1: enable 0: disable.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "WP": {
    +                    "description": "Write protect signal output when SPI is idle.  1: output high, 0: output low.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FREAD_DIO": {
    +                    "description": "In the read operations address phase and read-data phase apply 2 signals. 1: enable 0: disable.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FREAD_QIO": {
    +                    "description": "In the read operations address phase and read-data phase apply 4 signals. 1: enable 0: disable.",
    +                    "offset": 24,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CTRL1": {
    +              "description": "SPI0 control1 register.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLK_MODE": {
    +                    "description": "SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is alwasy on.",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "RXFIFO_RST": {
    +                    "description": "SPI0 RX FIFO reset signal.",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CTRL2": {
    +              "description": "SPI0 control2 register.",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 33,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CS_SETUP_TIME": {
    +                    "description": "(cycles-1) of prepare phase by spi clock this bits are combined with spi_mem_cs_setup bit.",
    +                    "offset": 0,
    +                    "size": 5
    +                  },
    +                  "CS_HOLD_TIME": {
    +                    "description": "Spi cs signal is delayed to inactive by spi clock this bits are combined with spi_mem_cs_hold bit.",
    +                    "offset": 5,
    +                    "size": 5
    +                  },
    +                  "CS_HOLD_DELAY": {
    +                    "description": "These bits are used to set the minimum CS high time tSHSL between SPI burst transfer when accesses to flash. tSHSL is (SPI_MEM_CS_HOLD_DELAY[5:0] + 1) MSPI core clock cycles.",
    +                    "offset": 25,
    +                    "size": 6
    +                  },
    +                  "SYNC_RESET": {
    +                    "description": "The FSM will be reset.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CLOCK": {
    +              "description": "SPI clock division control register.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 196867,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLKCNT_L": {
    +                    "description": "In the master mode it must be equal to spi_mem_clkcnt_N.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "CLKCNT_H": {
    +                    "description": "In the master mode it must be floor((spi_mem_clkcnt_N+1)/2-1).",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "CLKCNT_N": {
    +                    "description": "In the master mode it is the divider of spi_mem_clk. So spi_mem_clk frequency is system/(spi_mem_clkcnt_N+1)",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "CLK_EQU_SYSCLK": {
    +                    "description": "Set this bit in 1-division mode.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "USER": {
    +              "description": "SPI0 user register.",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CS_HOLD": {
    +                    "description": "spi cs keep low when spi is in  done  phase. 1: enable 0: disable.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CS_SETUP": {
    +                    "description": "spi cs is enable when spi is in  prepare  phase. 1: enable 0: disable.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "CK_OUT_EDGE": {
    +                    "description": "the bit combined with spi_mem_mosi_delay_mode bits to set mosi signal delay mode.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "USR_DUMMY_IDLE": {
    +                    "description": "spi clock is disable in dummy phase when the bit is enable.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "USR_DUMMY": {
    +                    "description": "This bit enable the dummy phase of an operation.",
    +                    "offset": 29,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "USER1": {
    +              "description": "SPI0 user1 register.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 1543503879,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "USR_DUMMY_CYCLELEN": {
    +                    "description": "The length in spi_mem_clk cycles of dummy phase. The register value shall be (cycle_num-1).",
    +                    "offset": 0,
    +                    "size": 6
    +                  },
    +                  "USR_ADDR_BITLEN": {
    +                    "description": "The length in bits of address phase. The register value shall be (bit_num-1).",
    +                    "offset": 26,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "USER2": {
    +              "description": "SPI0 user2 register.",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 1879048192,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "USR_COMMAND_VALUE": {
    +                    "description": "The value of  command.",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "USR_COMMAND_BITLEN": {
    +                    "description": "The length in bits of command phase. The register value shall be (bit_num-1)",
    +                    "offset": 28,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "RD_STATUS": {
    +              "description": "SPI0 read control register.",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WB_MODE": {
    +                    "description": "Mode bits in the flash fast read mode  it is combined with spi_mem_fastrd_mode bit.",
    +                    "offset": 16,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "MISC": {
    +              "description": "SPI0 misc register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TRANS_END": {
    +                    "description": "The bit is used to indicate the  spi0_mst_st controlled transmitting is done.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TRANS_END_INT_ENA": {
    +                    "description": "The bit is used to enable the interrupt of  spi0_mst_st controlled transmitting is done.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CSPI_ST_TRANS_END": {
    +                    "description": "The bit is used to indicate the  spi0_slv_st controlled transmitting is done.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CSPI_ST_TRANS_END_INT_ENA": {
    +                    "description": "The bit is used to enable the interrupt of spi0_slv_st controlled transmitting is done.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CK_IDLE_EDGE": {
    +                    "description": "1: spi clk line is high when idle     0: spi clk line is low when idle",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CS_KEEP_ACTIVE": {
    +                    "description": "spi cs line keep low when the bit is set.",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CACHE_FCTRL": {
    +              "description": "SPI0 bit mode control register.",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CACHE_REQ_EN": {
    +                    "description": "For SPI0, Cache access enable, 1: enable, 0:disable.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CACHE_USR_ADDR_4BYTE": {
    +                    "description": "For SPI0,  cache  read flash with 4 bytes address, 1: enable, 0:disable.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CACHE_FLASH_USR_CMD": {
    +                    "description": "For SPI0,  cache  read flash for user define command, 1: enable, 0:disable.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FDIN_DUAL": {
    +                    "description": "For SPI0 flash, din phase apply 2 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_dio.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FDOUT_DUAL": {
    +                    "description": "For SPI0 flash, dout phase apply 2 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_dio.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FADDR_DUAL": {
    +                    "description": "For SPI0 flash, address phase apply 2 signals. 1: enable 0: disable.  The bit is the same with spi_mem_fread_dio.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FDIN_QUAD": {
    +                    "description": "For SPI0 flash, din phase apply 4 signals. 1: enable 0: disable.  The bit is the same with spi_mem_fread_qio.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FDOUT_QUAD": {
    +                    "description": "For SPI0 flash, dout phase apply 4 signals. 1: enable 0: disable.  The bit is the same with spi_mem_fread_qio.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FADDR_QUAD": {
    +                    "description": "For SPI0 flash, address phase apply 4 signals. 1: enable 0: disable.  The bit is the same with spi_mem_fread_qio.",
    +                    "offset": 8,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FSM": {
    +              "description": "SPI0 FSM status register",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 512,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CSPI_ST": {
    +                    "description": "The current status of SPI0 slave FSM: spi0_slv_st. 0: idle state, 1: preparation state, 2: send command state, 3: send address state, 4: wait state, 5: read data state, 6:write data state, 7: done state, 8: read data end state.",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "EM_ST": {
    +                    "description": "The current status of SPI0 master FSM: spi0_mst_st. 0: idle state, 1:EM_CACHE_GRANT , 2: program/erase suspend state, 3: SPI0 read data state, 4: wait cache/EDMA sent data is stored in SPI0 TX FIFO, 5: SPI0 write data state.",
    +                    "offset": 4,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "CSPI_LOCK_DELAY_TIME": {
    +                    "description": "The lock delay time of SPI0/1 arbiter by spi0_slv_st, after PER is sent by SPI1.",
    +                    "offset": 7,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "TIMING_CALI": {
    +              "description": "SPI0 timing calibration register",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMING_CLK_ENA": {
    +                    "description": "The bit is used to enable timing adjust clock for all reading operations.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TIMING_CALI": {
    +                    "description": "The bit is used to enable timing auto-calibration for all reading operations.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EXTRA_DUMMY_CYCLELEN": {
    +                    "description": "add extra dummy spi clock cycle length for spi clock calibration.",
    +                    "offset": 2,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "DIN_MODE": {
    +              "description": "SPI0 input delay mode control register",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DIN0_MODE": {
    +                    "description": "the input signals are delayed by system clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb,  3: input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input with the spi_clk high edge,  6: input with the spi_clk low edge",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "DIN1_MODE": {
    +                    "description": "the input signals are delayed by system clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb,  3: input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input with the spi_clk high edge,  6: input with the spi_clk low edge",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "DIN2_MODE": {
    +                    "description": "the input signals are delayed by system clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb,  3: input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input with the spi_clk high edge,  6: input with the spi_clk low edge",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DIN3_MODE": {
    +                    "description": "the input signals are delayed by system clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb,  3: input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input with the spi_clk high edge,  6: input with the spi_clk low edge",
    +                    "offset": 6,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "DIN_NUM": {
    +              "description": "SPI0 input delay number control register",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DIN0_NUM": {
    +                    "description": "the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "DIN1_NUM": {
    +                    "description": "the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "DIN2_NUM": {
    +                    "description": "the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DIN3_NUM": {
    +                    "description": "the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...",
    +                    "offset": 6,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "DOUT_MODE": {
    +              "description": "SPI0 output delay mode control register",
    +              "offset": 180,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DOUT0_MODE": {
    +                    "description": "the output signals are delayed by system clock cycles, 0: output without delayed, 1: output with the posedge of clk_apb,2 output with the negedge of clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low edge",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DOUT1_MODE": {
    +                    "description": "the output signals are delayed by system clock cycles, 0: output without delayed, 1: output with the posedge of clk_apb,2 output with the negedge of clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low edge",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DOUT2_MODE": {
    +                    "description": "the output signals are delayed by system clock cycles, 0: output without delayed, 1: output with the posedge of clk_apb,2 output with the negedge of clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low edge",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DOUT3_MODE": {
    +                    "description": "the output signals are delayed by system clock cycles, 0: output without delayed, 1: output with the posedge of clk_apb,2 output with the negedge of clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low edge",
    +                    "offset": 3,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLOCK_GATE": {
    +              "description": "SPI0 clk_gate register",
    +              "offset": 220,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLK_EN": {
    +                    "description": "Register clock gate enable signal. 1: Enable. 0: Disable.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CORE_CLK_SEL": {
    +              "description": "SPI0 module clock select register",
    +              "offset": 224,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SPI01_CLK_SEL": {
    +                    "description": "When the digital system clock selects PLL clock and the frequency of PLL clock is 480MHz, the value of reg_spi01_clk_sel:  0: SPI0/1 module clock (clk) is 80MHz. 1: SPI0/1 module clock (clk) is 120MHz.  2: SPI0/1 module clock (clk) 160MHz. 3: Not used. When the digital system clock selects PLL clock and the frequency of PLL clock is 320MHz, the value of reg_spi01_clk_sel:  0: SPI0/1 module clock (clk) is 80MHz. 1: SPI0/1 module clock (clk) is 80MHz.  2: SPI0/1 module clock (clk) 160MHz. 3: Not used.",
    +                    "offset": 0,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "DATE": {
    +              "description": "Version control register",
    +              "offset": 1020,
    +              "size": 32,
    +              "reset_value": 33583408,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATE": {
    +                    "description": "SPI register version.",
    +                    "offset": 0,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SPI1": {
    +        "description": "SPI (Serial Peripheral Interface) Controller",
    +        "children": {
    +          "registers": {
    +            "CMD": {
    +              "description": "SPI1 memory command register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SPI1_MST_ST": {
    +                    "description": "The current status of SPI1 master FSM.",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "MSPI_ST": {
    +                    "description": "The current status of SPI1 slave FSM: mspi_st. 0: idle state, 1: preparation state, 2: send command state, 3: send address state, 4: wait state, 5: read data state, 6:write data state, 7: done state, 8: read data end state.",
    +                    "offset": 4,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "FLASH_PE": {
    +                    "description": "In user mode, it is set to indicate that program/erase operation will be triggered. The bit is combined with spi_mem_usr bit. The bit will be cleared once the operation done.1: enable 0: disable.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "USR": {
    +                    "description": "User define command enable.  An operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "FLASH_HPM": {
    +                    "description": "Drive Flash into high performance mode.  The bit will be cleared once the operation done.1: enable 0: disable.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FLASH_RES": {
    +                    "description": "This bit combined with reg_resandres bit releases Flash from the power-down state or high performance mode and obtains the devices ID. The bit will be cleared once the operation done.1: enable 0: disable.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "FLASH_DP": {
    +                    "description": "Drive Flash into power down.  An operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "FLASH_CE": {
    +                    "description": "Chip erase enable. Chip erase operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FLASH_BE": {
    +                    "description": "Block erase enable(32KB) .  Block erase operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FLASH_SE": {
    +                    "description": "Sector erase enable(4KB). Sector erase operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "FLASH_PP": {
    +                    "description": "Page program enable(1 byte ~256 bytes data to be programmed). Page program operation  will be triggered when the bit is set. The bit will be cleared once the operation done .1: enable 0: disable.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "FLASH_WRSR": {
    +                    "description": "Write status register enable.   Write status operation  will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "FLASH_RDSR": {
    +                    "description": "Read status register-1.  Read status operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "FLASH_RDID": {
    +                    "description": "Read JEDEC ID . Read ID command will be sent when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "FLASH_WRDI": {
    +                    "description": "Write flash disable. Write disable command will be sent when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "FLASH_WREN": {
    +                    "description": "Write flash enable.  Write enable command will be sent when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "FLASH_READ": {
    +                    "description": "Read flash enable. Read flash operation will be triggered when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ADDR": {
    +              "description": "SPI1 address register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "USR_ADDR_VALUE": {
    +                    "description": "In user mode, it is the memory address. other then the bit0-bit23 is the memory address, the bit24-bit31 are the byte length of a transfer.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CTRL": {
    +              "description": "SPI1 control register.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 2924544,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FDUMMY_OUT": {
    +                    "description": "In the dummy phase the signal level of spi is output by the spi controller.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FCMD_DUAL": {
    +                    "description": "Apply 2 signals during command phase 1:enable 0: disable",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FCMD_QUAD": {
    +                    "description": "Apply 4 signals during command phase 1:enable 0: disable",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FCS_CRC_EN": {
    +                    "description": "For SPI1,  initialize crc32 module before writing encrypted data to flash. Active low.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "TX_CRC_EN": {
    +                    "description": "For SPI1,  enable crc32 when writing encrypted data to flash. 1: enable 0:disable",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "FASTRD_MODE": {
    +                    "description": "This bit enable the bits: spi_mem_fread_qio, spi_mem_fread_dio, spi_mem_fread_qout and spi_mem_fread_dout. 1: enable 0: disable.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FREAD_DUAL": {
    +                    "description": "In the read operations, read-data phase apply 2 signals. 1: enable 0: disable.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "RESANDRES": {
    +                    "description": "The Device ID is read out to SPI_MEM_RD_STATUS register,  this bit combine with spi_mem_flash_res bit. 1: enable 0: disable.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "Q_POL": {
    +                    "description": "The bit is used to set MISO line polarity, 1: high 0, low",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "D_POL": {
    +                    "description": "The bit is used to set MOSI line polarity, 1: high 0, low",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "FREAD_QUAD": {
    +                    "description": "In the read operations read-data phase apply 4 signals. 1: enable 0: disable.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "WP": {
    +                    "description": "Write protect signal output when SPI is idle.  1: output high, 0: output low.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "WRSR_2B": {
    +                    "description": "two bytes data will be written to status register when it is set. 1: enable 0: disable.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "FREAD_DIO": {
    +                    "description": "In the read operations address phase and read-data phase apply 2 signals. 1: enable 0: disable.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "FREAD_QIO": {
    +                    "description": "In the read operations address phase and read-data phase apply 4 signals. 1: enable 0: disable.",
    +                    "offset": 24,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CTRL1": {
    +              "description": "SPI1 control1 register.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 4092,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLK_MODE": {
    +                    "description": "SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is alwasy on.",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "CS_HOLD_DLY_RES": {
    +                    "description": "After RES/DP/HPM command is sent, SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 512) SPI_CLK cycles.",
    +                    "offset": 2,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "CTRL2": {
    +              "description": "SPI1 control2 register.",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SYNC_RESET": {
    +                    "description": "The FSM will be reset.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CLOCK": {
    +              "description": "SPI1 clock division control register.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 196867,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLKCNT_L": {
    +                    "description": "In the master mode it must be equal to spi_mem_clkcnt_N.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "CLKCNT_H": {
    +                    "description": "In the master mode it must be floor((spi_mem_clkcnt_N+1)/2-1).",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "CLKCNT_N": {
    +                    "description": "In the master mode it is the divider of spi_mem_clk. So spi_mem_clk frequency is system/(spi_mem_clkcnt_N+1)",
    +                    "offset": 16,
    +                    "size": 8
    +                  },
    +                  "CLK_EQU_SYSCLK": {
    +                    "description": "reserved",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "USER": {
    +              "description": "SPI1 user register.",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 2147483648,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CK_OUT_EDGE": {
    +                    "description": "the bit combined with spi_mem_mosi_delay_mode bits to set mosi signal delay mode.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FWRITE_DUAL": {
    +                    "description": "In the write operations read-data phase apply 2 signals",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FWRITE_QUAD": {
    +                    "description": "In the write operations read-data phase apply 4 signals",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "FWRITE_DIO": {
    +                    "description": "In the write operations address phase and read-data phase apply 2 signals.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FWRITE_QIO": {
    +                    "description": "In the write operations address phase and read-data phase apply 4 signals.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "USR_MISO_HIGHPART": {
    +                    "description": "read-data phase only access to high-part of the buffer spi_mem_w8~spi_mem_w15. 1: enable 0: disable.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "USR_MOSI_HIGHPART": {
    +                    "description": "write-data phase only access to high-part of the buffer spi_mem_w8~spi_mem_w15. 1: enable 0: disable.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "USR_DUMMY_IDLE": {
    +                    "description": "SPI clock is disable in dummy phase when the bit is enable.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "USR_MOSI": {
    +                    "description": "This bit enable the write-data phase of an operation.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "USR_MISO": {
    +                    "description": "This bit enable the read-data phase of an operation.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "USR_DUMMY": {
    +                    "description": "This bit enable the dummy phase of an operation.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "USR_ADDR": {
    +                    "description": "This bit enable the address phase of an operation.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "USR_COMMAND": {
    +                    "description": "This bit enable the command phase of an operation.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "USER1": {
    +              "description": "SPI1 user1 register.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 1543503879,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "USR_DUMMY_CYCLELEN": {
    +                    "description": "The length in spi_mem_clk cycles of dummy phase. The register value shall be (cycle_num-1).",
    +                    "offset": 0,
    +                    "size": 6
    +                  },
    +                  "USR_ADDR_BITLEN": {
    +                    "description": "The length in bits of address phase. The register value shall be (bit_num-1).",
    +                    "offset": 26,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "USER2": {
    +              "description": "SPI1 user2 register.",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 1879048192,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "USR_COMMAND_VALUE": {
    +                    "description": "The value of  command.",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "USR_COMMAND_BITLEN": {
    +                    "description": "The length in bits of command phase. The register value shall be (bit_num-1)",
    +                    "offset": 28,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "MOSI_DLEN": {
    +              "description": "SPI1 send data bit length control register.",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "USR_MOSI_DBITLEN": {
    +                    "description": "The length in bits of write-data. The register value shall be (bit_num-1).",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "MISO_DLEN": {
    +              "description": "SPI1 receive data bit length control register.",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "USR_MISO_DBITLEN": {
    +                    "description": "The length in bits of  read-data. The register value shall be (bit_num-1).",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "RD_STATUS": {
    +              "description": "SPI1 status register.",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STATUS": {
    +                    "description": "The value is stored when set spi_mem_flash_rdsr bit and spi_mem_flash_res bit.",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "WB_MODE": {
    +                    "description": "Mode bits in the flash fast read mode  it is combined with spi_mem_fastrd_mode bit.",
    +                    "offset": 16,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "MISC": {
    +              "description": "SPI1 misc register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 2,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CS0_DIS": {
    +                    "description": "SPI_CS0 pin enable, 1: disable SPI_CS0, 0: SPI_CS0 pin is active to select SPI device, such as flash, external RAM and so on.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CS1_DIS": {
    +                    "description": "SPI_CS1 pin enable, 1: disable SPI_CS1, 0: SPI_CS1 pin is active to select SPI device, such as flash, external RAM and so on.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CK_IDLE_EDGE": {
    +                    "description": "1: spi clk line is high when idle     0: spi clk line is low when idle",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "CS_KEEP_ACTIVE": {
    +                    "description": "spi cs line keep low when the bit is set.",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TX_CRC": {
    +              "description": "SPI1 TX CRC data register.",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 4294967295,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATA": {
    +                    "description": "For SPI1, the value of crc32.",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CACHE_FCTRL": {
    +              "description": "SPI1 bit mode control register.",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CACHE_USR_ADDR_4BYTE": {
    +                    "description": "For SPI1,  cache  read flash with 4 bytes address, 1: enable, 0:disable.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FDIN_DUAL": {
    +                    "description": "For SPI1, din phase apply 2 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_dio.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FDOUT_DUAL": {
    +                    "description": "For SPI1, dout phase apply 2 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_dio.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FADDR_DUAL": {
    +                    "description": "For SPI1, address phase apply 2 signals. 1: enable 0: disable.  The bit is the same with spi_mem_fread_dio.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FDIN_QUAD": {
    +                    "description": "For SPI1, din phase apply 4 signals. 1: enable 0: disable.  The bit is the same with spi_mem_fread_qio.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FDOUT_QUAD": {
    +                    "description": "For SPI1, dout phase apply 4 signals. 1: enable 0: disable.  The bit is the same with spi_mem_fread_qio.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "FADDR_QUAD": {
    +                    "description": "For SPI1, address phase apply 4 signals. 1: enable 0: disable.  The bit is the same with spi_mem_fread_qio.",
    +                    "offset": 8,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "W0": {
    +              "description": "SPI1 memory data buffer0",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF0": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W1": {
    +              "description": "SPI1 memory data buffer1",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF1": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W2": {
    +              "description": "SPI1 memory data buffer2",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF2": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W3": {
    +              "description": "SPI1 memory data buffer3",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF3": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W4": {
    +              "description": "SPI1 memory data buffer4",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF4": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W5": {
    +              "description": "SPI1 memory data buffer5",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF5": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W6": {
    +              "description": "SPI1 memory data buffer6",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF6": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W7": {
    +              "description": "SPI1 memory data buffer7",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF7": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W8": {
    +              "description": "SPI1 memory data buffer8",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF8": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W9": {
    +              "description": "SPI1 memory data buffer9",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF9": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W10": {
    +              "description": "SPI1 memory data buffer10",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF10": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W11": {
    +              "description": "SPI1 memory data buffer11",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF11": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W12": {
    +              "description": "SPI1 memory data buffer12",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF12": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W13": {
    +              "description": "SPI1 memory data buffer13",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF13": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W14": {
    +              "description": "SPI1 memory data buffer14",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF14": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W15": {
    +              "description": "SPI1 memory data buffer15",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF15": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "FLASH_WAITI_CTRL": {
    +              "description": "SPI1 wait idle control register",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 20,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WAITI_DUMMY": {
    +                    "description": "The dummy phase enable when wait flash idle (RDSR)",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "WAITI_CMD": {
    +                    "description": "The command to wait flash idle(RDSR).",
    +                    "offset": 2,
    +                    "size": 8
    +                  },
    +                  "WAITI_DUMMY_CYCLELEN": {
    +                    "description": "The dummy cycle length when wait flash idle(RDSR).",
    +                    "offset": 10,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "FLASH_SUS_CTRL": {
    +              "description": "SPI1 flash suspend control register",
    +              "offset": 156,
    +              "size": 32,
    +              "reset_value": 134225920,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FLASH_PER": {
    +                    "description": "program erase resume bit, program erase suspend operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "FLASH_PES": {
    +                    "description": "program erase suspend bit, program erase suspend operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FLASH_PER_WAIT_EN": {
    +                    "description": "1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4 or *128) SPI_CLK cycles after program erase resume command is sent. 0: SPI1 does not wait after program erase resume command is sent.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FLASH_PES_WAIT_EN": {
    +                    "description": "1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4 or *128) SPI_CLK cycles after program erase suspend command is sent. 0: SPI1 does not wait after program erase suspend command is sent.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PES_PER_EN": {
    +                    "description": "Set this bit to enable PES end triggers PER transfer option. If this bit is 0, application should send PER after PES is done.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FLASH_PES_EN": {
    +                    "description": "Set this bit to enable Auto-suspending function.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "PESR_END_MSK": {
    +                    "description": "The mask value when check SUS/SUS1/SUS2 status bit. If the read status value is status_in[15:0](only status_in[7:0] is valid when only one byte of data is read out, status_in[15:0] is valid when two bytes of data are read out), SUS/SUS1/SUS2 = status_in[15:0]^ SPI_MEM_PESR_END_MSK[15:0].",
    +                    "offset": 6,
    +                    "size": 16
    +                  },
    +                  "RD_SUS_2B": {
    +                    "description": "1: Read two bytes when check flash SUS/SUS1/SUS2 status bit. 0:  Read one byte when check flash SUS/SUS1/SUS2 status bit",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "PER_END_EN": {
    +                    "description": "1: Both WIP and SUS/SUS1/SUS2 bits should be checked to insure the resume status of flash. 0: Only need to check WIP is 0.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "PES_END_EN": {
    +                    "description": "1: Both WIP and SUS/SUS1/SUS2 bits should be checked to insure the suspend status of flash. 0: Only need to check WIP is 0.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "SUS_TIMEOUT_CNT": {
    +                    "description": "When SPI1 checks SUS/SUS1/SUS2 bits fail for SPI_MEM_SUS_TIMEOUT_CNT[6:0] times, it will be treated as check pass.",
    +                    "offset": 25,
    +                    "size": 7
    +                  }
    +                }
    +              }
    +            },
    +            "FLASH_SUS_CMD": {
    +              "description": "SPI1 flash suspend command register",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 357754,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FLASH_PER_COMMAND": {
    +                    "description": "Program/Erase resume command.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "FLASH_PES_COMMAND": {
    +                    "description": "Program/Erase suspend command.",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "WAIT_PESR_COMMAND": {
    +                    "description": "Flash SUS/SUS1/SUS2 status bit read command. The command should be sent when SUS/SUS1/SUS2 bit should be checked to insure the suspend or resume status of flash.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "SUS_STATUS": {
    +              "description": "SPI1 flash suspend status register",
    +              "offset": 164,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "FLASH_SUS": {
    +                    "description": "The status of flash suspend, only used in SPI1.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "WAIT_PESR_CMD_2B": {
    +                    "description": "1: SPI1 sends out SPI_MEM_WAIT_PESR_COMMAND[15:0] to check SUS/SUS1/SUS2 bit. 0: SPI1 sends out SPI_MEM_WAIT_PESR_COMMAND[7:0] to check SUS/SUS1/SUS2 bit.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FLASH_HPM_DLY_128": {
    +                    "description": "1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after HPM command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after HPM command is sent.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FLASH_RES_DLY_128": {
    +                    "description": "1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after RES command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after RES command is sent.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FLASH_DP_DLY_128": {
    +                    "description": "1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after DP command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after DP command is sent.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "FLASH_PER_DLY_128": {
    +                    "description": "Valid when SPI_MEM_FLASH_PER_WAIT_EN is 1. 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after PER command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after PER command is sent.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FLASH_PES_DLY_128": {
    +                    "description": "Valid when SPI_MEM_FLASH_PES_WAIT_EN is 1. 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after PES command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after PES command is sent.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SPI0_LOCK_EN": {
    +                    "description": "1: Enable SPI0 lock SPI0/1 arbiter option. 0: Disable it.",
    +                    "offset": 7,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TIMING_CALI": {
    +              "description": "SPI1 timing control register",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMING_CALI": {
    +                    "description": "The bit is used to enable timing auto-calibration for all reading operations.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EXTRA_DUMMY_CYCLELEN": {
    +                    "description": "add extra dummy spi clock cycle length for spi clock calibration.",
    +                    "offset": 2,
    +                    "size": 3
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ENA": {
    +              "description": "SPI1 interrupt enable register",
    +              "offset": 192,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PER_END_INT_ENA": {
    +                    "description": "The enable bit for SPI_MEM_PER_END_INT interrupt.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PES_END_INT_ENA": {
    +                    "description": "The enable bit for SPI_MEM_PES_END_INT interrupt.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "WPE_END_INT_ENA": {
    +                    "description": "The enable bit for SPI_MEM_WPE_END_INT interrupt.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SLV_ST_END_INT_ENA": {
    +                    "description": "The enable bit for SPI_MEM_SLV_ST_END_INT interrupt.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "MST_ST_END_INT_ENA": {
    +                    "description": "The enable bit for SPI_MEM_MST_ST_END_INT interrupt.",
    +                    "offset": 4,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INT_CLR": {
    +              "description": "SPI1 interrupt clear register",
    +              "offset": 196,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PER_END_INT_CLR": {
    +                    "description": "The clear bit for SPI_MEM_PER_END_INT interrupt.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "PES_END_INT_CLR": {
    +                    "description": "The clear bit for SPI_MEM_PES_END_INT interrupt.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "WPE_END_INT_CLR": {
    +                    "description": "The clear bit for SPI_MEM_WPE_END_INT interrupt.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SLV_ST_END_INT_CLR": {
    +                    "description": "The clear bit for SPI_MEM_SLV_ST_END_INT interrupt.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "MST_ST_END_INT_CLR": {
    +                    "description": "The clear bit for SPI_MEM_MST_ST_END_INT interrupt.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_RAW": {
    +              "description": "SPI1 interrupt raw register",
    +              "offset": 200,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PER_END_INT_RAW": {
    +                    "description": "The raw bit for SPI_MEM_PER_END_INT interrupt. 1: Triggered when Auto Resume command (0x7A) is sent and flash is resumed. 0: Others.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PES_END_INT_RAW": {
    +                    "description": "The raw bit for SPI_MEM_PES_END_INT interrupt.1: Triggered when Auto Suspend command (0x75) is sent and flash is suspended. 0: Others.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "WPE_END_INT_RAW": {
    +                    "description": "The raw bit for SPI_MEM_WPE_END_INT interrupt. 1: Triggered when WRSR/PP/SE/BE/CE is sent and flash is already idle. 0: Others.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SLV_ST_END_INT_RAW": {
    +                    "description": "The raw bit for SPI_MEM_SLV_ST_END_INT interrupt. 1: Triggered when spi1_slv_st is changed from non idle state to idle state. It means that SPI_CS raises high. 0: Others",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MST_ST_END_INT_RAW": {
    +                    "description": "The raw bit for SPI_MEM_MST_ST_END_INT interrupt. 1: Triggered when spi1_mst_st is changed from non idle state to idle state. 0: Others.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ST": {
    +              "description": "SPI1 interrupt status register",
    +              "offset": 204,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PER_END_INT_ST": {
    +                    "description": "The status bit for SPI_MEM_PER_END_INT interrupt.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PES_END_INT_ST": {
    +                    "description": "The status bit for SPI_MEM_PES_END_INT interrupt.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "WPE_END_INT_ST": {
    +                    "description": "The status bit for SPI_MEM_WPE_END_INT interrupt.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SLV_ST_END_INT_ST": {
    +                    "description": "The status bit for SPI_MEM_SLV_ST_END_INT interrupt.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MST_ST_END_INT_ST": {
    +                    "description": "The status bit for SPI_MEM_MST_ST_END_INT interrupt.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CLOCK_GATE": {
    +              "description": "SPI1 clk_gate register",
    +              "offset": 220,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLK_EN": {
    +                    "description": "Register clock gate enable signal. 1: Enable. 0: Disable.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DATE": {
    +              "description": "Version control register",
    +              "offset": 1020,
    +              "size": 32,
    +              "reset_value": 33583472,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATE": {
    +                    "description": "Version control register",
    +                    "offset": 0,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SPI2": {
    +        "description": "SPI (Serial Peripheral Interface) Controller",
    +        "children": {
    +          "registers": {
    +            "CMD": {
    +              "description": "Command control register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CONF_BITLEN": {
    +                    "description": "Define the APB cycles of  SPI_CONF state. Can be configured in CONF state.",
    +                    "offset": 0,
    +                    "size": 18
    +                  },
    +                  "UPDATE": {
    +                    "description": "Set this bit to synchronize SPI registers from APB clock domain into SPI module clock domain, which is only used in SPI master mode.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "USR": {
    +                    "description": "User define command enable.  An operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable. Can not be changed by CONF_buf.",
    +                    "offset": 24,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ADDR": {
    +              "description": "Address value register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "USR_ADDR_VALUE": {
    +                    "description": "Address to slave. Can be configured in CONF state.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "CTRL": {
    +              "description": "SPI control register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 3932160,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DUMMY_OUT": {
    +                    "description": "In the dummy phase the signal level of spi is output by the spi controller. Can be configured in CONF state.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "FADDR_DUAL": {
    +                    "description": "Apply 2 signals during addr phase 1:enable 0: disable. Can be configured in CONF state.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "FADDR_QUAD": {
    +                    "description": "Apply 4 signals during addr phase 1:enable 0: disable. Can be configured in CONF state.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "FCMD_DUAL": {
    +                    "description": "Apply 2 signals during command phase 1:enable 0: disable. Can be configured in CONF state.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "FCMD_QUAD": {
    +                    "description": "Apply 4 signals during command phase 1:enable 0: disable. Can be configured in CONF state.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FREAD_DUAL": {
    +                    "description": "In the read operations, read-data phase apply 2 signals. 1: enable 0: disable. Can be configured in CONF state.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "FREAD_QUAD": {
    +                    "description": "In the read operations read-data phase apply 4 signals. 1: enable 0: disable.  Can be configured in CONF state.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "Q_POL": {
    +                    "description": "The bit is used to set MISO line polarity, 1: high 0, low. Can be configured in CONF state.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "D_POL": {
    +                    "description": "The bit is used to set MOSI line polarity, 1: high 0, low. Can be configured in CONF state.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "HOLD_POL": {
    +                    "description": "SPI_HOLD output value when SPI is idle. 1: output high, 0: output low. Can be configured in CONF state.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "WP_POL": {
    +                    "description": "Write protect signal output when SPI is idle.  1: output high, 0: output low.  Can be configured in CONF state.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "RD_BIT_ORDER": {
    +                    "description": "In read-data (MISO) phase 1: LSB first 0: MSB first. Can be configured in CONF state.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "WR_BIT_ORDER": {
    +                    "description": "In command address write-data (MOSI) phases 1: LSB firs 0: MSB first. Can be configured in CONF state.",
    +                    "offset": 26,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CLOCK": {
    +              "description": "SPI clock control register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 2147496003,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLKCNT_L": {
    +                    "description": "In the master mode it must be equal to spi_clkcnt_N. In the slave mode it must be 0. Can be configured in CONF state.",
    +                    "offset": 0,
    +                    "size": 6
    +                  },
    +                  "CLKCNT_H": {
    +                    "description": "In the master mode it must be floor((spi_clkcnt_N+1)/2-1). In the slave mode it must be 0. Can be configured in CONF state.",
    +                    "offset": 6,
    +                    "size": 6
    +                  },
    +                  "CLKCNT_N": {
    +                    "description": "In the master mode it is the divider of spi_clk. So spi_clk frequency is system/(spi_clkdiv_pre+1)/(spi_clkcnt_N+1). Can be configured in CONF state.",
    +                    "offset": 12,
    +                    "size": 6
    +                  },
    +                  "CLKDIV_PRE": {
    +                    "description": "In the master mode it is pre-divider of spi_clk.  Can be configured in CONF state.",
    +                    "offset": 18,
    +                    "size": 4
    +                  },
    +                  "CLK_EQU_SYSCLK": {
    +                    "description": "In the master mode 1: spi_clk is eqaul to system 0: spi_clk is divided from system clock. Can be configured in CONF state.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "USER": {
    +              "description": "SPI USER control register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 2147483840,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DOUTDIN": {
    +                    "description": "Set the bit to enable full duplex communication. 1: enable 0: disable. Can be configured in CONF state.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "QPI_MODE": {
    +                    "description": "Both for master mode and slave mode. 1: spi controller is in QPI mode. 0: others. Can be configured in CONF state.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TSCK_I_EDGE": {
    +                    "description": "In the slave mode, this bit can be used to change the polarity of tsck. 0: tsck = spi_ck_i. 1:tsck = !spi_ck_i.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CS_HOLD": {
    +                    "description": "spi cs keep low when spi is in  done  phase. 1: enable 0: disable. Can be configured in CONF state.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CS_SETUP": {
    +                    "description": "spi cs is enable when spi is in  prepare  phase. 1: enable 0: disable. Can be configured in CONF state.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RSCK_I_EDGE": {
    +                    "description": "In the slave mode, this bit can be used to change the polarity of rsck. 0: rsck = !spi_ck_i. 1:rsck = spi_ck_i.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "CK_OUT_EDGE": {
    +                    "description": "the bit combined with spi_mosi_delay_mode bits to set mosi signal delay mode. Can be configured in CONF state.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "FWRITE_DUAL": {
    +                    "description": "In the write operations read-data phase apply 2 signals. Can be configured in CONF state.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "FWRITE_QUAD": {
    +                    "description": "In the write operations read-data phase apply 4 signals. Can be configured in CONF state.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "USR_CONF_NXT": {
    +                    "description": "1: Enable the DMA CONF phase of next seg-trans operation, which means seg-trans will continue. 0: The seg-trans will end after the current SPI seg-trans or this is not seg-trans mode. Can be configured in CONF state.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "SIO": {
    +                    "description": "Set the bit to enable 3-line half duplex communication mosi and miso signals share the same pin. 1: enable 0: disable. Can be configured in CONF state.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "USR_MISO_HIGHPART": {
    +                    "description": "read-data phase only access to high-part of the buffer spi_w8~spi_w15. 1: enable 0: disable. Can be configured in CONF state.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "USR_MOSI_HIGHPART": {
    +                    "description": "write-data phase only access to high-part of the buffer spi_w8~spi_w15. 1: enable 0: disable.  Can be configured in CONF state.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "USR_DUMMY_IDLE": {
    +                    "description": "spi clock is disable in dummy phase when the bit is enable. Can be configured in CONF state.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "USR_MOSI": {
    +                    "description": "This bit enable the write-data phase of an operation. Can be configured in CONF state.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "USR_MISO": {
    +                    "description": "This bit enable the read-data phase of an operation. Can be configured in CONF state.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "USR_DUMMY": {
    +                    "description": "This bit enable the dummy phase of an operation. Can be configured in CONF state.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "USR_ADDR": {
    +                    "description": "This bit enable the address phase of an operation. Can be configured in CONF state.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "USR_COMMAND": {
    +                    "description": "This bit enable the command phase of an operation. Can be configured in CONF state.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "USER1": {
    +              "description": "SPI USER control register 1",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 3091267591,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "USR_DUMMY_CYCLELEN": {
    +                    "description": "The length in spi_clk cycles of dummy phase. The register value shall be (cycle_num-1). Can be configured in CONF state.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "MST_WFULL_ERR_END_EN": {
    +                    "description": "1: SPI transfer is ended when SPI RX AFIFO wfull error is valid in GP-SPI master FD/HD-mode. 0: SPI transfer is not ended when SPI RX AFIFO wfull error is valid in GP-SPI master FD/HD-mode.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "CS_SETUP_TIME": {
    +                    "description": "(cycles+1) of prepare phase by spi clock this bits are combined with spi_cs_setup bit. Can be configured in CONF state.",
    +                    "offset": 17,
    +                    "size": 5
    +                  },
    +                  "CS_HOLD_TIME": {
    +                    "description": "delay cycles of cs pin by spi clock this bits are combined with spi_cs_hold bit. Can be configured in CONF state.",
    +                    "offset": 22,
    +                    "size": 5
    +                  },
    +                  "USR_ADDR_BITLEN": {
    +                    "description": "The length in bits of address phase. The register value shall be (bit_num-1). Can be configured in CONF state.",
    +                    "offset": 27,
    +                    "size": 5
    +                  }
    +                }
    +              }
    +            },
    +            "USER2": {
    +              "description": "SPI USER control register 2",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 2013265920,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "USR_COMMAND_VALUE": {
    +                    "description": "The value of  command. Can be configured in CONF state.",
    +                    "offset": 0,
    +                    "size": 16
    +                  },
    +                  "MST_REMPTY_ERR_END_EN": {
    +                    "description": "1: SPI transfer is ended when SPI TX AFIFO read empty error is valid in GP-SPI master FD/HD-mode. 0: SPI transfer is not ended when SPI TX AFIFO read empty error is valid in GP-SPI master FD/HD-mode.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "USR_COMMAND_BITLEN": {
    +                    "description": "The length in bits of command phase. The register value shall be (bit_num-1). Can be configured in CONF state.",
    +                    "offset": 28,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "MS_DLEN": {
    +              "description": "SPI data bit length control register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MS_DATA_BITLEN": {
    +                    "description": "The value of these bits is the configured SPI transmission data bit length in master mode DMA controlled transfer or CPU controlled transfer. The value is also the configured bit length in slave mode DMA RX controlled transfer. The register value shall be (bit_num-1). Can be configured in CONF state.",
    +                    "offset": 0,
    +                    "size": 18
    +                  }
    +                }
    +              }
    +            },
    +            "MISC": {
    +              "description": "SPI misc register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 62,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CS0_DIS": {
    +                    "description": "SPI CS0 pin enable, 1: disable CS0, 0: spi_cs0 signal is from/to CS0 pin. Can be configured in CONF state.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CS1_DIS": {
    +                    "description": "SPI CS1 pin enable, 1: disable CS1, 0: spi_cs1 signal is from/to CS1 pin. Can be configured in CONF state.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CS2_DIS": {
    +                    "description": "SPI CS2 pin enable, 1: disable CS2, 0: spi_cs2 signal is from/to CS2 pin. Can be configured in CONF state.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CS3_DIS": {
    +                    "description": "SPI CS3 pin enable, 1: disable CS3, 0: spi_cs3 signal is from/to CS3 pin. Can be configured in CONF state.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CS4_DIS": {
    +                    "description": "SPI CS4 pin enable, 1: disable CS4, 0: spi_cs4 signal is from/to CS4 pin. Can be configured in CONF state.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CS5_DIS": {
    +                    "description": "SPI CS5 pin enable, 1: disable CS5, 0: spi_cs5 signal is from/to CS5 pin. Can be configured in CONF state.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CK_DIS": {
    +                    "description": "1: spi clk out disable,  0: spi clk out enable. Can be configured in CONF state.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "MASTER_CS_POL": {
    +                    "description": "In the master mode the bits are the polarity of spi cs line, the value is equivalent to spi_cs ^ spi_master_cs_pol. Can be configured in CONF state.",
    +                    "offset": 7,
    +                    "size": 6
    +                  },
    +                  "SLAVE_CS_POL": {
    +                    "description": "spi slave input cs polarity select. 1: inv  0: not change. Can be configured in CONF state.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "CK_IDLE_EDGE": {
    +                    "description": "1: spi clk line is high when idle     0: spi clk line is low when idle. Can be configured in CONF state.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "CS_KEEP_ACTIVE": {
    +                    "description": "spi cs line keep low when the bit is set. Can be configured in CONF state.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "QUAD_DIN_PIN_SWAP": {
    +                    "description": "1:  spi quad input swap enable  0:  spi quad input swap disable. Can be configured in CONF state.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIN_MODE": {
    +              "description": "SPI input delay mode configuration",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DIN0_MODE": {
    +                    "description": "the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state.",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "DIN1_MODE": {
    +                    "description": "the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state.",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "DIN2_MODE": {
    +                    "description": "the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state.",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DIN3_MODE": {
    +                    "description": "the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state.",
    +                    "offset": 6,
    +                    "size": 2
    +                  },
    +                  "TIMING_HCLK_ACTIVE": {
    +                    "description": "1:enable hclk in SPI input timing module.  0: disable it. Can be configured in CONF state.",
    +                    "offset": 16,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DIN_NUM": {
    +              "description": "SPI input delay number configuration",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DIN0_NUM": {
    +                    "description": "the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...  Can be configured in CONF state.",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "DIN1_NUM": {
    +                    "description": "the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...  Can be configured in CONF state.",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "DIN2_NUM": {
    +                    "description": "the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...  Can be configured in CONF state.",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "DIN3_NUM": {
    +                    "description": "the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...  Can be configured in CONF state.",
    +                    "offset": 6,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "DOUT_MODE": {
    +              "description": "SPI output delay mode configuration",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DOUT0_MODE": {
    +                    "description": "The output signal 0 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DOUT1_MODE": {
    +                    "description": "The output signal 1 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DOUT2_MODE": {
    +                    "description": "The output signal 2 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DOUT3_MODE": {
    +                    "description": "The output signal 3 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state.",
    +                    "offset": 3,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_CONF": {
    +              "description": "SPI DMA control register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_SLV_SEG_TRANS_EN": {
    +                    "description": "Enable dma segment transfer in spi dma half slave mode. 1: enable. 0: disable.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "SLV_RX_SEG_TRANS_CLR_EN": {
    +                    "description": "1: spi_dma_infifo_full_vld is cleared by spi slave cmd 5. 0: spi_dma_infifo_full_vld is cleared by spi_trans_done.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "SLV_TX_SEG_TRANS_CLR_EN": {
    +                    "description": "1: spi_dma_outfifo_empty_vld is cleared by spi slave cmd 6. 0: spi_dma_outfifo_empty_vld is cleared by spi_trans_done.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "RX_EOF_EN": {
    +                    "description": "1: spi_dma_inlink_eof is set when the number of dma pushed data bytes is equal to the value of spi_slv/mst_dma_rd_bytelen[19:0] in spi dma transition.  0: spi_dma_inlink_eof is set by spi_trans_done in non-seg-trans or spi_dma_seg_trans_done in seg-trans.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "DMA_RX_ENA": {
    +                    "description": "Set this bit to enable SPI DMA controlled receive data mode.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "DMA_TX_ENA": {
    +                    "description": "Set this bit to enable SPI DMA controlled send data mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "RX_AFIFO_RST": {
    +                    "description": "Set this bit to reset RX AFIFO, which is used to receive data in SPI master and slave mode transfer.",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "BUF_AFIFO_RST": {
    +                    "description": "Set this bit to reset BUF TX AFIFO, which is used send data out in SPI slave CPU controlled mode transfer and master mode transfer.",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "DMA_AFIFO_RST": {
    +                    "description": "Set this bit to reset DMA TX AFIFO, which is used to send data out in SPI slave DMA controlled mode transfer.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_INT_ENA": {
    +              "description": "SPI DMA interrupt enable register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_INFIFO_FULL_ERR_INT_ENA": {
    +                    "description": "The enable bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DMA_OUTFIFO_EMPTY_ERR_INT_ENA": {
    +                    "description": "The enable bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLV_EX_QPI_INT_ENA": {
    +                    "description": "The enable bit for SPI slave Ex_QPI interrupt.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SLV_EN_QPI_INT_ENA": {
    +                    "description": "The enable bit for SPI slave En_QPI interrupt.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SLV_CMD7_INT_ENA": {
    +                    "description": "The enable bit for SPI slave CMD7 interrupt.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SLV_CMD8_INT_ENA": {
    +                    "description": "The enable bit for SPI slave CMD8 interrupt.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "SLV_CMD9_INT_ENA": {
    +                    "description": "The enable bit for SPI slave CMD9 interrupt.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SLV_CMDA_INT_ENA": {
    +                    "description": "The enable bit for SPI slave CMDA interrupt.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SLV_RD_DMA_DONE_INT_ENA": {
    +                    "description": "The enable bit for SPI_SLV_RD_DMA_DONE_INT interrupt.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SLV_WR_DMA_DONE_INT_ENA": {
    +                    "description": "The enable bit for SPI_SLV_WR_DMA_DONE_INT interrupt.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SLV_RD_BUF_DONE_INT_ENA": {
    +                    "description": "The enable bit for SPI_SLV_RD_BUF_DONE_INT interrupt.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SLV_WR_BUF_DONE_INT_ENA": {
    +                    "description": "The enable bit for SPI_SLV_WR_BUF_DONE_INT interrupt.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TRANS_DONE_INT_ENA": {
    +                    "description": "The enable bit for SPI_TRANS_DONE_INT interrupt.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "DMA_SEG_TRANS_DONE_INT_ENA": {
    +                    "description": "The enable bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "SEG_MAGIC_ERR_INT_ENA": {
    +                    "description": "The enable bit for SPI_SEG_MAGIC_ERR_INT interrupt.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SLV_BUF_ADDR_ERR_INT_ENA": {
    +                    "description": "The enable bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "SLV_CMD_ERR_INT_ENA": {
    +                    "description": "The enable bit for SPI_SLV_CMD_ERR_INT interrupt.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "MST_RX_AFIFO_WFULL_ERR_INT_ENA": {
    +                    "description": "The enable bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "MST_TX_AFIFO_REMPTY_ERR_INT_ENA": {
    +                    "description": "The enable bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "APP2_INT_ENA": {
    +                    "description": "The enable bit for SPI_APP2_INT interrupt.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "APP1_INT_ENA": {
    +                    "description": "The enable bit for SPI_APP1_INT interrupt.",
    +                    "offset": 20,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_INT_CLR": {
    +              "description": "SPI DMA interrupt clear register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_INFIFO_FULL_ERR_INT_CLR": {
    +                    "description": "The clear bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "DMA_OUTFIFO_EMPTY_ERR_INT_CLR": {
    +                    "description": "The clear bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SLV_EX_QPI_INT_CLR": {
    +                    "description": "The clear bit for SPI slave Ex_QPI interrupt.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SLV_EN_QPI_INT_CLR": {
    +                    "description": "The clear bit for SPI slave En_QPI interrupt.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SLV_CMD7_INT_CLR": {
    +                    "description": "The clear bit for SPI slave CMD7 interrupt.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SLV_CMD8_INT_CLR": {
    +                    "description": "The clear bit for SPI slave CMD8 interrupt.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SLV_CMD9_INT_CLR": {
    +                    "description": "The clear bit for SPI slave CMD9 interrupt.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SLV_CMDA_INT_CLR": {
    +                    "description": "The clear bit for SPI slave CMDA interrupt.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SLV_RD_DMA_DONE_INT_CLR": {
    +                    "description": "The clear bit for SPI_SLV_RD_DMA_DONE_INT interrupt.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SLV_WR_DMA_DONE_INT_CLR": {
    +                    "description": "The clear bit for SPI_SLV_WR_DMA_DONE_INT interrupt.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SLV_RD_BUF_DONE_INT_CLR": {
    +                    "description": "The clear bit for SPI_SLV_RD_BUF_DONE_INT interrupt.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SLV_WR_BUF_DONE_INT_CLR": {
    +                    "description": "The clear bit for SPI_SLV_WR_BUF_DONE_INT interrupt.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TRANS_DONE_INT_CLR": {
    +                    "description": "The clear bit for SPI_TRANS_DONE_INT interrupt.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "DMA_SEG_TRANS_DONE_INT_CLR": {
    +                    "description": "The clear bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt.",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SEG_MAGIC_ERR_INT_CLR": {
    +                    "description": "The clear bit for SPI_SEG_MAGIC_ERR_INT interrupt.",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SLV_BUF_ADDR_ERR_INT_CLR": {
    +                    "description": "The clear bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt.",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SLV_CMD_ERR_INT_CLR": {
    +                    "description": "The clear bit for SPI_SLV_CMD_ERR_INT interrupt.",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "MST_RX_AFIFO_WFULL_ERR_INT_CLR": {
    +                    "description": "The clear bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt.",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "MST_TX_AFIFO_REMPTY_ERR_INT_CLR": {
    +                    "description": "The clear bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt.",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "APP2_INT_CLR": {
    +                    "description": "The clear bit for SPI_APP2_INT interrupt.",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "APP1_INT_CLR": {
    +                    "description": "The clear bit for SPI_APP1_INT interrupt.",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_INT_RAW": {
    +              "description": "SPI DMA interrupt raw register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_INFIFO_FULL_ERR_INT_RAW": {
    +                    "description": "1: The current data rate of DMA Rx is smaller than that of SPI, which will lose the receive data.  0: Others.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DMA_OUTFIFO_EMPTY_ERR_INT_RAW": {
    +                    "description": "1: The current data rate of DMA TX is smaller than that of SPI. SPI will stop in master mode and send out all 0 in slave mode.  0: Others.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SLV_EX_QPI_INT_RAW": {
    +                    "description": "The raw bit for SPI slave Ex_QPI interrupt. 1: SPI slave mode Ex_QPI transmission is ended. 0: Others.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SLV_EN_QPI_INT_RAW": {
    +                    "description": "The raw bit for SPI slave En_QPI interrupt. 1: SPI slave mode En_QPI transmission is ended. 0: Others.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SLV_CMD7_INT_RAW": {
    +                    "description": "The raw bit for SPI slave CMD7 interrupt. 1: SPI slave mode CMD7 transmission is ended. 0: Others.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SLV_CMD8_INT_RAW": {
    +                    "description": "The raw bit for SPI slave CMD8 interrupt. 1: SPI slave mode CMD8 transmission is ended. 0: Others.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "SLV_CMD9_INT_RAW": {
    +                    "description": "The raw bit for SPI slave CMD9 interrupt. 1: SPI slave mode CMD9 transmission is ended. 0: Others.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SLV_CMDA_INT_RAW": {
    +                    "description": "The raw bit for SPI slave CMDA interrupt. 1: SPI slave mode CMDA transmission is ended. 0: Others.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SLV_RD_DMA_DONE_INT_RAW": {
    +                    "description": "The raw bit for SPI_SLV_RD_DMA_DONE_INT interrupt. 1: SPI slave mode Rd_DMA transmission is ended. 0: Others.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SLV_WR_DMA_DONE_INT_RAW": {
    +                    "description": "The raw bit for SPI_SLV_WR_DMA_DONE_INT interrupt. 1: SPI slave mode Wr_DMA transmission is ended. 0: Others.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SLV_RD_BUF_DONE_INT_RAW": {
    +                    "description": "The raw bit for SPI_SLV_RD_BUF_DONE_INT interrupt. 1: SPI slave mode Rd_BUF transmission is ended. 0: Others.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SLV_WR_BUF_DONE_INT_RAW": {
    +                    "description": "The raw bit for SPI_SLV_WR_BUF_DONE_INT interrupt. 1: SPI slave mode Wr_BUF transmission is ended. 0: Others.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TRANS_DONE_INT_RAW": {
    +                    "description": "The raw bit for SPI_TRANS_DONE_INT interrupt. 1: SPI master mode transmission is ended. 0: others.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "DMA_SEG_TRANS_DONE_INT_RAW": {
    +                    "description": "The raw bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt. 1:  spi master DMA full-duplex/half-duplex seg-conf-trans ends or slave half-duplex seg-trans ends. And data has been pushed to corresponding memory.  0:  seg-conf-trans or seg-trans is not ended or not occurred.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "SEG_MAGIC_ERR_INT_RAW": {
    +                    "description": "The raw bit for SPI_SEG_MAGIC_ERR_INT interrupt. 1: The magic value in CONF buffer is error in the DMA seg-conf-trans. 0: others.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "SLV_BUF_ADDR_ERR_INT_RAW": {
    +                    "description": "The raw bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt. 1: The accessing data address of the current SPI slave mode CPU controlled FD, Wr_BUF or Rd_BUF transmission is bigger than 63. 0: Others.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "SLV_CMD_ERR_INT_RAW": {
    +                    "description": "The raw bit for SPI_SLV_CMD_ERR_INT interrupt. 1: The slave command value in the current SPI slave HD mode transmission is not supported. 0: Others.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "MST_RX_AFIFO_WFULL_ERR_INT_RAW": {
    +                    "description": "The raw bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt. 1: There is a RX AFIFO write-full error when SPI inputs data in master mode. 0: Others.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "MST_TX_AFIFO_REMPTY_ERR_INT_RAW": {
    +                    "description": "The raw bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt. 1: There is a TX BUF AFIFO read-empty error when SPI outputs data in master mode. 0: Others.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "APP2_INT_RAW": {
    +                    "description": "The raw bit for SPI_APP2_INT interrupt. The value is only controlled by application.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "APP1_INT_RAW": {
    +                    "description": "The raw bit for SPI_APP1_INT interrupt. The value is only controlled by application.",
    +                    "offset": 20,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DMA_INT_ST": {
    +              "description": "SPI DMA interrupt status register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DMA_INFIFO_FULL_ERR_INT_ST": {
    +                    "description": "The status bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DMA_OUTFIFO_EMPTY_ERR_INT_ST": {
    +                    "description": "The status bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SLV_EX_QPI_INT_ST": {
    +                    "description": "The status bit for SPI slave Ex_QPI interrupt.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SLV_EN_QPI_INT_ST": {
    +                    "description": "The status bit for SPI slave En_QPI interrupt.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SLV_CMD7_INT_ST": {
    +                    "description": "The status bit for SPI slave CMD7 interrupt.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SLV_CMD8_INT_ST": {
    +                    "description": "The status bit for SPI slave CMD8 interrupt.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SLV_CMD9_INT_ST": {
    +                    "description": "The status bit for SPI slave CMD9 interrupt.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SLV_CMDA_INT_ST": {
    +                    "description": "The status bit for SPI slave CMDA interrupt.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SLV_RD_DMA_DONE_INT_ST": {
    +                    "description": "The status bit for SPI_SLV_RD_DMA_DONE_INT interrupt.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SLV_WR_DMA_DONE_INT_ST": {
    +                    "description": "The status bit for SPI_SLV_WR_DMA_DONE_INT interrupt.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SLV_RD_BUF_DONE_INT_ST": {
    +                    "description": "The status bit for SPI_SLV_RD_BUF_DONE_INT interrupt.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SLV_WR_BUF_DONE_INT_ST": {
    +                    "description": "The status bit for SPI_SLV_WR_BUF_DONE_INT interrupt.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TRANS_DONE_INT_ST": {
    +                    "description": "The status bit for SPI_TRANS_DONE_INT interrupt.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DMA_SEG_TRANS_DONE_INT_ST": {
    +                    "description": "The status bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt.",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SEG_MAGIC_ERR_INT_ST": {
    +                    "description": "The status bit for SPI_SEG_MAGIC_ERR_INT interrupt.",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SLV_BUF_ADDR_ERR_INT_ST": {
    +                    "description": "The status bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt.",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SLV_CMD_ERR_INT_ST": {
    +                    "description": "The status bit for SPI_SLV_CMD_ERR_INT interrupt.",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MST_RX_AFIFO_WFULL_ERR_INT_ST": {
    +                    "description": "The status bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt.",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MST_TX_AFIFO_REMPTY_ERR_INT_ST": {
    +                    "description": "The status bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt.",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "APP2_INT_ST": {
    +                    "description": "The status bit for SPI_APP2_INT interrupt.",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "APP1_INT_ST": {
    +                    "description": "The status bit for SPI_APP1_INT interrupt.",
    +                    "offset": 20,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "W0": {
    +              "description": "SPI CPU-controlled buffer0",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF0": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W1": {
    +              "description": "SPI CPU-controlled buffer1",
    +              "offset": 156,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF1": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W2": {
    +              "description": "SPI CPU-controlled buffer2",
    +              "offset": 160,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF2": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W3": {
    +              "description": "SPI CPU-controlled buffer3",
    +              "offset": 164,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF3": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W4": {
    +              "description": "SPI CPU-controlled buffer4",
    +              "offset": 168,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF4": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W5": {
    +              "description": "SPI CPU-controlled buffer5",
    +              "offset": 172,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF5": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W6": {
    +              "description": "SPI CPU-controlled buffer6",
    +              "offset": 176,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF6": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W7": {
    +              "description": "SPI CPU-controlled buffer7",
    +              "offset": 180,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF7": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W8": {
    +              "description": "SPI CPU-controlled buffer8",
    +              "offset": 184,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF8": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W9": {
    +              "description": "SPI CPU-controlled buffer9",
    +              "offset": 188,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF9": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W10": {
    +              "description": "SPI CPU-controlled buffer10",
    +              "offset": 192,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF10": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W11": {
    +              "description": "SPI CPU-controlled buffer11",
    +              "offset": 196,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF11": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W12": {
    +              "description": "SPI CPU-controlled buffer12",
    +              "offset": 200,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF12": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W13": {
    +              "description": "SPI CPU-controlled buffer13",
    +              "offset": 204,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF13": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W14": {
    +              "description": "SPI CPU-controlled buffer14",
    +              "offset": 208,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF14": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "W15": {
    +              "description": "SPI CPU-controlled buffer15",
    +              "offset": 212,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BUF15": {
    +                    "description": "data buffer",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "SLAVE": {
    +              "description": "SPI slave control register",
    +              "offset": 224,
    +              "size": 32,
    +              "reset_value": 41943040,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLK_MODE": {
    +                    "description": "SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is alwasy on. Can be configured in CONF state.",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "CLK_MODE_13": {
    +                    "description": "{CPOL, CPHA},1: support spi clk mode 1 and 3, first edge output data B[0]/B[7].  0: support spi clk mode 0 and 2, first edge output data B[1]/B[6].",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RSCK_DATA_OUT": {
    +                    "description": "It saves half a cycle when tsck is the same as rsck. 1: output data at rsck posedge   0: output data at tsck posedge",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SLV_RDDMA_BITLEN_EN": {
    +                    "description": "1: SPI_SLV_DATA_BITLEN stores data bit length of master-read-slave data length in DMA controlled mode(Rd_DMA). 0: others",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SLV_WRDMA_BITLEN_EN": {
    +                    "description": "1: SPI_SLV_DATA_BITLEN stores data bit length of master-write-to-slave data length in DMA controlled mode(Wr_DMA). 0: others",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SLV_RDBUF_BITLEN_EN": {
    +                    "description": "1: SPI_SLV_DATA_BITLEN stores data bit length of master-read-slave data length in CPU controlled mode(Rd_BUF). 0: others",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "SLV_WRBUF_BITLEN_EN": {
    +                    "description": "1: SPI_SLV_DATA_BITLEN stores data bit length of master-write-to-slave data length in CPU controlled mode(Wr_BUF). 0: others",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "DMA_SEG_MAGIC_VALUE": {
    +                    "description": "The magic value of BM table in master DMA seg-trans.",
    +                    "offset": 22,
    +                    "size": 4
    +                  },
    +                  "MODE": {
    +                    "description": "Set SPI work mode. 1: slave mode 0: master mode.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "SOFT_RESET": {
    +                    "description": "Software reset enable, reset the spi clock line cs line and data lines. Can be configured in CONF state.",
    +                    "offset": 27,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "USR_CONF": {
    +                    "description": "1: Enable the DMA CONF phase of current seg-trans operation, which means seg-trans will start. 0: This is not seg-trans mode.",
    +                    "offset": 28,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SLAVE1": {
    +              "description": "SPI slave control register 1",
    +              "offset": 228,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SLV_DATA_BITLEN": {
    +                    "description": "The transferred data bit length in SPI slave FD and HD mode.",
    +                    "offset": 0,
    +                    "size": 18
    +                  },
    +                  "SLV_LAST_COMMAND": {
    +                    "description": "In the slave mode it is the value of command.",
    +                    "offset": 18,
    +                    "size": 8
    +                  },
    +                  "SLV_LAST_ADDR": {
    +                    "description": "In the slave mode it is the value of address.",
    +                    "offset": 26,
    +                    "size": 6
    +                  }
    +                }
    +              }
    +            },
    +            "CLK_GATE": {
    +              "description": "SPI module clock and register clock control",
    +              "offset": 232,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLK_EN": {
    +                    "description": "Set this bit to enable clk gate",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "MST_CLK_ACTIVE": {
    +                    "description": "Set this bit to power on the SPI module clock.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "MST_CLK_SEL": {
    +                    "description": "This bit is used to select SPI module clock source in master mode. 1: PLL_CLK_80M. 0: XTAL CLK.",
    +                    "offset": 2,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DATE": {
    +              "description": "Version control",
    +              "offset": 240,
    +              "size": 32,
    +              "reset_value": 33583648,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATE": {
    +                    "description": "SPI register version.",
    +                    "offset": 0,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SYSTEM": {
    +        "description": "System",
    +        "children": {
    +          "registers": {
    +            "CPU_PERI_CLK_EN": {
    +              "description": "cpu_peripheral clock gating register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLK_EN_ASSIST_DEBUG": {
    +                    "description": "reg_clk_en_assist_debug",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CLK_EN_DEDICATED_GPIO": {
    +                    "description": "reg_clk_en_dedicated_gpio",
    +                    "offset": 7,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_PERI_RST_EN": {
    +              "description": "cpu_peripheral reset register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 192,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RST_EN_ASSIST_DEBUG": {
    +                    "description": "reg_rst_en_assist_debug",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RST_EN_DEDICATED_GPIO": {
    +                    "description": "reg_rst_en_dedicated_gpio",
    +                    "offset": 7,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_PER_CONF": {
    +              "description": "cpu clock config register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 12,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPUPERIOD_SEL": {
    +                    "description": "reg_cpuperiod_sel",
    +                    "offset": 0,
    +                    "size": 2
    +                  },
    +                  "PLL_FREQ_SEL": {
    +                    "description": "reg_pll_freq_sel",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CPU_WAIT_MODE_FORCE_ON": {
    +                    "description": "reg_cpu_wait_mode_force_on",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CPU_WAITI_DELAY_NUM": {
    +                    "description": "reg_cpu_waiti_delay_num",
    +                    "offset": 4,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "MEM_PD_MASK": {
    +              "description": "memory power down mask register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LSLP_MEM_PD_MASK": {
    +                    "description": "reg_lslp_mem_pd_mask",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PERIP_CLK_EN0": {
    +              "description": "peripheral clock gating register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 4190232687,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMERS_CLK_EN": {
    +                    "description": "reg_timers_clk_en",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SPI01_CLK_EN": {
    +                    "description": "reg_spi01_clk_en",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UART_CLK_EN": {
    +                    "description": "reg_uart_clk_en",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "WDG_CLK_EN": {
    +                    "description": "reg_wdg_clk_en",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "I2S0_CLK_EN": {
    +                    "description": "reg_i2s0_clk_en",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "UART1_CLK_EN": {
    +                    "description": "reg_uart1_clk_en",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "SPI2_CLK_EN": {
    +                    "description": "reg_spi2_clk_en",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "I2C_EXT0_CLK_EN": {
    +                    "description": "reg_ext0_clk_en",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "UHCI0_CLK_EN": {
    +                    "description": "reg_uhci0_clk_en",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "RMT_CLK_EN": {
    +                    "description": "reg_rmt_clk_en",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PCNT_CLK_EN": {
    +                    "description": "reg_pcnt_clk_en",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LEDC_CLK_EN": {
    +                    "description": "reg_ledc_clk_en",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "UHCI1_CLK_EN": {
    +                    "description": "reg_uhci1_clk_en",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TIMERGROUP_CLK_EN": {
    +                    "description": "reg_timergroup_clk_en",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EFUSE_CLK_EN": {
    +                    "description": "reg_efuse_clk_en",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TIMERGROUP1_CLK_EN": {
    +                    "description": "reg_timergroup1_clk_en",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "SPI3_CLK_EN": {
    +                    "description": "reg_spi3_clk_en",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "PWM0_CLK_EN": {
    +                    "description": "reg_pwm0_clk_en",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EXT1_CLK_EN": {
    +                    "description": "reg_ext1_clk_en",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "CAN_CLK_EN": {
    +                    "description": "reg_can_clk_en",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "PWM1_CLK_EN": {
    +                    "description": "reg_pwm1_clk_en",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "I2S1_CLK_EN": {
    +                    "description": "reg_i2s1_clk_en",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "SPI2_DMA_CLK_EN": {
    +                    "description": "reg_spi2_dma_clk_en",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "USB_DEVICE_CLK_EN": {
    +                    "description": "reg_usb_device_clk_en",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "UART_MEM_CLK_EN": {
    +                    "description": "reg_uart_mem_clk_en",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "PWM2_CLK_EN": {
    +                    "description": "reg_pwm2_clk_en",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "PWM3_CLK_EN": {
    +                    "description": "reg_pwm3_clk_en",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "SPI3_DMA_CLK_EN": {
    +                    "description": "reg_spi3_dma_clk_en",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "APB_SARADC_CLK_EN": {
    +                    "description": "reg_apb_saradc_clk_en",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "SYSTIMER_CLK_EN": {
    +                    "description": "reg_systimer_clk_en",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "ADC2_ARB_CLK_EN": {
    +                    "description": "reg_adc2_arb_clk_en",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SPI4_CLK_EN": {
    +                    "description": "reg_spi4_clk_en",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PERIP_CLK_EN1": {
    +              "description": "peripheral clock gating register",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 512,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CRYPTO_AES_CLK_EN": {
    +                    "description": "reg_crypto_aes_clk_en",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CRYPTO_SHA_CLK_EN": {
    +                    "description": "reg_crypto_sha_clk_en",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CRYPTO_RSA_CLK_EN": {
    +                    "description": "reg_crypto_rsa_clk_en",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CRYPTO_DS_CLK_EN": {
    +                    "description": "reg_crypto_ds_clk_en",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CRYPTO_HMAC_CLK_EN": {
    +                    "description": "reg_crypto_hmac_clk_en",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "DMA_CLK_EN": {
    +                    "description": "reg_dma_clk_en",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SDIO_HOST_CLK_EN": {
    +                    "description": "reg_sdio_host_clk_en",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "LCD_CAM_CLK_EN": {
    +                    "description": "reg_lcd_cam_clk_en",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "UART2_CLK_EN": {
    +                    "description": "reg_uart2_clk_en",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TSENS_CLK_EN": {
    +                    "description": "reg_tsens_clk_en",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PERIP_RST_EN0": {
    +              "description": "reserved",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMERS_RST": {
    +                    "description": "reg_timers_rst",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SPI01_RST": {
    +                    "description": "reg_spi01_rst",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UART_RST": {
    +                    "description": "reg_uart_rst",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "WDG_RST": {
    +                    "description": "reg_wdg_rst",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "I2S0_RST": {
    +                    "description": "reg_i2s0_rst",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "UART1_RST": {
    +                    "description": "reg_uart1_rst",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "SPI2_RST": {
    +                    "description": "reg_spi2_rst",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "I2C_EXT0_RST": {
    +                    "description": "reg_ext0_rst",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "UHCI0_RST": {
    +                    "description": "reg_uhci0_rst",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "RMT_RST": {
    +                    "description": "reg_rmt_rst",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "PCNT_RST": {
    +                    "description": "reg_pcnt_rst",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "LEDC_RST": {
    +                    "description": "reg_ledc_rst",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "UHCI1_RST": {
    +                    "description": "reg_uhci1_rst",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TIMERGROUP_RST": {
    +                    "description": "reg_timergroup_rst",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "EFUSE_RST": {
    +                    "description": "reg_efuse_rst",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TIMERGROUP1_RST": {
    +                    "description": "reg_timergroup1_rst",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "SPI3_RST": {
    +                    "description": "reg_spi3_rst",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "PWM0_RST": {
    +                    "description": "reg_pwm0_rst",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "EXT1_RST": {
    +                    "description": "reg_ext1_rst",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "CAN_RST": {
    +                    "description": "reg_can_rst",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "PWM1_RST": {
    +                    "description": "reg_pwm1_rst",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "I2S1_RST": {
    +                    "description": "reg_i2s1_rst",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "SPI2_DMA_RST": {
    +                    "description": "reg_spi2_dma_rst",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "USB_DEVICE_RST": {
    +                    "description": "reg_usb_device_rst",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "UART_MEM_RST": {
    +                    "description": "reg_uart_mem_rst",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "PWM2_RST": {
    +                    "description": "reg_pwm2_rst",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "PWM3_RST": {
    +                    "description": "reg_pwm3_rst",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "SPI3_DMA_RST": {
    +                    "description": "reg_spi3_dma_rst",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "APB_SARADC_RST": {
    +                    "description": "reg_apb_saradc_rst",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "SYSTIMER_RST": {
    +                    "description": "reg_systimer_rst",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "ADC2_ARB_RST": {
    +                    "description": "reg_adc2_arb_rst",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "SPI4_RST": {
    +                    "description": "reg_spi4_rst",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PERIP_RST_EN1": {
    +              "description": "peripheral reset register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 510,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CRYPTO_AES_RST": {
    +                    "description": "reg_crypto_aes_rst",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CRYPTO_SHA_RST": {
    +                    "description": "reg_crypto_sha_rst",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "CRYPTO_RSA_RST": {
    +                    "description": "reg_crypto_rsa_rst",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "CRYPTO_DS_RST": {
    +                    "description": "reg_crypto_ds_rst",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CRYPTO_HMAC_RST": {
    +                    "description": "reg_crypto_hmac_rst",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "DMA_RST": {
    +                    "description": "reg_dma_rst",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SDIO_HOST_RST": {
    +                    "description": "reg_sdio_host_rst",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "LCD_CAM_RST": {
    +                    "description": "reg_lcd_cam_rst",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "UART2_RST": {
    +                    "description": "reg_uart2_rst",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "TSENS_RST": {
    +                    "description": "reg_tsens_rst",
    +                    "offset": 10,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BT_LPCK_DIV_INT": {
    +              "description": "clock config register",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 255,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BT_LPCK_DIV_NUM": {
    +                    "description": "reg_bt_lpck_div_num",
    +                    "offset": 0,
    +                    "size": 12
    +                  }
    +                }
    +              }
    +            },
    +            "BT_LPCK_DIV_FRAC": {
    +              "description": "clock config register",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 33558529,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BT_LPCK_DIV_B": {
    +                    "description": "reg_bt_lpck_div_b",
    +                    "offset": 0,
    +                    "size": 12
    +                  },
    +                  "BT_LPCK_DIV_A": {
    +                    "description": "reg_bt_lpck_div_a",
    +                    "offset": 12,
    +                    "size": 12
    +                  },
    +                  "LPCLK_SEL_RTC_SLOW": {
    +                    "description": "reg_lpclk_sel_rtc_slow",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "LPCLK_SEL_8M": {
    +                    "description": "reg_lpclk_sel_8m",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "LPCLK_SEL_XTAL": {
    +                    "description": "reg_lpclk_sel_xtal",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "LPCLK_SEL_XTAL32K": {
    +                    "description": "reg_lpclk_sel_xtal32k",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "LPCLK_RTC_EN": {
    +                    "description": "reg_lpclk_rtc_en",
    +                    "offset": 28,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INTR_FROM_CPU_0": {
    +              "description": "interrupt generate register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_INTR_FROM_CPU_0": {
    +                    "description": "reg_cpu_intr_from_cpu_0",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INTR_FROM_CPU_1": {
    +              "description": "interrupt generate register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_INTR_FROM_CPU_1": {
    +                    "description": "reg_cpu_intr_from_cpu_1",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INTR_FROM_CPU_2": {
    +              "description": "interrupt generate register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_INTR_FROM_CPU_2": {
    +                    "description": "reg_cpu_intr_from_cpu_2",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CPU_INTR_FROM_CPU_3": {
    +              "description": "interrupt generate register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CPU_INTR_FROM_CPU_3": {
    +                    "description": "reg_cpu_intr_from_cpu_3",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RSA_PD_CTRL": {
    +              "description": "rsa memory power control register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RSA_MEM_PD": {
    +                    "description": "reg_rsa_mem_pd",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RSA_MEM_FORCE_PU": {
    +                    "description": "reg_rsa_mem_force_pu",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RSA_MEM_FORCE_PD": {
    +                    "description": "reg_rsa_mem_force_pd",
    +                    "offset": 2,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EDMA_CTRL": {
    +              "description": "edma clcok and reset register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "EDMA_CLK_ON": {
    +                    "description": "reg_edma_clk_on",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EDMA_RESET": {
    +                    "description": "reg_edma_reset",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CACHE_CONTROL": {
    +              "description": "cache control register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 5,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ICACHE_CLK_ON": {
    +                    "description": "reg_icache_clk_on",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ICACHE_RESET": {
    +                    "description": "reg_icache_reset",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DCACHE_CLK_ON": {
    +                    "description": "reg_dcache_clk_on",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "DCACHE_RESET": {
    +                    "description": "reg_dcache_reset",
    +                    "offset": 3,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "EXTERNAL_DEVICE_ENCRYPT_DECRYPT_CONTROL": {
    +              "description": "SYSTEM_EXTERNAL_DEVICE_ENCRYPT_DECRYPT_CONTROL_REG",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE_SPI_MANUAL_ENCRYPT": {
    +                    "description": "reg_enable_spi_manual_encrypt",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "ENABLE_DOWNLOAD_DB_ENCRYPT": {
    +                    "description": "reg_enable_download_db_encrypt",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ENABLE_DOWNLOAD_G0CB_DECRYPT": {
    +                    "description": "reg_enable_download_g0cb_decrypt",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "ENABLE_DOWNLOAD_MANUAL_ENCRYPT": {
    +                    "description": "reg_enable_download_manual_encrypt",
    +                    "offset": 3,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RTC_FASTMEM_CONFIG": {
    +              "description": "fast memory config register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 2146435072,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_MEM_CRC_START": {
    +                    "description": "reg_rtc_mem_crc_start",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "RTC_MEM_CRC_ADDR": {
    +                    "description": "reg_rtc_mem_crc_addr",
    +                    "offset": 9,
    +                    "size": 11
    +                  },
    +                  "RTC_MEM_CRC_LEN": {
    +                    "description": "reg_rtc_mem_crc_len",
    +                    "offset": 20,
    +                    "size": 11
    +                  },
    +                  "RTC_MEM_CRC_FINISH": {
    +                    "description": "reg_rtc_mem_crc_finish",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RTC_FASTMEM_CRC": {
    +              "description": "reserved",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_MEM_CRC_RES": {
    +                    "description": "reg_rtc_mem_crc_res",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "REDUNDANT_ECO_CTRL": {
    +              "description": "eco register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "REDUNDANT_ECO_DRIVE": {
    +                    "description": "reg_redundant_eco_drive",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "REDUNDANT_ECO_RESULT": {
    +                    "description": "reg_redundant_eco_result",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CLOCK_GATE": {
    +              "description": "clock gating register",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLK_EN": {
    +                    "description": "reg_clk_en",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SYSCLK_CONF": {
    +              "description": "system clock config register",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRE_DIV_CNT": {
    +                    "description": "reg_pre_div_cnt",
    +                    "offset": 0,
    +                    "size": 10
    +                  },
    +                  "SOC_CLK_SEL": {
    +                    "description": "reg_soc_clk_sel",
    +                    "offset": 10,
    +                    "size": 2
    +                  },
    +                  "CLK_XTAL_FREQ": {
    +                    "description": "reg_clk_xtal_freq",
    +                    "offset": 12,
    +                    "size": 7,
    +                    "access": "read-only"
    +                  },
    +                  "CLK_DIV_EN": {
    +                    "description": "reg_clk_div_en",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "MEM_PVT": {
    +              "description": "mem pvt register",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 3,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MEM_PATH_LEN": {
    +                    "description": "reg_mem_path_len",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "MEM_ERR_CNT_CLR": {
    +                    "description": "reg_mem_err_cnt_clr",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "MONITOR_EN": {
    +                    "description": "reg_mem_pvt_monitor_en",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "MEM_TIMING_ERR_CNT": {
    +                    "description": "reg_mem_timing_err_cnt",
    +                    "offset": 6,
    +                    "size": 16,
    +                    "access": "read-only"
    +                  },
    +                  "MEM_VT_SEL": {
    +                    "description": "reg_mem_vt_sel",
    +                    "offset": 22,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "COMB_PVT_LVT_CONF": {
    +              "description": "mem pvt register",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 3,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMB_PATH_LEN_LVT": {
    +                    "description": "reg_comb_path_len_lvt",
    +                    "offset": 0,
    +                    "size": 5
    +                  },
    +                  "COMB_ERR_CNT_CLR_LVT": {
    +                    "description": "reg_comb_err_cnt_clr_lvt",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "COMB_PVT_MONITOR_EN_LVT": {
    +                    "description": "reg_comb_pvt_monitor_en_lvt",
    +                    "offset": 6,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "COMB_PVT_NVT_CONF": {
    +              "description": "mem pvt register",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 3,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMB_PATH_LEN_NVT": {
    +                    "description": "reg_comb_path_len_nvt",
    +                    "offset": 0,
    +                    "size": 5
    +                  },
    +                  "COMB_ERR_CNT_CLR_NVT": {
    +                    "description": "reg_comb_err_cnt_clr_nvt",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "COMB_PVT_MONITOR_EN_NVT": {
    +                    "description": "reg_comb_pvt_monitor_en_nvt",
    +                    "offset": 6,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "COMB_PVT_HVT_CONF": {
    +              "description": "mem pvt register",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 3,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMB_PATH_LEN_HVT": {
    +                    "description": "reg_comb_path_len_hvt",
    +                    "offset": 0,
    +                    "size": 5
    +                  },
    +                  "COMB_ERR_CNT_CLR_HVT": {
    +                    "description": "reg_comb_err_cnt_clr_hvt",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "COMB_PVT_MONITOR_EN_HVT": {
    +                    "description": "reg_comb_pvt_monitor_en_hvt",
    +                    "offset": 6,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "COMB_PVT_ERR_LVT_SITE0": {
    +              "description": "mem pvt register",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMB_TIMING_ERR_CNT_LVT_SITE0": {
    +                    "description": "reg_comb_timing_err_cnt_lvt_site0",
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "COMB_PVT_ERR_NVT_SITE0": {
    +              "description": "mem pvt register",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMB_TIMING_ERR_CNT_NVT_SITE0": {
    +                    "description": "reg_comb_timing_err_cnt_nvt_site0",
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "COMB_PVT_ERR_HVT_SITE0": {
    +              "description": "mem pvt register",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMB_TIMING_ERR_CNT_HVT_SITE0": {
    +                    "description": "reg_comb_timing_err_cnt_hvt_site0",
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "COMB_PVT_ERR_LVT_SITE1": {
    +              "description": "mem pvt register",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMB_TIMING_ERR_CNT_LVT_SITE1": {
    +                    "description": "reg_comb_timing_err_cnt_lvt_site1",
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "COMB_PVT_ERR_NVT_SITE1": {
    +              "description": "mem pvt register",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMB_TIMING_ERR_CNT_NVT_SITE1": {
    +                    "description": "reg_comb_timing_err_cnt_nvt_site1",
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "COMB_PVT_ERR_HVT_SITE1": {
    +              "description": "mem pvt register",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMB_TIMING_ERR_CNT_HVT_SITE1": {
    +                    "description": "reg_comb_timing_err_cnt_hvt_site1",
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "COMB_PVT_ERR_LVT_SITE2": {
    +              "description": "mem pvt register",
    +              "offset": 132,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMB_TIMING_ERR_CNT_LVT_SITE2": {
    +                    "description": "reg_comb_timing_err_cnt_lvt_site2",
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "COMB_PVT_ERR_NVT_SITE2": {
    +              "description": "mem pvt register",
    +              "offset": 136,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMB_TIMING_ERR_CNT_NVT_SITE2": {
    +                    "description": "reg_comb_timing_err_cnt_nvt_site2",
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "COMB_PVT_ERR_HVT_SITE2": {
    +              "description": "mem pvt register",
    +              "offset": 140,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMB_TIMING_ERR_CNT_HVT_SITE2": {
    +                    "description": "reg_comb_timing_err_cnt_hvt_site2",
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "COMB_PVT_ERR_LVT_SITE3": {
    +              "description": "mem pvt register",
    +              "offset": 144,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMB_TIMING_ERR_CNT_LVT_SITE3": {
    +                    "description": "reg_comb_timing_err_cnt_lvt_site3",
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "COMB_PVT_ERR_NVT_SITE3": {
    +              "description": "mem pvt register",
    +              "offset": 148,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMB_TIMING_ERR_CNT_NVT_SITE3": {
    +                    "description": "reg_comb_timing_err_cnt_nvt_site3",
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "COMB_PVT_ERR_HVT_SITE3": {
    +              "description": "mem pvt register",
    +              "offset": 152,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "COMB_TIMING_ERR_CNT_HVT_SITE3": {
    +                    "description": "reg_comb_timing_err_cnt_hvt_site3",
    +                    "offset": 0,
    +                    "size": 16,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "SYSTEM_REG_DATE": {
    +              "description": "Version register",
    +              "offset": 4092,
    +              "size": 32,
    +              "reset_value": 33583440,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SYSTEM_REG_DATE": {
    +                    "description": "reg_system_reg_date",
    +                    "offset": 0,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "SYSTIMER": {
    +        "description": "System Timer",
    +        "children": {
    +          "registers": {
    +            "CONF": {
    +              "description": "SYSTIMER_CONF.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 1174405120,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SYSTIMER_CLK_FO": {
    +                    "description": "systimer clock force on",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TARGET2_WORK_EN": {
    +                    "description": "target2 work enable",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "TARGET1_WORK_EN": {
    +                    "description": "target1 work enable",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "TARGET0_WORK_EN": {
    +                    "description": "target0 work enable",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "TIMER_UNIT1_CORE1_STALL_EN": {
    +                    "description": "If timer unit1 is stalled when core1 stalled",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "TIMER_UNIT1_CORE0_STALL_EN": {
    +                    "description": "If timer unit1 is stalled when core0 stalled",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "TIMER_UNIT0_CORE1_STALL_EN": {
    +                    "description": "If timer unit0 is stalled when core1 stalled",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "TIMER_UNIT0_CORE0_STALL_EN": {
    +                    "description": "If timer unit0 is stalled when core0 stalled",
    +                    "offset": 28,
    +                    "size": 1
    +                  },
    +                  "TIMER_UNIT1_WORK_EN": {
    +                    "description": "timer unit1 work enable",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "TIMER_UNIT0_WORK_EN": {
    +                    "description": "timer unit0 work enable",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CLK_EN": {
    +                    "description": "register file clk gating",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "UNIT0_OP": {
    +              "description": "SYSTIMER_UNIT0_OP.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_UNIT0_VALUE_VALID": {
    +                    "description": "reg_timer_unit0_value_valid",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TIMER_UNIT0_UPDATE": {
    +                    "description": "update timer_unit0",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "UNIT1_OP": {
    +              "description": "SYSTIMER_UNIT1_OP.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_UNIT1_VALUE_VALID": {
    +                    "description": "timer value is sync and valid",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TIMER_UNIT1_UPDATE": {
    +                    "description": "update timer unit1",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "UNIT0_LOAD_HI": {
    +              "description": "SYSTIMER_UNIT0_LOAD_HI.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_UNIT0_LOAD_HI": {
    +                    "description": "timer unit0 load high 32 bit",
    +                    "offset": 0,
    +                    "size": 20
    +                  }
    +                }
    +              }
    +            },
    +            "UNIT0_LOAD_LO": {
    +              "description": "SYSTIMER_UNIT0_LOAD_LO.",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_UNIT0_LOAD_LO": {
    +                    "description": "timer unit0 load low 32 bit",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "UNIT1_LOAD_HI": {
    +              "description": "SYSTIMER_UNIT1_LOAD_HI.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_UNIT1_LOAD_HI": {
    +                    "description": "timer unit1 load high 32 bit",
    +                    "offset": 0,
    +                    "size": 20
    +                  }
    +                }
    +              }
    +            },
    +            "UNIT1_LOAD_LO": {
    +              "description": "SYSTIMER_UNIT1_LOAD_LO.",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_UNIT1_LOAD_LO": {
    +                    "description": "timer unit1 load low 32 bit",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "TARGET0_HI": {
    +              "description": "SYSTIMER_TARGET0_HI.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_TARGET0_HI": {
    +                    "description": "timer taget0 high 32 bit",
    +                    "offset": 0,
    +                    "size": 20
    +                  }
    +                }
    +              }
    +            },
    +            "TARGET0_LO": {
    +              "description": "SYSTIMER_TARGET0_LO.",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_TARGET0_LO": {
    +                    "description": "timer taget0 low 32 bit",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "TARGET1_HI": {
    +              "description": "SYSTIMER_TARGET1_HI.",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_TARGET1_HI": {
    +                    "description": "timer taget1 high 32 bit",
    +                    "offset": 0,
    +                    "size": 20
    +                  }
    +                }
    +              }
    +            },
    +            "TARGET1_LO": {
    +              "description": "SYSTIMER_TARGET1_LO.",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_TARGET1_LO": {
    +                    "description": "timer taget1 low 32 bit",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "TARGET2_HI": {
    +              "description": "SYSTIMER_TARGET2_HI.",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_TARGET2_HI": {
    +                    "description": "timer taget2 high 32 bit",
    +                    "offset": 0,
    +                    "size": 20
    +                  }
    +                }
    +              }
    +            },
    +            "TARGET2_LO": {
    +              "description": "SYSTIMER_TARGET2_LO.",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_TARGET2_LO": {
    +                    "description": "timer taget2 low 32 bit",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "TARGET0_CONF": {
    +              "description": "SYSTIMER_TARGET0_CONF.",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TARGET0_PERIOD": {
    +                    "description": "target0 period",
    +                    "offset": 0,
    +                    "size": 26
    +                  },
    +                  "TARGET0_PERIOD_MODE": {
    +                    "description": "Set target0 to period mode",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "TARGET0_TIMER_UNIT_SEL": {
    +                    "description": "select which unit to compare",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TARGET1_CONF": {
    +              "description": "SYSTIMER_TARGET1_CONF.",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TARGET1_PERIOD": {
    +                    "description": "target1 period",
    +                    "offset": 0,
    +                    "size": 26
    +                  },
    +                  "TARGET1_PERIOD_MODE": {
    +                    "description": "Set target1 to period mode",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "TARGET1_TIMER_UNIT_SEL": {
    +                    "description": "select which unit to compare",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TARGET2_CONF": {
    +              "description": "SYSTIMER_TARGET2_CONF.",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TARGET2_PERIOD": {
    +                    "description": "target2 period",
    +                    "offset": 0,
    +                    "size": 26
    +                  },
    +                  "TARGET2_PERIOD_MODE": {
    +                    "description": "Set target2 to period mode",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "TARGET2_TIMER_UNIT_SEL": {
    +                    "description": "select which unit to compare",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "UNIT0_VALUE_HI": {
    +              "description": "SYSTIMER_UNIT0_VALUE_HI.",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_UNIT0_VALUE_HI": {
    +                    "description": "timer read value high 32bit",
    +                    "offset": 0,
    +                    "size": 20,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "UNIT0_VALUE_LO": {
    +              "description": "SYSTIMER_UNIT0_VALUE_LO.",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_UNIT0_VALUE_LO": {
    +                    "description": "timer read value low 32bit",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "UNIT1_VALUE_HI": {
    +              "description": "SYSTIMER_UNIT1_VALUE_HI.",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_UNIT1_VALUE_HI": {
    +                    "description": "timer read value high 32bit",
    +                    "offset": 0,
    +                    "size": 20,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "UNIT1_VALUE_LO": {
    +              "description": "SYSTIMER_UNIT1_VALUE_LO.",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_UNIT1_VALUE_LO": {
    +                    "description": "timer read value low 32bit",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "COMP0_LOAD": {
    +              "description": "SYSTIMER_COMP0_LOAD.",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_COMP0_LOAD": {
    +                    "description": "timer comp0 load value",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "COMP1_LOAD": {
    +              "description": "SYSTIMER_COMP1_LOAD.",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_COMP1_LOAD": {
    +                    "description": "timer comp1 load value",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "COMP2_LOAD": {
    +              "description": "SYSTIMER_COMP2_LOAD.",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_COMP2_LOAD": {
    +                    "description": "timer comp2 load value",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "UNIT0_LOAD": {
    +              "description": "SYSTIMER_UNIT0_LOAD.",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_UNIT0_LOAD": {
    +                    "description": "timer unit0 load value",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "UNIT1_LOAD": {
    +              "description": "SYSTIMER_UNIT1_LOAD.",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIMER_UNIT1_LOAD": {
    +                    "description": "timer unit1 load value",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ENA": {
    +              "description": "SYSTIMER_INT_ENA.",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TARGET0_INT_ENA": {
    +                    "description": "interupt0 enable",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TARGET1_INT_ENA": {
    +                    "description": "interupt1 enable",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TARGET2_INT_ENA": {
    +                    "description": "interupt2 enable",
    +                    "offset": 2,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INT_RAW": {
    +              "description": "SYSTIMER_INT_RAW.",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TARGET0_INT_RAW": {
    +                    "description": "interupt0 raw",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TARGET1_INT_RAW": {
    +                    "description": "interupt1 raw",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TARGET2_INT_RAW": {
    +                    "description": "interupt2 raw",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_CLR": {
    +              "description": "SYSTIMER_INT_CLR.",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TARGET0_INT_CLR": {
    +                    "description": "interupt0 clear",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TARGET1_INT_CLR": {
    +                    "description": "interupt1 clear",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TARGET2_INT_CLR": {
    +                    "description": "interupt2 clear",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ST": {
    +              "description": "SYSTIMER_INT_ST.",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TARGET0_INT_ST": {
    +                    "description": "reg_target0_int_st",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TARGET1_INT_ST": {
    +                    "description": "reg_target1_int_st",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TARGET2_INT_ST": {
    +                    "description": "reg_target2_int_st",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DATE": {
    +              "description": "SYSTIMER_DATE.",
    +              "offset": 252,
    +              "size": 32,
    +              "reset_value": 33579377,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATE": {
    +                    "description": "reg_date",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TIMG0": {
    +        "description": "Timer Group",
    +        "children": {
    +          "registers": {
    +            "T0CONFIG": {
    +              "description": "TIMG_T0CONFIG_REG.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 1610620928,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "T0_USE_XTAL": {
    +                    "description": "reg_t0_use_xtal.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "T0_ALARM_EN": {
    +                    "description": "reg_t0_alarm_en.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "T0_DIVCNT_RST": {
    +                    "description": "reg_t0_divcnt_rst.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "T0_DIVIDER": {
    +                    "description": "reg_t0_divider.",
    +                    "offset": 13,
    +                    "size": 16
    +                  },
    +                  "T0_AUTORELOAD": {
    +                    "description": "reg_t0_autoreload.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "T0_INCREASE": {
    +                    "description": "reg_t0_increase.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "T0_EN": {
    +                    "description": "reg_t0_en.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "T0LO": {
    +              "description": "TIMG_T0LO_REG.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "T0_LO": {
    +                    "description": "t0_lo",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "T0HI": {
    +              "description": "TIMG_T0HI_REG.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "T0_HI": {
    +                    "description": "t0_hi",
    +                    "offset": 0,
    +                    "size": 22,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "T0UPDATE": {
    +              "description": "TIMG_T0UPDATE_REG.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "T0_UPDATE": {
    +                    "description": "t0_update",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "T0ALARMLO": {
    +              "description": "TIMG_T0ALARMLO_REG.",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "T0_ALARM_LO": {
    +                    "description": "reg_t0_alarm_lo.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "T0ALARMHI": {
    +              "description": "TIMG_T0ALARMHI_REG.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "T0_ALARM_HI": {
    +                    "description": "reg_t0_alarm_hi.",
    +                    "offset": 0,
    +                    "size": 22
    +                  }
    +                }
    +              }
    +            },
    +            "T0LOADLO": {
    +              "description": "TIMG_T0LOADLO_REG.",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "T0_LOAD_LO": {
    +                    "description": "reg_t0_load_lo.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "T0LOADHI": {
    +              "description": "TIMG_T0LOADHI_REG.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "T0_LOAD_HI": {
    +                    "description": "reg_t0_load_hi.",
    +                    "offset": 0,
    +                    "size": 22
    +                  }
    +                }
    +              }
    +            },
    +            "T0LOAD": {
    +              "description": "TIMG_T0LOAD_REG.",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "T0_LOAD": {
    +                    "description": "t0_load",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "WDTCONFIG0": {
    +              "description": "TIMG_WDTCONFIG0_REG.",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 311296,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WDT_APPCPU_RESET_EN": {
    +                    "description": "reg_wdt_appcpu_reset_en.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "WDT_PROCPU_RESET_EN": {
    +                    "description": "reg_wdt_procpu_reset_en.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "WDT_FLASHBOOT_MOD_EN": {
    +                    "description": "reg_wdt_flashboot_mod_en.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "WDT_SYS_RESET_LENGTH": {
    +                    "description": "reg_wdt_sys_reset_length.",
    +                    "offset": 15,
    +                    "size": 3
    +                  },
    +                  "WDT_CPU_RESET_LENGTH": {
    +                    "description": "reg_wdt_cpu_reset_length.",
    +                    "offset": 18,
    +                    "size": 3
    +                  },
    +                  "WDT_USE_XTAL": {
    +                    "description": "reg_wdt_use_xtal.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "WDT_CONF_UPDATE_EN": {
    +                    "description": "reg_wdt_conf_update_en.",
    +                    "offset": 22,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "WDT_STG3": {
    +                    "description": "reg_wdt_stg3.",
    +                    "offset": 23,
    +                    "size": 2
    +                  },
    +                  "WDT_STG2": {
    +                    "description": "reg_wdt_stg2.",
    +                    "offset": 25,
    +                    "size": 2
    +                  },
    +                  "WDT_STG1": {
    +                    "description": "reg_wdt_stg1.",
    +                    "offset": 27,
    +                    "size": 2
    +                  },
    +                  "WDT_STG0": {
    +                    "description": "reg_wdt_stg0.",
    +                    "offset": 29,
    +                    "size": 2
    +                  },
    +                  "WDT_EN": {
    +                    "description": "reg_wdt_en.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "WDTCONFIG1": {
    +              "description": "TIMG_WDTCONFIG1_REG.",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 65536,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WDT_DIVCNT_RST": {
    +                    "description": "reg_wdt_divcnt_rst.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "WDT_CLK_PRESCALE": {
    +                    "description": "reg_wdt_clk_prescale.",
    +                    "offset": 16,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "WDTCONFIG2": {
    +              "description": "TIMG_WDTCONFIG2_REG.",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 26000000,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WDT_STG0_HOLD": {
    +                    "description": "reg_wdt_stg0_hold.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "WDTCONFIG3": {
    +              "description": "TIMG_WDTCONFIG3_REG.",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 134217727,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WDT_STG1_HOLD": {
    +                    "description": "reg_wdt_stg1_hold.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "WDTCONFIG4": {
    +              "description": "TIMG_WDTCONFIG4_REG.",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 1048575,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WDT_STG2_HOLD": {
    +                    "description": "reg_wdt_stg2_hold.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "WDTCONFIG5": {
    +              "description": "TIMG_WDTCONFIG5_REG.",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 1048575,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WDT_STG3_HOLD": {
    +                    "description": "reg_wdt_stg3_hold.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "WDTFEED": {
    +              "description": "TIMG_WDTFEED_REG.",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WDT_FEED": {
    +                    "description": "wdt_feed",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "WDTWPROTECT": {
    +              "description": "TIMG_WDTWPROTECT_REG.",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 1356348065,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WDT_WKEY": {
    +                    "description": "reg_wdt_wkey.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "RTCCALICFG": {
    +              "description": "TIMG_RTCCALICFG_REG.",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 77824,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_CALI_START_CYCLING": {
    +                    "description": "reg_rtc_cali_start_cycling.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "RTC_CALI_CLK_SEL": {
    +                    "description": "reg_rtc_cali_clk_sel.0:rtcslowclock.1:clk_80m.2:xtal_32k",
    +                    "offset": 13,
    +                    "size": 2
    +                  },
    +                  "RTC_CALI_RDY": {
    +                    "description": "rtc_cali_rdy",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_CALI_MAX": {
    +                    "description": "reg_rtc_cali_max.",
    +                    "offset": 16,
    +                    "size": 15
    +                  },
    +                  "RTC_CALI_START": {
    +                    "description": "reg_rtc_cali_start.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "RTCCALICFG1": {
    +              "description": "TIMG_RTCCALICFG1_REG.",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_CALI_CYCLING_DATA_VLD": {
    +                    "description": "rtc_cali_cycling_data_vld",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_CALI_VALUE": {
    +                    "description": "rtc_cali_value",
    +                    "offset": 7,
    +                    "size": 25,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ENA_TIMERS": {
    +              "description": "INT_ENA_TIMG_REG",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "T0_INT_ENA": {
    +                    "description": "t0_int_ena",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "WDT_INT_ENA": {
    +                    "description": "wdt_int_ena",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INT_RAW_TIMERS": {
    +              "description": "INT_RAW_TIMG_REG",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "T0_INT_RAW": {
    +                    "description": "t0_int_raw",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "WDT_INT_RAW": {
    +                    "description": "wdt_int_raw",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ST_TIMERS": {
    +              "description": "INT_ST_TIMG_REG",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "T0_INT_ST": {
    +                    "description": "t0_int_st",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "WDT_INT_ST": {
    +                    "description": "wdt_int_st",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_CLR_TIMERS": {
    +              "description": "INT_CLR_TIMG_REG",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "T0_INT_CLR": {
    +                    "description": "t0_int_clr",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "WDT_INT_CLR": {
    +                    "description": "wdt_int_clr",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RTCCALICFG2": {
    +              "description": "TIMG_RTCCALICFG2_REG.",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 4294967192,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RTC_CALI_TIMEOUT": {
    +                    "description": "timeoutindicator",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTC_CALI_TIMEOUT_RST_CNT": {
    +                    "description": "reg_rtc_cali_timeout_rst_cnt.Cyclesthatreleasecalibrationtimeoutreset",
    +                    "offset": 3,
    +                    "size": 4
    +                  },
    +                  "RTC_CALI_TIMEOUT_THRES": {
    +                    "description": "reg_rtc_cali_timeout_thres.timeoutifcalivaluecountsoverthreshold",
    +                    "offset": 7,
    +                    "size": 25
    +                  }
    +                }
    +              }
    +            },
    +            "NTIMG_DATE": {
    +              "description": "TIMG_NTIMG_DATE_REG.",
    +              "offset": 248,
    +              "size": 32,
    +              "reset_value": 33579409,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NTIMGS_DATE": {
    +                    "description": "reg_ntimers_date.",
    +                    "offset": 0,
    +                    "size": 28
    +                  }
    +                }
    +              }
    +            },
    +            "REGCLK": {
    +              "description": "TIMG_REGCLK_REG.",
    +              "offset": 252,
    +              "size": 32,
    +              "reset_value": 1610612736,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WDT_CLK_IS_ACTIVE": {
    +                    "description": "reg_wdt_clk_is_active.",
    +                    "offset": 29,
    +                    "size": 1
    +                  },
    +                  "TIMER_CLK_IS_ACTIVE": {
    +                    "description": "reg_timer_clk_is_active.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "CLK_EN": {
    +                    "description": "reg_clk_en.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "XTS_AES": {
    +        "description": "XTS-AES-128 Flash Encryption",
    +        "children": {
    +          "registers": {
    +            "PLAIN_MEM": {
    +              "description": "The memory that stores plaintext",
    +              "offset": 0,
    +              "size": 8,
    +              "count": 16,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295
    +            },
    +            "LINESIZE": {
    +              "description": "XTS-AES line-size register",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "LINESIZE": {
    +                    "description": "This bit stores the line size parameter. 0: 16Byte, 1: 32Byte.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DESTINATION": {
    +              "description": "XTS-AES destination register",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DESTINATION": {
    +                    "description": "This bit stores the destination. 0: flash(default). 1: reserved.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "PHYSICAL_ADDRESS": {
    +              "description": "XTS-AES physical address register",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PHYSICAL_ADDRESS": {
    +                    "description": "Those bits stores the physical address. If linesize is 16-byte, the physical address should be aligned of 16 bytes. If linesize is 32-byte, the physical address should be aligned of 32 bytes.",
    +                    "offset": 0,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            },
    +            "TRIGGER": {
    +              "description": "XTS-AES trigger register",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TRIGGER": {
    +                    "description": "Set this bit to start manual encryption calculation",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RELEASE": {
    +              "description": "XTS-AES release register",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RELEASE": {
    +                    "description": "Set this bit to release the manual encrypted result, after that the result will be visible to spi",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DESTROY": {
    +              "description": "XTS-AES destroy register",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DESTROY": {
    +                    "description": "Set this bit to destroy XTS-AES result.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "STATE": {
    +              "description": "XTS-AES status register",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "STATE": {
    +                    "description": "Those bits shows XTS-AES status. 0=IDLE, 1=WORK, 2=RELEASE, 3=USE. IDLE means that XTS-AES is idle. WORK means that XTS-AES is busy with calculation. RELEASE means the encrypted result is generated but not visible to mspi. USE means that the encrypted result is visible to mspi.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DATE": {
    +              "description": "XTS-AES version control register",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 538969635,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATE": {
    +                    "description": "Those bits stores the version information of XTS-AES.",
    +                    "offset": 0,
    +                    "size": 30
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "TWAI": {
    +        "description": "Two-Wire Automotive Interface",
    +        "children": {
    +          "registers": {
    +            "MODE": {
    +              "description": "Mode Register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RESET_MODE": {
    +                    "description": "This bit is used to configure the operating mode of the TWAI Controller. 1: Reset mode; 0: Operating mode.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "LISTEN_ONLY_MODE": {
    +                    "description": "1: Listen only mode. In this mode the nodes will only receive messages from the bus, without generating the acknowledge signal nor updating the RX error counter.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SELF_TEST_MODE": {
    +                    "description": "1: Self test mode. In this mode the TX nodes can perform a successful transmission without receiving the acknowledge signal. This mode is often used to test a single node with the self reception request command.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RX_FILTER_MODE": {
    +                    "description": "This bit is used to configure the filter mode. 0: Dual filter mode; 1: Single filter mode.",
    +                    "offset": 3,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CMD": {
    +              "description": "Command Register",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_REQ": {
    +                    "description": "Set the bit to 1 to allow the driving nodes start transmission.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "ABORT_TX": {
    +                    "description": "Set the bit to 1 to cancel a pending transmission request.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RELEASE_BUF": {
    +                    "description": "Set the bit to 1 to release the RX buffer.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CLR_OVERRUN": {
    +                    "description": "Set the bit to 1 to clear the data overrun status bit.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SELF_RX_REQ": {
    +                    "description": "Self reception request command. Set the bit to 1 to allow a message be transmitted and received simultaneously.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "STATUS": {
    +              "description": "Status register",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_BUF_ST": {
    +                    "description": "1: The data in the RX buffer is not empty, with at least one received data packet.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OVERRUN_ST": {
    +                    "description": "1: The RX FIFO is full and data overrun has occurred.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TX_BUF_ST": {
    +                    "description": "1: The TX buffer is empty, the CPU may write a message into it.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TX_COMPLETE": {
    +                    "description": "1: The TWAI controller has successfully received a packet from the bus.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RX_ST": {
    +                    "description": "1: The TWAI Controller is receiving a message from the bus.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TX_ST": {
    +                    "description": "1: The TWAI Controller is transmitting a message to the bus.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ERR_ST": {
    +                    "description": "1: At least one of the RX/TX error counter has reached or exceeded the value set in register TWAI_ERR_WARNING_LIMIT_REG.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BUS_OFF_ST": {
    +                    "description": "1: In bus-off status, the TWAI Controller is no longer involved in bus activities.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "MISS_ST": {
    +                    "description": "This bit reflects whether the data packet in the RX FIFO is complete. 1: The current packet is missing; 0: The current packet is complete",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_RAW": {
    +              "description": "Interrupt Register",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_INT_ST": {
    +                    "description": "Receive interrupt. If this bit is set to 1, it indicates there are messages to be handled in the RX FIFO.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TX_INT_ST": {
    +                    "description": "Transmit interrupt. If this bit is set to 1, it indicates the message transmitting mis- sion is finished and a new transmission is able to execute.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ERR_WARN_INT_ST": {
    +                    "description": "Error warning interrupt. If this bit is set to 1, it indicates the error status signal and the bus-off status signal of Status register have changed (e.g., switched from 0 to 1 or from 1 to 0).",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OVERRUN_INT_ST": {
    +                    "description": "Data overrun interrupt. If this bit is set to 1, it indicates a data overrun interrupt is generated in the RX FIFO.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ERR_PASSIVE_INT_ST": {
    +                    "description": "Error passive interrupt. If this bit is set to 1, it indicates the TWAI Controller is switched between error active status and error passive status due to the change of error counters.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ARB_LOST_INT_ST": {
    +                    "description": "Arbitration lost interrupt. If this bit is set to 1, it indicates an arbitration lost interrupt is generated.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BUS_ERR_INT_ST": {
    +                    "description": "Error interrupt. If this bit is set to 1, it indicates an error is detected on the bus.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ENA": {
    +              "description": "Interrupt Enable Register",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_INT_ENA": {
    +                    "description": "Set this bit to 1 to enable receive interrupt.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TX_INT_ENA": {
    +                    "description": "Set this bit to 1 to enable transmit interrupt.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "ERR_WARN_INT_ENA": {
    +                    "description": "Set this bit to 1 to enable error warning interrupt.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "OVERRUN_INT_ENA": {
    +                    "description": "Set this bit to 1 to enable data overrun interrupt.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ERR_PASSIVE_INT_ENA": {
    +                    "description": "Set this bit to 1 to enable error passive interrupt.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "ARB_LOST_INT_ENA": {
    +                    "description": "Set this bit to 1 to enable arbitration lost interrupt.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BUS_ERR_INT_ENA": {
    +                    "description": "Set this bit to 1 to enable error interrupt.",
    +                    "offset": 7,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "BUS_TIMING_0": {
    +              "description": "Bus Timing Register 0",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "BAUD_PRESC": {
    +                    "description": "Baud Rate Prescaler, determines the frequency dividing ratio.",
    +                    "offset": 0,
    +                    "size": 13
    +                  },
    +                  "SYNC_JUMP_WIDTH": {
    +                    "description": "Synchronization Jump Width (SJW), 1 \\verb+~+ 14 Tq wide.",
    +                    "offset": 14,
    +                    "size": 2
    +                  }
    +                }
    +              }
    +            },
    +            "BUS_TIMING_1": {
    +              "description": "Bus Timing Register 1",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TIME_SEG1": {
    +                    "description": "The width of PBS1.",
    +                    "offset": 0,
    +                    "size": 4
    +                  },
    +                  "TIME_SEG2": {
    +                    "description": "The width of PBS2.",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "TIME_SAMP": {
    +                    "description": "The number of sample points. 0: the bus is sampled once; 1: the bus is sampled three times",
    +                    "offset": 7,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ARB_LOST_CAP": {
    +              "description": "Arbitration Lost Capture Register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ARB_LOST_CAP": {
    +                    "description": "This register contains information about the bit position of lost arbitration.",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "ERR_CODE_CAP": {
    +              "description": "Error Code Capture Register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ECC_SEGMENT": {
    +                    "description": "This register contains information about the location of errors, see Table 181 for details.",
    +                    "offset": 0,
    +                    "size": 5,
    +                    "access": "read-only"
    +                  },
    +                  "ECC_DIRECTION": {
    +                    "description": "This register contains information about transmission direction of the node when error occurs. 1: Error occurs when receiving a message; 0: Error occurs when transmitting a message",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "ECC_TYPE": {
    +                    "description": "This register contains information about error types: 00: bit error; 01: form error; 10: stuff error; 11: other type of error",
    +                    "offset": 6,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "ERR_WARNING_LIMIT": {
    +              "description": "Error Warning Limit Register",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 96,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ERR_WARNING_LIMIT": {
    +                    "description": "Error warning threshold. In the case when any of a error counter value exceeds the threshold, or all the error counter values are below the threshold, an error warning interrupt will be triggered (given the enable signal is valid).",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "RX_ERR_CNT": {
    +              "description": "Receive Error Counter Register",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_ERR_CNT": {
    +                    "description": "The RX error counter register, reflects value changes under reception status.",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TX_ERR_CNT": {
    +              "description": "Transmit Error Counter Register",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_ERR_CNT": {
    +                    "description": "The TX error counter register, reflects value changes under transmission status.",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "DATA_0": {
    +              "description": "Data register 0",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_BYTE_0": {
    +                    "description": "In reset mode, it is acceptance code register 0 with R/W Permission. In operation mode, it stores the 0th byte information of the data to be transmitted under operating mode.",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DATA_1": {
    +              "description": "Data register 1",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_BYTE_1": {
    +                    "description": "In reset mode, it is acceptance code register 1 with R/W Permission. In operation mode, it stores the 1st byte information of the data to be transmitted under operating mode.",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DATA_2": {
    +              "description": "Data register 2",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_BYTE_2": {
    +                    "description": "In reset mode, it is acceptance code register 2 with R/W Permission. In operation mode, it stores the 2nd byte information of the data to be transmitted under operating mode.",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DATA_3": {
    +              "description": "Data register 3",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_BYTE_3": {
    +                    "description": "In reset mode, it is acceptance code register 3 with R/W Permission. In operation mode, it stores the 3rd byte information of the data to be transmitted under operating mode.",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DATA_4": {
    +              "description": "Data register 4",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_BYTE_4": {
    +                    "description": "In reset mode, it is acceptance mask register 0 with R/W Permission. In operation mode, it stores the 4th byte information of the data to be transmitted under operating mode.",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DATA_5": {
    +              "description": "Data register 5",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_BYTE_5": {
    +                    "description": "In reset mode, it is acceptance mask register 1 with R/W Permission. In operation mode, it stores the 5th byte information of the data to be transmitted under operating mode.",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DATA_6": {
    +              "description": "Data register 6",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_BYTE_6": {
    +                    "description": "In reset mode, it is acceptance mask register 2 with R/W Permission. In operation mode, it stores the 6th byte information of the data to be transmitted under operating mode.",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DATA_7": {
    +              "description": "Data register 7",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_BYTE_7": {
    +                    "description": "In reset mode, it is acceptance mask register 3 with R/W Permission. In operation mode, it stores the 7th byte information of the data to be transmitted under operating mode.",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DATA_8": {
    +              "description": "Data register 8",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_BYTE_8": {
    +                    "description": "Stored the 8th byte information of the data to be transmitted under operating mode.",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DATA_9": {
    +              "description": "Data register 9",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_BYTE_9": {
    +                    "description": "Stored the 9th byte information of the data to be transmitted under operating mode.",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DATA_10": {
    +              "description": "Data register 10",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_BYTE_10": {
    +                    "description": "Stored the 10th byte information of the data to be transmitted under operating mode.",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DATA_11": {
    +              "description": "Data register 11",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_BYTE_11": {
    +                    "description": "Stored the 11th byte information of the data to be transmitted under operating mode.",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "DATA_12": {
    +              "description": "Data register 12",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_BYTE_12": {
    +                    "description": "Stored the 12th byte information of the data to be transmitted under operating mode.",
    +                    "offset": 0,
    +                    "size": 8,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RX_MESSAGE_CNT": {
    +              "description": "Receive Message Counter Register",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_MESSAGE_COUNTER": {
    +                    "description": "This register reflects the number of messages available within the RX FIFO.",
    +                    "offset": 0,
    +                    "size": 7,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CLOCK_DIVIDER": {
    +              "description": "Clock Divider register",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CD": {
    +                    "description": "These bits are used to configure frequency dividing coefficients of the external CLKOUT pin.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "CLOCK_OFF": {
    +                    "description": "This bit can be configured under reset mode. 1: Disable the external CLKOUT pin; 0: Enable the external CLKOUT pin",
    +                    "offset": 8,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "UART0": {
    +        "description": "UART (Universal Asynchronous Receiver-Transmitter) Controller",
    +        "children": {
    +          "registers": {
    +            "FIFO": {
    +              "description": "FIFO data register",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXFIFO_RD_BYTE": {
    +                    "description": "UART 0 accesses FIFO via this register.",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "INT_RAW": {
    +              "description": "Raw interrupt status",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 2,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXFIFO_FULL_INT_RAW": {
    +                    "description": "This interrupt raw bit turns to high level when receiver receives more data than what rxfifo_full_thrhd specifies.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXFIFO_EMPTY_INT_RAW": {
    +                    "description": "This interrupt raw bit turns to high level when the amount of data in Tx-FIFO is less than what txfifo_empty_thrhd specifies .",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PARITY_ERR_INT_RAW": {
    +                    "description": "This interrupt raw bit turns to high level when receiver detects a parity error in the data.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FRM_ERR_INT_RAW": {
    +                    "description": "This interrupt raw bit turns to high level when receiver detects a data frame error .",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXFIFO_OVF_INT_RAW": {
    +                    "description": "This interrupt raw bit turns to high level when receiver receives more data than the FIFO can store.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DSR_CHG_INT_RAW": {
    +                    "description": "This interrupt raw bit turns to high level when receiver detects the edge change of DSRn signal.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CTS_CHG_INT_RAW": {
    +                    "description": "This interrupt raw bit turns to high level when receiver detects the edge change of CTSn signal.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BRK_DET_INT_RAW": {
    +                    "description": "This interrupt raw bit turns to high level when receiver detects a 0 after the stop bit.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXFIFO_TOUT_INT_RAW": {
    +                    "description": "This interrupt raw bit turns to high level when receiver takes more time than rx_tout_thrhd to receive a byte.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SW_XON_INT_RAW": {
    +                    "description": "This interrupt raw bit turns to high level when receiver recevies Xon char when uart_sw_flow_con_en is set to 1.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SW_XOFF_INT_RAW": {
    +                    "description": "This interrupt raw bit turns to high level when receiver receives Xoff char when uart_sw_flow_con_en is set to 1.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GLITCH_DET_INT_RAW": {
    +                    "description": "This interrupt raw bit turns to high level when receiver detects a glitch in the middle of a start bit.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TX_BRK_DONE_INT_RAW": {
    +                    "description": "This interrupt raw bit turns to high level when transmitter completes  sending  NULL characters, after all data in Tx-FIFO are sent.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TX_BRK_IDLE_DONE_INT_RAW": {
    +                    "description": "This interrupt raw bit turns to high level when transmitter has kept the shortest duration after sending the  last data.",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TX_DONE_INT_RAW": {
    +                    "description": "This interrupt raw bit turns to high level when transmitter has send out all data in FIFO.",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RS485_PARITY_ERR_INT_RAW": {
    +                    "description": "This interrupt raw bit turns to high level when receiver detects a parity error from the echo of transmitter in rs485 mode.",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RS485_FRM_ERR_INT_RAW": {
    +                    "description": "This interrupt raw bit turns to high level when receiver detects a data frame error from the echo of transmitter in rs485 mode.",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RS485_CLASH_INT_RAW": {
    +                    "description": "This interrupt raw bit turns to high level when detects a clash between transmitter and receiver in rs485 mode.",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "AT_CMD_CHAR_DET_INT_RAW": {
    +                    "description": "This interrupt raw bit turns to high level when receiver detects the configured at_cmd char.",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "WAKEUP_INT_RAW": {
    +                    "description": "This interrupt raw bit turns to high level when input rxd edge changes more times than what reg_active_threshold specifies in light sleeping mode.",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ST": {
    +              "description": "Masked interrupt status",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXFIFO_FULL_INT_ST": {
    +                    "description": "This is the status bit for rxfifo_full_int_raw when rxfifo_full_int_ena is set to 1.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXFIFO_EMPTY_INT_ST": {
    +                    "description": "This is the status bit for  txfifo_empty_int_raw  when txfifo_empty_int_ena is set to 1.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PARITY_ERR_INT_ST": {
    +                    "description": "This is the status bit for parity_err_int_raw when parity_err_int_ena is set to 1.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "FRM_ERR_INT_ST": {
    +                    "description": "This is the status bit for frm_err_int_raw when frm_err_int_ena is set to 1.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXFIFO_OVF_INT_ST": {
    +                    "description": "This is the status bit for rxfifo_ovf_int_raw when rxfifo_ovf_int_ena is set to 1.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "DSR_CHG_INT_ST": {
    +                    "description": "This is the status bit for dsr_chg_int_raw when dsr_chg_int_ena is set to 1.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CTS_CHG_INT_ST": {
    +                    "description": "This is the status bit for cts_chg_int_raw when cts_chg_int_ena is set to 1.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "BRK_DET_INT_ST": {
    +                    "description": "This is the status bit for brk_det_int_raw when brk_det_int_ena is set to 1.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXFIFO_TOUT_INT_ST": {
    +                    "description": "This is the status bit for rxfifo_tout_int_raw when rxfifo_tout_int_ena is set to 1.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SW_XON_INT_ST": {
    +                    "description": "This is the status bit for sw_xon_int_raw when sw_xon_int_ena is set to 1.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SW_XOFF_INT_ST": {
    +                    "description": "This is the status bit for sw_xoff_int_raw when sw_xoff_int_ena is set to 1.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "GLITCH_DET_INT_ST": {
    +                    "description": "This is the status bit for glitch_det_int_raw when glitch_det_int_ena is set to 1.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TX_BRK_DONE_INT_ST": {
    +                    "description": "This is the status bit for tx_brk_done_int_raw when tx_brk_done_int_ena is set to 1.",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TX_BRK_IDLE_DONE_INT_ST": {
    +                    "description": "This is the stauts bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena is set to 1.",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TX_DONE_INT_ST": {
    +                    "description": "This is the status bit for tx_done_int_raw when tx_done_int_ena is set to 1.",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RS485_PARITY_ERR_INT_ST": {
    +                    "description": "This is the status bit for rs485_parity_err_int_raw when rs485_parity_int_ena is set to 1.",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RS485_FRM_ERR_INT_ST": {
    +                    "description": "This is the status bit for rs485_frm_err_int_raw when rs485_fm_err_int_ena is set to 1.",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RS485_CLASH_INT_ST": {
    +                    "description": "This is the status bit for rs485_clash_int_raw when rs485_clash_int_ena is set to 1.",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "AT_CMD_CHAR_DET_INT_ST": {
    +                    "description": "This is the status bit for at_cmd_det_int_raw when at_cmd_char_det_int_ena is set to 1.",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "WAKEUP_INT_ST": {
    +                    "description": "This is the status bit for uart_wakeup_int_raw when uart_wakeup_int_ena is set to 1.",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ENA": {
    +              "description": "Interrupt enable bits",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXFIFO_FULL_INT_ENA": {
    +                    "description": "This is the enable bit for rxfifo_full_int_st register.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TXFIFO_EMPTY_INT_ENA": {
    +                    "description": "This is the enable bit for txfifo_empty_int_st register.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "PARITY_ERR_INT_ENA": {
    +                    "description": "This is the enable bit for parity_err_int_st register.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FRM_ERR_INT_ENA": {
    +                    "description": "This is the enable bit for frm_err_int_st register.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RXFIFO_OVF_INT_ENA": {
    +                    "description": "This is the enable bit for rxfifo_ovf_int_st register.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "DSR_CHG_INT_ENA": {
    +                    "description": "This is the enable bit for dsr_chg_int_st register.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CTS_CHG_INT_ENA": {
    +                    "description": "This is the enable bit for cts_chg_int_st register.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "BRK_DET_INT_ENA": {
    +                    "description": "This is the enable bit for brk_det_int_st register.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "RXFIFO_TOUT_INT_ENA": {
    +                    "description": "This is the enable bit for rxfifo_tout_int_st register.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "SW_XON_INT_ENA": {
    +                    "description": "This is the enable bit for sw_xon_int_st register.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "SW_XOFF_INT_ENA": {
    +                    "description": "This is the enable bit for sw_xoff_int_st register.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "GLITCH_DET_INT_ENA": {
    +                    "description": "This is the enable bit for glitch_det_int_st register.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "TX_BRK_DONE_INT_ENA": {
    +                    "description": "This is the enable bit for tx_brk_done_int_st register.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "TX_BRK_IDLE_DONE_INT_ENA": {
    +                    "description": "This is the enable bit for tx_brk_idle_done_int_st register.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "TX_DONE_INT_ENA": {
    +                    "description": "This is the enable bit for tx_done_int_st register.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "RS485_PARITY_ERR_INT_ENA": {
    +                    "description": "This is the enable bit for rs485_parity_err_int_st register.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "RS485_FRM_ERR_INT_ENA": {
    +                    "description": "This is the enable bit for rs485_parity_err_int_st register.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RS485_CLASH_INT_ENA": {
    +                    "description": "This is the enable bit for rs485_clash_int_st register.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "AT_CMD_CHAR_DET_INT_ENA": {
    +                    "description": "This is the enable bit for at_cmd_char_det_int_st register.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "WAKEUP_INT_ENA": {
    +                    "description": "This is the enable bit for uart_wakeup_int_st register.",
    +                    "offset": 19,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INT_CLR": {
    +              "description": "Interrupt clear bits",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXFIFO_FULL_INT_CLR": {
    +                    "description": "Set this bit to clear the rxfifo_full_int_raw interrupt.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TXFIFO_EMPTY_INT_CLR": {
    +                    "description": "Set this bit to clear txfifo_empty_int_raw interrupt.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "PARITY_ERR_INT_CLR": {
    +                    "description": "Set this bit to clear parity_err_int_raw interrupt.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "FRM_ERR_INT_CLR": {
    +                    "description": "Set this bit to clear frm_err_int_raw interrupt.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RXFIFO_OVF_INT_CLR": {
    +                    "description": "Set this bit to clear rxfifo_ovf_int_raw interrupt.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "DSR_CHG_INT_CLR": {
    +                    "description": "Set this bit to clear the dsr_chg_int_raw interrupt.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CTS_CHG_INT_CLR": {
    +                    "description": "Set this bit to clear the cts_chg_int_raw interrupt.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "BRK_DET_INT_CLR": {
    +                    "description": "Set this bit to clear the brk_det_int_raw interrupt.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RXFIFO_TOUT_INT_CLR": {
    +                    "description": "Set this bit to clear the rxfifo_tout_int_raw interrupt.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SW_XON_INT_CLR": {
    +                    "description": "Set this bit to clear the sw_xon_int_raw interrupt.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SW_XOFF_INT_CLR": {
    +                    "description": "Set this bit to clear the sw_xoff_int_raw interrupt.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "GLITCH_DET_INT_CLR": {
    +                    "description": "Set this bit to clear the glitch_det_int_raw interrupt.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TX_BRK_DONE_INT_CLR": {
    +                    "description": "Set this bit to clear the tx_brk_done_int_raw interrupt..",
    +                    "offset": 12,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TX_BRK_IDLE_DONE_INT_CLR": {
    +                    "description": "Set this bit to clear the tx_brk_idle_done_int_raw interrupt.",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TX_DONE_INT_CLR": {
    +                    "description": "Set this bit to clear the tx_done_int_raw interrupt.",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RS485_PARITY_ERR_INT_CLR": {
    +                    "description": "Set this bit to clear the rs485_parity_err_int_raw interrupt.",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RS485_FRM_ERR_INT_CLR": {
    +                    "description": "Set this bit to clear the rs485_frm_err_int_raw interrupt.",
    +                    "offset": 16,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RS485_CLASH_INT_CLR": {
    +                    "description": "Set this bit to clear the rs485_clash_int_raw interrupt.",
    +                    "offset": 17,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "AT_CMD_CHAR_DET_INT_CLR": {
    +                    "description": "Set this bit to clear the at_cmd_char_det_int_raw interrupt.",
    +                    "offset": 18,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "WAKEUP_INT_CLR": {
    +                    "description": "Set this bit to clear the uart_wakeup_int_raw interrupt.",
    +                    "offset": 19,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CLKDIV": {
    +              "description": "Clock divider configuration",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 694,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLKDIV": {
    +                    "description": "The integral part of the frequency divider factor.",
    +                    "offset": 0,
    +                    "size": 12
    +                  },
    +                  "FRAG": {
    +                    "description": "The decimal part of the frequency divider factor.",
    +                    "offset": 20,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "RX_FILT": {
    +              "description": "Rx Filter configuration",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 8,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "GLITCH_FILT": {
    +                    "description": "when input pulse width is lower than this value, the pulse is ignored.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "GLITCH_FILT_EN": {
    +                    "description": "Set this bit to enable Rx signal filter.",
    +                    "offset": 8,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "STATUS": {
    +              "description": "UART status register",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 3758145536,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXFIFO_CNT": {
    +                    "description": "Stores the byte number of valid data in Rx-FIFO.",
    +                    "offset": 0,
    +                    "size": 10,
    +                    "access": "read-only"
    +                  },
    +                  "DSRN": {
    +                    "description": "The register represent the level value of the internal uart dsr signal.",
    +                    "offset": 13,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CTSN": {
    +                    "description": "This register represent the level value of the internal uart cts signal.",
    +                    "offset": 14,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RXD": {
    +                    "description": "This register represent the  level value of the internal uart rxd signal.",
    +                    "offset": 15,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXFIFO_CNT": {
    +                    "description": "Stores the byte number of data in Tx-FIFO.",
    +                    "offset": 16,
    +                    "size": 10,
    +                    "access": "read-only"
    +                  },
    +                  "DTRN": {
    +                    "description": "This bit represents the level of the internal uart dtr signal.",
    +                    "offset": 29,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RTSN": {
    +                    "description": "This bit represents the level of the internal uart rts signal.",
    +                    "offset": 30,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TXD": {
    +                    "description": "This bit represents the  level of the internal uart txd signal.",
    +                    "offset": 31,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CONF0": {
    +              "description": "a",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 268435484,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PARITY": {
    +                    "description": "This register is used to configure the parity check mode.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "PARITY_EN": {
    +                    "description": "Set this bit to enable uart parity check.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "BIT_NUM": {
    +                    "description": "This register is used to set the length of data.",
    +                    "offset": 2,
    +                    "size": 2
    +                  },
    +                  "STOP_BIT_NUM": {
    +                    "description": "This register is used to set the length of  stop bit.",
    +                    "offset": 4,
    +                    "size": 2
    +                  },
    +                  "SW_RTS": {
    +                    "description": "This register is used to configure the software rts signal which is used in software flow control.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "SW_DTR": {
    +                    "description": "This register is used to configure the software dtr signal which is used in software flow control.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "TXD_BRK": {
    +                    "description": "Set this bit to enbale transmitter to  send NULL when the process of sending data is done.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "IRDA_DPLX": {
    +                    "description": "Set this bit to enable IrDA loopback mode.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "IRDA_TX_EN": {
    +                    "description": "This is the start enable bit for IrDA transmitter.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "IRDA_WCTL": {
    +                    "description": "1'h1: The IrDA transmitter's 11th bit is the same as 10th bit. 1'h0: Set IrDA transmitter's 11th bit to 0.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "IRDA_TX_INV": {
    +                    "description": "Set this bit to invert the level of  IrDA transmitter.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "IRDA_RX_INV": {
    +                    "description": "Set this bit to invert the level of IrDA receiver.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "LOOPBACK": {
    +                    "description": "Set this bit to enable uart loopback test mode.",
    +                    "offset": 14,
    +                    "size": 1
    +                  },
    +                  "TX_FLOW_EN": {
    +                    "description": "Set this bit to enable flow control function for transmitter.",
    +                    "offset": 15,
    +                    "size": 1
    +                  },
    +                  "IRDA_EN": {
    +                    "description": "Set this bit to enable IrDA protocol.",
    +                    "offset": 16,
    +                    "size": 1
    +                  },
    +                  "RXFIFO_RST": {
    +                    "description": "Set this bit to reset the uart receive-FIFO.",
    +                    "offset": 17,
    +                    "size": 1
    +                  },
    +                  "TXFIFO_RST": {
    +                    "description": "Set this bit to reset the uart transmit-FIFO.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "RXD_INV": {
    +                    "description": "Set this bit to inverse the level value of uart rxd signal.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "CTS_INV": {
    +                    "description": "Set this bit to inverse the level value of uart cts signal.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "DSR_INV": {
    +                    "description": "Set this bit to inverse the level value of uart dsr signal.",
    +                    "offset": 21,
    +                    "size": 1
    +                  },
    +                  "TXD_INV": {
    +                    "description": "Set this bit to inverse the level value of uart txd signal.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "RTS_INV": {
    +                    "description": "Set this bit to inverse the level value of uart rts signal.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "DTR_INV": {
    +                    "description": "Set this bit to inverse the level value of uart dtr signal.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "CLK_EN": {
    +                    "description": "1'h1: Force clock on for register. 1'h0: Support clock only when application writes registers.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "ERR_WR_MASK": {
    +                    "description": "1'h1: Receiver stops storing data into FIFO when data is wrong. 1'h0: Receiver stores the data even if the  received data is wrong.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "AUTOBAUD_EN": {
    +                    "description": "This is the enable bit for detecting baudrate.",
    +                    "offset": 27,
    +                    "size": 1
    +                  },
    +                  "MEM_CLK_EN": {
    +                    "description": "UART memory clock gate enable signal.",
    +                    "offset": 28,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "CONF1": {
    +              "description": "Configuration register 1",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 49248,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXFIFO_FULL_THRHD": {
    +                    "description": "It will produce rxfifo_full_int interrupt when receiver receives more data than this register value.",
    +                    "offset": 0,
    +                    "size": 9
    +                  },
    +                  "TXFIFO_EMPTY_THRHD": {
    +                    "description": "It will produce txfifo_empty_int interrupt when the data amount in Tx-FIFO is less than this register value.",
    +                    "offset": 9,
    +                    "size": 9
    +                  },
    +                  "DIS_RX_DAT_OVF": {
    +                    "description": "Disable UART Rx data overflow detect.",
    +                    "offset": 18,
    +                    "size": 1
    +                  },
    +                  "RX_TOUT_FLOW_DIS": {
    +                    "description": "Set this bit to stop accumulating idle_cnt when hardware flow control works.",
    +                    "offset": 19,
    +                    "size": 1
    +                  },
    +                  "RX_FLOW_EN": {
    +                    "description": "This is the flow enable bit for UART receiver.",
    +                    "offset": 20,
    +                    "size": 1
    +                  },
    +                  "RX_TOUT_EN": {
    +                    "description": "This is the enble bit for uart receiver's timeout function.",
    +                    "offset": 21,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "LOWPULSE": {
    +              "description": "Autobaud minimum low pulse duration register",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 4095,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MIN_CNT": {
    +                    "description": "This register stores the value of the minimum duration time of the low level pulse. It is used in baud rate-detect process.",
    +                    "offset": 0,
    +                    "size": 12,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "HIGHPULSE": {
    +              "description": "Autobaud minimum high pulse duration register",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 4095,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "MIN_CNT": {
    +                    "description": "This register stores  the value of the maxinum duration time for the high level pulse. It is used in baud rate-detect process.",
    +                    "offset": 0,
    +                    "size": 12,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RXD_CNT": {
    +              "description": "Autobaud edge change count register",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RXD_EDGE_CNT": {
    +                    "description": "This register stores the count of rxd edge change. It is used in baud rate-detect process.",
    +                    "offset": 0,
    +                    "size": 10,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "FLOW_CONF": {
    +              "description": "Software flow-control configuration",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SW_FLOW_CON_EN": {
    +                    "description": "Set this bit to enable software flow control. It is used with register sw_xon or sw_xoff.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "XONOFF_DEL": {
    +                    "description": "Set this bit to remove flow control char from the received data.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "FORCE_XON": {
    +                    "description": "Set this bit to enable the transmitter to go on sending data.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "FORCE_XOFF": {
    +                    "description": "Set this bit to stop the  transmitter from sending data.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SEND_XON": {
    +                    "description": "Set this bit to send Xon char. It is cleared by hardware automatically.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SEND_XOFF": {
    +                    "description": "Set this bit to send Xoff char. It is cleared by hardware automatically.",
    +                    "offset": 5,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "SLEEP_CONF": {
    +              "description": "Sleep-mode configuration",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 240,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACTIVE_THRESHOLD": {
    +                    "description": "The uart is activated from light sleeping mode when the input rxd edge changes more times than this register value.",
    +                    "offset": 0,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "SWFC_CONF0": {
    +              "description": "Software flow-control character configuration",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 9952,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XOFF_THRESHOLD": {
    +                    "description": "When the data amount in Rx-FIFO is more than this register value with uart_sw_flow_con_en set to 1, it will send a Xoff char.",
    +                    "offset": 0,
    +                    "size": 9
    +                  },
    +                  "XOFF_CHAR": {
    +                    "description": "This register stores the Xoff flow control char.",
    +                    "offset": 9,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "SWFC_CONF1": {
    +              "description": "Software flow-control character configuration",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 8704,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "XON_THRESHOLD": {
    +                    "description": "When the data amount in Rx-FIFO is less than this register value with uart_sw_flow_con_en set to 1, it will send a Xon char.",
    +                    "offset": 0,
    +                    "size": 9
    +                  },
    +                  "XON_CHAR": {
    +                    "description": "This register stores the Xon flow control char.",
    +                    "offset": 9,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "TXBRK_CONF": {
    +              "description": "Tx Break character configuration",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 10,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_BRK_NUM": {
    +                    "description": "This register is used to configure the number of 0 to be sent after the process of sending data is done. It is active when txd_brk is set to 1.",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "IDLE_CONF": {
    +              "description": "Frame-end idle configuration",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 262400,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_IDLE_THRHD": {
    +                    "description": "It will produce frame end signal when receiver takes more time to receive one byte data than this register value.",
    +                    "offset": 0,
    +                    "size": 10
    +                  },
    +                  "TX_IDLE_NUM": {
    +                    "description": "This register is used to configure the duration time between transfers.",
    +                    "offset": 10,
    +                    "size": 10
    +                  }
    +                }
    +              }
    +            },
    +            "RS485_CONF": {
    +              "description": "RS485 mode configuration",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RS485_EN": {
    +                    "description": "Set this bit to choose the rs485 mode.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "DL0_EN": {
    +                    "description": "Set this bit to delay the stop bit by 1 bit.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "DL1_EN": {
    +                    "description": "Set this bit to delay the stop bit by 1 bit.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "RS485TX_RX_EN": {
    +                    "description": "Set this bit to enable receiver could receive data when the transmitter is transmitting data in rs485 mode.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RS485RXBY_TX_EN": {
    +                    "description": "1'h1: enable rs485 transmitter to send data when rs485 receiver line is busy.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RS485_RX_DLY_NUM": {
    +                    "description": "This register is used to delay the receiver's internal data signal.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RS485_TX_DLY_NUM": {
    +                    "description": "This register is used to delay the transmitter's internal data signal.",
    +                    "offset": 6,
    +                    "size": 4
    +                  }
    +                }
    +              }
    +            },
    +            "AT_CMD_PRECNT": {
    +              "description": "Pre-sequence timing configuration",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 2305,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PRE_IDLE_NUM": {
    +                    "description": "This register is used to configure the idle duration time before the first at_cmd is received by receiver.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "AT_CMD_POSTCNT": {
    +              "description": "Post-sequence timing configuration",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 2305,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "POST_IDLE_NUM": {
    +                    "description": "This register is used to configure the duration time between the last at_cmd and the next data.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "AT_CMD_GAPTOUT": {
    +              "description": "Timeout configuration",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 11,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_GAP_TOUT": {
    +                    "description": "This register is used to configure the duration time between the at_cmd chars.",
    +                    "offset": 0,
    +                    "size": 16
    +                  }
    +                }
    +              }
    +            },
    +            "AT_CMD_CHAR": {
    +              "description": "AT escape sequence detection configuration",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 811,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "AT_CMD_CHAR": {
    +                    "description": "This register is used to configure the content of at_cmd char.",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "CHAR_NUM": {
    +                    "description": "This register is used to configure the num of continuous at_cmd chars received by receiver.",
    +                    "offset": 8,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "MEM_CONF": {
    +              "description": "UART threshold and allocation configuration",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 655378,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_SIZE": {
    +                    "description": "This register is used to configure the amount of mem allocated for receive-FIFO. The default number is 128 bytes.",
    +                    "offset": 1,
    +                    "size": 3
    +                  },
    +                  "TX_SIZE": {
    +                    "description": "This register is used to configure the amount of mem allocated for transmit-FIFO. The default number is 128 bytes.",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "RX_FLOW_THRHD": {
    +                    "description": "This register is used to configure the maximum amount of data that can be received  when hardware flow control works.",
    +                    "offset": 7,
    +                    "size": 9
    +                  },
    +                  "RX_TOUT_THRHD": {
    +                    "description": "This register is used to configure the threshold time that receiver takes to receive one byte. The rxfifo_tout_int interrupt will be trigger when the receiver takes more time to receive one byte with rx_tout_en set to 1.",
    +                    "offset": 16,
    +                    "size": 10
    +                  },
    +                  "MEM_FORCE_PD": {
    +                    "description": "Set this bit to force power down UART memory.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "MEM_FORCE_PU": {
    +                    "description": "Set this bit to force power up UART memory.",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MEM_TX_STATUS": {
    +              "description": "Tx-FIFO write and read offset address.",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "APB_TX_WADDR": {
    +                    "description": "This register stores the offset address in Tx-FIFO when software writes Tx-FIFO via APB.",
    +                    "offset": 0,
    +                    "size": 10,
    +                    "access": "read-only"
    +                  },
    +                  "TX_RADDR": {
    +                    "description": "This register stores the offset address in Tx-FIFO when Tx-FSM reads data via Tx-FIFO_Ctrl.",
    +                    "offset": 11,
    +                    "size": 10,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "MEM_RX_STATUS": {
    +              "description": "Rx-FIFO write and read offset address.",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 524544,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "APB_RX_RADDR": {
    +                    "description": "This register stores the offset address in RX-FIFO when software reads data from Rx-FIFO via APB. UART0 is 10'h100. UART1 is 10'h180.",
    +                    "offset": 0,
    +                    "size": 10,
    +                    "access": "read-only"
    +                  },
    +                  "RX_WADDR": {
    +                    "description": "This register stores the offset address in Rx-FIFO when Rx-FIFO_Ctrl writes Rx-FIFO. UART0 is 10'h100. UART1 is 10'h180.",
    +                    "offset": 11,
    +                    "size": 10,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "FSM_STATUS": {
    +              "description": "UART transmit and receive status.",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ST_URX_OUT": {
    +                    "description": "This is the status register of receiver.",
    +                    "offset": 0,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  },
    +                  "ST_UTX_OUT": {
    +                    "description": "This is the status register of transmitter.",
    +                    "offset": 4,
    +                    "size": 4,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "POSPULSE": {
    +              "description": "Autobaud high pulse register",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 4095,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "POSEDGE_MIN_CNT": {
    +                    "description": "This register stores the minimal input clock count between two positive edges. It is used in boudrate-detect process.",
    +                    "offset": 0,
    +                    "size": 12,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "NEGPULSE": {
    +              "description": "Autobaud low pulse register",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 4095,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "NEGEDGE_MIN_CNT": {
    +                    "description": "This register stores the minimal input clock count between two negative edges. It is used in boudrate-detect process.",
    +                    "offset": 0,
    +                    "size": 12,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CLK_CONF": {
    +              "description": "UART core clock configuration",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 57675776,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SCLK_DIV_B": {
    +                    "description": "The  denominator of the frequency divider factor.",
    +                    "offset": 0,
    +                    "size": 6
    +                  },
    +                  "SCLK_DIV_A": {
    +                    "description": "The numerator of the frequency divider factor.",
    +                    "offset": 6,
    +                    "size": 6
    +                  },
    +                  "SCLK_DIV_NUM": {
    +                    "description": "The integral part of the frequency divider factor.",
    +                    "offset": 12,
    +                    "size": 8
    +                  },
    +                  "SCLK_SEL": {
    +                    "description": "UART clock source select. 1: 80Mhz, 2: 8Mhz, 3: XTAL.",
    +                    "offset": 20,
    +                    "size": 2
    +                  },
    +                  "SCLK_EN": {
    +                    "description": "Set this bit to enable UART Tx/Rx clock.",
    +                    "offset": 22,
    +                    "size": 1
    +                  },
    +                  "RST_CORE": {
    +                    "description": "Write 1 then write 0 to this bit, reset UART Tx/Rx.",
    +                    "offset": 23,
    +                    "size": 1
    +                  },
    +                  "TX_SCLK_EN": {
    +                    "description": "Set this bit to enable UART Tx clock.",
    +                    "offset": 24,
    +                    "size": 1
    +                  },
    +                  "RX_SCLK_EN": {
    +                    "description": "Set this bit to enable UART Rx clock.",
    +                    "offset": 25,
    +                    "size": 1
    +                  },
    +                  "TX_RST_CORE": {
    +                    "description": "Write 1 then write 0 to this bit, reset UART Tx.",
    +                    "offset": 26,
    +                    "size": 1
    +                  },
    +                  "RX_RST_CORE": {
    +                    "description": "Write 1 then write 0 to this bit, reset UART Rx.",
    +                    "offset": 27,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DATE": {
    +              "description": "UART Version register",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 33587824,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATE": {
    +                    "description": "This is the version register.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ID": {
    +              "description": "UART ID register",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 1073743104,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ID": {
    +                    "description": "This register is used to configure the uart_id.",
    +                    "offset": 0,
    +                    "size": 30
    +                  },
    +                  "HIGH_SPEED": {
    +                    "description": "This bit used to select synchronize mode. 1: Registers are auto synchronized into UART Core clock and UART core should be keep the same with APB clock. 0: After configure registers, software needs to write 1 to UART_REG_UPDATE to synchronize registers.",
    +                    "offset": 30,
    +                    "size": 1
    +                  },
    +                  "REG_UPDATE": {
    +                    "description": "Software write 1 would synchronize registers into UART Core clock domain and would be cleared by hardware after synchronization is done.",
    +                    "offset": 31,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "USB_DEVICE": {
    +        "description": "Full-speed USB Serial/JTAG Controller",
    +        "children": {
    +          "registers": {
    +            "EP1": {
    +              "description": "USB_DEVICE_EP1_REG.",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RDWR_BYTE": {
    +                    "description": "Write and read byte data to/from UART Tx/Rx FIFO through this field. When USB_DEVICE_SERIAL_IN_EMPTY_INT is set, then user can write data (up to 64 bytes) into UART Tx FIFO. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is set, user can check USB_DEVICE_OUT_EP1_WR_ADDR USB_DEVICE_OUT_EP0_RD_ADDR to know how many data is received, then read data from UART Rx FIFO.",
    +                    "offset": 0,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "EP1_CONF": {
    +              "description": "USB_DEVICE_EP1_CONF_REG.",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 2,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "WR_DONE": {
    +                    "description": "Set this bit to indicate writing byte data to UART Tx FIFO is done.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SERIAL_IN_EP_DATA_FREE": {
    +                    "description": "1'b1: Indicate UART Tx FIFO is not full and can write data into in. After writing USB_DEVICE_WR_DONE, this bit would be 0 until data in UART Tx FIFO is read by USB Host.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SERIAL_OUT_EP_DATA_AVAIL": {
    +                    "description": "1'b1: Indicate there is data in UART Rx FIFO.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_RAW": {
    +              "description": "USB_DEVICE_INT_RAW_REG.",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 8,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "JTAG_IN_FLUSH_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when flush cmd is received for IN endpoint 2 of JTAG.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SOF_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when SOF frame is received.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SERIAL_OUT_RECV_PKT_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when Serial Port OUT Endpoint received one packet.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SERIAL_IN_EMPTY_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when Serial Port IN Endpoint is empty.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PID_ERR_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when pid error is detected.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CRC5_ERR_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when CRC5 error is detected.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CRC16_ERR_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when CRC16 error is detected.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "STUFF_ERR_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when stuff error is detected.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_TOKEN_REC_IN_EP1_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when IN token for IN endpoint 1 is received.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "USB_BUS_RESET_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when usb bus reset is detected.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_EP1_ZERO_PAYLOAD_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when OUT endpoint 1 received packet with zero palyload.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_EP2_ZERO_PAYLOAD_INT_RAW": {
    +                    "description": "The raw interrupt bit turns to high level when OUT endpoint 2 received packet with zero palyload.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ST": {
    +              "description": "USB_DEVICE_INT_ST_REG.",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "JTAG_IN_FLUSH_INT_ST": {
    +                    "description": "The raw interrupt status bit for the USB_DEVICE_JTAG_IN_FLUSH_INT interrupt.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SOF_INT_ST": {
    +                    "description": "The raw interrupt status bit for the USB_DEVICE_SOF_INT interrupt.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SERIAL_OUT_RECV_PKT_INT_ST": {
    +                    "description": "The raw interrupt status bit for the USB_DEVICE_SERIAL_OUT_RECV_PKT_INT interrupt.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SERIAL_IN_EMPTY_INT_ST": {
    +                    "description": "The raw interrupt status bit for the USB_DEVICE_SERIAL_IN_EMPTY_INT interrupt.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "PID_ERR_INT_ST": {
    +                    "description": "The raw interrupt status bit for the USB_DEVICE_PID_ERR_INT interrupt.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CRC5_ERR_INT_ST": {
    +                    "description": "The raw interrupt status bit for the USB_DEVICE_CRC5_ERR_INT interrupt.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "CRC16_ERR_INT_ST": {
    +                    "description": "The raw interrupt status bit for the USB_DEVICE_CRC16_ERR_INT interrupt.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "STUFF_ERR_INT_ST": {
    +                    "description": "The raw interrupt status bit for the USB_DEVICE_STUFF_ERR_INT interrupt.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_TOKEN_REC_IN_EP1_INT_ST": {
    +                    "description": "The raw interrupt status bit for the USB_DEVICE_IN_TOKEN_REC_IN_EP1_INT interrupt.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "USB_BUS_RESET_INT_ST": {
    +                    "description": "The raw interrupt status bit for the USB_DEVICE_USB_BUS_RESET_INT interrupt.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_EP1_ZERO_PAYLOAD_INT_ST": {
    +                    "description": "The raw interrupt status bit for the USB_DEVICE_OUT_EP1_ZERO_PAYLOAD_INT interrupt.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_EP2_ZERO_PAYLOAD_INT_ST": {
    +                    "description": "The raw interrupt status bit for the USB_DEVICE_OUT_EP2_ZERO_PAYLOAD_INT interrupt.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ENA": {
    +              "description": "USB_DEVICE_INT_ENA_REG.",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "JTAG_IN_FLUSH_INT_ENA": {
    +                    "description": "The interrupt enable bit for the USB_DEVICE_JTAG_IN_FLUSH_INT interrupt.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "SOF_INT_ENA": {
    +                    "description": "The interrupt enable bit for the USB_DEVICE_SOF_INT interrupt.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "SERIAL_OUT_RECV_PKT_INT_ENA": {
    +                    "description": "The interrupt enable bit for the USB_DEVICE_SERIAL_OUT_RECV_PKT_INT interrupt.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SERIAL_IN_EMPTY_INT_ENA": {
    +                    "description": "The interrupt enable bit for the USB_DEVICE_SERIAL_IN_EMPTY_INT interrupt.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "PID_ERR_INT_ENA": {
    +                    "description": "The interrupt enable bit for the USB_DEVICE_PID_ERR_INT interrupt.",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "CRC5_ERR_INT_ENA": {
    +                    "description": "The interrupt enable bit for the USB_DEVICE_CRC5_ERR_INT interrupt.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "CRC16_ERR_INT_ENA": {
    +                    "description": "The interrupt enable bit for the USB_DEVICE_CRC16_ERR_INT interrupt.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "STUFF_ERR_INT_ENA": {
    +                    "description": "The interrupt enable bit for the USB_DEVICE_STUFF_ERR_INT interrupt.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "IN_TOKEN_REC_IN_EP1_INT_ENA": {
    +                    "description": "The interrupt enable bit for the USB_DEVICE_IN_TOKEN_REC_IN_EP1_INT interrupt.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "USB_BUS_RESET_INT_ENA": {
    +                    "description": "The interrupt enable bit for the USB_DEVICE_USB_BUS_RESET_INT interrupt.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "OUT_EP1_ZERO_PAYLOAD_INT_ENA": {
    +                    "description": "The interrupt enable bit for the USB_DEVICE_OUT_EP1_ZERO_PAYLOAD_INT interrupt.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "OUT_EP2_ZERO_PAYLOAD_INT_ENA": {
    +                    "description": "The interrupt enable bit for the USB_DEVICE_OUT_EP2_ZERO_PAYLOAD_INT interrupt.",
    +                    "offset": 11,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INT_CLR": {
    +              "description": "USB_DEVICE_INT_CLR_REG.",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "JTAG_IN_FLUSH_INT_CLR": {
    +                    "description": "Set this bit to clear the USB_DEVICE_JTAG_IN_FLUSH_INT interrupt.",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SOF_INT_CLR": {
    +                    "description": "Set this bit to clear the USB_DEVICE_JTAG_SOF_INT interrupt.",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SERIAL_OUT_RECV_PKT_INT_CLR": {
    +                    "description": "Set this bit to clear the USB_DEVICE_SERIAL_OUT_RECV_PKT_INT interrupt.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SERIAL_IN_EMPTY_INT_CLR": {
    +                    "description": "Set this bit to clear the USB_DEVICE_SERIAL_IN_EMPTY_INT interrupt.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "PID_ERR_INT_CLR": {
    +                    "description": "Set this bit to clear the USB_DEVICE_PID_ERR_INT interrupt.",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CRC5_ERR_INT_CLR": {
    +                    "description": "Set this bit to clear the USB_DEVICE_CRC5_ERR_INT interrupt.",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "CRC16_ERR_INT_CLR": {
    +                    "description": "Set this bit to clear the USB_DEVICE_CRC16_ERR_INT interrupt.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "STUFF_ERR_INT_CLR": {
    +                    "description": "Set this bit to clear the USB_DEVICE_STUFF_ERR_INT interrupt.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "IN_TOKEN_REC_IN_EP1_INT_CLR": {
    +                    "description": "Set this bit to clear the USB_DEVICE_IN_TOKEN_IN_EP1_INT interrupt.",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "USB_BUS_RESET_INT_CLR": {
    +                    "description": "Set this bit to clear the USB_DEVICE_USB_BUS_RESET_INT interrupt.",
    +                    "offset": 9,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OUT_EP1_ZERO_PAYLOAD_INT_CLR": {
    +                    "description": "Set this bit to clear the USB_DEVICE_OUT_EP1_ZERO_PAYLOAD_INT interrupt.",
    +                    "offset": 10,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OUT_EP2_ZERO_PAYLOAD_INT_CLR": {
    +                    "description": "Set this bit to clear the USB_DEVICE_OUT_EP2_ZERO_PAYLOAD_INT interrupt.",
    +                    "offset": 11,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CONF0": {
    +              "description": "USB_DEVICE_CONF0_REG.",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 16896,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PHY_SEL": {
    +                    "description": "Select internal/external PHY",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "EXCHG_PINS_OVERRIDE": {
    +                    "description": "Enable software control USB D+ D- exchange",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "EXCHG_PINS": {
    +                    "description": "USB D+ D- exchange",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "VREFH": {
    +                    "description": "Control single-end input high threshold,1.76V to 2V, step 80mV",
    +                    "offset": 3,
    +                    "size": 2
    +                  },
    +                  "VREFL": {
    +                    "description": "Control single-end input low threshold,0.8V to 1.04V, step 80mV",
    +                    "offset": 5,
    +                    "size": 2
    +                  },
    +                  "VREF_OVERRIDE": {
    +                    "description": "Enable software control input  threshold",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "PAD_PULL_OVERRIDE": {
    +                    "description": "Enable software control USB D+ D- pullup pulldown",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "DP_PULLUP": {
    +                    "description": "Control USB D+ pull up.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "DP_PULLDOWN": {
    +                    "description": "Control USB D+ pull down.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "DM_PULLUP": {
    +                    "description": "Control USB D- pull up.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "DM_PULLDOWN": {
    +                    "description": "Control USB D- pull down.",
    +                    "offset": 12,
    +                    "size": 1
    +                  },
    +                  "PULLUP_VALUE": {
    +                    "description": "Control pull up value.",
    +                    "offset": 13,
    +                    "size": 1
    +                  },
    +                  "USB_PAD_ENABLE": {
    +                    "description": "Enable USB pad function.",
    +                    "offset": 14,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "TEST": {
    +              "description": "USB_DEVICE_TEST_REG.",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENABLE": {
    +                    "description": "Enable test of the USB pad",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "USB_OE": {
    +                    "description": "USB pad oen in test",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TX_DP": {
    +                    "description": "USB D+ tx value in test",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TX_DM": {
    +                    "description": "USB D- tx value in test",
    +                    "offset": 3,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "JFIFO_ST": {
    +              "description": "USB_DEVICE_JFIFO_ST_REG.",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 68,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_FIFO_CNT": {
    +                    "description": "JTAT in fifo counter.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "IN_FIFO_EMPTY": {
    +                    "description": "1: JTAG in fifo is empty.",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_FIFO_FULL": {
    +                    "description": "1: JTAG in fifo is full.",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_FIFO_CNT": {
    +                    "description": "JTAT out fifo counter.",
    +                    "offset": 4,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_FIFO_EMPTY": {
    +                    "description": "1: JTAG out fifo is empty.",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_FIFO_FULL": {
    +                    "description": "1: JTAG out fifo is full.",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "IN_FIFO_RESET": {
    +                    "description": "Write 1 to reset JTAG in fifo.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "OUT_FIFO_RESET": {
    +                    "description": "Write 1 to reset JTAG out fifo.",
    +                    "offset": 9,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "FRAM_NUM": {
    +              "description": "USB_DEVICE_FRAM_NUM_REG.",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SOF_FRAME_INDEX": {
    +                    "description": "Frame index of received SOF frame.",
    +                    "offset": 0,
    +                    "size": 11,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_EP0_ST": {
    +              "description": "USB_DEVICE_IN_EP0_ST_REG.",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_EP0_STATE": {
    +                    "description": "State of IN Endpoint 0.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "IN_EP0_WR_ADDR": {
    +                    "description": "Write data address of IN endpoint 0.",
    +                    "offset": 2,
    +                    "size": 7,
    +                    "access": "read-only"
    +                  },
    +                  "IN_EP0_RD_ADDR": {
    +                    "description": "Read data address of IN endpoint 0.",
    +                    "offset": 9,
    +                    "size": 7,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_EP1_ST": {
    +              "description": "USB_DEVICE_IN_EP1_ST_REG.",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_EP1_STATE": {
    +                    "description": "State of IN Endpoint 1.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "IN_EP1_WR_ADDR": {
    +                    "description": "Write data address of IN endpoint 1.",
    +                    "offset": 2,
    +                    "size": 7,
    +                    "access": "read-only"
    +                  },
    +                  "IN_EP1_RD_ADDR": {
    +                    "description": "Read data address of IN endpoint 1.",
    +                    "offset": 9,
    +                    "size": 7,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_EP2_ST": {
    +              "description": "USB_DEVICE_IN_EP2_ST_REG.",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_EP2_STATE": {
    +                    "description": "State of IN Endpoint 2.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "IN_EP2_WR_ADDR": {
    +                    "description": "Write data address of IN endpoint 2.",
    +                    "offset": 2,
    +                    "size": 7,
    +                    "access": "read-only"
    +                  },
    +                  "IN_EP2_RD_ADDR": {
    +                    "description": "Read data address of IN endpoint 2.",
    +                    "offset": 9,
    +                    "size": 7,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "IN_EP3_ST": {
    +              "description": "USB_DEVICE_IN_EP3_ST_REG.",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 1,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "IN_EP3_STATE": {
    +                    "description": "State of IN Endpoint 3.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "IN_EP3_WR_ADDR": {
    +                    "description": "Write data address of IN endpoint 3.",
    +                    "offset": 2,
    +                    "size": 7,
    +                    "access": "read-only"
    +                  },
    +                  "IN_EP3_RD_ADDR": {
    +                    "description": "Read data address of IN endpoint 3.",
    +                    "offset": 9,
    +                    "size": 7,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_EP0_ST": {
    +              "description": "USB_DEVICE_OUT_EP0_ST_REG.",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUT_EP0_STATE": {
    +                    "description": "State of OUT Endpoint 0.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_EP0_WR_ADDR": {
    +                    "description": "Write data address of OUT endpoint 0. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is detected, there are USB_DEVICE_OUT_EP0_WR_ADDR-2 bytes data in OUT EP0.",
    +                    "offset": 2,
    +                    "size": 7,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_EP0_RD_ADDR": {
    +                    "description": "Read data address of OUT endpoint 0.",
    +                    "offset": 9,
    +                    "size": 7,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_EP1_ST": {
    +              "description": "USB_DEVICE_OUT_EP1_ST_REG.",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUT_EP1_STATE": {
    +                    "description": "State of OUT Endpoint 1.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_EP1_WR_ADDR": {
    +                    "description": "Write data address of OUT endpoint 1. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is detected, there are USB_DEVICE_OUT_EP1_WR_ADDR-2 bytes data in OUT EP1.",
    +                    "offset": 2,
    +                    "size": 7,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_EP1_RD_ADDR": {
    +                    "description": "Read data address of OUT endpoint 1.",
    +                    "offset": 9,
    +                    "size": 7,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_EP1_REC_DATA_CNT": {
    +                    "description": "Data count in OUT endpoint 1 when one packet is received.",
    +                    "offset": 16,
    +                    "size": 7,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "OUT_EP2_ST": {
    +              "description": "USB_DEVICE_OUT_EP2_ST_REG.",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "OUT_EP2_STATE": {
    +                    "description": "State of OUT Endpoint 2.",
    +                    "offset": 0,
    +                    "size": 2,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_EP2_WR_ADDR": {
    +                    "description": "Write data address of OUT endpoint 2. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is detected, there are USB_DEVICE_OUT_EP2_WR_ADDR-2 bytes data in OUT EP2.",
    +                    "offset": 2,
    +                    "size": 7,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_EP2_RD_ADDR": {
    +                    "description": "Read data address of OUT endpoint 2.",
    +                    "offset": 9,
    +                    "size": 7,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "MISC_CONF": {
    +              "description": "USB_DEVICE_MISC_CONF_REG.",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CLK_EN": {
    +                    "description": "1'h1: Force clock on for register. 1'h0: Support clock only when application writes registers.",
    +                    "offset": 0,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "MEM_CONF": {
    +              "description": "USB_DEVICE_MEM_CONF_REG.",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 2,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "USB_MEM_PD": {
    +                    "description": "1: power down usb memory.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "USB_MEM_CLK_EN": {
    +                    "description": "1: Force clock on for usb memory.",
    +                    "offset": 1,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "DATE": {
    +              "description": "USB_DEVICE_DATE_REG.",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 33583872,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATE": {
    +                    "description": "register version.",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      },
    +      "UHCI0": {
    +        "description": "Universal Host Controller Interface",
    +        "children": {
    +          "registers": {
    +            "CONF0": {
    +              "description": "a",
    +              "offset": 0,
    +              "size": 32,
    +              "reset_value": 1760,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_RST": {
    +                    "description": "Write 1, then write 0 to this bit to reset decode state machine.",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "RX_RST": {
    +                    "description": "Write 1, then write 0 to this bit to reset encode state machine.",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "UART0_CE": {
    +                    "description": "Set this bit to link up HCI and UART0.",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "UART1_CE": {
    +                    "description": "Set this bit to link up HCI and UART1.",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SEPER_EN": {
    +                    "description": "Set this bit to separate the data frame using a special char.",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "HEAD_EN": {
    +                    "description": "Set this bit to encode the data packet with a formatting header.",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "CRC_REC_EN": {
    +                    "description": "Set this bit to enable UHCI to receive the 16 bit CRC.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "UART_IDLE_EOF_EN": {
    +                    "description": "If this bit is set to 1, UHCI will end the payload receiving process when UART has been in idle state.",
    +                    "offset": 8,
    +                    "size": 1
    +                  },
    +                  "LEN_EOF_EN": {
    +                    "description": "If this bit is set to 1, UHCI decoder receiving payload data is end when the receiving byte count has reached the specified value. The value is payload length indicated by UHCI packet header when UHCI_HEAD_EN is 1 or the value is configuration value when UHCI_HEAD_EN is 0. If this bit is set to 0, UHCI decoder receiving payload data is end when 0xc0 is received.",
    +                    "offset": 9,
    +                    "size": 1
    +                  },
    +                  "ENCODE_CRC_EN": {
    +                    "description": "Set this bit to enable data integrity checking by appending a 16 bit CCITT-CRC to end of the payload.",
    +                    "offset": 10,
    +                    "size": 1
    +                  },
    +                  "CLK_EN": {
    +                    "description": "1'b1: Force clock on for register. 1'b0: Support clock only when application writes registers.",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "UART_RX_BRK_EOF_EN": {
    +                    "description": "If this bit is set to 1, UHCI will end payload receive process when NULL frame is received by UART.",
    +                    "offset": 12,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INT_RAW": {
    +              "description": "a",
    +              "offset": 4,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_START_INT_RAW": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TX_START_INT_RAW": {
    +                    "description": "a",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RX_HUNG_INT_RAW": {
    +                    "description": "a",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TX_HUNG_INT_RAW": {
    +                    "description": "a",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SEND_S_REG_Q_INT_RAW": {
    +                    "description": "a",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SEND_A_REG_Q_INT_RAW": {
    +                    "description": "a",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUT_EOF_INT_RAW": {
    +                    "description": "This is the interrupt raw bit. Triggered when there are some errors in EOF in the",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "APP_CTRL0_INT_RAW": {
    +                    "description": "Soft control int raw bit.",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "APP_CTRL1_INT_RAW": {
    +                    "description": "Soft control int raw bit.",
    +                    "offset": 8,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ST": {
    +              "description": "a",
    +              "offset": 8,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_START_INT_ST": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TX_START_INT_ST": {
    +                    "description": "a",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "RX_HUNG_INT_ST": {
    +                    "description": "a",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "TX_HUNG_INT_ST": {
    +                    "description": "a",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SEND_S_REG_Q_INT_ST": {
    +                    "description": "a",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "SEND_A_REG_Q_INT_ST": {
    +                    "description": "a",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "OUTLINK_EOF_ERR_INT_ST": {
    +                    "description": "a",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "APP_CTRL0_INT_ST": {
    +                    "description": "a",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  },
    +                  "APP_CTRL1_INT_ST": {
    +                    "description": "a",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "INT_ENA": {
    +              "description": "a",
    +              "offset": 12,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_START_INT_ENA": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TX_START_INT_ENA": {
    +                    "description": "a",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "RX_HUNG_INT_ENA": {
    +                    "description": "a",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TX_HUNG_INT_ENA": {
    +                    "description": "a",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "SEND_S_REG_Q_INT_ENA": {
    +                    "description": "a",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "SEND_A_REG_Q_INT_ENA": {
    +                    "description": "a",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "OUTLINK_EOF_ERR_INT_ENA": {
    +                    "description": "a",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "APP_CTRL0_INT_ENA": {
    +                    "description": "a",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "APP_CTRL1_INT_ENA": {
    +                    "description": "a",
    +                    "offset": 8,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "INT_CLR": {
    +              "description": "a",
    +              "offset": 16,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_START_INT_CLR": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TX_START_INT_CLR": {
    +                    "description": "a",
    +                    "offset": 1,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "RX_HUNG_INT_CLR": {
    +                    "description": "a",
    +                    "offset": 2,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "TX_HUNG_INT_CLR": {
    +                    "description": "a",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SEND_S_REG_Q_INT_CLR": {
    +                    "description": "a",
    +                    "offset": 4,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "SEND_A_REG_Q_INT_CLR": {
    +                    "description": "a",
    +                    "offset": 5,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "OUTLINK_EOF_ERR_INT_CLR": {
    +                    "description": "a",
    +                    "offset": 6,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "APP_CTRL0_INT_CLR": {
    +                    "description": "a",
    +                    "offset": 7,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  },
    +                  "APP_CTRL1_INT_CLR": {
    +                    "description": "a",
    +                    "offset": 8,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "CONF1": {
    +              "description": "a",
    +              "offset": 20,
    +              "size": 32,
    +              "reset_value": 51,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "CHECK_SUM_EN": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "CHECK_SEQ_EN": {
    +                    "description": "a",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "CRC_DISABLE": {
    +                    "description": "a",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "SAVE_HEAD": {
    +                    "description": "a",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "TX_CHECK_SUM_RE": {
    +                    "description": "a",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "TX_ACK_NUM_RE": {
    +                    "description": "a",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "WAIT_SW_START": {
    +                    "description": "a",
    +                    "offset": 7,
    +                    "size": 1
    +                  },
    +                  "SW_START": {
    +                    "description": "a",
    +                    "offset": 8,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "STATE0": {
    +              "description": "a",
    +              "offset": 24,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_ERR_CAUSE": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  },
    +                  "DECODE_STATE": {
    +                    "description": "a",
    +                    "offset": 3,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "STATE1": {
    +              "description": "a",
    +              "offset": 28,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ENCODE_STATE": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 3,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "ESCAPE_CONF": {
    +              "description": "a",
    +              "offset": 32,
    +              "size": 32,
    +              "reset_value": 51,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TX_C0_ESC_EN": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 1
    +                  },
    +                  "TX_DB_ESC_EN": {
    +                    "description": "a",
    +                    "offset": 1,
    +                    "size": 1
    +                  },
    +                  "TX_11_ESC_EN": {
    +                    "description": "a",
    +                    "offset": 2,
    +                    "size": 1
    +                  },
    +                  "TX_13_ESC_EN": {
    +                    "description": "a",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "RX_C0_ESC_EN": {
    +                    "description": "a",
    +                    "offset": 4,
    +                    "size": 1
    +                  },
    +                  "RX_DB_ESC_EN": {
    +                    "description": "a",
    +                    "offset": 5,
    +                    "size": 1
    +                  },
    +                  "RX_11_ESC_EN": {
    +                    "description": "a",
    +                    "offset": 6,
    +                    "size": 1
    +                  },
    +                  "RX_13_ESC_EN": {
    +                    "description": "a",
    +                    "offset": 7,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "HUNG_CONF": {
    +              "description": "a",
    +              "offset": 36,
    +              "size": 32,
    +              "reset_value": 8456208,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "TXFIFO_TIMEOUT": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "TXFIFO_TIMEOUT_SHIFT": {
    +                    "description": "a",
    +                    "offset": 8,
    +                    "size": 3
    +                  },
    +                  "TXFIFO_TIMEOUT_ENA": {
    +                    "description": "a",
    +                    "offset": 11,
    +                    "size": 1
    +                  },
    +                  "RXFIFO_TIMEOUT": {
    +                    "description": "a",
    +                    "offset": 12,
    +                    "size": 8
    +                  },
    +                  "RXFIFO_TIMEOUT_SHIFT": {
    +                    "description": "a",
    +                    "offset": 20,
    +                    "size": 3
    +                  },
    +                  "RXFIFO_TIMEOUT_ENA": {
    +                    "description": "a",
    +                    "offset": 23,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "ACK_NUM": {
    +              "description": "a",
    +              "offset": 40,
    +              "size": 32,
    +              "reset_value": 8,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ACK_NUM": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "LOAD": {
    +                    "description": "a",
    +                    "offset": 3,
    +                    "size": 1,
    +                    "access": "write-only"
    +                  }
    +                }
    +              }
    +            },
    +            "RX_HEAD": {
    +              "description": "a",
    +              "offset": 44,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "RX_HEAD": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 32,
    +                    "access": "read-only"
    +                  }
    +                }
    +              }
    +            },
    +            "QUICK_SENT": {
    +              "description": "a",
    +              "offset": 48,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SINGLE_SEND_NUM": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 3
    +                  },
    +                  "SINGLE_SEND_EN": {
    +                    "description": "a",
    +                    "offset": 3,
    +                    "size": 1
    +                  },
    +                  "ALWAYS_SEND_NUM": {
    +                    "description": "a",
    +                    "offset": 4,
    +                    "size": 3
    +                  },
    +                  "ALWAYS_SEND_EN": {
    +                    "description": "a",
    +                    "offset": 7,
    +                    "size": 1
    +                  }
    +                }
    +              }
    +            },
    +            "REG_Q0_WORD0": {
    +              "description": "a",
    +              "offset": 52,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SEND_Q0_WORD0": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "REG_Q0_WORD1": {
    +              "description": "a",
    +              "offset": 56,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SEND_Q0_WORD1": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "REG_Q1_WORD0": {
    +              "description": "a",
    +              "offset": 60,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SEND_Q1_WORD0": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "REG_Q1_WORD1": {
    +              "description": "a",
    +              "offset": 64,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SEND_Q1_WORD1": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "REG_Q2_WORD0": {
    +              "description": "a",
    +              "offset": 68,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SEND_Q2_WORD0": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "REG_Q2_WORD1": {
    +              "description": "a",
    +              "offset": 72,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SEND_Q2_WORD1": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "REG_Q3_WORD0": {
    +              "description": "a",
    +              "offset": 76,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SEND_Q3_WORD0": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "REG_Q3_WORD1": {
    +              "description": "a",
    +              "offset": 80,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SEND_Q3_WORD1": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "REG_Q4_WORD0": {
    +              "description": "a",
    +              "offset": 84,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SEND_Q4_WORD0": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "REG_Q4_WORD1": {
    +              "description": "a",
    +              "offset": 88,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SEND_Q4_WORD1": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "REG_Q5_WORD0": {
    +              "description": "a",
    +              "offset": 92,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SEND_Q5_WORD0": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "REG_Q5_WORD1": {
    +              "description": "a",
    +              "offset": 96,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SEND_Q5_WORD1": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "REG_Q6_WORD0": {
    +              "description": "a",
    +              "offset": 100,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SEND_Q6_WORD0": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "REG_Q6_WORD1": {
    +              "description": "a",
    +              "offset": 104,
    +              "size": 32,
    +              "reset_value": 0,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SEND_Q6_WORD1": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            },
    +            "ESC_CONF0": {
    +              "description": "a",
    +              "offset": 108,
    +              "size": 32,
    +              "reset_value": 14474176,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "SEPER_CHAR": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "SEPER_ESC_CHAR0": {
    +                    "description": "a",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "SEPER_ESC_CHAR1": {
    +                    "description": "a",
    +                    "offset": 16,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "ESC_CONF1": {
    +              "description": "a",
    +              "offset": 112,
    +              "size": 32,
    +              "reset_value": 14539739,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ESC_SEQ0": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "ESC_SEQ0_CHAR0": {
    +                    "description": "a",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ESC_SEQ0_CHAR1": {
    +                    "description": "a",
    +                    "offset": 16,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "ESC_CONF2": {
    +              "description": "a",
    +              "offset": 116,
    +              "size": 32,
    +              "reset_value": 14605073,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ESC_SEQ1": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "ESC_SEQ1_CHAR0": {
    +                    "description": "a",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ESC_SEQ1_CHAR1": {
    +                    "description": "a",
    +                    "offset": 16,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "ESC_CONF3": {
    +              "description": "a",
    +              "offset": 120,
    +              "size": 32,
    +              "reset_value": 14670611,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "ESC_SEQ2": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 8
    +                  },
    +                  "ESC_SEQ2_CHAR0": {
    +                    "description": "a",
    +                    "offset": 8,
    +                    "size": 8
    +                  },
    +                  "ESC_SEQ2_CHAR1": {
    +                    "description": "a",
    +                    "offset": 16,
    +                    "size": 8
    +                  }
    +                }
    +              }
    +            },
    +            "PKT_THRES": {
    +              "description": "a",
    +              "offset": 124,
    +              "size": 32,
    +              "reset_value": 128,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "PKT_THRS": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 13
    +                  }
    +                }
    +              }
    +            },
    +            "DATE": {
    +              "description": "a",
    +              "offset": 128,
    +              "size": 32,
    +              "reset_value": 33583472,
    +              "reset_mask": 4294967295,
    +              "children": {
    +                "fields": {
    +                  "DATE": {
    +                    "description": "a",
    +                    "offset": 0,
    +                    "size": 32
    +                  }
    +                }
    +              }
    +            }
    +          }
    +        }
    +      }
    +    }
    +  },
    +  "devices": {
    +    "ESP32-C3": {
    +      "arch": "unknown",
    +      "description": "32-bit RISC-V MCU & 2.4 GHz Wi-Fi & Bluetooth 5 (LE)",
    +      "properties": {
    +        "cpu.mpuPresent": "false",
    +        "cpu.nvicPrioBits": "4",
    +        "cpu.vendorSystickConfig": "false",
    +        "cpu.revision": "r0p0",
    +        "cpu.endian": "little",
    +        "license": "\n    Copyright 2022 Espressif Systems (Shanghai) PTE LTD\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n",
    +        "cpu.name": "RV32IMC",
    +        "cpu.fpuPresent": "false"
    +      },
    +      "children": {
    +        "interrupts": {
    +          "AES": {
    +            "index": 48
    +          },
    +          "APB_ADC": {
    +            "index": 43
    +          },
    +          "ASSIST_DEBUG": {
    +            "index": 54
    +          },
    +          "DMA_CH0": {
    +            "index": 44
    +          },
    +          "DMA_CH1": {
    +            "index": 45
    +          },
    +          "DMA_CH2": {
    +            "index": 46
    +          },
    +          "EFUSE": {
    +            "index": 24
    +          },
    +          "GPIO": {
    +            "index": 16
    +          },
    +          "GPIO_NMI": {
    +            "index": 17
    +          },
    +          "I2C_EXT0": {
    +            "index": 29
    +          },
    +          "I2S": {
    +            "index": 20
    +          },
    +          "LEDC": {
    +            "index": 23
    +          },
    +          "RMT": {
    +            "index": 28
    +          },
    +          "RSA": {
    +            "index": 47
    +          },
    +          "RTC_CORE": {
    +            "index": 27
    +          },
    +          "SHA": {
    +            "index": 49
    +          },
    +          "SPI2": {
    +            "index": 19
    +          },
    +          "SYSTIMER_TARGET0": {
    +            "index": 37
    +          },
    +          "SYSTIMER_TARGET1": {
    +            "index": 38
    +          },
    +          "SYSTIMER_TARGET2": {
    +            "index": 39
    +          },
    +          "TG0_T0_LEVEL": {
    +            "index": 32
    +          },
    +          "TG0_WDT_LEVEL": {
    +            "index": 33
    +          },
    +          "TG1_T0_LEVEL": {
    +            "index": 34
    +          },
    +          "TG1_WDT_LEVEL": {
    +            "index": 35
    +          },
    +          "TWAI": {
    +            "index": 25
    +          },
    +          "UART0": {
    +            "index": 21
    +          },
    +          "UART1": {
    +            "index": 22
    +          },
    +          "UHCI0": {
    +            "index": 15
    +          },
    +          "USB_SERIAL_JTAG": {
    +            "index": 26
    +          }
    +        },
    +        "peripheral_instances": {
    +          "AES": {
    +            "description": "AES (Advanced Encryption Standard) Accelerator",
    +            "offset": 1610850304,
    +            "type": "types.peripherals.AES"
    +          },
    +          "APB_CTRL": {
    +            "description": "Advanced Peripheral Bus Controller",
    +            "offset": 1610768384,
    +            "type": "types.peripherals.APB_CTRL"
    +          },
    +          "APB_SARADC": {
    +            "description": "Successive Approximation Register Analog to Digital Converter",
    +            "offset": 1610874880,
    +            "type": "types.peripherals.APB_SARADC"
    +          },
    +          "ASSIST_DEBUG": {
    +            "description": "Debug Assist",
    +            "offset": 1611456512,
    +            "type": "types.peripherals.ASSIST_DEBUG"
    +          },
    +          "DMA": {
    +            "description": "DMA (Direct Memory Access) Controller",
    +            "offset": 1610870784,
    +            "type": "types.peripherals.DMA"
    +          },
    +          "DS": {
    +            "description": "Digital Signature",
    +            "offset": 1610862592,
    +            "type": "types.peripherals.DS"
    +          },
    +          "EFUSE": {
    +            "description": "eFuse Controller",
    +            "offset": 1610647552,
    +            "type": "types.peripherals.EFUSE"
    +          },
    +          "EXTMEM": {
    +            "description": "External Memory",
    +            "offset": 1611415552,
    +            "type": "types.peripherals.EXTMEM"
    +          },
    +          "GPIO": {
    +            "description": "General Purpose Input/Output",
    +            "offset": 1610629120,
    +            "type": "types.peripherals.GPIO"
    +          },
    +          "GPIOSD": {
    +            "description": "Sigma-Delta Modulation",
    +            "offset": 1610632960,
    +            "type": "types.peripherals.GPIOSD"
    +          },
    +          "HMAC": {
    +            "description": "HMAC (Hash-based Message Authentication Code) Accelerator",
    +            "offset": 1610866688,
    +            "type": "types.peripherals.HMAC"
    +          },
    +          "I2C0": {
    +            "description": "I2C (Inter-Integrated Circuit) Controller",
    +            "offset": 1610690560,
    +            "type": "types.peripherals.I2C0"
    +          },
    +          "I2S": {
    +            "description": "I2S (Inter-IC Sound) Controller",
    +            "offset": 1610797056,
    +            "type": "types.peripherals.I2S"
    +          },
    +          "INTERRUPT_CORE0": {
    +            "description": "Interrupt Core",
    +            "offset": 1611407360,
    +            "type": "types.peripherals.INTERRUPT_CORE0"
    +          },
    +          "IO_MUX": {
    +            "description": "Input/Output Multiplexer",
    +            "offset": 1610649600,
    +            "type": "types.peripherals.IO_MUX"
    +          },
    +          "LEDC": {
    +            "description": "LED Control PWM (Pulse Width Modulation)",
    +            "offset": 1610715136,
    +            "type": "types.peripherals.LEDC"
    +          },
    +          "RMT": {
    +            "description": "Remote Control Peripheral",
    +            "offset": 1610702848,
    +            "type": "types.peripherals.RMT"
    +          },
    +          "RNG": {
    +            "description": "Hardware random number generator",
    +            "offset": 1610768384,
    +            "type": "types.peripherals.RNG"
    +          },
    +          "RSA": {
    +            "description": "RSA (Rivest Shamir Adleman) Accelerator",
    +            "offset": 1610858496,
    +            "type": "types.peripherals.RSA"
    +          },
    +          "RTC_CNTL": {
    +            "description": "Real-Time Clock Control",
    +            "offset": 1610645504,
    +            "type": "types.peripherals.RTC_CNTL"
    +          },
    +          "SENSITIVE": {
    +            "description": "Sensitive",
    +            "offset": 1611403264,
    +            "type": "types.peripherals.SENSITIVE"
    +          },
    +          "SHA": {
    +            "description": "SHA (Secure Hash Algorithm) Accelerator",
    +            "offset": 1610854400,
    +            "type": "types.peripherals.SHA"
    +          },
    +          "SPI0": {
    +            "description": "SPI (Serial Peripheral Interface) Controller",
    +            "offset": 1610625024,
    +            "type": "types.peripherals.SPI0"
    +          },
    +          "SPI1": {
    +            "description": "SPI (Serial Peripheral Interface) Controller",
    +            "offset": 1610620928,
    +            "type": "types.peripherals.SPI1"
    +          },
    +          "SPI2": {
    +            "description": "SPI (Serial Peripheral Interface) Controller",
    +            "offset": 1610760192,
    +            "type": "types.peripherals.SPI2"
    +          },
    +          "SYSTEM": {
    +            "description": "System",
    +            "offset": 1611399168,
    +            "type": "types.peripherals.SYSTEM"
    +          },
    +          "SYSTIMER": {
    +            "description": "System Timer",
    +            "offset": 1610756096,
    +            "type": "types.peripherals.SYSTIMER"
    +          },
    +          "TIMG0": {
    +            "description": "Timer Group",
    +            "offset": 1610739712,
    +            "type": "types.peripherals.TIMG0"
    +          },
    +          "TIMG1": {
    +            "description": "Timer Group",
    +            "offset": 1610743808,
    +            "type": "types.peripherals.TIMG0"
    +          },
    +          "TWAI": {
    +            "description": "Two-Wire Automotive Interface",
    +            "offset": 1610788864,
    +            "type": "types.peripherals.TWAI"
    +          },
    +          "UART0": {
    +            "description": "UART (Universal Asynchronous Receiver-Transmitter) Controller",
    +            "offset": 1610612736,
    +            "type": "types.peripherals.UART0"
    +          },
    +          "UART1": {
    +            "description": "UART (Universal Asynchronous Receiver-Transmitter) Controller",
    +            "offset": 1610678272,
    +            "type": "types.peripherals.UART0"
    +          },
    +          "UHCI0": {
    +            "description": "Universal Host Controller Interface",
    +            "offset": 1610694656,
    +            "type": "types.peripherals.UHCI0"
    +          },
    +          "UHCI1": {
    +            "description": "Universal Host Controller Interface",
    +            "offset": 1610661888,
    +            "type": "types.peripherals.UHCI0"
    +          },
    +          "USB_DEVICE": {
    +            "description": "Full-speed USB Serial/JTAG Controller",
    +            "offset": 1610887168,
    +            "type": "types.peripherals.USB_DEVICE"
    +          },
    +          "XTS_AES": {
    +            "description": "XTS-AES-128 Flash Encryption",
    +            "offset": 1611448320,
    +            "type": "types.peripherals.XTS_AES"
    +          }
    +        }
    +      }
    +    }
    +  }
    +}
    \ No newline at end of file
    diff --git a/src/chips/ESP32_C3.zig b/src/chips/ESP32_C3.zig
    new file mode 100644
    index 000000000..50a326366
    --- /dev/null
    +++ b/src/chips/ESP32_C3.zig
    @@ -0,0 +1,12378 @@
    +const micro = @import("microzig");
    +const mmio = micro.mmio;
    +
    +pub const devices = struct {
    +    ///  32-bit RISC-V MCU & 2.4 GHz Wi-Fi & Bluetooth 5 (LE)
    +    pub const @"ESP32-C3" = struct {
    +        pub const properties = struct {
    +            pub const @"cpu.mpuPresent" = "false";
    +            pub const @"cpu.nvicPrioBits" = "4";
    +            pub const @"cpu.vendorSystickConfig" = "false";
    +            pub const @"cpu.revision" = "r0p0";
    +            pub const @"cpu.endian" = "little";
    +            pub const license =
    +                \\
    +                \\    Copyright 2022 Espressif Systems (Shanghai) PTE LTD
    +                \\
    +                \\    Licensed under the Apache License, Version 2.0 (the "License");
    +                \\    you may not use this file except in compliance with the License.
    +                \\    You may obtain a copy of the License at
    +                \\
    +                \\        http://www.apache.org/licenses/LICENSE-2.0
    +                \\
    +                \\    Unless required by applicable law or agreed to in writing, software
    +                \\    distributed under the License is distributed on an "AS IS" BASIS,
    +                \\    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +                \\    See the License for the specific language governing permissions and
    +                \\    limitations under the License.
    +                \\
    +            ;
    +            pub const @"cpu.name" = "RV32IMC";
    +            pub const @"cpu.fpuPresent" = "false";
    +        };
    +
    +        pub const peripherals = struct {
    +            ///  UART (Universal Asynchronous Receiver-Transmitter) Controller
    +            pub const UART0 = @intToPtr(*volatile types.peripherals.UART0, 0x60000000);
    +            ///  SPI (Serial Peripheral Interface) Controller
    +            pub const SPI1 = @intToPtr(*volatile types.peripherals.SPI1, 0x60002000);
    +            ///  SPI (Serial Peripheral Interface) Controller
    +            pub const SPI0 = @intToPtr(*volatile types.peripherals.SPI0, 0x60003000);
    +            ///  General Purpose Input/Output
    +            pub const GPIO = @intToPtr(*volatile types.peripherals.GPIO, 0x60004000);
    +            ///  Sigma-Delta Modulation
    +            pub const GPIOSD = @intToPtr(*volatile types.peripherals.GPIOSD, 0x60004f00);
    +            ///  Real-Time Clock Control
    +            pub const RTC_CNTL = @intToPtr(*volatile types.peripherals.RTC_CNTL, 0x60008000);
    +            ///  eFuse Controller
    +            pub const EFUSE = @intToPtr(*volatile types.peripherals.EFUSE, 0x60008800);
    +            ///  Input/Output Multiplexer
    +            pub const IO_MUX = @intToPtr(*volatile types.peripherals.IO_MUX, 0x60009000);
    +            ///  Universal Host Controller Interface
    +            pub const UHCI1 = @intToPtr(*volatile types.peripherals.UHCI0, 0x6000c000);
    +            ///  UART (Universal Asynchronous Receiver-Transmitter) Controller
    +            pub const UART1 = @intToPtr(*volatile types.peripherals.UART0, 0x60010000);
    +            ///  I2C (Inter-Integrated Circuit) Controller
    +            pub const I2C0 = @intToPtr(*volatile types.peripherals.I2C0, 0x60013000);
    +            ///  Universal Host Controller Interface
    +            pub const UHCI0 = @intToPtr(*volatile types.peripherals.UHCI0, 0x60014000);
    +            ///  Remote Control Peripheral
    +            pub const RMT = @intToPtr(*volatile types.peripherals.RMT, 0x60016000);
    +            ///  LED Control PWM (Pulse Width Modulation)
    +            pub const LEDC = @intToPtr(*volatile types.peripherals.LEDC, 0x60019000);
    +            ///  Timer Group
    +            pub const TIMG0 = @intToPtr(*volatile types.peripherals.TIMG0, 0x6001f000);
    +            ///  Timer Group
    +            pub const TIMG1 = @intToPtr(*volatile types.peripherals.TIMG0, 0x60020000);
    +            ///  System Timer
    +            pub const SYSTIMER = @intToPtr(*volatile types.peripherals.SYSTIMER, 0x60023000);
    +            ///  SPI (Serial Peripheral Interface) Controller
    +            pub const SPI2 = @intToPtr(*volatile types.peripherals.SPI2, 0x60024000);
    +            ///  Advanced Peripheral Bus Controller
    +            pub const APB_CTRL = @intToPtr(*volatile types.peripherals.APB_CTRL, 0x60026000);
    +            ///  Hardware random number generator
    +            pub const RNG = @intToPtr(*volatile types.peripherals.RNG, 0x60026000);
    +            ///  Two-Wire Automotive Interface
    +            pub const TWAI = @intToPtr(*volatile types.peripherals.TWAI, 0x6002b000);
    +            ///  I2S (Inter-IC Sound) Controller
    +            pub const I2S = @intToPtr(*volatile types.peripherals.I2S, 0x6002d000);
    +            ///  AES (Advanced Encryption Standard) Accelerator
    +            pub const AES = @intToPtr(*volatile types.peripherals.AES, 0x6003a000);
    +            ///  SHA (Secure Hash Algorithm) Accelerator
    +            pub const SHA = @intToPtr(*volatile types.peripherals.SHA, 0x6003b000);
    +            ///  RSA (Rivest Shamir Adleman) Accelerator
    +            pub const RSA = @intToPtr(*volatile types.peripherals.RSA, 0x6003c000);
    +            ///  Digital Signature
    +            pub const DS = @intToPtr(*volatile types.peripherals.DS, 0x6003d000);
    +            ///  HMAC (Hash-based Message Authentication Code) Accelerator
    +            pub const HMAC = @intToPtr(*volatile types.peripherals.HMAC, 0x6003e000);
    +            ///  DMA (Direct Memory Access) Controller
    +            pub const DMA = @intToPtr(*volatile types.peripherals.DMA, 0x6003f000);
    +            ///  Successive Approximation Register Analog to Digital Converter
    +            pub const APB_SARADC = @intToPtr(*volatile types.peripherals.APB_SARADC, 0x60040000);
    +            ///  Full-speed USB Serial/JTAG Controller
    +            pub const USB_DEVICE = @intToPtr(*volatile types.peripherals.USB_DEVICE, 0x60043000);
    +            ///  System
    +            pub const SYSTEM = @intToPtr(*volatile types.peripherals.SYSTEM, 0x600c0000);
    +            ///  Sensitive
    +            pub const SENSITIVE = @intToPtr(*volatile types.peripherals.SENSITIVE, 0x600c1000);
    +            ///  Interrupt Core
    +            pub const INTERRUPT_CORE0 = @intToPtr(*volatile types.peripherals.INTERRUPT_CORE0, 0x600c2000);
    +            ///  External Memory
    +            pub const EXTMEM = @intToPtr(*volatile types.peripherals.EXTMEM, 0x600c4000);
    +            ///  XTS-AES-128 Flash Encryption
    +            pub const XTS_AES = @intToPtr(*volatile types.peripherals.XTS_AES, 0x600cc000);
    +            ///  Debug Assist
    +            pub const ASSIST_DEBUG = @intToPtr(*volatile types.peripherals.ASSIST_DEBUG, 0x600ce000);
    +        };
    +    };
    +};
    +
    +pub const types = struct {
    +    pub const peripherals = struct {
    +        ///  AES (Advanced Encryption Standard) Accelerator
    +        pub const AES = extern struct {
    +            ///  Key material key_0 configure register
    +            KEY_0: mmio.Mmio(packed struct(u32) {
    +                ///  This bits stores key_0 that is a part of key material.
    +                KEY_0: u32,
    +            }),
    +            ///  Key material key_1 configure register
    +            KEY_1: mmio.Mmio(packed struct(u32) {
    +                ///  This bits stores key_1 that is a part of key material.
    +                KEY_1: u32,
    +            }),
    +            ///  Key material key_2 configure register
    +            KEY_2: mmio.Mmio(packed struct(u32) {
    +                ///  This bits stores key_2 that is a part of key material.
    +                KEY_2: u32,
    +            }),
    +            ///  Key material key_3 configure register
    +            KEY_3: mmio.Mmio(packed struct(u32) {
    +                ///  This bits stores key_3 that is a part of key material.
    +                KEY_3: u32,
    +            }),
    +            ///  Key material key_4 configure register
    +            KEY_4: mmio.Mmio(packed struct(u32) {
    +                ///  This bits stores key_4 that is a part of key material.
    +                KEY_4: u32,
    +            }),
    +            ///  Key material key_5 configure register
    +            KEY_5: mmio.Mmio(packed struct(u32) {
    +                ///  This bits stores key_5 that is a part of key material.
    +                KEY_5: u32,
    +            }),
    +            ///  Key material key_6 configure register
    +            KEY_6: mmio.Mmio(packed struct(u32) {
    +                ///  This bits stores key_6 that is a part of key material.
    +                KEY_6: u32,
    +            }),
    +            ///  Key material key_7 configure register
    +            KEY_7: mmio.Mmio(packed struct(u32) {
    +                ///  This bits stores key_7 that is a part of key material.
    +                KEY_7: u32,
    +            }),
    +            ///  source text material text_in_0 configure register
    +            TEXT_IN_0: mmio.Mmio(packed struct(u32) {
    +                ///  This bits stores text_in_0 that is a part of source text material.
    +                TEXT_IN_0: u32,
    +            }),
    +            ///  source text material text_in_1 configure register
    +            TEXT_IN_1: mmio.Mmio(packed struct(u32) {
    +                ///  This bits stores text_in_1 that is a part of source text material.
    +                TEXT_IN_1: u32,
    +            }),
    +            ///  source text material text_in_2 configure register
    +            TEXT_IN_2: mmio.Mmio(packed struct(u32) {
    +                ///  This bits stores text_in_2 that is a part of source text material.
    +                TEXT_IN_2: u32,
    +            }),
    +            ///  source text material text_in_3 configure register
    +            TEXT_IN_3: mmio.Mmio(packed struct(u32) {
    +                ///  This bits stores text_in_3 that is a part of source text material.
    +                TEXT_IN_3: u32,
    +            }),
    +            ///  result text material text_out_0 configure register
    +            TEXT_OUT_0: mmio.Mmio(packed struct(u32) {
    +                ///  This bits stores text_out_0 that is a part of result text material.
    +                TEXT_OUT_0: u32,
    +            }),
    +            ///  result text material text_out_1 configure register
    +            TEXT_OUT_1: mmio.Mmio(packed struct(u32) {
    +                ///  This bits stores text_out_1 that is a part of result text material.
    +                TEXT_OUT_1: u32,
    +            }),
    +            ///  result text material text_out_2 configure register
    +            TEXT_OUT_2: mmio.Mmio(packed struct(u32) {
    +                ///  This bits stores text_out_2 that is a part of result text material.
    +                TEXT_OUT_2: u32,
    +            }),
    +            ///  result text material text_out_3 configure register
    +            TEXT_OUT_3: mmio.Mmio(packed struct(u32) {
    +                ///  This bits stores text_out_3 that is a part of result text material.
    +                TEXT_OUT_3: u32,
    +            }),
    +            ///  AES Mode register
    +            MODE: mmio.Mmio(packed struct(u32) {
    +                ///  This bits decides which one operation mode will be used. 3'd0: AES-EN-128, 3'd1: AES-EN-192, 3'd2: AES-EN-256, 3'd4: AES-DE-128, 3'd5: AES-DE-192, 3'd6: AES-DE-256.
    +                MODE: u3,
    +                padding: u29,
    +            }),
    +            ///  AES Endian configure register
    +            ENDIAN: mmio.Mmio(packed struct(u32) {
    +                ///  endian. [1:0] key endian, [3:2] text_in endian or in_stream endian, [5:4] text_out endian or out_stream endian
    +                ENDIAN: u6,
    +                padding: u26,
    +            }),
    +            ///  AES trigger register
    +            TRIGGER: mmio.Mmio(packed struct(u32) {
    +                ///  Set this bit to start AES calculation.
    +                TRIGGER: u1,
    +                padding: u31,
    +            }),
    +            ///  AES state register
    +            STATE: mmio.Mmio(packed struct(u32) {
    +                ///  Those bits shows AES status. For typical AES, 0: idle, 1: busy. For DMA-AES, 0: idle, 1: busy, 2: calculation_done.
    +                STATE: u2,
    +                padding: u30,
    +            }),
    +            ///  The memory that stores initialization vector
    +            IV_MEM: [16]u8,
    +            ///  The memory that stores GCM hash subkey
    +            H_MEM: [16]u8,
    +            ///  The memory that stores J0
    +            J0_MEM: [16]u8,
    +            ///  The memory that stores T0
    +            T0_MEM: [16]u8,
    +            ///  DMA-AES working mode register
    +            DMA_ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  1'b0: typical AES working mode, 1'b1: DMA-AES working mode.
    +                DMA_ENABLE: u1,
    +                padding: u31,
    +            }),
    +            ///  AES cipher block mode register
    +            BLOCK_MODE: mmio.Mmio(packed struct(u32) {
    +                ///  Those bits decides which block mode will be used. 0x0: ECB, 0x1: CBC, 0x2: OFB, 0x3: CTR, 0x4: CFB-8, 0x5: CFB-128, 0x6: GCM, 0x7: reserved.
    +                BLOCK_MODE: u3,
    +                padding: u29,
    +            }),
    +            ///  AES block number register
    +            BLOCK_NUM: mmio.Mmio(packed struct(u32) {
    +                ///  Those bits stores the number of Plaintext/ciphertext block.
    +                BLOCK_NUM: u32,
    +            }),
    +            ///  Standard incrementing function configure register
    +            INC_SEL: mmio.Mmio(packed struct(u32) {
    +                ///  This bit decides the standard incrementing function. 0: INC32. 1: INC128.
    +                INC_SEL: u1,
    +                padding: u31,
    +            }),
    +            ///  Additional Authential Data block number register
    +            AAD_BLOCK_NUM: mmio.Mmio(packed struct(u32) {
    +                ///  Those bits stores the number of AAD block.
    +                AAD_BLOCK_NUM: u32,
    +            }),
    +            ///  AES remainder bit number register
    +            REMAINDER_BIT_NUM: mmio.Mmio(packed struct(u32) {
    +                ///  Those bits stores the number of remainder bit.
    +                REMAINDER_BIT_NUM: u7,
    +                padding: u25,
    +            }),
    +            ///  AES continue register
    +            CONTINUE: mmio.Mmio(packed struct(u32) {
    +                ///  Set this bit to continue GCM operation.
    +                CONTINUE: u1,
    +                padding: u31,
    +            }),
    +            ///  AES Interrupt clear register
    +            INT_CLEAR: mmio.Mmio(packed struct(u32) {
    +                ///  Set this bit to clear the AES interrupt.
    +                INT_CLEAR: u1,
    +                padding: u31,
    +            }),
    +            ///  AES Interrupt enable register
    +            INT_ENA: mmio.Mmio(packed struct(u32) {
    +                ///  Set this bit to enable interrupt that occurs when DMA-AES calculation is done.
    +                INT_ENA: u1,
    +                padding: u31,
    +            }),
    +            ///  AES version control register
    +            DATE: mmio.Mmio(packed struct(u32) {
    +                ///  This bits stores the version information of AES.
    +                DATE: u30,
    +                padding: u2,
    +            }),
    +            ///  AES-DMA exit config
    +            DMA_EXIT: mmio.Mmio(packed struct(u32) {
    +                ///  Set this register to leave calculation done stage. Recommend to use it after software finishes reading DMA's output buffer.
    +                DMA_EXIT: u1,
    +                padding: u31,
    +            }),
    +        };
    +
    +        ///  Advanced Peripheral Bus Controller
    +        pub const APB_CTRL = extern struct {
    +            ///  APB_CTRL_SYSCLK_CONF_REG
    +            SYSCLK_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  reg_pre_div_cnt
    +                PRE_DIV_CNT: u10,
    +                ///  reg_clk_320m_en
    +                CLK_320M_EN: u1,
    +                ///  reg_clk_en
    +                CLK_EN: u1,
    +                ///  reg_rst_tick_cnt
    +                RST_TICK_CNT: u1,
    +                padding: u19,
    +            }),
    +            ///  APB_CTRL_TICK_CONF_REG
    +            TICK_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  reg_xtal_tick_num
    +                XTAL_TICK_NUM: u8,
    +                ///  reg_ck8m_tick_num
    +                CK8M_TICK_NUM: u8,
    +                ///  reg_tick_enable
    +                TICK_ENABLE: u1,
    +                padding: u15,
    +            }),
    +            ///  APB_CTRL_CLK_OUT_EN_REG
    +            CLK_OUT_EN: mmio.Mmio(packed struct(u32) {
    +                ///  reg_clk20_oen
    +                CLK20_OEN: u1,
    +                ///  reg_clk22_oen
    +                CLK22_OEN: u1,
    +                ///  reg_clk44_oen
    +                CLK44_OEN: u1,
    +                ///  reg_clk_bb_oen
    +                CLK_BB_OEN: u1,
    +                ///  reg_clk80_oen
    +                CLK80_OEN: u1,
    +                ///  reg_clk160_oen
    +                CLK160_OEN: u1,
    +                ///  reg_clk_320m_oen
    +                CLK_320M_OEN: u1,
    +                ///  reg_clk_adc_inf_oen
    +                CLK_ADC_INF_OEN: u1,
    +                ///  reg_clk_dac_cpu_oen
    +                CLK_DAC_CPU_OEN: u1,
    +                ///  reg_clk40x_bb_oen
    +                CLK40X_BB_OEN: u1,
    +                ///  reg_clk_xtal_oen
    +                CLK_XTAL_OEN: u1,
    +                padding: u21,
    +            }),
    +            ///  APB_CTRL_WIFI_BB_CFG_REG
    +            WIFI_BB_CFG: mmio.Mmio(packed struct(u32) {
    +                ///  reg_wifi_bb_cfg
    +                WIFI_BB_CFG: u32,
    +            }),
    +            ///  APB_CTRL_WIFI_BB_CFG_2_REG
    +            WIFI_BB_CFG_2: mmio.Mmio(packed struct(u32) {
    +                ///  reg_wifi_bb_cfg_2
    +                WIFI_BB_CFG_2: u32,
    +            }),
    +            ///  APB_CTRL_WIFI_CLK_EN_REG
    +            WIFI_CLK_EN: mmio.Mmio(packed struct(u32) {
    +                ///  reg_wifi_clk_en
    +                WIFI_CLK_EN: u32,
    +            }),
    +            ///  APB_CTRL_WIFI_RST_EN_REG
    +            WIFI_RST_EN: mmio.Mmio(packed struct(u32) {
    +                ///  reg_wifi_rst
    +                WIFI_RST: u32,
    +            }),
    +            ///  APB_CTRL_HOST_INF_SEL_REG
    +            HOST_INF_SEL: mmio.Mmio(packed struct(u32) {
    +                ///  reg_peri_io_swap
    +                PERI_IO_SWAP: u8,
    +                padding: u24,
    +            }),
    +            ///  APB_CTRL_EXT_MEM_PMS_LOCK_REG
    +            EXT_MEM_PMS_LOCK: mmio.Mmio(packed struct(u32) {
    +                ///  reg_ext_mem_pms_lock
    +                EXT_MEM_PMS_LOCK: u1,
    +                padding: u31,
    +            }),
    +            reserved40: [4]u8,
    +            ///  APB_CTRL_FLASH_ACE0_ATTR_REG
    +            FLASH_ACE0_ATTR: mmio.Mmio(packed struct(u32) {
    +                ///  reg_flash_ace0_attr
    +                FLASH_ACE0_ATTR: u2,
    +                padding: u30,
    +            }),
    +            ///  APB_CTRL_FLASH_ACE1_ATTR_REG
    +            FLASH_ACE1_ATTR: mmio.Mmio(packed struct(u32) {
    +                ///  reg_flash_ace1_attr
    +                FLASH_ACE1_ATTR: u2,
    +                padding: u30,
    +            }),
    +            ///  APB_CTRL_FLASH_ACE2_ATTR_REG
    +            FLASH_ACE2_ATTR: mmio.Mmio(packed struct(u32) {
    +                ///  reg_flash_ace2_attr
    +                FLASH_ACE2_ATTR: u2,
    +                padding: u30,
    +            }),
    +            ///  APB_CTRL_FLASH_ACE3_ATTR_REG
    +            FLASH_ACE3_ATTR: mmio.Mmio(packed struct(u32) {
    +                ///  reg_flash_ace3_attr
    +                FLASH_ACE3_ATTR: u2,
    +                padding: u30,
    +            }),
    +            ///  APB_CTRL_FLASH_ACE0_ADDR_REG
    +            FLASH_ACE0_ADDR: mmio.Mmio(packed struct(u32) {
    +                ///  reg_flash_ace0_addr_s
    +                S: u32,
    +            }),
    +            ///  APB_CTRL_FLASH_ACE1_ADDR_REG
    +            FLASH_ACE1_ADDR: mmio.Mmio(packed struct(u32) {
    +                ///  reg_flash_ace1_addr_s
    +                S: u32,
    +            }),
    +            ///  APB_CTRL_FLASH_ACE2_ADDR_REG
    +            FLASH_ACE2_ADDR: mmio.Mmio(packed struct(u32) {
    +                ///  reg_flash_ace2_addr_s
    +                S: u32,
    +            }),
    +            ///  APB_CTRL_FLASH_ACE3_ADDR_REG
    +            FLASH_ACE3_ADDR: mmio.Mmio(packed struct(u32) {
    +                ///  reg_flash_ace3_addr_s
    +                S: u32,
    +            }),
    +            ///  APB_CTRL_FLASH_ACE0_SIZE_REG
    +            FLASH_ACE0_SIZE: mmio.Mmio(packed struct(u32) {
    +                ///  reg_flash_ace0_size
    +                FLASH_ACE0_SIZE: u13,
    +                padding: u19,
    +            }),
    +            ///  APB_CTRL_FLASH_ACE1_SIZE_REG
    +            FLASH_ACE1_SIZE: mmio.Mmio(packed struct(u32) {
    +                ///  reg_flash_ace1_size
    +                FLASH_ACE1_SIZE: u13,
    +                padding: u19,
    +            }),
    +            ///  APB_CTRL_FLASH_ACE2_SIZE_REG
    +            FLASH_ACE2_SIZE: mmio.Mmio(packed struct(u32) {
    +                ///  reg_flash_ace2_size
    +                FLASH_ACE2_SIZE: u13,
    +                padding: u19,
    +            }),
    +            ///  APB_CTRL_FLASH_ACE3_SIZE_REG
    +            FLASH_ACE3_SIZE: mmio.Mmio(packed struct(u32) {
    +                ///  reg_flash_ace3_size
    +                FLASH_ACE3_SIZE: u13,
    +                padding: u19,
    +            }),
    +            reserved136: [48]u8,
    +            ///  APB_CTRL_SPI_MEM_PMS_CTRL_REG
    +            SPI_MEM_PMS_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  reg_spi_mem_reject_int
    +                SPI_MEM_REJECT_INT: u1,
    +                ///  reg_spi_mem_reject_clr
    +                SPI_MEM_REJECT_CLR: u1,
    +                ///  reg_spi_mem_reject_cde
    +                SPI_MEM_REJECT_CDE: u5,
    +                padding: u25,
    +            }),
    +            ///  APB_CTRL_SPI_MEM_REJECT_ADDR_REG
    +            SPI_MEM_REJECT_ADDR: mmio.Mmio(packed struct(u32) {
    +                ///  reg_spi_mem_reject_addr
    +                SPI_MEM_REJECT_ADDR: u32,
    +            }),
    +            ///  APB_CTRL_SDIO_CTRL_REG
    +            SDIO_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  reg_sdio_win_access_en
    +                SDIO_WIN_ACCESS_EN: u1,
    +                padding: u31,
    +            }),
    +            ///  APB_CTRL_REDCY_SIG0_REG
    +            REDCY_SIG0: mmio.Mmio(packed struct(u32) {
    +                ///  reg_redcy_sig0
    +                REDCY_SIG0: u31,
    +                ///  reg_redcy_andor
    +                REDCY_ANDOR: u1,
    +            }),
    +            ///  APB_CTRL_REDCY_SIG1_REG
    +            REDCY_SIG1: mmio.Mmio(packed struct(u32) {
    +                ///  reg_redcy_sig1
    +                REDCY_SIG1: u31,
    +                ///  reg_redcy_nandor
    +                REDCY_NANDOR: u1,
    +            }),
    +            ///  APB_CTRL_FRONT_END_MEM_PD_REG
    +            FRONT_END_MEM_PD: mmio.Mmio(packed struct(u32) {
    +                ///  reg_agc_mem_force_pu
    +                AGC_MEM_FORCE_PU: u1,
    +                ///  reg_agc_mem_force_pd
    +                AGC_MEM_FORCE_PD: u1,
    +                ///  reg_pbus_mem_force_pu
    +                PBUS_MEM_FORCE_PU: u1,
    +                ///  reg_pbus_mem_force_pd
    +                PBUS_MEM_FORCE_PD: u1,
    +                ///  reg_dc_mem_force_pu
    +                DC_MEM_FORCE_PU: u1,
    +                ///  reg_dc_mem_force_pd
    +                DC_MEM_FORCE_PD: u1,
    +                padding: u26,
    +            }),
    +            ///  APB_CTRL_RETENTION_CTRL_REG
    +            RETENTION_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  reg_retention_link_addr
    +                RETENTION_LINK_ADDR: u27,
    +                ///  reg_nobypass_cpu_iso_rst
    +                NOBYPASS_CPU_ISO_RST: u1,
    +                padding: u4,
    +            }),
    +            ///  APB_CTRL_CLKGATE_FORCE_ON_REG
    +            CLKGATE_FORCE_ON: mmio.Mmio(packed struct(u32) {
    +                ///  reg_rom_clkgate_force_on
    +                ROM_CLKGATE_FORCE_ON: u2,
    +                ///  reg_sram_clkgate_force_on
    +                SRAM_CLKGATE_FORCE_ON: u4,
    +                padding: u26,
    +            }),
    +            ///  APB_CTRL_MEM_POWER_DOWN_REG
    +            MEM_POWER_DOWN: mmio.Mmio(packed struct(u32) {
    +                ///  reg_rom_power_down
    +                ROM_POWER_DOWN: u2,
    +                ///  reg_sram_power_down
    +                SRAM_POWER_DOWN: u4,
    +                padding: u26,
    +            }),
    +            ///  APB_CTRL_MEM_POWER_UP_REG
    +            MEM_POWER_UP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_rom_power_up
    +                ROM_POWER_UP: u2,
    +                ///  reg_sram_power_up
    +                SRAM_POWER_UP: u4,
    +                padding: u26,
    +            }),
    +            ///  APB_CTRL_RND_DATA_REG
    +            RND_DATA: mmio.Mmio(packed struct(u32) {
    +                ///  reg_rnd_data
    +                RND_DATA: u32,
    +            }),
    +            ///  APB_CTRL_PERI_BACKUP_CONFIG_REG
    +            PERI_BACKUP_CONFIG: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  reg_peri_backup_flow_err
    +                PERI_BACKUP_FLOW_ERR: u2,
    +                reserved4: u1,
    +                ///  reg_peri_backup_burst_limit
    +                PERI_BACKUP_BURST_LIMIT: u5,
    +                ///  reg_peri_backup_tout_thres
    +                PERI_BACKUP_TOUT_THRES: u10,
    +                ///  reg_peri_backup_size
    +                PERI_BACKUP_SIZE: u10,
    +                ///  reg_peri_backup_start
    +                PERI_BACKUP_START: u1,
    +                ///  reg_peri_backup_to_mem
    +                PERI_BACKUP_TO_MEM: u1,
    +                ///  reg_peri_backup_ena
    +                PERI_BACKUP_ENA: u1,
    +            }),
    +            ///  APB_CTRL_PERI_BACKUP_APB_ADDR_REG
    +            PERI_BACKUP_APB_ADDR: mmio.Mmio(packed struct(u32) {
    +                ///  reg_backup_apb_start_addr
    +                BACKUP_APB_START_ADDR: u32,
    +            }),
    +            ///  APB_CTRL_PERI_BACKUP_MEM_ADDR_REG
    +            PERI_BACKUP_MEM_ADDR: mmio.Mmio(packed struct(u32) {
    +                ///  reg_backup_mem_start_addr
    +                BACKUP_MEM_START_ADDR: u32,
    +            }),
    +            ///  APB_CTRL_PERI_BACKUP_INT_RAW_REG
    +            PERI_BACKUP_INT_RAW: mmio.Mmio(packed struct(u32) {
    +                ///  reg_peri_backup_done_int_raw
    +                PERI_BACKUP_DONE_INT_RAW: u1,
    +                ///  reg_peri_backup_err_int_raw
    +                PERI_BACKUP_ERR_INT_RAW: u1,
    +                padding: u30,
    +            }),
    +            ///  APB_CTRL_PERI_BACKUP_INT_ST_REG
    +            PERI_BACKUP_INT_ST: mmio.Mmio(packed struct(u32) {
    +                ///  reg_peri_backup_done_int_st
    +                PERI_BACKUP_DONE_INT_ST: u1,
    +                ///  reg_peri_backup_err_int_st
    +                PERI_BACKUP_ERR_INT_ST: u1,
    +                padding: u30,
    +            }),
    +            ///  APB_CTRL_PERI_BACKUP_INT_ENA_REG
    +            PERI_BACKUP_INT_ENA: mmio.Mmio(packed struct(u32) {
    +                ///  reg_peri_backup_done_int_ena
    +                PERI_BACKUP_DONE_INT_ENA: u1,
    +                ///  reg_peri_backup_err_int_ena
    +                PERI_BACKUP_ERR_INT_ENA: u1,
    +                padding: u30,
    +            }),
    +            reserved208: [4]u8,
    +            ///  APB_CTRL_PERI_BACKUP_INT_CLR_REG
    +            PERI_BACKUP_INT_CLR: mmio.Mmio(packed struct(u32) {
    +                ///  reg_peri_backup_done_int_clr
    +                PERI_BACKUP_DONE_INT_CLR: u1,
    +                ///  reg_peri_backup_err_int_clr
    +                PERI_BACKUP_ERR_INT_CLR: u1,
    +                padding: u30,
    +            }),
    +            reserved1020: [808]u8,
    +            ///  APB_CTRL_DATE_REG
    +            DATE: mmio.Mmio(packed struct(u32) {
    +                ///  reg_dateVersion control
    +                DATE: u32,
    +            }),
    +        };
    +
    +        ///  Successive Approximation Register Analog to Digital Converter
    +        pub const APB_SARADC = extern struct {
    +            ///  digital saradc configure register
    +            CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  select software enable saradc sample
    +                SARADC_START_FORCE: u1,
    +                ///  software enable saradc sample
    +                SARADC_START: u1,
    +                reserved6: u4,
    +                ///  SAR clock gated
    +                SARADC_SAR_CLK_GATED: u1,
    +                ///  SAR clock divider
    +                SARADC_SAR_CLK_DIV: u8,
    +                ///  0 ~ 15 means length 1 ~ 16
    +                SARADC_SAR_PATT_LEN: u3,
    +                reserved23: u5,
    +                ///  clear the pointer of pattern table for DIG ADC1 CTRL
    +                SARADC_SAR_PATT_P_CLEAR: u1,
    +                reserved27: u3,
    +                ///  force option to xpd sar blocks
    +                SARADC_XPD_SAR_FORCE: u2,
    +                reserved30: u1,
    +                ///  wait arbit signal stable after sar_done
    +                SARADC_WAIT_ARB_CYCLE: u2,
    +            }),
    +            ///  digital saradc configure register
    +            CTRL2: mmio.Mmio(packed struct(u32) {
    +                ///  enable max meas num
    +                SARADC_MEAS_NUM_LIMIT: u1,
    +                ///  max conversion number
    +                SARADC_MAX_MEAS_NUM: u8,
    +                ///  1: data to DIG ADC1 CTRL is inverted, otherwise not
    +                SARADC_SAR1_INV: u1,
    +                ///  1: data to DIG ADC2 CTRL is inverted, otherwise not
    +                SARADC_SAR2_INV: u1,
    +                reserved12: u1,
    +                ///  to set saradc timer target
    +                SARADC_TIMER_TARGET: u12,
    +                ///  to enable saradc timer trigger
    +                SARADC_TIMER_EN: u1,
    +                padding: u7,
    +            }),
    +            ///  digital saradc configure register
    +            FILTER_CTRL1: mmio.Mmio(packed struct(u32) {
    +                reserved26: u26,
    +                ///  Factor of saradc filter1
    +                APB_SARADC_FILTER_FACTOR1: u3,
    +                ///  Factor of saradc filter0
    +                APB_SARADC_FILTER_FACTOR0: u3,
    +            }),
    +            ///  digital saradc configure register
    +            FSM_WAIT: mmio.Mmio(packed struct(u32) {
    +                ///  saradc_xpd_wait
    +                SARADC_XPD_WAIT: u8,
    +                ///  saradc_rstb_wait
    +                SARADC_RSTB_WAIT: u8,
    +                ///  saradc_standby_wait
    +                SARADC_STANDBY_WAIT: u8,
    +                padding: u8,
    +            }),
    +            ///  digital saradc configure register
    +            SAR1_STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  saradc1 status about data and channel
    +                SARADC_SAR1_STATUS: u32,
    +            }),
    +            ///  digital saradc configure register
    +            SAR2_STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  saradc2 status about data and channel
    +                SARADC_SAR2_STATUS: u32,
    +            }),
    +            ///  digital saradc configure register
    +            SAR_PATT_TAB1: mmio.Mmio(packed struct(u32) {
    +                ///  item 0 ~ 3 for pattern table 1 (each item one byte)
    +                SARADC_SAR_PATT_TAB1: u24,
    +                padding: u8,
    +            }),
    +            ///  digital saradc configure register
    +            SAR_PATT_TAB2: mmio.Mmio(packed struct(u32) {
    +                ///  Item 4 ~ 7 for pattern table 1 (each item one byte)
    +                SARADC_SAR_PATT_TAB2: u24,
    +                padding: u8,
    +            }),
    +            ///  digital saradc configure register
    +            ONETIME_SAMPLE: mmio.Mmio(packed struct(u32) {
    +                reserved23: u23,
    +                ///  configure onetime atten
    +                SARADC_ONETIME_ATTEN: u2,
    +                ///  configure onetime channel
    +                SARADC_ONETIME_CHANNEL: u4,
    +                ///  trigger adc onetime sample
    +                SARADC_ONETIME_START: u1,
    +                ///  enable adc2 onetime sample
    +                SARADC2_ONETIME_SAMPLE: u1,
    +                ///  enable adc1 onetime sample
    +                SARADC1_ONETIME_SAMPLE: u1,
    +            }),
    +            ///  digital saradc configure register
    +            ARB_CTRL: mmio.Mmio(packed struct(u32) {
    +                reserved2: u2,
    +                ///  adc2 arbiter force to enableapb controller
    +                ADC_ARB_APB_FORCE: u1,
    +                ///  adc2 arbiter force to enable rtc controller
    +                ADC_ARB_RTC_FORCE: u1,
    +                ///  adc2 arbiter force to enable wifi controller
    +                ADC_ARB_WIFI_FORCE: u1,
    +                ///  adc2 arbiter force grant
    +                ADC_ARB_GRANT_FORCE: u1,
    +                ///  Set adc2 arbiterapb priority
    +                ADC_ARB_APB_PRIORITY: u2,
    +                ///  Set adc2 arbiter rtc priority
    +                ADC_ARB_RTC_PRIORITY: u2,
    +                ///  Set adc2 arbiter wifi priority
    +                ADC_ARB_WIFI_PRIORITY: u2,
    +                ///  adc2 arbiter uses fixed priority
    +                ADC_ARB_FIX_PRIORITY: u1,
    +                padding: u19,
    +            }),
    +            ///  digital saradc configure register
    +            FILTER_CTRL0: mmio.Mmio(packed struct(u32) {
    +                reserved18: u18,
    +                ///  configure filter1 to adc channel
    +                APB_SARADC_FILTER_CHANNEL1: u4,
    +                ///  configure filter0 to adc channel
    +                APB_SARADC_FILTER_CHANNEL0: u4,
    +                reserved31: u5,
    +                ///  enable apb_adc1_filter
    +                APB_SARADC_FILTER_RESET: u1,
    +            }),
    +            ///  digital saradc configure register
    +            SAR1DATA_STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  saradc1 data
    +                APB_SARADC1_DATA: u17,
    +                padding: u15,
    +            }),
    +            ///  digital saradc configure register
    +            SAR2DATA_STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  saradc2 data
    +                APB_SARADC2_DATA: u17,
    +                padding: u15,
    +            }),
    +            ///  digital saradc configure register
    +            THRES0_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  configure thres0 to adc channel
    +                APB_SARADC_THRES0_CHANNEL: u4,
    +                reserved5: u1,
    +                ///  saradc thres0 monitor thres
    +                APB_SARADC_THRES0_HIGH: u13,
    +                ///  saradc thres0 monitor thres
    +                APB_SARADC_THRES0_LOW: u13,
    +                padding: u1,
    +            }),
    +            ///  digital saradc configure register
    +            THRES1_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  configure thres1 to adc channel
    +                APB_SARADC_THRES1_CHANNEL: u4,
    +                reserved5: u1,
    +                ///  saradc thres1 monitor thres
    +                APB_SARADC_THRES1_HIGH: u13,
    +                ///  saradc thres1 monitor thres
    +                APB_SARADC_THRES1_LOW: u13,
    +                padding: u1,
    +            }),
    +            ///  digital saradc configure register
    +            THRES_CTRL: mmio.Mmio(packed struct(u32) {
    +                reserved27: u27,
    +                ///  enable thres to all channel
    +                APB_SARADC_THRES_ALL_EN: u1,
    +                reserved30: u2,
    +                ///  enable thres1
    +                APB_SARADC_THRES1_EN: u1,
    +                ///  enable thres0
    +                APB_SARADC_THRES0_EN: u1,
    +            }),
    +            ///  digital saradc int register
    +            INT_ENA: mmio.Mmio(packed struct(u32) {
    +                reserved26: u26,
    +                ///  saradc thres1 low interrupt enable
    +                APB_SARADC_THRES1_LOW_INT_ENA: u1,
    +                ///  saradc thres0 low interrupt enable
    +                APB_SARADC_THRES0_LOW_INT_ENA: u1,
    +                ///  saradc thres1 high interrupt enable
    +                APB_SARADC_THRES1_HIGH_INT_ENA: u1,
    +                ///  saradc thres0 high interrupt enable
    +                APB_SARADC_THRES0_HIGH_INT_ENA: u1,
    +                ///  saradc2 done interrupt enable
    +                APB_SARADC2_DONE_INT_ENA: u1,
    +                ///  saradc1 done interrupt enable
    +                APB_SARADC1_DONE_INT_ENA: u1,
    +            }),
    +            ///  digital saradc int register
    +            INT_RAW: mmio.Mmio(packed struct(u32) {
    +                reserved26: u26,
    +                ///  saradc thres1 low interrupt raw
    +                APB_SARADC_THRES1_LOW_INT_RAW: u1,
    +                ///  saradc thres0 low interrupt raw
    +                APB_SARADC_THRES0_LOW_INT_RAW: u1,
    +                ///  saradc thres1 high interrupt raw
    +                APB_SARADC_THRES1_HIGH_INT_RAW: u1,
    +                ///  saradc thres0 high interrupt raw
    +                APB_SARADC_THRES0_HIGH_INT_RAW: u1,
    +                ///  saradc2 done interrupt raw
    +                APB_SARADC2_DONE_INT_RAW: u1,
    +                ///  saradc1 done interrupt raw
    +                APB_SARADC1_DONE_INT_RAW: u1,
    +            }),
    +            ///  digital saradc int register
    +            INT_ST: mmio.Mmio(packed struct(u32) {
    +                reserved26: u26,
    +                ///  saradc thres1 low interrupt state
    +                APB_SARADC_THRES1_LOW_INT_ST: u1,
    +                ///  saradc thres0 low interrupt state
    +                APB_SARADC_THRES0_LOW_INT_ST: u1,
    +                ///  saradc thres1 high interrupt state
    +                APB_SARADC_THRES1_HIGH_INT_ST: u1,
    +                ///  saradc thres0 high interrupt state
    +                APB_SARADC_THRES0_HIGH_INT_ST: u1,
    +                ///  saradc2 done interrupt state
    +                APB_SARADC2_DONE_INT_ST: u1,
    +                ///  saradc1 done interrupt state
    +                APB_SARADC1_DONE_INT_ST: u1,
    +            }),
    +            ///  digital saradc int register
    +            INT_CLR: mmio.Mmio(packed struct(u32) {
    +                reserved26: u26,
    +                ///  saradc thres1 low interrupt clear
    +                APB_SARADC_THRES1_LOW_INT_CLR: u1,
    +                ///  saradc thres0 low interrupt clear
    +                APB_SARADC_THRES0_LOW_INT_CLR: u1,
    +                ///  saradc thres1 high interrupt clear
    +                APB_SARADC_THRES1_HIGH_INT_CLR: u1,
    +                ///  saradc thres0 high interrupt clear
    +                APB_SARADC_THRES0_HIGH_INT_CLR: u1,
    +                ///  saradc2 done interrupt clear
    +                APB_SARADC2_DONE_INT_CLR: u1,
    +                ///  saradc1 done interrupt clear
    +                APB_SARADC1_DONE_INT_CLR: u1,
    +            }),
    +            ///  digital saradc configure register
    +            DMA_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  the dma_in_suc_eof gen when sample cnt = spi_eof_num
    +                APB_ADC_EOF_NUM: u16,
    +                reserved30: u14,
    +                ///  reset_apb_adc_state
    +                APB_ADC_RESET_FSM: u1,
    +                ///  enable apb_adc use spi_dma
    +                APB_ADC_TRANS: u1,
    +            }),
    +            ///  digital saradc configure register
    +            CLKM_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  Integral I2S clock divider value
    +                CLKM_DIV_NUM: u8,
    +                ///  Fractional clock divider numerator value
    +                CLKM_DIV_B: u6,
    +                ///  Fractional clock divider denominator value
    +                CLKM_DIV_A: u6,
    +                ///  reg clk en
    +                CLK_EN: u1,
    +                ///  Set this bit to enable clk_apll
    +                CLK_SEL: u2,
    +                padding: u9,
    +            }),
    +            ///  digital tsens configure register
    +            APB_TSENS_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  temperature sensor data out
    +                TSENS_OUT: u8,
    +                reserved13: u5,
    +                ///  invert temperature sensor data
    +                TSENS_IN_INV: u1,
    +                ///  temperature sensor clock divider
    +                TSENS_CLK_DIV: u8,
    +                ///  temperature sensor power up
    +                TSENS_PU: u1,
    +                padding: u9,
    +            }),
    +            ///  digital tsens configure register
    +            TSENS_CTRL2: mmio.Mmio(packed struct(u32) {
    +                ///  the time that power up tsens need wait
    +                TSENS_XPD_WAIT: u12,
    +                ///  force power up tsens
    +                TSENS_XPD_FORCE: u2,
    +                ///  inv tsens clk
    +                TSENS_CLK_INV: u1,
    +                ///  tsens clk select
    +                TSENS_CLK_SEL: u1,
    +                padding: u16,
    +            }),
    +            ///  digital saradc configure register
    +            CALI: mmio.Mmio(packed struct(u32) {
    +                ///  saradc cali factor
    +                APB_SARADC_CALI_CFG: u17,
    +                padding: u15,
    +            }),
    +            reserved1020: [920]u8,
    +            ///  version
    +            CTRL_DATE: mmio.Mmio(packed struct(u32) {
    +                ///  version
    +                DATE: u32,
    +            }),
    +        };
    +
    +        ///  Debug Assist
    +        pub const ASSIST_DEBUG = extern struct {
    +            ///  ASSIST_DEBUG_C0RE_0_MONTR_ENA_REG
    +            C0RE_0_MONTR_ENA: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_area_dram0_0_rd_ena
    +                CORE_0_AREA_DRAM0_0_RD_ENA: u1,
    +                ///  reg_core_0_area_dram0_0_wr_ena
    +                CORE_0_AREA_DRAM0_0_WR_ENA: u1,
    +                ///  reg_core_0_area_dram0_1_rd_ena
    +                CORE_0_AREA_DRAM0_1_RD_ENA: u1,
    +                ///  reg_core_0_area_dram0_1_wr_ena
    +                CORE_0_AREA_DRAM0_1_WR_ENA: u1,
    +                ///  reg_core_0_area_pif_0_rd_ena
    +                CORE_0_AREA_PIF_0_RD_ENA: u1,
    +                ///  reg_core_0_area_pif_0_wr_ena
    +                CORE_0_AREA_PIF_0_WR_ENA: u1,
    +                ///  reg_core_0_area_pif_1_rd_ena
    +                CORE_0_AREA_PIF_1_RD_ENA: u1,
    +                ///  reg_core_0_area_pif_1_wr_ena
    +                CORE_0_AREA_PIF_1_WR_ENA: u1,
    +                ///  reg_core_0_sp_spill_min_ena
    +                CORE_0_SP_SPILL_MIN_ENA: u1,
    +                ///  reg_core_0_sp_spill_max_ena
    +                CORE_0_SP_SPILL_MAX_ENA: u1,
    +                ///  reg_core_0_iram0_exception_monitor_ena
    +                CORE_0_IRAM0_EXCEPTION_MONITOR_ENA: u1,
    +                ///  reg_core_0_dram0_exception_monitor_ena
    +                CORE_0_DRAM0_EXCEPTION_MONITOR_ENA: u1,
    +                padding: u20,
    +            }),
    +            ///  ASSIST_DEBUG_CORE_0_INTR_RAW_REG
    +            CORE_0_INTR_RAW: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_area_dram0_0_rd_raw
    +                CORE_0_AREA_DRAM0_0_RD_RAW: u1,
    +                ///  reg_core_0_area_dram0_0_wr_raw
    +                CORE_0_AREA_DRAM0_0_WR_RAW: u1,
    +                ///  reg_core_0_area_dram0_1_rd_raw
    +                CORE_0_AREA_DRAM0_1_RD_RAW: u1,
    +                ///  reg_core_0_area_dram0_1_wr_raw
    +                CORE_0_AREA_DRAM0_1_WR_RAW: u1,
    +                ///  reg_core_0_area_pif_0_rd_raw
    +                CORE_0_AREA_PIF_0_RD_RAW: u1,
    +                ///  reg_core_0_area_pif_0_wr_raw
    +                CORE_0_AREA_PIF_0_WR_RAW: u1,
    +                ///  reg_core_0_area_pif_1_rd_raw
    +                CORE_0_AREA_PIF_1_RD_RAW: u1,
    +                ///  reg_core_0_area_pif_1_wr_raw
    +                CORE_0_AREA_PIF_1_WR_RAW: u1,
    +                ///  reg_core_0_sp_spill_min_raw
    +                CORE_0_SP_SPILL_MIN_RAW: u1,
    +                ///  reg_core_0_sp_spill_max_raw
    +                CORE_0_SP_SPILL_MAX_RAW: u1,
    +                ///  reg_core_0_iram0_exception_monitor_raw
    +                CORE_0_IRAM0_EXCEPTION_MONITOR_RAW: u1,
    +                ///  reg_core_0_dram0_exception_monitor_raw
    +                CORE_0_DRAM0_EXCEPTION_MONITOR_RAW: u1,
    +                padding: u20,
    +            }),
    +            ///  ASSIST_DEBUG_CORE_0_INTR_ENA_REG
    +            CORE_0_INTR_ENA: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_area_dram0_0_rd_intr_ena
    +                CORE_0_AREA_DRAM0_0_RD_INTR_ENA: u1,
    +                ///  reg_core_0_area_dram0_0_wr_intr_ena
    +                CORE_0_AREA_DRAM0_0_WR_INTR_ENA: u1,
    +                ///  reg_core_0_area_dram0_1_rd_intr_ena
    +                CORE_0_AREA_DRAM0_1_RD_INTR_ENA: u1,
    +                ///  reg_core_0_area_dram0_1_wr_intr_ena
    +                CORE_0_AREA_DRAM0_1_WR_INTR_ENA: u1,
    +                ///  reg_core_0_area_pif_0_rd_intr_ena
    +                CORE_0_AREA_PIF_0_RD_INTR_ENA: u1,
    +                ///  reg_core_0_area_pif_0_wr_intr_ena
    +                CORE_0_AREA_PIF_0_WR_INTR_ENA: u1,
    +                ///  reg_core_0_area_pif_1_rd_intr_ena
    +                CORE_0_AREA_PIF_1_RD_INTR_ENA: u1,
    +                ///  reg_core_0_area_pif_1_wr_intr_ena
    +                CORE_0_AREA_PIF_1_WR_INTR_ENA: u1,
    +                ///  reg_core_0_sp_spill_min_intr_ena
    +                CORE_0_SP_SPILL_MIN_INTR_ENA: u1,
    +                ///  reg_core_0_sp_spill_max_intr_ena
    +                CORE_0_SP_SPILL_MAX_INTR_ENA: u1,
    +                ///  reg_core_0_iram0_exception_monitor_ena
    +                CORE_0_IRAM0_EXCEPTION_MONITOR_RLS: u1,
    +                ///  reg_core_0_dram0_exception_monitor_ena
    +                CORE_0_DRAM0_EXCEPTION_MONITOR_RLS: u1,
    +                padding: u20,
    +            }),
    +            ///  ASSIST_DEBUG_CORE_0_INTR_CLR_REG
    +            CORE_0_INTR_CLR: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_area_dram0_0_rd_clr
    +                CORE_0_AREA_DRAM0_0_RD_CLR: u1,
    +                ///  reg_core_0_area_dram0_0_wr_clr
    +                CORE_0_AREA_DRAM0_0_WR_CLR: u1,
    +                ///  reg_core_0_area_dram0_1_rd_clr
    +                CORE_0_AREA_DRAM0_1_RD_CLR: u1,
    +                ///  reg_core_0_area_dram0_1_wr_clr
    +                CORE_0_AREA_DRAM0_1_WR_CLR: u1,
    +                ///  reg_core_0_area_pif_0_rd_clr
    +                CORE_0_AREA_PIF_0_RD_CLR: u1,
    +                ///  reg_core_0_area_pif_0_wr_clr
    +                CORE_0_AREA_PIF_0_WR_CLR: u1,
    +                ///  reg_core_0_area_pif_1_rd_clr
    +                CORE_0_AREA_PIF_1_RD_CLR: u1,
    +                ///  reg_core_0_area_pif_1_wr_clr
    +                CORE_0_AREA_PIF_1_WR_CLR: u1,
    +                ///  reg_core_0_sp_spill_min_clr
    +                CORE_0_SP_SPILL_MIN_CLR: u1,
    +                ///  reg_core_0_sp_spill_max_clr
    +                CORE_0_SP_SPILL_MAX_CLR: u1,
    +                ///  reg_core_0_iram0_exception_monitor_clr
    +                CORE_0_IRAM0_EXCEPTION_MONITOR_CLR: u1,
    +                ///  reg_core_0_dram0_exception_monitor_clr
    +                CORE_0_DRAM0_EXCEPTION_MONITOR_CLR: u1,
    +                padding: u20,
    +            }),
    +            ///  ASSIST_DEBUG_CORE_0_AREA_DRAM0_0_MIN_REG
    +            CORE_0_AREA_DRAM0_0_MIN: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_area_dram0_0_min
    +                CORE_0_AREA_DRAM0_0_MIN: u32,
    +            }),
    +            ///  ASSIST_DEBUG_CORE_0_AREA_DRAM0_0_MAX_REG
    +            CORE_0_AREA_DRAM0_0_MAX: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_area_dram0_0_max
    +                CORE_0_AREA_DRAM0_0_MAX: u32,
    +            }),
    +            ///  ASSIST_DEBUG_CORE_0_AREA_DRAM0_1_MIN_REG
    +            CORE_0_AREA_DRAM0_1_MIN: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_area_dram0_1_min
    +                CORE_0_AREA_DRAM0_1_MIN: u32,
    +            }),
    +            ///  ASSIST_DEBUG_CORE_0_AREA_DRAM0_1_MAX_REG
    +            CORE_0_AREA_DRAM0_1_MAX: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_area_dram0_1_max
    +                CORE_0_AREA_DRAM0_1_MAX: u32,
    +            }),
    +            ///  ASSIST_DEBUG_CORE_0_AREA_PIF_0_MIN_REG
    +            CORE_0_AREA_PIF_0_MIN: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_area_pif_0_min
    +                CORE_0_AREA_PIF_0_MIN: u32,
    +            }),
    +            ///  ASSIST_DEBUG_CORE_0_AREA_PIF_0_MAX_REG
    +            CORE_0_AREA_PIF_0_MAX: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_area_pif_0_max
    +                CORE_0_AREA_PIF_0_MAX: u32,
    +            }),
    +            ///  ASSIST_DEBUG_CORE_0_AREA_PIF_1_MIN_REG
    +            CORE_0_AREA_PIF_1_MIN: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_area_pif_1_min
    +                CORE_0_AREA_PIF_1_MIN: u32,
    +            }),
    +            ///  ASSIST_DEBUG_CORE_0_AREA_PIF_1_MAX_REG
    +            CORE_0_AREA_PIF_1_MAX: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_area_pif_1_max
    +                CORE_0_AREA_PIF_1_MAX: u32,
    +            }),
    +            ///  ASSIST_DEBUG_CORE_0_AREA_PC_REG
    +            CORE_0_AREA_PC: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_area_pc
    +                CORE_0_AREA_PC: u32,
    +            }),
    +            ///  ASSIST_DEBUG_CORE_0_AREA_SP_REG
    +            CORE_0_AREA_SP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_area_sp
    +                CORE_0_AREA_SP: u32,
    +            }),
    +            ///  ASSIST_DEBUG_CORE_0_SP_MIN_REG
    +            CORE_0_SP_MIN: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_sp_min
    +                CORE_0_SP_MIN: u32,
    +            }),
    +            ///  ASSIST_DEBUG_CORE_0_SP_MAX_REG
    +            CORE_0_SP_MAX: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_sp_max
    +                CORE_0_SP_MAX: u32,
    +            }),
    +            ///  ASSIST_DEBUG_CORE_0_SP_PC_REG
    +            CORE_0_SP_PC: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_sp_pc
    +                CORE_0_SP_PC: u32,
    +            }),
    +            ///  ASSIST_DEBUG_CORE_0_RCD_EN_REG
    +            CORE_0_RCD_EN: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_rcd_recorden
    +                CORE_0_RCD_RECORDEN: u1,
    +                ///  reg_core_0_rcd_pdebugen
    +                CORE_0_RCD_PDEBUGEN: u1,
    +                padding: u30,
    +            }),
    +            ///  ASSIST_DEBUG_CORE_0_RCD_PDEBUGPC_REG
    +            CORE_0_RCD_PDEBUGPC: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_rcd_pdebugpc
    +                CORE_0_RCD_PDEBUGPC: u32,
    +            }),
    +            ///  ASSIST_DEBUG_CORE_0_RCD_PDEBUGSP_REG
    +            CORE_0_RCD_PDEBUGSP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_rcd_pdebugsp
    +                CORE_0_RCD_PDEBUGSP: u32,
    +            }),
    +            ///  ASSIST_DEBUG_CORE_0_RCD_PDEBUGSP_REG
    +            CORE_0_IRAM0_EXCEPTION_MONITOR_0: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_iram0_recording_addr_0
    +                CORE_0_IRAM0_RECORDING_ADDR_0: u24,
    +                ///  reg_core_0_iram0_recording_wr_0
    +                CORE_0_IRAM0_RECORDING_WR_0: u1,
    +                ///  reg_core_0_iram0_recording_loadstore_0
    +                CORE_0_IRAM0_RECORDING_LOADSTORE_0: u1,
    +                padding: u6,
    +            }),
    +            ///  ASSIST_DEBUG_CORE_0_IRAM0_EXCEPTION_MONITOR_1_REG
    +            CORE_0_IRAM0_EXCEPTION_MONITOR_1: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_iram0_recording_addr_1
    +                CORE_0_IRAM0_RECORDING_ADDR_1: u24,
    +                ///  reg_core_0_iram0_recording_wr_1
    +                CORE_0_IRAM0_RECORDING_WR_1: u1,
    +                ///  reg_core_0_iram0_recording_loadstore_1
    +                CORE_0_IRAM0_RECORDING_LOADSTORE_1: u1,
    +                padding: u6,
    +            }),
    +            ///  ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_0_REG
    +            CORE_0_DRAM0_EXCEPTION_MONITOR_0: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_dram0_recording_addr_0
    +                CORE_0_DRAM0_RECORDING_ADDR_0: u24,
    +                ///  reg_core_0_dram0_recording_wr_0
    +                CORE_0_DRAM0_RECORDING_WR_0: u1,
    +                ///  reg_core_0_dram0_recording_byteen_0
    +                CORE_0_DRAM0_RECORDING_BYTEEN_0: u4,
    +                padding: u3,
    +            }),
    +            ///  ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_1_REG
    +            CORE_0_DRAM0_EXCEPTION_MONITOR_1: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_dram0_recording_pc_0
    +                CORE_0_DRAM0_RECORDING_PC_0: u32,
    +            }),
    +            ///  ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_1_REG
    +            CORE_0_DRAM0_EXCEPTION_MONITOR_2: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_dram0_recording_addr_1
    +                CORE_0_DRAM0_RECORDING_ADDR_1: u24,
    +                ///  reg_core_0_dram0_recording_wr_1
    +                CORE_0_DRAM0_RECORDING_WR_1: u1,
    +                ///  reg_core_0_dram0_recording_byteen_1
    +                CORE_0_DRAM0_RECORDING_BYTEEN_1: u4,
    +                padding: u3,
    +            }),
    +            ///  ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_3_REG
    +            CORE_0_DRAM0_EXCEPTION_MONITOR_3: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_dram0_recording_pc_1
    +                CORE_0_DRAM0_RECORDING_PC_1: u32,
    +            }),
    +            ///  ASSIST_DEBUG_CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_0_REG
    +            CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_0: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_x_iram0_dram0_limit_cycle_0
    +                CORE_X_IRAM0_DRAM0_LIMIT_CYCLE_0: u20,
    +                padding: u12,
    +            }),
    +            ///  ASSIST_DEBUG_CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_1_REG
    +            CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_1: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_x_iram0_dram0_limit_cycle_1
    +                CORE_X_IRAM0_DRAM0_LIMIT_CYCLE_1: u20,
    +                padding: u12,
    +            }),
    +            ///  ASSIST_DEBUG_LOG_SETTING
    +            LOG_SETTING: mmio.Mmio(packed struct(u32) {
    +                ///  reg_log_ena
    +                LOG_ENA: u3,
    +                ///  reg_log_mode
    +                LOG_MODE: u4,
    +                ///  reg_log_mem_loop_enable
    +                LOG_MEM_LOOP_ENABLE: u1,
    +                padding: u24,
    +            }),
    +            ///  ASSIST_DEBUG_LOG_DATA_0_REG
    +            LOG_DATA_0: mmio.Mmio(packed struct(u32) {
    +                ///  reg_log_data_0
    +                LOG_DATA_0: u32,
    +            }),
    +            ///  ASSIST_DEBUG_LOG_DATA_MASK_REG
    +            LOG_DATA_MASK: mmio.Mmio(packed struct(u32) {
    +                ///  reg_log_data_size
    +                LOG_DATA_SIZE: u16,
    +                padding: u16,
    +            }),
    +            ///  ASSIST_DEBUG_LOG_MIN_REG
    +            LOG_MIN: mmio.Mmio(packed struct(u32) {
    +                ///  reg_log_min
    +                LOG_MIN: u32,
    +            }),
    +            ///  ASSIST_DEBUG_LOG_MAX_REG
    +            LOG_MAX: mmio.Mmio(packed struct(u32) {
    +                ///  reg_log_max
    +                LOG_MAX: u32,
    +            }),
    +            ///  ASSIST_DEBUG_LOG_MEM_START_REG
    +            LOG_MEM_START: mmio.Mmio(packed struct(u32) {
    +                ///  reg_log_mem_start
    +                LOG_MEM_START: u32,
    +            }),
    +            ///  ASSIST_DEBUG_LOG_MEM_END_REG
    +            LOG_MEM_END: mmio.Mmio(packed struct(u32) {
    +                ///  reg_log_mem_end
    +                LOG_MEM_END: u32,
    +            }),
    +            ///  ASSIST_DEBUG_LOG_MEM_WRITING_ADDR_REG
    +            LOG_MEM_WRITING_ADDR: mmio.Mmio(packed struct(u32) {
    +                ///  reg_log_mem_writing_addr
    +                LOG_MEM_WRITING_ADDR: u32,
    +            }),
    +            ///  ASSIST_DEBUG_LOG_MEM_FULL_FLAG_REG
    +            LOG_MEM_FULL_FLAG: mmio.Mmio(packed struct(u32) {
    +                ///  reg_log_mem_full_flag
    +                LOG_MEM_FULL_FLAG: u1,
    +                ///  reg_clr_log_mem_full_flag
    +                CLR_LOG_MEM_FULL_FLAG: u1,
    +                padding: u30,
    +            }),
    +            ///  ASSIST_DEBUG_C0RE_0_LASTPC_BEFORE_EXCEPTION
    +            C0RE_0_LASTPC_BEFORE_EXCEPTION: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_lastpc_before_exc
    +                CORE_0_LASTPC_BEFORE_EXC: u32,
    +            }),
    +            ///  ASSIST_DEBUG_C0RE_0_DEBUG_MODE
    +            C0RE_0_DEBUG_MODE: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core_0_debug_mode
    +                CORE_0_DEBUG_MODE: u1,
    +                ///  reg_core_0_debug_module_active
    +                CORE_0_DEBUG_MODULE_ACTIVE: u1,
    +                padding: u30,
    +            }),
    +            reserved508: [352]u8,
    +            ///  ASSIST_DEBUG_DATE_REG
    +            DATE: mmio.Mmio(packed struct(u32) {
    +                ///  reg_assist_debug_date
    +                ASSIST_DEBUG_DATE: u28,
    +                padding: u4,
    +            }),
    +        };
    +
    +        ///  DMA (Direct Memory Access) Controller
    +        pub const DMA = extern struct {
    +            ///  DMA_INT_RAW_CH0_REG.
    +            INT_RAW_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 0.
    +                IN_DONE_CH0_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 0. For UHCI0, the raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received and no data error is detected for Rx channel 0.
    +                IN_SUC_EOF_CH0_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when data error is detected only in the case that the peripheral is UHCI0 for Rx channel 0. For other peripherals, this raw interrupt is reserved.
    +                IN_ERR_EOF_CH0_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been transmitted to peripherals for Tx channel 0.
    +                OUT_DONE_CH0_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been read from memory for Tx channel 0.
    +                OUT_EOF_CH0_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when detecting inlink descriptor error, including owner error, the second and third word error of inlink descriptor for Rx channel 0.
    +                IN_DSCR_ERR_CH0_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when detecting outlink descriptor error, including owner error, the second and third word error of outlink descriptor for Tx channel 0.
    +                OUT_DSCR_ERR_CH0_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when Rx buffer pointed by inlink is full and receiving data is not completed, but there is no more inlink for Rx channel 0.
    +                IN_DSCR_EMPTY_CH0_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when data corresponding a outlink (includes one link descriptor or few link descriptors) is transmitted out for Tx channel 0.
    +                OUT_TOTAL_EOF_CH0_INT_RAW: u1,
    +                ///  This raw interrupt bit turns to high level when level 1 fifo of Rx channel 0 is overflow.
    +                INFIFO_OVF_CH0_INT_RAW: u1,
    +                ///  This raw interrupt bit turns to high level when level 1 fifo of Rx channel 0 is underflow.
    +                INFIFO_UDF_CH0_INT_RAW: u1,
    +                ///  This raw interrupt bit turns to high level when level 1 fifo of Tx channel 0 is overflow.
    +                OUTFIFO_OVF_CH0_INT_RAW: u1,
    +                ///  This raw interrupt bit turns to high level when level 1 fifo of Tx channel 0 is underflow.
    +                OUTFIFO_UDF_CH0_INT_RAW: u1,
    +                padding: u19,
    +            }),
    +            ///  DMA_INT_ST_CH0_REG.
    +            INT_ST_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  The raw interrupt status bit for the IN_DONE_CH_INT interrupt.
    +                IN_DONE_CH0_INT_ST: u1,
    +                ///  The raw interrupt status bit for the IN_SUC_EOF_CH_INT interrupt.
    +                IN_SUC_EOF_CH0_INT_ST: u1,
    +                ///  The raw interrupt status bit for the IN_ERR_EOF_CH_INT interrupt.
    +                IN_ERR_EOF_CH0_INT_ST: u1,
    +                ///  The raw interrupt status bit for the OUT_DONE_CH_INT interrupt.
    +                OUT_DONE_CH0_INT_ST: u1,
    +                ///  The raw interrupt status bit for the OUT_EOF_CH_INT interrupt.
    +                OUT_EOF_CH0_INT_ST: u1,
    +                ///  The raw interrupt status bit for the IN_DSCR_ERR_CH_INT interrupt.
    +                IN_DSCR_ERR_CH0_INT_ST: u1,
    +                ///  The raw interrupt status bit for the OUT_DSCR_ERR_CH_INT interrupt.
    +                OUT_DSCR_ERR_CH0_INT_ST: u1,
    +                ///  The raw interrupt status bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    +                IN_DSCR_EMPTY_CH0_INT_ST: u1,
    +                ///  The raw interrupt status bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    +                OUT_TOTAL_EOF_CH0_INT_ST: u1,
    +                ///  The raw interrupt status bit for the INFIFO_OVF_L1_CH_INT interrupt.
    +                INFIFO_OVF_CH0_INT_ST: u1,
    +                ///  The raw interrupt status bit for the INFIFO_UDF_L1_CH_INT interrupt.
    +                INFIFO_UDF_CH0_INT_ST: u1,
    +                ///  The raw interrupt status bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    +                OUTFIFO_OVF_CH0_INT_ST: u1,
    +                ///  The raw interrupt status bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    +                OUTFIFO_UDF_CH0_INT_ST: u1,
    +                padding: u19,
    +            }),
    +            ///  DMA_INT_ENA_CH0_REG.
    +            INT_ENA_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  The interrupt enable bit for the IN_DONE_CH_INT interrupt.
    +                IN_DONE_CH0_INT_ENA: u1,
    +                ///  The interrupt enable bit for the IN_SUC_EOF_CH_INT interrupt.
    +                IN_SUC_EOF_CH0_INT_ENA: u1,
    +                ///  The interrupt enable bit for the IN_ERR_EOF_CH_INT interrupt.
    +                IN_ERR_EOF_CH0_INT_ENA: u1,
    +                ///  The interrupt enable bit for the OUT_DONE_CH_INT interrupt.
    +                OUT_DONE_CH0_INT_ENA: u1,
    +                ///  The interrupt enable bit for the OUT_EOF_CH_INT interrupt.
    +                OUT_EOF_CH0_INT_ENA: u1,
    +                ///  The interrupt enable bit for the IN_DSCR_ERR_CH_INT interrupt.
    +                IN_DSCR_ERR_CH0_INT_ENA: u1,
    +                ///  The interrupt enable bit for the OUT_DSCR_ERR_CH_INT interrupt.
    +                OUT_DSCR_ERR_CH0_INT_ENA: u1,
    +                ///  The interrupt enable bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    +                IN_DSCR_EMPTY_CH0_INT_ENA: u1,
    +                ///  The interrupt enable bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    +                OUT_TOTAL_EOF_CH0_INT_ENA: u1,
    +                ///  The interrupt enable bit for the INFIFO_OVF_L1_CH_INT interrupt.
    +                INFIFO_OVF_CH0_INT_ENA: u1,
    +                ///  The interrupt enable bit for the INFIFO_UDF_L1_CH_INT interrupt.
    +                INFIFO_UDF_CH0_INT_ENA: u1,
    +                ///  The interrupt enable bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    +                OUTFIFO_OVF_CH0_INT_ENA: u1,
    +                ///  The interrupt enable bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    +                OUTFIFO_UDF_CH0_INT_ENA: u1,
    +                padding: u19,
    +            }),
    +            ///  DMA_INT_CLR_CH0_REG.
    +            INT_CLR_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  Set this bit to clear the IN_DONE_CH_INT interrupt.
    +                IN_DONE_CH0_INT_CLR: u1,
    +                ///  Set this bit to clear the IN_SUC_EOF_CH_INT interrupt.
    +                IN_SUC_EOF_CH0_INT_CLR: u1,
    +                ///  Set this bit to clear the IN_ERR_EOF_CH_INT interrupt.
    +                IN_ERR_EOF_CH0_INT_CLR: u1,
    +                ///  Set this bit to clear the OUT_DONE_CH_INT interrupt.
    +                OUT_DONE_CH0_INT_CLR: u1,
    +                ///  Set this bit to clear the OUT_EOF_CH_INT interrupt.
    +                OUT_EOF_CH0_INT_CLR: u1,
    +                ///  Set this bit to clear the IN_DSCR_ERR_CH_INT interrupt.
    +                IN_DSCR_ERR_CH0_INT_CLR: u1,
    +                ///  Set this bit to clear the OUT_DSCR_ERR_CH_INT interrupt.
    +                OUT_DSCR_ERR_CH0_INT_CLR: u1,
    +                ///  Set this bit to clear the IN_DSCR_EMPTY_CH_INT interrupt.
    +                IN_DSCR_EMPTY_CH0_INT_CLR: u1,
    +                ///  Set this bit to clear the OUT_TOTAL_EOF_CH_INT interrupt.
    +                OUT_TOTAL_EOF_CH0_INT_CLR: u1,
    +                ///  Set this bit to clear the INFIFO_OVF_L1_CH_INT interrupt.
    +                INFIFO_OVF_CH0_INT_CLR: u1,
    +                ///  Set this bit to clear the INFIFO_UDF_L1_CH_INT interrupt.
    +                INFIFO_UDF_CH0_INT_CLR: u1,
    +                ///  Set this bit to clear the OUTFIFO_OVF_L1_CH_INT interrupt.
    +                OUTFIFO_OVF_CH0_INT_CLR: u1,
    +                ///  Set this bit to clear the OUTFIFO_UDF_L1_CH_INT interrupt.
    +                OUTFIFO_UDF_CH0_INT_CLR: u1,
    +                padding: u19,
    +            }),
    +            ///  DMA_INT_RAW_CH1_REG.
    +            INT_RAW_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 1.
    +                IN_DONE_CH1_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 1. For UHCI0, the raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received and no data error is detected for Rx channel 1.
    +                IN_SUC_EOF_CH1_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when data error is detected only in the case that the peripheral is UHCI0 for Rx channel 1. For other peripherals, this raw interrupt is reserved.
    +                IN_ERR_EOF_CH1_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been transmitted to peripherals for Tx channel 1.
    +                OUT_DONE_CH1_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been read from memory for Tx channel 1.
    +                OUT_EOF_CH1_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when detecting inlink descriptor error, including owner error, the second and third word error of inlink descriptor for Rx channel 1.
    +                IN_DSCR_ERR_CH1_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when detecting outlink descriptor error, including owner error, the second and third word error of outlink descriptor for Tx channel 1.
    +                OUT_DSCR_ERR_CH1_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when Rx buffer pointed by inlink is full and receiving data is not completed, but there is no more inlink for Rx channel 1.
    +                IN_DSCR_EMPTY_CH1_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when data corresponding a outlink (includes one link descriptor or few link descriptors) is transmitted out for Tx channel 1.
    +                OUT_TOTAL_EOF_CH1_INT_RAW: u1,
    +                ///  This raw interrupt bit turns to high level when level 1 fifo of Rx channel 1 is overflow.
    +                INFIFO_OVF_CH1_INT_RAW: u1,
    +                ///  This raw interrupt bit turns to high level when level 1 fifo of Rx channel 1 is underflow.
    +                INFIFO_UDF_CH1_INT_RAW: u1,
    +                ///  This raw interrupt bit turns to high level when level 1 fifo of Tx channel 1 is overflow.
    +                OUTFIFO_OVF_CH1_INT_RAW: u1,
    +                ///  This raw interrupt bit turns to high level when level 1 fifo of Tx channel 1 is underflow.
    +                OUTFIFO_UDF_CH1_INT_RAW: u1,
    +                padding: u19,
    +            }),
    +            ///  DMA_INT_ST_CH1_REG.
    +            INT_ST_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  The raw interrupt status bit for the IN_DONE_CH_INT interrupt.
    +                IN_DONE_CH1_INT_ST: u1,
    +                ///  The raw interrupt status bit for the IN_SUC_EOF_CH_INT interrupt.
    +                IN_SUC_EOF_CH1_INT_ST: u1,
    +                ///  The raw interrupt status bit for the IN_ERR_EOF_CH_INT interrupt.
    +                IN_ERR_EOF_CH1_INT_ST: u1,
    +                ///  The raw interrupt status bit for the OUT_DONE_CH_INT interrupt.
    +                OUT_DONE_CH1_INT_ST: u1,
    +                ///  The raw interrupt status bit for the OUT_EOF_CH_INT interrupt.
    +                OUT_EOF_CH1_INT_ST: u1,
    +                ///  The raw interrupt status bit for the IN_DSCR_ERR_CH_INT interrupt.
    +                IN_DSCR_ERR_CH1_INT_ST: u1,
    +                ///  The raw interrupt status bit for the OUT_DSCR_ERR_CH_INT interrupt.
    +                OUT_DSCR_ERR_CH1_INT_ST: u1,
    +                ///  The raw interrupt status bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    +                IN_DSCR_EMPTY_CH1_INT_ST: u1,
    +                ///  The raw interrupt status bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    +                OUT_TOTAL_EOF_CH1_INT_ST: u1,
    +                ///  The raw interrupt status bit for the INFIFO_OVF_L1_CH_INT interrupt.
    +                INFIFO_OVF_CH1_INT_ST: u1,
    +                ///  The raw interrupt status bit for the INFIFO_UDF_L1_CH_INT interrupt.
    +                INFIFO_UDF_CH1_INT_ST: u1,
    +                ///  The raw interrupt status bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    +                OUTFIFO_OVF_CH1_INT_ST: u1,
    +                ///  The raw interrupt status bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    +                OUTFIFO_UDF_CH1_INT_ST: u1,
    +                padding: u19,
    +            }),
    +            ///  DMA_INT_ENA_CH1_REG.
    +            INT_ENA_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  The interrupt enable bit for the IN_DONE_CH_INT interrupt.
    +                IN_DONE_CH1_INT_ENA: u1,
    +                ///  The interrupt enable bit for the IN_SUC_EOF_CH_INT interrupt.
    +                IN_SUC_EOF_CH1_INT_ENA: u1,
    +                ///  The interrupt enable bit for the IN_ERR_EOF_CH_INT interrupt.
    +                IN_ERR_EOF_CH1_INT_ENA: u1,
    +                ///  The interrupt enable bit for the OUT_DONE_CH_INT interrupt.
    +                OUT_DONE_CH1_INT_ENA: u1,
    +                ///  The interrupt enable bit for the OUT_EOF_CH_INT interrupt.
    +                OUT_EOF_CH1_INT_ENA: u1,
    +                ///  The interrupt enable bit for the IN_DSCR_ERR_CH_INT interrupt.
    +                IN_DSCR_ERR_CH1_INT_ENA: u1,
    +                ///  The interrupt enable bit for the OUT_DSCR_ERR_CH_INT interrupt.
    +                OUT_DSCR_ERR_CH1_INT_ENA: u1,
    +                ///  The interrupt enable bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    +                IN_DSCR_EMPTY_CH1_INT_ENA: u1,
    +                ///  The interrupt enable bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    +                OUT_TOTAL_EOF_CH1_INT_ENA: u1,
    +                ///  The interrupt enable bit for the INFIFO_OVF_L1_CH_INT interrupt.
    +                INFIFO_OVF_CH1_INT_ENA: u1,
    +                ///  The interrupt enable bit for the INFIFO_UDF_L1_CH_INT interrupt.
    +                INFIFO_UDF_CH1_INT_ENA: u1,
    +                ///  The interrupt enable bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    +                OUTFIFO_OVF_CH1_INT_ENA: u1,
    +                ///  The interrupt enable bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    +                OUTFIFO_UDF_CH1_INT_ENA: u1,
    +                padding: u19,
    +            }),
    +            ///  DMA_INT_CLR_CH1_REG.
    +            INT_CLR_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  Set this bit to clear the IN_DONE_CH_INT interrupt.
    +                IN_DONE_CH1_INT_CLR: u1,
    +                ///  Set this bit to clear the IN_SUC_EOF_CH_INT interrupt.
    +                IN_SUC_EOF_CH1_INT_CLR: u1,
    +                ///  Set this bit to clear the IN_ERR_EOF_CH_INT interrupt.
    +                IN_ERR_EOF_CH1_INT_CLR: u1,
    +                ///  Set this bit to clear the OUT_DONE_CH_INT interrupt.
    +                OUT_DONE_CH1_INT_CLR: u1,
    +                ///  Set this bit to clear the OUT_EOF_CH_INT interrupt.
    +                OUT_EOF_CH1_INT_CLR: u1,
    +                ///  Set this bit to clear the IN_DSCR_ERR_CH_INT interrupt.
    +                IN_DSCR_ERR_CH1_INT_CLR: u1,
    +                ///  Set this bit to clear the OUT_DSCR_ERR_CH_INT interrupt.
    +                OUT_DSCR_ERR_CH1_INT_CLR: u1,
    +                ///  Set this bit to clear the IN_DSCR_EMPTY_CH_INT interrupt.
    +                IN_DSCR_EMPTY_CH1_INT_CLR: u1,
    +                ///  Set this bit to clear the OUT_TOTAL_EOF_CH_INT interrupt.
    +                OUT_TOTAL_EOF_CH1_INT_CLR: u1,
    +                ///  Set this bit to clear the INFIFO_OVF_L1_CH_INT interrupt.
    +                INFIFO_OVF_CH1_INT_CLR: u1,
    +                ///  Set this bit to clear the INFIFO_UDF_L1_CH_INT interrupt.
    +                INFIFO_UDF_CH1_INT_CLR: u1,
    +                ///  Set this bit to clear the OUTFIFO_OVF_L1_CH_INT interrupt.
    +                OUTFIFO_OVF_CH1_INT_CLR: u1,
    +                ///  Set this bit to clear the OUTFIFO_UDF_L1_CH_INT interrupt.
    +                OUTFIFO_UDF_CH1_INT_CLR: u1,
    +                padding: u19,
    +            }),
    +            ///  DMA_INT_RAW_CH2_REG.
    +            INT_RAW_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 2.
    +                IN_DONE_CH2_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 2. For UHCI0, the raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received and no data error is detected for Rx channel 2.
    +                IN_SUC_EOF_CH2_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when data error is detected only in the case that the peripheral is UHCI0 for Rx channel 2. For other peripherals, this raw interrupt is reserved.
    +                IN_ERR_EOF_CH2_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been transmitted to peripherals for Tx channel 2.
    +                OUT_DONE_CH2_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been read from memory for Tx channel 2.
    +                OUT_EOF_CH2_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when detecting inlink descriptor error, including owner error, the second and third word error of inlink descriptor for Rx channel 2.
    +                IN_DSCR_ERR_CH2_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when detecting outlink descriptor error, including owner error, the second and third word error of outlink descriptor for Tx channel 2.
    +                OUT_DSCR_ERR_CH2_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when Rx buffer pointed by inlink is full and receiving data is not completed, but there is no more inlink for Rx channel 2.
    +                IN_DSCR_EMPTY_CH2_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when data corresponding a outlink (includes one link descriptor or few link descriptors) is transmitted out for Tx channel 2.
    +                OUT_TOTAL_EOF_CH2_INT_RAW: u1,
    +                ///  This raw interrupt bit turns to high level when level 1 fifo of Rx channel 2 is overflow.
    +                INFIFO_OVF_CH2_INT_RAW: u1,
    +                ///  This raw interrupt bit turns to high level when level 1 fifo of Rx channel 2 is underflow.
    +                INFIFO_UDF_CH2_INT_RAW: u1,
    +                ///  This raw interrupt bit turns to high level when level 1 fifo of Tx channel 2 is overflow.
    +                OUTFIFO_OVF_CH2_INT_RAW: u1,
    +                ///  This raw interrupt bit turns to high level when level 1 fifo of Tx channel 2 is underflow.
    +                OUTFIFO_UDF_CH2_INT_RAW: u1,
    +                padding: u19,
    +            }),
    +            ///  DMA_INT_ST_CH2_REG.
    +            INT_ST_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  The raw interrupt status bit for the IN_DONE_CH_INT interrupt.
    +                IN_DONE_CH2_INT_ST: u1,
    +                ///  The raw interrupt status bit for the IN_SUC_EOF_CH_INT interrupt.
    +                IN_SUC_EOF_CH2_INT_ST: u1,
    +                ///  The raw interrupt status bit for the IN_ERR_EOF_CH_INT interrupt.
    +                IN_ERR_EOF_CH2_INT_ST: u1,
    +                ///  The raw interrupt status bit for the OUT_DONE_CH_INT interrupt.
    +                OUT_DONE_CH2_INT_ST: u1,
    +                ///  The raw interrupt status bit for the OUT_EOF_CH_INT interrupt.
    +                OUT_EOF_CH2_INT_ST: u1,
    +                ///  The raw interrupt status bit for the IN_DSCR_ERR_CH_INT interrupt.
    +                IN_DSCR_ERR_CH2_INT_ST: u1,
    +                ///  The raw interrupt status bit for the OUT_DSCR_ERR_CH_INT interrupt.
    +                OUT_DSCR_ERR_CH2_INT_ST: u1,
    +                ///  The raw interrupt status bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    +                IN_DSCR_EMPTY_CH2_INT_ST: u1,
    +                ///  The raw interrupt status bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    +                OUT_TOTAL_EOF_CH2_INT_ST: u1,
    +                ///  The raw interrupt status bit for the INFIFO_OVF_L1_CH_INT interrupt.
    +                INFIFO_OVF_CH2_INT_ST: u1,
    +                ///  The raw interrupt status bit for the INFIFO_UDF_L1_CH_INT interrupt.
    +                INFIFO_UDF_CH2_INT_ST: u1,
    +                ///  The raw interrupt status bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    +                OUTFIFO_OVF_CH2_INT_ST: u1,
    +                ///  The raw interrupt status bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    +                OUTFIFO_UDF_CH2_INT_ST: u1,
    +                padding: u19,
    +            }),
    +            ///  DMA_INT_ENA_CH2_REG.
    +            INT_ENA_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  The interrupt enable bit for the IN_DONE_CH_INT interrupt.
    +                IN_DONE_CH2_INT_ENA: u1,
    +                ///  The interrupt enable bit for the IN_SUC_EOF_CH_INT interrupt.
    +                IN_SUC_EOF_CH2_INT_ENA: u1,
    +                ///  The interrupt enable bit for the IN_ERR_EOF_CH_INT interrupt.
    +                IN_ERR_EOF_CH2_INT_ENA: u1,
    +                ///  The interrupt enable bit for the OUT_DONE_CH_INT interrupt.
    +                OUT_DONE_CH2_INT_ENA: u1,
    +                ///  The interrupt enable bit for the OUT_EOF_CH_INT interrupt.
    +                OUT_EOF_CH2_INT_ENA: u1,
    +                ///  The interrupt enable bit for the IN_DSCR_ERR_CH_INT interrupt.
    +                IN_DSCR_ERR_CH2_INT_ENA: u1,
    +                ///  The interrupt enable bit for the OUT_DSCR_ERR_CH_INT interrupt.
    +                OUT_DSCR_ERR_CH2_INT_ENA: u1,
    +                ///  The interrupt enable bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    +                IN_DSCR_EMPTY_CH2_INT_ENA: u1,
    +                ///  The interrupt enable bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    +                OUT_TOTAL_EOF_CH2_INT_ENA: u1,
    +                ///  The interrupt enable bit for the INFIFO_OVF_L1_CH_INT interrupt.
    +                INFIFO_OVF_CH2_INT_ENA: u1,
    +                ///  The interrupt enable bit for the INFIFO_UDF_L1_CH_INT interrupt.
    +                INFIFO_UDF_CH2_INT_ENA: u1,
    +                ///  The interrupt enable bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    +                OUTFIFO_OVF_CH2_INT_ENA: u1,
    +                ///  The interrupt enable bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    +                OUTFIFO_UDF_CH2_INT_ENA: u1,
    +                padding: u19,
    +            }),
    +            ///  DMA_INT_CLR_CH2_REG.
    +            INT_CLR_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  Set this bit to clear the IN_DONE_CH_INT interrupt.
    +                IN_DONE_CH2_INT_CLR: u1,
    +                ///  Set this bit to clear the IN_SUC_EOF_CH_INT interrupt.
    +                IN_SUC_EOF_CH2_INT_CLR: u1,
    +                ///  Set this bit to clear the IN_ERR_EOF_CH_INT interrupt.
    +                IN_ERR_EOF_CH2_INT_CLR: u1,
    +                ///  Set this bit to clear the OUT_DONE_CH_INT interrupt.
    +                OUT_DONE_CH2_INT_CLR: u1,
    +                ///  Set this bit to clear the OUT_EOF_CH_INT interrupt.
    +                OUT_EOF_CH2_INT_CLR: u1,
    +                ///  Set this bit to clear the IN_DSCR_ERR_CH_INT interrupt.
    +                IN_DSCR_ERR_CH2_INT_CLR: u1,
    +                ///  Set this bit to clear the OUT_DSCR_ERR_CH_INT interrupt.
    +                OUT_DSCR_ERR_CH2_INT_CLR: u1,
    +                ///  Set this bit to clear the IN_DSCR_EMPTY_CH_INT interrupt.
    +                IN_DSCR_EMPTY_CH2_INT_CLR: u1,
    +                ///  Set this bit to clear the OUT_TOTAL_EOF_CH_INT interrupt.
    +                OUT_TOTAL_EOF_CH2_INT_CLR: u1,
    +                ///  Set this bit to clear the INFIFO_OVF_L1_CH_INT interrupt.
    +                INFIFO_OVF_CH2_INT_CLR: u1,
    +                ///  Set this bit to clear the INFIFO_UDF_L1_CH_INT interrupt.
    +                INFIFO_UDF_CH2_INT_CLR: u1,
    +                ///  Set this bit to clear the OUTFIFO_OVF_L1_CH_INT interrupt.
    +                OUTFIFO_OVF_CH2_INT_CLR: u1,
    +                ///  Set this bit to clear the OUTFIFO_UDF_L1_CH_INT interrupt.
    +                OUTFIFO_UDF_CH2_INT_CLR: u1,
    +                padding: u19,
    +            }),
    +            reserved64: [16]u8,
    +            ///  DMA_AHB_TEST_REG.
    +            AHB_TEST: mmio.Mmio(packed struct(u32) {
    +                ///  reserved
    +                AHB_TESTMODE: u3,
    +                reserved4: u1,
    +                ///  reserved
    +                AHB_TESTADDR: u2,
    +                padding: u26,
    +            }),
    +            ///  DMA_MISC_CONF_REG.
    +            MISC_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  Set this bit, then clear this bit to reset the internal ahb FSM.
    +                AHBM_RST_INTER: u1,
    +                reserved2: u1,
    +                ///  Set this bit to disable priority arbitration function.
    +                ARB_PRI_DIS: u1,
    +                ///  reg_clk_en
    +                CLK_EN: u1,
    +                padding: u28,
    +            }),
    +            ///  DMA_DATE_REG.
    +            DATE: mmio.Mmio(packed struct(u32) {
    +                ///  register version.
    +                DATE: u32,
    +            }),
    +            reserved112: [36]u8,
    +            ///  DMA_IN_CONF0_CH0_REG.
    +            IN_CONF0_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  This bit is used to reset DMA channel 0 Rx FSM and Rx FIFO pointer.
    +                IN_RST_CH0: u1,
    +                ///  reserved
    +                IN_LOOP_TEST_CH0: u1,
    +                ///  Set this bit to 1 to enable INCR burst transfer for Rx channel 0 reading link descriptor when accessing internal SRAM.
    +                INDSCR_BURST_EN_CH0: u1,
    +                ///  Set this bit to 1 to enable INCR burst transfer for Rx channel 0 receiving data when accessing internal SRAM.
    +                IN_DATA_BURST_EN_CH0: u1,
    +                ///  Set this bit 1 to enable automatic transmitting data from memory to memory via DMA.
    +                MEM_TRANS_EN_CH0: u1,
    +                padding: u27,
    +            }),
    +            ///  DMA_IN_CONF1_CH0_REG.
    +            IN_CONF1_CH0: mmio.Mmio(packed struct(u32) {
    +                reserved12: u12,
    +                ///  Set this bit to enable checking the owner attribute of the link descriptor.
    +                IN_CHECK_OWNER_CH0: u1,
    +                padding: u19,
    +            }),
    +            ///  DMA_INFIFO_STATUS_CH0_REG.
    +            INFIFO_STATUS_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  L1 Rx FIFO full signal for Rx channel 0.
    +                INFIFO_FULL_CH0: u1,
    +                ///  L1 Rx FIFO empty signal for Rx channel 0.
    +                INFIFO_EMPTY_CH0: u1,
    +                ///  The register stores the byte number of the data in L1 Rx FIFO for Rx channel 0.
    +                INFIFO_CNT_CH0: u6,
    +                reserved23: u15,
    +                ///  reserved
    +                IN_REMAIN_UNDER_1B_CH0: u1,
    +                ///  reserved
    +                IN_REMAIN_UNDER_2B_CH0: u1,
    +                ///  reserved
    +                IN_REMAIN_UNDER_3B_CH0: u1,
    +                ///  reserved
    +                IN_REMAIN_UNDER_4B_CH0: u1,
    +                ///  reserved
    +                IN_BUF_HUNGRY_CH0: u1,
    +                padding: u4,
    +            }),
    +            ///  DMA_IN_POP_CH0_REG.
    +            IN_POP_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the data popping from DMA FIFO.
    +                INFIFO_RDATA_CH0: u12,
    +                ///  Set this bit to pop data from DMA FIFO.
    +                INFIFO_POP_CH0: u1,
    +                padding: u19,
    +            }),
    +            ///  DMA_IN_LINK_CH0_REG.
    +            IN_LINK_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the 20 least significant bits of the first inlink descriptor's address.
    +                INLINK_ADDR_CH0: u20,
    +                ///  Set this bit to return to current inlink descriptor's address, when there are some errors in current receiving data.
    +                INLINK_AUTO_RET_CH0: u1,
    +                ///  Set this bit to stop dealing with the inlink descriptors.
    +                INLINK_STOP_CH0: u1,
    +                ///  Set this bit to start dealing with the inlink descriptors.
    +                INLINK_START_CH0: u1,
    +                ///  Set this bit to mount a new inlink descriptor.
    +                INLINK_RESTART_CH0: u1,
    +                ///  1: the inlink descriptor's FSM is in idle state. 0: the inlink descriptor's FSM is working.
    +                INLINK_PARK_CH0: u1,
    +                padding: u7,
    +            }),
    +            ///  DMA_IN_STATE_CH0_REG.
    +            IN_STATE_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the current inlink descriptor's address.
    +                INLINK_DSCR_ADDR_CH0: u18,
    +                ///  reserved
    +                IN_DSCR_STATE_CH0: u2,
    +                ///  reserved
    +                IN_STATE_CH0: u3,
    +                padding: u9,
    +            }),
    +            ///  DMA_IN_SUC_EOF_DES_ADDR_CH0_REG.
    +            IN_SUC_EOF_DES_ADDR_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the address of the inlink descriptor when the EOF bit in this descriptor is 1.
    +                IN_SUC_EOF_DES_ADDR_CH0: u32,
    +            }),
    +            ///  DMA_IN_ERR_EOF_DES_ADDR_CH0_REG.
    +            IN_ERR_EOF_DES_ADDR_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the address of the inlink descriptor when there are some errors in current receiving data. Only used when peripheral is UHCI0.
    +                IN_ERR_EOF_DES_ADDR_CH0: u32,
    +            }),
    +            ///  DMA_IN_DSCR_CH0_REG.
    +            IN_DSCR_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  The address of the current inlink descriptor x.
    +                INLINK_DSCR_CH0: u32,
    +            }),
    +            ///  DMA_IN_DSCR_BF0_CH0_REG.
    +            IN_DSCR_BF0_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  The address of the last inlink descriptor x-1.
    +                INLINK_DSCR_BF0_CH0: u32,
    +            }),
    +            ///  DMA_IN_DSCR_BF1_CH0_REG.
    +            IN_DSCR_BF1_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  The address of the second-to-last inlink descriptor x-2.
    +                INLINK_DSCR_BF1_CH0: u32,
    +            }),
    +            ///  DMA_IN_PRI_CH0_REG.
    +            IN_PRI_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  The priority of Rx channel 0. The larger of the value, the higher of the priority.
    +                RX_PRI_CH0: u4,
    +                padding: u28,
    +            }),
    +            ///  DMA_IN_PERI_SEL_CH0_REG.
    +            IN_PERI_SEL_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  This register is used to select peripheral for Rx channel 0. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.
    +                PERI_IN_SEL_CH0: u6,
    +                padding: u26,
    +            }),
    +            reserved208: [44]u8,
    +            ///  DMA_OUT_CONF0_CH0_REG.
    +            OUT_CONF0_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  This bit is used to reset DMA channel 0 Tx FSM and Tx FIFO pointer.
    +                OUT_RST_CH0: u1,
    +                ///  reserved
    +                OUT_LOOP_TEST_CH0: u1,
    +                ///  Set this bit to enable automatic outlink-writeback when all the data in tx buffer has been transmitted.
    +                OUT_AUTO_WRBACK_CH0: u1,
    +                ///  EOF flag generation mode when transmitting data. 1: EOF flag for Tx channel 0 is generated when data need to transmit has been popped from FIFO in DMA
    +                OUT_EOF_MODE_CH0: u1,
    +                ///  Set this bit to 1 to enable INCR burst transfer for Tx channel 0 reading link descriptor when accessing internal SRAM.
    +                OUTDSCR_BURST_EN_CH0: u1,
    +                ///  Set this bit to 1 to enable INCR burst transfer for Tx channel 0 transmitting data when accessing internal SRAM.
    +                OUT_DATA_BURST_EN_CH0: u1,
    +                padding: u26,
    +            }),
    +            ///  DMA_OUT_CONF1_CH0_REG.
    +            OUT_CONF1_CH0: mmio.Mmio(packed struct(u32) {
    +                reserved12: u12,
    +                ///  Set this bit to enable checking the owner attribute of the link descriptor.
    +                OUT_CHECK_OWNER_CH0: u1,
    +                padding: u19,
    +            }),
    +            ///  DMA_OUTFIFO_STATUS_CH0_REG.
    +            OUTFIFO_STATUS_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  L1 Tx FIFO full signal for Tx channel 0.
    +                OUTFIFO_FULL_CH0: u1,
    +                ///  L1 Tx FIFO empty signal for Tx channel 0.
    +                OUTFIFO_EMPTY_CH0: u1,
    +                ///  The register stores the byte number of the data in L1 Tx FIFO for Tx channel 0.
    +                OUTFIFO_CNT_CH0: u6,
    +                reserved23: u15,
    +                ///  reserved
    +                OUT_REMAIN_UNDER_1B_CH0: u1,
    +                ///  reserved
    +                OUT_REMAIN_UNDER_2B_CH0: u1,
    +                ///  reserved
    +                OUT_REMAIN_UNDER_3B_CH0: u1,
    +                ///  reserved
    +                OUT_REMAIN_UNDER_4B_CH0: u1,
    +                padding: u5,
    +            }),
    +            ///  DMA_OUT_PUSH_CH0_REG.
    +            OUT_PUSH_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the data that need to be pushed into DMA FIFO.
    +                OUTFIFO_WDATA_CH0: u9,
    +                ///  Set this bit to push data into DMA FIFO.
    +                OUTFIFO_PUSH_CH0: u1,
    +                padding: u22,
    +            }),
    +            ///  DMA_OUT_LINK_CH0_REG.
    +            OUT_LINK_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the 20 least significant bits of the first outlink descriptor's address.
    +                OUTLINK_ADDR_CH0: u20,
    +                ///  Set this bit to stop dealing with the outlink descriptors.
    +                OUTLINK_STOP_CH0: u1,
    +                ///  Set this bit to start dealing with the outlink descriptors.
    +                OUTLINK_START_CH0: u1,
    +                ///  Set this bit to restart a new outlink from the last address.
    +                OUTLINK_RESTART_CH0: u1,
    +                ///  1: the outlink descriptor's FSM is in idle state. 0: the outlink descriptor's FSM is working.
    +                OUTLINK_PARK_CH0: u1,
    +                padding: u8,
    +            }),
    +            ///  DMA_OUT_STATE_CH0_REG.
    +            OUT_STATE_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the current outlink descriptor's address.
    +                OUTLINK_DSCR_ADDR_CH0: u18,
    +                ///  reserved
    +                OUT_DSCR_STATE_CH0: u2,
    +                ///  reserved
    +                OUT_STATE_CH0: u3,
    +                padding: u9,
    +            }),
    +            ///  DMA_OUT_EOF_DES_ADDR_CH0_REG.
    +            OUT_EOF_DES_ADDR_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the address of the outlink descriptor when the EOF bit in this descriptor is 1.
    +                OUT_EOF_DES_ADDR_CH0: u32,
    +            }),
    +            ///  DMA_OUT_EOF_BFR_DES_ADDR_CH0_REG.
    +            OUT_EOF_BFR_DES_ADDR_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the address of the outlink descriptor before the last outlink descriptor.
    +                OUT_EOF_BFR_DES_ADDR_CH0: u32,
    +            }),
    +            ///  DMA_OUT_DSCR_CH0_REG.
    +            OUT_DSCR_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  The address of the current outlink descriptor y.
    +                OUTLINK_DSCR_CH0: u32,
    +            }),
    +            ///  DMA_OUT_DSCR_BF0_CH0_REG.
    +            OUT_DSCR_BF0_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  The address of the last outlink descriptor y-1.
    +                OUTLINK_DSCR_BF0_CH0: u32,
    +            }),
    +            ///  DMA_OUT_DSCR_BF1_CH0_REG.
    +            OUT_DSCR_BF1_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  The address of the second-to-last inlink descriptor x-2.
    +                OUTLINK_DSCR_BF1_CH0: u32,
    +            }),
    +            ///  DMA_OUT_PRI_CH0_REG.
    +            OUT_PRI_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  The priority of Tx channel 0. The larger of the value, the higher of the priority.
    +                TX_PRI_CH0: u4,
    +                padding: u28,
    +            }),
    +            ///  DMA_OUT_PERI_SEL_CH0_REG.
    +            OUT_PERI_SEL_CH0: mmio.Mmio(packed struct(u32) {
    +                ///  This register is used to select peripheral for Tx channel 0. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.
    +                PERI_OUT_SEL_CH0: u6,
    +                padding: u26,
    +            }),
    +            reserved304: [44]u8,
    +            ///  DMA_IN_CONF0_CH1_REG.
    +            IN_CONF0_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  This bit is used to reset DMA channel 1 Rx FSM and Rx FIFO pointer.
    +                IN_RST_CH1: u1,
    +                ///  reserved
    +                IN_LOOP_TEST_CH1: u1,
    +                ///  Set this bit to 1 to enable INCR burst transfer for Rx channel 1 reading link descriptor when accessing internal SRAM.
    +                INDSCR_BURST_EN_CH1: u1,
    +                ///  Set this bit to 1 to enable INCR burst transfer for Rx channel 1 receiving data when accessing internal SRAM.
    +                IN_DATA_BURST_EN_CH1: u1,
    +                ///  Set this bit 1 to enable automatic transmitting data from memory to memory via DMA.
    +                MEM_TRANS_EN_CH1: u1,
    +                padding: u27,
    +            }),
    +            ///  DMA_IN_CONF1_CH1_REG.
    +            IN_CONF1_CH1: mmio.Mmio(packed struct(u32) {
    +                reserved12: u12,
    +                ///  Set this bit to enable checking the owner attribute of the link descriptor.
    +                IN_CHECK_OWNER_CH1: u1,
    +                padding: u19,
    +            }),
    +            ///  DMA_INFIFO_STATUS_CH1_REG.
    +            INFIFO_STATUS_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  L1 Rx FIFO full signal for Rx channel 1.
    +                INFIFO_FULL_CH1: u1,
    +                ///  L1 Rx FIFO empty signal for Rx channel 1.
    +                INFIFO_EMPTY_CH1: u1,
    +                ///  The register stores the byte number of the data in L1 Rx FIFO for Rx channel 1.
    +                INFIFO_CNT_CH1: u6,
    +                reserved23: u15,
    +                ///  reserved
    +                IN_REMAIN_UNDER_1B_CH1: u1,
    +                ///  reserved
    +                IN_REMAIN_UNDER_2B_CH1: u1,
    +                ///  reserved
    +                IN_REMAIN_UNDER_3B_CH1: u1,
    +                ///  reserved
    +                IN_REMAIN_UNDER_4B_CH1: u1,
    +                ///  reserved
    +                IN_BUF_HUNGRY_CH1: u1,
    +                padding: u4,
    +            }),
    +            ///  DMA_IN_POP_CH1_REG.
    +            IN_POP_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the data popping from DMA FIFO.
    +                INFIFO_RDATA_CH1: u12,
    +                ///  Set this bit to pop data from DMA FIFO.
    +                INFIFO_POP_CH1: u1,
    +                padding: u19,
    +            }),
    +            ///  DMA_IN_LINK_CH1_REG.
    +            IN_LINK_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the 20 least significant bits of the first inlink descriptor's address.
    +                INLINK_ADDR_CH1: u20,
    +                ///  Set this bit to return to current inlink descriptor's address, when there are some errors in current receiving data.
    +                INLINK_AUTO_RET_CH1: u1,
    +                ///  Set this bit to stop dealing with the inlink descriptors.
    +                INLINK_STOP_CH1: u1,
    +                ///  Set this bit to start dealing with the inlink descriptors.
    +                INLINK_START_CH1: u1,
    +                ///  Set this bit to mount a new inlink descriptor.
    +                INLINK_RESTART_CH1: u1,
    +                ///  1: the inlink descriptor's FSM is in idle state. 0: the inlink descriptor's FSM is working.
    +                INLINK_PARK_CH1: u1,
    +                padding: u7,
    +            }),
    +            ///  DMA_IN_STATE_CH1_REG.
    +            IN_STATE_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the current inlink descriptor's address.
    +                INLINK_DSCR_ADDR_CH1: u18,
    +                ///  reserved
    +                IN_DSCR_STATE_CH1: u2,
    +                ///  reserved
    +                IN_STATE_CH1: u3,
    +                padding: u9,
    +            }),
    +            ///  DMA_IN_SUC_EOF_DES_ADDR_CH1_REG.
    +            IN_SUC_EOF_DES_ADDR_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the address of the inlink descriptor when the EOF bit in this descriptor is 1.
    +                IN_SUC_EOF_DES_ADDR_CH1: u32,
    +            }),
    +            ///  DMA_IN_ERR_EOF_DES_ADDR_CH1_REG.
    +            IN_ERR_EOF_DES_ADDR_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the address of the inlink descriptor when there are some errors in current receiving data. Only used when peripheral is UHCI0.
    +                IN_ERR_EOF_DES_ADDR_CH1: u32,
    +            }),
    +            ///  DMA_IN_DSCR_CH1_REG.
    +            IN_DSCR_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  The address of the current inlink descriptor x.
    +                INLINK_DSCR_CH1: u32,
    +            }),
    +            ///  DMA_IN_DSCR_BF0_CH1_REG.
    +            IN_DSCR_BF0_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  The address of the last inlink descriptor x-1.
    +                INLINK_DSCR_BF0_CH1: u32,
    +            }),
    +            ///  DMA_IN_DSCR_BF1_CH1_REG.
    +            IN_DSCR_BF1_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  The address of the second-to-last inlink descriptor x-2.
    +                INLINK_DSCR_BF1_CH1: u32,
    +            }),
    +            ///  DMA_IN_PRI_CH1_REG.
    +            IN_PRI_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  The priority of Rx channel 1. The larger of the value, the higher of the priority.
    +                RX_PRI_CH1: u4,
    +                padding: u28,
    +            }),
    +            ///  DMA_IN_PERI_SEL_CH1_REG.
    +            IN_PERI_SEL_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  This register is used to select peripheral for Rx channel 1. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.
    +                PERI_IN_SEL_CH1: u6,
    +                padding: u26,
    +            }),
    +            reserved400: [44]u8,
    +            ///  DMA_OUT_CONF0_CH1_REG.
    +            OUT_CONF0_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  This bit is used to reset DMA channel 1 Tx FSM and Tx FIFO pointer.
    +                OUT_RST_CH1: u1,
    +                ///  reserved
    +                OUT_LOOP_TEST_CH1: u1,
    +                ///  Set this bit to enable automatic outlink-writeback when all the data in tx buffer has been transmitted.
    +                OUT_AUTO_WRBACK_CH1: u1,
    +                ///  EOF flag generation mode when transmitting data. 1: EOF flag for Tx channel 1 is generated when data need to transmit has been popped from FIFO in DMA
    +                OUT_EOF_MODE_CH1: u1,
    +                ///  Set this bit to 1 to enable INCR burst transfer for Tx channel 1 reading link descriptor when accessing internal SRAM.
    +                OUTDSCR_BURST_EN_CH1: u1,
    +                ///  Set this bit to 1 to enable INCR burst transfer for Tx channel 1 transmitting data when accessing internal SRAM.
    +                OUT_DATA_BURST_EN_CH1: u1,
    +                padding: u26,
    +            }),
    +            ///  DMA_OUT_CONF1_CH1_REG.
    +            OUT_CONF1_CH1: mmio.Mmio(packed struct(u32) {
    +                reserved12: u12,
    +                ///  Set this bit to enable checking the owner attribute of the link descriptor.
    +                OUT_CHECK_OWNER_CH1: u1,
    +                padding: u19,
    +            }),
    +            ///  DMA_OUTFIFO_STATUS_CH1_REG.
    +            OUTFIFO_STATUS_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  L1 Tx FIFO full signal for Tx channel 1.
    +                OUTFIFO_FULL_CH1: u1,
    +                ///  L1 Tx FIFO empty signal for Tx channel 1.
    +                OUTFIFO_EMPTY_CH1: u1,
    +                ///  The register stores the byte number of the data in L1 Tx FIFO for Tx channel 1.
    +                OUTFIFO_CNT_CH1: u6,
    +                reserved23: u15,
    +                ///  reserved
    +                OUT_REMAIN_UNDER_1B_CH1: u1,
    +                ///  reserved
    +                OUT_REMAIN_UNDER_2B_CH1: u1,
    +                ///  reserved
    +                OUT_REMAIN_UNDER_3B_CH1: u1,
    +                ///  reserved
    +                OUT_REMAIN_UNDER_4B_CH1: u1,
    +                padding: u5,
    +            }),
    +            ///  DMA_OUT_PUSH_CH1_REG.
    +            OUT_PUSH_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the data that need to be pushed into DMA FIFO.
    +                OUTFIFO_WDATA_CH1: u9,
    +                ///  Set this bit to push data into DMA FIFO.
    +                OUTFIFO_PUSH_CH1: u1,
    +                padding: u22,
    +            }),
    +            ///  DMA_OUT_LINK_CH1_REG.
    +            OUT_LINK_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the 20 least significant bits of the first outlink descriptor's address.
    +                OUTLINK_ADDR_CH1: u20,
    +                ///  Set this bit to stop dealing with the outlink descriptors.
    +                OUTLINK_STOP_CH1: u1,
    +                ///  Set this bit to start dealing with the outlink descriptors.
    +                OUTLINK_START_CH1: u1,
    +                ///  Set this bit to restart a new outlink from the last address.
    +                OUTLINK_RESTART_CH1: u1,
    +                ///  1: the outlink descriptor's FSM is in idle state. 0: the outlink descriptor's FSM is working.
    +                OUTLINK_PARK_CH1: u1,
    +                padding: u8,
    +            }),
    +            ///  DMA_OUT_STATE_CH1_REG.
    +            OUT_STATE_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the current outlink descriptor's address.
    +                OUTLINK_DSCR_ADDR_CH1: u18,
    +                ///  reserved
    +                OUT_DSCR_STATE_CH1: u2,
    +                ///  reserved
    +                OUT_STATE_CH1: u3,
    +                padding: u9,
    +            }),
    +            ///  DMA_OUT_EOF_DES_ADDR_CH1_REG.
    +            OUT_EOF_DES_ADDR_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the address of the outlink descriptor when the EOF bit in this descriptor is 1.
    +                OUT_EOF_DES_ADDR_CH1: u32,
    +            }),
    +            ///  DMA_OUT_EOF_BFR_DES_ADDR_CH1_REG.
    +            OUT_EOF_BFR_DES_ADDR_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the address of the outlink descriptor before the last outlink descriptor.
    +                OUT_EOF_BFR_DES_ADDR_CH1: u32,
    +            }),
    +            ///  DMA_OUT_DSCR_CH1_REG.
    +            OUT_DSCR_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  The address of the current outlink descriptor y.
    +                OUTLINK_DSCR_CH1: u32,
    +            }),
    +            ///  DMA_OUT_DSCR_BF0_CH1_REG.
    +            OUT_DSCR_BF0_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  The address of the last outlink descriptor y-1.
    +                OUTLINK_DSCR_BF0_CH1: u32,
    +            }),
    +            ///  DMA_OUT_DSCR_BF1_CH1_REG.
    +            OUT_DSCR_BF1_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  The address of the second-to-last inlink descriptor x-2.
    +                OUTLINK_DSCR_BF1_CH1: u32,
    +            }),
    +            ///  DMA_OUT_PRI_CH1_REG.
    +            OUT_PRI_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  The priority of Tx channel 1. The larger of the value, the higher of the priority.
    +                TX_PRI_CH1: u4,
    +                padding: u28,
    +            }),
    +            ///  DMA_OUT_PERI_SEL_CH1_REG.
    +            OUT_PERI_SEL_CH1: mmio.Mmio(packed struct(u32) {
    +                ///  This register is used to select peripheral for Tx channel 1. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.
    +                PERI_OUT_SEL_CH1: u6,
    +                padding: u26,
    +            }),
    +            reserved496: [44]u8,
    +            ///  DMA_IN_CONF0_CH2_REG.
    +            IN_CONF0_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  This bit is used to reset DMA channel 2 Rx FSM and Rx FIFO pointer.
    +                IN_RST_CH2: u1,
    +                ///  reserved
    +                IN_LOOP_TEST_CH2: u1,
    +                ///  Set this bit to 1 to enable INCR burst transfer for Rx channel 2 reading link descriptor when accessing internal SRAM.
    +                INDSCR_BURST_EN_CH2: u1,
    +                ///  Set this bit to 1 to enable INCR burst transfer for Rx channel 2 receiving data when accessing internal SRAM.
    +                IN_DATA_BURST_EN_CH2: u1,
    +                ///  Set this bit 1 to enable automatic transmitting data from memory to memory via DMA.
    +                MEM_TRANS_EN_CH2: u1,
    +                padding: u27,
    +            }),
    +            ///  DMA_IN_CONF1_CH2_REG.
    +            IN_CONF1_CH2: mmio.Mmio(packed struct(u32) {
    +                reserved12: u12,
    +                ///  Set this bit to enable checking the owner attribute of the link descriptor.
    +                IN_CHECK_OWNER_CH2: u1,
    +                padding: u19,
    +            }),
    +            ///  DMA_INFIFO_STATUS_CH2_REG.
    +            INFIFO_STATUS_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  L1 Rx FIFO full signal for Rx channel 2.
    +                INFIFO_FULL_CH2: u1,
    +                ///  L1 Rx FIFO empty signal for Rx channel 2.
    +                INFIFO_EMPTY_CH2: u1,
    +                ///  The register stores the byte number of the data in L1 Rx FIFO for Rx channel 2.
    +                INFIFO_CNT_CH2: u6,
    +                reserved23: u15,
    +                ///  reserved
    +                IN_REMAIN_UNDER_1B_CH2: u1,
    +                ///  reserved
    +                IN_REMAIN_UNDER_2B_CH2: u1,
    +                ///  reserved
    +                IN_REMAIN_UNDER_3B_CH2: u1,
    +                ///  reserved
    +                IN_REMAIN_UNDER_4B_CH2: u1,
    +                ///  reserved
    +                IN_BUF_HUNGRY_CH2: u1,
    +                padding: u4,
    +            }),
    +            ///  DMA_IN_POP_CH2_REG.
    +            IN_POP_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the data popping from DMA FIFO.
    +                INFIFO_RDATA_CH2: u12,
    +                ///  Set this bit to pop data from DMA FIFO.
    +                INFIFO_POP_CH2: u1,
    +                padding: u19,
    +            }),
    +            ///  DMA_IN_LINK_CH2_REG.
    +            IN_LINK_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the 20 least significant bits of the first inlink descriptor's address.
    +                INLINK_ADDR_CH2: u20,
    +                ///  Set this bit to return to current inlink descriptor's address, when there are some errors in current receiving data.
    +                INLINK_AUTO_RET_CH2: u1,
    +                ///  Set this bit to stop dealing with the inlink descriptors.
    +                INLINK_STOP_CH2: u1,
    +                ///  Set this bit to start dealing with the inlink descriptors.
    +                INLINK_START_CH2: u1,
    +                ///  Set this bit to mount a new inlink descriptor.
    +                INLINK_RESTART_CH2: u1,
    +                ///  1: the inlink descriptor's FSM is in idle state. 0: the inlink descriptor's FSM is working.
    +                INLINK_PARK_CH2: u1,
    +                padding: u7,
    +            }),
    +            ///  DMA_IN_STATE_CH2_REG.
    +            IN_STATE_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the current inlink descriptor's address.
    +                INLINK_DSCR_ADDR_CH2: u18,
    +                ///  reserved
    +                IN_DSCR_STATE_CH2: u2,
    +                ///  reserved
    +                IN_STATE_CH2: u3,
    +                padding: u9,
    +            }),
    +            ///  DMA_IN_SUC_EOF_DES_ADDR_CH2_REG.
    +            IN_SUC_EOF_DES_ADDR_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the address of the inlink descriptor when the EOF bit in this descriptor is 1.
    +                IN_SUC_EOF_DES_ADDR_CH2: u32,
    +            }),
    +            ///  DMA_IN_ERR_EOF_DES_ADDR_CH2_REG.
    +            IN_ERR_EOF_DES_ADDR_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the address of the inlink descriptor when there are some errors in current receiving data. Only used when peripheral is UHCI0.
    +                IN_ERR_EOF_DES_ADDR_CH2: u32,
    +            }),
    +            ///  DMA_IN_DSCR_CH2_REG.
    +            IN_DSCR_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  The address of the current inlink descriptor x.
    +                INLINK_DSCR_CH2: u32,
    +            }),
    +            ///  DMA_IN_DSCR_BF0_CH2_REG.
    +            IN_DSCR_BF0_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  The address of the last inlink descriptor x-1.
    +                INLINK_DSCR_BF0_CH2: u32,
    +            }),
    +            ///  DMA_IN_DSCR_BF1_CH2_REG.
    +            IN_DSCR_BF1_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  The address of the second-to-last inlink descriptor x-2.
    +                INLINK_DSCR_BF1_CH2: u32,
    +            }),
    +            ///  DMA_IN_PRI_CH2_REG.
    +            IN_PRI_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  The priority of Rx channel 2. The larger of the value, the higher of the priority.
    +                RX_PRI_CH2: u4,
    +                padding: u28,
    +            }),
    +            ///  DMA_IN_PERI_SEL_CH2_REG.
    +            IN_PERI_SEL_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  This register is used to select peripheral for Rx channel 2. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.
    +                PERI_IN_SEL_CH2: u6,
    +                padding: u26,
    +            }),
    +            reserved592: [44]u8,
    +            ///  DMA_OUT_CONF0_CH2_REG.
    +            OUT_CONF0_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  This bit is used to reset DMA channel 2 Tx FSM and Tx FIFO pointer.
    +                OUT_RST_CH2: u1,
    +                ///  reserved
    +                OUT_LOOP_TEST_CH2: u1,
    +                ///  Set this bit to enable automatic outlink-writeback when all the data in tx buffer has been transmitted.
    +                OUT_AUTO_WRBACK_CH2: u1,
    +                ///  EOF flag generation mode when transmitting data. 1: EOF flag for Tx channel 2 is generated when data need to transmit has been popped from FIFO in DMA
    +                OUT_EOF_MODE_CH2: u1,
    +                ///  Set this bit to 1 to enable INCR burst transfer for Tx channel 2 reading link descriptor when accessing internal SRAM.
    +                OUTDSCR_BURST_EN_CH2: u1,
    +                ///  Set this bit to 1 to enable INCR burst transfer for Tx channel 2 transmitting data when accessing internal SRAM.
    +                OUT_DATA_BURST_EN_CH2: u1,
    +                padding: u26,
    +            }),
    +            ///  DMA_OUT_CONF1_CH2_REG.
    +            OUT_CONF1_CH2: mmio.Mmio(packed struct(u32) {
    +                reserved12: u12,
    +                ///  Set this bit to enable checking the owner attribute of the link descriptor.
    +                OUT_CHECK_OWNER_CH2: u1,
    +                padding: u19,
    +            }),
    +            ///  DMA_OUTFIFO_STATUS_CH2_REG.
    +            OUTFIFO_STATUS_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  L1 Tx FIFO full signal for Tx channel 2.
    +                OUTFIFO_FULL_CH2: u1,
    +                ///  L1 Tx FIFO empty signal for Tx channel 2.
    +                OUTFIFO_EMPTY_CH2: u1,
    +                ///  The register stores the byte number of the data in L1 Tx FIFO for Tx channel 2.
    +                OUTFIFO_CNT_CH2: u6,
    +                reserved23: u15,
    +                ///  reserved
    +                OUT_REMAIN_UNDER_1B_CH2: u1,
    +                ///  reserved
    +                OUT_REMAIN_UNDER_2B_CH2: u1,
    +                ///  reserved
    +                OUT_REMAIN_UNDER_3B_CH2: u1,
    +                ///  reserved
    +                OUT_REMAIN_UNDER_4B_CH2: u1,
    +                padding: u5,
    +            }),
    +            ///  DMA_OUT_PUSH_CH2_REG.
    +            OUT_PUSH_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the data that need to be pushed into DMA FIFO.
    +                OUTFIFO_WDATA_CH2: u9,
    +                ///  Set this bit to push data into DMA FIFO.
    +                OUTFIFO_PUSH_CH2: u1,
    +                padding: u22,
    +            }),
    +            ///  DMA_OUT_LINK_CH2_REG.
    +            OUT_LINK_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the 20 least significant bits of the first outlink descriptor's address.
    +                OUTLINK_ADDR_CH2: u20,
    +                ///  Set this bit to stop dealing with the outlink descriptors.
    +                OUTLINK_STOP_CH2: u1,
    +                ///  Set this bit to start dealing with the outlink descriptors.
    +                OUTLINK_START_CH2: u1,
    +                ///  Set this bit to restart a new outlink from the last address.
    +                OUTLINK_RESTART_CH2: u1,
    +                ///  1: the outlink descriptor's FSM is in idle state. 0: the outlink descriptor's FSM is working.
    +                OUTLINK_PARK_CH2: u1,
    +                padding: u8,
    +            }),
    +            ///  DMA_OUT_STATE_CH2_REG.
    +            OUT_STATE_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the current outlink descriptor's address.
    +                OUTLINK_DSCR_ADDR_CH2: u18,
    +                ///  reserved
    +                OUT_DSCR_STATE_CH2: u2,
    +                ///  reserved
    +                OUT_STATE_CH2: u3,
    +                padding: u9,
    +            }),
    +            ///  DMA_OUT_EOF_DES_ADDR_CH2_REG.
    +            OUT_EOF_DES_ADDR_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the address of the outlink descriptor when the EOF bit in this descriptor is 1.
    +                OUT_EOF_DES_ADDR_CH2: u32,
    +            }),
    +            ///  DMA_OUT_EOF_BFR_DES_ADDR_CH2_REG.
    +            OUT_EOF_BFR_DES_ADDR_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the address of the outlink descriptor before the last outlink descriptor.
    +                OUT_EOF_BFR_DES_ADDR_CH2: u32,
    +            }),
    +            ///  DMA_OUT_DSCR_CH2_REG.
    +            OUT_DSCR_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  The address of the current outlink descriptor y.
    +                OUTLINK_DSCR_CH2: u32,
    +            }),
    +            ///  DMA_OUT_DSCR_BF0_CH2_REG.
    +            OUT_DSCR_BF0_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  The address of the last outlink descriptor y-1.
    +                OUTLINK_DSCR_BF0_CH2: u32,
    +            }),
    +            ///  DMA_OUT_DSCR_BF1_CH2_REG.
    +            OUT_DSCR_BF1_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  The address of the second-to-last inlink descriptor x-2.
    +                OUTLINK_DSCR_BF1_CH2: u32,
    +            }),
    +            ///  DMA_OUT_PRI_CH2_REG.
    +            OUT_PRI_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  The priority of Tx channel 2. The larger of the value, the higher of the priority.
    +                TX_PRI_CH2: u4,
    +                padding: u28,
    +            }),
    +            ///  DMA_OUT_PERI_SEL_CH2_REG.
    +            OUT_PERI_SEL_CH2: mmio.Mmio(packed struct(u32) {
    +                ///  This register is used to select peripheral for Tx channel 2. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.
    +                PERI_OUT_SEL_CH2: u6,
    +                padding: u26,
    +            }),
    +        };
    +
    +        ///  Digital Signature
    +        pub const DS = extern struct {
    +            ///  memory that stores Y
    +            Y_MEM: [512]u8,
    +            ///  memory that stores M
    +            M_MEM: [512]u8,
    +            ///  memory that stores Rb
    +            RB_MEM: [512]u8,
    +            ///  memory that stores BOX
    +            BOX_MEM: [48]u8,
    +            reserved2048: [464]u8,
    +            ///  memory that stores X
    +            X_MEM: [512]u8,
    +            ///  memory that stores Z
    +            Z_MEM: [512]u8,
    +            reserved3584: [512]u8,
    +            ///  DS start control register
    +            SET_START: mmio.Mmio(packed struct(u32) {
    +                ///  set this bit to start DS operation.
    +                SET_START: u1,
    +                padding: u31,
    +            }),
    +            ///  DS continue control register
    +            SET_CONTINUE: mmio.Mmio(packed struct(u32) {
    +                ///  set this bit to continue DS operation.
    +                SET_CONTINUE: u1,
    +                padding: u31,
    +            }),
    +            ///  DS finish control register
    +            SET_FINISH: mmio.Mmio(packed struct(u32) {
    +                ///  Set this bit to finish DS process.
    +                SET_FINISH: u1,
    +                padding: u31,
    +            }),
    +            ///  DS query busy register
    +            QUERY_BUSY: mmio.Mmio(packed struct(u32) {
    +                ///  digital signature state. 1'b0: idle, 1'b1: busy
    +                QUERY_BUSY: u1,
    +                padding: u31,
    +            }),
    +            ///  DS query key-wrong counter register
    +            QUERY_KEY_WRONG: mmio.Mmio(packed struct(u32) {
    +                ///  digital signature key wrong counter
    +                QUERY_KEY_WRONG: u4,
    +                padding: u28,
    +            }),
    +            ///  DS query check result register
    +            QUERY_CHECK: mmio.Mmio(packed struct(u32) {
    +                ///  MD checkout result. 1'b0: MD check pass, 1'b1: MD check fail
    +                MD_ERROR: u1,
    +                ///  padding checkout result. 1'b0: a good padding, 1'b1: a bad padding
    +                PADDING_BAD: u1,
    +                padding: u30,
    +            }),
    +            reserved3616: [8]u8,
    +            ///  DS version control register
    +            DATE: mmio.Mmio(packed struct(u32) {
    +                ///  ds version information
    +                DATE: u30,
    +                padding: u2,
    +            }),
    +        };
    +
    +        ///  eFuse Controller
    +        pub const EFUSE = extern struct {
    +            ///  Register 0 that stores data to be programmed.
    +            PGM_DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  The content of the 0th 32-bit data to be programmed.
    +                PGM_DATA_0: u32,
    +            }),
    +            ///  Register 1 that stores data to be programmed.
    +            PGM_DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  The content of the 1st 32-bit data to be programmed.
    +                PGM_DATA_1: u32,
    +            }),
    +            ///  Register 2 that stores data to be programmed.
    +            PGM_DATA2: mmio.Mmio(packed struct(u32) {
    +                ///  The content of the 2nd 32-bit data to be programmed.
    +                PGM_DATA_2: u32,
    +            }),
    +            ///  Register 3 that stores data to be programmed.
    +            PGM_DATA3: mmio.Mmio(packed struct(u32) {
    +                ///  The content of the 3rd 32-bit data to be programmed.
    +                PGM_DATA_3: u32,
    +            }),
    +            ///  Register 4 that stores data to be programmed.
    +            PGM_DATA4: mmio.Mmio(packed struct(u32) {
    +                ///  The content of the 4th 32-bit data to be programmed.
    +                PGM_DATA_4: u32,
    +            }),
    +            ///  Register 5 that stores data to be programmed.
    +            PGM_DATA5: mmio.Mmio(packed struct(u32) {
    +                ///  The content of the 5th 32-bit data to be programmed.
    +                PGM_DATA_5: u32,
    +            }),
    +            ///  Register 6 that stores data to be programmed.
    +            PGM_DATA6: mmio.Mmio(packed struct(u32) {
    +                ///  The content of the 6th 32-bit data to be programmed.
    +                PGM_DATA_6: u32,
    +            }),
    +            ///  Register 7 that stores data to be programmed.
    +            PGM_DATA7: mmio.Mmio(packed struct(u32) {
    +                ///  The content of the 7th 32-bit data to be programmed.
    +                PGM_DATA_7: u32,
    +            }),
    +            ///  Register 0 that stores the RS code to be programmed.
    +            PGM_CHECK_VALUE0: mmio.Mmio(packed struct(u32) {
    +                ///  The content of the 0th 32-bit RS code to be programmed.
    +                PGM_RS_DATA_0: u32,
    +            }),
    +            ///  Register 1 that stores the RS code to be programmed.
    +            PGM_CHECK_VALUE1: mmio.Mmio(packed struct(u32) {
    +                ///  The content of the 1st 32-bit RS code to be programmed.
    +                PGM_RS_DATA_1: u32,
    +            }),
    +            ///  Register 2 that stores the RS code to be programmed.
    +            PGM_CHECK_VALUE2: mmio.Mmio(packed struct(u32) {
    +                ///  The content of the 2nd 32-bit RS code to be programmed.
    +                PGM_RS_DATA_2: u32,
    +            }),
    +            ///  BLOCK0 data register 0.
    +            RD_WR_DIS: mmio.Mmio(packed struct(u32) {
    +                ///  Disable programming of individual eFuses.
    +                WR_DIS: u32,
    +            }),
    +            ///  BLOCK0 data register 1.
    +            RD_REPEAT_DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Set this bit to disable reading from BlOCK4-10.
    +                RD_DIS: u7,
    +                ///  Set this bit to disable boot from RTC RAM.
    +                DIS_RTC_RAM_BOOT: u1,
    +                ///  Set this bit to disable Icache.
    +                DIS_ICACHE: u1,
    +                ///  Set this bit to disable function of usb switch to jtag in module of usb device.
    +                DIS_USB_JTAG: u1,
    +                ///  Set this bit to disable Icache in download mode (boot_mode[3:0] is 0, 1, 2, 3, 6, 7).
    +                DIS_DOWNLOAD_ICACHE: u1,
    +                ///  Set this bit to disable usb device.
    +                DIS_USB_DEVICE: u1,
    +                ///  Set this bit to disable the function that forces chip into download mode.
    +                DIS_FORCE_DOWNLOAD: u1,
    +                ///  Reserved (used for four backups method).
    +                RPT4_RESERVED6: u1,
    +                ///  Set this bit to disable CAN function.
    +                DIS_CAN: u1,
    +                ///  Set this bit to enable selection between usb_to_jtag and pad_to_jtag through strapping gpio10 when both reg_dis_usb_jtag and reg_dis_pad_jtag are equal to 0.
    +                JTAG_SEL_ENABLE: u1,
    +                ///  Set these bits to disable JTAG in the soft way (odd number 1 means disable ). JTAG can be enabled in HMAC module.
    +                SOFT_DIS_JTAG: u3,
    +                ///  Set this bit to disable JTAG in the hard way. JTAG is disabled permanently.
    +                DIS_PAD_JTAG: u1,
    +                ///  Set this bit to disable flash encryption when in download boot modes.
    +                DIS_DOWNLOAD_MANUAL_ENCRYPT: u1,
    +                ///  Controls single-end input threshold vrefh, 1.76 V to 2 V with step of 80 mV, stored in eFuse.
    +                USB_DREFH: u2,
    +                ///  Controls single-end input threshold vrefl, 0.8 V to 1.04 V with step of 80 mV, stored in eFuse.
    +                USB_DREFL: u2,
    +                ///  Set this bit to exchange USB D+ and D- pins.
    +                USB_EXCHG_PINS: u1,
    +                ///  Set this bit to vdd spi pin function as gpio.
    +                VDD_SPI_AS_GPIO: u1,
    +                ///  Enable btlc gpio.
    +                BTLC_GPIO_ENABLE: u2,
    +                ///  Set this bit to enable power glitch function.
    +                POWERGLITCH_EN: u1,
    +                ///  Sample delay configuration of power glitch.
    +                POWER_GLITCH_DSENSE: u2,
    +            }),
    +            ///  BLOCK0 data register 2.
    +            RD_REPEAT_DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Reserved (used for four backups method).
    +                RPT4_RESERVED2: u16,
    +                ///  Selects RTC watchdog timeout threshold, in unit of slow clock cycle. 0: 40000. 1: 80000. 2: 160000. 3:320000.
    +                WDT_DELAY_SEL: u2,
    +                ///  Set this bit to enable SPI boot encrypt/decrypt. Odd number of 1: enable. even number of 1: disable.
    +                SPI_BOOT_CRYPT_CNT: u3,
    +                ///  Set this bit to enable revoking first secure boot key.
    +                SECURE_BOOT_KEY_REVOKE0: u1,
    +                ///  Set this bit to enable revoking second secure boot key.
    +                SECURE_BOOT_KEY_REVOKE1: u1,
    +                ///  Set this bit to enable revoking third secure boot key.
    +                SECURE_BOOT_KEY_REVOKE2: u1,
    +                ///  Purpose of Key0.
    +                KEY_PURPOSE_0: u4,
    +                ///  Purpose of Key1.
    +                KEY_PURPOSE_1: u4,
    +            }),
    +            ///  BLOCK0 data register 3.
    +            RD_REPEAT_DATA2: mmio.Mmio(packed struct(u32) {
    +                ///  Purpose of Key2.
    +                KEY_PURPOSE_2: u4,
    +                ///  Purpose of Key3.
    +                KEY_PURPOSE_3: u4,
    +                ///  Purpose of Key4.
    +                KEY_PURPOSE_4: u4,
    +                ///  Purpose of Key5.
    +                KEY_PURPOSE_5: u4,
    +                ///  Reserved (used for four backups method).
    +                RPT4_RESERVED3: u4,
    +                ///  Set this bit to enable secure boot.
    +                SECURE_BOOT_EN: u1,
    +                ///  Set this bit to enable revoking aggressive secure boot.
    +                SECURE_BOOT_AGGRESSIVE_REVOKE: u1,
    +                ///  Reserved (used for four backups method).
    +                RPT4_RESERVED0: u6,
    +                ///  Configures flash waiting time after power-up, in unit of ms. If the value is less than 15, the waiting time is the configurable value; Otherwise, the waiting time is twice the configurable value.
    +                FLASH_TPUW: u4,
    +            }),
    +            ///  BLOCK0 data register 4.
    +            RD_REPEAT_DATA3: mmio.Mmio(packed struct(u32) {
    +                ///  Set this bit to disable download mode (boot_mode[3:0] = 0, 1, 2, 3, 6, 7).
    +                DIS_DOWNLOAD_MODE: u1,
    +                ///  Set this bit to disable Legacy SPI boot mode (boot_mode[3:0] = 4).
    +                DIS_LEGACY_SPI_BOOT: u1,
    +                ///  Selectes the default UART print channel. 0: UART0. 1: UART1.
    +                UART_PRINT_CHANNEL: u1,
    +                ///  Set ECC mode in ROM, 0: ROM would Enable Flash ECC 16to18 byte mode. 1:ROM would use 16to17 byte mode.
    +                FLASH_ECC_MODE: u1,
    +                ///  Set this bit to disable UART download mode through USB.
    +                DIS_USB_DOWNLOAD_MODE: u1,
    +                ///  Set this bit to enable secure UART download mode.
    +                ENABLE_SECURITY_DOWNLOAD: u1,
    +                ///  Set the default UARTboot message output mode. 00: Enabled. 01: Enabled when GPIO8 is low at reset. 10: Enabled when GPIO8 is high at reset. 11:disabled.
    +                UART_PRINT_CONTROL: u2,
    +                ///  GPIO33-GPIO37 power supply selection in ROM code. 0: VDD3P3_CPU. 1: VDD_SPI.
    +                PIN_POWER_SELECTION: u1,
    +                ///  Set the maximum lines of SPI flash. 0: four lines. 1: eight lines.
    +                FLASH_TYPE: u1,
    +                ///  Set Flash page size.
    +                FLASH_PAGE_SIZE: u2,
    +                ///  Set 1 to enable ECC for flash boot.
    +                FLASH_ECC_EN: u1,
    +                ///  Set this bit to force ROM code to send a resume command during SPI boot.
    +                FORCE_SEND_RESUME: u1,
    +                ///  Secure version (used by ESP-IDF anti-rollback feature).
    +                SECURE_VERSION: u16,
    +                ///  Reserved (used for four backups method).
    +                RPT4_RESERVED1: u2,
    +            }),
    +            ///  BLOCK0 data register 5.
    +            RD_REPEAT_DATA4: mmio.Mmio(packed struct(u32) {
    +                ///  Reserved (used for four backups method).
    +                RPT4_RESERVED4: u24,
    +                padding: u8,
    +            }),
    +            ///  BLOCK1 data register 0.
    +            RD_MAC_SPI_SYS_0: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the low 32 bits of MAC address.
    +                MAC_0: u32,
    +            }),
    +            ///  BLOCK1 data register 1.
    +            RD_MAC_SPI_SYS_1: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the high 16 bits of MAC address.
    +                MAC_1: u16,
    +                ///  Stores the zeroth part of SPI_PAD_CONF.
    +                SPI_PAD_CONF_0: u16,
    +            }),
    +            ///  BLOCK1 data register 2.
    +            RD_MAC_SPI_SYS_2: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the first part of SPI_PAD_CONF.
    +                SPI_PAD_CONF_1: u32,
    +            }),
    +            ///  BLOCK1 data register 3.
    +            RD_MAC_SPI_SYS_3: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the second part of SPI_PAD_CONF.
    +                SPI_PAD_CONF_2: u18,
    +                ///  Stores the fist 14 bits of the zeroth part of system data.
    +                SYS_DATA_PART0_0: u14,
    +            }),
    +            ///  BLOCK1 data register 4.
    +            RD_MAC_SPI_SYS_4: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the fist 32 bits of the zeroth part of system data.
    +                SYS_DATA_PART0_1: u32,
    +            }),
    +            ///  BLOCK1 data register 5.
    +            RD_MAC_SPI_SYS_5: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the second 32 bits of the zeroth part of system data.
    +                SYS_DATA_PART0_2: u32,
    +            }),
    +            ///  Register 0 of BLOCK2 (system).
    +            RD_SYS_PART1_DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the zeroth 32 bits of the first part of system data.
    +                SYS_DATA_PART1_0: u32,
    +            }),
    +            ///  Register 1 of BLOCK2 (system).
    +            RD_SYS_PART1_DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the first 32 bits of the first part of system data.
    +                SYS_DATA_PART1_1: u32,
    +            }),
    +            ///  Register 2 of BLOCK2 (system).
    +            RD_SYS_PART1_DATA2: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the second 32 bits of the first part of system data.
    +                SYS_DATA_PART1_2: u32,
    +            }),
    +            ///  Register 3 of BLOCK2 (system).
    +            RD_SYS_PART1_DATA3: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the third 32 bits of the first part of system data.
    +                SYS_DATA_PART1_3: u32,
    +            }),
    +            ///  Register 4 of BLOCK2 (system).
    +            RD_SYS_PART1_DATA4: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the fourth 32 bits of the first part of system data.
    +                SYS_DATA_PART1_4: u32,
    +            }),
    +            ///  Register 5 of BLOCK2 (system).
    +            RD_SYS_PART1_DATA5: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the fifth 32 bits of the first part of system data.
    +                SYS_DATA_PART1_5: u32,
    +            }),
    +            ///  Register 6 of BLOCK2 (system).
    +            RD_SYS_PART1_DATA6: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the sixth 32 bits of the first part of system data.
    +                SYS_DATA_PART1_6: u32,
    +            }),
    +            ///  Register 7 of BLOCK2 (system).
    +            RD_SYS_PART1_DATA7: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the seventh 32 bits of the first part of system data.
    +                SYS_DATA_PART1_7: u32,
    +            }),
    +            ///  Register 0 of BLOCK3 (user).
    +            RD_USR_DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the zeroth 32 bits of BLOCK3 (user).
    +                USR_DATA0: u32,
    +            }),
    +            ///  Register 1 of BLOCK3 (user).
    +            RD_USR_DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the first 32 bits of BLOCK3 (user).
    +                USR_DATA1: u32,
    +            }),
    +            ///  Register 2 of BLOCK3 (user).
    +            RD_USR_DATA2: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the second 32 bits of BLOCK3 (user).
    +                USR_DATA2: u32,
    +            }),
    +            ///  Register 3 of BLOCK3 (user).
    +            RD_USR_DATA3: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the third 32 bits of BLOCK3 (user).
    +                USR_DATA3: u32,
    +            }),
    +            ///  Register 4 of BLOCK3 (user).
    +            RD_USR_DATA4: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the fourth 32 bits of BLOCK3 (user).
    +                USR_DATA4: u32,
    +            }),
    +            ///  Register 5 of BLOCK3 (user).
    +            RD_USR_DATA5: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the fifth 32 bits of BLOCK3 (user).
    +                USR_DATA5: u32,
    +            }),
    +            ///  Register 6 of BLOCK3 (user).
    +            RD_USR_DATA6: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the sixth 32 bits of BLOCK3 (user).
    +                USR_DATA6: u32,
    +            }),
    +            ///  Register 7 of BLOCK3 (user).
    +            RD_USR_DATA7: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the seventh 32 bits of BLOCK3 (user).
    +                USR_DATA7: u32,
    +            }),
    +            ///  Register 0 of BLOCK4 (KEY0).
    +            RD_KEY0_DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the zeroth 32 bits of KEY0.
    +                KEY0_DATA0: u32,
    +            }),
    +            ///  Register 1 of BLOCK4 (KEY0).
    +            RD_KEY0_DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the first 32 bits of KEY0.
    +                KEY0_DATA1: u32,
    +            }),
    +            ///  Register 2 of BLOCK4 (KEY0).
    +            RD_KEY0_DATA2: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the second 32 bits of KEY0.
    +                KEY0_DATA2: u32,
    +            }),
    +            ///  Register 3 of BLOCK4 (KEY0).
    +            RD_KEY0_DATA3: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the third 32 bits of KEY0.
    +                KEY0_DATA3: u32,
    +            }),
    +            ///  Register 4 of BLOCK4 (KEY0).
    +            RD_KEY0_DATA4: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the fourth 32 bits of KEY0.
    +                KEY0_DATA4: u32,
    +            }),
    +            ///  Register 5 of BLOCK4 (KEY0).
    +            RD_KEY0_DATA5: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the fifth 32 bits of KEY0.
    +                KEY0_DATA5: u32,
    +            }),
    +            ///  Register 6 of BLOCK4 (KEY0).
    +            RD_KEY0_DATA6: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the sixth 32 bits of KEY0.
    +                KEY0_DATA6: u32,
    +            }),
    +            ///  Register 7 of BLOCK4 (KEY0).
    +            RD_KEY0_DATA7: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the seventh 32 bits of KEY0.
    +                KEY0_DATA7: u32,
    +            }),
    +            ///  Register 0 of BLOCK5 (KEY1).
    +            RD_KEY1_DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the zeroth 32 bits of KEY1.
    +                KEY1_DATA0: u32,
    +            }),
    +            ///  Register 1 of BLOCK5 (KEY1).
    +            RD_KEY1_DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the first 32 bits of KEY1.
    +                KEY1_DATA1: u32,
    +            }),
    +            ///  Register 2 of BLOCK5 (KEY1).
    +            RD_KEY1_DATA2: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the second 32 bits of KEY1.
    +                KEY1_DATA2: u32,
    +            }),
    +            ///  Register 3 of BLOCK5 (KEY1).
    +            RD_KEY1_DATA3: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the third 32 bits of KEY1.
    +                KEY1_DATA3: u32,
    +            }),
    +            ///  Register 4 of BLOCK5 (KEY1).
    +            RD_KEY1_DATA4: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the fourth 32 bits of KEY1.
    +                KEY1_DATA4: u32,
    +            }),
    +            ///  Register 5 of BLOCK5 (KEY1).
    +            RD_KEY1_DATA5: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the fifth 32 bits of KEY1.
    +                KEY1_DATA5: u32,
    +            }),
    +            ///  Register 6 of BLOCK5 (KEY1).
    +            RD_KEY1_DATA6: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the sixth 32 bits of KEY1.
    +                KEY1_DATA6: u32,
    +            }),
    +            ///  Register 7 of BLOCK5 (KEY1).
    +            RD_KEY1_DATA7: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the seventh 32 bits of KEY1.
    +                KEY1_DATA7: u32,
    +            }),
    +            ///  Register 0 of BLOCK6 (KEY2).
    +            RD_KEY2_DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the zeroth 32 bits of KEY2.
    +                KEY2_DATA0: u32,
    +            }),
    +            ///  Register 1 of BLOCK6 (KEY2).
    +            RD_KEY2_DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the first 32 bits of KEY2.
    +                KEY2_DATA1: u32,
    +            }),
    +            ///  Register 2 of BLOCK6 (KEY2).
    +            RD_KEY2_DATA2: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the second 32 bits of KEY2.
    +                KEY2_DATA2: u32,
    +            }),
    +            ///  Register 3 of BLOCK6 (KEY2).
    +            RD_KEY2_DATA3: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the third 32 bits of KEY2.
    +                KEY2_DATA3: u32,
    +            }),
    +            ///  Register 4 of BLOCK6 (KEY2).
    +            RD_KEY2_DATA4: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the fourth 32 bits of KEY2.
    +                KEY2_DATA4: u32,
    +            }),
    +            ///  Register 5 of BLOCK6 (KEY2).
    +            RD_KEY2_DATA5: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the fifth 32 bits of KEY2.
    +                KEY2_DATA5: u32,
    +            }),
    +            ///  Register 6 of BLOCK6 (KEY2).
    +            RD_KEY2_DATA6: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the sixth 32 bits of KEY2.
    +                KEY2_DATA6: u32,
    +            }),
    +            ///  Register 7 of BLOCK6 (KEY2).
    +            RD_KEY2_DATA7: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the seventh 32 bits of KEY2.
    +                KEY2_DATA7: u32,
    +            }),
    +            ///  Register 0 of BLOCK7 (KEY3).
    +            RD_KEY3_DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the zeroth 32 bits of KEY3.
    +                KEY3_DATA0: u32,
    +            }),
    +            ///  Register 1 of BLOCK7 (KEY3).
    +            RD_KEY3_DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the first 32 bits of KEY3.
    +                KEY3_DATA1: u32,
    +            }),
    +            ///  Register 2 of BLOCK7 (KEY3).
    +            RD_KEY3_DATA2: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the second 32 bits of KEY3.
    +                KEY3_DATA2: u32,
    +            }),
    +            ///  Register 3 of BLOCK7 (KEY3).
    +            RD_KEY3_DATA3: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the third 32 bits of KEY3.
    +                KEY3_DATA3: u32,
    +            }),
    +            ///  Register 4 of BLOCK7 (KEY3).
    +            RD_KEY3_DATA4: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the fourth 32 bits of KEY3.
    +                KEY3_DATA4: u32,
    +            }),
    +            ///  Register 5 of BLOCK7 (KEY3).
    +            RD_KEY3_DATA5: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the fifth 32 bits of KEY3.
    +                KEY3_DATA5: u32,
    +            }),
    +            ///  Register 6 of BLOCK7 (KEY3).
    +            RD_KEY3_DATA6: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the sixth 32 bits of KEY3.
    +                KEY3_DATA6: u32,
    +            }),
    +            ///  Register 7 of BLOCK7 (KEY3).
    +            RD_KEY3_DATA7: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the seventh 32 bits of KEY3.
    +                KEY3_DATA7: u32,
    +            }),
    +            ///  Register 0 of BLOCK8 (KEY4).
    +            RD_KEY4_DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the zeroth 32 bits of KEY4.
    +                KEY4_DATA0: u32,
    +            }),
    +            ///  Register 1 of BLOCK8 (KEY4).
    +            RD_KEY4_DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the first 32 bits of KEY4.
    +                KEY4_DATA1: u32,
    +            }),
    +            ///  Register 2 of BLOCK8 (KEY4).
    +            RD_KEY4_DATA2: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the second 32 bits of KEY4.
    +                KEY4_DATA2: u32,
    +            }),
    +            ///  Register 3 of BLOCK8 (KEY4).
    +            RD_KEY4_DATA3: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the third 32 bits of KEY4.
    +                KEY4_DATA3: u32,
    +            }),
    +            ///  Register 4 of BLOCK8 (KEY4).
    +            RD_KEY4_DATA4: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the fourth 32 bits of KEY4.
    +                KEY4_DATA4: u32,
    +            }),
    +            ///  Register 5 of BLOCK8 (KEY4).
    +            RD_KEY4_DATA5: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the fifth 32 bits of KEY4.
    +                KEY4_DATA5: u32,
    +            }),
    +            ///  Register 6 of BLOCK8 (KEY4).
    +            RD_KEY4_DATA6: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the sixth 32 bits of KEY4.
    +                KEY4_DATA6: u32,
    +            }),
    +            ///  Register 7 of BLOCK8 (KEY4).
    +            RD_KEY4_DATA7: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the seventh 32 bits of KEY4.
    +                KEY4_DATA7: u32,
    +            }),
    +            ///  Register 0 of BLOCK9 (KEY5).
    +            RD_KEY5_DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the zeroth 32 bits of KEY5.
    +                KEY5_DATA0: u32,
    +            }),
    +            ///  Register 1 of BLOCK9 (KEY5).
    +            RD_KEY5_DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the first 32 bits of KEY5.
    +                KEY5_DATA1: u32,
    +            }),
    +            ///  Register 2 of BLOCK9 (KEY5).
    +            RD_KEY5_DATA2: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the second 32 bits of KEY5.
    +                KEY5_DATA2: u32,
    +            }),
    +            ///  Register 3 of BLOCK9 (KEY5).
    +            RD_KEY5_DATA3: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the third 32 bits of KEY5.
    +                KEY5_DATA3: u32,
    +            }),
    +            ///  Register 4 of BLOCK9 (KEY5).
    +            RD_KEY5_DATA4: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the fourth 32 bits of KEY5.
    +                KEY5_DATA4: u32,
    +            }),
    +            ///  Register 5 of BLOCK9 (KEY5).
    +            RD_KEY5_DATA5: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the fifth 32 bits of KEY5.
    +                KEY5_DATA5: u32,
    +            }),
    +            ///  Register 6 of BLOCK9 (KEY5).
    +            RD_KEY5_DATA6: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the sixth 32 bits of KEY5.
    +                KEY5_DATA6: u32,
    +            }),
    +            ///  Register 7 of BLOCK9 (KEY5).
    +            RD_KEY5_DATA7: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the seventh 32 bits of KEY5.
    +                KEY5_DATA7: u32,
    +            }),
    +            ///  Register 0 of BLOCK10 (system).
    +            RD_SYS_PART2_DATA0: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the 0th 32 bits of the 2nd part of system data.
    +                SYS_DATA_PART2_0: u32,
    +            }),
    +            ///  Register 1 of BLOCK9 (KEY5).
    +            RD_SYS_PART2_DATA1: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the 1st 32 bits of the 2nd part of system data.
    +                SYS_DATA_PART2_1: u32,
    +            }),
    +            ///  Register 2 of BLOCK10 (system).
    +            RD_SYS_PART2_DATA2: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the 2nd 32 bits of the 2nd part of system data.
    +                SYS_DATA_PART2_2: u32,
    +            }),
    +            ///  Register 3 of BLOCK10 (system).
    +            RD_SYS_PART2_DATA3: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the 3rd 32 bits of the 2nd part of system data.
    +                SYS_DATA_PART2_3: u32,
    +            }),
    +            ///  Register 4 of BLOCK10 (system).
    +            RD_SYS_PART2_DATA4: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the 4th 32 bits of the 2nd part of system data.
    +                SYS_DATA_PART2_4: u32,
    +            }),
    +            ///  Register 5 of BLOCK10 (system).
    +            RD_SYS_PART2_DATA5: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the 5th 32 bits of the 2nd part of system data.
    +                SYS_DATA_PART2_5: u32,
    +            }),
    +            ///  Register 6 of BLOCK10 (system).
    +            RD_SYS_PART2_DATA6: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the 6th 32 bits of the 2nd part of system data.
    +                SYS_DATA_PART2_6: u32,
    +            }),
    +            ///  Register 7 of BLOCK10 (system).
    +            RD_SYS_PART2_DATA7: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the 7th 32 bits of the 2nd part of system data.
    +                SYS_DATA_PART2_7: u32,
    +            }),
    +            ///  Programming error record register 0 of BLOCK0.
    +            RD_REPEAT_ERR0: mmio.Mmio(packed struct(u32) {
    +                ///  If any bit in RD_DIS is 1, then it indicates a programming error.
    +                RD_DIS_ERR: u7,
    +                ///  If DIS_RTC_RAM_BOOT is 1, then it indicates a programming error.
    +                DIS_RTC_RAM_BOOT_ERR: u1,
    +                ///  If DIS_ICACHE is 1, then it indicates a programming error.
    +                DIS_ICACHE_ERR: u1,
    +                ///  If DIS_USB_JTAG is 1, then it indicates a programming error.
    +                DIS_USB_JTAG_ERR: u1,
    +                ///  If DIS_DOWNLOAD_ICACHE is 1, then it indicates a programming error.
    +                DIS_DOWNLOAD_ICACHE_ERR: u1,
    +                ///  If DIS_USB_DEVICE is 1, then it indicates a programming error.
    +                DIS_USB_DEVICE_ERR: u1,
    +                ///  If DIS_FORCE_DOWNLOAD is 1, then it indicates a programming error.
    +                DIS_FORCE_DOWNLOAD_ERR: u1,
    +                ///  Reserved.
    +                RPT4_RESERVED6_ERR: u1,
    +                ///  If DIS_CAN is 1, then it indicates a programming error.
    +                DIS_CAN_ERR: u1,
    +                ///  If JTAG_SEL_ENABLE is 1, then it indicates a programming error.
    +                JTAG_SEL_ENABLE_ERR: u1,
    +                ///  If SOFT_DIS_JTAG is 1, then it indicates a programming error.
    +                SOFT_DIS_JTAG_ERR: u3,
    +                ///  If DIS_PAD_JTAG is 1, then it indicates a programming error.
    +                DIS_PAD_JTAG_ERR: u1,
    +                ///  If DIS_DOWNLOAD_MANUAL_ENCRYPT is 1, then it indicates a programming error.
    +                DIS_DOWNLOAD_MANUAL_ENCRYPT_ERR: u1,
    +                ///  If any bit in USB_DREFH is 1, then it indicates a programming error.
    +                USB_DREFH_ERR: u2,
    +                ///  If any bit in USB_DREFL is 1, then it indicates a programming error.
    +                USB_DREFL_ERR: u2,
    +                ///  If USB_EXCHG_PINS is 1, then it indicates a programming error.
    +                USB_EXCHG_PINS_ERR: u1,
    +                ///  If VDD_SPI_AS_GPIO is 1, then it indicates a programming error.
    +                VDD_SPI_AS_GPIO_ERR: u1,
    +                ///  If any bit in BTLC_GPIO_ENABLE is 1, then it indicates a programming error.
    +                BTLC_GPIO_ENABLE_ERR: u2,
    +                ///  If POWERGLITCH_EN is 1, then it indicates a programming error.
    +                POWERGLITCH_EN_ERR: u1,
    +                ///  If any bit in POWER_GLITCH_DSENSE is 1, then it indicates a programming error.
    +                POWER_GLITCH_DSENSE_ERR: u2,
    +            }),
    +            ///  Programming error record register 1 of BLOCK0.
    +            RD_REPEAT_ERR1: mmio.Mmio(packed struct(u32) {
    +                ///  Reserved.
    +                RPT4_RESERVED2_ERR: u16,
    +                ///  If any bit in WDT_DELAY_SEL is 1, then it indicates a programming error.
    +                WDT_DELAY_SEL_ERR: u2,
    +                ///  If any bit in SPI_BOOT_CRYPT_CNT is 1, then it indicates a programming error.
    +                SPI_BOOT_CRYPT_CNT_ERR: u3,
    +                ///  If SECURE_BOOT_KEY_REVOKE0 is 1, then it indicates a programming error.
    +                SECURE_BOOT_KEY_REVOKE0_ERR: u1,
    +                ///  If SECURE_BOOT_KEY_REVOKE1 is 1, then it indicates a programming error.
    +                SECURE_BOOT_KEY_REVOKE1_ERR: u1,
    +                ///  If SECURE_BOOT_KEY_REVOKE2 is 1, then it indicates a programming error.
    +                SECURE_BOOT_KEY_REVOKE2_ERR: u1,
    +                ///  If any bit in KEY_PURPOSE_0 is 1, then it indicates a programming error.
    +                KEY_PURPOSE_0_ERR: u4,
    +                ///  If any bit in KEY_PURPOSE_1 is 1, then it indicates a programming error.
    +                KEY_PURPOSE_1_ERR: u4,
    +            }),
    +            ///  Programming error record register 2 of BLOCK0.
    +            RD_REPEAT_ERR2: mmio.Mmio(packed struct(u32) {
    +                ///  If any bit in KEY_PURPOSE_2 is 1, then it indicates a programming error.
    +                KEY_PURPOSE_2_ERR: u4,
    +                ///  If any bit in KEY_PURPOSE_3 is 1, then it indicates a programming error.
    +                KEY_PURPOSE_3_ERR: u4,
    +                ///  If any bit in KEY_PURPOSE_4 is 1, then it indicates a programming error.
    +                KEY_PURPOSE_4_ERR: u4,
    +                ///  If any bit in KEY_PURPOSE_5 is 1, then it indicates a programming error.
    +                KEY_PURPOSE_5_ERR: u4,
    +                ///  Reserved.
    +                RPT4_RESERVED3_ERR: u4,
    +                ///  If SECURE_BOOT_EN is 1, then it indicates a programming error.
    +                SECURE_BOOT_EN_ERR: u1,
    +                ///  If SECURE_BOOT_AGGRESSIVE_REVOKE is 1, then it indicates a programming error.
    +                SECURE_BOOT_AGGRESSIVE_REVOKE_ERR: u1,
    +                ///  Reserved.
    +                RPT4_RESERVED0_ERR: u6,
    +                ///  If any bit in FLASH_TPUM is 1, then it indicates a programming error.
    +                FLASH_TPUW_ERR: u4,
    +            }),
    +            ///  Programming error record register 3 of BLOCK0.
    +            RD_REPEAT_ERR3: mmio.Mmio(packed struct(u32) {
    +                ///  If DIS_DOWNLOAD_MODE is 1, then it indicates a programming error.
    +                DIS_DOWNLOAD_MODE_ERR: u1,
    +                ///  If DIS_LEGACY_SPI_BOOT is 1, then it indicates a programming error.
    +                DIS_LEGACY_SPI_BOOT_ERR: u1,
    +                ///  If UART_PRINT_CHANNEL is 1, then it indicates a programming error.
    +                UART_PRINT_CHANNEL_ERR: u1,
    +                ///  If FLASH_ECC_MODE is 1, then it indicates a programming error.
    +                FLASH_ECC_MODE_ERR: u1,
    +                ///  If DIS_USB_DOWNLOAD_MODE is 1, then it indicates a programming error.
    +                DIS_USB_DOWNLOAD_MODE_ERR: u1,
    +                ///  If ENABLE_SECURITY_DOWNLOAD is 1, then it indicates a programming error.
    +                ENABLE_SECURITY_DOWNLOAD_ERR: u1,
    +                ///  If any bit in UART_PRINT_CONTROL is 1, then it indicates a programming error.
    +                UART_PRINT_CONTROL_ERR: u2,
    +                ///  If PIN_POWER_SELECTION is 1, then it indicates a programming error.
    +                PIN_POWER_SELECTION_ERR: u1,
    +                ///  If FLASH_TYPE is 1, then it indicates a programming error.
    +                FLASH_TYPE_ERR: u1,
    +                ///  If any bits in FLASH_PAGE_SIZE is 1, then it indicates a programming error.
    +                FLASH_PAGE_SIZE_ERR: u2,
    +                ///  If FLASH_ECC_EN_ERR is 1, then it indicates a programming error.
    +                FLASH_ECC_EN_ERR: u1,
    +                ///  If FORCE_SEND_RESUME is 1, then it indicates a programming error.
    +                FORCE_SEND_RESUME_ERR: u1,
    +                ///  If any bit in SECURE_VERSION is 1, then it indicates a programming error.
    +                SECURE_VERSION_ERR: u16,
    +                ///  Reserved.
    +                RPT4_RESERVED1_ERR: u2,
    +            }),
    +            reserved400: [4]u8,
    +            ///  Programming error record register 4 of BLOCK0.
    +            RD_REPEAT_ERR4: mmio.Mmio(packed struct(u32) {
    +                ///  Reserved.
    +                RPT4_RESERVED4_ERR: u24,
    +                padding: u8,
    +            }),
    +            reserved448: [44]u8,
    +            ///  Programming error record register 0 of BLOCK1-10.
    +            RD_RS_ERR0: mmio.Mmio(packed struct(u32) {
    +                ///  The value of this signal means the number of error bytes.
    +                MAC_SPI_8M_ERR_NUM: u3,
    +                ///  0: Means no failure and that the data of MAC_SPI_8M is reliable 1: Means that programming user data failed and the number of error bytes is over 6.
    +                MAC_SPI_8M_FAIL: u1,
    +                ///  The value of this signal means the number of error bytes.
    +                SYS_PART1_NUM: u3,
    +                ///  0: Means no failure and that the data of system part1 is reliable 1: Means that programming user data failed and the number of error bytes is over 6.
    +                SYS_PART1_FAIL: u1,
    +                ///  The value of this signal means the number of error bytes.
    +                USR_DATA_ERR_NUM: u3,
    +                ///  0: Means no failure and that the user data is reliable 1: Means that programming user data failed and the number of error bytes is over 6.
    +                USR_DATA_FAIL: u1,
    +                ///  The value of this signal means the number of error bytes.
    +                KEY0_ERR_NUM: u3,
    +                ///  0: Means no failure and that the data of key0 is reliable 1: Means that programming key0 failed and the number of error bytes is over 6.
    +                KEY0_FAIL: u1,
    +                ///  The value of this signal means the number of error bytes.
    +                KEY1_ERR_NUM: u3,
    +                ///  0: Means no failure and that the data of key1 is reliable 1: Means that programming key1 failed and the number of error bytes is over 6.
    +                KEY1_FAIL: u1,
    +                ///  The value of this signal means the number of error bytes.
    +                KEY2_ERR_NUM: u3,
    +                ///  0: Means no failure and that the data of key2 is reliable 1: Means that programming key2 failed and the number of error bytes is over 6.
    +                KEY2_FAIL: u1,
    +                ///  The value of this signal means the number of error bytes.
    +                KEY3_ERR_NUM: u3,
    +                ///  0: Means no failure and that the data of key3 is reliable 1: Means that programming key3 failed and the number of error bytes is over 6.
    +                KEY3_FAIL: u1,
    +                ///  The value of this signal means the number of error bytes.
    +                KEY4_ERR_NUM: u3,
    +                ///  0: Means no failure and that the data of key4 is reliable 1: Means that programming key4 failed and the number of error bytes is over 6.
    +                KEY4_FAIL: u1,
    +            }),
    +            ///  Programming error record register 1 of BLOCK1-10.
    +            RD_RS_ERR1: mmio.Mmio(packed struct(u32) {
    +                ///  The value of this signal means the number of error bytes.
    +                KEY5_ERR_NUM: u3,
    +                ///  0: Means no failure and that the data of KEY5 is reliable 1: Means that programming user data failed and the number of error bytes is over 6.
    +                KEY5_FAIL: u1,
    +                ///  The value of this signal means the number of error bytes.
    +                SYS_PART2_ERR_NUM: u3,
    +                ///  0: Means no failure and that the data of system part2 is reliable 1: Means that programming user data failed and the number of error bytes is over 6.
    +                SYS_PART2_FAIL: u1,
    +                padding: u24,
    +            }),
    +            ///  eFuse clcok configuration register.
    +            CLK: mmio.Mmio(packed struct(u32) {
    +                ///  Set this bit to force eFuse SRAM into power-saving mode.
    +                EFUSE_MEM_FORCE_PD: u1,
    +                ///  Set this bit and force to activate clock signal of eFuse SRAM.
    +                MEM_CLK_FORCE_ON: u1,
    +                ///  Set this bit to force eFuse SRAM into working mode.
    +                EFUSE_MEM_FORCE_PU: u1,
    +                reserved16: u13,
    +                ///  Set this bit and force to enable clock signal of eFuse memory.
    +                EN: u1,
    +                padding: u15,
    +            }),
    +            ///  eFuse operation mode configuraiton register;
    +            CONF: mmio.Mmio(packed struct(u32) {
    +                ///  0x5A5A: Operate programming command 0x5AA5: Operate read command.
    +                OP_CODE: u16,
    +                padding: u16,
    +            }),
    +            ///  eFuse status register.
    +            STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  Indicates the state of the eFuse state machine.
    +                STATE: u4,
    +                ///  The value of OTP_LOAD_SW.
    +                OTP_LOAD_SW: u1,
    +                ///  The value of OTP_VDDQ_C_SYNC2.
    +                OTP_VDDQ_C_SYNC2: u1,
    +                ///  The value of OTP_STROBE_SW.
    +                OTP_STROBE_SW: u1,
    +                ///  The value of OTP_CSB_SW.
    +                OTP_CSB_SW: u1,
    +                ///  The value of OTP_PGENB_SW.
    +                OTP_PGENB_SW: u1,
    +                ///  The value of OTP_VDDQ_IS_SW.
    +                OTP_VDDQ_IS_SW: u1,
    +                ///  Indicates the number of error bits during programming BLOCK0.
    +                REPEAT_ERR_CNT: u8,
    +                padding: u14,
    +            }),
    +            ///  eFuse command register.
    +            CMD: mmio.Mmio(packed struct(u32) {
    +                ///  Set this bit to send read command.
    +                READ_CMD: u1,
    +                ///  Set this bit to send programming command.
    +                PGM_CMD: u1,
    +                ///  The serial number of the block to be programmed. Value 0-10 corresponds to block number 0-10, respectively.
    +                BLK_NUM: u4,
    +                padding: u26,
    +            }),
    +            ///  eFuse raw interrupt register.
    +            INT_RAW: mmio.Mmio(packed struct(u32) {
    +                ///  The raw bit signal for read_done interrupt.
    +                READ_DONE_INT_RAW: u1,
    +                ///  The raw bit signal for pgm_done interrupt.
    +                PGM_DONE_INT_RAW: u1,
    +                padding: u30,
    +            }),
    +            ///  eFuse interrupt status register.
    +            INT_ST: mmio.Mmio(packed struct(u32) {
    +                ///  The status signal for read_done interrupt.
    +                READ_DONE_INT_ST: u1,
    +                ///  The status signal for pgm_done interrupt.
    +                PGM_DONE_INT_ST: u1,
    +                padding: u30,
    +            }),
    +            ///  eFuse interrupt enable register.
    +            INT_ENA: mmio.Mmio(packed struct(u32) {
    +                ///  The enable signal for read_done interrupt.
    +                READ_DONE_INT_ENA: u1,
    +                ///  The enable signal for pgm_done interrupt.
    +                PGM_DONE_INT_ENA: u1,
    +                padding: u30,
    +            }),
    +            ///  eFuse interrupt clear register.
    +            INT_CLR: mmio.Mmio(packed struct(u32) {
    +                ///  The clear signal for read_done interrupt.
    +                READ_DONE_INT_CLR: u1,
    +                ///  The clear signal for pgm_done interrupt.
    +                PGM_DONE_INT_CLR: u1,
    +                padding: u30,
    +            }),
    +            ///  Controls the eFuse programming voltage.
    +            DAC_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  Controls the division factor of the rising clock of the programming voltage.
    +                DAC_CLK_DIV: u8,
    +                ///  Don't care.
    +                DAC_CLK_PAD_SEL: u1,
    +                ///  Controls the rising period of the programming voltage.
    +                DAC_NUM: u8,
    +                ///  Reduces the power supply of the programming voltage.
    +                OE_CLR: u1,
    +                padding: u14,
    +            }),
    +            ///  Configures read timing parameters.
    +            RD_TIM_CONF: mmio.Mmio(packed struct(u32) {
    +                reserved24: u24,
    +                ///  Configures the initial read time of eFuse.
    +                READ_INIT_NUM: u8,
    +            }),
    +            ///  Configurarion register 1 of eFuse programming timing parameters.
    +            WR_TIM_CONF1: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  Configures the power up time for VDDQ.
    +                PWR_ON_NUM: u16,
    +                padding: u8,
    +            }),
    +            ///  Configurarion register 2 of eFuse programming timing parameters.
    +            WR_TIM_CONF2: mmio.Mmio(packed struct(u32) {
    +                ///  Configures the power outage time for VDDQ.
    +                PWR_OFF_NUM: u16,
    +                padding: u16,
    +            }),
    +            reserved508: [4]u8,
    +            ///  eFuse version register.
    +            DATE: mmio.Mmio(packed struct(u32) {
    +                ///  Stores eFuse version.
    +                DATE: u28,
    +                padding: u4,
    +            }),
    +        };
    +
    +        ///  External Memory
    +        pub const EXTMEM = extern struct {
    +            ///  This description will be updated in the near future.
    +            ICACHE_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to activate the data cache. 0: disable, 1: enable
    +                ICACHE_ENABLE: u1,
    +                padding: u31,
    +            }),
    +            ///  This description will be updated in the near future.
    +            ICACHE_CTRL1: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to disable core0 ibus, 0: enable, 1: disable
    +                ICACHE_SHUT_IBUS: u1,
    +                ///  The bit is used to disable core1 ibus, 0: enable, 1: disable
    +                ICACHE_SHUT_DBUS: u1,
    +                padding: u30,
    +            }),
    +            ///  This description will be updated in the near future.
    +            ICACHE_TAG_POWER_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to close clock gating of icache tag memory. 1: close gating, 0: open clock gating.
    +                ICACHE_TAG_MEM_FORCE_ON: u1,
    +                ///  The bit is used to power icache tag memory down, 0: follow rtc_lslp, 1: power down
    +                ICACHE_TAG_MEM_FORCE_PD: u1,
    +                ///  The bit is used to power icache tag memory up, 0: follow rtc_lslp, 1: power up
    +                ICACHE_TAG_MEM_FORCE_PU: u1,
    +                padding: u29,
    +            }),
    +            ///  This description will be updated in the near future.
    +            ICACHE_PRELOCK_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to enable the first section of prelock function.
    +                ICACHE_PRELOCK_SCT0_EN: u1,
    +                ///  The bit is used to enable the second section of prelock function.
    +                ICACHE_PRELOCK_SCT1_EN: u1,
    +                padding: u30,
    +            }),
    +            ///  This description will be updated in the near future.
    +            ICACHE_PRELOCK_SCT0_ADDR: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to configure the first start virtual address of data prelock, which is combined with ICACHE_PRELOCK_SCT0_SIZE_REG
    +                ICACHE_PRELOCK_SCT0_ADDR: u32,
    +            }),
    +            ///  This description will be updated in the near future.
    +            ICACHE_PRELOCK_SCT1_ADDR: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to configure the second start virtual address of data prelock, which is combined with ICACHE_PRELOCK_SCT1_SIZE_REG
    +                ICACHE_PRELOCK_SCT1_ADDR: u32,
    +            }),
    +            ///  This description will be updated in the near future.
    +            ICACHE_PRELOCK_SCT_SIZE: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to configure the second length of data locking, which is combined with ICACHE_PRELOCK_SCT1_ADDR_REG
    +                ICACHE_PRELOCK_SCT1_SIZE: u16,
    +                ///  The bits are used to configure the first length of data locking, which is combined with ICACHE_PRELOCK_SCT0_ADDR_REG
    +                ICACHE_PRELOCK_SCT0_SIZE: u16,
    +            }),
    +            ///  This description will be updated in the near future.
    +            ICACHE_LOCK_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to enable lock operation. It will be cleared by hardware after lock operation done.
    +                ICACHE_LOCK_ENA: u1,
    +                ///  The bit is used to enable unlock operation. It will be cleared by hardware after unlock operation done.
    +                ICACHE_UNLOCK_ENA: u1,
    +                ///  The bit is used to indicate unlock/lock operation is finished.
    +                ICACHE_LOCK_DONE: u1,
    +                padding: u29,
    +            }),
    +            ///  This description will be updated in the near future.
    +            ICACHE_LOCK_ADDR: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to configure the start virtual address for lock operations. It should be combined with ICACHE_LOCK_SIZE_REG.
    +                ICACHE_LOCK_ADDR: u32,
    +            }),
    +            ///  This description will be updated in the near future.
    +            ICACHE_LOCK_SIZE: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to configure the length for lock operations. The bits are the counts of cache block. It should be combined with ICACHE_LOCK_ADDR_REG.
    +                ICACHE_LOCK_SIZE: u16,
    +                padding: u16,
    +            }),
    +            ///  This description will be updated in the near future.
    +            ICACHE_SYNC_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to enable invalidate operation. It will be cleared by hardware after invalidate operation done.
    +                ICACHE_INVALIDATE_ENA: u1,
    +                ///  The bit is used to indicate invalidate operation is finished.
    +                ICACHE_SYNC_DONE: u1,
    +                padding: u30,
    +            }),
    +            ///  This description will be updated in the near future.
    +            ICACHE_SYNC_ADDR: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to configure the start virtual address for clean operations. It should be combined with ICACHE_SYNC_SIZE_REG.
    +                ICACHE_SYNC_ADDR: u32,
    +            }),
    +            ///  This description will be updated in the near future.
    +            ICACHE_SYNC_SIZE: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to configure the length for sync operations. The bits are the counts of cache block. It should be combined with ICACHE_SYNC_ADDR_REG.
    +                ICACHE_SYNC_SIZE: u23,
    +                padding: u9,
    +            }),
    +            ///  This description will be updated in the near future.
    +            ICACHE_PRELOAD_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to enable preload operation. It will be cleared by hardware after preload operation done.
    +                ICACHE_PRELOAD_ENA: u1,
    +                ///  The bit is used to indicate preload operation is finished.
    +                ICACHE_PRELOAD_DONE: u1,
    +                ///  The bit is used to configure the direction of preload operation. 1: descending, 0: ascending.
    +                ICACHE_PRELOAD_ORDER: u1,
    +                padding: u29,
    +            }),
    +            ///  This description will be updated in the near future.
    +            ICACHE_PRELOAD_ADDR: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to configure the start virtual address for preload operation. It should be combined with ICACHE_PRELOAD_SIZE_REG.
    +                ICACHE_PRELOAD_ADDR: u32,
    +            }),
    +            ///  This description will be updated in the near future.
    +            ICACHE_PRELOAD_SIZE: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to configure the length for preload operation. The bits are the counts of cache block. It should be combined with ICACHE_PRELOAD_ADDR_REG..
    +                ICACHE_PRELOAD_SIZE: u16,
    +                padding: u16,
    +            }),
    +            ///  This description will be updated in the near future.
    +            ICACHE_AUTOLOAD_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to enable the first section for autoload operation.
    +                ICACHE_AUTOLOAD_SCT0_ENA: u1,
    +                ///  The bits are used to enable the second section for autoload operation.
    +                ICACHE_AUTOLOAD_SCT1_ENA: u1,
    +                ///  The bit is used to enable and disable autoload operation. It is combined with icache_autoload_done. 1: enable, 0: disable.
    +                ICACHE_AUTOLOAD_ENA: u1,
    +                ///  The bit is used to indicate autoload operation is finished.
    +                ICACHE_AUTOLOAD_DONE: u1,
    +                ///  The bits are used to configure the direction of autoload. 1: descending, 0: ascending.
    +                ICACHE_AUTOLOAD_ORDER: u1,
    +                ///  The bits are used to configure trigger conditions for autoload. 0/3: cache miss, 1: cache hit, 2: both cache miss and hit.
    +                ICACHE_AUTOLOAD_RQST: u2,
    +                padding: u25,
    +            }),
    +            ///  This description will be updated in the near future.
    +            ICACHE_AUTOLOAD_SCT0_ADDR: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to configure the start virtual address of the first section for autoload operation. It should be combined with icache_autoload_sct0_ena.
    +                ICACHE_AUTOLOAD_SCT0_ADDR: u32,
    +            }),
    +            ///  This description will be updated in the near future.
    +            ICACHE_AUTOLOAD_SCT0_SIZE: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to configure the length of the first section for autoload operation. It should be combined with icache_autoload_sct0_ena.
    +                ICACHE_AUTOLOAD_SCT0_SIZE: u27,
    +                padding: u5,
    +            }),
    +            ///  This description will be updated in the near future.
    +            ICACHE_AUTOLOAD_SCT1_ADDR: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to configure the start virtual address of the second section for autoload operation. It should be combined with icache_autoload_sct1_ena.
    +                ICACHE_AUTOLOAD_SCT1_ADDR: u32,
    +            }),
    +            ///  This description will be updated in the near future.
    +            ICACHE_AUTOLOAD_SCT1_SIZE: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to configure the length of the second section for autoload operation. It should be combined with icache_autoload_sct1_ena.
    +                ICACHE_AUTOLOAD_SCT1_SIZE: u27,
    +                padding: u5,
    +            }),
    +            ///  This description will be updated in the near future.
    +            IBUS_TO_FLASH_START_VADDR: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to configure the start virtual address of ibus to access flash. The register is used to give constraints to ibus access counter.
    +                IBUS_TO_FLASH_START_VADDR: u32,
    +            }),
    +            ///  This description will be updated in the near future.
    +            IBUS_TO_FLASH_END_VADDR: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to configure the end virtual address of ibus to access flash. The register is used to give constraints to ibus access counter.
    +                IBUS_TO_FLASH_END_VADDR: u32,
    +            }),
    +            ///  This description will be updated in the near future.
    +            DBUS_TO_FLASH_START_VADDR: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to configure the start virtual address of dbus to access flash. The register is used to give constraints to dbus access counter.
    +                DBUS_TO_FLASH_START_VADDR: u32,
    +            }),
    +            ///  This description will be updated in the near future.
    +            DBUS_TO_FLASH_END_VADDR: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to configure the end virtual address of dbus to access flash. The register is used to give constraints to dbus access counter.
    +                DBUS_TO_FLASH_END_VADDR: u32,
    +            }),
    +            ///  This description will be updated in the near future.
    +            CACHE_ACS_CNT_CLR: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to clear ibus counter.
    +                IBUS_ACS_CNT_CLR: u1,
    +                ///  The bit is used to clear dbus counter.
    +                DBUS_ACS_CNT_CLR: u1,
    +                padding: u30,
    +            }),
    +            ///  This description will be updated in the near future.
    +            IBUS_ACS_MISS_CNT: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to count the number of the cache miss caused by ibus access flash.
    +                IBUS_ACS_MISS_CNT: u32,
    +            }),
    +            ///  This description will be updated in the near future.
    +            IBUS_ACS_CNT: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to count the number of ibus access flash through icache.
    +                IBUS_ACS_CNT: u32,
    +            }),
    +            ///  This description will be updated in the near future.
    +            DBUS_ACS_FLASH_MISS_CNT: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to count the number of the cache miss caused by dbus access flash.
    +                DBUS_ACS_FLASH_MISS_CNT: u32,
    +            }),
    +            ///  This description will be updated in the near future.
    +            DBUS_ACS_CNT: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to count the number of dbus access flash through icache.
    +                DBUS_ACS_CNT: u32,
    +            }),
    +            ///  This description will be updated in the near future.
    +            CACHE_ILG_INT_ENA: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to enable interrupt by sync configurations fault.
    +                ICACHE_SYNC_OP_FAULT_INT_ENA: u1,
    +                ///  The bit is used to enable interrupt by preload configurations fault.
    +                ICACHE_PRELOAD_OP_FAULT_INT_ENA: u1,
    +                reserved5: u3,
    +                ///  The bit is used to enable interrupt by mmu entry fault.
    +                MMU_ENTRY_FAULT_INT_ENA: u1,
    +                reserved7: u1,
    +                ///  The bit is used to enable interrupt by ibus counter overflow.
    +                IBUS_CNT_OVF_INT_ENA: u1,
    +                ///  The bit is used to enable interrupt by dbus counter overflow.
    +                DBUS_CNT_OVF_INT_ENA: u1,
    +                padding: u23,
    +            }),
    +            ///  This description will be updated in the near future.
    +            CACHE_ILG_INT_CLR: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to clear interrupt by sync configurations fault.
    +                ICACHE_SYNC_OP_FAULT_INT_CLR: u1,
    +                ///  The bit is used to clear interrupt by preload configurations fault.
    +                ICACHE_PRELOAD_OP_FAULT_INT_CLR: u1,
    +                reserved5: u3,
    +                ///  The bit is used to clear interrupt by mmu entry fault.
    +                MMU_ENTRY_FAULT_INT_CLR: u1,
    +                reserved7: u1,
    +                ///  The bit is used to clear interrupt by ibus counter overflow.
    +                IBUS_CNT_OVF_INT_CLR: u1,
    +                ///  The bit is used to clear interrupt by dbus counter overflow.
    +                DBUS_CNT_OVF_INT_CLR: u1,
    +                padding: u23,
    +            }),
    +            ///  This description will be updated in the near future.
    +            CACHE_ILG_INT_ST: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to indicate interrupt by sync configurations fault.
    +                ICACHE_SYNC_OP_FAULT_ST: u1,
    +                ///  The bit is used to indicate interrupt by preload configurations fault.
    +                ICACHE_PRELOAD_OP_FAULT_ST: u1,
    +                reserved5: u3,
    +                ///  The bit is used to indicate interrupt by mmu entry fault.
    +                MMU_ENTRY_FAULT_ST: u1,
    +                reserved7: u1,
    +                ///  The bit is used to indicate interrupt by ibus access flash/spiram counter overflow.
    +                IBUS_ACS_CNT_OVF_ST: u1,
    +                ///  The bit is used to indicate interrupt by ibus access flash/spiram miss counter overflow.
    +                IBUS_ACS_MISS_CNT_OVF_ST: u1,
    +                ///  The bit is used to indicate interrupt by dbus access flash/spiram counter overflow.
    +                DBUS_ACS_CNT_OVF_ST: u1,
    +                ///  The bit is used to indicate interrupt by dbus access flash miss counter overflow.
    +                DBUS_ACS_FLASH_MISS_CNT_OVF_ST: u1,
    +                padding: u21,
    +            }),
    +            ///  This description will be updated in the near future.
    +            CORE0_ACS_CACHE_INT_ENA: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to enable interrupt by cpu access icache while the corresponding ibus is disabled which include speculative access.
    +                CORE0_IBUS_ACS_MSK_IC_INT_ENA: u1,
    +                ///  The bit is used to enable interrupt by ibus trying to write icache
    +                CORE0_IBUS_WR_IC_INT_ENA: u1,
    +                ///  The bit is used to enable interrupt by authentication fail.
    +                CORE0_IBUS_REJECT_INT_ENA: u1,
    +                ///  The bit is used to enable interrupt by cpu access icache while the corresponding dbus is disabled which include speculative access.
    +                CORE0_DBUS_ACS_MSK_IC_INT_ENA: u1,
    +                ///  The bit is used to enable interrupt by authentication fail.
    +                CORE0_DBUS_REJECT_INT_ENA: u1,
    +                ///  The bit is used to enable interrupt by dbus trying to write icache
    +                CORE0_DBUS_WR_IC_INT_ENA: u1,
    +                padding: u26,
    +            }),
    +            ///  This description will be updated in the near future.
    +            CORE0_ACS_CACHE_INT_CLR: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to clear interrupt by cpu access icache while the corresponding ibus is disabled or icache is disabled which include speculative access.
    +                CORE0_IBUS_ACS_MSK_IC_INT_CLR: u1,
    +                ///  The bit is used to clear interrupt by ibus trying to write icache
    +                CORE0_IBUS_WR_IC_INT_CLR: u1,
    +                ///  The bit is used to clear interrupt by authentication fail.
    +                CORE0_IBUS_REJECT_INT_CLR: u1,
    +                ///  The bit is used to clear interrupt by cpu access icache while the corresponding dbus is disabled or icache is disabled which include speculative access.
    +                CORE0_DBUS_ACS_MSK_IC_INT_CLR: u1,
    +                ///  The bit is used to clear interrupt by authentication fail.
    +                CORE0_DBUS_REJECT_INT_CLR: u1,
    +                ///  The bit is used to clear interrupt by dbus trying to write icache
    +                CORE0_DBUS_WR_IC_INT_CLR: u1,
    +                padding: u26,
    +            }),
    +            ///  This description will be updated in the near future.
    +            CORE0_ACS_CACHE_INT_ST: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to indicate interrupt by cpu access icache while the core0_ibus is disabled or icache is disabled which include speculative access.
    +                CORE0_IBUS_ACS_MSK_ICACHE_ST: u1,
    +                ///  The bit is used to indicate interrupt by ibus trying to write icache
    +                CORE0_IBUS_WR_ICACHE_ST: u1,
    +                ///  The bit is used to indicate interrupt by authentication fail.
    +                CORE0_IBUS_REJECT_ST: u1,
    +                ///  The bit is used to indicate interrupt by cpu access icache while the core0_dbus is disabled or icache is disabled which include speculative access.
    +                CORE0_DBUS_ACS_MSK_ICACHE_ST: u1,
    +                ///  The bit is used to indicate interrupt by authentication fail.
    +                CORE0_DBUS_REJECT_ST: u1,
    +                ///  The bit is used to indicate interrupt by dbus trying to write icache
    +                CORE0_DBUS_WR_ICACHE_ST: u1,
    +                padding: u26,
    +            }),
    +            ///  This description will be updated in the near future.
    +            CORE0_DBUS_REJECT_ST: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to indicate the attribute of CPU access dbus when authentication fail. 0: invalidate, 1: execute-able, 2: read-able, 4: write-able.
    +                CORE0_DBUS_ATTR: u3,
    +                ///  The bit is used to indicate the world of CPU access dbus when authentication fail. 0: WORLD0, 1: WORLD1
    +                CORE0_DBUS_WORLD: u1,
    +                padding: u28,
    +            }),
    +            ///  This description will be updated in the near future.
    +            CORE0_DBUS_REJECT_VADDR: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to indicate the virtual address of CPU access dbus when authentication fail.
    +                CORE0_DBUS_VADDR: u32,
    +            }),
    +            ///  This description will be updated in the near future.
    +            CORE0_IBUS_REJECT_ST: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to indicate the attribute of CPU access ibus when authentication fail. 0: invalidate, 1: execute-able, 2: read-able
    +                CORE0_IBUS_ATTR: u3,
    +                ///  The bit is used to indicate the world of CPU access ibus when authentication fail. 0: WORLD0, 1: WORLD1
    +                CORE0_IBUS_WORLD: u1,
    +                padding: u28,
    +            }),
    +            ///  This description will be updated in the near future.
    +            CORE0_IBUS_REJECT_VADDR: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to indicate the virtual address of CPU access ibus when authentication fail.
    +                CORE0_IBUS_VADDR: u32,
    +            }),
    +            ///  This description will be updated in the near future.
    +            CACHE_MMU_FAULT_CONTENT: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to indicate the content of mmu entry which cause mmu fault..
    +                CACHE_MMU_FAULT_CONTENT: u10,
    +                ///  The right-most 3 bits are used to indicate the operations which cause mmu fault occurrence. 0: default, 1: cpu miss, 2: preload miss, 3: writeback, 4: cpu miss evict recovery address, 5: load miss evict recovery address, 6: external dma tx, 7: external dma rx. The most significant bit is used to indicate this operation occurs in which one icache.
    +                CACHE_MMU_FAULT_CODE: u4,
    +                padding: u18,
    +            }),
    +            ///  This description will be updated in the near future.
    +            CACHE_MMU_FAULT_VADDR: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to indicate the virtual address which cause mmu fault..
    +                CACHE_MMU_FAULT_VADDR: u32,
    +            }),
    +            ///  This description will be updated in the near future.
    +            CACHE_WRAP_AROUND_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to enable wrap around mode when read data from flash.
    +                CACHE_FLASH_WRAP_AROUND: u1,
    +                padding: u31,
    +            }),
    +            ///  This description will be updated in the near future.
    +            CACHE_MMU_POWER_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to enable clock gating to save power when access mmu memory, 0: enable, 1: disable
    +                CACHE_MMU_MEM_FORCE_ON: u1,
    +                ///  The bit is used to power mmu memory down, 0: follow_rtc_lslp_pd, 1: power down
    +                CACHE_MMU_MEM_FORCE_PD: u1,
    +                ///  The bit is used to power mmu memory down, 0: follow_rtc_lslp_pd, 1: power up
    +                CACHE_MMU_MEM_FORCE_PU: u1,
    +                padding: u29,
    +            }),
    +            ///  This description will be updated in the near future.
    +            CACHE_STATE: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to indicate whether icache main fsm is in idle state or not. 1: in idle state, 0: not in idle state
    +                ICACHE_STATE: u12,
    +                padding: u20,
    +            }),
    +            ///  This description will be updated in the near future.
    +            CACHE_ENCRYPT_DECRYPT_RECORD_DISABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Reserved.
    +                RECORD_DISABLE_DB_ENCRYPT: u1,
    +                ///  Reserved.
    +                RECORD_DISABLE_G0CB_DECRYPT: u1,
    +                padding: u30,
    +            }),
    +            ///  This description will be updated in the near future.
    +            CACHE_ENCRYPT_DECRYPT_CLK_FORCE_ON: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to close clock gating of manual crypt clock. 1: close gating, 0: open clock gating.
    +                CLK_FORCE_ON_MANUAL_CRYPT: u1,
    +                ///  The bit is used to close clock gating of automatic crypt clock. 1: close gating, 0: open clock gating.
    +                CLK_FORCE_ON_AUTO_CRYPT: u1,
    +                ///  The bit is used to close clock gating of external memory encrypt and decrypt clock. 1: close gating, 0: open clock gating.
    +                CLK_FORCE_ON_CRYPT: u1,
    +                padding: u29,
    +            }),
    +            ///  This description will be updated in the near future.
    +            CACHE_PRELOAD_INT_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to indicate the interrupt by icache pre-load done.
    +                ICACHE_PRELOAD_INT_ST: u1,
    +                ///  The bit is used to enable the interrupt by icache pre-load done.
    +                ICACHE_PRELOAD_INT_ENA: u1,
    +                ///  The bit is used to clear the interrupt by icache pre-load done.
    +                ICACHE_PRELOAD_INT_CLR: u1,
    +                padding: u29,
    +            }),
    +            ///  This description will be updated in the near future.
    +            CACHE_SYNC_INT_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to indicate the interrupt by icache sync done.
    +                ICACHE_SYNC_INT_ST: u1,
    +                ///  The bit is used to enable the interrupt by icache sync done.
    +                ICACHE_SYNC_INT_ENA: u1,
    +                ///  The bit is used to clear the interrupt by icache sync done.
    +                ICACHE_SYNC_INT_CLR: u1,
    +                padding: u29,
    +            }),
    +            ///  This description will be updated in the near future.
    +            CACHE_MMU_OWNER: mmio.Mmio(packed struct(u32) {
    +                ///  The bits are used to specify the owner of MMU.bit0/bit2: ibus, bit1/bit3: dbus
    +                CACHE_MMU_OWNER: u4,
    +                padding: u28,
    +            }),
    +            ///  This description will be updated in the near future.
    +            CACHE_CONF_MISC: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to disable checking mmu entry fault by preload operation.
    +                CACHE_IGNORE_PRELOAD_MMU_ENTRY_FAULT: u1,
    +                ///  The bit is used to disable checking mmu entry fault by sync operation.
    +                CACHE_IGNORE_SYNC_MMU_ENTRY_FAULT: u1,
    +                ///  The bit is used to enable cache trace function.
    +                CACHE_TRACE_ENA: u1,
    +                padding: u29,
    +            }),
    +            ///  This description will be updated in the near future.
    +            ICACHE_FREEZE: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to enable icache freeze mode
    +                ENA: u1,
    +                ///  The bit is used to configure freeze mode, 0: assert busy if CPU miss 1: assert hit if CPU miss
    +                MODE: u1,
    +                ///  The bit is used to indicate icache freeze success
    +                DONE: u1,
    +                padding: u29,
    +            }),
    +            ///  This description will be updated in the near future.
    +            ICACHE_ATOMIC_OPERATE_ENA: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to activate icache atomic operation protection. In this case, sync/lock operation can not interrupt miss-work. This feature does not work during invalidateAll operation.
    +                ICACHE_ATOMIC_OPERATE_ENA: u1,
    +                padding: u31,
    +            }),
    +            ///  This description will be updated in the near future.
    +            CACHE_REQUEST: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to disable request recording which could cause performance issue
    +                BYPASS: u1,
    +                padding: u31,
    +            }),
    +            ///  This description will be updated in the near future.
    +            IBUS_PMS_TBL_LOCK: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to configure the ibus permission control section boundary0
    +                IBUS_PMS_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  This description will be updated in the near future.
    +            IBUS_PMS_TBL_BOUNDARY0: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to configure the ibus permission control section boundary0
    +                IBUS_PMS_BOUNDARY0: u12,
    +                padding: u20,
    +            }),
    +            ///  This description will be updated in the near future.
    +            IBUS_PMS_TBL_BOUNDARY1: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to configure the ibus permission control section boundary1
    +                IBUS_PMS_BOUNDARY1: u12,
    +                padding: u20,
    +            }),
    +            ///  This description will be updated in the near future.
    +            IBUS_PMS_TBL_BOUNDARY2: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to configure the ibus permission control section boundary2
    +                IBUS_PMS_BOUNDARY2: u12,
    +                padding: u20,
    +            }),
    +            ///  This description will be updated in the near future.
    +            IBUS_PMS_TBL_ATTR: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to configure attribute of the ibus permission control section1, bit0: fetch in world0, bit1: load in world0, bit2: fetch in world1, bit3: load in world1
    +                IBUS_PMS_SCT1_ATTR: u4,
    +                ///  The bit is used to configure attribute of the ibus permission control section2, bit0: fetch in world0, bit1: load in world0, bit2: fetch in world1, bit3: load in world1
    +                IBUS_PMS_SCT2_ATTR: u4,
    +                padding: u24,
    +            }),
    +            ///  This description will be updated in the near future.
    +            DBUS_PMS_TBL_LOCK: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to configure the ibus permission control section boundary0
    +                DBUS_PMS_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  This description will be updated in the near future.
    +            DBUS_PMS_TBL_BOUNDARY0: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to configure the dbus permission control section boundary0
    +                DBUS_PMS_BOUNDARY0: u12,
    +                padding: u20,
    +            }),
    +            ///  This description will be updated in the near future.
    +            DBUS_PMS_TBL_BOUNDARY1: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to configure the dbus permission control section boundary1
    +                DBUS_PMS_BOUNDARY1: u12,
    +                padding: u20,
    +            }),
    +            ///  This description will be updated in the near future.
    +            DBUS_PMS_TBL_BOUNDARY2: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to configure the dbus permission control section boundary2
    +                DBUS_PMS_BOUNDARY2: u12,
    +                padding: u20,
    +            }),
    +            ///  This description will be updated in the near future.
    +            DBUS_PMS_TBL_ATTR: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to configure attribute of the dbus permission control section1, bit0: load in world0, bit2: load in world1
    +                DBUS_PMS_SCT1_ATTR: u2,
    +                ///  The bit is used to configure attribute of the dbus permission control section2, bit0: load in world0, bit2: load in world1
    +                DBUS_PMS_SCT2_ATTR: u2,
    +                padding: u28,
    +            }),
    +            ///  This description will be updated in the near future.
    +            CLOCK_GATE: mmio.Mmio(packed struct(u32) {
    +                ///  clock gate enable.
    +                CLK_EN: u1,
    +                padding: u31,
    +            }),
    +            reserved1020: [760]u8,
    +            ///  This description will be updated in the near future.
    +            REG_DATE: mmio.Mmio(packed struct(u32) {
    +                ///  version information
    +                DATE: u28,
    +                padding: u4,
    +            }),
    +        };
    +
    +        ///  General Purpose Input/Output
    +        pub const GPIO = extern struct {
    +            ///  GPIO bit select register
    +            BT_SELECT: mmio.Mmio(packed struct(u32) {
    +                ///  GPIO bit select register
    +                BT_SEL: u32,
    +            }),
    +            ///  GPIO output register
    +            OUT: mmio.Mmio(packed struct(u32) {
    +                ///  GPIO output register for GPIO0-25
    +                DATA_ORIG: u26,
    +                padding: u6,
    +            }),
    +            ///  GPIO output set register
    +            OUT_W1TS: mmio.Mmio(packed struct(u32) {
    +                ///  GPIO output set register for GPIO0-25
    +                OUT_W1TS: u26,
    +                padding: u6,
    +            }),
    +            ///  GPIO output clear register
    +            OUT_W1TC: mmio.Mmio(packed struct(u32) {
    +                ///  GPIO output clear register for GPIO0-25
    +                OUT_W1TC: u26,
    +                padding: u6,
    +            }),
    +            reserved28: [12]u8,
    +            ///  GPIO sdio select register
    +            SDIO_SELECT: mmio.Mmio(packed struct(u32) {
    +                ///  GPIO sdio select register
    +                SDIO_SEL: u8,
    +                padding: u24,
    +            }),
    +            ///  GPIO output enable register
    +            ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  GPIO output enable register for GPIO0-25
    +                DATA: u26,
    +                padding: u6,
    +            }),
    +            ///  GPIO output enable set register
    +            ENABLE_W1TS: mmio.Mmio(packed struct(u32) {
    +                ///  GPIO output enable set register for GPIO0-25
    +                ENABLE_W1TS: u26,
    +                padding: u6,
    +            }),
    +            ///  GPIO output enable clear register
    +            ENABLE_W1TC: mmio.Mmio(packed struct(u32) {
    +                ///  GPIO output enable clear register for GPIO0-25
    +                ENABLE_W1TC: u26,
    +                padding: u6,
    +            }),
    +            reserved56: [12]u8,
    +            ///  pad strapping register
    +            STRAP: mmio.Mmio(packed struct(u32) {
    +                ///  pad strapping register
    +                STRAPPING: u16,
    +                padding: u16,
    +            }),
    +            ///  GPIO input register
    +            IN: mmio.Mmio(packed struct(u32) {
    +                ///  GPIO input register for GPIO0-25
    +                DATA_NEXT: u26,
    +                padding: u6,
    +            }),
    +            reserved68: [4]u8,
    +            ///  GPIO interrupt status register
    +            STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  GPIO interrupt status register for GPIO0-25
    +                INTERRUPT: u26,
    +                padding: u6,
    +            }),
    +            ///  GPIO interrupt status set register
    +            STATUS_W1TS: mmio.Mmio(packed struct(u32) {
    +                ///  GPIO interrupt status set register for GPIO0-25
    +                STATUS_W1TS: u26,
    +                padding: u6,
    +            }),
    +            ///  GPIO interrupt status clear register
    +            STATUS_W1TC: mmio.Mmio(packed struct(u32) {
    +                ///  GPIO interrupt status clear register for GPIO0-25
    +                STATUS_W1TC: u26,
    +                padding: u6,
    +            }),
    +            reserved92: [12]u8,
    +            ///  GPIO PRO_CPU interrupt status register
    +            PCPU_INT: mmio.Mmio(packed struct(u32) {
    +                ///  GPIO PRO_CPU interrupt status register for GPIO0-25
    +                PROCPU_INT: u26,
    +                padding: u6,
    +            }),
    +            ///  GPIO PRO_CPU(not shielded) interrupt status register
    +            PCPU_NMI_INT: mmio.Mmio(packed struct(u32) {
    +                ///  GPIO PRO_CPU(not shielded) interrupt status register for GPIO0-25
    +                PROCPU_NMI_INT: u26,
    +                padding: u6,
    +            }),
    +            ///  GPIO CPUSDIO interrupt status register
    +            CPUSDIO_INT: mmio.Mmio(packed struct(u32) {
    +                ///  GPIO CPUSDIO interrupt status register for GPIO0-25
    +                SDIO_INT: u26,
    +                padding: u6,
    +            }),
    +            reserved116: [12]u8,
    +            ///  GPIO pin configuration register
    +            PIN: [26]mmio.Mmio(packed struct(u32) {
    +                ///  set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger at posedge.
    +                PIN_SYNC2_BYPASS: u2,
    +                ///  set this bit to select pad driver. 1:open-drain. :normal.
    +                PIN_PAD_DRIVER: u1,
    +                ///  set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger at posedge.
    +                PIN_SYNC1_BYPASS: u2,
    +                reserved7: u2,
    +                ///  set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level. 5:valid at high level
    +                PIN_INT_TYPE: u3,
    +                ///  set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    +                PIN_WAKEUP_ENABLE: u1,
    +                ///  reserved
    +                PIN_CONFIG: u2,
    +                ///  set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded) interrupt.
    +                PIN_INT_ENA: u5,
    +                padding: u14,
    +            }),
    +            reserved332: [112]u8,
    +            ///  GPIO interrupt source register
    +            STATUS_NEXT: mmio.Mmio(packed struct(u32) {
    +                ///  GPIO interrupt source register for GPIO0-25
    +                STATUS_INTERRUPT_NEXT: u26,
    +                padding: u6,
    +            }),
    +            reserved340: [4]u8,
    +            ///  GPIO input function configuration register
    +            FUNC_IN_SEL_CFG: [128]mmio.Mmio(packed struct(u32) {
    +                ///  set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always high level. s=x3C: set this port always low level.
    +                IN_SEL: u5,
    +                ///  set this bit to invert input signal. 1:invert. :not invert.
    +                IN_INV_SEL: u1,
    +                ///  set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    +                SEL: u1,
    +                padding: u25,
    +            }),
    +            reserved1364: [512]u8,
    +            ///  GPIO output function select register
    +            FUNC_OUT_SEL_CFG: [26]mmio.Mmio(packed struct(u32) {
    +                ///  The value of the bits: <=s<=256. Set the value to select output signal. s=-255: output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals GPIO_OUT_REG[n].
    +                OUT_SEL: u8,
    +                ///  set this bit to invert output signal.1:invert.:not invert.
    +                INV_SEL: u1,
    +                ///  set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output enable signal.:use peripheral output enable signal.
    +                OEN_SEL: u1,
    +                ///  set this bit to invert output enable signal.1:invert.:not invert.
    +                OEN_INV_SEL: u1,
    +                padding: u21,
    +            }),
    +            reserved1580: [112]u8,
    +            ///  GPIO clock gate register
    +            CLOCK_GATE: mmio.Mmio(packed struct(u32) {
    +                ///  set this bit to enable GPIO clock gate
    +                CLK_EN: u1,
    +                padding: u31,
    +            }),
    +            reserved1788: [204]u8,
    +            ///  GPIO version register
    +            REG_DATE: mmio.Mmio(packed struct(u32) {
    +                ///  version register
    +                REG_DATE: u28,
    +                padding: u4,
    +            }),
    +        };
    +
    +        ///  Sigma-Delta Modulation
    +        pub const GPIOSD = extern struct {
    +            ///  Duty Cycle Configure Register of SDM%s
    +            SIGMADELTA: [4]mmio.Mmio(packed struct(u32) {
    +                ///  This field is used to configure the duty cycle of sigma delta modulation output.
    +                SD0_IN: u8,
    +                ///  This field is used to set a divider value to divide APB clock.
    +                SD0_PRESCALE: u8,
    +                padding: u16,
    +            }),
    +            reserved32: [16]u8,
    +            ///  Clock Gating Configure Register
    +            SIGMADELTA_CG: mmio.Mmio(packed struct(u32) {
    +                reserved31: u31,
    +                ///  Clock enable bit of configuration registers for sigma delta modulation.
    +                CLK_EN: u1,
    +            }),
    +            ///  MISC Register
    +            SIGMADELTA_MISC: mmio.Mmio(packed struct(u32) {
    +                reserved30: u30,
    +                ///  Clock enable bit of sigma delta modulation.
    +                FUNCTION_CLK_EN: u1,
    +                ///  Reserved.
    +                SPI_SWAP: u1,
    +            }),
    +            ///  Version Control Register
    +            SIGMADELTA_VERSION: mmio.Mmio(packed struct(u32) {
    +                ///  Version control register.
    +                GPIO_SD_DATE: u28,
    +                padding: u4,
    +            }),
    +        };
    +
    +        ///  HMAC (Hash-based Message Authentication Code) Accelerator
    +        pub const HMAC = extern struct {
    +            reserved64: [64]u8,
    +            ///  Process control register 0.
    +            SET_START: mmio.Mmio(packed struct(u32) {
    +                ///  Start hmac operation.
    +                SET_START: u1,
    +                padding: u31,
    +            }),
    +            ///  Configure purpose.
    +            SET_PARA_PURPOSE: mmio.Mmio(packed struct(u32) {
    +                ///  Set hmac parameter purpose.
    +                PURPOSE_SET: u4,
    +                padding: u28,
    +            }),
    +            ///  Configure key.
    +            SET_PARA_KEY: mmio.Mmio(packed struct(u32) {
    +                ///  Set hmac parameter key.
    +                KEY_SET: u3,
    +                padding: u29,
    +            }),
    +            ///  Finish initial configuration.
    +            SET_PARA_FINISH: mmio.Mmio(packed struct(u32) {
    +                ///  Finish hmac configuration.
    +                SET_PARA_END: u1,
    +                padding: u31,
    +            }),
    +            ///  Process control register 1.
    +            SET_MESSAGE_ONE: mmio.Mmio(packed struct(u32) {
    +                ///  Call SHA to calculate one message block.
    +                SET_TEXT_ONE: u1,
    +                padding: u31,
    +            }),
    +            ///  Process control register 2.
    +            SET_MESSAGE_ING: mmio.Mmio(packed struct(u32) {
    +                ///  Continue typical hmac.
    +                SET_TEXT_ING: u1,
    +                padding: u31,
    +            }),
    +            ///  Process control register 3.
    +            SET_MESSAGE_END: mmio.Mmio(packed struct(u32) {
    +                ///  Start hardware padding.
    +                SET_TEXT_END: u1,
    +                padding: u31,
    +            }),
    +            ///  Process control register 4.
    +            SET_RESULT_FINISH: mmio.Mmio(packed struct(u32) {
    +                ///  After read result from upstream, then let hmac back to idle.
    +                SET_RESULT_END: u1,
    +                padding: u31,
    +            }),
    +            ///  Invalidate register 0.
    +            SET_INVALIDATE_JTAG: mmio.Mmio(packed struct(u32) {
    +                ///  Clear result from hmac downstream JTAG.
    +                SET_INVALIDATE_JTAG: u1,
    +                padding: u31,
    +            }),
    +            ///  Invalidate register 1.
    +            SET_INVALIDATE_DS: mmio.Mmio(packed struct(u32) {
    +                ///  Clear result from hmac downstream DS.
    +                SET_INVALIDATE_DS: u1,
    +                padding: u31,
    +            }),
    +            ///  Error register.
    +            QUERY_ERROR: mmio.Mmio(packed struct(u32) {
    +                ///  Hmac configuration state. 0: key are agree with purpose. 1: error
    +                QUREY_CHECK: u1,
    +                padding: u31,
    +            }),
    +            ///  Busy register.
    +            QUERY_BUSY: mmio.Mmio(packed struct(u32) {
    +                ///  Hmac state. 1'b0: idle. 1'b1: busy
    +                BUSY_STATE: u1,
    +                padding: u31,
    +            }),
    +            reserved128: [16]u8,
    +            ///  Message block memory.
    +            WR_MESSAGE_MEM: [64]u8,
    +            ///  Result from upstream.
    +            RD_RESULT_MEM: [32]u8,
    +            reserved240: [16]u8,
    +            ///  Process control register 5.
    +            SET_MESSAGE_PAD: mmio.Mmio(packed struct(u32) {
    +                ///  Start software padding.
    +                SET_TEXT_PAD: u1,
    +                padding: u31,
    +            }),
    +            ///  Process control register 6.
    +            ONE_BLOCK: mmio.Mmio(packed struct(u32) {
    +                ///  Don't have to do padding.
    +                SET_ONE_BLOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  Jtag register 0.
    +            SOFT_JTAG_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  Turn on JTAG verification.
    +                SOFT_JTAG_CTRL: u1,
    +                padding: u31,
    +            }),
    +            ///  Jtag register 1.
    +            WR_JTAG: mmio.Mmio(packed struct(u32) {
    +                ///  32-bit of key to be compared.
    +                WR_JTAG: u32,
    +            }),
    +        };
    +
    +        ///  I2C (Inter-Integrated Circuit) Controller
    +        pub const I2C0 = extern struct {
    +            ///  I2C_SCL_LOW_PERIOD_REG
    +            SCL_LOW_PERIOD: mmio.Mmio(packed struct(u32) {
    +                ///  reg_scl_low_period
    +                SCL_LOW_PERIOD: u9,
    +                padding: u23,
    +            }),
    +            ///  I2C_CTR_REG
    +            CTR: mmio.Mmio(packed struct(u32) {
    +                ///  reg_sda_force_out
    +                SDA_FORCE_OUT: u1,
    +                ///  reg_scl_force_out
    +                SCL_FORCE_OUT: u1,
    +                ///  reg_sample_scl_level
    +                SAMPLE_SCL_LEVEL: u1,
    +                ///  reg_rx_full_ack_level
    +                RX_FULL_ACK_LEVEL: u1,
    +                ///  reg_ms_mode
    +                MS_MODE: u1,
    +                ///  reg_trans_start
    +                TRANS_START: u1,
    +                ///  reg_tx_lsb_first
    +                TX_LSB_FIRST: u1,
    +                ///  reg_rx_lsb_first
    +                RX_LSB_FIRST: u1,
    +                ///  reg_clk_en
    +                CLK_EN: u1,
    +                ///  reg_arbitration_en
    +                ARBITRATION_EN: u1,
    +                ///  reg_fsm_rst
    +                FSM_RST: u1,
    +                ///  reg_conf_upgate
    +                CONF_UPGATE: u1,
    +                ///  reg_slv_tx_auto_start_en
    +                SLV_TX_AUTO_START_EN: u1,
    +                ///  reg_addr_10bit_rw_check_en
    +                ADDR_10BIT_RW_CHECK_EN: u1,
    +                ///  reg_addr_broadcasting_en
    +                ADDR_BROADCASTING_EN: u1,
    +                padding: u17,
    +            }),
    +            ///  I2C_SR_REG
    +            SR: mmio.Mmio(packed struct(u32) {
    +                ///  reg_resp_rec
    +                RESP_REC: u1,
    +                ///  reg_slave_rw
    +                SLAVE_RW: u1,
    +                reserved3: u1,
    +                ///  reg_arb_lost
    +                ARB_LOST: u1,
    +                ///  reg_bus_busy
    +                BUS_BUSY: u1,
    +                ///  reg_slave_addressed
    +                SLAVE_ADDRESSED: u1,
    +                reserved8: u2,
    +                ///  reg_rxfifo_cnt
    +                RXFIFO_CNT: u6,
    +                ///  reg_stretch_cause
    +                STRETCH_CAUSE: u2,
    +                reserved18: u2,
    +                ///  reg_txfifo_cnt
    +                TXFIFO_CNT: u6,
    +                ///  reg_scl_main_state_last
    +                SCL_MAIN_STATE_LAST: u3,
    +                reserved28: u1,
    +                ///  reg_scl_state_last
    +                SCL_STATE_LAST: u3,
    +                padding: u1,
    +            }),
    +            ///  I2C_TO_REG
    +            TO: mmio.Mmio(packed struct(u32) {
    +                ///  reg_time_out_value
    +                TIME_OUT_VALUE: u5,
    +                ///  reg_time_out_en
    +                TIME_OUT_EN: u1,
    +                padding: u26,
    +            }),
    +            ///  I2C_SLAVE_ADDR_REG
    +            SLAVE_ADDR: mmio.Mmio(packed struct(u32) {
    +                ///  reg_slave_addr
    +                SLAVE_ADDR: u15,
    +                reserved31: u16,
    +                ///  reg_addr_10bit_en
    +                ADDR_10BIT_EN: u1,
    +            }),
    +            ///  I2C_FIFO_ST_REG
    +            FIFO_ST: mmio.Mmio(packed struct(u32) {
    +                ///  reg_rxfifo_raddr
    +                RXFIFO_RADDR: u5,
    +                ///  reg_rxfifo_waddr
    +                RXFIFO_WADDR: u5,
    +                ///  reg_txfifo_raddr
    +                TXFIFO_RADDR: u5,
    +                ///  reg_txfifo_waddr
    +                TXFIFO_WADDR: u5,
    +                reserved22: u2,
    +                ///  reg_slave_rw_point
    +                SLAVE_RW_POINT: u8,
    +                padding: u2,
    +            }),
    +            ///  I2C_FIFO_CONF_REG
    +            FIFO_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  reg_rxfifo_wm_thrhd
    +                RXFIFO_WM_THRHD: u5,
    +                ///  reg_txfifo_wm_thrhd
    +                TXFIFO_WM_THRHD: u5,
    +                ///  reg_nonfifo_en
    +                NONFIFO_EN: u1,
    +                ///  reg_fifo_addr_cfg_en
    +                FIFO_ADDR_CFG_EN: u1,
    +                ///  reg_rx_fifo_rst
    +                RX_FIFO_RST: u1,
    +                ///  reg_tx_fifo_rst
    +                TX_FIFO_RST: u1,
    +                ///  reg_fifo_prt_en
    +                FIFO_PRT_EN: u1,
    +                padding: u17,
    +            }),
    +            ///  I2C_FIFO_DATA_REG
    +            DATA: mmio.Mmio(packed struct(u32) {
    +                ///  reg_fifo_rdata
    +                FIFO_RDATA: u8,
    +                padding: u24,
    +            }),
    +            ///  I2C_INT_RAW_REG
    +            INT_RAW: mmio.Mmio(packed struct(u32) {
    +                ///  reg_rxfifo_wm_int_raw
    +                RXFIFO_WM_INT_RAW: u1,
    +                ///  reg_txfifo_wm_int_raw
    +                TXFIFO_WM_INT_RAW: u1,
    +                ///  reg_rxfifo_ovf_int_raw
    +                RXFIFO_OVF_INT_RAW: u1,
    +                ///  reg_end_detect_int_raw
    +                END_DETECT_INT_RAW: u1,
    +                ///  reg_byte_trans_done_int_raw
    +                BYTE_TRANS_DONE_INT_RAW: u1,
    +                ///  reg_arbitration_lost_int_raw
    +                ARBITRATION_LOST_INT_RAW: u1,
    +                ///  reg_mst_txfifo_udf_int_raw
    +                MST_TXFIFO_UDF_INT_RAW: u1,
    +                ///  reg_trans_complete_int_raw
    +                TRANS_COMPLETE_INT_RAW: u1,
    +                ///  reg_time_out_int_raw
    +                TIME_OUT_INT_RAW: u1,
    +                ///  reg_trans_start_int_raw
    +                TRANS_START_INT_RAW: u1,
    +                ///  reg_nack_int_raw
    +                NACK_INT_RAW: u1,
    +                ///  reg_txfifo_ovf_int_raw
    +                TXFIFO_OVF_INT_RAW: u1,
    +                ///  reg_rxfifo_udf_int_raw
    +                RXFIFO_UDF_INT_RAW: u1,
    +                ///  reg_scl_st_to_int_raw
    +                SCL_ST_TO_INT_RAW: u1,
    +                ///  reg_scl_main_st_to_int_raw
    +                SCL_MAIN_ST_TO_INT_RAW: u1,
    +                ///  reg_det_start_int_raw
    +                DET_START_INT_RAW: u1,
    +                ///  reg_slave_stretch_int_raw
    +                SLAVE_STRETCH_INT_RAW: u1,
    +                ///  reg_general_call_int_raw
    +                GENERAL_CALL_INT_RAW: u1,
    +                padding: u14,
    +            }),
    +            ///  I2C_INT_CLR_REG
    +            INT_CLR: mmio.Mmio(packed struct(u32) {
    +                ///  reg_rxfifo_wm_int_clr
    +                RXFIFO_WM_INT_CLR: u1,
    +                ///  reg_txfifo_wm_int_clr
    +                TXFIFO_WM_INT_CLR: u1,
    +                ///  reg_rxfifo_ovf_int_clr
    +                RXFIFO_OVF_INT_CLR: u1,
    +                ///  reg_end_detect_int_clr
    +                END_DETECT_INT_CLR: u1,
    +                ///  reg_byte_trans_done_int_clr
    +                BYTE_TRANS_DONE_INT_CLR: u1,
    +                ///  reg_arbitration_lost_int_clr
    +                ARBITRATION_LOST_INT_CLR: u1,
    +                ///  reg_mst_txfifo_udf_int_clr
    +                MST_TXFIFO_UDF_INT_CLR: u1,
    +                ///  reg_trans_complete_int_clr
    +                TRANS_COMPLETE_INT_CLR: u1,
    +                ///  reg_time_out_int_clr
    +                TIME_OUT_INT_CLR: u1,
    +                ///  reg_trans_start_int_clr
    +                TRANS_START_INT_CLR: u1,
    +                ///  reg_nack_int_clr
    +                NACK_INT_CLR: u1,
    +                ///  reg_txfifo_ovf_int_clr
    +                TXFIFO_OVF_INT_CLR: u1,
    +                ///  reg_rxfifo_udf_int_clr
    +                RXFIFO_UDF_INT_CLR: u1,
    +                ///  reg_scl_st_to_int_clr
    +                SCL_ST_TO_INT_CLR: u1,
    +                ///  reg_scl_main_st_to_int_clr
    +                SCL_MAIN_ST_TO_INT_CLR: u1,
    +                ///  reg_det_start_int_clr
    +                DET_START_INT_CLR: u1,
    +                ///  reg_slave_stretch_int_clr
    +                SLAVE_STRETCH_INT_CLR: u1,
    +                ///  reg_general_call_int_clr
    +                GENERAL_CALL_INT_CLR: u1,
    +                padding: u14,
    +            }),
    +            ///  I2C_INT_ENA_REG
    +            INT_ENA: mmio.Mmio(packed struct(u32) {
    +                ///  reg_rxfifo_wm_int_ena
    +                RXFIFO_WM_INT_ENA: u1,
    +                ///  reg_txfifo_wm_int_ena
    +                TXFIFO_WM_INT_ENA: u1,
    +                ///  reg_rxfifo_ovf_int_ena
    +                RXFIFO_OVF_INT_ENA: u1,
    +                ///  reg_end_detect_int_ena
    +                END_DETECT_INT_ENA: u1,
    +                ///  reg_byte_trans_done_int_ena
    +                BYTE_TRANS_DONE_INT_ENA: u1,
    +                ///  reg_arbitration_lost_int_ena
    +                ARBITRATION_LOST_INT_ENA: u1,
    +                ///  reg_mst_txfifo_udf_int_ena
    +                MST_TXFIFO_UDF_INT_ENA: u1,
    +                ///  reg_trans_complete_int_ena
    +                TRANS_COMPLETE_INT_ENA: u1,
    +                ///  reg_time_out_int_ena
    +                TIME_OUT_INT_ENA: u1,
    +                ///  reg_trans_start_int_ena
    +                TRANS_START_INT_ENA: u1,
    +                ///  reg_nack_int_ena
    +                NACK_INT_ENA: u1,
    +                ///  reg_txfifo_ovf_int_ena
    +                TXFIFO_OVF_INT_ENA: u1,
    +                ///  reg_rxfifo_udf_int_ena
    +                RXFIFO_UDF_INT_ENA: u1,
    +                ///  reg_scl_st_to_int_ena
    +                SCL_ST_TO_INT_ENA: u1,
    +                ///  reg_scl_main_st_to_int_ena
    +                SCL_MAIN_ST_TO_INT_ENA: u1,
    +                ///  reg_det_start_int_ena
    +                DET_START_INT_ENA: u1,
    +                ///  reg_slave_stretch_int_ena
    +                SLAVE_STRETCH_INT_ENA: u1,
    +                ///  reg_general_call_int_ena
    +                GENERAL_CALL_INT_ENA: u1,
    +                padding: u14,
    +            }),
    +            ///  I2C_INT_STATUS_REG
    +            INT_STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  reg_rxfifo_wm_int_st
    +                RXFIFO_WM_INT_ST: u1,
    +                ///  reg_txfifo_wm_int_st
    +                TXFIFO_WM_INT_ST: u1,
    +                ///  reg_rxfifo_ovf_int_st
    +                RXFIFO_OVF_INT_ST: u1,
    +                ///  reg_end_detect_int_st
    +                END_DETECT_INT_ST: u1,
    +                ///  reg_byte_trans_done_int_st
    +                BYTE_TRANS_DONE_INT_ST: u1,
    +                ///  reg_arbitration_lost_int_st
    +                ARBITRATION_LOST_INT_ST: u1,
    +                ///  reg_mst_txfifo_udf_int_st
    +                MST_TXFIFO_UDF_INT_ST: u1,
    +                ///  reg_trans_complete_int_st
    +                TRANS_COMPLETE_INT_ST: u1,
    +                ///  reg_time_out_int_st
    +                TIME_OUT_INT_ST: u1,
    +                ///  reg_trans_start_int_st
    +                TRANS_START_INT_ST: u1,
    +                ///  reg_nack_int_st
    +                NACK_INT_ST: u1,
    +                ///  reg_txfifo_ovf_int_st
    +                TXFIFO_OVF_INT_ST: u1,
    +                ///  reg_rxfifo_udf_int_st
    +                RXFIFO_UDF_INT_ST: u1,
    +                ///  reg_scl_st_to_int_st
    +                SCL_ST_TO_INT_ST: u1,
    +                ///  reg_scl_main_st_to_int_st
    +                SCL_MAIN_ST_TO_INT_ST: u1,
    +                ///  reg_det_start_int_st
    +                DET_START_INT_ST: u1,
    +                ///  reg_slave_stretch_int_st
    +                SLAVE_STRETCH_INT_ST: u1,
    +                ///  reg_general_call_int_st
    +                GENERAL_CALL_INT_ST: u1,
    +                padding: u14,
    +            }),
    +            ///  I2C_SDA_HOLD_REG
    +            SDA_HOLD: mmio.Mmio(packed struct(u32) {
    +                ///  reg_sda_hold_time
    +                TIME: u9,
    +                padding: u23,
    +            }),
    +            ///  I2C_SDA_SAMPLE_REG
    +            SDA_SAMPLE: mmio.Mmio(packed struct(u32) {
    +                ///  reg_sda_sample_time
    +                TIME: u9,
    +                padding: u23,
    +            }),
    +            ///  I2C_SCL_HIGH_PERIOD_REG
    +            SCL_HIGH_PERIOD: mmio.Mmio(packed struct(u32) {
    +                ///  reg_scl_high_period
    +                SCL_HIGH_PERIOD: u9,
    +                ///  reg_scl_wait_high_period
    +                SCL_WAIT_HIGH_PERIOD: u7,
    +                padding: u16,
    +            }),
    +            reserved64: [4]u8,
    +            ///  I2C_SCL_START_HOLD_REG
    +            SCL_START_HOLD: mmio.Mmio(packed struct(u32) {
    +                ///  reg_scl_start_hold_time
    +                TIME: u9,
    +                padding: u23,
    +            }),
    +            ///  I2C_SCL_RSTART_SETUP_REG
    +            SCL_RSTART_SETUP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_scl_rstart_setup_time
    +                TIME: u9,
    +                padding: u23,
    +            }),
    +            ///  I2C_SCL_STOP_HOLD_REG
    +            SCL_STOP_HOLD: mmio.Mmio(packed struct(u32) {
    +                ///  reg_scl_stop_hold_time
    +                TIME: u9,
    +                padding: u23,
    +            }),
    +            ///  I2C_SCL_STOP_SETUP_REG
    +            SCL_STOP_SETUP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_scl_stop_setup_time
    +                TIME: u9,
    +                padding: u23,
    +            }),
    +            ///  I2C_FILTER_CFG_REG
    +            FILTER_CFG: mmio.Mmio(packed struct(u32) {
    +                ///  reg_scl_filter_thres
    +                SCL_FILTER_THRES: u4,
    +                ///  reg_sda_filter_thres
    +                SDA_FILTER_THRES: u4,
    +                ///  reg_scl_filter_en
    +                SCL_FILTER_EN: u1,
    +                ///  reg_sda_filter_en
    +                SDA_FILTER_EN: u1,
    +                padding: u22,
    +            }),
    +            ///  I2C_CLK_CONF_REG
    +            CLK_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  reg_sclk_div_num
    +                SCLK_DIV_NUM: u8,
    +                ///  reg_sclk_div_a
    +                SCLK_DIV_A: u6,
    +                ///  reg_sclk_div_b
    +                SCLK_DIV_B: u6,
    +                ///  reg_sclk_sel
    +                SCLK_SEL: u1,
    +                ///  reg_sclk_active
    +                SCLK_ACTIVE: u1,
    +                padding: u10,
    +            }),
    +            ///  I2C_COMD%s_REG
    +            COMD: [8]mmio.Mmio(packed struct(u32) {
    +                ///  reg_command
    +                COMMAND: u14,
    +                reserved31: u17,
    +                ///  reg_command_done
    +                COMMAND_DONE: u1,
    +            }),
    +            ///  I2C_SCL_ST_TIME_OUT_REG
    +            SCL_ST_TIME_OUT: mmio.Mmio(packed struct(u32) {
    +                ///  reg_scl_st_to_regno more than 23
    +                SCL_ST_TO_I2C: u5,
    +                padding: u27,
    +            }),
    +            ///  I2C_SCL_MAIN_ST_TIME_OUT_REG
    +            SCL_MAIN_ST_TIME_OUT: mmio.Mmio(packed struct(u32) {
    +                ///  reg_scl_main_st_to_regno more than 23
    +                SCL_MAIN_ST_TO_I2C: u5,
    +                padding: u27,
    +            }),
    +            ///  I2C_SCL_SP_CONF_REG
    +            SCL_SP_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  reg_scl_rst_slv_en
    +                SCL_RST_SLV_EN: u1,
    +                ///  reg_scl_rst_slv_num
    +                SCL_RST_SLV_NUM: u5,
    +                ///  reg_scl_pd_en
    +                SCL_PD_EN: u1,
    +                ///  reg_sda_pd_en
    +                SDA_PD_EN: u1,
    +                padding: u24,
    +            }),
    +            ///  I2C_SCL_STRETCH_CONF_REG
    +            SCL_STRETCH_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  reg_stretch_protect_num
    +                STRETCH_PROTECT_NUM: u10,
    +                ///  reg_slave_scl_stretch_en
    +                SLAVE_SCL_STRETCH_EN: u1,
    +                ///  reg_slave_scl_stretch_clr
    +                SLAVE_SCL_STRETCH_CLR: u1,
    +                ///  reg_slave_byte_ack_ctl_en
    +                SLAVE_BYTE_ACK_CTL_EN: u1,
    +                ///  reg_slave_byte_ack_lvl
    +                SLAVE_BYTE_ACK_LVL: u1,
    +                padding: u18,
    +            }),
    +            reserved248: [112]u8,
    +            ///  I2C_DATE_REG
    +            DATE: mmio.Mmio(packed struct(u32) {
    +                ///  reg_date
    +                DATE: u32,
    +            }),
    +            reserved256: [4]u8,
    +            ///  I2C_TXFIFO_START_ADDR_REG
    +            TXFIFO_START_ADDR: mmio.Mmio(packed struct(u32) {
    +                ///  reg_txfifo_start_addr.
    +                TXFIFO_START_ADDR: u32,
    +            }),
    +            reserved384: [124]u8,
    +            ///  I2C_RXFIFO_START_ADDR_REG
    +            RXFIFO_START_ADDR: mmio.Mmio(packed struct(u32) {
    +                ///  reg_rxfifo_start_addr.
    +                RXFIFO_START_ADDR: u32,
    +            }),
    +        };
    +
    +        ///  I2S (Inter-IC Sound) Controller
    +        pub const I2S = extern struct {
    +            reserved12: [12]u8,
    +            ///  I2S interrupt raw register, valid in level.
    +            INT_RAW: mmio.Mmio(packed struct(u32) {
    +                ///  The raw interrupt status bit for the i2s_rx_done_int interrupt
    +                RX_DONE_INT_RAW: u1,
    +                ///  The raw interrupt status bit for the i2s_tx_done_int interrupt
    +                TX_DONE_INT_RAW: u1,
    +                ///  The raw interrupt status bit for the i2s_rx_hung_int interrupt
    +                RX_HUNG_INT_RAW: u1,
    +                ///  The raw interrupt status bit for the i2s_tx_hung_int interrupt
    +                TX_HUNG_INT_RAW: u1,
    +                padding: u28,
    +            }),
    +            ///  I2S interrupt status register.
    +            INT_ST: mmio.Mmio(packed struct(u32) {
    +                ///  The masked interrupt status bit for the i2s_rx_done_int interrupt
    +                RX_DONE_INT_ST: u1,
    +                ///  The masked interrupt status bit for the i2s_tx_done_int interrupt
    +                TX_DONE_INT_ST: u1,
    +                ///  The masked interrupt status bit for the i2s_rx_hung_int interrupt
    +                RX_HUNG_INT_ST: u1,
    +                ///  The masked interrupt status bit for the i2s_tx_hung_int interrupt
    +                TX_HUNG_INT_ST: u1,
    +                padding: u28,
    +            }),
    +            ///  I2S interrupt enable register.
    +            INT_ENA: mmio.Mmio(packed struct(u32) {
    +                ///  The interrupt enable bit for the i2s_rx_done_int interrupt
    +                RX_DONE_INT_ENA: u1,
    +                ///  The interrupt enable bit for the i2s_tx_done_int interrupt
    +                TX_DONE_INT_ENA: u1,
    +                ///  The interrupt enable bit for the i2s_rx_hung_int interrupt
    +                RX_HUNG_INT_ENA: u1,
    +                ///  The interrupt enable bit for the i2s_tx_hung_int interrupt
    +                TX_HUNG_INT_ENA: u1,
    +                padding: u28,
    +            }),
    +            ///  I2S interrupt clear register.
    +            INT_CLR: mmio.Mmio(packed struct(u32) {
    +                ///  Set this bit to clear the i2s_rx_done_int interrupt
    +                RX_DONE_INT_CLR: u1,
    +                ///  Set this bit to clear the i2s_tx_done_int interrupt
    +                TX_DONE_INT_CLR: u1,
    +                ///  Set this bit to clear the i2s_rx_hung_int interrupt
    +                RX_HUNG_INT_CLR: u1,
    +                ///  Set this bit to clear the i2s_tx_hung_int interrupt
    +                TX_HUNG_INT_CLR: u1,
    +                padding: u28,
    +            }),
    +            reserved32: [4]u8,
    +            ///  I2S RX configure register
    +            RX_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  Set this bit to reset receiver
    +                RX_RESET: u1,
    +                ///  Set this bit to reset Rx AFIFO
    +                RX_FIFO_RESET: u1,
    +                ///  Set this bit to start receiving data
    +                RX_START: u1,
    +                ///  Set this bit to enable slave receiver mode
    +                RX_SLAVE_MOD: u1,
    +                reserved5: u1,
    +                ///  Set this bit to enable receiver in mono mode
    +                RX_MONO: u1,
    +                reserved7: u1,
    +                ///  I2S Rx byte endian, 1: low addr value to high addr. 0: low addr with low addr value.
    +                RX_BIG_ENDIAN: u1,
    +                ///  Set 1 to update I2S RX registers from APB clock domain to I2S RX clock domain. This bit will be cleared by hardware after update register done.
    +                RX_UPDATE: u1,
    +                ///  1: The first channel data value is valid in I2S RX mono mode. 0: The second channel data value is valid in I2S RX mono mode.
    +                RX_MONO_FST_VLD: u1,
    +                ///  I2S RX compress/decompress configuration bit. & 0 (atol): A-Law decompress, 1 (ltoa) : A-Law compress, 2 (utol) : u-Law decompress, 3 (ltou) : u-Law compress. &
    +                RX_PCM_CONF: u2,
    +                ///  Set this bit to bypass Compress/Decompress module for received data.
    +                RX_PCM_BYPASS: u1,
    +                ///  0 : I2S Rx only stop when reg_rx_start is cleared. 1: Stop when reg_rx_start is 0 or in_suc_eof is 1. 2: Stop I2S RX when reg_rx_start is 0 or RX FIFO is full.
    +                RX_STOP_MODE: u2,
    +                ///  1: I2S RX left alignment mode. 0: I2S RX right alignment mode.
    +                RX_LEFT_ALIGN: u1,
    +                ///  1: store 24 channel bits to 32 bits. 0:store 24 channel bits to 24 bits.
    +                RX_24_FILL_EN: u1,
    +                ///  0: WS should be 0 when receiving left channel data, and WS is 1in right channel. 1: WS should be 1 when receiving left channel data, and WS is 0in right channel.
    +                RX_WS_IDLE_POL: u1,
    +                ///  I2S Rx bit endian. 1:small endian, the LSB is received first. 0:big endian, the MSB is received first.
    +                RX_BIT_ORDER: u1,
    +                ///  1: Enable I2S TDM Rx mode . 0: Disable.
    +                RX_TDM_EN: u1,
    +                ///  1: Enable I2S PDM Rx mode . 0: Disable.
    +                RX_PDM_EN: u1,
    +                padding: u11,
    +            }),
    +            ///  I2S TX configure register
    +            TX_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  Set this bit to reset transmitter
    +                TX_RESET: u1,
    +                ///  Set this bit to reset Tx AFIFO
    +                TX_FIFO_RESET: u1,
    +                ///  Set this bit to start transmitting data
    +                TX_START: u1,
    +                ///  Set this bit to enable slave transmitter mode
    +                TX_SLAVE_MOD: u1,
    +                reserved5: u1,
    +                ///  Set this bit to enable transmitter in mono mode
    +                TX_MONO: u1,
    +                ///  1: The value of Left channel data is equal to the value of right channel data in I2S TX mono mode or TDM channel select mode. 0: The invalid channel data is reg_i2s_single_data in I2S TX mono mode or TDM channel select mode.
    +                TX_CHAN_EQUAL: u1,
    +                ///  I2S Tx byte endian, 1: low addr value to high addr. 0: low addr with low addr value.
    +                TX_BIG_ENDIAN: u1,
    +                ///  Set 1 to update I2S TX registers from APB clock domain to I2S TX clock domain. This bit will be cleared by hardware after update register done.
    +                TX_UPDATE: u1,
    +                ///  1: The first channel data value is valid in I2S TX mono mode. 0: The second channel data value is valid in I2S TX mono mode.
    +                TX_MONO_FST_VLD: u1,
    +                ///  I2S TX compress/decompress configuration bit. & 0 (atol): A-Law decompress, 1 (ltoa) : A-Law compress, 2 (utol) : u-Law decompress, 3 (ltou) : u-Law compress. &
    +                TX_PCM_CONF: u2,
    +                ///  Set this bit to bypass Compress/Decompress module for transmitted data.
    +                TX_PCM_BYPASS: u1,
    +                ///  Set this bit to stop disable output BCK signal and WS signal when tx FIFO is emtpy
    +                TX_STOP_EN: u1,
    +                reserved15: u1,
    +                ///  1: I2S TX left alignment mode. 0: I2S TX right alignment mode.
    +                TX_LEFT_ALIGN: u1,
    +                ///  1: Sent 32 bits in 24 channel bits mode. 0: Sent 24 bits in 24 channel bits mode
    +                TX_24_FILL_EN: u1,
    +                ///  0: WS should be 0 when sending left channel data, and WS is 1in right channel. 1: WS should be 1 when sending left channel data, and WS is 0in right channel.
    +                TX_WS_IDLE_POL: u1,
    +                ///  I2S Tx bit endian. 1:small endian, the LSB is sent first. 0:big endian, the MSB is sent first.
    +                TX_BIT_ORDER: u1,
    +                ///  1: Enable I2S TDM Tx mode . 0: Disable.
    +                TX_TDM_EN: u1,
    +                ///  1: Enable I2S PDM Tx mode . 0: Disable.
    +                TX_PDM_EN: u1,
    +                reserved24: u3,
    +                ///  I2S transmitter channel mode configuration bits.
    +                TX_CHAN_MOD: u3,
    +                ///  Enable signal loop back mode with transmitter module and receiver module sharing the same WS and BCK signals.
    +                SIG_LOOPBACK: u1,
    +                padding: u4,
    +            }),
    +            ///  I2S RX configure register 1
    +            RX_CONF1: mmio.Mmio(packed struct(u32) {
    +                ///  The width of rx_ws_out in TDM mode is (I2S_RX_TDM_WS_WIDTH[6:0] +1) * T_bck
    +                RX_TDM_WS_WIDTH: u7,
    +                ///  Bit clock configuration bits in receiver mode.
    +                RX_BCK_DIV_NUM: u6,
    +                ///  Set the bits to configure the valid data bit length of I2S receiver channel. 7: all the valid channel data is in 8-bit-mode. 15: all the valid channel data is in 16-bit-mode. 23: all the valid channel data is in 24-bit-mode. 31:all the valid channel data is in 32-bit-mode.
    +                RX_BITS_MOD: u5,
    +                ///  I2S Rx half sample bits -1.
    +                RX_HALF_SAMPLE_BITS: u6,
    +                ///  The Rx bit number for each channel minus 1in TDM mode.
    +                RX_TDM_CHAN_BITS: u5,
    +                ///  Set this bit to enable receiver in Phillips standard mode
    +                RX_MSB_SHIFT: u1,
    +                padding: u2,
    +            }),
    +            ///  I2S TX configure register 1
    +            TX_CONF1: mmio.Mmio(packed struct(u32) {
    +                ///  The width of tx_ws_out in TDM mode is (I2S_TX_TDM_WS_WIDTH[6:0] +1) * T_bck
    +                TX_TDM_WS_WIDTH: u7,
    +                ///  Bit clock configuration bits in transmitter mode.
    +                TX_BCK_DIV_NUM: u6,
    +                ///  Set the bits to configure the valid data bit length of I2S transmitter channel. 7: all the valid channel data is in 8-bit-mode. 15: all the valid channel data is in 16-bit-mode. 23: all the valid channel data is in 24-bit-mode. 31:all the valid channel data is in 32-bit-mode.
    +                TX_BITS_MOD: u5,
    +                ///  I2S Tx half sample bits -1.
    +                TX_HALF_SAMPLE_BITS: u6,
    +                ///  The Tx bit number for each channel minus 1in TDM mode.
    +                TX_TDM_CHAN_BITS: u5,
    +                ///  Set this bit to enable transmitter in Phillips standard mode
    +                TX_MSB_SHIFT: u1,
    +                ///  1: BCK is not delayed to generate pos/neg edge in master mode. 0: BCK is delayed to generate pos/neg edge in master mode.
    +                TX_BCK_NO_DLY: u1,
    +                padding: u1,
    +            }),
    +            ///  I2S RX clock configure register
    +            RX_CLKM_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  Integral I2S clock divider value
    +                RX_CLKM_DIV_NUM: u8,
    +                reserved26: u18,
    +                ///  I2S Rx module clock enable signal.
    +                RX_CLK_ACTIVE: u1,
    +                ///  Select I2S Rx module source clock. 0: no clock. 1: APLL. 2: CLK160. 3: I2S_MCLK_in.
    +                RX_CLK_SEL: u2,
    +                ///  0: UseI2S Tx module clock as I2S_MCLK_OUT. 1: UseI2S Rx module clock as I2S_MCLK_OUT.
    +                MCLK_SEL: u1,
    +                padding: u2,
    +            }),
    +            ///  I2S TX clock configure register
    +            TX_CLKM_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  Integral I2S TX clock divider value. f_I2S_CLK = f_I2S_CLK_S/(N+b/a). There will be (a-b) * n-div and b * (n+1)-div. So the average combination will be: for b <= a/2, z * [x * n-div + (n+1)-div] + y * n-div. For b > a/2, z * [n-div + x * (n+1)-div] + y * (n+1)-div.
    +                TX_CLKM_DIV_NUM: u8,
    +                reserved26: u18,
    +                ///  I2S Tx module clock enable signal.
    +                TX_CLK_ACTIVE: u1,
    +                ///  Select I2S Tx module source clock. 0: XTAL clock. 1: APLL. 2: CLK160. 3: I2S_MCLK_in.
    +                TX_CLK_SEL: u2,
    +                ///  Set this bit to enable clk gate
    +                CLK_EN: u1,
    +                padding: u2,
    +            }),
    +            ///  I2S RX module clock divider configure register
    +            RX_CLKM_DIV_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  For b <= a/2, the value of I2S_RX_CLKM_DIV_Z is b. For b > a/2, the value of I2S_RX_CLKM_DIV_Z is (a-b).
    +                RX_CLKM_DIV_Z: u9,
    +                ///  For b <= a/2, the value of I2S_RX_CLKM_DIV_Y is (a%b) . For b > a/2, the value of I2S_RX_CLKM_DIV_Y is (a%(a-b)).
    +                RX_CLKM_DIV_Y: u9,
    +                ///  For b <= a/2, the value of I2S_RX_CLKM_DIV_X is (a/b) - 1. For b > a/2, the value of I2S_RX_CLKM_DIV_X is (a/(a-b)) - 1.
    +                RX_CLKM_DIV_X: u9,
    +                ///  For b <= a/2, the value of I2S_RX_CLKM_DIV_YN1 is 0 . For b > a/2, the value of I2S_RX_CLKM_DIV_YN1 is 1.
    +                RX_CLKM_DIV_YN1: u1,
    +                padding: u4,
    +            }),
    +            ///  I2S TX module clock divider configure register
    +            TX_CLKM_DIV_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  For b <= a/2, the value of I2S_TX_CLKM_DIV_Z is b. For b > a/2, the value of I2S_TX_CLKM_DIV_Z is (a-b).
    +                TX_CLKM_DIV_Z: u9,
    +                ///  For b <= a/2, the value of I2S_TX_CLKM_DIV_Y is (a%b) . For b > a/2, the value of I2S_TX_CLKM_DIV_Y is (a%(a-b)).
    +                TX_CLKM_DIV_Y: u9,
    +                ///  For b <= a/2, the value of I2S_TX_CLKM_DIV_X is (a/b) - 1. For b > a/2, the value of I2S_TX_CLKM_DIV_X is (a/(a-b)) - 1.
    +                TX_CLKM_DIV_X: u9,
    +                ///  For b <= a/2, the value of I2S_TX_CLKM_DIV_YN1 is 0 . For b > a/2, the value of I2S_TX_CLKM_DIV_YN1 is 1.
    +                TX_CLKM_DIV_YN1: u1,
    +                padding: u4,
    +            }),
    +            ///  I2S TX PCM2PDM configuration register
    +            TX_PCM2PDM_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  I2S TX PDM bypass hp filter or not. The option has been removed.
    +                TX_PDM_HP_BYPASS: u1,
    +                ///  I2S TX PDM OSR2 value
    +                TX_PDM_SINC_OSR2: u4,
    +                ///  I2S TX PDM prescale for sigmadelta
    +                TX_PDM_PRESCALE: u8,
    +                ///  I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4
    +                TX_PDM_HP_IN_SHIFT: u2,
    +                ///  I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4
    +                TX_PDM_LP_IN_SHIFT: u2,
    +                ///  I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4
    +                TX_PDM_SINC_IN_SHIFT: u2,
    +                ///  I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4
    +                TX_PDM_SIGMADELTA_IN_SHIFT: u2,
    +                ///  I2S TX PDM sigmadelta dither2 value
    +                TX_PDM_SIGMADELTA_DITHER2: u1,
    +                ///  I2S TX PDM sigmadelta dither value
    +                TX_PDM_SIGMADELTA_DITHER: u1,
    +                ///  I2S TX PDM dac mode enable
    +                TX_PDM_DAC_2OUT_EN: u1,
    +                ///  I2S TX PDM dac 2channel enable
    +                TX_PDM_DAC_MODE_EN: u1,
    +                ///  I2S TX PDM Converter enable
    +                PCM2PDM_CONV_EN: u1,
    +                padding: u6,
    +            }),
    +            ///  I2S TX PCM2PDM configuration register
    +            TX_PCM2PDM_CONF1: mmio.Mmio(packed struct(u32) {
    +                ///  I2S TX PDM Fp
    +                TX_PDM_FP: u10,
    +                ///  I2S TX PDM Fs
    +                TX_PDM_FS: u10,
    +                ///  The fourth parameter of PDM TX IIR_HP filter stage 2 is (504 + I2S_TX_IIR_HP_MULT12_5[2:0])
    +                TX_IIR_HP_MULT12_5: u3,
    +                ///  The fourth parameter of PDM TX IIR_HP filter stage 1 is (504 + I2S_TX_IIR_HP_MULT12_0[2:0])
    +                TX_IIR_HP_MULT12_0: u3,
    +                padding: u6,
    +            }),
    +            reserved80: [8]u8,
    +            ///  I2S TX TDM mode control register
    +            RX_TDM_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  1: Enable the valid data input of I2S RX TDM or PDM channel 0. 0: Disable, just input 0 in this channel.
    +                RX_TDM_PDM_CHAN0_EN: u1,
    +                ///  1: Enable the valid data input of I2S RX TDM or PDM channel 1. 0: Disable, just input 0 in this channel.
    +                RX_TDM_PDM_CHAN1_EN: u1,
    +                ///  1: Enable the valid data input of I2S RX TDM or PDM channel 2. 0: Disable, just input 0 in this channel.
    +                RX_TDM_PDM_CHAN2_EN: u1,
    +                ///  1: Enable the valid data input of I2S RX TDM or PDM channel 3. 0: Disable, just input 0 in this channel.
    +                RX_TDM_PDM_CHAN3_EN: u1,
    +                ///  1: Enable the valid data input of I2S RX TDM or PDM channel 4. 0: Disable, just input 0 in this channel.
    +                RX_TDM_PDM_CHAN4_EN: u1,
    +                ///  1: Enable the valid data input of I2S RX TDM or PDM channel 5. 0: Disable, just input 0 in this channel.
    +                RX_TDM_PDM_CHAN5_EN: u1,
    +                ///  1: Enable the valid data input of I2S RX TDM or PDM channel 6. 0: Disable, just input 0 in this channel.
    +                RX_TDM_PDM_CHAN6_EN: u1,
    +                ///  1: Enable the valid data input of I2S RX TDM or PDM channel 7. 0: Disable, just input 0 in this channel.
    +                RX_TDM_PDM_CHAN7_EN: u1,
    +                ///  1: Enable the valid data input of I2S RX TDM channel 8. 0: Disable, just input 0 in this channel.
    +                RX_TDM_CHAN8_EN: u1,
    +                ///  1: Enable the valid data input of I2S RX TDM channel 9. 0: Disable, just input 0 in this channel.
    +                RX_TDM_CHAN9_EN: u1,
    +                ///  1: Enable the valid data input of I2S RX TDM channel 10. 0: Disable, just input 0 in this channel.
    +                RX_TDM_CHAN10_EN: u1,
    +                ///  1: Enable the valid data input of I2S RX TDM channel 11. 0: Disable, just input 0 in this channel.
    +                RX_TDM_CHAN11_EN: u1,
    +                ///  1: Enable the valid data input of I2S RX TDM channel 12. 0: Disable, just input 0 in this channel.
    +                RX_TDM_CHAN12_EN: u1,
    +                ///  1: Enable the valid data input of I2S RX TDM channel 13. 0: Disable, just input 0 in this channel.
    +                RX_TDM_CHAN13_EN: u1,
    +                ///  1: Enable the valid data input of I2S RX TDM channel 14. 0: Disable, just input 0 in this channel.
    +                RX_TDM_CHAN14_EN: u1,
    +                ///  1: Enable the valid data input of I2S RX TDM channel 15. 0: Disable, just input 0 in this channel.
    +                RX_TDM_CHAN15_EN: u1,
    +                ///  The total channel number of I2S TX TDM mode.
    +                RX_TDM_TOT_CHAN_NUM: u4,
    +                padding: u12,
    +            }),
    +            ///  I2S TX TDM mode control register
    +            TX_TDM_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  1: Enable the valid data output of I2S TX TDM channel 0. 0: Disable, just output 0 in this channel.
    +                TX_TDM_CHAN0_EN: u1,
    +                ///  1: Enable the valid data output of I2S TX TDM channel 1. 0: Disable, just output 0 in this channel.
    +                TX_TDM_CHAN1_EN: u1,
    +                ///  1: Enable the valid data output of I2S TX TDM channel 2. 0: Disable, just output 0 in this channel.
    +                TX_TDM_CHAN2_EN: u1,
    +                ///  1: Enable the valid data output of I2S TX TDM channel 3. 0: Disable, just output 0 in this channel.
    +                TX_TDM_CHAN3_EN: u1,
    +                ///  1: Enable the valid data output of I2S TX TDM channel 4. 0: Disable, just output 0 in this channel.
    +                TX_TDM_CHAN4_EN: u1,
    +                ///  1: Enable the valid data output of I2S TX TDM channel 5. 0: Disable, just output 0 in this channel.
    +                TX_TDM_CHAN5_EN: u1,
    +                ///  1: Enable the valid data output of I2S TX TDM channel 6. 0: Disable, just output 0 in this channel.
    +                TX_TDM_CHAN6_EN: u1,
    +                ///  1: Enable the valid data output of I2S TX TDM channel 7. 0: Disable, just output 0 in this channel.
    +                TX_TDM_CHAN7_EN: u1,
    +                ///  1: Enable the valid data output of I2S TX TDM channel 8. 0: Disable, just output 0 in this channel.
    +                TX_TDM_CHAN8_EN: u1,
    +                ///  1: Enable the valid data output of I2S TX TDM channel 9. 0: Disable, just output 0 in this channel.
    +                TX_TDM_CHAN9_EN: u1,
    +                ///  1: Enable the valid data output of I2S TX TDM channel 10. 0: Disable, just output 0 in this channel.
    +                TX_TDM_CHAN10_EN: u1,
    +                ///  1: Enable the valid data output of I2S TX TDM channel 11. 0: Disable, just output 0 in this channel.
    +                TX_TDM_CHAN11_EN: u1,
    +                ///  1: Enable the valid data output of I2S TX TDM channel 12. 0: Disable, just output 0 in this channel.
    +                TX_TDM_CHAN12_EN: u1,
    +                ///  1: Enable the valid data output of I2S TX TDM channel 13. 0: Disable, just output 0 in this channel.
    +                TX_TDM_CHAN13_EN: u1,
    +                ///  1: Enable the valid data output of I2S TX TDM channel 14. 0: Disable, just output 0 in this channel.
    +                TX_TDM_CHAN14_EN: u1,
    +                ///  1: Enable the valid data output of I2S TX TDM channel 15. 0: Disable, just output 0 in this channel.
    +                TX_TDM_CHAN15_EN: u1,
    +                ///  The total channel number of I2S TX TDM mode.
    +                TX_TDM_TOT_CHAN_NUM: u4,
    +                ///  When DMA TX buffer stores the data of (REG_TX_TDM_TOT_CHAN_NUM + 1) channels, and only the data of the enabled channels is sent, then this bit should be set. Clear it when all the data stored in DMA TX buffer is for enabled channels.
    +                TX_TDM_SKIP_MSK_EN: u1,
    +                padding: u11,
    +            }),
    +            ///  I2S RX timing control register
    +            RX_TIMING: mmio.Mmio(packed struct(u32) {
    +                ///  The delay mode of I2S Rx SD input signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used.
    +                RX_SD_IN_DM: u2,
    +                reserved16: u14,
    +                ///  The delay mode of I2S Rx WS output signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used.
    +                RX_WS_OUT_DM: u2,
    +                reserved20: u2,
    +                ///  The delay mode of I2S Rx BCK output signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used.
    +                RX_BCK_OUT_DM: u2,
    +                reserved24: u2,
    +                ///  The delay mode of I2S Rx WS input signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used.
    +                RX_WS_IN_DM: u2,
    +                reserved28: u2,
    +                ///  The delay mode of I2S Rx BCK input signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used.
    +                RX_BCK_IN_DM: u2,
    +                padding: u2,
    +            }),
    +            ///  I2S TX timing control register
    +            TX_TIMING: mmio.Mmio(packed struct(u32) {
    +                ///  The delay mode of I2S TX SD output signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used.
    +                TX_SD_OUT_DM: u2,
    +                reserved4: u2,
    +                ///  The delay mode of I2S TX SD1 output signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used.
    +                TX_SD1_OUT_DM: u2,
    +                reserved16: u10,
    +                ///  The delay mode of I2S TX WS output signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used.
    +                TX_WS_OUT_DM: u2,
    +                reserved20: u2,
    +                ///  The delay mode of I2S TX BCK output signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used.
    +                TX_BCK_OUT_DM: u2,
    +                reserved24: u2,
    +                ///  The delay mode of I2S TX WS input signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used.
    +                TX_WS_IN_DM: u2,
    +                reserved28: u2,
    +                ///  The delay mode of I2S TX BCK input signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used.
    +                TX_BCK_IN_DM: u2,
    +                padding: u2,
    +            }),
    +            ///  I2S HUNG configure register.
    +            LC_HUNG_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  the i2s_tx_hung_int interrupt or the i2s_rx_hung_int interrupt will be triggered when fifo hung counter is equal to this value
    +                LC_FIFO_TIMEOUT: u8,
    +                ///  The bits are used to scale tick counter threshold. The tick counter is reset when counter value >= 88000/2^i2s_lc_fifo_timeout_shift
    +                LC_FIFO_TIMEOUT_SHIFT: u3,
    +                ///  The enable bit for FIFO timeout
    +                LC_FIFO_TIMEOUT_ENA: u1,
    +                padding: u20,
    +            }),
    +            ///  I2S RX data number control register.
    +            RXEOF_NUM: mmio.Mmio(packed struct(u32) {
    +                ///  The receive data bit length is (I2S_RX_BITS_MOD[4:0] + 1) * (REG_RX_EOF_NUM[11:0] + 1) . It will trigger in_suc_eof interrupt in the configured DMA RX channel.
    +                RX_EOF_NUM: u12,
    +                padding: u20,
    +            }),
    +            ///  I2S signal data register
    +            CONF_SIGLE_DATA: mmio.Mmio(packed struct(u32) {
    +                ///  The configured constant channel data to be sent out.
    +                SINGLE_DATA: u32,
    +            }),
    +            ///  I2S TX status register
    +            STATE: mmio.Mmio(packed struct(u32) {
    +                ///  1: i2s_tx is idle state. 0: i2s_tx is working.
    +                TX_IDLE: u1,
    +                padding: u31,
    +            }),
    +            reserved128: [16]u8,
    +            ///  Version control register
    +            DATE: mmio.Mmio(packed struct(u32) {
    +                ///  I2S version control register
    +                DATE: u28,
    +                padding: u4,
    +            }),
    +        };
    +
    +        ///  Interrupt Core
    +        pub const INTERRUPT_CORE0 = extern struct {
    +            ///  mac intr map register
    +            MAC_INTR_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  core0_mac_intr_map
    +                MAC_INTR_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  mac nmi_intr map register
    +            MAC_NMI_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_mac_nmi_map
    +                MAC_NMI_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  pwr intr map register
    +            PWR_INTR_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_pwr_intr_map
    +                PWR_INTR_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  bb intr map register
    +            BB_INT_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_bb_int_map
    +                BB_INT_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  bt intr map register
    +            BT_MAC_INT_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_bt_mac_int_map
    +                BT_MAC_INT_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  bb_bt intr map register
    +            BT_BB_INT_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_bt_bb_int_map
    +                BT_BB_INT_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  bb_bt_nmi intr map register
    +            BT_BB_NMI_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_bt_bb_nmi_map
    +                BT_BB_NMI_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  rwbt intr map register
    +            RWBT_IRQ_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_rwbt_irq_map
    +                RWBT_IRQ_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  rwble intr map register
    +            RWBLE_IRQ_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_rwble_irq_map
    +                RWBLE_IRQ_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  rwbt_nmi intr map register
    +            RWBT_NMI_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_rwbt_nmi_map
    +                RWBT_NMI_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  rwble_nmi intr map register
    +            RWBLE_NMI_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_rwble_nmi_map
    +                RWBLE_NMI_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  i2c intr map register
    +            I2C_MST_INT_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_i2c_mst_int_map
    +                I2C_MST_INT_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  slc0 intr map register
    +            SLC0_INTR_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_slc0_intr_map
    +                SLC0_INTR_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  slc1 intr map register
    +            SLC1_INTR_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_slc1_intr_map
    +                SLC1_INTR_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  apb_ctrl intr map register
    +            APB_CTRL_INTR_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_apb_ctrl_intr_map
    +                APB_CTRL_INTR_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  uchi0 intr map register
    +            UHCI0_INTR_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_uhci0_intr_map
    +                UHCI0_INTR_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  gpio intr map register
    +            GPIO_INTERRUPT_PRO_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_gpio_interrupt_pro_map
    +                GPIO_INTERRUPT_PRO_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  gpio_pro intr map register
    +            GPIO_INTERRUPT_PRO_NMI_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_gpio_interrupt_pro_nmi_map
    +                GPIO_INTERRUPT_PRO_NMI_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  gpio_pro_nmi intr map register
    +            SPI_INTR_1_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_spi_intr_1_map
    +                SPI_INTR_1_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  spi1 intr map register
    +            SPI_INTR_2_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_spi_intr_2_map
    +                SPI_INTR_2_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  spi2 intr map register
    +            I2S1_INT_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_i2s1_int_map
    +                I2S1_INT_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  i2s1 intr map register
    +            UART_INTR_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_uart_intr_map
    +                UART_INTR_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  uart1 intr map register
    +            UART1_INTR_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_uart1_intr_map
    +                UART1_INTR_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  ledc intr map register
    +            LEDC_INT_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_ledc_int_map
    +                LEDC_INT_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  efuse intr map register
    +            EFUSE_INT_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_efuse_int_map
    +                EFUSE_INT_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  can intr map register
    +            CAN_INT_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_can_int_map
    +                CAN_INT_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  usb intr map register
    +            USB_INTR_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_usb_intr_map
    +                USB_INTR_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  rtc intr map register
    +            RTC_CORE_INTR_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_rtc_core_intr_map
    +                RTC_CORE_INTR_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  rmt intr map register
    +            RMT_INTR_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_rmt_intr_map
    +                RMT_INTR_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  i2c intr map register
    +            I2C_EXT0_INTR_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_i2c_ext0_intr_map
    +                I2C_EXT0_INTR_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  timer1 intr map register
    +            TIMER_INT1_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_timer_int1_map
    +                TIMER_INT1_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  timer2 intr map register
    +            TIMER_INT2_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_timer_int2_map
    +                TIMER_INT2_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  tg to intr map register
    +            TG_T0_INT_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_tg_t0_int_map
    +                TG_T0_INT_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  tg wdt intr map register
    +            TG_WDT_INT_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_tg_wdt_int_map
    +                TG_WDT_INT_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  tg1 to intr map register
    +            TG1_T0_INT_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_tg1_t0_int_map
    +                TG1_T0_INT_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  tg1 wdt intr map register
    +            TG1_WDT_INT_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_tg1_wdt_int_map
    +                TG1_WDT_INT_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  cache ia intr map register
    +            CACHE_IA_INT_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cache_ia_int_map
    +                CACHE_IA_INT_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  systimer intr map register
    +            SYSTIMER_TARGET0_INT_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_systimer_target0_int_map
    +                SYSTIMER_TARGET0_INT_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  systimer target1 intr map register
    +            SYSTIMER_TARGET1_INT_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_systimer_target1_int_map
    +                SYSTIMER_TARGET1_INT_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  systimer target2 intr map register
    +            SYSTIMER_TARGET2_INT_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_systimer_target2_int_map
    +                SYSTIMER_TARGET2_INT_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  spi mem reject intr map register
    +            SPI_MEM_REJECT_INTR_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_spi_mem_reject_intr_map
    +                SPI_MEM_REJECT_INTR_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  icache perload intr map register
    +            ICACHE_PRELOAD_INT_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_icache_preload_int_map
    +                ICACHE_PRELOAD_INT_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  icache sync intr map register
    +            ICACHE_SYNC_INT_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_icache_sync_int_map
    +                ICACHE_SYNC_INT_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  adc intr map register
    +            APB_ADC_INT_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_apb_adc_int_map
    +                APB_ADC_INT_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  dma ch0 intr map register
    +            DMA_CH0_INT_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_dma_ch0_int_map
    +                DMA_CH0_INT_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  dma ch1 intr map register
    +            DMA_CH1_INT_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_dma_ch1_int_map
    +                DMA_CH1_INT_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  dma ch2 intr map register
    +            DMA_CH2_INT_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_dma_ch2_int_map
    +                DMA_CH2_INT_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  rsa intr map register
    +            RSA_INT_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_rsa_int_map
    +                RSA_INT_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  aes intr map register
    +            AES_INT_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_aes_int_map
    +                AES_INT_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  sha intr map register
    +            SHA_INT_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_sha_int_map
    +                SHA_INT_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  cpu from cpu 0 intr map register
    +            CPU_INTR_FROM_CPU_0_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_intr_from_cpu_0_map
    +                CPU_INTR_FROM_CPU_0_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  cpu from cpu 0 intr map register
    +            CPU_INTR_FROM_CPU_1_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_intr_from_cpu_1_map
    +                CPU_INTR_FROM_CPU_1_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  cpu from cpu 1 intr map register
    +            CPU_INTR_FROM_CPU_2_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_intr_from_cpu_2_map
    +                CPU_INTR_FROM_CPU_2_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  cpu from cpu 3 intr map register
    +            CPU_INTR_FROM_CPU_3_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_intr_from_cpu_3_map
    +                CPU_INTR_FROM_CPU_3_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  assist debug intr map register
    +            ASSIST_DEBUG_INTR_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_assist_debug_intr_map
    +                ASSIST_DEBUG_INTR_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  dma pms violatile intr map register
    +            DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_dma_apbperi_pms_monitor_violate_intr_map
    +                DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  iram0 pms violatile intr map register
    +            CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_core_0_iram0_pms_monitor_violate_intr_map
    +                CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  mac intr map register
    +            CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_core_0_dram0_pms_monitor_violate_intr_map
    +                CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  mac intr map register
    +            CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_core_0_pif_pms_monitor_violate_intr_map
    +                CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  mac intr map register
    +            CORE_0_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_core_0_pif_pms_monitor_violate_size_intr_map
    +                CORE_0_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  mac intr map register
    +            BACKUP_PMS_VIOLATE_INTR_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_backup_pms_violate_intr_map
    +                BACKUP_PMS_VIOLATE_INTR_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  mac intr map register
    +            CACHE_CORE0_ACS_INT_MAP: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cache_core0_acs_int_map
    +                CACHE_CORE0_ACS_INT_MAP: u5,
    +                padding: u27,
    +            }),
    +            ///  mac intr map register
    +            INTR_STATUS_REG_0: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_intr_status_0
    +                INTR_STATUS_0: u32,
    +            }),
    +            ///  mac intr map register
    +            INTR_STATUS_REG_1: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_intr_status_1
    +                INTR_STATUS_1: u32,
    +            }),
    +            ///  mac intr map register
    +            CLOCK_GATE: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_reg_clk_en
    +                REG_CLK_EN: u1,
    +                padding: u31,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_int_enable
    +                CPU_INT_ENABLE: u32,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_TYPE: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_int_type
    +                CPU_INT_TYPE: u32,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_CLEAR: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_int_clear
    +                CPU_INT_CLEAR: u32,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_EIP_STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_int_eip_status
    +                CPU_INT_EIP_STATUS: u32,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_0: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_0_map
    +                CPU_PRI_0_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_1: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_1_map
    +                CPU_PRI_1_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_2: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_2_map
    +                CPU_PRI_2_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_3: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_3_map
    +                CPU_PRI_3_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_4: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_4_map
    +                CPU_PRI_4_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_5: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_5_map
    +                CPU_PRI_5_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_6: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_6_map
    +                CPU_PRI_6_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_7: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_7_map
    +                CPU_PRI_7_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_8: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_8_map
    +                CPU_PRI_8_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_9: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_9_map
    +                CPU_PRI_9_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_10: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_10_map
    +                CPU_PRI_10_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_11: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_11_map
    +                CPU_PRI_11_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_12: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_12_map
    +                CPU_PRI_12_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_13: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_13_map
    +                CPU_PRI_13_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_14: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_14_map
    +                CPU_PRI_14_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_15: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_15_map
    +                CPU_PRI_15_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_16: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_16_map
    +                CPU_PRI_16_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_17: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_17_map
    +                CPU_PRI_17_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_18: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_18_map
    +                CPU_PRI_18_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_19: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_19_map
    +                CPU_PRI_19_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_20: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_20_map
    +                CPU_PRI_20_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_21: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_21_map
    +                CPU_PRI_21_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_22: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_22_map
    +                CPU_PRI_22_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_23: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_23_map
    +                CPU_PRI_23_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_24: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_24_map
    +                CPU_PRI_24_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_25: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_25_map
    +                CPU_PRI_25_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_26: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_26_map
    +                CPU_PRI_26_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_27: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_27_map
    +                CPU_PRI_27_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_28: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_28_map
    +                CPU_PRI_28_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_29: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_29_map
    +                CPU_PRI_29_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_30: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_30_map
    +                CPU_PRI_30_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_PRI_31: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_pri_31_map
    +                CPU_PRI_31_MAP: u4,
    +                padding: u28,
    +            }),
    +            ///  mac intr map register
    +            CPU_INT_THRESH: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_cpu_int_thresh
    +                CPU_INT_THRESH: u4,
    +                padding: u28,
    +            }),
    +            reserved2044: [1636]u8,
    +            ///  mac intr map register
    +            INTERRUPT_REG_DATE: mmio.Mmio(packed struct(u32) {
    +                ///  reg_core0_interrupt_reg_date
    +                INTERRUPT_REG_DATE: u28,
    +                padding: u4,
    +            }),
    +        };
    +
    +        ///  Input/Output Multiplexer
    +        pub const IO_MUX = extern struct {
    +            ///  Clock Output Configuration Register
    +            PIN_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  If you want to output clock for I2S to CLK_OUT_out1, set this register to 0x0. CLK_OUT_out1 can be found in peripheral output signals.
    +                CLK_OUT1: u4,
    +                ///  If you want to output clock for I2S to CLK_OUT_out2, set this register to 0x0. CLK_OUT_out2 can be found in peripheral output signals.
    +                CLK_OUT2: u4,
    +                ///  If you want to output clock for I2S to CLK_OUT_out3, set this register to 0x0. CLK_OUT_out3 can be found in peripheral output signals.
    +                CLK_OUT3: u4,
    +                padding: u20,
    +            }),
    +            ///  IO MUX Configure Register for pad XTAL_32K_P
    +            GPIO: [22]mmio.Mmio(packed struct(u32) {
    +                ///  Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    +                MCU_OE: u1,
    +                ///  Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    +                SLP_SEL: u1,
    +                ///  Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0: internal pull-down disabled.
    +                MCU_WPD: u1,
    +                ///  Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0: internal pull-up disabled.
    +                MCU_WPU: u1,
    +                ///  Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    +                MCU_IE: u1,
    +                reserved7: u2,
    +                ///  Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal pull-down disabled.
    +                FUN_WPD: u1,
    +                ///  Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up disabled.
    +                FUN_WPU: u1,
    +                ///  Input enable of the pad. 1: input enabled; 0: input disabled.
    +                FUN_IE: u1,
    +                ///  Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    +                FUN_DRV: u2,
    +                ///  Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function 2; etc.
    +                MCU_SEL: u3,
    +                ///  Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    +                FILTER_EN: u1,
    +                padding: u16,
    +            }),
    +            reserved252: [160]u8,
    +            ///  IO MUX Version Control Register
    +            DATE: mmio.Mmio(packed struct(u32) {
    +                ///  Version control register
    +                REG_DATE: u28,
    +                padding: u4,
    +            }),
    +        };
    +
    +        ///  LED Control PWM (Pulse Width Modulation)
    +        pub const LEDC = extern struct {
    +            ///  LEDC_LSCH0_CONF0.
    +            LSCH0_CONF0: mmio.Mmio(packed struct(u32) {
    +                ///  reg_timer_sel_lsch0.
    +                TIMER_SEL_LSCH0: u2,
    +                ///  reg_sig_out_en_lsch0.
    +                SIG_OUT_EN_LSCH0: u1,
    +                ///  reg_idle_lv_lsch0.
    +                IDLE_LV_LSCH0: u1,
    +                ///  reg_para_up_lsch0.
    +                PARA_UP_LSCH0: u1,
    +                ///  reg_ovf_num_lsch0.
    +                OVF_NUM_LSCH0: u10,
    +                ///  reg_ovf_cnt_en_lsch0.
    +                OVF_CNT_EN_LSCH0: u1,
    +                ///  reg_ovf_cnt_reset_lsch0.
    +                OVF_CNT_RESET_LSCH0: u1,
    +                padding: u15,
    +            }),
    +            ///  LEDC_LSCH0_HPOINT.
    +            LSCH0_HPOINT: mmio.Mmio(packed struct(u32) {
    +                ///  reg_hpoint_lsch0.
    +                HPOINT_LSCH0: u14,
    +                padding: u18,
    +            }),
    +            ///  LEDC_LSCH0_DUTY.
    +            LSCH0_DUTY: mmio.Mmio(packed struct(u32) {
    +                ///  reg_duty_lsch0.
    +                DUTY_LSCH0: u19,
    +                padding: u13,
    +            }),
    +            ///  LEDC_LSCH0_CONF1.
    +            LSCH0_CONF1: mmio.Mmio(packed struct(u32) {
    +                ///  reg_duty_scale_lsch0.
    +                DUTY_SCALE_LSCH0: u10,
    +                ///  reg_duty_cycle_lsch0.
    +                DUTY_CYCLE_LSCH0: u10,
    +                ///  reg_duty_num_lsch0.
    +                DUTY_NUM_LSCH0: u10,
    +                ///  reg_duty_inc_lsch0.
    +                DUTY_INC_LSCH0: u1,
    +                ///  reg_duty_start_lsch0.
    +                DUTY_START_LSCH0: u1,
    +            }),
    +            ///  LEDC_LSCH0_DUTY_R.
    +            LSCH0_DUTY_R: mmio.Mmio(packed struct(u32) {
    +                ///  reg_duty_lsch0_r.
    +                DUTY_LSCH0_R: u19,
    +                padding: u13,
    +            }),
    +            ///  LEDC_LSCH1_CONF0.
    +            LSCH1_CONF0: mmio.Mmio(packed struct(u32) {
    +                ///  reg_timer_sel_lsch1.
    +                TIMER_SEL_LSCH1: u2,
    +                ///  reg_sig_out_en_lsch1.
    +                SIG_OUT_EN_LSCH1: u1,
    +                ///  reg_idle_lv_lsch1.
    +                IDLE_LV_LSCH1: u1,
    +                ///  reg_para_up_lsch1.
    +                PARA_UP_LSCH1: u1,
    +                ///  reg_ovf_num_lsch1.
    +                OVF_NUM_LSCH1: u10,
    +                ///  reg_ovf_cnt_en_lsch1.
    +                OVF_CNT_EN_LSCH1: u1,
    +                ///  reg_ovf_cnt_reset_lsch1.
    +                OVF_CNT_RESET_LSCH1: u1,
    +                padding: u15,
    +            }),
    +            ///  LEDC_LSCH1_HPOINT.
    +            LSCH1_HPOINT: mmio.Mmio(packed struct(u32) {
    +                ///  reg_hpoint_lsch1.
    +                HPOINT_LSCH1: u14,
    +                padding: u18,
    +            }),
    +            ///  LEDC_LSCH1_DUTY.
    +            LSCH1_DUTY: mmio.Mmio(packed struct(u32) {
    +                ///  reg_duty_lsch1.
    +                DUTY_LSCH1: u19,
    +                padding: u13,
    +            }),
    +            ///  LEDC_LSCH1_CONF1.
    +            LSCH1_CONF1: mmio.Mmio(packed struct(u32) {
    +                ///  reg_duty_scale_lsch1.
    +                DUTY_SCALE_LSCH1: u10,
    +                ///  reg_duty_cycle_lsch1.
    +                DUTY_CYCLE_LSCH1: u10,
    +                ///  reg_duty_num_lsch1.
    +                DUTY_NUM_LSCH1: u10,
    +                ///  reg_duty_inc_lsch1.
    +                DUTY_INC_LSCH1: u1,
    +                ///  reg_duty_start_lsch1.
    +                DUTY_START_LSCH1: u1,
    +            }),
    +            ///  LEDC_LSCH1_DUTY_R.
    +            LSCH1_DUTY_R: mmio.Mmio(packed struct(u32) {
    +                ///  reg_duty_lsch1_r.
    +                DUTY_LSCH1_R: u19,
    +                padding: u13,
    +            }),
    +            ///  LEDC_LSCH2_CONF0.
    +            LSCH2_CONF0: mmio.Mmio(packed struct(u32) {
    +                ///  reg_timer_sel_lsch2.
    +                TIMER_SEL_LSCH2: u2,
    +                ///  reg_sig_out_en_lsch2.
    +                SIG_OUT_EN_LSCH2: u1,
    +                ///  reg_idle_lv_lsch2.
    +                IDLE_LV_LSCH2: u1,
    +                ///  reg_para_up_lsch2.
    +                PARA_UP_LSCH2: u1,
    +                ///  reg_ovf_num_lsch2.
    +                OVF_NUM_LSCH2: u10,
    +                ///  reg_ovf_cnt_en_lsch2.
    +                OVF_CNT_EN_LSCH2: u1,
    +                ///  reg_ovf_cnt_reset_lsch2.
    +                OVF_CNT_RESET_LSCH2: u1,
    +                padding: u15,
    +            }),
    +            ///  LEDC_LSCH2_HPOINT.
    +            LSCH2_HPOINT: mmio.Mmio(packed struct(u32) {
    +                ///  reg_hpoint_lsch2.
    +                HPOINT_LSCH2: u14,
    +                padding: u18,
    +            }),
    +            ///  LEDC_LSCH2_DUTY.
    +            LSCH2_DUTY: mmio.Mmio(packed struct(u32) {
    +                ///  reg_duty_lsch2.
    +                DUTY_LSCH2: u19,
    +                padding: u13,
    +            }),
    +            ///  LEDC_LSCH2_CONF1.
    +            LSCH2_CONF1: mmio.Mmio(packed struct(u32) {
    +                ///  reg_duty_scale_lsch2.
    +                DUTY_SCALE_LSCH2: u10,
    +                ///  reg_duty_cycle_lsch2.
    +                DUTY_CYCLE_LSCH2: u10,
    +                ///  reg_duty_num_lsch2.
    +                DUTY_NUM_LSCH2: u10,
    +                ///  reg_duty_inc_lsch2.
    +                DUTY_INC_LSCH2: u1,
    +                ///  reg_duty_start_lsch2.
    +                DUTY_START_LSCH2: u1,
    +            }),
    +            ///  LEDC_LSCH2_DUTY_R.
    +            LSCH2_DUTY_R: mmio.Mmio(packed struct(u32) {
    +                ///  reg_duty_lsch2_r.
    +                DUTY_LSCH2_R: u19,
    +                padding: u13,
    +            }),
    +            ///  LEDC_LSCH3_CONF0.
    +            LSCH3_CONF0: mmio.Mmio(packed struct(u32) {
    +                ///  reg_timer_sel_lsch3.
    +                TIMER_SEL_LSCH3: u2,
    +                ///  reg_sig_out_en_lsch3.
    +                SIG_OUT_EN_LSCH3: u1,
    +                ///  reg_idle_lv_lsch3.
    +                IDLE_LV_LSCH3: u1,
    +                ///  reg_para_up_lsch3.
    +                PARA_UP_LSCH3: u1,
    +                ///  reg_ovf_num_lsch3.
    +                OVF_NUM_LSCH3: u10,
    +                ///  reg_ovf_cnt_en_lsch3.
    +                OVF_CNT_EN_LSCH3: u1,
    +                ///  reg_ovf_cnt_reset_lsch3.
    +                OVF_CNT_RESET_LSCH3: u1,
    +                padding: u15,
    +            }),
    +            ///  LEDC_LSCH3_HPOINT.
    +            LSCH3_HPOINT: mmio.Mmio(packed struct(u32) {
    +                ///  reg_hpoint_lsch3.
    +                HPOINT_LSCH3: u14,
    +                padding: u18,
    +            }),
    +            ///  LEDC_LSCH3_DUTY.
    +            LSCH3_DUTY: mmio.Mmio(packed struct(u32) {
    +                ///  reg_duty_lsch3.
    +                DUTY_LSCH3: u19,
    +                padding: u13,
    +            }),
    +            ///  LEDC_LSCH3_CONF1.
    +            LSCH3_CONF1: mmio.Mmio(packed struct(u32) {
    +                ///  reg_duty_scale_lsch3.
    +                DUTY_SCALE_LSCH3: u10,
    +                ///  reg_duty_cycle_lsch3.
    +                DUTY_CYCLE_LSCH3: u10,
    +                ///  reg_duty_num_lsch3.
    +                DUTY_NUM_LSCH3: u10,
    +                ///  reg_duty_inc_lsch3.
    +                DUTY_INC_LSCH3: u1,
    +                ///  reg_duty_start_lsch3.
    +                DUTY_START_LSCH3: u1,
    +            }),
    +            ///  LEDC_LSCH3_DUTY_R.
    +            LSCH3_DUTY_R: mmio.Mmio(packed struct(u32) {
    +                ///  reg_duty_lsch3_r.
    +                DUTY_LSCH3_R: u19,
    +                padding: u13,
    +            }),
    +            ///  LEDC_LSCH4_CONF0.
    +            LSCH4_CONF0: mmio.Mmio(packed struct(u32) {
    +                ///  reg_timer_sel_lsch4.
    +                TIMER_SEL_LSCH4: u2,
    +                ///  reg_sig_out_en_lsch4.
    +                SIG_OUT_EN_LSCH4: u1,
    +                ///  reg_idle_lv_lsch4.
    +                IDLE_LV_LSCH4: u1,
    +                ///  reg_para_up_lsch4.
    +                PARA_UP_LSCH4: u1,
    +                ///  reg_ovf_num_lsch4.
    +                OVF_NUM_LSCH4: u10,
    +                ///  reg_ovf_cnt_en_lsch4.
    +                OVF_CNT_EN_LSCH4: u1,
    +                ///  reg_ovf_cnt_reset_lsch4.
    +                OVF_CNT_RESET_LSCH4: u1,
    +                padding: u15,
    +            }),
    +            ///  LEDC_LSCH4_HPOINT.
    +            LSCH4_HPOINT: mmio.Mmio(packed struct(u32) {
    +                ///  reg_hpoint_lsch4.
    +                HPOINT_LSCH4: u14,
    +                padding: u18,
    +            }),
    +            ///  LEDC_LSCH4_DUTY.
    +            LSCH4_DUTY: mmio.Mmio(packed struct(u32) {
    +                ///  reg_duty_lsch4.
    +                DUTY_LSCH4: u19,
    +                padding: u13,
    +            }),
    +            ///  LEDC_LSCH4_CONF1.
    +            LSCH4_CONF1: mmio.Mmio(packed struct(u32) {
    +                ///  reg_duty_scale_lsch4.
    +                DUTY_SCALE_LSCH4: u10,
    +                ///  reg_duty_cycle_lsch4.
    +                DUTY_CYCLE_LSCH4: u10,
    +                ///  reg_duty_num_lsch4.
    +                DUTY_NUM_LSCH4: u10,
    +                ///  reg_duty_inc_lsch4.
    +                DUTY_INC_LSCH4: u1,
    +                ///  reg_duty_start_lsch4.
    +                DUTY_START_LSCH4: u1,
    +            }),
    +            ///  LEDC_LSCH4_DUTY_R.
    +            LSCH4_DUTY_R: mmio.Mmio(packed struct(u32) {
    +                ///  reg_duty_lsch4_r.
    +                DUTY_LSCH4_R: u19,
    +                padding: u13,
    +            }),
    +            ///  LEDC_LSCH5_CONF0.
    +            LSCH5_CONF0: mmio.Mmio(packed struct(u32) {
    +                ///  reg_timer_sel_lsch5.
    +                TIMER_SEL_LSCH5: u2,
    +                ///  reg_sig_out_en_lsch5.
    +                SIG_OUT_EN_LSCH5: u1,
    +                ///  reg_idle_lv_lsch5.
    +                IDLE_LV_LSCH5: u1,
    +                ///  reg_para_up_lsch5.
    +                PARA_UP_LSCH5: u1,
    +                ///  reg_ovf_num_lsch5.
    +                OVF_NUM_LSCH5: u10,
    +                ///  reg_ovf_cnt_en_lsch5.
    +                OVF_CNT_EN_LSCH5: u1,
    +                ///  reg_ovf_cnt_reset_lsch5.
    +                OVF_CNT_RESET_LSCH5: u1,
    +                padding: u15,
    +            }),
    +            ///  LEDC_LSCH5_HPOINT.
    +            LSCH5_HPOINT: mmio.Mmio(packed struct(u32) {
    +                ///  reg_hpoint_lsch5.
    +                HPOINT_LSCH5: u14,
    +                padding: u18,
    +            }),
    +            ///  LEDC_LSCH5_DUTY.
    +            LSCH5_DUTY: mmio.Mmio(packed struct(u32) {
    +                ///  reg_duty_lsch5.
    +                DUTY_LSCH5: u19,
    +                padding: u13,
    +            }),
    +            ///  LEDC_LSCH5_CONF1.
    +            LSCH5_CONF1: mmio.Mmio(packed struct(u32) {
    +                ///  reg_duty_scale_lsch5.
    +                DUTY_SCALE_LSCH5: u10,
    +                ///  reg_duty_cycle_lsch5.
    +                DUTY_CYCLE_LSCH5: u10,
    +                ///  reg_duty_num_lsch5.
    +                DUTY_NUM_LSCH5: u10,
    +                ///  reg_duty_inc_lsch5.
    +                DUTY_INC_LSCH5: u1,
    +                ///  reg_duty_start_lsch5.
    +                DUTY_START_LSCH5: u1,
    +            }),
    +            ///  LEDC_LSCH5_DUTY_R.
    +            LSCH5_DUTY_R: mmio.Mmio(packed struct(u32) {
    +                ///  reg_duty_lsch5_r.
    +                DUTY_LSCH5_R: u19,
    +                padding: u13,
    +            }),
    +            reserved160: [40]u8,
    +            ///  LEDC_LSTIMER0_CONF.
    +            LSTIMER0_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  reg_lstimer0_duty_res.
    +                LSTIMER0_DUTY_RES: u4,
    +                ///  reg_clk_div_lstimer0.
    +                CLK_DIV_LSTIMER0: u18,
    +                ///  reg_lstimer0_pause.
    +                LSTIMER0_PAUSE: u1,
    +                ///  reg_lstimer0_rst.
    +                LSTIMER0_RST: u1,
    +                ///  reg_tick_sel_lstimer0.
    +                TICK_SEL_LSTIMER0: u1,
    +                ///  reg_lstimer0_para_up.
    +                LSTIMER0_PARA_UP: u1,
    +                padding: u6,
    +            }),
    +            ///  LEDC_LSTIMER0_VALUE.
    +            LSTIMER0_VALUE: mmio.Mmio(packed struct(u32) {
    +                ///  reg_lstimer0_cnt.
    +                LSTIMER0_CNT: u14,
    +                padding: u18,
    +            }),
    +            ///  LEDC_LSTIMER1_CONF.
    +            LSTIMER1_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  reg_lstimer1_duty_res.
    +                LSTIMER1_DUTY_RES: u4,
    +                ///  reg_clk_div_lstimer1.
    +                CLK_DIV_LSTIMER1: u18,
    +                ///  reg_lstimer1_pause.
    +                LSTIMER1_PAUSE: u1,
    +                ///  reg_lstimer1_rst.
    +                LSTIMER1_RST: u1,
    +                ///  reg_tick_sel_lstimer1.
    +                TICK_SEL_LSTIMER1: u1,
    +                ///  reg_lstimer1_para_up.
    +                LSTIMER1_PARA_UP: u1,
    +                padding: u6,
    +            }),
    +            ///  LEDC_LSTIMER1_VALUE.
    +            LSTIMER1_VALUE: mmio.Mmio(packed struct(u32) {
    +                ///  reg_lstimer1_cnt.
    +                LSTIMER1_CNT: u14,
    +                padding: u18,
    +            }),
    +            ///  LEDC_LSTIMER2_CONF.
    +            LSTIMER2_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  reg_lstimer2_duty_res.
    +                LSTIMER2_DUTY_RES: u4,
    +                ///  reg_clk_div_lstimer2.
    +                CLK_DIV_LSTIMER2: u18,
    +                ///  reg_lstimer2_pause.
    +                LSTIMER2_PAUSE: u1,
    +                ///  reg_lstimer2_rst.
    +                LSTIMER2_RST: u1,
    +                ///  reg_tick_sel_lstimer2.
    +                TICK_SEL_LSTIMER2: u1,
    +                ///  reg_lstimer2_para_up.
    +                LSTIMER2_PARA_UP: u1,
    +                padding: u6,
    +            }),
    +            ///  LEDC_LSTIMER2_VALUE.
    +            LSTIMER2_VALUE: mmio.Mmio(packed struct(u32) {
    +                ///  reg_lstimer2_cnt.
    +                LSTIMER2_CNT: u14,
    +                padding: u18,
    +            }),
    +            ///  LEDC_LSTIMER3_CONF.
    +            LSTIMER3_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  reg_lstimer3_duty_res.
    +                LSTIMER3_DUTY_RES: u4,
    +                ///  reg_clk_div_lstimer3.
    +                CLK_DIV_LSTIMER3: u18,
    +                ///  reg_lstimer3_pause.
    +                LSTIMER3_PAUSE: u1,
    +                ///  reg_lstimer3_rst.
    +                LSTIMER3_RST: u1,
    +                ///  reg_tick_sel_lstimer3.
    +                TICK_SEL_LSTIMER3: u1,
    +                ///  reg_lstimer3_para_up.
    +                LSTIMER3_PARA_UP: u1,
    +                padding: u6,
    +            }),
    +            ///  LEDC_LSTIMER3_VALUE.
    +            LSTIMER3_VALUE: mmio.Mmio(packed struct(u32) {
    +                ///  reg_lstimer3_cnt.
    +                LSTIMER3_CNT: u14,
    +                padding: u18,
    +            }),
    +            ///  LEDC_INT_RAW.
    +            INT_RAW: mmio.Mmio(packed struct(u32) {
    +                ///  reg_lstimer0_ovf_int_raw.
    +                LSTIMER0_OVF_INT_RAW: u1,
    +                ///  reg_lstimer1_ovf_int_raw.
    +                LSTIMER1_OVF_INT_RAW: u1,
    +                ///  reg_lstimer2_ovf_int_raw.
    +                LSTIMER2_OVF_INT_RAW: u1,
    +                ///  reg_lstimer3_ovf_int_raw.
    +                LSTIMER3_OVF_INT_RAW: u1,
    +                ///  reg_duty_chng_end_lsch0_int_raw.
    +                DUTY_CHNG_END_LSCH0_INT_RAW: u1,
    +                ///  reg_duty_chng_end_lsch1_int_raw.
    +                DUTY_CHNG_END_LSCH1_INT_RAW: u1,
    +                ///  reg_duty_chng_end_lsch2_int_raw.
    +                DUTY_CHNG_END_LSCH2_INT_RAW: u1,
    +                ///  reg_duty_chng_end_lsch3_int_raw.
    +                DUTY_CHNG_END_LSCH3_INT_RAW: u1,
    +                ///  reg_duty_chng_end_lsch4_int_raw.
    +                DUTY_CHNG_END_LSCH4_INT_RAW: u1,
    +                ///  reg_duty_chng_end_lsch5_int_raw.
    +                DUTY_CHNG_END_LSCH5_INT_RAW: u1,
    +                ///  reg_ovf_cnt_lsch0_int_raw.
    +                OVF_CNT_LSCH0_INT_RAW: u1,
    +                ///  reg_ovf_cnt_lsch1_int_raw.
    +                OVF_CNT_LSCH1_INT_RAW: u1,
    +                ///  reg_ovf_cnt_lsch2_int_raw.
    +                OVF_CNT_LSCH2_INT_RAW: u1,
    +                ///  reg_ovf_cnt_lsch3_int_raw.
    +                OVF_CNT_LSCH3_INT_RAW: u1,
    +                ///  reg_ovf_cnt_lsch4_int_raw.
    +                OVF_CNT_LSCH4_INT_RAW: u1,
    +                ///  reg_ovf_cnt_lsch5_int_raw.
    +                OVF_CNT_LSCH5_INT_RAW: u1,
    +                padding: u16,
    +            }),
    +            ///  LEDC_INT_ST.
    +            INT_ST: mmio.Mmio(packed struct(u32) {
    +                ///  reg_lstimer0_ovf_int_st.
    +                LSTIMER0_OVF_INT_ST: u1,
    +                ///  reg_lstimer1_ovf_int_st.
    +                LSTIMER1_OVF_INT_ST: u1,
    +                ///  reg_lstimer2_ovf_int_st.
    +                LSTIMER2_OVF_INT_ST: u1,
    +                ///  reg_lstimer3_ovf_int_st.
    +                LSTIMER3_OVF_INT_ST: u1,
    +                ///  reg_duty_chng_end_lsch0_int_st.
    +                DUTY_CHNG_END_LSCH0_INT_ST: u1,
    +                ///  reg_duty_chng_end_lsch1_int_st.
    +                DUTY_CHNG_END_LSCH1_INT_ST: u1,
    +                ///  reg_duty_chng_end_lsch2_int_st.
    +                DUTY_CHNG_END_LSCH2_INT_ST: u1,
    +                ///  reg_duty_chng_end_lsch3_int_st.
    +                DUTY_CHNG_END_LSCH3_INT_ST: u1,
    +                ///  reg_duty_chng_end_lsch4_int_st.
    +                DUTY_CHNG_END_LSCH4_INT_ST: u1,
    +                ///  reg_duty_chng_end_lsch5_int_st.
    +                DUTY_CHNG_END_LSCH5_INT_ST: u1,
    +                ///  reg_ovf_cnt_lsch0_int_st.
    +                OVF_CNT_LSCH0_INT_ST: u1,
    +                ///  reg_ovf_cnt_lsch1_int_st.
    +                OVF_CNT_LSCH1_INT_ST: u1,
    +                ///  reg_ovf_cnt_lsch2_int_st.
    +                OVF_CNT_LSCH2_INT_ST: u1,
    +                ///  reg_ovf_cnt_lsch3_int_st.
    +                OVF_CNT_LSCH3_INT_ST: u1,
    +                ///  reg_ovf_cnt_lsch4_int_st.
    +                OVF_CNT_LSCH4_INT_ST: u1,
    +                ///  reg_ovf_cnt_lsch5_int_st.
    +                OVF_CNT_LSCH5_INT_ST: u1,
    +                padding: u16,
    +            }),
    +            ///  LEDC_INT_ENA.
    +            INT_ENA: mmio.Mmio(packed struct(u32) {
    +                ///  reg_lstimer0_ovf_int_ena.
    +                LSTIMER0_OVF_INT_ENA: u1,
    +                ///  reg_lstimer1_ovf_int_ena.
    +                LSTIMER1_OVF_INT_ENA: u1,
    +                ///  reg_lstimer2_ovf_int_ena.
    +                LSTIMER2_OVF_INT_ENA: u1,
    +                ///  reg_lstimer3_ovf_int_ena.
    +                LSTIMER3_OVF_INT_ENA: u1,
    +                ///  reg_duty_chng_end_lsch0_int_ena.
    +                DUTY_CHNG_END_LSCH0_INT_ENA: u1,
    +                ///  reg_duty_chng_end_lsch1_int_ena.
    +                DUTY_CHNG_END_LSCH1_INT_ENA: u1,
    +                ///  reg_duty_chng_end_lsch2_int_ena.
    +                DUTY_CHNG_END_LSCH2_INT_ENA: u1,
    +                ///  reg_duty_chng_end_lsch3_int_ena.
    +                DUTY_CHNG_END_LSCH3_INT_ENA: u1,
    +                ///  reg_duty_chng_end_lsch4_int_ena.
    +                DUTY_CHNG_END_LSCH4_INT_ENA: u1,
    +                ///  reg_duty_chng_end_lsch5_int_ena.
    +                DUTY_CHNG_END_LSCH5_INT_ENA: u1,
    +                ///  reg_ovf_cnt_lsch0_int_ena.
    +                OVF_CNT_LSCH0_INT_ENA: u1,
    +                ///  reg_ovf_cnt_lsch1_int_ena.
    +                OVF_CNT_LSCH1_INT_ENA: u1,
    +                ///  reg_ovf_cnt_lsch2_int_ena.
    +                OVF_CNT_LSCH2_INT_ENA: u1,
    +                ///  reg_ovf_cnt_lsch3_int_ena.
    +                OVF_CNT_LSCH3_INT_ENA: u1,
    +                ///  reg_ovf_cnt_lsch4_int_ena.
    +                OVF_CNT_LSCH4_INT_ENA: u1,
    +                ///  reg_ovf_cnt_lsch5_int_ena.
    +                OVF_CNT_LSCH5_INT_ENA: u1,
    +                padding: u16,
    +            }),
    +            ///  LEDC_INT_CLR.
    +            INT_CLR: mmio.Mmio(packed struct(u32) {
    +                ///  reg_lstimer0_ovf_int_clr.
    +                LSTIMER0_OVF_INT_CLR: u1,
    +                ///  reg_lstimer1_ovf_int_clr.
    +                LSTIMER1_OVF_INT_CLR: u1,
    +                ///  reg_lstimer2_ovf_int_clr.
    +                LSTIMER2_OVF_INT_CLR: u1,
    +                ///  reg_lstimer3_ovf_int_clr.
    +                LSTIMER3_OVF_INT_CLR: u1,
    +                ///  reg_duty_chng_end_lsch0_int_clr.
    +                DUTY_CHNG_END_LSCH0_INT_CLR: u1,
    +                ///  reg_duty_chng_end_lsch1_int_clr.
    +                DUTY_CHNG_END_LSCH1_INT_CLR: u1,
    +                ///  reg_duty_chng_end_lsch2_int_clr.
    +                DUTY_CHNG_END_LSCH2_INT_CLR: u1,
    +                ///  reg_duty_chng_end_lsch3_int_clr.
    +                DUTY_CHNG_END_LSCH3_INT_CLR: u1,
    +                ///  reg_duty_chng_end_lsch4_int_clr.
    +                DUTY_CHNG_END_LSCH4_INT_CLR: u1,
    +                ///  reg_duty_chng_end_lsch5_int_clr.
    +                DUTY_CHNG_END_LSCH5_INT_CLR: u1,
    +                ///  reg_ovf_cnt_lsch0_int_clr.
    +                OVF_CNT_LSCH0_INT_CLR: u1,
    +                ///  reg_ovf_cnt_lsch1_int_clr.
    +                OVF_CNT_LSCH1_INT_CLR: u1,
    +                ///  reg_ovf_cnt_lsch2_int_clr.
    +                OVF_CNT_LSCH2_INT_CLR: u1,
    +                ///  reg_ovf_cnt_lsch3_int_clr.
    +                OVF_CNT_LSCH3_INT_CLR: u1,
    +                ///  reg_ovf_cnt_lsch4_int_clr.
    +                OVF_CNT_LSCH4_INT_CLR: u1,
    +                ///  reg_ovf_cnt_lsch5_int_clr.
    +                OVF_CNT_LSCH5_INT_CLR: u1,
    +                padding: u16,
    +            }),
    +            ///  LEDC_CONF.
    +            CONF: mmio.Mmio(packed struct(u32) {
    +                ///  reg_apb_clk_sel.
    +                APB_CLK_SEL: u2,
    +                reserved31: u29,
    +                ///  reg_clk_en.
    +                CLK_EN: u1,
    +            }),
    +            reserved252: [40]u8,
    +            ///  LEDC_DATE.
    +            DATE: mmio.Mmio(packed struct(u32) {
    +                ///  reg_ledc_date.
    +                LEDC_DATE: u32,
    +            }),
    +        };
    +
    +        ///  Remote Control Peripheral
    +        pub const RMT = extern struct {
    +            ///  RMT_CH0DATA_REG.
    +            CH0DATA: mmio.Mmio(packed struct(u32) {
    +                ///  Reserved.
    +                DATA: u32,
    +            }),
    +            ///  RMT_CH1DATA_REG.
    +            CH1DATA: mmio.Mmio(packed struct(u32) {
    +                ///  Reserved.
    +                DATA: u32,
    +            }),
    +            ///  RMT_CH2DATA_REG.
    +            CH2DATA: mmio.Mmio(packed struct(u32) {
    +                ///  Reserved.
    +                DATA: u32,
    +            }),
    +            ///  RMT_CH3DATA_REG.
    +            CH3DATA: mmio.Mmio(packed struct(u32) {
    +                ///  Reserved.
    +                DATA: u32,
    +            }),
    +            reserved28: [12]u8,
    +            ///  RMT_CH2CONF1_REG.
    +            CH2CONF1: mmio.Mmio(packed struct(u32) {
    +                ///  reg_rx_en_ch2.
    +                RX_EN: u1,
    +                ///  reg_mem_wr_rst_ch2.
    +                MEM_WR_RST: u1,
    +                ///  reg_apb_mem_rst_ch2.
    +                APB_MEM_RST: u1,
    +                ///  reg_mem_owner_ch2.
    +                MEM_OWNER: u1,
    +                ///  reg_rx_filter_en_ch2.
    +                RX_FILTER_EN: u1,
    +                ///  reg_rx_filter_thres_ch2.
    +                RX_FILTER_THRES: u8,
    +                ///  reg_mem_rx_wrap_en_ch2.
    +                MEM_RX_WRAP_EN: u1,
    +                ///  reg_afifo_rst_ch2.
    +                AFIFO_RST: u1,
    +                ///  reg_conf_update_ch2.
    +                CONF_UPDATE: u1,
    +                padding: u16,
    +            }),
    +            reserved36: [4]u8,
    +            ///  RMT_CH3CONF1_REG.
    +            CH3CONF1: mmio.Mmio(packed struct(u32) {
    +                ///  reg_rx_en_ch3.
    +                RX_EN: u1,
    +                ///  reg_mem_wr_rst_ch3.
    +                MEM_WR_RST: u1,
    +                ///  reg_apb_mem_rst_ch3.
    +                APB_MEM_RST: u1,
    +                ///  reg_mem_owner_ch3.
    +                MEM_OWNER: u1,
    +                ///  reg_rx_filter_en_ch3.
    +                RX_FILTER_EN: u1,
    +                ///  reg_rx_filter_thres_ch3.
    +                RX_FILTER_THRES: u8,
    +                ///  reg_mem_rx_wrap_en_ch3.
    +                MEM_RX_WRAP_EN: u1,
    +                ///  reg_afifo_rst_ch3.
    +                AFIFO_RST: u1,
    +                ///  reg_conf_update_ch3.
    +                CONF_UPDATE: u1,
    +                padding: u16,
    +            }),
    +            ///  RMT_CH0STATUS_REG.
    +            CH0STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  reg_mem_raddr_ex_ch0.
    +                MEM_RADDR_EX: u9,
    +                ///  reg_state_ch0.
    +                STATE: u3,
    +                ///  reg_apb_mem_waddr_ch0.
    +                APB_MEM_WADDR: u9,
    +                ///  reg_apb_mem_rd_err_ch0.
    +                APB_MEM_RD_ERR: u1,
    +                ///  reg_mem_empty_ch0.
    +                MEM_EMPTY: u1,
    +                ///  reg_apb_mem_wr_err_ch0.
    +                APB_MEM_WR_ERR: u1,
    +                ///  reg_apb_mem_raddr_ch0.
    +                APB_MEM_RADDR: u8,
    +            }),
    +            ///  RMT_CH1STATUS_REG.
    +            CH1STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  reg_mem_raddr_ex_ch1.
    +                MEM_RADDR_EX: u9,
    +                ///  reg_state_ch1.
    +                STATE: u3,
    +                ///  reg_apb_mem_waddr_ch1.
    +                APB_MEM_WADDR: u9,
    +                ///  reg_apb_mem_rd_err_ch1.
    +                APB_MEM_RD_ERR: u1,
    +                ///  reg_mem_empty_ch1.
    +                MEM_EMPTY: u1,
    +                ///  reg_apb_mem_wr_err_ch1.
    +                APB_MEM_WR_ERR: u1,
    +                ///  reg_apb_mem_raddr_ch1.
    +                APB_MEM_RADDR: u8,
    +            }),
    +            ///  RMT_CH2STATUS_REG.
    +            CH2STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  reg_mem_waddr_ex_ch2.
    +                MEM_WADDR_EX: u9,
    +                reserved12: u3,
    +                ///  reg_apb_mem_raddr_ch2.
    +                APB_MEM_RADDR: u9,
    +                reserved22: u1,
    +                ///  reg_state_ch2.
    +                STATE: u3,
    +                ///  reg_mem_owner_err_ch2.
    +                MEM_OWNER_ERR: u1,
    +                ///  reg_mem_full_ch2.
    +                MEM_FULL: u1,
    +                ///  reg_apb_mem_rd_err_ch2.
    +                APB_MEM_RD_ERR: u1,
    +                padding: u4,
    +            }),
    +            ///  RMT_CH3STATUS_REG.
    +            CH3STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  reg_mem_waddr_ex_ch3.
    +                MEM_WADDR_EX: u9,
    +                reserved12: u3,
    +                ///  reg_apb_mem_raddr_ch3.
    +                APB_MEM_RADDR: u9,
    +                reserved22: u1,
    +                ///  reg_state_ch3.
    +                STATE: u3,
    +                ///  reg_mem_owner_err_ch3.
    +                MEM_OWNER_ERR: u1,
    +                ///  reg_mem_full_ch3.
    +                MEM_FULL: u1,
    +                ///  reg_apb_mem_rd_err_ch3.
    +                APB_MEM_RD_ERR: u1,
    +                padding: u4,
    +            }),
    +            ///  RMT_INT_RAW_REG.
    +            INT_RAW: mmio.Mmio(packed struct(u32) {
    +                reserved10: u10,
    +                ///  reg_ch2_rx_thr_event_int_raw.
    +                CH2_RX_THR_EVENT_INT_RAW: u1,
    +                ///  reg_ch3_rx_thr_event_int_raw.
    +                CH3_RX_THR_EVENT_INT_RAW: u1,
    +                padding: u20,
    +            }),
    +            ///  RMT_INT_ST_REG.
    +            INT_ST: mmio.Mmio(packed struct(u32) {
    +                reserved10: u10,
    +                ///  reg_ch2_rx_thr_event_int_st.
    +                CH2_RX_THR_EVENT_INT_ST: u1,
    +                ///  reg_ch3_rx_thr_event_int_st.
    +                CH3_RX_THR_EVENT_INT_ST: u1,
    +                padding: u20,
    +            }),
    +            ///  RMT_INT_ENA_REG.
    +            INT_ENA: mmio.Mmio(packed struct(u32) {
    +                reserved10: u10,
    +                ///  reg_ch2_rx_thr_event_int_ena.
    +                CH2_RX_THR_EVENT_INT_ENA: u1,
    +                ///  reg_ch3_rx_thr_event_int_ena.
    +                CH3_RX_THR_EVENT_INT_ENA: u1,
    +                padding: u20,
    +            }),
    +            ///  RMT_INT_CLR_REG.
    +            INT_CLR: mmio.Mmio(packed struct(u32) {
    +                reserved10: u10,
    +                ///  reg_ch2_rx_thr_event_int_clr.
    +                CH2_RX_THR_EVENT_INT_CLR: u1,
    +                ///  reg_ch3_rx_thr_event_int_clr.
    +                CH3_RX_THR_EVENT_INT_CLR: u1,
    +                padding: u20,
    +            }),
    +            ///  RMT_CH0CARRIER_DUTY_REG.
    +            CH0CARRIER_DUTY: mmio.Mmio(packed struct(u32) {
    +                ///  reg_carrier_low_ch0.
    +                CARRIER_LOW: u16,
    +                ///  reg_carrier_high_ch0.
    +                CARRIER_HIGH: u16,
    +            }),
    +            ///  RMT_CH1CARRIER_DUTY_REG.
    +            CH1CARRIER_DUTY: mmio.Mmio(packed struct(u32) {
    +                ///  reg_carrier_low_ch1.
    +                CARRIER_LOW: u16,
    +                ///  reg_carrier_high_ch1.
    +                CARRIER_HIGH: u16,
    +            }),
    +            ///  RMT_CH2_RX_CARRIER_RM_REG.
    +            CH2_RX_CARRIER_RM: mmio.Mmio(packed struct(u32) {
    +                ///  reg_carrier_low_thres_ch2.
    +                CARRIER_LOW_THRES: u16,
    +                ///  reg_carrier_high_thres_ch2.
    +                CARRIER_HIGH_THRES: u16,
    +            }),
    +            ///  RMT_CH3_RX_CARRIER_RM_REG.
    +            CH3_RX_CARRIER_RM: mmio.Mmio(packed struct(u32) {
    +                ///  reg_carrier_low_thres_ch3.
    +                CARRIER_LOW_THRES: u16,
    +                ///  reg_carrier_high_thres_ch3.
    +                CARRIER_HIGH_THRES: u16,
    +            }),
    +            reserved104: [16]u8,
    +            ///  RMT_SYS_CONF_REG.
    +            SYS_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  reg_apb_fifo_mask.
    +                APB_FIFO_MASK: u1,
    +                ///  reg_mem_clk_force_on.
    +                MEM_CLK_FORCE_ON: u1,
    +                ///  reg_rmt_mem_force_pd.
    +                MEM_FORCE_PD: u1,
    +                ///  reg_rmt_mem_force_pu.
    +                MEM_FORCE_PU: u1,
    +                ///  reg_rmt_sclk_div_num.
    +                SCLK_DIV_NUM: u8,
    +                ///  reg_rmt_sclk_div_a.
    +                SCLK_DIV_A: u6,
    +                ///  reg_rmt_sclk_div_b.
    +                SCLK_DIV_B: u6,
    +                ///  reg_rmt_sclk_sel.
    +                SCLK_SEL: u2,
    +                ///  reg_rmt_sclk_active.
    +                SCLK_ACTIVE: u1,
    +                reserved31: u4,
    +                ///  reg_clk_en.
    +                CLK_EN: u1,
    +            }),
    +            ///  RMT_TX_SIM_REG.
    +            TX_SIM: mmio.Mmio(packed struct(u32) {
    +                ///  reg_rmt_tx_sim_ch0.
    +                TX_SIM_CH0: u1,
    +                ///  reg_rmt_tx_sim_ch1.
    +                TX_SIM_CH1: u1,
    +                ///  reg_rmt_tx_sim_en.
    +                TX_SIM_EN: u1,
    +                padding: u29,
    +            }),
    +            ///  RMT_REF_CNT_RST_REG.
    +            REF_CNT_RST: mmio.Mmio(packed struct(u32) {
    +                ///  reg_ref_cnt_rst_ch0.
    +                CH0: u1,
    +                ///  reg_ref_cnt_rst_ch1.
    +                CH1: u1,
    +                ///  reg_ref_cnt_rst_ch2.
    +                CH2: u1,
    +                ///  reg_ref_cnt_rst_ch3.
    +                CH3: u1,
    +                padding: u28,
    +            }),
    +            reserved204: [88]u8,
    +            ///  RMT_DATE_REG.
    +            DATE: mmio.Mmio(packed struct(u32) {
    +                ///  reg_rmt_date.
    +                DATE: u28,
    +                padding: u4,
    +            }),
    +        };
    +
    +        ///  Hardware random number generator
    +        pub const RNG = extern struct {
    +            reserved176: [176]u8,
    +            ///  Random number data
    +            DATA: u32,
    +        };
    +
    +        ///  RSA (Rivest Shamir Adleman) Accelerator
    +        pub const RSA = extern struct {
    +            ///  The memory that stores M
    +            M_MEM: [16]u8,
    +            reserved512: [496]u8,
    +            ///  The memory that stores Z
    +            Z_MEM: [16]u8,
    +            reserved1024: [496]u8,
    +            ///  The memory that stores Y
    +            Y_MEM: [16]u8,
    +            reserved1536: [496]u8,
    +            ///  The memory that stores X
    +            X_MEM: [16]u8,
    +            reserved2048: [496]u8,
    +            ///  RSA M_prime register
    +            M_PRIME: mmio.Mmio(packed struct(u32) {
    +                ///  Those bits stores m'
    +                M_PRIME: u32,
    +            }),
    +            ///  RSA mode register
    +            MODE: mmio.Mmio(packed struct(u32) {
    +                ///  rsa mode (rsa length).
    +                MODE: u7,
    +                padding: u25,
    +            }),
    +            ///  RSA query clean register
    +            QUERY_CLEAN: mmio.Mmio(packed struct(u32) {
    +                ///  query clean
    +                QUERY_CLEAN: u1,
    +                padding: u31,
    +            }),
    +            ///  RSA modular exponentiation trigger register.
    +            SET_START_MODEXP: mmio.Mmio(packed struct(u32) {
    +                ///  start modular exponentiation
    +                SET_START_MODEXP: u1,
    +                padding: u31,
    +            }),
    +            ///  RSA modular multiplication trigger register.
    +            SET_START_MODMULT: mmio.Mmio(packed struct(u32) {
    +                ///  start modular multiplication
    +                SET_START_MODMULT: u1,
    +                padding: u31,
    +            }),
    +            ///  RSA normal multiplication trigger register.
    +            SET_START_MULT: mmio.Mmio(packed struct(u32) {
    +                ///  start multiplicaiton
    +                SET_START_MULT: u1,
    +                padding: u31,
    +            }),
    +            ///  RSA query idle register
    +            QUERY_IDLE: mmio.Mmio(packed struct(u32) {
    +                ///  query rsa idle. 1'b0: busy, 1'b1: idle
    +                QUERY_IDLE: u1,
    +                padding: u31,
    +            }),
    +            ///  RSA interrupt clear register
    +            INT_CLR: mmio.Mmio(packed struct(u32) {
    +                ///  set this bit to clear RSA interrupt.
    +                CLEAR_INTERRUPT: u1,
    +                padding: u31,
    +            }),
    +            ///  RSA constant time option register
    +            CONSTANT_TIME: mmio.Mmio(packed struct(u32) {
    +                ///  Configure this bit to 0 for acceleration. 0: with acceleration, 1: without acceleration(defalut).
    +                CONSTANT_TIME: u1,
    +                padding: u31,
    +            }),
    +            ///  RSA search option
    +            SEARCH_ENABLE: mmio.Mmio(packed struct(u32) {
    +                ///  Configure this bit to 1 for acceleration. 1: with acceleration, 0: without acceleration(default). This option should be used together with RSA_SEARCH_POS.
    +                SEARCH_ENABLE: u1,
    +                padding: u31,
    +            }),
    +            ///  RSA search position configure register
    +            SEARCH_POS: mmio.Mmio(packed struct(u32) {
    +                ///  Configure this field to set search position. This field should be used together with RSA_SEARCH_ENABLE. The field is only meaningful when RSA_SEARCH_ENABLE is high.
    +                SEARCH_POS: u12,
    +                padding: u20,
    +            }),
    +            ///  RSA interrupt enable register
    +            INT_ENA: mmio.Mmio(packed struct(u32) {
    +                ///  Set this bit to enable interrupt that occurs when rsa calculation is done. 1'b0: disable, 1'b1: enable(default).
    +                INT_ENA: u1,
    +                padding: u31,
    +            }),
    +            ///  RSA version control register
    +            DATE: mmio.Mmio(packed struct(u32) {
    +                ///  rsa version information
    +                DATE: u30,
    +                padding: u2,
    +            }),
    +        };
    +
    +        ///  Real-Time Clock Control
    +        pub const RTC_CNTL = extern struct {
    +            ///  rtc configure register
    +            OPTIONS0: mmio.Mmio(packed struct(u32) {
    +                ///  {reg_sw_stall_appcpu_c1[5:0], reg_sw_stall_appcpu_c0[1:0]} == 0x86 will stall APP CPU
    +                SW_STALL_APPCPU_C0: u2,
    +                ///  {reg_sw_stall_procpu_c1[5:0], reg_sw_stall_procpu_c0[1:0]} == 0x86 will stall PRO CPU
    +                SW_STALL_PROCPU_C0: u2,
    +                ///  APP CPU SW reset
    +                SW_APPCPU_RST: u1,
    +                ///  PRO CPU SW reset
    +                SW_PROCPU_RST: u1,
    +                ///  BB_I2C force power down
    +                BB_I2C_FORCE_PD: u1,
    +                ///  BB_I2C force power up
    +                BB_I2C_FORCE_PU: u1,
    +                ///  BB_PLL _I2C force power down
    +                BBPLL_I2C_FORCE_PD: u1,
    +                ///  BB_PLL_I2C force power up
    +                BBPLL_I2C_FORCE_PU: u1,
    +                ///  BB_PLL force power down
    +                BBPLL_FORCE_PD: u1,
    +                ///  BB_PLL force power up
    +                BBPLL_FORCE_PU: u1,
    +                ///  crystall force power down
    +                XTL_FORCE_PD: u1,
    +                ///  crystall force power up
    +                XTL_FORCE_PU: u1,
    +                ///  wait bias_sleep and current source wakeup
    +                XTL_EN_WAIT: u4,
    +                reserved20: u2,
    +                ///  analog configure
    +                XTL_EXT_CTR_SEL: u3,
    +                ///  analog configure
    +                XTL_FORCE_ISO: u1,
    +                ///  analog configure
    +                PLL_FORCE_ISO: u1,
    +                ///  analog configure
    +                ANALOG_FORCE_ISO: u1,
    +                ///  analog configure
    +                XTL_FORCE_NOISO: u1,
    +                ///  analog configure
    +                PLL_FORCE_NOISO: u1,
    +                ///  analog configure
    +                ANALOG_FORCE_NOISO: u1,
    +                ///  digital wrap force reset in deep sleep
    +                DG_WRAP_FORCE_RST: u1,
    +                ///  digital core force no reset in deep sleep
    +                DG_WRAP_FORCE_NORST: u1,
    +                ///  SW system reset
    +                SW_SYS_RST: u1,
    +            }),
    +            ///  rtc configure register
    +            SLP_TIMER0: mmio.Mmio(packed struct(u32) {
    +                ///  configure the sleep time
    +                SLP_VAL_LO: u32,
    +            }),
    +            ///  rtc configure register
    +            SLP_TIMER1: mmio.Mmio(packed struct(u32) {
    +                ///  RTC sleep timer high 16 bits
    +                SLP_VAL_HI: u16,
    +                ///  timer alarm enable bit
    +                RTC_MAIN_TIMER_ALARM_EN: u1,
    +                padding: u15,
    +            }),
    +            ///  rtc configure register
    +            TIME_UPDATE: mmio.Mmio(packed struct(u32) {
    +                reserved27: u27,
    +                ///  Enable to record system stall time
    +                TIMER_SYS_STALL: u1,
    +                ///  Enable to record 40M XTAL OFF time
    +                TIMER_XTL_OFF: u1,
    +                ///  enable to record system reset time
    +                TIMER_SYS_RST: u1,
    +                reserved31: u1,
    +                ///  Set 1: to update register with RTC timer
    +                RTC_TIME_UPDATE: u1,
    +            }),
    +            ///  rtc configure register
    +            TIME_LOW0: mmio.Mmio(packed struct(u32) {
    +                ///  RTC timer low 32 bits
    +                RTC_TIMER_VALUE0_LOW: u32,
    +            }),
    +            ///  rtc configure register
    +            TIME_HIGH0: mmio.Mmio(packed struct(u32) {
    +                ///  RTC timer high 16 bits
    +                RTC_TIMER_VALUE0_HIGH: u16,
    +                padding: u16,
    +            }),
    +            ///  rtc configure register
    +            STATE0: mmio.Mmio(packed struct(u32) {
    +                ///  rtc software interrupt to main cpu
    +                RTC_SW_CPU_INT: u1,
    +                ///  clear rtc sleep reject cause
    +                RTC_SLP_REJECT_CAUSE_CLR: u1,
    +                reserved22: u20,
    +                ///  1: APB to RTC using bridge
    +                APB2RTC_BRIDGE_SEL: u1,
    +                reserved28: u5,
    +                ///  SDIO active indication
    +                SDIO_ACTIVE_IND: u1,
    +                ///  leep wakeup bit
    +                SLP_WAKEUP: u1,
    +                ///  leep reject bit
    +                SLP_REJECT: u1,
    +                ///  sleep enable bit
    +                SLEEP_EN: u1,
    +            }),
    +            ///  rtc configure register
    +            TIMER1: mmio.Mmio(packed struct(u32) {
    +                ///  CPU stall enable bit
    +                CPU_STALL_EN: u1,
    +                ///  CPU stall wait cycles in fast_clk_rtc
    +                CPU_STALL_WAIT: u5,
    +                ///  CK8M wait cycles in slow_clk_rtc
    +                CK8M_WAIT: u8,
    +                ///  XTAL wait cycles in slow_clk_rtc
    +                XTL_BUF_WAIT: u10,
    +                ///  PLL wait cycles in slow_clk_rtc
    +                PLL_BUF_WAIT: u8,
    +            }),
    +            ///  rtc configure register
    +            TIMER2: mmio.Mmio(packed struct(u32) {
    +                reserved24: u24,
    +                ///  minimal cycles in slow_clk_rtc for CK8M in power down state
    +                MIN_TIME_CK8M_OFF: u8,
    +            }),
    +            ///  rtc configure register
    +            TIMER3: mmio.Mmio(packed struct(u32) {
    +                ///  wifi power domain wakeup time
    +                WIFI_WAIT_TIMER: u9,
    +                ///  wifi power domain power on time
    +                WIFI_POWERUP_TIMER: u7,
    +                ///  bt power domain wakeup time
    +                BT_WAIT_TIMER: u9,
    +                ///  bt power domain power on time
    +                BT_POWERUP_TIMER: u7,
    +            }),
    +            ///  rtc configure register
    +            TIMER4: mmio.Mmio(packed struct(u32) {
    +                ///  cpu top power domain wakeup time
    +                CPU_TOP_WAIT_TIMER: u9,
    +                ///  cpu top power domain power on time
    +                CPU_TOP_POWERUP_TIMER: u7,
    +                ///  digital wrap power domain wakeup time
    +                DG_WRAP_WAIT_TIMER: u9,
    +                ///  digital wrap power domain power on time
    +                DG_WRAP_POWERUP_TIMER: u7,
    +            }),
    +            ///  rtc configure register
    +            TIMER5: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  minimal sleep cycles in slow_clk_rtc
    +                MIN_SLP_VAL: u8,
    +                padding: u16,
    +            }),
    +            ///  rtc configure register
    +            TIMER6: mmio.Mmio(packed struct(u32) {
    +                reserved16: u16,
    +                ///  digital peri power domain wakeup time
    +                DG_PERI_WAIT_TIMER: u9,
    +                ///  digital peri power domain power on time
    +                DG_PERI_POWERUP_TIMER: u7,
    +            }),
    +            ///  rtc configure register
    +            ANA_CONF: mmio.Mmio(packed struct(u32) {
    +                reserved18: u18,
    +                ///  force no bypass i2c power on reset
    +                RESET_POR_FORCE_PD: u1,
    +                ///  force bypass i2c power on reset
    +                RESET_POR_FORCE_PU: u1,
    +                ///  enable glitch reset
    +                GLITCH_RST_EN: u1,
    +                reserved22: u1,
    +                ///  PLLA force power up
    +                SAR_I2C_PU: u1,
    +                ///  PLLA force power down
    +                PLLA_FORCE_PD: u1,
    +                ///  PLLA force power up
    +                PLLA_FORCE_PU: u1,
    +                ///  start BBPLL calibration during sleep
    +                BBPLL_CAL_SLP_START: u1,
    +                ///  1: PVTMON power up
    +                PVTMON_PU: u1,
    +                ///  1: TXRF_I2C power up
    +                TXRF_I2C_PU: u1,
    +                ///  1: RFRX_PBUS power up
    +                RFRX_PBUS_PU: u1,
    +                reserved30: u1,
    +                ///  1: CKGEN_I2C power up
    +                CKGEN_I2C_PU: u1,
    +                ///  power up pll i2c
    +                PLL_I2C_PU: u1,
    +            }),
    +            ///  rtc configure register
    +            RESET_STATE: mmio.Mmio(packed struct(u32) {
    +                ///  reset cause of PRO CPU
    +                RESET_CAUSE_PROCPU: u6,
    +                ///  reset cause of APP CPU
    +                RESET_CAUSE_APPCPU: u6,
    +                ///  APP CPU state vector sel
    +                STAT_VECTOR_SEL_APPCPU: u1,
    +                ///  PRO CPU state vector sel
    +                STAT_VECTOR_SEL_PROCPU: u1,
    +                ///  PRO CPU reset_flag
    +                ALL_RESET_FLAG_PROCPU: u1,
    +                ///  APP CPU reset flag
    +                ALL_RESET_FLAG_APPCPU: u1,
    +                ///  clear PRO CPU reset_flag
    +                ALL_RESET_FLAG_CLR_PROCPU: u1,
    +                ///  clear APP CPU reset flag
    +                ALL_RESET_FLAG_CLR_APPCPU: u1,
    +                ///  APPCPU OcdHaltOnReset
    +                OCD_HALT_ON_RESET_APPCPU: u1,
    +                ///  PROCPU OcdHaltOnReset
    +                OCD_HALT_ON_RESET_PROCPU: u1,
    +                ///  configure jtag reset configure
    +                JTAG_RESET_FLAG_PROCPU: u1,
    +                ///  configure jtag reset configure
    +                JTAG_RESET_FLAG_APPCPU: u1,
    +                ///  configure jtag reset configure
    +                JTAG_RESET_FLAG_CLR_PROCPU: u1,
    +                ///  configure jtag reset configure
    +                JTAG_RESET_FLAG_CLR_APPCPU: u1,
    +                ///  configure dreset configure
    +                RTC_DRESET_MASK_APPCPU: u1,
    +                ///  configure dreset configure
    +                RTC_DRESET_MASK_PROCPU: u1,
    +                padding: u6,
    +            }),
    +            ///  rtc configure register
    +            WAKEUP_STATE: mmio.Mmio(packed struct(u32) {
    +                reserved15: u15,
    +                ///  wakeup enable bitmap
    +                RTC_WAKEUP_ENA: u17,
    +            }),
    +            ///  rtc configure register
    +            INT_ENA_RTC: mmio.Mmio(packed struct(u32) {
    +                ///  enable sleep wakeup interrupt
    +                SLP_WAKEUP_INT_ENA: u1,
    +                ///  enable sleep reject interrupt
    +                SLP_REJECT_INT_ENA: u1,
    +                reserved3: u1,
    +                ///  enable RTC WDT interrupt
    +                RTC_WDT_INT_ENA: u1,
    +                reserved9: u5,
    +                ///  enable brown out interrupt
    +                RTC_BROWN_OUT_INT_ENA: u1,
    +                ///  enable RTC main timer interrupt
    +                RTC_MAIN_TIMER_INT_ENA: u1,
    +                reserved15: u4,
    +                ///  enable super watch dog interrupt
    +                RTC_SWD_INT_ENA: u1,
    +                ///  enable xtal32k_dead interrupt
    +                RTC_XTAL32K_DEAD_INT_ENA: u1,
    +                reserved19: u2,
    +                ///  enbale gitch det interrupt
    +                RTC_GLITCH_DET_INT_ENA: u1,
    +                ///  enbale bbpll cal end interrupt
    +                RTC_BBPLL_CAL_INT_ENA: u1,
    +                padding: u11,
    +            }),
    +            ///  rtc configure register
    +            INT_RAW_RTC: mmio.Mmio(packed struct(u32) {
    +                ///  sleep wakeup interrupt raw
    +                SLP_WAKEUP_INT_RAW: u1,
    +                ///  sleep reject interrupt raw
    +                SLP_REJECT_INT_RAW: u1,
    +                reserved3: u1,
    +                ///  RTC WDT interrupt raw
    +                RTC_WDT_INT_RAW: u1,
    +                reserved9: u5,
    +                ///  brown out interrupt raw
    +                RTC_BROWN_OUT_INT_RAW: u1,
    +                ///  RTC main timer interrupt raw
    +                RTC_MAIN_TIMER_INT_RAW: u1,
    +                reserved15: u4,
    +                ///  super watch dog interrupt raw
    +                RTC_SWD_INT_RAW: u1,
    +                ///  xtal32k dead detection interrupt raw
    +                RTC_XTAL32K_DEAD_INT_RAW: u1,
    +                reserved19: u2,
    +                ///  glitch_det_interrupt_raw
    +                RTC_GLITCH_DET_INT_RAW: u1,
    +                ///  bbpll cal end interrupt state
    +                RTC_BBPLL_CAL_INT_RAW: u1,
    +                padding: u11,
    +            }),
    +            ///  rtc configure register
    +            INT_ST_RTC: mmio.Mmio(packed struct(u32) {
    +                ///  sleep wakeup interrupt state
    +                SLP_WAKEUP_INT_ST: u1,
    +                ///  sleep reject interrupt state
    +                SLP_REJECT_INT_ST: u1,
    +                reserved3: u1,
    +                ///  RTC WDT interrupt state
    +                RTC_WDT_INT_ST: u1,
    +                reserved9: u5,
    +                ///  brown out interrupt state
    +                RTC_BROWN_OUT_INT_ST: u1,
    +                ///  RTC main timer interrupt state
    +                RTC_MAIN_TIMER_INT_ST: u1,
    +                reserved15: u4,
    +                ///  super watch dog interrupt state
    +                RTC_SWD_INT_ST: u1,
    +                ///  xtal32k dead detection interrupt state
    +                RTC_XTAL32K_DEAD_INT_ST: u1,
    +                reserved19: u2,
    +                ///  glitch_det_interrupt state
    +                RTC_GLITCH_DET_INT_ST: u1,
    +                ///  bbpll cal end interrupt state
    +                RTC_BBPLL_CAL_INT_ST: u1,
    +                padding: u11,
    +            }),
    +            ///  rtc configure register
    +            INT_CLR_RTC: mmio.Mmio(packed struct(u32) {
    +                ///  Clear sleep wakeup interrupt state
    +                SLP_WAKEUP_INT_CLR: u1,
    +                ///  Clear sleep reject interrupt state
    +                SLP_REJECT_INT_CLR: u1,
    +                reserved3: u1,
    +                ///  Clear RTC WDT interrupt state
    +                RTC_WDT_INT_CLR: u1,
    +                reserved9: u5,
    +                ///  Clear brown out interrupt state
    +                RTC_BROWN_OUT_INT_CLR: u1,
    +                ///  Clear RTC main timer interrupt state
    +                RTC_MAIN_TIMER_INT_CLR: u1,
    +                reserved15: u4,
    +                ///  Clear super watch dog interrupt state
    +                RTC_SWD_INT_CLR: u1,
    +                ///  Clear RTC WDT interrupt state
    +                RTC_XTAL32K_DEAD_INT_CLR: u1,
    +                reserved19: u2,
    +                ///  Clear glitch det interrupt state
    +                RTC_GLITCH_DET_INT_CLR: u1,
    +                ///  clear bbpll cal end interrupt state
    +                RTC_BBPLL_CAL_INT_CLR: u1,
    +                padding: u11,
    +            }),
    +            ///  rtc configure register
    +            STORE0: mmio.Mmio(packed struct(u32) {
    +                ///  reserved register
    +                RTC_SCRATCH0: u32,
    +            }),
    +            ///  rtc configure register
    +            STORE1: mmio.Mmio(packed struct(u32) {
    +                ///  reserved register
    +                RTC_SCRATCH1: u32,
    +            }),
    +            ///  rtc configure register
    +            STORE2: mmio.Mmio(packed struct(u32) {
    +                ///  reserved register
    +                RTC_SCRATCH2: u32,
    +            }),
    +            ///  rtc configure register
    +            STORE3: mmio.Mmio(packed struct(u32) {
    +                ///  reserved register
    +                RTC_SCRATCH3: u32,
    +            }),
    +            ///  rtc configure register
    +            EXT_XTL_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  xtal 32k watch dog enable
    +                XTAL32K_WDT_EN: u1,
    +                ///  xtal 32k watch dog clock force on
    +                XTAL32K_WDT_CLK_FO: u1,
    +                ///  xtal 32k watch dog sw reset
    +                XTAL32K_WDT_RESET: u1,
    +                ///  xtal 32k external xtal clock force on
    +                XTAL32K_EXT_CLK_FO: u1,
    +                ///  xtal 32k switch to back up clock when xtal is dead
    +                XTAL32K_AUTO_BACKUP: u1,
    +                ///  xtal 32k restart xtal when xtal is dead
    +                XTAL32K_AUTO_RESTART: u1,
    +                ///  xtal 32k switch back xtal when xtal is restarted
    +                XTAL32K_AUTO_RETURN: u1,
    +                ///  Xtal 32k xpd control by sw or fsm
    +                XTAL32K_XPD_FORCE: u1,
    +                ///  apply an internal clock to help xtal 32k to start
    +                ENCKINIT_XTAL_32K: u1,
    +                ///  0: single-end buffer 1: differential buffer
    +                DBUF_XTAL_32K: u1,
    +                ///  xtal_32k gm control
    +                DGM_XTAL_32K: u3,
    +                ///  DRES_XTAL_32K
    +                DRES_XTAL_32K: u3,
    +                ///  XPD_XTAL_32K
    +                XPD_XTAL_32K: u1,
    +                ///  DAC_XTAL_32K
    +                DAC_XTAL_32K: u3,
    +                ///  state of 32k_wdt
    +                RTC_WDT_STATE: u3,
    +                ///  XTAL_32K sel. 0: external XTAL_32K
    +                RTC_XTAL32K_GPIO_SEL: u1,
    +                reserved30: u6,
    +                ///  0: power down XTAL at high level
    +                XTL_EXT_CTR_LV: u1,
    +                ///  enable gpio configure xtal power on
    +                XTL_EXT_CTR_EN: u1,
    +            }),
    +            ///  rtc configure register
    +            EXT_WAKEUP_CONF: mmio.Mmio(packed struct(u32) {
    +                reserved31: u31,
    +                ///  enable filter for gpio wakeup event
    +                GPIO_WAKEUP_FILTER: u1,
    +            }),
    +            ///  rtc configure register
    +            SLP_REJECT_CONF: mmio.Mmio(packed struct(u32) {
    +                reserved12: u12,
    +                ///  sleep reject enable
    +                RTC_SLEEP_REJECT_ENA: u18,
    +                ///  enable reject for light sleep
    +                LIGHT_SLP_REJECT_EN: u1,
    +                ///  enable reject for deep sleep
    +                DEEP_SLP_REJECT_EN: u1,
    +            }),
    +            ///  rtc configure register
    +            CPU_PERIOD_CONF: mmio.Mmio(packed struct(u32) {
    +                reserved29: u29,
    +                ///  CPU sel option
    +                RTC_CPUSEL_CONF: u1,
    +                ///  CPU clk sel option
    +                RTC_CPUPERIOD_SEL: u2,
    +            }),
    +            ///  rtc configure register
    +            CLK_CONF: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  efuse_clk_force_gating
    +                EFUSE_CLK_FORCE_GATING: u1,
    +                ///  efuse_clk_force_nogating
    +                EFUSE_CLK_FORCE_NOGATING: u1,
    +                ///  used to sync reg_ck8m_div_sel bus. Clear vld before set reg_ck8m_div_sel
    +                CK8M_DIV_SEL_VLD: u1,
    +                ///  CK8M_D256_OUT divider. 00: div128
    +                CK8M_DIV: u2,
    +                ///  disable CK8M and CK8M_D256_OUT
    +                ENB_CK8M: u1,
    +                ///  1: CK8M_D256_OUT is actually CK8M
    +                ENB_CK8M_DIV: u1,
    +                ///  enable CK_XTAL_32K for digital core (no relationship with RTC core)
    +                DIG_XTAL32K_EN: u1,
    +                ///  enable CK8M_D256_OUT for digital core (no relationship with RTC core)
    +                DIG_CLK8M_D256_EN: u1,
    +                ///  enable CK8M for digital core (no relationship with RTC core)
    +                DIG_CLK8M_EN: u1,
    +                reserved12: u1,
    +                ///  divider = reg_ck8m_div_sel + 1
    +                CK8M_DIV_SEL: u3,
    +                ///  XTAL force no gating during sleep
    +                XTAL_FORCE_NOGATING: u1,
    +                ///  CK8M force no gating during sleep
    +                CK8M_FORCE_NOGATING: u1,
    +                ///  CK8M_DFREQ
    +                CK8M_DFREQ: u8,
    +                ///  CK8M force power down
    +                CK8M_FORCE_PD: u1,
    +                ///  CK8M force power up
    +                CK8M_FORCE_PU: u1,
    +                ///  force enable xtal clk gating
    +                XTAL_GLOBAL_FORCE_GATING: u1,
    +                ///  force bypass xtal clk gating
    +                XTAL_GLOBAL_FORCE_NOGATING: u1,
    +                ///  fast_clk_rtc sel. 0: XTAL div 4
    +                FAST_CLK_RTC_SEL: u1,
    +                ///  slelect rtc slow clk
    +                ANA_CLK_RTC_SEL: u2,
    +            }),
    +            ///  rtc configure register
    +            SLOW_CLK_CONF: mmio.Mmio(packed struct(u32) {
    +                reserved22: u22,
    +                ///  used to sync div bus. clear vld before set reg_rtc_ana_clk_div
    +                RTC_ANA_CLK_DIV_VLD: u1,
    +                ///  the clk divider num of RTC_CLK
    +                RTC_ANA_CLK_DIV: u8,
    +                ///  flag rtc_slow_clk_next_edge
    +                RTC_SLOW_CLK_NEXT_EDGE: u1,
    +            }),
    +            ///  rtc configure register
    +            SDIO_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  timer count to apply reg_sdio_dcap after sdio power on
    +                SDIO_TIMER_TARGET: u8,
    +                reserved9: u1,
    +                ///  Tieh = 1 mode drive ability. Initially set to 0 to limit charge current
    +                SDIO_DTHDRV: u2,
    +                ///  ability to prevent LDO from overshoot
    +                SDIO_DCAP: u2,
    +                ///  add resistor from ldo output to ground. 0: no res
    +                SDIO_INITI: u2,
    +                ///  0 to set init[1:0]=0
    +                SDIO_EN_INITI: u1,
    +                ///  tune current limit threshold when tieh = 0. About 800mA/(8+d)
    +                SDIO_DCURLIM: u3,
    +                ///  select current limit mode
    +                SDIO_MODECURLIM: u1,
    +                ///  enable current limit
    +                SDIO_ENCURLIM: u1,
    +                ///  power down SDIO_REG in sleep. Only active when reg_sdio_force = 0
    +                SDIO_REG_PD_EN: u1,
    +                ///  1: use SW option to control SDIO_REG
    +                SDIO_FORCE: u1,
    +                ///  SW option for SDIO_TIEH. Only active when reg_sdio_force = 1
    +                SDIO_TIEH: u1,
    +                ///  read only register for REG1P8_READY
    +                _1P8_READY: u1,
    +                ///  SW option for DREFL_SDIO. Only active when reg_sdio_force = 1
    +                DREFL_SDIO: u2,
    +                ///  SW option for DREFM_SDIO. Only active when reg_sdio_force = 1
    +                DREFM_SDIO: u2,
    +                ///  SW option for DREFH_SDIO. Only active when reg_sdio_force = 1
    +                DREFH_SDIO: u2,
    +                XPD_SDIO: u1,
    +            }),
    +            ///  rtc configure register
    +            BIAS_CONF: mmio.Mmio(packed struct(u32) {
    +                DG_VDD_DRV_B_SLP: u8,
    +                DG_VDD_DRV_B_SLP_EN: u1,
    +                reserved10: u1,
    +                ///  bias buf when rtc in normal work state
    +                BIAS_BUF_IDLE: u1,
    +                ///  bias buf when rtc in wakeup state
    +                BIAS_BUF_WAKE: u1,
    +                ///  bias buf when rtc in sleep state
    +                BIAS_BUF_DEEP_SLP: u1,
    +                ///  bias buf when rtc in monitor state
    +                BIAS_BUF_MONITOR: u1,
    +                ///  xpd cur when rtc in sleep_state
    +                PD_CUR_DEEP_SLP: u1,
    +                ///  xpd cur when rtc in monitor state
    +                PD_CUR_MONITOR: u1,
    +                ///  bias_sleep when rtc in sleep_state
    +                BIAS_SLEEP_DEEP_SLP: u1,
    +                ///  bias_sleep when rtc in monitor state
    +                BIAS_SLEEP_MONITOR: u1,
    +                ///  DBG_ATTEN when rtc in sleep state
    +                DBG_ATTEN_DEEP_SLP: u4,
    +                ///  DBG_ATTEN when rtc in monitor state
    +                DBG_ATTEN_MONITOR: u4,
    +                padding: u6,
    +            }),
    +            ///  rtc configure register
    +            RTC_CNTL: mmio.Mmio(packed struct(u32) {
    +                reserved7: u7,
    +                ///  software enable digital regulator cali
    +                DIG_REG_CAL_EN: u1,
    +                reserved14: u6,
    +                ///  SCK_DCAP
    +                SCK_DCAP: u8,
    +                reserved28: u6,
    +                ///  RTC_DBOOST force power down
    +                DBOOST_FORCE_PD: u1,
    +                ///  RTC_DBOOST force power up
    +                DBOOST_FORCE_PU: u1,
    +                ///  RTC_REG force power down (for RTC_REG power down means decrease the voltage to 0.8v or lower )
    +                REGULATOR_FORCE_PD: u1,
    +                ///  RTC_REG force power up
    +                REGULATOR_FORCE_PU: u1,
    +            }),
    +            ///  rtc configure register
    +            PWC: mmio.Mmio(packed struct(u32) {
    +                reserved21: u21,
    +                ///  rtc pad force hold
    +                RTC_PAD_FORCE_HOLD: u1,
    +                padding: u10,
    +            }),
    +            ///  rtc configure register
    +            DIG_PWC: mmio.Mmio(packed struct(u32) {
    +                ///  vdd_spi drv's software value
    +                VDD_SPI_PWR_DRV: u2,
    +                ///  vdd_spi drv use software value
    +                VDD_SPI_PWR_FORCE: u1,
    +                ///  memories in digital core force PD in sleep
    +                LSLP_MEM_FORCE_PD: u1,
    +                ///  memories in digital core force PU in sleep
    +                LSLP_MEM_FORCE_PU: u1,
    +                reserved11: u6,
    +                ///  bt force power down
    +                BT_FORCE_PD: u1,
    +                ///  bt force power up
    +                BT_FORCE_PU: u1,
    +                ///  digital peri force power down
    +                DG_PERI_FORCE_PD: u1,
    +                ///  digital peri force power up
    +                DG_PERI_FORCE_PU: u1,
    +                ///  fastmemory retention mode in sleep
    +                RTC_FASTMEM_FORCE_LPD: u1,
    +                ///  fastmemory donlt entry retention mode in sleep
    +                RTC_FASTMEM_FORCE_LPU: u1,
    +                ///  wifi force power down
    +                WIFI_FORCE_PD: u1,
    +                ///  wifi force power up
    +                WIFI_FORCE_PU: u1,
    +                ///  digital core force power down
    +                DG_WRAP_FORCE_PD: u1,
    +                ///  digital core force power up
    +                DG_WRAP_FORCE_PU: u1,
    +                ///  cpu core force power down
    +                CPU_TOP_FORCE_PD: u1,
    +                ///  cpu force power up
    +                CPU_TOP_FORCE_PU: u1,
    +                reserved27: u4,
    +                ///  enable power down bt in sleep
    +                BT_PD_EN: u1,
    +                ///  enable power down digital peri in sleep
    +                DG_PERI_PD_EN: u1,
    +                ///  enable power down cpu in sleep
    +                CPU_TOP_PD_EN: u1,
    +                ///  enable power down wifi in sleep
    +                WIFI_PD_EN: u1,
    +                ///  enable power down digital wrap in sleep
    +                DG_WRAP_PD_EN: u1,
    +            }),
    +            ///  rtc configure register
    +            DIG_ISO: mmio.Mmio(packed struct(u32) {
    +                reserved7: u7,
    +                ///  DIG_ISO force off
    +                FORCE_OFF: u1,
    +                ///  DIG_ISO force on
    +                FORCE_ON: u1,
    +                ///  read only register to indicate digital pad auto-hold status
    +                DG_PAD_AUTOHOLD: u1,
    +                ///  wtite only register to clear digital pad auto-hold
    +                CLR_DG_PAD_AUTOHOLD: u1,
    +                ///  digital pad enable auto-hold
    +                DG_PAD_AUTOHOLD_EN: u1,
    +                ///  digital pad force no ISO
    +                DG_PAD_FORCE_NOISO: u1,
    +                ///  digital pad force ISO
    +                DG_PAD_FORCE_ISO: u1,
    +                ///  digital pad force un-hold
    +                DG_PAD_FORCE_UNHOLD: u1,
    +                ///  digital pad force hold
    +                DG_PAD_FORCE_HOLD: u1,
    +                reserved22: u6,
    +                ///  bt force ISO
    +                BT_FORCE_ISO: u1,
    +                ///  bt force no ISO
    +                BT_FORCE_NOISO: u1,
    +                ///  Digital peri force ISO
    +                DG_PERI_FORCE_ISO: u1,
    +                ///  digital peri force no ISO
    +                DG_PERI_FORCE_NOISO: u1,
    +                ///  cpu force ISO
    +                CPU_TOP_FORCE_ISO: u1,
    +                ///  cpu force no ISO
    +                CPU_TOP_FORCE_NOISO: u1,
    +                ///  wifi force ISO
    +                WIFI_FORCE_ISO: u1,
    +                ///  wifi force no ISO
    +                WIFI_FORCE_NOISO: u1,
    +                ///  digital core force ISO
    +                DG_WRAP_FORCE_ISO: u1,
    +                ///  digital core force no ISO
    +                DG_WRAP_FORCE_NOISO: u1,
    +            }),
    +            ///  rtc configure register
    +            WDTCONFIG0: mmio.Mmio(packed struct(u32) {
    +                ///  chip reset siginal pulse width
    +                WDT_CHIP_RESET_WIDTH: u8,
    +                ///  wdt reset whole chip enable
    +                WDT_CHIP_RESET_EN: u1,
    +                ///  pause WDT in sleep
    +                WDT_PAUSE_IN_SLP: u1,
    +                ///  enable WDT reset APP CPU
    +                WDT_APPCPU_RESET_EN: u1,
    +                ///  enable WDT reset PRO CPU
    +                WDT_PROCPU_RESET_EN: u1,
    +                ///  enable WDT in flash boot
    +                WDT_FLASHBOOT_MOD_EN: u1,
    +                ///  system reset counter length
    +                WDT_SYS_RESET_LENGTH: u3,
    +                ///  CPU reset counter length
    +                WDT_CPU_RESET_LENGTH: u3,
    +                ///  1: interrupt stage en
    +                WDT_STG3: u3,
    +                ///  1: interrupt stage en
    +                WDT_STG2: u3,
    +                ///  1: interrupt stage en
    +                WDT_STG1: u3,
    +                ///  1: interrupt stage en
    +                WDT_STG0: u3,
    +                ///  enable rtc wdt
    +                WDT_EN: u1,
    +            }),
    +            ///  rtc configure register
    +            WDTCONFIG1: mmio.Mmio(packed struct(u32) {
    +                ///  the hold time of stage0
    +                WDT_STG0_HOLD: u32,
    +            }),
    +            ///  rtc configure register
    +            WDTCONFIG2: mmio.Mmio(packed struct(u32) {
    +                ///  the hold time of stage1
    +                WDT_STG1_HOLD: u32,
    +            }),
    +            ///  rtc configure register
    +            WDTCONFIG3: mmio.Mmio(packed struct(u32) {
    +                ///  the hold time of stage2
    +                WDT_STG2_HOLD: u32,
    +            }),
    +            ///  rtc configure register
    +            WDTCONFIG4: mmio.Mmio(packed struct(u32) {
    +                ///  the hold time of stage3
    +                WDT_STG3_HOLD: u32,
    +            }),
    +            ///  rtc configure register
    +            WDTFEED: mmio.Mmio(packed struct(u32) {
    +                reserved31: u31,
    +                ///  sw feed rtc wdt
    +                RTC_WDT_FEED: u1,
    +            }),
    +            ///  rtc configure register
    +            WDTWPROTECT: mmio.Mmio(packed struct(u32) {
    +                ///  the key of rtc wdt
    +                WDT_WKEY: u32,
    +            }),
    +            ///  rtc configure register
    +            SWD_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  swd reset flag
    +                SWD_RESET_FLAG: u1,
    +                ///  swd interrupt for feeding
    +                SWD_FEED_INT: u1,
    +                reserved17: u15,
    +                ///  Bypass swd rst
    +                SWD_BYPASS_RST: u1,
    +                ///  adjust signal width send to swd
    +                SWD_SIGNAL_WIDTH: u10,
    +                ///  reset swd reset flag
    +                SWD_RST_FLAG_CLR: u1,
    +                ///  Sw feed swd
    +                SWD_FEED: u1,
    +                ///  disabel SWD
    +                SWD_DISABLE: u1,
    +                ///  automatically feed swd when int comes
    +                SWD_AUTO_FEED_EN: u1,
    +            }),
    +            ///  rtc configure register
    +            SWD_WPROTECT: mmio.Mmio(packed struct(u32) {
    +                ///  the key of super wdt
    +                SWD_WKEY: u32,
    +            }),
    +            ///  rtc configure register
    +            SW_CPU_STALL: mmio.Mmio(packed struct(u32) {
    +                reserved20: u20,
    +                ///  {reg_sw_stall_appcpu_c1[5:0]
    +                SW_STALL_APPCPU_C1: u6,
    +                ///  stall cpu by software
    +                SW_STALL_PROCPU_C1: u6,
    +            }),
    +            ///  rtc configure register
    +            STORE4: mmio.Mmio(packed struct(u32) {
    +                ///  reserved register
    +                RTC_SCRATCH4: u32,
    +            }),
    +            ///  rtc configure register
    +            STORE5: mmio.Mmio(packed struct(u32) {
    +                ///  reserved register
    +                RTC_SCRATCH5: u32,
    +            }),
    +            ///  rtc configure register
    +            STORE6: mmio.Mmio(packed struct(u32) {
    +                ///  reserved register
    +                RTC_SCRATCH6: u32,
    +            }),
    +            ///  rtc configure register
    +            STORE7: mmio.Mmio(packed struct(u32) {
    +                ///  reserved register
    +                RTC_SCRATCH7: u32,
    +            }),
    +            ///  rtc configure register
    +            LOW_POWER_ST: mmio.Mmio(packed struct(u32) {
    +                ///  rom0 power down
    +                XPD_ROM0: u1,
    +                reserved2: u1,
    +                ///  External DCDC power down
    +                XPD_DIG_DCDC: u1,
    +                ///  rtc peripheral iso
    +                RTC_PERI_ISO: u1,
    +                ///  rtc peripheral power down
    +                XPD_RTC_PERI: u1,
    +                ///  wifi iso
    +                WIFI_ISO: u1,
    +                ///  wifi wrap power down
    +                XPD_WIFI: u1,
    +                ///  digital wrap iso
    +                DIG_ISO: u1,
    +                ///  digital wrap power down
    +                XPD_DIG: u1,
    +                ///  touch should start to work
    +                RTC_TOUCH_STATE_START: u1,
    +                ///  touch is about to working. Switch rtc main state
    +                RTC_TOUCH_STATE_SWITCH: u1,
    +                ///  touch is in sleep state
    +                RTC_TOUCH_STATE_SLP: u1,
    +                ///  touch is done
    +                RTC_TOUCH_STATE_DONE: u1,
    +                ///  ulp/cocpu should start to work
    +                RTC_COCPU_STATE_START: u1,
    +                ///  ulp/cocpu is about to working. Switch rtc main state
    +                RTC_COCPU_STATE_SWITCH: u1,
    +                ///  ulp/cocpu is in sleep state
    +                RTC_COCPU_STATE_SLP: u1,
    +                ///  ulp/cocpu is done
    +                RTC_COCPU_STATE_DONE: u1,
    +                ///  no use any more
    +                RTC_MAIN_STATE_XTAL_ISO: u1,
    +                ///  rtc main state machine is in states that pll should be running
    +                RTC_MAIN_STATE_PLL_ON: u1,
    +                ///  rtc is ready to receive wake up trigger from wake up source
    +                RTC_RDY_FOR_WAKEUP: u1,
    +                ///  rtc main state machine has been waited for some cycles
    +                RTC_MAIN_STATE_WAIT_END: u1,
    +                ///  rtc main state machine is in the states of wakeup process
    +                RTC_IN_WAKEUP_STATE: u1,
    +                ///  rtc main state machine is in the states of low power
    +                RTC_IN_LOW_POWER_STATE: u1,
    +                ///  rtc main state machine is in wait 8m state
    +                RTC_MAIN_STATE_IN_WAIT_8M: u1,
    +                ///  rtc main state machine is in wait pll state
    +                RTC_MAIN_STATE_IN_WAIT_PLL: u1,
    +                ///  rtc main state machine is in wait xtal state
    +                RTC_MAIN_STATE_IN_WAIT_XTL: u1,
    +                ///  rtc main state machine is in sleep state
    +                RTC_MAIN_STATE_IN_SLP: u1,
    +                ///  rtc main state machine is in idle state
    +                RTC_MAIN_STATE_IN_IDLE: u1,
    +                ///  rtc main state machine status
    +                RTC_MAIN_STATE: u4,
    +            }),
    +            ///  rtc configure register
    +            DIAG0: mmio.Mmio(packed struct(u32) {
    +                RTC_LOW_POWER_DIAG1: u32,
    +            }),
    +            ///  rtc configure register
    +            PAD_HOLD: mmio.Mmio(packed struct(u32) {
    +                ///  the hold configure of rtc gpio0
    +                RTC_GPIO_PIN0_HOLD: u1,
    +                ///  the hold configure of rtc gpio1
    +                RTC_GPIO_PIN1_HOLD: u1,
    +                ///  the hold configure of rtc gpio2
    +                RTC_GPIO_PIN2_HOLD: u1,
    +                ///  the hold configure of rtc gpio3
    +                RTC_GPIO_PIN3_HOLD: u1,
    +                ///  the hold configure of rtc gpio4
    +                RTC_GPIO_PIN4_HOLD: u1,
    +                ///  the hold configure of rtc gpio5
    +                RTC_GPIO_PIN5_HOLD: u1,
    +                padding: u26,
    +            }),
    +            ///  rtc configure register
    +            DIG_PAD_HOLD: mmio.Mmio(packed struct(u32) {
    +                ///  the configure of digital pad
    +                DIG_PAD_HOLD: u32,
    +            }),
    +            ///  rtc configure register
    +            BROWN_OUT: mmio.Mmio(packed struct(u32) {
    +                reserved4: u4,
    +                ///  brown out interrupt wait cycles
    +                INT_WAIT: u10,
    +                ///  enable close flash when brown out happens
    +                CLOSE_FLASH_ENA: u1,
    +                ///  enable power down RF when brown out happens
    +                PD_RF_ENA: u1,
    +                ///  brown out reset wait cycles
    +                RST_WAIT: u10,
    +                ///  enable brown out reset
    +                RST_ENA: u1,
    +                ///  1: 4-pos reset
    +                RST_SEL: u1,
    +                ///  brown_out origin reset enable
    +                ANA_RST_EN: u1,
    +                ///  clear brown out counter
    +                CNT_CLR: u1,
    +                ///  enable brown out
    +                ENA: u1,
    +                ///  the flag of brown det from analog
    +                DET: u1,
    +            }),
    +            ///  rtc configure register
    +            TIME_LOW1: mmio.Mmio(packed struct(u32) {
    +                ///  RTC timer low 32 bits
    +                RTC_TIMER_VALUE1_LOW: u32,
    +            }),
    +            ///  rtc configure register
    +            TIME_HIGH1: mmio.Mmio(packed struct(u32) {
    +                ///  RTC timer high 16 bits
    +                RTC_TIMER_VALUE1_HIGH: u16,
    +                padding: u16,
    +            }),
    +            ///  rtc configure register
    +            XTAL32K_CLK_FACTOR: mmio.Mmio(packed struct(u32) {
    +                ///  xtal 32k watch dog backup clock factor
    +                XTAL32K_CLK_FACTOR: u32,
    +            }),
    +            ///  rtc configure register
    +            XTAL32K_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  cycles to wait to return noral xtal 32k
    +                XTAL32K_RETURN_WAIT: u4,
    +                ///  cycles to wait to repower on xtal 32k
    +                XTAL32K_RESTART_WAIT: u16,
    +                ///  If no clock detected for this amount of time
    +                XTAL32K_WDT_TIMEOUT: u8,
    +                ///  if restarted xtal32k period is smaller than this
    +                XTAL32K_STABLE_THRES: u4,
    +            }),
    +            ///  rtc configure register
    +            USB_CONF: mmio.Mmio(packed struct(u32) {
    +                reserved18: u18,
    +                ///  disable io_mux reset
    +                IO_MUX_RESET_DISABLE: u1,
    +                padding: u13,
    +            }),
    +            ///  RTC_CNTL_RTC_SLP_REJECT_CAUSE_REG
    +            SLP_REJECT_CAUSE: mmio.Mmio(packed struct(u32) {
    +                ///  sleep reject cause
    +                REJECT_CAUSE: u18,
    +                padding: u14,
    +            }),
    +            ///  rtc configure register
    +            OPTION1: mmio.Mmio(packed struct(u32) {
    +                ///  force chip entry download mode
    +                FORCE_DOWNLOAD_BOOT: u1,
    +                padding: u31,
    +            }),
    +            ///  RTC_CNTL_RTC_SLP_WAKEUP_CAUSE_REG
    +            SLP_WAKEUP_CAUSE: mmio.Mmio(packed struct(u32) {
    +                ///  sleep wakeup cause
    +                WAKEUP_CAUSE: u17,
    +                padding: u15,
    +            }),
    +            ///  rtc configure register
    +            ULP_CP_TIMER_1: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  sleep cycles for ULP-coprocessor timer
    +                ULP_CP_TIMER_SLP_CYCLE: u24,
    +            }),
    +            ///  rtc configure register
    +            INT_ENA_RTC_W1TS: mmio.Mmio(packed struct(u32) {
    +                ///  enable sleep wakeup interrupt
    +                SLP_WAKEUP_INT_ENA_W1TS: u1,
    +                ///  enable sleep reject interrupt
    +                SLP_REJECT_INT_ENA_W1TS: u1,
    +                reserved3: u1,
    +                ///  enable RTC WDT interrupt
    +                RTC_WDT_INT_ENA_W1TS: u1,
    +                reserved9: u5,
    +                ///  enable brown out interrupt
    +                RTC_BROWN_OUT_INT_ENA_W1TS: u1,
    +                ///  enable RTC main timer interrupt
    +                RTC_MAIN_TIMER_INT_ENA_W1TS: u1,
    +                reserved15: u4,
    +                ///  enable super watch dog interrupt
    +                RTC_SWD_INT_ENA_W1TS: u1,
    +                ///  enable xtal32k_dead interrupt
    +                RTC_XTAL32K_DEAD_INT_ENA_W1TS: u1,
    +                reserved19: u2,
    +                ///  enbale gitch det interrupt
    +                RTC_GLITCH_DET_INT_ENA_W1TS: u1,
    +                ///  enbale bbpll cal interrupt
    +                RTC_BBPLL_CAL_INT_ENA_W1TS: u1,
    +                padding: u11,
    +            }),
    +            ///  rtc configure register
    +            INT_ENA_RTC_W1TC: mmio.Mmio(packed struct(u32) {
    +                ///  clear sleep wakeup interrupt enable
    +                SLP_WAKEUP_INT_ENA_W1TC: u1,
    +                ///  clear sleep reject interrupt enable
    +                SLP_REJECT_INT_ENA_W1TC: u1,
    +                reserved3: u1,
    +                ///  clear RTC WDT interrupt enable
    +                RTC_WDT_INT_ENA_W1TC: u1,
    +                reserved9: u5,
    +                ///  clear brown out interrupt enable
    +                RTC_BROWN_OUT_INT_ENA_W1TC: u1,
    +                ///  Clear RTC main timer interrupt enable
    +                RTC_MAIN_TIMER_INT_ENA_W1TC: u1,
    +                reserved15: u4,
    +                ///  clear super watch dog interrupt enable
    +                RTC_SWD_INT_ENA_W1TC: u1,
    +                ///  clear xtal32k_dead interrupt enable
    +                RTC_XTAL32K_DEAD_INT_ENA_W1TC: u1,
    +                reserved19: u2,
    +                ///  clear gitch det interrupt enable
    +                RTC_GLITCH_DET_INT_ENA_W1TC: u1,
    +                ///  clear bbpll cal interrupt enable
    +                RTC_BBPLL_CAL_INT_ENA_W1TC: u1,
    +                padding: u11,
    +            }),
    +            ///  rtc configure register
    +            RETENTION_CTRL: mmio.Mmio(packed struct(u32) {
    +                reserved18: u18,
    +                ///  Retention clk sel
    +                RETENTION_CLK_SEL: u1,
    +                ///  Retention done wait time
    +                RETENTION_DONE_WAIT: u3,
    +                ///  Retention clkoff wait time
    +                RETENTION_CLKOFF_WAIT: u4,
    +                ///  enable cpu retention when light sleep
    +                RETENTION_EN: u1,
    +                ///  wait cycles for rention operation
    +                RETENTION_WAIT: u5,
    +            }),
    +            ///  rtc configure register
    +            FIB_SEL: mmio.Mmio(packed struct(u32) {
    +                ///  select use analog fib signal
    +                RTC_FIB_SEL: u3,
    +                padding: u29,
    +            }),
    +            ///  rtc configure register
    +            GPIO_WAKEUP: mmio.Mmio(packed struct(u32) {
    +                ///  rtc gpio wakeup flag
    +                RTC_GPIO_WAKEUP_STATUS: u6,
    +                ///  clear rtc gpio wakeup flag
    +                RTC_GPIO_WAKEUP_STATUS_CLR: u1,
    +                ///  enable rtc io clk gate
    +                RTC_GPIO_PIN_CLK_GATE: u1,
    +                ///  configure gpio wakeup type
    +                RTC_GPIO_PIN5_INT_TYPE: u3,
    +                ///  configure gpio wakeup type
    +                RTC_GPIO_PIN4_INT_TYPE: u3,
    +                ///  configure gpio wakeup type
    +                RTC_GPIO_PIN3_INT_TYPE: u3,
    +                ///  configure gpio wakeup type
    +                RTC_GPIO_PIN2_INT_TYPE: u3,
    +                ///  configure gpio wakeup type
    +                RTC_GPIO_PIN1_INT_TYPE: u3,
    +                ///  configure gpio wakeup type
    +                RTC_GPIO_PIN0_INT_TYPE: u3,
    +                ///  enable wakeup from rtc gpio5
    +                RTC_GPIO_PIN5_WAKEUP_ENABLE: u1,
    +                ///  enable wakeup from rtc gpio4
    +                RTC_GPIO_PIN4_WAKEUP_ENABLE: u1,
    +                ///  enable wakeup from rtc gpio3
    +                RTC_GPIO_PIN3_WAKEUP_ENABLE: u1,
    +                ///  enable wakeup from rtc gpio2
    +                RTC_GPIO_PIN2_WAKEUP_ENABLE: u1,
    +                ///  enable wakeup from rtc gpio1
    +                RTC_GPIO_PIN1_WAKEUP_ENABLE: u1,
    +                ///  enable wakeup from rtc gpio0
    +                RTC_GPIO_PIN0_WAKEUP_ENABLE: u1,
    +            }),
    +            ///  rtc configure register
    +            DBG_SEL: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  use for debug
    +                RTC_DEBUG_12M_NO_GATING: u1,
    +                ///  use for debug
    +                RTC_DEBUG_BIT_SEL: u5,
    +                ///  use for debug
    +                RTC_DEBUG_SEL0: u5,
    +                ///  use for debug
    +                RTC_DEBUG_SEL1: u5,
    +                ///  use for debug
    +                RTC_DEBUG_SEL2: u5,
    +                ///  use for debug
    +                RTC_DEBUG_SEL3: u5,
    +                ///  use for debug
    +                RTC_DEBUG_SEL4: u5,
    +            }),
    +            ///  rtc configure register
    +            DBG_MAP: mmio.Mmio(packed struct(u32) {
    +                reserved2: u2,
    +                ///  use for debug
    +                RTC_GPIO_PIN5_MUX_SEL: u1,
    +                ///  use for debug
    +                RTC_GPIO_PIN4_MUX_SEL: u1,
    +                ///  use for debug
    +                RTC_GPIO_PIN3_MUX_SEL: u1,
    +                ///  use for debug
    +                RTC_GPIO_PIN2_MUX_SEL: u1,
    +                ///  use for debug
    +                RTC_GPIO_PIN1_MUX_SEL: u1,
    +                ///  use for debug
    +                RTC_GPIO_PIN0_MUX_SEL: u1,
    +                ///  use for debug
    +                RTC_GPIO_PIN5_FUN_SEL: u4,
    +                ///  use for debug
    +                RTC_GPIO_PIN4_FUN_SEL: u4,
    +                ///  use for debug
    +                RTC_GPIO_PIN3_FUN_SEL: u4,
    +                ///  use for debug
    +                RTC_GPIO_PIN2_FUN_SEL: u4,
    +                ///  use for debug
    +                RTC_GPIO_PIN1_FUN_SEL: u4,
    +                ///  use for debug
    +                RTC_GPIO_PIN0_FUN_SEL: u4,
    +            }),
    +            ///  rtc configure register
    +            SENSOR_CTRL: mmio.Mmio(packed struct(u32) {
    +                reserved27: u27,
    +                ///  reg_sar2_pwdet_cct
    +                SAR2_PWDET_CCT: u3,
    +                ///  force power up SAR
    +                FORCE_XPD_SAR: u2,
    +            }),
    +            ///  rtc configure register
    +            DBG_SAR_SEL: mmio.Mmio(packed struct(u32) {
    +                reserved27: u27,
    +                ///  use for debug
    +                SAR_DEBUG_SEL: u5,
    +            }),
    +            ///  rtc configure register
    +            PG_CTRL: mmio.Mmio(packed struct(u32) {
    +                reserved26: u26,
    +                ///  power glitch desense
    +                POWER_GLITCH_DSENSE: u2,
    +                ///  force disable power glitch
    +                POWER_GLITCH_FORCE_PD: u1,
    +                ///  force enable power glitch
    +                POWER_GLITCH_FORCE_PU: u1,
    +                ///  use efuse value control power glitch enable
    +                POWER_GLITCH_EFUSE_SEL: u1,
    +                ///  enable power glitch
    +                POWER_GLITCH_EN: u1,
    +            }),
    +            reserved508: [212]u8,
    +            ///  rtc configure register
    +            DATE: mmio.Mmio(packed struct(u32) {
    +                ///  verision
    +                RTC_CNTL_DATE: u28,
    +                padding: u4,
    +            }),
    +        };
    +
    +        ///  Sensitive
    +        pub const SENSITIVE = extern struct {
    +            ///  SENSITIVE_ROM_TABLE_LOCK_REG
    +            ROM_TABLE_LOCK: mmio.Mmio(packed struct(u32) {
    +                ///  rom_table_lock
    +                ROM_TABLE_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_ROM_TABLE_REG
    +            ROM_TABLE: mmio.Mmio(packed struct(u32) {
    +                ///  rom_table
    +                ROM_TABLE: u32,
    +            }),
    +            ///  SENSITIVE_PRIVILEGE_MODE_SEL_LOCK_REG
    +            PRIVILEGE_MODE_SEL_LOCK: mmio.Mmio(packed struct(u32) {
    +                ///  privilege_mode_sel_lock
    +                PRIVILEGE_MODE_SEL_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_PRIVILEGE_MODE_SEL_REG
    +            PRIVILEGE_MODE_SEL: mmio.Mmio(packed struct(u32) {
    +                ///  privilege_mode_sel
    +                PRIVILEGE_MODE_SEL: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_APB_PERIPHERAL_ACCESS_0_REG
    +            APB_PERIPHERAL_ACCESS_0: mmio.Mmio(packed struct(u32) {
    +                ///  apb_peripheral_access_lock
    +                APB_PERIPHERAL_ACCESS_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_APB_PERIPHERAL_ACCESS_1_REG
    +            APB_PERIPHERAL_ACCESS_1: mmio.Mmio(packed struct(u32) {
    +                ///  apb_peripheral_access_split_burst
    +                APB_PERIPHERAL_ACCESS_SPLIT_BURST: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_INTERNAL_SRAM_USAGE_0_REG
    +            INTERNAL_SRAM_USAGE_0: mmio.Mmio(packed struct(u32) {
    +                ///  internal_sram_usage_lock
    +                INTERNAL_SRAM_USAGE_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_INTERNAL_SRAM_USAGE_1_REG
    +            INTERNAL_SRAM_USAGE_1: mmio.Mmio(packed struct(u32) {
    +                ///  internal_sram_usage_cpu_cache
    +                INTERNAL_SRAM_USAGE_CPU_CACHE: u1,
    +                ///  internal_sram_usage_cpu_sram
    +                INTERNAL_SRAM_USAGE_CPU_SRAM: u3,
    +                padding: u28,
    +            }),
    +            ///  SENSITIVE_INTERNAL_SRAM_USAGE_3_REG
    +            INTERNAL_SRAM_USAGE_3: mmio.Mmio(packed struct(u32) {
    +                ///  internal_sram_usage_mac_dump_sram
    +                INTERNAL_SRAM_USAGE_MAC_DUMP_SRAM: u3,
    +                ///  internal_sram_alloc_mac_dump
    +                INTERNAL_SRAM_ALLOC_MAC_DUMP: u1,
    +                padding: u28,
    +            }),
    +            ///  SENSITIVE_INTERNAL_SRAM_USAGE_4_REG
    +            INTERNAL_SRAM_USAGE_4: mmio.Mmio(packed struct(u32) {
    +                ///  internal_sram_usage_log_sram
    +                INTERNAL_SRAM_USAGE_LOG_SRAM: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_CACHE_TAG_ACCESS_0_REG
    +            CACHE_TAG_ACCESS_0: mmio.Mmio(packed struct(u32) {
    +                ///  cache_tag_access_lock
    +                CACHE_TAG_ACCESS_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_CACHE_TAG_ACCESS_1_REG
    +            CACHE_TAG_ACCESS_1: mmio.Mmio(packed struct(u32) {
    +                ///  pro_i_tag_rd_acs
    +                PRO_I_TAG_RD_ACS: u1,
    +                ///  pro_i_tag_wr_acs
    +                PRO_I_TAG_WR_ACS: u1,
    +                ///  pro_d_tag_rd_acs
    +                PRO_D_TAG_RD_ACS: u1,
    +                ///  pro_d_tag_wr_acs
    +                PRO_D_TAG_WR_ACS: u1,
    +                padding: u28,
    +            }),
    +            ///  SENSITIVE_CACHE_MMU_ACCESS_0_REG
    +            CACHE_MMU_ACCESS_0: mmio.Mmio(packed struct(u32) {
    +                ///  cache_mmu_access_lock
    +                CACHE_MMU_ACCESS_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_CACHE_MMU_ACCESS_1_REG
    +            CACHE_MMU_ACCESS_1: mmio.Mmio(packed struct(u32) {
    +                ///  pro_mmu_rd_acs
    +                PRO_MMU_RD_ACS: u1,
    +                ///  pro_mmu_wr_acs
    +                PRO_MMU_WR_ACS: u1,
    +                padding: u30,
    +            }),
    +            ///  SENSITIVE_DMA_APBPERI_SPI2_PMS_CONSTRAIN_0_REG
    +            DMA_APBPERI_SPI2_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    +                ///  dma_apbperi_spi2_pms_constrain_lock
    +                DMA_APBPERI_SPI2_PMS_CONSTRAIN_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_DMA_APBPERI_SPI2_PMS_CONSTRAIN_1_REG
    +            DMA_APBPERI_SPI2_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    +                ///  dma_apbperi_spi2_pms_constrain_sram_world_0_pms_0
    +                DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    +                ///  dma_apbperi_spi2_pms_constrain_sram_world_0_pms_1
    +                DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    +                ///  dma_apbperi_spi2_pms_constrain_sram_world_0_pms_2
    +                DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    +                ///  dma_apbperi_spi2_pms_constrain_sram_world_0_pms_3
    +                DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    +                reserved12: u4,
    +                ///  dma_apbperi_spi2_pms_constrain_sram_world_1_pms_0
    +                DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    +                ///  dma_apbperi_spi2_pms_constrain_sram_world_1_pms_1
    +                DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    +                ///  dma_apbperi_spi2_pms_constrain_sram_world_1_pms_2
    +                DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    +                ///  dma_apbperi_spi2_pms_constrain_sram_world_1_pms_3
    +                DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    +                padding: u12,
    +            }),
    +            ///  SENSITIVE_DMA_APBPERI_UCHI0_PMS_CONSTRAIN_0_REG
    +            DMA_APBPERI_UCHI0_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    +                ///  dma_apbperi_uchi0_pms_constrain_lock
    +                DMA_APBPERI_UCHI0_PMS_CONSTRAIN_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_DMA_APBPERI_UCHI0_PMS_CONSTRAIN_1_REG
    +            DMA_APBPERI_UCHI0_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    +                ///  dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_0
    +                DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    +                ///  dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_1
    +                DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    +                ///  dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_2
    +                DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    +                ///  dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_3
    +                DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    +                reserved12: u4,
    +                ///  dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_0
    +                DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    +                ///  dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_1
    +                DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    +                ///  dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_2
    +                DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    +                ///  dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_3
    +                DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    +                padding: u12,
    +            }),
    +            ///  SENSITIVE_DMA_APBPERI_I2S0_PMS_CONSTRAIN_0_REG
    +            DMA_APBPERI_I2S0_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    +                ///  dma_apbperi_i2s0_pms_constrain_lock
    +                DMA_APBPERI_I2S0_PMS_CONSTRAIN_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_DMA_APBPERI_I2S0_PMS_CONSTRAIN_1_REG
    +            DMA_APBPERI_I2S0_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    +                ///  dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_0
    +                DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    +                ///  dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_1
    +                DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    +                ///  dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_2
    +                DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    +                ///  dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_3
    +                DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    +                reserved12: u4,
    +                ///  dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_0
    +                DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    +                ///  dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_1
    +                DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    +                ///  dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_2
    +                DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    +                ///  dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_3
    +                DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    +                padding: u12,
    +            }),
    +            ///  SENSITIVE_DMA_APBPERI_MAC_PMS_CONSTRAIN_0_REG
    +            DMA_APBPERI_MAC_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    +                ///  dma_apbperi_mac_pms_constrain_lock
    +                DMA_APBPERI_MAC_PMS_CONSTRAIN_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_DMA_APBPERI_MAC_PMS_CONSTRAIN_1_REG
    +            DMA_APBPERI_MAC_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    +                ///  dma_apbperi_mac_pms_constrain_sram_world_0_pms_0
    +                DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    +                ///  dma_apbperi_mac_pms_constrain_sram_world_0_pms_1
    +                DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    +                ///  dma_apbperi_mac_pms_constrain_sram_world_0_pms_2
    +                DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    +                ///  dma_apbperi_mac_pms_constrain_sram_world_0_pms_3
    +                DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    +                reserved12: u4,
    +                ///  dma_apbperi_mac_pms_constrain_sram_world_1_pms_0
    +                DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    +                ///  dma_apbperi_mac_pms_constrain_sram_world_1_pms_1
    +                DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    +                ///  dma_apbperi_mac_pms_constrain_sram_world_1_pms_2
    +                DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    +                ///  dma_apbperi_mac_pms_constrain_sram_world_1_pms_3
    +                DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    +                padding: u12,
    +            }),
    +            ///  SENSITIVE_DMA_APBPERI_BACKUP_PMS_CONSTRAIN_0_REG
    +            DMA_APBPERI_BACKUP_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    +                ///  dma_apbperi_backup_pms_constrain_lock
    +                DMA_APBPERI_BACKUP_PMS_CONSTRAIN_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_DMA_APBPERI_BACKUP_PMS_CONSTRAIN_1_REG
    +            DMA_APBPERI_BACKUP_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    +                ///  dma_apbperi_backup_pms_constrain_sram_world_0_pms_0
    +                DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    +                ///  dma_apbperi_backup_pms_constrain_sram_world_0_pms_1
    +                DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    +                ///  dma_apbperi_backup_pms_constrain_sram_world_0_pms_2
    +                DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    +                ///  dma_apbperi_backup_pms_constrain_sram_world_0_pms_3
    +                DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    +                reserved12: u4,
    +                ///  dma_apbperi_backup_pms_constrain_sram_world_1_pms_0
    +                DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    +                ///  dma_apbperi_backup_pms_constrain_sram_world_1_pms_1
    +                DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    +                ///  dma_apbperi_backup_pms_constrain_sram_world_1_pms_2
    +                DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    +                ///  dma_apbperi_backup_pms_constrain_sram_world_1_pms_3
    +                DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    +                padding: u12,
    +            }),
    +            ///  SENSITIVE_DMA_APBPERI_LC_PMS_CONSTRAIN_0_REG
    +            DMA_APBPERI_LC_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    +                ///  dma_apbperi_lc_pms_constrain_lock
    +                DMA_APBPERI_LC_PMS_CONSTRAIN_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_DMA_APBPERI_LC_PMS_CONSTRAIN_1_REG
    +            DMA_APBPERI_LC_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    +                ///  dma_apbperi_lc_pms_constrain_sram_world_0_pms_0
    +                DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    +                ///  dma_apbperi_lc_pms_constrain_sram_world_0_pms_1
    +                DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    +                ///  dma_apbperi_lc_pms_constrain_sram_world_0_pms_2
    +                DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    +                ///  dma_apbperi_lc_pms_constrain_sram_world_0_pms_3
    +                DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    +                reserved12: u4,
    +                ///  dma_apbperi_lc_pms_constrain_sram_world_1_pms_0
    +                DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    +                ///  dma_apbperi_lc_pms_constrain_sram_world_1_pms_1
    +                DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    +                ///  dma_apbperi_lc_pms_constrain_sram_world_1_pms_2
    +                DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    +                ///  dma_apbperi_lc_pms_constrain_sram_world_1_pms_3
    +                DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    +                padding: u12,
    +            }),
    +            ///  SENSITIVE_DMA_APBPERI_AES_PMS_CONSTRAIN_0_REG
    +            DMA_APBPERI_AES_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    +                ///  dma_apbperi_aes_pms_constrain_lock
    +                DMA_APBPERI_AES_PMS_CONSTRAIN_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_DMA_APBPERI_AES_PMS_CONSTRAIN_1_REG
    +            DMA_APBPERI_AES_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    +                ///  dma_apbperi_aes_pms_constrain_sram_world_0_pms_0
    +                DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    +                ///  dma_apbperi_aes_pms_constrain_sram_world_0_pms_1
    +                DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    +                ///  dma_apbperi_aes_pms_constrain_sram_world_0_pms_2
    +                DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    +                ///  dma_apbperi_aes_pms_constrain_sram_world_0_pms_3
    +                DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    +                reserved12: u4,
    +                ///  dma_apbperi_aes_pms_constrain_sram_world_1_pms_0
    +                DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    +                ///  dma_apbperi_aes_pms_constrain_sram_world_1_pms_1
    +                DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    +                ///  dma_apbperi_aes_pms_constrain_sram_world_1_pms_2
    +                DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    +                ///  dma_apbperi_aes_pms_constrain_sram_world_1_pms_3
    +                DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    +                padding: u12,
    +            }),
    +            ///  SENSITIVE_DMA_APBPERI_SHA_PMS_CONSTRAIN_0_REG
    +            DMA_APBPERI_SHA_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    +                ///  dma_apbperi_sha_pms_constrain_lock
    +                DMA_APBPERI_SHA_PMS_CONSTRAIN_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_DMA_APBPERI_SHA_PMS_CONSTRAIN_1_REG
    +            DMA_APBPERI_SHA_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    +                ///  dma_apbperi_sha_pms_constrain_sram_world_0_pms_0
    +                DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    +                ///  dma_apbperi_sha_pms_constrain_sram_world_0_pms_1
    +                DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    +                ///  dma_apbperi_sha_pms_constrain_sram_world_0_pms_2
    +                DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    +                ///  dma_apbperi_sha_pms_constrain_sram_world_0_pms_3
    +                DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    +                reserved12: u4,
    +                ///  dma_apbperi_sha_pms_constrain_sram_world_1_pms_0
    +                DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    +                ///  dma_apbperi_sha_pms_constrain_sram_world_1_pms_1
    +                DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    +                ///  dma_apbperi_sha_pms_constrain_sram_world_1_pms_2
    +                DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    +                ///  dma_apbperi_sha_pms_constrain_sram_world_1_pms_3
    +                DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    +                padding: u12,
    +            }),
    +            ///  SENSITIVE_DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_0_REG
    +            DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    +                ///  dma_apbperi_adc_dac_pms_constrain_lock
    +                DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_1_REG
    +            DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    +                ///  dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_0
    +                DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    +                ///  dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_1
    +                DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    +                ///  dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_2
    +                DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    +                ///  dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_3
    +                DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    +                reserved12: u4,
    +                ///  dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_0
    +                DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    +                ///  dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_1
    +                DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    +                ///  dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_2
    +                DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    +                ///  dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_3
    +                DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    +                padding: u12,
    +            }),
    +            ///  SENSITIVE_DMA_APBPERI_PMS_MONITOR_0_REG
    +            DMA_APBPERI_PMS_MONITOR_0: mmio.Mmio(packed struct(u32) {
    +                ///  dma_apbperi_pms_monitor_lock
    +                DMA_APBPERI_PMS_MONITOR_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_DMA_APBPERI_PMS_MONITOR_1_REG
    +            DMA_APBPERI_PMS_MONITOR_1: mmio.Mmio(packed struct(u32) {
    +                ///  dma_apbperi_pms_monitor_violate_clr
    +                DMA_APBPERI_PMS_MONITOR_VIOLATE_CLR: u1,
    +                ///  dma_apbperi_pms_monitor_violate_en
    +                DMA_APBPERI_PMS_MONITOR_VIOLATE_EN: u1,
    +                padding: u30,
    +            }),
    +            ///  SENSITIVE_DMA_APBPERI_PMS_MONITOR_2_REG
    +            DMA_APBPERI_PMS_MONITOR_2: mmio.Mmio(packed struct(u32) {
    +                ///  dma_apbperi_pms_monitor_violate_intr
    +                DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR: u1,
    +                ///  dma_apbperi_pms_monitor_violate_status_world
    +                DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_WORLD: u2,
    +                ///  dma_apbperi_pms_monitor_violate_status_addr
    +                DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_ADDR: u24,
    +                padding: u5,
    +            }),
    +            ///  SENSITIVE_DMA_APBPERI_PMS_MONITOR_3_REG
    +            DMA_APBPERI_PMS_MONITOR_3: mmio.Mmio(packed struct(u32) {
    +                ///  dma_apbperi_pms_monitor_violate_status_wr
    +                DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_WR: u1,
    +                ///  dma_apbperi_pms_monitor_violate_status_byteen
    +                DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_BYTEEN: u4,
    +                padding: u27,
    +            }),
    +            ///  SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_0_REG
    +            CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    +                ///  core_x_iram0_dram0_dma_split_line_constrain_lock
    +                CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_1_REG
    +            CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    +                ///  core_x_iram0_dram0_dma_sram_category_0
    +                CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_0: u2,
    +                ///  core_x_iram0_dram0_dma_sram_category_1
    +                CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_1: u2,
    +                ///  core_x_iram0_dram0_dma_sram_category_2
    +                CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_2: u2,
    +                reserved14: u8,
    +                ///  core_x_iram0_dram0_dma_sram_splitaddr
    +                CORE_X_IRAM0_DRAM0_DMA_SRAM_SPLITADDR: u8,
    +                padding: u10,
    +            }),
    +            ///  SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_2_REG
    +            CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_2: mmio.Mmio(packed struct(u32) {
    +                ///  core_x_iram0_sram_line_0_category_0
    +                CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_0: u2,
    +                ///  core_x_iram0_sram_line_0_category_1
    +                CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_1: u2,
    +                ///  core_x_iram0_sram_line_0_category_2
    +                CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_2: u2,
    +                reserved14: u8,
    +                ///  core_x_iram0_sram_line_0_splitaddr
    +                CORE_X_IRAM0_SRAM_LINE_0_SPLITADDR: u8,
    +                padding: u10,
    +            }),
    +            ///  SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_3_REG
    +            CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_3: mmio.Mmio(packed struct(u32) {
    +                ///  core_x_iram0_sram_line_1_category_0
    +                CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_0: u2,
    +                ///  core_x_iram0_sram_line_1_category_1
    +                CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_1: u2,
    +                ///  core_x_iram0_sram_line_1_category_2
    +                CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_2: u2,
    +                reserved14: u8,
    +                ///  core_x_iram0_sram_line_1_splitaddr
    +                CORE_X_IRAM0_SRAM_LINE_1_SPLITADDR: u8,
    +                padding: u10,
    +            }),
    +            ///  SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_4_REG
    +            CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_4: mmio.Mmio(packed struct(u32) {
    +                ///  core_x_dram0_dma_sram_line_0_category_0
    +                CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_0: u2,
    +                ///  core_x_dram0_dma_sram_line_0_category_1
    +                CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_1: u2,
    +                ///  core_x_dram0_dma_sram_line_0_category_2
    +                CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_2: u2,
    +                reserved14: u8,
    +                ///  core_x_dram0_dma_sram_line_0_splitaddr
    +                CORE_X_DRAM0_DMA_SRAM_LINE_0_SPLITADDR: u8,
    +                padding: u10,
    +            }),
    +            ///  SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_5_REG
    +            CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_5: mmio.Mmio(packed struct(u32) {
    +                ///  core_x_dram0_dma_sram_line_1_category_0
    +                CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_0: u2,
    +                ///  core_x_dram0_dma_sram_line_1_category_1
    +                CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_1: u2,
    +                ///  core_x_dram0_dma_sram_line_1_category_2
    +                CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_2: u2,
    +                reserved14: u8,
    +                ///  core_x_dram0_dma_sram_line_1_splitaddr
    +                CORE_X_DRAM0_DMA_SRAM_LINE_1_SPLITADDR: u8,
    +                padding: u10,
    +            }),
    +            ///  SENSITIVE_CORE_X_IRAM0_PMS_CONSTRAIN_0_REG
    +            CORE_X_IRAM0_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    +                ///  core_x_iram0_pms_constrain_lock
    +                CORE_X_IRAM0_PMS_CONSTRAIN_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_CORE_X_IRAM0_PMS_CONSTRAIN_1_REG
    +            CORE_X_IRAM0_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    +                ///  core_x_iram0_pms_constrain_sram_world_1_pms_0
    +                CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u3,
    +                ///  core_x_iram0_pms_constrain_sram_world_1_pms_1
    +                CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u3,
    +                ///  core_x_iram0_pms_constrain_sram_world_1_pms_2
    +                CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u3,
    +                ///  core_x_iram0_pms_constrain_sram_world_1_pms_3
    +                CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u3,
    +                ///  core_x_iram0_pms_constrain_sram_world_1_cachedataarray_pms_0
    +                CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_CACHEDATAARRAY_PMS_0: u3,
    +                reserved18: u3,
    +                ///  core_x_iram0_pms_constrain_rom_world_1_pms
    +                CORE_X_IRAM0_PMS_CONSTRAIN_ROM_WORLD_1_PMS: u3,
    +                padding: u11,
    +            }),
    +            ///  SENSITIVE_CORE_X_IRAM0_PMS_CONSTRAIN_2_REG
    +            CORE_X_IRAM0_PMS_CONSTRAIN_2: mmio.Mmio(packed struct(u32) {
    +                ///  core_x_iram0_pms_constrain_sram_world_0_pms_0
    +                CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u3,
    +                ///  core_x_iram0_pms_constrain_sram_world_0_pms_1
    +                CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u3,
    +                ///  core_x_iram0_pms_constrain_sram_world_0_pms_2
    +                CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u3,
    +                ///  core_x_iram0_pms_constrain_sram_world_0_pms_3
    +                CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u3,
    +                ///  core_x_iram0_pms_constrain_sram_world_0_cachedataarray_pms_0
    +                CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_CACHEDATAARRAY_PMS_0: u3,
    +                reserved18: u3,
    +                ///  core_x_iram0_pms_constrain_rom_world_0_pms
    +                CORE_X_IRAM0_PMS_CONSTRAIN_ROM_WORLD_0_PMS: u3,
    +                padding: u11,
    +            }),
    +            ///  SENSITIVE_CORE_0_IRAM0_PMS_MONITOR_0_REG
    +            CORE_0_IRAM0_PMS_MONITOR_0: mmio.Mmio(packed struct(u32) {
    +                ///  core_0_iram0_pms_monitor_lock
    +                CORE_0_IRAM0_PMS_MONITOR_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_CORE_0_IRAM0_PMS_MONITOR_1_REG
    +            CORE_0_IRAM0_PMS_MONITOR_1: mmio.Mmio(packed struct(u32) {
    +                ///  core_0_iram0_pms_monitor_violate_clr
    +                CORE_0_IRAM0_PMS_MONITOR_VIOLATE_CLR: u1,
    +                ///  core_0_iram0_pms_monitor_violate_en
    +                CORE_0_IRAM0_PMS_MONITOR_VIOLATE_EN: u1,
    +                padding: u30,
    +            }),
    +            ///  SENSITIVE_CORE_0_IRAM0_PMS_MONITOR_2_REG
    +            CORE_0_IRAM0_PMS_MONITOR_2: mmio.Mmio(packed struct(u32) {
    +                ///  core_0_iram0_pms_monitor_violate_intr
    +                CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR: u1,
    +                ///  core_0_iram0_pms_monitor_violate_status_wr
    +                CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_WR: u1,
    +                ///  core_0_iram0_pms_monitor_violate_status_loadstore
    +                CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_LOADSTORE: u1,
    +                ///  core_0_iram0_pms_monitor_violate_status_world
    +                CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_WORLD: u2,
    +                ///  core_0_iram0_pms_monitor_violate_status_addr
    +                CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_ADDR: u24,
    +                padding: u3,
    +            }),
    +            ///  SENSITIVE_CORE_X_DRAM0_PMS_CONSTRAIN_0_REG
    +            CORE_X_DRAM0_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    +                ///  core_x_dram0_pms_constrain_lock
    +                CORE_X_DRAM0_PMS_CONSTRAIN_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_CORE_X_DRAM0_PMS_CONSTRAIN_1_REG
    +            CORE_X_DRAM0_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    +                ///  core_x_dram0_pms_constrain_sram_world_0_pms_0
    +                CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    +                ///  core_x_dram0_pms_constrain_sram_world_0_pms_1
    +                CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    +                ///  core_x_dram0_pms_constrain_sram_world_0_pms_2
    +                CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    +                ///  core_x_dram0_pms_constrain_sram_world_0_pms_3
    +                CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    +                reserved12: u4,
    +                ///  core_x_dram0_pms_constrain_sram_world_1_pms_0
    +                CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    +                ///  core_x_dram0_pms_constrain_sram_world_1_pms_1
    +                CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    +                ///  core_x_dram0_pms_constrain_sram_world_1_pms_2
    +                CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    +                ///  core_x_dram0_pms_constrain_sram_world_1_pms_3
    +                CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    +                reserved24: u4,
    +                ///  core_x_dram0_pms_constrain_rom_world_0_pms
    +                CORE_X_DRAM0_PMS_CONSTRAIN_ROM_WORLD_0_PMS: u2,
    +                ///  core_x_dram0_pms_constrain_rom_world_1_pms
    +                CORE_X_DRAM0_PMS_CONSTRAIN_ROM_WORLD_1_PMS: u2,
    +                padding: u4,
    +            }),
    +            ///  SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_0_REG
    +            CORE_0_DRAM0_PMS_MONITOR_0: mmio.Mmio(packed struct(u32) {
    +                ///  core_0_dram0_pms_monitor_lock
    +                CORE_0_DRAM0_PMS_MONITOR_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_1_REG
    +            CORE_0_DRAM0_PMS_MONITOR_1: mmio.Mmio(packed struct(u32) {
    +                ///  core_0_dram0_pms_monitor_violate_clr
    +                CORE_0_DRAM0_PMS_MONITOR_VIOLATE_CLR: u1,
    +                ///  core_0_dram0_pms_monitor_violate_en
    +                CORE_0_DRAM0_PMS_MONITOR_VIOLATE_EN: u1,
    +                padding: u30,
    +            }),
    +            ///  SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_2_REG
    +            CORE_0_DRAM0_PMS_MONITOR_2: mmio.Mmio(packed struct(u32) {
    +                ///  core_0_dram0_pms_monitor_violate_intr
    +                CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR: u1,
    +                ///  core_0_dram0_pms_monitor_violate_status_lock
    +                CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_LOCK: u1,
    +                ///  core_0_dram0_pms_monitor_violate_status_world
    +                CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_WORLD: u2,
    +                ///  core_0_dram0_pms_monitor_violate_status_addr
    +                CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_ADDR: u24,
    +                padding: u4,
    +            }),
    +            ///  SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_3_REG
    +            CORE_0_DRAM0_PMS_MONITOR_3: mmio.Mmio(packed struct(u32) {
    +                ///  core_0_dram0_pms_monitor_violate_status_wr
    +                CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_WR: u1,
    +                ///  core_0_dram0_pms_monitor_violate_status_byteen
    +                CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_BYTEEN: u4,
    +                padding: u27,
    +            }),
    +            ///  SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_0_REG
    +            CORE_0_PIF_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    +                ///  core_0_pif_pms_constrain_lock
    +                CORE_0_PIF_PMS_CONSTRAIN_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_1_REG
    +            CORE_0_PIF_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    +                ///  core_0_pif_pms_constrain_world_0_uart
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_UART: u2,
    +                ///  core_0_pif_pms_constrain_world_0_g0spi_1
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_G0SPI_1: u2,
    +                ///  core_0_pif_pms_constrain_world_0_g0spi_0
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_G0SPI_0: u2,
    +                ///  core_0_pif_pms_constrain_world_0_gpio
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_GPIO: u2,
    +                ///  core_0_pif_pms_constrain_world_0_fe2
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_FE2: u2,
    +                ///  core_0_pif_pms_constrain_world_0_fe
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_FE: u2,
    +                ///  core_0_pif_pms_constrain_world_0_timer
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_TIMER: u2,
    +                ///  core_0_pif_pms_constrain_world_0_rtc
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_RTC: u2,
    +                ///  core_0_pif_pms_constrain_world_0_io_mux
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_IO_MUX: u2,
    +                ///  core_0_pif_pms_constrain_world_0_wdg
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_WDG: u2,
    +                reserved24: u4,
    +                ///  core_0_pif_pms_constrain_world_0_misc
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_MISC: u2,
    +                ///  core_0_pif_pms_constrain_world_0_i2c
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_I2C: u2,
    +                reserved30: u2,
    +                ///  core_0_pif_pms_constrain_world_0_uart1
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_UART1: u2,
    +            }),
    +            ///  SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_2_REG
    +            CORE_0_PIF_PMS_CONSTRAIN_2: mmio.Mmio(packed struct(u32) {
    +                ///  core_0_pif_pms_constrain_world_0_bt
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_BT: u2,
    +                reserved4: u2,
    +                ///  core_0_pif_pms_constrain_world_0_i2c_ext0
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_I2C_EXT0: u2,
    +                ///  core_0_pif_pms_constrain_world_0_uhci0
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_UHCI0: u2,
    +                reserved10: u2,
    +                ///  core_0_pif_pms_constrain_world_0_rmt
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_RMT: u2,
    +                reserved16: u4,
    +                ///  core_0_pif_pms_constrain_world_0_ledc
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_LEDC: u2,
    +                reserved22: u4,
    +                ///  core_0_pif_pms_constrain_world_0_bb
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_BB: u2,
    +                reserved26: u2,
    +                ///  core_0_pif_pms_constrain_world_0_timergroup
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_TIMERGROUP: u2,
    +                ///  core_0_pif_pms_constrain_world_0_timergroup1
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_TIMERGROUP1: u2,
    +                ///  core_0_pif_pms_constrain_world_0_systimer
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SYSTIMER: u2,
    +            }),
    +            ///  SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_3_REG
    +            CORE_0_PIF_PMS_CONSTRAIN_3: mmio.Mmio(packed struct(u32) {
    +                ///  core_0_pif_pms_constrain_world_0_spi_2
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SPI_2: u2,
    +                reserved4: u2,
    +                ///  core_0_pif_pms_constrain_world_0_apb_ctrl
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_APB_CTRL: u2,
    +                reserved10: u4,
    +                ///  core_0_pif_pms_constrain_world_0_can
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CAN: u2,
    +                reserved14: u2,
    +                ///  core_0_pif_pms_constrain_world_0_i2s1
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_I2S1: u2,
    +                reserved22: u6,
    +                ///  core_0_pif_pms_constrain_world_0_rwbt
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_RWBT: u2,
    +                reserved26: u2,
    +                ///  core_0_pif_pms_constrain_world_0_wifimac
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_WIFIMAC: u2,
    +                ///  core_0_pif_pms_constrain_world_0_pwr
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_PWR: u2,
    +                padding: u2,
    +            }),
    +            ///  SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_4_REG
    +            CORE_0_PIF_PMS_CONSTRAIN_4: mmio.Mmio(packed struct(u32) {
    +                reserved2: u2,
    +                ///  core_0_pif_pms_constrain_world_0_usb_wrap
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_USB_WRAP: u2,
    +                ///  core_0_pif_pms_constrain_world_0_crypto_peri
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CRYPTO_PERI: u2,
    +                ///  core_0_pif_pms_constrain_world_0_crypto_dma
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CRYPTO_DMA: u2,
    +                ///  core_0_pif_pms_constrain_world_0_apb_adc
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_APB_ADC: u2,
    +                reserved12: u2,
    +                ///  core_0_pif_pms_constrain_world_0_bt_pwr
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_BT_PWR: u2,
    +                ///  core_0_pif_pms_constrain_world_0_usb_device
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_USB_DEVICE: u2,
    +                ///  core_0_pif_pms_constrain_world_0_system
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SYSTEM: u2,
    +                ///  core_0_pif_pms_constrain_world_0_sensitive
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SENSITIVE: u2,
    +                ///  core_0_pif_pms_constrain_world_0_interrupt
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_INTERRUPT: u2,
    +                ///  core_0_pif_pms_constrain_world_0_dma_copy
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_DMA_COPY: u2,
    +                ///  core_0_pif_pms_constrain_world_0_cache_config
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CACHE_CONFIG: u2,
    +                ///  core_0_pif_pms_constrain_world_0_ad
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_AD: u2,
    +                ///  core_0_pif_pms_constrain_world_0_dio
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_DIO: u2,
    +                ///  core_0_pif_pms_constrain_world_0_world_controller
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_WORLD_CONTROLLER: u2,
    +            }),
    +            ///  SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_5_REG
    +            CORE_0_PIF_PMS_CONSTRAIN_5: mmio.Mmio(packed struct(u32) {
    +                ///  core_0_pif_pms_constrain_world_1_uart
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_UART: u2,
    +                ///  core_0_pif_pms_constrain_world_1_g0spi_1
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_G0SPI_1: u2,
    +                ///  core_0_pif_pms_constrain_world_1_g0spi_0
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_G0SPI_0: u2,
    +                ///  core_0_pif_pms_constrain_world_1_gpio
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_GPIO: u2,
    +                ///  core_0_pif_pms_constrain_world_1_fe2
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_FE2: u2,
    +                ///  core_0_pif_pms_constrain_world_1_fe
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_FE: u2,
    +                ///  core_0_pif_pms_constrain_world_1_timer
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_TIMER: u2,
    +                ///  core_0_pif_pms_constrain_world_1_rtc
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_RTC: u2,
    +                ///  core_0_pif_pms_constrain_world_1_io_mux
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_IO_MUX: u2,
    +                ///  core_0_pif_pms_constrain_world_1_wdg
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_WDG: u2,
    +                reserved24: u4,
    +                ///  core_0_pif_pms_constrain_world_1_misc
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_MISC: u2,
    +                ///  core_0_pif_pms_constrain_world_1_i2c
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_I2C: u2,
    +                reserved30: u2,
    +                ///  core_0_pif_pms_constrain_world_1_uart1
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_UART1: u2,
    +            }),
    +            ///  SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_6_REG
    +            CORE_0_PIF_PMS_CONSTRAIN_6: mmio.Mmio(packed struct(u32) {
    +                ///  core_0_pif_pms_constrain_world_1_bt
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_BT: u2,
    +                reserved4: u2,
    +                ///  core_0_pif_pms_constrain_world_1_i2c_ext0
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_I2C_EXT0: u2,
    +                ///  core_0_pif_pms_constrain_world_1_uhci0
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_UHCI0: u2,
    +                reserved10: u2,
    +                ///  core_0_pif_pms_constrain_world_1_rmt
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_RMT: u2,
    +                reserved16: u4,
    +                ///  core_0_pif_pms_constrain_world_1_ledc
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_LEDC: u2,
    +                reserved22: u4,
    +                ///  core_0_pif_pms_constrain_world_1_bb
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_BB: u2,
    +                reserved26: u2,
    +                ///  core_0_pif_pms_constrain_world_1_timergroup
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_TIMERGROUP: u2,
    +                ///  core_0_pif_pms_constrain_world_1_timergroup1
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_TIMERGROUP1: u2,
    +                ///  core_0_pif_pms_constrain_world_1_systimer
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SYSTIMER: u2,
    +            }),
    +            ///  SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_7_REG
    +            CORE_0_PIF_PMS_CONSTRAIN_7: mmio.Mmio(packed struct(u32) {
    +                ///  core_0_pif_pms_constrain_world_1_spi_2
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SPI_2: u2,
    +                reserved4: u2,
    +                ///  core_0_pif_pms_constrain_world_1_apb_ctrl
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_APB_CTRL: u2,
    +                reserved10: u4,
    +                ///  core_0_pif_pms_constrain_world_1_can
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CAN: u2,
    +                reserved14: u2,
    +                ///  core_0_pif_pms_constrain_world_1_i2s1
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_I2S1: u2,
    +                reserved22: u6,
    +                ///  core_0_pif_pms_constrain_world_1_rwbt
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_RWBT: u2,
    +                reserved26: u2,
    +                ///  core_0_pif_pms_constrain_world_1_wifimac
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_WIFIMAC: u2,
    +                ///  core_0_pif_pms_constrain_world_1_pwr
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_PWR: u2,
    +                padding: u2,
    +            }),
    +            ///  SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_8_REG
    +            CORE_0_PIF_PMS_CONSTRAIN_8: mmio.Mmio(packed struct(u32) {
    +                reserved2: u2,
    +                ///  core_0_pif_pms_constrain_world_1_usb_wrap
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_USB_WRAP: u2,
    +                ///  core_0_pif_pms_constrain_world_1_crypto_peri
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CRYPTO_PERI: u2,
    +                ///  core_0_pif_pms_constrain_world_1_crypto_dma
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CRYPTO_DMA: u2,
    +                ///  core_0_pif_pms_constrain_world_1_apb_adc
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_APB_ADC: u2,
    +                reserved12: u2,
    +                ///  core_0_pif_pms_constrain_world_1_bt_pwr
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_BT_PWR: u2,
    +                ///  core_0_pif_pms_constrain_world_1_usb_device
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_USB_DEVICE: u2,
    +                ///  core_0_pif_pms_constrain_world_1_system
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SYSTEM: u2,
    +                ///  core_0_pif_pms_constrain_world_1_sensitive
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SENSITIVE: u2,
    +                ///  core_0_pif_pms_constrain_world_1_interrupt
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_INTERRUPT: u2,
    +                ///  core_0_pif_pms_constrain_world_1_dma_copy
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_DMA_COPY: u2,
    +                ///  core_0_pif_pms_constrain_world_1_cache_config
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CACHE_CONFIG: u2,
    +                ///  core_0_pif_pms_constrain_world_1_ad
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_AD: u2,
    +                ///  core_0_pif_pms_constrain_world_1_dio
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_DIO: u2,
    +                ///  core_0_pif_pms_constrain_world_1_world_controller
    +                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_WORLD_CONTROLLER: u2,
    +            }),
    +            ///  SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_9_REG
    +            CORE_0_PIF_PMS_CONSTRAIN_9: mmio.Mmio(packed struct(u32) {
    +                ///  core_0_pif_pms_constrain_rtcfast_spltaddr_world_0
    +                CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_SPLTADDR_WORLD_0: u11,
    +                ///  core_0_pif_pms_constrain_rtcfast_spltaddr_world_1
    +                CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_SPLTADDR_WORLD_1: u11,
    +                padding: u10,
    +            }),
    +            ///  SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_10_REG
    +            CORE_0_PIF_PMS_CONSTRAIN_10: mmio.Mmio(packed struct(u32) {
    +                ///  core_0_pif_pms_constrain_rtcfast_world_0_l
    +                CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_0_L: u3,
    +                ///  core_0_pif_pms_constrain_rtcfast_world_0_h
    +                CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_0_H: u3,
    +                ///  core_0_pif_pms_constrain_rtcfast_world_1_l
    +                CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_1_L: u3,
    +                ///  core_0_pif_pms_constrain_rtcfast_world_1_h
    +                CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_1_H: u3,
    +                padding: u20,
    +            }),
    +            ///  SENSITIVE_REGION_PMS_CONSTRAIN_0_REG
    +            REGION_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    +                ///  region_pms_constrain_lock
    +                REGION_PMS_CONSTRAIN_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_REGION_PMS_CONSTRAIN_1_REG
    +            REGION_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    +                ///  region_pms_constrain_world_0_area_0
    +                REGION_PMS_CONSTRAIN_WORLD_0_AREA_0: u2,
    +                ///  region_pms_constrain_world_0_area_1
    +                REGION_PMS_CONSTRAIN_WORLD_0_AREA_1: u2,
    +                ///  region_pms_constrain_world_0_area_2
    +                REGION_PMS_CONSTRAIN_WORLD_0_AREA_2: u2,
    +                ///  region_pms_constrain_world_0_area_3
    +                REGION_PMS_CONSTRAIN_WORLD_0_AREA_3: u2,
    +                ///  region_pms_constrain_world_0_area_4
    +                REGION_PMS_CONSTRAIN_WORLD_0_AREA_4: u2,
    +                ///  region_pms_constrain_world_0_area_5
    +                REGION_PMS_CONSTRAIN_WORLD_0_AREA_5: u2,
    +                ///  region_pms_constrain_world_0_area_6
    +                REGION_PMS_CONSTRAIN_WORLD_0_AREA_6: u2,
    +                padding: u18,
    +            }),
    +            ///  SENSITIVE_REGION_PMS_CONSTRAIN_2_REG
    +            REGION_PMS_CONSTRAIN_2: mmio.Mmio(packed struct(u32) {
    +                ///  region_pms_constrain_world_1_area_0
    +                REGION_PMS_CONSTRAIN_WORLD_1_AREA_0: u2,
    +                ///  region_pms_constrain_world_1_area_1
    +                REGION_PMS_CONSTRAIN_WORLD_1_AREA_1: u2,
    +                ///  region_pms_constrain_world_1_area_2
    +                REGION_PMS_CONSTRAIN_WORLD_1_AREA_2: u2,
    +                ///  region_pms_constrain_world_1_area_3
    +                REGION_PMS_CONSTRAIN_WORLD_1_AREA_3: u2,
    +                ///  region_pms_constrain_world_1_area_4
    +                REGION_PMS_CONSTRAIN_WORLD_1_AREA_4: u2,
    +                ///  region_pms_constrain_world_1_area_5
    +                REGION_PMS_CONSTRAIN_WORLD_1_AREA_5: u2,
    +                ///  region_pms_constrain_world_1_area_6
    +                REGION_PMS_CONSTRAIN_WORLD_1_AREA_6: u2,
    +                padding: u18,
    +            }),
    +            ///  SENSITIVE_REGION_PMS_CONSTRAIN_3_REG
    +            REGION_PMS_CONSTRAIN_3: mmio.Mmio(packed struct(u32) {
    +                ///  region_pms_constrain_addr_0
    +                REGION_PMS_CONSTRAIN_ADDR_0: u30,
    +                padding: u2,
    +            }),
    +            ///  SENSITIVE_REGION_PMS_CONSTRAIN_4_REG
    +            REGION_PMS_CONSTRAIN_4: mmio.Mmio(packed struct(u32) {
    +                ///  region_pms_constrain_addr_1
    +                REGION_PMS_CONSTRAIN_ADDR_1: u30,
    +                padding: u2,
    +            }),
    +            ///  SENSITIVE_REGION_PMS_CONSTRAIN_5_REG
    +            REGION_PMS_CONSTRAIN_5: mmio.Mmio(packed struct(u32) {
    +                ///  region_pms_constrain_addr_2
    +                REGION_PMS_CONSTRAIN_ADDR_2: u30,
    +                padding: u2,
    +            }),
    +            ///  SENSITIVE_REGION_PMS_CONSTRAIN_6_REG
    +            REGION_PMS_CONSTRAIN_6: mmio.Mmio(packed struct(u32) {
    +                ///  region_pms_constrain_addr_3
    +                REGION_PMS_CONSTRAIN_ADDR_3: u30,
    +                padding: u2,
    +            }),
    +            ///  SENSITIVE_REGION_PMS_CONSTRAIN_7_REG
    +            REGION_PMS_CONSTRAIN_7: mmio.Mmio(packed struct(u32) {
    +                ///  region_pms_constrain_addr_4
    +                REGION_PMS_CONSTRAIN_ADDR_4: u30,
    +                padding: u2,
    +            }),
    +            ///  SENSITIVE_REGION_PMS_CONSTRAIN_8_REG
    +            REGION_PMS_CONSTRAIN_8: mmio.Mmio(packed struct(u32) {
    +                ///  region_pms_constrain_addr_5
    +                REGION_PMS_CONSTRAIN_ADDR_5: u30,
    +                padding: u2,
    +            }),
    +            ///  SENSITIVE_REGION_PMS_CONSTRAIN_9_REG
    +            REGION_PMS_CONSTRAIN_9: mmio.Mmio(packed struct(u32) {
    +                ///  region_pms_constrain_addr_6
    +                REGION_PMS_CONSTRAIN_ADDR_6: u30,
    +                padding: u2,
    +            }),
    +            ///  SENSITIVE_REGION_PMS_CONSTRAIN_10_REG
    +            REGION_PMS_CONSTRAIN_10: mmio.Mmio(packed struct(u32) {
    +                ///  region_pms_constrain_addr_7
    +                REGION_PMS_CONSTRAIN_ADDR_7: u30,
    +                padding: u2,
    +            }),
    +            ///  SENSITIVE_CORE_0_PIF_PMS_MONITOR_0_REG
    +            CORE_0_PIF_PMS_MONITOR_0: mmio.Mmio(packed struct(u32) {
    +                ///  core_0_pif_pms_monitor_lock
    +                CORE_0_PIF_PMS_MONITOR_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_CORE_0_PIF_PMS_MONITOR_1_REG
    +            CORE_0_PIF_PMS_MONITOR_1: mmio.Mmio(packed struct(u32) {
    +                ///  core_0_pif_pms_monitor_violate_clr
    +                CORE_0_PIF_PMS_MONITOR_VIOLATE_CLR: u1,
    +                ///  core_0_pif_pms_monitor_violate_en
    +                CORE_0_PIF_PMS_MONITOR_VIOLATE_EN: u1,
    +                padding: u30,
    +            }),
    +            ///  SENSITIVE_CORE_0_PIF_PMS_MONITOR_2_REG
    +            CORE_0_PIF_PMS_MONITOR_2: mmio.Mmio(packed struct(u32) {
    +                ///  core_0_pif_pms_monitor_violate_intr
    +                CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR: u1,
    +                ///  core_0_pif_pms_monitor_violate_status_hport_0
    +                CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HPORT_0: u1,
    +                ///  core_0_pif_pms_monitor_violate_status_hsize
    +                CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HSIZE: u3,
    +                ///  core_0_pif_pms_monitor_violate_status_hwrite
    +                CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HWRITE: u1,
    +                ///  core_0_pif_pms_monitor_violate_status_hworld
    +                CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HWORLD: u2,
    +                padding: u24,
    +            }),
    +            ///  SENSITIVE_CORE_0_PIF_PMS_MONITOR_3_REG
    +            CORE_0_PIF_PMS_MONITOR_3: mmio.Mmio(packed struct(u32) {
    +                ///  core_0_pif_pms_monitor_violate_status_haddr
    +                CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HADDR: u32,
    +            }),
    +            ///  SENSITIVE_CORE_0_PIF_PMS_MONITOR_4_REG
    +            CORE_0_PIF_PMS_MONITOR_4: mmio.Mmio(packed struct(u32) {
    +                ///  core_0_pif_pms_monitor_nonword_violate_clr
    +                CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_CLR: u1,
    +                ///  core_0_pif_pms_monitor_nonword_violate_en
    +                CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_EN: u1,
    +                padding: u30,
    +            }),
    +            ///  SENSITIVE_CORE_0_PIF_PMS_MONITOR_5_REG
    +            CORE_0_PIF_PMS_MONITOR_5: mmio.Mmio(packed struct(u32) {
    +                ///  core_0_pif_pms_monitor_nonword_violate_intr
    +                CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_INTR: u1,
    +                ///  core_0_pif_pms_monitor_nonword_violate_status_hsize
    +                CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_STATUS_HSIZE: u2,
    +                ///  core_0_pif_pms_monitor_nonword_violate_status_hworld
    +                CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_STATUS_HWORLD: u2,
    +                padding: u27,
    +            }),
    +            ///  SENSITIVE_CORE_0_PIF_PMS_MONITOR_6_REG
    +            CORE_0_PIF_PMS_MONITOR_6: mmio.Mmio(packed struct(u32) {
    +                ///  core_0_pif_pms_monitor_nonword_violate_status_haddr
    +                CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_STATUS_HADDR: u32,
    +            }),
    +            ///  SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_0_REG
    +            BACKUP_BUS_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    +                ///  backup_bus_pms_constrain_lock
    +                BACKUP_BUS_PMS_CONSTRAIN_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_1_REG
    +            BACKUP_BUS_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    +                ///  backup_bus_pms_constrain_uart
    +                BACKUP_BUS_PMS_CONSTRAIN_UART: u2,
    +                ///  backup_bus_pms_constrain_g0spi_1
    +                BACKUP_BUS_PMS_CONSTRAIN_G0SPI_1: u2,
    +                ///  backup_bus_pms_constrain_g0spi_0
    +                BACKUP_BUS_PMS_CONSTRAIN_G0SPI_0: u2,
    +                ///  backup_bus_pms_constrain_gpio
    +                BACKUP_BUS_PMS_CONSTRAIN_GPIO: u2,
    +                ///  backup_bus_pms_constrain_fe2
    +                BACKUP_BUS_PMS_CONSTRAIN_FE2: u2,
    +                ///  backup_bus_pms_constrain_fe
    +                BACKUP_BUS_PMS_CONSTRAIN_FE: u2,
    +                ///  backup_bus_pms_constrain_timer
    +                BACKUP_BUS_PMS_CONSTRAIN_TIMER: u2,
    +                ///  backup_bus_pms_constrain_rtc
    +                BACKUP_BUS_PMS_CONSTRAIN_RTC: u2,
    +                ///  backup_bus_pms_constrain_io_mux
    +                BACKUP_BUS_PMS_CONSTRAIN_IO_MUX: u2,
    +                ///  backup_bus_pms_constrain_wdg
    +                BACKUP_BUS_PMS_CONSTRAIN_WDG: u2,
    +                reserved24: u4,
    +                ///  backup_bus_pms_constrain_misc
    +                BACKUP_BUS_PMS_CONSTRAIN_MISC: u2,
    +                ///  backup_bus_pms_constrain_i2c
    +                BACKUP_BUS_PMS_CONSTRAIN_I2C: u2,
    +                reserved30: u2,
    +                ///  backup_bus_pms_constrain_uart1
    +                BACKUP_BUS_PMS_CONSTRAIN_UART1: u2,
    +            }),
    +            ///  SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_2_REG
    +            BACKUP_BUS_PMS_CONSTRAIN_2: mmio.Mmio(packed struct(u32) {
    +                ///  backup_bus_pms_constrain_bt
    +                BACKUP_BUS_PMS_CONSTRAIN_BT: u2,
    +                reserved4: u2,
    +                ///  backup_bus_pms_constrain_i2c_ext0
    +                BACKUP_BUS_PMS_CONSTRAIN_I2C_EXT0: u2,
    +                ///  backup_bus_pms_constrain_uhci0
    +                BACKUP_BUS_PMS_CONSTRAIN_UHCI0: u2,
    +                reserved10: u2,
    +                ///  backup_bus_pms_constrain_rmt
    +                BACKUP_BUS_PMS_CONSTRAIN_RMT: u2,
    +                reserved16: u4,
    +                ///  backup_bus_pms_constrain_ledc
    +                BACKUP_BUS_PMS_CONSTRAIN_LEDC: u2,
    +                reserved22: u4,
    +                ///  backup_bus_pms_constrain_bb
    +                BACKUP_BUS_PMS_CONSTRAIN_BB: u2,
    +                reserved26: u2,
    +                ///  backup_bus_pms_constrain_timergroup
    +                BACKUP_BUS_PMS_CONSTRAIN_TIMERGROUP: u2,
    +                ///  backup_bus_pms_constrain_timergroup1
    +                BACKUP_BUS_PMS_CONSTRAIN_TIMERGROUP1: u2,
    +                ///  backup_bus_pms_constrain_systimer
    +                BACKUP_BUS_PMS_CONSTRAIN_SYSTIMER: u2,
    +            }),
    +            ///  SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_3_REG
    +            BACKUP_BUS_PMS_CONSTRAIN_3: mmio.Mmio(packed struct(u32) {
    +                ///  backup_bus_pms_constrain_spi_2
    +                BACKUP_BUS_PMS_CONSTRAIN_SPI_2: u2,
    +                reserved4: u2,
    +                ///  backup_bus_pms_constrain_apb_ctrl
    +                BACKUP_BUS_PMS_CONSTRAIN_APB_CTRL: u2,
    +                reserved10: u4,
    +                ///  backup_bus_pms_constrain_can
    +                BACKUP_BUS_PMS_CONSTRAIN_CAN: u2,
    +                reserved14: u2,
    +                ///  backup_bus_pms_constrain_i2s1
    +                BACKUP_BUS_PMS_CONSTRAIN_I2S1: u2,
    +                reserved22: u6,
    +                ///  backup_bus_pms_constrain_rwbt
    +                BACKUP_BUS_PMS_CONSTRAIN_RWBT: u2,
    +                reserved26: u2,
    +                ///  backup_bus_pms_constrain_wifimac
    +                BACKUP_BUS_PMS_CONSTRAIN_WIFIMAC: u2,
    +                ///  backup_bus_pms_constrain_pwr
    +                BACKUP_BUS_PMS_CONSTRAIN_PWR: u2,
    +                padding: u2,
    +            }),
    +            ///  SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_4_REG
    +            BACKUP_BUS_PMS_CONSTRAIN_4: mmio.Mmio(packed struct(u32) {
    +                reserved2: u2,
    +                ///  backup_bus_pms_constrain_usb_wrap
    +                BACKUP_BUS_PMS_CONSTRAIN_USB_WRAP: u2,
    +                ///  backup_bus_pms_constrain_crypto_peri
    +                BACKUP_BUS_PMS_CONSTRAIN_CRYPTO_PERI: u2,
    +                ///  backup_bus_pms_constrain_crypto_dma
    +                BACKUP_BUS_PMS_CONSTRAIN_CRYPTO_DMA: u2,
    +                ///  backup_bus_pms_constrain_apb_adc
    +                BACKUP_BUS_PMS_CONSTRAIN_APB_ADC: u2,
    +                reserved12: u2,
    +                ///  backup_bus_pms_constrain_bt_pwr
    +                BACKUP_BUS_PMS_CONSTRAIN_BT_PWR: u2,
    +                ///  backup_bus_pms_constrain_usb_device
    +                BACKUP_BUS_PMS_CONSTRAIN_USB_DEVICE: u2,
    +                padding: u16,
    +            }),
    +            ///  SENSITIVE_BACKUP_BUS_PMS_MONITOR_0_REG
    +            BACKUP_BUS_PMS_MONITOR_0: mmio.Mmio(packed struct(u32) {
    +                ///  backup_bus_pms_monitor_lock
    +                BACKUP_BUS_PMS_MONITOR_LOCK: u1,
    +                padding: u31,
    +            }),
    +            ///  SENSITIVE_BACKUP_BUS_PMS_MONITOR_1_REG
    +            BACKUP_BUS_PMS_MONITOR_1: mmio.Mmio(packed struct(u32) {
    +                ///  backup_bus_pms_monitor_violate_clr
    +                BACKUP_BUS_PMS_MONITOR_VIOLATE_CLR: u1,
    +                ///  backup_bus_pms_monitor_violate_en
    +                BACKUP_BUS_PMS_MONITOR_VIOLATE_EN: u1,
    +                padding: u30,
    +            }),
    +            ///  SENSITIVE_BACKUP_BUS_PMS_MONITOR_2_REG
    +            BACKUP_BUS_PMS_MONITOR_2: mmio.Mmio(packed struct(u32) {
    +                ///  backup_bus_pms_monitor_violate_intr
    +                BACKUP_BUS_PMS_MONITOR_VIOLATE_INTR: u1,
    +                ///  backup_bus_pms_monitor_violate_status_htrans
    +                BACKUP_BUS_PMS_MONITOR_VIOLATE_STATUS_HTRANS: u2,
    +                ///  backup_bus_pms_monitor_violate_status_hsize
    +                BACKUP_BUS_PMS_MONITOR_VIOLATE_STATUS_HSIZE: u3,
    +                ///  backup_bus_pms_monitor_violate_status_hwrite
    +                BACKUP_BUS_PMS_MONITOR_VIOLATE_STATUS_HWRITE: u1,
    +                padding: u25,
    +            }),
    +            ///  SENSITIVE_BACKUP_BUS_PMS_MONITOR_3_REG
    +            BACKUP_BUS_PMS_MONITOR_3: mmio.Mmio(packed struct(u32) {
    +                ///  backup_bus_pms_monitor_violate_haddr
    +                BACKUP_BUS_PMS_MONITOR_VIOLATE_HADDR: u32,
    +            }),
    +            ///  SENSITIVE_CLOCK_GATE_REG
    +            CLOCK_GATE: mmio.Mmio(packed struct(u32) {
    +                ///  clk_en
    +                CLK_EN: u1,
    +                padding: u31,
    +            }),
    +            reserved4092: [3720]u8,
    +            ///  SENSITIVE_DATE_REG
    +            DATE: mmio.Mmio(packed struct(u32) {
    +                ///  reg_date
    +                DATE: u28,
    +                padding: u4,
    +            }),
    +        };
    +
    +        ///  SHA (Secure Hash Algorithm) Accelerator
    +        pub const SHA = extern struct {
    +            ///  Initial configuration register.
    +            MODE: mmio.Mmio(packed struct(u32) {
    +                ///  Sha mode.
    +                MODE: u3,
    +                padding: u29,
    +            }),
    +            ///  SHA 512/t configuration register 0.
    +            T_STRING: mmio.Mmio(packed struct(u32) {
    +                ///  Sha t_string (used if and only if mode == SHA_512/t).
    +                T_STRING: u32,
    +            }),
    +            ///  SHA 512/t configuration register 1.
    +            T_LENGTH: mmio.Mmio(packed struct(u32) {
    +                ///  Sha t_length (used if and only if mode == SHA_512/t).
    +                T_LENGTH: u6,
    +                padding: u26,
    +            }),
    +            ///  DMA configuration register 0.
    +            DMA_BLOCK_NUM: mmio.Mmio(packed struct(u32) {
    +                ///  Dma-sha block number.
    +                DMA_BLOCK_NUM: u6,
    +                padding: u26,
    +            }),
    +            ///  Typical SHA configuration register 0.
    +            START: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Reserved.
    +                START: u31,
    +            }),
    +            ///  Typical SHA configuration register 1.
    +            CONTINUE: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  Reserved.
    +                CONTINUE: u31,
    +            }),
    +            ///  Busy register.
    +            BUSY: mmio.Mmio(packed struct(u32) {
    +                ///  Sha busy state. 1'b0: idle. 1'b1: busy.
    +                STATE: u1,
    +                padding: u31,
    +            }),
    +            ///  DMA configuration register 1.
    +            DMA_START: mmio.Mmio(packed struct(u32) {
    +                ///  Start dma-sha.
    +                DMA_START: u1,
    +                padding: u31,
    +            }),
    +            ///  DMA configuration register 2.
    +            DMA_CONTINUE: mmio.Mmio(packed struct(u32) {
    +                ///  Continue dma-sha.
    +                DMA_CONTINUE: u1,
    +                padding: u31,
    +            }),
    +            ///  Interrupt clear register.
    +            CLEAR_IRQ: mmio.Mmio(packed struct(u32) {
    +                ///  Clear sha interrupt.
    +                CLEAR_INTERRUPT: u1,
    +                padding: u31,
    +            }),
    +            ///  Interrupt enable register.
    +            IRQ_ENA: mmio.Mmio(packed struct(u32) {
    +                ///  Sha interrupt enable register. 1'b0: disable(default). 1'b1: enable.
    +                INTERRUPT_ENA: u1,
    +                padding: u31,
    +            }),
    +            ///  Date register.
    +            DATE: mmio.Mmio(packed struct(u32) {
    +                ///  Sha date information/ sha version information.
    +                DATE: u30,
    +                padding: u2,
    +            }),
    +            reserved64: [16]u8,
    +            ///  Sha H memory which contains intermediate hash or finial hash.
    +            H_MEM: [64]u8,
    +            ///  Sha M memory which contains message.
    +            M_MEM: [64]u8,
    +        };
    +
    +        ///  SPI (Serial Peripheral Interface) Controller
    +        pub const SPI0 = extern struct {
    +            reserved8: [8]u8,
    +            ///  SPI0 control register.
    +            CTRL: mmio.Mmio(packed struct(u32) {
    +                reserved3: u3,
    +                ///  In the dummy phase the signal level of spi is output by the spi controller.
    +                FDUMMY_OUT: u1,
    +                reserved7: u3,
    +                ///  Apply 2 signals during command phase 1:enable 0: disable
    +                FCMD_DUAL: u1,
    +                ///  Apply 4 signals during command phase 1:enable 0: disable
    +                FCMD_QUAD: u1,
    +                reserved13: u4,
    +                ///  This bit enable the bits: spi_mem_fread_qio, spi_mem_fread_dio, spi_mem_fread_qout and spi_mem_fread_dout. 1: enable 0: disable.
    +                FASTRD_MODE: u1,
    +                ///  In the read operations, read-data phase apply 2 signals. 1: enable 0: disable.
    +                FREAD_DUAL: u1,
    +                reserved18: u3,
    +                ///  The bit is used to set MISO line polarity, 1: high 0, low
    +                Q_POL: u1,
    +                ///  The bit is used to set MOSI line polarity, 1: high 0, low
    +                D_POL: u1,
    +                ///  In the read operations read-data phase apply 4 signals. 1: enable 0: disable.
    +                FREAD_QUAD: u1,
    +                ///  Write protect signal output when SPI is idle. 1: output high, 0: output low.
    +                WP: u1,
    +                reserved23: u1,
    +                ///  In the read operations address phase and read-data phase apply 2 signals. 1: enable 0: disable.
    +                FREAD_DIO: u1,
    +                ///  In the read operations address phase and read-data phase apply 4 signals. 1: enable 0: disable.
    +                FREAD_QIO: u1,
    +                padding: u7,
    +            }),
    +            ///  SPI0 control1 register.
    +            CTRL1: mmio.Mmio(packed struct(u32) {
    +                ///  SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is alwasy on.
    +                CLK_MODE: u2,
    +                reserved30: u28,
    +                ///  SPI0 RX FIFO reset signal.
    +                RXFIFO_RST: u1,
    +                padding: u1,
    +            }),
    +            ///  SPI0 control2 register.
    +            CTRL2: mmio.Mmio(packed struct(u32) {
    +                ///  (cycles-1) of prepare phase by spi clock this bits are combined with spi_mem_cs_setup bit.
    +                CS_SETUP_TIME: u5,
    +                ///  Spi cs signal is delayed to inactive by spi clock this bits are combined with spi_mem_cs_hold bit.
    +                CS_HOLD_TIME: u5,
    +                reserved25: u15,
    +                ///  These bits are used to set the minimum CS high time tSHSL between SPI burst transfer when accesses to flash. tSHSL is (SPI_MEM_CS_HOLD_DELAY[5:0] + 1) MSPI core clock cycles.
    +                CS_HOLD_DELAY: u6,
    +                ///  The FSM will be reset.
    +                SYNC_RESET: u1,
    +            }),
    +            ///  SPI clock division control register.
    +            CLOCK: mmio.Mmio(packed struct(u32) {
    +                ///  In the master mode it must be equal to spi_mem_clkcnt_N.
    +                CLKCNT_L: u8,
    +                ///  In the master mode it must be floor((spi_mem_clkcnt_N+1)/2-1).
    +                CLKCNT_H: u8,
    +                ///  In the master mode it is the divider of spi_mem_clk. So spi_mem_clk frequency is system/(spi_mem_clkcnt_N+1)
    +                CLKCNT_N: u8,
    +                reserved31: u7,
    +                ///  Set this bit in 1-division mode.
    +                CLK_EQU_SYSCLK: u1,
    +            }),
    +            ///  SPI0 user register.
    +            USER: mmio.Mmio(packed struct(u32) {
    +                reserved6: u6,
    +                ///  spi cs keep low when spi is in done phase. 1: enable 0: disable.
    +                CS_HOLD: u1,
    +                ///  spi cs is enable when spi is in prepare phase. 1: enable 0: disable.
    +                CS_SETUP: u1,
    +                reserved9: u1,
    +                ///  the bit combined with spi_mem_mosi_delay_mode bits to set mosi signal delay mode.
    +                CK_OUT_EDGE: u1,
    +                reserved26: u16,
    +                ///  spi clock is disable in dummy phase when the bit is enable.
    +                USR_DUMMY_IDLE: u1,
    +                reserved29: u2,
    +                ///  This bit enable the dummy phase of an operation.
    +                USR_DUMMY: u1,
    +                padding: u2,
    +            }),
    +            ///  SPI0 user1 register.
    +            USER1: mmio.Mmio(packed struct(u32) {
    +                ///  The length in spi_mem_clk cycles of dummy phase. The register value shall be (cycle_num-1).
    +                USR_DUMMY_CYCLELEN: u6,
    +                reserved26: u20,
    +                ///  The length in bits of address phase. The register value shall be (bit_num-1).
    +                USR_ADDR_BITLEN: u6,
    +            }),
    +            ///  SPI0 user2 register.
    +            USER2: mmio.Mmio(packed struct(u32) {
    +                ///  The value of command.
    +                USR_COMMAND_VALUE: u16,
    +                reserved28: u12,
    +                ///  The length in bits of command phase. The register value shall be (bit_num-1)
    +                USR_COMMAND_BITLEN: u4,
    +            }),
    +            reserved44: [8]u8,
    +            ///  SPI0 read control register.
    +            RD_STATUS: mmio.Mmio(packed struct(u32) {
    +                reserved16: u16,
    +                ///  Mode bits in the flash fast read mode it is combined with spi_mem_fastrd_mode bit.
    +                WB_MODE: u8,
    +                padding: u8,
    +            }),
    +            reserved52: [4]u8,
    +            ///  SPI0 misc register
    +            MISC: mmio.Mmio(packed struct(u32) {
    +                reserved3: u3,
    +                ///  The bit is used to indicate the spi0_mst_st controlled transmitting is done.
    +                TRANS_END: u1,
    +                ///  The bit is used to enable the interrupt of spi0_mst_st controlled transmitting is done.
    +                TRANS_END_INT_ENA: u1,
    +                ///  The bit is used to indicate the spi0_slv_st controlled transmitting is done.
    +                CSPI_ST_TRANS_END: u1,
    +                ///  The bit is used to enable the interrupt of spi0_slv_st controlled transmitting is done.
    +                CSPI_ST_TRANS_END_INT_ENA: u1,
    +                reserved9: u2,
    +                ///  1: spi clk line is high when idle 0: spi clk line is low when idle
    +                CK_IDLE_EDGE: u1,
    +                ///  spi cs line keep low when the bit is set.
    +                CS_KEEP_ACTIVE: u1,
    +                padding: u21,
    +            }),
    +            reserved60: [4]u8,
    +            ///  SPI0 bit mode control register.
    +            CACHE_FCTRL: mmio.Mmio(packed struct(u32) {
    +                ///  For SPI0, Cache access enable, 1: enable, 0:disable.
    +                CACHE_REQ_EN: u1,
    +                ///  For SPI0, cache read flash with 4 bytes address, 1: enable, 0:disable.
    +                CACHE_USR_ADDR_4BYTE: u1,
    +                ///  For SPI0, cache read flash for user define command, 1: enable, 0:disable.
    +                CACHE_FLASH_USR_CMD: u1,
    +                ///  For SPI0 flash, din phase apply 2 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_dio.
    +                FDIN_DUAL: u1,
    +                ///  For SPI0 flash, dout phase apply 2 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_dio.
    +                FDOUT_DUAL: u1,
    +                ///  For SPI0 flash, address phase apply 2 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_dio.
    +                FADDR_DUAL: u1,
    +                ///  For SPI0 flash, din phase apply 4 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_qio.
    +                FDIN_QUAD: u1,
    +                ///  For SPI0 flash, dout phase apply 4 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_qio.
    +                FDOUT_QUAD: u1,
    +                ///  For SPI0 flash, address phase apply 4 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_qio.
    +                FADDR_QUAD: u1,
    +                padding: u23,
    +            }),
    +            reserved84: [20]u8,
    +            ///  SPI0 FSM status register
    +            FSM: mmio.Mmio(packed struct(u32) {
    +                ///  The current status of SPI0 slave FSM: spi0_slv_st. 0: idle state, 1: preparation state, 2: send command state, 3: send address state, 4: wait state, 5: read data state, 6:write data state, 7: done state, 8: read data end state.
    +                CSPI_ST: u4,
    +                ///  The current status of SPI0 master FSM: spi0_mst_st. 0: idle state, 1:EM_CACHE_GRANT , 2: program/erase suspend state, 3: SPI0 read data state, 4: wait cache/EDMA sent data is stored in SPI0 TX FIFO, 5: SPI0 write data state.
    +                EM_ST: u3,
    +                ///  The lock delay time of SPI0/1 arbiter by spi0_slv_st, after PER is sent by SPI1.
    +                CSPI_LOCK_DELAY_TIME: u5,
    +                padding: u20,
    +            }),
    +            reserved168: [80]u8,
    +            ///  SPI0 timing calibration register
    +            TIMING_CALI: mmio.Mmio(packed struct(u32) {
    +                ///  The bit is used to enable timing adjust clock for all reading operations.
    +                TIMING_CLK_ENA: u1,
    +                ///  The bit is used to enable timing auto-calibration for all reading operations.
    +                TIMING_CALI: u1,
    +                ///  add extra dummy spi clock cycle length for spi clock calibration.
    +                EXTRA_DUMMY_CYCLELEN: u3,
    +                padding: u27,
    +            }),
    +            ///  SPI0 input delay mode control register
    +            DIN_MODE: mmio.Mmio(packed struct(u32) {
    +                ///  the input signals are delayed by system clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input with the spi_clk high edge, 6: input with the spi_clk low edge
    +                DIN0_MODE: u2,
    +                ///  the input signals are delayed by system clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input with the spi_clk high edge, 6: input with the spi_clk low edge
    +                DIN1_MODE: u2,
    +                ///  the input signals are delayed by system clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input with the spi_clk high edge, 6: input with the spi_clk low edge
    +                DIN2_MODE: u2,
    +                ///  the input signals are delayed by system clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input with the spi_clk high edge, 6: input with the spi_clk low edge
    +                DIN3_MODE: u2,
    +                padding: u24,
    +            }),
    +            ///  SPI0 input delay number control register
    +            DIN_NUM: mmio.Mmio(packed struct(u32) {
    +                ///  the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...
    +                DIN0_NUM: u2,
    +                ///  the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...
    +                DIN1_NUM: u2,
    +                ///  the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...
    +                DIN2_NUM: u2,
    +                ///  the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...
    +                DIN3_NUM: u2,
    +                padding: u24,
    +            }),
    +            ///  SPI0 output delay mode control register
    +            DOUT_MODE: mmio.Mmio(packed struct(u32) {
    +                ///  the output signals are delayed by system clock cycles, 0: output without delayed, 1: output with the posedge of clk_apb,2 output with the negedge of clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low edge
    +                DOUT0_MODE: u1,
    +                ///  the output signals are delayed by system clock cycles, 0: output without delayed, 1: output with the posedge of clk_apb,2 output with the negedge of clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low edge
    +                DOUT1_MODE: u1,
    +                ///  the output signals are delayed by system clock cycles, 0: output without delayed, 1: output with the posedge of clk_apb,2 output with the negedge of clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low edge
    +                DOUT2_MODE: u1,
    +                ///  the output signals are delayed by system clock cycles, 0: output without delayed, 1: output with the posedge of clk_apb,2 output with the negedge of clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low edge
    +                DOUT3_MODE: u1,
    +                padding: u28,
    +            }),
    +            reserved220: [36]u8,
    +            ///  SPI0 clk_gate register
    +            CLOCK_GATE: mmio.Mmio(packed struct(u32) {
    +                ///  Register clock gate enable signal. 1: Enable. 0: Disable.
    +                CLK_EN: u1,
    +                padding: u31,
    +            }),
    +            ///  SPI0 module clock select register
    +            CORE_CLK_SEL: mmio.Mmio(packed struct(u32) {
    +                ///  When the digital system clock selects PLL clock and the frequency of PLL clock is 480MHz, the value of reg_spi01_clk_sel: 0: SPI0/1 module clock (clk) is 80MHz. 1: SPI0/1 module clock (clk) is 120MHz. 2: SPI0/1 module clock (clk) 160MHz. 3: Not used. When the digital system clock selects PLL clock and the frequency of PLL clock is 320MHz, the value of reg_spi01_clk_sel: 0: SPI0/1 module clock (clk) is 80MHz. 1: SPI0/1 module clock (clk) is 80MHz. 2: SPI0/1 module clock (clk) 160MHz. 3: Not used.
    +                SPI01_CLK_SEL: u2,
    +                padding: u30,
    +            }),
    +            reserved1020: [792]u8,
    +            ///  Version control register
    +            DATE: mmio.Mmio(packed struct(u32) {
    +                ///  SPI register version.
    +                DATE: u28,
    +                padding: u4,
    +            }),
    +        };
    +
    +        ///  SPI (Serial Peripheral Interface) Controller
    +        pub const SPI1 = extern struct {
    +            ///  SPI1 memory command register
    +            CMD: mmio.Mmio(packed struct(u32) {
    +                ///  The current status of SPI1 master FSM.
    +                SPI1_MST_ST: u4,
    +                ///  The current status of SPI1 slave FSM: mspi_st. 0: idle state, 1: preparation state, 2: send command state, 3: send address state, 4: wait state, 5: read data state, 6:write data state, 7: done state, 8: read data end state.
    +                MSPI_ST: u4,
    +                reserved17: u9,
    +                ///  In user mode, it is set to indicate that program/erase operation will be triggered. The bit is combined with spi_mem_usr bit. The bit will be cleared once the operation done.1: enable 0: disable.
    +                FLASH_PE: u1,
    +                ///  User define command enable. An operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.
    +                USR: u1,
    +                ///  Drive Flash into high performance mode. The bit will be cleared once the operation done.1: enable 0: disable.
    +                FLASH_HPM: u1,
    +                ///  This bit combined with reg_resandres bit releases Flash from the power-down state or high performance mode and obtains the devices ID. The bit will be cleared once the operation done.1: enable 0: disable.
    +                FLASH_RES: u1,
    +                ///  Drive Flash into power down. An operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.
    +                FLASH_DP: u1,
    +                ///  Chip erase enable. Chip erase operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.
    +                FLASH_CE: u1,
    +                ///  Block erase enable(32KB) . Block erase operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.
    +                FLASH_BE: u1,
    +                ///  Sector erase enable(4KB). Sector erase operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.
    +                FLASH_SE: u1,
    +                ///  Page program enable(1 byte ~256 bytes data to be programmed). Page program operation will be triggered when the bit is set. The bit will be cleared once the operation done .1: enable 0: disable.
    +                FLASH_PP: u1,
    +                ///  Write status register enable. Write status operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.
    +                FLASH_WRSR: u1,
    +                ///  Read status register-1. Read status operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.
    +                FLASH_RDSR: u1,
    +                ///  Read JEDEC ID . Read ID command will be sent when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.
    +                FLASH_RDID: u1,
    +                ///  Write flash disable. Write disable command will be sent when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.
    +                FLASH_WRDI: u1,
    +                ///  Write flash enable. Write enable command will be sent when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.
    +                FLASH_WREN: u1,
    +                ///  Read flash enable. Read flash operation will be triggered when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.
    +                FLASH_READ: u1,
    +            }),
    +            ///  SPI1 address register
    +            ADDR: mmio.Mmio(packed struct(u32) {
    +                ///  In user mode, it is the memory address. other then the bit0-bit23 is the memory address, the bit24-bit31 are the byte length of a transfer.
    +                USR_ADDR_VALUE: u32,
    +            }),
    +            ///  SPI1 control register.
    +            CTRL: mmio.Mmio(packed struct(u32) {
    +                reserved3: u3,
    +                ///  In the dummy phase the signal level of spi is output by the spi controller.
    +                FDUMMY_OUT: u1,
    +                reserved7: u3,
    +                ///  Apply 2 signals during command phase 1:enable 0: disable
    +                FCMD_DUAL: u1,
    +                ///  Apply 4 signals during command phase 1:enable 0: disable
    +                FCMD_QUAD: u1,
    +                reserved10: u1,
    +                ///  For SPI1, initialize crc32 module before writing encrypted data to flash. Active low.
    +                FCS_CRC_EN: u1,
    +                ///  For SPI1, enable crc32 when writing encrypted data to flash. 1: enable 0:disable
    +                TX_CRC_EN: u1,
    +                reserved13: u1,
    +                ///  This bit enable the bits: spi_mem_fread_qio, spi_mem_fread_dio, spi_mem_fread_qout and spi_mem_fread_dout. 1: enable 0: disable.
    +                FASTRD_MODE: u1,
    +                ///  In the read operations, read-data phase apply 2 signals. 1: enable 0: disable.
    +                FREAD_DUAL: u1,
    +                ///  The Device ID is read out to SPI_MEM_RD_STATUS register, this bit combine with spi_mem_flash_res bit. 1: enable 0: disable.
    +                RESANDRES: u1,
    +                reserved18: u2,
    +                ///  The bit is used to set MISO line polarity, 1: high 0, low
    +                Q_POL: u1,
    +                ///  The bit is used to set MOSI line polarity, 1: high 0, low
    +                D_POL: u1,
    +                ///  In the read operations read-data phase apply 4 signals. 1: enable 0: disable.
    +                FREAD_QUAD: u1,
    +                ///  Write protect signal output when SPI is idle. 1: output high, 0: output low.
    +                WP: u1,
    +                ///  two bytes data will be written to status register when it is set. 1: enable 0: disable.
    +                WRSR_2B: u1,
    +                ///  In the read operations address phase and read-data phase apply 2 signals. 1: enable 0: disable.
    +                FREAD_DIO: u1,
    +                ///  In the read operations address phase and read-data phase apply 4 signals. 1: enable 0: disable.
    +                FREAD_QIO: u1,
    +                padding: u7,
    +            }),
    +            ///  SPI1 control1 register.
    +            CTRL1: mmio.Mmio(packed struct(u32) {
    +                ///  SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is alwasy on.
    +                CLK_MODE: u2,
    +                ///  After RES/DP/HPM command is sent, SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 512) SPI_CLK cycles.
    +                CS_HOLD_DLY_RES: u10,
    +                padding: u20,
    +            }),
    +            ///  SPI1 control2 register.
    +            CTRL2: mmio.Mmio(packed struct(u32) {
    +                reserved31: u31,
    +                ///  The FSM will be reset.
    +                SYNC_RESET: u1,
    +            }),
    +            ///  SPI1 clock division control register.
    +            CLOCK: mmio.Mmio(packed struct(u32) {
    +                ///  In the master mode it must be equal to spi_mem_clkcnt_N.
    +                CLKCNT_L: u8,
    +                ///  In the master mode it must be floor((spi_mem_clkcnt_N+1)/2-1).
    +                CLKCNT_H: u8,
    +                ///  In the master mode it is the divider of spi_mem_clk. So spi_mem_clk frequency is system/(spi_mem_clkcnt_N+1)
    +                CLKCNT_N: u8,
    +                reserved31: u7,
    +                ///  reserved
    +                CLK_EQU_SYSCLK: u1,
    +            }),
    +            ///  SPI1 user register.
    +            USER: mmio.Mmio(packed struct(u32) {
    +                reserved9: u9,
    +                ///  the bit combined with spi_mem_mosi_delay_mode bits to set mosi signal delay mode.
    +                CK_OUT_EDGE: u1,
    +                reserved12: u2,
    +                ///  In the write operations read-data phase apply 2 signals
    +                FWRITE_DUAL: u1,
    +                ///  In the write operations read-data phase apply 4 signals
    +                FWRITE_QUAD: u1,
    +                ///  In the write operations address phase and read-data phase apply 2 signals.
    +                FWRITE_DIO: u1,
    +                ///  In the write operations address phase and read-data phase apply 4 signals.
    +                FWRITE_QIO: u1,
    +                reserved24: u8,
    +                ///  read-data phase only access to high-part of the buffer spi_mem_w8~spi_mem_w15. 1: enable 0: disable.
    +                USR_MISO_HIGHPART: u1,
    +                ///  write-data phase only access to high-part of the buffer spi_mem_w8~spi_mem_w15. 1: enable 0: disable.
    +                USR_MOSI_HIGHPART: u1,
    +                ///  SPI clock is disable in dummy phase when the bit is enable.
    +                USR_DUMMY_IDLE: u1,
    +                ///  This bit enable the write-data phase of an operation.
    +                USR_MOSI: u1,
    +                ///  This bit enable the read-data phase of an operation.
    +                USR_MISO: u1,
    +                ///  This bit enable the dummy phase of an operation.
    +                USR_DUMMY: u1,
    +                ///  This bit enable the address phase of an operation.
    +                USR_ADDR: u1,
    +                ///  This bit enable the command phase of an operation.
    +                USR_COMMAND: u1,
    +            }),
    +            ///  SPI1 user1 register.
    +            USER1: mmio.Mmio(packed struct(u32) {
    +                ///  The length in spi_mem_clk cycles of dummy phase. The register value shall be (cycle_num-1).
    +                USR_DUMMY_CYCLELEN: u6,
    +                reserved26: u20,
    +                ///  The length in bits of address phase. The register value shall be (bit_num-1).
    +                USR_ADDR_BITLEN: u6,
    +            }),
    +            ///  SPI1 user2 register.
    +            USER2: mmio.Mmio(packed struct(u32) {
    +                ///  The value of command.
    +                USR_COMMAND_VALUE: u16,
    +                reserved28: u12,
    +                ///  The length in bits of command phase. The register value shall be (bit_num-1)
    +                USR_COMMAND_BITLEN: u4,
    +            }),
    +            ///  SPI1 send data bit length control register.
    +            MOSI_DLEN: mmio.Mmio(packed struct(u32) {
    +                ///  The length in bits of write-data. The register value shall be (bit_num-1).
    +                USR_MOSI_DBITLEN: u10,
    +                padding: u22,
    +            }),
    +            ///  SPI1 receive data bit length control register.
    +            MISO_DLEN: mmio.Mmio(packed struct(u32) {
    +                ///  The length in bits of read-data. The register value shall be (bit_num-1).
    +                USR_MISO_DBITLEN: u10,
    +                padding: u22,
    +            }),
    +            ///  SPI1 status register.
    +            RD_STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  The value is stored when set spi_mem_flash_rdsr bit and spi_mem_flash_res bit.
    +                STATUS: u16,
    +                ///  Mode bits in the flash fast read mode it is combined with spi_mem_fastrd_mode bit.
    +                WB_MODE: u8,
    +                padding: u8,
    +            }),
    +            reserved52: [4]u8,
    +            ///  SPI1 misc register
    +            MISC: mmio.Mmio(packed struct(u32) {
    +                ///  SPI_CS0 pin enable, 1: disable SPI_CS0, 0: SPI_CS0 pin is active to select SPI device, such as flash, external RAM and so on.
    +                CS0_DIS: u1,
    +                ///  SPI_CS1 pin enable, 1: disable SPI_CS1, 0: SPI_CS1 pin is active to select SPI device, such as flash, external RAM and so on.
    +                CS1_DIS: u1,
    +                reserved9: u7,
    +                ///  1: spi clk line is high when idle 0: spi clk line is low when idle
    +                CK_IDLE_EDGE: u1,
    +                ///  spi cs line keep low when the bit is set.
    +                CS_KEEP_ACTIVE: u1,
    +                padding: u21,
    +            }),
    +            ///  SPI1 TX CRC data register.
    +            TX_CRC: mmio.Mmio(packed struct(u32) {
    +                ///  For SPI1, the value of crc32.
    +                DATA: u32,
    +            }),
    +            ///  SPI1 bit mode control register.
    +            CACHE_FCTRL: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  For SPI1, cache read flash with 4 bytes address, 1: enable, 0:disable.
    +                CACHE_USR_ADDR_4BYTE: u1,
    +                reserved3: u1,
    +                ///  For SPI1, din phase apply 2 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_dio.
    +                FDIN_DUAL: u1,
    +                ///  For SPI1, dout phase apply 2 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_dio.
    +                FDOUT_DUAL: u1,
    +                ///  For SPI1, address phase apply 2 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_dio.
    +                FADDR_DUAL: u1,
    +                ///  For SPI1, din phase apply 4 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_qio.
    +                FDIN_QUAD: u1,
    +                ///  For SPI1, dout phase apply 4 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_qio.
    +                FDOUT_QUAD: u1,
    +                ///  For SPI1, address phase apply 4 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_qio.
    +                FADDR_QUAD: u1,
    +                padding: u23,
    +            }),
    +            reserved88: [24]u8,
    +            ///  SPI1 memory data buffer0
    +            W0: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF0: u32,
    +            }),
    +            ///  SPI1 memory data buffer1
    +            W1: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF1: u32,
    +            }),
    +            ///  SPI1 memory data buffer2
    +            W2: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF2: u32,
    +            }),
    +            ///  SPI1 memory data buffer3
    +            W3: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF3: u32,
    +            }),
    +            ///  SPI1 memory data buffer4
    +            W4: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF4: u32,
    +            }),
    +            ///  SPI1 memory data buffer5
    +            W5: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF5: u32,
    +            }),
    +            ///  SPI1 memory data buffer6
    +            W6: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF6: u32,
    +            }),
    +            ///  SPI1 memory data buffer7
    +            W7: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF7: u32,
    +            }),
    +            ///  SPI1 memory data buffer8
    +            W8: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF8: u32,
    +            }),
    +            ///  SPI1 memory data buffer9
    +            W9: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF9: u32,
    +            }),
    +            ///  SPI1 memory data buffer10
    +            W10: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF10: u32,
    +            }),
    +            ///  SPI1 memory data buffer11
    +            W11: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF11: u32,
    +            }),
    +            ///  SPI1 memory data buffer12
    +            W12: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF12: u32,
    +            }),
    +            ///  SPI1 memory data buffer13
    +            W13: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF13: u32,
    +            }),
    +            ///  SPI1 memory data buffer14
    +            W14: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF14: u32,
    +            }),
    +            ///  SPI1 memory data buffer15
    +            W15: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF15: u32,
    +            }),
    +            ///  SPI1 wait idle control register
    +            FLASH_WAITI_CTRL: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  The dummy phase enable when wait flash idle (RDSR)
    +                WAITI_DUMMY: u1,
    +                ///  The command to wait flash idle(RDSR).
    +                WAITI_CMD: u8,
    +                ///  The dummy cycle length when wait flash idle(RDSR).
    +                WAITI_DUMMY_CYCLELEN: u6,
    +                padding: u16,
    +            }),
    +            ///  SPI1 flash suspend control register
    +            FLASH_SUS_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  program erase resume bit, program erase suspend operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.
    +                FLASH_PER: u1,
    +                ///  program erase suspend bit, program erase suspend operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.
    +                FLASH_PES: u1,
    +                ///  1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4 or *128) SPI_CLK cycles after program erase resume command is sent. 0: SPI1 does not wait after program erase resume command is sent.
    +                FLASH_PER_WAIT_EN: u1,
    +                ///  1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4 or *128) SPI_CLK cycles after program erase suspend command is sent. 0: SPI1 does not wait after program erase suspend command is sent.
    +                FLASH_PES_WAIT_EN: u1,
    +                ///  Set this bit to enable PES end triggers PER transfer option. If this bit is 0, application should send PER after PES is done.
    +                PES_PER_EN: u1,
    +                ///  Set this bit to enable Auto-suspending function.
    +                FLASH_PES_EN: u1,
    +                ///  The mask value when check SUS/SUS1/SUS2 status bit. If the read status value is status_in[15:0](only status_in[7:0] is valid when only one byte of data is read out, status_in[15:0] is valid when two bytes of data are read out), SUS/SUS1/SUS2 = status_in[15:0]^ SPI_MEM_PESR_END_MSK[15:0].
    +                PESR_END_MSK: u16,
    +                ///  1: Read two bytes when check flash SUS/SUS1/SUS2 status bit. 0: Read one byte when check flash SUS/SUS1/SUS2 status bit
    +                RD_SUS_2B: u1,
    +                ///  1: Both WIP and SUS/SUS1/SUS2 bits should be checked to insure the resume status of flash. 0: Only need to check WIP is 0.
    +                PER_END_EN: u1,
    +                ///  1: Both WIP and SUS/SUS1/SUS2 bits should be checked to insure the suspend status of flash. 0: Only need to check WIP is 0.
    +                PES_END_EN: u1,
    +                ///  When SPI1 checks SUS/SUS1/SUS2 bits fail for SPI_MEM_SUS_TIMEOUT_CNT[6:0] times, it will be treated as check pass.
    +                SUS_TIMEOUT_CNT: u7,
    +            }),
    +            ///  SPI1 flash suspend command register
    +            FLASH_SUS_CMD: mmio.Mmio(packed struct(u32) {
    +                ///  Program/Erase resume command.
    +                FLASH_PER_COMMAND: u8,
    +                ///  Program/Erase suspend command.
    +                FLASH_PES_COMMAND: u8,
    +                ///  Flash SUS/SUS1/SUS2 status bit read command. The command should be sent when SUS/SUS1/SUS2 bit should be checked to insure the suspend or resume status of flash.
    +                WAIT_PESR_COMMAND: u16,
    +            }),
    +            ///  SPI1 flash suspend status register
    +            SUS_STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  The status of flash suspend, only used in SPI1.
    +                FLASH_SUS: u1,
    +                ///  1: SPI1 sends out SPI_MEM_WAIT_PESR_COMMAND[15:0] to check SUS/SUS1/SUS2 bit. 0: SPI1 sends out SPI_MEM_WAIT_PESR_COMMAND[7:0] to check SUS/SUS1/SUS2 bit.
    +                WAIT_PESR_CMD_2B: u1,
    +                ///  1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after HPM command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after HPM command is sent.
    +                FLASH_HPM_DLY_128: u1,
    +                ///  1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after RES command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after RES command is sent.
    +                FLASH_RES_DLY_128: u1,
    +                ///  1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after DP command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after DP command is sent.
    +                FLASH_DP_DLY_128: u1,
    +                ///  Valid when SPI_MEM_FLASH_PER_WAIT_EN is 1. 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after PER command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after PER command is sent.
    +                FLASH_PER_DLY_128: u1,
    +                ///  Valid when SPI_MEM_FLASH_PES_WAIT_EN is 1. 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after PES command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after PES command is sent.
    +                FLASH_PES_DLY_128: u1,
    +                ///  1: Enable SPI0 lock SPI0/1 arbiter option. 0: Disable it.
    +                SPI0_LOCK_EN: u1,
    +                padding: u24,
    +            }),
    +            ///  SPI1 timing control register
    +            TIMING_CALI: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  The bit is used to enable timing auto-calibration for all reading operations.
    +                TIMING_CALI: u1,
    +                ///  add extra dummy spi clock cycle length for spi clock calibration.
    +                EXTRA_DUMMY_CYCLELEN: u3,
    +                padding: u27,
    +            }),
    +            reserved192: [20]u8,
    +            ///  SPI1 interrupt enable register
    +            INT_ENA: mmio.Mmio(packed struct(u32) {
    +                ///  The enable bit for SPI_MEM_PER_END_INT interrupt.
    +                PER_END_INT_ENA: u1,
    +                ///  The enable bit for SPI_MEM_PES_END_INT interrupt.
    +                PES_END_INT_ENA: u1,
    +                ///  The enable bit for SPI_MEM_WPE_END_INT interrupt.
    +                WPE_END_INT_ENA: u1,
    +                ///  The enable bit for SPI_MEM_SLV_ST_END_INT interrupt.
    +                SLV_ST_END_INT_ENA: u1,
    +                ///  The enable bit for SPI_MEM_MST_ST_END_INT interrupt.
    +                MST_ST_END_INT_ENA: u1,
    +                padding: u27,
    +            }),
    +            ///  SPI1 interrupt clear register
    +            INT_CLR: mmio.Mmio(packed struct(u32) {
    +                ///  The clear bit for SPI_MEM_PER_END_INT interrupt.
    +                PER_END_INT_CLR: u1,
    +                ///  The clear bit for SPI_MEM_PES_END_INT interrupt.
    +                PES_END_INT_CLR: u1,
    +                ///  The clear bit for SPI_MEM_WPE_END_INT interrupt.
    +                WPE_END_INT_CLR: u1,
    +                ///  The clear bit for SPI_MEM_SLV_ST_END_INT interrupt.
    +                SLV_ST_END_INT_CLR: u1,
    +                ///  The clear bit for SPI_MEM_MST_ST_END_INT interrupt.
    +                MST_ST_END_INT_CLR: u1,
    +                padding: u27,
    +            }),
    +            ///  SPI1 interrupt raw register
    +            INT_RAW: mmio.Mmio(packed struct(u32) {
    +                ///  The raw bit for SPI_MEM_PER_END_INT interrupt. 1: Triggered when Auto Resume command (0x7A) is sent and flash is resumed. 0: Others.
    +                PER_END_INT_RAW: u1,
    +                ///  The raw bit for SPI_MEM_PES_END_INT interrupt.1: Triggered when Auto Suspend command (0x75) is sent and flash is suspended. 0: Others.
    +                PES_END_INT_RAW: u1,
    +                ///  The raw bit for SPI_MEM_WPE_END_INT interrupt. 1: Triggered when WRSR/PP/SE/BE/CE is sent and flash is already idle. 0: Others.
    +                WPE_END_INT_RAW: u1,
    +                ///  The raw bit for SPI_MEM_SLV_ST_END_INT interrupt. 1: Triggered when spi1_slv_st is changed from non idle state to idle state. It means that SPI_CS raises high. 0: Others
    +                SLV_ST_END_INT_RAW: u1,
    +                ///  The raw bit for SPI_MEM_MST_ST_END_INT interrupt. 1: Triggered when spi1_mst_st is changed from non idle state to idle state. 0: Others.
    +                MST_ST_END_INT_RAW: u1,
    +                padding: u27,
    +            }),
    +            ///  SPI1 interrupt status register
    +            INT_ST: mmio.Mmio(packed struct(u32) {
    +                ///  The status bit for SPI_MEM_PER_END_INT interrupt.
    +                PER_END_INT_ST: u1,
    +                ///  The status bit for SPI_MEM_PES_END_INT interrupt.
    +                PES_END_INT_ST: u1,
    +                ///  The status bit for SPI_MEM_WPE_END_INT interrupt.
    +                WPE_END_INT_ST: u1,
    +                ///  The status bit for SPI_MEM_SLV_ST_END_INT interrupt.
    +                SLV_ST_END_INT_ST: u1,
    +                ///  The status bit for SPI_MEM_MST_ST_END_INT interrupt.
    +                MST_ST_END_INT_ST: u1,
    +                padding: u27,
    +            }),
    +            reserved220: [12]u8,
    +            ///  SPI1 clk_gate register
    +            CLOCK_GATE: mmio.Mmio(packed struct(u32) {
    +                ///  Register clock gate enable signal. 1: Enable. 0: Disable.
    +                CLK_EN: u1,
    +                padding: u31,
    +            }),
    +            reserved1020: [796]u8,
    +            ///  Version control register
    +            DATE: mmio.Mmio(packed struct(u32) {
    +                ///  Version control register
    +                DATE: u28,
    +                padding: u4,
    +            }),
    +        };
    +
    +        ///  SPI (Serial Peripheral Interface) Controller
    +        pub const SPI2 = extern struct {
    +            ///  Command control register
    +            CMD: mmio.Mmio(packed struct(u32) {
    +                ///  Define the APB cycles of SPI_CONF state. Can be configured in CONF state.
    +                CONF_BITLEN: u18,
    +                reserved23: u5,
    +                ///  Set this bit to synchronize SPI registers from APB clock domain into SPI module clock domain, which is only used in SPI master mode.
    +                UPDATE: u1,
    +                ///  User define command enable. An operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable. Can not be changed by CONF_buf.
    +                USR: u1,
    +                padding: u7,
    +            }),
    +            ///  Address value register
    +            ADDR: mmio.Mmio(packed struct(u32) {
    +                ///  Address to slave. Can be configured in CONF state.
    +                USR_ADDR_VALUE: u32,
    +            }),
    +            ///  SPI control register
    +            CTRL: mmio.Mmio(packed struct(u32) {
    +                reserved3: u3,
    +                ///  In the dummy phase the signal level of spi is output by the spi controller. Can be configured in CONF state.
    +                DUMMY_OUT: u1,
    +                reserved5: u1,
    +                ///  Apply 2 signals during addr phase 1:enable 0: disable. Can be configured in CONF state.
    +                FADDR_DUAL: u1,
    +                ///  Apply 4 signals during addr phase 1:enable 0: disable. Can be configured in CONF state.
    +                FADDR_QUAD: u1,
    +                reserved8: u1,
    +                ///  Apply 2 signals during command phase 1:enable 0: disable. Can be configured in CONF state.
    +                FCMD_DUAL: u1,
    +                ///  Apply 4 signals during command phase 1:enable 0: disable. Can be configured in CONF state.
    +                FCMD_QUAD: u1,
    +                reserved14: u4,
    +                ///  In the read operations, read-data phase apply 2 signals. 1: enable 0: disable. Can be configured in CONF state.
    +                FREAD_DUAL: u1,
    +                ///  In the read operations read-data phase apply 4 signals. 1: enable 0: disable. Can be configured in CONF state.
    +                FREAD_QUAD: u1,
    +                reserved18: u2,
    +                ///  The bit is used to set MISO line polarity, 1: high 0, low. Can be configured in CONF state.
    +                Q_POL: u1,
    +                ///  The bit is used to set MOSI line polarity, 1: high 0, low. Can be configured in CONF state.
    +                D_POL: u1,
    +                ///  SPI_HOLD output value when SPI is idle. 1: output high, 0: output low. Can be configured in CONF state.
    +                HOLD_POL: u1,
    +                ///  Write protect signal output when SPI is idle. 1: output high, 0: output low. Can be configured in CONF state.
    +                WP_POL: u1,
    +                reserved25: u3,
    +                ///  In read-data (MISO) phase 1: LSB first 0: MSB first. Can be configured in CONF state.
    +                RD_BIT_ORDER: u1,
    +                ///  In command address write-data (MOSI) phases 1: LSB firs 0: MSB first. Can be configured in CONF state.
    +                WR_BIT_ORDER: u1,
    +                padding: u5,
    +            }),
    +            ///  SPI clock control register
    +            CLOCK: mmio.Mmio(packed struct(u32) {
    +                ///  In the master mode it must be equal to spi_clkcnt_N. In the slave mode it must be 0. Can be configured in CONF state.
    +                CLKCNT_L: u6,
    +                ///  In the master mode it must be floor((spi_clkcnt_N+1)/2-1). In the slave mode it must be 0. Can be configured in CONF state.
    +                CLKCNT_H: u6,
    +                ///  In the master mode it is the divider of spi_clk. So spi_clk frequency is system/(spi_clkdiv_pre+1)/(spi_clkcnt_N+1). Can be configured in CONF state.
    +                CLKCNT_N: u6,
    +                ///  In the master mode it is pre-divider of spi_clk. Can be configured in CONF state.
    +                CLKDIV_PRE: u4,
    +                reserved31: u9,
    +                ///  In the master mode 1: spi_clk is eqaul to system 0: spi_clk is divided from system clock. Can be configured in CONF state.
    +                CLK_EQU_SYSCLK: u1,
    +            }),
    +            ///  SPI USER control register
    +            USER: mmio.Mmio(packed struct(u32) {
    +                ///  Set the bit to enable full duplex communication. 1: enable 0: disable. Can be configured in CONF state.
    +                DOUTDIN: u1,
    +                reserved3: u2,
    +                ///  Both for master mode and slave mode. 1: spi controller is in QPI mode. 0: others. Can be configured in CONF state.
    +                QPI_MODE: u1,
    +                reserved5: u1,
    +                ///  In the slave mode, this bit can be used to change the polarity of tsck. 0: tsck = spi_ck_i. 1:tsck = !spi_ck_i.
    +                TSCK_I_EDGE: u1,
    +                ///  spi cs keep low when spi is in done phase. 1: enable 0: disable. Can be configured in CONF state.
    +                CS_HOLD: u1,
    +                ///  spi cs is enable when spi is in prepare phase. 1: enable 0: disable. Can be configured in CONF state.
    +                CS_SETUP: u1,
    +                ///  In the slave mode, this bit can be used to change the polarity of rsck. 0: rsck = !spi_ck_i. 1:rsck = spi_ck_i.
    +                RSCK_I_EDGE: u1,
    +                ///  the bit combined with spi_mosi_delay_mode bits to set mosi signal delay mode. Can be configured in CONF state.
    +                CK_OUT_EDGE: u1,
    +                reserved12: u2,
    +                ///  In the write operations read-data phase apply 2 signals. Can be configured in CONF state.
    +                FWRITE_DUAL: u1,
    +                ///  In the write operations read-data phase apply 4 signals. Can be configured in CONF state.
    +                FWRITE_QUAD: u1,
    +                reserved15: u1,
    +                ///  1: Enable the DMA CONF phase of next seg-trans operation, which means seg-trans will continue. 0: The seg-trans will end after the current SPI seg-trans or this is not seg-trans mode. Can be configured in CONF state.
    +                USR_CONF_NXT: u1,
    +                reserved17: u1,
    +                ///  Set the bit to enable 3-line half duplex communication mosi and miso signals share the same pin. 1: enable 0: disable. Can be configured in CONF state.
    +                SIO: u1,
    +                reserved24: u6,
    +                ///  read-data phase only access to high-part of the buffer spi_w8~spi_w15. 1: enable 0: disable. Can be configured in CONF state.
    +                USR_MISO_HIGHPART: u1,
    +                ///  write-data phase only access to high-part of the buffer spi_w8~spi_w15. 1: enable 0: disable. Can be configured in CONF state.
    +                USR_MOSI_HIGHPART: u1,
    +                ///  spi clock is disable in dummy phase when the bit is enable. Can be configured in CONF state.
    +                USR_DUMMY_IDLE: u1,
    +                ///  This bit enable the write-data phase of an operation. Can be configured in CONF state.
    +                USR_MOSI: u1,
    +                ///  This bit enable the read-data phase of an operation. Can be configured in CONF state.
    +                USR_MISO: u1,
    +                ///  This bit enable the dummy phase of an operation. Can be configured in CONF state.
    +                USR_DUMMY: u1,
    +                ///  This bit enable the address phase of an operation. Can be configured in CONF state.
    +                USR_ADDR: u1,
    +                ///  This bit enable the command phase of an operation. Can be configured in CONF state.
    +                USR_COMMAND: u1,
    +            }),
    +            ///  SPI USER control register 1
    +            USER1: mmio.Mmio(packed struct(u32) {
    +                ///  The length in spi_clk cycles of dummy phase. The register value shall be (cycle_num-1). Can be configured in CONF state.
    +                USR_DUMMY_CYCLELEN: u8,
    +                reserved16: u8,
    +                ///  1: SPI transfer is ended when SPI RX AFIFO wfull error is valid in GP-SPI master FD/HD-mode. 0: SPI transfer is not ended when SPI RX AFIFO wfull error is valid in GP-SPI master FD/HD-mode.
    +                MST_WFULL_ERR_END_EN: u1,
    +                ///  (cycles+1) of prepare phase by spi clock this bits are combined with spi_cs_setup bit. Can be configured in CONF state.
    +                CS_SETUP_TIME: u5,
    +                ///  delay cycles of cs pin by spi clock this bits are combined with spi_cs_hold bit. Can be configured in CONF state.
    +                CS_HOLD_TIME: u5,
    +                ///  The length in bits of address phase. The register value shall be (bit_num-1). Can be configured in CONF state.
    +                USR_ADDR_BITLEN: u5,
    +            }),
    +            ///  SPI USER control register 2
    +            USER2: mmio.Mmio(packed struct(u32) {
    +                ///  The value of command. Can be configured in CONF state.
    +                USR_COMMAND_VALUE: u16,
    +                reserved27: u11,
    +                ///  1: SPI transfer is ended when SPI TX AFIFO read empty error is valid in GP-SPI master FD/HD-mode. 0: SPI transfer is not ended when SPI TX AFIFO read empty error is valid in GP-SPI master FD/HD-mode.
    +                MST_REMPTY_ERR_END_EN: u1,
    +                ///  The length in bits of command phase. The register value shall be (bit_num-1). Can be configured in CONF state.
    +                USR_COMMAND_BITLEN: u4,
    +            }),
    +            ///  SPI data bit length control register
    +            MS_DLEN: mmio.Mmio(packed struct(u32) {
    +                ///  The value of these bits is the configured SPI transmission data bit length in master mode DMA controlled transfer or CPU controlled transfer. The value is also the configured bit length in slave mode DMA RX controlled transfer. The register value shall be (bit_num-1). Can be configured in CONF state.
    +                MS_DATA_BITLEN: u18,
    +                padding: u14,
    +            }),
    +            ///  SPI misc register
    +            MISC: mmio.Mmio(packed struct(u32) {
    +                ///  SPI CS0 pin enable, 1: disable CS0, 0: spi_cs0 signal is from/to CS0 pin. Can be configured in CONF state.
    +                CS0_DIS: u1,
    +                ///  SPI CS1 pin enable, 1: disable CS1, 0: spi_cs1 signal is from/to CS1 pin. Can be configured in CONF state.
    +                CS1_DIS: u1,
    +                ///  SPI CS2 pin enable, 1: disable CS2, 0: spi_cs2 signal is from/to CS2 pin. Can be configured in CONF state.
    +                CS2_DIS: u1,
    +                ///  SPI CS3 pin enable, 1: disable CS3, 0: spi_cs3 signal is from/to CS3 pin. Can be configured in CONF state.
    +                CS3_DIS: u1,
    +                ///  SPI CS4 pin enable, 1: disable CS4, 0: spi_cs4 signal is from/to CS4 pin. Can be configured in CONF state.
    +                CS4_DIS: u1,
    +                ///  SPI CS5 pin enable, 1: disable CS5, 0: spi_cs5 signal is from/to CS5 pin. Can be configured in CONF state.
    +                CS5_DIS: u1,
    +                ///  1: spi clk out disable, 0: spi clk out enable. Can be configured in CONF state.
    +                CK_DIS: u1,
    +                ///  In the master mode the bits are the polarity of spi cs line, the value is equivalent to spi_cs ^ spi_master_cs_pol. Can be configured in CONF state.
    +                MASTER_CS_POL: u6,
    +                reserved23: u10,
    +                ///  spi slave input cs polarity select. 1: inv 0: not change. Can be configured in CONF state.
    +                SLAVE_CS_POL: u1,
    +                reserved29: u5,
    +                ///  1: spi clk line is high when idle 0: spi clk line is low when idle. Can be configured in CONF state.
    +                CK_IDLE_EDGE: u1,
    +                ///  spi cs line keep low when the bit is set. Can be configured in CONF state.
    +                CS_KEEP_ACTIVE: u1,
    +                ///  1: spi quad input swap enable 0: spi quad input swap disable. Can be configured in CONF state.
    +                QUAD_DIN_PIN_SWAP: u1,
    +            }),
    +            ///  SPI input delay mode configuration
    +            DIN_MODE: mmio.Mmio(packed struct(u32) {
    +                ///  the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state.
    +                DIN0_MODE: u2,
    +                ///  the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state.
    +                DIN1_MODE: u2,
    +                ///  the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state.
    +                DIN2_MODE: u2,
    +                ///  the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state.
    +                DIN3_MODE: u2,
    +                reserved16: u8,
    +                ///  1:enable hclk in SPI input timing module. 0: disable it. Can be configured in CONF state.
    +                TIMING_HCLK_ACTIVE: u1,
    +                padding: u15,
    +            }),
    +            ///  SPI input delay number configuration
    +            DIN_NUM: mmio.Mmio(packed struct(u32) {
    +                ///  the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,... Can be configured in CONF state.
    +                DIN0_NUM: u2,
    +                ///  the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,... Can be configured in CONF state.
    +                DIN1_NUM: u2,
    +                ///  the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,... Can be configured in CONF state.
    +                DIN2_NUM: u2,
    +                ///  the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,... Can be configured in CONF state.
    +                DIN3_NUM: u2,
    +                padding: u24,
    +            }),
    +            ///  SPI output delay mode configuration
    +            DOUT_MODE: mmio.Mmio(packed struct(u32) {
    +                ///  The output signal 0 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state.
    +                DOUT0_MODE: u1,
    +                ///  The output signal 1 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state.
    +                DOUT1_MODE: u1,
    +                ///  The output signal 2 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state.
    +                DOUT2_MODE: u1,
    +                ///  The output signal 3 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state.
    +                DOUT3_MODE: u1,
    +                padding: u28,
    +            }),
    +            ///  SPI DMA control register
    +            DMA_CONF: mmio.Mmio(packed struct(u32) {
    +                reserved18: u18,
    +                ///  Enable dma segment transfer in spi dma half slave mode. 1: enable. 0: disable.
    +                DMA_SLV_SEG_TRANS_EN: u1,
    +                ///  1: spi_dma_infifo_full_vld is cleared by spi slave cmd 5. 0: spi_dma_infifo_full_vld is cleared by spi_trans_done.
    +                SLV_RX_SEG_TRANS_CLR_EN: u1,
    +                ///  1: spi_dma_outfifo_empty_vld is cleared by spi slave cmd 6. 0: spi_dma_outfifo_empty_vld is cleared by spi_trans_done.
    +                SLV_TX_SEG_TRANS_CLR_EN: u1,
    +                ///  1: spi_dma_inlink_eof is set when the number of dma pushed data bytes is equal to the value of spi_slv/mst_dma_rd_bytelen[19:0] in spi dma transition. 0: spi_dma_inlink_eof is set by spi_trans_done in non-seg-trans or spi_dma_seg_trans_done in seg-trans.
    +                RX_EOF_EN: u1,
    +                reserved27: u5,
    +                ///  Set this bit to enable SPI DMA controlled receive data mode.
    +                DMA_RX_ENA: u1,
    +                ///  Set this bit to enable SPI DMA controlled send data mode.
    +                DMA_TX_ENA: u1,
    +                ///  Set this bit to reset RX AFIFO, which is used to receive data in SPI master and slave mode transfer.
    +                RX_AFIFO_RST: u1,
    +                ///  Set this bit to reset BUF TX AFIFO, which is used send data out in SPI slave CPU controlled mode transfer and master mode transfer.
    +                BUF_AFIFO_RST: u1,
    +                ///  Set this bit to reset DMA TX AFIFO, which is used to send data out in SPI slave DMA controlled mode transfer.
    +                DMA_AFIFO_RST: u1,
    +            }),
    +            ///  SPI DMA interrupt enable register
    +            DMA_INT_ENA: mmio.Mmio(packed struct(u32) {
    +                ///  The enable bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt.
    +                DMA_INFIFO_FULL_ERR_INT_ENA: u1,
    +                ///  The enable bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt.
    +                DMA_OUTFIFO_EMPTY_ERR_INT_ENA: u1,
    +                ///  The enable bit for SPI slave Ex_QPI interrupt.
    +                SLV_EX_QPI_INT_ENA: u1,
    +                ///  The enable bit for SPI slave En_QPI interrupt.
    +                SLV_EN_QPI_INT_ENA: u1,
    +                ///  The enable bit for SPI slave CMD7 interrupt.
    +                SLV_CMD7_INT_ENA: u1,
    +                ///  The enable bit for SPI slave CMD8 interrupt.
    +                SLV_CMD8_INT_ENA: u1,
    +                ///  The enable bit for SPI slave CMD9 interrupt.
    +                SLV_CMD9_INT_ENA: u1,
    +                ///  The enable bit for SPI slave CMDA interrupt.
    +                SLV_CMDA_INT_ENA: u1,
    +                ///  The enable bit for SPI_SLV_RD_DMA_DONE_INT interrupt.
    +                SLV_RD_DMA_DONE_INT_ENA: u1,
    +                ///  The enable bit for SPI_SLV_WR_DMA_DONE_INT interrupt.
    +                SLV_WR_DMA_DONE_INT_ENA: u1,
    +                ///  The enable bit for SPI_SLV_RD_BUF_DONE_INT interrupt.
    +                SLV_RD_BUF_DONE_INT_ENA: u1,
    +                ///  The enable bit for SPI_SLV_WR_BUF_DONE_INT interrupt.
    +                SLV_WR_BUF_DONE_INT_ENA: u1,
    +                ///  The enable bit for SPI_TRANS_DONE_INT interrupt.
    +                TRANS_DONE_INT_ENA: u1,
    +                ///  The enable bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt.
    +                DMA_SEG_TRANS_DONE_INT_ENA: u1,
    +                ///  The enable bit for SPI_SEG_MAGIC_ERR_INT interrupt.
    +                SEG_MAGIC_ERR_INT_ENA: u1,
    +                ///  The enable bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt.
    +                SLV_BUF_ADDR_ERR_INT_ENA: u1,
    +                ///  The enable bit for SPI_SLV_CMD_ERR_INT interrupt.
    +                SLV_CMD_ERR_INT_ENA: u1,
    +                ///  The enable bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt.
    +                MST_RX_AFIFO_WFULL_ERR_INT_ENA: u1,
    +                ///  The enable bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt.
    +                MST_TX_AFIFO_REMPTY_ERR_INT_ENA: u1,
    +                ///  The enable bit for SPI_APP2_INT interrupt.
    +                APP2_INT_ENA: u1,
    +                ///  The enable bit for SPI_APP1_INT interrupt.
    +                APP1_INT_ENA: u1,
    +                padding: u11,
    +            }),
    +            ///  SPI DMA interrupt clear register
    +            DMA_INT_CLR: mmio.Mmio(packed struct(u32) {
    +                ///  The clear bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt.
    +                DMA_INFIFO_FULL_ERR_INT_CLR: u1,
    +                ///  The clear bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt.
    +                DMA_OUTFIFO_EMPTY_ERR_INT_CLR: u1,
    +                ///  The clear bit for SPI slave Ex_QPI interrupt.
    +                SLV_EX_QPI_INT_CLR: u1,
    +                ///  The clear bit for SPI slave En_QPI interrupt.
    +                SLV_EN_QPI_INT_CLR: u1,
    +                ///  The clear bit for SPI slave CMD7 interrupt.
    +                SLV_CMD7_INT_CLR: u1,
    +                ///  The clear bit for SPI slave CMD8 interrupt.
    +                SLV_CMD8_INT_CLR: u1,
    +                ///  The clear bit for SPI slave CMD9 interrupt.
    +                SLV_CMD9_INT_CLR: u1,
    +                ///  The clear bit for SPI slave CMDA interrupt.
    +                SLV_CMDA_INT_CLR: u1,
    +                ///  The clear bit for SPI_SLV_RD_DMA_DONE_INT interrupt.
    +                SLV_RD_DMA_DONE_INT_CLR: u1,
    +                ///  The clear bit for SPI_SLV_WR_DMA_DONE_INT interrupt.
    +                SLV_WR_DMA_DONE_INT_CLR: u1,
    +                ///  The clear bit for SPI_SLV_RD_BUF_DONE_INT interrupt.
    +                SLV_RD_BUF_DONE_INT_CLR: u1,
    +                ///  The clear bit for SPI_SLV_WR_BUF_DONE_INT interrupt.
    +                SLV_WR_BUF_DONE_INT_CLR: u1,
    +                ///  The clear bit for SPI_TRANS_DONE_INT interrupt.
    +                TRANS_DONE_INT_CLR: u1,
    +                ///  The clear bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt.
    +                DMA_SEG_TRANS_DONE_INT_CLR: u1,
    +                ///  The clear bit for SPI_SEG_MAGIC_ERR_INT interrupt.
    +                SEG_MAGIC_ERR_INT_CLR: u1,
    +                ///  The clear bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt.
    +                SLV_BUF_ADDR_ERR_INT_CLR: u1,
    +                ///  The clear bit for SPI_SLV_CMD_ERR_INT interrupt.
    +                SLV_CMD_ERR_INT_CLR: u1,
    +                ///  The clear bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt.
    +                MST_RX_AFIFO_WFULL_ERR_INT_CLR: u1,
    +                ///  The clear bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt.
    +                MST_TX_AFIFO_REMPTY_ERR_INT_CLR: u1,
    +                ///  The clear bit for SPI_APP2_INT interrupt.
    +                APP2_INT_CLR: u1,
    +                ///  The clear bit for SPI_APP1_INT interrupt.
    +                APP1_INT_CLR: u1,
    +                padding: u11,
    +            }),
    +            ///  SPI DMA interrupt raw register
    +            DMA_INT_RAW: mmio.Mmio(packed struct(u32) {
    +                ///  1: The current data rate of DMA Rx is smaller than that of SPI, which will lose the receive data. 0: Others.
    +                DMA_INFIFO_FULL_ERR_INT_RAW: u1,
    +                ///  1: The current data rate of DMA TX is smaller than that of SPI. SPI will stop in master mode and send out all 0 in slave mode. 0: Others.
    +                DMA_OUTFIFO_EMPTY_ERR_INT_RAW: u1,
    +                ///  The raw bit for SPI slave Ex_QPI interrupt. 1: SPI slave mode Ex_QPI transmission is ended. 0: Others.
    +                SLV_EX_QPI_INT_RAW: u1,
    +                ///  The raw bit for SPI slave En_QPI interrupt. 1: SPI slave mode En_QPI transmission is ended. 0: Others.
    +                SLV_EN_QPI_INT_RAW: u1,
    +                ///  The raw bit for SPI slave CMD7 interrupt. 1: SPI slave mode CMD7 transmission is ended. 0: Others.
    +                SLV_CMD7_INT_RAW: u1,
    +                ///  The raw bit for SPI slave CMD8 interrupt. 1: SPI slave mode CMD8 transmission is ended. 0: Others.
    +                SLV_CMD8_INT_RAW: u1,
    +                ///  The raw bit for SPI slave CMD9 interrupt. 1: SPI slave mode CMD9 transmission is ended. 0: Others.
    +                SLV_CMD9_INT_RAW: u1,
    +                ///  The raw bit for SPI slave CMDA interrupt. 1: SPI slave mode CMDA transmission is ended. 0: Others.
    +                SLV_CMDA_INT_RAW: u1,
    +                ///  The raw bit for SPI_SLV_RD_DMA_DONE_INT interrupt. 1: SPI slave mode Rd_DMA transmission is ended. 0: Others.
    +                SLV_RD_DMA_DONE_INT_RAW: u1,
    +                ///  The raw bit for SPI_SLV_WR_DMA_DONE_INT interrupt. 1: SPI slave mode Wr_DMA transmission is ended. 0: Others.
    +                SLV_WR_DMA_DONE_INT_RAW: u1,
    +                ///  The raw bit for SPI_SLV_RD_BUF_DONE_INT interrupt. 1: SPI slave mode Rd_BUF transmission is ended. 0: Others.
    +                SLV_RD_BUF_DONE_INT_RAW: u1,
    +                ///  The raw bit for SPI_SLV_WR_BUF_DONE_INT interrupt. 1: SPI slave mode Wr_BUF transmission is ended. 0: Others.
    +                SLV_WR_BUF_DONE_INT_RAW: u1,
    +                ///  The raw bit for SPI_TRANS_DONE_INT interrupt. 1: SPI master mode transmission is ended. 0: others.
    +                TRANS_DONE_INT_RAW: u1,
    +                ///  The raw bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt. 1: spi master DMA full-duplex/half-duplex seg-conf-trans ends or slave half-duplex seg-trans ends. And data has been pushed to corresponding memory. 0: seg-conf-trans or seg-trans is not ended or not occurred.
    +                DMA_SEG_TRANS_DONE_INT_RAW: u1,
    +                ///  The raw bit for SPI_SEG_MAGIC_ERR_INT interrupt. 1: The magic value in CONF buffer is error in the DMA seg-conf-trans. 0: others.
    +                SEG_MAGIC_ERR_INT_RAW: u1,
    +                ///  The raw bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt. 1: The accessing data address of the current SPI slave mode CPU controlled FD, Wr_BUF or Rd_BUF transmission is bigger than 63. 0: Others.
    +                SLV_BUF_ADDR_ERR_INT_RAW: u1,
    +                ///  The raw bit for SPI_SLV_CMD_ERR_INT interrupt. 1: The slave command value in the current SPI slave HD mode transmission is not supported. 0: Others.
    +                SLV_CMD_ERR_INT_RAW: u1,
    +                ///  The raw bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt. 1: There is a RX AFIFO write-full error when SPI inputs data in master mode. 0: Others.
    +                MST_RX_AFIFO_WFULL_ERR_INT_RAW: u1,
    +                ///  The raw bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt. 1: There is a TX BUF AFIFO read-empty error when SPI outputs data in master mode. 0: Others.
    +                MST_TX_AFIFO_REMPTY_ERR_INT_RAW: u1,
    +                ///  The raw bit for SPI_APP2_INT interrupt. The value is only controlled by application.
    +                APP2_INT_RAW: u1,
    +                ///  The raw bit for SPI_APP1_INT interrupt. The value is only controlled by application.
    +                APP1_INT_RAW: u1,
    +                padding: u11,
    +            }),
    +            ///  SPI DMA interrupt status register
    +            DMA_INT_ST: mmio.Mmio(packed struct(u32) {
    +                ///  The status bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt.
    +                DMA_INFIFO_FULL_ERR_INT_ST: u1,
    +                ///  The status bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt.
    +                DMA_OUTFIFO_EMPTY_ERR_INT_ST: u1,
    +                ///  The status bit for SPI slave Ex_QPI interrupt.
    +                SLV_EX_QPI_INT_ST: u1,
    +                ///  The status bit for SPI slave En_QPI interrupt.
    +                SLV_EN_QPI_INT_ST: u1,
    +                ///  The status bit for SPI slave CMD7 interrupt.
    +                SLV_CMD7_INT_ST: u1,
    +                ///  The status bit for SPI slave CMD8 interrupt.
    +                SLV_CMD8_INT_ST: u1,
    +                ///  The status bit for SPI slave CMD9 interrupt.
    +                SLV_CMD9_INT_ST: u1,
    +                ///  The status bit for SPI slave CMDA interrupt.
    +                SLV_CMDA_INT_ST: u1,
    +                ///  The status bit for SPI_SLV_RD_DMA_DONE_INT interrupt.
    +                SLV_RD_DMA_DONE_INT_ST: u1,
    +                ///  The status bit for SPI_SLV_WR_DMA_DONE_INT interrupt.
    +                SLV_WR_DMA_DONE_INT_ST: u1,
    +                ///  The status bit for SPI_SLV_RD_BUF_DONE_INT interrupt.
    +                SLV_RD_BUF_DONE_INT_ST: u1,
    +                ///  The status bit for SPI_SLV_WR_BUF_DONE_INT interrupt.
    +                SLV_WR_BUF_DONE_INT_ST: u1,
    +                ///  The status bit for SPI_TRANS_DONE_INT interrupt.
    +                TRANS_DONE_INT_ST: u1,
    +                ///  The status bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt.
    +                DMA_SEG_TRANS_DONE_INT_ST: u1,
    +                ///  The status bit for SPI_SEG_MAGIC_ERR_INT interrupt.
    +                SEG_MAGIC_ERR_INT_ST: u1,
    +                ///  The status bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt.
    +                SLV_BUF_ADDR_ERR_INT_ST: u1,
    +                ///  The status bit for SPI_SLV_CMD_ERR_INT interrupt.
    +                SLV_CMD_ERR_INT_ST: u1,
    +                ///  The status bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt.
    +                MST_RX_AFIFO_WFULL_ERR_INT_ST: u1,
    +                ///  The status bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt.
    +                MST_TX_AFIFO_REMPTY_ERR_INT_ST: u1,
    +                ///  The status bit for SPI_APP2_INT interrupt.
    +                APP2_INT_ST: u1,
    +                ///  The status bit for SPI_APP1_INT interrupt.
    +                APP1_INT_ST: u1,
    +                padding: u11,
    +            }),
    +            reserved152: [84]u8,
    +            ///  SPI CPU-controlled buffer0
    +            W0: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF0: u32,
    +            }),
    +            ///  SPI CPU-controlled buffer1
    +            W1: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF1: u32,
    +            }),
    +            ///  SPI CPU-controlled buffer2
    +            W2: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF2: u32,
    +            }),
    +            ///  SPI CPU-controlled buffer3
    +            W3: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF3: u32,
    +            }),
    +            ///  SPI CPU-controlled buffer4
    +            W4: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF4: u32,
    +            }),
    +            ///  SPI CPU-controlled buffer5
    +            W5: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF5: u32,
    +            }),
    +            ///  SPI CPU-controlled buffer6
    +            W6: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF6: u32,
    +            }),
    +            ///  SPI CPU-controlled buffer7
    +            W7: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF7: u32,
    +            }),
    +            ///  SPI CPU-controlled buffer8
    +            W8: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF8: u32,
    +            }),
    +            ///  SPI CPU-controlled buffer9
    +            W9: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF9: u32,
    +            }),
    +            ///  SPI CPU-controlled buffer10
    +            W10: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF10: u32,
    +            }),
    +            ///  SPI CPU-controlled buffer11
    +            W11: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF11: u32,
    +            }),
    +            ///  SPI CPU-controlled buffer12
    +            W12: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF12: u32,
    +            }),
    +            ///  SPI CPU-controlled buffer13
    +            W13: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF13: u32,
    +            }),
    +            ///  SPI CPU-controlled buffer14
    +            W14: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF14: u32,
    +            }),
    +            ///  SPI CPU-controlled buffer15
    +            W15: mmio.Mmio(packed struct(u32) {
    +                ///  data buffer
    +                BUF15: u32,
    +            }),
    +            reserved224: [8]u8,
    +            ///  SPI slave control register
    +            SLAVE: mmio.Mmio(packed struct(u32) {
    +                ///  SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is alwasy on. Can be configured in CONF state.
    +                CLK_MODE: u2,
    +                ///  {CPOL, CPHA},1: support spi clk mode 1 and 3, first edge output data B[0]/B[7]. 0: support spi clk mode 0 and 2, first edge output data B[1]/B[6].
    +                CLK_MODE_13: u1,
    +                ///  It saves half a cycle when tsck is the same as rsck. 1: output data at rsck posedge 0: output data at tsck posedge
    +                RSCK_DATA_OUT: u1,
    +                reserved8: u4,
    +                ///  1: SPI_SLV_DATA_BITLEN stores data bit length of master-read-slave data length in DMA controlled mode(Rd_DMA). 0: others
    +                SLV_RDDMA_BITLEN_EN: u1,
    +                ///  1: SPI_SLV_DATA_BITLEN stores data bit length of master-write-to-slave data length in DMA controlled mode(Wr_DMA). 0: others
    +                SLV_WRDMA_BITLEN_EN: u1,
    +                ///  1: SPI_SLV_DATA_BITLEN stores data bit length of master-read-slave data length in CPU controlled mode(Rd_BUF). 0: others
    +                SLV_RDBUF_BITLEN_EN: u1,
    +                ///  1: SPI_SLV_DATA_BITLEN stores data bit length of master-write-to-slave data length in CPU controlled mode(Wr_BUF). 0: others
    +                SLV_WRBUF_BITLEN_EN: u1,
    +                reserved22: u10,
    +                ///  The magic value of BM table in master DMA seg-trans.
    +                DMA_SEG_MAGIC_VALUE: u4,
    +                ///  Set SPI work mode. 1: slave mode 0: master mode.
    +                MODE: u1,
    +                ///  Software reset enable, reset the spi clock line cs line and data lines. Can be configured in CONF state.
    +                SOFT_RESET: u1,
    +                ///  1: Enable the DMA CONF phase of current seg-trans operation, which means seg-trans will start. 0: This is not seg-trans mode.
    +                USR_CONF: u1,
    +                padding: u3,
    +            }),
    +            ///  SPI slave control register 1
    +            SLAVE1: mmio.Mmio(packed struct(u32) {
    +                ///  The transferred data bit length in SPI slave FD and HD mode.
    +                SLV_DATA_BITLEN: u18,
    +                ///  In the slave mode it is the value of command.
    +                SLV_LAST_COMMAND: u8,
    +                ///  In the slave mode it is the value of address.
    +                SLV_LAST_ADDR: u6,
    +            }),
    +            ///  SPI module clock and register clock control
    +            CLK_GATE: mmio.Mmio(packed struct(u32) {
    +                ///  Set this bit to enable clk gate
    +                CLK_EN: u1,
    +                ///  Set this bit to power on the SPI module clock.
    +                MST_CLK_ACTIVE: u1,
    +                ///  This bit is used to select SPI module clock source in master mode. 1: PLL_CLK_80M. 0: XTAL CLK.
    +                MST_CLK_SEL: u1,
    +                padding: u29,
    +            }),
    +            reserved240: [4]u8,
    +            ///  Version control
    +            DATE: mmio.Mmio(packed struct(u32) {
    +                ///  SPI register version.
    +                DATE: u28,
    +                padding: u4,
    +            }),
    +        };
    +
    +        ///  System
    +        pub const SYSTEM = extern struct {
    +            ///  cpu_peripheral clock gating register
    +            CPU_PERI_CLK_EN: mmio.Mmio(packed struct(u32) {
    +                reserved6: u6,
    +                ///  reg_clk_en_assist_debug
    +                CLK_EN_ASSIST_DEBUG: u1,
    +                ///  reg_clk_en_dedicated_gpio
    +                CLK_EN_DEDICATED_GPIO: u1,
    +                padding: u24,
    +            }),
    +            ///  cpu_peripheral reset register
    +            CPU_PERI_RST_EN: mmio.Mmio(packed struct(u32) {
    +                reserved6: u6,
    +                ///  reg_rst_en_assist_debug
    +                RST_EN_ASSIST_DEBUG: u1,
    +                ///  reg_rst_en_dedicated_gpio
    +                RST_EN_DEDICATED_GPIO: u1,
    +                padding: u24,
    +            }),
    +            ///  cpu clock config register
    +            CPU_PER_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  reg_cpuperiod_sel
    +                CPUPERIOD_SEL: u2,
    +                ///  reg_pll_freq_sel
    +                PLL_FREQ_SEL: u1,
    +                ///  reg_cpu_wait_mode_force_on
    +                CPU_WAIT_MODE_FORCE_ON: u1,
    +                ///  reg_cpu_waiti_delay_num
    +                CPU_WAITI_DELAY_NUM: u4,
    +                padding: u24,
    +            }),
    +            ///  memory power down mask register
    +            MEM_PD_MASK: mmio.Mmio(packed struct(u32) {
    +                ///  reg_lslp_mem_pd_mask
    +                LSLP_MEM_PD_MASK: u1,
    +                padding: u31,
    +            }),
    +            ///  peripheral clock gating register
    +            PERIP_CLK_EN0: mmio.Mmio(packed struct(u32) {
    +                ///  reg_timers_clk_en
    +                TIMERS_CLK_EN: u1,
    +                ///  reg_spi01_clk_en
    +                SPI01_CLK_EN: u1,
    +                ///  reg_uart_clk_en
    +                UART_CLK_EN: u1,
    +                ///  reg_wdg_clk_en
    +                WDG_CLK_EN: u1,
    +                ///  reg_i2s0_clk_en
    +                I2S0_CLK_EN: u1,
    +                ///  reg_uart1_clk_en
    +                UART1_CLK_EN: u1,
    +                ///  reg_spi2_clk_en
    +                SPI2_CLK_EN: u1,
    +                ///  reg_ext0_clk_en
    +                I2C_EXT0_CLK_EN: u1,
    +                ///  reg_uhci0_clk_en
    +                UHCI0_CLK_EN: u1,
    +                ///  reg_rmt_clk_en
    +                RMT_CLK_EN: u1,
    +                ///  reg_pcnt_clk_en
    +                PCNT_CLK_EN: u1,
    +                ///  reg_ledc_clk_en
    +                LEDC_CLK_EN: u1,
    +                ///  reg_uhci1_clk_en
    +                UHCI1_CLK_EN: u1,
    +                ///  reg_timergroup_clk_en
    +                TIMERGROUP_CLK_EN: u1,
    +                ///  reg_efuse_clk_en
    +                EFUSE_CLK_EN: u1,
    +                ///  reg_timergroup1_clk_en
    +                TIMERGROUP1_CLK_EN: u1,
    +                ///  reg_spi3_clk_en
    +                SPI3_CLK_EN: u1,
    +                ///  reg_pwm0_clk_en
    +                PWM0_CLK_EN: u1,
    +                ///  reg_ext1_clk_en
    +                EXT1_CLK_EN: u1,
    +                ///  reg_can_clk_en
    +                CAN_CLK_EN: u1,
    +                ///  reg_pwm1_clk_en
    +                PWM1_CLK_EN: u1,
    +                ///  reg_i2s1_clk_en
    +                I2S1_CLK_EN: u1,
    +                ///  reg_spi2_dma_clk_en
    +                SPI2_DMA_CLK_EN: u1,
    +                ///  reg_usb_device_clk_en
    +                USB_DEVICE_CLK_EN: u1,
    +                ///  reg_uart_mem_clk_en
    +                UART_MEM_CLK_EN: u1,
    +                ///  reg_pwm2_clk_en
    +                PWM2_CLK_EN: u1,
    +                ///  reg_pwm3_clk_en
    +                PWM3_CLK_EN: u1,
    +                ///  reg_spi3_dma_clk_en
    +                SPI3_DMA_CLK_EN: u1,
    +                ///  reg_apb_saradc_clk_en
    +                APB_SARADC_CLK_EN: u1,
    +                ///  reg_systimer_clk_en
    +                SYSTIMER_CLK_EN: u1,
    +                ///  reg_adc2_arb_clk_en
    +                ADC2_ARB_CLK_EN: u1,
    +                ///  reg_spi4_clk_en
    +                SPI4_CLK_EN: u1,
    +            }),
    +            ///  peripheral clock gating register
    +            PERIP_CLK_EN1: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  reg_crypto_aes_clk_en
    +                CRYPTO_AES_CLK_EN: u1,
    +                ///  reg_crypto_sha_clk_en
    +                CRYPTO_SHA_CLK_EN: u1,
    +                ///  reg_crypto_rsa_clk_en
    +                CRYPTO_RSA_CLK_EN: u1,
    +                ///  reg_crypto_ds_clk_en
    +                CRYPTO_DS_CLK_EN: u1,
    +                ///  reg_crypto_hmac_clk_en
    +                CRYPTO_HMAC_CLK_EN: u1,
    +                ///  reg_dma_clk_en
    +                DMA_CLK_EN: u1,
    +                ///  reg_sdio_host_clk_en
    +                SDIO_HOST_CLK_EN: u1,
    +                ///  reg_lcd_cam_clk_en
    +                LCD_CAM_CLK_EN: u1,
    +                ///  reg_uart2_clk_en
    +                UART2_CLK_EN: u1,
    +                ///  reg_tsens_clk_en
    +                TSENS_CLK_EN: u1,
    +                padding: u21,
    +            }),
    +            ///  reserved
    +            PERIP_RST_EN0: mmio.Mmio(packed struct(u32) {
    +                ///  reg_timers_rst
    +                TIMERS_RST: u1,
    +                ///  reg_spi01_rst
    +                SPI01_RST: u1,
    +                ///  reg_uart_rst
    +                UART_RST: u1,
    +                ///  reg_wdg_rst
    +                WDG_RST: u1,
    +                ///  reg_i2s0_rst
    +                I2S0_RST: u1,
    +                ///  reg_uart1_rst
    +                UART1_RST: u1,
    +                ///  reg_spi2_rst
    +                SPI2_RST: u1,
    +                ///  reg_ext0_rst
    +                I2C_EXT0_RST: u1,
    +                ///  reg_uhci0_rst
    +                UHCI0_RST: u1,
    +                ///  reg_rmt_rst
    +                RMT_RST: u1,
    +                ///  reg_pcnt_rst
    +                PCNT_RST: u1,
    +                ///  reg_ledc_rst
    +                LEDC_RST: u1,
    +                ///  reg_uhci1_rst
    +                UHCI1_RST: u1,
    +                ///  reg_timergroup_rst
    +                TIMERGROUP_RST: u1,
    +                ///  reg_efuse_rst
    +                EFUSE_RST: u1,
    +                ///  reg_timergroup1_rst
    +                TIMERGROUP1_RST: u1,
    +                ///  reg_spi3_rst
    +                SPI3_RST: u1,
    +                ///  reg_pwm0_rst
    +                PWM0_RST: u1,
    +                ///  reg_ext1_rst
    +                EXT1_RST: u1,
    +                ///  reg_can_rst
    +                CAN_RST: u1,
    +                ///  reg_pwm1_rst
    +                PWM1_RST: u1,
    +                ///  reg_i2s1_rst
    +                I2S1_RST: u1,
    +                ///  reg_spi2_dma_rst
    +                SPI2_DMA_RST: u1,
    +                ///  reg_usb_device_rst
    +                USB_DEVICE_RST: u1,
    +                ///  reg_uart_mem_rst
    +                UART_MEM_RST: u1,
    +                ///  reg_pwm2_rst
    +                PWM2_RST: u1,
    +                ///  reg_pwm3_rst
    +                PWM3_RST: u1,
    +                ///  reg_spi3_dma_rst
    +                SPI3_DMA_RST: u1,
    +                ///  reg_apb_saradc_rst
    +                APB_SARADC_RST: u1,
    +                ///  reg_systimer_rst
    +                SYSTIMER_RST: u1,
    +                ///  reg_adc2_arb_rst
    +                ADC2_ARB_RST: u1,
    +                ///  reg_spi4_rst
    +                SPI4_RST: u1,
    +            }),
    +            ///  peripheral reset register
    +            PERIP_RST_EN1: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  reg_crypto_aes_rst
    +                CRYPTO_AES_RST: u1,
    +                ///  reg_crypto_sha_rst
    +                CRYPTO_SHA_RST: u1,
    +                ///  reg_crypto_rsa_rst
    +                CRYPTO_RSA_RST: u1,
    +                ///  reg_crypto_ds_rst
    +                CRYPTO_DS_RST: u1,
    +                ///  reg_crypto_hmac_rst
    +                CRYPTO_HMAC_RST: u1,
    +                ///  reg_dma_rst
    +                DMA_RST: u1,
    +                ///  reg_sdio_host_rst
    +                SDIO_HOST_RST: u1,
    +                ///  reg_lcd_cam_rst
    +                LCD_CAM_RST: u1,
    +                ///  reg_uart2_rst
    +                UART2_RST: u1,
    +                ///  reg_tsens_rst
    +                TSENS_RST: u1,
    +                padding: u21,
    +            }),
    +            ///  clock config register
    +            BT_LPCK_DIV_INT: mmio.Mmio(packed struct(u32) {
    +                ///  reg_bt_lpck_div_num
    +                BT_LPCK_DIV_NUM: u12,
    +                padding: u20,
    +            }),
    +            ///  clock config register
    +            BT_LPCK_DIV_FRAC: mmio.Mmio(packed struct(u32) {
    +                ///  reg_bt_lpck_div_b
    +                BT_LPCK_DIV_B: u12,
    +                ///  reg_bt_lpck_div_a
    +                BT_LPCK_DIV_A: u12,
    +                ///  reg_lpclk_sel_rtc_slow
    +                LPCLK_SEL_RTC_SLOW: u1,
    +                ///  reg_lpclk_sel_8m
    +                LPCLK_SEL_8M: u1,
    +                ///  reg_lpclk_sel_xtal
    +                LPCLK_SEL_XTAL: u1,
    +                ///  reg_lpclk_sel_xtal32k
    +                LPCLK_SEL_XTAL32K: u1,
    +                ///  reg_lpclk_rtc_en
    +                LPCLK_RTC_EN: u1,
    +                padding: u3,
    +            }),
    +            ///  interrupt generate register
    +            CPU_INTR_FROM_CPU_0: mmio.Mmio(packed struct(u32) {
    +                ///  reg_cpu_intr_from_cpu_0
    +                CPU_INTR_FROM_CPU_0: u1,
    +                padding: u31,
    +            }),
    +            ///  interrupt generate register
    +            CPU_INTR_FROM_CPU_1: mmio.Mmio(packed struct(u32) {
    +                ///  reg_cpu_intr_from_cpu_1
    +                CPU_INTR_FROM_CPU_1: u1,
    +                padding: u31,
    +            }),
    +            ///  interrupt generate register
    +            CPU_INTR_FROM_CPU_2: mmio.Mmio(packed struct(u32) {
    +                ///  reg_cpu_intr_from_cpu_2
    +                CPU_INTR_FROM_CPU_2: u1,
    +                padding: u31,
    +            }),
    +            ///  interrupt generate register
    +            CPU_INTR_FROM_CPU_3: mmio.Mmio(packed struct(u32) {
    +                ///  reg_cpu_intr_from_cpu_3
    +                CPU_INTR_FROM_CPU_3: u1,
    +                padding: u31,
    +            }),
    +            ///  rsa memory power control register
    +            RSA_PD_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  reg_rsa_mem_pd
    +                RSA_MEM_PD: u1,
    +                ///  reg_rsa_mem_force_pu
    +                RSA_MEM_FORCE_PU: u1,
    +                ///  reg_rsa_mem_force_pd
    +                RSA_MEM_FORCE_PD: u1,
    +                padding: u29,
    +            }),
    +            ///  edma clcok and reset register
    +            EDMA_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  reg_edma_clk_on
    +                EDMA_CLK_ON: u1,
    +                ///  reg_edma_reset
    +                EDMA_RESET: u1,
    +                padding: u30,
    +            }),
    +            ///  cache control register
    +            CACHE_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  reg_icache_clk_on
    +                ICACHE_CLK_ON: u1,
    +                ///  reg_icache_reset
    +                ICACHE_RESET: u1,
    +                ///  reg_dcache_clk_on
    +                DCACHE_CLK_ON: u1,
    +                ///  reg_dcache_reset
    +                DCACHE_RESET: u1,
    +                padding: u28,
    +            }),
    +            ///  SYSTEM_EXTERNAL_DEVICE_ENCRYPT_DECRYPT_CONTROL_REG
    +            EXTERNAL_DEVICE_ENCRYPT_DECRYPT_CONTROL: mmio.Mmio(packed struct(u32) {
    +                ///  reg_enable_spi_manual_encrypt
    +                ENABLE_SPI_MANUAL_ENCRYPT: u1,
    +                ///  reg_enable_download_db_encrypt
    +                ENABLE_DOWNLOAD_DB_ENCRYPT: u1,
    +                ///  reg_enable_download_g0cb_decrypt
    +                ENABLE_DOWNLOAD_G0CB_DECRYPT: u1,
    +                ///  reg_enable_download_manual_encrypt
    +                ENABLE_DOWNLOAD_MANUAL_ENCRYPT: u1,
    +                padding: u28,
    +            }),
    +            ///  fast memory config register
    +            RTC_FASTMEM_CONFIG: mmio.Mmio(packed struct(u32) {
    +                reserved8: u8,
    +                ///  reg_rtc_mem_crc_start
    +                RTC_MEM_CRC_START: u1,
    +                ///  reg_rtc_mem_crc_addr
    +                RTC_MEM_CRC_ADDR: u11,
    +                ///  reg_rtc_mem_crc_len
    +                RTC_MEM_CRC_LEN: u11,
    +                ///  reg_rtc_mem_crc_finish
    +                RTC_MEM_CRC_FINISH: u1,
    +            }),
    +            ///  reserved
    +            RTC_FASTMEM_CRC: mmio.Mmio(packed struct(u32) {
    +                ///  reg_rtc_mem_crc_res
    +                RTC_MEM_CRC_RES: u32,
    +            }),
    +            ///  eco register
    +            REDUNDANT_ECO_CTRL: mmio.Mmio(packed struct(u32) {
    +                ///  reg_redundant_eco_drive
    +                REDUNDANT_ECO_DRIVE: u1,
    +                ///  reg_redundant_eco_result
    +                REDUNDANT_ECO_RESULT: u1,
    +                padding: u30,
    +            }),
    +            ///  clock gating register
    +            CLOCK_GATE: mmio.Mmio(packed struct(u32) {
    +                ///  reg_clk_en
    +                CLK_EN: u1,
    +                padding: u31,
    +            }),
    +            ///  system clock config register
    +            SYSCLK_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  reg_pre_div_cnt
    +                PRE_DIV_CNT: u10,
    +                ///  reg_soc_clk_sel
    +                SOC_CLK_SEL: u2,
    +                ///  reg_clk_xtal_freq
    +                CLK_XTAL_FREQ: u7,
    +                ///  reg_clk_div_en
    +                CLK_DIV_EN: u1,
    +                padding: u12,
    +            }),
    +            ///  mem pvt register
    +            MEM_PVT: mmio.Mmio(packed struct(u32) {
    +                ///  reg_mem_path_len
    +                MEM_PATH_LEN: u4,
    +                ///  reg_mem_err_cnt_clr
    +                MEM_ERR_CNT_CLR: u1,
    +                ///  reg_mem_pvt_monitor_en
    +                MONITOR_EN: u1,
    +                ///  reg_mem_timing_err_cnt
    +                MEM_TIMING_ERR_CNT: u16,
    +                ///  reg_mem_vt_sel
    +                MEM_VT_SEL: u2,
    +                padding: u8,
    +            }),
    +            ///  mem pvt register
    +            COMB_PVT_LVT_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  reg_comb_path_len_lvt
    +                COMB_PATH_LEN_LVT: u5,
    +                ///  reg_comb_err_cnt_clr_lvt
    +                COMB_ERR_CNT_CLR_LVT: u1,
    +                ///  reg_comb_pvt_monitor_en_lvt
    +                COMB_PVT_MONITOR_EN_LVT: u1,
    +                padding: u25,
    +            }),
    +            ///  mem pvt register
    +            COMB_PVT_NVT_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  reg_comb_path_len_nvt
    +                COMB_PATH_LEN_NVT: u5,
    +                ///  reg_comb_err_cnt_clr_nvt
    +                COMB_ERR_CNT_CLR_NVT: u1,
    +                ///  reg_comb_pvt_monitor_en_nvt
    +                COMB_PVT_MONITOR_EN_NVT: u1,
    +                padding: u25,
    +            }),
    +            ///  mem pvt register
    +            COMB_PVT_HVT_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  reg_comb_path_len_hvt
    +                COMB_PATH_LEN_HVT: u5,
    +                ///  reg_comb_err_cnt_clr_hvt
    +                COMB_ERR_CNT_CLR_HVT: u1,
    +                ///  reg_comb_pvt_monitor_en_hvt
    +                COMB_PVT_MONITOR_EN_HVT: u1,
    +                padding: u25,
    +            }),
    +            ///  mem pvt register
    +            COMB_PVT_ERR_LVT_SITE0: mmio.Mmio(packed struct(u32) {
    +                ///  reg_comb_timing_err_cnt_lvt_site0
    +                COMB_TIMING_ERR_CNT_LVT_SITE0: u16,
    +                padding: u16,
    +            }),
    +            ///  mem pvt register
    +            COMB_PVT_ERR_NVT_SITE0: mmio.Mmio(packed struct(u32) {
    +                ///  reg_comb_timing_err_cnt_nvt_site0
    +                COMB_TIMING_ERR_CNT_NVT_SITE0: u16,
    +                padding: u16,
    +            }),
    +            ///  mem pvt register
    +            COMB_PVT_ERR_HVT_SITE0: mmio.Mmio(packed struct(u32) {
    +                ///  reg_comb_timing_err_cnt_hvt_site0
    +                COMB_TIMING_ERR_CNT_HVT_SITE0: u16,
    +                padding: u16,
    +            }),
    +            ///  mem pvt register
    +            COMB_PVT_ERR_LVT_SITE1: mmio.Mmio(packed struct(u32) {
    +                ///  reg_comb_timing_err_cnt_lvt_site1
    +                COMB_TIMING_ERR_CNT_LVT_SITE1: u16,
    +                padding: u16,
    +            }),
    +            ///  mem pvt register
    +            COMB_PVT_ERR_NVT_SITE1: mmio.Mmio(packed struct(u32) {
    +                ///  reg_comb_timing_err_cnt_nvt_site1
    +                COMB_TIMING_ERR_CNT_NVT_SITE1: u16,
    +                padding: u16,
    +            }),
    +            ///  mem pvt register
    +            COMB_PVT_ERR_HVT_SITE1: mmio.Mmio(packed struct(u32) {
    +                ///  reg_comb_timing_err_cnt_hvt_site1
    +                COMB_TIMING_ERR_CNT_HVT_SITE1: u16,
    +                padding: u16,
    +            }),
    +            ///  mem pvt register
    +            COMB_PVT_ERR_LVT_SITE2: mmio.Mmio(packed struct(u32) {
    +                ///  reg_comb_timing_err_cnt_lvt_site2
    +                COMB_TIMING_ERR_CNT_LVT_SITE2: u16,
    +                padding: u16,
    +            }),
    +            ///  mem pvt register
    +            COMB_PVT_ERR_NVT_SITE2: mmio.Mmio(packed struct(u32) {
    +                ///  reg_comb_timing_err_cnt_nvt_site2
    +                COMB_TIMING_ERR_CNT_NVT_SITE2: u16,
    +                padding: u16,
    +            }),
    +            ///  mem pvt register
    +            COMB_PVT_ERR_HVT_SITE2: mmio.Mmio(packed struct(u32) {
    +                ///  reg_comb_timing_err_cnt_hvt_site2
    +                COMB_TIMING_ERR_CNT_HVT_SITE2: u16,
    +                padding: u16,
    +            }),
    +            ///  mem pvt register
    +            COMB_PVT_ERR_LVT_SITE3: mmio.Mmio(packed struct(u32) {
    +                ///  reg_comb_timing_err_cnt_lvt_site3
    +                COMB_TIMING_ERR_CNT_LVT_SITE3: u16,
    +                padding: u16,
    +            }),
    +            ///  mem pvt register
    +            COMB_PVT_ERR_NVT_SITE3: mmio.Mmio(packed struct(u32) {
    +                ///  reg_comb_timing_err_cnt_nvt_site3
    +                COMB_TIMING_ERR_CNT_NVT_SITE3: u16,
    +                padding: u16,
    +            }),
    +            ///  mem pvt register
    +            COMB_PVT_ERR_HVT_SITE3: mmio.Mmio(packed struct(u32) {
    +                ///  reg_comb_timing_err_cnt_hvt_site3
    +                COMB_TIMING_ERR_CNT_HVT_SITE3: u16,
    +                padding: u16,
    +            }),
    +            reserved4092: [3936]u8,
    +            ///  Version register
    +            SYSTEM_REG_DATE: mmio.Mmio(packed struct(u32) {
    +                ///  reg_system_reg_date
    +                SYSTEM_REG_DATE: u28,
    +                padding: u4,
    +            }),
    +        };
    +
    +        ///  System Timer
    +        pub const SYSTIMER = extern struct {
    +            ///  SYSTIMER_CONF.
    +            CONF: mmio.Mmio(packed struct(u32) {
    +                ///  systimer clock force on
    +                SYSTIMER_CLK_FO: u1,
    +                reserved22: u21,
    +                ///  target2 work enable
    +                TARGET2_WORK_EN: u1,
    +                ///  target1 work enable
    +                TARGET1_WORK_EN: u1,
    +                ///  target0 work enable
    +                TARGET0_WORK_EN: u1,
    +                ///  If timer unit1 is stalled when core1 stalled
    +                TIMER_UNIT1_CORE1_STALL_EN: u1,
    +                ///  If timer unit1 is stalled when core0 stalled
    +                TIMER_UNIT1_CORE0_STALL_EN: u1,
    +                ///  If timer unit0 is stalled when core1 stalled
    +                TIMER_UNIT0_CORE1_STALL_EN: u1,
    +                ///  If timer unit0 is stalled when core0 stalled
    +                TIMER_UNIT0_CORE0_STALL_EN: u1,
    +                ///  timer unit1 work enable
    +                TIMER_UNIT1_WORK_EN: u1,
    +                ///  timer unit0 work enable
    +                TIMER_UNIT0_WORK_EN: u1,
    +                ///  register file clk gating
    +                CLK_EN: u1,
    +            }),
    +            ///  SYSTIMER_UNIT0_OP.
    +            UNIT0_OP: mmio.Mmio(packed struct(u32) {
    +                reserved29: u29,
    +                ///  reg_timer_unit0_value_valid
    +                TIMER_UNIT0_VALUE_VALID: u1,
    +                ///  update timer_unit0
    +                TIMER_UNIT0_UPDATE: u1,
    +                padding: u1,
    +            }),
    +            ///  SYSTIMER_UNIT1_OP.
    +            UNIT1_OP: mmio.Mmio(packed struct(u32) {
    +                reserved29: u29,
    +                ///  timer value is sync and valid
    +                TIMER_UNIT1_VALUE_VALID: u1,
    +                ///  update timer unit1
    +                TIMER_UNIT1_UPDATE: u1,
    +                padding: u1,
    +            }),
    +            ///  SYSTIMER_UNIT0_LOAD_HI.
    +            UNIT0_LOAD_HI: mmio.Mmio(packed struct(u32) {
    +                ///  timer unit0 load high 32 bit
    +                TIMER_UNIT0_LOAD_HI: u20,
    +                padding: u12,
    +            }),
    +            ///  SYSTIMER_UNIT0_LOAD_LO.
    +            UNIT0_LOAD_LO: mmio.Mmio(packed struct(u32) {
    +                ///  timer unit0 load low 32 bit
    +                TIMER_UNIT0_LOAD_LO: u32,
    +            }),
    +            ///  SYSTIMER_UNIT1_LOAD_HI.
    +            UNIT1_LOAD_HI: mmio.Mmio(packed struct(u32) {
    +                ///  timer unit1 load high 32 bit
    +                TIMER_UNIT1_LOAD_HI: u20,
    +                padding: u12,
    +            }),
    +            ///  SYSTIMER_UNIT1_LOAD_LO.
    +            UNIT1_LOAD_LO: mmio.Mmio(packed struct(u32) {
    +                ///  timer unit1 load low 32 bit
    +                TIMER_UNIT1_LOAD_LO: u32,
    +            }),
    +            ///  SYSTIMER_TARGET0_HI.
    +            TARGET0_HI: mmio.Mmio(packed struct(u32) {
    +                ///  timer taget0 high 32 bit
    +                TIMER_TARGET0_HI: u20,
    +                padding: u12,
    +            }),
    +            ///  SYSTIMER_TARGET0_LO.
    +            TARGET0_LO: mmio.Mmio(packed struct(u32) {
    +                ///  timer taget0 low 32 bit
    +                TIMER_TARGET0_LO: u32,
    +            }),
    +            ///  SYSTIMER_TARGET1_HI.
    +            TARGET1_HI: mmio.Mmio(packed struct(u32) {
    +                ///  timer taget1 high 32 bit
    +                TIMER_TARGET1_HI: u20,
    +                padding: u12,
    +            }),
    +            ///  SYSTIMER_TARGET1_LO.
    +            TARGET1_LO: mmio.Mmio(packed struct(u32) {
    +                ///  timer taget1 low 32 bit
    +                TIMER_TARGET1_LO: u32,
    +            }),
    +            ///  SYSTIMER_TARGET2_HI.
    +            TARGET2_HI: mmio.Mmio(packed struct(u32) {
    +                ///  timer taget2 high 32 bit
    +                TIMER_TARGET2_HI: u20,
    +                padding: u12,
    +            }),
    +            ///  SYSTIMER_TARGET2_LO.
    +            TARGET2_LO: mmio.Mmio(packed struct(u32) {
    +                ///  timer taget2 low 32 bit
    +                TIMER_TARGET2_LO: u32,
    +            }),
    +            ///  SYSTIMER_TARGET0_CONF.
    +            TARGET0_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  target0 period
    +                TARGET0_PERIOD: u26,
    +                reserved30: u4,
    +                ///  Set target0 to period mode
    +                TARGET0_PERIOD_MODE: u1,
    +                ///  select which unit to compare
    +                TARGET0_TIMER_UNIT_SEL: u1,
    +            }),
    +            ///  SYSTIMER_TARGET1_CONF.
    +            TARGET1_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  target1 period
    +                TARGET1_PERIOD: u26,
    +                reserved30: u4,
    +                ///  Set target1 to period mode
    +                TARGET1_PERIOD_MODE: u1,
    +                ///  select which unit to compare
    +                TARGET1_TIMER_UNIT_SEL: u1,
    +            }),
    +            ///  SYSTIMER_TARGET2_CONF.
    +            TARGET2_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  target2 period
    +                TARGET2_PERIOD: u26,
    +                reserved30: u4,
    +                ///  Set target2 to period mode
    +                TARGET2_PERIOD_MODE: u1,
    +                ///  select which unit to compare
    +                TARGET2_TIMER_UNIT_SEL: u1,
    +            }),
    +            ///  SYSTIMER_UNIT0_VALUE_HI.
    +            UNIT0_VALUE_HI: mmio.Mmio(packed struct(u32) {
    +                ///  timer read value high 32bit
    +                TIMER_UNIT0_VALUE_HI: u20,
    +                padding: u12,
    +            }),
    +            ///  SYSTIMER_UNIT0_VALUE_LO.
    +            UNIT0_VALUE_LO: mmio.Mmio(packed struct(u32) {
    +                ///  timer read value low 32bit
    +                TIMER_UNIT0_VALUE_LO: u32,
    +            }),
    +            ///  SYSTIMER_UNIT1_VALUE_HI.
    +            UNIT1_VALUE_HI: mmio.Mmio(packed struct(u32) {
    +                ///  timer read value high 32bit
    +                TIMER_UNIT1_VALUE_HI: u20,
    +                padding: u12,
    +            }),
    +            ///  SYSTIMER_UNIT1_VALUE_LO.
    +            UNIT1_VALUE_LO: mmio.Mmio(packed struct(u32) {
    +                ///  timer read value low 32bit
    +                TIMER_UNIT1_VALUE_LO: u32,
    +            }),
    +            ///  SYSTIMER_COMP0_LOAD.
    +            COMP0_LOAD: mmio.Mmio(packed struct(u32) {
    +                ///  timer comp0 load value
    +                TIMER_COMP0_LOAD: u1,
    +                padding: u31,
    +            }),
    +            ///  SYSTIMER_COMP1_LOAD.
    +            COMP1_LOAD: mmio.Mmio(packed struct(u32) {
    +                ///  timer comp1 load value
    +                TIMER_COMP1_LOAD: u1,
    +                padding: u31,
    +            }),
    +            ///  SYSTIMER_COMP2_LOAD.
    +            COMP2_LOAD: mmio.Mmio(packed struct(u32) {
    +                ///  timer comp2 load value
    +                TIMER_COMP2_LOAD: u1,
    +                padding: u31,
    +            }),
    +            ///  SYSTIMER_UNIT0_LOAD.
    +            UNIT0_LOAD: mmio.Mmio(packed struct(u32) {
    +                ///  timer unit0 load value
    +                TIMER_UNIT0_LOAD: u1,
    +                padding: u31,
    +            }),
    +            ///  SYSTIMER_UNIT1_LOAD.
    +            UNIT1_LOAD: mmio.Mmio(packed struct(u32) {
    +                ///  timer unit1 load value
    +                TIMER_UNIT1_LOAD: u1,
    +                padding: u31,
    +            }),
    +            ///  SYSTIMER_INT_ENA.
    +            INT_ENA: mmio.Mmio(packed struct(u32) {
    +                ///  interupt0 enable
    +                TARGET0_INT_ENA: u1,
    +                ///  interupt1 enable
    +                TARGET1_INT_ENA: u1,
    +                ///  interupt2 enable
    +                TARGET2_INT_ENA: u1,
    +                padding: u29,
    +            }),
    +            ///  SYSTIMER_INT_RAW.
    +            INT_RAW: mmio.Mmio(packed struct(u32) {
    +                ///  interupt0 raw
    +                TARGET0_INT_RAW: u1,
    +                ///  interupt1 raw
    +                TARGET1_INT_RAW: u1,
    +                ///  interupt2 raw
    +                TARGET2_INT_RAW: u1,
    +                padding: u29,
    +            }),
    +            ///  SYSTIMER_INT_CLR.
    +            INT_CLR: mmio.Mmio(packed struct(u32) {
    +                ///  interupt0 clear
    +                TARGET0_INT_CLR: u1,
    +                ///  interupt1 clear
    +                TARGET1_INT_CLR: u1,
    +                ///  interupt2 clear
    +                TARGET2_INT_CLR: u1,
    +                padding: u29,
    +            }),
    +            ///  SYSTIMER_INT_ST.
    +            INT_ST: mmio.Mmio(packed struct(u32) {
    +                ///  reg_target0_int_st
    +                TARGET0_INT_ST: u1,
    +                ///  reg_target1_int_st
    +                TARGET1_INT_ST: u1,
    +                ///  reg_target2_int_st
    +                TARGET2_INT_ST: u1,
    +                padding: u29,
    +            }),
    +            reserved252: [136]u8,
    +            ///  SYSTIMER_DATE.
    +            DATE: mmio.Mmio(packed struct(u32) {
    +                ///  reg_date
    +                DATE: u32,
    +            }),
    +        };
    +
    +        ///  Timer Group
    +        pub const TIMG0 = extern struct {
    +            ///  TIMG_T0CONFIG_REG.
    +            T0CONFIG: mmio.Mmio(packed struct(u32) {
    +                reserved9: u9,
    +                ///  reg_t0_use_xtal.
    +                T0_USE_XTAL: u1,
    +                ///  reg_t0_alarm_en.
    +                T0_ALARM_EN: u1,
    +                reserved12: u1,
    +                ///  reg_t0_divcnt_rst.
    +                T0_DIVCNT_RST: u1,
    +                ///  reg_t0_divider.
    +                T0_DIVIDER: u16,
    +                ///  reg_t0_autoreload.
    +                T0_AUTORELOAD: u1,
    +                ///  reg_t0_increase.
    +                T0_INCREASE: u1,
    +                ///  reg_t0_en.
    +                T0_EN: u1,
    +            }),
    +            ///  TIMG_T0LO_REG.
    +            T0LO: mmio.Mmio(packed struct(u32) {
    +                ///  t0_lo
    +                T0_LO: u32,
    +            }),
    +            ///  TIMG_T0HI_REG.
    +            T0HI: mmio.Mmio(packed struct(u32) {
    +                ///  t0_hi
    +                T0_HI: u22,
    +                padding: u10,
    +            }),
    +            ///  TIMG_T0UPDATE_REG.
    +            T0UPDATE: mmio.Mmio(packed struct(u32) {
    +                reserved31: u31,
    +                ///  t0_update
    +                T0_UPDATE: u1,
    +            }),
    +            ///  TIMG_T0ALARMLO_REG.
    +            T0ALARMLO: mmio.Mmio(packed struct(u32) {
    +                ///  reg_t0_alarm_lo.
    +                T0_ALARM_LO: u32,
    +            }),
    +            ///  TIMG_T0ALARMHI_REG.
    +            T0ALARMHI: mmio.Mmio(packed struct(u32) {
    +                ///  reg_t0_alarm_hi.
    +                T0_ALARM_HI: u22,
    +                padding: u10,
    +            }),
    +            ///  TIMG_T0LOADLO_REG.
    +            T0LOADLO: mmio.Mmio(packed struct(u32) {
    +                ///  reg_t0_load_lo.
    +                T0_LOAD_LO: u32,
    +            }),
    +            ///  TIMG_T0LOADHI_REG.
    +            T0LOADHI: mmio.Mmio(packed struct(u32) {
    +                ///  reg_t0_load_hi.
    +                T0_LOAD_HI: u22,
    +                padding: u10,
    +            }),
    +            ///  TIMG_T0LOAD_REG.
    +            T0LOAD: mmio.Mmio(packed struct(u32) {
    +                ///  t0_load
    +                T0_LOAD: u32,
    +            }),
    +            reserved72: [36]u8,
    +            ///  TIMG_WDTCONFIG0_REG.
    +            WDTCONFIG0: mmio.Mmio(packed struct(u32) {
    +                reserved12: u12,
    +                ///  reg_wdt_appcpu_reset_en.
    +                WDT_APPCPU_RESET_EN: u1,
    +                ///  reg_wdt_procpu_reset_en.
    +                WDT_PROCPU_RESET_EN: u1,
    +                ///  reg_wdt_flashboot_mod_en.
    +                WDT_FLASHBOOT_MOD_EN: u1,
    +                ///  reg_wdt_sys_reset_length.
    +                WDT_SYS_RESET_LENGTH: u3,
    +                ///  reg_wdt_cpu_reset_length.
    +                WDT_CPU_RESET_LENGTH: u3,
    +                ///  reg_wdt_use_xtal.
    +                WDT_USE_XTAL: u1,
    +                ///  reg_wdt_conf_update_en.
    +                WDT_CONF_UPDATE_EN: u1,
    +                ///  reg_wdt_stg3.
    +                WDT_STG3: u2,
    +                ///  reg_wdt_stg2.
    +                WDT_STG2: u2,
    +                ///  reg_wdt_stg1.
    +                WDT_STG1: u2,
    +                ///  reg_wdt_stg0.
    +                WDT_STG0: u2,
    +                ///  reg_wdt_en.
    +                WDT_EN: u1,
    +            }),
    +            ///  TIMG_WDTCONFIG1_REG.
    +            WDTCONFIG1: mmio.Mmio(packed struct(u32) {
    +                ///  reg_wdt_divcnt_rst.
    +                WDT_DIVCNT_RST: u1,
    +                reserved16: u15,
    +                ///  reg_wdt_clk_prescale.
    +                WDT_CLK_PRESCALE: u16,
    +            }),
    +            ///  TIMG_WDTCONFIG2_REG.
    +            WDTCONFIG2: mmio.Mmio(packed struct(u32) {
    +                ///  reg_wdt_stg0_hold.
    +                WDT_STG0_HOLD: u32,
    +            }),
    +            ///  TIMG_WDTCONFIG3_REG.
    +            WDTCONFIG3: mmio.Mmio(packed struct(u32) {
    +                ///  reg_wdt_stg1_hold.
    +                WDT_STG1_HOLD: u32,
    +            }),
    +            ///  TIMG_WDTCONFIG4_REG.
    +            WDTCONFIG4: mmio.Mmio(packed struct(u32) {
    +                ///  reg_wdt_stg2_hold.
    +                WDT_STG2_HOLD: u32,
    +            }),
    +            ///  TIMG_WDTCONFIG5_REG.
    +            WDTCONFIG5: mmio.Mmio(packed struct(u32) {
    +                ///  reg_wdt_stg3_hold.
    +                WDT_STG3_HOLD: u32,
    +            }),
    +            ///  TIMG_WDTFEED_REG.
    +            WDTFEED: mmio.Mmio(packed struct(u32) {
    +                ///  wdt_feed
    +                WDT_FEED: u32,
    +            }),
    +            ///  TIMG_WDTWPROTECT_REG.
    +            WDTWPROTECT: mmio.Mmio(packed struct(u32) {
    +                ///  reg_wdt_wkey.
    +                WDT_WKEY: u32,
    +            }),
    +            ///  TIMG_RTCCALICFG_REG.
    +            RTCCALICFG: mmio.Mmio(packed struct(u32) {
    +                reserved12: u12,
    +                ///  reg_rtc_cali_start_cycling.
    +                RTC_CALI_START_CYCLING: u1,
    +                ///  reg_rtc_cali_clk_sel.0:rtcslowclock.1:clk_80m.2:xtal_32k
    +                RTC_CALI_CLK_SEL: u2,
    +                ///  rtc_cali_rdy
    +                RTC_CALI_RDY: u1,
    +                ///  reg_rtc_cali_max.
    +                RTC_CALI_MAX: u15,
    +                ///  reg_rtc_cali_start.
    +                RTC_CALI_START: u1,
    +            }),
    +            ///  TIMG_RTCCALICFG1_REG.
    +            RTCCALICFG1: mmio.Mmio(packed struct(u32) {
    +                ///  rtc_cali_cycling_data_vld
    +                RTC_CALI_CYCLING_DATA_VLD: u1,
    +                reserved7: u6,
    +                ///  rtc_cali_value
    +                RTC_CALI_VALUE: u25,
    +            }),
    +            ///  INT_ENA_TIMG_REG
    +            INT_ENA_TIMERS: mmio.Mmio(packed struct(u32) {
    +                ///  t0_int_ena
    +                T0_INT_ENA: u1,
    +                ///  wdt_int_ena
    +                WDT_INT_ENA: u1,
    +                padding: u30,
    +            }),
    +            ///  INT_RAW_TIMG_REG
    +            INT_RAW_TIMERS: mmio.Mmio(packed struct(u32) {
    +                ///  t0_int_raw
    +                T0_INT_RAW: u1,
    +                ///  wdt_int_raw
    +                WDT_INT_RAW: u1,
    +                padding: u30,
    +            }),
    +            ///  INT_ST_TIMG_REG
    +            INT_ST_TIMERS: mmio.Mmio(packed struct(u32) {
    +                ///  t0_int_st
    +                T0_INT_ST: u1,
    +                ///  wdt_int_st
    +                WDT_INT_ST: u1,
    +                padding: u30,
    +            }),
    +            ///  INT_CLR_TIMG_REG
    +            INT_CLR_TIMERS: mmio.Mmio(packed struct(u32) {
    +                ///  t0_int_clr
    +                T0_INT_CLR: u1,
    +                ///  wdt_int_clr
    +                WDT_INT_CLR: u1,
    +                padding: u30,
    +            }),
    +            ///  TIMG_RTCCALICFG2_REG.
    +            RTCCALICFG2: mmio.Mmio(packed struct(u32) {
    +                ///  timeoutindicator
    +                RTC_CALI_TIMEOUT: u1,
    +                reserved3: u2,
    +                ///  reg_rtc_cali_timeout_rst_cnt.Cyclesthatreleasecalibrationtimeoutreset
    +                RTC_CALI_TIMEOUT_RST_CNT: u4,
    +                ///  reg_rtc_cali_timeout_thres.timeoutifcalivaluecountsoverthreshold
    +                RTC_CALI_TIMEOUT_THRES: u25,
    +            }),
    +            reserved248: [116]u8,
    +            ///  TIMG_NTIMG_DATE_REG.
    +            NTIMG_DATE: mmio.Mmio(packed struct(u32) {
    +                ///  reg_ntimers_date.
    +                NTIMGS_DATE: u28,
    +                padding: u4,
    +            }),
    +            ///  TIMG_REGCLK_REG.
    +            REGCLK: mmio.Mmio(packed struct(u32) {
    +                reserved29: u29,
    +                ///  reg_wdt_clk_is_active.
    +                WDT_CLK_IS_ACTIVE: u1,
    +                ///  reg_timer_clk_is_active.
    +                TIMER_CLK_IS_ACTIVE: u1,
    +                ///  reg_clk_en.
    +                CLK_EN: u1,
    +            }),
    +        };
    +
    +        ///  XTS-AES-128 Flash Encryption
    +        pub const XTS_AES = extern struct {
    +            ///  The memory that stores plaintext
    +            PLAIN_MEM: [16]u8,
    +            reserved64: [48]u8,
    +            ///  XTS-AES line-size register
    +            LINESIZE: mmio.Mmio(packed struct(u32) {
    +                ///  This bit stores the line size parameter. 0: 16Byte, 1: 32Byte.
    +                LINESIZE: u1,
    +                padding: u31,
    +            }),
    +            ///  XTS-AES destination register
    +            DESTINATION: mmio.Mmio(packed struct(u32) {
    +                ///  This bit stores the destination. 0: flash(default). 1: reserved.
    +                DESTINATION: u1,
    +                padding: u31,
    +            }),
    +            ///  XTS-AES physical address register
    +            PHYSICAL_ADDRESS: mmio.Mmio(packed struct(u32) {
    +                ///  Those bits stores the physical address. If linesize is 16-byte, the physical address should be aligned of 16 bytes. If linesize is 32-byte, the physical address should be aligned of 32 bytes.
    +                PHYSICAL_ADDRESS: u30,
    +                padding: u2,
    +            }),
    +            ///  XTS-AES trigger register
    +            TRIGGER: mmio.Mmio(packed struct(u32) {
    +                ///  Set this bit to start manual encryption calculation
    +                TRIGGER: u1,
    +                padding: u31,
    +            }),
    +            ///  XTS-AES release register
    +            RELEASE: mmio.Mmio(packed struct(u32) {
    +                ///  Set this bit to release the manual encrypted result, after that the result will be visible to spi
    +                RELEASE: u1,
    +                padding: u31,
    +            }),
    +            ///  XTS-AES destroy register
    +            DESTROY: mmio.Mmio(packed struct(u32) {
    +                ///  Set this bit to destroy XTS-AES result.
    +                DESTROY: u1,
    +                padding: u31,
    +            }),
    +            ///  XTS-AES status register
    +            STATE: mmio.Mmio(packed struct(u32) {
    +                ///  Those bits shows XTS-AES status. 0=IDLE, 1=WORK, 2=RELEASE, 3=USE. IDLE means that XTS-AES is idle. WORK means that XTS-AES is busy with calculation. RELEASE means the encrypted result is generated but not visible to mspi. USE means that the encrypted result is visible to mspi.
    +                STATE: u2,
    +                padding: u30,
    +            }),
    +            ///  XTS-AES version control register
    +            DATE: mmio.Mmio(packed struct(u32) {
    +                ///  Those bits stores the version information of XTS-AES.
    +                DATE: u30,
    +                padding: u2,
    +            }),
    +        };
    +
    +        ///  Two-Wire Automotive Interface
    +        pub const TWAI = extern struct {
    +            ///  Mode Register
    +            MODE: mmio.Mmio(packed struct(u32) {
    +                ///  This bit is used to configure the operating mode of the TWAI Controller. 1: Reset mode; 0: Operating mode.
    +                RESET_MODE: u1,
    +                ///  1: Listen only mode. In this mode the nodes will only receive messages from the bus, without generating the acknowledge signal nor updating the RX error counter.
    +                LISTEN_ONLY_MODE: u1,
    +                ///  1: Self test mode. In this mode the TX nodes can perform a successful transmission without receiving the acknowledge signal. This mode is often used to test a single node with the self reception request command.
    +                SELF_TEST_MODE: u1,
    +                ///  This bit is used to configure the filter mode. 0: Dual filter mode; 1: Single filter mode.
    +                RX_FILTER_MODE: u1,
    +                padding: u28,
    +            }),
    +            ///  Command Register
    +            CMD: mmio.Mmio(packed struct(u32) {
    +                ///  Set the bit to 1 to allow the driving nodes start transmission.
    +                TX_REQ: u1,
    +                ///  Set the bit to 1 to cancel a pending transmission request.
    +                ABORT_TX: u1,
    +                ///  Set the bit to 1 to release the RX buffer.
    +                RELEASE_BUF: u1,
    +                ///  Set the bit to 1 to clear the data overrun status bit.
    +                CLR_OVERRUN: u1,
    +                ///  Self reception request command. Set the bit to 1 to allow a message be transmitted and received simultaneously.
    +                SELF_RX_REQ: u1,
    +                padding: u27,
    +            }),
    +            ///  Status register
    +            STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  1: The data in the RX buffer is not empty, with at least one received data packet.
    +                RX_BUF_ST: u1,
    +                ///  1: The RX FIFO is full and data overrun has occurred.
    +                OVERRUN_ST: u1,
    +                ///  1: The TX buffer is empty, the CPU may write a message into it.
    +                TX_BUF_ST: u1,
    +                ///  1: The TWAI controller has successfully received a packet from the bus.
    +                TX_COMPLETE: u1,
    +                ///  1: The TWAI Controller is receiving a message from the bus.
    +                RX_ST: u1,
    +                ///  1: The TWAI Controller is transmitting a message to the bus.
    +                TX_ST: u1,
    +                ///  1: At least one of the RX/TX error counter has reached or exceeded the value set in register TWAI_ERR_WARNING_LIMIT_REG.
    +                ERR_ST: u1,
    +                ///  1: In bus-off status, the TWAI Controller is no longer involved in bus activities.
    +                BUS_OFF_ST: u1,
    +                ///  This bit reflects whether the data packet in the RX FIFO is complete. 1: The current packet is missing; 0: The current packet is complete
    +                MISS_ST: u1,
    +                padding: u23,
    +            }),
    +            ///  Interrupt Register
    +            INT_RAW: mmio.Mmio(packed struct(u32) {
    +                ///  Receive interrupt. If this bit is set to 1, it indicates there are messages to be handled in the RX FIFO.
    +                RX_INT_ST: u1,
    +                ///  Transmit interrupt. If this bit is set to 1, it indicates the message transmitting mis- sion is finished and a new transmission is able to execute.
    +                TX_INT_ST: u1,
    +                ///  Error warning interrupt. If this bit is set to 1, it indicates the error status signal and the bus-off status signal of Status register have changed (e.g., switched from 0 to 1 or from 1 to 0).
    +                ERR_WARN_INT_ST: u1,
    +                ///  Data overrun interrupt. If this bit is set to 1, it indicates a data overrun interrupt is generated in the RX FIFO.
    +                OVERRUN_INT_ST: u1,
    +                reserved5: u1,
    +                ///  Error passive interrupt. If this bit is set to 1, it indicates the TWAI Controller is switched between error active status and error passive status due to the change of error counters.
    +                ERR_PASSIVE_INT_ST: u1,
    +                ///  Arbitration lost interrupt. If this bit is set to 1, it indicates an arbitration lost interrupt is generated.
    +                ARB_LOST_INT_ST: u1,
    +                ///  Error interrupt. If this bit is set to 1, it indicates an error is detected on the bus.
    +                BUS_ERR_INT_ST: u1,
    +                padding: u24,
    +            }),
    +            ///  Interrupt Enable Register
    +            INT_ENA: mmio.Mmio(packed struct(u32) {
    +                ///  Set this bit to 1 to enable receive interrupt.
    +                RX_INT_ENA: u1,
    +                ///  Set this bit to 1 to enable transmit interrupt.
    +                TX_INT_ENA: u1,
    +                ///  Set this bit to 1 to enable error warning interrupt.
    +                ERR_WARN_INT_ENA: u1,
    +                ///  Set this bit to 1 to enable data overrun interrupt.
    +                OVERRUN_INT_ENA: u1,
    +                reserved5: u1,
    +                ///  Set this bit to 1 to enable error passive interrupt.
    +                ERR_PASSIVE_INT_ENA: u1,
    +                ///  Set this bit to 1 to enable arbitration lost interrupt.
    +                ARB_LOST_INT_ENA: u1,
    +                ///  Set this bit to 1 to enable error interrupt.
    +                BUS_ERR_INT_ENA: u1,
    +                padding: u24,
    +            }),
    +            reserved24: [4]u8,
    +            ///  Bus Timing Register 0
    +            BUS_TIMING_0: mmio.Mmio(packed struct(u32) {
    +                ///  Baud Rate Prescaler, determines the frequency dividing ratio.
    +                BAUD_PRESC: u13,
    +                reserved14: u1,
    +                ///  Synchronization Jump Width (SJW), 1 \verb+~+ 14 Tq wide.
    +                SYNC_JUMP_WIDTH: u2,
    +                padding: u16,
    +            }),
    +            ///  Bus Timing Register 1
    +            BUS_TIMING_1: mmio.Mmio(packed struct(u32) {
    +                ///  The width of PBS1.
    +                TIME_SEG1: u4,
    +                ///  The width of PBS2.
    +                TIME_SEG2: u3,
    +                ///  The number of sample points. 0: the bus is sampled once; 1: the bus is sampled three times
    +                TIME_SAMP: u1,
    +                padding: u24,
    +            }),
    +            reserved44: [12]u8,
    +            ///  Arbitration Lost Capture Register
    +            ARB_LOST_CAP: mmio.Mmio(packed struct(u32) {
    +                ///  This register contains information about the bit position of lost arbitration.
    +                ARB_LOST_CAP: u5,
    +                padding: u27,
    +            }),
    +            ///  Error Code Capture Register
    +            ERR_CODE_CAP: mmio.Mmio(packed struct(u32) {
    +                ///  This register contains information about the location of errors, see Table 181 for details.
    +                ECC_SEGMENT: u5,
    +                ///  This register contains information about transmission direction of the node when error occurs. 1: Error occurs when receiving a message; 0: Error occurs when transmitting a message
    +                ECC_DIRECTION: u1,
    +                ///  This register contains information about error types: 00: bit error; 01: form error; 10: stuff error; 11: other type of error
    +                ECC_TYPE: u2,
    +                padding: u24,
    +            }),
    +            ///  Error Warning Limit Register
    +            ERR_WARNING_LIMIT: mmio.Mmio(packed struct(u32) {
    +                ///  Error warning threshold. In the case when any of a error counter value exceeds the threshold, or all the error counter values are below the threshold, an error warning interrupt will be triggered (given the enable signal is valid).
    +                ERR_WARNING_LIMIT: u8,
    +                padding: u24,
    +            }),
    +            ///  Receive Error Counter Register
    +            RX_ERR_CNT: mmio.Mmio(packed struct(u32) {
    +                ///  The RX error counter register, reflects value changes under reception status.
    +                RX_ERR_CNT: u8,
    +                padding: u24,
    +            }),
    +            ///  Transmit Error Counter Register
    +            TX_ERR_CNT: mmio.Mmio(packed struct(u32) {
    +                ///  The TX error counter register, reflects value changes under transmission status.
    +                TX_ERR_CNT: u8,
    +                padding: u24,
    +            }),
    +            ///  Data register 0
    +            DATA_0: mmio.Mmio(packed struct(u32) {
    +                ///  In reset mode, it is acceptance code register 0 with R/W Permission. In operation mode, it stores the 0th byte information of the data to be transmitted under operating mode.
    +                TX_BYTE_0: u8,
    +                padding: u24,
    +            }),
    +            ///  Data register 1
    +            DATA_1: mmio.Mmio(packed struct(u32) {
    +                ///  In reset mode, it is acceptance code register 1 with R/W Permission. In operation mode, it stores the 1st byte information of the data to be transmitted under operating mode.
    +                TX_BYTE_1: u8,
    +                padding: u24,
    +            }),
    +            ///  Data register 2
    +            DATA_2: mmio.Mmio(packed struct(u32) {
    +                ///  In reset mode, it is acceptance code register 2 with R/W Permission. In operation mode, it stores the 2nd byte information of the data to be transmitted under operating mode.
    +                TX_BYTE_2: u8,
    +                padding: u24,
    +            }),
    +            ///  Data register 3
    +            DATA_3: mmio.Mmio(packed struct(u32) {
    +                ///  In reset mode, it is acceptance code register 3 with R/W Permission. In operation mode, it stores the 3rd byte information of the data to be transmitted under operating mode.
    +                TX_BYTE_3: u8,
    +                padding: u24,
    +            }),
    +            ///  Data register 4
    +            DATA_4: mmio.Mmio(packed struct(u32) {
    +                ///  In reset mode, it is acceptance mask register 0 with R/W Permission. In operation mode, it stores the 4th byte information of the data to be transmitted under operating mode.
    +                TX_BYTE_4: u8,
    +                padding: u24,
    +            }),
    +            ///  Data register 5
    +            DATA_5: mmio.Mmio(packed struct(u32) {
    +                ///  In reset mode, it is acceptance mask register 1 with R/W Permission. In operation mode, it stores the 5th byte information of the data to be transmitted under operating mode.
    +                TX_BYTE_5: u8,
    +                padding: u24,
    +            }),
    +            ///  Data register 6
    +            DATA_6: mmio.Mmio(packed struct(u32) {
    +                ///  In reset mode, it is acceptance mask register 2 with R/W Permission. In operation mode, it stores the 6th byte information of the data to be transmitted under operating mode.
    +                TX_BYTE_6: u8,
    +                padding: u24,
    +            }),
    +            ///  Data register 7
    +            DATA_7: mmio.Mmio(packed struct(u32) {
    +                ///  In reset mode, it is acceptance mask register 3 with R/W Permission. In operation mode, it stores the 7th byte information of the data to be transmitted under operating mode.
    +                TX_BYTE_7: u8,
    +                padding: u24,
    +            }),
    +            ///  Data register 8
    +            DATA_8: mmio.Mmio(packed struct(u32) {
    +                ///  Stored the 8th byte information of the data to be transmitted under operating mode.
    +                TX_BYTE_8: u8,
    +                padding: u24,
    +            }),
    +            ///  Data register 9
    +            DATA_9: mmio.Mmio(packed struct(u32) {
    +                ///  Stored the 9th byte information of the data to be transmitted under operating mode.
    +                TX_BYTE_9: u8,
    +                padding: u24,
    +            }),
    +            ///  Data register 10
    +            DATA_10: mmio.Mmio(packed struct(u32) {
    +                ///  Stored the 10th byte information of the data to be transmitted under operating mode.
    +                TX_BYTE_10: u8,
    +                padding: u24,
    +            }),
    +            ///  Data register 11
    +            DATA_11: mmio.Mmio(packed struct(u32) {
    +                ///  Stored the 11th byte information of the data to be transmitted under operating mode.
    +                TX_BYTE_11: u8,
    +                padding: u24,
    +            }),
    +            ///  Data register 12
    +            DATA_12: mmio.Mmio(packed struct(u32) {
    +                ///  Stored the 12th byte information of the data to be transmitted under operating mode.
    +                TX_BYTE_12: u8,
    +                padding: u24,
    +            }),
    +            ///  Receive Message Counter Register
    +            RX_MESSAGE_CNT: mmio.Mmio(packed struct(u32) {
    +                ///  This register reflects the number of messages available within the RX FIFO.
    +                RX_MESSAGE_COUNTER: u7,
    +                padding: u25,
    +            }),
    +            reserved124: [4]u8,
    +            ///  Clock Divider register
    +            CLOCK_DIVIDER: mmio.Mmio(packed struct(u32) {
    +                ///  These bits are used to configure frequency dividing coefficients of the external CLKOUT pin.
    +                CD: u8,
    +                ///  This bit can be configured under reset mode. 1: Disable the external CLKOUT pin; 0: Enable the external CLKOUT pin
    +                CLOCK_OFF: u1,
    +                padding: u23,
    +            }),
    +        };
    +
    +        ///  UART (Universal Asynchronous Receiver-Transmitter) Controller
    +        pub const UART0 = extern struct {
    +            ///  FIFO data register
    +            FIFO: mmio.Mmio(packed struct(u32) {
    +                ///  UART 0 accesses FIFO via this register.
    +                RXFIFO_RD_BYTE: u8,
    +                padding: u24,
    +            }),
    +            ///  Raw interrupt status
    +            INT_RAW: mmio.Mmio(packed struct(u32) {
    +                ///  This interrupt raw bit turns to high level when receiver receives more data than what rxfifo_full_thrhd specifies.
    +                RXFIFO_FULL_INT_RAW: u1,
    +                ///  This interrupt raw bit turns to high level when the amount of data in Tx-FIFO is less than what txfifo_empty_thrhd specifies .
    +                TXFIFO_EMPTY_INT_RAW: u1,
    +                ///  This interrupt raw bit turns to high level when receiver detects a parity error in the data.
    +                PARITY_ERR_INT_RAW: u1,
    +                ///  This interrupt raw bit turns to high level when receiver detects a data frame error .
    +                FRM_ERR_INT_RAW: u1,
    +                ///  This interrupt raw bit turns to high level when receiver receives more data than the FIFO can store.
    +                RXFIFO_OVF_INT_RAW: u1,
    +                ///  This interrupt raw bit turns to high level when receiver detects the edge change of DSRn signal.
    +                DSR_CHG_INT_RAW: u1,
    +                ///  This interrupt raw bit turns to high level when receiver detects the edge change of CTSn signal.
    +                CTS_CHG_INT_RAW: u1,
    +                ///  This interrupt raw bit turns to high level when receiver detects a 0 after the stop bit.
    +                BRK_DET_INT_RAW: u1,
    +                ///  This interrupt raw bit turns to high level when receiver takes more time than rx_tout_thrhd to receive a byte.
    +                RXFIFO_TOUT_INT_RAW: u1,
    +                ///  This interrupt raw bit turns to high level when receiver recevies Xon char when uart_sw_flow_con_en is set to 1.
    +                SW_XON_INT_RAW: u1,
    +                ///  This interrupt raw bit turns to high level when receiver receives Xoff char when uart_sw_flow_con_en is set to 1.
    +                SW_XOFF_INT_RAW: u1,
    +                ///  This interrupt raw bit turns to high level when receiver detects a glitch in the middle of a start bit.
    +                GLITCH_DET_INT_RAW: u1,
    +                ///  This interrupt raw bit turns to high level when transmitter completes sending NULL characters, after all data in Tx-FIFO are sent.
    +                TX_BRK_DONE_INT_RAW: u1,
    +                ///  This interrupt raw bit turns to high level when transmitter has kept the shortest duration after sending the last data.
    +                TX_BRK_IDLE_DONE_INT_RAW: u1,
    +                ///  This interrupt raw bit turns to high level when transmitter has send out all data in FIFO.
    +                TX_DONE_INT_RAW: u1,
    +                ///  This interrupt raw bit turns to high level when receiver detects a parity error from the echo of transmitter in rs485 mode.
    +                RS485_PARITY_ERR_INT_RAW: u1,
    +                ///  This interrupt raw bit turns to high level when receiver detects a data frame error from the echo of transmitter in rs485 mode.
    +                RS485_FRM_ERR_INT_RAW: u1,
    +                ///  This interrupt raw bit turns to high level when detects a clash between transmitter and receiver in rs485 mode.
    +                RS485_CLASH_INT_RAW: u1,
    +                ///  This interrupt raw bit turns to high level when receiver detects the configured at_cmd char.
    +                AT_CMD_CHAR_DET_INT_RAW: u1,
    +                ///  This interrupt raw bit turns to high level when input rxd edge changes more times than what reg_active_threshold specifies in light sleeping mode.
    +                WAKEUP_INT_RAW: u1,
    +                padding: u12,
    +            }),
    +            ///  Masked interrupt status
    +            INT_ST: mmio.Mmio(packed struct(u32) {
    +                ///  This is the status bit for rxfifo_full_int_raw when rxfifo_full_int_ena is set to 1.
    +                RXFIFO_FULL_INT_ST: u1,
    +                ///  This is the status bit for txfifo_empty_int_raw when txfifo_empty_int_ena is set to 1.
    +                TXFIFO_EMPTY_INT_ST: u1,
    +                ///  This is the status bit for parity_err_int_raw when parity_err_int_ena is set to 1.
    +                PARITY_ERR_INT_ST: u1,
    +                ///  This is the status bit for frm_err_int_raw when frm_err_int_ena is set to 1.
    +                FRM_ERR_INT_ST: u1,
    +                ///  This is the status bit for rxfifo_ovf_int_raw when rxfifo_ovf_int_ena is set to 1.
    +                RXFIFO_OVF_INT_ST: u1,
    +                ///  This is the status bit for dsr_chg_int_raw when dsr_chg_int_ena is set to 1.
    +                DSR_CHG_INT_ST: u1,
    +                ///  This is the status bit for cts_chg_int_raw when cts_chg_int_ena is set to 1.
    +                CTS_CHG_INT_ST: u1,
    +                ///  This is the status bit for brk_det_int_raw when brk_det_int_ena is set to 1.
    +                BRK_DET_INT_ST: u1,
    +                ///  This is the status bit for rxfifo_tout_int_raw when rxfifo_tout_int_ena is set to 1.
    +                RXFIFO_TOUT_INT_ST: u1,
    +                ///  This is the status bit for sw_xon_int_raw when sw_xon_int_ena is set to 1.
    +                SW_XON_INT_ST: u1,
    +                ///  This is the status bit for sw_xoff_int_raw when sw_xoff_int_ena is set to 1.
    +                SW_XOFF_INT_ST: u1,
    +                ///  This is the status bit for glitch_det_int_raw when glitch_det_int_ena is set to 1.
    +                GLITCH_DET_INT_ST: u1,
    +                ///  This is the status bit for tx_brk_done_int_raw when tx_brk_done_int_ena is set to 1.
    +                TX_BRK_DONE_INT_ST: u1,
    +                ///  This is the stauts bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena is set to 1.
    +                TX_BRK_IDLE_DONE_INT_ST: u1,
    +                ///  This is the status bit for tx_done_int_raw when tx_done_int_ena is set to 1.
    +                TX_DONE_INT_ST: u1,
    +                ///  This is the status bit for rs485_parity_err_int_raw when rs485_parity_int_ena is set to 1.
    +                RS485_PARITY_ERR_INT_ST: u1,
    +                ///  This is the status bit for rs485_frm_err_int_raw when rs485_fm_err_int_ena is set to 1.
    +                RS485_FRM_ERR_INT_ST: u1,
    +                ///  This is the status bit for rs485_clash_int_raw when rs485_clash_int_ena is set to 1.
    +                RS485_CLASH_INT_ST: u1,
    +                ///  This is the status bit for at_cmd_det_int_raw when at_cmd_char_det_int_ena is set to 1.
    +                AT_CMD_CHAR_DET_INT_ST: u1,
    +                ///  This is the status bit for uart_wakeup_int_raw when uart_wakeup_int_ena is set to 1.
    +                WAKEUP_INT_ST: u1,
    +                padding: u12,
    +            }),
    +            ///  Interrupt enable bits
    +            INT_ENA: mmio.Mmio(packed struct(u32) {
    +                ///  This is the enable bit for rxfifo_full_int_st register.
    +                RXFIFO_FULL_INT_ENA: u1,
    +                ///  This is the enable bit for txfifo_empty_int_st register.
    +                TXFIFO_EMPTY_INT_ENA: u1,
    +                ///  This is the enable bit for parity_err_int_st register.
    +                PARITY_ERR_INT_ENA: u1,
    +                ///  This is the enable bit for frm_err_int_st register.
    +                FRM_ERR_INT_ENA: u1,
    +                ///  This is the enable bit for rxfifo_ovf_int_st register.
    +                RXFIFO_OVF_INT_ENA: u1,
    +                ///  This is the enable bit for dsr_chg_int_st register.
    +                DSR_CHG_INT_ENA: u1,
    +                ///  This is the enable bit for cts_chg_int_st register.
    +                CTS_CHG_INT_ENA: u1,
    +                ///  This is the enable bit for brk_det_int_st register.
    +                BRK_DET_INT_ENA: u1,
    +                ///  This is the enable bit for rxfifo_tout_int_st register.
    +                RXFIFO_TOUT_INT_ENA: u1,
    +                ///  This is the enable bit for sw_xon_int_st register.
    +                SW_XON_INT_ENA: u1,
    +                ///  This is the enable bit for sw_xoff_int_st register.
    +                SW_XOFF_INT_ENA: u1,
    +                ///  This is the enable bit for glitch_det_int_st register.
    +                GLITCH_DET_INT_ENA: u1,
    +                ///  This is the enable bit for tx_brk_done_int_st register.
    +                TX_BRK_DONE_INT_ENA: u1,
    +                ///  This is the enable bit for tx_brk_idle_done_int_st register.
    +                TX_BRK_IDLE_DONE_INT_ENA: u1,
    +                ///  This is the enable bit for tx_done_int_st register.
    +                TX_DONE_INT_ENA: u1,
    +                ///  This is the enable bit for rs485_parity_err_int_st register.
    +                RS485_PARITY_ERR_INT_ENA: u1,
    +                ///  This is the enable bit for rs485_parity_err_int_st register.
    +                RS485_FRM_ERR_INT_ENA: u1,
    +                ///  This is the enable bit for rs485_clash_int_st register.
    +                RS485_CLASH_INT_ENA: u1,
    +                ///  This is the enable bit for at_cmd_char_det_int_st register.
    +                AT_CMD_CHAR_DET_INT_ENA: u1,
    +                ///  This is the enable bit for uart_wakeup_int_st register.
    +                WAKEUP_INT_ENA: u1,
    +                padding: u12,
    +            }),
    +            ///  Interrupt clear bits
    +            INT_CLR: mmio.Mmio(packed struct(u32) {
    +                ///  Set this bit to clear the rxfifo_full_int_raw interrupt.
    +                RXFIFO_FULL_INT_CLR: u1,
    +                ///  Set this bit to clear txfifo_empty_int_raw interrupt.
    +                TXFIFO_EMPTY_INT_CLR: u1,
    +                ///  Set this bit to clear parity_err_int_raw interrupt.
    +                PARITY_ERR_INT_CLR: u1,
    +                ///  Set this bit to clear frm_err_int_raw interrupt.
    +                FRM_ERR_INT_CLR: u1,
    +                ///  Set this bit to clear rxfifo_ovf_int_raw interrupt.
    +                RXFIFO_OVF_INT_CLR: u1,
    +                ///  Set this bit to clear the dsr_chg_int_raw interrupt.
    +                DSR_CHG_INT_CLR: u1,
    +                ///  Set this bit to clear the cts_chg_int_raw interrupt.
    +                CTS_CHG_INT_CLR: u1,
    +                ///  Set this bit to clear the brk_det_int_raw interrupt.
    +                BRK_DET_INT_CLR: u1,
    +                ///  Set this bit to clear the rxfifo_tout_int_raw interrupt.
    +                RXFIFO_TOUT_INT_CLR: u1,
    +                ///  Set this bit to clear the sw_xon_int_raw interrupt.
    +                SW_XON_INT_CLR: u1,
    +                ///  Set this bit to clear the sw_xoff_int_raw interrupt.
    +                SW_XOFF_INT_CLR: u1,
    +                ///  Set this bit to clear the glitch_det_int_raw interrupt.
    +                GLITCH_DET_INT_CLR: u1,
    +                ///  Set this bit to clear the tx_brk_done_int_raw interrupt..
    +                TX_BRK_DONE_INT_CLR: u1,
    +                ///  Set this bit to clear the tx_brk_idle_done_int_raw interrupt.
    +                TX_BRK_IDLE_DONE_INT_CLR: u1,
    +                ///  Set this bit to clear the tx_done_int_raw interrupt.
    +                TX_DONE_INT_CLR: u1,
    +                ///  Set this bit to clear the rs485_parity_err_int_raw interrupt.
    +                RS485_PARITY_ERR_INT_CLR: u1,
    +                ///  Set this bit to clear the rs485_frm_err_int_raw interrupt.
    +                RS485_FRM_ERR_INT_CLR: u1,
    +                ///  Set this bit to clear the rs485_clash_int_raw interrupt.
    +                RS485_CLASH_INT_CLR: u1,
    +                ///  Set this bit to clear the at_cmd_char_det_int_raw interrupt.
    +                AT_CMD_CHAR_DET_INT_CLR: u1,
    +                ///  Set this bit to clear the uart_wakeup_int_raw interrupt.
    +                WAKEUP_INT_CLR: u1,
    +                padding: u12,
    +            }),
    +            ///  Clock divider configuration
    +            CLKDIV: mmio.Mmio(packed struct(u32) {
    +                ///  The integral part of the frequency divider factor.
    +                CLKDIV: u12,
    +                reserved20: u8,
    +                ///  The decimal part of the frequency divider factor.
    +                FRAG: u4,
    +                padding: u8,
    +            }),
    +            ///  Rx Filter configuration
    +            RX_FILT: mmio.Mmio(packed struct(u32) {
    +                ///  when input pulse width is lower than this value, the pulse is ignored.
    +                GLITCH_FILT: u8,
    +                ///  Set this bit to enable Rx signal filter.
    +                GLITCH_FILT_EN: u1,
    +                padding: u23,
    +            }),
    +            ///  UART status register
    +            STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  Stores the byte number of valid data in Rx-FIFO.
    +                RXFIFO_CNT: u10,
    +                reserved13: u3,
    +                ///  The register represent the level value of the internal uart dsr signal.
    +                DSRN: u1,
    +                ///  This register represent the level value of the internal uart cts signal.
    +                CTSN: u1,
    +                ///  This register represent the level value of the internal uart rxd signal.
    +                RXD: u1,
    +                ///  Stores the byte number of data in Tx-FIFO.
    +                TXFIFO_CNT: u10,
    +                reserved29: u3,
    +                ///  This bit represents the level of the internal uart dtr signal.
    +                DTRN: u1,
    +                ///  This bit represents the level of the internal uart rts signal.
    +                RTSN: u1,
    +                ///  This bit represents the level of the internal uart txd signal.
    +                TXD: u1,
    +            }),
    +            ///  a
    +            CONF0: mmio.Mmio(packed struct(u32) {
    +                ///  This register is used to configure the parity check mode.
    +                PARITY: u1,
    +                ///  Set this bit to enable uart parity check.
    +                PARITY_EN: u1,
    +                ///  This register is used to set the length of data.
    +                BIT_NUM: u2,
    +                ///  This register is used to set the length of stop bit.
    +                STOP_BIT_NUM: u2,
    +                ///  This register is used to configure the software rts signal which is used in software flow control.
    +                SW_RTS: u1,
    +                ///  This register is used to configure the software dtr signal which is used in software flow control.
    +                SW_DTR: u1,
    +                ///  Set this bit to enbale transmitter to send NULL when the process of sending data is done.
    +                TXD_BRK: u1,
    +                ///  Set this bit to enable IrDA loopback mode.
    +                IRDA_DPLX: u1,
    +                ///  This is the start enable bit for IrDA transmitter.
    +                IRDA_TX_EN: u1,
    +                ///  1'h1: The IrDA transmitter's 11th bit is the same as 10th bit. 1'h0: Set IrDA transmitter's 11th bit to 0.
    +                IRDA_WCTL: u1,
    +                ///  Set this bit to invert the level of IrDA transmitter.
    +                IRDA_TX_INV: u1,
    +                ///  Set this bit to invert the level of IrDA receiver.
    +                IRDA_RX_INV: u1,
    +                ///  Set this bit to enable uart loopback test mode.
    +                LOOPBACK: u1,
    +                ///  Set this bit to enable flow control function for transmitter.
    +                TX_FLOW_EN: u1,
    +                ///  Set this bit to enable IrDA protocol.
    +                IRDA_EN: u1,
    +                ///  Set this bit to reset the uart receive-FIFO.
    +                RXFIFO_RST: u1,
    +                ///  Set this bit to reset the uart transmit-FIFO.
    +                TXFIFO_RST: u1,
    +                ///  Set this bit to inverse the level value of uart rxd signal.
    +                RXD_INV: u1,
    +                ///  Set this bit to inverse the level value of uart cts signal.
    +                CTS_INV: u1,
    +                ///  Set this bit to inverse the level value of uart dsr signal.
    +                DSR_INV: u1,
    +                ///  Set this bit to inverse the level value of uart txd signal.
    +                TXD_INV: u1,
    +                ///  Set this bit to inverse the level value of uart rts signal.
    +                RTS_INV: u1,
    +                ///  Set this bit to inverse the level value of uart dtr signal.
    +                DTR_INV: u1,
    +                ///  1'h1: Force clock on for register. 1'h0: Support clock only when application writes registers.
    +                CLK_EN: u1,
    +                ///  1'h1: Receiver stops storing data into FIFO when data is wrong. 1'h0: Receiver stores the data even if the received data is wrong.
    +                ERR_WR_MASK: u1,
    +                ///  This is the enable bit for detecting baudrate.
    +                AUTOBAUD_EN: u1,
    +                ///  UART memory clock gate enable signal.
    +                MEM_CLK_EN: u1,
    +                padding: u3,
    +            }),
    +            ///  Configuration register 1
    +            CONF1: mmio.Mmio(packed struct(u32) {
    +                ///  It will produce rxfifo_full_int interrupt when receiver receives more data than this register value.
    +                RXFIFO_FULL_THRHD: u9,
    +                ///  It will produce txfifo_empty_int interrupt when the data amount in Tx-FIFO is less than this register value.
    +                TXFIFO_EMPTY_THRHD: u9,
    +                ///  Disable UART Rx data overflow detect.
    +                DIS_RX_DAT_OVF: u1,
    +                ///  Set this bit to stop accumulating idle_cnt when hardware flow control works.
    +                RX_TOUT_FLOW_DIS: u1,
    +                ///  This is the flow enable bit for UART receiver.
    +                RX_FLOW_EN: u1,
    +                ///  This is the enble bit for uart receiver's timeout function.
    +                RX_TOUT_EN: u1,
    +                padding: u10,
    +            }),
    +            ///  Autobaud minimum low pulse duration register
    +            LOWPULSE: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the value of the minimum duration time of the low level pulse. It is used in baud rate-detect process.
    +                MIN_CNT: u12,
    +                padding: u20,
    +            }),
    +            ///  Autobaud minimum high pulse duration register
    +            HIGHPULSE: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the value of the maxinum duration time for the high level pulse. It is used in baud rate-detect process.
    +                MIN_CNT: u12,
    +                padding: u20,
    +            }),
    +            ///  Autobaud edge change count register
    +            RXD_CNT: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the count of rxd edge change. It is used in baud rate-detect process.
    +                RXD_EDGE_CNT: u10,
    +                padding: u22,
    +            }),
    +            ///  Software flow-control configuration
    +            FLOW_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  Set this bit to enable software flow control. It is used with register sw_xon or sw_xoff.
    +                SW_FLOW_CON_EN: u1,
    +                ///  Set this bit to remove flow control char from the received data.
    +                XONOFF_DEL: u1,
    +                ///  Set this bit to enable the transmitter to go on sending data.
    +                FORCE_XON: u1,
    +                ///  Set this bit to stop the transmitter from sending data.
    +                FORCE_XOFF: u1,
    +                ///  Set this bit to send Xon char. It is cleared by hardware automatically.
    +                SEND_XON: u1,
    +                ///  Set this bit to send Xoff char. It is cleared by hardware automatically.
    +                SEND_XOFF: u1,
    +                padding: u26,
    +            }),
    +            ///  Sleep-mode configuration
    +            SLEEP_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  The uart is activated from light sleeping mode when the input rxd edge changes more times than this register value.
    +                ACTIVE_THRESHOLD: u10,
    +                padding: u22,
    +            }),
    +            ///  Software flow-control character configuration
    +            SWFC_CONF0: mmio.Mmio(packed struct(u32) {
    +                ///  When the data amount in Rx-FIFO is more than this register value with uart_sw_flow_con_en set to 1, it will send a Xoff char.
    +                XOFF_THRESHOLD: u9,
    +                ///  This register stores the Xoff flow control char.
    +                XOFF_CHAR: u8,
    +                padding: u15,
    +            }),
    +            ///  Software flow-control character configuration
    +            SWFC_CONF1: mmio.Mmio(packed struct(u32) {
    +                ///  When the data amount in Rx-FIFO is less than this register value with uart_sw_flow_con_en set to 1, it will send a Xon char.
    +                XON_THRESHOLD: u9,
    +                ///  This register stores the Xon flow control char.
    +                XON_CHAR: u8,
    +                padding: u15,
    +            }),
    +            ///  Tx Break character configuration
    +            TXBRK_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  This register is used to configure the number of 0 to be sent after the process of sending data is done. It is active when txd_brk is set to 1.
    +                TX_BRK_NUM: u8,
    +                padding: u24,
    +            }),
    +            ///  Frame-end idle configuration
    +            IDLE_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  It will produce frame end signal when receiver takes more time to receive one byte data than this register value.
    +                RX_IDLE_THRHD: u10,
    +                ///  This register is used to configure the duration time between transfers.
    +                TX_IDLE_NUM: u10,
    +                padding: u12,
    +            }),
    +            ///  RS485 mode configuration
    +            RS485_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  Set this bit to choose the rs485 mode.
    +                RS485_EN: u1,
    +                ///  Set this bit to delay the stop bit by 1 bit.
    +                DL0_EN: u1,
    +                ///  Set this bit to delay the stop bit by 1 bit.
    +                DL1_EN: u1,
    +                ///  Set this bit to enable receiver could receive data when the transmitter is transmitting data in rs485 mode.
    +                RS485TX_RX_EN: u1,
    +                ///  1'h1: enable rs485 transmitter to send data when rs485 receiver line is busy.
    +                RS485RXBY_TX_EN: u1,
    +                ///  This register is used to delay the receiver's internal data signal.
    +                RS485_RX_DLY_NUM: u1,
    +                ///  This register is used to delay the transmitter's internal data signal.
    +                RS485_TX_DLY_NUM: u4,
    +                padding: u22,
    +            }),
    +            ///  Pre-sequence timing configuration
    +            AT_CMD_PRECNT: mmio.Mmio(packed struct(u32) {
    +                ///  This register is used to configure the idle duration time before the first at_cmd is received by receiver.
    +                PRE_IDLE_NUM: u16,
    +                padding: u16,
    +            }),
    +            ///  Post-sequence timing configuration
    +            AT_CMD_POSTCNT: mmio.Mmio(packed struct(u32) {
    +                ///  This register is used to configure the duration time between the last at_cmd and the next data.
    +                POST_IDLE_NUM: u16,
    +                padding: u16,
    +            }),
    +            ///  Timeout configuration
    +            AT_CMD_GAPTOUT: mmio.Mmio(packed struct(u32) {
    +                ///  This register is used to configure the duration time between the at_cmd chars.
    +                RX_GAP_TOUT: u16,
    +                padding: u16,
    +            }),
    +            ///  AT escape sequence detection configuration
    +            AT_CMD_CHAR: mmio.Mmio(packed struct(u32) {
    +                ///  This register is used to configure the content of at_cmd char.
    +                AT_CMD_CHAR: u8,
    +                ///  This register is used to configure the num of continuous at_cmd chars received by receiver.
    +                CHAR_NUM: u8,
    +                padding: u16,
    +            }),
    +            ///  UART threshold and allocation configuration
    +            MEM_CONF: mmio.Mmio(packed struct(u32) {
    +                reserved1: u1,
    +                ///  This register is used to configure the amount of mem allocated for receive-FIFO. The default number is 128 bytes.
    +                RX_SIZE: u3,
    +                ///  This register is used to configure the amount of mem allocated for transmit-FIFO. The default number is 128 bytes.
    +                TX_SIZE: u3,
    +                ///  This register is used to configure the maximum amount of data that can be received when hardware flow control works.
    +                RX_FLOW_THRHD: u9,
    +                ///  This register is used to configure the threshold time that receiver takes to receive one byte. The rxfifo_tout_int interrupt will be trigger when the receiver takes more time to receive one byte with rx_tout_en set to 1.
    +                RX_TOUT_THRHD: u10,
    +                ///  Set this bit to force power down UART memory.
    +                MEM_FORCE_PD: u1,
    +                ///  Set this bit to force power up UART memory.
    +                MEM_FORCE_PU: u1,
    +                padding: u4,
    +            }),
    +            ///  Tx-FIFO write and read offset address.
    +            MEM_TX_STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the offset address in Tx-FIFO when software writes Tx-FIFO via APB.
    +                APB_TX_WADDR: u10,
    +                reserved11: u1,
    +                ///  This register stores the offset address in Tx-FIFO when Tx-FSM reads data via Tx-FIFO_Ctrl.
    +                TX_RADDR: u10,
    +                padding: u11,
    +            }),
    +            ///  Rx-FIFO write and read offset address.
    +            MEM_RX_STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the offset address in RX-FIFO when software reads data from Rx-FIFO via APB. UART0 is 10'h100. UART1 is 10'h180.
    +                APB_RX_RADDR: u10,
    +                reserved11: u1,
    +                ///  This register stores the offset address in Rx-FIFO when Rx-FIFO_Ctrl writes Rx-FIFO. UART0 is 10'h100. UART1 is 10'h180.
    +                RX_WADDR: u10,
    +                padding: u11,
    +            }),
    +            ///  UART transmit and receive status.
    +            FSM_STATUS: mmio.Mmio(packed struct(u32) {
    +                ///  This is the status register of receiver.
    +                ST_URX_OUT: u4,
    +                ///  This is the status register of transmitter.
    +                ST_UTX_OUT: u4,
    +                padding: u24,
    +            }),
    +            ///  Autobaud high pulse register
    +            POSPULSE: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the minimal input clock count between two positive edges. It is used in boudrate-detect process.
    +                POSEDGE_MIN_CNT: u12,
    +                padding: u20,
    +            }),
    +            ///  Autobaud low pulse register
    +            NEGPULSE: mmio.Mmio(packed struct(u32) {
    +                ///  This register stores the minimal input clock count between two negative edges. It is used in boudrate-detect process.
    +                NEGEDGE_MIN_CNT: u12,
    +                padding: u20,
    +            }),
    +            ///  UART core clock configuration
    +            CLK_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  The denominator of the frequency divider factor.
    +                SCLK_DIV_B: u6,
    +                ///  The numerator of the frequency divider factor.
    +                SCLK_DIV_A: u6,
    +                ///  The integral part of the frequency divider factor.
    +                SCLK_DIV_NUM: u8,
    +                ///  UART clock source select. 1: 80Mhz, 2: 8Mhz, 3: XTAL.
    +                SCLK_SEL: u2,
    +                ///  Set this bit to enable UART Tx/Rx clock.
    +                SCLK_EN: u1,
    +                ///  Write 1 then write 0 to this bit, reset UART Tx/Rx.
    +                RST_CORE: u1,
    +                ///  Set this bit to enable UART Tx clock.
    +                TX_SCLK_EN: u1,
    +                ///  Set this bit to enable UART Rx clock.
    +                RX_SCLK_EN: u1,
    +                ///  Write 1 then write 0 to this bit, reset UART Tx.
    +                TX_RST_CORE: u1,
    +                ///  Write 1 then write 0 to this bit, reset UART Rx.
    +                RX_RST_CORE: u1,
    +                padding: u4,
    +            }),
    +            ///  UART Version register
    +            DATE: mmio.Mmio(packed struct(u32) {
    +                ///  This is the version register.
    +                DATE: u32,
    +            }),
    +            ///  UART ID register
    +            ID: mmio.Mmio(packed struct(u32) {
    +                ///  This register is used to configure the uart_id.
    +                ID: u30,
    +                ///  This bit used to select synchronize mode. 1: Registers are auto synchronized into UART Core clock and UART core should be keep the same with APB clock. 0: After configure registers, software needs to write 1 to UART_REG_UPDATE to synchronize registers.
    +                HIGH_SPEED: u1,
    +                ///  Software write 1 would synchronize registers into UART Core clock domain and would be cleared by hardware after synchronization is done.
    +                REG_UPDATE: u1,
    +            }),
    +        };
    +
    +        ///  Full-speed USB Serial/JTAG Controller
    +        pub const USB_DEVICE = extern struct {
    +            ///  USB_DEVICE_EP1_REG.
    +            EP1: mmio.Mmio(packed struct(u32) {
    +                ///  Write and read byte data to/from UART Tx/Rx FIFO through this field. When USB_DEVICE_SERIAL_IN_EMPTY_INT is set, then user can write data (up to 64 bytes) into UART Tx FIFO. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is set, user can check USB_DEVICE_OUT_EP1_WR_ADDR USB_DEVICE_OUT_EP0_RD_ADDR to know how many data is received, then read data from UART Rx FIFO.
    +                RDWR_BYTE: u8,
    +                padding: u24,
    +            }),
    +            ///  USB_DEVICE_EP1_CONF_REG.
    +            EP1_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  Set this bit to indicate writing byte data to UART Tx FIFO is done.
    +                WR_DONE: u1,
    +                ///  1'b1: Indicate UART Tx FIFO is not full and can write data into in. After writing USB_DEVICE_WR_DONE, this bit would be 0 until data in UART Tx FIFO is read by USB Host.
    +                SERIAL_IN_EP_DATA_FREE: u1,
    +                ///  1'b1: Indicate there is data in UART Rx FIFO.
    +                SERIAL_OUT_EP_DATA_AVAIL: u1,
    +                padding: u29,
    +            }),
    +            ///  USB_DEVICE_INT_RAW_REG.
    +            INT_RAW: mmio.Mmio(packed struct(u32) {
    +                ///  The raw interrupt bit turns to high level when flush cmd is received for IN endpoint 2 of JTAG.
    +                JTAG_IN_FLUSH_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when SOF frame is received.
    +                SOF_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when Serial Port OUT Endpoint received one packet.
    +                SERIAL_OUT_RECV_PKT_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when Serial Port IN Endpoint is empty.
    +                SERIAL_IN_EMPTY_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when pid error is detected.
    +                PID_ERR_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when CRC5 error is detected.
    +                CRC5_ERR_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when CRC16 error is detected.
    +                CRC16_ERR_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when stuff error is detected.
    +                STUFF_ERR_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when IN token for IN endpoint 1 is received.
    +                IN_TOKEN_REC_IN_EP1_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when usb bus reset is detected.
    +                USB_BUS_RESET_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when OUT endpoint 1 received packet with zero palyload.
    +                OUT_EP1_ZERO_PAYLOAD_INT_RAW: u1,
    +                ///  The raw interrupt bit turns to high level when OUT endpoint 2 received packet with zero palyload.
    +                OUT_EP2_ZERO_PAYLOAD_INT_RAW: u1,
    +                padding: u20,
    +            }),
    +            ///  USB_DEVICE_INT_ST_REG.
    +            INT_ST: mmio.Mmio(packed struct(u32) {
    +                ///  The raw interrupt status bit for the USB_DEVICE_JTAG_IN_FLUSH_INT interrupt.
    +                JTAG_IN_FLUSH_INT_ST: u1,
    +                ///  The raw interrupt status bit for the USB_DEVICE_SOF_INT interrupt.
    +                SOF_INT_ST: u1,
    +                ///  The raw interrupt status bit for the USB_DEVICE_SERIAL_OUT_RECV_PKT_INT interrupt.
    +                SERIAL_OUT_RECV_PKT_INT_ST: u1,
    +                ///  The raw interrupt status bit for the USB_DEVICE_SERIAL_IN_EMPTY_INT interrupt.
    +                SERIAL_IN_EMPTY_INT_ST: u1,
    +                ///  The raw interrupt status bit for the USB_DEVICE_PID_ERR_INT interrupt.
    +                PID_ERR_INT_ST: u1,
    +                ///  The raw interrupt status bit for the USB_DEVICE_CRC5_ERR_INT interrupt.
    +                CRC5_ERR_INT_ST: u1,
    +                ///  The raw interrupt status bit for the USB_DEVICE_CRC16_ERR_INT interrupt.
    +                CRC16_ERR_INT_ST: u1,
    +                ///  The raw interrupt status bit for the USB_DEVICE_STUFF_ERR_INT interrupt.
    +                STUFF_ERR_INT_ST: u1,
    +                ///  The raw interrupt status bit for the USB_DEVICE_IN_TOKEN_REC_IN_EP1_INT interrupt.
    +                IN_TOKEN_REC_IN_EP1_INT_ST: u1,
    +                ///  The raw interrupt status bit for the USB_DEVICE_USB_BUS_RESET_INT interrupt.
    +                USB_BUS_RESET_INT_ST: u1,
    +                ///  The raw interrupt status bit for the USB_DEVICE_OUT_EP1_ZERO_PAYLOAD_INT interrupt.
    +                OUT_EP1_ZERO_PAYLOAD_INT_ST: u1,
    +                ///  The raw interrupt status bit for the USB_DEVICE_OUT_EP2_ZERO_PAYLOAD_INT interrupt.
    +                OUT_EP2_ZERO_PAYLOAD_INT_ST: u1,
    +                padding: u20,
    +            }),
    +            ///  USB_DEVICE_INT_ENA_REG.
    +            INT_ENA: mmio.Mmio(packed struct(u32) {
    +                ///  The interrupt enable bit for the USB_DEVICE_JTAG_IN_FLUSH_INT interrupt.
    +                JTAG_IN_FLUSH_INT_ENA: u1,
    +                ///  The interrupt enable bit for the USB_DEVICE_SOF_INT interrupt.
    +                SOF_INT_ENA: u1,
    +                ///  The interrupt enable bit for the USB_DEVICE_SERIAL_OUT_RECV_PKT_INT interrupt.
    +                SERIAL_OUT_RECV_PKT_INT_ENA: u1,
    +                ///  The interrupt enable bit for the USB_DEVICE_SERIAL_IN_EMPTY_INT interrupt.
    +                SERIAL_IN_EMPTY_INT_ENA: u1,
    +                ///  The interrupt enable bit for the USB_DEVICE_PID_ERR_INT interrupt.
    +                PID_ERR_INT_ENA: u1,
    +                ///  The interrupt enable bit for the USB_DEVICE_CRC5_ERR_INT interrupt.
    +                CRC5_ERR_INT_ENA: u1,
    +                ///  The interrupt enable bit for the USB_DEVICE_CRC16_ERR_INT interrupt.
    +                CRC16_ERR_INT_ENA: u1,
    +                ///  The interrupt enable bit for the USB_DEVICE_STUFF_ERR_INT interrupt.
    +                STUFF_ERR_INT_ENA: u1,
    +                ///  The interrupt enable bit for the USB_DEVICE_IN_TOKEN_REC_IN_EP1_INT interrupt.
    +                IN_TOKEN_REC_IN_EP1_INT_ENA: u1,
    +                ///  The interrupt enable bit for the USB_DEVICE_USB_BUS_RESET_INT interrupt.
    +                USB_BUS_RESET_INT_ENA: u1,
    +                ///  The interrupt enable bit for the USB_DEVICE_OUT_EP1_ZERO_PAYLOAD_INT interrupt.
    +                OUT_EP1_ZERO_PAYLOAD_INT_ENA: u1,
    +                ///  The interrupt enable bit for the USB_DEVICE_OUT_EP2_ZERO_PAYLOAD_INT interrupt.
    +                OUT_EP2_ZERO_PAYLOAD_INT_ENA: u1,
    +                padding: u20,
    +            }),
    +            ///  USB_DEVICE_INT_CLR_REG.
    +            INT_CLR: mmio.Mmio(packed struct(u32) {
    +                ///  Set this bit to clear the USB_DEVICE_JTAG_IN_FLUSH_INT interrupt.
    +                JTAG_IN_FLUSH_INT_CLR: u1,
    +                ///  Set this bit to clear the USB_DEVICE_JTAG_SOF_INT interrupt.
    +                SOF_INT_CLR: u1,
    +                ///  Set this bit to clear the USB_DEVICE_SERIAL_OUT_RECV_PKT_INT interrupt.
    +                SERIAL_OUT_RECV_PKT_INT_CLR: u1,
    +                ///  Set this bit to clear the USB_DEVICE_SERIAL_IN_EMPTY_INT interrupt.
    +                SERIAL_IN_EMPTY_INT_CLR: u1,
    +                ///  Set this bit to clear the USB_DEVICE_PID_ERR_INT interrupt.
    +                PID_ERR_INT_CLR: u1,
    +                ///  Set this bit to clear the USB_DEVICE_CRC5_ERR_INT interrupt.
    +                CRC5_ERR_INT_CLR: u1,
    +                ///  Set this bit to clear the USB_DEVICE_CRC16_ERR_INT interrupt.
    +                CRC16_ERR_INT_CLR: u1,
    +                ///  Set this bit to clear the USB_DEVICE_STUFF_ERR_INT interrupt.
    +                STUFF_ERR_INT_CLR: u1,
    +                ///  Set this bit to clear the USB_DEVICE_IN_TOKEN_IN_EP1_INT interrupt.
    +                IN_TOKEN_REC_IN_EP1_INT_CLR: u1,
    +                ///  Set this bit to clear the USB_DEVICE_USB_BUS_RESET_INT interrupt.
    +                USB_BUS_RESET_INT_CLR: u1,
    +                ///  Set this bit to clear the USB_DEVICE_OUT_EP1_ZERO_PAYLOAD_INT interrupt.
    +                OUT_EP1_ZERO_PAYLOAD_INT_CLR: u1,
    +                ///  Set this bit to clear the USB_DEVICE_OUT_EP2_ZERO_PAYLOAD_INT interrupt.
    +                OUT_EP2_ZERO_PAYLOAD_INT_CLR: u1,
    +                padding: u20,
    +            }),
    +            ///  USB_DEVICE_CONF0_REG.
    +            CONF0: mmio.Mmio(packed struct(u32) {
    +                ///  Select internal/external PHY
    +                PHY_SEL: u1,
    +                ///  Enable software control USB D+ D- exchange
    +                EXCHG_PINS_OVERRIDE: u1,
    +                ///  USB D+ D- exchange
    +                EXCHG_PINS: u1,
    +                ///  Control single-end input high threshold,1.76V to 2V, step 80mV
    +                VREFH: u2,
    +                ///  Control single-end input low threshold,0.8V to 1.04V, step 80mV
    +                VREFL: u2,
    +                ///  Enable software control input threshold
    +                VREF_OVERRIDE: u1,
    +                ///  Enable software control USB D+ D- pullup pulldown
    +                PAD_PULL_OVERRIDE: u1,
    +                ///  Control USB D+ pull up.
    +                DP_PULLUP: u1,
    +                ///  Control USB D+ pull down.
    +                DP_PULLDOWN: u1,
    +                ///  Control USB D- pull up.
    +                DM_PULLUP: u1,
    +                ///  Control USB D- pull down.
    +                DM_PULLDOWN: u1,
    +                ///  Control pull up value.
    +                PULLUP_VALUE: u1,
    +                ///  Enable USB pad function.
    +                USB_PAD_ENABLE: u1,
    +                padding: u17,
    +            }),
    +            ///  USB_DEVICE_TEST_REG.
    +            TEST: mmio.Mmio(packed struct(u32) {
    +                ///  Enable test of the USB pad
    +                ENABLE: u1,
    +                ///  USB pad oen in test
    +                USB_OE: u1,
    +                ///  USB D+ tx value in test
    +                TX_DP: u1,
    +                ///  USB D- tx value in test
    +                TX_DM: u1,
    +                padding: u28,
    +            }),
    +            ///  USB_DEVICE_JFIFO_ST_REG.
    +            JFIFO_ST: mmio.Mmio(packed struct(u32) {
    +                ///  JTAT in fifo counter.
    +                IN_FIFO_CNT: u2,
    +                ///  1: JTAG in fifo is empty.
    +                IN_FIFO_EMPTY: u1,
    +                ///  1: JTAG in fifo is full.
    +                IN_FIFO_FULL: u1,
    +                ///  JTAT out fifo counter.
    +                OUT_FIFO_CNT: u2,
    +                ///  1: JTAG out fifo is empty.
    +                OUT_FIFO_EMPTY: u1,
    +                ///  1: JTAG out fifo is full.
    +                OUT_FIFO_FULL: u1,
    +                ///  Write 1 to reset JTAG in fifo.
    +                IN_FIFO_RESET: u1,
    +                ///  Write 1 to reset JTAG out fifo.
    +                OUT_FIFO_RESET: u1,
    +                padding: u22,
    +            }),
    +            ///  USB_DEVICE_FRAM_NUM_REG.
    +            FRAM_NUM: mmio.Mmio(packed struct(u32) {
    +                ///  Frame index of received SOF frame.
    +                SOF_FRAME_INDEX: u11,
    +                padding: u21,
    +            }),
    +            ///  USB_DEVICE_IN_EP0_ST_REG.
    +            IN_EP0_ST: mmio.Mmio(packed struct(u32) {
    +                ///  State of IN Endpoint 0.
    +                IN_EP0_STATE: u2,
    +                ///  Write data address of IN endpoint 0.
    +                IN_EP0_WR_ADDR: u7,
    +                ///  Read data address of IN endpoint 0.
    +                IN_EP0_RD_ADDR: u7,
    +                padding: u16,
    +            }),
    +            ///  USB_DEVICE_IN_EP1_ST_REG.
    +            IN_EP1_ST: mmio.Mmio(packed struct(u32) {
    +                ///  State of IN Endpoint 1.
    +                IN_EP1_STATE: u2,
    +                ///  Write data address of IN endpoint 1.
    +                IN_EP1_WR_ADDR: u7,
    +                ///  Read data address of IN endpoint 1.
    +                IN_EP1_RD_ADDR: u7,
    +                padding: u16,
    +            }),
    +            ///  USB_DEVICE_IN_EP2_ST_REG.
    +            IN_EP2_ST: mmio.Mmio(packed struct(u32) {
    +                ///  State of IN Endpoint 2.
    +                IN_EP2_STATE: u2,
    +                ///  Write data address of IN endpoint 2.
    +                IN_EP2_WR_ADDR: u7,
    +                ///  Read data address of IN endpoint 2.
    +                IN_EP2_RD_ADDR: u7,
    +                padding: u16,
    +            }),
    +            ///  USB_DEVICE_IN_EP3_ST_REG.
    +            IN_EP3_ST: mmio.Mmio(packed struct(u32) {
    +                ///  State of IN Endpoint 3.
    +                IN_EP3_STATE: u2,
    +                ///  Write data address of IN endpoint 3.
    +                IN_EP3_WR_ADDR: u7,
    +                ///  Read data address of IN endpoint 3.
    +                IN_EP3_RD_ADDR: u7,
    +                padding: u16,
    +            }),
    +            ///  USB_DEVICE_OUT_EP0_ST_REG.
    +            OUT_EP0_ST: mmio.Mmio(packed struct(u32) {
    +                ///  State of OUT Endpoint 0.
    +                OUT_EP0_STATE: u2,
    +                ///  Write data address of OUT endpoint 0. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is detected, there are USB_DEVICE_OUT_EP0_WR_ADDR-2 bytes data in OUT EP0.
    +                OUT_EP0_WR_ADDR: u7,
    +                ///  Read data address of OUT endpoint 0.
    +                OUT_EP0_RD_ADDR: u7,
    +                padding: u16,
    +            }),
    +            ///  USB_DEVICE_OUT_EP1_ST_REG.
    +            OUT_EP1_ST: mmio.Mmio(packed struct(u32) {
    +                ///  State of OUT Endpoint 1.
    +                OUT_EP1_STATE: u2,
    +                ///  Write data address of OUT endpoint 1. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is detected, there are USB_DEVICE_OUT_EP1_WR_ADDR-2 bytes data in OUT EP1.
    +                OUT_EP1_WR_ADDR: u7,
    +                ///  Read data address of OUT endpoint 1.
    +                OUT_EP1_RD_ADDR: u7,
    +                ///  Data count in OUT endpoint 1 when one packet is received.
    +                OUT_EP1_REC_DATA_CNT: u7,
    +                padding: u9,
    +            }),
    +            ///  USB_DEVICE_OUT_EP2_ST_REG.
    +            OUT_EP2_ST: mmio.Mmio(packed struct(u32) {
    +                ///  State of OUT Endpoint 2.
    +                OUT_EP2_STATE: u2,
    +                ///  Write data address of OUT endpoint 2. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is detected, there are USB_DEVICE_OUT_EP2_WR_ADDR-2 bytes data in OUT EP2.
    +                OUT_EP2_WR_ADDR: u7,
    +                ///  Read data address of OUT endpoint 2.
    +                OUT_EP2_RD_ADDR: u7,
    +                padding: u16,
    +            }),
    +            ///  USB_DEVICE_MISC_CONF_REG.
    +            MISC_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  1'h1: Force clock on for register. 1'h0: Support clock only when application writes registers.
    +                CLK_EN: u1,
    +                padding: u31,
    +            }),
    +            ///  USB_DEVICE_MEM_CONF_REG.
    +            MEM_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  1: power down usb memory.
    +                USB_MEM_PD: u1,
    +                ///  1: Force clock on for usb memory.
    +                USB_MEM_CLK_EN: u1,
    +                padding: u30,
    +            }),
    +            reserved128: [52]u8,
    +            ///  USB_DEVICE_DATE_REG.
    +            DATE: mmio.Mmio(packed struct(u32) {
    +                ///  register version.
    +                DATE: u32,
    +            }),
    +        };
    +
    +        ///  Universal Host Controller Interface
    +        pub const UHCI0 = extern struct {
    +            ///  a
    +            CONF0: mmio.Mmio(packed struct(u32) {
    +                ///  Write 1, then write 0 to this bit to reset decode state machine.
    +                TX_RST: u1,
    +                ///  Write 1, then write 0 to this bit to reset encode state machine.
    +                RX_RST: u1,
    +                ///  Set this bit to link up HCI and UART0.
    +                UART0_CE: u1,
    +                ///  Set this bit to link up HCI and UART1.
    +                UART1_CE: u1,
    +                reserved5: u1,
    +                ///  Set this bit to separate the data frame using a special char.
    +                SEPER_EN: u1,
    +                ///  Set this bit to encode the data packet with a formatting header.
    +                HEAD_EN: u1,
    +                ///  Set this bit to enable UHCI to receive the 16 bit CRC.
    +                CRC_REC_EN: u1,
    +                ///  If this bit is set to 1, UHCI will end the payload receiving process when UART has been in idle state.
    +                UART_IDLE_EOF_EN: u1,
    +                ///  If this bit is set to 1, UHCI decoder receiving payload data is end when the receiving byte count has reached the specified value. The value is payload length indicated by UHCI packet header when UHCI_HEAD_EN is 1 or the value is configuration value when UHCI_HEAD_EN is 0. If this bit is set to 0, UHCI decoder receiving payload data is end when 0xc0 is received.
    +                LEN_EOF_EN: u1,
    +                ///  Set this bit to enable data integrity checking by appending a 16 bit CCITT-CRC to end of the payload.
    +                ENCODE_CRC_EN: u1,
    +                ///  1'b1: Force clock on for register. 1'b0: Support clock only when application writes registers.
    +                CLK_EN: u1,
    +                ///  If this bit is set to 1, UHCI will end payload receive process when NULL frame is received by UART.
    +                UART_RX_BRK_EOF_EN: u1,
    +                padding: u19,
    +            }),
    +            ///  a
    +            INT_RAW: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                RX_START_INT_RAW: u1,
    +                ///  a
    +                TX_START_INT_RAW: u1,
    +                ///  a
    +                RX_HUNG_INT_RAW: u1,
    +                ///  a
    +                TX_HUNG_INT_RAW: u1,
    +                ///  a
    +                SEND_S_REG_Q_INT_RAW: u1,
    +                ///  a
    +                SEND_A_REG_Q_INT_RAW: u1,
    +                ///  This is the interrupt raw bit. Triggered when there are some errors in EOF in the
    +                OUT_EOF_INT_RAW: u1,
    +                ///  Soft control int raw bit.
    +                APP_CTRL0_INT_RAW: u1,
    +                ///  Soft control int raw bit.
    +                APP_CTRL1_INT_RAW: u1,
    +                padding: u23,
    +            }),
    +            ///  a
    +            INT_ST: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                RX_START_INT_ST: u1,
    +                ///  a
    +                TX_START_INT_ST: u1,
    +                ///  a
    +                RX_HUNG_INT_ST: u1,
    +                ///  a
    +                TX_HUNG_INT_ST: u1,
    +                ///  a
    +                SEND_S_REG_Q_INT_ST: u1,
    +                ///  a
    +                SEND_A_REG_Q_INT_ST: u1,
    +                ///  a
    +                OUTLINK_EOF_ERR_INT_ST: u1,
    +                ///  a
    +                APP_CTRL0_INT_ST: u1,
    +                ///  a
    +                APP_CTRL1_INT_ST: u1,
    +                padding: u23,
    +            }),
    +            ///  a
    +            INT_ENA: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                RX_START_INT_ENA: u1,
    +                ///  a
    +                TX_START_INT_ENA: u1,
    +                ///  a
    +                RX_HUNG_INT_ENA: u1,
    +                ///  a
    +                TX_HUNG_INT_ENA: u1,
    +                ///  a
    +                SEND_S_REG_Q_INT_ENA: u1,
    +                ///  a
    +                SEND_A_REG_Q_INT_ENA: u1,
    +                ///  a
    +                OUTLINK_EOF_ERR_INT_ENA: u1,
    +                ///  a
    +                APP_CTRL0_INT_ENA: u1,
    +                ///  a
    +                APP_CTRL1_INT_ENA: u1,
    +                padding: u23,
    +            }),
    +            ///  a
    +            INT_CLR: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                RX_START_INT_CLR: u1,
    +                ///  a
    +                TX_START_INT_CLR: u1,
    +                ///  a
    +                RX_HUNG_INT_CLR: u1,
    +                ///  a
    +                TX_HUNG_INT_CLR: u1,
    +                ///  a
    +                SEND_S_REG_Q_INT_CLR: u1,
    +                ///  a
    +                SEND_A_REG_Q_INT_CLR: u1,
    +                ///  a
    +                OUTLINK_EOF_ERR_INT_CLR: u1,
    +                ///  a
    +                APP_CTRL0_INT_CLR: u1,
    +                ///  a
    +                APP_CTRL1_INT_CLR: u1,
    +                padding: u23,
    +            }),
    +            ///  a
    +            CONF1: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                CHECK_SUM_EN: u1,
    +                ///  a
    +                CHECK_SEQ_EN: u1,
    +                ///  a
    +                CRC_DISABLE: u1,
    +                ///  a
    +                SAVE_HEAD: u1,
    +                ///  a
    +                TX_CHECK_SUM_RE: u1,
    +                ///  a
    +                TX_ACK_NUM_RE: u1,
    +                reserved7: u1,
    +                ///  a
    +                WAIT_SW_START: u1,
    +                ///  a
    +                SW_START: u1,
    +                padding: u23,
    +            }),
    +            ///  a
    +            STATE0: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                RX_ERR_CAUSE: u3,
    +                ///  a
    +                DECODE_STATE: u3,
    +                padding: u26,
    +            }),
    +            ///  a
    +            STATE1: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                ENCODE_STATE: u3,
    +                padding: u29,
    +            }),
    +            ///  a
    +            ESCAPE_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                TX_C0_ESC_EN: u1,
    +                ///  a
    +                TX_DB_ESC_EN: u1,
    +                ///  a
    +                TX_11_ESC_EN: u1,
    +                ///  a
    +                TX_13_ESC_EN: u1,
    +                ///  a
    +                RX_C0_ESC_EN: u1,
    +                ///  a
    +                RX_DB_ESC_EN: u1,
    +                ///  a
    +                RX_11_ESC_EN: u1,
    +                ///  a
    +                RX_13_ESC_EN: u1,
    +                padding: u24,
    +            }),
    +            ///  a
    +            HUNG_CONF: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                TXFIFO_TIMEOUT: u8,
    +                ///  a
    +                TXFIFO_TIMEOUT_SHIFT: u3,
    +                ///  a
    +                TXFIFO_TIMEOUT_ENA: u1,
    +                ///  a
    +                RXFIFO_TIMEOUT: u8,
    +                ///  a
    +                RXFIFO_TIMEOUT_SHIFT: u3,
    +                ///  a
    +                RXFIFO_TIMEOUT_ENA: u1,
    +                padding: u8,
    +            }),
    +            ///  a
    +            ACK_NUM: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                ACK_NUM: u3,
    +                ///  a
    +                LOAD: u1,
    +                padding: u28,
    +            }),
    +            ///  a
    +            RX_HEAD: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                RX_HEAD: u32,
    +            }),
    +            ///  a
    +            QUICK_SENT: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                SINGLE_SEND_NUM: u3,
    +                ///  a
    +                SINGLE_SEND_EN: u1,
    +                ///  a
    +                ALWAYS_SEND_NUM: u3,
    +                ///  a
    +                ALWAYS_SEND_EN: u1,
    +                padding: u24,
    +            }),
    +            ///  a
    +            REG_Q0_WORD0: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                SEND_Q0_WORD0: u32,
    +            }),
    +            ///  a
    +            REG_Q0_WORD1: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                SEND_Q0_WORD1: u32,
    +            }),
    +            ///  a
    +            REG_Q1_WORD0: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                SEND_Q1_WORD0: u32,
    +            }),
    +            ///  a
    +            REG_Q1_WORD1: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                SEND_Q1_WORD1: u32,
    +            }),
    +            ///  a
    +            REG_Q2_WORD0: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                SEND_Q2_WORD0: u32,
    +            }),
    +            ///  a
    +            REG_Q2_WORD1: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                SEND_Q2_WORD1: u32,
    +            }),
    +            ///  a
    +            REG_Q3_WORD0: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                SEND_Q3_WORD0: u32,
    +            }),
    +            ///  a
    +            REG_Q3_WORD1: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                SEND_Q3_WORD1: u32,
    +            }),
    +            ///  a
    +            REG_Q4_WORD0: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                SEND_Q4_WORD0: u32,
    +            }),
    +            ///  a
    +            REG_Q4_WORD1: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                SEND_Q4_WORD1: u32,
    +            }),
    +            ///  a
    +            REG_Q5_WORD0: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                SEND_Q5_WORD0: u32,
    +            }),
    +            ///  a
    +            REG_Q5_WORD1: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                SEND_Q5_WORD1: u32,
    +            }),
    +            ///  a
    +            REG_Q6_WORD0: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                SEND_Q6_WORD0: u32,
    +            }),
    +            ///  a
    +            REG_Q6_WORD1: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                SEND_Q6_WORD1: u32,
    +            }),
    +            ///  a
    +            ESC_CONF0: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                SEPER_CHAR: u8,
    +                ///  a
    +                SEPER_ESC_CHAR0: u8,
    +                ///  a
    +                SEPER_ESC_CHAR1: u8,
    +                padding: u8,
    +            }),
    +            ///  a
    +            ESC_CONF1: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                ESC_SEQ0: u8,
    +                ///  a
    +                ESC_SEQ0_CHAR0: u8,
    +                ///  a
    +                ESC_SEQ0_CHAR1: u8,
    +                padding: u8,
    +            }),
    +            ///  a
    +            ESC_CONF2: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                ESC_SEQ1: u8,
    +                ///  a
    +                ESC_SEQ1_CHAR0: u8,
    +                ///  a
    +                ESC_SEQ1_CHAR1: u8,
    +                padding: u8,
    +            }),
    +            ///  a
    +            ESC_CONF3: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                ESC_SEQ2: u8,
    +                ///  a
    +                ESC_SEQ2_CHAR0: u8,
    +                ///  a
    +                ESC_SEQ2_CHAR1: u8,
    +                padding: u8,
    +            }),
    +            ///  a
    +            PKT_THRES: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                PKT_THRS: u13,
    +                padding: u19,
    +            }),
    +            ///  a
    +            DATE: mmio.Mmio(packed struct(u32) {
    +                ///  a
    +                DATE: u32,
    +            }),
    +        };
    +    };
    +};
    diff --git a/src/cpus.zig b/src/cpus.zig
    new file mode 100644
    index 000000000..b087d90a9
    --- /dev/null
    +++ b/src/cpus.zig
    @@ -0,0 +1,23 @@
    +const std = @import("std");
    +const microzig = @import("../deps/microzig/build.zig");
    +
    +fn root_dir() []const u8 {
    +    return std.fs.path.dirname(@src().file) orelse unreachable;
    +}
    +
    +pub const esp32_c3 = microzig.Cpu{
    +    .name = "Espressif RISC-V",
    +    .source = .{
    +        .path = root_dir() ++ "/cpus/espressif-riscv.zig",
    +    },
    +    .target = std.zig.CrossTarget{
    +        .cpu_arch = .riscv32,
    +        .cpu_model = .{ .explicit = &std.Target.riscv.cpu.generic_rv32 },
    +        .cpu_features_add = std.Target.riscv.featureSet(&.{
    +            std.Target.riscv.Feature.c,
    +            std.Target.riscv.Feature.m,
    +        }),
    +        .os_tag = .freestanding,
    +        .abi = .eabi,
    +    },
    +};
    diff --git a/src/package/esp32-c3.zig b/src/cpus/espressif-riscv.zig
    similarity index 72%
    rename from src/package/esp32-c3.zig
    rename to src/cpus/espressif-riscv.zig
    index 0ab49440d..e20072daa 100644
    --- a/src/package/esp32-c3.zig
    +++ b/src/cpus/espressif-riscv.zig
    @@ -1,7 +1,41 @@
     const std = @import("std");
     const microzig = @import("microzig");
    +const root = @import("root");
     
    -pub const registers = @import("registers.zig").registers;
    +pub const StatusRegister = enum(u8) {
    +    // machine information
    +    mvendorid,
    +    marchid,
    +    mimpid,
    +    mhartid,
    +
    +    // machine trap setup
    +    mstatus,
    +    misa,
    +    mtvec,
    +};
    +
    +pub inline fn setStatusBit(comptime reg: StatusRegister, bits: u32) void {
    +    asm volatile ("csrrs zero, " ++ @tagName(reg) ++ ", %[value]"
    +        :
    +        : [value] "r" (bits),
    +    );
    +}
    +
    +pub inline fn clearStatusBit(comptime reg: StatusRegister, bits: u32) void {
    +    asm volatile ("csrrc zero, " ++ @tagName(reg) ++ ", %[value]"
    +        :
    +        : [value] "r" (bits),
    +    );
    +}
    +
    +pub inline fn cli() void {
    +    clearStatusBit(.mstatus, 0x08);
    +}
    +
    +pub inline fn sei() void {
    +    setStatusBit(.mstatus, 0x08);
    +}
     
     pub const startup_logic = struct {
         comptime {
    @@ -35,7 +69,7 @@ pub const startup_logic = struct {
             );
             asm volatile ("la gp, __global_pointer$");
             microzig.cpu.setStatusBit(.mtvec, microzig.config.end_of_stack);
    -        microzig.initializeSystemMemories();
    +        root.initialize_system_memories();
             microzig_main();
         }
     
    diff --git a/src/example/blinky.zig b/src/example/blinky.zig
    index 0518c5334..5ee1eefc5 100644
    --- a/src/example/blinky.zig
    +++ b/src/example/blinky.zig
    @@ -1,23 +1,28 @@
     const std = @import("std");
     const microzig = @import("microzig");
    +const peripherals = microzig.chip.peripherals;
    +const TIMG0 = peripherals.TIMG0;
    +const RTC_CNTL = peripherals.RTC_CNTL;
    +const INTERRUPT_CORE0 = peripherals.INTERRUPT_CORE0;
    +const GPIO = peripherals.GPIO;
     
     const dogfood: u32 = 0x50D83AA1;
     const super_dogfood: u32 = 0x8F1D312A;
     
     pub fn main() !void {
    -    microzig.chip.registers.TIMG0.WDTWPROTECT.raw = dogfood;
    -    microzig.chip.registers.TIMG0.WDTCONFIG0.raw = 0;
    -    microzig.chip.registers.TIMG0.WDTWPROTECT.raw = 0;
    +    TIMG0.WDTWPROTECT.raw = dogfood;
    +    TIMG0.WDTCONFIG0.raw = 0;
    +    TIMG0.WDTWPROTECT.raw = 0;
     
    -    microzig.chip.registers.RTC_CNTL.WDTWPROTECT.raw = dogfood;
    -    microzig.chip.registers.RTC_CNTL.WDTCONFIG0.raw = 0;
    -    microzig.chip.registers.RTC_CNTL.WDTWPROTECT.raw = 0;
    +    RTC_CNTL.WDTWPROTECT.raw = dogfood;
    +    RTC_CNTL.WDTCONFIG0.raw = 0;
    +    RTC_CNTL.WDTWPROTECT.raw = 0;
     
    -    microzig.chip.registers.RTC_CNTL.SWD_WPROTECT.raw = super_dogfood;
    -    microzig.chip.registers.RTC_CNTL.SWD_CONF.modify(.{ .SWD_DISABLE = 1 });
    -    microzig.chip.registers.RTC_CNTL.SWD_WPROTECT.raw = 0;
    +    RTC_CNTL.SWD_WPROTECT.raw = super_dogfood;
    +    RTC_CNTL.SWD_CONF.modify(.{ .SWD_DISABLE = 1 });
    +    RTC_CNTL.SWD_WPROTECT.raw = 0;
     
    -    microzig.chip.registers.INTERRUPT_CORE0.CPU_INT_ENABLE.* = 0;
    +    INTERRUPT_CORE0.CPU_INT_ENABLE.raw = 0;
     
         microzig.hal.gpio.init(LED_R_PIN, .{
             .direction = .output,
    @@ -35,15 +40,15 @@ pub fn main() !void {
         microzig.hal.uart.write(0, "Hello from Zig!\r\n");
     
         while (true) {
    -        microzig.chip.registers.GPIO.OUT.modify(.{ .DATA_ORIG = (1 << LED_R_PIN) });
    +        GPIO.OUT.modify(.{ .DATA_ORIG = (1 << LED_R_PIN) });
             microzig.hal.uart.write(0, "R");
    -        microzig.debug.busySleep(1_000_000);
    -        microzig.chip.registers.GPIO.OUT.modify(.{ .DATA_ORIG = (1 << LED_G_PIN) });
    +        microzig.core.experimental.debug.busy_sleep(1_000_000);
    +        GPIO.OUT.modify(.{ .DATA_ORIG = (1 << LED_G_PIN) });
             microzig.hal.uart.write(0, "G");
    -        microzig.debug.busySleep(1_000_000);
    -        microzig.chip.registers.GPIO.OUT.modify(.{ .DATA_ORIG = (1 << LED_B_PIN) });
    +        microzig.core.experimental.debug.busy_sleep(1_000_000);
    +        GPIO.OUT.modify(.{ .DATA_ORIG = (1 << LED_B_PIN) });
             microzig.hal.uart.write(0, "B");
    -        microzig.debug.busySleep(1_000_000);
    +        microzig.core.experimental.debug.busy_sleep(1_000_000);
         }
     }
     
    diff --git a/src/hal/root.zig b/src/hals/ESP32_C3.zig
    similarity index 57%
    rename from src/hal/root.zig
    rename to src/hals/ESP32_C3.zig
    index d87dab85e..516ed1524 100644
    --- a/src/hal/root.zig
    +++ b/src/hals/ESP32_C3.zig
    @@ -1,16 +1,9 @@
     const std = @import("std");
     const microzig = @import("microzig");
    -const regz = microzig.chip.registers;
    +const peripherals = microzig.chip.peripherals;
    +const GPIO = peripherals.GPIO;
     
     pub const gpio = struct {
    -    fn getRegNamed(comptime fld: []const u8) @TypeOf(@field(regz.GPIO, fld)) {
    -        return @field(regz.GPIO, fld);
    -    }
    -
    -    fn getReg(comptime template: []const u8, comptime pin: comptime_int) @TypeOf(@field(regz.GPIO, std.fmt.comptimePrint(template, .{pin}))) {
    -        return getRegNamed(comptime std.fmt.comptimePrint(template, .{pin}));
    -    }
    -
         fn assertRange(comptime p: comptime_int) void {
             if (p < 0 or p >= 21)
                 @compileError(std.fmt.comptimePrint("GPIO {} does not exist. GPIO pins can be between 0 and 21", .{p}));
    @@ -19,29 +12,29 @@ pub const gpio = struct {
         pub const Config = struct {
             function: u8 = 0x80,
             invert_function: bool = false,
    -        direction: microzig.gpio.Direction,
    +        direction: microzig.core.experimental.gpio.Direction,
             direct_io: bool = false,
             invert_direct_io: bool = false,
         };
     
         pub fn init(comptime pin: comptime_int, comptime config: Config) void {
             assertRange(pin);
    -        getReg("FUNC{}_OUT_SEL_CFG", pin).modify(.{
    +        GPIO.FUNC_OUT_SEL_CFG[pin].modify(.{
                 .OUT_SEL = config.function,
                 .INV_SEL = @boolToInt(config.invert_function),
                 .OEN_SEL = @boolToInt(config.direct_io),
                 .OEN_INV_SEL = @boolToInt(config.invert_direct_io),
             });
             switch (config.direction) {
    -            .input => microzig.chip.registers.GPIO.ENABLE.raw &= ~(@as(u32, 1) << pin),
    -            .output => microzig.chip.registers.GPIO.ENABLE.raw |= (@as(u32, 1) << pin),
    +            .input => GPIO.ENABLE.raw &= ~(@as(u32, 1) << pin),
    +            .output => GPIO.ENABLE.raw |= (@as(u32, 1) << pin),
             }
         }
     };
     
     pub const uart = struct {
    -    fn reg(comptime index: comptime_int) @TypeOf(@field(regz, std.fmt.comptimePrint("UART{}", .{index}))) {
    -        return @field(regz, std.fmt.comptimePrint("UART{}", .{index}));
    +    fn reg(comptime index: comptime_int) @TypeOf(@field(peripherals, std.fmt.comptimePrint("UART{}", .{index}))) {
    +        return @field(peripherals, std.fmt.comptimePrint("UART{}", .{index}));
         }
     
         pub fn write(comptime index: comptime_int, slice: []const u8) void {
    diff --git a/src/package/espressif-riscv.zig b/src/package/espressif-riscv.zig
    deleted file mode 100644
    index 06d7bc444..000000000
    --- a/src/package/espressif-riscv.zig
    +++ /dev/null
    @@ -1,39 +0,0 @@
    -const std = @import("std");
    -const microzig = @import("microzig");
    -
    -pub const StatusRegister = enum(u8) {
    -    // machine information
    -    mvendorid,
    -    marchid,
    -    mimpid,
    -    mhartid,
    -
    -    // machine trap setup
    -    mstatus,
    -    misa,
    -    mtvec,
    -};
    -
    -pub inline fn setStatusBit(comptime reg: StatusRegister, bits: u32) void {
    -    asm volatile ("csrrs zero, " ++ @tagName(reg) ++ ", %[value]"
    -        :
    -        : [value] "r" (bits),
    -    );
    -}
    -
    -pub inline fn clearStatusBit(comptime reg: StatusRegister, bits: u32) void {
    -    asm volatile ("csrrc zero, " ++ @tagName(reg) ++ ", %[value]"
    -        :
    -        : [value] "r" (bits),
    -    );
    -}
    -
    -pub inline fn cli() void {
    -    clearStatusBit(.mstatus, 0x08);
    -}
    -
    -pub inline fn sei() void {
    -    setStatusBit(.mstatus, 0x08);
    -}
    -
    -pub const startup_logic = microzig.chip.startup_logic;
    diff --git a/src/package/registers.zig b/src/package/registers.zig
    deleted file mode 100644
    index 77bed3f3d..000000000
    --- a/src/package/registers.zig
    +++ /dev/null
    @@ -1,37956 +0,0 @@
    -// this file was generated by regz: https://github.com/ZigEmbeddedGroup/regz
    -// commit: 62e33d0e2175e4c1621e1dbf9f6ac3ec18f6ba38
    -//
    -// vendor: ESPRESSIF SYSTEMS (SHANGHAI) CO., LTD.
    -// device: ESP32-C3
    -// cpu: RV32IMC
    -
    -pub const registers = struct {
    -    /// AES (Advanced Encryption Standard) Accelerator
    -    pub const AES = struct {
    -        pub const base_address = 0x6003a000;
    -
    -        /// address: 0x6003a000
    -        /// Key material key_0 configure register
    -        pub const KEY_0 = @intToPtr(*volatile u32, base_address + 0x0);
    -
    -        /// address: 0x6003a004
    -        /// Key material key_1 configure register
    -        pub const KEY_1 = @intToPtr(*volatile u32, base_address + 0x4);
    -
    -        /// address: 0x6003a008
    -        /// Key material key_2 configure register
    -        pub const KEY_2 = @intToPtr(*volatile u32, base_address + 0x8);
    -
    -        /// address: 0x6003a00c
    -        /// Key material key_3 configure register
    -        pub const KEY_3 = @intToPtr(*volatile u32, base_address + 0xc);
    -
    -        /// address: 0x6003a010
    -        /// Key material key_4 configure register
    -        pub const KEY_4 = @intToPtr(*volatile u32, base_address + 0x10);
    -
    -        /// address: 0x6003a014
    -        /// Key material key_5 configure register
    -        pub const KEY_5 = @intToPtr(*volatile u32, base_address + 0x14);
    -
    -        /// address: 0x6003a018
    -        /// Key material key_6 configure register
    -        pub const KEY_6 = @intToPtr(*volatile u32, base_address + 0x18);
    -
    -        /// address: 0x6003a01c
    -        /// Key material key_7 configure register
    -        pub const KEY_7 = @intToPtr(*volatile u32, base_address + 0x1c);
    -
    -        /// address: 0x6003a020
    -        /// source text material text_in_0 configure register
    -        pub const TEXT_IN_0 = @intToPtr(*volatile u32, base_address + 0x20);
    -
    -        /// address: 0x6003a024
    -        /// source text material text_in_1 configure register
    -        pub const TEXT_IN_1 = @intToPtr(*volatile u32, base_address + 0x24);
    -
    -        /// address: 0x6003a028
    -        /// source text material text_in_2 configure register
    -        pub const TEXT_IN_2 = @intToPtr(*volatile u32, base_address + 0x28);
    -
    -        /// address: 0x6003a02c
    -        /// source text material text_in_3 configure register
    -        pub const TEXT_IN_3 = @intToPtr(*volatile u32, base_address + 0x2c);
    -
    -        /// address: 0x6003a030
    -        /// result text material text_out_0 configure register
    -        pub const TEXT_OUT_0 = @intToPtr(*volatile u32, base_address + 0x30);
    -
    -        /// address: 0x6003a034
    -        /// result text material text_out_1 configure register
    -        pub const TEXT_OUT_1 = @intToPtr(*volatile u32, base_address + 0x34);
    -
    -        /// address: 0x6003a038
    -        /// result text material text_out_2 configure register
    -        pub const TEXT_OUT_2 = @intToPtr(*volatile u32, base_address + 0x38);
    -
    -        /// address: 0x6003a03c
    -        /// result text material text_out_3 configure register
    -        pub const TEXT_OUT_3 = @intToPtr(*volatile u32, base_address + 0x3c);
    -
    -        /// address: 0x6003a040
    -        /// AES Mode register
    -        pub const MODE = @intToPtr(*volatile MmioInt(32, u3), base_address + 0x40);
    -
    -        /// address: 0x6003a044
    -        /// AES Endian configure register
    -        pub const ENDIAN = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x44);
    -
    -        /// address: 0x6003a048
    -        /// AES trigger register
    -        pub const TRIGGER = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x48);
    -
    -        /// address: 0x6003a04c
    -        /// AES state register
    -        pub const STATE = @intToPtr(*volatile MmioInt(32, u2), base_address + 0x4c);
    -
    -        /// address: 0x6003a050
    -        /// The memory that stores initialization vector
    -        pub const IV_MEM = @intToPtr(*volatile [16]u8, base_address + 0x50);
    -
    -        /// address: 0x6003a060
    -        /// The memory that stores GCM hash subkey
    -        pub const H_MEM = @intToPtr(*volatile [16]u8, base_address + 0x60);
    -
    -        /// address: 0x6003a070
    -        /// The memory that stores J0
    -        pub const J0_MEM = @intToPtr(*volatile [16]u8, base_address + 0x70);
    -
    -        /// address: 0x6003a080
    -        /// The memory that stores T0
    -        pub const T0_MEM = @intToPtr(*volatile [16]u8, base_address + 0x80);
    -
    -        /// address: 0x6003a090
    -        /// DMA-AES working mode register
    -        pub const DMA_ENABLE = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x90);
    -
    -        /// address: 0x6003a094
    -        /// AES cipher block mode register
    -        pub const BLOCK_MODE = @intToPtr(*volatile MmioInt(32, u3), base_address + 0x94);
    -
    -        /// address: 0x6003a098
    -        /// AES block number register
    -        pub const BLOCK_NUM = @intToPtr(*volatile u32, base_address + 0x98);
    -
    -        /// address: 0x6003a09c
    -        /// Standard incrementing function configure register
    -        pub const INC_SEL = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x9c);
    -
    -        /// address: 0x6003a0a0
    -        /// Additional Authential Data block number register
    -        pub const AAD_BLOCK_NUM = @intToPtr(*volatile u32, base_address + 0xa0);
    -
    -        /// address: 0x6003a0a4
    -        /// AES remainder bit number register
    -        pub const REMAINDER_BIT_NUM = @intToPtr(*volatile MmioInt(32, u7), base_address + 0xa4);
    -
    -        /// address: 0x6003a0a8
    -        /// AES continue register
    -        pub const CONTINUE = @intToPtr(*volatile MmioInt(32, u1), base_address + 0xa8);
    -
    -        /// address: 0x6003a0ac
    -        /// AES Interrupt clear register
    -        pub const INT_CLEAR = @intToPtr(*volatile MmioInt(32, u1), base_address + 0xac);
    -
    -        /// address: 0x6003a0b0
    -        /// AES Interrupt enable register
    -        pub const INT_ENA = @intToPtr(*volatile MmioInt(32, u1), base_address + 0xb0);
    -
    -        /// address: 0x6003a0b4
    -        /// AES version control register
    -        pub const DATE = @intToPtr(*volatile MmioInt(32, u30), base_address + 0xb4);
    -
    -        /// address: 0x6003a0b8
    -        /// AES-DMA exit config
    -        pub const DMA_EXIT = @intToPtr(*volatile MmioInt(32, u1), base_address + 0xb8);
    -    };
    -
    -    /// Advanced Peripheral Bus Controller
    -    pub const APB_CTRL = struct {
    -        pub const base_address = 0x60026000;
    -
    -        /// address: 0x60026000
    -        /// APB_CTRL_SYSCLK_CONF_REG
    -        pub const SYSCLK_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_pre_div_cnt
    -            PRE_DIV_CNT: u10,
    -            /// reg_clk_320m_en
    -            CLK_320M_EN: u1,
    -            /// reg_clk_en
    -            CLK_EN: u1,
    -            /// reg_rst_tick_cnt
    -            RST_TICK_CNT: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x60026004
    -        /// APB_CTRL_TICK_CONF_REG
    -        pub const TICK_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_xtal_tick_num
    -            XTAL_TICK_NUM: u8,
    -            /// reg_ck8m_tick_num
    -            CK8M_TICK_NUM: u8,
    -            /// reg_tick_enable
    -            TICK_ENABLE: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x60026008
    -        /// APB_CTRL_CLK_OUT_EN_REG
    -        pub const CLK_OUT_EN = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_clk20_oen
    -            CLK20_OEN: u1,
    -            /// reg_clk22_oen
    -            CLK22_OEN: u1,
    -            /// reg_clk44_oen
    -            CLK44_OEN: u1,
    -            /// reg_clk_bb_oen
    -            CLK_BB_OEN: u1,
    -            /// reg_clk80_oen
    -            CLK80_OEN: u1,
    -            /// reg_clk160_oen
    -            CLK160_OEN: u1,
    -            /// reg_clk_320m_oen
    -            CLK_320M_OEN: u1,
    -            /// reg_clk_adc_inf_oen
    -            CLK_ADC_INF_OEN: u1,
    -            /// reg_clk_dac_cpu_oen
    -            CLK_DAC_CPU_OEN: u1,
    -            /// reg_clk40x_bb_oen
    -            CLK40X_BB_OEN: u1,
    -            /// reg_clk_xtal_oen
    -            CLK_XTAL_OEN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x6002600c
    -        /// APB_CTRL_WIFI_BB_CFG_REG
    -        pub const WIFI_BB_CFG = @intToPtr(*volatile u32, base_address + 0xc);
    -
    -        /// address: 0x60026010
    -        /// APB_CTRL_WIFI_BB_CFG_2_REG
    -        pub const WIFI_BB_CFG_2 = @intToPtr(*volatile u32, base_address + 0x10);
    -
    -        /// address: 0x60026014
    -        /// APB_CTRL_WIFI_CLK_EN_REG
    -        pub const WIFI_CLK_EN = @intToPtr(*volatile u32, base_address + 0x14);
    -
    -        /// address: 0x60026018
    -        /// APB_CTRL_WIFI_RST_EN_REG
    -        pub const WIFI_RST_EN = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_wifi_rst
    -            WIFI_RST: u32,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x6002601c
    -        /// APB_CTRL_HOST_INF_SEL_REG
    -        pub const HOST_INF_SEL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_peri_io_swap
    -            PERI_IO_SWAP: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x60026020
    -        /// APB_CTRL_EXT_MEM_PMS_LOCK_REG
    -        pub const EXT_MEM_PMS_LOCK = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x20);
    -
    -        /// address: 0x60026028
    -        /// APB_CTRL_FLASH_ACE0_ATTR_REG
    -        pub const FLASH_ACE0_ATTR = @intToPtr(*volatile MmioInt(32, u2), base_address + 0x28);
    -
    -        /// address: 0x6002602c
    -        /// APB_CTRL_FLASH_ACE1_ATTR_REG
    -        pub const FLASH_ACE1_ATTR = @intToPtr(*volatile MmioInt(32, u2), base_address + 0x2c);
    -
    -        /// address: 0x60026030
    -        /// APB_CTRL_FLASH_ACE2_ATTR_REG
    -        pub const FLASH_ACE2_ATTR = @intToPtr(*volatile MmioInt(32, u2), base_address + 0x30);
    -
    -        /// address: 0x60026034
    -        /// APB_CTRL_FLASH_ACE3_ATTR_REG
    -        pub const FLASH_ACE3_ATTR = @intToPtr(*volatile MmioInt(32, u2), base_address + 0x34);
    -
    -        /// address: 0x60026038
    -        /// APB_CTRL_FLASH_ACE0_ADDR_REG
    -        pub const FLASH_ACE0_ADDR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_flash_ace0_addr_s
    -            S: u32,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x6002603c
    -        /// APB_CTRL_FLASH_ACE1_ADDR_REG
    -        pub const FLASH_ACE1_ADDR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_flash_ace1_addr_s
    -            S: u32,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x60026040
    -        /// APB_CTRL_FLASH_ACE2_ADDR_REG
    -        pub const FLASH_ACE2_ADDR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_flash_ace2_addr_s
    -            S: u32,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x60026044
    -        /// APB_CTRL_FLASH_ACE3_ADDR_REG
    -        pub const FLASH_ACE3_ADDR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_flash_ace3_addr_s
    -            S: u32,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x60026048
    -        /// APB_CTRL_FLASH_ACE0_SIZE_REG
    -        pub const FLASH_ACE0_SIZE = @intToPtr(*volatile MmioInt(32, u13), base_address + 0x48);
    -
    -        /// address: 0x6002604c
    -        /// APB_CTRL_FLASH_ACE1_SIZE_REG
    -        pub const FLASH_ACE1_SIZE = @intToPtr(*volatile MmioInt(32, u13), base_address + 0x4c);
    -
    -        /// address: 0x60026050
    -        /// APB_CTRL_FLASH_ACE2_SIZE_REG
    -        pub const FLASH_ACE2_SIZE = @intToPtr(*volatile MmioInt(32, u13), base_address + 0x50);
    -
    -        /// address: 0x60026054
    -        /// APB_CTRL_FLASH_ACE3_SIZE_REG
    -        pub const FLASH_ACE3_SIZE = @intToPtr(*volatile MmioInt(32, u13), base_address + 0x54);
    -
    -        /// address: 0x60026088
    -        /// APB_CTRL_SPI_MEM_PMS_CTRL_REG
    -        pub const SPI_MEM_PMS_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_spi_mem_reject_int
    -            SPI_MEM_REJECT_INT: u1,
    -            /// reg_spi_mem_reject_clr
    -            SPI_MEM_REJECT_CLR: u1,
    -            /// reg_spi_mem_reject_cde
    -            SPI_MEM_REJECT_CDE: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x88);
    -
    -        /// address: 0x6002608c
    -        /// APB_CTRL_SPI_MEM_REJECT_ADDR_REG
    -        pub const SPI_MEM_REJECT_ADDR = @intToPtr(*volatile u32, base_address + 0x8c);
    -
    -        /// address: 0x60026090
    -        /// APB_CTRL_SDIO_CTRL_REG
    -        pub const SDIO_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_sdio_win_access_en
    -            SDIO_WIN_ACCESS_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x90);
    -
    -        /// address: 0x60026094
    -        /// APB_CTRL_REDCY_SIG0_REG
    -        pub const REDCY_SIG0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_redcy_sig0
    -            REDCY_SIG0: u31,
    -            /// reg_redcy_andor
    -            REDCY_ANDOR: u1,
    -        }), base_address + 0x94);
    -
    -        /// address: 0x60026098
    -        /// APB_CTRL_REDCY_SIG1_REG
    -        pub const REDCY_SIG1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_redcy_sig1
    -            REDCY_SIG1: u31,
    -            /// reg_redcy_nandor
    -            REDCY_NANDOR: u1,
    -        }), base_address + 0x98);
    -
    -        /// address: 0x6002609c
    -        /// APB_CTRL_FRONT_END_MEM_PD_REG
    -        pub const FRONT_END_MEM_PD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_agc_mem_force_pu
    -            AGC_MEM_FORCE_PU: u1,
    -            /// reg_agc_mem_force_pd
    -            AGC_MEM_FORCE_PD: u1,
    -            /// reg_pbus_mem_force_pu
    -            PBUS_MEM_FORCE_PU: u1,
    -            /// reg_pbus_mem_force_pd
    -            PBUS_MEM_FORCE_PD: u1,
    -            /// reg_dc_mem_force_pu
    -            DC_MEM_FORCE_PU: u1,
    -            /// reg_dc_mem_force_pd
    -            DC_MEM_FORCE_PD: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -        }), base_address + 0x9c);
    -
    -        /// address: 0x600260a0
    -        /// APB_CTRL_RETENTION_CTRL_REG
    -        pub const RETENTION_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_retention_link_addr
    -            RETENTION_LINK_ADDR: u27,
    -            /// reg_nobypass_cpu_iso_rst
    -            NOBYPASS_CPU_ISO_RST: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -        }), base_address + 0xa0);
    -
    -        /// address: 0x600260a4
    -        /// APB_CTRL_CLKGATE_FORCE_ON_REG
    -        pub const CLKGATE_FORCE_ON = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_rom_clkgate_force_on
    -            ROM_CLKGATE_FORCE_ON: u2,
    -            /// reg_sram_clkgate_force_on
    -            SRAM_CLKGATE_FORCE_ON: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -        }), base_address + 0xa4);
    -
    -        /// address: 0x600260a8
    -        /// APB_CTRL_MEM_POWER_DOWN_REG
    -        pub const MEM_POWER_DOWN = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_rom_power_down
    -            ROM_POWER_DOWN: u2,
    -            /// reg_sram_power_down
    -            SRAM_POWER_DOWN: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -        }), base_address + 0xa8);
    -
    -        /// address: 0x600260ac
    -        /// APB_CTRL_MEM_POWER_UP_REG
    -        pub const MEM_POWER_UP = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_rom_power_up
    -            ROM_POWER_UP: u2,
    -            /// reg_sram_power_up
    -            SRAM_POWER_UP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -        }), base_address + 0xac);
    -
    -        /// address: 0x600260b0
    -        /// APB_CTRL_RND_DATA_REG
    -        pub const RND_DATA = @intToPtr(*volatile u32, base_address + 0xb0);
    -
    -        /// address: 0x600260b4
    -        /// APB_CTRL_PERI_BACKUP_CONFIG_REG
    -        pub const PERI_BACKUP_CONFIG = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            /// reg_peri_backup_flow_err
    -            PERI_BACKUP_FLOW_ERR: u2,
    -            reserved1: u1,
    -            /// reg_peri_backup_burst_limit
    -            PERI_BACKUP_BURST_LIMIT: u5,
    -            /// reg_peri_backup_tout_thres
    -            PERI_BACKUP_TOUT_THRES: u10,
    -            /// reg_peri_backup_size
    -            PERI_BACKUP_SIZE: u10,
    -            /// reg_peri_backup_start
    -            PERI_BACKUP_START: u1,
    -            /// reg_peri_backup_to_mem
    -            PERI_BACKUP_TO_MEM: u1,
    -            /// reg_peri_backup_ena
    -            PERI_BACKUP_ENA: u1,
    -        }), base_address + 0xb4);
    -
    -        /// address: 0x600260b8
    -        /// APB_CTRL_PERI_BACKUP_APB_ADDR_REG
    -        pub const PERI_BACKUP_APB_ADDR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_backup_apb_start_addr
    -            BACKUP_APB_START_ADDR: u32,
    -        }), base_address + 0xb8);
    -
    -        /// address: 0x600260bc
    -        /// APB_CTRL_PERI_BACKUP_MEM_ADDR_REG
    -        pub const PERI_BACKUP_MEM_ADDR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_backup_mem_start_addr
    -            BACKUP_MEM_START_ADDR: u32,
    -        }), base_address + 0xbc);
    -
    -        /// address: 0x600260c0
    -        /// APB_CTRL_PERI_BACKUP_INT_RAW_REG
    -        pub const PERI_BACKUP_INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_peri_backup_done_int_raw
    -            PERI_BACKUP_DONE_INT_RAW: u1,
    -            /// reg_peri_backup_err_int_raw
    -            PERI_BACKUP_ERR_INT_RAW: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0xc0);
    -
    -        /// address: 0x600260c4
    -        /// APB_CTRL_PERI_BACKUP_INT_ST_REG
    -        pub const PERI_BACKUP_INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_peri_backup_done_int_st
    -            PERI_BACKUP_DONE_INT_ST: u1,
    -            /// reg_peri_backup_err_int_st
    -            PERI_BACKUP_ERR_INT_ST: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0xc4);
    -
    -        /// address: 0x600260c8
    -        /// APB_CTRL_PERI_BACKUP_INT_ENA_REG
    -        pub const PERI_BACKUP_INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_peri_backup_done_int_ena
    -            PERI_BACKUP_DONE_INT_ENA: u1,
    -            /// reg_peri_backup_err_int_ena
    -            PERI_BACKUP_ERR_INT_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0xc8);
    -
    -        /// address: 0x600260d0
    -        /// APB_CTRL_PERI_BACKUP_INT_CLR_REG
    -        pub const PERI_BACKUP_INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_peri_backup_done_int_clr
    -            PERI_BACKUP_DONE_INT_CLR: u1,
    -            /// reg_peri_backup_err_int_clr
    -            PERI_BACKUP_ERR_INT_CLR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0xd0);
    -
    -        /// address: 0x600263fc
    -        /// APB_CTRL_DATE_REG
    -        pub const DATE = @intToPtr(*volatile u32, base_address + 0x3fc);
    -    };
    -
    -    /// Successive Approximation Register Analog to Digital Converter
    -    pub const APB_SARADC = struct {
    -        pub const base_address = 0x60040000;
    -
    -        /// address: 0x60040000
    -        /// digital saradc configure register
    -        pub const CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// select software enable saradc sample
    -            SARADC_START_FORCE: u1,
    -            /// software enable saradc sample
    -            SARADC_START: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            /// SAR clock gated
    -            SARADC_SAR_CLK_GATED: u1,
    -            /// SAR clock divider
    -            SARADC_SAR_CLK_DIV: u8,
    -            /// 0 ~ 15 means length 1 ~ 16
    -            SARADC_SAR_PATT_LEN: u3,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            /// clear the pointer of pattern table for DIG ADC1 CTRL
    -            SARADC_SAR_PATT_P_CLEAR: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            /// force option to xpd sar blocks
    -            SARADC_XPD_SAR_FORCE: u2,
    -            reserved12: u1,
    -            /// wait arbit signal stable after sar_done
    -            SARADC_WAIT_ARB_CYCLE: u2,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x60040004
    -        /// digital saradc configure register
    -        pub const CTRL2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// enable max meas num
    -            SARADC_MEAS_NUM_LIMIT: u1,
    -            /// max conversion number
    -            SARADC_MAX_MEAS_NUM: u8,
    -            /// 1: data to DIG ADC1 CTRL is inverted, otherwise not
    -            SARADC_SAR1_INV: u1,
    -            /// 1: data to DIG ADC2 CTRL is inverted, otherwise not
    -            SARADC_SAR2_INV: u1,
    -            reserved0: u1,
    -            /// to set saradc timer target
    -            SARADC_TIMER_TARGET: u12,
    -            /// to enable saradc timer trigger
    -            SARADC_TIMER_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x60040008
    -        /// digital saradc configure register
    -        pub const FILTER_CTRL1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            reserved23: u1,
    -            reserved24: u1,
    -            reserved25: u1,
    -            /// Factor of saradc filter1
    -            APB_SARADC_FILTER_FACTOR1: u3,
    -            /// Factor of saradc filter0
    -            APB_SARADC_FILTER_FACTOR0: u3,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x6004000c
    -        /// digital saradc configure register
    -        pub const FSM_WAIT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// saradc_xpd_wait
    -            SARADC_XPD_WAIT: u8,
    -            /// saradc_rstb_wait
    -            SARADC_RSTB_WAIT: u8,
    -            /// saradc_standby_wait
    -            SARADC_STANDBY_WAIT: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x60040010
    -        /// digital saradc configure register
    -        pub const SAR1_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// saradc1 status about data and channel
    -            SARADC_SAR1_STATUS: u32,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x60040014
    -        /// digital saradc configure register
    -        pub const SAR2_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// saradc2 status about data and channel
    -            SARADC_SAR2_STATUS: u32,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x60040018
    -        /// digital saradc configure register
    -        pub const SAR_PATT_TAB1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// item 0 ~ 3 for pattern table 1 (each item one byte)
    -            SARADC_SAR_PATT_TAB1: u24,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x6004001c
    -        /// digital saradc configure register
    -        pub const SAR_PATT_TAB2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Item 4 ~ 7 for pattern table 1 (each item one byte)
    -            SARADC_SAR_PATT_TAB2: u24,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x60040020
    -        /// digital saradc configure register
    -        pub const ONETIME_SAMPLE = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            /// configure onetime atten
    -            SARADC_ONETIME_ATTEN: u2,
    -            /// configure onetime channel
    -            SARADC_ONETIME_CHANNEL: u4,
    -            /// trigger adc onetime sample
    -            SARADC_ONETIME_START: u1,
    -            /// enable adc2 onetime sample
    -            SARADC2_ONETIME_SAMPLE: u1,
    -            /// enable adc1 onetime sample
    -            SARADC1_ONETIME_SAMPLE: u1,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x60040024
    -        /// digital saradc configure register
    -        pub const ARB_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// adc2 arbiter force to enableapb controller
    -            ADC_ARB_APB_FORCE: u1,
    -            /// adc2 arbiter force to enable rtc controller
    -            ADC_ARB_RTC_FORCE: u1,
    -            /// adc2 arbiter force to enable wifi controller
    -            ADC_ARB_WIFI_FORCE: u1,
    -            /// adc2 arbiter force grant
    -            ADC_ARB_GRANT_FORCE: u1,
    -            /// Set adc2 arbiterapb priority
    -            ADC_ARB_APB_PRIORITY: u2,
    -            /// Set adc2 arbiter rtc priority
    -            ADC_ARB_RTC_PRIORITY: u2,
    -            /// Set adc2 arbiter wifi priority
    -            ADC_ARB_WIFI_PRIORITY: u2,
    -            /// adc2 arbiter uses fixed priority
    -            ADC_ARB_FIX_PRIORITY: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x60040028
    -        /// digital saradc configure register
    -        pub const FILTER_CTRL0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            /// configure filter1 to adc channel
    -            APB_SARADC_FILTER_CHANNEL1: u4,
    -            /// configure filter0 to adc channel
    -            APB_SARADC_FILTER_CHANNEL0: u4,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            /// enable apb_adc1_filter
    -            APB_SARADC_FILTER_RESET: u1,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x6004002c
    -        /// digital saradc configure register
    -        pub const SAR1DATA_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// saradc1 data
    -            APB_SARADC1_DATA: u17,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x60040030
    -        /// digital saradc configure register
    -        pub const SAR2DATA_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// saradc2 data
    -            APB_SARADC2_DATA: u17,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x60040034
    -        /// digital saradc configure register
    -        pub const THRES0_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// configure thres0 to adc channel
    -            APB_SARADC_THRES0_CHANNEL: u4,
    -            reserved0: u1,
    -            /// saradc thres0 monitor thres
    -            APB_SARADC_THRES0_HIGH: u13,
    -            /// saradc thres0 monitor thres
    -            APB_SARADC_THRES0_LOW: u13,
    -            padding0: u1,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x60040038
    -        /// digital saradc configure register
    -        pub const THRES1_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// configure thres1 to adc channel
    -            APB_SARADC_THRES1_CHANNEL: u4,
    -            reserved0: u1,
    -            /// saradc thres1 monitor thres
    -            APB_SARADC_THRES1_HIGH: u13,
    -            /// saradc thres1 monitor thres
    -            APB_SARADC_THRES1_LOW: u13,
    -            padding0: u1,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x6004003c
    -        /// digital saradc configure register
    -        pub const THRES_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            reserved23: u1,
    -            reserved24: u1,
    -            reserved25: u1,
    -            reserved26: u1,
    -            /// enable thres to all channel
    -            APB_SARADC_THRES_ALL_EN: u1,
    -            reserved27: u1,
    -            reserved28: u1,
    -            /// enable thres1
    -            APB_SARADC_THRES1_EN: u1,
    -            /// enable thres0
    -            APB_SARADC_THRES0_EN: u1,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x60040040
    -        /// digital saradc int register
    -        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            reserved23: u1,
    -            reserved24: u1,
    -            reserved25: u1,
    -            /// saradc thres1 low interrupt enable
    -            APB_SARADC_THRES1_LOW_INT_ENA: u1,
    -            /// saradc thres0 low interrupt enable
    -            APB_SARADC_THRES0_LOW_INT_ENA: u1,
    -            /// saradc thres1 high interrupt enable
    -            APB_SARADC_THRES1_HIGH_INT_ENA: u1,
    -            /// saradc thres0 high interrupt enable
    -            APB_SARADC_THRES0_HIGH_INT_ENA: u1,
    -            /// saradc2 done interrupt enable
    -            APB_SARADC2_DONE_INT_ENA: u1,
    -            /// saradc1 done interrupt enable
    -            APB_SARADC1_DONE_INT_ENA: u1,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x60040044
    -        /// digital saradc int register
    -        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            reserved23: u1,
    -            reserved24: u1,
    -            reserved25: u1,
    -            /// saradc thres1 low interrupt raw
    -            APB_SARADC_THRES1_LOW_INT_RAW: u1,
    -            /// saradc thres0 low interrupt raw
    -            APB_SARADC_THRES0_LOW_INT_RAW: u1,
    -            /// saradc thres1 high interrupt raw
    -            APB_SARADC_THRES1_HIGH_INT_RAW: u1,
    -            /// saradc thres0 high interrupt raw
    -            APB_SARADC_THRES0_HIGH_INT_RAW: u1,
    -            /// saradc2 done interrupt raw
    -            APB_SARADC2_DONE_INT_RAW: u1,
    -            /// saradc1 done interrupt raw
    -            APB_SARADC1_DONE_INT_RAW: u1,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x60040048
    -        /// digital saradc int register
    -        pub const INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            reserved23: u1,
    -            reserved24: u1,
    -            reserved25: u1,
    -            /// saradc thres1 low interrupt state
    -            APB_SARADC_THRES1_LOW_INT_ST: u1,
    -            /// saradc thres0 low interrupt state
    -            APB_SARADC_THRES0_LOW_INT_ST: u1,
    -            /// saradc thres1 high interrupt state
    -            APB_SARADC_THRES1_HIGH_INT_ST: u1,
    -            /// saradc thres0 high interrupt state
    -            APB_SARADC_THRES0_HIGH_INT_ST: u1,
    -            /// saradc2 done interrupt state
    -            APB_SARADC2_DONE_INT_ST: u1,
    -            /// saradc1 done interrupt state
    -            APB_SARADC1_DONE_INT_ST: u1,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x6004004c
    -        /// digital saradc int register
    -        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            reserved23: u1,
    -            reserved24: u1,
    -            reserved25: u1,
    -            /// saradc thres1 low interrupt clear
    -            APB_SARADC_THRES1_LOW_INT_CLR: u1,
    -            /// saradc thres0 low interrupt clear
    -            APB_SARADC_THRES0_LOW_INT_CLR: u1,
    -            /// saradc thres1 high interrupt clear
    -            APB_SARADC_THRES1_HIGH_INT_CLR: u1,
    -            /// saradc thres0 high interrupt clear
    -            APB_SARADC_THRES0_HIGH_INT_CLR: u1,
    -            /// saradc2 done interrupt clear
    -            APB_SARADC2_DONE_INT_CLR: u1,
    -            /// saradc1 done interrupt clear
    -            APB_SARADC1_DONE_INT_CLR: u1,
    -        }), base_address + 0x4c);
    -
    -        /// address: 0x60040050
    -        /// digital saradc configure register
    -        pub const DMA_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// the dma_in_suc_eof gen when sample cnt = spi_eof_num
    -            APB_ADC_EOF_NUM: u16,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            /// reset_apb_adc_state
    -            APB_ADC_RESET_FSM: u1,
    -            /// enable apb_adc use spi_dma
    -            APB_ADC_TRANS: u1,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x60040054
    -        /// digital saradc configure register
    -        pub const CLKM_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Integral I2S clock divider value
    -            CLKM_DIV_NUM: u8,
    -            /// Fractional clock divider numerator value
    -            CLKM_DIV_B: u6,
    -            /// Fractional clock divider denominator value
    -            CLKM_DIV_A: u6,
    -            /// reg clk en
    -            CLK_EN: u1,
    -            /// Set this bit to enable clk_apll
    -            CLK_SEL: u2,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x60040058
    -        /// digital tsens configure register
    -        pub const APB_TSENS_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// temperature sensor data out
    -            TSENS_OUT: u8,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            /// invert temperature sensor data
    -            TSENS_IN_INV: u1,
    -            /// temperature sensor clock divider
    -            TSENS_CLK_DIV: u8,
    -            /// temperature sensor power up
    -            TSENS_PU: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x6004005c
    -        /// digital tsens configure register
    -        pub const TSENS_CTRL2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// the time that power up tsens need wait
    -            TSENS_XPD_WAIT: u12,
    -            /// force power up tsens
    -            TSENS_XPD_FORCE: u2,
    -            /// inv tsens clk
    -            TSENS_CLK_INV: u1,
    -            /// tsens clk select
    -            TSENS_CLK_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x60040060
    -        /// digital saradc configure register
    -        pub const CALI = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// saradc cali factor
    -            APB_SARADC_CALI_CFG: u17,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x600403fc
    -        /// version
    -        pub const CTRL_DATE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// version
    -            DATE: u32,
    -        }), base_address + 0x3fc);
    -    };
    -
    -    /// Debug Assist
    -    pub const ASSIST_DEBUG = struct {
    -        pub const base_address = 0x600ce000;
    -
    -        /// address: 0x600ce000
    -        /// ASSIST_DEBUG_C0RE_0_MONTR_ENA_REG
    -        pub const C0RE_0_MONTR_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core_0_area_dram0_0_rd_ena
    -            CORE_0_AREA_DRAM0_0_RD_ENA: u1,
    -            /// reg_core_0_area_dram0_0_wr_ena
    -            CORE_0_AREA_DRAM0_0_WR_ENA: u1,
    -            /// reg_core_0_area_dram0_1_rd_ena
    -            CORE_0_AREA_DRAM0_1_RD_ENA: u1,
    -            /// reg_core_0_area_dram0_1_wr_ena
    -            CORE_0_AREA_DRAM0_1_WR_ENA: u1,
    -            /// reg_core_0_area_pif_0_rd_ena
    -            CORE_0_AREA_PIF_0_RD_ENA: u1,
    -            /// reg_core_0_area_pif_0_wr_ena
    -            CORE_0_AREA_PIF_0_WR_ENA: u1,
    -            /// reg_core_0_area_pif_1_rd_ena
    -            CORE_0_AREA_PIF_1_RD_ENA: u1,
    -            /// reg_core_0_area_pif_1_wr_ena
    -            CORE_0_AREA_PIF_1_WR_ENA: u1,
    -            /// reg_core_0_sp_spill_min_ena
    -            CORE_0_SP_SPILL_MIN_ENA: u1,
    -            /// reg_core_0_sp_spill_max_ena
    -            CORE_0_SP_SPILL_MAX_ENA: u1,
    -            /// reg_core_0_iram0_exception_monitor_ena
    -            CORE_0_IRAM0_EXCEPTION_MONITOR_ENA: u1,
    -            /// reg_core_0_dram0_exception_monitor_ena
    -            CORE_0_DRAM0_EXCEPTION_MONITOR_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x600ce004
    -        /// ASSIST_DEBUG_CORE_0_INTR_RAW_REG
    -        pub const CORE_0_INTR_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core_0_area_dram0_0_rd_raw
    -            CORE_0_AREA_DRAM0_0_RD_RAW: u1,
    -            /// reg_core_0_area_dram0_0_wr_raw
    -            CORE_0_AREA_DRAM0_0_WR_RAW: u1,
    -            /// reg_core_0_area_dram0_1_rd_raw
    -            CORE_0_AREA_DRAM0_1_RD_RAW: u1,
    -            /// reg_core_0_area_dram0_1_wr_raw
    -            CORE_0_AREA_DRAM0_1_WR_RAW: u1,
    -            /// reg_core_0_area_pif_0_rd_raw
    -            CORE_0_AREA_PIF_0_RD_RAW: u1,
    -            /// reg_core_0_area_pif_0_wr_raw
    -            CORE_0_AREA_PIF_0_WR_RAW: u1,
    -            /// reg_core_0_area_pif_1_rd_raw
    -            CORE_0_AREA_PIF_1_RD_RAW: u1,
    -            /// reg_core_0_area_pif_1_wr_raw
    -            CORE_0_AREA_PIF_1_WR_RAW: u1,
    -            /// reg_core_0_sp_spill_min_raw
    -            CORE_0_SP_SPILL_MIN_RAW: u1,
    -            /// reg_core_0_sp_spill_max_raw
    -            CORE_0_SP_SPILL_MAX_RAW: u1,
    -            /// reg_core_0_iram0_exception_monitor_raw
    -            CORE_0_IRAM0_EXCEPTION_MONITOR_RAW: u1,
    -            /// reg_core_0_dram0_exception_monitor_raw
    -            CORE_0_DRAM0_EXCEPTION_MONITOR_RAW: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x600ce008
    -        /// ASSIST_DEBUG_CORE_0_INTR_ENA_REG
    -        pub const CORE_0_INTR_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core_0_area_dram0_0_rd_intr_ena
    -            CORE_0_AREA_DRAM0_0_RD_INTR_ENA: u1,
    -            /// reg_core_0_area_dram0_0_wr_intr_ena
    -            CORE_0_AREA_DRAM0_0_WR_INTR_ENA: u1,
    -            /// reg_core_0_area_dram0_1_rd_intr_ena
    -            CORE_0_AREA_DRAM0_1_RD_INTR_ENA: u1,
    -            /// reg_core_0_area_dram0_1_wr_intr_ena
    -            CORE_0_AREA_DRAM0_1_WR_INTR_ENA: u1,
    -            /// reg_core_0_area_pif_0_rd_intr_ena
    -            CORE_0_AREA_PIF_0_RD_INTR_ENA: u1,
    -            /// reg_core_0_area_pif_0_wr_intr_ena
    -            CORE_0_AREA_PIF_0_WR_INTR_ENA: u1,
    -            /// reg_core_0_area_pif_1_rd_intr_ena
    -            CORE_0_AREA_PIF_1_RD_INTR_ENA: u1,
    -            /// reg_core_0_area_pif_1_wr_intr_ena
    -            CORE_0_AREA_PIF_1_WR_INTR_ENA: u1,
    -            /// reg_core_0_sp_spill_min_intr_ena
    -            CORE_0_SP_SPILL_MIN_INTR_ENA: u1,
    -            /// reg_core_0_sp_spill_max_intr_ena
    -            CORE_0_SP_SPILL_MAX_INTR_ENA: u1,
    -            /// reg_core_0_iram0_exception_monitor_ena
    -            CORE_0_IRAM0_EXCEPTION_MONITOR_RLS: u1,
    -            /// reg_core_0_dram0_exception_monitor_ena
    -            CORE_0_DRAM0_EXCEPTION_MONITOR_RLS: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x600ce00c
    -        /// ASSIST_DEBUG_CORE_0_INTR_CLR_REG
    -        pub const CORE_0_INTR_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core_0_area_dram0_0_rd_clr
    -            CORE_0_AREA_DRAM0_0_RD_CLR: u1,
    -            /// reg_core_0_area_dram0_0_wr_clr
    -            CORE_0_AREA_DRAM0_0_WR_CLR: u1,
    -            /// reg_core_0_area_dram0_1_rd_clr
    -            CORE_0_AREA_DRAM0_1_RD_CLR: u1,
    -            /// reg_core_0_area_dram0_1_wr_clr
    -            CORE_0_AREA_DRAM0_1_WR_CLR: u1,
    -            /// reg_core_0_area_pif_0_rd_clr
    -            CORE_0_AREA_PIF_0_RD_CLR: u1,
    -            /// reg_core_0_area_pif_0_wr_clr
    -            CORE_0_AREA_PIF_0_WR_CLR: u1,
    -            /// reg_core_0_area_pif_1_rd_clr
    -            CORE_0_AREA_PIF_1_RD_CLR: u1,
    -            /// reg_core_0_area_pif_1_wr_clr
    -            CORE_0_AREA_PIF_1_WR_CLR: u1,
    -            /// reg_core_0_sp_spill_min_clr
    -            CORE_0_SP_SPILL_MIN_CLR: u1,
    -            /// reg_core_0_sp_spill_max_clr
    -            CORE_0_SP_SPILL_MAX_CLR: u1,
    -            /// reg_core_0_iram0_exception_monitor_clr
    -            CORE_0_IRAM0_EXCEPTION_MONITOR_CLR: u1,
    -            /// reg_core_0_dram0_exception_monitor_clr
    -            CORE_0_DRAM0_EXCEPTION_MONITOR_CLR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x600ce010
    -        /// ASSIST_DEBUG_CORE_0_AREA_DRAM0_0_MIN_REG
    -        pub const CORE_0_AREA_DRAM0_0_MIN = @intToPtr(*volatile u32, base_address + 0x10);
    -
    -        /// address: 0x600ce014
    -        /// ASSIST_DEBUG_CORE_0_AREA_DRAM0_0_MAX_REG
    -        pub const CORE_0_AREA_DRAM0_0_MAX = @intToPtr(*volatile u32, base_address + 0x14);
    -
    -        /// address: 0x600ce018
    -        /// ASSIST_DEBUG_CORE_0_AREA_DRAM0_1_MIN_REG
    -        pub const CORE_0_AREA_DRAM0_1_MIN = @intToPtr(*volatile u32, base_address + 0x18);
    -
    -        /// address: 0x600ce01c
    -        /// ASSIST_DEBUG_CORE_0_AREA_DRAM0_1_MAX_REG
    -        pub const CORE_0_AREA_DRAM0_1_MAX = @intToPtr(*volatile u32, base_address + 0x1c);
    -
    -        /// address: 0x600ce020
    -        /// ASSIST_DEBUG_CORE_0_AREA_PIF_0_MIN_REG
    -        pub const CORE_0_AREA_PIF_0_MIN = @intToPtr(*volatile u32, base_address + 0x20);
    -
    -        /// address: 0x600ce024
    -        /// ASSIST_DEBUG_CORE_0_AREA_PIF_0_MAX_REG
    -        pub const CORE_0_AREA_PIF_0_MAX = @intToPtr(*volatile u32, base_address + 0x24);
    -
    -        /// address: 0x600ce028
    -        /// ASSIST_DEBUG_CORE_0_AREA_PIF_1_MIN_REG
    -        pub const CORE_0_AREA_PIF_1_MIN = @intToPtr(*volatile u32, base_address + 0x28);
    -
    -        /// address: 0x600ce02c
    -        /// ASSIST_DEBUG_CORE_0_AREA_PIF_1_MAX_REG
    -        pub const CORE_0_AREA_PIF_1_MAX = @intToPtr(*volatile u32, base_address + 0x2c);
    -
    -        /// address: 0x600ce030
    -        /// ASSIST_DEBUG_CORE_0_AREA_PC_REG
    -        pub const CORE_0_AREA_PC = @intToPtr(*volatile u32, base_address + 0x30);
    -
    -        /// address: 0x600ce034
    -        /// ASSIST_DEBUG_CORE_0_AREA_SP_REG
    -        pub const CORE_0_AREA_SP = @intToPtr(*volatile u32, base_address + 0x34);
    -
    -        /// address: 0x600ce038
    -        /// ASSIST_DEBUG_CORE_0_SP_MIN_REG
    -        pub const CORE_0_SP_MIN = @intToPtr(*volatile u32, base_address + 0x38);
    -
    -        /// address: 0x600ce03c
    -        /// ASSIST_DEBUG_CORE_0_SP_MAX_REG
    -        pub const CORE_0_SP_MAX = @intToPtr(*volatile u32, base_address + 0x3c);
    -
    -        /// address: 0x600ce040
    -        /// ASSIST_DEBUG_CORE_0_SP_PC_REG
    -        pub const CORE_0_SP_PC = @intToPtr(*volatile u32, base_address + 0x40);
    -
    -        /// address: 0x600ce044
    -        /// ASSIST_DEBUG_CORE_0_RCD_EN_REG
    -        pub const CORE_0_RCD_EN = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core_0_rcd_recorden
    -            CORE_0_RCD_RECORDEN: u1,
    -            /// reg_core_0_rcd_pdebugen
    -            CORE_0_RCD_PDEBUGEN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x600ce048
    -        /// ASSIST_DEBUG_CORE_0_RCD_PDEBUGPC_REG
    -        pub const CORE_0_RCD_PDEBUGPC = @intToPtr(*volatile u32, base_address + 0x48);
    -
    -        /// address: 0x600ce04c
    -        /// ASSIST_DEBUG_CORE_0_RCD_PDEBUGSP_REG
    -        pub const CORE_0_RCD_PDEBUGSP = @intToPtr(*volatile u32, base_address + 0x4c);
    -
    -        /// address: 0x600ce050
    -        /// ASSIST_DEBUG_CORE_0_RCD_PDEBUGSP_REG
    -        pub const CORE_0_IRAM0_EXCEPTION_MONITOR_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core_0_iram0_recording_addr_0
    -            CORE_0_IRAM0_RECORDING_ADDR_0: u24,
    -            /// reg_core_0_iram0_recording_wr_0
    -            CORE_0_IRAM0_RECORDING_WR_0: u1,
    -            /// reg_core_0_iram0_recording_loadstore_0
    -            CORE_0_IRAM0_RECORDING_LOADSTORE_0: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x600ce054
    -        /// ASSIST_DEBUG_CORE_0_IRAM0_EXCEPTION_MONITOR_1_REG
    -        pub const CORE_0_IRAM0_EXCEPTION_MONITOR_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core_0_iram0_recording_addr_1
    -            CORE_0_IRAM0_RECORDING_ADDR_1: u24,
    -            /// reg_core_0_iram0_recording_wr_1
    -            CORE_0_IRAM0_RECORDING_WR_1: u1,
    -            /// reg_core_0_iram0_recording_loadstore_1
    -            CORE_0_IRAM0_RECORDING_LOADSTORE_1: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x600ce058
    -        /// ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_0_REG
    -        pub const CORE_0_DRAM0_EXCEPTION_MONITOR_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core_0_dram0_recording_addr_0
    -            CORE_0_DRAM0_RECORDING_ADDR_0: u24,
    -            /// reg_core_0_dram0_recording_wr_0
    -            CORE_0_DRAM0_RECORDING_WR_0: u1,
    -            /// reg_core_0_dram0_recording_byteen_0
    -            CORE_0_DRAM0_RECORDING_BYTEEN_0: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x600ce05c
    -        /// ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_1_REG
    -        pub const CORE_0_DRAM0_EXCEPTION_MONITOR_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core_0_dram0_recording_pc_0
    -            CORE_0_DRAM0_RECORDING_PC_0: u32,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x600ce060
    -        /// ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_1_REG
    -        pub const CORE_0_DRAM0_EXCEPTION_MONITOR_2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core_0_dram0_recording_addr_1
    -            CORE_0_DRAM0_RECORDING_ADDR_1: u24,
    -            /// reg_core_0_dram0_recording_wr_1
    -            CORE_0_DRAM0_RECORDING_WR_1: u1,
    -            /// reg_core_0_dram0_recording_byteen_1
    -            CORE_0_DRAM0_RECORDING_BYTEEN_1: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x600ce064
    -        /// ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_3_REG
    -        pub const CORE_0_DRAM0_EXCEPTION_MONITOR_3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core_0_dram0_recording_pc_1
    -            CORE_0_DRAM0_RECORDING_PC_1: u32,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x600ce068
    -        /// ASSIST_DEBUG_CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_0_REG
    -        pub const CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core_x_iram0_dram0_limit_cycle_0
    -            CORE_X_IRAM0_DRAM0_LIMIT_CYCLE_0: u20,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0x68);
    -
    -        /// address: 0x600ce06c
    -        /// ASSIST_DEBUG_CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_1_REG
    -        pub const CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core_x_iram0_dram0_limit_cycle_1
    -            CORE_X_IRAM0_DRAM0_LIMIT_CYCLE_1: u20,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0x6c);
    -
    -        /// address: 0x600ce070
    -        /// ASSIST_DEBUG_LOG_SETTING
    -        pub const LOG_SETTING = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_log_ena
    -            LOG_ENA: u3,
    -            /// reg_log_mode
    -            LOG_MODE: u4,
    -            /// reg_log_mem_loop_enable
    -            LOG_MEM_LOOP_ENABLE: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x70);
    -
    -        /// address: 0x600ce074
    -        /// ASSIST_DEBUG_LOG_DATA_0_REG
    -        pub const LOG_DATA_0 = @intToPtr(*volatile u32, base_address + 0x74);
    -
    -        /// address: 0x600ce078
    -        /// ASSIST_DEBUG_LOG_DATA_MASK_REG
    -        pub const LOG_DATA_MASK = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_log_data_size
    -            LOG_DATA_SIZE: u16,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x78);
    -
    -        /// address: 0x600ce07c
    -        /// ASSIST_DEBUG_LOG_MIN_REG
    -        pub const LOG_MIN = @intToPtr(*volatile u32, base_address + 0x7c);
    -
    -        /// address: 0x600ce080
    -        /// ASSIST_DEBUG_LOG_MAX_REG
    -        pub const LOG_MAX = @intToPtr(*volatile u32, base_address + 0x80);
    -
    -        /// address: 0x600ce084
    -        /// ASSIST_DEBUG_LOG_MEM_START_REG
    -        pub const LOG_MEM_START = @intToPtr(*volatile u32, base_address + 0x84);
    -
    -        /// address: 0x600ce088
    -        /// ASSIST_DEBUG_LOG_MEM_END_REG
    -        pub const LOG_MEM_END = @intToPtr(*volatile u32, base_address + 0x88);
    -
    -        /// address: 0x600ce08c
    -        /// ASSIST_DEBUG_LOG_MEM_WRITING_ADDR_REG
    -        pub const LOG_MEM_WRITING_ADDR = @intToPtr(*volatile u32, base_address + 0x8c);
    -
    -        /// address: 0x600ce090
    -        /// ASSIST_DEBUG_LOG_MEM_FULL_FLAG_REG
    -        pub const LOG_MEM_FULL_FLAG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_log_mem_full_flag
    -            LOG_MEM_FULL_FLAG: u1,
    -            /// reg_clr_log_mem_full_flag
    -            CLR_LOG_MEM_FULL_FLAG: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0x90);
    -
    -        /// address: 0x600ce094
    -        /// ASSIST_DEBUG_C0RE_0_LASTPC_BEFORE_EXCEPTION
    -        pub const C0RE_0_LASTPC_BEFORE_EXCEPTION = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core_0_lastpc_before_exc
    -            CORE_0_LASTPC_BEFORE_EXC: u32,
    -        }), base_address + 0x94);
    -
    -        /// address: 0x600ce098
    -        /// ASSIST_DEBUG_C0RE_0_DEBUG_MODE
    -        pub const C0RE_0_DEBUG_MODE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core_0_debug_mode
    -            CORE_0_DEBUG_MODE: u1,
    -            /// reg_core_0_debug_module_active
    -            CORE_0_DEBUG_MODULE_ACTIVE: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0x98);
    -
    -        /// address: 0x600ce1fc
    -        /// ASSIST_DEBUG_DATE_REG
    -        pub const DATE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_assist_debug_date
    -            ASSIST_DEBUG_DATE: u28,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -        }), base_address + 0x1fc);
    -    };
    -
    -    /// DMA (Direct Memory Access) Controller
    -    pub const DMA = struct {
    -        pub const base_address = 0x6003f000;
    -
    -        /// address: 0x6003f000
    -        /// DMA_INT_RAW_CH0_REG.
    -        pub const INT_RAW_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The raw interrupt bit turns to high level when the last data pointed by one
    -            /// inlink descriptor has been received for Rx channel 0.
    -            IN_DONE_CH0_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when the last data pointed by one
    -            /// inlink descriptor has been received for Rx channel 0. For UHCI0, the raw
    -            /// interrupt bit turns to high level when the last data pointed by one inlink
    -            /// descriptor has been received and no data error is detected for Rx channel 0.
    -            IN_SUC_EOF_CH0_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when data error is detected only in
    -            /// the case that the peripheral is UHCI0 for Rx channel 0. For other peripherals,
    -            /// this raw interrupt is reserved.
    -            IN_ERR_EOF_CH0_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when the last data pointed by one
    -            /// outlink descriptor has been transmitted to peripherals for Tx channel 0.
    -            OUT_DONE_CH0_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when the last data pointed by one
    -            /// outlink descriptor has been read from memory for Tx channel 0.
    -            OUT_EOF_CH0_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when detecting inlink descriptor
    -            /// error, including owner error, the second and third word error of inlink
    -            /// descriptor for Rx channel 0.
    -            IN_DSCR_ERR_CH0_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when detecting outlink descriptor
    -            /// error, including owner error, the second and third word error of outlink
    -            /// descriptor for Tx channel 0.
    -            OUT_DSCR_ERR_CH0_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when Rx buffer pointed by inlink is
    -            /// full and receiving data is not completed, but there is no more inlink for Rx
    -            /// channel 0.
    -            IN_DSCR_EMPTY_CH0_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when data corresponding a outlink
    -            /// (includes one link descriptor or few link descriptors) is transmitted out for Tx
    -            /// channel 0.
    -            OUT_TOTAL_EOF_CH0_INT_RAW: u1,
    -            /// This raw interrupt bit turns to high level when level 1 fifo of Rx channel 0 is
    -            /// overflow.
    -            INFIFO_OVF_CH0_INT_RAW: u1,
    -            /// This raw interrupt bit turns to high level when level 1 fifo of Rx channel 0 is
    -            /// underflow.
    -            INFIFO_UDF_CH0_INT_RAW: u1,
    -            /// This raw interrupt bit turns to high level when level 1 fifo of Tx channel 0 is
    -            /// overflow.
    -            OUTFIFO_OVF_CH0_INT_RAW: u1,
    -            /// This raw interrupt bit turns to high level when level 1 fifo of Tx channel 0 is
    -            /// underflow.
    -            OUTFIFO_UDF_CH0_INT_RAW: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x6003f004
    -        /// DMA_INT_ST_CH0_REG.
    -        pub const INT_ST_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The raw interrupt status bit for the IN_DONE_CH_INT interrupt.
    -            IN_DONE_CH0_INT_ST: u1,
    -            /// The raw interrupt status bit for the IN_SUC_EOF_CH_INT interrupt.
    -            IN_SUC_EOF_CH0_INT_ST: u1,
    -            /// The raw interrupt status bit for the IN_ERR_EOF_CH_INT interrupt.
    -            IN_ERR_EOF_CH0_INT_ST: u1,
    -            /// The raw interrupt status bit for the OUT_DONE_CH_INT interrupt.
    -            OUT_DONE_CH0_INT_ST: u1,
    -            /// The raw interrupt status bit for the OUT_EOF_CH_INT interrupt.
    -            OUT_EOF_CH0_INT_ST: u1,
    -            /// The raw interrupt status bit for the IN_DSCR_ERR_CH_INT interrupt.
    -            IN_DSCR_ERR_CH0_INT_ST: u1,
    -            /// The raw interrupt status bit for the OUT_DSCR_ERR_CH_INT interrupt.
    -            OUT_DSCR_ERR_CH0_INT_ST: u1,
    -            /// The raw interrupt status bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    -            IN_DSCR_EMPTY_CH0_INT_ST: u1,
    -            /// The raw interrupt status bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    -            OUT_TOTAL_EOF_CH0_INT_ST: u1,
    -            /// The raw interrupt status bit for the INFIFO_OVF_L1_CH_INT interrupt.
    -            INFIFO_OVF_CH0_INT_ST: u1,
    -            /// The raw interrupt status bit for the INFIFO_UDF_L1_CH_INT interrupt.
    -            INFIFO_UDF_CH0_INT_ST: u1,
    -            /// The raw interrupt status bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    -            OUTFIFO_OVF_CH0_INT_ST: u1,
    -            /// The raw interrupt status bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    -            OUTFIFO_UDF_CH0_INT_ST: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x6003f008
    -        /// DMA_INT_ENA_CH0_REG.
    -        pub const INT_ENA_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The interrupt enable bit for the IN_DONE_CH_INT interrupt.
    -            IN_DONE_CH0_INT_ENA: u1,
    -            /// The interrupt enable bit for the IN_SUC_EOF_CH_INT interrupt.
    -            IN_SUC_EOF_CH0_INT_ENA: u1,
    -            /// The interrupt enable bit for the IN_ERR_EOF_CH_INT interrupt.
    -            IN_ERR_EOF_CH0_INT_ENA: u1,
    -            /// The interrupt enable bit for the OUT_DONE_CH_INT interrupt.
    -            OUT_DONE_CH0_INT_ENA: u1,
    -            /// The interrupt enable bit for the OUT_EOF_CH_INT interrupt.
    -            OUT_EOF_CH0_INT_ENA: u1,
    -            /// The interrupt enable bit for the IN_DSCR_ERR_CH_INT interrupt.
    -            IN_DSCR_ERR_CH0_INT_ENA: u1,
    -            /// The interrupt enable bit for the OUT_DSCR_ERR_CH_INT interrupt.
    -            OUT_DSCR_ERR_CH0_INT_ENA: u1,
    -            /// The interrupt enable bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    -            IN_DSCR_EMPTY_CH0_INT_ENA: u1,
    -            /// The interrupt enable bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    -            OUT_TOTAL_EOF_CH0_INT_ENA: u1,
    -            /// The interrupt enable bit for the INFIFO_OVF_L1_CH_INT interrupt.
    -            INFIFO_OVF_CH0_INT_ENA: u1,
    -            /// The interrupt enable bit for the INFIFO_UDF_L1_CH_INT interrupt.
    -            INFIFO_UDF_CH0_INT_ENA: u1,
    -            /// The interrupt enable bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    -            OUTFIFO_OVF_CH0_INT_ENA: u1,
    -            /// The interrupt enable bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    -            OUTFIFO_UDF_CH0_INT_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x6003f00c
    -        /// DMA_INT_CLR_CH0_REG.
    -        pub const INT_CLR_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Set this bit to clear the IN_DONE_CH_INT interrupt.
    -            IN_DONE_CH0_INT_CLR: u1,
    -            /// Set this bit to clear the IN_SUC_EOF_CH_INT interrupt.
    -            IN_SUC_EOF_CH0_INT_CLR: u1,
    -            /// Set this bit to clear the IN_ERR_EOF_CH_INT interrupt.
    -            IN_ERR_EOF_CH0_INT_CLR: u1,
    -            /// Set this bit to clear the OUT_DONE_CH_INT interrupt.
    -            OUT_DONE_CH0_INT_CLR: u1,
    -            /// Set this bit to clear the OUT_EOF_CH_INT interrupt.
    -            OUT_EOF_CH0_INT_CLR: u1,
    -            /// Set this bit to clear the IN_DSCR_ERR_CH_INT interrupt.
    -            IN_DSCR_ERR_CH0_INT_CLR: u1,
    -            /// Set this bit to clear the OUT_DSCR_ERR_CH_INT interrupt.
    -            OUT_DSCR_ERR_CH0_INT_CLR: u1,
    -            /// Set this bit to clear the IN_DSCR_EMPTY_CH_INT interrupt.
    -            IN_DSCR_EMPTY_CH0_INT_CLR: u1,
    -            /// Set this bit to clear the OUT_TOTAL_EOF_CH_INT interrupt.
    -            OUT_TOTAL_EOF_CH0_INT_CLR: u1,
    -            /// Set this bit to clear the INFIFO_OVF_L1_CH_INT interrupt.
    -            INFIFO_OVF_CH0_INT_CLR: u1,
    -            /// Set this bit to clear the INFIFO_UDF_L1_CH_INT interrupt.
    -            INFIFO_UDF_CH0_INT_CLR: u1,
    -            /// Set this bit to clear the OUTFIFO_OVF_L1_CH_INT interrupt.
    -            OUTFIFO_OVF_CH0_INT_CLR: u1,
    -            /// Set this bit to clear the OUTFIFO_UDF_L1_CH_INT interrupt.
    -            OUTFIFO_UDF_CH0_INT_CLR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x6003f010
    -        /// DMA_INT_RAW_CH1_REG.
    -        pub const INT_RAW_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The raw interrupt bit turns to high level when the last data pointed by one
    -            /// inlink descriptor has been received for Rx channel 1.
    -            IN_DONE_CH1_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when the last data pointed by one
    -            /// inlink descriptor has been received for Rx channel 1. For UHCI0, the raw
    -            /// interrupt bit turns to high level when the last data pointed by one inlink
    -            /// descriptor has been received and no data error is detected for Rx channel 1.
    -            IN_SUC_EOF_CH1_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when data error is detected only in
    -            /// the case that the peripheral is UHCI0 for Rx channel 1. For other peripherals,
    -            /// this raw interrupt is reserved.
    -            IN_ERR_EOF_CH1_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when the last data pointed by one
    -            /// outlink descriptor has been transmitted to peripherals for Tx channel 1.
    -            OUT_DONE_CH1_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when the last data pointed by one
    -            /// outlink descriptor has been read from memory for Tx channel 1.
    -            OUT_EOF_CH1_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when detecting inlink descriptor
    -            /// error, including owner error, the second and third word error of inlink
    -            /// descriptor for Rx channel 1.
    -            IN_DSCR_ERR_CH1_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when detecting outlink descriptor
    -            /// error, including owner error, the second and third word error of outlink
    -            /// descriptor for Tx channel 1.
    -            OUT_DSCR_ERR_CH1_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when Rx buffer pointed by inlink is
    -            /// full and receiving data is not completed, but there is no more inlink for Rx
    -            /// channel 1.
    -            IN_DSCR_EMPTY_CH1_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when data corresponding a outlink
    -            /// (includes one link descriptor or few link descriptors) is transmitted out for Tx
    -            /// channel 1.
    -            OUT_TOTAL_EOF_CH1_INT_RAW: u1,
    -            /// This raw interrupt bit turns to high level when level 1 fifo of Rx channel 1 is
    -            /// overflow.
    -            INFIFO_OVF_CH1_INT_RAW: u1,
    -            /// This raw interrupt bit turns to high level when level 1 fifo of Rx channel 1 is
    -            /// underflow.
    -            INFIFO_UDF_CH1_INT_RAW: u1,
    -            /// This raw interrupt bit turns to high level when level 1 fifo of Tx channel 1 is
    -            /// overflow.
    -            OUTFIFO_OVF_CH1_INT_RAW: u1,
    -            /// This raw interrupt bit turns to high level when level 1 fifo of Tx channel 1 is
    -            /// underflow.
    -            OUTFIFO_UDF_CH1_INT_RAW: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x6003f014
    -        /// DMA_INT_ST_CH1_REG.
    -        pub const INT_ST_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The raw interrupt status bit for the IN_DONE_CH_INT interrupt.
    -            IN_DONE_CH1_INT_ST: u1,
    -            /// The raw interrupt status bit for the IN_SUC_EOF_CH_INT interrupt.
    -            IN_SUC_EOF_CH1_INT_ST: u1,
    -            /// The raw interrupt status bit for the IN_ERR_EOF_CH_INT interrupt.
    -            IN_ERR_EOF_CH1_INT_ST: u1,
    -            /// The raw interrupt status bit for the OUT_DONE_CH_INT interrupt.
    -            OUT_DONE_CH1_INT_ST: u1,
    -            /// The raw interrupt status bit for the OUT_EOF_CH_INT interrupt.
    -            OUT_EOF_CH1_INT_ST: u1,
    -            /// The raw interrupt status bit for the IN_DSCR_ERR_CH_INT interrupt.
    -            IN_DSCR_ERR_CH1_INT_ST: u1,
    -            /// The raw interrupt status bit for the OUT_DSCR_ERR_CH_INT interrupt.
    -            OUT_DSCR_ERR_CH1_INT_ST: u1,
    -            /// The raw interrupt status bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    -            IN_DSCR_EMPTY_CH1_INT_ST: u1,
    -            /// The raw interrupt status bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    -            OUT_TOTAL_EOF_CH1_INT_ST: u1,
    -            /// The raw interrupt status bit for the INFIFO_OVF_L1_CH_INT interrupt.
    -            INFIFO_OVF_CH1_INT_ST: u1,
    -            /// The raw interrupt status bit for the INFIFO_UDF_L1_CH_INT interrupt.
    -            INFIFO_UDF_CH1_INT_ST: u1,
    -            /// The raw interrupt status bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    -            OUTFIFO_OVF_CH1_INT_ST: u1,
    -            /// The raw interrupt status bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    -            OUTFIFO_UDF_CH1_INT_ST: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x6003f018
    -        /// DMA_INT_ENA_CH1_REG.
    -        pub const INT_ENA_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The interrupt enable bit for the IN_DONE_CH_INT interrupt.
    -            IN_DONE_CH1_INT_ENA: u1,
    -            /// The interrupt enable bit for the IN_SUC_EOF_CH_INT interrupt.
    -            IN_SUC_EOF_CH1_INT_ENA: u1,
    -            /// The interrupt enable bit for the IN_ERR_EOF_CH_INT interrupt.
    -            IN_ERR_EOF_CH1_INT_ENA: u1,
    -            /// The interrupt enable bit for the OUT_DONE_CH_INT interrupt.
    -            OUT_DONE_CH1_INT_ENA: u1,
    -            /// The interrupt enable bit for the OUT_EOF_CH_INT interrupt.
    -            OUT_EOF_CH1_INT_ENA: u1,
    -            /// The interrupt enable bit for the IN_DSCR_ERR_CH_INT interrupt.
    -            IN_DSCR_ERR_CH1_INT_ENA: u1,
    -            /// The interrupt enable bit for the OUT_DSCR_ERR_CH_INT interrupt.
    -            OUT_DSCR_ERR_CH1_INT_ENA: u1,
    -            /// The interrupt enable bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    -            IN_DSCR_EMPTY_CH1_INT_ENA: u1,
    -            /// The interrupt enable bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    -            OUT_TOTAL_EOF_CH1_INT_ENA: u1,
    -            /// The interrupt enable bit for the INFIFO_OVF_L1_CH_INT interrupt.
    -            INFIFO_OVF_CH1_INT_ENA: u1,
    -            /// The interrupt enable bit for the INFIFO_UDF_L1_CH_INT interrupt.
    -            INFIFO_UDF_CH1_INT_ENA: u1,
    -            /// The interrupt enable bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    -            OUTFIFO_OVF_CH1_INT_ENA: u1,
    -            /// The interrupt enable bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    -            OUTFIFO_UDF_CH1_INT_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x6003f01c
    -        /// DMA_INT_CLR_CH1_REG.
    -        pub const INT_CLR_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Set this bit to clear the IN_DONE_CH_INT interrupt.
    -            IN_DONE_CH1_INT_CLR: u1,
    -            /// Set this bit to clear the IN_SUC_EOF_CH_INT interrupt.
    -            IN_SUC_EOF_CH1_INT_CLR: u1,
    -            /// Set this bit to clear the IN_ERR_EOF_CH_INT interrupt.
    -            IN_ERR_EOF_CH1_INT_CLR: u1,
    -            /// Set this bit to clear the OUT_DONE_CH_INT interrupt.
    -            OUT_DONE_CH1_INT_CLR: u1,
    -            /// Set this bit to clear the OUT_EOF_CH_INT interrupt.
    -            OUT_EOF_CH1_INT_CLR: u1,
    -            /// Set this bit to clear the IN_DSCR_ERR_CH_INT interrupt.
    -            IN_DSCR_ERR_CH1_INT_CLR: u1,
    -            /// Set this bit to clear the OUT_DSCR_ERR_CH_INT interrupt.
    -            OUT_DSCR_ERR_CH1_INT_CLR: u1,
    -            /// Set this bit to clear the IN_DSCR_EMPTY_CH_INT interrupt.
    -            IN_DSCR_EMPTY_CH1_INT_CLR: u1,
    -            /// Set this bit to clear the OUT_TOTAL_EOF_CH_INT interrupt.
    -            OUT_TOTAL_EOF_CH1_INT_CLR: u1,
    -            /// Set this bit to clear the INFIFO_OVF_L1_CH_INT interrupt.
    -            INFIFO_OVF_CH1_INT_CLR: u1,
    -            /// Set this bit to clear the INFIFO_UDF_L1_CH_INT interrupt.
    -            INFIFO_UDF_CH1_INT_CLR: u1,
    -            /// Set this bit to clear the OUTFIFO_OVF_L1_CH_INT interrupt.
    -            OUTFIFO_OVF_CH1_INT_CLR: u1,
    -            /// Set this bit to clear the OUTFIFO_UDF_L1_CH_INT interrupt.
    -            OUTFIFO_UDF_CH1_INT_CLR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x6003f020
    -        /// DMA_INT_RAW_CH2_REG.
    -        pub const INT_RAW_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The raw interrupt bit turns to high level when the last data pointed by one
    -            /// inlink descriptor has been received for Rx channel 2.
    -            IN_DONE_CH2_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when the last data pointed by one
    -            /// inlink descriptor has been received for Rx channel 2. For UHCI0, the raw
    -            /// interrupt bit turns to high level when the last data pointed by one inlink
    -            /// descriptor has been received and no data error is detected for Rx channel 2.
    -            IN_SUC_EOF_CH2_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when data error is detected only in
    -            /// the case that the peripheral is UHCI0 for Rx channel 2. For other peripherals,
    -            /// this raw interrupt is reserved.
    -            IN_ERR_EOF_CH2_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when the last data pointed by one
    -            /// outlink descriptor has been transmitted to peripherals for Tx channel 2.
    -            OUT_DONE_CH2_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when the last data pointed by one
    -            /// outlink descriptor has been read from memory for Tx channel 2.
    -            OUT_EOF_CH2_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when detecting inlink descriptor
    -            /// error, including owner error, the second and third word error of inlink
    -            /// descriptor for Rx channel 2.
    -            IN_DSCR_ERR_CH2_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when detecting outlink descriptor
    -            /// error, including owner error, the second and third word error of outlink
    -            /// descriptor for Tx channel 2.
    -            OUT_DSCR_ERR_CH2_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when Rx buffer pointed by inlink is
    -            /// full and receiving data is not completed, but there is no more inlink for Rx
    -            /// channel 2.
    -            IN_DSCR_EMPTY_CH2_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when data corresponding a outlink
    -            /// (includes one link descriptor or few link descriptors) is transmitted out for Tx
    -            /// channel 2.
    -            OUT_TOTAL_EOF_CH2_INT_RAW: u1,
    -            /// This raw interrupt bit turns to high level when level 1 fifo of Rx channel 2 is
    -            /// overflow.
    -            INFIFO_OVF_CH2_INT_RAW: u1,
    -            /// This raw interrupt bit turns to high level when level 1 fifo of Rx channel 2 is
    -            /// underflow.
    -            INFIFO_UDF_CH2_INT_RAW: u1,
    -            /// This raw interrupt bit turns to high level when level 1 fifo of Tx channel 2 is
    -            /// overflow.
    -            OUTFIFO_OVF_CH2_INT_RAW: u1,
    -            /// This raw interrupt bit turns to high level when level 1 fifo of Tx channel 2 is
    -            /// underflow.
    -            OUTFIFO_UDF_CH2_INT_RAW: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x6003f024
    -        /// DMA_INT_ST_CH2_REG.
    -        pub const INT_ST_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The raw interrupt status bit for the IN_DONE_CH_INT interrupt.
    -            IN_DONE_CH2_INT_ST: u1,
    -            /// The raw interrupt status bit for the IN_SUC_EOF_CH_INT interrupt.
    -            IN_SUC_EOF_CH2_INT_ST: u1,
    -            /// The raw interrupt status bit for the IN_ERR_EOF_CH_INT interrupt.
    -            IN_ERR_EOF_CH2_INT_ST: u1,
    -            /// The raw interrupt status bit for the OUT_DONE_CH_INT interrupt.
    -            OUT_DONE_CH2_INT_ST: u1,
    -            /// The raw interrupt status bit for the OUT_EOF_CH_INT interrupt.
    -            OUT_EOF_CH2_INT_ST: u1,
    -            /// The raw interrupt status bit for the IN_DSCR_ERR_CH_INT interrupt.
    -            IN_DSCR_ERR_CH2_INT_ST: u1,
    -            /// The raw interrupt status bit for the OUT_DSCR_ERR_CH_INT interrupt.
    -            OUT_DSCR_ERR_CH2_INT_ST: u1,
    -            /// The raw interrupt status bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    -            IN_DSCR_EMPTY_CH2_INT_ST: u1,
    -            /// The raw interrupt status bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    -            OUT_TOTAL_EOF_CH2_INT_ST: u1,
    -            /// The raw interrupt status bit for the INFIFO_OVF_L1_CH_INT interrupt.
    -            INFIFO_OVF_CH2_INT_ST: u1,
    -            /// The raw interrupt status bit for the INFIFO_UDF_L1_CH_INT interrupt.
    -            INFIFO_UDF_CH2_INT_ST: u1,
    -            /// The raw interrupt status bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    -            OUTFIFO_OVF_CH2_INT_ST: u1,
    -            /// The raw interrupt status bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    -            OUTFIFO_UDF_CH2_INT_ST: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x6003f028
    -        /// DMA_INT_ENA_CH2_REG.
    -        pub const INT_ENA_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The interrupt enable bit for the IN_DONE_CH_INT interrupt.
    -            IN_DONE_CH2_INT_ENA: u1,
    -            /// The interrupt enable bit for the IN_SUC_EOF_CH_INT interrupt.
    -            IN_SUC_EOF_CH2_INT_ENA: u1,
    -            /// The interrupt enable bit for the IN_ERR_EOF_CH_INT interrupt.
    -            IN_ERR_EOF_CH2_INT_ENA: u1,
    -            /// The interrupt enable bit for the OUT_DONE_CH_INT interrupt.
    -            OUT_DONE_CH2_INT_ENA: u1,
    -            /// The interrupt enable bit for the OUT_EOF_CH_INT interrupt.
    -            OUT_EOF_CH2_INT_ENA: u1,
    -            /// The interrupt enable bit for the IN_DSCR_ERR_CH_INT interrupt.
    -            IN_DSCR_ERR_CH2_INT_ENA: u1,
    -            /// The interrupt enable bit for the OUT_DSCR_ERR_CH_INT interrupt.
    -            OUT_DSCR_ERR_CH2_INT_ENA: u1,
    -            /// The interrupt enable bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    -            IN_DSCR_EMPTY_CH2_INT_ENA: u1,
    -            /// The interrupt enable bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    -            OUT_TOTAL_EOF_CH2_INT_ENA: u1,
    -            /// The interrupt enable bit for the INFIFO_OVF_L1_CH_INT interrupt.
    -            INFIFO_OVF_CH2_INT_ENA: u1,
    -            /// The interrupt enable bit for the INFIFO_UDF_L1_CH_INT interrupt.
    -            INFIFO_UDF_CH2_INT_ENA: u1,
    -            /// The interrupt enable bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    -            OUTFIFO_OVF_CH2_INT_ENA: u1,
    -            /// The interrupt enable bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    -            OUTFIFO_UDF_CH2_INT_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x6003f02c
    -        /// DMA_INT_CLR_CH2_REG.
    -        pub const INT_CLR_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Set this bit to clear the IN_DONE_CH_INT interrupt.
    -            IN_DONE_CH2_INT_CLR: u1,
    -            /// Set this bit to clear the IN_SUC_EOF_CH_INT interrupt.
    -            IN_SUC_EOF_CH2_INT_CLR: u1,
    -            /// Set this bit to clear the IN_ERR_EOF_CH_INT interrupt.
    -            IN_ERR_EOF_CH2_INT_CLR: u1,
    -            /// Set this bit to clear the OUT_DONE_CH_INT interrupt.
    -            OUT_DONE_CH2_INT_CLR: u1,
    -            /// Set this bit to clear the OUT_EOF_CH_INT interrupt.
    -            OUT_EOF_CH2_INT_CLR: u1,
    -            /// Set this bit to clear the IN_DSCR_ERR_CH_INT interrupt.
    -            IN_DSCR_ERR_CH2_INT_CLR: u1,
    -            /// Set this bit to clear the OUT_DSCR_ERR_CH_INT interrupt.
    -            OUT_DSCR_ERR_CH2_INT_CLR: u1,
    -            /// Set this bit to clear the IN_DSCR_EMPTY_CH_INT interrupt.
    -            IN_DSCR_EMPTY_CH2_INT_CLR: u1,
    -            /// Set this bit to clear the OUT_TOTAL_EOF_CH_INT interrupt.
    -            OUT_TOTAL_EOF_CH2_INT_CLR: u1,
    -            /// Set this bit to clear the INFIFO_OVF_L1_CH_INT interrupt.
    -            INFIFO_OVF_CH2_INT_CLR: u1,
    -            /// Set this bit to clear the INFIFO_UDF_L1_CH_INT interrupt.
    -            INFIFO_UDF_CH2_INT_CLR: u1,
    -            /// Set this bit to clear the OUTFIFO_OVF_L1_CH_INT interrupt.
    -            OUTFIFO_OVF_CH2_INT_CLR: u1,
    -            /// Set this bit to clear the OUTFIFO_UDF_L1_CH_INT interrupt.
    -            OUTFIFO_UDF_CH2_INT_CLR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x6003f040
    -        /// DMA_AHB_TEST_REG.
    -        pub const AHB_TEST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reserved
    -            AHB_TESTMODE: u3,
    -            reserved0: u1,
    -            /// reserved
    -            AHB_TESTADDR: u2,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x6003f044
    -        /// DMA_MISC_CONF_REG.
    -        pub const MISC_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Set this bit, then clear this bit to reset the internal ahb FSM.
    -            AHBM_RST_INTER: u1,
    -            reserved0: u1,
    -            /// Set this bit to disable priority arbitration function.
    -            ARB_PRI_DIS: u1,
    -            /// reg_clk_en
    -            CLK_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x6003f048
    -        /// DMA_DATE_REG.
    -        pub const DATE = @intToPtr(*volatile u32, base_address + 0x48);
    -
    -        /// address: 0x6003f070
    -        /// DMA_IN_CONF0_CH0_REG.
    -        pub const IN_CONF0_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This bit is used to reset DMA channel 0 Rx FSM and Rx FIFO pointer.
    -            IN_RST_CH0: u1,
    -            /// reserved
    -            IN_LOOP_TEST_CH0: u1,
    -            /// Set this bit to 1 to enable INCR burst transfer for Rx channel 0 reading link
    -            /// descriptor when accessing internal SRAM.
    -            INDSCR_BURST_EN_CH0: u1,
    -            /// Set this bit to 1 to enable INCR burst transfer for Rx channel 0 receiving data
    -            /// when accessing internal SRAM.
    -            IN_DATA_BURST_EN_CH0: u1,
    -            /// Set this bit 1 to enable automatic transmitting data from memory to memory via
    -            /// DMA.
    -            MEM_TRANS_EN_CH0: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -        }), base_address + 0x70);
    -
    -        /// address: 0x6003f074
    -        /// DMA_IN_CONF1_CH0_REG.
    -        pub const IN_CONF1_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            /// Set this bit to enable checking the owner attribute of the link descriptor.
    -            IN_CHECK_OWNER_CH0: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -        }), base_address + 0x74);
    -
    -        /// address: 0x6003f078
    -        /// DMA_INFIFO_STATUS_CH0_REG.
    -        pub const INFIFO_STATUS_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// L1 Rx FIFO full signal for Rx channel 0.
    -            INFIFO_FULL_CH0: u1,
    -            /// L1 Rx FIFO empty signal for Rx channel 0.
    -            INFIFO_EMPTY_CH0: u1,
    -            /// The register stores the byte number of the data in L1 Rx FIFO for Rx channel 0.
    -            INFIFO_CNT_CH0: u6,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            /// reserved
    -            IN_REMAIN_UNDER_1B_CH0: u1,
    -            /// reserved
    -            IN_REMAIN_UNDER_2B_CH0: u1,
    -            /// reserved
    -            IN_REMAIN_UNDER_3B_CH0: u1,
    -            /// reserved
    -            IN_REMAIN_UNDER_4B_CH0: u1,
    -            /// reserved
    -            IN_BUF_HUNGRY_CH0: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -        }), base_address + 0x78);
    -
    -        /// address: 0x6003f07c
    -        /// DMA_IN_POP_CH0_REG.
    -        pub const IN_POP_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the data popping from DMA FIFO.
    -            INFIFO_RDATA_CH0: u12,
    -            /// Set this bit to pop data from DMA FIFO.
    -            INFIFO_POP_CH0: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -        }), base_address + 0x7c);
    -
    -        /// address: 0x6003f080
    -        /// DMA_IN_LINK_CH0_REG.
    -        pub const IN_LINK_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the 20 least significant bits of the first inlink
    -            /// descriptor's address.
    -            INLINK_ADDR_CH0: u20,
    -            /// Set this bit to return to current inlink descriptor's address, when there are
    -            /// some errors in current receiving data.
    -            INLINK_AUTO_RET_CH0: u1,
    -            /// Set this bit to stop dealing with the inlink descriptors.
    -            INLINK_STOP_CH0: u1,
    -            /// Set this bit to start dealing with the inlink descriptors.
    -            INLINK_START_CH0: u1,
    -            /// Set this bit to mount a new inlink descriptor.
    -            INLINK_RESTART_CH0: u1,
    -            /// 1: the inlink descriptor's FSM is in idle state. 0: the inlink descriptor's FSM
    -            /// is working.
    -            INLINK_PARK_CH0: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -        }), base_address + 0x80);
    -
    -        /// address: 0x6003f084
    -        /// DMA_IN_STATE_CH0_REG.
    -        pub const IN_STATE_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the current inlink descriptor's address.
    -            INLINK_DSCR_ADDR_CH0: u18,
    -            /// reserved
    -            IN_DSCR_STATE_CH0: u2,
    -            /// reserved
    -            IN_STATE_CH0: u3,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -        }), base_address + 0x84);
    -
    -        /// address: 0x6003f088
    -        /// DMA_IN_SUC_EOF_DES_ADDR_CH0_REG.
    -        pub const IN_SUC_EOF_DES_ADDR_CH0 = @intToPtr(*volatile u32, base_address + 0x88);
    -
    -        /// address: 0x6003f08c
    -        /// DMA_IN_ERR_EOF_DES_ADDR_CH0_REG.
    -        pub const IN_ERR_EOF_DES_ADDR_CH0 = @intToPtr(*volatile u32, base_address + 0x8c);
    -
    -        /// address: 0x6003f090
    -        /// DMA_IN_DSCR_CH0_REG.
    -        pub const IN_DSCR_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The address of the current inlink descriptor x.
    -            INLINK_DSCR_CH0: u32,
    -        }), base_address + 0x90);
    -
    -        /// address: 0x6003f094
    -        /// DMA_IN_DSCR_BF0_CH0_REG.
    -        pub const IN_DSCR_BF0_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The address of the last inlink descriptor x-1.
    -            INLINK_DSCR_BF0_CH0: u32,
    -        }), base_address + 0x94);
    -
    -        /// address: 0x6003f098
    -        /// DMA_IN_DSCR_BF1_CH0_REG.
    -        pub const IN_DSCR_BF1_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The address of the second-to-last inlink descriptor x-2.
    -            INLINK_DSCR_BF1_CH0: u32,
    -        }), base_address + 0x98);
    -
    -        /// address: 0x6003f09c
    -        /// DMA_IN_PRI_CH0_REG.
    -        pub const IN_PRI_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The priority of Rx channel 0. The larger of the value, the higher of the
    -            /// priority.
    -            RX_PRI_CH0: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x9c);
    -
    -        /// address: 0x6003f0a0
    -        /// DMA_IN_PERI_SEL_CH0_REG.
    -        pub const IN_PERI_SEL_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register is used to select peripheral for Rx channel 0. 0:SPI2. 1:
    -            /// reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8:
    -            /// ADC_DAC.
    -            PERI_IN_SEL_CH0: u6,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -        }), base_address + 0xa0);
    -
    -        /// address: 0x6003f0d0
    -        /// DMA_OUT_CONF0_CH0_REG.
    -        pub const OUT_CONF0_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This bit is used to reset DMA channel 0 Tx FSM and Tx FIFO pointer.
    -            OUT_RST_CH0: u1,
    -            /// reserved
    -            OUT_LOOP_TEST_CH0: u1,
    -            /// Set this bit to enable automatic outlink-writeback when all the data in tx
    -            /// buffer has been transmitted.
    -            OUT_AUTO_WRBACK_CH0: u1,
    -            /// EOF flag generation mode when transmitting data. 1: EOF flag for Tx channel 0 is
    -            /// generated when data need to transmit has been popped from FIFO in DMA
    -            OUT_EOF_MODE_CH0: u1,
    -            /// Set this bit to 1 to enable INCR burst transfer for Tx channel 0 reading link
    -            /// descriptor when accessing internal SRAM.
    -            OUTDSCR_BURST_EN_CH0: u1,
    -            /// Set this bit to 1 to enable INCR burst transfer for Tx channel 0 transmitting
    -            /// data when accessing internal SRAM.
    -            OUT_DATA_BURST_EN_CH0: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -        }), base_address + 0xd0);
    -
    -        /// address: 0x6003f0d4
    -        /// DMA_OUT_CONF1_CH0_REG.
    -        pub const OUT_CONF1_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            /// Set this bit to enable checking the owner attribute of the link descriptor.
    -            OUT_CHECK_OWNER_CH0: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -        }), base_address + 0xd4);
    -
    -        /// address: 0x6003f0d8
    -        /// DMA_OUTFIFO_STATUS_CH0_REG.
    -        pub const OUTFIFO_STATUS_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// L1 Tx FIFO full signal for Tx channel 0.
    -            OUTFIFO_FULL_CH0: u1,
    -            /// L1 Tx FIFO empty signal for Tx channel 0.
    -            OUTFIFO_EMPTY_CH0: u1,
    -            /// The register stores the byte number of the data in L1 Tx FIFO for Tx channel 0.
    -            OUTFIFO_CNT_CH0: u6,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            /// reserved
    -            OUT_REMAIN_UNDER_1B_CH0: u1,
    -            /// reserved
    -            OUT_REMAIN_UNDER_2B_CH0: u1,
    -            /// reserved
    -            OUT_REMAIN_UNDER_3B_CH0: u1,
    -            /// reserved
    -            OUT_REMAIN_UNDER_4B_CH0: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -        }), base_address + 0xd8);
    -
    -        /// address: 0x6003f0dc
    -        /// DMA_OUT_PUSH_CH0_REG.
    -        pub const OUT_PUSH_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the data that need to be pushed into DMA FIFO.
    -            OUTFIFO_WDATA_CH0: u9,
    -            /// Set this bit to push data into DMA FIFO.
    -            OUTFIFO_PUSH_CH0: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -        }), base_address + 0xdc);
    -
    -        /// address: 0x6003f0e0
    -        /// DMA_OUT_LINK_CH0_REG.
    -        pub const OUT_LINK_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the 20 least significant bits of the first outlink
    -            /// descriptor's address.
    -            OUTLINK_ADDR_CH0: u20,
    -            /// Set this bit to stop dealing with the outlink descriptors.
    -            OUTLINK_STOP_CH0: u1,
    -            /// Set this bit to start dealing with the outlink descriptors.
    -            OUTLINK_START_CH0: u1,
    -            /// Set this bit to restart a new outlink from the last address.
    -            OUTLINK_RESTART_CH0: u1,
    -            /// 1: the outlink descriptor's FSM is in idle state. 0: the outlink descriptor's
    -            /// FSM is working.
    -            OUTLINK_PARK_CH0: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -        }), base_address + 0xe0);
    -
    -        /// address: 0x6003f0e4
    -        /// DMA_OUT_STATE_CH0_REG.
    -        pub const OUT_STATE_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the current outlink descriptor's address.
    -            OUTLINK_DSCR_ADDR_CH0: u18,
    -            /// reserved
    -            OUT_DSCR_STATE_CH0: u2,
    -            /// reserved
    -            OUT_STATE_CH0: u3,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -        }), base_address + 0xe4);
    -
    -        /// address: 0x6003f0e8
    -        /// DMA_OUT_EOF_DES_ADDR_CH0_REG.
    -        pub const OUT_EOF_DES_ADDR_CH0 = @intToPtr(*volatile u32, base_address + 0xe8);
    -
    -        /// address: 0x6003f0ec
    -        /// DMA_OUT_EOF_BFR_DES_ADDR_CH0_REG.
    -        pub const OUT_EOF_BFR_DES_ADDR_CH0 = @intToPtr(*volatile u32, base_address + 0xec);
    -
    -        /// address: 0x6003f0f0
    -        /// DMA_OUT_DSCR_CH0_REG.
    -        pub const OUT_DSCR_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The address of the current outlink descriptor y.
    -            OUTLINK_DSCR_CH0: u32,
    -        }), base_address + 0xf0);
    -
    -        /// address: 0x6003f0f4
    -        /// DMA_OUT_DSCR_BF0_CH0_REG.
    -        pub const OUT_DSCR_BF0_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The address of the last outlink descriptor y-1.
    -            OUTLINK_DSCR_BF0_CH0: u32,
    -        }), base_address + 0xf4);
    -
    -        /// address: 0x6003f0f8
    -        /// DMA_OUT_DSCR_BF1_CH0_REG.
    -        pub const OUT_DSCR_BF1_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The address of the second-to-last inlink descriptor x-2.
    -            OUTLINK_DSCR_BF1_CH0: u32,
    -        }), base_address + 0xf8);
    -
    -        /// address: 0x6003f0fc
    -        /// DMA_OUT_PRI_CH0_REG.
    -        pub const OUT_PRI_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The priority of Tx channel 0. The larger of the value, the higher of the
    -            /// priority.
    -            TX_PRI_CH0: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0xfc);
    -
    -        /// address: 0x6003f100
    -        /// DMA_OUT_PERI_SEL_CH0_REG.
    -        pub const OUT_PERI_SEL_CH0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register is used to select peripheral for Tx channel 0. 0:SPI2. 1:
    -            /// reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8:
    -            /// ADC_DAC.
    -            PERI_OUT_SEL_CH0: u6,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -        }), base_address + 0x100);
    -
    -        /// address: 0x6003f130
    -        /// DMA_IN_CONF0_CH1_REG.
    -        pub const IN_CONF0_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This bit is used to reset DMA channel 1 Rx FSM and Rx FIFO pointer.
    -            IN_RST_CH1: u1,
    -            /// reserved
    -            IN_LOOP_TEST_CH1: u1,
    -            /// Set this bit to 1 to enable INCR burst transfer for Rx channel 1 reading link
    -            /// descriptor when accessing internal SRAM.
    -            INDSCR_BURST_EN_CH1: u1,
    -            /// Set this bit to 1 to enable INCR burst transfer for Rx channel 1 receiving data
    -            /// when accessing internal SRAM.
    -            IN_DATA_BURST_EN_CH1: u1,
    -            /// Set this bit 1 to enable automatic transmitting data from memory to memory via
    -            /// DMA.
    -            MEM_TRANS_EN_CH1: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -        }), base_address + 0x130);
    -
    -        /// address: 0x6003f134
    -        /// DMA_IN_CONF1_CH1_REG.
    -        pub const IN_CONF1_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            /// Set this bit to enable checking the owner attribute of the link descriptor.
    -            IN_CHECK_OWNER_CH1: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -        }), base_address + 0x134);
    -
    -        /// address: 0x6003f138
    -        /// DMA_INFIFO_STATUS_CH1_REG.
    -        pub const INFIFO_STATUS_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// L1 Rx FIFO full signal for Rx channel 1.
    -            INFIFO_FULL_CH1: u1,
    -            /// L1 Rx FIFO empty signal for Rx channel 1.
    -            INFIFO_EMPTY_CH1: u1,
    -            /// The register stores the byte number of the data in L1 Rx FIFO for Rx channel 1.
    -            INFIFO_CNT_CH1: u6,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            /// reserved
    -            IN_REMAIN_UNDER_1B_CH1: u1,
    -            /// reserved
    -            IN_REMAIN_UNDER_2B_CH1: u1,
    -            /// reserved
    -            IN_REMAIN_UNDER_3B_CH1: u1,
    -            /// reserved
    -            IN_REMAIN_UNDER_4B_CH1: u1,
    -            /// reserved
    -            IN_BUF_HUNGRY_CH1: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -        }), base_address + 0x138);
    -
    -        /// address: 0x6003f13c
    -        /// DMA_IN_POP_CH1_REG.
    -        pub const IN_POP_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the data popping from DMA FIFO.
    -            INFIFO_RDATA_CH1: u12,
    -            /// Set this bit to pop data from DMA FIFO.
    -            INFIFO_POP_CH1: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -        }), base_address + 0x13c);
    -
    -        /// address: 0x6003f140
    -        /// DMA_IN_LINK_CH1_REG.
    -        pub const IN_LINK_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the 20 least significant bits of the first inlink
    -            /// descriptor's address.
    -            INLINK_ADDR_CH1: u20,
    -            /// Set this bit to return to current inlink descriptor's address, when there are
    -            /// some errors in current receiving data.
    -            INLINK_AUTO_RET_CH1: u1,
    -            /// Set this bit to stop dealing with the inlink descriptors.
    -            INLINK_STOP_CH1: u1,
    -            /// Set this bit to start dealing with the inlink descriptors.
    -            INLINK_START_CH1: u1,
    -            /// Set this bit to mount a new inlink descriptor.
    -            INLINK_RESTART_CH1: u1,
    -            /// 1: the inlink descriptor's FSM is in idle state. 0: the inlink descriptor's FSM
    -            /// is working.
    -            INLINK_PARK_CH1: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -        }), base_address + 0x140);
    -
    -        /// address: 0x6003f144
    -        /// DMA_IN_STATE_CH1_REG.
    -        pub const IN_STATE_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the current inlink descriptor's address.
    -            INLINK_DSCR_ADDR_CH1: u18,
    -            /// reserved
    -            IN_DSCR_STATE_CH1: u2,
    -            /// reserved
    -            IN_STATE_CH1: u3,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -        }), base_address + 0x144);
    -
    -        /// address: 0x6003f148
    -        /// DMA_IN_SUC_EOF_DES_ADDR_CH1_REG.
    -        pub const IN_SUC_EOF_DES_ADDR_CH1 = @intToPtr(*volatile u32, base_address + 0x148);
    -
    -        /// address: 0x6003f14c
    -        /// DMA_IN_ERR_EOF_DES_ADDR_CH1_REG.
    -        pub const IN_ERR_EOF_DES_ADDR_CH1 = @intToPtr(*volatile u32, base_address + 0x14c);
    -
    -        /// address: 0x6003f150
    -        /// DMA_IN_DSCR_CH1_REG.
    -        pub const IN_DSCR_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The address of the current inlink descriptor x.
    -            INLINK_DSCR_CH1: u32,
    -        }), base_address + 0x150);
    -
    -        /// address: 0x6003f154
    -        /// DMA_IN_DSCR_BF0_CH1_REG.
    -        pub const IN_DSCR_BF0_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The address of the last inlink descriptor x-1.
    -            INLINK_DSCR_BF0_CH1: u32,
    -        }), base_address + 0x154);
    -
    -        /// address: 0x6003f158
    -        /// DMA_IN_DSCR_BF1_CH1_REG.
    -        pub const IN_DSCR_BF1_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The address of the second-to-last inlink descriptor x-2.
    -            INLINK_DSCR_BF1_CH1: u32,
    -        }), base_address + 0x158);
    -
    -        /// address: 0x6003f15c
    -        /// DMA_IN_PRI_CH1_REG.
    -        pub const IN_PRI_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The priority of Rx channel 1. The larger of the value, the higher of the
    -            /// priority.
    -            RX_PRI_CH1: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x15c);
    -
    -        /// address: 0x6003f160
    -        /// DMA_IN_PERI_SEL_CH1_REG.
    -        pub const IN_PERI_SEL_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register is used to select peripheral for Rx channel 1. 0:SPI2. 1:
    -            /// reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8:
    -            /// ADC_DAC.
    -            PERI_IN_SEL_CH1: u6,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -        }), base_address + 0x160);
    -
    -        /// address: 0x6003f190
    -        /// DMA_OUT_CONF0_CH1_REG.
    -        pub const OUT_CONF0_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This bit is used to reset DMA channel 1 Tx FSM and Tx FIFO pointer.
    -            OUT_RST_CH1: u1,
    -            /// reserved
    -            OUT_LOOP_TEST_CH1: u1,
    -            /// Set this bit to enable automatic outlink-writeback when all the data in tx
    -            /// buffer has been transmitted.
    -            OUT_AUTO_WRBACK_CH1: u1,
    -            /// EOF flag generation mode when transmitting data. 1: EOF flag for Tx channel 1 is
    -            /// generated when data need to transmit has been popped from FIFO in DMA
    -            OUT_EOF_MODE_CH1: u1,
    -            /// Set this bit to 1 to enable INCR burst transfer for Tx channel 1 reading link
    -            /// descriptor when accessing internal SRAM.
    -            OUTDSCR_BURST_EN_CH1: u1,
    -            /// Set this bit to 1 to enable INCR burst transfer for Tx channel 1 transmitting
    -            /// data when accessing internal SRAM.
    -            OUT_DATA_BURST_EN_CH1: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -        }), base_address + 0x190);
    -
    -        /// address: 0x6003f194
    -        /// DMA_OUT_CONF1_CH1_REG.
    -        pub const OUT_CONF1_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            /// Set this bit to enable checking the owner attribute of the link descriptor.
    -            OUT_CHECK_OWNER_CH1: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -        }), base_address + 0x194);
    -
    -        /// address: 0x6003f198
    -        /// DMA_OUTFIFO_STATUS_CH1_REG.
    -        pub const OUTFIFO_STATUS_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// L1 Tx FIFO full signal for Tx channel 1.
    -            OUTFIFO_FULL_CH1: u1,
    -            /// L1 Tx FIFO empty signal for Tx channel 1.
    -            OUTFIFO_EMPTY_CH1: u1,
    -            /// The register stores the byte number of the data in L1 Tx FIFO for Tx channel 1.
    -            OUTFIFO_CNT_CH1: u6,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            /// reserved
    -            OUT_REMAIN_UNDER_1B_CH1: u1,
    -            /// reserved
    -            OUT_REMAIN_UNDER_2B_CH1: u1,
    -            /// reserved
    -            OUT_REMAIN_UNDER_3B_CH1: u1,
    -            /// reserved
    -            OUT_REMAIN_UNDER_4B_CH1: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -        }), base_address + 0x198);
    -
    -        /// address: 0x6003f19c
    -        /// DMA_OUT_PUSH_CH1_REG.
    -        pub const OUT_PUSH_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the data that need to be pushed into DMA FIFO.
    -            OUTFIFO_WDATA_CH1: u9,
    -            /// Set this bit to push data into DMA FIFO.
    -            OUTFIFO_PUSH_CH1: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -        }), base_address + 0x19c);
    -
    -        /// address: 0x6003f1a0
    -        /// DMA_OUT_LINK_CH1_REG.
    -        pub const OUT_LINK_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the 20 least significant bits of the first outlink
    -            /// descriptor's address.
    -            OUTLINK_ADDR_CH1: u20,
    -            /// Set this bit to stop dealing with the outlink descriptors.
    -            OUTLINK_STOP_CH1: u1,
    -            /// Set this bit to start dealing with the outlink descriptors.
    -            OUTLINK_START_CH1: u1,
    -            /// Set this bit to restart a new outlink from the last address.
    -            OUTLINK_RESTART_CH1: u1,
    -            /// 1: the outlink descriptor's FSM is in idle state. 0: the outlink descriptor's
    -            /// FSM is working.
    -            OUTLINK_PARK_CH1: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -        }), base_address + 0x1a0);
    -
    -        /// address: 0x6003f1a4
    -        /// DMA_OUT_STATE_CH1_REG.
    -        pub const OUT_STATE_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the current outlink descriptor's address.
    -            OUTLINK_DSCR_ADDR_CH1: u18,
    -            /// reserved
    -            OUT_DSCR_STATE_CH1: u2,
    -            /// reserved
    -            OUT_STATE_CH1: u3,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -        }), base_address + 0x1a4);
    -
    -        /// address: 0x6003f1a8
    -        /// DMA_OUT_EOF_DES_ADDR_CH1_REG.
    -        pub const OUT_EOF_DES_ADDR_CH1 = @intToPtr(*volatile u32, base_address + 0x1a8);
    -
    -        /// address: 0x6003f1ac
    -        /// DMA_OUT_EOF_BFR_DES_ADDR_CH1_REG.
    -        pub const OUT_EOF_BFR_DES_ADDR_CH1 = @intToPtr(*volatile u32, base_address + 0x1ac);
    -
    -        /// address: 0x6003f1b0
    -        /// DMA_OUT_DSCR_CH1_REG.
    -        pub const OUT_DSCR_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The address of the current outlink descriptor y.
    -            OUTLINK_DSCR_CH1: u32,
    -        }), base_address + 0x1b0);
    -
    -        /// address: 0x6003f1b4
    -        /// DMA_OUT_DSCR_BF0_CH1_REG.
    -        pub const OUT_DSCR_BF0_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The address of the last outlink descriptor y-1.
    -            OUTLINK_DSCR_BF0_CH1: u32,
    -        }), base_address + 0x1b4);
    -
    -        /// address: 0x6003f1b8
    -        /// DMA_OUT_DSCR_BF1_CH1_REG.
    -        pub const OUT_DSCR_BF1_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The address of the second-to-last inlink descriptor x-2.
    -            OUTLINK_DSCR_BF1_CH1: u32,
    -        }), base_address + 0x1b8);
    -
    -        /// address: 0x6003f1bc
    -        /// DMA_OUT_PRI_CH1_REG.
    -        pub const OUT_PRI_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The priority of Tx channel 1. The larger of the value, the higher of the
    -            /// priority.
    -            TX_PRI_CH1: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x1bc);
    -
    -        /// address: 0x6003f1c0
    -        /// DMA_OUT_PERI_SEL_CH1_REG.
    -        pub const OUT_PERI_SEL_CH1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register is used to select peripheral for Tx channel 1. 0:SPI2. 1:
    -            /// reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8:
    -            /// ADC_DAC.
    -            PERI_OUT_SEL_CH1: u6,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -        }), base_address + 0x1c0);
    -
    -        /// address: 0x6003f1f0
    -        /// DMA_IN_CONF0_CH2_REG.
    -        pub const IN_CONF0_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This bit is used to reset DMA channel 2 Rx FSM and Rx FIFO pointer.
    -            IN_RST_CH2: u1,
    -            /// reserved
    -            IN_LOOP_TEST_CH2: u1,
    -            /// Set this bit to 1 to enable INCR burst transfer for Rx channel 2 reading link
    -            /// descriptor when accessing internal SRAM.
    -            INDSCR_BURST_EN_CH2: u1,
    -            /// Set this bit to 1 to enable INCR burst transfer for Rx channel 2 receiving data
    -            /// when accessing internal SRAM.
    -            IN_DATA_BURST_EN_CH2: u1,
    -            /// Set this bit 1 to enable automatic transmitting data from memory to memory via
    -            /// DMA.
    -            MEM_TRANS_EN_CH2: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -        }), base_address + 0x1f0);
    -
    -        /// address: 0x6003f1f4
    -        /// DMA_IN_CONF1_CH2_REG.
    -        pub const IN_CONF1_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            /// Set this bit to enable checking the owner attribute of the link descriptor.
    -            IN_CHECK_OWNER_CH2: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -        }), base_address + 0x1f4);
    -
    -        /// address: 0x6003f1f8
    -        /// DMA_INFIFO_STATUS_CH2_REG.
    -        pub const INFIFO_STATUS_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// L1 Rx FIFO full signal for Rx channel 2.
    -            INFIFO_FULL_CH2: u1,
    -            /// L1 Rx FIFO empty signal for Rx channel 2.
    -            INFIFO_EMPTY_CH2: u1,
    -            /// The register stores the byte number of the data in L1 Rx FIFO for Rx channel 2.
    -            INFIFO_CNT_CH2: u6,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            /// reserved
    -            IN_REMAIN_UNDER_1B_CH2: u1,
    -            /// reserved
    -            IN_REMAIN_UNDER_2B_CH2: u1,
    -            /// reserved
    -            IN_REMAIN_UNDER_3B_CH2: u1,
    -            /// reserved
    -            IN_REMAIN_UNDER_4B_CH2: u1,
    -            /// reserved
    -            IN_BUF_HUNGRY_CH2: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -        }), base_address + 0x1f8);
    -
    -        /// address: 0x6003f1fc
    -        /// DMA_IN_POP_CH2_REG.
    -        pub const IN_POP_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the data popping from DMA FIFO.
    -            INFIFO_RDATA_CH2: u12,
    -            /// Set this bit to pop data from DMA FIFO.
    -            INFIFO_POP_CH2: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -        }), base_address + 0x1fc);
    -
    -        /// address: 0x6003f200
    -        /// DMA_IN_LINK_CH2_REG.
    -        pub const IN_LINK_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the 20 least significant bits of the first inlink
    -            /// descriptor's address.
    -            INLINK_ADDR_CH2: u20,
    -            /// Set this bit to return to current inlink descriptor's address, when there are
    -            /// some errors in current receiving data.
    -            INLINK_AUTO_RET_CH2: u1,
    -            /// Set this bit to stop dealing with the inlink descriptors.
    -            INLINK_STOP_CH2: u1,
    -            /// Set this bit to start dealing with the inlink descriptors.
    -            INLINK_START_CH2: u1,
    -            /// Set this bit to mount a new inlink descriptor.
    -            INLINK_RESTART_CH2: u1,
    -            /// 1: the inlink descriptor's FSM is in idle state. 0: the inlink descriptor's FSM
    -            /// is working.
    -            INLINK_PARK_CH2: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -        }), base_address + 0x200);
    -
    -        /// address: 0x6003f204
    -        /// DMA_IN_STATE_CH2_REG.
    -        pub const IN_STATE_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the current inlink descriptor's address.
    -            INLINK_DSCR_ADDR_CH2: u18,
    -            /// reserved
    -            IN_DSCR_STATE_CH2: u2,
    -            /// reserved
    -            IN_STATE_CH2: u3,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -        }), base_address + 0x204);
    -
    -        /// address: 0x6003f208
    -        /// DMA_IN_SUC_EOF_DES_ADDR_CH2_REG.
    -        pub const IN_SUC_EOF_DES_ADDR_CH2 = @intToPtr(*volatile u32, base_address + 0x208);
    -
    -        /// address: 0x6003f20c
    -        /// DMA_IN_ERR_EOF_DES_ADDR_CH2_REG.
    -        pub const IN_ERR_EOF_DES_ADDR_CH2 = @intToPtr(*volatile u32, base_address + 0x20c);
    -
    -        /// address: 0x6003f210
    -        /// DMA_IN_DSCR_CH2_REG.
    -        pub const IN_DSCR_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The address of the current inlink descriptor x.
    -            INLINK_DSCR_CH2: u32,
    -        }), base_address + 0x210);
    -
    -        /// address: 0x6003f214
    -        /// DMA_IN_DSCR_BF0_CH2_REG.
    -        pub const IN_DSCR_BF0_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The address of the last inlink descriptor x-1.
    -            INLINK_DSCR_BF0_CH2: u32,
    -        }), base_address + 0x214);
    -
    -        /// address: 0x6003f218
    -        /// DMA_IN_DSCR_BF1_CH2_REG.
    -        pub const IN_DSCR_BF1_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The address of the second-to-last inlink descriptor x-2.
    -            INLINK_DSCR_BF1_CH2: u32,
    -        }), base_address + 0x218);
    -
    -        /// address: 0x6003f21c
    -        /// DMA_IN_PRI_CH2_REG.
    -        pub const IN_PRI_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The priority of Rx channel 2. The larger of the value, the higher of the
    -            /// priority.
    -            RX_PRI_CH2: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x21c);
    -
    -        /// address: 0x6003f220
    -        /// DMA_IN_PERI_SEL_CH2_REG.
    -        pub const IN_PERI_SEL_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register is used to select peripheral for Rx channel 2. 0:SPI2. 1:
    -            /// reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8:
    -            /// ADC_DAC.
    -            PERI_IN_SEL_CH2: u6,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -        }), base_address + 0x220);
    -
    -        /// address: 0x6003f250
    -        /// DMA_OUT_CONF0_CH2_REG.
    -        pub const OUT_CONF0_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This bit is used to reset DMA channel 2 Tx FSM and Tx FIFO pointer.
    -            OUT_RST_CH2: u1,
    -            /// reserved
    -            OUT_LOOP_TEST_CH2: u1,
    -            /// Set this bit to enable automatic outlink-writeback when all the data in tx
    -            /// buffer has been transmitted.
    -            OUT_AUTO_WRBACK_CH2: u1,
    -            /// EOF flag generation mode when transmitting data. 1: EOF flag for Tx channel 2 is
    -            /// generated when data need to transmit has been popped from FIFO in DMA
    -            OUT_EOF_MODE_CH2: u1,
    -            /// Set this bit to 1 to enable INCR burst transfer for Tx channel 2 reading link
    -            /// descriptor when accessing internal SRAM.
    -            OUTDSCR_BURST_EN_CH2: u1,
    -            /// Set this bit to 1 to enable INCR burst transfer for Tx channel 2 transmitting
    -            /// data when accessing internal SRAM.
    -            OUT_DATA_BURST_EN_CH2: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -        }), base_address + 0x250);
    -
    -        /// address: 0x6003f254
    -        /// DMA_OUT_CONF1_CH2_REG.
    -        pub const OUT_CONF1_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            /// Set this bit to enable checking the owner attribute of the link descriptor.
    -            OUT_CHECK_OWNER_CH2: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -        }), base_address + 0x254);
    -
    -        /// address: 0x6003f258
    -        /// DMA_OUTFIFO_STATUS_CH2_REG.
    -        pub const OUTFIFO_STATUS_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// L1 Tx FIFO full signal for Tx channel 2.
    -            OUTFIFO_FULL_CH2: u1,
    -            /// L1 Tx FIFO empty signal for Tx channel 2.
    -            OUTFIFO_EMPTY_CH2: u1,
    -            /// The register stores the byte number of the data in L1 Tx FIFO for Tx channel 2.
    -            OUTFIFO_CNT_CH2: u6,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            /// reserved
    -            OUT_REMAIN_UNDER_1B_CH2: u1,
    -            /// reserved
    -            OUT_REMAIN_UNDER_2B_CH2: u1,
    -            /// reserved
    -            OUT_REMAIN_UNDER_3B_CH2: u1,
    -            /// reserved
    -            OUT_REMAIN_UNDER_4B_CH2: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -        }), base_address + 0x258);
    -
    -        /// address: 0x6003f25c
    -        /// DMA_OUT_PUSH_CH2_REG.
    -        pub const OUT_PUSH_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the data that need to be pushed into DMA FIFO.
    -            OUTFIFO_WDATA_CH2: u9,
    -            /// Set this bit to push data into DMA FIFO.
    -            OUTFIFO_PUSH_CH2: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -        }), base_address + 0x25c);
    -
    -        /// address: 0x6003f260
    -        /// DMA_OUT_LINK_CH2_REG.
    -        pub const OUT_LINK_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the 20 least significant bits of the first outlink
    -            /// descriptor's address.
    -            OUTLINK_ADDR_CH2: u20,
    -            /// Set this bit to stop dealing with the outlink descriptors.
    -            OUTLINK_STOP_CH2: u1,
    -            /// Set this bit to start dealing with the outlink descriptors.
    -            OUTLINK_START_CH2: u1,
    -            /// Set this bit to restart a new outlink from the last address.
    -            OUTLINK_RESTART_CH2: u1,
    -            /// 1: the outlink descriptor's FSM is in idle state. 0: the outlink descriptor's
    -            /// FSM is working.
    -            OUTLINK_PARK_CH2: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -        }), base_address + 0x260);
    -
    -        /// address: 0x6003f264
    -        /// DMA_OUT_STATE_CH2_REG.
    -        pub const OUT_STATE_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the current outlink descriptor's address.
    -            OUTLINK_DSCR_ADDR_CH2: u18,
    -            /// reserved
    -            OUT_DSCR_STATE_CH2: u2,
    -            /// reserved
    -            OUT_STATE_CH2: u3,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -        }), base_address + 0x264);
    -
    -        /// address: 0x6003f268
    -        /// DMA_OUT_EOF_DES_ADDR_CH2_REG.
    -        pub const OUT_EOF_DES_ADDR_CH2 = @intToPtr(*volatile u32, base_address + 0x268);
    -
    -        /// address: 0x6003f26c
    -        /// DMA_OUT_EOF_BFR_DES_ADDR_CH2_REG.
    -        pub const OUT_EOF_BFR_DES_ADDR_CH2 = @intToPtr(*volatile u32, base_address + 0x26c);
    -
    -        /// address: 0x6003f270
    -        /// DMA_OUT_DSCR_CH2_REG.
    -        pub const OUT_DSCR_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The address of the current outlink descriptor y.
    -            OUTLINK_DSCR_CH2: u32,
    -        }), base_address + 0x270);
    -
    -        /// address: 0x6003f274
    -        /// DMA_OUT_DSCR_BF0_CH2_REG.
    -        pub const OUT_DSCR_BF0_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The address of the last outlink descriptor y-1.
    -            OUTLINK_DSCR_BF0_CH2: u32,
    -        }), base_address + 0x274);
    -
    -        /// address: 0x6003f278
    -        /// DMA_OUT_DSCR_BF1_CH2_REG.
    -        pub const OUT_DSCR_BF1_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The address of the second-to-last inlink descriptor x-2.
    -            OUTLINK_DSCR_BF1_CH2: u32,
    -        }), base_address + 0x278);
    -
    -        /// address: 0x6003f27c
    -        /// DMA_OUT_PRI_CH2_REG.
    -        pub const OUT_PRI_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The priority of Tx channel 2. The larger of the value, the higher of the
    -            /// priority.
    -            TX_PRI_CH2: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x27c);
    -
    -        /// address: 0x6003f280
    -        /// DMA_OUT_PERI_SEL_CH2_REG.
    -        pub const OUT_PERI_SEL_CH2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register is used to select peripheral for Tx channel 2. 0:SPI2. 1:
    -            /// reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8:
    -            /// ADC_DAC.
    -            PERI_OUT_SEL_CH2: u6,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -        }), base_address + 0x280);
    -    };
    -
    -    /// Digital Signature
    -    pub const DS = struct {
    -        pub const base_address = 0x6003d000;
    -
    -        /// address: 0x6003d000
    -        /// memory that stores Y
    -        pub const Y_MEM = @intToPtr(*volatile [512]u8, base_address + 0x0);
    -
    -        /// address: 0x6003d200
    -        /// memory that stores M
    -        pub const M_MEM = @intToPtr(*volatile [512]u8, base_address + 0x200);
    -
    -        /// address: 0x6003d400
    -        /// memory that stores Rb
    -        pub const RB_MEM = @intToPtr(*volatile [512]u8, base_address + 0x400);
    -
    -        /// address: 0x6003d600
    -        /// memory that stores BOX
    -        pub const BOX_MEM = @intToPtr(*volatile [48]u8, base_address + 0x600);
    -
    -        /// address: 0x6003d800
    -        /// memory that stores X
    -        pub const X_MEM = @intToPtr(*volatile [512]u8, base_address + 0x800);
    -
    -        /// address: 0x6003da00
    -        /// memory that stores Z
    -        pub const Z_MEM = @intToPtr(*volatile [512]u8, base_address + 0xa00);
    -
    -        /// address: 0x6003de00
    -        /// DS start control register
    -        pub const SET_START = @intToPtr(*volatile MmioInt(32, u1), base_address + 0xe00);
    -
    -        /// address: 0x6003de04
    -        /// DS continue control register
    -        pub const SET_CONTINUE = @intToPtr(*volatile MmioInt(32, u1), base_address + 0xe04);
    -
    -        /// address: 0x6003de08
    -        /// DS finish control register
    -        pub const SET_FINISH = @intToPtr(*volatile MmioInt(32, u1), base_address + 0xe08);
    -
    -        /// address: 0x6003de0c
    -        /// DS query busy register
    -        pub const QUERY_BUSY = @intToPtr(*volatile MmioInt(32, u1), base_address + 0xe0c);
    -
    -        /// address: 0x6003de10
    -        /// DS query key-wrong counter register
    -        pub const QUERY_KEY_WRONG = @intToPtr(*volatile MmioInt(32, u4), base_address + 0xe10);
    -
    -        /// address: 0x6003de14
    -        /// DS query check result register
    -        pub const QUERY_CHECK = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// MD checkout result. 1'b0: MD check pass, 1'b1: MD check fail
    -            MD_ERROR: u1,
    -            /// padding checkout result. 1'b0: a good padding, 1'b1: a bad padding
    -            PADDING_BAD: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0xe14);
    -
    -        /// address: 0x6003de20
    -        /// DS version control register
    -        pub const DATE = @intToPtr(*volatile MmioInt(32, u30), base_address + 0xe20);
    -    };
    -
    -    /// eFuse Controller
    -    pub const EFUSE = struct {
    -        pub const base_address = 0x60008800;
    -
    -        /// address: 0x60008800
    -        /// Register 0 that stores data to be programmed.
    -        pub const PGM_DATA0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The content of the 0th 32-bit data to be programmed.
    -            PGM_DATA_0: u32,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x60008804
    -        /// Register 1 that stores data to be programmed.
    -        pub const PGM_DATA1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The content of the 1st 32-bit data to be programmed.
    -            PGM_DATA_1: u32,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x60008808
    -        /// Register 2 that stores data to be programmed.
    -        pub const PGM_DATA2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The content of the 2nd 32-bit data to be programmed.
    -            PGM_DATA_2: u32,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x6000880c
    -        /// Register 3 that stores data to be programmed.
    -        pub const PGM_DATA3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The content of the 3rd 32-bit data to be programmed.
    -            PGM_DATA_3: u32,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x60008810
    -        /// Register 4 that stores data to be programmed.
    -        pub const PGM_DATA4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The content of the 4th 32-bit data to be programmed.
    -            PGM_DATA_4: u32,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x60008814
    -        /// Register 5 that stores data to be programmed.
    -        pub const PGM_DATA5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The content of the 5th 32-bit data to be programmed.
    -            PGM_DATA_5: u32,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x60008818
    -        /// Register 6 that stores data to be programmed.
    -        pub const PGM_DATA6 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The content of the 6th 32-bit data to be programmed.
    -            PGM_DATA_6: u32,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x6000881c
    -        /// Register 7 that stores data to be programmed.
    -        pub const PGM_DATA7 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The content of the 7th 32-bit data to be programmed.
    -            PGM_DATA_7: u32,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x60008820
    -        /// Register 0 that stores the RS code to be programmed.
    -        pub const PGM_CHECK_VALUE0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The content of the 0th 32-bit RS code to be programmed.
    -            PGM_RS_DATA_0: u32,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x60008824
    -        /// Register 1 that stores the RS code to be programmed.
    -        pub const PGM_CHECK_VALUE1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The content of the 1st 32-bit RS code to be programmed.
    -            PGM_RS_DATA_1: u32,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x60008828
    -        /// Register 2 that stores the RS code to be programmed.
    -        pub const PGM_CHECK_VALUE2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The content of the 2nd 32-bit RS code to be programmed.
    -            PGM_RS_DATA_2: u32,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x6000882c
    -        /// BLOCK0 data register 0.
    -        pub const RD_WR_DIS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Disable programming of individual eFuses.
    -            WR_DIS: u32,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x60008830
    -        /// BLOCK0 data register 1.
    -        pub const RD_REPEAT_DATA0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Set this bit to disable reading from BlOCK4-10.
    -            RD_DIS: u7,
    -            /// Set this bit to disable boot from RTC RAM.
    -            DIS_RTC_RAM_BOOT: u1,
    -            /// Set this bit to disable Icache.
    -            DIS_ICACHE: u1,
    -            /// Set this bit to disable function of usb switch to jtag in module of usb device.
    -            DIS_USB_JTAG: u1,
    -            /// Set this bit to disable Icache in download mode (boot_mode[3:0] is 0, 1, 2, 3,
    -            /// 6, 7).
    -            DIS_DOWNLOAD_ICACHE: u1,
    -            /// Set this bit to disable usb device.
    -            DIS_USB_DEVICE: u1,
    -            /// Set this bit to disable the function that forces chip into download mode.
    -            DIS_FORCE_DOWNLOAD: u1,
    -            /// Reserved (used for four backups method).
    -            RPT4_RESERVED6: u1,
    -            /// Set this bit to disable CAN function.
    -            DIS_CAN: u1,
    -            /// Set this bit to enable selection between usb_to_jtag and pad_to_jtag through
    -            /// strapping gpio10 when both reg_dis_usb_jtag and reg_dis_pad_jtag are equal to 0.
    -            JTAG_SEL_ENABLE: u1,
    -            /// Set these bits to disable JTAG in the soft way (odd number 1 means disable ).
    -            /// JTAG can be enabled in HMAC module.
    -            SOFT_DIS_JTAG: u3,
    -            /// Set this bit to disable JTAG in the hard way. JTAG is disabled permanently.
    -            DIS_PAD_JTAG: u1,
    -            /// Set this bit to disable flash encryption when in download boot modes.
    -            DIS_DOWNLOAD_MANUAL_ENCRYPT: u1,
    -            /// Controls single-end input threshold vrefh, 1.76 V to 2 V with step of 80 mV,
    -            /// stored in eFuse.
    -            USB_DREFH: u2,
    -            /// Controls single-end input threshold vrefl, 0.8 V to 1.04 V with step of 80 mV,
    -            /// stored in eFuse.
    -            USB_DREFL: u2,
    -            /// Set this bit to exchange USB D+ and D- pins.
    -            USB_EXCHG_PINS: u1,
    -            /// Set this bit to vdd spi pin function as gpio.
    -            VDD_SPI_AS_GPIO: u1,
    -            /// Enable btlc gpio.
    -            BTLC_GPIO_ENABLE: u2,
    -            /// Set this bit to enable power glitch function.
    -            POWERGLITCH_EN: u1,
    -            /// Sample delay configuration of power glitch.
    -            POWER_GLITCH_DSENSE: u2,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x60008834
    -        /// BLOCK0 data register 2.
    -        pub const RD_REPEAT_DATA1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Reserved (used for four backups method).
    -            RPT4_RESERVED2: u16,
    -            /// Selects RTC watchdog timeout threshold, in unit of slow clock cycle. 0: 40000.
    -            /// 1: 80000. 2: 160000. 3:320000.
    -            WDT_DELAY_SEL: u2,
    -            /// Set this bit to enable SPI boot encrypt/decrypt. Odd number of 1: enable. even
    -            /// number of 1: disable.
    -            SPI_BOOT_CRYPT_CNT: u3,
    -            /// Set this bit to enable revoking first secure boot key.
    -            SECURE_BOOT_KEY_REVOKE0: u1,
    -            /// Set this bit to enable revoking second secure boot key.
    -            SECURE_BOOT_KEY_REVOKE1: u1,
    -            /// Set this bit to enable revoking third secure boot key.
    -            SECURE_BOOT_KEY_REVOKE2: u1,
    -            /// Purpose of Key0.
    -            KEY_PURPOSE_0: u4,
    -            /// Purpose of Key1.
    -            KEY_PURPOSE_1: u4,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x60008838
    -        /// BLOCK0 data register 3.
    -        pub const RD_REPEAT_DATA2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Purpose of Key2.
    -            KEY_PURPOSE_2: u4,
    -            /// Purpose of Key3.
    -            KEY_PURPOSE_3: u4,
    -            /// Purpose of Key4.
    -            KEY_PURPOSE_4: u4,
    -            /// Purpose of Key5.
    -            KEY_PURPOSE_5: u4,
    -            /// Reserved (used for four backups method).
    -            RPT4_RESERVED3: u4,
    -            /// Set this bit to enable secure boot.
    -            SECURE_BOOT_EN: u1,
    -            /// Set this bit to enable revoking aggressive secure boot.
    -            SECURE_BOOT_AGGRESSIVE_REVOKE: u1,
    -            /// Reserved (used for four backups method).
    -            RPT4_RESERVED0: u6,
    -            /// Configures flash waiting time after power-up, in unit of ms. If the value is
    -            /// less than 15, the waiting time is the configurable value; Otherwise, the waiting
    -            /// time is twice the configurable value.
    -            FLASH_TPUW: u4,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x6000883c
    -        /// BLOCK0 data register 4.
    -        pub const RD_REPEAT_DATA3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Set this bit to disable download mode (boot_mode[3:0] = 0, 1, 2, 3, 6, 7).
    -            DIS_DOWNLOAD_MODE: u1,
    -            /// Set this bit to disable Legacy SPI boot mode (boot_mode[3:0] = 4).
    -            DIS_LEGACY_SPI_BOOT: u1,
    -            /// Selectes the default UART print channel. 0: UART0. 1: UART1.
    -            UART_PRINT_CHANNEL: u1,
    -            /// Set ECC mode in ROM, 0: ROM would Enable Flash ECC 16to18 byte mode. 1:ROM would
    -            /// use 16to17 byte mode.
    -            FLASH_ECC_MODE: u1,
    -            /// Set this bit to disable UART download mode through USB.
    -            DIS_USB_DOWNLOAD_MODE: u1,
    -            /// Set this bit to enable secure UART download mode.
    -            ENABLE_SECURITY_DOWNLOAD: u1,
    -            /// Set the default UARTboot message output mode. 00: Enabled. 01: Enabled when
    -            /// GPIO8 is low at reset. 10: Enabled when GPIO8 is high at reset. 11:disabled.
    -            UART_PRINT_CONTROL: u2,
    -            /// GPIO33-GPIO37 power supply selection in ROM code. 0: VDD3P3_CPU. 1: VDD_SPI.
    -            PIN_POWER_SELECTION: u1,
    -            /// Set the maximum lines of SPI flash. 0: four lines. 1: eight lines.
    -            FLASH_TYPE: u1,
    -            /// Set Flash page size.
    -            FLASH_PAGE_SIZE: u2,
    -            /// Set 1 to enable ECC for flash boot.
    -            FLASH_ECC_EN: u1,
    -            /// Set this bit to force ROM code to send a resume command during SPI boot.
    -            FORCE_SEND_RESUME: u1,
    -            /// Secure version (used by ESP-IDF anti-rollback feature).
    -            SECURE_VERSION: u16,
    -            /// Reserved (used for four backups method).
    -            RPT4_RESERVED1: u2,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x60008840
    -        /// BLOCK0 data register 5.
    -        pub const RD_REPEAT_DATA4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Reserved (used for four backups method).
    -            RPT4_RESERVED4: u24,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x60008844
    -        /// BLOCK1 data register 0.
    -        pub const RD_MAC_SPI_SYS_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the low 32 bits of MAC address.
    -            MAC_0: u32,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x60008848
    -        /// BLOCK1 data register 1.
    -        pub const RD_MAC_SPI_SYS_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the high 16 bits of MAC address.
    -            MAC_1: u16,
    -            /// Stores the zeroth part of SPI_PAD_CONF.
    -            SPI_PAD_CONF_0: u16,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x6000884c
    -        /// BLOCK1 data register 2.
    -        pub const RD_MAC_SPI_SYS_2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the first part of SPI_PAD_CONF.
    -            SPI_PAD_CONF_1: u32,
    -        }), base_address + 0x4c);
    -
    -        /// address: 0x60008850
    -        /// BLOCK1 data register 3.
    -        pub const RD_MAC_SPI_SYS_3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the second part of SPI_PAD_CONF.
    -            SPI_PAD_CONF_2: u18,
    -            /// Stores the fist 14 bits of the zeroth part of system data.
    -            SYS_DATA_PART0_0: u14,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x60008854
    -        /// BLOCK1 data register 4.
    -        pub const RD_MAC_SPI_SYS_4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the fist 32 bits of the zeroth part of system data.
    -            SYS_DATA_PART0_1: u32,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x60008858
    -        /// BLOCK1 data register 5.
    -        pub const RD_MAC_SPI_SYS_5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the second 32 bits of the zeroth part of system data.
    -            SYS_DATA_PART0_2: u32,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x6000885c
    -        /// Register 0 of BLOCK2 (system).
    -        pub const RD_SYS_PART1_DATA0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the zeroth 32 bits of the first part of system data.
    -            SYS_DATA_PART1_0: u32,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x60008860
    -        /// Register 1 of BLOCK2 (system).
    -        pub const RD_SYS_PART1_DATA1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the first 32 bits of the first part of system data.
    -            SYS_DATA_PART1_1: u32,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x60008864
    -        /// Register 2 of BLOCK2 (system).
    -        pub const RD_SYS_PART1_DATA2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the second 32 bits of the first part of system data.
    -            SYS_DATA_PART1_2: u32,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x60008868
    -        /// Register 3 of BLOCK2 (system).
    -        pub const RD_SYS_PART1_DATA3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the third 32 bits of the first part of system data.
    -            SYS_DATA_PART1_3: u32,
    -        }), base_address + 0x68);
    -
    -        /// address: 0x6000886c
    -        /// Register 4 of BLOCK2 (system).
    -        pub const RD_SYS_PART1_DATA4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the fourth 32 bits of the first part of system data.
    -            SYS_DATA_PART1_4: u32,
    -        }), base_address + 0x6c);
    -
    -        /// address: 0x60008870
    -        /// Register 5 of BLOCK2 (system).
    -        pub const RD_SYS_PART1_DATA5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the fifth 32 bits of the first part of system data.
    -            SYS_DATA_PART1_5: u32,
    -        }), base_address + 0x70);
    -
    -        /// address: 0x60008874
    -        /// Register 6 of BLOCK2 (system).
    -        pub const RD_SYS_PART1_DATA6 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the sixth 32 bits of the first part of system data.
    -            SYS_DATA_PART1_6: u32,
    -        }), base_address + 0x74);
    -
    -        /// address: 0x60008878
    -        /// Register 7 of BLOCK2 (system).
    -        pub const RD_SYS_PART1_DATA7 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the seventh 32 bits of the first part of system data.
    -            SYS_DATA_PART1_7: u32,
    -        }), base_address + 0x78);
    -
    -        /// address: 0x6000887c
    -        /// Register 0 of BLOCK3 (user).
    -        pub const RD_USR_DATA0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the zeroth 32 bits of BLOCK3 (user).
    -            USR_DATA0: u32,
    -        }), base_address + 0x7c);
    -
    -        /// address: 0x60008880
    -        /// Register 1 of BLOCK3 (user).
    -        pub const RD_USR_DATA1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the first 32 bits of BLOCK3 (user).
    -            USR_DATA1: u32,
    -        }), base_address + 0x80);
    -
    -        /// address: 0x60008884
    -        /// Register 2 of BLOCK3 (user).
    -        pub const RD_USR_DATA2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the second 32 bits of BLOCK3 (user).
    -            USR_DATA2: u32,
    -        }), base_address + 0x84);
    -
    -        /// address: 0x60008888
    -        /// Register 3 of BLOCK3 (user).
    -        pub const RD_USR_DATA3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the third 32 bits of BLOCK3 (user).
    -            USR_DATA3: u32,
    -        }), base_address + 0x88);
    -
    -        /// address: 0x6000888c
    -        /// Register 4 of BLOCK3 (user).
    -        pub const RD_USR_DATA4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the fourth 32 bits of BLOCK3 (user).
    -            USR_DATA4: u32,
    -        }), base_address + 0x8c);
    -
    -        /// address: 0x60008890
    -        /// Register 5 of BLOCK3 (user).
    -        pub const RD_USR_DATA5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the fifth 32 bits of BLOCK3 (user).
    -            USR_DATA5: u32,
    -        }), base_address + 0x90);
    -
    -        /// address: 0x60008894
    -        /// Register 6 of BLOCK3 (user).
    -        pub const RD_USR_DATA6 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the sixth 32 bits of BLOCK3 (user).
    -            USR_DATA6: u32,
    -        }), base_address + 0x94);
    -
    -        /// address: 0x60008898
    -        /// Register 7 of BLOCK3 (user).
    -        pub const RD_USR_DATA7 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the seventh 32 bits of BLOCK3 (user).
    -            USR_DATA7: u32,
    -        }), base_address + 0x98);
    -
    -        /// address: 0x6000889c
    -        /// Register 0 of BLOCK4 (KEY0).
    -        pub const RD_KEY0_DATA0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the zeroth 32 bits of KEY0.
    -            KEY0_DATA0: u32,
    -        }), base_address + 0x9c);
    -
    -        /// address: 0x600088a0
    -        /// Register 1 of BLOCK4 (KEY0).
    -        pub const RD_KEY0_DATA1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the first 32 bits of KEY0.
    -            KEY0_DATA1: u32,
    -        }), base_address + 0xa0);
    -
    -        /// address: 0x600088a4
    -        /// Register 2 of BLOCK4 (KEY0).
    -        pub const RD_KEY0_DATA2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the second 32 bits of KEY0.
    -            KEY0_DATA2: u32,
    -        }), base_address + 0xa4);
    -
    -        /// address: 0x600088a8
    -        /// Register 3 of BLOCK4 (KEY0).
    -        pub const RD_KEY0_DATA3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the third 32 bits of KEY0.
    -            KEY0_DATA3: u32,
    -        }), base_address + 0xa8);
    -
    -        /// address: 0x600088ac
    -        /// Register 4 of BLOCK4 (KEY0).
    -        pub const RD_KEY0_DATA4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the fourth 32 bits of KEY0.
    -            KEY0_DATA4: u32,
    -        }), base_address + 0xac);
    -
    -        /// address: 0x600088b0
    -        /// Register 5 of BLOCK4 (KEY0).
    -        pub const RD_KEY0_DATA5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the fifth 32 bits of KEY0.
    -            KEY0_DATA5: u32,
    -        }), base_address + 0xb0);
    -
    -        /// address: 0x600088b4
    -        /// Register 6 of BLOCK4 (KEY0).
    -        pub const RD_KEY0_DATA6 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the sixth 32 bits of KEY0.
    -            KEY0_DATA6: u32,
    -        }), base_address + 0xb4);
    -
    -        /// address: 0x600088b8
    -        /// Register 7 of BLOCK4 (KEY0).
    -        pub const RD_KEY0_DATA7 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the seventh 32 bits of KEY0.
    -            KEY0_DATA7: u32,
    -        }), base_address + 0xb8);
    -
    -        /// address: 0x600088bc
    -        /// Register 0 of BLOCK5 (KEY1).
    -        pub const RD_KEY1_DATA0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the zeroth 32 bits of KEY1.
    -            KEY1_DATA0: u32,
    -        }), base_address + 0xbc);
    -
    -        /// address: 0x600088c0
    -        /// Register 1 of BLOCK5 (KEY1).
    -        pub const RD_KEY1_DATA1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the first 32 bits of KEY1.
    -            KEY1_DATA1: u32,
    -        }), base_address + 0xc0);
    -
    -        /// address: 0x600088c4
    -        /// Register 2 of BLOCK5 (KEY1).
    -        pub const RD_KEY1_DATA2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the second 32 bits of KEY1.
    -            KEY1_DATA2: u32,
    -        }), base_address + 0xc4);
    -
    -        /// address: 0x600088c8
    -        /// Register 3 of BLOCK5 (KEY1).
    -        pub const RD_KEY1_DATA3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the third 32 bits of KEY1.
    -            KEY1_DATA3: u32,
    -        }), base_address + 0xc8);
    -
    -        /// address: 0x600088cc
    -        /// Register 4 of BLOCK5 (KEY1).
    -        pub const RD_KEY1_DATA4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the fourth 32 bits of KEY1.
    -            KEY1_DATA4: u32,
    -        }), base_address + 0xcc);
    -
    -        /// address: 0x600088d0
    -        /// Register 5 of BLOCK5 (KEY1).
    -        pub const RD_KEY1_DATA5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the fifth 32 bits of KEY1.
    -            KEY1_DATA5: u32,
    -        }), base_address + 0xd0);
    -
    -        /// address: 0x600088d4
    -        /// Register 6 of BLOCK5 (KEY1).
    -        pub const RD_KEY1_DATA6 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the sixth 32 bits of KEY1.
    -            KEY1_DATA6: u32,
    -        }), base_address + 0xd4);
    -
    -        /// address: 0x600088d8
    -        /// Register 7 of BLOCK5 (KEY1).
    -        pub const RD_KEY1_DATA7 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the seventh 32 bits of KEY1.
    -            KEY1_DATA7: u32,
    -        }), base_address + 0xd8);
    -
    -        /// address: 0x600088dc
    -        /// Register 0 of BLOCK6 (KEY2).
    -        pub const RD_KEY2_DATA0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the zeroth 32 bits of KEY2.
    -            KEY2_DATA0: u32,
    -        }), base_address + 0xdc);
    -
    -        /// address: 0x600088e0
    -        /// Register 1 of BLOCK6 (KEY2).
    -        pub const RD_KEY2_DATA1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the first 32 bits of KEY2.
    -            KEY2_DATA1: u32,
    -        }), base_address + 0xe0);
    -
    -        /// address: 0x600088e4
    -        /// Register 2 of BLOCK6 (KEY2).
    -        pub const RD_KEY2_DATA2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the second 32 bits of KEY2.
    -            KEY2_DATA2: u32,
    -        }), base_address + 0xe4);
    -
    -        /// address: 0x600088e8
    -        /// Register 3 of BLOCK6 (KEY2).
    -        pub const RD_KEY2_DATA3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the third 32 bits of KEY2.
    -            KEY2_DATA3: u32,
    -        }), base_address + 0xe8);
    -
    -        /// address: 0x600088ec
    -        /// Register 4 of BLOCK6 (KEY2).
    -        pub const RD_KEY2_DATA4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the fourth 32 bits of KEY2.
    -            KEY2_DATA4: u32,
    -        }), base_address + 0xec);
    -
    -        /// address: 0x600088f0
    -        /// Register 5 of BLOCK6 (KEY2).
    -        pub const RD_KEY2_DATA5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the fifth 32 bits of KEY2.
    -            KEY2_DATA5: u32,
    -        }), base_address + 0xf0);
    -
    -        /// address: 0x600088f4
    -        /// Register 6 of BLOCK6 (KEY2).
    -        pub const RD_KEY2_DATA6 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the sixth 32 bits of KEY2.
    -            KEY2_DATA6: u32,
    -        }), base_address + 0xf4);
    -
    -        /// address: 0x600088f8
    -        /// Register 7 of BLOCK6 (KEY2).
    -        pub const RD_KEY2_DATA7 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the seventh 32 bits of KEY2.
    -            KEY2_DATA7: u32,
    -        }), base_address + 0xf8);
    -
    -        /// address: 0x600088fc
    -        /// Register 0 of BLOCK7 (KEY3).
    -        pub const RD_KEY3_DATA0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the zeroth 32 bits of KEY3.
    -            KEY3_DATA0: u32,
    -        }), base_address + 0xfc);
    -
    -        /// address: 0x60008900
    -        /// Register 1 of BLOCK7 (KEY3).
    -        pub const RD_KEY3_DATA1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the first 32 bits of KEY3.
    -            KEY3_DATA1: u32,
    -        }), base_address + 0x100);
    -
    -        /// address: 0x60008904
    -        /// Register 2 of BLOCK7 (KEY3).
    -        pub const RD_KEY3_DATA2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the second 32 bits of KEY3.
    -            KEY3_DATA2: u32,
    -        }), base_address + 0x104);
    -
    -        /// address: 0x60008908
    -        /// Register 3 of BLOCK7 (KEY3).
    -        pub const RD_KEY3_DATA3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the third 32 bits of KEY3.
    -            KEY3_DATA3: u32,
    -        }), base_address + 0x108);
    -
    -        /// address: 0x6000890c
    -        /// Register 4 of BLOCK7 (KEY3).
    -        pub const RD_KEY3_DATA4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the fourth 32 bits of KEY3.
    -            KEY3_DATA4: u32,
    -        }), base_address + 0x10c);
    -
    -        /// address: 0x60008910
    -        /// Register 5 of BLOCK7 (KEY3).
    -        pub const RD_KEY3_DATA5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the fifth 32 bits of KEY3.
    -            KEY3_DATA5: u32,
    -        }), base_address + 0x110);
    -
    -        /// address: 0x60008914
    -        /// Register 6 of BLOCK7 (KEY3).
    -        pub const RD_KEY3_DATA6 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the sixth 32 bits of KEY3.
    -            KEY3_DATA6: u32,
    -        }), base_address + 0x114);
    -
    -        /// address: 0x60008918
    -        /// Register 7 of BLOCK7 (KEY3).
    -        pub const RD_KEY3_DATA7 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the seventh 32 bits of KEY3.
    -            KEY3_DATA7: u32,
    -        }), base_address + 0x118);
    -
    -        /// address: 0x6000891c
    -        /// Register 0 of BLOCK8 (KEY4).
    -        pub const RD_KEY4_DATA0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the zeroth 32 bits of KEY4.
    -            KEY4_DATA0: u32,
    -        }), base_address + 0x11c);
    -
    -        /// address: 0x60008920
    -        /// Register 1 of BLOCK8 (KEY4).
    -        pub const RD_KEY4_DATA1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the first 32 bits of KEY4.
    -            KEY4_DATA1: u32,
    -        }), base_address + 0x120);
    -
    -        /// address: 0x60008924
    -        /// Register 2 of BLOCK8 (KEY4).
    -        pub const RD_KEY4_DATA2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the second 32 bits of KEY4.
    -            KEY4_DATA2: u32,
    -        }), base_address + 0x124);
    -
    -        /// address: 0x60008928
    -        /// Register 3 of BLOCK8 (KEY4).
    -        pub const RD_KEY4_DATA3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the third 32 bits of KEY4.
    -            KEY4_DATA3: u32,
    -        }), base_address + 0x128);
    -
    -        /// address: 0x6000892c
    -        /// Register 4 of BLOCK8 (KEY4).
    -        pub const RD_KEY4_DATA4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the fourth 32 bits of KEY4.
    -            KEY4_DATA4: u32,
    -        }), base_address + 0x12c);
    -
    -        /// address: 0x60008930
    -        /// Register 5 of BLOCK8 (KEY4).
    -        pub const RD_KEY4_DATA5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the fifth 32 bits of KEY4.
    -            KEY4_DATA5: u32,
    -        }), base_address + 0x130);
    -
    -        /// address: 0x60008934
    -        /// Register 6 of BLOCK8 (KEY4).
    -        pub const RD_KEY4_DATA6 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the sixth 32 bits of KEY4.
    -            KEY4_DATA6: u32,
    -        }), base_address + 0x134);
    -
    -        /// address: 0x60008938
    -        /// Register 7 of BLOCK8 (KEY4).
    -        pub const RD_KEY4_DATA7 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the seventh 32 bits of KEY4.
    -            KEY4_DATA7: u32,
    -        }), base_address + 0x138);
    -
    -        /// address: 0x6000893c
    -        /// Register 0 of BLOCK9 (KEY5).
    -        pub const RD_KEY5_DATA0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the zeroth 32 bits of KEY5.
    -            KEY5_DATA0: u32,
    -        }), base_address + 0x13c);
    -
    -        /// address: 0x60008940
    -        /// Register 1 of BLOCK9 (KEY5).
    -        pub const RD_KEY5_DATA1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the first 32 bits of KEY5.
    -            KEY5_DATA1: u32,
    -        }), base_address + 0x140);
    -
    -        /// address: 0x60008944
    -        /// Register 2 of BLOCK9 (KEY5).
    -        pub const RD_KEY5_DATA2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the second 32 bits of KEY5.
    -            KEY5_DATA2: u32,
    -        }), base_address + 0x144);
    -
    -        /// address: 0x60008948
    -        /// Register 3 of BLOCK9 (KEY5).
    -        pub const RD_KEY5_DATA3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the third 32 bits of KEY5.
    -            KEY5_DATA3: u32,
    -        }), base_address + 0x148);
    -
    -        /// address: 0x6000894c
    -        /// Register 4 of BLOCK9 (KEY5).
    -        pub const RD_KEY5_DATA4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the fourth 32 bits of KEY5.
    -            KEY5_DATA4: u32,
    -        }), base_address + 0x14c);
    -
    -        /// address: 0x60008950
    -        /// Register 5 of BLOCK9 (KEY5).
    -        pub const RD_KEY5_DATA5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the fifth 32 bits of KEY5.
    -            KEY5_DATA5: u32,
    -        }), base_address + 0x150);
    -
    -        /// address: 0x60008954
    -        /// Register 6 of BLOCK9 (KEY5).
    -        pub const RD_KEY5_DATA6 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the sixth 32 bits of KEY5.
    -            KEY5_DATA6: u32,
    -        }), base_address + 0x154);
    -
    -        /// address: 0x60008958
    -        /// Register 7 of BLOCK9 (KEY5).
    -        pub const RD_KEY5_DATA7 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the seventh 32 bits of KEY5.
    -            KEY5_DATA7: u32,
    -        }), base_address + 0x158);
    -
    -        /// address: 0x6000895c
    -        /// Register 0 of BLOCK10 (system).
    -        pub const RD_SYS_PART2_DATA0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the 0th 32 bits of the 2nd part of system data.
    -            SYS_DATA_PART2_0: u32,
    -        }), base_address + 0x15c);
    -
    -        /// address: 0x60008960
    -        /// Register 1 of BLOCK9 (KEY5).
    -        pub const RD_SYS_PART2_DATA1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the 1st 32 bits of the 2nd part of system data.
    -            SYS_DATA_PART2_1: u32,
    -        }), base_address + 0x160);
    -
    -        /// address: 0x60008964
    -        /// Register 2 of BLOCK10 (system).
    -        pub const RD_SYS_PART2_DATA2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the 2nd 32 bits of the 2nd part of system data.
    -            SYS_DATA_PART2_2: u32,
    -        }), base_address + 0x164);
    -
    -        /// address: 0x60008968
    -        /// Register 3 of BLOCK10 (system).
    -        pub const RD_SYS_PART2_DATA3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the 3rd 32 bits of the 2nd part of system data.
    -            SYS_DATA_PART2_3: u32,
    -        }), base_address + 0x168);
    -
    -        /// address: 0x6000896c
    -        /// Register 4 of BLOCK10 (system).
    -        pub const RD_SYS_PART2_DATA4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the 4th 32 bits of the 2nd part of system data.
    -            SYS_DATA_PART2_4: u32,
    -        }), base_address + 0x16c);
    -
    -        /// address: 0x60008970
    -        /// Register 5 of BLOCK10 (system).
    -        pub const RD_SYS_PART2_DATA5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the 5th 32 bits of the 2nd part of system data.
    -            SYS_DATA_PART2_5: u32,
    -        }), base_address + 0x170);
    -
    -        /// address: 0x60008974
    -        /// Register 6 of BLOCK10 (system).
    -        pub const RD_SYS_PART2_DATA6 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the 6th 32 bits of the 2nd part of system data.
    -            SYS_DATA_PART2_6: u32,
    -        }), base_address + 0x174);
    -
    -        /// address: 0x60008978
    -        /// Register 7 of BLOCK10 (system).
    -        pub const RD_SYS_PART2_DATA7 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the 7th 32 bits of the 2nd part of system data.
    -            SYS_DATA_PART2_7: u32,
    -        }), base_address + 0x178);
    -
    -        /// address: 0x6000897c
    -        /// Programming error record register 0 of BLOCK0.
    -        pub const RD_REPEAT_ERR0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// If any bit in RD_DIS is 1, then it indicates a programming error.
    -            RD_DIS_ERR: u7,
    -            /// If DIS_RTC_RAM_BOOT is 1, then it indicates a programming error.
    -            DIS_RTC_RAM_BOOT_ERR: u1,
    -            /// If DIS_ICACHE is 1, then it indicates a programming error.
    -            DIS_ICACHE_ERR: u1,
    -            /// If DIS_USB_JTAG is 1, then it indicates a programming error.
    -            DIS_USB_JTAG_ERR: u1,
    -            /// If DIS_DOWNLOAD_ICACHE is 1, then it indicates a programming error.
    -            DIS_DOWNLOAD_ICACHE_ERR: u1,
    -            /// If DIS_USB_DEVICE is 1, then it indicates a programming error.
    -            DIS_USB_DEVICE_ERR: u1,
    -            /// If DIS_FORCE_DOWNLOAD is 1, then it indicates a programming error.
    -            DIS_FORCE_DOWNLOAD_ERR: u1,
    -            /// Reserved.
    -            RPT4_RESERVED6_ERR: u1,
    -            /// If DIS_CAN is 1, then it indicates a programming error.
    -            DIS_CAN_ERR: u1,
    -            /// If JTAG_SEL_ENABLE is 1, then it indicates a programming error.
    -            JTAG_SEL_ENABLE_ERR: u1,
    -            /// If SOFT_DIS_JTAG is 1, then it indicates a programming error.
    -            SOFT_DIS_JTAG_ERR: u3,
    -            /// If DIS_PAD_JTAG is 1, then it indicates a programming error.
    -            DIS_PAD_JTAG_ERR: u1,
    -            /// If DIS_DOWNLOAD_MANUAL_ENCRYPT is 1, then it indicates a programming error.
    -            DIS_DOWNLOAD_MANUAL_ENCRYPT_ERR: u1,
    -            /// If any bit in USB_DREFH is 1, then it indicates a programming error.
    -            USB_DREFH_ERR: u2,
    -            /// If any bit in USB_DREFL is 1, then it indicates a programming error.
    -            USB_DREFL_ERR: u2,
    -            /// If USB_EXCHG_PINS is 1, then it indicates a programming error.
    -            USB_EXCHG_PINS_ERR: u1,
    -            /// If VDD_SPI_AS_GPIO is 1, then it indicates a programming error.
    -            VDD_SPI_AS_GPIO_ERR: u1,
    -            /// If any bit in BTLC_GPIO_ENABLE is 1, then it indicates a programming error.
    -            BTLC_GPIO_ENABLE_ERR: u2,
    -            /// If POWERGLITCH_EN is 1, then it indicates a programming error.
    -            POWERGLITCH_EN_ERR: u1,
    -            /// If any bit in POWER_GLITCH_DSENSE is 1, then it indicates a programming error.
    -            POWER_GLITCH_DSENSE_ERR: u2,
    -        }), base_address + 0x17c);
    -
    -        /// address: 0x60008980
    -        /// Programming error record register 1 of BLOCK0.
    -        pub const RD_REPEAT_ERR1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Reserved.
    -            RPT4_RESERVED2_ERR: u16,
    -            /// If any bit in WDT_DELAY_SEL is 1, then it indicates a programming error.
    -            WDT_DELAY_SEL_ERR: u2,
    -            /// If any bit in SPI_BOOT_CRYPT_CNT is 1, then it indicates a programming error.
    -            SPI_BOOT_CRYPT_CNT_ERR: u3,
    -            /// If SECURE_BOOT_KEY_REVOKE0 is 1, then it indicates a programming error.
    -            SECURE_BOOT_KEY_REVOKE0_ERR: u1,
    -            /// If SECURE_BOOT_KEY_REVOKE1 is 1, then it indicates a programming error.
    -            SECURE_BOOT_KEY_REVOKE1_ERR: u1,
    -            /// If SECURE_BOOT_KEY_REVOKE2 is 1, then it indicates a programming error.
    -            SECURE_BOOT_KEY_REVOKE2_ERR: u1,
    -            /// If any bit in KEY_PURPOSE_0 is 1, then it indicates a programming error.
    -            KEY_PURPOSE_0_ERR: u4,
    -            /// If any bit in KEY_PURPOSE_1 is 1, then it indicates a programming error.
    -            KEY_PURPOSE_1_ERR: u4,
    -        }), base_address + 0x180);
    -
    -        /// address: 0x60008984
    -        /// Programming error record register 2 of BLOCK0.
    -        pub const RD_REPEAT_ERR2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// If any bit in KEY_PURPOSE_2 is 1, then it indicates a programming error.
    -            KEY_PURPOSE_2_ERR: u4,
    -            /// If any bit in KEY_PURPOSE_3 is 1, then it indicates a programming error.
    -            KEY_PURPOSE_3_ERR: u4,
    -            /// If any bit in KEY_PURPOSE_4 is 1, then it indicates a programming error.
    -            KEY_PURPOSE_4_ERR: u4,
    -            /// If any bit in KEY_PURPOSE_5 is 1, then it indicates a programming error.
    -            KEY_PURPOSE_5_ERR: u4,
    -            /// Reserved.
    -            RPT4_RESERVED3_ERR: u4,
    -            /// If SECURE_BOOT_EN is 1, then it indicates a programming error.
    -            SECURE_BOOT_EN_ERR: u1,
    -            /// If SECURE_BOOT_AGGRESSIVE_REVOKE is 1, then it indicates a programming error.
    -            SECURE_BOOT_AGGRESSIVE_REVOKE_ERR: u1,
    -            /// Reserved.
    -            RPT4_RESERVED0_ERR: u6,
    -            /// If any bit in FLASH_TPUM is 1, then it indicates a programming error.
    -            FLASH_TPUW_ERR: u4,
    -        }), base_address + 0x184);
    -
    -        /// address: 0x60008988
    -        /// Programming error record register 3 of BLOCK0.
    -        pub const RD_REPEAT_ERR3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// If DIS_DOWNLOAD_MODE is 1, then it indicates a programming error.
    -            DIS_DOWNLOAD_MODE_ERR: u1,
    -            /// If DIS_LEGACY_SPI_BOOT is 1, then it indicates a programming error.
    -            DIS_LEGACY_SPI_BOOT_ERR: u1,
    -            /// If UART_PRINT_CHANNEL is 1, then it indicates a programming error.
    -            UART_PRINT_CHANNEL_ERR: u1,
    -            /// If FLASH_ECC_MODE is 1, then it indicates a programming error.
    -            FLASH_ECC_MODE_ERR: u1,
    -            /// If DIS_USB_DOWNLOAD_MODE is 1, then it indicates a programming error.
    -            DIS_USB_DOWNLOAD_MODE_ERR: u1,
    -            /// If ENABLE_SECURITY_DOWNLOAD is 1, then it indicates a programming error.
    -            ENABLE_SECURITY_DOWNLOAD_ERR: u1,
    -            /// If any bit in UART_PRINT_CONTROL is 1, then it indicates a programming error.
    -            UART_PRINT_CONTROL_ERR: u2,
    -            /// If PIN_POWER_SELECTION is 1, then it indicates a programming error.
    -            PIN_POWER_SELECTION_ERR: u1,
    -            /// If FLASH_TYPE is 1, then it indicates a programming error.
    -            FLASH_TYPE_ERR: u1,
    -            /// If any bits in FLASH_PAGE_SIZE is 1, then it indicates a programming error.
    -            FLASH_PAGE_SIZE_ERR: u2,
    -            /// If FLASH_ECC_EN_ERR is 1, then it indicates a programming error.
    -            FLASH_ECC_EN_ERR: u1,
    -            /// If FORCE_SEND_RESUME is 1, then it indicates a programming error.
    -            FORCE_SEND_RESUME_ERR: u1,
    -            /// If any bit in SECURE_VERSION is 1, then it indicates a programming error.
    -            SECURE_VERSION_ERR: u16,
    -            /// Reserved.
    -            RPT4_RESERVED1_ERR: u2,
    -        }), base_address + 0x188);
    -
    -        /// address: 0x60008990
    -        /// Programming error record register 4 of BLOCK0.
    -        pub const RD_REPEAT_ERR4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Reserved.
    -            RPT4_RESERVED4_ERR: u24,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -        }), base_address + 0x190);
    -
    -        /// address: 0x600089c0
    -        /// Programming error record register 0 of BLOCK1-10.
    -        pub const RD_RS_ERR0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of this signal means the number of error bytes.
    -            MAC_SPI_8M_ERR_NUM: u3,
    -            /// 0: Means no failure and that the data of MAC_SPI_8M is reliable 1: Means that
    -            /// programming user data failed and the number of error bytes is over 6.
    -            MAC_SPI_8M_FAIL: u1,
    -            /// The value of this signal means the number of error bytes.
    -            SYS_PART1_NUM: u3,
    -            /// 0: Means no failure and that the data of system part1 is reliable 1: Means that
    -            /// programming user data failed and the number of error bytes is over 6.
    -            SYS_PART1_FAIL: u1,
    -            /// The value of this signal means the number of error bytes.
    -            USR_DATA_ERR_NUM: u3,
    -            /// 0: Means no failure and that the user data is reliable 1: Means that programming
    -            /// user data failed and the number of error bytes is over 6.
    -            USR_DATA_FAIL: u1,
    -            /// The value of this signal means the number of error bytes.
    -            KEY0_ERR_NUM: u3,
    -            /// 0: Means no failure and that the data of key0 is reliable 1: Means that
    -            /// programming key0 failed and the number of error bytes is over 6.
    -            KEY0_FAIL: u1,
    -            /// The value of this signal means the number of error bytes.
    -            KEY1_ERR_NUM: u3,
    -            /// 0: Means no failure and that the data of key1 is reliable 1: Means that
    -            /// programming key1 failed and the number of error bytes is over 6.
    -            KEY1_FAIL: u1,
    -            /// The value of this signal means the number of error bytes.
    -            KEY2_ERR_NUM: u3,
    -            /// 0: Means no failure and that the data of key2 is reliable 1: Means that
    -            /// programming key2 failed and the number of error bytes is over 6.
    -            KEY2_FAIL: u1,
    -            /// The value of this signal means the number of error bytes.
    -            KEY3_ERR_NUM: u3,
    -            /// 0: Means no failure and that the data of key3 is reliable 1: Means that
    -            /// programming key3 failed and the number of error bytes is over 6.
    -            KEY3_FAIL: u1,
    -            /// The value of this signal means the number of error bytes.
    -            KEY4_ERR_NUM: u3,
    -            /// 0: Means no failure and that the data of key4 is reliable 1: Means that
    -            /// programming key4 failed and the number of error bytes is over 6.
    -            KEY4_FAIL: u1,
    -        }), base_address + 0x1c0);
    -
    -        /// address: 0x600089c4
    -        /// Programming error record register 1 of BLOCK1-10.
    -        pub const RD_RS_ERR1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of this signal means the number of error bytes.
    -            KEY5_ERR_NUM: u3,
    -            /// 0: Means no failure and that the data of KEY5 is reliable 1: Means that
    -            /// programming user data failed and the number of error bytes is over 6.
    -            KEY5_FAIL: u1,
    -            /// The value of this signal means the number of error bytes.
    -            SYS_PART2_ERR_NUM: u3,
    -            /// 0: Means no failure and that the data of system part2 is reliable 1: Means that
    -            /// programming user data failed and the number of error bytes is over 6.
    -            SYS_PART2_FAIL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x1c4);
    -
    -        /// address: 0x600089c8
    -        /// eFuse clcok configuration register.
    -        pub const CLK = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Set this bit to force eFuse SRAM into power-saving mode.
    -            EFUSE_MEM_FORCE_PD: u1,
    -            /// Set this bit and force to activate clock signal of eFuse SRAM.
    -            MEM_CLK_FORCE_ON: u1,
    -            /// Set this bit to force eFuse SRAM into working mode.
    -            EFUSE_MEM_FORCE_PU: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            /// Set this bit and force to enable clock signal of eFuse memory.
    -            EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -        }), base_address + 0x1c8);
    -
    -        /// address: 0x600089cc
    -        /// eFuse operation mode configuraiton register;
    -        pub const CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 0x5A5A: Operate programming command 0x5AA5: Operate read command.
    -            OP_CODE: u16,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x1cc);
    -
    -        /// address: 0x600089d0
    -        /// eFuse status register.
    -        pub const STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Indicates the state of the eFuse state machine.
    -            STATE: u4,
    -            /// The value of OTP_LOAD_SW.
    -            OTP_LOAD_SW: u1,
    -            /// The value of OTP_VDDQ_C_SYNC2.
    -            OTP_VDDQ_C_SYNC2: u1,
    -            /// The value of OTP_STROBE_SW.
    -            OTP_STROBE_SW: u1,
    -            /// The value of OTP_CSB_SW.
    -            OTP_CSB_SW: u1,
    -            /// The value of OTP_PGENB_SW.
    -            OTP_PGENB_SW: u1,
    -            /// The value of OTP_VDDQ_IS_SW.
    -            OTP_VDDQ_IS_SW: u1,
    -            /// Indicates the number of error bits during programming BLOCK0.
    -            REPEAT_ERR_CNT: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0x1d0);
    -
    -        /// address: 0x600089d4
    -        /// eFuse command register.
    -        pub const CMD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Set this bit to send read command.
    -            READ_CMD: u1,
    -            /// Set this bit to send programming command.
    -            PGM_CMD: u1,
    -            /// The serial number of the block to be programmed. Value 0-10 corresponds to block
    -            /// number 0-10, respectively.
    -            BLK_NUM: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -        }), base_address + 0x1d4);
    -
    -        /// address: 0x600089d8
    -        /// eFuse raw interrupt register.
    -        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The raw bit signal for read_done interrupt.
    -            READ_DONE_INT_RAW: u1,
    -            /// The raw bit signal for pgm_done interrupt.
    -            PGM_DONE_INT_RAW: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0x1d8);
    -
    -        /// address: 0x600089dc
    -        /// eFuse interrupt status register.
    -        pub const INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The status signal for read_done interrupt.
    -            READ_DONE_INT_ST: u1,
    -            /// The status signal for pgm_done interrupt.
    -            PGM_DONE_INT_ST: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0x1dc);
    -
    -        /// address: 0x600089e0
    -        /// eFuse interrupt enable register.
    -        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The enable signal for read_done interrupt.
    -            READ_DONE_INT_ENA: u1,
    -            /// The enable signal for pgm_done interrupt.
    -            PGM_DONE_INT_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0x1e0);
    -
    -        /// address: 0x600089e4
    -        /// eFuse interrupt clear register.
    -        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The clear signal for read_done interrupt.
    -            READ_DONE_INT_CLR: u1,
    -            /// The clear signal for pgm_done interrupt.
    -            PGM_DONE_INT_CLR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0x1e4);
    -
    -        /// address: 0x600089e8
    -        /// Controls the eFuse programming voltage.
    -        pub const DAC_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Controls the division factor of the rising clock of the programming voltage.
    -            DAC_CLK_DIV: u8,
    -            /// Don't care.
    -            DAC_CLK_PAD_SEL: u1,
    -            /// Controls the rising period of the programming voltage.
    -            DAC_NUM: u8,
    -            /// Reduces the power supply of the programming voltage.
    -            OE_CLR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0x1e8);
    -
    -        /// address: 0x600089ec
    -        /// Configures read timing parameters.
    -        pub const RD_TIM_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            reserved23: u1,
    -            /// Configures the initial read time of eFuse.
    -            READ_INIT_NUM: u8,
    -        }), base_address + 0x1ec);
    -
    -        /// address: 0x600089f0
    -        /// Configurarion register 1 of eFuse programming timing parameters.
    -        pub const WR_TIM_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            /// Configures the power up time for VDDQ.
    -            PWR_ON_NUM: u16,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -        }), base_address + 0x1f0);
    -
    -        /// address: 0x600089f4
    -        /// Configurarion register 2 of eFuse programming timing parameters.
    -        pub const WR_TIM_CONF2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Configures the power outage time for VDDQ.
    -            PWR_OFF_NUM: u16,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x1f4);
    -
    -        /// address: 0x600089fc
    -        /// eFuse version register.
    -        pub const DATE = @intToPtr(*volatile MmioInt(32, u28), base_address + 0x1fc);
    -    };
    -
    -    /// External Memory
    -    pub const EXTMEM = struct {
    -        pub const base_address = 0x600c4000;
    -
    -        /// address: 0x600c4000
    -        /// This description will be updated in the near future.
    -        pub const ICACHE_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to activate the data cache. 0: disable, 1: enable
    -            ICACHE_ENABLE: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x600c4004
    -        /// This description will be updated in the near future.
    -        pub const ICACHE_CTRL1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to disable core0 ibus, 0: enable, 1: disable
    -            ICACHE_SHUT_IBUS: u1,
    -            /// The bit is used to disable core1 ibus, 0: enable, 1: disable
    -            ICACHE_SHUT_DBUS: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x600c4008
    -        /// This description will be updated in the near future.
    -        pub const ICACHE_TAG_POWER_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to close clock gating of icache tag memory. 1: close gating, 0:
    -            /// open clock gating.
    -            ICACHE_TAG_MEM_FORCE_ON: u1,
    -            /// The bit is used to power icache tag memory down, 0: follow rtc_lslp, 1: power
    -            /// down
    -            ICACHE_TAG_MEM_FORCE_PD: u1,
    -            /// The bit is used to power icache tag memory up, 0: follow rtc_lslp, 1: power up
    -            ICACHE_TAG_MEM_FORCE_PU: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x600c400c
    -        /// This description will be updated in the near future.
    -        pub const ICACHE_PRELOCK_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to enable the first section of prelock function.
    -            ICACHE_PRELOCK_SCT0_EN: u1,
    -            /// The bit is used to enable the second section of prelock function.
    -            ICACHE_PRELOCK_SCT1_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x600c4010
    -        /// This description will be updated in the near future.
    -        pub const ICACHE_PRELOCK_SCT0_ADDR = @intToPtr(*volatile u32, base_address + 0x10);
    -
    -        /// address: 0x600c4014
    -        /// This description will be updated in the near future.
    -        pub const ICACHE_PRELOCK_SCT1_ADDR = @intToPtr(*volatile u32, base_address + 0x14);
    -
    -        /// address: 0x600c4018
    -        /// This description will be updated in the near future.
    -        pub const ICACHE_PRELOCK_SCT_SIZE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bits are used to configure the second length of data locking, which is
    -            /// combined with ICACHE_PRELOCK_SCT1_ADDR_REG
    -            ICACHE_PRELOCK_SCT1_SIZE: u16,
    -            /// The bits are used to configure the first length of data locking, which is
    -            /// combined with ICACHE_PRELOCK_SCT0_ADDR_REG
    -            ICACHE_PRELOCK_SCT0_SIZE: u16,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x600c401c
    -        /// This description will be updated in the near future.
    -        pub const ICACHE_LOCK_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to enable lock operation. It will be cleared by hardware after
    -            /// lock operation done.
    -            ICACHE_LOCK_ENA: u1,
    -            /// The bit is used to enable unlock operation. It will be cleared by hardware after
    -            /// unlock operation done.
    -            ICACHE_UNLOCK_ENA: u1,
    -            /// The bit is used to indicate unlock/lock operation is finished.
    -            ICACHE_LOCK_DONE: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x600c4020
    -        /// This description will be updated in the near future.
    -        pub const ICACHE_LOCK_ADDR = @intToPtr(*volatile u32, base_address + 0x20);
    -
    -        /// address: 0x600c4024
    -        /// This description will be updated in the near future.
    -        pub const ICACHE_LOCK_SIZE = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x24);
    -
    -        /// address: 0x600c4028
    -        /// This description will be updated in the near future.
    -        pub const ICACHE_SYNC_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to enable invalidate operation. It will be cleared by hardware
    -            /// after invalidate operation done.
    -            ICACHE_INVALIDATE_ENA: u1,
    -            /// The bit is used to indicate invalidate operation is finished.
    -            ICACHE_SYNC_DONE: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x600c402c
    -        /// This description will be updated in the near future.
    -        pub const ICACHE_SYNC_ADDR = @intToPtr(*volatile u32, base_address + 0x2c);
    -
    -        /// address: 0x600c4030
    -        /// This description will be updated in the near future.
    -        pub const ICACHE_SYNC_SIZE = @intToPtr(*volatile MmioInt(32, u23), base_address + 0x30);
    -
    -        /// address: 0x600c4034
    -        /// This description will be updated in the near future.
    -        pub const ICACHE_PRELOAD_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to enable preload operation. It will be cleared by hardware
    -            /// after preload operation done.
    -            ICACHE_PRELOAD_ENA: u1,
    -            /// The bit is used to indicate preload operation is finished.
    -            ICACHE_PRELOAD_DONE: u1,
    -            /// The bit is used to configure the direction of preload operation. 1: descending,
    -            /// 0: ascending.
    -            ICACHE_PRELOAD_ORDER: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x600c4038
    -        /// This description will be updated in the near future.
    -        pub const ICACHE_PRELOAD_ADDR = @intToPtr(*volatile u32, base_address + 0x38);
    -
    -        /// address: 0x600c403c
    -        /// This description will be updated in the near future.
    -        pub const ICACHE_PRELOAD_SIZE = @intToPtr(*volatile MmioInt(32, u16), base_address + 0x3c);
    -
    -        /// address: 0x600c4040
    -        /// This description will be updated in the near future.
    -        pub const ICACHE_AUTOLOAD_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bits are used to enable the first section for autoload operation.
    -            ICACHE_AUTOLOAD_SCT0_ENA: u1,
    -            /// The bits are used to enable the second section for autoload operation.
    -            ICACHE_AUTOLOAD_SCT1_ENA: u1,
    -            /// The bit is used to enable and disable autoload operation. It is combined with
    -            /// icache_autoload_done. 1: enable, 0: disable.
    -            ICACHE_AUTOLOAD_ENA: u1,
    -            /// The bit is used to indicate autoload operation is finished.
    -            ICACHE_AUTOLOAD_DONE: u1,
    -            /// The bits are used to configure the direction of autoload. 1: descending, 0:
    -            /// ascending.
    -            ICACHE_AUTOLOAD_ORDER: u1,
    -            /// The bits are used to configure trigger conditions for autoload. 0/3: cache miss,
    -            /// 1: cache hit, 2: both cache miss and hit.
    -            ICACHE_AUTOLOAD_RQST: u2,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x600c4044
    -        /// This description will be updated in the near future.
    -        pub const ICACHE_AUTOLOAD_SCT0_ADDR = @intToPtr(*volatile u32, base_address + 0x44);
    -
    -        /// address: 0x600c4048
    -        /// This description will be updated in the near future.
    -        pub const ICACHE_AUTOLOAD_SCT0_SIZE = @intToPtr(*volatile MmioInt(32, u27), base_address + 0x48);
    -
    -        /// address: 0x600c404c
    -        /// This description will be updated in the near future.
    -        pub const ICACHE_AUTOLOAD_SCT1_ADDR = @intToPtr(*volatile u32, base_address + 0x4c);
    -
    -        /// address: 0x600c4050
    -        /// This description will be updated in the near future.
    -        pub const ICACHE_AUTOLOAD_SCT1_SIZE = @intToPtr(*volatile MmioInt(32, u27), base_address + 0x50);
    -
    -        /// address: 0x600c4054
    -        /// This description will be updated in the near future.
    -        pub const IBUS_TO_FLASH_START_VADDR = @intToPtr(*volatile u32, base_address + 0x54);
    -
    -        /// address: 0x600c4058
    -        /// This description will be updated in the near future.
    -        pub const IBUS_TO_FLASH_END_VADDR = @intToPtr(*volatile u32, base_address + 0x58);
    -
    -        /// address: 0x600c405c
    -        /// This description will be updated in the near future.
    -        pub const DBUS_TO_FLASH_START_VADDR = @intToPtr(*volatile u32, base_address + 0x5c);
    -
    -        /// address: 0x600c4060
    -        /// This description will be updated in the near future.
    -        pub const DBUS_TO_FLASH_END_VADDR = @intToPtr(*volatile u32, base_address + 0x60);
    -
    -        /// address: 0x600c4064
    -        /// This description will be updated in the near future.
    -        pub const CACHE_ACS_CNT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to clear ibus counter.
    -            IBUS_ACS_CNT_CLR: u1,
    -            /// The bit is used to clear dbus counter.
    -            DBUS_ACS_CNT_CLR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x600c4068
    -        /// This description will be updated in the near future.
    -        pub const IBUS_ACS_MISS_CNT = @intToPtr(*volatile u32, base_address + 0x68);
    -
    -        /// address: 0x600c406c
    -        /// This description will be updated in the near future.
    -        pub const IBUS_ACS_CNT = @intToPtr(*volatile u32, base_address + 0x6c);
    -
    -        /// address: 0x600c4070
    -        /// This description will be updated in the near future.
    -        pub const DBUS_ACS_FLASH_MISS_CNT = @intToPtr(*volatile u32, base_address + 0x70);
    -
    -        /// address: 0x600c4074
    -        /// This description will be updated in the near future.
    -        pub const DBUS_ACS_CNT = @intToPtr(*volatile u32, base_address + 0x74);
    -
    -        /// address: 0x600c4078
    -        /// This description will be updated in the near future.
    -        pub const CACHE_ILG_INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to enable interrupt by sync configurations fault.
    -            ICACHE_SYNC_OP_FAULT_INT_ENA: u1,
    -            /// The bit is used to enable interrupt by preload configurations fault.
    -            ICACHE_PRELOAD_OP_FAULT_INT_ENA: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            /// The bit is used to enable interrupt by mmu entry fault.
    -            MMU_ENTRY_FAULT_INT_ENA: u1,
    -            reserved3: u1,
    -            /// The bit is used to enable interrupt by ibus counter overflow.
    -            IBUS_CNT_OVF_INT_ENA: u1,
    -            /// The bit is used to enable interrupt by dbus counter overflow.
    -            DBUS_CNT_OVF_INT_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -        }), base_address + 0x78);
    -
    -        /// address: 0x600c407c
    -        /// This description will be updated in the near future.
    -        pub const CACHE_ILG_INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to clear interrupt by sync configurations fault.
    -            ICACHE_SYNC_OP_FAULT_INT_CLR: u1,
    -            /// The bit is used to clear interrupt by preload configurations fault.
    -            ICACHE_PRELOAD_OP_FAULT_INT_CLR: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            /// The bit is used to clear interrupt by mmu entry fault.
    -            MMU_ENTRY_FAULT_INT_CLR: u1,
    -            reserved3: u1,
    -            /// The bit is used to clear interrupt by ibus counter overflow.
    -            IBUS_CNT_OVF_INT_CLR: u1,
    -            /// The bit is used to clear interrupt by dbus counter overflow.
    -            DBUS_CNT_OVF_INT_CLR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -        }), base_address + 0x7c);
    -
    -        /// address: 0x600c4080
    -        /// This description will be updated in the near future.
    -        pub const CACHE_ILG_INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to indicate interrupt by sync configurations fault.
    -            ICACHE_SYNC_OP_FAULT_ST: u1,
    -            /// The bit is used to indicate interrupt by preload configurations fault.
    -            ICACHE_PRELOAD_OP_FAULT_ST: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            /// The bit is used to indicate interrupt by mmu entry fault.
    -            MMU_ENTRY_FAULT_ST: u1,
    -            reserved3: u1,
    -            /// The bit is used to indicate interrupt by ibus access flash/spiram counter
    -            /// overflow.
    -            IBUS_ACS_CNT_OVF_ST: u1,
    -            /// The bit is used to indicate interrupt by ibus access flash/spiram miss counter
    -            /// overflow.
    -            IBUS_ACS_MISS_CNT_OVF_ST: u1,
    -            /// The bit is used to indicate interrupt by dbus access flash/spiram counter
    -            /// overflow.
    -            DBUS_ACS_CNT_OVF_ST: u1,
    -            /// The bit is used to indicate interrupt by dbus access flash miss counter
    -            /// overflow.
    -            DBUS_ACS_FLASH_MISS_CNT_OVF_ST: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x80);
    -
    -        /// address: 0x600c4084
    -        /// This description will be updated in the near future.
    -        pub const CORE0_ACS_CACHE_INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to enable interrupt by cpu access icache while the corresponding
    -            /// ibus is disabled which include speculative access.
    -            CORE0_IBUS_ACS_MSK_IC_INT_ENA: u1,
    -            /// The bit is used to enable interrupt by ibus trying to write icache
    -            CORE0_IBUS_WR_IC_INT_ENA: u1,
    -            /// The bit is used to enable interrupt by authentication fail.
    -            CORE0_IBUS_REJECT_INT_ENA: u1,
    -            /// The bit is used to enable interrupt by cpu access icache while the corresponding
    -            /// dbus is disabled which include speculative access.
    -            CORE0_DBUS_ACS_MSK_IC_INT_ENA: u1,
    -            /// The bit is used to enable interrupt by authentication fail.
    -            CORE0_DBUS_REJECT_INT_ENA: u1,
    -            /// The bit is used to enable interrupt by dbus trying to write icache
    -            CORE0_DBUS_WR_IC_INT_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -        }), base_address + 0x84);
    -
    -        /// address: 0x600c4088
    -        /// This description will be updated in the near future.
    -        pub const CORE0_ACS_CACHE_INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to clear interrupt by cpu access icache while the corresponding
    -            /// ibus is disabled or icache is disabled which include speculative access.
    -            CORE0_IBUS_ACS_MSK_IC_INT_CLR: u1,
    -            /// The bit is used to clear interrupt by ibus trying to write icache
    -            CORE0_IBUS_WR_IC_INT_CLR: u1,
    -            /// The bit is used to clear interrupt by authentication fail.
    -            CORE0_IBUS_REJECT_INT_CLR: u1,
    -            /// The bit is used to clear interrupt by cpu access icache while the corresponding
    -            /// dbus is disabled or icache is disabled which include speculative access.
    -            CORE0_DBUS_ACS_MSK_IC_INT_CLR: u1,
    -            /// The bit is used to clear interrupt by authentication fail.
    -            CORE0_DBUS_REJECT_INT_CLR: u1,
    -            /// The bit is used to clear interrupt by dbus trying to write icache
    -            CORE0_DBUS_WR_IC_INT_CLR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -        }), base_address + 0x88);
    -
    -        /// address: 0x600c408c
    -        /// This description will be updated in the near future.
    -        pub const CORE0_ACS_CACHE_INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to indicate interrupt by cpu access icache while the core0_ibus
    -            /// is disabled or icache is disabled which include speculative access.
    -            CORE0_IBUS_ACS_MSK_ICACHE_ST: u1,
    -            /// The bit is used to indicate interrupt by ibus trying to write icache
    -            CORE0_IBUS_WR_ICACHE_ST: u1,
    -            /// The bit is used to indicate interrupt by authentication fail.
    -            CORE0_IBUS_REJECT_ST: u1,
    -            /// The bit is used to indicate interrupt by cpu access icache while the core0_dbus
    -            /// is disabled or icache is disabled which include speculative access.
    -            CORE0_DBUS_ACS_MSK_ICACHE_ST: u1,
    -            /// The bit is used to indicate interrupt by authentication fail.
    -            CORE0_DBUS_REJECT_ST: u1,
    -            /// The bit is used to indicate interrupt by dbus trying to write icache
    -            CORE0_DBUS_WR_ICACHE_ST: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -        }), base_address + 0x8c);
    -
    -        /// address: 0x600c4090
    -        /// This description will be updated in the near future.
    -        pub const CORE0_DBUS_REJECT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bits are used to indicate the attribute of CPU access dbus when
    -            /// authentication fail. 0: invalidate, 1: execute-able, 2: read-able, 4:
    -            /// write-able.
    -            CORE0_DBUS_ATTR: u3,
    -            /// The bit is used to indicate the world of CPU access dbus when authentication
    -            /// fail. 0: WORLD0, 1: WORLD1
    -            CORE0_DBUS_WORLD: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x90);
    -
    -        /// address: 0x600c4094
    -        /// This description will be updated in the near future.
    -        pub const CORE0_DBUS_REJECT_VADDR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bits are used to indicate the virtual address of CPU access dbus when
    -            /// authentication fail.
    -            CORE0_DBUS_VADDR: u32,
    -        }), base_address + 0x94);
    -
    -        /// address: 0x600c4098
    -        /// This description will be updated in the near future.
    -        pub const CORE0_IBUS_REJECT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bits are used to indicate the attribute of CPU access ibus when
    -            /// authentication fail. 0: invalidate, 1: execute-able, 2: read-able
    -            CORE0_IBUS_ATTR: u3,
    -            /// The bit is used to indicate the world of CPU access ibus when authentication
    -            /// fail. 0: WORLD0, 1: WORLD1
    -            CORE0_IBUS_WORLD: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x98);
    -
    -        /// address: 0x600c409c
    -        /// This description will be updated in the near future.
    -        pub const CORE0_IBUS_REJECT_VADDR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bits are used to indicate the virtual address of CPU access ibus when
    -            /// authentication fail.
    -            CORE0_IBUS_VADDR: u32,
    -        }), base_address + 0x9c);
    -
    -        /// address: 0x600c40a0
    -        /// This description will be updated in the near future.
    -        pub const CACHE_MMU_FAULT_CONTENT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bits are used to indicate the content of mmu entry which cause mmu fault..
    -            CACHE_MMU_FAULT_CONTENT: u10,
    -            /// The right-most 3 bits are used to indicate the operations which cause mmu fault
    -            /// occurrence. 0: default, 1: cpu miss, 2: preload miss, 3: writeback, 4: cpu miss
    -            /// evict recovery address, 5: load miss evict recovery address, 6: external dma tx,
    -            /// 7: external dma rx. The most significant bit is used to indicate this operation
    -            /// occurs in which one icache.
    -            CACHE_MMU_FAULT_CODE: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -        }), base_address + 0xa0);
    -
    -        /// address: 0x600c40a4
    -        /// This description will be updated in the near future.
    -        pub const CACHE_MMU_FAULT_VADDR = @intToPtr(*volatile u32, base_address + 0xa4);
    -
    -        /// address: 0x600c40a8
    -        /// This description will be updated in the near future.
    -        pub const CACHE_WRAP_AROUND_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to enable wrap around mode when read data from flash.
    -            CACHE_FLASH_WRAP_AROUND: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0xa8);
    -
    -        /// address: 0x600c40ac
    -        /// This description will be updated in the near future.
    -        pub const CACHE_MMU_POWER_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to enable clock gating to save power when access mmu memory, 0:
    -            /// enable, 1: disable
    -            CACHE_MMU_MEM_FORCE_ON: u1,
    -            /// The bit is used to power mmu memory down, 0: follow_rtc_lslp_pd, 1: power down
    -            CACHE_MMU_MEM_FORCE_PD: u1,
    -            /// The bit is used to power mmu memory down, 0: follow_rtc_lslp_pd, 1: power up
    -            CACHE_MMU_MEM_FORCE_PU: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -        }), base_address + 0xac);
    -
    -        /// address: 0x600c40b0
    -        /// This description will be updated in the near future.
    -        pub const CACHE_STATE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to indicate whether icache main fsm is in idle state or not. 1:
    -            /// in idle state, 0: not in idle state
    -            ICACHE_STATE: u12,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0xb0);
    -
    -        /// address: 0x600c40b4
    -        /// This description will be updated in the near future.
    -        pub const CACHE_ENCRYPT_DECRYPT_RECORD_DISABLE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Reserved.
    -            RECORD_DISABLE_DB_ENCRYPT: u1,
    -            /// Reserved.
    -            RECORD_DISABLE_G0CB_DECRYPT: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0xb4);
    -
    -        /// address: 0x600c40b8
    -        /// This description will be updated in the near future.
    -        pub const CACHE_ENCRYPT_DECRYPT_CLK_FORCE_ON = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to close clock gating of manual crypt clock. 1: close gating, 0:
    -            /// open clock gating.
    -            CLK_FORCE_ON_MANUAL_CRYPT: u1,
    -            /// The bit is used to close clock gating of automatic crypt clock. 1: close gating,
    -            /// 0: open clock gating.
    -            CLK_FORCE_ON_AUTO_CRYPT: u1,
    -            /// The bit is used to close clock gating of external memory encrypt and decrypt
    -            /// clock. 1: close gating, 0: open clock gating.
    -            CLK_FORCE_ON_CRYPT: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -        }), base_address + 0xb8);
    -
    -        /// address: 0x600c40bc
    -        /// This description will be updated in the near future.
    -        pub const CACHE_PRELOAD_INT_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to indicate the interrupt by icache pre-load done.
    -            ICACHE_PRELOAD_INT_ST: u1,
    -            /// The bit is used to enable the interrupt by icache pre-load done.
    -            ICACHE_PRELOAD_INT_ENA: u1,
    -            /// The bit is used to clear the interrupt by icache pre-load done.
    -            ICACHE_PRELOAD_INT_CLR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -        }), base_address + 0xbc);
    -
    -        /// address: 0x600c40c0
    -        /// This description will be updated in the near future.
    -        pub const CACHE_SYNC_INT_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to indicate the interrupt by icache sync done.
    -            ICACHE_SYNC_INT_ST: u1,
    -            /// The bit is used to enable the interrupt by icache sync done.
    -            ICACHE_SYNC_INT_ENA: u1,
    -            /// The bit is used to clear the interrupt by icache sync done.
    -            ICACHE_SYNC_INT_CLR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -        }), base_address + 0xc0);
    -
    -        /// address: 0x600c40c4
    -        /// This description will be updated in the near future.
    -        pub const CACHE_MMU_OWNER = @intToPtr(*volatile MmioInt(32, u4), base_address + 0xc4);
    -
    -        /// address: 0x600c40c8
    -        /// This description will be updated in the near future.
    -        pub const CACHE_CONF_MISC = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to disable checking mmu entry fault by preload operation.
    -            CACHE_IGNORE_PRELOAD_MMU_ENTRY_FAULT: u1,
    -            /// The bit is used to disable checking mmu entry fault by sync operation.
    -            CACHE_IGNORE_SYNC_MMU_ENTRY_FAULT: u1,
    -            /// The bit is used to enable cache trace function.
    -            CACHE_TRACE_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -        }), base_address + 0xc8);
    -
    -        /// address: 0x600c40cc
    -        /// This description will be updated in the near future.
    -        pub const ICACHE_FREEZE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to enable icache freeze mode
    -            ENA: u1,
    -            /// The bit is used to configure freeze mode, 0: assert busy if CPU miss 1: assert
    -            /// hit if CPU miss
    -            MODE: u1,
    -            /// The bit is used to indicate icache freeze success
    -            DONE: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -        }), base_address + 0xcc);
    -
    -        /// address: 0x600c40d0
    -        /// This description will be updated in the near future.
    -        pub const ICACHE_ATOMIC_OPERATE_ENA = @intToPtr(*volatile MmioInt(32, u1), base_address + 0xd0);
    -
    -        /// address: 0x600c40d4
    -        /// This description will be updated in the near future.
    -        pub const CACHE_REQUEST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to disable request recording which could cause performance issue
    -            BYPASS: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0xd4);
    -
    -        /// address: 0x600c40d8
    -        /// This description will be updated in the near future.
    -        pub const IBUS_PMS_TBL_LOCK = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to configure the ibus permission control section boundary0
    -            IBUS_PMS_LOCK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0xd8);
    -
    -        /// address: 0x600c40dc
    -        /// This description will be updated in the near future.
    -        pub const IBUS_PMS_TBL_BOUNDARY0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to configure the ibus permission control section boundary0
    -            IBUS_PMS_BOUNDARY0: u12,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0xdc);
    -
    -        /// address: 0x600c40e0
    -        /// This description will be updated in the near future.
    -        pub const IBUS_PMS_TBL_BOUNDARY1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to configure the ibus permission control section boundary1
    -            IBUS_PMS_BOUNDARY1: u12,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0xe0);
    -
    -        /// address: 0x600c40e4
    -        /// This description will be updated in the near future.
    -        pub const IBUS_PMS_TBL_BOUNDARY2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to configure the ibus permission control section boundary2
    -            IBUS_PMS_BOUNDARY2: u12,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0xe4);
    -
    -        /// address: 0x600c40e8
    -        /// This description will be updated in the near future.
    -        pub const IBUS_PMS_TBL_ATTR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to configure attribute of the ibus permission control section1,
    -            /// bit0: fetch in world0, bit1: load in world0, bit2: fetch in world1, bit3: load
    -            /// in world1
    -            IBUS_PMS_SCT1_ATTR: u4,
    -            /// The bit is used to configure attribute of the ibus permission control section2,
    -            /// bit0: fetch in world0, bit1: load in world0, bit2: fetch in world1, bit3: load
    -            /// in world1
    -            IBUS_PMS_SCT2_ATTR: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0xe8);
    -
    -        /// address: 0x600c40ec
    -        /// This description will be updated in the near future.
    -        pub const DBUS_PMS_TBL_LOCK = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to configure the ibus permission control section boundary0
    -            DBUS_PMS_LOCK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0xec);
    -
    -        /// address: 0x600c40f0
    -        /// This description will be updated in the near future.
    -        pub const DBUS_PMS_TBL_BOUNDARY0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to configure the dbus permission control section boundary0
    -            DBUS_PMS_BOUNDARY0: u12,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0xf0);
    -
    -        /// address: 0x600c40f4
    -        /// This description will be updated in the near future.
    -        pub const DBUS_PMS_TBL_BOUNDARY1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to configure the dbus permission control section boundary1
    -            DBUS_PMS_BOUNDARY1: u12,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0xf4);
    -
    -        /// address: 0x600c40f8
    -        /// This description will be updated in the near future.
    -        pub const DBUS_PMS_TBL_BOUNDARY2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to configure the dbus permission control section boundary2
    -            DBUS_PMS_BOUNDARY2: u12,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0xf8);
    -
    -        /// address: 0x600c40fc
    -        /// This description will be updated in the near future.
    -        pub const DBUS_PMS_TBL_ATTR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to configure attribute of the dbus permission control section1,
    -            /// bit0: load in world0, bit2: load in world1
    -            DBUS_PMS_SCT1_ATTR: u2,
    -            /// The bit is used to configure attribute of the dbus permission control section2,
    -            /// bit0: load in world0, bit2: load in world1
    -            DBUS_PMS_SCT2_ATTR: u2,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0xfc);
    -
    -        /// address: 0x600c4100
    -        /// This description will be updated in the near future.
    -        pub const CLOCK_GATE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// clock gate enable.
    -            CLK_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x100);
    -
    -        /// address: 0x600c43fc
    -        /// This description will be updated in the near future.
    -        pub const REG_DATE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// version information
    -            DATE: u28,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -        }), base_address + 0x3fc);
    -    };
    -
    -    /// General Purpose Input/Output
    -    pub const GPIO = struct {
    -        pub const base_address = 0x60004000;
    -
    -        /// address: 0x60004000
    -        /// GPIO bit select register
    -        pub const BT_SELECT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// GPIO bit select register
    -            BT_SEL: u32,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x60004004
    -        /// GPIO output register
    -        pub const OUT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// GPIO output register for GPIO0-25
    -            DATA_ORIG: u26,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x60004008
    -        /// GPIO output set register
    -        pub const OUT_W1TS = @intToPtr(*volatile MmioInt(32, u26), base_address + 0x8);
    -
    -        /// address: 0x6000400c
    -        /// GPIO output clear register
    -        pub const OUT_W1TC = @intToPtr(*volatile MmioInt(32, u26), base_address + 0xc);
    -
    -        /// address: 0x6000401c
    -        /// GPIO sdio select register
    -        pub const SDIO_SELECT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// GPIO sdio select register
    -            SDIO_SEL: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x60004020
    -        /// GPIO output enable register
    -        pub const ENABLE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// GPIO output enable register for GPIO0-25
    -            DATA: u26,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x60004024
    -        /// GPIO output enable set register
    -        pub const ENABLE_W1TS = @intToPtr(*volatile MmioInt(32, u26), base_address + 0x24);
    -
    -        /// address: 0x60004028
    -        /// GPIO output enable clear register
    -        pub const ENABLE_W1TC = @intToPtr(*volatile MmioInt(32, u26), base_address + 0x28);
    -
    -        /// address: 0x60004038
    -        /// pad strapping register
    -        pub const STRAP = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// pad strapping register
    -            STRAPPING: u16,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x6000403c
    -        /// GPIO input register
    -        pub const IN = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// GPIO input register for GPIO0-25
    -            DATA_NEXT: u26,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x60004044
    -        /// GPIO interrupt status register
    -        pub const STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// GPIO interrupt status register for GPIO0-25
    -            INTERRUPT: u26,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x60004048
    -        /// GPIO interrupt status set register
    -        pub const STATUS_W1TS = @intToPtr(*volatile MmioInt(32, u26), base_address + 0x48);
    -
    -        /// address: 0x6000404c
    -        /// GPIO interrupt status clear register
    -        pub const STATUS_W1TC = @intToPtr(*volatile MmioInt(32, u26), base_address + 0x4c);
    -
    -        /// address: 0x6000405c
    -        /// GPIO PRO_CPU interrupt status register
    -        pub const PCPU_INT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// GPIO PRO_CPU interrupt status register for GPIO0-25
    -            PROCPU_INT: u26,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x60004060
    -        /// GPIO PRO_CPU(not shielded) interrupt status register
    -        pub const PCPU_NMI_INT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// GPIO PRO_CPU(not shielded) interrupt status register for GPIO0-25
    -            PROCPU_NMI_INT: u26,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x60004064
    -        /// GPIO CPUSDIO interrupt status register
    -        pub const CPUSDIO_INT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// GPIO CPUSDIO interrupt status register for GPIO0-25
    -            SDIO_INT: u26,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x60004074
    -        /// GPIO pin configuration register
    -        pub const PIN0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC2_BYPASS: u2,
    -            /// set this bit to select pad driver. 1:open-drain. :normal.
    -            PIN_PAD_DRIVER: u1,
    -            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC1_BYPASS: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    -            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    -            /// 5:valid at high level
    -            PIN_INT_TYPE: u3,
    -            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    -            PIN_WAKEUP_ENABLE: u1,
    -            /// reserved
    -            PIN_CONFIG: u2,
    -            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    -            /// interrupt.
    -            PIN_INT_ENA: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0x74);
    -
    -        /// address: 0x60004078
    -        /// GPIO pin configuration register
    -        pub const PIN1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC2_BYPASS: u2,
    -            /// set this bit to select pad driver. 1:open-drain. :normal.
    -            PIN_PAD_DRIVER: u1,
    -            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC1_BYPASS: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    -            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    -            /// 5:valid at high level
    -            PIN_INT_TYPE: u3,
    -            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    -            PIN_WAKEUP_ENABLE: u1,
    -            /// reserved
    -            PIN_CONFIG: u2,
    -            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    -            /// interrupt.
    -            PIN_INT_ENA: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0x78);
    -
    -        /// address: 0x6000407c
    -        /// GPIO pin configuration register
    -        pub const PIN2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC2_BYPASS: u2,
    -            /// set this bit to select pad driver. 1:open-drain. :normal.
    -            PIN_PAD_DRIVER: u1,
    -            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC1_BYPASS: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    -            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    -            /// 5:valid at high level
    -            PIN_INT_TYPE: u3,
    -            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    -            PIN_WAKEUP_ENABLE: u1,
    -            /// reserved
    -            PIN_CONFIG: u2,
    -            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    -            /// interrupt.
    -            PIN_INT_ENA: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0x7c);
    -
    -        /// address: 0x60004080
    -        /// GPIO pin configuration register
    -        pub const PIN3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC2_BYPASS: u2,
    -            /// set this bit to select pad driver. 1:open-drain. :normal.
    -            PIN_PAD_DRIVER: u1,
    -            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC1_BYPASS: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    -            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    -            /// 5:valid at high level
    -            PIN_INT_TYPE: u3,
    -            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    -            PIN_WAKEUP_ENABLE: u1,
    -            /// reserved
    -            PIN_CONFIG: u2,
    -            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    -            /// interrupt.
    -            PIN_INT_ENA: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0x80);
    -
    -        /// address: 0x60004084
    -        /// GPIO pin configuration register
    -        pub const PIN4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC2_BYPASS: u2,
    -            /// set this bit to select pad driver. 1:open-drain. :normal.
    -            PIN_PAD_DRIVER: u1,
    -            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC1_BYPASS: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    -            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    -            /// 5:valid at high level
    -            PIN_INT_TYPE: u3,
    -            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    -            PIN_WAKEUP_ENABLE: u1,
    -            /// reserved
    -            PIN_CONFIG: u2,
    -            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    -            /// interrupt.
    -            PIN_INT_ENA: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0x84);
    -
    -        /// address: 0x60004088
    -        /// GPIO pin configuration register
    -        pub const PIN5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC2_BYPASS: u2,
    -            /// set this bit to select pad driver. 1:open-drain. :normal.
    -            PIN_PAD_DRIVER: u1,
    -            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC1_BYPASS: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    -            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    -            /// 5:valid at high level
    -            PIN_INT_TYPE: u3,
    -            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    -            PIN_WAKEUP_ENABLE: u1,
    -            /// reserved
    -            PIN_CONFIG: u2,
    -            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    -            /// interrupt.
    -            PIN_INT_ENA: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0x88);
    -
    -        /// address: 0x6000408c
    -        /// GPIO pin configuration register
    -        pub const PIN6 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC2_BYPASS: u2,
    -            /// set this bit to select pad driver. 1:open-drain. :normal.
    -            PIN_PAD_DRIVER: u1,
    -            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC1_BYPASS: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    -            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    -            /// 5:valid at high level
    -            PIN_INT_TYPE: u3,
    -            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    -            PIN_WAKEUP_ENABLE: u1,
    -            /// reserved
    -            PIN_CONFIG: u2,
    -            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    -            /// interrupt.
    -            PIN_INT_ENA: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0x8c);
    -
    -        /// address: 0x60004090
    -        /// GPIO pin configuration register
    -        pub const PIN7 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC2_BYPASS: u2,
    -            /// set this bit to select pad driver. 1:open-drain. :normal.
    -            PIN_PAD_DRIVER: u1,
    -            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC1_BYPASS: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    -            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    -            /// 5:valid at high level
    -            PIN_INT_TYPE: u3,
    -            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    -            PIN_WAKEUP_ENABLE: u1,
    -            /// reserved
    -            PIN_CONFIG: u2,
    -            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    -            /// interrupt.
    -            PIN_INT_ENA: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0x90);
    -
    -        /// address: 0x60004094
    -        /// GPIO pin configuration register
    -        pub const PIN8 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC2_BYPASS: u2,
    -            /// set this bit to select pad driver. 1:open-drain. :normal.
    -            PIN_PAD_DRIVER: u1,
    -            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC1_BYPASS: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    -            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    -            /// 5:valid at high level
    -            PIN_INT_TYPE: u3,
    -            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    -            PIN_WAKEUP_ENABLE: u1,
    -            /// reserved
    -            PIN_CONFIG: u2,
    -            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    -            /// interrupt.
    -            PIN_INT_ENA: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0x94);
    -
    -        /// address: 0x60004098
    -        /// GPIO pin configuration register
    -        pub const PIN9 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC2_BYPASS: u2,
    -            /// set this bit to select pad driver. 1:open-drain. :normal.
    -            PIN_PAD_DRIVER: u1,
    -            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC1_BYPASS: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    -            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    -            /// 5:valid at high level
    -            PIN_INT_TYPE: u3,
    -            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    -            PIN_WAKEUP_ENABLE: u1,
    -            /// reserved
    -            PIN_CONFIG: u2,
    -            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    -            /// interrupt.
    -            PIN_INT_ENA: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0x98);
    -
    -        /// address: 0x6000409c
    -        /// GPIO pin configuration register
    -        pub const PIN10 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC2_BYPASS: u2,
    -            /// set this bit to select pad driver. 1:open-drain. :normal.
    -            PIN_PAD_DRIVER: u1,
    -            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC1_BYPASS: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    -            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    -            /// 5:valid at high level
    -            PIN_INT_TYPE: u3,
    -            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    -            PIN_WAKEUP_ENABLE: u1,
    -            /// reserved
    -            PIN_CONFIG: u2,
    -            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    -            /// interrupt.
    -            PIN_INT_ENA: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0x9c);
    -
    -        /// address: 0x600040a0
    -        /// GPIO pin configuration register
    -        pub const PIN11 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC2_BYPASS: u2,
    -            /// set this bit to select pad driver. 1:open-drain. :normal.
    -            PIN_PAD_DRIVER: u1,
    -            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC1_BYPASS: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    -            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    -            /// 5:valid at high level
    -            PIN_INT_TYPE: u3,
    -            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    -            PIN_WAKEUP_ENABLE: u1,
    -            /// reserved
    -            PIN_CONFIG: u2,
    -            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    -            /// interrupt.
    -            PIN_INT_ENA: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0xa0);
    -
    -        /// address: 0x600040a4
    -        /// GPIO pin configuration register
    -        pub const PIN12 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC2_BYPASS: u2,
    -            /// set this bit to select pad driver. 1:open-drain. :normal.
    -            PIN_PAD_DRIVER: u1,
    -            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC1_BYPASS: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    -            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    -            /// 5:valid at high level
    -            PIN_INT_TYPE: u3,
    -            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    -            PIN_WAKEUP_ENABLE: u1,
    -            /// reserved
    -            PIN_CONFIG: u2,
    -            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    -            /// interrupt.
    -            PIN_INT_ENA: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0xa4);
    -
    -        /// address: 0x600040a8
    -        /// GPIO pin configuration register
    -        pub const PIN13 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC2_BYPASS: u2,
    -            /// set this bit to select pad driver. 1:open-drain. :normal.
    -            PIN_PAD_DRIVER: u1,
    -            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC1_BYPASS: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    -            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    -            /// 5:valid at high level
    -            PIN_INT_TYPE: u3,
    -            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    -            PIN_WAKEUP_ENABLE: u1,
    -            /// reserved
    -            PIN_CONFIG: u2,
    -            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    -            /// interrupt.
    -            PIN_INT_ENA: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0xa8);
    -
    -        /// address: 0x600040ac
    -        /// GPIO pin configuration register
    -        pub const PIN14 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC2_BYPASS: u2,
    -            /// set this bit to select pad driver. 1:open-drain. :normal.
    -            PIN_PAD_DRIVER: u1,
    -            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC1_BYPASS: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    -            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    -            /// 5:valid at high level
    -            PIN_INT_TYPE: u3,
    -            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    -            PIN_WAKEUP_ENABLE: u1,
    -            /// reserved
    -            PIN_CONFIG: u2,
    -            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    -            /// interrupt.
    -            PIN_INT_ENA: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0xac);
    -
    -        /// address: 0x600040b0
    -        /// GPIO pin configuration register
    -        pub const PIN15 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC2_BYPASS: u2,
    -            /// set this bit to select pad driver. 1:open-drain. :normal.
    -            PIN_PAD_DRIVER: u1,
    -            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC1_BYPASS: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    -            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    -            /// 5:valid at high level
    -            PIN_INT_TYPE: u3,
    -            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    -            PIN_WAKEUP_ENABLE: u1,
    -            /// reserved
    -            PIN_CONFIG: u2,
    -            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    -            /// interrupt.
    -            PIN_INT_ENA: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0xb0);
    -
    -        /// address: 0x600040b4
    -        /// GPIO pin configuration register
    -        pub const PIN16 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC2_BYPASS: u2,
    -            /// set this bit to select pad driver. 1:open-drain. :normal.
    -            PIN_PAD_DRIVER: u1,
    -            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC1_BYPASS: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    -            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    -            /// 5:valid at high level
    -            PIN_INT_TYPE: u3,
    -            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    -            PIN_WAKEUP_ENABLE: u1,
    -            /// reserved
    -            PIN_CONFIG: u2,
    -            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    -            /// interrupt.
    -            PIN_INT_ENA: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0xb4);
    -
    -        /// address: 0x600040b8
    -        /// GPIO pin configuration register
    -        pub const PIN17 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC2_BYPASS: u2,
    -            /// set this bit to select pad driver. 1:open-drain. :normal.
    -            PIN_PAD_DRIVER: u1,
    -            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC1_BYPASS: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    -            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    -            /// 5:valid at high level
    -            PIN_INT_TYPE: u3,
    -            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    -            PIN_WAKEUP_ENABLE: u1,
    -            /// reserved
    -            PIN_CONFIG: u2,
    -            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    -            /// interrupt.
    -            PIN_INT_ENA: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0xb8);
    -
    -        /// address: 0x600040bc
    -        /// GPIO pin configuration register
    -        pub const PIN18 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC2_BYPASS: u2,
    -            /// set this bit to select pad driver. 1:open-drain. :normal.
    -            PIN_PAD_DRIVER: u1,
    -            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC1_BYPASS: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    -            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    -            /// 5:valid at high level
    -            PIN_INT_TYPE: u3,
    -            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    -            PIN_WAKEUP_ENABLE: u1,
    -            /// reserved
    -            PIN_CONFIG: u2,
    -            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    -            /// interrupt.
    -            PIN_INT_ENA: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0xbc);
    -
    -        /// address: 0x600040c0
    -        /// GPIO pin configuration register
    -        pub const PIN19 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC2_BYPASS: u2,
    -            /// set this bit to select pad driver. 1:open-drain. :normal.
    -            PIN_PAD_DRIVER: u1,
    -            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC1_BYPASS: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    -            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    -            /// 5:valid at high level
    -            PIN_INT_TYPE: u3,
    -            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    -            PIN_WAKEUP_ENABLE: u1,
    -            /// reserved
    -            PIN_CONFIG: u2,
    -            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    -            /// interrupt.
    -            PIN_INT_ENA: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0xc0);
    -
    -        /// address: 0x600040c4
    -        /// GPIO pin configuration register
    -        pub const PIN20 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC2_BYPASS: u2,
    -            /// set this bit to select pad driver. 1:open-drain. :normal.
    -            PIN_PAD_DRIVER: u1,
    -            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC1_BYPASS: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    -            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    -            /// 5:valid at high level
    -            PIN_INT_TYPE: u3,
    -            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    -            PIN_WAKEUP_ENABLE: u1,
    -            /// reserved
    -            PIN_CONFIG: u2,
    -            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    -            /// interrupt.
    -            PIN_INT_ENA: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0xc4);
    -
    -        /// address: 0x600040c8
    -        /// GPIO pin configuration register
    -        pub const PIN21 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC2_BYPASS: u2,
    -            /// set this bit to select pad driver. 1:open-drain. :normal.
    -            PIN_PAD_DRIVER: u1,
    -            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC1_BYPASS: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    -            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    -            /// 5:valid at high level
    -            PIN_INT_TYPE: u3,
    -            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    -            PIN_WAKEUP_ENABLE: u1,
    -            /// reserved
    -            PIN_CONFIG: u2,
    -            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    -            /// interrupt.
    -            PIN_INT_ENA: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0xc8);
    -
    -        /// address: 0x600040cc
    -        /// GPIO pin configuration register
    -        pub const PIN22 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC2_BYPASS: u2,
    -            /// set this bit to select pad driver. 1:open-drain. :normal.
    -            PIN_PAD_DRIVER: u1,
    -            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC1_BYPASS: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    -            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    -            /// 5:valid at high level
    -            PIN_INT_TYPE: u3,
    -            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    -            PIN_WAKEUP_ENABLE: u1,
    -            /// reserved
    -            PIN_CONFIG: u2,
    -            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    -            /// interrupt.
    -            PIN_INT_ENA: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0xcc);
    -
    -        /// address: 0x600040d0
    -        /// GPIO pin configuration register
    -        pub const PIN23 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC2_BYPASS: u2,
    -            /// set this bit to select pad driver. 1:open-drain. :normal.
    -            PIN_PAD_DRIVER: u1,
    -            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC1_BYPASS: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    -            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    -            /// 5:valid at high level
    -            PIN_INT_TYPE: u3,
    -            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    -            PIN_WAKEUP_ENABLE: u1,
    -            /// reserved
    -            PIN_CONFIG: u2,
    -            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    -            /// interrupt.
    -            PIN_INT_ENA: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0xd0);
    -
    -        /// address: 0x600040d4
    -        /// GPIO pin configuration register
    -        pub const PIN24 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC2_BYPASS: u2,
    -            /// set this bit to select pad driver. 1:open-drain. :normal.
    -            PIN_PAD_DRIVER: u1,
    -            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC1_BYPASS: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    -            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    -            /// 5:valid at high level
    -            PIN_INT_TYPE: u3,
    -            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    -            PIN_WAKEUP_ENABLE: u1,
    -            /// reserved
    -            PIN_CONFIG: u2,
    -            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    -            /// interrupt.
    -            PIN_INT_ENA: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0xd4);
    -
    -        /// address: 0x600040d8
    -        /// GPIO pin configuration register
    -        pub const PIN25 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC2_BYPASS: u2,
    -            /// set this bit to select pad driver. 1:open-drain. :normal.
    -            PIN_PAD_DRIVER: u1,
    -            /// set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger
    -            /// at posedge.
    -            PIN_SYNC1_BYPASS: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at
    -            /// posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level.
    -            /// 5:valid at high level
    -            PIN_INT_TYPE: u3,
    -            /// set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    -            PIN_WAKEUP_ENABLE: u1,
    -            /// reserved
    -            PIN_CONFIG: u2,
    -            /// set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded)
    -            /// interrupt.
    -            PIN_INT_ENA: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0xd8);
    -
    -        /// address: 0x6000414c
    -        /// GPIO interrupt source register
    -        pub const STATUS_NEXT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// GPIO interrupt source register for GPIO0-25
    -            STATUS_INTERRUPT_NEXT: u26,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -        }), base_address + 0x14c);
    -
    -        /// address: 0x60004154
    -        /// GPIO input function configuration register
    -        pub const FUNC0_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x154);
    -
    -        /// address: 0x60004158
    -        /// GPIO input function configuration register
    -        pub const FUNC1_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x158);
    -
    -        /// address: 0x6000415c
    -        /// GPIO input function configuration register
    -        pub const FUNC2_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x15c);
    -
    -        /// address: 0x60004160
    -        /// GPIO input function configuration register
    -        pub const FUNC3_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x160);
    -
    -        /// address: 0x60004164
    -        /// GPIO input function configuration register
    -        pub const FUNC4_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x164);
    -
    -        /// address: 0x60004168
    -        /// GPIO input function configuration register
    -        pub const FUNC5_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x168);
    -
    -        /// address: 0x6000416c
    -        /// GPIO input function configuration register
    -        pub const FUNC6_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x16c);
    -
    -        /// address: 0x60004170
    -        /// GPIO input function configuration register
    -        pub const FUNC7_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x170);
    -
    -        /// address: 0x60004174
    -        /// GPIO input function configuration register
    -        pub const FUNC8_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x174);
    -
    -        /// address: 0x60004178
    -        /// GPIO input function configuration register
    -        pub const FUNC9_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x178);
    -
    -        /// address: 0x6000417c
    -        /// GPIO input function configuration register
    -        pub const FUNC10_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x17c);
    -
    -        /// address: 0x60004180
    -        /// GPIO input function configuration register
    -        pub const FUNC11_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x180);
    -
    -        /// address: 0x60004184
    -        /// GPIO input function configuration register
    -        pub const FUNC12_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x184);
    -
    -        /// address: 0x60004188
    -        /// GPIO input function configuration register
    -        pub const FUNC13_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x188);
    -
    -        /// address: 0x6000418c
    -        /// GPIO input function configuration register
    -        pub const FUNC14_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x18c);
    -
    -        /// address: 0x60004190
    -        /// GPIO input function configuration register
    -        pub const FUNC15_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x190);
    -
    -        /// address: 0x60004194
    -        /// GPIO input function configuration register
    -        pub const FUNC16_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x194);
    -
    -        /// address: 0x60004198
    -        /// GPIO input function configuration register
    -        pub const FUNC17_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x198);
    -
    -        /// address: 0x6000419c
    -        /// GPIO input function configuration register
    -        pub const FUNC18_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x19c);
    -
    -        /// address: 0x600041a0
    -        /// GPIO input function configuration register
    -        pub const FUNC19_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x1a0);
    -
    -        /// address: 0x600041a4
    -        /// GPIO input function configuration register
    -        pub const FUNC20_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x1a4);
    -
    -        /// address: 0x600041a8
    -        /// GPIO input function configuration register
    -        pub const FUNC21_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x1a8);
    -
    -        /// address: 0x600041ac
    -        /// GPIO input function configuration register
    -        pub const FUNC22_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x1ac);
    -
    -        /// address: 0x600041b0
    -        /// GPIO input function configuration register
    -        pub const FUNC23_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x1b0);
    -
    -        /// address: 0x600041b4
    -        /// GPIO input function configuration register
    -        pub const FUNC24_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x1b4);
    -
    -        /// address: 0x600041b8
    -        /// GPIO input function configuration register
    -        pub const FUNC25_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x1b8);
    -
    -        /// address: 0x600041bc
    -        /// GPIO input function configuration register
    -        pub const FUNC26_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x1bc);
    -
    -        /// address: 0x600041c0
    -        /// GPIO input function configuration register
    -        pub const FUNC27_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x1c0);
    -
    -        /// address: 0x600041c4
    -        /// GPIO input function configuration register
    -        pub const FUNC28_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x1c4);
    -
    -        /// address: 0x600041c8
    -        /// GPIO input function configuration register
    -        pub const FUNC29_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x1c8);
    -
    -        /// address: 0x600041cc
    -        /// GPIO input function configuration register
    -        pub const FUNC30_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x1cc);
    -
    -        /// address: 0x600041d0
    -        /// GPIO input function configuration register
    -        pub const FUNC31_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x1d0);
    -
    -        /// address: 0x600041d4
    -        /// GPIO input function configuration register
    -        pub const FUNC32_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x1d4);
    -
    -        /// address: 0x600041d8
    -        /// GPIO input function configuration register
    -        pub const FUNC33_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x1d8);
    -
    -        /// address: 0x600041dc
    -        /// GPIO input function configuration register
    -        pub const FUNC34_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x1dc);
    -
    -        /// address: 0x600041e0
    -        /// GPIO input function configuration register
    -        pub const FUNC35_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x1e0);
    -
    -        /// address: 0x600041e4
    -        /// GPIO input function configuration register
    -        pub const FUNC36_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x1e4);
    -
    -        /// address: 0x600041e8
    -        /// GPIO input function configuration register
    -        pub const FUNC37_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x1e8);
    -
    -        /// address: 0x600041ec
    -        /// GPIO input function configuration register
    -        pub const FUNC38_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x1ec);
    -
    -        /// address: 0x600041f0
    -        /// GPIO input function configuration register
    -        pub const FUNC39_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x1f0);
    -
    -        /// address: 0x600041f4
    -        /// GPIO input function configuration register
    -        pub const FUNC40_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x1f4);
    -
    -        /// address: 0x600041f8
    -        /// GPIO input function configuration register
    -        pub const FUNC41_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x1f8);
    -
    -        /// address: 0x600041fc
    -        /// GPIO input function configuration register
    -        pub const FUNC42_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x1fc);
    -
    -        /// address: 0x60004200
    -        /// GPIO input function configuration register
    -        pub const FUNC43_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x200);
    -
    -        /// address: 0x60004204
    -        /// GPIO input function configuration register
    -        pub const FUNC44_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x204);
    -
    -        /// address: 0x60004208
    -        /// GPIO input function configuration register
    -        pub const FUNC45_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x208);
    -
    -        /// address: 0x6000420c
    -        /// GPIO input function configuration register
    -        pub const FUNC46_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x20c);
    -
    -        /// address: 0x60004210
    -        /// GPIO input function configuration register
    -        pub const FUNC47_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x210);
    -
    -        /// address: 0x60004214
    -        /// GPIO input function configuration register
    -        pub const FUNC48_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x214);
    -
    -        /// address: 0x60004218
    -        /// GPIO input function configuration register
    -        pub const FUNC49_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x218);
    -
    -        /// address: 0x6000421c
    -        /// GPIO input function configuration register
    -        pub const FUNC50_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x21c);
    -
    -        /// address: 0x60004220
    -        /// GPIO input function configuration register
    -        pub const FUNC51_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x220);
    -
    -        /// address: 0x60004224
    -        /// GPIO input function configuration register
    -        pub const FUNC52_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x224);
    -
    -        /// address: 0x60004228
    -        /// GPIO input function configuration register
    -        pub const FUNC53_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x228);
    -
    -        /// address: 0x6000422c
    -        /// GPIO input function configuration register
    -        pub const FUNC54_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x22c);
    -
    -        /// address: 0x60004230
    -        /// GPIO input function configuration register
    -        pub const FUNC55_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x230);
    -
    -        /// address: 0x60004234
    -        /// GPIO input function configuration register
    -        pub const FUNC56_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x234);
    -
    -        /// address: 0x60004238
    -        /// GPIO input function configuration register
    -        pub const FUNC57_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x238);
    -
    -        /// address: 0x6000423c
    -        /// GPIO input function configuration register
    -        pub const FUNC58_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x23c);
    -
    -        /// address: 0x60004240
    -        /// GPIO input function configuration register
    -        pub const FUNC59_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x240);
    -
    -        /// address: 0x60004244
    -        /// GPIO input function configuration register
    -        pub const FUNC60_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x244);
    -
    -        /// address: 0x60004248
    -        /// GPIO input function configuration register
    -        pub const FUNC61_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x248);
    -
    -        /// address: 0x6000424c
    -        /// GPIO input function configuration register
    -        pub const FUNC62_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x24c);
    -
    -        /// address: 0x60004250
    -        /// GPIO input function configuration register
    -        pub const FUNC63_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x250);
    -
    -        /// address: 0x60004254
    -        /// GPIO input function configuration register
    -        pub const FUNC64_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x254);
    -
    -        /// address: 0x60004258
    -        /// GPIO input function configuration register
    -        pub const FUNC65_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x258);
    -
    -        /// address: 0x6000425c
    -        /// GPIO input function configuration register
    -        pub const FUNC66_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x25c);
    -
    -        /// address: 0x60004260
    -        /// GPIO input function configuration register
    -        pub const FUNC67_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x260);
    -
    -        /// address: 0x60004264
    -        /// GPIO input function configuration register
    -        pub const FUNC68_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x264);
    -
    -        /// address: 0x60004268
    -        /// GPIO input function configuration register
    -        pub const FUNC69_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x268);
    -
    -        /// address: 0x6000426c
    -        /// GPIO input function configuration register
    -        pub const FUNC70_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x26c);
    -
    -        /// address: 0x60004270
    -        /// GPIO input function configuration register
    -        pub const FUNC71_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x270);
    -
    -        /// address: 0x60004274
    -        /// GPIO input function configuration register
    -        pub const FUNC72_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x274);
    -
    -        /// address: 0x60004278
    -        /// GPIO input function configuration register
    -        pub const FUNC73_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x278);
    -
    -        /// address: 0x6000427c
    -        /// GPIO input function configuration register
    -        pub const FUNC74_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x27c);
    -
    -        /// address: 0x60004280
    -        /// GPIO input function configuration register
    -        pub const FUNC75_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x280);
    -
    -        /// address: 0x60004284
    -        /// GPIO input function configuration register
    -        pub const FUNC76_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x284);
    -
    -        /// address: 0x60004288
    -        /// GPIO input function configuration register
    -        pub const FUNC77_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x288);
    -
    -        /// address: 0x6000428c
    -        /// GPIO input function configuration register
    -        pub const FUNC78_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x28c);
    -
    -        /// address: 0x60004290
    -        /// GPIO input function configuration register
    -        pub const FUNC79_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x290);
    -
    -        /// address: 0x60004294
    -        /// GPIO input function configuration register
    -        pub const FUNC80_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x294);
    -
    -        /// address: 0x60004298
    -        /// GPIO input function configuration register
    -        pub const FUNC81_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x298);
    -
    -        /// address: 0x6000429c
    -        /// GPIO input function configuration register
    -        pub const FUNC82_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x29c);
    -
    -        /// address: 0x600042a0
    -        /// GPIO input function configuration register
    -        pub const FUNC83_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x2a0);
    -
    -        /// address: 0x600042a4
    -        /// GPIO input function configuration register
    -        pub const FUNC84_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x2a4);
    -
    -        /// address: 0x600042a8
    -        /// GPIO input function configuration register
    -        pub const FUNC85_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x2a8);
    -
    -        /// address: 0x600042ac
    -        /// GPIO input function configuration register
    -        pub const FUNC86_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x2ac);
    -
    -        /// address: 0x600042b0
    -        /// GPIO input function configuration register
    -        pub const FUNC87_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x2b0);
    -
    -        /// address: 0x600042b4
    -        /// GPIO input function configuration register
    -        pub const FUNC88_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x2b4);
    -
    -        /// address: 0x600042b8
    -        /// GPIO input function configuration register
    -        pub const FUNC89_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x2b8);
    -
    -        /// address: 0x600042bc
    -        /// GPIO input function configuration register
    -        pub const FUNC90_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x2bc);
    -
    -        /// address: 0x600042c0
    -        /// GPIO input function configuration register
    -        pub const FUNC91_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x2c0);
    -
    -        /// address: 0x600042c4
    -        /// GPIO input function configuration register
    -        pub const FUNC92_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x2c4);
    -
    -        /// address: 0x600042c8
    -        /// GPIO input function configuration register
    -        pub const FUNC93_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x2c8);
    -
    -        /// address: 0x600042cc
    -        /// GPIO input function configuration register
    -        pub const FUNC94_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x2cc);
    -
    -        /// address: 0x600042d0
    -        /// GPIO input function configuration register
    -        pub const FUNC95_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x2d0);
    -
    -        /// address: 0x600042d4
    -        /// GPIO input function configuration register
    -        pub const FUNC96_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x2d4);
    -
    -        /// address: 0x600042d8
    -        /// GPIO input function configuration register
    -        pub const FUNC97_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x2d8);
    -
    -        /// address: 0x600042dc
    -        /// GPIO input function configuration register
    -        pub const FUNC98_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x2dc);
    -
    -        /// address: 0x600042e0
    -        /// GPIO input function configuration register
    -        pub const FUNC99_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x2e0);
    -
    -        /// address: 0x600042e4
    -        /// GPIO input function configuration register
    -        pub const FUNC100_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x2e4);
    -
    -        /// address: 0x600042e8
    -        /// GPIO input function configuration register
    -        pub const FUNC101_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x2e8);
    -
    -        /// address: 0x600042ec
    -        /// GPIO input function configuration register
    -        pub const FUNC102_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x2ec);
    -
    -        /// address: 0x600042f0
    -        /// GPIO input function configuration register
    -        pub const FUNC103_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x2f0);
    -
    -        /// address: 0x600042f4
    -        /// GPIO input function configuration register
    -        pub const FUNC104_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x2f4);
    -
    -        /// address: 0x600042f8
    -        /// GPIO input function configuration register
    -        pub const FUNC105_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x2f8);
    -
    -        /// address: 0x600042fc
    -        /// GPIO input function configuration register
    -        pub const FUNC106_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x2fc);
    -
    -        /// address: 0x60004300
    -        /// GPIO input function configuration register
    -        pub const FUNC107_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x300);
    -
    -        /// address: 0x60004304
    -        /// GPIO input function configuration register
    -        pub const FUNC108_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x304);
    -
    -        /// address: 0x60004308
    -        /// GPIO input function configuration register
    -        pub const FUNC109_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x308);
    -
    -        /// address: 0x6000430c
    -        /// GPIO input function configuration register
    -        pub const FUNC110_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x30c);
    -
    -        /// address: 0x60004310
    -        /// GPIO input function configuration register
    -        pub const FUNC111_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x310);
    -
    -        /// address: 0x60004314
    -        /// GPIO input function configuration register
    -        pub const FUNC112_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x314);
    -
    -        /// address: 0x60004318
    -        /// GPIO input function configuration register
    -        pub const FUNC113_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x318);
    -
    -        /// address: 0x6000431c
    -        /// GPIO input function configuration register
    -        pub const FUNC114_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x31c);
    -
    -        /// address: 0x60004320
    -        /// GPIO input function configuration register
    -        pub const FUNC115_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x320);
    -
    -        /// address: 0x60004324
    -        /// GPIO input function configuration register
    -        pub const FUNC116_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x324);
    -
    -        /// address: 0x60004328
    -        /// GPIO input function configuration register
    -        pub const FUNC117_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x328);
    -
    -        /// address: 0x6000432c
    -        /// GPIO input function configuration register
    -        pub const FUNC118_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x32c);
    -
    -        /// address: 0x60004330
    -        /// GPIO input function configuration register
    -        pub const FUNC119_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x330);
    -
    -        /// address: 0x60004334
    -        /// GPIO input function configuration register
    -        pub const FUNC120_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x334);
    -
    -        /// address: 0x60004338
    -        /// GPIO input function configuration register
    -        pub const FUNC121_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x338);
    -
    -        /// address: 0x6000433c
    -        /// GPIO input function configuration register
    -        pub const FUNC122_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x33c);
    -
    -        /// address: 0x60004340
    -        /// GPIO input function configuration register
    -        pub const FUNC123_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x340);
    -
    -        /// address: 0x60004344
    -        /// GPIO input function configuration register
    -        pub const FUNC124_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x344);
    -
    -        /// address: 0x60004348
    -        /// GPIO input function configuration register
    -        pub const FUNC125_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x348);
    -
    -        /// address: 0x6000434c
    -        /// GPIO input function configuration register
    -        pub const FUNC126_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x34c);
    -
    -        /// address: 0x60004350
    -        /// GPIO input function configuration register
    -        pub const FUNC127_IN_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always
    -            /// high level. s=x3C: set this port always low level.
    -            IN_SEL: u5,
    -            /// set this bit to invert input signal. 1:invert. :not invert.
    -            IN_INV_SEL: u1,
    -            /// set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -            SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x350);
    -
    -        /// address: 0x60004554
    -        /// GPIO output function select register
    -        pub const FUNC0_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    -            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    -            /// GPIO_OUT_REG[n].
    -            OUT_SEL: u8,
    -            /// set this bit to invert output signal.1:invert.:not invert.
    -            INV_SEL: u1,
    -            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    -            /// enable signal.:use peripheral output enable signal.
    -            OEN_SEL: u1,
    -            /// set this bit to invert output enable signal.1:invert.:not invert.
    -            OEN_INV_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x554);
    -
    -        /// address: 0x60004558
    -        /// GPIO output function select register
    -        pub const FUNC1_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    -            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    -            /// GPIO_OUT_REG[n].
    -            OUT_SEL: u8,
    -            /// set this bit to invert output signal.1:invert.:not invert.
    -            INV_SEL: u1,
    -            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    -            /// enable signal.:use peripheral output enable signal.
    -            OEN_SEL: u1,
    -            /// set this bit to invert output enable signal.1:invert.:not invert.
    -            OEN_INV_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x558);
    -
    -        /// address: 0x6000455c
    -        /// GPIO output function select register
    -        pub const FUNC2_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    -            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    -            /// GPIO_OUT_REG[n].
    -            OUT_SEL: u8,
    -            /// set this bit to invert output signal.1:invert.:not invert.
    -            INV_SEL: u1,
    -            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    -            /// enable signal.:use peripheral output enable signal.
    -            OEN_SEL: u1,
    -            /// set this bit to invert output enable signal.1:invert.:not invert.
    -            OEN_INV_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x55c);
    -
    -        /// address: 0x60004560
    -        /// GPIO output function select register
    -        pub const FUNC3_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    -            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    -            /// GPIO_OUT_REG[n].
    -            OUT_SEL: u8,
    -            /// set this bit to invert output signal.1:invert.:not invert.
    -            INV_SEL: u1,
    -            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    -            /// enable signal.:use peripheral output enable signal.
    -            OEN_SEL: u1,
    -            /// set this bit to invert output enable signal.1:invert.:not invert.
    -            OEN_INV_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x560);
    -
    -        /// address: 0x60004564
    -        /// GPIO output function select register
    -        pub const FUNC4_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    -            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    -            /// GPIO_OUT_REG[n].
    -            OUT_SEL: u8,
    -            /// set this bit to invert output signal.1:invert.:not invert.
    -            INV_SEL: u1,
    -            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    -            /// enable signal.:use peripheral output enable signal.
    -            OEN_SEL: u1,
    -            /// set this bit to invert output enable signal.1:invert.:not invert.
    -            OEN_INV_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x564);
    -
    -        /// address: 0x60004568
    -        /// GPIO output function select register
    -        pub const FUNC5_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    -            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    -            /// GPIO_OUT_REG[n].
    -            OUT_SEL: u8,
    -            /// set this bit to invert output signal.1:invert.:not invert.
    -            INV_SEL: u1,
    -            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    -            /// enable signal.:use peripheral output enable signal.
    -            OEN_SEL: u1,
    -            /// set this bit to invert output enable signal.1:invert.:not invert.
    -            OEN_INV_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x568);
    -
    -        /// address: 0x6000456c
    -        /// GPIO output function select register
    -        pub const FUNC6_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    -            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    -            /// GPIO_OUT_REG[n].
    -            OUT_SEL: u8,
    -            /// set this bit to invert output signal.1:invert.:not invert.
    -            INV_SEL: u1,
    -            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    -            /// enable signal.:use peripheral output enable signal.
    -            OEN_SEL: u1,
    -            /// set this bit to invert output enable signal.1:invert.:not invert.
    -            OEN_INV_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x56c);
    -
    -        /// address: 0x60004570
    -        /// GPIO output function select register
    -        pub const FUNC7_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    -            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    -            /// GPIO_OUT_REG[n].
    -            OUT_SEL: u8,
    -            /// set this bit to invert output signal.1:invert.:not invert.
    -            INV_SEL: u1,
    -            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    -            /// enable signal.:use peripheral output enable signal.
    -            OEN_SEL: u1,
    -            /// set this bit to invert output enable signal.1:invert.:not invert.
    -            OEN_INV_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x570);
    -
    -        /// address: 0x60004574
    -        /// GPIO output function select register
    -        pub const FUNC8_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    -            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    -            /// GPIO_OUT_REG[n].
    -            OUT_SEL: u8,
    -            /// set this bit to invert output signal.1:invert.:not invert.
    -            INV_SEL: u1,
    -            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    -            /// enable signal.:use peripheral output enable signal.
    -            OEN_SEL: u1,
    -            /// set this bit to invert output enable signal.1:invert.:not invert.
    -            OEN_INV_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x574);
    -
    -        /// address: 0x60004578
    -        /// GPIO output function select register
    -        pub const FUNC9_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    -            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    -            /// GPIO_OUT_REG[n].
    -            OUT_SEL: u8,
    -            /// set this bit to invert output signal.1:invert.:not invert.
    -            INV_SEL: u1,
    -            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    -            /// enable signal.:use peripheral output enable signal.
    -            OEN_SEL: u1,
    -            /// set this bit to invert output enable signal.1:invert.:not invert.
    -            OEN_INV_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x578);
    -
    -        /// address: 0x6000457c
    -        /// GPIO output function select register
    -        pub const FUNC10_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    -            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    -            /// GPIO_OUT_REG[n].
    -            OUT_SEL: u8,
    -            /// set this bit to invert output signal.1:invert.:not invert.
    -            INV_SEL: u1,
    -            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    -            /// enable signal.:use peripheral output enable signal.
    -            OEN_SEL: u1,
    -            /// set this bit to invert output enable signal.1:invert.:not invert.
    -            OEN_INV_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x57c);
    -
    -        /// address: 0x60004580
    -        /// GPIO output function select register
    -        pub const FUNC11_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    -            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    -            /// GPIO_OUT_REG[n].
    -            OUT_SEL: u8,
    -            /// set this bit to invert output signal.1:invert.:not invert.
    -            INV_SEL: u1,
    -            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    -            /// enable signal.:use peripheral output enable signal.
    -            OEN_SEL: u1,
    -            /// set this bit to invert output enable signal.1:invert.:not invert.
    -            OEN_INV_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x580);
    -
    -        /// address: 0x60004584
    -        /// GPIO output function select register
    -        pub const FUNC12_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    -            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    -            /// GPIO_OUT_REG[n].
    -            OUT_SEL: u8,
    -            /// set this bit to invert output signal.1:invert.:not invert.
    -            INV_SEL: u1,
    -            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    -            /// enable signal.:use peripheral output enable signal.
    -            OEN_SEL: u1,
    -            /// set this bit to invert output enable signal.1:invert.:not invert.
    -            OEN_INV_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x584);
    -
    -        /// address: 0x60004588
    -        /// GPIO output function select register
    -        pub const FUNC13_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    -            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    -            /// GPIO_OUT_REG[n].
    -            OUT_SEL: u8,
    -            /// set this bit to invert output signal.1:invert.:not invert.
    -            INV_SEL: u1,
    -            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    -            /// enable signal.:use peripheral output enable signal.
    -            OEN_SEL: u1,
    -            /// set this bit to invert output enable signal.1:invert.:not invert.
    -            OEN_INV_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x588);
    -
    -        /// address: 0x6000458c
    -        /// GPIO output function select register
    -        pub const FUNC14_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    -            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    -            /// GPIO_OUT_REG[n].
    -            OUT_SEL: u8,
    -            /// set this bit to invert output signal.1:invert.:not invert.
    -            INV_SEL: u1,
    -            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    -            /// enable signal.:use peripheral output enable signal.
    -            OEN_SEL: u1,
    -            /// set this bit to invert output enable signal.1:invert.:not invert.
    -            OEN_INV_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x58c);
    -
    -        /// address: 0x60004590
    -        /// GPIO output function select register
    -        pub const FUNC15_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    -            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    -            /// GPIO_OUT_REG[n].
    -            OUT_SEL: u8,
    -            /// set this bit to invert output signal.1:invert.:not invert.
    -            INV_SEL: u1,
    -            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    -            /// enable signal.:use peripheral output enable signal.
    -            OEN_SEL: u1,
    -            /// set this bit to invert output enable signal.1:invert.:not invert.
    -            OEN_INV_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x590);
    -
    -        /// address: 0x60004594
    -        /// GPIO output function select register
    -        pub const FUNC16_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    -            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    -            /// GPIO_OUT_REG[n].
    -            OUT_SEL: u8,
    -            /// set this bit to invert output signal.1:invert.:not invert.
    -            INV_SEL: u1,
    -            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    -            /// enable signal.:use peripheral output enable signal.
    -            OEN_SEL: u1,
    -            /// set this bit to invert output enable signal.1:invert.:not invert.
    -            OEN_INV_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x594);
    -
    -        /// address: 0x60004598
    -        /// GPIO output function select register
    -        pub const FUNC17_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    -            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    -            /// GPIO_OUT_REG[n].
    -            OUT_SEL: u8,
    -            /// set this bit to invert output signal.1:invert.:not invert.
    -            INV_SEL: u1,
    -            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    -            /// enable signal.:use peripheral output enable signal.
    -            OEN_SEL: u1,
    -            /// set this bit to invert output enable signal.1:invert.:not invert.
    -            OEN_INV_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x598);
    -
    -        /// address: 0x6000459c
    -        /// GPIO output function select register
    -        pub const FUNC18_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    -            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    -            /// GPIO_OUT_REG[n].
    -            OUT_SEL: u8,
    -            /// set this bit to invert output signal.1:invert.:not invert.
    -            INV_SEL: u1,
    -            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    -            /// enable signal.:use peripheral output enable signal.
    -            OEN_SEL: u1,
    -            /// set this bit to invert output enable signal.1:invert.:not invert.
    -            OEN_INV_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x59c);
    -
    -        /// address: 0x600045a0
    -        /// GPIO output function select register
    -        pub const FUNC19_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    -            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    -            /// GPIO_OUT_REG[n].
    -            OUT_SEL: u8,
    -            /// set this bit to invert output signal.1:invert.:not invert.
    -            INV_SEL: u1,
    -            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    -            /// enable signal.:use peripheral output enable signal.
    -            OEN_SEL: u1,
    -            /// set this bit to invert output enable signal.1:invert.:not invert.
    -            OEN_INV_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x5a0);
    -
    -        /// address: 0x600045a4
    -        /// GPIO output function select register
    -        pub const FUNC20_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    -            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    -            /// GPIO_OUT_REG[n].
    -            OUT_SEL: u8,
    -            /// set this bit to invert output signal.1:invert.:not invert.
    -            INV_SEL: u1,
    -            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    -            /// enable signal.:use peripheral output enable signal.
    -            OEN_SEL: u1,
    -            /// set this bit to invert output enable signal.1:invert.:not invert.
    -            OEN_INV_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x5a4);
    -
    -        /// address: 0x600045a8
    -        /// GPIO output function select register
    -        pub const FUNC21_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    -            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    -            /// GPIO_OUT_REG[n].
    -            OUT_SEL: u8,
    -            /// set this bit to invert output signal.1:invert.:not invert.
    -            INV_SEL: u1,
    -            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    -            /// enable signal.:use peripheral output enable signal.
    -            OEN_SEL: u1,
    -            /// set this bit to invert output enable signal.1:invert.:not invert.
    -            OEN_INV_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x5a8);
    -
    -        /// address: 0x600045ac
    -        /// GPIO output function select register
    -        pub const FUNC22_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    -            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    -            /// GPIO_OUT_REG[n].
    -            OUT_SEL: u8,
    -            /// set this bit to invert output signal.1:invert.:not invert.
    -            INV_SEL: u1,
    -            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    -            /// enable signal.:use peripheral output enable signal.
    -            OEN_SEL: u1,
    -            /// set this bit to invert output enable signal.1:invert.:not invert.
    -            OEN_INV_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x5ac);
    -
    -        /// address: 0x600045b0
    -        /// GPIO output function select register
    -        pub const FUNC23_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    -            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    -            /// GPIO_OUT_REG[n].
    -            OUT_SEL: u8,
    -            /// set this bit to invert output signal.1:invert.:not invert.
    -            INV_SEL: u1,
    -            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    -            /// enable signal.:use peripheral output enable signal.
    -            OEN_SEL: u1,
    -            /// set this bit to invert output enable signal.1:invert.:not invert.
    -            OEN_INV_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x5b0);
    -
    -        /// address: 0x600045b4
    -        /// GPIO output function select register
    -        pub const FUNC24_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    -            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    -            /// GPIO_OUT_REG[n].
    -            OUT_SEL: u8,
    -            /// set this bit to invert output signal.1:invert.:not invert.
    -            INV_SEL: u1,
    -            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    -            /// enable signal.:use peripheral output enable signal.
    -            OEN_SEL: u1,
    -            /// set this bit to invert output enable signal.1:invert.:not invert.
    -            OEN_INV_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x5b4);
    -
    -        /// address: 0x600045b8
    -        /// GPIO output function select register
    -        pub const FUNC25_OUT_SEL_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of the bits: <=s<=256. Set the value to select output signal. s=-255:
    -            /// output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals
    -            /// GPIO_OUT_REG[n].
    -            OUT_SEL: u8,
    -            /// set this bit to invert output signal.1:invert.:not invert.
    -            INV_SEL: u1,
    -            /// set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output
    -            /// enable signal.:use peripheral output enable signal.
    -            OEN_SEL: u1,
    -            /// set this bit to invert output enable signal.1:invert.:not invert.
    -            OEN_INV_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x5b8);
    -
    -        /// address: 0x6000462c
    -        /// GPIO clock gate register
    -        pub const CLOCK_GATE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this bit to enable GPIO clock gate
    -            CLK_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x62c);
    -
    -        /// address: 0x600046fc
    -        /// GPIO version register
    -        pub const REG_DATE = @intToPtr(*volatile MmioInt(32, u28), base_address + 0x6fc);
    -    };
    -
    -    /// Sigma-Delta Modulation
    -    pub const GPIOSD = struct {
    -        pub const base_address = 0x60004f00;
    -
    -        /// address: 0x60004f00
    -        /// Duty Cycle Configure Register of SDM%s
    -        pub const SIGMADELTA0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This field is used to configure the duty cycle of sigma delta modulation output.
    -            SD0_IN: u8,
    -            /// This field is used to set a divider value to divide APB clock.
    -            SD0_PRESCALE: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x60004f04
    -        /// Duty Cycle Configure Register of SDM%s
    -        pub const SIGMADELTA1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This field is used to configure the duty cycle of sigma delta modulation output.
    -            SD0_IN: u8,
    -            /// This field is used to set a divider value to divide APB clock.
    -            SD0_PRESCALE: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x60004f08
    -        /// Duty Cycle Configure Register of SDM%s
    -        pub const SIGMADELTA2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This field is used to configure the duty cycle of sigma delta modulation output.
    -            SD0_IN: u8,
    -            /// This field is used to set a divider value to divide APB clock.
    -            SD0_PRESCALE: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x60004f0c
    -        /// Duty Cycle Configure Register of SDM%s
    -        pub const SIGMADELTA3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This field is used to configure the duty cycle of sigma delta modulation output.
    -            SD0_IN: u8,
    -            /// This field is used to set a divider value to divide APB clock.
    -            SD0_PRESCALE: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x60004f20
    -        /// Clock Gating Configure Register
    -        pub const SIGMADELTA_CG = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            reserved23: u1,
    -            reserved24: u1,
    -            reserved25: u1,
    -            reserved26: u1,
    -            reserved27: u1,
    -            reserved28: u1,
    -            reserved29: u1,
    -            reserved30: u1,
    -            /// Clock enable bit of configuration registers for sigma delta modulation.
    -            CLK_EN: u1,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x60004f24
    -        /// MISC Register
    -        pub const SIGMADELTA_MISC = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            reserved23: u1,
    -            reserved24: u1,
    -            reserved25: u1,
    -            reserved26: u1,
    -            reserved27: u1,
    -            reserved28: u1,
    -            reserved29: u1,
    -            /// Clock enable bit of sigma delta modulation.
    -            FUNCTION_CLK_EN: u1,
    -            /// Reserved.
    -            SPI_SWAP: u1,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x60004f28
    -        /// Version Control Register
    -        pub const SIGMADELTA_VERSION = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Version control register.
    -            GPIO_SD_DATE: u28,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -        }), base_address + 0x28);
    -    };
    -
    -    /// HMAC (Hash-based Message Authentication Code) Accelerator
    -    pub const HMAC = struct {
    -        pub const base_address = 0x6003e000;
    -
    -        /// address: 0x6003e040
    -        /// Process control register 0.
    -        pub const SET_START = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x40);
    -
    -        /// address: 0x6003e044
    -        /// Configure purpose.
    -        pub const SET_PARA_PURPOSE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Set hmac parameter purpose.
    -            PURPOSE_SET: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x6003e048
    -        /// Configure key.
    -        pub const SET_PARA_KEY = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Set hmac parameter key.
    -            KEY_SET: u3,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x6003e04c
    -        /// Finish initial configuration.
    -        pub const SET_PARA_FINISH = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Finish hmac configuration.
    -            SET_PARA_END: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x4c);
    -
    -        /// address: 0x6003e050
    -        /// Process control register 1.
    -        pub const SET_MESSAGE_ONE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Call SHA to calculate one message block.
    -            SET_TEXT_ONE: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x6003e054
    -        /// Process control register 2.
    -        pub const SET_MESSAGE_ING = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Continue typical hmac.
    -            SET_TEXT_ING: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x6003e058
    -        /// Process control register 3.
    -        pub const SET_MESSAGE_END = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Start hardware padding.
    -            SET_TEXT_END: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x6003e05c
    -        /// Process control register 4.
    -        pub const SET_RESULT_FINISH = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// After read result from upstream, then let hmac back to idle.
    -            SET_RESULT_END: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x6003e060
    -        /// Invalidate register 0.
    -        pub const SET_INVALIDATE_JTAG = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x60);
    -
    -        /// address: 0x6003e064
    -        /// Invalidate register 1.
    -        pub const SET_INVALIDATE_DS = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x64);
    -
    -        /// address: 0x6003e068
    -        /// Error register.
    -        pub const QUERY_ERROR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Hmac configuration state. 0: key are agree with purpose. 1: error
    -            QUREY_CHECK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x68);
    -
    -        /// address: 0x6003e06c
    -        /// Busy register.
    -        pub const QUERY_BUSY = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Hmac state. 1'b0: idle. 1'b1: busy
    -            BUSY_STATE: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x6c);
    -
    -        /// address: 0x6003e080
    -        /// Message block memory.
    -        pub const WR_MESSAGE_MEM = @intToPtr(*volatile [64]u8, base_address + 0x80);
    -
    -        /// address: 0x6003e0c0
    -        /// Result from upstream.
    -        pub const RD_RESULT_MEM = @intToPtr(*volatile [32]u8, base_address + 0xc0);
    -
    -        /// address: 0x6003e0f0
    -        /// Process control register 5.
    -        pub const SET_MESSAGE_PAD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Start software padding.
    -            SET_TEXT_PAD: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0xf0);
    -
    -        /// address: 0x6003e0f4
    -        /// Process control register 6.
    -        pub const ONE_BLOCK = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Don't have to do padding.
    -            SET_ONE_BLOCK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0xf4);
    -
    -        /// address: 0x6003e0f8
    -        /// Jtag register 0.
    -        pub const SOFT_JTAG_CTRL = @intToPtr(*volatile MmioInt(32, u1), base_address + 0xf8);
    -
    -        /// address: 0x6003e0fc
    -        /// Jtag register 1.
    -        pub const WR_JTAG = @intToPtr(*volatile u32, base_address + 0xfc);
    -    };
    -
    -    /// I2C (Inter-Integrated Circuit) Controller
    -    pub const I2C0 = struct {
    -        pub const base_address = 0x60013000;
    -
    -        /// address: 0x60013000
    -        /// I2C_SCL_LOW_PERIOD_REG
    -        pub const SCL_LOW_PERIOD = @intToPtr(*volatile MmioInt(32, u9), base_address + 0x0);
    -
    -        /// address: 0x60013004
    -        /// I2C_CTR_REG
    -        pub const CTR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_sda_force_out
    -            SDA_FORCE_OUT: u1,
    -            /// reg_scl_force_out
    -            SCL_FORCE_OUT: u1,
    -            /// reg_sample_scl_level
    -            SAMPLE_SCL_LEVEL: u1,
    -            /// reg_rx_full_ack_level
    -            RX_FULL_ACK_LEVEL: u1,
    -            /// reg_ms_mode
    -            MS_MODE: u1,
    -            /// reg_trans_start
    -            TRANS_START: u1,
    -            /// reg_tx_lsb_first
    -            TX_LSB_FIRST: u1,
    -            /// reg_rx_lsb_first
    -            RX_LSB_FIRST: u1,
    -            /// reg_clk_en
    -            CLK_EN: u1,
    -            /// reg_arbitration_en
    -            ARBITRATION_EN: u1,
    -            /// reg_fsm_rst
    -            FSM_RST: u1,
    -            /// reg_conf_upgate
    -            CONF_UPGATE: u1,
    -            /// reg_slv_tx_auto_start_en
    -            SLV_TX_AUTO_START_EN: u1,
    -            /// reg_addr_10bit_rw_check_en
    -            ADDR_10BIT_RW_CHECK_EN: u1,
    -            /// reg_addr_broadcasting_en
    -            ADDR_BROADCASTING_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x60013008
    -        /// I2C_SR_REG
    -        pub const SR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_resp_rec
    -            RESP_REC: u1,
    -            /// reg_slave_rw
    -            SLAVE_RW: u1,
    -            reserved0: u1,
    -            /// reg_arb_lost
    -            ARB_LOST: u1,
    -            /// reg_bus_busy
    -            BUS_BUSY: u1,
    -            /// reg_slave_addressed
    -            SLAVE_ADDRESSED: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            /// reg_rxfifo_cnt
    -            RXFIFO_CNT: u6,
    -            /// reg_stretch_cause
    -            STRETCH_CAUSE: u2,
    -            reserved3: u1,
    -            reserved4: u1,
    -            /// reg_txfifo_cnt
    -            TXFIFO_CNT: u6,
    -            /// reg_scl_main_state_last
    -            SCL_MAIN_STATE_LAST: u3,
    -            reserved5: u1,
    -            /// reg_scl_state_last
    -            SCL_STATE_LAST: u3,
    -            padding0: u1,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x6001300c
    -        /// I2C_TO_REG
    -        pub const TO = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_time_out_value
    -            TIME_OUT_VALUE: u5,
    -            /// reg_time_out_en
    -            TIME_OUT_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x60013010
    -        /// I2C_SLAVE_ADDR_REG
    -        pub const SLAVE_ADDR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_slave_addr
    -            SLAVE_ADDR: u15,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            /// reg_addr_10bit_en
    -            ADDR_10BIT_EN: u1,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x60013014
    -        /// I2C_FIFO_ST_REG
    -        pub const FIFO_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_rxfifo_raddr
    -            RXFIFO_RADDR: u5,
    -            /// reg_rxfifo_waddr
    -            RXFIFO_WADDR: u5,
    -            /// reg_txfifo_raddr
    -            TXFIFO_RADDR: u5,
    -            /// reg_txfifo_waddr
    -            TXFIFO_WADDR: u5,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// reg_slave_rw_point
    -            SLAVE_RW_POINT: u8,
    -            padding0: u1,
    -            padding1: u1,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x60013018
    -        /// I2C_FIFO_CONF_REG
    -        pub const FIFO_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_rxfifo_wm_thrhd
    -            RXFIFO_WM_THRHD: u5,
    -            /// reg_txfifo_wm_thrhd
    -            TXFIFO_WM_THRHD: u5,
    -            /// reg_nonfifo_en
    -            NONFIFO_EN: u1,
    -            /// reg_fifo_addr_cfg_en
    -            FIFO_ADDR_CFG_EN: u1,
    -            /// reg_rx_fifo_rst
    -            RX_FIFO_RST: u1,
    -            /// reg_tx_fifo_rst
    -            TX_FIFO_RST: u1,
    -            /// reg_fifo_prt_en
    -            FIFO_PRT_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x6001301c
    -        /// I2C_FIFO_DATA_REG
    -        pub const DATA = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_fifo_rdata
    -            FIFO_RDATA: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x60013020
    -        /// I2C_INT_RAW_REG
    -        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_rxfifo_wm_int_raw
    -            RXFIFO_WM_INT_RAW: u1,
    -            /// reg_txfifo_wm_int_raw
    -            TXFIFO_WM_INT_RAW: u1,
    -            /// reg_rxfifo_ovf_int_raw
    -            RXFIFO_OVF_INT_RAW: u1,
    -            /// reg_end_detect_int_raw
    -            END_DETECT_INT_RAW: u1,
    -            /// reg_byte_trans_done_int_raw
    -            BYTE_TRANS_DONE_INT_RAW: u1,
    -            /// reg_arbitration_lost_int_raw
    -            ARBITRATION_LOST_INT_RAW: u1,
    -            /// reg_mst_txfifo_udf_int_raw
    -            MST_TXFIFO_UDF_INT_RAW: u1,
    -            /// reg_trans_complete_int_raw
    -            TRANS_COMPLETE_INT_RAW: u1,
    -            /// reg_time_out_int_raw
    -            TIME_OUT_INT_RAW: u1,
    -            /// reg_trans_start_int_raw
    -            TRANS_START_INT_RAW: u1,
    -            /// reg_nack_int_raw
    -            NACK_INT_RAW: u1,
    -            /// reg_txfifo_ovf_int_raw
    -            TXFIFO_OVF_INT_RAW: u1,
    -            /// reg_rxfifo_udf_int_raw
    -            RXFIFO_UDF_INT_RAW: u1,
    -            /// reg_scl_st_to_int_raw
    -            SCL_ST_TO_INT_RAW: u1,
    -            /// reg_scl_main_st_to_int_raw
    -            SCL_MAIN_ST_TO_INT_RAW: u1,
    -            /// reg_det_start_int_raw
    -            DET_START_INT_RAW: u1,
    -            /// reg_slave_stretch_int_raw
    -            SLAVE_STRETCH_INT_RAW: u1,
    -            /// reg_general_call_int_raw
    -            GENERAL_CALL_INT_RAW: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x60013024
    -        /// I2C_INT_CLR_REG
    -        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_rxfifo_wm_int_clr
    -            RXFIFO_WM_INT_CLR: u1,
    -            /// reg_txfifo_wm_int_clr
    -            TXFIFO_WM_INT_CLR: u1,
    -            /// reg_rxfifo_ovf_int_clr
    -            RXFIFO_OVF_INT_CLR: u1,
    -            /// reg_end_detect_int_clr
    -            END_DETECT_INT_CLR: u1,
    -            /// reg_byte_trans_done_int_clr
    -            BYTE_TRANS_DONE_INT_CLR: u1,
    -            /// reg_arbitration_lost_int_clr
    -            ARBITRATION_LOST_INT_CLR: u1,
    -            /// reg_mst_txfifo_udf_int_clr
    -            MST_TXFIFO_UDF_INT_CLR: u1,
    -            /// reg_trans_complete_int_clr
    -            TRANS_COMPLETE_INT_CLR: u1,
    -            /// reg_time_out_int_clr
    -            TIME_OUT_INT_CLR: u1,
    -            /// reg_trans_start_int_clr
    -            TRANS_START_INT_CLR: u1,
    -            /// reg_nack_int_clr
    -            NACK_INT_CLR: u1,
    -            /// reg_txfifo_ovf_int_clr
    -            TXFIFO_OVF_INT_CLR: u1,
    -            /// reg_rxfifo_udf_int_clr
    -            RXFIFO_UDF_INT_CLR: u1,
    -            /// reg_scl_st_to_int_clr
    -            SCL_ST_TO_INT_CLR: u1,
    -            /// reg_scl_main_st_to_int_clr
    -            SCL_MAIN_ST_TO_INT_CLR: u1,
    -            /// reg_det_start_int_clr
    -            DET_START_INT_CLR: u1,
    -            /// reg_slave_stretch_int_clr
    -            SLAVE_STRETCH_INT_CLR: u1,
    -            /// reg_general_call_int_clr
    -            GENERAL_CALL_INT_CLR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x60013028
    -        /// I2C_INT_ENA_REG
    -        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_rxfifo_wm_int_ena
    -            RXFIFO_WM_INT_ENA: u1,
    -            /// reg_txfifo_wm_int_ena
    -            TXFIFO_WM_INT_ENA: u1,
    -            /// reg_rxfifo_ovf_int_ena
    -            RXFIFO_OVF_INT_ENA: u1,
    -            /// reg_end_detect_int_ena
    -            END_DETECT_INT_ENA: u1,
    -            /// reg_byte_trans_done_int_ena
    -            BYTE_TRANS_DONE_INT_ENA: u1,
    -            /// reg_arbitration_lost_int_ena
    -            ARBITRATION_LOST_INT_ENA: u1,
    -            /// reg_mst_txfifo_udf_int_ena
    -            MST_TXFIFO_UDF_INT_ENA: u1,
    -            /// reg_trans_complete_int_ena
    -            TRANS_COMPLETE_INT_ENA: u1,
    -            /// reg_time_out_int_ena
    -            TIME_OUT_INT_ENA: u1,
    -            /// reg_trans_start_int_ena
    -            TRANS_START_INT_ENA: u1,
    -            /// reg_nack_int_ena
    -            NACK_INT_ENA: u1,
    -            /// reg_txfifo_ovf_int_ena
    -            TXFIFO_OVF_INT_ENA: u1,
    -            /// reg_rxfifo_udf_int_ena
    -            RXFIFO_UDF_INT_ENA: u1,
    -            /// reg_scl_st_to_int_ena
    -            SCL_ST_TO_INT_ENA: u1,
    -            /// reg_scl_main_st_to_int_ena
    -            SCL_MAIN_ST_TO_INT_ENA: u1,
    -            /// reg_det_start_int_ena
    -            DET_START_INT_ENA: u1,
    -            /// reg_slave_stretch_int_ena
    -            SLAVE_STRETCH_INT_ENA: u1,
    -            /// reg_general_call_int_ena
    -            GENERAL_CALL_INT_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x6001302c
    -        /// I2C_INT_STATUS_REG
    -        pub const INT_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_rxfifo_wm_int_st
    -            RXFIFO_WM_INT_ST: u1,
    -            /// reg_txfifo_wm_int_st
    -            TXFIFO_WM_INT_ST: u1,
    -            /// reg_rxfifo_ovf_int_st
    -            RXFIFO_OVF_INT_ST: u1,
    -            /// reg_end_detect_int_st
    -            END_DETECT_INT_ST: u1,
    -            /// reg_byte_trans_done_int_st
    -            BYTE_TRANS_DONE_INT_ST: u1,
    -            /// reg_arbitration_lost_int_st
    -            ARBITRATION_LOST_INT_ST: u1,
    -            /// reg_mst_txfifo_udf_int_st
    -            MST_TXFIFO_UDF_INT_ST: u1,
    -            /// reg_trans_complete_int_st
    -            TRANS_COMPLETE_INT_ST: u1,
    -            /// reg_time_out_int_st
    -            TIME_OUT_INT_ST: u1,
    -            /// reg_trans_start_int_st
    -            TRANS_START_INT_ST: u1,
    -            /// reg_nack_int_st
    -            NACK_INT_ST: u1,
    -            /// reg_txfifo_ovf_int_st
    -            TXFIFO_OVF_INT_ST: u1,
    -            /// reg_rxfifo_udf_int_st
    -            RXFIFO_UDF_INT_ST: u1,
    -            /// reg_scl_st_to_int_st
    -            SCL_ST_TO_INT_ST: u1,
    -            /// reg_scl_main_st_to_int_st
    -            SCL_MAIN_ST_TO_INT_ST: u1,
    -            /// reg_det_start_int_st
    -            DET_START_INT_ST: u1,
    -            /// reg_slave_stretch_int_st
    -            SLAVE_STRETCH_INT_ST: u1,
    -            /// reg_general_call_int_st
    -            GENERAL_CALL_INT_ST: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x60013030
    -        /// I2C_SDA_HOLD_REG
    -        pub const SDA_HOLD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_sda_hold_time
    -            TIME: u9,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x60013034
    -        /// I2C_SDA_SAMPLE_REG
    -        pub const SDA_SAMPLE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_sda_sample_time
    -            TIME: u9,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x60013038
    -        /// I2C_SCL_HIGH_PERIOD_REG
    -        pub const SCL_HIGH_PERIOD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_scl_high_period
    -            SCL_HIGH_PERIOD: u9,
    -            /// reg_scl_wait_high_period
    -            SCL_WAIT_HIGH_PERIOD: u7,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x60013040
    -        /// I2C_SCL_START_HOLD_REG
    -        pub const SCL_START_HOLD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_scl_start_hold_time
    -            TIME: u9,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x60013044
    -        /// I2C_SCL_RSTART_SETUP_REG
    -        pub const SCL_RSTART_SETUP = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_scl_rstart_setup_time
    -            TIME: u9,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x60013048
    -        /// I2C_SCL_STOP_HOLD_REG
    -        pub const SCL_STOP_HOLD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_scl_stop_hold_time
    -            TIME: u9,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x6001304c
    -        /// I2C_SCL_STOP_SETUP_REG
    -        pub const SCL_STOP_SETUP = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_scl_stop_setup_time
    -            TIME: u9,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -        }), base_address + 0x4c);
    -
    -        /// address: 0x60013050
    -        /// I2C_FILTER_CFG_REG
    -        pub const FILTER_CFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_scl_filter_thres
    -            SCL_FILTER_THRES: u4,
    -            /// reg_sda_filter_thres
    -            SDA_FILTER_THRES: u4,
    -            /// reg_scl_filter_en
    -            SCL_FILTER_EN: u1,
    -            /// reg_sda_filter_en
    -            SDA_FILTER_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x60013054
    -        /// I2C_CLK_CONF_REG
    -        pub const CLK_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_sclk_div_num
    -            SCLK_DIV_NUM: u8,
    -            /// reg_sclk_div_a
    -            SCLK_DIV_A: u6,
    -            /// reg_sclk_div_b
    -            SCLK_DIV_B: u6,
    -            /// reg_sclk_sel
    -            SCLK_SEL: u1,
    -            /// reg_sclk_active
    -            SCLK_ACTIVE: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x60013058
    -        /// I2C_COMD%s_REG
    -        pub const COMD0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_command
    -            COMMAND: u14,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            /// reg_command_done
    -            COMMAND_DONE: u1,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x6001305c
    -        /// I2C_COMD%s_REG
    -        pub const COMD1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_command
    -            COMMAND: u14,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            /// reg_command_done
    -            COMMAND_DONE: u1,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x60013060
    -        /// I2C_COMD%s_REG
    -        pub const COMD2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_command
    -            COMMAND: u14,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            /// reg_command_done
    -            COMMAND_DONE: u1,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x60013064
    -        /// I2C_COMD%s_REG
    -        pub const COMD3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_command
    -            COMMAND: u14,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            /// reg_command_done
    -            COMMAND_DONE: u1,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x60013068
    -        /// I2C_COMD%s_REG
    -        pub const COMD4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_command
    -            COMMAND: u14,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            /// reg_command_done
    -            COMMAND_DONE: u1,
    -        }), base_address + 0x68);
    -
    -        /// address: 0x6001306c
    -        /// I2C_COMD%s_REG
    -        pub const COMD5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_command
    -            COMMAND: u14,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            /// reg_command_done
    -            COMMAND_DONE: u1,
    -        }), base_address + 0x6c);
    -
    -        /// address: 0x60013070
    -        /// I2C_COMD%s_REG
    -        pub const COMD6 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_command
    -            COMMAND: u14,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            /// reg_command_done
    -            COMMAND_DONE: u1,
    -        }), base_address + 0x70);
    -
    -        /// address: 0x60013074
    -        /// I2C_COMD%s_REG
    -        pub const COMD7 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_command
    -            COMMAND: u14,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            /// reg_command_done
    -            COMMAND_DONE: u1,
    -        }), base_address + 0x74);
    -
    -        /// address: 0x60013078
    -        /// I2C_SCL_ST_TIME_OUT_REG
    -        pub const SCL_ST_TIME_OUT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_scl_st_to_regno more than 23
    -            SCL_ST_TO_I2C: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -        }), base_address + 0x78);
    -
    -        /// address: 0x6001307c
    -        /// I2C_SCL_MAIN_ST_TIME_OUT_REG
    -        pub const SCL_MAIN_ST_TIME_OUT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_scl_main_st_to_regno more than 23
    -            SCL_MAIN_ST_TO_I2C: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -        }), base_address + 0x7c);
    -
    -        /// address: 0x60013080
    -        /// I2C_SCL_SP_CONF_REG
    -        pub const SCL_SP_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_scl_rst_slv_en
    -            SCL_RST_SLV_EN: u1,
    -            /// reg_scl_rst_slv_num
    -            SCL_RST_SLV_NUM: u5,
    -            /// reg_scl_pd_en
    -            SCL_PD_EN: u1,
    -            /// reg_sda_pd_en
    -            SDA_PD_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x80);
    -
    -        /// address: 0x60013084
    -        /// I2C_SCL_STRETCH_CONF_REG
    -        pub const SCL_STRETCH_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_stretch_protect_num
    -            STRETCH_PROTECT_NUM: u10,
    -            /// reg_slave_scl_stretch_en
    -            SLAVE_SCL_STRETCH_EN: u1,
    -            /// reg_slave_scl_stretch_clr
    -            SLAVE_SCL_STRETCH_CLR: u1,
    -            /// reg_slave_byte_ack_ctl_en
    -            SLAVE_BYTE_ACK_CTL_EN: u1,
    -            /// reg_slave_byte_ack_lvl
    -            SLAVE_BYTE_ACK_LVL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -        }), base_address + 0x84);
    -
    -        /// address: 0x600130f8
    -        /// I2C_DATE_REG
    -        pub const DATE = @intToPtr(*volatile u32, base_address + 0xf8);
    -
    -        /// address: 0x60013100
    -        /// I2C_TXFIFO_START_ADDR_REG
    -        pub const TXFIFO_START_ADDR = @intToPtr(*volatile u32, base_address + 0x100);
    -
    -        /// address: 0x60013180
    -        /// I2C_RXFIFO_START_ADDR_REG
    -        pub const RXFIFO_START_ADDR = @intToPtr(*volatile u32, base_address + 0x180);
    -    };
    -
    -    /// I2S (Inter-IC Sound) Controller
    -    pub const I2S = struct {
    -        pub const base_address = 0x6002d000;
    -
    -        /// address: 0x6002d00c
    -        /// I2S interrupt raw register, valid in level.
    -        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The raw interrupt status bit for the i2s_rx_done_int interrupt
    -            RX_DONE_INT_RAW: u1,
    -            /// The raw interrupt status bit for the i2s_tx_done_int interrupt
    -            TX_DONE_INT_RAW: u1,
    -            /// The raw interrupt status bit for the i2s_rx_hung_int interrupt
    -            RX_HUNG_INT_RAW: u1,
    -            /// The raw interrupt status bit for the i2s_tx_hung_int interrupt
    -            TX_HUNG_INT_RAW: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x6002d010
    -        /// I2S interrupt status register.
    -        pub const INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The masked interrupt status bit for the i2s_rx_done_int interrupt
    -            RX_DONE_INT_ST: u1,
    -            /// The masked interrupt status bit for the i2s_tx_done_int interrupt
    -            TX_DONE_INT_ST: u1,
    -            /// The masked interrupt status bit for the i2s_rx_hung_int interrupt
    -            RX_HUNG_INT_ST: u1,
    -            /// The masked interrupt status bit for the i2s_tx_hung_int interrupt
    -            TX_HUNG_INT_ST: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x6002d014
    -        /// I2S interrupt enable register.
    -        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The interrupt enable bit for the i2s_rx_done_int interrupt
    -            RX_DONE_INT_ENA: u1,
    -            /// The interrupt enable bit for the i2s_tx_done_int interrupt
    -            TX_DONE_INT_ENA: u1,
    -            /// The interrupt enable bit for the i2s_rx_hung_int interrupt
    -            RX_HUNG_INT_ENA: u1,
    -            /// The interrupt enable bit for the i2s_tx_hung_int interrupt
    -            TX_HUNG_INT_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x6002d018
    -        /// I2S interrupt clear register.
    -        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Set this bit to clear the i2s_rx_done_int interrupt
    -            RX_DONE_INT_CLR: u1,
    -            /// Set this bit to clear the i2s_tx_done_int interrupt
    -            TX_DONE_INT_CLR: u1,
    -            /// Set this bit to clear the i2s_rx_hung_int interrupt
    -            RX_HUNG_INT_CLR: u1,
    -            /// Set this bit to clear the i2s_tx_hung_int interrupt
    -            TX_HUNG_INT_CLR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x6002d020
    -        /// I2S RX configure register
    -        pub const RX_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Set this bit to reset receiver
    -            RX_RESET: u1,
    -            /// Set this bit to reset Rx AFIFO
    -            RX_FIFO_RESET: u1,
    -            /// Set this bit to start receiving data
    -            RX_START: u1,
    -            /// Set this bit to enable slave receiver mode
    -            RX_SLAVE_MOD: u1,
    -            reserved0: u1,
    -            /// Set this bit to enable receiver in mono mode
    -            RX_MONO: u1,
    -            reserved1: u1,
    -            /// I2S Rx byte endian, 1: low addr value to high addr. 0: low addr with low addr
    -            /// value.
    -            RX_BIG_ENDIAN: u1,
    -            /// Set 1 to update I2S RX registers from APB clock domain to I2S RX clock domain.
    -            /// This bit will be cleared by hardware after update register done.
    -            RX_UPDATE: u1,
    -            /// 1: The first channel data value is valid in I2S RX mono mode. 0: The second
    -            /// channel data value is valid in I2S RX mono mode.
    -            RX_MONO_FST_VLD: u1,
    -            /// I2S RX compress/decompress configuration bit. & 0 (atol): A-Law decompress, 1
    -            /// (ltoa) : A-Law compress, 2 (utol) : u-Law decompress, 3 (ltou) : u-Law compress.
    -            /// &
    -            RX_PCM_CONF: u2,
    -            /// Set this bit to bypass Compress/Decompress module for received data.
    -            RX_PCM_BYPASS: u1,
    -            /// 0 : I2S Rx only stop when reg_rx_start is cleared. 1: Stop when reg_rx_start is
    -            /// 0 or in_suc_eof is 1. 2: Stop I2S RX when reg_rx_start is 0 or RX FIFO is full.
    -            RX_STOP_MODE: u2,
    -            /// 1: I2S RX left alignment mode. 0: I2S RX right alignment mode.
    -            RX_LEFT_ALIGN: u1,
    -            /// 1: store 24 channel bits to 32 bits. 0:store 24 channel bits to 24 bits.
    -            RX_24_FILL_EN: u1,
    -            /// 0: WS should be 0 when receiving left channel data, and WS is 1in right channel.
    -            /// 1: WS should be 1 when receiving left channel data, and WS is 0in right channel.
    -            RX_WS_IDLE_POL: u1,
    -            /// I2S Rx bit endian. 1:small endian, the LSB is received first. 0:big endian, the
    -            /// MSB is received first.
    -            RX_BIT_ORDER: u1,
    -            /// 1: Enable I2S TDM Rx mode . 0: Disable.
    -            RX_TDM_EN: u1,
    -            /// 1: Enable I2S PDM Rx mode . 0: Disable.
    -            RX_PDM_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x6002d024
    -        /// I2S TX configure register
    -        pub const TX_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Set this bit to reset transmitter
    -            TX_RESET: u1,
    -            /// Set this bit to reset Tx AFIFO
    -            TX_FIFO_RESET: u1,
    -            /// Set this bit to start transmitting data
    -            TX_START: u1,
    -            /// Set this bit to enable slave transmitter mode
    -            TX_SLAVE_MOD: u1,
    -            reserved0: u1,
    -            /// Set this bit to enable transmitter in mono mode
    -            TX_MONO: u1,
    -            /// 1: The value of Left channel data is equal to the value of right channel data in
    -            /// I2S TX mono mode or TDM channel select mode. 0: The invalid channel data is
    -            /// reg_i2s_single_data in I2S TX mono mode or TDM channel select mode.
    -            TX_CHAN_EQUAL: u1,
    -            /// I2S Tx byte endian, 1: low addr value to high addr. 0: low addr with low addr
    -            /// value.
    -            TX_BIG_ENDIAN: u1,
    -            /// Set 1 to update I2S TX registers from APB clock domain to I2S TX clock domain.
    -            /// This bit will be cleared by hardware after update register done.
    -            TX_UPDATE: u1,
    -            /// 1: The first channel data value is valid in I2S TX mono mode. 0: The second
    -            /// channel data value is valid in I2S TX mono mode.
    -            TX_MONO_FST_VLD: u1,
    -            /// I2S TX compress/decompress configuration bit. & 0 (atol): A-Law decompress, 1
    -            /// (ltoa) : A-Law compress, 2 (utol) : u-Law decompress, 3 (ltou) : u-Law compress.
    -            /// &
    -            TX_PCM_CONF: u2,
    -            /// Set this bit to bypass Compress/Decompress module for transmitted data.
    -            TX_PCM_BYPASS: u1,
    -            /// Set this bit to stop disable output BCK signal and WS signal when tx FIFO is
    -            /// emtpy
    -            TX_STOP_EN: u1,
    -            reserved1: u1,
    -            /// 1: I2S TX left alignment mode. 0: I2S TX right alignment mode.
    -            TX_LEFT_ALIGN: u1,
    -            /// 1: Sent 32 bits in 24 channel bits mode. 0: Sent 24 bits in 24 channel bits mode
    -            TX_24_FILL_EN: u1,
    -            /// 0: WS should be 0 when sending left channel data, and WS is 1in right channel.
    -            /// 1: WS should be 1 when sending left channel data, and WS is 0in right channel.
    -            TX_WS_IDLE_POL: u1,
    -            /// I2S Tx bit endian. 1:small endian, the LSB is sent first. 0:big endian, the MSB
    -            /// is sent first.
    -            TX_BIT_ORDER: u1,
    -            /// 1: Enable I2S TDM Tx mode . 0: Disable.
    -            TX_TDM_EN: u1,
    -            /// 1: Enable I2S PDM Tx mode . 0: Disable.
    -            TX_PDM_EN: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            /// I2S transmitter channel mode configuration bits.
    -            TX_CHAN_MOD: u3,
    -            /// Enable signal loop back mode with transmitter module and receiver module sharing
    -            /// the same WS and BCK signals.
    -            SIG_LOOPBACK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x6002d028
    -        /// I2S RX configure register 1
    -        pub const RX_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The width of rx_ws_out in TDM mode is (I2S_RX_TDM_WS_WIDTH[6:0] +1) * T_bck
    -            RX_TDM_WS_WIDTH: u7,
    -            /// Bit clock configuration bits in receiver mode.
    -            RX_BCK_DIV_NUM: u6,
    -            /// Set the bits to configure the valid data bit length of I2S receiver channel. 7:
    -            /// all the valid channel data is in 8-bit-mode. 15: all the valid channel data is
    -            /// in 16-bit-mode. 23: all the valid channel data is in 24-bit-mode. 31:all the
    -            /// valid channel data is in 32-bit-mode.
    -            RX_BITS_MOD: u5,
    -            /// I2S Rx half sample bits -1.
    -            RX_HALF_SAMPLE_BITS: u6,
    -            /// The Rx bit number for each channel minus 1in TDM mode.
    -            RX_TDM_CHAN_BITS: u5,
    -            /// Set this bit to enable receiver in Phillips standard mode
    -            RX_MSB_SHIFT: u1,
    -            padding0: u1,
    -            padding1: u1,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x6002d02c
    -        /// I2S TX configure register 1
    -        pub const TX_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The width of tx_ws_out in TDM mode is (I2S_TX_TDM_WS_WIDTH[6:0] +1) * T_bck
    -            TX_TDM_WS_WIDTH: u7,
    -            /// Bit clock configuration bits in transmitter mode.
    -            TX_BCK_DIV_NUM: u6,
    -            /// Set the bits to configure the valid data bit length of I2S transmitter channel.
    -            /// 7: all the valid channel data is in 8-bit-mode. 15: all the valid channel data
    -            /// is in 16-bit-mode. 23: all the valid channel data is in 24-bit-mode. 31:all the
    -            /// valid channel data is in 32-bit-mode.
    -            TX_BITS_MOD: u5,
    -            /// I2S Tx half sample bits -1.
    -            TX_HALF_SAMPLE_BITS: u6,
    -            /// The Tx bit number for each channel minus 1in TDM mode.
    -            TX_TDM_CHAN_BITS: u5,
    -            /// Set this bit to enable transmitter in Phillips standard mode
    -            TX_MSB_SHIFT: u1,
    -            /// 1: BCK is not delayed to generate pos/neg edge in master mode. 0: BCK is delayed
    -            /// to generate pos/neg edge in master mode.
    -            TX_BCK_NO_DLY: u1,
    -            padding0: u1,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x6002d030
    -        /// I2S RX clock configure register
    -        pub const RX_CLKM_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Integral I2S clock divider value
    -            RX_CLKM_DIV_NUM: u8,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            /// I2S Rx module clock enable signal.
    -            RX_CLK_ACTIVE: u1,
    -            /// Select I2S Rx module source clock. 0: no clock. 1: APLL. 2: CLK160. 3:
    -            /// I2S_MCLK_in.
    -            RX_CLK_SEL: u2,
    -            /// 0: UseI2S Tx module clock as I2S_MCLK_OUT. 1: UseI2S Rx module clock as
    -            /// I2S_MCLK_OUT.
    -            MCLK_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x6002d034
    -        /// I2S TX clock configure register
    -        pub const TX_CLKM_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Integral I2S TX clock divider value. f_I2S_CLK = f_I2S_CLK_S/(N+b/a). There will
    -            /// be (a-b) * n-div and b * (n+1)-div. So the average combination will be: for b <=
    -            /// a/2, z * [x * n-div + (n+1)-div] + y * n-div. For b > a/2, z * [n-div + x *
    -            /// (n+1)-div] + y * (n+1)-div.
    -            TX_CLKM_DIV_NUM: u8,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            /// I2S Tx module clock enable signal.
    -            TX_CLK_ACTIVE: u1,
    -            /// Select I2S Tx module source clock. 0: XTAL clock. 1: APLL. 2: CLK160. 3:
    -            /// I2S_MCLK_in.
    -            TX_CLK_SEL: u2,
    -            /// Set this bit to enable clk gate
    -            CLK_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x6002d038
    -        /// I2S RX module clock divider configure register
    -        pub const RX_CLKM_DIV_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// For b <= a/2, the value of I2S_RX_CLKM_DIV_Z is b. For b > a/2, the value of
    -            /// I2S_RX_CLKM_DIV_Z is (a-b).
    -            RX_CLKM_DIV_Z: u9,
    -            /// For b <= a/2, the value of I2S_RX_CLKM_DIV_Y is (a%b) . For b > a/2, the value
    -            /// of I2S_RX_CLKM_DIV_Y is (a%(a-b)).
    -            RX_CLKM_DIV_Y: u9,
    -            /// For b <= a/2, the value of I2S_RX_CLKM_DIV_X is (a/b) - 1. For b > a/2, the
    -            /// value of I2S_RX_CLKM_DIV_X is (a/(a-b)) - 1.
    -            RX_CLKM_DIV_X: u9,
    -            /// For b <= a/2, the value of I2S_RX_CLKM_DIV_YN1 is 0 . For b > a/2, the value of
    -            /// I2S_RX_CLKM_DIV_YN1 is 1.
    -            RX_CLKM_DIV_YN1: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x6002d03c
    -        /// I2S TX module clock divider configure register
    -        pub const TX_CLKM_DIV_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// For b <= a/2, the value of I2S_TX_CLKM_DIV_Z is b. For b > a/2, the value of
    -            /// I2S_TX_CLKM_DIV_Z is (a-b).
    -            TX_CLKM_DIV_Z: u9,
    -            /// For b <= a/2, the value of I2S_TX_CLKM_DIV_Y is (a%b) . For b > a/2, the value
    -            /// of I2S_TX_CLKM_DIV_Y is (a%(a-b)).
    -            TX_CLKM_DIV_Y: u9,
    -            /// For b <= a/2, the value of I2S_TX_CLKM_DIV_X is (a/b) - 1. For b > a/2, the
    -            /// value of I2S_TX_CLKM_DIV_X is (a/(a-b)) - 1.
    -            TX_CLKM_DIV_X: u9,
    -            /// For b <= a/2, the value of I2S_TX_CLKM_DIV_YN1 is 0 . For b > a/2, the value of
    -            /// I2S_TX_CLKM_DIV_YN1 is 1.
    -            TX_CLKM_DIV_YN1: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x6002d040
    -        /// I2S TX PCM2PDM configuration register
    -        pub const TX_PCM2PDM_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// I2S TX PDM bypass hp filter or not. The option has been removed.
    -            TX_PDM_HP_BYPASS: u1,
    -            /// I2S TX PDM OSR2 value
    -            TX_PDM_SINC_OSR2: u4,
    -            /// I2S TX PDM prescale for sigmadelta
    -            TX_PDM_PRESCALE: u8,
    -            /// I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4
    -            TX_PDM_HP_IN_SHIFT: u2,
    -            /// I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4
    -            TX_PDM_LP_IN_SHIFT: u2,
    -            /// I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4
    -            TX_PDM_SINC_IN_SHIFT: u2,
    -            /// I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4
    -            TX_PDM_SIGMADELTA_IN_SHIFT: u2,
    -            /// I2S TX PDM sigmadelta dither2 value
    -            TX_PDM_SIGMADELTA_DITHER2: u1,
    -            /// I2S TX PDM sigmadelta dither value
    -            TX_PDM_SIGMADELTA_DITHER: u1,
    -            /// I2S TX PDM dac mode enable
    -            TX_PDM_DAC_2OUT_EN: u1,
    -            /// I2S TX PDM dac 2channel enable
    -            TX_PDM_DAC_MODE_EN: u1,
    -            /// I2S TX PDM Converter enable
    -            PCM2PDM_CONV_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x6002d044
    -        /// I2S TX PCM2PDM configuration register
    -        pub const TX_PCM2PDM_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// I2S TX PDM Fp
    -            TX_PDM_FP: u10,
    -            /// I2S TX PDM Fs
    -            TX_PDM_FS: u10,
    -            /// The fourth parameter of PDM TX IIR_HP filter stage 2 is (504 +
    -            /// I2S_TX_IIR_HP_MULT12_5[2:0])
    -            TX_IIR_HP_MULT12_5: u3,
    -            /// The fourth parameter of PDM TX IIR_HP filter stage 1 is (504 +
    -            /// I2S_TX_IIR_HP_MULT12_0[2:0])
    -            TX_IIR_HP_MULT12_0: u3,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x6002d050
    -        /// I2S TX TDM mode control register
    -        pub const RX_TDM_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 1: Enable the valid data input of I2S RX TDM or PDM channel 0. 0: Disable, just
    -            /// input 0 in this channel.
    -            RX_TDM_PDM_CHAN0_EN: u1,
    -            /// 1: Enable the valid data input of I2S RX TDM or PDM channel 1. 0: Disable, just
    -            /// input 0 in this channel.
    -            RX_TDM_PDM_CHAN1_EN: u1,
    -            /// 1: Enable the valid data input of I2S RX TDM or PDM channel 2. 0: Disable, just
    -            /// input 0 in this channel.
    -            RX_TDM_PDM_CHAN2_EN: u1,
    -            /// 1: Enable the valid data input of I2S RX TDM or PDM channel 3. 0: Disable, just
    -            /// input 0 in this channel.
    -            RX_TDM_PDM_CHAN3_EN: u1,
    -            /// 1: Enable the valid data input of I2S RX TDM or PDM channel 4. 0: Disable, just
    -            /// input 0 in this channel.
    -            RX_TDM_PDM_CHAN4_EN: u1,
    -            /// 1: Enable the valid data input of I2S RX TDM or PDM channel 5. 0: Disable, just
    -            /// input 0 in this channel.
    -            RX_TDM_PDM_CHAN5_EN: u1,
    -            /// 1: Enable the valid data input of I2S RX TDM or PDM channel 6. 0: Disable, just
    -            /// input 0 in this channel.
    -            RX_TDM_PDM_CHAN6_EN: u1,
    -            /// 1: Enable the valid data input of I2S RX TDM or PDM channel 7. 0: Disable, just
    -            /// input 0 in this channel.
    -            RX_TDM_PDM_CHAN7_EN: u1,
    -            /// 1: Enable the valid data input of I2S RX TDM channel 8. 0: Disable, just input 0
    -            /// in this channel.
    -            RX_TDM_CHAN8_EN: u1,
    -            /// 1: Enable the valid data input of I2S RX TDM channel 9. 0: Disable, just input 0
    -            /// in this channel.
    -            RX_TDM_CHAN9_EN: u1,
    -            /// 1: Enable the valid data input of I2S RX TDM channel 10. 0: Disable, just input
    -            /// 0 in this channel.
    -            RX_TDM_CHAN10_EN: u1,
    -            /// 1: Enable the valid data input of I2S RX TDM channel 11. 0: Disable, just input
    -            /// 0 in this channel.
    -            RX_TDM_CHAN11_EN: u1,
    -            /// 1: Enable the valid data input of I2S RX TDM channel 12. 0: Disable, just input
    -            /// 0 in this channel.
    -            RX_TDM_CHAN12_EN: u1,
    -            /// 1: Enable the valid data input of I2S RX TDM channel 13. 0: Disable, just input
    -            /// 0 in this channel.
    -            RX_TDM_CHAN13_EN: u1,
    -            /// 1: Enable the valid data input of I2S RX TDM channel 14. 0: Disable, just input
    -            /// 0 in this channel.
    -            RX_TDM_CHAN14_EN: u1,
    -            /// 1: Enable the valid data input of I2S RX TDM channel 15. 0: Disable, just input
    -            /// 0 in this channel.
    -            RX_TDM_CHAN15_EN: u1,
    -            /// The total channel number of I2S TX TDM mode.
    -            RX_TDM_TOT_CHAN_NUM: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x6002d054
    -        /// I2S TX TDM mode control register
    -        pub const TX_TDM_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 1: Enable the valid data output of I2S TX TDM channel 0. 0: Disable, just output
    -            /// 0 in this channel.
    -            TX_TDM_CHAN0_EN: u1,
    -            /// 1: Enable the valid data output of I2S TX TDM channel 1. 0: Disable, just output
    -            /// 0 in this channel.
    -            TX_TDM_CHAN1_EN: u1,
    -            /// 1: Enable the valid data output of I2S TX TDM channel 2. 0: Disable, just output
    -            /// 0 in this channel.
    -            TX_TDM_CHAN2_EN: u1,
    -            /// 1: Enable the valid data output of I2S TX TDM channel 3. 0: Disable, just output
    -            /// 0 in this channel.
    -            TX_TDM_CHAN3_EN: u1,
    -            /// 1: Enable the valid data output of I2S TX TDM channel 4. 0: Disable, just output
    -            /// 0 in this channel.
    -            TX_TDM_CHAN4_EN: u1,
    -            /// 1: Enable the valid data output of I2S TX TDM channel 5. 0: Disable, just output
    -            /// 0 in this channel.
    -            TX_TDM_CHAN5_EN: u1,
    -            /// 1: Enable the valid data output of I2S TX TDM channel 6. 0: Disable, just output
    -            /// 0 in this channel.
    -            TX_TDM_CHAN6_EN: u1,
    -            /// 1: Enable the valid data output of I2S TX TDM channel 7. 0: Disable, just output
    -            /// 0 in this channel.
    -            TX_TDM_CHAN7_EN: u1,
    -            /// 1: Enable the valid data output of I2S TX TDM channel 8. 0: Disable, just output
    -            /// 0 in this channel.
    -            TX_TDM_CHAN8_EN: u1,
    -            /// 1: Enable the valid data output of I2S TX TDM channel 9. 0: Disable, just output
    -            /// 0 in this channel.
    -            TX_TDM_CHAN9_EN: u1,
    -            /// 1: Enable the valid data output of I2S TX TDM channel 10. 0: Disable, just
    -            /// output 0 in this channel.
    -            TX_TDM_CHAN10_EN: u1,
    -            /// 1: Enable the valid data output of I2S TX TDM channel 11. 0: Disable, just
    -            /// output 0 in this channel.
    -            TX_TDM_CHAN11_EN: u1,
    -            /// 1: Enable the valid data output of I2S TX TDM channel 12. 0: Disable, just
    -            /// output 0 in this channel.
    -            TX_TDM_CHAN12_EN: u1,
    -            /// 1: Enable the valid data output of I2S TX TDM channel 13. 0: Disable, just
    -            /// output 0 in this channel.
    -            TX_TDM_CHAN13_EN: u1,
    -            /// 1: Enable the valid data output of I2S TX TDM channel 14. 0: Disable, just
    -            /// output 0 in this channel.
    -            TX_TDM_CHAN14_EN: u1,
    -            /// 1: Enable the valid data output of I2S TX TDM channel 15. 0: Disable, just
    -            /// output 0 in this channel.
    -            TX_TDM_CHAN15_EN: u1,
    -            /// The total channel number of I2S TX TDM mode.
    -            TX_TDM_TOT_CHAN_NUM: u4,
    -            /// When DMA TX buffer stores the data of (REG_TX_TDM_TOT_CHAN_NUM + 1) channels,
    -            /// and only the data of the enabled channels is sent, then this bit should be set.
    -            /// Clear it when all the data stored in DMA TX buffer is for enabled channels.
    -            TX_TDM_SKIP_MSK_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x6002d058
    -        /// I2S RX timing control register
    -        pub const RX_TIMING = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The delay mode of I2S Rx SD input signal. 0: bypass. 1: delay by pos edge. 2:
    -            /// delay by neg edge. 3: not used.
    -            RX_SD_IN_DM: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            /// The delay mode of I2S Rx WS output signal. 0: bypass. 1: delay by pos edge. 2:
    -            /// delay by neg edge. 3: not used.
    -            RX_WS_OUT_DM: u2,
    -            reserved14: u1,
    -            reserved15: u1,
    -            /// The delay mode of I2S Rx BCK output signal. 0: bypass. 1: delay by pos edge. 2:
    -            /// delay by neg edge. 3: not used.
    -            RX_BCK_OUT_DM: u2,
    -            reserved16: u1,
    -            reserved17: u1,
    -            /// The delay mode of I2S Rx WS input signal. 0: bypass. 1: delay by pos edge. 2:
    -            /// delay by neg edge. 3: not used.
    -            RX_WS_IN_DM: u2,
    -            reserved18: u1,
    -            reserved19: u1,
    -            /// The delay mode of I2S Rx BCK input signal. 0: bypass. 1: delay by pos edge. 2:
    -            /// delay by neg edge. 3: not used.
    -            RX_BCK_IN_DM: u2,
    -            padding0: u1,
    -            padding1: u1,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x6002d05c
    -        /// I2S TX timing control register
    -        pub const TX_TIMING = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The delay mode of I2S TX SD output signal. 0: bypass. 1: delay by pos edge. 2:
    -            /// delay by neg edge. 3: not used.
    -            TX_SD_OUT_DM: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// The delay mode of I2S TX SD1 output signal. 0: bypass. 1: delay by pos edge. 2:
    -            /// delay by neg edge. 3: not used.
    -            TX_SD1_OUT_DM: u2,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            /// The delay mode of I2S TX WS output signal. 0: bypass. 1: delay by pos edge. 2:
    -            /// delay by neg edge. 3: not used.
    -            TX_WS_OUT_DM: u2,
    -            reserved12: u1,
    -            reserved13: u1,
    -            /// The delay mode of I2S TX BCK output signal. 0: bypass. 1: delay by pos edge. 2:
    -            /// delay by neg edge. 3: not used.
    -            TX_BCK_OUT_DM: u2,
    -            reserved14: u1,
    -            reserved15: u1,
    -            /// The delay mode of I2S TX WS input signal. 0: bypass. 1: delay by pos edge. 2:
    -            /// delay by neg edge. 3: not used.
    -            TX_WS_IN_DM: u2,
    -            reserved16: u1,
    -            reserved17: u1,
    -            /// The delay mode of I2S TX BCK input signal. 0: bypass. 1: delay by pos edge. 2:
    -            /// delay by neg edge. 3: not used.
    -            TX_BCK_IN_DM: u2,
    -            padding0: u1,
    -            padding1: u1,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x6002d060
    -        /// I2S HUNG configure register.
    -        pub const LC_HUNG_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// the i2s_tx_hung_int interrupt or the i2s_rx_hung_int interrupt will be triggered
    -            /// when fifo hung counter is equal to this value
    -            LC_FIFO_TIMEOUT: u8,
    -            /// The bits are used to scale tick counter threshold. The tick counter is reset
    -            /// when counter value >= 88000/2^i2s_lc_fifo_timeout_shift
    -            LC_FIFO_TIMEOUT_SHIFT: u3,
    -            /// The enable bit for FIFO timeout
    -            LC_FIFO_TIMEOUT_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x6002d064
    -        /// I2S RX data number control register.
    -        pub const RXEOF_NUM = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The receive data bit length is (I2S_RX_BITS_MOD[4:0] + 1) *
    -            /// (REG_RX_EOF_NUM[11:0] + 1) . It will trigger in_suc_eof interrupt in the
    -            /// configured DMA RX channel.
    -            RX_EOF_NUM: u12,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x6002d068
    -        /// I2S signal data register
    -        pub const CONF_SIGLE_DATA = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The configured constant channel data to be sent out.
    -            SINGLE_DATA: u32,
    -        }), base_address + 0x68);
    -
    -        /// address: 0x6002d06c
    -        /// I2S TX status register
    -        pub const STATE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 1: i2s_tx is idle state. 0: i2s_tx is working.
    -            TX_IDLE: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x6c);
    -
    -        /// address: 0x6002d080
    -        /// Version control register
    -        pub const DATE = @intToPtr(*volatile MmioInt(32, u28), base_address + 0x80);
    -    };
    -
    -    /// Interrupt Core
    -    pub const INTERRUPT_CORE0 = struct {
    -        pub const base_address = 0x600c2000;
    -
    -        /// address: 0x600c2000
    -        /// mac intr map register
    -        pub const MAC_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x0);
    -
    -        /// address: 0x600c2004
    -        /// mac nmi_intr map register
    -        pub const MAC_NMI_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x4);
    -
    -        /// address: 0x600c2008
    -        /// pwr intr map register
    -        pub const PWR_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x8);
    -
    -        /// address: 0x600c200c
    -        /// bb intr map register
    -        pub const BB_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xc);
    -
    -        /// address: 0x600c2010
    -        /// bt intr map register
    -        pub const BT_MAC_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x10);
    -
    -        /// address: 0x600c2014
    -        /// bb_bt intr map register
    -        pub const BT_BB_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x14);
    -
    -        /// address: 0x600c2018
    -        /// bb_bt_nmi intr map register
    -        pub const BT_BB_NMI_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x18);
    -
    -        /// address: 0x600c201c
    -        /// rwbt intr map register
    -        pub const RWBT_IRQ_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x1c);
    -
    -        /// address: 0x600c2020
    -        /// rwble intr map register
    -        pub const RWBLE_IRQ_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x20);
    -
    -        /// address: 0x600c2024
    -        /// rwbt_nmi intr map register
    -        pub const RWBT_NMI_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x24);
    -
    -        /// address: 0x600c2028
    -        /// rwble_nmi intr map register
    -        pub const RWBLE_NMI_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x28);
    -
    -        /// address: 0x600c202c
    -        /// i2c intr map register
    -        pub const I2C_MST_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x2c);
    -
    -        /// address: 0x600c2030
    -        /// slc0 intr map register
    -        pub const SLC0_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x30);
    -
    -        /// address: 0x600c2034
    -        /// slc1 intr map register
    -        pub const SLC1_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x34);
    -
    -        /// address: 0x600c2038
    -        /// apb_ctrl intr map register
    -        pub const APB_CTRL_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x38);
    -
    -        /// address: 0x600c203c
    -        /// uchi0 intr map register
    -        pub const UHCI0_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x3c);
    -
    -        /// address: 0x600c2040
    -        /// gpio intr map register
    -        pub const GPIO_INTERRUPT_PRO_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x40);
    -
    -        /// address: 0x600c2044
    -        /// gpio_pro intr map register
    -        pub const GPIO_INTERRUPT_PRO_NMI_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x44);
    -
    -        /// address: 0x600c2048
    -        /// gpio_pro_nmi intr map register
    -        pub const SPI_INTR_1_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x48);
    -
    -        /// address: 0x600c204c
    -        /// spi1 intr map register
    -        pub const SPI_INTR_2_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x4c);
    -
    -        /// address: 0x600c2050
    -        /// spi2 intr map register
    -        pub const I2S1_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x50);
    -
    -        /// address: 0x600c2054
    -        /// i2s1 intr map register
    -        pub const UART_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x54);
    -
    -        /// address: 0x600c2058
    -        /// uart1 intr map register
    -        pub const UART1_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x58);
    -
    -        /// address: 0x600c205c
    -        /// ledc intr map register
    -        pub const LEDC_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x5c);
    -
    -        /// address: 0x600c2060
    -        /// efuse intr map register
    -        pub const EFUSE_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x60);
    -
    -        /// address: 0x600c2064
    -        /// can intr map register
    -        pub const CAN_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x64);
    -
    -        /// address: 0x600c2068
    -        /// usb intr map register
    -        pub const USB_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x68);
    -
    -        /// address: 0x600c206c
    -        /// rtc intr map register
    -        pub const RTC_CORE_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x6c);
    -
    -        /// address: 0x600c2070
    -        /// rmt intr map register
    -        pub const RMT_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x70);
    -
    -        /// address: 0x600c2074
    -        /// i2c intr map register
    -        pub const I2C_EXT0_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x74);
    -
    -        /// address: 0x600c2078
    -        /// timer1 intr map register
    -        pub const TIMER_INT1_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x78);
    -
    -        /// address: 0x600c207c
    -        /// timer2 intr map register
    -        pub const TIMER_INT2_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x7c);
    -
    -        /// address: 0x600c2080
    -        /// tg to intr map register
    -        pub const TG_T0_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x80);
    -
    -        /// address: 0x600c2084
    -        /// tg wdt intr map register
    -        pub const TG_WDT_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x84);
    -
    -        /// address: 0x600c2088
    -        /// tg1 to intr map register
    -        pub const TG1_T0_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x88);
    -
    -        /// address: 0x600c208c
    -        /// tg1 wdt intr map register
    -        pub const TG1_WDT_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x8c);
    -
    -        /// address: 0x600c2090
    -        /// cache ia intr map register
    -        pub const CACHE_IA_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x90);
    -
    -        /// address: 0x600c2094
    -        /// systimer intr map register
    -        pub const SYSTIMER_TARGET0_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x94);
    -
    -        /// address: 0x600c2098
    -        /// systimer target1 intr map register
    -        pub const SYSTIMER_TARGET1_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x98);
    -
    -        /// address: 0x600c209c
    -        /// systimer target2 intr map register
    -        pub const SYSTIMER_TARGET2_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x9c);
    -
    -        /// address: 0x600c20a0
    -        /// spi mem reject intr map register
    -        pub const SPI_MEM_REJECT_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xa0);
    -
    -        /// address: 0x600c20a4
    -        /// icache perload intr map register
    -        pub const ICACHE_PRELOAD_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xa4);
    -
    -        /// address: 0x600c20a8
    -        /// icache sync intr map register
    -        pub const ICACHE_SYNC_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xa8);
    -
    -        /// address: 0x600c20ac
    -        /// adc intr map register
    -        pub const APB_ADC_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xac);
    -
    -        /// address: 0x600c20b0
    -        /// dma ch0 intr map register
    -        pub const DMA_CH0_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xb0);
    -
    -        /// address: 0x600c20b4
    -        /// dma ch1 intr map register
    -        pub const DMA_CH1_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xb4);
    -
    -        /// address: 0x600c20b8
    -        /// dma ch2 intr map register
    -        pub const DMA_CH2_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xb8);
    -
    -        /// address: 0x600c20bc
    -        /// rsa intr map register
    -        pub const RSA_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xbc);
    -
    -        /// address: 0x600c20c0
    -        /// aes intr map register
    -        pub const AES_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xc0);
    -
    -        /// address: 0x600c20c4
    -        /// sha intr map register
    -        pub const SHA_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xc4);
    -
    -        /// address: 0x600c20c8
    -        /// cpu from cpu 0 intr map register
    -        pub const CPU_INTR_FROM_CPU_0_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xc8);
    -
    -        /// address: 0x600c20cc
    -        /// cpu from cpu 0 intr map register
    -        pub const CPU_INTR_FROM_CPU_1_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xcc);
    -
    -        /// address: 0x600c20d0
    -        /// cpu from cpu 1 intr map register
    -        pub const CPU_INTR_FROM_CPU_2_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xd0);
    -
    -        /// address: 0x600c20d4
    -        /// cpu from cpu 3 intr map register
    -        pub const CPU_INTR_FROM_CPU_3_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xd4);
    -
    -        /// address: 0x600c20d8
    -        /// assist debug intr map register
    -        pub const ASSIST_DEBUG_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xd8);
    -
    -        /// address: 0x600c20dc
    -        /// dma pms violatile intr map register
    -        pub const DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xdc);
    -
    -        /// address: 0x600c20e0
    -        /// iram0 pms violatile intr map register
    -        pub const CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xe0);
    -
    -        /// address: 0x600c20e4
    -        /// mac intr map register
    -        pub const CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xe4);
    -
    -        /// address: 0x600c20e8
    -        /// mac intr map register
    -        pub const CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xe8);
    -
    -        /// address: 0x600c20ec
    -        /// mac intr map register
    -        pub const CORE_0_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xec);
    -
    -        /// address: 0x600c20f0
    -        /// mac intr map register
    -        pub const BACKUP_PMS_VIOLATE_INTR_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xf0);
    -
    -        /// address: 0x600c20f4
    -        /// mac intr map register
    -        pub const CACHE_CORE0_ACS_INT_MAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0xf4);
    -
    -        /// address: 0x600c20f8
    -        /// mac intr map register
    -        pub const INTR_STATUS_REG_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_intr_status_0
    -            INTR_STATUS_0: u32,
    -        }), base_address + 0xf8);
    -
    -        /// address: 0x600c20fc
    -        /// mac intr map register
    -        pub const INTR_STATUS_REG_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_intr_status_1
    -            INTR_STATUS_1: u32,
    -        }), base_address + 0xfc);
    -
    -        /// address: 0x600c2100
    -        /// mac intr map register
    -        pub const CLOCK_GATE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_reg_clk_en
    -            REG_CLK_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x100);
    -
    -        /// address: 0x600c2104
    -        /// mac intr map register
    -        pub const CPU_INT_ENABLE = @intToPtr(*volatile u32, base_address + 0x104);
    -
    -        /// address: 0x600c2108
    -        /// mac intr map register
    -        pub const CPU_INT_TYPE = @intToPtr(*volatile u32, base_address + 0x108);
    -
    -        /// address: 0x600c210c
    -        /// mac intr map register
    -        pub const CPU_INT_CLEAR = @intToPtr(*volatile u32, base_address + 0x10c);
    -
    -        /// address: 0x600c2110
    -        /// mac intr map register
    -        pub const CPU_INT_EIP_STATUS = @intToPtr(*volatile u32, base_address + 0x110);
    -
    -        /// address: 0x600c2114
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_0_map
    -            CPU_PRI_0_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x114);
    -
    -        /// address: 0x600c2118
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_1_map
    -            CPU_PRI_1_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x118);
    -
    -        /// address: 0x600c211c
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_2_map
    -            CPU_PRI_2_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x11c);
    -
    -        /// address: 0x600c2120
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_3_map
    -            CPU_PRI_3_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x120);
    -
    -        /// address: 0x600c2124
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_4_map
    -            CPU_PRI_4_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x124);
    -
    -        /// address: 0x600c2128
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_5_map
    -            CPU_PRI_5_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x128);
    -
    -        /// address: 0x600c212c
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_6 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_6_map
    -            CPU_PRI_6_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x12c);
    -
    -        /// address: 0x600c2130
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_7 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_7_map
    -            CPU_PRI_7_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x130);
    -
    -        /// address: 0x600c2134
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_8 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_8_map
    -            CPU_PRI_8_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x134);
    -
    -        /// address: 0x600c2138
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_9 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_9_map
    -            CPU_PRI_9_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x138);
    -
    -        /// address: 0x600c213c
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_10 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_10_map
    -            CPU_PRI_10_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x13c);
    -
    -        /// address: 0x600c2140
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_11 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_11_map
    -            CPU_PRI_11_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x140);
    -
    -        /// address: 0x600c2144
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_12 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_12_map
    -            CPU_PRI_12_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x144);
    -
    -        /// address: 0x600c2148
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_13 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_13_map
    -            CPU_PRI_13_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x148);
    -
    -        /// address: 0x600c214c
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_14 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_14_map
    -            CPU_PRI_14_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x14c);
    -
    -        /// address: 0x600c2150
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_15 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_15_map
    -            CPU_PRI_15_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x150);
    -
    -        /// address: 0x600c2154
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_16 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_16_map
    -            CPU_PRI_16_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x154);
    -
    -        /// address: 0x600c2158
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_17 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_17_map
    -            CPU_PRI_17_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x158);
    -
    -        /// address: 0x600c215c
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_18 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_18_map
    -            CPU_PRI_18_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x15c);
    -
    -        /// address: 0x600c2160
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_19 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_19_map
    -            CPU_PRI_19_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x160);
    -
    -        /// address: 0x600c2164
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_20 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_20_map
    -            CPU_PRI_20_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x164);
    -
    -        /// address: 0x600c2168
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_21 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_21_map
    -            CPU_PRI_21_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x168);
    -
    -        /// address: 0x600c216c
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_22 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_22_map
    -            CPU_PRI_22_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x16c);
    -
    -        /// address: 0x600c2170
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_23 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_23_map
    -            CPU_PRI_23_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x170);
    -
    -        /// address: 0x600c2174
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_24 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_24_map
    -            CPU_PRI_24_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x174);
    -
    -        /// address: 0x600c2178
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_25 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_25_map
    -            CPU_PRI_25_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x178);
    -
    -        /// address: 0x600c217c
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_26 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_26_map
    -            CPU_PRI_26_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x17c);
    -
    -        /// address: 0x600c2180
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_27 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_27_map
    -            CPU_PRI_27_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x180);
    -
    -        /// address: 0x600c2184
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_28 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_28_map
    -            CPU_PRI_28_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x184);
    -
    -        /// address: 0x600c2188
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_29 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_29_map
    -            CPU_PRI_29_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x188);
    -
    -        /// address: 0x600c218c
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_30 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_30_map
    -            CPU_PRI_30_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x18c);
    -
    -        /// address: 0x600c2190
    -        /// mac intr map register
    -        pub const CPU_INT_PRI_31 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_core0_cpu_pri_31_map
    -            CPU_PRI_31_MAP: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x190);
    -
    -        /// address: 0x600c2194
    -        /// mac intr map register
    -        pub const CPU_INT_THRESH = @intToPtr(*volatile MmioInt(32, u4), base_address + 0x194);
    -
    -        /// address: 0x600c27fc
    -        /// mac intr map register
    -        pub const INTERRUPT_REG_DATE = @intToPtr(*volatile MmioInt(32, u28), base_address + 0x7fc);
    -    };
    -
    -    /// Input/Output Multiplexer
    -    pub const IO_MUX = struct {
    -        pub const base_address = 0x60009000;
    -
    -        /// address: 0x60009000
    -        /// Clock Output Configuration Register
    -        pub const PIN_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// If you want to output clock for I2S to CLK_OUT_out1, set this register to 0x0.
    -            /// CLK_OUT_out1 can be found in peripheral output signals.
    -            CLK_OUT1: u4,
    -            /// If you want to output clock for I2S to CLK_OUT_out2, set this register to 0x0.
    -            /// CLK_OUT_out2 can be found in peripheral output signals.
    -            CLK_OUT2: u4,
    -            /// If you want to output clock for I2S to CLK_OUT_out3, set this register to 0x0.
    -            /// CLK_OUT_out3 can be found in peripheral output signals.
    -            CLK_OUT3: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x60009004
    -        /// IO MUX Configure Register for pad XTAL_32K_P
    -        pub const GPIO0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    -            MCU_OE: u1,
    -            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    -            SLP_SEL: u1,
    -            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    -            /// internal pull-down disabled.
    -            MCU_WPD: u1,
    -            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    -            /// internal pull-up disabled.
    -            MCU_WPU: u1,
    -            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    -            MCU_IE: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    -            /// pull-down disabled.
    -            FUN_WPD: u1,
    -            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    -            /// disabled.
    -            FUN_WPU: u1,
    -            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    -            FUN_IE: u1,
    -            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    -            FUN_DRV: u2,
    -            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    -            /// 2; etc.
    -            MCU_SEL: u3,
    -            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    -            FILTER_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x60009008
    -        /// IO MUX Configure Register for pad XTAL_32K_P
    -        pub const GPIO1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    -            MCU_OE: u1,
    -            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    -            SLP_SEL: u1,
    -            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    -            /// internal pull-down disabled.
    -            MCU_WPD: u1,
    -            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    -            /// internal pull-up disabled.
    -            MCU_WPU: u1,
    -            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    -            MCU_IE: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    -            /// pull-down disabled.
    -            FUN_WPD: u1,
    -            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    -            /// disabled.
    -            FUN_WPU: u1,
    -            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    -            FUN_IE: u1,
    -            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    -            FUN_DRV: u2,
    -            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    -            /// 2; etc.
    -            MCU_SEL: u3,
    -            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    -            FILTER_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x6000900c
    -        /// IO MUX Configure Register for pad XTAL_32K_P
    -        pub const GPIO2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    -            MCU_OE: u1,
    -            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    -            SLP_SEL: u1,
    -            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    -            /// internal pull-down disabled.
    -            MCU_WPD: u1,
    -            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    -            /// internal pull-up disabled.
    -            MCU_WPU: u1,
    -            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    -            MCU_IE: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    -            /// pull-down disabled.
    -            FUN_WPD: u1,
    -            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    -            /// disabled.
    -            FUN_WPU: u1,
    -            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    -            FUN_IE: u1,
    -            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    -            FUN_DRV: u2,
    -            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    -            /// 2; etc.
    -            MCU_SEL: u3,
    -            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    -            FILTER_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x60009010
    -        /// IO MUX Configure Register for pad XTAL_32K_P
    -        pub const GPIO3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    -            MCU_OE: u1,
    -            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    -            SLP_SEL: u1,
    -            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    -            /// internal pull-down disabled.
    -            MCU_WPD: u1,
    -            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    -            /// internal pull-up disabled.
    -            MCU_WPU: u1,
    -            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    -            MCU_IE: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    -            /// pull-down disabled.
    -            FUN_WPD: u1,
    -            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    -            /// disabled.
    -            FUN_WPU: u1,
    -            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    -            FUN_IE: u1,
    -            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    -            FUN_DRV: u2,
    -            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    -            /// 2; etc.
    -            MCU_SEL: u3,
    -            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    -            FILTER_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x60009014
    -        /// IO MUX Configure Register for pad XTAL_32K_P
    -        pub const GPIO4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    -            MCU_OE: u1,
    -            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    -            SLP_SEL: u1,
    -            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    -            /// internal pull-down disabled.
    -            MCU_WPD: u1,
    -            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    -            /// internal pull-up disabled.
    -            MCU_WPU: u1,
    -            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    -            MCU_IE: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    -            /// pull-down disabled.
    -            FUN_WPD: u1,
    -            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    -            /// disabled.
    -            FUN_WPU: u1,
    -            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    -            FUN_IE: u1,
    -            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    -            FUN_DRV: u2,
    -            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    -            /// 2; etc.
    -            MCU_SEL: u3,
    -            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    -            FILTER_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x60009018
    -        /// IO MUX Configure Register for pad XTAL_32K_P
    -        pub const GPIO5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    -            MCU_OE: u1,
    -            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    -            SLP_SEL: u1,
    -            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    -            /// internal pull-down disabled.
    -            MCU_WPD: u1,
    -            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    -            /// internal pull-up disabled.
    -            MCU_WPU: u1,
    -            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    -            MCU_IE: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    -            /// pull-down disabled.
    -            FUN_WPD: u1,
    -            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    -            /// disabled.
    -            FUN_WPU: u1,
    -            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    -            FUN_IE: u1,
    -            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    -            FUN_DRV: u2,
    -            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    -            /// 2; etc.
    -            MCU_SEL: u3,
    -            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    -            FILTER_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x6000901c
    -        /// IO MUX Configure Register for pad XTAL_32K_P
    -        pub const GPIO6 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    -            MCU_OE: u1,
    -            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    -            SLP_SEL: u1,
    -            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    -            /// internal pull-down disabled.
    -            MCU_WPD: u1,
    -            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    -            /// internal pull-up disabled.
    -            MCU_WPU: u1,
    -            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    -            MCU_IE: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    -            /// pull-down disabled.
    -            FUN_WPD: u1,
    -            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    -            /// disabled.
    -            FUN_WPU: u1,
    -            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    -            FUN_IE: u1,
    -            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    -            FUN_DRV: u2,
    -            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    -            /// 2; etc.
    -            MCU_SEL: u3,
    -            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    -            FILTER_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x60009020
    -        /// IO MUX Configure Register for pad XTAL_32K_P
    -        pub const GPIO7 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    -            MCU_OE: u1,
    -            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    -            SLP_SEL: u1,
    -            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    -            /// internal pull-down disabled.
    -            MCU_WPD: u1,
    -            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    -            /// internal pull-up disabled.
    -            MCU_WPU: u1,
    -            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    -            MCU_IE: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    -            /// pull-down disabled.
    -            FUN_WPD: u1,
    -            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    -            /// disabled.
    -            FUN_WPU: u1,
    -            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    -            FUN_IE: u1,
    -            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    -            FUN_DRV: u2,
    -            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    -            /// 2; etc.
    -            MCU_SEL: u3,
    -            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    -            FILTER_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x60009024
    -        /// IO MUX Configure Register for pad XTAL_32K_P
    -        pub const GPIO8 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    -            MCU_OE: u1,
    -            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    -            SLP_SEL: u1,
    -            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    -            /// internal pull-down disabled.
    -            MCU_WPD: u1,
    -            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    -            /// internal pull-up disabled.
    -            MCU_WPU: u1,
    -            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    -            MCU_IE: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    -            /// pull-down disabled.
    -            FUN_WPD: u1,
    -            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    -            /// disabled.
    -            FUN_WPU: u1,
    -            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    -            FUN_IE: u1,
    -            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    -            FUN_DRV: u2,
    -            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    -            /// 2; etc.
    -            MCU_SEL: u3,
    -            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    -            FILTER_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x60009028
    -        /// IO MUX Configure Register for pad XTAL_32K_P
    -        pub const GPIO9 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    -            MCU_OE: u1,
    -            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    -            SLP_SEL: u1,
    -            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    -            /// internal pull-down disabled.
    -            MCU_WPD: u1,
    -            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    -            /// internal pull-up disabled.
    -            MCU_WPU: u1,
    -            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    -            MCU_IE: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    -            /// pull-down disabled.
    -            FUN_WPD: u1,
    -            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    -            /// disabled.
    -            FUN_WPU: u1,
    -            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    -            FUN_IE: u1,
    -            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    -            FUN_DRV: u2,
    -            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    -            /// 2; etc.
    -            MCU_SEL: u3,
    -            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    -            FILTER_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x6000902c
    -        /// IO MUX Configure Register for pad XTAL_32K_P
    -        pub const GPIO10 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    -            MCU_OE: u1,
    -            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    -            SLP_SEL: u1,
    -            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    -            /// internal pull-down disabled.
    -            MCU_WPD: u1,
    -            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    -            /// internal pull-up disabled.
    -            MCU_WPU: u1,
    -            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    -            MCU_IE: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    -            /// pull-down disabled.
    -            FUN_WPD: u1,
    -            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    -            /// disabled.
    -            FUN_WPU: u1,
    -            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    -            FUN_IE: u1,
    -            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    -            FUN_DRV: u2,
    -            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    -            /// 2; etc.
    -            MCU_SEL: u3,
    -            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    -            FILTER_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x60009030
    -        /// IO MUX Configure Register for pad XTAL_32K_P
    -        pub const GPIO11 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    -            MCU_OE: u1,
    -            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    -            SLP_SEL: u1,
    -            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    -            /// internal pull-down disabled.
    -            MCU_WPD: u1,
    -            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    -            /// internal pull-up disabled.
    -            MCU_WPU: u1,
    -            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    -            MCU_IE: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    -            /// pull-down disabled.
    -            FUN_WPD: u1,
    -            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    -            /// disabled.
    -            FUN_WPU: u1,
    -            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    -            FUN_IE: u1,
    -            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    -            FUN_DRV: u2,
    -            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    -            /// 2; etc.
    -            MCU_SEL: u3,
    -            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    -            FILTER_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x60009034
    -        /// IO MUX Configure Register for pad XTAL_32K_P
    -        pub const GPIO12 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    -            MCU_OE: u1,
    -            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    -            SLP_SEL: u1,
    -            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    -            /// internal pull-down disabled.
    -            MCU_WPD: u1,
    -            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    -            /// internal pull-up disabled.
    -            MCU_WPU: u1,
    -            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    -            MCU_IE: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    -            /// pull-down disabled.
    -            FUN_WPD: u1,
    -            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    -            /// disabled.
    -            FUN_WPU: u1,
    -            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    -            FUN_IE: u1,
    -            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    -            FUN_DRV: u2,
    -            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    -            /// 2; etc.
    -            MCU_SEL: u3,
    -            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    -            FILTER_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x60009038
    -        /// IO MUX Configure Register for pad XTAL_32K_P
    -        pub const GPIO13 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    -            MCU_OE: u1,
    -            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    -            SLP_SEL: u1,
    -            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    -            /// internal pull-down disabled.
    -            MCU_WPD: u1,
    -            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    -            /// internal pull-up disabled.
    -            MCU_WPU: u1,
    -            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    -            MCU_IE: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    -            /// pull-down disabled.
    -            FUN_WPD: u1,
    -            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    -            /// disabled.
    -            FUN_WPU: u1,
    -            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    -            FUN_IE: u1,
    -            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    -            FUN_DRV: u2,
    -            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    -            /// 2; etc.
    -            MCU_SEL: u3,
    -            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    -            FILTER_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x6000903c
    -        /// IO MUX Configure Register for pad XTAL_32K_P
    -        pub const GPIO14 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    -            MCU_OE: u1,
    -            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    -            SLP_SEL: u1,
    -            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    -            /// internal pull-down disabled.
    -            MCU_WPD: u1,
    -            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    -            /// internal pull-up disabled.
    -            MCU_WPU: u1,
    -            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    -            MCU_IE: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    -            /// pull-down disabled.
    -            FUN_WPD: u1,
    -            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    -            /// disabled.
    -            FUN_WPU: u1,
    -            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    -            FUN_IE: u1,
    -            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    -            FUN_DRV: u2,
    -            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    -            /// 2; etc.
    -            MCU_SEL: u3,
    -            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    -            FILTER_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x60009040
    -        /// IO MUX Configure Register for pad XTAL_32K_P
    -        pub const GPIO15 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    -            MCU_OE: u1,
    -            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    -            SLP_SEL: u1,
    -            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    -            /// internal pull-down disabled.
    -            MCU_WPD: u1,
    -            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    -            /// internal pull-up disabled.
    -            MCU_WPU: u1,
    -            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    -            MCU_IE: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    -            /// pull-down disabled.
    -            FUN_WPD: u1,
    -            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    -            /// disabled.
    -            FUN_WPU: u1,
    -            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    -            FUN_IE: u1,
    -            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    -            FUN_DRV: u2,
    -            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    -            /// 2; etc.
    -            MCU_SEL: u3,
    -            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    -            FILTER_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x60009044
    -        /// IO MUX Configure Register for pad XTAL_32K_P
    -        pub const GPIO16 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    -            MCU_OE: u1,
    -            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    -            SLP_SEL: u1,
    -            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    -            /// internal pull-down disabled.
    -            MCU_WPD: u1,
    -            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    -            /// internal pull-up disabled.
    -            MCU_WPU: u1,
    -            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    -            MCU_IE: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    -            /// pull-down disabled.
    -            FUN_WPD: u1,
    -            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    -            /// disabled.
    -            FUN_WPU: u1,
    -            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    -            FUN_IE: u1,
    -            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    -            FUN_DRV: u2,
    -            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    -            /// 2; etc.
    -            MCU_SEL: u3,
    -            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    -            FILTER_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x60009048
    -        /// IO MUX Configure Register for pad XTAL_32K_P
    -        pub const GPIO17 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    -            MCU_OE: u1,
    -            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    -            SLP_SEL: u1,
    -            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    -            /// internal pull-down disabled.
    -            MCU_WPD: u1,
    -            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    -            /// internal pull-up disabled.
    -            MCU_WPU: u1,
    -            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    -            MCU_IE: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    -            /// pull-down disabled.
    -            FUN_WPD: u1,
    -            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    -            /// disabled.
    -            FUN_WPU: u1,
    -            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    -            FUN_IE: u1,
    -            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    -            FUN_DRV: u2,
    -            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    -            /// 2; etc.
    -            MCU_SEL: u3,
    -            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    -            FILTER_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x6000904c
    -        /// IO MUX Configure Register for pad XTAL_32K_P
    -        pub const GPIO18 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    -            MCU_OE: u1,
    -            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    -            SLP_SEL: u1,
    -            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    -            /// internal pull-down disabled.
    -            MCU_WPD: u1,
    -            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    -            /// internal pull-up disabled.
    -            MCU_WPU: u1,
    -            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    -            MCU_IE: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    -            /// pull-down disabled.
    -            FUN_WPD: u1,
    -            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    -            /// disabled.
    -            FUN_WPU: u1,
    -            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    -            FUN_IE: u1,
    -            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    -            FUN_DRV: u2,
    -            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    -            /// 2; etc.
    -            MCU_SEL: u3,
    -            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    -            FILTER_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x4c);
    -
    -        /// address: 0x60009050
    -        /// IO MUX Configure Register for pad XTAL_32K_P
    -        pub const GPIO19 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    -            MCU_OE: u1,
    -            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    -            SLP_SEL: u1,
    -            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    -            /// internal pull-down disabled.
    -            MCU_WPD: u1,
    -            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    -            /// internal pull-up disabled.
    -            MCU_WPU: u1,
    -            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    -            MCU_IE: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    -            /// pull-down disabled.
    -            FUN_WPD: u1,
    -            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    -            /// disabled.
    -            FUN_WPU: u1,
    -            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    -            FUN_IE: u1,
    -            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    -            FUN_DRV: u2,
    -            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    -            /// 2; etc.
    -            MCU_SEL: u3,
    -            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    -            FILTER_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x60009054
    -        /// IO MUX Configure Register for pad XTAL_32K_P
    -        pub const GPIO20 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    -            MCU_OE: u1,
    -            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    -            SLP_SEL: u1,
    -            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    -            /// internal pull-down disabled.
    -            MCU_WPD: u1,
    -            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    -            /// internal pull-up disabled.
    -            MCU_WPU: u1,
    -            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    -            MCU_IE: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    -            /// pull-down disabled.
    -            FUN_WPD: u1,
    -            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    -            /// disabled.
    -            FUN_WPU: u1,
    -            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    -            FUN_IE: u1,
    -            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    -            FUN_DRV: u2,
    -            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    -            /// 2; etc.
    -            MCU_SEL: u3,
    -            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    -            FILTER_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x60009058
    -        /// IO MUX Configure Register for pad XTAL_32K_P
    -        pub const GPIO21 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    -            MCU_OE: u1,
    -            /// Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    -            SLP_SEL: u1,
    -            /// Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0:
    -            /// internal pull-down disabled.
    -            MCU_WPD: u1,
    -            /// Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0:
    -            /// internal pull-up disabled.
    -            MCU_WPU: u1,
    -            /// Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    -            MCU_IE: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal
    -            /// pull-down disabled.
    -            FUN_WPD: u1,
    -            /// Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up
    -            /// disabled.
    -            FUN_WPU: u1,
    -            /// Input enable of the pad. 1: input enabled; 0: input disabled.
    -            FUN_IE: u1,
    -            /// Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    -            FUN_DRV: u2,
    -            /// Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function
    -            /// 2; etc.
    -            MCU_SEL: u3,
    -            /// Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    -            FILTER_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x600090fc
    -        /// IO MUX Version Control Register
    -        pub const DATE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Version control register
    -            REG_DATE: u28,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -        }), base_address + 0xfc);
    -    };
    -
    -    /// LED Control PWM (Pulse Width Modulation)
    -    pub const LEDC = struct {
    -        pub const base_address = 0x60019000;
    -
    -        /// address: 0x60019000
    -        /// LEDC_LSCH0_CONF0.
    -        pub const LSCH0_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_timer_sel_lsch0.
    -            TIMER_SEL_LSCH0: u2,
    -            /// reg_sig_out_en_lsch0.
    -            SIG_OUT_EN_LSCH0: u1,
    -            /// reg_idle_lv_lsch0.
    -            IDLE_LV_LSCH0: u1,
    -            /// reg_para_up_lsch0.
    -            PARA_UP_LSCH0: u1,
    -            /// reg_ovf_num_lsch0.
    -            OVF_NUM_LSCH0: u10,
    -            /// reg_ovf_cnt_en_lsch0.
    -            OVF_CNT_EN_LSCH0: u1,
    -            /// reg_ovf_cnt_reset_lsch0.
    -            OVF_CNT_RESET_LSCH0: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x60019004
    -        /// LEDC_LSCH0_HPOINT.
    -        pub const LSCH0_HPOINT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_hpoint_lsch0.
    -            HPOINT_LSCH0: u14,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x60019008
    -        /// LEDC_LSCH0_DUTY.
    -        pub const LSCH0_DUTY = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_duty_lsch0.
    -            DUTY_LSCH0: u19,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x6001900c
    -        /// LEDC_LSCH0_CONF1.
    -        pub const LSCH0_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_duty_scale_lsch0.
    -            DUTY_SCALE_LSCH0: u10,
    -            /// reg_duty_cycle_lsch0.
    -            DUTY_CYCLE_LSCH0: u10,
    -            /// reg_duty_num_lsch0.
    -            DUTY_NUM_LSCH0: u10,
    -            /// reg_duty_inc_lsch0.
    -            DUTY_INC_LSCH0: u1,
    -            /// reg_duty_start_lsch0.
    -            DUTY_START_LSCH0: u1,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x60019010
    -        /// LEDC_LSCH0_DUTY_R.
    -        pub const LSCH0_DUTY_R = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_duty_lsch0_r.
    -            DUTY_LSCH0_R: u19,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x60019014
    -        /// LEDC_LSCH1_CONF0.
    -        pub const LSCH1_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_timer_sel_lsch1.
    -            TIMER_SEL_LSCH1: u2,
    -            /// reg_sig_out_en_lsch1.
    -            SIG_OUT_EN_LSCH1: u1,
    -            /// reg_idle_lv_lsch1.
    -            IDLE_LV_LSCH1: u1,
    -            /// reg_para_up_lsch1.
    -            PARA_UP_LSCH1: u1,
    -            /// reg_ovf_num_lsch1.
    -            OVF_NUM_LSCH1: u10,
    -            /// reg_ovf_cnt_en_lsch1.
    -            OVF_CNT_EN_LSCH1: u1,
    -            /// reg_ovf_cnt_reset_lsch1.
    -            OVF_CNT_RESET_LSCH1: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x60019018
    -        /// LEDC_LSCH1_HPOINT.
    -        pub const LSCH1_HPOINT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_hpoint_lsch1.
    -            HPOINT_LSCH1: u14,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x6001901c
    -        /// LEDC_LSCH1_DUTY.
    -        pub const LSCH1_DUTY = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_duty_lsch1.
    -            DUTY_LSCH1: u19,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x60019020
    -        /// LEDC_LSCH1_CONF1.
    -        pub const LSCH1_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_duty_scale_lsch1.
    -            DUTY_SCALE_LSCH1: u10,
    -            /// reg_duty_cycle_lsch1.
    -            DUTY_CYCLE_LSCH1: u10,
    -            /// reg_duty_num_lsch1.
    -            DUTY_NUM_LSCH1: u10,
    -            /// reg_duty_inc_lsch1.
    -            DUTY_INC_LSCH1: u1,
    -            /// reg_duty_start_lsch1.
    -            DUTY_START_LSCH1: u1,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x60019024
    -        /// LEDC_LSCH1_DUTY_R.
    -        pub const LSCH1_DUTY_R = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_duty_lsch1_r.
    -            DUTY_LSCH1_R: u19,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x60019028
    -        /// LEDC_LSCH2_CONF0.
    -        pub const LSCH2_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_timer_sel_lsch2.
    -            TIMER_SEL_LSCH2: u2,
    -            /// reg_sig_out_en_lsch2.
    -            SIG_OUT_EN_LSCH2: u1,
    -            /// reg_idle_lv_lsch2.
    -            IDLE_LV_LSCH2: u1,
    -            /// reg_para_up_lsch2.
    -            PARA_UP_LSCH2: u1,
    -            /// reg_ovf_num_lsch2.
    -            OVF_NUM_LSCH2: u10,
    -            /// reg_ovf_cnt_en_lsch2.
    -            OVF_CNT_EN_LSCH2: u1,
    -            /// reg_ovf_cnt_reset_lsch2.
    -            OVF_CNT_RESET_LSCH2: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x6001902c
    -        /// LEDC_LSCH2_HPOINT.
    -        pub const LSCH2_HPOINT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_hpoint_lsch2.
    -            HPOINT_LSCH2: u14,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x60019030
    -        /// LEDC_LSCH2_DUTY.
    -        pub const LSCH2_DUTY = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_duty_lsch2.
    -            DUTY_LSCH2: u19,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x60019034
    -        /// LEDC_LSCH2_CONF1.
    -        pub const LSCH2_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_duty_scale_lsch2.
    -            DUTY_SCALE_LSCH2: u10,
    -            /// reg_duty_cycle_lsch2.
    -            DUTY_CYCLE_LSCH2: u10,
    -            /// reg_duty_num_lsch2.
    -            DUTY_NUM_LSCH2: u10,
    -            /// reg_duty_inc_lsch2.
    -            DUTY_INC_LSCH2: u1,
    -            /// reg_duty_start_lsch2.
    -            DUTY_START_LSCH2: u1,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x60019038
    -        /// LEDC_LSCH2_DUTY_R.
    -        pub const LSCH2_DUTY_R = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_duty_lsch2_r.
    -            DUTY_LSCH2_R: u19,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x6001903c
    -        /// LEDC_LSCH3_CONF0.
    -        pub const LSCH3_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_timer_sel_lsch3.
    -            TIMER_SEL_LSCH3: u2,
    -            /// reg_sig_out_en_lsch3.
    -            SIG_OUT_EN_LSCH3: u1,
    -            /// reg_idle_lv_lsch3.
    -            IDLE_LV_LSCH3: u1,
    -            /// reg_para_up_lsch3.
    -            PARA_UP_LSCH3: u1,
    -            /// reg_ovf_num_lsch3.
    -            OVF_NUM_LSCH3: u10,
    -            /// reg_ovf_cnt_en_lsch3.
    -            OVF_CNT_EN_LSCH3: u1,
    -            /// reg_ovf_cnt_reset_lsch3.
    -            OVF_CNT_RESET_LSCH3: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x60019040
    -        /// LEDC_LSCH3_HPOINT.
    -        pub const LSCH3_HPOINT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_hpoint_lsch3.
    -            HPOINT_LSCH3: u14,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x60019044
    -        /// LEDC_LSCH3_DUTY.
    -        pub const LSCH3_DUTY = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_duty_lsch3.
    -            DUTY_LSCH3: u19,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x60019048
    -        /// LEDC_LSCH3_CONF1.
    -        pub const LSCH3_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_duty_scale_lsch3.
    -            DUTY_SCALE_LSCH3: u10,
    -            /// reg_duty_cycle_lsch3.
    -            DUTY_CYCLE_LSCH3: u10,
    -            /// reg_duty_num_lsch3.
    -            DUTY_NUM_LSCH3: u10,
    -            /// reg_duty_inc_lsch3.
    -            DUTY_INC_LSCH3: u1,
    -            /// reg_duty_start_lsch3.
    -            DUTY_START_LSCH3: u1,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x6001904c
    -        /// LEDC_LSCH3_DUTY_R.
    -        pub const LSCH3_DUTY_R = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_duty_lsch3_r.
    -            DUTY_LSCH3_R: u19,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -        }), base_address + 0x4c);
    -
    -        /// address: 0x60019050
    -        /// LEDC_LSCH4_CONF0.
    -        pub const LSCH4_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_timer_sel_lsch4.
    -            TIMER_SEL_LSCH4: u2,
    -            /// reg_sig_out_en_lsch4.
    -            SIG_OUT_EN_LSCH4: u1,
    -            /// reg_idle_lv_lsch4.
    -            IDLE_LV_LSCH4: u1,
    -            /// reg_para_up_lsch4.
    -            PARA_UP_LSCH4: u1,
    -            /// reg_ovf_num_lsch4.
    -            OVF_NUM_LSCH4: u10,
    -            /// reg_ovf_cnt_en_lsch4.
    -            OVF_CNT_EN_LSCH4: u1,
    -            /// reg_ovf_cnt_reset_lsch4.
    -            OVF_CNT_RESET_LSCH4: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x60019054
    -        /// LEDC_LSCH4_HPOINT.
    -        pub const LSCH4_HPOINT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_hpoint_lsch4.
    -            HPOINT_LSCH4: u14,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x60019058
    -        /// LEDC_LSCH4_DUTY.
    -        pub const LSCH4_DUTY = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_duty_lsch4.
    -            DUTY_LSCH4: u19,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x6001905c
    -        /// LEDC_LSCH4_CONF1.
    -        pub const LSCH4_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_duty_scale_lsch4.
    -            DUTY_SCALE_LSCH4: u10,
    -            /// reg_duty_cycle_lsch4.
    -            DUTY_CYCLE_LSCH4: u10,
    -            /// reg_duty_num_lsch4.
    -            DUTY_NUM_LSCH4: u10,
    -            /// reg_duty_inc_lsch4.
    -            DUTY_INC_LSCH4: u1,
    -            /// reg_duty_start_lsch4.
    -            DUTY_START_LSCH4: u1,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x60019060
    -        /// LEDC_LSCH4_DUTY_R.
    -        pub const LSCH4_DUTY_R = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_duty_lsch4_r.
    -            DUTY_LSCH4_R: u19,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x60019064
    -        /// LEDC_LSCH5_CONF0.
    -        pub const LSCH5_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_timer_sel_lsch5.
    -            TIMER_SEL_LSCH5: u2,
    -            /// reg_sig_out_en_lsch5.
    -            SIG_OUT_EN_LSCH5: u1,
    -            /// reg_idle_lv_lsch5.
    -            IDLE_LV_LSCH5: u1,
    -            /// reg_para_up_lsch5.
    -            PARA_UP_LSCH5: u1,
    -            /// reg_ovf_num_lsch5.
    -            OVF_NUM_LSCH5: u10,
    -            /// reg_ovf_cnt_en_lsch5.
    -            OVF_CNT_EN_LSCH5: u1,
    -            /// reg_ovf_cnt_reset_lsch5.
    -            OVF_CNT_RESET_LSCH5: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x60019068
    -        /// LEDC_LSCH5_HPOINT.
    -        pub const LSCH5_HPOINT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_hpoint_lsch5.
    -            HPOINT_LSCH5: u14,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -        }), base_address + 0x68);
    -
    -        /// address: 0x6001906c
    -        /// LEDC_LSCH5_DUTY.
    -        pub const LSCH5_DUTY = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_duty_lsch5.
    -            DUTY_LSCH5: u19,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -        }), base_address + 0x6c);
    -
    -        /// address: 0x60019070
    -        /// LEDC_LSCH5_CONF1.
    -        pub const LSCH5_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_duty_scale_lsch5.
    -            DUTY_SCALE_LSCH5: u10,
    -            /// reg_duty_cycle_lsch5.
    -            DUTY_CYCLE_LSCH5: u10,
    -            /// reg_duty_num_lsch5.
    -            DUTY_NUM_LSCH5: u10,
    -            /// reg_duty_inc_lsch5.
    -            DUTY_INC_LSCH5: u1,
    -            /// reg_duty_start_lsch5.
    -            DUTY_START_LSCH5: u1,
    -        }), base_address + 0x70);
    -
    -        /// address: 0x60019074
    -        /// LEDC_LSCH5_DUTY_R.
    -        pub const LSCH5_DUTY_R = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_duty_lsch5_r.
    -            DUTY_LSCH5_R: u19,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -        }), base_address + 0x74);
    -
    -        /// address: 0x600190a0
    -        /// LEDC_LSTIMER0_CONF.
    -        pub const LSTIMER0_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_lstimer0_duty_res.
    -            LSTIMER0_DUTY_RES: u4,
    -            /// reg_clk_div_lstimer0.
    -            CLK_DIV_LSTIMER0: u18,
    -            /// reg_lstimer0_pause.
    -            LSTIMER0_PAUSE: u1,
    -            /// reg_lstimer0_rst.
    -            LSTIMER0_RST: u1,
    -            /// reg_tick_sel_lstimer0.
    -            TICK_SEL_LSTIMER0: u1,
    -            /// reg_lstimer0_para_up.
    -            LSTIMER0_PARA_UP: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -        }), base_address + 0xa0);
    -
    -        /// address: 0x600190a4
    -        /// LEDC_LSTIMER0_VALUE.
    -        pub const LSTIMER0_VALUE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_lstimer0_cnt.
    -            LSTIMER0_CNT: u14,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -        }), base_address + 0xa4);
    -
    -        /// address: 0x600190a8
    -        /// LEDC_LSTIMER1_CONF.
    -        pub const LSTIMER1_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_lstimer1_duty_res.
    -            LSTIMER1_DUTY_RES: u4,
    -            /// reg_clk_div_lstimer1.
    -            CLK_DIV_LSTIMER1: u18,
    -            /// reg_lstimer1_pause.
    -            LSTIMER1_PAUSE: u1,
    -            /// reg_lstimer1_rst.
    -            LSTIMER1_RST: u1,
    -            /// reg_tick_sel_lstimer1.
    -            TICK_SEL_LSTIMER1: u1,
    -            /// reg_lstimer1_para_up.
    -            LSTIMER1_PARA_UP: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -        }), base_address + 0xa8);
    -
    -        /// address: 0x600190ac
    -        /// LEDC_LSTIMER1_VALUE.
    -        pub const LSTIMER1_VALUE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_lstimer1_cnt.
    -            LSTIMER1_CNT: u14,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -        }), base_address + 0xac);
    -
    -        /// address: 0x600190b0
    -        /// LEDC_LSTIMER2_CONF.
    -        pub const LSTIMER2_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_lstimer2_duty_res.
    -            LSTIMER2_DUTY_RES: u4,
    -            /// reg_clk_div_lstimer2.
    -            CLK_DIV_LSTIMER2: u18,
    -            /// reg_lstimer2_pause.
    -            LSTIMER2_PAUSE: u1,
    -            /// reg_lstimer2_rst.
    -            LSTIMER2_RST: u1,
    -            /// reg_tick_sel_lstimer2.
    -            TICK_SEL_LSTIMER2: u1,
    -            /// reg_lstimer2_para_up.
    -            LSTIMER2_PARA_UP: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -        }), base_address + 0xb0);
    -
    -        /// address: 0x600190b4
    -        /// LEDC_LSTIMER2_VALUE.
    -        pub const LSTIMER2_VALUE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_lstimer2_cnt.
    -            LSTIMER2_CNT: u14,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -        }), base_address + 0xb4);
    -
    -        /// address: 0x600190b8
    -        /// LEDC_LSTIMER3_CONF.
    -        pub const LSTIMER3_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_lstimer3_duty_res.
    -            LSTIMER3_DUTY_RES: u4,
    -            /// reg_clk_div_lstimer3.
    -            CLK_DIV_LSTIMER3: u18,
    -            /// reg_lstimer3_pause.
    -            LSTIMER3_PAUSE: u1,
    -            /// reg_lstimer3_rst.
    -            LSTIMER3_RST: u1,
    -            /// reg_tick_sel_lstimer3.
    -            TICK_SEL_LSTIMER3: u1,
    -            /// reg_lstimer3_para_up.
    -            LSTIMER3_PARA_UP: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -        }), base_address + 0xb8);
    -
    -        /// address: 0x600190bc
    -        /// LEDC_LSTIMER3_VALUE.
    -        pub const LSTIMER3_VALUE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_lstimer3_cnt.
    -            LSTIMER3_CNT: u14,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -        }), base_address + 0xbc);
    -
    -        /// address: 0x600190c0
    -        /// LEDC_INT_RAW.
    -        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_lstimer0_ovf_int_raw.
    -            LSTIMER0_OVF_INT_RAW: u1,
    -            /// reg_lstimer1_ovf_int_raw.
    -            LSTIMER1_OVF_INT_RAW: u1,
    -            /// reg_lstimer2_ovf_int_raw.
    -            LSTIMER2_OVF_INT_RAW: u1,
    -            /// reg_lstimer3_ovf_int_raw.
    -            LSTIMER3_OVF_INT_RAW: u1,
    -            /// reg_duty_chng_end_lsch0_int_raw.
    -            DUTY_CHNG_END_LSCH0_INT_RAW: u1,
    -            /// reg_duty_chng_end_lsch1_int_raw.
    -            DUTY_CHNG_END_LSCH1_INT_RAW: u1,
    -            /// reg_duty_chng_end_lsch2_int_raw.
    -            DUTY_CHNG_END_LSCH2_INT_RAW: u1,
    -            /// reg_duty_chng_end_lsch3_int_raw.
    -            DUTY_CHNG_END_LSCH3_INT_RAW: u1,
    -            /// reg_duty_chng_end_lsch4_int_raw.
    -            DUTY_CHNG_END_LSCH4_INT_RAW: u1,
    -            /// reg_duty_chng_end_lsch5_int_raw.
    -            DUTY_CHNG_END_LSCH5_INT_RAW: u1,
    -            /// reg_ovf_cnt_lsch0_int_raw.
    -            OVF_CNT_LSCH0_INT_RAW: u1,
    -            /// reg_ovf_cnt_lsch1_int_raw.
    -            OVF_CNT_LSCH1_INT_RAW: u1,
    -            /// reg_ovf_cnt_lsch2_int_raw.
    -            OVF_CNT_LSCH2_INT_RAW: u1,
    -            /// reg_ovf_cnt_lsch3_int_raw.
    -            OVF_CNT_LSCH3_INT_RAW: u1,
    -            /// reg_ovf_cnt_lsch4_int_raw.
    -            OVF_CNT_LSCH4_INT_RAW: u1,
    -            /// reg_ovf_cnt_lsch5_int_raw.
    -            OVF_CNT_LSCH5_INT_RAW: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0xc0);
    -
    -        /// address: 0x600190c4
    -        /// LEDC_INT_ST.
    -        pub const INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_lstimer0_ovf_int_st.
    -            LSTIMER0_OVF_INT_ST: u1,
    -            /// reg_lstimer1_ovf_int_st.
    -            LSTIMER1_OVF_INT_ST: u1,
    -            /// reg_lstimer2_ovf_int_st.
    -            LSTIMER2_OVF_INT_ST: u1,
    -            /// reg_lstimer3_ovf_int_st.
    -            LSTIMER3_OVF_INT_ST: u1,
    -            /// reg_duty_chng_end_lsch0_int_st.
    -            DUTY_CHNG_END_LSCH0_INT_ST: u1,
    -            /// reg_duty_chng_end_lsch1_int_st.
    -            DUTY_CHNG_END_LSCH1_INT_ST: u1,
    -            /// reg_duty_chng_end_lsch2_int_st.
    -            DUTY_CHNG_END_LSCH2_INT_ST: u1,
    -            /// reg_duty_chng_end_lsch3_int_st.
    -            DUTY_CHNG_END_LSCH3_INT_ST: u1,
    -            /// reg_duty_chng_end_lsch4_int_st.
    -            DUTY_CHNG_END_LSCH4_INT_ST: u1,
    -            /// reg_duty_chng_end_lsch5_int_st.
    -            DUTY_CHNG_END_LSCH5_INT_ST: u1,
    -            /// reg_ovf_cnt_lsch0_int_st.
    -            OVF_CNT_LSCH0_INT_ST: u1,
    -            /// reg_ovf_cnt_lsch1_int_st.
    -            OVF_CNT_LSCH1_INT_ST: u1,
    -            /// reg_ovf_cnt_lsch2_int_st.
    -            OVF_CNT_LSCH2_INT_ST: u1,
    -            /// reg_ovf_cnt_lsch3_int_st.
    -            OVF_CNT_LSCH3_INT_ST: u1,
    -            /// reg_ovf_cnt_lsch4_int_st.
    -            OVF_CNT_LSCH4_INT_ST: u1,
    -            /// reg_ovf_cnt_lsch5_int_st.
    -            OVF_CNT_LSCH5_INT_ST: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0xc4);
    -
    -        /// address: 0x600190c8
    -        /// LEDC_INT_ENA.
    -        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_lstimer0_ovf_int_ena.
    -            LSTIMER0_OVF_INT_ENA: u1,
    -            /// reg_lstimer1_ovf_int_ena.
    -            LSTIMER1_OVF_INT_ENA: u1,
    -            /// reg_lstimer2_ovf_int_ena.
    -            LSTIMER2_OVF_INT_ENA: u1,
    -            /// reg_lstimer3_ovf_int_ena.
    -            LSTIMER3_OVF_INT_ENA: u1,
    -            /// reg_duty_chng_end_lsch0_int_ena.
    -            DUTY_CHNG_END_LSCH0_INT_ENA: u1,
    -            /// reg_duty_chng_end_lsch1_int_ena.
    -            DUTY_CHNG_END_LSCH1_INT_ENA: u1,
    -            /// reg_duty_chng_end_lsch2_int_ena.
    -            DUTY_CHNG_END_LSCH2_INT_ENA: u1,
    -            /// reg_duty_chng_end_lsch3_int_ena.
    -            DUTY_CHNG_END_LSCH3_INT_ENA: u1,
    -            /// reg_duty_chng_end_lsch4_int_ena.
    -            DUTY_CHNG_END_LSCH4_INT_ENA: u1,
    -            /// reg_duty_chng_end_lsch5_int_ena.
    -            DUTY_CHNG_END_LSCH5_INT_ENA: u1,
    -            /// reg_ovf_cnt_lsch0_int_ena.
    -            OVF_CNT_LSCH0_INT_ENA: u1,
    -            /// reg_ovf_cnt_lsch1_int_ena.
    -            OVF_CNT_LSCH1_INT_ENA: u1,
    -            /// reg_ovf_cnt_lsch2_int_ena.
    -            OVF_CNT_LSCH2_INT_ENA: u1,
    -            /// reg_ovf_cnt_lsch3_int_ena.
    -            OVF_CNT_LSCH3_INT_ENA: u1,
    -            /// reg_ovf_cnt_lsch4_int_ena.
    -            OVF_CNT_LSCH4_INT_ENA: u1,
    -            /// reg_ovf_cnt_lsch5_int_ena.
    -            OVF_CNT_LSCH5_INT_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0xc8);
    -
    -        /// address: 0x600190cc
    -        /// LEDC_INT_CLR.
    -        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_lstimer0_ovf_int_clr.
    -            LSTIMER0_OVF_INT_CLR: u1,
    -            /// reg_lstimer1_ovf_int_clr.
    -            LSTIMER1_OVF_INT_CLR: u1,
    -            /// reg_lstimer2_ovf_int_clr.
    -            LSTIMER2_OVF_INT_CLR: u1,
    -            /// reg_lstimer3_ovf_int_clr.
    -            LSTIMER3_OVF_INT_CLR: u1,
    -            /// reg_duty_chng_end_lsch0_int_clr.
    -            DUTY_CHNG_END_LSCH0_INT_CLR: u1,
    -            /// reg_duty_chng_end_lsch1_int_clr.
    -            DUTY_CHNG_END_LSCH1_INT_CLR: u1,
    -            /// reg_duty_chng_end_lsch2_int_clr.
    -            DUTY_CHNG_END_LSCH2_INT_CLR: u1,
    -            /// reg_duty_chng_end_lsch3_int_clr.
    -            DUTY_CHNG_END_LSCH3_INT_CLR: u1,
    -            /// reg_duty_chng_end_lsch4_int_clr.
    -            DUTY_CHNG_END_LSCH4_INT_CLR: u1,
    -            /// reg_duty_chng_end_lsch5_int_clr.
    -            DUTY_CHNG_END_LSCH5_INT_CLR: u1,
    -            /// reg_ovf_cnt_lsch0_int_clr.
    -            OVF_CNT_LSCH0_INT_CLR: u1,
    -            /// reg_ovf_cnt_lsch1_int_clr.
    -            OVF_CNT_LSCH1_INT_CLR: u1,
    -            /// reg_ovf_cnt_lsch2_int_clr.
    -            OVF_CNT_LSCH2_INT_CLR: u1,
    -            /// reg_ovf_cnt_lsch3_int_clr.
    -            OVF_CNT_LSCH3_INT_CLR: u1,
    -            /// reg_ovf_cnt_lsch4_int_clr.
    -            OVF_CNT_LSCH4_INT_CLR: u1,
    -            /// reg_ovf_cnt_lsch5_int_clr.
    -            OVF_CNT_LSCH5_INT_CLR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0xcc);
    -
    -        /// address: 0x600190d0
    -        /// LEDC_CONF.
    -        pub const CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_apb_clk_sel.
    -            APB_CLK_SEL: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            reserved23: u1,
    -            reserved24: u1,
    -            reserved25: u1,
    -            reserved26: u1,
    -            reserved27: u1,
    -            reserved28: u1,
    -            /// reg_clk_en.
    -            CLK_EN: u1,
    -        }), base_address + 0xd0);
    -
    -        /// address: 0x600190fc
    -        /// LEDC_DATE.
    -        pub const DATE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_ledc_date.
    -            LEDC_DATE: u32,
    -        }), base_address + 0xfc);
    -    };
    -
    -    /// Remote Control Peripheral
    -    pub const RMT = struct {
    -        pub const base_address = 0x60016000;
    -
    -        /// address: 0x60016000
    -        /// RMT_CH0DATA_REG.
    -        pub const CH0DATA = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Reserved.
    -            DATA: u32,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x60016004
    -        /// RMT_CH1DATA_REG.
    -        pub const CH1DATA = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Reserved.
    -            DATA: u32,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x60016008
    -        /// RMT_CH2DATA_REG.
    -        pub const CH2DATA = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Reserved.
    -            DATA: u32,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x6001600c
    -        /// RMT_CH3DATA_REG.
    -        pub const CH3DATA = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Reserved.
    -            DATA: u32,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x60016010
    -        /// RMT_CH%sCONF%s_REG.
    -        pub const CH0_TX_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_tx_start_ch0.
    -            TX_START: u1,
    -            /// reg_mem_rd_rst_ch0.
    -            MEM_RD_RST: u1,
    -            /// reg_apb_mem_rst_ch0.
    -            APB_MEM_RST: u1,
    -            /// reg_tx_conti_mode_ch0.
    -            TX_CONTI_MODE: u1,
    -            /// reg_mem_tx_wrap_en_ch0.
    -            MEM_TX_WRAP_EN: u1,
    -            /// reg_idle_out_lv_ch0.
    -            IDLE_OUT_LV: u1,
    -            /// reg_idle_out_en_ch0.
    -            IDLE_OUT_EN: u1,
    -            /// reg_tx_stop_ch0.
    -            TX_STOP: u1,
    -            /// reg_div_cnt_ch0.
    -            DIV_CNT: u8,
    -            /// reg_mem_size_ch0.
    -            MEM_SIZE: u3,
    -            reserved0: u1,
    -            /// reg_carrier_eff_en_ch0.
    -            CARRIER_EFF_EN: u1,
    -            /// reg_carrier_en_ch0.
    -            CARRIER_EN: u1,
    -            /// reg_carrier_out_lv_ch0.
    -            CARRIER_OUT_LV: u1,
    -            /// reg_afifo_rst_ch0.
    -            AFIFO_RST: u1,
    -            /// reg_reg_conf_update_ch0.
    -            CONF_UPDATE: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x60016014
    -        /// RMT_CH%sCONF%s_REG.
    -        pub const CH1_TX_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_tx_start_ch0.
    -            TX_START: u1,
    -            /// reg_mem_rd_rst_ch0.
    -            MEM_RD_RST: u1,
    -            /// reg_apb_mem_rst_ch0.
    -            APB_MEM_RST: u1,
    -            /// reg_tx_conti_mode_ch0.
    -            TX_CONTI_MODE: u1,
    -            /// reg_mem_tx_wrap_en_ch0.
    -            MEM_TX_WRAP_EN: u1,
    -            /// reg_idle_out_lv_ch0.
    -            IDLE_OUT_LV: u1,
    -            /// reg_idle_out_en_ch0.
    -            IDLE_OUT_EN: u1,
    -            /// reg_tx_stop_ch0.
    -            TX_STOP: u1,
    -            /// reg_div_cnt_ch0.
    -            DIV_CNT: u8,
    -            /// reg_mem_size_ch0.
    -            MEM_SIZE: u3,
    -            reserved0: u1,
    -            /// reg_carrier_eff_en_ch0.
    -            CARRIER_EFF_EN: u1,
    -            /// reg_carrier_en_ch0.
    -            CARRIER_EN: u1,
    -            /// reg_carrier_out_lv_ch0.
    -            CARRIER_OUT_LV: u1,
    -            /// reg_afifo_rst_ch0.
    -            AFIFO_RST: u1,
    -            /// reg_reg_conf_update_ch0.
    -            CONF_UPDATE: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x60016018
    -        /// RMT_CH2CONF0_REG.
    -        pub const CH2_RX_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_div_cnt_ch2.
    -            DIV_CNT: u8,
    -            /// reg_idle_thres_ch2.
    -            IDLE_THRES: u15,
    -            /// reg_mem_size_ch2.
    -            MEM_SIZE: u3,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// reg_carrier_en_ch2.
    -            CARRIER_EN: u1,
    -            /// reg_carrier_out_lv_ch2.
    -            CARRIER_OUT_LV: u1,
    -            padding0: u1,
    -            padding1: u1,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x60016020
    -        /// RMT_CH2CONF0_REG.
    -        pub const CH3_RX_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_div_cnt_ch2.
    -            DIV_CNT: u8,
    -            /// reg_idle_thres_ch2.
    -            IDLE_THRES: u15,
    -            /// reg_mem_size_ch2.
    -            MEM_SIZE: u3,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// reg_carrier_en_ch2.
    -            CARRIER_EN: u1,
    -            /// reg_carrier_out_lv_ch2.
    -            CARRIER_OUT_LV: u1,
    -            padding0: u1,
    -            padding1: u1,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x6001601c
    -        /// RMT_CH2CONF1_REG.
    -        pub const CH2CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_rx_en_ch2.
    -            RX_EN: u1,
    -            /// reg_mem_wr_rst_ch2.
    -            MEM_WR_RST: u1,
    -            /// reg_apb_mem_rst_ch2.
    -            APB_MEM_RST: u1,
    -            /// reg_mem_owner_ch2.
    -            MEM_OWNER: u1,
    -            /// reg_rx_filter_en_ch2.
    -            RX_FILTER_EN: u1,
    -            /// reg_rx_filter_thres_ch2.
    -            RX_FILTER_THRES: u8,
    -            /// reg_mem_rx_wrap_en_ch2.
    -            MEM_RX_WRAP_EN: u1,
    -            /// reg_afifo_rst_ch2.
    -            AFIFO_RST: u1,
    -            /// reg_conf_update_ch2.
    -            CONF_UPDATE: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x60016024
    -        /// RMT_CH3CONF1_REG.
    -        pub const CH3CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_rx_en_ch3.
    -            RX_EN: u1,
    -            /// reg_mem_wr_rst_ch3.
    -            MEM_WR_RST: u1,
    -            /// reg_apb_mem_rst_ch3.
    -            APB_MEM_RST: u1,
    -            /// reg_mem_owner_ch3.
    -            MEM_OWNER: u1,
    -            /// reg_rx_filter_en_ch3.
    -            RX_FILTER_EN: u1,
    -            /// reg_rx_filter_thres_ch3.
    -            RX_FILTER_THRES: u8,
    -            /// reg_mem_rx_wrap_en_ch3.
    -            MEM_RX_WRAP_EN: u1,
    -            /// reg_afifo_rst_ch3.
    -            AFIFO_RST: u1,
    -            /// reg_conf_update_ch3.
    -            CONF_UPDATE: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x60016028
    -        /// RMT_CH0STATUS_REG.
    -        pub const CH0STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_mem_raddr_ex_ch0.
    -            MEM_RADDR_EX: u9,
    -            /// reg_state_ch0.
    -            STATE: u3,
    -            /// reg_apb_mem_waddr_ch0.
    -            APB_MEM_WADDR: u9,
    -            /// reg_apb_mem_rd_err_ch0.
    -            APB_MEM_RD_ERR: u1,
    -            /// reg_mem_empty_ch0.
    -            MEM_EMPTY: u1,
    -            /// reg_apb_mem_wr_err_ch0.
    -            APB_MEM_WR_ERR: u1,
    -            /// reg_apb_mem_raddr_ch0.
    -            APB_MEM_RADDR: u8,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x6001602c
    -        /// RMT_CH1STATUS_REG.
    -        pub const CH1STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_mem_raddr_ex_ch1.
    -            MEM_RADDR_EX: u9,
    -            /// reg_state_ch1.
    -            STATE: u3,
    -            /// reg_apb_mem_waddr_ch1.
    -            APB_MEM_WADDR: u9,
    -            /// reg_apb_mem_rd_err_ch1.
    -            APB_MEM_RD_ERR: u1,
    -            /// reg_mem_empty_ch1.
    -            MEM_EMPTY: u1,
    -            /// reg_apb_mem_wr_err_ch1.
    -            APB_MEM_WR_ERR: u1,
    -            /// reg_apb_mem_raddr_ch1.
    -            APB_MEM_RADDR: u8,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x60016030
    -        /// RMT_CH2STATUS_REG.
    -        pub const CH2STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_mem_waddr_ex_ch2.
    -            MEM_WADDR_EX: u9,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            /// reg_apb_mem_raddr_ch2.
    -            APB_MEM_RADDR: u9,
    -            reserved3: u1,
    -            /// reg_state_ch2.
    -            STATE: u3,
    -            /// reg_mem_owner_err_ch2.
    -            MEM_OWNER_ERR: u1,
    -            /// reg_mem_full_ch2.
    -            MEM_FULL: u1,
    -            /// reg_apb_mem_rd_err_ch2.
    -            APB_MEM_RD_ERR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x60016034
    -        /// RMT_CH3STATUS_REG.
    -        pub const CH3STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_mem_waddr_ex_ch3.
    -            MEM_WADDR_EX: u9,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            /// reg_apb_mem_raddr_ch3.
    -            APB_MEM_RADDR: u9,
    -            reserved3: u1,
    -            /// reg_state_ch3.
    -            STATE: u3,
    -            /// reg_mem_owner_err_ch3.
    -            MEM_OWNER_ERR: u1,
    -            /// reg_mem_full_ch3.
    -            MEM_FULL: u1,
    -            /// reg_apb_mem_rd_err_ch3.
    -            APB_MEM_RD_ERR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x60016038
    -        /// RMT_INT_RAW_REG.
    -        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    -            CH0_TX_END_INT_RAW: u1,
    -            CH1_TX_END_INT_RAW: u1,
    -            CH2_RX_END_INT_RAW: u1,
    -            CH3_RX_END_INT_RAW: u1,
    -            CH0_TX_ERR_INT_RAW: u1,
    -            CH1_TX_ERR_INT_RAW: u1,
    -            CH2_RX_ERR_INT_RAW: u1,
    -            CH3_RX_ERR_INT_RAW: u1,
    -            CH0_TX_THR_EVENT_INT_RAW: u1,
    -            CH1_TX_THR_EVENT_INT_RAW: u1,
    -            /// reg_ch2_rx_thr_event_int_raw.
    -            CH2_RX_THR_EVENT_INT_RAW: u1,
    -            /// reg_ch3_rx_thr_event_int_raw.
    -            CH3_RX_THR_EVENT_INT_RAW: u1,
    -            CH0_TX_LOOP_INT_RAW: u1,
    -            CH1_TX_LOOP_INT_RAW: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x6001603c
    -        /// RMT_INT_ST_REG.
    -        pub const INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            CH0_TX_END_INT_ST: u1,
    -            CH1_TX_END_INT_ST: u1,
    -            CH2_RX_END_INT_ST: u1,
    -            CH3_RX_END_INT_ST: u1,
    -            CH0_TX_ERR_INT_ST: u1,
    -            CH1_TX_ERR_INT_ST: u1,
    -            CH2_RX_ERR_INT_ST: u1,
    -            CH3_RX_ERR_INT_ST: u1,
    -            CH0_TX_THR_EVENT_INT_ST: u1,
    -            CH1_TX_THR_EVENT_INT_ST: u1,
    -            /// reg_ch2_rx_thr_event_int_st.
    -            CH2_RX_THR_EVENT_INT_ST: u1,
    -            /// reg_ch3_rx_thr_event_int_st.
    -            CH3_RX_THR_EVENT_INT_ST: u1,
    -            CH0_TX_LOOP_INT_ST: u1,
    -            CH1_TX_LOOP_INT_ST: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x60016040
    -        /// RMT_INT_ENA_REG.
    -        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    -            CH0_TX_END_INT_ENA: u1,
    -            CH1_TX_END_INT_ENA: u1,
    -            CH2_RX_END_INT_ENA: u1,
    -            CH3_RX_END_INT_ENA: u1,
    -            CH0_TX_ERR_INT_ENA: u1,
    -            CH1_TX_ERR_INT_ENA: u1,
    -            CH2_RX_ERR_INT_ENA: u1,
    -            CH3_RX_ERR_INT_ENA: u1,
    -            CH0_TX_THR_EVENT_INT_ENA: u1,
    -            CH1_TX_THR_EVENT_INT_ENA: u1,
    -            /// reg_ch2_rx_thr_event_int_ena.
    -            CH2_RX_THR_EVENT_INT_ENA: u1,
    -            /// reg_ch3_rx_thr_event_int_ena.
    -            CH3_RX_THR_EVENT_INT_ENA: u1,
    -            CH0_TX_LOOP_INT_ENA: u1,
    -            CH1_TX_LOOP_INT_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x60016044
    -        /// RMT_INT_CLR_REG.
    -        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            CH0_TX_END_INT_CLR: u1,
    -            CH1_TX_END_INT_CLR: u1,
    -            CH2_RX_END_INT_CLR: u1,
    -            CH3_RX_END_INT_CLR: u1,
    -            CH0_TX_ERR_INT_CLR: u1,
    -            CH1_TX_ERR_INT_CLR: u1,
    -            CH2_RX_ERR_INT_CLR: u1,
    -            CH3_RX_ERR_INT_CLR: u1,
    -            CH0_TX_THR_EVENT_INT_CLR: u1,
    -            CH1_TX_THR_EVENT_INT_CLR: u1,
    -            /// reg_ch2_rx_thr_event_int_clr.
    -            CH2_RX_THR_EVENT_INT_CLR: u1,
    -            /// reg_ch3_rx_thr_event_int_clr.
    -            CH3_RX_THR_EVENT_INT_CLR: u1,
    -            CH0_TX_LOOP_INT_CLR: u1,
    -            CH1_TX_LOOP_INT_CLR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x60016048
    -        /// RMT_CH0CARRIER_DUTY_REG.
    -        pub const CH0CARRIER_DUTY = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_carrier_low_ch0.
    -            CARRIER_LOW: u16,
    -            /// reg_carrier_high_ch0.
    -            CARRIER_HIGH: u16,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x6001604c
    -        /// RMT_CH1CARRIER_DUTY_REG.
    -        pub const CH1CARRIER_DUTY = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_carrier_low_ch1.
    -            CARRIER_LOW: u16,
    -            /// reg_carrier_high_ch1.
    -            CARRIER_HIGH: u16,
    -        }), base_address + 0x4c);
    -
    -        /// address: 0x60016050
    -        /// RMT_CH2_RX_CARRIER_RM_REG.
    -        pub const CH2_RX_CARRIER_RM = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_carrier_low_thres_ch2.
    -            CARRIER_LOW_THRES: u16,
    -            /// reg_carrier_high_thres_ch2.
    -            CARRIER_HIGH_THRES: u16,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x60016054
    -        /// RMT_CH3_RX_CARRIER_RM_REG.
    -        pub const CH3_RX_CARRIER_RM = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_carrier_low_thres_ch3.
    -            CARRIER_LOW_THRES: u16,
    -            /// reg_carrier_high_thres_ch3.
    -            CARRIER_HIGH_THRES: u16,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x60016058
    -        /// RMT_CH%s_TX_LIM_REG.
    -        pub const CH0_TX_LIM = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_rmt_tx_lim_ch0.
    -            TX_LIM: u9,
    -            /// reg_rmt_tx_loop_num_ch0.
    -            TX_LOOP_NUM: u10,
    -            /// reg_rmt_tx_loop_cnt_en_ch0.
    -            TX_LOOP_CNT_EN: u1,
    -            /// reg_loop_count_reset_ch0.
    -            LOOP_COUNT_RESET: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x6001605c
    -        /// RMT_CH%s_TX_LIM_REG.
    -        pub const CH1_TX_LIM = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_rmt_tx_lim_ch0.
    -            TX_LIM: u9,
    -            /// reg_rmt_tx_loop_num_ch0.
    -            TX_LOOP_NUM: u10,
    -            /// reg_rmt_tx_loop_cnt_en_ch0.
    -            TX_LOOP_CNT_EN: u1,
    -            /// reg_loop_count_reset_ch0.
    -            LOOP_COUNT_RESET: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x60016060
    -        /// RMT_CH2_RX_LIM_REG.
    -        pub const CH2_RX_LIM = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_rmt_rx_lim_ch2.
    -            RX_LIM: u9,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x60016064
    -        /// RMT_CH2_RX_LIM_REG.
    -        pub const CH3_RX_LIM = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_rmt_rx_lim_ch2.
    -            RX_LIM: u9,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x60016068
    -        /// RMT_SYS_CONF_REG.
    -        pub const SYS_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_apb_fifo_mask.
    -            APB_FIFO_MASK: u1,
    -            /// reg_mem_clk_force_on.
    -            MEM_CLK_FORCE_ON: u1,
    -            /// reg_rmt_mem_force_pd.
    -            MEM_FORCE_PD: u1,
    -            /// reg_rmt_mem_force_pu.
    -            MEM_FORCE_PU: u1,
    -            /// reg_rmt_sclk_div_num.
    -            SCLK_DIV_NUM: u8,
    -            /// reg_rmt_sclk_div_a.
    -            SCLK_DIV_A: u6,
    -            /// reg_rmt_sclk_div_b.
    -            SCLK_DIV_B: u6,
    -            /// reg_rmt_sclk_sel.
    -            SCLK_SEL: u2,
    -            /// reg_rmt_sclk_active.
    -            SCLK_ACTIVE: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            /// reg_clk_en.
    -            CLK_EN: u1,
    -        }), base_address + 0x68);
    -
    -        /// address: 0x6001606c
    -        /// RMT_TX_SIM_REG.
    -        pub const TX_SIM = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_rmt_tx_sim_ch0.
    -            TX_SIM_CH0: u1,
    -            /// reg_rmt_tx_sim_ch1.
    -            TX_SIM_CH1: u1,
    -            /// reg_rmt_tx_sim_en.
    -            TX_SIM_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -        }), base_address + 0x6c);
    -
    -        /// address: 0x60016070
    -        /// RMT_REF_CNT_RST_REG.
    -        pub const REF_CNT_RST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_ref_cnt_rst_ch0.
    -            CH0: u1,
    -            /// reg_ref_cnt_rst_ch1.
    -            CH1: u1,
    -            /// reg_ref_cnt_rst_ch2.
    -            CH2: u1,
    -            /// reg_ref_cnt_rst_ch3.
    -            CH3: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x70);
    -
    -        /// address: 0x600160cc
    -        /// RMT_DATE_REG.
    -        pub const DATE = @intToPtr(*volatile MmioInt(32, u28), base_address + 0xcc);
    -    };
    -
    -    /// Hardware random number generator
    -    pub const RNG = struct {
    -        pub const base_address = 0x60026000;
    -
    -        /// address: 0x600260b0
    -        /// Random number data
    -        pub const DATA = @intToPtr(*volatile u32, base_address + 0xb0);
    -    };
    -
    -    /// RSA (Rivest Shamir Adleman) Accelerator
    -    pub const RSA = struct {
    -        pub const base_address = 0x6003c000;
    -
    -        /// address: 0x6003c000
    -        /// The memory that stores M
    -        pub const M_MEM = @intToPtr(*volatile [16]u8, base_address + 0x0);
    -
    -        /// address: 0x6003c200
    -        /// The memory that stores Z
    -        pub const Z_MEM = @intToPtr(*volatile [16]u8, base_address + 0x200);
    -
    -        /// address: 0x6003c400
    -        /// The memory that stores Y
    -        pub const Y_MEM = @intToPtr(*volatile [16]u8, base_address + 0x400);
    -
    -        /// address: 0x6003c600
    -        /// The memory that stores X
    -        pub const X_MEM = @intToPtr(*volatile [16]u8, base_address + 0x600);
    -
    -        /// address: 0x6003c800
    -        /// RSA M_prime register
    -        pub const M_PRIME = @intToPtr(*volatile u32, base_address + 0x800);
    -
    -        /// address: 0x6003c804
    -        /// RSA mode register
    -        pub const MODE = @intToPtr(*volatile MmioInt(32, u7), base_address + 0x804);
    -
    -        /// address: 0x6003c808
    -        /// RSA query clean register
    -        pub const QUERY_CLEAN = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x808);
    -
    -        /// address: 0x6003c80c
    -        /// RSA modular exponentiation trigger register.
    -        pub const SET_START_MODEXP = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x80c);
    -
    -        /// address: 0x6003c810
    -        /// RSA modular multiplication trigger register.
    -        pub const SET_START_MODMULT = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x810);
    -
    -        /// address: 0x6003c814
    -        /// RSA normal multiplication trigger register.
    -        pub const SET_START_MULT = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x814);
    -
    -        /// address: 0x6003c818
    -        /// RSA query idle register
    -        pub const QUERY_IDLE = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x818);
    -
    -        /// address: 0x6003c81c
    -        /// RSA interrupt clear register
    -        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// set this bit to clear RSA interrupt.
    -            CLEAR_INTERRUPT: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x81c);
    -
    -        /// address: 0x6003c820
    -        /// RSA constant time option register
    -        pub const CONSTANT_TIME = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x820);
    -
    -        /// address: 0x6003c824
    -        /// RSA search option
    -        pub const SEARCH_ENABLE = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x824);
    -
    -        /// address: 0x6003c828
    -        /// RSA search position configure register
    -        pub const SEARCH_POS = @intToPtr(*volatile MmioInt(32, u12), base_address + 0x828);
    -
    -        /// address: 0x6003c82c
    -        /// RSA interrupt enable register
    -        pub const INT_ENA = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x82c);
    -
    -        /// address: 0x6003c830
    -        /// RSA version control register
    -        pub const DATE = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x830);
    -    };
    -
    -    /// Real-Time Clock Control
    -    pub const RTC_CNTL = struct {
    -        pub const base_address = 0x60008000;
    -
    -        /// address: 0x60008000
    -        /// rtc configure register
    -        pub const OPTIONS0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// {reg_sw_stall_appcpu_c1[5:0], reg_sw_stall_appcpu_c0[1:0]} == 0x86 will stall
    -            /// APP CPU
    -            SW_STALL_APPCPU_C0: u2,
    -            /// {reg_sw_stall_procpu_c1[5:0], reg_sw_stall_procpu_c0[1:0]} == 0x86 will stall
    -            /// PRO CPU
    -            SW_STALL_PROCPU_C0: u2,
    -            /// APP CPU SW reset
    -            SW_APPCPU_RST: u1,
    -            /// PRO CPU SW reset
    -            SW_PROCPU_RST: u1,
    -            /// BB_I2C force power down
    -            BB_I2C_FORCE_PD: u1,
    -            /// BB_I2C force power up
    -            BB_I2C_FORCE_PU: u1,
    -            /// BB_PLL _I2C force power down
    -            BBPLL_I2C_FORCE_PD: u1,
    -            /// BB_PLL_I2C force power up
    -            BBPLL_I2C_FORCE_PU: u1,
    -            /// BB_PLL force power down
    -            BBPLL_FORCE_PD: u1,
    -            /// BB_PLL force power up
    -            BBPLL_FORCE_PU: u1,
    -            /// crystall force power down
    -            XTL_FORCE_PD: u1,
    -            /// crystall force power up
    -            XTL_FORCE_PU: u1,
    -            /// wait bias_sleep and current source wakeup
    -            XTL_EN_WAIT: u4,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// analog configure
    -            XTL_EXT_CTR_SEL: u3,
    -            /// analog configure
    -            XTL_FORCE_ISO: u1,
    -            /// analog configure
    -            PLL_FORCE_ISO: u1,
    -            /// analog configure
    -            ANALOG_FORCE_ISO: u1,
    -            /// analog configure
    -            XTL_FORCE_NOISO: u1,
    -            /// analog configure
    -            PLL_FORCE_NOISO: u1,
    -            /// analog configure
    -            ANALOG_FORCE_NOISO: u1,
    -            /// digital wrap force reset in deep sleep
    -            DG_WRAP_FORCE_RST: u1,
    -            /// digital core force no reset in deep sleep
    -            DG_WRAP_FORCE_NORST: u1,
    -            /// SW system reset
    -            SW_SYS_RST: u1,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x60008004
    -        /// rtc configure register
    -        pub const SLP_TIMER0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// configure the sleep time
    -            SLP_VAL_LO: u32,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x60008008
    -        /// rtc configure register
    -        pub const SLP_TIMER1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// RTC sleep timer high 16 bits
    -            SLP_VAL_HI: u16,
    -            /// timer alarm enable bit
    -            RTC_MAIN_TIMER_ALARM_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x6000800c
    -        /// rtc configure register
    -        pub const TIME_UPDATE = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            reserved23: u1,
    -            reserved24: u1,
    -            reserved25: u1,
    -            reserved26: u1,
    -            /// Enable to record system stall time
    -            TIMER_SYS_STALL: u1,
    -            /// Enable to record 40M XTAL OFF time
    -            TIMER_XTL_OFF: u1,
    -            /// enable to record system reset time
    -            TIMER_SYS_RST: u1,
    -            reserved27: u1,
    -            /// Set 1: to update register with RTC timer
    -            RTC_TIME_UPDATE: u1,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x60008010
    -        /// rtc configure register
    -        pub const TIME_LOW0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// RTC timer low 32 bits
    -            RTC_TIMER_VALUE0_LOW: u32,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x60008014
    -        /// rtc configure register
    -        pub const TIME_HIGH0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// RTC timer high 16 bits
    -            RTC_TIMER_VALUE0_HIGH: u16,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x60008018
    -        /// rtc configure register
    -        pub const STATE0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// rtc software interrupt to main cpu
    -            RTC_SW_CPU_INT: u1,
    -            /// clear rtc sleep reject cause
    -            RTC_SLP_REJECT_CAUSE_CLR: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            /// 1: APB to RTC using bridge
    -            APB2RTC_BRIDGE_SEL: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            reserved23: u1,
    -            reserved24: u1,
    -            /// SDIO active indication
    -            SDIO_ACTIVE_IND: u1,
    -            /// leep wakeup bit
    -            SLP_WAKEUP: u1,
    -            /// leep reject bit
    -            SLP_REJECT: u1,
    -            /// sleep enable bit
    -            SLEEP_EN: u1,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x6000801c
    -        /// rtc configure register
    -        pub const TIMER1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// CPU stall enable bit
    -            CPU_STALL_EN: u1,
    -            /// CPU stall wait cycles in fast_clk_rtc
    -            CPU_STALL_WAIT: u5,
    -            /// CK8M wait cycles in slow_clk_rtc
    -            CK8M_WAIT: u8,
    -            /// XTAL wait cycles in slow_clk_rtc
    -            XTL_BUF_WAIT: u10,
    -            /// PLL wait cycles in slow_clk_rtc
    -            PLL_BUF_WAIT: u8,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x60008020
    -        /// rtc configure register
    -        pub const TIMER2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            reserved23: u1,
    -            /// minimal cycles in slow_clk_rtc for CK8M in power down state
    -            MIN_TIME_CK8M_OFF: u8,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x60008024
    -        /// rtc configure register
    -        pub const TIMER3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// wifi power domain wakeup time
    -            WIFI_WAIT_TIMER: u9,
    -            /// wifi power domain power on time
    -            WIFI_POWERUP_TIMER: u7,
    -            /// bt power domain wakeup time
    -            BT_WAIT_TIMER: u9,
    -            /// bt power domain power on time
    -            BT_POWERUP_TIMER: u7,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x60008028
    -        /// rtc configure register
    -        pub const TIMER4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// cpu top power domain wakeup time
    -            CPU_TOP_WAIT_TIMER: u9,
    -            /// cpu top power domain power on time
    -            CPU_TOP_POWERUP_TIMER: u7,
    -            /// digital wrap power domain wakeup time
    -            DG_WRAP_WAIT_TIMER: u9,
    -            /// digital wrap power domain power on time
    -            DG_WRAP_POWERUP_TIMER: u7,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x6000802c
    -        /// rtc configure register
    -        pub const TIMER5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            /// minimal sleep cycles in slow_clk_rtc
    -            MIN_SLP_VAL: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x60008030
    -        /// rtc configure register
    -        pub const TIMER6 = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            /// digital peri power domain wakeup time
    -            DG_PERI_WAIT_TIMER: u9,
    -            /// digital peri power domain power on time
    -            DG_PERI_POWERUP_TIMER: u7,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x60008034
    -        /// rtc configure register
    -        pub const ANA_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            /// force no bypass i2c power on reset
    -            RESET_POR_FORCE_PD: u1,
    -            /// force bypass i2c power on reset
    -            RESET_POR_FORCE_PU: u1,
    -            /// enable glitch reset
    -            GLITCH_RST_EN: u1,
    -            reserved18: u1,
    -            /// PLLA force power up
    -            SAR_I2C_PU: u1,
    -            /// PLLA force power down
    -            PLLA_FORCE_PD: u1,
    -            /// PLLA force power up
    -            PLLA_FORCE_PU: u1,
    -            /// start BBPLL calibration during sleep
    -            BBPLL_CAL_SLP_START: u1,
    -            /// 1: PVTMON power up
    -            PVTMON_PU: u1,
    -            /// 1: TXRF_I2C power up
    -            TXRF_I2C_PU: u1,
    -            /// 1: RFRX_PBUS power up
    -            RFRX_PBUS_PU: u1,
    -            reserved19: u1,
    -            /// 1: CKGEN_I2C power up
    -            CKGEN_I2C_PU: u1,
    -            /// power up pll i2c
    -            PLL_I2C_PU: u1,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x60008038
    -        /// rtc configure register
    -        pub const RESET_STATE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reset cause of PRO CPU
    -            RESET_CAUSE_PROCPU: u6,
    -            /// reset cause of APP CPU
    -            RESET_CAUSE_APPCPU: u6,
    -            /// APP CPU state vector sel
    -            STAT_VECTOR_SEL_APPCPU: u1,
    -            /// PRO CPU state vector sel
    -            STAT_VECTOR_SEL_PROCPU: u1,
    -            /// PRO CPU reset_flag
    -            ALL_RESET_FLAG_PROCPU: u1,
    -            /// APP CPU reset flag
    -            ALL_RESET_FLAG_APPCPU: u1,
    -            /// clear PRO CPU reset_flag
    -            ALL_RESET_FLAG_CLR_PROCPU: u1,
    -            /// clear APP CPU reset flag
    -            ALL_RESET_FLAG_CLR_APPCPU: u1,
    -            /// APPCPU OcdHaltOnReset
    -            OCD_HALT_ON_RESET_APPCPU: u1,
    -            /// PROCPU OcdHaltOnReset
    -            OCD_HALT_ON_RESET_PROCPU: u1,
    -            /// configure jtag reset configure
    -            JTAG_RESET_FLAG_PROCPU: u1,
    -            /// configure jtag reset configure
    -            JTAG_RESET_FLAG_APPCPU: u1,
    -            /// configure jtag reset configure
    -            JTAG_RESET_FLAG_CLR_PROCPU: u1,
    -            /// configure jtag reset configure
    -            JTAG_RESET_FLAG_CLR_APPCPU: u1,
    -            /// configure dreset configure
    -            RTC_DRESET_MASK_APPCPU: u1,
    -            /// configure dreset configure
    -            RTC_DRESET_MASK_PROCPU: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x6000803c
    -        /// rtc configure register
    -        pub const WAKEUP_STATE = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            /// wakeup enable bitmap
    -            RTC_WAKEUP_ENA: u17,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x60008040
    -        /// rtc configure register
    -        pub const INT_ENA_RTC = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// enable sleep wakeup interrupt
    -            SLP_WAKEUP_INT_ENA: u1,
    -            /// enable sleep reject interrupt
    -            SLP_REJECT_INT_ENA: u1,
    -            reserved0: u1,
    -            /// enable RTC WDT interrupt
    -            RTC_WDT_INT_ENA: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            /// enable brown out interrupt
    -            RTC_BROWN_OUT_INT_ENA: u1,
    -            /// enable RTC main timer interrupt
    -            RTC_MAIN_TIMER_INT_ENA: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            /// enable super watch dog interrupt
    -            RTC_SWD_INT_ENA: u1,
    -            /// enable xtal32k_dead interrupt
    -            RTC_XTAL32K_DEAD_INT_ENA: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            /// enbale gitch det interrupt
    -            RTC_GLITCH_DET_INT_ENA: u1,
    -            /// enbale bbpll cal end interrupt
    -            RTC_BBPLL_CAL_INT_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x60008044
    -        /// rtc configure register
    -        pub const INT_RAW_RTC = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// sleep wakeup interrupt raw
    -            SLP_WAKEUP_INT_RAW: u1,
    -            /// sleep reject interrupt raw
    -            SLP_REJECT_INT_RAW: u1,
    -            reserved0: u1,
    -            /// RTC WDT interrupt raw
    -            RTC_WDT_INT_RAW: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            /// brown out interrupt raw
    -            RTC_BROWN_OUT_INT_RAW: u1,
    -            /// RTC main timer interrupt raw
    -            RTC_MAIN_TIMER_INT_RAW: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            /// super watch dog interrupt raw
    -            RTC_SWD_INT_RAW: u1,
    -            /// xtal32k dead detection interrupt raw
    -            RTC_XTAL32K_DEAD_INT_RAW: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            /// glitch_det_interrupt_raw
    -            RTC_GLITCH_DET_INT_RAW: u1,
    -            /// bbpll cal end interrupt state
    -            RTC_BBPLL_CAL_INT_RAW: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x60008048
    -        /// rtc configure register
    -        pub const INT_ST_RTC = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// sleep wakeup interrupt state
    -            SLP_WAKEUP_INT_ST: u1,
    -            /// sleep reject interrupt state
    -            SLP_REJECT_INT_ST: u1,
    -            reserved0: u1,
    -            /// RTC WDT interrupt state
    -            RTC_WDT_INT_ST: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            /// brown out interrupt state
    -            RTC_BROWN_OUT_INT_ST: u1,
    -            /// RTC main timer interrupt state
    -            RTC_MAIN_TIMER_INT_ST: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            /// super watch dog interrupt state
    -            RTC_SWD_INT_ST: u1,
    -            /// xtal32k dead detection interrupt state
    -            RTC_XTAL32K_DEAD_INT_ST: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            /// glitch_det_interrupt state
    -            RTC_GLITCH_DET_INT_ST: u1,
    -            /// bbpll cal end interrupt state
    -            RTC_BBPLL_CAL_INT_ST: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x6000804c
    -        /// rtc configure register
    -        pub const INT_CLR_RTC = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Clear sleep wakeup interrupt state
    -            SLP_WAKEUP_INT_CLR: u1,
    -            /// Clear sleep reject interrupt state
    -            SLP_REJECT_INT_CLR: u1,
    -            reserved0: u1,
    -            /// Clear RTC WDT interrupt state
    -            RTC_WDT_INT_CLR: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            /// Clear brown out interrupt state
    -            RTC_BROWN_OUT_INT_CLR: u1,
    -            /// Clear RTC main timer interrupt state
    -            RTC_MAIN_TIMER_INT_CLR: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            /// Clear super watch dog interrupt state
    -            RTC_SWD_INT_CLR: u1,
    -            /// Clear RTC WDT interrupt state
    -            RTC_XTAL32K_DEAD_INT_CLR: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            /// Clear glitch det interrupt state
    -            RTC_GLITCH_DET_INT_CLR: u1,
    -            /// clear bbpll cal end interrupt state
    -            RTC_BBPLL_CAL_INT_CLR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -        }), base_address + 0x4c);
    -
    -        /// address: 0x60008050
    -        /// rtc configure register
    -        pub const STORE0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reserved register
    -            RTC_SCRATCH0: u32,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x60008054
    -        /// rtc configure register
    -        pub const STORE1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reserved register
    -            RTC_SCRATCH1: u32,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x60008058
    -        /// rtc configure register
    -        pub const STORE2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reserved register
    -            RTC_SCRATCH2: u32,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x6000805c
    -        /// rtc configure register
    -        pub const STORE3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reserved register
    -            RTC_SCRATCH3: u32,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x60008060
    -        /// rtc configure register
    -        pub const EXT_XTL_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// xtal 32k watch dog enable
    -            XTAL32K_WDT_EN: u1,
    -            /// xtal 32k watch dog clock force on
    -            XTAL32K_WDT_CLK_FO: u1,
    -            /// xtal 32k watch dog sw reset
    -            XTAL32K_WDT_RESET: u1,
    -            /// xtal 32k external xtal clock force on
    -            XTAL32K_EXT_CLK_FO: u1,
    -            /// xtal 32k switch to back up clock when xtal is dead
    -            XTAL32K_AUTO_BACKUP: u1,
    -            /// xtal 32k restart xtal when xtal is dead
    -            XTAL32K_AUTO_RESTART: u1,
    -            /// xtal 32k switch back xtal when xtal is restarted
    -            XTAL32K_AUTO_RETURN: u1,
    -            /// Xtal 32k xpd control by sw or fsm
    -            XTAL32K_XPD_FORCE: u1,
    -            /// apply an internal clock to help xtal 32k to start
    -            ENCKINIT_XTAL_32K: u1,
    -            /// 0: single-end buffer 1: differential buffer
    -            DBUF_XTAL_32K: u1,
    -            /// xtal_32k gm control
    -            DGM_XTAL_32K: u3,
    -            /// DRES_XTAL_32K
    -            DRES_XTAL_32K: u3,
    -            /// XPD_XTAL_32K
    -            XPD_XTAL_32K: u1,
    -            /// DAC_XTAL_32K
    -            DAC_XTAL_32K: u3,
    -            /// state of 32k_wdt
    -            RTC_WDT_STATE: u3,
    -            /// XTAL_32K sel. 0: external XTAL_32K
    -            RTC_XTAL32K_GPIO_SEL: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            /// 0: power down XTAL at high level
    -            XTL_EXT_CTR_LV: u1,
    -            /// enable gpio configure xtal power on
    -            XTL_EXT_CTR_EN: u1,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x60008064
    -        /// rtc configure register
    -        pub const EXT_WAKEUP_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            reserved23: u1,
    -            reserved24: u1,
    -            reserved25: u1,
    -            reserved26: u1,
    -            reserved27: u1,
    -            reserved28: u1,
    -            reserved29: u1,
    -            reserved30: u1,
    -            /// enable filter for gpio wakeup event
    -            GPIO_WAKEUP_FILTER: u1,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x60008068
    -        /// rtc configure register
    -        pub const SLP_REJECT_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            /// sleep reject enable
    -            RTC_SLEEP_REJECT_ENA: u18,
    -            /// enable reject for light sleep
    -            LIGHT_SLP_REJECT_EN: u1,
    -            /// enable reject for deep sleep
    -            DEEP_SLP_REJECT_EN: u1,
    -        }), base_address + 0x68);
    -
    -        /// address: 0x6000806c
    -        /// rtc configure register
    -        pub const CPU_PERIOD_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            reserved23: u1,
    -            reserved24: u1,
    -            reserved25: u1,
    -            reserved26: u1,
    -            reserved27: u1,
    -            reserved28: u1,
    -            /// CPU sel option
    -            RTC_CPUSEL_CONF: u1,
    -            /// CPU clk sel option
    -            RTC_CPUPERIOD_SEL: u2,
    -        }), base_address + 0x6c);
    -
    -        /// address: 0x60008070
    -        /// rtc configure register
    -        pub const CLK_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            /// efuse_clk_force_gating
    -            EFUSE_CLK_FORCE_GATING: u1,
    -            /// efuse_clk_force_nogating
    -            EFUSE_CLK_FORCE_NOGATING: u1,
    -            /// used to sync reg_ck8m_div_sel bus. Clear vld before set reg_ck8m_div_sel
    -            CK8M_DIV_SEL_VLD: u1,
    -            /// CK8M_D256_OUT divider. 00: div128
    -            CK8M_DIV: u2,
    -            /// disable CK8M and CK8M_D256_OUT
    -            ENB_CK8M: u1,
    -            /// 1: CK8M_D256_OUT is actually CK8M
    -            ENB_CK8M_DIV: u1,
    -            /// enable CK_XTAL_32K for digital core (no relationship with RTC core)
    -            DIG_XTAL32K_EN: u1,
    -            /// enable CK8M_D256_OUT for digital core (no relationship with RTC core)
    -            DIG_CLK8M_D256_EN: u1,
    -            /// enable CK8M for digital core (no relationship with RTC core)
    -            DIG_CLK8M_EN: u1,
    -            reserved1: u1,
    -            /// divider = reg_ck8m_div_sel + 1
    -            CK8M_DIV_SEL: u3,
    -            /// XTAL force no gating during sleep
    -            XTAL_FORCE_NOGATING: u1,
    -            /// CK8M force no gating during sleep
    -            CK8M_FORCE_NOGATING: u1,
    -            /// CK8M_DFREQ
    -            CK8M_DFREQ: u8,
    -            /// CK8M force power down
    -            CK8M_FORCE_PD: u1,
    -            /// CK8M force power up
    -            CK8M_FORCE_PU: u1,
    -            /// force enable xtal clk gating
    -            XTAL_GLOBAL_FORCE_GATING: u1,
    -            /// force bypass xtal clk gating
    -            XTAL_GLOBAL_FORCE_NOGATING: u1,
    -            /// fast_clk_rtc sel. 0: XTAL div 4
    -            FAST_CLK_RTC_SEL: u1,
    -            /// slelect rtc slow clk
    -            ANA_CLK_RTC_SEL: u2,
    -        }), base_address + 0x70);
    -
    -        /// address: 0x60008074
    -        /// rtc configure register
    -        pub const SLOW_CLK_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            /// used to sync div bus. clear vld before set reg_rtc_ana_clk_div
    -            RTC_ANA_CLK_DIV_VLD: u1,
    -            /// the clk divider num of RTC_CLK
    -            RTC_ANA_CLK_DIV: u8,
    -            /// flag rtc_slow_clk_next_edge
    -            RTC_SLOW_CLK_NEXT_EDGE: u1,
    -        }), base_address + 0x74);
    -
    -        /// address: 0x60008078
    -        /// rtc configure register
    -        pub const SDIO_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// timer count to apply reg_sdio_dcap after sdio power on
    -            SDIO_TIMER_TARGET: u8,
    -            reserved0: u1,
    -            /// Tieh = 1 mode drive ability. Initially set to 0 to limit charge current
    -            SDIO_DTHDRV: u2,
    -            /// ability to prevent LDO from overshoot
    -            SDIO_DCAP: u2,
    -            /// add resistor from ldo output to ground. 0: no res
    -            SDIO_INITI: u2,
    -            /// 0 to set init[1:0]=0
    -            SDIO_EN_INITI: u1,
    -            /// tune current limit threshold when tieh = 0. About 800mA/(8+d)
    -            SDIO_DCURLIM: u3,
    -            /// select current limit mode
    -            SDIO_MODECURLIM: u1,
    -            /// enable current limit
    -            SDIO_ENCURLIM: u1,
    -            /// power down SDIO_REG in sleep. Only active when reg_sdio_force = 0
    -            SDIO_REG_PD_EN: u1,
    -            /// 1: use SW option to control SDIO_REG
    -            SDIO_FORCE: u1,
    -            /// SW option for SDIO_TIEH. Only active when reg_sdio_force = 1
    -            SDIO_TIEH: u1,
    -            /// read only register for REG1P8_READY
    -            _1P8_READY: u1,
    -            /// SW option for DREFL_SDIO. Only active when reg_sdio_force = 1
    -            DREFL_SDIO: u2,
    -            /// SW option for DREFM_SDIO. Only active when reg_sdio_force = 1
    -            DREFM_SDIO: u2,
    -            /// SW option for DREFH_SDIO. Only active when reg_sdio_force = 1
    -            DREFH_SDIO: u2,
    -            XPD_SDIO: u1,
    -        }), base_address + 0x78);
    -
    -        /// address: 0x6000807c
    -        /// rtc configure register
    -        pub const BIAS_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            DG_VDD_DRV_B_SLP: u8,
    -            DG_VDD_DRV_B_SLP_EN: u1,
    -            reserved0: u1,
    -            /// bias buf when rtc in normal work state
    -            BIAS_BUF_IDLE: u1,
    -            /// bias buf when rtc in wakeup state
    -            BIAS_BUF_WAKE: u1,
    -            /// bias buf when rtc in sleep state
    -            BIAS_BUF_DEEP_SLP: u1,
    -            /// bias buf when rtc in monitor state
    -            BIAS_BUF_MONITOR: u1,
    -            /// xpd cur when rtc in sleep_state
    -            PD_CUR_DEEP_SLP: u1,
    -            /// xpd cur when rtc in monitor state
    -            PD_CUR_MONITOR: u1,
    -            /// bias_sleep when rtc in sleep_state
    -            BIAS_SLEEP_DEEP_SLP: u1,
    -            /// bias_sleep when rtc in monitor state
    -            BIAS_SLEEP_MONITOR: u1,
    -            /// DBG_ATTEN when rtc in sleep state
    -            DBG_ATTEN_DEEP_SLP: u4,
    -            /// DBG_ATTEN when rtc in monitor state
    -            DBG_ATTEN_MONITOR: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -        }), base_address + 0x7c);
    -
    -        /// address: 0x60008080
    -        /// rtc configure register
    -        pub const RTC_CNTL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            /// software enable digital regulator cali
    -            DIG_REG_CAL_EN: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            /// SCK_DCAP
    -            SCK_DCAP: u8,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            /// RTC_DBOOST force power down
    -            DBOOST_FORCE_PD: u1,
    -            /// RTC_DBOOST force power up
    -            DBOOST_FORCE_PU: u1,
    -            /// RTC_REG force power down (for RTC_REG power down means decrease the voltage to
    -            /// 0.8v or lower )
    -            REGULATOR_FORCE_PD: u1,
    -            /// RTC_REG force power up
    -            REGULATOR_FORCE_PU: u1,
    -        }), base_address + 0x80);
    -
    -        /// address: 0x60008084
    -        /// rtc configure register
    -        pub const PWC = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            /// rtc pad force hold
    -            RTC_PAD_FORCE_HOLD: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -        }), base_address + 0x84);
    -
    -        /// address: 0x60008088
    -        /// rtc configure register
    -        pub const DIG_PWC = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// vdd_spi drv's software value
    -            VDD_SPI_PWR_DRV: u2,
    -            /// vdd_spi drv use software value
    -            VDD_SPI_PWR_FORCE: u1,
    -            /// memories in digital core force PD in sleep
    -            LSLP_MEM_FORCE_PD: u1,
    -            /// memories in digital core force PU in sleep
    -            LSLP_MEM_FORCE_PU: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            /// bt force power down
    -            BT_FORCE_PD: u1,
    -            /// bt force power up
    -            BT_FORCE_PU: u1,
    -            /// digital peri force power down
    -            DG_PERI_FORCE_PD: u1,
    -            /// digital peri force power up
    -            DG_PERI_FORCE_PU: u1,
    -            /// fastmemory retention mode in sleep
    -            RTC_FASTMEM_FORCE_LPD: u1,
    -            /// fastmemory donlt entry retention mode in sleep
    -            RTC_FASTMEM_FORCE_LPU: u1,
    -            /// wifi force power down
    -            WIFI_FORCE_PD: u1,
    -            /// wifi force power up
    -            WIFI_FORCE_PU: u1,
    -            /// digital core force power down
    -            DG_WRAP_FORCE_PD: u1,
    -            /// digital core force power up
    -            DG_WRAP_FORCE_PU: u1,
    -            /// cpu core force power down
    -            CPU_TOP_FORCE_PD: u1,
    -            /// cpu force power up
    -            CPU_TOP_FORCE_PU: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            /// enable power down bt in sleep
    -            BT_PD_EN: u1,
    -            /// enable power down digital peri in sleep
    -            DG_PERI_PD_EN: u1,
    -            /// enable power down cpu in sleep
    -            CPU_TOP_PD_EN: u1,
    -            /// enable power down wifi in sleep
    -            WIFI_PD_EN: u1,
    -            /// enable power down digital wrap in sleep
    -            DG_WRAP_PD_EN: u1,
    -        }), base_address + 0x88);
    -
    -        /// address: 0x6000808c
    -        /// rtc configure register
    -        pub const DIG_ISO = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            /// DIG_ISO force off
    -            FORCE_OFF: u1,
    -            /// DIG_ISO force on
    -            FORCE_ON: u1,
    -            /// read only register to indicate digital pad auto-hold status
    -            DG_PAD_AUTOHOLD: u1,
    -            /// wtite only register to clear digital pad auto-hold
    -            CLR_DG_PAD_AUTOHOLD: u1,
    -            /// digital pad enable auto-hold
    -            DG_PAD_AUTOHOLD_EN: u1,
    -            /// digital pad force no ISO
    -            DG_PAD_FORCE_NOISO: u1,
    -            /// digital pad force ISO
    -            DG_PAD_FORCE_ISO: u1,
    -            /// digital pad force un-hold
    -            DG_PAD_FORCE_UNHOLD: u1,
    -            /// digital pad force hold
    -            DG_PAD_FORCE_HOLD: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            /// bt force ISO
    -            BT_FORCE_ISO: u1,
    -            /// bt force no ISO
    -            BT_FORCE_NOISO: u1,
    -            /// Digital peri force ISO
    -            DG_PERI_FORCE_ISO: u1,
    -            /// digital peri force no ISO
    -            DG_PERI_FORCE_NOISO: u1,
    -            /// cpu force ISO
    -            CPU_TOP_FORCE_ISO: u1,
    -            /// cpu force no ISO
    -            CPU_TOP_FORCE_NOISO: u1,
    -            /// wifi force ISO
    -            WIFI_FORCE_ISO: u1,
    -            /// wifi force no ISO
    -            WIFI_FORCE_NOISO: u1,
    -            /// digital core force ISO
    -            DG_WRAP_FORCE_ISO: u1,
    -            /// digital core force no ISO
    -            DG_WRAP_FORCE_NOISO: u1,
    -        }), base_address + 0x8c);
    -
    -        /// address: 0x60008090
    -        /// rtc configure register
    -        pub const WDTCONFIG0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// chip reset siginal pulse width
    -            WDT_CHIP_RESET_WIDTH: u8,
    -            /// wdt reset whole chip enable
    -            WDT_CHIP_RESET_EN: u1,
    -            /// pause WDT in sleep
    -            WDT_PAUSE_IN_SLP: u1,
    -            /// enable WDT reset APP CPU
    -            WDT_APPCPU_RESET_EN: u1,
    -            /// enable WDT reset PRO CPU
    -            WDT_PROCPU_RESET_EN: u1,
    -            /// enable WDT in flash boot
    -            WDT_FLASHBOOT_MOD_EN: u1,
    -            /// system reset counter length
    -            WDT_SYS_RESET_LENGTH: u3,
    -            /// CPU reset counter length
    -            WDT_CPU_RESET_LENGTH: u3,
    -            /// 1: interrupt stage en
    -            WDT_STG3: u3,
    -            /// 1: interrupt stage en
    -            WDT_STG2: u3,
    -            /// 1: interrupt stage en
    -            WDT_STG1: u3,
    -            /// 1: interrupt stage en
    -            WDT_STG0: u3,
    -            /// enable rtc wdt
    -            WDT_EN: u1,
    -        }), base_address + 0x90);
    -
    -        /// address: 0x60008094
    -        /// rtc configure register
    -        pub const WDTCONFIG1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// the hold time of stage0
    -            WDT_STG0_HOLD: u32,
    -        }), base_address + 0x94);
    -
    -        /// address: 0x60008098
    -        /// rtc configure register
    -        pub const WDTCONFIG2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// the hold time of stage1
    -            WDT_STG1_HOLD: u32,
    -        }), base_address + 0x98);
    -
    -        /// address: 0x6000809c
    -        /// rtc configure register
    -        pub const WDTCONFIG3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// the hold time of stage2
    -            WDT_STG2_HOLD: u32,
    -        }), base_address + 0x9c);
    -
    -        /// address: 0x600080a0
    -        /// rtc configure register
    -        pub const WDTCONFIG4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// the hold time of stage3
    -            WDT_STG3_HOLD: u32,
    -        }), base_address + 0xa0);
    -
    -        /// address: 0x600080a4
    -        /// rtc configure register
    -        pub const WDTFEED = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            reserved23: u1,
    -            reserved24: u1,
    -            reserved25: u1,
    -            reserved26: u1,
    -            reserved27: u1,
    -            reserved28: u1,
    -            reserved29: u1,
    -            reserved30: u1,
    -            /// sw feed rtc wdt
    -            RTC_WDT_FEED: u1,
    -        }), base_address + 0xa4);
    -
    -        /// address: 0x600080a8
    -        /// rtc configure register
    -        pub const WDTWPROTECT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// the key of rtc wdt
    -            WDT_WKEY: u32,
    -        }), base_address + 0xa8);
    -
    -        /// address: 0x600080ac
    -        /// rtc configure register
    -        pub const SWD_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// swd reset flag
    -            SWD_RESET_FLAG: u1,
    -            /// swd interrupt for feeding
    -            SWD_FEED_INT: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            /// Bypass swd rst
    -            SWD_BYPASS_RST: u1,
    -            /// adjust signal width send to swd
    -            SWD_SIGNAL_WIDTH: u10,
    -            /// reset swd reset flag
    -            SWD_RST_FLAG_CLR: u1,
    -            /// Sw feed swd
    -            SWD_FEED: u1,
    -            /// disabel SWD
    -            SWD_DISABLE: u1,
    -            /// automatically feed swd when int comes
    -            SWD_AUTO_FEED_EN: u1,
    -        }), base_address + 0xac);
    -
    -        /// address: 0x600080b0
    -        /// rtc configure register
    -        pub const SWD_WPROTECT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// the key of super wdt
    -            SWD_WKEY: u32,
    -        }), base_address + 0xb0);
    -
    -        /// address: 0x600080b4
    -        /// rtc configure register
    -        pub const SW_CPU_STALL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            /// {reg_sw_stall_appcpu_c1[5:0]
    -            SW_STALL_APPCPU_C1: u6,
    -            /// stall cpu by software
    -            SW_STALL_PROCPU_C1: u6,
    -        }), base_address + 0xb4);
    -
    -        /// address: 0x600080b8
    -        /// rtc configure register
    -        pub const STORE4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reserved register
    -            RTC_SCRATCH4: u32,
    -        }), base_address + 0xb8);
    -
    -        /// address: 0x600080bc
    -        /// rtc configure register
    -        pub const STORE5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reserved register
    -            RTC_SCRATCH5: u32,
    -        }), base_address + 0xbc);
    -
    -        /// address: 0x600080c0
    -        /// rtc configure register
    -        pub const STORE6 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reserved register
    -            RTC_SCRATCH6: u32,
    -        }), base_address + 0xc0);
    -
    -        /// address: 0x600080c4
    -        /// rtc configure register
    -        pub const STORE7 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reserved register
    -            RTC_SCRATCH7: u32,
    -        }), base_address + 0xc4);
    -
    -        /// address: 0x600080c8
    -        /// rtc configure register
    -        pub const LOW_POWER_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// rom0 power down
    -            XPD_ROM0: u1,
    -            reserved0: u1,
    -            /// External DCDC power down
    -            XPD_DIG_DCDC: u1,
    -            /// rtc peripheral iso
    -            RTC_PERI_ISO: u1,
    -            /// rtc peripheral power down
    -            XPD_RTC_PERI: u1,
    -            /// wifi iso
    -            WIFI_ISO: u1,
    -            /// wifi wrap power down
    -            XPD_WIFI: u1,
    -            /// digital wrap iso
    -            DIG_ISO: u1,
    -            /// digital wrap power down
    -            XPD_DIG: u1,
    -            /// touch should start to work
    -            RTC_TOUCH_STATE_START: u1,
    -            /// touch is about to working. Switch rtc main state
    -            RTC_TOUCH_STATE_SWITCH: u1,
    -            /// touch is in sleep state
    -            RTC_TOUCH_STATE_SLP: u1,
    -            /// touch is done
    -            RTC_TOUCH_STATE_DONE: u1,
    -            /// ulp/cocpu should start to work
    -            RTC_COCPU_STATE_START: u1,
    -            /// ulp/cocpu is about to working. Switch rtc main state
    -            RTC_COCPU_STATE_SWITCH: u1,
    -            /// ulp/cocpu is in sleep state
    -            RTC_COCPU_STATE_SLP: u1,
    -            /// ulp/cocpu is done
    -            RTC_COCPU_STATE_DONE: u1,
    -            /// no use any more
    -            RTC_MAIN_STATE_XTAL_ISO: u1,
    -            /// rtc main state machine is in states that pll should be running
    -            RTC_MAIN_STATE_PLL_ON: u1,
    -            /// rtc is ready to receive wake up trigger from wake up source
    -            RTC_RDY_FOR_WAKEUP: u1,
    -            /// rtc main state machine has been waited for some cycles
    -            RTC_MAIN_STATE_WAIT_END: u1,
    -            /// rtc main state machine is in the states of wakeup process
    -            RTC_IN_WAKEUP_STATE: u1,
    -            /// rtc main state machine is in the states of low power
    -            RTC_IN_LOW_POWER_STATE: u1,
    -            /// rtc main state machine is in wait 8m state
    -            RTC_MAIN_STATE_IN_WAIT_8M: u1,
    -            /// rtc main state machine is in wait pll state
    -            RTC_MAIN_STATE_IN_WAIT_PLL: u1,
    -            /// rtc main state machine is in wait xtal state
    -            RTC_MAIN_STATE_IN_WAIT_XTL: u1,
    -            /// rtc main state machine is in sleep state
    -            RTC_MAIN_STATE_IN_SLP: u1,
    -            /// rtc main state machine is in idle state
    -            RTC_MAIN_STATE_IN_IDLE: u1,
    -            /// rtc main state machine status
    -            RTC_MAIN_STATE: u4,
    -        }), base_address + 0xc8);
    -
    -        /// address: 0x600080cc
    -        /// rtc configure register
    -        pub const DIAG0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            RTC_LOW_POWER_DIAG1: u32,
    -        }), base_address + 0xcc);
    -
    -        /// address: 0x600080d0
    -        /// rtc configure register
    -        pub const PAD_HOLD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// the hold configure of rtc gpio0
    -            RTC_GPIO_PIN0_HOLD: u1,
    -            /// the hold configure of rtc gpio1
    -            RTC_GPIO_PIN1_HOLD: u1,
    -            /// the hold configure of rtc gpio2
    -            RTC_GPIO_PIN2_HOLD: u1,
    -            /// the hold configure of rtc gpio3
    -            RTC_GPIO_PIN3_HOLD: u1,
    -            /// the hold configure of rtc gpio4
    -            RTC_GPIO_PIN4_HOLD: u1,
    -            /// the hold configure of rtc gpio5
    -            RTC_GPIO_PIN5_HOLD: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -        }), base_address + 0xd0);
    -
    -        /// address: 0x600080d4
    -        /// rtc configure register
    -        pub const DIG_PAD_HOLD = @intToPtr(*volatile u32, base_address + 0xd4);
    -
    -        /// address: 0x600080d8
    -        /// rtc configure register
    -        pub const BROWN_OUT = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            /// brown out interrupt wait cycles
    -            INT_WAIT: u10,
    -            /// enable close flash when brown out happens
    -            CLOSE_FLASH_ENA: u1,
    -            /// enable power down RF when brown out happens
    -            PD_RF_ENA: u1,
    -            /// brown out reset wait cycles
    -            RST_WAIT: u10,
    -            /// enable brown out reset
    -            RST_ENA: u1,
    -            /// 1: 4-pos reset
    -            RST_SEL: u1,
    -            /// brown_out origin reset enable
    -            ANA_RST_EN: u1,
    -            /// clear brown out counter
    -            CNT_CLR: u1,
    -            /// enable brown out
    -            ENA: u1,
    -            /// the flag of brown det from analog
    -            DET: u1,
    -        }), base_address + 0xd8);
    -
    -        /// address: 0x600080dc
    -        /// rtc configure register
    -        pub const TIME_LOW1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// RTC timer low 32 bits
    -            RTC_TIMER_VALUE1_LOW: u32,
    -        }), base_address + 0xdc);
    -
    -        /// address: 0x600080e0
    -        /// rtc configure register
    -        pub const TIME_HIGH1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// RTC timer high 16 bits
    -            RTC_TIMER_VALUE1_HIGH: u16,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0xe0);
    -
    -        /// address: 0x600080e4
    -        /// rtc configure register
    -        pub const XTAL32K_CLK_FACTOR = @intToPtr(*volatile u32, base_address + 0xe4);
    -
    -        /// address: 0x600080e8
    -        /// rtc configure register
    -        pub const XTAL32K_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// cycles to wait to return noral xtal 32k
    -            XTAL32K_RETURN_WAIT: u4,
    -            /// cycles to wait to repower on xtal 32k
    -            XTAL32K_RESTART_WAIT: u16,
    -            /// If no clock detected for this amount of time
    -            XTAL32K_WDT_TIMEOUT: u8,
    -            /// if restarted xtal32k period is smaller than this
    -            XTAL32K_STABLE_THRES: u4,
    -        }), base_address + 0xe8);
    -
    -        /// address: 0x600080ec
    -        /// rtc configure register
    -        pub const USB_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            /// disable io_mux reset
    -            IO_MUX_RESET_DISABLE: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -        }), base_address + 0xec);
    -
    -        /// address: 0x600080f0
    -        /// RTC_CNTL_RTC_SLP_REJECT_CAUSE_REG
    -        pub const SLP_REJECT_CAUSE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// sleep reject cause
    -            REJECT_CAUSE: u18,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0xf0);
    -
    -        /// address: 0x600080f4
    -        /// rtc configure register
    -        pub const OPTION1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// force chip entry download mode
    -            FORCE_DOWNLOAD_BOOT: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0xf4);
    -
    -        /// address: 0x600080f8
    -        /// RTC_CNTL_RTC_SLP_WAKEUP_CAUSE_REG
    -        pub const SLP_WAKEUP_CAUSE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// sleep wakeup cause
    -            WAKEUP_CAUSE: u17,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -        }), base_address + 0xf8);
    -
    -        /// address: 0x600080fc
    -        /// rtc configure register
    -        pub const ULP_CP_TIMER_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            /// sleep cycles for ULP-coprocessor timer
    -            ULP_CP_TIMER_SLP_CYCLE: u24,
    -        }), base_address + 0xfc);
    -
    -        /// address: 0x60008100
    -        /// rtc configure register
    -        pub const INT_ENA_RTC_W1TS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// enable sleep wakeup interrupt
    -            SLP_WAKEUP_INT_ENA_W1TS: u1,
    -            /// enable sleep reject interrupt
    -            SLP_REJECT_INT_ENA_W1TS: u1,
    -            reserved0: u1,
    -            /// enable RTC WDT interrupt
    -            RTC_WDT_INT_ENA_W1TS: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            /// enable brown out interrupt
    -            RTC_BROWN_OUT_INT_ENA_W1TS: u1,
    -            /// enable RTC main timer interrupt
    -            RTC_MAIN_TIMER_INT_ENA_W1TS: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            /// enable super watch dog interrupt
    -            RTC_SWD_INT_ENA_W1TS: u1,
    -            /// enable xtal32k_dead interrupt
    -            RTC_XTAL32K_DEAD_INT_ENA_W1TS: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            /// enbale gitch det interrupt
    -            RTC_GLITCH_DET_INT_ENA_W1TS: u1,
    -            /// enbale bbpll cal interrupt
    -            RTC_BBPLL_CAL_INT_ENA_W1TS: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -        }), base_address + 0x100);
    -
    -        /// address: 0x60008104
    -        /// rtc configure register
    -        pub const INT_ENA_RTC_W1TC = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// clear sleep wakeup interrupt enable
    -            SLP_WAKEUP_INT_ENA_W1TC: u1,
    -            /// clear sleep reject interrupt enable
    -            SLP_REJECT_INT_ENA_W1TC: u1,
    -            reserved0: u1,
    -            /// clear RTC WDT interrupt enable
    -            RTC_WDT_INT_ENA_W1TC: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            /// clear brown out interrupt enable
    -            RTC_BROWN_OUT_INT_ENA_W1TC: u1,
    -            /// Clear RTC main timer interrupt enable
    -            RTC_MAIN_TIMER_INT_ENA_W1TC: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            /// clear super watch dog interrupt enable
    -            RTC_SWD_INT_ENA_W1TC: u1,
    -            /// clear xtal32k_dead interrupt enable
    -            RTC_XTAL32K_DEAD_INT_ENA_W1TC: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            /// clear gitch det interrupt enable
    -            RTC_GLITCH_DET_INT_ENA_W1TC: u1,
    -            /// clear bbpll cal interrupt enable
    -            RTC_BBPLL_CAL_INT_ENA_W1TC: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -        }), base_address + 0x104);
    -
    -        /// address: 0x60008108
    -        /// rtc configure register
    -        pub const RETENTION_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            /// Retention clk sel
    -            RETENTION_CLK_SEL: u1,
    -            /// Retention done wait time
    -            RETENTION_DONE_WAIT: u3,
    -            /// Retention clkoff wait time
    -            RETENTION_CLKOFF_WAIT: u4,
    -            /// enable cpu retention when light sleep
    -            RETENTION_EN: u1,
    -            /// wait cycles for rention operation
    -            RETENTION_WAIT: u5,
    -        }), base_address + 0x108);
    -
    -        /// address: 0x6000810c
    -        /// rtc configure register
    -        pub const FIB_SEL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// select use analog fib signal
    -            RTC_FIB_SEL: u3,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -        }), base_address + 0x10c);
    -
    -        /// address: 0x60008110
    -        /// rtc configure register
    -        pub const GPIO_WAKEUP = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// rtc gpio wakeup flag
    -            RTC_GPIO_WAKEUP_STATUS: u6,
    -            /// clear rtc gpio wakeup flag
    -            RTC_GPIO_WAKEUP_STATUS_CLR: u1,
    -            /// enable rtc io clk gate
    -            RTC_GPIO_PIN_CLK_GATE: u1,
    -            /// configure gpio wakeup type
    -            RTC_GPIO_PIN5_INT_TYPE: u3,
    -            /// configure gpio wakeup type
    -            RTC_GPIO_PIN4_INT_TYPE: u3,
    -            /// configure gpio wakeup type
    -            RTC_GPIO_PIN3_INT_TYPE: u3,
    -            /// configure gpio wakeup type
    -            RTC_GPIO_PIN2_INT_TYPE: u3,
    -            /// configure gpio wakeup type
    -            RTC_GPIO_PIN1_INT_TYPE: u3,
    -            /// configure gpio wakeup type
    -            RTC_GPIO_PIN0_INT_TYPE: u3,
    -            /// enable wakeup from rtc gpio5
    -            RTC_GPIO_PIN5_WAKEUP_ENABLE: u1,
    -            /// enable wakeup from rtc gpio4
    -            RTC_GPIO_PIN4_WAKEUP_ENABLE: u1,
    -            /// enable wakeup from rtc gpio3
    -            RTC_GPIO_PIN3_WAKEUP_ENABLE: u1,
    -            /// enable wakeup from rtc gpio2
    -            RTC_GPIO_PIN2_WAKEUP_ENABLE: u1,
    -            /// enable wakeup from rtc gpio1
    -            RTC_GPIO_PIN1_WAKEUP_ENABLE: u1,
    -            /// enable wakeup from rtc gpio0
    -            RTC_GPIO_PIN0_WAKEUP_ENABLE: u1,
    -        }), base_address + 0x110);
    -
    -        /// address: 0x60008114
    -        /// rtc configure register
    -        pub const DBG_SEL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            /// use for debug
    -            RTC_DEBUG_12M_NO_GATING: u1,
    -            /// use for debug
    -            RTC_DEBUG_BIT_SEL: u5,
    -            /// use for debug
    -            RTC_DEBUG_SEL0: u5,
    -            /// use for debug
    -            RTC_DEBUG_SEL1: u5,
    -            /// use for debug
    -            RTC_DEBUG_SEL2: u5,
    -            /// use for debug
    -            RTC_DEBUG_SEL3: u5,
    -            /// use for debug
    -            RTC_DEBUG_SEL4: u5,
    -        }), base_address + 0x114);
    -
    -        /// address: 0x60008118
    -        /// rtc configure register
    -        pub const DBG_MAP = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// use for debug
    -            RTC_GPIO_PIN5_MUX_SEL: u1,
    -            /// use for debug
    -            RTC_GPIO_PIN4_MUX_SEL: u1,
    -            /// use for debug
    -            RTC_GPIO_PIN3_MUX_SEL: u1,
    -            /// use for debug
    -            RTC_GPIO_PIN2_MUX_SEL: u1,
    -            /// use for debug
    -            RTC_GPIO_PIN1_MUX_SEL: u1,
    -            /// use for debug
    -            RTC_GPIO_PIN0_MUX_SEL: u1,
    -            /// use for debug
    -            RTC_GPIO_PIN5_FUN_SEL: u4,
    -            /// use for debug
    -            RTC_GPIO_PIN4_FUN_SEL: u4,
    -            /// use for debug
    -            RTC_GPIO_PIN3_FUN_SEL: u4,
    -            /// use for debug
    -            RTC_GPIO_PIN2_FUN_SEL: u4,
    -            /// use for debug
    -            RTC_GPIO_PIN1_FUN_SEL: u4,
    -            /// use for debug
    -            RTC_GPIO_PIN0_FUN_SEL: u4,
    -        }), base_address + 0x118);
    -
    -        /// address: 0x6000811c
    -        /// rtc configure register
    -        pub const SENSOR_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            reserved23: u1,
    -            reserved24: u1,
    -            reserved25: u1,
    -            reserved26: u1,
    -            /// reg_sar2_pwdet_cct
    -            SAR2_PWDET_CCT: u3,
    -            /// force power up SAR
    -            FORCE_XPD_SAR: u2,
    -        }), base_address + 0x11c);
    -
    -        /// address: 0x60008120
    -        /// rtc configure register
    -        pub const DBG_SAR_SEL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            reserved23: u1,
    -            reserved24: u1,
    -            reserved25: u1,
    -            reserved26: u1,
    -            /// use for debug
    -            SAR_DEBUG_SEL: u5,
    -        }), base_address + 0x120);
    -
    -        /// address: 0x60008124
    -        /// rtc configure register
    -        pub const PG_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            reserved23: u1,
    -            reserved24: u1,
    -            reserved25: u1,
    -            /// power glitch desense
    -            POWER_GLITCH_DSENSE: u2,
    -            /// force disable power glitch
    -            POWER_GLITCH_FORCE_PD: u1,
    -            /// force enable power glitch
    -            POWER_GLITCH_FORCE_PU: u1,
    -            /// use efuse value control power glitch enable
    -            POWER_GLITCH_EFUSE_SEL: u1,
    -            /// enable power glitch
    -            POWER_GLITCH_EN: u1,
    -        }), base_address + 0x124);
    -
    -        /// address: 0x600081fc
    -        /// rtc configure register
    -        pub const DATE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// verision
    -            RTC_CNTL_DATE: u28,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -        }), base_address + 0x1fc);
    -    };
    -
    -    /// Sensitive
    -    pub const SENSITIVE = struct {
    -        pub const base_address = 0x600c1000;
    -
    -        /// address: 0x600c1000
    -        /// SENSITIVE_ROM_TABLE_LOCK_REG
    -        pub const ROM_TABLE_LOCK = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x0);
    -
    -        /// address: 0x600c1004
    -        /// SENSITIVE_ROM_TABLE_REG
    -        pub const ROM_TABLE = @intToPtr(*volatile u32, base_address + 0x4);
    -
    -        /// address: 0x600c1008
    -        /// SENSITIVE_PRIVILEGE_MODE_SEL_LOCK_REG
    -        pub const PRIVILEGE_MODE_SEL_LOCK = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x8);
    -
    -        /// address: 0x600c100c
    -        /// SENSITIVE_PRIVILEGE_MODE_SEL_REG
    -        pub const PRIVILEGE_MODE_SEL = @intToPtr(*volatile MmioInt(32, u1), base_address + 0xc);
    -
    -        /// address: 0x600c1010
    -        /// SENSITIVE_APB_PERIPHERAL_ACCESS_0_REG
    -        pub const APB_PERIPHERAL_ACCESS_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// apb_peripheral_access_lock
    -            APB_PERIPHERAL_ACCESS_LOCK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x600c1014
    -        /// SENSITIVE_APB_PERIPHERAL_ACCESS_1_REG
    -        pub const APB_PERIPHERAL_ACCESS_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// apb_peripheral_access_split_burst
    -            APB_PERIPHERAL_ACCESS_SPLIT_BURST: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x600c1018
    -        /// SENSITIVE_INTERNAL_SRAM_USAGE_0_REG
    -        pub const INTERNAL_SRAM_USAGE_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// internal_sram_usage_lock
    -            INTERNAL_SRAM_USAGE_LOCK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x600c101c
    -        /// SENSITIVE_INTERNAL_SRAM_USAGE_1_REG
    -        pub const INTERNAL_SRAM_USAGE_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// internal_sram_usage_cpu_cache
    -            INTERNAL_SRAM_USAGE_CPU_CACHE: u1,
    -            /// internal_sram_usage_cpu_sram
    -            INTERNAL_SRAM_USAGE_CPU_SRAM: u3,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x600c1020
    -        /// SENSITIVE_INTERNAL_SRAM_USAGE_3_REG
    -        pub const INTERNAL_SRAM_USAGE_3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// internal_sram_usage_mac_dump_sram
    -            INTERNAL_SRAM_USAGE_MAC_DUMP_SRAM: u3,
    -            /// internal_sram_alloc_mac_dump
    -            INTERNAL_SRAM_ALLOC_MAC_DUMP: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x600c1024
    -        /// SENSITIVE_INTERNAL_SRAM_USAGE_4_REG
    -        pub const INTERNAL_SRAM_USAGE_4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// internal_sram_usage_log_sram
    -            INTERNAL_SRAM_USAGE_LOG_SRAM: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x600c1028
    -        /// SENSITIVE_CACHE_TAG_ACCESS_0_REG
    -        pub const CACHE_TAG_ACCESS_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// cache_tag_access_lock
    -            CACHE_TAG_ACCESS_LOCK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x600c102c
    -        /// SENSITIVE_CACHE_TAG_ACCESS_1_REG
    -        pub const CACHE_TAG_ACCESS_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// pro_i_tag_rd_acs
    -            PRO_I_TAG_RD_ACS: u1,
    -            /// pro_i_tag_wr_acs
    -            PRO_I_TAG_WR_ACS: u1,
    -            /// pro_d_tag_rd_acs
    -            PRO_D_TAG_RD_ACS: u1,
    -            /// pro_d_tag_wr_acs
    -            PRO_D_TAG_WR_ACS: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x600c1030
    -        /// SENSITIVE_CACHE_MMU_ACCESS_0_REG
    -        pub const CACHE_MMU_ACCESS_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// cache_mmu_access_lock
    -            CACHE_MMU_ACCESS_LOCK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x600c1034
    -        /// SENSITIVE_CACHE_MMU_ACCESS_1_REG
    -        pub const CACHE_MMU_ACCESS_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// pro_mmu_rd_acs
    -            PRO_MMU_RD_ACS: u1,
    -            /// pro_mmu_wr_acs
    -            PRO_MMU_WR_ACS: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x600c1038
    -        /// SENSITIVE_DMA_APBPERI_SPI2_PMS_CONSTRAIN_0_REG
    -        pub const DMA_APBPERI_SPI2_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// dma_apbperi_spi2_pms_constrain_lock
    -            DMA_APBPERI_SPI2_PMS_CONSTRAIN_LOCK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x600c103c
    -        /// SENSITIVE_DMA_APBPERI_SPI2_PMS_CONSTRAIN_1_REG
    -        pub const DMA_APBPERI_SPI2_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// dma_apbperi_spi2_pms_constrain_sram_world_0_pms_0
    -            DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    -            /// dma_apbperi_spi2_pms_constrain_sram_world_0_pms_1
    -            DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    -            /// dma_apbperi_spi2_pms_constrain_sram_world_0_pms_2
    -            DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    -            /// dma_apbperi_spi2_pms_constrain_sram_world_0_pms_3
    -            DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            /// dma_apbperi_spi2_pms_constrain_sram_world_1_pms_0
    -            DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    -            /// dma_apbperi_spi2_pms_constrain_sram_world_1_pms_1
    -            DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    -            /// dma_apbperi_spi2_pms_constrain_sram_world_1_pms_2
    -            DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    -            /// dma_apbperi_spi2_pms_constrain_sram_world_1_pms_3
    -            DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x600c1040
    -        /// SENSITIVE_DMA_APBPERI_UCHI0_PMS_CONSTRAIN_0_REG
    -        pub const DMA_APBPERI_UCHI0_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// dma_apbperi_uchi0_pms_constrain_lock
    -            DMA_APBPERI_UCHI0_PMS_CONSTRAIN_LOCK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x600c1044
    -        /// SENSITIVE_DMA_APBPERI_UCHI0_PMS_CONSTRAIN_1_REG
    -        pub const DMA_APBPERI_UCHI0_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_0
    -            DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    -            /// dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_1
    -            DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    -            /// dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_2
    -            DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    -            /// dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_3
    -            DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            /// dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_0
    -            DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    -            /// dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_1
    -            DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    -            /// dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_2
    -            DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    -            /// dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_3
    -            DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x600c1048
    -        /// SENSITIVE_DMA_APBPERI_I2S0_PMS_CONSTRAIN_0_REG
    -        pub const DMA_APBPERI_I2S0_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// dma_apbperi_i2s0_pms_constrain_lock
    -            DMA_APBPERI_I2S0_PMS_CONSTRAIN_LOCK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x600c104c
    -        /// SENSITIVE_DMA_APBPERI_I2S0_PMS_CONSTRAIN_1_REG
    -        pub const DMA_APBPERI_I2S0_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_0
    -            DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    -            /// dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_1
    -            DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    -            /// dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_2
    -            DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    -            /// dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_3
    -            DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            /// dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_0
    -            DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    -            /// dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_1
    -            DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    -            /// dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_2
    -            DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    -            /// dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_3
    -            DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0x4c);
    -
    -        /// address: 0x600c1050
    -        /// SENSITIVE_DMA_APBPERI_MAC_PMS_CONSTRAIN_0_REG
    -        pub const DMA_APBPERI_MAC_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// dma_apbperi_mac_pms_constrain_lock
    -            DMA_APBPERI_MAC_PMS_CONSTRAIN_LOCK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x600c1054
    -        /// SENSITIVE_DMA_APBPERI_MAC_PMS_CONSTRAIN_1_REG
    -        pub const DMA_APBPERI_MAC_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// dma_apbperi_mac_pms_constrain_sram_world_0_pms_0
    -            DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    -            /// dma_apbperi_mac_pms_constrain_sram_world_0_pms_1
    -            DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    -            /// dma_apbperi_mac_pms_constrain_sram_world_0_pms_2
    -            DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    -            /// dma_apbperi_mac_pms_constrain_sram_world_0_pms_3
    -            DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            /// dma_apbperi_mac_pms_constrain_sram_world_1_pms_0
    -            DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    -            /// dma_apbperi_mac_pms_constrain_sram_world_1_pms_1
    -            DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    -            /// dma_apbperi_mac_pms_constrain_sram_world_1_pms_2
    -            DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    -            /// dma_apbperi_mac_pms_constrain_sram_world_1_pms_3
    -            DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x600c1058
    -        /// SENSITIVE_DMA_APBPERI_BACKUP_PMS_CONSTRAIN_0_REG
    -        pub const DMA_APBPERI_BACKUP_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// dma_apbperi_backup_pms_constrain_lock
    -            DMA_APBPERI_BACKUP_PMS_CONSTRAIN_LOCK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x600c105c
    -        /// SENSITIVE_DMA_APBPERI_BACKUP_PMS_CONSTRAIN_1_REG
    -        pub const DMA_APBPERI_BACKUP_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// dma_apbperi_backup_pms_constrain_sram_world_0_pms_0
    -            DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    -            /// dma_apbperi_backup_pms_constrain_sram_world_0_pms_1
    -            DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    -            /// dma_apbperi_backup_pms_constrain_sram_world_0_pms_2
    -            DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    -            /// dma_apbperi_backup_pms_constrain_sram_world_0_pms_3
    -            DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            /// dma_apbperi_backup_pms_constrain_sram_world_1_pms_0
    -            DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    -            /// dma_apbperi_backup_pms_constrain_sram_world_1_pms_1
    -            DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    -            /// dma_apbperi_backup_pms_constrain_sram_world_1_pms_2
    -            DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    -            /// dma_apbperi_backup_pms_constrain_sram_world_1_pms_3
    -            DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x600c1060
    -        /// SENSITIVE_DMA_APBPERI_LC_PMS_CONSTRAIN_0_REG
    -        pub const DMA_APBPERI_LC_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// dma_apbperi_lc_pms_constrain_lock
    -            DMA_APBPERI_LC_PMS_CONSTRAIN_LOCK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x600c1064
    -        /// SENSITIVE_DMA_APBPERI_LC_PMS_CONSTRAIN_1_REG
    -        pub const DMA_APBPERI_LC_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// dma_apbperi_lc_pms_constrain_sram_world_0_pms_0
    -            DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    -            /// dma_apbperi_lc_pms_constrain_sram_world_0_pms_1
    -            DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    -            /// dma_apbperi_lc_pms_constrain_sram_world_0_pms_2
    -            DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    -            /// dma_apbperi_lc_pms_constrain_sram_world_0_pms_3
    -            DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            /// dma_apbperi_lc_pms_constrain_sram_world_1_pms_0
    -            DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    -            /// dma_apbperi_lc_pms_constrain_sram_world_1_pms_1
    -            DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    -            /// dma_apbperi_lc_pms_constrain_sram_world_1_pms_2
    -            DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    -            /// dma_apbperi_lc_pms_constrain_sram_world_1_pms_3
    -            DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x600c1068
    -        /// SENSITIVE_DMA_APBPERI_AES_PMS_CONSTRAIN_0_REG
    -        pub const DMA_APBPERI_AES_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// dma_apbperi_aes_pms_constrain_lock
    -            DMA_APBPERI_AES_PMS_CONSTRAIN_LOCK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x68);
    -
    -        /// address: 0x600c106c
    -        /// SENSITIVE_DMA_APBPERI_AES_PMS_CONSTRAIN_1_REG
    -        pub const DMA_APBPERI_AES_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// dma_apbperi_aes_pms_constrain_sram_world_0_pms_0
    -            DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    -            /// dma_apbperi_aes_pms_constrain_sram_world_0_pms_1
    -            DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    -            /// dma_apbperi_aes_pms_constrain_sram_world_0_pms_2
    -            DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    -            /// dma_apbperi_aes_pms_constrain_sram_world_0_pms_3
    -            DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            /// dma_apbperi_aes_pms_constrain_sram_world_1_pms_0
    -            DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    -            /// dma_apbperi_aes_pms_constrain_sram_world_1_pms_1
    -            DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    -            /// dma_apbperi_aes_pms_constrain_sram_world_1_pms_2
    -            DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    -            /// dma_apbperi_aes_pms_constrain_sram_world_1_pms_3
    -            DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0x6c);
    -
    -        /// address: 0x600c1070
    -        /// SENSITIVE_DMA_APBPERI_SHA_PMS_CONSTRAIN_0_REG
    -        pub const DMA_APBPERI_SHA_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// dma_apbperi_sha_pms_constrain_lock
    -            DMA_APBPERI_SHA_PMS_CONSTRAIN_LOCK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x70);
    -
    -        /// address: 0x600c1074
    -        /// SENSITIVE_DMA_APBPERI_SHA_PMS_CONSTRAIN_1_REG
    -        pub const DMA_APBPERI_SHA_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// dma_apbperi_sha_pms_constrain_sram_world_0_pms_0
    -            DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    -            /// dma_apbperi_sha_pms_constrain_sram_world_0_pms_1
    -            DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    -            /// dma_apbperi_sha_pms_constrain_sram_world_0_pms_2
    -            DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    -            /// dma_apbperi_sha_pms_constrain_sram_world_0_pms_3
    -            DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            /// dma_apbperi_sha_pms_constrain_sram_world_1_pms_0
    -            DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    -            /// dma_apbperi_sha_pms_constrain_sram_world_1_pms_1
    -            DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    -            /// dma_apbperi_sha_pms_constrain_sram_world_1_pms_2
    -            DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    -            /// dma_apbperi_sha_pms_constrain_sram_world_1_pms_3
    -            DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0x74);
    -
    -        /// address: 0x600c1078
    -        /// SENSITIVE_DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_0_REG
    -        pub const DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// dma_apbperi_adc_dac_pms_constrain_lock
    -            DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_LOCK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x78);
    -
    -        /// address: 0x600c107c
    -        /// SENSITIVE_DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_1_REG
    -        pub const DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_0
    -            DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    -            /// dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_1
    -            DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    -            /// dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_2
    -            DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    -            /// dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_3
    -            DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            /// dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_0
    -            DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    -            /// dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_1
    -            DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    -            /// dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_2
    -            DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    -            /// dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_3
    -            DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0x7c);
    -
    -        /// address: 0x600c1080
    -        /// SENSITIVE_DMA_APBPERI_PMS_MONITOR_0_REG
    -        pub const DMA_APBPERI_PMS_MONITOR_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// dma_apbperi_pms_monitor_lock
    -            DMA_APBPERI_PMS_MONITOR_LOCK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x80);
    -
    -        /// address: 0x600c1084
    -        /// SENSITIVE_DMA_APBPERI_PMS_MONITOR_1_REG
    -        pub const DMA_APBPERI_PMS_MONITOR_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// dma_apbperi_pms_monitor_violate_clr
    -            DMA_APBPERI_PMS_MONITOR_VIOLATE_CLR: u1,
    -            /// dma_apbperi_pms_monitor_violate_en
    -            DMA_APBPERI_PMS_MONITOR_VIOLATE_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0x84);
    -
    -        /// address: 0x600c1088
    -        /// SENSITIVE_DMA_APBPERI_PMS_MONITOR_2_REG
    -        pub const DMA_APBPERI_PMS_MONITOR_2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// dma_apbperi_pms_monitor_violate_intr
    -            DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR: u1,
    -            /// dma_apbperi_pms_monitor_violate_status_world
    -            DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_WORLD: u2,
    -            /// dma_apbperi_pms_monitor_violate_status_addr
    -            DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_ADDR: u24,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -        }), base_address + 0x88);
    -
    -        /// address: 0x600c108c
    -        /// SENSITIVE_DMA_APBPERI_PMS_MONITOR_3_REG
    -        pub const DMA_APBPERI_PMS_MONITOR_3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// dma_apbperi_pms_monitor_violate_status_wr
    -            DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_WR: u1,
    -            /// dma_apbperi_pms_monitor_violate_status_byteen
    -            DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_BYTEEN: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -        }), base_address + 0x8c);
    -
    -        /// address: 0x600c1090
    -        /// SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_0_REG
    -        pub const CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_x_iram0_dram0_dma_split_line_constrain_lock
    -            CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_LOCK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x90);
    -
    -        /// address: 0x600c1094
    -        /// SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_1_REG
    -        pub const CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_x_iram0_dram0_dma_sram_category_0
    -            CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_0: u2,
    -            /// core_x_iram0_dram0_dma_sram_category_1
    -            CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_1: u2,
    -            /// core_x_iram0_dram0_dma_sram_category_2
    -            CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_2: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            /// core_x_iram0_dram0_dma_sram_splitaddr
    -            CORE_X_IRAM0_DRAM0_DMA_SRAM_SPLITADDR: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -        }), base_address + 0x94);
    -
    -        /// address: 0x600c1098
    -        /// SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_2_REG
    -        pub const CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_x_iram0_sram_line_0_category_0
    -            CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_0: u2,
    -            /// core_x_iram0_sram_line_0_category_1
    -            CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_1: u2,
    -            /// core_x_iram0_sram_line_0_category_2
    -            CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_2: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            /// core_x_iram0_sram_line_0_splitaddr
    -            CORE_X_IRAM0_SRAM_LINE_0_SPLITADDR: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -        }), base_address + 0x98);
    -
    -        /// address: 0x600c109c
    -        /// SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_3_REG
    -        pub const CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_x_iram0_sram_line_1_category_0
    -            CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_0: u2,
    -            /// core_x_iram0_sram_line_1_category_1
    -            CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_1: u2,
    -            /// core_x_iram0_sram_line_1_category_2
    -            CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_2: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            /// core_x_iram0_sram_line_1_splitaddr
    -            CORE_X_IRAM0_SRAM_LINE_1_SPLITADDR: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -        }), base_address + 0x9c);
    -
    -        /// address: 0x600c10a0
    -        /// SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_4_REG
    -        pub const CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_x_dram0_dma_sram_line_0_category_0
    -            CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_0: u2,
    -            /// core_x_dram0_dma_sram_line_0_category_1
    -            CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_1: u2,
    -            /// core_x_dram0_dma_sram_line_0_category_2
    -            CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_2: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            /// core_x_dram0_dma_sram_line_0_splitaddr
    -            CORE_X_DRAM0_DMA_SRAM_LINE_0_SPLITADDR: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -        }), base_address + 0xa0);
    -
    -        /// address: 0x600c10a4
    -        /// SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_5_REG
    -        pub const CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_x_dram0_dma_sram_line_1_category_0
    -            CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_0: u2,
    -            /// core_x_dram0_dma_sram_line_1_category_1
    -            CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_1: u2,
    -            /// core_x_dram0_dma_sram_line_1_category_2
    -            CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_2: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            /// core_x_dram0_dma_sram_line_1_splitaddr
    -            CORE_X_DRAM0_DMA_SRAM_LINE_1_SPLITADDR: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -        }), base_address + 0xa4);
    -
    -        /// address: 0x600c10a8
    -        /// SENSITIVE_CORE_X_IRAM0_PMS_CONSTRAIN_0_REG
    -        pub const CORE_X_IRAM0_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_x_iram0_pms_constrain_lock
    -            CORE_X_IRAM0_PMS_CONSTRAIN_LOCK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0xa8);
    -
    -        /// address: 0x600c10ac
    -        /// SENSITIVE_CORE_X_IRAM0_PMS_CONSTRAIN_1_REG
    -        pub const CORE_X_IRAM0_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_x_iram0_pms_constrain_sram_world_1_pms_0
    -            CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u3,
    -            /// core_x_iram0_pms_constrain_sram_world_1_pms_1
    -            CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u3,
    -            /// core_x_iram0_pms_constrain_sram_world_1_pms_2
    -            CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u3,
    -            /// core_x_iram0_pms_constrain_sram_world_1_pms_3
    -            CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u3,
    -            /// core_x_iram0_pms_constrain_sram_world_1_cachedataarray_pms_0
    -            CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_CACHEDATAARRAY_PMS_0: u3,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            /// core_x_iram0_pms_constrain_rom_world_1_pms
    -            CORE_X_IRAM0_PMS_CONSTRAIN_ROM_WORLD_1_PMS: u3,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -        }), base_address + 0xac);
    -
    -        /// address: 0x600c10b0
    -        /// SENSITIVE_CORE_X_IRAM0_PMS_CONSTRAIN_2_REG
    -        pub const CORE_X_IRAM0_PMS_CONSTRAIN_2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_x_iram0_pms_constrain_sram_world_0_pms_0
    -            CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u3,
    -            /// core_x_iram0_pms_constrain_sram_world_0_pms_1
    -            CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u3,
    -            /// core_x_iram0_pms_constrain_sram_world_0_pms_2
    -            CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u3,
    -            /// core_x_iram0_pms_constrain_sram_world_0_pms_3
    -            CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u3,
    -            /// core_x_iram0_pms_constrain_sram_world_0_cachedataarray_pms_0
    -            CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_CACHEDATAARRAY_PMS_0: u3,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            /// core_x_iram0_pms_constrain_rom_world_0_pms
    -            CORE_X_IRAM0_PMS_CONSTRAIN_ROM_WORLD_0_PMS: u3,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -        }), base_address + 0xb0);
    -
    -        /// address: 0x600c10b4
    -        /// SENSITIVE_CORE_0_IRAM0_PMS_MONITOR_0_REG
    -        pub const CORE_0_IRAM0_PMS_MONITOR_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_0_iram0_pms_monitor_lock
    -            CORE_0_IRAM0_PMS_MONITOR_LOCK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0xb4);
    -
    -        /// address: 0x600c10b8
    -        /// SENSITIVE_CORE_0_IRAM0_PMS_MONITOR_1_REG
    -        pub const CORE_0_IRAM0_PMS_MONITOR_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_0_iram0_pms_monitor_violate_clr
    -            CORE_0_IRAM0_PMS_MONITOR_VIOLATE_CLR: u1,
    -            /// core_0_iram0_pms_monitor_violate_en
    -            CORE_0_IRAM0_PMS_MONITOR_VIOLATE_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0xb8);
    -
    -        /// address: 0x600c10bc
    -        /// SENSITIVE_CORE_0_IRAM0_PMS_MONITOR_2_REG
    -        pub const CORE_0_IRAM0_PMS_MONITOR_2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_0_iram0_pms_monitor_violate_intr
    -            CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR: u1,
    -            /// core_0_iram0_pms_monitor_violate_status_wr
    -            CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_WR: u1,
    -            /// core_0_iram0_pms_monitor_violate_status_loadstore
    -            CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_LOADSTORE: u1,
    -            /// core_0_iram0_pms_monitor_violate_status_world
    -            CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_WORLD: u2,
    -            /// core_0_iram0_pms_monitor_violate_status_addr
    -            CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_ADDR: u24,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -        }), base_address + 0xbc);
    -
    -        /// address: 0x600c10c0
    -        /// SENSITIVE_CORE_X_DRAM0_PMS_CONSTRAIN_0_REG
    -        pub const CORE_X_DRAM0_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_x_dram0_pms_constrain_lock
    -            CORE_X_DRAM0_PMS_CONSTRAIN_LOCK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0xc0);
    -
    -        /// address: 0x600c10c4
    -        /// SENSITIVE_CORE_X_DRAM0_PMS_CONSTRAIN_1_REG
    -        pub const CORE_X_DRAM0_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_x_dram0_pms_constrain_sram_world_0_pms_0
    -            CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    -            /// core_x_dram0_pms_constrain_sram_world_0_pms_1
    -            CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    -            /// core_x_dram0_pms_constrain_sram_world_0_pms_2
    -            CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    -            /// core_x_dram0_pms_constrain_sram_world_0_pms_3
    -            CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            /// core_x_dram0_pms_constrain_sram_world_1_pms_0
    -            CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    -            /// core_x_dram0_pms_constrain_sram_world_1_pms_1
    -            CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    -            /// core_x_dram0_pms_constrain_sram_world_1_pms_2
    -            CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    -            /// core_x_dram0_pms_constrain_sram_world_1_pms_3
    -            CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            /// core_x_dram0_pms_constrain_rom_world_0_pms
    -            CORE_X_DRAM0_PMS_CONSTRAIN_ROM_WORLD_0_PMS: u2,
    -            /// core_x_dram0_pms_constrain_rom_world_1_pms
    -            CORE_X_DRAM0_PMS_CONSTRAIN_ROM_WORLD_1_PMS: u2,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -        }), base_address + 0xc4);
    -
    -        /// address: 0x600c10c8
    -        /// SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_0_REG
    -        pub const CORE_0_DRAM0_PMS_MONITOR_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_0_dram0_pms_monitor_lock
    -            CORE_0_DRAM0_PMS_MONITOR_LOCK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0xc8);
    -
    -        /// address: 0x600c10cc
    -        /// SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_1_REG
    -        pub const CORE_0_DRAM0_PMS_MONITOR_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_0_dram0_pms_monitor_violate_clr
    -            CORE_0_DRAM0_PMS_MONITOR_VIOLATE_CLR: u1,
    -            /// core_0_dram0_pms_monitor_violate_en
    -            CORE_0_DRAM0_PMS_MONITOR_VIOLATE_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0xcc);
    -
    -        /// address: 0x600c10d0
    -        /// SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_2_REG
    -        pub const CORE_0_DRAM0_PMS_MONITOR_2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_0_dram0_pms_monitor_violate_intr
    -            CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR: u1,
    -            /// core_0_dram0_pms_monitor_violate_status_lock
    -            CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_LOCK: u1,
    -            /// core_0_dram0_pms_monitor_violate_status_world
    -            CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_WORLD: u2,
    -            /// core_0_dram0_pms_monitor_violate_status_addr
    -            CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_ADDR: u24,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -        }), base_address + 0xd0);
    -
    -        /// address: 0x600c10d4
    -        /// SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_3_REG
    -        pub const CORE_0_DRAM0_PMS_MONITOR_3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_0_dram0_pms_monitor_violate_status_wr
    -            CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_WR: u1,
    -            /// core_0_dram0_pms_monitor_violate_status_byteen
    -            CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_BYTEEN: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -        }), base_address + 0xd4);
    -
    -        /// address: 0x600c10d8
    -        /// SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_0_REG
    -        pub const CORE_0_PIF_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_0_pif_pms_constrain_lock
    -            CORE_0_PIF_PMS_CONSTRAIN_LOCK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0xd8);
    -
    -        /// address: 0x600c10dc
    -        /// SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_1_REG
    -        pub const CORE_0_PIF_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_0_pif_pms_constrain_world_0_uart
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_UART: u2,
    -            /// core_0_pif_pms_constrain_world_0_g0spi_1
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_G0SPI_1: u2,
    -            /// core_0_pif_pms_constrain_world_0_g0spi_0
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_G0SPI_0: u2,
    -            /// core_0_pif_pms_constrain_world_0_gpio
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_GPIO: u2,
    -            /// core_0_pif_pms_constrain_world_0_fe2
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_FE2: u2,
    -            /// core_0_pif_pms_constrain_world_0_fe
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_FE: u2,
    -            /// core_0_pif_pms_constrain_world_0_timer
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_TIMER: u2,
    -            /// core_0_pif_pms_constrain_world_0_rtc
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_RTC: u2,
    -            /// core_0_pif_pms_constrain_world_0_io_mux
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_IO_MUX: u2,
    -            /// core_0_pif_pms_constrain_world_0_wdg
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_WDG: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            /// core_0_pif_pms_constrain_world_0_misc
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_MISC: u2,
    -            /// core_0_pif_pms_constrain_world_0_i2c
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_I2C: u2,
    -            reserved4: u1,
    -            reserved5: u1,
    -            /// core_0_pif_pms_constrain_world_0_uart1
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_UART1: u2,
    -        }), base_address + 0xdc);
    -
    -        /// address: 0x600c10e0
    -        /// SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_2_REG
    -        pub const CORE_0_PIF_PMS_CONSTRAIN_2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_0_pif_pms_constrain_world_0_bt
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_BT: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// core_0_pif_pms_constrain_world_0_i2c_ext0
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_I2C_EXT0: u2,
    -            /// core_0_pif_pms_constrain_world_0_uhci0
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_UHCI0: u2,
    -            reserved2: u1,
    -            reserved3: u1,
    -            /// core_0_pif_pms_constrain_world_0_rmt
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_RMT: u2,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            /// core_0_pif_pms_constrain_world_0_ledc
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_LEDC: u2,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            /// core_0_pif_pms_constrain_world_0_bb
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_BB: u2,
    -            reserved12: u1,
    -            reserved13: u1,
    -            /// core_0_pif_pms_constrain_world_0_timergroup
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_TIMERGROUP: u2,
    -            /// core_0_pif_pms_constrain_world_0_timergroup1
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_TIMERGROUP1: u2,
    -            /// core_0_pif_pms_constrain_world_0_systimer
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SYSTIMER: u2,
    -        }), base_address + 0xe0);
    -
    -        /// address: 0x600c10e4
    -        /// SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_3_REG
    -        pub const CORE_0_PIF_PMS_CONSTRAIN_3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_0_pif_pms_constrain_world_0_spi_2
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SPI_2: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// core_0_pif_pms_constrain_world_0_apb_ctrl
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_APB_CTRL: u2,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            /// core_0_pif_pms_constrain_world_0_can
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CAN: u2,
    -            reserved6: u1,
    -            reserved7: u1,
    -            /// core_0_pif_pms_constrain_world_0_i2s1
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_I2S1: u2,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            /// core_0_pif_pms_constrain_world_0_rwbt
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_RWBT: u2,
    -            reserved14: u1,
    -            reserved15: u1,
    -            /// core_0_pif_pms_constrain_world_0_wifimac
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_WIFIMAC: u2,
    -            /// core_0_pif_pms_constrain_world_0_pwr
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_PWR: u2,
    -            padding0: u1,
    -            padding1: u1,
    -        }), base_address + 0xe4);
    -
    -        /// address: 0x600c10e8
    -        /// SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_4_REG
    -        pub const CORE_0_PIF_PMS_CONSTRAIN_4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// core_0_pif_pms_constrain_world_0_usb_wrap
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_USB_WRAP: u2,
    -            /// core_0_pif_pms_constrain_world_0_crypto_peri
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CRYPTO_PERI: u2,
    -            /// core_0_pif_pms_constrain_world_0_crypto_dma
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CRYPTO_DMA: u2,
    -            /// core_0_pif_pms_constrain_world_0_apb_adc
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_APB_ADC: u2,
    -            reserved2: u1,
    -            reserved3: u1,
    -            /// core_0_pif_pms_constrain_world_0_bt_pwr
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_BT_PWR: u2,
    -            /// core_0_pif_pms_constrain_world_0_usb_device
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_USB_DEVICE: u2,
    -            /// core_0_pif_pms_constrain_world_0_system
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SYSTEM: u2,
    -            /// core_0_pif_pms_constrain_world_0_sensitive
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SENSITIVE: u2,
    -            /// core_0_pif_pms_constrain_world_0_interrupt
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_INTERRUPT: u2,
    -            /// core_0_pif_pms_constrain_world_0_dma_copy
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_DMA_COPY: u2,
    -            /// core_0_pif_pms_constrain_world_0_cache_config
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CACHE_CONFIG: u2,
    -            /// core_0_pif_pms_constrain_world_0_ad
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_AD: u2,
    -            /// core_0_pif_pms_constrain_world_0_dio
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_DIO: u2,
    -            /// core_0_pif_pms_constrain_world_0_world_controller
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_WORLD_CONTROLLER: u2,
    -        }), base_address + 0xe8);
    -
    -        /// address: 0x600c10ec
    -        /// SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_5_REG
    -        pub const CORE_0_PIF_PMS_CONSTRAIN_5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_0_pif_pms_constrain_world_1_uart
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_UART: u2,
    -            /// core_0_pif_pms_constrain_world_1_g0spi_1
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_G0SPI_1: u2,
    -            /// core_0_pif_pms_constrain_world_1_g0spi_0
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_G0SPI_0: u2,
    -            /// core_0_pif_pms_constrain_world_1_gpio
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_GPIO: u2,
    -            /// core_0_pif_pms_constrain_world_1_fe2
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_FE2: u2,
    -            /// core_0_pif_pms_constrain_world_1_fe
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_FE: u2,
    -            /// core_0_pif_pms_constrain_world_1_timer
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_TIMER: u2,
    -            /// core_0_pif_pms_constrain_world_1_rtc
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_RTC: u2,
    -            /// core_0_pif_pms_constrain_world_1_io_mux
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_IO_MUX: u2,
    -            /// core_0_pif_pms_constrain_world_1_wdg
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_WDG: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            /// core_0_pif_pms_constrain_world_1_misc
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_MISC: u2,
    -            /// core_0_pif_pms_constrain_world_1_i2c
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_I2C: u2,
    -            reserved4: u1,
    -            reserved5: u1,
    -            /// core_0_pif_pms_constrain_world_1_uart1
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_UART1: u2,
    -        }), base_address + 0xec);
    -
    -        /// address: 0x600c10f0
    -        /// SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_6_REG
    -        pub const CORE_0_PIF_PMS_CONSTRAIN_6 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_0_pif_pms_constrain_world_1_bt
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_BT: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// core_0_pif_pms_constrain_world_1_i2c_ext0
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_I2C_EXT0: u2,
    -            /// core_0_pif_pms_constrain_world_1_uhci0
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_UHCI0: u2,
    -            reserved2: u1,
    -            reserved3: u1,
    -            /// core_0_pif_pms_constrain_world_1_rmt
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_RMT: u2,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            /// core_0_pif_pms_constrain_world_1_ledc
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_LEDC: u2,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            /// core_0_pif_pms_constrain_world_1_bb
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_BB: u2,
    -            reserved12: u1,
    -            reserved13: u1,
    -            /// core_0_pif_pms_constrain_world_1_timergroup
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_TIMERGROUP: u2,
    -            /// core_0_pif_pms_constrain_world_1_timergroup1
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_TIMERGROUP1: u2,
    -            /// core_0_pif_pms_constrain_world_1_systimer
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SYSTIMER: u2,
    -        }), base_address + 0xf0);
    -
    -        /// address: 0x600c10f4
    -        /// SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_7_REG
    -        pub const CORE_0_PIF_PMS_CONSTRAIN_7 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_0_pif_pms_constrain_world_1_spi_2
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SPI_2: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// core_0_pif_pms_constrain_world_1_apb_ctrl
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_APB_CTRL: u2,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            /// core_0_pif_pms_constrain_world_1_can
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CAN: u2,
    -            reserved6: u1,
    -            reserved7: u1,
    -            /// core_0_pif_pms_constrain_world_1_i2s1
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_I2S1: u2,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            /// core_0_pif_pms_constrain_world_1_rwbt
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_RWBT: u2,
    -            reserved14: u1,
    -            reserved15: u1,
    -            /// core_0_pif_pms_constrain_world_1_wifimac
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_WIFIMAC: u2,
    -            /// core_0_pif_pms_constrain_world_1_pwr
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_PWR: u2,
    -            padding0: u1,
    -            padding1: u1,
    -        }), base_address + 0xf4);
    -
    -        /// address: 0x600c10f8
    -        /// SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_8_REG
    -        pub const CORE_0_PIF_PMS_CONSTRAIN_8 = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// core_0_pif_pms_constrain_world_1_usb_wrap
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_USB_WRAP: u2,
    -            /// core_0_pif_pms_constrain_world_1_crypto_peri
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CRYPTO_PERI: u2,
    -            /// core_0_pif_pms_constrain_world_1_crypto_dma
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CRYPTO_DMA: u2,
    -            /// core_0_pif_pms_constrain_world_1_apb_adc
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_APB_ADC: u2,
    -            reserved2: u1,
    -            reserved3: u1,
    -            /// core_0_pif_pms_constrain_world_1_bt_pwr
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_BT_PWR: u2,
    -            /// core_0_pif_pms_constrain_world_1_usb_device
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_USB_DEVICE: u2,
    -            /// core_0_pif_pms_constrain_world_1_system
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SYSTEM: u2,
    -            /// core_0_pif_pms_constrain_world_1_sensitive
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SENSITIVE: u2,
    -            /// core_0_pif_pms_constrain_world_1_interrupt
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_INTERRUPT: u2,
    -            /// core_0_pif_pms_constrain_world_1_dma_copy
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_DMA_COPY: u2,
    -            /// core_0_pif_pms_constrain_world_1_cache_config
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CACHE_CONFIG: u2,
    -            /// core_0_pif_pms_constrain_world_1_ad
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_AD: u2,
    -            /// core_0_pif_pms_constrain_world_1_dio
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_DIO: u2,
    -            /// core_0_pif_pms_constrain_world_1_world_controller
    -            CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_WORLD_CONTROLLER: u2,
    -        }), base_address + 0xf8);
    -
    -        /// address: 0x600c10fc
    -        /// SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_9_REG
    -        pub const CORE_0_PIF_PMS_CONSTRAIN_9 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_0_pif_pms_constrain_rtcfast_spltaddr_world_0
    -            CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_SPLTADDR_WORLD_0: u11,
    -            /// core_0_pif_pms_constrain_rtcfast_spltaddr_world_1
    -            CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_SPLTADDR_WORLD_1: u11,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -        }), base_address + 0xfc);
    -
    -        /// address: 0x600c1100
    -        /// SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_10_REG
    -        pub const CORE_0_PIF_PMS_CONSTRAIN_10 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_0_pif_pms_constrain_rtcfast_world_0_l
    -            CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_0_L: u3,
    -            /// core_0_pif_pms_constrain_rtcfast_world_0_h
    -            CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_0_H: u3,
    -            /// core_0_pif_pms_constrain_rtcfast_world_1_l
    -            CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_1_L: u3,
    -            /// core_0_pif_pms_constrain_rtcfast_world_1_h
    -            CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_1_H: u3,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0x100);
    -
    -        /// address: 0x600c1104
    -        /// SENSITIVE_REGION_PMS_CONSTRAIN_0_REG
    -        pub const REGION_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// region_pms_constrain_lock
    -            REGION_PMS_CONSTRAIN_LOCK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x104);
    -
    -        /// address: 0x600c1108
    -        /// SENSITIVE_REGION_PMS_CONSTRAIN_1_REG
    -        pub const REGION_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// region_pms_constrain_world_0_area_0
    -            REGION_PMS_CONSTRAIN_WORLD_0_AREA_0: u2,
    -            /// region_pms_constrain_world_0_area_1
    -            REGION_PMS_CONSTRAIN_WORLD_0_AREA_1: u2,
    -            /// region_pms_constrain_world_0_area_2
    -            REGION_PMS_CONSTRAIN_WORLD_0_AREA_2: u2,
    -            /// region_pms_constrain_world_0_area_3
    -            REGION_PMS_CONSTRAIN_WORLD_0_AREA_3: u2,
    -            /// region_pms_constrain_world_0_area_4
    -            REGION_PMS_CONSTRAIN_WORLD_0_AREA_4: u2,
    -            /// region_pms_constrain_world_0_area_5
    -            REGION_PMS_CONSTRAIN_WORLD_0_AREA_5: u2,
    -            /// region_pms_constrain_world_0_area_6
    -            REGION_PMS_CONSTRAIN_WORLD_0_AREA_6: u2,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -        }), base_address + 0x108);
    -
    -        /// address: 0x600c110c
    -        /// SENSITIVE_REGION_PMS_CONSTRAIN_2_REG
    -        pub const REGION_PMS_CONSTRAIN_2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// region_pms_constrain_world_1_area_0
    -            REGION_PMS_CONSTRAIN_WORLD_1_AREA_0: u2,
    -            /// region_pms_constrain_world_1_area_1
    -            REGION_PMS_CONSTRAIN_WORLD_1_AREA_1: u2,
    -            /// region_pms_constrain_world_1_area_2
    -            REGION_PMS_CONSTRAIN_WORLD_1_AREA_2: u2,
    -            /// region_pms_constrain_world_1_area_3
    -            REGION_PMS_CONSTRAIN_WORLD_1_AREA_3: u2,
    -            /// region_pms_constrain_world_1_area_4
    -            REGION_PMS_CONSTRAIN_WORLD_1_AREA_4: u2,
    -            /// region_pms_constrain_world_1_area_5
    -            REGION_PMS_CONSTRAIN_WORLD_1_AREA_5: u2,
    -            /// region_pms_constrain_world_1_area_6
    -            REGION_PMS_CONSTRAIN_WORLD_1_AREA_6: u2,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -        }), base_address + 0x10c);
    -
    -        /// address: 0x600c1110
    -        /// SENSITIVE_REGION_PMS_CONSTRAIN_3_REG
    -        pub const REGION_PMS_CONSTRAIN_3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// region_pms_constrain_addr_0
    -            REGION_PMS_CONSTRAIN_ADDR_0: u30,
    -            padding0: u1,
    -            padding1: u1,
    -        }), base_address + 0x110);
    -
    -        /// address: 0x600c1114
    -        /// SENSITIVE_REGION_PMS_CONSTRAIN_4_REG
    -        pub const REGION_PMS_CONSTRAIN_4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// region_pms_constrain_addr_1
    -            REGION_PMS_CONSTRAIN_ADDR_1: u30,
    -            padding0: u1,
    -            padding1: u1,
    -        }), base_address + 0x114);
    -
    -        /// address: 0x600c1118
    -        /// SENSITIVE_REGION_PMS_CONSTRAIN_5_REG
    -        pub const REGION_PMS_CONSTRAIN_5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// region_pms_constrain_addr_2
    -            REGION_PMS_CONSTRAIN_ADDR_2: u30,
    -            padding0: u1,
    -            padding1: u1,
    -        }), base_address + 0x118);
    -
    -        /// address: 0x600c111c
    -        /// SENSITIVE_REGION_PMS_CONSTRAIN_6_REG
    -        pub const REGION_PMS_CONSTRAIN_6 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// region_pms_constrain_addr_3
    -            REGION_PMS_CONSTRAIN_ADDR_3: u30,
    -            padding0: u1,
    -            padding1: u1,
    -        }), base_address + 0x11c);
    -
    -        /// address: 0x600c1120
    -        /// SENSITIVE_REGION_PMS_CONSTRAIN_7_REG
    -        pub const REGION_PMS_CONSTRAIN_7 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// region_pms_constrain_addr_4
    -            REGION_PMS_CONSTRAIN_ADDR_4: u30,
    -            padding0: u1,
    -            padding1: u1,
    -        }), base_address + 0x120);
    -
    -        /// address: 0x600c1124
    -        /// SENSITIVE_REGION_PMS_CONSTRAIN_8_REG
    -        pub const REGION_PMS_CONSTRAIN_8 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// region_pms_constrain_addr_5
    -            REGION_PMS_CONSTRAIN_ADDR_5: u30,
    -            padding0: u1,
    -            padding1: u1,
    -        }), base_address + 0x124);
    -
    -        /// address: 0x600c1128
    -        /// SENSITIVE_REGION_PMS_CONSTRAIN_9_REG
    -        pub const REGION_PMS_CONSTRAIN_9 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// region_pms_constrain_addr_6
    -            REGION_PMS_CONSTRAIN_ADDR_6: u30,
    -            padding0: u1,
    -            padding1: u1,
    -        }), base_address + 0x128);
    -
    -        /// address: 0x600c112c
    -        /// SENSITIVE_REGION_PMS_CONSTRAIN_10_REG
    -        pub const REGION_PMS_CONSTRAIN_10 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// region_pms_constrain_addr_7
    -            REGION_PMS_CONSTRAIN_ADDR_7: u30,
    -            padding0: u1,
    -            padding1: u1,
    -        }), base_address + 0x12c);
    -
    -        /// address: 0x600c1130
    -        /// SENSITIVE_CORE_0_PIF_PMS_MONITOR_0_REG
    -        pub const CORE_0_PIF_PMS_MONITOR_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_0_pif_pms_monitor_lock
    -            CORE_0_PIF_PMS_MONITOR_LOCK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x130);
    -
    -        /// address: 0x600c1134
    -        /// SENSITIVE_CORE_0_PIF_PMS_MONITOR_1_REG
    -        pub const CORE_0_PIF_PMS_MONITOR_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_0_pif_pms_monitor_violate_clr
    -            CORE_0_PIF_PMS_MONITOR_VIOLATE_CLR: u1,
    -            /// core_0_pif_pms_monitor_violate_en
    -            CORE_0_PIF_PMS_MONITOR_VIOLATE_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0x134);
    -
    -        /// address: 0x600c1138
    -        /// SENSITIVE_CORE_0_PIF_PMS_MONITOR_2_REG
    -        pub const CORE_0_PIF_PMS_MONITOR_2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_0_pif_pms_monitor_violate_intr
    -            CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR: u1,
    -            /// core_0_pif_pms_monitor_violate_status_hport_0
    -            CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HPORT_0: u1,
    -            /// core_0_pif_pms_monitor_violate_status_hsize
    -            CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HSIZE: u3,
    -            /// core_0_pif_pms_monitor_violate_status_hwrite
    -            CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HWRITE: u1,
    -            /// core_0_pif_pms_monitor_violate_status_hworld
    -            CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HWORLD: u2,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x138);
    -
    -        /// address: 0x600c113c
    -        /// SENSITIVE_CORE_0_PIF_PMS_MONITOR_3_REG
    -        pub const CORE_0_PIF_PMS_MONITOR_3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_0_pif_pms_monitor_violate_status_haddr
    -            CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HADDR: u32,
    -        }), base_address + 0x13c);
    -
    -        /// address: 0x600c1140
    -        /// SENSITIVE_CORE_0_PIF_PMS_MONITOR_4_REG
    -        pub const CORE_0_PIF_PMS_MONITOR_4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_0_pif_pms_monitor_nonword_violate_clr
    -            CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_CLR: u1,
    -            /// core_0_pif_pms_monitor_nonword_violate_en
    -            CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0x140);
    -
    -        /// address: 0x600c1144
    -        /// SENSITIVE_CORE_0_PIF_PMS_MONITOR_5_REG
    -        pub const CORE_0_PIF_PMS_MONITOR_5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_0_pif_pms_monitor_nonword_violate_intr
    -            CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_INTR: u1,
    -            /// core_0_pif_pms_monitor_nonword_violate_status_hsize
    -            CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_STATUS_HSIZE: u2,
    -            /// core_0_pif_pms_monitor_nonword_violate_status_hworld
    -            CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_STATUS_HWORLD: u2,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -        }), base_address + 0x144);
    -
    -        /// address: 0x600c1148
    -        /// SENSITIVE_CORE_0_PIF_PMS_MONITOR_6_REG
    -        pub const CORE_0_PIF_PMS_MONITOR_6 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// core_0_pif_pms_monitor_nonword_violate_status_haddr
    -            CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_STATUS_HADDR: u32,
    -        }), base_address + 0x148);
    -
    -        /// address: 0x600c114c
    -        /// SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_0_REG
    -        pub const BACKUP_BUS_PMS_CONSTRAIN_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// backup_bus_pms_constrain_lock
    -            BACKUP_BUS_PMS_CONSTRAIN_LOCK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x14c);
    -
    -        /// address: 0x600c1150
    -        /// SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_1_REG
    -        pub const BACKUP_BUS_PMS_CONSTRAIN_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// backup_bus_pms_constrain_uart
    -            BACKUP_BUS_PMS_CONSTRAIN_UART: u2,
    -            /// backup_bus_pms_constrain_g0spi_1
    -            BACKUP_BUS_PMS_CONSTRAIN_G0SPI_1: u2,
    -            /// backup_bus_pms_constrain_g0spi_0
    -            BACKUP_BUS_PMS_CONSTRAIN_G0SPI_0: u2,
    -            /// backup_bus_pms_constrain_gpio
    -            BACKUP_BUS_PMS_CONSTRAIN_GPIO: u2,
    -            /// backup_bus_pms_constrain_fe2
    -            BACKUP_BUS_PMS_CONSTRAIN_FE2: u2,
    -            /// backup_bus_pms_constrain_fe
    -            BACKUP_BUS_PMS_CONSTRAIN_FE: u2,
    -            /// backup_bus_pms_constrain_timer
    -            BACKUP_BUS_PMS_CONSTRAIN_TIMER: u2,
    -            /// backup_bus_pms_constrain_rtc
    -            BACKUP_BUS_PMS_CONSTRAIN_RTC: u2,
    -            /// backup_bus_pms_constrain_io_mux
    -            BACKUP_BUS_PMS_CONSTRAIN_IO_MUX: u2,
    -            /// backup_bus_pms_constrain_wdg
    -            BACKUP_BUS_PMS_CONSTRAIN_WDG: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            /// backup_bus_pms_constrain_misc
    -            BACKUP_BUS_PMS_CONSTRAIN_MISC: u2,
    -            /// backup_bus_pms_constrain_i2c
    -            BACKUP_BUS_PMS_CONSTRAIN_I2C: u2,
    -            reserved4: u1,
    -            reserved5: u1,
    -            /// backup_bus_pms_constrain_uart1
    -            BACKUP_BUS_PMS_CONSTRAIN_UART1: u2,
    -        }), base_address + 0x150);
    -
    -        /// address: 0x600c1154
    -        /// SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_2_REG
    -        pub const BACKUP_BUS_PMS_CONSTRAIN_2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// backup_bus_pms_constrain_bt
    -            BACKUP_BUS_PMS_CONSTRAIN_BT: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// backup_bus_pms_constrain_i2c_ext0
    -            BACKUP_BUS_PMS_CONSTRAIN_I2C_EXT0: u2,
    -            /// backup_bus_pms_constrain_uhci0
    -            BACKUP_BUS_PMS_CONSTRAIN_UHCI0: u2,
    -            reserved2: u1,
    -            reserved3: u1,
    -            /// backup_bus_pms_constrain_rmt
    -            BACKUP_BUS_PMS_CONSTRAIN_RMT: u2,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            /// backup_bus_pms_constrain_ledc
    -            BACKUP_BUS_PMS_CONSTRAIN_LEDC: u2,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            /// backup_bus_pms_constrain_bb
    -            BACKUP_BUS_PMS_CONSTRAIN_BB: u2,
    -            reserved12: u1,
    -            reserved13: u1,
    -            /// backup_bus_pms_constrain_timergroup
    -            BACKUP_BUS_PMS_CONSTRAIN_TIMERGROUP: u2,
    -            /// backup_bus_pms_constrain_timergroup1
    -            BACKUP_BUS_PMS_CONSTRAIN_TIMERGROUP1: u2,
    -            /// backup_bus_pms_constrain_systimer
    -            BACKUP_BUS_PMS_CONSTRAIN_SYSTIMER: u2,
    -        }), base_address + 0x154);
    -
    -        /// address: 0x600c1158
    -        /// SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_3_REG
    -        pub const BACKUP_BUS_PMS_CONSTRAIN_3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// backup_bus_pms_constrain_spi_2
    -            BACKUP_BUS_PMS_CONSTRAIN_SPI_2: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// backup_bus_pms_constrain_apb_ctrl
    -            BACKUP_BUS_PMS_CONSTRAIN_APB_CTRL: u2,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            /// backup_bus_pms_constrain_can
    -            BACKUP_BUS_PMS_CONSTRAIN_CAN: u2,
    -            reserved6: u1,
    -            reserved7: u1,
    -            /// backup_bus_pms_constrain_i2s1
    -            BACKUP_BUS_PMS_CONSTRAIN_I2S1: u2,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            /// backup_bus_pms_constrain_rwbt
    -            BACKUP_BUS_PMS_CONSTRAIN_RWBT: u2,
    -            reserved14: u1,
    -            reserved15: u1,
    -            /// backup_bus_pms_constrain_wifimac
    -            BACKUP_BUS_PMS_CONSTRAIN_WIFIMAC: u2,
    -            /// backup_bus_pms_constrain_pwr
    -            BACKUP_BUS_PMS_CONSTRAIN_PWR: u2,
    -            padding0: u1,
    -            padding1: u1,
    -        }), base_address + 0x158);
    -
    -        /// address: 0x600c115c
    -        /// SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_4_REG
    -        pub const BACKUP_BUS_PMS_CONSTRAIN_4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// backup_bus_pms_constrain_usb_wrap
    -            BACKUP_BUS_PMS_CONSTRAIN_USB_WRAP: u2,
    -            /// backup_bus_pms_constrain_crypto_peri
    -            BACKUP_BUS_PMS_CONSTRAIN_CRYPTO_PERI: u2,
    -            /// backup_bus_pms_constrain_crypto_dma
    -            BACKUP_BUS_PMS_CONSTRAIN_CRYPTO_DMA: u2,
    -            /// backup_bus_pms_constrain_apb_adc
    -            BACKUP_BUS_PMS_CONSTRAIN_APB_ADC: u2,
    -            reserved2: u1,
    -            reserved3: u1,
    -            /// backup_bus_pms_constrain_bt_pwr
    -            BACKUP_BUS_PMS_CONSTRAIN_BT_PWR: u2,
    -            /// backup_bus_pms_constrain_usb_device
    -            BACKUP_BUS_PMS_CONSTRAIN_USB_DEVICE: u2,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x15c);
    -
    -        /// address: 0x600c1160
    -        /// SENSITIVE_BACKUP_BUS_PMS_MONITOR_0_REG
    -        pub const BACKUP_BUS_PMS_MONITOR_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// backup_bus_pms_monitor_lock
    -            BACKUP_BUS_PMS_MONITOR_LOCK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x160);
    -
    -        /// address: 0x600c1164
    -        /// SENSITIVE_BACKUP_BUS_PMS_MONITOR_1_REG
    -        pub const BACKUP_BUS_PMS_MONITOR_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// backup_bus_pms_monitor_violate_clr
    -            BACKUP_BUS_PMS_MONITOR_VIOLATE_CLR: u1,
    -            /// backup_bus_pms_monitor_violate_en
    -            BACKUP_BUS_PMS_MONITOR_VIOLATE_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0x164);
    -
    -        /// address: 0x600c1168
    -        /// SENSITIVE_BACKUP_BUS_PMS_MONITOR_2_REG
    -        pub const BACKUP_BUS_PMS_MONITOR_2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// backup_bus_pms_monitor_violate_intr
    -            BACKUP_BUS_PMS_MONITOR_VIOLATE_INTR: u1,
    -            /// backup_bus_pms_monitor_violate_status_htrans
    -            BACKUP_BUS_PMS_MONITOR_VIOLATE_STATUS_HTRANS: u2,
    -            /// backup_bus_pms_monitor_violate_status_hsize
    -            BACKUP_BUS_PMS_MONITOR_VIOLATE_STATUS_HSIZE: u3,
    -            /// backup_bus_pms_monitor_violate_status_hwrite
    -            BACKUP_BUS_PMS_MONITOR_VIOLATE_STATUS_HWRITE: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x168);
    -
    -        /// address: 0x600c116c
    -        /// SENSITIVE_BACKUP_BUS_PMS_MONITOR_3_REG
    -        pub const BACKUP_BUS_PMS_MONITOR_3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// backup_bus_pms_monitor_violate_haddr
    -            BACKUP_BUS_PMS_MONITOR_VIOLATE_HADDR: u32,
    -        }), base_address + 0x16c);
    -
    -        /// address: 0x600c1170
    -        /// SENSITIVE_CLOCK_GATE_REG
    -        pub const CLOCK_GATE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// clk_en
    -            CLK_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x170);
    -
    -        /// address: 0x600c1ffc
    -        /// SENSITIVE_DATE_REG
    -        pub const DATE = @intToPtr(*volatile MmioInt(32, u28), base_address + 0xffc);
    -    };
    -
    -    /// SHA (Secure Hash Algorithm) Accelerator
    -    pub const SHA = struct {
    -        pub const base_address = 0x6003b000;
    -
    -        /// address: 0x6003b000
    -        /// Initial configuration register.
    -        pub const MODE = @intToPtr(*volatile MmioInt(32, u3), base_address + 0x0);
    -
    -        /// address: 0x6003b004
    -        /// SHA 512/t configuration register 0.
    -        pub const T_STRING = @intToPtr(*volatile u32, base_address + 0x4);
    -
    -        /// address: 0x6003b008
    -        /// SHA 512/t configuration register 1.
    -        pub const T_LENGTH = @intToPtr(*volatile MmioInt(32, u6), base_address + 0x8);
    -
    -        /// address: 0x6003b00c
    -        /// DMA configuration register 0.
    -        pub const DMA_BLOCK_NUM = @intToPtr(*volatile MmioInt(32, u6), base_address + 0xc);
    -
    -        /// address: 0x6003b010
    -        /// Typical SHA configuration register 0.
    -        pub const START = @intToPtr(*volatile MmioInt(32, u31), base_address + 0x10);
    -
    -        /// address: 0x6003b014
    -        /// Typical SHA configuration register 1.
    -        pub const CONTINUE = @intToPtr(*volatile MmioInt(32, u31), base_address + 0x14);
    -
    -        /// address: 0x6003b018
    -        /// Busy register.
    -        pub const BUSY = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Sha busy state. 1'b0: idle. 1'b1: busy.
    -            STATE: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x6003b01c
    -        /// DMA configuration register 1.
    -        pub const DMA_START = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x1c);
    -
    -        /// address: 0x6003b020
    -        /// DMA configuration register 2.
    -        pub const DMA_CONTINUE = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x20);
    -
    -        /// address: 0x6003b024
    -        /// Interrupt clear register.
    -        pub const CLEAR_IRQ = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Clear sha interrupt.
    -            CLEAR_INTERRUPT: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x6003b028
    -        /// Interrupt enable register.
    -        pub const IRQ_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Sha interrupt enable register. 1'b0: disable(default). 1'b1: enable.
    -            INTERRUPT_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x6003b02c
    -        /// Date register.
    -        pub const DATE = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x2c);
    -
    -        /// address: 0x6003b040
    -        /// Sha H memory which contains intermediate hash or finial hash.
    -        pub const H_MEM = @intToPtr(*volatile [64]u8, base_address + 0x40);
    -
    -        /// address: 0x6003b080
    -        /// Sha M memory which contains message.
    -        pub const M_MEM = @intToPtr(*volatile [64]u8, base_address + 0x80);
    -    };
    -
    -    /// SPI (Serial Peripheral Interface) Controller
    -    pub const SPI0 = struct {
    -        pub const base_address = 0x60003000;
    -
    -        /// address: 0x60003008
    -        /// SPI0 control register.
    -        pub const CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            /// In the dummy phase the signal level of spi is output by the spi controller.
    -            FDUMMY_OUT: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            /// Apply 2 signals during command phase 1:enable 0: disable
    -            FCMD_DUAL: u1,
    -            /// Apply 4 signals during command phase 1:enable 0: disable
    -            FCMD_QUAD: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            /// This bit enable the bits: spi_mem_fread_qio, spi_mem_fread_dio,
    -            /// spi_mem_fread_qout and spi_mem_fread_dout. 1: enable 0: disable.
    -            FASTRD_MODE: u1,
    -            /// In the read operations, read-data phase apply 2 signals. 1: enable 0: disable.
    -            FREAD_DUAL: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            /// The bit is used to set MISO line polarity, 1: high 0, low
    -            Q_POL: u1,
    -            /// The bit is used to set MOSI line polarity, 1: high 0, low
    -            D_POL: u1,
    -            /// In the read operations read-data phase apply 4 signals. 1: enable 0: disable.
    -            FREAD_QUAD: u1,
    -            /// Write protect signal output when SPI is idle. 1: output high, 0: output low.
    -            WP: u1,
    -            reserved13: u1,
    -            /// In the read operations address phase and read-data phase apply 2 signals. 1:
    -            /// enable 0: disable.
    -            FREAD_DIO: u1,
    -            /// In the read operations address phase and read-data phase apply 4 signals. 1:
    -            /// enable 0: disable.
    -            FREAD_QIO: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x6000300c
    -        /// SPI0 control1 register.
    -        pub const CTRL1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is
    -            /// delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS
    -            /// inactive 3: SPI clock is alwasy on.
    -            CLK_MODE: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            reserved23: u1,
    -            reserved24: u1,
    -            reserved25: u1,
    -            reserved26: u1,
    -            reserved27: u1,
    -            /// SPI0 RX FIFO reset signal.
    -            RXFIFO_RST: u1,
    -            padding0: u1,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x60003010
    -        /// SPI0 control2 register.
    -        pub const CTRL2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// (cycles-1) of prepare phase by spi clock this bits are combined with
    -            /// spi_mem_cs_setup bit.
    -            CS_SETUP_TIME: u5,
    -            /// Spi cs signal is delayed to inactive by spi clock this bits are combined with
    -            /// spi_mem_cs_hold bit.
    -            CS_HOLD_TIME: u5,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            /// These bits are used to set the minimum CS high time tSHSL between SPI burst
    -            /// transfer when accesses to flash. tSHSL is (SPI_MEM_CS_HOLD_DELAY[5:0] + 1) MSPI
    -            /// core clock cycles.
    -            CS_HOLD_DELAY: u6,
    -            /// The FSM will be reset.
    -            SYNC_RESET: u1,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x60003014
    -        /// SPI clock division control register.
    -        pub const CLOCK = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// In the master mode it must be equal to spi_mem_clkcnt_N.
    -            CLKCNT_L: u8,
    -            /// In the master mode it must be floor((spi_mem_clkcnt_N+1)/2-1).
    -            CLKCNT_H: u8,
    -            /// In the master mode it is the divider of spi_mem_clk. So spi_mem_clk frequency is
    -            /// system/(spi_mem_clkcnt_N+1)
    -            CLKCNT_N: u8,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            /// Set this bit in 1-division mode.
    -            CLK_EQU_SYSCLK: u1,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x60003018
    -        /// SPI0 user register.
    -        pub const USER = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            /// spi cs keep low when spi is in done phase. 1: enable 0: disable.
    -            CS_HOLD: u1,
    -            /// spi cs is enable when spi is in prepare phase. 1: enable 0: disable.
    -            CS_SETUP: u1,
    -            reserved6: u1,
    -            /// the bit combined with spi_mem_mosi_delay_mode bits to set mosi signal delay
    -            /// mode.
    -            CK_OUT_EDGE: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            /// spi clock is disable in dummy phase when the bit is enable.
    -            USR_DUMMY_IDLE: u1,
    -            reserved23: u1,
    -            reserved24: u1,
    -            /// This bit enable the dummy phase of an operation.
    -            USR_DUMMY: u1,
    -            padding0: u1,
    -            padding1: u1,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x6000301c
    -        /// SPI0 user1 register.
    -        pub const USER1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length in spi_mem_clk cycles of dummy phase. The register value shall be
    -            /// (cycle_num-1).
    -            USR_DUMMY_CYCLELEN: u6,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            /// The length in bits of address phase. The register value shall be (bit_num-1).
    -            USR_ADDR_BITLEN: u6,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x60003020
    -        /// SPI0 user2 register.
    -        pub const USER2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of command.
    -            USR_COMMAND_VALUE: u16,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            /// The length in bits of command phase. The register value shall be (bit_num-1)
    -            USR_COMMAND_BITLEN: u4,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x6000302c
    -        /// SPI0 read control register.
    -        pub const RD_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            /// Mode bits in the flash fast read mode it is combined with spi_mem_fastrd_mode
    -            /// bit.
    -            WB_MODE: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x60003034
    -        /// SPI0 misc register
    -        pub const MISC = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            /// The bit is used to indicate the spi0_mst_st controlled transmitting is done.
    -            TRANS_END: u1,
    -            /// The bit is used to enable the interrupt of spi0_mst_st controlled transmitting
    -            /// is done.
    -            TRANS_END_INT_ENA: u1,
    -            /// The bit is used to indicate the spi0_slv_st controlled transmitting is done.
    -            CSPI_ST_TRANS_END: u1,
    -            /// The bit is used to enable the interrupt of spi0_slv_st controlled transmitting
    -            /// is done.
    -            CSPI_ST_TRANS_END_INT_ENA: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            /// 1: spi clk line is high when idle 0: spi clk line is low when idle
    -            CK_IDLE_EDGE: u1,
    -            /// spi cs line keep low when the bit is set.
    -            CS_KEEP_ACTIVE: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x6000303c
    -        /// SPI0 bit mode control register.
    -        pub const CACHE_FCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// For SPI0, Cache access enable, 1: enable, 0:disable.
    -            CACHE_REQ_EN: u1,
    -            /// For SPI0, cache read flash with 4 bytes address, 1: enable, 0:disable.
    -            CACHE_USR_ADDR_4BYTE: u1,
    -            /// For SPI0, cache read flash for user define command, 1: enable, 0:disable.
    -            CACHE_FLASH_USR_CMD: u1,
    -            /// For SPI0 flash, din phase apply 2 signals. 1: enable 0: disable. The bit is the
    -            /// same with spi_mem_fread_dio.
    -            FDIN_DUAL: u1,
    -            /// For SPI0 flash, dout phase apply 2 signals. 1: enable 0: disable. The bit is the
    -            /// same with spi_mem_fread_dio.
    -            FDOUT_DUAL: u1,
    -            /// For SPI0 flash, address phase apply 2 signals. 1: enable 0: disable. The bit is
    -            /// the same with spi_mem_fread_dio.
    -            FADDR_DUAL: u1,
    -            /// For SPI0 flash, din phase apply 4 signals. 1: enable 0: disable. The bit is the
    -            /// same with spi_mem_fread_qio.
    -            FDIN_QUAD: u1,
    -            /// For SPI0 flash, dout phase apply 4 signals. 1: enable 0: disable. The bit is the
    -            /// same with spi_mem_fread_qio.
    -            FDOUT_QUAD: u1,
    -            /// For SPI0 flash, address phase apply 4 signals. 1: enable 0: disable. The bit is
    -            /// the same with spi_mem_fread_qio.
    -            FADDR_QUAD: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x60003054
    -        /// SPI0 FSM status register
    -        pub const FSM = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The current status of SPI0 slave FSM: spi0_slv_st. 0: idle state, 1: preparation
    -            /// state, 2: send command state, 3: send address state, 4: wait state, 5: read data
    -            /// state, 6:write data state, 7: done state, 8: read data end state.
    -            CSPI_ST: u4,
    -            /// The current status of SPI0 master FSM: spi0_mst_st. 0: idle state,
    -            /// 1:EM_CACHE_GRANT , 2: program/erase suspend state, 3: SPI0 read data state, 4:
    -            /// wait cache/EDMA sent data is stored in SPI0 TX FIFO, 5: SPI0 write data state.
    -            EM_ST: u3,
    -            /// The lock delay time of SPI0/1 arbiter by spi0_slv_st, after PER is sent by SPI1.
    -            CSPI_LOCK_DELAY_TIME: u5,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x600030a8
    -        /// SPI0 timing calibration register
    -        pub const TIMING_CALI = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The bit is used to enable timing adjust clock for all reading operations.
    -            TIMING_CLK_ENA: u1,
    -            /// The bit is used to enable timing auto-calibration for all reading operations.
    -            TIMING_CALI: u1,
    -            /// add extra dummy spi clock cycle length for spi clock calibration.
    -            EXTRA_DUMMY_CYCLELEN: u3,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -        }), base_address + 0xa8);
    -
    -        /// address: 0x600030ac
    -        /// SPI0 input delay mode control register
    -        pub const DIN_MODE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// the input signals are delayed by system clock cycles, 0: input without delayed,
    -            /// 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3:
    -            /// input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input
    -            /// with the spi_clk high edge, 6: input with the spi_clk low edge
    -            DIN0_MODE: u2,
    -            /// the input signals are delayed by system clock cycles, 0: input without delayed,
    -            /// 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3:
    -            /// input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input
    -            /// with the spi_clk high edge, 6: input with the spi_clk low edge
    -            DIN1_MODE: u2,
    -            /// the input signals are delayed by system clock cycles, 0: input without delayed,
    -            /// 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3:
    -            /// input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input
    -            /// with the spi_clk high edge, 6: input with the spi_clk low edge
    -            DIN2_MODE: u2,
    -            /// the input signals are delayed by system clock cycles, 0: input without delayed,
    -            /// 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3:
    -            /// input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input
    -            /// with the spi_clk high edge, 6: input with the spi_clk low edge
    -            DIN3_MODE: u2,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0xac);
    -
    -        /// address: 0x600030b0
    -        /// SPI0 input delay number control register
    -        pub const DIN_NUM = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1:
    -            /// delayed by 2 cycles,...
    -            DIN0_NUM: u2,
    -            /// the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1:
    -            /// delayed by 2 cycles,...
    -            DIN1_NUM: u2,
    -            /// the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1:
    -            /// delayed by 2 cycles,...
    -            DIN2_NUM: u2,
    -            /// the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1:
    -            /// delayed by 2 cycles,...
    -            DIN3_NUM: u2,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0xb0);
    -
    -        /// address: 0x600030b4
    -        /// SPI0 output delay mode control register
    -        pub const DOUT_MODE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// the output signals are delayed by system clock cycles, 0: output without
    -            /// delayed, 1: output with the posedge of clk_apb,2 output with the negedge of
    -            /// clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of
    -            /// clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low
    -            /// edge
    -            DOUT0_MODE: u1,
    -            /// the output signals are delayed by system clock cycles, 0: output without
    -            /// delayed, 1: output with the posedge of clk_apb,2 output with the negedge of
    -            /// clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of
    -            /// clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low
    -            /// edge
    -            DOUT1_MODE: u1,
    -            /// the output signals are delayed by system clock cycles, 0: output without
    -            /// delayed, 1: output with the posedge of clk_apb,2 output with the negedge of
    -            /// clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of
    -            /// clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low
    -            /// edge
    -            DOUT2_MODE: u1,
    -            /// the output signals are delayed by system clock cycles, 0: output without
    -            /// delayed, 1: output with the posedge of clk_apb,2 output with the negedge of
    -            /// clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of
    -            /// clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low
    -            /// edge
    -            DOUT3_MODE: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0xb4);
    -
    -        /// address: 0x600030dc
    -        /// SPI0 clk_gate register
    -        pub const CLOCK_GATE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Register clock gate enable signal. 1: Enable. 0: Disable.
    -            CLK_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0xdc);
    -
    -        /// address: 0x600030e0
    -        /// SPI0 module clock select register
    -        pub const CORE_CLK_SEL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// When the digital system clock selects PLL clock and the frequency of PLL clock
    -            /// is 480MHz, the value of reg_spi01_clk_sel: 0: SPI0/1 module clock (clk) is
    -            /// 80MHz. 1: SPI0/1 module clock (clk) is 120MHz. 2: SPI0/1 module clock (clk)
    -            /// 160MHz. 3: Not used. When the digital system clock selects PLL clock and the
    -            /// frequency of PLL clock is 320MHz, the value of reg_spi01_clk_sel: 0: SPI0/1
    -            /// module clock (clk) is 80MHz. 1: SPI0/1 module clock (clk) is 80MHz. 2: SPI0/1
    -            /// module clock (clk) 160MHz. 3: Not used.
    -            SPI01_CLK_SEL: u2,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0xe0);
    -
    -        /// address: 0x600033fc
    -        /// Version control register
    -        pub const DATE = @intToPtr(*volatile MmioInt(32, u28), base_address + 0x3fc);
    -    };
    -
    -    /// SPI (Serial Peripheral Interface) Controller
    -    pub const SPI1 = struct {
    -        pub const base_address = 0x60002000;
    -
    -        /// address: 0x60002000
    -        /// SPI1 memory command register
    -        pub const CMD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The current status of SPI1 master FSM.
    -            SPI1_MST_ST: u4,
    -            /// The current status of SPI1 slave FSM: mspi_st. 0: idle state, 1: preparation
    -            /// state, 2: send command state, 3: send address state, 4: wait state, 5: read data
    -            /// state, 6:write data state, 7: done state, 8: read data end state.
    -            MSPI_ST: u4,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            /// In user mode, it is set to indicate that program/erase operation will be
    -            /// triggered. The bit is combined with spi_mem_usr bit. The bit will be cleared
    -            /// once the operation done.1: enable 0: disable.
    -            FLASH_PE: u1,
    -            /// User define command enable. An operation will be triggered when the bit is set.
    -            /// The bit will be cleared once the operation done.1: enable 0: disable.
    -            USR: u1,
    -            /// Drive Flash into high performance mode. The bit will be cleared once the
    -            /// operation done.1: enable 0: disable.
    -            FLASH_HPM: u1,
    -            /// This bit combined with reg_resandres bit releases Flash from the power-down
    -            /// state or high performance mode and obtains the devices ID. The bit will be
    -            /// cleared once the operation done.1: enable 0: disable.
    -            FLASH_RES: u1,
    -            /// Drive Flash into power down. An operation will be triggered when the bit is set.
    -            /// The bit will be cleared once the operation done.1: enable 0: disable.
    -            FLASH_DP: u1,
    -            /// Chip erase enable. Chip erase operation will be triggered when the bit is set.
    -            /// The bit will be cleared once the operation done.1: enable 0: disable.
    -            FLASH_CE: u1,
    -            /// Block erase enable(32KB) . Block erase operation will be triggered when the bit
    -            /// is set. The bit will be cleared once the operation done.1: enable 0: disable.
    -            FLASH_BE: u1,
    -            /// Sector erase enable(4KB). Sector erase operation will be triggered when the bit
    -            /// is set. The bit will be cleared once the operation done.1: enable 0: disable.
    -            FLASH_SE: u1,
    -            /// Page program enable(1 byte ~256 bytes data to be programmed). Page program
    -            /// operation will be triggered when the bit is set. The bit will be cleared once
    -            /// the operation done .1: enable 0: disable.
    -            FLASH_PP: u1,
    -            /// Write status register enable. Write status operation will be triggered when the
    -            /// bit is set. The bit will be cleared once the operation done.1: enable 0:
    -            /// disable.
    -            FLASH_WRSR: u1,
    -            /// Read status register-1. Read status operation will be triggered when the bit is
    -            /// set. The bit will be cleared once the operation done.1: enable 0: disable.
    -            FLASH_RDSR: u1,
    -            /// Read JEDEC ID . Read ID command will be sent when the bit is set. The bit will
    -            /// be cleared once the operation done. 1: enable 0: disable.
    -            FLASH_RDID: u1,
    -            /// Write flash disable. Write disable command will be sent when the bit is set. The
    -            /// bit will be cleared once the operation done. 1: enable 0: disable.
    -            FLASH_WRDI: u1,
    -            /// Write flash enable. Write enable command will be sent when the bit is set. The
    -            /// bit will be cleared once the operation done. 1: enable 0: disable.
    -            FLASH_WREN: u1,
    -            /// Read flash enable. Read flash operation will be triggered when the bit is set.
    -            /// The bit will be cleared once the operation done. 1: enable 0: disable.
    -            FLASH_READ: u1,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x60002004
    -        /// SPI1 address register
    -        pub const ADDR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// In user mode, it is the memory address. other then the bit0-bit23 is the memory
    -            /// address, the bit24-bit31 are the byte length of a transfer.
    -            USR_ADDR_VALUE: u32,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x60002008
    -        /// SPI1 control register.
    -        pub const CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            /// In the dummy phase the signal level of spi is output by the spi controller.
    -            FDUMMY_OUT: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            /// Apply 2 signals during command phase 1:enable 0: disable
    -            FCMD_DUAL: u1,
    -            /// Apply 4 signals during command phase 1:enable 0: disable
    -            FCMD_QUAD: u1,
    -            reserved6: u1,
    -            /// For SPI1, initialize crc32 module before writing encrypted data to flash. Active
    -            /// low.
    -            FCS_CRC_EN: u1,
    -            /// For SPI1, enable crc32 when writing encrypted data to flash. 1: enable 0:disable
    -            TX_CRC_EN: u1,
    -            reserved7: u1,
    -            /// This bit enable the bits: spi_mem_fread_qio, spi_mem_fread_dio,
    -            /// spi_mem_fread_qout and spi_mem_fread_dout. 1: enable 0: disable.
    -            FASTRD_MODE: u1,
    -            /// In the read operations, read-data phase apply 2 signals. 1: enable 0: disable.
    -            FREAD_DUAL: u1,
    -            /// The Device ID is read out to SPI_MEM_RD_STATUS register, this bit combine with
    -            /// spi_mem_flash_res bit. 1: enable 0: disable.
    -            RESANDRES: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            /// The bit is used to set MISO line polarity, 1: high 0, low
    -            Q_POL: u1,
    -            /// The bit is used to set MOSI line polarity, 1: high 0, low
    -            D_POL: u1,
    -            /// In the read operations read-data phase apply 4 signals. 1: enable 0: disable.
    -            FREAD_QUAD: u1,
    -            /// Write protect signal output when SPI is idle. 1: output high, 0: output low.
    -            WP: u1,
    -            /// two bytes data will be written to status register when it is set. 1: enable 0:
    -            /// disable.
    -            WRSR_2B: u1,
    -            /// In the read operations address phase and read-data phase apply 2 signals. 1:
    -            /// enable 0: disable.
    -            FREAD_DIO: u1,
    -            /// In the read operations address phase and read-data phase apply 4 signals. 1:
    -            /// enable 0: disable.
    -            FREAD_QIO: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x6000200c
    -        /// SPI1 control1 register.
    -        pub const CTRL1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is
    -            /// delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS
    -            /// inactive 3: SPI clock is alwasy on.
    -            CLK_MODE: u2,
    -            /// After RES/DP/HPM command is sent, SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] *
    -            /// 512) SPI_CLK cycles.
    -            CS_HOLD_DLY_RES: u10,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x60002010
    -        /// SPI1 control2 register.
    -        pub const CTRL2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            reserved23: u1,
    -            reserved24: u1,
    -            reserved25: u1,
    -            reserved26: u1,
    -            reserved27: u1,
    -            reserved28: u1,
    -            reserved29: u1,
    -            reserved30: u1,
    -            /// The FSM will be reset.
    -            SYNC_RESET: u1,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x60002014
    -        /// SPI1 clock division control register.
    -        pub const CLOCK = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// In the master mode it must be equal to spi_mem_clkcnt_N.
    -            CLKCNT_L: u8,
    -            /// In the master mode it must be floor((spi_mem_clkcnt_N+1)/2-1).
    -            CLKCNT_H: u8,
    -            /// In the master mode it is the divider of spi_mem_clk. So spi_mem_clk frequency is
    -            /// system/(spi_mem_clkcnt_N+1)
    -            CLKCNT_N: u8,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            /// reserved
    -            CLK_EQU_SYSCLK: u1,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x60002018
    -        /// SPI1 user register.
    -        pub const USER = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            /// the bit combined with spi_mem_mosi_delay_mode bits to set mosi signal delay
    -            /// mode.
    -            CK_OUT_EDGE: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            /// In the write operations read-data phase apply 2 signals
    -            FWRITE_DUAL: u1,
    -            /// In the write operations read-data phase apply 4 signals
    -            FWRITE_QUAD: u1,
    -            /// In the write operations address phase and read-data phase apply 2 signals.
    -            FWRITE_DIO: u1,
    -            /// In the write operations address phase and read-data phase apply 4 signals.
    -            FWRITE_QIO: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            /// read-data phase only access to high-part of the buffer spi_mem_w8~spi_mem_w15.
    -            /// 1: enable 0: disable.
    -            USR_MISO_HIGHPART: u1,
    -            /// write-data phase only access to high-part of the buffer spi_mem_w8~spi_mem_w15.
    -            /// 1: enable 0: disable.
    -            USR_MOSI_HIGHPART: u1,
    -            /// SPI clock is disable in dummy phase when the bit is enable.
    -            USR_DUMMY_IDLE: u1,
    -            /// This bit enable the write-data phase of an operation.
    -            USR_MOSI: u1,
    -            /// This bit enable the read-data phase of an operation.
    -            USR_MISO: u1,
    -            /// This bit enable the dummy phase of an operation.
    -            USR_DUMMY: u1,
    -            /// This bit enable the address phase of an operation.
    -            USR_ADDR: u1,
    -            /// This bit enable the command phase of an operation.
    -            USR_COMMAND: u1,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x6000201c
    -        /// SPI1 user1 register.
    -        pub const USER1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length in spi_mem_clk cycles of dummy phase. The register value shall be
    -            /// (cycle_num-1).
    -            USR_DUMMY_CYCLELEN: u6,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            /// The length in bits of address phase. The register value shall be (bit_num-1).
    -            USR_ADDR_BITLEN: u6,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x60002020
    -        /// SPI1 user2 register.
    -        pub const USER2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of command.
    -            USR_COMMAND_VALUE: u16,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            /// The length in bits of command phase. The register value shall be (bit_num-1)
    -            USR_COMMAND_BITLEN: u4,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x60002024
    -        /// SPI1 send data bit length control register.
    -        pub const MOSI_DLEN = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length in bits of write-data. The register value shall be (bit_num-1).
    -            USR_MOSI_DBITLEN: u10,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x60002028
    -        /// SPI1 receive data bit length control register.
    -        pub const MISO_DLEN = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length in bits of read-data. The register value shall be (bit_num-1).
    -            USR_MISO_DBITLEN: u10,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x6000202c
    -        /// SPI1 status register.
    -        pub const RD_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value is stored when set spi_mem_flash_rdsr bit and spi_mem_flash_res bit.
    -            STATUS: u16,
    -            /// Mode bits in the flash fast read mode it is combined with spi_mem_fastrd_mode
    -            /// bit.
    -            WB_MODE: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x60002034
    -        /// SPI1 misc register
    -        pub const MISC = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// SPI_CS0 pin enable, 1: disable SPI_CS0, 0: SPI_CS0 pin is active to select SPI
    -            /// device, such as flash, external RAM and so on.
    -            CS0_DIS: u1,
    -            /// SPI_CS1 pin enable, 1: disable SPI_CS1, 0: SPI_CS1 pin is active to select SPI
    -            /// device, such as flash, external RAM and so on.
    -            CS1_DIS: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            /// 1: spi clk line is high when idle 0: spi clk line is low when idle
    -            CK_IDLE_EDGE: u1,
    -            /// spi cs line keep low when the bit is set.
    -            CS_KEEP_ACTIVE: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x60002038
    -        /// SPI1 TX CRC data register.
    -        pub const TX_CRC = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// For SPI1, the value of crc32.
    -            DATA: u32,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x6000203c
    -        /// SPI1 bit mode control register.
    -        pub const CACHE_FCTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            /// For SPI1, cache read flash with 4 bytes address, 1: enable, 0:disable.
    -            CACHE_USR_ADDR_4BYTE: u1,
    -            reserved1: u1,
    -            /// For SPI1, din phase apply 2 signals. 1: enable 0: disable. The bit is the same
    -            /// with spi_mem_fread_dio.
    -            FDIN_DUAL: u1,
    -            /// For SPI1, dout phase apply 2 signals. 1: enable 0: disable. The bit is the same
    -            /// with spi_mem_fread_dio.
    -            FDOUT_DUAL: u1,
    -            /// For SPI1, address phase apply 2 signals. 1: enable 0: disable. The bit is the
    -            /// same with spi_mem_fread_dio.
    -            FADDR_DUAL: u1,
    -            /// For SPI1, din phase apply 4 signals. 1: enable 0: disable. The bit is the same
    -            /// with spi_mem_fread_qio.
    -            FDIN_QUAD: u1,
    -            /// For SPI1, dout phase apply 4 signals. 1: enable 0: disable. The bit is the same
    -            /// with spi_mem_fread_qio.
    -            FDOUT_QUAD: u1,
    -            /// For SPI1, address phase apply 4 signals. 1: enable 0: disable. The bit is the
    -            /// same with spi_mem_fread_qio.
    -            FADDR_QUAD: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x60002058
    -        /// SPI1 memory data buffer0
    -        pub const W0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF0: u32,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x6000205c
    -        /// SPI1 memory data buffer1
    -        pub const W1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF1: u32,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x60002060
    -        /// SPI1 memory data buffer2
    -        pub const W2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF2: u32,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x60002064
    -        /// SPI1 memory data buffer3
    -        pub const W3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF3: u32,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x60002068
    -        /// SPI1 memory data buffer4
    -        pub const W4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF4: u32,
    -        }), base_address + 0x68);
    -
    -        /// address: 0x6000206c
    -        /// SPI1 memory data buffer5
    -        pub const W5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF5: u32,
    -        }), base_address + 0x6c);
    -
    -        /// address: 0x60002070
    -        /// SPI1 memory data buffer6
    -        pub const W6 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF6: u32,
    -        }), base_address + 0x70);
    -
    -        /// address: 0x60002074
    -        /// SPI1 memory data buffer7
    -        pub const W7 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF7: u32,
    -        }), base_address + 0x74);
    -
    -        /// address: 0x60002078
    -        /// SPI1 memory data buffer8
    -        pub const W8 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF8: u32,
    -        }), base_address + 0x78);
    -
    -        /// address: 0x6000207c
    -        /// SPI1 memory data buffer9
    -        pub const W9 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF9: u32,
    -        }), base_address + 0x7c);
    -
    -        /// address: 0x60002080
    -        /// SPI1 memory data buffer10
    -        pub const W10 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF10: u32,
    -        }), base_address + 0x80);
    -
    -        /// address: 0x60002084
    -        /// SPI1 memory data buffer11
    -        pub const W11 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF11: u32,
    -        }), base_address + 0x84);
    -
    -        /// address: 0x60002088
    -        /// SPI1 memory data buffer12
    -        pub const W12 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF12: u32,
    -        }), base_address + 0x88);
    -
    -        /// address: 0x6000208c
    -        /// SPI1 memory data buffer13
    -        pub const W13 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF13: u32,
    -        }), base_address + 0x8c);
    -
    -        /// address: 0x60002090
    -        /// SPI1 memory data buffer14
    -        pub const W14 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF14: u32,
    -        }), base_address + 0x90);
    -
    -        /// address: 0x60002094
    -        /// SPI1 memory data buffer15
    -        pub const W15 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF15: u32,
    -        }), base_address + 0x94);
    -
    -        /// address: 0x60002098
    -        /// SPI1 wait idle control register
    -        pub const FLASH_WAITI_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            /// The dummy phase enable when wait flash idle (RDSR)
    -            WAITI_DUMMY: u1,
    -            /// The command to wait flash idle(RDSR).
    -            WAITI_CMD: u8,
    -            /// The dummy cycle length when wait flash idle(RDSR).
    -            WAITI_DUMMY_CYCLELEN: u6,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x98);
    -
    -        /// address: 0x6000209c
    -        /// SPI1 flash suspend control register
    -        pub const FLASH_SUS_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// program erase resume bit, program erase suspend operation will be triggered when
    -            /// the bit is set. The bit will be cleared once the operation done.1: enable 0:
    -            /// disable.
    -            FLASH_PER: u1,
    -            /// program erase suspend bit, program erase suspend operation will be triggered
    -            /// when the bit is set. The bit will be cleared once the operation done.1: enable
    -            /// 0: disable.
    -            FLASH_PES: u1,
    -            /// 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4 or *128) SPI_CLK cycles after
    -            /// program erase resume command is sent. 0: SPI1 does not wait after program erase
    -            /// resume command is sent.
    -            FLASH_PER_WAIT_EN: u1,
    -            /// 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4 or *128) SPI_CLK cycles after
    -            /// program erase suspend command is sent. 0: SPI1 does not wait after program erase
    -            /// suspend command is sent.
    -            FLASH_PES_WAIT_EN: u1,
    -            /// Set this bit to enable PES end triggers PER transfer option. If this bit is 0,
    -            /// application should send PER after PES is done.
    -            PES_PER_EN: u1,
    -            /// Set this bit to enable Auto-suspending function.
    -            FLASH_PES_EN: u1,
    -            /// The mask value when check SUS/SUS1/SUS2 status bit. If the read status value is
    -            /// status_in[15:0](only status_in[7:0] is valid when only one byte of data is read
    -            /// out, status_in[15:0] is valid when two bytes of data are read out),
    -            /// SUS/SUS1/SUS2 = status_in[15:0]^ SPI_MEM_PESR_END_MSK[15:0].
    -            PESR_END_MSK: u16,
    -            /// 1: Read two bytes when check flash SUS/SUS1/SUS2 status bit. 0: Read one byte
    -            /// when check flash SUS/SUS1/SUS2 status bit
    -            RD_SUS_2B: u1,
    -            /// 1: Both WIP and SUS/SUS1/SUS2 bits should be checked to insure the resume status
    -            /// of flash. 0: Only need to check WIP is 0.
    -            PER_END_EN: u1,
    -            /// 1: Both WIP and SUS/SUS1/SUS2 bits should be checked to insure the suspend
    -            /// status of flash. 0: Only need to check WIP is 0.
    -            PES_END_EN: u1,
    -            /// When SPI1 checks SUS/SUS1/SUS2 bits fail for SPI_MEM_SUS_TIMEOUT_CNT[6:0] times,
    -            /// it will be treated as check pass.
    -            SUS_TIMEOUT_CNT: u7,
    -        }), base_address + 0x9c);
    -
    -        /// address: 0x600020a0
    -        /// SPI1 flash suspend command register
    -        pub const FLASH_SUS_CMD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Program/Erase resume command.
    -            FLASH_PER_COMMAND: u8,
    -            /// Program/Erase suspend command.
    -            FLASH_PES_COMMAND: u8,
    -            /// Flash SUS/SUS1/SUS2 status bit read command. The command should be sent when
    -            /// SUS/SUS1/SUS2 bit should be checked to insure the suspend or resume status of
    -            /// flash.
    -            WAIT_PESR_COMMAND: u16,
    -        }), base_address + 0xa0);
    -
    -        /// address: 0x600020a4
    -        /// SPI1 flash suspend status register
    -        pub const SUS_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The status of flash suspend, only used in SPI1.
    -            FLASH_SUS: u1,
    -            /// 1: SPI1 sends out SPI_MEM_WAIT_PESR_COMMAND[15:0] to check SUS/SUS1/SUS2 bit. 0:
    -            /// SPI1 sends out SPI_MEM_WAIT_PESR_COMMAND[7:0] to check SUS/SUS1/SUS2 bit.
    -            WAIT_PESR_CMD_2B: u1,
    -            /// 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after HPM
    -            /// command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK
    -            /// cycles after HPM command is sent.
    -            FLASH_HPM_DLY_128: u1,
    -            /// 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after RES
    -            /// command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK
    -            /// cycles after RES command is sent.
    -            FLASH_RES_DLY_128: u1,
    -            /// 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after DP
    -            /// command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK
    -            /// cycles after DP command is sent.
    -            FLASH_DP_DLY_128: u1,
    -            /// Valid when SPI_MEM_FLASH_PER_WAIT_EN is 1. 1: SPI1 waits
    -            /// (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after PER command is sent.
    -            /// 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after PER
    -            /// command is sent.
    -            FLASH_PER_DLY_128: u1,
    -            /// Valid when SPI_MEM_FLASH_PES_WAIT_EN is 1. 1: SPI1 waits
    -            /// (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after PES command is sent.
    -            /// 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after PES
    -            /// command is sent.
    -            FLASH_PES_DLY_128: u1,
    -            /// 1: Enable SPI0 lock SPI0/1 arbiter option. 0: Disable it.
    -            SPI0_LOCK_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0xa4);
    -
    -        /// address: 0x600020a8
    -        /// SPI1 timing control register
    -        pub const TIMING_CALI = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            /// The bit is used to enable timing auto-calibration for all reading operations.
    -            TIMING_CALI: u1,
    -            /// add extra dummy spi clock cycle length for spi clock calibration.
    -            EXTRA_DUMMY_CYCLELEN: u3,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -        }), base_address + 0xa8);
    -
    -        /// address: 0x600020c0
    -        /// SPI1 interrupt enable register
    -        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The enable bit for SPI_MEM_PER_END_INT interrupt.
    -            PER_END_INT_ENA: u1,
    -            /// The enable bit for SPI_MEM_PES_END_INT interrupt.
    -            PES_END_INT_ENA: u1,
    -            /// The enable bit for SPI_MEM_WPE_END_INT interrupt.
    -            WPE_END_INT_ENA: u1,
    -            /// The enable bit for SPI_MEM_SLV_ST_END_INT interrupt.
    -            SLV_ST_END_INT_ENA: u1,
    -            /// The enable bit for SPI_MEM_MST_ST_END_INT interrupt.
    -            MST_ST_END_INT_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -        }), base_address + 0xc0);
    -
    -        /// address: 0x600020c4
    -        /// SPI1 interrupt clear register
    -        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The clear bit for SPI_MEM_PER_END_INT interrupt.
    -            PER_END_INT_CLR: u1,
    -            /// The clear bit for SPI_MEM_PES_END_INT interrupt.
    -            PES_END_INT_CLR: u1,
    -            /// The clear bit for SPI_MEM_WPE_END_INT interrupt.
    -            WPE_END_INT_CLR: u1,
    -            /// The clear bit for SPI_MEM_SLV_ST_END_INT interrupt.
    -            SLV_ST_END_INT_CLR: u1,
    -            /// The clear bit for SPI_MEM_MST_ST_END_INT interrupt.
    -            MST_ST_END_INT_CLR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -        }), base_address + 0xc4);
    -
    -        /// address: 0x600020c8
    -        /// SPI1 interrupt raw register
    -        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The raw bit for SPI_MEM_PER_END_INT interrupt. 1: Triggered when Auto Resume
    -            /// command (0x7A) is sent and flash is resumed. 0: Others.
    -            PER_END_INT_RAW: u1,
    -            /// The raw bit for SPI_MEM_PES_END_INT interrupt.1: Triggered when Auto Suspend
    -            /// command (0x75) is sent and flash is suspended. 0: Others.
    -            PES_END_INT_RAW: u1,
    -            /// The raw bit for SPI_MEM_WPE_END_INT interrupt. 1: Triggered when
    -            /// WRSR/PP/SE/BE/CE is sent and flash is already idle. 0: Others.
    -            WPE_END_INT_RAW: u1,
    -            /// The raw bit for SPI_MEM_SLV_ST_END_INT interrupt. 1: Triggered when spi1_slv_st
    -            /// is changed from non idle state to idle state. It means that SPI_CS raises high.
    -            /// 0: Others
    -            SLV_ST_END_INT_RAW: u1,
    -            /// The raw bit for SPI_MEM_MST_ST_END_INT interrupt. 1: Triggered when spi1_mst_st
    -            /// is changed from non idle state to idle state. 0: Others.
    -            MST_ST_END_INT_RAW: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -        }), base_address + 0xc8);
    -
    -        /// address: 0x600020cc
    -        /// SPI1 interrupt status register
    -        pub const INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The status bit for SPI_MEM_PER_END_INT interrupt.
    -            PER_END_INT_ST: u1,
    -            /// The status bit for SPI_MEM_PES_END_INT interrupt.
    -            PES_END_INT_ST: u1,
    -            /// The status bit for SPI_MEM_WPE_END_INT interrupt.
    -            WPE_END_INT_ST: u1,
    -            /// The status bit for SPI_MEM_SLV_ST_END_INT interrupt.
    -            SLV_ST_END_INT_ST: u1,
    -            /// The status bit for SPI_MEM_MST_ST_END_INT interrupt.
    -            MST_ST_END_INT_ST: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -        }), base_address + 0xcc);
    -
    -        /// address: 0x600020dc
    -        /// SPI1 clk_gate register
    -        pub const CLOCK_GATE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Register clock gate enable signal. 1: Enable. 0: Disable.
    -            CLK_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0xdc);
    -
    -        /// address: 0x600023fc
    -        /// Version control register
    -        pub const DATE = @intToPtr(*volatile MmioInt(32, u28), base_address + 0x3fc);
    -    };
    -
    -    /// SPI (Serial Peripheral Interface) Controller
    -    pub const SPI2 = struct {
    -        pub const base_address = 0x60024000;
    -
    -        /// address: 0x60024000
    -        /// Command control register
    -        pub const CMD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Define the APB cycles of SPI_CONF state. Can be configured in CONF state.
    -            CONF_BITLEN: u18,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            /// Set this bit to synchronize SPI registers from APB clock domain into SPI module
    -            /// clock domain, which is only used in SPI master mode.
    -            UPDATE: u1,
    -            /// User define command enable. An operation will be triggered when the bit is set.
    -            /// The bit will be cleared once the operation done.1: enable 0: disable. Can not be
    -            /// changed by CONF_buf.
    -            USR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x60024004
    -        /// Address value register
    -        pub const ADDR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Address to slave. Can be configured in CONF state.
    -            USR_ADDR_VALUE: u32,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x60024008
    -        /// SPI control register
    -        pub const CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            /// In the dummy phase the signal level of spi is output by the spi controller. Can
    -            /// be configured in CONF state.
    -            DUMMY_OUT: u1,
    -            reserved3: u1,
    -            /// Apply 2 signals during addr phase 1:enable 0: disable. Can be configured in CONF
    -            /// state.
    -            FADDR_DUAL: u1,
    -            /// Apply 4 signals during addr phase 1:enable 0: disable. Can be configured in CONF
    -            /// state.
    -            FADDR_QUAD: u1,
    -            reserved4: u1,
    -            /// Apply 2 signals during command phase 1:enable 0: disable. Can be configured in
    -            /// CONF state.
    -            FCMD_DUAL: u1,
    -            /// Apply 4 signals during command phase 1:enable 0: disable. Can be configured in
    -            /// CONF state.
    -            FCMD_QUAD: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            /// In the read operations, read-data phase apply 2 signals. 1: enable 0: disable.
    -            /// Can be configured in CONF state.
    -            FREAD_DUAL: u1,
    -            /// In the read operations read-data phase apply 4 signals. 1: enable 0: disable.
    -            /// Can be configured in CONF state.
    -            FREAD_QUAD: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            /// The bit is used to set MISO line polarity, 1: high 0, low. Can be configured in
    -            /// CONF state.
    -            Q_POL: u1,
    -            /// The bit is used to set MOSI line polarity, 1: high 0, low. Can be configured in
    -            /// CONF state.
    -            D_POL: u1,
    -            /// SPI_HOLD output value when SPI is idle. 1: output high, 0: output low. Can be
    -            /// configured in CONF state.
    -            HOLD_POL: u1,
    -            /// Write protect signal output when SPI is idle. 1: output high, 0: output low. Can
    -            /// be configured in CONF state.
    -            WP_POL: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            /// In read-data (MISO) phase 1: LSB first 0: MSB first. Can be configured in CONF
    -            /// state.
    -            RD_BIT_ORDER: u1,
    -            /// In command address write-data (MOSI) phases 1: LSB firs 0: MSB first. Can be
    -            /// configured in CONF state.
    -            WR_BIT_ORDER: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x6002400c
    -        /// SPI clock control register
    -        pub const CLOCK = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// In the master mode it must be equal to spi_clkcnt_N. In the slave mode it must
    -            /// be 0. Can be configured in CONF state.
    -            CLKCNT_L: u6,
    -            /// In the master mode it must be floor((spi_clkcnt_N+1)/2-1). In the slave mode it
    -            /// must be 0. Can be configured in CONF state.
    -            CLKCNT_H: u6,
    -            /// In the master mode it is the divider of spi_clk. So spi_clk frequency is
    -            /// system/(spi_clkdiv_pre+1)/(spi_clkcnt_N+1). Can be configured in CONF state.
    -            CLKCNT_N: u6,
    -            /// In the master mode it is pre-divider of spi_clk. Can be configured in CONF
    -            /// state.
    -            CLKDIV_PRE: u4,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            /// In the master mode 1: spi_clk is eqaul to system 0: spi_clk is divided from
    -            /// system clock. Can be configured in CONF state.
    -            CLK_EQU_SYSCLK: u1,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x60024010
    -        /// SPI USER control register
    -        pub const USER = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Set the bit to enable full duplex communication. 1: enable 0: disable. Can be
    -            /// configured in CONF state.
    -            DOUTDIN: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// Both for master mode and slave mode. 1: spi controller is in QPI mode. 0:
    -            /// others. Can be configured in CONF state.
    -            QPI_MODE: u1,
    -            reserved2: u1,
    -            /// In the slave mode, this bit can be used to change the polarity of tsck. 0: tsck
    -            /// = spi_ck_i. 1:tsck = !spi_ck_i.
    -            TSCK_I_EDGE: u1,
    -            /// spi cs keep low when spi is in done phase. 1: enable 0: disable. Can be
    -            /// configured in CONF state.
    -            CS_HOLD: u1,
    -            /// spi cs is enable when spi is in prepare phase. 1: enable 0: disable. Can be
    -            /// configured in CONF state.
    -            CS_SETUP: u1,
    -            /// In the slave mode, this bit can be used to change the polarity of rsck. 0: rsck
    -            /// = !spi_ck_i. 1:rsck = spi_ck_i.
    -            RSCK_I_EDGE: u1,
    -            /// the bit combined with spi_mosi_delay_mode bits to set mosi signal delay mode.
    -            /// Can be configured in CONF state.
    -            CK_OUT_EDGE: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            /// In the write operations read-data phase apply 2 signals. Can be configured in
    -            /// CONF state.
    -            FWRITE_DUAL: u1,
    -            /// In the write operations read-data phase apply 4 signals. Can be configured in
    -            /// CONF state.
    -            FWRITE_QUAD: u1,
    -            reserved5: u1,
    -            /// 1: Enable the DMA CONF phase of next seg-trans operation, which means seg-trans
    -            /// will continue. 0: The seg-trans will end after the current SPI seg-trans or this
    -            /// is not seg-trans mode. Can be configured in CONF state.
    -            USR_CONF_NXT: u1,
    -            reserved6: u1,
    -            /// Set the bit to enable 3-line half duplex communication mosi and miso signals
    -            /// share the same pin. 1: enable 0: disable. Can be configured in CONF state.
    -            SIO: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            /// read-data phase only access to high-part of the buffer spi_w8~spi_w15. 1: enable
    -            /// 0: disable. Can be configured in CONF state.
    -            USR_MISO_HIGHPART: u1,
    -            /// write-data phase only access to high-part of the buffer spi_w8~spi_w15. 1:
    -            /// enable 0: disable. Can be configured in CONF state.
    -            USR_MOSI_HIGHPART: u1,
    -            /// spi clock is disable in dummy phase when the bit is enable. Can be configured in
    -            /// CONF state.
    -            USR_DUMMY_IDLE: u1,
    -            /// This bit enable the write-data phase of an operation. Can be configured in CONF
    -            /// state.
    -            USR_MOSI: u1,
    -            /// This bit enable the read-data phase of an operation. Can be configured in CONF
    -            /// state.
    -            USR_MISO: u1,
    -            /// This bit enable the dummy phase of an operation. Can be configured in CONF
    -            /// state.
    -            USR_DUMMY: u1,
    -            /// This bit enable the address phase of an operation. Can be configured in CONF
    -            /// state.
    -            USR_ADDR: u1,
    -            /// This bit enable the command phase of an operation. Can be configured in CONF
    -            /// state.
    -            USR_COMMAND: u1,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x60024014
    -        /// SPI USER control register 1
    -        pub const USER1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The length in spi_clk cycles of dummy phase. The register value shall be
    -            /// (cycle_num-1). Can be configured in CONF state.
    -            USR_DUMMY_CYCLELEN: u8,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            /// 1: SPI transfer is ended when SPI RX AFIFO wfull error is valid in GP-SPI master
    -            /// FD/HD-mode. 0: SPI transfer is not ended when SPI RX AFIFO wfull error is valid
    -            /// in GP-SPI master FD/HD-mode.
    -            MST_WFULL_ERR_END_EN: u1,
    -            /// (cycles+1) of prepare phase by spi clock this bits are combined with
    -            /// spi_cs_setup bit. Can be configured in CONF state.
    -            CS_SETUP_TIME: u5,
    -            /// delay cycles of cs pin by spi clock this bits are combined with spi_cs_hold bit.
    -            /// Can be configured in CONF state.
    -            CS_HOLD_TIME: u5,
    -            /// The length in bits of address phase. The register value shall be (bit_num-1).
    -            /// Can be configured in CONF state.
    -            USR_ADDR_BITLEN: u5,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x60024018
    -        /// SPI USER control register 2
    -        pub const USER2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of command. Can be configured in CONF state.
    -            USR_COMMAND_VALUE: u16,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            /// 1: SPI transfer is ended when SPI TX AFIFO read empty error is valid in GP-SPI
    -            /// master FD/HD-mode. 0: SPI transfer is not ended when SPI TX AFIFO read empty
    -            /// error is valid in GP-SPI master FD/HD-mode.
    -            MST_REMPTY_ERR_END_EN: u1,
    -            /// The length in bits of command phase. The register value shall be (bit_num-1).
    -            /// Can be configured in CONF state.
    -            USR_COMMAND_BITLEN: u4,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x6002401c
    -        /// SPI data bit length control register
    -        pub const MS_DLEN = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The value of these bits is the configured SPI transmission data bit length in
    -            /// master mode DMA controlled transfer or CPU controlled transfer. The value is
    -            /// also the configured bit length in slave mode DMA RX controlled transfer. The
    -            /// register value shall be (bit_num-1). Can be configured in CONF state.
    -            MS_DATA_BITLEN: u18,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x60024020
    -        /// SPI misc register
    -        pub const MISC = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// SPI CS0 pin enable, 1: disable CS0, 0: spi_cs0 signal is from/to CS0 pin. Can be
    -            /// configured in CONF state.
    -            CS0_DIS: u1,
    -            /// SPI CS1 pin enable, 1: disable CS1, 0: spi_cs1 signal is from/to CS1 pin. Can be
    -            /// configured in CONF state.
    -            CS1_DIS: u1,
    -            /// SPI CS2 pin enable, 1: disable CS2, 0: spi_cs2 signal is from/to CS2 pin. Can be
    -            /// configured in CONF state.
    -            CS2_DIS: u1,
    -            /// SPI CS3 pin enable, 1: disable CS3, 0: spi_cs3 signal is from/to CS3 pin. Can be
    -            /// configured in CONF state.
    -            CS3_DIS: u1,
    -            /// SPI CS4 pin enable, 1: disable CS4, 0: spi_cs4 signal is from/to CS4 pin. Can be
    -            /// configured in CONF state.
    -            CS4_DIS: u1,
    -            /// SPI CS5 pin enable, 1: disable CS5, 0: spi_cs5 signal is from/to CS5 pin. Can be
    -            /// configured in CONF state.
    -            CS5_DIS: u1,
    -            /// 1: spi clk out disable, 0: spi clk out enable. Can be configured in CONF state.
    -            CK_DIS: u1,
    -            /// In the master mode the bits are the polarity of spi cs line, the value is
    -            /// equivalent to spi_cs ^ spi_master_cs_pol. Can be configured in CONF state.
    -            MASTER_CS_POL: u6,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            /// spi slave input cs polarity select. 1: inv 0: not change. Can be configured in
    -            /// CONF state.
    -            SLAVE_CS_POL: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            /// 1: spi clk line is high when idle 0: spi clk line is low when idle. Can be
    -            /// configured in CONF state.
    -            CK_IDLE_EDGE: u1,
    -            /// spi cs line keep low when the bit is set. Can be configured in CONF state.
    -            CS_KEEP_ACTIVE: u1,
    -            /// 1: spi quad input swap enable 0: spi quad input swap disable. Can be configured
    -            /// in CONF state.
    -            QUAD_DIN_PIN_SWAP: u1,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x60024024
    -        /// SPI input delay mode configuration
    -        pub const DIN_MODE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// the input signals are delayed by SPI module clock cycles, 0: input without
    -            /// delayed, 1: input with the posedge of clk_apb,2 input with the negedge of
    -            /// clk_apb, 3: input with the spi_clk. Can be configured in CONF state.
    -            DIN0_MODE: u2,
    -            /// the input signals are delayed by SPI module clock cycles, 0: input without
    -            /// delayed, 1: input with the posedge of clk_apb,2 input with the negedge of
    -            /// clk_apb, 3: input with the spi_clk. Can be configured in CONF state.
    -            DIN1_MODE: u2,
    -            /// the input signals are delayed by SPI module clock cycles, 0: input without
    -            /// delayed, 1: input with the posedge of clk_apb,2 input with the negedge of
    -            /// clk_apb, 3: input with the spi_clk. Can be configured in CONF state.
    -            DIN2_MODE: u2,
    -            /// the input signals are delayed by SPI module clock cycles, 0: input without
    -            /// delayed, 1: input with the posedge of clk_apb,2 input with the negedge of
    -            /// clk_apb, 3: input with the spi_clk. Can be configured in CONF state.
    -            DIN3_MODE: u2,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            /// 1:enable hclk in SPI input timing module. 0: disable it. Can be configured in
    -            /// CONF state.
    -            TIMING_HCLK_ACTIVE: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x60024028
    -        /// SPI input delay number configuration
    -        pub const DIN_NUM = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle,
    -            /// 1: delayed by 2 cycles,... Can be configured in CONF state.
    -            DIN0_NUM: u2,
    -            /// the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle,
    -            /// 1: delayed by 2 cycles,... Can be configured in CONF state.
    -            DIN1_NUM: u2,
    -            /// the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle,
    -            /// 1: delayed by 2 cycles,... Can be configured in CONF state.
    -            DIN2_NUM: u2,
    -            /// the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle,
    -            /// 1: delayed by 2 cycles,... Can be configured in CONF state.
    -            DIN3_NUM: u2,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x6002402c
    -        /// SPI output delay mode configuration
    -        pub const DOUT_MODE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The output signal 0 is delayed by the SPI module clock, 0: output without
    -            /// delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can
    -            /// be configured in CONF state.
    -            DOUT0_MODE: u1,
    -            /// The output signal 1 is delayed by the SPI module clock, 0: output without
    -            /// delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can
    -            /// be configured in CONF state.
    -            DOUT1_MODE: u1,
    -            /// The output signal 2 is delayed by the SPI module clock, 0: output without
    -            /// delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can
    -            /// be configured in CONF state.
    -            DOUT2_MODE: u1,
    -            /// The output signal 3 is delayed by the SPI module clock, 0: output without
    -            /// delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can
    -            /// be configured in CONF state.
    -            DOUT3_MODE: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x60024030
    -        /// SPI DMA control register
    -        pub const DMA_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            /// Enable dma segment transfer in spi dma half slave mode. 1: enable. 0: disable.
    -            DMA_SLV_SEG_TRANS_EN: u1,
    -            /// 1: spi_dma_infifo_full_vld is cleared by spi slave cmd 5. 0:
    -            /// spi_dma_infifo_full_vld is cleared by spi_trans_done.
    -            SLV_RX_SEG_TRANS_CLR_EN: u1,
    -            /// 1: spi_dma_outfifo_empty_vld is cleared by spi slave cmd 6. 0:
    -            /// spi_dma_outfifo_empty_vld is cleared by spi_trans_done.
    -            SLV_TX_SEG_TRANS_CLR_EN: u1,
    -            /// 1: spi_dma_inlink_eof is set when the number of dma pushed data bytes is equal
    -            /// to the value of spi_slv/mst_dma_rd_bytelen[19:0] in spi dma transition. 0:
    -            /// spi_dma_inlink_eof is set by spi_trans_done in non-seg-trans or
    -            /// spi_dma_seg_trans_done in seg-trans.
    -            RX_EOF_EN: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            /// Set this bit to enable SPI DMA controlled receive data mode.
    -            DMA_RX_ENA: u1,
    -            /// Set this bit to enable SPI DMA controlled send data mode.
    -            DMA_TX_ENA: u1,
    -            /// Set this bit to reset RX AFIFO, which is used to receive data in SPI master and
    -            /// slave mode transfer.
    -            RX_AFIFO_RST: u1,
    -            /// Set this bit to reset BUF TX AFIFO, which is used send data out in SPI slave CPU
    -            /// controlled mode transfer and master mode transfer.
    -            BUF_AFIFO_RST: u1,
    -            /// Set this bit to reset DMA TX AFIFO, which is used to send data out in SPI slave
    -            /// DMA controlled mode transfer.
    -            DMA_AFIFO_RST: u1,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x60024034
    -        /// SPI DMA interrupt enable register
    -        pub const DMA_INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The enable bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt.
    -            DMA_INFIFO_FULL_ERR_INT_ENA: u1,
    -            /// The enable bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt.
    -            DMA_OUTFIFO_EMPTY_ERR_INT_ENA: u1,
    -            /// The enable bit for SPI slave Ex_QPI interrupt.
    -            SLV_EX_QPI_INT_ENA: u1,
    -            /// The enable bit for SPI slave En_QPI interrupt.
    -            SLV_EN_QPI_INT_ENA: u1,
    -            /// The enable bit for SPI slave CMD7 interrupt.
    -            SLV_CMD7_INT_ENA: u1,
    -            /// The enable bit for SPI slave CMD8 interrupt.
    -            SLV_CMD8_INT_ENA: u1,
    -            /// The enable bit for SPI slave CMD9 interrupt.
    -            SLV_CMD9_INT_ENA: u1,
    -            /// The enable bit for SPI slave CMDA interrupt.
    -            SLV_CMDA_INT_ENA: u1,
    -            /// The enable bit for SPI_SLV_RD_DMA_DONE_INT interrupt.
    -            SLV_RD_DMA_DONE_INT_ENA: u1,
    -            /// The enable bit for SPI_SLV_WR_DMA_DONE_INT interrupt.
    -            SLV_WR_DMA_DONE_INT_ENA: u1,
    -            /// The enable bit for SPI_SLV_RD_BUF_DONE_INT interrupt.
    -            SLV_RD_BUF_DONE_INT_ENA: u1,
    -            /// The enable bit for SPI_SLV_WR_BUF_DONE_INT interrupt.
    -            SLV_WR_BUF_DONE_INT_ENA: u1,
    -            /// The enable bit for SPI_TRANS_DONE_INT interrupt.
    -            TRANS_DONE_INT_ENA: u1,
    -            /// The enable bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt.
    -            DMA_SEG_TRANS_DONE_INT_ENA: u1,
    -            /// The enable bit for SPI_SEG_MAGIC_ERR_INT interrupt.
    -            SEG_MAGIC_ERR_INT_ENA: u1,
    -            /// The enable bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt.
    -            SLV_BUF_ADDR_ERR_INT_ENA: u1,
    -            /// The enable bit for SPI_SLV_CMD_ERR_INT interrupt.
    -            SLV_CMD_ERR_INT_ENA: u1,
    -            /// The enable bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt.
    -            MST_RX_AFIFO_WFULL_ERR_INT_ENA: u1,
    -            /// The enable bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt.
    -            MST_TX_AFIFO_REMPTY_ERR_INT_ENA: u1,
    -            /// The enable bit for SPI_APP2_INT interrupt.
    -            APP2_INT_ENA: u1,
    -            /// The enable bit for SPI_APP1_INT interrupt.
    -            APP1_INT_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x60024038
    -        /// SPI DMA interrupt clear register
    -        pub const DMA_INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The clear bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt.
    -            DMA_INFIFO_FULL_ERR_INT_CLR: u1,
    -            /// The clear bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt.
    -            DMA_OUTFIFO_EMPTY_ERR_INT_CLR: u1,
    -            /// The clear bit for SPI slave Ex_QPI interrupt.
    -            SLV_EX_QPI_INT_CLR: u1,
    -            /// The clear bit for SPI slave En_QPI interrupt.
    -            SLV_EN_QPI_INT_CLR: u1,
    -            /// The clear bit for SPI slave CMD7 interrupt.
    -            SLV_CMD7_INT_CLR: u1,
    -            /// The clear bit for SPI slave CMD8 interrupt.
    -            SLV_CMD8_INT_CLR: u1,
    -            /// The clear bit for SPI slave CMD9 interrupt.
    -            SLV_CMD9_INT_CLR: u1,
    -            /// The clear bit for SPI slave CMDA interrupt.
    -            SLV_CMDA_INT_CLR: u1,
    -            /// The clear bit for SPI_SLV_RD_DMA_DONE_INT interrupt.
    -            SLV_RD_DMA_DONE_INT_CLR: u1,
    -            /// The clear bit for SPI_SLV_WR_DMA_DONE_INT interrupt.
    -            SLV_WR_DMA_DONE_INT_CLR: u1,
    -            /// The clear bit for SPI_SLV_RD_BUF_DONE_INT interrupt.
    -            SLV_RD_BUF_DONE_INT_CLR: u1,
    -            /// The clear bit for SPI_SLV_WR_BUF_DONE_INT interrupt.
    -            SLV_WR_BUF_DONE_INT_CLR: u1,
    -            /// The clear bit for SPI_TRANS_DONE_INT interrupt.
    -            TRANS_DONE_INT_CLR: u1,
    -            /// The clear bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt.
    -            DMA_SEG_TRANS_DONE_INT_CLR: u1,
    -            /// The clear bit for SPI_SEG_MAGIC_ERR_INT interrupt.
    -            SEG_MAGIC_ERR_INT_CLR: u1,
    -            /// The clear bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt.
    -            SLV_BUF_ADDR_ERR_INT_CLR: u1,
    -            /// The clear bit for SPI_SLV_CMD_ERR_INT interrupt.
    -            SLV_CMD_ERR_INT_CLR: u1,
    -            /// The clear bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt.
    -            MST_RX_AFIFO_WFULL_ERR_INT_CLR: u1,
    -            /// The clear bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt.
    -            MST_TX_AFIFO_REMPTY_ERR_INT_CLR: u1,
    -            /// The clear bit for SPI_APP2_INT interrupt.
    -            APP2_INT_CLR: u1,
    -            /// The clear bit for SPI_APP1_INT interrupt.
    -            APP1_INT_CLR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x6002403c
    -        /// SPI DMA interrupt raw register
    -        pub const DMA_INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 1: The current data rate of DMA Rx is smaller than that of SPI, which will lose
    -            /// the receive data. 0: Others.
    -            DMA_INFIFO_FULL_ERR_INT_RAW: u1,
    -            /// 1: The current data rate of DMA TX is smaller than that of SPI. SPI will stop in
    -            /// master mode and send out all 0 in slave mode. 0: Others.
    -            DMA_OUTFIFO_EMPTY_ERR_INT_RAW: u1,
    -            /// The raw bit for SPI slave Ex_QPI interrupt. 1: SPI slave mode Ex_QPI
    -            /// transmission is ended. 0: Others.
    -            SLV_EX_QPI_INT_RAW: u1,
    -            /// The raw bit for SPI slave En_QPI interrupt. 1: SPI slave mode En_QPI
    -            /// transmission is ended. 0: Others.
    -            SLV_EN_QPI_INT_RAW: u1,
    -            /// The raw bit for SPI slave CMD7 interrupt. 1: SPI slave mode CMD7 transmission is
    -            /// ended. 0: Others.
    -            SLV_CMD7_INT_RAW: u1,
    -            /// The raw bit for SPI slave CMD8 interrupt. 1: SPI slave mode CMD8 transmission is
    -            /// ended. 0: Others.
    -            SLV_CMD8_INT_RAW: u1,
    -            /// The raw bit for SPI slave CMD9 interrupt. 1: SPI slave mode CMD9 transmission is
    -            /// ended. 0: Others.
    -            SLV_CMD9_INT_RAW: u1,
    -            /// The raw bit for SPI slave CMDA interrupt. 1: SPI slave mode CMDA transmission is
    -            /// ended. 0: Others.
    -            SLV_CMDA_INT_RAW: u1,
    -            /// The raw bit for SPI_SLV_RD_DMA_DONE_INT interrupt. 1: SPI slave mode Rd_DMA
    -            /// transmission is ended. 0: Others.
    -            SLV_RD_DMA_DONE_INT_RAW: u1,
    -            /// The raw bit for SPI_SLV_WR_DMA_DONE_INT interrupt. 1: SPI slave mode Wr_DMA
    -            /// transmission is ended. 0: Others.
    -            SLV_WR_DMA_DONE_INT_RAW: u1,
    -            /// The raw bit for SPI_SLV_RD_BUF_DONE_INT interrupt. 1: SPI slave mode Rd_BUF
    -            /// transmission is ended. 0: Others.
    -            SLV_RD_BUF_DONE_INT_RAW: u1,
    -            /// The raw bit for SPI_SLV_WR_BUF_DONE_INT interrupt. 1: SPI slave mode Wr_BUF
    -            /// transmission is ended. 0: Others.
    -            SLV_WR_BUF_DONE_INT_RAW: u1,
    -            /// The raw bit for SPI_TRANS_DONE_INT interrupt. 1: SPI master mode transmission is
    -            /// ended. 0: others.
    -            TRANS_DONE_INT_RAW: u1,
    -            /// The raw bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt. 1: spi master DMA
    -            /// full-duplex/half-duplex seg-conf-trans ends or slave half-duplex seg-trans ends.
    -            /// And data has been pushed to corresponding memory. 0: seg-conf-trans or seg-trans
    -            /// is not ended or not occurred.
    -            DMA_SEG_TRANS_DONE_INT_RAW: u1,
    -            /// The raw bit for SPI_SEG_MAGIC_ERR_INT interrupt. 1: The magic value in CONF
    -            /// buffer is error in the DMA seg-conf-trans. 0: others.
    -            SEG_MAGIC_ERR_INT_RAW: u1,
    -            /// The raw bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt. 1: The accessing data
    -            /// address of the current SPI slave mode CPU controlled FD, Wr_BUF or Rd_BUF
    -            /// transmission is bigger than 63. 0: Others.
    -            SLV_BUF_ADDR_ERR_INT_RAW: u1,
    -            /// The raw bit for SPI_SLV_CMD_ERR_INT interrupt. 1: The slave command value in the
    -            /// current SPI slave HD mode transmission is not supported. 0: Others.
    -            SLV_CMD_ERR_INT_RAW: u1,
    -            /// The raw bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt. 1: There is a RX AFIFO
    -            /// write-full error when SPI inputs data in master mode. 0: Others.
    -            MST_RX_AFIFO_WFULL_ERR_INT_RAW: u1,
    -            /// The raw bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt. 1: There is a TX BUF
    -            /// AFIFO read-empty error when SPI outputs data in master mode. 0: Others.
    -            MST_TX_AFIFO_REMPTY_ERR_INT_RAW: u1,
    -            /// The raw bit for SPI_APP2_INT interrupt. The value is only controlled by
    -            /// application.
    -            APP2_INT_RAW: u1,
    -            /// The raw bit for SPI_APP1_INT interrupt. The value is only controlled by
    -            /// application.
    -            APP1_INT_RAW: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x60024040
    -        /// SPI DMA interrupt status register
    -        pub const DMA_INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The status bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt.
    -            DMA_INFIFO_FULL_ERR_INT_ST: u1,
    -            /// The status bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt.
    -            DMA_OUTFIFO_EMPTY_ERR_INT_ST: u1,
    -            /// The status bit for SPI slave Ex_QPI interrupt.
    -            SLV_EX_QPI_INT_ST: u1,
    -            /// The status bit for SPI slave En_QPI interrupt.
    -            SLV_EN_QPI_INT_ST: u1,
    -            /// The status bit for SPI slave CMD7 interrupt.
    -            SLV_CMD7_INT_ST: u1,
    -            /// The status bit for SPI slave CMD8 interrupt.
    -            SLV_CMD8_INT_ST: u1,
    -            /// The status bit for SPI slave CMD9 interrupt.
    -            SLV_CMD9_INT_ST: u1,
    -            /// The status bit for SPI slave CMDA interrupt.
    -            SLV_CMDA_INT_ST: u1,
    -            /// The status bit for SPI_SLV_RD_DMA_DONE_INT interrupt.
    -            SLV_RD_DMA_DONE_INT_ST: u1,
    -            /// The status bit for SPI_SLV_WR_DMA_DONE_INT interrupt.
    -            SLV_WR_DMA_DONE_INT_ST: u1,
    -            /// The status bit for SPI_SLV_RD_BUF_DONE_INT interrupt.
    -            SLV_RD_BUF_DONE_INT_ST: u1,
    -            /// The status bit for SPI_SLV_WR_BUF_DONE_INT interrupt.
    -            SLV_WR_BUF_DONE_INT_ST: u1,
    -            /// The status bit for SPI_TRANS_DONE_INT interrupt.
    -            TRANS_DONE_INT_ST: u1,
    -            /// The status bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt.
    -            DMA_SEG_TRANS_DONE_INT_ST: u1,
    -            /// The status bit for SPI_SEG_MAGIC_ERR_INT interrupt.
    -            SEG_MAGIC_ERR_INT_ST: u1,
    -            /// The status bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt.
    -            SLV_BUF_ADDR_ERR_INT_ST: u1,
    -            /// The status bit for SPI_SLV_CMD_ERR_INT interrupt.
    -            SLV_CMD_ERR_INT_ST: u1,
    -            /// The status bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt.
    -            MST_RX_AFIFO_WFULL_ERR_INT_ST: u1,
    -            /// The status bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt.
    -            MST_TX_AFIFO_REMPTY_ERR_INT_ST: u1,
    -            /// The status bit for SPI_APP2_INT interrupt.
    -            APP2_INT_ST: u1,
    -            /// The status bit for SPI_APP1_INT interrupt.
    -            APP1_INT_ST: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x60024098
    -        /// SPI CPU-controlled buffer0
    -        pub const W0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF0: u32,
    -        }), base_address + 0x98);
    -
    -        /// address: 0x6002409c
    -        /// SPI CPU-controlled buffer1
    -        pub const W1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF1: u32,
    -        }), base_address + 0x9c);
    -
    -        /// address: 0x600240a0
    -        /// SPI CPU-controlled buffer2
    -        pub const W2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF2: u32,
    -        }), base_address + 0xa0);
    -
    -        /// address: 0x600240a4
    -        /// SPI CPU-controlled buffer3
    -        pub const W3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF3: u32,
    -        }), base_address + 0xa4);
    -
    -        /// address: 0x600240a8
    -        /// SPI CPU-controlled buffer4
    -        pub const W4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF4: u32,
    -        }), base_address + 0xa8);
    -
    -        /// address: 0x600240ac
    -        /// SPI CPU-controlled buffer5
    -        pub const W5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF5: u32,
    -        }), base_address + 0xac);
    -
    -        /// address: 0x600240b0
    -        /// SPI CPU-controlled buffer6
    -        pub const W6 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF6: u32,
    -        }), base_address + 0xb0);
    -
    -        /// address: 0x600240b4
    -        /// SPI CPU-controlled buffer7
    -        pub const W7 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF7: u32,
    -        }), base_address + 0xb4);
    -
    -        /// address: 0x600240b8
    -        /// SPI CPU-controlled buffer8
    -        pub const W8 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF8: u32,
    -        }), base_address + 0xb8);
    -
    -        /// address: 0x600240bc
    -        /// SPI CPU-controlled buffer9
    -        pub const W9 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF9: u32,
    -        }), base_address + 0xbc);
    -
    -        /// address: 0x600240c0
    -        /// SPI CPU-controlled buffer10
    -        pub const W10 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF10: u32,
    -        }), base_address + 0xc0);
    -
    -        /// address: 0x600240c4
    -        /// SPI CPU-controlled buffer11
    -        pub const W11 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF11: u32,
    -        }), base_address + 0xc4);
    -
    -        /// address: 0x600240c8
    -        /// SPI CPU-controlled buffer12
    -        pub const W12 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF12: u32,
    -        }), base_address + 0xc8);
    -
    -        /// address: 0x600240cc
    -        /// SPI CPU-controlled buffer13
    -        pub const W13 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF13: u32,
    -        }), base_address + 0xcc);
    -
    -        /// address: 0x600240d0
    -        /// SPI CPU-controlled buffer14
    -        pub const W14 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF14: u32,
    -        }), base_address + 0xd0);
    -
    -        /// address: 0x600240d4
    -        /// SPI CPU-controlled buffer15
    -        pub const W15 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// data buffer
    -            BUF15: u32,
    -        }), base_address + 0xd4);
    -
    -        /// address: 0x600240e0
    -        /// SPI slave control register
    -        pub const SLAVE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is
    -            /// delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS
    -            /// inactive 3: SPI clock is alwasy on. Can be configured in CONF state.
    -            CLK_MODE: u2,
    -            /// {CPOL, CPHA},1: support spi clk mode 1 and 3, first edge output data B[0]/B[7].
    -            /// 0: support spi clk mode 0 and 2, first edge output data B[1]/B[6].
    -            CLK_MODE_13: u1,
    -            /// It saves half a cycle when tsck is the same as rsck. 1: output data at rsck
    -            /// posedge 0: output data at tsck posedge
    -            RSCK_DATA_OUT: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            /// 1: SPI_SLV_DATA_BITLEN stores data bit length of master-read-slave data length
    -            /// in DMA controlled mode(Rd_DMA). 0: others
    -            SLV_RDDMA_BITLEN_EN: u1,
    -            /// 1: SPI_SLV_DATA_BITLEN stores data bit length of master-write-to-slave data
    -            /// length in DMA controlled mode(Wr_DMA). 0: others
    -            SLV_WRDMA_BITLEN_EN: u1,
    -            /// 1: SPI_SLV_DATA_BITLEN stores data bit length of master-read-slave data length
    -            /// in CPU controlled mode(Rd_BUF). 0: others
    -            SLV_RDBUF_BITLEN_EN: u1,
    -            /// 1: SPI_SLV_DATA_BITLEN stores data bit length of master-write-to-slave data
    -            /// length in CPU controlled mode(Wr_BUF). 0: others
    -            SLV_WRBUF_BITLEN_EN: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            /// The magic value of BM table in master DMA seg-trans.
    -            DMA_SEG_MAGIC_VALUE: u4,
    -            /// Set SPI work mode. 1: slave mode 0: master mode.
    -            MODE: u1,
    -            /// Software reset enable, reset the spi clock line cs line and data lines. Can be
    -            /// configured in CONF state.
    -            SOFT_RESET: u1,
    -            /// 1: Enable the DMA CONF phase of current seg-trans operation, which means
    -            /// seg-trans will start. 0: This is not seg-trans mode.
    -            USR_CONF: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -        }), base_address + 0xe0);
    -
    -        /// address: 0x600240e4
    -        /// SPI slave control register 1
    -        pub const SLAVE1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The transferred data bit length in SPI slave FD and HD mode.
    -            SLV_DATA_BITLEN: u18,
    -            /// In the slave mode it is the value of command.
    -            SLV_LAST_COMMAND: u8,
    -            /// In the slave mode it is the value of address.
    -            SLV_LAST_ADDR: u6,
    -        }), base_address + 0xe4);
    -
    -        /// address: 0x600240e8
    -        /// SPI module clock and register clock control
    -        pub const CLK_GATE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Set this bit to enable clk gate
    -            CLK_EN: u1,
    -            /// Set this bit to power on the SPI module clock.
    -            MST_CLK_ACTIVE: u1,
    -            /// This bit is used to select SPI module clock source in master mode. 1:
    -            /// PLL_CLK_80M. 0: XTAL CLK.
    -            MST_CLK_SEL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -        }), base_address + 0xe8);
    -
    -        /// address: 0x600240f0
    -        /// Version control
    -        pub const DATE = @intToPtr(*volatile MmioInt(32, u28), base_address + 0xf0);
    -    };
    -
    -    /// System
    -    pub const SYSTEM = struct {
    -        pub const base_address = 0x600c0000;
    -
    -        /// address: 0x600c0000
    -        /// cpu_peripheral clock gating register
    -        pub const CPU_PERI_CLK_EN = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            /// reg_clk_en_assist_debug
    -            CLK_EN_ASSIST_DEBUG: u1,
    -            /// reg_clk_en_dedicated_gpio
    -            CLK_EN_DEDICATED_GPIO: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x600c0004
    -        /// cpu_peripheral reset register
    -        pub const CPU_PERI_RST_EN = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            /// reg_rst_en_assist_debug
    -            RST_EN_ASSIST_DEBUG: u1,
    -            /// reg_rst_en_dedicated_gpio
    -            RST_EN_DEDICATED_GPIO: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x600c0008
    -        /// cpu clock config register
    -        pub const CPU_PER_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_cpuperiod_sel
    -            CPUPERIOD_SEL: u2,
    -            /// reg_pll_freq_sel
    -            PLL_FREQ_SEL: u1,
    -            /// reg_cpu_wait_mode_force_on
    -            CPU_WAIT_MODE_FORCE_ON: u1,
    -            /// reg_cpu_waiti_delay_num
    -            CPU_WAITI_DELAY_NUM: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x600c000c
    -        /// memory power down mask register
    -        pub const MEM_PD_MASK = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_lslp_mem_pd_mask
    -            LSLP_MEM_PD_MASK: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x600c0010
    -        /// peripheral clock gating register
    -        pub const PERIP_CLK_EN0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_timers_clk_en
    -            TIMERS_CLK_EN: u1,
    -            /// reg_spi01_clk_en
    -            SPI01_CLK_EN: u1,
    -            /// reg_uart_clk_en
    -            UART_CLK_EN: u1,
    -            /// reg_wdg_clk_en
    -            WDG_CLK_EN: u1,
    -            /// reg_i2s0_clk_en
    -            I2S0_CLK_EN: u1,
    -            /// reg_uart1_clk_en
    -            UART1_CLK_EN: u1,
    -            /// reg_spi2_clk_en
    -            SPI2_CLK_EN: u1,
    -            /// reg_ext0_clk_en
    -            I2C_EXT0_CLK_EN: u1,
    -            /// reg_uhci0_clk_en
    -            UHCI0_CLK_EN: u1,
    -            /// reg_rmt_clk_en
    -            RMT_CLK_EN: u1,
    -            /// reg_pcnt_clk_en
    -            PCNT_CLK_EN: u1,
    -            /// reg_ledc_clk_en
    -            LEDC_CLK_EN: u1,
    -            /// reg_uhci1_clk_en
    -            UHCI1_CLK_EN: u1,
    -            /// reg_timergroup_clk_en
    -            TIMERGROUP_CLK_EN: u1,
    -            /// reg_efuse_clk_en
    -            EFUSE_CLK_EN: u1,
    -            /// reg_timergroup1_clk_en
    -            TIMERGROUP1_CLK_EN: u1,
    -            /// reg_spi3_clk_en
    -            SPI3_CLK_EN: u1,
    -            /// reg_pwm0_clk_en
    -            PWM0_CLK_EN: u1,
    -            /// reg_ext1_clk_en
    -            EXT1_CLK_EN: u1,
    -            /// reg_can_clk_en
    -            CAN_CLK_EN: u1,
    -            /// reg_pwm1_clk_en
    -            PWM1_CLK_EN: u1,
    -            /// reg_i2s1_clk_en
    -            I2S1_CLK_EN: u1,
    -            /// reg_spi2_dma_clk_en
    -            SPI2_DMA_CLK_EN: u1,
    -            /// reg_usb_device_clk_en
    -            USB_DEVICE_CLK_EN: u1,
    -            /// reg_uart_mem_clk_en
    -            UART_MEM_CLK_EN: u1,
    -            /// reg_pwm2_clk_en
    -            PWM2_CLK_EN: u1,
    -            /// reg_pwm3_clk_en
    -            PWM3_CLK_EN: u1,
    -            /// reg_spi3_dma_clk_en
    -            SPI3_DMA_CLK_EN: u1,
    -            /// reg_apb_saradc_clk_en
    -            APB_SARADC_CLK_EN: u1,
    -            /// reg_systimer_clk_en
    -            SYSTIMER_CLK_EN: u1,
    -            /// reg_adc2_arb_clk_en
    -            ADC2_ARB_CLK_EN: u1,
    -            /// reg_spi4_clk_en
    -            SPI4_CLK_EN: u1,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x600c0014
    -        /// peripheral clock gating register
    -        pub const PERIP_CLK_EN1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            /// reg_crypto_aes_clk_en
    -            CRYPTO_AES_CLK_EN: u1,
    -            /// reg_crypto_sha_clk_en
    -            CRYPTO_SHA_CLK_EN: u1,
    -            /// reg_crypto_rsa_clk_en
    -            CRYPTO_RSA_CLK_EN: u1,
    -            /// reg_crypto_ds_clk_en
    -            CRYPTO_DS_CLK_EN: u1,
    -            /// reg_crypto_hmac_clk_en
    -            CRYPTO_HMAC_CLK_EN: u1,
    -            /// reg_dma_clk_en
    -            DMA_CLK_EN: u1,
    -            /// reg_sdio_host_clk_en
    -            SDIO_HOST_CLK_EN: u1,
    -            /// reg_lcd_cam_clk_en
    -            LCD_CAM_CLK_EN: u1,
    -            /// reg_uart2_clk_en
    -            UART2_CLK_EN: u1,
    -            /// reg_tsens_clk_en
    -            TSENS_CLK_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x600c0018
    -        /// reserved
    -        pub const PERIP_RST_EN0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_timers_rst
    -            TIMERS_RST: u1,
    -            /// reg_spi01_rst
    -            SPI01_RST: u1,
    -            /// reg_uart_rst
    -            UART_RST: u1,
    -            /// reg_wdg_rst
    -            WDG_RST: u1,
    -            /// reg_i2s0_rst
    -            I2S0_RST: u1,
    -            /// reg_uart1_rst
    -            UART1_RST: u1,
    -            /// reg_spi2_rst
    -            SPI2_RST: u1,
    -            /// reg_ext0_rst
    -            I2C_EXT0_RST: u1,
    -            /// reg_uhci0_rst
    -            UHCI0_RST: u1,
    -            /// reg_rmt_rst
    -            RMT_RST: u1,
    -            /// reg_pcnt_rst
    -            PCNT_RST: u1,
    -            /// reg_ledc_rst
    -            LEDC_RST: u1,
    -            /// reg_uhci1_rst
    -            UHCI1_RST: u1,
    -            /// reg_timergroup_rst
    -            TIMERGROUP_RST: u1,
    -            /// reg_efuse_rst
    -            EFUSE_RST: u1,
    -            /// reg_timergroup1_rst
    -            TIMERGROUP1_RST: u1,
    -            /// reg_spi3_rst
    -            SPI3_RST: u1,
    -            /// reg_pwm0_rst
    -            PWM0_RST: u1,
    -            /// reg_ext1_rst
    -            EXT1_RST: u1,
    -            /// reg_can_rst
    -            CAN_RST: u1,
    -            /// reg_pwm1_rst
    -            PWM1_RST: u1,
    -            /// reg_i2s1_rst
    -            I2S1_RST: u1,
    -            /// reg_spi2_dma_rst
    -            SPI2_DMA_RST: u1,
    -            /// reg_usb_device_rst
    -            USB_DEVICE_RST: u1,
    -            /// reg_uart_mem_rst
    -            UART_MEM_RST: u1,
    -            /// reg_pwm2_rst
    -            PWM2_RST: u1,
    -            /// reg_pwm3_rst
    -            PWM3_RST: u1,
    -            /// reg_spi3_dma_rst
    -            SPI3_DMA_RST: u1,
    -            /// reg_apb_saradc_rst
    -            APB_SARADC_RST: u1,
    -            /// reg_systimer_rst
    -            SYSTIMER_RST: u1,
    -            /// reg_adc2_arb_rst
    -            ADC2_ARB_RST: u1,
    -            /// reg_spi4_rst
    -            SPI4_RST: u1,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x600c001c
    -        /// peripheral reset register
    -        pub const PERIP_RST_EN1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            /// reg_crypto_aes_rst
    -            CRYPTO_AES_RST: u1,
    -            /// reg_crypto_sha_rst
    -            CRYPTO_SHA_RST: u1,
    -            /// reg_crypto_rsa_rst
    -            CRYPTO_RSA_RST: u1,
    -            /// reg_crypto_ds_rst
    -            CRYPTO_DS_RST: u1,
    -            /// reg_crypto_hmac_rst
    -            CRYPTO_HMAC_RST: u1,
    -            /// reg_dma_rst
    -            DMA_RST: u1,
    -            /// reg_sdio_host_rst
    -            SDIO_HOST_RST: u1,
    -            /// reg_lcd_cam_rst
    -            LCD_CAM_RST: u1,
    -            /// reg_uart2_rst
    -            UART2_RST: u1,
    -            /// reg_tsens_rst
    -            TSENS_RST: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x600c0020
    -        /// clock config register
    -        pub const BT_LPCK_DIV_INT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_bt_lpck_div_num
    -            BT_LPCK_DIV_NUM: u12,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x600c0024
    -        /// clock config register
    -        pub const BT_LPCK_DIV_FRAC = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_bt_lpck_div_b
    -            BT_LPCK_DIV_B: u12,
    -            /// reg_bt_lpck_div_a
    -            BT_LPCK_DIV_A: u12,
    -            /// reg_lpclk_sel_rtc_slow
    -            LPCLK_SEL_RTC_SLOW: u1,
    -            /// reg_lpclk_sel_8m
    -            LPCLK_SEL_8M: u1,
    -            /// reg_lpclk_sel_xtal
    -            LPCLK_SEL_XTAL: u1,
    -            /// reg_lpclk_sel_xtal32k
    -            LPCLK_SEL_XTAL32K: u1,
    -            /// reg_lpclk_rtc_en
    -            LPCLK_RTC_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x600c0028
    -        /// interrupt generate register
    -        pub const CPU_INTR_FROM_CPU_0 = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x28);
    -
    -        /// address: 0x600c002c
    -        /// interrupt generate register
    -        pub const CPU_INTR_FROM_CPU_1 = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x2c);
    -
    -        /// address: 0x600c0030
    -        /// interrupt generate register
    -        pub const CPU_INTR_FROM_CPU_2 = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x30);
    -
    -        /// address: 0x600c0034
    -        /// interrupt generate register
    -        pub const CPU_INTR_FROM_CPU_3 = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x34);
    -
    -        /// address: 0x600c0038
    -        /// rsa memory power control register
    -        pub const RSA_PD_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_rsa_mem_pd
    -            RSA_MEM_PD: u1,
    -            /// reg_rsa_mem_force_pu
    -            RSA_MEM_FORCE_PU: u1,
    -            /// reg_rsa_mem_force_pd
    -            RSA_MEM_FORCE_PD: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x600c003c
    -        /// edma clcok and reset register
    -        pub const EDMA_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_edma_clk_on
    -            EDMA_CLK_ON: u1,
    -            /// reg_edma_reset
    -            EDMA_RESET: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x600c0040
    -        /// cache control register
    -        pub const CACHE_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_icache_clk_on
    -            ICACHE_CLK_ON: u1,
    -            /// reg_icache_reset
    -            ICACHE_RESET: u1,
    -            /// reg_dcache_clk_on
    -            DCACHE_CLK_ON: u1,
    -            /// reg_dcache_reset
    -            DCACHE_RESET: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x600c0044
    -        /// SYSTEM_EXTERNAL_DEVICE_ENCRYPT_DECRYPT_CONTROL_REG
    -        pub const EXTERNAL_DEVICE_ENCRYPT_DECRYPT_CONTROL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_enable_spi_manual_encrypt
    -            ENABLE_SPI_MANUAL_ENCRYPT: u1,
    -            /// reg_enable_download_db_encrypt
    -            ENABLE_DOWNLOAD_DB_ENCRYPT: u1,
    -            /// reg_enable_download_g0cb_decrypt
    -            ENABLE_DOWNLOAD_G0CB_DECRYPT: u1,
    -            /// reg_enable_download_manual_encrypt
    -            ENABLE_DOWNLOAD_MANUAL_ENCRYPT: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x600c0048
    -        /// fast memory config register
    -        pub const RTC_FASTMEM_CONFIG = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            /// reg_rtc_mem_crc_start
    -            RTC_MEM_CRC_START: u1,
    -            /// reg_rtc_mem_crc_addr
    -            RTC_MEM_CRC_ADDR: u11,
    -            /// reg_rtc_mem_crc_len
    -            RTC_MEM_CRC_LEN: u11,
    -            /// reg_rtc_mem_crc_finish
    -            RTC_MEM_CRC_FINISH: u1,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x600c004c
    -        /// reserved
    -        pub const RTC_FASTMEM_CRC = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_rtc_mem_crc_res
    -            RTC_MEM_CRC_RES: u32,
    -        }), base_address + 0x4c);
    -
    -        /// address: 0x600c0050
    -        /// eco register
    -        pub const REDUNDANT_ECO_CTRL = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_redundant_eco_drive
    -            REDUNDANT_ECO_DRIVE: u1,
    -            /// reg_redundant_eco_result
    -            REDUNDANT_ECO_RESULT: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x600c0054
    -        /// clock gating register
    -        pub const CLOCK_GATE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_clk_en
    -            CLK_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x600c0058
    -        /// system clock config register
    -        pub const SYSCLK_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_pre_div_cnt
    -            PRE_DIV_CNT: u10,
    -            /// reg_soc_clk_sel
    -            SOC_CLK_SEL: u2,
    -            /// reg_clk_xtal_freq
    -            CLK_XTAL_FREQ: u7,
    -            /// reg_clk_div_en
    -            CLK_DIV_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x600c005c
    -        /// mem pvt register
    -        pub const MEM_PVT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_mem_path_len
    -            MEM_PATH_LEN: u4,
    -            /// reg_mem_err_cnt_clr
    -            MEM_ERR_CNT_CLR: u1,
    -            /// reg_mem_pvt_monitor_en
    -            MONITOR_EN: u1,
    -            /// reg_mem_timing_err_cnt
    -            MEM_TIMING_ERR_CNT: u16,
    -            /// reg_mem_vt_sel
    -            MEM_VT_SEL: u2,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x600c0060
    -        /// mem pvt register
    -        pub const COMB_PVT_LVT_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_comb_path_len_lvt
    -            COMB_PATH_LEN_LVT: u5,
    -            /// reg_comb_err_cnt_clr_lvt
    -            COMB_ERR_CNT_CLR_LVT: u1,
    -            /// reg_comb_pvt_monitor_en_lvt
    -            COMB_PVT_MONITOR_EN_LVT: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x600c0064
    -        /// mem pvt register
    -        pub const COMB_PVT_NVT_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_comb_path_len_nvt
    -            COMB_PATH_LEN_NVT: u5,
    -            /// reg_comb_err_cnt_clr_nvt
    -            COMB_ERR_CNT_CLR_NVT: u1,
    -            /// reg_comb_pvt_monitor_en_nvt
    -            COMB_PVT_MONITOR_EN_NVT: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x600c0068
    -        /// mem pvt register
    -        pub const COMB_PVT_HVT_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_comb_path_len_hvt
    -            COMB_PATH_LEN_HVT: u5,
    -            /// reg_comb_err_cnt_clr_hvt
    -            COMB_ERR_CNT_CLR_HVT: u1,
    -            /// reg_comb_pvt_monitor_en_hvt
    -            COMB_PVT_MONITOR_EN_HVT: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x68);
    -
    -        /// address: 0x600c006c
    -        /// mem pvt register
    -        pub const COMB_PVT_ERR_LVT_SITE0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_comb_timing_err_cnt_lvt_site0
    -            COMB_TIMING_ERR_CNT_LVT_SITE0: u16,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x6c);
    -
    -        /// address: 0x600c0070
    -        /// mem pvt register
    -        pub const COMB_PVT_ERR_NVT_SITE0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_comb_timing_err_cnt_nvt_site0
    -            COMB_TIMING_ERR_CNT_NVT_SITE0: u16,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x70);
    -
    -        /// address: 0x600c0074
    -        /// mem pvt register
    -        pub const COMB_PVT_ERR_HVT_SITE0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_comb_timing_err_cnt_hvt_site0
    -            COMB_TIMING_ERR_CNT_HVT_SITE0: u16,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x74);
    -
    -        /// address: 0x600c0078
    -        /// mem pvt register
    -        pub const COMB_PVT_ERR_LVT_SITE1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_comb_timing_err_cnt_lvt_site1
    -            COMB_TIMING_ERR_CNT_LVT_SITE1: u16,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x78);
    -
    -        /// address: 0x600c007c
    -        /// mem pvt register
    -        pub const COMB_PVT_ERR_NVT_SITE1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_comb_timing_err_cnt_nvt_site1
    -            COMB_TIMING_ERR_CNT_NVT_SITE1: u16,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x7c);
    -
    -        /// address: 0x600c0080
    -        /// mem pvt register
    -        pub const COMB_PVT_ERR_HVT_SITE1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_comb_timing_err_cnt_hvt_site1
    -            COMB_TIMING_ERR_CNT_HVT_SITE1: u16,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x80);
    -
    -        /// address: 0x600c0084
    -        /// mem pvt register
    -        pub const COMB_PVT_ERR_LVT_SITE2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_comb_timing_err_cnt_lvt_site2
    -            COMB_TIMING_ERR_CNT_LVT_SITE2: u16,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x84);
    -
    -        /// address: 0x600c0088
    -        /// mem pvt register
    -        pub const COMB_PVT_ERR_NVT_SITE2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_comb_timing_err_cnt_nvt_site2
    -            COMB_TIMING_ERR_CNT_NVT_SITE2: u16,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x88);
    -
    -        /// address: 0x600c008c
    -        /// mem pvt register
    -        pub const COMB_PVT_ERR_HVT_SITE2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_comb_timing_err_cnt_hvt_site2
    -            COMB_TIMING_ERR_CNT_HVT_SITE2: u16,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x8c);
    -
    -        /// address: 0x600c0090
    -        /// mem pvt register
    -        pub const COMB_PVT_ERR_LVT_SITE3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_comb_timing_err_cnt_lvt_site3
    -            COMB_TIMING_ERR_CNT_LVT_SITE3: u16,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x90);
    -
    -        /// address: 0x600c0094
    -        /// mem pvt register
    -        pub const COMB_PVT_ERR_NVT_SITE3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_comb_timing_err_cnt_nvt_site3
    -            COMB_TIMING_ERR_CNT_NVT_SITE3: u16,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x94);
    -
    -        /// address: 0x600c0098
    -        /// mem pvt register
    -        pub const COMB_PVT_ERR_HVT_SITE3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_comb_timing_err_cnt_hvt_site3
    -            COMB_TIMING_ERR_CNT_HVT_SITE3: u16,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x98);
    -
    -        /// address: 0x600c0ffc
    -        /// Version register
    -        pub const SYSTEM_REG_DATE = @intToPtr(*volatile MmioInt(32, u28), base_address + 0xffc);
    -    };
    -
    -    /// System Timer
    -    pub const SYSTIMER = struct {
    -        pub const base_address = 0x60023000;
    -
    -        /// address: 0x60023000
    -        /// SYSTIMER_CONF.
    -        pub const CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// systimer clock force on
    -            SYSTIMER_CLK_FO: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            /// target2 work enable
    -            TARGET2_WORK_EN: u1,
    -            /// target1 work enable
    -            TARGET1_WORK_EN: u1,
    -            /// target0 work enable
    -            TARGET0_WORK_EN: u1,
    -            /// If timer unit1 is stalled when core1 stalled
    -            TIMER_UNIT1_CORE1_STALL_EN: u1,
    -            /// If timer unit1 is stalled when core0 stalled
    -            TIMER_UNIT1_CORE0_STALL_EN: u1,
    -            /// If timer unit0 is stalled when core1 stalled
    -            TIMER_UNIT0_CORE1_STALL_EN: u1,
    -            /// If timer unit0 is stalled when core0 stalled
    -            TIMER_UNIT0_CORE0_STALL_EN: u1,
    -            /// timer unit1 work enable
    -            TIMER_UNIT1_WORK_EN: u1,
    -            /// timer unit0 work enable
    -            TIMER_UNIT0_WORK_EN: u1,
    -            /// register file clk gating
    -            CLK_EN: u1,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x60023004
    -        /// SYSTIMER_UNIT0_OP.
    -        pub const UNIT0_OP = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            reserved23: u1,
    -            reserved24: u1,
    -            reserved25: u1,
    -            reserved26: u1,
    -            reserved27: u1,
    -            reserved28: u1,
    -            /// reg_timer_unit0_value_valid
    -            TIMER_UNIT0_VALUE_VALID: u1,
    -            /// update timer_unit0
    -            TIMER_UNIT0_UPDATE: u1,
    -            padding0: u1,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x60023008
    -        /// SYSTIMER_UNIT1_OP.
    -        pub const UNIT1_OP = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            reserved23: u1,
    -            reserved24: u1,
    -            reserved25: u1,
    -            reserved26: u1,
    -            reserved27: u1,
    -            reserved28: u1,
    -            /// timer value is sync and valid
    -            TIMER_UNIT1_VALUE_VALID: u1,
    -            /// update timer unit1
    -            TIMER_UNIT1_UPDATE: u1,
    -            padding0: u1,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x6002300c
    -        /// SYSTIMER_UNIT0_LOAD_HI.
    -        pub const UNIT0_LOAD_HI = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// timer unit0 load high 32 bit
    -            TIMER_UNIT0_LOAD_HI: u20,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x60023010
    -        /// SYSTIMER_UNIT0_LOAD_LO.
    -        pub const UNIT0_LOAD_LO = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// timer unit0 load low 32 bit
    -            TIMER_UNIT0_LOAD_LO: u32,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x60023014
    -        /// SYSTIMER_UNIT1_LOAD_HI.
    -        pub const UNIT1_LOAD_HI = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// timer unit1 load high 32 bit
    -            TIMER_UNIT1_LOAD_HI: u20,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x60023018
    -        /// SYSTIMER_UNIT1_LOAD_LO.
    -        pub const UNIT1_LOAD_LO = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// timer unit1 load low 32 bit
    -            TIMER_UNIT1_LOAD_LO: u32,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x6002301c
    -        /// SYSTIMER_TARGET0_HI.
    -        pub const TARGET0_HI = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// timer taget0 high 32 bit
    -            TIMER_TARGET0_HI: u20,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x60023020
    -        /// SYSTIMER_TARGET0_LO.
    -        pub const TARGET0_LO = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// timer taget0 low 32 bit
    -            TIMER_TARGET0_LO: u32,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x60023024
    -        /// SYSTIMER_TARGET1_HI.
    -        pub const TARGET1_HI = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// timer taget1 high 32 bit
    -            TIMER_TARGET1_HI: u20,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x60023028
    -        /// SYSTIMER_TARGET1_LO.
    -        pub const TARGET1_LO = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// timer taget1 low 32 bit
    -            TIMER_TARGET1_LO: u32,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x6002302c
    -        /// SYSTIMER_TARGET2_HI.
    -        pub const TARGET2_HI = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// timer taget2 high 32 bit
    -            TIMER_TARGET2_HI: u20,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x60023030
    -        /// SYSTIMER_TARGET2_LO.
    -        pub const TARGET2_LO = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// timer taget2 low 32 bit
    -            TIMER_TARGET2_LO: u32,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x60023034
    -        /// SYSTIMER_TARGET0_CONF.
    -        pub const TARGET0_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// target0 period
    -            TARGET0_PERIOD: u26,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            /// Set target0 to period mode
    -            TARGET0_PERIOD_MODE: u1,
    -            /// select which unit to compare
    -            TARGET0_TIMER_UNIT_SEL: u1,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x60023038
    -        /// SYSTIMER_TARGET1_CONF.
    -        pub const TARGET1_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// target1 period
    -            TARGET1_PERIOD: u26,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            /// Set target1 to period mode
    -            TARGET1_PERIOD_MODE: u1,
    -            /// select which unit to compare
    -            TARGET1_TIMER_UNIT_SEL: u1,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x6002303c
    -        /// SYSTIMER_TARGET2_CONF.
    -        pub const TARGET2_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// target2 period
    -            TARGET2_PERIOD: u26,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            /// Set target2 to period mode
    -            TARGET2_PERIOD_MODE: u1,
    -            /// select which unit to compare
    -            TARGET2_TIMER_UNIT_SEL: u1,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x60023040
    -        /// SYSTIMER_UNIT0_VALUE_HI.
    -        pub const UNIT0_VALUE_HI = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// timer read value high 32bit
    -            TIMER_UNIT0_VALUE_HI: u20,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x60023044
    -        /// SYSTIMER_UNIT0_VALUE_LO.
    -        pub const UNIT0_VALUE_LO = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// timer read value low 32bit
    -            TIMER_UNIT0_VALUE_LO: u32,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x60023048
    -        /// SYSTIMER_UNIT1_VALUE_HI.
    -        pub const UNIT1_VALUE_HI = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// timer read value high 32bit
    -            TIMER_UNIT1_VALUE_HI: u20,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x6002304c
    -        /// SYSTIMER_UNIT1_VALUE_LO.
    -        pub const UNIT1_VALUE_LO = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// timer read value low 32bit
    -            TIMER_UNIT1_VALUE_LO: u32,
    -        }), base_address + 0x4c);
    -
    -        /// address: 0x60023050
    -        /// SYSTIMER_COMP0_LOAD.
    -        pub const COMP0_LOAD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// timer comp0 load value
    -            TIMER_COMP0_LOAD: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x60023054
    -        /// SYSTIMER_COMP1_LOAD.
    -        pub const COMP1_LOAD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// timer comp1 load value
    -            TIMER_COMP1_LOAD: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x60023058
    -        /// SYSTIMER_COMP2_LOAD.
    -        pub const COMP2_LOAD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// timer comp2 load value
    -            TIMER_COMP2_LOAD: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x6002305c
    -        /// SYSTIMER_UNIT0_LOAD.
    -        pub const UNIT0_LOAD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// timer unit0 load value
    -            TIMER_UNIT0_LOAD: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x60023060
    -        /// SYSTIMER_UNIT1_LOAD.
    -        pub const UNIT1_LOAD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// timer unit1 load value
    -            TIMER_UNIT1_LOAD: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x60023064
    -        /// SYSTIMER_INT_ENA.
    -        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// interupt0 enable
    -            TARGET0_INT_ENA: u1,
    -            /// interupt1 enable
    -            TARGET1_INT_ENA: u1,
    -            /// interupt2 enable
    -            TARGET2_INT_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x60023068
    -        /// SYSTIMER_INT_RAW.
    -        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// interupt0 raw
    -            TARGET0_INT_RAW: u1,
    -            /// interupt1 raw
    -            TARGET1_INT_RAW: u1,
    -            /// interupt2 raw
    -            TARGET2_INT_RAW: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -        }), base_address + 0x68);
    -
    -        /// address: 0x6002306c
    -        /// SYSTIMER_INT_CLR.
    -        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// interupt0 clear
    -            TARGET0_INT_CLR: u1,
    -            /// interupt1 clear
    -            TARGET1_INT_CLR: u1,
    -            /// interupt2 clear
    -            TARGET2_INT_CLR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -        }), base_address + 0x6c);
    -
    -        /// address: 0x60023070
    -        /// SYSTIMER_INT_ST.
    -        pub const INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_target0_int_st
    -            TARGET0_INT_ST: u1,
    -            /// reg_target1_int_st
    -            TARGET1_INT_ST: u1,
    -            /// reg_target2_int_st
    -            TARGET2_INT_ST: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -        }), base_address + 0x70);
    -
    -        /// address: 0x600230fc
    -        /// SYSTIMER_DATE.
    -        pub const DATE = @intToPtr(*volatile u32, base_address + 0xfc);
    -    };
    -
    -    /// Timer Group
    -    pub const TIMG0 = struct {
    -        pub const base_address = 0x6001f000;
    -
    -        /// address: 0x6001f000
    -        /// TIMG_T0CONFIG_REG.
    -        pub const T0CONFIG = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            /// reg_t0_use_xtal.
    -            T0_USE_XTAL: u1,
    -            /// reg_t0_alarm_en.
    -            T0_ALARM_EN: u1,
    -            reserved9: u1,
    -            /// reg_t0_divcnt_rst.
    -            T0_DIVCNT_RST: u1,
    -            /// reg_t0_divider.
    -            T0_DIVIDER: u16,
    -            /// reg_t0_autoreload.
    -            T0_AUTORELOAD: u1,
    -            /// reg_t0_increase.
    -            T0_INCREASE: u1,
    -            /// reg_t0_en.
    -            T0_EN: u1,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x6001f004
    -        /// TIMG_T0LO_REG.
    -        pub const T0LO = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// t0_lo
    -            T0_LO: u32,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x6001f008
    -        /// TIMG_T0HI_REG.
    -        pub const T0HI = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// t0_hi
    -            T0_HI: u22,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x6001f00c
    -        /// TIMG_T0UPDATE_REG.
    -        pub const T0UPDATE = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            reserved23: u1,
    -            reserved24: u1,
    -            reserved25: u1,
    -            reserved26: u1,
    -            reserved27: u1,
    -            reserved28: u1,
    -            reserved29: u1,
    -            reserved30: u1,
    -            /// t0_update
    -            T0_UPDATE: u1,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x6001f010
    -        /// TIMG_T0ALARMLO_REG.
    -        pub const T0ALARMLO = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_t0_alarm_lo.
    -            T0_ALARM_LO: u32,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x6001f014
    -        /// TIMG_T0ALARMHI_REG.
    -        pub const T0ALARMHI = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_t0_alarm_hi.
    -            T0_ALARM_HI: u22,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x6001f018
    -        /// TIMG_T0LOADLO_REG.
    -        pub const T0LOADLO = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_t0_load_lo.
    -            T0_LOAD_LO: u32,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x6001f01c
    -        /// TIMG_T0LOADHI_REG.
    -        pub const T0LOADHI = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_t0_load_hi.
    -            T0_LOAD_HI: u22,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x6001f020
    -        /// TIMG_T0LOAD_REG.
    -        pub const T0LOAD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// t0_load
    -            T0_LOAD: u32,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x6001f048
    -        /// TIMG_WDTCONFIG0_REG.
    -        pub const WDTCONFIG0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            /// reg_wdt_appcpu_reset_en.
    -            WDT_APPCPU_RESET_EN: u1,
    -            /// reg_wdt_procpu_reset_en.
    -            WDT_PROCPU_RESET_EN: u1,
    -            /// reg_wdt_flashboot_mod_en.
    -            WDT_FLASHBOOT_MOD_EN: u1,
    -            /// reg_wdt_sys_reset_length.
    -            WDT_SYS_RESET_LENGTH: u3,
    -            /// reg_wdt_cpu_reset_length.
    -            WDT_CPU_RESET_LENGTH: u3,
    -            /// reg_wdt_use_xtal.
    -            WDT_USE_XTAL: u1,
    -            /// reg_wdt_conf_update_en.
    -            WDT_CONF_UPDATE_EN: u1,
    -            /// reg_wdt_stg3.
    -            WDT_STG3: u2,
    -            /// reg_wdt_stg2.
    -            WDT_STG2: u2,
    -            /// reg_wdt_stg1.
    -            WDT_STG1: u2,
    -            /// reg_wdt_stg0.
    -            WDT_STG0: u2,
    -            /// reg_wdt_en.
    -            WDT_EN: u1,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x6001f04c
    -        /// TIMG_WDTCONFIG1_REG.
    -        pub const WDTCONFIG1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_wdt_divcnt_rst.
    -            WDT_DIVCNT_RST: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            /// reg_wdt_clk_prescale.
    -            WDT_CLK_PRESCALE: u16,
    -        }), base_address + 0x4c);
    -
    -        /// address: 0x6001f050
    -        /// TIMG_WDTCONFIG2_REG.
    -        pub const WDTCONFIG2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_wdt_stg0_hold.
    -            WDT_STG0_HOLD: u32,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x6001f054
    -        /// TIMG_WDTCONFIG3_REG.
    -        pub const WDTCONFIG3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_wdt_stg1_hold.
    -            WDT_STG1_HOLD: u32,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x6001f058
    -        /// TIMG_WDTCONFIG4_REG.
    -        pub const WDTCONFIG4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_wdt_stg2_hold.
    -            WDT_STG2_HOLD: u32,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x6001f05c
    -        /// TIMG_WDTCONFIG5_REG.
    -        pub const WDTCONFIG5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_wdt_stg3_hold.
    -            WDT_STG3_HOLD: u32,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x6001f060
    -        /// TIMG_WDTFEED_REG.
    -        pub const WDTFEED = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// wdt_feed
    -            WDT_FEED: u32,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x6001f064
    -        /// TIMG_WDTWPROTECT_REG.
    -        pub const WDTWPROTECT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_wdt_wkey.
    -            WDT_WKEY: u32,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x6001f068
    -        /// TIMG_RTCCALICFG_REG.
    -        pub const RTCCALICFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            /// reg_rtc_cali_start_cycling.
    -            RTC_CALI_START_CYCLING: u1,
    -            /// reg_rtc_cali_clk_sel.0:rtcslowclock.1:clk_80m.2:xtal_32k
    -            RTC_CALI_CLK_SEL: u2,
    -            /// rtc_cali_rdy
    -            RTC_CALI_RDY: u1,
    -            /// reg_rtc_cali_max.
    -            RTC_CALI_MAX: u15,
    -            /// reg_rtc_cali_start.
    -            RTC_CALI_START: u1,
    -        }), base_address + 0x68);
    -
    -        /// address: 0x6001f06c
    -        /// TIMG_RTCCALICFG1_REG.
    -        pub const RTCCALICFG1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// rtc_cali_cycling_data_vld
    -            RTC_CALI_CYCLING_DATA_VLD: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            /// rtc_cali_value
    -            RTC_CALI_VALUE: u25,
    -        }), base_address + 0x6c);
    -
    -        /// address: 0x6001f070
    -        /// INT_ENA_TIMG_REG
    -        pub const INT_ENA_TIMERS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// t0_int_ena
    -            T0_INT_ENA: u1,
    -            /// wdt_int_ena
    -            WDT_INT_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0x70);
    -
    -        /// address: 0x6001f074
    -        /// INT_RAW_TIMG_REG
    -        pub const INT_RAW_TIMERS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// t0_int_raw
    -            T0_INT_RAW: u1,
    -            /// wdt_int_raw
    -            WDT_INT_RAW: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0x74);
    -
    -        /// address: 0x6001f078
    -        /// INT_ST_TIMG_REG
    -        pub const INT_ST_TIMERS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// t0_int_st
    -            T0_INT_ST: u1,
    -            /// wdt_int_st
    -            WDT_INT_ST: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0x78);
    -
    -        /// address: 0x6001f07c
    -        /// INT_CLR_TIMG_REG
    -        pub const INT_CLR_TIMERS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// t0_int_clr
    -            T0_INT_CLR: u1,
    -            /// wdt_int_clr
    -            WDT_INT_CLR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0x7c);
    -
    -        /// address: 0x6001f080
    -        /// TIMG_RTCCALICFG2_REG.
    -        pub const RTCCALICFG2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// timeoutindicator
    -            RTC_CALI_TIMEOUT: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// reg_rtc_cali_timeout_rst_cnt.Cyclesthatreleasecalibrationtimeoutreset
    -            RTC_CALI_TIMEOUT_RST_CNT: u4,
    -            /// reg_rtc_cali_timeout_thres.timeoutifcalivaluecountsoverthreshold
    -            RTC_CALI_TIMEOUT_THRES: u25,
    -        }), base_address + 0x80);
    -
    -        /// address: 0x6001f0f8
    -        /// TIMG_NTIMG_DATE_REG.
    -        pub const NTIMG_DATE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_ntimers_date.
    -            NTIMGS_DATE: u28,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -        }), base_address + 0xf8);
    -
    -        /// address: 0x6001f0fc
    -        /// TIMG_REGCLK_REG.
    -        pub const REGCLK = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            reserved23: u1,
    -            reserved24: u1,
    -            reserved25: u1,
    -            reserved26: u1,
    -            reserved27: u1,
    -            reserved28: u1,
    -            /// reg_wdt_clk_is_active.
    -            WDT_CLK_IS_ACTIVE: u1,
    -            /// reg_timer_clk_is_active.
    -            TIMER_CLK_IS_ACTIVE: u1,
    -            /// reg_clk_en.
    -            CLK_EN: u1,
    -        }), base_address + 0xfc);
    -    };
    -
    -    /// Timer Group
    -    pub const TIMG1 = struct {
    -        pub const base_address = 0x60020000;
    -
    -        /// address: 0x60020000
    -        /// TIMG_T0CONFIG_REG.
    -        pub const T0CONFIG = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            /// reg_t0_use_xtal.
    -            T0_USE_XTAL: u1,
    -            /// reg_t0_alarm_en.
    -            T0_ALARM_EN: u1,
    -            reserved9: u1,
    -            /// reg_t0_divcnt_rst.
    -            T0_DIVCNT_RST: u1,
    -            /// reg_t0_divider.
    -            T0_DIVIDER: u16,
    -            /// reg_t0_autoreload.
    -            T0_AUTORELOAD: u1,
    -            /// reg_t0_increase.
    -            T0_INCREASE: u1,
    -            /// reg_t0_en.
    -            T0_EN: u1,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x60020004
    -        /// TIMG_T0LO_REG.
    -        pub const T0LO = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// t0_lo
    -            T0_LO: u32,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x60020008
    -        /// TIMG_T0HI_REG.
    -        pub const T0HI = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// t0_hi
    -            T0_HI: u22,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x6002000c
    -        /// TIMG_T0UPDATE_REG.
    -        pub const T0UPDATE = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            reserved23: u1,
    -            reserved24: u1,
    -            reserved25: u1,
    -            reserved26: u1,
    -            reserved27: u1,
    -            reserved28: u1,
    -            reserved29: u1,
    -            reserved30: u1,
    -            /// t0_update
    -            T0_UPDATE: u1,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x60020010
    -        /// TIMG_T0ALARMLO_REG.
    -        pub const T0ALARMLO = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_t0_alarm_lo.
    -            T0_ALARM_LO: u32,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x60020014
    -        /// TIMG_T0ALARMHI_REG.
    -        pub const T0ALARMHI = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_t0_alarm_hi.
    -            T0_ALARM_HI: u22,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x60020018
    -        /// TIMG_T0LOADLO_REG.
    -        pub const T0LOADLO = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_t0_load_lo.
    -            T0_LOAD_LO: u32,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x6002001c
    -        /// TIMG_T0LOADHI_REG.
    -        pub const T0LOADHI = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_t0_load_hi.
    -            T0_LOAD_HI: u22,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x60020020
    -        /// TIMG_T0LOAD_REG.
    -        pub const T0LOAD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// t0_load
    -            T0_LOAD: u32,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x60020048
    -        /// TIMG_WDTCONFIG0_REG.
    -        pub const WDTCONFIG0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            /// reg_wdt_appcpu_reset_en.
    -            WDT_APPCPU_RESET_EN: u1,
    -            /// reg_wdt_procpu_reset_en.
    -            WDT_PROCPU_RESET_EN: u1,
    -            /// reg_wdt_flashboot_mod_en.
    -            WDT_FLASHBOOT_MOD_EN: u1,
    -            /// reg_wdt_sys_reset_length.
    -            WDT_SYS_RESET_LENGTH: u3,
    -            /// reg_wdt_cpu_reset_length.
    -            WDT_CPU_RESET_LENGTH: u3,
    -            /// reg_wdt_use_xtal.
    -            WDT_USE_XTAL: u1,
    -            /// reg_wdt_conf_update_en.
    -            WDT_CONF_UPDATE_EN: u1,
    -            /// reg_wdt_stg3.
    -            WDT_STG3: u2,
    -            /// reg_wdt_stg2.
    -            WDT_STG2: u2,
    -            /// reg_wdt_stg1.
    -            WDT_STG1: u2,
    -            /// reg_wdt_stg0.
    -            WDT_STG0: u2,
    -            /// reg_wdt_en.
    -            WDT_EN: u1,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x6002004c
    -        /// TIMG_WDTCONFIG1_REG.
    -        pub const WDTCONFIG1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_wdt_divcnt_rst.
    -            WDT_DIVCNT_RST: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            /// reg_wdt_clk_prescale.
    -            WDT_CLK_PRESCALE: u16,
    -        }), base_address + 0x4c);
    -
    -        /// address: 0x60020050
    -        /// TIMG_WDTCONFIG2_REG.
    -        pub const WDTCONFIG2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_wdt_stg0_hold.
    -            WDT_STG0_HOLD: u32,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x60020054
    -        /// TIMG_WDTCONFIG3_REG.
    -        pub const WDTCONFIG3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_wdt_stg1_hold.
    -            WDT_STG1_HOLD: u32,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x60020058
    -        /// TIMG_WDTCONFIG4_REG.
    -        pub const WDTCONFIG4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_wdt_stg2_hold.
    -            WDT_STG2_HOLD: u32,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x6002005c
    -        /// TIMG_WDTCONFIG5_REG.
    -        pub const WDTCONFIG5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_wdt_stg3_hold.
    -            WDT_STG3_HOLD: u32,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x60020060
    -        /// TIMG_WDTFEED_REG.
    -        pub const WDTFEED = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// wdt_feed
    -            WDT_FEED: u32,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x60020064
    -        /// TIMG_WDTWPROTECT_REG.
    -        pub const WDTWPROTECT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_wdt_wkey.
    -            WDT_WKEY: u32,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x60020068
    -        /// TIMG_RTCCALICFG_REG.
    -        pub const RTCCALICFG = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            /// reg_rtc_cali_start_cycling.
    -            RTC_CALI_START_CYCLING: u1,
    -            /// reg_rtc_cali_clk_sel.0:rtcslowclock.1:clk_80m.2:xtal_32k
    -            RTC_CALI_CLK_SEL: u2,
    -            /// rtc_cali_rdy
    -            RTC_CALI_RDY: u1,
    -            /// reg_rtc_cali_max.
    -            RTC_CALI_MAX: u15,
    -            /// reg_rtc_cali_start.
    -            RTC_CALI_START: u1,
    -        }), base_address + 0x68);
    -
    -        /// address: 0x6002006c
    -        /// TIMG_RTCCALICFG1_REG.
    -        pub const RTCCALICFG1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// rtc_cali_cycling_data_vld
    -            RTC_CALI_CYCLING_DATA_VLD: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            /// rtc_cali_value
    -            RTC_CALI_VALUE: u25,
    -        }), base_address + 0x6c);
    -
    -        /// address: 0x60020070
    -        /// INT_ENA_TIMG_REG
    -        pub const INT_ENA_TIMERS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// t0_int_ena
    -            T0_INT_ENA: u1,
    -            /// wdt_int_ena
    -            WDT_INT_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0x70);
    -
    -        /// address: 0x60020074
    -        /// INT_RAW_TIMG_REG
    -        pub const INT_RAW_TIMERS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// t0_int_raw
    -            T0_INT_RAW: u1,
    -            /// wdt_int_raw
    -            WDT_INT_RAW: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0x74);
    -
    -        /// address: 0x60020078
    -        /// INT_ST_TIMG_REG
    -        pub const INT_ST_TIMERS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// t0_int_st
    -            T0_INT_ST: u1,
    -            /// wdt_int_st
    -            WDT_INT_ST: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0x78);
    -
    -        /// address: 0x6002007c
    -        /// INT_CLR_TIMG_REG
    -        pub const INT_CLR_TIMERS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// t0_int_clr
    -            T0_INT_CLR: u1,
    -            /// wdt_int_clr
    -            WDT_INT_CLR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0x7c);
    -
    -        /// address: 0x60020080
    -        /// TIMG_RTCCALICFG2_REG.
    -        pub const RTCCALICFG2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// timeoutindicator
    -            RTC_CALI_TIMEOUT: u1,
    -            reserved0: u1,
    -            reserved1: u1,
    -            /// reg_rtc_cali_timeout_rst_cnt.Cyclesthatreleasecalibrationtimeoutreset
    -            RTC_CALI_TIMEOUT_RST_CNT: u4,
    -            /// reg_rtc_cali_timeout_thres.timeoutifcalivaluecountsoverthreshold
    -            RTC_CALI_TIMEOUT_THRES: u25,
    -        }), base_address + 0x80);
    -
    -        /// address: 0x600200f8
    -        /// TIMG_NTIMG_DATE_REG.
    -        pub const NTIMG_DATE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// reg_ntimers_date.
    -            NTIMGS_DATE: u28,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -        }), base_address + 0xf8);
    -
    -        /// address: 0x600200fc
    -        /// TIMG_REGCLK_REG.
    -        pub const REGCLK = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            reserved8: u1,
    -            reserved9: u1,
    -            reserved10: u1,
    -            reserved11: u1,
    -            reserved12: u1,
    -            reserved13: u1,
    -            reserved14: u1,
    -            reserved15: u1,
    -            reserved16: u1,
    -            reserved17: u1,
    -            reserved18: u1,
    -            reserved19: u1,
    -            reserved20: u1,
    -            reserved21: u1,
    -            reserved22: u1,
    -            reserved23: u1,
    -            reserved24: u1,
    -            reserved25: u1,
    -            reserved26: u1,
    -            reserved27: u1,
    -            reserved28: u1,
    -            /// reg_wdt_clk_is_active.
    -            WDT_CLK_IS_ACTIVE: u1,
    -            /// reg_timer_clk_is_active.
    -            TIMER_CLK_IS_ACTIVE: u1,
    -            /// reg_clk_en.
    -            CLK_EN: u1,
    -        }), base_address + 0xfc);
    -    };
    -
    -    /// Two-Wire Automotive Interface
    -    pub const TWAI = struct {
    -        pub const base_address = 0x6002b000;
    -
    -        /// address: 0x6002b000
    -        /// Mode Register
    -        pub const MODE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This bit is used to configure the operating mode of the TWAI Controller. 1:
    -            /// Reset mode; 0: Operating mode.
    -            RESET_MODE: u1,
    -            /// 1: Listen only mode. In this mode the nodes will only receive messages from the
    -            /// bus, without generating the acknowledge signal nor updating the RX error
    -            /// counter.
    -            LISTEN_ONLY_MODE: u1,
    -            /// 1: Self test mode. In this mode the TX nodes can perform a successful
    -            /// transmission without receiving the acknowledge signal. This mode is often used
    -            /// to test a single node with the self reception request command.
    -            SELF_TEST_MODE: u1,
    -            /// This bit is used to configure the filter mode. 0: Dual filter mode; 1: Single
    -            /// filter mode.
    -            RX_FILTER_MODE: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x6002b004
    -        /// Command Register
    -        pub const CMD = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Set the bit to 1 to allow the driving nodes start transmission.
    -            TX_REQ: u1,
    -            /// Set the bit to 1 to cancel a pending transmission request.
    -            ABORT_TX: u1,
    -            /// Set the bit to 1 to release the RX buffer.
    -            RELEASE_BUF: u1,
    -            /// Set the bit to 1 to clear the data overrun status bit.
    -            CLR_OVERRUN: u1,
    -            /// Self reception request command. Set the bit to 1 to allow a message be
    -            /// transmitted and received simultaneously.
    -            SELF_RX_REQ: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x6002b008
    -        /// Status register
    -        pub const STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 1: The data in the RX buffer is not empty, with at least one received data
    -            /// packet.
    -            RX_BUF_ST: u1,
    -            /// 1: The RX FIFO is full and data overrun has occurred.
    -            OVERRUN_ST: u1,
    -            /// 1: The TX buffer is empty, the CPU may write a message into it.
    -            TX_BUF_ST: u1,
    -            /// 1: The TWAI controller has successfully received a packet from the bus.
    -            TX_COMPLETE: u1,
    -            /// 1: The TWAI Controller is receiving a message from the bus.
    -            RX_ST: u1,
    -            /// 1: The TWAI Controller is transmitting a message to the bus.
    -            TX_ST: u1,
    -            /// 1: At least one of the RX/TX error counter has reached or exceeded the value set
    -            /// in register TWAI_ERR_WARNING_LIMIT_REG.
    -            ERR_ST: u1,
    -            /// 1: In bus-off status, the TWAI Controller is no longer involved in bus
    -            /// activities.
    -            BUS_OFF_ST: u1,
    -            /// This bit reflects whether the data packet in the RX FIFO is complete. 1: The
    -            /// current packet is missing; 0: The current packet is complete
    -            MISS_ST: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x6002b00c
    -        /// Interrupt Register
    -        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Receive interrupt. If this bit is set to 1, it indicates there are messages to
    -            /// be handled in the RX FIFO.
    -            RX_INT_ST: u1,
    -            /// Transmit interrupt. If this bit is set to 1, it indicates the message
    -            /// transmitting mis- sion is finished and a new transmission is able to execute.
    -            TX_INT_ST: u1,
    -            /// Error warning interrupt. If this bit is set to 1, it indicates the error status
    -            /// signal and the bus-off status signal of Status register have changed (e.g.,
    -            /// switched from 0 to 1 or from 1 to 0).
    -            ERR_WARN_INT_ST: u1,
    -            /// Data overrun interrupt. If this bit is set to 1, it indicates a data overrun
    -            /// interrupt is generated in the RX FIFO.
    -            OVERRUN_INT_ST: u1,
    -            reserved0: u1,
    -            /// Error passive interrupt. If this bit is set to 1, it indicates the TWAI
    -            /// Controller is switched between error active status and error passive status due
    -            /// to the change of error counters.
    -            ERR_PASSIVE_INT_ST: u1,
    -            /// Arbitration lost interrupt. If this bit is set to 1, it indicates an arbitration
    -            /// lost interrupt is generated.
    -            ARB_LOST_INT_ST: u1,
    -            /// Error interrupt. If this bit is set to 1, it indicates an error is detected on
    -            /// the bus.
    -            BUS_ERR_INT_ST: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x6002b010
    -        /// Interrupt Enable Register
    -        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Set this bit to 1 to enable receive interrupt.
    -            RX_INT_ENA: u1,
    -            /// Set this bit to 1 to enable transmit interrupt.
    -            TX_INT_ENA: u1,
    -            /// Set this bit to 1 to enable error warning interrupt.
    -            ERR_WARN_INT_ENA: u1,
    -            /// Set this bit to 1 to enable data overrun interrupt.
    -            OVERRUN_INT_ENA: u1,
    -            reserved0: u1,
    -            /// Set this bit to 1 to enable error passive interrupt.
    -            ERR_PASSIVE_INT_ENA: u1,
    -            /// Set this bit to 1 to enable arbitration lost interrupt.
    -            ARB_LOST_INT_ENA: u1,
    -            /// Set this bit to 1 to enable error interrupt.
    -            BUS_ERR_INT_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x6002b018
    -        /// Bus Timing Register 0
    -        pub const BUS_TIMING_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Baud Rate Prescaler, determines the frequency dividing ratio.
    -            BAUD_PRESC: u13,
    -            reserved0: u1,
    -            /// Synchronization Jump Width (SJW), 1 \verb+~+ 14 Tq wide.
    -            SYNC_JUMP_WIDTH: u2,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x6002b01c
    -        /// Bus Timing Register 1
    -        pub const BUS_TIMING_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The width of PBS1.
    -            TIME_SEG1: u4,
    -            /// The width of PBS2.
    -            TIME_SEG2: u3,
    -            /// The number of sample points. 0: the bus is sampled once; 1: the bus is sampled
    -            /// three times
    -            TIME_SAMP: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x6002b02c
    -        /// Arbitration Lost Capture Register
    -        pub const ARB_LOST_CAP = @intToPtr(*volatile MmioInt(32, u5), base_address + 0x2c);
    -
    -        /// address: 0x6002b030
    -        /// Error Code Capture Register
    -        pub const ERR_CODE_CAP = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register contains information about the location of errors, see Table 181
    -            /// for details.
    -            ECC_SEGMENT: u5,
    -            /// This register contains information about transmission direction of the node when
    -            /// error occurs. 1: Error occurs when receiving a message; 0: Error occurs when
    -            /// transmitting a message
    -            ECC_DIRECTION: u1,
    -            /// This register contains information about error types: 00: bit error; 01: form
    -            /// error; 10: stuff error; 11: other type of error
    -            ECC_TYPE: u2,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x6002b034
    -        /// Error Warning Limit Register
    -        pub const ERR_WARNING_LIMIT = @intToPtr(*volatile MmioInt(32, u8), base_address + 0x34);
    -
    -        /// address: 0x6002b038
    -        /// Receive Error Counter Register
    -        pub const RX_ERR_CNT = @intToPtr(*volatile MmioInt(32, u8), base_address + 0x38);
    -
    -        /// address: 0x6002b03c
    -        /// Transmit Error Counter Register
    -        pub const TX_ERR_CNT = @intToPtr(*volatile MmioInt(32, u8), base_address + 0x3c);
    -
    -        /// address: 0x6002b040
    -        /// Data register 0
    -        pub const DATA_0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// In reset mode, it is acceptance code register 0 with R/W Permission. In
    -            /// operation mode, it stores the 0th byte information of the data to be transmitted
    -            /// under operating mode.
    -            TX_BYTE_0: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x6002b044
    -        /// Data register 1
    -        pub const DATA_1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// In reset mode, it is acceptance code register 1 with R/W Permission. In
    -            /// operation mode, it stores the 1st byte information of the data to be transmitted
    -            /// under operating mode.
    -            TX_BYTE_1: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x6002b048
    -        /// Data register 2
    -        pub const DATA_2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// In reset mode, it is acceptance code register 2 with R/W Permission. In
    -            /// operation mode, it stores the 2nd byte information of the data to be transmitted
    -            /// under operating mode.
    -            TX_BYTE_2: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x6002b04c
    -        /// Data register 3
    -        pub const DATA_3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// In reset mode, it is acceptance code register 3 with R/W Permission. In
    -            /// operation mode, it stores the 3rd byte information of the data to be transmitted
    -            /// under operating mode.
    -            TX_BYTE_3: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x4c);
    -
    -        /// address: 0x6002b050
    -        /// Data register 4
    -        pub const DATA_4 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// In reset mode, it is acceptance mask register 0 with R/W Permission. In
    -            /// operation mode, it stores the 4th byte information of the data to be transmitted
    -            /// under operating mode.
    -            TX_BYTE_4: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x6002b054
    -        /// Data register 5
    -        pub const DATA_5 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// In reset mode, it is acceptance mask register 1 with R/W Permission. In
    -            /// operation mode, it stores the 5th byte information of the data to be transmitted
    -            /// under operating mode.
    -            TX_BYTE_5: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x6002b058
    -        /// Data register 6
    -        pub const DATA_6 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// In reset mode, it is acceptance mask register 2 with R/W Permission. In
    -            /// operation mode, it stores the 6th byte information of the data to be transmitted
    -            /// under operating mode.
    -            TX_BYTE_6: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x6002b05c
    -        /// Data register 7
    -        pub const DATA_7 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// In reset mode, it is acceptance mask register 3 with R/W Permission. In
    -            /// operation mode, it stores the 7th byte information of the data to be transmitted
    -            /// under operating mode.
    -            TX_BYTE_7: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x6002b060
    -        /// Data register 8
    -        pub const DATA_8 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stored the 8th byte information of the data to be transmitted under operating
    -            /// mode.
    -            TX_BYTE_8: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x6002b064
    -        /// Data register 9
    -        pub const DATA_9 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stored the 9th byte information of the data to be transmitted under operating
    -            /// mode.
    -            TX_BYTE_9: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x6002b068
    -        /// Data register 10
    -        pub const DATA_10 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stored the 10th byte information of the data to be transmitted under operating
    -            /// mode.
    -            TX_BYTE_10: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x68);
    -
    -        /// address: 0x6002b06c
    -        /// Data register 11
    -        pub const DATA_11 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stored the 11th byte information of the data to be transmitted under operating
    -            /// mode.
    -            TX_BYTE_11: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x6c);
    -
    -        /// address: 0x6002b070
    -        /// Data register 12
    -        pub const DATA_12 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stored the 12th byte information of the data to be transmitted under operating
    -            /// mode.
    -            TX_BYTE_12: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x70);
    -
    -        /// address: 0x6002b074
    -        /// Receive Message Counter Register
    -        pub const RX_MESSAGE_CNT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register reflects the number of messages available within the RX FIFO.
    -            RX_MESSAGE_COUNTER: u7,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -        }), base_address + 0x74);
    -
    -        /// address: 0x6002b07c
    -        /// Clock Divider register
    -        pub const CLOCK_DIVIDER = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// These bits are used to configure frequency dividing coefficients of the external
    -            /// CLKOUT pin.
    -            CD: u8,
    -            /// This bit can be configured under reset mode. 1: Disable the external CLKOUT pin;
    -            /// 0: Enable the external CLKOUT pin
    -            CLOCK_OFF: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -        }), base_address + 0x7c);
    -    };
    -
    -    /// UART (Universal Asynchronous Receiver-Transmitter) Controller
    -    pub const UART0 = struct {
    -        pub const base_address = 0x60000000;
    -
    -        /// address: 0x60000000
    -        /// FIFO data register
    -        pub const FIFO = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// UART 0 accesses FIFO via this register.
    -            RXFIFO_RD_BYTE: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x60000004
    -        /// Raw interrupt status
    -        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This interrupt raw bit turns to high level when receiver receives more data than
    -            /// what rxfifo_full_thrhd specifies.
    -            RXFIFO_FULL_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when the amount of data in Tx-FIFO is
    -            /// less than what txfifo_empty_thrhd specifies .
    -            TXFIFO_EMPTY_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when receiver detects a parity error
    -            /// in the data.
    -            PARITY_ERR_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when receiver detects a data frame
    -            /// error .
    -            FRM_ERR_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when receiver receives more data than
    -            /// the FIFO can store.
    -            RXFIFO_OVF_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when receiver detects the edge change
    -            /// of DSRn signal.
    -            DSR_CHG_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when receiver detects the edge change
    -            /// of CTSn signal.
    -            CTS_CHG_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when receiver detects a 0 after the
    -            /// stop bit.
    -            BRK_DET_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when receiver takes more time than
    -            /// rx_tout_thrhd to receive a byte.
    -            RXFIFO_TOUT_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when receiver recevies Xon char when
    -            /// uart_sw_flow_con_en is set to 1.
    -            SW_XON_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when receiver receives Xoff char when
    -            /// uart_sw_flow_con_en is set to 1.
    -            SW_XOFF_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when receiver detects a glitch in the
    -            /// middle of a start bit.
    -            GLITCH_DET_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when transmitter completes sending
    -            /// NULL characters, after all data in Tx-FIFO are sent.
    -            TX_BRK_DONE_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when transmitter has kept the
    -            /// shortest duration after sending the last data.
    -            TX_BRK_IDLE_DONE_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when transmitter has send out all
    -            /// data in FIFO.
    -            TX_DONE_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when receiver detects a parity error
    -            /// from the echo of transmitter in rs485 mode.
    -            RS485_PARITY_ERR_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when receiver detects a data frame
    -            /// error from the echo of transmitter in rs485 mode.
    -            RS485_FRM_ERR_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when detects a clash between
    -            /// transmitter and receiver in rs485 mode.
    -            RS485_CLASH_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when receiver detects the configured
    -            /// at_cmd char.
    -            AT_CMD_CHAR_DET_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when input rxd edge changes more
    -            /// times than what reg_active_threshold specifies in light sleeping mode.
    -            WAKEUP_INT_RAW: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x60000008
    -        /// Masked interrupt status
    -        pub const INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This is the status bit for rxfifo_full_int_raw when rxfifo_full_int_ena is set
    -            /// to 1.
    -            RXFIFO_FULL_INT_ST: u1,
    -            /// This is the status bit for txfifo_empty_int_raw when txfifo_empty_int_ena is set
    -            /// to 1.
    -            TXFIFO_EMPTY_INT_ST: u1,
    -            /// This is the status bit for parity_err_int_raw when parity_err_int_ena is set to
    -            /// 1.
    -            PARITY_ERR_INT_ST: u1,
    -            /// This is the status bit for frm_err_int_raw when frm_err_int_ena is set to 1.
    -            FRM_ERR_INT_ST: u1,
    -            /// This is the status bit for rxfifo_ovf_int_raw when rxfifo_ovf_int_ena is set to
    -            /// 1.
    -            RXFIFO_OVF_INT_ST: u1,
    -            /// This is the status bit for dsr_chg_int_raw when dsr_chg_int_ena is set to 1.
    -            DSR_CHG_INT_ST: u1,
    -            /// This is the status bit for cts_chg_int_raw when cts_chg_int_ena is set to 1.
    -            CTS_CHG_INT_ST: u1,
    -            /// This is the status bit for brk_det_int_raw when brk_det_int_ena is set to 1.
    -            BRK_DET_INT_ST: u1,
    -            /// This is the status bit for rxfifo_tout_int_raw when rxfifo_tout_int_ena is set
    -            /// to 1.
    -            RXFIFO_TOUT_INT_ST: u1,
    -            /// This is the status bit for sw_xon_int_raw when sw_xon_int_ena is set to 1.
    -            SW_XON_INT_ST: u1,
    -            /// This is the status bit for sw_xoff_int_raw when sw_xoff_int_ena is set to 1.
    -            SW_XOFF_INT_ST: u1,
    -            /// This is the status bit for glitch_det_int_raw when glitch_det_int_ena is set to
    -            /// 1.
    -            GLITCH_DET_INT_ST: u1,
    -            /// This is the status bit for tx_brk_done_int_raw when tx_brk_done_int_ena is set
    -            /// to 1.
    -            TX_BRK_DONE_INT_ST: u1,
    -            /// This is the stauts bit for tx_brk_idle_done_int_raw when
    -            /// tx_brk_idle_done_int_ena is set to 1.
    -            TX_BRK_IDLE_DONE_INT_ST: u1,
    -            /// This is the status bit for tx_done_int_raw when tx_done_int_ena is set to 1.
    -            TX_DONE_INT_ST: u1,
    -            /// This is the status bit for rs485_parity_err_int_raw when rs485_parity_int_ena is
    -            /// set to 1.
    -            RS485_PARITY_ERR_INT_ST: u1,
    -            /// This is the status bit for rs485_frm_err_int_raw when rs485_fm_err_int_ena is
    -            /// set to 1.
    -            RS485_FRM_ERR_INT_ST: u1,
    -            /// This is the status bit for rs485_clash_int_raw when rs485_clash_int_ena is set
    -            /// to 1.
    -            RS485_CLASH_INT_ST: u1,
    -            /// This is the status bit for at_cmd_det_int_raw when at_cmd_char_det_int_ena is
    -            /// set to 1.
    -            AT_CMD_CHAR_DET_INT_ST: u1,
    -            /// This is the status bit for uart_wakeup_int_raw when uart_wakeup_int_ena is set
    -            /// to 1.
    -            WAKEUP_INT_ST: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x6000000c
    -        /// Interrupt enable bits
    -        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This is the enable bit for rxfifo_full_int_st register.
    -            RXFIFO_FULL_INT_ENA: u1,
    -            /// This is the enable bit for txfifo_empty_int_st register.
    -            TXFIFO_EMPTY_INT_ENA: u1,
    -            /// This is the enable bit for parity_err_int_st register.
    -            PARITY_ERR_INT_ENA: u1,
    -            /// This is the enable bit for frm_err_int_st register.
    -            FRM_ERR_INT_ENA: u1,
    -            /// This is the enable bit for rxfifo_ovf_int_st register.
    -            RXFIFO_OVF_INT_ENA: u1,
    -            /// This is the enable bit for dsr_chg_int_st register.
    -            DSR_CHG_INT_ENA: u1,
    -            /// This is the enable bit for cts_chg_int_st register.
    -            CTS_CHG_INT_ENA: u1,
    -            /// This is the enable bit for brk_det_int_st register.
    -            BRK_DET_INT_ENA: u1,
    -            /// This is the enable bit for rxfifo_tout_int_st register.
    -            RXFIFO_TOUT_INT_ENA: u1,
    -            /// This is the enable bit for sw_xon_int_st register.
    -            SW_XON_INT_ENA: u1,
    -            /// This is the enable bit for sw_xoff_int_st register.
    -            SW_XOFF_INT_ENA: u1,
    -            /// This is the enable bit for glitch_det_int_st register.
    -            GLITCH_DET_INT_ENA: u1,
    -            /// This is the enable bit for tx_brk_done_int_st register.
    -            TX_BRK_DONE_INT_ENA: u1,
    -            /// This is the enable bit for tx_brk_idle_done_int_st register.
    -            TX_BRK_IDLE_DONE_INT_ENA: u1,
    -            /// This is the enable bit for tx_done_int_st register.
    -            TX_DONE_INT_ENA: u1,
    -            /// This is the enable bit for rs485_parity_err_int_st register.
    -            RS485_PARITY_ERR_INT_ENA: u1,
    -            /// This is the enable bit for rs485_parity_err_int_st register.
    -            RS485_FRM_ERR_INT_ENA: u1,
    -            /// This is the enable bit for rs485_clash_int_st register.
    -            RS485_CLASH_INT_ENA: u1,
    -            /// This is the enable bit for at_cmd_char_det_int_st register.
    -            AT_CMD_CHAR_DET_INT_ENA: u1,
    -            /// This is the enable bit for uart_wakeup_int_st register.
    -            WAKEUP_INT_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x60000010
    -        /// Interrupt clear bits
    -        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Set this bit to clear the rxfifo_full_int_raw interrupt.
    -            RXFIFO_FULL_INT_CLR: u1,
    -            /// Set this bit to clear txfifo_empty_int_raw interrupt.
    -            TXFIFO_EMPTY_INT_CLR: u1,
    -            /// Set this bit to clear parity_err_int_raw interrupt.
    -            PARITY_ERR_INT_CLR: u1,
    -            /// Set this bit to clear frm_err_int_raw interrupt.
    -            FRM_ERR_INT_CLR: u1,
    -            /// Set this bit to clear rxfifo_ovf_int_raw interrupt.
    -            RXFIFO_OVF_INT_CLR: u1,
    -            /// Set this bit to clear the dsr_chg_int_raw interrupt.
    -            DSR_CHG_INT_CLR: u1,
    -            /// Set this bit to clear the cts_chg_int_raw interrupt.
    -            CTS_CHG_INT_CLR: u1,
    -            /// Set this bit to clear the brk_det_int_raw interrupt.
    -            BRK_DET_INT_CLR: u1,
    -            /// Set this bit to clear the rxfifo_tout_int_raw interrupt.
    -            RXFIFO_TOUT_INT_CLR: u1,
    -            /// Set this bit to clear the sw_xon_int_raw interrupt.
    -            SW_XON_INT_CLR: u1,
    -            /// Set this bit to clear the sw_xoff_int_raw interrupt.
    -            SW_XOFF_INT_CLR: u1,
    -            /// Set this bit to clear the glitch_det_int_raw interrupt.
    -            GLITCH_DET_INT_CLR: u1,
    -            /// Set this bit to clear the tx_brk_done_int_raw interrupt..
    -            TX_BRK_DONE_INT_CLR: u1,
    -            /// Set this bit to clear the tx_brk_idle_done_int_raw interrupt.
    -            TX_BRK_IDLE_DONE_INT_CLR: u1,
    -            /// Set this bit to clear the tx_done_int_raw interrupt.
    -            TX_DONE_INT_CLR: u1,
    -            /// Set this bit to clear the rs485_parity_err_int_raw interrupt.
    -            RS485_PARITY_ERR_INT_CLR: u1,
    -            /// Set this bit to clear the rs485_frm_err_int_raw interrupt.
    -            RS485_FRM_ERR_INT_CLR: u1,
    -            /// Set this bit to clear the rs485_clash_int_raw interrupt.
    -            RS485_CLASH_INT_CLR: u1,
    -            /// Set this bit to clear the at_cmd_char_det_int_raw interrupt.
    -            AT_CMD_CHAR_DET_INT_CLR: u1,
    -            /// Set this bit to clear the uart_wakeup_int_raw interrupt.
    -            WAKEUP_INT_CLR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x60000014
    -        /// Clock divider configuration
    -        pub const CLKDIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The integral part of the frequency divider factor.
    -            CLKDIV: u12,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            /// The decimal part of the frequency divider factor.
    -            FRAG: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x60000018
    -        /// Rx Filter configuration
    -        pub const RX_FILT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// when input pulse width is lower than this value, the pulse is ignored.
    -            GLITCH_FILT: u8,
    -            /// Set this bit to enable Rx signal filter.
    -            GLITCH_FILT_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x6000001c
    -        /// UART status register
    -        pub const STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the byte number of valid data in Rx-FIFO.
    -            RXFIFO_CNT: u10,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            /// The register represent the level value of the internal uart dsr signal.
    -            DSRN: u1,
    -            /// This register represent the level value of the internal uart cts signal.
    -            CTSN: u1,
    -            /// This register represent the level value of the internal uart rxd signal.
    -            RXD: u1,
    -            /// Stores the byte number of data in Tx-FIFO.
    -            TXFIFO_CNT: u10,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            /// This bit represents the level of the internal uart dtr signal.
    -            DTRN: u1,
    -            /// This bit represents the level of the internal uart rts signal.
    -            RTSN: u1,
    -            /// This bit represents the level of the internal uart txd signal.
    -            TXD: u1,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x60000020
    -        /// a
    -        pub const CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register is used to configure the parity check mode.
    -            PARITY: u1,
    -            /// Set this bit to enable uart parity check.
    -            PARITY_EN: u1,
    -            /// This register is used to set the length of data.
    -            BIT_NUM: u2,
    -            /// This register is used to set the length of stop bit.
    -            STOP_BIT_NUM: u2,
    -            /// This register is used to configure the software rts signal which is used in
    -            /// software flow control.
    -            SW_RTS: u1,
    -            /// This register is used to configure the software dtr signal which is used in
    -            /// software flow control.
    -            SW_DTR: u1,
    -            /// Set this bit to enbale transmitter to send NULL when the process of sending data
    -            /// is done.
    -            TXD_BRK: u1,
    -            /// Set this bit to enable IrDA loopback mode.
    -            IRDA_DPLX: u1,
    -            /// This is the start enable bit for IrDA transmitter.
    -            IRDA_TX_EN: u1,
    -            /// 1'h1: The IrDA transmitter's 11th bit is the same as 10th bit. 1'h0: Set IrDA
    -            /// transmitter's 11th bit to 0.
    -            IRDA_WCTL: u1,
    -            /// Set this bit to invert the level of IrDA transmitter.
    -            IRDA_TX_INV: u1,
    -            /// Set this bit to invert the level of IrDA receiver.
    -            IRDA_RX_INV: u1,
    -            /// Set this bit to enable uart loopback test mode.
    -            LOOPBACK: u1,
    -            /// Set this bit to enable flow control function for transmitter.
    -            TX_FLOW_EN: u1,
    -            /// Set this bit to enable IrDA protocol.
    -            IRDA_EN: u1,
    -            /// Set this bit to reset the uart receive-FIFO.
    -            RXFIFO_RST: u1,
    -            /// Set this bit to reset the uart transmit-FIFO.
    -            TXFIFO_RST: u1,
    -            /// Set this bit to inverse the level value of uart rxd signal.
    -            RXD_INV: u1,
    -            /// Set this bit to inverse the level value of uart cts signal.
    -            CTS_INV: u1,
    -            /// Set this bit to inverse the level value of uart dsr signal.
    -            DSR_INV: u1,
    -            /// Set this bit to inverse the level value of uart txd signal.
    -            TXD_INV: u1,
    -            /// Set this bit to inverse the level value of uart rts signal.
    -            RTS_INV: u1,
    -            /// Set this bit to inverse the level value of uart dtr signal.
    -            DTR_INV: u1,
    -            /// 1'h1: Force clock on for register. 1'h0: Support clock only when application
    -            /// writes registers.
    -            CLK_EN: u1,
    -            /// 1'h1: Receiver stops storing data into FIFO when data is wrong. 1'h0: Receiver
    -            /// stores the data even if the received data is wrong.
    -            ERR_WR_MASK: u1,
    -            /// This is the enable bit for detecting baudrate.
    -            AUTOBAUD_EN: u1,
    -            /// UART memory clock gate enable signal.
    -            MEM_CLK_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x60000024
    -        /// Configuration register 1
    -        pub const CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// It will produce rxfifo_full_int interrupt when receiver receives more data than
    -            /// this register value.
    -            RXFIFO_FULL_THRHD: u9,
    -            /// It will produce txfifo_empty_int interrupt when the data amount in Tx-FIFO is
    -            /// less than this register value.
    -            TXFIFO_EMPTY_THRHD: u9,
    -            /// Disable UART Rx data overflow detect.
    -            DIS_RX_DAT_OVF: u1,
    -            /// Set this bit to stop accumulating idle_cnt when hardware flow control works.
    -            RX_TOUT_FLOW_DIS: u1,
    -            /// This is the flow enable bit for UART receiver.
    -            RX_FLOW_EN: u1,
    -            /// This is the enble bit for uart receiver's timeout function.
    -            RX_TOUT_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x60000028
    -        /// Autobaud minimum low pulse duration register
    -        pub const LOWPULSE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the value of the minimum duration time of the low level
    -            /// pulse. It is used in baud rate-detect process.
    -            MIN_CNT: u12,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x6000002c
    -        /// Autobaud minimum high pulse duration register
    -        pub const HIGHPULSE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the value of the maxinum duration time for the high level
    -            /// pulse. It is used in baud rate-detect process.
    -            MIN_CNT: u12,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x60000030
    -        /// Autobaud edge change count register
    -        pub const RXD_CNT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the count of rxd edge change. It is used in baud
    -            /// rate-detect process.
    -            RXD_EDGE_CNT: u10,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x60000034
    -        /// Software flow-control configuration
    -        pub const FLOW_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Set this bit to enable software flow control. It is used with register sw_xon or
    -            /// sw_xoff.
    -            SW_FLOW_CON_EN: u1,
    -            /// Set this bit to remove flow control char from the received data.
    -            XONOFF_DEL: u1,
    -            /// Set this bit to enable the transmitter to go on sending data.
    -            FORCE_XON: u1,
    -            /// Set this bit to stop the transmitter from sending data.
    -            FORCE_XOFF: u1,
    -            /// Set this bit to send Xon char. It is cleared by hardware automatically.
    -            SEND_XON: u1,
    -            /// Set this bit to send Xoff char. It is cleared by hardware automatically.
    -            SEND_XOFF: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x60000038
    -        /// Sleep-mode configuration
    -        pub const SLEEP_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The uart is activated from light sleeping mode when the input rxd edge changes
    -            /// more times than this register value.
    -            ACTIVE_THRESHOLD: u10,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x6000003c
    -        /// Software flow-control character configuration
    -        pub const SWFC_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// When the data amount in Rx-FIFO is more than this register value with
    -            /// uart_sw_flow_con_en set to 1, it will send a Xoff char.
    -            XOFF_THRESHOLD: u9,
    -            /// This register stores the Xoff flow control char.
    -            XOFF_CHAR: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x60000040
    -        /// Software flow-control character configuration
    -        pub const SWFC_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// When the data amount in Rx-FIFO is less than this register value with
    -            /// uart_sw_flow_con_en set to 1, it will send a Xon char.
    -            XON_THRESHOLD: u9,
    -            /// This register stores the Xon flow control char.
    -            XON_CHAR: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x60000044
    -        /// Tx Break character configuration
    -        pub const TXBRK_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register is used to configure the number of 0 to be sent after the process
    -            /// of sending data is done. It is active when txd_brk is set to 1.
    -            TX_BRK_NUM: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x60000048
    -        /// Frame-end idle configuration
    -        pub const IDLE_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// It will produce frame end signal when receiver takes more time to receive one
    -            /// byte data than this register value.
    -            RX_IDLE_THRHD: u10,
    -            /// This register is used to configure the duration time between transfers.
    -            TX_IDLE_NUM: u10,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x6000004c
    -        /// RS485 mode configuration
    -        pub const RS485_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Set this bit to choose the rs485 mode.
    -            RS485_EN: u1,
    -            /// Set this bit to delay the stop bit by 1 bit.
    -            DL0_EN: u1,
    -            /// Set this bit to delay the stop bit by 1 bit.
    -            DL1_EN: u1,
    -            /// Set this bit to enable receiver could receive data when the transmitter is
    -            /// transmitting data in rs485 mode.
    -            RS485TX_RX_EN: u1,
    -            /// 1'h1: enable rs485 transmitter to send data when rs485 receiver line is busy.
    -            RS485RXBY_TX_EN: u1,
    -            /// This register is used to delay the receiver's internal data signal.
    -            RS485_RX_DLY_NUM: u1,
    -            /// This register is used to delay the transmitter's internal data signal.
    -            RS485_TX_DLY_NUM: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -        }), base_address + 0x4c);
    -
    -        /// address: 0x60000050
    -        /// Pre-sequence timing configuration
    -        pub const AT_CMD_PRECNT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register is used to configure the idle duration time before the first
    -            /// at_cmd is received by receiver.
    -            PRE_IDLE_NUM: u16,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x60000054
    -        /// Post-sequence timing configuration
    -        pub const AT_CMD_POSTCNT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register is used to configure the duration time between the last at_cmd and
    -            /// the next data.
    -            POST_IDLE_NUM: u16,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x60000058
    -        /// Timeout configuration
    -        pub const AT_CMD_GAPTOUT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register is used to configure the duration time between the at_cmd chars.
    -            RX_GAP_TOUT: u16,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x6000005c
    -        /// AT escape sequence detection configuration
    -        pub const AT_CMD_CHAR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register is used to configure the content of at_cmd char.
    -            AT_CMD_CHAR: u8,
    -            /// This register is used to configure the num of continuous at_cmd chars received
    -            /// by receiver.
    -            CHAR_NUM: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x60000060
    -        /// UART threshold and allocation configuration
    -        pub const MEM_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            /// This register is used to configure the amount of mem allocated for receive-FIFO.
    -            /// The default number is 128 bytes.
    -            RX_SIZE: u3,
    -            /// This register is used to configure the amount of mem allocated for
    -            /// transmit-FIFO. The default number is 128 bytes.
    -            TX_SIZE: u3,
    -            /// This register is used to configure the maximum amount of data that can be
    -            /// received when hardware flow control works.
    -            RX_FLOW_THRHD: u9,
    -            /// This register is used to configure the threshold time that receiver takes to
    -            /// receive one byte. The rxfifo_tout_int interrupt will be trigger when the
    -            /// receiver takes more time to receive one byte with rx_tout_en set to 1.
    -            RX_TOUT_THRHD: u10,
    -            /// Set this bit to force power down UART memory.
    -            MEM_FORCE_PD: u1,
    -            /// Set this bit to force power up UART memory.
    -            MEM_FORCE_PU: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x60000064
    -        /// Tx-FIFO write and read offset address.
    -        pub const MEM_TX_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the offset address in Tx-FIFO when software writes Tx-FIFO
    -            /// via APB.
    -            APB_TX_WADDR: u10,
    -            reserved0: u1,
    -            /// This register stores the offset address in Tx-FIFO when Tx-FSM reads data via
    -            /// Tx-FIFO_Ctrl.
    -            TX_RADDR: u10,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x60000068
    -        /// Rx-FIFO write and read offset address.
    -        pub const MEM_RX_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the offset address in RX-FIFO when software reads data from
    -            /// Rx-FIFO via APB. UART0 is 10'h100. UART1 is 10'h180.
    -            APB_RX_RADDR: u10,
    -            reserved0: u1,
    -            /// This register stores the offset address in Rx-FIFO when Rx-FIFO_Ctrl writes
    -            /// Rx-FIFO. UART0 is 10'h100. UART1 is 10'h180.
    -            RX_WADDR: u10,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -        }), base_address + 0x68);
    -
    -        /// address: 0x6000006c
    -        /// UART transmit and receive status.
    -        pub const FSM_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This is the status register of receiver.
    -            ST_URX_OUT: u4,
    -            /// This is the status register of transmitter.
    -            ST_UTX_OUT: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x6c);
    -
    -        /// address: 0x60000070
    -        /// Autobaud high pulse register
    -        pub const POSPULSE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the minimal input clock count between two positive edges.
    -            /// It is used in boudrate-detect process.
    -            POSEDGE_MIN_CNT: u12,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0x70);
    -
    -        /// address: 0x60000074
    -        /// Autobaud low pulse register
    -        pub const NEGPULSE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the minimal input clock count between two negative edges.
    -            /// It is used in boudrate-detect process.
    -            NEGEDGE_MIN_CNT: u12,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0x74);
    -
    -        /// address: 0x60000078
    -        /// UART core clock configuration
    -        pub const CLK_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The denominator of the frequency divider factor.
    -            SCLK_DIV_B: u6,
    -            /// The numerator of the frequency divider factor.
    -            SCLK_DIV_A: u6,
    -            /// The integral part of the frequency divider factor.
    -            SCLK_DIV_NUM: u8,
    -            /// UART clock source select. 1: 80Mhz, 2: 8Mhz, 3: XTAL.
    -            SCLK_SEL: u2,
    -            /// Set this bit to enable UART Tx/Rx clock.
    -            SCLK_EN: u1,
    -            /// Write 1 then write 0 to this bit, reset UART Tx/Rx.
    -            RST_CORE: u1,
    -            /// Set this bit to enable UART Tx clock.
    -            TX_SCLK_EN: u1,
    -            /// Set this bit to enable UART Rx clock.
    -            RX_SCLK_EN: u1,
    -            /// Write 1 then write 0 to this bit, reset UART Tx.
    -            TX_RST_CORE: u1,
    -            /// Write 1 then write 0 to this bit, reset UART Rx.
    -            RX_RST_CORE: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -        }), base_address + 0x78);
    -
    -        /// address: 0x6000007c
    -        /// UART Version register
    -        pub const DATE = @intToPtr(*volatile u32, base_address + 0x7c);
    -
    -        /// address: 0x60000080
    -        /// UART ID register
    -        pub const ID = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register is used to configure the uart_id.
    -            ID: u30,
    -            /// This bit used to select synchronize mode. 1: Registers are auto synchronized
    -            /// into UART Core clock and UART core should be keep the same with APB clock. 0:
    -            /// After configure registers, software needs to write 1 to UART_REG_UPDATE to
    -            /// synchronize registers.
    -            HIGH_SPEED: u1,
    -            /// Software write 1 would synchronize registers into UART Core clock domain and
    -            /// would be cleared by hardware after synchronization is done.
    -            REG_UPDATE: u1,
    -        }), base_address + 0x80);
    -    };
    -
    -    /// UART (Universal Asynchronous Receiver-Transmitter) Controller
    -    pub const UART1 = struct {
    -        pub const base_address = 0x60010000;
    -
    -        /// address: 0x60010000
    -        /// FIFO data register
    -        pub const FIFO = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// UART 0 accesses FIFO via this register.
    -            RXFIFO_RD_BYTE: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x60010004
    -        /// Raw interrupt status
    -        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This interrupt raw bit turns to high level when receiver receives more data than
    -            /// what rxfifo_full_thrhd specifies.
    -            RXFIFO_FULL_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when the amount of data in Tx-FIFO is
    -            /// less than what txfifo_empty_thrhd specifies .
    -            TXFIFO_EMPTY_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when receiver detects a parity error
    -            /// in the data.
    -            PARITY_ERR_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when receiver detects a data frame
    -            /// error .
    -            FRM_ERR_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when receiver receives more data than
    -            /// the FIFO can store.
    -            RXFIFO_OVF_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when receiver detects the edge change
    -            /// of DSRn signal.
    -            DSR_CHG_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when receiver detects the edge change
    -            /// of CTSn signal.
    -            CTS_CHG_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when receiver detects a 0 after the
    -            /// stop bit.
    -            BRK_DET_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when receiver takes more time than
    -            /// rx_tout_thrhd to receive a byte.
    -            RXFIFO_TOUT_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when receiver recevies Xon char when
    -            /// uart_sw_flow_con_en is set to 1.
    -            SW_XON_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when receiver receives Xoff char when
    -            /// uart_sw_flow_con_en is set to 1.
    -            SW_XOFF_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when receiver detects a glitch in the
    -            /// middle of a start bit.
    -            GLITCH_DET_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when transmitter completes sending
    -            /// NULL characters, after all data in Tx-FIFO are sent.
    -            TX_BRK_DONE_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when transmitter has kept the
    -            /// shortest duration after sending the last data.
    -            TX_BRK_IDLE_DONE_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when transmitter has send out all
    -            /// data in FIFO.
    -            TX_DONE_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when receiver detects a parity error
    -            /// from the echo of transmitter in rs485 mode.
    -            RS485_PARITY_ERR_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when receiver detects a data frame
    -            /// error from the echo of transmitter in rs485 mode.
    -            RS485_FRM_ERR_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when detects a clash between
    -            /// transmitter and receiver in rs485 mode.
    -            RS485_CLASH_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when receiver detects the configured
    -            /// at_cmd char.
    -            AT_CMD_CHAR_DET_INT_RAW: u1,
    -            /// This interrupt raw bit turns to high level when input rxd edge changes more
    -            /// times than what reg_active_threshold specifies in light sleeping mode.
    -            WAKEUP_INT_RAW: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x60010008
    -        /// Masked interrupt status
    -        pub const INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This is the status bit for rxfifo_full_int_raw when rxfifo_full_int_ena is set
    -            /// to 1.
    -            RXFIFO_FULL_INT_ST: u1,
    -            /// This is the status bit for txfifo_empty_int_raw when txfifo_empty_int_ena is set
    -            /// to 1.
    -            TXFIFO_EMPTY_INT_ST: u1,
    -            /// This is the status bit for parity_err_int_raw when parity_err_int_ena is set to
    -            /// 1.
    -            PARITY_ERR_INT_ST: u1,
    -            /// This is the status bit for frm_err_int_raw when frm_err_int_ena is set to 1.
    -            FRM_ERR_INT_ST: u1,
    -            /// This is the status bit for rxfifo_ovf_int_raw when rxfifo_ovf_int_ena is set to
    -            /// 1.
    -            RXFIFO_OVF_INT_ST: u1,
    -            /// This is the status bit for dsr_chg_int_raw when dsr_chg_int_ena is set to 1.
    -            DSR_CHG_INT_ST: u1,
    -            /// This is the status bit for cts_chg_int_raw when cts_chg_int_ena is set to 1.
    -            CTS_CHG_INT_ST: u1,
    -            /// This is the status bit for brk_det_int_raw when brk_det_int_ena is set to 1.
    -            BRK_DET_INT_ST: u1,
    -            /// This is the status bit for rxfifo_tout_int_raw when rxfifo_tout_int_ena is set
    -            /// to 1.
    -            RXFIFO_TOUT_INT_ST: u1,
    -            /// This is the status bit for sw_xon_int_raw when sw_xon_int_ena is set to 1.
    -            SW_XON_INT_ST: u1,
    -            /// This is the status bit for sw_xoff_int_raw when sw_xoff_int_ena is set to 1.
    -            SW_XOFF_INT_ST: u1,
    -            /// This is the status bit for glitch_det_int_raw when glitch_det_int_ena is set to
    -            /// 1.
    -            GLITCH_DET_INT_ST: u1,
    -            /// This is the status bit for tx_brk_done_int_raw when tx_brk_done_int_ena is set
    -            /// to 1.
    -            TX_BRK_DONE_INT_ST: u1,
    -            /// This is the stauts bit for tx_brk_idle_done_int_raw when
    -            /// tx_brk_idle_done_int_ena is set to 1.
    -            TX_BRK_IDLE_DONE_INT_ST: u1,
    -            /// This is the status bit for tx_done_int_raw when tx_done_int_ena is set to 1.
    -            TX_DONE_INT_ST: u1,
    -            /// This is the status bit for rs485_parity_err_int_raw when rs485_parity_int_ena is
    -            /// set to 1.
    -            RS485_PARITY_ERR_INT_ST: u1,
    -            /// This is the status bit for rs485_frm_err_int_raw when rs485_fm_err_int_ena is
    -            /// set to 1.
    -            RS485_FRM_ERR_INT_ST: u1,
    -            /// This is the status bit for rs485_clash_int_raw when rs485_clash_int_ena is set
    -            /// to 1.
    -            RS485_CLASH_INT_ST: u1,
    -            /// This is the status bit for at_cmd_det_int_raw when at_cmd_char_det_int_ena is
    -            /// set to 1.
    -            AT_CMD_CHAR_DET_INT_ST: u1,
    -            /// This is the status bit for uart_wakeup_int_raw when uart_wakeup_int_ena is set
    -            /// to 1.
    -            WAKEUP_INT_ST: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x6001000c
    -        /// Interrupt enable bits
    -        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This is the enable bit for rxfifo_full_int_st register.
    -            RXFIFO_FULL_INT_ENA: u1,
    -            /// This is the enable bit for txfifo_empty_int_st register.
    -            TXFIFO_EMPTY_INT_ENA: u1,
    -            /// This is the enable bit for parity_err_int_st register.
    -            PARITY_ERR_INT_ENA: u1,
    -            /// This is the enable bit for frm_err_int_st register.
    -            FRM_ERR_INT_ENA: u1,
    -            /// This is the enable bit for rxfifo_ovf_int_st register.
    -            RXFIFO_OVF_INT_ENA: u1,
    -            /// This is the enable bit for dsr_chg_int_st register.
    -            DSR_CHG_INT_ENA: u1,
    -            /// This is the enable bit for cts_chg_int_st register.
    -            CTS_CHG_INT_ENA: u1,
    -            /// This is the enable bit for brk_det_int_st register.
    -            BRK_DET_INT_ENA: u1,
    -            /// This is the enable bit for rxfifo_tout_int_st register.
    -            RXFIFO_TOUT_INT_ENA: u1,
    -            /// This is the enable bit for sw_xon_int_st register.
    -            SW_XON_INT_ENA: u1,
    -            /// This is the enable bit for sw_xoff_int_st register.
    -            SW_XOFF_INT_ENA: u1,
    -            /// This is the enable bit for glitch_det_int_st register.
    -            GLITCH_DET_INT_ENA: u1,
    -            /// This is the enable bit for tx_brk_done_int_st register.
    -            TX_BRK_DONE_INT_ENA: u1,
    -            /// This is the enable bit for tx_brk_idle_done_int_st register.
    -            TX_BRK_IDLE_DONE_INT_ENA: u1,
    -            /// This is the enable bit for tx_done_int_st register.
    -            TX_DONE_INT_ENA: u1,
    -            /// This is the enable bit for rs485_parity_err_int_st register.
    -            RS485_PARITY_ERR_INT_ENA: u1,
    -            /// This is the enable bit for rs485_parity_err_int_st register.
    -            RS485_FRM_ERR_INT_ENA: u1,
    -            /// This is the enable bit for rs485_clash_int_st register.
    -            RS485_CLASH_INT_ENA: u1,
    -            /// This is the enable bit for at_cmd_char_det_int_st register.
    -            AT_CMD_CHAR_DET_INT_ENA: u1,
    -            /// This is the enable bit for uart_wakeup_int_st register.
    -            WAKEUP_INT_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x60010010
    -        /// Interrupt clear bits
    -        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Set this bit to clear the rxfifo_full_int_raw interrupt.
    -            RXFIFO_FULL_INT_CLR: u1,
    -            /// Set this bit to clear txfifo_empty_int_raw interrupt.
    -            TXFIFO_EMPTY_INT_CLR: u1,
    -            /// Set this bit to clear parity_err_int_raw interrupt.
    -            PARITY_ERR_INT_CLR: u1,
    -            /// Set this bit to clear frm_err_int_raw interrupt.
    -            FRM_ERR_INT_CLR: u1,
    -            /// Set this bit to clear rxfifo_ovf_int_raw interrupt.
    -            RXFIFO_OVF_INT_CLR: u1,
    -            /// Set this bit to clear the dsr_chg_int_raw interrupt.
    -            DSR_CHG_INT_CLR: u1,
    -            /// Set this bit to clear the cts_chg_int_raw interrupt.
    -            CTS_CHG_INT_CLR: u1,
    -            /// Set this bit to clear the brk_det_int_raw interrupt.
    -            BRK_DET_INT_CLR: u1,
    -            /// Set this bit to clear the rxfifo_tout_int_raw interrupt.
    -            RXFIFO_TOUT_INT_CLR: u1,
    -            /// Set this bit to clear the sw_xon_int_raw interrupt.
    -            SW_XON_INT_CLR: u1,
    -            /// Set this bit to clear the sw_xoff_int_raw interrupt.
    -            SW_XOFF_INT_CLR: u1,
    -            /// Set this bit to clear the glitch_det_int_raw interrupt.
    -            GLITCH_DET_INT_CLR: u1,
    -            /// Set this bit to clear the tx_brk_done_int_raw interrupt..
    -            TX_BRK_DONE_INT_CLR: u1,
    -            /// Set this bit to clear the tx_brk_idle_done_int_raw interrupt.
    -            TX_BRK_IDLE_DONE_INT_CLR: u1,
    -            /// Set this bit to clear the tx_done_int_raw interrupt.
    -            TX_DONE_INT_CLR: u1,
    -            /// Set this bit to clear the rs485_parity_err_int_raw interrupt.
    -            RS485_PARITY_ERR_INT_CLR: u1,
    -            /// Set this bit to clear the rs485_frm_err_int_raw interrupt.
    -            RS485_FRM_ERR_INT_CLR: u1,
    -            /// Set this bit to clear the rs485_clash_int_raw interrupt.
    -            RS485_CLASH_INT_CLR: u1,
    -            /// Set this bit to clear the at_cmd_char_det_int_raw interrupt.
    -            AT_CMD_CHAR_DET_INT_CLR: u1,
    -            /// Set this bit to clear the uart_wakeup_int_raw interrupt.
    -            WAKEUP_INT_CLR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x60010014
    -        /// Clock divider configuration
    -        pub const CLKDIV = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The integral part of the frequency divider factor.
    -            CLKDIV: u12,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            reserved6: u1,
    -            reserved7: u1,
    -            /// The decimal part of the frequency divider factor.
    -            FRAG: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x60010018
    -        /// Rx Filter configuration
    -        pub const RX_FILT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// when input pulse width is lower than this value, the pulse is ignored.
    -            GLITCH_FILT: u8,
    -            /// Set this bit to enable Rx signal filter.
    -            GLITCH_FILT_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x6001001c
    -        /// UART status register
    -        pub const STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Stores the byte number of valid data in Rx-FIFO.
    -            RXFIFO_CNT: u10,
    -            reserved0: u1,
    -            reserved1: u1,
    -            reserved2: u1,
    -            /// The register represent the level value of the internal uart dsr signal.
    -            DSRN: u1,
    -            /// This register represent the level value of the internal uart cts signal.
    -            CTSN: u1,
    -            /// This register represent the level value of the internal uart rxd signal.
    -            RXD: u1,
    -            /// Stores the byte number of data in Tx-FIFO.
    -            TXFIFO_CNT: u10,
    -            reserved3: u1,
    -            reserved4: u1,
    -            reserved5: u1,
    -            /// This bit represents the level of the internal uart dtr signal.
    -            DTRN: u1,
    -            /// This bit represents the level of the internal uart rts signal.
    -            RTSN: u1,
    -            /// This bit represents the level of the internal uart txd signal.
    -            TXD: u1,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x60010020
    -        /// a
    -        pub const CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register is used to configure the parity check mode.
    -            PARITY: u1,
    -            /// Set this bit to enable uart parity check.
    -            PARITY_EN: u1,
    -            /// This register is used to set the length of data.
    -            BIT_NUM: u2,
    -            /// This register is used to set the length of stop bit.
    -            STOP_BIT_NUM: u2,
    -            /// This register is used to configure the software rts signal which is used in
    -            /// software flow control.
    -            SW_RTS: u1,
    -            /// This register is used to configure the software dtr signal which is used in
    -            /// software flow control.
    -            SW_DTR: u1,
    -            /// Set this bit to enbale transmitter to send NULL when the process of sending data
    -            /// is done.
    -            TXD_BRK: u1,
    -            /// Set this bit to enable IrDA loopback mode.
    -            IRDA_DPLX: u1,
    -            /// This is the start enable bit for IrDA transmitter.
    -            IRDA_TX_EN: u1,
    -            /// 1'h1: The IrDA transmitter's 11th bit is the same as 10th bit. 1'h0: Set IrDA
    -            /// transmitter's 11th bit to 0.
    -            IRDA_WCTL: u1,
    -            /// Set this bit to invert the level of IrDA transmitter.
    -            IRDA_TX_INV: u1,
    -            /// Set this bit to invert the level of IrDA receiver.
    -            IRDA_RX_INV: u1,
    -            /// Set this bit to enable uart loopback test mode.
    -            LOOPBACK: u1,
    -            /// Set this bit to enable flow control function for transmitter.
    -            TX_FLOW_EN: u1,
    -            /// Set this bit to enable IrDA protocol.
    -            IRDA_EN: u1,
    -            /// Set this bit to reset the uart receive-FIFO.
    -            RXFIFO_RST: u1,
    -            /// Set this bit to reset the uart transmit-FIFO.
    -            TXFIFO_RST: u1,
    -            /// Set this bit to inverse the level value of uart rxd signal.
    -            RXD_INV: u1,
    -            /// Set this bit to inverse the level value of uart cts signal.
    -            CTS_INV: u1,
    -            /// Set this bit to inverse the level value of uart dsr signal.
    -            DSR_INV: u1,
    -            /// Set this bit to inverse the level value of uart txd signal.
    -            TXD_INV: u1,
    -            /// Set this bit to inverse the level value of uart rts signal.
    -            RTS_INV: u1,
    -            /// Set this bit to inverse the level value of uart dtr signal.
    -            DTR_INV: u1,
    -            /// 1'h1: Force clock on for register. 1'h0: Support clock only when application
    -            /// writes registers.
    -            CLK_EN: u1,
    -            /// 1'h1: Receiver stops storing data into FIFO when data is wrong. 1'h0: Receiver
    -            /// stores the data even if the received data is wrong.
    -            ERR_WR_MASK: u1,
    -            /// This is the enable bit for detecting baudrate.
    -            AUTOBAUD_EN: u1,
    -            /// UART memory clock gate enable signal.
    -            MEM_CLK_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x60010024
    -        /// Configuration register 1
    -        pub const CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// It will produce rxfifo_full_int interrupt when receiver receives more data than
    -            /// this register value.
    -            RXFIFO_FULL_THRHD: u9,
    -            /// It will produce txfifo_empty_int interrupt when the data amount in Tx-FIFO is
    -            /// less than this register value.
    -            TXFIFO_EMPTY_THRHD: u9,
    -            /// Disable UART Rx data overflow detect.
    -            DIS_RX_DAT_OVF: u1,
    -            /// Set this bit to stop accumulating idle_cnt when hardware flow control works.
    -            RX_TOUT_FLOW_DIS: u1,
    -            /// This is the flow enable bit for UART receiver.
    -            RX_FLOW_EN: u1,
    -            /// This is the enble bit for uart receiver's timeout function.
    -            RX_TOUT_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x60010028
    -        /// Autobaud minimum low pulse duration register
    -        pub const LOWPULSE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the value of the minimum duration time of the low level
    -            /// pulse. It is used in baud rate-detect process.
    -            MIN_CNT: u12,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x6001002c
    -        /// Autobaud minimum high pulse duration register
    -        pub const HIGHPULSE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the value of the maxinum duration time for the high level
    -            /// pulse. It is used in baud rate-detect process.
    -            MIN_CNT: u12,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x60010030
    -        /// Autobaud edge change count register
    -        pub const RXD_CNT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the count of rxd edge change. It is used in baud
    -            /// rate-detect process.
    -            RXD_EDGE_CNT: u10,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x60010034
    -        /// Software flow-control configuration
    -        pub const FLOW_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Set this bit to enable software flow control. It is used with register sw_xon or
    -            /// sw_xoff.
    -            SW_FLOW_CON_EN: u1,
    -            /// Set this bit to remove flow control char from the received data.
    -            XONOFF_DEL: u1,
    -            /// Set this bit to enable the transmitter to go on sending data.
    -            FORCE_XON: u1,
    -            /// Set this bit to stop the transmitter from sending data.
    -            FORCE_XOFF: u1,
    -            /// Set this bit to send Xon char. It is cleared by hardware automatically.
    -            SEND_XON: u1,
    -            /// Set this bit to send Xoff char. It is cleared by hardware automatically.
    -            SEND_XOFF: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x60010038
    -        /// Sleep-mode configuration
    -        pub const SLEEP_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The uart is activated from light sleeping mode when the input rxd edge changes
    -            /// more times than this register value.
    -            ACTIVE_THRESHOLD: u10,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x6001003c
    -        /// Software flow-control character configuration
    -        pub const SWFC_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// When the data amount in Rx-FIFO is more than this register value with
    -            /// uart_sw_flow_con_en set to 1, it will send a Xoff char.
    -            XOFF_THRESHOLD: u9,
    -            /// This register stores the Xoff flow control char.
    -            XOFF_CHAR: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x60010040
    -        /// Software flow-control character configuration
    -        pub const SWFC_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// When the data amount in Rx-FIFO is less than this register value with
    -            /// uart_sw_flow_con_en set to 1, it will send a Xon char.
    -            XON_THRESHOLD: u9,
    -            /// This register stores the Xon flow control char.
    -            XON_CHAR: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x60010044
    -        /// Tx Break character configuration
    -        pub const TXBRK_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register is used to configure the number of 0 to be sent after the process
    -            /// of sending data is done. It is active when txd_brk is set to 1.
    -            TX_BRK_NUM: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x60010048
    -        /// Frame-end idle configuration
    -        pub const IDLE_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// It will produce frame end signal when receiver takes more time to receive one
    -            /// byte data than this register value.
    -            RX_IDLE_THRHD: u10,
    -            /// This register is used to configure the duration time between transfers.
    -            TX_IDLE_NUM: u10,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x6001004c
    -        /// RS485 mode configuration
    -        pub const RS485_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Set this bit to choose the rs485 mode.
    -            RS485_EN: u1,
    -            /// Set this bit to delay the stop bit by 1 bit.
    -            DL0_EN: u1,
    -            /// Set this bit to delay the stop bit by 1 bit.
    -            DL1_EN: u1,
    -            /// Set this bit to enable receiver could receive data when the transmitter is
    -            /// transmitting data in rs485 mode.
    -            RS485TX_RX_EN: u1,
    -            /// 1'h1: enable rs485 transmitter to send data when rs485 receiver line is busy.
    -            RS485RXBY_TX_EN: u1,
    -            /// This register is used to delay the receiver's internal data signal.
    -            RS485_RX_DLY_NUM: u1,
    -            /// This register is used to delay the transmitter's internal data signal.
    -            RS485_TX_DLY_NUM: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -        }), base_address + 0x4c);
    -
    -        /// address: 0x60010050
    -        /// Pre-sequence timing configuration
    -        pub const AT_CMD_PRECNT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register is used to configure the idle duration time before the first
    -            /// at_cmd is received by receiver.
    -            PRE_IDLE_NUM: u16,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x60010054
    -        /// Post-sequence timing configuration
    -        pub const AT_CMD_POSTCNT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register is used to configure the duration time between the last at_cmd and
    -            /// the next data.
    -            POST_IDLE_NUM: u16,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x60010058
    -        /// Timeout configuration
    -        pub const AT_CMD_GAPTOUT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register is used to configure the duration time between the at_cmd chars.
    -            RX_GAP_TOUT: u16,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x6001005c
    -        /// AT escape sequence detection configuration
    -        pub const AT_CMD_CHAR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register is used to configure the content of at_cmd char.
    -            AT_CMD_CHAR: u8,
    -            /// This register is used to configure the num of continuous at_cmd chars received
    -            /// by receiver.
    -            CHAR_NUM: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x60010060
    -        /// UART threshold and allocation configuration
    -        pub const MEM_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            reserved0: u1,
    -            /// This register is used to configure the amount of mem allocated for receive-FIFO.
    -            /// The default number is 128 bytes.
    -            RX_SIZE: u3,
    -            /// This register is used to configure the amount of mem allocated for
    -            /// transmit-FIFO. The default number is 128 bytes.
    -            TX_SIZE: u3,
    -            /// This register is used to configure the maximum amount of data that can be
    -            /// received when hardware flow control works.
    -            RX_FLOW_THRHD: u9,
    -            /// This register is used to configure the threshold time that receiver takes to
    -            /// receive one byte. The rxfifo_tout_int interrupt will be trigger when the
    -            /// receiver takes more time to receive one byte with rx_tout_en set to 1.
    -            RX_TOUT_THRHD: u10,
    -            /// Set this bit to force power down UART memory.
    -            MEM_FORCE_PD: u1,
    -            /// Set this bit to force power up UART memory.
    -            MEM_FORCE_PU: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x60010064
    -        /// Tx-FIFO write and read offset address.
    -        pub const MEM_TX_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the offset address in Tx-FIFO when software writes Tx-FIFO
    -            /// via APB.
    -            APB_TX_WADDR: u10,
    -            reserved0: u1,
    -            /// This register stores the offset address in Tx-FIFO when Tx-FSM reads data via
    -            /// Tx-FIFO_Ctrl.
    -            TX_RADDR: u10,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x60010068
    -        /// Rx-FIFO write and read offset address.
    -        pub const MEM_RX_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the offset address in RX-FIFO when software reads data from
    -            /// Rx-FIFO via APB. UART0 is 10'h100. UART1 is 10'h180.
    -            APB_RX_RADDR: u10,
    -            reserved0: u1,
    -            /// This register stores the offset address in Rx-FIFO when Rx-FIFO_Ctrl writes
    -            /// Rx-FIFO. UART0 is 10'h100. UART1 is 10'h180.
    -            RX_WADDR: u10,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -        }), base_address + 0x68);
    -
    -        /// address: 0x6001006c
    -        /// UART transmit and receive status.
    -        pub const FSM_STATUS = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This is the status register of receiver.
    -            ST_URX_OUT: u4,
    -            /// This is the status register of transmitter.
    -            ST_UTX_OUT: u4,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x6c);
    -
    -        /// address: 0x60010070
    -        /// Autobaud high pulse register
    -        pub const POSPULSE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the minimal input clock count between two positive edges.
    -            /// It is used in boudrate-detect process.
    -            POSEDGE_MIN_CNT: u12,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0x70);
    -
    -        /// address: 0x60010074
    -        /// Autobaud low pulse register
    -        pub const NEGPULSE = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register stores the minimal input clock count between two negative edges.
    -            /// It is used in boudrate-detect process.
    -            NEGEDGE_MIN_CNT: u12,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0x74);
    -
    -        /// address: 0x60010078
    -        /// UART core clock configuration
    -        pub const CLK_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The denominator of the frequency divider factor.
    -            SCLK_DIV_B: u6,
    -            /// The numerator of the frequency divider factor.
    -            SCLK_DIV_A: u6,
    -            /// The integral part of the frequency divider factor.
    -            SCLK_DIV_NUM: u8,
    -            /// UART clock source select. 1: 80Mhz, 2: 8Mhz, 3: XTAL.
    -            SCLK_SEL: u2,
    -            /// Set this bit to enable UART Tx/Rx clock.
    -            SCLK_EN: u1,
    -            /// Write 1 then write 0 to this bit, reset UART Tx/Rx.
    -            RST_CORE: u1,
    -            /// Set this bit to enable UART Tx clock.
    -            TX_SCLK_EN: u1,
    -            /// Set this bit to enable UART Rx clock.
    -            RX_SCLK_EN: u1,
    -            /// Write 1 then write 0 to this bit, reset UART Tx.
    -            TX_RST_CORE: u1,
    -            /// Write 1 then write 0 to this bit, reset UART Rx.
    -            RX_RST_CORE: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -        }), base_address + 0x78);
    -
    -        /// address: 0x6001007c
    -        /// UART Version register
    -        pub const DATE = @intToPtr(*volatile u32, base_address + 0x7c);
    -
    -        /// address: 0x60010080
    -        /// UART ID register
    -        pub const ID = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// This register is used to configure the uart_id.
    -            ID: u30,
    -            /// This bit used to select synchronize mode. 1: Registers are auto synchronized
    -            /// into UART Core clock and UART core should be keep the same with APB clock. 0:
    -            /// After configure registers, software needs to write 1 to UART_REG_UPDATE to
    -            /// synchronize registers.
    -            HIGH_SPEED: u1,
    -            /// Software write 1 would synchronize registers into UART Core clock domain and
    -            /// would be cleared by hardware after synchronization is done.
    -            REG_UPDATE: u1,
    -        }), base_address + 0x80);
    -    };
    -
    -    /// Universal Host Controller Interface
    -    pub const UHCI0 = struct {
    -        pub const base_address = 0x60014000;
    -
    -        /// address: 0x60014000
    -        /// a
    -        pub const CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Write 1, then write 0 to this bit to reset decode state machine.
    -            TX_RST: u1,
    -            /// Write 1, then write 0 to this bit to reset encode state machine.
    -            RX_RST: u1,
    -            /// Set this bit to link up HCI and UART0.
    -            UART0_CE: u1,
    -            /// Set this bit to link up HCI and UART1.
    -            UART1_CE: u1,
    -            reserved0: u1,
    -            /// Set this bit to separate the data frame using a special char.
    -            SEPER_EN: u1,
    -            /// Set this bit to encode the data packet with a formatting header.
    -            HEAD_EN: u1,
    -            /// Set this bit to enable UHCI to receive the 16 bit CRC.
    -            CRC_REC_EN: u1,
    -            /// If this bit is set to 1, UHCI will end the payload receiving process when UART
    -            /// has been in idle state.
    -            UART_IDLE_EOF_EN: u1,
    -            /// If this bit is set to 1, UHCI decoder receiving payload data is end when the
    -            /// receiving byte count has reached the specified value. The value is payload
    -            /// length indicated by UHCI packet header when UHCI_HEAD_EN is 1 or the value is
    -            /// configuration value when UHCI_HEAD_EN is 0. If this bit is set to 0, UHCI
    -            /// decoder receiving payload data is end when 0xc0 is received.
    -            LEN_EOF_EN: u1,
    -            /// Set this bit to enable data integrity checking by appending a 16 bit CCITT-CRC
    -            /// to end of the payload.
    -            ENCODE_CRC_EN: u1,
    -            /// 1'b1: Force clock on for register. 1'b0: Support clock only when application
    -            /// writes registers.
    -            CLK_EN: u1,
    -            /// If this bit is set to 1, UHCI will end payload receive process when NULL frame
    -            /// is received by UART.
    -            UART_RX_BRK_EOF_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x60014004
    -        /// a
    -        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            RX_START_INT_RAW: u1,
    -            /// a
    -            TX_START_INT_RAW: u1,
    -            /// a
    -            RX_HUNG_INT_RAW: u1,
    -            /// a
    -            TX_HUNG_INT_RAW: u1,
    -            /// a
    -            SEND_S_REG_Q_INT_RAW: u1,
    -            /// a
    -            SEND_A_REG_Q_INT_RAW: u1,
    -            /// This is the interrupt raw bit. Triggered when there are some errors in EOF in
    -            /// the
    -            OUT_EOF_INT_RAW: u1,
    -            /// Soft control int raw bit.
    -            APP_CTRL0_INT_RAW: u1,
    -            /// Soft control int raw bit.
    -            APP_CTRL1_INT_RAW: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x60014008
    -        /// a
    -        pub const INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            RX_START_INT_ST: u1,
    -            /// a
    -            TX_START_INT_ST: u1,
    -            /// a
    -            RX_HUNG_INT_ST: u1,
    -            /// a
    -            TX_HUNG_INT_ST: u1,
    -            /// a
    -            SEND_S_REG_Q_INT_ST: u1,
    -            /// a
    -            SEND_A_REG_Q_INT_ST: u1,
    -            /// a
    -            OUTLINK_EOF_ERR_INT_ST: u1,
    -            /// a
    -            APP_CTRL0_INT_ST: u1,
    -            /// a
    -            APP_CTRL1_INT_ST: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x6001400c
    -        /// a
    -        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            RX_START_INT_ENA: u1,
    -            /// a
    -            TX_START_INT_ENA: u1,
    -            /// a
    -            RX_HUNG_INT_ENA: u1,
    -            /// a
    -            TX_HUNG_INT_ENA: u1,
    -            /// a
    -            SEND_S_REG_Q_INT_ENA: u1,
    -            /// a
    -            SEND_A_REG_Q_INT_ENA: u1,
    -            /// a
    -            OUTLINK_EOF_ERR_INT_ENA: u1,
    -            /// a
    -            APP_CTRL0_INT_ENA: u1,
    -            /// a
    -            APP_CTRL1_INT_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x60014010
    -        /// a
    -        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            RX_START_INT_CLR: u1,
    -            /// a
    -            TX_START_INT_CLR: u1,
    -            /// a
    -            RX_HUNG_INT_CLR: u1,
    -            /// a
    -            TX_HUNG_INT_CLR: u1,
    -            /// a
    -            SEND_S_REG_Q_INT_CLR: u1,
    -            /// a
    -            SEND_A_REG_Q_INT_CLR: u1,
    -            /// a
    -            OUTLINK_EOF_ERR_INT_CLR: u1,
    -            /// a
    -            APP_CTRL0_INT_CLR: u1,
    -            /// a
    -            APP_CTRL1_INT_CLR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x60014014
    -        /// a
    -        pub const CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            CHECK_SUM_EN: u1,
    -            /// a
    -            CHECK_SEQ_EN: u1,
    -            /// a
    -            CRC_DISABLE: u1,
    -            /// a
    -            SAVE_HEAD: u1,
    -            /// a
    -            TX_CHECK_SUM_RE: u1,
    -            /// a
    -            TX_ACK_NUM_RE: u1,
    -            reserved0: u1,
    -            /// a
    -            WAIT_SW_START: u1,
    -            /// a
    -            SW_START: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x60014018
    -        /// a
    -        pub const STATE0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            RX_ERR_CAUSE: u3,
    -            /// a
    -            DECODE_STATE: u3,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x6001401c
    -        /// a
    -        pub const STATE1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            ENCODE_STATE: u3,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x60014020
    -        /// a
    -        pub const ESCAPE_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            TX_C0_ESC_EN: u1,
    -            /// a
    -            TX_DB_ESC_EN: u1,
    -            /// a
    -            TX_11_ESC_EN: u1,
    -            /// a
    -            TX_13_ESC_EN: u1,
    -            /// a
    -            RX_C0_ESC_EN: u1,
    -            /// a
    -            RX_DB_ESC_EN: u1,
    -            /// a
    -            RX_11_ESC_EN: u1,
    -            /// a
    -            RX_13_ESC_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x60014024
    -        /// a
    -        pub const HUNG_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            TXFIFO_TIMEOUT: u8,
    -            /// a
    -            TXFIFO_TIMEOUT_SHIFT: u3,
    -            /// a
    -            TXFIFO_TIMEOUT_ENA: u1,
    -            /// a
    -            RXFIFO_TIMEOUT: u8,
    -            /// a
    -            RXFIFO_TIMEOUT_SHIFT: u3,
    -            /// a
    -            RXFIFO_TIMEOUT_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x60014028
    -        /// a
    -        pub const ACK_NUM = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            ACK_NUM: u3,
    -            /// a
    -            LOAD: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x6001402c
    -        /// a
    -        pub const RX_HEAD = @intToPtr(*volatile u32, base_address + 0x2c);
    -
    -        /// address: 0x60014030
    -        /// a
    -        pub const QUICK_SENT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SINGLE_SEND_NUM: u3,
    -            /// a
    -            SINGLE_SEND_EN: u1,
    -            /// a
    -            ALWAYS_SEND_NUM: u3,
    -            /// a
    -            ALWAYS_SEND_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x60014034
    -        /// a
    -        pub const REG_Q0_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q0_WORD0: u32,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x60014038
    -        /// a
    -        pub const REG_Q0_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q0_WORD1: u32,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x6001403c
    -        /// a
    -        pub const REG_Q1_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q1_WORD0: u32,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x60014040
    -        /// a
    -        pub const REG_Q1_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q1_WORD1: u32,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x60014044
    -        /// a
    -        pub const REG_Q2_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q2_WORD0: u32,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x60014048
    -        /// a
    -        pub const REG_Q2_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q2_WORD1: u32,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x6001404c
    -        /// a
    -        pub const REG_Q3_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q3_WORD0: u32,
    -        }), base_address + 0x4c);
    -
    -        /// address: 0x60014050
    -        /// a
    -        pub const REG_Q3_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q3_WORD1: u32,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x60014054
    -        /// a
    -        pub const REG_Q4_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q4_WORD0: u32,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x60014058
    -        /// a
    -        pub const REG_Q4_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q4_WORD1: u32,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x6001405c
    -        /// a
    -        pub const REG_Q5_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q5_WORD0: u32,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x60014060
    -        /// a
    -        pub const REG_Q5_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q5_WORD1: u32,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x60014064
    -        /// a
    -        pub const REG_Q6_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q6_WORD0: u32,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x60014068
    -        /// a
    -        pub const REG_Q6_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q6_WORD1: u32,
    -        }), base_address + 0x68);
    -
    -        /// address: 0x6001406c
    -        /// a
    -        pub const ESC_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEPER_CHAR: u8,
    -            /// a
    -            SEPER_ESC_CHAR0: u8,
    -            /// a
    -            SEPER_ESC_CHAR1: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -        }), base_address + 0x6c);
    -
    -        /// address: 0x60014070
    -        /// a
    -        pub const ESC_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            ESC_SEQ0: u8,
    -            /// a
    -            ESC_SEQ0_CHAR0: u8,
    -            /// a
    -            ESC_SEQ0_CHAR1: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -        }), base_address + 0x70);
    -
    -        /// address: 0x60014074
    -        /// a
    -        pub const ESC_CONF2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            ESC_SEQ1: u8,
    -            /// a
    -            ESC_SEQ1_CHAR0: u8,
    -            /// a
    -            ESC_SEQ1_CHAR1: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -        }), base_address + 0x74);
    -
    -        /// address: 0x60014078
    -        /// a
    -        pub const ESC_CONF3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            ESC_SEQ2: u8,
    -            /// a
    -            ESC_SEQ2_CHAR0: u8,
    -            /// a
    -            ESC_SEQ2_CHAR1: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -        }), base_address + 0x78);
    -
    -        /// address: 0x6001407c
    -        /// a
    -        pub const PKT_THRES = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            PKT_THRS: u13,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -        }), base_address + 0x7c);
    -
    -        /// address: 0x60014080
    -        /// a
    -        pub const DATE = @intToPtr(*volatile u32, base_address + 0x80);
    -    };
    -
    -    /// Universal Host Controller Interface
    -    pub const UHCI1 = struct {
    -        pub const base_address = 0x6000c000;
    -
    -        /// address: 0x6000c000
    -        /// a
    -        pub const CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Write 1, then write 0 to this bit to reset decode state machine.
    -            TX_RST: u1,
    -            /// Write 1, then write 0 to this bit to reset encode state machine.
    -            RX_RST: u1,
    -            /// Set this bit to link up HCI and UART0.
    -            UART0_CE: u1,
    -            /// Set this bit to link up HCI and UART1.
    -            UART1_CE: u1,
    -            reserved0: u1,
    -            /// Set this bit to separate the data frame using a special char.
    -            SEPER_EN: u1,
    -            /// Set this bit to encode the data packet with a formatting header.
    -            HEAD_EN: u1,
    -            /// Set this bit to enable UHCI to receive the 16 bit CRC.
    -            CRC_REC_EN: u1,
    -            /// If this bit is set to 1, UHCI will end the payload receiving process when UART
    -            /// has been in idle state.
    -            UART_IDLE_EOF_EN: u1,
    -            /// If this bit is set to 1, UHCI decoder receiving payload data is end when the
    -            /// receiving byte count has reached the specified value. The value is payload
    -            /// length indicated by UHCI packet header when UHCI_HEAD_EN is 1 or the value is
    -            /// configuration value when UHCI_HEAD_EN is 0. If this bit is set to 0, UHCI
    -            /// decoder receiving payload data is end when 0xc0 is received.
    -            LEN_EOF_EN: u1,
    -            /// Set this bit to enable data integrity checking by appending a 16 bit CCITT-CRC
    -            /// to end of the payload.
    -            ENCODE_CRC_EN: u1,
    -            /// 1'b1: Force clock on for register. 1'b0: Support clock only when application
    -            /// writes registers.
    -            CLK_EN: u1,
    -            /// If this bit is set to 1, UHCI will end payload receive process when NULL frame
    -            /// is received by UART.
    -            UART_RX_BRK_EOF_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x6000c004
    -        /// a
    -        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            RX_START_INT_RAW: u1,
    -            /// a
    -            TX_START_INT_RAW: u1,
    -            /// a
    -            RX_HUNG_INT_RAW: u1,
    -            /// a
    -            TX_HUNG_INT_RAW: u1,
    -            /// a
    -            SEND_S_REG_Q_INT_RAW: u1,
    -            /// a
    -            SEND_A_REG_Q_INT_RAW: u1,
    -            /// This is the interrupt raw bit. Triggered when there are some errors in EOF in
    -            /// the
    -            OUT_EOF_INT_RAW: u1,
    -            /// Soft control int raw bit.
    -            APP_CTRL0_INT_RAW: u1,
    -            /// Soft control int raw bit.
    -            APP_CTRL1_INT_RAW: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x6000c008
    -        /// a
    -        pub const INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            RX_START_INT_ST: u1,
    -            /// a
    -            TX_START_INT_ST: u1,
    -            /// a
    -            RX_HUNG_INT_ST: u1,
    -            /// a
    -            TX_HUNG_INT_ST: u1,
    -            /// a
    -            SEND_S_REG_Q_INT_ST: u1,
    -            /// a
    -            SEND_A_REG_Q_INT_ST: u1,
    -            /// a
    -            OUTLINK_EOF_ERR_INT_ST: u1,
    -            /// a
    -            APP_CTRL0_INT_ST: u1,
    -            /// a
    -            APP_CTRL1_INT_ST: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x6000c00c
    -        /// a
    -        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            RX_START_INT_ENA: u1,
    -            /// a
    -            TX_START_INT_ENA: u1,
    -            /// a
    -            RX_HUNG_INT_ENA: u1,
    -            /// a
    -            TX_HUNG_INT_ENA: u1,
    -            /// a
    -            SEND_S_REG_Q_INT_ENA: u1,
    -            /// a
    -            SEND_A_REG_Q_INT_ENA: u1,
    -            /// a
    -            OUTLINK_EOF_ERR_INT_ENA: u1,
    -            /// a
    -            APP_CTRL0_INT_ENA: u1,
    -            /// a
    -            APP_CTRL1_INT_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x6000c010
    -        /// a
    -        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            RX_START_INT_CLR: u1,
    -            /// a
    -            TX_START_INT_CLR: u1,
    -            /// a
    -            RX_HUNG_INT_CLR: u1,
    -            /// a
    -            TX_HUNG_INT_CLR: u1,
    -            /// a
    -            SEND_S_REG_Q_INT_CLR: u1,
    -            /// a
    -            SEND_A_REG_Q_INT_CLR: u1,
    -            /// a
    -            OUTLINK_EOF_ERR_INT_CLR: u1,
    -            /// a
    -            APP_CTRL0_INT_CLR: u1,
    -            /// a
    -            APP_CTRL1_INT_CLR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x6000c014
    -        /// a
    -        pub const CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            CHECK_SUM_EN: u1,
    -            /// a
    -            CHECK_SEQ_EN: u1,
    -            /// a
    -            CRC_DISABLE: u1,
    -            /// a
    -            SAVE_HEAD: u1,
    -            /// a
    -            TX_CHECK_SUM_RE: u1,
    -            /// a
    -            TX_ACK_NUM_RE: u1,
    -            reserved0: u1,
    -            /// a
    -            WAIT_SW_START: u1,
    -            /// a
    -            SW_START: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x6000c018
    -        /// a
    -        pub const STATE0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            RX_ERR_CAUSE: u3,
    -            /// a
    -            DECODE_STATE: u3,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x6000c01c
    -        /// a
    -        pub const STATE1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            ENCODE_STATE: u3,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x6000c020
    -        /// a
    -        pub const ESCAPE_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            TX_C0_ESC_EN: u1,
    -            /// a
    -            TX_DB_ESC_EN: u1,
    -            /// a
    -            TX_11_ESC_EN: u1,
    -            /// a
    -            TX_13_ESC_EN: u1,
    -            /// a
    -            RX_C0_ESC_EN: u1,
    -            /// a
    -            RX_DB_ESC_EN: u1,
    -            /// a
    -            RX_11_ESC_EN: u1,
    -            /// a
    -            RX_13_ESC_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x6000c024
    -        /// a
    -        pub const HUNG_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            TXFIFO_TIMEOUT: u8,
    -            /// a
    -            TXFIFO_TIMEOUT_SHIFT: u3,
    -            /// a
    -            TXFIFO_TIMEOUT_ENA: u1,
    -            /// a
    -            RXFIFO_TIMEOUT: u8,
    -            /// a
    -            RXFIFO_TIMEOUT_SHIFT: u3,
    -            /// a
    -            RXFIFO_TIMEOUT_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x6000c028
    -        /// a
    -        pub const ACK_NUM = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            ACK_NUM: u3,
    -            /// a
    -            LOAD: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x6000c02c
    -        /// a
    -        pub const RX_HEAD = @intToPtr(*volatile u32, base_address + 0x2c);
    -
    -        /// address: 0x6000c030
    -        /// a
    -        pub const QUICK_SENT = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SINGLE_SEND_NUM: u3,
    -            /// a
    -            SINGLE_SEND_EN: u1,
    -            /// a
    -            ALWAYS_SEND_NUM: u3,
    -            /// a
    -            ALWAYS_SEND_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x6000c034
    -        /// a
    -        pub const REG_Q0_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q0_WORD0: u32,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x6000c038
    -        /// a
    -        pub const REG_Q0_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q0_WORD1: u32,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x6000c03c
    -        /// a
    -        pub const REG_Q1_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q1_WORD0: u32,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x6000c040
    -        /// a
    -        pub const REG_Q1_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q1_WORD1: u32,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x6000c044
    -        /// a
    -        pub const REG_Q2_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q2_WORD0: u32,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x6000c048
    -        /// a
    -        pub const REG_Q2_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q2_WORD1: u32,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x6000c04c
    -        /// a
    -        pub const REG_Q3_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q3_WORD0: u32,
    -        }), base_address + 0x4c);
    -
    -        /// address: 0x6000c050
    -        /// a
    -        pub const REG_Q3_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q3_WORD1: u32,
    -        }), base_address + 0x50);
    -
    -        /// address: 0x6000c054
    -        /// a
    -        pub const REG_Q4_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q4_WORD0: u32,
    -        }), base_address + 0x54);
    -
    -        /// address: 0x6000c058
    -        /// a
    -        pub const REG_Q4_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q4_WORD1: u32,
    -        }), base_address + 0x58);
    -
    -        /// address: 0x6000c05c
    -        /// a
    -        pub const REG_Q5_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q5_WORD0: u32,
    -        }), base_address + 0x5c);
    -
    -        /// address: 0x6000c060
    -        /// a
    -        pub const REG_Q5_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q5_WORD1: u32,
    -        }), base_address + 0x60);
    -
    -        /// address: 0x6000c064
    -        /// a
    -        pub const REG_Q6_WORD0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q6_WORD0: u32,
    -        }), base_address + 0x64);
    -
    -        /// address: 0x6000c068
    -        /// a
    -        pub const REG_Q6_WORD1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEND_Q6_WORD1: u32,
    -        }), base_address + 0x68);
    -
    -        /// address: 0x6000c06c
    -        /// a
    -        pub const ESC_CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            SEPER_CHAR: u8,
    -            /// a
    -            SEPER_ESC_CHAR0: u8,
    -            /// a
    -            SEPER_ESC_CHAR1: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -        }), base_address + 0x6c);
    -
    -        /// address: 0x6000c070
    -        /// a
    -        pub const ESC_CONF1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            ESC_SEQ0: u8,
    -            /// a
    -            ESC_SEQ0_CHAR0: u8,
    -            /// a
    -            ESC_SEQ0_CHAR1: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -        }), base_address + 0x70);
    -
    -        /// address: 0x6000c074
    -        /// a
    -        pub const ESC_CONF2 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            ESC_SEQ1: u8,
    -            /// a
    -            ESC_SEQ1_CHAR0: u8,
    -            /// a
    -            ESC_SEQ1_CHAR1: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -        }), base_address + 0x74);
    -
    -        /// address: 0x6000c078
    -        /// a
    -        pub const ESC_CONF3 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            ESC_SEQ2: u8,
    -            /// a
    -            ESC_SEQ2_CHAR0: u8,
    -            /// a
    -            ESC_SEQ2_CHAR1: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -        }), base_address + 0x78);
    -
    -        /// address: 0x6000c07c
    -        /// a
    -        pub const PKT_THRES = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// a
    -            PKT_THRS: u13,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -        }), base_address + 0x7c);
    -
    -        /// address: 0x6000c080
    -        /// a
    -        pub const DATE = @intToPtr(*volatile u32, base_address + 0x80);
    -    };
    -
    -    /// Full-speed USB Serial/JTAG Controller
    -    pub const USB_DEVICE = struct {
    -        pub const base_address = 0x60043000;
    -
    -        /// address: 0x60043000
    -        /// USB_DEVICE_EP1_REG.
    -        pub const EP1 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Write and read byte data to/from UART Tx/Rx FIFO through this field. When
    -            /// USB_DEVICE_SERIAL_IN_EMPTY_INT is set, then user can write data (up to 64 bytes)
    -            /// into UART Tx FIFO. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is set, user can
    -            /// check USB_DEVICE_OUT_EP1_WR_ADDR USB_DEVICE_OUT_EP0_RD_ADDR to know how many
    -            /// data is received, then read data from UART Rx FIFO.
    -            RDWR_BYTE: u8,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -        }), base_address + 0x0);
    -
    -        /// address: 0x60043004
    -        /// USB_DEVICE_EP1_CONF_REG.
    -        pub const EP1_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Set this bit to indicate writing byte data to UART Tx FIFO is done.
    -            WR_DONE: u1,
    -            /// 1'b1: Indicate UART Tx FIFO is not full and can write data into in. After
    -            /// writing USB_DEVICE_WR_DONE, this bit would be 0 until data in UART Tx FIFO is
    -            /// read by USB Host.
    -            SERIAL_IN_EP_DATA_FREE: u1,
    -            /// 1'b1: Indicate there is data in UART Rx FIFO.
    -            SERIAL_OUT_EP_DATA_AVAIL: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -        }), base_address + 0x4);
    -
    -        /// address: 0x60043008
    -        /// USB_DEVICE_INT_RAW_REG.
    -        pub const INT_RAW = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The raw interrupt bit turns to high level when flush cmd is received for IN
    -            /// endpoint 2 of JTAG.
    -            JTAG_IN_FLUSH_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when SOF frame is received.
    -            SOF_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when Serial Port OUT Endpoint received
    -            /// one packet.
    -            SERIAL_OUT_RECV_PKT_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when Serial Port IN Endpoint is empty.
    -            SERIAL_IN_EMPTY_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when pid error is detected.
    -            PID_ERR_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when CRC5 error is detected.
    -            CRC5_ERR_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when CRC16 error is detected.
    -            CRC16_ERR_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when stuff error is detected.
    -            STUFF_ERR_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when IN token for IN endpoint 1 is
    -            /// received.
    -            IN_TOKEN_REC_IN_EP1_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when usb bus reset is detected.
    -            USB_BUS_RESET_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when OUT endpoint 1 received packet
    -            /// with zero palyload.
    -            OUT_EP1_ZERO_PAYLOAD_INT_RAW: u1,
    -            /// The raw interrupt bit turns to high level when OUT endpoint 2 received packet
    -            /// with zero palyload.
    -            OUT_EP2_ZERO_PAYLOAD_INT_RAW: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0x8);
    -
    -        /// address: 0x6004300c
    -        /// USB_DEVICE_INT_ST_REG.
    -        pub const INT_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The raw interrupt status bit for the USB_DEVICE_JTAG_IN_FLUSH_INT interrupt.
    -            JTAG_IN_FLUSH_INT_ST: u1,
    -            /// The raw interrupt status bit for the USB_DEVICE_SOF_INT interrupt.
    -            SOF_INT_ST: u1,
    -            /// The raw interrupt status bit for the USB_DEVICE_SERIAL_OUT_RECV_PKT_INT
    -            /// interrupt.
    -            SERIAL_OUT_RECV_PKT_INT_ST: u1,
    -            /// The raw interrupt status bit for the USB_DEVICE_SERIAL_IN_EMPTY_INT interrupt.
    -            SERIAL_IN_EMPTY_INT_ST: u1,
    -            /// The raw interrupt status bit for the USB_DEVICE_PID_ERR_INT interrupt.
    -            PID_ERR_INT_ST: u1,
    -            /// The raw interrupt status bit for the USB_DEVICE_CRC5_ERR_INT interrupt.
    -            CRC5_ERR_INT_ST: u1,
    -            /// The raw interrupt status bit for the USB_DEVICE_CRC16_ERR_INT interrupt.
    -            CRC16_ERR_INT_ST: u1,
    -            /// The raw interrupt status bit for the USB_DEVICE_STUFF_ERR_INT interrupt.
    -            STUFF_ERR_INT_ST: u1,
    -            /// The raw interrupt status bit for the USB_DEVICE_IN_TOKEN_REC_IN_EP1_INT
    -            /// interrupt.
    -            IN_TOKEN_REC_IN_EP1_INT_ST: u1,
    -            /// The raw interrupt status bit for the USB_DEVICE_USB_BUS_RESET_INT interrupt.
    -            USB_BUS_RESET_INT_ST: u1,
    -            /// The raw interrupt status bit for the USB_DEVICE_OUT_EP1_ZERO_PAYLOAD_INT
    -            /// interrupt.
    -            OUT_EP1_ZERO_PAYLOAD_INT_ST: u1,
    -            /// The raw interrupt status bit for the USB_DEVICE_OUT_EP2_ZERO_PAYLOAD_INT
    -            /// interrupt.
    -            OUT_EP2_ZERO_PAYLOAD_INT_ST: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0xc);
    -
    -        /// address: 0x60043010
    -        /// USB_DEVICE_INT_ENA_REG.
    -        pub const INT_ENA = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// The interrupt enable bit for the USB_DEVICE_JTAG_IN_FLUSH_INT interrupt.
    -            JTAG_IN_FLUSH_INT_ENA: u1,
    -            /// The interrupt enable bit for the USB_DEVICE_SOF_INT interrupt.
    -            SOF_INT_ENA: u1,
    -            /// The interrupt enable bit for the USB_DEVICE_SERIAL_OUT_RECV_PKT_INT interrupt.
    -            SERIAL_OUT_RECV_PKT_INT_ENA: u1,
    -            /// The interrupt enable bit for the USB_DEVICE_SERIAL_IN_EMPTY_INT interrupt.
    -            SERIAL_IN_EMPTY_INT_ENA: u1,
    -            /// The interrupt enable bit for the USB_DEVICE_PID_ERR_INT interrupt.
    -            PID_ERR_INT_ENA: u1,
    -            /// The interrupt enable bit for the USB_DEVICE_CRC5_ERR_INT interrupt.
    -            CRC5_ERR_INT_ENA: u1,
    -            /// The interrupt enable bit for the USB_DEVICE_CRC16_ERR_INT interrupt.
    -            CRC16_ERR_INT_ENA: u1,
    -            /// The interrupt enable bit for the USB_DEVICE_STUFF_ERR_INT interrupt.
    -            STUFF_ERR_INT_ENA: u1,
    -            /// The interrupt enable bit for the USB_DEVICE_IN_TOKEN_REC_IN_EP1_INT interrupt.
    -            IN_TOKEN_REC_IN_EP1_INT_ENA: u1,
    -            /// The interrupt enable bit for the USB_DEVICE_USB_BUS_RESET_INT interrupt.
    -            USB_BUS_RESET_INT_ENA: u1,
    -            /// The interrupt enable bit for the USB_DEVICE_OUT_EP1_ZERO_PAYLOAD_INT interrupt.
    -            OUT_EP1_ZERO_PAYLOAD_INT_ENA: u1,
    -            /// The interrupt enable bit for the USB_DEVICE_OUT_EP2_ZERO_PAYLOAD_INT interrupt.
    -            OUT_EP2_ZERO_PAYLOAD_INT_ENA: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0x10);
    -
    -        /// address: 0x60043014
    -        /// USB_DEVICE_INT_CLR_REG.
    -        pub const INT_CLR = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Set this bit to clear the USB_DEVICE_JTAG_IN_FLUSH_INT interrupt.
    -            JTAG_IN_FLUSH_INT_CLR: u1,
    -            /// Set this bit to clear the USB_DEVICE_JTAG_SOF_INT interrupt.
    -            SOF_INT_CLR: u1,
    -            /// Set this bit to clear the USB_DEVICE_SERIAL_OUT_RECV_PKT_INT interrupt.
    -            SERIAL_OUT_RECV_PKT_INT_CLR: u1,
    -            /// Set this bit to clear the USB_DEVICE_SERIAL_IN_EMPTY_INT interrupt.
    -            SERIAL_IN_EMPTY_INT_CLR: u1,
    -            /// Set this bit to clear the USB_DEVICE_PID_ERR_INT interrupt.
    -            PID_ERR_INT_CLR: u1,
    -            /// Set this bit to clear the USB_DEVICE_CRC5_ERR_INT interrupt.
    -            CRC5_ERR_INT_CLR: u1,
    -            /// Set this bit to clear the USB_DEVICE_CRC16_ERR_INT interrupt.
    -            CRC16_ERR_INT_CLR: u1,
    -            /// Set this bit to clear the USB_DEVICE_STUFF_ERR_INT interrupt.
    -            STUFF_ERR_INT_CLR: u1,
    -            /// Set this bit to clear the USB_DEVICE_IN_TOKEN_IN_EP1_INT interrupt.
    -            IN_TOKEN_REC_IN_EP1_INT_CLR: u1,
    -            /// Set this bit to clear the USB_DEVICE_USB_BUS_RESET_INT interrupt.
    -            USB_BUS_RESET_INT_CLR: u1,
    -            /// Set this bit to clear the USB_DEVICE_OUT_EP1_ZERO_PAYLOAD_INT interrupt.
    -            OUT_EP1_ZERO_PAYLOAD_INT_CLR: u1,
    -            /// Set this bit to clear the USB_DEVICE_OUT_EP2_ZERO_PAYLOAD_INT interrupt.
    -            OUT_EP2_ZERO_PAYLOAD_INT_CLR: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -        }), base_address + 0x14);
    -
    -        /// address: 0x60043018
    -        /// USB_DEVICE_CONF0_REG.
    -        pub const CONF0 = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Select internal/external PHY
    -            PHY_SEL: u1,
    -            /// Enable software control USB D+ D- exchange
    -            EXCHG_PINS_OVERRIDE: u1,
    -            /// USB D+ D- exchange
    -            EXCHG_PINS: u1,
    -            /// Control single-end input high threshold,1.76V to 2V, step 80mV
    -            VREFH: u2,
    -            /// Control single-end input low threshold,0.8V to 1.04V, step 80mV
    -            VREFL: u2,
    -            /// Enable software control input threshold
    -            VREF_OVERRIDE: u1,
    -            /// Enable software control USB D+ D- pullup pulldown
    -            PAD_PULL_OVERRIDE: u1,
    -            /// Control USB D+ pull up.
    -            DP_PULLUP: u1,
    -            /// Control USB D+ pull down.
    -            DP_PULLDOWN: u1,
    -            /// Control USB D- pull up.
    -            DM_PULLUP: u1,
    -            /// Control USB D- pull down.
    -            DM_PULLDOWN: u1,
    -            /// Control pull up value.
    -            PULLUP_VALUE: u1,
    -            /// Enable USB pad function.
    -            USB_PAD_ENABLE: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -        }), base_address + 0x18);
    -
    -        /// address: 0x6004301c
    -        /// USB_DEVICE_TEST_REG.
    -        pub const TEST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Enable test of the USB pad
    -            ENABLE: u1,
    -            /// USB pad oen in test
    -            USB_OE: u1,
    -            /// USB D+ tx value in test
    -            TX_DP: u1,
    -            /// USB D- tx value in test
    -            TX_DM: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -        }), base_address + 0x1c);
    -
    -        /// address: 0x60043020
    -        /// USB_DEVICE_JFIFO_ST_REG.
    -        pub const JFIFO_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// JTAT in fifo counter.
    -            IN_FIFO_CNT: u2,
    -            /// 1: JTAG in fifo is empty.
    -            IN_FIFO_EMPTY: u1,
    -            /// 1: JTAG in fifo is full.
    -            IN_FIFO_FULL: u1,
    -            /// JTAT out fifo counter.
    -            OUT_FIFO_CNT: u2,
    -            /// 1: JTAG out fifo is empty.
    -            OUT_FIFO_EMPTY: u1,
    -            /// 1: JTAG out fifo is full.
    -            OUT_FIFO_FULL: u1,
    -            /// Write 1 to reset JTAG in fifo.
    -            IN_FIFO_RESET: u1,
    -            /// Write 1 to reset JTAG out fifo.
    -            OUT_FIFO_RESET: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -        }), base_address + 0x20);
    -
    -        /// address: 0x60043024
    -        /// USB_DEVICE_FRAM_NUM_REG.
    -        pub const FRAM_NUM = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// Frame index of received SOF frame.
    -            SOF_FRAME_INDEX: u11,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -        }), base_address + 0x24);
    -
    -        /// address: 0x60043028
    -        /// USB_DEVICE_IN_EP0_ST_REG.
    -        pub const IN_EP0_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// State of IN Endpoint 0.
    -            IN_EP0_STATE: u2,
    -            /// Write data address of IN endpoint 0.
    -            IN_EP0_WR_ADDR: u7,
    -            /// Read data address of IN endpoint 0.
    -            IN_EP0_RD_ADDR: u7,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x28);
    -
    -        /// address: 0x6004302c
    -        /// USB_DEVICE_IN_EP1_ST_REG.
    -        pub const IN_EP1_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// State of IN Endpoint 1.
    -            IN_EP1_STATE: u2,
    -            /// Write data address of IN endpoint 1.
    -            IN_EP1_WR_ADDR: u7,
    -            /// Read data address of IN endpoint 1.
    -            IN_EP1_RD_ADDR: u7,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x2c);
    -
    -        /// address: 0x60043030
    -        /// USB_DEVICE_IN_EP2_ST_REG.
    -        pub const IN_EP2_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// State of IN Endpoint 2.
    -            IN_EP2_STATE: u2,
    -            /// Write data address of IN endpoint 2.
    -            IN_EP2_WR_ADDR: u7,
    -            /// Read data address of IN endpoint 2.
    -            IN_EP2_RD_ADDR: u7,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x30);
    -
    -        /// address: 0x60043034
    -        /// USB_DEVICE_IN_EP3_ST_REG.
    -        pub const IN_EP3_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// State of IN Endpoint 3.
    -            IN_EP3_STATE: u2,
    -            /// Write data address of IN endpoint 3.
    -            IN_EP3_WR_ADDR: u7,
    -            /// Read data address of IN endpoint 3.
    -            IN_EP3_RD_ADDR: u7,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x34);
    -
    -        /// address: 0x60043038
    -        /// USB_DEVICE_OUT_EP0_ST_REG.
    -        pub const OUT_EP0_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// State of OUT Endpoint 0.
    -            OUT_EP0_STATE: u2,
    -            /// Write data address of OUT endpoint 0. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is
    -            /// detected, there are USB_DEVICE_OUT_EP0_WR_ADDR-2 bytes data in OUT EP0.
    -            OUT_EP0_WR_ADDR: u7,
    -            /// Read data address of OUT endpoint 0.
    -            OUT_EP0_RD_ADDR: u7,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x38);
    -
    -        /// address: 0x6004303c
    -        /// USB_DEVICE_OUT_EP1_ST_REG.
    -        pub const OUT_EP1_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// State of OUT Endpoint 1.
    -            OUT_EP1_STATE: u2,
    -            /// Write data address of OUT endpoint 1. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is
    -            /// detected, there are USB_DEVICE_OUT_EP1_WR_ADDR-2 bytes data in OUT EP1.
    -            OUT_EP1_WR_ADDR: u7,
    -            /// Read data address of OUT endpoint 1.
    -            OUT_EP1_RD_ADDR: u7,
    -            /// Data count in OUT endpoint 1 when one packet is received.
    -            OUT_EP1_REC_DATA_CNT: u7,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -        }), base_address + 0x3c);
    -
    -        /// address: 0x60043040
    -        /// USB_DEVICE_OUT_EP2_ST_REG.
    -        pub const OUT_EP2_ST = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// State of OUT Endpoint 2.
    -            OUT_EP2_STATE: u2,
    -            /// Write data address of OUT endpoint 2. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is
    -            /// detected, there are USB_DEVICE_OUT_EP2_WR_ADDR-2 bytes data in OUT EP2.
    -            OUT_EP2_WR_ADDR: u7,
    -            /// Read data address of OUT endpoint 2.
    -            OUT_EP2_RD_ADDR: u7,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -        }), base_address + 0x40);
    -
    -        /// address: 0x60043044
    -        /// USB_DEVICE_MISC_CONF_REG.
    -        pub const MISC_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 1'h1: Force clock on for register. 1'h0: Support clock only when application
    -            /// writes registers.
    -            CLK_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -            padding30: u1,
    -        }), base_address + 0x44);
    -
    -        /// address: 0x60043048
    -        /// USB_DEVICE_MEM_CONF_REG.
    -        pub const MEM_CONF = @intToPtr(*volatile Mmio(32, packed struct {
    -            /// 1: power down usb memory.
    -            USB_MEM_PD: u1,
    -            /// 1: Force clock on for usb memory.
    -            USB_MEM_CLK_EN: u1,
    -            padding0: u1,
    -            padding1: u1,
    -            padding2: u1,
    -            padding3: u1,
    -            padding4: u1,
    -            padding5: u1,
    -            padding6: u1,
    -            padding7: u1,
    -            padding8: u1,
    -            padding9: u1,
    -            padding10: u1,
    -            padding11: u1,
    -            padding12: u1,
    -            padding13: u1,
    -            padding14: u1,
    -            padding15: u1,
    -            padding16: u1,
    -            padding17: u1,
    -            padding18: u1,
    -            padding19: u1,
    -            padding20: u1,
    -            padding21: u1,
    -            padding22: u1,
    -            padding23: u1,
    -            padding24: u1,
    -            padding25: u1,
    -            padding26: u1,
    -            padding27: u1,
    -            padding28: u1,
    -            padding29: u1,
    -        }), base_address + 0x48);
    -
    -        /// address: 0x60043080
    -        /// USB_DEVICE_DATE_REG.
    -        pub const DATE = @intToPtr(*volatile u32, base_address + 0x80);
    -    };
    -
    -    /// XTS-AES-128 Flash Encryption
    -    pub const XTS_AES = struct {
    -        pub const base_address = 0x600cc000;
    -
    -        /// address: 0x600cc000
    -        /// The memory that stores plaintext
    -        pub const PLAIN_MEM = @intToPtr(*volatile [16]u8, base_address + 0x0);
    -
    -        /// address: 0x600cc040
    -        /// XTS-AES line-size register
    -        pub const LINESIZE = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x40);
    -
    -        /// address: 0x600cc044
    -        /// XTS-AES destination register
    -        pub const DESTINATION = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x44);
    -
    -        /// address: 0x600cc048
    -        /// XTS-AES physical address register
    -        pub const PHYSICAL_ADDRESS = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x48);
    -
    -        /// address: 0x600cc04c
    -        /// XTS-AES trigger register
    -        pub const TRIGGER = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x4c);
    -
    -        /// address: 0x600cc050
    -        /// XTS-AES release register
    -        pub const RELEASE = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x50);
    -
    -        /// address: 0x600cc054
    -        /// XTS-AES destroy register
    -        pub const DESTROY = @intToPtr(*volatile MmioInt(32, u1), base_address + 0x54);
    -
    -        /// address: 0x600cc058
    -        /// XTS-AES status register
    -        pub const STATE = @intToPtr(*volatile MmioInt(32, u2), base_address + 0x58);
    -
    -        /// address: 0x600cc05c
    -        /// XTS-AES version control register
    -        pub const DATE = @intToPtr(*volatile MmioInt(32, u30), base_address + 0x5c);
    -    };
    -};
    -
    -const std = @import("std");
    -
    -pub fn mmio(addr: usize, comptime size: u8, comptime PackedT: type) *volatile Mmio(size, PackedT) {
    -    return @intToPtr(*volatile Mmio(size, PackedT), addr);
    -}
    -
    -pub fn Mmio(comptime size: u8, comptime PackedT: type) type {
    -    if ((size % 8) != 0)
    -        @compileError("size must be divisible by 8!");
    -
    -    if (!std.math.isPowerOfTwo(size / 8))
    -        @compileError("size must encode a power of two number of bytes!");
    -
    -    const IntT = std.meta.Int(.unsigned, size);
    -
    -    if (@sizeOf(PackedT) != (size / 8))
    -        @compileError(std.fmt.comptimePrint("IntT and PackedT must have the same size!, they are {} and {} bytes respectively", .{ size / 8, @sizeOf(PackedT) }));
    -
    -    return extern struct {
    -        const Self = @This();
    -
    -        raw: IntT,
    -
    -        pub const underlying_type = PackedT;
    -
    -        pub inline fn read(addr: *volatile Self) PackedT {
    -            return @bitCast(PackedT, addr.raw);
    -        }
    -
    -        pub inline fn write(addr: *volatile Self, val: PackedT) void {
    -            // This is a workaround for a compiler bug related to miscompilation
    -            // If the tmp var is not used, result location will fuck things up
    -            var tmp = @bitCast(IntT, val);
    -            addr.raw = tmp;
    -        }
    -
    -        pub inline fn modify(addr: *volatile Self, fields: anytype) void {
    -            var val = read(addr);
    -            inline for (@typeInfo(@TypeOf(fields)).Struct.fields) |field| {
    -                @field(val, field.name) = @field(fields, field.name);
    -            }
    -            write(addr, val);
    -        }
    -
    -        pub inline fn toggle(addr: *volatile Self, fields: anytype) void {
    -            var val = read(addr);
    -            inline for (@typeInfo(@TypeOf(fields)).Struct.fields) |field| {
    -                @field(val, @tagName(field.default_value.?)) = !@field(val, @tagName(field.default_value.?));
    -            }
    -            write(addr, val);
    -        }
    -    };
    -}
    -
    -pub fn MmioInt(comptime size: u8, comptime T: type) type {
    -    return extern struct {
    -        const Self = @This();
    -
    -        raw: std.meta.Int(.unsigned, size),
    -
    -        pub inline fn read(addr: *volatile Self) T {
    -            return @truncate(T, addr.raw);
    -        }
    -
    -        pub inline fn modify(addr: *volatile Self, val: T) void {
    -            const Int = std.meta.Int(.unsigned, size);
    -            const mask = ~@as(Int, (1 << @bitSizeOf(T)) - 1);
    -
    -            var tmp = addr.raw;
    -            addr.raw = (tmp & mask) | val;
    -        }
    -    };
    -}
    -
    -pub fn mmioInt(addr: usize, comptime size: usize, comptime T: type) *volatile MmioInt(size, T) {
    -    return @intToPtr(*volatile MmioInt(size, T), addr);
    -}
    -
    -pub const InterruptVector = extern union {
    -    C: fn () callconv(.C) void,
    -    Naked: fn () callconv(.Naked) void,
    -    // Interrupt is not supported on arm
    -};
    -
    -const unhandled = InterruptVector{
    -    .C = struct {
    -        fn tmp() callconv(.C) noreturn {
    -            @panic("unhandled interrupt");
    -        }
    -    }.tmp,
    -};
    
    From e92707cc11afea619a41a133515dacaac3d98230 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sun, 19 Mar 2023 16:31:11 -0700
    Subject: [PATCH 076/286] update microzig (#7)
    
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 08e7d5b01..6f5b7268f 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 08e7d5b01a8ca6a53e3892f763507f1ff3b07725
    +Subproject commit 6f5b7268f68f001144bd5ebacc0c0203a7a50fde
    
    From 78722261cdee6fe5ae1061f2f19e9c4989cf2f89 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sun, 19 Mar 2023 16:31:32 -0700
    Subject: [PATCH 077/286] update microzig (#7)
    
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 08e7d5b01..6f5b7268f 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 08e7d5b01a8ca6a53e3892f763507f1ff3b07725
    +Subproject commit 6f5b7268f68f001144bd5ebacc0c0203a7a50fde
    
    From 63ea5efd3719edbf92dae57e7ab9896c115de7a0 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sun, 19 Mar 2023 16:31:43 -0700
    Subject: [PATCH 078/286] update microzig (#7)
    
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 08e7d5b01..6f5b7268f 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 08e7d5b01a8ca6a53e3892f763507f1ff3b07725
    +Subproject commit 6f5b7268f68f001144bd5ebacc0c0203a7a50fde
    
    From 0856b148a32dbb946e977e2d9faf48575beb8cf3 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sun, 19 Mar 2023 16:32:02 -0700
    Subject: [PATCH 079/286] update microzig (#7)
    
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 08e7d5b01..6f5b7268f 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 08e7d5b01a8ca6a53e3892f763507f1ff3b07725
    +Subproject commit 6f5b7268f68f001144bd5ebacc0c0203a7a50fde
    
    From 0676e6baf31d40b91015d46f7721b5d27fb0e6a6 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sun, 19 Mar 2023 16:32:20 -0700
    Subject: [PATCH 080/286] update microzig (#7)
    
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 08e7d5b01..6f5b7268f 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 08e7d5b01a8ca6a53e3892f763507f1ff3b07725
    +Subproject commit 6f5b7268f68f001144bd5ebacc0c0203a7a50fde
    
    From bdc5606a387df2c7ee694b1adba3ef6a58df1355 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sun, 19 Mar 2023 16:32:29 -0700
    Subject: [PATCH 081/286] update microzig (#7)
    
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 08e7d5b01..6f5b7268f 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 08e7d5b01a8ca6a53e3892f763507f1ff3b07725
    +Subproject commit 6f5b7268f68f001144bd5ebacc0c0203a7a50fde
    
    From 3cef64600605de66e36a37ec58cb2053c7314243 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sun, 19 Mar 2023 16:32:34 -0700
    Subject: [PATCH 082/286] update microzig (#29)
    
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 08e7d5b01..6f5b7268f 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 08e7d5b01a8ca6a53e3892f763507f1ff3b07725
    +Subproject commit 6f5b7268f68f001144bd5ebacc0c0203a7a50fde
    
    From 3ffa60b2dc5304223f32ac68c5d6ac8059789081 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 22 Mar 2023 00:54:36 -0700
    Subject: [PATCH 083/286] update microzig (#8)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 6f5b7268f..dabc9325c 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 6f5b7268f68f001144bd5ebacc0c0203a7a50fde
    +Subproject commit dabc9325cdee394ff66e28c91803cb814954b157
    
    From 8031b4cf20fcee88104f45592f4cca5698141fe0 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 22 Mar 2023 00:54:47 -0700
    Subject: [PATCH 084/286] update microzig (#8)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 6f5b7268f..dabc9325c 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 6f5b7268f68f001144bd5ebacc0c0203a7a50fde
    +Subproject commit dabc9325cdee394ff66e28c91803cb814954b157
    
    From 04fad531d9b8d45ca73c835fbbd322fc07028617 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 22 Mar 2023 00:54:56 -0700
    Subject: [PATCH 085/286] update microzig (#8)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 6f5b7268f..dabc9325c 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 6f5b7268f68f001144bd5ebacc0c0203a7a50fde
    +Subproject commit dabc9325cdee394ff66e28c91803cb814954b157
    
    From 0524d7e82a4a020a7a0e340a1cea8edf3d1e236e Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 22 Mar 2023 00:55:07 -0700
    Subject: [PATCH 086/286] update microzig (#8)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 6f5b7268f..dabc9325c 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 6f5b7268f68f001144bd5ebacc0c0203a7a50fde
    +Subproject commit dabc9325cdee394ff66e28c91803cb814954b157
    
    From 6b7b7a6ec47d064bbd5ed35269c854c3ca4f9c0f Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 22 Mar 2023 00:55:14 -0700
    Subject: [PATCH 087/286] update microzig (#8)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 6f5b7268f..dabc9325c 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 6f5b7268f68f001144bd5ebacc0c0203a7a50fde
    +Subproject commit dabc9325cdee394ff66e28c91803cb814954b157
    
    From 9b577faacf1e8de67943b6c82d4d1fb8ac0efeed Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 22 Mar 2023 00:56:23 -0700
    Subject: [PATCH 088/286] update microzig (#8)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 6f5b7268f..dabc9325c 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 6f5b7268f68f001144bd5ebacc0c0203a7a50fde
    +Subproject commit dabc9325cdee394ff66e28c91803cb814954b157
    
    From 160bee73e0774ecf44e2d6a0f8494f48b0c8d0f2 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 22 Mar 2023 00:56:30 -0700
    Subject: [PATCH 089/286] update microzig (#30)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 6f5b7268f..dabc9325c 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 6f5b7268f68f001144bd5ebacc0c0203a7a50fde
    +Subproject commit dabc9325cdee394ff66e28c91803cb814954b157
    
    From 808209091c4c654ac7787ac05dad85371d7ed3a9 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Thu, 23 Mar 2023 08:27:18 -0700
    Subject: [PATCH 090/286] Update microzig (#9)
    
    * update microzig
    
    * add zig version
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     README.adoc   | 4 ++++
     deps/microzig | 2 +-
     2 files changed, 5 insertions(+), 1 deletion(-)
    
    diff --git a/README.adoc b/README.adoc
    index fdee92cc1..ae26554f0 100644
    --- a/README.adoc
    +++ b/README.adoc
    @@ -2,6 +2,10 @@
     
     HALs and register definitions for stm32 (STMicro) devices
     
    +== What version of Zig to use
    +
    +Right now we are following [master](https://ziglang.org/download/), but once 0.11.0 is released, we will be switching to the latest stable version of Zig.
    +
     == stm32 boards that renode supports:
     
     - blue pill (stm32f103)
    diff --git a/deps/microzig b/deps/microzig
    index dabc9325c..5b0176e97 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit dabc9325cdee394ff66e28c91803cb814954b157
    +Subproject commit 5b0176e97781a77420be309b6505dc582713a2a5
    
    From 6850cf21de558cdb167c2b2461b495f40c5b2a44 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Thu, 23 Mar 2023 08:27:31 -0700
    Subject: [PATCH 091/286] Update microzig (#9)
    
    * update microzig
    
    * add zig version
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     README.adoc   | 4 ++++
     deps/microzig | 2 +-
     2 files changed, 5 insertions(+), 1 deletion(-)
    
    diff --git a/README.adoc b/README.adoc
    index 6e0fc7d9c..394015ff4 100644
    --- a/README.adoc
    +++ b/README.adoc
    @@ -1,3 +1,7 @@
     = NXP LPC Hardware Support Package
     
     Please see https://github.com/ZigEmbeddedGroup/lpcboot[lpcboot] as well
    +
    +== What version of Zig to use
    +
    +Right now we are following [master](https://ziglang.org/download/), but once 0.11.0 is released, we will be switching to the latest stable version of Zig.
    diff --git a/deps/microzig b/deps/microzig
    index dabc9325c..5b0176e97 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit dabc9325cdee394ff66e28c91803cb814954b157
    +Subproject commit 5b0176e97781a77420be309b6505dc582713a2a5
    
    From 66fd9718330b4075d94d83ade1ffa774ada568c1 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Thu, 23 Mar 2023 08:27:44 -0700
    Subject: [PATCH 092/286] Update microzig (#9)
    
    * update microzig
    
    * add zig version
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     README.adoc   | 4 ++++
     deps/microzig | 2 +-
     2 files changed, 5 insertions(+), 1 deletion(-)
    
    diff --git a/README.adoc b/README.adoc
    index 65801a9ae..9bf6631a3 100644
    --- a/README.adoc
    +++ b/README.adoc
    @@ -3,3 +3,7 @@
     [WIP]
     
     SVD is copied from https://github.com/esp-rs/esp-pacs
    +
    +== What version of Zig to use
    +
    +Right now we are following [master](https://ziglang.org/download/), but once 0.11.0 is released, we will be switching to the latest stable version of Zig.
    diff --git a/deps/microzig b/deps/microzig
    index dabc9325c..5b0176e97 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit dabc9325cdee394ff66e28c91803cb814954b157
    +Subproject commit 5b0176e97781a77420be309b6505dc582713a2a5
    
    From 7c781dc37730b448d78f5621b965b74bc3112680 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Thu, 23 Mar 2023 08:28:01 -0700
    Subject: [PATCH 093/286] Update microzig (#31)
    
    * update microzig
    
    * add zig version
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     README.adoc   | 7 +++++++
     deps/microzig | 2 +-
     2 files changed, 8 insertions(+), 1 deletion(-)
     create mode 100644 README.adoc
    
    diff --git a/README.adoc b/README.adoc
    new file mode 100644
    index 000000000..171c62d0a
    --- /dev/null
    +++ b/README.adoc
    @@ -0,0 +1,7 @@
    += raspberrypi-rp2040
    +
    +HAL and register definitions for the RP2040.
    +
    +== What version of Zig to use
    +
    +Right now we are following [master](https://ziglang.org/download/), but once 0.11.0 is released, we will be switching to the latest stable version of Zig.
    diff --git a/deps/microzig b/deps/microzig
    index dabc9325c..5b0176e97 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit dabc9325cdee394ff66e28c91803cb814954b157
    +Subproject commit 5b0176e97781a77420be309b6505dc582713a2a5
    
    From 14239a66fa3eda789eadb24e8ea7390fe07bd383 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Thu, 23 Mar 2023 08:28:11 -0700
    Subject: [PATCH 094/286] Update microzig (#9)
    
    * update microzig
    
    * add zig version
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     README.adoc   | 4 ++++
     deps/microzig | 2 +-
     2 files changed, 5 insertions(+), 1 deletion(-)
    
    diff --git a/README.adoc b/README.adoc
    index 0a66afd4e..9bef0932f 100644
    --- a/README.adoc
    +++ b/README.adoc
    @@ -2,6 +2,10 @@
     
     HALs and register definitions for nrf5x devices
     
    +== What version of Zig to use
    +
    +Right now we are following [master](https://ziglang.org/download/), but once 0.11.0 is released, we will be switching to the latest stable version of Zig.
    +
     == Renode supports:
     
     - nrf52840 development kit
    diff --git a/deps/microzig b/deps/microzig
    index dabc9325c..5b0176e97 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit dabc9325cdee394ff66e28c91803cb814954b157
    +Subproject commit 5b0176e97781a77420be309b6505dc582713a2a5
    
    From 215711d807f5a983a660ff3adefbe49e38ae9acd Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Thu, 23 Mar 2023 08:28:29 -0700
    Subject: [PATCH 095/286] Update microzig (#9)
    
    * update microzig
    
    * add zig version
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     README.adoc   | 5 +++++
     deps/microzig | 2 +-
     2 files changed, 6 insertions(+), 1 deletion(-)
    
    diff --git a/README.adoc b/README.adoc
    index f23b1bfb8..daa2bccc5 100644
    --- a/README.adoc
    +++ b/README.adoc
    @@ -1 +1,6 @@
     = GigaDevice GD32 Hardware Support Package
    +
    +== What version of Zig to use
    +
    +Right now we are following [master](https://ziglang.org/download/), but once 0.11.0 is released, we will be switching to the latest stable version of Zig.
    +
    diff --git a/deps/microzig b/deps/microzig
    index dabc9325c..5b0176e97 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit dabc9325cdee394ff66e28c91803cb814954b157
    +Subproject commit 5b0176e97781a77420be309b6505dc582713a2a5
    
    From c0c93c89462565db9ab33f08918253a613759f4a Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Thu, 23 Mar 2023 08:28:49 -0700
    Subject: [PATCH 096/286] Update microzig (#9)
    
    * update microzig
    
    * add zig version
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     README.adoc   | 6 ++++++
     deps/microzig | 2 +-
     2 files changed, 7 insertions(+), 1 deletion(-)
    
    diff --git a/README.adoc b/README.adoc
    index f4214f4b0..71e604c1f 100644
    --- a/README.adoc
    +++ b/README.adoc
    @@ -2,6 +2,12 @@
     
     Note: for testing, renode supports arduino nano 33 BLE
     
    +== What version of Zig to use
    +
    +Right now we are following [master](https://ziglang.org/download/), but once 0.11.0 is released, we will be switching to the latest stable version of Zig.
    +
    +== FYI: LLVM issues
    +
     Currently LLVM is having trouble lowering AVR when this is built in debug mode:
     
     [source]
    diff --git a/deps/microzig b/deps/microzig
    index dabc9325c..5b0176e97 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit dabc9325cdee394ff66e28c91803cb814954b157
    +Subproject commit 5b0176e97781a77420be309b6505dc582713a2a5
    
    From fca3d574a6d1ffce1f455249fc49b0eb490b793b Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Thu, 23 Mar 2023 08:39:15 -0700
    Subject: [PATCH 097/286] Update microzig (#10)
    
    * update microzig
    
    * fix link
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     README.adoc   | 2 +-
     deps/microzig | 2 +-
     2 files changed, 2 insertions(+), 2 deletions(-)
    
    diff --git a/README.adoc b/README.adoc
    index 71e604c1f..3ff88eb09 100644
    --- a/README.adoc
    +++ b/README.adoc
    @@ -4,7 +4,7 @@ Note: for testing, renode supports arduino nano 33 BLE
     
     == What version of Zig to use
     
    -Right now we are following [master](https://ziglang.org/download/), but once 0.11.0 is released, we will be switching to the latest stable version of Zig.
    +Right now we are following https://ziglang.org/download/[master], but once 0.11.0 is released, we will be switching to the latest stable version of Zig.
     
     == FYI: LLVM issues
     
    diff --git a/deps/microzig b/deps/microzig
    index 5b0176e97..ceaa9ddcb 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 5b0176e97781a77420be309b6505dc582713a2a5
    +Subproject commit ceaa9ddcb080d0687ce2109f23db7db376ac911e
    
    From 3f5786f9386ab97d837bbf4d5c60dcdb49f0f263 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Thu, 23 Mar 2023 08:42:17 -0700
    Subject: [PATCH 098/286] Update microzig (#10)
    
    * update microzig
    
    * fix link
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     README.adoc   | 2 +-
     deps/microzig | 2 +-
     2 files changed, 2 insertions(+), 2 deletions(-)
    
    diff --git a/README.adoc b/README.adoc
    index 9bf6631a3..4123f3c9a 100644
    --- a/README.adoc
    +++ b/README.adoc
    @@ -6,4 +6,4 @@ SVD is copied from https://github.com/esp-rs/esp-pacs
     
     == What version of Zig to use
     
    -Right now we are following [master](https://ziglang.org/download/), but once 0.11.0 is released, we will be switching to the latest stable version of Zig.
    +Right now we are following https://ziglang.org/download/[master], but once 0.11.0 is released, we will be switching to the latest stable version of Zig.
    diff --git a/deps/microzig b/deps/microzig
    index 5b0176e97..ceaa9ddcb 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 5b0176e97781a77420be309b6505dc582713a2a5
    +Subproject commit ceaa9ddcb080d0687ce2109f23db7db376ac911e
    
    From 422aa77f2ef5ee139d55fb730cf868ad10857fac Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Thu, 23 Mar 2023 08:42:28 -0700
    Subject: [PATCH 099/286] Update microzig (#10)
    
    * update microzig
    
    * fix link
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     README.adoc   | 2 +-
     deps/microzig | 2 +-
     2 files changed, 2 insertions(+), 2 deletions(-)
    
    diff --git a/README.adoc b/README.adoc
    index ae26554f0..163532031 100644
    --- a/README.adoc
    +++ b/README.adoc
    @@ -4,7 +4,7 @@ HALs and register definitions for stm32 (STMicro) devices
     
     == What version of Zig to use
     
    -Right now we are following [master](https://ziglang.org/download/), but once 0.11.0 is released, we will be switching to the latest stable version of Zig.
    +Right now we are following https://ziglang.org/download/[master], but once 0.11.0 is released, we will be switching to the latest stable version of Zig.
     
     == stm32 boards that renode supports:
     
    diff --git a/deps/microzig b/deps/microzig
    index 5b0176e97..ceaa9ddcb 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 5b0176e97781a77420be309b6505dc582713a2a5
    +Subproject commit ceaa9ddcb080d0687ce2109f23db7db376ac911e
    
    From 623a7f24eecad9e5ef0bf3aab50d9671233380eb Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Thu, 23 Mar 2023 08:42:36 -0700
    Subject: [PATCH 100/286] update microzig (#32)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 5b0176e97..ceaa9ddcb 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 5b0176e97781a77420be309b6505dc582713a2a5
    +Subproject commit ceaa9ddcb080d0687ce2109f23db7db376ac911e
    
    From bdba656f9baa0bbfafe456a1d150bc35dfad4f05 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Thu, 23 Mar 2023 08:42:47 -0700
    Subject: [PATCH 101/286] Update microzig (#10)
    
    * update microzig
    
    * fix link
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     README.adoc   | 2 +-
     deps/microzig | 2 +-
     2 files changed, 2 insertions(+), 2 deletions(-)
    
    diff --git a/README.adoc b/README.adoc
    index daa2bccc5..9985edf67 100644
    --- a/README.adoc
    +++ b/README.adoc
    @@ -2,5 +2,5 @@
     
     == What version of Zig to use
     
    -Right now we are following [master](https://ziglang.org/download/), but once 0.11.0 is released, we will be switching to the latest stable version of Zig.
    +Right now we are following https://ziglang.org/download/[master], but once 0.11.0 is released, we will be switching to the latest stable version of Zig.
     
    diff --git a/deps/microzig b/deps/microzig
    index 5b0176e97..ceaa9ddcb 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 5b0176e97781a77420be309b6505dc582713a2a5
    +Subproject commit ceaa9ddcb080d0687ce2109f23db7db376ac911e
    
    From 37031c26cb409aa7157aa5a9e43b434b3402f679 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Thu, 23 Mar 2023 08:42:55 -0700
    Subject: [PATCH 102/286] Update microzig (#10)
    
    * update microzig
    
    * fix link
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     README.adoc   | 2 +-
     deps/microzig | 2 +-
     2 files changed, 2 insertions(+), 2 deletions(-)
    
    diff --git a/README.adoc b/README.adoc
    index 394015ff4..f32fd9780 100644
    --- a/README.adoc
    +++ b/README.adoc
    @@ -4,4 +4,4 @@ Please see https://github.com/ZigEmbeddedGroup/lpcboot[lpcboot] as well
     
     == What version of Zig to use
     
    -Right now we are following [master](https://ziglang.org/download/), but once 0.11.0 is released, we will be switching to the latest stable version of Zig.
    +Right now we are following https://ziglang.org/download/[master], but once 0.11.0 is released, we will be switching to the latest stable version of Zig.
    diff --git a/deps/microzig b/deps/microzig
    index 5b0176e97..ceaa9ddcb 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 5b0176e97781a77420be309b6505dc582713a2a5
    +Subproject commit ceaa9ddcb080d0687ce2109f23db7db376ac911e
    
    From ea7bdcb3fbf64b44e3a7bc7dfb7ca0985f43634a Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Thu, 23 Mar 2023 08:43:04 -0700
    Subject: [PATCH 103/286] Update microzig (#10)
    
    * update microzig
    
    * fix link
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     README.adoc   | 2 +-
     deps/microzig | 2 +-
     2 files changed, 2 insertions(+), 2 deletions(-)
    
    diff --git a/README.adoc b/README.adoc
    index 9bef0932f..7c2fa2fb5 100644
    --- a/README.adoc
    +++ b/README.adoc
    @@ -4,7 +4,7 @@ HALs and register definitions for nrf5x devices
     
     == What version of Zig to use
     
    -Right now we are following [master](https://ziglang.org/download/), but once 0.11.0 is released, we will be switching to the latest stable version of Zig.
    +Right now we are following https://ziglang.org/download/[master], but once 0.11.0 is released, we will be switching to the latest stable version of Zig.
     
     == Renode supports:
     
    diff --git a/deps/microzig b/deps/microzig
    index 5b0176e97..ceaa9ddcb 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 5b0176e97781a77420be309b6505dc582713a2a5
    +Subproject commit ceaa9ddcb080d0687ce2109f23db7db376ac911e
    
    From a4de9d2f3e332d6f49c192b8cbdf96cfb383cd8c Mon Sep 17 00:00:00 2001
    From: Vlad Panazan 
    Date: Thu, 23 Mar 2023 20:37:48 +0200
    Subject: [PATCH 104/286] add SPI hal (#33)
    
    ---
     build.zig               |   1 +
     examples/spi_master.zig |  25 +++++++
     src/hal.zig             |   1 +
     src/hal/spi.zig         | 159 ++++++++++++++++++++++++++++++++++++++++
     4 files changed, 186 insertions(+)
     create mode 100644 examples/spi_master.zig
     create mode 100644 src/hal/spi.zig
    
    diff --git a/build.zig b/build.zig
    index 5da87f7b7..b1225d22a 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -53,6 +53,7 @@ pub const Examples = struct {
         blinky_core1: *microzig.EmbeddedExecutable,
         gpio_clk: *microzig.EmbeddedExecutable,
         pwm: *microzig.EmbeddedExecutable,
    +    spi_master: *microzig.EmbeddedExecutable,
         uart: *microzig.EmbeddedExecutable,
         //uart_pins: microzig.EmbeddedExecutable,
     
    diff --git a/examples/spi_master.zig b/examples/spi_master.zig
    new file mode 100644
    index 000000000..ba1c0c2db
    --- /dev/null
    +++ b/examples/spi_master.zig
    @@ -0,0 +1,25 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +
    +const rp2040 = microzig.hal;
    +const time = rp2040.time;
    +const gpio = rp2040.gpio;
    +const clocks = rp2040.clocks;
    +const peripherals = microzig.chip.peripherals;
    +
    +const BUF_LEN = 0x100;
    +
    +// Communicate with another RP2040 over spi
    +// Slave implementation: https://github.com/raspberrypi/pico-examples/blob/master/spi/spi_master_slave/spi_slave/spi_slave.c
    +pub fn main() !void {
    +    const spi = rp2040.spi.SPI.init(0, .{
    +        .clock_config = rp2040.clock_config,
    +    });
    +    var out_buf: [BUF_LEN]u8 = .{ 0xAA, 0xBB, 0xCC, 0xDD } ** (BUF_LEN / 4);
    +    var in_buf: [BUF_LEN]u8 = undefined;
    +
    +    while (true) {
    +        _ = spi.transceive(&out_buf, &in_buf);
    +        time.sleep_ms(1 * 1000);
    +    }
    +}
    diff --git a/src/hal.zig b/src/hal.zig
    index 21323dedd..568c691e4 100644
    --- a/src/hal.zig
    +++ b/src/hal.zig
    @@ -9,6 +9,7 @@ pub const multicore = @import("hal/multicore.zig");
     pub const time = @import("hal/time.zig");
     pub const uart = @import("hal/uart.zig");
     pub const pwm = @import("hal/pwm.zig");
    +pub const spi = @import("hal/spi.zig");
     pub const resets = @import("hal/resets.zig");
     pub const irq = @import("hal/irq.zig");
     
    diff --git a/src/hal/spi.zig b/src/hal/spi.zig
    new file mode 100644
    index 000000000..ea96f4099
    --- /dev/null
    +++ b/src/hal/spi.zig
    @@ -0,0 +1,159 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +const peripherals = microzig.chip.peripherals;
    +const SPI0 = peripherals.SPI0;
    +const SPI1 = peripherals.SPI1;
    +
    +const gpio = @import("gpio.zig");
    +const clocks = @import("clocks.zig");
    +const resets = @import("resets.zig");
    +const time = @import("time.zig");
    +
    +const SpiRegs = microzig.chip.types.peripherals.SPI0;
    +
    +pub const Config = struct {
    +    clock_config: clocks.GlobalConfiguration,
    +    tx_pin: ?u32 = 19,
    +    rx_pin: ?u32 = 16,
    +    sck_pin: ?u32 = 18,
    +    csn_pin: ?u32 = 17,
    +    baud_rate: u32 = 1000 * 1000,
    +};
    +
    +pub const SPI = enum {
    +    spi0,
    +    spi1,
    +
    +    fn get_regs(spi: SPI) *volatile SpiRegs {
    +        return switch (spi) {
    +            .spi0 => SPI0,
    +            .spi1 => SPI1,
    +        };
    +    }
    +
    +    pub fn reset(spi: SPI) void {
    +        switch (spi) {
    +            .spi0 => resets.reset(&.{.spi0}),
    +            .spi1 => resets.reset(&.{.spi1}),
    +        }
    +    }
    +
    +    pub fn init(comptime id: u32, comptime config: Config) SPI {
    +        const spi: SPI = switch (id) {
    +            0 => .spi0,
    +            1 => .spi1,
    +            else => @compileError("there is only spi0 and spi1"),
    +        };
    +
    +        spi.reset();
    +
    +        const peri_freq = config.clock_config.peri.?.output_freq;
    +        _ = spi.set_baudrate(config.baud_rate, peri_freq);
    +
    +        const spi_regs = spi.get_regs();
    +
    +        // set fromat
    +        spi_regs.SSPCR0.modify(.{
    +            .DSS = 0b0111, // 8 bits
    +            .SPO = 0,
    +            .SPH = 0,
    +        });
    +
    +        // Always enable DREQ signals -- harmless if DMA is not listening
    +        spi_regs.SSPDMACR.modify(.{
    +            .TXDMAE = 1,
    +            .RXDMAE = 1,
    +        });
    +
    +        // Finally enable the SPI
    +        spi_regs.SSPCR1.modify(.{
    +            .SSE = 1,
    +        });
    +
    +        if (config.tx_pin) |pin| gpio.set_function(pin, .spi);
    +        if (config.rx_pin) |pin| gpio.set_function(pin, .spi);
    +        if (config.sck_pin) |pin| gpio.set_function(pin, .spi);
    +        if (config.csn_pin) |pin| gpio.set_function(pin, .spi);
    +
    +        return spi;
    +    }
    +
    +    pub fn is_writable(spi: SPI) bool {
    +        return spi.get_regs().SSPSR.read().TNF == 1;
    +    }
    +
    +    pub fn is_readable(spi: SPI) bool {
    +        return spi.get_regs().SSPSR.read().RNE == 1;
    +    }
    +    pub fn transceive(spi: SPI, src: []const u8, dst: []u8) usize {
    +        const spi_regs = spi.get_regs();
    +        std.debug.assert(src.len == dst.len);
    +        const fifo_depth = 8;
    +        var rx_remaining = dst.len;
    +        var tx_remaining = src.len;
    +
    +        while (rx_remaining > 0 or tx_remaining > 0) {
    +            if (tx_remaining > 0 and spi.is_writable() and rx_remaining < tx_remaining + fifo_depth) {
    +                spi_regs.SSPDR.write_raw(src[src.len - tx_remaining]);
    +                tx_remaining -= 1;
    +            }
    +            if (rx_remaining > 0 and spi.is_readable()) {
    +                const bytes = std.mem.asBytes(&spi_regs.SSPDR.read().DATA);
    +                dst[dst.len - rx_remaining] = bytes[0];
    +                rx_remaining -= 1;
    +            }
    +        }
    +
    +        return src.len;
    +    }
    +    // Write len bytes directly from src to the SPI, and discard any data received back
    +    pub fn write(spi: SPI, src: []const u8) usize {
    +        const spi_regs = spi.get_regs();
    +        // Write to TX FIFO whilst ignoring RX, then clean up afterward. When RX
    +        // is full, PL022 inhibits RX pushes, and sets a sticky flag on
    +        // push-on-full, but continues shifting. Safe if SSPIMSC_RORIM is not set.
    +        for (src) |s| {
    +            while (!spi.is_writable()) {
    +                std.log.debug("SPI not writable!", .{});
    +            }
    +            spi_regs.SSPDR.write_raw(s);
    +        }
    +        // Drain RX FIFO, then wait for shifting to finish (which may be *after*
    +        // TX FIFO drains), then drain RX FIFO again
    +        while (spi.is_readable()) {
    +            _ = spi_regs.SSPDR.raw;
    +        }
    +        while (spi.get_regs().SSPSR.read().BSY == 1) {
    +            std.log.debug("SPI busy!", .{});
    +        }
    +        while (spi.is_readable()) {
    +            _ = spi_regs.SSPDR.raw;
    +        }
    +        // Don't leave overrun flag set
    +        peripherals.SPI0.SSPICR.modify(.{ .RORIC = 1 });
    +        return src.len;
    +    }
    +
    +    fn set_baudrate(spi: SPI, baudrate: u32, freq_in: u32) u64 {
    +        const spi_regs = spi.get_regs();
    +        // Find smallest prescale value which puts output frequency in range of
    +        // post-divide. Prescale is an even number from 2 to 254 inclusive.
    +        var prescale: u64 = 2;
    +        while (prescale <= 254) : (prescale += 2) {
    +            if (freq_in < (prescale + 2) * 256 * baudrate) break;
    +        }
    +        std.debug.assert(prescale <= 254); //Freq too low
    +        // Find largest post-divide which makes output <= baudrate. Post-divide is
    +        // an integer in the range 1 to 256 inclusive.
    +
    +        var postdiv: u64 = 256;
    +        while (postdiv > 1) : (postdiv -= 1) {
    +            if (freq_in / (prescale * (postdiv - 1)) > baudrate) break;
    +        }
    +        spi_regs.SSPCPSR.modify(.{ .CPSDVSR = @intCast(u8, prescale) });
    +        spi_regs.SSPCR0.modify(.{ .SCR = @intCast(u8, postdiv - 1) });
    +
    +        // Return the frequency we were able to achieve
    +        return freq_in / (prescale * postdiv);
    +    }
    +};
    
    From 7f8246ea4ccdf91f54922520d9373d59f05e1502 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 5 Apr 2023 17:18:57 -0700
    Subject: [PATCH 105/286] update microzig (#11)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index ceaa9ddcb..23482a698 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit ceaa9ddcb080d0687ce2109f23db7db376ac911e
    +Subproject commit 23482a6986252e0eeff54a04abc0aac8a08d25d7
    
    From 68ebc9a0adb0ab584a9852d93bb7d4cd45bae1c7 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 5 Apr 2023 17:19:06 -0700
    Subject: [PATCH 106/286] update microzig (#11)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index ceaa9ddcb..23482a698 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit ceaa9ddcb080d0687ce2109f23db7db376ac911e
    +Subproject commit 23482a6986252e0eeff54a04abc0aac8a08d25d7
    
    From a548d0ef1391f154f8907e6be3ed64c0939bcd6c Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 5 Apr 2023 17:19:15 -0700
    Subject: [PATCH 107/286] update microzig (#11)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index ceaa9ddcb..23482a698 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit ceaa9ddcb080d0687ce2109f23db7db376ac911e
    +Subproject commit 23482a6986252e0eeff54a04abc0aac8a08d25d7
    
    From 10e700b6e799589ff4a38866fb4c76fb9ca248d3 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 5 Apr 2023 17:19:22 -0700
    Subject: [PATCH 108/286] update microzig (#11)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index ceaa9ddcb..23482a698 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit ceaa9ddcb080d0687ce2109f23db7db376ac911e
    +Subproject commit 23482a6986252e0eeff54a04abc0aac8a08d25d7
    
    From 7df8396558ade478266f3182e7be6f9a3bd466c4 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 5 Apr 2023 17:19:42 -0700
    Subject: [PATCH 109/286] update microzig (#11)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index ceaa9ddcb..23482a698 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit ceaa9ddcb080d0687ce2109f23db7db376ac911e
    +Subproject commit 23482a6986252e0eeff54a04abc0aac8a08d25d7
    
    From 433572081e13b8242f4980c7e1ddd21f4e61431c Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 5 Apr 2023 17:19:49 -0700
    Subject: [PATCH 110/286] update microzig (#11)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index ceaa9ddcb..23482a698 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit ceaa9ddcb080d0687ce2109f23db7db376ac911e
    +Subproject commit 23482a6986252e0eeff54a04abc0aac8a08d25d7
    
    From f250134e2f0a142c26a0e34a95ed4a5140790312 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 5 Apr 2023 17:20:16 -0700
    Subject: [PATCH 111/286] update microzig (#34)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index ceaa9ddcb..23482a698 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit ceaa9ddcb080d0687ce2109f23db7db376ac911e
    +Subproject commit 23482a6986252e0eeff54a04abc0aac8a08d25d7
    
    From 20e4c9f8f631d6525d40644142abd0ea773a8a0f Mon Sep 17 00:00:00 2001
    From: David Sugar 
    Date: Thu, 6 Apr 2023 02:29:08 +0200
    Subject: [PATCH 112/286] Flash from user code (#35)
    
    * support for a subset of the bootrom functions added: fast bit count/ manipulation functions (tested), fast bulk memory fill/ copy functions (tested), flash access functions (NOT tested), debugging support functions (not implemented), miscellaneous functions (not implemented).
    
    * added support for erasing and programming flash from user code. between the first and last call in a programming sequence, the SSI is not in a state where it can handle XIP accesses, so the code that calls the intervening functions must be located in SRAM. this is why I added the time_critical section to rp2040.ld (maybe one should create a dedicated section in ram that is rwx and keep data rwNx).
    
    * flash_program.zig example added
    ---
     build.zig                  |   1 +
     examples/flash_program.zig |  82 +++++++++++
     rp2040.ld                  |   3 +-
     src/hal.zig                |   2 +
     src/hal/flash.zig          |  81 +++++++++++
     src/hal/rom.zig            | 269 +++++++++++++++++++++++++++++++++++++
     6 files changed, 437 insertions(+), 1 deletion(-)
     create mode 100644 examples/flash_program.zig
     create mode 100644 src/hal/flash.zig
     create mode 100644 src/hal/rom.zig
    
    diff --git a/build.zig b/build.zig
    index b1225d22a..5144b3642 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -56,6 +56,7 @@ pub const Examples = struct {
         spi_master: *microzig.EmbeddedExecutable,
         uart: *microzig.EmbeddedExecutable,
         //uart_pins: microzig.EmbeddedExecutable,
    +    flash_program: *microzig.EmbeddedExecutable,
     
         pub fn init(b: *Builder, optimize: std.builtin.OptimizeMode) Examples {
             var ret: Examples = undefined;
    diff --git a/examples/flash_program.zig b/examples/flash_program.zig
    new file mode 100644
    index 000000000..2fc5cc097
    --- /dev/null
    +++ b/examples/flash_program.zig
    @@ -0,0 +1,82 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +
    +const rp2040 = microzig.hal;
    +const flash = rp2040.flash;
    +const time = rp2040.time;
    +const gpio = rp2040.gpio;
    +const clocks = rp2040.clocks;
    +
    +const led = 25;
    +const uart_id = 0;
    +const baud_rate = 115200;
    +const uart_tx_pin = 0;
    +const uart_rx_pin = 1;
    +
    +const flash_target_offset: u32 = 256 * 1024;
    +const flash_target_contents = @intToPtr([*]const u8, rp2040.flash.XIP_BASE + flash_target_offset);
    +
    +pub fn panic(message: []const u8, _: ?*std.builtin.StackTrace, _: ?usize) noreturn {
    +    std.log.err("panic: {s}", .{message});
    +    @breakpoint();
    +    while (true) {}
    +}
    +
    +pub const std_options = struct {
    +    pub const log_level = .debug;
    +    pub const logFn = rp2040.uart.log;
    +};
    +
    +pub fn main() !void {
    +    gpio.reset();
    +    gpio.init(led);
    +    gpio.set_direction(led, .out);
    +    gpio.put(led, 1);
    +
    +    const uart = rp2040.uart.UART.init(uart_id, .{
    +        .baud_rate = baud_rate,
    +        .tx_pin = uart_tx_pin,
    +        .rx_pin = uart_rx_pin,
    +        .clock_config = rp2040.clock_config,
    +    });
    +
    +    rp2040.uart.init_logger(uart);
    +
    +    var data: [flash.PAGE_SIZE]u8 = undefined;
    +    var i: usize = 0;
    +    var j: u8 = 0;
    +    while (i < flash.PAGE_SIZE) : (i += 1) {
    +        data[i] = j;
    +
    +        if (j == 255) j = 0;
    +        j += 1;
    +    }
    +
    +    std.log.info("Generate data", .{});
    +    std.log.info("data: {s}", .{&data});
    +
    +    // Note that a whole number of sectors (4096 bytes) must be erased at a time
    +    std.log.info("Erasing target region...", .{});
    +    flash.range_erase(flash_target_offset, flash.SECTOR_SIZE);
    +    std.log.info("Done. Read back target region:", .{});
    +    std.log.info("data: {s}", .{flash_target_contents[0..flash.PAGE_SIZE]});
    +
    +    // Note that a whole number of pages (256 bytes) must be written at a time
    +    std.log.info("Programming target region...", .{});
    +    flash.range_program(flash_target_offset, &data);
    +    std.log.info("Done. Read back target region:", .{});
    +    std.log.info("data: {s}", .{flash_target_contents[0..flash.PAGE_SIZE]});
    +
    +    var mismatch: bool = false;
    +    i = 0;
    +    while (i < flash.PAGE_SIZE) : (i += 1) {
    +        if (data[i] != flash_target_contents[i])
    +            mismatch = true;
    +    }
    +
    +    if (mismatch) {
    +        std.log.info("Programming failed!", .{});
    +    } else {
    +        std.log.info("Programming successful!", .{});
    +    }
    +}
    diff --git a/rp2040.ld b/rp2040.ld
    index f293543dc..cac0892e9 100644
    --- a/rp2040.ld
    +++ b/rp2040.ld
    @@ -10,7 +10,7 @@ ENTRY(microzig_main);
     MEMORY
     {
       flash0 (rx!w) : ORIGIN = 0x10000000, LENGTH = 0x00200000
    -  ram0   (rw!x) : ORIGIN = 0x20000000, LENGTH = 0x00040000
    +  ram0   (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000
     }
     
     SECTIONS
    @@ -43,6 +43,7 @@ SECTIONS
       .data :
       {
          microzig_data_start = .;
    +     *(.time_critical*)
          *(.data*)
          microzig_data_end = .;
       } > ram0 AT> flash0
    diff --git a/src/hal.zig b/src/hal.zig
    index 568c691e4..f8a74d2f8 100644
    --- a/src/hal.zig
    +++ b/src/hal.zig
    @@ -12,6 +12,8 @@ pub const pwm = @import("hal/pwm.zig");
     pub const spi = @import("hal/spi.zig");
     pub const resets = @import("hal/resets.zig");
     pub const irq = @import("hal/irq.zig");
    +pub const rom = @import("hal/rom.zig");
    +pub const flash = @import("hal/flash.zig");
     
     pub const clock_config = clocks.GlobalConfiguration.init(.{
         .ref = .{ .source = .src_xosc },
    diff --git a/src/hal/flash.zig b/src/hal/flash.zig
    new file mode 100644
    index 000000000..a7404b120
    --- /dev/null
    +++ b/src/hal/flash.zig
    @@ -0,0 +1,81 @@
    +const rom = @import("rom.zig");
    +
    +pub const Command = enum(u8) {
    +    block_erase = 0xd8,
    +    ruid_cmd = 0x4b,
    +};
    +
    +pub const PAGE_SIZE = 256;
    +pub const SECTOR_SIZE = 4096;
    +pub const BLOCK_SIZE = 65536;
    +
    +/// Bus reads to a 16MB memory window start at this address
    +pub const XIP_BASE = 0x10000000;
    +
    +pub const boot2 = struct {
    +    /// Size of the second stage bootloader in bytes
    +    const BOOT2_SIZE_BYTES = 64;
    +
    +    /// Buffer for the second stage bootloader
    +    var copyout: [BOOT2_SIZE_BYTES]u32 = undefined;
    +    var copyout_valid: bool = false;
    +
    +    /// Copy the 2nd stage bootloader into memory
    +    pub fn flash_init() linksection(".time_critical") void {
    +        if (copyout_valid) return;
    +        const bootloader = @intToPtr([*]u32, XIP_BASE);
    +        var i: usize = 0;
    +        while (i < BOOT2_SIZE_BYTES) : (i += 1) {
    +            copyout[i] = bootloader[i];
    +        }
    +        copyout_valid = true;
    +    }
    +
    +    pub fn flash_enable_xip() linksection(".time_critical") void {
    +        // TODO: use the second stage bootloader instead of cmd_xip
    +        //const bootloader: []u32 = copyout[1..];
    +
    +        //const f = @ptrCast(*fn () void, bootloader.ptr);
    +        //f();
    +
    +        rom.flash_enter_cmd_xip()();
    +    }
    +};
    +
    +/// Erase count bytes starting at offset (offset from start of flash)
    +///
    +/// The offset must be aligned to a 4096-byte sector, and count must
    +/// be a multiple of 4096 bytes!
    +pub fn range_erase(offset: u32, count: u32) linksection(".time_critical") void {
    +    // TODO: add sanity checks, e.g., offset + count < flash size
    +
    +    boot2.flash_init();
    +
    +    // TODO: __compiler_memory_barrier
    +
    +    rom.connect_internal_flash()();
    +    rom.flash_exit_xip()();
    +    rom.flash_range_erase()(offset, count, BLOCK_SIZE, @enumToInt(Command.block_erase));
    +    rom.flash_flush_cache()();
    +
    +    boot2.flash_enable_xip();
    +}
    +
    +/// Program data to flash starting at offset (offset from the start of flash)
    +///
    +/// The offset must be aligned to a 256-byte boundary, and the length of data
    +/// must be a multiple of 256!
    +pub fn range_program(offset: u32, data: []const u8) linksection(".time_critical") void {
    +    // TODO: add sanity checks, e.g., offset + count < flash size
    +
    +    boot2.flash_init();
    +
    +    // TODO: __compiler_memory_barrier
    +
    +    rom.connect_internal_flash()();
    +    rom.flash_exit_xip()();
    +    rom.flash_range_program()(offset, data.ptr, data.len);
    +    rom.flash_flush_cache()();
    +
    +    boot2.flash_enable_xip();
    +}
    diff --git a/src/hal/rom.zig b/src/hal/rom.zig
    new file mode 100644
    index 000000000..128c08549
    --- /dev/null
    +++ b/src/hal/rom.zig
    @@ -0,0 +1,269 @@
    +//! Access to functions and data in the RP2040 bootrom
    +//!
    +//! The Bootrom contains a number of public functions that provide useful RP2040 functionality that might be needed in
    +//! the absence of any other code on the device, as well as highly optimized versions of certain key functionality that would
    +//! otherwise have to take up space in most user binaries.
    +//!
    +//! The functions include:
    +//! 1. Fast Bit Counting / Manipulation Functions
    +//! 2. Fast Bulk Memory Fill / Copy Functions
    +//! 3. Flash Access Functions
    +//! 4. Debugging Support Functions (TODO)
    +//! 5. Miscellaneous Functions (TODO)
    +
    +/// Function codes to lookup public functions that provide useful RP2040 functionality
    +pub const Code = enum(u32) {
    +    popcount32 = rom_table_code('P', '3'),
    +    reverse32 = rom_table_code('R', '3'),
    +    clz32 = rom_table_code('L', '3'),
    +    ctz32 = rom_table_code('T', '3'),
    +    memset = rom_table_code('M', 'S'),
    +    memset4 = rom_table_code('S', '4'),
    +    memcpy = rom_table_code('M', 'C'),
    +    memcpy44 = rom_table_code('C', '4'),
    +    reset_usb_boot = rom_table_code('U', 'B'),
    +    connect_internal_flash = rom_table_code('I', 'F'),
    +    flash_exit_xip = rom_table_code('E', 'X'),
    +    flash_range_erase = rom_table_code('R', 'E'),
    +    flash_range_program = rom_table_code('R', 'P'),
    +    flash_flush_cache = rom_table_code('F', 'C'),
    +    flash_enter_cmd_xip = rom_table_code('C', 'X'),
    +};
    +
    +/// Signatures of all public bootrom functions
    +pub const signatures = struct {
    +    /// Returns the 32 bit pointer into the ROM if found or NULL otherwise
    +    const rom_table_lookup = fn (table: *u16, code: u32) *anyopaque;
    +    /// Signature for popcount32: Return a count of the number of 1 bits in value
    +    const popcount32 = fn (value: u32) u32;
    +    /// Signature for reverse32: Return the bits of value in the reverse order
    +    const reverse32 = fn (value: u32) u32;
    +    /// Signature for clz32: Return the number of consecutive high order 0 bits of value
    +    const clz32 = fn (value: u32) u32;
    +    /// Signature for ctz32: Return the number of consecutive low order 0 bits of value
    +    const ctz32 = fn (value: u32) u32;
    +    /// Signature of memset: Sets n bytes start at ptr to the value c and returns ptr
    +    const memset = fn (ptr: [*]u8, c: u8, n: u32) [*]u8;
    +    /// Signature of memset4: Sets n bytes start at ptr to the value c and returns ptr; must be word (32-bit) aligned!
    +    const memset4 = fn (ptr: [*]u32, c: u8, n: u32) [*]u32;
    +    /// Signature of memcpy: Copies n bytes starting at src to dest and returns dest. The results are undefined if the regions overlap.
    +    const memcpy = fn (dest: [*]u8, src: [*]u8, n: u32) [*]u8;
    +    /// Signature of memcpy44: Copies n bytes starting at src to dest and returns dest; must be word (32-bit) aligned!
    +    const memcpy44 = fn (dest: [*]u32, src: [*]u32, n: u32) [*]u8;
    +    /// Signature of connect_internal_flash: Restore all QSPI pad controls to their default state, and connect the SSI to the QSPI pads
    +    const connect_internal_flash = fn () void;
    +    /// Signature of flash_exit_xip: First set up the SSI for serial-mode operations, then issue the fixed XIP exit sequence described in
    +    /// Section 2.8.1.2. Note that the bootrom code uses the IO forcing logic to drive the CS pin, which must be
    +    /// cleared before returning the SSI to XIP mode (e.g. by a call to _flash_flush_cache). This function
    +    /// configures the SSI with a fixed SCK clock divisor of /6.
    +    const flash_exit_xip = fn () void;
    +    /// Signature of flash_range_erase: Erase a count bytes, starting at addr (offset from start of flash). Optionally, pass a block erase command
    +    /// e.g. D8h block erase, and the size of the block erased by this command — this function will use the larger
    +    /// block erase where possible, for much higher erase speed. addr must be aligned to a 4096-byte sector, and
    +    /// count must be a multiple of 4096 bytes.
    +    const flash_range_erase = fn (addr: u32, count: usize, block_size: u32, block_cmd: u8) void;
    +    /// Signature of flash_range_program: Program data to a range of flash addresses starting at addr (offset from the start of flash) and count bytes
    +    /// in size. addr must be aligned to a 256-byte boundary, and count must be a multiple of 256.
    +    const flash_range_program = fn (addr: u32, data: [*]const u8, count: usize) void;
    +    /// Signature of flash_flush_cache: Flush and enable the XIP cache. Also clears the IO forcing on QSPI CSn, so that the SSI can drive the
    +    /// flash chip select as normal.
    +    const flash_flush_cache = fn () void;
    +    /// Signature of flash_enter_cmd_xip: Configure the SSI to generate a standard 03h serial read command, with 24 address bits, upon each XIP
    +    /// access. This is a very slow XIP configuration, but is very widely supported. The debugger calls this
    +    /// function after performing a flash erase/programming operation, so that the freshly-programmed code
    +    /// and data is visible to the debug host, without having to know exactly what kind of flash device is
    +    /// connected.
    +    const flash_enter_cmd_xip = fn () void;
    +};
    +
    +/// Return a bootrom lookup code based on two ASCII characters
    +///
    +/// These codes are uses to lookup data or function addresses in the bootrom
    +///
    +/// # Parameters
    +/// * `c1` - the first character
    +/// * `c2` - the second character
    +///
    +/// # Returns
    +///
    +/// A 32 bit address pointing into bootrom
    +pub fn rom_table_code(c1: u8, c2: u8) u32 {
    +    return @intCast(u32, c1) | (@intCast(u32, c2) << 8);
    +}
    +
    +/// Convert a 16 bit pointer stored at the given rom address into a pointer
    +///
    +/// # Parameters
    +/// * `rom_addr` - address of the 16-bit pointer in rom
    +///
    +/// # Returns
    +///
    +/// The converted pointer
    +pub inline fn rom_hword_as_ptr(rom_addr: u32) *anyopaque {
    +    const ptr_to_ptr = @intToPtr(*u16, rom_addr);
    +    return @intToPtr(*anyopaque, @intCast(usize, ptr_to_ptr.*));
    +}
    +
    +/// Lookup a bootrom function by code (inline)
    +///
    +/// # Parameters
    +/// * `code` - code of the function (see codes)
    +///
    +/// # Returns
    +///
    +/// A anyopaque pointer to the function; must be cast by the caller
    +pub inline fn _rom_func_lookup(code: Code) *anyopaque {
    +    const rom_table_lookup = @ptrCast(*signatures.rom_table_lookup, rom_hword_as_ptr(0x18));
    +    const func_table = @ptrCast(*u16, @alignCast(2, rom_hword_as_ptr(0x14)));
    +    return rom_table_lookup(func_table, @enumToInt(code));
    +}
    +
    +/// Lookup a bootrom function by code
    +///
    +/// # Parameters
    +/// * `code` - code of the function (see codes)
    +///
    +/// # Returns
    +///
    +/// A anyopaque pointer to the function; must be cast by the caller
    +pub fn rom_func_lookup(code: Code) *anyopaque {
    +    return _rom_func_lookup(code);
    +}
    +
    +// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    +// Fast Bit Counting / Manipulation Functions (Datasheet p. 135)
    +// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    +
    +/// Return a count of the number of 1 bits in value
    +pub fn popcount32(value: u32) u32 {
    +    const S = struct {
    +        var f: ?*signatures.popcount32 = null;
    +    };
    +
    +    if (S.f == null) S.f = @ptrCast(*signatures.popcount32, _rom_func_lookup(Code.popcount32));
    +    return S.f.?(value);
    +}
    +
    +/// Return a count of the number of 1 bits in value
    +pub fn reverse32(value: u32) u32 {
    +    const S = struct {
    +        var f: ?*signatures.reverse32 = null;
    +    };
    +
    +    if (S.f == null) S.f = @ptrCast(*signatures.reverse32, _rom_func_lookup(Code.reverse32));
    +    return S.f.?(value);
    +}
    +
    +/// Return the number of consecutive high order 0 bits of value
    +pub fn clz32(value: u32) u32 {
    +    const S = struct {
    +        var f: ?*signatures.clz32 = null;
    +    };
    +
    +    if (S.f == null) S.f = @ptrCast(*signatures.clz32, _rom_func_lookup(Code.clz32));
    +    return S.f.?(value);
    +}
    +
    +/// Return the number of consecutive low order 0 bits of value
    +pub fn ctz32(value: u32) u32 {
    +    const S = struct {
    +        var f: ?*signatures.ctz32 = null;
    +    };
    +
    +    if (S.f == null) S.f = @ptrCast(*signatures.ctz32, _rom_func_lookup(Code.ctz32));
    +    return S.f.?(value);
    +}
    +
    +// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    +// Fast Bulk Memory Fill / Copy Functions (Datasheet p. 136)
    +// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    +
    +/// Sets all bytes of dest to the value c and returns ptr
    +pub fn memset(dest: []u8, c: u8) []u8 {
    +    const S = struct {
    +        var f: ?*signatures.memset = null;
    +    };
    +
    +    if (S.f == null) S.f = @ptrCast(*signatures.memset, _rom_func_lookup(Code.memset));
    +    return S.f.?(dest.ptr, c, dest.len)[0..dest.len];
    +}
    +
    +/// Copies n bytes from src to dest; The number of bytes copied is the size of the smaller slice
    +pub fn memcpy(dest: []u8, src: []u8) []u8 {
    +    const S = struct {
    +        var f: ?*signatures.memcpy = null;
    +    };
    +
    +    const n = if (dest.len <= src.len) dest.len else src.len;
    +
    +    if (S.f == null) S.f = @ptrCast(*signatures.memcpy, _rom_func_lookup(Code.memcpy));
    +    return S.f.?(dest.ptr, src.ptr, n)[0..n];
    +}
    +
    +// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    +// Flash Access Functions (Datasheet p. 137)
    +// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    +
    +/// Restore all QSPI pad controls to their default state, and connect the SSI to the QSPI pads
    +pub inline fn connect_internal_flash() *signatures.connect_internal_flash {
    +    return @ptrCast(
    +        *signatures.connect_internal_flash,
    +        _rom_func_lookup(Code.connect_internal_flash),
    +    );
    +}
    +
    +/// First set up the SSI for serial-mode operations, then issue the fixed XIP exit
    +/// sequence described in Section 2.8.1.2. Note that the bootrom code uses the IO
    +/// forcing logic to drive the CS pin, which must be cleared before returning the
    +/// SSI to XIP mode (e.g. by a call to _flash_flush_cache). This function configures
    +/// the SSI with a fixed SCK clock divisor of /6.
    +pub inline fn flash_exit_xip() *signatures.flash_exit_xip {
    +    return @ptrCast(
    +        *signatures.flash_exit_xip,
    +        _rom_func_lookup(Code.flash_exit_xip),
    +    );
    +}
    +
    +/// Erase a count bytes, starting at addr (offset from start of flash). Optionally,
    +/// pass a block erase command e.g. D8h block erase, and the size of the block
    +/// erased by this command — this function will use the larger block erase where
    +/// possible, for much higher erase speed. addr must be aligned to a 4096-byte sector,
    +/// and count must be a multiple of 4096 bytes.
    +pub inline fn flash_range_erase() *signatures.flash_range_erase {
    +    return @ptrCast(
    +        *signatures.flash_range_erase,
    +        _rom_func_lookup(Code.flash_range_erase),
    +    );
    +}
    +
    +/// Program data to a range of flash addresses starting at addr (offset from the
    +/// start of flash) and count bytes in size. addr must be aligned to a 256-byte
    +/// boundary, and the length of data must be a multiple of 256.
    +pub inline fn flash_range_program() *signatures.flash_range_program {
    +    return @ptrCast(
    +        *signatures.flash_range_program,
    +        _rom_func_lookup(Code.flash_range_program),
    +    );
    +}
    +
    +/// Flush and enable the XIP cache. Also clears the IO forcing on QSPI CSn, so that
    +/// the SSI can drive the flash chip select as normal.
    +pub inline fn flash_flush_cache() *signatures.flash_flush_cache {
    +    return @ptrCast(
    +        *signatures.flash_flush_cache,
    +        _rom_func_lookup(Code.flash_flush_cache),
    +    );
    +}
    +
    +/// Configure the SSI to generate a standard 03h serial read command, with 24 address
    +/// bits, upon each XIP access. This is a very slow XIP configuration, but is very
    +/// widely supported. The debugger calls this function after performing a flash
    +/// erase/programming operation, so that the freshly-programmed code and data is
    +/// visible to the debug host, without having to know exactly what kind of flash
    +/// device is connected.
    +pub inline fn flash_enter_cmd_xip() *signatures.flash_enter_cmd_xip {
    +    return @ptrCast(
    +        *signatures.flash_enter_cmd_xip,
    +        _rom_func_lookup(Code.flash_enter_cmd_xip),
    +    );
    +}
    
    From 666f444037ebe2920912234c60b359fc122c8f83 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Fri, 7 Apr 2023 09:11:31 -0700
    Subject: [PATCH 113/286] Readme fix (#37)
    
    * fix link
    ---
     .buildkite/pipeline.yml | 2 ++
     README.adoc             | 2 +-
     2 files changed, 3 insertions(+), 1 deletion(-)
     create mode 100644 .buildkite/pipeline.yml
    
    diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml
    new file mode 100644
    index 000000000..b1f338d11
    --- /dev/null
    +++ b/.buildkite/pipeline.yml
    @@ -0,0 +1,2 @@
    +steps:
    +  - command: zig build
    diff --git a/README.adoc b/README.adoc
    index 171c62d0a..fc0ca7fe8 100644
    --- a/README.adoc
    +++ b/README.adoc
    @@ -4,4 +4,4 @@ HAL and register definitions for the RP2040.
     
     == What version of Zig to use
     
    -Right now we are following [master](https://ziglang.org/download/), but once 0.11.0 is released, we will be switching to the latest stable version of Zig.
    +Right now we are following https://ziglang.org/download/[master], but once 0.11.0 is released, we will be switching to the latest stable version of Zig.
    
    From b0e346608e4abef37302412c5f62c389cd04e5bd Mon Sep 17 00:00:00 2001
    From: Vesim 
    Date: Sat, 8 Apr 2023 19:22:19 +0200
    Subject: [PATCH 114/286] PIO assembler (#25)
    
    * WIP pio assembler
    
    * add comparison tests against the official assembler
    
    * tokenizer passing tests
    
    * add buildkite pipeline
    
    * comparison tests
    
    * assembler now outputting a few programs similar to official
    
    * largely complete
    
    ---------
    
    Co-authored-by: Matt Knight 
    ---
     .buildkite/pipeline.yml                       |    2 +-
     .gitignore                                    |    3 +
     build.zig                                     |   16 +-
     deps/microzig                                 |    2 +-
     examples/squarewave.zig                       |   53 +
     src/hal.zig                                   |    6 +-
     src/hal/gpio.zig                              |    2 +-
     src/hal/hw.zig                                |   11 +
     src/hal/irq.zig                               |    8 +-
     src/hal/pio.zig                               |  358 +++
     src/hal/pio/assembler.zig                     |  140 ++
     src/hal/pio/assembler/Expression.zig          |  706 ++++++
     src/hal/pio/assembler/comparison_tests.zig    |  168 ++
     .../assembler/comparison_tests/README.adoc    |    4 +
     .../assembler/comparison_tests/addition.pio   |   33 +
     .../assembler/comparison_tests/addition.pio.h |   52 +
     .../pio/assembler/comparison_tests/apa102.pio |   89 +
     .../assembler/comparison_tests/apa102.pio.h   |  105 +
     .../pio/assembler/comparison_tests/blink.pio  |   34 +
     .../assembler/comparison_tests/blink.pio.h    |   54 +
     .../comparison_tests/clocked_input.pio        |   51 +
     .../comparison_tests/clocked_input.pio.h      |   64 +
     .../differential_manchester.pio               |  104 +
     .../differential_manchester.pio.h             |  120 +
     .../pio/assembler/comparison_tests/hello.pio  |   34 +
     .../assembler/comparison_tests/hello.pio.h    |   55 +
     .../pio/assembler/comparison_tests/hub75.pio  |  128 ++
     .../assembler/comparison_tests/hub75.pio.h    |  138 ++
     .../pio/assembler/comparison_tests/i2c.pio    |  145 ++
     .../pio/assembler/comparison_tests/i2c.pio.h  |  136 ++
     .../comparison_tests/manchester_encoding.pio  |   94 +
     .../manchester_encoding.pio.h                 |  112 +
     .../comparison_tests/nec_carrier_burst.pio    |   61 +
     .../comparison_tests/nec_carrier_burst.pio.h  |   70 +
     .../comparison_tests/nec_carrier_control.pio  |   79 +
     .../nec_carrier_control.pio.h                 |   73 +
     .../comparison_tests/nec_receive.pio          |   96 +
     .../comparison_tests/nec_receive.pio.h        |   84 +
     .../comparison_tests/pio_serialiser.pio       |   27 +
     .../comparison_tests/pio_serialiser.pio.h     |   50 +
     .../pio/assembler/comparison_tests/pwm.pio    |   31 +
     .../pio/assembler/comparison_tests/pwm.pio.h  |   53 +
     .../comparison_tests/quadrature_encoder.pio   |  165 ++
     .../comparison_tests/quadrature_encoder.pio.h |  116 +
     .../comparison_tests/resistor_dac.pio         |   38 +
     .../comparison_tests/resistor_dac.pio.h       |   57 +
     .../pio/assembler/comparison_tests/spi.pio    |  168 ++
     .../pio/assembler/comparison_tests/spi.pio.h  |  198 ++
     .../assembler/comparison_tests/squarewave.pio |   13 +
     .../comparison_tests/squarewave.pio.h         |   40 +
     .../comparison_tests/squarewave_fast.pio      |   19 +
     .../comparison_tests/squarewave_fast.pio.h    |   39 +
     .../comparison_tests/squarewave_test.pio      |   12 +
     .../comparison_tests/squarewave_wrap.pio      |   19 +
     .../comparison_tests/squarewave_wrap.pio.h    |   39 +
     .../assembler/comparison_tests/st7789_lcd.pio |   57 +
     .../comparison_tests/st7789_lcd.pio.h         |   72 +
     .../assembler/comparison_tests/uart_rx.pio    |   94 +
     .../assembler/comparison_tests/uart_rx.pio.h  |  120 +
     .../assembler/comparison_tests/uart_tx.pio    |   61 +
     .../assembler/comparison_tests/uart_tx.pio.h  |   73 +
     .../pio/assembler/comparison_tests/ws2812.pio |   85 +
     .../assembler/comparison_tests/ws2812.pio.h   |  114 +
     src/hal/pio/assembler/encoder.zig             | 1005 +++++++++
     src/hal/pio/assembler/tokenizer.zig           | 1947 +++++++++++++++++
     65 files changed, 8191 insertions(+), 11 deletions(-)
     create mode 100644 examples/squarewave.zig
     create mode 100644 src/hal/hw.zig
     create mode 100644 src/hal/pio.zig
     create mode 100644 src/hal/pio/assembler.zig
     create mode 100644 src/hal/pio/assembler/Expression.zig
     create mode 100644 src/hal/pio/assembler/comparison_tests.zig
     create mode 100644 src/hal/pio/assembler/comparison_tests/README.adoc
     create mode 100644 src/hal/pio/assembler/comparison_tests/addition.pio
     create mode 100644 src/hal/pio/assembler/comparison_tests/addition.pio.h
     create mode 100644 src/hal/pio/assembler/comparison_tests/apa102.pio
     create mode 100644 src/hal/pio/assembler/comparison_tests/apa102.pio.h
     create mode 100644 src/hal/pio/assembler/comparison_tests/blink.pio
     create mode 100644 src/hal/pio/assembler/comparison_tests/blink.pio.h
     create mode 100644 src/hal/pio/assembler/comparison_tests/clocked_input.pio
     create mode 100644 src/hal/pio/assembler/comparison_tests/clocked_input.pio.h
     create mode 100644 src/hal/pio/assembler/comparison_tests/differential_manchester.pio
     create mode 100644 src/hal/pio/assembler/comparison_tests/differential_manchester.pio.h
     create mode 100644 src/hal/pio/assembler/comparison_tests/hello.pio
     create mode 100644 src/hal/pio/assembler/comparison_tests/hello.pio.h
     create mode 100644 src/hal/pio/assembler/comparison_tests/hub75.pio
     create mode 100644 src/hal/pio/assembler/comparison_tests/hub75.pio.h
     create mode 100644 src/hal/pio/assembler/comparison_tests/i2c.pio
     create mode 100644 src/hal/pio/assembler/comparison_tests/i2c.pio.h
     create mode 100644 src/hal/pio/assembler/comparison_tests/manchester_encoding.pio
     create mode 100644 src/hal/pio/assembler/comparison_tests/manchester_encoding.pio.h
     create mode 100644 src/hal/pio/assembler/comparison_tests/nec_carrier_burst.pio
     create mode 100644 src/hal/pio/assembler/comparison_tests/nec_carrier_burst.pio.h
     create mode 100644 src/hal/pio/assembler/comparison_tests/nec_carrier_control.pio
     create mode 100644 src/hal/pio/assembler/comparison_tests/nec_carrier_control.pio.h
     create mode 100644 src/hal/pio/assembler/comparison_tests/nec_receive.pio
     create mode 100644 src/hal/pio/assembler/comparison_tests/nec_receive.pio.h
     create mode 100644 src/hal/pio/assembler/comparison_tests/pio_serialiser.pio
     create mode 100644 src/hal/pio/assembler/comparison_tests/pio_serialiser.pio.h
     create mode 100644 src/hal/pio/assembler/comparison_tests/pwm.pio
     create mode 100644 src/hal/pio/assembler/comparison_tests/pwm.pio.h
     create mode 100644 src/hal/pio/assembler/comparison_tests/quadrature_encoder.pio
     create mode 100644 src/hal/pio/assembler/comparison_tests/quadrature_encoder.pio.h
     create mode 100644 src/hal/pio/assembler/comparison_tests/resistor_dac.pio
     create mode 100644 src/hal/pio/assembler/comparison_tests/resistor_dac.pio.h
     create mode 100644 src/hal/pio/assembler/comparison_tests/spi.pio
     create mode 100644 src/hal/pio/assembler/comparison_tests/spi.pio.h
     create mode 100644 src/hal/pio/assembler/comparison_tests/squarewave.pio
     create mode 100644 src/hal/pio/assembler/comparison_tests/squarewave.pio.h
     create mode 100644 src/hal/pio/assembler/comparison_tests/squarewave_fast.pio
     create mode 100644 src/hal/pio/assembler/comparison_tests/squarewave_fast.pio.h
     create mode 100644 src/hal/pio/assembler/comparison_tests/squarewave_test.pio
     create mode 100644 src/hal/pio/assembler/comparison_tests/squarewave_wrap.pio
     create mode 100644 src/hal/pio/assembler/comparison_tests/squarewave_wrap.pio.h
     create mode 100644 src/hal/pio/assembler/comparison_tests/st7789_lcd.pio
     create mode 100644 src/hal/pio/assembler/comparison_tests/st7789_lcd.pio.h
     create mode 100644 src/hal/pio/assembler/comparison_tests/uart_rx.pio
     create mode 100644 src/hal/pio/assembler/comparison_tests/uart_rx.pio.h
     create mode 100644 src/hal/pio/assembler/comparison_tests/uart_tx.pio
     create mode 100644 src/hal/pio/assembler/comparison_tests/uart_tx.pio.h
     create mode 100644 src/hal/pio/assembler/comparison_tests/ws2812.pio
     create mode 100644 src/hal/pio/assembler/comparison_tests/ws2812.pio.h
     create mode 100644 src/hal/pio/assembler/encoder.zig
     create mode 100644 src/hal/pio/assembler/tokenizer.zig
    
    diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml
    index b1f338d11..50f730f18 100644
    --- a/.buildkite/pipeline.yml
    +++ b/.buildkite/pipeline.yml
    @@ -1,2 +1,2 @@
     steps:
    -  - command: zig build
    +  - command: zig build test
    diff --git a/.gitignore b/.gitignore
    index 4c82b07c0..c8366d4d8 100644
    --- a/.gitignore
    +++ b/.gitignore
    @@ -1,2 +1,5 @@
     zig-cache
     zig-out
    +.DS_Store
    +.gdbinit
    +.lldbinit
    diff --git a/build.zig b/build.zig
    index 5144b3642..21a91ff64 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -39,8 +39,19 @@ pub fn addPiPicoExecutable(
     // project requires multiple HALs, it accepts microzig as a param
     pub fn build(b: *Builder) !void {
         const optimize = b.standardOptimizeOption(.{});
    -    var examples = Examples.init(b, optimize);
    -    examples.install();
    +    //var examples = Examples.init(b, optimize);
    +    //examples.install();
    +
    +    const pio_tests = b.addTest(.{
    +        .root_source_file = .{
    +            .path = "src/hal/pio.zig",
    +        },
    +        .optimize = optimize,
    +    });
    +    pio_tests.addIncludePath("src/hal/pio/assembler");
    +
    +    const test_step = b.step("test", "run unit tests");
    +    test_step.dependOn(&pio_tests.run().step);
     }
     
     fn root() []const u8 {
    @@ -55,6 +66,7 @@ pub const Examples = struct {
         pwm: *microzig.EmbeddedExecutable,
         spi_master: *microzig.EmbeddedExecutable,
         uart: *microzig.EmbeddedExecutable,
    +    squarewave: *microzig.EmbeddedExecutable,
         //uart_pins: microzig.EmbeddedExecutable,
         flash_program: *microzig.EmbeddedExecutable,
     
    diff --git a/deps/microzig b/deps/microzig
    index 23482a698..dabc9325c 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 23482a6986252e0eeff54a04abc0aac8a08d25d7
    +Subproject commit dabc9325cdee394ff66e28c91803cb814954b157
    diff --git a/examples/squarewave.zig b/examples/squarewave.zig
    new file mode 100644
    index 000000000..b320681ed
    --- /dev/null
    +++ b/examples/squarewave.zig
    @@ -0,0 +1,53 @@
    +//! Hello world for the PIO module: generating a square wave
    +const std = @import("std");
    +const microzig = @import("microzig");
    +const rp2040 = microzig.hal;
    +const gpio = rp2040.gpio;
    +const Pio = rp2040.pio.Pio;
    +const StateMachine = rp2040.pio.StateMachine;
    +
    +const squarewave_program = (rp2040.pio.assemble(
    +    \\.program squarewave
    +    \\    set pindirs, 1   ; Set pin to output
    +    \\again:
    +    \\    set pins, 1 [1]  ; Drive pin high and then delay for one cycle
    +    \\    set pins, 0      ; Drive pin low
    +    \\    jmp again        ; Set PC to label `again`
    +) catch
    +    @panic("failed to assemble program"))
    +    .get_program_by_name("squarewave");
    +
    +pub fn main() void {
    +    // Pick one PIO instance arbitrarily. We're also arbitrarily picking state
    +    // machine 0 on this PIO instance (the state machines are numbered 0 to 3
    +    // inclusive).
    +    const pio: Pio = .pio0;
    +    const sm: StateMachine = .sm0;
    +
    +    // Load the assembled program directly into the PIO's instruction memory.
    +    // Each PIO instance has a 32-slot instruction memory, which all 4 state
    +    // machines can see. The system has write-only access.
    +    for (squarewave_program.instructions, 0..) |insn, i|
    +        pio.get_instruction_memory()[i] = insn;
    +
    +    // Configure state machine 0 to run at sysclk/2.5. The state machines can
    +    // run as fast as one instruction per clock cycle, but we can scale their
    +    // speed down uniformly to meet some precise frequency target, e.g. for a
    +    // UART baud rate. This register has 16 integer divisor bits and 8
    +    // fractional divisor bits.
    +    pio.set_clkdiv_int_frac(sm, 2, 0x80);
    +
    +    // There are five pin mapping groups (out, in, set, side-set, jmp pin)
    +    // which are used by different instructions or in different circumstances.
    +    // Here we're just using SET instructions. Configure state machine 0 SETs
    +    // to affect GPIO 0 only; then configure GPIO0 to be controlled by PIO0,
    +    // as opposed to e.g. the processors.
    +    pio.set_out_pins(sm, 0, 1);
    +    gpio.set_function(0, .pio0);
    +
    +    // Set the state machine running. The PIO CTRL register is global within a
    +    // PIO instance, so you can start/stop multiple state machines
    +    // simultaneously. We're using the register's hardware atomic set alias to
    +    // make one bit high without doing a read-modify-write on the register.
    +    pio.set_enabled(sm, true);
    +}
    diff --git a/src/hal.zig b/src/hal.zig
    index f8a74d2f8..5813cf947 100644
    --- a/src/hal.zig
    +++ b/src/hal.zig
    @@ -1,5 +1,6 @@
    +const std = @import("std");
     const microzig = @import("microzig");
    -const regs = microzig.chip.registers;
    +const SIO = microzig.chip.peripherals.SIO;
     
     pub const adc = @import("hal/adc.zig");
     pub const pins = @import("hal/pins.zig");
    @@ -14,6 +15,7 @@ pub const resets = @import("hal/resets.zig");
     pub const irq = @import("hal/irq.zig");
     pub const rom = @import("hal/rom.zig");
     pub const flash = @import("hal/flash.zig");
    +pub const pio = @import("hal/pio.zig");
     
     pub const clock_config = clocks.GlobalConfiguration.init(.{
         .ref = .{ .source = .src_xosc },
    @@ -32,5 +34,5 @@ pub fn init() void {
     }
     
     pub fn get_cpu_id() u32 {
    -    return regs.SIO.CPUID.*;
    +    return SIO.CPUID.*;
     }
    diff --git a/src/hal/gpio.zig b/src/hal/gpio.zig
    index 1e333b148..c0b6baeee 100644
    --- a/src/hal/gpio.zig
    +++ b/src/hal/gpio.zig
    @@ -87,7 +87,7 @@ pub const PullUpDown = enum {
     
     pub inline fn set_pull(comptime gpio: u32, mode: ?PullUpDown) void {
         const gpio_name = comptime std.fmt.comptimePrint("GPIO{d}", .{gpio});
    -    const gpio_regs = @field(PADS_BANK0, gpio_name);
    +    const gpio_regs = &@field(PADS_BANK0, gpio_name);
     
         if (mode == null) {
             gpio_regs.modify(.{ .PUE = 0, .PDE = 0 });
    diff --git a/src/hal/hw.zig b/src/hal/hw.zig
    new file mode 100644
    index 000000000..a44aff121
    --- /dev/null
    +++ b/src/hal/hw.zig
    @@ -0,0 +1,11 @@
    +pub const Lock = struct {
    +    impl: u32,
    +
    +    pub fn claim() Lock {
    +
    +    }
    +
    +    pub fn unlock(lock: Lock) void {
    +
    +    }
    +};
    diff --git a/src/hal/irq.zig b/src/hal/irq.zig
    index f3502be5b..2ff9a137b 100644
    --- a/src/hal/irq.zig
    +++ b/src/hal/irq.zig
    @@ -1,5 +1,5 @@
     const microzig = @import("microzig");
    -const regs = microzig.chip.registers;
    +const NVIC = microzig.chip.peripherals.NVIC;
     
     // TODO: the register definitions are improved now, use them instead of raw
     // writes/reads
    @@ -10,11 +10,11 @@ fn get_interrupt_mask(comptime interrupt_name: []const u8) u32 {
     }
     pub fn enable(comptime interrupt_name: []const u8) void {
         const mask = comptime get_interrupt_mask(interrupt_name);
    -    regs.SCS.NVIC.ICPR.raw = mask;
    -    regs.SCS.NVIC.ISER.raw = mask;
    +    NVIC.ICPR.raw = mask;
    +    NVIC.ISER.raw = mask;
     }
     
     pub fn disable(comptime interrupt_name: []const u8) void {
         const mask = comptime get_interrupt_mask(interrupt_name);
    -    regs.SCS.NVIC.ICER.raw = mask;
    +    NVIC.ICER.raw = mask;
     }
    diff --git a/src/hal/pio.zig b/src/hal/pio.zig
    new file mode 100644
    index 000000000..e37d713d9
    --- /dev/null
    +++ b/src/hal/pio.zig
    @@ -0,0 +1,358 @@
    +//! A PIO instance can load a single `Bytecode`, it has to be loaded into memory
    +const std = @import("std");
    +
    +const microzig = @import("microzig");
    +const PIO = microzig.chip.types.peripherals.PIO0;
    +const PIO0 = microzig.chip.peripherals.PIO0;
    +const PIO1 = microzig.chip.peripherals.PIO1;
    +
    +const gpio = @import("gpio.zig");
    +const assembler = @import("pio/assembler.zig");
    +pub const Bytecode = Bytecode;
    +pub const Program = assembler.Program;
    +pub const assemble = assembler.assemble;
    +
    +var used_instruction_space: [2]u32 = [_]u32{ 0, 0 };
    +var claimed_state_machines: [2]u4 = [_]u4{ 0, 0 };
    +
    +pub const Join = enum {
    +    none,
    +    rx,
    +    tx,
    +};
    +
    +pub const Status = enum {
    +    rx_lessthan,
    +    tx_lessthan,
    +};
    +
    +pub const Configuration = struct {
    +    pin: u32,
    +};
    +
    +pub const StateMachine = enum(u2) {
    +    sm0,
    +    sm1,
    +    sm2,
    +    sm3,
    +};
    +
    +pub const Pio = enum(u1) {
    +    pio0 = 0,
    +    pio1 = 1,
    +
    +    fn get_regs(self: Pio) *volatile PIO {
    +        return switch (self) {
    +            .pio0 => PIO0,
    +            .pio1 => PIO1,
    +        };
    +    }
    +
    +    pub fn get_instruction_memory(self: Pio) *volatile [32]u32 {
    +        const regs = self.get_regs();
    +        return @ptrCast(*volatile [32]u32, ®s.INSTR_MEM0);
    +    }
    +
    +    pub fn gpio_init(self: Pio, comptime pin: u5) void {
    +        gpio.set_function(pin, switch (self) {
    +            .pio0 => .pio0,
    +            .pio1 => .pio1,
    +        });
    +    }
    +
    +    pub fn load(self: Pio, bytecode: Bytecode) !void {
    +        _ = self;
    +        _ = bytecode;
    +    }
    +
    +    fn can_add_program_at_offset(self: Pio, program: Program, offset: u5) bool {
    +        if (program.origin) |origin|
    +            if (origin != offset)
    +                return false;
    +
    +        const used_mask = used_instruction_space[@enumToInt(self)];
    +        const program_mask = program.get_mask();
    +
    +        // We can add the program if the masks don't overlap, if there is
    +        // overlap the result of a bitwise AND will have a non-zero result
    +        return (used_mask & program_mask) == 0;
    +    }
    +
    +    fn find_offset_for_program(self: Pio, program: Program) !u5 {
    +        return if (program.origin) |origin|
    +            if (self.can_add_program_at_offset(program, origin))
    +                origin
    +            else
    +                error.NoSpace
    +        else for (0..32 - program.isntruction.len) |i| {
    +            if (self.can_add_program_at_offset(program, i))
    +                break i;
    +        } else error.NoSpace;
    +    }
    +
    +    fn add_program_at_offset_unlocked(self: Pio, program: Program, offset: u5) !void {
    +        if (!self.can_add_program_at_offset(program, offset))
    +            return error.NoSpace;
    +
    +        const instruction_memory = self.get_instruction_memory();
    +        for (program.instructions, offset..) |insn, i|
    +            instruction_memory[i] = insn;
    +
    +        const program_mask = program.get_mask();
    +        used_instruction_space[@enumToInt(self)] |= program_mask << offset;
    +    }
    +
    +    /// Public functions will need to lock independently, so only exposing this function for now
    +    pub fn add_program(self: Pio, program: Program) !void {
    +        // TODO: const lock = hw.Lock.claim()
    +        // defer lock.unlock();
    +
    +        const offset = try self.find_offset_for_program_unlocked();
    +        try self.add_program_at_offset(program, offset);
    +    }
    +
    +    pub fn claim_unused_state_machine(self: Pio) !StateMachine {
    +        // TODO: const lock = hw.Lock.claim()
    +        // defer lock.unlock();
    +
    +        const claimed_mask = claimed_state_machines[@enumToInt(self)];
    +        return for (0..4) |i| {
    +            const sm_mask = (@as(u4, 1) << @intCast(u2, i));
    +            if (0 == (claimed_mask & sm_mask)) {
    +                claimed_state_machines[@enumToInt(self)] |= sm_mask;
    +                break @intToEnum(StateMachine, i);
    +            }
    +        } else error.NoSpace;
    +    }
    +
    +    pub const StateMachineRegs = extern struct {
    +        clkdiv: @TypeOf(PIO0.SM0_CLKDIV),
    +        execctrl: @TypeOf(PIO0.SM0_EXECCTRL),
    +        shiftctrl: @TypeOf(PIO0.SM0_SHIFTCTRL),
    +        addr: @TypeOf(PIO0.SM0_ADDR),
    +        instr: @TypeOf(PIO0.SM0_INSTR),
    +        pinctrl: @TypeOf(PIO0.SM0_PINCTRL),
    +    };
    +
    +    fn get_sm_regs(self: Pio, sm: StateMachine) *volatile StateMachineRegs {
    +        const pio_regs = self.get_regs();
    +        return switch (sm) {
    +            .sm0 => @ptrCast(*volatile StateMachineRegs, &pio_regs.SM0_CLKDIV),
    +            .sm1 => @ptrCast(*volatile StateMachineRegs, &pio_regs.SM1_CLKDIV),
    +            .sm2 => @ptrCast(*volatile StateMachineRegs, &pio_regs.SM2_CLKDIV),
    +            .sm3 => @ptrCast(*volatile StateMachineRegs, &pio_regs.SM3_CLKDIV),
    +        };
    +    }
    +
    +    pub fn join_fifo(self: Pio, sm: StateMachine, join: Join) void {
    +        const tx: u1 = switch (join) {
    +            .tx => 1,
    +            .rx => 0,
    +            .none => 0,
    +        };
    +        const rx: u1 = switch (join) {
    +            .tx => 0,
    +            .rx => 1,
    +            .none => 0,
    +        };
    +
    +        const sm_regs = self.get_sm_regs(sm);
    +        sm_regs.shiftctrl.modify(.{
    +            .FJOIN_TX = tx,
    +            .FJOIN_RX = rx,
    +        });
    +    }
    +
    +    pub fn set_clkdiv_int_frac(self: Pio, sm: StateMachine, div_int: u16, div_frac: u8) void {
    +        if (div_int == 0 and div_frac != 0)
    +            @panic("invalid params");
    +
    +        const sm_regs = self.get_sm_regs(sm);
    +        sm_regs.clkdiv.write(.{
    +            .INT = div_int,
    +            .FRAC = div_frac,
    +
    +            .reserved8 = 0,
    +        });
    +    }
    +
    +    pub fn set_out_shift(self: Pio, sm: StateMachine, args: struct {
    +        shift_right: bool,
    +        autopull: bool,
    +        pull_threshold: u5,
    +    }) void {
    +        const sm_regs = self.get_sm_regs(sm);
    +        sm_regs.shiftctrl.modify(.{
    +            .OUT_SHIFTDIR = @boolToInt(args.shift_right),
    +            .AUTOPULL = @boolToInt(args.autopull),
    +            .PULL_THRESH = args.pull_threshold,
    +        });
    +    }
    +
    +    pub fn set_out_pins(self: Pio, sm: StateMachine, base: u5, count: u5) void {
    +        const sm_regs = self.get_sm_regs(sm);
    +        sm_regs.pinctrl.modify(.{
    +            .OUT_BASE = base,
    +            .OUT_COUNT = count,
    +        });
    +    }
    +
    +    pub fn set_sideset_pins(self: Pio, sm: StateMachine, base: u5) void {
    +        const sm_regs = self.get_sm_regs(sm);
    +        sm_regs.pinctrl.modify(.{ .SIDESET_BASE = base });
    +    }
    +
    +    pub fn is_tx_fifo_full(self: Pio, sm: StateMachine) bool {
    +        const regs = self.get_regs();
    +        const txfull = regs.FSTAT.read().TXFULL;
    +        return (txfull & (@as(u4, 1) << @enumToInt(sm))) != 0;
    +    }
    +
    +    pub fn get_tx_fifo(self: Pio, sm: StateMachine) *volatile u32 {
    +        const regs = self.get_regs();
    +        return switch (sm) {
    +            .sm0 => ®s.TXF0,
    +            .sm1 => ®s.TXF1,
    +            .sm2 => ®s.TXF2,
    +            .sm3 => ®s.TXF3,
    +        };
    +    }
    +
    +    pub fn blocking_write(self: Pio, sm: StateMachine, value: u32) void {
    +        while (self.is_tx_fifo_full(sm)) {}
    +
    +        const fifo_ptr = self.get_tx_fifo(sm);
    +        fifo_ptr.* = value;
    +    }
    +
    +    pub fn encode_jmp() void {}
    +
    +    //static inline uint _pio_encode_instr_and_args(enum pio_instr_bits instr_bits, uint arg1, uint arg2) {
    +    //    valid_params_if(PIO_INSTRUCTIONS, arg1 <= 0x7);
    +    //#if PARAM_ASSERTIONS_ENABLED(PIO_INSTRUCTIONS)
    +    //    uint32_t major = _pio_major_instr_bits(instr_bits);
    +    //    if (major == pio_instr_bits_in || major == pio_instr_bits_out) {
    +    //        assert(arg2 && arg2 <= 32);
    +    //    } else {
    +    //        assert(arg2 <= 31);
    +    //    }
    +    //#endif
    +    //    return instr_bits | (arg1 << 5u) | (arg2 & 0x1fu);
    +    //}
    +    //
    +    //static inline uint pio_encode_jmp(uint addr) {
    +    //    return _pio_encode_instr_and_args(pio_instr_bits_jmp, 0, addr);
    +    //}
    +
    +    pub fn set_enabled(self: Pio, sm: StateMachine, enabled: bool) void {
    +        const regs = self.get_regs();
    +
    +        var value = regs.CTRL.read();
    +        if (enabled)
    +            value.SM_ENABLE |= @as(u4, 1) << @enumToInt(sm)
    +        else
    +            value.SM_ENABLE &= ~(@as(u4, 1) << @enumToInt(sm));
    +
    +        regs.CTRL.write(value);
    +    }
    +
    +    pub fn sm_init(self: Pio, sm: StateMachine, initial_pc: u5, config: StateMachineRegs) void {
    +        // Halt the machine, set some sensible defaults
    +        self.set_enabled(sm, false);
    +
    +        self.set_config(sm, config);
    +        self.clear_fifos(sm);
    +
    +        // Clear FIFO debug flags
    +        //const uint32_t fdebug_sm_mask =
    +        //        (1u << PIO_FDEBUG_TXOVER_LSB) |
    +        //        (1u << PIO_FDEBUG_RXUNDER_LSB) |
    +        //        (1u << PIO_FDEBUG_TXSTALL_LSB) |
    +        //        (1u << PIO_FDEBUG_RXSTALL_LSB);
    +        //pio->fdebug = fdebug_sm_mask << sm;
    +
    +        // Finally, clear some internal SM state
    +        self.restart(sm);
    +        self.clkdiv_restart(sm);
    +        self.exec(sm, encode_jmp(initial_pc));
    +    }
    +
    +    // state machine configuration helpers:
    +    //
    +    // - set_out_pins
    +    // - set_set_pins
    +    // - set_in_pins
    +    // - set_sideset_pins
    +    // - set_sideset
    +    // - calculate_clkdiv_from_float
    +    // - set_clkdiv
    +    // - set_wrap
    +    // - set_jmp_pin
    +    // - set_in_shift
    +    // - set_out_shift
    +    // - set_fifo_join
    +    // - set_out_special
    +    // - set_mov_status
    +    //
    +    // PIO:
    +    //
    +    // - can_add_program
    +    // - add_program_at_offset
    +    // - add_program
    +    // - remove_program
    +    // - clear_instruction_memory
    +    // - sm_init
    +    // - sm_set_enabled
    +    // - sm_mask_enabled
    +    // - sm_restart
    +    // - restart_sm_mask
    +    // - sm_clkdiv_restart
    +    // - clkdiv_restart_sm_mask
    +    // - enable_sm_mask_in_sync
    +    // - set_irq0_source_enabled
    +    // - set_irq1_source_enabled
    +    // - set_irq0_source_mask_enabled
    +    // - set_irq1_source_mask_enabled
    +    // - set_irqn_source_enabled
    +    // - set_irqn_source_mask_enabled
    +    // - interrupt_get
    +    // - interrupt_clear
    +    // - sm_get_pc
    +    // - sm_exec
    +    // - sm_is_exec_stalled
    +    // - sm_exec_wait_blocking
    +    // - sm_set_wrap
    +    // - sm_set_out_pins
    +    // - sm_set_set_pins
    +    // - sm_set_in_pins
    +    // - sm_set_sideset_pins
    +    // - sm_put
    +    // - sm_get
    +    // - sm_is_rx_fifo_full
    +    // - sm_is_rx_fifo_empty
    +    // - sm_is_rx_fifo_level
    +    // - sm_is_tx_fifo_full
    +    // - sm_is_tx_fifo_empty
    +    // - sm_is_tx_fifo_level
    +    // - sm_put_blocking
    +    // - sm_get_blocking
    +    // - sm_drain_tx_fifo
    +    // - sm_set_clkdiv_int_frac
    +    // - sm_set_clkdiv
    +    // - sm_clear_fifos
    +    // - sm_set_pins
    +    // - sm_set_pins_with_mask
    +    // - sm_set_pindirs_with_mask
    +    // - sm_set_consecutive_pindirs
    +    // - sm_claim
    +    // - claim_sm_mask
    +    // - sm_unclaim
    +    // - claim_unused_sm
    +    // - sm_is_claimed
    +    //
    +};
    +
    +test "pio" {
    +    std.testing.refAllDecls(assembler);
    +    //std.testing.refAllDecls(@import("pio/test.zig"));
    +}
    diff --git a/src/hal/pio/assembler.zig b/src/hal/pio/assembler.zig
    new file mode 100644
    index 000000000..d3596fd93
    --- /dev/null
    +++ b/src/hal/pio/assembler.zig
    @@ -0,0 +1,140 @@
    +const std = @import("std");
    +const assert = std.debug.assert;
    +
    +const tokenizer = @import("assembler/tokenizer.zig");
    +const encoder = @import("assembler/encoder.zig");
    +
    +pub const TokenizeOptions = tokenizer.Options;
    +pub const EncodeOptions = encoder.Options;
    +
    +pub const Define = struct {
    +    name: []const u8,
    +    value: i64,
    +};
    +
    +pub const Program = struct {
    +    name: []const u8,
    +    defines: []const Define,
    +    instructions: []const u16,
    +    origin: ?u5,
    +    side_set: ?encoder.SideSet,
    +    wrap_target: ?u5,
    +    wrap: ?u5,
    +
    +    pub fn get_mask(program: Program) u32 {
    +        return (1 << program.instructions.len) - 1;
    +    }
    +};
    +
    +pub const Output = struct {
    +    defines: []const Define,
    +    programs: []const Program,
    +
    +    pub fn get_program_by_name(
    +        comptime output: Output,
    +        comptime name: []const u8,
    +    ) Program {
    +        return for (output.programs) |program| {
    +            if (std.mem.eql(u8, program.name, program))
    +                break program;
    +        } else @panic(std.fmt.comptimePrint("program '{s}' not found", .{name}));
    +    }
    +
    +    pub fn get_define_by_name(
    +        comptime output: Output,
    +        comptime name: []const u8,
    +    ) u32 {
    +        return for (output.defines) |define| {
    +            if (std.mem.eql(u8, define.name, define))
    +                break define;
    +        } else @panic(std.fmt.comptimePrint("define '{s}' not found", .{name}));
    +    }
    +};
    +
    +pub const AssembleOptions = struct {
    +    tokenize: TokenizeOptions = .{},
    +    encode: EncodeOptions = .{},
    +};
    +
    +pub const Diagnostics = struct {
    +    message: std.BoundedArray(u8, 256),
    +    index: u32,
    +
    +    pub fn init(index: u32, comptime fmt: []const u8, args: anytype) Diagnostics {
    +        var ret = Diagnostics{
    +            .message = std.BoundedArray(u8, 256).init(0) catch unreachable,
    +            .index = index,
    +        };
    +
    +        ret.message.writer().print(fmt, args) catch unreachable;
    +        return ret;
    +    }
    +};
    +
    +pub fn assemble_impl(comptime source: []const u8, diags: *?Diagnostics, options: AssembleOptions) !Output {
    +    const tokens = try tokenizer.tokenize(source, diags, options.tokenize);
    +    const encoder_output = try encoder.encode(tokens.slice(), diags, options.encode);
    +    var programs = std.BoundedArray(Program, options.encode.max_programs).init(0) catch unreachable;
    +    for (encoder_output.programs.slice()) |bounded|
    +        try programs.append(bounded.to_exported_program());
    +
    +    return Output{
    +        .defines = blk: {
    +            var tmp = std.BoundedArray(Define, options.encode.max_defines).init(0) catch unreachable;
    +            for (encoder_output.global_defines.slice()) |define|
    +                tmp.append(.{
    +                    .name = define.name,
    +                    .value = define.value,
    +                }) catch unreachable;
    +            break :blk tmp.slice();
    +        },
    +        .programs = programs.slice(),
    +    };
    +}
    +
    +fn format_compile_error(comptime message: []const u8, comptime source: []const u8, comptime index: u32) []const u8 {
    +    var line_str: []const u8 = "";
    +    var line_num: u32 = 1;
    +    var column: u32 = 0;
    +    var line_it = std.mem.tokenize(u8, source, "\n\r");
    +    while (line_it.next()) |line| : (line_num += 1) {
    +        line_str = line_str ++ "\n" ++ line;
    +        if (line_it.index > index) {
    +            column = line.len - (line_it.index - index);
    +            line_str = line;
    +            break;
    +        }
    +    }
    +
    +    return std.fmt.comptimePrint(
    +        \\failed to assemble PIO code:
    +        \\
    +        \\{s}
    +        \\{s}^
    +        \\{s}{s}
    +        \\
    +    , .{
    +        line_str,
    +        [_]u8{' '} ** column,
    +        [_]u8{' '} ** column,
    +        message,
    +    });
    +}
    +
    +pub fn assemble(comptime source: []const u8, comptime options: AssembleOptions) !Output {
    +    var diags: ?Diagnostics = null;
    +    return assemble_impl(source, &diags, options) catch |err| if (diags) |d|
    +        @compileError(format_compile_error(d.message.slice(), source, d.index))
    +    else
    +        err;
    +}
    +
    +test "tokenizer and encoder" {
    +    std.testing.refAllDecls(tokenizer);
    +    std.testing.refAllDecls(@import("assembler/Expression.zig"));
    +    std.testing.refAllDecls(encoder);
    +}
    +
    +test "comparison" {
    +    //std.testing.refAllDecls(@import("assembler/comparison_tests.zig"));
    +}
    diff --git a/src/hal/pio/assembler/Expression.zig b/src/hal/pio/assembler/Expression.zig
    new file mode 100644
    index 000000000..794b5c3b1
    --- /dev/null
    +++ b/src/hal/pio/assembler/Expression.zig
    @@ -0,0 +1,706 @@
    +//! Expressions for PIO are weird. The documentation states that an expression,
    +//! when used as a "value", requires parenthesis. However the official PIO
    +//! assembler allows for defines with a value of `::1` which is an expression.
    +//!
    +//! Annoyingly, looking at the parser, it seems that it supports a number of
    +//! other operations not covered in the documentation.
    +ops: BoundedOperations,
    +values: BoundedValues,
    +
    +const std = @import("std");
    +const assert = std.debug.assert;
    +
    +const assembler = @import("../assembler.zig");
    +const Diagnostics = assembler.Diagnostics;
    +
    +const encoder = @import("encoder.zig");
    +const DefineWithIndex = encoder.DefineWithIndex;
    +
    +const Expression = @This();
    +const BoundedOperations = std.BoundedArray(OperationWithIndex, 32);
    +const BoundedValues = std.BoundedArray(Value, 32);
    +
    +const Value = struct {
    +    str: []const u8,
    +    index: u32,
    +};
    +
    +const OperationWithIndex = struct {
    +    op: Operation,
    +    index: u32,
    +};
    +
    +const call_depth_max = 64;
    +
    +pub const Operation = enum {
    +    add,
    +    sub,
    +    mul,
    +    div,
    +    negative,
    +    bit_reverse,
    +    value,
    +    // operations shown in pioasm's parser:
    +    // - OR
    +    // - AND
    +    // - XOR
    +
    +    pub fn format(
    +        op: Operation,
    +        comptime fmt: []const u8,
    +        options: std.fmt.FormatOptions,
    +        writer: anytype,
    +    ) !void {
    +        _ = fmt;
    +        _ = options;
    +        try writer.print("{s}", .{switch (op) {
    +            .add => "add",
    +            .sub => "sub",
    +            .mul => "mul",
    +            .div => "div",
    +            .negative => "neg",
    +            .bit_reverse => "rev",
    +            .value => "val",
    +        }});
    +    }
    +};
    +
    +pub fn tokenize(
    +    str: []const u8,
    +    /// starting index of the expression
    +    index: u32,
    +    diags: *?Diagnostics,
    +) !Expression {
    +    var ops = BoundedOperations.init(0) catch unreachable;
    +    var values = BoundedValues.init(0) catch unreachable;
    +
    +    const call_depth: u32 = 0;
    +    try recursive_tokenize(call_depth, &ops, &values, str, index, diags);
    +    return Expression{
    +        .ops = ops,
    +        .values = values,
    +    };
    +}
    +
    +const TrimResult = struct {
    +    str: []const u8,
    +    index: u32,
    +
    +    fn default(str: []const u8) TrimResult {
    +        return TrimResult{
    +            .str = str,
    +            .index = 0,
    +        };
    +    }
    +};
    +
    +fn trim_outer_parenthesis(str: []const u8) TrimResult {
    +    // if the outer characters (not including whitespace) are parenthesis, then include the inside string
    +
    +    // scan the prefix
    +    const start: usize = for (str, 0..) |c, i| {
    +        switch (c) {
    +            ' ',
    +            '\t',
    +            => {},
    +            '(' => break i + 1,
    +            else => return TrimResult.default(str),
    +        }
    +    } else return TrimResult.default(str);
    +
    +    const end: usize = blk: {
    +        var i = str.len - 1;
    +        break :blk while (i > 0) : (i -= 1) {
    +            switch (str[i]) {
    +                ' ',
    +                '\t',
    +                => {},
    +                ')' => break i,
    +                else => return TrimResult.default(str),
    +            }
    +        } else return TrimResult.default(str);
    +    };
    +
    +    return TrimResult{
    +        .str = str[start..end],
    +        .index = @intCast(u32, start),
    +    };
    +}
    +
    +fn recursive_tokenize(
    +    call_depth: u32,
    +    ops: *BoundedOperations,
    +    values: *BoundedValues,
    +    str: []const u8,
    +    index: u32,
    +    diags: *?Diagnostics,
    +) !void {
    +    assert(call_depth < call_depth_max);
    +    const trim_result = trim_outer_parenthesis(str);
    +    const expr_str = trim_result.str;
    +    const expr_index = index + trim_result.index;
    +
    +    var parenthesis_found = false;
    +    var depth: u32 = 0;
    +    var i = @intCast(i32, expr_str.len - 1);
    +    outer: while (i >= 0) : (i -= 1) {
    +        const idx = @intCast(u32, i);
    +        // TODO: how about if the expression is fully enveloped in parenthesis?
    +        switch (expr_str[idx]) {
    +            ')' => {
    +                depth += 1;
    +                parenthesis_found = true;
    +                continue :outer;
    +            },
    +            '(' => {
    +                if (depth == 0) {
    +                    diags.* = Diagnostics.init(expr_index + idx, "mismatched parenthesis", .{});
    +                    return error.MismatchedParenthesis;
    +                }
    +
    +                depth -= 1;
    +                parenthesis_found = true;
    +                if (depth != 0)
    +                    continue :outer;
    +            },
    +            else => if (depth > 0)
    +                continue :outer,
    +        }
    +
    +        const op: Operation = switch (expr_str[idx]) {
    +            '+' => .add,
    +            // needs context to determine if it's a negative or subtraction
    +            '-' => blk: {
    +                // it's negative if we have nothing to the left. If an operator
    +                // is found to the left we continue
    +                const is_negative = (i == 0) or is_negative: {
    +                    var j = i - 1;
    +                    while (j >= 0) : (j -= 1) {
    +                        const jdx = @intCast(u32, j);
    +                        switch (expr_str[jdx]) {
    +                            ' ', '\t' => continue,
    +                            '+', '-', '*', '/' => continue :outer,
    +                            else => break :is_negative false,
    +                        }
    +                    }
    +
    +                    break :is_negative true;
    +                };
    +
    +                if (is_negative) {
    +                    try ops.append(.{
    +                        .op = .negative,
    +                        .index = expr_index + idx,
    +                    });
    +                    try recursive_tokenize(call_depth + 1, ops, values, expr_str[idx + 1 ..], expr_index + idx + 1, diags);
    +                    return;
    +                }
    +
    +                break :blk .sub;
    +            },
    +            '*' => .mul,
    +            '/' => .div,
    +            ':' => {
    +                const is_bit_reverse = (i != 0) and expr_str[idx - 1] == ':';
    +                if (is_bit_reverse) {
    +                    try ops.append(.{
    +                        .op = .bit_reverse,
    +                        .index = expr_index + idx - 1,
    +                    });
    +                    try recursive_tokenize(call_depth + 1, ops, values, expr_str[idx + 1 ..], expr_index + idx + 1, diags);
    +                    i -= 1;
    +                    return;
    +                }
    +
    +                return error.InvalidBitReverse;
    +            },
    +            else => continue,
    +        };
    +
    +        try ops.append(.{
    +            .op = op,
    +            .index = expr_index + idx,
    +        });
    +        try recursive_tokenize(call_depth + 1, ops, values, expr_str[idx + 1 ..], expr_index + idx + 1, diags);
    +        try recursive_tokenize(call_depth + 1, ops, values, expr_str[0..idx], expr_index, diags);
    +        return;
    +    } else if (parenthesis_found) {
    +        try recursive_tokenize(call_depth + 1, ops, values, expr_str, expr_index, diags);
    +    } else {
    +        // if we hit this path, then the full string has been scanned, and no operators
    +        const trimmed = std.mem.trim(u8, expr_str, " \t");
    +        const value_index = expr_index + @intCast(u32, std.mem.indexOf(u8, expr_str, trimmed).?);
    +        try ops.append(.{
    +            .op = .value,
    +            .index = value_index,
    +        });
    +
    +        try values.append(.{
    +            .str = trimmed,
    +            .index = value_index,
    +        });
    +    }
    +
    +    if (depth != 0) {
    +        diags.* = Diagnostics.init(expr_index + @intCast(u32, i), "mismatched parenthesis", .{});
    +        return error.MismatchedParenthesis;
    +    }
    +}
    +
    +const EvaluatedValue = struct {
    +    num: i128,
    +    index: u32,
    +
    +    pub fn format(
    +        eval_value: EvaluatedValue,
    +        comptime fmt: []const u8,
    +        options: std.fmt.FormatOptions,
    +        writer: anytype,
    +    ) !void {
    +        _ = fmt;
    +        _ = options;
    +        try writer.print("{}", .{eval_value.num});
    +    }
    +};
    +
    +pub fn evaluate(
    +    self: Expression,
    +    define_lists: []const []const DefineWithIndex,
    +    diags: *?Diagnostics,
    +) !i128 {
    +    var values = std.BoundedArray(EvaluatedValue, 32).init(0) catch unreachable;
    +    // parse/extract values into numbers
    +    for (self.values.slice()) |entry| {
    +        const value: EvaluatedValue = if (std.fmt.parseInt(i128, entry.str, 0)) |num| .{
    +            .num = num,
    +            .index = entry.index,
    +        } else |_| blk: {
    +            // if it fails, try looking up the strings in definitions
    +            for (define_lists) |define_list|
    +                for (define_list) |define|
    +                    if (std.mem.eql(u8, define.name, entry.str))
    +                        break :blk .{
    +                            .num = define.value,
    +                            .index = define.index,
    +                        };
    +
    +            diags.* = Diagnostics.init(entry.index, "value doesn't parse as an integer, or define not found", .{});
    +            return error.UnresolvedValue;
    +        };
    +
    +        try values.append(value);
    +    }
    +
    +    return if (self.ops.len == 1) blk: {
    +        assert(self.values.len == 1);
    +        assert(self.ops.get(0).op == .value);
    +
    +        break :blk values.get(0).num;
    +    } else blk: {
    +        const result = try recursive_evaluate(0, self.ops.slice(), values.slice(), diags);
    +        assert(result.consumed.ops == self.ops.len);
    +        assert(result.consumed.values == self.values.len);
    +        break :blk result.value;
    +    };
    +}
    +
    +const RecursiveEvalResult = struct {
    +    value: i128,
    +    consumed: struct {
    +        ops: u32,
    +        values: u32,
    +    },
    +    index: u32,
    +};
    +
    +fn recursive_evaluate(
    +    call_depth: u32,
    +    owis: []const OperationWithIndex,
    +    values: []const EvaluatedValue,
    +    diags: *?Diagnostics,
    +) !RecursiveEvalResult {
    +    assert(call_depth < call_depth_max);
    +    assert(owis.len != 0);
    +    assert(values.len != 0);
    +
    +    return switch (owis[0].op) {
    +        .value => .{
    +            .value = values[0].num,
    +            .index = values[0].index,
    +            .consumed = .{
    +                .ops = 1,
    +                .values = 1,
    +            },
    +        },
    +        .negative => .{
    +            .value = -values[0].num,
    +            .index = values[0].index,
    +            .consumed = .{
    +                .ops = 2,
    +                .values = 1,
    +            },
    +        },
    +        .bit_reverse => blk: {
    +            if (values[0].num >= std.math.maxInt(u32) or
    +                values[0].num < std.math.minInt(i32))
    +            {
    +                diags.* = Diagnostics.init(owis[0].index, "Evaluated value does not fit in 32-bits: 0x{x}", .{values[0].num});
    +                return error.EvaluatedValueDoesntFit;
    +            }
    +
    +            break :blk .{
    +                .value = @bitCast(i128, @bitReverse(@bitCast(u128, values[0].num)) >> (128 - 32)),
    +                .index = values[0].index,
    +                .consumed = .{
    +                    .ops = 2,
    +                    .values = 1,
    +                },
    +            };
    +        },
    +        .add, .sub, .mul, .div => blk: {
    +            const rhs = try recursive_evaluate(call_depth + 1, owis[1..], values, diags);
    +            const lhs = try recursive_evaluate(call_depth + 1, owis[1 + rhs.consumed.ops ..], values[rhs.consumed.values..], diags);
    +            break :blk .{
    +                .consumed = .{
    +                    .ops = 1 + lhs.consumed.ops + rhs.consumed.ops,
    +                    .values = lhs.consumed.values + rhs.consumed.values,
    +                },
    +                .index = lhs.index,
    +                .value = switch (owis[0].op) {
    +                    .add => lhs.value + rhs.value,
    +                    .sub => lhs.value - rhs.value,
    +                    .mul => lhs.value * rhs.value,
    +                    .div => div: {
    +                        if (rhs.value == 0) {
    +                            diags.* = Diagnostics.init(owis[0].index, "divide by zero (denominator evaluates to zero)", .{});
    +                            return error.DivideByZero;
    +                        }
    +
    +                        // TODO: other requirement for @divExact
    +                        break :div @divExact(lhs.value, rhs.value);
    +                    },
    +                    else => unreachable,
    +                },
    +            };
    +        },
    +    };
    +}
    +
    +const expect = std.testing.expect;
    +const expectEqual = std.testing.expectEqual;
    +const expectEqualStrings = std.testing.expectEqualStrings;
    +
    +fn expect_equal_slices_of_values(
    +    expected: []const Value,
    +    actual: []const Value,
    +) !void {
    +    for (expected, actual) |e, a| {
    +        try expectEqualStrings(e.str, a.str);
    +        try expectEqual(e.index, a.index);
    +    }
    +}
    +
    +fn expect_equal_slices_of_ops(
    +    expected: []const OperationWithIndex,
    +    actual: []const OperationWithIndex,
    +) !void {
    +    for (expected, actual) |e, a| {
    +        try expectEqual(e.op, a.op);
    +        try expectEqual(e.index, a.index);
    +    }
    +}
    +
    +test "expr.tokenize.integer" {
    +    var diags: ?Diagnostics = null;
    +    const expr = try tokenize("1", 0, &diags);
    +
    +    try expect_equal_slices_of_ops(&.{
    +        .{ .index = 0, .op = .value },
    +    }, expr.ops.slice());
    +
    +    try expect_equal_slices_of_values(&.{
    +        .{ .index = 0, .str = "1" },
    +    }, expr.values.slice());
    +}
    +
    +test "expr.tokenize.integer.parenthesis" {
    +    var diags: ?Diagnostics = null;
    +    const expr = try tokenize("(1)", 0, &diags);
    +
    +    try expect_equal_slices_of_ops(&.{
    +        .{ .index = 1, .op = .value },
    +    }, expr.ops.slice());
    +
    +    try expect_equal_slices_of_values(&.{
    +        .{ .index = 1, .str = "1" },
    +    }, expr.values.slice());
    +}
    +
    +test "expr.tokenize.integer.double parenthesis" {
    +    var diags: ?Diagnostics = null;
    +    const expr = try tokenize("((1))", 0, &diags);
    +
    +    try expect_equal_slices_of_ops(&.{
    +        .{ .index = 2, .op = .value },
    +    }, expr.ops.slice());
    +
    +    try expect_equal_slices_of_values(&.{
    +        .{ .index = 2, .str = "1" },
    +    }, expr.values.slice());
    +}
    +
    +test "expr.tokenize.symbol" {
    +    var diags: ?Diagnostics = null;
    +    const expr = try tokenize("BAR", 0, &diags);
    +
    +    try expect_equal_slices_of_ops(&.{
    +        .{ .index = 0, .op = .value },
    +    }, expr.ops.slice());
    +
    +    try expect_equal_slices_of_values(&.{
    +        .{ .index = 0, .str = "BAR" },
    +    }, expr.values.slice());
    +}
    +
    +test "expr.tokenize.add" {
    +    var diags: ?Diagnostics = null;
    +    const expr = try tokenize("1 + 2", 0, &diags);
    +
    +    try expect_equal_slices_of_ops(&.{
    +        .{ .index = 2, .op = .add },
    +        .{ .index = 4, .op = .value },
    +        .{ .index = 0, .op = .value },
    +    }, expr.ops.slice());
    +
    +    try expect_equal_slices_of_values(&.{
    +        .{ .index = 4, .str = "2" },
    +        .{ .index = 0, .str = "1" },
    +    }, expr.values.slice());
    +}
    +
    +test "expr.tokenize.add.chain" {
    +    var diags: ?Diagnostics = null;
    +    const expr = try tokenize("1 + 2 + 3", 0, &diags);
    +
    +    try expect_equal_slices_of_ops(&.{
    +        .{ .index = 6, .op = .add },
    +        .{ .index = 8, .op = .value },
    +        .{ .index = 2, .op = .add },
    +        .{ .index = 4, .op = .value },
    +        .{ .index = 0, .op = .value },
    +    }, expr.ops.slice());
    +
    +    try expect_equal_slices_of_values(&.{
    +        .{ .index = 8, .str = "3" },
    +        .{ .index = 4, .str = "2" },
    +        .{ .index = 0, .str = "1" },
    +    }, expr.values.slice());
    +}
    +
    +test "expr.tokenize.sub" {
    +    var diags: ?Diagnostics = null;
    +    const expr = try tokenize("1 - 2", 0, &diags);
    +
    +    try expect_equal_slices_of_ops(&.{
    +        .{ .index = 2, .op = .sub },
    +        .{ .index = 4, .op = .value },
    +        .{ .index = 0, .op = .value },
    +    }, expr.ops.slice());
    +
    +    try expect_equal_slices_of_values(&.{
    +        .{ .index = 4, .str = "2" },
    +        .{ .index = 0, .str = "1" },
    +    }, expr.values.slice());
    +}
    +
    +test "expr.tokenize.sub.nospace" {
    +    var diags: ?Diagnostics = null;
    +    const expr = try tokenize("1-2", 0, &diags);
    +
    +    try expect_equal_slices_of_ops(&.{
    +        .{ .index = 1, .op = .sub },
    +        .{ .index = 2, .op = .value },
    +        .{ .index = 0, .op = .value },
    +    }, expr.ops.slice());
    +
    +    try expect_equal_slices_of_values(&.{
    +        .{ .index = 2, .str = "2" },
    +        .{ .index = 0, .str = "1" },
    +    }, expr.values.slice());
    +}
    +
    +test "expr.tokenize.sub.negative" {
    +    var diags: ?Diagnostics = null;
    +    const expr = try tokenize("1 - -2", 0, &diags);
    +
    +    try expect_equal_slices_of_ops(&.{
    +        .{ .index = 2, .op = .sub },
    +        .{ .index = 4, .op = .negative },
    +        .{ .index = 5, .op = .value },
    +        .{ .index = 0, .op = .value },
    +    }, expr.ops.slice());
    +
    +    try expect_equal_slices_of_values(&.{
    +        .{ .index = 5, .str = "2" },
    +        .{ .index = 0, .str = "1" },
    +    }, expr.values.slice());
    +}
    +
    +test "expr.tokenize.mul" {
    +    var diags: ?Diagnostics = null;
    +    const expr = try tokenize("1 * 2", 0, &diags);
    +
    +    try expect_equal_slices_of_ops(&.{
    +        .{ .index = 2, .op = .mul },
    +        .{ .index = 4, .op = .value },
    +        .{ .index = 0, .op = .value },
    +    }, expr.ops.slice());
    +
    +    try expect_equal_slices_of_values(&.{
    +        .{ .index = 4, .str = "2" },
    +        .{ .index = 0, .str = "1" },
    +    }, expr.values.slice());
    +}
    +
    +test "expr.tokenize.div" {
    +    var diags: ?Diagnostics = null;
    +    const expr = try tokenize("1 / 2", 0, &diags);
    +
    +    try expect_equal_slices_of_ops(&.{
    +        .{ .index = 2, .op = .div },
    +        .{ .index = 4, .op = .value },
    +        .{ .index = 0, .op = .value },
    +    }, expr.ops.slice());
    +
    +    try expect_equal_slices_of_values(&.{
    +        .{ .index = 4, .str = "2" },
    +        .{ .index = 0, .str = "1" },
    +    }, expr.values.slice());
    +}
    +
    +test "expr.tokenize.negative" {
    +    var diags: ?Diagnostics = null;
    +    const expr = try tokenize("-1", 0, &diags);
    +
    +    try expect_equal_slices_of_ops(&.{
    +        .{ .index = 0, .op = .negative },
    +        .{ .index = 1, .op = .value },
    +    }, expr.ops.slice());
    +
    +    try expect_equal_slices_of_values(&.{
    +        .{ .index = 1, .str = "1" },
    +    }, expr.values.slice());
    +}
    +
    +test "expr.tokenize.bit reverse" {
    +    var diags: ?Diagnostics = null;
    +    const expr = try tokenize("::1", 0, &diags);
    +
    +    try expect_equal_slices_of_ops(&.{
    +        .{ .index = 0, .op = .bit_reverse },
    +        .{ .index = 2, .op = .value },
    +    }, expr.ops.slice());
    +
    +    try expect_equal_slices_of_values(&.{
    +        .{ .index = 2, .str = "1" },
    +    }, expr.values.slice());
    +}
    +
    +test "expr.tokenzie.parenthesis" {
    +    var diags: ?Diagnostics = null;
    +    const expr = try tokenize("1 * (::2 + (12 / 3)) - 5", 0, &diags);
    +
    +    try expect_equal_slices_of_ops(&.{
    +        .{ .index = 21, .op = .sub },
    +        .{ .index = 23, .op = .value },
    +        .{ .index = 2, .op = .mul },
    +        .{ .index = 9, .op = .add },
    +        .{ .index = 15, .op = .div },
    +        .{ .index = 17, .op = .value },
    +        .{ .index = 12, .op = .value },
    +        .{ .index = 5, .op = .bit_reverse },
    +        .{ .index = 7, .op = .value },
    +        .{ .index = 0, .op = .value },
    +    }, expr.ops.slice());
    +
    +    try expect_equal_slices_of_values(&.{
    +        .{ .index = 23, .str = "5" },
    +        .{ .index = 17, .str = "3" },
    +        .{ .index = 12, .str = "12" },
    +        .{ .index = 7, .str = "2" },
    +        .{ .index = 0, .str = "1" },
    +    }, expr.values.slice());
    +}
    +
    +fn evaluate_test(expected: i128, str: []const u8, define_list: []const DefineWithIndex) !void {
    +    var diags: ?Diagnostics = null;
    +    const expr = tokenize(str, 0, &diags) catch |err| {
    +        if (diags) |d|
    +            std.log.err("{}: {s}", .{ err, d.message.slice() });
    +
    +        return err;
    +    };
    +
    +    const actual = expr.evaluate(&.{define_list}, &diags) catch |err| {
    +        if (diags) |d|
    +            std.log.err("{}: {s}", .{ err, d.message.slice() })
    +        else
    +            std.log.err("{}", .{err});
    +
    +        return err;
    +    };
    +
    +    try expectEqual(expected, actual);
    +}
    +
    +test "expr.evaluate.integer" {
    +    try evaluate_test(1, "1", &.{});
    +}
    +
    +test "expr.evaluate.symbol" {
    +    try evaluate_test(5, "BAR", &.{
    +        .{
    +            .name = "BAR",
    +            .value = 5,
    +            .index = 0,
    +        },
    +    });
    +}
    +
    +test "expr.evaluate.add" {
    +    try evaluate_test(3, "1 + 2", &.{});
    +    try evaluate_test(6, "1 + 2 + 3", &.{});
    +}
    +
    +test "expr.evaluate.sub" {
    +    try evaluate_test(1, "2 - 1", &.{});
    +    try evaluate_test(1, "(NUM_CYCLES - 1)", &.{
    +        .{
    +            .name = "NUM_CYCLES",
    +            .value = 2,
    +            .index = 1,
    +        },
    +    });
    +}
    +
    +test "expr.evaluate.mul" {
    +    try evaluate_test(9, "3 * 3", &.{});
    +}
    +
    +test "expr.evaluate.div" {
    +    try evaluate_test(3, "9 / 3", &.{});
    +    try evaluate_test(3, "9 / 3", &.{});
    +}
    +
    +test "expr.evaluate.negative" {
    +    try evaluate_test(-3, "-3", &.{});
    +}
    +
    +test "expr.evaluate.bit reverse" {
    +    try evaluate_test(0x80000000, "::1", &.{});
    +}
    +
    +test "expr.evaluate.parenthesis" {
    +    try evaluate_test(15, "5 * (1 + 2)", &.{});
    +    try evaluate_test(1 * (@bitReverse(@as(u32, 2)) + (12 / 3)) - 5, "1 * (::2 + (12 / 3)) - 5", &.{});
    +}
    diff --git a/src/hal/pio/assembler/comparison_tests.zig b/src/hal/pio/assembler/comparison_tests.zig
    new file mode 100644
    index 000000000..4a3946575
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests.zig
    @@ -0,0 +1,168 @@
    +const std = @import("std");
    +const assembler = @import("../assembler.zig");
    +const tokenizer = @import("tokenizer.zig");
    +const c = @cImport({
    +    @cDefine("PICO_NO_HARDWARE", "1");
    +    @cInclude("stdint.h");
    +    @cInclude("comparison_tests/addition.pio.h");
    +    @cInclude("comparison_tests/apa102.pio.h");
    +    @cInclude("comparison_tests/blink.pio.h");
    +    @cInclude("comparison_tests/clocked_input.pio.h");
    +    @cInclude("comparison_tests/differential_manchester.pio.h");
    +    @cInclude("comparison_tests/hello.pio.h");
    +    @cInclude("comparison_tests/hub75.pio.h");
    +    @cInclude("comparison_tests/i2c.pio.h");
    +    @cInclude("comparison_tests/manchester_encoding.pio.h");
    +    @cInclude("comparison_tests/nec_carrier_burst.pio.h");
    +    @cInclude("comparison_tests/nec_carrier_control.pio.h");
    +    @cInclude("comparison_tests/nec_receive.pio.h");
    +    @cInclude("comparison_tests/pio_serialiser.pio.h");
    +    @cInclude("comparison_tests/pwm.pio.h");
    +    @cInclude("comparison_tests/quadrature_encoder.pio.h");
    +    @cInclude("comparison_tests/resistor_dac.pio.h");
    +    @cInclude("comparison_tests/spi.pio.h");
    +    @cInclude("comparison_tests/squarewave.pio.h");
    +    @cInclude("comparison_tests/squarewave_fast.pio.h");
    +    @cInclude("comparison_tests/squarewave_wrap.pio.h");
    +    @cInclude("comparison_tests/st7789_lcd.pio.h");
    +    @cInclude("comparison_tests/uart_rx.pio.h");
    +    @cInclude("comparison_tests/uart_tx.pio.h");
    +    @cInclude("comparison_tests/ws2812.pio.h");
    +});
    +
    +fn pio_comparison(comptime source: []const u8) !void {
    +    const output = comptime assembler.assemble(source, .{}) catch unreachable;
    +    try std.testing.expect(output.programs.len > 0);
    +
    +    inline for (output.programs) |program| {
    +        const expected_insns = @field(c, program.name ++ "_program_instructions");
    +        for (program.instructions, expected_insns) |actual, expected| {
    +            std.log.debug("expected: 0x{x}", .{expected});
    +            std.log.debug("  actual: 0x{x}", .{actual});
    +            std.log.debug("", .{});
    +        }
    +
    +        for (program.instructions, expected_insns) |actual, expected|
    +            try std.testing.expectEqual(expected, actual);
    +    }
    +}
    +
    +test "pio.comparison.addition" {
    +    @setEvalBranchQuota(4000);
    +    try pio_comparison(@embedFile("comparison_tests/addition.pio"));
    +}
    +
    +test "pio.comparison.apa102" {
    +    @setEvalBranchQuota(10000);
    +    try pio_comparison(@embedFile("comparison_tests/apa102.pio"));
    +}
    +
    +test "pio.comparison.blink" {
    +    @setEvalBranchQuota(4000);
    +    try pio_comparison(@embedFile("comparison_tests/blink.pio"));
    +}
    +
    +test "pio.comparison.clocked_input" {
    +    @setEvalBranchQuota(5000);
    +    try pio_comparison(@embedFile("comparison_tests/clocked_input.pio"));
    +}
    +
    +test "pio.comparison.differential_manchester" {
    +    @setEvalBranchQuota(14000);
    +    try pio_comparison(@embedFile("comparison_tests/differential_manchester.pio"));
    +}
    +
    +test "pio.comparison.hello" {
    +    @setEvalBranchQuota(3000);
    +    try pio_comparison(@embedFile("comparison_tests/hello.pio"));
    +}
    +
    +test "pio.comparison.hub75" {
    +    @setEvalBranchQuota(17000);
    +    try pio_comparison(@embedFile("comparison_tests/hub75.pio"));
    +}
    +
    +test "pio.comparison.i2c" {
    +    @setEvalBranchQuota(17000);
    +    try pio_comparison(@embedFile("comparison_tests/i2c.pio"));
    +}
    +
    +test "pio.comparison.manchester_encoding" {
    +    @setEvalBranchQuota(11000);
    +    try pio_comparison(@embedFile("comparison_tests/manchester_encoding.pio"));
    +}
    +
    +test "pio.comparison.nec_carrier_burst" {
    +    @setEvalBranchQuota(6000);
    +    try pio_comparison(@embedFile("comparison_tests/nec_carrier_burst.pio"));
    +}
    +
    +test "pio.comparison.nec_carrier_control" {
    +    @setEvalBranchQuota(9000);
    +    try pio_comparison(@embedFile("comparison_tests/nec_carrier_control.pio"));
    +}
    +
    +test "pio.comparison.nec_receive" {
    +    @setEvalBranchQuota(11000);
    +    try pio_comparison(@embedFile("comparison_tests/nec_receive.pio"));
    +}
    +
    +test "pio.comparison.pio_serialiser" {
    +    @setEvalBranchQuota(3000);
    +    try pio_comparison(@embedFile("comparison_tests/pio_serialiser.pio"));
    +}
    +
    +test "pio.comparison.pwm" {
    +    @setEvalBranchQuota(4000);
    +    try pio_comparison(@embedFile("comparison_tests/pwm.pio"));
    +}
    +
    +test "pio.comparison.quadrature_encoder" {
    +    @setEvalBranchQuota(17000);
    +    try pio_comparison(@embedFile("comparison_tests/quadrature_encoder.pio"));
    +}
    +
    +test "pio.comparison.resistor_dac" {
    +    @setEvalBranchQuota(3000);
    +    try pio_comparison(@embedFile("comparison_tests/resistor_dac.pio"));
    +}
    +
    +test "pio.comparison.spi" {
    +    @setEvalBranchQuota(22000);
    +    try pio_comparison(@embedFile("comparison_tests/spi.pio"));
    +}
    +
    +test "pio.comparison.squarewave" {
    +    @setEvalBranchQuota(2000);
    +    try pio_comparison(@embedFile("comparison_tests/squarewave.pio"));
    +}
    +
    +test "pio.comparison.squarewave_fast" {
    +    @setEvalBranchQuota(2000);
    +    try pio_comparison(@embedFile("comparison_tests/squarewave_fast.pio"));
    +}
    +
    +test "pio.comparison.squarewave_wrap" {
    +    @setEvalBranchQuota(3000);
    +    try pio_comparison(@embedFile("comparison_tests/squarewave_wrap.pio"));
    +}
    +
    +test "pio.comparison.st7789_lcd" {
    +    @setEvalBranchQuota(5000);
    +    try pio_comparison(@embedFile("comparison_tests/st7789_lcd.pio"));
    +}
    +
    +test "pio.comparison.uart_rx" {
    +    @setEvalBranchQuota(10000);
    +    try pio_comparison(@embedFile("comparison_tests/uart_rx.pio"));
    +}
    +
    +test "pio.comparison.uart_tx" {
    +    @setEvalBranchQuota(6000);
    +    try pio_comparison(@embedFile("comparison_tests/uart_tx.pio"));
    +}
    +
    +test "pio.comparison.ws2812" {
    +    @setEvalBranchQuota(10000);
    +    try pio_comparison(@embedFile("comparison_tests/ws2812.pio"));
    +}
    diff --git a/src/hal/pio/assembler/comparison_tests/README.adoc b/src/hal/pio/assembler/comparison_tests/README.adoc
    new file mode 100644
    index 000000000..872e125c6
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/README.adoc
    @@ -0,0 +1,4 @@
    += PIO example programs for testing
    +
    +These were all taken from https://github.com/raspberrypi/pico-examples[the official pico examples repo].
    +The headers are generated using `pioasm`.
    diff --git a/src/hal/pio/assembler/comparison_tests/addition.pio b/src/hal/pio/assembler/comparison_tests/addition.pio
    new file mode 100644
    index 000000000..8eddd0e7b
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/addition.pio
    @@ -0,0 +1,33 @@
    +;
    +; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    +;
    +; SPDX-License-Identifier: BSD-3-Clause
    +;
    +
    +.program addition
    +
    +; Pop two 32 bit integers from the TX FIFO, add them together, and push the
    +; result to the TX FIFO. Autopush/pull should be disabled as we're using
    +; explicit push and pull instructions.
    +;
    +; This program uses the two's complement identity x + y == ~(~x - y)
    +
    +	pull
    +	mov x, ~osr
    +	pull
    +	mov y, osr
    +	jmp test        ; this loop is equivalent to the following C code:
    +incr:               ; while (y--)
    +	jmp x-- test    ;     x--;
    +test:               ; This has the effect of subtracting y from x, eventually.
    +	jmp y-- incr
    +	mov isr, ~x
    +	push
    +
    +% c-sdk {
    +static inline void addition_program_init(PIO pio, uint sm, uint offset) {
    +	pio_sm_config c = addition_program_get_default_config(offset);
    +	pio_sm_init(pio, sm, offset, &c);
    +	pio_sm_set_enabled(pio, sm, true);
    +}
    +%}
    diff --git a/src/hal/pio/assembler/comparison_tests/addition.pio.h b/src/hal/pio/assembler/comparison_tests/addition.pio.h
    new file mode 100644
    index 000000000..7621c5809
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/addition.pio.h
    @@ -0,0 +1,52 @@
    +// -------------------------------------------------- //
    +// This file is autogenerated by pioasm; do not edit! //
    +// -------------------------------------------------- //
    +
    +#pragma once
    +
    +#if !PICO_NO_HARDWARE
    +#include "hardware/pio.h"
    +#endif
    +
    +// -------- //
    +// addition //
    +// -------- //
    +
    +#define addition_wrap_target 0
    +#define addition_wrap 8
    +
    +static const uint16_t addition_program_instructions[] = {
    +            //     .wrap_target
    +    0x80a0, //  0: pull   block                      
    +    0xa02f, //  1: mov    x, !osr                    
    +    0x80a0, //  2: pull   block                      
    +    0xa047, //  3: mov    y, osr                     
    +    0x0006, //  4: jmp    6                          
    +    0x0046, //  5: jmp    x--, 6                     
    +    0x0085, //  6: jmp    y--, 5                     
    +    0xa0c9, //  7: mov    isr, !x                    
    +    0x8020, //  8: push   block                      
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program addition_program = {
    +    .instructions = addition_program_instructions,
    +    .length = 9,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config addition_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + addition_wrap_target, offset + addition_wrap);
    +    return c;
    +}
    +
    +static inline void addition_program_init(PIO pio, uint sm, uint offset) {
    +	pio_sm_config c = addition_program_get_default_config(offset);
    +	pio_sm_init(pio, sm, offset, &c);
    +	pio_sm_set_enabled(pio, sm, true);
    +}
    +
    +#endif
    +
    diff --git a/src/hal/pio/assembler/comparison_tests/apa102.pio b/src/hal/pio/assembler/comparison_tests/apa102.pio
    new file mode 100644
    index 000000000..5d76f088a
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/apa102.pio
    @@ -0,0 +1,89 @@
    +;
    +; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    +;
    +; SPDX-License-Identifier: BSD-3-Clause
    +;
    +
    +.program apa102_mini
    +.side_set 1
    +
    +; This is really just a TX-only SPI. CLK is side-set pin 0, DIN is OUT pin 0.
    +; Autopull enabled, threshold 32.
    +;
    +; Every word (32 bits) written to the FIFO will be shifted out in its entirety, MSB-first.
    +
    +    out pins, 1   side 0   ; Stall here when no data (still asserts clock low)
    +    nop           side 1
    +
    +% c-sdk {
    +#include "hardware/clocks.h"
    +static inline void apa102_mini_program_init(PIO pio, uint sm, uint offset,
    +        uint baud, uint pin_clk, uint pin_din) {
    +    pio_sm_set_pins_with_mask(pio, sm, 0, (1u << pin_clk) | (1u << pin_din));
    +    pio_sm_set_pindirs_with_mask(pio, sm, ~0u, (1u << pin_clk) | (1u << pin_din));
    +    pio_gpio_init(pio, pin_clk);
    +    pio_gpio_init(pio, pin_din);
    +
    +    pio_sm_config c = apa102_mini_program_get_default_config(offset);
    +    sm_config_set_out_pins(&c, pin_din, 1);
    +    sm_config_set_sideset_pins(&c, pin_clk);
    +    // Shift to right, autopull with threshold 32
    +    sm_config_set_out_shift(&c, false, true, 32);
    +    // Deeper FIFO as we're not doing any RX
    +    sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);
    +    // We transmit 1 bit every 2 execution cycles
    +    float div = (float)clock_get_hz(clk_sys) / (2 * baud);
    +    sm_config_set_clkdiv(&c, div);
    +
    +    pio_sm_init(pio, sm, offset, &c);
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +%}
    +
    +.program apa102_rgb555
    +
    +; Alternative program to unpack two RGB555 pixels from a FIFO word and transmit.
    +; This makes it easier to DMA large buffers without processor involvement.
    +
    +; OSR: shift to right
    +; ISR: shift to right
    +
    +; To set brightness, set ISR to bit-reverse of 5-bit brightness,
    +; followed by 111. (00...00_b0b1b2b3b4_111)
    +
    +; DMA pixel format is 0RRRRRGGGGGBBBBB x2 (15 bpp, 2px per FIFO word)
    +
    +; APA102 command structure:
    +; increasing time ---->>
    +;             | byte 3 | byte 2 | byte 1 | byte 0 |
    +;             |7      0|7      0|7      0|7      0|
    +;             -------------------------------------
    +; Pixel       |111bbbbb|BBBBBBBB|GGGGGGGG|RRRRRRRR|
    +; Start Frame |00000000|00000000|00000000|00000000|
    +; Stop Frame  |11111111|11111111|11111111|11111111|
    +
    +.wrap_target
    +public pixel_out:
    +    ; pixel_out formats an APA102 colour command in the ISR.
    +    ; bit_run shifts 32 bits out of the ISR, with clock.
    +    pull ifempty
    +    set x, 2
    +colour_loop:
    +    in osr, 5
    +    out null, 5
    +    in null, 3
    +    jmp x-- colour_loop
    +    in y, 8
    +    mov isr, ::isr ; reverse for msb-first wire order
    +    out null, 1
    +public bit_run:
    +    ; in isr, n rotates ISR by n bits (right rotation only)
    +    ; Use this to perform out shifts from ISR, via mov pins
    +    set x, 31
    +bit_out:
    +    set pins, 0
    +    mov pins, isr [6]
    +    set pins, 1
    +    in isr, 1 [6]
    +    jmp x-- bit_out
    +.wrap
    diff --git a/src/hal/pio/assembler/comparison_tests/apa102.pio.h b/src/hal/pio/assembler/comparison_tests/apa102.pio.h
    new file mode 100644
    index 000000000..fd5a5200f
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/apa102.pio.h
    @@ -0,0 +1,105 @@
    +// -------------------------------------------------- //
    +// This file is autogenerated by pioasm; do not edit! //
    +// -------------------------------------------------- //
    +
    +#pragma once
    +
    +#if !PICO_NO_HARDWARE
    +#include "hardware/pio.h"
    +#endif
    +
    +// ----------- //
    +// apa102_mini //
    +// ----------- //
    +
    +#define apa102_mini_wrap_target 0
    +#define apa102_mini_wrap 1
    +
    +static const uint16_t apa102_mini_program_instructions[] = {
    +            //     .wrap_target
    +    0x6001, //  0: out    pins, 1         side 0     
    +    0xb042, //  1: nop                    side 1     
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program apa102_mini_program = {
    +    .instructions = apa102_mini_program_instructions,
    +    .length = 2,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config apa102_mini_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + apa102_mini_wrap_target, offset + apa102_mini_wrap);
    +    sm_config_set_sideset(&c, 1, false, false);
    +    return c;
    +}
    +
    +#include "hardware/clocks.h"
    +static inline void apa102_mini_program_init(PIO pio, uint sm, uint offset,
    +        uint baud, uint pin_clk, uint pin_din) {
    +    pio_sm_set_pins_with_mask(pio, sm, 0, (1u << pin_clk) | (1u << pin_din));
    +    pio_sm_set_pindirs_with_mask(pio, sm, ~0u, (1u << pin_clk) | (1u << pin_din));
    +    pio_gpio_init(pio, pin_clk);
    +    pio_gpio_init(pio, pin_din);
    +    pio_sm_config c = apa102_mini_program_get_default_config(offset);
    +    sm_config_set_out_pins(&c, pin_din, 1);
    +    sm_config_set_sideset_pins(&c, pin_clk);
    +    // Shift to right, autopull with threshold 32
    +    sm_config_set_out_shift(&c, false, true, 32);
    +    // Deeper FIFO as we're not doing any RX
    +    sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);
    +    // We transmit 1 bit every 2 execution cycles
    +    float div = (float)clock_get_hz(clk_sys) / (2 * baud);
    +    sm_config_set_clkdiv(&c, div);
    +    pio_sm_init(pio, sm, offset, &c);
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +
    +#endif
    +
    +// ------------- //
    +// apa102_rgb555 //
    +// ------------- //
    +
    +#define apa102_rgb555_wrap_target 0
    +#define apa102_rgb555_wrap 14
    +
    +#define apa102_rgb555_offset_pixel_out 0u
    +#define apa102_rgb555_offset_bit_run 9u
    +
    +static const uint16_t apa102_rgb555_program_instructions[] = {
    +            //     .wrap_target
    +    0x80e0, //  0: pull   ifempty block              
    +    0xe022, //  1: set    x, 2                       
    +    0x40e5, //  2: in     osr, 5                     
    +    0x6065, //  3: out    null, 5                    
    +    0x4063, //  4: in     null, 3                    
    +    0x0042, //  5: jmp    x--, 2                     
    +    0x4048, //  6: in     y, 8                       
    +    0xa0d6, //  7: mov    isr, ::isr                 
    +    0x6061, //  8: out    null, 1                    
    +    0xe03f, //  9: set    x, 31                      
    +    0xe000, // 10: set    pins, 0                    
    +    0xa606, // 11: mov    pins, isr              [6] 
    +    0xe001, // 12: set    pins, 1                    
    +    0x46c1, // 13: in     isr, 1                 [6] 
    +    0x004a, // 14: jmp    x--, 10                    
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program apa102_rgb555_program = {
    +    .instructions = apa102_rgb555_program_instructions,
    +    .length = 15,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config apa102_rgb555_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + apa102_rgb555_wrap_target, offset + apa102_rgb555_wrap);
    +    return c;
    +}
    +#endif
    +
    diff --git a/src/hal/pio/assembler/comparison_tests/blink.pio b/src/hal/pio/assembler/comparison_tests/blink.pio
    new file mode 100644
    index 000000000..ef3090022
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/blink.pio
    @@ -0,0 +1,34 @@
    +;
    +; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    +;
    +; SPDX-License-Identifier: BSD-3-Clause
    +;
    +
    +; SET pin 0 should be mapped to your LED GPIO
    +
    +.program blink
    +    pull block
    +    out y, 32
    +.wrap_target
    +    mov x, y
    +    set pins, 1   ; Turn LED on
    +lp1:
    +    jmp x-- lp1   ; Delay for (x + 1) cycles, x is a 32 bit number
    +    mov x, y
    +    set pins, 0   ; Turn LED off
    +lp2:
    +    jmp x-- lp2   ; Delay for the same number of cycles again
    +.wrap             ; Blink forever!
    +
    +
    +% c-sdk {
    +// this is a raw helper function for use by the user which sets up the GPIO output, and configures the SM to output on a particular pin
    +
    +void blink_program_init(PIO pio, uint sm, uint offset, uint pin) {
    +   pio_gpio_init(pio, pin);
    +   pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, true);
    +   pio_sm_config c = blink_program_get_default_config(offset);
    +   sm_config_set_set_pins(&c, pin, 1);
    +   pio_sm_init(pio, sm, offset, &c);
    +}
    +%}
    diff --git a/src/hal/pio/assembler/comparison_tests/blink.pio.h b/src/hal/pio/assembler/comparison_tests/blink.pio.h
    new file mode 100644
    index 000000000..e466a2843
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/blink.pio.h
    @@ -0,0 +1,54 @@
    +// -------------------------------------------------- //
    +// This file is autogenerated by pioasm; do not edit! //
    +// -------------------------------------------------- //
    +
    +#pragma once
    +
    +#if !PICO_NO_HARDWARE
    +#include "hardware/pio.h"
    +#endif
    +
    +// ----- //
    +// blink //
    +// ----- //
    +
    +#define blink_wrap_target 2
    +#define blink_wrap 7
    +
    +static const uint16_t blink_program_instructions[] = {
    +    0x80a0, //  0: pull   block                      
    +    0x6040, //  1: out    y, 32                      
    +            //     .wrap_target
    +    0xa022, //  2: mov    x, y                       
    +    0xe001, //  3: set    pins, 1                    
    +    0x0044, //  4: jmp    x--, 4                     
    +    0xa022, //  5: mov    x, y                       
    +    0xe000, //  6: set    pins, 0                    
    +    0x0047, //  7: jmp    x--, 7                     
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program blink_program = {
    +    .instructions = blink_program_instructions,
    +    .length = 8,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config blink_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + blink_wrap_target, offset + blink_wrap);
    +    return c;
    +}
    +
    +// this is a raw helper function for use by the user which sets up the GPIO output, and configures the SM to output on a particular pin
    +void blink_program_init(PIO pio, uint sm, uint offset, uint pin) {
    +   pio_gpio_init(pio, pin);
    +   pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, true);
    +   pio_sm_config c = blink_program_get_default_config(offset);
    +   sm_config_set_set_pins(&c, pin, 1);
    +   pio_sm_init(pio, sm, offset, &c);
    +}
    +
    +#endif
    +
    diff --git a/src/hal/pio/assembler/comparison_tests/clocked_input.pio b/src/hal/pio/assembler/comparison_tests/clocked_input.pio
    new file mode 100644
    index 000000000..51fa54ca3
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/clocked_input.pio
    @@ -0,0 +1,51 @@
    +;
    +; Copyright (c) 2021 Raspberry Pi (Trading) Ltd.
    +;
    +; SPDX-License-Identifier: BSD-3-Clause
    +;
    +
    +.program clocked_input
    +
    +; Sample bits using an external clock, and push groups of bits into the RX FIFO.
    +; - IN pin 0 is the data pin
    +; - IN pin 1 is the clock pin
    +; - Autopush is enabled, threshold 8
    +;
    +; This program samples data with each rising clock edge (like mode 0 or mode 3
    +; SPI). The data is actually sampled one system clock cycle after the rising
    +; edge is observed, so a clock ratio of at least input_clk < clk_sys / 6 is
    +; recommended for good sampling alignment.
    +
    +    wait 0 pin 1
    +    wait 1 pin 1
    +    in pins, 1
    +
    +% c-sdk {
    +static inline void clocked_input_program_init(PIO pio, uint sm, uint offset, uint pin) {
    +    pio_sm_config c = clocked_input_program_get_default_config(offset);
    +
    +    // Set the IN base pin to the provided `pin` parameter. This is the data
    +    // pin, and the next-numbered GPIO is used as the clock pin.
    +    sm_config_set_in_pins(&c, pin);
    +    // Set the pin directions to input at the PIO
    +    pio_sm_set_consecutive_pindirs(pio, sm, pin, 2, false);
    +    // Connect these GPIOs to this PIO block
    +    pio_gpio_init(pio, pin);
    +    pio_gpio_init(pio, pin + 1);
    +
    +    // Shifting to left matches the customary MSB-first ordering of SPI.
    +    sm_config_set_in_shift(
    +        &c,
    +        false, // Shift-to-right = false (i.e. shift to left)
    +        true,  // Autopush enabled
    +        8      // Autopush threshold = 8
    +    );
    +
    +    // We only receive, so disable the TX FIFO to make the RX FIFO deeper.
    +    sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_RX);
    +
    +    // Load our configuration, and start the program from the beginning
    +    pio_sm_init(pio, sm, offset, &c);
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +%}
    diff --git a/src/hal/pio/assembler/comparison_tests/clocked_input.pio.h b/src/hal/pio/assembler/comparison_tests/clocked_input.pio.h
    new file mode 100644
    index 000000000..277b939cb
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/clocked_input.pio.h
    @@ -0,0 +1,64 @@
    +// -------------------------------------------------- //
    +// This file is autogenerated by pioasm; do not edit! //
    +// -------------------------------------------------- //
    +
    +#pragma once
    +
    +#if !PICO_NO_HARDWARE
    +#include "hardware/pio.h"
    +#endif
    +
    +// ------------- //
    +// clocked_input //
    +// ------------- //
    +
    +#define clocked_input_wrap_target 0
    +#define clocked_input_wrap 2
    +
    +static const uint16_t clocked_input_program_instructions[] = {
    +            //     .wrap_target
    +    0x2021, //  0: wait   0 pin, 1                   
    +    0x20a1, //  1: wait   1 pin, 1                   
    +    0x4001, //  2: in     pins, 1                    
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program clocked_input_program = {
    +    .instructions = clocked_input_program_instructions,
    +    .length = 3,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config clocked_input_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + clocked_input_wrap_target, offset + clocked_input_wrap);
    +    return c;
    +}
    +
    +static inline void clocked_input_program_init(PIO pio, uint sm, uint offset, uint pin) {
    +    pio_sm_config c = clocked_input_program_get_default_config(offset);
    +    // Set the IN base pin to the provided `pin` parameter. This is the data
    +    // pin, and the next-numbered GPIO is used as the clock pin.
    +    sm_config_set_in_pins(&c, pin);
    +    // Set the pin directions to input at the PIO
    +    pio_sm_set_consecutive_pindirs(pio, sm, pin, 2, false);
    +    // Connect these GPIOs to this PIO block
    +    pio_gpio_init(pio, pin);
    +    pio_gpio_init(pio, pin + 1);
    +    // Shifting to left matches the customary MSB-first ordering of SPI.
    +    sm_config_set_in_shift(
    +        &c,
    +        false, // Shift-to-right = false (i.e. shift to left)
    +        true,  // Autopush enabled
    +        8      // Autopush threshold = 8
    +    );
    +    // We only receive, so disable the TX FIFO to make the RX FIFO deeper.
    +    sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_RX);
    +    // Load our configuration, and start the program from the beginning
    +    pio_sm_init(pio, sm, offset, &c);
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +
    +#endif
    +
    diff --git a/src/hal/pio/assembler/comparison_tests/differential_manchester.pio b/src/hal/pio/assembler/comparison_tests/differential_manchester.pio
    new file mode 100644
    index 000000000..a9e825dac
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/differential_manchester.pio
    @@ -0,0 +1,104 @@
    +;
    +; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    +;
    +; SPDX-License-Identifier: BSD-3-Clause
    +;
    +
    +.program differential_manchester_tx
    +.side_set 1 opt
    +
    +; Transmit one bit every 16 cycles. In each bit period:
    +; - A '0' is encoded as a transition at the start of the bit period
    +; - A '1' is encoded as a transition at the start *and* in the middle
    +;
    +; Side-set bit 0 must be mapped to the data output pin.
    +; Autopull must be enabled.
    +
    +public start:
    +initial_high:
    +    out x, 1                     ; Start of bit period: always assert transition
    +    jmp !x high_0     side 1 [6] ; Test the data bit we just shifted out of OSR
    +high_1:
    +    nop
    +    jmp initial_high  side 0 [6] ; For `1` bits, also transition in the middle
    +high_0:
    +    jmp initial_low          [7] ; Otherwise, the line is stable in the middle
    +
    +initial_low:
    +    out x, 1                     ; Always shift 1 bit from OSR to X so we can
    +    jmp !x low_0      side 0 [6] ; branch on it. Autopull refills OSR for us.
    +low_1:
    +    nop
    +    jmp initial_low   side 1 [6] ; If there are two transitions, return to
    +low_0:
    +    jmp initial_high         [7] ; the initial line state is flipped!
    +
    +% c-sdk {
    +static inline void differential_manchester_tx_program_init(PIO pio, uint sm, uint offset, uint pin, float div) {
    +    pio_sm_set_pins_with_mask(pio, sm, 0, 1u << pin);
    +    pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, true);
    +    pio_gpio_init(pio, pin);
    +
    +    pio_sm_config c = differential_manchester_tx_program_get_default_config(offset);
    +    sm_config_set_sideset_pins(&c, pin);
    +    sm_config_set_out_shift(&c, true, true, 32);
    +    sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);
    +    sm_config_set_clkdiv(&c, div);
    +    pio_sm_init(pio, sm, offset + differential_manchester_tx_offset_start, &c);
    +
    +    // Execute a blocking pull so that we maintain the initial line state until data is available
    +    pio_sm_exec(pio, sm, pio_encode_pull(false, true));
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +%}
    +.program differential_manchester_rx
    +
    +; Assumes line is idle low
    +; One bit is 16 cycles. In each bit period:
    +; - A '0' is encoded as a transition at time 0
    +; - A '1' is encoded as a transition at time 0 and a transition at time T/2
    +;
    +; The IN mapping and the JMP pin select must both be mapped to the GPIO used for
    +; RX data. Autopush must be enabled.
    +
    +public start:
    +initial_high:           ; Find rising edge at start of bit period
    +    wait 1 pin, 0  [11] ; Delay to eye of second half-period (i.e 3/4 of way
    +    jmp pin high_0      ; through bit) and branch on RX pin high/low.
    +high_1:
    +    in x, 1             ; Second transition detected (a `1` data symbol)
    +    jmp initial_high
    +high_0:
    +    in y, 1 [1]         ; Line still high, no centre transition (data is `0`)
    +    ; Fall-through
    +
    +.wrap_target
    +initial_low:            ; Find falling edge at start of bit period
    +    wait 0 pin, 0 [11]  ; Delay to eye of second half-period
    +    jmp pin low_1
    +low_0:
    +    in y, 1             ; Line still low, no centre transition (data is `0`)
    +    jmp initial_high
    +low_1:                  ; Second transition detected (data is `1`)
    +    in x, 1 [1]
    +.wrap
    +
    +% c-sdk {
    +static inline void differential_manchester_rx_program_init(PIO pio, uint sm, uint offset, uint pin, float div) {
    +    pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, false);
    +    pio_gpio_init(pio, pin);
    +
    +    pio_sm_config c = differential_manchester_rx_program_get_default_config(offset);
    +    sm_config_set_in_pins(&c, pin); // for WAIT
    +    sm_config_set_jmp_pin(&c, pin); // for JMP
    +    sm_config_set_in_shift(&c, true, true, 32);
    +    sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_RX);
    +    sm_config_set_clkdiv(&c, div);
    +    pio_sm_init(pio, sm, offset, &c);
    +
    +    // X and Y are set to 0 and 1, to conveniently emit these to ISR/FIFO.
    +    pio_sm_exec(pio, sm, pio_encode_set(pio_x, 1));
    +    pio_sm_exec(pio, sm, pio_encode_set(pio_y, 0));
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +%}
    diff --git a/src/hal/pio/assembler/comparison_tests/differential_manchester.pio.h b/src/hal/pio/assembler/comparison_tests/differential_manchester.pio.h
    new file mode 100644
    index 000000000..c8d76ca54
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/differential_manchester.pio.h
    @@ -0,0 +1,120 @@
    +// -------------------------------------------------- //
    +// This file is autogenerated by pioasm; do not edit! //
    +// -------------------------------------------------- //
    +
    +#pragma once
    +
    +#if !PICO_NO_HARDWARE
    +#include "hardware/pio.h"
    +#endif
    +
    +// -------------------------- //
    +// differential_manchester_tx //
    +// -------------------------- //
    +
    +#define differential_manchester_tx_wrap_target 0
    +#define differential_manchester_tx_wrap 9
    +
    +#define differential_manchester_tx_offset_start 0u
    +
    +static const uint16_t differential_manchester_tx_program_instructions[] = {
    +            //     .wrap_target
    +    0x6021, //  0: out    x, 1                       
    +    0x1e24, //  1: jmp    !x, 4           side 1 [6] 
    +    0xa042, //  2: nop                               
    +    0x1600, //  3: jmp    0               side 0 [6] 
    +    0x0705, //  4: jmp    5                      [7] 
    +    0x6021, //  5: out    x, 1                       
    +    0x1629, //  6: jmp    !x, 9           side 0 [6] 
    +    0xa042, //  7: nop                               
    +    0x1e05, //  8: jmp    5               side 1 [6] 
    +    0x0700, //  9: jmp    0                      [7] 
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program differential_manchester_tx_program = {
    +    .instructions = differential_manchester_tx_program_instructions,
    +    .length = 10,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config differential_manchester_tx_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + differential_manchester_tx_wrap_target, offset + differential_manchester_tx_wrap);
    +    sm_config_set_sideset(&c, 2, true, false);
    +    return c;
    +}
    +
    +static inline void differential_manchester_tx_program_init(PIO pio, uint sm, uint offset, uint pin, float div) {
    +    pio_sm_set_pins_with_mask(pio, sm, 0, 1u << pin);
    +    pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, true);
    +    pio_gpio_init(pio, pin);
    +    pio_sm_config c = differential_manchester_tx_program_get_default_config(offset);
    +    sm_config_set_sideset_pins(&c, pin);
    +    sm_config_set_out_shift(&c, true, true, 32);
    +    sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);
    +    sm_config_set_clkdiv(&c, div);
    +    pio_sm_init(pio, sm, offset + differential_manchester_tx_offset_start, &c);
    +    // Execute a blocking pull so that we maintain the initial line state until data is available
    +    pio_sm_exec(pio, sm, pio_encode_pull(false, true));
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +
    +#endif
    +
    +// -------------------------- //
    +// differential_manchester_rx //
    +// -------------------------- //
    +
    +#define differential_manchester_rx_wrap_target 5
    +#define differential_manchester_rx_wrap 9
    +
    +#define differential_manchester_rx_offset_start 0u
    +
    +static const uint16_t differential_manchester_rx_program_instructions[] = {
    +    0x2ba0, //  0: wait   1 pin, 0               [11]
    +    0x00c4, //  1: jmp    pin, 4                     
    +    0x4021, //  2: in     x, 1                       
    +    0x0000, //  3: jmp    0                          
    +    0x4141, //  4: in     y, 1                   [1] 
    +            //     .wrap_target
    +    0x2b20, //  5: wait   0 pin, 0               [11]
    +    0x00c9, //  6: jmp    pin, 9                     
    +    0x4041, //  7: in     y, 1                       
    +    0x0000, //  8: jmp    0                          
    +    0x4121, //  9: in     x, 1                   [1] 
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program differential_manchester_rx_program = {
    +    .instructions = differential_manchester_rx_program_instructions,
    +    .length = 10,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config differential_manchester_rx_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + differential_manchester_rx_wrap_target, offset + differential_manchester_rx_wrap);
    +    return c;
    +}
    +
    +static inline void differential_manchester_rx_program_init(PIO pio, uint sm, uint offset, uint pin, float div) {
    +    pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, false);
    +    pio_gpio_init(pio, pin);
    +    pio_sm_config c = differential_manchester_rx_program_get_default_config(offset);
    +    sm_config_set_in_pins(&c, pin); // for WAIT
    +    sm_config_set_jmp_pin(&c, pin); // for JMP
    +    sm_config_set_in_shift(&c, true, true, 32);
    +    sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_RX);
    +    sm_config_set_clkdiv(&c, div);
    +    pio_sm_init(pio, sm, offset, &c);
    +    // X and Y are set to 0 and 1, to conveniently emit these to ISR/FIFO.
    +    pio_sm_exec(pio, sm, pio_encode_set(pio_x, 1));
    +    pio_sm_exec(pio, sm, pio_encode_set(pio_y, 0));
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +
    +#endif
    +
    diff --git a/src/hal/pio/assembler/comparison_tests/hello.pio b/src/hal/pio/assembler/comparison_tests/hello.pio
    new file mode 100644
    index 000000000..9eac4de71
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/hello.pio
    @@ -0,0 +1,34 @@
    +;
    +; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    +;
    +; SPDX-License-Identifier: BSD-3-Clause
    +;
    +
    +.program hello
    +
    +; Repeatedly get one word of data from the TX FIFO, stalling when the FIFO is
    +; empty. Write the least significant bit to the OUT pin group.
    +
    +loop:
    +    pull
    +    out pins, 1
    +    jmp loop
    +
    +% c-sdk {
    +static inline void hello_program_init(PIO pio, uint sm, uint offset, uint pin) {
    +    pio_sm_config c = hello_program_get_default_config(offset);
    +
    +    // Map the state machine's OUT pin group to one pin, namely the `pin`
    +    // parameter to this function.
    +    sm_config_set_out_pins(&c, pin, 1);
    +    // Set this pin's GPIO function (connect PIO to the pad)
    +    pio_gpio_init(pio, pin);
    +    // Set the pin direction to output at the PIO
    +    pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, true);
    +
    +    // Load our configuration, and jump to the start of the program
    +    pio_sm_init(pio, sm, offset, &c);
    +    // Set the state machine running
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +%}
    diff --git a/src/hal/pio/assembler/comparison_tests/hello.pio.h b/src/hal/pio/assembler/comparison_tests/hello.pio.h
    new file mode 100644
    index 000000000..415d1ccb0
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/hello.pio.h
    @@ -0,0 +1,55 @@
    +// -------------------------------------------------- //
    +// This file is autogenerated by pioasm; do not edit! //
    +// -------------------------------------------------- //
    +
    +#pragma once
    +
    +#if !PICO_NO_HARDWARE
    +#include "hardware/pio.h"
    +#endif
    +
    +// ----- //
    +// hello //
    +// ----- //
    +
    +#define hello_wrap_target 0
    +#define hello_wrap 2
    +
    +static const uint16_t hello_program_instructions[] = {
    +            //     .wrap_target
    +    0x80a0, //  0: pull   block                      
    +    0x6001, //  1: out    pins, 1                    
    +    0x0000, //  2: jmp    0                          
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program hello_program = {
    +    .instructions = hello_program_instructions,
    +    .length = 3,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config hello_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + hello_wrap_target, offset + hello_wrap);
    +    return c;
    +}
    +
    +static inline void hello_program_init(PIO pio, uint sm, uint offset, uint pin) {
    +    pio_sm_config c = hello_program_get_default_config(offset);
    +    // Map the state machine's OUT pin group to one pin, namely the `pin`
    +    // parameter to this function.
    +    sm_config_set_out_pins(&c, pin, 1);
    +    // Set this pin's GPIO function (connect PIO to the pad)
    +    pio_gpio_init(pio, pin);
    +    // Set the pin direction to output at the PIO
    +    pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, true);
    +    // Load our configuration, and jump to the start of the program
    +    pio_sm_init(pio, sm, offset, &c);
    +    // Set the state machine running
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +
    +#endif
    +
    diff --git a/src/hal/pio/assembler/comparison_tests/hub75.pio b/src/hal/pio/assembler/comparison_tests/hub75.pio
    new file mode 100644
    index 000000000..a6fb619cd
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/hub75.pio
    @@ -0,0 +1,128 @@
    +;
    +; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    +;
    +; SPDX-License-Identifier: BSD-3-Clause
    +;
    +
    +.program hub75_row
    +
    +; side-set pin 0 is LATCH
    +; side-set pin 1 is OEn
    +; OUT pins are row select A-E
    +;
    +; Each FIFO record consists of:
    +; - 5-bit row select (LSBs)
    +; - Pulse width - 1 (27 MSBs)
    +;
    +; Repeatedly select a row, pulse LATCH, and generate a pulse of a certain
    +; width on OEn.
    +
    +.side_set 2
    +
    +.wrap_target
    +    out pins, 5 [7]    side 0x2 ; Deassert OEn, output row select
    +    out x, 27   [7]    side 0x3 ; Pulse LATCH, get OEn pulse width
    +pulse_loop:
    +    jmp x-- pulse_loop side 0x0 ; Assert OEn for x+1 cycles
    +.wrap
    +
    +% c-sdk {
    +static inline void hub75_row_program_init(PIO pio, uint sm, uint offset, uint row_base_pin, uint n_row_pins, uint latch_base_pin) {
    +    pio_sm_set_consecutive_pindirs(pio, sm, row_base_pin, n_row_pins, true);
    +    pio_sm_set_consecutive_pindirs(pio, sm, latch_base_pin, 2, true);
    +    for (uint i = row_base_pin; i < row_base_pin + n_row_pins; ++i)
    +        pio_gpio_init(pio, i);
    +    pio_gpio_init(pio, latch_base_pin);
    +    pio_gpio_init(pio, latch_base_pin + 1);
    +
    +    pio_sm_config c = hub75_row_program_get_default_config(offset);
    +    sm_config_set_out_pins(&c, row_base_pin, n_row_pins);
    +    sm_config_set_sideset_pins(&c, latch_base_pin);
    +    sm_config_set_out_shift(&c, true, true, 32);
    +    pio_sm_init(pio, sm, offset, &c);
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +
    +static inline void hub75_wait_tx_stall(PIO pio, uint sm) {
    +    uint32_t txstall_mask = 1u << (PIO_FDEBUG_TXSTALL_LSB + sm);
    +    pio->fdebug = txstall_mask;
    +    while (!(pio->fdebug & txstall_mask))
    +        tight_loop_contents();
    +}
    +%}
    +
    +.program hub75_data_rgb888
    +.side_set 1
    +
    +; Each FIFO record consists of a RGB888 pixel. (This is ok for e.g. an RGB565
    +; source which has been gamma-corrected)
    +;
    +; Even pixels are sent on R0, G0, B0 and odd pixels on R1, G1, B1 (typically
    +; these are for different parts of the screen, NOT for adjacent pixels, so the
    +; frame buffer must be interleaved before passing to PIO.)
    +;
    +; Each pass through, we take bit n, n + 8 and n + 16 from each pixel, for n in
    +; {0...7}. Therefore the pixels need to be transmitted 8 times (ouch) to build
    +; up the full 8 bit value for each channel, and perform bit-planed PWM by
    +; varying pulse widths on the other state machine, in ascending powers of 2.
    +; This avoids a lot of bit shuffling on the processors, at the cost of DMA
    +; bandwidth (which we have loads of).
    +
    +; Might want to close your eyes before you read this
    +public entry_point:
    +.wrap_target
    +public shift0:
    +    pull             side 0 ; gets patched to `out null, n` if n nonzero (otherwise the PULL is required for fencing)
    +    in osr, 1        side 0 ; shuffle shuffle shuffle
    +    out null, 8      side 0
    +    in osr, 1        side 0
    +    out null, 8      side 0
    +    in osr, 1        side 0
    +    out null, 32     side 0 ; Discard remainder of OSR contents
    +public shift1:
    +    pull             side 0 ; gets patched to out null, n if n is nonzero (otherwise PULL required)
    +    in osr, 1        side 1 ; Note this posedge clocks in the data from the previous iteration
    +    out null, 8      side 1
    +    in osr, 1        side 1
    +    out null, 8      side 1
    +    in osr, 1        side 1
    +    out null, 32     side 1
    +    in null, 26      side 1 ; Note we are just doing this little manoeuvre here to get GPIOs in the order
    +    mov pins, ::isr  side 1 ; R0, G0, B0, R1, G1, B1. Can go 1 cycle faster if reversed
    +.wrap
    +; Note that because the clock edge for pixel n is in the middle of pixel n +
    +; 1, a dummy pixel at the end is required to clock the last piece of genuine
    +; data. (Also 1 pixel of garbage is clocked out at the start, but this is
    +; harmless)
    +
    +% c-sdk {
    +static inline void hub75_data_rgb888_program_init(PIO pio, uint sm, uint offset, uint rgb_base_pin, uint clock_pin) {
    +    pio_sm_set_consecutive_pindirs(pio, sm, rgb_base_pin, 6, true);
    +    pio_sm_set_consecutive_pindirs(pio, sm, clock_pin, 1, true);
    +    for (uint i = rgb_base_pin; i < rgb_base_pin + 6; ++i)
    +        pio_gpio_init(pio, i);
    +    pio_gpio_init(pio, clock_pin);
    +
    +    pio_sm_config c = hub75_data_rgb888_program_get_default_config(offset);
    +    sm_config_set_out_pins(&c, rgb_base_pin, 6);
    +    sm_config_set_sideset_pins(&c, clock_pin);
    +    sm_config_set_out_shift(&c, true, true, 24);
    +    // ISR shift to left. R0 ends up at bit 5. We push it up to MSB and then flip the register.
    +    sm_config_set_in_shift(&c, false, false, 32);
    +    sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);
    +    pio_sm_init(pio, sm, offset, &c);
    +    pio_sm_exec(pio, sm, offset + hub75_data_rgb888_offset_entry_point);
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +
    +// Patch a data program at `offset` to preshift pixels by `shamt`
    +static inline void hub75_data_rgb888_set_shift(PIO pio, uint sm, uint offset, uint shamt) {
    +    uint16_t instr;
    +    if (shamt == 0)
    +        instr = pio_encode_pull(false, true); // blocking PULL
    +    else
    +        instr = pio_encode_out(pio_null, shamt);
    +    pio->instr_mem[offset + hub75_data_rgb888_offset_shift0] = instr;
    +    pio->instr_mem[offset + hub75_data_rgb888_offset_shift1] = instr;
    +}
    +%}
    diff --git a/src/hal/pio/assembler/comparison_tests/hub75.pio.h b/src/hal/pio/assembler/comparison_tests/hub75.pio.h
    new file mode 100644
    index 000000000..4d6df6945
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/hub75.pio.h
    @@ -0,0 +1,138 @@
    +// -------------------------------------------------- //
    +// This file is autogenerated by pioasm; do not edit! //
    +// -------------------------------------------------- //
    +
    +#pragma once
    +
    +#if !PICO_NO_HARDWARE
    +#include "hardware/pio.h"
    +#endif
    +
    +// --------- //
    +// hub75_row //
    +// --------- //
    +
    +#define hub75_row_wrap_target 0
    +#define hub75_row_wrap 2
    +
    +static const uint16_t hub75_row_program_instructions[] = {
    +            //     .wrap_target
    +    0x7705, //  0: out    pins, 5         side 2 [7] 
    +    0x7f3b, //  1: out    x, 27           side 3 [7] 
    +    0x0042, //  2: jmp    x--, 2          side 0     
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program hub75_row_program = {
    +    .instructions = hub75_row_program_instructions,
    +    .length = 3,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config hub75_row_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + hub75_row_wrap_target, offset + hub75_row_wrap);
    +    sm_config_set_sideset(&c, 2, false, false);
    +    return c;
    +}
    +
    +static inline void hub75_row_program_init(PIO pio, uint sm, uint offset, uint row_base_pin, uint n_row_pins, uint latch_base_pin) {
    +    pio_sm_set_consecutive_pindirs(pio, sm, row_base_pin, n_row_pins, true);
    +    pio_sm_set_consecutive_pindirs(pio, sm, latch_base_pin, 2, true);
    +    for (uint i = row_base_pin; i < row_base_pin + n_row_pins; ++i)
    +        pio_gpio_init(pio, i);
    +    pio_gpio_init(pio, latch_base_pin);
    +    pio_gpio_init(pio, latch_base_pin + 1);
    +    pio_sm_config c = hub75_row_program_get_default_config(offset);
    +    sm_config_set_out_pins(&c, row_base_pin, n_row_pins);
    +    sm_config_set_sideset_pins(&c, latch_base_pin);
    +    sm_config_set_out_shift(&c, true, true, 32);
    +    pio_sm_init(pio, sm, offset, &c);
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +static inline void hub75_wait_tx_stall(PIO pio, uint sm) {
    +    uint32_t txstall_mask = 1u << (PIO_FDEBUG_TXSTALL_LSB + sm);
    +    pio->fdebug = txstall_mask;
    +    while (!(pio->fdebug & txstall_mask))
    +        tight_loop_contents();
    +}
    +
    +#endif
    +
    +// ----------------- //
    +// hub75_data_rgb888 //
    +// ----------------- //
    +
    +#define hub75_data_rgb888_wrap_target 0
    +#define hub75_data_rgb888_wrap 15
    +
    +#define hub75_data_rgb888_offset_entry_point 0u
    +#define hub75_data_rgb888_offset_shift0 0u
    +#define hub75_data_rgb888_offset_shift1 7u
    +
    +static const uint16_t hub75_data_rgb888_program_instructions[] = {
    +            //     .wrap_target
    +    0x80a0, //  0: pull   block           side 0     
    +    0x40e1, //  1: in     osr, 1          side 0     
    +    0x6068, //  2: out    null, 8         side 0     
    +    0x40e1, //  3: in     osr, 1          side 0     
    +    0x6068, //  4: out    null, 8         side 0     
    +    0x40e1, //  5: in     osr, 1          side 0     
    +    0x6060, //  6: out    null, 32        side 0     
    +    0x80a0, //  7: pull   block           side 0     
    +    0x50e1, //  8: in     osr, 1          side 1     
    +    0x7068, //  9: out    null, 8         side 1     
    +    0x50e1, // 10: in     osr, 1          side 1     
    +    0x7068, // 11: out    null, 8         side 1     
    +    0x50e1, // 12: in     osr, 1          side 1     
    +    0x7060, // 13: out    null, 32        side 1     
    +    0x507a, // 14: in     null, 26        side 1     
    +    0xb016, // 15: mov    pins, ::isr     side 1     
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program hub75_data_rgb888_program = {
    +    .instructions = hub75_data_rgb888_program_instructions,
    +    .length = 16,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config hub75_data_rgb888_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + hub75_data_rgb888_wrap_target, offset + hub75_data_rgb888_wrap);
    +    sm_config_set_sideset(&c, 1, false, false);
    +    return c;
    +}
    +
    +static inline void hub75_data_rgb888_program_init(PIO pio, uint sm, uint offset, uint rgb_base_pin, uint clock_pin) {
    +    pio_sm_set_consecutive_pindirs(pio, sm, rgb_base_pin, 6, true);
    +    pio_sm_set_consecutive_pindirs(pio, sm, clock_pin, 1, true);
    +    for (uint i = rgb_base_pin; i < rgb_base_pin + 6; ++i)
    +        pio_gpio_init(pio, i);
    +    pio_gpio_init(pio, clock_pin);
    +    pio_sm_config c = hub75_data_rgb888_program_get_default_config(offset);
    +    sm_config_set_out_pins(&c, rgb_base_pin, 6);
    +    sm_config_set_sideset_pins(&c, clock_pin);
    +    sm_config_set_out_shift(&c, true, true, 24);
    +    // ISR shift to left. R0 ends up at bit 5. We push it up to MSB and then flip the register.
    +    sm_config_set_in_shift(&c, false, false, 32);
    +    sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);
    +    pio_sm_init(pio, sm, offset, &c);
    +    pio_sm_exec(pio, sm, offset + hub75_data_rgb888_offset_entry_point);
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +// Patch a data program at `offset` to preshift pixels by `shamt`
    +static inline void hub75_data_rgb888_set_shift(PIO pio, uint sm, uint offset, uint shamt) {
    +    uint16_t instr;
    +    if (shamt == 0)
    +        instr = pio_encode_pull(false, true); // blocking PULL
    +    else
    +        instr = pio_encode_out(pio_null, shamt);
    +    pio->instr_mem[offset + hub75_data_rgb888_offset_shift0] = instr;
    +    pio->instr_mem[offset + hub75_data_rgb888_offset_shift1] = instr;
    +}
    +
    +#endif
    +
    diff --git a/src/hal/pio/assembler/comparison_tests/i2c.pio b/src/hal/pio/assembler/comparison_tests/i2c.pio
    new file mode 100644
    index 000000000..65f3e7834
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/i2c.pio
    @@ -0,0 +1,145 @@
    +;
    +; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    +;
    +; SPDX-License-Identifier: BSD-3-Clause
    +;
    +
    +.program i2c
    +.side_set 1 opt pindirs
    +
    +; TX Encoding:
    +; | 15:10 | 9     | 8:1  | 0   |
    +; | Instr | Final | Data | NAK |
    +;
    +; If Instr has a value n > 0, then this FIFO word has no
    +; data payload, and the next n + 1 words will be executed as instructions.
    +; Otherwise, shift out the 8 data bits, followed by the ACK bit.
    +;
    +; The Instr mechanism allows stop/start/repstart sequences to be programmed
    +; by the processor, and then carried out by the state machine at defined points
    +; in the datastream.
    +;
    +; The "Final" field should be set for the final byte in a transfer.
    +; This tells the state machine to ignore a NAK: if this field is not
    +; set, then any NAK will cause the state machine to halt and interrupt.
    +;
    +; Autopull should be enabled, with a threshold of 16.
    +; Autopush should be enabled, with a threshold of 8.
    +; The TX FIFO should be accessed with halfword writes, to ensure
    +; the data is immediately available in the OSR.
    +;
    +; Pin mapping:
    +; - Input pin 0 is SDA, 1 is SCL (if clock stretching used)
    +; - Jump pin is SDA
    +; - Side-set pin 0 is SCL
    +; - Set pin 0 is SDA
    +; - OUT pin 0 is SDA
    +; - SCL must be SDA + 1 (for wait mapping)
    +;
    +; The OE outputs should be inverted in the system IO controls!
    +; (It's possible for the inversion to be done in this program,
    +; but costs 2 instructions: 1 for inversion, and one to cope
    +; with the side effect of the MOV on TX shift counter.)
    +
    +do_nack:
    +    jmp y-- entry_point        ; Continue if NAK was expected
    +    irq wait 0 rel             ; Otherwise stop, ask for help
    +
    +do_byte:
    +    set x, 7                   ; Loop 8 times
    +bitloop:
    +    out pindirs, 1         [7] ; Serialise write data (all-ones if reading)
    +    nop             side 1 [2] ; SCL rising edge
    +    wait 1 pin, 1          [4] ; Allow clock to be stretched
    +    in pins, 1             [7] ; Sample read data in middle of SCL pulse
    +    jmp x-- bitloop side 0 [7] ; SCL falling edge
    +
    +    ; Handle ACK pulse
    +    out pindirs, 1         [7] ; On reads, we provide the ACK.
    +    nop             side 1 [7] ; SCL rising edge
    +    wait 1 pin, 1          [7] ; Allow clock to be stretched
    +    jmp pin do_nack side 0 [2] ; Test SDA for ACK/NAK, fall through if ACK
    +
    +public entry_point:
    +.wrap_target
    +    out x, 6                   ; Unpack Instr count
    +    out y, 1                   ; Unpack the NAK ignore bit
    +    jmp !x do_byte             ; Instr == 0, this is a data record.
    +    out null, 32               ; Instr > 0, remainder of this OSR is invalid
    +do_exec:
    +    out exec, 16               ; Execute one instruction per FIFO word
    +    jmp x-- do_exec            ; Repeat n + 1 times
    +.wrap
    +
    +% c-sdk {
    +
    +#include "hardware/clocks.h"
    +#include "hardware/gpio.h"
    +
    +
    +static inline void i2c_program_init(PIO pio, uint sm, uint offset, uint pin_sda, uint pin_scl) {
    +    assert(pin_scl == pin_sda + 1);
    +    pio_sm_config c = i2c_program_get_default_config(offset);
    +
    +    // IO mapping
    +    sm_config_set_out_pins(&c, pin_sda, 1);
    +    sm_config_set_set_pins(&c, pin_sda, 1);
    +    sm_config_set_in_pins(&c, pin_sda);
    +    sm_config_set_sideset_pins(&c, pin_scl);
    +    sm_config_set_jmp_pin(&c, pin_sda);
    +
    +    sm_config_set_out_shift(&c, false, true, 16);
    +    sm_config_set_in_shift(&c, false, true, 8);
    +
    +    float div = (float)clock_get_hz(clk_sys) / (32 * 100000);
    +    sm_config_set_clkdiv(&c, div);
    +
    +    // Try to avoid glitching the bus while connecting the IOs. Get things set
    +    // up so that pin is driven down when PIO asserts OE low, and pulled up
    +    // otherwise.
    +    gpio_pull_up(pin_scl);
    +    gpio_pull_up(pin_sda);
    +    uint32_t both_pins = (1u << pin_sda) | (1u << pin_scl);
    +    pio_sm_set_pins_with_mask(pio, sm, both_pins, both_pins);
    +    pio_sm_set_pindirs_with_mask(pio, sm, both_pins, both_pins);
    +    pio_gpio_init(pio, pin_sda);
    +    gpio_set_oeover(pin_sda, GPIO_OVERRIDE_INVERT);
    +    pio_gpio_init(pio, pin_scl);
    +    gpio_set_oeover(pin_scl, GPIO_OVERRIDE_INVERT);
    +    pio_sm_set_pins_with_mask(pio, sm, 0, both_pins);
    +
    +    // Clear IRQ flag before starting, and make sure flag doesn't actually
    +    // assert a system-level interrupt (we're using it as a status flag)
    +    pio_set_irq0_source_enabled(pio, pis_interrupt0 + sm, false);
    +    pio_set_irq1_source_enabled(pio, pis_interrupt0 + sm, false);
    +    pio_interrupt_clear(pio, sm);
    +
    +    // Configure and start SM
    +    pio_sm_init(pio, sm, offset + i2c_offset_entry_point, &c);
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +
    +%}
    +
    +
    +.program set_scl_sda
    +.side_set 1 opt
    +
    +; Assemble a table of instructions which software can select from, and pass
    +; into the FIFO, to issue START/STOP/RSTART. This isn't intended to be run as
    +; a complete program.
    +
    +    set pindirs, 0 side 0 [7] ; SCL = 0, SDA = 0
    +    set pindirs, 1 side 0 [7] ; SCL = 0, SDA = 1
    +    set pindirs, 0 side 1 [7] ; SCL = 1, SDA = 0
    +    set pindirs, 1 side 1 [7] ; SCL = 1, SDA = 1
    +
    +% c-sdk {
    +// Define order of our instruction table
    +enum {
    +    I2C_SC0_SD0 = 0,
    +    I2C_SC0_SD1,
    +    I2C_SC1_SD0,
    +    I2C_SC1_SD1
    +};
    +%}
    diff --git a/src/hal/pio/assembler/comparison_tests/i2c.pio.h b/src/hal/pio/assembler/comparison_tests/i2c.pio.h
    new file mode 100644
    index 000000000..5c470395a
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/i2c.pio.h
    @@ -0,0 +1,136 @@
    +// -------------------------------------------------- //
    +// This file is autogenerated by pioasm; do not edit! //
    +// -------------------------------------------------- //
    +
    +#pragma once
    +
    +#if !PICO_NO_HARDWARE
    +#include "hardware/pio.h"
    +#endif
    +
    +// --- //
    +// i2c //
    +// --- //
    +
    +#define i2c_wrap_target 12
    +#define i2c_wrap 17
    +
    +#define i2c_offset_entry_point 12u
    +
    +static const uint16_t i2c_program_instructions[] = {
    +    0x008c, //  0: jmp    y--, 12                    
    +    0xc030, //  1: irq    wait 0 rel                 
    +    0xe027, //  2: set    x, 7                       
    +    0x6781, //  3: out    pindirs, 1             [7] 
    +    0xba42, //  4: nop                    side 1 [2] 
    +    0x24a1, //  5: wait   1 pin, 1               [4] 
    +    0x4701, //  6: in     pins, 1                [7] 
    +    0x1743, //  7: jmp    x--, 3          side 0 [7] 
    +    0x6781, //  8: out    pindirs, 1             [7] 
    +    0xbf42, //  9: nop                    side 1 [7] 
    +    0x27a1, // 10: wait   1 pin, 1               [7] 
    +    0x12c0, // 11: jmp    pin, 0          side 0 [2] 
    +            //     .wrap_target
    +    0x6026, // 12: out    x, 6                       
    +    0x6041, // 13: out    y, 1                       
    +    0x0022, // 14: jmp    !x, 2                      
    +    0x6060, // 15: out    null, 32                   
    +    0x60f0, // 16: out    exec, 16                   
    +    0x0050, // 17: jmp    x--, 16                    
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program i2c_program = {
    +    .instructions = i2c_program_instructions,
    +    .length = 18,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config i2c_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + i2c_wrap_target, offset + i2c_wrap);
    +    sm_config_set_sideset(&c, 2, true, true);
    +    return c;
    +}
    +
    +#include "hardware/clocks.h"
    +#include "hardware/gpio.h"
    +static inline void i2c_program_init(PIO pio, uint sm, uint offset, uint pin_sda, uint pin_scl) {
    +    assert(pin_scl == pin_sda + 1);
    +    pio_sm_config c = i2c_program_get_default_config(offset);
    +    // IO mapping
    +    sm_config_set_out_pins(&c, pin_sda, 1);
    +    sm_config_set_set_pins(&c, pin_sda, 1);
    +    sm_config_set_in_pins(&c, pin_sda);
    +    sm_config_set_sideset_pins(&c, pin_scl);
    +    sm_config_set_jmp_pin(&c, pin_sda);
    +    sm_config_set_out_shift(&c, false, true, 16);
    +    sm_config_set_in_shift(&c, false, true, 8);
    +    float div = (float)clock_get_hz(clk_sys) / (32 * 100000);
    +    sm_config_set_clkdiv(&c, div);
    +    // Try to avoid glitching the bus while connecting the IOs. Get things set
    +    // up so that pin is driven down when PIO asserts OE low, and pulled up
    +    // otherwise.
    +    gpio_pull_up(pin_scl);
    +    gpio_pull_up(pin_sda);
    +    uint32_t both_pins = (1u << pin_sda) | (1u << pin_scl);
    +    pio_sm_set_pins_with_mask(pio, sm, both_pins, both_pins);
    +    pio_sm_set_pindirs_with_mask(pio, sm, both_pins, both_pins);
    +    pio_gpio_init(pio, pin_sda);
    +    gpio_set_oeover(pin_sda, GPIO_OVERRIDE_INVERT);
    +    pio_gpio_init(pio, pin_scl);
    +    gpio_set_oeover(pin_scl, GPIO_OVERRIDE_INVERT);
    +    pio_sm_set_pins_with_mask(pio, sm, 0, both_pins);
    +    // Clear IRQ flag before starting, and make sure flag doesn't actually
    +    // assert a system-level interrupt (we're using it as a status flag)
    +    pio_set_irq0_source_enabled(pio, pis_interrupt0 + sm, false);
    +    pio_set_irq1_source_enabled(pio, pis_interrupt0 + sm, false);
    +    pio_interrupt_clear(pio, sm);
    +    // Configure and start SM
    +    pio_sm_init(pio, sm, offset + i2c_offset_entry_point, &c);
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +
    +#endif
    +
    +// ----------- //
    +// set_scl_sda //
    +// ----------- //
    +
    +#define set_scl_sda_wrap_target 0
    +#define set_scl_sda_wrap 3
    +
    +static const uint16_t set_scl_sda_program_instructions[] = {
    +            //     .wrap_target
    +    0xf780, //  0: set    pindirs, 0      side 0 [7] 
    +    0xf781, //  1: set    pindirs, 1      side 0 [7] 
    +    0xff80, //  2: set    pindirs, 0      side 1 [7] 
    +    0xff81, //  3: set    pindirs, 1      side 1 [7] 
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program set_scl_sda_program = {
    +    .instructions = set_scl_sda_program_instructions,
    +    .length = 4,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config set_scl_sda_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + set_scl_sda_wrap_target, offset + set_scl_sda_wrap);
    +    sm_config_set_sideset(&c, 2, true, false);
    +    return c;
    +}
    +
    +// Define order of our instruction table
    +enum {
    +    I2C_SC0_SD0 = 0,
    +    I2C_SC0_SD1,
    +    I2C_SC1_SD0,
    +    I2C_SC1_SD1
    +};
    +
    +#endif
    +
    diff --git a/src/hal/pio/assembler/comparison_tests/manchester_encoding.pio b/src/hal/pio/assembler/comparison_tests/manchester_encoding.pio
    new file mode 100644
    index 000000000..0117d2a35
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/manchester_encoding.pio
    @@ -0,0 +1,94 @@
    +;
    +; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    +;
    +; SPDX-License-Identifier: BSD-3-Clause
    +;
    +
    +.program manchester_tx
    +.side_set 1 opt
    +
    +; Transmit one bit every 12 cycles. a '0' is encoded as a high-low sequence
    +; (each part lasting half a bit period, or 6 cycles) and a '1' is encoded as a
    +; low-high sequence.
    +;
    +; Side-set bit 0 must be mapped to the GPIO used for TX.
    +; Autopull must be enabled -- this program does not care about the threshold.
    +; The program starts at the public label 'start'.
    +
    +.wrap_target
    +do_1:
    +    nop         side 0 [5] ; Low for 6 cycles (5 delay, +1 for nop)
    +    jmp get_bit side 1 [3] ; High for 4 cycles. 'get_bit' takes another 2 cycles
    +do_0:
    +    nop         side 1 [5] ; Output high for 6 cycles
    +    nop         side 0 [3] ; Output low for 4 cycles
    +public start:
    +get_bit:
    +    out x, 1               ; Always shift out one bit from OSR to X, so we can
    +    jmp !x do_0            ; branch on it. Autopull refills the OSR when empty.
    +.wrap
    +
    +% c-sdk {
    +static inline void manchester_tx_program_init(PIO pio, uint sm, uint offset, uint pin, float div) {
    +    pio_sm_set_pins_with_mask(pio, sm, 0, 1u << pin);
    +    pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, true);
    +    pio_gpio_init(pio, pin);
    +
    +    pio_sm_config c = manchester_tx_program_get_default_config(offset);
    +    sm_config_set_sideset_pins(&c, pin);
    +    sm_config_set_out_shift(&c, true, true, 32);
    +    sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);
    +    sm_config_set_clkdiv(&c, div);
    +    pio_sm_init(pio, sm, offset + manchester_tx_offset_start, &c);
    +
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +%}
    +
    +.program manchester_rx
    +
    +; Assumes line is idle low, first bit is 0
    +; One bit is 12 cycles
    +; a '0' is encoded as 10
    +; a '1' is encoded as 01
    +;
    +; Both the IN base and the JMP pin mapping must be pointed at the GPIO used for RX.
    +; Autopush must be enabled.
    +; Before enabling the SM, it should be placed in a 'wait 1, pin` state, so that
    +; it will not start sampling until the initial line idle state ends.
    +
    +start_of_0:            ; We are 0.25 bits into a 0 - signal is high
    +    wait 0 pin 0       ; Wait for the 1->0 transition - at this point we are 0.5 into the bit
    +    in y, 1 [8]        ; Emit a 0, sleep 3/4 of a bit
    +    jmp pin start_of_0 ; If signal is 1 again, it's another 0 bit, otherwise it's a 1
    +
    +.wrap_target
    +start_of_1:            ; We are 0.25 bits into a 1 - signal is 1   
    +    wait 1 pin 0       ; Wait for the 0->1 transition - at this point we are 0.5 into the bit
    +    in x, 1 [8]        ; Emit a 1, sleep 3/4 of a bit
    +    jmp pin start_of_0 ; If signal is 0 again, it's another 1 bit otherwise it's a 0
    +.wrap
    +
    +% c-sdk {
    +static inline void manchester_rx_program_init(PIO pio, uint sm, uint offset, uint pin, float div) {
    +    pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, false);
    +    pio_gpio_init(pio, pin);
    +
    +    pio_sm_config c = manchester_rx_program_get_default_config(offset);
    +    sm_config_set_in_pins(&c, pin); // for WAIT
    +    sm_config_set_jmp_pin(&c, pin); // for JMP
    +    sm_config_set_in_shift(&c, true, true, 32);
    +    sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_RX);
    +    sm_config_set_clkdiv(&c, div);
    +    pio_sm_init(pio, sm, offset, &c);
    +
    +    // X and Y are set to 0 and 1, to conveniently emit these to ISR/FIFO.
    +    pio_sm_exec(pio, sm, pio_encode_set(pio_x, 1));
    +    pio_sm_exec(pio, sm, pio_encode_set(pio_y, 0));
    +    // Assume line is idle low, and first transmitted bit is 0. Put SM in a
    +    // wait state before enabling. RX will begin once the first 0 symbol is
    +    // detected.
    +    pio_sm_exec(pio, sm, pio_encode_wait_pin(1, 0) | pio_encode_delay(2));
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +%}
    diff --git a/src/hal/pio/assembler/comparison_tests/manchester_encoding.pio.h b/src/hal/pio/assembler/comparison_tests/manchester_encoding.pio.h
    new file mode 100644
    index 000000000..ee0088680
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/manchester_encoding.pio.h
    @@ -0,0 +1,112 @@
    +// -------------------------------------------------- //
    +// This file is autogenerated by pioasm; do not edit! //
    +// -------------------------------------------------- //
    +
    +#pragma once
    +
    +#if !PICO_NO_HARDWARE
    +#include "hardware/pio.h"
    +#endif
    +
    +// ------------- //
    +// manchester_tx //
    +// ------------- //
    +
    +#define manchester_tx_wrap_target 0
    +#define manchester_tx_wrap 5
    +
    +#define manchester_tx_offset_start 4u
    +
    +static const uint16_t manchester_tx_program_instructions[] = {
    +            //     .wrap_target
    +    0xb542, //  0: nop                    side 0 [5] 
    +    0x1b04, //  1: jmp    4               side 1 [3] 
    +    0xbd42, //  2: nop                    side 1 [5] 
    +    0xb342, //  3: nop                    side 0 [3] 
    +    0x6021, //  4: out    x, 1                       
    +    0x0022, //  5: jmp    !x, 2                      
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program manchester_tx_program = {
    +    .instructions = manchester_tx_program_instructions,
    +    .length = 6,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config manchester_tx_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + manchester_tx_wrap_target, offset + manchester_tx_wrap);
    +    sm_config_set_sideset(&c, 2, true, false);
    +    return c;
    +}
    +
    +static inline void manchester_tx_program_init(PIO pio, uint sm, uint offset, uint pin, float div) {
    +    pio_sm_set_pins_with_mask(pio, sm, 0, 1u << pin);
    +    pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, true);
    +    pio_gpio_init(pio, pin);
    +    pio_sm_config c = manchester_tx_program_get_default_config(offset);
    +    sm_config_set_sideset_pins(&c, pin);
    +    sm_config_set_out_shift(&c, true, true, 32);
    +    sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);
    +    sm_config_set_clkdiv(&c, div);
    +    pio_sm_init(pio, sm, offset + manchester_tx_offset_start, &c);
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +
    +#endif
    +
    +// ------------- //
    +// manchester_rx //
    +// ------------- //
    +
    +#define manchester_rx_wrap_target 3
    +#define manchester_rx_wrap 5
    +
    +static const uint16_t manchester_rx_program_instructions[] = {
    +    0x2020, //  0: wait   0 pin, 0                   
    +    0x4841, //  1: in     y, 1                   [8] 
    +    0x00c0, //  2: jmp    pin, 0                     
    +            //     .wrap_target
    +    0x20a0, //  3: wait   1 pin, 0                   
    +    0x4821, //  4: in     x, 1                   [8] 
    +    0x00c0, //  5: jmp    pin, 0                     
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program manchester_rx_program = {
    +    .instructions = manchester_rx_program_instructions,
    +    .length = 6,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config manchester_rx_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + manchester_rx_wrap_target, offset + manchester_rx_wrap);
    +    return c;
    +}
    +
    +static inline void manchester_rx_program_init(PIO pio, uint sm, uint offset, uint pin, float div) {
    +    pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, false);
    +    pio_gpio_init(pio, pin);
    +    pio_sm_config c = manchester_rx_program_get_default_config(offset);
    +    sm_config_set_in_pins(&c, pin); // for WAIT
    +    sm_config_set_jmp_pin(&c, pin); // for JMP
    +    sm_config_set_in_shift(&c, true, true, 32);
    +    sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_RX);
    +    sm_config_set_clkdiv(&c, div);
    +    pio_sm_init(pio, sm, offset, &c);
    +    // X and Y are set to 0 and 1, to conveniently emit these to ISR/FIFO.
    +    pio_sm_exec(pio, sm, pio_encode_set(pio_x, 1));
    +    pio_sm_exec(pio, sm, pio_encode_set(pio_y, 0));
    +    // Assume line is idle low, and first transmitted bit is 0. Put SM in a
    +    // wait state before enabling. RX will begin once the first 0 symbol is
    +    // detected.
    +    pio_sm_exec(pio, sm, pio_encode_wait_pin(1, 0) | pio_encode_delay(2));
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +
    +#endif
    +
    diff --git a/src/hal/pio/assembler/comparison_tests/nec_carrier_burst.pio b/src/hal/pio/assembler/comparison_tests/nec_carrier_burst.pio
    new file mode 100644
    index 000000000..499e892fc
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/nec_carrier_burst.pio
    @@ -0,0 +1,61 @@
    +;
    +; Copyright (c) 2021 mjcross
    +;
    +; SPDX-License-Identifier: BSD-3-Clause
    +;
    +
    +
    +.program nec_carrier_burst
    +
    +; Generate bursts of carrier.
    +;
    +; Repeatedly wait for an IRQ to be set then clear it and generate 21 cycles of
    +; carrier with 25% duty cycle
    +;
    +.define NUM_CYCLES 21               ; how many carrier cycles to generate
    +.define BURST_IRQ 7                 ; which IRQ should trigger a carrier burst
    +.define public TICKS_PER_LOOP 4     ; the number of instructions in the loop (for timing)
    +
    +.wrap_target
    +    set X, (NUM_CYCLES - 1)         ; initialise the loop counter
    +    wait 1 irq BURST_IRQ            ; wait for the IRQ then clear it
    +cycle_loop:
    +    set pins, 1                     ; set the pin high (1 cycle)
    +    set pins, 0 [1]                 ; set the pin low (2 cycles)
    +    jmp X--, cycle_loop             ; (1 more cycle)
    +.wrap
    +
    +
    +% c-sdk {
    +static inline void nec_carrier_burst_program_init(PIO pio, uint sm, uint offset, uint pin, float freq) {
    +    // Create a new state machine configuration
    +    //
    +    pio_sm_config c = nec_carrier_burst_program_get_default_config (offset);
    +
    +    // Map the SET pin group to one pin, namely the `pin`
    +    // parameter to this function.
    +    //
    +    sm_config_set_set_pins (&c, pin, 1);
    +
    +    // Set the GPIO function of the pin (connect the PIO to the pad)
    +    //
    +    pio_gpio_init (pio, pin);
    +
    +    // Set the pin direction to output at the PIO
    +    //
    +    pio_sm_set_consecutive_pindirs (pio, sm, pin, 1, true);
    +
    +    // Set the clock divider to generate the required frequency
    +    //
    +    float div = clock_get_hz (clk_sys) / (freq * nec_carrier_burst_TICKS_PER_LOOP);
    +    sm_config_set_clkdiv (&c, div);
    +
    +    // Apply the configuration to the state machine
    +    //
    +    pio_sm_init (pio, sm, offset, &c);
    +
    +    // Set the state machine running
    +    //
    +    pio_sm_set_enabled (pio, sm, true);
    +}
    +%}
    diff --git a/src/hal/pio/assembler/comparison_tests/nec_carrier_burst.pio.h b/src/hal/pio/assembler/comparison_tests/nec_carrier_burst.pio.h
    new file mode 100644
    index 000000000..5fa001492
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/nec_carrier_burst.pio.h
    @@ -0,0 +1,70 @@
    +// -------------------------------------------------- //
    +// This file is autogenerated by pioasm; do not edit! //
    +// -------------------------------------------------- //
    +
    +#pragma once
    +
    +#if !PICO_NO_HARDWARE
    +#include "hardware/pio.h"
    +#endif
    +
    +// ----------------- //
    +// nec_carrier_burst //
    +// ----------------- //
    +
    +#define nec_carrier_burst_wrap_target 0
    +#define nec_carrier_burst_wrap 4
    +
    +#define nec_carrier_burst_TICKS_PER_LOOP 4
    +
    +static const uint16_t nec_carrier_burst_program_instructions[] = {
    +            //     .wrap_target
    +    0xe034, //  0: set    x, 20                      
    +    0x20c7, //  1: wait   1 irq, 7                   
    +    0xe001, //  2: set    pins, 1                    
    +    0xe100, //  3: set    pins, 0                [1] 
    +    0x0042, //  4: jmp    x--, 2                     
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program nec_carrier_burst_program = {
    +    .instructions = nec_carrier_burst_program_instructions,
    +    .length = 5,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config nec_carrier_burst_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + nec_carrier_burst_wrap_target, offset + nec_carrier_burst_wrap);
    +    return c;
    +}
    +
    +static inline void nec_carrier_burst_program_init(PIO pio, uint sm, uint offset, uint pin, float freq) {
    +    // Create a new state machine configuration
    +    //
    +    pio_sm_config c = nec_carrier_burst_program_get_default_config (offset);
    +    // Map the SET pin group to one pin, namely the `pin`
    +    // parameter to this function.
    +    //
    +    sm_config_set_set_pins (&c, pin, 1);
    +    // Set the GPIO function of the pin (connect the PIO to the pad)
    +    //
    +    pio_gpio_init (pio, pin);
    +    // Set the pin direction to output at the PIO
    +    //
    +    pio_sm_set_consecutive_pindirs (pio, sm, pin, 1, true);
    +    // Set the clock divider to generate the required frequency
    +    //
    +    float div = clock_get_hz (clk_sys) / (freq * nec_carrier_burst_TICKS_PER_LOOP);
    +    sm_config_set_clkdiv (&c, div);
    +    // Apply the configuration to the state machine
    +    //
    +    pio_sm_init (pio, sm, offset, &c);
    +    // Set the state machine running
    +    //
    +    pio_sm_set_enabled (pio, sm, true);
    +}
    +
    +#endif
    +
    diff --git a/src/hal/pio/assembler/comparison_tests/nec_carrier_control.pio b/src/hal/pio/assembler/comparison_tests/nec_carrier_control.pio
    new file mode 100644
    index 000000000..0733afef0
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/nec_carrier_control.pio
    @@ -0,0 +1,79 @@
    +;
    +; Copyright (c) 2021 mjcross
    +;
    +; SPDX-License-Identifier: BSD-3-Clause
    +;
    +
    +
    +.program nec_carrier_control
    +
    +; Transmit an encoded 32-bit frame in NEC IR format.
    +;
    +; Accepts 32-bit words from the transmit FIFO and sends them least-significant bit first
    +; using pulse position modulation.
    +;
    +; Carrier bursts are generated using the nec_carrier_burst program, which is expected to be
    +; running on a separate state machine.
    +;
    +; This program expects there to be 2 state machine ticks per 'normal' 562.5us
    +; burst period.
    +;
    +.define BURST_IRQ 7                     ; the IRQ used to trigger a carrier burst
    +.define NUM_INITIAL_BURSTS 16           ; how many bursts to transmit for a 'sync burst'
    +
    +.wrap_target
    +    pull                                ; fetch a data word from the transmit FIFO into the
    +                                        ; output shift register, blocking if the FIFO is empty
    +
    +    set X, (NUM_INITIAL_BURSTS - 1)     ; send a sync burst (9ms)
    +long_burst:
    +    irq BURST_IRQ
    +    jmp X-- long_burst
    +
    +    nop [15]                            ; send a 4.5ms space
    +    irq BURST_IRQ [1]                   ; send a 562.5us burst to begin the first data bit
    +
    +data_bit:
    +    out X, 1                            ; shift the least-significant bit from the OSR
    +    jmp !X burst                        ; send a short delay for a '0' bit
    +    nop [3]                             ; send an additional delay for a '1' bit
    +burst:
    +    irq BURST_IRQ                       ; send a 562.5us burst to end the data bit
    +
    +jmp !OSRE data_bit                      ; continue sending bits until the OSR is empty
    +
    +.wrap                                   ; fetch another data word from the FIFO
    +
    +
    +% c-sdk {
    +static inline void nec_carrier_control_program_init (PIO pio, uint sm, uint offset, float tick_rate, int bits_per_frame) {
    +
    +    // create a new state machine configuration
    +    //
    +    pio_sm_config c = nec_carrier_control_program_get_default_config(offset);
    +
    +    // configure the output shift register
    +    //
    +    sm_config_set_out_shift (&c,
    +                             true,       // shift right
    +                             false,      // disable autopull
    +                             bits_per_frame);
    +
    +    // join the FIFOs to make a single large transmit FIFO
    +    //
    +    sm_config_set_fifo_join (&c, PIO_FIFO_JOIN_TX);
    +
    +    // configure the clock divider
    +    //
    +    float div = clock_get_hz (clk_sys) / tick_rate;
    +    sm_config_set_clkdiv (&c, div);
    +
    +    // apply the configuration to the state machine
    +    //
    +    pio_sm_init(pio, sm, offset, &c);
    +
    +    // set the state machine running
    +    //
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +%}
    diff --git a/src/hal/pio/assembler/comparison_tests/nec_carrier_control.pio.h b/src/hal/pio/assembler/comparison_tests/nec_carrier_control.pio.h
    new file mode 100644
    index 000000000..8c9a3059b
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/nec_carrier_control.pio.h
    @@ -0,0 +1,73 @@
    +// -------------------------------------------------- //
    +// This file is autogenerated by pioasm; do not edit! //
    +// -------------------------------------------------- //
    +
    +#pragma once
    +
    +#if !PICO_NO_HARDWARE
    +#include "hardware/pio.h"
    +#endif
    +
    +// ------------------- //
    +// nec_carrier_control //
    +// ------------------- //
    +
    +#define nec_carrier_control_wrap_target 0
    +#define nec_carrier_control_wrap 10
    +
    +static const uint16_t nec_carrier_control_program_instructions[] = {
    +            //     .wrap_target
    +    0x80a0, //  0: pull   block                      
    +    0xe02f, //  1: set    x, 15                      
    +    0xc007, //  2: irq    nowait 7                   
    +    0x0042, //  3: jmp    x--, 2                     
    +    0xaf42, //  4: nop                           [15]
    +    0xc107, //  5: irq    nowait 7               [1] 
    +    0x6021, //  6: out    x, 1                       
    +    0x0029, //  7: jmp    !x, 9                      
    +    0xa342, //  8: nop                           [3] 
    +    0xc007, //  9: irq    nowait 7                   
    +    0x00e6, // 10: jmp    !osre, 6                   
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program nec_carrier_control_program = {
    +    .instructions = nec_carrier_control_program_instructions,
    +    .length = 11,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config nec_carrier_control_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + nec_carrier_control_wrap_target, offset + nec_carrier_control_wrap);
    +    return c;
    +}
    +
    +static inline void nec_carrier_control_program_init (PIO pio, uint sm, uint offset, float tick_rate, int bits_per_frame) {
    +    // create a new state machine configuration
    +    //
    +    pio_sm_config c = nec_carrier_control_program_get_default_config(offset);
    +    // configure the output shift register
    +    //
    +    sm_config_set_out_shift (&c,
    +                             true,       // shift right
    +                             false,      // disable autopull
    +                             bits_per_frame);
    +    // join the FIFOs to make a single large transmit FIFO
    +    //
    +    sm_config_set_fifo_join (&c, PIO_FIFO_JOIN_TX);
    +    // configure the clock divider
    +    //
    +    float div = clock_get_hz (clk_sys) / tick_rate;
    +    sm_config_set_clkdiv (&c, div);
    +    // apply the configuration to the state machine
    +    //
    +    pio_sm_init(pio, sm, offset, &c);
    +    // set the state machine running
    +    //
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +
    +#endif
    +
    diff --git a/src/hal/pio/assembler/comparison_tests/nec_receive.pio b/src/hal/pio/assembler/comparison_tests/nec_receive.pio
    new file mode 100644
    index 000000000..a2c5f5e70
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/nec_receive.pio
    @@ -0,0 +1,96 @@
    +;
    +; Copyright (c) 2021 mjcross
    +;
    +; SPDX-License-Identifier: BSD-3-Clause
    +;
    +
    +
    +.program nec_receive
    +
    +; Decode IR frames in NEC format and push 32-bit words to the input FIFO.
    +;
    +; The input pin should be connected to an IR detector with an 'active low' output.
    +;
    +; This program expects there to be 10 state machine clock ticks per 'normal' 562.5us burst period
    +; in order to permit timely detection of start of a burst. The initailisation function below sets
    +; the correct divisor to achive this relative to the system clock.
    +;
    +; Within the 'NEC' protocol frames consists of 32 bits sent least-siginificant bit first; so the
    +; Input Shift Register should be configured to shift right and autopush after 32 bits, as in the
    +; initialisation function below.
    +;
    +.define BURST_LOOP_COUNTER 30                   ; the detection threshold for a 'frame sync' burst
    +.define BIT_SAMPLE_DELAY 15                     ; how long to wait after the end of the burst before sampling
    +
    +.wrap_target
    +
    +next_burst:
    +    set X, BURST_LOOP_COUNTER
    +    wait 0 pin 0                                ; wait for the next burst to start
    +
    +burst_loop:
    +    jmp pin data_bit                            ; the burst ended before the counter expired
    +    jmp X-- burst_loop                          ; wait for the burst to end
    +
    +                                                ; the counter expired - this is a sync burst
    +    mov ISR, NULL                               ; reset the Input Shift Register
    +    wait 1 pin 0                                ; wait for the sync burst to finish
    +    jmp next_burst                              ; wait for the first data bit
    +
    +data_bit:
    +    nop [ BIT_SAMPLE_DELAY - 1 ]                ; wait for 1.5 burst periods before sampling the bit value
    +    in PINS, 1                                  ; if the next burst has started then detect a '0' (short gap)
    +                                                ; otherwise detect a '1' (long gap)
    +                                                ; after 32 bits the ISR will autopush to the receive FIFO
    +.wrap
    +
    +
    +% c-sdk {
    +static inline void nec_receive_program_init (PIO pio, uint sm, uint offset, uint pin) {
    +
    +    // Set the GPIO function of the pin (connect the PIO to the pad)
    +    //
    +    pio_gpio_init(pio, pin);
    +
    +    // Set the pin direction to `input` at the PIO
    +    //
    +    pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, false);
    +
    +    // Create a new state machine configuration
    +    //
    +    pio_sm_config c = nec_receive_program_get_default_config (offset);
    +
    +    // configure the Input Shift Register
    +    //
    +    sm_config_set_in_shift (&c,
    +                            true,       // shift right
    +                            true,       // enable autopush
    +                            32);        // autopush after 32 bits
    +
    +    // join the FIFOs to make a single large receive FIFO
    +    //
    +    sm_config_set_fifo_join (&c, PIO_FIFO_JOIN_RX);
    +
    +    // Map the IN pin group to one pin, namely the `pin`
    +    // parameter to this function.
    +    //
    +    sm_config_set_in_pins (&c, pin);
    +
    +    // Map the JMP pin to the `pin` parameter of this function.
    +    //
    +    sm_config_set_jmp_pin (&c, pin);
    +
    +    // Set the clock divider to 10 ticks per 562.5us burst period
    +    //
    +    float div = clock_get_hz (clk_sys) / (10.0 / 562.5e-6);
    +    sm_config_set_clkdiv (&c, div);
    +
    +    // Apply the configuration to the state machine
    +    //
    +    pio_sm_init (pio, sm, offset, &c);
    +
    +    // Set the state machine running
    +    //
    +    pio_sm_set_enabled (pio, sm, true);
    +}
    +%}
    diff --git a/src/hal/pio/assembler/comparison_tests/nec_receive.pio.h b/src/hal/pio/assembler/comparison_tests/nec_receive.pio.h
    new file mode 100644
    index 000000000..e9611b67a
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/nec_receive.pio.h
    @@ -0,0 +1,84 @@
    +// -------------------------------------------------- //
    +// This file is autogenerated by pioasm; do not edit! //
    +// -------------------------------------------------- //
    +
    +#pragma once
    +
    +#if !PICO_NO_HARDWARE
    +#include "hardware/pio.h"
    +#endif
    +
    +// ----------- //
    +// nec_receive //
    +// ----------- //
    +
    +#define nec_receive_wrap_target 0
    +#define nec_receive_wrap 8
    +
    +static const uint16_t nec_receive_program_instructions[] = {
    +            //     .wrap_target
    +    0xe03e, //  0: set    x, 30                      
    +    0x2020, //  1: wait   0 pin, 0                   
    +    0x00c7, //  2: jmp    pin, 7                     
    +    0x0042, //  3: jmp    x--, 2                     
    +    0xa0c3, //  4: mov    isr, null                  
    +    0x20a0, //  5: wait   1 pin, 0                   
    +    0x0000, //  6: jmp    0                          
    +    0xae42, //  7: nop                           [14]
    +    0x4001, //  8: in     pins, 1                    
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program nec_receive_program = {
    +    .instructions = nec_receive_program_instructions,
    +    .length = 9,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config nec_receive_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + nec_receive_wrap_target, offset + nec_receive_wrap);
    +    return c;
    +}
    +
    +static inline void nec_receive_program_init (PIO pio, uint sm, uint offset, uint pin) {
    +    // Set the GPIO function of the pin (connect the PIO to the pad)
    +    //
    +    pio_gpio_init(pio, pin);
    +    // Set the pin direction to `input` at the PIO
    +    //
    +    pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, false);
    +    // Create a new state machine configuration
    +    //
    +    pio_sm_config c = nec_receive_program_get_default_config (offset);
    +    // configure the Input Shift Register
    +    //
    +    sm_config_set_in_shift (&c,
    +                            true,       // shift right
    +                            true,       // enable autopush
    +                            32);        // autopush after 32 bits
    +    // join the FIFOs to make a single large receive FIFO
    +    //
    +    sm_config_set_fifo_join (&c, PIO_FIFO_JOIN_RX);
    +    // Map the IN pin group to one pin, namely the `pin`
    +    // parameter to this function.
    +    //
    +    sm_config_set_in_pins (&c, pin);
    +    // Map the JMP pin to the `pin` parameter of this function.
    +    //
    +    sm_config_set_jmp_pin (&c, pin);
    +    // Set the clock divider to 10 ticks per 562.5us burst period
    +    //
    +    float div = clock_get_hz (clk_sys) / (10.0 / 562.5e-6);
    +    sm_config_set_clkdiv (&c, div);
    +    // Apply the configuration to the state machine
    +    //
    +    pio_sm_init (pio, sm, offset, &c);
    +    // Set the state machine running
    +    //
    +    pio_sm_set_enabled (pio, sm, true);
    +}
    +
    +#endif
    +
    diff --git a/src/hal/pio/assembler/comparison_tests/pio_serialiser.pio b/src/hal/pio/assembler/comparison_tests/pio_serialiser.pio
    new file mode 100644
    index 000000000..67a6866ab
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/pio_serialiser.pio
    @@ -0,0 +1,27 @@
    +;
    +; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    +;
    +; SPDX-License-Identifier: BSD-3-Clause
    +;
    +
    +.program pio_serialiser
    +
    +; Just serialise a stream of bits. Take 32 bits from each FIFO record. LSB-first.
    +
    +.wrap_target
    +    out pins, 1
    +.wrap
    +
    +% c-sdk {
    +static inline void pio_serialiser_program_init(PIO pio, uint sm, uint offset, uint data_pin, float clk_div) {
    +    pio_gpio_init(pio, data_pin);
    +    pio_sm_set_consecutive_pindirs(pio, sm, data_pin, 1, true);
    +    pio_sm_config c = pio_serialiser_program_get_default_config(offset);
    +    sm_config_set_out_pins(&c, data_pin, 1);
    +    sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);
    +    sm_config_set_clkdiv(&c, clk_div);
    +    sm_config_set_out_shift(&c, true, true, 32);
    +    pio_sm_init(pio, sm, offset, &c);
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +%}
    diff --git a/src/hal/pio/assembler/comparison_tests/pio_serialiser.pio.h b/src/hal/pio/assembler/comparison_tests/pio_serialiser.pio.h
    new file mode 100644
    index 000000000..062758540
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/pio_serialiser.pio.h
    @@ -0,0 +1,50 @@
    +// -------------------------------------------------- //
    +// This file is autogenerated by pioasm; do not edit! //
    +// -------------------------------------------------- //
    +
    +#pragma once
    +
    +#if !PICO_NO_HARDWARE
    +#include "hardware/pio.h"
    +#endif
    +
    +// -------------- //
    +// pio_serialiser //
    +// -------------- //
    +
    +#define pio_serialiser_wrap_target 0
    +#define pio_serialiser_wrap 0
    +
    +static const uint16_t pio_serialiser_program_instructions[] = {
    +            //     .wrap_target
    +    0x6001, //  0: out    pins, 1                    
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program pio_serialiser_program = {
    +    .instructions = pio_serialiser_program_instructions,
    +    .length = 1,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config pio_serialiser_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + pio_serialiser_wrap_target, offset + pio_serialiser_wrap);
    +    return c;
    +}
    +
    +static inline void pio_serialiser_program_init(PIO pio, uint sm, uint offset, uint data_pin, float clk_div) {
    +    pio_gpio_init(pio, data_pin);
    +    pio_sm_set_consecutive_pindirs(pio, sm, data_pin, 1, true);
    +    pio_sm_config c = pio_serialiser_program_get_default_config(offset);
    +    sm_config_set_out_pins(&c, data_pin, 1);
    +    sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);
    +    sm_config_set_clkdiv(&c, clk_div);
    +    sm_config_set_out_shift(&c, true, true, 32);
    +    pio_sm_init(pio, sm, offset, &c);
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +
    +#endif
    +
    diff --git a/src/hal/pio/assembler/comparison_tests/pwm.pio b/src/hal/pio/assembler/comparison_tests/pwm.pio
    new file mode 100644
    index 000000000..d0f2bcbf2
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/pwm.pio
    @@ -0,0 +1,31 @@
    +;
    +; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    +;
    +; SPDX-License-Identifier: BSD-3-Clause
    +;
    +
    +; Side-set pin 0 is used for PWM output
    +
    +.program pwm
    +.side_set 1 opt
    +
    +    pull noblock    side 0 ; Pull from FIFO to OSR if available, else copy X to OSR.
    +    mov x, osr             ; Copy most-recently-pulled value back to scratch X
    +    mov y, isr             ; ISR contains PWM period. Y used as counter.
    +countloop:
    +    jmp x!=y noset         ; Set pin high if X == Y, keep the two paths length matched
    +    jmp skip        side 1
    +noset:
    +    nop                    ; Single dummy cycle to keep the two paths the same length
    +skip:
    +    jmp y-- countloop      ; Loop until Y hits 0, then pull a fresh PWM value from FIFO
    +
    +% c-sdk {
    +static inline void pwm_program_init(PIO pio, uint sm, uint offset, uint pin) {
    +   pio_gpio_init(pio, pin);
    +   pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, true);
    +   pio_sm_config c = pwm_program_get_default_config(offset);
    +   sm_config_set_sideset_pins(&c, pin);
    +   pio_sm_init(pio, sm, offset, &c);
    +}
    +%}
    diff --git a/src/hal/pio/assembler/comparison_tests/pwm.pio.h b/src/hal/pio/assembler/comparison_tests/pwm.pio.h
    new file mode 100644
    index 000000000..7d738a020
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/pwm.pio.h
    @@ -0,0 +1,53 @@
    +// -------------------------------------------------- //
    +// This file is autogenerated by pioasm; do not edit! //
    +// -------------------------------------------------- //
    +
    +#pragma once
    +
    +#if !PICO_NO_HARDWARE
    +#include "hardware/pio.h"
    +#endif
    +
    +// --- //
    +// pwm //
    +// --- //
    +
    +#define pwm_wrap_target 0
    +#define pwm_wrap 6
    +
    +static const uint16_t pwm_program_instructions[] = {
    +            //     .wrap_target
    +    0x9080, //  0: pull   noblock         side 0     
    +    0xa027, //  1: mov    x, osr                     
    +    0xa046, //  2: mov    y, isr                     
    +    0x00a5, //  3: jmp    x != y, 5                  
    +    0x1806, //  4: jmp    6               side 1     
    +    0xa042, //  5: nop                               
    +    0x0083, //  6: jmp    y--, 3                     
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program pwm_program = {
    +    .instructions = pwm_program_instructions,
    +    .length = 7,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config pwm_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + pwm_wrap_target, offset + pwm_wrap);
    +    sm_config_set_sideset(&c, 2, true, false);
    +    return c;
    +}
    +
    +static inline void pwm_program_init(PIO pio, uint sm, uint offset, uint pin) {
    +   pio_gpio_init(pio, pin);
    +   pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, true);
    +   pio_sm_config c = pwm_program_get_default_config(offset);
    +   sm_config_set_sideset_pins(&c, pin);
    +   pio_sm_init(pio, sm, offset, &c);
    +}
    +
    +#endif
    +
    diff --git a/src/hal/pio/assembler/comparison_tests/quadrature_encoder.pio b/src/hal/pio/assembler/comparison_tests/quadrature_encoder.pio
    new file mode 100644
    index 000000000..d245d4b69
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/quadrature_encoder.pio
    @@ -0,0 +1,165 @@
    +;
    +; Copyright (c) 2021 pmarques-dev @ github
    +;
    +; SPDX-License-Identifier: BSD-3-Clause
    +;
    +
    +.program quadrature_encoder
    +
    +; this code must be loaded into address 0, but at 29 instructions, it probably
    +; wouldn't be able to share space with other programs anyway
    +.origin 0
    +
    +
    +; the code works by running a loop that continuously shifts the 2 phase pins into
    +; ISR and looks at the lower 4 bits to do a computed jump to an instruction that
    +; does the proper "do nothing" | "increment" | "decrement" action for that pin
    +; state change (or no change)
    +
    +; ISR holds the last state of the 2 pins during most of the code. The Y register
    +; keeps the current encoder count and is incremented / decremented according to
    +; the steps sampled
    +
    +; writing any non zero value to the TX FIFO makes the state machine push the
    +; current count to RX FIFO between 6 to 18 clocks afterwards. The worst case
    +; sampling loop takes 14 cycles, so this program is able to read step rates up
    +; to sysclk / 14  (e.g., sysclk 125MHz, max step rate = 8.9 Msteps/sec)
    +
    +
    +; 00 state
    +	JMP update	; read 00
    +	JMP decrement	; read 01
    +	JMP increment	; read 10
    +	JMP update	; read 11
    +
    +; 01 state
    +	JMP increment	; read 00
    +	JMP update	; read 01
    +	JMP update	; read 10
    +	JMP decrement	; read 11
    +
    +; 10 state
    +	JMP decrement	; read 00
    +	JMP update	; read 01
    +	JMP update	; read 10
    +	JMP increment	; read 11
    +
    +; to reduce code size, the last 2 states are implemented in place and become the
    +; target for the other jumps
    +
    +; 11 state
    +	JMP update	; read 00
    +	JMP increment	; read 01
    +decrement:
    +	; note: the target of this instruction must be the next address, so that
    +	; the effect of the instruction does not depend on the value of Y. The
    +	; same is true for the "JMP X--" below. Basically "JMP Y--, "
    +	; is just a pure "decrement Y" instruction, with no other side effects
    +	JMP Y--, update	; read 10
    +
    +	; this is where the main loop starts
    +.wrap_target
    +update:
    +	; we start by checking the TX FIFO to see if the main code is asking for
    +	; the current count after the PULL noblock, OSR will have either 0 if
    +	; there was nothing or the value that was there
    +	SET X, 0
    +	PULL noblock
    +
    +	; since there are not many free registers, and PULL is done into OSR, we
    +	; have to do some juggling to avoid losing the state information and
    +	; still place the values where we need them
    +	MOV X, OSR
    +	MOV OSR, ISR
    +
    +	; the main code did not ask for the count, so just go to "sample_pins"
    +	JMP !X, sample_pins
    +
    +	; if it did ask for the count, then we push it
    +	MOV ISR, Y	; we trash ISR, but we already have a copy in OSR
    +	PUSH
    +
    +sample_pins:
    +	; we shift into ISR the last state of the 2 input pins (now in OSR) and
    +	; the new state of the 2 pins, thus producing the 4 bit target for the
    +	; computed jump into the correct action for this state
    +	MOV ISR, NULL
    +	IN OSR, 2
    +	IN PINS, 2
    +	MOV PC, ISR
    +
    +	; the PIO does not have a increment instruction, so to do that we do a
    +	; negate, decrement, negate sequence
    +increment:
    +	MOV X, !Y
    +	JMP X--, increment_cont
    +increment_cont:
    +	MOV Y, !X
    +.wrap	; the .wrap here avoids one jump instruction and saves a cycle too
    +
    +
    +
    +% c-sdk {
    +
    +#include "hardware/clocks.h"
    +#include "hardware/gpio.h"
    +
    +// max_step_rate is used to lower the clock of the state machine to save power
    +// if the application doesn't require a very high sampling rate. Passing zero
    +// will set the clock to the maximum, which gives a max step rate of around
    +// 8.9 Msteps/sec at 125MHz
    +
    +static inline void quadrature_encoder_program_init(PIO pio, uint sm, uint offset, uint pin, int max_step_rate)
    +{
    +	pio_sm_set_consecutive_pindirs(pio, sm, pin, 2, false);
    +	gpio_pull_up(pin);
    +	gpio_pull_up(pin + 1);
    +
    +	pio_sm_config c = quadrature_encoder_program_get_default_config(offset);
    +	sm_config_set_in_pins(&c, pin); // for WAIT, IN
    +	sm_config_set_jmp_pin(&c, pin); // for JMP
    +	// shift to left, autopull disabled
    +	sm_config_set_in_shift(&c, false, false, 32);
    +	// don't join FIFO's
    +	sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_NONE);
    +
    +	// passing "0" as the sample frequency,
    +	if (max_step_rate == 0) {
    +		sm_config_set_clkdiv(&c, 1.0);
    +	} else {
    +		// one state machine loop takes at most 14 cycles
    +		float div = (float)clock_get_hz(clk_sys) / (14 * max_step_rate);
    +		sm_config_set_clkdiv(&c, div);
    +	}
    +
    +	pio_sm_init(pio, sm, offset, &c);
    +	pio_sm_set_enabled(pio, sm, true);
    +}
    +
    +
    +// When requesting the current count we may have to wait a few cycles (average
    +// ~11 sysclk cycles) for the state machine to reply. If we are reading multiple
    +// encoders, we may request them all in one go and then fetch them all, thus
    +// avoiding doing the wait multiple times. If we are reading just one encoder,
    +// we can use the "get_count" function to request and wait
    +
    +static inline void quadrature_encoder_request_count(PIO pio, uint sm)
    +{
    +	pio->txf[sm] = 1;
    +}
    +
    +static inline int32_t quadrature_encoder_fetch_count(PIO pio, uint sm)
    +{
    +	while (pio_sm_is_rx_fifo_empty(pio, sm))
    +		tight_loop_contents();
    +	return pio->rxf[sm];
    +}
    +
    +static inline int32_t quadrature_encoder_get_count(PIO pio, uint sm)
    +{
    +	quadrature_encoder_request_count(pio, sm);
    +	return quadrature_encoder_fetch_count(pio, sm);
    +}
    +
    +%}
    +
    diff --git a/src/hal/pio/assembler/comparison_tests/quadrature_encoder.pio.h b/src/hal/pio/assembler/comparison_tests/quadrature_encoder.pio.h
    new file mode 100644
    index 000000000..4cc4bb325
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/quadrature_encoder.pio.h
    @@ -0,0 +1,116 @@
    +// -------------------------------------------------- //
    +// This file is autogenerated by pioasm; do not edit! //
    +// -------------------------------------------------- //
    +
    +#pragma once
    +
    +#if !PICO_NO_HARDWARE
    +#include "hardware/pio.h"
    +#endif
    +
    +// ------------------ //
    +// quadrature_encoder //
    +// ------------------ //
    +
    +#define quadrature_encoder_wrap_target 15
    +#define quadrature_encoder_wrap 28
    +
    +static const uint16_t quadrature_encoder_program_instructions[] = {
    +    0x000f, //  0: jmp    15                         
    +    0x000e, //  1: jmp    14                         
    +    0x001a, //  2: jmp    26                         
    +    0x000f, //  3: jmp    15                         
    +    0x001a, //  4: jmp    26                         
    +    0x000f, //  5: jmp    15                         
    +    0x000f, //  6: jmp    15                         
    +    0x000e, //  7: jmp    14                         
    +    0x000e, //  8: jmp    14                         
    +    0x000f, //  9: jmp    15                         
    +    0x000f, // 10: jmp    15                         
    +    0x001a, // 11: jmp    26                         
    +    0x000f, // 12: jmp    15                         
    +    0x001a, // 13: jmp    26                         
    +    0x008f, // 14: jmp    y--, 15                    
    +            //     .wrap_target
    +    0xe020, // 15: set    x, 0                       
    +    0x8080, // 16: pull   noblock                    
    +    0xa027, // 17: mov    x, osr                     
    +    0xa0e6, // 18: mov    osr, isr                   
    +    0x0036, // 19: jmp    !x, 22                     
    +    0xa0c2, // 20: mov    isr, y                     
    +    0x8020, // 21: push   block                      
    +    0xa0c3, // 22: mov    isr, null                  
    +    0x40e2, // 23: in     osr, 2                     
    +    0x4002, // 24: in     pins, 2                    
    +    0xa0a6, // 25: mov    pc, isr                    
    +    0xa02a, // 26: mov    x, !y                      
    +    0x005c, // 27: jmp    x--, 28                    
    +    0xa049, // 28: mov    y, !x                      
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program quadrature_encoder_program = {
    +    .instructions = quadrature_encoder_program_instructions,
    +    .length = 29,
    +    .origin = 0,
    +};
    +
    +static inline pio_sm_config quadrature_encoder_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + quadrature_encoder_wrap_target, offset + quadrature_encoder_wrap);
    +    return c;
    +}
    +
    +#include "hardware/clocks.h"
    +#include "hardware/gpio.h"
    +// max_step_rate is used to lower the clock of the state machine to save power
    +// if the application doesn't require a very high sampling rate. Passing zero
    +// will set the clock to the maximum, which gives a max step rate of around
    +// 8.9 Msteps/sec at 125MHz
    +static inline void quadrature_encoder_program_init(PIO pio, uint sm, uint offset, uint pin, int max_step_rate)
    +{
    +	pio_sm_set_consecutive_pindirs(pio, sm, pin, 2, false);
    +	gpio_pull_up(pin);
    +	gpio_pull_up(pin + 1);
    +	pio_sm_config c = quadrature_encoder_program_get_default_config(offset);
    +	sm_config_set_in_pins(&c, pin); // for WAIT, IN
    +	sm_config_set_jmp_pin(&c, pin); // for JMP
    +	// shift to left, autopull disabled
    +	sm_config_set_in_shift(&c, false, false, 32);
    +	// don't join FIFO's
    +	sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_NONE);
    +	// passing "0" as the sample frequency,
    +	if (max_step_rate == 0) {
    +		sm_config_set_clkdiv(&c, 1.0);
    +	} else {
    +		// one state machine loop takes at most 14 cycles
    +		float div = (float)clock_get_hz(clk_sys) / (14 * max_step_rate);
    +		sm_config_set_clkdiv(&c, div);
    +	}
    +	pio_sm_init(pio, sm, offset, &c);
    +	pio_sm_set_enabled(pio, sm, true);
    +}
    +// When requesting the current count we may have to wait a few cycles (average
    +// ~11 sysclk cycles) for the state machine to reply. If we are reading multiple
    +// encoders, we may request them all in one go and then fetch them all, thus
    +// avoiding doing the wait multiple times. If we are reading just one encoder,
    +// we can use the "get_count" function to request and wait
    +static inline void quadrature_encoder_request_count(PIO pio, uint sm)
    +{
    +	pio->txf[sm] = 1;
    +}
    +static inline int32_t quadrature_encoder_fetch_count(PIO pio, uint sm)
    +{
    +	while (pio_sm_is_rx_fifo_empty(pio, sm))
    +		tight_loop_contents();
    +	return pio->rxf[sm];
    +}
    +static inline int32_t quadrature_encoder_get_count(PIO pio, uint sm)
    +{
    +	quadrature_encoder_request_count(pio, sm);
    +	return quadrature_encoder_fetch_count(pio, sm);
    +}
    +
    +#endif
    +
    diff --git a/src/hal/pio/assembler/comparison_tests/resistor_dac.pio b/src/hal/pio/assembler/comparison_tests/resistor_dac.pio
    new file mode 100644
    index 000000000..2dca1f1d1
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/resistor_dac.pio
    @@ -0,0 +1,38 @@
    +;
    +; Copyright (c) 2021 Raspberry Pi (Trading) Ltd.
    +;
    +; SPDX-License-Identifier: BSD-3-Clause
    +;
    +
    +.program resistor_dac_5bit
    +
    +; Drive one of the 5-bit resistor DACs on the VGA reference board. (this isn't
    +; a good way to do VGA -- just want a nice sawtooth for the ADC example!)
    +
    +    out pins, 5
    +
    +
    +
    +% c-sdk {
    +#include "hardware/clocks.h"
    +static inline void resistor_dac_5bit_program_init(PIO pio, uint sm, uint offset,
    +        uint sample_rate_hz, uint pin_base) {
    +
    +    pio_sm_set_pins_with_mask(pio, sm, 0, 0x1fu << pin_base);
    +    pio_sm_set_pindirs_with_mask(pio, sm, ~0u, 0x1fu << pin_base);
    +    for (int i = 0; i < 5; ++i)
    +        pio_gpio_init(pio, pin_base + i);
    +
    +    pio_sm_config c = resistor_dac_5bit_program_get_default_config(offset);
    +    sm_config_set_out_pins(&c, pin_base, 5);
    +    // Shift to right, autopull threshold 5
    +    sm_config_set_out_shift(&c, true, true, 5);
    +    // Deeper FIFO as we're not doing any RX
    +    sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);
    +    float div = (float)clock_get_hz(clk_sys) / sample_rate_hz;
    +    sm_config_set_clkdiv(&c, div);
    +
    +    pio_sm_init(pio, sm, offset, &c);
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +%}
    diff --git a/src/hal/pio/assembler/comparison_tests/resistor_dac.pio.h b/src/hal/pio/assembler/comparison_tests/resistor_dac.pio.h
    new file mode 100644
    index 000000000..df80791c1
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/resistor_dac.pio.h
    @@ -0,0 +1,57 @@
    +// -------------------------------------------------- //
    +// This file is autogenerated by pioasm; do not edit! //
    +// -------------------------------------------------- //
    +
    +#pragma once
    +
    +#if !PICO_NO_HARDWARE
    +#include "hardware/pio.h"
    +#endif
    +
    +// ----------------- //
    +// resistor_dac_5bit //
    +// ----------------- //
    +
    +#define resistor_dac_5bit_wrap_target 0
    +#define resistor_dac_5bit_wrap 0
    +
    +static const uint16_t resistor_dac_5bit_program_instructions[] = {
    +            //     .wrap_target
    +    0x6005, //  0: out    pins, 5                    
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program resistor_dac_5bit_program = {
    +    .instructions = resistor_dac_5bit_program_instructions,
    +    .length = 1,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config resistor_dac_5bit_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + resistor_dac_5bit_wrap_target, offset + resistor_dac_5bit_wrap);
    +    return c;
    +}
    +
    +#include "hardware/clocks.h"
    +static inline void resistor_dac_5bit_program_init(PIO pio, uint sm, uint offset,
    +        uint sample_rate_hz, uint pin_base) {
    +    pio_sm_set_pins_with_mask(pio, sm, 0, 0x1fu << pin_base);
    +    pio_sm_set_pindirs_with_mask(pio, sm, ~0u, 0x1fu << pin_base);
    +    for (int i = 0; i < 5; ++i)
    +        pio_gpio_init(pio, pin_base + i);
    +    pio_sm_config c = resistor_dac_5bit_program_get_default_config(offset);
    +    sm_config_set_out_pins(&c, pin_base, 5);
    +    // Shift to right, autopull threshold 5
    +    sm_config_set_out_shift(&c, true, true, 5);
    +    // Deeper FIFO as we're not doing any RX
    +    sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);
    +    float div = (float)clock_get_hz(clk_sys) / sample_rate_hz;
    +    sm_config_set_clkdiv(&c, div);
    +    pio_sm_init(pio, sm, offset, &c);
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +
    +#endif
    +
    diff --git a/src/hal/pio/assembler/comparison_tests/spi.pio b/src/hal/pio/assembler/comparison_tests/spi.pio
    new file mode 100644
    index 000000000..eba785eaa
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/spi.pio
    @@ -0,0 +1,168 @@
    +;
    +; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    +;
    +; SPDX-License-Identifier: BSD-3-Clause
    +;
    +
    +; These programs implement full-duplex SPI, with a SCK period of 4 clock
    +; cycles. A different program is provided for each value of CPHA, and CPOL is
    +; achieved using the hardware GPIO inversion available in the IO controls.
    +;
    +; Transmit-only SPI can go twice as fast -- see the ST7789 example!
    +
    +
    +.program spi_cpha0
    +.side_set 1
    +
    +; Pin assignments:
    +; - SCK is side-set pin 0
    +; - MOSI is OUT pin 0
    +; - MISO is IN pin 0
    +;
    +; Autopush and autopull must be enabled, and the serial frame size is set by
    +; configuring the push/pull threshold. Shift left/right is fine, but you must
    +; justify the data yourself. This is done most conveniently for frame sizes of
    +; 8 or 16 bits by using the narrow store replication and narrow load byte
    +; picking behaviour of RP2040's IO fabric.
    +
    +; Clock phase = 0: data is captured on the leading edge of each SCK pulse, and
    +; transitions on the trailing edge, or some time before the first leading edge.
    +
    +    out pins, 1 side 0 [1] ; Stall here on empty (sideset proceeds even if
    +    in pins, 1  side 1 [1] ; instruction stalls, so we stall with SCK low)
    +
    +.program spi_cpha1
    +.side_set 1
    +
    +; Clock phase = 1: data transitions on the leading edge of each SCK pulse, and
    +; is captured on the trailing edge.
    +
    +    out x, 1    side 0     ; Stall here on empty (keep SCK deasserted)
    +    mov pins, x side 1 [1] ; Output data, assert SCK (mov pins uses OUT mapping)
    +    in pins, 1  side 0     ; Input data, deassert SCK
    +
    +% c-sdk {
    +#include "hardware/gpio.h"
    +static inline void pio_spi_init(PIO pio, uint sm, uint prog_offs, uint n_bits,
    +        float clkdiv, bool cpha, bool cpol, uint pin_sck, uint pin_mosi, uint pin_miso) {
    +    pio_sm_config c = cpha ? spi_cpha1_program_get_default_config(prog_offs) : spi_cpha0_program_get_default_config(prog_offs);
    +    sm_config_set_out_pins(&c, pin_mosi, 1);
    +    sm_config_set_in_pins(&c, pin_miso);
    +    sm_config_set_sideset_pins(&c, pin_sck);
    +    // Only support MSB-first in this example code (shift to left, auto push/pull, threshold=nbits)
    +    sm_config_set_out_shift(&c, false, true, n_bits);
    +    sm_config_set_in_shift(&c, false, true, n_bits);
    +    sm_config_set_clkdiv(&c, clkdiv);
    +
    +    // MOSI, SCK output are low, MISO is input
    +    pio_sm_set_pins_with_mask(pio, sm, 0, (1u << pin_sck) | (1u << pin_mosi));
    +    pio_sm_set_pindirs_with_mask(pio, sm, (1u << pin_sck) | (1u << pin_mosi), (1u << pin_sck) | (1u << pin_mosi) | (1u << pin_miso));
    +    pio_gpio_init(pio, pin_mosi);
    +    pio_gpio_init(pio, pin_miso);
    +    pio_gpio_init(pio, pin_sck);
    +
    +    // The pin muxes can be configured to invert the output (among other things
    +    // and this is a cheesy way to get CPOL=1
    +    gpio_set_outover(pin_sck, cpol ? GPIO_OVERRIDE_INVERT : GPIO_OVERRIDE_NORMAL);
    +    // SPI is synchronous, so bypass input synchroniser to reduce input delay.
    +    hw_set_bits(&pio->input_sync_bypass, 1u << pin_miso);
    +
    +    pio_sm_init(pio, sm, prog_offs, &c);
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +%}
    +
    +; SPI with Chip Select
    +; -----------------------------------------------------------------------------
    +;
    +; For your amusement, here are some SPI programs with an automatic chip select
    +; (asserted once data appears in TX FIFO, deasserts when FIFO bottoms out, has
    +; a nice front/back porch).
    +;
    +; The number of bits per FIFO entry is configured via the Y register
    +; and the autopush/pull threshold. From 2 to 32 bits.
    +;
    +; Pin assignments:
    +; - SCK is side-set bit 0
    +; - CSn is side-set bit 1
    +; - MOSI is OUT bit 0 (host-to-device)
    +; - MISO is IN bit 0 (device-to-host)
    +;
    +; This program only supports one chip select -- use GPIO if more are needed
    +;
    +; Provide a variation for each possibility of CPHA; for CPOL we can just
    +; invert SCK in the IO muxing controls (downstream from PIO)
    +
    +
    +; CPHA=0: data is captured on the leading edge of each SCK pulse (including
    +; the first pulse), and transitions on the trailing edge
    +
    +.program spi_cpha0_cs
    +.side_set 2
    +
    +.wrap_target
    +bitloop:
    +    out pins, 1        side 0x0 [1]
    +    in pins, 1         side 0x1
    +    jmp x-- bitloop    side 0x1
    +
    +    out pins, 1        side 0x0
    +    mov x, y           side 0x0     ; Reload bit counter from Y
    +    in pins, 1         side 0x1
    +    jmp !osre bitloop  side 0x1     ; Fall-through if TXF empties
    +
    +    nop                side 0x0 [1] ; CSn back porch
    +public entry_point:                 ; Must set X,Y to n-2 before starting!
    +    pull ifempty       side 0x2 [1] ; Block with CSn high (minimum 2 cycles)
    +.wrap                               ; Note ifempty to avoid time-of-check race
    +
    +; CPHA=1: data transitions on the leading edge of each SCK pulse, and is
    +; captured on the trailing edge
    +
    +.program spi_cpha1_cs
    +.side_set 2
    +
    +.wrap_target
    +bitloop:
    +    out pins, 1        side 0x1 [1]
    +    in pins, 1         side 0x0
    +    jmp x-- bitloop    side 0x0
    +
    +    out pins, 1        side 0x1
    +    mov x, y           side 0x1
    +    in pins, 1         side 0x0
    +    jmp !osre bitloop  side 0x0
    +
    +public entry_point:                 ; Must set X,Y to n-2 before starting!
    +    pull ifempty       side 0x2 [1] ; Block with CSn high (minimum 2 cycles)
    +    nop                side 0x0 [1]; CSn front porch
    +.wrap
    +
    +% c-sdk {
    +#include "hardware/gpio.h"
    +static inline void pio_spi_cs_init(PIO pio, uint sm, uint prog_offs, uint n_bits, float clkdiv, bool cpha, bool cpol,
    +        uint pin_sck, uint pin_mosi, uint pin_miso) {
    +    pio_sm_config c = cpha ? spi_cpha1_cs_program_get_default_config(prog_offs) : spi_cpha0_cs_program_get_default_config(prog_offs);
    +    sm_config_set_out_pins(&c, pin_mosi, 1);
    +    sm_config_set_in_pins(&c, pin_miso);
    +    sm_config_set_sideset_pins(&c, pin_sck);
    +    sm_config_set_out_shift(&c, false, true, n_bits);
    +    sm_config_set_in_shift(&c, false, true, n_bits);
    +    sm_config_set_clkdiv(&c, clkdiv);
    +
    +    pio_sm_set_pins_with_mask(pio, sm, (2u << pin_sck), (3u << pin_sck) | (1u << pin_mosi));
    +    pio_sm_set_pindirs_with_mask(pio, sm, (3u << pin_sck) | (1u << pin_mosi), (3u << pin_sck) | (1u << pin_mosi) | (1u << pin_miso));
    +    pio_gpio_init(pio, pin_mosi);
    +    pio_gpio_init(pio, pin_miso);
    +    pio_gpio_init(pio, pin_sck);
    +    pio_gpio_init(pio, pin_sck + 1);
    +    gpio_set_outover(pin_sck, cpol ? GPIO_OVERRIDE_INVERT : GPIO_OVERRIDE_NORMAL);
    +    hw_set_bits(&pio->input_sync_bypass, 1u << pin_miso);
    +
    +    uint entry_point = prog_offs + (cpha ? spi_cpha1_cs_offset_entry_point : spi_cpha0_cs_offset_entry_point);
    +    pio_sm_init(pio, sm, entry_point, &c);
    +    pio_sm_exec(pio, sm, pio_encode_set(pio_x, n_bits - 2));
    +    pio_sm_exec(pio, sm, pio_encode_set(pio_y, n_bits - 2));
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +%}
    diff --git a/src/hal/pio/assembler/comparison_tests/spi.pio.h b/src/hal/pio/assembler/comparison_tests/spi.pio.h
    new file mode 100644
    index 000000000..22aa805a0
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/spi.pio.h
    @@ -0,0 +1,198 @@
    +// -------------------------------------------------- //
    +// This file is autogenerated by pioasm; do not edit! //
    +// -------------------------------------------------- //
    +
    +#pragma once
    +
    +#if !PICO_NO_HARDWARE
    +#include "hardware/pio.h"
    +#endif
    +
    +// --------- //
    +// spi_cpha0 //
    +// --------- //
    +
    +#define spi_cpha0_wrap_target 0
    +#define spi_cpha0_wrap 1
    +
    +static const uint16_t spi_cpha0_program_instructions[] = {
    +            //     .wrap_target
    +    0x6101, //  0: out    pins, 1         side 0 [1] 
    +    0x5101, //  1: in     pins, 1         side 1 [1] 
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program spi_cpha0_program = {
    +    .instructions = spi_cpha0_program_instructions,
    +    .length = 2,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config spi_cpha0_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + spi_cpha0_wrap_target, offset + spi_cpha0_wrap);
    +    sm_config_set_sideset(&c, 1, false, false);
    +    return c;
    +}
    +#endif
    +
    +// --------- //
    +// spi_cpha1 //
    +// --------- //
    +
    +#define spi_cpha1_wrap_target 0
    +#define spi_cpha1_wrap 2
    +
    +static const uint16_t spi_cpha1_program_instructions[] = {
    +            //     .wrap_target
    +    0x6021, //  0: out    x, 1            side 0     
    +    0xb101, //  1: mov    pins, x         side 1 [1] 
    +    0x4001, //  2: in     pins, 1         side 0     
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program spi_cpha1_program = {
    +    .instructions = spi_cpha1_program_instructions,
    +    .length = 3,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config spi_cpha1_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + spi_cpha1_wrap_target, offset + spi_cpha1_wrap);
    +    sm_config_set_sideset(&c, 1, false, false);
    +    return c;
    +}
    +
    +#include "hardware/gpio.h"
    +static inline void pio_spi_init(PIO pio, uint sm, uint prog_offs, uint n_bits,
    +        float clkdiv, bool cpha, bool cpol, uint pin_sck, uint pin_mosi, uint pin_miso) {
    +    pio_sm_config c = cpha ? spi_cpha1_program_get_default_config(prog_offs) : spi_cpha0_program_get_default_config(prog_offs);
    +    sm_config_set_out_pins(&c, pin_mosi, 1);
    +    sm_config_set_in_pins(&c, pin_miso);
    +    sm_config_set_sideset_pins(&c, pin_sck);
    +    // Only support MSB-first in this example code (shift to left, auto push/pull, threshold=nbits)
    +    sm_config_set_out_shift(&c, false, true, n_bits);
    +    sm_config_set_in_shift(&c, false, true, n_bits);
    +    sm_config_set_clkdiv(&c, clkdiv);
    +    // MOSI, SCK output are low, MISO is input
    +    pio_sm_set_pins_with_mask(pio, sm, 0, (1u << pin_sck) | (1u << pin_mosi));
    +    pio_sm_set_pindirs_with_mask(pio, sm, (1u << pin_sck) | (1u << pin_mosi), (1u << pin_sck) | (1u << pin_mosi) | (1u << pin_miso));
    +    pio_gpio_init(pio, pin_mosi);
    +    pio_gpio_init(pio, pin_miso);
    +    pio_gpio_init(pio, pin_sck);
    +    // The pin muxes can be configured to invert the output (among other things
    +    // and this is a cheesy way to get CPOL=1
    +    gpio_set_outover(pin_sck, cpol ? GPIO_OVERRIDE_INVERT : GPIO_OVERRIDE_NORMAL);
    +    // SPI is synchronous, so bypass input synchroniser to reduce input delay.
    +    hw_set_bits(&pio->input_sync_bypass, 1u << pin_miso);
    +    pio_sm_init(pio, sm, prog_offs, &c);
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +
    +#endif
    +
    +// ------------ //
    +// spi_cpha0_cs //
    +// ------------ //
    +
    +#define spi_cpha0_cs_wrap_target 0
    +#define spi_cpha0_cs_wrap 8
    +
    +#define spi_cpha0_cs_offset_entry_point 8u
    +
    +static const uint16_t spi_cpha0_cs_program_instructions[] = {
    +            //     .wrap_target
    +    0x6101, //  0: out    pins, 1         side 0 [1] 
    +    0x4801, //  1: in     pins, 1         side 1     
    +    0x0840, //  2: jmp    x--, 0          side 1     
    +    0x6001, //  3: out    pins, 1         side 0     
    +    0xa022, //  4: mov    x, y            side 0     
    +    0x4801, //  5: in     pins, 1         side 1     
    +    0x08e0, //  6: jmp    !osre, 0        side 1     
    +    0xa142, //  7: nop                    side 0 [1] 
    +    0x91e0, //  8: pull   ifempty block   side 2 [1] 
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program spi_cpha0_cs_program = {
    +    .instructions = spi_cpha0_cs_program_instructions,
    +    .length = 9,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config spi_cpha0_cs_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + spi_cpha0_cs_wrap_target, offset + spi_cpha0_cs_wrap);
    +    sm_config_set_sideset(&c, 2, false, false);
    +    return c;
    +}
    +#endif
    +
    +// ------------ //
    +// spi_cpha1_cs //
    +// ------------ //
    +
    +#define spi_cpha1_cs_wrap_target 0
    +#define spi_cpha1_cs_wrap 8
    +
    +#define spi_cpha1_cs_offset_entry_point 7u
    +
    +static const uint16_t spi_cpha1_cs_program_instructions[] = {
    +            //     .wrap_target
    +    0x6901, //  0: out    pins, 1         side 1 [1] 
    +    0x4001, //  1: in     pins, 1         side 0     
    +    0x0040, //  2: jmp    x--, 0          side 0     
    +    0x6801, //  3: out    pins, 1         side 1     
    +    0xa822, //  4: mov    x, y            side 1     
    +    0x4001, //  5: in     pins, 1         side 0     
    +    0x00e0, //  6: jmp    !osre, 0        side 0     
    +    0x91e0, //  7: pull   ifempty block   side 2 [1] 
    +    0xa142, //  8: nop                    side 0 [1] 
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program spi_cpha1_cs_program = {
    +    .instructions = spi_cpha1_cs_program_instructions,
    +    .length = 9,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config spi_cpha1_cs_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + spi_cpha1_cs_wrap_target, offset + spi_cpha1_cs_wrap);
    +    sm_config_set_sideset(&c, 2, false, false);
    +    return c;
    +}
    +
    +#include "hardware/gpio.h"
    +static inline void pio_spi_cs_init(PIO pio, uint sm, uint prog_offs, uint n_bits, float clkdiv, bool cpha, bool cpol,
    +        uint pin_sck, uint pin_mosi, uint pin_miso) {
    +    pio_sm_config c = cpha ? spi_cpha1_cs_program_get_default_config(prog_offs) : spi_cpha0_cs_program_get_default_config(prog_offs);
    +    sm_config_set_out_pins(&c, pin_mosi, 1);
    +    sm_config_set_in_pins(&c, pin_miso);
    +    sm_config_set_sideset_pins(&c, pin_sck);
    +    sm_config_set_out_shift(&c, false, true, n_bits);
    +    sm_config_set_in_shift(&c, false, true, n_bits);
    +    sm_config_set_clkdiv(&c, clkdiv);
    +    pio_sm_set_pins_with_mask(pio, sm, (2u << pin_sck), (3u << pin_sck) | (1u << pin_mosi));
    +    pio_sm_set_pindirs_with_mask(pio, sm, (3u << pin_sck) | (1u << pin_mosi), (3u << pin_sck) | (1u << pin_mosi) | (1u << pin_miso));
    +    pio_gpio_init(pio, pin_mosi);
    +    pio_gpio_init(pio, pin_miso);
    +    pio_gpio_init(pio, pin_sck);
    +    pio_gpio_init(pio, pin_sck + 1);
    +    gpio_set_outover(pin_sck, cpol ? GPIO_OVERRIDE_INVERT : GPIO_OVERRIDE_NORMAL);
    +    hw_set_bits(&pio->input_sync_bypass, 1u << pin_miso);
    +    uint entry_point = prog_offs + (cpha ? spi_cpha1_cs_offset_entry_point : spi_cpha0_cs_offset_entry_point);
    +    pio_sm_init(pio, sm, entry_point, &c);
    +    pio_sm_exec(pio, sm, pio_encode_set(pio_x, n_bits - 2));
    +    pio_sm_exec(pio, sm, pio_encode_set(pio_y, n_bits - 2));
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +
    +#endif
    +
    diff --git a/src/hal/pio/assembler/comparison_tests/squarewave.pio b/src/hal/pio/assembler/comparison_tests/squarewave.pio
    new file mode 100644
    index 000000000..405c89972
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/squarewave.pio
    @@ -0,0 +1,13 @@
    +;
    +; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    +;
    +; SPDX-License-Identifier: BSD-3-Clause
    +;
    +
    +.program squarewave
    +    set pindirs, 1   ; Set pin to output
    +again:
    +    set pins, 1 [1]  ; Drive pin high and then delay for one cycle
    +    set pins, 0      ; Drive pin low
    +    jmp again        ; Set PC to label `again`
    +
    diff --git a/src/hal/pio/assembler/comparison_tests/squarewave.pio.h b/src/hal/pio/assembler/comparison_tests/squarewave.pio.h
    new file mode 100644
    index 000000000..9ec7ea659
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/squarewave.pio.h
    @@ -0,0 +1,40 @@
    +// -------------------------------------------------- //
    +// This file is autogenerated by pioasm; do not edit! //
    +// -------------------------------------------------- //
    +
    +#pragma once
    +
    +#if !PICO_NO_HARDWARE
    +#include "hardware/pio.h"
    +#endif
    +
    +// ---------- //
    +// squarewave //
    +// ---------- //
    +
    +#define squarewave_wrap_target 0
    +#define squarewave_wrap 3
    +
    +static const uint16_t squarewave_program_instructions[] = {
    +            //     .wrap_target
    +    0xe081, //  0: set    pindirs, 1                 
    +    0xe101, //  1: set    pins, 1                [1] 
    +    0xe000, //  2: set    pins, 0                    
    +    0x0001, //  3: jmp    1                          
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program squarewave_program = {
    +    .instructions = squarewave_program_instructions,
    +    .length = 4,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config squarewave_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + squarewave_wrap_target, offset + squarewave_wrap);
    +    return c;
    +}
    +#endif
    +
    diff --git a/src/hal/pio/assembler/comparison_tests/squarewave_fast.pio b/src/hal/pio/assembler/comparison_tests/squarewave_fast.pio
    new file mode 100644
    index 000000000..26162fadb
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/squarewave_fast.pio
    @@ -0,0 +1,19 @@
    +;
    +; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    +;
    +; SPDX-License-Identifier: BSD-3-Clause
    +;
    +
    +; Note that if you modify squarewave.c to include this program, you'll also
    +; need to set the wrap registers yourself. This would be handled for you by
    +; squarewave_program_get_default_config().
    +
    +
    +.program squarewave_fast
    +; Like squarewave_wrap, but remove the delay cycles so we can run twice as fast.
    +    set pindirs, 1   ; Set pin to output
    +.wrap_target
    +	set pins, 1      ; Drive pin high
    +	set pins, 0      ; Drive pin low
    +.wrap
    +
    diff --git a/src/hal/pio/assembler/comparison_tests/squarewave_fast.pio.h b/src/hal/pio/assembler/comparison_tests/squarewave_fast.pio.h
    new file mode 100644
    index 000000000..686209cd3
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/squarewave_fast.pio.h
    @@ -0,0 +1,39 @@
    +// -------------------------------------------------- //
    +// This file is autogenerated by pioasm; do not edit! //
    +// -------------------------------------------------- //
    +
    +#pragma once
    +
    +#if !PICO_NO_HARDWARE
    +#include "hardware/pio.h"
    +#endif
    +
    +// --------------- //
    +// squarewave_fast //
    +// --------------- //
    +
    +#define squarewave_fast_wrap_target 1
    +#define squarewave_fast_wrap 2
    +
    +static const uint16_t squarewave_fast_program_instructions[] = {
    +    0xe081, //  0: set    pindirs, 1                 
    +            //     .wrap_target
    +    0xe001, //  1: set    pins, 1                    
    +    0xe000, //  2: set    pins, 0                    
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program squarewave_fast_program = {
    +    .instructions = squarewave_fast_program_instructions,
    +    .length = 3,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config squarewave_fast_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + squarewave_fast_wrap_target, offset + squarewave_fast_wrap);
    +    return c;
    +}
    +#endif
    +
    diff --git a/src/hal/pio/assembler/comparison_tests/squarewave_test.pio b/src/hal/pio/assembler/comparison_tests/squarewave_test.pio
    new file mode 100644
    index 000000000..1b3e2904f
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/squarewave_test.pio
    @@ -0,0 +1,12 @@
    +;
    +; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    +;
    +; SPDX-License-Identifier: BSD-3-Clause
    +;
    +
    +.program squarewave
    +set pindirs, 1   ; Set pin to output
    +again: set pins, 1 [1]  ; Drive pin high and then delay for one cycle
    +    set pins, 0      ; Drive pin low
    +    jmp again        ; Set PC to label `again`
    +
    diff --git a/src/hal/pio/assembler/comparison_tests/squarewave_wrap.pio b/src/hal/pio/assembler/comparison_tests/squarewave_wrap.pio
    new file mode 100644
    index 000000000..100f09cf1
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/squarewave_wrap.pio
    @@ -0,0 +1,19 @@
    +;
    +; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    +;
    +; SPDX-License-Identifier: BSD-3-Clause
    +;
    +
    +; Note that if you modify squarewave.c to include this program, you'll also
    +; need to set the wrap registers yourself. This would be handled for you by
    +; squarewave_program_get_default_config().
    +
    +.program squarewave_wrap
    +; Like squarewave, but use the state machine's .wrap hardware instead of an
    +; explicit jmp. This is a free (0-cycle) unconditional jump.
    +
    +    set pindirs, 1   ; Set pin to output
    +.wrap_target
    +	set pins, 1 [1]  ; Drive pin high and then delay for one cycle
    +	set pins, 0 [1]  ; Drive pin low and then delay for one cycle
    +.wrap
    diff --git a/src/hal/pio/assembler/comparison_tests/squarewave_wrap.pio.h b/src/hal/pio/assembler/comparison_tests/squarewave_wrap.pio.h
    new file mode 100644
    index 000000000..ff90703ce
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/squarewave_wrap.pio.h
    @@ -0,0 +1,39 @@
    +// -------------------------------------------------- //
    +// This file is autogenerated by pioasm; do not edit! //
    +// -------------------------------------------------- //
    +
    +#pragma once
    +
    +#if !PICO_NO_HARDWARE
    +#include "hardware/pio.h"
    +#endif
    +
    +// --------------- //
    +// squarewave_wrap //
    +// --------------- //
    +
    +#define squarewave_wrap_wrap_target 1
    +#define squarewave_wrap_wrap 2
    +
    +static const uint16_t squarewave_wrap_program_instructions[] = {
    +    0xe081, //  0: set    pindirs, 1                 
    +            //     .wrap_target
    +    0xe101, //  1: set    pins, 1                [1] 
    +    0xe100, //  2: set    pins, 0                [1] 
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program squarewave_wrap_program = {
    +    .instructions = squarewave_wrap_program_instructions,
    +    .length = 3,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config squarewave_wrap_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + squarewave_wrap_wrap_target, offset + squarewave_wrap_wrap);
    +    return c;
    +}
    +#endif
    +
    diff --git a/src/hal/pio/assembler/comparison_tests/st7789_lcd.pio b/src/hal/pio/assembler/comparison_tests/st7789_lcd.pio
    new file mode 100644
    index 000000000..aa35c683f
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/st7789_lcd.pio
    @@ -0,0 +1,57 @@
    +;
    +; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    +;
    +; SPDX-License-Identifier: BSD-3-Clause
    +;
    +
    +.program st7789_lcd
    +.side_set 1
    +
    +; This is just a simple clocked serial TX. At 125 MHz system clock we can
    +; sustain up to 62.5 Mbps.
    +; Data on OUT pin 0
    +; Clock on side-set pin 0
    +
    +.wrap_target
    +    out pins, 1   side 0 ; stall here if no data (clock low)
    +    nop           side 1
    +.wrap
    +
    +% c-sdk {
    +// For optimal use of DMA bandwidth we would use an autopull threshold of 32,
    +// but we are using a threshold of 8 here (consume 1 byte from each FIFO entry
    +// and discard the remainder) to make things easier for software on the other side
    +
    +static inline void st7789_lcd_program_init(PIO pio, uint sm, uint offset, uint data_pin, uint clk_pin, float clk_div) {
    +    pio_gpio_init(pio, data_pin);
    +    pio_gpio_init(pio, clk_pin);
    +    pio_sm_set_consecutive_pindirs(pio, sm, data_pin, 1, true);
    +    pio_sm_set_consecutive_pindirs(pio, sm, clk_pin, 1, true);
    +    pio_sm_config c = st7789_lcd_program_get_default_config(offset);
    +    sm_config_set_sideset_pins(&c, clk_pin);
    +    sm_config_set_out_pins(&c, data_pin, 1);
    +    sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);
    +    sm_config_set_clkdiv(&c, clk_div);
    +    sm_config_set_out_shift(&c, false, true, 8);
    +    pio_sm_init(pio, sm, offset, &c);
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +
    +// Making use of the narrow store replication behaviour on RP2040 to get the
    +// data left-justified (as we are using shift-to-left to get MSB-first serial)
    +
    +static inline void st7789_lcd_put(PIO pio, uint sm, uint8_t x) {
    +    while (pio_sm_is_tx_fifo_full(pio, sm))
    +        ;
    +    *(volatile uint8_t*)&pio->txf[sm] = x;
    +}
    +
    +// SM is done when it stalls on an empty FIFO
    +
    +static inline void st7789_lcd_wait_idle(PIO pio, uint sm) {
    +    uint32_t sm_stall_mask = 1u << (sm + PIO_FDEBUG_TXSTALL_LSB);
    +    pio->fdebug = sm_stall_mask;
    +    while (!(pio->fdebug & sm_stall_mask))
    +        ;
    +}
    +%}
    diff --git a/src/hal/pio/assembler/comparison_tests/st7789_lcd.pio.h b/src/hal/pio/assembler/comparison_tests/st7789_lcd.pio.h
    new file mode 100644
    index 000000000..c77167ea2
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/st7789_lcd.pio.h
    @@ -0,0 +1,72 @@
    +// -------------------------------------------------- //
    +// This file is autogenerated by pioasm; do not edit! //
    +// -------------------------------------------------- //
    +
    +#pragma once
    +
    +#if !PICO_NO_HARDWARE
    +#include "hardware/pio.h"
    +#endif
    +
    +// ---------- //
    +// st7789_lcd //
    +// ---------- //
    +
    +#define st7789_lcd_wrap_target 0
    +#define st7789_lcd_wrap 1
    +
    +static const uint16_t st7789_lcd_program_instructions[] = {
    +            //     .wrap_target
    +    0x6001, //  0: out    pins, 1         side 0     
    +    0xb042, //  1: nop                    side 1     
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program st7789_lcd_program = {
    +    .instructions = st7789_lcd_program_instructions,
    +    .length = 2,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config st7789_lcd_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + st7789_lcd_wrap_target, offset + st7789_lcd_wrap);
    +    sm_config_set_sideset(&c, 1, false, false);
    +    return c;
    +}
    +
    +// For optimal use of DMA bandwidth we would use an autopull threshold of 32,
    +// but we are using a threshold of 8 here (consume 1 byte from each FIFO entry
    +// and discard the remainder) to make things easier for software on the other side
    +static inline void st7789_lcd_program_init(PIO pio, uint sm, uint offset, uint data_pin, uint clk_pin, float clk_div) {
    +    pio_gpio_init(pio, data_pin);
    +    pio_gpio_init(pio, clk_pin);
    +    pio_sm_set_consecutive_pindirs(pio, sm, data_pin, 1, true);
    +    pio_sm_set_consecutive_pindirs(pio, sm, clk_pin, 1, true);
    +    pio_sm_config c = st7789_lcd_program_get_default_config(offset);
    +    sm_config_set_sideset_pins(&c, clk_pin);
    +    sm_config_set_out_pins(&c, data_pin, 1);
    +    sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);
    +    sm_config_set_clkdiv(&c, clk_div);
    +    sm_config_set_out_shift(&c, false, true, 8);
    +    pio_sm_init(pio, sm, offset, &c);
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +// Making use of the narrow store replication behaviour on RP2040 to get the
    +// data left-justified (as we are using shift-to-left to get MSB-first serial)
    +static inline void st7789_lcd_put(PIO pio, uint sm, uint8_t x) {
    +    while (pio_sm_is_tx_fifo_full(pio, sm))
    +        ;
    +    *(volatile uint8_t*)&pio->txf[sm] = x;
    +}
    +// SM is done when it stalls on an empty FIFO
    +static inline void st7789_lcd_wait_idle(PIO pio, uint sm) {
    +    uint32_t sm_stall_mask = 1u << (sm + PIO_FDEBUG_TXSTALL_LSB);
    +    pio->fdebug = sm_stall_mask;
    +    while (!(pio->fdebug & sm_stall_mask))
    +        ;
    +}
    +
    +#endif
    +
    diff --git a/src/hal/pio/assembler/comparison_tests/uart_rx.pio b/src/hal/pio/assembler/comparison_tests/uart_rx.pio
    new file mode 100644
    index 000000000..54a6577c1
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/uart_rx.pio
    @@ -0,0 +1,94 @@
    +;
    +; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    +;
    +; SPDX-License-Identifier: BSD-3-Clause
    +;
    +
    +.program uart_rx_mini
    +
    +; Minimum viable 8n1 UART receiver. Wait for the start bit, then sample 8 bits
    +; with the correct timing.
    +; IN pin 0 is mapped to the GPIO used as UART RX.
    +; Autopush must be enabled, with a threshold of 8.
    +
    +    wait 0 pin 0        ; Wait for start bit
    +    set x, 7 [10]       ; Preload bit counter, delay until eye of first data bit
    +bitloop:                ; Loop 8 times
    +    in pins, 1          ; Sample data
    +    jmp x-- bitloop [6] ; Each iteration is 8 cycles
    +
    +% c-sdk {
    +#include "hardware/clocks.h"
    +#include "hardware/gpio.h"
    +
    +static inline void uart_rx_mini_program_init(PIO pio, uint sm, uint offset, uint pin, uint baud) {
    +    pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, false);
    +    pio_gpio_init(pio, pin);
    +    gpio_pull_up(pin);
    +
    +    pio_sm_config c = uart_rx_mini_program_get_default_config(offset);
    +    sm_config_set_in_pins(&c, pin); // for WAIT, IN
    +    // Shift to right, autopush enabled
    +    sm_config_set_in_shift(&c, true, true, 8);
    +    sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_RX);
    +    // SM transmits 1 bit per 8 execution cycles.
    +    float div = (float)clock_get_hz(clk_sys) / (8 * baud);
    +    sm_config_set_clkdiv(&c, div);
    +    
    +    pio_sm_init(pio, sm, offset, &c);
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +%}
    +
    +.program uart_rx
    +
    +; Slightly more fleshed-out 8n1 UART receiver which handles framing errors and
    +; break conditions more gracefully.
    +; IN pin 0 and JMP pin are both mapped to the GPIO used as UART RX.
    +
    +start:
    +    wait 0 pin 0        ; Stall until start bit is asserted
    +    set x, 7    [10]    ; Preload bit counter, then delay until halfway through
    +bitloop:                ; the first data bit (12 cycles incl wait, set).
    +    in pins, 1          ; Shift data bit into ISR
    +    jmp x-- bitloop [6] ; Loop 8 times, each loop iteration is 8 cycles
    +    jmp pin good_stop   ; Check stop bit (should be high)
    +
    +    irq 4 rel           ; Either a framing error or a break. Set a sticky flag,
    +    wait 1 pin 0        ; and wait for line to return to idle state.
    +    jmp start           ; Don't push data if we didn't see good framing.
    +
    +good_stop:              ; No delay before returning to start; a little slack is
    +    push                ; important in case the TX clock is slightly too fast.
    +
    +
    +% c-sdk {
    +static inline void uart_rx_program_init(PIO pio, uint sm, uint offset, uint pin, uint baud) {
    +    pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, false);
    +    pio_gpio_init(pio, pin);
    +    gpio_pull_up(pin);
    +
    +    pio_sm_config c = uart_rx_program_get_default_config(offset);
    +    sm_config_set_in_pins(&c, pin); // for WAIT, IN
    +    sm_config_set_jmp_pin(&c, pin); // for JMP
    +    // Shift to right, autopush disabled
    +    sm_config_set_in_shift(&c, true, false, 32);
    +    // Deeper FIFO as we're not doing any TX
    +    sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_RX);
    +    // SM transmits 1 bit per 8 execution cycles.
    +    float div = (float)clock_get_hz(clk_sys) / (8 * baud);
    +    sm_config_set_clkdiv(&c, div);
    +    
    +    pio_sm_init(pio, sm, offset, &c);
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +
    +static inline char uart_rx_program_getc(PIO pio, uint sm) {
    +    // 8-bit read from the uppermost byte of the FIFO, as data is left-justified
    +    io_rw_8 *rxfifo_shift = (io_rw_8*)&pio->rxf[sm] + 3;
    +    while (pio_sm_is_rx_fifo_empty(pio, sm))
    +        tight_loop_contents();
    +    return (char)*rxfifo_shift;
    +}
    +
    +%}
    diff --git a/src/hal/pio/assembler/comparison_tests/uart_rx.pio.h b/src/hal/pio/assembler/comparison_tests/uart_rx.pio.h
    new file mode 100644
    index 000000000..b6b5da611
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/uart_rx.pio.h
    @@ -0,0 +1,120 @@
    +// -------------------------------------------------- //
    +// This file is autogenerated by pioasm; do not edit! //
    +// -------------------------------------------------- //
    +
    +#pragma once
    +
    +#if !PICO_NO_HARDWARE
    +#include "hardware/pio.h"
    +#endif
    +
    +// ------------ //
    +// uart_rx_mini //
    +// ------------ //
    +
    +#define uart_rx_mini_wrap_target 0
    +#define uart_rx_mini_wrap 3
    +
    +static const uint16_t uart_rx_mini_program_instructions[] = {
    +            //     .wrap_target
    +    0x2020, //  0: wait   0 pin, 0                   
    +    0xea27, //  1: set    x, 7                   [10]
    +    0x4001, //  2: in     pins, 1                    
    +    0x0642, //  3: jmp    x--, 2                 [6] 
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program uart_rx_mini_program = {
    +    .instructions = uart_rx_mini_program_instructions,
    +    .length = 4,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config uart_rx_mini_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + uart_rx_mini_wrap_target, offset + uart_rx_mini_wrap);
    +    return c;
    +}
    +
    +#include "hardware/clocks.h"
    +#include "hardware/gpio.h"
    +static inline void uart_rx_mini_program_init(PIO pio, uint sm, uint offset, uint pin, uint baud) {
    +    pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, false);
    +    pio_gpio_init(pio, pin);
    +    gpio_pull_up(pin);
    +    pio_sm_config c = uart_rx_mini_program_get_default_config(offset);
    +    sm_config_set_in_pins(&c, pin); // for WAIT, IN
    +    // Shift to right, autopush enabled
    +    sm_config_set_in_shift(&c, true, true, 8);
    +    sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_RX);
    +    // SM transmits 1 bit per 8 execution cycles.
    +    float div = (float)clock_get_hz(clk_sys) / (8 * baud);
    +    sm_config_set_clkdiv(&c, div);
    +    pio_sm_init(pio, sm, offset, &c);
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +
    +#endif
    +
    +// ------- //
    +// uart_rx //
    +// ------- //
    +
    +#define uart_rx_wrap_target 0
    +#define uart_rx_wrap 8
    +
    +static const uint16_t uart_rx_program_instructions[] = {
    +            //     .wrap_target
    +    0x2020, //  0: wait   0 pin, 0                   
    +    0xea27, //  1: set    x, 7                   [10]
    +    0x4001, //  2: in     pins, 1                    
    +    0x0642, //  3: jmp    x--, 2                 [6] 
    +    0x00c8, //  4: jmp    pin, 8                     
    +    0xc014, //  5: irq    nowait 4 rel               
    +    0x20a0, //  6: wait   1 pin, 0                   
    +    0x0000, //  7: jmp    0                          
    +    0x8020, //  8: push   block                      
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program uart_rx_program = {
    +    .instructions = uart_rx_program_instructions,
    +    .length = 9,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config uart_rx_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + uart_rx_wrap_target, offset + uart_rx_wrap);
    +    return c;
    +}
    +
    +static inline void uart_rx_program_init(PIO pio, uint sm, uint offset, uint pin, uint baud) {
    +    pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, false);
    +    pio_gpio_init(pio, pin);
    +    gpio_pull_up(pin);
    +    pio_sm_config c = uart_rx_program_get_default_config(offset);
    +    sm_config_set_in_pins(&c, pin); // for WAIT, IN
    +    sm_config_set_jmp_pin(&c, pin); // for JMP
    +    // Shift to right, autopush disabled
    +    sm_config_set_in_shift(&c, true, false, 32);
    +    // Deeper FIFO as we're not doing any TX
    +    sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_RX);
    +    // SM transmits 1 bit per 8 execution cycles.
    +    float div = (float)clock_get_hz(clk_sys) / (8 * baud);
    +    sm_config_set_clkdiv(&c, div);
    +    pio_sm_init(pio, sm, offset, &c);
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +static inline char uart_rx_program_getc(PIO pio, uint sm) {
    +    // 8-bit read from the uppermost byte of the FIFO, as data is left-justified
    +    io_rw_8 *rxfifo_shift = (io_rw_8*)&pio->rxf[sm] + 3;
    +    while (pio_sm_is_rx_fifo_empty(pio, sm))
    +        tight_loop_contents();
    +    return (char)*rxfifo_shift;
    +}
    +
    +#endif
    +
    diff --git a/src/hal/pio/assembler/comparison_tests/uart_tx.pio b/src/hal/pio/assembler/comparison_tests/uart_tx.pio
    new file mode 100644
    index 000000000..b1320f676
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/uart_tx.pio
    @@ -0,0 +1,61 @@
    +;
    +; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    +;
    +; SPDX-License-Identifier: BSD-3-Clause
    +;
    +
    +.program uart_tx
    +.side_set 1 opt
    +
    +; An 8n1 UART transmit program.
    +; OUT pin 0 and side-set pin 0 are both mapped to UART TX pin.
    +
    +    pull       side 1 [7]  ; Assert stop bit, or stall with line in idle state
    +    set x, 7   side 0 [7]  ; Preload bit counter, assert start bit for 8 clocks
    +bitloop:                   ; This loop will run 8 times (8n1 UART)
    +    out pins, 1            ; Shift 1 bit from OSR to the first OUT pin
    +    jmp x-- bitloop   [6]  ; Each loop iteration is 8 cycles.
    +
    +
    +% c-sdk {
    +#include "hardware/clocks.h"
    +
    +static inline void uart_tx_program_init(PIO pio, uint sm, uint offset, uint pin_tx, uint baud) {
    +    // Tell PIO to initially drive output-high on the selected pin, then map PIO
    +    // onto that pin with the IO muxes.
    +    pio_sm_set_pins_with_mask(pio, sm, 1u << pin_tx, 1u << pin_tx);
    +    pio_sm_set_pindirs_with_mask(pio, sm, 1u << pin_tx, 1u << pin_tx);
    +    pio_gpio_init(pio, pin_tx);
    +
    +    pio_sm_config c = uart_tx_program_get_default_config(offset);
    +
    +    // OUT shifts to right, no autopull
    +    sm_config_set_out_shift(&c, true, false, 32);
    +
    +    // We are mapping both OUT and side-set to the same pin, because sometimes
    +    // we need to assert user data onto the pin (with OUT) and sometimes
    +    // assert constant values (start/stop bit)
    +    sm_config_set_out_pins(&c, pin_tx, 1);
    +    sm_config_set_sideset_pins(&c, pin_tx);
    +
    +    // We only need TX, so get an 8-deep FIFO!
    +    sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);
    +
    +    // SM transmits 1 bit per 8 execution cycles.
    +    float div = (float)clock_get_hz(clk_sys) / (8 * baud);
    +    sm_config_set_clkdiv(&c, div);
    +
    +    pio_sm_init(pio, sm, offset, &c);
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +
    +static inline void uart_tx_program_putc(PIO pio, uint sm, char c) {
    +    pio_sm_put_blocking(pio, sm, (uint32_t)c);
    +}
    +
    +static inline void uart_tx_program_puts(PIO pio, uint sm, const char *s) {
    +    while (*s)
    +        uart_tx_program_putc(pio, sm, *s++);
    +}
    +
    +%}
    diff --git a/src/hal/pio/assembler/comparison_tests/uart_tx.pio.h b/src/hal/pio/assembler/comparison_tests/uart_tx.pio.h
    new file mode 100644
    index 000000000..ff9b7d2a5
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/uart_tx.pio.h
    @@ -0,0 +1,73 @@
    +// -------------------------------------------------- //
    +// This file is autogenerated by pioasm; do not edit! //
    +// -------------------------------------------------- //
    +
    +#pragma once
    +
    +#if !PICO_NO_HARDWARE
    +#include "hardware/pio.h"
    +#endif
    +
    +// ------- //
    +// uart_tx //
    +// ------- //
    +
    +#define uart_tx_wrap_target 0
    +#define uart_tx_wrap 3
    +
    +static const uint16_t uart_tx_program_instructions[] = {
    +            //     .wrap_target
    +    0x9fa0, //  0: pull   block           side 1 [7] 
    +    0xf727, //  1: set    x, 7            side 0 [7] 
    +    0x6001, //  2: out    pins, 1                    
    +    0x0642, //  3: jmp    x--, 2                 [6] 
    +            //     .wrap
    +};
    +
    +#if !PICO_NO_HARDWARE
    +static const struct pio_program uart_tx_program = {
    +    .instructions = uart_tx_program_instructions,
    +    .length = 4,
    +    .origin = -1,
    +};
    +
    +static inline pio_sm_config uart_tx_program_get_default_config(uint offset) {
    +    pio_sm_config c = pio_get_default_sm_config();
    +    sm_config_set_wrap(&c, offset + uart_tx_wrap_target, offset + uart_tx_wrap);
    +    sm_config_set_sideset(&c, 2, true, false);
    +    return c;
    +}
    +
    +#include "hardware/clocks.h"
    +static inline void uart_tx_program_init(PIO pio, uint sm, uint offset, uint pin_tx, uint baud) {
    +    // Tell PIO to initially drive output-high on the selected pin, then map PIO
    +    // onto that pin with the IO muxes.
    +    pio_sm_set_pins_with_mask(pio, sm, 1u << pin_tx, 1u << pin_tx);
    +    pio_sm_set_pindirs_with_mask(pio, sm, 1u << pin_tx, 1u << pin_tx);
    +    pio_gpio_init(pio, pin_tx);
    +    pio_sm_config c = uart_tx_program_get_default_config(offset);
    +    // OUT shifts to right, no autopull
    +    sm_config_set_out_shift(&c, true, false, 32);
    +    // We are mapping both OUT and side-set to the same pin, because sometimes
    +    // we need to assert user data onto the pin (with OUT) and sometimes
    +    // assert constant values (start/stop bit)
    +    sm_config_set_out_pins(&c, pin_tx, 1);
    +    sm_config_set_sideset_pins(&c, pin_tx);
    +    // We only need TX, so get an 8-deep FIFO!
    +    sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);
    +    // SM transmits 1 bit per 8 execution cycles.
    +    float div = (float)clock_get_hz(clk_sys) / (8 * baud);
    +    sm_config_set_clkdiv(&c, div);
    +    pio_sm_init(pio, sm, offset, &c);
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +static inline void uart_tx_program_putc(PIO pio, uint sm, char c) {
    +    pio_sm_put_blocking(pio, sm, (uint32_t)c);
    +}
    +static inline void uart_tx_program_puts(PIO pio, uint sm, const char *s) {
    +    while (*s)
    +        uart_tx_program_putc(pio, sm, *s++);
    +}
    +
    +#endif
    +
    diff --git a/src/hal/pio/assembler/comparison_tests/ws2812.pio b/src/hal/pio/assembler/comparison_tests/ws2812.pio
    new file mode 100644
    index 000000000..3c31fd6c9
    --- /dev/null
    +++ b/src/hal/pio/assembler/comparison_tests/ws2812.pio
    @@ -0,0 +1,85 @@
    +;
    +; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    +;
    +; SPDX-License-Identifier: BSD-3-Clause
    +;
    +
    +.program ws2812
    +.side_set 1
    +
    +.define public T1 2
    +.define public T2 5
    +.define public T3 3
    +
    +.lang_opt python sideset_init = pico.PIO.OUT_HIGH
    +.lang_opt python out_init     = pico.PIO.OUT_HIGH
    +.lang_opt python out_shiftdir = 1
    +
    +.wrap_target
    +bitloop:
    +    out x, 1       side 0 [T3 - 1] ; Side-set still takes place when instruction stalls
    +    jmp !x do_zero side 1 [T1 - 1] ; Branch on the bit we shifted out. Positive pulse
    +do_one:
    +    jmp  bitloop   side 1 [T2 - 1] ; Continue driving high, for a long pulse
    +do_zero:
    +    nop            side 0 [T2 - 1] ; Or drive low, for a short pulse
    +.wrap
    +
    +% c-sdk {
    +#include "hardware/clocks.h"
    +
    +static inline void ws2812_program_init(PIO pio, uint sm, uint offset, uint pin, float freq, bool rgbw) {
    +
    +    pio_gpio_init(pio, pin);
    +    pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, true);
    +
    +    pio_sm_config c = ws2812_program_get_default_config(offset);
    +    sm_config_set_sideset_pins(&c, pin);
    +    sm_config_set_out_shift(&c, false, true, rgbw ? 32 : 24);
    +    sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);
    +
    +    int cycles_per_bit = ws2812_T1 + ws2812_T2 + ws2812_T3;
    +    float div = clock_get_hz(clk_sys) / (freq * cycles_per_bit);
    +    sm_config_set_clkdiv(&c, div);
    +
    +    pio_sm_init(pio, sm, offset, &c);
    +    pio_sm_set_enabled(pio, sm, true);
    +}
    +%}
    +
    +.program ws2812_parallel
    +
    +.define public T1 2
    +.define public T2 5
    +.define public T3 3
    +
    +.wrap_target
    +    out x, 32
    +    mov pins, !null [T1-1]
    +    mov pins, x     [T2-1]
    +    mov pins, null  [T3-2]
    +.wrap
    +
    +% c-sdk {
    +#include "hardware/clocks.h"
    +
    +static inline void ws2812_parallel_program_init(PIO pio, uint sm, uint offset, uint pin_base, uint pin_count, float freq) {
    +    for(uint i=pin_base; i |int| @intCast(T, int),
    +                .string => |str| outer: for (define_lists) |defines| {
    +                    for (defines) |define| {
    +                        if (std.mem.eql(u8, str, define.name)) {
    +                            if (define.value > std.math.maxInt(T)) {
    +                                diags.* = Diagnostics.init(
    +                                    index,
    +                                    "{s}'s value ({}) is too large to fit in {} bits",
    +                                    .{ str, define.value, @bitSizeOf(T) },
    +                                );
    +
    +                                break :outer error.TooBig;
    +                            }
    +
    +                            break :outer @intCast(T, define.value);
    +                        }
    +                    }
    +                } else {
    +                    diags.* = Diagnostics.init(index, "define '{s}' not found", .{
    +                        str,
    +                    });
    +
    +                    break :outer error.DefineNotFound;
    +                },
    +                .expression => |expr_str| {
    +                    const expr = try Expression.tokenize(expr_str, index, diags);
    +                    const result = try expr.evaluate(define_lists, diags);
    +                    if (result < 0 or result > std.math.maxInt(T)) {
    +                        diags.* = Diagnostics.init(
    +                            index,
    +                            "value of {} does not fit in a u{}",
    +                            .{
    +                                result, @bitSizeOf(T),
    +                            },
    +                        );
    +                    }
    +
    +                    return @intCast(T, result);
    +                },
    +            };
    +        }
    +
    +        fn evaluate(
    +            self: *Self,
    +            comptime T: type,
    +            program: BoundedProgram,
    +            value: Value,
    +            index: u32,
    +            diags: *?Diagnostics,
    +        ) !T {
    +            return evaluate_impl(T, &.{
    +                self.output.global_defines.slice(),
    +                self.output.private_defines.slice(),
    +                program.defines.slice(),
    +                program.private_defines.slice(),
    +            }, value, index, diags);
    +        }
    +
    +        fn evaluate_target(
    +            self: *Self,
    +            program: BoundedProgram,
    +            target: []const u8,
    +            index: u32,
    +            diags: *?Diagnostics,
    +        ) !u5 {
    +            return for (program.labels.slice()) |label| {
    +                if (std.mem.eql(u8, target, label.name))
    +                    break label.index;
    +            } else try self.evaluate(u5, program, try Value.from_string(target), index, diags);
    +        }
    +
    +        fn evaluate_global(
    +            self: *Self,
    +            comptime T: type,
    +            value: Value,
    +            index: u32,
    +            diags: *?Diagnostics,
    +        ) !T {
    +            return evaluate_impl(T, &.{
    +                self.output.global_defines.slice(),
    +                self.output.private_defines.slice(),
    +            }, value, index, diags);
    +        }
    +
    +        fn encode_globals(self: *Self, diags: *?Diagnostics) !void {
    +            assert(self.index == 0);
    +
    +            // read defines until program is had
    +            while (self.peek_token()) |token| switch (token.data) {
    +                .define => |define| {
    +                    const result = DefineWithIndex{
    +                        .name = define.name,
    +                        .value = try self.evaluate_global(i128, define.value, token.index, diags),
    +                        .index = define.index,
    +                    };
    +
    +                    if (define.public)
    +                        try self.output.global_defines.append(result)
    +                    else
    +                        try self.output.private_defines.append(result);
    +
    +                    self.consume(1);
    +                },
    +                .program => break,
    +                else => return error.InvalidTokenInGlobalSpace,
    +            };
    +        }
    +
    +        fn encode_program_init(self: *Self, program: *BoundedProgram, diags: *?Diagnostics) !void {
    +            while (self.peek_token()) |token| {
    +                switch (token.data) {
    +                    .program, .label, .instruction, .word, .wrap_target => break,
    +                    .define => |define| {
    +                        const result = DefineWithIndex{
    +                            .name = define.name,
    +                            .value = try self.evaluate(i128, program.*, define.value, token.index, diags),
    +                            .index = define.index,
    +                        };
    +
    +                        if (define.public)
    +                            try program.defines.append(result)
    +                        else
    +                            try program.private_defines.append(result);
    +
    +                        self.consume(1);
    +                    },
    +                    .origin => |value| {
    +                        program.origin = try self.evaluate(u5, program.*, value, token.index, diags);
    +                        self.consume(1);
    +                    },
    +                    .side_set => |side_set| {
    +                        program.side_set = .{
    +                            .count = try self.evaluate(u3, program.*, side_set.count, token.index, diags),
    +                            .optional = side_set.opt,
    +                            .pindirs = side_set.pindirs,
    +                        };
    +                        self.consume(1);
    +                    },
    +                    // ignore
    +                    .lang_opt => self.consume(1),
    +                    .wrap => unreachable,
    +                }
    +            }
    +        }
    +
    +        fn encode_instruction(
    +            self: *Self,
    +            program: *BoundedProgram,
    +            token: Token.Instruction,
    +            token_index: u32,
    +            diags: *?Diagnostics,
    +        ) !void {
    +            // guaranteed to be an instruction variant
    +            const payload: Instruction.Payload = switch (token.payload) {
    +                .nop => .{
    +                    .mov = .{
    +                        .destination = .y,
    +                        .operation = .none,
    +                        .source = .y,
    +                    },
    +                },
    +                .jmp => |jmp| .{
    +                    .jmp = .{
    +                        .condition = jmp.condition,
    +                        .address = try self.evaluate_target(program.*, jmp.target, token_index, diags),
    +                    },
    +                },
    +                .wait => |wait| .{
    +                    .wait = .{
    +                        .polarity = wait.polarity,
    +                        .source = wait.source,
    +                        .index = try self.evaluate(u5, program.*, wait.num, token_index, diags),
    +                    },
    +                },
    +                .in => |in| .{
    +                    .in = .{
    +                        .source = in.source,
    +                        .bit_count = in.bit_count,
    +                    },
    +                },
    +                .out => |out| .{
    +                    .out = .{
    +                        .destination = out.destination,
    +                        .bit_count = out.bit_count,
    +                    },
    +                },
    +                .push => |push| .{
    +                    .push = .{
    +                        .if_full = @boolToInt(push.iffull),
    +                        .block = @boolToInt(push.block),
    +                    },
    +                },
    +                .pull => |pull| .{
    +                    .pull = .{
    +                        .if_empty = @boolToInt(pull.ifempty),
    +                        .block = @boolToInt(pull.block),
    +                    },
    +                },
    +                .mov => |mov| .{
    +                    .mov = .{
    +                        .destination = mov.destination,
    +                        .operation = mov.operation,
    +                        .source = mov.source,
    +                    },
    +                },
    +                .irq => |irq| blk: {
    +                    const irq_num = try self.evaluate(u5, program.*, irq.num, token_index, diags);
    +                    break :blk .{
    +                        .irq = .{
    +                            .clear = @boolToInt(irq.clear),
    +                            .wait = @boolToInt(irq.wait),
    +                            .index = if (irq.rel)
    +                                @as(u5, 0x10) | irq_num
    +                            else
    +                                irq_num,
    +                        },
    +                    };
    +                },
    +                .set => |set| .{
    +                    .set = .{
    +                        .destination = set.destination,
    +                        .data = try self.evaluate(u5, program.*, set.value, token_index, diags),
    +                    },
    +                },
    +            };
    +
    +            const tag: Instruction.Tag = switch (token.payload) {
    +                .nop => .mov,
    +                .jmp => .jmp,
    +                .wait => .wait,
    +                .in => .in,
    +                .out => .out,
    +                .push => .push_pull,
    +                .pull => .push_pull,
    +                .mov => .mov,
    +                .irq => .irq,
    +                .set => .set,
    +            };
    +
    +            if (program.side_set) |side_set| {
    +                if (!side_set.optional and token.side_set == null) {
    +                    diags.* = Diagnostics.init(token_index, "'side' must be specified for this instruction because 'opt' was not specied in the .side_set directive", .{});
    +                    return error.InvalidSideSet;
    +                }
    +            } else {
    +                if (token.side_set != null) {
    +                    diags.* = Diagnostics.init(token_index, ".side_set directive must be specified for program to use side_set", .{});
    +                    return error.InvalidSideSet;
    +                }
    +            }
    +
    +            const side_set: ?u5 = if (token.side_set) |s|
    +                try self.evaluate(u5, program.*, s, token_index, diags)
    +            else
    +                null;
    +
    +            const delay: ?u5 = if (token.delay) |d|
    +                try self.evaluate(u5, program.*, d, token_index, diags)
    +            else
    +                null;
    +
    +            const delay_side_set = try calc_delay_side_set(
    +                program.side_set,
    +                side_set,
    +                delay,
    +            );
    +
    +            try program.instructions.append(Instruction{
    +                .tag = tag,
    +                .payload = payload,
    +                .delay_side_set = delay_side_set,
    +            });
    +        }
    +
    +        fn calc_delay_side_set(
    +            program_settings: ?SideSet,
    +            side_set_opt: ?u5,
    +            delay_opt: ?u5,
    +        ) !u5 {
    +            // TODO: error for side_set/delay collision
    +            const delay: u5 = if (delay_opt) |delay| delay else 0;
    +            return if (program_settings) |settings|
    +                if (settings.optional)
    +                    if (side_set_opt) |side_set|
    +                        0x10 | (side_set << @as(u3, 4) - settings.count) | delay
    +                    else
    +                        delay
    +                else
    +                    (side_set_opt.? << @as(u3, 5) - settings.count) | delay
    +            else
    +                delay;
    +        }
    +
    +        fn encode_instruction_body(self: *Self, program: *BoundedProgram, diags: *?Diagnostics) !void {
    +            // first scan through body for labels
    +            var instr_index: u5 = 0;
    +            for (self.tokens[self.index..]) |token| {
    +                switch (token.data) {
    +                    .label => |label| try program.labels.append(.{
    +                        .name = label.name,
    +                        .public = label.public,
    +                        .index = instr_index,
    +                    }),
    +                    .instruction, .word => instr_index += 1,
    +                    .wrap_target => {
    +                        if (program.wrap_target != null) {
    +                            diags.* = Diagnostics.init(token.index, "wrap_target already set for this program", .{});
    +                            return error.WrapTargetAlreadySet;
    +                        }
    +
    +                        program.wrap_target = instr_index;
    +                    },
    +                    .wrap => {
    +                        if (program.wrap != null) {
    +                            diags.* = Diagnostics.init(token.index, "wrap already set for this program", .{});
    +                            return error.WrapAlreadySet;
    +                        }
    +
    +                        program.wrap = instr_index - 1;
    +                    },
    +                    .program => break,
    +                    else => unreachable, // invalid
    +                }
    +            }
    +
    +            // encode instructions, labels will be populated
    +            for (self.tokens[self.index..], self.index..) |token, i| {
    +                switch (token.data) {
    +                    .instruction => |instr| try self.encode_instruction(program, instr, token.index, diags),
    +                    .word => |word| try program.instructions.append(
    +                        @bitCast(Instruction, try self.evaluate(u16, program.*, word, token.index, diags)),
    +                    ),
    +                    // already processed
    +                    .label, .wrap_target, .wrap => {},
    +                    .program => {
    +                        self.index = @intCast(u32, i);
    +                        break;
    +                    },
    +
    +                    else => unreachable, // invalid
    +                }
    +            } else if (self.tokens.len > 0)
    +                self.index = @intCast(u32, self.tokens.len);
    +        }
    +
    +        fn encode_program(self: *Self, diags: *?Diagnostics) !?BoundedProgram {
    +            const program_token = self.get_token() orelse return null;
    +            if (program_token.data != .program)
    +                return error.ExpectedProgramToken;
    +
    +            var program = BoundedProgram{
    +                .name = program_token.data.program,
    +                .defines = BoundedDefines.init(0) catch unreachable,
    +                .private_defines = BoundedDefines.init(0) catch unreachable,
    +                .instructions = BoundedInstructions.init(0) catch unreachable,
    +                .labels = BoundedLabels.init(0) catch unreachable,
    +                .side_set = null,
    +                .origin = null,
    +                .wrap_target = null,
    +                .wrap = null,
    +            };
    +
    +            try self.encode_program_init(&program, diags);
    +            try self.encode_instruction_body(&program, diags);
    +
    +            return program;
    +        }
    +
    +        fn encode_output(self: *Self, diags: *?Diagnostics) !Self.Output {
    +            try self.encode_globals(diags);
    +
    +            while (try self.encode_program(diags)) |program|
    +                try self.output.programs.append(program);
    +
    +            return self.output;
    +        }
    +    };
    +}
    +
    +pub const Instruction = packed struct(u16) {
    +    payload: Payload,
    +    delay_side_set: u5,
    +    tag: Tag,
    +
    +    pub const Payload = packed union {
    +        jmp: Jmp,
    +        wait: Wait,
    +        in: In,
    +        out: Out,
    +        push: Push,
    +        pull: Pull,
    +        mov: Mov,
    +        irq: Irq,
    +        set: Set,
    +    };
    +
    +    pub const Tag = enum(u3) {
    +        jmp,
    +        wait,
    +        in,
    +        out,
    +        push_pull,
    +        mov,
    +        irq,
    +        set,
    +    };
    +
    +    pub const Jmp = packed struct(u8) {
    +        address: u5,
    +        condition: Token.Instruction.Jmp.Condition,
    +    };
    +
    +    pub const Wait = packed struct(u8) {
    +        index: u5,
    +        source: Token.Instruction.Wait.Source,
    +        polarity: u1,
    +    };
    +
    +    pub const In = packed struct(u8) {
    +        bit_count: u5,
    +        source: Token.Instruction.In.Source,
    +    };
    +
    +    pub const Out = packed struct(u8) {
    +        bit_count: u5,
    +        destination: Token.Instruction.Out.Destination,
    +    };
    +
    +    pub const Push = packed struct(u8) {
    +        _reserved0: u5 = 0,
    +        block: u1,
    +        if_full: u1,
    +        _reserved1: u1 = 0,
    +    };
    +
    +    pub const Pull = packed struct(u8) {
    +        _reserved0: u5 = 0,
    +        block: u1,
    +        if_empty: u1,
    +        _reserved1: u1 = 1,
    +    };
    +
    +    pub const Mov = packed struct(u8) {
    +        source: Token.Instruction.Mov.Source,
    +        operation: Token.Instruction.Mov.Operation,
    +        destination: Token.Instruction.Mov.Destination,
    +    };
    +
    +    pub const Irq = packed struct(u8) {
    +        index: u5,
    +        wait: u1,
    +        clear: u1,
    +        reserved: u1 = 0,
    +    };
    +
    +    pub const Set = packed struct(u8) {
    +        data: u5,
    +        destination: Token.Instruction.Set.Destination,
    +    };
    +};
    +
    +//==============================================================================
    +// Encoder Tests
    +//==============================================================================
    +
    +const expect = std.testing.expect;
    +const expectEqual = std.testing.expectEqual;
    +const expectEqualStrings = std.testing.expectEqualStrings;
    +
    +fn encode_bounded_output_impl(source: []const u8, diags: *?assembler.Diagnostics) !Encoder(.{}).Output {
    +    const tokens = try tokenizer.tokenize(source, diags, .{});
    +    var encoder = Encoder(.{}).init(tokens.slice());
    +    return try encoder.encode_output(diags);
    +}
    +
    +fn encode_bounded_output(source: []const u8) !Encoder(.{}).Output {
    +    var diags: ?assembler.Diagnostics = null;
    +    return encode_bounded_output_impl(source, &diags) catch |err| if (diags) |d| blk: {
    +        std.log.err("error at index {}: {s}", .{ d.index, d.message.slice() });
    +        break :blk err;
    +    } else err;
    +}
    +
    +test "encode.define" {
    +    const output = try encode_bounded_output(".define foo 5");
    +
    +    try expectEqual(@as(usize, 0), output.global_defines.len);
    +    try expectEqual(@as(usize, 1), output.private_defines.len);
    +    try expectEqual(@as(usize, 0), output.programs.len);
    +
    +    try expectEqualStrings("foo", output.private_defines.get(0).name);
    +    try expectEqual(@as(i128, 5), output.private_defines.get(0).value);
    +}
    +
    +test "encode.define.public" {
    +    const output = try encode_bounded_output(".define PUBLIC foo 5");
    +
    +    try expectEqual(@as(usize, 1), output.global_defines.len);
    +    try expectEqual(@as(usize, 0), output.private_defines.len);
    +    try expectEqual(@as(usize, 0), output.programs.len);
    +}
    +
    +test "encode.program.empty" {
    +    const output = try encode_bounded_output(".program arst");
    +
    +    try expectEqual(@as(usize, 0), output.global_defines.len);
    +    try expectEqual(@as(usize, 0), output.private_defines.len);
    +    try expectEqual(@as(usize, 1), output.programs.len);
    +
    +    try expectEqualStrings("arst", output.programs.get(0).name);
    +    try expectEqual(@as(usize, 0), output.programs.get(0).instructions.len);
    +}
    +
    +test "encode.program.define" {
    +    const output = try encode_bounded_output(
    +        \\.program arst
    +        \\.define bruh 7
    +    );
    +
    +    try expectEqual(@as(usize, 0), output.global_defines.len);
    +    try expectEqual(@as(usize, 0), output.private_defines.len);
    +    try expectEqual(@as(usize, 1), output.programs.len);
    +
    +    const program = output.programs.get(0);
    +    try expectEqualStrings("arst", program.name);
    +    try expectEqual(@as(usize, 0), program.instructions.len);
    +
    +    const define = program.private_defines.get(0);
    +    try expectEqualStrings("bruh", define.name);
    +    try expectEqual(@as(i128, 7), define.value);
    +}
    +
    +test "encode.program.define.public" {
    +    const output = try encode_bounded_output(
    +        \\.program arst
    +        \\.define public bruh 7
    +    );
    +
    +    try expectEqual(@as(usize, 0), output.global_defines.len);
    +    try expectEqual(@as(usize, 0), output.private_defines.len);
    +    try expectEqual(@as(usize, 1), output.programs.len);
    +
    +    const program = output.programs.get(0);
    +    try expectEqualStrings("arst", program.name);
    +    try expectEqual(@as(usize, 0), program.instructions.len);
    +
    +    const define = program.defines.get(0);
    +    try expectEqualStrings("bruh", define.name);
    +    try expectEqual(@as(i128, 7), define.value);
    +}
    +
    +test "encode.program.define.namespaced" {
    +    const output = try encode_bounded_output(
    +        \\.program arst
    +        \\.define public bruh 7
    +        \\.program what
    +        \\.define public hi 8
    +    );
    +
    +    try expectEqual(@as(usize, 0), output.global_defines.len);
    +    try expectEqual(@as(usize, 0), output.private_defines.len);
    +    try expectEqual(@as(usize, 2), output.programs.len);
    +
    +    const program_arst = output.programs.get(0);
    +    try expectEqualStrings("arst", program_arst.name);
    +    try expectEqual(@as(usize, 0), program_arst.instructions.len);
    +
    +    const define_bruh = program_arst.defines.get(0);
    +    try expectEqualStrings("bruh", define_bruh.name);
    +    try expectEqual(@as(i128, 7), define_bruh.value);
    +
    +    const program_what = output.programs.get(1);
    +    try expectEqualStrings("what", program_what.name);
    +    try expectEqual(@as(usize, 0), program_what.instructions.len);
    +
    +    const define_hi = program_what.defines.get(0);
    +    try expectEqualStrings("hi", define_hi.name);
    +    try expectEqual(@as(i128, 8), define_hi.value);
    +}
    +
    +test "encode.origin" {
    +    const output = try encode_bounded_output(
    +        \\.program arst
    +        \\.origin 0
    +    );
    +
    +    try expectEqual(@as(usize, 0), output.global_defines.len);
    +    try expectEqual(@as(usize, 0), output.private_defines.len);
    +    try expectEqual(@as(usize, 1), output.programs.len);
    +
    +    const program = output.programs.get(0);
    +    try expectEqualStrings("arst", program.name);
    +    try expectEqual(@as(usize, 0), program.instructions.len);
    +
    +    try expectEqual(@as(?u5, 0), program.origin);
    +}
    +
    +test "encode.wrap_target" {
    +    const output = try encode_bounded_output(
    +        \\.program arst
    +        \\nop
    +        \\.wrap_target
    +        \\nop
    +    );
    +
    +    try expectEqual(@as(usize, 0), output.global_defines.len);
    +    try expectEqual(@as(usize, 0), output.private_defines.len);
    +    try expectEqual(@as(usize, 1), output.programs.len);
    +
    +    const program = output.programs.get(0);
    +    try expectEqualStrings("arst", program.name);
    +    try expectEqual(@as(usize, 2), program.instructions.len);
    +
    +    try expectEqual(@as(?u5, 1), program.wrap_target);
    +}
    +
    +test "encode.wrap" {
    +    const output = try encode_bounded_output(
    +        \\.program arst
    +        \\nop
    +        \\.wrap
    +        \\nop
    +    );
    +
    +    try expectEqual(@as(usize, 0), output.global_defines.len);
    +    try expectEqual(@as(usize, 0), output.private_defines.len);
    +    try expectEqual(@as(usize, 1), output.programs.len);
    +
    +    const program = output.programs.get(0);
    +    try expectEqualStrings("arst", program.name);
    +    try expectEqual(@as(usize, 2), program.instructions.len);
    +
    +    try expectEqual(@as(?u5, 0), program.wrap);
    +}
    +
    +test "encode.side_set" {
    +    const output = try encode_bounded_output(
    +        \\.program arst
    +        \\.side_set 1
    +    );
    +
    +    try expectEqual(@as(usize, 0), output.global_defines.len);
    +    try expectEqual(@as(usize, 0), output.private_defines.len);
    +    try expectEqual(@as(usize, 1), output.programs.len);
    +
    +    const program = output.programs.get(0);
    +    try expectEqual(@as(?u5, 1), program.side_set.?.count);
    +}
    +
    +test "encode.side_set.opt" {
    +    const output = try encode_bounded_output(
    +        \\.program arst
    +        \\.side_set 1 opt
    +    );
    +
    +    try expectEqual(@as(usize, 0), output.global_defines.len);
    +    try expectEqual(@as(usize, 0), output.private_defines.len);
    +    try expectEqual(@as(usize, 1), output.programs.len);
    +
    +    const program = output.programs.get(0);
    +    try expectEqual(@as(?u5, 1), program.side_set.?.count);
    +    try expect(program.side_set.?.optional);
    +}
    +
    +test "encode.side_set.pindirs" {
    +    const output = try encode_bounded_output(
    +        \\.program arst
    +        \\.side_set 1 pindirs
    +    );
    +
    +    try expectEqual(@as(usize, 0), output.global_defines.len);
    +    try expectEqual(@as(usize, 0), output.private_defines.len);
    +    try expectEqual(@as(usize, 1), output.programs.len);
    +
    +    const program = output.programs.get(0);
    +    try expectEqual(@as(?u5, 1), program.side_set.?.count);
    +    try expect(program.side_set.?.pindirs);
    +}
    +
    +test "encode.label" {
    +    const output = try encode_bounded_output(
    +        \\.program arst
    +        \\nop
    +        \\my_label:
    +        \\nop
    +    );
    +
    +    try expectEqual(@as(usize, 0), output.global_defines.len);
    +    try expectEqual(@as(usize, 0), output.private_defines.len);
    +    try expectEqual(@as(usize, 1), output.programs.len);
    +
    +    const program = output.programs.get(0);
    +    try expectEqual(@as(usize, 1), program.labels.len);
    +
    +    const label = program.labels.get(0);
    +    try expectEqualStrings("my_label", label.name);
    +    try expectEqual(@as(u32, 1), label.index);
    +    try expectEqual(false, label.public);
    +}
    +
    +test "encode.label.public" {
    +    const output = try encode_bounded_output(
    +        \\.program arst
    +        \\nop
    +        \\nop
    +        \\public my_label:
    +        \\nop
    +    );
    +
    +    try expectEqual(@as(usize, 0), output.global_defines.len);
    +    try expectEqual(@as(usize, 0), output.private_defines.len);
    +    try expectEqual(@as(usize, 1), output.programs.len);
    +
    +    const program = output.programs.get(0);
    +    try expectEqual(@as(usize, 1), program.labels.len);
    +
    +    const label = program.labels.get(0);
    +    try expectEqualStrings("my_label", label.name);
    +    try expectEqual(@as(u32, 2), label.index);
    +    try expectEqual(true, label.public);
    +}
    +
    +test "encode.side_set.bits" {
    +    const output = try encode_bounded_output(
    +        \\.program arst
    +        \\.side_set 1 opt
    +        \\nop side 1
    +        \\nop [1]
    +        \\nop side 0 [1]
    +    );
    +
    +    try expectEqual(@as(usize, 0), output.global_defines.len);
    +    try expectEqual(@as(usize, 0), output.private_defines.len);
    +    try expectEqual(@as(usize, 1), output.programs.len);
    +
    +    const program = output.programs.get(0);
    +
    +    const instr0 = program.instructions.get(0);
    +    try expectEqual(@as(u5, 0x18), instr0.delay_side_set);
    +
    +    const instr1 = program.instructions.get(1);
    +    try expectEqual(@as(u5, 0x1), instr1.delay_side_set);
    +
    +    const instr2 = program.instructions.get(2);
    +    try expectEqual(@as(u5, 0x11), instr2.delay_side_set);
    +}
    +
    +test "encode.evaluate.global" {
    +    const output = try encode_bounded_output(
    +        \\.define NUM 5
    +        \\.define public FOO NUM
    +    );
    +
    +    try expectEqual(@as(usize, 1), output.private_defines.len);
    +    try expectEqual(@as(usize, 1), output.global_defines.len);
    +    try expectEqualStrings("FOO", output.global_defines.get(0).name);
    +    try expectEqual(@as(i128, 5), output.global_defines.get(0).value);
    +}
    +
    +test "encode.evaluate.addition" {
    +    const output = try encode_bounded_output(
    +        \\.define public FOO (1+5)
    +    );
    +
    +    try expectEqual(@as(usize, 1), output.global_defines.len);
    +    try expectEqualStrings("FOO", output.global_defines.get(0).name);
    +    try expectEqual(@as(i128, 6), output.global_defines.get(0).value);
    +}
    +
    +test "encode.evaluate.subtraction" {
    +    const output = try encode_bounded_output(
    +        \\.define public FOO (5-1)
    +    );
    +
    +    try expectEqual(@as(usize, 1), output.global_defines.len);
    +    try expectEqualStrings("FOO", output.global_defines.get(0).name);
    +    try expectEqual(@as(i128, 4), output.global_defines.get(0).value);
    +}
    +
    +test "encode.evaluate.multiplication" {
    +    const output = try encode_bounded_output(
    +        \\.define public FOO (5*2)
    +    );
    +
    +    try expectEqual(@as(usize, 1), output.global_defines.len);
    +    try expectEqualStrings("FOO", output.global_defines.get(0).name);
    +    try expectEqual(@as(i128, 10), output.global_defines.get(0).value);
    +}
    +
    +test "encode.evaluate.division" {
    +    const output = try encode_bounded_output(
    +        \\.define public FOO (6/2)
    +    );
    +
    +    try expectEqual(@as(usize, 1), output.global_defines.len);
    +    try expectEqualStrings("FOO", output.global_defines.get(0).name);
    +    try expectEqual(@as(i128, 3), output.global_defines.get(0).value);
    +}
    +
    +test "encode.evaluate.bit reversal" {
    +    const output = try encode_bounded_output(
    +        \\.define public FOO ::1
    +    );
    +
    +    try expectEqual(@as(usize, 1), output.global_defines.len);
    +    try expectEqualStrings("FOO", output.global_defines.get(0).name);
    +    try expectEqual(@as(i128, 0x80000000), output.global_defines.get(0).value);
    +}
    +
    +test "encode.jmp.label" {
    +    const output = try encode_bounded_output(
    +        \\.program arst
    +        \\nop
    +        \\my_label:
    +        \\nop
    +        \\nop
    +        \\jmp my_label
    +    );
    +
    +    try expectEqual(@as(usize, 0), output.global_defines.len);
    +    try expectEqual(@as(usize, 0), output.private_defines.len);
    +    try expectEqual(@as(usize, 1), output.programs.len);
    +
    +    const program = output.programs.get(0);
    +    try expectEqual(@as(usize, 1), program.labels.len);
    +
    +    const label = program.labels.get(0);
    +    try expectEqualStrings("my_label", label.name);
    +    try expectEqual(@as(u32, 1), label.index);
    +    try expectEqual(false, label.public);
    +
    +    const instr = program.instructions.get(3);
    +    try expectEqual(Instruction.Tag.jmp, instr.tag);
    +    try expectEqual(@as(u5, 0), instr.delay_side_set);
    +    try expectEqual(Token.Instruction.Jmp.Condition.always, instr.payload.jmp.condition);
    +    try expectEqual(@as(u5, 1), instr.payload.jmp.address);
    +}
    +
    +//test "encode.error.duplicated program name" {}
    +//test "encode.error.duplicated define" {}
    +//test "encode.error.multiple side_set" {}
    +//test "encode.error.label with no instruction" {}
    +//test "encode.error.label with no instruction" {}
    +
    +// Test Plan
    +// =========
    +//
    +// - .program name validation
    +// - .origin in program init and in program body
    +// - .side_set must be in the program init
    +// - .wrap_target must come before an instruction, defaults to start of a program
    +// - .wrap_target must only be used once in a program
    +// - .wrap must be placed after an instruction, defaults to end of a program
    +// - .wrap must only be used once in a program
    +// -
    +//
    diff --git a/src/hal/pio/assembler/tokenizer.zig b/src/hal/pio/assembler/tokenizer.zig
    new file mode 100644
    index 000000000..cc360f50f
    --- /dev/null
    +++ b/src/hal/pio/assembler/tokenizer.zig
    @@ -0,0 +1,1947 @@
    +const std = @import("std");
    +const assert = std.debug.assert;
    +
    +const assembler = @import("../assembler.zig");
    +const Diagnostics = assembler.Diagnostics;
    +
    +const Expression = @import("Expression.zig");
    +
    +pub const Options = struct {
    +    capacity: u32 = 256,
    +};
    +
    +pub fn tokenize(
    +    source: []const u8,
    +    diags: *?assembler.Diagnostics,
    +    comptime options: Options,
    +) !std.BoundedArray(Token, options.capacity) {
    +    var tokens = std.BoundedArray(Token, options.capacity).init(0) catch unreachable;
    +    var tokenizer = Tokenizer.init(source);
    +    while (try tokenizer.next(diags)) |token|
    +        try tokens.append(token);
    +
    +    return tokens;
    +}
    +
    +pub const Value = union(enum) {
    +    // integer, hex, binary
    +    integer: u32,
    +    // either a symbol or label
    +    string: []const u8,
    +    expression: []const u8,
    +
    +    pub fn format(
    +        value: Value,
    +        comptime fmt: []const u8,
    +        options: std.fmt.FormatOptions,
    +        writer: anytype,
    +    ) !void {
    +        _ = fmt;
    +        _ = options;
    +        switch (value) {
    +            .string => |str| try writer.print("\"{s}\"", .{str}),
    +            .expression => |expr| try writer.print("{s}", .{expr}),
    +            .integer => |int| try writer.print("{}", .{int}),
    +        }
    +    }
    +
    +    pub fn from_string(str: []const u8) !Value {
    +        return Value{
    +            .integer = std.fmt.parseInt(u32, str, 0) catch {
    +                return Value{
    +                    .string = str,
    +                };
    +            },
    +        };
    +    }
    +};
    +
    +// the characters we're interested in are:
    +// ';' -> line comment
    +// '/' -> '/' -> line comment
    +// '/' -> '*' -> block comment
    +// '%' ->  ->  ->  -> '{' -> code block
    +// '.' -> directive
    +pub const Tokenizer = struct {
    +    source: []const u8,
    +    index: u32,
    +
    +    pub fn format(
    +        self: Tokenizer,
    +        comptime fmt: []const u8,
    +        options: std.fmt.FormatOptions,
    +        writer: anytype,
    +    ) !void {
    +        _ = fmt;
    +        _ = options;
    +
    +        try writer.print(
    +            \\parser:
    +            \\  index: {}
    +            \\
    +            \\
    +        , .{self.index});
    +
    +        var printed_cursor = false;
    +        var line_it = std.mem.tokenize(u8, self.source, "\n\r");
    +        while (line_it.next()) |line| {
    +            try writer.print("{s}\n", .{line});
    +            if (!printed_cursor and line_it.index > self.index) {
    +                try writer.writeByteNTimes(' ', line.len - (line_it.index - self.index));
    +                try writer.writeAll("\x1b[30;42;1m^\x1b[0m\n");
    +                printed_cursor = true;
    +            }
    +        }
    +    }
    +
    +    fn init(source: []const u8) Tokenizer {
    +        return Tokenizer{
    +            .source = source,
    +            .index = 0,
    +        };
    +    }
    +
    +    fn consume(self: *Tokenizer, count: u32) void {
    +        assert(self.index < self.source.len);
    +        self.index += count;
    +    }
    +
    +    fn peek(self: Tokenizer) ?u8 {
    +        return if (self.index < self.source.len)
    +            self.source[self.index]
    +        else
    +            null;
    +    }
    +
    +    fn get(self: *Tokenizer) ?u8 {
    +        return if (self.index < self.source.len) blk: {
    +            defer self.index += 1;
    +            break :blk self.source[self.index];
    +        } else null;
    +    }
    +
    +    fn skip_line(self: *Tokenizer) void {
    +        while (self.get()) |c|
    +            if (c == '\n')
    +                return;
    +    }
    +
    +    fn skip_until_end_of_comment_block(self: *Tokenizer) void {
    +        while (self.get()) |c| {
    +            if (c == '*') {
    +                if (self.peek()) |p| {
    +                    self.consume(1);
    +                    if (p == '/') {
    +                        return;
    +                    }
    +                }
    +            }
    +        }
    +    }
    +
    +    fn skip_until_end_of_code_block(self: *Tokenizer) void {
    +        // TODO: assert we have the code identifier and open curly bracket
    +        while (self.get()) |c| {
    +            if (c == '%') {
    +                if (self.peek()) |p| {
    +                    self.consume(1);
    +                    if (p == '}') {
    +                        return;
    +                    }
    +                }
    +            }
    +        }
    +    }
    +
    +    fn read_until_whitespace_or_end(self: *Tokenizer) ![]const u8 {
    +        const start = self.index;
    +        var end: ?u32 = null;
    +        while (self.peek()) |p| {
    +            switch (p) {
    +                ' ', '\n', '\r', '\t', ',' => {
    +                    end = self.index;
    +                    break;
    +                },
    +                else => self.consume(1),
    +            }
    +        } else end = self.index;
    +
    +        return self.source[start .. end orelse return error.EndOfStream];
    +    }
    +
    +    fn skip_whitespace(self: *Tokenizer) void {
    +        while (self.peek()) |p| {
    +            switch (p) {
    +                ' ', '\t', '\r', '\n', ',' => self.consume(1),
    +                else => return,
    +            }
    +        }
    +    }
    +
    +    /// returns array of args
    +    fn get_args(self: *Tokenizer, comptime num: u32, diags: *?Diagnostics) TokenizeError![num]?[]const u8 {
    +        var args: [num]?[]const u8 = undefined;
    +        for (&args) |*arg|
    +            arg.* = try self.get_arg(diags);
    +
    +        return args;
    +    }
    +
    +    const PeekResult = struct {
    +        str: []const u8,
    +        start: u32,
    +    };
    +
    +    fn peek_arg(self: *Tokenizer, diags: *?Diagnostics) TokenizeError!?PeekResult {
    +        var tmp_index = self.index;
    +        return self.peek_arg_impl(&tmp_index, diags);
    +    }
    +
    +    fn consume_peek(self: *Tokenizer, result: PeekResult) void {
    +        assert(self.index <= result.start);
    +        self.index = result.start + @intCast(u32, result.str.len);
    +    }
    +
    +    /// gets next arg without consuming the stream
    +    fn peek_arg_impl(
    +        self: *Tokenizer,
    +        index: *u32,
    +        diags: *?Diagnostics,
    +    ) TokenizeError!?PeekResult {
    +
    +        // skip whitespace
    +        while (index.* < self.source.len) {
    +            switch (self.source[index.*]) {
    +                ' ', '\t', ',' => index.* += 1,
    +                else => break,
    +            }
    +        }
    +
    +        if (index.* == self.source.len)
    +            return null;
    +
    +        const start = index.*;
    +        const end = end: {
    +            break :end switch (self.source[start]) {
    +                '(' => blk: {
    +                    var depth: u32 = 0;
    +                    break :blk while (index.* < self.source.len) : (index.* += 1) {
    +                        switch (self.source[index.*]) {
    +                            '(' => depth += 1,
    +                            ')' => {
    +                                depth -= 1;
    +
    +                                if (depth == 0) {
    +                                    index.* += 1;
    +                                    break index.*;
    +                                }
    +                            },
    +                            else => {},
    +                        }
    +                    } else {
    +                        diags.* = Diagnostics.init(start, "mismatched parenthesis", .{});
    +                        return error.InvalidExpression;
    +                    };
    +                },
    +                '[' => while (index.* < self.source.len) : (index.* += 1) {
    +                    if (self.source[index.*] == ']') {
    +                        index.* += 1;
    +                        break index.*;
    +                    }
    +                } else {
    +                    diags.* = Diagnostics.init(start, "mismatched parenthesis", .{});
    +                    return error.InvalidExpression;
    +                },
    +                else => while (index.* < self.source.len) {
    +                    switch (self.source[index.*]) {
    +                        // ; and / are to stop at comments
    +                        ' ', '\t', '\r', '\n', ',', ';', '/' => break index.*,
    +                        else => index.* += 1,
    +                    }
    +                } else index.*,
    +            };
    +        };
    +
    +        return if (start != end)
    +            PeekResult{
    +                .str = self.source[start..end],
    +                .start = start,
    +            }
    +        else
    +            null;
    +    }
    +
    +    fn get_arg(self: *Tokenizer, diags: *?Diagnostics) TokenizeError!?[]const u8 {
    +        return if (try self.peek_arg_impl(&self.index, diags)) |result|
    +            result.str
    +        else
    +            null;
    +    }
    +
    +    const Identifier = struct {
    +        index: u32,
    +        str: []const u8,
    +    };
    +
    +    fn get_identifier(self: *Tokenizer) TokenizeError!Identifier {
    +        self.skip_whitespace();
    +        return Identifier{
    +            .index = self.index,
    +            .str = try self.read_until_whitespace_or_end(),
    +        };
    +    }
    +
    +    const TokenizeError = error{
    +        EndOfStream,
    +        NoValue,
    +        NotAnExpression,
    +        Overflow,
    +        InvalidCharacter,
    +        InvalidSource,
    +        InvalidCondition,
    +        MissingArg,
    +        InvalidDestination,
    +        InvalidOperation,
    +        InvalidExpression,
    +        TooBig,
    +    };
    +
    +    fn get_program(self: *Tokenizer, index: u32, diags: *?Diagnostics) TokenizeError!Token {
    +        const name = (try self.get_arg(diags)) orelse {
    +            diags.* = Diagnostics.init(index, "missing program name", .{});
    +            return error.MissingArg;
    +        };
    +        return Token{
    +            .index = index,
    +            .data = .{ .program = name },
    +        };
    +    }
    +
    +    fn assert_is_lower(str: []const u8) void {
    +        for (str) |c|
    +            assert(std.ascii.isLower(c));
    +    }
    +
    +    fn eql_lower(comptime lhs: []const u8, rhs: []const u8) bool {
    +        assert_is_lower(lhs);
    +        if (lhs.len != rhs.len)
    +            return false;
    +
    +        var buf: [lhs.len]u8 = undefined;
    +        for (&buf, rhs) |*b, r|
    +            b.* = std.ascii.toLower(r);
    +
    +        return std.mem.eql(u8, &buf, lhs);
    +    }
    +
    +    fn get_define(self: *Tokenizer, index: u32, diags: *?Diagnostics) TokenizeError!Token {
    +        const maybe_public = try self.get_identifier();
    +        var is_public = eql_lower("public", maybe_public.str);
    +
    +        const name = if (is_public)
    +            try self.get_identifier()
    +        else
    +            maybe_public;
    +
    +        return Token{
    +            .index = index,
    +            .data = .{
    +                .define = .{
    +                    .name = name.str,
    +                    .value = Value{
    +                        .expression = (try self.get_arg(diags)) orelse {
    +                            diags.* = Diagnostics.init(index, "failed to get expression", .{});
    +                            return error.InvalidExpression;
    +                        },
    +                    },
    +                    .public = is_public,
    +                    .index = name.index,
    +                },
    +            },
    +        };
    +    }
    +
    +    fn get_expression(self: *Tokenizer) TokenizeError!Value {
    +        const start = self.index;
    +        var count: u32 = 1;
    +
    +        if (self.get()) |c|
    +            if (c != '(')
    +                return error.NotAnExpression;
    +
    +        while (self.get()) |c| {
    +            switch (c) {
    +                '(' => count += 1,
    +                ')' => {
    +                    count -= 1;
    +                },
    +                else => {},
    +            }
    +
    +            if (count == 0) {
    +                return Value{
    +                    .expression = self.source[start..self.index],
    +                };
    +            }
    +        } else {
    +            return error.NotAnExpression;
    +        }
    +    }
    +
    +    fn get_value(self: *Tokenizer) TokenizeError!Value {
    +        self.skip_whitespace();
    +
    +        if (self.peek()) |p|
    +            if (p == '(')
    +                return try self.get_expression()
    +            else {
    +                const identifier = try self.get_identifier();
    +                return try Value.from_string(identifier.str);
    +            }
    +        else
    +            return error.NoValue;
    +    }
    +
    +    fn get_origin(self: *Tokenizer, index: u32, diags: *?Diagnostics) TokenizeError!Token {
    +        _ = diags;
    +        return Token{
    +            .index = index,
    +            .data = .{
    +                .origin = try self.get_value(),
    +            },
    +        };
    +    }
    +
    +    fn get_side_set(self: *Tokenizer, index: u32, diags: *?Diagnostics) TokenizeError!Token {
    +        const args = try self.get_args(3, diags);
    +        const count = try Value.from_string(args[0] orelse {
    +            diags.* = Diagnostics.init(index, "missing count", .{});
    +            return error.MissingArg;
    +        });
    +        var opt = false;
    +        var pindirs = false;
    +
    +        if (args[1]) |arg| {
    +            if (std.mem.eql(u8, "opt", arg))
    +                opt = true
    +            else if (std.mem.eql(u8, "pindirs", arg))
    +                pindirs = true;
    +        }
    +
    +        if (args[2]) |arg| {
    +            if (std.mem.eql(u8, "pindirs", arg))
    +                pindirs = true;
    +        }
    +
    +        return Token{
    +            .index = index,
    +            .data = .{
    +                .side_set = .{
    +                    .count = count,
    +                    .opt = opt,
    +                    .pindirs = pindirs,
    +                },
    +            },
    +        };
    +    }
    +
    +    fn get_wrap_target(_: *Tokenizer, index: u32, _: *?Diagnostics) TokenizeError!Token {
    +        return Token{
    +            .index = index,
    +            .data = .{ .wrap_target = {} },
    +        };
    +    }
    +
    +    fn get_wrap(_: *Tokenizer, index: u32, _: *?Diagnostics) TokenizeError!Token {
    +        return Token{
    +            .index = index,
    +            .data = .{ .wrap = {} },
    +        };
    +    }
    +
    +    fn get_lang_opt(self: *Tokenizer, index: u32, diags: *?Diagnostics) TokenizeError!Token {
    +        _ = diags;
    +        return Token{
    +            .index = index,
    +            .data = .{
    +                .lang_opt = .{
    +                    .lang = (try self.get_identifier()).str,
    +                    .name = (try self.get_identifier()).str,
    +                    .option = (try self.get_identifier()).str,
    +                },
    +            },
    +        };
    +    }
    +
    +    fn get_word(self: *Tokenizer, index: u32, diags: *?Diagnostics) TokenizeError!Token {
    +        _ = diags;
    +        return Token{
    +            .index = index,
    +            .data = .{ .word = try self.get_value() },
    +        };
    +    }
    +
    +    const directives = std.ComptimeStringMap(*const fn (*Tokenizer, u32, *?Diagnostics) TokenizeError!Token, .{
    +        .{ "program", get_program },
    +        .{ "define", get_define },
    +        .{ "origin", get_origin },
    +        .{ "side_set", get_side_set },
    +        .{ "wrap_target", get_wrap_target },
    +        .{ "wrap", get_wrap },
    +        .{ "lang_opt", get_lang_opt },
    +        .{ "word", get_word },
    +    });
    +
    +    fn get_directive(self: *Tokenizer, diags: *?Diagnostics) !Token {
    +        const index = self.index;
    +        const identifier = try self.read_until_whitespace_or_end();
    +        return if (directives.get(identifier)) |handler| ret: {
    +            const ret = try handler(self, index, diags);
    +            self.skip_line();
    +            break :ret ret;
    +        } else error.InvalidDirective;
    +    }
    +
    +    fn get_nop(_: *Tokenizer, _: *?Diagnostics) TokenizeError!Token.Instruction.Payload {
    +        return Token.Instruction.Payload{
    +            .nop = {},
    +        };
    +    }
    +
    +    fn target_from_string(str: []const u8) TokenizeError!Token.Instruction.Jmp.Target {
    +        const value = Value.from_string(str);
    +        return Token.Instruction.Payload{
    +            .jmp = .{
    +                .condition = .always,
    +                .target = switch (value) {
    +                    .string => |label| Token.Instruction.Jmp.Target{
    +                        .label = label,
    +                    },
    +                    else => Token.Instruction.Jmp.Target{
    +                        .value = value,
    +                    },
    +                },
    +            },
    +        };
    +    }
    +
    +    fn get_jmp(self: *Tokenizer, diags: *?Diagnostics) TokenizeError!Token.Instruction.Payload {
    +        const Condition = Token.Instruction.Jmp.Condition;
    +        const conditions = std.ComptimeStringMap(Condition, .{
    +            .{ "!x", .x_is_zero },
    +            .{ "x--", .x_dec },
    +            .{ "!y", .y_is_zero },
    +            .{ "y--", .y_dec },
    +            .{ "x!=y", .x_is_not_y },
    +            .{ "pin", .pin },
    +            .{ "!osre", .osre_not_empty },
    +        });
    +
    +        const maybe_cond = (try self.get_arg(diags)) orelse return error.MissingArg;
    +        const maybe_cond_lower = try lowercase_bounded(256, maybe_cond);
    +        const cond: Condition = conditions.get(maybe_cond_lower.slice()) orelse .always;
    +        const target_str = if (cond == .always)
    +            maybe_cond
    +        else
    +            (try self.get_arg(diags)) orelse return error.MissingArg;
    +
    +        return Token.Instruction.Payload{
    +            .jmp = .{ .condition = cond, .target = target_str },
    +        };
    +    }
    +
    +    fn get_wait(self: *Tokenizer, diags: *?Diagnostics) TokenizeError!Token.Instruction.Payload {
    +        const polarity = try std.fmt.parseInt(u1, (try self.get_arg(diags)) orelse return error.MissingArg, 0);
    +        const source_str = (try self.get_arg(diags)) orelse return error.MissingArg;
    +        const pin = try Value.from_string((try self.get_arg(diags)) orelse return error.MissingArg);
    +
    +        var buf: [8]u8 = undefined;
    +        for (source_str, 0..) |c, i|
    +            buf[i] = std.ascii.toLower(c);
    +
    +        const source_lower = buf[0..source_str.len];
    +        const source: Token.Instruction.Wait.Source =
    +            if (std.mem.eql(u8, "gpio", source_lower))
    +            .gpio
    +        else if (std.mem.eql(u8, "pin", source_lower))
    +            .pin
    +        else if (std.mem.eql(u8, "irq", source_lower))
    +            .irq
    +        else
    +            return error.InvalidSource;
    +
    +        const rel: bool = if (source == .irq)
    +            if (try self.peek_arg(diags)) |rel_result| blk: {
    +                const is_rel = std.mem.eql(u8, "rel", rel_result.str);
    +                if (is_rel)
    +                    self.consume_peek(rel_result);
    +
    +                break :blk is_rel;
    +            } else false
    +        else
    +            false;
    +
    +        return Token.Instruction.Payload{
    +            .wait = .{
    +                .polarity = polarity,
    +                .source = source,
    +                .num = pin,
    +                .rel = rel,
    +            },
    +        };
    +    }
    +
    +    /// get the lowercase of a string, returns an error if it's too big
    +    fn lowercase_bounded(comptime max_size: usize, str: []const u8) TokenizeError!std.BoundedArray(u8, max_size) {
    +        if (str.len > max_size)
    +            return error.TooBig;
    +
    +        var ret = std.BoundedArray(u8, max_size).init(0) catch unreachable;
    +        for (str) |c|
    +            try ret.append(std.ascii.toLower(c));
    +
    +        return ret;
    +    }
    +
    +    // TODO: I need to take a break. There is no rush to finish this. The thing
    +    // I need to keep in mind with `get_args()` is that I must only consume the
    +    // args that are used. side set and delay may be on the same line
    +
    +    fn get_in(self: *Tokenizer, diags: *?Diagnostics) TokenizeError!Token.Instruction.Payload {
    +        const source_str = (try self.get_arg(diags)) orelse return error.MissingArg;
    +        const bit_count_str = (try self.get_arg(diags)) orelse return error.MissingArg;
    +
    +        const source_lower = try lowercase_bounded(256, source_str);
    +        const bit_count_tmp = try std.fmt.parseInt(u6, bit_count_str, 0);
    +        const bit_count = if (bit_count_tmp == 32)
    +            @as(u5, 0)
    +        else
    +            @intCast(u5, bit_count_tmp);
    +
    +        return Token.Instruction.Payload{
    +            .in = .{
    +                .source = std.meta.stringToEnum(Token.Instruction.In.Source, source_lower.slice()) orelse return error.InvalidSource,
    +                .bit_count = bit_count,
    +            },
    +        };
    +    }
    +
    +    fn get_out(self: *Tokenizer, diags: *?Diagnostics) TokenizeError!Token.Instruction.Payload {
    +        const dest_src = (try self.get_arg(diags)) orelse return error.MissingArg;
    +        const bit_count_str = (try self.get_arg(diags)) orelse return error.MissingArg;
    +
    +        const dest_lower = try lowercase_bounded(256, dest_src);
    +        const bit_count_tmp = try std.fmt.parseInt(u6, bit_count_str, 0);
    +        const bit_count = if (bit_count_tmp == 32)
    +            @as(u5, 0)
    +        else
    +            @intCast(u5, bit_count_tmp);
    +
    +        return Token.Instruction.Payload{
    +            .out = .{
    +                .destination = std.meta.stringToEnum(Token.Instruction.Out.Destination, dest_lower.slice()) orelse return error.InvalidDestination,
    +                .bit_count = bit_count,
    +            },
    +        };
    +    }
    +
    +    fn block_from_peek(self: *Tokenizer, result: PeekResult) TokenizeError!bool {
    +        const block_lower = try lowercase_bounded(256, result.str);
    +        const is_block = std.mem.eql(u8, "block", block_lower.slice());
    +        const is_noblock = std.mem.eql(u8, "noblock", block_lower.slice());
    +
    +        if (is_block or is_noblock)
    +            self.consume_peek(result);
    +
    +        return if (is_block)
    +            true
    +        else if (is_noblock)
    +            false
    +        else
    +            true;
    +    }
    +
    +    fn get_push(self: *Tokenizer, diags: *?Diagnostics) TokenizeError!Token.Instruction.Payload {
    +        return if (try self.peek_arg(diags)) |first_result| ret: {
    +            const lower = try lowercase_bounded(256, first_result.str);
    +            const iffull = std.mem.eql(u8, "iffull", lower.slice());
    +
    +            const block: bool = if (iffull) blk: {
    +                self.consume_peek(first_result);
    +                break :blk if (try self.peek_arg(diags)) |block_result|
    +                    try self.block_from_peek(block_result)
    +                else
    +                    true;
    +            } else try self.block_from_peek(first_result);
    +
    +            break :ret Token.Instruction.Payload{
    +                .push = .{
    +                    .iffull = iffull,
    +                    .block = block,
    +                },
    +            };
    +        } else Token.Instruction.Payload{
    +            .push = .{
    +                .iffull = false,
    +                .block = true,
    +            },
    +        };
    +    }
    +
    +    fn get_pull(self: *Tokenizer, diags: *?Diagnostics) TokenizeError!Token.Instruction.Payload {
    +        return if (try self.peek_arg(diags)) |first_result| ret: {
    +            const lower = try lowercase_bounded(256, first_result.str);
    +            const ifempty = std.mem.eql(u8, "ifempty", lower.slice());
    +
    +            const block: bool = if (ifempty) blk: {
    +                self.consume_peek(first_result);
    +                break :blk if (try self.peek_arg(diags)) |block_result|
    +                    try self.block_from_peek(block_result)
    +                else
    +                    true;
    +            } else try self.block_from_peek(first_result);
    +
    +            break :ret Token.Instruction.Payload{
    +                .pull = .{
    +                    .ifempty = ifempty,
    +                    .block = block,
    +                },
    +            };
    +        } else Token.Instruction.Payload{
    +            .pull = .{
    +                .ifempty = false,
    +                .block = true,
    +            },
    +        };
    +    }
    +
    +    fn get_mov(self: *Tokenizer, diags: *?Diagnostics) TokenizeError!Token.Instruction.Payload {
    +        const dest_str = (try self.get_arg(diags)) orelse return error.MissingArg;
    +        const dest_lower = try lowercase_bounded(256, dest_str);
    +        const destination = std.meta.stringToEnum(Token.Instruction.Mov.Destination, dest_lower.slice()) orelse return error.InvalidDestination;
    +
    +        const second = try self.get_arg(diags) orelse return error.MissingArg;
    +        const op_prefixed: ?[]const u8 = if (std.mem.startsWith(u8, second, "!"))
    +            "!"
    +        else if (std.mem.startsWith(u8, second, "~"))
    +            "~"
    +        else if (std.mem.startsWith(u8, second, "::"))
    +            "::"
    +        else
    +            null;
    +
    +        const source_str = if (op_prefixed) |op_str|
    +            if (second.len == op_str.len)
    +                (try self.get_arg(diags)) orelse return error.MissingArg
    +            else
    +                second[op_str.len..]
    +        else
    +            second;
    +
    +        const source_lower = try lowercase_bounded(256, source_str);
    +        const source = std.meta.stringToEnum(Token.Instruction.Mov.Source, source_lower.slice()) orelse return error.InvalidSource;
    +        const operation: Token.Instruction.Mov.Operation = if (op_prefixed) |op_str|
    +            if (std.mem.eql(u8, "!", op_str))
    +                .invert
    +            else if (std.mem.eql(u8, "~", op_str))
    +                .invert
    +            else if (std.mem.eql(u8, "::", op_str))
    +                .bit_reverse
    +            else
    +                return error.InvalidOperation
    +        else
    +            .none;
    +
    +        return Token.Instruction.Payload{
    +            .mov = .{
    +                .destination = destination,
    +                .source = source,
    +                .operation = operation,
    +            },
    +        };
    +    }
    +
    +    fn get_irq(self: *Tokenizer, diags: *?Diagnostics) TokenizeError!Token.Instruction.Payload {
    +        const first = (try self.get_arg(diags)) orelse return error.MissingArg;
    +
    +        var clear = false;
    +        var wait = false;
    +        var has_mode = false;
    +        const first_lower = try lowercase_bounded(256, first);
    +        if (std.mem.eql(u8, "set", first_lower.slice())) {
    +            has_mode = true;
    +            // do nothing
    +        } else if (std.mem.eql(u8, "nowait", first_lower.slice())) {
    +            has_mode = true;
    +            // do nothing
    +        } else if (std.mem.eql(u8, "wait", first_lower.slice())) {
    +            has_mode = true;
    +            wait = true;
    +        } else if (std.mem.eql(u8, "clear", first_lower.slice())) {
    +            has_mode = true;
    +            clear = true;
    +        }
    +
    +        const num = Value{
    +            .expression = if (has_mode)
    +                (try self.get_arg(diags)) orelse {
    +                    diags.* = Diagnostics.init(self.index, "irq (mode)  (rel): failed to get num argument", .{});
    +                    return error.MissingArg;
    +                }
    +            else
    +                first,
    +        };
    +
    +        const rel: bool = if (try self.peek_arg(diags)) |result| blk: {
    +            const rel_lower = try lowercase_bounded(256, result.str);
    +            const is_rel = std.mem.eql(u8, "rel", rel_lower.slice());
    +            if (is_rel)
    +                self.consume_peek(result);
    +
    +            break :blk is_rel;
    +        } else false;
    +
    +        return Token.Instruction.Payload{
    +            .irq = .{
    +                .clear = clear,
    +                .wait = wait,
    +                .num = num,
    +                .rel = rel,
    +            },
    +        };
    +    }
    +
    +    fn get_set(self: *Tokenizer, diags: *?Diagnostics) TokenizeError!Token.Instruction.Payload {
    +        const dest_str = (try self.get_arg(diags)) orelse {
    +            diags.* = Diagnostics.init(0, "missing destination", .{});
    +            return error.MissingArg;
    +        };
    +        const value = try self.get_value();
    +
    +        const dest_lower = try lowercase_bounded(256, dest_str);
    +
    +        return Token.Instruction.Payload{
    +            .set = .{
    +                .destination = std.meta.stringToEnum(Token.Instruction.Set.Destination, dest_lower.slice()) orelse return error.InvalidDestination,
    +                .value = value,
    +            },
    +        };
    +    }
    +
    +    const instructions = std.ComptimeStringMap(*const fn (*Tokenizer, *?Diagnostics) TokenizeError!Token.Instruction.Payload, .{
    +        .{ "nop", get_nop },
    +        .{ "jmp", get_jmp },
    +        .{ "wait", get_wait },
    +        .{ "in", get_in },
    +        .{ "out", get_out },
    +        .{ "push", get_push },
    +        .{ "pull", get_pull },
    +        .{ "mov", get_mov },
    +        .{ "irq", get_irq },
    +        .{ "set", get_set },
    +    });
    +
    +    fn get_instruction(self: *Tokenizer, name: Identifier, diags: *?Diagnostics) !Token {
    +        const name_lower = try lowercase_bounded(256, name.str);
    +        const payload = if (instructions.get(name_lower.slice())) |handler|
    +            try handler(self, diags)
    +        else {
    +            diags.* = Diagnostics.init(name.index, "invalid instruction", .{});
    +            return error.InvalidInstruction;
    +        };
    +
    +        var side_set: ?Value = null;
    +        var delay: ?Value = null;
    +
    +        if (try self.peek_arg(diags)) |result| {
    +            if (eql_lower("side", result.str)) {
    +                self.consume_peek(result);
    +
    +                const side_set_str = (try self.get_arg(diags)) orelse return error.MissingArg;
    +                side_set = Value{ .expression = side_set_str };
    +            } else if (std.mem.startsWith(u8, result.str, "[") and std.mem.endsWith(u8, result.str, "]")) {
    +                self.consume_peek(result);
    +                delay = Value{ .expression = result.str[1 .. result.str.len - 1] };
    +            }
    +        }
    +
    +        if (try self.peek_arg(diags)) |result| {
    +            if (eql_lower("side", result.str)) {
    +                self.consume_peek(result);
    +
    +                const side_set_str = (try self.get_arg(diags)) orelse return error.MissingArg;
    +                assert(side_set == null);
    +                side_set = Value{ .expression = side_set_str };
    +            } else if (std.mem.startsWith(u8, result.str, "[") and std.mem.endsWith(u8, result.str, "]")) {
    +                self.consume_peek(result);
    +                assert(delay == null);
    +                delay = Value{
    +                    .expression = result.str[1 .. result.str.len - 1],
    +                };
    +            }
    +        }
    +
    +        self.skip_line();
    +        return Token{
    +            .index = name.index,
    +            .data = .{
    +                .instruction = .{
    +                    .payload = payload,
    +                    .side_set = side_set,
    +                    .delay = delay,
    +                },
    +            },
    +        };
    +    }
    +
    +    fn next(self: *Tokenizer, diags: *?assembler.Diagnostics) !?Token {
    +        while (self.peek()) |p| {
    +            switch (p) {
    +                ' ', '\t', '\n', '\r', ',' => self.consume(1),
    +                ';' => self.skip_line(),
    +                '/' => {
    +                    self.consume(1);
    +                    if (self.peek()) |p2| {
    +                        self.consume(1);
    +                        switch (p2) {
    +                            '/' => self.skip_line(),
    +                            '*' => self.skip_until_end_of_comment_block(),
    +                            else => unreachable,
    +                        }
    +                    } else return null;
    +                },
    +                '%' => {
    +                    self.consume(1);
    +                    self.skip_until_end_of_code_block();
    +                },
    +                '.' => {
    +                    self.consume(1);
    +                    return try self.get_directive(diags);
    +                },
    +                'a'...'z', 'A'...'Z', '0'...'9', '_' => {
    +                    const first = try self.get_identifier();
    +
    +                    // definitely a label
    +                    return if (eql_lower("public", first.str))
    +                        Token{
    +                            .index = first.index,
    +                            .data = .{
    +                                .label = .{
    +                                    .public = true,
    +                                    .name = blk: {
    +                                        const tmp = (try self.get_identifier()).str;
    +                                        break :blk tmp[0 .. tmp.len - 1];
    +                                    },
    +                                },
    +                            },
    +                        }
    +                    else if (std.mem.endsWith(u8, first.str, ":"))
    +                        Token{
    +                            .index = first.index,
    +                            .data = .{
    +                                .label = .{
    +                                    .name = first.str[0 .. first.str.len - 1],
    +                                },
    +                            },
    +                        }
    +                    else
    +                        try self.get_instruction(first, diags);
    +                },
    +                else => return error.Unhandled,
    +            }
    +        }
    +
    +        return null;
    +    }
    +};
    +
    +pub const Token = struct {
    +    index: u32,
    +    data: union(enum) {
    +        program: []const u8,
    +        define: Token.Define,
    +        origin: Value,
    +        side_set: SideSet,
    +        wrap_target: void,
    +        wrap: void,
    +        lang_opt: LangOpt,
    +        word: Value,
    +        label: Label,
    +        instruction: Instruction,
    +    },
    +
    +    pub const Tag = std.meta.Tag(std.meta.FieldType(Token, .data));
    +
    +    pub const Label = struct {
    +        name: []const u8,
    +        public: bool = false,
    +    };
    +
    +    // TODO: use Value instead of numbers
    +    pub const Instruction = struct {
    +        payload: Payload,
    +        side_set: ?Value = null,
    +        // TODO: delay can look like [T1-1], so we could consider the square
    +        // brackets to be an expression
    +        delay: ?Value = null,
    +
    +        pub const Payload = union(enum) {
    +            nop: void,
    +            jmp: Jmp,
    +            wait: Wait,
    +            in: In,
    +            out: Out,
    +            push: Push,
    +            pull: Pull,
    +            mov: Mov,
    +            irq: Irq,
    +            set: Set,
    +        };
    +
    +        pub const Jmp = struct {
    +            condition: Condition,
    +            target: []const u8,
    +
    +            pub const Condition = enum(u3) {
    +                always = 0b000,
    +                x_is_zero = 0b001, // !X
    +                x_dec = 0b010, // X--
    +                y_is_zero = 0b011, // !Y
    +                y_dec = 0b100, // Y--
    +                x_is_not_y = 0b101, //X!=Y
    +                pin = 0b110, // PIN
    +                osre_not_empty = 0b111, // !OSRE
    +            };
    +        };
    +
    +        pub const Wait = struct {
    +            polarity: u1,
    +            source: Source,
    +            num: Value,
    +            rel: bool,
    +
    +            pub const Source = enum(u2) {
    +                gpio = 0b00,
    +                pin = 0b01,
    +                irq = 0b10,
    +            };
    +        };
    +
    +        pub const In = struct {
    +            source: Source,
    +            bit_count: u5,
    +
    +            pub const Source = enum(u3) {
    +                pins = 0b00,
    +                x = 0b001,
    +                y = 0b010,
    +                null = 0b011,
    +                isr = 0b110,
    +                osr = 0b111,
    +            };
    +        };
    +
    +        pub const Out = struct {
    +            destination: Destination,
    +            bit_count: u5,
    +
    +            pub const Destination = enum(u3) {
    +                pins = 0b000,
    +                x = 0b001,
    +                y = 0b010,
    +                null = 0b011,
    +                pindirs = 0b100,
    +                pc = 0b101,
    +                isr = 0b110,
    +                exec = 0b111,
    +            };
    +        };
    +
    +        pub const Push = struct {
    +            block: bool,
    +            iffull: bool,
    +        };
    +
    +        pub const Pull = struct {
    +            block: bool,
    +            ifempty: bool,
    +        };
    +
    +        pub const Mov = struct {
    +            destination: Destination,
    +            operation: Operation,
    +            source: Source,
    +
    +            pub const Destination = enum(u3) {
    +                pins = 0b000,
    +                x = 0b001,
    +                y = 0b010,
    +                exec = 0b100,
    +                pc = 0b101,
    +                isr = 0b110,
    +                osr = 0b111,
    +            };
    +
    +            pub const Operation = enum(u2) {
    +                none = 0b00,
    +                invert = 0b01,
    +                bit_reverse = 0b10,
    +            };
    +
    +            pub const Source = enum(u3) {
    +                pins = 0b00,
    +                x = 0b001,
    +                y = 0b010,
    +                null = 0b011,
    +                status = 0b101,
    +                isr = 0b110,
    +                osr = 0b111,
    +            };
    +        };
    +
    +        pub const Irq = struct {
    +            clear: bool,
    +            wait: bool,
    +            num: Value,
    +            rel: bool,
    +        };
    +
    +        pub const Set = struct {
    +            destination: Destination,
    +            value: Value,
    +
    +            pub const Destination = enum(u3) {
    +                pins = 0b000,
    +                x = 0b001,
    +                y = 0b010,
    +                pindirs = 0b100,
    +            };
    +        };
    +    };
    +
    +    pub const Define = struct {
    +        name: []const u8,
    +        value: Value,
    +        public: bool = false,
    +        index: u32,
    +    };
    +
    +    pub const SideSet = struct {
    +        count: Value,
    +        opt: bool = false,
    +        pindirs: bool = false,
    +    };
    +
    +    pub const LangOpt = struct {
    +        lang: []const u8,
    +        name: []const u8,
    +        option: []const u8,
    +    };
    +};
    +
    +//==============================================================================
    +// Tokenization Tests
    +//==============================================================================
    +
    +const expect = std.testing.expect;
    +const expectEqual = std.testing.expectEqual;
    +const expectEqualStrings = std.testing.expectEqualStrings;
    +
    +const DirectiveTag = @typeInfo(Token.Directive).Union.tag_type.?;
    +const PayloadTag = @typeInfo(Token.Instruction.Payload).Union.tag_type.?;
    +
    +fn expect_program(expected: []const u8, actual: Token) !void {
    +    try expectEqual(Token.Tag.program, actual.data);
    +    try expectEqualStrings(expected, actual.data.program);
    +}
    +
    +fn expect_value(expected: Value, actual: Value) !void {
    +    switch (expected) {
    +        .integer => |int| try expectEqual(int, actual.integer),
    +        .string => |str| try expectEqualStrings(str, actual.string),
    +        .expression => |expr| try expectEqualStrings(expr, actual.expression),
    +    }
    +}
    +
    +fn expect_opt_value(expected: ?Value, actual: ?Value) !void {
    +    if (expected != null)
    +        switch (expected.?) {
    +            .integer => |int| try expectEqual(int, actual.?.integer),
    +            .string => |str| try expectEqualStrings(str, actual.?.string),
    +            .expression => |expr| try expectEqualStrings(expr, actual.?.expression),
    +        };
    +}
    +
    +fn expect_define(expected: Token.Define, actual: Token) !void {
    +    try expectEqual(Token.Tag.define, actual.data);
    +
    +    const define = actual.data.define;
    +    try expectEqualStrings(expected.name, define.name);
    +    try expect_value(expected.value, define.value);
    +}
    +
    +fn expect_origin(expected: Value, actual: Token) !void {
    +    try expectEqual(Token.Tag.origin, actual.data);
    +    try expect_value(expected, actual.data.origin);
    +}
    +
    +fn expect_side_set(expected: Token.SideSet, actual: Token) !void {
    +    try expectEqual(Token.Tag.side_set, actual.data);
    +
    +    const side_set = actual.data.side_set;
    +    try expect_value(expected.count, side_set.count);
    +    try expectEqual(expected.opt, side_set.opt);
    +    try expectEqual(expected.pindirs, side_set.pindirs);
    +}
    +
    +fn expect_wrap_target(actual: Token) !void {
    +    try expectEqual(Token.Tag.wrap_target, actual.data);
    +}
    +
    +fn expect_wrap(actual: Token) !void {
    +    try expectEqual(Token.Tag.wrap, actual.data);
    +}
    +
    +fn expect_lang_opt(expected: Token.LangOpt, actual: Token) !void {
    +    try expectEqual(Token.Tag.lang_opt, actual.data);
    +
    +    const lang_opt = actual.data.lang_opt;
    +    try expectEqualStrings(expected.lang, lang_opt.lang);
    +    try expectEqualStrings(expected.name, lang_opt.name);
    +    try expectEqualStrings(expected.option, lang_opt.option);
    +}
    +
    +fn expect_word(expected: Value, actual: Token) !void {
    +    try expectEqual(Token.Tag.word, actual.data);
    +    try expect_value(expected, actual.data.word);
    +}
    +
    +fn expect_label(expected: Token.Label, actual: Token) !void {
    +    try expectEqual(Token.Tag.label, actual.data);
    +
    +    const label = actual.data.label;
    +    try expectEqual(expected.public, label.public);
    +    try expectEqualStrings(expected.name, label.name);
    +}
    +
    +const ExpectedNopInstr = struct {
    +    delay: ?Value = null,
    +    side_set: ?Value = null,
    +};
    +
    +fn expect_instr_nop(expected: ExpectedNopInstr, actual: Token) !void {
    +    try expectEqual(Token.Tag.instruction, actual.data);
    +    try expectEqual(PayloadTag.nop, actual.data.instruction.payload);
    +
    +    const instr = actual.data.instruction;
    +    try expect_opt_value(expected.delay, instr.delay);
    +    try expect_opt_value(expected.side_set, instr.side_set);
    +}
    +
    +const ExpectedSetInstr = struct {
    +    dest: Token.Instruction.Set.Destination,
    +    value: Value,
    +    delay: ?Value = null,
    +    side_set: ?Value = null,
    +};
    +
    +fn expect_instr_set(expected: ExpectedSetInstr, actual: Token) !void {
    +    try expectEqual(Token.Tag.instruction, actual.data);
    +    try expectEqual(PayloadTag.set, actual.data.instruction.payload);
    +
    +    const instr = actual.data.instruction;
    +    try expect_opt_value(expected.delay, instr.delay);
    +    try expect_opt_value(expected.side_set, instr.side_set);
    +
    +    const set = instr.payload.set;
    +    try expectEqual(expected.dest, set.destination);
    +    try expect_value(expected.value, set.value);
    +}
    +
    +const ExpectedJmpInstr = struct {
    +    cond: Token.Instruction.Jmp.Condition = .always,
    +    target: []const u8,
    +    delay: ?Value = null,
    +    side_set: ?Value = null,
    +};
    +
    +fn expect_instr_jmp(expected: ExpectedJmpInstr, actual: Token) !void {
    +    try expectEqual(Token.Tag.instruction, actual.data);
    +    try expectEqual(PayloadTag.jmp, actual.data.instruction.payload);
    +
    +    const instr = actual.data.instruction;
    +    try expect_opt_value(expected.delay, instr.delay);
    +    try expect_opt_value(expected.side_set, instr.side_set);
    +
    +    const jmp = instr.payload.jmp;
    +    try expectEqual(expected.cond, jmp.condition);
    +    try expectEqualStrings(expected.target, jmp.target);
    +}
    +
    +const ExpectedWaitInstr = struct {
    +    polarity: u1,
    +    source: Token.Instruction.Wait.Source,
    +    num: Value,
    +    // only valid for irq source
    +    rel: bool = false,
    +    delay: ?Value = null,
    +    side_set: ?Value = null,
    +};
    +
    +fn expect_instr_wait(expected: ExpectedWaitInstr, actual: Token) !void {
    +    try expectEqual(Token.Tag.instruction, actual.data);
    +    try expectEqual(PayloadTag.wait, actual.data.instruction.payload);
    +
    +    const instr = actual.data.instruction;
    +    try expect_opt_value(expected.delay, instr.delay);
    +    try expect_opt_value(expected.side_set, instr.side_set);
    +
    +    const wait = instr.payload.wait;
    +    try expectEqual(expected.polarity, wait.polarity);
    +    try expectEqual(expected.source, wait.source);
    +    try expect_value(expected.num, wait.num);
    +}
    +
    +const ExpectedInInstr = struct {
    +    source: Token.Instruction.In.Source,
    +    bit_count: u5,
    +    delay: ?Value = null,
    +    side_set: ?Value = null,
    +};
    +
    +fn expect_instr_in(expected: ExpectedInInstr, actual: Token) !void {
    +    try expectEqual(Token.Tag.instruction, actual.data);
    +    try expectEqual(PayloadTag.in, actual.data.instruction.payload);
    +
    +    const instr = actual.data.instruction;
    +    try expect_opt_value(expected.delay, instr.delay);
    +    try expect_opt_value(expected.side_set, instr.side_set);
    +
    +    const in = instr.payload.in;
    +    try expectEqual(expected.source, in.source);
    +    try expectEqual(expected.bit_count, in.bit_count);
    +}
    +
    +const ExpectedOutInstr = struct {
    +    destination: Token.Instruction.Out.Destination,
    +    bit_count: u5,
    +    delay: ?Value = null,
    +    side_set: ?Value = null,
    +};
    +
    +fn expect_instr_out(expected: ExpectedOutInstr, actual: Token) !void {
    +    try expectEqual(Token.Tag.instruction, actual.data);
    +    try expectEqual(PayloadTag.out, actual.data.instruction.payload);
    +
    +    const instr = actual.data.instruction;
    +    try expect_opt_value(expected.delay, instr.delay);
    +    try expect_opt_value(expected.side_set, instr.side_set);
    +
    +    const out = instr.payload.out;
    +    try expectEqual(expected.destination, out.destination);
    +    try expectEqual(expected.bit_count, out.bit_count);
    +}
    +
    +const ExpectedPushInstr = struct {
    +    block: bool = true,
    +    iffull: bool = false,
    +    delay: ?Value = null,
    +    side_set: ?Value = null,
    +};
    +
    +fn expect_instr_push(expected: ExpectedPushInstr, actual: Token) !void {
    +    try expectEqual(Token.Tag.instruction, actual.data);
    +    try expectEqual(PayloadTag.push, actual.data.instruction.payload);
    +
    +    const instr = actual.data.instruction;
    +    try expect_opt_value(expected.delay, instr.delay);
    +    try expect_opt_value(expected.side_set, instr.side_set);
    +
    +    const push = instr.payload.push;
    +    try expectEqual(expected.block, push.block);
    +    try expectEqual(expected.iffull, push.iffull);
    +}
    +
    +const ExpectedPullInstr = struct {
    +    block: bool = true,
    +    ifempty: bool = false,
    +    delay: ?Value = null,
    +    side_set: ?Value = null,
    +};
    +
    +fn expect_instr_pull(expected: ExpectedPullInstr, actual: Token) !void {
    +    try expectEqual(Token.Tag.instruction, actual.data);
    +    try expectEqual(PayloadTag.pull, actual.data.instruction.payload);
    +
    +    const instr = actual.data.instruction;
    +    try expect_opt_value(expected.delay, instr.delay);
    +    try expect_opt_value(expected.side_set, instr.side_set);
    +
    +    const pull = instr.payload.pull;
    +    try expectEqual(expected.block, pull.block);
    +    try expectEqual(expected.ifempty, pull.ifempty);
    +}
    +
    +const ExpectedMovInstr = struct {
    +    source: Token.Instruction.Mov.Source,
    +    destination: Token.Instruction.Mov.Destination,
    +    operation: Token.Instruction.Mov.Operation = .none,
    +    delay: ?Value = null,
    +    side_set: ?Value = null,
    +};
    +
    +fn expect_instr_mov(expected: ExpectedMovInstr, actual: Token) !void {
    +    try expectEqual(Token.Tag.instruction, actual.data);
    +    try expectEqual(PayloadTag.mov, actual.data.instruction.payload);
    +
    +    const instr = actual.data.instruction;
    +    try expect_opt_value(expected.delay, instr.delay);
    +    try expect_opt_value(expected.side_set, instr.side_set);
    +
    +    const mov = instr.payload.mov;
    +    try expectEqual(expected.source, mov.source);
    +    try expectEqual(expected.operation, mov.operation);
    +    try expectEqual(expected.destination, mov.destination);
    +}
    +
    +const ExpectedIrqInstr = struct {
    +    clear: bool,
    +    wait: bool,
    +    num: u5,
    +    rel: bool = false,
    +    delay: ?Value = null,
    +    side_set: ?Value = null,
    +};
    +
    +fn expect_instr_irq(expected: ExpectedIrqInstr, actual: Token) !void {
    +    try expectEqual(Token.Tag.instruction, actual.data);
    +    try expectEqual(PayloadTag.irq, actual.data.instruction.payload);
    +
    +    const instr = actual.data.instruction;
    +    try expect_opt_value(expected.delay, instr.delay);
    +    try expect_opt_value(expected.side_set, instr.side_set);
    +
    +    const irq = instr.payload.irq;
    +    try expectEqual(expected.clear, irq.clear);
    +    try expectEqual(expected.wait, irq.wait);
    +    try expectEqual(expected.rel, irq.rel);
    +}
    +
    +fn bounded_tokenize(source: []const u8) !std.BoundedArray(Token, 256) {
    +    var diags: ?assembler.Diagnostics = null;
    +    return tokenize(source, &diags, .{}) catch |err| if (diags) |d| blk: {
    +        std.log.err("error at index {}: {s}", .{ d.index, d.message.slice() });
    +        break :blk err;
    +    } else err;
    +}
    +
    +test "tokenize.empty string" {
    +    const tokens = try bounded_tokenize("");
    +    try expectEqual(@as(usize, 0), tokens.len);
    +}
    +
    +test "tokenize.whitespace" {
    +    const tokens = try bounded_tokenize(" \t\r\n");
    +    try expectEqual(@as(usize, 0), tokens.len);
    +}
    +
    +test "tokenize.comma line comment" {
    +    const tokens = try bounded_tokenize("; this is a line comment");
    +
    +    try expectEqual(@as(usize, 0), tokens.len);
    +}
    +
    +test "tokenize.slash line comment" {
    +    const tokens = try bounded_tokenize("// this is a line comment");
    +
    +    try expectEqual(@as(usize, 0), tokens.len);
    +}
    +
    +test "tokenize.block comment" {
    +    const tokens = try bounded_tokenize(
    +        \\/* this is
    +        \\   a block comment */
    +    );
    +
    +    try expectEqual(@as(usize, 0), tokens.len);
    +}
    +
    +test "tokenize.code block" {
    +    const tokens = try bounded_tokenize(
    +        \\% c-sdk {
    +        \\   int foo;
    +        \\%}
    +    );
    +
    +    try expectEqual(@as(usize, 0), tokens.len);
    +}
    +
    +test "tokenize.directive.program" {
    +    const tokens = try bounded_tokenize(".program arst");
    +    try expect_program("arst", tokens.get(0));
    +}
    +
    +test "tokenize.directive.define" {
    +    const tokens = try bounded_tokenize(".define symbol_name 1");
    +
    +    try expect_define(.{
    +        .name = "symbol_name",
    +        .value = .{ .expression = "1" },
    +        .index = 8,
    +    }, tokens.get(0));
    +}
    +
    +test "tokenize.directive.define.public" {
    +    const tokens = try bounded_tokenize(".define public symbol_name 0x1");
    +
    +    try expect_define(.{
    +        .name = "symbol_name",
    +        .value = .{ .expression = "0x1" },
    +        .public = true,
    +        .index = 15,
    +    }, tokens.get(0));
    +}
    +
    +test "tokenize.directive.define.with expression" {
    +    const tokens = try bounded_tokenize(
    +        \\.define symbol_name 0x1
    +        \\.define something (symbol_name * 2)
    +    );
    +
    +    try expect_define(.{
    +        .name = "symbol_name",
    +        .value = .{ .expression = "0x1" },
    +        .index = 8,
    +    }, tokens.get(0));
    +
    +    try expect_define(.{
    +        .name = "something",
    +        .value = .{ .expression = "(symbol_name * 2)" },
    +        .index = 32,
    +    }, tokens.get(1));
    +}
    +
    +test "tokenize.directive.origin" {
    +    const tokens = try bounded_tokenize(".origin 0x10");
    +    try expect_origin(.{ .integer = 0x10 }, tokens.get(0));
    +}
    +
    +test "tokenize.directive.side_set" {
    +    const tokens = try bounded_tokenize(".side_set 1");
    +    try expect_side_set(.{ .count = .{ .integer = 1 } }, tokens.get(0));
    +}
    +
    +test "tokenize.directive.side_set.opt" {
    +    const tokens = try bounded_tokenize(".side_set 1 opt");
    +    try expect_side_set(.{ .count = .{ .integer = 1 }, .opt = true }, tokens.get(0));
    +}
    +
    +test "tokenize.directive.side_set.pindirs" {
    +    const tokens = try bounded_tokenize(".side_set 1 pindirs");
    +    try expect_side_set(.{ .count = .{ .integer = 1 }, .pindirs = true }, tokens.get(0));
    +}
    +
    +test "tokenize.directive.wrap_target" {
    +    const tokens = try bounded_tokenize(".wrap_target");
    +    try expect_wrap_target(tokens.get(0));
    +}
    +
    +test "tokenize.directive.wrap" {
    +    const tokens = try bounded_tokenize(".wrap");
    +    try expect_wrap(tokens.get(0));
    +}
    +
    +test "tokenize.directive.lang_opt" {
    +    const tokens = try bounded_tokenize(".lang_opt c flag foo");
    +    try expect_lang_opt(.{ .lang = "c", .name = "flag", .option = "foo" }, tokens.get(0));
    +}
    +
    +test "tokenize.directive.word" {
    +    const tokens = try bounded_tokenize(".word 0xaaaa");
    +    try expect_word(.{ .integer = 0xaaaa }, tokens.get(0));
    +}
    +
    +test "tokenize.label" {
    +    const tokens = try bounded_tokenize("my_label:");
    +    try expect_label(.{ .name = "my_label" }, tokens.get(0));
    +}
    +
    +test "tokenize.label.public" {
    +    const tokens = try bounded_tokenize("public my_label:");
    +    try expect_label(.{ .name = "my_label", .public = true }, tokens.get(0));
    +}
    +
    +test "tokenize.instr.nop" {
    +    const tokens = try bounded_tokenize("nop");
    +    try expect_instr_nop(.{}, tokens.get(0));
    +}
    +
    +test "tokenize.instr.jmp.label" {
    +    const tokens = try bounded_tokenize("jmp my_label");
    +    try expect_instr_jmp(.{ .target = "my_label" }, tokens.get(0));
    +}
    +
    +test "tokenize.instr.jmp.value" {
    +    const tokens = try bounded_tokenize("jmp 0x2");
    +    try expect_instr_jmp(.{ .target = "0x2" }, tokens.get(0));
    +}
    +
    +test "tokenize.instr.jmp.conditions" {
    +    const Condition = Token.Instruction.Jmp.Condition;
    +    const cases = std.ComptimeStringMap(Condition, .{
    +        .{ "!x", .x_is_zero },
    +        .{ "x--", .x_dec },
    +        .{ "!y", .y_is_zero },
    +        .{ "y--", .y_dec },
    +        .{ "x!=y", .x_is_not_y },
    +        .{ "pin", .pin },
    +        .{ "!osre", .osre_not_empty },
    +    });
    +
    +    inline for (cases.kvs) |case| {
    +        const op = case.key;
    +        const cond = case.value;
    +        const tokens = try bounded_tokenize(std.fmt.comptimePrint("jmp {s} my_label", .{op}));
    +
    +        try expect_instr_jmp(.{ .cond = cond, .target = "my_label" }, tokens.get(0));
    +    }
    +}
    +
    +test "tokenize.instr.wait" {
    +    inline for (.{ "gpio", "pin", "irq" }) |source| {
    +        const tokens = try bounded_tokenize(std.fmt.comptimePrint("wait 0 {s} 1", .{source}));
    +        try expect_instr_wait(.{
    +            .polarity = 0,
    +            .source = @field(Token.Instruction.Wait.Source, source),
    +            .num = .{ .integer = 1 },
    +        }, tokens.get(0));
    +    }
    +}
    +
    +test "tokenize.instr.wait.irq.rel" {
    +    const tokens = try bounded_tokenize("wait 1 irq 1 rel");
    +    try expect_instr_wait(.{
    +        .polarity = 1,
    +        .source = .irq,
    +        .num = .{ .integer = 1 },
    +        .rel = true,
    +    }, tokens.get(0));
    +}
    +
    +test "tokenize.instr.in" {
    +    inline for (.{
    +        "pins",
    +        "x",
    +        "y",
    +        "null",
    +        "isr",
    +        "osr",
    +    }, 1..) |source, bit_count| {
    +        const tokens = try bounded_tokenize(std.fmt.comptimePrint("in {s}, {}", .{
    +            source,
    +            bit_count,
    +        }));
    +
    +        try expect_instr_in(.{
    +            .source = @field(Token.Instruction.In.Source, source),
    +            .bit_count = @intCast(u5, bit_count),
    +        }, tokens.get(0));
    +    }
    +}
    +
    +test "tokenize.instr.out" {
    +    inline for (.{
    +        "pins",
    +        "x",
    +        "y",
    +        "null",
    +        "pindirs",
    +        "pc",
    +        "isr",
    +        "exec",
    +    }, 1..) |destination, bit_count| {
    +        const tokens = try bounded_tokenize(std.fmt.comptimePrint("out {s}, {}", .{
    +            destination,
    +            bit_count,
    +        }));
    +
    +        try expect_instr_out(.{
    +            .destination = @field(Token.Instruction.Out.Destination, destination),
    +            .bit_count = @intCast(u5, bit_count),
    +        }, tokens.get(0));
    +    }
    +}
    +
    +test "tokenize.instr.push" {
    +    const tokens = try bounded_tokenize("push");
    +    try expect_instr_push(.{}, tokens.get(0));
    +}
    +
    +test "tokenize.instr.push.block" {
    +    const tokens = try bounded_tokenize("push block");
    +    try expect_instr_push(.{
    +        .block = true,
    +    }, tokens.get(0));
    +}
    +
    +test "tokenize.instr.push.noblock" {
    +    const tokens = try bounded_tokenize("push noblock");
    +    try expect_instr_push(.{
    +        .block = false,
    +    }, tokens.get(0));
    +}
    +
    +test "tokenize.instr.push.iffull" {
    +    const tokens = try bounded_tokenize("push iffull noblock");
    +    try expect_instr_push(.{
    +        .block = false,
    +        .iffull = true,
    +    }, tokens.get(0));
    +}
    +
    +test "tokenize.instr.pull" {
    +    const tokens = try bounded_tokenize("pull");
    +    try expect_instr_pull(.{}, tokens.get(0));
    +}
    +
    +test "tokenize.instr.pull.block" {
    +    const tokens = try bounded_tokenize("pull block");
    +    try expect_instr_pull(.{
    +        .block = true,
    +    }, tokens.get(0));
    +}
    +
    +test "tokenize.instr.pull.noblock" {
    +    const tokens = try bounded_tokenize("pull noblock");
    +    try expect_instr_pull(.{
    +        .block = false,
    +    }, tokens.get(0));
    +}
    +
    +test "tokenize.instr.pull.ifempty" {
    +    const tokens = try bounded_tokenize("pull ifempty noblock");
    +    try expect_instr_pull(.{
    +        .block = false,
    +        .ifempty = true,
    +    }, tokens.get(0));
    +}
    +
    +test "tokenize.instr.mov" {
    +    inline for (.{
    +        "pins",
    +        "x",
    +        "y",
    +        "null",
    +        "status",
    +        "isr",
    +        "osr",
    +    }) |source| {
    +        const tokens = try bounded_tokenize(std.fmt.comptimePrint("mov x {s}", .{source}));
    +
    +        try expect_instr_mov(.{
    +            .source = @field(Token.Instruction.Mov.Source, source),
    +            .destination = .x,
    +        }, tokens.get(0));
    +    }
    +
    +    inline for (.{
    +        "pins",
    +        "x",
    +        "y",
    +        "exec",
    +        "pc",
    +        "isr",
    +        "osr",
    +    }) |dest| {
    +        const tokens = try bounded_tokenize(std.fmt.comptimePrint("mov {s} x", .{dest}));
    +
    +        try expect_instr_mov(.{
    +            .source = .x,
    +            .destination = @field(Token.Instruction.Mov.Destination, dest),
    +        }, tokens.get(0));
    +    }
    +
    +    const Operation = Token.Instruction.Mov.Operation;
    +    const operations = std.ComptimeStringMap(Operation, .{
    +        .{ "!", .invert },
    +        .{ "~", .invert },
    +        .{ "::", .bit_reverse },
    +    });
    +
    +    inline for (.{ "", " " }) |space| {
    +        inline for (operations.kvs) |kv| {
    +            const str = kv.key;
    +            const operation = kv.value;
    +            const tokens = try bounded_tokenize(std.fmt.comptimePrint("mov x {s}{s}y", .{
    +                str,
    +                space,
    +            }));
    +
    +            try expect_instr_mov(.{
    +                .destination = .x,
    +                .operation = operation,
    +                .source = .y,
    +            }, tokens.get(0));
    +        }
    +    }
    +}
    +
    +test "tokenize.instr.irq" {
    +    const ClearWait = struct {
    +        clear: bool,
    +        wait: bool,
    +    };
    +
    +    const modes = std.ComptimeStringMap(ClearWait, .{
    +        .{ "", .{ .clear = false, .wait = false } },
    +        .{ "set", .{ .clear = false, .wait = false } },
    +        .{ "nowait", .{ .clear = false, .wait = false } },
    +        .{ "wait", .{ .clear = false, .wait = true } },
    +        .{ "clear", .{ .clear = true, .wait = false } },
    +    });
    +
    +    inline for (modes.kvs, 0..) |kv, num| {
    +        const tokens = try bounded_tokenize(std.fmt.comptimePrint("irq {s} {}", .{
    +            kv.key,
    +            num,
    +        }));
    +
    +        try expect_instr_irq(.{
    +            .clear = kv.value.clear,
    +            .wait = kv.value.wait,
    +            .num = num,
    +        }, tokens.get(0));
    +    }
    +}
    +
    +test "tokenize.instr.irq.rel" {
    +    const tokens = try bounded_tokenize("irq set 2 rel");
    +    try expect_instr_irq(.{
    +        .clear = false,
    +        .wait = false,
    +        .num = 2,
    +        .rel = true,
    +    }, tokens.get(0));
    +}
    +
    +test "tokenize.instr.set" {
    +    inline for (.{
    +        "pins",
    +        "x",
    +        "y",
    +        "pindirs",
    +    }) |dest| {
    +        const tokens = try bounded_tokenize(std.fmt.comptimePrint("set {s}, 2", .{dest}));
    +        try expect_instr_set(.{
    +            .dest = @field(Token.Instruction.Set.Destination, dest),
    +            .value = .{ .integer = 2 },
    +        }, tokens.get(0));
    +    }
    +}
    +
    +test "tokenize.instr.set.with expression including define" {
    +    const tokens = try bounded_tokenize("set X, (NUM_CYCLES - 1)         ; initialise the loop counter");
    +    try expect_instr_set(.{
    +        .dest = .x,
    +        .value = .{ .expression = "(NUM_CYCLES - 1)" },
    +    }, tokens.get(0));
    +}
    +
    +const instruction_examples = .{
    +    "nop",
    +    "jmp arst",
    +    "wait 0 gpio 1",
    +    "in pins, 2",
    +    "out pc, 1",
    +    "push",
    +    "pull",
    +    "mov x y",
    +    "irq 1",
    +    "set pins 2",
    +};
    +
    +test "tokenize.instr.label prefixed" {
    +    inline for (instruction_examples) |instr| {
    +        const tokens = try bounded_tokenize(std.fmt.comptimePrint("my_label: {s}", .{instr}));
    +        try expectEqual(@as(usize, 2), tokens.len);
    +        try expect_label(.{ .name = "my_label" }, tokens.get(0));
    +    }
    +}
    +
    +test "tokenize.instr.side_set" {
    +    inline for (instruction_examples) |instr| {
    +        const tokens = try bounded_tokenize(std.fmt.comptimePrint("{s} side 0", .{instr}));
    +        const token = tokens.get(0);
    +        try expect_value(.{
    +            .expression = "0",
    +        }, token.data.instruction.side_set.?);
    +        try expectEqual(@as(?Value, null), token.data.instruction.delay);
    +    }
    +}
    +
    +test "tokenize.instr.delay" {
    +    inline for (instruction_examples) |instr| {
    +        const tokens = try bounded_tokenize(std.fmt.comptimePrint("{s} [1]", .{instr}));
    +        const token = tokens.get(0);
    +        try expectEqual(@as(?Value, null), token.data.instruction.side_set);
    +        try expect_value(.{
    +            .expression = "1",
    +        }, token.data.instruction.delay.?);
    +    }
    +}
    +
    +test "tokenize.instr.delay.expression" {
    +    inline for (instruction_examples) |instr| {
    +        const tokens = try bounded_tokenize(std.fmt.comptimePrint("{s} [T-1]", .{instr}));
    +        const token = tokens.get(0);
    +        try expectEqual(@as(?Value, null), token.data.instruction.side_set);
    +        try expect_value(.{
    +            .expression = "T-1",
    +        }, token.data.instruction.delay.?);
    +    }
    +}
    +
    +test "tokenize.instr.side_set.expression" {
    +    inline for (instruction_examples) |instr| {
    +        const tokens = try bounded_tokenize(std.fmt.comptimePrint("{s} side (N-1)", .{instr}));
    +        const token = tokens.get(0);
    +        try expect_value(.{
    +            .expression = "(N-1)",
    +        }, token.data.instruction.side_set.?);
    +        try expectEqual(@as(?Value, null), token.data.instruction.delay);
    +    }
    +}
    +
    +test "tokenize.instr.side_set and delay" {
    +    inline for (instruction_examples) |instr| {
    +        const tokens = try bounded_tokenize(std.fmt.comptimePrint("{s} side 1 [2]", .{instr}));
    +        const token = tokens.get(0);
    +        try expect_value(.{
    +            .expression = "1",
    +        }, token.data.instruction.side_set.?);
    +        try expect_value(.{
    +            .expression = "2",
    +        }, token.data.instruction.delay.?);
    +    }
    +}
    +
    +test "tokenize.instr.side_set and delay reversed" {
    +    inline for (instruction_examples) |instr| {
    +        const tokens = try bounded_tokenize(std.fmt.comptimePrint("{s} [2] side 1", .{instr}));
    +        const token = tokens.get(0);
    +        try expect_value(.{
    +            .expression = "1",
    +        }, token.data.instruction.side_set.?);
    +        try expect_value(.{
    +            .expression = "2",
    +        }, token.data.instruction.delay.?);
    +    }
    +}
    +
    +test "tokenize.instr.comment with no whitespace" {
    +    const tokens = try bounded_tokenize("nop side 0x0 [1]; CSn front porch");
    +    try expect_instr_nop(.{
    +        .side_set = .{ .expression = "0x0" },
    +        .delay = .{ .expression = "1" },
    +    }, tokens.get(0));
    +}
    
    From 08779dfe02e3edab69126b6a96b1742049f6987a Mon Sep 17 00:00:00 2001
    From: Vlad Panazan 
    Date: Tue, 11 Apr 2023 07:43:12 +0300
    Subject: [PATCH 115/286] Add SPI read function (#38)
    
    ---
     deps/microzig    |  2 +-
     src/hal/pins.zig |  2 +-
     src/hal/spi.zig  | 43 ++++++++++++++++++++++++++++++++++---------
     3 files changed, 36 insertions(+), 11 deletions(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index dabc9325c..ceaa9ddcb 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit dabc9325cdee394ff66e28c91803cb814954b157
    +Subproject commit ceaa9ddcb080d0687ce2109f23db7db376ac911e
    diff --git a/src/hal/pins.zig b/src/hal/pins.zig
    index 7a204b8d2..3ff924638 100644
    --- a/src/hal/pins.zig
    +++ b/src/hal/pins.zig
    @@ -520,7 +520,7 @@ pub const GlobalConfiguration = struct {
                     if (@field(config, field.name)) |pin_config| {
                         const gpio_num = @enumToInt(@field(Pin, field.name));
                         const pull = pin_config.pull orelse continue;
    -                    if (comptime pin_config.getDirection() != .in)
    +                    if (comptime pin_config.get_direction() != .in)
                             @compileError("Only input pins can have pull up/down enabled");
     
                         gpio.set_pull(gpio_num, pull);
    diff --git a/src/hal/spi.zig b/src/hal/spi.zig
    index ea96f4099..002ccc4d7 100644
    --- a/src/hal/spi.zig
    +++ b/src/hal/spi.zig
    @@ -8,6 +8,7 @@ const gpio = @import("gpio.zig");
     const clocks = @import("clocks.zig");
     const resets = @import("resets.zig");
     const time = @import("time.zig");
    +const util = @import("util.zig");
     
     const SpiRegs = microzig.chip.types.peripherals.SPI0;
     
    @@ -78,11 +79,11 @@ pub const SPI = enum {
             return spi;
         }
     
    -    pub fn is_writable(spi: SPI) bool {
    +    pub inline fn is_writable(spi: SPI) bool {
             return spi.get_regs().SSPSR.read().TNF == 1;
         }
     
    -    pub fn is_readable(spi: SPI) bool {
    +    pub inline fn is_readable(spi: SPI) bool {
             return spi.get_regs().SSPSR.read().RNE == 1;
         }
         pub fn transceive(spi: SPI, src: []const u8, dst: []u8) usize {
    @@ -106,7 +107,7 @@ pub const SPI = enum {
     
             return src.len;
         }
    -    // Write len bytes directly from src to the SPI, and discard any data received back
    +    /// Write len bytes directly from src to the SPI, and discard any data received back
         pub fn write(spi: SPI, src: []const u8) usize {
             const spi_regs = spi.get_regs();
             // Write to TX FIFO whilst ignoring RX, then clean up afterward. When RX
    @@ -114,26 +115,50 @@ pub const SPI = enum {
             // push-on-full, but continues shifting. Safe if SSPIMSC_RORIM is not set.
             for (src) |s| {
                 while (!spi.is_writable()) {
    -                std.log.debug("SPI not writable!", .{});
    +                util.tight_loop_contents();
                 }
                 spi_regs.SSPDR.write_raw(s);
             }
             // Drain RX FIFO, then wait for shifting to finish (which may be *after*
             // TX FIFO drains), then drain RX FIFO again
             while (spi.is_readable()) {
    -            _ = spi_regs.SSPDR.raw;
    +            _ = spi_regs.SSPDR.read();
             }
    -        while (spi.get_regs().SSPSR.read().BSY == 1) {
    -            std.log.debug("SPI busy!", .{});
    +        while (spi_regs.SSPSR.read().BSY == 1) {
    +            util.tight_loop_contents();
             }
             while (spi.is_readable()) {
    -            _ = spi_regs.SSPDR.raw;
    +            _ = spi_regs.SSPDR.read();
             }
             // Don't leave overrun flag set
             peripherals.SPI0.SSPICR.modify(.{ .RORIC = 1 });
             return src.len;
         }
     
    +    /// Read len bytes directly from the SPI to dst.
    +    /// repeated_tx_data is output repeatedly on SO as data is read in from SI.
    +    /// Generally this can be 0, but some devices require a specific value here,
    +    /// e.g. SD cards expect 0xff
    +    pub fn read(spi: SPI, repeated_tx_data: u8, dst: []u8) usize {
    +        const spi_regs = spi.get_regs();
    +        const fifo_depth = 8;
    +        var rx_remaining = dst.len;
    +        var tx_remaining = dst.len;
    +
    +        while (rx_remaining > 0 or tx_remaining > 0) {
    +            if (tx_remaining > 0 and spi.is_writable() and rx_remaining < tx_remaining + fifo_depth) {
    +                spi_regs.SSPDR.write_raw(repeated_tx_data);
    +                tx_remaining -= 1;
    +            }
    +            if (rx_remaining > 0 and spi.is_readable()) {
    +                const bytes = std.mem.asBytes(&spi_regs.SSPDR.read().DATA);
    +                dst[dst.len - rx_remaining] = bytes[0];
    +                rx_remaining -= 1;
    +            }
    +        }
    +        return dst.len;
    +    }
    +
         fn set_baudrate(spi: SPI, baudrate: u32, freq_in: u32) u64 {
             const spi_regs = spi.get_regs();
             // Find smallest prescale value which puts output frequency in range of
    @@ -143,9 +168,9 @@ pub const SPI = enum {
                 if (freq_in < (prescale + 2) * 256 * baudrate) break;
             }
             std.debug.assert(prescale <= 254); //Freq too low
    +
             // Find largest post-divide which makes output <= baudrate. Post-divide is
             // an integer in the range 1 to 256 inclusive.
    -
             var postdiv: u64 = 256;
             while (postdiv > 1) : (postdiv -= 1) {
                 if (freq_in / (prescale * (postdiv - 1)) > baudrate) break;
    
    From ed60b5f2e72c8dc267c151e4fa73e1d9effb5ff6 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 12 Apr 2023 23:50:03 -0700
    Subject: [PATCH 116/286] Pio updates (#41)
    
    * program loading API
    
    * build examples in CI
    
    * build fixes
    ---
     .buildkite/pipeline.yml   |   5 +-
     build.zig                 |  13 +-
     examples/squarewave.zig   |  19 +-
     src/hal/pio.zig           | 512 ++++++++++++++++++++++++--------------
     src/hal/pio/assembler.zig |   4 +-
     5 files changed, 353 insertions(+), 200 deletions(-)
    
    diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml
    index 50f730f18..4e00ec296 100644
    --- a/.buildkite/pipeline.yml
    +++ b/.buildkite/pipeline.yml
    @@ -1,2 +1,5 @@
     steps:
    -  - command: zig build test
    +  - name: Build Examples
    +    command: zig build
    +  - name: Test
    +    command: zig build test
    diff --git a/build.zig b/build.zig
    index 21a91ff64..f9d372944 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -39,8 +39,8 @@ pub fn addPiPicoExecutable(
     // project requires multiple HALs, it accepts microzig as a param
     pub fn build(b: *Builder) !void {
         const optimize = b.standardOptimizeOption(.{});
    -    //var examples = Examples.init(b, optimize);
    -    //examples.install();
    +    var examples = Examples.init(b, optimize);
    +    examples.install(b);
     
         const pio_tests = b.addTest(.{
             .root_source_file = .{
    @@ -51,7 +51,7 @@ pub fn build(b: *Builder) !void {
         pio_tests.addIncludePath("src/hal/pio/assembler");
     
         const test_step = b.step("test", "run unit tests");
    -    test_step.dependOn(&pio_tests.run().step);
    +    test_step.dependOn(&b.addRunArtifact(pio_tests).step);
     }
     
     fn root() []const u8 {
    @@ -85,8 +85,9 @@ pub const Examples = struct {
             return ret;
         }
     
    -    pub fn install(examples: *Examples) void {
    -        inline for (@typeInfo(Examples).Struct.fields) |field|
    -            @field(examples, field.name).install();
    +    pub fn install(examples: *Examples, b: *Builder) void {
    +        inline for (@typeInfo(Examples).Struct.fields) |field| {
    +            b.installArtifact(@field(examples, field.name).inner);
    +        }
         }
     };
    diff --git a/examples/squarewave.zig b/examples/squarewave.zig
    index b320681ed..74370003c 100644
    --- a/examples/squarewave.zig
    +++ b/examples/squarewave.zig
    @@ -13,11 +13,12 @@ const squarewave_program = (rp2040.pio.assemble(
         \\    set pins, 1 [1]  ; Drive pin high and then delay for one cycle
         \\    set pins, 0      ; Drive pin low
         \\    jmp again        ; Set PC to label `again`
    -) catch
    +, .{}) catch
         @panic("failed to assemble program"))
         .get_program_by_name("squarewave");
     
     pub fn main() void {
    +    gpio.reset();
         // Pick one PIO instance arbitrarily. We're also arbitrarily picking state
         // machine 0 on this PIO instance (the state machines are numbered 0 to 3
         // inclusive).
    @@ -35,19 +36,27 @@ pub fn main() void {
         // speed down uniformly to meet some precise frequency target, e.g. for a
         // UART baud rate. This register has 16 integer divisor bits and 8
         // fractional divisor bits.
    -    pio.set_clkdiv_int_frac(sm, 2, 0x80);
    +    pio.sm_set_clkdiv(sm, .{
    +        .int = 2,
    +        .frac = 0x80,
    +    });
     
         // There are five pin mapping groups (out, in, set, side-set, jmp pin)
         // which are used by different instructions or in different circumstances.
         // Here we're just using SET instructions. Configure state machine 0 SETs
         // to affect GPIO 0 only; then configure GPIO0 to be controlled by PIO0,
         // as opposed to e.g. the processors.
    -    pio.set_out_pins(sm, 0, 1);
    -    gpio.set_function(0, .pio0);
    +    pio.gpio_init(0);
    +    pio.sm_set_pin_mappings(sm, .{
    +        .out = .{
    +            .base = 0,
    +            .count = 1,
    +        },
    +    });
     
         // Set the state machine running. The PIO CTRL register is global within a
         // PIO instance, so you can start/stop multiple state machines
         // simultaneously. We're using the register's hardware atomic set alias to
         // make one bit high without doing a read-modify-write on the register.
    -    pio.set_enabled(sm, true);
    +    pio.sm_set_enabled(sm, true);
     }
    diff --git a/src/hal/pio.zig b/src/hal/pio.zig
    index e37d713d9..22dc5a304 100644
    --- a/src/hal/pio.zig
    +++ b/src/hal/pio.zig
    @@ -1,5 +1,6 @@
     //! A PIO instance can load a single `Bytecode`, it has to be loaded into memory
     const std = @import("std");
    +const assert = std.debug.assert;
     
     const microzig = @import("microzig");
     const PIO = microzig.chip.types.peripherals.PIO0;
    @@ -8,26 +9,19 @@ const PIO1 = microzig.chip.peripherals.PIO1;
     
     const gpio = @import("gpio.zig");
     const assembler = @import("pio/assembler.zig");
    -pub const Bytecode = Bytecode;
    -pub const Program = assembler.Program;
    -pub const assemble = assembler.assemble;
    +const encoder = @import("pio/assembler/encoder.zig");
     
    +// global state for keeping track of used things
     var used_instruction_space: [2]u32 = [_]u32{ 0, 0 };
     var claimed_state_machines: [2]u4 = [_]u4{ 0, 0 };
     
    -pub const Join = enum {
    -    none,
    -    rx,
    -    tx,
    -};
    -
    -pub const Status = enum {
    -    rx_lessthan,
    -    tx_lessthan,
    -};
    +pub const Instruction = encoder.Instruction;
    +pub const Program = assembler.Program;
    +pub const assemble = assembler.assemble;
     
    -pub const Configuration = struct {
    -    pin: u32,
    +pub const Fifo = enum {
    +    tx,
    +    rx,
     };
     
     pub const StateMachine = enum(u2) {
    @@ -37,6 +31,97 @@ pub const StateMachine = enum(u2) {
         sm3,
     };
     
    +pub const Irq = enum {
    +    irq0,
    +    irq1,
    +
    +    pub const Regs = extern struct {
    +        enable: @TypeOf(PIO0.IRQ0_INTE),
    +        force: @TypeOf(PIO0.IRQ0_INTF),
    +        status: @TypeOf(PIO0.IRQ0_INTS),
    +    };
    +
    +    pub const Source = enum {
    +        rx_not_empty,
    +        tx_not_full,
    +        // TODO: determine what this does, is it just a combination of the
    +        // first two, or is it other things?
    +        statemachine,
    +    };
    +};
    +
    +pub const StateMachineRegs = extern struct {
    +    clkdiv: @TypeOf(PIO0.SM0_CLKDIV),
    +    execctrl: @TypeOf(PIO0.SM0_EXECCTRL),
    +    shiftctrl: @TypeOf(PIO0.SM0_SHIFTCTRL),
    +    addr: @TypeOf(PIO0.SM0_ADDR),
    +    instr: @TypeOf(PIO0.SM0_INSTR),
    +    pinctrl: @TypeOf(PIO0.SM0_PINCTRL),
    +};
    +
    +pub const ClkDivOptions = struct {
    +    int: u16,
    +    frac: u8,
    +
    +    pub fn from_float(div: f32) ClkDivOptions {
    +        const fixed = @floatToInt(u24, div * 256);
    +        return ClkDivOptions{
    +            .int = @truncate(u16, fixed >> 8),
    +            .frac = @truncate(u8, fixed),
    +        };
    +    }
    +};
    +
    +pub const ExecOptions = struct {
    +    wrap: u5,
    +    wrap_target: u5,
    +    side_pindir: bool,
    +    side_set_optional: bool,
    +};
    +
    +pub const ShiftOptions = struct {
    +    autopush: bool = false,
    +    autopull: bool = false,
    +    in_shiftdir: Direction = .left,
    +    out_shiftdir: Direction = .left,
    +    push_threshold: u5 = 0,
    +    pull_threshold: u5 = 0,
    +    join_tx: bool = false,
    +    join_rx: bool = false,
    +
    +    pub const Direction = enum(u1) {
    +        left,
    +        right,
    +    };
    +};
    +
    +pub fn PinMapping(comptime Count: type) type {
    +    return struct {
    +        base: u5 = 0,
    +        count: Count = 0,
    +    };
    +}
    +
    +pub const PinMappingOptions = struct {
    +    out: PinMapping(u6) = .{},
    +    set: PinMapping(u3) = .{},
    +    side_set: PinMapping(u3) = .{},
    +    in_base: u5 = 0,
    +};
    +
    +pub const StateMachineInitOptions = struct {
    +    clkdiv: ClkDivOptions,
    +    exec: ExecOptions,
    +    shift: ShiftOptions = .{},
    +    pin_mappings: PinMappingOptions = .{},
    +};
    +
    +pub const LoadAndStartProgramOptions = struct {
    +    clkdiv: ClkDivOptions,
    +    shift: ShiftOptions = .{},
    +    pin_mappings: PinMappingOptions = .{},
    +};
    +
     pub const Pio = enum(u1) {
         pio0 = 0,
         pio1 = 1,
    @@ -60,11 +145,6 @@ pub const Pio = enum(u1) {
             });
         }
     
    -    pub fn load(self: Pio, bytecode: Bytecode) !void {
    -        _ = self;
    -        _ = bytecode;
    -    }
    -
         fn can_add_program_at_offset(self: Pio, program: Program, offset: u5) bool {
             if (program.origin) |origin|
                 if (origin != offset)
    @@ -84,9 +164,10 @@ pub const Pio = enum(u1) {
                     origin
                 else
                     error.NoSpace
    -        else for (0..32 - program.isntruction.len) |i| {
    -            if (self.can_add_program_at_offset(program, i))
    -                break i;
    +        else for (0..(32 - program.instructions.len)) |i| {
    +            const offset = @intCast(u5, i);
    +            if (self.can_add_program_at_offset(program, offset))
    +                break offset;
             } else error.NoSpace;
         }
     
    @@ -103,12 +184,13 @@ pub const Pio = enum(u1) {
         }
     
         /// Public functions will need to lock independently, so only exposing this function for now
    -    pub fn add_program(self: Pio, program: Program) !void {
    -        // TODO: const lock = hw.Lock.claim()
    -        // defer lock.unlock();
    +    pub fn add_program(self: Pio, program: Program) !u5 {
    +        //const lock = hw.Lock.claim();
    +        //defer lock.unlock();
     
    -        const offset = try self.find_offset_for_program_unlocked();
    -        try self.add_program_at_offset(program, offset);
    +        const offset = try self.find_offset_for_program(program);
    +        try self.add_program_at_offset_unlocked(program, offset);
    +        return offset;
         }
     
         pub fn claim_unused_state_machine(self: Pio) !StateMachine {
    @@ -125,15 +207,6 @@ pub const Pio = enum(u1) {
             } else error.NoSpace;
         }
     
    -    pub const StateMachineRegs = extern struct {
    -        clkdiv: @TypeOf(PIO0.SM0_CLKDIV),
    -        execctrl: @TypeOf(PIO0.SM0_EXECCTRL),
    -        shiftctrl: @TypeOf(PIO0.SM0_SHIFTCTRL),
    -        addr: @TypeOf(PIO0.SM0_ADDR),
    -        instr: @TypeOf(PIO0.SM0_INSTR),
    -        pinctrl: @TypeOf(PIO0.SM0_PINCTRL),
    -    };
    -
         fn get_sm_regs(self: Pio, sm: StateMachine) *volatile StateMachineRegs {
             const pio_regs = self.get_regs();
             return switch (sm) {
    @@ -144,71 +217,88 @@ pub const Pio = enum(u1) {
             };
         }
     
    -    pub fn join_fifo(self: Pio, sm: StateMachine, join: Join) void {
    -        const tx: u1 = switch (join) {
    -            .tx => 1,
    -            .rx => 0,
    -            .none => 0,
    -        };
    -        const rx: u1 = switch (join) {
    -            .tx => 0,
    -            .rx => 1,
    -            .none => 0,
    +    fn get_irq_regs(self: Pio, irq: Irq) *volatile Irq.Regs {
    +        const pio_regs = self.get_regs();
    +        return switch (irq) {
    +            .irq0 => @ptrCast(*volatile Irq.Regs, &pio_regs.IRQ0_INTE),
    +            .irq1 => @ptrCast(*volatile Irq.Regs, &pio_regs.IRQ1_INTE),
             };
    -
    -        const sm_regs = self.get_sm_regs(sm);
    -        sm_regs.shiftctrl.modify(.{
    -            .FJOIN_TX = tx,
    -            .FJOIN_RX = rx,
    -        });
         }
     
    -    pub fn set_clkdiv_int_frac(self: Pio, sm: StateMachine, div_int: u16, div_frac: u8) void {
    -        if (div_int == 0 and div_frac != 0)
    +    pub inline fn sm_set_clkdiv(self: Pio, sm: StateMachine, options: ClkDivOptions) void {
    +        if (options.int == 0 and options.frac != 0)
                 @panic("invalid params");
     
             const sm_regs = self.get_sm_regs(sm);
             sm_regs.clkdiv.write(.{
    -            .INT = div_int,
    -            .FRAC = div_frac,
    +            .INT = options.int,
    +            .FRAC = options.frac,
     
                 .reserved8 = 0,
             });
         }
     
    -    pub fn set_out_shift(self: Pio, sm: StateMachine, args: struct {
    -        shift_right: bool,
    -        autopull: bool,
    -        pull_threshold: u5,
    -    }) void {
    +    pub inline fn sm_set_exec_options(self: Pio, sm: StateMachine, options: ExecOptions) void {
             const sm_regs = self.get_sm_regs(sm);
    -        sm_regs.shiftctrl.modify(.{
    -            .OUT_SHIFTDIR = @boolToInt(args.shift_right),
    -            .AUTOPULL = @boolToInt(args.autopull),
    -            .PULL_THRESH = args.pull_threshold,
    +        sm_regs.execctrl.modify(.{
    +            .WRAP_BOTTOM = options.wrap_target,
    +            .WRAP_TOP = options.wrap,
    +            .SIDE_PINDIR = @boolToInt(options.side_pindir),
    +            .SIDE_EN = @boolToInt(options.side_set_optional),
    +
    +            // TODO: plug in rest of the options
    +            // STATUS_N
    +            // STATUS_SEL
    +            // OUT_STICKY
    +            // INLINE_OUT_EN
    +            // OUT_EN_SEL
    +            // JMP_PIN
    +            // EXEC_STALLED
             });
         }
     
    -    pub fn set_out_pins(self: Pio, sm: StateMachine, base: u5, count: u5) void {
    +    pub inline fn sm_set_shift_options(self: Pio, sm: StateMachine, options: ShiftOptions) void {
             const sm_regs = self.get_sm_regs(sm);
    -        sm_regs.pinctrl.modify(.{
    -            .OUT_BASE = base,
    -            .OUT_COUNT = count,
    +        sm_regs.shiftctrl.write(.{
    +            .AUTOPUSH = @boolToInt(options.autopush),
    +            .AUTOPULL = @boolToInt(options.autopush),
    +
    +            .IN_SHIFTDIR = @enumToInt(options.in_shiftdir),
    +            .OUT_SHIFTDIR = @enumToInt(options.out_shiftdir),
    +
    +            .PUSH_THRESH = options.push_threshold,
    +            .PULL_THRESH = options.pull_threshold,
    +
    +            .FJOIN_TX = @boolToInt(options.join_tx),
    +            .FJOIN_RX = @boolToInt(options.join_rx),
    +
    +            .reserved16 = 0,
             });
         }
     
    -    pub fn set_sideset_pins(self: Pio, sm: StateMachine, base: u5) void {
    +    pub inline fn sm_set_pin_mappings(self: Pio, sm: StateMachine, options: PinMappingOptions) void {
             const sm_regs = self.get_sm_regs(sm);
    -        sm_regs.pinctrl.modify(.{ .SIDESET_BASE = base });
    +        sm_regs.pinctrl.modify(.{
    +            .OUT_BASE = options.out.base,
    +            .OUT_COUNT = options.out.count,
    +
    +            .SET_BASE = options.set.base,
    +            .SET_COUNT = options.set.count,
    +
    +            .SIDESET_BASE = options.side_set.base,
    +            .SIDESET_COUNT = options.side_set.count,
    +
    +            .IN_BASE = options.in_base,
    +        });
         }
     
    -    pub fn is_tx_fifo_full(self: Pio, sm: StateMachine) bool {
    +    pub inline fn sm_is_tx_fifo_full(self: Pio, sm: StateMachine) bool {
             const regs = self.get_regs();
             const txfull = regs.FSTAT.read().TXFULL;
             return (txfull & (@as(u4, 1) << @enumToInt(sm))) != 0;
         }
     
    -    pub fn get_tx_fifo(self: Pio, sm: StateMachine) *volatile u32 {
    +    pub inline fn sm_get_tx_fifo(self: Pio, sm: StateMachine) *volatile u32 {
             const regs = self.get_regs();
             return switch (sm) {
                 .sm0 => ®s.TXF0,
    @@ -218,33 +308,14 @@ pub const Pio = enum(u1) {
             };
         }
     
    -    pub fn blocking_write(self: Pio, sm: StateMachine, value: u32) void {
    -        while (self.is_tx_fifo_full(sm)) {}
    +    pub inline fn sm_blocking_write(self: Pio, sm: StateMachine, value: u32) void {
    +        while (self.sm_is_tx_fifo_full(sm)) {}
     
    -        const fifo_ptr = self.get_tx_fifo(sm);
    +        const fifo_ptr = self.sm_get_tx_fifo(sm);
             fifo_ptr.* = value;
         }
     
    -    pub fn encode_jmp() void {}
    -
    -    //static inline uint _pio_encode_instr_and_args(enum pio_instr_bits instr_bits, uint arg1, uint arg2) {
    -    //    valid_params_if(PIO_INSTRUCTIONS, arg1 <= 0x7);
    -    //#if PARAM_ASSERTIONS_ENABLED(PIO_INSTRUCTIONS)
    -    //    uint32_t major = _pio_major_instr_bits(instr_bits);
    -    //    if (major == pio_instr_bits_in || major == pio_instr_bits_out) {
    -    //        assert(arg2 && arg2 <= 32);
    -    //    } else {
    -    //        assert(arg2 <= 31);
    -    //    }
    -    //#endif
    -    //    return instr_bits | (arg1 << 5u) | (arg2 & 0x1fu);
    -    //}
    -    //
    -    //static inline uint pio_encode_jmp(uint addr) {
    -    //    return _pio_encode_instr_and_args(pio_instr_bits_jmp, 0, addr);
    -    //}
    -
    -    pub fn set_enabled(self: Pio, sm: StateMachine, enabled: bool) void {
    +    pub inline fn sm_set_enabled(self: Pio, sm: StateMachine, enabled: bool) void {
             const regs = self.get_regs();
     
             var value = regs.CTRL.read();
    @@ -256,103 +327,172 @@ pub const Pio = enum(u1) {
             regs.CTRL.write(value);
         }
     
    -    pub fn sm_init(self: Pio, sm: StateMachine, initial_pc: u5, config: StateMachineRegs) void {
    -        // Halt the machine, set some sensible defaults
    -        self.set_enabled(sm, false);
    +    inline fn sm_clear_debug(self: Pio, sm: StateMachine) void {
    +        const regs = self.get_regs();
    +        const mask: u4 = (@as(u4, 1) << @enumToInt(sm));
    +
    +        // write 1 to clear this register
    +        regs.FDEBUG.modify(.{
    +            .RXSTALL = mask,
    +            .RXUNDER = mask,
    +            .TXOVER = mask,
    +            .TXSTALL = mask,
    +        });
    +    }
    +
    +    /// changing the state of fifos will clear them
    +    pub fn sm_clear_fifos(self: Pio, sm: StateMachine) void {
    +        const sm_regs = self.get_sm_regs(sm);
    +        var shiftctrl = sm_regs.shiftctrl.read();
    +        shiftctrl.FJOIN_TX ^= 1;
    +        shiftctrl.FJOIN_RX ^= 1;
    +        sm_regs.shiftctrl.write(shiftctrl);
    +    }
    +
    +    pub fn sm_fifo_level(self: Pio, sm: StateMachine, fifo: Fifo) u4 {
    +        const num = @enumToInt(sm);
    +        const offset: u5 = switch (fifo) {
    +            .tx => 0,
    +            .rx => 4,
    +        };
    +
    +        const regs = self.get_regs();
    +        const levels = regs.FLEVEL.raw;
     
    -        self.set_config(sm, config);
    -        self.clear_fifos(sm);
    +        return @truncate(u4, levels >> (@as(u5, 4) * num) + offset);
    +    }
     
    -        // Clear FIFO debug flags
    -        //const uint32_t fdebug_sm_mask =
    -        //        (1u << PIO_FDEBUG_TXOVER_LSB) |
    -        //        (1u << PIO_FDEBUG_RXUNDER_LSB) |
    -        //        (1u << PIO_FDEBUG_TXSTALL_LSB) |
    -        //        (1u << PIO_FDEBUG_RXSTALL_LSB);
    -        //pio->fdebug = fdebug_sm_mask << sm;
    +    inline fn interrupt_bit_pos(
    +        sm: StateMachine,
    +        source: Irq.Source,
    +    ) u5 {
    +        return (@as(u5, 4) * @enumToInt(source)) + @enumToInt(sm);
    +    }
    +
    +    pub inline fn sm_clear_interrupt(
    +        self: Pio,
    +        sm: StateMachine,
    +        irq: Irq,
    +        source: Irq.Source,
    +    ) void {
    +        // TODO: why does the raw interrupt register no have irq1/0?
    +        _ = irq;
    +        const regs = self.get_regs();
    +        regs.INTR.raw &= ~(@as(u32, 1) << interrupt_bit_pos(sm, source));
    +    }
    +
    +    // TODO: be able to disable an interrupt
    +    pub inline fn sm_enable_interrupt(
    +        self: Pio,
    +        sm: StateMachine,
    +        irq: Irq,
    +        source: Irq.Source,
    +    ) void {
    +        const irq_regs = self.get_irq_regs(irq);
    +        irq_regs.enable.raw |= @as(u32, 1) << interrupt_bit_pos(sm, source);
    +    }
    +
    +    pub inline fn sm_restart(self: Pio, sm: StateMachine) void {
    +        const mask: u4 = (@as(u4, 1) << @enumToInt(sm));
    +        const regs = self.get_regs();
    +        regs.CTRL.modify(.{
    +            .SM_RESTART = mask,
    +        });
    +    }
    +
    +    pub inline fn sm_clkdiv_restart(self: Pio, sm: StateMachine) void {
    +        const mask: u4 = (@as(u4, 1) << @enumToInt(sm));
    +        const regs = self.get_regs();
    +        regs.CTRL.modify(.{
    +            .CLKDIV_RESTART = mask,
    +        });
    +    }
    +
    +    pub fn sm_init(
    +        self: Pio,
    +        sm: StateMachine,
    +        initial_pc: u5,
    +        options: StateMachineInitOptions,
    +    ) void {
    +        // Halt the machine, set some sensible defaults
    +        self.sm_set_enabled(sm, false);
    +        self.sm_set_pin_mappings(sm, options.pin_mappings);
    +        self.sm_set_clkdiv(sm, options.clkdiv);
    +        self.sm_set_exec_options(sm, options.exec);
    +        self.sm_set_shift_options(sm, options.shift);
    +
    +        //self.set_config(sm, config);
    +        self.sm_clear_fifos(sm);
    +        self.sm_clear_debug(sm);
     
             // Finally, clear some internal SM state
    -        self.restart(sm);
    -        self.clkdiv_restart(sm);
    -        self.exec(sm, encode_jmp(initial_pc));
    +        self.sm_restart(sm);
    +        self.sm_clkdiv_restart(sm);
    +        self.sm_exec(sm, Instruction{
    +            .tag = .jmp,
    +
    +            .delay_side_set = 0,
    +            .payload = .{
    +                .jmp = .{
    +                    .address = initial_pc,
    +                    .condition = .always,
    +                },
    +            },
    +        });
    +    }
    +
    +    pub fn sm_exec(self: Pio, sm: StateMachine, instruction: Instruction) void {
    +        const sm_regs = self.get_sm_regs(sm);
    +        sm_regs.instr.raw = @bitCast(u16, instruction);
         }
     
    -    // state machine configuration helpers:
    -    //
    -    // - set_out_pins
    -    // - set_set_pins
    -    // - set_in_pins
    -    // - set_sideset_pins
    -    // - set_sideset
    -    // - calculate_clkdiv_from_float
    -    // - set_clkdiv
    -    // - set_wrap
    -    // - set_jmp_pin
    -    // - set_in_shift
    -    // - set_out_shift
    -    // - set_fifo_join
    -    // - set_out_special
    -    // - set_mov_status
    -    //
    -    // PIO:
    -    //
    -    // - can_add_program
    -    // - add_program_at_offset
    -    // - add_program
    -    // - remove_program
    -    // - clear_instruction_memory
    -    // - sm_init
    -    // - sm_set_enabled
    -    // - sm_mask_enabled
    -    // - sm_restart
    -    // - restart_sm_mask
    -    // - sm_clkdiv_restart
    -    // - clkdiv_restart_sm_mask
    -    // - enable_sm_mask_in_sync
    -    // - set_irq0_source_enabled
    -    // - set_irq1_source_enabled
    -    // - set_irq0_source_mask_enabled
    -    // - set_irq1_source_mask_enabled
    -    // - set_irqn_source_enabled
    -    // - set_irqn_source_mask_enabled
    -    // - interrupt_get
    -    // - interrupt_clear
    -    // - sm_get_pc
    -    // - sm_exec
    -    // - sm_is_exec_stalled
    -    // - sm_exec_wait_blocking
    -    // - sm_set_wrap
    -    // - sm_set_out_pins
    -    // - sm_set_set_pins
    -    // - sm_set_in_pins
    -    // - sm_set_sideset_pins
    -    // - sm_put
    -    // - sm_get
    -    // - sm_is_rx_fifo_full
    -    // - sm_is_rx_fifo_empty
    -    // - sm_is_rx_fifo_level
    -    // - sm_is_tx_fifo_full
    -    // - sm_is_tx_fifo_empty
    -    // - sm_is_tx_fifo_level
    -    // - sm_put_blocking
    -    // - sm_get_blocking
    -    // - sm_drain_tx_fifo
    -    // - sm_set_clkdiv_int_frac
    -    // - sm_set_clkdiv
    -    // - sm_clear_fifos
    -    // - sm_set_pins
    -    // - sm_set_pins_with_mask
    -    // - sm_set_pindirs_with_mask
    -    // - sm_set_consecutive_pindirs
    -    // - sm_claim
    -    // - claim_sm_mask
    -    // - sm_unclaim
    -    // - claim_unused_sm
    -    // - sm_is_claimed
    -    //
    +    pub fn sm_load_and_start_program(
    +        self: Pio,
    +        sm: StateMachine,
    +        program: Program,
    +        options: LoadAndStartProgramOptions,
    +    ) !void {
    +        const expected_side_set_pins = if (program.side_set) |side_set|
    +            if (side_set.optional)
    +                side_set.count - 1
    +            else
    +                side_set.count
    +        else
    +            0;
    +
    +        assert(expected_side_set_pins == options.pin_mappings.side_set.count);
    +
    +        // TODO: check program settings vs pin mapping
    +        const offset = try self.add_program(program);
    +        self.sm_init(sm, offset, .{
    +            .clkdiv = options.clkdiv,
    +            .shift = options.shift,
    +            .pin_mappings = options.pin_mappings,
    +            .exec = .{
    +                .wrap = if (program.wrap) |wrap|
    +                    wrap
    +                else
    +                    offset + @intCast(u5, program.instructions.len),
    +
    +                .wrap_target = if (program.wrap_target) |wrap_target|
    +                    wrap_target
    +                else
    +                    offset,
    +
    +                .side_pindir = if (program.side_set) |side_set|
    +                    side_set.pindirs
    +                else
    +                    false,
    +
    +                .side_set_optional = if (program.side_set) |side_set|
    +                    side_set.optional
    +                else
    +                    false,
    +            },
    +        });
    +    }
     };
     
     test "pio" {
         std.testing.refAllDecls(assembler);
    -    //std.testing.refAllDecls(@import("pio/test.zig"));
     }
    diff --git a/src/hal/pio/assembler.zig b/src/hal/pio/assembler.zig
    index d3596fd93..af4153add 100644
    --- a/src/hal/pio/assembler.zig
    +++ b/src/hal/pio/assembler.zig
    @@ -22,7 +22,7 @@ pub const Program = struct {
         wrap: ?u5,
     
         pub fn get_mask(program: Program) u32 {
    -        return (1 << program.instructions.len) - 1;
    +        return (@as(u32, 1) << @intCast(u5, program.instructions.len)) - 1;
         }
     };
     
    @@ -35,7 +35,7 @@ pub const Output = struct {
             comptime name: []const u8,
         ) Program {
             return for (output.programs) |program| {
    -            if (std.mem.eql(u8, program.name, program))
    +            if (std.mem.eql(u8, name, program.name))
                     break program;
             } else @panic(std.fmt.comptimePrint("program '{s}' not found", .{name}));
         }
    
    From 344f60b864b925cf8510a17cb6591bfdbcd3cf86 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Thu, 13 Apr 2023 17:04:50 -0700
    Subject: [PATCH 117/286] add comptime keyword where it's needed (#42)
    
    ---
     src/hal/pio/assembler/tokenizer.zig | 32 ++++++++++++++---------------
     1 file changed, 16 insertions(+), 16 deletions(-)
    
    diff --git a/src/hal/pio/assembler/tokenizer.zig b/src/hal/pio/assembler/tokenizer.zig
    index cc360f50f..62e4c0e1f 100644
    --- a/src/hal/pio/assembler/tokenizer.zig
    +++ b/src/hal/pio/assembler/tokenizer.zig
    @@ -1601,7 +1601,7 @@ test "tokenize.instr.jmp.conditions" {
         inline for (cases.kvs) |case| {
             const op = case.key;
             const cond = case.value;
    -        const tokens = try bounded_tokenize(std.fmt.comptimePrint("jmp {s} my_label", .{op}));
    +        const tokens = try bounded_tokenize(comptime std.fmt.comptimePrint("jmp {s} my_label", .{op}));
     
             try expect_instr_jmp(.{ .cond = cond, .target = "my_label" }, tokens.get(0));
         }
    @@ -1609,7 +1609,7 @@ test "tokenize.instr.jmp.conditions" {
     
     test "tokenize.instr.wait" {
         inline for (.{ "gpio", "pin", "irq" }) |source| {
    -        const tokens = try bounded_tokenize(std.fmt.comptimePrint("wait 0 {s} 1", .{source}));
    +        const tokens = try bounded_tokenize(comptime std.fmt.comptimePrint("wait 0 {s} 1", .{source}));
             try expect_instr_wait(.{
                 .polarity = 0,
                 .source = @field(Token.Instruction.Wait.Source, source),
    @@ -1637,7 +1637,7 @@ test "tokenize.instr.in" {
             "isr",
             "osr",
         }, 1..) |source, bit_count| {
    -        const tokens = try bounded_tokenize(std.fmt.comptimePrint("in {s}, {}", .{
    +        const tokens = try bounded_tokenize(comptime std.fmt.comptimePrint("in {s}, {}", .{
                 source,
                 bit_count,
             }));
    @@ -1660,7 +1660,7 @@ test "tokenize.instr.out" {
             "isr",
             "exec",
         }, 1..) |destination, bit_count| {
    -        const tokens = try bounded_tokenize(std.fmt.comptimePrint("out {s}, {}", .{
    +        const tokens = try bounded_tokenize(comptime std.fmt.comptimePrint("out {s}, {}", .{
                 destination,
                 bit_count,
             }));
    @@ -1736,7 +1736,7 @@ test "tokenize.instr.mov" {
             "isr",
             "osr",
         }) |source| {
    -        const tokens = try bounded_tokenize(std.fmt.comptimePrint("mov x {s}", .{source}));
    +        const tokens = try bounded_tokenize(comptime std.fmt.comptimePrint("mov x {s}", .{source}));
     
             try expect_instr_mov(.{
                 .source = @field(Token.Instruction.Mov.Source, source),
    @@ -1753,7 +1753,7 @@ test "tokenize.instr.mov" {
             "isr",
             "osr",
         }) |dest| {
    -        const tokens = try bounded_tokenize(std.fmt.comptimePrint("mov {s} x", .{dest}));
    +        const tokens = try bounded_tokenize(comptime std.fmt.comptimePrint("mov {s} x", .{dest}));
     
             try expect_instr_mov(.{
                 .source = .x,
    @@ -1772,7 +1772,7 @@ test "tokenize.instr.mov" {
             inline for (operations.kvs) |kv| {
                 const str = kv.key;
                 const operation = kv.value;
    -            const tokens = try bounded_tokenize(std.fmt.comptimePrint("mov x {s}{s}y", .{
    +            const tokens = try bounded_tokenize(comptime std.fmt.comptimePrint("mov x {s}{s}y", .{
                     str,
                     space,
                 }));
    @@ -1801,7 +1801,7 @@ test "tokenize.instr.irq" {
         });
     
         inline for (modes.kvs, 0..) |kv, num| {
    -        const tokens = try bounded_tokenize(std.fmt.comptimePrint("irq {s} {}", .{
    +        const tokens = try bounded_tokenize(comptime std.fmt.comptimePrint("irq {s} {}", .{
                 kv.key,
                 num,
             }));
    @@ -1831,7 +1831,7 @@ test "tokenize.instr.set" {
             "y",
             "pindirs",
         }) |dest| {
    -        const tokens = try bounded_tokenize(std.fmt.comptimePrint("set {s}, 2", .{dest}));
    +        const tokens = try bounded_tokenize(comptime std.fmt.comptimePrint("set {s}, 2", .{dest}));
             try expect_instr_set(.{
                 .dest = @field(Token.Instruction.Set.Destination, dest),
                 .value = .{ .integer = 2 },
    @@ -1862,7 +1862,7 @@ const instruction_examples = .{
     
     test "tokenize.instr.label prefixed" {
         inline for (instruction_examples) |instr| {
    -        const tokens = try bounded_tokenize(std.fmt.comptimePrint("my_label: {s}", .{instr}));
    +        const tokens = try bounded_tokenize(comptime std.fmt.comptimePrint("my_label: {s}", .{instr}));
             try expectEqual(@as(usize, 2), tokens.len);
             try expect_label(.{ .name = "my_label" }, tokens.get(0));
         }
    @@ -1870,7 +1870,7 @@ test "tokenize.instr.label prefixed" {
     
     test "tokenize.instr.side_set" {
         inline for (instruction_examples) |instr| {
    -        const tokens = try bounded_tokenize(std.fmt.comptimePrint("{s} side 0", .{instr}));
    +        const tokens = try bounded_tokenize(comptime std.fmt.comptimePrint("{s} side 0", .{instr}));
             const token = tokens.get(0);
             try expect_value(.{
                 .expression = "0",
    @@ -1881,7 +1881,7 @@ test "tokenize.instr.side_set" {
     
     test "tokenize.instr.delay" {
         inline for (instruction_examples) |instr| {
    -        const tokens = try bounded_tokenize(std.fmt.comptimePrint("{s} [1]", .{instr}));
    +        const tokens = try bounded_tokenize(comptime std.fmt.comptimePrint("{s} [1]", .{instr}));
             const token = tokens.get(0);
             try expectEqual(@as(?Value, null), token.data.instruction.side_set);
             try expect_value(.{
    @@ -1892,7 +1892,7 @@ test "tokenize.instr.delay" {
     
     test "tokenize.instr.delay.expression" {
         inline for (instruction_examples) |instr| {
    -        const tokens = try bounded_tokenize(std.fmt.comptimePrint("{s} [T-1]", .{instr}));
    +        const tokens = try bounded_tokenize(comptime std.fmt.comptimePrint("{s} [T-1]", .{instr}));
             const token = tokens.get(0);
             try expectEqual(@as(?Value, null), token.data.instruction.side_set);
             try expect_value(.{
    @@ -1903,7 +1903,7 @@ test "tokenize.instr.delay.expression" {
     
     test "tokenize.instr.side_set.expression" {
         inline for (instruction_examples) |instr| {
    -        const tokens = try bounded_tokenize(std.fmt.comptimePrint("{s} side (N-1)", .{instr}));
    +        const tokens = try bounded_tokenize(comptime std.fmt.comptimePrint("{s} side (N-1)", .{instr}));
             const token = tokens.get(0);
             try expect_value(.{
                 .expression = "(N-1)",
    @@ -1914,7 +1914,7 @@ test "tokenize.instr.side_set.expression" {
     
     test "tokenize.instr.side_set and delay" {
         inline for (instruction_examples) |instr| {
    -        const tokens = try bounded_tokenize(std.fmt.comptimePrint("{s} side 1 [2]", .{instr}));
    +        const tokens = try bounded_tokenize(comptime std.fmt.comptimePrint("{s} side 1 [2]", .{instr}));
             const token = tokens.get(0);
             try expect_value(.{
                 .expression = "1",
    @@ -1927,7 +1927,7 @@ test "tokenize.instr.side_set and delay" {
     
     test "tokenize.instr.side_set and delay reversed" {
         inline for (instruction_examples) |instr| {
    -        const tokens = try bounded_tokenize(std.fmt.comptimePrint("{s} [2] side 1", .{instr}));
    +        const tokens = try bounded_tokenize(comptime std.fmt.comptimePrint("{s} [2] side 1", .{instr}));
             const token = tokens.get(0);
             try expect_value(.{
                 .expression = "1",
    
    From 0fbf9ba10617394d51e131b2b97954f836f81377 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Thu, 13 Apr 2023 22:23:32 -0700
    Subject: [PATCH 118/286] Update microzig (#12)
    
    * update microzig
    
    * fixed build.zig
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     build.zig     | 4 ++--
     deps/microzig | 2 +-
     2 files changed, 3 insertions(+), 3 deletions(-)
    
    diff --git a/build.zig b/build.zig
    index 86ad2161d..56ed4e58a 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -18,7 +18,7 @@ pub fn build(b: *std.build.Builder) void {
                 .backing = .{ .board = @field(boards, decl.name) },
                 .optimize = optimize,
             });
    -        exe.install();
    +        exe.installArtifact(b);
         }
     
         inline for (@typeInfo(chips).Struct.decls) |decl| {
    @@ -33,6 +33,6 @@ pub fn build(b: *std.build.Builder) void {
                 .backing = .{ .chip = @field(chips, decl.name) },
                 .optimize = optimize,
             });
    -        exe.install();
    +        exe.installArtifact(b);
         }
     }
    diff --git a/deps/microzig b/deps/microzig
    index 23482a698..ae6e61919 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 23482a6986252e0eeff54a04abc0aac8a08d25d7
    +Subproject commit ae6e619197f5db4be18a4b8cf7bf4d1bde9e7763
    
    From 9a8df1477bd2753928cb55c5e4f1a13feb7a0590 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Thu, 13 Apr 2023 22:23:57 -0700
    Subject: [PATCH 119/286] Update microzig (#12)
    
    * update microzig
    
    * fixed build.zig
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     build.zig     | 4 ++--
     deps/microzig | 2 +-
     2 files changed, 3 insertions(+), 3 deletions(-)
    
    diff --git a/build.zig b/build.zig
    index 86ad2161d..56ed4e58a 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -18,7 +18,7 @@ pub fn build(b: *std.build.Builder) void {
                 .backing = .{ .board = @field(boards, decl.name) },
                 .optimize = optimize,
             });
    -        exe.install();
    +        exe.installArtifact(b);
         }
     
         inline for (@typeInfo(chips).Struct.decls) |decl| {
    @@ -33,6 +33,6 @@ pub fn build(b: *std.build.Builder) void {
                 .backing = .{ .chip = @field(chips, decl.name) },
                 .optimize = optimize,
             });
    -        exe.install();
    +        exe.installArtifact(b);
         }
     }
    diff --git a/deps/microzig b/deps/microzig
    index 23482a698..ae6e61919 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 23482a6986252e0eeff54a04abc0aac8a08d25d7
    +Subproject commit ae6e619197f5db4be18a4b8cf7bf4d1bde9e7763
    
    From 541a3f8ed933bb36f88f238b263b66b0e1213845 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Thu, 13 Apr 2023 22:24:05 -0700
    Subject: [PATCH 120/286] Update microzig (#12)
    
    * update microzig
    
    * fixed build.zig
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     build.zig     | 4 ++--
     deps/microzig | 2 +-
     2 files changed, 3 insertions(+), 3 deletions(-)
    
    diff --git a/build.zig b/build.zig
    index 86ad2161d..56ed4e58a 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -18,7 +18,7 @@ pub fn build(b: *std.build.Builder) void {
                 .backing = .{ .board = @field(boards, decl.name) },
                 .optimize = optimize,
             });
    -        exe.install();
    +        exe.installArtifact(b);
         }
     
         inline for (@typeInfo(chips).Struct.decls) |decl| {
    @@ -33,6 +33,6 @@ pub fn build(b: *std.build.Builder) void {
                 .backing = .{ .chip = @field(chips, decl.name) },
                 .optimize = optimize,
             });
    -        exe.install();
    +        exe.installArtifact(b);
         }
     }
    diff --git a/deps/microzig b/deps/microzig
    index 23482a698..ae6e61919 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 23482a6986252e0eeff54a04abc0aac8a08d25d7
    +Subproject commit ae6e619197f5db4be18a4b8cf7bf4d1bde9e7763
    
    From 6cb89c778de67ca8abb64c31ab60ec4c34c7f943 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Thu, 13 Apr 2023 22:24:12 -0700
    Subject: [PATCH 121/286] Update microzig (#13)
    
    * update microzig
    
    * fixed build.zig
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     build.zig     | 2 +-
     deps/microzig | 2 +-
     2 files changed, 2 insertions(+), 2 deletions(-)
    
    diff --git a/build.zig b/build.zig
    index f96f446c5..8cb289d70 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -15,5 +15,5 @@ pub fn build(b: *std.build.Builder) void {
             .backing = .{ .chip = chips.esp32_c3 },
             .optimize = optimize,
         });
    -    exe.install();
    +    exe.installArtifact(b);
     }
    diff --git a/deps/microzig b/deps/microzig
    index 23482a698..ae6e61919 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 23482a6986252e0eeff54a04abc0aac8a08d25d7
    +Subproject commit ae6e619197f5db4be18a4b8cf7bf4d1bde9e7763
    
    From fa78bbfc4ab51ab46dbc9ad3ebd95cd0ea64a1d2 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Thu, 13 Apr 2023 22:24:28 -0700
    Subject: [PATCH 122/286] update microzig (#43)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index ceaa9ddcb..ae6e61919 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit ceaa9ddcb080d0687ce2109f23db7db376ac911e
    +Subproject commit ae6e619197f5db4be18a4b8cf7bf4d1bde9e7763
    
    From f1d338b3e22e0e484071559da696cbda5b46d253 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Thu, 13 Apr 2023 22:24:36 -0700
    Subject: [PATCH 123/286] Update microzig (#12)
    
    * update microzig
    
    * fixed build.zig
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     build.zig     | 2 +-
     deps/microzig | 2 +-
     2 files changed, 2 insertions(+), 2 deletions(-)
    
    diff --git a/build.zig b/build.zig
    index edb8df879..ff60e94a8 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -17,6 +17,6 @@ pub fn build(b: *std.build.Builder) void {
                 .backing = .{ .chip = @field(chips, decl.name) },
                 .optimize = optimize,
             });
    -        exe.install();
    +        exe.installArtifact(b);
         }
     }
    diff --git a/deps/microzig b/deps/microzig
    index 23482a698..ae6e61919 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 23482a6986252e0eeff54a04abc0aac8a08d25d7
    +Subproject commit ae6e619197f5db4be18a4b8cf7bf4d1bde9e7763
    
    From 01dfc9aa1942e943507fb82de82604e18c9f793e Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Thu, 13 Apr 2023 22:24:43 -0700
    Subject: [PATCH 124/286] Update microzig (#12)
    
    * update microzig
    
    * fixed build.zig
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     build.zig     | 4 ++--
     deps/microzig | 2 +-
     2 files changed, 3 insertions(+), 3 deletions(-)
    
    diff --git a/build.zig b/build.zig
    index 86ad2161d..56ed4e58a 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -18,7 +18,7 @@ pub fn build(b: *std.build.Builder) void {
                 .backing = .{ .board = @field(boards, decl.name) },
                 .optimize = optimize,
             });
    -        exe.install();
    +        exe.installArtifact(b);
         }
     
         inline for (@typeInfo(chips).Struct.decls) |decl| {
    @@ -33,6 +33,6 @@ pub fn build(b: *std.build.Builder) void {
                 .backing = .{ .chip = @field(chips, decl.name) },
                 .optimize = optimize,
             });
    -        exe.install();
    +        exe.installArtifact(b);
         }
     }
    diff --git a/deps/microzig b/deps/microzig
    index 23482a698..ae6e61919 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 23482a6986252e0eeff54a04abc0aac8a08d25d7
    +Subproject commit ae6e619197f5db4be18a4b8cf7bf4d1bde9e7763
    
    From 975e5e446c298f98c26573dad1198c1f6186e1a0 Mon Sep 17 00:00:00 2001
    From: David Sugar 
    Date: Sun, 23 Apr 2023 17:11:05 +0200
    Subject: [PATCH 125/286] Random number generator (#46)
    
    ---
     build.zig           |  1 +
     examples/random.zig | 69 +++++++++++++++++++++++++++++++++++
     src/hal.zig         |  1 +
     src/hal/random.zig  | 87 +++++++++++++++++++++++++++++++++++++++++++++
     4 files changed, 158 insertions(+)
     create mode 100644 examples/random.zig
     create mode 100644 src/hal/random.zig
    
    diff --git a/build.zig b/build.zig
    index f9d372944..c54780cae 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -69,6 +69,7 @@ pub const Examples = struct {
         squarewave: *microzig.EmbeddedExecutable,
         //uart_pins: microzig.EmbeddedExecutable,
         flash_program: *microzig.EmbeddedExecutable,
    +    random: *microzig.EmbeddedExecutable,
     
         pub fn init(b: *Builder, optimize: std.builtin.OptimizeMode) Examples {
             var ret: Examples = undefined;
    diff --git a/examples/random.zig b/examples/random.zig
    new file mode 100644
    index 000000000..dbf00d5f0
    --- /dev/null
    +++ b/examples/random.zig
    @@ -0,0 +1,69 @@
    +//! Example that generates a 4 byte random number every second and outputs the result over UART
    +
    +const std = @import("std");
    +const microzig = @import("microzig");
    +
    +const rp2040 = microzig.hal;
    +const flash = rp2040.flash;
    +const time = rp2040.time;
    +const gpio = rp2040.gpio;
    +const clocks = rp2040.clocks;
    +const rand = rp2040.rand;
    +
    +const led = 25;
    +const uart_id = 0;
    +const baud_rate = 115200;
    +const uart_tx_pin = 0;
    +const uart_rx_pin = 1;
    +
    +pub fn panic(message: []const u8, _: ?*std.builtin.StackTrace, _: ?usize) noreturn {
    +    std.log.err("panic: {s}", .{message});
    +    @breakpoint();
    +    while (true) {}
    +}
    +
    +pub const std_options = struct {
    +    pub const log_level = .debug;
    +    pub const logFn = rp2040.uart.log;
    +};
    +
    +pub fn main() !void {
    +    gpio.reset();
    +    gpio.init(led);
    +    gpio.set_direction(led, .out);
    +    gpio.put(led, 1);
    +
    +    const uart = rp2040.uart.UART.init(uart_id, .{
    +        .baud_rate = baud_rate,
    +        .tx_pin = uart_tx_pin,
    +        .rx_pin = uart_rx_pin,
    +        .clock_config = rp2040.clock_config,
    +    });
    +
    +    var ascon = rand.Ascon.init();
    +    var rng = ascon.random();
    +
    +    rp2040.uart.init_logger(uart);
    +
    +    var buffer: [8]u8 = undefined;
    +    var dist: [256]usize = .{0} ** 256;
    +    var counter: usize = 0;
    +
    +    while (true) {
    +        rng.bytes(buffer[0..]);
    +        counter += 8;
    +        for (buffer) |byte| {
    +            dist[@intCast(usize, byte)] += 1;
    +        }
    +        std.log.info("Generate random number: {any}", .{buffer});
    +
    +        if (counter % 256 == 0) {
    +            var i: usize = 0;
    +            std.log.info("Distribution:", .{});
    +            while (i < 256) : (i += 1) {
    +                std.log.info("{} -> {}, {d:2}%", .{ i, dist[i], @intToFloat(f32, dist[i]) / @intToFloat(f32, counter) });
    +            }
    +        }
    +        time.sleep_ms(1000);
    +    }
    +}
    diff --git a/src/hal.zig b/src/hal.zig
    index 5813cf947..1350d07be 100644
    --- a/src/hal.zig
    +++ b/src/hal.zig
    @@ -16,6 +16,7 @@ pub const irq = @import("hal/irq.zig");
     pub const rom = @import("hal/rom.zig");
     pub const flash = @import("hal/flash.zig");
     pub const pio = @import("hal/pio.zig");
    +pub const rand = @import("hal/random.zig");
     
     pub const clock_config = clocks.GlobalConfiguration.init(.{
         .ref = .{ .source = .src_xosc },
    diff --git a/src/hal/random.zig b/src/hal/random.zig
    new file mode 100644
    index 000000000..3a292a628
    --- /dev/null
    +++ b/src/hal/random.zig
    @@ -0,0 +1,87 @@
    +//! Random number generator (RNG) using the Ascon CSPRNG
    +
    +const std = @import("std");
    +const assert = std.debug.assert;
    +const Random = std.rand.Random;
    +
    +const microzig = @import("microzig");
    +const peripherals = microzig.chip.peripherals;
    +
    +/// Wrapper around the Ascon CSPRNG with automatic reseed using the ROSC
    +///
    +/// ## Usage
    +///
    +/// ```zig
    +/// var ascon = Ascon.init();
    +/// var rng = ascon.random();
    +/// ```
    +///
    +/// _WARNING_: This might not meet the requirements of randomness
    +/// for security systems because the ROSC as entropy source can be
    +/// compromised. However, it promises at least equal distribution.
    +pub const Ascon = struct {
    +    state: std.rand.Ascon,
    +    counter: usize = 0,
    +
    +    const reseed_threshold = 4096;
    +    const secret_seed_length = std.rand.Ascon.secret_seed_length;
    +
    +    pub fn init() @This() {
    +        // Ensure that the system clocks run from the XOSC and/or PLLs
    +        const ref_src = peripherals.CLOCKS.CLK_REF_CTRL.read().SRC.value;
    +        const sys_clk_src = peripherals.CLOCKS.CLK_SYS_CTRL.read().SRC.value;
    +        const aux_src = peripherals.CLOCKS.CLK_SYS_CTRL.read().AUXSRC.value;
    +        assert((ref_src != .rosc_clksrc_ph and sys_clk_src == .clk_ref) or
    +            (sys_clk_src == .clksrc_clk_sys_aux and aux_src != .rosc_clksrc));
    +
    +        // Get `secret_seed_length` random bytes from the ROSC ...
    +        var b: [secret_seed_length]u8 = undefined;
    +        rosc(&b);
    +
    +        return @This(){ .state = std.rand.Ascon.init(b) };
    +    }
    +
    +    /// Returns a `std.rand.Random` structure backed by the current RNG
    +    pub fn random(self: *@This()) Random {
    +        return Random.init(self, fill);
    +    }
    +
    +    /// Fills the buffer with random bytes
    +    pub fn fill(self: *@This(), buf: []u8) void {
    +        // Reseed every `secret_seed_length` bytes
    +        if (self.counter > reseed_threshold) {
    +            var b: [secret_seed_length]u8 = undefined;
    +            rosc(&b);
    +            self.state.addEntropy(&b);
    +            self.counter = 0;
    +        }
    +        self.state.fill(buf);
    +        self.counter += buf.len;
    +    }
    +
    +    /// Fill the buffer with up to buffer.len random bytes
    +    ///
    +    /// rand uses the RANDOMBIT register of the ROSC as its source, i. e.,
    +    /// the system clocks _MUST_ run from the XOSC and/or PLLs.
    +    ///
    +    /// _WARNING_: This function does not meet the requirements of randomness
    +    /// for security systems because it can be compromised, but it may be useful
    +    /// in less critical applications.
    +    fn rosc(buffer: []u8) void {
    +        const rosc_state = peripherals.ROSC.CTRL.read().ENABLE.value;
    +        // Enable the ROSC so it generates random bits for us
    +        peripherals.ROSC.CTRL.modify(.{ .ENABLE = .{ .value = .ENABLE } });
    +        defer peripherals.ROSC.CTRL.modify(.{ .ENABLE = .{ .value = rosc_state } });
    +
    +        var i: usize = 0;
    +        while (i < buffer.len) : (i += 1) {
    +            // We poll RANDOMBIT eight times per cycle to build a random byte
    +            var r: u8 = @intCast(u8, peripherals.ROSC.RANDOMBIT.read().RANDOMBIT);
    +            var j: usize = 0;
    +            while (j < 7) : (j += 1) {
    +                r = (r << 1) | @intCast(u8, peripherals.ROSC.RANDOMBIT.read().RANDOMBIT);
    +            }
    +            buffer[i] = r;
    +        }
    +    }
    +};
    
    From b0b01570c1ac1fb3d606dd782ce6021bda565e1f Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sun, 23 Apr 2023 11:55:47 -0700
    Subject: [PATCH 126/286] update microzig (#47)
    
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index ae6e61919..dd491cc84 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit ae6e619197f5db4be18a4b8cf7bf4d1bde9e7763
    +Subproject commit dd491cc84fe034cb07f5b6cc6aa486d97e0ef7ab
    
    From 8b7cbf09d3a261a7d7b83cb9520d237126006c77 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sun, 23 Apr 2023 11:56:04 -0700
    Subject: [PATCH 127/286] update microzig (#14)
    
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index ae6e61919..dd491cc84 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit ae6e619197f5db4be18a4b8cf7bf4d1bde9e7763
    +Subproject commit dd491cc84fe034cb07f5b6cc6aa486d97e0ef7ab
    
    From c2c9cc4912a99e92a574a72f379494b4e9a40edf Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sun, 23 Apr 2023 11:56:15 -0700
    Subject: [PATCH 128/286] update microzig (#14)
    
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index ae6e61919..dd491cc84 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit ae6e619197f5db4be18a4b8cf7bf4d1bde9e7763
    +Subproject commit dd491cc84fe034cb07f5b6cc6aa486d97e0ef7ab
    
    From d96ce9cc50db93a416185d0eeff102322659227c Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sun, 23 Apr 2023 11:56:24 -0700
    Subject: [PATCH 129/286] update microzig (#14)
    
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index ae6e61919..dd491cc84 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit ae6e619197f5db4be18a4b8cf7bf4d1bde9e7763
    +Subproject commit dd491cc84fe034cb07f5b6cc6aa486d97e0ef7ab
    
    From 33a67724a7195e9acf1338d9f6b90e0d46f3179a Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sun, 23 Apr 2023 11:56:32 -0700
    Subject: [PATCH 130/286] update microzig (#14)
    
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index ae6e61919..dd491cc84 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit ae6e619197f5db4be18a4b8cf7bf4d1bde9e7763
    +Subproject commit dd491cc84fe034cb07f5b6cc6aa486d97e0ef7ab
    
    From c9ff9fcc404ee7121196279416d357689a7e1228 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sun, 23 Apr 2023 11:56:42 -0700
    Subject: [PATCH 131/286] update microzig (#15)
    
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index ae6e61919..dd491cc84 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit ae6e619197f5db4be18a4b8cf7bf4d1bde9e7763
    +Subproject commit dd491cc84fe034cb07f5b6cc6aa486d97e0ef7ab
    
    From dfeaf74bf96dfd199a64bcbe42c728a954e1eba0 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Sun, 23 Apr 2023 11:56:47 -0700
    Subject: [PATCH 132/286] update microzig (#14)
    
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index ae6e61919..dd491cc84 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit ae6e619197f5db4be18a4b8cf7bf4d1bde9e7763
    +Subproject commit dd491cc84fe034cb07f5b6cc6aa486d97e0ef7ab
    
    From 812fb44180d6d2ba141f0e7889e0c1e2345b52c2 Mon Sep 17 00:00:00 2001
    From: David Sugar 
    Date: Mon, 24 Apr 2023 16:45:24 +0200
    Subject: [PATCH 133/286] USB Device (#40)
    
    ---
     build.zig                               |   4 +-
     examples/scripts/hid_test.py            |  29 ++
     examples/scripts/usb_device_loopback.py |  48 ++
     examples/usb_device.zig                 | 173 +++++++
     examples/usb_hid.zig                    | 188 +++++++
     src/hal.zig                             |   6 +
     src/hal/rom.zig                         |   6 +-
     src/hal/usb.zig                         | 647 ++++++++++++++++++++++++
     8 files changed, 1097 insertions(+), 4 deletions(-)
     create mode 100755 examples/scripts/hid_test.py
     create mode 100755 examples/scripts/usb_device_loopback.py
     create mode 100644 examples/usb_device.zig
     create mode 100644 examples/usb_hid.zig
     create mode 100644 src/hal/usb.zig
    
    diff --git a/build.zig b/build.zig
    index c54780cae..1ee7e1716 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -44,7 +44,7 @@ pub fn build(b: *Builder) !void {
     
         const pio_tests = b.addTest(.{
             .root_source_file = .{
    -            .path = "src/hal/pio.zig",
    +            .path = "src/hal.zig",
             },
             .optimize = optimize,
         });
    @@ -69,6 +69,8 @@ pub const Examples = struct {
         squarewave: *microzig.EmbeddedExecutable,
         //uart_pins: microzig.EmbeddedExecutable,
         flash_program: *microzig.EmbeddedExecutable,
    +    usb_device: *microzig.EmbeddedExecutable,
    +    usb_hid: *microzig.EmbeddedExecutable,
         random: *microzig.EmbeddedExecutable,
     
         pub fn init(b: *Builder, optimize: std.builtin.OptimizeMode) Examples {
    diff --git a/examples/scripts/hid_test.py b/examples/scripts/hid_test.py
    new file mode 100755
    index 000000000..ccc2dd093
    --- /dev/null
    +++ b/examples/scripts/hid_test.py
    @@ -0,0 +1,29 @@
    +#!/usr/bin/env python3
    +
    +# Install python3 HID package https://pypi.org/project/hid/
    +import hid
    +
    +# default is TinyUSB (0xcafe), Adafruit (0x239a), RaspberryPi (0x2e8a), Espressif (0x303a) VID
    +USB_VID = (0xcafe, 0x239a, 0x2e8a, 0x303a)
    +
    +print("VID list: " + ", ".join('%02x' % v for v in USB_VID))
    +
    +for vid in  USB_VID:
    +    for dict in hid.enumerate(vid):
    +        print(dict)
    +        dev = hid.Device(dict['vendor_id'], dict['product_id'])
    +        if dev:
    +            while True:
    +                inp = input("Send text to HID Device : ").encode('utf-8')
    +                dev.write(inp)
    +
    +                x = 0
    +                l = len(inp)
    +                r = b""
    +                while (x < l):
    +                    str_in = dev.read(64)
    +                    r += str_in
    +                    x += 64
    +
    +                print("Received from HID Device:\n", r)
    +                print("hex:\n", r.hex())
    diff --git a/examples/scripts/usb_device_loopback.py b/examples/scripts/usb_device_loopback.py
    new file mode 100755
    index 000000000..82bf47899
    --- /dev/null
    +++ b/examples/scripts/usb_device_loopback.py
    @@ -0,0 +1,48 @@
    +#!/usr/bin/env python3
    +
    +#
    +# Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    +#
    +# SPDX-License-Identifier: BSD-3-Clause
    +#
    +
    +# sudo pip3 install pyusb
    +
    +import usb.core
    +import usb.util
    +
    +# find our device
    +dev = usb.core.find(idVendor=0x0000, idProduct=0x0001)
    +
    +# was it found?
    +if dev is None:
    +    raise ValueError('Device not found')
    +
    +# get an endpoint instance
    +cfg = dev.get_active_configuration()
    +intf = cfg[(0, 0)]
    +
    +outep = usb.util.find_descriptor(
    +    intf,
    +    # match the first OUT endpoint
    +    custom_match= \
    +        lambda e: \
    +            usb.util.endpoint_direction(e.bEndpointAddress) == \
    +            usb.util.ENDPOINT_OUT)
    +
    +inep = usb.util.find_descriptor(
    +    intf,
    +    # match the first IN endpoint
    +    custom_match= \
    +        lambda e: \
    +            usb.util.endpoint_direction(e.bEndpointAddress) == \
    +            usb.util.ENDPOINT_IN)
    +
    +assert inep is not None
    +assert outep is not None
    +
    +test_string = "Hello World!"
    +outep.write(test_string)
    +from_device = inep.read(len(test_string))
    +
    +print("Device Says: {}".format(''.join([chr(x) for x in from_device])))
    diff --git a/examples/usb_device.zig b/examples/usb_device.zig
    new file mode 100644
    index 000000000..c86d5e140
    --- /dev/null
    +++ b/examples/usb_device.zig
    @@ -0,0 +1,173 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +
    +const rp2040 = microzig.hal;
    +const flash = rp2040.flash;
    +const time = rp2040.time;
    +const gpio = rp2040.gpio;
    +const clocks = rp2040.clocks;
    +const usb = rp2040.usb;
    +
    +const led = 25;
    +const uart_id = 0;
    +const baud_rate = 115200;
    +const uart_tx_pin = 0;
    +const uart_rx_pin = 1;
    +
    +// First we define two callbacks that will be used by the endpoints we define next...
    +fn ep1_in_callback(dc: *usb.DeviceConfiguration, data: []const u8) void {
    +    _ = data;
    +    // The host has collected the data we repeated onto
    +    // EP1! Set up to receive more data on EP1.
    +    usb.Usb.callbacks.usb_start_rx(
    +        dc.endpoints[2], // EP1_OUT_CFG,
    +        64,
    +    );
    +}
    +
    +fn ep1_out_callback(dc: *usb.DeviceConfiguration, data: []const u8) void {
    +    // We've gotten data from the host on our custom
    +    // EP1! Set up EP1 to repeat it.
    +    usb.Usb.callbacks.usb_start_tx(
    +        dc.endpoints[3], // EP1_IN_CFG,
    +        data,
    +    );
    +}
    +
    +// The endpoints EP0_IN and EP0_OUT are already defined but you can
    +// add your own endpoints to...
    +pub var EP1_OUT_CFG: usb.EndpointConfiguration = .{
    +    .descriptor = &usb.EndpointDescriptor{
    +        .length = @intCast(u8, @sizeOf(usb.EndpointDescriptor)),
    +        .descriptor_type = usb.DescType.Endpoint,
    +        .endpoint_address = usb.Dir.Out.endpoint(1),
    +        .attributes = @enumToInt(usb.TransferType.Bulk),
    +        .max_packet_size = 64,
    +        .interval = 0,
    +    },
    +    .endpoint_control_index = 2,
    +    .buffer_control_index = 3,
    +    .data_buffer_index = 2,
    +    .next_pid_1 = false,
    +    // The callback will be executed if we got an interrupt on EP1_OUT
    +    .callback = ep1_out_callback,
    +};
    +
    +pub var EP1_IN_CFG: usb.EndpointConfiguration = .{
    +    .descriptor = &usb.EndpointDescriptor{
    +        .length = @intCast(u8, @sizeOf(usb.EndpointDescriptor)),
    +        .descriptor_type = usb.DescType.Endpoint,
    +        .endpoint_address = usb.Dir.In.endpoint(1),
    +        .attributes = @enumToInt(usb.TransferType.Bulk),
    +        .max_packet_size = 64,
    +        .interval = 0,
    +    },
    +    .endpoint_control_index = 1,
    +    .buffer_control_index = 2,
    +    .data_buffer_index = 3,
    +    .next_pid_1 = false,
    +    // The callback will be executed if we got an interrupt on EP1_IN
    +    .callback = ep1_in_callback,
    +};
    +
    +// This is our device configuration
    +pub var DEVICE_CONFIGURATION: usb.DeviceConfiguration = .{
    +    .device_descriptor = &.{
    +        .length = @intCast(u8, @sizeOf(usb.DeviceDescriptor)),
    +        .descriptor_type = usb.DescType.Device,
    +        .bcd_usb = 0x0110,
    +        .device_class = 0,
    +        .device_subclass = 0,
    +        .device_protocol = 0,
    +        .max_packet_size0 = 64,
    +        .vendor = 0,
    +        .product = 1,
    +        .bcd_device = 0,
    +        .manufacturer_s = 1,
    +        .product_s = 2,
    +        .serial_s = 0,
    +        .num_configurations = 1,
    +    },
    +    .interface_descriptor = &.{
    +        .length = @intCast(u8, @sizeOf(usb.InterfaceDescriptor)),
    +        .descriptor_type = usb.DescType.Interface,
    +        .interface_number = 0,
    +        .alternate_setting = 0,
    +        // We have two endpoints (EP0 IN/OUT don't count)
    +        .num_endpoints = 2,
    +        .interface_class = 0xff,
    +        .interface_subclass = 0,
    +        .interface_protocol = 0,
    +        .interface_s = 0,
    +    },
    +    .config_descriptor = &.{
    +        .length = @intCast(u8, @sizeOf(usb.ConfigurationDescriptor)),
    +        .descriptor_type = usb.DescType.Config,
    +        .total_length = @intCast(u8, @sizeOf(usb.ConfigurationDescriptor) + @sizeOf(usb.InterfaceDescriptor) + @sizeOf(usb.EndpointDescriptor) + @sizeOf(usb.EndpointDescriptor)),
    +        .num_interfaces = 1,
    +        .configuration_value = 1,
    +        .configuration_s = 0,
    +        .attributes = 0xc0,
    +        .max_power = 0x32,
    +    },
    +    .lang_descriptor = "\x04\x03\x09\x04", // length || string descriptor (0x03) || Engl (0x0409)
    +    .descriptor_strings = &.{
    +        // ugly unicode :|
    +        "R\x00a\x00s\x00p\x00b\x00e\x00r\x00r\x00y\x00 \x00P\x00i\x00",
    +        "P\x00i\x00c\x00o\x00 \x00T\x00e\x00s\x00t\x00 \x00D\x00e\x00v\x00i\x00c\x00e\x00",
    +    },
    +    // Here we pass all endpoints to the config
    +    // Dont forget to pass EP0_[IN|OUT] in the order seen below!
    +    .endpoints = .{
    +        &usb.EP0_OUT_CFG,
    +        &usb.EP0_IN_CFG,
    +        &EP1_OUT_CFG,
    +        &EP1_IN_CFG,
    +    },
    +};
    +
    +pub fn panic(message: []const u8, _: ?*std.builtin.StackTrace, _: ?usize) noreturn {
    +    std.log.err("panic: {s}", .{message});
    +    @breakpoint();
    +    while (true) {}
    +}
    +
    +pub const std_options = struct {
    +    pub const log_level = .debug;
    +    pub const logFn = rp2040.uart.log;
    +};
    +
    +pub fn main() !void {
    +    gpio.reset();
    +    gpio.init(led);
    +    gpio.set_direction(led, .out);
    +    gpio.put(led, 1);
    +
    +    const uart = rp2040.uart.UART.init(uart_id, .{
    +        .baud_rate = baud_rate,
    +        .tx_pin = uart_tx_pin,
    +        .rx_pin = uart_rx_pin,
    +        .clock_config = rp2040.clock_config,
    +    });
    +
    +    rp2040.uart.init_logger(uart);
    +
    +    // First we initialize the USB clock
    +    rp2040.usb.Usb.init_clk();
    +    // Then initialize the USB device using the configuration defined above
    +    rp2040.usb.Usb.init_device(&DEVICE_CONFIGURATION) catch unreachable;
    +    var old: u64 = time.get_time_since_boot().us_since_boot;
    +    var new: u64 = 0;
    +    while (true) {
    +        // You can now poll for USB events
    +        rp2040.usb.Usb.task(
    +            false, // debug output over UART [Y/n]
    +        ) catch unreachable;
    +
    +        new = time.get_time_since_boot().us_since_boot;
    +        if (new - old > 500000) {
    +            old = new;
    +            gpio.toggle(led);
    +        }
    +    }
    +}
    diff --git a/examples/usb_hid.zig b/examples/usb_hid.zig
    new file mode 100644
    index 000000000..633add74f
    --- /dev/null
    +++ b/examples/usb_hid.zig
    @@ -0,0 +1,188 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +
    +const rp2040 = microzig.hal;
    +const flash = rp2040.flash;
    +const time = rp2040.time;
    +const gpio = rp2040.gpio;
    +const clocks = rp2040.clocks;
    +const usb = rp2040.usb;
    +
    +const led = 25;
    +const uart_id = 0;
    +const baud_rate = 115200;
    +const uart_tx_pin = 0;
    +const uart_rx_pin = 1;
    +
    +// First we define two callbacks that will be used by the endpoints we define next...
    +fn ep1_in_callback(dc: *usb.DeviceConfiguration, data: []const u8) void {
    +    _ = data;
    +    // The host has collected the data we repeated onto
    +    // EP1! Set up to receive more data on EP1.
    +    usb.Usb.callbacks.usb_start_rx(
    +        dc.endpoints[2], // EP1_OUT_CFG,
    +        64,
    +    );
    +}
    +
    +fn ep1_out_callback(dc: *usb.DeviceConfiguration, data: []const u8) void {
    +    // We've gotten data from the host on our custom
    +    // EP1! Set up EP1 to repeat it.
    +    usb.Usb.callbacks.usb_start_tx(
    +        dc.endpoints[3], // EP1_IN_CFG,
    +        data,
    +    );
    +}
    +
    +// The endpoints EP0_IN and EP0_OUT are already defined but you can
    +// add your own endpoints to...
    +pub var EP1_OUT_CFG: usb.EndpointConfiguration = .{
    +    .descriptor = &usb.EndpointDescriptor{
    +        .length = @intCast(u8, @sizeOf(usb.EndpointDescriptor)),
    +        .descriptor_type = usb.DescType.Endpoint,
    +        .endpoint_address = usb.Dir.Out.endpoint(1),
    +        .attributes = @enumToInt(usb.TransferType.Interrupt),
    +        .max_packet_size = 64,
    +        .interval = 0,
    +    },
    +    .endpoint_control_index = 2,
    +    .buffer_control_index = 3,
    +    .data_buffer_index = 2,
    +    .next_pid_1 = false,
    +    // The callback will be executed if we got an interrupt on EP1_OUT
    +    .callback = ep1_out_callback,
    +};
    +
    +pub var EP1_IN_CFG: usb.EndpointConfiguration = .{
    +    .descriptor = &usb.EndpointDescriptor{
    +        .length = @intCast(u8, @sizeOf(usb.EndpointDescriptor)),
    +        .descriptor_type = usb.DescType.Endpoint,
    +        .endpoint_address = usb.Dir.In.endpoint(1),
    +        .attributes = @enumToInt(usb.TransferType.Interrupt),
    +        .max_packet_size = 64,
    +        .interval = 0,
    +    },
    +    .endpoint_control_index = 1,
    +    .buffer_control_index = 2,
    +    .data_buffer_index = 3,
    +    .next_pid_1 = false,
    +    // The callback will be executed if we got an interrupt on EP1_IN
    +    .callback = ep1_in_callback,
    +};
    +
    +// This is our device configuration
    +pub var DEVICE_CONFIGURATION: usb.DeviceConfiguration = .{
    +    .device_descriptor = &.{
    +        .length = @intCast(u8, @sizeOf(usb.DeviceDescriptor)),
    +        .descriptor_type = usb.DescType.Device,
    +        .bcd_usb = 0x0200,
    +        .device_class = 0,
    +        .device_subclass = 0,
    +        .device_protocol = 0,
    +        .max_packet_size0 = 64,
    +        .vendor = 0xCafe,
    +        .product = 1,
    +        .bcd_device = 0x0100,
    +        // Those are indices to the descriptor strings
    +        // Make sure to provide enough string descriptors!
    +        .manufacturer_s = 1,
    +        .product_s = 2,
    +        .serial_s = 3,
    +        .num_configurations = 1,
    +    },
    +    .interface_descriptor = &.{
    +        .length = @intCast(u8, @sizeOf(usb.InterfaceDescriptor)),
    +        .descriptor_type = usb.DescType.Interface,
    +        .interface_number = 0,
    +        .alternate_setting = 0,
    +        // We have two endpoints (EP0 IN/OUT don't count)
    +        .num_endpoints = 2,
    +        .interface_class = 3,
    +        .interface_subclass = 0,
    +        .interface_protocol = 0,
    +        .interface_s = 0,
    +    },
    +    .config_descriptor = &.{
    +        .length = @intCast(u8, @sizeOf(usb.ConfigurationDescriptor)),
    +        .descriptor_type = usb.DescType.Config,
    +        .total_length = @intCast(u8, @sizeOf(usb.ConfigurationDescriptor) + @sizeOf(usb.InterfaceDescriptor) + @sizeOf(usb.EndpointDescriptor) + @sizeOf(usb.EndpointDescriptor)),
    +        .num_interfaces = 1,
    +        .configuration_value = 1,
    +        .configuration_s = 0,
    +        .attributes = 0xc0,
    +        .max_power = 0x32,
    +    },
    +    .lang_descriptor = "\x04\x03\x09\x04", // length || string descriptor (0x03) || Engl (0x0409)
    +    .descriptor_strings = &.{
    +        // ugly unicode :|
    +        //"R\x00a\x00s\x00p\x00b\x00e\x00r\x00r\x00y\x00 \x00P\x00i\x00",
    +        &usb.utf8ToUtf16Le("Raspberry Pi"),
    +        //"P\x00i\x00c\x00o\x00 \x00T\x00e\x00s\x00t\x00 \x00D\x00e\x00v\x00i\x00c\x00e\x00",
    +        &usb.utf8ToUtf16Le("Pico Test Device"),
    +        //"c\x00a\x00f\x00e\x00b\x00a\x00b\x00e\x00",
    +        &usb.utf8ToUtf16Le("cafebabe"),
    +    },
    +    .hid = .{
    +        .hid_descriptor = &.{
    +            .bcd_hid = 0x0111,
    +            .country_code = 0,
    +            .num_descriptors = 1,
    +            .report_length = 34,
    +        },
    +        .report_descriptor = &usb.hid.ReportDescriptorFidoU2f,
    +    },
    +    // Here we pass all endpoints to the config
    +    // Dont forget to pass EP0_[IN|OUT] in the order seen below!
    +    .endpoints = .{
    +        &usb.EP0_OUT_CFG,
    +        &usb.EP0_IN_CFG,
    +        &EP1_OUT_CFG,
    +        &EP1_IN_CFG,
    +    },
    +};
    +
    +pub fn panic(message: []const u8, _: ?*std.builtin.StackTrace, _: ?usize) noreturn {
    +    std.log.err("panic: {s}", .{message});
    +    @breakpoint();
    +    while (true) {}
    +}
    +
    +pub const std_options = struct {
    +    pub const log_level = .debug;
    +    pub const logFn = rp2040.uart.log;
    +};
    +
    +pub fn main() !void {
    +    gpio.reset();
    +    gpio.init(led);
    +    gpio.set_direction(led, .out);
    +    gpio.put(led, 1);
    +
    +    const uart = rp2040.uart.UART.init(uart_id, .{
    +        .baud_rate = baud_rate,
    +        .tx_pin = uart_tx_pin,
    +        .rx_pin = uart_rx_pin,
    +        .clock_config = rp2040.clock_config,
    +    });
    +
    +    rp2040.uart.init_logger(uart);
    +
    +    // First we initialize the USB clock
    +    rp2040.usb.Usb.init_clk();
    +    // Then initialize the USB device using the configuration defined above
    +    rp2040.usb.Usb.init_device(&DEVICE_CONFIGURATION) catch unreachable;
    +    var old: u64 = time.get_time_since_boot().us_since_boot;
    +    var new: u64 = 0;
    +    while (true) {
    +        // You can now poll for USB events
    +        rp2040.usb.Usb.task(
    +            true, // debug output over UART [Y/n]
    +        ) catch unreachable;
    +
    +        new = time.get_time_since_boot().us_since_boot;
    +        if (new - old > 500000) {
    +            old = new;
    +            gpio.toggle(led);
    +        }
    +    }
    +}
    diff --git a/src/hal.zig b/src/hal.zig
    index 1350d07be..c9ac98639 100644
    --- a/src/hal.zig
    +++ b/src/hal.zig
    @@ -16,6 +16,7 @@ pub const irq = @import("hal/irq.zig");
     pub const rom = @import("hal/rom.zig");
     pub const flash = @import("hal/flash.zig");
     pub const pio = @import("hal/pio.zig");
    +pub const usb = @import("hal/usb.zig");
     pub const rand = @import("hal/random.zig");
     
     pub const clock_config = clocks.GlobalConfiguration.init(.{
    @@ -37,3 +38,8 @@ pub fn init() void {
     pub fn get_cpu_id() u32 {
         return SIO.CPUID.*;
     }
    +
    +test "hal tests" {
    +    _ = pio;
    +    _ = usb;
    +}
    diff --git a/src/hal/rom.zig b/src/hal/rom.zig
    index 128c08549..b76eb80a6 100644
    --- a/src/hal/rom.zig
    +++ b/src/hal/rom.zig
    @@ -47,9 +47,9 @@ pub const signatures = struct {
         /// Signature of memset4: Sets n bytes start at ptr to the value c and returns ptr; must be word (32-bit) aligned!
         const memset4 = fn (ptr: [*]u32, c: u8, n: u32) [*]u32;
         /// Signature of memcpy: Copies n bytes starting at src to dest and returns dest. The results are undefined if the regions overlap.
    -    const memcpy = fn (dest: [*]u8, src: [*]u8, n: u32) [*]u8;
    +    const memcpy = fn (dest: [*]u8, src: [*]const u8, n: u32) [*]u8;
         /// Signature of memcpy44: Copies n bytes starting at src to dest and returns dest; must be word (32-bit) aligned!
    -    const memcpy44 = fn (dest: [*]u32, src: [*]u32, n: u32) [*]u8;
    +    const memcpy44 = fn (dest: [*]u32, src: [*]const u32, n: u32) [*]u8;
         /// Signature of connect_internal_flash: Restore all QSPI pad controls to their default state, and connect the SSI to the QSPI pads
         const connect_internal_flash = fn () void;
         /// Signature of flash_exit_xip: First set up the SSI for serial-mode operations, then issue the fixed XIP exit sequence described in
    @@ -189,7 +189,7 @@ pub fn memset(dest: []u8, c: u8) []u8 {
     }
     
     /// Copies n bytes from src to dest; The number of bytes copied is the size of the smaller slice
    -pub fn memcpy(dest: []u8, src: []u8) []u8 {
    +pub fn memcpy(dest: []u8, src: []const u8) []u8 {
         const S = struct {
             var f: ?*signatures.memcpy = null;
         };
    diff --git a/src/hal/usb.zig b/src/hal/usb.zig
    new file mode 100644
    index 000000000..48538a48a
    --- /dev/null
    +++ b/src/hal/usb.zig
    @@ -0,0 +1,647 @@
    +//! USB device implementation
    +//!
    +//! Inspired by cbiffle's Rust [implementation](https://github.com/cbiffle/rp2040-usb-device-in-one-file/blob/main/src/main.rs)
    +
    +const std = @import("std");
    +
    +const microzig = @import("microzig");
    +const peripherals = microzig.chip.peripherals;
    +
    +/// Human Interface Device (HID)
    +pub const usb = microzig.core.usb;
    +pub const hid = usb.hid;
    +
    +const rom = @import("rom.zig");
    +const resets = @import("resets.zig");
    +
    +pub const EP0_OUT_IDX = 0;
    +pub const EP0_IN_IDX = 1;
    +
    +// +++++++++++++++++++++++++++++++++++++++++++++++++
    +// User Interface
    +// +++++++++++++++++++++++++++++++++++++++++++++++++
    +
    +/// The rp2040 usb device impl
    +///
    +/// We create a concrete implementaion by passing a handful
    +/// of system specific functions to Usb(). Those functions
    +/// are used by the abstract USB impl of microzig.
    +pub const Usb = usb.Usb(F);
    +
    +pub const DeviceConfiguration = usb.DeviceConfiguration;
    +pub const DeviceDescriptor = usb.DeviceDescriptor;
    +pub const DescType = usb.DescType;
    +pub const InterfaceDescriptor = usb.InterfaceDescriptor;
    +pub const ConfigurationDescriptor = usb.ConfigurationDescriptor;
    +pub const EndpointDescriptor = usb.EndpointDescriptor;
    +pub const EndpointConfiguration = usb.EndpointConfiguration;
    +pub const Dir = usb.Dir;
    +pub const TransferType = usb.TransferType;
    +
    +pub const utf8ToUtf16Le = usb.utf8Toutf16Le;
    +
    +pub var EP0_OUT_CFG: usb.EndpointConfiguration = .{
    +    .descriptor = &usb.EndpointDescriptor{
    +        .length = @intCast(u8, @sizeOf(usb.EndpointDescriptor)),
    +        .descriptor_type = usb.DescType.Endpoint,
    +        .endpoint_address = usb.EP0_OUT_ADDR,
    +        .attributes = @enumToInt(usb.TransferType.Control),
    +        .max_packet_size = 64,
    +        .interval = 0,
    +    },
    +    .endpoint_control_index = null,
    +    .buffer_control_index = 1,
    +    .data_buffer_index = 0,
    +    .next_pid_1 = false,
    +};
    +
    +pub var EP0_IN_CFG: usb.EndpointConfiguration = .{
    +    .descriptor = &usb.EndpointDescriptor{
    +        .length = @intCast(u8, @sizeOf(usb.EndpointDescriptor)),
    +        .descriptor_type = usb.DescType.Endpoint,
    +        .endpoint_address = usb.EP0_IN_ADDR,
    +        .attributes = @enumToInt(usb.TransferType.Control),
    +        .max_packet_size = 64,
    +        .interval = 0,
    +    },
    +    .endpoint_control_index = null,
    +    .buffer_control_index = 0,
    +    .data_buffer_index = 0,
    +    .next_pid_1 = false,
    +};
    +
    +// +++++++++++++++++++++++++++++++++++++++++++++++++
    +// Reference to endpoint buffers
    +// +++++++++++++++++++++++++++++++++++++++++++++++++
    +
    +/// USB data buffers
    +pub const buffers = struct {
    +    // Address 0x100-0xfff (3840 bytes) can be used for data buffers.
    +    const USBDPRAM_BASE = 0x50100100;
    +    // Data buffers are 64 bytes long as this is the max normal packet size
    +    const BUFFER_SIZE = 64;
    +    /// EP0 buffer 0 (shared between in and out)
    +    const USB_EP0_BUFFER0 = USBDPRAM_BASE;
    +    /// Optional EP0 buffer 1
    +    const USB_EP0_BUFFER1 = USBDPRAM_BASE + BUFFER_SIZE;
    +    /// Data buffers
    +    const USB_BUFFERS = USBDPRAM_BASE + (2 * BUFFER_SIZE);
    +
    +    /// Mapping to the different data buffers in DPSRAM
    +    pub var B: usb.Buffers = .{
    +        .ep0_buffer0 = @intToPtr([*]u8, USB_EP0_BUFFER0),
    +        .ep0_buffer1 = @intToPtr([*]u8, USB_EP0_BUFFER1),
    +        // We will initialize this comptime in a loop
    +        .rest = .{
    +            @intToPtr([*]u8, USB_BUFFERS + (0 * BUFFER_SIZE)),
    +            @intToPtr([*]u8, USB_BUFFERS + (1 * BUFFER_SIZE)),
    +            @intToPtr([*]u8, USB_BUFFERS + (2 * BUFFER_SIZE)),
    +            @intToPtr([*]u8, USB_BUFFERS + (3 * BUFFER_SIZE)),
    +            @intToPtr([*]u8, USB_BUFFERS + (4 * BUFFER_SIZE)),
    +            @intToPtr([*]u8, USB_BUFFERS + (5 * BUFFER_SIZE)),
    +            @intToPtr([*]u8, USB_BUFFERS + (6 * BUFFER_SIZE)),
    +            @intToPtr([*]u8, USB_BUFFERS + (7 * BUFFER_SIZE)),
    +            @intToPtr([*]u8, USB_BUFFERS + (8 * BUFFER_SIZE)),
    +            @intToPtr([*]u8, USB_BUFFERS + (9 * BUFFER_SIZE)),
    +            @intToPtr([*]u8, USB_BUFFERS + (10 * BUFFER_SIZE)),
    +            @intToPtr([*]u8, USB_BUFFERS + (11 * BUFFER_SIZE)),
    +            @intToPtr([*]u8, USB_BUFFERS + (12 * BUFFER_SIZE)),
    +            @intToPtr([*]u8, USB_BUFFERS + (13 * BUFFER_SIZE)),
    +            @intToPtr([*]u8, USB_BUFFERS + (14 * BUFFER_SIZE)),
    +            @intToPtr([*]u8, USB_BUFFERS + (15 * BUFFER_SIZE)),
    +        },
    +    };
    +};
    +
    +// +++++++++++++++++++++++++++++++++++++++++++++++++
    +// Code
    +// +++++++++++++++++++++++++++++++++++++++++++++++++
    +
    +/// A set of functions required by the abstract USB impl to
    +/// create a concrete one.
    +pub const F = struct {
    +    /// Initialize the USB clock to 48 MHz
    +    ///
    +    /// This requres that the system clock has been set up before hand
    +    /// using the 12 MHz crystal.
    +    pub fn usb_init_clk() void {
    +        // Bring PLL_USB up to 48MHz. PLL_USB is clocked from refclk, which we've
    +        // already moved over to the 12MHz XOSC. We just need to make it x4 that
    +        // clock.
    +        //
    +        // PLL_USB out of reset
    +        resets.reset(&.{.pll_usb});
    +        // Configure it:
    +        //
    +        // RFDIV = 1
    +        // FBDIV = 100 => FOUTVC0 = 1200 MHz
    +        peripherals.PLL_USB.CS.modify(.{ .REFDIV = 1 });
    +        peripherals.PLL_USB.FBDIV_INT.modify(.{ .FBDIV_INT = 100 });
    +        peripherals.PLL_USB.PWR.modify(.{ .PD = 0, .VCOPD = 0 });
    +        // Wait for lock
    +        while (peripherals.PLL_USB.CS.read().LOCK == 0) {}
    +        // Set up post dividers to enable output
    +        //
    +        // POSTDIV1 = POSTDIV2 = 5
    +        // PLL_USB FOUT = 1200 MHz / 25 = 48 MHz
    +        peripherals.PLL_USB.PRIM.modify(.{ .POSTDIV1 = 5, .POSTDIV2 = 5 });
    +        peripherals.PLL_USB.PWR.modify(.{ .POSTDIVPD = 0 });
    +        // Switch usbclk to be derived from PLLUSB
    +        peripherals.CLOCKS.CLK_USB_CTRL.modify(.{ .AUXSRC = .{ .value = .clksrc_pll_usb } });
    +
    +        // We now have the stable 48MHz reference clock required for USB:
    +    }
    +
    +    pub fn usb_init_device(device_config: *usb.DeviceConfiguration) void {
    +        // Bring USB out of reset
    +        resets.reset(&.{.usbctrl});
    +
    +        // Clear the control portion of DPRAM. This may not be necessary -- the
    +        // datasheet is ambiguous -- but the C examples do it, and so do we.
    +        peripherals.USBCTRL_DPRAM.SETUP_PACKET_LOW.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.SETUP_PACKET_HIGH.write_raw(0);
    +
    +        peripherals.USBCTRL_DPRAM.EP1_IN_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP1_OUT_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP2_IN_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP2_OUT_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP3_IN_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP3_OUT_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP4_IN_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP4_OUT_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP5_IN_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP5_OUT_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP6_IN_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP6_OUT_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP7_IN_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP7_OUT_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP8_IN_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP8_OUT_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP9_IN_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP9_OUT_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP10_IN_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP10_OUT_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP11_IN_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP11_OUT_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP12_IN_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP12_OUT_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP13_IN_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP13_OUT_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP14_IN_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP14_OUT_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP15_IN_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP15_OUT_CONTROL.write_raw(0);
    +
    +        peripherals.USBCTRL_DPRAM.EP0_IN_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP0_OUT_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP1_IN_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP1_OUT_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP2_IN_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP2_OUT_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP3_IN_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP3_OUT_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP4_IN_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP4_OUT_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP5_IN_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP5_OUT_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP6_IN_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP6_OUT_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP7_IN_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP7_OUT_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP8_IN_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP8_OUT_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP9_IN_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP9_OUT_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP10_IN_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP10_OUT_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP11_IN_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP11_OUT_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP12_IN_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP12_OUT_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP13_IN_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP13_OUT_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP14_IN_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP14_OUT_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP15_IN_BUFFER_CONTROL.write_raw(0);
    +        peripherals.USBCTRL_DPRAM.EP15_OUT_BUFFER_CONTROL.write_raw(0);
    +
    +        // Mux the controller to the onboard USB PHY. I was surprised that there are
    +        // alternatives to this, but, there are.
    +        peripherals.USBCTRL_REGS.USB_MUXING.modify(.{
    +            .TO_PHY = 1,
    +            // This bit is also set in the SDK example, without any discussion. It's
    +            // undocumented (being named does not count as being documented).
    +            .SOFTCON = 1,
    +        });
    +
    +        // Force VBUS detect. Not all RP2040 boards wire up VBUS detect, which would
    +        // let us detect being plugged into a host (the Pi Pico, to its credit,
    +        // does). For maximum compatibility, we'll set the hardware to always
    +        // pretend VBUS has been detected.
    +        peripherals.USBCTRL_REGS.USB_PWR.modify(.{
    +            .VBUS_DETECT = 1,
    +            .VBUS_DETECT_OVERRIDE_EN = 1,
    +        });
    +
    +        // Enable controller in device mode.
    +        peripherals.USBCTRL_REGS.MAIN_CTRL.modify(.{
    +            .CONTROLLER_EN = 1,
    +            .HOST_NDEVICE = 0,
    +        });
    +
    +        // Request to have an interrupt (which really just means setting a bit in
    +        // the `buff_status` register) every time a buffer moves through EP0.
    +        peripherals.USBCTRL_REGS.SIE_CTRL.modify(.{
    +            .EP0_INT_1BUF = 1,
    +        });
    +
    +        // Enable interrupts (bits set in the `ints` register) for other conditions
    +        // we use:
    +        peripherals.USBCTRL_REGS.INTE.modify(.{
    +            // A buffer is done
    +            .BUFF_STATUS = 1,
    +            // The host has reset us
    +            .BUS_RESET = 1,
    +            // We've gotten a setup request on EP0
    +            .SETUP_REQ = 1,
    +        });
    +
    +        // setup endpoints
    +        for (device_config.endpoints) |ep| {
    +            // EP0 doesn't have an endpoint control index; only process the other
    +            // endpoints here.
    +            if (ep.endpoint_control_index) |epci| {
    +                // We need to compute the offset from the base of USB SRAM to the
    +                // buffer we're choosing, because that's how the peripheral do.
    +                const buf_base = @ptrToInt(buffers.B.get(ep.data_buffer_index));
    +                const dpram_base = @ptrToInt(peripherals.USBCTRL_DPRAM);
    +                // The offset _should_ fit in a u16, but if we've gotten something
    +                // wrong in the past few lines, a common symptom will be integer
    +                // overflow producing a Very Large Number,
    +                const dpram_offset = @intCast(u16, buf_base - dpram_base);
    +
    +                // Configure the endpoint!
    +                modify_endpoint_control(epci, .{
    +                    .ENABLE = 1,
    +                    // Please set the corresponding bit in buff_status when a
    +                    // buffer is done, thx.
    +                    .INTERRUPT_PER_BUFF = 1,
    +                    // Select bulk vs control (or interrupt as soon as implemented).
    +                    .ENDPOINT_TYPE = .{ .raw = @intCast(u2, ep.descriptor.attributes) },
    +                    // And, designate our buffer by its offset.
    +                    .BUFFER_ADDRESS = dpram_offset,
    +                });
    +            }
    +        }
    +
    +        // Present full-speed device by enabling pullup on DP. This is the point
    +        // where the host will notice our presence.
    +        peripherals.USBCTRL_REGS.SIE_CTRL.modify(.{ .PULLUP_EN = 1 });
    +    }
    +
    +    /// Configures a given endpoint to send data (device-to-host, IN) when the host
    +    /// next asks for it.
    +    ///
    +    /// The contents of `buffer` will be _copied_ into USB SRAM, so you can
    +    /// reuse `buffer` immediately after this returns. No need to wait for the
    +    /// packet to be sent.
    +    pub fn usb_start_tx(
    +        ep: *usb.EndpointConfiguration,
    +        buffer: []const u8,
    +    ) void {
    +        // It is technically possible to support longer buffers but this demo
    +        // doesn't bother.
    +        // TODO: assert!(buffer.len() <= 64);
    +        // You should only be calling this on IN endpoints.
    +        // TODO: assert!(UsbDir::of_endpoint_addr(ep.descriptor.endpoint_address) == UsbDir::In);
    +
    +        // Copy the given data into the corresponding ep buffer
    +        const epbuffer = buffers.B.get(ep.data_buffer_index);
    +        _ = rom.memcpy(epbuffer[0..buffer.len], buffer);
    +
    +        // Configure the IN:
    +        const np: u1 = if (ep.next_pid_1) 1 else 0;
    +
    +        // The AVAILABLE bit in the buffer control register should be set
    +        // separately to the rest of the data in the buffer control register,
    +        // so that the rest of the data in the buffer control register is
    +        // accurate when the AVAILABLE bit is set.
    +
    +        // Write the buffer information to the buffer control register
    +        modify_buffer_control(ep.buffer_control_index, .{
    +            .PID_0 = np, // DATA0/1, depending
    +            .FULL_0 = 1, // We have put data in
    +            .LENGTH_0 = @intCast(u10, buffer.len), // There are this many bytes
    +        });
    +
    +        // Nop for some clock cycles
    +        // use volatile so the compiler doesn't optimize the nops away
    +        asm volatile (
    +            \\ nop
    +            \\ nop
    +            \\ nop
    +        );
    +
    +        // Set available bit
    +        modify_buffer_control(ep.buffer_control_index, .{
    +            .AVAILABLE_0 = 1, // The data is for the computer to use now
    +        });
    +
    +        ep.next_pid_1 = !ep.next_pid_1;
    +    }
    +
    +    pub fn usb_start_rx(
    +        ep: *usb.EndpointConfiguration,
    +        len: usize,
    +    ) void {
    +        // It is technically possible to support longer buffers but this demo
    +        // doesn't bother.
    +        // TODO: assert!(len <= 64);
    +        // You should only be calling this on OUT endpoints.
    +        // TODO: assert!(UsbDir::of_endpoint_addr(ep.descriptor.endpoint_address) == UsbDir::Out);
    +
    +        // Check which DATA0/1 PID this endpoint is expecting next.
    +        const np: u1 = if (ep.next_pid_1) 1 else 0;
    +        // Configure the OUT:
    +        modify_buffer_control(ep.buffer_control_index, .{
    +            .PID_0 = np, // DATA0/1 depending
    +            .FULL_0 = 0, // Buffer is NOT full, we want the computer to fill it
    +            .AVAILABLE_0 = 1, // It is, however, available to be filled
    +            .LENGTH_0 = @intCast(u10, len), // Up tho this many bytes
    +        });
    +
    +        // Flip the DATA0/1 PID for the next receive
    +        ep.next_pid_1 = !ep.next_pid_1;
    +    }
    +
    +    /// Check which interrupt flags are set
    +    pub fn get_interrupts() usb.InterruptStatus {
    +        const ints = peripherals.USBCTRL_REGS.INTS.read();
    +
    +        return .{
    +            .BuffStatus = if (ints.BUFF_STATUS == 1) true else false,
    +            .BusReset = if (ints.BUS_RESET == 1) true else false,
    +            .DevConnDis = if (ints.DEV_CONN_DIS == 1) true else false,
    +            .DevSuspend = if (ints.DEV_SUSPEND == 1) true else false,
    +            .DevResumeFromHost = if (ints.DEV_RESUME_FROM_HOST == 1) true else false,
    +            .SetupReq = if (ints.SETUP_REQ == 1) true else false,
    +        };
    +    }
    +
    +    /// Returns a received USB setup packet
    +    ///
    +    /// Side effect: The setup request status flag will be cleared
    +    ///
    +    /// One can assume that this function is only called if the
    +    /// setup request falg is set.
    +    pub fn get_setup_packet() usb.SetupPacket {
    +        // Clear the status flag (write-one-to-clear)
    +        peripherals.USBCTRL_REGS.SIE_STATUS.modify(.{ .SETUP_REC = 1 });
    +
    +        // This assumes that the setup packet is arriving on EP0, our
    +        // control endpoint. Which it should be. We don't have any other
    +        // Control endpoints.
    +
    +        // Copy the setup packet out of its dedicated buffer at the base of
    +        // USB SRAM. The PAC models this buffer as two 32-bit registers,
    +        // which is, like, not _wrong_ but slightly awkward since it means
    +        // we can't just treat it as bytes. Instead, copy it out to a byte
    +        // array.
    +        var setup_packet: [8]u8 = .{0} ** 8;
    +        const spl: u32 = peripherals.USBCTRL_DPRAM.SETUP_PACKET_LOW.raw;
    +        const sph: u32 = peripherals.USBCTRL_DPRAM.SETUP_PACKET_HIGH.raw;
    +        _ = rom.memcpy(setup_packet[0..4], std.mem.asBytes(&spl));
    +        _ = rom.memcpy(setup_packet[4..8], std.mem.asBytes(&sph));
    +        // Reinterpret as setup packet
    +        return std.mem.bytesToValue(usb.SetupPacket, &setup_packet);
    +    }
    +
    +    /// Called on a bus reset interrupt
    +    pub fn bus_reset() void {
    +        // Acknowledge by writing the write-one-to-clear status bit.
    +        peripherals.USBCTRL_REGS.SIE_STATUS.modify(.{ .BUS_RESET = 1 });
    +        peripherals.USBCTRL_REGS.ADDR_ENDP.modify(.{ .ADDRESS = 0 });
    +    }
    +
    +    pub fn set_address(addr: u7) void {
    +        peripherals.USBCTRL_REGS.ADDR_ENDP.modify(.{ .ADDRESS = addr });
    +    }
    +
    +    pub fn get_EPBIter(dc: *const usb.DeviceConfiguration) usb.EPBIter {
    +        return .{
    +            .bufbits = peripherals.USBCTRL_REGS.BUFF_STATUS.raw,
    +            .device_config = dc,
    +            .next = next,
    +        };
    +    }
    +};
    +
    +// +++++++++++++++++++++++++++++++++++++++++++++++++
    +// Utility functions
    +// +++++++++++++++++++++++++++++++++++++++++++++++++
    +
    +/// Check if the corresponding buffer is available
    +pub fn buffer_available(
    +    ep: *usb.EndpointConfiguration,
    +) bool {
    +    const rbc = read_raw_buffer_control(ep.buffer_control_index);
    +    // Bit 11 of the EPn_X_BUFFER_CONTROL register represents the AVAILABLE_0 flag
    +    return ((rbc & 0x400) == 0);
    +}
    +
    +pub fn modify_buffer_control(
    +    i: usize,
    +    fields: anytype,
    +) void {
    +    // haven't found a better way to handle this
    +    switch (i) {
    +        0 => peripherals.USBCTRL_DPRAM.EP0_IN_BUFFER_CONTROL.modify(fields),
    +        1 => peripherals.USBCTRL_DPRAM.EP0_OUT_BUFFER_CONTROL.modify(fields),
    +        2 => peripherals.USBCTRL_DPRAM.EP1_IN_BUFFER_CONTROL.modify(fields),
    +        3 => peripherals.USBCTRL_DPRAM.EP1_OUT_BUFFER_CONTROL.modify(fields),
    +        4 => peripherals.USBCTRL_DPRAM.EP2_IN_BUFFER_CONTROL.modify(fields),
    +        5 => peripherals.USBCTRL_DPRAM.EP2_OUT_BUFFER_CONTROL.modify(fields),
    +        6 => peripherals.USBCTRL_DPRAM.EP3_IN_BUFFER_CONTROL.modify(fields),
    +        7 => peripherals.USBCTRL_DPRAM.EP3_OUT_BUFFER_CONTROL.modify(fields),
    +        8 => peripherals.USBCTRL_DPRAM.EP4_IN_BUFFER_CONTROL.modify(fields),
    +        9 => peripherals.USBCTRL_DPRAM.EP4_OUT_BUFFER_CONTROL.modify(fields),
    +        10 => peripherals.USBCTRL_DPRAM.EP5_IN_BUFFER_CONTROL.modify(fields),
    +        11 => peripherals.USBCTRL_DPRAM.EP5_OUT_BUFFER_CONTROL.modify(fields),
    +        12 => peripherals.USBCTRL_DPRAM.EP6_IN_BUFFER_CONTROL.modify(fields),
    +        13 => peripherals.USBCTRL_DPRAM.EP6_OUT_BUFFER_CONTROL.modify(fields),
    +        14 => peripherals.USBCTRL_DPRAM.EP7_IN_BUFFER_CONTROL.modify(fields),
    +        15 => peripherals.USBCTRL_DPRAM.EP7_OUT_BUFFER_CONTROL.modify(fields),
    +        16 => peripherals.USBCTRL_DPRAM.EP8_IN_BUFFER_CONTROL.modify(fields),
    +        17 => peripherals.USBCTRL_DPRAM.EP8_OUT_BUFFER_CONTROL.modify(fields),
    +        18 => peripherals.USBCTRL_DPRAM.EP9_IN_BUFFER_CONTROL.modify(fields),
    +        19 => peripherals.USBCTRL_DPRAM.EP9_OUT_BUFFER_CONTROL.modify(fields),
    +        20 => peripherals.USBCTRL_DPRAM.EP10_IN_BUFFER_CONTROL.modify(fields),
    +        21 => peripherals.USBCTRL_DPRAM.EP10_OUT_BUFFER_CONTROL.modify(fields),
    +        22 => peripherals.USBCTRL_DPRAM.EP11_IN_BUFFER_CONTROL.modify(fields),
    +        23 => peripherals.USBCTRL_DPRAM.EP11_OUT_BUFFER_CONTROL.modify(fields),
    +        24 => peripherals.USBCTRL_DPRAM.EP12_IN_BUFFER_CONTROL.modify(fields),
    +        25 => peripherals.USBCTRL_DPRAM.EP12_OUT_BUFFER_CONTROL.modify(fields),
    +        26 => peripherals.USBCTRL_DPRAM.EP13_IN_BUFFER_CONTROL.modify(fields),
    +        27 => peripherals.USBCTRL_DPRAM.EP13_OUT_BUFFER_CONTROL.modify(fields),
    +        28 => peripherals.USBCTRL_DPRAM.EP14_IN_BUFFER_CONTROL.modify(fields),
    +        29 => peripherals.USBCTRL_DPRAM.EP14_OUT_BUFFER_CONTROL.modify(fields),
    +        30 => peripherals.USBCTRL_DPRAM.EP15_IN_BUFFER_CONTROL.modify(fields),
    +        31 => peripherals.USBCTRL_DPRAM.EP15_OUT_BUFFER_CONTROL.modify(fields),
    +        else => {}, // TODO: We'll just ignore it for now
    +    }
    +}
    +
    +pub fn read_raw_buffer_control(
    +    i: usize,
    +) u32 {
    +    // haven't found a better way to handle this
    +    return switch (i) {
    +        0 => peripherals.USBCTRL_DPRAM.EP0_IN_BUFFER_CONTROL.raw,
    +        1 => peripherals.USBCTRL_DPRAM.EP0_OUT_BUFFER_CONTROL.raw,
    +        2 => peripherals.USBCTRL_DPRAM.EP1_IN_BUFFER_CONTROL.raw,
    +        3 => peripherals.USBCTRL_DPRAM.EP1_OUT_BUFFER_CONTROL.raw,
    +        4 => peripherals.USBCTRL_DPRAM.EP2_IN_BUFFER_CONTROL.raw,
    +        5 => peripherals.USBCTRL_DPRAM.EP2_OUT_BUFFER_CONTROL.raw,
    +        6 => peripherals.USBCTRL_DPRAM.EP3_IN_BUFFER_CONTROL.raw,
    +        7 => peripherals.USBCTRL_DPRAM.EP3_OUT_BUFFER_CONTROL.raw,
    +        8 => peripherals.USBCTRL_DPRAM.EP4_IN_BUFFER_CONTROL.raw,
    +        9 => peripherals.USBCTRL_DPRAM.EP4_OUT_BUFFER_CONTROL.raw,
    +        10 => peripherals.USBCTRL_DPRAM.EP5_IN_BUFFER_CONTROL.raw,
    +        11 => peripherals.USBCTRL_DPRAM.EP5_OUT_BUFFER_CONTROL.raw,
    +        12 => peripherals.USBCTRL_DPRAM.EP6_IN_BUFFER_CONTROL.raw,
    +        13 => peripherals.USBCTRL_DPRAM.EP6_OUT_BUFFER_CONTROL.raw,
    +        14 => peripherals.USBCTRL_DPRAM.EP7_IN_BUFFER_CONTROL.raw,
    +        15 => peripherals.USBCTRL_DPRAM.EP7_OUT_BUFFER_CONTROL.raw,
    +        16 => peripherals.USBCTRL_DPRAM.EP8_IN_BUFFER_CONTROL.raw,
    +        17 => peripherals.USBCTRL_DPRAM.EP8_OUT_BUFFER_CONTROL.raw,
    +        18 => peripherals.USBCTRL_DPRAM.EP9_IN_BUFFER_CONTROL.raw,
    +        19 => peripherals.USBCTRL_DPRAM.EP9_OUT_BUFFER_CONTROL.raw,
    +        20 => peripherals.USBCTRL_DPRAM.EP10_IN_BUFFER_CONTROL.raw,
    +        21 => peripherals.USBCTRL_DPRAM.EP10_OUT_BUFFER_CONTROL.raw,
    +        22 => peripherals.USBCTRL_DPRAM.EP11_IN_BUFFER_CONTROL.raw,
    +        23 => peripherals.USBCTRL_DPRAM.EP11_OUT_BUFFER_CONTROL.raw,
    +        24 => peripherals.USBCTRL_DPRAM.EP12_IN_BUFFER_CONTROL.raw,
    +        25 => peripherals.USBCTRL_DPRAM.EP12_OUT_BUFFER_CONTROL.raw,
    +        26 => peripherals.USBCTRL_DPRAM.EP13_IN_BUFFER_CONTROL.raw,
    +        27 => peripherals.USBCTRL_DPRAM.EP13_OUT_BUFFER_CONTROL.raw,
    +        28 => peripherals.USBCTRL_DPRAM.EP14_IN_BUFFER_CONTROL.raw,
    +        29 => peripherals.USBCTRL_DPRAM.EP14_OUT_BUFFER_CONTROL.raw,
    +        30 => peripherals.USBCTRL_DPRAM.EP15_IN_BUFFER_CONTROL.raw,
    +        31 => peripherals.USBCTRL_DPRAM.EP15_OUT_BUFFER_CONTROL.raw,
    +        else => 0, // TODO: We'll just return 0 for now
    +    };
    +}
    +
    +pub fn modify_endpoint_control(
    +    epci: usize,
    +    fields: anytype,
    +) void {
    +    // haven't found a better way to handle this
    +    switch (epci) {
    +        1 => peripherals.USBCTRL_DPRAM.EP1_IN_CONTROL.modify(fields),
    +        2 => peripherals.USBCTRL_DPRAM.EP1_OUT_CONTROL.modify(fields),
    +        3 => peripherals.USBCTRL_DPRAM.EP2_IN_CONTROL.modify(fields),
    +        4 => peripherals.USBCTRL_DPRAM.EP2_OUT_CONTROL.modify(fields),
    +        5 => peripherals.USBCTRL_DPRAM.EP3_IN_CONTROL.modify(fields),
    +        6 => peripherals.USBCTRL_DPRAM.EP3_OUT_CONTROL.modify(fields),
    +        7 => peripherals.USBCTRL_DPRAM.EP4_IN_CONTROL.modify(fields),
    +        8 => peripherals.USBCTRL_DPRAM.EP4_OUT_CONTROL.modify(fields),
    +        9 => peripherals.USBCTRL_DPRAM.EP5_IN_CONTROL.modify(fields),
    +        10 => peripherals.USBCTRL_DPRAM.EP5_OUT_CONTROL.modify(fields),
    +        11 => peripherals.USBCTRL_DPRAM.EP6_IN_CONTROL.modify(fields),
    +        12 => peripherals.USBCTRL_DPRAM.EP6_OUT_CONTROL.modify(fields),
    +        13 => peripherals.USBCTRL_DPRAM.EP7_IN_CONTROL.modify(fields),
    +        14 => peripherals.USBCTRL_DPRAM.EP7_OUT_CONTROL.modify(fields),
    +        15 => peripherals.USBCTRL_DPRAM.EP8_IN_CONTROL.modify(fields),
    +        16 => peripherals.USBCTRL_DPRAM.EP8_OUT_CONTROL.modify(fields),
    +        17 => peripherals.USBCTRL_DPRAM.EP9_IN_CONTROL.modify(fields),
    +        18 => peripherals.USBCTRL_DPRAM.EP9_OUT_CONTROL.modify(fields),
    +        19 => peripherals.USBCTRL_DPRAM.EP10_IN_CONTROL.modify(fields),
    +        20 => peripherals.USBCTRL_DPRAM.EP10_OUT_CONTROL.modify(fields),
    +        21 => peripherals.USBCTRL_DPRAM.EP11_IN_CONTROL.modify(fields),
    +        22 => peripherals.USBCTRL_DPRAM.EP11_OUT_CONTROL.modify(fields),
    +        23 => peripherals.USBCTRL_DPRAM.EP12_IN_CONTROL.modify(fields),
    +        24 => peripherals.USBCTRL_DPRAM.EP12_OUT_CONTROL.modify(fields),
    +        25 => peripherals.USBCTRL_DPRAM.EP13_IN_CONTROL.modify(fields),
    +        26 => peripherals.USBCTRL_DPRAM.EP13_OUT_CONTROL.modify(fields),
    +        27 => peripherals.USBCTRL_DPRAM.EP14_IN_CONTROL.modify(fields),
    +        28 => peripherals.USBCTRL_DPRAM.EP14_OUT_CONTROL.modify(fields),
    +        29 => peripherals.USBCTRL_DPRAM.EP15_IN_CONTROL.modify(fields),
    +        30 => peripherals.USBCTRL_DPRAM.EP15_OUT_CONTROL.modify(fields),
    +        else => {}, // TODO: We'll just ignore it for now
    +    }
    +}
    +
    +// -----------------------------------------------------------
    +
    +pub fn next(self: *usb.EPBIter) ?usb.EPB {
    +    if (self.last_bit) |lb| {
    +        // Acknowledge the last handled buffer
    +        peripherals.USBCTRL_REGS.BUFF_STATUS.write_raw(lb);
    +        self.last_bit = null;
    +    }
    +    // All input buffers handled?
    +    if (self.bufbits == 0) return null;
    +
    +    // Who's still outstanding? Find their bit index by counting how
    +    // many LSBs are zero.
    +    var lowbit_index: u5 = 0;
    +    while ((self.bufbits >> lowbit_index) & 0x01 == 0) : (lowbit_index += 1) {}
    +    // Remove their bit from our set.
    +    const lowbit = @intCast(u32, 1) << lowbit_index;
    +    self.last_bit = lowbit;
    +    self.bufbits ^= lowbit;
    +
    +    // Here we exploit knowledge of the ordering of buffer control
    +    // registers in the peripheral. Each endpoint has a pair of
    +    // registers, so we can determine the endpoint number by:
    +    const epnum = @intCast(u8, lowbit_index >> 1);
    +    // Of the pair, the IN endpoint comes first, followed by OUT, so
    +    // we can get the direction by:
    +    const dir = if (lowbit_index & 1 == 0) usb.Dir.In else usb.Dir.Out;
    +
    +    const ep_addr = dir.endpoint(epnum);
    +    // Process the buffer-done event.
    +
    +    // Process the buffer-done event.
    +    //
    +    // Scan the device table to figure out which endpoint struct
    +    // corresponds to this address. We could use a smarter
    +    // method here, but in practice, the number of endpoints is
    +    // small so a linear scan doesn't kill us.
    +    var endpoint: ?*usb.EndpointConfiguration = null;
    +    for (self.device_config.endpoints) |ep| {
    +        if (ep.descriptor.endpoint_address == ep_addr) {
    +            endpoint = ep;
    +            break;
    +        }
    +    }
    +    // Buffer event for unknown EP?!
    +    // TODO: if (endpoint == null) return EPBError.UnknownEndpoint;
    +    // Read the buffer control register to check status.
    +    const bc = read_raw_buffer_control(endpoint.?.buffer_control_index);
    +
    +    // We should only get here if we've been notified that
    +    // the buffer is ours again. This is indicated by the hw
    +    // _clearing_ the AVAILABLE bit.
    +    //
    +    // This ensures that we can return a shared reference to
    +    // the databuffer contents without races.
    +    // TODO: if ((bc & (1 << 10)) == 1) return EPBError.NotAvailable;
    +
    +    // Cool. Checks out.
    +
    +    // Get a pointer to the buffer in USB SRAM. This is the
    +    // buffer _contents_. See the safety comments below.
    +    const epbuffer = buffers.B.get(endpoint.?.data_buffer_index);
    +
    +    // Get the actual length of the data, which may be less
    +    // than the buffer size.
    +    const len = @intCast(usize, bc & 0x3ff);
    +
    +    // Copy the data from SRAM
    +    return usb.EPB{
    +        .endpoint = endpoint.?,
    +        .buffer = epbuffer[0..len],
    +    };
    +}
    
    From 5e5e11c80fb754e985c03a4e1051b674bb5f3177 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 25 Apr 2023 23:41:00 -0700
    Subject: [PATCH 134/286] update microzig (#16)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index dd491cc84..658648b86 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit dd491cc84fe034cb07f5b6cc6aa486d97e0ef7ab
    +Subproject commit 658648b86ba63762ac45665abe0a06ec279225b1
    
    From a2fccb3c73e3ac01ec1adcdc285943d1f1a651c6 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 25 Apr 2023 23:41:08 -0700
    Subject: [PATCH 135/286] update microzig (#48)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index dd491cc84..658648b86 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit dd491cc84fe034cb07f5b6cc6aa486d97e0ef7ab
    +Subproject commit 658648b86ba63762ac45665abe0a06ec279225b1
    
    From 4e2cdae13e35438ff72dcdc85c8bb4b51b46bd13 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 25 Apr 2023 23:41:16 -0700
    Subject: [PATCH 136/286] update microzig (#15)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index dd491cc84..658648b86 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit dd491cc84fe034cb07f5b6cc6aa486d97e0ef7ab
    +Subproject commit 658648b86ba63762ac45665abe0a06ec279225b1
    
    From 734ed2f5d8d1f7c06573457ef2c689cf198a902c Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 25 Apr 2023 23:41:24 -0700
    Subject: [PATCH 137/286] update microzig (#16)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index dd491cc84..658648b86 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit dd491cc84fe034cb07f5b6cc6aa486d97e0ef7ab
    +Subproject commit 658648b86ba63762ac45665abe0a06ec279225b1
    
    From b0642a90d88e999e0780951e926ac7d3c4f8b5a4 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 25 Apr 2023 23:41:40 -0700
    Subject: [PATCH 138/286] update microzig (#15)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index dd491cc84..658648b86 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit dd491cc84fe034cb07f5b6cc6aa486d97e0ef7ab
    +Subproject commit 658648b86ba63762ac45665abe0a06ec279225b1
    
    From 78da6fd10c59c72fd3bc70afa49d8e21abd38067 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 25 Apr 2023 23:41:51 -0700
    Subject: [PATCH 139/286] update microzig (#15)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index dd491cc84..658648b86 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit dd491cc84fe034cb07f5b6cc6aa486d97e0ef7ab
    +Subproject commit 658648b86ba63762ac45665abe0a06ec279225b1
    
    From 6a5f42a15c9ae5571b19dc23529c24c8446c0359 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 25 Apr 2023 23:41:59 -0700
    Subject: [PATCH 140/286] update microzig (#15)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index dd491cc84..658648b86 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit dd491cc84fe034cb07f5b6cc6aa486d97e0ef7ab
    +Subproject commit 658648b86ba63762ac45665abe0a06ec279225b1
    
    From a7f71cb0ca8a1c3909f9e00f6662e1d6b860f9d5 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 26 Apr 2023 00:29:05 -0700
    Subject: [PATCH 141/286] update microzig (#17)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 658648b86..b5edf6da6 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 658648b86ba63762ac45665abe0a06ec279225b1
    +Subproject commit b5edf6da6b540215f03689c3cc07d00478255f7d
    
    From cc882413bbc170789f71b634fa852f3aca0e935d Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 26 Apr 2023 00:29:15 -0700
    Subject: [PATCH 142/286] update microzig (#17)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 658648b86..b5edf6da6 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 658648b86ba63762ac45665abe0a06ec279225b1
    +Subproject commit b5edf6da6b540215f03689c3cc07d00478255f7d
    
    From c9943f54ef889e9be97781f8a379474743d33452 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 26 Apr 2023 00:29:22 -0700
    Subject: [PATCH 143/286] update microzig (#17)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 658648b86..b5edf6da6 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 658648b86ba63762ac45665abe0a06ec279225b1
    +Subproject commit b5edf6da6b540215f03689c3cc07d00478255f7d
    
    From bc4582cf4de165cf85ec8337a96dc9570129a629 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 26 Apr 2023 00:29:37 -0700
    Subject: [PATCH 144/286] update microzig (#50)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 658648b86..b5edf6da6 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 658648b86ba63762ac45665abe0a06ec279225b1
    +Subproject commit b5edf6da6b540215f03689c3cc07d00478255f7d
    
    From 15d9bae086de1a4c60ec9364cf636d71bf4f250d Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 26 Apr 2023 00:29:42 -0700
    Subject: [PATCH 145/286] update microzig (#17)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 658648b86..b5edf6da6 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 658648b86ba63762ac45665abe0a06ec279225b1
    +Subproject commit b5edf6da6b540215f03689c3cc07d00478255f7d
    
    From e8cf979268d7194d9f305fb0978243c14a57f024 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 26 Apr 2023 00:29:50 -0700
    Subject: [PATCH 146/286] Update microzig (#18)
    
    * update microzig
    
    * update cpu
    
    ---------
    
    Co-authored-by: mattnite 
    ---
     deps/microzig                | 2 +-
     src/cpus/espressif-riscv.zig | 6 +++---
     2 files changed, 4 insertions(+), 4 deletions(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 658648b86..b5edf6da6 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 658648b86ba63762ac45665abe0a06ec279225b1
    +Subproject commit b5edf6da6b540215f03689c3cc07d00478255f7d
    diff --git a/src/cpus/espressif-riscv.zig b/src/cpus/espressif-riscv.zig
    index e20072daa..dc2edb769 100644
    --- a/src/cpus/espressif-riscv.zig
    +++ b/src/cpus/espressif-riscv.zig
    @@ -29,11 +29,11 @@ pub inline fn clearStatusBit(comptime reg: StatusRegister, bits: u32) void {
         );
     }
     
    -pub inline fn cli() void {
    +pub inline fn disable_interrupts() void {
         clearStatusBit(.mstatus, 0x08);
     }
     
    -pub inline fn sei() void {
    +pub inline fn enable_interrupts() void {
         setStatusBit(.mstatus, 0x08);
     }
     
    @@ -62,7 +62,7 @@ pub const startup_logic = struct {
         extern fn microzig_main() noreturn;
     
         export fn _start() linksection("microzig_flash_start") callconv(.Naked) noreturn {
    -        microzig.cpu.cli();
    +        microzig.cpu.disable_interrupts();
             asm volatile ("mv sp, %[eos]"
                 :
                 : [eos] "r" (@as(u32, microzig.config.end_of_stack)),
    
    From b71c07281825713690af8f0b8293e2fbef7c94da Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 26 Apr 2023 00:30:00 -0700
    Subject: [PATCH 147/286] update microzig (#18)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 658648b86..b5edf6da6 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 658648b86ba63762ac45665abe0a06ec279225b1
    +Subproject commit b5edf6da6b540215f03689c3cc07d00478255f7d
    
    From c1c19d221e85845e3874d39e8bc7597f54f59237 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 26 Apr 2023 01:02:09 -0700
    Subject: [PATCH 148/286] Gpio api (#51)
    
    * improve GPIO API
    
    * fix test, update microzig
    
    * first DMA functions, new abstraction for enumerating peripherals
    
    * rebase main
    
    * fix call to reset()
    ---
     examples/adc.zig                    |  18 +--
     examples/blinky_core1.zig           |  10 +-
     examples/flash_program.zig          |  16 +--
     examples/gpio_clk.zig               |   9 +-
     examples/random.zig                 |  16 +--
     examples/spi_master.zig             |   3 +-
     examples/squarewave.zig             | 103 +++++++++------
     examples/uart.zig                   |  20 ++-
     examples/usb_device.zig             |  18 ++-
     examples/usb_hid.zig                |  18 ++-
     src/hal.zig                         |  34 +++--
     src/hal/adc.zig                     |   5 +-
     src/hal/dma.zig                     | 131 ++++++++++++++++++
     src/hal/gpio.zig                    | 198 ++++++++++++++++++----------
     src/hal/hw.zig                      |  37 +++++-
     src/hal/pins.zig                    |  27 ++--
     src/hal/pio.zig                     | 156 +++++++++++++---------
     src/hal/pio/assembler.zig           |   4 +-
     src/hal/pio/assembler/encoder.zig   |  17 ++-
     src/hal/pio/assembler/tokenizer.zig |   8 +-
     src/hal/pll.zig                     |   2 +-
     src/hal/resets.zig                  | 150 ++++++++++++++++-----
     src/hal/spi.zig                     |  50 +++----
     src/hal/uart.zig                    |  55 ++++----
     src/hal/usb.zig                     |   4 +-
     25 files changed, 717 insertions(+), 392 deletions(-)
     create mode 100644 src/hal/dma.zig
    
    diff --git a/examples/adc.zig b/examples/adc.zig
    index 5d8f0c3eb..b6d6bf4ff 100644
    --- a/examples/adc.zig
    +++ b/examples/adc.zig
    @@ -3,26 +3,22 @@
     const std = @import("std");
     const microzig = @import("microzig");
     const rp2040 = microzig.hal;
    +const gpio = rp2040.gpio;
     const adc = rp2040.adc;
     const time = rp2040.time;
     
     const temp_sensor: adc.Input = .temperature_sensor;
    -const uart_id = 0;
    +const uart = rp2040.uart.num(0);
     const baud_rate = 115200;
    -const uart_tx_pin = 0;
    -const uart_rx_pin = 1;
    +const uart_tx_pin = gpio.num(0);
    +const uart_rx_pin = gpio.num(1);
     
     pub const std_options = struct {
         pub const logFn = rp2040.uart.log;
     };
     
    -pub fn init() void {
    -    rp2040.clock_config.apply();
    -    rp2040.gpio.reset();
    -    adc.init();
    -    temp_sensor.init();
    -
    -    const uart = rp2040.uart.UART.init(uart_id, .{
    +pub fn main() void {
    +    uart.apply(.{
             .baud_rate = baud_rate,
             .tx_pin = uart_tx_pin,
             .rx_pin = uart_rx_pin,
    @@ -30,9 +26,7 @@ pub fn init() void {
         });
     
         rp2040.uart.init_logger(uart);
    -}
     
    -pub fn main() void {
         while (true) : (time.sleep_ms(1000)) {
             const sample = temp_sensor.read();
             std.log.info("temp value: {}", .{sample});
    diff --git a/examples/blinky_core1.zig b/examples/blinky_core1.zig
    index b3fdd04da..64f067468 100644
    --- a/examples/blinky_core1.zig
    +++ b/examples/blinky_core1.zig
    @@ -6,21 +6,19 @@ const gpio = rp2040.gpio;
     const time = rp2040.time;
     const multicore = rp2040.multicore;
     
    -const led = 25;
    +const led = gpio.num(25);
     
     fn core1() void {
         while (true) {
    -        gpio.put(led, 1);
    +        led.put(1);
             time.sleep_ms(250);
    -        gpio.put(led, 0);
    +        led.put(0);
             time.sleep_ms(250);
         }
     }
     
     pub fn main() !void {
    -    gpio.init(led);
    -    gpio.set_direction(led, .out);
    -
    +    led.set_direction(.out);
         multicore.launch_core1(core1);
     
         while (true) {
    diff --git a/examples/flash_program.zig b/examples/flash_program.zig
    index 2fc5cc097..a2999c9d8 100644
    --- a/examples/flash_program.zig
    +++ b/examples/flash_program.zig
    @@ -7,11 +7,11 @@ const time = rp2040.time;
     const gpio = rp2040.gpio;
     const clocks = rp2040.clocks;
     
    -const led = 25;
    -const uart_id = 0;
    +const led = gpio.num(25);
    +const uart = rp2040.uart.num(0);
     const baud_rate = 115200;
    -const uart_tx_pin = 0;
    -const uart_rx_pin = 1;
    +const uart_tx_pin = gpio.num(0);
    +const uart_rx_pin = gpio.num(1);
     
     const flash_target_offset: u32 = 256 * 1024;
     const flash_target_contents = @intToPtr([*]const u8, rp2040.flash.XIP_BASE + flash_target_offset);
    @@ -28,12 +28,10 @@ pub const std_options = struct {
     };
     
     pub fn main() !void {
    -    gpio.reset();
    -    gpio.init(led);
    -    gpio.set_direction(led, .out);
    -    gpio.put(led, 1);
    +    led.set_direction(.out);
    +    led.put(1);
     
    -    const uart = rp2040.uart.UART.init(uart_id, .{
    +    uart.apply(.{
             .baud_rate = baud_rate,
             .tx_pin = uart_tx_pin,
             .rx_pin = uart_rx_pin,
    diff --git a/examples/gpio_clk.zig b/examples/gpio_clk.zig
    index e66761c3b..dd2810242 100644
    --- a/examples/gpio_clk.zig
    +++ b/examples/gpio_clk.zig
    @@ -4,18 +4,13 @@ const rp2040 = microzig.hal;
     const gpio = rp2040.gpio;
     const clocks = rp2040.clocks;
     
    -const gpout0_pin = 21;
    +const gpout0_pin = gpio.num(21);
     const clock_config = clocks.GlobalConfiguration.init(.{
         .sys = .{ .source = .src_xosc },
         .gpout0 = .{ .source = .clk_sys },
     });
     
    -pub fn init() void {
    -    clock_config.apply();
    -    gpio.reset();
    -}
    -
     pub fn main() !void {
    -    gpio.set_function(gpout0_pin, .gpck);
    +    gpout0_pin.set_function(.gpck);
         while (true) {}
     }
    diff --git a/examples/random.zig b/examples/random.zig
    index dbf00d5f0..0645839d1 100644
    --- a/examples/random.zig
    +++ b/examples/random.zig
    @@ -10,11 +10,11 @@ const gpio = rp2040.gpio;
     const clocks = rp2040.clocks;
     const rand = rp2040.rand;
     
    -const led = 25;
    -const uart_id = 0;
    +const led = gpio.num(25);
    +const uart = rp2040.uart.num(0);
     const baud_rate = 115200;
    -const uart_tx_pin = 0;
    -const uart_rx_pin = 1;
    +const uart_tx_pin = gpio.num(0);
    +const uart_rx_pin = gpio.num(1);
     
     pub fn panic(message: []const u8, _: ?*std.builtin.StackTrace, _: ?usize) noreturn {
         std.log.err("panic: {s}", .{message});
    @@ -28,12 +28,10 @@ pub const std_options = struct {
     };
     
     pub fn main() !void {
    -    gpio.reset();
    -    gpio.init(led);
    -    gpio.set_direction(led, .out);
    -    gpio.put(led, 1);
    +    led.set_direction(.out);
    +    led.put(1);
     
    -    const uart = rp2040.uart.UART.init(uart_id, .{
    +    uart.apply(.{
             .baud_rate = baud_rate,
             .tx_pin = uart_tx_pin,
             .rx_pin = uart_rx_pin,
    diff --git a/examples/spi_master.zig b/examples/spi_master.zig
    index ba1c0c2db..c160fee96 100644
    --- a/examples/spi_master.zig
    +++ b/examples/spi_master.zig
    @@ -8,11 +8,12 @@ const clocks = rp2040.clocks;
     const peripherals = microzig.chip.peripherals;
     
     const BUF_LEN = 0x100;
    +const spi = rp2040.spi.num(0);
     
     // Communicate with another RP2040 over spi
     // Slave implementation: https://github.com/raspberrypi/pico-examples/blob/master/spi/spi_master_slave/spi_slave/spi_slave.c
     pub fn main() !void {
    -    const spi = rp2040.spi.SPI.init(0, .{
    +    spi.apply(.{
             .clock_config = rp2040.clock_config,
         });
         var out_buf: [BUF_LEN]u8 = .{ 0xAA, 0xBB, 0xCC, 0xDD } ** (BUF_LEN / 4);
    diff --git a/examples/squarewave.zig b/examples/squarewave.zig
    index 74370003c..0564b6259 100644
    --- a/examples/squarewave.zig
    +++ b/examples/squarewave.zig
    @@ -6,57 +6,76 @@ const gpio = rp2040.gpio;
     const Pio = rp2040.pio.Pio;
     const StateMachine = rp2040.pio.StateMachine;
     
    -const squarewave_program = (rp2040.pio.assemble(
    +const squarewave_program = rp2040.pio.assemble(
    +    \\;
    +    \\; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    +    \\;
    +    \\; SPDX-License-Identifier: BSD-3-Clause
    +    \\;
         \\.program squarewave
         \\    set pindirs, 1   ; Set pin to output
         \\again:
         \\    set pins, 1 [1]  ; Drive pin high and then delay for one cycle
         \\    set pins, 0      ; Drive pin low
         \\    jmp again        ; Set PC to label `again`
    -, .{}) catch
    -    @panic("failed to assemble program"))
    -    .get_program_by_name("squarewave");
    +, .{}).get_program_by_name("squarewave");
    +
    +// Pick one PIO instance arbitrarily. We're also arbitrarily picking state
    +// machine 0 on this PIO instance (the state machines are numbered 0 to 3
    +// inclusive).
    +const pio: Pio = .pio0;
    +const sm: StateMachine = .sm0;
     
     pub fn main() void {
    -    gpio.reset();
    -    // Pick one PIO instance arbitrarily. We're also arbitrarily picking state
    -    // machine 0 on this PIO instance (the state machines are numbered 0 to 3
    -    // inclusive).
    -    const pio: Pio = .pio0;
    -    const sm: StateMachine = .sm0;
    -
    -    // Load the assembled program directly into the PIO's instruction memory.
    -    // Each PIO instance has a 32-slot instruction memory, which all 4 state
    -    // machines can see. The system has write-only access.
    -    for (squarewave_program.instructions, 0..) |insn, i|
    -        pio.get_instruction_memory()[i] = insn;
    -
    -    // Configure state machine 0 to run at sysclk/2.5. The state machines can
    -    // run as fast as one instruction per clock cycle, but we can scale their
    -    // speed down uniformly to meet some precise frequency target, e.g. for a
    -    // UART baud rate. This register has 16 integer divisor bits and 8
    -    // fractional divisor bits.
    -    pio.sm_set_clkdiv(sm, .{
    -        .int = 2,
    -        .frac = 0x80,
    -    });
    -
    -    // There are five pin mapping groups (out, in, set, side-set, jmp pin)
    -    // which are used by different instructions or in different circumstances.
    -    // Here we're just using SET instructions. Configure state machine 0 SETs
    -    // to affect GPIO 0 only; then configure GPIO0 to be controlled by PIO0,
    -    // as opposed to e.g. the processors.
    -    pio.gpio_init(0);
    -    pio.sm_set_pin_mappings(sm, .{
    -        .out = .{
    -            .base = 0,
    -            .count = 1,
    +    pio.gpio_init(gpio.num(2));
    +    pio.sm_load_and_start_program(sm, squarewave_program, .{
    +        .clkdiv = rp2040.pio.ClkDivOptions.from_float(125),
    +        .pin_mappings = .{
    +            .set = .{
    +                .base = 2,
    +                .count = 1,
    +            },
             },
    -    });
    +    }) catch unreachable;
     
    -    // Set the state machine running. The PIO CTRL register is global within a
    -    // PIO instance, so you can start/stop multiple state machines
    -    // simultaneously. We're using the register's hardware atomic set alias to
    -    // make one bit high without doing a read-modify-write on the register.
         pio.sm_set_enabled(sm, true);
    +
    +    while (true) {}
    +
    +    //// Load the assembled program directly into the PIO's instruction memory.
    +    //// Each PIO instance has a 32-slot instruction memory, which all 4 state
    +    //// machines can see. The system has write-only access.
    +    //for (squarewave_program.instructions, 0..) |insn, i|
    +    //    pio.get_instruction_memory()[i] = insn;
    +
    +    //// Configure state machine 0 to run at sysclk/2.5. The state machines can
    +    //// run as fast as one instruction per clock cycle, but we can scale their
    +    //// speed down uniformly to meet some precise frequency target, e.g. for a
    +    //// UART baud rate. This register has 16 integer divisor bits and 8
    +    //// fractional divisor bits.
    +    //pio.sm_set_clkdiv(sm, .{
    +    //    .int = 2,
    +    //    .frac = 0x80,
    +    //});
    +
    +    //// There are five pin mapping groups (out, in, set, side-set, jmp pin)
    +    //// which are used by different instructions or in different circumstances.
    +    //// Here we're just using SET instructions. Configure state machine 0 SETs
    +    //// to affect GPIO 0 only; then configure GPIO0 to be controlled by PIO0,
    +    //// as opposed to e.g. the processors.
    +    //pio.gpio_init(2);
    +    //pio.sm_set_pin_mappings(sm, .{
    +    //    .out = .{
    +    //        .base = 2,
    +    //        .count = 1,
    +    //    },
    +    //});
    +
    +    //// Set the state machine running. The PIO CTRL register is global within a
    +    //// PIO instance, so you can start/stop multiple state machines
    +    //// simultaneously. We're using the register's hardware atomic set alias to
    +    //// make one bit high without doing a read-modify-write on the register.
    +    //pio.sm_set_enabled(sm, true);
    +
    +    //while (true) {}
     }
    diff --git a/examples/uart.zig b/examples/uart.zig
    index 57cf1c49f..6be3b3869 100644
    --- a/examples/uart.zig
    +++ b/examples/uart.zig
    @@ -6,11 +6,11 @@ const time = rp2040.time;
     const gpio = rp2040.gpio;
     const clocks = rp2040.clocks;
     
    -const led = 25;
    -const uart_id = 0;
    +const led = gpio.num(25);
    +const uart = rp2040.uart.num(0);
     const baud_rate = 115200;
    -const uart_tx_pin = 0;
    -const uart_rx_pin = 1;
    +const uart_tx_pin = gpio.num(0);
    +const uart_rx_pin = gpio.num(1);
     
     pub fn panic(message: []const u8, _: ?*std.builtin.StackTrace, _: ?usize) noreturn {
         std.log.err("panic: {s}", .{message});
    @@ -24,12 +24,10 @@ pub const std_options = struct {
     };
     
     pub fn main() !void {
    -    gpio.reset();
    -    gpio.init(led);
    -    gpio.set_direction(led, .out);
    -    gpio.put(led, 1);
    +    led.set_direction(.out);
    +    led.put(1);
     
    -    const uart = rp2040.uart.UART.init(uart_id, .{
    +    uart.apply(.{
             .baud_rate = baud_rate,
             .tx_pin = uart_tx_pin,
             .rx_pin = uart_rx_pin,
    @@ -40,11 +38,11 @@ pub fn main() !void {
     
         var i: u32 = 0;
         while (true) : (i += 1) {
    -        gpio.put(led, 1);
    +        led.put(1);
             std.log.info("what {}", .{i});
             time.sleep_ms(500);
     
    -        gpio.put(led, 0);
    +        led.put(0);
             time.sleep_ms(500);
         }
     }
    diff --git a/examples/usb_device.zig b/examples/usb_device.zig
    index c86d5e140..3395286cd 100644
    --- a/examples/usb_device.zig
    +++ b/examples/usb_device.zig
    @@ -8,11 +8,11 @@ const gpio = rp2040.gpio;
     const clocks = rp2040.clocks;
     const usb = rp2040.usb;
     
    -const led = 25;
    -const uart_id = 0;
    +const led = gpio.num(25);
    +const uart = rp2040.uart.num(0);
     const baud_rate = 115200;
    -const uart_tx_pin = 0;
    -const uart_rx_pin = 1;
    +const uart_tx_pin = gpio.num(0);
    +const uart_rx_pin = gpio.num(1);
     
     // First we define two callbacks that will be used by the endpoints we define next...
     fn ep1_in_callback(dc: *usb.DeviceConfiguration, data: []const u8) void {
    @@ -138,12 +138,10 @@ pub const std_options = struct {
     };
     
     pub fn main() !void {
    -    gpio.reset();
    -    gpio.init(led);
    -    gpio.set_direction(led, .out);
    -    gpio.put(led, 1);
    +    led.set_direction(.out);
    +    led.put(1);
     
    -    const uart = rp2040.uart.UART.init(uart_id, .{
    +    uart.apply(.{
             .baud_rate = baud_rate,
             .tx_pin = uart_tx_pin,
             .rx_pin = uart_rx_pin,
    @@ -167,7 +165,7 @@ pub fn main() !void {
             new = time.get_time_since_boot().us_since_boot;
             if (new - old > 500000) {
                 old = new;
    -            gpio.toggle(led);
    +            led.toggle();
             }
         }
     }
    diff --git a/examples/usb_hid.zig b/examples/usb_hid.zig
    index 633add74f..051ad746c 100644
    --- a/examples/usb_hid.zig
    +++ b/examples/usb_hid.zig
    @@ -8,11 +8,11 @@ const gpio = rp2040.gpio;
     const clocks = rp2040.clocks;
     const usb = rp2040.usb;
     
    -const led = 25;
    -const uart_id = 0;
    +const led = gpio.num(25);
    +const uart = rp2040.uart.num(0);
     const baud_rate = 115200;
    -const uart_tx_pin = 0;
    -const uart_rx_pin = 1;
    +const uart_tx_pin = gpio.num(0);
    +const uart_rx_pin = gpio.num(1);
     
     // First we define two callbacks that will be used by the endpoints we define next...
     fn ep1_in_callback(dc: *usb.DeviceConfiguration, data: []const u8) void {
    @@ -153,12 +153,10 @@ pub const std_options = struct {
     };
     
     pub fn main() !void {
    -    gpio.reset();
    -    gpio.init(led);
    -    gpio.set_direction(led, .out);
    -    gpio.put(led, 1);
    +    led.set_direction(.out);
    +    led.put(1);
     
    -    const uart = rp2040.uart.UART.init(uart_id, .{
    +    uart.apply(.{
             .baud_rate = baud_rate,
             .tx_pin = uart_tx_pin,
             .rx_pin = uart_rx_pin,
    @@ -182,7 +180,7 @@ pub fn main() !void {
             new = time.get_time_since_boot().us_since_boot;
             if (new - old > 500000) {
                 old = new;
    -            gpio.toggle(led);
    +            led.toggle();
             }
         }
     }
    diff --git a/src/hal.zig b/src/hal.zig
    index c9ac98639..89e2b58a9 100644
    --- a/src/hal.zig
    +++ b/src/hal.zig
    @@ -3,21 +3,22 @@ const microzig = @import("microzig");
     const SIO = microzig.chip.peripherals.SIO;
     
     pub const adc = @import("hal/adc.zig");
    -pub const pins = @import("hal/pins.zig");
    -pub const gpio = @import("hal/gpio.zig");
     pub const clocks = @import("hal/clocks.zig");
    +pub const dma = @import("hal/dma.zig");
    +pub const flash = @import("hal/flash.zig");
    +pub const gpio = @import("hal/gpio.zig");
    +pub const irq = @import("hal/irq.zig");
     pub const multicore = @import("hal/multicore.zig");
    -pub const time = @import("hal/time.zig");
    -pub const uart = @import("hal/uart.zig");
    +pub const pins = @import("hal/pins.zig");
    +pub const pio = @import("hal/pio.zig");
     pub const pwm = @import("hal/pwm.zig");
    -pub const spi = @import("hal/spi.zig");
    +pub const rand = @import("hal/random.zig");
     pub const resets = @import("hal/resets.zig");
    -pub const irq = @import("hal/irq.zig");
     pub const rom = @import("hal/rom.zig");
    -pub const flash = @import("hal/flash.zig");
    -pub const pio = @import("hal/pio.zig");
    +pub const spi = @import("hal/spi.zig");
    +pub const time = @import("hal/time.zig");
    +pub const uart = @import("hal/uart.zig");
     pub const usb = @import("hal/usb.zig");
    -pub const rand = @import("hal/random.zig");
     
     pub const clock_config = clocks.GlobalConfiguration.init(.{
         .ref = .{ .source = .src_xosc },
    @@ -32,7 +33,22 @@ pub const clock_config = clocks.GlobalConfiguration.init(.{
     });
     
     pub fn init() void {
    +    // Reset all peripherals to put system into a known state, - except
    +    // for QSPI pads and the XIP IO bank, as this is fatal if running from
    +    // flash - and the PLLs, as this is fatal if clock muxing has not been
    +    // reset on this boot - and USB, syscfg, as this disturbs USB-to-SWD
    +    // on core 1
    +    resets.reset_block(resets.masks.init);
    +
    +    // Remove reset from peripherals which are clocked only by clk_sys and
    +    // clk_ref. Other peripherals stay in reset until we've configured
    +    // clocks.
    +    resets.unreset_block_wait(resets.masks.clocked_by_sys_and_ref);
    +
         clock_config.apply();
    +
    +    // Peripheral clocks should now all be running
    +    resets.unreset_block_wait(resets.masks.all);
     }
     
     pub fn get_cpu_id() u32 {
    diff --git a/src/hal/adc.zig b/src/hal/adc.zig
    index ba293b096..2f6b96b4a 100644
    --- a/src/hal/adc.zig
    +++ b/src/hal/adc.zig
    @@ -43,9 +43,9 @@ pub const Input = enum(u3) {
             switch (input) {
                 .temperature_sensor => set_temp_sensor_enabled(true),
                 else => {
    -                const gpio_num = @as(u32, @enumToInt(input)) + 26;
    +                const pin = gpio.num(@as(u5, @enumToInt(input)) + 26);
    +                pin.set_function(.null);
     
    -                gpio.set_function(gpio_num, .null);
                     // TODO: implement these, otherwise adc isn't going to work.
                     //gpio.disablePulls(gpio_num);
                     //gpio.setInputEnabled(gpio_num, false);
    @@ -105,7 +105,6 @@ pub const InputMask = InputMask: {
     
     /// Initialize ADC hardware
     pub fn init() void {
    -    resets.reset(&.{.adc});
         ADC.CS.write(.{
             .EN = 1,
             .TS_EN = 0,
    diff --git a/src/hal/dma.zig b/src/hal/dma.zig
    new file mode 100644
    index 000000000..248e333b0
    --- /dev/null
    +++ b/src/hal/dma.zig
    @@ -0,0 +1,131 @@
    +const std = @import("std");
    +const assert = std.debug.assert;
    +
    +const microzig = @import("microzig");
    +const chip = microzig.chip;
    +const DMA = chip.peripherals.DMA;
    +
    +const hw = @import("hw.zig");
    +
    +var claimed_channels: u12 = 0;
    +
    +pub const Dreq = enum(u6) {
    +    uart0_tx = 20,
    +    uart1_tx = 21,
    +    _,
    +};
    +
    +pub fn num(n: u4) Channel {
    +    assert(n < 12);
    +
    +    return @intToEnum(Channel, n);
    +}
    +
    +pub fn claim_unused_channel() ?Channel {}
    +
    +pub const Channel = enum(u4) {
    +    _,
    +
    +    /// panics if the channel is already claimed
    +    pub fn claim(channel: Channel) void {
    +        _ = channel;
    +        @panic("TODO");
    +    }
    +
    +    pub fn unclaim(channel: Channel) void {
    +        _ = channel;
    +        @panic("TODO");
    +    }
    +
    +    pub fn is_claimed(channel: Channel) bool {
    +        _ = channel;
    +        @panic("TODO");
    +    }
    +
    +    const Regs = extern struct {
    +        read_addr: u32,
    +        write_addr: u32,
    +        trans_count: u32,
    +        ctrl_trig: @TypeOf(DMA.CH0_CTRL_TRIG),
    +
    +        // alias 1
    +        al1_ctrl: u32,
    +        al1_read_addr: u32,
    +        al1_write_addr: u32,
    +        al1_trans_count: u32,
    +
    +        // alias 2
    +        al2_ctrl: u32,
    +        al2_read_addr: u32,
    +        al2_write_addr: u32,
    +        al2_trans_count: u32,
    +
    +        // alias 3
    +        al3_ctrl: u32,
    +        al3_read_addr: u32,
    +        al3_write_addr: u32,
    +        al3_trans_count: u32,
    +    };
    +
    +    fn get_regs(channel: Channel) *volatile Regs {
    +        const regs = @ptrCast(*volatile [12]Regs, &DMA.CH0_READ_ADDR);
    +        return ®s[@enumToInt(channel)];
    +    }
    +
    +    pub const TransferConfig = struct {
    +        transfer_size_bytes: u3,
    +        enable: bool,
    +        read_increment: bool,
    +        write_increment: bool,
    +        dreq: Dreq,
    +
    +        // TODO:
    +        // chain to
    +        // ring
    +        // byte swapping
    +    };
    +
    +    pub fn trigger_transfer(
    +        channel: Channel,
    +        write_addr: u32,
    +        read_addr: u32,
    +        count: u32,
    +        config: TransferConfig,
    +    ) void {
    +        const regs = channel.get_regs();
    +        regs.read_addr = read_addr;
    +        regs.write_addr = write_addr;
    +        regs.trans_count = count;
    +        regs.ctrl_trig.modify(.{
    +            .EN = @boolToInt(config.enable),
    +            .DATA_SIZE = .{
    +                .value = .SIZE_BYTE,
    +            },
    +            .INCR_READ = @boolToInt(config.read_increment),
    +            .INCR_WRITE = @boolToInt(config.write_increment),
    +            .TREQ_SEL = .{
    +                .raw = @enumToInt(config.dreq),
    +            },
    +        });
    +    }
    +
    +    pub fn set_irq0_enabled(channel: Channel, enabled: bool) void {
    +        if (enabled) {
    +            const inte0_set = hw.set_alias_raw(&DMA.INTE0);
    +            inte0_set.* = @as(u32, 1) << @enumToInt(channel);
    +        } else {
    +            const inte0_clear = hw.clear_alias_raw(&DMA.INTE0);
    +            inte0_clear.* = @as(u32, 1) << @enumToInt(channel);
    +        }
    +    }
    +
    +    pub fn acknowledge_irq0(channel: Channel) void {
    +        const ints0_set = hw.set_alias_raw(&DMA.INTS0);
    +        ints0_set.* = @as(u32, 1) << @enumToInt(channel);
    +    }
    +
    +    pub fn is_busy(channel: Channel) bool {
    +        const regs = channel.get_regs();
    +        return regs.ctrl_trig.read().BUSY == 1;
    +    }
    +};
    diff --git a/src/hal/gpio.zig b/src/hal/gpio.zig
    index c0b6baeee..02f421e48 100644
    --- a/src/hal/gpio.zig
    +++ b/src/hal/gpio.zig
    @@ -63,92 +63,147 @@ pub const Enabled = enum {
         enabled,
     };
     
    -pub inline fn reset() void {
    -    resets.reset(&.{ .io_bank0, .pads_bank0 });
    -}
    +pub const PullUpDown = enum {
    +    up,
    +    down,
    +};
    +
    +pub fn num(n: u5) Pin {
    +    if (n > 29)
    +        @panic("the RP2040 only has GPIO 0-29");
     
    -/// Initialize a GPIO, set func to SIO
    -pub inline fn init(comptime gpio: u32) void {
    -    const mask = 1 << gpio;
    -    SIO.GPIO_OE_CLR.raw = mask;
    -    SIO.GPIO_OUT_CLR.raw = mask;
    -    set_function(gpio, .sio);
    +    return @intToEnum(Pin, n);
     }
     
    -/// Reset GPIO back to null function (disables it)
    -pub inline fn deinit(comptime gpio: u32) void {
    -    set_function(gpio, .null);
    +pub fn mask(m: u32) Mask {
    +    _ = m;
    +    @panic("TODO");
     }
     
    -pub const PullUpDown = enum {
    -    up,
    -    down,
    +pub const Mask = enum(u30) {
    +    _,
     };
     
    -pub inline fn set_pull(comptime gpio: u32, mode: ?PullUpDown) void {
    -    const gpio_name = comptime std.fmt.comptimePrint("GPIO{d}", .{gpio});
    -    const gpio_regs = &@field(PADS_BANK0, gpio_name);
    +pub const Pin = enum(u5) {
    +    _,
    +
    +    pub const Regs = struct {
    +        status: @TypeOf(IO_BANK0.GPIO0_STATUS),
    +        ctrl: microzig.mmio.Mmio(packed struct(u32) {
    +            FUNCSEL: packed union {
    +                raw: u5,
    +                value: Function,
    +            },
    +            reserved8: u3,
    +            OUTOVER: packed union {
    +                raw: u2,
    +                value: Override,
    +            },
    +            reserved12: u2,
    +            OEOVER: packed union {
    +                raw: u2,
    +                value: Override,
    +            },
    +            reserved16: u2,
    +            INOVER: packed union {
    +                raw: u2,
    +                value: Override,
    +            },
    +            reserved28: u10,
    +            IRQOVER: packed union {
    +                raw: u2,
    +                value: Override,
    +            },
    +            padding: u2,
    +        }),
    +    };
    +
    +    pub const PadsReg = @TypeOf(PADS_BANK0.GPIO0);
    +
    +    fn get_regs(gpio: Pin) *volatile Regs {
    +        const regs = @ptrCast(*volatile [30]Regs, &IO_BANK0.GPIO0_STATUS);
    +        return ®s[@enumToInt(gpio)];
    +    }
     
    -    if (mode == null) {
    -        gpio_regs.modify(.{ .PUE = 0, .PDE = 0 });
    -    } else switch (mode.?) {
    -        .up => gpio_regs.modify(.{ .PUE = 1, .PDE = 0 }),
    -        .down => gpio_regs.modify(.{ .PUE = 0, .PDE = 1 }),
    +    fn get_pads_reg(gpio: Pin) *volatile PadsReg {
    +        const regs = @ptrCast(*volatile [30]PadsReg, &PADS_BANK0.GPIO0);
    +        return ®s[@enumToInt(gpio)];
         }
    -}
     
    -pub inline fn set_direction(comptime gpio: u32, direction: Direction) void {
    -    const mask = 1 << gpio;
    -    switch (direction) {
    -        .in => SIO.GPIO_OE_CLR.raw = mask,
    -        .out => SIO.GPIO_OE_SET.raw = mask,
    +    pub fn mask(gpio: Pin) u32 {
    +        return @as(u32, 1) << @enumToInt(gpio);
         }
    -}
     
    -/// Drive a single GPIO high/low
    -pub inline fn put(comptime gpio: u32, value: u1) void {
    -    std.log.debug("GPIO{} put: {}", .{ gpio, value });
    -    const mask = 1 << gpio;
    -    switch (value) {
    -        0 => SIO.GPIO_OUT_CLR.raw = mask,
    -        1 => SIO.GPIO_OUT_SET.raw = mask,
    +    pub inline fn set_pull(gpio: Pin, mode: ?PullUpDown) void {
    +        const pads_reg = gpio.get_pads_reg();
    +
    +        if (mode == null) {
    +            pads_reg.modify(.{ .PUE = 0, .PDE = 0 });
    +        } else switch (mode.?) {
    +            .up => pads_reg.modify(.{ .PUE = 1, .PDE = 0 }),
    +            .down => pads_reg.modify(.{ .PUE = 0, .PDE = 1 }),
    +        }
         }
    -}
     
    -pub inline fn toggle(comptime gpio: u32) void {
    -    SIO.GPIO_OUT_XOR.raw = (1 << gpio);
    -}
    +    pub inline fn set_direction(gpio: Pin, direction: Direction) void {
    +        switch (direction) {
    +            .in => SIO.GPIO_OE_CLR.raw = gpio.mask(),
    +            .out => SIO.GPIO_OE_SET.raw = gpio.mask(),
    +        }
    +    }
     
    -pub inline fn read(comptime gpio: u32) u1 {
    -    const mask = 1 << gpio;
    -    return if ((SIO.GPIO_IN.raw & mask) != 0)
    -        1
    -    else
    -        0;
    -}
    +    /// Drive a single GPIO high/low
    +    pub inline fn put(gpio: Pin, value: u1) void {
    +        switch (value) {
    +            0 => SIO.GPIO_OUT_CLR.raw = gpio.mask(),
    +            1 => SIO.GPIO_OUT_SET.raw = gpio.mask(),
    +        }
    +    }
     
    -pub inline fn set_function(comptime gpio: u32, function: Function) void {
    -    const pad_bank_reg = comptime std.fmt.comptimePrint("GPIO{}", .{gpio});
    -    @field(PADS_BANK0, pad_bank_reg).modify(.{
    -        .IE = 1,
    -        .OD = 0,
    -    });
    -
    -    const io_bank_reg = comptime std.fmt.comptimePrint("GPIO{}_CTRL", .{gpio});
    -    @field(IO_BANK0, io_bank_reg).write(.{
    -        .FUNCSEL = .{ .raw = @enumToInt(function) },
    -        .OUTOVER = .{ .value = .NORMAL },
    -        .INOVER = .{ .value = .NORMAL },
    -        .IRQOVER = .{ .value = .NORMAL },
    -        .OEOVER = .{ .value = .NORMAL },
    -
    -        .reserved8 = 0,
    -        .reserved12 = 0,
    -        .reserved16 = 0,
    -        .reserved28 = 0,
    -        .padding = 0,
    -    });
    -}
    +    pub inline fn toggle(gpio: Pin) void {
    +        SIO.GPIO_OUT_XOR.raw = gpio.mask();
    +    }
    +
    +    pub inline fn read(gpio: Pin) u1 {
    +        return if ((SIO.GPIO_IN.raw & gpio.mask()) != 0)
    +            1
    +        else
    +            0;
    +    }
    +
    +    pub inline fn set_function(gpio: Pin, function: Function) void {
    +        const pads_reg = gpio.get_pads_reg();
    +        pads_reg.modify(.{
    +            .IE = 1,
    +            .OD = 0,
    +        });
    +
    +        const regs = gpio.get_regs();
    +        regs.ctrl.modify(.{
    +            .FUNCSEL = .{ .value = function },
    +            .OUTOVER = .{ .value = .normal },
    +            .INOVER = .{ .value = .normal },
    +            .IRQOVER = .{ .value = .normal },
    +            .OEOVER = .{ .value = .normal },
    +
    +            .reserved8 = 0,
    +            .reserved12 = 0,
    +            .reserved16 = 0,
    +            .reserved28 = 0,
    +            .padding = 0,
    +        });
    +    }
    +
    +    //pub fn set_drive_strength(gpio: Gpio, drive: DriveStrength) void {
    +    //    _ = drive;
    +    //    const pads_reg = gpio.get_pads_reg();
    +    //    pads_reg.modify(.{
    +    //        .DRIVE = .{
    +    //            .value = .@"12mA",
    +    //        },
    +    //    });
    +    //}
    +};
     
     // setting both uplls enables a "bus keep" function, a weak pull to whatever
     // is current high/low state of GPIO
    @@ -165,7 +220,6 @@ pub inline fn set_function(comptime gpio: u32, function: Function) void {
     //pub fn setInputEnabled(gpio: u32, enabled: Enabled) void {}
     //pub fn setinputHysteresisEnabled(gpio: u32, enabled: Enabled) void {}
     //pub fn setSlewRate(gpio: u32, slew_rate: SlewRate) void {}
    -//pub fn setDriveStrength(gpio: u32, drive: DriveStrength) void {}
    +
     //pub fn setIrqEnabled(gpio: u32, events: IrqEvents) void {}
     //pub fn acknowledgeIrq(gpio: u32, events: IrqEvents) void {}
    -
    diff --git a/src/hal/hw.zig b/src/hal/hw.zig
    index a44aff121..1017c8a6e 100644
    --- a/src/hal/hw.zig
    +++ b/src/hal/hw.zig
    @@ -1,11 +1,44 @@
    +const std = @import("std");
    +const assert = std.debug.assert;
    +
     pub const Lock = struct {
         impl: u32,
     
         pub fn claim() Lock {
    -
    +        @panic("TODO");
         }
     
         pub fn unlock(lock: Lock) void {
    -
    +        _ = lock;
    +        @panic("TODO");
         }
     };
    +
    +const rw_bits = @as(u32, 0x0) << 12;
    +const xor_bits = @as(u32, 0x1) << 12;
    +const set_bits = @as(u32, 0x2) << 12;
    +const clear_bits = @as(u32, 0x3) << 12;
    +
    +pub fn clear_alias_raw(ptr: anytype) *u32 {
    +    return @intToPtr(*u32, @ptrToInt(ptr) | clear_bits);
    +}
    +
    +pub fn set_alias_raw(ptr: anytype) *u32 {
    +    return @intToPtr(*u32, @ptrToInt(ptr) | set_bits);
    +}
    +
    +pub fn xor_alias_raw(ptr: anytype) *u32 {
    +    return @intToPtr(*u32, @ptrToInt(ptr) | xor_bits);
    +}
    +
    +pub fn clear_alias(ptr: anytype) @TypeOf(ptr) {
    +    return @intToPtr(@TypeOf(ptr), @ptrToInt(ptr) | clear_bits);
    +}
    +
    +pub fn set_alias(ptr: anytype) @TypeOf(ptr) {
    +    return @intToPtr(@TypeOf(ptr), @ptrToInt(ptr) | set_bits);
    +}
    +
    +pub fn xor_alias(ptr: anytype) @TypeOf(ptr) {
    +    return @intToPtr(@TypeOf(ptr), @ptrToInt(ptr) | xor_bits);
    +}
    diff --git a/src/hal/pins.zig b/src/hal/pins.zig
    index 3ff924638..a882df50f 100644
    --- a/src/hal/pins.zig
    +++ b/src/hal/pins.zig
    @@ -315,24 +315,24 @@ const function_table = [@typeInfo(Function).Enum.fields.len][30]u1{
     pub fn GPIO(comptime num: u5, comptime direction: gpio.Direction) type {
         return switch (direction) {
             .in => struct {
    -            const gpio_num = num;
    +            const pin = gpio.num(num);
     
                 pub inline fn read(self: @This()) u1 {
                     _ = self;
    -                return gpio.read(gpio_num);
    +                return pin.read();
                 }
             },
             .out => struct {
    -            const gpio_num = num;
    +            const pin = gpio.num(num);
     
                 pub inline fn put(self: @This(), value: u1) void {
                     _ = self;
    -                gpio.put(gpio_num, value);
    +                pin.put(value);
                 }
     
                 pub inline fn toggle(self: @This()) void {
                     _ = self;
    -                gpio.toggle(gpio_num);
    +                pin.toggle();
                 }
             },
         };
    @@ -473,7 +473,6 @@ pub const GlobalConfiguration = struct {
             // TODO: ensure only one instance of an input function exists
     
             const used_gpios = comptime input_gpios | output_gpios;
    -        gpio.reset();
     
             if (used_gpios != 0) {
                 SIO.GPIO_OE_CLR.raw = used_gpios;
    @@ -482,7 +481,7 @@ pub const GlobalConfiguration = struct {
     
             inline for (@typeInfo(GlobalConfiguration).Struct.fields) |field| {
                 if (@field(config, field.name)) |pin_config| {
    -                const gpio_num = @enumToInt(@field(Pin, field.name));
    +                const pin = gpio.num(@enumToInt(@field(Pin, field.name)));
                     const func = pin_config.function;
     
                     // xip = 0,
    @@ -496,17 +495,17 @@ pub const GlobalConfiguration = struct {
                     // @"null" = 0x1f,
     
                     if (func == .SIO) {
    -                    gpio.set_function(gpio_num, .sio);
    +                    pin.set_function(.sio);
                     } else if (comptime func.is_pwm()) {
    -                    gpio.set_function(gpio_num, .pwm);
    +                    pin.set_function(.pwm);
                     } else if (comptime func.is_adc()) {
    -                    gpio.set_function(gpio_num, .null);
    +                    pin.set_function(.null);
                     } else if (comptime func.isUartTx() or func.isUartRx()) {
    -                    gpio.set_function(gpio_num, .uart);
    +                    pin.set_function(.uart);
                     } else {
                         @compileError(std.fmt.comptimePrint("Unimplemented pin function. Please implement setting pin function {s} for GPIO {}", .{
                             @tagName(func),
    -                        gpio_num,
    +                        @enumToInt(pin),
                         }));
                     }
                 }
    @@ -527,10 +526,6 @@ pub const GlobalConfiguration = struct {
                     };
             }
     
    -        if (has_pwm) {
    -            resets.reset(&.{.pwm});
    -        }
    -
             if (has_adc) {
                 adc.init();
             }
    diff --git a/src/hal/pio.zig b/src/hal/pio.zig
    index 22dc5a304..2eb17096f 100644
    --- a/src/hal/pio.zig
    +++ b/src/hal/pio.zig
    @@ -8,6 +8,8 @@ const PIO0 = microzig.chip.peripherals.PIO0;
     const PIO1 = microzig.chip.peripherals.PIO1;
     
     const gpio = @import("gpio.zig");
    +const resets = @import("resets.zig");
    +const hw = @import("hw.zig");
     const assembler = @import("pio/assembler.zig");
     const encoder = @import("pio/assembler/encoder.zig");
     
    @@ -29,6 +31,19 @@ pub const StateMachine = enum(u2) {
         sm1,
         sm2,
         sm3,
    +
    +    pub const Regs = extern struct {
    +        clkdiv: @TypeOf(PIO0.SM0_CLKDIV),
    +        execctrl: @TypeOf(PIO0.SM0_EXECCTRL),
    +        shiftctrl: @TypeOf(PIO0.SM0_SHIFTCTRL),
    +        addr: @TypeOf(PIO0.SM0_ADDR),
    +        instr: @TypeOf(PIO0.SM0_INSTR),
    +        pinctrl: @TypeOf(PIO0.SM0_PINCTRL),
    +    };
    +
    +    comptime {
    +        assert(@sizeOf([2]Regs) == (4 * 6 * 2));
    +    }
     };
     
     pub const Irq = enum {
    @@ -41,6 +56,10 @@ pub const Irq = enum {
             status: @TypeOf(PIO0.IRQ0_INTS),
         };
     
    +    comptime {
    +        assert(@sizeOf([2]Regs) == (3 * 4 * 2));
    +    }
    +
         pub const Source = enum {
             rx_not_empty,
             tx_not_full,
    @@ -50,18 +69,9 @@ pub const Irq = enum {
         };
     };
     
    -pub const StateMachineRegs = extern struct {
    -    clkdiv: @TypeOf(PIO0.SM0_CLKDIV),
    -    execctrl: @TypeOf(PIO0.SM0_EXECCTRL),
    -    shiftctrl: @TypeOf(PIO0.SM0_SHIFTCTRL),
    -    addr: @TypeOf(PIO0.SM0_ADDR),
    -    instr: @TypeOf(PIO0.SM0_INSTR),
    -    pinctrl: @TypeOf(PIO0.SM0_PINCTRL),
    -};
    -
     pub const ClkDivOptions = struct {
    -    int: u16,
    -    frac: u8,
    +    int: u16 = 1,
    +    frac: u8 = 0,
     
         pub fn from_float(div: f32) ClkDivOptions {
             const fixed = @floatToInt(u24, div * 256);
    @@ -73,18 +83,20 @@ pub const ClkDivOptions = struct {
     };
     
     pub const ExecOptions = struct {
    -    wrap: u5,
    -    wrap_target: u5,
    -    side_pindir: bool,
    -    side_set_optional: bool,
    +    wrap: u5 = 31,
    +    wrap_target: u5 = 0,
    +    side_pindir: bool = false,
    +    side_set_optional: bool = false,
     };
     
     pub const ShiftOptions = struct {
         autopush: bool = false,
         autopull: bool = false,
    -    in_shiftdir: Direction = .left,
    -    out_shiftdir: Direction = .left,
    +    in_shiftdir: Direction = .right,
    +    out_shiftdir: Direction = .right,
    +    /// 0 means full 32-bits
         push_threshold: u5 = 0,
    +    /// 0 means full 32-bits
         pull_threshold: u5 = 0,
         join_tx: bool = false,
         join_rx: bool = false,
    @@ -104,16 +116,16 @@ pub fn PinMapping(comptime Count: type) type {
     
     pub const PinMappingOptions = struct {
         out: PinMapping(u6) = .{},
    -    set: PinMapping(u3) = .{},
    +    set: PinMapping(u3) = .{ .count = 5 },
         side_set: PinMapping(u3) = .{},
         in_base: u5 = 0,
     };
     
     pub const StateMachineInitOptions = struct {
    -    clkdiv: ClkDivOptions,
    -    exec: ExecOptions,
    -    shift: ShiftOptions = .{},
    +    clkdiv: ClkDivOptions = .{},
         pin_mappings: PinMappingOptions = .{},
    +    exec: ExecOptions = .{},
    +    shift: ShiftOptions = .{},
     };
     
     pub const LoadAndStartProgramOptions = struct {
    @@ -126,6 +138,13 @@ pub const Pio = enum(u1) {
         pio0 = 0,
         pio1 = 1,
     
    +    pub fn reset(self: Pio) void {
    +        switch (self) {
    +            .pio0 => resets.reset(&.{.pio0}),
    +            .pio1 => resets.reset(&.{.pio1}),
    +        }
    +    }
    +
         fn get_regs(self: Pio) *volatile PIO {
             return switch (self) {
                 .pio0 => PIO0,
    @@ -138,8 +157,8 @@ pub const Pio = enum(u1) {
             return @ptrCast(*volatile [32]u32, ®s.INSTR_MEM0);
         }
     
    -    pub fn gpio_init(self: Pio, comptime pin: u5) void {
    -        gpio.set_function(pin, switch (self) {
    +    pub fn gpio_init(self: Pio, pin: gpio.Pin) void {
    +        pin.set_function(switch (self) {
                 .pio0 => .pio0,
                 .pio1 => .pio1,
             });
    @@ -207,25 +226,19 @@ pub const Pio = enum(u1) {
             } else error.NoSpace;
         }
     
    -    fn get_sm_regs(self: Pio, sm: StateMachine) *volatile StateMachineRegs {
    +    fn get_sm_regs(self: Pio, sm: StateMachine) *volatile StateMachine.Regs {
             const pio_regs = self.get_regs();
    -        return switch (sm) {
    -            .sm0 => @ptrCast(*volatile StateMachineRegs, &pio_regs.SM0_CLKDIV),
    -            .sm1 => @ptrCast(*volatile StateMachineRegs, &pio_regs.SM1_CLKDIV),
    -            .sm2 => @ptrCast(*volatile StateMachineRegs, &pio_regs.SM2_CLKDIV),
    -            .sm3 => @ptrCast(*volatile StateMachineRegs, &pio_regs.SM3_CLKDIV),
    -        };
    +        const sm_regs = @ptrCast(*volatile [4]StateMachine.Regs, &pio_regs.SM0_CLKDIV);
    +        return &sm_regs[@enumToInt(sm)];
         }
     
         fn get_irq_regs(self: Pio, irq: Irq) *volatile Irq.Regs {
             const pio_regs = self.get_regs();
    -        return switch (irq) {
    -            .irq0 => @ptrCast(*volatile Irq.Regs, &pio_regs.IRQ0_INTE),
    -            .irq1 => @ptrCast(*volatile Irq.Regs, &pio_regs.IRQ1_INTE),
    -        };
    +        const irq_regs = @ptrCast(*volatile [2]Irq.Regs, &pio_regs.IRQ0_INTE);
    +        return &irq_regs[@enumToInt(irq)];
         }
     
    -    pub inline fn sm_set_clkdiv(self: Pio, sm: StateMachine, options: ClkDivOptions) void {
    +    pub fn sm_set_clkdiv(self: Pio, sm: StateMachine, options: ClkDivOptions) void {
             if (options.int == 0 and options.frac != 0)
                 @panic("invalid params");
     
    @@ -238,7 +251,7 @@ pub const Pio = enum(u1) {
             });
         }
     
    -    pub inline fn sm_set_exec_options(self: Pio, sm: StateMachine, options: ExecOptions) void {
    +    pub fn sm_set_exec_options(self: Pio, sm: StateMachine, options: ExecOptions) void {
             const sm_regs = self.get_sm_regs(sm);
             sm_regs.execctrl.modify(.{
                 .WRAP_BOTTOM = options.wrap_target,
    @@ -257,11 +270,11 @@ pub const Pio = enum(u1) {
             });
         }
     
    -    pub inline fn sm_set_shift_options(self: Pio, sm: StateMachine, options: ShiftOptions) void {
    +    pub fn sm_set_shift_options(self: Pio, sm: StateMachine, options: ShiftOptions) void {
             const sm_regs = self.get_sm_regs(sm);
             sm_regs.shiftctrl.write(.{
                 .AUTOPUSH = @boolToInt(options.autopush),
    -            .AUTOPULL = @boolToInt(options.autopush),
    +            .AUTOPULL = @boolToInt(options.autopull),
     
                 .IN_SHIFTDIR = @enumToInt(options.in_shiftdir),
                 .OUT_SHIFTDIR = @enumToInt(options.out_shiftdir),
    @@ -276,7 +289,7 @@ pub const Pio = enum(u1) {
             });
         }
     
    -    pub inline fn sm_set_pin_mappings(self: Pio, sm: StateMachine, options: PinMappingOptions) void {
    +    pub fn sm_set_pin_mappings(self: Pio, sm: StateMachine, options: PinMappingOptions) void {
             const sm_regs = self.get_sm_regs(sm);
             sm_regs.pinctrl.modify(.{
                 .OUT_BASE = options.out.base,
    @@ -292,30 +305,32 @@ pub const Pio = enum(u1) {
             });
         }
     
    -    pub inline fn sm_is_tx_fifo_full(self: Pio, sm: StateMachine) bool {
    +    pub fn sm_is_tx_fifo_full(self: Pio, sm: StateMachine) bool {
             const regs = self.get_regs();
             const txfull = regs.FSTAT.read().TXFULL;
             return (txfull & (@as(u4, 1) << @enumToInt(sm))) != 0;
         }
     
    -    pub inline fn sm_get_tx_fifo(self: Pio, sm: StateMachine) *volatile u32 {
    +    pub fn sm_get_tx_fifo(self: Pio, sm: StateMachine) *volatile u32 {
             const regs = self.get_regs();
    -        return switch (sm) {
    -            .sm0 => ®s.TXF0,
    -            .sm1 => ®s.TXF1,
    -            .sm2 => ®s.TXF2,
    -            .sm3 => ®s.TXF3,
    -        };
    +        const fifos = @ptrCast(*volatile [4]u32, ®s.TXF0);
    +        return &fifos[@enumToInt(sm)];
         }
     
    -    pub inline fn sm_blocking_write(self: Pio, sm: StateMachine, value: u32) void {
    -        while (self.sm_is_tx_fifo_full(sm)) {}
    -
    +    /// this function writes to the TX FIFO without checking that it's
    +    /// writable, if it's not then the value is ignored
    +    pub fn sm_write(self: Pio, sm: StateMachine, value: u32) void {
             const fifo_ptr = self.sm_get_tx_fifo(sm);
             fifo_ptr.* = value;
         }
     
    -    pub inline fn sm_set_enabled(self: Pio, sm: StateMachine, enabled: bool) void {
    +    pub fn sm_blocking_write(self: Pio, sm: StateMachine, value: u32) void {
    +        while (self.sm_is_tx_fifo_full(sm)) {}
    +
    +        self.sm_write(sm, value);
    +    }
    +
    +    pub fn sm_set_enabled(self: Pio, sm: StateMachine, enabled: bool) void {
             const regs = self.get_regs();
     
             var value = regs.CTRL.read();
    @@ -327,7 +342,7 @@ pub const Pio = enum(u1) {
             regs.CTRL.write(value);
         }
     
    -    inline fn sm_clear_debug(self: Pio, sm: StateMachine) void {
    +    fn sm_clear_debug(self: Pio, sm: StateMachine) void {
             const regs = self.get_regs();
             const mask: u4 = (@as(u4, 1) << @enumToInt(sm));
     
    @@ -343,10 +358,22 @@ pub const Pio = enum(u1) {
         /// changing the state of fifos will clear them
         pub fn sm_clear_fifos(self: Pio, sm: StateMachine) void {
             const sm_regs = self.get_sm_regs(sm);
    -        var shiftctrl = sm_regs.shiftctrl.read();
    -        shiftctrl.FJOIN_TX ^= 1;
    -        shiftctrl.FJOIN_RX ^= 1;
    -        sm_regs.shiftctrl.write(shiftctrl);
    +        const xor_shiftctrl = hw.xor_alias(&sm_regs.shiftctrl);
    +        const mask = .{
    +            .FJOIN_TX = 1,
    +            .FJOIN_RX = 1,
    +
    +            .AUTOPUSH = 0,
    +            .AUTOPULL = 0,
    +            .IN_SHIFTDIR = 0,
    +            .OUT_SHIFTDIR = 0,
    +            .PUSH_THRESH = 0,
    +            .PULL_THRESH = 0,
    +            .reserved16 = 0,
    +        };
    +
    +        xor_shiftctrl.write(mask);
    +        xor_shiftctrl.write(mask);
         }
     
         pub fn sm_fifo_level(self: Pio, sm: StateMachine, fifo: Fifo) u4 {
    @@ -362,14 +389,14 @@ pub const Pio = enum(u1) {
             return @truncate(u4, levels >> (@as(u5, 4) * num) + offset);
         }
     
    -    inline fn interrupt_bit_pos(
    +    fn interrupt_bit_pos(
             sm: StateMachine,
             source: Irq.Source,
         ) u5 {
             return (@as(u5, 4) * @enumToInt(source)) + @enumToInt(sm);
         }
     
    -    pub inline fn sm_clear_interrupt(
    +    pub fn sm_clear_interrupt(
             self: Pio,
             sm: StateMachine,
             irq: Irq,
    @@ -378,11 +405,11 @@ pub const Pio = enum(u1) {
             // TODO: why does the raw interrupt register no have irq1/0?
             _ = irq;
             const regs = self.get_regs();
    -        regs.INTR.raw &= ~(@as(u32, 1) << interrupt_bit_pos(sm, source));
    +        regs.IRQ.raw |= @as(u32, 1) << interrupt_bit_pos(sm, source);
         }
     
         // TODO: be able to disable an interrupt
    -    pub inline fn sm_enable_interrupt(
    +    pub fn sm_enable_interrupt(
             self: Pio,
             sm: StateMachine,
             irq: Irq,
    @@ -392,7 +419,7 @@ pub const Pio = enum(u1) {
             irq_regs.enable.raw |= @as(u32, 1) << interrupt_bit_pos(sm, source);
         }
     
    -    pub inline fn sm_restart(self: Pio, sm: StateMachine) void {
    +    pub fn sm_restart(self: Pio, sm: StateMachine) void {
             const mask: u4 = (@as(u4, 1) << @enumToInt(sm));
             const regs = self.get_regs();
             regs.CTRL.modify(.{
    @@ -400,7 +427,7 @@ pub const Pio = enum(u1) {
             });
         }
     
    -    pub inline fn sm_clkdiv_restart(self: Pio, sm: StateMachine) void {
    +    pub fn sm_clkdiv_restart(self: Pio, sm: StateMachine) void {
             const mask: u4 = (@as(u4, 1) << @enumToInt(sm));
             const regs = self.get_regs();
             regs.CTRL.modify(.{
    @@ -416,12 +443,11 @@ pub const Pio = enum(u1) {
         ) void {
             // Halt the machine, set some sensible defaults
             self.sm_set_enabled(sm, false);
    -        self.sm_set_pin_mappings(sm, options.pin_mappings);
             self.sm_set_clkdiv(sm, options.clkdiv);
             self.sm_set_exec_options(sm, options.exec);
             self.sm_set_shift_options(sm, options.shift);
    +        self.sm_set_pin_mappings(sm, options.pin_mappings);
     
    -        //self.set_config(sm, config);
             self.sm_clear_fifos(sm);
             self.sm_clear_debug(sm);
     
    @@ -480,7 +506,7 @@ pub const Pio = enum(u1) {
                         offset,
     
                     .side_pindir = if (program.side_set) |side_set|
    -                    side_set.pindirs
    +                    side_set.pindir
                     else
                         false,
     
    diff --git a/src/hal/pio/assembler.zig b/src/hal/pio/assembler.zig
    index af4153add..3cde6ee80 100644
    --- a/src/hal/pio/assembler.zig
    +++ b/src/hal/pio/assembler.zig
    @@ -121,12 +121,12 @@ fn format_compile_error(comptime message: []const u8, comptime source: []const u
         });
     }
     
    -pub fn assemble(comptime source: []const u8, comptime options: AssembleOptions) !Output {
    +pub fn assemble(comptime source: []const u8, comptime options: AssembleOptions) Output {
         var diags: ?Diagnostics = null;
         return assemble_impl(source, &diags, options) catch |err| if (diags) |d|
             @compileError(format_compile_error(d.message.slice(), source, d.index))
         else
    -        err;
    +        @compileError(err);
     }
     
     test "tokenizer and encoder" {
    diff --git a/src/hal/pio/assembler/encoder.zig b/src/hal/pio/assembler/encoder.zig
    index a5625751b..e0bc74c9a 100644
    --- a/src/hal/pio/assembler/encoder.zig
    +++ b/src/hal/pio/assembler/encoder.zig
    @@ -27,7 +27,7 @@ pub fn encode(
     pub const SideSet = struct {
         count: u3,
         optional: bool,
    -    pindirs: bool,
    +    pindir: bool,
     };
     
     pub const Define = struct {
    @@ -76,15 +76,20 @@ pub fn Encoder(comptime options: Options) type {
                 wrap: ?u5,
     
                 pub fn to_exported_program(comptime bounded: BoundedProgram) assembler.Program {
    +                comptime var program_name: [bounded.name.len]u8 = undefined;
    +                std.mem.copy(u8, &program_name, bounded.name);
                     return assembler.Program{
    -                    .name = bounded.name,
    +                    .name = &program_name,
                         .defines = blk: {
                             var tmp = std.BoundedArray(assembler.Define, options.max_defines).init(0) catch unreachable;
    -                        for (bounded.defines.slice()) |define|
    +                        for (bounded.defines.slice()) |define| {
    +                            comptime var define_name: [define.name.len]u8 = undefined;
    +                            std.mem.copy(u8, &define_name, define.name);
                                 tmp.append(.{
    -                                .name = define.name,
    +                                .name = &define_name,
                                     .value = @intCast(i64, define.value),
                                 }) catch unreachable;
    +                        }
     
                             break :blk tmp.slice();
                         },
    @@ -281,7 +286,7 @@ pub fn Encoder(comptime options: Options) type {
                             program.side_set = .{
                                 .count = try self.evaluate(u3, program.*, side_set.count, token.index, diags),
                                 .optional = side_set.opt,
    -                            .pindirs = side_set.pindirs,
    +                            .pindir = side_set.pindir,
                             };
                             self.consume(1);
                         },
    @@ -823,7 +828,7 @@ test "encode.side_set.pindirs" {
     
         const program = output.programs.get(0);
         try expectEqual(@as(?u5, 1), program.side_set.?.count);
    -    try expect(program.side_set.?.pindirs);
    +    try expect(program.side_set.?.pindir);
     }
     
     test "encode.label" {
    diff --git a/src/hal/pio/assembler/tokenizer.zig b/src/hal/pio/assembler/tokenizer.zig
    index 62e4c0e1f..29c596d2e 100644
    --- a/src/hal/pio/assembler/tokenizer.zig
    +++ b/src/hal/pio/assembler/tokenizer.zig
    @@ -439,7 +439,7 @@ pub const Tokenizer = struct {
                     .side_set = .{
                         .count = count,
                         .opt = opt,
    -                    .pindirs = pindirs,
    +                    .pindir = pindirs,
                     },
                 },
             };
    @@ -1129,7 +1129,7 @@ pub const Token = struct {
         pub const SideSet = struct {
             count: Value,
             opt: bool = false,
    -        pindirs: bool = false,
    +        pindir: bool = false,
         };
     
         pub const LangOpt = struct {
    @@ -1191,7 +1191,7 @@ fn expect_side_set(expected: Token.SideSet, actual: Token) !void {
         const side_set = actual.data.side_set;
         try expect_value(expected.count, side_set.count);
         try expectEqual(expected.opt, side_set.opt);
    -    try expectEqual(expected.pindirs, side_set.pindirs);
    +    try expectEqual(expected.pindir, side_set.pindir);
     }
     
     fn expect_wrap_target(actual: Token) !void {
    @@ -1538,7 +1538,7 @@ test "tokenize.directive.side_set.opt" {
     
     test "tokenize.directive.side_set.pindirs" {
         const tokens = try bounded_tokenize(".side_set 1 pindirs");
    -    try expect_side_set(.{ .count = .{ .integer = 1 }, .pindirs = true }, tokens.get(0));
    +    try expect_side_set(.{ .count = .{ .integer = 1 }, .pindir = true }, tokens.get(0));
     }
     
     test "tokenize.directive.wrap_target" {
    diff --git a/src/hal/pll.zig b/src/hal/pll.zig
    index 62fd9ecd7..37570497b 100644
    --- a/src/hal/pll.zig
    +++ b/src/hal/pll.zig
    @@ -19,7 +19,7 @@ pub const Configuration = struct {
         }
     };
     
    -pub const PLL = enum {
    +pub const PLL = enum(u1) {
         sys,
         usb,
     
    diff --git a/src/hal/resets.zig b/src/hal/resets.zig
    index 218e6b427..f25d55027 100644
    --- a/src/hal/resets.zig
    +++ b/src/hal/resets.zig
    @@ -3,42 +3,39 @@ const EnumField = std.builtin.Type.EnumField;
     
     const microzig = @import("microzig");
     const RESETS = microzig.chip.peripherals.RESETS;
    -const Mask = @TypeOf(RESETS.RESET).underlying_type;
    -
    -pub const Module = enum {
    -    adc,
    -    busctrl,
    -    dma,
    -    i2c0,
    -    i2c1,
    -    io_bank0,
    -    io_qspi,
    -    jtag,
    -    pads_bank0,
    -    pads_qspi,
    -    pio0,
    -    pio1,
    -    pll_sys,
    -    pll_usb,
    -    pwm,
    -    rtc,
    -    spi0,
    -    spi1,
    -    syscfg,
    -    sysinfo,
    -    tbman,
    -    timer,
    -    uart0,
    -    uart1,
    -    usbctrl,
    -};
     
    -pub inline fn reset(comptime modules: []const Module) void {
    -    comptime var mask = std.mem.zeroes(Mask);
    +const hw = @import("hw.zig");
     
    -    inline for (modules) |module|
    -        @field(mask, @tagName(module)) = 1;
    +pub const Mask = packed struct(u32) {
    +    adc: bool = false,
    +    busctrl: bool = false,
    +    dma: bool = false,
    +    i2c0: bool = false,
    +    i2c1: bool = false,
    +    io_bank0: bool = false,
    +    io_qspi: bool = false,
    +    jtag: bool = false,
    +    pads_bank0: bool = false,
    +    pads_qspi: bool = false,
    +    pio0: bool = false,
    +    pio1: bool = false,
    +    pll_sys: bool = false,
    +    pll_usb: bool = false,
    +    pwm: bool = false,
    +    rtc: bool = false,
    +    spi0: bool = false,
    +    spi1: bool = false,
    +    syscfg: bool = false,
    +    sysinfo: bool = false,
    +    tbman: bool = false,
    +    timer: bool = false,
    +    uart0: bool = false,
    +    uart1: bool = false,
    +    usbctrl: bool = false,
    +    padding: u7 = 0,
    +};
     
    +pub fn reset(mask: Mask) void {
         const raw_mask = @bitCast(u32, mask);
     
         RESETS.RESET.raw = raw_mask;
    @@ -46,3 +43,90 @@ pub inline fn reset(comptime modules: []const Module) void {
     
         while ((RESETS.RESET_DONE.raw & raw_mask) != raw_mask) {}
     }
    +
    +pub fn reset_block(mask: Mask) void {
    +    hw.set_alias_raw(&RESETS.RESET).* = @bitCast(u32, mask);
    +}
    +
    +pub fn unreset_block(mask: Mask) void {
    +    hw.clear_alias_raw(&RESETS.RESET).* = @bitCast(u32, mask);
    +}
    +
    +pub fn unreset_block_wait(mask: Mask) void {
    +    const raw_mask = @bitCast(u32, mask);
    +    hw.clear_alias_raw(&RESETS.RESET).* = raw_mask;
    +    while (RESETS.RESET_DONE.raw & raw_mask != raw_mask) {}
    +}
    +
    +pub const masks = struct {
    +    pub const init = Mask{
    +        .adc = true,
    +        .busctrl = true,
    +        .dma = true,
    +        .i2c0 = true,
    +        .i2c1 = true,
    +        .io_bank0 = true,
    +        .jtag = true,
    +        .pads_bank0 = true,
    +        .pio0 = true,
    +        .pio1 = true,
    +        .pwm = true,
    +        .rtc = true,
    +        .spi0 = true,
    +        .spi1 = true,
    +        .sysinfo = true,
    +        .tbman = true,
    +        .timer = true,
    +        .uart0 = true,
    +        .uart1 = true,
    +    };
    +
    +    pub const all = Mask{
    +        .adc = true,
    +        .busctrl = true,
    +        .dma = true,
    +        .i2c0 = true,
    +        .i2c1 = true,
    +        .io_bank0 = true,
    +        .io_qspi = true,
    +        .jtag = true,
    +        .pads_bank0 = true,
    +        .pads_qspi = true,
    +        .pio0 = true,
    +        .pio1 = true,
    +        .pll_sys = true,
    +        .pll_usb = true,
    +        .pwm = true,
    +        .rtc = true,
    +        .spi0 = true,
    +        .spi1 = true,
    +        .syscfg = true,
    +        .sysinfo = true,
    +        .tbman = true,
    +        .timer = true,
    +        .uart0 = true,
    +        .uart1 = true,
    +        .usbctrl = true,
    +    };
    +
    +    pub const clocked_by_sys_and_ref = Mask{
    +        .busctrl = true,
    +        .dma = true,
    +        .i2c0 = true,
    +        .i2c1 = true,
    +        .io_bank0 = true,
    +        .io_qspi = true,
    +        .jtag = true,
    +        .pads_bank0 = true,
    +        .pads_qspi = true,
    +        .pio0 = true,
    +        .pio1 = true,
    +        .pll_sys = true,
    +        .pll_usb = true,
    +        .pwm = true,
    +        .syscfg = true,
    +        .sysinfo = true,
    +        .tbman = true,
    +        .timer = true,
    +    };
    +};
    diff --git a/src/hal/spi.zig b/src/hal/spi.zig
    index 002ccc4d7..717060002 100644
    --- a/src/hal/spi.zig
    +++ b/src/hal/spi.zig
    @@ -14,40 +14,28 @@ const SpiRegs = microzig.chip.types.peripherals.SPI0;
     
     pub const Config = struct {
         clock_config: clocks.GlobalConfiguration,
    -    tx_pin: ?u32 = 19,
    -    rx_pin: ?u32 = 16,
    -    sck_pin: ?u32 = 18,
    -    csn_pin: ?u32 = 17,
    +    tx_pin: ?gpio.Pin = gpio.num(19),
    +    rx_pin: ?gpio.Pin = gpio.num(16),
    +    sck_pin: ?gpio.Pin = gpio.num(18),
    +    csn_pin: ?gpio.Pin = gpio.num(17),
         baud_rate: u32 = 1000 * 1000,
     };
     
    -pub const SPI = enum {
    -    spi0,
    -    spi1,
    +pub fn num(n: u1) SPI {
    +    return @intToEnum(SPI, n);
    +}
    +
    +pub const SPI = enum(u1) {
    +    _,
     
         fn get_regs(spi: SPI) *volatile SpiRegs {
    -        return switch (spi) {
    -            .spi0 => SPI0,
    -            .spi1 => SPI1,
    +        return switch (@enumToInt(spi)) {
    +            0 => SPI0,
    +            1 => SPI1,
             };
         }
     
    -    pub fn reset(spi: SPI) void {
    -        switch (spi) {
    -            .spi0 => resets.reset(&.{.spi0}),
    -            .spi1 => resets.reset(&.{.spi1}),
    -        }
    -    }
    -
    -    pub fn init(comptime id: u32, comptime config: Config) SPI {
    -        const spi: SPI = switch (id) {
    -            0 => .spi0,
    -            1 => .spi1,
    -            else => @compileError("there is only spi0 and spi1"),
    -        };
    -
    -        spi.reset();
    -
    +    pub fn apply(spi: SPI, comptime config: Config) void {
             const peri_freq = config.clock_config.peri.?.output_freq;
             _ = spi.set_baudrate(config.baud_rate, peri_freq);
     
    @@ -71,12 +59,10 @@ pub const SPI = enum {
                 .SSE = 1,
             });
     
    -        if (config.tx_pin) |pin| gpio.set_function(pin, .spi);
    -        if (config.rx_pin) |pin| gpio.set_function(pin, .spi);
    -        if (config.sck_pin) |pin| gpio.set_function(pin, .spi);
    -        if (config.csn_pin) |pin| gpio.set_function(pin, .spi);
    -
    -        return spi;
    +        if (config.tx_pin) |pin| pin.set_function(.spi);
    +        if (config.rx_pin) |pin| pin.set_function(.spi);
    +        if (config.sck_pin) |pin| pin.set_function(.spi);
    +        if (config.csn_pin) |pin| pin.set_function(.spi);
         }
     
         pub inline fn is_writable(spi: SPI) bool {
    diff --git a/src/hal/uart.zig b/src/hal/uart.zig
    index f4c72c5a6..6a08b852d 100644
    --- a/src/hal/uart.zig
    +++ b/src/hal/uart.zig
    @@ -8,6 +8,7 @@ const gpio = @import("gpio.zig");
     const clocks = @import("clocks.zig");
     const resets = @import("resets.zig");
     const time = @import("time.zig");
    +const dma = @import("dma.zig");
     
     const assert = std.debug.assert;
     
    @@ -33,17 +34,20 @@ pub const Parity = enum {
     
     pub const Config = struct {
         clock_config: clocks.GlobalConfiguration,
    -    tx_pin: ?u32 = null,
    -    rx_pin: ?u32 = null,
    +    tx_pin: ?gpio.Pin = null,
    +    rx_pin: ?gpio.Pin = null,
         baud_rate: u32,
         word_bits: WordBits = .eight,
         stop_bits: StopBits = .one,
         parity: Parity = .none,
     };
     
    -pub const UART = enum {
    -    uart0,
    -    uart1,
    +pub fn num(n: u1) UART {
    +    return @intToEnum(UART, n);
    +}
    +
    +pub const UART = enum(u1) {
    +    _,
     
         const WriteError = error{};
         const ReadError = error{};
    @@ -59,23 +63,15 @@ pub const UART = enum {
         }
     
         fn get_regs(uart: UART) *volatile UartRegs {
    -        return switch (uart) {
    -            .uart0 => UART0,
    -            .uart1 => UART1,
    +        return switch (@enumToInt(uart)) {
    +            0 => UART0,
    +            1 => UART1,
             };
         }
     
    -    pub fn init(comptime id: u32, comptime config: Config) UART {
    -        const uart: UART = switch (id) {
    -            0 => .uart0,
    -            1 => .uart1,
    -            else => @compileError("there is only uart0 and uart1"),
    -        };
    -
    +    pub fn apply(uart: UART, comptime config: Config) void {
             assert(config.baud_rate > 0);
     
    -        uart.reset();
    -
             const uart_regs = uart.get_regs();
             const peri_freq = config.clock_config.peri.?.output_freq;
             uart.set_baudrate(config.baud_rate, peri_freq);
    @@ -96,10 +92,8 @@ pub const UART = enum {
             });
     
             // TODO comptime assertions
    -        if (config.tx_pin) |tx_pin| gpio.set_function(tx_pin, .uart);
    -        if (config.rx_pin) |rx_pin| gpio.set_function(rx_pin, .uart);
    -
    -        return uart;
    +        if (config.tx_pin) |tx_pin| tx_pin.set_function(.uart);
    +        if (config.rx_pin) |rx_pin| rx_pin.set_function(.uart);
         }
     
         pub fn is_readable(uart: UART) bool {
    @@ -122,6 +116,18 @@ pub const UART = enum {
             return payload.len;
         }
     
    +    pub fn tx_fifo(uart: UART) *volatile u32 {
    +        const regs = uart.get_regs();
    +        return @ptrCast(*volatile u32, ®s.UARTDR);
    +    }
    +
    +    pub fn dreq_tx(uart: UART) dma.Dreq {
    +        return switch (@enumToInt(uart)) {
    +            0 => .uart0_tx,
    +            1 => .uart1_tx,
    +        };
    +    }
    +
         pub fn read(uart: UART, buffer: []u8) ReadError!usize {
             const uart_regs = uart.get_regs();
             for (buffer) |*byte| {
    @@ -141,13 +147,6 @@ pub const UART = enum {
             return uart_regs.UARTDR.read().DATA;
         }
     
    -    pub fn reset(uart: UART) void {
    -        switch (uart) {
    -            .uart0 => resets.reset(&.{.uart0}),
    -            .uart1 => resets.reset(&.{.uart1}),
    -        }
    -    }
    -
         pub fn set_format(
             uart: UART,
             word_bits: WordBits,
    diff --git a/src/hal/usb.zig b/src/hal/usb.zig
    index 48538a48a..e2147f536 100644
    --- a/src/hal/usb.zig
    +++ b/src/hal/usb.zig
    @@ -130,7 +130,7 @@ pub const F = struct {
             // clock.
             //
             // PLL_USB out of reset
    -        resets.reset(&.{.pll_usb});
    +        resets.reset(.{ .pll_usb = true });
             // Configure it:
             //
             // RFDIV = 1
    @@ -154,7 +154,7 @@ pub const F = struct {
     
         pub fn usb_init_device(device_config: *usb.DeviceConfiguration) void {
             // Bring USB out of reset
    -        resets.reset(&.{.usbctrl});
    +        resets.reset(.{ .usbctrl = true });
     
             // Clear the control portion of DPRAM. This may not be necessary -- the
             // datasheet is ambiguous -- but the C examples do it, and so do we.
    
    From b4c58dbb04408398f563a4531a35fbf74d9b73e1 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 3 May 2023 21:40:05 -0700
    Subject: [PATCH 149/286] update microzig (#18)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index b5edf6da6..4e62e99e3 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit b5edf6da6b540215f03689c3cc07d00478255f7d
    +Subproject commit 4e62e99e3cf8ad2b8805bc6138c53995bd9745be
    
    From c47778854f6e4f63facf40ada1b0aa0e1665767d Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 3 May 2023 21:40:13 -0700
    Subject: [PATCH 150/286] update microzig (#19)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index b5edf6da6..4e62e99e3 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit b5edf6da6b540215f03689c3cc07d00478255f7d
    +Subproject commit 4e62e99e3cf8ad2b8805bc6138c53995bd9745be
    
    From b27a29460373971571052838457cbec46ee2b5d3 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 3 May 2023 21:40:19 -0700
    Subject: [PATCH 151/286] update microzig (#19)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index b5edf6da6..4e62e99e3 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit b5edf6da6b540215f03689c3cc07d00478255f7d
    +Subproject commit 4e62e99e3cf8ad2b8805bc6138c53995bd9745be
    
    From f343617ca44ff2e750de273497663798b8a4afaa Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 3 May 2023 21:40:42 -0700
    Subject: [PATCH 152/286] update microzig (#52)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index b5edf6da6..4e62e99e3 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit b5edf6da6b540215f03689c3cc07d00478255f7d
    +Subproject commit 4e62e99e3cf8ad2b8805bc6138c53995bd9745be
    
    From ddc3bb1608eef6d0be77e6d14cd62b483d05be1e Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 3 May 2023 21:40:48 -0700
    Subject: [PATCH 153/286] update microzig (#19)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index b5edf6da6..4e62e99e3 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit b5edf6da6b540215f03689c3cc07d00478255f7d
    +Subproject commit 4e62e99e3cf8ad2b8805bc6138c53995bd9745be
    
    From aeadb4155451910e93b40b7d07bf9be7029c908a Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 3 May 2023 21:40:56 -0700
    Subject: [PATCH 154/286] update microzig (#18)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index b5edf6da6..4e62e99e3 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit b5edf6da6b540215f03689c3cc07d00478255f7d
    +Subproject commit 4e62e99e3cf8ad2b8805bc6138c53995bd9745be
    
    From 5f9de91f22a0b1f9bec9bef7ed994c7c67104c57 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Wed, 3 May 2023 21:41:03 -0700
    Subject: [PATCH 155/286] update microzig (#18)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index b5edf6da6..4e62e99e3 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit b5edf6da6b540215f03689c3cc07d00478255f7d
    +Subproject commit 4e62e99e3cf8ad2b8805bc6138c53995bd9745be
    
    From c74f6f06348773594e6311cdff0411298cfce578 Mon Sep 17 00:00:00 2001
    From: joelpaulkoch <64319336+joelpaulkoch@users.noreply.github.com>
    Date: Mon, 15 May 2023 04:48:21 +0200
    Subject: [PATCH 156/286] Fix: call renamed is_uart functions (#55)
    
    ---
     src/hal/pins.zig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/src/hal/pins.zig b/src/hal/pins.zig
    index a882df50f..1746409cc 100644
    --- a/src/hal/pins.zig
    +++ b/src/hal/pins.zig
    @@ -500,7 +500,7 @@ pub const GlobalConfiguration = struct {
                         pin.set_function(.pwm);
                     } else if (comptime func.is_adc()) {
                         pin.set_function(.null);
    -                } else if (comptime func.isUartTx() or func.isUartRx()) {
    +                } else if (comptime func.is_uart_tx() or func.is_uart_rx()) {
                         pin.set_function(.uart);
                     } else {
                         @compileError(std.fmt.comptimePrint("Unimplemented pin function. Please implement setting pin function {s} for GPIO {}", .{
    
    From 72f7689700141e99a1af77202e1aa22cd46f5418 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Mon, 15 May 2023 21:47:29 -0700
    Subject: [PATCH 157/286] update microzig (#19)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 4e62e99e3..958894191 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 4e62e99e3cf8ad2b8805bc6138c53995bd9745be
    +Subproject commit 95889419155b7ffb1b11055549540096eaa2a6c5
    
    From d90b4f6caf3739e5964b8d0005032dd7444c9ab8 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Mon, 15 May 2023 21:47:36 -0700
    Subject: [PATCH 158/286] update microzig (#20)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 4e62e99e3..958894191 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 4e62e99e3cf8ad2b8805bc6138c53995bd9745be
    +Subproject commit 95889419155b7ffb1b11055549540096eaa2a6c5
    
    From 81142fdfc0acc47a801866e99d14df15a0440f19 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Mon, 15 May 2023 21:47:43 -0700
    Subject: [PATCH 159/286] update microzig (#56)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 4e62e99e3..958894191 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 4e62e99e3cf8ad2b8805bc6138c53995bd9745be
    +Subproject commit 95889419155b7ffb1b11055549540096eaa2a6c5
    
    From a6fe2574628f265a9f943d1d3ea7049f27119d04 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Mon, 15 May 2023 21:47:52 -0700
    Subject: [PATCH 160/286] update microzig (#20)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 4e62e99e3..958894191 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 4e62e99e3cf8ad2b8805bc6138c53995bd9745be
    +Subproject commit 95889419155b7ffb1b11055549540096eaa2a6c5
    
    From 5c65e8ed193491a17100f926760afd01035250e0 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Mon, 15 May 2023 21:48:08 -0700
    Subject: [PATCH 161/286] update microzig (#19)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 4e62e99e3..958894191 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 4e62e99e3cf8ad2b8805bc6138c53995bd9745be
    +Subproject commit 95889419155b7ffb1b11055549540096eaa2a6c5
    
    From fd4cc4f07c889afc7e401d1dd7530b41838aa9e1 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Mon, 15 May 2023 21:48:16 -0700
    Subject: [PATCH 162/286] update microzig (#20)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 4e62e99e3..958894191 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 4e62e99e3cf8ad2b8805bc6138c53995bd9745be
    +Subproject commit 95889419155b7ffb1b11055549540096eaa2a6c5
    
    From 83443705dfe789b4996342f0af7e4e01bb9d1f73 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Mon, 15 May 2023 21:48:23 -0700
    Subject: [PATCH 163/286] update microzig (#19)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 4e62e99e3..958894191 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 4e62e99e3cf8ad2b8805bc6138c53995bd9745be
    +Subproject commit 95889419155b7ffb1b11055549540096eaa2a6c5
    
    From ed12908afc6c54973b4d7fe8d0725c1e0eba57a2 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Mon, 15 May 2023 22:37:10 -0700
    Subject: [PATCH 164/286] turn on PIO comparison tests (#58)
    
    ---
     src/hal/pio/assembler.zig                  | 2 +-
     src/hal/pio/assembler/comparison_tests.zig | 2 +-
     2 files changed, 2 insertions(+), 2 deletions(-)
    
    diff --git a/src/hal/pio/assembler.zig b/src/hal/pio/assembler.zig
    index 3cde6ee80..1c38816ff 100644
    --- a/src/hal/pio/assembler.zig
    +++ b/src/hal/pio/assembler.zig
    @@ -136,5 +136,5 @@ test "tokenizer and encoder" {
     }
     
     test "comparison" {
    -    //std.testing.refAllDecls(@import("assembler/comparison_tests.zig"));
    +    std.testing.refAllDecls(@import("assembler/comparison_tests.zig"));
     }
    diff --git a/src/hal/pio/assembler/comparison_tests.zig b/src/hal/pio/assembler/comparison_tests.zig
    index 4a3946575..5a98c9385 100644
    --- a/src/hal/pio/assembler/comparison_tests.zig
    +++ b/src/hal/pio/assembler/comparison_tests.zig
    @@ -31,7 +31,7 @@ const c = @cImport({
     });
     
     fn pio_comparison(comptime source: []const u8) !void {
    -    const output = comptime assembler.assemble(source, .{}) catch unreachable;
    +    const output = comptime assembler.assemble(source, .{});
         try std.testing.expect(output.programs.len > 0);
     
         inline for (output.programs) |program| {
    
    From d05e8779b8d3d722540cb21af0a81a3826d46efb Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Mon, 15 May 2023 22:37:20 -0700
    Subject: [PATCH 165/286] workaround for compiler bug where volatile is not
     propagated over a field access (#57)
    
    ---
     src/hal/resets.zig | 11 ++++++++---
     1 file changed, 8 insertions(+), 3 deletions(-)
    
    diff --git a/src/hal/resets.zig b/src/hal/resets.zig
    index f25d55027..a35ad79e9 100644
    --- a/src/hal/resets.zig
    +++ b/src/hal/resets.zig
    @@ -44,18 +44,23 @@ pub fn reset(mask: Mask) void {
         while ((RESETS.RESET_DONE.raw & raw_mask) != raw_mask) {}
     }
     
    -pub fn reset_block(mask: Mask) void {
    +pub inline fn reset_block(mask: Mask) void {
         hw.set_alias_raw(&RESETS.RESET).* = @bitCast(u32, mask);
     }
     
    -pub fn unreset_block(mask: Mask) void {
    +pub inline fn unreset_block(mask: Mask) void {
         hw.clear_alias_raw(&RESETS.RESET).* = @bitCast(u32, mask);
     }
     
     pub fn unreset_block_wait(mask: Mask) void {
         const raw_mask = @bitCast(u32, mask);
         hw.clear_alias_raw(&RESETS.RESET).* = raw_mask;
    -    while (RESETS.RESET_DONE.raw & raw_mask != raw_mask) {}
    +
    +    // have to bitcast after a read() instead of `RESETS.RESET_DONE.raw` due to
    +    // some optimization bug. While loops will not be optimzed away if the
    +    // condition has side effects like dereferencing a volatile pointer.
    +    // It seems that volatile is not propagating correctly.
    +    while (@bitCast(u32, RESETS.RESET_DONE.read()) & raw_mask != raw_mask) {}
     }
     
     pub const masks = struct {
    
    From a2ccaff13fb971524bb9d4f54ec204413d6f2956 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Mon, 15 May 2023 22:50:34 -0700
    Subject: [PATCH 166/286] improve GPIO API (#59)
    
    ---
     src/hal/adc.zig    |  5 ++-
     src/hal/clocks.zig |  1 -
     src/hal/gpio.zig   | 79 ++++++++++++++++++++++++++--------------------
     src/hal/hw.zig     | 16 ++++++----
     src/hal/pins.zig   |  2 +-
     src/hal/spi.zig    |  6 ++--
     src/hal/util.zig   | 18 -----------
     7 files changed, 60 insertions(+), 67 deletions(-)
     delete mode 100644 src/hal/util.zig
    
    diff --git a/src/hal/adc.zig b/src/hal/adc.zig
    index 2f6b96b4a..a77b10223 100644
    --- a/src/hal/adc.zig
    +++ b/src/hal/adc.zig
    @@ -5,9 +5,8 @@ const assert = std.debug.assert;
     
     const microzig = @import("microzig");
     const ADC = microzig.chip.peripherals.ADC;
    -const rp2040 = microzig.hal;
    -const gpio = rp2040.gpio;
    -const resets = rp2040.resets;
    +const gpio = @import("gpio.zig");
    +const resets = @import("resets.zig");
     
     pub const temperature_sensor = struct {
         pub inline fn init() void {
    diff --git a/src/hal/clocks.zig b/src/hal/clocks.zig
    index 4a4980964..b13ebd3d8 100644
    --- a/src/hal/clocks.zig
    +++ b/src/hal/clocks.zig
    @@ -1,7 +1,6 @@
     const std = @import("std");
     
     const pll = @import("pll.zig");
    -const util = @import("util.zig");
     const assert = std.debug.assert;
     
     // TODO: remove
    diff --git a/src/hal/gpio.zig b/src/hal/gpio.zig
    index 02f421e48..53d3b0bae 100644
    --- a/src/hal/gpio.zig
    +++ b/src/hal/gpio.zig
    @@ -63,7 +63,7 @@ pub const Enabled = enum {
         enabled,
     };
     
    -pub const PullUpDown = enum {
    +pub const Pull = enum {
         up,
         down,
     };
    @@ -76,12 +76,45 @@ pub fn num(n: u5) Pin {
     }
     
     pub fn mask(m: u32) Mask {
    -    _ = m;
    -    @panic("TODO");
    +    return @intToEnum(Mask, m);
     }
     
     pub const Mask = enum(u30) {
         _,
    +
    +    pub fn set_function(self: Mask, function: Function) void {
    +        const raw_mask = @enumToInt(self);
    +        for (0..@bitSizeOf(Mask)) |i| {
    +            const bit = @intCast(u5, i);
    +            if (0 != raw_mask & (@as(u32, 1) << bit))
    +                num(bit).set_function(function);
    +        }
    +    }
    +
    +    pub fn set_direction(self: Mask, direction: Direction) void {
    +        const raw_mask = @enumToInt(self);
    +        switch (direction) {
    +            .out => SIO.GPIO_OE_SET.raw = raw_mask,
    +            .in => SIO.GPIO_OE_CLR.raw = raw_mask,
    +        }
    +    }
    +
    +    pub fn set_pull(self: Mask, pull: ?Pull) void {
    +        const raw_mask = @enumToInt(self);
    +        for (0..@bitSizeOf(Mask)) |i| {
    +            const bit = @intCast(u5, i);
    +            if (0 != raw_mask & (@as(u32, 1) << bit))
    +                num(bit).set_pull(pull);
    +        }
    +    }
    +
    +    pub fn put(self: Mask, value: u32) void {
    +        SIO.GPIO_OUT_XOR.raw = (SIO.GPIO_OUT.raw ^ value) & @enumToInt(self);
    +    }
    +
    +    pub fn read(self: Mask) u32 {
    +        return SIO.GPIO_IN.raw & @enumToInt(self);
    +    }
     };
     
     pub const Pin = enum(u5) {
    @@ -134,12 +167,12 @@ pub const Pin = enum(u5) {
             return @as(u32, 1) << @enumToInt(gpio);
         }
     
    -    pub inline fn set_pull(gpio: Pin, mode: ?PullUpDown) void {
    +    pub inline fn set_pull(gpio: Pin, pull: ?Pull) void {
             const pads_reg = gpio.get_pads_reg();
     
    -        if (mode == null) {
    +        if (pull == null) {
                 pads_reg.modify(.{ .PUE = 0, .PDE = 0 });
    -        } else switch (mode.?) {
    +        } else switch (pull.?) {
                 .up => pads_reg.modify(.{ .PUE = 1, .PDE = 0 }),
                 .down => pads_reg.modify(.{ .PUE = 0, .PDE = 1 }),
             }
    @@ -171,6 +204,11 @@ pub const Pin = enum(u5) {
                 0;
         }
     
    +    pub inline fn set_input_enabled(pin: Pin, enabled: bool) void {
    +        const pads_reg = pin.get_pads_reg();
    +        pads_reg.modify(.{ .IE = @boolToInt(enabled) });
    +    }
    +
         pub inline fn set_function(gpio: Pin, function: Function) void {
             const pads_reg = gpio.get_pads_reg();
             pads_reg.modify(.{
    @@ -193,33 +231,4 @@ pub const Pin = enum(u5) {
                 .padding = 0,
             });
         }
    -
    -    //pub fn set_drive_strength(gpio: Gpio, drive: DriveStrength) void {
    -    //    _ = drive;
    -    //    const pads_reg = gpio.get_pads_reg();
    -    //    pads_reg.modify(.{
    -    //        .DRIVE = .{
    -    //            .value = .@"12mA",
    -    //        },
    -    //    });
    -    //}
     };
    -
    -// setting both uplls enables a "bus keep" function, a weak pull to whatever
    -// is current high/low state of GPIO
    -//pub fn setPulls(gpio: u32, up: bool, down: bool) void {}
    -//
    -//pub fn pullUp(gpio: u32) void {}
    -//
    -//pub fn pullDown(gpio: u32) void {}
    -//pub fn disablePulls(gpio: u32) void {}
    -//pub fn setIrqOver(gpio: u32, value: u32) void {}
    -//pub fn setOutOver(gpio: u32, value: u32) void {}
    -//pub fn setInOver(gpio: u32, value: u32) void {}
    -//pub fn setOeOver(gpio: u32, value: u32) void {}
    -//pub fn setInputEnabled(gpio: u32, enabled: Enabled) void {}
    -//pub fn setinputHysteresisEnabled(gpio: u32, enabled: Enabled) void {}
    -//pub fn setSlewRate(gpio: u32, slew_rate: SlewRate) void {}
    -
    -//pub fn setIrqEnabled(gpio: u32, events: IrqEvents) void {}
    -//pub fn acknowledgeIrq(gpio: u32, events: IrqEvents) void {}
    diff --git a/src/hal/hw.zig b/src/hal/hw.zig
    index 1017c8a6e..89aee4549 100644
    --- a/src/hal/hw.zig
    +++ b/src/hal/hw.zig
    @@ -19,16 +19,16 @@ const xor_bits = @as(u32, 0x1) << 12;
     const set_bits = @as(u32, 0x2) << 12;
     const clear_bits = @as(u32, 0x3) << 12;
     
    -pub fn clear_alias_raw(ptr: anytype) *u32 {
    -    return @intToPtr(*u32, @ptrToInt(ptr) | clear_bits);
    +pub fn clear_alias_raw(ptr: anytype) *volatile u32 {
    +    return @intToPtr(*volatile u32, @ptrToInt(ptr) | clear_bits);
     }
     
    -pub fn set_alias_raw(ptr: anytype) *u32 {
    -    return @intToPtr(*u32, @ptrToInt(ptr) | set_bits);
    +pub fn set_alias_raw(ptr: anytype) *volatile u32 {
    +    return @intToPtr(*volatile u32, @ptrToInt(ptr) | set_bits);
     }
     
    -pub fn xor_alias_raw(ptr: anytype) *u32 {
    -    return @intToPtr(*u32, @ptrToInt(ptr) | xor_bits);
    +pub fn xor_alias_raw(ptr: anytype) *volatile u32 {
    +    return @intToPtr(*volatile u32, @ptrToInt(ptr) | xor_bits);
     }
     
     pub fn clear_alias(ptr: anytype) @TypeOf(ptr) {
    @@ -42,3 +42,7 @@ pub fn set_alias(ptr: anytype) @TypeOf(ptr) {
     pub fn xor_alias(ptr: anytype) @TypeOf(ptr) {
         return @intToPtr(@TypeOf(ptr), @ptrToInt(ptr) | xor_bits);
     }
    +
    +pub inline fn tight_loop_contents() void {
    +    asm volatile ("" ::: "memory");
    +}
    diff --git a/src/hal/pins.zig b/src/hal/pins.zig
    index 1746409cc..f23209255 100644
    --- a/src/hal/pins.zig
    +++ b/src/hal/pins.zig
    @@ -48,7 +48,7 @@ pub const Pin = enum {
             function: Function = .SIO,
             direction: ?gpio.Direction = null,
             drive_strength: ?gpio.DriveStrength = null,
    -        pull: ?gpio.PullUpDown = null,
    +        pull: ?gpio.Pull = null,
             slew_rate: ?gpio.SlewRate = null,
             // input/output enable
             // schmitt trigger
    diff --git a/src/hal/spi.zig b/src/hal/spi.zig
    index 717060002..ee02131d7 100644
    --- a/src/hal/spi.zig
    +++ b/src/hal/spi.zig
    @@ -8,7 +8,7 @@ const gpio = @import("gpio.zig");
     const clocks = @import("clocks.zig");
     const resets = @import("resets.zig");
     const time = @import("time.zig");
    -const util = @import("util.zig");
    +const hw = @import("hw.zig");
     
     const SpiRegs = microzig.chip.types.peripherals.SPI0;
     
    @@ -101,7 +101,7 @@ pub const SPI = enum(u1) {
             // push-on-full, but continues shifting. Safe if SSPIMSC_RORIM is not set.
             for (src) |s| {
                 while (!spi.is_writable()) {
    -                util.tight_loop_contents();
    +                hw.tight_loop_contents();
                 }
                 spi_regs.SSPDR.write_raw(s);
             }
    @@ -111,7 +111,7 @@ pub const SPI = enum(u1) {
                 _ = spi_regs.SSPDR.read();
             }
             while (spi_regs.SSPSR.read().BSY == 1) {
    -            util.tight_loop_contents();
    +            hw.tight_loop_contents();
             }
             while (spi.is_readable()) {
                 _ = spi_regs.SSPDR.read();
    diff --git a/src/hal/util.zig b/src/hal/util.zig
    deleted file mode 100644
    index 4f0d71c6c..000000000
    --- a/src/hal/util.zig
    +++ /dev/null
    @@ -1,18 +0,0 @@
    -pub fn xor_alias(ptr: anytype) @TypeOf(ptr) {
    -    const xor_addr = @ptrToInt(ptr) | (1 << 12);
    -    return @ptrCast(@TypeOf(ptr), xor_addr);
    -}
    -
    -pub fn set_alias(ptr: anytype) @TypeOf(ptr) {
    -    const set_addr = @ptrToInt(ptr) | (2 << 12);
    -    return @ptrCast(@TypeOf(ptr), set_addr);
    -}
    -
    -pub fn clear_alias(ptr: anytype) @TypeOf(ptr) {
    -    const clear_addr = @ptrToInt(ptr) | (3 << 12);
    -    return @ptrCast(@TypeOf(ptr), clear_addr);
    -}
    -
    -pub inline fn tight_loop_contents() void {
    -    asm volatile ("" ::: "memory");
    -}
    
    From 886234b88284bd90c951b930c98f28681140435b Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Mon, 15 May 2023 23:12:22 -0700
    Subject: [PATCH 167/286] improve timer API (#60)
    
    ---
     examples/usb_device.zig |  4 ++--
     examples/usb_hid.zig    |  4 ++--
     src/hal/time.zig        | 35 +++++++++++++++++------------------
     src/hal/uart.zig        |  4 ++--
     4 files changed, 23 insertions(+), 24 deletions(-)
    
    diff --git a/examples/usb_device.zig b/examples/usb_device.zig
    index 3395286cd..252db521f 100644
    --- a/examples/usb_device.zig
    +++ b/examples/usb_device.zig
    @@ -154,7 +154,7 @@ pub fn main() !void {
         rp2040.usb.Usb.init_clk();
         // Then initialize the USB device using the configuration defined above
         rp2040.usb.Usb.init_device(&DEVICE_CONFIGURATION) catch unreachable;
    -    var old: u64 = time.get_time_since_boot().us_since_boot;
    +    var old: u64 = time.get_time_since_boot().to_us();
         var new: u64 = 0;
         while (true) {
             // You can now poll for USB events
    @@ -162,7 +162,7 @@ pub fn main() !void {
                 false, // debug output over UART [Y/n]
             ) catch unreachable;
     
    -        new = time.get_time_since_boot().us_since_boot;
    +        new = time.get_time_since_boot().to_us();
             if (new - old > 500000) {
                 old = new;
                 led.toggle();
    diff --git a/examples/usb_hid.zig b/examples/usb_hid.zig
    index 051ad746c..a19a3e067 100644
    --- a/examples/usb_hid.zig
    +++ b/examples/usb_hid.zig
    @@ -169,7 +169,7 @@ pub fn main() !void {
         rp2040.usb.Usb.init_clk();
         // Then initialize the USB device using the configuration defined above
         rp2040.usb.Usb.init_device(&DEVICE_CONFIGURATION) catch unreachable;
    -    var old: u64 = time.get_time_since_boot().us_since_boot;
    +    var old: u64 = time.get_time_since_boot().to_us();
         var new: u64 = 0;
         while (true) {
             // You can now poll for USB events
    @@ -177,7 +177,7 @@ pub fn main() !void {
                 true, // debug output over UART [Y/n]
             ) catch unreachable;
     
    -        new = time.get_time_since_boot().us_since_boot;
    +        new = time.get_time_since_boot().to_us();
             if (new - old > 500000) {
                 old = new;
                 led.toggle();
    diff --git a/src/hal/time.zig b/src/hal/time.zig
    index 3b568bf5a..d7f815bc4 100644
    --- a/src/hal/time.zig
    +++ b/src/hal/time.zig
    @@ -1,8 +1,19 @@
     const microzig = @import("microzig");
     const TIMER = microzig.chip.peripherals.TIMER;
     
    -pub const Absolute = struct {
    -    us_since_boot: u64,
    +/// Using an enum to make it a distinct type, the underlying number is
    +/// time since boot in microseconds.
    +pub const Absolute = enum(u64) {
    +    _,
    +
    +    pub fn reached(time: Absolute) bool {
    +        const now = get_time_since_boot();
    +        return now.to_us() >= time.to_us();
    +    }
    +
    +    pub fn to_us(time: Absolute) u64 {
    +        return @enumToInt(time);
    +    }
     };
     
     pub fn get_time_since_boot() Absolute {
    @@ -12,23 +23,14 @@ pub fn get_time_since_boot() Absolute {
             var low_word = TIMER.TIMERAWL;
             const next_high_word = TIMER.TIMERAWH;
             if (next_high_word == high_word)
    -            break Absolute{
    -                .us_since_boot = @intCast(u64, high_word) << 32 | low_word,
    -            };
    +            break @intToEnum(Absolute, @intCast(u64, high_word) << 32 | low_word);
     
             high_word = next_high_word;
         } else unreachable;
     }
     
     pub fn make_timeout_us(timeout_us: u64) Absolute {
    -    return Absolute{
    -        .us_since_boot = get_time_since_boot().us_since_boot + timeout_us,
    -    };
    -}
    -
    -pub fn reached(time: Absolute) bool {
    -    const now = get_time_since_boot();
    -    return now.us_since_boot >= time.us_since_boot;
    +    return @intToEnum(Absolute, get_time_since_boot().to_us() + timeout_us);
     }
     
     pub fn sleep_ms(time_ms: u32) void {
    @@ -36,9 +38,6 @@ pub fn sleep_ms(time_ms: u32) void {
     }
     
     pub fn sleep_us(time_us: u64) void {
    -    const end_time = Absolute{
    -        .us_since_boot = time_us + get_time_since_boot().us_since_boot,
    -    };
    -
    -    while (!reached(end_time)) {}
    +    const end_time = make_timeout_us(time_us);
    +    while (!end_time.reached()) {}
     }
    diff --git a/src/hal/uart.zig b/src/hal/uart.zig
    index 6a08b852d..b7a9b114f 100644
    --- a/src/hal/uart.zig
    +++ b/src/hal/uart.zig
    @@ -219,8 +219,8 @@ pub fn log(
     
         if (uart_logger) |uart| {
             const current_time = time.get_time_since_boot();
    -        const seconds = current_time.us_since_boot / std.time.us_per_s;
    -        const microseconds = current_time.us_since_boot % std.time.us_per_s;
    +        const seconds = current_time.to_us() / std.time.us_per_s;
    +        const microseconds = current_time.to_us() % std.time.us_per_s;
     
             uart.print(prefix ++ format ++ "\r\n", .{ seconds, microseconds } ++ args) catch {};
         }
    
    From abff6d1f4bec6804bd42b7dabaed3f6fae3f196d Mon Sep 17 00:00:00 2001
    From: Vlad Panazan 
    Date: Thu, 18 May 2023 00:39:54 +0300
    Subject: [PATCH 168/286] add ws2812 pio example (#54)
    
    ---
     build.zig           |  1 +
     examples/ws2812.zig | 94 +++++++++++++++++++++++++++++++++++++++++++++
     src/hal/pio.zig     |  4 +-
     3 files changed, 97 insertions(+), 2 deletions(-)
     create mode 100644 examples/ws2812.zig
    
    diff --git a/build.zig b/build.zig
    index 1ee7e1716..4afab69d2 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -71,6 +71,7 @@ pub const Examples = struct {
         flash_program: *microzig.EmbeddedExecutable,
         usb_device: *microzig.EmbeddedExecutable,
         usb_hid: *microzig.EmbeddedExecutable,
    +    ws2812: *microzig.EmbeddedExecutable,
         random: *microzig.EmbeddedExecutable,
     
         pub fn init(b: *Builder, optimize: std.builtin.OptimizeMode) Examples {
    diff --git a/examples/ws2812.zig b/examples/ws2812.zig
    new file mode 100644
    index 000000000..e51d9730d
    --- /dev/null
    +++ b/examples/ws2812.zig
    @@ -0,0 +1,94 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +const rp2040 = microzig.hal;
    +const gpio = rp2040.gpio;
    +const Pio = rp2040.pio.Pio;
    +const StateMachine = rp2040.pio.StateMachine;
    +
    +const ws2812_program = blk: {
    +    @setEvalBranchQuota(5000);
    +    break :blk rp2040.pio.assemble(
    +        \\;
    +        \\; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    +        \\;
    +        \\; SPDX-License-Identifier: BSD-3-Clause
    +        \\;
    +        \\.program ws2812
    +        \\.side_set 1
    +        \\
    +        \\.define public T1 2
    +        \\.define public T2 5
    +        \\.define public T3 3
    +        \\
    +        \\.wrap_target
    +        \\bitloop:
    +        \\    out x, 1       side 0 [T3 - 1] ; Side-set still takes place when instruction stalls
    +        \\    jmp !x do_zero side 1 [T1 - 1] ; Branch on the bit we shifted out. Positive pulse
    +        \\do_one:
    +        \\    jmp  bitloop   side 1 [T2 - 1] ; Continue driving high, for a long pulse
    +        \\do_zero:
    +        \\    nop            side 0 [T2 - 1] ; Or drive low, for a short pulse
    +        \\.wrap
    +    , .{}).get_program_by_name("ws2812");
    +};
    +
    +const pio: Pio = .pio0;
    +const sm: StateMachine = .sm0;
    +const led_pin = gpio.num(23);
    +
    +pub fn main() void {
    +    pio.gpio_init(led_pin);
    +    sm_set_consecutive_pindirs(pio, sm, @enumToInt(led_pin), 1, true);
    +
    +    const cycles_per_bit: comptime_int = ws2812_program.defines[0].value + //T1
    +        ws2812_program.defines[1].value + //T2
    +        ws2812_program.defines[2].value; //T3
    +    const div = @intToFloat(f32, rp2040.clock_config.sys.?.output_freq) /
    +        (800_000 * cycles_per_bit);
    +
    +    pio.sm_load_and_start_program(sm, ws2812_program, .{
    +        .clkdiv = rp2040.pio.ClkDivOptions.from_float(div),
    +        .pin_mappings = .{
    +            .side_set = .{
    +                .base = @enumToInt(led_pin),
    +                .count = 1,
    +            },
    +        },
    +        .shift = .{
    +            .out_shiftdir = .left,
    +            .autopull = true,
    +            .pull_threshold = 24,
    +            .join_tx = true,
    +        },
    +    }) catch unreachable;
    +    pio.sm_set_enabled(sm, true);
    +
    +    while (true) {
    +        pio.sm_blocking_write(sm, 0x00ff00 << 8); //red
    +        rp2040.time.sleep_ms(1000);
    +        pio.sm_blocking_write(sm, 0xff0000 << 8); //green
    +        rp2040.time.sleep_ms(1000);
    +        pio.sm_blocking_write(sm, 0x0000ff << 8); //blue
    +        rp2040.time.sleep_ms(1000);
    +    }
    +}
    +
    +fn sm_set_consecutive_pindirs(_pio: Pio, _sm: StateMachine, pin: u5, count: u3, is_out: bool) void {
    +    const sm_regs = _pio.get_sm_regs(_sm);
    +    const pinctrl_saved = sm_regs.pinctrl.raw;
    +    sm_regs.pinctrl.modify(.{
    +        .SET_BASE = pin,
    +        .SET_COUNT = count,
    +    });
    +    _pio.sm_exec(_sm, rp2040.pio.Instruction{
    +        .tag = .set,
    +        .delay_side_set = 0,
    +        .payload = .{
    +            .set = .{
    +                .data = @boolToInt(is_out),
    +                .destination = .pindirs,
    +            },
    +        },
    +    });
    +    sm_regs.pinctrl.raw = pinctrl_saved;
    +}
    diff --git a/src/hal/pio.zig b/src/hal/pio.zig
    index 2eb17096f..2943a3f26 100644
    --- a/src/hal/pio.zig
    +++ b/src/hal/pio.zig
    @@ -226,7 +226,7 @@ pub const Pio = enum(u1) {
             } else error.NoSpace;
         }
     
    -    fn get_sm_regs(self: Pio, sm: StateMachine) *volatile StateMachine.Regs {
    +    pub fn get_sm_regs(self: Pio, sm: StateMachine) *volatile StateMachine.Regs {
             const pio_regs = self.get_regs();
             const sm_regs = @ptrCast(*volatile [4]StateMachine.Regs, &pio_regs.SM0_CLKDIV);
             return &sm_regs[@enumToInt(sm)];
    @@ -480,7 +480,7 @@ pub const Pio = enum(u1) {
         ) !void {
             const expected_side_set_pins = if (program.side_set) |side_set|
                 if (side_set.optional)
    -                side_set.count - 1
    +                side_set.count + 1
                 else
                     side_set.count
             else
    
    From d1e35696d430c10fa3b2346d3137a81c122dc90b Mon Sep 17 00:00:00 2001
    From: Hubert Jasudowicz 
    Date: Thu, 18 May 2023 09:24:18 +0200
    Subject: [PATCH 169/286] examples: Set LED GPIO function (#61)
    
    Set the pin function to SIO instead of null (default).
    ---
     examples/blinky_core1.zig  | 1 +
     examples/flash_program.zig | 1 +
     examples/random.zig        | 1 +
     examples/uart.zig          | 1 +
     examples/usb_device.zig    | 1 +
     examples/usb_hid.zig       | 1 +
     6 files changed, 6 insertions(+)
    
    diff --git a/examples/blinky_core1.zig b/examples/blinky_core1.zig
    index 64f067468..06157295b 100644
    --- a/examples/blinky_core1.zig
    +++ b/examples/blinky_core1.zig
    @@ -18,6 +18,7 @@ fn core1() void {
     }
     
     pub fn main() !void {
    +    led.set_function(.sio);
         led.set_direction(.out);
         multicore.launch_core1(core1);
     
    diff --git a/examples/flash_program.zig b/examples/flash_program.zig
    index a2999c9d8..4bae76959 100644
    --- a/examples/flash_program.zig
    +++ b/examples/flash_program.zig
    @@ -28,6 +28,7 @@ pub const std_options = struct {
     };
     
     pub fn main() !void {
    +    led.set_function(.sio);
         led.set_direction(.out);
         led.put(1);
     
    diff --git a/examples/random.zig b/examples/random.zig
    index 0645839d1..151482e2c 100644
    --- a/examples/random.zig
    +++ b/examples/random.zig
    @@ -28,6 +28,7 @@ pub const std_options = struct {
     };
     
     pub fn main() !void {
    +    led.set_function(.sio);
         led.set_direction(.out);
         led.put(1);
     
    diff --git a/examples/uart.zig b/examples/uart.zig
    index 6be3b3869..914b9ae98 100644
    --- a/examples/uart.zig
    +++ b/examples/uart.zig
    @@ -24,6 +24,7 @@ pub const std_options = struct {
     };
     
     pub fn main() !void {
    +    led.set_function(.sio);
         led.set_direction(.out);
         led.put(1);
     
    diff --git a/examples/usb_device.zig b/examples/usb_device.zig
    index 252db521f..27d961d11 100644
    --- a/examples/usb_device.zig
    +++ b/examples/usb_device.zig
    @@ -138,6 +138,7 @@ pub const std_options = struct {
     };
     
     pub fn main() !void {
    +    led.set_function(.sio);
         led.set_direction(.out);
         led.put(1);
     
    diff --git a/examples/usb_hid.zig b/examples/usb_hid.zig
    index a19a3e067..34b9a1205 100644
    --- a/examples/usb_hid.zig
    +++ b/examples/usb_hid.zig
    @@ -153,6 +153,7 @@ pub const std_options = struct {
     };
     
     pub fn main() !void {
    +    led.set_function(.sio);
         led.set_direction(.out);
         led.put(1);
     
    
    From 7b7caa9eb40ca87db79958aeadd2e40155c1ab95 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Thu, 18 May 2023 20:51:23 -0700
    Subject: [PATCH 170/286] improve ADC API (#62)
    
    ---
     examples/adc.zig |  12 +-
     src/hal/adc.zig  | 386 +++++++++++++++++++++++++++++++----------------
     2 files changed, 262 insertions(+), 136 deletions(-)
    
    diff --git a/examples/adc.zig b/examples/adc.zig
    index b6d6bf4ff..ff180dd53 100644
    --- a/examples/adc.zig
    +++ b/examples/adc.zig
    @@ -7,7 +7,6 @@ const gpio = rp2040.gpio;
     const adc = rp2040.adc;
     const time = rp2040.time;
     
    -const temp_sensor: adc.Input = .temperature_sensor;
     const uart = rp2040.uart.num(0);
     const baud_rate = 115200;
     const uart_tx_pin = gpio.num(0);
    @@ -18,6 +17,10 @@ pub const std_options = struct {
     };
     
     pub fn main() void {
    +    adc.apply(.{
    +        .temp_sensor_enabled = true,
    +    });
    +
         uart.apply(.{
             .baud_rate = baud_rate,
             .tx_pin = uart_tx_pin,
    @@ -26,9 +29,12 @@ pub fn main() void {
         });
     
         rp2040.uart.init_logger(uart);
    -
         while (true) : (time.sleep_ms(1000)) {
    -        const sample = temp_sensor.read();
    +        const sample = adc.convert_one_shot_blocking(.temp_sensor) catch {
    +            std.log.err("conversion failed!", .{});
    +            continue;
    +        };
    +
             std.log.info("temp value: {}", .{sample});
         }
     }
    diff --git a/src/hal/adc.zig b/src/hal/adc.zig
    index a77b10223..592273bd4 100644
    --- a/src/hal/adc.zig
    +++ b/src/hal/adc.zig
    @@ -7,196 +7,316 @@ const microzig = @import("microzig");
     const ADC = microzig.chip.peripherals.ADC;
     const gpio = @import("gpio.zig");
     const resets = @import("resets.zig");
    +const clocks = @import("clocks.zig");
     
    -pub const temperature_sensor = struct {
    -    pub inline fn init() void {
    -        set_temp_sensor_enabled(true);
    -    }
    -
    -    pub inline fn deinit() void {
    -        set_temp_sensor_enabled(false);
    -    }
    -
    -    pub inline fn read_raw() u16 {
    -        return Input.read(.temperature_sensor);
    -    }
    -
    -    // One-shot conversion returning the temperature in Celcius
    -    pub inline fn read(comptime T: type, comptime Vref: T) T {
    -        // TODO: consider fixed-point
    -        const raw = @intToFloat(T, read_raw());
    -        const voltage: T = Vref * raw / 0x0fff;
    -        return (27.0 - ((voltage - 0.706) / 0.001721));
    -    }
    +pub const Error = error{
    +    /// ADC conversion failed, one such reason is that the controller failed to
    +    /// converge on a result.
    +    Conversion,
     };
     
    -pub const Input = enum(u3) {
    -    ain0,
    -    ain1,
    -    ain2,
    -    ain3,
    -    temperature_sensor,
    -
    -    /// Setup the GPIO pin as an ADC input
    -    pub fn init(comptime input: Input) void {
    -        switch (input) {
    -            .temperature_sensor => set_temp_sensor_enabled(true),
    -            else => {
    -                const pin = gpio.num(@as(u5, @enumToInt(input)) + 26);
    -                pin.set_function(.null);
    -
    -                // TODO: implement these, otherwise adc isn't going to work.
    -                //gpio.disablePulls(gpio_num);
    -                //gpio.setInputEnabled(gpio_num, false);
    -            },
    -        }
    -    }
    -
    -    /// Disables temp sensor, otherwise it does nothing if the input is
    -    /// one of the others.
    -    pub inline fn deinit(input: Input) void {
    -        switch (input) {
    -            .temperature_sensor => set_temp_sensor_enabled(true),
    -            else => {},
    -        }
    -    }
    -
    -    /// Single-shot, blocking conversion
    -    pub fn read(input: Input) u12 {
    -        // TODO: not sure if setting these during the same write is
    -        // correct
    -        ADC.CS.modify(.{
    -            .AINSEL = @enumToInt(input),
    -            .START_ONCE = 1,
    -        });
    -
    -        // wait for the
    -        while (ADC.CS.read().READY == 0) {}
    -
    -        return ADC.RESULT.read().RESULT;
    -    }
    -};
    +/// temp_sensor is not valid because you can refer to it by name.
    +pub fn input(n: u2) Input {
    +    return @intToEnum(Input, n);
    +}
     
    -pub const InputMask = InputMask: {
    -    const enum_fields = @typeInfo(Input).Enum.fields;
    -    var fields: [enum_fields.len]std.builtin.Type.StructField = undefined;
    -
    -    const default_value: u1 = 0;
    -    for (enum_fields, &fields) |enum_field, *field|
    -        field = std.builtin.Type.StructField{
    -            .name = enum_field.name,
    -            .field_type = u1,
    -            .default_value = &default_value,
    -            .is_comptime = false,
    -            .alignment = 1,
    -        };
    +/// Enable the ADC controller.
    +pub fn set_enabled(enabled: bool) void {
    +    ADC.CS.modify(.{ .EN = @boolToInt(enabled) });
    +}
     
    -    break :InputMask @Type(.{
    -        .Struct = .{
    -            .layout = .Packed,
    -            .fields = &fields,
    -            .backing_integer = std.meta.Int(.Unsigned, enum_fields.len),
    -            .decls = &.{},
    -            .is_tuple = false,
    -        },
    -    });
    +const Config = struct {
    +    /// Note that this frequency is the sample frequency of the controller, not
    +    /// each input. So for 4 inputs in round-robin mode you'd see 1/4 sample
    +    /// rate for a given put vs what is set here.
    +    sample_frequency: ?u32 = null,
    +    round_robin: ?InputMask = null,
    +    fifo: ?fifo.Config = null,
    +    temp_sensor_enabled: bool = false,
     };
     
    -/// Initialize ADC hardware
    -pub fn init() void {
    +/// Applies configuration to ADC, leaves it in an enabled state by setting
    +/// CS.EN = 1. The global clock configuration is not needed to configure the
    +/// sample rate because the ADC hardware block requires a 48MHz clock.
    +pub fn apply(config: Config) void {
         ADC.CS.write(.{
    -        .EN = 1,
    -        .TS_EN = 0,
    +        .EN = 0,
    +        .TS_EN = @boolToInt(config.temp_sensor_enabled),
             .START_ONCE = 0,
             .START_MANY = 0,
             .READY = 0,
    +
             .ERR = 0,
             .ERR_STICKY = 0,
             .AINSEL = 0,
    -        .RROBIN = 0,
    +        .RROBIN = if (config.round_robin) |rr|
    +            @bitCast(u5, rr)
    +        else
    +            0,
     
             .reserved8 = 0,
             .reserved12 = 0,
             .reserved16 = 0,
             .padding = 0,
         });
    -    while (ADC.CS.read().READY == 0) {}
    -}
     
    -/// Enable/disable ADC interrupt
    -pub inline fn irq_set_enabled(enable: bool) void {
    -    // TODO: check if this works
    -    ADC.INTE.write(.{ .FIFO = if (enable) @as(u1, 1) else @as(u1, 0) });
    +    if (config.sample_frequency) |sample_frequency| {
    +        const cycles = (48_000_000 * 256) / @as(u64, sample_frequency);
    +        ADC.DIV.write(.{
    +            .FRAC = @truncate(u8, cycles),
    +            .INT = @intCast(u16, (cycles >> 8) - 1),
    +
    +            .padding = 0,
    +        });
    +    }
    +
    +    if (config.fifo) |fifo_config|
    +        fifo.apply(fifo_config);
    +
    +    set_enabled(true);
     }
     
     /// Select analog input for next conversion.
    -pub inline fn select_input(input: Input) void {
    -    ADC.CS.modify(.{ .AINSEL = @enumToInt(input) });
    +pub fn select_input(in: Input) void {
    +    ADC.CS.modify(.{ .AINSEL = @enumToInt(in) });
     }
     
     /// Get the currently selected analog input. 0..3 are GPIO 26..29 respectively,
     /// 4 is the temperature sensor.
    -pub inline fn get_selected_input() Input {
    -    // TODO: ensure that the field shouldn't have other values
    -    return @intToEnum(Input, ADC.CS.read().AINSEL);
    +pub fn get_selected_input() Input {
    +    const cs = ADC.SC.read();
    +    return @intToEnum(Input, cs.AINSEL);
     }
     
    +pub const Input = enum(u3) {
    +    /// The temperature sensor must be enabled using
    +    /// `set_temp_sensor_enabled()` in order to use it
    +    temp_sensor = 5,
    +    _,
    +
    +    /// Get the corresponding GPIO pin for an ADC input. Panics if you give it
    +    /// temp_sensor.
    +    pub fn get_gpio_pin(in: Input) gpio.Pin {
    +        return switch (in) {
    +            else => gpio.num(@as(u5, @enumToInt(in)) + 26),
    +            .temp_sensor => @panic("temp_sensor doesn't have a pin"),
    +        };
    +    }
    +
    +    /// Prepares an ADC input's corresponding GPIO pin to be used as an analog
    +    /// input.
    +    pub fn configure_gpio_pin(in: Input) void {
    +        switch (in) {
    +            else => {
    +                const pin = in.get_gpio_pin();
    +                pin.set_function(.null);
    +                pin.set_pull(null);
    +                pin.set_input_enabled(false);
    +            },
    +            .temp_sensor => {},
    +        }
    +    }
    +};
    +
     /// Set to true to power on the temperature sensor.
    -pub inline fn set_temp_sensor_enabled(enable: bool) void {
    -    ADC.CS.modify(.{ .TS_EN = if (enable) @as(u1, 1) else @as(u1, 0) });
    +pub fn set_temp_sensor_enabled(enable: bool) void {
    +    ADC.CS.modify(.{ .TS_EN = @boolToInt(enable) });
    +}
    +
    +/// T must be floating point.
    +pub fn temp_sensor_result_to_celcius(comptime T: type, comptime vref: T, result: u12) T {
    +    // TODO: consider fixed-point
    +    const raw = @intToFloat(T, result);
    +    const voltage: T = vref * raw / 0x0fff;
    +    return (27.0 - ((voltage - 0.706) / 0.001721));
     }
     
    +/// For selecting which inputs are to be used in round-robin mode
    +pub const InputMask = packed struct(u5) {
    +    ain0: bool = false,
    +    ain1: bool = false,
    +    ain2: bool = false,
    +    ain3: bool = false,
    +    temp_sensor: bool = false,
    +};
    +
     /// Sets which of the inputs are to be run in round-robin mode. Setting all to
     /// 0 will disable round-robin mode but `disableRoundRobin()` is provided so
     /// the user may be explicit.
    -pub inline fn set_round_robin(comptime enabled_inputs: InputMask) void {
    +pub fn round_robin_set(enabled_inputs: InputMask) void {
         ADC.CS.modify(.{ .RROBIN = @bitCast(u5, enabled_inputs) });
     }
     
     /// Disable round-robin sample mode.
    -pub inline fn disable_round_robin() void {
    +pub fn round_robin_disable() void {
         ADC.CS.modify(.{ .RROBIN = 0 });
     }
     
    -/// Enable free-running sample mode.
    -pub inline fn run(enable: bool) void {
    -    ADC.CS.modify(.{ .START_MANY = if (enable) @as(u1, 1) else @as(u1, 0) });
    +pub const Mode = enum {
    +    one_shot,
    +    free_running,
    +};
    +
    +/// Start the ADC controller. There are three "modes" that the controller
    +/// operates in:
    +///
    +/// - one shot: the input is selected and then conversion is started. The
    +///   controller stops once the conversion is complete.
    +///
    +/// - free running single input: the input is selected and then the conversion
    +///   is started. Once a conversion is complete the controller begins another
    +///   on the same input.
    +///
    +/// - free running round-robin: a mask of which inputs to sample is set using
    +///   `round_robin_set()`. Once conversion is completed for one input, a
    +///   conversion is started for the next set input in the mask.
    +pub fn start(mode: Mode) void {
    +    switch (mode) {
    +        .one_shot => ADC.CS.modify(.{
    +            .START_ONCE = 1,
    +        }),
    +        .free_running => ADC.CS.modify(.{
    +            .START_MANY = 1,
    +        }),
    +    }
    +}
    +
    +/// Check whether the ADC controller has a conversion result
    +pub fn is_ready() bool {
    +    const cs = ADC.CS.read();
    +    return cs.READY != 0;
     }
     
    -pub inline fn set_clk_div() void {
    -    @compileError("todo");
    +/// Single-shot, blocking conversion
    +pub fn convert_one_shot_blocking(in: Input) Error!u12 {
    +    select_input(in);
    +    start(.one_shot);
    +
    +    while (!is_ready()) {}
    +
    +    return read_result();
     }
     
    -/// The fifo is 4 samples long, if a conversion is completed and the FIFO is
    -/// full, the result is dropped.
    +/// Read conversion result from ADC controller, this function assumes that the
    +/// controller has a result ready.
    +pub fn read_result() Error!u12 {
    +    const cs = ADC.CS.read();
    +    return if (cs.ERR == 1)
    +        error.Conversion
    +    else blk: {
    +        const conversion = ADC.RESULT.read();
    +        break :blk conversion.RESULT;
    +    };
    +}
    +
    +/// The ADC FIFO can store up to four conversion results. It must be enabled in
    +/// order to use DREQ or IRQ driven streaming.
     pub const fifo = struct {
    -    pub inline fn setup() void {
    -        @compileError("todo");
    -        // There are a number of considerations wrt DMA and error detection
    +    // TODO: what happens when DMA and IRQ are enabled?
    +    pub const Config = struct {
    +        /// Assert DMA requests when the fifo contains data
    +        dreq_enabled: bool = false,
    +        /// Assert Interrupt when fifo contains data
    +        irq_enabled: bool = false,
    +        /// DREQ/IRQ asserted when level >= threshold
    +        thresh: u4 = 0,
    +        /// Shift the conversion so it's 8-bit, good for DMAing to a byte
    +        /// buffer
    +        shift: bool = false,
    +    };
    +
    +    /// Apply ADC FIFO configuration and enable it
    +    pub fn apply(config: fifo.Config) void {
    +        ADC.FCS.write(.{
    +            .DREQ_EN = @boolToInt(config.dreq_enabled),
    +            .THRESH = config.thresh,
    +            .SHIFT = @boolToInt(config.shift),
    +
    +            .EN = 1,
    +            .EMPTY = 0,
    +            .FULL = 0,
    +            .LEVEL = 0,
    +
    +            // As far as it is known, there is zero cost to being able to
    +            // report errors in the FIFO, so let's.
    +            .ERR = 1,
    +
    +            // Writing 1 to these will clear them if they're already set
    +            .UNDER = 1,
    +            .OVER = 1,
    +
    +            .reserved8 = 0,
    +            .reserved16 = 0,
    +            .reserved24 = 0,
    +            .padding = 0,
    +        });
    +
    +        irq_set_enabled(config.irq_enabled);
    +    }
    +
    +    // TODO: do we need to acknowledge an ADC interrupt?
    +
    +    /// Enable/disable ADC interrupt.
    +    pub fn irq_set_enabled(enable: bool) void {
    +        // TODO: check if this works
    +        ADC.INTE.write(.{
    +            .FIFO = @boolToInt(enable),
    +            .padding = 0,
    +        });
    +    }
    +
    +    /// Check if the ADC FIFO is full.
    +    pub fn is_full() bool {
    +        const fsc = ADC.FSC.read();
    +        return fsc.FULL != 0;
    +    }
    +
    +    /// Check if the ADC FIFO is empty.
    +    pub fn is_empty() bool {
    +        const fsc = ADC.FSC.read();
    +        return fsc.EMPTY != 0;
    +    }
    +
    +    /// Get the number of conversion in the ADC FIFO.
    +    pub fn get_level() u4 {
    +        const fsc = ADC.FSC.read();
    +        return fsc.LEVEL;
         }
     
    -    /// Return true if FIFO is empty.
    -    pub inline fn is_empty() bool {
    -        @compileError("todo");
    +    /// Check if the ADC FIFO has overflowed. When overflow happens, the new
    +    /// conversion is discarded. This flag is sticky, to clear it call
    +    /// `clear_overflowed()`.
    +    pub fn has_overflowed() bool {
    +        const fsc = ADC.FSC.read();
    +        return fsc.OVER != 0;
         }
     
    -    /// Read how many samples are in the FIFO.
    -    pub inline fn get_level() u8 {
    -        @compileError("todo");
    +    /// Clear the overflow status flag if it is set.
    +    pub fn clear_overflowed() void {
    +        ADC.FSC.modify(.{ .OVER = 1 });
         }
     
    -    /// Pop latest result from FIFO.
    -    pub inline fn get() u16 {
    -        @compileError("todo");
    +    /// Check if the ADC FIFO has underflowed. This means that the FIFO
    +    /// register was read while the FIFO was empty. This flag is sticky, to
    +    /// clear it call `clear_underflowed()`.
    +    pub fn has_underflowed() bool {
    +        const fsc = ADC.FSC.read();
    +        return fsc.UNDER != 0;
         }
     
    -    /// Block until result is available in FIFO, then pop it.
    -    pub inline fn get_blocking() u16 {
    -        @compileError("todo");
    +    /// Clear the underflow status flag if it is set.
    +    pub fn clear_underflowed() void {
    +        ADC.FSC.modify(.{ .UNDER = 1 });
         }
     
    -    /// Wait for conversion to complete then discard results in FIFO.
    -    pub inline fn drain() void {
    -        @compileError("todo");
    +    /// Pop conversion from ADC FIFO. This function assumes that the FIFO is
    +    /// not empty.
    +    pub fn pop() Error!u12 {
    +        assert(!is_empty());
    +        const result = ADC.FIFO.read();
    +        return if (result.ERR == 1)
    +            error.Conversion
    +        else
    +            result.VAL;
         }
     };
    
    From 316e241a88fa3c131e22ea421123794eb67604a7 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 30 May 2023 22:31:44 -0700
    Subject: [PATCH 171/286] DMA API, and time API improvements from SYCL 2023
     workshop (#63)
    
    ---
     src/hal/dma.zig  | 56 +++++++++++++++++++++++++++---------------------
     src/hal/time.zig | 52 ++++++++++++++++++++++++++++++++++++++++----
     2 files changed, 80 insertions(+), 28 deletions(-)
    
    diff --git a/src/hal/dma.zig b/src/hal/dma.zig
    index 248e333b0..ded0a8c04 100644
    --- a/src/hal/dma.zig
    +++ b/src/hal/dma.zig
    @@ -7,7 +7,8 @@ const DMA = chip.peripherals.DMA;
     
     const hw = @import("hw.zig");
     
    -var claimed_channels: u12 = 0;
    +const num_channels = 12;
    +var claimed_channels = std.PackedIntArray(bool, num_channels).initAllTo(false);
     
     pub const Dreq = enum(u6) {
         uart0_tx = 20,
    @@ -15,31 +16,38 @@ pub const Dreq = enum(u6) {
         _,
     };
     
    -pub fn num(n: u4) Channel {
    -    assert(n < 12);
    +pub fn channel(n: u4) Channel {
    +    assert(n < num_channels);
     
         return @intToEnum(Channel, n);
     }
     
    -pub fn claim_unused_channel() ?Channel {}
    +pub fn claim_unused_channel() ?Channel {
    +    for (0..num_channels) |i| {
    +        if (claimed_channels.get(i)) {
    +            claimed_channels.set(i, true);
    +            return channel(i);
    +        }
    +    }
    +
    +    return null;
    +}
     
     pub const Channel = enum(u4) {
         _,
     
         /// panics if the channel is already claimed
    -    pub fn claim(channel: Channel) void {
    -        _ = channel;
    -        @panic("TODO");
    +    pub fn claim(chan: Channel) void {
    +        if (chan.is_claimed())
    +            @panic("channel is already claimed!");
         }
     
    -    pub fn unclaim(channel: Channel) void {
    -        _ = channel;
    -        @panic("TODO");
    +    pub fn unclaim(chan: Channel) void {
    +        claimed_channels.set(@enumToInt(chan), false);
         }
     
    -    pub fn is_claimed(channel: Channel) bool {
    -        _ = channel;
    -        @panic("TODO");
    +    pub fn is_claimed(chan: Channel) bool {
    +        return claimed_channels.get(@enumToInt(chan));
         }
     
         const Regs = extern struct {
    @@ -67,9 +75,9 @@ pub const Channel = enum(u4) {
             al3_trans_count: u32,
         };
     
    -    fn get_regs(channel: Channel) *volatile Regs {
    +    fn get_regs(chan: Channel) *volatile Regs {
             const regs = @ptrCast(*volatile [12]Regs, &DMA.CH0_READ_ADDR);
    -        return ®s[@enumToInt(channel)];
    +        return ®s[@enumToInt(chan)];
         }
     
         pub const TransferConfig = struct {
    @@ -86,13 +94,13 @@ pub const Channel = enum(u4) {
         };
     
         pub fn trigger_transfer(
    -        channel: Channel,
    +        chan: Channel,
             write_addr: u32,
             read_addr: u32,
             count: u32,
             config: TransferConfig,
         ) void {
    -        const regs = channel.get_regs();
    +        const regs = chan.get_regs();
             regs.read_addr = read_addr;
             regs.write_addr = write_addr;
             regs.trans_count = count;
    @@ -109,23 +117,23 @@ pub const Channel = enum(u4) {
             });
         }
     
    -    pub fn set_irq0_enabled(channel: Channel, enabled: bool) void {
    +    pub fn set_irq0_enabled(chan: Channel, enabled: bool) void {
             if (enabled) {
                 const inte0_set = hw.set_alias_raw(&DMA.INTE0);
    -            inte0_set.* = @as(u32, 1) << @enumToInt(channel);
    +            inte0_set.* = @as(u32, 1) << @enumToInt(chan);
             } else {
                 const inte0_clear = hw.clear_alias_raw(&DMA.INTE0);
    -            inte0_clear.* = @as(u32, 1) << @enumToInt(channel);
    +            inte0_clear.* = @as(u32, 1) << @enumToInt(chan);
             }
         }
     
    -    pub fn acknowledge_irq0(channel: Channel) void {
    +    pub fn acknowledge_irq0(chan: Channel) void {
             const ints0_set = hw.set_alias_raw(&DMA.INTS0);
    -        ints0_set.* = @as(u32, 1) << @enumToInt(channel);
    +        ints0_set.* = @as(u32, 1) << @enumToInt(chan);
         }
     
    -    pub fn is_busy(channel: Channel) bool {
    -        const regs = channel.get_regs();
    +    pub fn is_busy(chan: Channel) bool {
    +        const regs = chan.get_regs();
             return regs.ctrl_trig.read().BUSY == 1;
         }
     };
    diff --git a/src/hal/time.zig b/src/hal/time.zig
    index d7f815bc4..e6cace556 100644
    --- a/src/hal/time.zig
    +++ b/src/hal/time.zig
    @@ -6,14 +6,58 @@ const TIMER = microzig.chip.peripherals.TIMER;
     pub const Absolute = enum(u64) {
         _,
     
    -    pub fn reached(time: Absolute) bool {
    -        const now = get_time_since_boot();
    -        return now.to_us() >= time.to_us();
    +    pub fn from_us(us: u64) Absolute {
    +        return @intToEnum(Absolute, us);
         }
     
         pub fn to_us(time: Absolute) u64 {
             return @enumToInt(time);
         }
    +
    +    pub fn is_reached_by(deadline: Absolute, point: Absolute) bool {
    +        return deadline.to_us() <= point.to_us();
    +    }
    +
    +    pub fn is_reached(time: Absolute) bool {
    +        const now = get_time_since_boot();
    +        return time.is_reached_by(now);
    +    }
    +
    +    pub fn diff(future: Absolute, past: Absolute) Duration {
    +        return Duration.from_us(future.to_us() - past.to_us());
    +    }
    +
    +    pub fn add_duration(time: Absolute, dur: Duration) Absolute {
    +        return Absolute.from_us(time.to_us() + dur.to_us());
    +    }
    +};
    +
    +pub const Duration = enum(u64) {
    +    _,
    +
    +    pub fn from_us(us: u64) Duration {
    +        return @intToEnum(Duration, us);
    +    }
    +
    +    pub fn from_ms(ms: u64) Duration {
    +        return from_us(1000 * ms);
    +    }
    +
    +    pub fn to_us(duration: Duration) u64 {
    +        return @enumToInt(duration);
    +    }
    +
    +    pub fn less_than(self: Duration, other: Duration) bool {
    +        return self.to_us() < other.to_us();
    +    }
    +
    +    pub fn minus(self: Duration, other: Duration) Duration {
    +        return from_us(self.to_us() - other.to_us());
    +    }
    +
    +    pub fn plus(self: Duration, other: Duration) Duration {
    +        return from_us(self.to_us() + other.to_us());
    +    }
     };
     
     pub fn get_time_since_boot() Absolute {
    @@ -39,5 +83,5 @@ pub fn sleep_ms(time_ms: u32) void {
     
     pub fn sleep_us(time_us: u64) void {
         const end_time = make_timeout_us(time_us);
    -    while (!end_time.reached()) {}
    +    while (!end_time.is_reached()) {}
     }
    
    From 371d4efde433a9dc87b9f6bc9c31ad491474f658 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20Quei=C3=9Fner?= 
    Date: Sun, 25 Jun 2023 20:15:00 +0200
    Subject: [PATCH 172/286] =?UTF-8?q?Runs=20zig=20fmt,=20implements=20a=20go?=
     =?UTF-8?q?od=20bunch=20of=20I=C2=B2C=20functions=20(#65)?=
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Co-authored-by: Felix "xq" Queißner 
    ---
     deps/microzig                     |   2 +-
     examples/flash_program.zig        |   2 +-
     examples/random.zig               |   2 +-
     examples/usb_device.zig           |   4 +-
     examples/usb_hid.zig              |   4 +-
     examples/ws2812.zig               |   8 +-
     src/chips/RP2040.zig              |  80 +++---
     src/hal.zig                       |   1 +
     src/hal/adc.zig                   |  22 +-
     src/hal/clocks.zig                |   4 +-
     src/hal/dma.zig                   |  22 +-
     src/hal/flash.zig                 |   4 +-
     src/hal/gpio.zig                  |  22 +-
     src/hal/hw.zig                    |  12 +-
     src/hal/i2c.zig                   | 413 ++++++++++++++++++++++++++++++
     src/hal/multicore.zig             |  10 +-
     src/hal/pins.zig                  |  12 +-
     src/hal/pio.zig                   |  50 ++--
     src/hal/pio/assembler/encoder.zig |  12 +-
     src/hal/pwm.zig                   |  10 +-
     src/hal/rom.zig                   |   6 +-
     src/hal/spi.zig                   |   4 +-
     src/hal/time.zig                  |  12 +-
     src/hal/uart.zig                  |   6 +-
     src/hal/usb.zig                   |  44 ++--
     25 files changed, 591 insertions(+), 177 deletions(-)
     create mode 100644 src/hal/i2c.zig
    
    diff --git a/deps/microzig b/deps/microzig
    index 958894191..a49fad973 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 95889419155b7ffb1b11055549540096eaa2a6c5
    +Subproject commit a49fad973077dffd5fa0b392720295ad033f076e
    diff --git a/examples/flash_program.zig b/examples/flash_program.zig
    index 4bae76959..d38d0aea6 100644
    --- a/examples/flash_program.zig
    +++ b/examples/flash_program.zig
    @@ -14,7 +14,7 @@ const uart_tx_pin = gpio.num(0);
     const uart_rx_pin = gpio.num(1);
     
     const flash_target_offset: u32 = 256 * 1024;
    -const flash_target_contents = @intToPtr([*]const u8, rp2040.flash.XIP_BASE + flash_target_offset);
    +const flash_target_contents = @ptrFromInt([*]const u8, rp2040.flash.XIP_BASE + flash_target_offset);
     
     pub fn panic(message: []const u8, _: ?*std.builtin.StackTrace, _: ?usize) noreturn {
         std.log.err("panic: {s}", .{message});
    diff --git a/examples/random.zig b/examples/random.zig
    index 151482e2c..40d2f6816 100644
    --- a/examples/random.zig
    +++ b/examples/random.zig
    @@ -60,7 +60,7 @@ pub fn main() !void {
                 var i: usize = 0;
                 std.log.info("Distribution:", .{});
                 while (i < 256) : (i += 1) {
    -                std.log.info("{} -> {}, {d:2}%", .{ i, dist[i], @intToFloat(f32, dist[i]) / @intToFloat(f32, counter) });
    +                std.log.info("{} -> {}, {d:2}%", .{ i, dist[i], @floatFromInt(f32, dist[i]) / @floatFromInt(f32, counter) });
                 }
             }
             time.sleep_ms(1000);
    diff --git a/examples/usb_device.zig b/examples/usb_device.zig
    index 27d961d11..d2b243d6a 100644
    --- a/examples/usb_device.zig
    +++ b/examples/usb_device.zig
    @@ -41,7 +41,7 @@ pub var EP1_OUT_CFG: usb.EndpointConfiguration = .{
             .length = @intCast(u8, @sizeOf(usb.EndpointDescriptor)),
             .descriptor_type = usb.DescType.Endpoint,
             .endpoint_address = usb.Dir.Out.endpoint(1),
    -        .attributes = @enumToInt(usb.TransferType.Bulk),
    +        .attributes = @intFromEnum(usb.TransferType.Bulk),
             .max_packet_size = 64,
             .interval = 0,
         },
    @@ -58,7 +58,7 @@ pub var EP1_IN_CFG: usb.EndpointConfiguration = .{
             .length = @intCast(u8, @sizeOf(usb.EndpointDescriptor)),
             .descriptor_type = usb.DescType.Endpoint,
             .endpoint_address = usb.Dir.In.endpoint(1),
    -        .attributes = @enumToInt(usb.TransferType.Bulk),
    +        .attributes = @intFromEnum(usb.TransferType.Bulk),
             .max_packet_size = 64,
             .interval = 0,
         },
    diff --git a/examples/usb_hid.zig b/examples/usb_hid.zig
    index 34b9a1205..2eced2b41 100644
    --- a/examples/usb_hid.zig
    +++ b/examples/usb_hid.zig
    @@ -41,7 +41,7 @@ pub var EP1_OUT_CFG: usb.EndpointConfiguration = .{
             .length = @intCast(u8, @sizeOf(usb.EndpointDescriptor)),
             .descriptor_type = usb.DescType.Endpoint,
             .endpoint_address = usb.Dir.Out.endpoint(1),
    -        .attributes = @enumToInt(usb.TransferType.Interrupt),
    +        .attributes = @intFromEnum(usb.TransferType.Interrupt),
             .max_packet_size = 64,
             .interval = 0,
         },
    @@ -58,7 +58,7 @@ pub var EP1_IN_CFG: usb.EndpointConfiguration = .{
             .length = @intCast(u8, @sizeOf(usb.EndpointDescriptor)),
             .descriptor_type = usb.DescType.Endpoint,
             .endpoint_address = usb.Dir.In.endpoint(1),
    -        .attributes = @enumToInt(usb.TransferType.Interrupt),
    +        .attributes = @intFromEnum(usb.TransferType.Interrupt),
             .max_packet_size = 64,
             .interval = 0,
         },
    diff --git a/examples/ws2812.zig b/examples/ws2812.zig
    index e51d9730d..f61204b3b 100644
    --- a/examples/ws2812.zig
    +++ b/examples/ws2812.zig
    @@ -38,19 +38,19 @@ const led_pin = gpio.num(23);
     
     pub fn main() void {
         pio.gpio_init(led_pin);
    -    sm_set_consecutive_pindirs(pio, sm, @enumToInt(led_pin), 1, true);
    +    sm_set_consecutive_pindirs(pio, sm, @intFromEnum(led_pin), 1, true);
     
         const cycles_per_bit: comptime_int = ws2812_program.defines[0].value + //T1
             ws2812_program.defines[1].value + //T2
             ws2812_program.defines[2].value; //T3
    -    const div = @intToFloat(f32, rp2040.clock_config.sys.?.output_freq) /
    +    const div = @floatFromInt(f32, rp2040.clock_config.sys.?.output_freq) /
             (800_000 * cycles_per_bit);
     
         pio.sm_load_and_start_program(sm, ws2812_program, .{
             .clkdiv = rp2040.pio.ClkDivOptions.from_float(div),
             .pin_mappings = .{
                 .side_set = .{
    -                .base = @enumToInt(led_pin),
    +                .base = @intFromEnum(led_pin),
                     .count = 1,
                 },
             },
    @@ -85,7 +85,7 @@ fn sm_set_consecutive_pindirs(_pio: Pio, _sm: StateMachine, pin: u5, count: u3,
             .delay_side_set = 0,
             .payload = .{
                 .set = .{
    -                .data = @boolToInt(is_out),
    +                .data = @intFromBool(is_out),
                     .destination = .pindirs,
                 },
             },
    diff --git a/src/chips/RP2040.zig b/src/chips/RP2040.zig
    index 62af336a8..74f613486 100644
    --- a/src/chips/RP2040.zig
    +++ b/src/chips/RP2040.zig
    @@ -65,9 +65,9 @@ pub const devices = struct {
     
             pub const peripherals = struct {
                 ///  System Control Space
    -            pub const MPU = @intToPtr(*volatile types.peripherals.SCS, 0xd90);
    +            pub const MPU = @ptrFromInt(*volatile types.peripherals.SCS, 0xd90);
                 ///  QSPI flash execute-in-place block
    -            pub const XIP_CTRL = @intToPtr(*volatile types.peripherals.XIP_CTRL, 0x14000000);
    +            pub const XIP_CTRL = @ptrFromInt(*volatile types.peripherals.XIP_CTRL, 0x14000000);
                 ///  DW_apb_ssi has the following features:
                 ///  * APB interface – Allows for easy integration into a DesignWare Synthesizable Components for AMBA 2 implementation.
                 ///  * APB3 and APB4 protocol support.
    @@ -94,27 +94,27 @@ pub const devices = struct {
                 ///  - Interrupt polarity – active high interrupt lines.
                 ///  - Serial clock polarity – low serial-clock polarity directly after reset.
                 ///  - Serial clock phase – capture on first edge of serial-clock directly after reset.
    -            pub const XIP_SSI = @intToPtr(*volatile types.peripherals.XIP_SSI, 0x18000000);
    -            pub const SYSINFO = @intToPtr(*volatile types.peripherals.SYSINFO, 0x40000000);
    +            pub const XIP_SSI = @ptrFromInt(*volatile types.peripherals.XIP_SSI, 0x18000000);
    +            pub const SYSINFO = @ptrFromInt(*volatile types.peripherals.SYSINFO, 0x40000000);
                 ///  Register block for various chip control signals
    -            pub const SYSCFG = @intToPtr(*volatile types.peripherals.SYSCFG, 0x40004000);
    -            pub const CLOCKS = @intToPtr(*volatile types.peripherals.CLOCKS, 0x40008000);
    -            pub const RESETS = @intToPtr(*volatile types.peripherals.RESETS, 0x4000c000);
    -            pub const PSM = @intToPtr(*volatile types.peripherals.PSM, 0x40010000);
    -            pub const IO_BANK0 = @intToPtr(*volatile types.peripherals.IO_BANK0, 0x40014000);
    -            pub const IO_QSPI = @intToPtr(*volatile types.peripherals.IO_QSPI, 0x40018000);
    -            pub const PADS_BANK0 = @intToPtr(*volatile types.peripherals.PADS_BANK0, 0x4001c000);
    -            pub const PADS_QSPI = @intToPtr(*volatile types.peripherals.PADS_QSPI, 0x40020000);
    +            pub const SYSCFG = @ptrFromInt(*volatile types.peripherals.SYSCFG, 0x40004000);
    +            pub const CLOCKS = @ptrFromInt(*volatile types.peripherals.CLOCKS, 0x40008000);
    +            pub const RESETS = @ptrFromInt(*volatile types.peripherals.RESETS, 0x4000c000);
    +            pub const PSM = @ptrFromInt(*volatile types.peripherals.PSM, 0x40010000);
    +            pub const IO_BANK0 = @ptrFromInt(*volatile types.peripherals.IO_BANK0, 0x40014000);
    +            pub const IO_QSPI = @ptrFromInt(*volatile types.peripherals.IO_QSPI, 0x40018000);
    +            pub const PADS_BANK0 = @ptrFromInt(*volatile types.peripherals.PADS_BANK0, 0x4001c000);
    +            pub const PADS_QSPI = @ptrFromInt(*volatile types.peripherals.PADS_QSPI, 0x40020000);
                 ///  Controls the crystal oscillator
    -            pub const XOSC = @intToPtr(*volatile types.peripherals.XOSC, 0x40024000);
    -            pub const PLL_SYS = @intToPtr(*volatile types.peripherals.PLL_SYS, 0x40028000);
    -            pub const PLL_USB = @intToPtr(*volatile types.peripherals.PLL_SYS, 0x4002c000);
    +            pub const XOSC = @ptrFromInt(*volatile types.peripherals.XOSC, 0x40024000);
    +            pub const PLL_SYS = @ptrFromInt(*volatile types.peripherals.PLL_SYS, 0x40028000);
    +            pub const PLL_USB = @ptrFromInt(*volatile types.peripherals.PLL_SYS, 0x4002c000);
                 ///  Register block for busfabric control signals and performance counters
    -            pub const BUSCTRL = @intToPtr(*volatile types.peripherals.BUSCTRL, 0x40030000);
    -            pub const UART0 = @intToPtr(*volatile types.peripherals.UART0, 0x40034000);
    -            pub const UART1 = @intToPtr(*volatile types.peripherals.UART0, 0x40038000);
    -            pub const SPI0 = @intToPtr(*volatile types.peripherals.SPI0, 0x4003c000);
    -            pub const SPI1 = @intToPtr(*volatile types.peripherals.SPI0, 0x40040000);
    +            pub const BUSCTRL = @ptrFromInt(*volatile types.peripherals.BUSCTRL, 0x40030000);
    +            pub const UART0 = @ptrFromInt(*volatile types.peripherals.UART0, 0x40034000);
    +            pub const UART1 = @ptrFromInt(*volatile types.peripherals.UART0, 0x40038000);
    +            pub const SPI0 = @ptrFromInt(*volatile types.peripherals.SPI0, 0x4003c000);
    +            pub const SPI1 = @ptrFromInt(*volatile types.peripherals.SPI0, 0x40040000);
                 ///  DW_apb_i2c address block
                 ///  List of configuration constants for the Synopsys I2C hardware (you may see references to these in I2C register header; these are *fixed* values, set at hardware design time):
                 ///  IC_ULTRA_FAST_MODE ................ 0x0
    @@ -185,7 +185,7 @@ pub const devices = struct {
                 ///  IC_STOP_DET_IF_MASTER_ACTIVE ...... 0x0
                 ///  IC_DEFAULT_UFM_SPKLEN ............. 0x1
                 ///  IC_TX_BUFFER_DEPTH ................ 16
    -            pub const I2C0 = @intToPtr(*volatile types.peripherals.I2C0, 0x40044000);
    +            pub const I2C0 = @ptrFromInt(*volatile types.peripherals.I2C0, 0x40044000);
                 ///  DW_apb_i2c address block
                 ///  List of configuration constants for the Synopsys I2C hardware (you may see references to these in I2C register header; these are *fixed* values, set at hardware design time):
                 ///  IC_ULTRA_FAST_MODE ................ 0x0
    @@ -256,11 +256,11 @@ pub const devices = struct {
                 ///  IC_STOP_DET_IF_MASTER_ACTIVE ...... 0x0
                 ///  IC_DEFAULT_UFM_SPKLEN ............. 0x1
                 ///  IC_TX_BUFFER_DEPTH ................ 16
    -            pub const I2C1 = @intToPtr(*volatile types.peripherals.I2C0, 0x40048000);
    +            pub const I2C1 = @ptrFromInt(*volatile types.peripherals.I2C0, 0x40048000);
                 ///  Control and data interface to SAR ADC
    -            pub const ADC = @intToPtr(*volatile types.peripherals.ADC, 0x4004c000);
    +            pub const ADC = @ptrFromInt(*volatile types.peripherals.ADC, 0x4004c000);
                 ///  Simple PWM
    -            pub const PWM = @intToPtr(*volatile types.peripherals.PWM, 0x40050000);
    +            pub const PWM = @ptrFromInt(*volatile types.peripherals.PWM, 0x40050000);
                 ///  Controls time and alarms
                 ///  time is a 64 bit value indicating the time in usec since power-on
                 ///  timeh is the top 32 bits of time & timel is the bottom 32 bits
    @@ -271,35 +271,35 @@ pub const devices = struct {
                 ///  An alarm can be cancelled before it has finished by clearing the alarm_enable
                 ///  When an alarm fires, the corresponding alarm_irq is set and alarm_running is cleared
                 ///  To clear the interrupt write a 1 to the corresponding alarm_irq
    -            pub const TIMER = @intToPtr(*volatile types.peripherals.TIMER, 0x40054000);
    -            pub const WATCHDOG = @intToPtr(*volatile types.peripherals.WATCHDOG, 0x40058000);
    +            pub const TIMER = @ptrFromInt(*volatile types.peripherals.TIMER, 0x40054000);
    +            pub const WATCHDOG = @ptrFromInt(*volatile types.peripherals.WATCHDOG, 0x40058000);
                 ///  Register block to control RTC
    -            pub const RTC = @intToPtr(*volatile types.peripherals.RTC, 0x4005c000);
    -            pub const ROSC = @intToPtr(*volatile types.peripherals.ROSC, 0x40060000);
    +            pub const RTC = @ptrFromInt(*volatile types.peripherals.RTC, 0x4005c000);
    +            pub const ROSC = @ptrFromInt(*volatile types.peripherals.ROSC, 0x40060000);
                 ///  control and status for on-chip voltage regulator and chip level reset subsystem
    -            pub const VREG_AND_CHIP_RESET = @intToPtr(*volatile types.peripherals.VREG_AND_CHIP_RESET, 0x40064000);
    +            pub const VREG_AND_CHIP_RESET = @ptrFromInt(*volatile types.peripherals.VREG_AND_CHIP_RESET, 0x40064000);
                 ///  Testbench manager. Allows the programmer to know what platform their software is running on.
    -            pub const TBMAN = @intToPtr(*volatile types.peripherals.TBMAN, 0x4006c000);
    +            pub const TBMAN = @ptrFromInt(*volatile types.peripherals.TBMAN, 0x4006c000);
                 ///  DMA with separate read and write masters
    -            pub const DMA = @intToPtr(*volatile types.peripherals.DMA, 0x50000000);
    +            pub const DMA = @ptrFromInt(*volatile types.peripherals.DMA, 0x50000000);
                 ///  DPRAM layout for USB device.
    -            pub const USBCTRL_DPRAM = @intToPtr(*volatile types.peripherals.USBCTRL_DPRAM, 0x50100000);
    +            pub const USBCTRL_DPRAM = @ptrFromInt(*volatile types.peripherals.USBCTRL_DPRAM, 0x50100000);
                 ///  USB FS/LS controller device registers
    -            pub const USBCTRL_REGS = @intToPtr(*volatile types.peripherals.USBCTRL_REGS, 0x50110000);
    +            pub const USBCTRL_REGS = @ptrFromInt(*volatile types.peripherals.USBCTRL_REGS, 0x50110000);
                 ///  Programmable IO block
    -            pub const PIO0 = @intToPtr(*volatile types.peripherals.PIO0, 0x50200000);
    +            pub const PIO0 = @ptrFromInt(*volatile types.peripherals.PIO0, 0x50200000);
                 ///  Programmable IO block
    -            pub const PIO1 = @intToPtr(*volatile types.peripherals.PIO0, 0x50300000);
    +            pub const PIO1 = @ptrFromInt(*volatile types.peripherals.PIO0, 0x50300000);
                 ///  Single-cycle IO block
                 ///  Provides core-local and inter-core hardware for the two processors, with single-cycle access.
    -            pub const SIO = @intToPtr(*volatile types.peripherals.SIO, 0xd0000000);
    -            pub const PPB = @intToPtr(*volatile types.peripherals.PPB, 0xe0000000);
    +            pub const SIO = @ptrFromInt(*volatile types.peripherals.SIO, 0xd0000000);
    +            pub const PPB = @ptrFromInt(*volatile types.peripherals.PPB, 0xe0000000);
                 ///  System Tick Timer
    -            pub const SysTick = @intToPtr(*volatile types.peripherals.SysTick, 0xe000e010);
    +            pub const SysTick = @ptrFromInt(*volatile types.peripherals.SysTick, 0xe000e010);
                 ///  System Control Space
    -            pub const NVIC = @intToPtr(*volatile types.peripherals.NVIC, 0xe000e100);
    +            pub const NVIC = @ptrFromInt(*volatile types.peripherals.NVIC, 0xe000e100);
                 ///  System Control Space
    -            pub const SCB = @intToPtr(*volatile types.peripherals.SCB, 0xe000ed00);
    +            pub const SCB = @ptrFromInt(*volatile types.peripherals.SCB, 0xe000ed00);
             };
         };
     };
    diff --git a/src/hal.zig b/src/hal.zig
    index 89e2b58a9..78ebcf2c0 100644
    --- a/src/hal.zig
    +++ b/src/hal.zig
    @@ -16,6 +16,7 @@ pub const rand = @import("hal/random.zig");
     pub const resets = @import("hal/resets.zig");
     pub const rom = @import("hal/rom.zig");
     pub const spi = @import("hal/spi.zig");
    +pub const i2c = @import("hal/i2c.zig");
     pub const time = @import("hal/time.zig");
     pub const uart = @import("hal/uart.zig");
     pub const usb = @import("hal/usb.zig");
    diff --git a/src/hal/adc.zig b/src/hal/adc.zig
    index 592273bd4..973db6320 100644
    --- a/src/hal/adc.zig
    +++ b/src/hal/adc.zig
    @@ -17,12 +17,12 @@ pub const Error = error{
     
     /// temp_sensor is not valid because you can refer to it by name.
     pub fn input(n: u2) Input {
    -    return @intToEnum(Input, n);
    +    return @enumFromInt(Input, n);
     }
     
     /// Enable the ADC controller.
     pub fn set_enabled(enabled: bool) void {
    -    ADC.CS.modify(.{ .EN = @boolToInt(enabled) });
    +    ADC.CS.modify(.{ .EN = @intFromBool(enabled) });
     }
     
     const Config = struct {
    @@ -41,7 +41,7 @@ const Config = struct {
     pub fn apply(config: Config) void {
         ADC.CS.write(.{
             .EN = 0,
    -        .TS_EN = @boolToInt(config.temp_sensor_enabled),
    +        .TS_EN = @intFromBool(config.temp_sensor_enabled),
             .START_ONCE = 0,
             .START_MANY = 0,
             .READY = 0,
    @@ -78,14 +78,14 @@ pub fn apply(config: Config) void {
     
     /// Select analog input for next conversion.
     pub fn select_input(in: Input) void {
    -    ADC.CS.modify(.{ .AINSEL = @enumToInt(in) });
    +    ADC.CS.modify(.{ .AINSEL = @intFromEnum(in) });
     }
     
     /// Get the currently selected analog input. 0..3 are GPIO 26..29 respectively,
     /// 4 is the temperature sensor.
     pub fn get_selected_input() Input {
         const cs = ADC.SC.read();
    -    return @intToEnum(Input, cs.AINSEL);
    +    return @enumFromInt(Input, cs.AINSEL);
     }
     
     pub const Input = enum(u3) {
    @@ -98,7 +98,7 @@ pub const Input = enum(u3) {
         /// temp_sensor.
         pub fn get_gpio_pin(in: Input) gpio.Pin {
             return switch (in) {
    -            else => gpio.num(@as(u5, @enumToInt(in)) + 26),
    +            else => gpio.num(@as(u5, @intFromEnum(in)) + 26),
                 .temp_sensor => @panic("temp_sensor doesn't have a pin"),
             };
         }
    @@ -120,13 +120,13 @@ pub const Input = enum(u3) {
     
     /// Set to true to power on the temperature sensor.
     pub fn set_temp_sensor_enabled(enable: bool) void {
    -    ADC.CS.modify(.{ .TS_EN = @boolToInt(enable) });
    +    ADC.CS.modify(.{ .TS_EN = @intFromBool(enable) });
     }
     
     /// T must be floating point.
     pub fn temp_sensor_result_to_celcius(comptime T: type, comptime vref: T, result: u12) T {
         // TODO: consider fixed-point
    -    const raw = @intToFloat(T, result);
    +    const raw = @floatFromInt(T, result);
         const voltage: T = vref * raw / 0x0fff;
         return (27.0 - ((voltage - 0.706) / 0.001721));
     }
    @@ -228,9 +228,9 @@ pub const fifo = struct {
         /// Apply ADC FIFO configuration and enable it
         pub fn apply(config: fifo.Config) void {
             ADC.FCS.write(.{
    -            .DREQ_EN = @boolToInt(config.dreq_enabled),
    +            .DREQ_EN = @intFromBool(config.dreq_enabled),
                 .THRESH = config.thresh,
    -            .SHIFT = @boolToInt(config.shift),
    +            .SHIFT = @intFromBool(config.shift),
     
                 .EN = 1,
                 .EMPTY = 0,
    @@ -260,7 +260,7 @@ pub const fifo = struct {
         pub fn irq_set_enabled(enable: bool) void {
             // TODO: check if this works
             ADC.INTE.write(.{
    -            .FIFO = @boolToInt(enable),
    +            .FIFO = @intFromBool(enable),
                 .padding = 0,
             });
         }
    diff --git a/src/hal/clocks.zig b/src/hal/clocks.zig
    index b13ebd3d8..cb5350f9e 100644
    --- a/src/hal/clocks.zig
    +++ b/src/hal/clocks.zig
    @@ -86,7 +86,7 @@ pub const Generator = enum(u32) {
         const generators = @ptrCast(*volatile [@typeInfo(Generator).Enum.fields.len]GeneratorRegs, CLOCKS);
     
         fn get_regs(generator: Generator) *volatile GeneratorRegs {
    -        return &generators[@enumToInt(generator)];
    +        return &generators[@intFromEnum(generator)];
         }
     
         pub fn has_glitchless_mux(generator: Generator) bool {
    @@ -666,7 +666,7 @@ pub fn count_frequency_khz(source: Source, comptime clock_config: GlobalConfigur
         CLOCKS.FC0_INTERVAL.raw = 10;
         CLOCKS.FC0_MIN_KHZ.raw = 0;
         CLOCKS.FC0_MAX_KHZ.raw = std.math.maxInt(u32);
    -    CLOCKS.FC0_SRC.raw = @enumToInt(source);
    +    CLOCKS.FC0_SRC.raw = @intFromEnum(source);
     
         while (CLOCKS.FC0_STATUS.read().DONE != 1) {}
     
    diff --git a/src/hal/dma.zig b/src/hal/dma.zig
    index ded0a8c04..35b285a5c 100644
    --- a/src/hal/dma.zig
    +++ b/src/hal/dma.zig
    @@ -19,7 +19,7 @@ pub const Dreq = enum(u6) {
     pub fn channel(n: u4) Channel {
         assert(n < num_channels);
     
    -    return @intToEnum(Channel, n);
    +    return @enumFromInt(Channel, n);
     }
     
     pub fn claim_unused_channel() ?Channel {
    @@ -43,11 +43,11 @@ pub const Channel = enum(u4) {
         }
     
         pub fn unclaim(chan: Channel) void {
    -        claimed_channels.set(@enumToInt(chan), false);
    +        claimed_channels.set(@intFromEnum(chan), false);
         }
     
         pub fn is_claimed(chan: Channel) bool {
    -        return claimed_channels.get(@enumToInt(chan));
    +        return claimed_channels.get(@intFromEnum(chan));
         }
     
         const Regs = extern struct {
    @@ -77,7 +77,7 @@ pub const Channel = enum(u4) {
     
         fn get_regs(chan: Channel) *volatile Regs {
             const regs = @ptrCast(*volatile [12]Regs, &DMA.CH0_READ_ADDR);
    -        return ®s[@enumToInt(chan)];
    +        return ®s[@intFromEnum(chan)];
         }
     
         pub const TransferConfig = struct {
    @@ -105,14 +105,14 @@ pub const Channel = enum(u4) {
             regs.write_addr = write_addr;
             regs.trans_count = count;
             regs.ctrl_trig.modify(.{
    -            .EN = @boolToInt(config.enable),
    +            .EN = @intFromBool(config.enable),
                 .DATA_SIZE = .{
                     .value = .SIZE_BYTE,
                 },
    -            .INCR_READ = @boolToInt(config.read_increment),
    -            .INCR_WRITE = @boolToInt(config.write_increment),
    +            .INCR_READ = @intFromBool(config.read_increment),
    +            .INCR_WRITE = @intFromBool(config.write_increment),
                 .TREQ_SEL = .{
    -                .raw = @enumToInt(config.dreq),
    +                .raw = @intFromEnum(config.dreq),
                 },
             });
         }
    @@ -120,16 +120,16 @@ pub const Channel = enum(u4) {
         pub fn set_irq0_enabled(chan: Channel, enabled: bool) void {
             if (enabled) {
                 const inte0_set = hw.set_alias_raw(&DMA.INTE0);
    -            inte0_set.* = @as(u32, 1) << @enumToInt(chan);
    +            inte0_set.* = @as(u32, 1) << @intFromEnum(chan);
             } else {
                 const inte0_clear = hw.clear_alias_raw(&DMA.INTE0);
    -            inte0_clear.* = @as(u32, 1) << @enumToInt(chan);
    +            inte0_clear.* = @as(u32, 1) << @intFromEnum(chan);
             }
         }
     
         pub fn acknowledge_irq0(chan: Channel) void {
             const ints0_set = hw.set_alias_raw(&DMA.INTS0);
    -        ints0_set.* = @as(u32, 1) << @enumToInt(chan);
    +        ints0_set.* = @as(u32, 1) << @intFromEnum(chan);
         }
     
         pub fn is_busy(chan: Channel) bool {
    diff --git a/src/hal/flash.zig b/src/hal/flash.zig
    index a7404b120..cb86c72d3 100644
    --- a/src/hal/flash.zig
    +++ b/src/hal/flash.zig
    @@ -23,7 +23,7 @@ pub const boot2 = struct {
         /// Copy the 2nd stage bootloader into memory
         pub fn flash_init() linksection(".time_critical") void {
             if (copyout_valid) return;
    -        const bootloader = @intToPtr([*]u32, XIP_BASE);
    +        const bootloader = @ptrFromInt([*]u32, XIP_BASE);
             var i: usize = 0;
             while (i < BOOT2_SIZE_BYTES) : (i += 1) {
                 copyout[i] = bootloader[i];
    @@ -55,7 +55,7 @@ pub fn range_erase(offset: u32, count: u32) linksection(".time_critical") void {
     
         rom.connect_internal_flash()();
         rom.flash_exit_xip()();
    -    rom.flash_range_erase()(offset, count, BLOCK_SIZE, @enumToInt(Command.block_erase));
    +    rom.flash_range_erase()(offset, count, BLOCK_SIZE, @intFromEnum(Command.block_erase));
         rom.flash_flush_cache()();
     
         boot2.flash_enable_xip();
    diff --git a/src/hal/gpio.zig b/src/hal/gpio.zig
    index 53d3b0bae..3b9e5aea2 100644
    --- a/src/hal/gpio.zig
    +++ b/src/hal/gpio.zig
    @@ -72,18 +72,18 @@ pub fn num(n: u5) Pin {
         if (n > 29)
             @panic("the RP2040 only has GPIO 0-29");
     
    -    return @intToEnum(Pin, n);
    +    return @enumFromInt(Pin, n);
     }
     
     pub fn mask(m: u32) Mask {
    -    return @intToEnum(Mask, m);
    +    return @enumFromInt(Mask, m);
     }
     
     pub const Mask = enum(u30) {
         _,
     
         pub fn set_function(self: Mask, function: Function) void {
    -        const raw_mask = @enumToInt(self);
    +        const raw_mask = @intFromEnum(self);
             for (0..@bitSizeOf(Mask)) |i| {
                 const bit = @intCast(u5, i);
                 if (0 != raw_mask & (@as(u32, 1) << bit))
    @@ -92,7 +92,7 @@ pub const Mask = enum(u30) {
         }
     
         pub fn set_direction(self: Mask, direction: Direction) void {
    -        const raw_mask = @enumToInt(self);
    +        const raw_mask = @intFromEnum(self);
             switch (direction) {
                 .out => SIO.GPIO_OE_SET.raw = raw_mask,
                 .in => SIO.GPIO_OE_CLR.raw = raw_mask,
    @@ -100,7 +100,7 @@ pub const Mask = enum(u30) {
         }
     
         pub fn set_pull(self: Mask, pull: ?Pull) void {
    -        const raw_mask = @enumToInt(self);
    +        const raw_mask = @intFromEnum(self);
             for (0..@bitSizeOf(Mask)) |i| {
                 const bit = @intCast(u5, i);
                 if (0 != raw_mask & (@as(u32, 1) << bit))
    @@ -109,11 +109,11 @@ pub const Mask = enum(u30) {
         }
     
         pub fn put(self: Mask, value: u32) void {
    -        SIO.GPIO_OUT_XOR.raw = (SIO.GPIO_OUT.raw ^ value) & @enumToInt(self);
    +        SIO.GPIO_OUT_XOR.raw = (SIO.GPIO_OUT.raw ^ value) & @intFromEnum(self);
         }
     
         pub fn read(self: Mask) u32 {
    -        return SIO.GPIO_IN.raw & @enumToInt(self);
    +        return SIO.GPIO_IN.raw & @intFromEnum(self);
         }
     };
     
    @@ -155,16 +155,16 @@ pub const Pin = enum(u5) {
     
         fn get_regs(gpio: Pin) *volatile Regs {
             const regs = @ptrCast(*volatile [30]Regs, &IO_BANK0.GPIO0_STATUS);
    -        return ®s[@enumToInt(gpio)];
    +        return ®s[@intFromEnum(gpio)];
         }
     
         fn get_pads_reg(gpio: Pin) *volatile PadsReg {
             const regs = @ptrCast(*volatile [30]PadsReg, &PADS_BANK0.GPIO0);
    -        return ®s[@enumToInt(gpio)];
    +        return ®s[@intFromEnum(gpio)];
         }
     
         pub fn mask(gpio: Pin) u32 {
    -        return @as(u32, 1) << @enumToInt(gpio);
    +        return @as(u32, 1) << @intFromEnum(gpio);
         }
     
         pub inline fn set_pull(gpio: Pin, pull: ?Pull) void {
    @@ -206,7 +206,7 @@ pub const Pin = enum(u5) {
     
         pub inline fn set_input_enabled(pin: Pin, enabled: bool) void {
             const pads_reg = pin.get_pads_reg();
    -        pads_reg.modify(.{ .IE = @boolToInt(enabled) });
    +        pads_reg.modify(.{ .IE = @intFromBool(enabled) });
         }
     
         pub inline fn set_function(gpio: Pin, function: Function) void {
    diff --git a/src/hal/hw.zig b/src/hal/hw.zig
    index 89aee4549..28a198105 100644
    --- a/src/hal/hw.zig
    +++ b/src/hal/hw.zig
    @@ -20,27 +20,27 @@ const set_bits = @as(u32, 0x2) << 12;
     const clear_bits = @as(u32, 0x3) << 12;
     
     pub fn clear_alias_raw(ptr: anytype) *volatile u32 {
    -    return @intToPtr(*volatile u32, @ptrToInt(ptr) | clear_bits);
    +    return @ptrFromInt(*volatile u32, @intFromPtr(ptr) | clear_bits);
     }
     
     pub fn set_alias_raw(ptr: anytype) *volatile u32 {
    -    return @intToPtr(*volatile u32, @ptrToInt(ptr) | set_bits);
    +    return @ptrFromInt(*volatile u32, @intFromPtr(ptr) | set_bits);
     }
     
     pub fn xor_alias_raw(ptr: anytype) *volatile u32 {
    -    return @intToPtr(*volatile u32, @ptrToInt(ptr) | xor_bits);
    +    return @ptrFromInt(*volatile u32, @intFromPtr(ptr) | xor_bits);
     }
     
     pub fn clear_alias(ptr: anytype) @TypeOf(ptr) {
    -    return @intToPtr(@TypeOf(ptr), @ptrToInt(ptr) | clear_bits);
    +    return @ptrFromInt(@TypeOf(ptr), @intFromPtr(ptr) | clear_bits);
     }
     
     pub fn set_alias(ptr: anytype) @TypeOf(ptr) {
    -    return @intToPtr(@TypeOf(ptr), @ptrToInt(ptr) | set_bits);
    +    return @ptrFromInt(@TypeOf(ptr), @intFromPtr(ptr) | set_bits);
     }
     
     pub fn xor_alias(ptr: anytype) @TypeOf(ptr) {
    -    return @intToPtr(@TypeOf(ptr), @ptrToInt(ptr) | xor_bits);
    +    return @ptrFromInt(@TypeOf(ptr), @intFromPtr(ptr) | xor_bits);
     }
     
     pub inline fn tight_loop_contents() void {
    diff --git a/src/hal/i2c.zig b/src/hal/i2c.zig
    new file mode 100644
    index 000000000..cc7467ee8
    --- /dev/null
    +++ b/src/hal/i2c.zig
    @@ -0,0 +1,413 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +const peripherals = microzig.chip.peripherals;
    +const I2C0 = peripherals.I2C0;
    +const I2C1 = peripherals.I2C1;
    +
    +const gpio = @import("gpio.zig");
    +const clocks = @import("clocks.zig");
    +const resets = @import("resets.zig");
    +const time = @import("time.zig");
    +const hw = @import("hw.zig");
    +
    +const I2cRegs = microzig.chip.types.peripherals.I2C0;
    +
    +pub const Config = struct {
    +    clock_config: clocks.GlobalConfiguration,
    +    sda_pin: ?gpio.Pin = gpio.num(20), // both pins only have I²C as alternate function
    +    scl_pin: ?gpio.Pin = gpio.num(21), // both pins only have I²C as alternate function
    +    baud_rate: u32 = 100_000,
    +};
    +
    +pub fn num(n: u1) I2C {
    +    return @enumFromInt(I2C, n);
    +}
    +
    +pub const Address = enum(u7) {
    +    _,
    +
    +    pub fn new(addr: u7) Address {
    +        var a = @enumFromInt(Address, addr);
    +        std.debug.assert(!a.is_reserved());
    +        return a;
    +    }
    +
    +    pub fn is_reserved(addr: Address) bool {
    +        return ((@intFromEnum(addr) & 0x78) == 0) or ((@intFromEnum(addr) & 0x78) == 0x78);
    +    }
    +
    +    pub fn format(addr: Address, fmt: []const u8, options: std.fmt.FormatOptions, writer: anytype) !void {
    +        _ = fmt;
    +        _ = options;
    +        try writer.print("I2C(0x{X:0>2}", .{@intFromEnum(addr)});
    +    }
    +};
    +
    +pub const I2C = enum(u1) {
    +    _,
    +
    +    fn get_regs(i2c: I2C) *volatile I2cRegs {
    +        return switch (@intFromEnum(i2c)) {
    +            0 => I2C0,
    +            1 => I2C1,
    +        };
    +    }
    +
    +    fn disable(i2c: I2C) void {
    +        i2c.get_regs().IC_ENABLE.write(.{
    +            .ENABLE = .{ .value = .DISABLED },
    +            .ABORT = .{ .value = .DISABLE },
    +            .TX_CMD_BLOCK = .{ .value = .NOT_BLOCKED },
    +            .padding = 0,
    +        });
    +    }
    +
    +    fn enable(i2c: I2C) void {
    +        i2c.get_regs().IC_ENABLE.write(.{
    +            .ENABLE = .{ .value = .ENABLED },
    +            .ABORT = .{ .value = .DISABLE },
    +            .TX_CMD_BLOCK = .{ .value = .NOT_BLOCKED },
    +            .padding = 0,
    +        });
    +    }
    +
    +    /// Initialise the I2C HW block.
    +    pub fn apply(i2c: I2C, comptime config: Config) u32 {
    +        const peri_freq = (comptime config.clock_config.get_frequency(.clk_sys)) orelse @compileError("clk_sys must be set for I²C");
    +
    +        const regs = i2c.get_regs();
    +
    +        i2c.disable();
    +
    +        regs.IC_ENABLE.write(.{
    +            .ENABLE = .{ .value = .DISABLED },
    +            .ABORT = .{ .value = .DISABLE },
    +            .TX_CMD_BLOCK = .{ .value = .NOT_BLOCKED },
    +            .padding = 0,
    +        });
    +
    +        // Configure as a fast-mode master with RepStart support, 7-bit addresses
    +        regs.IC_CON.write(.{
    +            .MASTER_MODE = .{ .value = .ENABLED },
    +            .SPEED = .{ .value = .FAST },
    +            .IC_RESTART_EN = .{ .value = .ENABLED },
    +            .IC_SLAVE_DISABLE = .{ .value = .SLAVE_DISABLED },
    +            .TX_EMPTY_CTRL = .{ .value = .ENABLED },
    +
    +            .IC_10BITADDR_SLAVE = .{ .raw = 0 },
    +            .IC_10BITADDR_MASTER = .{ .raw = 0 },
    +            .STOP_DET_IFADDRESSED = .{ .raw = 0 },
    +            .RX_FIFO_FULL_HLD_CTRL = .{ .raw = 0 },
    +            .STOP_DET_IF_MASTER_ACTIVE = 0,
    +            .padding = 0,
    +        });
    +
    +        // Set FIFO watermarks to 1 to make things simpler. This is encoded by a register value of 0.
    +        regs.IC_RX_TL.write(.{ .RX_TL = 0, .padding = 0 });
    +        regs.IC_TX_TL.write(.{ .TX_TL = 0, .padding = 0 });
    +
    +        // Always enable the DREQ signalling -- harmless if DMA isn't listening
    +        regs.IC_DMA_CR.write(.{
    +            .RDMAE = .{ .value = .ENABLED },
    +            .TDMAE = .{ .value = .ENABLED },
    +            .padding = 0,
    +        });
    +
    +        if (config.sda_pin) |pin| {
    +            pin.set_function(.i2c);
    +            pin.set_pull(.up);
    +            // TODO: Set slew rate
    +        }
    +        if (config.scl_pin) |pin| {
    +            pin.set_function(.i2c);
    +            pin.set_pull(.up);
    +            // TODO: Set slew rate
    +        }
    +
    +        // Re-sets regs.enable upon returning:
    +        return i2c.set_baudrate(config.baud_rate, peri_freq);
    +    }
    +
    +    /// Set I2C baudrate.
    +    pub fn set_baudrate(i2c: I2C, baud_rate: u32, freq_in: u32) u32 {
    +        std.debug.assert(baud_rate != 0);
    +        // I2C is synchronous design that runs from clk_sys
    +
    +        const regs = i2c.get_regs();
    +
    +        // TODO there are some subtleties to I2C timing which we are completely ignoring here
    +        const period: u32 = (freq_in + baud_rate / 2) / baud_rate;
    +        const lcnt: u32 = period * 3 / 5; // oof this one hurts
    +        const hcnt: u32 = period - lcnt;
    +
    +        // Check for out-of-range divisors:
    +        std.debug.assert(hcnt <= std.math.maxInt(u16));
    +        std.debug.assert(lcnt <= std.math.maxInt(u16));
    +        std.debug.assert(hcnt >= 8);
    +        std.debug.assert(lcnt >= 8);
    +
    +        // Per I2C-bus specification a device in standard or fast mode must
    +        // internally provide a hold time of at least 300ns for the SDA signal to
    +        // bridge the undefined region of the falling edge of SCL. A smaller hold
    +        // time of 120ns is used for fast mode plus.
    +        const sda_tx_hold_count: u32 = if (baud_rate < 1_000_000)
    +            // sda_tx_hold_count = freq_in [cycles/s] * 300ns * (1s / 1e9ns)
    +            // Reduce 300/1e9 to 3/1e7 to avoid numbers that don't fit in uint.
    +            // Add 1 to avoid division truncation.
    +            ((freq_in * 3) / 10000000) + 1
    +        else
    +            // sda_tx_hold_count = freq_in [cycles/s] * 120ns * (1s / 1e9ns)
    +            // Reduce 120/1e9 to 3/25e6 to avoid numbers that don't fit in uint.
    +            // Add 1 to avoid division truncation.
    +            ((freq_in * 3) / 25000000) + 1;
    +
    +        std.debug.assert(sda_tx_hold_count <= lcnt - 2);
    +
    +        i2c.disable();
    +
    +        // Always use "fast" mode (<= 400 kHz, works fine for standard mode too)
    +        regs.IC_CON.modify(.{ .SPEED = .{ .value = .FAST } });
    +        regs.IC_FS_SCL_HCNT.write(.{ .IC_FS_SCL_HCNT = @intCast(u16, hcnt), .padding = 0 });
    +        regs.IC_FS_SCL_LCNT.write(.{ .IC_FS_SCL_LCNT = @intCast(u16, lcnt), .padding = 0 });
    +        regs.IC_FS_SPKLEN.write(.{ .IC_FS_SPKLEN = if (lcnt < 16) 1 else @intCast(u8, lcnt / 16), .padding = 0 });
    +        regs.IC_SDA_HOLD.modify(.{ .IC_SDA_TX_HOLD = @intCast(u16, sda_tx_hold_count) });
    +
    +        i2c.enable();
    +
    +        return freq_in / period;
    +    }
    +
    +    // /// Set I2C port to slave mode.
    +    // pub fn set_slave_mode(i2c: I2C, slave: bool, addr: u8) void {
    +    //     //
    +    // }
    +
    +    pub const WriteBlockingUntilError = error{ DeviceNotPresent, NoAcknowledge, Timeout };
    +
    +    /// Attempt to write specified number of bytes to address, blocking until the specified absolute time is reached.
    +    pub fn write_blocking_until(i2c: I2C, addr: Address, src: []const u8, until: time.Absolute) WriteBlockingUntilError!usize {
    +        const Timeout = struct {
    +            limit: time.Absolute,
    +            inline fn perform(tc: @This()) !void {
    +                if (tc.limit.is_reached())
    +                    return error.Timeout;
    +            }
    +        };
    +        return i2c.write_blocking_internal(addr, src, Timeout{ .limit = until });
    +    }
    +
    +    pub const ReadBlockingUntilError = error{ DeviceNotPresent, NoAcknowledge, Timeout };
    +
    +    /// Attempt to read specified number of bytes from address, blocking until the specified absolute time is reached.
    +    pub fn read_blocking_until(i2c: I2C, addr: Address, dst: []u8, until: time.Absolute) ReadBlockingUntilError!usize {
    +        const Timeout = struct {
    +            limit: time.Absolute,
    +            inline fn perform(tc: @This()) !void {
    +                if (tc.limit.is_reached())
    +                    return error.Timeout;
    +            }
    +        };
    +        return i2c.read_blocking_internal(addr, dst, Timeout{ .limit = until });
    +    }
    +
    +    pub const WriteTimeoutUsError = error{ DeviceNotPresent, NoAcknowledge, Timeout };
    +
    +    /// Attempt to write specified number of bytes to address, with timeout.
    +    pub fn write_timeout_us(i2c: I2C, addr: Address, src: []const u8, timeout: time.Duration) WriteTimeoutUsError!usize {
    +        return i2c.write_blocking_until(addr, src, time.get_time_since_boot().add_duration(timeout));
    +    }
    +
    +    pub const ReadTimeoutUsError = error{ DeviceNotPresent, NoAcknowledge, Timeout };
    +
    +    /// Attempt to read specified number of bytes from address, with timeout.
    +    pub fn read_timeout_us(i2c: I2C, addr: Address, dst: []u8, timeout: time.Duration) ReadTimeoutUsError!usize {
    +        return i2c.read_blocking_until(addr, dst, time.get_time_since_boot().add_duration(timeout));
    +    }
    +
    +    /// Attempt to write specified number of bytes to address, blocking.
    +    pub const WriteBlockingError = error{ DeviceNotPresent, NoAcknowledge, Unexpected };
    +    pub fn write_blocking(i2c: I2C, addr: Address, src: []const u8) WriteBlockingError!usize {
    +        const Timeout = struct {
    +            inline fn perform(tc: @This()) !void {
    +                _ = tc;
    +            }
    +        };
    +        return try i2c.write_blocking_internal(addr, src, Timeout{});
    +    }
    +
    +    /// Attempt to read specified number of bytes from address, blocking.
    +    pub const ReadBlockingError = error{ DeviceNotPresent, NoAcknowledge, Unexpected };
    +    pub fn read_blocking(i2c: I2C, addr: Address, dst: []u8) ReadBlockingError!usize {
    +        const Timeout = struct {
    +            inline fn perform(tc: @This()) !void {
    +                _ = tc;
    +            }
    +        };
    +        try i2c.read_blocking_internal(addr, dst, Timeout{});
    +    }
    +
    +    /// Determine non-blocking write space available.
    +    pub inline fn get_write_available(i2c: I2C) u5 {
    +        return i2c.get_regs().IC_TXFLR.read().TXFLR;
    +    }
    +
    +    /// Determine number of bytes received.
    +    pub inline fn get_read_available(i2c: I2C) u5 {
    +        return i2c.get_regs().IC_RXFLR.read().RXFLR;
    +    }
    +
    +    // /// Write direct to TX FIFO.
    +    // pub fn write_raw_blocking(i2c: I2C, src: []const u8) void {
    +    //     //
    +    // }
    +
    +    // /// Read direct from RX FIFO.
    +    // pub fn read_raw_blocking(i2c: I2C, dst: []u8) void {
    +    //     //
    +    // }
    +
    +    // /// Pop a byte from I2C Rx FIFO.
    +    // pub fn read_byte_raw(i2c: I2C) u8 {
    +    //     //
    +    // }
    +
    +    // /// Push a byte into I2C Tx FIFO.
    +    // pub fn write_byte_raw(i2c: I2C, value: u8) void {
    +    //     //
    +    // }
    +
    +    // /// Return the DREQ to use for pacing transfers to/from a particular I2C instance.
    +    // pub fn get_dreq(i2c: I2C, is_tx: bool) u32 {
    +    //     //
    +    // }
    +
    +    fn set_address(i2c: I2C, addr: Address) void {
    +        i2c.disable();
    +        i2c.get_regs().IC_TAR.write(.{
    +            .IC_TAR = @intFromEnum(addr),
    +            .GC_OR_START = .{ .value = .GENERAL_CALL },
    +            .SPECIAL = .{ .value = .DISABLED },
    +            .padding = 0,
    +        });
    +        i2c.enable();
    +    }
    +
    +    fn write_blocking_internal(i2c: I2C, addr: Address, src: []const u8, timeout_check: anytype) !usize {
    +        std.debug.assert(!addr.is_reserved());
    +        // Synopsys hw accepts start/stop flags alongside data items in the same
    +        // FIFO word, so no 0 byte transfers.
    +        std.debug.assert(src.len > 0);
    +
    +        const regs = i2c.get_regs();
    +
    +        i2c.set_address(addr);
    +
    +        {
    +            // If the transaction was aborted or if it completed
    +            // successfully wait until the STOP condition has occured.
    +            defer blk: {
    +
    +                // TODO Could there be an abort while waiting for the STOP
    +                // condition here? If so, additional code would be needed here
    +                // to take care of the abort.
    +                while (regs.IC_RAW_INTR_STAT.read().STOP_DET.value == .INACTIVE) {
    +                    timeout_check.perform() catch break :blk;
    +                    hw.tight_loop_contents();
    +                }
    +
    +                // If there was a timeout, don't attempt to do anything else.
    +                _ = regs.IC_CLR_STOP_DET.read();
    +            }
    +
    +            for (src, 0..) |byte, i| {
    +                const first = (i == 0);
    +                const last = (i == (src.len - 1));
    +
    +                regs.IC_DATA_CMD.write(.{
    +                    .RESTART = .{ .raw = @intFromBool(first) }, // TODO: Implement non-restarting variant
    +                    .STOP = .{ .raw = @intFromBool(last) }, // TODO: Implement non-restarting variant
    +                    .CMD = .{ .value = .WRITE },
    +                    .DAT = byte,
    +
    +                    .FIRST_DATA_BYTE = .{ .value = .INACTIVE },
    +                    .padding = 0,
    +                });
    +
    +                // Wait until the transmission of the address/data from the internal
    +                // shift register has completed. For this to function correctly, the
    +                // TX_EMPTY_CTRL flag in IC_CON must be set. The TX_EMPTY_CTRL flag
    +                // was set in i2c_init.
    +                while (regs.IC_RAW_INTR_STAT.read().TX_EMPTY.value == .INACTIVE) {
    +                    try timeout_check.perform();
    +                    hw.tight_loop_contents();
    +                }
    +
    +                const abort_reason = regs.IC_TX_ABRT_SOURCE.read();
    +                if (@bitCast(u32, abort_reason) != 0) {
    +                    // Note clearing the abort flag also clears the reason, and
    +                    // this instance of flag is clear-on-read! Note also the
    +                    // IC_CLR_TX_ABRT register always reads as 0.
    +                    _ = regs.IC_CLR_TX_ABRT.read();
    +
    +                    if (abort_reason.ABRT_7B_ADDR_NOACK.value == .ACTIVE) {
    +                        // No reported errors - seems to happen if there is nothing connected to the bus.
    +                        // Address byte not acknowledged
    +                        return error.DeviceNotPresent;
    +                    }
    +                    if (abort_reason.ABRT_TXDATA_NOACK.value == .ABRT_TXDATA_NOACK_GENERATED) {
    +                        // TODO: How to handle this, also possible to do "return i;" here to signal not everything was transferred
    +                        return error.NoAcknowledge;
    +                    }
    +
    +                    std.log.debug("unexpected i2c abort while writing to {}: {}", .{ addr, abort_reason });
    +                    return error.Unexpected;
    +                }
    +            }
    +        }
    +
    +        return src.len;
    +    }
    +
    +    fn read_blocking_internal(i2c: I2C, addr: Address, dst: []u8, timeout_check: anytype) !usize {
    +        std.debug.assert(!addr.is_reserved());
    +
    +        const regs = i2c.get_regs();
    +
    +        i2c.set_address(addr);
    +
    +        for (dst, 0..) |*byte, i| {
    +            const first = (i == 0);
    +            const last = (i == dst.len - 1);
    +            while (i2c.get_write_available(i2c) == 0) {
    +                hw.tight_loop_contents();
    +            }
    +
    +            regs.IC_DATA_CMD.write(.{
    +                .RESTART = .{ .raw = @intFromBool(first) }, // TODO: Implement non-restarting variant
    +                .STOP = .{ .raw = @intFromBool(last) }, // TODO: Implement non-restarting variant
    +                .CMD = .{ .value = .READ },
    +
    +                .DAT = 0,
    +                .FIRST_DATA_BYTE = .{ .value = 0 },
    +                .padding = 0,
    +            });
    +
    +            while (i2c.get_read_available() == 0) {
    +                const abort_reason = regs.IC_TX_ABRT_SOURCE.read();
    +                const abort = (regs.IC_CLR_TX_ABRT.read().CLR_TX_ABRT != 0);
    +                if (abort) {
    +                    if (abort_reason.ABRT_7B_ADDR_NOACK.value == .ACTIVE)
    +                        return error.DeviceNotPresent;
    +                    std.log.debug("unexpected i2c abort while reading from {}: {}", .{ addr, abort_reason });
    +                    return error.Unexpected;
    +                }
    +
    +                try timeout_check.perform();
    +            }
    +
    +            byte.* = regs.IC_DATA_CMD.read().DAT;
    +        }
    +
    +        return dst.len;
    +    }
    +};
    diff --git a/src/hal/multicore.zig b/src/hal/multicore.zig
    index e3199d9af..bc2b4de78 100644
    --- a/src/hal/multicore.zig
    +++ b/src/hal/multicore.zig
    @@ -70,7 +70,7 @@ pub fn launch_core1_with_stack(entrypoint: *const fn () void, stack: []u32) void
             fn wrapper(_: u32, _: u32, _: u32, _: u32, entry: u32, stack_base: [*]u32) callconv(.C) void {
                 // TODO: protect stack using MPU
                 _ = stack_base;
    -            @intToPtr(*const fn () void, entry)();
    +            @ptrFromInt(*const fn () void, entry)();
             }
         }.wrapper;
     
    @@ -79,12 +79,12 @@ pub fn launch_core1_with_stack(entrypoint: *const fn () void, stack: []u32) void
         while (PSM.FRCE_OFF.read().proc1 != 1) microzig.cpu.nop();
         PSM.FRCE_OFF.modify(.{ .proc1 = 0 });
     
    -    stack[stack.len - 2] = @ptrToInt(entrypoint);
    -    stack[stack.len - 1] = @ptrToInt(stack.ptr);
    +    stack[stack.len - 2] = @intFromPtr(entrypoint);
    +    stack[stack.len - 1] = @intFromPtr(stack.ptr);
     
         // calculate top of the stack
         const stack_ptr: u32 =
    -        @ptrToInt(stack.ptr) +
    +        @intFromPtr(stack.ptr) +
             (stack.len - 2) * @sizeOf(u32); // pop the two elements we "pushed" above
     
         // after reseting core1 is waiting for this specific sequence
    @@ -94,7 +94,7 @@ pub fn launch_core1_with_stack(entrypoint: *const fn () void, stack: []u32) void
             1,
             SCB.VTOR.raw,
             stack_ptr,
    -        @ptrToInt(wrapper),
    +        @intFromPtr(wrapper),
         };
     
         var seq: usize = 0;
    diff --git a/src/hal/pins.zig b/src/hal/pins.zig
    index f23209255..5de0810c3 100644
    --- a/src/hal/pins.zig
    +++ b/src/hal/pins.zig
    @@ -355,7 +355,7 @@ pub fn Pins(comptime config: GlobalConfiguration) type {
     
                     if (pin_config.function == .SIO) {
                         pin_field.name = pin_config.name orelse field.name;
    -                    pin_field.type = GPIO(@enumToInt(@field(Pin, field.name)), pin_config.direction orelse .in);
    +                    pin_field.type = GPIO(@intFromEnum(@field(Pin, field.name)), pin_config.direction orelse .in);
                     } else if (pin_config.function.is_pwm()) {
                         pin_field.name = pin_config.name orelse @tagName(pin_config.function);
                         pin_field.type = pwm.Pwm(pin_config.function.pwm_slice(), pin_config.function.pwm_channel());
    @@ -450,8 +450,8 @@ pub const GlobalConfiguration = struct {
             comptime {
                 inline for (@typeInfo(GlobalConfiguration).Struct.fields) |field|
                     if (@field(config, field.name)) |pin_config| {
    -                    const gpio_num = @enumToInt(@field(Pin, field.name));
    -                    if (0 == function_table[@enumToInt(pin_config.function)][gpio_num])
    +                    const gpio_num = @intFromEnum(@field(Pin, field.name));
    +                    if (0 == function_table[@intFromEnum(pin_config.function)][gpio_num])
                             @compileError(comptimePrint("{s} cannot be configured for {}", .{ field.name, pin_config.function }));
     
                         if (pin_config.function == .SIO) {
    @@ -481,7 +481,7 @@ pub const GlobalConfiguration = struct {
     
             inline for (@typeInfo(GlobalConfiguration).Struct.fields) |field| {
                 if (@field(config, field.name)) |pin_config| {
    -                const pin = gpio.num(@enumToInt(@field(Pin, field.name)));
    +                const pin = gpio.num(@intFromEnum(@field(Pin, field.name)));
                     const func = pin_config.function;
     
                     // xip = 0,
    @@ -505,7 +505,7 @@ pub const GlobalConfiguration = struct {
                     } else {
                         @compileError(std.fmt.comptimePrint("Unimplemented pin function. Please implement setting pin function {s} for GPIO {}", .{
                             @tagName(func),
    -                        @enumToInt(pin),
    +                        @intFromEnum(pin),
                         }));
                     }
                 }
    @@ -517,7 +517,7 @@ pub const GlobalConfiguration = struct {
             if (input_gpios != 0) {
                 inline for (@typeInfo(GlobalConfiguration).Struct.fields) |field|
                     if (@field(config, field.name)) |pin_config| {
    -                    const gpio_num = @enumToInt(@field(Pin, field.name));
    +                    const gpio_num = @intFromEnum(@field(Pin, field.name));
                         const pull = pin_config.pull orelse continue;
                         if (comptime pin_config.get_direction() != .in)
                             @compileError("Only input pins can have pull up/down enabled");
    diff --git a/src/hal/pio.zig b/src/hal/pio.zig
    index 2943a3f26..6b7ca1fb6 100644
    --- a/src/hal/pio.zig
    +++ b/src/hal/pio.zig
    @@ -74,7 +74,7 @@ pub const ClkDivOptions = struct {
         frac: u8 = 0,
     
         pub fn from_float(div: f32) ClkDivOptions {
    -        const fixed = @floatToInt(u24, div * 256);
    +        const fixed = @intFromFloat(u24, div * 256);
             return ClkDivOptions{
                 .int = @truncate(u16, fixed >> 8),
                 .frac = @truncate(u8, fixed),
    @@ -169,7 +169,7 @@ pub const Pio = enum(u1) {
                 if (origin != offset)
                     return false;
     
    -        const used_mask = used_instruction_space[@enumToInt(self)];
    +        const used_mask = used_instruction_space[@intFromEnum(self)];
             const program_mask = program.get_mask();
     
             // We can add the program if the masks don't overlap, if there is
    @@ -199,7 +199,7 @@ pub const Pio = enum(u1) {
                 instruction_memory[i] = insn;
     
             const program_mask = program.get_mask();
    -        used_instruction_space[@enumToInt(self)] |= program_mask << offset;
    +        used_instruction_space[@intFromEnum(self)] |= program_mask << offset;
         }
     
         /// Public functions will need to lock independently, so only exposing this function for now
    @@ -216,12 +216,12 @@ pub const Pio = enum(u1) {
             // TODO: const lock = hw.Lock.claim()
             // defer lock.unlock();
     
    -        const claimed_mask = claimed_state_machines[@enumToInt(self)];
    +        const claimed_mask = claimed_state_machines[@intFromEnum(self)];
             return for (0..4) |i| {
                 const sm_mask = (@as(u4, 1) << @intCast(u2, i));
                 if (0 == (claimed_mask & sm_mask)) {
    -                claimed_state_machines[@enumToInt(self)] |= sm_mask;
    -                break @intToEnum(StateMachine, i);
    +                claimed_state_machines[@intFromEnum(self)] |= sm_mask;
    +                break @enumFromInt(StateMachine, i);
                 }
             } else error.NoSpace;
         }
    @@ -229,13 +229,13 @@ pub const Pio = enum(u1) {
         pub fn get_sm_regs(self: Pio, sm: StateMachine) *volatile StateMachine.Regs {
             const pio_regs = self.get_regs();
             const sm_regs = @ptrCast(*volatile [4]StateMachine.Regs, &pio_regs.SM0_CLKDIV);
    -        return &sm_regs[@enumToInt(sm)];
    +        return &sm_regs[@intFromEnum(sm)];
         }
     
         fn get_irq_regs(self: Pio, irq: Irq) *volatile Irq.Regs {
             const pio_regs = self.get_regs();
             const irq_regs = @ptrCast(*volatile [2]Irq.Regs, &pio_regs.IRQ0_INTE);
    -        return &irq_regs[@enumToInt(irq)];
    +        return &irq_regs[@intFromEnum(irq)];
         }
     
         pub fn sm_set_clkdiv(self: Pio, sm: StateMachine, options: ClkDivOptions) void {
    @@ -256,8 +256,8 @@ pub const Pio = enum(u1) {
             sm_regs.execctrl.modify(.{
                 .WRAP_BOTTOM = options.wrap_target,
                 .WRAP_TOP = options.wrap,
    -            .SIDE_PINDIR = @boolToInt(options.side_pindir),
    -            .SIDE_EN = @boolToInt(options.side_set_optional),
    +            .SIDE_PINDIR = @intFromBool(options.side_pindir),
    +            .SIDE_EN = @intFromBool(options.side_set_optional),
     
                 // TODO: plug in rest of the options
                 // STATUS_N
    @@ -273,17 +273,17 @@ pub const Pio = enum(u1) {
         pub fn sm_set_shift_options(self: Pio, sm: StateMachine, options: ShiftOptions) void {
             const sm_regs = self.get_sm_regs(sm);
             sm_regs.shiftctrl.write(.{
    -            .AUTOPUSH = @boolToInt(options.autopush),
    -            .AUTOPULL = @boolToInt(options.autopull),
    +            .AUTOPUSH = @intFromBool(options.autopush),
    +            .AUTOPULL = @intFromBool(options.autopull),
     
    -            .IN_SHIFTDIR = @enumToInt(options.in_shiftdir),
    -            .OUT_SHIFTDIR = @enumToInt(options.out_shiftdir),
    +            .IN_SHIFTDIR = @intFromEnum(options.in_shiftdir),
    +            .OUT_SHIFTDIR = @intFromEnum(options.out_shiftdir),
     
                 .PUSH_THRESH = options.push_threshold,
                 .PULL_THRESH = options.pull_threshold,
     
    -            .FJOIN_TX = @boolToInt(options.join_tx),
    -            .FJOIN_RX = @boolToInt(options.join_rx),
    +            .FJOIN_TX = @intFromBool(options.join_tx),
    +            .FJOIN_RX = @intFromBool(options.join_rx),
     
                 .reserved16 = 0,
             });
    @@ -308,13 +308,13 @@ pub const Pio = enum(u1) {
         pub fn sm_is_tx_fifo_full(self: Pio, sm: StateMachine) bool {
             const regs = self.get_regs();
             const txfull = regs.FSTAT.read().TXFULL;
    -        return (txfull & (@as(u4, 1) << @enumToInt(sm))) != 0;
    +        return (txfull & (@as(u4, 1) << @intFromEnum(sm))) != 0;
         }
     
         pub fn sm_get_tx_fifo(self: Pio, sm: StateMachine) *volatile u32 {
             const regs = self.get_regs();
             const fifos = @ptrCast(*volatile [4]u32, ®s.TXF0);
    -        return &fifos[@enumToInt(sm)];
    +        return &fifos[@intFromEnum(sm)];
         }
     
         /// this function writes to the TX FIFO without checking that it's
    @@ -335,16 +335,16 @@ pub const Pio = enum(u1) {
     
             var value = regs.CTRL.read();
             if (enabled)
    -            value.SM_ENABLE |= @as(u4, 1) << @enumToInt(sm)
    +            value.SM_ENABLE |= @as(u4, 1) << @intFromEnum(sm)
             else
    -            value.SM_ENABLE &= ~(@as(u4, 1) << @enumToInt(sm));
    +            value.SM_ENABLE &= ~(@as(u4, 1) << @intFromEnum(sm));
     
             regs.CTRL.write(value);
         }
     
         fn sm_clear_debug(self: Pio, sm: StateMachine) void {
             const regs = self.get_regs();
    -        const mask: u4 = (@as(u4, 1) << @enumToInt(sm));
    +        const mask: u4 = (@as(u4, 1) << @intFromEnum(sm));
     
             // write 1 to clear this register
             regs.FDEBUG.modify(.{
    @@ -377,7 +377,7 @@ pub const Pio = enum(u1) {
         }
     
         pub fn sm_fifo_level(self: Pio, sm: StateMachine, fifo: Fifo) u4 {
    -        const num = @enumToInt(sm);
    +        const num = @intFromEnum(sm);
             const offset: u5 = switch (fifo) {
                 .tx => 0,
                 .rx => 4,
    @@ -393,7 +393,7 @@ pub const Pio = enum(u1) {
             sm: StateMachine,
             source: Irq.Source,
         ) u5 {
    -        return (@as(u5, 4) * @enumToInt(source)) + @enumToInt(sm);
    +        return (@as(u5, 4) * @intFromEnum(source)) + @intFromEnum(sm);
         }
     
         pub fn sm_clear_interrupt(
    @@ -420,7 +420,7 @@ pub const Pio = enum(u1) {
         }
     
         pub fn sm_restart(self: Pio, sm: StateMachine) void {
    -        const mask: u4 = (@as(u4, 1) << @enumToInt(sm));
    +        const mask: u4 = (@as(u4, 1) << @intFromEnum(sm));
             const regs = self.get_regs();
             regs.CTRL.modify(.{
                 .SM_RESTART = mask,
    @@ -428,7 +428,7 @@ pub const Pio = enum(u1) {
         }
     
         pub fn sm_clkdiv_restart(self: Pio, sm: StateMachine) void {
    -        const mask: u4 = (@as(u4, 1) << @enumToInt(sm));
    +        const mask: u4 = (@as(u4, 1) << @intFromEnum(sm));
             const regs = self.get_regs();
             regs.CTRL.modify(.{
                 .CLKDIV_RESTART = mask,
    diff --git a/src/hal/pio/assembler/encoder.zig b/src/hal/pio/assembler/encoder.zig
    index e0bc74c9a..502b37470 100644
    --- a/src/hal/pio/assembler/encoder.zig
    +++ b/src/hal/pio/assembler/encoder.zig
    @@ -340,14 +340,14 @@ pub fn Encoder(comptime options: Options) type {
                     },
                     .push => |push| .{
                         .push = .{
    -                        .if_full = @boolToInt(push.iffull),
    -                        .block = @boolToInt(push.block),
    +                        .if_full = @intFromBool(push.iffull),
    +                        .block = @intFromBool(push.block),
                         },
                     },
                     .pull => |pull| .{
                         .pull = .{
    -                        .if_empty = @boolToInt(pull.ifempty),
    -                        .block = @boolToInt(pull.block),
    +                        .if_empty = @intFromBool(pull.ifempty),
    +                        .block = @intFromBool(pull.block),
                         },
                     },
                     .mov => |mov| .{
    @@ -361,8 +361,8 @@ pub fn Encoder(comptime options: Options) type {
                         const irq_num = try self.evaluate(u5, program.*, irq.num, token_index, diags);
                         break :blk .{
                             .irq = .{
    -                            .clear = @boolToInt(irq.clear),
    -                            .wait = @boolToInt(irq.wait),
    +                            .clear = @intFromBool(irq.clear),
    +                            .wait = @intFromBool(irq.wait),
                                 .index = if (irq.rel)
                                     @as(u5, 0x10) | irq_num
                                 else
    diff --git a/src/hal/pwm.zig b/src/hal/pwm.zig
    index 7277b11e0..6e5fe1d3f 100644
    --- a/src/hal/pwm.zig
    +++ b/src/hal/pwm.zig
    @@ -10,7 +10,7 @@ fn get_regs(comptime slice: u32) *volatile Regs {
         @import("std").debug.assert(slice < 8);
         const PwmType = microzig.chip.types.peripherals.PWM;
         const reg_diff = comptime @offsetOf(PwmType, "CH1_CSR") - @offsetOf(PwmType, "CH0_CSR");
    -    return @intToPtr(*volatile Regs, @ptrToInt(PWM) + reg_diff * slice);
    +    return @ptrFromInt(*volatile Regs, @intFromPtr(PWM) + reg_diff * slice);
     }
     
     pub fn Pwm(comptime slice_num: u32, comptime chan: Channel) type {
    @@ -74,7 +74,7 @@ const Regs = extern struct {
     pub inline fn set_slice_phase_correct(comptime slice: u32, phase_correct: bool) void {
         log.debug("PWM{} set phase correct: {}", .{ slice, phase_correct });
         get_regs(slice).csr.modify(.{
    -        .PH_CORRECT = @boolToInt(phase_correct),
    +        .PH_CORRECT = @intFromBool(phase_correct),
         });
     }
     
    @@ -89,7 +89,7 @@ pub inline fn set_slice_clk_div(comptime slice: u32, integer: u8, fraction: u4)
     pub inline fn set_slice_clk_div_mode(comptime slice: u32, mode: ClkDivMode) void {
         log.debug("PWM{} set clk div mode: {}", .{ slice, mode });
         get_regs(slice).csr.modify(.{
    -        .DIVMODE = @enumToInt(mode),
    +        .DIVMODE = @intFromEnum(mode),
         });
     }
     
    @@ -100,10 +100,10 @@ pub inline fn set_channel_inversion(
     ) void {
         switch (channel) {
             .a => get_regs(slice).csr.modify(.{
    -            .A_INV = @boolToInt(invert),
    +            .A_INV = @intFromBool(invert),
             }),
             .b => get_regs(slice).csr.modifi(.{
    -            .B_INV = @boolToInt(invert),
    +            .B_INV = @intFromBool(invert),
             }),
         }
     }
    diff --git a/src/hal/rom.zig b/src/hal/rom.zig
    index b76eb80a6..7b2538750 100644
    --- a/src/hal/rom.zig
    +++ b/src/hal/rom.zig
    @@ -100,8 +100,8 @@ pub fn rom_table_code(c1: u8, c2: u8) u32 {
     ///
     /// The converted pointer
     pub inline fn rom_hword_as_ptr(rom_addr: u32) *anyopaque {
    -    const ptr_to_ptr = @intToPtr(*u16, rom_addr);
    -    return @intToPtr(*anyopaque, @intCast(usize, ptr_to_ptr.*));
    +    const ptr_to_ptr = @ptrFromInt(*u16, rom_addr);
    +    return @ptrFromInt(*anyopaque, @intCast(usize, ptr_to_ptr.*));
     }
     
     /// Lookup a bootrom function by code (inline)
    @@ -115,7 +115,7 @@ pub inline fn rom_hword_as_ptr(rom_addr: u32) *anyopaque {
     pub inline fn _rom_func_lookup(code: Code) *anyopaque {
         const rom_table_lookup = @ptrCast(*signatures.rom_table_lookup, rom_hword_as_ptr(0x18));
         const func_table = @ptrCast(*u16, @alignCast(2, rom_hword_as_ptr(0x14)));
    -    return rom_table_lookup(func_table, @enumToInt(code));
    +    return rom_table_lookup(func_table, @intFromEnum(code));
     }
     
     /// Lookup a bootrom function by code
    diff --git a/src/hal/spi.zig b/src/hal/spi.zig
    index ee02131d7..251b61bc7 100644
    --- a/src/hal/spi.zig
    +++ b/src/hal/spi.zig
    @@ -22,14 +22,14 @@ pub const Config = struct {
     };
     
     pub fn num(n: u1) SPI {
    -    return @intToEnum(SPI, n);
    +    return @enumFromInt(SPI, n);
     }
     
     pub const SPI = enum(u1) {
         _,
     
         fn get_regs(spi: SPI) *volatile SpiRegs {
    -        return switch (@enumToInt(spi)) {
    +        return switch (@intFromEnum(spi)) {
                 0 => SPI0,
                 1 => SPI1,
             };
    diff --git a/src/hal/time.zig b/src/hal/time.zig
    index e6cace556..95691cc10 100644
    --- a/src/hal/time.zig
    +++ b/src/hal/time.zig
    @@ -7,11 +7,11 @@ pub const Absolute = enum(u64) {
         _,
     
         pub fn from_us(us: u64) Absolute {
    -        return @intToEnum(Absolute, us);
    +        return @enumFromInt(Absolute, us);
         }
     
         pub fn to_us(time: Absolute) u64 {
    -        return @enumToInt(time);
    +        return @intFromEnum(time);
         }
     
         pub fn is_reached_by(deadline: Absolute, point: Absolute) bool {
    @@ -36,7 +36,7 @@ pub const Duration = enum(u64) {
         _,
     
         pub fn from_us(us: u64) Duration {
    -        return @intToEnum(Duration, us);
    +        return @enumFromInt(Duration, us);
         }
     
         pub fn from_ms(ms: u64) Duration {
    @@ -44,7 +44,7 @@ pub const Duration = enum(u64) {
         }
     
         pub fn to_us(duration: Duration) u64 {
    -        return @enumToInt(duration);
    +        return @intFromEnum(duration);
         }
     
         pub fn less_than(self: Duration, other: Duration) bool {
    @@ -67,14 +67,14 @@ pub fn get_time_since_boot() Absolute {
             var low_word = TIMER.TIMERAWL;
             const next_high_word = TIMER.TIMERAWH;
             if (next_high_word == high_word)
    -            break @intToEnum(Absolute, @intCast(u64, high_word) << 32 | low_word);
    +            break @enumFromInt(Absolute, @intCast(u64, high_word) << 32 | low_word);
     
             high_word = next_high_word;
         } else unreachable;
     }
     
     pub fn make_timeout_us(timeout_us: u64) Absolute {
    -    return @intToEnum(Absolute, get_time_since_boot().to_us() + timeout_us);
    +    return @enumFromInt(Absolute, get_time_since_boot().to_us() + timeout_us);
     }
     
     pub fn sleep_ms(time_ms: u32) void {
    diff --git a/src/hal/uart.zig b/src/hal/uart.zig
    index b7a9b114f..678d9799d 100644
    --- a/src/hal/uart.zig
    +++ b/src/hal/uart.zig
    @@ -43,7 +43,7 @@ pub const Config = struct {
     };
     
     pub fn num(n: u1) UART {
    -    return @intToEnum(UART, n);
    +    return @enumFromInt(UART, n);
     }
     
     pub const UART = enum(u1) {
    @@ -63,7 +63,7 @@ pub const UART = enum(u1) {
         }
     
         fn get_regs(uart: UART) *volatile UartRegs {
    -        return switch (@enumToInt(uart)) {
    +        return switch (@intFromEnum(uart)) {
                 0 => UART0,
                 1 => UART1,
             };
    @@ -122,7 +122,7 @@ pub const UART = enum(u1) {
         }
     
         pub fn dreq_tx(uart: UART) dma.Dreq {
    -        return switch (@enumToInt(uart)) {
    +        return switch (@intFromEnum(uart)) {
                 0 => .uart0_tx,
                 1 => .uart1_tx,
             };
    diff --git a/src/hal/usb.zig b/src/hal/usb.zig
    index e2147f536..60a9f6912 100644
    --- a/src/hal/usb.zig
    +++ b/src/hal/usb.zig
    @@ -45,7 +45,7 @@ pub var EP0_OUT_CFG: usb.EndpointConfiguration = .{
             .length = @intCast(u8, @sizeOf(usb.EndpointDescriptor)),
             .descriptor_type = usb.DescType.Endpoint,
             .endpoint_address = usb.EP0_OUT_ADDR,
    -        .attributes = @enumToInt(usb.TransferType.Control),
    +        .attributes = @intFromEnum(usb.TransferType.Control),
             .max_packet_size = 64,
             .interval = 0,
         },
    @@ -60,7 +60,7 @@ pub var EP0_IN_CFG: usb.EndpointConfiguration = .{
             .length = @intCast(u8, @sizeOf(usb.EndpointDescriptor)),
             .descriptor_type = usb.DescType.Endpoint,
             .endpoint_address = usb.EP0_IN_ADDR,
    -        .attributes = @enumToInt(usb.TransferType.Control),
    +        .attributes = @intFromEnum(usb.TransferType.Control),
             .max_packet_size = 64,
             .interval = 0,
         },
    @@ -89,26 +89,26 @@ pub const buffers = struct {
     
         /// Mapping to the different data buffers in DPSRAM
         pub var B: usb.Buffers = .{
    -        .ep0_buffer0 = @intToPtr([*]u8, USB_EP0_BUFFER0),
    -        .ep0_buffer1 = @intToPtr([*]u8, USB_EP0_BUFFER1),
    +        .ep0_buffer0 = @ptrFromInt([*]u8, USB_EP0_BUFFER0),
    +        .ep0_buffer1 = @ptrFromInt([*]u8, USB_EP0_BUFFER1),
             // We will initialize this comptime in a loop
             .rest = .{
    -            @intToPtr([*]u8, USB_BUFFERS + (0 * BUFFER_SIZE)),
    -            @intToPtr([*]u8, USB_BUFFERS + (1 * BUFFER_SIZE)),
    -            @intToPtr([*]u8, USB_BUFFERS + (2 * BUFFER_SIZE)),
    -            @intToPtr([*]u8, USB_BUFFERS + (3 * BUFFER_SIZE)),
    -            @intToPtr([*]u8, USB_BUFFERS + (4 * BUFFER_SIZE)),
    -            @intToPtr([*]u8, USB_BUFFERS + (5 * BUFFER_SIZE)),
    -            @intToPtr([*]u8, USB_BUFFERS + (6 * BUFFER_SIZE)),
    -            @intToPtr([*]u8, USB_BUFFERS + (7 * BUFFER_SIZE)),
    -            @intToPtr([*]u8, USB_BUFFERS + (8 * BUFFER_SIZE)),
    -            @intToPtr([*]u8, USB_BUFFERS + (9 * BUFFER_SIZE)),
    -            @intToPtr([*]u8, USB_BUFFERS + (10 * BUFFER_SIZE)),
    -            @intToPtr([*]u8, USB_BUFFERS + (11 * BUFFER_SIZE)),
    -            @intToPtr([*]u8, USB_BUFFERS + (12 * BUFFER_SIZE)),
    -            @intToPtr([*]u8, USB_BUFFERS + (13 * BUFFER_SIZE)),
    -            @intToPtr([*]u8, USB_BUFFERS + (14 * BUFFER_SIZE)),
    -            @intToPtr([*]u8, USB_BUFFERS + (15 * BUFFER_SIZE)),
    +            @ptrFromInt([*]u8, USB_BUFFERS + (0 * BUFFER_SIZE)),
    +            @ptrFromInt([*]u8, USB_BUFFERS + (1 * BUFFER_SIZE)),
    +            @ptrFromInt([*]u8, USB_BUFFERS + (2 * BUFFER_SIZE)),
    +            @ptrFromInt([*]u8, USB_BUFFERS + (3 * BUFFER_SIZE)),
    +            @ptrFromInt([*]u8, USB_BUFFERS + (4 * BUFFER_SIZE)),
    +            @ptrFromInt([*]u8, USB_BUFFERS + (5 * BUFFER_SIZE)),
    +            @ptrFromInt([*]u8, USB_BUFFERS + (6 * BUFFER_SIZE)),
    +            @ptrFromInt([*]u8, USB_BUFFERS + (7 * BUFFER_SIZE)),
    +            @ptrFromInt([*]u8, USB_BUFFERS + (8 * BUFFER_SIZE)),
    +            @ptrFromInt([*]u8, USB_BUFFERS + (9 * BUFFER_SIZE)),
    +            @ptrFromInt([*]u8, USB_BUFFERS + (10 * BUFFER_SIZE)),
    +            @ptrFromInt([*]u8, USB_BUFFERS + (11 * BUFFER_SIZE)),
    +            @ptrFromInt([*]u8, USB_BUFFERS + (12 * BUFFER_SIZE)),
    +            @ptrFromInt([*]u8, USB_BUFFERS + (13 * BUFFER_SIZE)),
    +            @ptrFromInt([*]u8, USB_BUFFERS + (14 * BUFFER_SIZE)),
    +            @ptrFromInt([*]u8, USB_BUFFERS + (15 * BUFFER_SIZE)),
             },
         };
     };
    @@ -273,8 +273,8 @@ pub const F = struct {
                 if (ep.endpoint_control_index) |epci| {
                     // We need to compute the offset from the base of USB SRAM to the
                     // buffer we're choosing, because that's how the peripheral do.
    -                const buf_base = @ptrToInt(buffers.B.get(ep.data_buffer_index));
    -                const dpram_base = @ptrToInt(peripherals.USBCTRL_DPRAM);
    +                const buf_base = @intFromPtr(buffers.B.get(ep.data_buffer_index));
    +                const dpram_base = @intFromPtr(peripherals.USBCTRL_DPRAM);
                     // The offset _should_ fit in a u16, but if we've gotten something
                     // wrong in the past few lines, a common symptom will be integer
                     // overflow producing a Very Large Number,
    
    From 6e68f32b4bfab2c3756fc2250ab2e314d1837d7f Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 27 Jun 2023 20:31:39 -0700
    Subject: [PATCH 173/286] update microzig (#20)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 958894191..9392fe0f7 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 95889419155b7ffb1b11055549540096eaa2a6c5
    +Subproject commit 9392fe0f7bddde26155c181ab80b70097b49c791
    
    From f74311e78502d500f4ae921549ce54a71c33b210 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 27 Jun 2023 20:31:52 -0700
    Subject: [PATCH 174/286] update microzig (#23)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 958894191..9392fe0f7 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 95889419155b7ffb1b11055549540096eaa2a6c5
    +Subproject commit 9392fe0f7bddde26155c181ab80b70097b49c791
    
    From 32c4eacccf4ada2fa2110fc8555cc0151022cd29 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 27 Jun 2023 20:32:09 -0700
    Subject: [PATCH 175/286] update microzig (#20)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 958894191..9392fe0f7 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 95889419155b7ffb1b11055549540096eaa2a6c5
    +Subproject commit 9392fe0f7bddde26155c181ab80b70097b49c791
    
    From f0441139a6718cec0ac92e6f6d99ba6563c4b0e4 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 27 Jun 2023 20:32:16 -0700
    Subject: [PATCH 176/286] update microzig (#22)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 958894191..9392fe0f7 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 95889419155b7ffb1b11055549540096eaa2a6c5
    +Subproject commit 9392fe0f7bddde26155c181ab80b70097b49c791
    
    From c197a153127442e0e9af1456bc33faa45c2768dd Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 27 Jun 2023 20:32:24 -0700
    Subject: [PATCH 177/286] update microzig (#67)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index a49fad973..9392fe0f7 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit a49fad973077dffd5fa0b392720295ad033f076e
    +Subproject commit 9392fe0f7bddde26155c181ab80b70097b49c791
    
    From e539cce4e54b27871d6ea69deaf1af23f594aa31 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 27 Jun 2023 20:32:35 -0700
    Subject: [PATCH 178/286] update microzig (#20)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 958894191..9392fe0f7 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 95889419155b7ffb1b11055549540096eaa2a6c5
    +Subproject commit 9392fe0f7bddde26155c181ab80b70097b49c791
    
    From 7afd50f1a8bdd8c2d47a19728e7229249700898c Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 27 Jun 2023 20:32:46 -0700
    Subject: [PATCH 179/286] update microzig (#22)
    
    Co-authored-by: mattnite 
    ---
     deps/microzig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/deps/microzig b/deps/microzig
    index 958894191..9392fe0f7 160000
    --- a/deps/microzig
    +++ b/deps/microzig
    @@ -1 +1 @@
    -Subproject commit 95889419155b7ffb1b11055549540096eaa2a6c5
    +Subproject commit 9392fe0f7bddde26155c181ab80b70097b49c791
    
    From 2b5c6096b03017748b0b5762657e5f3b2aa66533 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 27 Jun 2023 21:10:35 -0700
    Subject: [PATCH 180/286] builtin type inference fix (#68)
    
    ---
     examples/flash_program.zig           |  2 +-
     examples/random.zig                  |  4 +-
     examples/squarewave.zig              | 29 +++++-----
     examples/usb_device.zig              | 12 ++---
     examples/usb_hid.zig                 | 12 ++---
     examples/ws2812.zig                  |  2 +-
     src/chips/RP2040.zig                 | 80 ++++++++++++++--------------
     src/hal/adc.zig                      | 14 ++---
     src/hal/clocks.zig                   |  4 +-
     src/hal/dma.zig                      |  4 +-
     src/hal/flash.zig                    |  2 +-
     src/hal/gpio.zig                     | 12 ++---
     src/hal/hw.zig                       | 12 ++---
     src/hal/i2c.zig                      | 14 ++---
     src/hal/multicore.zig                |  2 +-
     src/hal/pins.zig                     |  6 +--
     src/hal/pio.zig                      | 26 ++++-----
     src/hal/pio/assembler.zig            |  2 +-
     src/hal/pio/assembler/Expression.zig | 14 ++---
     src/hal/pio/assembler/encoder.zig    | 16 +++---
     src/hal/pio/assembler/tokenizer.zig  | 10 ++--
     src/hal/pwm.zig                      |  2 +-
     src/hal/random.zig                   |  4 +-
     src/hal/resets.zig                   | 10 ++--
     src/hal/rom.zig                      | 46 ++++++++--------
     src/hal/spi.zig                      |  6 +--
     src/hal/time.zig                     |  8 +--
     src/hal/uart.zig                     |  8 +--
     src/hal/usb.zig                      | 54 +++++++++----------
     29 files changed, 210 insertions(+), 207 deletions(-)
    
    diff --git a/examples/flash_program.zig b/examples/flash_program.zig
    index d38d0aea6..48754e165 100644
    --- a/examples/flash_program.zig
    +++ b/examples/flash_program.zig
    @@ -14,7 +14,7 @@ const uart_tx_pin = gpio.num(0);
     const uart_rx_pin = gpio.num(1);
     
     const flash_target_offset: u32 = 256 * 1024;
    -const flash_target_contents = @ptrFromInt([*]const u8, rp2040.flash.XIP_BASE + flash_target_offset);
    +const flash_target_contents = @as([*]const u8, @ptrFromInt(rp2040.flash.XIP_BASE + flash_target_offset));
     
     pub fn panic(message: []const u8, _: ?*std.builtin.StackTrace, _: ?usize) noreturn {
         std.log.err("panic: {s}", .{message});
    diff --git a/examples/random.zig b/examples/random.zig
    index 40d2f6816..34d03d1c7 100644
    --- a/examples/random.zig
    +++ b/examples/random.zig
    @@ -52,7 +52,7 @@ pub fn main() !void {
             rng.bytes(buffer[0..]);
             counter += 8;
             for (buffer) |byte| {
    -            dist[@intCast(usize, byte)] += 1;
    +            dist[@as(usize, @intCast(byte))] += 1;
             }
             std.log.info("Generate random number: {any}", .{buffer});
     
    @@ -60,7 +60,7 @@ pub fn main() !void {
                 var i: usize = 0;
                 std.log.info("Distribution:", .{});
                 while (i < 256) : (i += 1) {
    -                std.log.info("{} -> {}, {d:2}%", .{ i, dist[i], @floatFromInt(f32, dist[i]) / @floatFromInt(f32, counter) });
    +                std.log.info("{} -> {}, {d:2}%", .{ i, dist[i], @as(f32, @floatFromInt(dist[i])) / @as(f32, @floatFromInt(counter)) });
                 }
             }
             time.sleep_ms(1000);
    diff --git a/examples/squarewave.zig b/examples/squarewave.zig
    index 0564b6259..0894d9a0c 100644
    --- a/examples/squarewave.zig
    +++ b/examples/squarewave.zig
    @@ -6,19 +6,22 @@ const gpio = rp2040.gpio;
     const Pio = rp2040.pio.Pio;
     const StateMachine = rp2040.pio.StateMachine;
     
    -const squarewave_program = rp2040.pio.assemble(
    -    \\;
    -    \\; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    -    \\;
    -    \\; SPDX-License-Identifier: BSD-3-Clause
    -    \\;
    -    \\.program squarewave
    -    \\    set pindirs, 1   ; Set pin to output
    -    \\again:
    -    \\    set pins, 1 [1]  ; Drive pin high and then delay for one cycle
    -    \\    set pins, 0      ; Drive pin low
    -    \\    jmp again        ; Set PC to label `again`
    -, .{}).get_program_by_name("squarewave");
    +const squarewave_program = blk: {
    +    @setEvalBranchQuota(2000);
    +    break :blk rp2040.pio.assemble(
    +        \\;
    +        \\; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    +        \\;
    +        \\; SPDX-License-Identifier: BSD-3-Clause
    +        \\;
    +        \\.program squarewave
    +        \\    set pindirs, 1   ; Set pin to output
    +        \\again:
    +        \\    set pins, 1 [1]  ; Drive pin high and then delay for one cycle
    +        \\    set pins, 0      ; Drive pin low
    +        \\    jmp again        ; Set PC to label `again`
    +    , .{}).get_program_by_name("squarewave");
    +};
     
     // Pick one PIO instance arbitrarily. We're also arbitrarily picking state
     // machine 0 on this PIO instance (the state machines are numbered 0 to 3
    diff --git a/examples/usb_device.zig b/examples/usb_device.zig
    index d2b243d6a..8f2d74e4f 100644
    --- a/examples/usb_device.zig
    +++ b/examples/usb_device.zig
    @@ -38,7 +38,7 @@ fn ep1_out_callback(dc: *usb.DeviceConfiguration, data: []const u8) void {
     // add your own endpoints to...
     pub var EP1_OUT_CFG: usb.EndpointConfiguration = .{
         .descriptor = &usb.EndpointDescriptor{
    -        .length = @intCast(u8, @sizeOf(usb.EndpointDescriptor)),
    +        .length = @as(u8, @intCast(@sizeOf(usb.EndpointDescriptor))),
             .descriptor_type = usb.DescType.Endpoint,
             .endpoint_address = usb.Dir.Out.endpoint(1),
             .attributes = @intFromEnum(usb.TransferType.Bulk),
    @@ -55,7 +55,7 @@ pub var EP1_OUT_CFG: usb.EndpointConfiguration = .{
     
     pub var EP1_IN_CFG: usb.EndpointConfiguration = .{
         .descriptor = &usb.EndpointDescriptor{
    -        .length = @intCast(u8, @sizeOf(usb.EndpointDescriptor)),
    +        .length = @as(u8, @intCast(@sizeOf(usb.EndpointDescriptor))),
             .descriptor_type = usb.DescType.Endpoint,
             .endpoint_address = usb.Dir.In.endpoint(1),
             .attributes = @intFromEnum(usb.TransferType.Bulk),
    @@ -73,7 +73,7 @@ pub var EP1_IN_CFG: usb.EndpointConfiguration = .{
     // This is our device configuration
     pub var DEVICE_CONFIGURATION: usb.DeviceConfiguration = .{
         .device_descriptor = &.{
    -        .length = @intCast(u8, @sizeOf(usb.DeviceDescriptor)),
    +        .length = @as(u8, @intCast(@sizeOf(usb.DeviceDescriptor))),
             .descriptor_type = usb.DescType.Device,
             .bcd_usb = 0x0110,
             .device_class = 0,
    @@ -89,7 +89,7 @@ pub var DEVICE_CONFIGURATION: usb.DeviceConfiguration = .{
             .num_configurations = 1,
         },
         .interface_descriptor = &.{
    -        .length = @intCast(u8, @sizeOf(usb.InterfaceDescriptor)),
    +        .length = @as(u8, @intCast(@sizeOf(usb.InterfaceDescriptor))),
             .descriptor_type = usb.DescType.Interface,
             .interface_number = 0,
             .alternate_setting = 0,
    @@ -101,9 +101,9 @@ pub var DEVICE_CONFIGURATION: usb.DeviceConfiguration = .{
             .interface_s = 0,
         },
         .config_descriptor = &.{
    -        .length = @intCast(u8, @sizeOf(usb.ConfigurationDescriptor)),
    +        .length = @as(u8, @intCast(@sizeOf(usb.ConfigurationDescriptor))),
             .descriptor_type = usb.DescType.Config,
    -        .total_length = @intCast(u8, @sizeOf(usb.ConfigurationDescriptor) + @sizeOf(usb.InterfaceDescriptor) + @sizeOf(usb.EndpointDescriptor) + @sizeOf(usb.EndpointDescriptor)),
    +        .total_length = @as(u8, @intCast(@sizeOf(usb.ConfigurationDescriptor) + @sizeOf(usb.InterfaceDescriptor) + @sizeOf(usb.EndpointDescriptor) + @sizeOf(usb.EndpointDescriptor))),
             .num_interfaces = 1,
             .configuration_value = 1,
             .configuration_s = 0,
    diff --git a/examples/usb_hid.zig b/examples/usb_hid.zig
    index 2eced2b41..752111ad0 100644
    --- a/examples/usb_hid.zig
    +++ b/examples/usb_hid.zig
    @@ -38,7 +38,7 @@ fn ep1_out_callback(dc: *usb.DeviceConfiguration, data: []const u8) void {
     // add your own endpoints to...
     pub var EP1_OUT_CFG: usb.EndpointConfiguration = .{
         .descriptor = &usb.EndpointDescriptor{
    -        .length = @intCast(u8, @sizeOf(usb.EndpointDescriptor)),
    +        .length = @as(u8, @intCast(@sizeOf(usb.EndpointDescriptor))),
             .descriptor_type = usb.DescType.Endpoint,
             .endpoint_address = usb.Dir.Out.endpoint(1),
             .attributes = @intFromEnum(usb.TransferType.Interrupt),
    @@ -55,7 +55,7 @@ pub var EP1_OUT_CFG: usb.EndpointConfiguration = .{
     
     pub var EP1_IN_CFG: usb.EndpointConfiguration = .{
         .descriptor = &usb.EndpointDescriptor{
    -        .length = @intCast(u8, @sizeOf(usb.EndpointDescriptor)),
    +        .length = @as(u8, @intCast(@sizeOf(usb.EndpointDescriptor))),
             .descriptor_type = usb.DescType.Endpoint,
             .endpoint_address = usb.Dir.In.endpoint(1),
             .attributes = @intFromEnum(usb.TransferType.Interrupt),
    @@ -73,7 +73,7 @@ pub var EP1_IN_CFG: usb.EndpointConfiguration = .{
     // This is our device configuration
     pub var DEVICE_CONFIGURATION: usb.DeviceConfiguration = .{
         .device_descriptor = &.{
    -        .length = @intCast(u8, @sizeOf(usb.DeviceDescriptor)),
    +        .length = @as(u8, @intCast(@sizeOf(usb.DeviceDescriptor))),
             .descriptor_type = usb.DescType.Device,
             .bcd_usb = 0x0200,
             .device_class = 0,
    @@ -91,7 +91,7 @@ pub var DEVICE_CONFIGURATION: usb.DeviceConfiguration = .{
             .num_configurations = 1,
         },
         .interface_descriptor = &.{
    -        .length = @intCast(u8, @sizeOf(usb.InterfaceDescriptor)),
    +        .length = @as(u8, @intCast(@sizeOf(usb.InterfaceDescriptor))),
             .descriptor_type = usb.DescType.Interface,
             .interface_number = 0,
             .alternate_setting = 0,
    @@ -103,9 +103,9 @@ pub var DEVICE_CONFIGURATION: usb.DeviceConfiguration = .{
             .interface_s = 0,
         },
         .config_descriptor = &.{
    -        .length = @intCast(u8, @sizeOf(usb.ConfigurationDescriptor)),
    +        .length = @as(u8, @intCast(@sizeOf(usb.ConfigurationDescriptor))),
             .descriptor_type = usb.DescType.Config,
    -        .total_length = @intCast(u8, @sizeOf(usb.ConfigurationDescriptor) + @sizeOf(usb.InterfaceDescriptor) + @sizeOf(usb.EndpointDescriptor) + @sizeOf(usb.EndpointDescriptor)),
    +        .total_length = @as(u8, @intCast(@sizeOf(usb.ConfigurationDescriptor) + @sizeOf(usb.InterfaceDescriptor) + @sizeOf(usb.EndpointDescriptor) + @sizeOf(usb.EndpointDescriptor))),
             .num_interfaces = 1,
             .configuration_value = 1,
             .configuration_s = 0,
    diff --git a/examples/ws2812.zig b/examples/ws2812.zig
    index f61204b3b..64fbac225 100644
    --- a/examples/ws2812.zig
    +++ b/examples/ws2812.zig
    @@ -43,7 +43,7 @@ pub fn main() void {
         const cycles_per_bit: comptime_int = ws2812_program.defines[0].value + //T1
             ws2812_program.defines[1].value + //T2
             ws2812_program.defines[2].value; //T3
    -    const div = @floatFromInt(f32, rp2040.clock_config.sys.?.output_freq) /
    +    const div = @as(f32, @floatFromInt(rp2040.clock_config.sys.?.output_freq)) /
             (800_000 * cycles_per_bit);
     
         pio.sm_load_and_start_program(sm, ws2812_program, .{
    diff --git a/src/chips/RP2040.zig b/src/chips/RP2040.zig
    index 74f613486..a11f25564 100644
    --- a/src/chips/RP2040.zig
    +++ b/src/chips/RP2040.zig
    @@ -65,9 +65,9 @@ pub const devices = struct {
     
             pub const peripherals = struct {
                 ///  System Control Space
    -            pub const MPU = @ptrFromInt(*volatile types.peripherals.SCS, 0xd90);
    +            pub const MPU = @as(*volatile types.peripherals.SCS, @ptrFromInt(0xd90));
                 ///  QSPI flash execute-in-place block
    -            pub const XIP_CTRL = @ptrFromInt(*volatile types.peripherals.XIP_CTRL, 0x14000000);
    +            pub const XIP_CTRL = @as(*volatile types.peripherals.XIP_CTRL, @ptrFromInt(0x14000000));
                 ///  DW_apb_ssi has the following features:
                 ///  * APB interface – Allows for easy integration into a DesignWare Synthesizable Components for AMBA 2 implementation.
                 ///  * APB3 and APB4 protocol support.
    @@ -94,27 +94,27 @@ pub const devices = struct {
                 ///  - Interrupt polarity – active high interrupt lines.
                 ///  - Serial clock polarity – low serial-clock polarity directly after reset.
                 ///  - Serial clock phase – capture on first edge of serial-clock directly after reset.
    -            pub const XIP_SSI = @ptrFromInt(*volatile types.peripherals.XIP_SSI, 0x18000000);
    -            pub const SYSINFO = @ptrFromInt(*volatile types.peripherals.SYSINFO, 0x40000000);
    +            pub const XIP_SSI = @as(*volatile types.peripherals.XIP_SSI, @ptrFromInt(0x18000000));
    +            pub const SYSINFO = @as(*volatile types.peripherals.SYSINFO, @ptrFromInt(0x40000000));
                 ///  Register block for various chip control signals
    -            pub const SYSCFG = @ptrFromInt(*volatile types.peripherals.SYSCFG, 0x40004000);
    -            pub const CLOCKS = @ptrFromInt(*volatile types.peripherals.CLOCKS, 0x40008000);
    -            pub const RESETS = @ptrFromInt(*volatile types.peripherals.RESETS, 0x4000c000);
    -            pub const PSM = @ptrFromInt(*volatile types.peripherals.PSM, 0x40010000);
    -            pub const IO_BANK0 = @ptrFromInt(*volatile types.peripherals.IO_BANK0, 0x40014000);
    -            pub const IO_QSPI = @ptrFromInt(*volatile types.peripherals.IO_QSPI, 0x40018000);
    -            pub const PADS_BANK0 = @ptrFromInt(*volatile types.peripherals.PADS_BANK0, 0x4001c000);
    -            pub const PADS_QSPI = @ptrFromInt(*volatile types.peripherals.PADS_QSPI, 0x40020000);
    +            pub const SYSCFG = @as(*volatile types.peripherals.SYSCFG, @ptrFromInt(0x40004000));
    +            pub const CLOCKS = @as(*volatile types.peripherals.CLOCKS, @ptrFromInt(0x40008000));
    +            pub const RESETS = @as(*volatile types.peripherals.RESETS, @ptrFromInt(0x4000c000));
    +            pub const PSM = @as(*volatile types.peripherals.PSM, @ptrFromInt(0x40010000));
    +            pub const IO_BANK0 = @as(*volatile types.peripherals.IO_BANK0, @ptrFromInt(0x40014000));
    +            pub const IO_QSPI = @as(*volatile types.peripherals.IO_QSPI, @ptrFromInt(0x40018000));
    +            pub const PADS_BANK0 = @as(*volatile types.peripherals.PADS_BANK0, @ptrFromInt(0x4001c000));
    +            pub const PADS_QSPI = @as(*volatile types.peripherals.PADS_QSPI, @ptrFromInt(0x40020000));
                 ///  Controls the crystal oscillator
    -            pub const XOSC = @ptrFromInt(*volatile types.peripherals.XOSC, 0x40024000);
    -            pub const PLL_SYS = @ptrFromInt(*volatile types.peripherals.PLL_SYS, 0x40028000);
    -            pub const PLL_USB = @ptrFromInt(*volatile types.peripherals.PLL_SYS, 0x4002c000);
    +            pub const XOSC = @as(*volatile types.peripherals.XOSC, @ptrFromInt(0x40024000));
    +            pub const PLL_SYS = @as(*volatile types.peripherals.PLL_SYS, @ptrFromInt(0x40028000));
    +            pub const PLL_USB = @as(*volatile types.peripherals.PLL_SYS, @ptrFromInt(0x4002c000));
                 ///  Register block for busfabric control signals and performance counters
    -            pub const BUSCTRL = @ptrFromInt(*volatile types.peripherals.BUSCTRL, 0x40030000);
    -            pub const UART0 = @ptrFromInt(*volatile types.peripherals.UART0, 0x40034000);
    -            pub const UART1 = @ptrFromInt(*volatile types.peripherals.UART0, 0x40038000);
    -            pub const SPI0 = @ptrFromInt(*volatile types.peripherals.SPI0, 0x4003c000);
    -            pub const SPI1 = @ptrFromInt(*volatile types.peripherals.SPI0, 0x40040000);
    +            pub const BUSCTRL = @as(*volatile types.peripherals.BUSCTRL, @ptrFromInt(0x40030000));
    +            pub const UART0 = @as(*volatile types.peripherals.UART0, @ptrFromInt(0x40034000));
    +            pub const UART1 = @as(*volatile types.peripherals.UART0, @ptrFromInt(0x40038000));
    +            pub const SPI0 = @as(*volatile types.peripherals.SPI0, @ptrFromInt(0x4003c000));
    +            pub const SPI1 = @as(*volatile types.peripherals.SPI0, @ptrFromInt(0x40040000));
                 ///  DW_apb_i2c address block
                 ///  List of configuration constants for the Synopsys I2C hardware (you may see references to these in I2C register header; these are *fixed* values, set at hardware design time):
                 ///  IC_ULTRA_FAST_MODE ................ 0x0
    @@ -185,7 +185,7 @@ pub const devices = struct {
                 ///  IC_STOP_DET_IF_MASTER_ACTIVE ...... 0x0
                 ///  IC_DEFAULT_UFM_SPKLEN ............. 0x1
                 ///  IC_TX_BUFFER_DEPTH ................ 16
    -            pub const I2C0 = @ptrFromInt(*volatile types.peripherals.I2C0, 0x40044000);
    +            pub const I2C0 = @as(*volatile types.peripherals.I2C0, @ptrFromInt(0x40044000));
                 ///  DW_apb_i2c address block
                 ///  List of configuration constants for the Synopsys I2C hardware (you may see references to these in I2C register header; these are *fixed* values, set at hardware design time):
                 ///  IC_ULTRA_FAST_MODE ................ 0x0
    @@ -256,11 +256,11 @@ pub const devices = struct {
                 ///  IC_STOP_DET_IF_MASTER_ACTIVE ...... 0x0
                 ///  IC_DEFAULT_UFM_SPKLEN ............. 0x1
                 ///  IC_TX_BUFFER_DEPTH ................ 16
    -            pub const I2C1 = @ptrFromInt(*volatile types.peripherals.I2C0, 0x40048000);
    +            pub const I2C1 = @as(*volatile types.peripherals.I2C0, @ptrFromInt(0x40048000));
                 ///  Control and data interface to SAR ADC
    -            pub const ADC = @ptrFromInt(*volatile types.peripherals.ADC, 0x4004c000);
    +            pub const ADC = @as(*volatile types.peripherals.ADC, @ptrFromInt(0x4004c000));
                 ///  Simple PWM
    -            pub const PWM = @ptrFromInt(*volatile types.peripherals.PWM, 0x40050000);
    +            pub const PWM = @as(*volatile types.peripherals.PWM, @ptrFromInt(0x40050000));
                 ///  Controls time and alarms
                 ///  time is a 64 bit value indicating the time in usec since power-on
                 ///  timeh is the top 32 bits of time & timel is the bottom 32 bits
    @@ -271,35 +271,35 @@ pub const devices = struct {
                 ///  An alarm can be cancelled before it has finished by clearing the alarm_enable
                 ///  When an alarm fires, the corresponding alarm_irq is set and alarm_running is cleared
                 ///  To clear the interrupt write a 1 to the corresponding alarm_irq
    -            pub const TIMER = @ptrFromInt(*volatile types.peripherals.TIMER, 0x40054000);
    -            pub const WATCHDOG = @ptrFromInt(*volatile types.peripherals.WATCHDOG, 0x40058000);
    +            pub const TIMER = @as(*volatile types.peripherals.TIMER, @ptrFromInt(0x40054000));
    +            pub const WATCHDOG = @as(*volatile types.peripherals.WATCHDOG, @ptrFromInt(0x40058000));
                 ///  Register block to control RTC
    -            pub const RTC = @ptrFromInt(*volatile types.peripherals.RTC, 0x4005c000);
    -            pub const ROSC = @ptrFromInt(*volatile types.peripherals.ROSC, 0x40060000);
    +            pub const RTC = @as(*volatile types.peripherals.RTC, @ptrFromInt(0x4005c000));
    +            pub const ROSC = @as(*volatile types.peripherals.ROSC, @ptrFromInt(0x40060000));
                 ///  control and status for on-chip voltage regulator and chip level reset subsystem
    -            pub const VREG_AND_CHIP_RESET = @ptrFromInt(*volatile types.peripherals.VREG_AND_CHIP_RESET, 0x40064000);
    +            pub const VREG_AND_CHIP_RESET = @as(*volatile types.peripherals.VREG_AND_CHIP_RESET, @ptrFromInt(0x40064000));
                 ///  Testbench manager. Allows the programmer to know what platform their software is running on.
    -            pub const TBMAN = @ptrFromInt(*volatile types.peripherals.TBMAN, 0x4006c000);
    +            pub const TBMAN = @as(*volatile types.peripherals.TBMAN, @ptrFromInt(0x4006c000));
                 ///  DMA with separate read and write masters
    -            pub const DMA = @ptrFromInt(*volatile types.peripherals.DMA, 0x50000000);
    +            pub const DMA = @as(*volatile types.peripherals.DMA, @ptrFromInt(0x50000000));
                 ///  DPRAM layout for USB device.
    -            pub const USBCTRL_DPRAM = @ptrFromInt(*volatile types.peripherals.USBCTRL_DPRAM, 0x50100000);
    +            pub const USBCTRL_DPRAM = @as(*volatile types.peripherals.USBCTRL_DPRAM, @ptrFromInt(0x50100000));
                 ///  USB FS/LS controller device registers
    -            pub const USBCTRL_REGS = @ptrFromInt(*volatile types.peripherals.USBCTRL_REGS, 0x50110000);
    +            pub const USBCTRL_REGS = @as(*volatile types.peripherals.USBCTRL_REGS, @ptrFromInt(0x50110000));
                 ///  Programmable IO block
    -            pub const PIO0 = @ptrFromInt(*volatile types.peripherals.PIO0, 0x50200000);
    +            pub const PIO0 = @as(*volatile types.peripherals.PIO0, @ptrFromInt(0x50200000));
                 ///  Programmable IO block
    -            pub const PIO1 = @ptrFromInt(*volatile types.peripherals.PIO0, 0x50300000);
    +            pub const PIO1 = @as(*volatile types.peripherals.PIO0, @ptrFromInt(0x50300000));
                 ///  Single-cycle IO block
                 ///  Provides core-local and inter-core hardware for the two processors, with single-cycle access.
    -            pub const SIO = @ptrFromInt(*volatile types.peripherals.SIO, 0xd0000000);
    -            pub const PPB = @ptrFromInt(*volatile types.peripherals.PPB, 0xe0000000);
    +            pub const SIO = @as(*volatile types.peripherals.SIO, @ptrFromInt(0xd0000000));
    +            pub const PPB = @as(*volatile types.peripherals.PPB, @ptrFromInt(0xe0000000));
                 ///  System Tick Timer
    -            pub const SysTick = @ptrFromInt(*volatile types.peripherals.SysTick, 0xe000e010);
    +            pub const SysTick = @as(*volatile types.peripherals.SysTick, @ptrFromInt(0xe000e010));
                 ///  System Control Space
    -            pub const NVIC = @ptrFromInt(*volatile types.peripherals.NVIC, 0xe000e100);
    +            pub const NVIC = @as(*volatile types.peripherals.NVIC, @ptrFromInt(0xe000e100));
                 ///  System Control Space
    -            pub const SCB = @ptrFromInt(*volatile types.peripherals.SCB, 0xe000ed00);
    +            pub const SCB = @as(*volatile types.peripherals.SCB, @ptrFromInt(0xe000ed00));
             };
         };
     };
    diff --git a/src/hal/adc.zig b/src/hal/adc.zig
    index 973db6320..e025a6373 100644
    --- a/src/hal/adc.zig
    +++ b/src/hal/adc.zig
    @@ -17,7 +17,7 @@ pub const Error = error{
     
     /// temp_sensor is not valid because you can refer to it by name.
     pub fn input(n: u2) Input {
    -    return @enumFromInt(Input, n);
    +    return @as(Input, @enumFromInt(n));
     }
     
     /// Enable the ADC controller.
    @@ -50,7 +50,7 @@ pub fn apply(config: Config) void {
             .ERR_STICKY = 0,
             .AINSEL = 0,
             .RROBIN = if (config.round_robin) |rr|
    -            @bitCast(u5, rr)
    +            @as(u5, @bitCast(rr))
             else
                 0,
     
    @@ -63,8 +63,8 @@ pub fn apply(config: Config) void {
         if (config.sample_frequency) |sample_frequency| {
             const cycles = (48_000_000 * 256) / @as(u64, sample_frequency);
             ADC.DIV.write(.{
    -            .FRAC = @truncate(u8, cycles),
    -            .INT = @intCast(u16, (cycles >> 8) - 1),
    +            .FRAC = @as(u8, @truncate(cycles)),
    +            .INT = @as(u16, @intCast((cycles >> 8) - 1)),
     
                 .padding = 0,
             });
    @@ -85,7 +85,7 @@ pub fn select_input(in: Input) void {
     /// 4 is the temperature sensor.
     pub fn get_selected_input() Input {
         const cs = ADC.SC.read();
    -    return @enumFromInt(Input, cs.AINSEL);
    +    return @as(Input, @enumFromInt(cs.AINSEL));
     }
     
     pub const Input = enum(u3) {
    @@ -126,7 +126,7 @@ pub fn set_temp_sensor_enabled(enable: bool) void {
     /// T must be floating point.
     pub fn temp_sensor_result_to_celcius(comptime T: type, comptime vref: T, result: u12) T {
         // TODO: consider fixed-point
    -    const raw = @floatFromInt(T, result);
    +    const raw = @as(T, @floatFromInt(result));
         const voltage: T = vref * raw / 0x0fff;
         return (27.0 - ((voltage - 0.706) / 0.001721));
     }
    @@ -144,7 +144,7 @@ pub const InputMask = packed struct(u5) {
     /// 0 will disable round-robin mode but `disableRoundRobin()` is provided so
     /// the user may be explicit.
     pub fn round_robin_set(enabled_inputs: InputMask) void {
    -    ADC.CS.modify(.{ .RROBIN = @bitCast(u5, enabled_inputs) });
    +    ADC.CS.modify(.{ .RROBIN = @as(u5, @bitCast(enabled_inputs)) });
     }
     
     /// Disable round-robin sample mode.
    diff --git a/src/hal/clocks.zig b/src/hal/clocks.zig
    index cb5350f9e..9a027aa76 100644
    --- a/src/hal/clocks.zig
    +++ b/src/hal/clocks.zig
    @@ -83,7 +83,7 @@ pub const Generator = enum(u32) {
             assert(24 == @sizeOf([2]GeneratorRegs));
         }
     
    -    const generators = @ptrCast(*volatile [@typeInfo(Generator).Enum.fields.len]GeneratorRegs, CLOCKS);
    +    const generators = @as(*volatile [@typeInfo(Generator).Enum.fields.len]GeneratorRegs, @ptrCast(CLOCKS));
     
         fn get_regs(generator: Generator) *volatile GeneratorRegs {
             return &generators[@intFromEnum(generator)];
    @@ -617,7 +617,7 @@ pub const Configuration = struct {
             // source frequency has to be faster because dividing will always reduce.
             assert(input.freq >= output_freq);
     
    -        const div = @intCast(u32, (@intCast(u64, input.freq) << 8) / output_freq);
    +        const div = @as(u32, @intCast((@as(u64, @intCast(input.freq)) << 8) / output_freq));
     
             // check divisor
             if (div > generator.get_div())
    diff --git a/src/hal/dma.zig b/src/hal/dma.zig
    index 35b285a5c..469966f2a 100644
    --- a/src/hal/dma.zig
    +++ b/src/hal/dma.zig
    @@ -19,7 +19,7 @@ pub const Dreq = enum(u6) {
     pub fn channel(n: u4) Channel {
         assert(n < num_channels);
     
    -    return @enumFromInt(Channel, n);
    +    return @as(Channel, @enumFromInt(n));
     }
     
     pub fn claim_unused_channel() ?Channel {
    @@ -76,7 +76,7 @@ pub const Channel = enum(u4) {
         };
     
         fn get_regs(chan: Channel) *volatile Regs {
    -        const regs = @ptrCast(*volatile [12]Regs, &DMA.CH0_READ_ADDR);
    +        const regs = @as(*volatile [12]Regs, @ptrCast(&DMA.CH0_READ_ADDR));
             return ®s[@intFromEnum(chan)];
         }
     
    diff --git a/src/hal/flash.zig b/src/hal/flash.zig
    index cb86c72d3..7ce32060d 100644
    --- a/src/hal/flash.zig
    +++ b/src/hal/flash.zig
    @@ -23,7 +23,7 @@ pub const boot2 = struct {
         /// Copy the 2nd stage bootloader into memory
         pub fn flash_init() linksection(".time_critical") void {
             if (copyout_valid) return;
    -        const bootloader = @ptrFromInt([*]u32, XIP_BASE);
    +        const bootloader = @as([*]u32, @ptrFromInt(XIP_BASE));
             var i: usize = 0;
             while (i < BOOT2_SIZE_BYTES) : (i += 1) {
                 copyout[i] = bootloader[i];
    diff --git a/src/hal/gpio.zig b/src/hal/gpio.zig
    index 3b9e5aea2..dffe3d1f4 100644
    --- a/src/hal/gpio.zig
    +++ b/src/hal/gpio.zig
    @@ -72,11 +72,11 @@ pub fn num(n: u5) Pin {
         if (n > 29)
             @panic("the RP2040 only has GPIO 0-29");
     
    -    return @enumFromInt(Pin, n);
    +    return @as(Pin, @enumFromInt(n));
     }
     
     pub fn mask(m: u32) Mask {
    -    return @enumFromInt(Mask, m);
    +    return @as(Mask, @enumFromInt(m));
     }
     
     pub const Mask = enum(u30) {
    @@ -85,7 +85,7 @@ pub const Mask = enum(u30) {
         pub fn set_function(self: Mask, function: Function) void {
             const raw_mask = @intFromEnum(self);
             for (0..@bitSizeOf(Mask)) |i| {
    -            const bit = @intCast(u5, i);
    +            const bit = @as(u5, @intCast(i));
                 if (0 != raw_mask & (@as(u32, 1) << bit))
                     num(bit).set_function(function);
             }
    @@ -102,7 +102,7 @@ pub const Mask = enum(u30) {
         pub fn set_pull(self: Mask, pull: ?Pull) void {
             const raw_mask = @intFromEnum(self);
             for (0..@bitSizeOf(Mask)) |i| {
    -            const bit = @intCast(u5, i);
    +            const bit = @as(u5, @intCast(i));
                 if (0 != raw_mask & (@as(u32, 1) << bit))
                     num(bit).set_pull(pull);
             }
    @@ -154,12 +154,12 @@ pub const Pin = enum(u5) {
         pub const PadsReg = @TypeOf(PADS_BANK0.GPIO0);
     
         fn get_regs(gpio: Pin) *volatile Regs {
    -        const regs = @ptrCast(*volatile [30]Regs, &IO_BANK0.GPIO0_STATUS);
    +        const regs = @as(*volatile [30]Regs, @ptrCast(&IO_BANK0.GPIO0_STATUS));
             return ®s[@intFromEnum(gpio)];
         }
     
         fn get_pads_reg(gpio: Pin) *volatile PadsReg {
    -        const regs = @ptrCast(*volatile [30]PadsReg, &PADS_BANK0.GPIO0);
    +        const regs = @as(*volatile [30]PadsReg, @ptrCast(&PADS_BANK0.GPIO0));
             return ®s[@intFromEnum(gpio)];
         }
     
    diff --git a/src/hal/hw.zig b/src/hal/hw.zig
    index 28a198105..8227027de 100644
    --- a/src/hal/hw.zig
    +++ b/src/hal/hw.zig
    @@ -20,27 +20,27 @@ const set_bits = @as(u32, 0x2) << 12;
     const clear_bits = @as(u32, 0x3) << 12;
     
     pub fn clear_alias_raw(ptr: anytype) *volatile u32 {
    -    return @ptrFromInt(*volatile u32, @intFromPtr(ptr) | clear_bits);
    +    return @as(*volatile u32, @ptrFromInt(@intFromPtr(ptr) | clear_bits));
     }
     
     pub fn set_alias_raw(ptr: anytype) *volatile u32 {
    -    return @ptrFromInt(*volatile u32, @intFromPtr(ptr) | set_bits);
    +    return @as(*volatile u32, @ptrFromInt(@intFromPtr(ptr) | set_bits));
     }
     
     pub fn xor_alias_raw(ptr: anytype) *volatile u32 {
    -    return @ptrFromInt(*volatile u32, @intFromPtr(ptr) | xor_bits);
    +    return @as(*volatile u32, @ptrFromInt(@intFromPtr(ptr) | xor_bits));
     }
     
     pub fn clear_alias(ptr: anytype) @TypeOf(ptr) {
    -    return @ptrFromInt(@TypeOf(ptr), @intFromPtr(ptr) | clear_bits);
    +    return @as(@TypeOf(ptr), @ptrFromInt(@intFromPtr(ptr) | clear_bits));
     }
     
     pub fn set_alias(ptr: anytype) @TypeOf(ptr) {
    -    return @ptrFromInt(@TypeOf(ptr), @intFromPtr(ptr) | set_bits);
    +    return @as(@TypeOf(ptr), @ptrFromInt(@intFromPtr(ptr) | set_bits));
     }
     
     pub fn xor_alias(ptr: anytype) @TypeOf(ptr) {
    -    return @ptrFromInt(@TypeOf(ptr), @intFromPtr(ptr) | xor_bits);
    +    return @as(@TypeOf(ptr), @ptrFromInt(@intFromPtr(ptr) | xor_bits));
     }
     
     pub inline fn tight_loop_contents() void {
    diff --git a/src/hal/i2c.zig b/src/hal/i2c.zig
    index cc7467ee8..b000e35e6 100644
    --- a/src/hal/i2c.zig
    +++ b/src/hal/i2c.zig
    @@ -20,14 +20,14 @@ pub const Config = struct {
     };
     
     pub fn num(n: u1) I2C {
    -    return @enumFromInt(I2C, n);
    +    return @as(I2C, @enumFromInt(n));
     }
     
     pub const Address = enum(u7) {
         _,
     
         pub fn new(addr: u7) Address {
    -        var a = @enumFromInt(Address, addr);
    +        var a = @as(Address, @enumFromInt(addr));
             std.debug.assert(!a.is_reserved());
             return a;
         }
    @@ -167,10 +167,10 @@ pub const I2C = enum(u1) {
     
             // Always use "fast" mode (<= 400 kHz, works fine for standard mode too)
             regs.IC_CON.modify(.{ .SPEED = .{ .value = .FAST } });
    -        regs.IC_FS_SCL_HCNT.write(.{ .IC_FS_SCL_HCNT = @intCast(u16, hcnt), .padding = 0 });
    -        regs.IC_FS_SCL_LCNT.write(.{ .IC_FS_SCL_LCNT = @intCast(u16, lcnt), .padding = 0 });
    -        regs.IC_FS_SPKLEN.write(.{ .IC_FS_SPKLEN = if (lcnt < 16) 1 else @intCast(u8, lcnt / 16), .padding = 0 });
    -        regs.IC_SDA_HOLD.modify(.{ .IC_SDA_TX_HOLD = @intCast(u16, sda_tx_hold_count) });
    +        regs.IC_FS_SCL_HCNT.write(.{ .IC_FS_SCL_HCNT = @as(u16, @intCast(hcnt)), .padding = 0 });
    +        regs.IC_FS_SCL_LCNT.write(.{ .IC_FS_SCL_LCNT = @as(u16, @intCast(lcnt)), .padding = 0 });
    +        regs.IC_FS_SPKLEN.write(.{ .IC_FS_SPKLEN = if (lcnt < 16) 1 else @as(u8, @intCast(lcnt / 16)), .padding = 0 });
    +        regs.IC_SDA_HOLD.modify(.{ .IC_SDA_TX_HOLD = @as(u16, @intCast(sda_tx_hold_count)) });
     
             i2c.enable();
     
    @@ -343,7 +343,7 @@ pub const I2C = enum(u1) {
                     }
     
                     const abort_reason = regs.IC_TX_ABRT_SOURCE.read();
    -                if (@bitCast(u32, abort_reason) != 0) {
    +                if (@as(u32, @bitCast(abort_reason)) != 0) {
                         // Note clearing the abort flag also clears the reason, and
                         // this instance of flag is clear-on-read! Note also the
                         // IC_CLR_TX_ABRT register always reads as 0.
    diff --git a/src/hal/multicore.zig b/src/hal/multicore.zig
    index bc2b4de78..1ca3ebbe2 100644
    --- a/src/hal/multicore.zig
    +++ b/src/hal/multicore.zig
    @@ -70,7 +70,7 @@ pub fn launch_core1_with_stack(entrypoint: *const fn () void, stack: []u32) void
             fn wrapper(_: u32, _: u32, _: u32, _: u32, entry: u32, stack_base: [*]u32) callconv(.C) void {
                 // TODO: protect stack using MPU
                 _ = stack_base;
    -            @ptrFromInt(*const fn () void, entry)();
    +            @as(*const fn () void, @ptrFromInt(entry))();
             }
         }.wrapper;
     
    diff --git a/src/hal/pins.zig b/src/hal/pins.zig
    index 5de0810c3..3ca323865 100644
    --- a/src/hal/pins.zig
    +++ b/src/hal/pins.zig
    @@ -362,13 +362,13 @@ pub fn Pins(comptime config: GlobalConfiguration) type {
                     } else if (pin_config.function.is_adc()) {
                         pin_field.name = pin_config.name orelse @tagName(pin_config.function);
                         pin_field.type = adc.Input;
    -                    pin_field.default_value = @ptrCast(?*const anyopaque, switch (pin_config.function) {
    +                    pin_field.default_value = @as(?*const anyopaque, @ptrCast(switch (pin_config.function) {
                             .ADC0 => &adc.Input.ain0,
                             .ADC1 => &adc.Input.ain1,
                             .ADC2 => &adc.Input.ain2,
                             .ADC3 => &adc.Input.ain3,
                             else => unreachable,
    -                    });
    +                    }));
                     } else {
                         continue;
                     }
    @@ -536,7 +536,7 @@ pub const GlobalConfiguration = struct {
             var ret: Pins(config) = undefined;
             inline for (@typeInfo(Pins(config)).Struct.fields) |field| {
                 if (field.default_value) |default_value| {
    -                @field(ret, field.name) = @ptrCast(*const field.field_type, default_value).*;
    +                @field(ret, field.name) = @as(*const field.field_type, @ptrCast(default_value)).*;
                 } else {
                     @field(ret, field.name) = .{};
                 }
    diff --git a/src/hal/pio.zig b/src/hal/pio.zig
    index 6b7ca1fb6..9472728d2 100644
    --- a/src/hal/pio.zig
    +++ b/src/hal/pio.zig
    @@ -74,10 +74,10 @@ pub const ClkDivOptions = struct {
         frac: u8 = 0,
     
         pub fn from_float(div: f32) ClkDivOptions {
    -        const fixed = @intFromFloat(u24, div * 256);
    +        const fixed = @as(u24, @intFromFloat(div * 256));
             return ClkDivOptions{
    -            .int = @truncate(u16, fixed >> 8),
    -            .frac = @truncate(u8, fixed),
    +            .int = @as(u16, @truncate(fixed >> 8)),
    +            .frac = @as(u8, @truncate(fixed)),
             };
         }
     };
    @@ -154,7 +154,7 @@ pub const Pio = enum(u1) {
     
         pub fn get_instruction_memory(self: Pio) *volatile [32]u32 {
             const regs = self.get_regs();
    -        return @ptrCast(*volatile [32]u32, ®s.INSTR_MEM0);
    +        return @as(*volatile [32]u32, @ptrCast(®s.INSTR_MEM0));
         }
     
         pub fn gpio_init(self: Pio, pin: gpio.Pin) void {
    @@ -184,7 +184,7 @@ pub const Pio = enum(u1) {
                 else
                     error.NoSpace
             else for (0..(32 - program.instructions.len)) |i| {
    -            const offset = @intCast(u5, i);
    +            const offset = @as(u5, @intCast(i));
                 if (self.can_add_program_at_offset(program, offset))
                     break offset;
             } else error.NoSpace;
    @@ -218,23 +218,23 @@ pub const Pio = enum(u1) {
     
             const claimed_mask = claimed_state_machines[@intFromEnum(self)];
             return for (0..4) |i| {
    -            const sm_mask = (@as(u4, 1) << @intCast(u2, i));
    +            const sm_mask = (@as(u4, 1) << @as(u2, @intCast(i)));
                 if (0 == (claimed_mask & sm_mask)) {
                     claimed_state_machines[@intFromEnum(self)] |= sm_mask;
    -                break @enumFromInt(StateMachine, i);
    +                break @as(StateMachine, @enumFromInt(i));
                 }
             } else error.NoSpace;
         }
     
         pub fn get_sm_regs(self: Pio, sm: StateMachine) *volatile StateMachine.Regs {
             const pio_regs = self.get_regs();
    -        const sm_regs = @ptrCast(*volatile [4]StateMachine.Regs, &pio_regs.SM0_CLKDIV);
    +        const sm_regs = @as(*volatile [4]StateMachine.Regs, @ptrCast(&pio_regs.SM0_CLKDIV));
             return &sm_regs[@intFromEnum(sm)];
         }
     
         fn get_irq_regs(self: Pio, irq: Irq) *volatile Irq.Regs {
             const pio_regs = self.get_regs();
    -        const irq_regs = @ptrCast(*volatile [2]Irq.Regs, &pio_regs.IRQ0_INTE);
    +        const irq_regs = @as(*volatile [2]Irq.Regs, @ptrCast(&pio_regs.IRQ0_INTE));
             return &irq_regs[@intFromEnum(irq)];
         }
     
    @@ -313,7 +313,7 @@ pub const Pio = enum(u1) {
     
         pub fn sm_get_tx_fifo(self: Pio, sm: StateMachine) *volatile u32 {
             const regs = self.get_regs();
    -        const fifos = @ptrCast(*volatile [4]u32, ®s.TXF0);
    +        const fifos = @as(*volatile [4]u32, @ptrCast(®s.TXF0));
             return &fifos[@intFromEnum(sm)];
         }
     
    @@ -386,7 +386,7 @@ pub const Pio = enum(u1) {
             const regs = self.get_regs();
             const levels = regs.FLEVEL.raw;
     
    -        return @truncate(u4, levels >> (@as(u5, 4) * num) + offset);
    +        return @as(u4, @truncate(levels >> (@as(u5, 4) * num) + offset));
         }
     
         fn interrupt_bit_pos(
    @@ -469,7 +469,7 @@ pub const Pio = enum(u1) {
     
         pub fn sm_exec(self: Pio, sm: StateMachine, instruction: Instruction) void {
             const sm_regs = self.get_sm_regs(sm);
    -        sm_regs.instr.raw = @bitCast(u16, instruction);
    +        sm_regs.instr.raw = @as(u16, @bitCast(instruction));
         }
     
         pub fn sm_load_and_start_program(
    @@ -498,7 +498,7 @@ pub const Pio = enum(u1) {
                     .wrap = if (program.wrap) |wrap|
                         wrap
                     else
    -                    offset + @intCast(u5, program.instructions.len),
    +                    offset + @as(u5, @intCast(program.instructions.len)),
     
                     .wrap_target = if (program.wrap_target) |wrap_target|
                         wrap_target
    diff --git a/src/hal/pio/assembler.zig b/src/hal/pio/assembler.zig
    index 1c38816ff..6c6be6f6f 100644
    --- a/src/hal/pio/assembler.zig
    +++ b/src/hal/pio/assembler.zig
    @@ -22,7 +22,7 @@ pub const Program = struct {
         wrap: ?u5,
     
         pub fn get_mask(program: Program) u32 {
    -        return (@as(u32, 1) << @intCast(u5, program.instructions.len)) - 1;
    +        return (@as(u32, 1) << @as(u5, @intCast(program.instructions.len))) - 1;
         }
     };
     
    diff --git a/src/hal/pio/assembler/Expression.zig b/src/hal/pio/assembler/Expression.zig
    index 794b5c3b1..789fb78a4 100644
    --- a/src/hal/pio/assembler/Expression.zig
    +++ b/src/hal/pio/assembler/Expression.zig
    @@ -123,7 +123,7 @@ fn trim_outer_parenthesis(str: []const u8) TrimResult {
     
         return TrimResult{
             .str = str[start..end],
    -        .index = @intCast(u32, start),
    +        .index = @as(u32, @intCast(start)),
         };
     }
     
    @@ -142,9 +142,9 @@ fn recursive_tokenize(
     
         var parenthesis_found = false;
         var depth: u32 = 0;
    -    var i = @intCast(i32, expr_str.len - 1);
    +    var i = @as(i32, @intCast(expr_str.len - 1));
         outer: while (i >= 0) : (i -= 1) {
    -        const idx = @intCast(u32, i);
    +        const idx = @as(u32, @intCast(i));
             // TODO: how about if the expression is fully enveloped in parenthesis?
             switch (expr_str[idx]) {
                 ')' => {
    @@ -176,7 +176,7 @@ fn recursive_tokenize(
                     const is_negative = (i == 0) or is_negative: {
                         var j = i - 1;
                         while (j >= 0) : (j -= 1) {
    -                        const jdx = @intCast(u32, j);
    +                        const jdx = @as(u32, @intCast(j));
                             switch (expr_str[jdx]) {
                                 ' ', '\t' => continue,
                                 '+', '-', '*', '/' => continue :outer,
    @@ -229,7 +229,7 @@ fn recursive_tokenize(
         } else {
             // if we hit this path, then the full string has been scanned, and no operators
             const trimmed = std.mem.trim(u8, expr_str, " \t");
    -        const value_index = expr_index + @intCast(u32, std.mem.indexOf(u8, expr_str, trimmed).?);
    +        const value_index = expr_index + @as(u32, @intCast(std.mem.indexOf(u8, expr_str, trimmed).?));
             try ops.append(.{
                 .op = .value,
                 .index = value_index,
    @@ -242,7 +242,7 @@ fn recursive_tokenize(
         }
     
         if (depth != 0) {
    -        diags.* = Diagnostics.init(expr_index + @intCast(u32, i), "mismatched parenthesis", .{});
    +        diags.* = Diagnostics.init(expr_index + @as(u32, @intCast(i)), "mismatched parenthesis", .{});
             return error.MismatchedParenthesis;
         }
     }
    @@ -349,7 +349,7 @@ fn recursive_evaluate(
                 }
     
                 break :blk .{
    -                .value = @bitCast(i128, @bitReverse(@bitCast(u128, values[0].num)) >> (128 - 32)),
    +                .value = @as(i128, @bitCast(@bitReverse(@as(u128, @bitCast(values[0].num))) >> (128 - 32))),
                     .index = values[0].index,
                     .consumed = .{
                         .ops = 2,
    diff --git a/src/hal/pio/assembler/encoder.zig b/src/hal/pio/assembler/encoder.zig
    index 502b37470..0d13c1b46 100644
    --- a/src/hal/pio/assembler/encoder.zig
    +++ b/src/hal/pio/assembler/encoder.zig
    @@ -87,13 +87,13 @@ pub fn Encoder(comptime options: Options) type {
                                 std.mem.copy(u8, &define_name, define.name);
                                 tmp.append(.{
                                     .name = &define_name,
    -                                .value = @intCast(i64, define.value),
    +                                .value = @as(i64, @intCast(define.value)),
                                 }) catch unreachable;
                             }
     
                             break :blk tmp.slice();
                         },
    -                    .instructions = @ptrCast([]const u16, bounded.instructions.slice()),
    +                    .instructions = @as([]const u16, @ptrCast(bounded.instructions.slice())),
                         .origin = bounded.origin,
                         .side_set = bounded.side_set,
                         .wrap_target = bounded.wrap_target,
    @@ -152,7 +152,7 @@ pub fn Encoder(comptime options: Options) type {
                 diags: *?Diagnostics,
             ) !T {
                 return switch (value) {
    -                .integer => |int| @intCast(T, int),
    +                .integer => |int| @as(T, @intCast(int)),
                     .string => |str| outer: for (define_lists) |defines| {
                         for (defines) |define| {
                             if (std.mem.eql(u8, str, define.name)) {
    @@ -166,7 +166,7 @@ pub fn Encoder(comptime options: Options) type {
                                     break :outer error.TooBig;
                                 }
     
    -                            break :outer @intCast(T, define.value);
    +                            break :outer @as(T, @intCast(define.value));
                             }
                         }
                     } else {
    @@ -189,7 +189,7 @@ pub fn Encoder(comptime options: Options) type {
                             );
                         }
     
    -                    return @intCast(T, result);
    +                    return @as(T, @intCast(result));
                     },
                 };
             }
    @@ -482,19 +482,19 @@ pub fn Encoder(comptime options: Options) type {
                     switch (token.data) {
                         .instruction => |instr| try self.encode_instruction(program, instr, token.index, diags),
                         .word => |word| try program.instructions.append(
    -                        @bitCast(Instruction, try self.evaluate(u16, program.*, word, token.index, diags)),
    +                        @as(Instruction, @bitCast(try self.evaluate(u16, program.*, word, token.index, diags))),
                         ),
                         // already processed
                         .label, .wrap_target, .wrap => {},
                         .program => {
    -                        self.index = @intCast(u32, i);
    +                        self.index = @as(u32, @intCast(i));
                             break;
                         },
     
                         else => unreachable, // invalid
                     }
                 } else if (self.tokens.len > 0)
    -                self.index = @intCast(u32, self.tokens.len);
    +                self.index = @as(u32, @intCast(self.tokens.len));
             }
     
             fn encode_program(self: *Self, diags: *?Diagnostics) !?BoundedProgram {
    diff --git a/src/hal/pio/assembler/tokenizer.zig b/src/hal/pio/assembler/tokenizer.zig
    index 29c596d2e..2aef42830 100644
    --- a/src/hal/pio/assembler/tokenizer.zig
    +++ b/src/hal/pio/assembler/tokenizer.zig
    @@ -199,7 +199,7 @@ pub const Tokenizer = struct {
     
         fn consume_peek(self: *Tokenizer, result: PeekResult) void {
             assert(self.index <= result.start);
    -        self.index = result.start + @intCast(u32, result.str.len);
    +        self.index = result.start + @as(u32, @intCast(result.str.len));
         }
     
         /// gets next arg without consuming the stream
    @@ -616,7 +616,7 @@ pub const Tokenizer = struct {
             const bit_count = if (bit_count_tmp == 32)
                 @as(u5, 0)
             else
    -            @intCast(u5, bit_count_tmp);
    +            @as(u5, @intCast(bit_count_tmp));
     
             return Token.Instruction.Payload{
                 .in = .{
    @@ -635,7 +635,7 @@ pub const Tokenizer = struct {
             const bit_count = if (bit_count_tmp == 32)
                 @as(u5, 0)
             else
    -            @intCast(u5, bit_count_tmp);
    +            @as(u5, @intCast(bit_count_tmp));
     
             return Token.Instruction.Payload{
                 .out = .{
    @@ -1644,7 +1644,7 @@ test "tokenize.instr.in" {
     
             try expect_instr_in(.{
                 .source = @field(Token.Instruction.In.Source, source),
    -            .bit_count = @intCast(u5, bit_count),
    +            .bit_count = @as(u5, @intCast(bit_count)),
             }, tokens.get(0));
         }
     }
    @@ -1667,7 +1667,7 @@ test "tokenize.instr.out" {
     
             try expect_instr_out(.{
                 .destination = @field(Token.Instruction.Out.Destination, destination),
    -            .bit_count = @intCast(u5, bit_count),
    +            .bit_count = @as(u5, @intCast(bit_count)),
             }, tokens.get(0));
         }
     }
    diff --git a/src/hal/pwm.zig b/src/hal/pwm.zig
    index 6e5fe1d3f..82c3756c4 100644
    --- a/src/hal/pwm.zig
    +++ b/src/hal/pwm.zig
    @@ -10,7 +10,7 @@ fn get_regs(comptime slice: u32) *volatile Regs {
         @import("std").debug.assert(slice < 8);
         const PwmType = microzig.chip.types.peripherals.PWM;
         const reg_diff = comptime @offsetOf(PwmType, "CH1_CSR") - @offsetOf(PwmType, "CH0_CSR");
    -    return @ptrFromInt(*volatile Regs, @intFromPtr(PWM) + reg_diff * slice);
    +    return @as(*volatile Regs, @ptrFromInt(@intFromPtr(PWM) + reg_diff * slice));
     }
     
     pub fn Pwm(comptime slice_num: u32, comptime chan: Channel) type {
    diff --git a/src/hal/random.zig b/src/hal/random.zig
    index 3a292a628..b7f102f88 100644
    --- a/src/hal/random.zig
    +++ b/src/hal/random.zig
    @@ -76,10 +76,10 @@ pub const Ascon = struct {
             var i: usize = 0;
             while (i < buffer.len) : (i += 1) {
                 // We poll RANDOMBIT eight times per cycle to build a random byte
    -            var r: u8 = @intCast(u8, peripherals.ROSC.RANDOMBIT.read().RANDOMBIT);
    +            var r: u8 = @as(u8, @intCast(peripherals.ROSC.RANDOMBIT.read().RANDOMBIT));
                 var j: usize = 0;
                 while (j < 7) : (j += 1) {
    -                r = (r << 1) | @intCast(u8, peripherals.ROSC.RANDOMBIT.read().RANDOMBIT);
    +                r = (r << 1) | @as(u8, @intCast(peripherals.ROSC.RANDOMBIT.read().RANDOMBIT));
                 }
                 buffer[i] = r;
             }
    diff --git a/src/hal/resets.zig b/src/hal/resets.zig
    index a35ad79e9..3bffa6f6f 100644
    --- a/src/hal/resets.zig
    +++ b/src/hal/resets.zig
    @@ -36,7 +36,7 @@ pub const Mask = packed struct(u32) {
     };
     
     pub fn reset(mask: Mask) void {
    -    const raw_mask = @bitCast(u32, mask);
    +    const raw_mask = @as(u32, @bitCast(mask));
     
         RESETS.RESET.raw = raw_mask;
         RESETS.RESET.raw = 0;
    @@ -45,22 +45,22 @@ pub fn reset(mask: Mask) void {
     }
     
     pub inline fn reset_block(mask: Mask) void {
    -    hw.set_alias_raw(&RESETS.RESET).* = @bitCast(u32, mask);
    +    hw.set_alias_raw(&RESETS.RESET).* = @as(u32, @bitCast(mask));
     }
     
     pub inline fn unreset_block(mask: Mask) void {
    -    hw.clear_alias_raw(&RESETS.RESET).* = @bitCast(u32, mask);
    +    hw.clear_alias_raw(&RESETS.RESET).* = @as(u32, @bitCast(mask));
     }
     
     pub fn unreset_block_wait(mask: Mask) void {
    -    const raw_mask = @bitCast(u32, mask);
    +    const raw_mask = @as(u32, @bitCast(mask));
         hw.clear_alias_raw(&RESETS.RESET).* = raw_mask;
     
         // have to bitcast after a read() instead of `RESETS.RESET_DONE.raw` due to
         // some optimization bug. While loops will not be optimzed away if the
         // condition has side effects like dereferencing a volatile pointer.
         // It seems that volatile is not propagating correctly.
    -    while (@bitCast(u32, RESETS.RESET_DONE.read()) & raw_mask != raw_mask) {}
    +    while (@as(u32, @bitCast(RESETS.RESET_DONE.read())) & raw_mask != raw_mask) {}
     }
     
     pub const masks = struct {
    diff --git a/src/hal/rom.zig b/src/hal/rom.zig
    index 7b2538750..a3980741c 100644
    --- a/src/hal/rom.zig
    +++ b/src/hal/rom.zig
    @@ -88,7 +88,7 @@ pub const signatures = struct {
     ///
     /// A 32 bit address pointing into bootrom
     pub fn rom_table_code(c1: u8, c2: u8) u32 {
    -    return @intCast(u32, c1) | (@intCast(u32, c2) << 8);
    +    return @as(u32, @intCast(c1)) | (@as(u32, @intCast(c2)) << 8);
     }
     
     /// Convert a 16 bit pointer stored at the given rom address into a pointer
    @@ -100,8 +100,8 @@ pub fn rom_table_code(c1: u8, c2: u8) u32 {
     ///
     /// The converted pointer
     pub inline fn rom_hword_as_ptr(rom_addr: u32) *anyopaque {
    -    const ptr_to_ptr = @ptrFromInt(*u16, rom_addr);
    -    return @ptrFromInt(*anyopaque, @intCast(usize, ptr_to_ptr.*));
    +    const ptr_to_ptr = @as(*u16, @ptrFromInt(rom_addr));
    +    return @as(*anyopaque, @ptrFromInt(@as(usize, @intCast(ptr_to_ptr.*))));
     }
     
     /// Lookup a bootrom function by code (inline)
    @@ -113,8 +113,8 @@ pub inline fn rom_hword_as_ptr(rom_addr: u32) *anyopaque {
     ///
     /// A anyopaque pointer to the function; must be cast by the caller
     pub inline fn _rom_func_lookup(code: Code) *anyopaque {
    -    const rom_table_lookup = @ptrCast(*signatures.rom_table_lookup, rom_hword_as_ptr(0x18));
    -    const func_table = @ptrCast(*u16, @alignCast(2, rom_hword_as_ptr(0x14)));
    +    const rom_table_lookup = @as(*signatures.rom_table_lookup, @ptrCast(rom_hword_as_ptr(0x18)));
    +    const func_table = @as(*u16, @ptrCast(@alignCast(rom_hword_as_ptr(0x14))));
         return rom_table_lookup(func_table, @intFromEnum(code));
     }
     
    @@ -140,7 +140,7 @@ pub fn popcount32(value: u32) u32 {
             var f: ?*signatures.popcount32 = null;
         };
     
    -    if (S.f == null) S.f = @ptrCast(*signatures.popcount32, _rom_func_lookup(Code.popcount32));
    +    if (S.f == null) S.f = @as(*signatures.popcount32, @ptrCast(_rom_func_lookup(Code.popcount32)));
         return S.f.?(value);
     }
     
    @@ -150,7 +150,7 @@ pub fn reverse32(value: u32) u32 {
             var f: ?*signatures.reverse32 = null;
         };
     
    -    if (S.f == null) S.f = @ptrCast(*signatures.reverse32, _rom_func_lookup(Code.reverse32));
    +    if (S.f == null) S.f = @as(*signatures.reverse32, @ptrCast(_rom_func_lookup(Code.reverse32)));
         return S.f.?(value);
     }
     
    @@ -160,7 +160,7 @@ pub fn clz32(value: u32) u32 {
             var f: ?*signatures.clz32 = null;
         };
     
    -    if (S.f == null) S.f = @ptrCast(*signatures.clz32, _rom_func_lookup(Code.clz32));
    +    if (S.f == null) S.f = @as(*signatures.clz32, @ptrCast(_rom_func_lookup(Code.clz32)));
         return S.f.?(value);
     }
     
    @@ -170,7 +170,7 @@ pub fn ctz32(value: u32) u32 {
             var f: ?*signatures.ctz32 = null;
         };
     
    -    if (S.f == null) S.f = @ptrCast(*signatures.ctz32, _rom_func_lookup(Code.ctz32));
    +    if (S.f == null) S.f = @as(*signatures.ctz32, @ptrCast(_rom_func_lookup(Code.ctz32)));
         return S.f.?(value);
     }
     
    @@ -184,7 +184,7 @@ pub fn memset(dest: []u8, c: u8) []u8 {
             var f: ?*signatures.memset = null;
         };
     
    -    if (S.f == null) S.f = @ptrCast(*signatures.memset, _rom_func_lookup(Code.memset));
    +    if (S.f == null) S.f = @as(*signatures.memset, @ptrCast(_rom_func_lookup(Code.memset)));
         return S.f.?(dest.ptr, c, dest.len)[0..dest.len];
     }
     
    @@ -196,7 +196,7 @@ pub fn memcpy(dest: []u8, src: []const u8) []u8 {
     
         const n = if (dest.len <= src.len) dest.len else src.len;
     
    -    if (S.f == null) S.f = @ptrCast(*signatures.memcpy, _rom_func_lookup(Code.memcpy));
    +    if (S.f == null) S.f = @as(*signatures.memcpy, @ptrCast(_rom_func_lookup(Code.memcpy)));
         return S.f.?(dest.ptr, src.ptr, n)[0..n];
     }
     
    @@ -206,9 +206,9 @@ pub fn memcpy(dest: []u8, src: []const u8) []u8 {
     
     /// Restore all QSPI pad controls to their default state, and connect the SSI to the QSPI pads
     pub inline fn connect_internal_flash() *signatures.connect_internal_flash {
    -    return @ptrCast(
    +    return @as(
             *signatures.connect_internal_flash,
    -        _rom_func_lookup(Code.connect_internal_flash),
    +        @ptrCast(_rom_func_lookup(Code.connect_internal_flash)),
         );
     }
     
    @@ -218,9 +218,9 @@ pub inline fn connect_internal_flash() *signatures.connect_internal_flash {
     /// SSI to XIP mode (e.g. by a call to _flash_flush_cache). This function configures
     /// the SSI with a fixed SCK clock divisor of /6.
     pub inline fn flash_exit_xip() *signatures.flash_exit_xip {
    -    return @ptrCast(
    +    return @as(
             *signatures.flash_exit_xip,
    -        _rom_func_lookup(Code.flash_exit_xip),
    +        @ptrCast(_rom_func_lookup(Code.flash_exit_xip)),
         );
     }
     
    @@ -230,9 +230,9 @@ pub inline fn flash_exit_xip() *signatures.flash_exit_xip {
     /// possible, for much higher erase speed. addr must be aligned to a 4096-byte sector,
     /// and count must be a multiple of 4096 bytes.
     pub inline fn flash_range_erase() *signatures.flash_range_erase {
    -    return @ptrCast(
    +    return @as(
             *signatures.flash_range_erase,
    -        _rom_func_lookup(Code.flash_range_erase),
    +        @ptrCast(_rom_func_lookup(Code.flash_range_erase)),
         );
     }
     
    @@ -240,18 +240,18 @@ pub inline fn flash_range_erase() *signatures.flash_range_erase {
     /// start of flash) and count bytes in size. addr must be aligned to a 256-byte
     /// boundary, and the length of data must be a multiple of 256.
     pub inline fn flash_range_program() *signatures.flash_range_program {
    -    return @ptrCast(
    +    return @as(
             *signatures.flash_range_program,
    -        _rom_func_lookup(Code.flash_range_program),
    +        @ptrCast(_rom_func_lookup(Code.flash_range_program)),
         );
     }
     
     /// Flush and enable the XIP cache. Also clears the IO forcing on QSPI CSn, so that
     /// the SSI can drive the flash chip select as normal.
     pub inline fn flash_flush_cache() *signatures.flash_flush_cache {
    -    return @ptrCast(
    +    return @as(
             *signatures.flash_flush_cache,
    -        _rom_func_lookup(Code.flash_flush_cache),
    +        @ptrCast(_rom_func_lookup(Code.flash_flush_cache)),
         );
     }
     
    @@ -262,8 +262,8 @@ pub inline fn flash_flush_cache() *signatures.flash_flush_cache {
     /// visible to the debug host, without having to know exactly what kind of flash
     /// device is connected.
     pub inline fn flash_enter_cmd_xip() *signatures.flash_enter_cmd_xip {
    -    return @ptrCast(
    +    return @as(
             *signatures.flash_enter_cmd_xip,
    -        _rom_func_lookup(Code.flash_enter_cmd_xip),
    +        @ptrCast(_rom_func_lookup(Code.flash_enter_cmd_xip)),
         );
     }
    diff --git a/src/hal/spi.zig b/src/hal/spi.zig
    index 251b61bc7..b9b8891a1 100644
    --- a/src/hal/spi.zig
    +++ b/src/hal/spi.zig
    @@ -22,7 +22,7 @@ pub const Config = struct {
     };
     
     pub fn num(n: u1) SPI {
    -    return @enumFromInt(SPI, n);
    +    return @as(SPI, @enumFromInt(n));
     }
     
     pub const SPI = enum(u1) {
    @@ -161,8 +161,8 @@ pub const SPI = enum(u1) {
             while (postdiv > 1) : (postdiv -= 1) {
                 if (freq_in / (prescale * (postdiv - 1)) > baudrate) break;
             }
    -        spi_regs.SSPCPSR.modify(.{ .CPSDVSR = @intCast(u8, prescale) });
    -        spi_regs.SSPCR0.modify(.{ .SCR = @intCast(u8, postdiv - 1) });
    +        spi_regs.SSPCPSR.modify(.{ .CPSDVSR = @as(u8, @intCast(prescale)) });
    +        spi_regs.SSPCR0.modify(.{ .SCR = @as(u8, @intCast(postdiv - 1)) });
     
             // Return the frequency we were able to achieve
             return freq_in / (prescale * postdiv);
    diff --git a/src/hal/time.zig b/src/hal/time.zig
    index 95691cc10..6bf69323d 100644
    --- a/src/hal/time.zig
    +++ b/src/hal/time.zig
    @@ -7,7 +7,7 @@ pub const Absolute = enum(u64) {
         _,
     
         pub fn from_us(us: u64) Absolute {
    -        return @enumFromInt(Absolute, us);
    +        return @as(Absolute, @enumFromInt(us));
         }
     
         pub fn to_us(time: Absolute) u64 {
    @@ -36,7 +36,7 @@ pub const Duration = enum(u64) {
         _,
     
         pub fn from_us(us: u64) Duration {
    -        return @enumFromInt(Duration, us);
    +        return @as(Duration, @enumFromInt(us));
         }
     
         pub fn from_ms(ms: u64) Duration {
    @@ -67,14 +67,14 @@ pub fn get_time_since_boot() Absolute {
             var low_word = TIMER.TIMERAWL;
             const next_high_word = TIMER.TIMERAWH;
             if (next_high_word == high_word)
    -            break @enumFromInt(Absolute, @intCast(u64, high_word) << 32 | low_word);
    +            break @as(Absolute, @enumFromInt(@as(u64, @intCast(high_word)) << 32 | low_word));
     
             high_word = next_high_word;
         } else unreachable;
     }
     
     pub fn make_timeout_us(timeout_us: u64) Absolute {
    -    return @enumFromInt(Absolute, get_time_since_boot().to_us() + timeout_us);
    +    return @as(Absolute, @enumFromInt(get_time_since_boot().to_us() + timeout_us));
     }
     
     pub fn sleep_ms(time_ms: u32) void {
    diff --git a/src/hal/uart.zig b/src/hal/uart.zig
    index 678d9799d..5e4162cd3 100644
    --- a/src/hal/uart.zig
    +++ b/src/hal/uart.zig
    @@ -43,7 +43,7 @@ pub const Config = struct {
     };
     
     pub fn num(n: u1) UART {
    -    return @enumFromInt(UART, n);
    +    return @as(UART, @enumFromInt(n));
     }
     
     pub const UART = enum(u1) {
    @@ -118,7 +118,7 @@ pub const UART = enum(u1) {
     
         pub fn tx_fifo(uart: UART) *volatile u32 {
             const regs = uart.get_regs();
    -        return @ptrCast(*volatile u32, ®s.UARTDR);
    +        return @as(*volatile u32, @ptrCast(®s.UARTDR));
         }
     
         pub fn dreq_tx(uart: UART) dma.Dreq {
    @@ -180,7 +180,7 @@ pub const UART = enum(u1) {
             assert(baud_rate > 0);
             const uart_regs = uart.get_regs();
             const baud_rate_div = (8 * peri_freq / baud_rate);
    -        var baud_ibrd = @intCast(u16, baud_rate_div >> 7);
    +        var baud_ibrd = @as(u16, @intCast(baud_rate_div >> 7));
     
             const baud_fbrd: u6 = if (baud_ibrd == 0) baud_fbrd: {
                 baud_ibrd = 1;
    @@ -188,7 +188,7 @@ pub const UART = enum(u1) {
             } else if (baud_ibrd >= 65535) baud_fbrd: {
                 baud_ibrd = 65535;
                 break :baud_fbrd 0;
    -        } else @intCast(u6, ((@truncate(u7, baud_rate_div)) + 1) / 2);
    +        } else @as(u6, @intCast(((@as(u7, @truncate(baud_rate_div))) + 1) / 2));
     
             uart_regs.UARTIBRD.write(.{ .BAUD_DIVINT = baud_ibrd, .padding = 0 });
             uart_regs.UARTFBRD.write(.{ .BAUD_DIVFRAC = baud_fbrd, .padding = 0 });
    diff --git a/src/hal/usb.zig b/src/hal/usb.zig
    index 60a9f6912..317704706 100644
    --- a/src/hal/usb.zig
    +++ b/src/hal/usb.zig
    @@ -42,7 +42,7 @@ pub const utf8ToUtf16Le = usb.utf8Toutf16Le;
     
     pub var EP0_OUT_CFG: usb.EndpointConfiguration = .{
         .descriptor = &usb.EndpointDescriptor{
    -        .length = @intCast(u8, @sizeOf(usb.EndpointDescriptor)),
    +        .length = @as(u8, @intCast(@sizeOf(usb.EndpointDescriptor))),
             .descriptor_type = usb.DescType.Endpoint,
             .endpoint_address = usb.EP0_OUT_ADDR,
             .attributes = @intFromEnum(usb.TransferType.Control),
    @@ -57,7 +57,7 @@ pub var EP0_OUT_CFG: usb.EndpointConfiguration = .{
     
     pub var EP0_IN_CFG: usb.EndpointConfiguration = .{
         .descriptor = &usb.EndpointDescriptor{
    -        .length = @intCast(u8, @sizeOf(usb.EndpointDescriptor)),
    +        .length = @as(u8, @intCast(@sizeOf(usb.EndpointDescriptor))),
             .descriptor_type = usb.DescType.Endpoint,
             .endpoint_address = usb.EP0_IN_ADDR,
             .attributes = @intFromEnum(usb.TransferType.Control),
    @@ -89,26 +89,26 @@ pub const buffers = struct {
     
         /// Mapping to the different data buffers in DPSRAM
         pub var B: usb.Buffers = .{
    -        .ep0_buffer0 = @ptrFromInt([*]u8, USB_EP0_BUFFER0),
    -        .ep0_buffer1 = @ptrFromInt([*]u8, USB_EP0_BUFFER1),
    +        .ep0_buffer0 = @as([*]u8, @ptrFromInt(USB_EP0_BUFFER0)),
    +        .ep0_buffer1 = @as([*]u8, @ptrFromInt(USB_EP0_BUFFER1)),
             // We will initialize this comptime in a loop
             .rest = .{
    -            @ptrFromInt([*]u8, USB_BUFFERS + (0 * BUFFER_SIZE)),
    -            @ptrFromInt([*]u8, USB_BUFFERS + (1 * BUFFER_SIZE)),
    -            @ptrFromInt([*]u8, USB_BUFFERS + (2 * BUFFER_SIZE)),
    -            @ptrFromInt([*]u8, USB_BUFFERS + (3 * BUFFER_SIZE)),
    -            @ptrFromInt([*]u8, USB_BUFFERS + (4 * BUFFER_SIZE)),
    -            @ptrFromInt([*]u8, USB_BUFFERS + (5 * BUFFER_SIZE)),
    -            @ptrFromInt([*]u8, USB_BUFFERS + (6 * BUFFER_SIZE)),
    -            @ptrFromInt([*]u8, USB_BUFFERS + (7 * BUFFER_SIZE)),
    -            @ptrFromInt([*]u8, USB_BUFFERS + (8 * BUFFER_SIZE)),
    -            @ptrFromInt([*]u8, USB_BUFFERS + (9 * BUFFER_SIZE)),
    -            @ptrFromInt([*]u8, USB_BUFFERS + (10 * BUFFER_SIZE)),
    -            @ptrFromInt([*]u8, USB_BUFFERS + (11 * BUFFER_SIZE)),
    -            @ptrFromInt([*]u8, USB_BUFFERS + (12 * BUFFER_SIZE)),
    -            @ptrFromInt([*]u8, USB_BUFFERS + (13 * BUFFER_SIZE)),
    -            @ptrFromInt([*]u8, USB_BUFFERS + (14 * BUFFER_SIZE)),
    -            @ptrFromInt([*]u8, USB_BUFFERS + (15 * BUFFER_SIZE)),
    +            @as([*]u8, @ptrFromInt(USB_BUFFERS + (0 * BUFFER_SIZE))),
    +            @as([*]u8, @ptrFromInt(USB_BUFFERS + (1 * BUFFER_SIZE))),
    +            @as([*]u8, @ptrFromInt(USB_BUFFERS + (2 * BUFFER_SIZE))),
    +            @as([*]u8, @ptrFromInt(USB_BUFFERS + (3 * BUFFER_SIZE))),
    +            @as([*]u8, @ptrFromInt(USB_BUFFERS + (4 * BUFFER_SIZE))),
    +            @as([*]u8, @ptrFromInt(USB_BUFFERS + (5 * BUFFER_SIZE))),
    +            @as([*]u8, @ptrFromInt(USB_BUFFERS + (6 * BUFFER_SIZE))),
    +            @as([*]u8, @ptrFromInt(USB_BUFFERS + (7 * BUFFER_SIZE))),
    +            @as([*]u8, @ptrFromInt(USB_BUFFERS + (8 * BUFFER_SIZE))),
    +            @as([*]u8, @ptrFromInt(USB_BUFFERS + (9 * BUFFER_SIZE))),
    +            @as([*]u8, @ptrFromInt(USB_BUFFERS + (10 * BUFFER_SIZE))),
    +            @as([*]u8, @ptrFromInt(USB_BUFFERS + (11 * BUFFER_SIZE))),
    +            @as([*]u8, @ptrFromInt(USB_BUFFERS + (12 * BUFFER_SIZE))),
    +            @as([*]u8, @ptrFromInt(USB_BUFFERS + (13 * BUFFER_SIZE))),
    +            @as([*]u8, @ptrFromInt(USB_BUFFERS + (14 * BUFFER_SIZE))),
    +            @as([*]u8, @ptrFromInt(USB_BUFFERS + (15 * BUFFER_SIZE))),
             },
         };
     };
    @@ -278,7 +278,7 @@ pub const F = struct {
                     // The offset _should_ fit in a u16, but if we've gotten something
                     // wrong in the past few lines, a common symptom will be integer
                     // overflow producing a Very Large Number,
    -                const dpram_offset = @intCast(u16, buf_base - dpram_base);
    +                const dpram_offset = @as(u16, @intCast(buf_base - dpram_base));
     
                     // Configure the endpoint!
                     modify_endpoint_control(epci, .{
    @@ -287,7 +287,7 @@ pub const F = struct {
                         // buffer is done, thx.
                         .INTERRUPT_PER_BUFF = 1,
                         // Select bulk vs control (or interrupt as soon as implemented).
    -                    .ENDPOINT_TYPE = .{ .raw = @intCast(u2, ep.descriptor.attributes) },
    +                    .ENDPOINT_TYPE = .{ .raw = @as(u2, @intCast(ep.descriptor.attributes)) },
                         // And, designate our buffer by its offset.
                         .BUFFER_ADDRESS = dpram_offset,
                     });
    @@ -331,7 +331,7 @@ pub const F = struct {
             modify_buffer_control(ep.buffer_control_index, .{
                 .PID_0 = np, // DATA0/1, depending
                 .FULL_0 = 1, // We have put data in
    -            .LENGTH_0 = @intCast(u10, buffer.len), // There are this many bytes
    +            .LENGTH_0 = @as(u10, @intCast(buffer.len)), // There are this many bytes
             });
     
             // Nop for some clock cycles
    @@ -367,7 +367,7 @@ pub const F = struct {
                 .PID_0 = np, // DATA0/1 depending
                 .FULL_0 = 0, // Buffer is NOT full, we want the computer to fill it
                 .AVAILABLE_0 = 1, // It is, however, available to be filled
    -            .LENGTH_0 = @intCast(u10, len), // Up tho this many bytes
    +            .LENGTH_0 = @as(u10, @intCast(len)), // Up tho this many bytes
             });
     
             // Flip the DATA0/1 PID for the next receive
    @@ -588,14 +588,14 @@ pub fn next(self: *usb.EPBIter) ?usb.EPB {
         var lowbit_index: u5 = 0;
         while ((self.bufbits >> lowbit_index) & 0x01 == 0) : (lowbit_index += 1) {}
         // Remove their bit from our set.
    -    const lowbit = @intCast(u32, 1) << lowbit_index;
    +    const lowbit = @as(u32, @intCast(1)) << lowbit_index;
         self.last_bit = lowbit;
         self.bufbits ^= lowbit;
     
         // Here we exploit knowledge of the ordering of buffer control
         // registers in the peripheral. Each endpoint has a pair of
         // registers, so we can determine the endpoint number by:
    -    const epnum = @intCast(u8, lowbit_index >> 1);
    +    const epnum = @as(u8, @intCast(lowbit_index >> 1));
         // Of the pair, the IN endpoint comes first, followed by OUT, so
         // we can get the direction by:
         const dir = if (lowbit_index & 1 == 0) usb.Dir.In else usb.Dir.Out;
    @@ -637,7 +637,7 @@ pub fn next(self: *usb.EPBIter) ?usb.EPB {
     
         // Get the actual length of the data, which may be less
         // than the buffer size.
    -    const len = @intCast(usize, bc & 0x3ff);
    +    const len = @as(usize, @intCast(bc & 0x3ff));
     
         // Copy the data from SRAM
         return usb.EPB{
    
    From 360655dbe23b2fd2350ebf2221496eada8b890b6 Mon Sep 17 00:00:00 2001
    From: Vlad Panazan 
    Date: Thu, 29 Jun 2023 22:53:47 +0200
    Subject: [PATCH 181/286] use zig package manager (#70)
    
    ---
     .gitmodules    |  3 ---
     build.zig      |  2 +-
     build.zig.zon  | 11 +++++++++++
     deps/microzig  |  1 -
     src/boards.zig |  2 +-
     src/chips.zig  |  2 +-
     6 files changed, 14 insertions(+), 7 deletions(-)
     delete mode 100644 .gitmodules
     create mode 100644 build.zig.zon
     delete mode 160000 deps/microzig
    
    diff --git a/.gitmodules b/.gitmodules
    deleted file mode 100644
    index 32e895ccb..000000000
    --- a/.gitmodules
    +++ /dev/null
    @@ -1,3 +0,0 @@
    -[submodule "deps/microzig"]
    -	path = deps/microzig
    -	url = https://github.com/ZigEmbeddedGroup/microzig.git
    diff --git a/build.zig b/build.zig
    index 4afab69d2..c690810e8 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -4,7 +4,7 @@ const Pkg = std.build.Pkg;
     const comptimePrint = std.fmt.comptimePrint;
     const FileSource = std.build.FileSource;
     
    -pub const microzig = @import("deps/microzig/build.zig");
    +const microzig = @import("microzig");
     
     pub const chips = @import("src/chips.zig");
     pub const boards = @import("src/boards.zig");
    diff --git a/build.zig.zon b/build.zig.zon
    new file mode 100644
    index 000000000..32cee6627
    --- /dev/null
    +++ b/build.zig.zon
    @@ -0,0 +1,11 @@
    +.{
    +    .name = "rp2040",
    +    .version = "0.0.0",
    +    .dependencies = .{
    +        .microzig = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/9392fe0f7bddde26155c181ab80b70097b49c791.tar.gz",
    +            .hash = "1220326148075cd017425e04356329c33c3e794d31a54bdafa46521fcfcc55b422a3",
    +        },
    +    },
    +}
    +
    diff --git a/deps/microzig b/deps/microzig
    deleted file mode 160000
    index 9392fe0f7..000000000
    --- a/deps/microzig
    +++ /dev/null
    @@ -1 +0,0 @@
    -Subproject commit 9392fe0f7bddde26155c181ab80b70097b49c791
    diff --git a/src/boards.zig b/src/boards.zig
    index ebbf0d8cc..d2af0ee1e 100644
    --- a/src/boards.zig
    +++ b/src/boards.zig
    @@ -1,5 +1,5 @@
     const std = @import("std");
    -const microzig = @import("../deps/microzig/build.zig");
    +const microzig = @import("microzig");
     const chips = @import("chips.zig");
     
     fn root_dir() []const u8 {
    diff --git a/src/chips.zig b/src/chips.zig
    index 8363cea7a..48b20e033 100644
    --- a/src/chips.zig
    +++ b/src/chips.zig
    @@ -1,5 +1,5 @@
     const std = @import("std");
    -const microzig = @import("../deps/microzig/build.zig");
    +const microzig = @import("microzig");
     
     fn root_dir() []const u8 {
         return std.fs.path.dirname(@src().file) orelse ".";
    
    From 35e9757bdb9873ffd7a5d2c192842cf93b58c7e5 Mon Sep 17 00:00:00 2001
    From: Vlad Panazan 
    Date: Sat, 1 Jul 2023 15:22:51 +0200
    Subject: [PATCH 182/286] fix i2c reading and add bus scan example (#71)
    
    ---
     build.zig                 |  1 +
     examples/i2c_bus_scan.zig | 44 +++++++++++++++++++++++++++++++++++++++
     src/hal/i2c.zig           | 13 +++++++-----
     3 files changed, 53 insertions(+), 5 deletions(-)
     create mode 100644 examples/i2c_bus_scan.zig
    
    diff --git a/build.zig b/build.zig
    index c690810e8..e75a1099a 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -63,6 +63,7 @@ pub const Examples = struct {
         blinky: *microzig.EmbeddedExecutable,
         blinky_core1: *microzig.EmbeddedExecutable,
         gpio_clk: *microzig.EmbeddedExecutable,
    +    i2c_bus_scan: *microzig.EmbeddedExecutable,
         pwm: *microzig.EmbeddedExecutable,
         spi_master: *microzig.EmbeddedExecutable,
         uart: *microzig.EmbeddedExecutable,
    diff --git a/examples/i2c_bus_scan.zig b/examples/i2c_bus_scan.zig
    new file mode 100644
    index 000000000..702bcefc3
    --- /dev/null
    +++ b/examples/i2c_bus_scan.zig
    @@ -0,0 +1,44 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +
    +const rp2040 = microzig.hal;
    +const i2c = rp2040.i2c;
    +const gpio = rp2040.gpio;
    +const peripherals = microzig.chip.peripherals;
    +
    +pub const std_options = struct {
    +    pub const log_level = .info;
    +    pub const logFn = rp2040.uart.log;
    +};
    +
    +const uart = rp2040.uart.num(0);
    +const i2c0 = i2c.num(0);
    +
    +pub fn main() !void {
    +    uart.apply(.{
    +        .baud_rate = 115200,
    +        .tx_pin = gpio.num(0),
    +        .rx_pin = gpio.num(1),
    +        .clock_config = rp2040.clock_config,
    +    });
    +    rp2040.uart.init_logger(uart);
    +
    +    _ = i2c0.apply(.{
    +        .clock_config = rp2040.clock_config,
    +        .scl_pin = gpio.num(4),
    +        .sda_pin = gpio.num(5),
    +    });
    +
    +    for (0..std.math.maxInt(u7)) |addr| {
    +        const a: i2c.Address = @enumFromInt(addr);
    +
    +        // Skip over any reserved addresses.
    +        if (a.is_reserved()) continue;
    +
    +        var rx_data: [1]u8 = undefined;
    +        _ = i2c0.read_blocking(a, &rx_data) catch continue;
    +
    +        std.log.info("I2C device found at address {X}.", .{addr});
    +    }
    +}
    +
    diff --git a/src/hal/i2c.zig b/src/hal/i2c.zig
    index b000e35e6..a6c151741 100644
    --- a/src/hal/i2c.zig
    +++ b/src/hal/i2c.zig
    @@ -243,12 +243,13 @@ pub const I2C = enum(u1) {
                     _ = tc;
                 }
             };
    -        try i2c.read_blocking_internal(addr, dst, Timeout{});
    +        return i2c.read_blocking_internal(addr, dst, Timeout{});
         }
     
         /// Determine non-blocking write space available.
         pub inline fn get_write_available(i2c: I2C) u5 {
    -        return i2c.get_regs().IC_TXFLR.read().TXFLR;
    +        const IC_TX_BUFFER_DEPTH = 16;
    +        return IC_TX_BUFFER_DEPTH - i2c.get_regs().IC_TXFLR.read().TXFLR;
         }
     
         /// Determine number of bytes received.
    @@ -378,7 +379,7 @@ pub const I2C = enum(u1) {
             for (dst, 0..) |*byte, i| {
                 const first = (i == 0);
                 const last = (i == dst.len - 1);
    -            while (i2c.get_write_available(i2c) == 0) {
    +            while (i2c.get_write_available() == 0) {
                     hw.tight_loop_contents();
                 }
     
    @@ -388,11 +389,11 @@ pub const I2C = enum(u1) {
                     .CMD = .{ .value = .READ },
     
                     .DAT = 0,
    -                .FIRST_DATA_BYTE = .{ .value = 0 },
    +                .FIRST_DATA_BYTE = .{ .raw = 0 },
                     .padding = 0,
                 });
     
    -            while (i2c.get_read_available() == 0) {
    +            while (true) {
                     const abort_reason = regs.IC_TX_ABRT_SOURCE.read();
                     const abort = (regs.IC_CLR_TX_ABRT.read().CLR_TX_ABRT != 0);
                     if (abort) {
    @@ -403,6 +404,8 @@ pub const I2C = enum(u1) {
                     }
     
                     try timeout_check.perform();
    +
    +                if (i2c.get_read_available() != 0) break;
                 }
     
                 byte.* = regs.IC_DATA_CMD.read().DAT;
    
    From d6b3be320f8f9dd0958a9ab460da991f57fd7722 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20Quei=C3=9Fner?= 
    Date: Mon, 24 Jul 2023 15:01:19 +0200
    Subject: [PATCH 183/286] rp2040-flasher inital commit (#72)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Co-authored-by: Felix (xq) Queißner 
    ---
     build.zig              |  14 ++
     build.zig.zon          |   5 +-
     tools/rp2040-flash.zig | 331 +++++++++++++++++++++++++++++++++++++++++
     3 files changed, 349 insertions(+), 1 deletion(-)
     create mode 100644 tools/rp2040-flash.zig
    
    diff --git a/build.zig b/build.zig
    index e75a1099a..b9f2803ee 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -39,6 +39,10 @@ pub fn addPiPicoExecutable(
     // project requires multiple HALs, it accepts microzig as a param
     pub fn build(b: *Builder) !void {
         const optimize = b.standardOptimizeOption(.{});
    +
    +    const args_dep = b.dependency("args", .{});
    +    const args_mod = args_dep.module("args");
    +
         var examples = Examples.init(b, optimize);
         examples.install(b);
     
    @@ -52,6 +56,16 @@ pub fn build(b: *Builder) !void {
     
         const test_step = b.step("test", "run unit tests");
         test_step.dependOn(&b.addRunArtifact(pio_tests).step);
    +
    +    const flash_tool = b.addExecutable(.{
    +        .name = "rp2040-flash",
    +        .optimize = .Debug,
    +        .target = .{},
    +        .root_source_file = .{ .path = "tools/rp2040-flash.zig" },
    +    });
    +    flash_tool.addModule("args", args_mod);
    +
    +    b.installArtifact(flash_tool);
     }
     
     fn root() []const u8 {
    diff --git a/build.zig.zon b/build.zig.zon
    index 32cee6627..d8db2dbc9 100644
    --- a/build.zig.zon
    +++ b/build.zig.zon
    @@ -6,6 +6,9 @@
                 .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/9392fe0f7bddde26155c181ab80b70097b49c791.tar.gz",
                 .hash = "1220326148075cd017425e04356329c33c3e794d31a54bdafa46521fcfcc55b422a3",
             },
    +        .args = .{
    +            .url = "https://github.com/MasterQ32/zig-args/archive/91d1e89fb89a4d01dec7c9aec95b0a324080ebcc.tar.gz",
    +            .hash = "12203d04cafc97f952d74cdb077e74c0ab3414f9f6b5fbd159112c62bfa584a0dbed",
    +        },
         },
     }
    -
    diff --git a/tools/rp2040-flash.zig b/tools/rp2040-flash.zig
    new file mode 100644
    index 000000000..23b48acbf
    --- /dev/null
    +++ b/tools/rp2040-flash.zig
    @@ -0,0 +1,331 @@
    +const std = @import("std");
    +const args_parser = @import("args");
    +const builtin = @import("builtin");
    +
    +const CliOptions = struct {
    +    help: bool = false,
    +    device: ?[]const u8 = null,
    +    wait: bool = false,
    +
    +    pub const shorthands = .{
    +        .h = "help",
    +        .d = "device",
    +        .w = "wait",
    +    };
    +};
    +
    +const wait_device_ready_timeout = 60 * std.time.ns_per_s; // timeout until a device is found
    +const wait_device_avail_timeout = 60 * std.time.ns_per_s; // timeout until a device is found
    +const access_denied_limit = 20; // try that many times with AccessDenied before the user is informed
    +
    +fn print_usage(file: std.fs.File, exe: ?[]const u8) !void {
    +    try file.writer().writeAll(exe orelse "rp2040-flash");
    +    try file.writer().writeAll(
    +        \\ [-h] [-d ] 
    +        \\Flash your RP2040 devices easily via UF2 interface.
    +        \\
    +        \\Options:
    +        \\  -h, --help          Shows this help text.
    +        \\  -d, --device  Uses  as the UF2 device. Otherwise tries to auto-guess the correct device.
    +        \\  -w, --wait          Waits 60 seconds until a device appears.
    +        \\
    +    );
    +}
    +
    +pub fn main() !u8 {
    +    const stderr = std.io.getStdErr();
    +    const stdout = std.io.getStdOut();
    +    const stdin = std.io.getStdIn();
    +
    +    var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
    +    defer _ = arena.deinit();
    +
    +    const allocator = arena.allocator();
    +
    +    var cli = args_parser.parseForCurrentProcess(CliOptions, allocator, .print) catch return 1;
    +    defer cli.deinit();
    +
    +    if (cli.options.help) {
    +        try print_usage(stdout, cli.executable_name);
    +        return 0;
    +    }
    +
    +    if (cli.positionals.len != 1) {
    +        try print_usage(stderr, cli.executable_name);
    +        return 1;
    +    }
    +
    +    const uf2_file_path = cli.positionals[0];
    +
    +    var uf2_file = try std.fs.cwd().openFile(uf2_file_path, .{});
    +    defer uf2_file.close();
    +
    +    const uf2_stat = try uf2_file.stat();
    +    if ((uf2_stat.size % 512) != 0) {
    +        std.log.warn("{s} does not have a size multiple of 512. might be corrupt!", .{uf2_file_path});
    +    }
    +
    +    const file_valid = blk: {
    +        try uf2_file.seekTo(0);
    +
    +        var file_valid = true;
    +
    +        while (file_valid) {
    +            var block: [512]u8 = undefined;
    +            const len = try uf2_file.read(&block);
    +            if (len == 0)
    +                break;
    +
    +            // 0    4   First magic number, 0x0A324655 ("UF2\n")
    +            // 4    4   Second magic number, 0x9E5D5157
    +            // 8    4   Flags
    +            // 12   4   Address in flash where the data should be written
    +            // 16   4   Number of bytes used in data (often 256)
    +            // 20   4   Sequential block number; starts at 0
    +            // 24   4   Total number of blocks in file
    +            // 28   4   File size or board family ID or zero
    +            //                          32   476 Data, padded with zeros
    +            // 508  4   Final magic number, 0x0AB16F30
    +
    +            const first_magic_number = std.mem.readIntLittle(u32, block[0..][0..4]);
    +            const second_magic_number = std.mem.readIntLittle(u32, block[4..][0..4]);
    +            const final_magic_number = std.mem.readIntLittle(u32, block[508..][0..4]);
    +
    +            file_valid = file_valid and (first_magic_number == 0x0A324655);
    +            file_valid = file_valid and (second_magic_number == 0x9E5D5157);
    +            file_valid = file_valid and (final_magic_number == 0x0AB16F30);
    +        }
    +        break :blk file_valid;
    +    };
    +
    +    if (file_valid == false) {
    +        std.log.warn("{s} does not seem to be a valid UF2 file. Do you really want to flash it?", .{uf2_file_path});
    +        while (true) {
    +            try stderr.writer().writeAll("Flash? [jN]: ");
    +
    +            var buffer: [64]u8 = undefined;
    +            const selection_or_null = try stdin.reader().readUntilDelimiterOrEof(&buffer, '\n');
    +
    +            const selection_str = std.mem.trim(u8, selection_or_null orelse "", "\r\n\t ");
    +            if (selection_str.len == 0)
    +                return 1;
    +
    +            if (std.ascii.eqlIgnoreCase(selection_str, "j"))
    +                break;
    +
    +            if (std.ascii.eqlIgnoreCase(selection_str, "n"))
    +                return 1;
    +        }
    +    }
    +
    +    try uf2_file.seekTo(0);
    +
    +    const detect_timeout = std.time.nanoTimestamp() + wait_device_avail_timeout;
    +    var first_run = true;
    +    const device_path = if (cli.options.device) |devname|
    +        try allocator.dupe(u8, devname)
    +    else while (true) {
    +        if (std.time.nanoTimestamp() >= detect_timeout) {
    +            try stderr.writeAll("failed to detect any RP2040 devices :(\n");
    +
    +            return 1;
    +        }
    +
    +        const maybe_device = try autoDetectPico(allocator);
    +
    +        if (maybe_device) |device|
    +            break device;
    +
    +        if (!cli.options.wait) {
    +            try stderr.writeAll("failed to detect any RP2040 devices :(\n");
    +            return 1;
    +        }
    +
    +        if (first_run) {
    +            try stderr.writeAll("failed to detect any RP2040 devices, waiting...\n");
    +            first_run = false;
    +        }
    +
    +        std.time.sleep(250 * std.time.ns_per_ms);
    +    };
    +
    +    const connect_timeout = std.time.nanoTimestamp() + wait_device_ready_timeout;
    +
    +    var first_attempt = true;
    +    var access_denied_counter: u32 = 0;
    +    var last_err: anyerror = error.Unknown;
    +    var device_file: std.fs.File = blk: while (std.time.nanoTimestamp() < connect_timeout) {
    +        var device = std.fs.cwd().openFile(device_path, .{ .mode = .write_only }) catch |err| {
    +            last_err = err;
    +
    +            switch (err) {
    +                error.FileNotFound => {}, // just waiting for the device
    +                error.AccessDenied => {
    +                    access_denied_counter += 1;
    +                    if (access_denied_counter >= access_denied_limit) {
    +                        try stderr.writer().print("Could not open {s}: Access denied. Do you have write-access to the device?\n", .{device_path});
    +                        return 1;
    +                    }
    +                },
    +                else => |e| return e,
    +            }
    +
    +            if (first_attempt) {
    +                try stderr.writer().print("Waiting for {s}.", .{device_path});
    +                first_attempt = false;
    +            } else {
    +                try stderr.writeAll(".");
    +            }
    +            std.time.sleep(250 * std.time.ns_per_ms);
    +            continue;
    +        };
    +        try stderr.writeAll("\n");
    +        break :blk device;
    +    } else {
    +        try stderr.writer().print("\nfailed to connect to {s}: {s}\n", .{ device_path, @errorName(last_err) });
    +        return 1;
    +    };
    +    defer device_file.close();
    +
    +    try stderr.writeAll("Flashing");
    +
    +    {
    +        try uf2_file.seekTo(0);
    +
    +        var block_num: u64 = 0;
    +        while (true) {
    +            try stderr.writeAll(".");
    +
    +            var block: [512]u8 = undefined;
    +            const rd_len = try uf2_file.read(&block);
    +            if (rd_len == 0)
    +                break;
    +            if (rd_len != block.len) {
    +                try stderr.writer().print("\nFailed to read block {}: Only {} bytes read!\n", .{ block_num, rd_len });
    +                return 1;
    +            }
    +
    +            const wr_len = try device_file.write(&block);
    +            if (wr_len != block.len) {
    +                try stderr.writer().print("\nFailed to write block {}: Only {} bytes written!\n", .{ block_num, wr_len });
    +                return 1;
    +            }
    +
    +            block_num += 1;
    +        }
    +    }
    +    try stderr.writeAll("\nDone.\n");
    +
    +    return 0;
    +}
    +
    +fn autoDetectPico(allocator: std.mem.Allocator) !?[]const u8 {
    +    switch (builtin.os.tag) {
    +        .linux => {
    +            const stdin = std.io.getStdIn();
    +            const stderr = std.io.getStdErr();
    +
    +            const Device = struct {
    +                name: []const u8,
    +                path: []const u8,
    +            };
    +
    +            var picos = std.ArrayList(Device).init(allocator);
    +            defer picos.deinit();
    +
    +            var base_dir = try std.fs.openIterableDirAbsolute("/sys/block/", .{});
    +            defer base_dir.close();
    +
    +            var iter = base_dir.iterate();
    +
    +            while (try iter.next()) |entry| {
    +                var device_dir = try base_dir.dir.openDir(entry.name, .{});
    +                defer device_dir.close();
    +
    +                const H = struct {
    +                    fn isPicoDevice(dir: std.fs.Dir, allo: std.mem.Allocator) !?[]const u8 {
    +                        // "/sys/block/*/removable" => "1"
    +                        // "/sys/block/*/device/model" => "RP2"
    +                        // "/sys/block/*/device/vendor" => "RPI"
    +
    +                        var buffer: [64]u8 = undefined;
    +
    +                        const removable = std.mem.trim(u8, try dir.readFile("removable", &buffer), "\r\n\t ");
    +                        if (!std.mem.eql(u8, removable, "1"))
    +                            return null;
    +
    +                        const device_model = std.mem.trim(u8, try dir.readFile("device/model", &buffer), "\r\n\t ");
    +                        if (!std.mem.eql(u8, device_model, "RP2"))
    +                            return null;
    +
    +                        const device_vendor = std.mem.trim(u8, try dir.readFile("device/vendor", &buffer), "\r\n\t ");
    +                        if (!std.mem.eql(u8, device_vendor, "RPI"))
    +                            return null;
    +
    +                        const device_id = std.mem.trim(u8, try dir.readFile("dev", &buffer), "\r\n\t ");
    +
    +                        return try std.fs.path.join(allo, &.{
    +                            "/dev/block", device_id,
    +                        });
    +                    }
    +                };
    +
    +                const maybe_device = H.isPicoDevice(device_dir, allocator) catch |err| {
    +                    if (err != error.FileNotFound and err != error.AccessDenied) {
    +                        std.log.err("failed to scan /sys/block/{s}: {s}", .{ entry.name, @errorName(err) });
    +                    }
    +                    continue;
    +                };
    +
    +                if (maybe_device) |device_path| {
    +                    try picos.append(Device{
    +                        .name = try allocator.dupe(u8, entry.name),
    +                        .path = device_path,
    +                    });
    +                }
    +            }
    +
    +            if (picos.items.len == 0) {
    +                return null;
    +            }
    +
    +            var default_selection: usize = 0;
    +
    +            try stderr.writer().writeAll("Select your device:\n");
    +            for (picos.items, 1..) |pico_dev, index| {
    +                try stderr.writer().print("#{d: <2} {s}\n", .{ index, pico_dev.name });
    +
    +                if (default_selection == 0) {
    +                    default_selection = index;
    +                }
    +            }
    +
    +            const selection = while (true) {
    +                try stderr.writer().print("Select port [{}]: ", .{default_selection});
    +
    +                var buffer: [64]u8 = undefined;
    +                const selection_or_null = try stdin.reader().readUntilDelimiterOrEof(&buffer, '\n');
    +
    +                const selection_str = std.mem.trim(u8, selection_or_null orelse break default_selection, "\r\n\t ");
    +
    +                if (selection_str.len == 0)
    +                    break default_selection;
    +
    +                const selection = std.fmt.parseInt(usize, selection_str, 10) catch continue;
    +
    +                if (selection < 1 or selection > picos.items.len) {
    +                    continue;
    +                }
    +
    +                break selection;
    +            };
    +
    +            return picos.items[selection - 1].path;
    +        },
    +
    +        else => {
    +            std.log.warn("Device auto-detection not implemented for {s}", .{@tagName(builtin.os.tag)});
    +            return null;
    +        },
    +    }
    +}
    
    From 1cef56ad9d5df63af9c45f54a4983b36b0796f7f Mon Sep 17 00:00:00 2001
    From: David Sugar 
    Date: Mon, 31 Jul 2023 16:20:02 +0200
    Subject: [PATCH 184/286] Enable XIP using stage 2 bootloader (#73)
    
    * flash enable xip calls stage two bootloader using inline assembly
    
    * flash erase/program now works in all modes (Debug, ReleaseSmall, ReleaseSafe, ReleaseFast)
    
    * further docs added
    ---
     examples/flash_program.zig |  2 +-
     rp2040.ld                  |  2 +-
     src/hal/flash.zig          | 69 +++++++++++++++++++++++++++-----------
     3 files changed, 51 insertions(+), 22 deletions(-)
    
    diff --git a/examples/flash_program.zig b/examples/flash_program.zig
    index 48754e165..9fd13be06 100644
    --- a/examples/flash_program.zig
    +++ b/examples/flash_program.zig
    @@ -62,7 +62,7 @@ pub fn main() !void {
     
         // Note that a whole number of pages (256 bytes) must be written at a time
         std.log.info("Programming target region...", .{});
    -    flash.range_program(flash_target_offset, &data);
    +    flash.range_program(flash_target_offset, data[0..]);
         std.log.info("Done. Read back target region:", .{});
         std.log.info("data: {s}", .{flash_target_contents[0..flash.PAGE_SIZE]});
     
    diff --git a/rp2040.ld b/rp2040.ld
    index cac0892e9..4517b362c 100644
    --- a/rp2040.ld
    +++ b/rp2040.ld
    @@ -43,7 +43,7 @@ SECTIONS
       .data :
       {
          microzig_data_start = .;
    -     *(.time_critical*)
    +     KEEP(*(.time_critical*))
          *(.data*)
          microzig_data_end = .;
       } > ram0 AT> flash0
    diff --git a/src/hal/flash.zig b/src/hal/flash.zig
    index 7ce32060d..f10315e42 100644
    --- a/src/hal/flash.zig
    +++ b/src/hal/flash.zig
    @@ -1,3 +1,4 @@
    +//! See [rp2040 docs](https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf), page 136.
     const rom = @import("rom.zig");
     
     pub const Command = enum(u8) {
    @@ -12,33 +13,51 @@ pub const BLOCK_SIZE = 65536;
     /// Bus reads to a 16MB memory window start at this address
     pub const XIP_BASE = 0x10000000;
     
    +/// Flash code related to the second stage boot loader
     pub const boot2 = struct {
    -    /// Size of the second stage bootloader in bytes
    -    const BOOT2_SIZE_BYTES = 64;
    +    /// Size of the second stage bootloader in words
    +    const BOOT2_SIZE_WORDS = 64;
     
         /// Buffer for the second stage bootloader
    -    var copyout: [BOOT2_SIZE_BYTES]u32 = undefined;
    +    ///
    +    /// The only job of the second stage bootloader is to configure the SSI and
    +    /// the external flash for the best possible execute-in-place (XIP) performance.
    +    /// Until the SSI is correctly configured for the attached flash device, it's not
    +    /// possible to access flash via the XIP address window, i.e., we have to copy
    +    /// the bootloader into sram before calling `rom.flash_exit_xip`. This is required
    +    /// if we want to erase and/or write to flash.
    +    ///
    +    /// At the end we can then just make a subroutine call to copyout, to configure
    +    /// the SSI and flash. The second stage bootloader will return to the calling function
    +    /// if a return address is provided in `lr`.
    +    var copyout: [BOOT2_SIZE_WORDS]u32 = undefined;
         var copyout_valid: bool = false;
     
         /// Copy the 2nd stage bootloader into memory
    -    pub fn flash_init() linksection(".time_critical") void {
    +    ///
    +    /// This is required by `_range_erase` and `_range_program` so we can later setup
    +    /// XIP via the second stage bootloader.
    +    pub export fn flash_init() linksection(".time_critical") void {
             if (copyout_valid) return;
             const bootloader = @as([*]u32, @ptrFromInt(XIP_BASE));
             var i: usize = 0;
    -        while (i < BOOT2_SIZE_BYTES) : (i += 1) {
    +        while (i < BOOT2_SIZE_WORDS) : (i += 1) {
                 copyout[i] = bootloader[i];
             }
             copyout_valid = true;
         }
     
    -    pub fn flash_enable_xip() linksection(".time_critical") void {
    -        // TODO: use the second stage bootloader instead of cmd_xip
    -        //const bootloader: []u32 = copyout[1..];
    -
    -        //const f = @ptrCast(*fn () void, bootloader.ptr);
    -        //f();
    -
    -        rom.flash_enter_cmd_xip()();
    +    /// Configure the SSI and the external flash for XIP by calling the second stage
    +    /// bootloader that was copied out to `copyout`.
    +    pub export fn flash_enable_xip() linksection(".time_critical") void {
    +        // The bootloader is in thumb mode
    +        asm volatile (
    +            \\adds r0, #1
    +            \\blx r0
    +            :
    +            : [copyout] "{r0}" (@intFromPtr(©out)),
    +            : "r0", "lr"
    +        );
         }
     };
     
    @@ -46,12 +65,17 @@ pub const boot2 = struct {
     ///
     /// The offset must be aligned to a 4096-byte sector, and count must
     /// be a multiple of 4096 bytes!
    -pub fn range_erase(offset: u32, count: u32) linksection(".time_critical") void {
    +pub inline fn range_erase(offset: u32, count: u32) void {
    +    // Do not inline `_range_erase`!
    +    @call(.never_inline, _range_erase, .{ offset, count });
    +}
    +
    +export fn _range_erase(offset: u32, count: u32) linksection(".time_critical") void {
         // TODO: add sanity checks, e.g., offset + count < flash size
     
    -    boot2.flash_init();
    +    asm volatile ("" ::: "memory"); // memory barrier
     
    -    // TODO: __compiler_memory_barrier
    +    boot2.flash_init();
     
         rom.connect_internal_flash()();
         rom.flash_exit_xip()();
    @@ -65,16 +89,21 @@ pub fn range_erase(offset: u32, count: u32) linksection(".time_critical") void {
     ///
     /// The offset must be aligned to a 256-byte boundary, and the length of data
     /// must be a multiple of 256!
    -pub fn range_program(offset: u32, data: []const u8) linksection(".time_critical") void {
    +pub inline fn range_program(offset: u32, data: []const u8) void {
    +    // Do not inline `_range_program`!
    +    @call(.never_inline, _range_program, .{ offset, data.ptr, data.len });
    +}
    +
    +export fn _range_program(offset: u32, data: [*]const u8, len: usize) linksection(".time_critical") void {
         // TODO: add sanity checks, e.g., offset + count < flash size
     
    -    boot2.flash_init();
    +    asm volatile ("" ::: "memory"); // memory barrier
     
    -    // TODO: __compiler_memory_barrier
    +    boot2.flash_init();
     
         rom.connect_internal_flash()();
         rom.flash_exit_xip()();
    -    rom.flash_range_program()(offset, data.ptr, data.len);
    +    rom.flash_range_program()(offset, data, len);
         rom.flash_flush_cache()();
     
         boot2.flash_enable_xip();
    
    From 695d3dc0e440cd963125b2efb7e95e60dd8bf0f7 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Thu, 3 Aug 2023 21:24:21 -0700
    Subject: [PATCH 185/286] SourceFile -> LazyFile (#75)
    
    ---
     .github/workflows/build.yml | 22 ++++++++++++++++++++++
     build.zig                   |  6 +++---
     build.zig.zon               |  4 ++--
     3 files changed, 27 insertions(+), 5 deletions(-)
     create mode 100644 .github/workflows/build.yml
    
    diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
    new file mode 100644
    index 000000000..220397351
    --- /dev/null
    +++ b/.github/workflows/build.yml
    @@ -0,0 +1,22 @@
    +name: Build
    +on:
    +  push:
    +
    +jobs:
    +  build:
    +    runs-on: ${{ matrix.os }}
    +    strategy:
    +      matrix:
    +        os: [
    +          linux-latest,
    +          windows-latest,
    +          macos-latest,
    +        ]
    +    steps:
    +    - uses: actions/checkout@v2
    +    - uses: goto-bus-stop/setup-zig@v1.3.0
    +      with:
    +        version: master
    +
    +    - name: Build and Unit Test
    +      run: zig build test -Doptimize=ReleaseSmall
    diff --git a/build.zig b/build.zig
    index b9f2803ee..dacb22471 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -2,7 +2,7 @@ const std = @import("std");
     const Builder = std.build.Builder;
     const Pkg = std.build.Pkg;
     const comptimePrint = std.fmt.comptimePrint;
    -const FileSource = std.build.FileSource;
    +const LazyPath = std.build.LazyPath;
     
     const microzig = @import("microzig");
     
    @@ -17,7 +17,7 @@ pub const BuildOptions = struct {
     
     pub const PicoExecutableOptions = struct {
         name: []const u8,
    -    source_file: FileSource,
    +    source_file: LazyPath,
         optimize: std.builtin.OptimizeMode = .Debug,
     };
     
    @@ -52,7 +52,7 @@ pub fn build(b: *Builder) !void {
             },
             .optimize = optimize,
         });
    -    pio_tests.addIncludePath("src/hal/pio/assembler");
    +    pio_tests.addIncludePath(.{ .path = "src/hal/pio/assembler" });
     
         const test_step = b.step("test", "run unit tests");
         test_step.dependOn(&b.addRunArtifact(pio_tests).step);
    diff --git a/build.zig.zon b/build.zig.zon
    index d8db2dbc9..28bea9e6a 100644
    --- a/build.zig.zon
    +++ b/build.zig.zon
    @@ -3,8 +3,8 @@
         .version = "0.0.0",
         .dependencies = .{
             .microzig = .{
    -            .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/9392fe0f7bddde26155c181ab80b70097b49c791.tar.gz",
    -            .hash = "1220326148075cd017425e04356329c33c3e794d31a54bdafa46521fcfcc55b422a3",
    +            .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/d4a48f65fac24dcfe789d217a9154086b6a011e5.tar.gz",
    +            .hash = "1220fd3ad4f6a88f111791cb80de1fc388d0a51114ab376f2bf8351cd176747fa303",
             },
             .args = .{
                 .url = "https://github.com/MasterQ32/zig-args/archive/91d1e89fb89a4d01dec7c9aec95b0a324080ebcc.tar.gz",
    
    From 1dbdd0f80ea076cffeced5e9ca6e4322c2e6bc3e Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Thu, 3 Aug 2023 21:47:42 -0700
    Subject: [PATCH 186/286] Fix eval branch quota for PIO comparison tests (#76)
    
    ---
     .github/workflows/build.yml                | 2 +-
     src/hal/pio/assembler/comparison_tests.zig | 6 +++---
     2 files changed, 4 insertions(+), 4 deletions(-)
    
    diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
    index 220397351..6801af685 100644
    --- a/.github/workflows/build.yml
    +++ b/.github/workflows/build.yml
    @@ -8,7 +8,7 @@ jobs:
         strategy:
           matrix:
             os: [
    -          linux-latest,
    +          ubuntu-latest,
               windows-latest,
               macos-latest,
             ]
    diff --git a/src/hal/pio/assembler/comparison_tests.zig b/src/hal/pio/assembler/comparison_tests.zig
    index 5a98c9385..4bad38dcf 100644
    --- a/src/hal/pio/assembler/comparison_tests.zig
    +++ b/src/hal/pio/assembler/comparison_tests.zig
    @@ -53,7 +53,7 @@ test "pio.comparison.addition" {
     }
     
     test "pio.comparison.apa102" {
    -    @setEvalBranchQuota(10000);
    +    @setEvalBranchQuota(11000);
         try pio_comparison(@embedFile("comparison_tests/apa102.pio"));
     }
     
    @@ -153,7 +153,7 @@ test "pio.comparison.st7789_lcd" {
     }
     
     test "pio.comparison.uart_rx" {
    -    @setEvalBranchQuota(10000);
    +    @setEvalBranchQuota(11000);
         try pio_comparison(@embedFile("comparison_tests/uart_rx.pio"));
     }
     
    @@ -163,6 +163,6 @@ test "pio.comparison.uart_tx" {
     }
     
     test "pio.comparison.ws2812" {
    -    @setEvalBranchQuota(10000);
    +    @setEvalBranchQuota(11000);
         try pio_comparison(@embedFile("comparison_tests/ws2812.pio"));
     }
    
    From 6f201f7f4c4d3223eb1e30658a97c6776c82926a Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Fri, 4 Aug 2023 00:59:05 -0700
    Subject: [PATCH 187/286] stabilize on 0.11.0 (#77)
    
    ---
     .github/workflows/build.yml | 2 +-
     README.adoc                 | 2 +-
     build.zig.zon               | 4 ++--
     3 files changed, 4 insertions(+), 4 deletions(-)
    
    diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
    index 6801af685..50ac1a489 100644
    --- a/.github/workflows/build.yml
    +++ b/.github/workflows/build.yml
    @@ -16,7 +16,7 @@ jobs:
         - uses: actions/checkout@v2
         - uses: goto-bus-stop/setup-zig@v1.3.0
           with:
    -        version: master
    +        version: 0.11.0
     
         - name: Build and Unit Test
           run: zig build test -Doptimize=ReleaseSmall
    diff --git a/README.adoc b/README.adoc
    index fc0ca7fe8..38c63c607 100644
    --- a/README.adoc
    +++ b/README.adoc
    @@ -4,4 +4,4 @@ HAL and register definitions for the RP2040.
     
     == What version of Zig to use
     
    -Right now we are following https://ziglang.org/download/[master], but once 0.11.0 is released, we will be switching to the latest stable version of Zig.
    +0.11.0
    diff --git a/build.zig.zon b/build.zig.zon
    index 28bea9e6a..cfb4ad4ce 100644
    --- a/build.zig.zon
    +++ b/build.zig.zon
    @@ -3,8 +3,8 @@
         .version = "0.0.0",
         .dependencies = .{
             .microzig = .{
    -            .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/d4a48f65fac24dcfe789d217a9154086b6a011e5.tar.gz",
    -            .hash = "1220fd3ad4f6a88f111791cb80de1fc388d0a51114ab376f2bf8351cd176747fa303",
    +            .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/0b3be0a4cc7e6d45714cb09961efc771e364723c.tar.gz",
    +            .hash = "1220ada6d01db7b3d0aa8642df89b1af9ee71b681438249e9a7efb2275fc4cf32152",
             },
             .args = .{
                 .url = "https://github.com/MasterQ32/zig-args/archive/91d1e89fb89a4d01dec7c9aec95b0a324080ebcc.tar.gz",
    
    From c9e394c58ded14b70bb0dbe15145eda582dc8dfa Mon Sep 17 00:00:00 2001
    From: binarycraft007 <107379182+binarycraft007@users.noreply.github.com>
    Date: Sun, 13 Aug 2023 06:46:13 +0800
    Subject: [PATCH 188/286] fix usage of @ptrCast and other fooToBar stuff, run
     with zig fmt (#18)
    
    ---
     src/chips/STM32F103.zig | 134 ++++++++++++++---------------
     src/chips/STM32F303.zig | 128 ++++++++++++++--------------
     src/chips/STM32F407.zig | 182 +++++++++++++++++++--------------------
     src/chips/STM32F429.zig | 184 ++++++++++++++++++++--------------------
     src/hals/STM32F303.zig  |  16 ++--
     src/hals/STM32F407.zig  |  22 ++---
     src/hals/STM32F429.zig  |   2 +-
     7 files changed, 334 insertions(+), 334 deletions(-)
    
    diff --git a/src/chips/STM32F103.zig b/src/chips/STM32F103.zig
    index f29fded29..5a174116b 100644
    --- a/src/chips/STM32F103.zig
    +++ b/src/chips/STM32F103.zig
    @@ -112,139 +112,139 @@ pub const devices = struct {
     
             pub const peripherals = struct {
                 ///  General purpose timer
    -            pub const TIM2 = @ptrCast(*volatile types.TIM2, 0x40000000);
    +            pub const TIM2 = @as(*volatile types.TIM2, @ptrFromInt(0x40000000));
                 ///  General purpose timer
    -            pub const TIM3 = @ptrCast(*volatile types.TIM2, 0x40000400);
    +            pub const TIM3 = @as(*volatile types.TIM2, @ptrFromInt(0x40000400));
                 ///  General purpose timer
    -            pub const TIM4 = @ptrCast(*volatile types.TIM2, 0x40000800);
    +            pub const TIM4 = @as(*volatile types.TIM2, @ptrFromInt(0x40000800));
                 ///  General purpose timer
    -            pub const TIM5 = @ptrCast(*volatile types.TIM2, 0x40000c00);
    +            pub const TIM5 = @as(*volatile types.TIM2, @ptrFromInt(0x40000c00));
                 ///  Basic timer
    -            pub const TIM6 = @ptrCast(*volatile types.TIM6, 0x40001000);
    +            pub const TIM6 = @as(*volatile types.TIM6, @ptrFromInt(0x40001000));
                 ///  Basic timer
    -            pub const TIM7 = @ptrCast(*volatile types.TIM6, 0x40001400);
    +            pub const TIM7 = @as(*volatile types.TIM6, @ptrFromInt(0x40001400));
                 ///  General purpose timer
    -            pub const TIM12 = @ptrCast(*volatile types.TIM9, 0x40001800);
    +            pub const TIM12 = @as(*volatile types.TIM9, @ptrFromInt(0x40001800));
                 ///  General purpose timer
    -            pub const TIM13 = @ptrCast(*volatile types.TIM10, 0x40001c00);
    +            pub const TIM13 = @as(*volatile types.TIM10, @ptrFromInt(0x40001c00));
                 ///  General purpose timer
    -            pub const TIM14 = @ptrCast(*volatile types.TIM10, 0x40002000);
    +            pub const TIM14 = @as(*volatile types.TIM10, @ptrFromInt(0x40002000));
                 ///  Real time clock
    -            pub const RTC = @ptrCast(*volatile types.RTC, 0x40002800);
    +            pub const RTC = @as(*volatile types.RTC, @ptrFromInt(0x40002800));
                 ///  Window watchdog
    -            pub const WWDG = @ptrCast(*volatile types.WWDG, 0x40002c00);
    +            pub const WWDG = @as(*volatile types.WWDG, @ptrFromInt(0x40002c00));
                 ///  Independent watchdog
    -            pub const IWDG = @ptrCast(*volatile types.IWDG, 0x40003000);
    +            pub const IWDG = @as(*volatile types.IWDG, @ptrFromInt(0x40003000));
                 ///  Serial peripheral interface
    -            pub const SPI2 = @ptrCast(*volatile types.SPI1, 0x40003800);
    +            pub const SPI2 = @as(*volatile types.SPI1, @ptrFromInt(0x40003800));
                 ///  Serial peripheral interface
    -            pub const SPI3 = @ptrCast(*volatile types.SPI1, 0x40003c00);
    +            pub const SPI3 = @as(*volatile types.SPI1, @ptrFromInt(0x40003c00));
                 ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART2 = @ptrCast(*volatile types.USART1, 0x40004400);
    +            pub const USART2 = @as(*volatile types.USART1, @ptrFromInt(0x40004400));
                 ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART3 = @ptrCast(*volatile types.USART1, 0x40004800);
    +            pub const USART3 = @as(*volatile types.USART1, @ptrFromInt(0x40004800));
                 ///  Universal asynchronous receiver transmitter
    -            pub const UART4 = @ptrCast(*volatile types.UART4, 0x40004c00);
    +            pub const UART4 = @as(*volatile types.UART4, @ptrFromInt(0x40004c00));
                 ///  Universal asynchronous receiver transmitter
    -            pub const UART5 = @ptrCast(*volatile types.UART5, 0x40005000);
    +            pub const UART5 = @as(*volatile types.UART5, @ptrFromInt(0x40005000));
                 ///  Inter integrated circuit
    -            pub const I2C1 = @ptrCast(*volatile types.I2C1, 0x40005400);
    +            pub const I2C1 = @as(*volatile types.I2C1, @ptrFromInt(0x40005400));
                 ///  Inter integrated circuit
    -            pub const I2C2 = @ptrCast(*volatile types.I2C1, 0x40005800);
    +            pub const I2C2 = @as(*volatile types.I2C1, @ptrFromInt(0x40005800));
                 ///  Universal serial bus full-speed device interface
    -            pub const USB = @ptrCast(*volatile types.USB, 0x40005c00);
    +            pub const USB = @as(*volatile types.USB, @ptrFromInt(0x40005c00));
                 ///  Controller area network
    -            pub const CAN1 = @ptrCast(*volatile types.CAN1, 0x40006400);
    +            pub const CAN1 = @as(*volatile types.CAN1, @ptrFromInt(0x40006400));
                 ///  Controller area network
    -            pub const CAN2 = @ptrCast(*volatile types.CAN1, 0x40006800);
    +            pub const CAN2 = @as(*volatile types.CAN1, @ptrFromInt(0x40006800));
                 ///  Backup registers
    -            pub const BKP = @ptrCast(*volatile types.BKP, 0x40006c00);
    +            pub const BKP = @as(*volatile types.BKP, @ptrFromInt(0x40006c00));
                 ///  Power control
    -            pub const PWR = @ptrCast(*volatile types.PWR, 0x40007000);
    +            pub const PWR = @as(*volatile types.PWR, @ptrFromInt(0x40007000));
                 ///  Digital to analog converter
    -            pub const DAC = @ptrCast(*volatile types.DAC, 0x40007400);
    +            pub const DAC = @as(*volatile types.DAC, @ptrFromInt(0x40007400));
                 ///  Alternate function I/O
    -            pub const AFIO = @ptrCast(*volatile types.AFIO, 0x40010000);
    +            pub const AFIO = @as(*volatile types.AFIO, @ptrFromInt(0x40010000));
                 ///  EXTI
    -            pub const EXTI = @ptrCast(*volatile types.EXTI, 0x40010400);
    +            pub const EXTI = @as(*volatile types.EXTI, @ptrFromInt(0x40010400));
                 ///  General purpose I/O
    -            pub const GPIOA = @ptrCast(*volatile types.GPIOA, 0x40010800);
    +            pub const GPIOA = @as(*volatile types.GPIOA, @ptrFromInt(0x40010800));
                 ///  General purpose I/O
    -            pub const GPIOB = @ptrCast(*volatile types.GPIOA, 0x40010c00);
    +            pub const GPIOB = @as(*volatile types.GPIOA, @ptrFromInt(0x40010c00));
                 ///  General purpose I/O
    -            pub const GPIOC = @ptrCast(*volatile types.GPIOA, 0x40011000);
    +            pub const GPIOC = @as(*volatile types.GPIOA, @ptrFromInt(0x40011000));
                 ///  General purpose I/O
    -            pub const GPIOD = @ptrCast(*volatile types.GPIOA, 0x40011400);
    +            pub const GPIOD = @as(*volatile types.GPIOA, @ptrFromInt(0x40011400));
                 ///  General purpose I/O
    -            pub const GPIOE = @ptrCast(*volatile types.GPIOA, 0x40011800);
    +            pub const GPIOE = @as(*volatile types.GPIOA, @ptrFromInt(0x40011800));
                 ///  General purpose I/O
    -            pub const GPIOF = @ptrCast(*volatile types.GPIOA, 0x40011c00);
    +            pub const GPIOF = @as(*volatile types.GPIOA, @ptrFromInt(0x40011c00));
                 ///  General purpose I/O
    -            pub const GPIOG = @ptrCast(*volatile types.GPIOA, 0x40012000);
    +            pub const GPIOG = @as(*volatile types.GPIOA, @ptrFromInt(0x40012000));
                 ///  Analog to digital converter
    -            pub const ADC1 = @ptrCast(*volatile types.ADC1, 0x40012400);
    +            pub const ADC1 = @as(*volatile types.ADC1, @ptrFromInt(0x40012400));
                 ///  Analog to digital converter
    -            pub const ADC2 = @ptrCast(*volatile types.ADC2, 0x40012800);
    +            pub const ADC2 = @as(*volatile types.ADC2, @ptrFromInt(0x40012800));
                 ///  Advanced timer
    -            pub const TIM1 = @ptrCast(*volatile types.TIM1, 0x40012c00);
    +            pub const TIM1 = @as(*volatile types.TIM1, @ptrFromInt(0x40012c00));
                 ///  Serial peripheral interface
    -            pub const SPI1 = @ptrCast(*volatile types.SPI1, 0x40013000);
    +            pub const SPI1 = @as(*volatile types.SPI1, @ptrFromInt(0x40013000));
                 ///  Advanced timer
    -            pub const TIM8 = @ptrCast(*volatile types.TIM1, 0x40013400);
    +            pub const TIM8 = @as(*volatile types.TIM1, @ptrFromInt(0x40013400));
                 ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART1 = @ptrCast(*volatile types.USART1, 0x40013800);
    +            pub const USART1 = @as(*volatile types.USART1, @ptrFromInt(0x40013800));
                 ///  Analog to digital converter
    -            pub const ADC3 = @ptrCast(*volatile types.ADC2, 0x40013c00);
    +            pub const ADC3 = @as(*volatile types.ADC2, @ptrFromInt(0x40013c00));
                 ///  General purpose timer
    -            pub const TIM9 = @ptrCast(*volatile types.TIM9, 0x40014c00);
    +            pub const TIM9 = @as(*volatile types.TIM9, @ptrFromInt(0x40014c00));
                 ///  General purpose timer
    -            pub const TIM10 = @ptrCast(*volatile types.TIM10, 0x40015000);
    +            pub const TIM10 = @as(*volatile types.TIM10, @ptrFromInt(0x40015000));
                 ///  General purpose timer
    -            pub const TIM11 = @ptrCast(*volatile types.TIM10, 0x40015400);
    +            pub const TIM11 = @as(*volatile types.TIM10, @ptrFromInt(0x40015400));
                 ///  Secure digital input/output interface
    -            pub const SDIO = @ptrCast(*volatile types.SDIO, 0x40018000);
    +            pub const SDIO = @as(*volatile types.SDIO, @ptrFromInt(0x40018000));
                 ///  DMA controller
    -            pub const DMA1 = @ptrCast(*volatile types.DMA1, 0x40020000);
    +            pub const DMA1 = @as(*volatile types.DMA1, @ptrFromInt(0x40020000));
                 ///  DMA controller
    -            pub const DMA2 = @ptrCast(*volatile types.DMA1, 0x40020400);
    +            pub const DMA2 = @as(*volatile types.DMA1, @ptrFromInt(0x40020400));
                 ///  Reset and clock control
    -            pub const RCC = @ptrCast(*volatile types.RCC, 0x40021000);
    +            pub const RCC = @as(*volatile types.RCC, @ptrFromInt(0x40021000));
                 ///  FLASH
    -            pub const FLASH = @ptrCast(*volatile types.FLASH, 0x40022000);
    +            pub const FLASH = @as(*volatile types.FLASH, @ptrFromInt(0x40022000));
                 ///  CRC calculation unit
    -            pub const CRC = @ptrCast(*volatile types.CRC, 0x40023000);
    +            pub const CRC = @as(*volatile types.CRC, @ptrFromInt(0x40023000));
                 ///  Ethernet: media access control
    -            pub const ETHERNET_MAC = @ptrCast(*volatile types.ETHERNET_MAC, 0x40028000);
    +            pub const ETHERNET_MAC = @as(*volatile types.ETHERNET_MAC, @ptrFromInt(0x40028000));
                 ///  Ethernet: MAC management counters
    -            pub const ETHERNET_MMC = @ptrCast(*volatile types.ETHERNET_MMC, 0x40028100);
    +            pub const ETHERNET_MMC = @as(*volatile types.ETHERNET_MMC, @ptrFromInt(0x40028100));
                 ///  Ethernet: Precision time protocol
    -            pub const ETHERNET_PTP = @ptrCast(*volatile types.ETHERNET_PTP, 0x40028700);
    +            pub const ETHERNET_PTP = @as(*volatile types.ETHERNET_PTP, @ptrFromInt(0x40028700));
                 ///  Ethernet: DMA controller operation
    -            pub const ETHERNET_DMA = @ptrCast(*volatile types.ETHERNET_DMA, 0x40029000);
    +            pub const ETHERNET_DMA = @as(*volatile types.ETHERNET_DMA, @ptrFromInt(0x40029000));
                 ///  USB on the go full speed
    -            pub const OTG_FS_GLOBAL = @ptrCast(*volatile types.OTG_FS_GLOBAL, 0x50000000);
    +            pub const OTG_FS_GLOBAL = @as(*volatile types.OTG_FS_GLOBAL, @ptrFromInt(0x50000000));
                 ///  USB on the go full speed
    -            pub const OTG_FS_HOST = @ptrCast(*volatile types.OTG_FS_HOST, 0x50000400);
    +            pub const OTG_FS_HOST = @as(*volatile types.OTG_FS_HOST, @ptrFromInt(0x50000400));
                 ///  USB on the go full speed
    -            pub const OTG_FS_DEVICE = @ptrCast(*volatile types.OTG_FS_DEVICE, 0x50000800);
    +            pub const OTG_FS_DEVICE = @as(*volatile types.OTG_FS_DEVICE, @ptrFromInt(0x50000800));
                 ///  USB on the go full speed
    -            pub const OTG_FS_PWRCLK = @ptrCast(*volatile types.OTG_FS_PWRCLK, 0x50000e00);
    +            pub const OTG_FS_PWRCLK = @as(*volatile types.OTG_FS_PWRCLK, @ptrFromInt(0x50000e00));
                 ///  Flexible static memory controller
    -            pub const FSMC = @ptrCast(*volatile types.FSMC, 0xa0000000);
    +            pub const FSMC = @as(*volatile types.FSMC, @ptrFromInt(0xa0000000));
                 ///  System control block ACTLR
    -            pub const SCB_ACTRL = @ptrCast(*volatile types.SCB_ACTRL, 0xe000e008);
    +            pub const SCB_ACTRL = @as(*volatile types.SCB_ACTRL, @ptrFromInt(0xe000e008));
                 ///  SysTick timer
    -            pub const STK = @ptrCast(*volatile types.STK, 0xe000e010);
    +            pub const STK = @as(*volatile types.STK, @ptrFromInt(0xe000e010));
                 ///  Nested Vectored Interrupt Controller
    -            pub const NVIC = @ptrCast(*volatile types.NVIC, 0xe000e100);
    +            pub const NVIC = @as(*volatile types.NVIC, @ptrFromInt(0xe000e100));
                 ///  System control block
    -            pub const SCB = @ptrCast(*volatile types.SCB, 0xe000ed00);
    +            pub const SCB = @as(*volatile types.SCB, @ptrFromInt(0xe000ed00));
                 ///  Memory protection unit
    -            pub const MPU = @ptrCast(*volatile types.MPU, 0xe000ed90);
    +            pub const MPU = @as(*volatile types.MPU, @ptrFromInt(0xe000ed90));
                 ///  Nested vectored interrupt controller
    -            pub const NVIC_STIR = @ptrCast(*volatile types.NVIC_STIR, 0xe000ef00);
    +            pub const NVIC_STIR = @as(*volatile types.NVIC_STIR, @ptrFromInt(0xe000ef00));
                 ///  Debug support
    -            pub const DBG = @ptrCast(*volatile types.DBG, 0xe0042000);
    +            pub const DBG = @as(*volatile types.DBG, @ptrFromInt(0xe0042000));
             };
         };
     };
    diff --git a/src/chips/STM32F303.zig b/src/chips/STM32F303.zig
    index 4bb914c29..f897dc632 100644
    --- a/src/chips/STM32F303.zig
    +++ b/src/chips/STM32F303.zig
    @@ -121,133 +121,133 @@ pub const devices = struct {
     
             pub const peripherals = struct {
                 ///  General purpose timer
    -            pub const TIM2 = @ptrCast(*volatile types.TIM2, 0x40000000);
    +            pub const TIM2 = @as(*volatile types.TIM2, @ptrFromInt(0x40000000));
                 ///  General purpose timer
    -            pub const TIM3 = @ptrCast(*volatile types.TIM2, 0x40000400);
    +            pub const TIM3 = @as(*volatile types.TIM2, @ptrFromInt(0x40000400));
                 ///  General purpose timer
    -            pub const TIM4 = @ptrCast(*volatile types.TIM2, 0x40000800);
    +            pub const TIM4 = @as(*volatile types.TIM2, @ptrFromInt(0x40000800));
                 ///  Basic timers
    -            pub const TIM6 = @ptrCast(*volatile types.TIM6, 0x40001000);
    +            pub const TIM6 = @as(*volatile types.TIM6, @ptrFromInt(0x40001000));
                 ///  Basic timers
    -            pub const TIM7 = @ptrCast(*volatile types.TIM6, 0x40001400);
    +            pub const TIM7 = @as(*volatile types.TIM6, @ptrFromInt(0x40001400));
                 ///  Real-time clock
    -            pub const RTC = @ptrCast(*volatile types.RTC, 0x40002800);
    +            pub const RTC = @as(*volatile types.RTC, @ptrFromInt(0x40002800));
                 ///  Window watchdog
    -            pub const WWDG = @ptrCast(*volatile types.WWDG, 0x40002c00);
    +            pub const WWDG = @as(*volatile types.WWDG, @ptrFromInt(0x40002c00));
                 ///  Independent watchdog
    -            pub const IWDG = @ptrCast(*volatile types.IWDG, 0x40003000);
    +            pub const IWDG = @as(*volatile types.IWDG, @ptrFromInt(0x40003000));
                 ///  Serial peripheral interface/Inter-IC sound
    -            pub const I2S2ext = @ptrCast(*volatile types.SPI1, 0x40003400);
    +            pub const I2S2ext = @as(*volatile types.SPI1, @ptrFromInt(0x40003400));
                 ///  Serial peripheral interface/Inter-IC sound
    -            pub const SPI2 = @ptrCast(*volatile types.SPI1, 0x40003800);
    +            pub const SPI2 = @as(*volatile types.SPI1, @ptrFromInt(0x40003800));
                 ///  Serial peripheral interface/Inter-IC sound
    -            pub const SPI3 = @ptrCast(*volatile types.SPI1, 0x40003c00);
    +            pub const SPI3 = @as(*volatile types.SPI1, @ptrFromInt(0x40003c00));
                 ///  Serial peripheral interface/Inter-IC sound
    -            pub const I2S3ext = @ptrCast(*volatile types.SPI1, 0x40004000);
    +            pub const I2S3ext = @as(*volatile types.SPI1, @ptrFromInt(0x40004000));
                 ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART2 = @ptrCast(*volatile types.USART1, 0x40004400);
    +            pub const USART2 = @as(*volatile types.USART1, @ptrFromInt(0x40004400));
                 ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART3 = @ptrCast(*volatile types.USART1, 0x40004800);
    +            pub const USART3 = @as(*volatile types.USART1, @ptrFromInt(0x40004800));
                 ///  Universal synchronous asynchronous receiver transmitter
    -            pub const UART4 = @ptrCast(*volatile types.USART1, 0x40004c00);
    +            pub const UART4 = @as(*volatile types.USART1, @ptrFromInt(0x40004c00));
                 ///  Universal synchronous asynchronous receiver transmitter
    -            pub const UART5 = @ptrCast(*volatile types.USART1, 0x40005000);
    +            pub const UART5 = @as(*volatile types.USART1, @ptrFromInt(0x40005000));
                 ///  Inter-integrated circuit
    -            pub const I2C1 = @ptrCast(*volatile types.I2C1, 0x40005400);
    +            pub const I2C1 = @as(*volatile types.I2C1, @ptrFromInt(0x40005400));
                 ///  Inter-integrated circuit
    -            pub const I2C2 = @ptrCast(*volatile types.I2C1, 0x40005800);
    +            pub const I2C2 = @as(*volatile types.I2C1, @ptrFromInt(0x40005800));
                 ///  Universal serial bus full-speed device interface
    -            pub const USB_FS = @ptrCast(*volatile types.USB_FS, 0x40005c00);
    +            pub const USB_FS = @as(*volatile types.USB_FS, @ptrFromInt(0x40005c00));
                 ///  Controller area network
    -            pub const CAN = @ptrCast(*volatile types.CAN, 0x40006400);
    +            pub const CAN = @as(*volatile types.CAN, @ptrFromInt(0x40006400));
                 ///  Power control
    -            pub const PWR = @ptrCast(*volatile types.PWR, 0x40007000);
    +            pub const PWR = @as(*volatile types.PWR, @ptrFromInt(0x40007000));
                 ///  Digital-to-analog converter
    -            pub const DAC = @ptrCast(*volatile types.DAC, 0x40007400);
    +            pub const DAC = @as(*volatile types.DAC, @ptrFromInt(0x40007400));
                 ///  Inter-integrated circuit
    -            pub const I2C3 = @ptrCast(*volatile types.I2C1, 0x40007800);
    +            pub const I2C3 = @as(*volatile types.I2C1, @ptrFromInt(0x40007800));
                 ///  System configuration controller _Comparator and Operational amplifier
    -            pub const SYSCFG_COMP_OPAMP = @ptrCast(*volatile types.SYSCFG_COMP_OPAMP, 0x40010000);
    +            pub const SYSCFG_COMP_OPAMP = @as(*volatile types.SYSCFG_COMP_OPAMP, @ptrFromInt(0x40010000));
                 ///  External interrupt/event controller
    -            pub const EXTI = @ptrCast(*volatile types.EXTI, 0x40010400);
    +            pub const EXTI = @as(*volatile types.EXTI, @ptrFromInt(0x40010400));
                 ///  Advanced timer
    -            pub const TIM1 = @ptrCast(*volatile types.TIM1, 0x40012c00);
    +            pub const TIM1 = @as(*volatile types.TIM1, @ptrFromInt(0x40012c00));
                 ///  Serial peripheral interface/Inter-IC sound
    -            pub const SPI1 = @ptrCast(*volatile types.SPI1, 0x40013000);
    +            pub const SPI1 = @as(*volatile types.SPI1, @ptrFromInt(0x40013000));
                 ///  Advanced-timers
    -            pub const TIM8 = @ptrCast(*volatile types.TIM8, 0x40013400);
    +            pub const TIM8 = @as(*volatile types.TIM8, @ptrFromInt(0x40013400));
                 ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART1 = @ptrCast(*volatile types.USART1, 0x40013800);
    +            pub const USART1 = @as(*volatile types.USART1, @ptrFromInt(0x40013800));
                 ///  Serial peripheral interface/Inter-IC sound
    -            pub const SPI4 = @ptrCast(*volatile types.SPI1, 0x40013c00);
    +            pub const SPI4 = @as(*volatile types.SPI1, @ptrFromInt(0x40013c00));
                 ///  General purpose timers
    -            pub const TIM15 = @ptrCast(*volatile types.TIM15, 0x40014000);
    +            pub const TIM15 = @as(*volatile types.TIM15, @ptrFromInt(0x40014000));
                 ///  General-purpose-timers
    -            pub const TIM16 = @ptrCast(*volatile types.TIM16, 0x40014400);
    +            pub const TIM16 = @as(*volatile types.TIM16, @ptrFromInt(0x40014400));
                 ///  General purpose timer
    -            pub const TIM17 = @ptrCast(*volatile types.TIM17, 0x40014800);
    +            pub const TIM17 = @as(*volatile types.TIM17, @ptrFromInt(0x40014800));
                 ///  Advanced timer
    -            pub const TIM20 = @ptrCast(*volatile types.TIM1, 0x40015000);
    +            pub const TIM20 = @as(*volatile types.TIM1, @ptrFromInt(0x40015000));
                 ///  DMA controller 1
    -            pub const DMA1 = @ptrCast(*volatile types.DMA1, 0x40020000);
    +            pub const DMA1 = @as(*volatile types.DMA1, @ptrFromInt(0x40020000));
                 ///  DMA controller 1
    -            pub const DMA2 = @ptrCast(*volatile types.DMA1, 0x40020400);
    +            pub const DMA2 = @as(*volatile types.DMA1, @ptrFromInt(0x40020400));
                 ///  Reset and clock control
    -            pub const RCC = @ptrCast(*volatile types.RCC, 0x40021000);
    +            pub const RCC = @as(*volatile types.RCC, @ptrFromInt(0x40021000));
                 ///  Flash
    -            pub const Flash = @ptrCast(*volatile types.Flash, 0x40022000);
    +            pub const Flash = @as(*volatile types.Flash, @ptrFromInt(0x40022000));
                 ///  cyclic redundancy check calculation unit
    -            pub const CRC = @ptrCast(*volatile types.CRC, 0x40023000);
    +            pub const CRC = @as(*volatile types.CRC, @ptrFromInt(0x40023000));
                 ///  Touch sensing controller
    -            pub const TSC = @ptrCast(*volatile types.TSC, 0x40024000);
    +            pub const TSC = @as(*volatile types.TSC, @ptrFromInt(0x40024000));
                 ///  General-purpose I/Os
    -            pub const GPIOA = @ptrCast(*volatile types.GPIOA, 0x48000000);
    +            pub const GPIOA = @as(*volatile types.GPIOA, @ptrFromInt(0x48000000));
                 ///  General-purpose I/Os
    -            pub const GPIOB = @ptrCast(*volatile types.GPIOB, 0x48000400);
    +            pub const GPIOB = @as(*volatile types.GPIOB, @ptrFromInt(0x48000400));
                 ///  General-purpose I/Os
    -            pub const GPIOC = @ptrCast(*volatile types.GPIOB, 0x48000800);
    +            pub const GPIOC = @as(*volatile types.GPIOB, @ptrFromInt(0x48000800));
                 ///  General-purpose I/Os
    -            pub const GPIOD = @ptrCast(*volatile types.GPIOB, 0x48000c00);
    +            pub const GPIOD = @as(*volatile types.GPIOB, @ptrFromInt(0x48000c00));
                 ///  General-purpose I/Os
    -            pub const GPIOE = @ptrCast(*volatile types.GPIOB, 0x48001000);
    +            pub const GPIOE = @as(*volatile types.GPIOB, @ptrFromInt(0x48001000));
                 ///  General-purpose I/Os
    -            pub const GPIOF = @ptrCast(*volatile types.GPIOB, 0x48001400);
    +            pub const GPIOF = @as(*volatile types.GPIOB, @ptrFromInt(0x48001400));
                 ///  General-purpose I/Os
    -            pub const GPIOG = @ptrCast(*volatile types.GPIOB, 0x48001800);
    +            pub const GPIOG = @as(*volatile types.GPIOB, @ptrFromInt(0x48001800));
                 ///  General-purpose I/Os
    -            pub const GPIOH = @ptrCast(*volatile types.GPIOB, 0x48001c00);
    +            pub const GPIOH = @as(*volatile types.GPIOB, @ptrFromInt(0x48001c00));
                 ///  Analog-to-Digital Converter
    -            pub const ADC1 = @ptrCast(*volatile types.ADC1, 0x50000000);
    +            pub const ADC1 = @as(*volatile types.ADC1, @ptrFromInt(0x50000000));
                 ///  Analog-to-Digital Converter
    -            pub const ADC2 = @ptrCast(*volatile types.ADC1, 0x50000100);
    +            pub const ADC2 = @as(*volatile types.ADC1, @ptrFromInt(0x50000100));
                 ///  Analog-to-Digital Converter
    -            pub const ADC1_2 = @ptrCast(*volatile types.ADC1_2, 0x50000300);
    +            pub const ADC1_2 = @as(*volatile types.ADC1_2, @ptrFromInt(0x50000300));
                 ///  Analog-to-Digital Converter
    -            pub const ADC3 = @ptrCast(*volatile types.ADC1, 0x50000400);
    +            pub const ADC3 = @as(*volatile types.ADC1, @ptrFromInt(0x50000400));
                 ///  Analog-to-Digital Converter
    -            pub const ADC4 = @ptrCast(*volatile types.ADC1, 0x50000500);
    +            pub const ADC4 = @as(*volatile types.ADC1, @ptrFromInt(0x50000500));
                 ///  Analog-to-Digital Converter
    -            pub const ADC3_4 = @ptrCast(*volatile types.ADC1_2, 0x50000700);
    +            pub const ADC3_4 = @as(*volatile types.ADC1_2, @ptrFromInt(0x50000700));
                 ///  Flexible memory controller
    -            pub const FMC = @ptrCast(*volatile types.FMC, 0xa0000400);
    +            pub const FMC = @as(*volatile types.FMC, @ptrFromInt(0xa0000400));
                 ///  System control block ACTLR
    -            pub const SCB_ACTRL = @ptrCast(*volatile types.SCB_ACTRL, 0xe000e008);
    +            pub const SCB_ACTRL = @as(*volatile types.SCB_ACTRL, @ptrFromInt(0xe000e008));
                 ///  SysTick timer
    -            pub const STK = @ptrCast(*volatile types.STK, 0xe000e010);
    +            pub const STK = @as(*volatile types.STK, @ptrFromInt(0xe000e010));
                 ///  Nested Vectored Interrupt Controller
    -            pub const NVIC = @ptrCast(*volatile types.NVIC, 0xe000e100);
    +            pub const NVIC = @as(*volatile types.NVIC, @ptrFromInt(0xe000e100));
                 ///  System control block
    -            pub const SCB = @ptrCast(*volatile types.SCB, 0xe000ed00);
    +            pub const SCB = @as(*volatile types.SCB, @ptrFromInt(0xe000ed00));
                 ///  Floating point unit CPACR
    -            pub const FPU_CPACR = @ptrCast(*volatile types.FPU_CPACR, 0xe000ed88);
    +            pub const FPU_CPACR = @as(*volatile types.FPU_CPACR, @ptrFromInt(0xe000ed88));
                 ///  Memory protection unit
    -            pub const MPU = @ptrCast(*volatile types.MPU, 0xe000ed90);
    +            pub const MPU = @as(*volatile types.MPU, @ptrFromInt(0xe000ed90));
                 ///  Nested vectored interrupt controller
    -            pub const NVIC_STIR = @ptrCast(*volatile types.NVIC_STIR, 0xe000ef00);
    +            pub const NVIC_STIR = @as(*volatile types.NVIC_STIR, @ptrFromInt(0xe000ef00));
                 ///  Floting point unit
    -            pub const FPU = @ptrCast(*volatile types.FPU, 0xe000ef34);
    +            pub const FPU = @as(*volatile types.FPU, @ptrFromInt(0xe000ef34));
                 ///  Debug support
    -            pub const DBGMCU = @ptrCast(*volatile types.DBGMCU, 0xe0042000);
    +            pub const DBGMCU = @as(*volatile types.DBGMCU, @ptrFromInt(0xe0042000));
             };
         };
     };
    diff --git a/src/chips/STM32F407.zig b/src/chips/STM32F407.zig
    index bf7ea6912..c0d311a27 100644
    --- a/src/chips/STM32F407.zig
    +++ b/src/chips/STM32F407.zig
    @@ -138,187 +138,187 @@ pub const devices = struct {
     
             pub const peripherals = struct {
                 ///  General purpose timers
    -            pub const TIM2 = @ptrCast(*volatile types.TIM2, 0x40000000);
    +            pub const TIM2 = @as(*volatile types.TIM2, @ptrFromInt(0x40000000));
                 ///  General purpose timers
    -            pub const TIM3 = @ptrCast(*volatile types.TIM3, 0x40000400);
    +            pub const TIM3 = @as(*volatile types.TIM3, @ptrFromInt(0x40000400));
                 ///  General purpose timers
    -            pub const TIM4 = @ptrCast(*volatile types.TIM3, 0x40000800);
    +            pub const TIM4 = @as(*volatile types.TIM3, @ptrFromInt(0x40000800));
                 ///  General-purpose-timers
    -            pub const TIM5 = @ptrCast(*volatile types.TIM5, 0x40000c00);
    +            pub const TIM5 = @as(*volatile types.TIM5, @ptrFromInt(0x40000c00));
                 ///  Basic timers
    -            pub const TIM6 = @ptrCast(*volatile types.TIM6, 0x40001000);
    +            pub const TIM6 = @as(*volatile types.TIM6, @ptrFromInt(0x40001000));
                 ///  Basic timers
    -            pub const TIM7 = @ptrCast(*volatile types.TIM6, 0x40001400);
    +            pub const TIM7 = @as(*volatile types.TIM6, @ptrFromInt(0x40001400));
                 ///  General purpose timers
    -            pub const TIM12 = @ptrCast(*volatile types.TIM9, 0x40001800);
    +            pub const TIM12 = @as(*volatile types.TIM9, @ptrFromInt(0x40001800));
                 ///  General-purpose-timers
    -            pub const TIM13 = @ptrCast(*volatile types.TIM10, 0x40001c00);
    +            pub const TIM13 = @as(*volatile types.TIM10, @ptrFromInt(0x40001c00));
                 ///  General-purpose-timers
    -            pub const TIM14 = @ptrCast(*volatile types.TIM10, 0x40002000);
    +            pub const TIM14 = @as(*volatile types.TIM10, @ptrFromInt(0x40002000));
                 ///  Real-time clock
    -            pub const RTC = @ptrCast(*volatile types.RTC, 0x40002800);
    +            pub const RTC = @as(*volatile types.RTC, @ptrFromInt(0x40002800));
                 ///  Window watchdog
    -            pub const WWDG = @ptrCast(*volatile types.WWDG, 0x40002c00);
    +            pub const WWDG = @as(*volatile types.WWDG, @ptrFromInt(0x40002c00));
                 ///  Independent watchdog
    -            pub const IWDG = @ptrCast(*volatile types.IWDG, 0x40003000);
    +            pub const IWDG = @as(*volatile types.IWDG, @ptrFromInt(0x40003000));
                 ///  Serial peripheral interface
    -            pub const I2S2ext = @ptrCast(*volatile types.SPI1, 0x40003400);
    +            pub const I2S2ext = @as(*volatile types.SPI1, @ptrFromInt(0x40003400));
                 ///  Serial peripheral interface
    -            pub const SPI2 = @ptrCast(*volatile types.SPI1, 0x40003800);
    +            pub const SPI2 = @as(*volatile types.SPI1, @ptrFromInt(0x40003800));
                 ///  Serial peripheral interface
    -            pub const SPI3 = @ptrCast(*volatile types.SPI1, 0x40003c00);
    +            pub const SPI3 = @as(*volatile types.SPI1, @ptrFromInt(0x40003c00));
                 ///  Serial peripheral interface
    -            pub const I2S3ext = @ptrCast(*volatile types.SPI1, 0x40004000);
    +            pub const I2S3ext = @as(*volatile types.SPI1, @ptrFromInt(0x40004000));
                 ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART2 = @ptrCast(*volatile types.USART6, 0x40004400);
    +            pub const USART2 = @as(*volatile types.USART6, @ptrFromInt(0x40004400));
                 ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART3 = @ptrCast(*volatile types.USART6, 0x40004800);
    +            pub const USART3 = @as(*volatile types.USART6, @ptrFromInt(0x40004800));
                 ///  Universal synchronous asynchronous receiver transmitter
    -            pub const UART4 = @ptrCast(*volatile types.UART4, 0x40004c00);
    +            pub const UART4 = @as(*volatile types.UART4, @ptrFromInt(0x40004c00));
                 ///  Universal synchronous asynchronous receiver transmitter
    -            pub const UART5 = @ptrCast(*volatile types.UART4, 0x40005000);
    +            pub const UART5 = @as(*volatile types.UART4, @ptrFromInt(0x40005000));
                 ///  Inter-integrated circuit
    -            pub const I2C1 = @ptrCast(*volatile types.I2C3, 0x40005400);
    +            pub const I2C1 = @as(*volatile types.I2C3, @ptrFromInt(0x40005400));
                 ///  Inter-integrated circuit
    -            pub const I2C2 = @ptrCast(*volatile types.I2C3, 0x40005800);
    +            pub const I2C2 = @as(*volatile types.I2C3, @ptrFromInt(0x40005800));
                 ///  Inter-integrated circuit
    -            pub const I2C3 = @ptrCast(*volatile types.I2C3, 0x40005c00);
    +            pub const I2C3 = @as(*volatile types.I2C3, @ptrFromInt(0x40005c00));
                 ///  Controller area network
    -            pub const CAN1 = @ptrCast(*volatile types.CAN1, 0x40006400);
    +            pub const CAN1 = @as(*volatile types.CAN1, @ptrFromInt(0x40006400));
                 ///  Controller area network
    -            pub const CAN2 = @ptrCast(*volatile types.CAN1, 0x40006800);
    +            pub const CAN2 = @as(*volatile types.CAN1, @ptrFromInt(0x40006800));
                 ///  Power control
    -            pub const PWR = @ptrCast(*volatile types.PWR, 0x40007000);
    +            pub const PWR = @as(*volatile types.PWR, @ptrFromInt(0x40007000));
                 ///  Digital-to-analog converter
    -            pub const DAC = @ptrCast(*volatile types.DAC, 0x40007400);
    +            pub const DAC = @as(*volatile types.DAC, @ptrFromInt(0x40007400));
                 ///  Universal synchronous asynchronous receiver transmitter
    -            pub const UART7 = @ptrCast(*volatile types.UART4, 0x40007800);
    +            pub const UART7 = @as(*volatile types.UART4, @ptrFromInt(0x40007800));
                 ///  Universal synchronous asynchronous receiver transmitter
    -            pub const UART8 = @ptrCast(*volatile types.UART4, 0x40007c00);
    +            pub const UART8 = @as(*volatile types.UART4, @ptrFromInt(0x40007c00));
                 ///  Advanced-timers
    -            pub const TIM1 = @ptrCast(*volatile types.TIM1, 0x40010000);
    +            pub const TIM1 = @as(*volatile types.TIM1, @ptrFromInt(0x40010000));
                 ///  Advanced-timers
    -            pub const TIM8 = @ptrCast(*volatile types.TIM1, 0x40010400);
    +            pub const TIM8 = @as(*volatile types.TIM1, @ptrFromInt(0x40010400));
                 ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART1 = @ptrCast(*volatile types.USART6, 0x40011000);
    +            pub const USART1 = @as(*volatile types.USART6, @ptrFromInt(0x40011000));
                 ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART6 = @ptrCast(*volatile types.USART6, 0x40011400);
    +            pub const USART6 = @as(*volatile types.USART6, @ptrFromInt(0x40011400));
                 ///  Analog-to-digital converter
    -            pub const ADC1 = @ptrCast(*volatile types.ADC1, 0x40012000);
    +            pub const ADC1 = @as(*volatile types.ADC1, @ptrFromInt(0x40012000));
                 ///  Analog-to-digital converter
    -            pub const ADC2 = @ptrCast(*volatile types.ADC1, 0x40012100);
    +            pub const ADC2 = @as(*volatile types.ADC1, @ptrFromInt(0x40012100));
                 ///  Analog-to-digital converter
    -            pub const ADC3 = @ptrCast(*volatile types.ADC1, 0x40012200);
    +            pub const ADC3 = @as(*volatile types.ADC1, @ptrFromInt(0x40012200));
                 ///  Common ADC registers
    -            pub const C_ADC = @ptrCast(*volatile types.C_ADC, 0x40012300);
    +            pub const C_ADC = @as(*volatile types.C_ADC, @ptrFromInt(0x40012300));
                 ///  Secure digital input/output interface
    -            pub const SDIO = @ptrCast(*volatile types.SDIO, 0x40012c00);
    +            pub const SDIO = @as(*volatile types.SDIO, @ptrFromInt(0x40012c00));
                 ///  Serial peripheral interface
    -            pub const SPI1 = @ptrCast(*volatile types.SPI1, 0x40013000);
    +            pub const SPI1 = @as(*volatile types.SPI1, @ptrFromInt(0x40013000));
                 ///  Serial peripheral interface
    -            pub const SPI4 = @ptrCast(*volatile types.SPI1, 0x40013400);
    +            pub const SPI4 = @as(*volatile types.SPI1, @ptrFromInt(0x40013400));
                 ///  System configuration controller
    -            pub const SYSCFG = @ptrCast(*volatile types.SYSCFG, 0x40013800);
    +            pub const SYSCFG = @as(*volatile types.SYSCFG, @ptrFromInt(0x40013800));
                 ///  External interrupt/event controller
    -            pub const EXTI = @ptrCast(*volatile types.EXTI, 0x40013c00);
    +            pub const EXTI = @as(*volatile types.EXTI, @ptrFromInt(0x40013c00));
                 ///  General purpose timers
    -            pub const TIM9 = @ptrCast(*volatile types.TIM9, 0x40014000);
    +            pub const TIM9 = @as(*volatile types.TIM9, @ptrFromInt(0x40014000));
                 ///  General-purpose-timers
    -            pub const TIM10 = @ptrCast(*volatile types.TIM10, 0x40014400);
    +            pub const TIM10 = @as(*volatile types.TIM10, @ptrFromInt(0x40014400));
                 ///  General-purpose-timers
    -            pub const TIM11 = @ptrCast(*volatile types.TIM11, 0x40014800);
    +            pub const TIM11 = @as(*volatile types.TIM11, @ptrFromInt(0x40014800));
                 ///  Serial peripheral interface
    -            pub const SPI5 = @ptrCast(*volatile types.SPI1, 0x40015000);
    +            pub const SPI5 = @as(*volatile types.SPI1, @ptrFromInt(0x40015000));
                 ///  Serial peripheral interface
    -            pub const SPI6 = @ptrCast(*volatile types.SPI1, 0x40015400);
    +            pub const SPI6 = @as(*volatile types.SPI1, @ptrFromInt(0x40015400));
                 ///  Serial audio interface
    -            pub const SAI1 = @ptrCast(*volatile types.SAI1, 0x40015800);
    +            pub const SAI1 = @as(*volatile types.SAI1, @ptrFromInt(0x40015800));
                 ///  LCD-TFT Controller
    -            pub const LTDC = @ptrCast(*volatile types.LTDC, 0x40016800);
    +            pub const LTDC = @as(*volatile types.LTDC, @ptrFromInt(0x40016800));
                 ///  General-purpose I/Os
    -            pub const GPIOA = @ptrCast(*volatile types.GPIOA, 0x40020000);
    +            pub const GPIOA = @as(*volatile types.GPIOA, @ptrFromInt(0x40020000));
                 ///  General-purpose I/Os
    -            pub const GPIOB = @ptrCast(*volatile types.GPIOB, 0x40020400);
    +            pub const GPIOB = @as(*volatile types.GPIOB, @ptrFromInt(0x40020400));
                 ///  General-purpose I/Os
    -            pub const GPIOC = @ptrCast(*volatile types.GPIOI, 0x40020800);
    +            pub const GPIOC = @as(*volatile types.GPIOI, @ptrFromInt(0x40020800));
                 ///  General-purpose I/Os
    -            pub const GPIOD = @ptrCast(*volatile types.GPIOI, 0x40020c00);
    +            pub const GPIOD = @as(*volatile types.GPIOI, @ptrFromInt(0x40020c00));
                 ///  General-purpose I/Os
    -            pub const GPIOE = @ptrCast(*volatile types.GPIOI, 0x40021000);
    +            pub const GPIOE = @as(*volatile types.GPIOI, @ptrFromInt(0x40021000));
                 ///  General-purpose I/Os
    -            pub const GPIOF = @ptrCast(*volatile types.GPIOI, 0x40021400);
    +            pub const GPIOF = @as(*volatile types.GPIOI, @ptrFromInt(0x40021400));
                 ///  General-purpose I/Os
    -            pub const GPIOG = @ptrCast(*volatile types.GPIOI, 0x40021800);
    +            pub const GPIOG = @as(*volatile types.GPIOI, @ptrFromInt(0x40021800));
                 ///  General-purpose I/Os
    -            pub const GPIOH = @ptrCast(*volatile types.GPIOI, 0x40021c00);
    +            pub const GPIOH = @as(*volatile types.GPIOI, @ptrFromInt(0x40021c00));
                 ///  General-purpose I/Os
    -            pub const GPIOI = @ptrCast(*volatile types.GPIOI, 0x40022000);
    +            pub const GPIOI = @as(*volatile types.GPIOI, @ptrFromInt(0x40022000));
                 ///  General-purpose I/Os
    -            pub const GPIOJ = @ptrCast(*volatile types.GPIOI, 0x40022400);
    +            pub const GPIOJ = @as(*volatile types.GPIOI, @ptrFromInt(0x40022400));
                 ///  General-purpose I/Os
    -            pub const GPIOK = @ptrCast(*volatile types.GPIOI, 0x40022800);
    +            pub const GPIOK = @as(*volatile types.GPIOI, @ptrFromInt(0x40022800));
                 ///  Cryptographic processor
    -            pub const CRC = @ptrCast(*volatile types.CRC, 0x40023000);
    +            pub const CRC = @as(*volatile types.CRC, @ptrFromInt(0x40023000));
                 ///  Reset and clock control
    -            pub const RCC = @ptrCast(*volatile types.RCC, 0x40023800);
    +            pub const RCC = @as(*volatile types.RCC, @ptrFromInt(0x40023800));
                 ///  FLASH
    -            pub const FLASH = @ptrCast(*volatile types.FLASH, 0x40023c00);
    +            pub const FLASH = @as(*volatile types.FLASH, @ptrFromInt(0x40023c00));
                 ///  DMA controller
    -            pub const DMA1 = @ptrCast(*volatile types.DMA2, 0x40026000);
    +            pub const DMA1 = @as(*volatile types.DMA2, @ptrFromInt(0x40026000));
                 ///  DMA controller
    -            pub const DMA2 = @ptrCast(*volatile types.DMA2, 0x40026400);
    +            pub const DMA2 = @as(*volatile types.DMA2, @ptrFromInt(0x40026400));
                 ///  Ethernet: media access control (MAC)
    -            pub const Ethernet_MAC = @ptrCast(*volatile types.Ethernet_MAC, 0x40028000);
    +            pub const Ethernet_MAC = @as(*volatile types.Ethernet_MAC, @ptrFromInt(0x40028000));
                 ///  Ethernet: MAC management counters
    -            pub const Ethernet_MMC = @ptrCast(*volatile types.Ethernet_MMC, 0x40028100);
    +            pub const Ethernet_MMC = @as(*volatile types.Ethernet_MMC, @ptrFromInt(0x40028100));
                 ///  Ethernet: Precision time protocol
    -            pub const Ethernet_PTP = @ptrCast(*volatile types.Ethernet_PTP, 0x40028700);
    +            pub const Ethernet_PTP = @as(*volatile types.Ethernet_PTP, @ptrFromInt(0x40028700));
                 ///  Ethernet: DMA controller operation
    -            pub const Ethernet_DMA = @ptrCast(*volatile types.Ethernet_DMA, 0x40029000);
    +            pub const Ethernet_DMA = @as(*volatile types.Ethernet_DMA, @ptrFromInt(0x40029000));
                 ///  USB on the go high speed
    -            pub const OTG_HS_GLOBAL = @ptrCast(*volatile types.OTG_HS_GLOBAL, 0x40040000);
    +            pub const OTG_HS_GLOBAL = @as(*volatile types.OTG_HS_GLOBAL, @ptrFromInt(0x40040000));
                 ///  USB on the go high speed
    -            pub const OTG_HS_HOST = @ptrCast(*volatile types.OTG_HS_HOST, 0x40040400);
    +            pub const OTG_HS_HOST = @as(*volatile types.OTG_HS_HOST, @ptrFromInt(0x40040400));
                 ///  USB on the go high speed
    -            pub const OTG_HS_DEVICE = @ptrCast(*volatile types.OTG_HS_DEVICE, 0x40040800);
    +            pub const OTG_HS_DEVICE = @as(*volatile types.OTG_HS_DEVICE, @ptrFromInt(0x40040800));
                 ///  USB on the go high speed
    -            pub const OTG_HS_PWRCLK = @ptrCast(*volatile types.OTG_HS_PWRCLK, 0x40040e00);
    +            pub const OTG_HS_PWRCLK = @as(*volatile types.OTG_HS_PWRCLK, @ptrFromInt(0x40040e00));
                 ///  USB on the go full speed
    -            pub const OTG_FS_GLOBAL = @ptrCast(*volatile types.OTG_FS_GLOBAL, 0x50000000);
    +            pub const OTG_FS_GLOBAL = @as(*volatile types.OTG_FS_GLOBAL, @ptrFromInt(0x50000000));
                 ///  USB on the go full speed
    -            pub const OTG_FS_HOST = @ptrCast(*volatile types.OTG_FS_HOST, 0x50000400);
    +            pub const OTG_FS_HOST = @as(*volatile types.OTG_FS_HOST, @ptrFromInt(0x50000400));
                 ///  USB on the go full speed
    -            pub const OTG_FS_DEVICE = @ptrCast(*volatile types.OTG_FS_DEVICE, 0x50000800);
    +            pub const OTG_FS_DEVICE = @as(*volatile types.OTG_FS_DEVICE, @ptrFromInt(0x50000800));
                 ///  USB on the go full speed
    -            pub const OTG_FS_PWRCLK = @ptrCast(*volatile types.OTG_FS_PWRCLK, 0x50000e00);
    +            pub const OTG_FS_PWRCLK = @as(*volatile types.OTG_FS_PWRCLK, @ptrFromInt(0x50000e00));
                 ///  Digital camera interface
    -            pub const DCMI = @ptrCast(*volatile types.DCMI, 0x50050000);
    +            pub const DCMI = @as(*volatile types.DCMI, @ptrFromInt(0x50050000));
                 ///  Cryptographic processor
    -            pub const CRYP = @ptrCast(*volatile types.CRYP, 0x50060000);
    +            pub const CRYP = @as(*volatile types.CRYP, @ptrFromInt(0x50060000));
                 ///  Hash processor
    -            pub const HASH = @ptrCast(*volatile types.HASH, 0x50060400);
    +            pub const HASH = @as(*volatile types.HASH, @ptrFromInt(0x50060400));
                 ///  Random number generator
    -            pub const RNG = @ptrCast(*volatile types.RNG, 0x50060800);
    +            pub const RNG = @as(*volatile types.RNG, @ptrFromInt(0x50060800));
                 ///  Flexible static memory controller
    -            pub const FSMC = @ptrCast(*volatile types.FSMC, 0xa0000000);
    +            pub const FSMC = @as(*volatile types.FSMC, @ptrFromInt(0xa0000000));
                 ///  System control block ACTLR
    -            pub const SCB_ACTRL = @ptrCast(*volatile types.SCB_ACTRL, 0xe000e008);
    +            pub const SCB_ACTRL = @as(*volatile types.SCB_ACTRL, @ptrFromInt(0xe000e008));
                 ///  SysTick timer
    -            pub const STK = @ptrCast(*volatile types.STK, 0xe000e010);
    +            pub const STK = @as(*volatile types.STK, @ptrFromInt(0xe000e010));
                 ///  Nested Vectored Interrupt Controller
    -            pub const NVIC = @ptrCast(*volatile types.NVIC, 0xe000e100);
    +            pub const NVIC = @as(*volatile types.NVIC, @ptrFromInt(0xe000e100));
                 ///  System control block
    -            pub const SCB = @ptrCast(*volatile types.SCB, 0xe000ed00);
    +            pub const SCB = @as(*volatile types.SCB, @ptrFromInt(0xe000ed00));
                 ///  Floating point unit CPACR
    -            pub const FPU_CPACR = @ptrCast(*volatile types.FPU_CPACR, 0xe000ed88);
    +            pub const FPU_CPACR = @as(*volatile types.FPU_CPACR, @ptrFromInt(0xe000ed88));
                 ///  Memory protection unit
    -            pub const MPU = @ptrCast(*volatile types.MPU, 0xe000ed90);
    +            pub const MPU = @as(*volatile types.MPU, @ptrFromInt(0xe000ed90));
                 ///  Nested vectored interrupt controller
    -            pub const NVIC_STIR = @ptrCast(*volatile types.NVIC_STIR, 0xe000ef00);
    +            pub const NVIC_STIR = @as(*volatile types.NVIC_STIR, @ptrFromInt(0xe000ef00));
                 ///  Floting point unit
    -            pub const FPU = @ptrCast(*volatile types.FPU, 0xe000ef34);
    +            pub const FPU = @as(*volatile types.FPU, @ptrFromInt(0xe000ef34));
                 ///  Debug support
    -            pub const DBG = @ptrCast(*volatile types.DBG, 0xe0042000);
    +            pub const DBG = @as(*volatile types.DBG, @ptrFromInt(0xe0042000));
             };
         };
     };
    diff --git a/src/chips/STM32F429.zig b/src/chips/STM32F429.zig
    index 73b943659..8638044a2 100644
    --- a/src/chips/STM32F429.zig
    +++ b/src/chips/STM32F429.zig
    @@ -149,189 +149,189 @@ pub const devices = struct {
     
             pub const peripherals = struct {
                 ///  General purpose timers
    -            pub const TIM2 = @ptrCast(*volatile types.TIM2, 0x40000000);
    +            pub const TIM2 = @as(*volatile types.TIM2, @ptrFromInt(0x40000000));
                 ///  General purpose timers
    -            pub const TIM3 = @ptrCast(*volatile types.TIM3, 0x40000400);
    +            pub const TIM3 = @as(*volatile types.TIM3, @ptrFromInt(0x40000400));
                 ///  General purpose timers
    -            pub const TIM4 = @ptrCast(*volatile types.TIM3, 0x40000800);
    +            pub const TIM4 = @as(*volatile types.TIM3, @ptrFromInt(0x40000800));
                 ///  General-purpose-timers
    -            pub const TIM5 = @ptrCast(*volatile types.TIM5, 0x40000c00);
    +            pub const TIM5 = @as(*volatile types.TIM5, @ptrFromInt(0x40000c00));
                 ///  Basic timers
    -            pub const TIM6 = @ptrCast(*volatile types.TIM6, 0x40001000);
    +            pub const TIM6 = @as(*volatile types.TIM6, @ptrFromInt(0x40001000));
                 ///  Basic timers
    -            pub const TIM7 = @ptrCast(*volatile types.TIM6, 0x40001400);
    +            pub const TIM7 = @as(*volatile types.TIM6, @ptrFromInt(0x40001400));
                 ///  General purpose timers
    -            pub const TIM12 = @ptrCast(*volatile types.TIM9, 0x40001800);
    +            pub const TIM12 = @as(*volatile types.TIM9, @ptrFromInt(0x40001800));
                 ///  General-purpose-timers
    -            pub const TIM13 = @ptrCast(*volatile types.TIM10, 0x40001c00);
    +            pub const TIM13 = @as(*volatile types.TIM10, @ptrFromInt(0x40001c00));
                 ///  General-purpose-timers
    -            pub const TIM14 = @ptrCast(*volatile types.TIM10, 0x40002000);
    +            pub const TIM14 = @as(*volatile types.TIM10, @ptrFromInt(0x40002000));
                 ///  Real-time clock
    -            pub const RTC = @ptrCast(*volatile types.RTC, 0x40002800);
    +            pub const RTC = @as(*volatile types.RTC, @ptrFromInt(0x40002800));
                 ///  Window watchdog
    -            pub const WWDG = @ptrCast(*volatile types.WWDG, 0x40002c00);
    +            pub const WWDG = @as(*volatile types.WWDG, @ptrFromInt(0x40002c00));
                 ///  Independent watchdog
    -            pub const IWDG = @ptrCast(*volatile types.IWDG, 0x40003000);
    +            pub const IWDG = @as(*volatile types.IWDG, @ptrFromInt(0x40003000));
                 ///  Serial peripheral interface
    -            pub const I2S2ext = @ptrCast(*volatile types.SPI1, 0x40003400);
    +            pub const I2S2ext = @as(*volatile types.SPI1, @ptrFromInt(0x40003400));
                 ///  Serial peripheral interface
    -            pub const SPI2 = @ptrCast(*volatile types.SPI1, 0x40003800);
    +            pub const SPI2 = @as(*volatile types.SPI1, @ptrFromInt(0x40003800));
                 ///  Serial peripheral interface
    -            pub const SPI3 = @ptrCast(*volatile types.SPI1, 0x40003c00);
    +            pub const SPI3 = @as(*volatile types.SPI1, @ptrFromInt(0x40003c00));
                 ///  Serial peripheral interface
    -            pub const I2S3ext = @ptrCast(*volatile types.SPI1, 0x40004000);
    +            pub const I2S3ext = @as(*volatile types.SPI1, @ptrFromInt(0x40004000));
                 ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART2 = @ptrCast(*volatile types.USART6, 0x40004400);
    +            pub const USART2 = @as(*volatile types.USART6, @ptrFromInt(0x40004400));
                 ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART3 = @ptrCast(*volatile types.USART6, 0x40004800);
    +            pub const USART3 = @as(*volatile types.USART6, @ptrFromInt(0x40004800));
                 ///  Universal synchronous asynchronous receiver transmitter
    -            pub const UART4 = @ptrCast(*volatile types.UART4, 0x40004c00);
    +            pub const UART4 = @as(*volatile types.UART4, @ptrFromInt(0x40004c00));
                 ///  Universal synchronous asynchronous receiver transmitter
    -            pub const UART5 = @ptrCast(*volatile types.UART4, 0x40005000);
    +            pub const UART5 = @as(*volatile types.UART4, @ptrFromInt(0x40005000));
                 ///  Inter-integrated circuit
    -            pub const I2C1 = @ptrCast(*volatile types.I2C3, 0x40005400);
    +            pub const I2C1 = @as(*volatile types.I2C3, @ptrFromInt(0x40005400));
                 ///  Inter-integrated circuit
    -            pub const I2C2 = @ptrCast(*volatile types.I2C3, 0x40005800);
    +            pub const I2C2 = @as(*volatile types.I2C3, @ptrFromInt(0x40005800));
                 ///  Inter-integrated circuit
    -            pub const I2C3 = @ptrCast(*volatile types.I2C3, 0x40005c00);
    +            pub const I2C3 = @as(*volatile types.I2C3, @ptrFromInt(0x40005c00));
                 ///  Controller area network
    -            pub const CAN1 = @ptrCast(*volatile types.CAN1, 0x40006400);
    +            pub const CAN1 = @as(*volatile types.CAN1, @ptrFromInt(0x40006400));
                 ///  Controller area network
    -            pub const CAN2 = @ptrCast(*volatile types.CAN1, 0x40006800);
    +            pub const CAN2 = @as(*volatile types.CAN1, @ptrFromInt(0x40006800));
                 ///  Power control
    -            pub const PWR = @ptrCast(*volatile types.PWR, 0x40007000);
    +            pub const PWR = @as(*volatile types.PWR, @ptrFromInt(0x40007000));
                 ///  Digital-to-analog converter
    -            pub const DAC = @ptrCast(*volatile types.DAC, 0x40007400);
    +            pub const DAC = @as(*volatile types.DAC, @ptrFromInt(0x40007400));
                 ///  Universal synchronous asynchronous receiver transmitter
    -            pub const UART7 = @ptrCast(*volatile types.USART6, 0x40007800);
    +            pub const UART7 = @as(*volatile types.USART6, @ptrFromInt(0x40007800));
                 ///  Universal synchronous asynchronous receiver transmitter
    -            pub const UART8 = @ptrCast(*volatile types.USART6, 0x40007c00);
    +            pub const UART8 = @as(*volatile types.USART6, @ptrFromInt(0x40007c00));
                 ///  Advanced-timers
    -            pub const TIM1 = @ptrCast(*volatile types.TIM1, 0x40010000);
    +            pub const TIM1 = @as(*volatile types.TIM1, @ptrFromInt(0x40010000));
                 ///  Advanced-timers
    -            pub const TIM8 = @ptrCast(*volatile types.TIM1, 0x40010400);
    +            pub const TIM8 = @as(*volatile types.TIM1, @ptrFromInt(0x40010400));
                 ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART1 = @ptrCast(*volatile types.USART6, 0x40011000);
    +            pub const USART1 = @as(*volatile types.USART6, @ptrFromInt(0x40011000));
                 ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART6 = @ptrCast(*volatile types.USART6, 0x40011400);
    +            pub const USART6 = @as(*volatile types.USART6, @ptrFromInt(0x40011400));
                 ///  Analog-to-digital converter
    -            pub const ADC1 = @ptrCast(*volatile types.ADC1, 0x40012000);
    +            pub const ADC1 = @as(*volatile types.ADC1, @ptrFromInt(0x40012000));
                 ///  Analog-to-digital converter
    -            pub const ADC2 = @ptrCast(*volatile types.ADC1, 0x40012100);
    +            pub const ADC2 = @as(*volatile types.ADC1, @ptrFromInt(0x40012100));
                 ///  Analog-to-digital converter
    -            pub const ADC3 = @ptrCast(*volatile types.ADC1, 0x40012200);
    +            pub const ADC3 = @as(*volatile types.ADC1, @ptrFromInt(0x40012200));
                 ///  Common ADC registers
    -            pub const C_ADC = @ptrCast(*volatile types.C_ADC, 0x40012300);
    +            pub const C_ADC = @as(*volatile types.C_ADC, @ptrFromInt(0x40012300));
                 ///  Secure digital input/output interface
    -            pub const SDIO = @ptrCast(*volatile types.SDIO, 0x40012c00);
    +            pub const SDIO = @as(*volatile types.SDIO, @ptrFromInt(0x40012c00));
                 ///  Serial peripheral interface
    -            pub const SPI1 = @ptrCast(*volatile types.SPI1, 0x40013000);
    +            pub const SPI1 = @as(*volatile types.SPI1, @ptrFromInt(0x40013000));
                 ///  Serial peripheral interface
    -            pub const SPI4 = @ptrCast(*volatile types.SPI1, 0x40013400);
    +            pub const SPI4 = @as(*volatile types.SPI1, @ptrFromInt(0x40013400));
                 ///  System configuration controller
    -            pub const SYSCFG = @ptrCast(*volatile types.SYSCFG, 0x40013800);
    +            pub const SYSCFG = @as(*volatile types.SYSCFG, @ptrFromInt(0x40013800));
                 ///  External interrupt/event controller
    -            pub const EXTI = @ptrCast(*volatile types.EXTI, 0x40013c00);
    +            pub const EXTI = @as(*volatile types.EXTI, @ptrFromInt(0x40013c00));
                 ///  General purpose timers
    -            pub const TIM9 = @ptrCast(*volatile types.TIM9, 0x40014000);
    +            pub const TIM9 = @as(*volatile types.TIM9, @ptrFromInt(0x40014000));
                 ///  General-purpose-timers
    -            pub const TIM10 = @ptrCast(*volatile types.TIM10, 0x40014400);
    +            pub const TIM10 = @as(*volatile types.TIM10, @ptrFromInt(0x40014400));
                 ///  General-purpose-timers
    -            pub const TIM11 = @ptrCast(*volatile types.TIM11, 0x40014800);
    +            pub const TIM11 = @as(*volatile types.TIM11, @ptrFromInt(0x40014800));
                 ///  Serial peripheral interface
    -            pub const SPI5 = @ptrCast(*volatile types.SPI1, 0x40015000);
    +            pub const SPI5 = @as(*volatile types.SPI1, @ptrFromInt(0x40015000));
                 ///  Serial peripheral interface
    -            pub const SPI6 = @ptrCast(*volatile types.SPI1, 0x40015400);
    +            pub const SPI6 = @as(*volatile types.SPI1, @ptrFromInt(0x40015400));
                 ///  Serial audio interface
    -            pub const SAI = @ptrCast(*volatile types.SAI, 0x40015800);
    +            pub const SAI = @as(*volatile types.SAI, @ptrFromInt(0x40015800));
                 ///  LCD-TFT Controller
    -            pub const LTDC = @ptrCast(*volatile types.LTDC, 0x40016800);
    +            pub const LTDC = @as(*volatile types.LTDC, @ptrFromInt(0x40016800));
                 ///  General-purpose I/Os
    -            pub const GPIOA = @ptrCast(*volatile types.GPIOA, 0x40020000);
    +            pub const GPIOA = @as(*volatile types.GPIOA, @ptrFromInt(0x40020000));
                 ///  General-purpose I/Os
    -            pub const GPIOB = @ptrCast(*volatile types.GPIOB, 0x40020400);
    +            pub const GPIOB = @as(*volatile types.GPIOB, @ptrFromInt(0x40020400));
                 ///  General-purpose I/Os
    -            pub const GPIOC = @ptrCast(*volatile types.GPIOK, 0x40020800);
    +            pub const GPIOC = @as(*volatile types.GPIOK, @ptrFromInt(0x40020800));
                 ///  General-purpose I/Os
    -            pub const GPIOD = @ptrCast(*volatile types.GPIOK, 0x40020c00);
    +            pub const GPIOD = @as(*volatile types.GPIOK, @ptrFromInt(0x40020c00));
                 ///  General-purpose I/Os
    -            pub const GPIOE = @ptrCast(*volatile types.GPIOK, 0x40021000);
    +            pub const GPIOE = @as(*volatile types.GPIOK, @ptrFromInt(0x40021000));
                 ///  General-purpose I/Os
    -            pub const GPIOF = @ptrCast(*volatile types.GPIOK, 0x40021400);
    +            pub const GPIOF = @as(*volatile types.GPIOK, @ptrFromInt(0x40021400));
                 ///  General-purpose I/Os
    -            pub const GPIOG = @ptrCast(*volatile types.GPIOK, 0x40021800);
    +            pub const GPIOG = @as(*volatile types.GPIOK, @ptrFromInt(0x40021800));
                 ///  General-purpose I/Os
    -            pub const GPIOH = @ptrCast(*volatile types.GPIOK, 0x40021c00);
    +            pub const GPIOH = @as(*volatile types.GPIOK, @ptrFromInt(0x40021c00));
                 ///  General-purpose I/Os
    -            pub const GPIOI = @ptrCast(*volatile types.GPIOK, 0x40022000);
    +            pub const GPIOI = @as(*volatile types.GPIOK, @ptrFromInt(0x40022000));
                 ///  General-purpose I/Os
    -            pub const GPIOJ = @ptrCast(*volatile types.GPIOK, 0x40022400);
    +            pub const GPIOJ = @as(*volatile types.GPIOK, @ptrFromInt(0x40022400));
                 ///  General-purpose I/Os
    -            pub const GPIOK = @ptrCast(*volatile types.GPIOK, 0x40022800);
    +            pub const GPIOK = @as(*volatile types.GPIOK, @ptrFromInt(0x40022800));
                 ///  Cryptographic processor
    -            pub const CRC = @ptrCast(*volatile types.CRC, 0x40023000);
    +            pub const CRC = @as(*volatile types.CRC, @ptrFromInt(0x40023000));
                 ///  Reset and clock control
    -            pub const RCC = @ptrCast(*volatile types.RCC, 0x40023800);
    +            pub const RCC = @as(*volatile types.RCC, @ptrFromInt(0x40023800));
                 ///  FLASH
    -            pub const FLASH = @ptrCast(*volatile types.FLASH, 0x40023c00);
    +            pub const FLASH = @as(*volatile types.FLASH, @ptrFromInt(0x40023c00));
                 ///  DMA controller
    -            pub const DMA1 = @ptrCast(*volatile types.DMA2, 0x40026000);
    +            pub const DMA1 = @as(*volatile types.DMA2, @ptrFromInt(0x40026000));
                 ///  DMA controller
    -            pub const DMA2 = @ptrCast(*volatile types.DMA2, 0x40026400);
    +            pub const DMA2 = @as(*volatile types.DMA2, @ptrFromInt(0x40026400));
                 ///  Ethernet: media access control (MAC)
    -            pub const Ethernet_MAC = @ptrCast(*volatile types.Ethernet_MAC, 0x40028000);
    +            pub const Ethernet_MAC = @as(*volatile types.Ethernet_MAC, @ptrFromInt(0x40028000));
                 ///  Ethernet: MAC management counters
    -            pub const Ethernet_MMC = @ptrCast(*volatile types.Ethernet_MMC, 0x40028100);
    +            pub const Ethernet_MMC = @as(*volatile types.Ethernet_MMC, @ptrFromInt(0x40028100));
                 ///  Ethernet: Precision time protocol
    -            pub const Ethernet_PTP = @ptrCast(*volatile types.Ethernet_PTP, 0x40028700);
    +            pub const Ethernet_PTP = @as(*volatile types.Ethernet_PTP, @ptrFromInt(0x40028700));
                 ///  Ethernet: DMA controller operation
    -            pub const Ethernet_DMA = @ptrCast(*volatile types.Ethernet_DMA, 0x40029000);
    +            pub const Ethernet_DMA = @as(*volatile types.Ethernet_DMA, @ptrFromInt(0x40029000));
                 ///  DMA2D controller
    -            pub const DMA2D = @ptrCast(*volatile types.DMA2D, 0x4002b000);
    +            pub const DMA2D = @as(*volatile types.DMA2D, @ptrFromInt(0x4002b000));
                 ///  USB on the go high speed
    -            pub const OTG_HS_GLOBAL = @ptrCast(*volatile types.OTG_HS_GLOBAL, 0x40040000);
    +            pub const OTG_HS_GLOBAL = @as(*volatile types.OTG_HS_GLOBAL, @ptrFromInt(0x40040000));
                 ///  USB on the go high speed
    -            pub const OTG_HS_HOST = @ptrCast(*volatile types.OTG_HS_HOST, 0x40040400);
    +            pub const OTG_HS_HOST = @as(*volatile types.OTG_HS_HOST, @ptrFromInt(0x40040400));
                 ///  USB on the go high speed
    -            pub const OTG_HS_DEVICE = @ptrCast(*volatile types.OTG_HS_DEVICE, 0x40040800);
    +            pub const OTG_HS_DEVICE = @as(*volatile types.OTG_HS_DEVICE, @ptrFromInt(0x40040800));
                 ///  USB on the go high speed
    -            pub const OTG_HS_PWRCLK = @ptrCast(*volatile types.OTG_HS_PWRCLK, 0x40040e00);
    +            pub const OTG_HS_PWRCLK = @as(*volatile types.OTG_HS_PWRCLK, @ptrFromInt(0x40040e00));
                 ///  USB on the go full speed
    -            pub const OTG_FS_GLOBAL = @ptrCast(*volatile types.OTG_FS_GLOBAL, 0x50000000);
    +            pub const OTG_FS_GLOBAL = @as(*volatile types.OTG_FS_GLOBAL, @ptrFromInt(0x50000000));
                 ///  USB on the go full speed
    -            pub const OTG_FS_HOST = @ptrCast(*volatile types.OTG_FS_HOST, 0x50000400);
    +            pub const OTG_FS_HOST = @as(*volatile types.OTG_FS_HOST, @ptrFromInt(0x50000400));
                 ///  USB on the go full speed
    -            pub const OTG_FS_DEVICE = @ptrCast(*volatile types.OTG_FS_DEVICE, 0x50000800);
    +            pub const OTG_FS_DEVICE = @as(*volatile types.OTG_FS_DEVICE, @ptrFromInt(0x50000800));
                 ///  USB on the go full speed
    -            pub const OTG_FS_PWRCLK = @ptrCast(*volatile types.OTG_FS_PWRCLK, 0x50000e00);
    +            pub const OTG_FS_PWRCLK = @as(*volatile types.OTG_FS_PWRCLK, @ptrFromInt(0x50000e00));
                 ///  Digital camera interface
    -            pub const DCMI = @ptrCast(*volatile types.DCMI, 0x50050000);
    +            pub const DCMI = @as(*volatile types.DCMI, @ptrFromInt(0x50050000));
                 ///  Cryptographic processor
    -            pub const CRYP = @ptrCast(*volatile types.CRYP, 0x50060000);
    +            pub const CRYP = @as(*volatile types.CRYP, @ptrFromInt(0x50060000));
                 ///  Hash processor
    -            pub const HASH = @ptrCast(*volatile types.HASH, 0x50060400);
    +            pub const HASH = @as(*volatile types.HASH, @ptrFromInt(0x50060400));
                 ///  Random number generator
    -            pub const RNG = @ptrCast(*volatile types.RNG, 0x50060800);
    +            pub const RNG = @as(*volatile types.RNG, @ptrFromInt(0x50060800));
                 ///  Flexible memory controller
    -            pub const FMC = @ptrCast(*volatile types.FMC, 0xa0000000);
    +            pub const FMC = @as(*volatile types.FMC, @ptrFromInt(0xa0000000));
                 ///  System control block ACTLR
    -            pub const SCB_ACTRL = @ptrCast(*volatile types.SCB_ACTRL, 0xe000e008);
    +            pub const SCB_ACTRL = @as(*volatile types.SCB_ACTRL, @ptrFromInt(0xe000e008));
                 ///  SysTick timer
    -            pub const STK = @ptrCast(*volatile types.STK, 0xe000e010);
    +            pub const STK = @as(*volatile types.STK, @ptrFromInt(0xe000e010));
                 ///  Nested Vectored Interrupt Controller
    -            pub const NVIC = @ptrCast(*volatile types.NVIC, 0xe000e100);
    +            pub const NVIC = @as(*volatile types.NVIC, @ptrFromInt(0xe000e100));
                 ///  System control block
    -            pub const SCB = @ptrCast(*volatile types.SCB, 0xe000ed00);
    +            pub const SCB = @as(*volatile types.SCB, @ptrFromInt(0xe000ed00));
                 ///  Floating point unit CPACR
    -            pub const FPU_CPACR = @ptrCast(*volatile types.FPU_CPACR, 0xe000ed88);
    +            pub const FPU_CPACR = @as(*volatile types.FPU_CPACR, @ptrFromInt(0xe000ed88));
                 ///  Memory protection unit
    -            pub const MPU = @ptrCast(*volatile types.MPU, 0xe000ed90);
    +            pub const MPU = @as(*volatile types.MPU, @ptrFromInt(0xe000ed90));
                 ///  Nested vectored interrupt controller
    -            pub const NVIC_STIR = @ptrCast(*volatile types.NVIC_STIR, 0xe000ef00);
    +            pub const NVIC_STIR = @as(*volatile types.NVIC_STIR, @ptrFromInt(0xe000ef00));
                 ///  Floting point unit
    -            pub const FPU = @ptrCast(*volatile types.FPU, 0xe000ef34);
    +            pub const FPU = @as(*volatile types.FPU, @ptrFromInt(0xe000ef34));
                 ///  Debug support
    -            pub const DBG = @ptrCast(*volatile types.DBG, 0xe0042000);
    +            pub const DBG = @as(*volatile types.DBG, @ptrFromInt(0xe0042000));
             };
         };
     };
    diff --git a/src/hals/STM32F303.zig b/src/hals/STM32F303.zig
    index 5c470c83b..17c6999bc 100644
    --- a/src/hals/STM32F303.zig
    +++ b/src/hals/STM32F303.zig
    @@ -103,7 +103,7 @@ pub const gpio = struct {
         pub fn read(comptime pin: type) micro.gpio.State {
             const idr_reg = pin.gpio_port.IDR;
             const reg_value = @field(idr_reg.read(), "IDR" ++ pin.suffix); // TODO extract to getRegField()?
    -        return @intToEnum(micro.gpio.State, reg_value);
    +        return @as(micro.gpio.State, @enumFromInt(reg_value));
         }
     
         pub fn write(comptime pin: type, state: micro.gpio.State) void {
    @@ -180,11 +180,11 @@ pub fn Uart(comptime index: usize, comptime pins: micro.uart.Pins) type {
     
                 // set parity
                 if (config.parity) |parity| {
    -                USART1.CR1.modify(.{ .PCE = 1, .PS = @enumToInt(parity) });
    +                USART1.CR1.modify(.{ .PCE = 1, .PS = @intFromEnum(parity) });
                 } else USART1.CR1.modify(.{ .PCE = 0 }); // no parity, probably the chip default
     
                 // set number of stop bits
    -            USART1.CR2.modify(.{ .STOP = @enumToInt(config.stop_bits) });
    +            USART1.CR2.modify(.{ .STOP = @intFromEnum(config.stop_bits) });
     
                 // set the baud rate
                 // TODO: Do not use the _board_'s frequency, but the _U(S)ARTx_ frequency
    @@ -193,7 +193,7 @@ pub fn Uart(comptime index: usize, comptime pins: micro.uart.Pins) type {
                 // if the board doesn't configure e.g. an HSE external crystal.
                 // TODO: Do some checks to see if the baud rate is too high (or perhaps too low)
                 // TODO: Do a rounding div, instead of a truncating div?
    -            const usartdiv = @intCast(u16, @divTrunc(micro.clock.get().apb1, config.baud_rate));
    +            const usartdiv = @as(u16, @intCast(@divTrunc(micro.clock.get().apb1, config.baud_rate)));
                 USART1.BRR.raw = usartdiv;
                 // Above, ignore the BRR struct fields DIV_Mantissa and DIV_Fraction,
                 // those seem to be for another chipset; .svd file bug?
    @@ -254,7 +254,7 @@ pub fn Uart(comptime index: usize, comptime pins: micro.uart.Pins) type {
             pub fn rx(self: Self) u8 {
                 while (!self.can_read()) {} // Wait till the data is received
                 const data_with_parity_bit: u9 = USART1.RDR.read().RDR;
    -            return @intCast(u8, data_with_parity_bit & self.parity_read_mask);
    +            return @as(u8, @intCast(data_with_parity_bit & self.parity_read_mask));
             }
         };
     }
    @@ -429,7 +429,7 @@ pub fn I2CController(comptime index: usize, comptime pins: micro.i2c.Pins) type
                         .ADD10 = 0,
                         .SADD1 = self.address,
                         .RD_WRN = 1, // read
    -                    .NBYTES = @intCast(u8, buffer.len),
    +                    .NBYTES = @as(u8, @intCast(buffer.len)),
                     });
                     debug_print("I2C1 prepared for read of {} byte(s) from 0b{b:0<7}\r\n", .{ buffer.len, self.address });
     
    @@ -556,7 +556,7 @@ pub fn SpiBus(comptime index: usize) type {
     
                 // write
                 const write_byte = if (optional_write_byte) |b| b else undefined; // dummy value
    -            @bitCast([dr_byte_size]u8, SPI1.DR.*)[0] = write_byte;
    +            @as([dr_byte_size]u8, @bitCast(SPI1.DR.*))[0] = write_byte;
                 debug_print("Sent: {X:2}.\r\n", .{write_byte});
     
                 // wait until read processed
    @@ -568,7 +568,7 @@ pub fn SpiBus(comptime index: usize) type {
                 // read
                 var data_read = SPI1.DR.raw;
                 _ = SPI1.SR.read(); // clear overrun flag
    -            const dr_lsb = @bitCast([dr_byte_size]u8, data_read)[0];
    +            const dr_lsb = @as([dr_byte_size]u8, @bitCast(data_read))[0];
                 debug_print("Received: {X:2} (DR = {X:8}).\r\n", .{ dr_lsb, data_read });
                 if (optional_read_pointer) |read_pointer| read_pointer.* = dr_lsb;
             }
    diff --git a/src/hals/STM32F407.zig b/src/hals/STM32F407.zig
    index f48e05c8d..6c4dd2047 100644
    --- a/src/hals/STM32F407.zig
    +++ b/src/hals/STM32F407.zig
    @@ -111,16 +111,16 @@ pub const gpio = struct {
             set_reg_field(RCC.AHB1ENR, "GPIO" ++ pin.gpio_port_name ++ "EN", 1);
             set_reg_field(@field(pin.gpio_port, "MODER"), "MODER" ++ pin.suffix, 0b10);
             if (pin.pin_number < 8) {
    -            set_reg_field(@field(pin.gpio_port, "AFRL"), "AFRL" ++ pin.suffix, @enumToInt(af));
    +            set_reg_field(@field(pin.gpio_port, "AFRL"), "AFRL" ++ pin.suffix, @intFromEnum(af));
             } else {
    -            set_reg_field(@field(pin.gpio_port, "AFRH"), "AFRH" ++ pin.suffix, @enumToInt(af));
    +            set_reg_field(@field(pin.gpio_port, "AFRH"), "AFRH" ++ pin.suffix, @intFromEnum(af));
             }
         }
     
         pub fn read(comptime pin: type) micro.gpio.State {
             const idr_reg = pin.gpio_port.IDR;
             const reg_value = @field(idr_reg.read(), "IDR" ++ pin.suffix); // TODO extract to getRegField()?
    -        return @intToEnum(micro.gpio.State, reg_value);
    +        return @as(micro.gpio.State, @enumFromInt(reg_value));
         }
     
         pub fn write(comptime pin: type, state: micro.gpio.State) void {
    @@ -278,11 +278,11 @@ pub fn Uart(comptime index: usize, comptime pins: micro.uart.Pins) type {
     
                 // set parity
                 if (config.parity) |parity| {
    -                @field(peripherals, usart_name).CR1.modify(.{ .PCE = 1, .PS = @enumToInt(parity) });
    +                @field(peripherals, usart_name).CR1.modify(.{ .PCE = 1, .PS = @intFromEnum(parity) });
                 } // otherwise, no need to set no parity since we reset Control Registers above, and it's the default
     
                 // set number of stop bits
    -            @field(peripherals, usart_name).CR2.modify(.{ .STOP = @enumToInt(config.stop_bits) });
    +            @field(peripherals, usart_name).CR2.modify(.{ .STOP = @intFromEnum(config.stop_bits) });
     
                 // set the baud rate
                 // Despite the reference manual talking about fractional calculation and other buzzwords,
    @@ -297,7 +297,7 @@ pub fn Uart(comptime index: usize, comptime pins: micro.uart.Pins) type {
                     2...5 => clocks.apb1,
                     else => unreachable,
                 };
    -            const usartdiv = @intCast(u16, @divTrunc(bus_frequency, config.baud_rate));
    +            const usartdiv = @as(u16, @intCast(@divTrunc(bus_frequency, config.baud_rate)));
                 @field(peripherals, usart_name).BRR.raw = usartdiv;
     
                 // enable USART, and its transmitter and receiver
    @@ -355,7 +355,7 @@ pub fn Uart(comptime index: usize, comptime pins: micro.uart.Pins) type {
             pub fn rx(self: Self) u8 {
                 while (!self.can_read()) {} // Wait till the data is received
                 const data_with_parity_bit: u9 = @field(peripherals, usart_name).DR.read();
    -            return @intCast(u8, data_with_parity_bit & self.parity_read_mask);
    +            return @as(u8, @intCast(data_with_parity_bit & self.parity_read_mask));
             }
         };
     }
    @@ -463,7 +463,7 @@ pub fn I2CController(comptime index: usize, comptime pins: micro.i2c.Pins) type
     
                 // 4. Configure I2C timing
                 const bus_frequency_hz = micro.clock.get().apb1;
    -            const bus_frequency_mhz: u6 = @intCast(u6, @divExact(bus_frequency_hz, 1_000_000));
    +            const bus_frequency_mhz: u6 = @as(u6, @intCast(@divExact(bus_frequency_hz, 1_000_000)));
     
                 if (bus_frequency_mhz < 2 or bus_frequency_mhz > 50) {
                     return error.InvalidBusFrequency;
    @@ -475,7 +475,7 @@ pub fn I2CController(comptime index: usize, comptime pins: micro.i2c.Pins) type
                 switch (config.target_speed) {
                     10_000...100_000 => {
                         // CCR is bus_freq / (target_speed * 2). We use floor to avoid exceeding the target speed.
    -                    const ccr = @intCast(u12, @divFloor(bus_frequency_hz, config.target_speed * 2));
    +                    const ccr = @as(u12, @intCast(@divFloor(bus_frequency_hz, config.target_speed * 2)));
                         i2c_base.CCR.modify(.{ .CCR = ccr });
                         // Trise is bus frequency in Mhz + 1
                         i2c_base.TRISE.modify(bus_frequency_mhz + 1);
    @@ -529,7 +529,7 @@ pub fn I2CController(comptime index: usize, comptime pins: micro.i2c.Pins) type
                     {}
     
                     // Write the address to bits 7..1, bit 0 stays at 0 to indicate write operation
    -                i2c_base.DR.modify(@intCast(u8, self.address) << 1);
    +                i2c_base.DR.modify(@as(u8, @intCast(self.address)) << 1);
     
                     // Wait for address confirmation
                     while (i2c_base.SR1.read().ADDR == 0) {}
    @@ -584,7 +584,7 @@ pub fn I2CController(comptime index: usize, comptime pins: micro.i2c.Pins) type
                     {}
     
                     // Write the address to bits 7..1, bit 0 set to 1 to indicate read operation
    -                i2c_base.DR.modify((@intCast(u8, self.address) << 1) | 1);
    +                i2c_base.DR.modify((@as(u8, @intCast(self.address)) << 1) | 1);
     
                     // Wait for address confirmation
                     while (i2c_base.SR1.read().ADDR == 0) {}
    diff --git a/src/hals/STM32F429.zig b/src/hals/STM32F429.zig
    index 3aed96341..0f5204d79 100644
    --- a/src/hals/STM32F429.zig
    +++ b/src/hals/STM32F429.zig
    @@ -80,7 +80,7 @@ pub const gpio = struct {
         pub fn read(comptime pin: type) micro.gpio.State {
             const idr_reg = pin.gpio_port.IDR;
             const reg_value = @field(idr_reg.read(), "IDR" ++ pin.suffix); // TODO extract to getRegField()?
    -        return @intToEnum(micro.gpio.State, reg_value);
    +        return @as(micro.gpio.State, @enumFromInt(reg_value));
         }
     
         pub fn write(comptime pin: type, state: micro.gpio.State) void {
    
    From 03a53c756c0a54a04d43220696e9cd1946c1b30c Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20Quei=C3=9Fner?= 
    Date: Sat, 26 Aug 2023 00:01:43 +0200
    Subject: [PATCH 189/286] Update to zig-0.11.0 (#24)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Co-authored-by: Felix "xq" Queißner 
    ---
     build.zig                    | 17 +++++++--
     build.zig.zon                | 10 +++++
     deps/microzig                |  1 -
     src/chips.zig                |  2 +-
     src/chips/ESP32_C3.zig       | 72 ++++++++++++++++++------------------
     src/cpus.zig                 |  2 +-
     src/cpus/espressif-riscv.zig |  2 +-
     src/example/blinky.zig       |  6 +--
     src/hals/ESP32_C3.zig        |  6 +--
     zpm.zig                      |  8 ----
     10 files changed, 69 insertions(+), 57 deletions(-)
     create mode 100644 build.zig.zon
     delete mode 160000 deps/microzig
     delete mode 100644 zpm.zig
    
    diff --git a/build.zig b/build.zig
    index 8cb289d70..e04ab94ae 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -1,10 +1,10 @@
     const std = @import("std");
    -const microzig = @import("deps/microzig/build.zig");
    +const microzig = @import("microzig");
     
     pub const chips = @import("src/chips.zig");
     pub const cpus = @import("src/cpus.zig");
     
    -pub fn build(b: *std.build.Builder) void {
    +pub fn build(b: *std.Build) void {
         const optimize = b.standardOptimizeOption(.{});
     
         var exe = microzig.addEmbeddedExecutable(b, .{
    @@ -15,5 +15,16 @@ pub fn build(b: *std.build.Builder) void {
             .backing = .{ .chip = chips.esp32_c3 },
             .optimize = optimize,
         });
    -    exe.installArtifact(b);
    +
    +    const fw_objcopy = b.addObjCopy(exe.inner.getEmittedBin(), .{
    +        .format = .bin,
    +    });
    +
    +    const fw_bin = fw_objcopy.getOutput();
    +
    +    const install_fw_bin = b.addInstallFile(fw_bin, "firmware/blinky.bin");
    +
    +    b.getInstallStep().dependOn(&install_fw_bin.step);
    +
    +    b.installArtifact(exe.inner);
     }
    diff --git a/build.zig.zon b/build.zig.zon
    new file mode 100644
    index 000000000..e8787ef0b
    --- /dev/null
    +++ b/build.zig.zon
    @@ -0,0 +1,10 @@
    +.{
    +    .name = "microzig-espressif-esp",
    +    .version = "0.1.0",
    +    .dependencies = .{
    +        .microzig = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/0b3be0a4cc7e6d45714cb09961efc771e364723c.tar.gz",
    +            .hash = "1220ada6d01db7b3d0aa8642df89b1af9ee71b681438249e9a7efb2275fc4cf32152",
    +        },
    +    },
    +}
    diff --git a/deps/microzig b/deps/microzig
    deleted file mode 160000
    index 9392fe0f7..000000000
    --- a/deps/microzig
    +++ /dev/null
    @@ -1 +0,0 @@
    -Subproject commit 9392fe0f7bddde26155c181ab80b70097b49c791
    diff --git a/src/chips.zig b/src/chips.zig
    index 14769f383..3baa05a3d 100644
    --- a/src/chips.zig
    +++ b/src/chips.zig
    @@ -1,5 +1,5 @@
     const std = @import("std");
    -const microzig = @import("../deps/microzig/build.zig");
    +const microzig = @import("microzig");
     const cpus = @import("cpus.zig");
     
     fn root_dir() []const u8 {
    diff --git a/src/chips/ESP32_C3.zig b/src/chips/ESP32_C3.zig
    index 50a326366..8a632a07d 100644
    --- a/src/chips/ESP32_C3.zig
    +++ b/src/chips/ESP32_C3.zig
    @@ -33,77 +33,77 @@ pub const devices = struct {
     
             pub const peripherals = struct {
                 ///  UART (Universal Asynchronous Receiver-Transmitter) Controller
    -            pub const UART0 = @intToPtr(*volatile types.peripherals.UART0, 0x60000000);
    +            pub const UART0 = @as(*volatile types.peripherals.UART0, @ptrFromInt(0x60000000));
                 ///  SPI (Serial Peripheral Interface) Controller
    -            pub const SPI1 = @intToPtr(*volatile types.peripherals.SPI1, 0x60002000);
    +            pub const SPI1 = @as(*volatile types.peripherals.SPI1, @ptrFromInt(0x60002000));
                 ///  SPI (Serial Peripheral Interface) Controller
    -            pub const SPI0 = @intToPtr(*volatile types.peripherals.SPI0, 0x60003000);
    +            pub const SPI0 = @as(*volatile types.peripherals.SPI0, @ptrFromInt(0x60003000));
                 ///  General Purpose Input/Output
    -            pub const GPIO = @intToPtr(*volatile types.peripherals.GPIO, 0x60004000);
    +            pub const GPIO = @as(*volatile types.peripherals.GPIO, @ptrFromInt(0x60004000));
                 ///  Sigma-Delta Modulation
    -            pub const GPIOSD = @intToPtr(*volatile types.peripherals.GPIOSD, 0x60004f00);
    +            pub const GPIOSD = @as(*volatile types.peripherals.GPIOSD, @ptrFromInt(0x60004f00));
                 ///  Real-Time Clock Control
    -            pub const RTC_CNTL = @intToPtr(*volatile types.peripherals.RTC_CNTL, 0x60008000);
    +            pub const RTC_CNTL = @as(*volatile types.peripherals.RTC_CNTL, @ptrFromInt(0x60008000));
                 ///  eFuse Controller
    -            pub const EFUSE = @intToPtr(*volatile types.peripherals.EFUSE, 0x60008800);
    +            pub const EFUSE = @as(*volatile types.peripherals.EFUSE, @ptrFromInt(0x60008800));
                 ///  Input/Output Multiplexer
    -            pub const IO_MUX = @intToPtr(*volatile types.peripherals.IO_MUX, 0x60009000);
    +            pub const IO_MUX = @as(*volatile types.peripherals.IO_MUX, @ptrFromInt(0x60009000));
                 ///  Universal Host Controller Interface
    -            pub const UHCI1 = @intToPtr(*volatile types.peripherals.UHCI0, 0x6000c000);
    +            pub const UHCI1 = @as(*volatile types.peripherals.UHCI0, @ptrFromInt(0x6000c000));
                 ///  UART (Universal Asynchronous Receiver-Transmitter) Controller
    -            pub const UART1 = @intToPtr(*volatile types.peripherals.UART0, 0x60010000);
    +            pub const UART1 = @as(*volatile types.peripherals.UART0, @ptrFromInt(0x60010000));
                 ///  I2C (Inter-Integrated Circuit) Controller
    -            pub const I2C0 = @intToPtr(*volatile types.peripherals.I2C0, 0x60013000);
    +            pub const I2C0 = @as(*volatile types.peripherals.I2C0, @ptrFromInt(0x60013000));
                 ///  Universal Host Controller Interface
    -            pub const UHCI0 = @intToPtr(*volatile types.peripherals.UHCI0, 0x60014000);
    +            pub const UHCI0 = @as(*volatile types.peripherals.UHCI0, @ptrFromInt(0x60014000));
                 ///  Remote Control Peripheral
    -            pub const RMT = @intToPtr(*volatile types.peripherals.RMT, 0x60016000);
    +            pub const RMT = @as(*volatile types.peripherals.RMT, @ptrFromInt(0x60016000));
                 ///  LED Control PWM (Pulse Width Modulation)
    -            pub const LEDC = @intToPtr(*volatile types.peripherals.LEDC, 0x60019000);
    +            pub const LEDC = @as(*volatile types.peripherals.LEDC, @ptrFromInt(0x60019000));
                 ///  Timer Group
    -            pub const TIMG0 = @intToPtr(*volatile types.peripherals.TIMG0, 0x6001f000);
    +            pub const TIMG0 = @as(*volatile types.peripherals.TIMG0, @ptrFromInt(0x6001f000));
                 ///  Timer Group
    -            pub const TIMG1 = @intToPtr(*volatile types.peripherals.TIMG0, 0x60020000);
    +            pub const TIMG1 = @as(*volatile types.peripherals.TIMG0, @ptrFromInt(0x60020000));
                 ///  System Timer
    -            pub const SYSTIMER = @intToPtr(*volatile types.peripherals.SYSTIMER, 0x60023000);
    +            pub const SYSTIMER = @as(*volatile types.peripherals.SYSTIMER, @ptrFromInt(0x60023000));
                 ///  SPI (Serial Peripheral Interface) Controller
    -            pub const SPI2 = @intToPtr(*volatile types.peripherals.SPI2, 0x60024000);
    +            pub const SPI2 = @as(*volatile types.peripherals.SPI2, @ptrFromInt(0x60024000));
                 ///  Advanced Peripheral Bus Controller
    -            pub const APB_CTRL = @intToPtr(*volatile types.peripherals.APB_CTRL, 0x60026000);
    +            pub const APB_CTRL = @as(*volatile types.peripherals.APB_CTRL, @ptrFromInt(0x60026000));
                 ///  Hardware random number generator
    -            pub const RNG = @intToPtr(*volatile types.peripherals.RNG, 0x60026000);
    +            pub const RNG = @as(*volatile types.peripherals.RNG, @ptrFromInt(0x60026000));
                 ///  Two-Wire Automotive Interface
    -            pub const TWAI = @intToPtr(*volatile types.peripherals.TWAI, 0x6002b000);
    +            pub const TWAI = @as(*volatile types.peripherals.TWAI, @ptrFromInt(0x6002b000));
                 ///  I2S (Inter-IC Sound) Controller
    -            pub const I2S = @intToPtr(*volatile types.peripherals.I2S, 0x6002d000);
    +            pub const I2S = @as(*volatile types.peripherals.I2S, @ptrFromInt(0x6002d000));
                 ///  AES (Advanced Encryption Standard) Accelerator
    -            pub const AES = @intToPtr(*volatile types.peripherals.AES, 0x6003a000);
    +            pub const AES = @as(*volatile types.peripherals.AES, @ptrFromInt(0x6003a000));
                 ///  SHA (Secure Hash Algorithm) Accelerator
    -            pub const SHA = @intToPtr(*volatile types.peripherals.SHA, 0x6003b000);
    +            pub const SHA = @as(*volatile types.peripherals.SHA, @ptrFromInt(0x6003b000));
                 ///  RSA (Rivest Shamir Adleman) Accelerator
    -            pub const RSA = @intToPtr(*volatile types.peripherals.RSA, 0x6003c000);
    +            pub const RSA = @as(*volatile types.peripherals.RSA, @ptrFromInt(0x6003c000));
                 ///  Digital Signature
    -            pub const DS = @intToPtr(*volatile types.peripherals.DS, 0x6003d000);
    +            pub const DS = @as(*volatile types.peripherals.DS, @ptrFromInt(0x6003d000));
                 ///  HMAC (Hash-based Message Authentication Code) Accelerator
    -            pub const HMAC = @intToPtr(*volatile types.peripherals.HMAC, 0x6003e000);
    +            pub const HMAC = @as(*volatile types.peripherals.HMAC, @ptrFromInt(0x6003e000));
                 ///  DMA (Direct Memory Access) Controller
    -            pub const DMA = @intToPtr(*volatile types.peripherals.DMA, 0x6003f000);
    +            pub const DMA = @as(*volatile types.peripherals.DMA, @ptrFromInt(0x6003f000));
                 ///  Successive Approximation Register Analog to Digital Converter
    -            pub const APB_SARADC = @intToPtr(*volatile types.peripherals.APB_SARADC, 0x60040000);
    +            pub const APB_SARADC = @as(*volatile types.peripherals.APB_SARADC, @ptrFromInt(0x60040000));
                 ///  Full-speed USB Serial/JTAG Controller
    -            pub const USB_DEVICE = @intToPtr(*volatile types.peripherals.USB_DEVICE, 0x60043000);
    +            pub const USB_DEVICE = @as(*volatile types.peripherals.USB_DEVICE, @ptrFromInt(0x60043000));
                 ///  System
    -            pub const SYSTEM = @intToPtr(*volatile types.peripherals.SYSTEM, 0x600c0000);
    +            pub const SYSTEM = @as(*volatile types.peripherals.SYSTEM, @ptrFromInt(0x600c0000));
                 ///  Sensitive
    -            pub const SENSITIVE = @intToPtr(*volatile types.peripherals.SENSITIVE, 0x600c1000);
    +            pub const SENSITIVE = @as(*volatile types.peripherals.SENSITIVE, @ptrFromInt(0x600c1000));
                 ///  Interrupt Core
    -            pub const INTERRUPT_CORE0 = @intToPtr(*volatile types.peripherals.INTERRUPT_CORE0, 0x600c2000);
    +            pub const INTERRUPT_CORE0 = @as(*volatile types.peripherals.INTERRUPT_CORE0, @ptrFromInt(0x600c2000));
                 ///  External Memory
    -            pub const EXTMEM = @intToPtr(*volatile types.peripherals.EXTMEM, 0x600c4000);
    +            pub const EXTMEM = @as(*volatile types.peripherals.EXTMEM, @ptrFromInt(0x600c4000));
                 ///  XTS-AES-128 Flash Encryption
    -            pub const XTS_AES = @intToPtr(*volatile types.peripherals.XTS_AES, 0x600cc000);
    +            pub const XTS_AES = @as(*volatile types.peripherals.XTS_AES, @ptrFromInt(0x600cc000));
                 ///  Debug Assist
    -            pub const ASSIST_DEBUG = @intToPtr(*volatile types.peripherals.ASSIST_DEBUG, 0x600ce000);
    +            pub const ASSIST_DEBUG = @as(*volatile types.peripherals.ASSIST_DEBUG, @ptrFromInt(0x600ce000));
             };
         };
     };
    diff --git a/src/cpus.zig b/src/cpus.zig
    index b087d90a9..c8bda913e 100644
    --- a/src/cpus.zig
    +++ b/src/cpus.zig
    @@ -1,5 +1,5 @@
     const std = @import("std");
    -const microzig = @import("../deps/microzig/build.zig");
    +const microzig = @import("microzig");
     
     fn root_dir() []const u8 {
         return std.fs.path.dirname(@src().file) orelse unreachable;
    diff --git a/src/cpus/espressif-riscv.zig b/src/cpus/espressif-riscv.zig
    index dc2edb769..5aab92d79 100644
    --- a/src/cpus/espressif-riscv.zig
    +++ b/src/cpus/espressif-riscv.zig
    @@ -61,7 +61,7 @@ pub const startup_logic = struct {
     
         extern fn microzig_main() noreturn;
     
    -    export fn _start() linksection("microzig_flash_start") callconv(.Naked) noreturn {
    +    export fn _start() linksection("microzig_flash_start") callconv(.C) noreturn {
             microzig.cpu.disable_interrupts();
             asm volatile ("mv sp, %[eos]"
                 :
    diff --git a/src/example/blinky.zig b/src/example/blinky.zig
    index 5ee1eefc5..811b04894 100644
    --- a/src/example/blinky.zig
    +++ b/src/example/blinky.zig
    @@ -42,13 +42,13 @@ pub fn main() !void {
         while (true) {
             GPIO.OUT.modify(.{ .DATA_ORIG = (1 << LED_R_PIN) });
             microzig.hal.uart.write(0, "R");
    -        microzig.core.experimental.debug.busy_sleep(1_000_000);
    +        microzig.core.experimental.debug.busy_sleep(100_000);
             GPIO.OUT.modify(.{ .DATA_ORIG = (1 << LED_G_PIN) });
             microzig.hal.uart.write(0, "G");
    -        microzig.core.experimental.debug.busy_sleep(1_000_000);
    +        microzig.core.experimental.debug.busy_sleep(100_000);
             GPIO.OUT.modify(.{ .DATA_ORIG = (1 << LED_B_PIN) });
             microzig.hal.uart.write(0, "B");
    -        microzig.core.experimental.debug.busy_sleep(1_000_000);
    +        microzig.core.experimental.debug.busy_sleep(100_000);
         }
     }
     
    diff --git a/src/hals/ESP32_C3.zig b/src/hals/ESP32_C3.zig
    index 516ed1524..a5e1bb9e7 100644
    --- a/src/hals/ESP32_C3.zig
    +++ b/src/hals/ESP32_C3.zig
    @@ -21,9 +21,9 @@ pub const gpio = struct {
             assertRange(pin);
             GPIO.FUNC_OUT_SEL_CFG[pin].modify(.{
                 .OUT_SEL = config.function,
    -            .INV_SEL = @boolToInt(config.invert_function),
    -            .OEN_SEL = @boolToInt(config.direct_io),
    -            .OEN_INV_SEL = @boolToInt(config.invert_direct_io),
    +            .INV_SEL = @intFromBool(config.invert_function),
    +            .OEN_SEL = @intFromBool(config.direct_io),
    +            .OEN_INV_SEL = @intFromBool(config.invert_direct_io),
             });
             switch (config.direction) {
                 .input => GPIO.ENABLE.raw &= ~(@as(u32, 1) << pin),
    diff --git a/zpm.zig b/zpm.zig
    deleted file mode 100644
    index 1dcd7b385..000000000
    --- a/zpm.zig
    +++ /dev/null
    @@ -1,8 +0,0 @@
    -//! This file is auto-generated by zpm-update and *should*
    -//! not be changed. This file can be checked into your VCS
    -//! and is able to work standalone.
    -const std = @import("std");
    -
    -pub const sdks = struct {
    -    pub const microzig = @import("vendor/microzig/src/main.zig");
    -};
    
    From 82c944b48ceb4814c6dac511f49a89c08a16a3e3 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20Quei=C3=9Fner?= 
    Date: Sat, 26 Aug 2023 00:29:02 +0200
    Subject: [PATCH 190/286] Fixes (#25)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    * Update to zig-0.11.0
    
    * Removes unnecessary submodule
    
    ---------
    
    Co-authored-by: Felix "xq" Queißner 
    ---
     .gitmodules     | 6 ------
     vendor/microzig | 1 -
     2 files changed, 7 deletions(-)
     delete mode 160000 vendor/microzig
    
    diff --git a/.gitmodules b/.gitmodules
    index 911b8cfac..e69de29bb 100644
    --- a/.gitmodules
    +++ b/.gitmodules
    @@ -1,6 +0,0 @@
    -[submodule "vendor/microzig"]
    -	path = vendor/microzig
    -	url = https://github.com/ZigEmbeddedGroup/microzig
    -[submodule "deps/microzig"]
    -	path = deps/microzig
    -	url = https://github.com/ZigEmbeddedGroup/microzig.git
    diff --git a/vendor/microzig b/vendor/microzig
    deleted file mode 160000
    index 0d9721d90..000000000
    --- a/vendor/microzig
    +++ /dev/null
    @@ -1 +0,0 @@
    -Subproject commit 0d9721d9070c356f4ffaf6f4a312bccdb574b8a9
    
    From aceafa110ad6b4555c3850b54aba2392c1ef7d73 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20Quei=C3=9Fner?= 
    Date: Sat, 26 Aug 2023 14:11:07 +0200
    Subject: [PATCH 191/286] GitHub CI (#26)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    * GitHub CI
    
    * Update CI
    
    ---------
    
    Co-authored-by: Felix "xq" Queißner 
    ---
     .buildkite/pipeline.yml     |  4 ----
     .github/workflows/build.yml | 19 +++++++++++++++++++
     2 files changed, 19 insertions(+), 4 deletions(-)
     delete mode 100644 .buildkite/pipeline.yml
     create mode 100644 .github/workflows/build.yml
    
    diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml
    deleted file mode 100644
    index 7767bbb66..000000000
    --- a/.buildkite/pipeline.yml
    +++ /dev/null
    @@ -1,4 +0,0 @@
    -steps:
    -  - group: Build
    -    steps:
    -    - command: zig build
    diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
    new file mode 100644
    index 000000000..63ea5331c
    --- /dev/null
    +++ b/.github/workflows/build.yml
    @@ -0,0 +1,19 @@
    +name: Build
    +on:
    +  push:
    +
    +jobs:
    +  build:
    +    runs-on: ${{ matrix.os }}
    +    strategy:
    +      matrix:
    +        os: [ubuntu-latest, windows-latest, macos-latest]
    +        optimize: [Debug, ReleaseSmall, ReleaseFast, ReleaseSafe]
    +    steps:
    +      - uses: actions/checkout@v2
    +      - uses: goto-bus-stop/setup-zig@v2.1.1
    +        with:
    +          version: 0.11.0
    +
    +      - name: Build
    +        run: zig build install "-Doptimize=${{matrix.optimize}}"
    
    From 80e5e694203ca379fc0bab888614c850b7b0bb16 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20Quei=C3=9Fner?= 
    Date: Sat, 26 Aug 2023 14:25:07 +0200
    Subject: [PATCH 192/286] Updates to Zig 0.11.0 (#22)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Co-authored-by: Felix "xq" Queißner 
    ---
     .buildkite/pipeline.yml     |   6 --
     .github/FUNDING.yml         |   1 +
     .github/workflows/build.yml |  19 +++++
     build.zig                   |   5 +-
     build.zig.zon               |  10 +++
     deps/microzig               |   1 -
     src/chips.zig               |  21 ++---
     src/chips/nrf52.zig         | 132 ++++++++++++++++----------------
     src/chips/nrf52840.zig      | 148 ++++++++++++++++++------------------
     9 files changed, 179 insertions(+), 164 deletions(-)
     delete mode 100644 .buildkite/pipeline.yml
     create mode 100644 .github/FUNDING.yml
     create mode 100644 .github/workflows/build.yml
     create mode 100644 build.zig.zon
     delete mode 160000 deps/microzig
    
    diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml
    deleted file mode 100644
    index 5fd8795bc..000000000
    --- a/.buildkite/pipeline.yml
    +++ /dev/null
    @@ -1,6 +0,0 @@
    -steps:
    -  - group: Build and Test
    -    steps:
    -    - command: zig build
    -    - label: 🔨 Test
    -      command: renode-test test/nrf52840.robot
    diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
    new file mode 100644
    index 000000000..85b5393bb
    --- /dev/null
    +++ b/.github/FUNDING.yml
    @@ -0,0 +1 @@
    +github: MasterQ32
    diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
    new file mode 100644
    index 000000000..63ea5331c
    --- /dev/null
    +++ b/.github/workflows/build.yml
    @@ -0,0 +1,19 @@
    +name: Build
    +on:
    +  push:
    +
    +jobs:
    +  build:
    +    runs-on: ${{ matrix.os }}
    +    strategy:
    +      matrix:
    +        os: [ubuntu-latest, windows-latest, macos-latest]
    +        optimize: [Debug, ReleaseSmall, ReleaseFast, ReleaseSafe]
    +    steps:
    +      - uses: actions/checkout@v2
    +      - uses: goto-bus-stop/setup-zig@v2.1.1
    +        with:
    +          version: 0.11.0
    +
    +      - name: Build
    +        run: zig build install "-Doptimize=${{matrix.optimize}}"
    diff --git a/build.zig b/build.zig
    index ff60e94a8..1e421fd6d 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -1,14 +1,11 @@
     const std = @import("std");
    -const microzig = @import("deps/microzig/build.zig");
    +const microzig = @import("microzig");
     
     pub const chips = @import("src/chips.zig");
     
     pub fn build(b: *std.build.Builder) void {
         const optimize = b.standardOptimizeOption(.{});
         inline for (@typeInfo(chips).Struct.decls) |decl| {
    -        if (!decl.is_pub)
    -            continue;
    -
             const exe = microzig.addEmbeddedExecutable(b, .{
                 .name = decl.name ++ ".minimal",
                 .source_file = .{
    diff --git a/build.zig.zon b/build.zig.zon
    new file mode 100644
    index 000000000..f69b76de5
    --- /dev/null
    +++ b/build.zig.zon
    @@ -0,0 +1,10 @@
    +.{
    +    .name = "microzig-nordic-nrf5x",
    +    .version = "0.1.0",
    +    .dependencies = .{
    +        .microzig = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/0b3be0a4cc7e6d45714cb09961efc771e364723c.tar.gz",
    +            .hash = "1220ada6d01db7b3d0aa8642df89b1af9ee71b681438249e9a7efb2275fc4cf32152",
    +        },
    +    },
    +}
    diff --git a/deps/microzig b/deps/microzig
    deleted file mode 160000
    index 9392fe0f7..000000000
    --- a/deps/microzig
    +++ /dev/null
    @@ -1 +0,0 @@
    -Subproject commit 9392fe0f7bddde26155c181ab80b70097b49c791
    diff --git a/src/chips.zig b/src/chips.zig
    index 2487aa066..f53d85b86 100644
    --- a/src/chips.zig
    +++ b/src/chips.zig
    @@ -1,5 +1,5 @@
     const std = @import("std");
    -const micro = @import("../deps/microzig/build.zig");
    +const micro = @import("microzig");
     const Chip = micro.Chip;
     const MemoryRegion = micro.MemoryRegion;
     
    @@ -9,19 +9,17 @@ fn root_dir() []const u8 {
     
     pub const nrf52840 = Chip{
         .name = "nrf52840",
    -    .source = .{
    -        .path = root_dir() ++ "/chips/nrf52840.zig",
    -    },
    -    .json_register_schema = .{
    -        .path = root_dir() ++ "/chips.nrf52840.json",
    -    },
    +    .source = .{ .path = root_dir() ++ "/chips/nrf52840.zig" },
    +    .json_register_schema = .{ .path = root_dir() ++ "/chips.nrf52840.json" },
         .cpu = micro.cpus.cortex_m4,
    +
         .memory_regions = &.{
             MemoryRegion{ .offset = 0x00000000, .length = 0x100000, .kind = .flash },
             MemoryRegion{ .offset = 0x20000000, .length = 0x40000, .kind = .ram },
     
             // EXTFLASH
             MemoryRegion{ .offset = 0x12000000, .length = 0x8000000, .kind = .flash },
    +
             // CODE_RAM
             MemoryRegion{ .offset = 0x800000, .length = 0x40000, .kind = .ram },
         },
    @@ -29,13 +27,10 @@ pub const nrf52840 = Chip{
     
     pub const nrf52832 = Chip{
         .name = "nrf52",
    -    .source = .{
    -        .path = root_dir() ++ "/chips/nrf52.zig",
    -    },
    -    .json_register_schema = .{
    -        .path = root_dir() ++ "/chips.nrf52.json",
    -    },
    +    .source = .{ .path = root_dir() ++ "/chips/nrf52.zig" },
    +    .json_register_schema = .{ .path = root_dir() ++ "/chips.nrf52.json" },
         .cpu = micro.cpus.cortex_m4,
    +
         .memory_regions = &.{
             MemoryRegion{ .offset = 0x00000000, .length = 0x80000, .kind = .flash },
             MemoryRegion{ .offset = 0x20000000, .length = 0x10000, .kind = .ram },
    diff --git a/src/chips/nrf52.zig b/src/chips/nrf52.zig
    index 1e3de3bc8..0f6b36873 100644
    --- a/src/chips/nrf52.zig
    +++ b/src/chips/nrf52.zig
    @@ -104,137 +104,137 @@ pub const devices = struct {
     
             pub const peripherals = struct {
                 ///  Factory Information Configuration Registers
    -            pub const FICR = @intToPtr(*volatile types.peripherals.FICR, 0x10000000);
    +            pub const FICR = @as(*volatile types.peripherals.FICR, @ptrFromInt(0x10000000));
                 ///  User Information Configuration Registers
    -            pub const UICR = @intToPtr(*volatile types.peripherals.UICR, 0x10001000);
    +            pub const UICR = @as(*volatile types.peripherals.UICR, @ptrFromInt(0x10001000));
                 ///  Block Protect
    -            pub const BPROT = @intToPtr(*volatile types.peripherals.BPROT, 0x40000000);
    +            pub const BPROT = @as(*volatile types.peripherals.BPROT, @ptrFromInt(0x40000000));
                 ///  Power control
    -            pub const POWER = @intToPtr(*volatile types.peripherals.POWER, 0x40000000);
    +            pub const POWER = @as(*volatile types.peripherals.POWER, @ptrFromInt(0x40000000));
                 ///  Clock control
    -            pub const CLOCK = @intToPtr(*volatile types.peripherals.CLOCK, 0x40000000);
    +            pub const CLOCK = @as(*volatile types.peripherals.CLOCK, @ptrFromInt(0x40000000));
                 ///  2.4 GHz Radio
    -            pub const RADIO = @intToPtr(*volatile types.peripherals.RADIO, 0x40001000);
    +            pub const RADIO = @as(*volatile types.peripherals.RADIO, @ptrFromInt(0x40001000));
                 ///  UART with EasyDMA
    -            pub const UARTE0 = @intToPtr(*volatile types.peripherals.UARTE0, 0x40002000);
    +            pub const UARTE0 = @as(*volatile types.peripherals.UARTE0, @ptrFromInt(0x40002000));
                 ///  Universal Asynchronous Receiver/Transmitter
    -            pub const UART0 = @intToPtr(*volatile types.peripherals.UART0, 0x40002000);
    +            pub const UART0 = @as(*volatile types.peripherals.UART0, @ptrFromInt(0x40002000));
                 ///  Serial Peripheral Interface Master with EasyDMA 0
    -            pub const SPIM0 = @intToPtr(*volatile types.peripherals.SPIM0, 0x40003000);
    +            pub const SPIM0 = @as(*volatile types.peripherals.SPIM0, @ptrFromInt(0x40003000));
                 ///  SPI Slave 0
    -            pub const SPIS0 = @intToPtr(*volatile types.peripherals.SPIS0, 0x40003000);
    +            pub const SPIS0 = @as(*volatile types.peripherals.SPIS0, @ptrFromInt(0x40003000));
                 ///  I2C compatible Two-Wire Master Interface with EasyDMA 0
    -            pub const TWIM0 = @intToPtr(*volatile types.peripherals.TWIM0, 0x40003000);
    +            pub const TWIM0 = @as(*volatile types.peripherals.TWIM0, @ptrFromInt(0x40003000));
                 ///  I2C compatible Two-Wire Slave Interface with EasyDMA 0
    -            pub const TWIS0 = @intToPtr(*volatile types.peripherals.TWIS0, 0x40003000);
    +            pub const TWIS0 = @as(*volatile types.peripherals.TWIS0, @ptrFromInt(0x40003000));
                 ///  Serial Peripheral Interface 0
    -            pub const SPI0 = @intToPtr(*volatile types.peripherals.SPI0, 0x40003000);
    +            pub const SPI0 = @as(*volatile types.peripherals.SPI0, @ptrFromInt(0x40003000));
                 ///  I2C compatible Two-Wire Interface 0
    -            pub const TWI0 = @intToPtr(*volatile types.peripherals.TWI0, 0x40003000);
    +            pub const TWI0 = @as(*volatile types.peripherals.TWI0, @ptrFromInt(0x40003000));
                 ///  Serial Peripheral Interface Master with EasyDMA 1
    -            pub const SPIM1 = @intToPtr(*volatile types.peripherals.SPIM0, 0x40004000);
    +            pub const SPIM1 = @as(*volatile types.peripherals.SPIM0, @ptrFromInt(0x40004000));
                 ///  SPI Slave 1
    -            pub const SPIS1 = @intToPtr(*volatile types.peripherals.SPIS0, 0x40004000);
    +            pub const SPIS1 = @as(*volatile types.peripherals.SPIS0, @ptrFromInt(0x40004000));
                 ///  I2C compatible Two-Wire Master Interface with EasyDMA 1
    -            pub const TWIM1 = @intToPtr(*volatile types.peripherals.TWIM0, 0x40004000);
    +            pub const TWIM1 = @as(*volatile types.peripherals.TWIM0, @ptrFromInt(0x40004000));
                 ///  I2C compatible Two-Wire Slave Interface with EasyDMA 1
    -            pub const TWIS1 = @intToPtr(*volatile types.peripherals.TWIS0, 0x40004000);
    +            pub const TWIS1 = @as(*volatile types.peripherals.TWIS0, @ptrFromInt(0x40004000));
                 ///  Serial Peripheral Interface 1
    -            pub const SPI1 = @intToPtr(*volatile types.peripherals.SPI0, 0x40004000);
    +            pub const SPI1 = @as(*volatile types.peripherals.SPI0, @ptrFromInt(0x40004000));
                 ///  I2C compatible Two-Wire Interface 1
    -            pub const TWI1 = @intToPtr(*volatile types.peripherals.TWI0, 0x40004000);
    +            pub const TWI1 = @as(*volatile types.peripherals.TWI0, @ptrFromInt(0x40004000));
                 ///  NFC-A compatible radio
    -            pub const NFCT = @intToPtr(*volatile types.peripherals.NFCT, 0x40005000);
    +            pub const NFCT = @as(*volatile types.peripherals.NFCT, @ptrFromInt(0x40005000));
                 ///  GPIO Tasks and Events
    -            pub const GPIOTE = @intToPtr(*volatile types.peripherals.GPIOTE, 0x40006000);
    +            pub const GPIOTE = @as(*volatile types.peripherals.GPIOTE, @ptrFromInt(0x40006000));
                 ///  Analog to Digital Converter
    -            pub const SAADC = @intToPtr(*volatile types.peripherals.SAADC, 0x40007000);
    +            pub const SAADC = @as(*volatile types.peripherals.SAADC, @ptrFromInt(0x40007000));
                 ///  Timer/Counter 0
    -            pub const TIMER0 = @intToPtr(*volatile types.peripherals.TIMER0, 0x40008000);
    +            pub const TIMER0 = @as(*volatile types.peripherals.TIMER0, @ptrFromInt(0x40008000));
                 ///  Timer/Counter 1
    -            pub const TIMER1 = @intToPtr(*volatile types.peripherals.TIMER0, 0x40009000);
    +            pub const TIMER1 = @as(*volatile types.peripherals.TIMER0, @ptrFromInt(0x40009000));
                 ///  Timer/Counter 2
    -            pub const TIMER2 = @intToPtr(*volatile types.peripherals.TIMER0, 0x4000a000);
    +            pub const TIMER2 = @as(*volatile types.peripherals.TIMER0, @ptrFromInt(0x4000a000));
                 ///  Real time counter 0
    -            pub const RTC0 = @intToPtr(*volatile types.peripherals.RTC0, 0x4000b000);
    +            pub const RTC0 = @as(*volatile types.peripherals.RTC0, @ptrFromInt(0x4000b000));
                 ///  Temperature Sensor
    -            pub const TEMP = @intToPtr(*volatile types.peripherals.TEMP, 0x4000c000);
    +            pub const TEMP = @as(*volatile types.peripherals.TEMP, @ptrFromInt(0x4000c000));
                 ///  Random Number Generator
    -            pub const RNG = @intToPtr(*volatile types.peripherals.RNG, 0x4000d000);
    +            pub const RNG = @as(*volatile types.peripherals.RNG, @ptrFromInt(0x4000d000));
                 ///  AES ECB Mode Encryption
    -            pub const ECB = @intToPtr(*volatile types.peripherals.ECB, 0x4000e000);
    +            pub const ECB = @as(*volatile types.peripherals.ECB, @ptrFromInt(0x4000e000));
                 ///  AES CCM Mode Encryption
    -            pub const CCM = @intToPtr(*volatile types.peripherals.CCM, 0x4000f000);
    +            pub const CCM = @as(*volatile types.peripherals.CCM, @ptrFromInt(0x4000f000));
                 ///  Accelerated Address Resolver
    -            pub const AAR = @intToPtr(*volatile types.peripherals.AAR, 0x4000f000);
    +            pub const AAR = @as(*volatile types.peripherals.AAR, @ptrFromInt(0x4000f000));
                 ///  Watchdog Timer
    -            pub const WDT = @intToPtr(*volatile types.peripherals.WDT, 0x40010000);
    +            pub const WDT = @as(*volatile types.peripherals.WDT, @ptrFromInt(0x40010000));
                 ///  Real time counter 1
    -            pub const RTC1 = @intToPtr(*volatile types.peripherals.RTC0, 0x40011000);
    +            pub const RTC1 = @as(*volatile types.peripherals.RTC0, @ptrFromInt(0x40011000));
                 ///  Quadrature Decoder
    -            pub const QDEC = @intToPtr(*volatile types.peripherals.QDEC, 0x40012000);
    +            pub const QDEC = @as(*volatile types.peripherals.QDEC, @ptrFromInt(0x40012000));
                 ///  Comparator
    -            pub const COMP = @intToPtr(*volatile types.peripherals.COMP, 0x40013000);
    +            pub const COMP = @as(*volatile types.peripherals.COMP, @ptrFromInt(0x40013000));
                 ///  Low Power Comparator
    -            pub const LPCOMP = @intToPtr(*volatile types.peripherals.LPCOMP, 0x40013000);
    +            pub const LPCOMP = @as(*volatile types.peripherals.LPCOMP, @ptrFromInt(0x40013000));
                 ///  Software interrupt 0
    -            pub const SWI0 = @intToPtr(*volatile types.peripherals.SWI0, 0x40014000);
    +            pub const SWI0 = @as(*volatile types.peripherals.SWI0, @ptrFromInt(0x40014000));
                 ///  Event Generator Unit 0
    -            pub const EGU0 = @intToPtr(*volatile types.peripherals.EGU0, 0x40014000);
    +            pub const EGU0 = @as(*volatile types.peripherals.EGU0, @ptrFromInt(0x40014000));
                 ///  Software interrupt 1
    -            pub const SWI1 = @intToPtr(*volatile types.peripherals.SWI0, 0x40015000);
    +            pub const SWI1 = @as(*volatile types.peripherals.SWI0, @ptrFromInt(0x40015000));
                 ///  Event Generator Unit 1
    -            pub const EGU1 = @intToPtr(*volatile types.peripherals.EGU0, 0x40015000);
    +            pub const EGU1 = @as(*volatile types.peripherals.EGU0, @ptrFromInt(0x40015000));
                 ///  Software interrupt 2
    -            pub const SWI2 = @intToPtr(*volatile types.peripherals.SWI0, 0x40016000);
    +            pub const SWI2 = @as(*volatile types.peripherals.SWI0, @ptrFromInt(0x40016000));
                 ///  Event Generator Unit 2
    -            pub const EGU2 = @intToPtr(*volatile types.peripherals.EGU0, 0x40016000);
    +            pub const EGU2 = @as(*volatile types.peripherals.EGU0, @ptrFromInt(0x40016000));
                 ///  Software interrupt 3
    -            pub const SWI3 = @intToPtr(*volatile types.peripherals.SWI0, 0x40017000);
    +            pub const SWI3 = @as(*volatile types.peripherals.SWI0, @ptrFromInt(0x40017000));
                 ///  Event Generator Unit 3
    -            pub const EGU3 = @intToPtr(*volatile types.peripherals.EGU0, 0x40017000);
    +            pub const EGU3 = @as(*volatile types.peripherals.EGU0, @ptrFromInt(0x40017000));
                 ///  Software interrupt 4
    -            pub const SWI4 = @intToPtr(*volatile types.peripherals.SWI0, 0x40018000);
    +            pub const SWI4 = @as(*volatile types.peripherals.SWI0, @ptrFromInt(0x40018000));
                 ///  Event Generator Unit 4
    -            pub const EGU4 = @intToPtr(*volatile types.peripherals.EGU0, 0x40018000);
    +            pub const EGU4 = @as(*volatile types.peripherals.EGU0, @ptrFromInt(0x40018000));
                 ///  Software interrupt 5
    -            pub const SWI5 = @intToPtr(*volatile types.peripherals.SWI0, 0x40019000);
    +            pub const SWI5 = @as(*volatile types.peripherals.SWI0, @ptrFromInt(0x40019000));
                 ///  Event Generator Unit 5
    -            pub const EGU5 = @intToPtr(*volatile types.peripherals.EGU0, 0x40019000);
    +            pub const EGU5 = @as(*volatile types.peripherals.EGU0, @ptrFromInt(0x40019000));
                 ///  Timer/Counter 3
    -            pub const TIMER3 = @intToPtr(*volatile types.peripherals.TIMER0, 0x4001a000);
    +            pub const TIMER3 = @as(*volatile types.peripherals.TIMER0, @ptrFromInt(0x4001a000));
                 ///  Timer/Counter 4
    -            pub const TIMER4 = @intToPtr(*volatile types.peripherals.TIMER0, 0x4001b000);
    +            pub const TIMER4 = @as(*volatile types.peripherals.TIMER0, @ptrFromInt(0x4001b000));
                 ///  Pulse Width Modulation Unit 0
    -            pub const PWM0 = @intToPtr(*volatile types.peripherals.PWM0, 0x4001c000);
    +            pub const PWM0 = @as(*volatile types.peripherals.PWM0, @ptrFromInt(0x4001c000));
                 ///  Pulse Density Modulation (Digital Microphone) Interface
    -            pub const PDM = @intToPtr(*volatile types.peripherals.PDM, 0x4001d000);
    +            pub const PDM = @as(*volatile types.peripherals.PDM, @ptrFromInt(0x4001d000));
                 ///  Non Volatile Memory Controller
    -            pub const NVMC = @intToPtr(*volatile types.peripherals.NVMC, 0x4001e000);
    +            pub const NVMC = @as(*volatile types.peripherals.NVMC, @ptrFromInt(0x4001e000));
                 ///  Programmable Peripheral Interconnect
    -            pub const PPI = @intToPtr(*volatile types.peripherals.PPI, 0x4001f000);
    +            pub const PPI = @as(*volatile types.peripherals.PPI, @ptrFromInt(0x4001f000));
                 ///  Memory Watch Unit
    -            pub const MWU = @intToPtr(*volatile types.peripherals.MWU, 0x40020000);
    +            pub const MWU = @as(*volatile types.peripherals.MWU, @ptrFromInt(0x40020000));
                 ///  Pulse Width Modulation Unit 1
    -            pub const PWM1 = @intToPtr(*volatile types.peripherals.PWM0, 0x40021000);
    +            pub const PWM1 = @as(*volatile types.peripherals.PWM0, @ptrFromInt(0x40021000));
                 ///  Pulse Width Modulation Unit 2
    -            pub const PWM2 = @intToPtr(*volatile types.peripherals.PWM0, 0x40022000);
    +            pub const PWM2 = @as(*volatile types.peripherals.PWM0, @ptrFromInt(0x40022000));
                 ///  Serial Peripheral Interface Master with EasyDMA 2
    -            pub const SPIM2 = @intToPtr(*volatile types.peripherals.SPIM0, 0x40023000);
    +            pub const SPIM2 = @as(*volatile types.peripherals.SPIM0, @ptrFromInt(0x40023000));
                 ///  SPI Slave 2
    -            pub const SPIS2 = @intToPtr(*volatile types.peripherals.SPIS0, 0x40023000);
    +            pub const SPIS2 = @as(*volatile types.peripherals.SPIS0, @ptrFromInt(0x40023000));
                 ///  Serial Peripheral Interface 2
    -            pub const SPI2 = @intToPtr(*volatile types.peripherals.SPI0, 0x40023000);
    +            pub const SPI2 = @as(*volatile types.peripherals.SPI0, @ptrFromInt(0x40023000));
                 ///  Real time counter 2
    -            pub const RTC2 = @intToPtr(*volatile types.peripherals.RTC0, 0x40024000);
    +            pub const RTC2 = @as(*volatile types.peripherals.RTC0, @ptrFromInt(0x40024000));
                 ///  Inter-IC Sound
    -            pub const I2S = @intToPtr(*volatile types.peripherals.I2S, 0x40025000);
    +            pub const I2S = @as(*volatile types.peripherals.I2S, @ptrFromInt(0x40025000));
                 ///  FPU
    -            pub const FPU = @intToPtr(*volatile types.peripherals.FPU, 0x40026000);
    +            pub const FPU = @as(*volatile types.peripherals.FPU, @ptrFromInt(0x40026000));
                 ///  GPIO Port 1
    -            pub const P0 = @intToPtr(*volatile types.peripherals.P0, 0x50000000);
    +            pub const P0 = @as(*volatile types.peripherals.P0, @ptrFromInt(0x50000000));
                 ///  System Tick Timer
    -            pub const SysTick = @intToPtr(*volatile types.peripherals.SCS.SysTick, 0xe000e010);
    +            pub const SysTick = @as(*volatile types.peripherals.SCS.SysTick, @ptrFromInt(0xe000e010));
             };
         };
     };
    diff --git a/src/chips/nrf52840.zig b/src/chips/nrf52840.zig
    index 8c1ffa2f4..955d043ff 100644
    --- a/src/chips/nrf52840.zig
    +++ b/src/chips/nrf52840.zig
    @@ -112,153 +112,153 @@ pub const devices = struct {
     
             pub const peripherals = struct {
                 ///  Factory information configuration registers
    -            pub const FICR = @intToPtr(*volatile types.peripherals.FICR, 0x10000000);
    +            pub const FICR = @as(*volatile types.peripherals.FICR, @ptrFromInt(0x10000000));
                 ///  User information configuration registers
    -            pub const UICR = @intToPtr(*volatile types.peripherals.UICR, 0x10001000);
    +            pub const UICR = @as(*volatile types.peripherals.UICR, @ptrFromInt(0x10001000));
                 ///  Clock control
    -            pub const CLOCK = @intToPtr(*volatile types.peripherals.CLOCK, 0x40000000);
    +            pub const CLOCK = @as(*volatile types.peripherals.CLOCK, @ptrFromInt(0x40000000));
                 ///  Power control
    -            pub const POWER = @intToPtr(*volatile types.peripherals.POWER, 0x40000000);
    +            pub const POWER = @as(*volatile types.peripherals.POWER, @ptrFromInt(0x40000000));
                 ///  2.4 GHz radio
    -            pub const RADIO = @intToPtr(*volatile types.peripherals.RADIO, 0x40001000);
    +            pub const RADIO = @as(*volatile types.peripherals.RADIO, @ptrFromInt(0x40001000));
                 ///  Universal Asynchronous Receiver/Transmitter
    -            pub const UART0 = @intToPtr(*volatile types.peripherals.UART0, 0x40002000);
    +            pub const UART0 = @as(*volatile types.peripherals.UART0, @ptrFromInt(0x40002000));
                 ///  UART with EasyDMA 0
    -            pub const UARTE0 = @intToPtr(*volatile types.peripherals.UARTE0, 0x40002000);
    +            pub const UARTE0 = @as(*volatile types.peripherals.UARTE0, @ptrFromInt(0x40002000));
                 ///  Serial Peripheral Interface 0
    -            pub const SPI0 = @intToPtr(*volatile types.peripherals.SPI0, 0x40003000);
    +            pub const SPI0 = @as(*volatile types.peripherals.SPI0, @ptrFromInt(0x40003000));
                 ///  Serial Peripheral Interface Master with EasyDMA 0
    -            pub const SPIM0 = @intToPtr(*volatile types.peripherals.SPIM0, 0x40003000);
    +            pub const SPIM0 = @as(*volatile types.peripherals.SPIM0, @ptrFromInt(0x40003000));
                 ///  SPI Slave 0
    -            pub const SPIS0 = @intToPtr(*volatile types.peripherals.SPIS0, 0x40003000);
    +            pub const SPIS0 = @as(*volatile types.peripherals.SPIS0, @ptrFromInt(0x40003000));
                 ///  I2C compatible Two-Wire Interface 0
    -            pub const TWI0 = @intToPtr(*volatile types.peripherals.TWI0, 0x40003000);
    +            pub const TWI0 = @as(*volatile types.peripherals.TWI0, @ptrFromInt(0x40003000));
                 ///  I2C compatible Two-Wire Master Interface with EasyDMA 0
    -            pub const TWIM0 = @intToPtr(*volatile types.peripherals.TWIM0, 0x40003000);
    +            pub const TWIM0 = @as(*volatile types.peripherals.TWIM0, @ptrFromInt(0x40003000));
                 ///  I2C compatible Two-Wire Slave Interface with EasyDMA 0
    -            pub const TWIS0 = @intToPtr(*volatile types.peripherals.TWIS0, 0x40003000);
    +            pub const TWIS0 = @as(*volatile types.peripherals.TWIS0, @ptrFromInt(0x40003000));
                 ///  Serial Peripheral Interface 1
    -            pub const SPI1 = @intToPtr(*volatile types.peripherals.SPI0, 0x40004000);
    +            pub const SPI1 = @as(*volatile types.peripherals.SPI0, @ptrFromInt(0x40004000));
                 ///  Serial Peripheral Interface Master with EasyDMA 1
    -            pub const SPIM1 = @intToPtr(*volatile types.peripherals.SPIM0, 0x40004000);
    +            pub const SPIM1 = @as(*volatile types.peripherals.SPIM0, @ptrFromInt(0x40004000));
                 ///  SPI Slave 1
    -            pub const SPIS1 = @intToPtr(*volatile types.peripherals.SPIS0, 0x40004000);
    +            pub const SPIS1 = @as(*volatile types.peripherals.SPIS0, @ptrFromInt(0x40004000));
                 ///  I2C compatible Two-Wire Interface 1
    -            pub const TWI1 = @intToPtr(*volatile types.peripherals.TWI0, 0x40004000);
    +            pub const TWI1 = @as(*volatile types.peripherals.TWI0, @ptrFromInt(0x40004000));
                 ///  I2C compatible Two-Wire Master Interface with EasyDMA 1
    -            pub const TWIM1 = @intToPtr(*volatile types.peripherals.TWIM0, 0x40004000);
    +            pub const TWIM1 = @as(*volatile types.peripherals.TWIM0, @ptrFromInt(0x40004000));
                 ///  I2C compatible Two-Wire Slave Interface with EasyDMA 1
    -            pub const TWIS1 = @intToPtr(*volatile types.peripherals.TWIS0, 0x40004000);
    +            pub const TWIS1 = @as(*volatile types.peripherals.TWIS0, @ptrFromInt(0x40004000));
                 ///  NFC-A compatible radio
    -            pub const NFCT = @intToPtr(*volatile types.peripherals.NFCT, 0x40005000);
    +            pub const NFCT = @as(*volatile types.peripherals.NFCT, @ptrFromInt(0x40005000));
                 ///  GPIO Tasks and Events
    -            pub const GPIOTE = @intToPtr(*volatile types.peripherals.GPIOTE, 0x40006000);
    +            pub const GPIOTE = @as(*volatile types.peripherals.GPIOTE, @ptrFromInt(0x40006000));
                 ///  Successive approximation register (SAR) analog-to-digital converter
    -            pub const SAADC = @intToPtr(*volatile types.peripherals.SAADC, 0x40007000);
    +            pub const SAADC = @as(*volatile types.peripherals.SAADC, @ptrFromInt(0x40007000));
                 ///  Timer/Counter 0
    -            pub const TIMER0 = @intToPtr(*volatile types.peripherals.TIMER0, 0x40008000);
    +            pub const TIMER0 = @as(*volatile types.peripherals.TIMER0, @ptrFromInt(0x40008000));
                 ///  Timer/Counter 1
    -            pub const TIMER1 = @intToPtr(*volatile types.peripherals.TIMER0, 0x40009000);
    +            pub const TIMER1 = @as(*volatile types.peripherals.TIMER0, @ptrFromInt(0x40009000));
                 ///  Timer/Counter 2
    -            pub const TIMER2 = @intToPtr(*volatile types.peripherals.TIMER0, 0x4000a000);
    +            pub const TIMER2 = @as(*volatile types.peripherals.TIMER0, @ptrFromInt(0x4000a000));
                 ///  Real time counter 0
    -            pub const RTC0 = @intToPtr(*volatile types.peripherals.RTC0, 0x4000b000);
    +            pub const RTC0 = @as(*volatile types.peripherals.RTC0, @ptrFromInt(0x4000b000));
                 ///  Temperature Sensor
    -            pub const TEMP = @intToPtr(*volatile types.peripherals.TEMP, 0x4000c000);
    +            pub const TEMP = @as(*volatile types.peripherals.TEMP, @ptrFromInt(0x4000c000));
                 ///  Random Number Generator
    -            pub const RNG = @intToPtr(*volatile types.peripherals.RNG, 0x4000d000);
    +            pub const RNG = @as(*volatile types.peripherals.RNG, @ptrFromInt(0x4000d000));
                 ///  AES ECB Mode Encryption
    -            pub const ECB = @intToPtr(*volatile types.peripherals.ECB, 0x4000e000);
    +            pub const ECB = @as(*volatile types.peripherals.ECB, @ptrFromInt(0x4000e000));
                 ///  Accelerated Address Resolver
    -            pub const AAR = @intToPtr(*volatile types.peripherals.AAR, 0x4000f000);
    +            pub const AAR = @as(*volatile types.peripherals.AAR, @ptrFromInt(0x4000f000));
                 ///  AES CCM Mode Encryption
    -            pub const CCM = @intToPtr(*volatile types.peripherals.CCM, 0x4000f000);
    +            pub const CCM = @as(*volatile types.peripherals.CCM, @ptrFromInt(0x4000f000));
                 ///  Watchdog Timer
    -            pub const WDT = @intToPtr(*volatile types.peripherals.WDT, 0x40010000);
    +            pub const WDT = @as(*volatile types.peripherals.WDT, @ptrFromInt(0x40010000));
                 ///  Real time counter 1
    -            pub const RTC1 = @intToPtr(*volatile types.peripherals.RTC0, 0x40011000);
    +            pub const RTC1 = @as(*volatile types.peripherals.RTC0, @ptrFromInt(0x40011000));
                 ///  Quadrature Decoder
    -            pub const QDEC = @intToPtr(*volatile types.peripherals.QDEC, 0x40012000);
    +            pub const QDEC = @as(*volatile types.peripherals.QDEC, @ptrFromInt(0x40012000));
                 ///  Comparator
    -            pub const COMP = @intToPtr(*volatile types.peripherals.COMP, 0x40013000);
    +            pub const COMP = @as(*volatile types.peripherals.COMP, @ptrFromInt(0x40013000));
                 ///  Low Power Comparator
    -            pub const LPCOMP = @intToPtr(*volatile types.peripherals.LPCOMP, 0x40013000);
    +            pub const LPCOMP = @as(*volatile types.peripherals.LPCOMP, @ptrFromInt(0x40013000));
                 ///  Event Generator Unit 0
    -            pub const EGU0 = @intToPtr(*volatile types.peripherals.EGU0, 0x40014000);
    +            pub const EGU0 = @as(*volatile types.peripherals.EGU0, @ptrFromInt(0x40014000));
                 ///  Software interrupt 0
    -            pub const SWI0 = @intToPtr(*volatile types.peripherals.SWI0, 0x40014000);
    +            pub const SWI0 = @as(*volatile types.peripherals.SWI0, @ptrFromInt(0x40014000));
                 ///  Event Generator Unit 1
    -            pub const EGU1 = @intToPtr(*volatile types.peripherals.EGU0, 0x40015000);
    +            pub const EGU1 = @as(*volatile types.peripherals.EGU0, @ptrFromInt(0x40015000));
                 ///  Software interrupt 1
    -            pub const SWI1 = @intToPtr(*volatile types.peripherals.SWI0, 0x40015000);
    +            pub const SWI1 = @as(*volatile types.peripherals.SWI0, @ptrFromInt(0x40015000));
                 ///  Event Generator Unit 2
    -            pub const EGU2 = @intToPtr(*volatile types.peripherals.EGU0, 0x40016000);
    +            pub const EGU2 = @as(*volatile types.peripherals.EGU0, @ptrFromInt(0x40016000));
                 ///  Software interrupt 2
    -            pub const SWI2 = @intToPtr(*volatile types.peripherals.SWI0, 0x40016000);
    +            pub const SWI2 = @as(*volatile types.peripherals.SWI0, @ptrFromInt(0x40016000));
                 ///  Event Generator Unit 3
    -            pub const EGU3 = @intToPtr(*volatile types.peripherals.EGU0, 0x40017000);
    +            pub const EGU3 = @as(*volatile types.peripherals.EGU0, @ptrFromInt(0x40017000));
                 ///  Software interrupt 3
    -            pub const SWI3 = @intToPtr(*volatile types.peripherals.SWI0, 0x40017000);
    +            pub const SWI3 = @as(*volatile types.peripherals.SWI0, @ptrFromInt(0x40017000));
                 ///  Event Generator Unit 4
    -            pub const EGU4 = @intToPtr(*volatile types.peripherals.EGU0, 0x40018000);
    +            pub const EGU4 = @as(*volatile types.peripherals.EGU0, @ptrFromInt(0x40018000));
                 ///  Software interrupt 4
    -            pub const SWI4 = @intToPtr(*volatile types.peripherals.SWI0, 0x40018000);
    +            pub const SWI4 = @as(*volatile types.peripherals.SWI0, @ptrFromInt(0x40018000));
                 ///  Event Generator Unit 5
    -            pub const EGU5 = @intToPtr(*volatile types.peripherals.EGU0, 0x40019000);
    +            pub const EGU5 = @as(*volatile types.peripherals.EGU0, @ptrFromInt(0x40019000));
                 ///  Software interrupt 5
    -            pub const SWI5 = @intToPtr(*volatile types.peripherals.SWI0, 0x40019000);
    +            pub const SWI5 = @as(*volatile types.peripherals.SWI0, @ptrFromInt(0x40019000));
                 ///  Timer/Counter 3
    -            pub const TIMER3 = @intToPtr(*volatile types.peripherals.TIMER0, 0x4001a000);
    +            pub const TIMER3 = @as(*volatile types.peripherals.TIMER0, @ptrFromInt(0x4001a000));
                 ///  Timer/Counter 4
    -            pub const TIMER4 = @intToPtr(*volatile types.peripherals.TIMER0, 0x4001b000);
    +            pub const TIMER4 = @as(*volatile types.peripherals.TIMER0, @ptrFromInt(0x4001b000));
                 ///  Pulse width modulation unit 0
    -            pub const PWM0 = @intToPtr(*volatile types.peripherals.PWM0, 0x4001c000);
    +            pub const PWM0 = @as(*volatile types.peripherals.PWM0, @ptrFromInt(0x4001c000));
                 ///  Pulse Density Modulation (Digital Microphone) Interface
    -            pub const PDM = @intToPtr(*volatile types.peripherals.PDM, 0x4001d000);
    +            pub const PDM = @as(*volatile types.peripherals.PDM, @ptrFromInt(0x4001d000));
                 ///  Access control lists
    -            pub const ACL = @intToPtr(*volatile types.peripherals.ACL, 0x4001e000);
    +            pub const ACL = @as(*volatile types.peripherals.ACL, @ptrFromInt(0x4001e000));
                 ///  Non Volatile Memory Controller
    -            pub const NVMC = @intToPtr(*volatile types.peripherals.NVMC, 0x4001e000);
    +            pub const NVMC = @as(*volatile types.peripherals.NVMC, @ptrFromInt(0x4001e000));
                 ///  Programmable Peripheral Interconnect
    -            pub const PPI = @intToPtr(*volatile types.peripherals.PPI, 0x4001f000);
    +            pub const PPI = @as(*volatile types.peripherals.PPI, @ptrFromInt(0x4001f000));
                 ///  Memory Watch Unit
    -            pub const MWU = @intToPtr(*volatile types.peripherals.MWU, 0x40020000);
    +            pub const MWU = @as(*volatile types.peripherals.MWU, @ptrFromInt(0x40020000));
                 ///  Pulse width modulation unit 1
    -            pub const PWM1 = @intToPtr(*volatile types.peripherals.PWM0, 0x40021000);
    +            pub const PWM1 = @as(*volatile types.peripherals.PWM0, @ptrFromInt(0x40021000));
                 ///  Pulse width modulation unit 2
    -            pub const PWM2 = @intToPtr(*volatile types.peripherals.PWM0, 0x40022000);
    +            pub const PWM2 = @as(*volatile types.peripherals.PWM0, @ptrFromInt(0x40022000));
                 ///  Serial Peripheral Interface 2
    -            pub const SPI2 = @intToPtr(*volatile types.peripherals.SPI0, 0x40023000);
    +            pub const SPI2 = @as(*volatile types.peripherals.SPI0, @ptrFromInt(0x40023000));
                 ///  Serial Peripheral Interface Master with EasyDMA 2
    -            pub const SPIM2 = @intToPtr(*volatile types.peripherals.SPIM0, 0x40023000);
    +            pub const SPIM2 = @as(*volatile types.peripherals.SPIM0, @ptrFromInt(0x40023000));
                 ///  SPI Slave 2
    -            pub const SPIS2 = @intToPtr(*volatile types.peripherals.SPIS0, 0x40023000);
    +            pub const SPIS2 = @as(*volatile types.peripherals.SPIS0, @ptrFromInt(0x40023000));
                 ///  Real time counter 2
    -            pub const RTC2 = @intToPtr(*volatile types.peripherals.RTC0, 0x40024000);
    +            pub const RTC2 = @as(*volatile types.peripherals.RTC0, @ptrFromInt(0x40024000));
                 ///  Inter-IC Sound
    -            pub const I2S = @intToPtr(*volatile types.peripherals.I2S, 0x40025000);
    +            pub const I2S = @as(*volatile types.peripherals.I2S, @ptrFromInt(0x40025000));
                 ///  FPU
    -            pub const FPU = @intToPtr(*volatile types.peripherals.FPU, 0x40026000);
    +            pub const FPU = @as(*volatile types.peripherals.FPU, @ptrFromInt(0x40026000));
                 ///  Universal serial bus device
    -            pub const USBD = @intToPtr(*volatile types.peripherals.USBD, 0x40027000);
    +            pub const USBD = @as(*volatile types.peripherals.USBD, @ptrFromInt(0x40027000));
                 ///  UART with EasyDMA 1
    -            pub const UARTE1 = @intToPtr(*volatile types.peripherals.UARTE0, 0x40028000);
    +            pub const UARTE1 = @as(*volatile types.peripherals.UARTE0, @ptrFromInt(0x40028000));
                 ///  External flash interface
    -            pub const QSPI = @intToPtr(*volatile types.peripherals.QSPI, 0x40029000);
    +            pub const QSPI = @as(*volatile types.peripherals.QSPI, @ptrFromInt(0x40029000));
                 ///  Pulse width modulation unit 3
    -            pub const PWM3 = @intToPtr(*volatile types.peripherals.PWM0, 0x4002d000);
    +            pub const PWM3 = @as(*volatile types.peripherals.PWM0, @ptrFromInt(0x4002d000));
                 ///  Serial Peripheral Interface Master with EasyDMA 3
    -            pub const SPIM3 = @intToPtr(*volatile types.peripherals.SPIM0, 0x4002f000);
    +            pub const SPIM3 = @as(*volatile types.peripherals.SPIM0, @ptrFromInt(0x4002f000));
                 ///  GPIO Port 1
    -            pub const P0 = @intToPtr(*volatile types.peripherals.P0, 0x50000000);
    +            pub const P0 = @as(*volatile types.peripherals.P0, @ptrFromInt(0x50000000));
                 ///  GPIO Port 2
    -            pub const P1 = @intToPtr(*volatile types.peripherals.P0, 0x50000300);
    +            pub const P1 = @as(*volatile types.peripherals.P0, @ptrFromInt(0x50000300));
                 ///  CRYPTOCELL HOST_RGF interface
    -            pub const CC_HOST_RGF = @intToPtr(*volatile types.peripherals.CC_HOST_RGF, 0x5002a000);
    +            pub const CC_HOST_RGF = @as(*volatile types.peripherals.CC_HOST_RGF, @ptrFromInt(0x5002a000));
                 ///  ARM TrustZone CryptoCell register interface
    -            pub const CRYPTOCELL = @intToPtr(*volatile types.peripherals.CRYPTOCELL, 0x5002a000);
    +            pub const CRYPTOCELL = @as(*volatile types.peripherals.CRYPTOCELL, @ptrFromInt(0x5002a000));
                 ///  System Tick Timer
    -            pub const SysTick = @intToPtr(*volatile types.peripherals.SCS.SysTick, 0xe000e010);
    +            pub const SysTick = @as(*volatile types.peripherals.SCS.SysTick, @ptrFromInt(0xe000e010));
             };
         };
     };
    
    From 081683a4518f173e3ce7e7886fbbf39939ce4aaf Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20Quei=C3=9Fner?= 
    Date: Sat, 26 Aug 2023 18:09:30 +0200
    Subject: [PATCH 193/286] Update to zig-0.11.0 (#24)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Co-authored-by: Felix "xq" Queißner 
    ---
     .buildkite/pipeline.yml     |  4 ----
     .github/workflows/build.yml | 19 +++++++++++++++++++
     .gitmodules                 |  3 ---
     build.zig                   |  8 +-------
     build.zig.zon               | 10 ++++++++++
     deps/microzig               |  1 -
     src/boards.zig              |  2 +-
     src/chips.zig               |  2 +-
     src/chips/ATmega328P.zig    | 34 +++++++++++++++++-----------------
     src/hals/ATmega328P.zig     | 16 ++++++++--------
     10 files changed, 57 insertions(+), 42 deletions(-)
     delete mode 100644 .buildkite/pipeline.yml
     create mode 100644 .github/workflows/build.yml
     create mode 100644 build.zig.zon
     delete mode 160000 deps/microzig
    
    diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml
    deleted file mode 100644
    index 24d964669..000000000
    --- a/.buildkite/pipeline.yml
    +++ /dev/null
    @@ -1,4 +0,0 @@
    -steps:
    -  - group: Build
    -    steps:
    -    - command: zig build -Doptimize=ReleaseSmall
    diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
    new file mode 100644
    index 000000000..63ea5331c
    --- /dev/null
    +++ b/.github/workflows/build.yml
    @@ -0,0 +1,19 @@
    +name: Build
    +on:
    +  push:
    +
    +jobs:
    +  build:
    +    runs-on: ${{ matrix.os }}
    +    strategy:
    +      matrix:
    +        os: [ubuntu-latest, windows-latest, macos-latest]
    +        optimize: [Debug, ReleaseSmall, ReleaseFast, ReleaseSafe]
    +    steps:
    +      - uses: actions/checkout@v2
    +      - uses: goto-bus-stop/setup-zig@v2.1.1
    +        with:
    +          version: 0.11.0
    +
    +      - name: Build
    +        run: zig build install "-Doptimize=${{matrix.optimize}}"
    diff --git a/.gitmodules b/.gitmodules
    index 32e895ccb..e69de29bb 100644
    --- a/.gitmodules
    +++ b/.gitmodules
    @@ -1,3 +0,0 @@
    -[submodule "deps/microzig"]
    -	path = deps/microzig
    -	url = https://github.com/ZigEmbeddedGroup/microzig.git
    diff --git a/build.zig b/build.zig
    index 56ed4e58a..dd84d30ca 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -1,5 +1,5 @@
     const std = @import("std");
    -const microzig = @import("deps/microzig/build.zig");
    +const microzig = @import("microzig");
     
     pub const boards = @import("src/boards.zig");
     pub const chips = @import("src/chips.zig");
    @@ -7,9 +7,6 @@ pub const chips = @import("src/chips.zig");
     pub fn build(b: *std.build.Builder) void {
         const optimize = b.standardOptimizeOption(.{});
         inline for (@typeInfo(boards).Struct.decls) |decl| {
    -        if (!decl.is_pub)
    -            continue;
    -
             const exe = microzig.addEmbeddedExecutable(b, .{
                 .name = @field(boards, decl.name).name ++ ".minimal",
                 .source_file = .{
    @@ -22,9 +19,6 @@ pub fn build(b: *std.build.Builder) void {
         }
     
         inline for (@typeInfo(chips).Struct.decls) |decl| {
    -        if (!decl.is_pub)
    -            continue;
    -
             const exe = microzig.addEmbeddedExecutable(b, .{
                 .name = @field(chips, decl.name).name ++ ".minimal",
                 .source_file = .{
    diff --git a/build.zig.zon b/build.zig.zon
    new file mode 100644
    index 000000000..e8787ef0b
    --- /dev/null
    +++ b/build.zig.zon
    @@ -0,0 +1,10 @@
    +.{
    +    .name = "microzig-espressif-esp",
    +    .version = "0.1.0",
    +    .dependencies = .{
    +        .microzig = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/0b3be0a4cc7e6d45714cb09961efc771e364723c.tar.gz",
    +            .hash = "1220ada6d01db7b3d0aa8642df89b1af9ee71b681438249e9a7efb2275fc4cf32152",
    +        },
    +    },
    +}
    diff --git a/deps/microzig b/deps/microzig
    deleted file mode 160000
    index 9392fe0f7..000000000
    --- a/deps/microzig
    +++ /dev/null
    @@ -1 +0,0 @@
    -Subproject commit 9392fe0f7bddde26155c181ab80b70097b49c791
    diff --git a/src/boards.zig b/src/boards.zig
    index 55fc2208e..0691ab575 100644
    --- a/src/boards.zig
    +++ b/src/boards.zig
    @@ -1,5 +1,5 @@
     const std = @import("std");
    -const micro = @import("../deps/microzig/build.zig");
    +const micro = @import("microzig");
     const chips = @import("chips.zig");
     
     fn root_dir() []const u8 {
    diff --git a/src/chips.zig b/src/chips.zig
    index cc7816b83..a1c7d58f2 100644
    --- a/src/chips.zig
    +++ b/src/chips.zig
    @@ -1,5 +1,5 @@
     const std = @import("std");
    -const micro = @import("../deps/microzig/build.zig");
    +const micro = @import("microzig");
     const Chip = micro.Chip;
     const MemoryRegion = micro.MemoryRegion;
     
    diff --git a/src/chips/ATmega328P.zig b/src/chips/ATmega328P.zig
    index 604b37fec..6ea04102c 100644
    --- a/src/chips/ATmega328P.zig
    +++ b/src/chips/ATmega328P.zig
    @@ -67,39 +67,39 @@ pub const devices = struct {
     
             pub const peripherals = struct {
                 ///  Fuses
    -            pub const FUSE = @intToPtr(*volatile types.peripherals.FUSE, 0x0);
    +            pub const FUSE = @as(*volatile types.peripherals.FUSE, @ptrFromInt(0x0));
                 ///  Lockbits
    -            pub const LOCKBIT = @intToPtr(*volatile types.peripherals.LOCKBIT, 0x0);
    +            pub const LOCKBIT = @as(*volatile types.peripherals.LOCKBIT, @ptrFromInt(0x0));
                 ///  I/O Port
    -            pub const PORTB = @intToPtr(*volatile types.peripherals.PORT.PORTB, 0x23);
    +            pub const PORTB = @as(*volatile types.peripherals.PORT.PORTB, @ptrFromInt(0x23));
                 ///  I/O Port
    -            pub const PORTC = @intToPtr(*volatile types.peripherals.PORT.PORTC, 0x26);
    +            pub const PORTC = @as(*volatile types.peripherals.PORT.PORTC, @ptrFromInt(0x26));
                 ///  I/O Port
    -            pub const PORTD = @intToPtr(*volatile types.peripherals.PORT.PORTD, 0x29);
    +            pub const PORTD = @as(*volatile types.peripherals.PORT.PORTD, @ptrFromInt(0x29));
                 ///  Timer/Counter, 8-bit
    -            pub const TC0 = @intToPtr(*volatile types.peripherals.TC8.TC0, 0x35);
    +            pub const TC0 = @as(*volatile types.peripherals.TC8.TC0, @ptrFromInt(0x35));
                 ///  Timer/Counter, 16-bit
    -            pub const TC1 = @intToPtr(*volatile types.peripherals.TC16.TC1, 0x36);
    +            pub const TC1 = @as(*volatile types.peripherals.TC16.TC1, @ptrFromInt(0x36));
                 ///  Timer/Counter, 8-bit Async
    -            pub const TC2 = @intToPtr(*volatile types.peripherals.TC8_ASYNC.TC2, 0x37);
    +            pub const TC2 = @as(*volatile types.peripherals.TC8_ASYNC.TC2, @ptrFromInt(0x37));
                 ///  External Interrupts
    -            pub const EXINT = @intToPtr(*volatile types.peripherals.EXINT, 0x3b);
    +            pub const EXINT = @as(*volatile types.peripherals.EXINT, @ptrFromInt(0x3b));
                 ///  CPU Registers
    -            pub const CPU = @intToPtr(*volatile types.peripherals.CPU, 0x3e);
    +            pub const CPU = @as(*volatile types.peripherals.CPU, @ptrFromInt(0x3e));
                 ///  EEPROM
    -            pub const EEPROM = @intToPtr(*volatile types.peripherals.EEPROM, 0x3f);
    +            pub const EEPROM = @as(*volatile types.peripherals.EEPROM, @ptrFromInt(0x3f));
                 ///  Serial Peripheral Interface
    -            pub const SPI = @intToPtr(*volatile types.peripherals.SPI, 0x4c);
    +            pub const SPI = @as(*volatile types.peripherals.SPI, @ptrFromInt(0x4c));
                 ///  Analog Comparator
    -            pub const AC = @intToPtr(*volatile types.peripherals.AC, 0x50);
    +            pub const AC = @as(*volatile types.peripherals.AC, @ptrFromInt(0x50));
                 ///  Watchdog Timer
    -            pub const WDT = @intToPtr(*volatile types.peripherals.WDT, 0x60);
    +            pub const WDT = @as(*volatile types.peripherals.WDT, @ptrFromInt(0x60));
                 ///  Analog-to-Digital Converter
    -            pub const ADC = @intToPtr(*volatile types.peripherals.ADC, 0x78);
    +            pub const ADC = @as(*volatile types.peripherals.ADC, @ptrFromInt(0x78));
                 ///  Two Wire Serial Interface
    -            pub const TWI = @intToPtr(*volatile types.peripherals.TWI, 0xb8);
    +            pub const TWI = @as(*volatile types.peripherals.TWI, @ptrFromInt(0xb8));
                 ///  USART
    -            pub const USART0 = @intToPtr(*volatile types.peripherals.USART.USART0, 0xc0);
    +            pub const USART0 = @as(*volatile types.peripherals.USART.USART0, @ptrFromInt(0xc0));
             };
         };
     };
    diff --git a/src/hals/ATmega328P.zig b/src/hals/ATmega328P.zig
    index 6e4ef9400..b74e6a9f8 100644
    --- a/src/hals/ATmega328P.zig
    +++ b/src/hals/ATmega328P.zig
    @@ -34,14 +34,14 @@ pub const gpio = struct {
         fn regs(comptime desc: type) type {
             return struct {
                 // io address
    -            const pin_addr: u5 = 3 * @enumToInt(desc.port) + 0x00;
    -            const dir_addr: u5 = 3 * @enumToInt(desc.port) + 0x01;
    -            const port_addr: u5 = 3 * @enumToInt(desc.port) + 0x02;
    +            const pin_addr: u5 = 3 * @intFromEnum(desc.port) + 0x00;
    +            const dir_addr: u5 = 3 * @intFromEnum(desc.port) + 0x01;
    +            const port_addr: u5 = 3 * @intFromEnum(desc.port) + 0x02;
     
                 // ram mapping
    -            const pin = @intToPtr(*volatile u8, 0x20 + @as(usize, pin_addr));
    -            const dir = @intToPtr(*volatile u8, 0x20 + @as(usize, dir_addr));
    -            const port = @intToPtr(*volatile u8, 0x20 + @as(usize, port_addr));
    +            const pin = @as(*volatile u8, @ptrFromInt(0x20 + @as(usize, pin_addr)));
    +            const dir = @as(*volatile u8, @ptrFromInt(0x20 + @as(usize, dir_addr)));
    +            const port = @as(*volatile u8, @ptrFromInt(0x20 + @as(usize, port_addr)));
             };
         }
     
    @@ -147,7 +147,7 @@ pub fn Uart(comptime index: usize, comptime pins: micro.uart.Pins) type {
                 USART0.UCSR0B.write(.{
                     .TXB80 = 0, // we don't care about these btw
                     .RXB80 = 0, // we don't care about these btw
    -                .UCSZ02 = @truncate(u1, (ucsz & 0x04) >> 2),
    +                .UCSZ02 = @as(u1, @truncate((ucsz & 0x04) >> 2)),
                     .TXEN0 = 1,
                     .RXEN0 = 1,
                     .UDRIE0 = 0, // no interrupts
    @@ -156,7 +156,7 @@ pub fn Uart(comptime index: usize, comptime pins: micro.uart.Pins) type {
                 });
                 USART0.UCSR0C.write(.{
                     .UCPOL0 = 0, // async mode
    -                .UCSZ0 = @truncate(u2, (ucsz & 0x03) >> 0),
    +                .UCSZ0 = @as(u2, @truncate((ucsz & 0x03) >> 0)),
                     .USBS0 = usbs,
                     .UPM0 = upm,
                     .UMSEL0 = umsel,
    
    From 8885309e9c1f22425dca58f67afb315fdeb0e226 Mon Sep 17 00:00:00 2001
    From: DEADBLACKCLOVER 
    Date: Mon, 28 Aug 2023 00:36:35 +0700
    Subject: [PATCH 194/286] Fix perform-flash.sh (#27)
    
    ---
     perform-flash.sh | 4 ++--
     1 file changed, 2 insertions(+), 2 deletions(-)
    
    diff --git a/perform-flash.sh b/perform-flash.sh
    index ce1f5de72..f7bc87ddb 100755
    --- a/perform-flash.sh
    +++ b/perform-flash.sh
    @@ -3,11 +3,11 @@
     set -e
     
     clear
    -zig build -Drelease-small
    +zig build -Doptimize=ReleaseSmall
     llvm-objdump -S ./zig-out/bin/esp-bringup > /tmp/dump.txt
     esptool.py \
       --port /dev/ttyUSB0 \
       --baud 115200 \
    -  write_flash 0x00000000 zig-out/bin/firmware.bin \
    +  write_flash 0x00000000 zig-out/firmware/blinky.bin \
       --verify
     picocom --baud 115200 /dev/ttyUSB0
    \ No newline at end of file
    
    From 2a0c0ff2814a716a163822211c2686d84801a97a Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20Quei=C3=9Fner?= 
    Date: Tue, 12 Sep 2023 23:06:26 +0200
    Subject: [PATCH 195/286] Implements proper support for different stage2
     bootloaders (#80)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Co-authored-by: Felix "xq" Queißner 
    ---
     README.adoc                              |    8 +
     build.zig                                |  153 ++-
     src/boards.zig                           |   64 +-
     src/boards/raspberry_pi_pico.zig         |   39 +-
     src/boards/shared/bootrom.zig            |   41 +
     src/boards/waveshare_rp2040_eth.zig      |    5 +
     src/boards/waveshare_rp2040_matrix.zig   |    5 +
     src/boards/waveshare_rp2040_plus_16m.zig |    5 +
     src/boards/waveshare_rp2040_plus_4m.zig  |    5 +
     src/bootroms/at25sf128a.S                |  278 ++++++
     src/bootroms/generic_03h.S               |   98 ++
     src/bootroms/is25lp080.S                 |  256 +++++
     src/bootroms/legacy.S                    |   26 +
     src/bootroms/shared/addressmap.h         |   73 ++
     src/bootroms/shared/asm_helper.S         |   41 +
     src/bootroms/shared/exit_from_boot2.S    |   28 +
     src/bootroms/shared/m0plus.h             | 1149 ++++++++++++++++++++++
     src/bootroms/shared/pads_qspi.h          |  454 +++++++++
     src/bootroms/shared/read_flash_sreg.S    |   30 +
     src/bootroms/shared/regs.h               |   11 +
     src/bootroms/shared/ssi.h                |  809 +++++++++++++++
     src/bootroms/shared/stage2.ld            |   31 +
     src/bootroms/shared/wait_ssi_ready.S     |   26 +
     src/bootroms/w25q080.S                   |  280 ++++++
     src/bootroms/w25x10cl.S                  |  191 ++++
     25 files changed, 4041 insertions(+), 65 deletions(-)
     create mode 100644 src/boards/shared/bootrom.zig
     create mode 100644 src/boards/waveshare_rp2040_eth.zig
     create mode 100644 src/boards/waveshare_rp2040_matrix.zig
     create mode 100644 src/boards/waveshare_rp2040_plus_16m.zig
     create mode 100644 src/boards/waveshare_rp2040_plus_4m.zig
     create mode 100644 src/bootroms/at25sf128a.S
     create mode 100644 src/bootroms/generic_03h.S
     create mode 100644 src/bootroms/is25lp080.S
     create mode 100644 src/bootroms/legacy.S
     create mode 100644 src/bootroms/shared/addressmap.h
     create mode 100644 src/bootroms/shared/asm_helper.S
     create mode 100644 src/bootroms/shared/exit_from_boot2.S
     create mode 100644 src/bootroms/shared/m0plus.h
     create mode 100644 src/bootroms/shared/pads_qspi.h
     create mode 100644 src/bootroms/shared/read_flash_sreg.S
     create mode 100644 src/bootroms/shared/regs.h
     create mode 100644 src/bootroms/shared/ssi.h
     create mode 100644 src/bootroms/shared/stage2.ld
     create mode 100644 src/bootroms/shared/wait_ssi_ready.S
     create mode 100644 src/bootroms/w25q080.S
     create mode 100644 src/bootroms/w25x10cl.S
    
    diff --git a/README.adoc b/README.adoc
    index 38c63c607..c31cb3dd8 100644
    --- a/README.adoc
    +++ b/README.adoc
    @@ -5,3 +5,11 @@ HAL and register definitions for the RP2040.
     == What version of Zig to use
     
     0.11.0
    +
    +== Supported devices ==
    +
    +- Raspberry Pi Pico
    +- (*experimental*) Waveshare RP2040-Plus (4M Flash)
    +- (*experimental*) Waveshare RP2040-Plus (16M Flash)
    +- (*experimental*) Waveshare RP2040-ETH Mini
    +- (*experimental*) Waveshare RP2040-Matrix
    diff --git a/build.zig b/build.zig
    index dacb22471..1d4dd3c58 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -1,43 +1,121 @@
     const std = @import("std");
    -const Builder = std.build.Builder;
    -const Pkg = std.build.Pkg;
    +const Build = std.Build;
     const comptimePrint = std.fmt.comptimePrint;
    -const LazyPath = std.build.LazyPath;
     
     const microzig = @import("microzig");
     
     pub const chips = @import("src/chips.zig");
     pub const boards = @import("src/boards.zig");
     
    -const linkerscript_path = root() ++ "rp2040.ld";
    +const build_root = root();
     
    -pub const BuildOptions = struct {
    -    optimize: std.builtin.OptimizeMode,
    +const linkerscript_path = build_root ++ "/rp2040.ld";
    +
    +pub const BootROM = union(enum) {
    +    artifact: *std.build.CompileStep, // provide a custom startup code
    +    blob: std.build.LazyPath, // just include a binary blob
    +
    +    // Pre-shipped ones:
    +    at25sf128a,
    +    generic_03h,
    +    is25lp080,
    +    w25q080,
    +    w25x10cl,
    +
    +    // Use the old stage2 bootloader vendored with MicroZig till 2023-09-13
    +    legacy,
     };
     
     pub const PicoExecutableOptions = struct {
         name: []const u8,
    -    source_file: LazyPath,
    +    source_file: std.Build.LazyPath,
         optimize: std.builtin.OptimizeMode = .Debug,
    +
    +    board: boards.Board = boards.raspberry_pi_pico,
    +
    +    bootrom: ?BootROM = null,
     };
     
    -pub fn addPiPicoExecutable(
    -    builder: *Builder,
    +pub const addPiPicoExecutable = addExecutable; // Deprecated, use addExecutable!
    +
    +pub const Stage2Bootloader = struct {
    +    bin: std.Build.LazyPath,
    +    elf: ?std.Build.LazyPath,
    +};
    +
    +pub fn getBootrom(b: *Build, rom: BootROM) Stage2Bootloader {
    +    const rom_exe = switch (rom) {
    +        .artifact => |artifact| artifact,
    +        .blob => |blob| return Stage2Bootloader{
    +            .bin = blob,
    +            .elf = null,
    +        },
    +
    +        else => blk: {
    +            var target = chips.rp2040.cpu.target;
    +            target.abi = .eabi;
    +
    +            const rom_path = b.pathFromRoot(b.fmt("{s}/src/bootroms/{s}.S", .{ build_root, @tagName(rom) }));
    +
    +            const rom_exe = b.addExecutable(.{
    +                .name = b.fmt("stage2-{s}", .{@tagName(rom)}),
    +                .optimize = .ReleaseSmall,
    +                .target = target,
    +                .root_source_file = null,
    +            });
    +            rom_exe.linkage = .static;
    +            // rom_exe.pie = false;
    +            // rom_exe.force_pic = false;
    +            rom_exe.setLinkerScript(.{ .path = build_root ++ "/src/bootroms/shared/stage2.ld" });
    +            rom_exe.addAssemblyFile(.{ .path = rom_path });
    +
    +            break :blk rom_exe;
    +        },
    +    };
    +
    +    const rom_objcopy = b.addObjCopy(rom_exe.getEmittedBin(), .{
    +        .basename = b.fmt("{s}.bin", .{@tagName(rom)}),
    +        .format = .bin,
    +    });
    +
    +    return Stage2Bootloader{
    +        .bin = rom_objcopy.getOutput(),
    +        .elf = rom_exe.getEmittedBin(),
    +    };
    +}
    +
    +pub fn addExecutable(
    +    b: *Build,
         opts: PicoExecutableOptions,
     ) *microzig.EmbeddedExecutable {
    -    return microzig.addEmbeddedExecutable(builder, .{
    +    var exe = microzig.addEmbeddedExecutable(b, .{
             .name = opts.name,
             .source_file = opts.source_file,
    -        .backing = .{ .board = boards.raspberry_pi_pico },
    +        .backing = .{ .board = opts.board.inner },
             .optimize = opts.optimize,
             .linkerscript_source_file = .{ .path = linkerscript_path },
         });
    +
    +    const i: *std.Build.CompileStep = exe.inner;
    +
    +    const bootrom_file = getBootrom(b, opts.bootrom orelse opts.board.bootrom);
    +
    +    // HACK: Inject the file as a dependency to MicroZig.board
    +    i.modules.get("microzig").?.dependencies.get("board").?.dependencies.put(
    +        "bootloader",
    +        b.createModule(.{
    +            .source_file = bootrom_file.bin,
    +        }),
    +    ) catch @panic("oom");
    +    bootrom_file.bin.addStepDependencies(&i.step);
    +
    +    return exe;
     }
     
     // this build script is mostly for testing and verification of this
     // package. In an attempt to modularize -- designing for a case where a
     // project requires multiple HALs, it accepts microzig as a param
    -pub fn build(b: *Builder) !void {
    +pub fn build(b: *Build) !void {
         const optimize = b.standardOptimizeOption(.{});
     
         const args_dep = b.dependency("args", .{});
    @@ -57,15 +135,40 @@ pub fn build(b: *Builder) !void {
         const test_step = b.step("test", "run unit tests");
         test_step.dependOn(&b.addRunArtifact(pio_tests).step);
     
    -    const flash_tool = b.addExecutable(.{
    -        .name = "rp2040-flash",
    -        .optimize = .Debug,
    -        .target = .{},
    -        .root_source_file = .{ .path = "tools/rp2040-flash.zig" },
    -    });
    -    flash_tool.addModule("args", args_mod);
    +    {
    +        const flash_tool = b.addExecutable(.{
    +            .name = "rp2040-flash",
    +            .optimize = .Debug,
    +            .target = .{},
    +            .root_source_file = .{ .path = "tools/rp2040-flash.zig" },
    +        });
    +        flash_tool.addModule("args", args_mod);
     
    -    b.installArtifact(flash_tool);
    +        b.installArtifact(flash_tool);
    +    }
    +
    +    // Install all bootroms for debugging and CI
    +    inline for (comptime std.enums.values(std.meta.Tag(BootROM))) |rom| {
    +        if (rom == .artifact or rom == .blob) {
    +            continue;
    +        }
    +
    +        if (rom == .is25lp080) {
    +            // TODO: https://github.com/ZigEmbeddedGroup/raspberrypi-rp2040/issues/79
    +            //  is25lp080.o:(text+0x16): has non-ABS relocation R_ARM_THM_CALL against symbol 'read_flash_sreg'
    +            continue;
    +        }
    +
    +        const files = getBootrom(b, rom);
    +        if (files.elf) |elf| {
    +            b.getInstallStep().dependOn(
    +                &b.addInstallFileWithDir(elf, .{ .custom = "stage2" }, b.fmt("{s}.elf", .{@tagName(rom)})).step,
    +            );
    +        }
    +        b.getInstallStep().dependOn(
    +            &b.addInstallFileWithDir(files.bin, .{ .custom = "stage2" }, b.fmt("{s}.bin", .{@tagName(rom)})).step,
    +        );
    +    }
     }
     
     fn root() []const u8 {
    @@ -89,12 +192,12 @@ pub const Examples = struct {
         ws2812: *microzig.EmbeddedExecutable,
         random: *microzig.EmbeddedExecutable,
     
    -    pub fn init(b: *Builder, optimize: std.builtin.OptimizeMode) Examples {
    +    pub fn init(b: *Build, optimize: std.builtin.OptimizeMode) Examples {
             var ret: Examples = undefined;
             inline for (@typeInfo(Examples).Struct.fields) |field| {
                 const path = comptime root() ++ "examples/" ++ field.name ++ ".zig";
     
    -            @field(ret, field.name) = addPiPicoExecutable(b, .{
    +            @field(ret, field.name) = addExecutable(b, .{
                     .name = field.name,
                     .source_file = .{ .path = path },
                     .optimize = optimize,
    @@ -104,9 +207,11 @@ pub const Examples = struct {
             return ret;
         }
     
    -    pub fn install(examples: *Examples, b: *Builder) void {
    +    pub fn install(examples: *Examples, b: *Build) void {
             inline for (@typeInfo(Examples).Struct.fields) |field| {
    -            b.installArtifact(@field(examples, field.name).inner);
    +            b.getInstallStep().dependOn(
    +                &b.addInstallFileWithDir(@field(examples, field.name).inner.getEmittedBin(), .{ .custom = "firmware" }, field.name ++ ".elf").step,
    +            );
             }
         }
     };
    diff --git a/src/boards.zig b/src/boards.zig
    index d2af0ee1e..8f68040ea 100644
    --- a/src/boards.zig
    +++ b/src/boards.zig
    @@ -1,15 +1,69 @@
     const std = @import("std");
     const microzig = @import("microzig");
    +const rp2040 = @import("../build.zig");
     const chips = @import("chips.zig");
     
     fn root_dir() []const u8 {
         return std.fs.path.dirname(@src().file) orelse ".";
     }
     
    -const board_path = std.fmt.comptimePrint("{s}/boards/raspberry_pi_pico.zig", .{root_dir()});
    +fn board_path(comptime path: []const u8) std.Build.LazyPath {
    +    return .{
    +        .path = std.fmt.comptimePrint("{s}/boards/{s}", .{ root_dir(), path }),
    +    };
    +}
    +
    +pub const Board = struct {
    +    inner: microzig.Board,
    +    bootrom: rp2040.BootROM,
    +};
    +
    +// https://www.raspberrypi.com/products/raspberry-pi-pico/
    +pub const raspberry_pi_pico = Board{
    +    .inner = .{
    +        .name = "Raspberry Pi Pico",
    +        .source = board_path("raspberry_pi_pico.zig"),
    +        .chip = chips.rp2040,
    +    },
    +    .bootrom = .w25q080,
    +};
    +
    +// https://www.waveshare.com/rp2040-plus.htm
    +pub const waveshare_rp2040_plus_4m = Board{
    +    .inner = .{
    +        .name = "Waveshare RP2040-Plus (4M Flash)",
    +        .source = board_path("waveshare_rp2040_plus_4m.zig"),
    +        .chip = chips.rp2040,
    +    },
    +    .bootrom = .w25q080,
    +};
    +
    +// https://www.waveshare.com/rp2040-plus.htm
    +pub const waveshare_rp2040_plus_16m = Board{
    +    .inner = .{
    +        .name = "Waveshare RP2040-Plus (16M Flash)",
    +        .source = board_path("waveshare_rp2040_plus_16m.zig"),
    +        .chip = chips.rp2040,
    +    },
    +    .bootrom = .w25q080,
    +};
    +
    +// https://www.waveshare.com/rp2040-eth.htm
    +pub const waveshare_rp2040_eth = Board{
    +    .inner = .{
    +        .name = "Waveshare RP2040-ETH Mini",
    +        .source = board_path("waveshare_rp2040_eth.zig"),
    +        .chip = chips.rp2040,
    +    },
    +    .bootrom = .w25q080,
    +};
     
    -pub const raspberry_pi_pico = microzig.Board{
    -    .name = "Raspberry Pi Pico",
    -    .source = .{ .path = board_path },
    -    .chip = chips.rp2040,
    +// https://www.waveshare.com/rp2040-matrix.htm
    +pub const waveshare_rp2040_matrix = Board{
    +    .inner = .{
    +        .name = "Waveshare RP2040-Matrix",
    +        .source = board_path("waveshare_rp2040_matrix.zig"),
    +        .chip = chips.rp2040,
    +    },
    +    .bootrom = .w25q080,
     };
    diff --git a/src/boards/raspberry_pi_pico.zig b/src/boards/raspberry_pi_pico.zig
    index ca1a9014d..79d848c29 100644
    --- a/src/boards/raspberry_pi_pico.zig
    +++ b/src/boards/raspberry_pi_pico.zig
    @@ -1,38 +1,5 @@
     pub const xosc_freq = 12_000_000;
     
    -// TODO: improve interface so that user can use a custom implementation and
    -// automatically checksum it.
    -pub export const _BOOT2: [256]u8 linksection(".boot2") = [_]u8{
    -    0x00, 0xb5, 0x32, 0x4b, 0x21, 0x20, 0x58, 0x60,
    -    0x98, 0x68, 0x02, 0x21, 0x88, 0x43, 0x98, 0x60,
    -    0xd8, 0x60, 0x18, 0x61, 0x58, 0x61, 0x2e, 0x4b,
    -    0x00, 0x21, 0x99, 0x60, 0x02, 0x21, 0x59, 0x61,
    -    0x01, 0x21, 0xf0, 0x22, 0x99, 0x50, 0x2b, 0x49,
    -    0x19, 0x60, 0x01, 0x21, 0x99, 0x60, 0x35, 0x20,
    -    0x00, 0xf0, 0x44, 0xf8, 0x02, 0x22, 0x90, 0x42,
    -    0x14, 0xd0, 0x06, 0x21, 0x19, 0x66, 0x00, 0xf0,
    -    0x34, 0xf8, 0x19, 0x6e, 0x01, 0x21, 0x19, 0x66,
    -    0x00, 0x20, 0x18, 0x66, 0x1a, 0x66, 0x00, 0xf0,
    -    0x2c, 0xf8, 0x19, 0x6e, 0x19, 0x6e, 0x19, 0x6e,
    -    0x05, 0x20, 0x00, 0xf0, 0x2f, 0xf8, 0x01, 0x21,
    -    0x08, 0x42, 0xf9, 0xd1, 0x00, 0x21, 0x99, 0x60,
    -    0x1b, 0x49, 0x19, 0x60, 0x00, 0x21, 0x59, 0x60,
    -    0x1a, 0x49, 0x1b, 0x48, 0x01, 0x60, 0x01, 0x21,
    -    0x99, 0x60, 0xeb, 0x21, 0x19, 0x66, 0xa0, 0x21,
    -    0x19, 0x66, 0x00, 0xf0, 0x12, 0xf8, 0x00, 0x21,
    -    0x99, 0x60, 0x16, 0x49, 0x14, 0x48, 0x01, 0x60,
    -    0x01, 0x21, 0x99, 0x60, 0x01, 0xbc, 0x00, 0x28,
    -    0x00, 0xd0, 0x00, 0x47, 0x12, 0x48, 0x13, 0x49,
    -    0x08, 0x60, 0x03, 0xc8, 0x80, 0xf3, 0x08, 0x88,
    -    0x08, 0x47, 0x03, 0xb5, 0x99, 0x6a, 0x04, 0x20,
    -    0x01, 0x42, 0xfb, 0xd0, 0x01, 0x20, 0x01, 0x42,
    -    0xf8, 0xd1, 0x03, 0xbd, 0x02, 0xb5, 0x18, 0x66,
    -    0x18, 0x66, 0xff, 0xf7, 0xf2, 0xff, 0x18, 0x6e,
    -    0x18, 0x6e, 0x02, 0xbd, 0x00, 0x00, 0x02, 0x40,
    -    0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x07, 0x00,
    -    0x00, 0x03, 0x5f, 0x00, 0x21, 0x22, 0x00, 0x00,
    -    0xf4, 0x00, 0x00, 0x18, 0x22, 0x20, 0x00, 0xa0,
    -    0x00, 0x01, 0x00, 0x10, 0x08, 0xed, 0x00, 0xe0,
    -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    -    0x00, 0x00, 0x00, 0x00, 0x74, 0xb2, 0x4e, 0x7a,
    -};
    +comptime {
    +    _ = @import("shared/bootrom.zig");
    +}
    diff --git a/src/boards/shared/bootrom.zig b/src/boards/shared/bootrom.zig
    new file mode 100644
    index 000000000..e6e32af6a
    --- /dev/null
    +++ b/src/boards/shared/bootrom.zig
    @@ -0,0 +1,41 @@
    +const std = @import("std");
    +
    +comptime {
    +    _ = stage2_bootloader;
    +}
    +
    +export const stage2_bootloader: [256]u8 linksection(".boot2") = prepareBootSector(
    +    @embedFile("bootloader"),
    +);
    +
    +/// Create a new 
    +fn prepareBootSector(comptime stage2_rom: []const u8) [256]u8 {
    +    @setEvalBranchQuota(10_000);
    +
    +    var bootrom: [256]u8 = .{0xFF} ** 256;
    +    @memcpy(bootrom[0..stage2_rom.len], stage2_rom);
    +
    +    // 2.8.1.3.1. Checksum
    +    // The last four bytes of the image loaded from flash (which we hope is a valid flash second stage) are a CRC32 checksum
    +    // of the first 252 bytes. The parameters of the checksum are:
    +    // • Polynomial: 0x04c11db7
    +    // • Input reflection: no
    +    // • Output reflection: no
    +    // • Initial value: 0xffffffff
    +    // • Final XOR: 0x00000000
    +    // • Checksum value appears as little-endian integer at end of image
    +    // The Bootrom makes 128 attempts of approximately 4ms each for a total of approximately 0.5 seconds before giving up
    +    // and dropping into USB code to load and checksum the second stage with varying SPI parameters. If it sees a checksum
    +    // pass it will immediately jump into the 252-byte payload which contains the flash second stage.
    +    const Hash = std.hash.crc.Crc(u32, .{
    +        .polynomial = 0x04c11db7,
    +        .initial = 0xffffffff,
    +        .reflect_input = false,
    +        .reflect_output = false,
    +        .xor_output = 0x00000000,
    +    });
    +
    +    std.mem.writeIntLittle(u32, bootrom[252..256], Hash.hash(bootrom[0..252]));
    +
    +    return bootrom;
    +}
    diff --git a/src/boards/waveshare_rp2040_eth.zig b/src/boards/waveshare_rp2040_eth.zig
    new file mode 100644
    index 000000000..79d848c29
    --- /dev/null
    +++ b/src/boards/waveshare_rp2040_eth.zig
    @@ -0,0 +1,5 @@
    +pub const xosc_freq = 12_000_000;
    +
    +comptime {
    +    _ = @import("shared/bootrom.zig");
    +}
    diff --git a/src/boards/waveshare_rp2040_matrix.zig b/src/boards/waveshare_rp2040_matrix.zig
    new file mode 100644
    index 000000000..79d848c29
    --- /dev/null
    +++ b/src/boards/waveshare_rp2040_matrix.zig
    @@ -0,0 +1,5 @@
    +pub const xosc_freq = 12_000_000;
    +
    +comptime {
    +    _ = @import("shared/bootrom.zig");
    +}
    diff --git a/src/boards/waveshare_rp2040_plus_16m.zig b/src/boards/waveshare_rp2040_plus_16m.zig
    new file mode 100644
    index 000000000..79d848c29
    --- /dev/null
    +++ b/src/boards/waveshare_rp2040_plus_16m.zig
    @@ -0,0 +1,5 @@
    +pub const xosc_freq = 12_000_000;
    +
    +comptime {
    +    _ = @import("shared/bootrom.zig");
    +}
    diff --git a/src/boards/waveshare_rp2040_plus_4m.zig b/src/boards/waveshare_rp2040_plus_4m.zig
    new file mode 100644
    index 000000000..79d848c29
    --- /dev/null
    +++ b/src/boards/waveshare_rp2040_plus_4m.zig
    @@ -0,0 +1,5 @@
    +pub const xosc_freq = 12_000_000;
    +
    +comptime {
    +    _ = @import("shared/bootrom.zig");
    +}
    diff --git a/src/bootroms/at25sf128a.S b/src/bootroms/at25sf128a.S
    new file mode 100644
    index 000000000..f8ecdc901
    --- /dev/null
    +++ b/src/bootroms/at25sf128a.S
    @@ -0,0 +1,278 @@
    +// ----------------------------------------------------------------------------
    +// Second stage boot code
    +// Copyright (c) 2019-2021 Raspberry Pi (Trading) Ltd.
    +// SPDX-License-Identifier: BSD-3-Clause
    +//
    +// Device:      Adesto AT25SF128A
    +//              Based on W25Q080 code: main difference is the QE bit is being set
    +//              via command 0x31
    +//
    +// Description: Configures AT25SF128A to run in Quad I/O continuous read XIP mode
    +//
    +// Details:     * Check status register 2 to determine if QSPI mode is enabled,
    +//                and perform an SR2 programming cycle if necessary.
    +//              * Use SSI to perform a dummy 0xEB read command, with the mode
    +//                continuation bits set, so that the flash will not require
    +//                0xEB instruction prefix on subsequent reads.
    +//              * Configure SSI to write address, mode bits, but no instruction.
    +//                SSI + flash are now jointly in a state where continuous reads
    +//                can take place.
    +//              * Jump to exit pointer passed in via lr. Bootrom passes null,
    +//                in which case this code uses a default 256 byte flash offset
    +//
    +// Building:    * This code must be position-independent, and use stack only
    +//              * The code will be padded to a size of 256 bytes, including a
    +//                4-byte checksum. Therefore code size cannot exceed 252 bytes.
    +// ----------------------------------------------------------------------------
    +
    +#include "shared/asm_helper.S"
    +#include "shared/regs.h"
    +
    +// ----------------------------------------------------------------------------
    +// Config section
    +// ----------------------------------------------------------------------------
    +// It should be possible to support most flash devices by modifying this section
    +
    +// The serial flash interface will run at clk_sys/PICO_FLASH_SPI_CLKDIV.
    +// This must be a positive, even integer.
    +// The bootrom is very conservative with SPI frequency, but here we should be
    +// as aggressive as possible.
    +
    +#ifndef PICO_FLASH_SPI_CLKDIV
    +#define PICO_FLASH_SPI_CLKDIV 4
    +#endif
    +#if PICO_FLASH_SPI_CLKDIV & 1
    +#error PICO_FLASH_SPI_CLKDIV must be even
    +#endif
    +
    +// Define interface width: single/dual/quad IO
    +#define FRAME_FORMAT SSI_CTRLR0_SPI_FRF_VALUE_QUAD
    +
    +// For W25Q080 this is the "Read data fast quad IO" instruction:
    +#define CMD_READ 0xeb
    +
    +// "Mode bits" are 8 special bits sent immediately after
    +// the address bits in a "Read Data Fast Quad I/O" command sequence. 
    +// On W25Q080, the four LSBs are don't care, and if MSBs == 0xa, the
    +// next read does not require the 0xeb instruction prefix.
    +#define MODE_CONTINUOUS_READ 0x20
    +
    +// The number of address + mode bits, divided by 4 (always 4, not function of
    +// interface width).
    +#define ADDR_L 8
    +
    +// How many clocks of Hi-Z following the mode bits. For W25Q080, 4 dummy cycles
    +// are required.
    +#define WAIT_CYCLES 4
    +
    +// If defined, we will read status reg, compare to SREG_DATA, and overwrite
    +// with our value if the SR doesn't match.
    +// We do a two-byte write to SR1 (01h cmd) rather than a one-byte write to
    +// SR2 (31h cmd) as the latter command isn't supported by WX25Q080.
    +// This isn't great because it will remove block protections.
    +// A better solution is to use a volatile SR write if your device supports it.
    +#define PROGRAM_STATUS_REG
    +
    +#define CMD_WRITE_ENABLE 0x06
    +#define CMD_READ_STATUS 0x05
    +#define CMD_READ_STATUS2 0x35
    +#define CMD_WRITE_STATUS 0x01
    +#define CMD_WRITE_STATUS2 0x31
    +#define SREG_DATA 0x02  // Enable quad-SPI mode
    +
    +// ----------------------------------------------------------------------------
    +// Start of 2nd Stage Boot Code
    +// ----------------------------------------------------------------------------
    +
    +pico_default_asm_setup
    +
    +.section .text
    +
    +// The exit point is passed in lr. If entered from bootrom, this will be the
    +// flash address immediately following this second stage (0x10000100).
    +// Otherwise it will be a return address -- second stage being called as a
    +// function by user code, after copying out of XIP region. r3 holds SSI base,
    +// r0...2 used as temporaries. Other GPRs not used.
    +regular_func _stage2_boot
    +    push {lr}
    +
    +    // Set pad configuration:
    +    // - SCLK 8mA drive, no slew limiting
    +    // - SDx disable input Schmitt to reduce delay
    +
    +    ldr r3, =PADS_QSPI_BASE
    +    movs r0, #(2 << PADS_QSPI_GPIO_QSPI_SCLK_DRIVE_LSB | PADS_QSPI_GPIO_QSPI_SCLK_SLEWFAST_BITS)
    +    str r0, [r3, #PADS_QSPI_GPIO_QSPI_SCLK_OFFSET]
    +    ldr r0, [r3, #PADS_QSPI_GPIO_QSPI_SD0_OFFSET]
    +    movs r1, #PADS_QSPI_GPIO_QSPI_SD0_SCHMITT_BITS
    +    bics r0, r1
    +    str r0, [r3, #PADS_QSPI_GPIO_QSPI_SD0_OFFSET]
    +    str r0, [r3, #PADS_QSPI_GPIO_QSPI_SD1_OFFSET]
    +    str r0, [r3, #PADS_QSPI_GPIO_QSPI_SD2_OFFSET]
    +    str r0, [r3, #PADS_QSPI_GPIO_QSPI_SD3_OFFSET]
    +
    +    ldr r3, =XIP_SSI_BASE
    +
    +    // Disable SSI to allow further config
    +    movs r1, #0
    +    str r1, [r3, #SSI_SSIENR_OFFSET]
    +
    +    // Set baud rate
    +    movs r1, #PICO_FLASH_SPI_CLKDIV
    +    str r1, [r3, #SSI_BAUDR_OFFSET]
    +
    +    // Set 1-cycle sample delay. If PICO_FLASH_SPI_CLKDIV == 2 then this means,
    +    // if the flash launches data on SCLK posedge, we capture it at the time that
    +    // the next SCLK posedge is launched. This is shortly before that posedge
    +    // arrives at the flash, so data hold time should be ok. For
    +    // PICO_FLASH_SPI_CLKDIV > 2 this pretty much has no effect.
    +
    +    movs r1, #1
    +    movs r2, #SSI_RX_SAMPLE_DLY_OFFSET  // == 0xf0 so need 8 bits of offset significance
    +    str r1, [r3, r2]
    +
    +
    +// On QSPI parts we usually need a 01h SR-write command to enable QSPI mode
    +// (i.e. turn WPn and HOLDn into IO2/IO3)
    +#ifdef PROGRAM_STATUS_REG
    +program_sregs:
    +#define CTRL0_SPI_TXRX \
    +    (7 << SSI_CTRLR0_DFS_32_LSB) | /* 8 bits per data frame */ \
    +    (SSI_CTRLR0_TMOD_VALUE_TX_AND_RX << SSI_CTRLR0_TMOD_LSB)
    +
    +    ldr r1, =(CTRL0_SPI_TXRX)
    +    str r1, [r3, #SSI_CTRLR0_OFFSET]
    +
    +     // Enable SSI and select slave 0
    +    movs r1, #1
    +    str r1, [r3, #SSI_SSIENR_OFFSET]
    +
    +    // Check whether SR needs updating
    +    movs r0, #CMD_READ_STATUS2
    +    bl read_flash_sreg
    +    movs r2, #SREG_DATA
    +    cmp r0, r2
    +    beq skip_sreg_programming
    +
    +    // Send write enable command
    +    movs r1, #CMD_WRITE_ENABLE
    +    str r1, [r3, #SSI_DR0_OFFSET]
    +
    +    // Poll for completion and discard RX
    +    bl wait_ssi_ready
    +    ldr r1, [r3, #SSI_DR0_OFFSET]
    +
    +    // Send status write command followed by data bytes
    +    movs r1, #CMD_WRITE_STATUS2
    +    str r1, [r3, #SSI_DR0_OFFSET]
    +    str r2, [r3, #SSI_DR0_OFFSET]
    +
    +    bl wait_ssi_ready
    +    ldr r1, [r3, #SSI_DR0_OFFSET]
    +    ldr r1, [r3, #SSI_DR0_OFFSET]
    +    ldr r1, [r3, #SSI_DR0_OFFSET]
    +
    +    // Poll status register for write completion
    +1:
    +    movs r0, #CMD_READ_STATUS
    +    bl read_flash_sreg
    +    movs r1, #1
    +    tst r0, r1
    +    bne 1b
    +
    +skip_sreg_programming:
    +
    +    // Disable SSI again so that it can be reconfigured
    +    movs r1, #0
    +    str r1, [r3, #SSI_SSIENR_OFFSET]
    +#endif
    +
    +// Currently the flash expects an 8 bit serial command prefix on every
    +// transfer, which is a waste of cycles. Perform a dummy Fast Read Quad I/O
    +// command, with mode bits set such that the flash will not expect a serial
    +// command prefix on *subsequent* transfers. We don't care about the results
    +// of the read, the important part is the mode bits.
    +
    +dummy_read:
    +#define CTRLR0_ENTER_XIP \
    +    (FRAME_FORMAT                          /* Quad I/O mode */                \
    +        << SSI_CTRLR0_SPI_FRF_LSB) |                                          \
    +    (31 << SSI_CTRLR0_DFS_32_LSB)  |       /* 32 data bits */                 \
    +    (SSI_CTRLR0_TMOD_VALUE_EEPROM_READ     /* Send INST/ADDR, Receive Data */ \
    +        << SSI_CTRLR0_TMOD_LSB)
    +
    +    ldr r1, =(CTRLR0_ENTER_XIP)
    +    str r1, [r3, #SSI_CTRLR0_OFFSET]
    +
    +    movs r1, #0x0                    // NDF=0 (single 32b read)
    +    str r1, [r3, #SSI_CTRLR1_OFFSET]
    +
    +#define SPI_CTRLR0_ENTER_XIP \
    +    (ADDR_L << SSI_SPI_CTRLR0_ADDR_L_LSB) |     /* Address + mode bits */ \
    +    (WAIT_CYCLES << SSI_SPI_CTRLR0_WAIT_CYCLES_LSB) | /* Hi-Z dummy clocks following address + mode */ \
    +    (SSI_SPI_CTRLR0_INST_L_VALUE_8B \
    +        << SSI_SPI_CTRLR0_INST_L_LSB) |        /* 8-bit instruction */ \
    +    (SSI_SPI_CTRLR0_TRANS_TYPE_VALUE_1C2A      /* Send Command in serial mode then address in Quad I/O mode */ \
    +        << SSI_SPI_CTRLR0_TRANS_TYPE_LSB)
    +
    +    ldr r1, =(SPI_CTRLR0_ENTER_XIP)
    +    ldr r0, =(XIP_SSI_BASE + SSI_SPI_CTRLR0_OFFSET)  // SPI_CTRL0 Register
    +    str r1, [r0]
    +
    +    movs r1, #1                      // Re-enable SSI
    +    str r1, [r3, #SSI_SSIENR_OFFSET]
    +
    +    movs r1, #CMD_READ
    +    str r1, [r3, #SSI_DR0_OFFSET]   // Push SPI command into TX FIFO
    +    movs r1, #MODE_CONTINUOUS_READ   // 32-bit: 24 address bits (we don't care, so 0) and M[7:4]=1010
    +    str r1, [r3, #SSI_DR0_OFFSET]   // Push Address into TX FIFO - this will trigger the transaction
    +
    +    // Poll for completion
    +    bl wait_ssi_ready
    +
    +// The flash is in a state where we can blast addresses in parallel, and get
    +// parallel data back. Now configure the SSI to translate XIP bus accesses
    +// into QSPI transfers of this form.
    +
    +    movs r1, #0
    +    str r1, [r3, #SSI_SSIENR_OFFSET]   // Disable SSI (and clear FIFO) to allow further config
    +
    +// Note that the INST_L field is used to select what XIP data gets pushed into
    +// the TX FIFO:
    +//      INST_L_0_BITS   {ADDR[23:0],XIP_CMD[7:0]}       Load "mode bits" into XIP_CMD
    +//      Anything else   {XIP_CMD[7:0],ADDR[23:0]}       Load SPI command into XIP_CMD
    +configure_ssi:
    +#define SPI_CTRLR0_XIP \
    +    (MODE_CONTINUOUS_READ                      /* Mode bits to keep flash in continuous read mode */ \
    +        << SSI_SPI_CTRLR0_XIP_CMD_LSB) | \
    +    (ADDR_L << SSI_SPI_CTRLR0_ADDR_L_LSB) |    /* Total number of address + mode bits */ \
    +    (WAIT_CYCLES << SSI_SPI_CTRLR0_WAIT_CYCLES_LSB) |    /* Hi-Z dummy clocks following address + mode */ \
    +    (SSI_SPI_CTRLR0_INST_L_VALUE_NONE          /* Do not send a command, instead send XIP_CMD as mode bits after address */ \
    +        << SSI_SPI_CTRLR0_INST_L_LSB) | \
    +    (SSI_SPI_CTRLR0_TRANS_TYPE_VALUE_2C2A      /* Send Address in Quad I/O mode (and Command but that is zero bits long) */ \
    +        << SSI_SPI_CTRLR0_TRANS_TYPE_LSB)
    +
    +    ldr r1, =(SPI_CTRLR0_XIP)
    +    ldr r0, =(XIP_SSI_BASE + SSI_SPI_CTRLR0_OFFSET)
    +    str r1, [r0]
    +
    +    movs r1, #1
    +    str r1, [r3, #SSI_SSIENR_OFFSET]   // Re-enable SSI
    +
    +// Bus accesses to the XIP window will now be transparently serviced by the
    +// external flash on cache miss. We are ready to run code from flash.
    +
    +// Pull in standard exit routine
    +#include "shared/exit_from_boot2.S"
    +
    +// Common functions
    +#include "shared/wait_ssi_ready.S"
    +#ifdef PROGRAM_STATUS_REG
    +#include "shared/read_flash_sreg.S"
    +#endif
    +
    +.global literals
    +literals:
    +.ltorg
    +
    +.end
    diff --git a/src/bootroms/generic_03h.S b/src/bootroms/generic_03h.S
    new file mode 100644
    index 000000000..1599c7b04
    --- /dev/null
    +++ b/src/bootroms/generic_03h.S
    @@ -0,0 +1,98 @@
    +// ----------------------------------------------------------------------------
    +// Second stage boot code
    +// Copyright (c) 2019-2021 Raspberry Pi (Trading) Ltd.
    +// SPDX-License-Identifier: BSD-3-Clause
    +//
    +// Device:      Anything which responds to 03h serial read command
    +//
    +// Details:     * Configure SSI to translate each APB read into a 03h command
    +//              * 8 command clocks, 24 address clocks and 32 data clocks
    +//              * This enables you to boot from almost anything: you can pretty
    +//                much solder a potato to your PCB, or a piece of cheese
    +//              * The tradeoff is performance around 3x worse than QSPI XIP
    +//
    +// Building:    * This code must be position-independent, and use stack only
    +//              * The code will be padded to a size of 256 bytes, including a
    +//                4-byte checksum. Therefore code size cannot exceed 252 bytes.
    +// ----------------------------------------------------------------------------
    +
    +#include "shared/asm_helper.S"
    +#include "shared/regs.h"
    +
    +pico_default_asm_setup
    +
    +// ----------------------------------------------------------------------------
    +// Config section
    +// ----------------------------------------------------------------------------
    +// It should be possible to support most flash devices by modifying this section
    +
    +// The serial flash interface will run at clk_sys/PICO_FLASH_SPI_CLKDIV.
    +// This must be a positive, even integer.
    +// The bootrom is very conservative with SPI frequency, but here we should be
    +// as aggressive as possible.
    +#ifndef PICO_FLASH_SPI_CLKDIV
    +#define PICO_FLASH_SPI_CLKDIV 4
    +#endif
    +
    +#define CMD_READ 0x03
    +
    +// Value is number of address bits divided by 4
    +#define ADDR_L 6
    +
    +#define CTRLR0_XIP \
    +    (SSI_CTRLR0_SPI_FRF_VALUE_STD << SSI_CTRLR0_SPI_FRF_LSB) |  /* Standard 1-bit SPI serial frames */ \
    +    (31 << SSI_CTRLR0_DFS_32_LSB)  |                            /* 32 clocks per data frame */ \
    +    (SSI_CTRLR0_TMOD_VALUE_EEPROM_READ  << SSI_CTRLR0_TMOD_LSB) /* Send instr + addr, receive data */
    +
    +#define SPI_CTRLR0_XIP \
    +    (CMD_READ << SSI_SPI_CTRLR0_XIP_CMD_LSB) |        /* Value of instruction prefix */ \
    +    (ADDR_L << SSI_SPI_CTRLR0_ADDR_L_LSB) |           /* Total number of address + mode bits */ \
    +    (2 << SSI_SPI_CTRLR0_INST_L_LSB) |                /* 8 bit command prefix (field value is bits divided by 4) */ \
    +    (SSI_SPI_CTRLR0_TRANS_TYPE_VALUE_1C1A << SSI_SPI_CTRLR0_TRANS_TYPE_LSB) /* command and address both in serial format */
    +
    +// ----------------------------------------------------------------------------
    +// Start of 2nd Stage Boot Code
    +// ----------------------------------------------------------------------------
    +
    +.section .text
    +
    +regular_func _stage2_boot
    +    push {lr}
    +
    +    ldr r3, =XIP_SSI_BASE                // Use as base address where possible
    +
    +    // Disable SSI to allow further config
    +    movs r1, #0
    +    str r1, [r3, #SSI_SSIENR_OFFSET]
    +
    +    // Set baud rate
    +    movs r1, #PICO_FLASH_SPI_CLKDIV
    +    str r1, [r3, #SSI_BAUDR_OFFSET]
    +
    +    ldr r1, =(CTRLR0_XIP)
    +    str r1, [r3, #SSI_CTRLR0_OFFSET]
    +
    +    ldr r1, =(SPI_CTRLR0_XIP)
    +    ldr r0, =(XIP_SSI_BASE + SSI_SPI_CTRLR0_OFFSET)
    +    str r1, [r0]
    +
    +    // NDF=0 (single 32b read)
    +    movs r1, #0x0
    +    str r1, [r3, #SSI_CTRLR1_OFFSET]
    +
    +    // Re-enable SSI
    +    movs r1, #1
    +    str r1, [r3, #SSI_SSIENR_OFFSET]
    +
    +// We are now in XIP mode. Any bus accesses to the XIP address window will be
    +// translated by the SSI into 03h read commands to the external flash (if cache is missed),
    +// and the data will be returned to the bus.
    +
    +// Pull in standard exit routine
    +#include "shared/exit_from_boot2.S"
    +
    +.global literals
    +literals:
    +.ltorg
    +
    +.end
    diff --git a/src/bootroms/is25lp080.S b/src/bootroms/is25lp080.S
    new file mode 100644
    index 000000000..46f8c85a4
    --- /dev/null
    +++ b/src/bootroms/is25lp080.S
    @@ -0,0 +1,256 @@
    +// ----------------------------------------------------------------------------
    +// Copyright (c) 2019-2021 Raspberry Pi (Trading) Ltd.
    +// SPDX-License-Identifier: BSD-3-Clause
    +//
    +// Device:      ISSI IS25LP080D
    +//              Based on W25Q080 code: main difference is the QE bit being in
    +//              SR1 instead of SR2.
    +//
    +// Description: Configures IS25LP080D to run in Quad I/O continuous read XIP mode
    +//
    +// Details:     * Check status register to determine if QSPI mode is enabled,
    +//                and perform an SR programming cycle if necessary.
    +//              * Use SSI to perform a dummy 0xEB read command, with the mode
    +//                continuation bits set, so that the flash will not require
    +//                0xEB instruction prefix on subsequent reads.
    +//              * Configure SSI to write address, mode bits, but no instruction.
    +//                SSI + flash are now jointly in a state where continuous reads
    +//                can take place.
    +//              * Set VTOR = 0x10000100 (user vector table immediately after
    +//                this boot2 image).
    +//              * Read stack pointer (MSP) and reset vector from the flash
    +//                vector table; set SP and jump, as though the processor had
    +//                booted directly from flash.
    +//
    +// Building:    * This code must be linked to run at 0x20027f00
    +//              * The code will be padded to a size of 256 bytes, including a
    +//                4-byte checksum. Therefore code size cannot exceed 252 bytes.
    +// ----------------------------------------------------------------------------
    +
    +#include "shared/asm_helper.S"
    +#include "shared/regs.h"
    +
    +// ----------------------------------------------------------------------------
    +// Config section
    +// ----------------------------------------------------------------------------
    +// It should be possible to support most flash devices by modifying this section
    +
    +// The serial flash interface will run at clk_sys/PICO_FLASH_SPI_CLKDIV.
    +// This must be a positive, even integer.
    +// The bootrom is very conservative with SPI frequency, but here we should be
    +// as aggressive as possible.
    +#ifndef PICO_FLASH_SPI_CLKDIV
    +#define PICO_FLASH_SPI_CLKDIV 4
    +#endif
    +
    +
    +// Define interface width: single/dual/quad IO
    +#define FRAME_FORMAT SSI_CTRLR0_SPI_FRF_VALUE_QUAD
    +
    +// For W25Q080 this is the "Read data fast quad IO" instruction:
    +#define CMD_READ 0xeb
    +
    +// "Mode bits" are 8 special bits sent immediately after
    +// the address bits in a "Read Data Fast Quad I/O" command sequence. 
    +// On W25Q080, the four LSBs are don't care, and if MSBs == 0xa, the
    +// next read does not require the 0xeb instruction prefix.
    +#define MODE_CONTINUOUS_READ 0xa0
    +
    +// The number of address + mode bits, divided by 4 (always 4, not function of
    +// interface width).
    +#define ADDR_L 8
    +
    +// How many clocks of Hi-Z following the mode bits. For W25Q080, 4 dummy cycles
    +// are required.
    +#define WAIT_CYCLES 4
    +
    +// If defined, we will read status reg, compare to SREG_DATA, and overwrite
    +// with our value if the SR doesn't match.
    +// This isn't great because it will remove block protections.
    +// A better solution is to use a volatile SR write if your device supports it.
    +#define PROGRAM_STATUS_REG
    +
    +#define CMD_WRITE_ENABLE 0x06
    +#define CMD_READ_STATUS 0x05
    +#define CMD_WRITE_STATUS 0x01
    +#define SREG_DATA 0x40  // Enable quad-SPI mode
    +
    +// ----------------------------------------------------------------------------
    +// Start of 2nd Stage Boot Code
    +// ----------------------------------------------------------------------------
    +
    +pico_default_asm_setup
    +
    +.section text
    +regular_func _stage2_boot
    +    push {lr}
    +
    +    ldr r3, =XIP_SSI_BASE                // Use as base address where possible
    +
    +    // Disable SSI to allow further config
    +    movs r1, #0
    +    str r1, [r3, #SSI_SSIENR_OFFSET]
    +
    +    // Set baud rate
    +    movs r1, #PICO_FLASH_SPI_CLKDIV
    +    str r1, [r3, #SSI_BAUDR_OFFSET]
    +
    +// On QSPI parts we usually need a 01h SR-write command to enable QSPI mode
    +// (i.e. turn WPn and HOLDn into IO2/IO3)
    +#ifdef PROGRAM_STATUS_REG
    +program_sregs:
    +#define CTRL0_SPI_TXRX \
    +    (7 << SSI_CTRLR0_DFS_32_LSB) | /* 8 bits per data frame */ \
    +    (SSI_CTRLR0_TMOD_VALUE_TX_AND_RX << SSI_CTRLR0_TMOD_LSB)
    +
    +    ldr r1, =(CTRL0_SPI_TXRX)
    +    str r1, [r3, #SSI_CTRLR0_OFFSET]
    +
    +     // Enable SSI and select slave 0
    +    movs r1, #1
    +    str r1, [r3, #SSI_SSIENR_OFFSET]
    +
    +    // Check whether SR needs updating
    +    ldr r0, =CMD_READ_STATUS
    +    bl read_flash_sreg
    +    ldr r2, =SREG_DATA
    +    cmp r0, r2
    +    beq skip_sreg_programming
    +
    +    // Send write enable command
    +    movs r1, #CMD_WRITE_ENABLE
    +    str r1, [r3, #SSI_DR0_OFFSET]
    +
    +    // Poll for completion and discard RX
    +    bl wait_ssi_ready
    +    ldr r1, [r3, #SSI_DR0_OFFSET]
    +
    +    // Send status write command followed by data bytes
    +    movs r1, #CMD_WRITE_STATUS
    +    str r1, [r3, #SSI_DR0_OFFSET]
    +    movs r0, #0
    +    str r2, [r3, #SSI_DR0_OFFSET]
    +
    +    bl wait_ssi_ready
    +    ldr r1, [r3, #SSI_DR0_OFFSET]
    +    ldr r1, [r3, #SSI_DR0_OFFSET]
    +
    +    // Poll status register for write completion
    +1:
    +    ldr r0, =CMD_READ_STATUS
    +    bl read_flash_sreg
    +    movs r1, #1
    +    tst r0, r1
    +    bne 1b
    +
    +skip_sreg_programming:
    +
    +    // Send a 0xA3 high-performance-mode instruction
    +//    ldr r1, =0xa3
    +//    str r1, [r3, #SSI_DR0_OFFSET]
    +//    bl wait_ssi_ready
    +
    +    // Disable SSI again so that it can be reconfigured
    +    movs r1, #0
    +    str r1, [r3, #SSI_SSIENR_OFFSET]
    +#endif
    +
    +
    +// First we need to send the initial command to get us in to Fast Read Quad I/O
    +// mode.  As this transaction requires a command, we can't send it in XIP mode.
    +// To enter Continuous Read mode as well we need to append 4'b0010 to the address
    +// bits and then add a further 4 don't care bits.  We will construct this by
    +// specifying a 28-bit address, with the least significant bits being 4'b0010.
    +// This is just a dummy transaction so we'll perform a read from address zero
    +// and then discard what comes back.  All we really care about is that at the
    +// end of the transaction, the flash device is in Continuous Read mode
    +// and from then on will only expect to receive addresses.
    +dummy_read:
    +#define CTRLR0_ENTER_XIP \
    +    (FRAME_FORMAT                          /* Quad I/O mode */                \
    +        << SSI_CTRLR0_SPI_FRF_LSB) |                                          \
    +    (31 << SSI_CTRLR0_DFS_32_LSB)  |       /* 32 data bits */                 \
    +    (SSI_CTRLR0_TMOD_VALUE_EEPROM_READ     /* Send INST/ADDR, Receive Data */ \
    +        << SSI_CTRLR0_TMOD_LSB)
    +
    +    ldr r1, =(CTRLR0_ENTER_XIP)
    +    str r1, [r3, #SSI_CTRLR0_OFFSET]
    +
    +    movs r1, #0x0                   // NDF=0 (single 32b read)
    +    str r1, [r3, #SSI_CTRLR1_OFFSET]
    +
    +#define SPI_CTRLR0_ENTER_XIP \
    +    (ADDR_L << SSI_SPI_CTRLR0_ADDR_L_LSB) |     /* Address + mode bits */ \
    +    (WAIT_CYCLES << SSI_SPI_CTRLR0_WAIT_CYCLES_LSB) | /* Hi-Z dummy clocks following address + mode */ \
    +    (SSI_SPI_CTRLR0_INST_L_VALUE_8B \
    +        << SSI_SPI_CTRLR0_INST_L_LSB) |        /* 8-bit instruction */ \
    +    (SSI_SPI_CTRLR0_TRANS_TYPE_VALUE_1C2A      /* Send Command in serial mode then address in Quad I/O mode */ \
    +        << SSI_SPI_CTRLR0_TRANS_TYPE_LSB)
    +
    +    ldr r1, =(SPI_CTRLR0_ENTER_XIP)
    +    ldr r0, =(XIP_SSI_BASE + SSI_SPI_CTRLR0_OFFSET)  // SPI_CTRL0 Register
    +    str r1, [r0]
    +
    +    movs r1, #1                     // Re-enable SSI
    +    str r1, [r3, #SSI_SSIENR_OFFSET]
    +
    +    movs r1, #CMD_READ
    +    str r1, [r3, #SSI_DR0_OFFSET]   // Push SPI command into TX FIFO
    +    movs r1, #MODE_CONTINUOUS_READ  // 32-bit: 24 address bits (we don't care, so 0) and M[7:4]=1010
    +    str r1, [r3, #SSI_DR0_OFFSET]   // Push Address into TX FIFO - this will trigger the transaction
    +
    +    // Poll for completion
    +    bl wait_ssi_ready
    +
    +// At this point CN# will be deasserted and the SPI clock will not be running.
    +// The Winbond WX25X10CL device will be in continuous read, dual I/O mode and
    +// only expecting address bits after the next CN# assertion.  So long as we
    +// send 4'b0010 (and 4 more dummy HiZ bits) after every subsequent 24b address
    +// then the Winbond device will remain in continuous read mode.  This is the
    +// ideal mode for Execute-In-Place.
    +// (If we want to exit continuous read mode then we will need to switch back
    +// to APM mode and generate a 28-bit address phase with the extra nibble set
    +// to 4'b0000).
    +
    +    movs r1, #0
    +    str r1, [r3, #SSI_SSIENR_OFFSET]   // Disable SSI (and clear FIFO) to allow further config
    +
    +// Note that the INST_L field is used to select what XIP data gets pushed into
    +// the TX FIFO:
    +//      INST_L_0_BITS   {ADDR[23:0],XIP_CMD[7:0]}       Load "mode bits" into XIP_CMD
    +//      Anything else   {XIP_CMD[7:0],ADDR[23:0]}       Load SPI command into XIP_CMD
    +configure_ssi:
    +#define SPI_CTRLR0_XIP \
    +    (MODE_CONTINUOUS_READ                      /* Mode bits to keep flash in continuous read mode */ \
    +        << SSI_SPI_CTRLR0_XIP_CMD_LSB) | \
    +    (ADDR_L << SSI_SPI_CTRLR0_ADDR_L_LSB) |    /* Total number of address + mode bits */ \
    +    (WAIT_CYCLES << SSI_SPI_CTRLR0_WAIT_CYCLES_LSB) |    /* Hi-Z dummy clocks following address + mode */ \
    +    (SSI_SPI_CTRLR0_INST_L_VALUE_NONE          /* Do not send a command, instead send XIP_CMD as mode bits after address */ \
    +        << SSI_SPI_CTRLR0_INST_L_LSB) | \
    +    (SSI_SPI_CTRLR0_TRANS_TYPE_VALUE_2C2A      /* Send Address in Quad I/O mode (and Command but that is zero bits long) */ \
    +        << SSI_SPI_CTRLR0_TRANS_TYPE_LSB)
    +
    +    ldr r1, =(SPI_CTRLR0_XIP)
    +    ldr r0, =(XIP_SSI_BASE + SSI_SPI_CTRLR0_OFFSET)
    +    str r1, [r0]
    +
    +    movs r1, #1
    +    str r1, [r3, #SSI_SSIENR_OFFSET]   // Re-enable SSI
    +
    +// We are now in XIP mode, with all transactions using Dual I/O and only
    +// needing to send 24-bit addresses (plus mode bits) for each read transaction.
    +
    +// Pull in standard exit routine
    +#include "shared/exit_from_boot2.S"
    +
    +// Common functions
    +#include "shared/wait_ssi_ready.S"
    +#ifdef PROGRAM_STATUS_REG
    +#include "shared/read_flash_sreg.S"
    +#endif
    +
    +.global literals
    +literals:
    +.ltorg
    +
    +.end
    diff --git a/src/bootroms/legacy.S b/src/bootroms/legacy.S
    new file mode 100644
    index 000000000..b2870c5e0
    --- /dev/null
    +++ b/src/bootroms/legacy.S
    @@ -0,0 +1,26 @@
    +
    +// This is the legacy blob we used to ship in 
    +// src/boards/raspberry_pi_pico.zig
    +// Now it's generic over all boards we have.
    +
    +.text
    +.global _stage2_boot
    +_stage2_boot:
    +.byte 0x00, 0xb5, 0x32, 0x4b, 0x21, 0x20, 0x58, 0x60, 0x98, 0x68, 0x02, 0x21, 0x88, 0x43, 0x98, 0x60
    +.byte 0xd8, 0x60, 0x18, 0x61, 0x58, 0x61, 0x2e, 0x4b, 0x00, 0x21, 0x99, 0x60, 0x02, 0x21, 0x59, 0x61
    +.byte 0x01, 0x21, 0xf0, 0x22, 0x99, 0x50, 0x2b, 0x49, 0x19, 0x60, 0x01, 0x21, 0x99, 0x60, 0x35, 0x20
    +.byte 0x00, 0xf0, 0x44, 0xf8, 0x02, 0x22, 0x90, 0x42, 0x14, 0xd0, 0x06, 0x21, 0x19, 0x66, 0x00, 0xf0
    +.byte 0x34, 0xf8, 0x19, 0x6e, 0x01, 0x21, 0x19, 0x66, 0x00, 0x20, 0x18, 0x66, 0x1a, 0x66, 0x00, 0xf0
    +.byte 0x2c, 0xf8, 0x19, 0x6e, 0x19, 0x6e, 0x19, 0x6e, 0x05, 0x20, 0x00, 0xf0, 0x2f, 0xf8, 0x01, 0x21
    +.byte 0x08, 0x42, 0xf9, 0xd1, 0x00, 0x21, 0x99, 0x60, 0x1b, 0x49, 0x19, 0x60, 0x00, 0x21, 0x59, 0x60
    +.byte 0x1a, 0x49, 0x1b, 0x48, 0x01, 0x60, 0x01, 0x21, 0x99, 0x60, 0xeb, 0x21, 0x19, 0x66, 0xa0, 0x21
    +.byte 0x19, 0x66, 0x00, 0xf0, 0x12, 0xf8, 0x00, 0x21, 0x99, 0x60, 0x16, 0x49, 0x14, 0x48, 0x01, 0x60
    +.byte 0x01, 0x21, 0x99, 0x60, 0x01, 0xbc, 0x00, 0x28, 0x00, 0xd0, 0x00, 0x47, 0x12, 0x48, 0x13, 0x49
    +.byte 0x08, 0x60, 0x03, 0xc8, 0x80, 0xf3, 0x08, 0x88, 0x08, 0x47, 0x03, 0xb5, 0x99, 0x6a, 0x04, 0x20
    +.byte 0x01, 0x42, 0xfb, 0xd0, 0x01, 0x20, 0x01, 0x42, 0xf8, 0xd1, 0x03, 0xbd, 0x02, 0xb5, 0x18, 0x66
    +.byte 0x18, 0x66, 0xff, 0xf7, 0xf2, 0xff, 0x18, 0x6e, 0x18, 0x6e, 0x02, 0xbd, 0x00, 0x00, 0x02, 0x40
    +.byte 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x07, 0x00, 0x00, 0x03, 0x5f, 0x00, 0x21, 0x22, 0x00, 0x00
    +.byte 0xf4, 0x00, 0x00, 0x18, 0x22, 0x20, 0x00, 0xa0, 0x00, 0x01, 0x00, 0x10, 0x08, 0xed, 0x00, 0xe0
    +.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0xb2, 0x4e, 0x7a 
    +
    +// last four bytes are checksum, also computed by microzig when embedding the bootrom.
    diff --git a/src/bootroms/shared/addressmap.h b/src/bootroms/shared/addressmap.h
    new file mode 100644
    index 000000000..e8c5b4918
    --- /dev/null
    +++ b/src/bootroms/shared/addressmap.h
    @@ -0,0 +1,73 @@
    +/**
    + * Copyright (c) 2021 Raspberry Pi (Trading) Ltd.
    + *
    + * SPDX-License-Identifier: BSD-3-Clause
    + */
    +#ifndef _ADDRESSMAP_H_
    +#define _ADDRESSMAP_H_
    +
    +
    +// Register address offsets for atomic RMW aliases
    +#define REG_ALIAS_RW_BITS  (0x0u << 12u)
    +#define REG_ALIAS_XOR_BITS (0x1u << 12u)
    +#define REG_ALIAS_SET_BITS (0x2u << 12u)
    +#define REG_ALIAS_CLR_BITS (0x3u << 12u)
    +
    +#define ROM_BASE _u(0x00000000)
    +#define XIP_BASE _u(0x10000000)
    +#define XIP_MAIN_BASE _u(0x10000000)
    +#define XIP_NOALLOC_BASE _u(0x11000000)
    +#define XIP_NOCACHE_BASE _u(0x12000000)
    +#define XIP_NOCACHE_NOALLOC_BASE _u(0x13000000)
    +#define XIP_CTRL_BASE _u(0x14000000)
    +#define XIP_SRAM_BASE _u(0x15000000)
    +#define XIP_SRAM_END _u(0x15004000)
    +#define XIP_SSI_BASE _u(0x18000000)
    +#define SRAM_BASE _u(0x20000000)
    +#define SRAM_STRIPED_BASE _u(0x20000000)
    +#define SRAM_STRIPED_END _u(0x20040000)
    +#define SRAM4_BASE _u(0x20040000)
    +#define SRAM5_BASE _u(0x20041000)
    +#define SRAM_END _u(0x20042000)
    +#define SRAM0_BASE _u(0x21000000)
    +#define SRAM1_BASE _u(0x21010000)
    +#define SRAM2_BASE _u(0x21020000)
    +#define SRAM3_BASE _u(0x21030000)
    +#define SYSINFO_BASE _u(0x40000000)
    +#define SYSCFG_BASE _u(0x40004000)
    +#define CLOCKS_BASE _u(0x40008000)
    +#define RESETS_BASE _u(0x4000c000)
    +#define PSM_BASE _u(0x40010000)
    +#define IO_BANK0_BASE _u(0x40014000)
    +#define IO_QSPI_BASE _u(0x40018000)
    +#define PADS_BANK0_BASE _u(0x4001c000)
    +#define PADS_QSPI_BASE _u(0x40020000)
    +#define XOSC_BASE _u(0x40024000)
    +#define PLL_SYS_BASE _u(0x40028000)
    +#define PLL_USB_BASE _u(0x4002c000)
    +#define BUSCTRL_BASE _u(0x40030000)
    +#define UART0_BASE _u(0x40034000)
    +#define UART1_BASE _u(0x40038000)
    +#define SPI0_BASE _u(0x4003c000)
    +#define SPI1_BASE _u(0x40040000)
    +#define I2C0_BASE _u(0x40044000)
    +#define I2C1_BASE _u(0x40048000)
    +#define ADC_BASE _u(0x4004c000)
    +#define PWM_BASE _u(0x40050000)
    +#define TIMER_BASE _u(0x40054000)
    +#define WATCHDOG_BASE _u(0x40058000)
    +#define RTC_BASE _u(0x4005c000)
    +#define ROSC_BASE _u(0x40060000)
    +#define VREG_AND_CHIP_RESET_BASE _u(0x40064000)
    +#define TBMAN_BASE _u(0x4006c000)
    +#define DMA_BASE _u(0x50000000)
    +#define USBCTRL_DPRAM_BASE _u(0x50100000)
    +#define USBCTRL_BASE _u(0x50100000)
    +#define USBCTRL_REGS_BASE _u(0x50110000)
    +#define PIO0_BASE _u(0x50200000)
    +#define PIO1_BASE _u(0x50300000)
    +#define XIP_AUX_BASE _u(0x50400000)
    +#define SIO_BASE _u(0xd0000000)
    +#define PPB_BASE _u(0xe0000000)
    +
    +#endif // _ADDRESSMAP_H_
    diff --git a/src/bootroms/shared/asm_helper.S b/src/bootroms/shared/asm_helper.S
    new file mode 100644
    index 000000000..8e2c37ae4
    --- /dev/null
    +++ b/src/bootroms/shared/asm_helper.S
    @@ -0,0 +1,41 @@
    +/*
    + * Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    + *
    + * SPDX-License-Identifier: BSD-3-Clause
    + */
    +
    +#include "regs.h"
    +
    +# note we don't do this by default in this file for backwards comaptibility with user code
    +# that may include this file, but not use unified syntax. Note that this macro does equivalent
    +# setup to the pico_default_asm macro for inline assembly in C code.
    +.macro pico_default_asm_setup
    +.syntax unified
    +.cpu cortex-m0plus
    +.thumb
    +.endm
    +
    +// do not put align in here as it is used mid function sometimes
    +.macro regular_func x
    +.global \x
    +.type \x,%function
    +.thumb_func
    +\x:
    +.endm
    +
    +.macro regular_func_with_section x
    +.section .text.\x
    +regular_func \x
    +.endm
    +
    +// do not put align in here as it is used mid function sometimes
    +.macro wrapper_func x
    +regular_func WRAPPER_FUNC_NAME(\x)
    +.endm
    +
    +.macro __pre_init func, priority_string
    +.section .preinit_array.\priority_string
    +.align 2
    +.word \func
    +.endm
    +
    diff --git a/src/bootroms/shared/exit_from_boot2.S b/src/bootroms/shared/exit_from_boot2.S
    new file mode 100644
    index 000000000..a1fd2bce8
    --- /dev/null
    +++ b/src/bootroms/shared/exit_from_boot2.S
    @@ -0,0 +1,28 @@
    +/*
    + * Copyright (c) 2021 Raspberry Pi (Trading) Ltd.
    + *
    + * SPDX-License-Identifier: BSD-3-Clause
    + */
    +
    +#ifndef _BOOT2_HELPER_EXIT_FROM_BOOT2
    +#define _BOOT2_HELPER_EXIT_FROM_BOOT2
    +
    +#include "regs.h"
    +
    +// If entered from the bootrom, lr (which we earlier pushed) will be 0,
    +// and we vector through the table at the start of the main flash image.
    +// Any regular function call will have a nonzero value for lr.
    +check_return:
    +    pop {r0}
    +    cmp r0, #0
    +    beq vector_into_flash
    +    bx r0
    +vector_into_flash:
    +    ldr r0, =(XIP_BASE + 0x100)
    +    ldr r1, =(PPB_BASE + M0PLUS_VTOR_OFFSET)
    +    str r0, [r1]
    +    ldmia r0, {r0, r1}
    +    msr msp, r0
    +    bx r1
    +
    +#endif
    diff --git a/src/bootroms/shared/m0plus.h b/src/bootroms/shared/m0plus.h
    new file mode 100644
    index 000000000..cef5ab0a1
    --- /dev/null
    +++ b/src/bootroms/shared/m0plus.h
    @@ -0,0 +1,1149 @@
    +/**
    + * Copyright (c) 2021 Raspberry Pi (Trading) Ltd.
    + *
    + * SPDX-License-Identifier: BSD-3-Clause
    + */
    +// =============================================================================
    +// Register block : M0PLUS
    +// Version        : 1
    +// Bus type       : ahbl
    +// Description    : None
    +// =============================================================================
    +#ifndef HARDWARE_REGS_M0PLUS_DEFINED
    +#define HARDWARE_REGS_M0PLUS_DEFINED
    +// =============================================================================
    +// Register    : M0PLUS_SYST_CSR
    +// Description : Use the SysTick Control and Status Register to enable the
    +//               SysTick features.
    +#define M0PLUS_SYST_CSR_OFFSET _u(0x0000e010)
    +#define M0PLUS_SYST_CSR_BITS   _u(0x00010007)
    +#define M0PLUS_SYST_CSR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_SYST_CSR_COUNTFLAG
    +// Description : Returns 1 if timer counted to 0 since last time this was read.
    +//               Clears on read by application or debugger.
    +#define M0PLUS_SYST_CSR_COUNTFLAG_RESET  _u(0x0)
    +#define M0PLUS_SYST_CSR_COUNTFLAG_BITS   _u(0x00010000)
    +#define M0PLUS_SYST_CSR_COUNTFLAG_MSB    _u(16)
    +#define M0PLUS_SYST_CSR_COUNTFLAG_LSB    _u(16)
    +#define M0PLUS_SYST_CSR_COUNTFLAG_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_SYST_CSR_CLKSOURCE
    +// Description : SysTick clock source. Always reads as one if SYST_CALIB reports
    +//               NOREF.
    +//               Selects the SysTick timer clock source:
    +//               0 = External reference clock.
    +//               1 = Processor clock.
    +#define M0PLUS_SYST_CSR_CLKSOURCE_RESET  _u(0x0)
    +#define M0PLUS_SYST_CSR_CLKSOURCE_BITS   _u(0x00000004)
    +#define M0PLUS_SYST_CSR_CLKSOURCE_MSB    _u(2)
    +#define M0PLUS_SYST_CSR_CLKSOURCE_LSB    _u(2)
    +#define M0PLUS_SYST_CSR_CLKSOURCE_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_SYST_CSR_TICKINT
    +// Description : Enables SysTick exception request:
    +//               0 = Counting down to zero does not assert the SysTick exception
    +//               request.
    +//               1 = Counting down to zero to asserts the SysTick exception
    +//               request.
    +#define M0PLUS_SYST_CSR_TICKINT_RESET  _u(0x0)
    +#define M0PLUS_SYST_CSR_TICKINT_BITS   _u(0x00000002)
    +#define M0PLUS_SYST_CSR_TICKINT_MSB    _u(1)
    +#define M0PLUS_SYST_CSR_TICKINT_LSB    _u(1)
    +#define M0PLUS_SYST_CSR_TICKINT_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_SYST_CSR_ENABLE
    +// Description : Enable SysTick counter:
    +//               0 = Counter disabled.
    +//               1 = Counter enabled.
    +#define M0PLUS_SYST_CSR_ENABLE_RESET  _u(0x0)
    +#define M0PLUS_SYST_CSR_ENABLE_BITS   _u(0x00000001)
    +#define M0PLUS_SYST_CSR_ENABLE_MSB    _u(0)
    +#define M0PLUS_SYST_CSR_ENABLE_LSB    _u(0)
    +#define M0PLUS_SYST_CSR_ENABLE_ACCESS "RW"
    +// =============================================================================
    +// Register    : M0PLUS_SYST_RVR
    +// Description : Use the SysTick Reload Value Register to specify the start
    +//               value to load into the current value register when the counter
    +//               reaches 0. It can be any value between 0 and 0x00FFFFFF. A
    +//               start value of 0 is possible, but has no effect because the
    +//               SysTick interrupt and COUNTFLAG are activated when counting
    +//               from 1 to 0. The reset value of this register is UNKNOWN.
    +//               To generate a multi-shot timer with a period of N processor
    +//               clock cycles, use a RELOAD value of N-1. For example, if the
    +//               SysTick interrupt is required every 100 clock pulses, set
    +//               RELOAD to 99.
    +#define M0PLUS_SYST_RVR_OFFSET _u(0x0000e014)
    +#define M0PLUS_SYST_RVR_BITS   _u(0x00ffffff)
    +#define M0PLUS_SYST_RVR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_SYST_RVR_RELOAD
    +// Description : Value to load into the SysTick Current Value Register when the
    +//               counter reaches 0.
    +#define M0PLUS_SYST_RVR_RELOAD_RESET  _u(0x000000)
    +#define M0PLUS_SYST_RVR_RELOAD_BITS   _u(0x00ffffff)
    +#define M0PLUS_SYST_RVR_RELOAD_MSB    _u(23)
    +#define M0PLUS_SYST_RVR_RELOAD_LSB    _u(0)
    +#define M0PLUS_SYST_RVR_RELOAD_ACCESS "RW"
    +// =============================================================================
    +// Register    : M0PLUS_SYST_CVR
    +// Description : Use the SysTick Current Value Register to find the current
    +//               value in the register. The reset value of this register is
    +//               UNKNOWN.
    +#define M0PLUS_SYST_CVR_OFFSET _u(0x0000e018)
    +#define M0PLUS_SYST_CVR_BITS   _u(0x00ffffff)
    +#define M0PLUS_SYST_CVR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_SYST_CVR_CURRENT
    +// Description : Reads return the current value of the SysTick counter. This
    +//               register is write-clear. Writing to it with any value clears
    +//               the register to 0. Clearing this register also clears the
    +//               COUNTFLAG bit of the SysTick Control and Status Register.
    +#define M0PLUS_SYST_CVR_CURRENT_RESET  _u(0x000000)
    +#define M0PLUS_SYST_CVR_CURRENT_BITS   _u(0x00ffffff)
    +#define M0PLUS_SYST_CVR_CURRENT_MSB    _u(23)
    +#define M0PLUS_SYST_CVR_CURRENT_LSB    _u(0)
    +#define M0PLUS_SYST_CVR_CURRENT_ACCESS "RW"
    +// =============================================================================
    +// Register    : M0PLUS_SYST_CALIB
    +// Description : Use the SysTick Calibration Value Register to enable software
    +//               to scale to any required speed using divide and multiply.
    +#define M0PLUS_SYST_CALIB_OFFSET _u(0x0000e01c)
    +#define M0PLUS_SYST_CALIB_BITS   _u(0xc0ffffff)
    +#define M0PLUS_SYST_CALIB_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_SYST_CALIB_NOREF
    +// Description : If reads as 1, the Reference clock is not provided - the
    +//               CLKSOURCE bit of the SysTick Control and Status register will
    +//               be forced to 1 and cannot be cleared to 0.
    +#define M0PLUS_SYST_CALIB_NOREF_RESET  _u(0x0)
    +#define M0PLUS_SYST_CALIB_NOREF_BITS   _u(0x80000000)
    +#define M0PLUS_SYST_CALIB_NOREF_MSB    _u(31)
    +#define M0PLUS_SYST_CALIB_NOREF_LSB    _u(31)
    +#define M0PLUS_SYST_CALIB_NOREF_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_SYST_CALIB_SKEW
    +// Description : If reads as 1, the calibration value for 10ms is inexact (due
    +//               to clock frequency).
    +#define M0PLUS_SYST_CALIB_SKEW_RESET  _u(0x0)
    +#define M0PLUS_SYST_CALIB_SKEW_BITS   _u(0x40000000)
    +#define M0PLUS_SYST_CALIB_SKEW_MSB    _u(30)
    +#define M0PLUS_SYST_CALIB_SKEW_LSB    _u(30)
    +#define M0PLUS_SYST_CALIB_SKEW_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_SYST_CALIB_TENMS
    +// Description : An optional Reload value to be used for 10ms (100Hz) timing,
    +//               subject to system clock skew errors. If the value reads as 0,
    +//               the calibration value is not known.
    +#define M0PLUS_SYST_CALIB_TENMS_RESET  _u(0x000000)
    +#define M0PLUS_SYST_CALIB_TENMS_BITS   _u(0x00ffffff)
    +#define M0PLUS_SYST_CALIB_TENMS_MSB    _u(23)
    +#define M0PLUS_SYST_CALIB_TENMS_LSB    _u(0)
    +#define M0PLUS_SYST_CALIB_TENMS_ACCESS "RO"
    +// =============================================================================
    +// Register    : M0PLUS_NVIC_ISER
    +// Description : Use the Interrupt Set-Enable Register to enable interrupts and
    +//               determine which interrupts are currently enabled.
    +//               If a pending interrupt is enabled, the NVIC activates the
    +//               interrupt based on its priority. If an interrupt is not
    +//               enabled, asserting its interrupt signal changes the interrupt
    +//               state to pending, but the NVIC never activates the interrupt,
    +//               regardless of its priority.
    +#define M0PLUS_NVIC_ISER_OFFSET _u(0x0000e100)
    +#define M0PLUS_NVIC_ISER_BITS   _u(0xffffffff)
    +#define M0PLUS_NVIC_ISER_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_ISER_SETENA
    +// Description : Interrupt set-enable bits.
    +//               Write:
    +//               0 = No effect.
    +//               1 = Enable interrupt.
    +//               Read:
    +//               0 = Interrupt disabled.
    +//               1 = Interrupt enabled.
    +#define M0PLUS_NVIC_ISER_SETENA_RESET  _u(0x00000000)
    +#define M0PLUS_NVIC_ISER_SETENA_BITS   _u(0xffffffff)
    +#define M0PLUS_NVIC_ISER_SETENA_MSB    _u(31)
    +#define M0PLUS_NVIC_ISER_SETENA_LSB    _u(0)
    +#define M0PLUS_NVIC_ISER_SETENA_ACCESS "RW"
    +// =============================================================================
    +// Register    : M0PLUS_NVIC_ICER
    +// Description : Use the Interrupt Clear-Enable Registers to disable interrupts
    +//               and determine which interrupts are currently enabled.
    +#define M0PLUS_NVIC_ICER_OFFSET _u(0x0000e180)
    +#define M0PLUS_NVIC_ICER_BITS   _u(0xffffffff)
    +#define M0PLUS_NVIC_ICER_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_ICER_CLRENA
    +// Description : Interrupt clear-enable bits.
    +//               Write:
    +//               0 = No effect.
    +//               1 = Disable interrupt.
    +//               Read:
    +//               0 = Interrupt disabled.
    +//               1 = Interrupt enabled.
    +#define M0PLUS_NVIC_ICER_CLRENA_RESET  _u(0x00000000)
    +#define M0PLUS_NVIC_ICER_CLRENA_BITS   _u(0xffffffff)
    +#define M0PLUS_NVIC_ICER_CLRENA_MSB    _u(31)
    +#define M0PLUS_NVIC_ICER_CLRENA_LSB    _u(0)
    +#define M0PLUS_NVIC_ICER_CLRENA_ACCESS "RW"
    +// =============================================================================
    +// Register    : M0PLUS_NVIC_ISPR
    +// Description : The NVIC_ISPR forces interrupts into the pending state, and
    +//               shows which interrupts are pending.
    +#define M0PLUS_NVIC_ISPR_OFFSET _u(0x0000e200)
    +#define M0PLUS_NVIC_ISPR_BITS   _u(0xffffffff)
    +#define M0PLUS_NVIC_ISPR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_ISPR_SETPEND
    +// Description : Interrupt set-pending bits.
    +//               Write:
    +//               0 = No effect.
    +//               1 = Changes interrupt state to pending.
    +//               Read:
    +//               0 = Interrupt is not pending.
    +//               1 = Interrupt is pending.
    +//               Note: Writing 1 to the NVIC_ISPR bit corresponding to:
    +//               An interrupt that is pending has no effect.
    +//               A disabled interrupt sets the state of that interrupt to
    +//               pending.
    +#define M0PLUS_NVIC_ISPR_SETPEND_RESET  _u(0x00000000)
    +#define M0PLUS_NVIC_ISPR_SETPEND_BITS   _u(0xffffffff)
    +#define M0PLUS_NVIC_ISPR_SETPEND_MSB    _u(31)
    +#define M0PLUS_NVIC_ISPR_SETPEND_LSB    _u(0)
    +#define M0PLUS_NVIC_ISPR_SETPEND_ACCESS "RW"
    +// =============================================================================
    +// Register    : M0PLUS_NVIC_ICPR
    +// Description : Use the Interrupt Clear-Pending Register to clear pending
    +//               interrupts and determine which interrupts are currently
    +//               pending.
    +#define M0PLUS_NVIC_ICPR_OFFSET _u(0x0000e280)
    +#define M0PLUS_NVIC_ICPR_BITS   _u(0xffffffff)
    +#define M0PLUS_NVIC_ICPR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_ICPR_CLRPEND
    +// Description : Interrupt clear-pending bits.
    +//               Write:
    +//               0 = No effect.
    +//               1 = Removes pending state and interrupt.
    +//               Read:
    +//               0 = Interrupt is not pending.
    +//               1 = Interrupt is pending.
    +#define M0PLUS_NVIC_ICPR_CLRPEND_RESET  _u(0x00000000)
    +#define M0PLUS_NVIC_ICPR_CLRPEND_BITS   _u(0xffffffff)
    +#define M0PLUS_NVIC_ICPR_CLRPEND_MSB    _u(31)
    +#define M0PLUS_NVIC_ICPR_CLRPEND_LSB    _u(0)
    +#define M0PLUS_NVIC_ICPR_CLRPEND_ACCESS "RW"
    +// =============================================================================
    +// Register    : M0PLUS_NVIC_IPR0
    +// Description : Use the Interrupt Priority Registers to assign a priority from
    +//               0 to 3 to each of the available interrupts. 0 is the highest
    +//               priority, and 3 is the lowest.
    +//               Note: Writing 1 to an NVIC_ICPR bit does not affect the active
    +//               state of the corresponding interrupt.
    +//               These registers are only word-accessible
    +#define M0PLUS_NVIC_IPR0_OFFSET _u(0x0000e400)
    +#define M0PLUS_NVIC_IPR0_BITS   _u(0xc0c0c0c0)
    +#define M0PLUS_NVIC_IPR0_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR0_IP_3
    +// Description : Priority of interrupt 3
    +#define M0PLUS_NVIC_IPR0_IP_3_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR0_IP_3_BITS   _u(0xc0000000)
    +#define M0PLUS_NVIC_IPR0_IP_3_MSB    _u(31)
    +#define M0PLUS_NVIC_IPR0_IP_3_LSB    _u(30)
    +#define M0PLUS_NVIC_IPR0_IP_3_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR0_IP_2
    +// Description : Priority of interrupt 2
    +#define M0PLUS_NVIC_IPR0_IP_2_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR0_IP_2_BITS   _u(0x00c00000)
    +#define M0PLUS_NVIC_IPR0_IP_2_MSB    _u(23)
    +#define M0PLUS_NVIC_IPR0_IP_2_LSB    _u(22)
    +#define M0PLUS_NVIC_IPR0_IP_2_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR0_IP_1
    +// Description : Priority of interrupt 1
    +#define M0PLUS_NVIC_IPR0_IP_1_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR0_IP_1_BITS   _u(0x0000c000)
    +#define M0PLUS_NVIC_IPR0_IP_1_MSB    _u(15)
    +#define M0PLUS_NVIC_IPR0_IP_1_LSB    _u(14)
    +#define M0PLUS_NVIC_IPR0_IP_1_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR0_IP_0
    +// Description : Priority of interrupt 0
    +#define M0PLUS_NVIC_IPR0_IP_0_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR0_IP_0_BITS   _u(0x000000c0)
    +#define M0PLUS_NVIC_IPR0_IP_0_MSB    _u(7)
    +#define M0PLUS_NVIC_IPR0_IP_0_LSB    _u(6)
    +#define M0PLUS_NVIC_IPR0_IP_0_ACCESS "RW"
    +// =============================================================================
    +// Register    : M0PLUS_NVIC_IPR1
    +// Description : Use the Interrupt Priority Registers to assign a priority from
    +//               0 to 3 to each of the available interrupts. 0 is the highest
    +//               priority, and 3 is the lowest.
    +#define M0PLUS_NVIC_IPR1_OFFSET _u(0x0000e404)
    +#define M0PLUS_NVIC_IPR1_BITS   _u(0xc0c0c0c0)
    +#define M0PLUS_NVIC_IPR1_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR1_IP_7
    +// Description : Priority of interrupt 7
    +#define M0PLUS_NVIC_IPR1_IP_7_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR1_IP_7_BITS   _u(0xc0000000)
    +#define M0PLUS_NVIC_IPR1_IP_7_MSB    _u(31)
    +#define M0PLUS_NVIC_IPR1_IP_7_LSB    _u(30)
    +#define M0PLUS_NVIC_IPR1_IP_7_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR1_IP_6
    +// Description : Priority of interrupt 6
    +#define M0PLUS_NVIC_IPR1_IP_6_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR1_IP_6_BITS   _u(0x00c00000)
    +#define M0PLUS_NVIC_IPR1_IP_6_MSB    _u(23)
    +#define M0PLUS_NVIC_IPR1_IP_6_LSB    _u(22)
    +#define M0PLUS_NVIC_IPR1_IP_6_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR1_IP_5
    +// Description : Priority of interrupt 5
    +#define M0PLUS_NVIC_IPR1_IP_5_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR1_IP_5_BITS   _u(0x0000c000)
    +#define M0PLUS_NVIC_IPR1_IP_5_MSB    _u(15)
    +#define M0PLUS_NVIC_IPR1_IP_5_LSB    _u(14)
    +#define M0PLUS_NVIC_IPR1_IP_5_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR1_IP_4
    +// Description : Priority of interrupt 4
    +#define M0PLUS_NVIC_IPR1_IP_4_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR1_IP_4_BITS   _u(0x000000c0)
    +#define M0PLUS_NVIC_IPR1_IP_4_MSB    _u(7)
    +#define M0PLUS_NVIC_IPR1_IP_4_LSB    _u(6)
    +#define M0PLUS_NVIC_IPR1_IP_4_ACCESS "RW"
    +// =============================================================================
    +// Register    : M0PLUS_NVIC_IPR2
    +// Description : Use the Interrupt Priority Registers to assign a priority from
    +//               0 to 3 to each of the available interrupts. 0 is the highest
    +//               priority, and 3 is the lowest.
    +#define M0PLUS_NVIC_IPR2_OFFSET _u(0x0000e408)
    +#define M0PLUS_NVIC_IPR2_BITS   _u(0xc0c0c0c0)
    +#define M0PLUS_NVIC_IPR2_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR2_IP_11
    +// Description : Priority of interrupt 11
    +#define M0PLUS_NVIC_IPR2_IP_11_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR2_IP_11_BITS   _u(0xc0000000)
    +#define M0PLUS_NVIC_IPR2_IP_11_MSB    _u(31)
    +#define M0PLUS_NVIC_IPR2_IP_11_LSB    _u(30)
    +#define M0PLUS_NVIC_IPR2_IP_11_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR2_IP_10
    +// Description : Priority of interrupt 10
    +#define M0PLUS_NVIC_IPR2_IP_10_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR2_IP_10_BITS   _u(0x00c00000)
    +#define M0PLUS_NVIC_IPR2_IP_10_MSB    _u(23)
    +#define M0PLUS_NVIC_IPR2_IP_10_LSB    _u(22)
    +#define M0PLUS_NVIC_IPR2_IP_10_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR2_IP_9
    +// Description : Priority of interrupt 9
    +#define M0PLUS_NVIC_IPR2_IP_9_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR2_IP_9_BITS   _u(0x0000c000)
    +#define M0PLUS_NVIC_IPR2_IP_9_MSB    _u(15)
    +#define M0PLUS_NVIC_IPR2_IP_9_LSB    _u(14)
    +#define M0PLUS_NVIC_IPR2_IP_9_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR2_IP_8
    +// Description : Priority of interrupt 8
    +#define M0PLUS_NVIC_IPR2_IP_8_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR2_IP_8_BITS   _u(0x000000c0)
    +#define M0PLUS_NVIC_IPR2_IP_8_MSB    _u(7)
    +#define M0PLUS_NVIC_IPR2_IP_8_LSB    _u(6)
    +#define M0PLUS_NVIC_IPR2_IP_8_ACCESS "RW"
    +// =============================================================================
    +// Register    : M0PLUS_NVIC_IPR3
    +// Description : Use the Interrupt Priority Registers to assign a priority from
    +//               0 to 3 to each of the available interrupts. 0 is the highest
    +//               priority, and 3 is the lowest.
    +#define M0PLUS_NVIC_IPR3_OFFSET _u(0x0000e40c)
    +#define M0PLUS_NVIC_IPR3_BITS   _u(0xc0c0c0c0)
    +#define M0PLUS_NVIC_IPR3_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR3_IP_15
    +// Description : Priority of interrupt 15
    +#define M0PLUS_NVIC_IPR3_IP_15_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR3_IP_15_BITS   _u(0xc0000000)
    +#define M0PLUS_NVIC_IPR3_IP_15_MSB    _u(31)
    +#define M0PLUS_NVIC_IPR3_IP_15_LSB    _u(30)
    +#define M0PLUS_NVIC_IPR3_IP_15_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR3_IP_14
    +// Description : Priority of interrupt 14
    +#define M0PLUS_NVIC_IPR3_IP_14_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR3_IP_14_BITS   _u(0x00c00000)
    +#define M0PLUS_NVIC_IPR3_IP_14_MSB    _u(23)
    +#define M0PLUS_NVIC_IPR3_IP_14_LSB    _u(22)
    +#define M0PLUS_NVIC_IPR3_IP_14_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR3_IP_13
    +// Description : Priority of interrupt 13
    +#define M0PLUS_NVIC_IPR3_IP_13_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR3_IP_13_BITS   _u(0x0000c000)
    +#define M0PLUS_NVIC_IPR3_IP_13_MSB    _u(15)
    +#define M0PLUS_NVIC_IPR3_IP_13_LSB    _u(14)
    +#define M0PLUS_NVIC_IPR3_IP_13_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR3_IP_12
    +// Description : Priority of interrupt 12
    +#define M0PLUS_NVIC_IPR3_IP_12_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR3_IP_12_BITS   _u(0x000000c0)
    +#define M0PLUS_NVIC_IPR3_IP_12_MSB    _u(7)
    +#define M0PLUS_NVIC_IPR3_IP_12_LSB    _u(6)
    +#define M0PLUS_NVIC_IPR3_IP_12_ACCESS "RW"
    +// =============================================================================
    +// Register    : M0PLUS_NVIC_IPR4
    +// Description : Use the Interrupt Priority Registers to assign a priority from
    +//               0 to 3 to each of the available interrupts. 0 is the highest
    +//               priority, and 3 is the lowest.
    +#define M0PLUS_NVIC_IPR4_OFFSET _u(0x0000e410)
    +#define M0PLUS_NVIC_IPR4_BITS   _u(0xc0c0c0c0)
    +#define M0PLUS_NVIC_IPR4_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR4_IP_19
    +// Description : Priority of interrupt 19
    +#define M0PLUS_NVIC_IPR4_IP_19_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR4_IP_19_BITS   _u(0xc0000000)
    +#define M0PLUS_NVIC_IPR4_IP_19_MSB    _u(31)
    +#define M0PLUS_NVIC_IPR4_IP_19_LSB    _u(30)
    +#define M0PLUS_NVIC_IPR4_IP_19_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR4_IP_18
    +// Description : Priority of interrupt 18
    +#define M0PLUS_NVIC_IPR4_IP_18_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR4_IP_18_BITS   _u(0x00c00000)
    +#define M0PLUS_NVIC_IPR4_IP_18_MSB    _u(23)
    +#define M0PLUS_NVIC_IPR4_IP_18_LSB    _u(22)
    +#define M0PLUS_NVIC_IPR4_IP_18_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR4_IP_17
    +// Description : Priority of interrupt 17
    +#define M0PLUS_NVIC_IPR4_IP_17_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR4_IP_17_BITS   _u(0x0000c000)
    +#define M0PLUS_NVIC_IPR4_IP_17_MSB    _u(15)
    +#define M0PLUS_NVIC_IPR4_IP_17_LSB    _u(14)
    +#define M0PLUS_NVIC_IPR4_IP_17_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR4_IP_16
    +// Description : Priority of interrupt 16
    +#define M0PLUS_NVIC_IPR4_IP_16_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR4_IP_16_BITS   _u(0x000000c0)
    +#define M0PLUS_NVIC_IPR4_IP_16_MSB    _u(7)
    +#define M0PLUS_NVIC_IPR4_IP_16_LSB    _u(6)
    +#define M0PLUS_NVIC_IPR4_IP_16_ACCESS "RW"
    +// =============================================================================
    +// Register    : M0PLUS_NVIC_IPR5
    +// Description : Use the Interrupt Priority Registers to assign a priority from
    +//               0 to 3 to each of the available interrupts. 0 is the highest
    +//               priority, and 3 is the lowest.
    +#define M0PLUS_NVIC_IPR5_OFFSET _u(0x0000e414)
    +#define M0PLUS_NVIC_IPR5_BITS   _u(0xc0c0c0c0)
    +#define M0PLUS_NVIC_IPR5_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR5_IP_23
    +// Description : Priority of interrupt 23
    +#define M0PLUS_NVIC_IPR5_IP_23_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR5_IP_23_BITS   _u(0xc0000000)
    +#define M0PLUS_NVIC_IPR5_IP_23_MSB    _u(31)
    +#define M0PLUS_NVIC_IPR5_IP_23_LSB    _u(30)
    +#define M0PLUS_NVIC_IPR5_IP_23_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR5_IP_22
    +// Description : Priority of interrupt 22
    +#define M0PLUS_NVIC_IPR5_IP_22_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR5_IP_22_BITS   _u(0x00c00000)
    +#define M0PLUS_NVIC_IPR5_IP_22_MSB    _u(23)
    +#define M0PLUS_NVIC_IPR5_IP_22_LSB    _u(22)
    +#define M0PLUS_NVIC_IPR5_IP_22_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR5_IP_21
    +// Description : Priority of interrupt 21
    +#define M0PLUS_NVIC_IPR5_IP_21_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR5_IP_21_BITS   _u(0x0000c000)
    +#define M0PLUS_NVIC_IPR5_IP_21_MSB    _u(15)
    +#define M0PLUS_NVIC_IPR5_IP_21_LSB    _u(14)
    +#define M0PLUS_NVIC_IPR5_IP_21_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR5_IP_20
    +// Description : Priority of interrupt 20
    +#define M0PLUS_NVIC_IPR5_IP_20_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR5_IP_20_BITS   _u(0x000000c0)
    +#define M0PLUS_NVIC_IPR5_IP_20_MSB    _u(7)
    +#define M0PLUS_NVIC_IPR5_IP_20_LSB    _u(6)
    +#define M0PLUS_NVIC_IPR5_IP_20_ACCESS "RW"
    +// =============================================================================
    +// Register    : M0PLUS_NVIC_IPR6
    +// Description : Use the Interrupt Priority Registers to assign a priority from
    +//               0 to 3 to each of the available interrupts. 0 is the highest
    +//               priority, and 3 is the lowest.
    +#define M0PLUS_NVIC_IPR6_OFFSET _u(0x0000e418)
    +#define M0PLUS_NVIC_IPR6_BITS   _u(0xc0c0c0c0)
    +#define M0PLUS_NVIC_IPR6_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR6_IP_27
    +// Description : Priority of interrupt 27
    +#define M0PLUS_NVIC_IPR6_IP_27_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR6_IP_27_BITS   _u(0xc0000000)
    +#define M0PLUS_NVIC_IPR6_IP_27_MSB    _u(31)
    +#define M0PLUS_NVIC_IPR6_IP_27_LSB    _u(30)
    +#define M0PLUS_NVIC_IPR6_IP_27_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR6_IP_26
    +// Description : Priority of interrupt 26
    +#define M0PLUS_NVIC_IPR6_IP_26_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR6_IP_26_BITS   _u(0x00c00000)
    +#define M0PLUS_NVIC_IPR6_IP_26_MSB    _u(23)
    +#define M0PLUS_NVIC_IPR6_IP_26_LSB    _u(22)
    +#define M0PLUS_NVIC_IPR6_IP_26_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR6_IP_25
    +// Description : Priority of interrupt 25
    +#define M0PLUS_NVIC_IPR6_IP_25_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR6_IP_25_BITS   _u(0x0000c000)
    +#define M0PLUS_NVIC_IPR6_IP_25_MSB    _u(15)
    +#define M0PLUS_NVIC_IPR6_IP_25_LSB    _u(14)
    +#define M0PLUS_NVIC_IPR6_IP_25_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR6_IP_24
    +// Description : Priority of interrupt 24
    +#define M0PLUS_NVIC_IPR6_IP_24_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR6_IP_24_BITS   _u(0x000000c0)
    +#define M0PLUS_NVIC_IPR6_IP_24_MSB    _u(7)
    +#define M0PLUS_NVIC_IPR6_IP_24_LSB    _u(6)
    +#define M0PLUS_NVIC_IPR6_IP_24_ACCESS "RW"
    +// =============================================================================
    +// Register    : M0PLUS_NVIC_IPR7
    +// Description : Use the Interrupt Priority Registers to assign a priority from
    +//               0 to 3 to each of the available interrupts. 0 is the highest
    +//               priority, and 3 is the lowest.
    +#define M0PLUS_NVIC_IPR7_OFFSET _u(0x0000e41c)
    +#define M0PLUS_NVIC_IPR7_BITS   _u(0xc0c0c0c0)
    +#define M0PLUS_NVIC_IPR7_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR7_IP_31
    +// Description : Priority of interrupt 31
    +#define M0PLUS_NVIC_IPR7_IP_31_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR7_IP_31_BITS   _u(0xc0000000)
    +#define M0PLUS_NVIC_IPR7_IP_31_MSB    _u(31)
    +#define M0PLUS_NVIC_IPR7_IP_31_LSB    _u(30)
    +#define M0PLUS_NVIC_IPR7_IP_31_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR7_IP_30
    +// Description : Priority of interrupt 30
    +#define M0PLUS_NVIC_IPR7_IP_30_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR7_IP_30_BITS   _u(0x00c00000)
    +#define M0PLUS_NVIC_IPR7_IP_30_MSB    _u(23)
    +#define M0PLUS_NVIC_IPR7_IP_30_LSB    _u(22)
    +#define M0PLUS_NVIC_IPR7_IP_30_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR7_IP_29
    +// Description : Priority of interrupt 29
    +#define M0PLUS_NVIC_IPR7_IP_29_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR7_IP_29_BITS   _u(0x0000c000)
    +#define M0PLUS_NVIC_IPR7_IP_29_MSB    _u(15)
    +#define M0PLUS_NVIC_IPR7_IP_29_LSB    _u(14)
    +#define M0PLUS_NVIC_IPR7_IP_29_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_NVIC_IPR7_IP_28
    +// Description : Priority of interrupt 28
    +#define M0PLUS_NVIC_IPR7_IP_28_RESET  _u(0x0)
    +#define M0PLUS_NVIC_IPR7_IP_28_BITS   _u(0x000000c0)
    +#define M0PLUS_NVIC_IPR7_IP_28_MSB    _u(7)
    +#define M0PLUS_NVIC_IPR7_IP_28_LSB    _u(6)
    +#define M0PLUS_NVIC_IPR7_IP_28_ACCESS "RW"
    +// =============================================================================
    +// Register    : M0PLUS_CPUID
    +// Description : Read the CPU ID Base Register to determine: the ID number of
    +//               the processor core, the version number of the processor core,
    +//               the implementation details of the processor core.
    +#define M0PLUS_CPUID_OFFSET _u(0x0000ed00)
    +#define M0PLUS_CPUID_BITS   _u(0xffffffff)
    +#define M0PLUS_CPUID_RESET  _u(0x410cc601)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_CPUID_IMPLEMENTER
    +// Description : Implementor code: 0x41 = ARM
    +#define M0PLUS_CPUID_IMPLEMENTER_RESET  _u(0x41)
    +#define M0PLUS_CPUID_IMPLEMENTER_BITS   _u(0xff000000)
    +#define M0PLUS_CPUID_IMPLEMENTER_MSB    _u(31)
    +#define M0PLUS_CPUID_IMPLEMENTER_LSB    _u(24)
    +#define M0PLUS_CPUID_IMPLEMENTER_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_CPUID_VARIANT
    +// Description : Major revision number n in the rnpm revision status:
    +//               0x0 = Revision 0.
    +#define M0PLUS_CPUID_VARIANT_RESET  _u(0x0)
    +#define M0PLUS_CPUID_VARIANT_BITS   _u(0x00f00000)
    +#define M0PLUS_CPUID_VARIANT_MSB    _u(23)
    +#define M0PLUS_CPUID_VARIANT_LSB    _u(20)
    +#define M0PLUS_CPUID_VARIANT_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_CPUID_ARCHITECTURE
    +// Description : Constant that defines the architecture of the processor:
    +//               0xC = ARMv6-M architecture.
    +#define M0PLUS_CPUID_ARCHITECTURE_RESET  _u(0xc)
    +#define M0PLUS_CPUID_ARCHITECTURE_BITS   _u(0x000f0000)
    +#define M0PLUS_CPUID_ARCHITECTURE_MSB    _u(19)
    +#define M0PLUS_CPUID_ARCHITECTURE_LSB    _u(16)
    +#define M0PLUS_CPUID_ARCHITECTURE_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_CPUID_PARTNO
    +// Description : Number of processor within family: 0xC60 = Cortex-M0+
    +#define M0PLUS_CPUID_PARTNO_RESET  _u(0xc60)
    +#define M0PLUS_CPUID_PARTNO_BITS   _u(0x0000fff0)
    +#define M0PLUS_CPUID_PARTNO_MSB    _u(15)
    +#define M0PLUS_CPUID_PARTNO_LSB    _u(4)
    +#define M0PLUS_CPUID_PARTNO_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_CPUID_REVISION
    +// Description : Minor revision number m in the rnpm revision status:
    +//               0x1 = Patch 1.
    +#define M0PLUS_CPUID_REVISION_RESET  _u(0x1)
    +#define M0PLUS_CPUID_REVISION_BITS   _u(0x0000000f)
    +#define M0PLUS_CPUID_REVISION_MSB    _u(3)
    +#define M0PLUS_CPUID_REVISION_LSB    _u(0)
    +#define M0PLUS_CPUID_REVISION_ACCESS "RO"
    +// =============================================================================
    +// Register    : M0PLUS_ICSR
    +// Description : Use the Interrupt Control State Register to set a pending
    +//               Non-Maskable Interrupt (NMI), set or clear a pending PendSV,
    +//               set or clear a pending SysTick, check for pending exceptions,
    +//               check the vector number of the highest priority pended
    +//               exception, check the vector number of the active exception.
    +#define M0PLUS_ICSR_OFFSET _u(0x0000ed04)
    +#define M0PLUS_ICSR_BITS   _u(0x9edff1ff)
    +#define M0PLUS_ICSR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_ICSR_NMIPENDSET
    +// Description : Setting this bit will activate an NMI. Since NMI is the highest
    +//               priority exception, it will activate as soon as it is
    +//               registered.
    +//               NMI set-pending bit.
    +//               Write:
    +//               0 = No effect.
    +//               1 = Changes NMI exception state to pending.
    +//               Read:
    +//               0 = NMI exception is not pending.
    +//               1 = NMI exception is pending.
    +//               Because NMI is the highest-priority exception, normally the
    +//               processor enters the NMI
    +//               exception handler as soon as it detects a write of 1 to this
    +//               bit. Entering the handler then clears
    +//               this bit to 0. This means a read of this bit by the NMI
    +//               exception handler returns 1 only if the
    +//               NMI signal is reasserted while the processor is executing that
    +//               handler.
    +#define M0PLUS_ICSR_NMIPENDSET_RESET  _u(0x0)
    +#define M0PLUS_ICSR_NMIPENDSET_BITS   _u(0x80000000)
    +#define M0PLUS_ICSR_NMIPENDSET_MSB    _u(31)
    +#define M0PLUS_ICSR_NMIPENDSET_LSB    _u(31)
    +#define M0PLUS_ICSR_NMIPENDSET_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_ICSR_PENDSVSET
    +// Description : PendSV set-pending bit.
    +//               Write:
    +//               0 = No effect.
    +//               1 = Changes PendSV exception state to pending.
    +//               Read:
    +//               0 = PendSV exception is not pending.
    +//               1 = PendSV exception is pending.
    +//               Writing 1 to this bit is the only way to set the PendSV
    +//               exception state to pending.
    +#define M0PLUS_ICSR_PENDSVSET_RESET  _u(0x0)
    +#define M0PLUS_ICSR_PENDSVSET_BITS   _u(0x10000000)
    +#define M0PLUS_ICSR_PENDSVSET_MSB    _u(28)
    +#define M0PLUS_ICSR_PENDSVSET_LSB    _u(28)
    +#define M0PLUS_ICSR_PENDSVSET_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_ICSR_PENDSVCLR
    +// Description : PendSV clear-pending bit.
    +//               Write:
    +//               0 = No effect.
    +//               1 = Removes the pending state from the PendSV exception.
    +#define M0PLUS_ICSR_PENDSVCLR_RESET  _u(0x0)
    +#define M0PLUS_ICSR_PENDSVCLR_BITS   _u(0x08000000)
    +#define M0PLUS_ICSR_PENDSVCLR_MSB    _u(27)
    +#define M0PLUS_ICSR_PENDSVCLR_LSB    _u(27)
    +#define M0PLUS_ICSR_PENDSVCLR_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_ICSR_PENDSTSET
    +// Description : SysTick exception set-pending bit.
    +//               Write:
    +//               0 = No effect.
    +//               1 = Changes SysTick exception state to pending.
    +//               Read:
    +//               0 = SysTick exception is not pending.
    +//               1 = SysTick exception is pending.
    +#define M0PLUS_ICSR_PENDSTSET_RESET  _u(0x0)
    +#define M0PLUS_ICSR_PENDSTSET_BITS   _u(0x04000000)
    +#define M0PLUS_ICSR_PENDSTSET_MSB    _u(26)
    +#define M0PLUS_ICSR_PENDSTSET_LSB    _u(26)
    +#define M0PLUS_ICSR_PENDSTSET_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_ICSR_PENDSTCLR
    +// Description : SysTick exception clear-pending bit.
    +//               Write:
    +//               0 = No effect.
    +//               1 = Removes the pending state from the SysTick exception.
    +//               This bit is WO. On a register read its value is Unknown.
    +#define M0PLUS_ICSR_PENDSTCLR_RESET  _u(0x0)
    +#define M0PLUS_ICSR_PENDSTCLR_BITS   _u(0x02000000)
    +#define M0PLUS_ICSR_PENDSTCLR_MSB    _u(25)
    +#define M0PLUS_ICSR_PENDSTCLR_LSB    _u(25)
    +#define M0PLUS_ICSR_PENDSTCLR_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_ICSR_ISRPREEMPT
    +// Description : The system can only access this bit when the core is halted. It
    +//               indicates that a pending interrupt is to be taken in the next
    +//               running cycle. If C_MASKINTS is clear in the Debug Halting
    +//               Control and Status Register, the interrupt is serviced.
    +#define M0PLUS_ICSR_ISRPREEMPT_RESET  _u(0x0)
    +#define M0PLUS_ICSR_ISRPREEMPT_BITS   _u(0x00800000)
    +#define M0PLUS_ICSR_ISRPREEMPT_MSB    _u(23)
    +#define M0PLUS_ICSR_ISRPREEMPT_LSB    _u(23)
    +#define M0PLUS_ICSR_ISRPREEMPT_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_ICSR_ISRPENDING
    +// Description : External interrupt pending flag
    +#define M0PLUS_ICSR_ISRPENDING_RESET  _u(0x0)
    +#define M0PLUS_ICSR_ISRPENDING_BITS   _u(0x00400000)
    +#define M0PLUS_ICSR_ISRPENDING_MSB    _u(22)
    +#define M0PLUS_ICSR_ISRPENDING_LSB    _u(22)
    +#define M0PLUS_ICSR_ISRPENDING_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_ICSR_VECTPENDING
    +// Description : Indicates the exception number for the highest priority pending
    +//               exception: 0 = no pending exceptions. Non zero = The pending
    +//               state includes the effect of memory-mapped enable and mask
    +//               registers. It does not include the PRIMASK special-purpose
    +//               register qualifier.
    +#define M0PLUS_ICSR_VECTPENDING_RESET  _u(0x000)
    +#define M0PLUS_ICSR_VECTPENDING_BITS   _u(0x001ff000)
    +#define M0PLUS_ICSR_VECTPENDING_MSB    _u(20)
    +#define M0PLUS_ICSR_VECTPENDING_LSB    _u(12)
    +#define M0PLUS_ICSR_VECTPENDING_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_ICSR_VECTACTIVE
    +// Description : Active exception number field. Reset clears the VECTACTIVE
    +//               field.
    +#define M0PLUS_ICSR_VECTACTIVE_RESET  _u(0x000)
    +#define M0PLUS_ICSR_VECTACTIVE_BITS   _u(0x000001ff)
    +#define M0PLUS_ICSR_VECTACTIVE_MSB    _u(8)
    +#define M0PLUS_ICSR_VECTACTIVE_LSB    _u(0)
    +#define M0PLUS_ICSR_VECTACTIVE_ACCESS "RO"
    +// =============================================================================
    +// Register    : M0PLUS_VTOR
    +// Description : The VTOR holds the vector table offset address.
    +#define M0PLUS_VTOR_OFFSET _u(0x0000ed08)
    +#define M0PLUS_VTOR_BITS   _u(0xffffff00)
    +#define M0PLUS_VTOR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_VTOR_TBLOFF
    +// Description : Bits [31:8] of the indicate the vector table offset address.
    +#define M0PLUS_VTOR_TBLOFF_RESET  _u(0x000000)
    +#define M0PLUS_VTOR_TBLOFF_BITS   _u(0xffffff00)
    +#define M0PLUS_VTOR_TBLOFF_MSB    _u(31)
    +#define M0PLUS_VTOR_TBLOFF_LSB    _u(8)
    +#define M0PLUS_VTOR_TBLOFF_ACCESS "RW"
    +// =============================================================================
    +// Register    : M0PLUS_AIRCR
    +// Description : Use the Application Interrupt and Reset Control Register to:
    +//               determine data endianness, clear all active state information
    +//               from debug halt mode, request a system reset.
    +#define M0PLUS_AIRCR_OFFSET _u(0x0000ed0c)
    +#define M0PLUS_AIRCR_BITS   _u(0xffff8006)
    +#define M0PLUS_AIRCR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_AIRCR_VECTKEY
    +// Description : Register key:
    +//               Reads as Unknown
    +//               On writes, write 0x05FA to VECTKEY, otherwise the write is
    +//               ignored.
    +#define M0PLUS_AIRCR_VECTKEY_RESET  _u(0x0000)
    +#define M0PLUS_AIRCR_VECTKEY_BITS   _u(0xffff0000)
    +#define M0PLUS_AIRCR_VECTKEY_MSB    _u(31)
    +#define M0PLUS_AIRCR_VECTKEY_LSB    _u(16)
    +#define M0PLUS_AIRCR_VECTKEY_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_AIRCR_ENDIANESS
    +// Description : Data endianness implemented:
    +//               0 = Little-endian.
    +#define M0PLUS_AIRCR_ENDIANESS_RESET  _u(0x0)
    +#define M0PLUS_AIRCR_ENDIANESS_BITS   _u(0x00008000)
    +#define M0PLUS_AIRCR_ENDIANESS_MSB    _u(15)
    +#define M0PLUS_AIRCR_ENDIANESS_LSB    _u(15)
    +#define M0PLUS_AIRCR_ENDIANESS_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_AIRCR_SYSRESETREQ
    +// Description : Writing 1 to this bit causes the SYSRESETREQ signal to the
    +//               outer system to be asserted to request a reset. The intention
    +//               is to force a large system reset of all major components except
    +//               for debug. The C_HALT bit in the DHCSR is cleared as a result
    +//               of the system reset requested. The debugger does not lose
    +//               contact with the device.
    +#define M0PLUS_AIRCR_SYSRESETREQ_RESET  _u(0x0)
    +#define M0PLUS_AIRCR_SYSRESETREQ_BITS   _u(0x00000004)
    +#define M0PLUS_AIRCR_SYSRESETREQ_MSB    _u(2)
    +#define M0PLUS_AIRCR_SYSRESETREQ_LSB    _u(2)
    +#define M0PLUS_AIRCR_SYSRESETREQ_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_AIRCR_VECTCLRACTIVE
    +// Description : Clears all active state information for fixed and configurable
    +//               exceptions. This bit: is self-clearing, can only be set by the
    +//               DAP when the core is halted.  When set: clears all active
    +//               exception status of the processor, forces a return to Thread
    +//               mode, forces an IPSR of 0. A debugger must re-initialize the
    +//               stack.
    +#define M0PLUS_AIRCR_VECTCLRACTIVE_RESET  _u(0x0)
    +#define M0PLUS_AIRCR_VECTCLRACTIVE_BITS   _u(0x00000002)
    +#define M0PLUS_AIRCR_VECTCLRACTIVE_MSB    _u(1)
    +#define M0PLUS_AIRCR_VECTCLRACTIVE_LSB    _u(1)
    +#define M0PLUS_AIRCR_VECTCLRACTIVE_ACCESS "RW"
    +// =============================================================================
    +// Register    : M0PLUS_SCR
    +// Description : System Control Register. Use the System Control Register for
    +//               power-management functions: signal to the system when the
    +//               processor can enter a low power state, control how the
    +//               processor enters and exits low power states.
    +#define M0PLUS_SCR_OFFSET _u(0x0000ed10)
    +#define M0PLUS_SCR_BITS   _u(0x00000016)
    +#define M0PLUS_SCR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_SCR_SEVONPEND
    +// Description : Send Event on Pending bit:
    +//               0 = Only enabled interrupts or events can wakeup the processor,
    +//               disabled interrupts are excluded.
    +//               1 = Enabled events and all interrupts, including disabled
    +//               interrupts, can wakeup the processor.
    +//               When an event or interrupt becomes pending, the event signal
    +//               wakes up the processor from WFE. If the
    +//               processor is not waiting for an event, the event is registered
    +//               and affects the next WFE.
    +//               The processor also wakes up on execution of an SEV instruction
    +//               or an external event.
    +#define M0PLUS_SCR_SEVONPEND_RESET  _u(0x0)
    +#define M0PLUS_SCR_SEVONPEND_BITS   _u(0x00000010)
    +#define M0PLUS_SCR_SEVONPEND_MSB    _u(4)
    +#define M0PLUS_SCR_SEVONPEND_LSB    _u(4)
    +#define M0PLUS_SCR_SEVONPEND_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_SCR_SLEEPDEEP
    +// Description : Controls whether the processor uses sleep or deep sleep as its
    +//               low power mode:
    +//               0 = Sleep.
    +//               1 = Deep sleep.
    +#define M0PLUS_SCR_SLEEPDEEP_RESET  _u(0x0)
    +#define M0PLUS_SCR_SLEEPDEEP_BITS   _u(0x00000004)
    +#define M0PLUS_SCR_SLEEPDEEP_MSB    _u(2)
    +#define M0PLUS_SCR_SLEEPDEEP_LSB    _u(2)
    +#define M0PLUS_SCR_SLEEPDEEP_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_SCR_SLEEPONEXIT
    +// Description : Indicates sleep-on-exit when returning from Handler mode to
    +//               Thread mode:
    +//               0 = Do not sleep when returning to Thread mode.
    +//               1 = Enter sleep, or deep sleep, on return from an ISR to Thread
    +//               mode.
    +//               Setting this bit to 1 enables an interrupt driven application
    +//               to avoid returning to an empty main application.
    +#define M0PLUS_SCR_SLEEPONEXIT_RESET  _u(0x0)
    +#define M0PLUS_SCR_SLEEPONEXIT_BITS   _u(0x00000002)
    +#define M0PLUS_SCR_SLEEPONEXIT_MSB    _u(1)
    +#define M0PLUS_SCR_SLEEPONEXIT_LSB    _u(1)
    +#define M0PLUS_SCR_SLEEPONEXIT_ACCESS "RW"
    +// =============================================================================
    +// Register    : M0PLUS_CCR
    +// Description : The Configuration and Control Register permanently enables
    +//               stack alignment and causes unaligned accesses to result in a
    +//               Hard Fault.
    +#define M0PLUS_CCR_OFFSET _u(0x0000ed14)
    +#define M0PLUS_CCR_BITS   _u(0x00000208)
    +#define M0PLUS_CCR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_CCR_STKALIGN
    +// Description : Always reads as one, indicates 8-byte stack alignment on
    +//               exception entry. On exception entry, the processor uses bit[9]
    +//               of the stacked PSR to indicate the stack alignment. On return
    +//               from the exception it uses this stacked bit to restore the
    +//               correct stack alignment.
    +#define M0PLUS_CCR_STKALIGN_RESET  _u(0x0)
    +#define M0PLUS_CCR_STKALIGN_BITS   _u(0x00000200)
    +#define M0PLUS_CCR_STKALIGN_MSB    _u(9)
    +#define M0PLUS_CCR_STKALIGN_LSB    _u(9)
    +#define M0PLUS_CCR_STKALIGN_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_CCR_UNALIGN_TRP
    +// Description : Always reads as one, indicates that all unaligned accesses
    +//               generate a HardFault.
    +#define M0PLUS_CCR_UNALIGN_TRP_RESET  _u(0x0)
    +#define M0PLUS_CCR_UNALIGN_TRP_BITS   _u(0x00000008)
    +#define M0PLUS_CCR_UNALIGN_TRP_MSB    _u(3)
    +#define M0PLUS_CCR_UNALIGN_TRP_LSB    _u(3)
    +#define M0PLUS_CCR_UNALIGN_TRP_ACCESS "RO"
    +// =============================================================================
    +// Register    : M0PLUS_SHPR2
    +// Description : System handlers are a special class of exception handler that
    +//               can have their priority set to any of the priority levels. Use
    +//               the System Handler Priority Register 2 to set the priority of
    +//               SVCall.
    +#define M0PLUS_SHPR2_OFFSET _u(0x0000ed1c)
    +#define M0PLUS_SHPR2_BITS   _u(0xc0000000)
    +#define M0PLUS_SHPR2_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_SHPR2_PRI_11
    +// Description : Priority of system handler 11, SVCall
    +#define M0PLUS_SHPR2_PRI_11_RESET  _u(0x0)
    +#define M0PLUS_SHPR2_PRI_11_BITS   _u(0xc0000000)
    +#define M0PLUS_SHPR2_PRI_11_MSB    _u(31)
    +#define M0PLUS_SHPR2_PRI_11_LSB    _u(30)
    +#define M0PLUS_SHPR2_PRI_11_ACCESS "RW"
    +// =============================================================================
    +// Register    : M0PLUS_SHPR3
    +// Description : System handlers are a special class of exception handler that
    +//               can have their priority set to any of the priority levels. Use
    +//               the System Handler Priority Register 3 to set the priority of
    +//               PendSV and SysTick.
    +#define M0PLUS_SHPR3_OFFSET _u(0x0000ed20)
    +#define M0PLUS_SHPR3_BITS   _u(0xc0c00000)
    +#define M0PLUS_SHPR3_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_SHPR3_PRI_15
    +// Description : Priority of system handler 15, SysTick
    +#define M0PLUS_SHPR3_PRI_15_RESET  _u(0x0)
    +#define M0PLUS_SHPR3_PRI_15_BITS   _u(0xc0000000)
    +#define M0PLUS_SHPR3_PRI_15_MSB    _u(31)
    +#define M0PLUS_SHPR3_PRI_15_LSB    _u(30)
    +#define M0PLUS_SHPR3_PRI_15_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_SHPR3_PRI_14
    +// Description : Priority of system handler 14, PendSV
    +#define M0PLUS_SHPR3_PRI_14_RESET  _u(0x0)
    +#define M0PLUS_SHPR3_PRI_14_BITS   _u(0x00c00000)
    +#define M0PLUS_SHPR3_PRI_14_MSB    _u(23)
    +#define M0PLUS_SHPR3_PRI_14_LSB    _u(22)
    +#define M0PLUS_SHPR3_PRI_14_ACCESS "RW"
    +// =============================================================================
    +// Register    : M0PLUS_SHCSR
    +// Description : Use the System Handler Control and State Register to determine
    +//               or clear the pending status of SVCall.
    +#define M0PLUS_SHCSR_OFFSET _u(0x0000ed24)
    +#define M0PLUS_SHCSR_BITS   _u(0x00008000)
    +#define M0PLUS_SHCSR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_SHCSR_SVCALLPENDED
    +// Description : Reads as 1 if SVCall is Pending.  Write 1 to set pending
    +//               SVCall, write 0 to clear pending SVCall.
    +#define M0PLUS_SHCSR_SVCALLPENDED_RESET  _u(0x0)
    +#define M0PLUS_SHCSR_SVCALLPENDED_BITS   _u(0x00008000)
    +#define M0PLUS_SHCSR_SVCALLPENDED_MSB    _u(15)
    +#define M0PLUS_SHCSR_SVCALLPENDED_LSB    _u(15)
    +#define M0PLUS_SHCSR_SVCALLPENDED_ACCESS "RW"
    +// =============================================================================
    +// Register    : M0PLUS_MPU_TYPE
    +// Description : Read the MPU Type Register to determine if the processor
    +//               implements an MPU, and how many regions the MPU supports.
    +#define M0PLUS_MPU_TYPE_OFFSET _u(0x0000ed90)
    +#define M0PLUS_MPU_TYPE_BITS   _u(0x00ffff01)
    +#define M0PLUS_MPU_TYPE_RESET  _u(0x00000800)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_MPU_TYPE_IREGION
    +// Description : Instruction region. Reads as zero as ARMv6-M only supports a
    +//               unified MPU.
    +#define M0PLUS_MPU_TYPE_IREGION_RESET  _u(0x00)
    +#define M0PLUS_MPU_TYPE_IREGION_BITS   _u(0x00ff0000)
    +#define M0PLUS_MPU_TYPE_IREGION_MSB    _u(23)
    +#define M0PLUS_MPU_TYPE_IREGION_LSB    _u(16)
    +#define M0PLUS_MPU_TYPE_IREGION_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_MPU_TYPE_DREGION
    +// Description : Number of regions supported by the MPU.
    +#define M0PLUS_MPU_TYPE_DREGION_RESET  _u(0x08)
    +#define M0PLUS_MPU_TYPE_DREGION_BITS   _u(0x0000ff00)
    +#define M0PLUS_MPU_TYPE_DREGION_MSB    _u(15)
    +#define M0PLUS_MPU_TYPE_DREGION_LSB    _u(8)
    +#define M0PLUS_MPU_TYPE_DREGION_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_MPU_TYPE_SEPARATE
    +// Description : Indicates support for separate instruction and data address
    +//               maps. Reads as 0 as ARMv6-M only supports a unified MPU.
    +#define M0PLUS_MPU_TYPE_SEPARATE_RESET  _u(0x0)
    +#define M0PLUS_MPU_TYPE_SEPARATE_BITS   _u(0x00000001)
    +#define M0PLUS_MPU_TYPE_SEPARATE_MSB    _u(0)
    +#define M0PLUS_MPU_TYPE_SEPARATE_LSB    _u(0)
    +#define M0PLUS_MPU_TYPE_SEPARATE_ACCESS "RO"
    +// =============================================================================
    +// Register    : M0PLUS_MPU_CTRL
    +// Description : Use the MPU Control Register to enable and disable the MPU, and
    +//               to control whether the default memory map is enabled as a
    +//               background region for privileged accesses, and whether the MPU
    +//               is enabled for HardFaults and NMIs.
    +#define M0PLUS_MPU_CTRL_OFFSET _u(0x0000ed94)
    +#define M0PLUS_MPU_CTRL_BITS   _u(0x00000007)
    +#define M0PLUS_MPU_CTRL_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_MPU_CTRL_PRIVDEFENA
    +// Description : Controls whether the default memory map is enabled as a
    +//               background region for privileged accesses. This bit is ignored
    +//               when ENABLE is clear.
    +//               0 = If the MPU is enabled, disables use of the default memory
    +//               map. Any memory access to a location not
    +//               covered by any enabled region causes a fault.
    +//               1 = If the MPU is enabled, enables use of the default memory
    +//               map as a background region for privileged software accesses.
    +//               When enabled, the background region acts as if it is region
    +//               number -1. Any region that is defined and enabled has priority
    +//               over this default map.
    +#define M0PLUS_MPU_CTRL_PRIVDEFENA_RESET  _u(0x0)
    +#define M0PLUS_MPU_CTRL_PRIVDEFENA_BITS   _u(0x00000004)
    +#define M0PLUS_MPU_CTRL_PRIVDEFENA_MSB    _u(2)
    +#define M0PLUS_MPU_CTRL_PRIVDEFENA_LSB    _u(2)
    +#define M0PLUS_MPU_CTRL_PRIVDEFENA_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_MPU_CTRL_HFNMIENA
    +// Description : Controls the use of the MPU for HardFaults and NMIs. Setting
    +//               this bit when ENABLE is clear results in UNPREDICTABLE
    +//               behaviour.
    +//               When the MPU is enabled:
    +//               0 = MPU is disabled during HardFault and NMI handlers,
    +//               regardless of the value of the ENABLE bit.
    +//               1 = the MPU is enabled during HardFault and NMI handlers.
    +#define M0PLUS_MPU_CTRL_HFNMIENA_RESET  _u(0x0)
    +#define M0PLUS_MPU_CTRL_HFNMIENA_BITS   _u(0x00000002)
    +#define M0PLUS_MPU_CTRL_HFNMIENA_MSB    _u(1)
    +#define M0PLUS_MPU_CTRL_HFNMIENA_LSB    _u(1)
    +#define M0PLUS_MPU_CTRL_HFNMIENA_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_MPU_CTRL_ENABLE
    +// Description : Enables the MPU. If the MPU is disabled, privileged and
    +//               unprivileged accesses use the default memory map.
    +//               0 = MPU disabled.
    +//               1 = MPU enabled.
    +#define M0PLUS_MPU_CTRL_ENABLE_RESET  _u(0x0)
    +#define M0PLUS_MPU_CTRL_ENABLE_BITS   _u(0x00000001)
    +#define M0PLUS_MPU_CTRL_ENABLE_MSB    _u(0)
    +#define M0PLUS_MPU_CTRL_ENABLE_LSB    _u(0)
    +#define M0PLUS_MPU_CTRL_ENABLE_ACCESS "RW"
    +// =============================================================================
    +// Register    : M0PLUS_MPU_RNR
    +// Description : Use the MPU Region Number Register to select the region
    +//               currently accessed by MPU_RBAR and MPU_RASR.
    +#define M0PLUS_MPU_RNR_OFFSET _u(0x0000ed98)
    +#define M0PLUS_MPU_RNR_BITS   _u(0x0000000f)
    +#define M0PLUS_MPU_RNR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_MPU_RNR_REGION
    +// Description : Indicates the MPU region referenced by the MPU_RBAR and
    +//               MPU_RASR registers.
    +//               The MPU supports 8 memory regions, so the permitted values of
    +//               this field are 0-7.
    +#define M0PLUS_MPU_RNR_REGION_RESET  _u(0x0)
    +#define M0PLUS_MPU_RNR_REGION_BITS   _u(0x0000000f)
    +#define M0PLUS_MPU_RNR_REGION_MSB    _u(3)
    +#define M0PLUS_MPU_RNR_REGION_LSB    _u(0)
    +#define M0PLUS_MPU_RNR_REGION_ACCESS "RW"
    +// =============================================================================
    +// Register    : M0PLUS_MPU_RBAR
    +// Description : Read the MPU Region Base Address Register to determine the base
    +//               address of the region identified by MPU_RNR. Write to update
    +//               the base address of said region or that of a specified region,
    +//               with whose number MPU_RNR will also be updated.
    +#define M0PLUS_MPU_RBAR_OFFSET _u(0x0000ed9c)
    +#define M0PLUS_MPU_RBAR_BITS   _u(0xffffff1f)
    +#define M0PLUS_MPU_RBAR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_MPU_RBAR_ADDR
    +// Description : Base address of the region.
    +#define M0PLUS_MPU_RBAR_ADDR_RESET  _u(0x000000)
    +#define M0PLUS_MPU_RBAR_ADDR_BITS   _u(0xffffff00)
    +#define M0PLUS_MPU_RBAR_ADDR_MSB    _u(31)
    +#define M0PLUS_MPU_RBAR_ADDR_LSB    _u(8)
    +#define M0PLUS_MPU_RBAR_ADDR_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_MPU_RBAR_VALID
    +// Description : On writes, indicates whether the write must update the base
    +//               address of the region identified by the REGION field, updating
    +//               the MPU_RNR to indicate this new region.
    +//               Write:
    +//               0 = MPU_RNR not changed, and the processor:
    +//               Updates the base address for the region specified in the
    +//               MPU_RNR.
    +//               Ignores the value of the REGION field.
    +//               1 = The processor:
    +//               Updates the value of the MPU_RNR to the value of the REGION
    +//               field.
    +//               Updates the base address for the region specified in the REGION
    +//               field.
    +//               Always reads as zero.
    +#define M0PLUS_MPU_RBAR_VALID_RESET  _u(0x0)
    +#define M0PLUS_MPU_RBAR_VALID_BITS   _u(0x00000010)
    +#define M0PLUS_MPU_RBAR_VALID_MSB    _u(4)
    +#define M0PLUS_MPU_RBAR_VALID_LSB    _u(4)
    +#define M0PLUS_MPU_RBAR_VALID_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_MPU_RBAR_REGION
    +// Description : On writes, specifies the number of the region whose base
    +//               address to update provided VALID is set written as 1. On reads,
    +//               returns bits [3:0] of MPU_RNR.
    +#define M0PLUS_MPU_RBAR_REGION_RESET  _u(0x0)
    +#define M0PLUS_MPU_RBAR_REGION_BITS   _u(0x0000000f)
    +#define M0PLUS_MPU_RBAR_REGION_MSB    _u(3)
    +#define M0PLUS_MPU_RBAR_REGION_LSB    _u(0)
    +#define M0PLUS_MPU_RBAR_REGION_ACCESS "RW"
    +// =============================================================================
    +// Register    : M0PLUS_MPU_RASR
    +// Description : Use the MPU Region Attribute and Size Register to define the
    +//               size, access behaviour and memory type of the region identified
    +//               by MPU_RNR, and enable that region.
    +#define M0PLUS_MPU_RASR_OFFSET _u(0x0000eda0)
    +#define M0PLUS_MPU_RASR_BITS   _u(0xffffff3f)
    +#define M0PLUS_MPU_RASR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_MPU_RASR_ATTRS
    +// Description : The MPU Region Attribute field. Use to define the region
    +//               attribute control.
    +//               28 = XN: Instruction access disable bit:
    +//               0 = Instruction fetches enabled.
    +//               1 = Instruction fetches disabled.
    +//               26:24 = AP: Access permission field
    +//               18 = S: Shareable bit
    +//               17 = C: Cacheable bit
    +//               16 = B: Bufferable bit
    +#define M0PLUS_MPU_RASR_ATTRS_RESET  _u(0x0000)
    +#define M0PLUS_MPU_RASR_ATTRS_BITS   _u(0xffff0000)
    +#define M0PLUS_MPU_RASR_ATTRS_MSB    _u(31)
    +#define M0PLUS_MPU_RASR_ATTRS_LSB    _u(16)
    +#define M0PLUS_MPU_RASR_ATTRS_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_MPU_RASR_SRD
    +// Description : Subregion Disable. For regions of 256 bytes or larger, each bit
    +//               of this field controls whether one of the eight equal
    +//               subregions is enabled.
    +#define M0PLUS_MPU_RASR_SRD_RESET  _u(0x00)
    +#define M0PLUS_MPU_RASR_SRD_BITS   _u(0x0000ff00)
    +#define M0PLUS_MPU_RASR_SRD_MSB    _u(15)
    +#define M0PLUS_MPU_RASR_SRD_LSB    _u(8)
    +#define M0PLUS_MPU_RASR_SRD_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_MPU_RASR_SIZE
    +// Description : Indicates the region size. Region size in bytes = 2^(SIZE+1).
    +//               The minimum permitted value is 7 (b00111) = 256Bytes
    +#define M0PLUS_MPU_RASR_SIZE_RESET  _u(0x00)
    +#define M0PLUS_MPU_RASR_SIZE_BITS   _u(0x0000003e)
    +#define M0PLUS_MPU_RASR_SIZE_MSB    _u(5)
    +#define M0PLUS_MPU_RASR_SIZE_LSB    _u(1)
    +#define M0PLUS_MPU_RASR_SIZE_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : M0PLUS_MPU_RASR_ENABLE
    +// Description : Enables the region.
    +#define M0PLUS_MPU_RASR_ENABLE_RESET  _u(0x0)
    +#define M0PLUS_MPU_RASR_ENABLE_BITS   _u(0x00000001)
    +#define M0PLUS_MPU_RASR_ENABLE_MSB    _u(0)
    +#define M0PLUS_MPU_RASR_ENABLE_LSB    _u(0)
    +#define M0PLUS_MPU_RASR_ENABLE_ACCESS "RW"
    +// =============================================================================
    +#endif // HARDWARE_REGS_M0PLUS_DEFINED
    diff --git a/src/bootroms/shared/pads_qspi.h b/src/bootroms/shared/pads_qspi.h
    new file mode 100644
    index 000000000..b3a09e900
    --- /dev/null
    +++ b/src/bootroms/shared/pads_qspi.h
    @@ -0,0 +1,454 @@
    +/**
    + * Copyright (c) 2021 Raspberry Pi (Trading) Ltd.
    + *
    + * SPDX-License-Identifier: BSD-3-Clause
    + */
    +// =============================================================================
    +// Register block : PADS_QSPI
    +// Version        : 1
    +// Bus type       : apb
    +// Description    : None
    +// =============================================================================
    +#ifndef HARDWARE_REGS_PADS_QSPI_DEFINED
    +#define HARDWARE_REGS_PADS_QSPI_DEFINED
    +// =============================================================================
    +// Register    : PADS_QSPI_VOLTAGE_SELECT
    +// Description : Voltage select. Per bank control
    +//               0x0 -> Set voltage to 3.3V (DVDD >= 2V5)
    +//               0x1 -> Set voltage to 1.8V (DVDD <= 1V8)
    +#define PADS_QSPI_VOLTAGE_SELECT_OFFSET    _u(0x00000000)
    +#define PADS_QSPI_VOLTAGE_SELECT_BITS      _u(0x00000001)
    +#define PADS_QSPI_VOLTAGE_SELECT_RESET     _u(0x00000000)
    +#define PADS_QSPI_VOLTAGE_SELECT_MSB       _u(0)
    +#define PADS_QSPI_VOLTAGE_SELECT_LSB       _u(0)
    +#define PADS_QSPI_VOLTAGE_SELECT_ACCESS    "RW"
    +#define PADS_QSPI_VOLTAGE_SELECT_VALUE_3V3 _u(0x0)
    +#define PADS_QSPI_VOLTAGE_SELECT_VALUE_1V8 _u(0x1)
    +// =============================================================================
    +// Register    : PADS_QSPI_GPIO_QSPI_SCLK
    +// Description : Pad control register
    +#define PADS_QSPI_GPIO_QSPI_SCLK_OFFSET _u(0x00000004)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_BITS   _u(0x000000ff)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_RESET  _u(0x00000056)
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SCLK_OD
    +// Description : Output disable. Has priority over output enable from
    +//               peripherals
    +#define PADS_QSPI_GPIO_QSPI_SCLK_OD_RESET  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_OD_BITS   _u(0x00000080)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_OD_MSB    _u(7)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_OD_LSB    _u(7)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_OD_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SCLK_IE
    +// Description : Input enable
    +#define PADS_QSPI_GPIO_QSPI_SCLK_IE_RESET  _u(0x1)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_IE_BITS   _u(0x00000040)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_IE_MSB    _u(6)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_IE_LSB    _u(6)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_IE_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SCLK_DRIVE
    +// Description : Drive strength.
    +//               0x0 -> 2mA
    +//               0x1 -> 4mA
    +//               0x2 -> 8mA
    +//               0x3 -> 12mA
    +#define PADS_QSPI_GPIO_QSPI_SCLK_DRIVE_RESET      _u(0x1)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_DRIVE_BITS       _u(0x00000030)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_DRIVE_MSB        _u(5)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_DRIVE_LSB        _u(4)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_DRIVE_ACCESS     "RW"
    +#define PADS_QSPI_GPIO_QSPI_SCLK_DRIVE_VALUE_2MA  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_DRIVE_VALUE_4MA  _u(0x1)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_DRIVE_VALUE_8MA  _u(0x2)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_DRIVE_VALUE_12MA _u(0x3)
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SCLK_PUE
    +// Description : Pull up enable
    +#define PADS_QSPI_GPIO_QSPI_SCLK_PUE_RESET  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_PUE_BITS   _u(0x00000008)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_PUE_MSB    _u(3)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_PUE_LSB    _u(3)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_PUE_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SCLK_PDE
    +// Description : Pull down enable
    +#define PADS_QSPI_GPIO_QSPI_SCLK_PDE_RESET  _u(0x1)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_PDE_BITS   _u(0x00000004)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_PDE_MSB    _u(2)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_PDE_LSB    _u(2)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_PDE_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SCLK_SCHMITT
    +// Description : Enable schmitt trigger
    +#define PADS_QSPI_GPIO_QSPI_SCLK_SCHMITT_RESET  _u(0x1)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_SCHMITT_BITS   _u(0x00000002)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_SCHMITT_MSB    _u(1)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_SCHMITT_LSB    _u(1)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_SCHMITT_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SCLK_SLEWFAST
    +// Description : Slew rate control. 1 = Fast, 0 = Slow
    +#define PADS_QSPI_GPIO_QSPI_SCLK_SLEWFAST_RESET  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_SLEWFAST_BITS   _u(0x00000001)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_SLEWFAST_MSB    _u(0)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_SLEWFAST_LSB    _u(0)
    +#define PADS_QSPI_GPIO_QSPI_SCLK_SLEWFAST_ACCESS "RW"
    +// =============================================================================
    +// Register    : PADS_QSPI_GPIO_QSPI_SD0
    +// Description : Pad control register
    +#define PADS_QSPI_GPIO_QSPI_SD0_OFFSET _u(0x00000008)
    +#define PADS_QSPI_GPIO_QSPI_SD0_BITS   _u(0x000000ff)
    +#define PADS_QSPI_GPIO_QSPI_SD0_RESET  _u(0x00000052)
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD0_OD
    +// Description : Output disable. Has priority over output enable from
    +//               peripherals
    +#define PADS_QSPI_GPIO_QSPI_SD0_OD_RESET  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SD0_OD_BITS   _u(0x00000080)
    +#define PADS_QSPI_GPIO_QSPI_SD0_OD_MSB    _u(7)
    +#define PADS_QSPI_GPIO_QSPI_SD0_OD_LSB    _u(7)
    +#define PADS_QSPI_GPIO_QSPI_SD0_OD_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD0_IE
    +// Description : Input enable
    +#define PADS_QSPI_GPIO_QSPI_SD0_IE_RESET  _u(0x1)
    +#define PADS_QSPI_GPIO_QSPI_SD0_IE_BITS   _u(0x00000040)
    +#define PADS_QSPI_GPIO_QSPI_SD0_IE_MSB    _u(6)
    +#define PADS_QSPI_GPIO_QSPI_SD0_IE_LSB    _u(6)
    +#define PADS_QSPI_GPIO_QSPI_SD0_IE_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD0_DRIVE
    +// Description : Drive strength.
    +//               0x0 -> 2mA
    +//               0x1 -> 4mA
    +//               0x2 -> 8mA
    +//               0x3 -> 12mA
    +#define PADS_QSPI_GPIO_QSPI_SD0_DRIVE_RESET      _u(0x1)
    +#define PADS_QSPI_GPIO_QSPI_SD0_DRIVE_BITS       _u(0x00000030)
    +#define PADS_QSPI_GPIO_QSPI_SD0_DRIVE_MSB        _u(5)
    +#define PADS_QSPI_GPIO_QSPI_SD0_DRIVE_LSB        _u(4)
    +#define PADS_QSPI_GPIO_QSPI_SD0_DRIVE_ACCESS     "RW"
    +#define PADS_QSPI_GPIO_QSPI_SD0_DRIVE_VALUE_2MA  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SD0_DRIVE_VALUE_4MA  _u(0x1)
    +#define PADS_QSPI_GPIO_QSPI_SD0_DRIVE_VALUE_8MA  _u(0x2)
    +#define PADS_QSPI_GPIO_QSPI_SD0_DRIVE_VALUE_12MA _u(0x3)
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD0_PUE
    +// Description : Pull up enable
    +#define PADS_QSPI_GPIO_QSPI_SD0_PUE_RESET  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SD0_PUE_BITS   _u(0x00000008)
    +#define PADS_QSPI_GPIO_QSPI_SD0_PUE_MSB    _u(3)
    +#define PADS_QSPI_GPIO_QSPI_SD0_PUE_LSB    _u(3)
    +#define PADS_QSPI_GPIO_QSPI_SD0_PUE_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD0_PDE
    +// Description : Pull down enable
    +#define PADS_QSPI_GPIO_QSPI_SD0_PDE_RESET  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SD0_PDE_BITS   _u(0x00000004)
    +#define PADS_QSPI_GPIO_QSPI_SD0_PDE_MSB    _u(2)
    +#define PADS_QSPI_GPIO_QSPI_SD0_PDE_LSB    _u(2)
    +#define PADS_QSPI_GPIO_QSPI_SD0_PDE_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD0_SCHMITT
    +// Description : Enable schmitt trigger
    +#define PADS_QSPI_GPIO_QSPI_SD0_SCHMITT_RESET  _u(0x1)
    +#define PADS_QSPI_GPIO_QSPI_SD0_SCHMITT_BITS   _u(0x00000002)
    +#define PADS_QSPI_GPIO_QSPI_SD0_SCHMITT_MSB    _u(1)
    +#define PADS_QSPI_GPIO_QSPI_SD0_SCHMITT_LSB    _u(1)
    +#define PADS_QSPI_GPIO_QSPI_SD0_SCHMITT_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD0_SLEWFAST
    +// Description : Slew rate control. 1 = Fast, 0 = Slow
    +#define PADS_QSPI_GPIO_QSPI_SD0_SLEWFAST_RESET  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SD0_SLEWFAST_BITS   _u(0x00000001)
    +#define PADS_QSPI_GPIO_QSPI_SD0_SLEWFAST_MSB    _u(0)
    +#define PADS_QSPI_GPIO_QSPI_SD0_SLEWFAST_LSB    _u(0)
    +#define PADS_QSPI_GPIO_QSPI_SD0_SLEWFAST_ACCESS "RW"
    +// =============================================================================
    +// Register    : PADS_QSPI_GPIO_QSPI_SD1
    +// Description : Pad control register
    +#define PADS_QSPI_GPIO_QSPI_SD1_OFFSET _u(0x0000000c)
    +#define PADS_QSPI_GPIO_QSPI_SD1_BITS   _u(0x000000ff)
    +#define PADS_QSPI_GPIO_QSPI_SD1_RESET  _u(0x00000052)
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD1_OD
    +// Description : Output disable. Has priority over output enable from
    +//               peripherals
    +#define PADS_QSPI_GPIO_QSPI_SD1_OD_RESET  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SD1_OD_BITS   _u(0x00000080)
    +#define PADS_QSPI_GPIO_QSPI_SD1_OD_MSB    _u(7)
    +#define PADS_QSPI_GPIO_QSPI_SD1_OD_LSB    _u(7)
    +#define PADS_QSPI_GPIO_QSPI_SD1_OD_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD1_IE
    +// Description : Input enable
    +#define PADS_QSPI_GPIO_QSPI_SD1_IE_RESET  _u(0x1)
    +#define PADS_QSPI_GPIO_QSPI_SD1_IE_BITS   _u(0x00000040)
    +#define PADS_QSPI_GPIO_QSPI_SD1_IE_MSB    _u(6)
    +#define PADS_QSPI_GPIO_QSPI_SD1_IE_LSB    _u(6)
    +#define PADS_QSPI_GPIO_QSPI_SD1_IE_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD1_DRIVE
    +// Description : Drive strength.
    +//               0x0 -> 2mA
    +//               0x1 -> 4mA
    +//               0x2 -> 8mA
    +//               0x3 -> 12mA
    +#define PADS_QSPI_GPIO_QSPI_SD1_DRIVE_RESET      _u(0x1)
    +#define PADS_QSPI_GPIO_QSPI_SD1_DRIVE_BITS       _u(0x00000030)
    +#define PADS_QSPI_GPIO_QSPI_SD1_DRIVE_MSB        _u(5)
    +#define PADS_QSPI_GPIO_QSPI_SD1_DRIVE_LSB        _u(4)
    +#define PADS_QSPI_GPIO_QSPI_SD1_DRIVE_ACCESS     "RW"
    +#define PADS_QSPI_GPIO_QSPI_SD1_DRIVE_VALUE_2MA  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SD1_DRIVE_VALUE_4MA  _u(0x1)
    +#define PADS_QSPI_GPIO_QSPI_SD1_DRIVE_VALUE_8MA  _u(0x2)
    +#define PADS_QSPI_GPIO_QSPI_SD1_DRIVE_VALUE_12MA _u(0x3)
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD1_PUE
    +// Description : Pull up enable
    +#define PADS_QSPI_GPIO_QSPI_SD1_PUE_RESET  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SD1_PUE_BITS   _u(0x00000008)
    +#define PADS_QSPI_GPIO_QSPI_SD1_PUE_MSB    _u(3)
    +#define PADS_QSPI_GPIO_QSPI_SD1_PUE_LSB    _u(3)
    +#define PADS_QSPI_GPIO_QSPI_SD1_PUE_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD1_PDE
    +// Description : Pull down enable
    +#define PADS_QSPI_GPIO_QSPI_SD1_PDE_RESET  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SD1_PDE_BITS   _u(0x00000004)
    +#define PADS_QSPI_GPIO_QSPI_SD1_PDE_MSB    _u(2)
    +#define PADS_QSPI_GPIO_QSPI_SD1_PDE_LSB    _u(2)
    +#define PADS_QSPI_GPIO_QSPI_SD1_PDE_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD1_SCHMITT
    +// Description : Enable schmitt trigger
    +#define PADS_QSPI_GPIO_QSPI_SD1_SCHMITT_RESET  _u(0x1)
    +#define PADS_QSPI_GPIO_QSPI_SD1_SCHMITT_BITS   _u(0x00000002)
    +#define PADS_QSPI_GPIO_QSPI_SD1_SCHMITT_MSB    _u(1)
    +#define PADS_QSPI_GPIO_QSPI_SD1_SCHMITT_LSB    _u(1)
    +#define PADS_QSPI_GPIO_QSPI_SD1_SCHMITT_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD1_SLEWFAST
    +// Description : Slew rate control. 1 = Fast, 0 = Slow
    +#define PADS_QSPI_GPIO_QSPI_SD1_SLEWFAST_RESET  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SD1_SLEWFAST_BITS   _u(0x00000001)
    +#define PADS_QSPI_GPIO_QSPI_SD1_SLEWFAST_MSB    _u(0)
    +#define PADS_QSPI_GPIO_QSPI_SD1_SLEWFAST_LSB    _u(0)
    +#define PADS_QSPI_GPIO_QSPI_SD1_SLEWFAST_ACCESS "RW"
    +// =============================================================================
    +// Register    : PADS_QSPI_GPIO_QSPI_SD2
    +// Description : Pad control register
    +#define PADS_QSPI_GPIO_QSPI_SD2_OFFSET _u(0x00000010)
    +#define PADS_QSPI_GPIO_QSPI_SD2_BITS   _u(0x000000ff)
    +#define PADS_QSPI_GPIO_QSPI_SD2_RESET  _u(0x00000052)
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD2_OD
    +// Description : Output disable. Has priority over output enable from
    +//               peripherals
    +#define PADS_QSPI_GPIO_QSPI_SD2_OD_RESET  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SD2_OD_BITS   _u(0x00000080)
    +#define PADS_QSPI_GPIO_QSPI_SD2_OD_MSB    _u(7)
    +#define PADS_QSPI_GPIO_QSPI_SD2_OD_LSB    _u(7)
    +#define PADS_QSPI_GPIO_QSPI_SD2_OD_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD2_IE
    +// Description : Input enable
    +#define PADS_QSPI_GPIO_QSPI_SD2_IE_RESET  _u(0x1)
    +#define PADS_QSPI_GPIO_QSPI_SD2_IE_BITS   _u(0x00000040)
    +#define PADS_QSPI_GPIO_QSPI_SD2_IE_MSB    _u(6)
    +#define PADS_QSPI_GPIO_QSPI_SD2_IE_LSB    _u(6)
    +#define PADS_QSPI_GPIO_QSPI_SD2_IE_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD2_DRIVE
    +// Description : Drive strength.
    +//               0x0 -> 2mA
    +//               0x1 -> 4mA
    +//               0x2 -> 8mA
    +//               0x3 -> 12mA
    +#define PADS_QSPI_GPIO_QSPI_SD2_DRIVE_RESET      _u(0x1)
    +#define PADS_QSPI_GPIO_QSPI_SD2_DRIVE_BITS       _u(0x00000030)
    +#define PADS_QSPI_GPIO_QSPI_SD2_DRIVE_MSB        _u(5)
    +#define PADS_QSPI_GPIO_QSPI_SD2_DRIVE_LSB        _u(4)
    +#define PADS_QSPI_GPIO_QSPI_SD2_DRIVE_ACCESS     "RW"
    +#define PADS_QSPI_GPIO_QSPI_SD2_DRIVE_VALUE_2MA  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SD2_DRIVE_VALUE_4MA  _u(0x1)
    +#define PADS_QSPI_GPIO_QSPI_SD2_DRIVE_VALUE_8MA  _u(0x2)
    +#define PADS_QSPI_GPIO_QSPI_SD2_DRIVE_VALUE_12MA _u(0x3)
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD2_PUE
    +// Description : Pull up enable
    +#define PADS_QSPI_GPIO_QSPI_SD2_PUE_RESET  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SD2_PUE_BITS   _u(0x00000008)
    +#define PADS_QSPI_GPIO_QSPI_SD2_PUE_MSB    _u(3)
    +#define PADS_QSPI_GPIO_QSPI_SD2_PUE_LSB    _u(3)
    +#define PADS_QSPI_GPIO_QSPI_SD2_PUE_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD2_PDE
    +// Description : Pull down enable
    +#define PADS_QSPI_GPIO_QSPI_SD2_PDE_RESET  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SD2_PDE_BITS   _u(0x00000004)
    +#define PADS_QSPI_GPIO_QSPI_SD2_PDE_MSB    _u(2)
    +#define PADS_QSPI_GPIO_QSPI_SD2_PDE_LSB    _u(2)
    +#define PADS_QSPI_GPIO_QSPI_SD2_PDE_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD2_SCHMITT
    +// Description : Enable schmitt trigger
    +#define PADS_QSPI_GPIO_QSPI_SD2_SCHMITT_RESET  _u(0x1)
    +#define PADS_QSPI_GPIO_QSPI_SD2_SCHMITT_BITS   _u(0x00000002)
    +#define PADS_QSPI_GPIO_QSPI_SD2_SCHMITT_MSB    _u(1)
    +#define PADS_QSPI_GPIO_QSPI_SD2_SCHMITT_LSB    _u(1)
    +#define PADS_QSPI_GPIO_QSPI_SD2_SCHMITT_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD2_SLEWFAST
    +// Description : Slew rate control. 1 = Fast, 0 = Slow
    +#define PADS_QSPI_GPIO_QSPI_SD2_SLEWFAST_RESET  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SD2_SLEWFAST_BITS   _u(0x00000001)
    +#define PADS_QSPI_GPIO_QSPI_SD2_SLEWFAST_MSB    _u(0)
    +#define PADS_QSPI_GPIO_QSPI_SD2_SLEWFAST_LSB    _u(0)
    +#define PADS_QSPI_GPIO_QSPI_SD2_SLEWFAST_ACCESS "RW"
    +// =============================================================================
    +// Register    : PADS_QSPI_GPIO_QSPI_SD3
    +// Description : Pad control register
    +#define PADS_QSPI_GPIO_QSPI_SD3_OFFSET _u(0x00000014)
    +#define PADS_QSPI_GPIO_QSPI_SD3_BITS   _u(0x000000ff)
    +#define PADS_QSPI_GPIO_QSPI_SD3_RESET  _u(0x00000052)
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD3_OD
    +// Description : Output disable. Has priority over output enable from
    +//               peripherals
    +#define PADS_QSPI_GPIO_QSPI_SD3_OD_RESET  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SD3_OD_BITS   _u(0x00000080)
    +#define PADS_QSPI_GPIO_QSPI_SD3_OD_MSB    _u(7)
    +#define PADS_QSPI_GPIO_QSPI_SD3_OD_LSB    _u(7)
    +#define PADS_QSPI_GPIO_QSPI_SD3_OD_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD3_IE
    +// Description : Input enable
    +#define PADS_QSPI_GPIO_QSPI_SD3_IE_RESET  _u(0x1)
    +#define PADS_QSPI_GPIO_QSPI_SD3_IE_BITS   _u(0x00000040)
    +#define PADS_QSPI_GPIO_QSPI_SD3_IE_MSB    _u(6)
    +#define PADS_QSPI_GPIO_QSPI_SD3_IE_LSB    _u(6)
    +#define PADS_QSPI_GPIO_QSPI_SD3_IE_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD3_DRIVE
    +// Description : Drive strength.
    +//               0x0 -> 2mA
    +//               0x1 -> 4mA
    +//               0x2 -> 8mA
    +//               0x3 -> 12mA
    +#define PADS_QSPI_GPIO_QSPI_SD3_DRIVE_RESET      _u(0x1)
    +#define PADS_QSPI_GPIO_QSPI_SD3_DRIVE_BITS       _u(0x00000030)
    +#define PADS_QSPI_GPIO_QSPI_SD3_DRIVE_MSB        _u(5)
    +#define PADS_QSPI_GPIO_QSPI_SD3_DRIVE_LSB        _u(4)
    +#define PADS_QSPI_GPIO_QSPI_SD3_DRIVE_ACCESS     "RW"
    +#define PADS_QSPI_GPIO_QSPI_SD3_DRIVE_VALUE_2MA  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SD3_DRIVE_VALUE_4MA  _u(0x1)
    +#define PADS_QSPI_GPIO_QSPI_SD3_DRIVE_VALUE_8MA  _u(0x2)
    +#define PADS_QSPI_GPIO_QSPI_SD3_DRIVE_VALUE_12MA _u(0x3)
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD3_PUE
    +// Description : Pull up enable
    +#define PADS_QSPI_GPIO_QSPI_SD3_PUE_RESET  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SD3_PUE_BITS   _u(0x00000008)
    +#define PADS_QSPI_GPIO_QSPI_SD3_PUE_MSB    _u(3)
    +#define PADS_QSPI_GPIO_QSPI_SD3_PUE_LSB    _u(3)
    +#define PADS_QSPI_GPIO_QSPI_SD3_PUE_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD3_PDE
    +// Description : Pull down enable
    +#define PADS_QSPI_GPIO_QSPI_SD3_PDE_RESET  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SD3_PDE_BITS   _u(0x00000004)
    +#define PADS_QSPI_GPIO_QSPI_SD3_PDE_MSB    _u(2)
    +#define PADS_QSPI_GPIO_QSPI_SD3_PDE_LSB    _u(2)
    +#define PADS_QSPI_GPIO_QSPI_SD3_PDE_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD3_SCHMITT
    +// Description : Enable schmitt trigger
    +#define PADS_QSPI_GPIO_QSPI_SD3_SCHMITT_RESET  _u(0x1)
    +#define PADS_QSPI_GPIO_QSPI_SD3_SCHMITT_BITS   _u(0x00000002)
    +#define PADS_QSPI_GPIO_QSPI_SD3_SCHMITT_MSB    _u(1)
    +#define PADS_QSPI_GPIO_QSPI_SD3_SCHMITT_LSB    _u(1)
    +#define PADS_QSPI_GPIO_QSPI_SD3_SCHMITT_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SD3_SLEWFAST
    +// Description : Slew rate control. 1 = Fast, 0 = Slow
    +#define PADS_QSPI_GPIO_QSPI_SD3_SLEWFAST_RESET  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SD3_SLEWFAST_BITS   _u(0x00000001)
    +#define PADS_QSPI_GPIO_QSPI_SD3_SLEWFAST_MSB    _u(0)
    +#define PADS_QSPI_GPIO_QSPI_SD3_SLEWFAST_LSB    _u(0)
    +#define PADS_QSPI_GPIO_QSPI_SD3_SLEWFAST_ACCESS "RW"
    +// =============================================================================
    +// Register    : PADS_QSPI_GPIO_QSPI_SS
    +// Description : Pad control register
    +#define PADS_QSPI_GPIO_QSPI_SS_OFFSET _u(0x00000018)
    +#define PADS_QSPI_GPIO_QSPI_SS_BITS   _u(0x000000ff)
    +#define PADS_QSPI_GPIO_QSPI_SS_RESET  _u(0x0000005a)
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SS_OD
    +// Description : Output disable. Has priority over output enable from
    +//               peripherals
    +#define PADS_QSPI_GPIO_QSPI_SS_OD_RESET  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SS_OD_BITS   _u(0x00000080)
    +#define PADS_QSPI_GPIO_QSPI_SS_OD_MSB    _u(7)
    +#define PADS_QSPI_GPIO_QSPI_SS_OD_LSB    _u(7)
    +#define PADS_QSPI_GPIO_QSPI_SS_OD_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SS_IE
    +// Description : Input enable
    +#define PADS_QSPI_GPIO_QSPI_SS_IE_RESET  _u(0x1)
    +#define PADS_QSPI_GPIO_QSPI_SS_IE_BITS   _u(0x00000040)
    +#define PADS_QSPI_GPIO_QSPI_SS_IE_MSB    _u(6)
    +#define PADS_QSPI_GPIO_QSPI_SS_IE_LSB    _u(6)
    +#define PADS_QSPI_GPIO_QSPI_SS_IE_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SS_DRIVE
    +// Description : Drive strength.
    +//               0x0 -> 2mA
    +//               0x1 -> 4mA
    +//               0x2 -> 8mA
    +//               0x3 -> 12mA
    +#define PADS_QSPI_GPIO_QSPI_SS_DRIVE_RESET      _u(0x1)
    +#define PADS_QSPI_GPIO_QSPI_SS_DRIVE_BITS       _u(0x00000030)
    +#define PADS_QSPI_GPIO_QSPI_SS_DRIVE_MSB        _u(5)
    +#define PADS_QSPI_GPIO_QSPI_SS_DRIVE_LSB        _u(4)
    +#define PADS_QSPI_GPIO_QSPI_SS_DRIVE_ACCESS     "RW"
    +#define PADS_QSPI_GPIO_QSPI_SS_DRIVE_VALUE_2MA  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SS_DRIVE_VALUE_4MA  _u(0x1)
    +#define PADS_QSPI_GPIO_QSPI_SS_DRIVE_VALUE_8MA  _u(0x2)
    +#define PADS_QSPI_GPIO_QSPI_SS_DRIVE_VALUE_12MA _u(0x3)
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SS_PUE
    +// Description : Pull up enable
    +#define PADS_QSPI_GPIO_QSPI_SS_PUE_RESET  _u(0x1)
    +#define PADS_QSPI_GPIO_QSPI_SS_PUE_BITS   _u(0x00000008)
    +#define PADS_QSPI_GPIO_QSPI_SS_PUE_MSB    _u(3)
    +#define PADS_QSPI_GPIO_QSPI_SS_PUE_LSB    _u(3)
    +#define PADS_QSPI_GPIO_QSPI_SS_PUE_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SS_PDE
    +// Description : Pull down enable
    +#define PADS_QSPI_GPIO_QSPI_SS_PDE_RESET  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SS_PDE_BITS   _u(0x00000004)
    +#define PADS_QSPI_GPIO_QSPI_SS_PDE_MSB    _u(2)
    +#define PADS_QSPI_GPIO_QSPI_SS_PDE_LSB    _u(2)
    +#define PADS_QSPI_GPIO_QSPI_SS_PDE_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SS_SCHMITT
    +// Description : Enable schmitt trigger
    +#define PADS_QSPI_GPIO_QSPI_SS_SCHMITT_RESET  _u(0x1)
    +#define PADS_QSPI_GPIO_QSPI_SS_SCHMITT_BITS   _u(0x00000002)
    +#define PADS_QSPI_GPIO_QSPI_SS_SCHMITT_MSB    _u(1)
    +#define PADS_QSPI_GPIO_QSPI_SS_SCHMITT_LSB    _u(1)
    +#define PADS_QSPI_GPIO_QSPI_SS_SCHMITT_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : PADS_QSPI_GPIO_QSPI_SS_SLEWFAST
    +// Description : Slew rate control. 1 = Fast, 0 = Slow
    +#define PADS_QSPI_GPIO_QSPI_SS_SLEWFAST_RESET  _u(0x0)
    +#define PADS_QSPI_GPIO_QSPI_SS_SLEWFAST_BITS   _u(0x00000001)
    +#define PADS_QSPI_GPIO_QSPI_SS_SLEWFAST_MSB    _u(0)
    +#define PADS_QSPI_GPIO_QSPI_SS_SLEWFAST_LSB    _u(0)
    +#define PADS_QSPI_GPIO_QSPI_SS_SLEWFAST_ACCESS "RW"
    +// =============================================================================
    +#endif // HARDWARE_REGS_PADS_QSPI_DEFINED
    diff --git a/src/bootroms/shared/read_flash_sreg.S b/src/bootroms/shared/read_flash_sreg.S
    new file mode 100644
    index 000000000..1c68e49ba
    --- /dev/null
    +++ b/src/bootroms/shared/read_flash_sreg.S
    @@ -0,0 +1,30 @@
    +/*
    + * Copyright (c) 2021 Raspberry Pi (Trading) Ltd.
    + *
    + * SPDX-License-Identifier: BSD-3-Clause
    + */
    +
    +#ifndef _BOOT2_HELPER_READ_FLASH_SREG
    +#define _BOOT2_HELPER_READ_FLASH_SREG
    +
    +#include "wait_ssi_ready.S"
    +
    +// Pass status read cmd into r0.
    +// Returns status value in r0.
    +.global read_flash_sreg
    +.type read_flash_sreg,%function
    +.thumb_func
    +read_flash_sreg:
    +    push {r1, lr}
    +    str r0, [r3, #SSI_DR0_OFFSET]
    +    // Dummy byte:
    +    str r0, [r3, #SSI_DR0_OFFSET]
    +    
    +    bl wait_ssi_ready
    +    // Discard first byte and combine the next two
    +    ldr r0, [r3, #SSI_DR0_OFFSET]
    +    ldr r0, [r3, #SSI_DR0_OFFSET]
    +
    +    pop {r1, pc}
    +
    +#endif
    diff --git a/src/bootroms/shared/regs.h b/src/bootroms/shared/regs.h
    new file mode 100644
    index 000000000..d2bafd8d9
    --- /dev/null
    +++ b/src/bootroms/shared/regs.h
    @@ -0,0 +1,11 @@
    +#ifndef RP2040_STAGE2_REGS_H
    +#define RP2040_STAGE2_REGS_H
    +
    +#define _u(x) x ## u
    +
    +#include "ssi.h"
    +#include "pads_qspi.h"
    +#include "addressmap.h"
    +#include "m0plus.h"
    +
    +#endif // RP2040_STAGE2_REGS_H
    \ No newline at end of file
    diff --git a/src/bootroms/shared/ssi.h b/src/bootroms/shared/ssi.h
    new file mode 100644
    index 000000000..67fddc0a4
    --- /dev/null
    +++ b/src/bootroms/shared/ssi.h
    @@ -0,0 +1,809 @@
    +/**
    + * Copyright (c) 2021 Raspberry Pi (Trading) Ltd.
    + *
    + * SPDX-License-Identifier: BSD-3-Clause
    + */
    +// =============================================================================
    +// Register block : SSI
    +// Version        : 1
    +// Bus type       : apb
    +// Description    : DW_apb_ssi has the following features:
    +//                  * APB interface – Allows for easy integration into a
    +//                  DesignWare Synthesizable Components for AMBA 2
    +//                  implementation.
    +//                  * APB3 and APB4 protocol support.
    +//                  * Scalable APB data bus width – Supports APB data bus widths
    +//                  of 8, 16, and 32 bits.
    +//                  * Serial-master or serial-slave operation – Enables serial
    +//                  communication with serial-master or serial-slave peripheral
    +//                  devices.
    +//                  * Programmable Dual/Quad/Octal SPI support in Master Mode.
    +//                  * Dual Data Rate (DDR) and Read Data Strobe (RDS) Support -
    +//                  Enables the DW_apb_ssi master to perform operations with the
    +//                  device in DDR and RDS modes when working in Dual/Quad/Octal
    +//                  mode of operation.
    +//                  * Data Mask Support - Enables the DW_apb_ssi to selectively
    +//                  update the bytes in the device. This feature is applicable
    +//                  only in enhanced SPI modes.
    +//                  * eXecute-In-Place (XIP) support - Enables the DW_apb_ssi
    +//                  master to behave as a memory mapped I/O and fetches the data
    +//                  from the device based on the APB read request. This feature
    +//                  is applicable only in enhanced SPI modes.
    +//                  * DMA Controller Interface – Enables the DW_apb_ssi to
    +//                  interface to a DMA controller over the bus using a
    +//                  handshaking interface for transfer requests.
    +//                  * Independent masking of interrupts – Master collision,
    +//                  transmit FIFO overflow, transmit FIFO empty, receive FIFO
    +//                  full, receive FIFO underflow, and receive FIFO overflow
    +//                  interrupts can all be masked independently.
    +//                  * Multi-master contention detection – Informs the processor
    +//                  of multiple serial-master accesses on the serial bus.
    +//                  * Bypass of meta-stability flip-flops for synchronous clocks
    +//                  – When the APB clock (pclk) and the DW_apb_ssi serial clock
    +//                  (ssi_clk) are synchronous, meta-stable flip-flops are not
    +//                  used when transferring control signals across these clock
    +//                  domains.
    +//                  * Programmable delay on the sample time of the received
    +//                  serial data bit (rxd); enables programmable control of
    +//                  routing delays resulting in higher serial data-bit rates.
    +//                  * Programmable features:
    +//                  - Serial interface operation – Choice of Motorola SPI, Texas
    +//                  Instruments Synchronous Serial Protocol or National
    +//                  Semiconductor Microwire.
    +//                  - Clock bit-rate – Dynamic control of the serial bit rate of
    +//                  the data transfer; used in only serial-master mode of
    +//                  operation.
    +//                  - Data Item size (4 to 32 bits) – Item size of each data
    +//                  transfer under the control of the programmer.
    +//                  * Configured features:
    +//                  - FIFO depth – 16 words deep. The FIFO width is fixed at 32
    +//                  bits.
    +//                  - 1 slave select output.
    +//                  - Hardware slave-select – Dedicated hardware slave-select
    +//                  line.
    +//                  - Combined interrupt line - one combined interrupt line from
    +//                  the DW_apb_ssi to the interrupt controller.
    +//                  - Interrupt polarity – active high interrupt lines.
    +//                  - Serial clock polarity – low serial-clock polarity directly
    +//                  after reset.
    +//                  - Serial clock phase – capture on first edge of serial-clock
    +//                  directly after reset.
    +// =============================================================================
    +#ifndef HARDWARE_REGS_SSI_DEFINED
    +#define HARDWARE_REGS_SSI_DEFINED
    +// =============================================================================
    +// Register    : SSI_CTRLR0
    +// Description : Control register 0
    +#define SSI_CTRLR0_OFFSET _u(0x00000000)
    +#define SSI_CTRLR0_BITS   _u(0x017fffff)
    +#define SSI_CTRLR0_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_CTRLR0_SSTE
    +// Description : Slave select toggle enable
    +#define SSI_CTRLR0_SSTE_RESET  _u(0x0)
    +#define SSI_CTRLR0_SSTE_BITS   _u(0x01000000)
    +#define SSI_CTRLR0_SSTE_MSB    _u(24)
    +#define SSI_CTRLR0_SSTE_LSB    _u(24)
    +#define SSI_CTRLR0_SSTE_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_CTRLR0_SPI_FRF
    +// Description : SPI frame format
    +//               0x0 -> Standard 1-bit SPI frame format; 1 bit per SCK,
    +//               full-duplex
    +//               0x1 -> Dual-SPI frame format; two bits per SCK, half-duplex
    +//               0x2 -> Quad-SPI frame format; four bits per SCK, half-duplex
    +#define SSI_CTRLR0_SPI_FRF_RESET      _u(0x0)
    +#define SSI_CTRLR0_SPI_FRF_BITS       _u(0x00600000)
    +#define SSI_CTRLR0_SPI_FRF_MSB        _u(22)
    +#define SSI_CTRLR0_SPI_FRF_LSB        _u(21)
    +#define SSI_CTRLR0_SPI_FRF_ACCESS     "RW"
    +#define SSI_CTRLR0_SPI_FRF_VALUE_STD  _u(0x0)
    +#define SSI_CTRLR0_SPI_FRF_VALUE_DUAL _u(0x1)
    +#define SSI_CTRLR0_SPI_FRF_VALUE_QUAD _u(0x2)
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_CTRLR0_DFS_32
    +// Description : Data frame size in 32b transfer mode
    +//               Value of n -> n+1 clocks per frame.
    +#define SSI_CTRLR0_DFS_32_RESET  _u(0x00)
    +#define SSI_CTRLR0_DFS_32_BITS   _u(0x001f0000)
    +#define SSI_CTRLR0_DFS_32_MSB    _u(20)
    +#define SSI_CTRLR0_DFS_32_LSB    _u(16)
    +#define SSI_CTRLR0_DFS_32_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_CTRLR0_CFS
    +// Description : Control frame size
    +//               Value of n -> n+1 clocks per frame.
    +#define SSI_CTRLR0_CFS_RESET  _u(0x0)
    +#define SSI_CTRLR0_CFS_BITS   _u(0x0000f000)
    +#define SSI_CTRLR0_CFS_MSB    _u(15)
    +#define SSI_CTRLR0_CFS_LSB    _u(12)
    +#define SSI_CTRLR0_CFS_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_CTRLR0_SRL
    +// Description : Shift register loop (test mode)
    +#define SSI_CTRLR0_SRL_RESET  _u(0x0)
    +#define SSI_CTRLR0_SRL_BITS   _u(0x00000800)
    +#define SSI_CTRLR0_SRL_MSB    _u(11)
    +#define SSI_CTRLR0_SRL_LSB    _u(11)
    +#define SSI_CTRLR0_SRL_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_CTRLR0_SLV_OE
    +// Description : Slave output enable
    +#define SSI_CTRLR0_SLV_OE_RESET  _u(0x0)
    +#define SSI_CTRLR0_SLV_OE_BITS   _u(0x00000400)
    +#define SSI_CTRLR0_SLV_OE_MSB    _u(10)
    +#define SSI_CTRLR0_SLV_OE_LSB    _u(10)
    +#define SSI_CTRLR0_SLV_OE_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_CTRLR0_TMOD
    +// Description : Transfer mode
    +//               0x0 -> Both transmit and receive
    +//               0x1 -> Transmit only (not for FRF == 0, standard SPI mode)
    +//               0x2 -> Receive only (not for FRF == 0, standard SPI mode)
    +//               0x3 -> EEPROM read mode (TX then RX; RX starts after control
    +//               data TX'd)
    +#define SSI_CTRLR0_TMOD_RESET             _u(0x0)
    +#define SSI_CTRLR0_TMOD_BITS              _u(0x00000300)
    +#define SSI_CTRLR0_TMOD_MSB               _u(9)
    +#define SSI_CTRLR0_TMOD_LSB               _u(8)
    +#define SSI_CTRLR0_TMOD_ACCESS            "RW"
    +#define SSI_CTRLR0_TMOD_VALUE_TX_AND_RX   _u(0x0)
    +#define SSI_CTRLR0_TMOD_VALUE_TX_ONLY     _u(0x1)
    +#define SSI_CTRLR0_TMOD_VALUE_RX_ONLY     _u(0x2)
    +#define SSI_CTRLR0_TMOD_VALUE_EEPROM_READ _u(0x3)
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_CTRLR0_SCPOL
    +// Description : Serial clock polarity
    +#define SSI_CTRLR0_SCPOL_RESET  _u(0x0)
    +#define SSI_CTRLR0_SCPOL_BITS   _u(0x00000080)
    +#define SSI_CTRLR0_SCPOL_MSB    _u(7)
    +#define SSI_CTRLR0_SCPOL_LSB    _u(7)
    +#define SSI_CTRLR0_SCPOL_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_CTRLR0_SCPH
    +// Description : Serial clock phase
    +#define SSI_CTRLR0_SCPH_RESET  _u(0x0)
    +#define SSI_CTRLR0_SCPH_BITS   _u(0x00000040)
    +#define SSI_CTRLR0_SCPH_MSB    _u(6)
    +#define SSI_CTRLR0_SCPH_LSB    _u(6)
    +#define SSI_CTRLR0_SCPH_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_CTRLR0_FRF
    +// Description : Frame format
    +#define SSI_CTRLR0_FRF_RESET  _u(0x0)
    +#define SSI_CTRLR0_FRF_BITS   _u(0x00000030)
    +#define SSI_CTRLR0_FRF_MSB    _u(5)
    +#define SSI_CTRLR0_FRF_LSB    _u(4)
    +#define SSI_CTRLR0_FRF_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_CTRLR0_DFS
    +// Description : Data frame size
    +#define SSI_CTRLR0_DFS_RESET  _u(0x0)
    +#define SSI_CTRLR0_DFS_BITS   _u(0x0000000f)
    +#define SSI_CTRLR0_DFS_MSB    _u(3)
    +#define SSI_CTRLR0_DFS_LSB    _u(0)
    +#define SSI_CTRLR0_DFS_ACCESS "RW"
    +// =============================================================================
    +// Register    : SSI_CTRLR1
    +// Description : Master Control register 1
    +#define SSI_CTRLR1_OFFSET _u(0x00000004)
    +#define SSI_CTRLR1_BITS   _u(0x0000ffff)
    +#define SSI_CTRLR1_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_CTRLR1_NDF
    +// Description : Number of data frames
    +#define SSI_CTRLR1_NDF_RESET  _u(0x0000)
    +#define SSI_CTRLR1_NDF_BITS   _u(0x0000ffff)
    +#define SSI_CTRLR1_NDF_MSB    _u(15)
    +#define SSI_CTRLR1_NDF_LSB    _u(0)
    +#define SSI_CTRLR1_NDF_ACCESS "RW"
    +// =============================================================================
    +// Register    : SSI_SSIENR
    +// Description : SSI Enable
    +#define SSI_SSIENR_OFFSET _u(0x00000008)
    +#define SSI_SSIENR_BITS   _u(0x00000001)
    +#define SSI_SSIENR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_SSIENR_SSI_EN
    +// Description : SSI enable
    +#define SSI_SSIENR_SSI_EN_RESET  _u(0x0)
    +#define SSI_SSIENR_SSI_EN_BITS   _u(0x00000001)
    +#define SSI_SSIENR_SSI_EN_MSB    _u(0)
    +#define SSI_SSIENR_SSI_EN_LSB    _u(0)
    +#define SSI_SSIENR_SSI_EN_ACCESS "RW"
    +// =============================================================================
    +// Register    : SSI_MWCR
    +// Description : Microwire Control
    +#define SSI_MWCR_OFFSET _u(0x0000000c)
    +#define SSI_MWCR_BITS   _u(0x00000007)
    +#define SSI_MWCR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_MWCR_MHS
    +// Description : Microwire handshaking
    +#define SSI_MWCR_MHS_RESET  _u(0x0)
    +#define SSI_MWCR_MHS_BITS   _u(0x00000004)
    +#define SSI_MWCR_MHS_MSB    _u(2)
    +#define SSI_MWCR_MHS_LSB    _u(2)
    +#define SSI_MWCR_MHS_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_MWCR_MDD
    +// Description : Microwire control
    +#define SSI_MWCR_MDD_RESET  _u(0x0)
    +#define SSI_MWCR_MDD_BITS   _u(0x00000002)
    +#define SSI_MWCR_MDD_MSB    _u(1)
    +#define SSI_MWCR_MDD_LSB    _u(1)
    +#define SSI_MWCR_MDD_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_MWCR_MWMOD
    +// Description : Microwire transfer mode
    +#define SSI_MWCR_MWMOD_RESET  _u(0x0)
    +#define SSI_MWCR_MWMOD_BITS   _u(0x00000001)
    +#define SSI_MWCR_MWMOD_MSB    _u(0)
    +#define SSI_MWCR_MWMOD_LSB    _u(0)
    +#define SSI_MWCR_MWMOD_ACCESS "RW"
    +// =============================================================================
    +// Register    : SSI_SER
    +// Description : Slave enable
    +//               For each bit:
    +//               0 -> slave not selected
    +//               1 -> slave selected
    +#define SSI_SER_OFFSET _u(0x00000010)
    +#define SSI_SER_BITS   _u(0x00000001)
    +#define SSI_SER_RESET  _u(0x00000000)
    +#define SSI_SER_MSB    _u(0)
    +#define SSI_SER_LSB    _u(0)
    +#define SSI_SER_ACCESS "RW"
    +// =============================================================================
    +// Register    : SSI_BAUDR
    +// Description : Baud rate
    +#define SSI_BAUDR_OFFSET _u(0x00000014)
    +#define SSI_BAUDR_BITS   _u(0x0000ffff)
    +#define SSI_BAUDR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_BAUDR_SCKDV
    +// Description : SSI clock divider
    +#define SSI_BAUDR_SCKDV_RESET  _u(0x0000)
    +#define SSI_BAUDR_SCKDV_BITS   _u(0x0000ffff)
    +#define SSI_BAUDR_SCKDV_MSB    _u(15)
    +#define SSI_BAUDR_SCKDV_LSB    _u(0)
    +#define SSI_BAUDR_SCKDV_ACCESS "RW"
    +// =============================================================================
    +// Register    : SSI_TXFTLR
    +// Description : TX FIFO threshold level
    +#define SSI_TXFTLR_OFFSET _u(0x00000018)
    +#define SSI_TXFTLR_BITS   _u(0x000000ff)
    +#define SSI_TXFTLR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_TXFTLR_TFT
    +// Description : Transmit FIFO threshold
    +#define SSI_TXFTLR_TFT_RESET  _u(0x00)
    +#define SSI_TXFTLR_TFT_BITS   _u(0x000000ff)
    +#define SSI_TXFTLR_TFT_MSB    _u(7)
    +#define SSI_TXFTLR_TFT_LSB    _u(0)
    +#define SSI_TXFTLR_TFT_ACCESS "RW"
    +// =============================================================================
    +// Register    : SSI_RXFTLR
    +// Description : RX FIFO threshold level
    +#define SSI_RXFTLR_OFFSET _u(0x0000001c)
    +#define SSI_RXFTLR_BITS   _u(0x000000ff)
    +#define SSI_RXFTLR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_RXFTLR_RFT
    +// Description : Receive FIFO threshold
    +#define SSI_RXFTLR_RFT_RESET  _u(0x00)
    +#define SSI_RXFTLR_RFT_BITS   _u(0x000000ff)
    +#define SSI_RXFTLR_RFT_MSB    _u(7)
    +#define SSI_RXFTLR_RFT_LSB    _u(0)
    +#define SSI_RXFTLR_RFT_ACCESS "RW"
    +// =============================================================================
    +// Register    : SSI_TXFLR
    +// Description : TX FIFO level
    +#define SSI_TXFLR_OFFSET _u(0x00000020)
    +#define SSI_TXFLR_BITS   _u(0x000000ff)
    +#define SSI_TXFLR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_TXFLR_TFTFL
    +// Description : Transmit FIFO level
    +#define SSI_TXFLR_TFTFL_RESET  _u(0x00)
    +#define SSI_TXFLR_TFTFL_BITS   _u(0x000000ff)
    +#define SSI_TXFLR_TFTFL_MSB    _u(7)
    +#define SSI_TXFLR_TFTFL_LSB    _u(0)
    +#define SSI_TXFLR_TFTFL_ACCESS "RO"
    +// =============================================================================
    +// Register    : SSI_RXFLR
    +// Description : RX FIFO level
    +#define SSI_RXFLR_OFFSET _u(0x00000024)
    +#define SSI_RXFLR_BITS   _u(0x000000ff)
    +#define SSI_RXFLR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_RXFLR_RXTFL
    +// Description : Receive FIFO level
    +#define SSI_RXFLR_RXTFL_RESET  _u(0x00)
    +#define SSI_RXFLR_RXTFL_BITS   _u(0x000000ff)
    +#define SSI_RXFLR_RXTFL_MSB    _u(7)
    +#define SSI_RXFLR_RXTFL_LSB    _u(0)
    +#define SSI_RXFLR_RXTFL_ACCESS "RO"
    +// =============================================================================
    +// Register    : SSI_SR
    +// Description : Status register
    +#define SSI_SR_OFFSET _u(0x00000028)
    +#define SSI_SR_BITS   _u(0x0000007f)
    +#define SSI_SR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_SR_DCOL
    +// Description : Data collision error
    +#define SSI_SR_DCOL_RESET  _u(0x0)
    +#define SSI_SR_DCOL_BITS   _u(0x00000040)
    +#define SSI_SR_DCOL_MSB    _u(6)
    +#define SSI_SR_DCOL_LSB    _u(6)
    +#define SSI_SR_DCOL_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_SR_TXE
    +// Description : Transmission error
    +#define SSI_SR_TXE_RESET  _u(0x0)
    +#define SSI_SR_TXE_BITS   _u(0x00000020)
    +#define SSI_SR_TXE_MSB    _u(5)
    +#define SSI_SR_TXE_LSB    _u(5)
    +#define SSI_SR_TXE_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_SR_RFF
    +// Description : Receive FIFO full
    +#define SSI_SR_RFF_RESET  _u(0x0)
    +#define SSI_SR_RFF_BITS   _u(0x00000010)
    +#define SSI_SR_RFF_MSB    _u(4)
    +#define SSI_SR_RFF_LSB    _u(4)
    +#define SSI_SR_RFF_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_SR_RFNE
    +// Description : Receive FIFO not empty
    +#define SSI_SR_RFNE_RESET  _u(0x0)
    +#define SSI_SR_RFNE_BITS   _u(0x00000008)
    +#define SSI_SR_RFNE_MSB    _u(3)
    +#define SSI_SR_RFNE_LSB    _u(3)
    +#define SSI_SR_RFNE_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_SR_TFE
    +// Description : Transmit FIFO empty
    +#define SSI_SR_TFE_RESET  _u(0x0)
    +#define SSI_SR_TFE_BITS   _u(0x00000004)
    +#define SSI_SR_TFE_MSB    _u(2)
    +#define SSI_SR_TFE_LSB    _u(2)
    +#define SSI_SR_TFE_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_SR_TFNF
    +// Description : Transmit FIFO not full
    +#define SSI_SR_TFNF_RESET  _u(0x0)
    +#define SSI_SR_TFNF_BITS   _u(0x00000002)
    +#define SSI_SR_TFNF_MSB    _u(1)
    +#define SSI_SR_TFNF_LSB    _u(1)
    +#define SSI_SR_TFNF_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_SR_BUSY
    +// Description : SSI busy flag
    +#define SSI_SR_BUSY_RESET  _u(0x0)
    +#define SSI_SR_BUSY_BITS   _u(0x00000001)
    +#define SSI_SR_BUSY_MSB    _u(0)
    +#define SSI_SR_BUSY_LSB    _u(0)
    +#define SSI_SR_BUSY_ACCESS "RO"
    +// =============================================================================
    +// Register    : SSI_IMR
    +// Description : Interrupt mask
    +#define SSI_IMR_OFFSET _u(0x0000002c)
    +#define SSI_IMR_BITS   _u(0x0000003f)
    +#define SSI_IMR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_IMR_MSTIM
    +// Description : Multi-master contention interrupt mask
    +#define SSI_IMR_MSTIM_RESET  _u(0x0)
    +#define SSI_IMR_MSTIM_BITS   _u(0x00000020)
    +#define SSI_IMR_MSTIM_MSB    _u(5)
    +#define SSI_IMR_MSTIM_LSB    _u(5)
    +#define SSI_IMR_MSTIM_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_IMR_RXFIM
    +// Description : Receive FIFO full interrupt mask
    +#define SSI_IMR_RXFIM_RESET  _u(0x0)
    +#define SSI_IMR_RXFIM_BITS   _u(0x00000010)
    +#define SSI_IMR_RXFIM_MSB    _u(4)
    +#define SSI_IMR_RXFIM_LSB    _u(4)
    +#define SSI_IMR_RXFIM_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_IMR_RXOIM
    +// Description : Receive FIFO overflow interrupt mask
    +#define SSI_IMR_RXOIM_RESET  _u(0x0)
    +#define SSI_IMR_RXOIM_BITS   _u(0x00000008)
    +#define SSI_IMR_RXOIM_MSB    _u(3)
    +#define SSI_IMR_RXOIM_LSB    _u(3)
    +#define SSI_IMR_RXOIM_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_IMR_RXUIM
    +// Description : Receive FIFO underflow interrupt mask
    +#define SSI_IMR_RXUIM_RESET  _u(0x0)
    +#define SSI_IMR_RXUIM_BITS   _u(0x00000004)
    +#define SSI_IMR_RXUIM_MSB    _u(2)
    +#define SSI_IMR_RXUIM_LSB    _u(2)
    +#define SSI_IMR_RXUIM_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_IMR_TXOIM
    +// Description : Transmit FIFO overflow interrupt mask
    +#define SSI_IMR_TXOIM_RESET  _u(0x0)
    +#define SSI_IMR_TXOIM_BITS   _u(0x00000002)
    +#define SSI_IMR_TXOIM_MSB    _u(1)
    +#define SSI_IMR_TXOIM_LSB    _u(1)
    +#define SSI_IMR_TXOIM_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_IMR_TXEIM
    +// Description : Transmit FIFO empty interrupt mask
    +#define SSI_IMR_TXEIM_RESET  _u(0x0)
    +#define SSI_IMR_TXEIM_BITS   _u(0x00000001)
    +#define SSI_IMR_TXEIM_MSB    _u(0)
    +#define SSI_IMR_TXEIM_LSB    _u(0)
    +#define SSI_IMR_TXEIM_ACCESS "RW"
    +// =============================================================================
    +// Register    : SSI_ISR
    +// Description : Interrupt status
    +#define SSI_ISR_OFFSET _u(0x00000030)
    +#define SSI_ISR_BITS   _u(0x0000003f)
    +#define SSI_ISR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_ISR_MSTIS
    +// Description : Multi-master contention interrupt status
    +#define SSI_ISR_MSTIS_RESET  _u(0x0)
    +#define SSI_ISR_MSTIS_BITS   _u(0x00000020)
    +#define SSI_ISR_MSTIS_MSB    _u(5)
    +#define SSI_ISR_MSTIS_LSB    _u(5)
    +#define SSI_ISR_MSTIS_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_ISR_RXFIS
    +// Description : Receive FIFO full interrupt status
    +#define SSI_ISR_RXFIS_RESET  _u(0x0)
    +#define SSI_ISR_RXFIS_BITS   _u(0x00000010)
    +#define SSI_ISR_RXFIS_MSB    _u(4)
    +#define SSI_ISR_RXFIS_LSB    _u(4)
    +#define SSI_ISR_RXFIS_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_ISR_RXOIS
    +// Description : Receive FIFO overflow interrupt status
    +#define SSI_ISR_RXOIS_RESET  _u(0x0)
    +#define SSI_ISR_RXOIS_BITS   _u(0x00000008)
    +#define SSI_ISR_RXOIS_MSB    _u(3)
    +#define SSI_ISR_RXOIS_LSB    _u(3)
    +#define SSI_ISR_RXOIS_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_ISR_RXUIS
    +// Description : Receive FIFO underflow interrupt status
    +#define SSI_ISR_RXUIS_RESET  _u(0x0)
    +#define SSI_ISR_RXUIS_BITS   _u(0x00000004)
    +#define SSI_ISR_RXUIS_MSB    _u(2)
    +#define SSI_ISR_RXUIS_LSB    _u(2)
    +#define SSI_ISR_RXUIS_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_ISR_TXOIS
    +// Description : Transmit FIFO overflow interrupt status
    +#define SSI_ISR_TXOIS_RESET  _u(0x0)
    +#define SSI_ISR_TXOIS_BITS   _u(0x00000002)
    +#define SSI_ISR_TXOIS_MSB    _u(1)
    +#define SSI_ISR_TXOIS_LSB    _u(1)
    +#define SSI_ISR_TXOIS_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_ISR_TXEIS
    +// Description : Transmit FIFO empty interrupt status
    +#define SSI_ISR_TXEIS_RESET  _u(0x0)
    +#define SSI_ISR_TXEIS_BITS   _u(0x00000001)
    +#define SSI_ISR_TXEIS_MSB    _u(0)
    +#define SSI_ISR_TXEIS_LSB    _u(0)
    +#define SSI_ISR_TXEIS_ACCESS "RO"
    +// =============================================================================
    +// Register    : SSI_RISR
    +// Description : Raw interrupt status
    +#define SSI_RISR_OFFSET _u(0x00000034)
    +#define SSI_RISR_BITS   _u(0x0000003f)
    +#define SSI_RISR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_RISR_MSTIR
    +// Description : Multi-master contention raw interrupt status
    +#define SSI_RISR_MSTIR_RESET  _u(0x0)
    +#define SSI_RISR_MSTIR_BITS   _u(0x00000020)
    +#define SSI_RISR_MSTIR_MSB    _u(5)
    +#define SSI_RISR_MSTIR_LSB    _u(5)
    +#define SSI_RISR_MSTIR_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_RISR_RXFIR
    +// Description : Receive FIFO full raw interrupt status
    +#define SSI_RISR_RXFIR_RESET  _u(0x0)
    +#define SSI_RISR_RXFIR_BITS   _u(0x00000010)
    +#define SSI_RISR_RXFIR_MSB    _u(4)
    +#define SSI_RISR_RXFIR_LSB    _u(4)
    +#define SSI_RISR_RXFIR_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_RISR_RXOIR
    +// Description : Receive FIFO overflow raw interrupt status
    +#define SSI_RISR_RXOIR_RESET  _u(0x0)
    +#define SSI_RISR_RXOIR_BITS   _u(0x00000008)
    +#define SSI_RISR_RXOIR_MSB    _u(3)
    +#define SSI_RISR_RXOIR_LSB    _u(3)
    +#define SSI_RISR_RXOIR_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_RISR_RXUIR
    +// Description : Receive FIFO underflow raw interrupt status
    +#define SSI_RISR_RXUIR_RESET  _u(0x0)
    +#define SSI_RISR_RXUIR_BITS   _u(0x00000004)
    +#define SSI_RISR_RXUIR_MSB    _u(2)
    +#define SSI_RISR_RXUIR_LSB    _u(2)
    +#define SSI_RISR_RXUIR_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_RISR_TXOIR
    +// Description : Transmit FIFO overflow raw interrupt status
    +#define SSI_RISR_TXOIR_RESET  _u(0x0)
    +#define SSI_RISR_TXOIR_BITS   _u(0x00000002)
    +#define SSI_RISR_TXOIR_MSB    _u(1)
    +#define SSI_RISR_TXOIR_LSB    _u(1)
    +#define SSI_RISR_TXOIR_ACCESS "RO"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_RISR_TXEIR
    +// Description : Transmit FIFO empty raw interrupt status
    +#define SSI_RISR_TXEIR_RESET  _u(0x0)
    +#define SSI_RISR_TXEIR_BITS   _u(0x00000001)
    +#define SSI_RISR_TXEIR_MSB    _u(0)
    +#define SSI_RISR_TXEIR_LSB    _u(0)
    +#define SSI_RISR_TXEIR_ACCESS "RO"
    +// =============================================================================
    +// Register    : SSI_TXOICR
    +// Description : TX FIFO overflow interrupt clear
    +//               Clear-on-read transmit FIFO overflow interrupt
    +#define SSI_TXOICR_OFFSET _u(0x00000038)
    +#define SSI_TXOICR_BITS   _u(0x00000001)
    +#define SSI_TXOICR_RESET  _u(0x00000000)
    +#define SSI_TXOICR_MSB    _u(0)
    +#define SSI_TXOICR_LSB    _u(0)
    +#define SSI_TXOICR_ACCESS "RO"
    +// =============================================================================
    +// Register    : SSI_RXOICR
    +// Description : RX FIFO overflow interrupt clear
    +//               Clear-on-read receive FIFO overflow interrupt
    +#define SSI_RXOICR_OFFSET _u(0x0000003c)
    +#define SSI_RXOICR_BITS   _u(0x00000001)
    +#define SSI_RXOICR_RESET  _u(0x00000000)
    +#define SSI_RXOICR_MSB    _u(0)
    +#define SSI_RXOICR_LSB    _u(0)
    +#define SSI_RXOICR_ACCESS "RO"
    +// =============================================================================
    +// Register    : SSI_RXUICR
    +// Description : RX FIFO underflow interrupt clear
    +//               Clear-on-read receive FIFO underflow interrupt
    +#define SSI_RXUICR_OFFSET _u(0x00000040)
    +#define SSI_RXUICR_BITS   _u(0x00000001)
    +#define SSI_RXUICR_RESET  _u(0x00000000)
    +#define SSI_RXUICR_MSB    _u(0)
    +#define SSI_RXUICR_LSB    _u(0)
    +#define SSI_RXUICR_ACCESS "RO"
    +// =============================================================================
    +// Register    : SSI_MSTICR
    +// Description : Multi-master interrupt clear
    +//               Clear-on-read multi-master contention interrupt
    +#define SSI_MSTICR_OFFSET _u(0x00000044)
    +#define SSI_MSTICR_BITS   _u(0x00000001)
    +#define SSI_MSTICR_RESET  _u(0x00000000)
    +#define SSI_MSTICR_MSB    _u(0)
    +#define SSI_MSTICR_LSB    _u(0)
    +#define SSI_MSTICR_ACCESS "RO"
    +// =============================================================================
    +// Register    : SSI_ICR
    +// Description : Interrupt clear
    +//               Clear-on-read all active interrupts
    +#define SSI_ICR_OFFSET _u(0x00000048)
    +#define SSI_ICR_BITS   _u(0x00000001)
    +#define SSI_ICR_RESET  _u(0x00000000)
    +#define SSI_ICR_MSB    _u(0)
    +#define SSI_ICR_LSB    _u(0)
    +#define SSI_ICR_ACCESS "RO"
    +// =============================================================================
    +// Register    : SSI_DMACR
    +// Description : DMA control
    +#define SSI_DMACR_OFFSET _u(0x0000004c)
    +#define SSI_DMACR_BITS   _u(0x00000003)
    +#define SSI_DMACR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_DMACR_TDMAE
    +// Description : Transmit DMA enable
    +#define SSI_DMACR_TDMAE_RESET  _u(0x0)
    +#define SSI_DMACR_TDMAE_BITS   _u(0x00000002)
    +#define SSI_DMACR_TDMAE_MSB    _u(1)
    +#define SSI_DMACR_TDMAE_LSB    _u(1)
    +#define SSI_DMACR_TDMAE_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_DMACR_RDMAE
    +// Description : Receive DMA enable
    +#define SSI_DMACR_RDMAE_RESET  _u(0x0)
    +#define SSI_DMACR_RDMAE_BITS   _u(0x00000001)
    +#define SSI_DMACR_RDMAE_MSB    _u(0)
    +#define SSI_DMACR_RDMAE_LSB    _u(0)
    +#define SSI_DMACR_RDMAE_ACCESS "RW"
    +// =============================================================================
    +// Register    : SSI_DMATDLR
    +// Description : DMA TX data level
    +#define SSI_DMATDLR_OFFSET _u(0x00000050)
    +#define SSI_DMATDLR_BITS   _u(0x000000ff)
    +#define SSI_DMATDLR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_DMATDLR_DMATDL
    +// Description : Transmit data watermark level
    +#define SSI_DMATDLR_DMATDL_RESET  _u(0x00)
    +#define SSI_DMATDLR_DMATDL_BITS   _u(0x000000ff)
    +#define SSI_DMATDLR_DMATDL_MSB    _u(7)
    +#define SSI_DMATDLR_DMATDL_LSB    _u(0)
    +#define SSI_DMATDLR_DMATDL_ACCESS "RW"
    +// =============================================================================
    +// Register    : SSI_DMARDLR
    +// Description : DMA RX data level
    +#define SSI_DMARDLR_OFFSET _u(0x00000054)
    +#define SSI_DMARDLR_BITS   _u(0x000000ff)
    +#define SSI_DMARDLR_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_DMARDLR_DMARDL
    +// Description : Receive data watermark level (DMARDLR+1)
    +#define SSI_DMARDLR_DMARDL_RESET  _u(0x00)
    +#define SSI_DMARDLR_DMARDL_BITS   _u(0x000000ff)
    +#define SSI_DMARDLR_DMARDL_MSB    _u(7)
    +#define SSI_DMARDLR_DMARDL_LSB    _u(0)
    +#define SSI_DMARDLR_DMARDL_ACCESS "RW"
    +// =============================================================================
    +// Register    : SSI_IDR
    +// Description : Identification register
    +#define SSI_IDR_OFFSET _u(0x00000058)
    +#define SSI_IDR_BITS   _u(0xffffffff)
    +#define SSI_IDR_RESET  _u(0x51535049)
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_IDR_IDCODE
    +// Description : Peripheral dentification code
    +#define SSI_IDR_IDCODE_RESET  _u(0x51535049)
    +#define SSI_IDR_IDCODE_BITS   _u(0xffffffff)
    +#define SSI_IDR_IDCODE_MSB    _u(31)
    +#define SSI_IDR_IDCODE_LSB    _u(0)
    +#define SSI_IDR_IDCODE_ACCESS "RO"
    +// =============================================================================
    +// Register    : SSI_SSI_VERSION_ID
    +// Description : Version ID
    +#define SSI_SSI_VERSION_ID_OFFSET _u(0x0000005c)
    +#define SSI_SSI_VERSION_ID_BITS   _u(0xffffffff)
    +#define SSI_SSI_VERSION_ID_RESET  _u(0x3430312a)
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_SSI_VERSION_ID_SSI_COMP_VERSION
    +// Description : SNPS component version (format X.YY)
    +#define SSI_SSI_VERSION_ID_SSI_COMP_VERSION_RESET  _u(0x3430312a)
    +#define SSI_SSI_VERSION_ID_SSI_COMP_VERSION_BITS   _u(0xffffffff)
    +#define SSI_SSI_VERSION_ID_SSI_COMP_VERSION_MSB    _u(31)
    +#define SSI_SSI_VERSION_ID_SSI_COMP_VERSION_LSB    _u(0)
    +#define SSI_SSI_VERSION_ID_SSI_COMP_VERSION_ACCESS "RO"
    +// =============================================================================
    +// Register    : SSI_DR0
    +// Description : Data Register 0 (of 36)
    +#define SSI_DR0_OFFSET _u(0x00000060)
    +#define SSI_DR0_BITS   _u(0xffffffff)
    +#define SSI_DR0_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_DR0_DR
    +// Description : First data register of 36
    +#define SSI_DR0_DR_RESET  _u(0x00000000)
    +#define SSI_DR0_DR_BITS   _u(0xffffffff)
    +#define SSI_DR0_DR_MSB    _u(31)
    +#define SSI_DR0_DR_LSB    _u(0)
    +#define SSI_DR0_DR_ACCESS "RW"
    +// =============================================================================
    +// Register    : SSI_RX_SAMPLE_DLY
    +// Description : RX sample delay
    +#define SSI_RX_SAMPLE_DLY_OFFSET _u(0x000000f0)
    +#define SSI_RX_SAMPLE_DLY_BITS   _u(0x000000ff)
    +#define SSI_RX_SAMPLE_DLY_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_RX_SAMPLE_DLY_RSD
    +// Description : RXD sample delay (in SCLK cycles)
    +#define SSI_RX_SAMPLE_DLY_RSD_RESET  _u(0x00)
    +#define SSI_RX_SAMPLE_DLY_RSD_BITS   _u(0x000000ff)
    +#define SSI_RX_SAMPLE_DLY_RSD_MSB    _u(7)
    +#define SSI_RX_SAMPLE_DLY_RSD_LSB    _u(0)
    +#define SSI_RX_SAMPLE_DLY_RSD_ACCESS "RW"
    +// =============================================================================
    +// Register    : SSI_SPI_CTRLR0
    +// Description : SPI control
    +#define SSI_SPI_CTRLR0_OFFSET _u(0x000000f4)
    +#define SSI_SPI_CTRLR0_BITS   _u(0xff07fb3f)
    +#define SSI_SPI_CTRLR0_RESET  _u(0x03000000)
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_SPI_CTRLR0_XIP_CMD
    +// Description : SPI Command to send in XIP mode (INST_L = 8-bit) or to append
    +//               to Address (INST_L = 0-bit)
    +#define SSI_SPI_CTRLR0_XIP_CMD_RESET  _u(0x03)
    +#define SSI_SPI_CTRLR0_XIP_CMD_BITS   _u(0xff000000)
    +#define SSI_SPI_CTRLR0_XIP_CMD_MSB    _u(31)
    +#define SSI_SPI_CTRLR0_XIP_CMD_LSB    _u(24)
    +#define SSI_SPI_CTRLR0_XIP_CMD_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_SPI_CTRLR0_SPI_RXDS_EN
    +// Description : Read data strobe enable
    +#define SSI_SPI_CTRLR0_SPI_RXDS_EN_RESET  _u(0x0)
    +#define SSI_SPI_CTRLR0_SPI_RXDS_EN_BITS   _u(0x00040000)
    +#define SSI_SPI_CTRLR0_SPI_RXDS_EN_MSB    _u(18)
    +#define SSI_SPI_CTRLR0_SPI_RXDS_EN_LSB    _u(18)
    +#define SSI_SPI_CTRLR0_SPI_RXDS_EN_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_SPI_CTRLR0_INST_DDR_EN
    +// Description : Instruction DDR transfer enable
    +#define SSI_SPI_CTRLR0_INST_DDR_EN_RESET  _u(0x0)
    +#define SSI_SPI_CTRLR0_INST_DDR_EN_BITS   _u(0x00020000)
    +#define SSI_SPI_CTRLR0_INST_DDR_EN_MSB    _u(17)
    +#define SSI_SPI_CTRLR0_INST_DDR_EN_LSB    _u(17)
    +#define SSI_SPI_CTRLR0_INST_DDR_EN_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_SPI_CTRLR0_SPI_DDR_EN
    +// Description : SPI DDR transfer enable
    +#define SSI_SPI_CTRLR0_SPI_DDR_EN_RESET  _u(0x0)
    +#define SSI_SPI_CTRLR0_SPI_DDR_EN_BITS   _u(0x00010000)
    +#define SSI_SPI_CTRLR0_SPI_DDR_EN_MSB    _u(16)
    +#define SSI_SPI_CTRLR0_SPI_DDR_EN_LSB    _u(16)
    +#define SSI_SPI_CTRLR0_SPI_DDR_EN_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_SPI_CTRLR0_WAIT_CYCLES
    +// Description : Wait cycles between control frame transmit and data reception
    +//               (in SCLK cycles)
    +#define SSI_SPI_CTRLR0_WAIT_CYCLES_RESET  _u(0x00)
    +#define SSI_SPI_CTRLR0_WAIT_CYCLES_BITS   _u(0x0000f800)
    +#define SSI_SPI_CTRLR0_WAIT_CYCLES_MSB    _u(15)
    +#define SSI_SPI_CTRLR0_WAIT_CYCLES_LSB    _u(11)
    +#define SSI_SPI_CTRLR0_WAIT_CYCLES_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_SPI_CTRLR0_INST_L
    +// Description : Instruction length (0/4/8/16b)
    +//               0x0 -> No instruction
    +//               0x1 -> 4-bit instruction
    +//               0x2 -> 8-bit instruction
    +//               0x3 -> 16-bit instruction
    +#define SSI_SPI_CTRLR0_INST_L_RESET      _u(0x0)
    +#define SSI_SPI_CTRLR0_INST_L_BITS       _u(0x00000300)
    +#define SSI_SPI_CTRLR0_INST_L_MSB        _u(9)
    +#define SSI_SPI_CTRLR0_INST_L_LSB        _u(8)
    +#define SSI_SPI_CTRLR0_INST_L_ACCESS     "RW"
    +#define SSI_SPI_CTRLR0_INST_L_VALUE_NONE _u(0x0)
    +#define SSI_SPI_CTRLR0_INST_L_VALUE_4B   _u(0x1)
    +#define SSI_SPI_CTRLR0_INST_L_VALUE_8B   _u(0x2)
    +#define SSI_SPI_CTRLR0_INST_L_VALUE_16B  _u(0x3)
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_SPI_CTRLR0_ADDR_L
    +// Description : Address length (0b-60b in 4b increments)
    +#define SSI_SPI_CTRLR0_ADDR_L_RESET  _u(0x0)
    +#define SSI_SPI_CTRLR0_ADDR_L_BITS   _u(0x0000003c)
    +#define SSI_SPI_CTRLR0_ADDR_L_MSB    _u(5)
    +#define SSI_SPI_CTRLR0_ADDR_L_LSB    _u(2)
    +#define SSI_SPI_CTRLR0_ADDR_L_ACCESS "RW"
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_SPI_CTRLR0_TRANS_TYPE
    +// Description : Address and instruction transfer format
    +//               0x0 -> Command and address both in standard SPI frame format
    +//               0x1 -> Command in standard SPI format, address in format
    +//               specified by FRF
    +//               0x2 -> Command and address both in format specified by FRF
    +//               (e.g. Dual-SPI)
    +#define SSI_SPI_CTRLR0_TRANS_TYPE_RESET      _u(0x0)
    +#define SSI_SPI_CTRLR0_TRANS_TYPE_BITS       _u(0x00000003)
    +#define SSI_SPI_CTRLR0_TRANS_TYPE_MSB        _u(1)
    +#define SSI_SPI_CTRLR0_TRANS_TYPE_LSB        _u(0)
    +#define SSI_SPI_CTRLR0_TRANS_TYPE_ACCESS     "RW"
    +#define SSI_SPI_CTRLR0_TRANS_TYPE_VALUE_1C1A _u(0x0)
    +#define SSI_SPI_CTRLR0_TRANS_TYPE_VALUE_1C2A _u(0x1)
    +#define SSI_SPI_CTRLR0_TRANS_TYPE_VALUE_2C2A _u(0x2)
    +// =============================================================================
    +// Register    : SSI_TXD_DRIVE_EDGE
    +// Description : TX drive edge
    +#define SSI_TXD_DRIVE_EDGE_OFFSET _u(0x000000f8)
    +#define SSI_TXD_DRIVE_EDGE_BITS   _u(0x000000ff)
    +#define SSI_TXD_DRIVE_EDGE_RESET  _u(0x00000000)
    +// -----------------------------------------------------------------------------
    +// Field       : SSI_TXD_DRIVE_EDGE_TDE
    +// Description : TXD drive edge
    +#define SSI_TXD_DRIVE_EDGE_TDE_RESET  _u(0x00)
    +#define SSI_TXD_DRIVE_EDGE_TDE_BITS   _u(0x000000ff)
    +#define SSI_TXD_DRIVE_EDGE_TDE_MSB    _u(7)
    +#define SSI_TXD_DRIVE_EDGE_TDE_LSB    _u(0)
    +#define SSI_TXD_DRIVE_EDGE_TDE_ACCESS "RW"
    +// =============================================================================
    +#endif // HARDWARE_REGS_SSI_DEFINED
    diff --git a/src/bootroms/shared/stage2.ld b/src/bootroms/shared/stage2.ld
    new file mode 100644
    index 000000000..452281d12
    --- /dev/null
    +++ b/src/bootroms/shared/stage2.ld
    @@ -0,0 +1,31 @@
    +/*
    + * Target CPU:  ARM Cortex-M0+
    + * Target Chip: RP2040
    + */
    +
    +ENTRY(_stage2_boot);
    +
    +MEMORY
    +{
    +  flash0 (rx!w) : ORIGIN = 0x10000000, LENGTH = 0x00200000
    +  ram0   (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000
    +}
    +
    +SECTIONS
    +{
    +  .text : {
    +    KEEP (*(.text))
    +    *(.rodata*)
    +  } > flash0
    +
    +  .ARM.exidx : {
    +      *(.ARM.exidx* .gnu.linkonce.armexidx.*)
    +  } >flash0
    +
    +
    +  .data :
    +  {
    +     *(.data*)
    +      *(.bss*)
    +  } > ram0 /* AT> flash0 */
    +}
    diff --git a/src/bootroms/shared/wait_ssi_ready.S b/src/bootroms/shared/wait_ssi_ready.S
    new file mode 100644
    index 000000000..2e49b6489
    --- /dev/null
    +++ b/src/bootroms/shared/wait_ssi_ready.S
    @@ -0,0 +1,26 @@
    +/*
    + * Copyright (c) 2021 Raspberry Pi (Trading) Ltd.
    + *
    + * SPDX-License-Identifier: BSD-3-Clause
    + */
    +
    +#ifndef _BOOT2_HELPER_WAIT_SSI_READY
    +#define _BOOT2_HELPER_WAIT_SSI_READY
    +
    +wait_ssi_ready:
    +    push {r0, r1, lr}
    +
    +    // Command is complete when there is nothing left to send
    +    // (TX FIFO empty) and SSI is no longer busy (CSn deasserted)
    +1:
    +    ldr r1, [r3, #SSI_SR_OFFSET]
    +    movs r0, #SSI_SR_TFE_BITS
    +    tst r1, r0
    +    beq 1b
    +    movs r0, #SSI_SR_BUSY_BITS
    +    tst r1, r0
    +    bne 1b
    +
    +    pop {r0, r1, pc}
    +
    +#endif
    diff --git a/src/bootroms/w25q080.S b/src/bootroms/w25q080.S
    new file mode 100644
    index 000000000..566392632
    --- /dev/null
    +++ b/src/bootroms/w25q080.S
    @@ -0,0 +1,280 @@
    +// ----------------------------------------------------------------------------
    +// Second stage boot code
    +// Copyright (c) 2019-2021 Raspberry Pi (Trading) Ltd.
    +// SPDX-License-Identifier: BSD-3-Clause
    +//
    +// Device:      Winbond W25Q080
    +//              Also supports W25Q16JV (which has some different SR instructions)
    +//              Also supports AT25SF081
    +//              Also supports S25FL132K0
    +//
    +// Description: Configures W25Q080 to run in Quad I/O continuous read XIP mode
    +//
    +// Details:     * Check status register 2 to determine if QSPI mode is enabled,
    +//                and perform an SR2 programming cycle if necessary.
    +//              * Use SSI to perform a dummy 0xEB read command, with the mode
    +//                continuation bits set, so that the flash will not require
    +//                0xEB instruction prefix on subsequent reads.
    +//              * Configure SSI to write address, mode bits, but no instruction.
    +//                SSI + flash are now jointly in a state where continuous reads
    +//                can take place.
    +//              * Jump to exit pointer passed in via lr. Bootrom passes null,
    +//                in which case this code uses a default 256 byte flash offset
    +//
    +// Building:    * This code must be position-independent, and use stack only
    +//              * The code will be padded to a size of 256 bytes, including a
    +//                4-byte checksum. Therefore code size cannot exceed 252 bytes.
    +// ----------------------------------------------------------------------------
    +
    +#include "shared/asm_helper.S"
    +#include "shared/regs.h"
    +
    +// ----------------------------------------------------------------------------
    +// Config section
    +// ----------------------------------------------------------------------------
    +// It should be possible to support most flash devices by modifying this section
    +
    +// The serial flash interface will run at clk_sys/PICO_FLASH_SPI_CLKDIV.
    +// This must be a positive, even integer.
    +// The bootrom is very conservative with SPI frequency, but here we should be
    +// as aggressive as possible.
    +
    +#ifndef PICO_FLASH_SPI_CLKDIV
    +#define PICO_FLASH_SPI_CLKDIV 4
    +#endif
    +#if PICO_FLASH_SPI_CLKDIV & 1
    +#error PICO_FLASH_SPI_CLKDIV must be even
    +#endif
    +
    +// Define interface width: single/dual/quad IO
    +#define FRAME_FORMAT SSI_CTRLR0_SPI_FRF_VALUE_QUAD
    +
    +// For W25Q080 this is the "Read data fast quad IO" instruction:
    +#define CMD_READ 0xeb
    +
    +// "Mode bits" are 8 special bits sent immediately after
    +// the address bits in a "Read Data Fast Quad I/O" command sequence. 
    +// On W25Q080, the four LSBs are don't care, and if MSBs == 0xa, the
    +// next read does not require the 0xeb instruction prefix.
    +#define MODE_CONTINUOUS_READ 0xa0
    +
    +// The number of address + mode bits, divided by 4 (always 4, not function of
    +// interface width).
    +#define ADDR_L 8
    +
    +// How many clocks of Hi-Z following the mode bits. For W25Q080, 4 dummy cycles
    +// are required.
    +#define WAIT_CYCLES 4
    +
    +// If defined, we will read status reg, compare to SREG_DATA, and overwrite
    +// with our value if the SR doesn't match.
    +// We do a two-byte write to SR1 (01h cmd) rather than a one-byte write to
    +// SR2 (31h cmd) as the latter command isn't supported by WX25Q080.
    +// This isn't great because it will remove block protections.
    +// A better solution is to use a volatile SR write if your device supports it.
    +#define PROGRAM_STATUS_REG
    +
    +#define CMD_WRITE_ENABLE 0x06
    +#define CMD_READ_STATUS 0x05
    +#define CMD_READ_STATUS2 0x35
    +#define CMD_WRITE_STATUS 0x01
    +#define SREG_DATA 0x02  // Enable quad-SPI mode
    +
    +// ----------------------------------------------------------------------------
    +// Start of 2nd Stage Boot Code
    +// ----------------------------------------------------------------------------
    +
    +pico_default_asm_setup
    +
    +.section .text
    +
    +// The exit point is passed in lr. If entered from bootrom, this will be the
    +// flash address immediately following this second stage (0x10000100).
    +// Otherwise it will be a return address -- second stage being called as a
    +// function by user code, after copying out of XIP region. r3 holds SSI base,
    +// r0...2 used as temporaries. Other GPRs not used.
    +regular_func _stage2_boot
    +    push {lr}
    +
    +    // Set pad configuration:
    +    // - SCLK 8mA drive, no slew limiting
    +    // - SDx disable input Schmitt to reduce delay
    +
    +    ldr r3, =PADS_QSPI_BASE
    +    movs r0, #(2 << PADS_QSPI_GPIO_QSPI_SCLK_DRIVE_LSB | PADS_QSPI_GPIO_QSPI_SCLK_SLEWFAST_BITS)
    +    str r0, [r3, #PADS_QSPI_GPIO_QSPI_SCLK_OFFSET]
    +    ldr r0, [r3, #PADS_QSPI_GPIO_QSPI_SD0_OFFSET]
    +    movs r1, #PADS_QSPI_GPIO_QSPI_SD0_SCHMITT_BITS
    +    bics r0, r1
    +    str r0, [r3, #PADS_QSPI_GPIO_QSPI_SD0_OFFSET]
    +    str r0, [r3, #PADS_QSPI_GPIO_QSPI_SD1_OFFSET]
    +    str r0, [r3, #PADS_QSPI_GPIO_QSPI_SD2_OFFSET]
    +    str r0, [r3, #PADS_QSPI_GPIO_QSPI_SD3_OFFSET]
    +
    +    ldr r3, =XIP_SSI_BASE
    +
    +    // Disable SSI to allow further config
    +    movs r1, #0
    +    str r1, [r3, #SSI_SSIENR_OFFSET]
    +
    +    // Set baud rate
    +    movs r1, #PICO_FLASH_SPI_CLKDIV
    +    str r1, [r3, #SSI_BAUDR_OFFSET]
    +
    +    // Set 1-cycle sample delay. If PICO_FLASH_SPI_CLKDIV == 2 then this means,
    +    // if the flash launches data on SCLK posedge, we capture it at the time that
    +    // the next SCLK posedge is launched. This is shortly before that posedge
    +    // arrives at the flash, so data hold time should be ok. For
    +    // PICO_FLASH_SPI_CLKDIV > 2 this pretty much has no effect.
    +
    +    movs r1, #1
    +    movs r2, #SSI_RX_SAMPLE_DLY_OFFSET  // == 0xf0 so need 8 bits of offset significance
    +    str r1, [r3, r2]
    +
    +
    +// On QSPI parts we usually need a 01h SR-write command to enable QSPI mode
    +// (i.e. turn WPn and HOLDn into IO2/IO3)
    +#ifdef PROGRAM_STATUS_REG
    +program_sregs:
    +#define CTRL0_SPI_TXRX \
    +    (7 << SSI_CTRLR0_DFS_32_LSB) | /* 8 bits per data frame */ \
    +    (SSI_CTRLR0_TMOD_VALUE_TX_AND_RX << SSI_CTRLR0_TMOD_LSB)
    +
    +    ldr r1, =(CTRL0_SPI_TXRX)
    +    str r1, [r3, #SSI_CTRLR0_OFFSET]
    +
    +     // Enable SSI and select slave 0
    +    movs r1, #1
    +    str r1, [r3, #SSI_SSIENR_OFFSET]
    +
    +    // Check whether SR needs updating
    +    movs r0, #CMD_READ_STATUS2
    +    bl read_flash_sreg
    +    movs r2, #SREG_DATA
    +    cmp r0, r2
    +    beq skip_sreg_programming
    +
    +    // Send write enable command
    +    movs r1, #CMD_WRITE_ENABLE
    +    str r1, [r3, #SSI_DR0_OFFSET]
    +
    +    // Poll for completion and discard RX
    +    bl wait_ssi_ready
    +    ldr r1, [r3, #SSI_DR0_OFFSET]
    +
    +    // Send status write command followed by data bytes
    +    movs r1, #CMD_WRITE_STATUS
    +    str r1, [r3, #SSI_DR0_OFFSET]
    +    movs r0, #0
    +    str r0, [r3, #SSI_DR0_OFFSET]
    +    str r2, [r3, #SSI_DR0_OFFSET]
    +
    +    bl wait_ssi_ready
    +    ldr r1, [r3, #SSI_DR0_OFFSET]
    +    ldr r1, [r3, #SSI_DR0_OFFSET]
    +    ldr r1, [r3, #SSI_DR0_OFFSET]
    +
    +    // Poll status register for write completion
    +1:
    +    movs r0, #CMD_READ_STATUS
    +    bl read_flash_sreg
    +    movs r1, #1
    +    tst r0, r1
    +    bne 1b
    +
    +skip_sreg_programming:
    +
    +    // Disable SSI again so that it can be reconfigured
    +    movs r1, #0
    +    str r1, [r3, #SSI_SSIENR_OFFSET]
    +#endif
    +
    +// Currently the flash expects an 8 bit serial command prefix on every
    +// transfer, which is a waste of cycles. Perform a dummy Fast Read Quad I/O
    +// command, with mode bits set such that the flash will not expect a serial
    +// command prefix on *subsequent* transfers. We don't care about the results
    +// of the read, the important part is the mode bits.
    +
    +dummy_read:
    +#define CTRLR0_ENTER_XIP \
    +    (FRAME_FORMAT                          /* Quad I/O mode */                \
    +        << SSI_CTRLR0_SPI_FRF_LSB) |                                          \
    +    (31 << SSI_CTRLR0_DFS_32_LSB)  |       /* 32 data bits */                 \
    +    (SSI_CTRLR0_TMOD_VALUE_EEPROM_READ     /* Send INST/ADDR, Receive Data */ \
    +        << SSI_CTRLR0_TMOD_LSB)
    +
    +    ldr r1, =(CTRLR0_ENTER_XIP)
    +    str r1, [r3, #SSI_CTRLR0_OFFSET]
    +
    +    movs r1, #0x0                    // NDF=0 (single 32b read)
    +    str r1, [r3, #SSI_CTRLR1_OFFSET]
    +
    +#define SPI_CTRLR0_ENTER_XIP \
    +    (ADDR_L << SSI_SPI_CTRLR0_ADDR_L_LSB) |     /* Address + mode bits */ \
    +    (WAIT_CYCLES << SSI_SPI_CTRLR0_WAIT_CYCLES_LSB) | /* Hi-Z dummy clocks following address + mode */ \
    +    (SSI_SPI_CTRLR0_INST_L_VALUE_8B \
    +        << SSI_SPI_CTRLR0_INST_L_LSB) |        /* 8-bit instruction */ \
    +    (SSI_SPI_CTRLR0_TRANS_TYPE_VALUE_1C2A      /* Send Command in serial mode then address in Quad I/O mode */ \
    +        << SSI_SPI_CTRLR0_TRANS_TYPE_LSB)
    +
    +    ldr r1, =(SPI_CTRLR0_ENTER_XIP)
    +    ldr r0, =(XIP_SSI_BASE + SSI_SPI_CTRLR0_OFFSET)  // SPI_CTRL0 Register
    +    str r1, [r0]
    +
    +    movs r1, #1                      // Re-enable SSI
    +    str r1, [r3, #SSI_SSIENR_OFFSET]
    +
    +    movs r1, #CMD_READ
    +    str r1, [r3, #SSI_DR0_OFFSET]   // Push SPI command into TX FIFO
    +    movs r1, #MODE_CONTINUOUS_READ   // 32-bit: 24 address bits (we don't care, so 0) and M[7:4]=1010
    +    str r1, [r3, #SSI_DR0_OFFSET]   // Push Address into TX FIFO - this will trigger the transaction
    +
    +    // Poll for completion
    +    bl wait_ssi_ready
    +
    +// The flash is in a state where we can blast addresses in parallel, and get
    +// parallel data back. Now configure the SSI to translate XIP bus accesses
    +// into QSPI transfers of this form.
    +
    +    movs r1, #0
    +    str r1, [r3, #SSI_SSIENR_OFFSET]   // Disable SSI (and clear FIFO) to allow further config
    +
    +// Note that the INST_L field is used to select what XIP data gets pushed into
    +// the TX FIFO:
    +//      INST_L_0_BITS   {ADDR[23:0],XIP_CMD[7:0]}       Load "mode bits" into XIP_CMD
    +//      Anything else   {XIP_CMD[7:0],ADDR[23:0]}       Load SPI command into XIP_CMD
    +configure_ssi:
    +#define SPI_CTRLR0_XIP \
    +    (MODE_CONTINUOUS_READ                      /* Mode bits to keep flash in continuous read mode */ \
    +        << SSI_SPI_CTRLR0_XIP_CMD_LSB) | \
    +    (ADDR_L << SSI_SPI_CTRLR0_ADDR_L_LSB) |    /* Total number of address + mode bits */ \
    +    (WAIT_CYCLES << SSI_SPI_CTRLR0_WAIT_CYCLES_LSB) |    /* Hi-Z dummy clocks following address + mode */ \
    +    (SSI_SPI_CTRLR0_INST_L_VALUE_NONE          /* Do not send a command, instead send XIP_CMD as mode bits after address */ \
    +        << SSI_SPI_CTRLR0_INST_L_LSB) | \
    +    (SSI_SPI_CTRLR0_TRANS_TYPE_VALUE_2C2A      /* Send Address in Quad I/O mode (and Command but that is zero bits long) */ \
    +        << SSI_SPI_CTRLR0_TRANS_TYPE_LSB)
    +
    +    ldr r1, =(SPI_CTRLR0_XIP)
    +    ldr r0, =(XIP_SSI_BASE + SSI_SPI_CTRLR0_OFFSET)
    +    str r1, [r0]
    +
    +    movs r1, #1
    +    str r1, [r3, #SSI_SSIENR_OFFSET]   // Re-enable SSI
    +
    +// Bus accesses to the XIP window will now be transparently serviced by the
    +// external flash on cache miss. We are ready to run code from flash.
    +
    +// Pull in standard exit routine
    +#include "shared/exit_from_boot2.S"
    +
    +// Common functions
    +#include "shared/wait_ssi_ready.S"
    +#ifdef PROGRAM_STATUS_REG
    +#include "shared/read_flash_sreg.S"
    +#endif
    +
    +.global literals
    +literals:
    +.ltorg
    +
    +.end
    diff --git a/src/bootroms/w25x10cl.S b/src/bootroms/w25x10cl.S
    new file mode 100644
    index 000000000..aab3f897f
    --- /dev/null
    +++ b/src/bootroms/w25x10cl.S
    @@ -0,0 +1,191 @@
    +// ----------------------------------------------------------------------------
    +// Second stage boot code
    +// Copyright (c) 2019-2021 Raspberry Pi (Trading) Ltd.
    +// SPDX-License-Identifier: BSD-3-Clause
    +//
    +// Device:      Winbond W25X10CL
    +//
    +// Description: Configures W25X10CL to run in Dual I/O continuous read XIP mode
    +//
    +// Details:     * Disable SSI
    +//              * Configure SSI to generate 8b command + 28b address + 2 wait,
    +//                with address and data using dual SPI mode
    +//              * Enable SSI
    +//              * Generate dummy read with command = 0xBB, top 24b of address
    +//                of 0x000000 followed by M[7:0]=0010zzzz (with the HiZ being
    +//                generated by 2 wait cycles).  This leaves the W25X10CL in
    +//                continuous read mode
    +//              * Disable SSI
    +//              * Configure SSI to generate 0b command + 28b address + 2 wait,
    +//                with the extra 4 bits of address LSB being 0x2 to keep the
    +//                W25X10CL in continuous read mode forever
    +//              * Enable SSI
    +//              * Set VTOR = 0x10000100
    +//              * Read MSP reset vector from 0x10000100 and write to MSP (this
    +//                will also enable XIP mode in the SSI wrapper)
    +//              * Read PC reset vector from 0x10000104 and jump to it
    +//
    +// Building:    * This code must be linked to run at 0x20000000
    +//              * The code will be padded to a size of 256 bytes, including a
    +//                4-byte checksum. Therefore code size cannot exceed 252 bytes.
    +// ----------------------------------------------------------------------------
    +
    +#include "shared/asm_helper.S"
    +#include "shared/regs.h"
    +
    +// The serial flash interface will run at clk_sys/PICO_FLASH_SPI_CLKDIV.
    +// This must be an even number.
    +#ifndef PICO_FLASH_SPI_CLKDIV
    +#define PICO_FLASH_SPI_CLKDIV 4
    +#endif
    +
    +pico_default_asm_setup
    +
    +// ----------------------------------------------------------------------------
    +// The "System Control Block" is a set of internal Cortex-M0+ control registers
    +// that are memory mapped and accessed like any other H/W register.  They have
    +// fixed addresses in the address map of every Cortex-M0+ system.
    +// ----------------------------------------------------------------------------
    +
    +.equ SCB_VTOR,          0xE000ED08      // RW Vector Table Offset Register
    +
    +// ----------------------------------------------------------------------------
    +// Winbond W25X10CL Supported Commands
    +// Taken from "w25x10cl_reg_021714.pdf"
    +// ----------------------------------------------------------------------------
    +
    +.equ W25X10CL_CMD_READ_DATA_FAST_DUAL_IO, 0xbb
    +
    +// ----------------------------------------------------------------------------
    +// Winbond W25X10CL "Mode bits" are 8 special bits sent immediately after
    +// the address bits in a "Read Data Fast Dual I/O" command sequence.
    +// Of M[7:4], they say M[7:6] are reserved (set to zero), and bits M[3:0]
    +// are don't care (we HiZ).  Only M[5:4] are used, and they must be set
    +// to M[5:4] = 2'b10 to enable continuous read mode.
    +// ----------------------------------------------------------------------------
    +
    +.equ W25X10CL_MODE_CONTINUOUS_READ,        0x20
    +
    +// ----------------------------------------------------------------------------
    +// Start of 2nd Stage Boot Code
    +// ----------------------------------------------------------------------------
    +
    +.org 0
    +
    +.section .text
    +
    +// This code will get copied to 0x20000000 and then executed
    +
    +regular_func _stage2_boot
    +    push {lr}
    +    ldr r3, =XIP_SSI_BASE                // Use as base address where possible
    +
    +// We are primarily interested in setting up Flash for DSPI XIP w/ continuous read
    +
    +    movs r1, #0
    +    str r1, [r3, #SSI_SSIENR_OFFSET] // Disable SSI to allow further config
    +
    +// The Boot ROM sets a very conservative SPI clock frequency to be sure it can
    +// read the initial 256 bytes from any device.  Here we can be more aggressive.
    +
    +    movs r1, #PICO_FLASH_SPI_CLKDIV
    +    str r1, [r3, #SSI_BAUDR_OFFSET]  // Set SSI Clock
    +
    +// First we need to send the initial command to get us in to Fast Read Dual I/O
    +// mode.  As this transaction requires a command, we can't send it in XIP mode.
    +// To enter Continuous Read mode as well we need to append 4'b0010 to the address
    +// bits and then add a further 4 don't care bits.  We will construct this by
    +// specifying a 28-bit address, with the least significant bits being 4'b0010.
    +// This is just a dummy transaction so we'll perform a read from address zero
    +// and then discard what comes back.  All we really care about is that at the
    +// end of the transaction, the Winbond W25X10CL device is in Continuous Read mode
    +// and from then on will only expect to receive addresses.
    +
    +#define CTRLR0_ENTER_XIP \
    +    (SSI_CTRLR0_SPI_FRF_VALUE_DUAL         /* Dual I/O mode */                \
    +        << SSI_CTRLR0_SPI_FRF_LSB) |                                          \
    +    (31 << SSI_CTRLR0_DFS_32_LSB)  |       /* 32 data bits */    \
    +    (SSI_CTRLR0_TMOD_VALUE_EEPROM_READ     /* Send INST/ADDR, Receive Data */ \
    +        << SSI_CTRLR0_TMOD_LSB)
    +
    +    ldr r1, =(CTRLR0_ENTER_XIP)
    +    str r1, [r3, #SSI_CTRLR0_OFFSET]
    +
    +    movs r1, #0x0                   // NDF=0 (single 32b read)
    +    str r1, [r3, #SSI_CTRLR1_OFFSET]
    +
    +#define SPI_CTRLR0_ENTER_XIP \
    +    (7 << SSI_SPI_CTRLR0_ADDR_L_LSB) |         /* Send 28 bits (24 address + 4 mode) */ \
    +    (2 << SSI_SPI_CTRLR0_WAIT_CYCLES_LSB) |    /* Hi-Z the other 4 mode bits (2 cycles @ dual I/O = 4 bits) */ \
    +    (SSI_SPI_CTRLR0_INST_L_VALUE_8B \
    +        << SSI_SPI_CTRLR0_INST_L_LSB) |        /* 8-bit instruction */ \
    +    (SSI_SPI_CTRLR0_TRANS_TYPE_VALUE_1C2A      /* Send Command in serial mode then address in Dual I/O mode */ \
    +        << SSI_SPI_CTRLR0_TRANS_TYPE_LSB)
    +
    +    ldr r1, =(SPI_CTRLR0_ENTER_XIP)
    +    ldr r0, =(XIP_SSI_BASE + SSI_SPI_CTRLR0_OFFSET)  // SPI_CTRL0 Register
    +    str r1, [r0]
    +
    +    movs r1, #1                     // Re-enable SSI
    +    str r1, [r3, #SSI_SSIENR_OFFSET]
    +
    +    movs r1, #W25X10CL_CMD_READ_DATA_FAST_DUAL_IO   // 8b command = 0xBB
    +    str r1, [r3, #SSI_DR0_OFFSET]   // Push SPI command into TX FIFO
    +    movs r1, #0x0000002             // 28-bit Address for dummy read = 0x000000 + 0x2 Mode bits to set M[5:4]=10
    +    str r1, [r3, #SSI_DR0_OFFSET]   // Push Address into TX FIFO - this will trigger the transaction
    +
    +// Now we wait for the read transaction to complete by monitoring the SSI
    +// status register and checking for the "RX FIFO Not Empty" flag to assert.
    +
    +    movs r1, #SSI_SR_RFNE_BITS
    +00:
    +    ldr r0, [r3, #SSI_SR_OFFSET]    // Read status register
    +    tst r0, r1                      // RFNE status flag set?
    +    beq 00b                         // If not then wait
    +
    +// At this point CN# will be deasserted and the SPI clock will not be running.
    +// The Winbond WX25X10CL device will be in continuous read, dual I/O mode and
    +// only expecting address bits after the next CN# assertion.  So long as we
    +// send 4'b0010 (and 4 more dummy HiZ bits) after every subsequent 24b address
    +// then the Winbond device will remain in continuous read mode.  This is the
    +// ideal mode for Execute-In-Place.
    +// (If we want to exit continuous read mode then we will need to switch back
    +// to APM mode and generate a 28-bit address phase with the extra nibble set
    +// to 4'b0000).
    +
    +    movs r1, #0
    +    str r1, [r3, #SSI_SSIENR_OFFSET]   // Disable SSI (and clear FIFO) to allow further config
    +
    +// Note that the INST_L field is used to select what XIP data gets pushed into
    +// the TX FIFO:
    +//      INST_L_0_BITS   {ADDR[23:0],XIP_CMD[7:0]}       Load "mode bits" into XIP_CMD
    +//      Anything else   {XIP_CMD[7:0],ADDR[23:0]}       Load SPI command into XIP_CMD
    +
    +#define SPI_CTRLR0_XIP \
    +    (W25X10CL_MODE_CONTINUOUS_READ              /* Mode bits to keep Winbond in continuous read mode */ \
    +        << SSI_SPI_CTRLR0_XIP_CMD_LSB) | \
    +    (7 << SSI_SPI_CTRLR0_ADDR_L_LSB) |         /* Send 28 bits (24 address + 4 mode) */ \
    +    (2 << SSI_SPI_CTRLR0_WAIT_CYCLES_LSB) |    /* Hi-Z the other 4 mode bits (2 cycles @ dual I/O = 4 bits) */ \
    +    (SSI_SPI_CTRLR0_INST_L_VALUE_NONE          /* Do not send a command, instead send XIP_CMD as mode bits after address */ \
    +        << SSI_SPI_CTRLR0_INST_L_LSB) | \
    +    (SSI_SPI_CTRLR0_TRANS_TYPE_VALUE_2C2A      /* Send Address in Dual I/O mode (and Command but that is zero bits long) */ \
    +        << SSI_SPI_CTRLR0_TRANS_TYPE_LSB)
    +
    +    ldr r1, =(SPI_CTRLR0_XIP)
    +    ldr r0, =(XIP_SSI_BASE + SSI_SPI_CTRLR0_OFFSET)
    +    str r1, [r0]
    +
    +    movs r1, #1
    +    str r1, [r3, #SSI_SSIENR_OFFSET]   // Re-enable SSI
    +
    +// We are now in XIP mode, with all transactions using Dual I/O and only
    +// needing to send 24-bit addresses (plus mode bits) for each read transaction.
    +
    +// Pull in standard exit routine
    +#include "shared/exit_from_boot2.S"
    +
    +.global literals
    +literals:
    +.ltorg
    +
    +.end
    
    From 193ce99c1888cc9c373aac1aa4f7c307d643bd1d Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Tue, 19 Sep 2023 10:05:33 +0200
    Subject: [PATCH 196/286] Bootstrap code
    
    ---
     .gitattributes              |  1 +
     .github/workflows/build.yml | 26 ++++++++++++++++++++++++++
     .gitignore                  |  3 +++
     build.zig                   | 19 +++++++++++++++++++
     build.zig.zon               | 14 ++++++++++++++
     ezpkg.sh                    |  5 +++++
     shell.nix                   |  8 ++++++++
     src/blinky.zig              | 20 ++++++++++++++++++++
     8 files changed, 96 insertions(+)
     create mode 100644 .gitattributes
     create mode 100644 .github/workflows/build.yml
     create mode 100644 .gitignore
     create mode 100644 build.zig
     create mode 100644 build.zig.zon
     create mode 100755 ezpkg.sh
     create mode 100644 shell.nix
     create mode 100644 src/blinky.zig
    
    diff --git a/.gitattributes b/.gitattributes
    new file mode 100644
    index 000000000..0cb064aeb
    --- /dev/null
    +++ b/.gitattributes
    @@ -0,0 +1 @@
    +*.zig text=auto eol=lf
    diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
    new file mode 100644
    index 000000000..59cf509b7
    --- /dev/null
    +++ b/.github/workflows/build.yml
    @@ -0,0 +1,26 @@
    +name: Build
    +on:
    +  push:
    +    branches: [main]
    +  pull_request:
    +    branches: [main]
    +  schedule:
    +    - cron: '0 0 * * *'
    +
    +jobs:
    +  build:
    +    runs-on: ${{ matrix.os }}
    +    strategy:
    +      matrix:
    +        os: [windows-latest, macos-latest, linux-latest]
    +    steps:
    +      - name: Checkout
    +        uses: actions/checkout@v2
    +
    +      - name: Setup Zig
    +        uses: goto-bus-stop/setup-zig@v2
    +        with:
    +          version: 0.11.0
    +
    +      - name: Build examples
    +        run: zig build
    diff --git a/.gitignore b/.gitignore
    new file mode 100644
    index 000000000..eacd52b70
    --- /dev/null
    +++ b/.gitignore
    @@ -0,0 +1,3 @@
    +zig-cache/
    +dev-scripts/
    +zig-out
    diff --git a/build.zig b/build.zig
    new file mode 100644
    index 000000000..cac966e9c
    --- /dev/null
    +++ b/build.zig
    @@ -0,0 +1,19 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +const rp2040 = @import("rp2040");
    +
    +pub fn build(b: *std.Build) void {
    +    const optimize = b.standardOptimizeOption(.{});
    +
    +    const firmware = microzig.addFirmware(b, .{
    +        .name = "blinky",
    +        .target = rp2040.chips.rp2040,
    +        .optimize = optimize,
    +        .source_file = .{ .path = "src/blinky.zig" },
    +    });
    +
    +    microzig.installFirmware(firmware, .{
    +        
    +        .format = .uf2, // .dfu, .bin, .hex, .elf, …
    +    });
    +}
    diff --git a/build.zig.zon b/build.zig.zon
    new file mode 100644
    index 000000000..d66119385
    --- /dev/null
    +++ b/build.zig.zon
    @@ -0,0 +1,14 @@
    +.{
    +    .name = "microzig-examples",
    +    .version = "0.1.0",
    +    .dependencies = .{
    +        .microzig = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/f0a6aa9ce1829df91f2d7f160bbc6f5bc41a3c80.tar.gz",
    +            .hash = "12203f8cb7803a82dff1310ab0917055c0055bc7385f1321bbaf0de998b26a00b44d",
    +        },
    +        .rp2040 = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/raspberrypi-rp2040/archive/2a0c0ff2814a716a163822211c2686d84801a97a.tar.gz",
    +            .hash = "12208735720ddf172a28943f1b17375f7b16370140be9c458f1482076025e465c3b0",
    +        },
    +    },
    +}
    diff --git a/ezpkg.sh b/ezpkg.sh
    new file mode 100755
    index 000000000..b1f61da0b
    --- /dev/null
    +++ b/ezpkg.sh
    @@ -0,0 +1,5 @@
    +#!/bin/sh
    +
    +exec ezpkg \
    +    microzig=/home/felix/projects/zeg/microzig \
    +    rp2040=/home/felix/projects/zeg/device-support-package/rp2040
    \ No newline at end of file
    diff --git a/shell.nix b/shell.nix
    new file mode 100644
    index 000000000..3c88ea05c
    --- /dev/null
    +++ b/shell.nix
    @@ -0,0 +1,8 @@
    +{pkgs ? import  {}}:
    +pkgs.mkShell {
    +  nativeBuildInputs = [
    +    pkgs.zig_0_11_0
    +    pkgs.picotool
    +  ];
    +  buildInputs = [];
    +}
    diff --git a/src/blinky.zig b/src/blinky.zig
    new file mode 100644
    index 000000000..5632fe349
    --- /dev/null
    +++ b/src/blinky.zig
    @@ -0,0 +1,20 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +const rp2040 = microzig.hal;
    +const time = rp2040.time;
    +
    +const pin_config = rp2040.pins.GlobalConfiguration{
    +    .GPIO25 = .{
    +        .name = "led",
    +        .direction = .out,
    +    },
    +};
    +
    +pub fn main() !void {
    +    const pins = pin_config.apply();
    +
    +    while (true) {
    +        pins.led.toggle();
    +        time.sleep_ms(250);
    +    }
    +}
    
    From e14f0a1e53002556e62928fc3848882cdaa7597a Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Tue, 19 Sep 2023 10:10:15 +0200
    Subject: [PATCH 197/286] Adds some documentation comments
    
    ---
     build.zig | 19 +++++++++++++++++--
     1 file changed, 17 insertions(+), 2 deletions(-)
    
    diff --git a/build.zig b/build.zig
    index cac966e9c..c351ebc29 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -5,15 +5,30 @@ const rp2040 = @import("rp2040");
     pub fn build(b: *std.Build) void {
         const optimize = b.standardOptimizeOption(.{});
     
    +    // `addFirmware` basically works like addExecutable, but takes a
    +    // `microzig.Target` for target instead of a `std.zig.CrossTarget`.
    +    //
    +    // The target will convey all necessary information on the chip,
    +    // cpu and potentially the board as well.
         const firmware = microzig.addFirmware(b, .{
             .name = "blinky",
    -        .target = rp2040.chips.rp2040,
    +        .target = rp2040.boards.raspberrypi.pico,
             .optimize = optimize,
             .source_file = .{ .path = "src/blinky.zig" },
         });
     
    +    // Pendant to `getEmittedBin()`: Always returns the path to the output elf file
    +    _ = firmware.getEmittedElf();
    +
    +    // Extension of `getEmittedElf()` that will also convert the file to the given
    +    // binary format.
    +    _ = firmware.getEmittedBin(.uf2);
    +
    +    // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()`
    +    // and allows installing the firmware as a typical firmware file.
    +    //
    +    // This will also install into `$prefix/firmware` instead of `$prefix/bin`.
         microzig.installFirmware(firmware, .{
    -        
             .format = .uf2, // .dfu, .bin, .hex, .elf, …
         });
     }
    
    From 8a124a68dbf0e6f6f0a576c16ca410788fe78d07 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Wed, 20 Sep 2023 00:42:15 +0200
    Subject: [PATCH 198/286] First build again. No verification of 'works'
    
    ---
     .gitignore    |  1 +
     build.zig     | 12 ++++++------
     build.zig.zon |  8 ++++----
     3 files changed, 11 insertions(+), 10 deletions(-)
    
    diff --git a/.gitignore b/.gitignore
    index eacd52b70..f975728be 100644
    --- a/.gitignore
    +++ b/.gitignore
    @@ -1,3 +1,4 @@
     zig-cache/
     dev-scripts/
     zig-out
    +.envrc
    diff --git a/build.zig b/build.zig
    index c351ebc29..d9612882a 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -1,8 +1,10 @@
     const std = @import("std");
    -const microzig = @import("microzig");
     const rp2040 = @import("rp2040");
    +const microzig_build = @import("microzig");
     
     pub fn build(b: *std.Build) void {
    +    const microzig = microzig_build.init(b, "microzig");
    +
         const optimize = b.standardOptimizeOption(.{});
     
         // `addFirmware` basically works like addExecutable, but takes a
    @@ -12,7 +14,7 @@ pub fn build(b: *std.Build) void {
         // cpu and potentially the board as well.
         const firmware = microzig.addFirmware(b, .{
             .name = "blinky",
    -        .target = rp2040.boards.raspberrypi.pico,
    +        .target = rp2040.boards.raspberry_pi.pico,
             .optimize = optimize,
             .source_file = .{ .path = "src/blinky.zig" },
         });
    @@ -22,13 +24,11 @@ pub fn build(b: *std.Build) void {
     
         // Extension of `getEmittedElf()` that will also convert the file to the given
         // binary format.
    -    _ = firmware.getEmittedBin(.uf2);
    +    _ = firmware.getEmittedBin(null); // `null` is preferred format, in this case uf2
     
         // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()`
         // and allows installing the firmware as a typical firmware file.
         //
         // This will also install into `$prefix/firmware` instead of `$prefix/bin`.
    -    microzig.installFirmware(firmware, .{
    -        .format = .uf2, // .dfu, .bin, .hex, .elf, …
    -    });
    +    microzig.installFirmware(b, firmware, .{});
     }
    diff --git a/build.zig.zon b/build.zig.zon
    index d66119385..c1350ee81 100644
    --- a/build.zig.zon
    +++ b/build.zig.zon
    @@ -3,12 +3,12 @@
         .version = "0.1.0",
         .dependencies = .{
             .microzig = .{
    -            .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/f0a6aa9ce1829df91f2d7f160bbc6f5bc41a3c80.tar.gz",
    -            .hash = "12203f8cb7803a82dff1310ab0917055c0055bc7385f1321bbaf0de998b26a00b44d",
    +            .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/44ab82cac86ab7fbd4e6718021d51a2bb8c4a42c.tar.gz",
    +            .hash = "122039437ab5c8946e3f1f77dec17092f0c6cae9fcd830bce89f03725e75a02d101b",
             },
             .rp2040 = .{
    -            .url = "https://github.com/ZigEmbeddedGroup/raspberrypi-rp2040/archive/2a0c0ff2814a716a163822211c2686d84801a97a.tar.gz",
    -            .hash = "12208735720ddf172a28943f1b17375f7b16370140be9c458f1482076025e465c3b0",
    +            .url = "https://github.com/ZigEmbeddedGroup/raspberrypi-rp2040/archive/b9c361be68215d48657ec3684c8a30ebbc74efd5.tar.gz",
    +            .hash = "1220aa6da071763468a358e82af753db23513e12120cf749bdb8bb4f8ea2a8b6da7b",
             },
         },
     }
    
    From 2b25d1fe1c56c60205283642c4fc5986ceb87357 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Wed, 20 Sep 2023 14:26:52 +0200
    Subject: [PATCH 199/286] Adds building support for STM32
    
    ---
     README.md     |  1 +
     build.zig     | 66 ++++++++++++++++++++++++++++++++-------------------
     build.zig.zon | 12 ++++++----
     ezpkg.sh      |  6 ++++-
     src/empty.zig |  6 +++++
     5 files changed, 62 insertions(+), 29 deletions(-)
     create mode 100644 src/empty.zig
    
    diff --git a/README.md b/README.md
    index c3bfa2788..dda56835b 100644
    --- a/README.md
    +++ b/README.md
    @@ -1,2 +1,3 @@
     # microzig-examples
    +
     Examples for embedded zig!
    diff --git a/build.zig b/build.zig
    index d9612882a..9ed2c21b2 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -1,34 +1,52 @@
     const std = @import("std");
     const rp2040 = @import("rp2040");
    -const microzig_build = @import("microzig");
    +const stm32 = @import("stm32");
     
     pub fn build(b: *std.Build) void {
    -    const microzig = microzig_build.init(b, "microzig");
    -
    +    const microzig = @import("microzig").init(b, "microzig");
         const optimize = b.standardOptimizeOption(.{});
     
    -    // `addFirmware` basically works like addExecutable, but takes a
    -    // `microzig.Target` for target instead of a `std.zig.CrossTarget`.
    -    //
    -    // The target will convey all necessary information on the chip,
    -    // cpu and potentially the board as well.
    -    const firmware = microzig.addFirmware(b, .{
    -        .name = "blinky",
    -        .target = rp2040.boards.raspberry_pi.pico,
    -        .optimize = optimize,
    -        .source_file = .{ .path = "src/blinky.zig" },
    -    });
    +    const TargetDesc = struct {
    +        target: @import("microzig").Target,
    +        name: []const u8,
    +    };
    +
    +    const available_targets = [_]TargetDesc{
    +        // RP2040
    +        .{ .name = "pico", .target = rp2040.boards.raspberry_pi.pico },
    +        .{ .name = "rp2040-eth", .target = rp2040.boards.waveshare.rp2040_eth },
    +        .{ .name = "rp2040-plus-4m", .target = rp2040.boards.waveshare.rp2040_plus_4m },
    +        .{ .name = "rp2040-plus-16m", .target = rp2040.boards.waveshare.rp2040_plus_16m },
    +        .{ .name = "rp2040-matrix", .target = rp2040.boards.waveshare.rp2040_matrix },
     
    -    // Pendant to `getEmittedBin()`: Always returns the path to the output elf file
    -    _ = firmware.getEmittedElf();
    +        // STM32
    +        .{ .name = "stm32f103x8", .target = stm32.chips.stm32f103x8 },
    +        .{ .name = "stm32f303vc", .target = stm32.chips.stm32f303vc },
    +        .{ .name = "stm32f407vg", .target = stm32.chips.stm32f407vg },
    +        .{ .name = "stm32f429zit6u", .target = stm32.chips.stm32f429zit6u },
    +        .{ .name = "stm32f3discovery", .target = stm32.boards.stm32f3discovery },
    +        .{ .name = "stm32f4discovery", .target = stm32.boards.stm32f4discovery },
    +        .{ .name = "stm3240geval", .target = stm32.boards.stm3240geval },
    +        .{ .name = "stm32f429idiscovery", .target = stm32.boards.stm32f429idiscovery },
    +    };
     
    -    // Extension of `getEmittedElf()` that will also convert the file to the given
    -    // binary format.
    -    _ = firmware.getEmittedBin(null); // `null` is preferred format, in this case uf2
    +    for (available_targets) |dest| {
    +        // `addFirmware` basically works like addExecutable, but takes a
    +        // `microzig.Target` for target instead of a `std.zig.CrossTarget`.
    +        //
    +        // The target will convey all necessary information on the chip,
    +        // cpu and potentially the board as well.
    +        const firmware = microzig.addFirmware(b, .{
    +            .name = b.fmt("empty-{s}", .{dest.name}),
    +            .target = dest.target,
    +            .optimize = optimize,
    +            .source_file = .{ .path = "src/empty.zig" },
    +        });
     
    -    // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()`
    -    // and allows installing the firmware as a typical firmware file.
    -    //
    -    // This will also install into `$prefix/firmware` instead of `$prefix/bin`.
    -    microzig.installFirmware(b, firmware, .{});
    +        // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()`
    +        // and allows installing the firmware as a typical firmware file.
    +        //
    +        // This will also install into `$prefix/firmware` instead of `$prefix/bin`.
    +        microzig.installFirmware(b, firmware, .{});
    +    }
     }
    diff --git a/build.zig.zon b/build.zig.zon
    index c1350ee81..e44e0ba4e 100644
    --- a/build.zig.zon
    +++ b/build.zig.zon
    @@ -3,12 +3,16 @@
         .version = "0.1.0",
         .dependencies = .{
             .microzig = .{
    -            .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/44ab82cac86ab7fbd4e6718021d51a2bb8c4a42c.tar.gz",
    -            .hash = "122039437ab5c8946e3f1f77dec17092f0c6cae9fcd830bce89f03725e75a02d101b",
    +            .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/c6c9ec4516f57638e751141085c9d76120990312.tar.gz",
    +            .hash = "1220af58bdaa721b8189f3a7adfda660517dd354463463388e96d69fe4ceccf80b92",
             },
             .rp2040 = .{
    -            .url = "https://github.com/ZigEmbeddedGroup/raspberrypi-rp2040/archive/b9c361be68215d48657ec3684c8a30ebbc74efd5.tar.gz",
    -            .hash = "1220aa6da071763468a358e82af753db23513e12120cf749bdb8bb4f8ea2a8b6da7b",
    +            .url = "https://github.com/ZigEmbeddedGroup/raspberrypi-rp2040/archive/67d36eebb0fbd89633db1a51d6d2bcb049f2066a.tar.gz",
    +            .hash = "122094bf268f45b188f3916f9e5964f4257414afaafba98a455ac47d25389a456832",
    +        },
    +        .stm32 = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/stmicro-stm32/archive/cb2893707efa6aa289fa72f02959ad5f2d9db2a1.tar.gz",
    +            .hash = "12208cab5f60ef97cac4165ad694f3ba0c7b28f279538c1539b74f7c152f34fe306d",
             },
         },
     }
    diff --git a/ezpkg.sh b/ezpkg.sh
    index b1f61da0b..577c8b42e 100755
    --- a/ezpkg.sh
    +++ b/ezpkg.sh
    @@ -2,4 +2,8 @@
     
     exec ezpkg \
         microzig=/home/felix/projects/zeg/microzig \
    -    rp2040=/home/felix/projects/zeg/device-support-package/rp2040
    \ No newline at end of file
    +    microzig.uf2=/home/felix/projects/zeg/uf2 \
    +    microzig.regz=/home/felix/projects/zeg/regz \
    +    rp2040=/home/felix/projects/zeg/device-support-package/rp2040 \
    +    stm32=/home/felix/projects/zeg/device-support-package/stmicro-stm32
    +    
    \ No newline at end of file
    diff --git a/src/empty.zig b/src/empty.zig
    new file mode 100644
    index 000000000..7c6dbbe42
    --- /dev/null
    +++ b/src/empty.zig
    @@ -0,0 +1,6 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +
    +pub fn main() void {
    +    //
    +}
    
    From 9e40dda94b40b9e00803d66e1f1f20b3454bb96c Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Wed, 20 Sep 2023 17:50:55 +0200
    Subject: [PATCH 200/286] Fixes CI runner
    
    ---
     .github/workflows/build.yml | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
    index 59cf509b7..193502363 100644
    --- a/.github/workflows/build.yml
    +++ b/.github/workflows/build.yml
    @@ -12,7 +12,7 @@ jobs:
         runs-on: ${{ matrix.os }}
         strategy:
           matrix:
    -        os: [windows-latest, macos-latest, linux-latest]
    +        os: [windows-latest, macos-latest, ubuntu-latest]
         steps:
           - name: Checkout
             uses: actions/checkout@v2
    
    From 991d757eff2aa6a36bfef74e239cdc1bdf84043f Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Thu, 21 Sep 2023 10:19:02 +0200
    Subject: [PATCH 201/286] Adds more working devices.
    
    ---
     .github/workflows/build.yml |  2 --
     build.zig                   | 25 +++++++++++++++++++++++++
     build.zig.zon               | 20 ++++++++++++++++++++
     ezpkg.sh                    |  8 ++++++--
     4 files changed, 51 insertions(+), 4 deletions(-)
    
    diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
    index 193502363..af725e66c 100644
    --- a/.github/workflows/build.yml
    +++ b/.github/workflows/build.yml
    @@ -4,8 +4,6 @@ on:
         branches: [main]
       pull_request:
         branches: [main]
    -  schedule:
    -    - cron: '0 0 * * *'
     
     jobs:
       build:
    diff --git a/build.zig b/build.zig
    index 9ed2c21b2..3aeb29301 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -1,6 +1,9 @@
     const std = @import("std");
     const rp2040 = @import("rp2040");
     const stm32 = @import("stm32");
    +const lpc = @import("lpc");
    +const gd32 = @import("gd32");
    +const nrf5x = @import("nrf5x");
     
     pub fn build(b: *std.Build) void {
         const microzig = @import("microzig").init(b, "microzig");
    @@ -28,6 +31,28 @@ pub fn build(b: *std.Build) void {
             .{ .name = "stm32f4discovery", .target = stm32.boards.stm32f4discovery },
             .{ .name = "stm3240geval", .target = stm32.boards.stm3240geval },
             .{ .name = "stm32f429idiscovery", .target = stm32.boards.stm32f429idiscovery },
    +
    +        // NXP LPC
    +        // TODO: Add checksum postprocessing
    +        .{ .name = "lpc176x5x", .target = lpc.chips.lpc176x5x },
    +        .{ .name = "mbed-lpc1768", .target = lpc.boards.mbed.lpc1768 },
    +
    +        // GigaDevice GD32
    +        .{ .name = "gd32vf103xb", .target = gd32.chips.gd32vf103xb },
    +        .{ .name = "gd32vf103x8", .target = gd32.chips.gd32vf103x8 },
    +        .{ .name = "sipeed-longan_nano", .target = gd32.boards.sipeed.longan_nano },
    +
    +        // Nordic Nrf5x
    +        .{ .name = "nrf52832", .target = nrf5x.chips.nrf52832 },
    +        .{ .name = "nrf52840", .target = nrf5x.chips.nrf52840 },
    +        .{ .name = "nrf52840-dongle", .target = nrf5x.boards.nordic.nRF52840_Dongle }, // TODO: Add support for DFU files!
    +
    +        // Espressif ESP
    +        // .{ .name = "nrf52832", .target = nrf5x.chips.nrf52832 },
    +        // TODO: Add support for Espressif Update Binaries
    +
    +        // Microchip ATmega
    +        // TODO: Fix compiler bugs
         };
     
         for (available_targets) |dest| {
    diff --git a/build.zig.zon b/build.zig.zon
    index e44e0ba4e..1180edb52 100644
    --- a/build.zig.zon
    +++ b/build.zig.zon
    @@ -14,5 +14,25 @@
                 .url = "https://github.com/ZigEmbeddedGroup/stmicro-stm32/archive/cb2893707efa6aa289fa72f02959ad5f2d9db2a1.tar.gz",
                 .hash = "12208cab5f60ef97cac4165ad694f3ba0c7b28f279538c1539b74f7c152f34fe306d",
             },
    +        .lpc = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/nxp-lpc/archive/be4280a8b55690e8446fd4c3186dcd6673118cd3.tar.gz",
    +            .hash = "1220891bc5fa43b30cd024a628f8915f54691e5664d2a34e6653bf92722b222b7c7e",
    +        },
    +        .gd32 = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/gigadevice-gd32/archive/9324753cc3b8e7afe83fcda085bcfe76681a3be3.tar.gz",
    +            .hash = "122043ff4dcbc342f25dbb936b0d9eaa701ac3509e2cbe6764be37b90d31c7a385d0",
    +        },
    +        .nrf5x = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/nordic-nrf5x/archive/0ab136860ccf7eb1d07969c3ef523f3cd898e2ff.tar.gz",
    +            .hash = "1220980da06f9634dcff06afefa7aa111bd030018fea49f79e86657dab69621e1d08",
    +        },
    +        .esp = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/espressif-esp/archive/f7e47d07996565036501f55ed781a5f6e786b2f7.tar.gz",
    +            .hash = "12209b0365f56df4ce83b1300da86bef605bd299e94b87f373571351f71fa2ccd461",
    +        },
    +        .atmega = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/microchip-atmega/archive/46dfd08ad13e0a9a84351cfd595b1e6e341d4839.tar.gz",
    +            .hash = "1220b2df269bf997b77bebcebea63a8e39aea354a7075cf99878423e304394bc28eb",
    +        },
         },
     }
    diff --git a/ezpkg.sh b/ezpkg.sh
    index 577c8b42e..caafa0365 100755
    --- a/ezpkg.sh
    +++ b/ezpkg.sh
    @@ -5,5 +5,9 @@ exec ezpkg \
         microzig.uf2=/home/felix/projects/zeg/uf2 \
         microzig.regz=/home/felix/projects/zeg/regz \
         rp2040=/home/felix/projects/zeg/device-support-package/rp2040 \
    -    stm32=/home/felix/projects/zeg/device-support-package/stmicro-stm32
    -    
    \ No newline at end of file
    +    stm32=/home/felix/projects/zeg/device-support-package/stmicro-stm32 \
    +    lpc=/home/felix/projects/zeg/device-support-package/nxp-lpc \
    +    gd32=/home/felix/projects/zeg/device-support-package/gigadevice-gd32 \
    +    esp=/home/felix/projects/zeg/device-support-package/espressif-esp \
    +    nrf5x=/home/felix/projects/zeg/device-support-package/nordic-nrf5x \
    +    atmega=/home/felix/projects/zeg/device-support-package/microchip-atmega 
    \ No newline at end of file
    
    From ca17420a81df7bec9382459970652e7dc79cfe26 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Thu, 21 Sep 2023 12:16:03 +0200
    Subject: [PATCH 202/286] Adds more architectures
    
    ---
     build.zig     | 15 +++++++++++----
     build.zig.zon | 12 ++++++------
     shell.nix     |  1 +
     3 files changed, 18 insertions(+), 10 deletions(-)
    
    diff --git a/build.zig b/build.zig
    index 3aeb29301..406477261 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -4,6 +4,8 @@ const stm32 = @import("stm32");
     const lpc = @import("lpc");
     const gd32 = @import("gd32");
     const nrf5x = @import("nrf5x");
    +const esp = @import("esp");
    +const atmega = @import("atmega");
     
     pub fn build(b: *std.Build) void {
         const microzig = @import("microzig").init(b, "microzig");
    @@ -33,7 +35,6 @@ pub fn build(b: *std.Build) void {
             .{ .name = "stm32f429idiscovery", .target = stm32.boards.stm32f429idiscovery },
     
             // NXP LPC
    -        // TODO: Add checksum postprocessing
             .{ .name = "lpc176x5x", .target = lpc.chips.lpc176x5x },
             .{ .name = "mbed-lpc1768", .target = lpc.boards.mbed.lpc1768 },
     
    @@ -47,12 +48,15 @@ pub fn build(b: *std.Build) void {
             .{ .name = "nrf52840", .target = nrf5x.chips.nrf52840 },
             .{ .name = "nrf52840-dongle", .target = nrf5x.boards.nordic.nRF52840_Dongle }, // TODO: Add support for DFU files!
     
    -        // Espressif ESP
    -        // .{ .name = "nrf52832", .target = nrf5x.chips.nrf52832 },
    -        // TODO: Add support for Espressif Update Binaries
    +        // RISC-V Espressif ESP
    +        .{ .name = "esp32-c3", .target = esp.chips.esp32_c3 }, // TODO: Add support for Espressif Update Binaries
     
             // Microchip ATmega
             // TODO: Fix compiler bugs
    +        // - https://github.com/ziglang/zig/issues/17219
    +        // .{ .name = "atmega328p", .target = atmega.chips.atmega328p },
    +        // .{ .name = "arduino-nano", .target = atmega.boards.arduino.nano },
    +        // .{ .name = "arduino-uno-rev3", .target = atmega.boards.arduino.uno_rev3 },
         };
     
         for (available_targets) |dest| {
    @@ -73,5 +77,8 @@ pub fn build(b: *std.Build) void {
             //
             // This will also install into `$prefix/firmware` instead of `$prefix/bin`.
             microzig.installFirmware(b, firmware, .{});
    +
    +        // For debugging, we also always install the firmware as an ELF file
    +        microzig.installFirmware(b, firmware, .{ .format = .elf });
         }
     }
    diff --git a/build.zig.zon b/build.zig.zon
    index 1180edb52..716625979 100644
    --- a/build.zig.zon
    +++ b/build.zig.zon
    @@ -15,8 +15,8 @@
                 .hash = "12208cab5f60ef97cac4165ad694f3ba0c7b28f279538c1539b74f7c152f34fe306d",
             },
             .lpc = .{
    -            .url = "https://github.com/ZigEmbeddedGroup/nxp-lpc/archive/be4280a8b55690e8446fd4c3186dcd6673118cd3.tar.gz",
    -            .hash = "1220891bc5fa43b30cd024a628f8915f54691e5664d2a34e6653bf92722b222b7c7e",
    +            .url = "https://github.com/ZigEmbeddedGroup/nxp-lpc/archive/130a1316c0892415e7da958a5e9548ed87bba54d.tar.gz",
    +            .hash = "1220165879f85a1d51656d35b3963a95f3585dc665fc7414f76aa6aad4e6635536cf",
             },
             .gd32 = .{
                 .url = "https://github.com/ZigEmbeddedGroup/gigadevice-gd32/archive/9324753cc3b8e7afe83fcda085bcfe76681a3be3.tar.gz",
    @@ -27,12 +27,12 @@
                 .hash = "1220980da06f9634dcff06afefa7aa111bd030018fea49f79e86657dab69621e1d08",
             },
             .esp = .{
    -            .url = "https://github.com/ZigEmbeddedGroup/espressif-esp/archive/f7e47d07996565036501f55ed781a5f6e786b2f7.tar.gz",
    -            .hash = "12209b0365f56df4ce83b1300da86bef605bd299e94b87f373571351f71fa2ccd461",
    +            .url = "https://github.com/ZigEmbeddedGroup/espressif-esp/archive/59b8ca028915c0d6224ec88dbf4db19afbb559c0.tar.gz",
    +            .hash = "1220f6e5f22416fdc63442cd8869fcaa35f9abf30d878ea3d80073176677dc6f8a65",
             },
             .atmega = .{
    -            .url = "https://github.com/ZigEmbeddedGroup/microchip-atmega/archive/46dfd08ad13e0a9a84351cfd595b1e6e341d4839.tar.gz",
    -            .hash = "1220b2df269bf997b77bebcebea63a8e39aea354a7075cf99878423e304394bc28eb",
    +            .url = "https://github.com/ZigEmbeddedGroup/microchip-atmega/archive/feefcb87a63c0aae31afb783d4e388e90c4d922f.tar.gz",
    +            .hash = "1220048dc5d22729ee119a496f8b8ca3556838af1f3bd32ce6acd5f76480ec942965",
             },
         },
     }
    diff --git a/shell.nix b/shell.nix
    index 3c88ea05c..b1724c483 100644
    --- a/shell.nix
    +++ b/shell.nix
    @@ -3,6 +3,7 @@ pkgs.mkShell {
       nativeBuildInputs = [
         pkgs.zig_0_11_0
         pkgs.picotool
    +    pkgs.llvmPackages_16.bintools
       ];
       buildInputs = [];
     }
    
    From 3bdb7381be3f066aa2ea0ed1c2c7ea796141ac55 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20Quei=C3=9Fner?= 
    Date: Fri, 22 Sep 2023 09:01:19 +0200
    Subject: [PATCH 203/286] Microzig Generation 2 Build Interface  (#144)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    * Starts to rework build framework.
    * Fully reworks build API, builds with RP2040 again.
    * Adds docs and doc generation.
    * Renames source to register_definitions, makes Target.configure optional.
    * Adds issue tracking links.
    * Drops CI for now
    
    ---------
    
    Co-authored-by: Felix "xq" Queißner 
    ---
     .buildkite/pipeline.yml             |    7 -
     .github/workflows/build.yml         |   24 -
     build.zig                           | 1063 ++++++++++++++++++++++-----
     build.zig.zon                       |   14 +
     src/{modules => }/cpus/avr5.zig     |    0
     src/{modules => }/cpus/cortex-m.zig |    0
     src/{modules => }/cpus/riscv32.zig  |    0
     src/modules/Board.zig               |    6 -
     src/modules/Chip.zig                |   44 --
     src/modules/Cpu.zig                 |    5 -
     src/modules/LinkerScriptStep.zig    |  172 -----
     src/modules/MemoryRegion.zig        |   18 -
     src/modules/cpus.zig                |   84 ---
     13 files changed, 911 insertions(+), 526 deletions(-)
     delete mode 100644 .buildkite/pipeline.yml
     delete mode 100644 .github/workflows/build.yml
     create mode 100644 build.zig.zon
     rename src/{modules => }/cpus/avr5.zig (100%)
     rename src/{modules => }/cpus/cortex-m.zig (100%)
     rename src/{modules => }/cpus/riscv32.zig (100%)
     delete mode 100644 src/modules/Board.zig
     delete mode 100644 src/modules/Chip.zig
     delete mode 100644 src/modules/Cpu.zig
     delete mode 100644 src/modules/LinkerScriptStep.zig
     delete mode 100644 src/modules/MemoryRegion.zig
     delete mode 100644 src/modules/cpus.zig
    
    diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml
    deleted file mode 100644
    index 723f5a248..000000000
    --- a/.buildkite/pipeline.yml
    +++ /dev/null
    @@ -1,7 +0,0 @@
    -steps:
    -  - group: Build and Test
    -    steps:
    -    - label: Debug
    -      command: zig build test
    -    - label: ReleaseSmall
    -      command: zig build test -Doptimize=ReleaseSmall
    diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
    deleted file mode 100644
    index e387a3874..000000000
    --- a/.github/workflows/build.yml
    +++ /dev/null
    @@ -1,24 +0,0 @@
    -name: Build
    -on:
    -  push:
    -
    -jobs:
    -  build:
    -    runs-on: ${{ matrix.os }}
    -    strategy:
    -      matrix:
    -        os: [
    -          ubuntu-latest,
    -          windows-latest,
    -          macos-latest,
    -        ]
    -    steps:
    -    - uses: actions/checkout@v2
    -
    -    - name: Setup Zig
    -      uses: goto-bus-stop/setup-zig@v1.3.0
    -      with:
    -        version: 0.11.0
    -
    -    - name: Build tests
    -      run: zig build test -Doptimize=ReleaseSmall
    diff --git a/build.zig b/build.zig
    index f66b2b527..9b92d6b89 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -3,97 +3,419 @@
     //! This means we need to use addExecutable() instead of using
     
     const std = @import("std");
    -const LibExeObjStep = std.Build.LibExeObjStep;
    -const Module = std.Build.Module;
    -const LazyPath = std.Build.LazyPath;
    -const OptionsStep = std.Build.OptionsStep;
    -const Build = std.Build;
    -
    -// alias for packages
    -pub const LinkerScriptStep = @import("src/modules/LinkerScriptStep.zig");
    -pub const cpus = @import("src/modules/cpus.zig");
    -pub const Board = @import("src/modules/Board.zig");
    -pub const Chip = @import("src/modules/Chip.zig");
    -pub const Cpu = @import("src/modules/Cpu.zig");
    -pub const MemoryRegion = @import("src/modules/MemoryRegion.zig");
    -
    -pub const Backing = union(enum) {
    -    board: Board,
    -    chip: Chip,
    +const uf2 = @import("uf2");
    +
    +////////////////////////////////////////
    +//      MicroZig Gen 2 Interface      //
    +////////////////////////////////////////
    +
    +fn root() []const u8 {
    +    return comptime (std.fs.path.dirname(@src().file) orelse ".");
    +}
    +const build_root = root();
    +
    +const MicroZig = @This();
    +
    +b: *std.Build,
    +self: *std.Build.Dependency,
    +
    +/// Creates a new instance of the MicroZig build support.
    +///
    +/// This is necessary as we need to keep track of some internal state to prevent
    +/// duplicated work per firmware built.
    +pub fn init(b: *std.Build, dependency_name: []const u8) *MicroZig {
    +    const mz = b.allocator.create(MicroZig) catch @panic("out of memory");
    +    mz.* = MicroZig{
    +        .b = b,
    +        .self = b.dependency(dependency_name, .{}),
    +    };
    +    return mz;
    +}
    +
    +/// This build script validates usage patterns we expect from MicroZig
    +pub fn build(b: *std.Build) !void {
    +    const uf2_dep = b.dependency("uf2", .{});
     
    -    pub fn get_target(self: @This()) std.zig.CrossTarget {
    -        return switch (self) {
    -            .board => |brd| brd.chip.cpu.target,
    -            .chip => |chip| chip.cpu.target,
    +    const build_test = b.addTest(.{
    +        .root_source_file = .{ .path = "build.zig" },
    +    });
    +
    +    build_test.addAnonymousModule("uf2", .{
    +        .source_file = .{ .cwd_relative = uf2_dep.builder.pathFromRoot("build.zig") },
    +    });
    +
    +    const install_docs = b.addInstallDirectory(.{
    +        .source_dir = build_test.getEmittedDocs(),
    +        .install_dir = .prefix,
    +        .install_subdir = "docs",
    +    });
    +
    +    b.getInstallStep().dependOn(&install_docs.step);
    +
    +    // const backings = @import("test/backings.zig");
    +    // const optimize = b.standardOptimizeOption(.{});
    +
    +    // const minimal = addEmbeddedExecutable(b, .{
    +    //     .name = "minimal",
    +    //     .source_file = .{
    +    //         .path = comptime root_dir() ++ "/test/programs/minimal.zig",
    +    //     },
    +    //     .backing = backings.minimal,
    +    //     .optimize = optimize,
    +    // });
    +
    +    // const has_hal = addEmbeddedExecutable(b, .{
    +    //     .name = "has_hal",
    +    //     .source_file = .{
    +    //         .path = comptime root_dir() ++ "/test/programs/has_hal.zig",
    +    //     },
    +    //     .backing = backings.has_hal,
    +    //     .optimize = optimize,
    +    // });
    +
    +    // const has_board = addEmbeddedExecutable(b, .{
    +    //     .name = "has_board",
    +    //     .source_file = .{
    +    //         .path = comptime root_dir() ++ "/test/programs/has_board.zig",
    +    //     },
    +    //     .backing = backings.has_board,
    +    //     .optimize = optimize,
    +    // });
    +
    +    // const core_tests = b.addTest(.{
    +    //     .root_source_file = .{
    +    //         .path = comptime root_dir() ++ "/src/core.zig",
    +    //     },
    +    //     .optimize = optimize,
    +    // });
    +
    +    // const test_step = b.step("test", "build test programs");
    +    // test_step.dependOn(&minimal.inner.step);
    +    // test_step.dependOn(&has_hal.inner.step);
    +    // test_step.dependOn(&has_board.inner.step);
    +    // test_step.dependOn(&b.addRunArtifact(core_tests).step);
    +}
    +
    +/// The resulting binary format for the firmware file.
    +/// A lot of embedded systems don't use plain ELF files, thus we provide means
    +/// to convert the resulting ELF into other common formats.
    +pub const BinaryFormat = union(enum) {
    +    /// [Executable and Linkable Format](https://en.wikipedia.org/wiki/Executable_and_Linkable_Format), the standard output from the compiler.
    +    elf,
    +
    +    /// A flat binary, contains only the loaded portions of the firmware with an unspecified base offset.
    +    bin,
    +
    +    /// The [Intel HEX](https://en.wikipedia.org/wiki/Intel_HEX) format, contains
    +    /// an ASCII description of what memory to load where.
    +    hex,
    +
    +    /// A [Device Firmware Upgrade](https://www.usb.org/sites/default/files/DFU_1.1.pdf) file.
    +    dfu,
    +
    +    /// The [USB Flashing Format (UF2)](https://github.com/microsoft/uf2) designed by Microsoft.
    +    uf2: uf2.FamilyId,
    +
    +    /// The [firmware format](https://docs.espressif.com/projects/esptool/en/latest/esp32/advanced-topics/firmware-image-format.html) used by the [esptool](https://github.com/espressif/esptool) bootloader.
    +    esp,
    +
    +    /// Custom option for non-standard formats.
    +    custom: *Custom,
    +
    +    /// Returns the standard extension for the resulting binary file.
    +    pub fn getExtension(format: BinaryFormat) []const u8 {
    +        return switch (format) {
    +            .elf => ".elf",
    +            .bin => ".bin",
    +            .hex => ".hex",
    +            .dfu => ".dfu",
    +            .uf2 => ".uf2",
    +            .esp => ".bin",
    +
    +            .custom => |c| c.extension,
             };
         }
    -};
     
    -pub const EmbeddedExecutable = struct {
    -    inner: *LibExeObjStep,
    +    pub const Custom = struct {
    +        /// The standard extension of the format.
    +        extension: []const u8,
     
    -    pub const AppDependencyOptions = struct {
    -        depend_on_microzig: bool = false,
    +        /// A function that will convert a given `elf` file into the custom output format.
    +        ///
    +        /// The `*Custom` format is passed so contextual information can be obtained by using
    +        /// `@fieldParentPtr` to provide access to tooling.
    +        convert: *const fn (*Custom, elf: std.Build.LazyPath) std.Build.LazyPath,
         };
     
    -    pub fn addAppDependency(exe: *EmbeddedExecutable, name: []const u8, module: *Module, options: AppDependencyOptions) void {
    -        if (options.depend_on_microzig) {
    -            const microzig_module = exe.inner.modules.get("microzig").?;
    -            module.dependencies.put("microzig", microzig_module) catch @panic("OOM");
    +    const Enum = std.meta.Tag(BinaryFormat);
    +
    +    const Context = struct {
    +        pub fn hash(self: @This(), fmt: BinaryFormat) u32 {
    +            _ = self;
    +
    +            var hasher = std.hash.XxHash32.init(0x1337_42_21);
    +
    +            hasher.update(@tagName(fmt));
    +
    +            switch (fmt) {
    +                .elf, .bin, .hex, .dfu, .esp => |val| {
    +                    if (@TypeOf(val) != void) @compileError("Missing update: Context.hash now requires special care!");
    +                },
    +
    +                .uf2 => |family_id| hasher.update(@tagName(family_id)),
    +                .custom => |custom| hasher.update(std.mem.asBytes(custom)),
    +            }
    +
    +            return hasher.final();
             }
     
    -        const app_module = exe.inner.modules.get("app").?;
    -        app_module.dependencies.put(name, module) catch @panic("OOM");
    -    }
    +        pub fn eql(self: @This(), fmt_a: BinaryFormat, fmt_b: BinaryFormat, index: usize) bool {
    +            _ = self;
    +            _ = index;
    +            if (@as(BinaryFormat.Enum, fmt_a) != @as(BinaryFormat.Enum, fmt_b))
    +                return false;
     
    -    pub fn installArtifact(exe: *EmbeddedExecutable, b: *Build) void {
    -        b.installArtifact(exe.inner);
    -    }
    +            return switch (fmt_a) {
    +                .elf, .bin, .hex, .dfu, .esp => |val| {
    +                    if (@TypeOf(val) != void) @compileError("Missing update: Context.eql now requires special care!");
    +                    return true;
    +                },
     
    -    pub fn addIncludePath(exe: *EmbeddedExecutable, path: LazyPath) void {
    -        exe.inner.addIncludePath(path);
    -    }
    +                .uf2 => |a| (a == fmt_b.uf2),
    +                .custom => |a| (a == fmt_b.custom),
    +            };
    +        }
    +    };
    +};
     
    -    pub fn addSystemIncludePath(exe: *EmbeddedExecutable, path: LazyPath) void {
    -        return exe.inner.addSystemIncludePath(path);
    +/// The CPU model a target uses.
    +///
    +/// The CPUs usually require special care on how to do interrupts, and getting an entry point.
    +///
    +/// MicroZig officially only supports the CPUs listed here, but other CPUs might be provided
    +/// via the `custom` field.
    +pub const CpuModel = union(enum) {
    +    avr5,
    +    cortex_m0,
    +    cortex_m0plus,
    +    cortex_m3,
    +    cortex_m4,
    +    riscv32_imac,
    +
    +    custom: *const Cpu,
    +
    +    pub fn getDescriptor(model: CpuModel) *const Cpu {
    +        return switch (@as(std.meta.Tag(CpuModel), model)) {
    +            inline else => |tag| &@field(cpus, @tagName(tag)),
    +            .custom => model.custom,
    +        };
         }
    +};
     
    -    pub fn addCSourceFile(exe: *EmbeddedExecutable, source: Build.Step.Compile.CSourceFile) void {
    -        exe.inner.addCSourceFile(source);
    -    }
    +/// A cpu descriptor.
    +pub const Cpu = struct {
    +    /// Display name of the CPU.
    +    name: []const u8,
     
    -    pub fn addOptions(exe: *EmbeddedExecutable, module_name: []const u8, options: *OptionsStep) void {
    -        exe.inner.addOptions(module_name, options);
    -        const app_module = exe.inner.modules.get("app").?;
    -        const opt_module = exe.inner.modules.get(module_name).?;
    -        app_module.dependencies.put(module_name, opt_module) catch @panic("OOM");
    -    }
    +    /// Source file providing startup code and memory initialization routines.
    +    source_file: std.build.LazyPath,
     
    -    pub fn addObjectFile(exe: *EmbeddedExecutable, source: LazyPath) void {
    -        exe.inner.addObjectFile(source);
    -    }
    +    /// The compiler target we use to compile all the code.
    +    target: std.zig.CrossTarget,
     };
     
    -fn root_dir() []const u8 {
    -    return std.fs.path.dirname(@src().file) orelse unreachable;
    -}
    +/// A descriptor for memory regions in a microcontroller.
    +pub const MemoryRegion = struct {
    +    /// The type of the memory region for generating a proper linker script.
    +    kind: Kind,
    +    offset: u64,
    +    length: u64,
    +
    +    pub const Kind = union(enum) {
    +        /// This is a (normally) immutable memory region where the code is stored.
    +        flash,
    +
    +        /// This is a mutable memory region for data storage.
    +        ram,
    +
    +        /// This is a memory region that maps MMIO devices.
    +        io,
    +
    +        /// This is a memory region that exists, but is reserved and must not be used.
    +        reserved,
    +
    +        /// This is a memory region used for internal linking tasks required by the board support package.
    +        private: PrivateRegion,
    +    };
    +
    +    pub const PrivateRegion = struct {
    +        /// The name of the memory region. Will not have an automatic numeric counter and must be unique.
    +        name: []const u8,
    +
    +        /// Is the memory region executable?
    +        executable: bool,
    +
    +        /// Is the memory region readable?
    +        readable: bool,
     
    -pub const EmbeddedExecutableOptions = struct {
    +        /// Is the memory region writable?
    +        writeable: bool,
    +    };
    +};
    +
    +/// Defines a custom microcontroller.
    +pub const Chip = struct {
    +    /// The display name of the controller.
         name: []const u8,
    -    source_file: LazyPath,
    -    backing: Backing,
    -    optimize: std.builtin.OptimizeMode = .Debug,
    -    linkerscript_source_file: ?LazyPath = null,
    +
    +    /// (optional) link to the documentation/vendor page of the controller.
    +    url: ?[]const u8 = null,
    +
    +    /// The cpu model this controller uses.
    +    cpu: CpuModel,
    +
    +    /// The provider for register definitions.
    +    register_definition: union(enum) {
    +        /// Use `regz` to create a zig file from a JSON schema.
    +        json: std.Build.LazyPath,
    +
    +        /// Use `regz` to create a json file from a SVD schema.
    +        svd: std.Build.LazyPath,
    +
    +        /// Use `regz` to create a zig file from an ATDF schema.
    +        atdf: std.Build.LazyPath,
    +
    +        /// Use the provided file directly as the chip file.
    +        zig: std.Build.LazyPath,
    +    },
    +
    +    /// The memory regions that are present in this chip.
    +    memory_regions: []const MemoryRegion,
     };
     
    -pub fn addEmbeddedExecutable(b: *Build, opts: EmbeddedExecutableOptions) *EmbeddedExecutable {
    -    const has_board = (opts.backing == .board);
    -    const chip = switch (opts.backing) {
    -        .chip => |chip| chip,
    -        .board => |board| board.chip,
    -    };
    +/// Defines a hardware abstraction layer.
    +pub const HardwareAbstractionLayer = struct {
    +    /// Root source file for this HAL.
    +    source_file: std.Build.LazyPath,
    +};
    +
    +/// Provides a description of a board.
    +///
    +/// Boards provide additional information to a chip and HAL package.
    +/// For example, they can list attached peripherials, external crystal frequencies,
    +/// flash sizes, ...
    +pub const BoardDefinition = struct {
    +    /// Display name of the board
    +    name: []const u8,
    +
    +    /// (optional) link to the documentation/vendor page of the board.
    +    url: ?[]const u8 = null,
    +
    +    /// Provides the root file for the board definition.
    +    source_file: std.Build.LazyPath,
    +};
    +
    +/// The linker script used to link the firmware.
    +pub const LinkerScript = union(enum) {
    +    /// Auto-generated linker script derived from the memory regions of the chip.
    +    generated,
    +
    +    /// Externally defined linker script.
    +    source_file: std.build.LazyPath,
    +};
    +
    +/// A compilation target for MicroZig. Provides information about the chip,
    +/// hal, board and so on.
    +///
    +/// This is used instead of `std.zig.CrossTarget` to define a MicroZig Firmware.
    +pub const Target = struct {
    +    /// The preferred binary format of this MicroZig target. If `null`, the user must
    +    /// explicitly give the `.format` field during a call to `getEmittedBin()` or installation steps.
    +    preferred_format: ?BinaryFormat,
    +
    +    /// The chip this target uses,
    +    chip: Chip,
    +
    +    /// Usually, embedded projects are single-threaded and single-core applications. Platforms that
    +    /// support multiple CPUs should set this to `false`.
    +    single_threaded: bool = true,
    +
    +    /// Determines whether the compiler_rt package is bundled with the application or not.
    +    /// This should always be true except for platforms where compiler_rt cannot be built right now.
    +    bundle_compiler_rt: bool = true,
    +
    +    /// (optional) Provides a default hardware abstraction layer that is used.
    +    /// If `null`, no `microzig.hal` will be available.
    +    hal: ?HardwareAbstractionLayer = null,
    +
    +    /// (optional) Provides description of external hardware and connected devices
    +    /// like oscillators and such.
    +    ///
    +    /// This structure isn't used by MicroZig itself, but can be utilized from the HAL
    +    /// if present.
    +    board: ?BoardDefinition = null,
    +
    +    /// (optional) Provide a custom linker script for the hardware or define a custom generation.
    +    linker_script: LinkerScript = .generated,
    +
    +    /// (optional) Further configures the created firmware depending on the chip and/or board settings.
    +    /// This can be used to set/change additional properties on the created `*Firmware` object.
    +    configure: ?*const fn (host_build: *std.Build, *Firmware) void = null,
     
    -    const has_hal = chip.hal != null;
    +    /// (optional) Post processing step that will patch up and modify the elf file if necessary.
    +    binary_post_process: ?*const fn (host_build: *std.Build, std.Build.LazyPath) std.Build.LazyPath = null,
    +};
    +
    +/// Options to the `addFirmware` function.
    +pub const FirmwareOptions = struct {
    +    /// The name of the firmware file.
    +    name: []const u8,
    +
    +    /// The MicroZig target that the firmware is built for. Either a board or a chip.
    +    target: Target,
    +
    +    /// The optimization level that should be used. Usually `ReleaseSmall` or `Debug` is a good choice.
    +    /// Also using `std.Build.standardOptimizeOption` is a good idea.
    +    optimize: std.builtin.OptimizeMode,
    +
    +    /// The root source file for the application. This is your `src/main.zig` file.
    +    source_file: std.Build.LazyPath,
    +
    +    // Overrides:
    +
    +    /// If set, overrides the `single_threaded` property of the target.
    +    single_threaded: ?bool = null,
    +
    +    /// If set, overrides the `bundle_compiler_rt` property of the target.
    +    bundle_compiler_rt: ?bool = null,
    +
    +    /// If set, overrides the `hal` property of the target.
    +    hal: ?HardwareAbstractionLayer = null,
    +
    +    /// If set, overrides the `board` property of the target.
    +    board: ?BoardDefinition = null,
    +
    +    /// If set, overrides the `linker_script` property of the target.
    +    linker_script: ?LinkerScript = null,
    +};
    +
    +/// Declares a new MicroZig firmware file.
    +pub fn addFirmware(
    +    /// The MicroZig instance that should be used to create the firmware.
    +    mz: *MicroZig,
    +    /// The instance of the `build.zig` that is calling this function.
    +    host_build: *std.Build,
    +    /// Options that define how the firmware is built.
    +    options: FirmwareOptions,
    +) *Firmware {
    +    const micro_build = mz.self.builder;
    +
    +    const chip = &options.target.chip;
    +    const cpu = chip.cpu.getDescriptor();
    +    const maybe_hal = options.hal orelse options.target.hal;
    +    const maybe_board = options.board orelse options.target.board;
    +
    +    const linker_script = options.linker_script orelse options.target.linker_script;
     
         // TODO: let the user override which ram section to use the stack on,
         // for now just using the first ram section in the memory region list
    @@ -104,142 +426,551 @@ pub fn addEmbeddedExecutable(b: *Build, opts: EmbeddedExecutableOptions) *Embedd
             } else @panic("no ram memory region found for setting the end-of-stack address");
         };
     
    -    const config = b.addOptions();
    -    config.addOption(bool, "has_hal", has_hal);
    -    config.addOption(bool, "has_board", has_board);
    -    if (has_board)
    -        config.addOption([]const u8, "board_name", opts.backing.board.name);
    +    // On demand, generate chip definitions via regz:
    +    const chip_source = switch (chip.register_definition) {
    +        .json, .atdf, .svd => |file| blk: {
    +            const regz_exe = mz.dependency("regz", .{ .optimize = .ReleaseSafe }).artifact("regz");
    +
    +            const regz_gen = host_build.addRunArtifact(regz_exe);
    +
    +            regz_gen.addArg("--schema"); // Explicitly set schema type, one of: svd, atdf, json
    +            regz_gen.addArg(@tagName(chip.register_definition));
    +
    +            regz_gen.addArg("--output_path"); // Write to a file
    +            const zig_file = regz_gen.addOutputFileArg("chip.zig");
    +
    +            regz_gen.addFileArg(file);
    +
    +            break :blk zig_file;
    +        },
    +
    +        .zig => |src| src,
    +    };
    +
    +    const config = host_build.addOptions();
    +    config.addOption(bool, "has_hal", (maybe_hal != null));
    +    config.addOption(bool, "has_board", (maybe_board != null));
    +
    +    config.addOption(?[]const u8, "board_name", if (maybe_board) |brd| brd.name else null);
     
         config.addOption([]const u8, "chip_name", chip.name);
         config.addOption([]const u8, "cpu_name", chip.name);
         config.addOption(usize, "end_of_stack", first_ram.offset + first_ram.length);
     
    -    const microzig_module = b.createModule(.{
    -        .source_file = .{ .path = comptime std.fmt.comptimePrint("{s}/src/microzig.zig", .{root_dir()}) },
    -    });
    +    const fw: *Firmware = host_build.allocator.create(Firmware) catch @panic("out of memory");
    +    fw.* = Firmware{
    +        .mz = mz,
    +        .host_build = host_build,
    +        .artifact = host_build.addExecutable(.{
    +            .name = options.name,
    +            .optimize = options.optimize,
    +            .target = cpu.target,
    +            .linkage = .static,
    +            .root_source_file = .{ .cwd_relative = mz.self.builder.pathFromRoot("src/start.zig") },
    +        }),
    +        .target = options.target,
    +        .output_files = Firmware.OutputFileMap.init(host_build.allocator),
    +
    +        .config = config,
     
    -    microzig_module.dependencies.put("config", b.createModule(.{
    -        .source_file = config.getSource(),
    -    })) catch unreachable;
    +        .modules = .{
    +            .microzig = micro_build.createModule(.{
    +                .source_file = .{ .cwd_relative = micro_build.pathFromRoot("src/microzig.zig") },
    +                .dependencies = &.{
    +                    .{
    +                        .name = "config",
    +                        .module = micro_build.createModule(.{ .source_file = config.getSource() }),
    +                    },
    +                },
    +            }),
    +
    +            .cpu = undefined,
    +            .chip = undefined,
    +
    +            .board = null,
    +            .hal = null,
     
    -    microzig_module.dependencies.put("chip", b.createModule(.{
    -        .source_file = chip.source,
    +            .app = undefined,
    +        },
    +    };
    +    errdefer fw.output_files.deinit();
    +
    +    fw.modules.chip = micro_build.createModule(.{
    +        .source_file = chip_source,
             .dependencies = &.{
    -            .{ .name = "microzig", .module = microzig_module },
    +            .{ .name = "microzig", .module = fw.modules.microzig },
             },
    -    })) catch unreachable;
    +    });
    +    fw.modules.microzig.dependencies.put("chip", fw.modules.chip) catch @panic("out of memory");
     
    -    microzig_module.dependencies.put("cpu", b.createModule(.{
    -        .source_file = chip.cpu.source,
    +    fw.modules.cpu = micro_build.createModule(.{
    +        .source_file = cpu.source_file,
             .dependencies = &.{
    -            .{ .name = "microzig", .module = microzig_module },
    +            .{ .name = "microzig", .module = fw.modules.microzig },
             },
    -    })) catch unreachable;
    +    });
    +    fw.modules.microzig.dependencies.put("cpu", fw.modules.cpu) catch @panic("out of memory");
     
    -    if (chip.hal) |hal_module_source| {
    -        microzig_module.dependencies.put("hal", b.createModule(.{
    -            .source_file = hal_module_source,
    +    if (maybe_hal) |hal| {
    +        fw.modules.hal = micro_build.createModule(.{
    +            .source_file = hal.source_file,
                 .dependencies = &.{
    -                .{ .name = "microzig", .module = microzig_module },
    +                .{ .name = "microzig", .module = fw.modules.microzig },
                 },
    -        })) catch unreachable;
    +        });
    +        fw.modules.microzig.dependencies.put("hal", fw.modules.hal.?) catch @panic("out of memory");
         }
     
    -    switch (opts.backing) {
    -        .board => |board| {
    -            microzig_module.dependencies.put("board", b.createModule(.{
    -                .source_file = board.source,
    -                .dependencies = &.{
    -                    .{ .name = "microzig", .module = microzig_module },
    -                },
    -            })) catch unreachable;
    -        },
    -        else => {},
    +    if (maybe_board) |brd| {
    +        fw.modules.board = micro_build.createModule(.{
    +            .source_file = brd.source_file,
    +            .dependencies = &.{
    +                .{ .name = "microzig", .module = fw.modules.microzig },
    +            },
    +        });
    +        fw.modules.microzig.dependencies.put("board", fw.modules.board.?) catch @panic("out of memory");
         }
     
    -    const app_module = b.createModule(.{
    -        .source_file = opts.source_file,
    +    fw.modules.app = host_build.createModule(.{
    +        .source_file = options.source_file,
             .dependencies = &.{
    -            .{ .name = "microzig", .module = microzig_module },
    +            .{ .name = "microzig", .module = fw.modules.microzig },
             },
         });
     
    -    const exe = b.allocator.create(EmbeddedExecutable) catch unreachable;
    -    exe.* = EmbeddedExecutable{
    -        .inner = b.addExecutable(.{
    -            .name = opts.name,
    -            .root_source_file = .{ .path = comptime std.fmt.comptimePrint("{s}/src/start.zig", .{root_dir()}) },
    -            .target = chip.cpu.target,
    -            .optimize = opts.optimize,
    -        }),
    -    };
    -    exe.inner.addModule("app", app_module);
    -    exe.inner.addModule("microzig", microzig_module);
    +    fw.artifact.addModule("app", fw.modules.app);
    +    fw.artifact.addModule("microzig", fw.modules.microzig);
     
    -    exe.inner.strip = false; // we always want debug symbols, stripping brings us no benefit on embedded
    +    fw.artifact.strip = false; // we always want debug symbols, stripping brings us no benefit on embedded
    +    fw.artifact.single_threaded = options.single_threaded orelse fw.target.single_threaded;
    +    fw.artifact.bundle_compiler_rt = options.bundle_compiler_rt orelse fw.target.bundle_compiler_rt;
     
    -    // might not be true for all machines (Pi Pico), but
    -    // for the HAL it's true (it doesn't know the concept of threading)
    -    exe.inner.single_threaded = true;
    +    switch (linker_script) {
    +        .generated => {
    +            fw.artifact.setLinkerScript(
    +                generateLinkerScript(host_build, chip.*) catch @panic("out of memory"),
    +            );
    +        },
     
    -    if (opts.linkerscript_source_file) |linkerscript_source_file| {
    -        exe.inner.setLinkerScriptPath(linkerscript_source_file);
    -    } else {
    -        const linkerscript = LinkerScriptStep.create(b, chip) catch unreachable;
    -        exe.inner.setLinkerScriptPath(.{ .generated = &linkerscript.generated_file });
    +        .source_file => |source| {
    +            fw.artifact.setLinkerScriptPath(source);
    +        },
         }
     
    -    // TODO:
    -    // - Generate the linker scripts from the "chip" or "board" module instead of using hardcoded ones.
    -    //   - This requires building another tool that runs on the host that compiles those files and emits the linker script.
    -    //    - src/tools/linkerscript-gen.zig is the source file for this
    -    exe.inner.bundle_compiler_rt = (exe.inner.target.getCpuArch() != .avr); // don't bundle compiler_rt for AVR as it doesn't compile right now
    +    if (options.target.configure) |configure| {
    +        configure(host_build, fw);
    +    }
     
    -    return exe;
    +    return fw;
     }
     
    -/// This build script validates usage patterns we expect from MicroZig
    -pub fn build(b: *Build) !void {
    -    const backings = @import("test/backings.zig");
    -    const optimize = b.standardOptimizeOption(.{});
    -
    -    const minimal = addEmbeddedExecutable(b, .{
    -        .name = "minimal",
    -        .source_file = .{
    -            .path = comptime root_dir() ++ "/test/programs/minimal.zig",
    -        },
    -        .backing = backings.minimal,
    -        .optimize = optimize,
    +/// Configuration options for firmware installation.
    +pub const InstallFirmwareOptions = struct {
    +    /// Overrides the output format for the binary. If not set, the standard preferred file format for the firmware target is used.
    +    format: ?BinaryFormat = null,
    +};
    +
    +/// Adds a new dependency to the `install` step that will install the `firmware` into the folder `$prefix/firmware`.
    +pub fn installFirmware(
    +    /// The MicroZig instance that was used to create the firmware.
    +    mz: *MicroZig,
    +    /// The instance of the `build.zig` that should perform installation.
    +    b: *std.Build,
    +    /// The firmware that should be installed. Please make sure that this was created with the same `MicroZig` instance as `mz`.
    +    firmware: *Firmware,
    +    /// Optional configuration of the installation process. Pass `.{}` if you're not sure what to do here.
    +    options: InstallFirmwareOptions,
    +) void {
    +    std.debug.assert(mz == firmware.mz);
    +    const install_step = addInstallFirmware(mz, b, firmware, options);
    +    b.getInstallStep().dependOn(&install_step.step);
    +}
    +
    +/// Creates a new `std.Build.Step.InstallFile` instance that will install the given firmware to `$prefix/firmware`.
    +///
    +/// **NOTE:** This does not actually install the firmware yet. You have to add the returned step as a dependency to another step.
    +///           If you want to just install the firmware, use `installFirmware` instead!
    +pub fn addInstallFirmware(
    +    /// The MicroZig instance that was used to create the firmware.
    +    mz: *MicroZig,
    +    /// The instance of the `build.zig` that should perform installation.
    +    b: *std.Build,
    +    /// The firmware that should be installed. Please make sure that this was created with the same `MicroZig` instance as `mz`.
    +    firmware: *Firmware,
    +    /// Optional configuration of the installation process. Pass `.{}` if you're not sure what to do here.
    +    options: InstallFirmwareOptions,
    +) *std.Build.Step.InstallFile {
    +    const format = firmware.resolveFormat(options.format);
    +
    +    const basename = b.fmt("{s}{s}", .{
    +        firmware.artifact.name,
    +        format.getExtension(),
         });
     
    -    const has_hal = addEmbeddedExecutable(b, .{
    -        .name = "has_hal",
    -        .source_file = .{
    -            .path = comptime root_dir() ++ "/test/programs/has_hal.zig",
    +    _ = mz;
    +
    +    return b.addInstallFileWithDir(firmware.getEmittedBin(format), .{ .custom = "firmware" }, basename);
    +}
    +
    +/// Declaration of a firmware build.
    +pub const Firmware = struct {
    +    const OutputFileMap = std.ArrayHashMap(BinaryFormat, std.Build.LazyPath, BinaryFormat.Context, false);
    +
    +    const Modules = struct {
    +        app: *std.Build.Module,
    +        cpu: *std.Build.Module,
    +        chip: *std.Build.Module,
    +        board: ?*std.Build.Module,
    +        hal: ?*std.Build.Module,
    +        microzig: *std.Build.Module,
    +    };
    +
    +    // privates:
    +    mz: *MicroZig,
    +    host_build: *std.Build,
    +    target: Target,
    +    output_files: OutputFileMap,
    +
    +    // publics:
    +
    +    /// The artifact that is built by Zig.
    +    artifact: *std.Build.Step.Compile,
    +
    +    /// The options step that provides `microzig.config`. If you need custom configuration, you can add this here.
    +    config: *std.Build.Step.Options,
    +
    +    /// Declaration of the MicroZig modules used by this firmware.
    +    modules: Modules,
    +
    +    /// Path to the emitted elf file, if any.
    +    emitted_elf: ?std.Build.LazyPath = null,
    +
    +    /// Returns the emitted ELF file for this firmware. This is useful if you need debug information
    +    /// or want to use a debugger like Segger, ST-Link or similar.
    +    ///
    +    /// **NOTE:** This is similar, but not equivalent to `std.Build.Step.Compile.getEmittedBin`. The call on the compile step does
    +    ///           not include post processing of the ELF files necessary by certain targets.
    +    pub fn getEmittedElf(firmware: *Firmware) std.Build.LazyPath {
    +        if (firmware.emitted_elf == null) {
    +            const raw_elf = firmware.artifact.getEmittedBin();
    +            firmware.emitted_elf = if (firmware.target.binary_post_process) |binary_post_process|
    +                binary_post_process(firmware.host_build, raw_elf)
    +            else
    +                raw_elf;
    +        }
    +        return firmware.emitted_elf.?;
    +    }
    +
    +    /// Returns the emitted binary for this firmware. The file is either in the preferred file format for
    +    /// the target or in `format` if not null.
    +    ///
    +    /// **NOTE:** The file returned here is the same file that will be installed.
    +    pub fn getEmittedBin(firmware: *Firmware, format: ?BinaryFormat) std.Build.LazyPath {
    +        const actual_format = firmware.resolveFormat(format);
    +
    +        const gop = firmware.output_files.getOrPut(actual_format) catch @panic("out of memory");
    +        if (!gop.found_existing) {
    +            const elf_file = firmware.getEmittedElf();
    +
    +            const basename = firmware.host_build.fmt("{s}{s}", .{
    +                firmware.artifact.name,
    +                actual_format.getExtension(),
    +            });
    +
    +            gop.value_ptr.* = switch (actual_format) {
    +                .elf => elf_file,
    +
    +                .bin => blk: {
    +                    const objcopy = firmware.host_build.addObjCopy(elf_file, .{
    +                        .basename = basename,
    +                        .format = .bin,
    +                    });
    +
    +                    break :blk objcopy.getOutput();
    +                },
    +
    +                .hex => blk: {
    +                    const objcopy = firmware.host_build.addObjCopy(elf_file, .{
    +                        .basename = basename,
    +                        .format = .hex,
    +                    });
    +
    +                    break :blk objcopy.getOutput();
    +                },
    +
    +                .uf2 => |family_id| blk: {
    +                    const uf2_exe = firmware.mz.dependency("uf2", .{ .optimize = .ReleaseSafe }).artifact("elf2uf2");
    +
    +                    const convert = firmware.host_build.addRunArtifact(uf2_exe);
    +
    +                    convert.addArg("--family-id");
    +                    convert.addArg(firmware.host_build.fmt("0x{X:0>4}", .{@intFromEnum(family_id)}));
    +
    +                    convert.addArg("--elf-path");
    +                    convert.addFileArg(elf_file);
    +
    +                    convert.addArg("--output-path");
    +                    break :blk convert.addOutputFileArg(basename);
    +                },
    +
    +                .dfu => buildConfigError(firmware.host_build, "DFU is not implemented yet. See https://github.com/ZigEmbeddedGroup/microzig/issues/145 for more details!", .{}),
    +                .esp => buildConfigError(firmware.host_build, "ESP firmware image is not implemented yet. See https://github.com/ZigEmbeddedGroup/microzig/issues/146 for more details!", .{}),
    +
    +                .custom => |generator| generator.convert(generator, elf_file),
    +            };
    +        }
    +        return gop.value_ptr.*;
    +    }
    +
    +    pub const AppDependencyOptions = struct {
    +        depend_on_microzig: bool = false,
    +    };
    +
    +    /// Adds a regular dependency to your application.
    +    pub fn addAppDependency(fw: *Firmware, name: []const u8, module: *std.Build.Module, options: AppDependencyOptions) void {
    +        if (options.depend_on_microzig) {
    +            module.dependencies.put("microzig", fw.modules.microzig) catch @panic("OOM");
    +        }
    +        fw.modules.app.dependencies.put(name, module) catch @panic("OOM");
    +    }
    +
    +    pub fn addIncludePath(fw: *Firmware, path: std.Build.LazyPath) void {
    +        fw.artifact.addIncludePath(path);
    +    }
    +
    +    pub fn addSystemIncludePath(fw: *Firmware, path: std.Build.LazyPath) void {
    +        fw.artifact.addSystemIncludePath(path);
    +    }
    +
    +    pub fn addCSourceFile(fw: *Firmware, source: std.Build.Step.Compile.CSourceFile) void {
    +        fw.artifact.addCSourceFile(source);
    +    }
    +
    +    pub fn addOptions(fw: *Firmware, module_name: []const u8, options: *std.Build.OptionsStep) void {
    +        fw.artifact.addOptions(module_name, options);
    +        fw.modules.app.dependencies.put(
    +            module_name,
    +            fw.host_build.createModule(.{
    +                .source_file = options.getOutput(),
    +            }),
    +        ) catch @panic("OOM");
    +    }
    +
    +    pub fn addObjectFile(fw: *Firmware, source: std.Build.LazyPath) void {
    +        fw.artifact.addObjectFile(source);
    +    }
    +
    +    fn resolveFormat(firmware: *Firmware, format: ?BinaryFormat) BinaryFormat {
    +        if (format) |fmt| return fmt;
    +
    +        if (firmware.target.preferred_format) |fmt| return fmt;
    +
    +        buildConfigError(firmware.host_build, "{s} has no preferred output format, please provide one in the `format` option.", .{
    +            firmware.target.chip.name,
    +        });
    +    }
    +};
    +
    +pub const cpus = struct {
    +    pub const avr5 = Cpu{
    +        .name = "AVR5",
    +        .source_file = .{ .path = build_root ++ "/src/cpus/avr5.zig" },
    +        .target = std.zig.CrossTarget{
    +            .cpu_arch = .avr,
    +            .cpu_model = .{ .explicit = &std.Target.avr.cpu.avr5 },
    +            .os_tag = .freestanding,
    +            .abi = .eabi,
             },
    -        .backing = backings.has_hal,
    -        .optimize = optimize,
    -    });
    +    };
     
    -    const has_board = addEmbeddedExecutable(b, .{
    -        .name = "has_board",
    -        .source_file = .{
    -            .path = comptime root_dir() ++ "/test/programs/has_board.zig",
    +    pub const cortex_m0 = Cpu{
    +        .name = "ARM Cortex-M0",
    +        .source_file = .{ .path = build_root ++ "/src/cpus/cortex-m.zig" },
    +        .target = std.zig.CrossTarget{
    +            .cpu_arch = .thumb,
    +            .cpu_model = .{ .explicit = &std.Target.arm.cpu.cortex_m0 },
    +            .os_tag = .freestanding,
    +            .abi = .none,
             },
    -        .backing = backings.has_board,
    -        .optimize = optimize,
    -    });
    +    };
    +
    +    pub const cortex_m0plus = Cpu{
    +        .name = "ARM Cortex-M0+",
    +        .source_file = .{ .path = build_root ++ "/src/cpus/cortex-m.zig" },
    +        .target = std.zig.CrossTarget{
    +            .cpu_arch = .thumb,
    +            .cpu_model = .{ .explicit = &std.Target.arm.cpu.cortex_m0plus },
    +            .os_tag = .freestanding,
    +            .abi = .none,
    +        },
    +    };
    +
    +    pub const cortex_m3 = Cpu{
    +        .name = "ARM Cortex-M3",
    +        .source_file = .{ .path = build_root ++ "/src/cpus/cortex-m.zig" },
    +        .target = std.zig.CrossTarget{
    +            .cpu_arch = .thumb,
    +            .cpu_model = .{ .explicit = &std.Target.arm.cpu.cortex_m3 },
    +            .os_tag = .freestanding,
    +            .abi = .none,
    +        },
    +    };
    +
    +    pub const cortex_m4 = Cpu{
    +        .name = "ARM Cortex-M4",
    +        .source_file = .{ .path = build_root ++ "/src/cpus/cortex-m.zig" },
    +        .target = std.zig.CrossTarget{
    +            .cpu_arch = .thumb,
    +            .cpu_model = .{ .explicit = &std.Target.arm.cpu.cortex_m4 },
    +            .os_tag = .freestanding,
    +            .abi = .none,
    +        },
    +    };
     
    -    const core_tests = b.addTest(.{
    -        .root_source_file = .{
    -            .path = comptime root_dir() ++ "/src/core.zig",
    +    pub const riscv32_imac = Cpu{
    +        .name = "RISC-V 32-bit",
    +        .source_file = .{ .path = build_root ++ "/src/cpus/riscv32.zig" },
    +        .target = std.zig.CrossTarget{
    +            .cpu_arch = .riscv32,
    +            .cpu_model = .{ .explicit = &std.Target.riscv.cpu.sifive_e21 },
    +            .os_tag = .freestanding,
    +            .abi = .none,
             },
    -        .optimize = optimize,
    +    };
    +};
    +
    +fn buildConfigError(b: *std.Build, comptime fmt: []const u8, args: anytype) noreturn {
    +    const msg = b.fmt(fmt, args);
    +    @panic(msg);
    +}
    +
    +fn dependency(mz: *MicroZig, name: []const u8, args: anytype) *std.Build.Dependency {
    +    return mz.self.builder.dependency(name, args);
    +}
    +
    +fn generateLinkerScript(b: *std.Build, chip: Chip) !std.Build.LazyPath {
    +    const cpu = chip.cpu.getDescriptor();
    +
    +    var contents = std.ArrayList(u8).init(b.allocator);
    +    const writer = contents.writer();
    +    try writer.print(
    +        \\/*
    +        \\ * This file was auto-generated by microzig
    +        \\ *
    +        \\ * Target CPU:  {[cpu]s}
    +        \\ * Target Chip: {[chip]s}
    +        \\ */
    +        \\
    +        // This is not the "true" entry point, but there's no such thing on embedded platforms
    +        // anyways. This is the logical entrypoint that should be invoked when
    +        // stack, .data and .bss are set up and the CPU is ready to be used.
    +        \\ENTRY(microzig_main);
    +        \\
    +        \\
    +    , .{
    +        .cpu = cpu.name,
    +        .chip = chip.name,
         });
     
    -    const test_step = b.step("test", "build test programs");
    -    test_step.dependOn(&minimal.inner.step);
    -    test_step.dependOn(&has_hal.inner.step);
    -    test_step.dependOn(&has_board.inner.step);
    -    test_step.dependOn(&b.addRunArtifact(core_tests).step);
    +    try writer.writeAll("MEMORY\n{\n");
    +    {
    +        var counters = [4]usize{ 0, 0, 0, 0 };
    +        for (chip.memory_regions) |region| {
    +            // flash (rx!w) : ORIGIN = 0x00000000, LENGTH = 512k
    +
    +            switch (region.kind) {
    +                .flash => {
    +                    try writer.print("  flash{d}    (rx!w)", .{counters[0]});
    +                    counters[0] += 1;
    +                },
    +
    +                .ram => {
    +                    try writer.print("  ram{d}      (rw!x)", .{counters[1]});
    +                    counters[1] += 1;
    +                },
    +
    +                .io => {
    +                    try writer.print("  io{d}       (rw!x)", .{counters[2]});
    +                    counters[2] += 1;
    +                },
    +
    +                .reserved => {
    +                    try writer.print("  reserved{d} (rw!x)", .{counters[3]});
    +                    counters[3] += 1;
    +                },
    +
    +                .private => |custom| {
    +                    try writer.print("  {s} (", .{custom.name});
    +                    if (custom.readable) try writer.writeAll("r");
    +                    if (custom.writeable) try writer.writeAll("w");
    +                    if (custom.executable) try writer.writeAll("x");
    +
    +                    if (!custom.readable or !custom.writeable or !custom.executable) {
    +                        try writer.writeAll("!");
    +                        if (!custom.readable) try writer.writeAll("r");
    +                        if (!custom.writeable) try writer.writeAll("w");
    +                        if (!custom.executable) try writer.writeAll("x");
    +                    }
    +                    try writer.writeAll(")");
    +                },
    +            }
    +            try writer.print(" : ORIGIN = 0x{X:0>8}, LENGTH = 0x{X:0>8}\n", .{ region.offset, region.length });
    +        }
    +    }
    +
    +    try writer.writeAll("}\n\nSECTIONS\n{\n");
    +    {
    +        try writer.writeAll(
    +            \\  .text :
    +            \\  {
    +            \\     KEEP(*(microzig_flash_start))
    +            \\     *(.text*)
    +            \\  } > flash0
    +            \\
    +            \\
    +        );
    +
    +        switch (cpu.target.getCpuArch()) {
    +            .arm, .thumb => try writer.writeAll(
    +                \\  .ARM.exidx : {
    +                \\      *(.ARM.exidx* .gnu.linkonce.armexidx.*)
    +                \\  } >flash0
    +                \\
    +                \\
    +            ),
    +            else => {},
    +        }
    +
    +        try writer.writeAll(
    +            \\  .data :
    +            \\  {
    +            \\     microzig_data_start = .;
    +            \\     *(.rodata*)
    +            \\     *(.data*)
    +            \\     microzig_data_end = .;
    +            \\  } > ram0 AT> flash0
    +            \\
    +            \\  .bss (NOLOAD) :
    +            \\  {
    +            \\      microzig_bss_start = .;
    +            \\      *(.bss*)
    +            \\      microzig_bss_end = .;
    +            \\  } > ram0
    +            \\
    +            \\  microzig_data_load_start = LOADADDR(.data);
    +            \\
    +        );
    +    }
    +    try writer.writeAll("}\n");
    +
    +    // TODO: Assert that the flash can actually hold all data!
    +    // try writer.writeAll(
    +    //     \\
    +    //     \\  ASSERT( (SIZEOF(.text) + SIZEOF(.data) > LENGTH(flash0)), "Error: .text + .data is too large for flash!" );
    +    //     \\
    +    // );
    +
    +    const write = b.addWriteFiles();
    +
    +    return write.add("linker.ld", contents.items);
     }
    diff --git a/build.zig.zon b/build.zig.zon
    new file mode 100644
    index 000000000..5f0ac76f9
    --- /dev/null
    +++ b/build.zig.zon
    @@ -0,0 +1,14 @@
    +.{
    +    .name = "microzig",
    +    .version = "0.1.0",
    +    .dependencies = .{
    +        .uf2 = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/uf2/archive/c523a4d23469282f95658a879f5ba925757dc9d9.tar.gz",
    +            .hash = "12208530bdc194e8c1f3405ad681a409c7fabfe82735cd3972ec07c221a7786db03a",
    +        },
    +        .regz = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/regz/archive/b0ded63fc284da0ed9f4776eb7d1c4ad7175622d.tar.gz",
    +            .hash = "1220e9299f949d3566a1dc4dd62caf82a06bb6c8ad5a693e62117b0941da9dc55ea2",
    +        },
    +    },
    +}
    diff --git a/src/modules/cpus/avr5.zig b/src/cpus/avr5.zig
    similarity index 100%
    rename from src/modules/cpus/avr5.zig
    rename to src/cpus/avr5.zig
    diff --git a/src/modules/cpus/cortex-m.zig b/src/cpus/cortex-m.zig
    similarity index 100%
    rename from src/modules/cpus/cortex-m.zig
    rename to src/cpus/cortex-m.zig
    diff --git a/src/modules/cpus/riscv32.zig b/src/cpus/riscv32.zig
    similarity index 100%
    rename from src/modules/cpus/riscv32.zig
    rename to src/cpus/riscv32.zig
    diff --git a/src/modules/Board.zig b/src/modules/Board.zig
    deleted file mode 100644
    index 8e09b4aca..000000000
    --- a/src/modules/Board.zig
    +++ /dev/null
    @@ -1,6 +0,0 @@
    -const std = @import("std");
    -const Chip = @import("Chip.zig");
    -
    -name: []const u8,
    -source: std.build.LazyPath,
    -chip: Chip,
    diff --git a/src/modules/Chip.zig b/src/modules/Chip.zig
    deleted file mode 100644
    index 3676fc9b5..000000000
    --- a/src/modules/Chip.zig
    +++ /dev/null
    @@ -1,44 +0,0 @@
    -const std = @import("std");
    -const LazyPath = std.build.LazyPath;
    -
    -const MemoryRegion = @import("MemoryRegion.zig");
    -const Cpu = @import("Cpu.zig");
    -
    -const Chip = @This();
    -
    -name: []const u8,
    -source: LazyPath,
    -cpu: Cpu,
    -hal: ?LazyPath = null,
    -json_register_schema: ?LazyPath = null,
    -memory_regions: []const MemoryRegion,
    -
    -pub fn from_standard_paths(comptime root_dir: []const u8, args: struct {
    -    name: []const u8,
    -    cpu: Cpu,
    -    memory_regions: []const MemoryRegion,
    -}) Chip {
    -    return Chip{
    -        .name = args.name,
    -        .cpu = args.cpu,
    -        .memory_regions = args.memory_regions,
    -        .source = .{
    -            .path = std.fmt.comptimePrint("{s}/chips/{s}.zig", .{
    -                root_dir,
    -                args.name,
    -            }),
    -        },
    -        .hal = .{
    -            .path = std.fmt.comptimePrint("{s}/hals/{s}.zig", .{
    -                root_dir,
    -                args.name,
    -            }),
    -        },
    -        .json_register_schema = .{
    -            .path = std.fmt.comptimePrint("{s}/chips/{s}.json", .{
    -                root_dir,
    -                args.name,
    -            }),
    -        },
    -    };
    -}
    diff --git a/src/modules/Cpu.zig b/src/modules/Cpu.zig
    deleted file mode 100644
    index e4cd30773..000000000
    --- a/src/modules/Cpu.zig
    +++ /dev/null
    @@ -1,5 +0,0 @@
    -const std = @import("std");
    -
    -name: []const u8,
    -source: std.build.LazyPath,
    -target: std.zig.CrossTarget,
    diff --git a/src/modules/LinkerScriptStep.zig b/src/modules/LinkerScriptStep.zig
    deleted file mode 100644
    index fb9227795..000000000
    --- a/src/modules/LinkerScriptStep.zig
    +++ /dev/null
    @@ -1,172 +0,0 @@
    -const std = @import("std");
    -const MemoryRegion = @import("MemoryRegion.zig");
    -const Chip = @import("Chip.zig");
    -const Step = std.build.Step;
    -const Build = std.Build;
    -const GeneratedFile = std.build.GeneratedFile;
    -
    -const LinkerscriptStep = @This();
    -
    -step: Step,
    -generated_file: std.build.GeneratedFile,
    -chip: Chip,
    -
    -pub fn create(owner: *Build, chip: Chip) !*LinkerscriptStep {
    -    var linkerscript = try owner.allocator.create(LinkerscriptStep);
    -    linkerscript.* = LinkerscriptStep{
    -        .step = Step.init(.{
    -            .id = .custom,
    -            .name = "linkerscript",
    -            .owner = owner,
    -            .makeFn = make,
    -        }),
    -        .generated_file = .{
    -            .step = &linkerscript.step,
    -        },
    -        .chip = chip,
    -    };
    -
    -    return linkerscript;
    -}
    -
    -fn make(step: *Step, _: *std.Progress.Node) anyerror!void {
    -    const linkerscript = @fieldParentPtr(LinkerscriptStep, "step", step);
    -
    -    const owner = linkerscript.step.owner;
    -    const target = linkerscript.chip.cpu.target;
    -
    -    var contents = std.ArrayList(u8).init(owner.allocator);
    -    const writer = contents.writer();
    -    try writer.print(
    -        \\/*
    -        \\ * This file was auto-generated by microzig
    -        \\ *
    -        \\ * Target CPU:  {s}
    -        \\ * Target Chip: {s}
    -        \\ */
    -        \\
    -        // This is not the "true" entry point, but there's no such thing on embedded platforms
    -        // anyways. This is the logical entrypoint that should be invoked when
    -        // stack, .data and .bss are set up and the CPU is ready to be used.
    -        \\ENTRY(microzig_main);
    -        \\
    -        \\
    -    , .{ linkerscript.chip.cpu.name, linkerscript.chip.name });
    -
    -    try writer.writeAll("MEMORY\n{\n");
    -    {
    -        var counters = [2]usize{ 0, 0 };
    -        for (linkerscript.chip.memory_regions) |region| {
    -            // flash (rx!w) : ORIGIN = 0x00000000, LENGTH = 512k
    -
    -            switch (region.kind) {
    -                .flash => {
    -                    try writer.print("  flash{d} (rx!w)", .{counters[0]});
    -                    counters[0] += 1;
    -                },
    -                .ram => {
    -                    try writer.print("  ram{d}   (rw!x)", .{counters[1]});
    -                    counters[1] += 1;
    -                },
    -                .custom => |custom| {
    -                    try writer.print("  {s} (", .{custom.name});
    -                    if (custom.readable) try writer.writeAll("r");
    -                    if (custom.writeable) try writer.writeAll("w");
    -                    if (custom.executable) try writer.writeAll("x");
    -
    -                    if (!custom.readable or !custom.writeable or !custom.executable) {
    -                        try writer.writeAll("!");
    -                        if (!custom.readable) try writer.writeAll("r");
    -                        if (!custom.writeable) try writer.writeAll("w");
    -                        if (!custom.executable) try writer.writeAll("x");
    -                    }
    -                    try writer.writeAll(")");
    -                },
    -            }
    -            try writer.print(" : ORIGIN = 0x{X:0>8}, LENGTH = 0x{X:0>8}\n", .{ region.offset, region.length });
    -        }
    -    }
    -
    -    try writer.writeAll("}\n\nSECTIONS\n{\n");
    -    {
    -        try writer.writeAll(
    -            \\  .text :
    -            \\  {
    -            \\     KEEP(*(microzig_flash_start))
    -            \\     *(.text*)
    -            \\  } > flash0
    -            \\
    -            \\
    -        );
    -
    -        switch (target.getCpuArch()) {
    -            .arm, .thumb => try writer.writeAll(
    -                \\  .ARM.exidx : {
    -                \\      *(.ARM.exidx* .gnu.linkonce.armexidx.*)
    -                \\  } >flash0
    -                \\
    -                \\
    -            ),
    -            else => {},
    -        }
    -
    -        try writer.writeAll(
    -            \\  .data :
    -            \\  {
    -            \\     microzig_data_start = .;
    -            \\     *(.rodata*)
    -            \\     *(.data*)
    -            \\     microzig_data_end = .;
    -            \\  } > ram0 AT> flash0
    -            \\
    -            \\  .bss (NOLOAD) :
    -            \\  {
    -            \\      microzig_bss_start = .;
    -            \\      *(.bss*)
    -            \\      microzig_bss_end = .;
    -            \\  } > ram0
    -            \\
    -            \\  microzig_data_load_start = LOADADDR(.data);
    -            \\
    -        );
    -    }
    -    try writer.writeAll("}\n");
    -
    -    // TODO: Assert that the flash can actually hold all data!
    -    // try writer.writeAll(
    -    //     \\
    -    //     \\  ASSERT( (SIZEOF(.text) + SIZEOF(.data) > LENGTH(flash0)), "Error: .text + .data is too large for flash!" );
    -    //     \\
    -    // );
    -
    -    const filename = try std.fmt.allocPrint(owner.allocator, "{s}_{s}.ld", .{
    -        linkerscript.chip.name,
    -        linkerscript.chip.cpu.name,
    -    });
    -
    -    var hash = owner.cache.hash;
    -    hash.addBytes(linkerscript.chip.name);
    -    hash.addBytes(linkerscript.chip.cpu.name);
    -
    -    // TODO: hash more information to reduce chance of collision
    -    for (linkerscript.chip.memory_regions) |memory_region| {
    -        hash.add(memory_region.offset);
    -        hash.add(memory_region.length);
    -    }
    -
    -    const digest = hash.final();
    -    const dir_path = try owner.cache_root.join(owner.allocator, &.{
    -        "microzig",
    -        &digest,
    -    });
    -
    -    var dir = try owner.cache_root.handle.makeOpenPath(dir_path, .{});
    -    defer dir.close();
    -
    -    const file = try dir.createFile(filename, .{});
    -    defer file.close();
    -
    -    try file.writeAll(contents.items);
    -    const full_path = owner.pathJoin(&.{ dir_path, filename });
    -    linkerscript.generated_file.path = full_path;
    -}
    diff --git a/src/modules/MemoryRegion.zig b/src/modules/MemoryRegion.zig
    deleted file mode 100644
    index 048b2b54a..000000000
    --- a/src/modules/MemoryRegion.zig
    +++ /dev/null
    @@ -1,18 +0,0 @@
    -//! This module is meant to be used to define linking apis
    -
    -kind: Kind,
    -offset: u64,
    -length: u64,
    -
    -pub const Kind = union(enum) {
    -    flash,
    -    ram,
    -    custom: RegionSpec,
    -};
    -
    -pub const RegionSpec = struct {
    -    name: []const u8,
    -    executable: bool,
    -    readable: bool,
    -    writeable: bool,
    -};
    diff --git a/src/modules/cpus.zig b/src/modules/cpus.zig
    deleted file mode 100644
    index a2cf39622..000000000
    --- a/src/modules/cpus.zig
    +++ /dev/null
    @@ -1,84 +0,0 @@
    -const std = @import("std");
    -const Cpu = @import("Cpu.zig");
    -
    -fn root_dir() []const u8 {
    -    return std.fs.path.dirname(@src().file) orelse ".";
    -}
    -
    -pub const avr5 = Cpu{
    -    .name = "AVR5",
    -    .source = .{
    -        .path = std.fmt.comptimePrint("{s}/cpus/avr5.zig", .{root_dir()}),
    -    },
    -    .target = std.zig.CrossTarget{
    -        .cpu_arch = .avr,
    -        .cpu_model = .{ .explicit = &std.Target.avr.cpu.avr5 },
    -        .os_tag = .freestanding,
    -        .abi = .eabi,
    -    },
    -};
    -
    -pub const cortex_m0 = Cpu{
    -    .name = "ARM Cortex-M0",
    -    .source = .{
    -        .path = std.fmt.comptimePrint("{s}/cpus/cortex-m.zig", .{root_dir()}),
    -    },
    -    .target = std.zig.CrossTarget{
    -        .cpu_arch = .thumb,
    -        .cpu_model = .{ .explicit = &std.Target.arm.cpu.cortex_m0 },
    -        .os_tag = .freestanding,
    -        .abi = .none,
    -    },
    -};
    -
    -pub const cortex_m0plus = Cpu{
    -    .name = "ARM Cortex-M0+",
    -    .source = .{
    -        .path = std.fmt.comptimePrint("{s}/cpus/cortex-m.zig", .{root_dir()}),
    -    },
    -    .target = std.zig.CrossTarget{
    -        .cpu_arch = .thumb,
    -        .cpu_model = .{ .explicit = &std.Target.arm.cpu.cortex_m0plus },
    -        .os_tag = .freestanding,
    -        .abi = .none,
    -    },
    -};
    -
    -pub const cortex_m3 = Cpu{
    -    .name = "ARM Cortex-M3",
    -    .source = .{
    -        .path = std.fmt.comptimePrint("{s}/cpus/cortex-m.zig", .{root_dir()}),
    -    },
    -    .target = std.zig.CrossTarget{
    -        .cpu_arch = .thumb,
    -        .cpu_model = .{ .explicit = &std.Target.arm.cpu.cortex_m3 },
    -        .os_tag = .freestanding,
    -        .abi = .none,
    -    },
    -};
    -
    -pub const cortex_m4 = Cpu{
    -    .name = "ARM Cortex-M4",
    -    .source = .{
    -        .path = std.fmt.comptimePrint("{s}/cpus/cortex-m.zig", .{root_dir()}),
    -    },
    -    .target = std.zig.CrossTarget{
    -        .cpu_arch = .thumb,
    -        .cpu_model = .{ .explicit = &std.Target.arm.cpu.cortex_m4 },
    -        .os_tag = .freestanding,
    -        .abi = .none,
    -    },
    -};
    -
    -pub const riscv32_imac = Cpu{
    -    .name = "RISC-V 32-bit",
    -    .source = .{
    -        .path = std.fmt.comptimePrint("{s}/cpus/riscv32.zig", .{root_dir()}),
    -    },
    -    .target = std.zig.CrossTarget{
    -        .cpu_arch = .riscv32,
    -        .cpu_model = .{ .explicit = &std.Target.riscv.cpu.sifive_e21 },
    -        .os_tag = .freestanding,
    -        .abi = .none,
    -    },
    -};
    
    From dbbbb1392f43eea0047aa1a6d91ae2c87d75ec9b Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20Quei=C3=9Fner?= 
    Date: Fri, 22 Sep 2023 09:02:23 +0200
    Subject: [PATCH 204/286] Microzig Generation 2 Build Interface  (#23)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    * Rework for MicroZig Gen 2 Build
    * Drops CI
    
    ---------
    
    Co-authored-by: Felix "xq" Queißner 
    ---
     .github/FUNDING.yml            |     1 -
     .github/workflows/build.yml    |    19 -
     .gitmodules                    |     3 -
     build.zig                      |    74 +-
     build.zig.zon                  |     7 +-
     src/boards/nrf52840-dongle.zig |     1 +
     src/chips.zig                  |    38 -
     src/chips/nrf52.zig            | 16821 ------------------------
     src/chips/nrf52840.zig         | 21782 -------------------------------
     9 files changed, 62 insertions(+), 38684 deletions(-)
     delete mode 100644 .github/FUNDING.yml
     delete mode 100644 .github/workflows/build.yml
     create mode 100644 src/boards/nrf52840-dongle.zig
     delete mode 100644 src/chips.zig
     delete mode 100644 src/chips/nrf52.zig
     delete mode 100644 src/chips/nrf52840.zig
    
    diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
    deleted file mode 100644
    index 85b5393bb..000000000
    --- a/.github/FUNDING.yml
    +++ /dev/null
    @@ -1 +0,0 @@
    -github: MasterQ32
    diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
    deleted file mode 100644
    index 63ea5331c..000000000
    --- a/.github/workflows/build.yml
    +++ /dev/null
    @@ -1,19 +0,0 @@
    -name: Build
    -on:
    -  push:
    -
    -jobs:
    -  build:
    -    runs-on: ${{ matrix.os }}
    -    strategy:
    -      matrix:
    -        os: [ubuntu-latest, windows-latest, macos-latest]
    -        optimize: [Debug, ReleaseSmall, ReleaseFast, ReleaseSafe]
    -    steps:
    -      - uses: actions/checkout@v2
    -      - uses: goto-bus-stop/setup-zig@v2.1.1
    -        with:
    -          version: 0.11.0
    -
    -      - name: Build
    -        run: zig build install "-Doptimize=${{matrix.optimize}}"
    diff --git a/.gitmodules b/.gitmodules
    index 32e895ccb..e69de29bb 100644
    --- a/.gitmodules
    +++ b/.gitmodules
    @@ -1,3 +0,0 @@
    -[submodule "deps/microzig"]
    -	path = deps/microzig
    -	url = https://github.com/ZigEmbeddedGroup/microzig.git
    diff --git a/build.zig b/build.zig
    index 1e421fd6d..1690e0c7d 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -1,19 +1,65 @@
     const std = @import("std");
    -const microzig = @import("microzig");
     
    -pub const chips = @import("src/chips.zig");
    +fn path(comptime suffix: []const u8) std.Build.LazyPath {
    +    return .{
    +        .cwd_relative = comptime ((std.fs.path.dirname(@src().file) orelse ".") ++ suffix),
    +    };
    +}
     
    -pub fn build(b: *std.build.Builder) void {
    -    const optimize = b.standardOptimizeOption(.{});
    -    inline for (@typeInfo(chips).Struct.decls) |decl| {
    -        const exe = microzig.addEmbeddedExecutable(b, .{
    -            .name = decl.name ++ ".minimal",
    -            .source_file = .{
    -                .path = "test/programs/minimal.zig",
    +pub const chips = struct {
    +    pub const nrf52840 = .{
    +        .preferred_format = .elf,
    +        .chip = .{
    +            .name = "nrf52840",
    +            .url = "https://www.nordicsemi.com/products/nrf52840",
    +            .cpu = .cortex_m4,
    +            .register_definition = .{
    +                .json = path("/src/chips/nrf52840.json"),
    +            },
    +            .memory_regions = &.{
    +                .{ .offset = 0x00000000, .length = 0x100000, .kind = .flash },
    +                .{ .offset = 0x20000000, .length = 0x40000, .kind = .ram },
    +
    +                // EXTFLASH
    +                .{ .offset = 0x12000000, .length = 0x8000000, .kind = .flash },
    +
    +                // CODE_RAM
    +                .{ .offset = 0x800000, .length = 0x40000, .kind = .ram },
    +            },
    +        },
    +    };
    +
    +    pub const nrf52832 = .{
    +        .preferred_format = .elf,
    +        .chip = .{
    +            .name = "nrf52",
    +            .url = "https://www.nordicsemi.com/products/nrf52832",
    +            .cpu = .cortex_m4,
    +            .register_definition = .{
    +                .json = path("/src/chips/nrf52.json"),
    +            },
    +            .memory_regions = &.{
    +                .{ .offset = 0x00000000, .length = 0x80000, .kind = .flash },
    +                .{ .offset = 0x20000000, .length = 0x10000, .kind = .ram },
    +            },
    +        },
    +    };
    +};
    +
    +pub const boards = struct {
    +    pub const nordic = struct {
    +        pub const nRF52840_Dongle = .{
    +            .preferred_format = .elf,
    +            .chip = chips.nrf52840.chip,
    +            .board = .{
    +                .name = "nRF52840 Dongle",
    +                .url = "https://www.nordicsemi.com/Products/Development-hardware/nrf52840-dongle",
    +                .source_file = path("/src/boards/nrf52840-dongle.zig"),
                 },
    -            .backing = .{ .chip = @field(chips, decl.name) },
    -            .optimize = optimize,
    -        });
    -        exe.installArtifact(b);
    -    }
    +        };
    +    };
    +};
    +
    +pub fn build(b: *std.build.Builder) void {
    +    _ = b;
     }
    diff --git a/build.zig.zon b/build.zig.zon
    index f69b76de5..64c0de6cc 100644
    --- a/build.zig.zon
    +++ b/build.zig.zon
    @@ -1,10 +1,5 @@
     .{
         .name = "microzig-nordic-nrf5x",
         .version = "0.1.0",
    -    .dependencies = .{
    -        .microzig = .{
    -            .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/0b3be0a4cc7e6d45714cb09961efc771e364723c.tar.gz",
    -            .hash = "1220ada6d01db7b3d0aa8642df89b1af9ee71b681438249e9a7efb2275fc4cf32152",
    -        },
    -    },
    +    .dependencies = .{},
     }
    diff --git a/src/boards/nrf52840-dongle.zig b/src/boards/nrf52840-dongle.zig
    new file mode 100644
    index 000000000..8bbed2fc5
    --- /dev/null
    +++ b/src/boards/nrf52840-dongle.zig
    @@ -0,0 +1 @@
    +// TODO: Implement board support
    diff --git a/src/chips.zig b/src/chips.zig
    deleted file mode 100644
    index f53d85b86..000000000
    --- a/src/chips.zig
    +++ /dev/null
    @@ -1,38 +0,0 @@
    -const std = @import("std");
    -const micro = @import("microzig");
    -const Chip = micro.Chip;
    -const MemoryRegion = micro.MemoryRegion;
    -
    -fn root_dir() []const u8 {
    -    return std.fs.path.dirname(@src().file) orelse unreachable;
    -}
    -
    -pub const nrf52840 = Chip{
    -    .name = "nrf52840",
    -    .source = .{ .path = root_dir() ++ "/chips/nrf52840.zig" },
    -    .json_register_schema = .{ .path = root_dir() ++ "/chips.nrf52840.json" },
    -    .cpu = micro.cpus.cortex_m4,
    -
    -    .memory_regions = &.{
    -        MemoryRegion{ .offset = 0x00000000, .length = 0x100000, .kind = .flash },
    -        MemoryRegion{ .offset = 0x20000000, .length = 0x40000, .kind = .ram },
    -
    -        // EXTFLASH
    -        MemoryRegion{ .offset = 0x12000000, .length = 0x8000000, .kind = .flash },
    -
    -        // CODE_RAM
    -        MemoryRegion{ .offset = 0x800000, .length = 0x40000, .kind = .ram },
    -    },
    -};
    -
    -pub const nrf52832 = Chip{
    -    .name = "nrf52",
    -    .source = .{ .path = root_dir() ++ "/chips/nrf52.zig" },
    -    .json_register_schema = .{ .path = root_dir() ++ "/chips.nrf52.json" },
    -    .cpu = micro.cpus.cortex_m4,
    -
    -    .memory_regions = &.{
    -        MemoryRegion{ .offset = 0x00000000, .length = 0x80000, .kind = .flash },
    -        MemoryRegion{ .offset = 0x20000000, .length = 0x10000, .kind = .ram },
    -    },
    -};
    diff --git a/src/chips/nrf52.zig b/src/chips/nrf52.zig
    deleted file mode 100644
    index 0f6b36873..000000000
    --- a/src/chips/nrf52.zig
    +++ /dev/null
    @@ -1,16821 +0,0 @@
    -const micro = @import("microzig");
    -const mmio = micro.mmio;
    -
    -pub const devices = struct {
    -    ///  nRF52832 reference description for radio MCU with ARM 32-bit Cortex-M4 Microcontroller
    -    pub const nrf52 = struct {
    -        pub const properties = struct {
    -            pub const @"cpu.nvic_prio_bits" = "3";
    -            pub const @"cpu.mpu" = "1";
    -            pub const @"cpu.fpu" = "1";
    -            pub const @"cpu.revision" = "r0p1";
    -            pub const @"cpu.vendor_systick_config" = "0";
    -            pub const license =
    -                \\
    -                \\Copyright (c) 2010 - 2021, Nordic Semiconductor ASA All rights reserved.\n
    -                \\\n
    -                \\Redistribution and use in source and binary forms, with or without\n
    -                \\modification, are permitted provided that the following conditions are met:\n
    -                \\\n
    -                \\1. Redistributions of source code must retain the above copyright notice, this\n
    -                \\   list of conditions and the following disclaimer.\n
    -                \\\n
    -                \\2. Redistributions in binary form must reproduce the above copyright\n
    -                \\   notice, this list of conditions and the following disclaimer in the\n
    -                \\   documentation and/or other materials provided with the distribution.\n
    -                \\\n
    -                \\3. Neither the name of Nordic Semiconductor ASA nor the names of its\n
    -                \\   contributors may be used to endorse or promote products derived from this\n
    -                \\   software without specific prior written permission.\n
    -                \\\n
    -                \\THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\n
    -                \\AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n
    -                \\IMPLIED WARRANTIES OF MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE\n
    -                \\ARE DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE\n
    -                \\LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n
    -                \\CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n
    -                \\SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n
    -                \\INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n
    -                \\CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n
    -                \\ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n
    -                \\POSSIBILITY OF SUCH DAMAGE.\n
    -                \\        
    -            ;
    -            pub const @"cpu.name" = "CM4";
    -            pub const @"cpu.endian" = "little";
    -        };
    -
    -        pub const VectorTable = extern struct {
    -            const Handler = micro.interrupt.Handler;
    -            const unhandled = micro.interrupt.unhandled;
    -
    -            initial_stack_pointer: u32,
    -            Reset: Handler = unhandled,
    -            NMI: Handler = unhandled,
    -            HardFault: Handler = unhandled,
    -            MemManageFault: Handler = unhandled,
    -            BusFault: Handler = unhandled,
    -            UsageFault: Handler = unhandled,
    -            reserved5: [4]u32 = undefined,
    -            SVCall: Handler = unhandled,
    -            DebugMonitor: Handler = unhandled,
    -            reserved11: [1]u32 = undefined,
    -            PendSV: Handler = unhandled,
    -            SysTick: Handler = unhandled,
    -            POWER_CLOCK: Handler = unhandled,
    -            RADIO: Handler = unhandled,
    -            UARTE0_UART0: Handler = unhandled,
    -            SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0: Handler = unhandled,
    -            SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1: Handler = unhandled,
    -            NFCT: Handler = unhandled,
    -            GPIOTE: Handler = unhandled,
    -            SAADC: Handler = unhandled,
    -            TIMER0: Handler = unhandled,
    -            TIMER1: Handler = unhandled,
    -            TIMER2: Handler = unhandled,
    -            RTC0: Handler = unhandled,
    -            TEMP: Handler = unhandled,
    -            RNG: Handler = unhandled,
    -            ECB: Handler = unhandled,
    -            CCM_AAR: Handler = unhandled,
    -            WDT: Handler = unhandled,
    -            RTC1: Handler = unhandled,
    -            QDEC: Handler = unhandled,
    -            COMP_LPCOMP: Handler = unhandled,
    -            SWI0_EGU0: Handler = unhandled,
    -            SWI1_EGU1: Handler = unhandled,
    -            SWI2_EGU2: Handler = unhandled,
    -            SWI3_EGU3: Handler = unhandled,
    -            SWI4_EGU4: Handler = unhandled,
    -            SWI5_EGU5: Handler = unhandled,
    -            TIMER3: Handler = unhandled,
    -            TIMER4: Handler = unhandled,
    -            PWM0: Handler = unhandled,
    -            PDM: Handler = unhandled,
    -            reserved44: [2]u32 = undefined,
    -            MWU: Handler = unhandled,
    -            PWM1: Handler = unhandled,
    -            PWM2: Handler = unhandled,
    -            SPIM2_SPIS2_SPI2: Handler = unhandled,
    -            RTC2: Handler = unhandled,
    -            I2S: Handler = unhandled,
    -            FPU: Handler = unhandled,
    -        };
    -
    -        pub const peripherals = struct {
    -            ///  Factory Information Configuration Registers
    -            pub const FICR = @as(*volatile types.peripherals.FICR, @ptrFromInt(0x10000000));
    -            ///  User Information Configuration Registers
    -            pub const UICR = @as(*volatile types.peripherals.UICR, @ptrFromInt(0x10001000));
    -            ///  Block Protect
    -            pub const BPROT = @as(*volatile types.peripherals.BPROT, @ptrFromInt(0x40000000));
    -            ///  Power control
    -            pub const POWER = @as(*volatile types.peripherals.POWER, @ptrFromInt(0x40000000));
    -            ///  Clock control
    -            pub const CLOCK = @as(*volatile types.peripherals.CLOCK, @ptrFromInt(0x40000000));
    -            ///  2.4 GHz Radio
    -            pub const RADIO = @as(*volatile types.peripherals.RADIO, @ptrFromInt(0x40001000));
    -            ///  UART with EasyDMA
    -            pub const UARTE0 = @as(*volatile types.peripherals.UARTE0, @ptrFromInt(0x40002000));
    -            ///  Universal Asynchronous Receiver/Transmitter
    -            pub const UART0 = @as(*volatile types.peripherals.UART0, @ptrFromInt(0x40002000));
    -            ///  Serial Peripheral Interface Master with EasyDMA 0
    -            pub const SPIM0 = @as(*volatile types.peripherals.SPIM0, @ptrFromInt(0x40003000));
    -            ///  SPI Slave 0
    -            pub const SPIS0 = @as(*volatile types.peripherals.SPIS0, @ptrFromInt(0x40003000));
    -            ///  I2C compatible Two-Wire Master Interface with EasyDMA 0
    -            pub const TWIM0 = @as(*volatile types.peripherals.TWIM0, @ptrFromInt(0x40003000));
    -            ///  I2C compatible Two-Wire Slave Interface with EasyDMA 0
    -            pub const TWIS0 = @as(*volatile types.peripherals.TWIS0, @ptrFromInt(0x40003000));
    -            ///  Serial Peripheral Interface 0
    -            pub const SPI0 = @as(*volatile types.peripherals.SPI0, @ptrFromInt(0x40003000));
    -            ///  I2C compatible Two-Wire Interface 0
    -            pub const TWI0 = @as(*volatile types.peripherals.TWI0, @ptrFromInt(0x40003000));
    -            ///  Serial Peripheral Interface Master with EasyDMA 1
    -            pub const SPIM1 = @as(*volatile types.peripherals.SPIM0, @ptrFromInt(0x40004000));
    -            ///  SPI Slave 1
    -            pub const SPIS1 = @as(*volatile types.peripherals.SPIS0, @ptrFromInt(0x40004000));
    -            ///  I2C compatible Two-Wire Master Interface with EasyDMA 1
    -            pub const TWIM1 = @as(*volatile types.peripherals.TWIM0, @ptrFromInt(0x40004000));
    -            ///  I2C compatible Two-Wire Slave Interface with EasyDMA 1
    -            pub const TWIS1 = @as(*volatile types.peripherals.TWIS0, @ptrFromInt(0x40004000));
    -            ///  Serial Peripheral Interface 1
    -            pub const SPI1 = @as(*volatile types.peripherals.SPI0, @ptrFromInt(0x40004000));
    -            ///  I2C compatible Two-Wire Interface 1
    -            pub const TWI1 = @as(*volatile types.peripherals.TWI0, @ptrFromInt(0x40004000));
    -            ///  NFC-A compatible radio
    -            pub const NFCT = @as(*volatile types.peripherals.NFCT, @ptrFromInt(0x40005000));
    -            ///  GPIO Tasks and Events
    -            pub const GPIOTE = @as(*volatile types.peripherals.GPIOTE, @ptrFromInt(0x40006000));
    -            ///  Analog to Digital Converter
    -            pub const SAADC = @as(*volatile types.peripherals.SAADC, @ptrFromInt(0x40007000));
    -            ///  Timer/Counter 0
    -            pub const TIMER0 = @as(*volatile types.peripherals.TIMER0, @ptrFromInt(0x40008000));
    -            ///  Timer/Counter 1
    -            pub const TIMER1 = @as(*volatile types.peripherals.TIMER0, @ptrFromInt(0x40009000));
    -            ///  Timer/Counter 2
    -            pub const TIMER2 = @as(*volatile types.peripherals.TIMER0, @ptrFromInt(0x4000a000));
    -            ///  Real time counter 0
    -            pub const RTC0 = @as(*volatile types.peripherals.RTC0, @ptrFromInt(0x4000b000));
    -            ///  Temperature Sensor
    -            pub const TEMP = @as(*volatile types.peripherals.TEMP, @ptrFromInt(0x4000c000));
    -            ///  Random Number Generator
    -            pub const RNG = @as(*volatile types.peripherals.RNG, @ptrFromInt(0x4000d000));
    -            ///  AES ECB Mode Encryption
    -            pub const ECB = @as(*volatile types.peripherals.ECB, @ptrFromInt(0x4000e000));
    -            ///  AES CCM Mode Encryption
    -            pub const CCM = @as(*volatile types.peripherals.CCM, @ptrFromInt(0x4000f000));
    -            ///  Accelerated Address Resolver
    -            pub const AAR = @as(*volatile types.peripherals.AAR, @ptrFromInt(0x4000f000));
    -            ///  Watchdog Timer
    -            pub const WDT = @as(*volatile types.peripherals.WDT, @ptrFromInt(0x40010000));
    -            ///  Real time counter 1
    -            pub const RTC1 = @as(*volatile types.peripherals.RTC0, @ptrFromInt(0x40011000));
    -            ///  Quadrature Decoder
    -            pub const QDEC = @as(*volatile types.peripherals.QDEC, @ptrFromInt(0x40012000));
    -            ///  Comparator
    -            pub const COMP = @as(*volatile types.peripherals.COMP, @ptrFromInt(0x40013000));
    -            ///  Low Power Comparator
    -            pub const LPCOMP = @as(*volatile types.peripherals.LPCOMP, @ptrFromInt(0x40013000));
    -            ///  Software interrupt 0
    -            pub const SWI0 = @as(*volatile types.peripherals.SWI0, @ptrFromInt(0x40014000));
    -            ///  Event Generator Unit 0
    -            pub const EGU0 = @as(*volatile types.peripherals.EGU0, @ptrFromInt(0x40014000));
    -            ///  Software interrupt 1
    -            pub const SWI1 = @as(*volatile types.peripherals.SWI0, @ptrFromInt(0x40015000));
    -            ///  Event Generator Unit 1
    -            pub const EGU1 = @as(*volatile types.peripherals.EGU0, @ptrFromInt(0x40015000));
    -            ///  Software interrupt 2
    -            pub const SWI2 = @as(*volatile types.peripherals.SWI0, @ptrFromInt(0x40016000));
    -            ///  Event Generator Unit 2
    -            pub const EGU2 = @as(*volatile types.peripherals.EGU0, @ptrFromInt(0x40016000));
    -            ///  Software interrupt 3
    -            pub const SWI3 = @as(*volatile types.peripherals.SWI0, @ptrFromInt(0x40017000));
    -            ///  Event Generator Unit 3
    -            pub const EGU3 = @as(*volatile types.peripherals.EGU0, @ptrFromInt(0x40017000));
    -            ///  Software interrupt 4
    -            pub const SWI4 = @as(*volatile types.peripherals.SWI0, @ptrFromInt(0x40018000));
    -            ///  Event Generator Unit 4
    -            pub const EGU4 = @as(*volatile types.peripherals.EGU0, @ptrFromInt(0x40018000));
    -            ///  Software interrupt 5
    -            pub const SWI5 = @as(*volatile types.peripherals.SWI0, @ptrFromInt(0x40019000));
    -            ///  Event Generator Unit 5
    -            pub const EGU5 = @as(*volatile types.peripherals.EGU0, @ptrFromInt(0x40019000));
    -            ///  Timer/Counter 3
    -            pub const TIMER3 = @as(*volatile types.peripherals.TIMER0, @ptrFromInt(0x4001a000));
    -            ///  Timer/Counter 4
    -            pub const TIMER4 = @as(*volatile types.peripherals.TIMER0, @ptrFromInt(0x4001b000));
    -            ///  Pulse Width Modulation Unit 0
    -            pub const PWM0 = @as(*volatile types.peripherals.PWM0, @ptrFromInt(0x4001c000));
    -            ///  Pulse Density Modulation (Digital Microphone) Interface
    -            pub const PDM = @as(*volatile types.peripherals.PDM, @ptrFromInt(0x4001d000));
    -            ///  Non Volatile Memory Controller
    -            pub const NVMC = @as(*volatile types.peripherals.NVMC, @ptrFromInt(0x4001e000));
    -            ///  Programmable Peripheral Interconnect
    -            pub const PPI = @as(*volatile types.peripherals.PPI, @ptrFromInt(0x4001f000));
    -            ///  Memory Watch Unit
    -            pub const MWU = @as(*volatile types.peripherals.MWU, @ptrFromInt(0x40020000));
    -            ///  Pulse Width Modulation Unit 1
    -            pub const PWM1 = @as(*volatile types.peripherals.PWM0, @ptrFromInt(0x40021000));
    -            ///  Pulse Width Modulation Unit 2
    -            pub const PWM2 = @as(*volatile types.peripherals.PWM0, @ptrFromInt(0x40022000));
    -            ///  Serial Peripheral Interface Master with EasyDMA 2
    -            pub const SPIM2 = @as(*volatile types.peripherals.SPIM0, @ptrFromInt(0x40023000));
    -            ///  SPI Slave 2
    -            pub const SPIS2 = @as(*volatile types.peripherals.SPIS0, @ptrFromInt(0x40023000));
    -            ///  Serial Peripheral Interface 2
    -            pub const SPI2 = @as(*volatile types.peripherals.SPI0, @ptrFromInt(0x40023000));
    -            ///  Real time counter 2
    -            pub const RTC2 = @as(*volatile types.peripherals.RTC0, @ptrFromInt(0x40024000));
    -            ///  Inter-IC Sound
    -            pub const I2S = @as(*volatile types.peripherals.I2S, @ptrFromInt(0x40025000));
    -            ///  FPU
    -            pub const FPU = @as(*volatile types.peripherals.FPU, @ptrFromInt(0x40026000));
    -            ///  GPIO Port 1
    -            pub const P0 = @as(*volatile types.peripherals.P0, @ptrFromInt(0x50000000));
    -            ///  System Tick Timer
    -            pub const SysTick = @as(*volatile types.peripherals.SCS.SysTick, @ptrFromInt(0xe000e010));
    -        };
    -    };
    -};
    -
    -pub const types = struct {
    -    pub const peripherals = struct {
    -        ///  System Control Space
    -        pub const SCS = struct {
    -            ///  System Tick Timer
    -            pub const SysTick = extern struct {
    -                ///  SysTick Control and Status Register
    -                CTRL: mmio.Mmio(packed struct(u32) {
    -                    ENABLE: u1,
    -                    TICKINT: u1,
    -                    CLKSOURCE: u1,
    -                    reserved16: u13,
    -                    COUNTFLAG: u1,
    -                    padding: u15,
    -                }),
    -                ///  SysTick Reload Value Register
    -                LOAD: mmio.Mmio(packed struct(u32) {
    -                    RELOAD: u24,
    -                    padding: u8,
    -                }),
    -                ///  SysTick Current Value Register
    -                VAL: mmio.Mmio(packed struct(u32) {
    -                    CURRENT: u24,
    -                    padding: u8,
    -                }),
    -                ///  SysTick Calibration Register
    -                CALIB: mmio.Mmio(packed struct(u32) {
    -                    TENMS: u24,
    -                    reserved30: u6,
    -                    SKEW: u1,
    -                    NOREF: u1,
    -                }),
    -            };
    -        };
    -
    -        ///  Factory Information Configuration Registers
    -        pub const FICR = extern struct {
    -            reserved16: [16]u8,
    -            ///  Code memory page size
    -            CODEPAGESIZE: mmio.Mmio(packed struct(u32) {
    -                ///  Code memory page size
    -                CODEPAGESIZE: u32,
    -            }),
    -            ///  Code memory size
    -            CODESIZE: mmio.Mmio(packed struct(u32) {
    -                ///  Code memory size in number of pages
    -                CODESIZE: u32,
    -            }),
    -            reserved96: [72]u8,
    -            ///  Description collection[0]: Device identifier
    -            DEVICEID: [2]mmio.Mmio(packed struct(u32) {
    -                ///  64 bit unique device identifier
    -                DEVICEID: u32,
    -            }),
    -            reserved128: [24]u8,
    -            ///  Description collection[0]: Encryption Root, word 0
    -            ER: [4]mmio.Mmio(packed struct(u32) {
    -                ///  Encryption Root, word n
    -                ER: u32,
    -            }),
    -            ///  Description collection[0]: Identity Root, word 0
    -            IR: [4]mmio.Mmio(packed struct(u32) {
    -                ///  Identity Root, word n
    -                IR: u32,
    -            }),
    -            ///  Device address type
    -            DEVICEADDRTYPE: mmio.Mmio(packed struct(u32) {
    -                ///  Device address type
    -                DEVICEADDRTYPE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Public address
    -                        Public = 0x0,
    -                        ///  Random address
    -                        Random = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Description collection[0]: Device address 0
    -            DEVICEADDR: [2]mmio.Mmio(packed struct(u32) {
    -                ///  48 bit device address
    -                DEVICEADDR: u32,
    -            }),
    -        };
    -
    -        ///  User Information Configuration Registers
    -        pub const UICR = extern struct {
    -            ///  Unspecified
    -            UNUSED0: u32,
    -            ///  Unspecified
    -            UNUSED1: u32,
    -            ///  Unspecified
    -            UNUSED2: u32,
    -            reserved16: [4]u8,
    -            ///  Unspecified
    -            UNUSED3: u32,
    -            ///  Description collection[0]: Reserved for Nordic firmware design
    -            NRFFW: [15]mmio.Mmio(packed struct(u32) {
    -                ///  Reserved for Nordic firmware design
    -                NRFFW: u32,
    -            }),
    -            ///  Description collection[0]: Reserved for Nordic hardware design
    -            NRFHW: [12]mmio.Mmio(packed struct(u32) {
    -                ///  Reserved for Nordic hardware design
    -                NRFHW: u32,
    -            }),
    -            ///  Description collection[0]: Reserved for customer
    -            CUSTOMER: [32]mmio.Mmio(packed struct(u32) {
    -                ///  Reserved for customer
    -                CUSTOMER: u32,
    -            }),
    -            reserved512: [256]u8,
    -            ///  Description collection[0]: Mapping of the nRESET function (see POWER chapter for details)
    -            PSELRESET: [2]mmio.Mmio(packed struct(u32) {
    -                ///  GPIO number P0.n onto which Reset is exposed
    -                PIN: u6,
    -                reserved31: u25,
    -                ///  Connection
    -                CONNECT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disconnect
    -                        Disconnected = 0x1,
    -                        ///  Connect
    -                        Connected = 0x0,
    -                    },
    -                },
    -            }),
    -            ///  Access Port protection
    -            APPROTECT: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable Access Port protection. Any other value than 0xFF being written to this field will enable protection.
    -                PALL: packed union {
    -                    raw: u8,
    -                    value: enum(u8) {
    -                        ///  Disable
    -                        Disabled = 0xff,
    -                        ///  Enable
    -                        Enabled = 0x0,
    -                        _,
    -                    },
    -                },
    -                padding: u24,
    -            }),
    -            ///  Setting of pins dedicated to NFC functionality: NFC antenna or GPIO
    -            NFCPINS: mmio.Mmio(packed struct(u32) {
    -                ///  Setting of pins dedicated to NFC functionality
    -                PROTECT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Operation as GPIO pins. Same protection as normal GPIO pins
    -                        Disabled = 0x0,
    -                        ///  Operation as NFC antenna pins. Configures the protection for NFC operation
    -                        NFC = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -        };
    -
    -        ///  Block Protect
    -        pub const BPROT = extern struct {
    -            reserved1536: [1536]u8,
    -            ///  Block protect configuration register 0
    -            CONFIG0: mmio.Mmio(packed struct(u32) {
    -                ///  Enable protection for region 0. Write '0' has no effect.
    -                REGION0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 1. Write '0' has no effect.
    -                REGION1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 2. Write '0' has no effect.
    -                REGION2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 3. Write '0' has no effect.
    -                REGION3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 4. Write '0' has no effect.
    -                REGION4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 5. Write '0' has no effect.
    -                REGION5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 6. Write '0' has no effect.
    -                REGION6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 7. Write '0' has no effect.
    -                REGION7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 8. Write '0' has no effect.
    -                REGION8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 9. Write '0' has no effect.
    -                REGION9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 10. Write '0' has no effect.
    -                REGION10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 11. Write '0' has no effect.
    -                REGION11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 12. Write '0' has no effect.
    -                REGION12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 13. Write '0' has no effect.
    -                REGION13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 14. Write '0' has no effect.
    -                REGION14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 15. Write '0' has no effect.
    -                REGION15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 16. Write '0' has no effect.
    -                REGION16: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 17. Write '0' has no effect.
    -                REGION17: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 18. Write '0' has no effect.
    -                REGION18: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 19. Write '0' has no effect.
    -                REGION19: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 20. Write '0' has no effect.
    -                REGION20: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 21. Write '0' has no effect.
    -                REGION21: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 22. Write '0' has no effect.
    -                REGION22: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 23. Write '0' has no effect.
    -                REGION23: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 24. Write '0' has no effect.
    -                REGION24: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 25. Write '0' has no effect.
    -                REGION25: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 26. Write '0' has no effect.
    -                REGION26: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 27. Write '0' has no effect.
    -                REGION27: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 28. Write '0' has no effect.
    -                REGION28: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 29. Write '0' has no effect.
    -                REGION29: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 30. Write '0' has no effect.
    -                REGION30: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 31. Write '0' has no effect.
    -                REGION31: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -            }),
    -            ///  Block protect configuration register 1
    -            CONFIG1: mmio.Mmio(packed struct(u32) {
    -                ///  Enable protection for region 32. Write '0' has no effect.
    -                REGION32: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 33. Write '0' has no effect.
    -                REGION33: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 34. Write '0' has no effect.
    -                REGION34: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 35. Write '0' has no effect.
    -                REGION35: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 36. Write '0' has no effect.
    -                REGION36: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 37. Write '0' has no effect.
    -                REGION37: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 38. Write '0' has no effect.
    -                REGION38: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 39. Write '0' has no effect.
    -                REGION39: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 40. Write '0' has no effect.
    -                REGION40: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 41. Write '0' has no effect.
    -                REGION41: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 42. Write '0' has no effect.
    -                REGION42: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 43. Write '0' has no effect.
    -                REGION43: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 44. Write '0' has no effect.
    -                REGION44: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 45. Write '0' has no effect.
    -                REGION45: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 46. Write '0' has no effect.
    -                REGION46: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 47. Write '0' has no effect.
    -                REGION47: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 48. Write '0' has no effect.
    -                REGION48: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 49. Write '0' has no effect.
    -                REGION49: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 50. Write '0' has no effect.
    -                REGION50: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 51. Write '0' has no effect.
    -                REGION51: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 52. Write '0' has no effect.
    -                REGION52: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 53. Write '0' has no effect.
    -                REGION53: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 54. Write '0' has no effect.
    -                REGION54: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 55. Write '0' has no effect.
    -                REGION55: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 56. Write '0' has no effect.
    -                REGION56: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 57. Write '0' has no effect.
    -                REGION57: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 58. Write '0' has no effect.
    -                REGION58: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 59. Write '0' has no effect.
    -                REGION59: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 60. Write '0' has no effect.
    -                REGION60: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 61. Write '0' has no effect.
    -                REGION61: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 62. Write '0' has no effect.
    -                REGION62: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 63. Write '0' has no effect.
    -                REGION63: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -            }),
    -            ///  Disable protection mechanism in debug interface mode
    -            DISABLEINDEBUG: mmio.Mmio(packed struct(u32) {
    -                ///  Disable the protection mechanism for NVM regions while in debug interface mode. This register will only disable the protection mechanism if the device is in debug interface mode.
    -                DISABLEINDEBUG: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable in debug
    -                        Disabled = 0x1,
    -                        ///  Enable in debug
    -                        Enabled = 0x0,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Unspecified
    -            UNUSED0: u32,
    -            ///  Block protect configuration register 2
    -            CONFIG2: mmio.Mmio(packed struct(u32) {
    -                ///  Enable protection for region 64. Write '0' has no effect.
    -                REGION64: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 65. Write '0' has no effect.
    -                REGION65: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 66. Write '0' has no effect.
    -                REGION66: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 67. Write '0' has no effect.
    -                REGION67: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 68. Write '0' has no effect.
    -                REGION68: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 69. Write '0' has no effect.
    -                REGION69: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 70. Write '0' has no effect.
    -                REGION70: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 71. Write '0' has no effect.
    -                REGION71: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 72. Write '0' has no effect.
    -                REGION72: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 73. Write '0' has no effect.
    -                REGION73: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 74. Write '0' has no effect.
    -                REGION74: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 75. Write '0' has no effect.
    -                REGION75: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 76. Write '0' has no effect.
    -                REGION76: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 77. Write '0' has no effect.
    -                REGION77: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 78. Write '0' has no effect.
    -                REGION78: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 79. Write '0' has no effect.
    -                REGION79: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 80. Write '0' has no effect.
    -                REGION80: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 81. Write '0' has no effect.
    -                REGION81: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 82. Write '0' has no effect.
    -                REGION82: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 83. Write '0' has no effect.
    -                REGION83: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 84. Write '0' has no effect.
    -                REGION84: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 85. Write '0' has no effect.
    -                REGION85: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 86. Write '0' has no effect.
    -                REGION86: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 87. Write '0' has no effect.
    -                REGION87: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 88. Write '0' has no effect.
    -                REGION88: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 89. Write '0' has no effect.
    -                REGION89: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 90. Write '0' has no effect.
    -                REGION90: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 91. Write '0' has no effect.
    -                REGION91: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 92. Write '0' has no effect.
    -                REGION92: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 93. Write '0' has no effect.
    -                REGION93: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 94. Write '0' has no effect.
    -                REGION94: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 95. Write '0' has no effect.
    -                REGION95: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -            }),
    -            ///  Block protect configuration register 3
    -            CONFIG3: mmio.Mmio(packed struct(u32) {
    -                ///  Enable protection for region 96. Write '0' has no effect.
    -                REGION96: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 97. Write '0' has no effect.
    -                REGION97: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 98. Write '0' has no effect.
    -                REGION98: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 99. Write '0' has no effect.
    -                REGION99: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 100. Write '0' has no effect.
    -                REGION100: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 101. Write '0' has no effect.
    -                REGION101: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 102. Write '0' has no effect.
    -                REGION102: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 103. Write '0' has no effect.
    -                REGION103: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 104. Write '0' has no effect.
    -                REGION104: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 105. Write '0' has no effect.
    -                REGION105: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 106. Write '0' has no effect.
    -                REGION106: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 107. Write '0' has no effect.
    -                REGION107: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 108. Write '0' has no effect.
    -                REGION108: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 109. Write '0' has no effect.
    -                REGION109: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 110. Write '0' has no effect.
    -                REGION110: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 111. Write '0' has no effect.
    -                REGION111: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 112. Write '0' has no effect.
    -                REGION112: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 113. Write '0' has no effect.
    -                REGION113: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 114. Write '0' has no effect.
    -                REGION114: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 115. Write '0' has no effect.
    -                REGION115: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 116. Write '0' has no effect.
    -                REGION116: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 117. Write '0' has no effect.
    -                REGION117: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 118. Write '0' has no effect.
    -                REGION118: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 119. Write '0' has no effect.
    -                REGION119: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 120. Write '0' has no effect.
    -                REGION120: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 121. Write '0' has no effect.
    -                REGION121: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 122. Write '0' has no effect.
    -                REGION122: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 123. Write '0' has no effect.
    -                REGION123: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 124. Write '0' has no effect.
    -                REGION124: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 125. Write '0' has no effect.
    -                REGION125: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 126. Write '0' has no effect.
    -                REGION126: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable protection for region 127. Write '0' has no effect.
    -                REGION127: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Protection disabled
    -                        Disabled = 0x0,
    -                        ///  Protection enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -            }),
    -        };
    -
    -        ///  Power control
    -        pub const POWER = extern struct {
    -            reserved120: [120]u8,
    -            ///  Enable constant latency mode
    -            TASKS_CONSTLAT: u32,
    -            ///  Enable low power mode (variable latency)
    -            TASKS_LOWPWR: u32,
    -            reserved264: [136]u8,
    -            ///  Power failure warning
    -            EVENTS_POFWARN: u32,
    -            reserved276: [8]u8,
    -            ///  CPU entered WFI/WFE sleep
    -            EVENTS_SLEEPENTER: u32,
    -            ///  CPU exited WFI/WFE sleep
    -            EVENTS_SLEEPEXIT: u32,
    -            reserved772: [488]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                reserved2: u2,
    -                ///  Write '1' to Enable interrupt for POFWARN event
    -                POFWARN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved5: u2,
    -                ///  Write '1' to Enable interrupt for SLEEPENTER event
    -                SLEEPENTER: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for SLEEPEXIT event
    -                SLEEPEXIT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u25,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                reserved2: u2,
    -                ///  Write '1' to Disable interrupt for POFWARN event
    -                POFWARN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved5: u2,
    -                ///  Write '1' to Disable interrupt for SLEEPENTER event
    -                SLEEPENTER: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for SLEEPEXIT event
    -                SLEEPEXIT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u25,
    -            }),
    -            reserved1024: [244]u8,
    -            ///  Reset reason
    -            RESETREAS: mmio.Mmio(packed struct(u32) {
    -                ///  Reset from pin-reset detected
    -                RESETPIN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Not detected
    -                        NotDetected = 0x0,
    -                        ///  Detected
    -                        Detected = 0x1,
    -                    },
    -                },
    -                ///  Reset from watchdog detected
    -                DOG: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Not detected
    -                        NotDetected = 0x0,
    -                        ///  Detected
    -                        Detected = 0x1,
    -                    },
    -                },
    -                ///  Reset from soft reset detected
    -                SREQ: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Not detected
    -                        NotDetected = 0x0,
    -                        ///  Detected
    -                        Detected = 0x1,
    -                    },
    -                },
    -                ///  Reset from CPU lock-up detected
    -                LOCKUP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Not detected
    -                        NotDetected = 0x0,
    -                        ///  Detected
    -                        Detected = 0x1,
    -                    },
    -                },
    -                reserved16: u12,
    -                ///  Reset due to wake up from System OFF mode when wakeup is triggered from DETECT signal from GPIO
    -                OFF: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Not detected
    -                        NotDetected = 0x0,
    -                        ///  Detected
    -                        Detected = 0x1,
    -                    },
    -                },
    -                ///  Reset due to wake up from System OFF mode when wakeup is triggered from ANADETECT signal from LPCOMP
    -                LPCOMP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Not detected
    -                        NotDetected = 0x0,
    -                        ///  Detected
    -                        Detected = 0x1,
    -                    },
    -                },
    -                ///  Reset due to wake up from System OFF mode when wakeup is triggered from entering into debug interface mode
    -                DIF: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Not detected
    -                        NotDetected = 0x0,
    -                        ///  Detected
    -                        Detected = 0x1,
    -                    },
    -                },
    -                ///  Reset due to wake up from System OFF mode by NFC field detect
    -                NFC: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Not detected
    -                        NotDetected = 0x0,
    -                        ///  Detected
    -                        Detected = 0x1,
    -                    },
    -                },
    -                padding: u12,
    -            }),
    -            reserved1064: [36]u8,
    -            ///  Deprecated register - RAM status register
    -            RAMSTATUS: mmio.Mmio(packed struct(u32) {
    -                ///  RAM block 0 is on or off/powering up
    -                RAMBLOCK0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Off
    -                        Off = 0x0,
    -                        ///  On
    -                        On = 0x1,
    -                    },
    -                },
    -                ///  RAM block 1 is on or off/powering up
    -                RAMBLOCK1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Off
    -                        Off = 0x0,
    -                        ///  On
    -                        On = 0x1,
    -                    },
    -                },
    -                ///  RAM block 2 is on or off/powering up
    -                RAMBLOCK2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Off
    -                        Off = 0x0,
    -                        ///  On
    -                        On = 0x1,
    -                    },
    -                },
    -                ///  RAM block 3 is on or off/powering up
    -                RAMBLOCK3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Off
    -                        Off = 0x0,
    -                        ///  On
    -                        On = 0x1,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1280: [212]u8,
    -            ///  System OFF register
    -            SYSTEMOFF: mmio.Mmio(packed struct(u32) {
    -                ///  Enable System OFF mode
    -                SYSTEMOFF: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Enable System OFF mode
    -                        Enter = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1296: [12]u8,
    -            ///  Power failure comparator configuration
    -            POFCON: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable power failure comparator
    -                POF: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Power failure comparator threshold setting
    -                THRESHOLD: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  Set threshold to 1.7 V
    -                        V17 = 0x4,
    -                        ///  Set threshold to 1.8 V
    -                        V18 = 0x5,
    -                        ///  Set threshold to 1.9 V
    -                        V19 = 0x6,
    -                        ///  Set threshold to 2.0 V
    -                        V20 = 0x7,
    -                        ///  Set threshold to 2.1 V
    -                        V21 = 0x8,
    -                        ///  Set threshold to 2.2 V
    -                        V22 = 0x9,
    -                        ///  Set threshold to 2.3 V
    -                        V23 = 0xa,
    -                        ///  Set threshold to 2.4 V
    -                        V24 = 0xb,
    -                        ///  Set threshold to 2.5 V
    -                        V25 = 0xc,
    -                        ///  Set threshold to 2.6 V
    -                        V26 = 0xd,
    -                        ///  Set threshold to 2.7 V
    -                        V27 = 0xe,
    -                        ///  Set threshold to 2.8 V
    -                        V28 = 0xf,
    -                        _,
    -                    },
    -                },
    -                padding: u27,
    -            }),
    -            reserved1308: [8]u8,
    -            ///  General purpose retention register
    -            GPREGRET: mmio.Mmio(packed struct(u32) {
    -                ///  General purpose retention register
    -                GPREGRET: u8,
    -                padding: u24,
    -            }),
    -            ///  General purpose retention register
    -            GPREGRET2: mmio.Mmio(packed struct(u32) {
    -                ///  General purpose retention register
    -                GPREGRET: u8,
    -                padding: u24,
    -            }),
    -            ///  Deprecated register - RAM on/off register (this register is retained)
    -            RAMON: mmio.Mmio(packed struct(u32) {
    -                ///  Keep RAM block 0 on or off in system ON Mode
    -                ONRAM0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Off
    -                        RAM0Off = 0x0,
    -                        ///  On
    -                        RAM0On = 0x1,
    -                    },
    -                },
    -                ///  Keep RAM block 1 on or off in system ON Mode
    -                ONRAM1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Off
    -                        RAM1Off = 0x0,
    -                        ///  On
    -                        RAM1On = 0x1,
    -                    },
    -                },
    -                reserved16: u14,
    -                ///  Keep retention on RAM block 0 when RAM block is switched off
    -                OFFRAM0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Off
    -                        RAM0Off = 0x0,
    -                        ///  On
    -                        RAM0On = 0x1,
    -                    },
    -                },
    -                ///  Keep retention on RAM block 1 when RAM block is switched off
    -                OFFRAM1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Off
    -                        RAM1Off = 0x0,
    -                        ///  On
    -                        RAM1On = 0x1,
    -                    },
    -                },
    -                padding: u14,
    -            }),
    -            reserved1364: [44]u8,
    -            ///  Deprecated register - RAM on/off register (this register is retained)
    -            RAMONB: mmio.Mmio(packed struct(u32) {
    -                ///  Keep RAM block 2 on or off in system ON Mode
    -                ONRAM2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Off
    -                        RAM2Off = 0x0,
    -                        ///  On
    -                        RAM2On = 0x1,
    -                    },
    -                },
    -                ///  Keep RAM block 3 on or off in system ON Mode
    -                ONRAM3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Off
    -                        RAM3Off = 0x0,
    -                        ///  On
    -                        RAM3On = 0x1,
    -                    },
    -                },
    -                reserved16: u14,
    -                ///  Keep retention on RAM block 2 when RAM block is switched off
    -                OFFRAM2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Off
    -                        RAM2Off = 0x0,
    -                        ///  On
    -                        RAM2On = 0x1,
    -                    },
    -                },
    -                ///  Keep retention on RAM block 3 when RAM block is switched off
    -                OFFRAM3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Off
    -                        RAM3Off = 0x0,
    -                        ///  On
    -                        RAM3On = 0x1,
    -                    },
    -                },
    -                padding: u14,
    -            }),
    -            reserved1400: [32]u8,
    -            ///  DC/DC enable register
    -            DCDCEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable DC/DC converter
    -                DCDCEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -        };
    -
    -        ///  Clock control
    -        pub const CLOCK = extern struct {
    -            ///  Start HFCLK crystal oscillator
    -            TASKS_HFCLKSTART: u32,
    -            ///  Stop HFCLK crystal oscillator
    -            TASKS_HFCLKSTOP: u32,
    -            ///  Start LFCLK source
    -            TASKS_LFCLKSTART: u32,
    -            ///  Stop LFCLK source
    -            TASKS_LFCLKSTOP: u32,
    -            ///  Start calibration of LFRC oscillator
    -            TASKS_CAL: u32,
    -            ///  Start calibration timer
    -            TASKS_CTSTART: u32,
    -            ///  Stop calibration timer
    -            TASKS_CTSTOP: u32,
    -            reserved256: [228]u8,
    -            ///  HFCLK oscillator started
    -            EVENTS_HFCLKSTARTED: u32,
    -            ///  LFCLK started
    -            EVENTS_LFCLKSTARTED: u32,
    -            reserved268: [4]u8,
    -            ///  Calibration of LFCLK RC oscillator complete event
    -            EVENTS_DONE: u32,
    -            ///  Calibration timer timeout
    -            EVENTS_CTTO: u32,
    -            reserved772: [496]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Enable interrupt for HFCLKSTARTED event
    -                HFCLKSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for LFCLKSTARTED event
    -                LFCLKSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved3: u1,
    -                ///  Write '1' to Enable interrupt for DONE event
    -                DONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for CTTO event
    -                CTTO: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u27,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Disable interrupt for HFCLKSTARTED event
    -                HFCLKSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for LFCLKSTARTED event
    -                LFCLKSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved3: u1,
    -                ///  Write '1' to Disable interrupt for DONE event
    -                DONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for CTTO event
    -                CTTO: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u27,
    -            }),
    -            reserved1032: [252]u8,
    -            ///  Status indicating that HFCLKSTART task has been triggered
    -            HFCLKRUN: mmio.Mmio(packed struct(u32) {
    -                ///  HFCLKSTART task triggered or not
    -                STATUS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Task not triggered
    -                        NotTriggered = 0x0,
    -                        ///  Task triggered
    -                        Triggered = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  HFCLK status
    -            HFCLKSTAT: mmio.Mmio(packed struct(u32) {
    -                ///  Source of HFCLK
    -                SRC: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  64 MHz internal oscillator (HFINT)
    -                        RC = 0x0,
    -                        ///  64 MHz crystal oscillator (HFXO)
    -                        Xtal = 0x1,
    -                    },
    -                },
    -                reserved16: u15,
    -                ///  HFCLK state
    -                STATE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  HFCLK not running
    -                        NotRunning = 0x0,
    -                        ///  HFCLK running
    -                        Running = 0x1,
    -                    },
    -                },
    -                padding: u15,
    -            }),
    -            reserved1044: [4]u8,
    -            ///  Status indicating that LFCLKSTART task has been triggered
    -            LFCLKRUN: mmio.Mmio(packed struct(u32) {
    -                ///  LFCLKSTART task triggered or not
    -                STATUS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Task not triggered
    -                        NotTriggered = 0x0,
    -                        ///  Task triggered
    -                        Triggered = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  LFCLK status
    -            LFCLKSTAT: mmio.Mmio(packed struct(u32) {
    -                ///  Source of LFCLK
    -                SRC: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  32.768 kHz RC oscillator
    -                        RC = 0x0,
    -                        ///  32.768 kHz crystal oscillator
    -                        Xtal = 0x1,
    -                        ///  32.768 kHz synthesized from HFCLK
    -                        Synth = 0x2,
    -                        _,
    -                    },
    -                },
    -                reserved16: u14,
    -                ///  LFCLK state
    -                STATE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  LFCLK not running
    -                        NotRunning = 0x0,
    -                        ///  LFCLK running
    -                        Running = 0x1,
    -                    },
    -                },
    -                padding: u15,
    -            }),
    -            ///  Copy of LFCLKSRC register, set when LFCLKSTART task was triggered
    -            LFCLKSRCCOPY: mmio.Mmio(packed struct(u32) {
    -                ///  Clock source
    -                SRC: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  32.768 kHz RC oscillator
    -                        RC = 0x0,
    -                        ///  32.768 kHz crystal oscillator
    -                        Xtal = 0x1,
    -                        ///  32.768 kHz synthesized from HFCLK
    -                        Synth = 0x2,
    -                        _,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            reserved1304: [248]u8,
    -            ///  Clock source for the LFCLK
    -            LFCLKSRC: mmio.Mmio(packed struct(u32) {
    -                ///  Clock source
    -                SRC: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  32.768 kHz RC oscillator
    -                        RC = 0x0,
    -                        ///  32.768 kHz crystal oscillator
    -                        Xtal = 0x1,
    -                        ///  32.768 kHz synthesized from HFCLK
    -                        Synth = 0x2,
    -                        _,
    -                    },
    -                },
    -                reserved16: u14,
    -                ///  Enable or disable bypass of LFCLK crystal oscillator with external clock source
    -                BYPASS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable (use with Xtal or low-swing external source)
    -                        Disabled = 0x0,
    -                        ///  Enable (use with rail-to-rail external source)
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable external source for LFCLK
    -                EXTERNAL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable external source (use with Xtal)
    -                        Disabled = 0x0,
    -                        ///  Enable use of external source instead of Xtal (SRC needs to be set to Xtal)
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u14,
    -            }),
    -            reserved1336: [28]u8,
    -            ///  Calibration timer interval
    -            CTIV: mmio.Mmio(packed struct(u32) {
    -                ///  Calibration timer interval in multiple of 0.25 seconds. Range: 0.25 seconds to 31.75 seconds.
    -                CTIV: u7,
    -                padding: u25,
    -            }),
    -            reserved1372: [32]u8,
    -            ///  Clocking options for the Trace Port debug interface
    -            TRACECONFIG: mmio.Mmio(packed struct(u32) {
    -                ///  Speed of Trace Port clock. Note that the TRACECLK pin will output this clock divided by two.
    -                TRACEPORTSPEED: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  32 MHz Trace Port clock (TRACECLK = 16 MHz)
    -                        @"32MHz" = 0x0,
    -                        ///  16 MHz Trace Port clock (TRACECLK = 8 MHz)
    -                        @"16MHz" = 0x1,
    -                        ///  8 MHz Trace Port clock (TRACECLK = 4 MHz)
    -                        @"8MHz" = 0x2,
    -                        ///  4 MHz Trace Port clock (TRACECLK = 2 MHz)
    -                        @"4MHz" = 0x3,
    -                    },
    -                },
    -                reserved16: u14,
    -                ///  Pin multiplexing of trace signals.
    -                TRACEMUX: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  GPIOs multiplexed onto all trace-pins
    -                        GPIO = 0x0,
    -                        ///  SWO multiplexed onto P0.18, GPIO multiplexed onto other trace pins
    -                        Serial = 0x1,
    -                        ///  TRACECLK and TRACEDATA multiplexed onto P0.20, P0.18, P0.16, P0.15 and P0.14.
    -                        Parallel = 0x2,
    -                        _,
    -                    },
    -                },
    -                padding: u14,
    -            }),
    -        };
    -
    -        ///  2.4 GHz Radio
    -        pub const RADIO = extern struct {
    -            ///  Enable RADIO in TX mode
    -            TASKS_TXEN: u32,
    -            ///  Enable RADIO in RX mode
    -            TASKS_RXEN: u32,
    -            ///  Start RADIO
    -            TASKS_START: u32,
    -            ///  Stop RADIO
    -            TASKS_STOP: u32,
    -            ///  Disable RADIO
    -            TASKS_DISABLE: u32,
    -            ///  Start the RSSI and take one single sample of the receive signal strength.
    -            TASKS_RSSISTART: u32,
    -            ///  Stop the RSSI measurement
    -            TASKS_RSSISTOP: u32,
    -            ///  Start the bit counter
    -            TASKS_BCSTART: u32,
    -            ///  Stop the bit counter
    -            TASKS_BCSTOP: u32,
    -            reserved256: [220]u8,
    -            ///  RADIO has ramped up and is ready to be started
    -            EVENTS_READY: u32,
    -            ///  Address sent or received
    -            EVENTS_ADDRESS: u32,
    -            ///  Packet payload sent or received
    -            EVENTS_PAYLOAD: u32,
    -            ///  Packet sent or received
    -            EVENTS_END: u32,
    -            ///  RADIO has been disabled
    -            EVENTS_DISABLED: u32,
    -            ///  A device address match occurred on the last received packet
    -            EVENTS_DEVMATCH: u32,
    -            ///  No device address match occurred on the last received packet
    -            EVENTS_DEVMISS: u32,
    -            ///  Sampling of receive signal strength complete.
    -            EVENTS_RSSIEND: u32,
    -            reserved296: [8]u8,
    -            ///  Bit counter reached bit count value.
    -            EVENTS_BCMATCH: u32,
    -            reserved304: [4]u8,
    -            ///  Packet received with CRC ok
    -            EVENTS_CRCOK: u32,
    -            ///  Packet received with CRC error
    -            EVENTS_CRCERROR: u32,
    -            reserved512: [200]u8,
    -            ///  Shortcut register
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                ///  Shortcut between READY event and START task
    -                READY_START: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between END event and DISABLE task
    -                END_DISABLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between DISABLED event and TXEN task
    -                DISABLED_TXEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between DISABLED event and RXEN task
    -                DISABLED_RXEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between ADDRESS event and RSSISTART task
    -                ADDRESS_RSSISTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between END event and START task
    -                END_START: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between ADDRESS event and BCSTART task
    -                ADDRESS_BCSTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved8: u1,
    -                ///  Shortcut between DISABLED event and RSSISTOP task
    -                DISABLED_RSSISTOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u23,
    -            }),
    -            reserved772: [256]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Enable interrupt for READY event
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for ADDRESS event
    -                ADDRESS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for PAYLOAD event
    -                PAYLOAD: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for END event
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for DISABLED event
    -                DISABLED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for DEVMATCH event
    -                DEVMATCH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for DEVMISS event
    -                DEVMISS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for RSSIEND event
    -                RSSIEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved10: u2,
    -                ///  Write '1' to Enable interrupt for BCMATCH event
    -                BCMATCH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved12: u1,
    -                ///  Write '1' to Enable interrupt for CRCOK event
    -                CRCOK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for CRCERROR event
    -                CRCERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u18,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Disable interrupt for READY event
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for ADDRESS event
    -                ADDRESS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for PAYLOAD event
    -                PAYLOAD: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for END event
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for DISABLED event
    -                DISABLED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for DEVMATCH event
    -                DEVMATCH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for DEVMISS event
    -                DEVMISS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for RSSIEND event
    -                RSSIEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved10: u2,
    -                ///  Write '1' to Disable interrupt for BCMATCH event
    -                BCMATCH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved12: u1,
    -                ///  Write '1' to Disable interrupt for CRCOK event
    -                CRCOK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for CRCERROR event
    -                CRCERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u18,
    -            }),
    -            reserved1024: [244]u8,
    -            ///  CRC status
    -            CRCSTATUS: mmio.Mmio(packed struct(u32) {
    -                ///  CRC status of packet received
    -                CRCSTATUS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Packet received with CRC error
    -                        CRCError = 0x0,
    -                        ///  Packet received with CRC ok
    -                        CRCOk = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1032: [4]u8,
    -            ///  Received address
    -            RXMATCH: mmio.Mmio(packed struct(u32) {
    -                ///  Received address
    -                RXMATCH: u3,
    -                padding: u29,
    -            }),
    -            ///  CRC field of previously received packet
    -            RXCRC: mmio.Mmio(packed struct(u32) {
    -                ///  CRC field of previously received packet
    -                RXCRC: u24,
    -                padding: u8,
    -            }),
    -            ///  Device address match index
    -            DAI: mmio.Mmio(packed struct(u32) {
    -                ///  Device address match index
    -                DAI: u3,
    -                padding: u29,
    -            }),
    -            reserved1284: [240]u8,
    -            ///  Packet pointer
    -            PACKETPTR: mmio.Mmio(packed struct(u32) {
    -                ///  Packet pointer
    -                PACKETPTR: u32,
    -            }),
    -            ///  Frequency
    -            FREQUENCY: mmio.Mmio(packed struct(u32) {
    -                ///  Radio channel frequency
    -                FREQUENCY: u7,
    -                reserved8: u1,
    -                ///  Channel map selection.
    -                MAP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Channel map between 2400 MHZ .. 2500 MHz
    -                        Default = 0x0,
    -                        ///  Channel map between 2360 MHZ .. 2460 MHz
    -                        Low = 0x1,
    -                    },
    -                },
    -                padding: u23,
    -            }),
    -            ///  Output power
    -            TXPOWER: mmio.Mmio(packed struct(u32) {
    -                ///  RADIO output power.
    -                TXPOWER: packed union {
    -                    raw: u8,
    -                    value: enum(u8) {
    -                        ///  +4 dBm
    -                        Pos4dBm = 0x4,
    -                        ///  +3 dBm
    -                        Pos3dBm = 0x3,
    -                        ///  0 dBm
    -                        @"0dBm" = 0x0,
    -                        ///  -4 dBm
    -                        Neg4dBm = 0xfc,
    -                        ///  -8 dBm
    -                        Neg8dBm = 0xf8,
    -                        ///  -12 dBm
    -                        Neg12dBm = 0xf4,
    -                        ///  -16 dBm
    -                        Neg16dBm = 0xf0,
    -                        ///  -20 dBm
    -                        Neg20dBm = 0xec,
    -                        ///  Deprecated enumerator - -40 dBm
    -                        Neg30dBm = 0xff,
    -                        ///  -40 dBm
    -                        Neg40dBm = 0xd8,
    -                        _,
    -                    },
    -                },
    -                padding: u24,
    -            }),
    -            ///  Data rate and modulation
    -            MODE: mmio.Mmio(packed struct(u32) {
    -                ///  Radio data rate and modulation setting. The radio supports Frequency-shift Keying (FSK) modulation.
    -                MODE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  1 Mbit/s Nordic proprietary radio mode
    -                        Nrf_1Mbit = 0x0,
    -                        ///  2 Mbit/s Nordic proprietary radio mode
    -                        Nrf_2Mbit = 0x1,
    -                        ///  Deprecated enumerator - 250 kbit/s Nordic proprietary radio mode
    -                        Nrf_250Kbit = 0x2,
    -                        ///  1 Mbit/s Bluetooth Low Energy
    -                        Ble_1Mbit = 0x3,
    -                        ///  2 Mbit/s Bluetooth Low Energy
    -                        Ble_2Mbit = 0x4,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            ///  Packet configuration register 0
    -            PCNF0: mmio.Mmio(packed struct(u32) {
    -                ///  Length on air of LENGTH field in number of bits.
    -                LFLEN: u4,
    -                reserved8: u4,
    -                ///  Length on air of S0 field in number of bytes.
    -                S0LEN: u1,
    -                reserved16: u7,
    -                ///  Length on air of S1 field in number of bits.
    -                S1LEN: u4,
    -                ///  Include or exclude S1 field in RAM
    -                S1INCL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Include S1 field in RAM only if S1LEN > 0
    -                        Automatic = 0x0,
    -                        ///  Always include S1 field in RAM independent of S1LEN
    -                        Include = 0x1,
    -                    },
    -                },
    -                reserved24: u3,
    -                ///  Length of preamble on air. Decision point: TASKS_START task
    -                PLEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  8-bit preamble
    -                        @"8bit" = 0x0,
    -                        ///  16-bit preamble
    -                        @"16bit" = 0x1,
    -                    },
    -                },
    -                padding: u7,
    -            }),
    -            ///  Packet configuration register 1
    -            PCNF1: mmio.Mmio(packed struct(u32) {
    -                ///  Maximum length of packet payload. If the packet payload is larger than MAXLEN, the radio will truncate the payload to MAXLEN.
    -                MAXLEN: u8,
    -                ///  Static length in number of bytes
    -                STATLEN: u8,
    -                ///  Base address length in number of bytes
    -                BALEN: u3,
    -                reserved24: u5,
    -                ///  On air endianness of packet, this applies to the S0, LENGTH, S1 and the PAYLOAD fields.
    -                ENDIAN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Least Significant bit on air first
    -                        Little = 0x0,
    -                        ///  Most significant bit on air first
    -                        Big = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable packet whitening
    -                WHITEEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u6,
    -            }),
    -            ///  Base address 0
    -            BASE0: mmio.Mmio(packed struct(u32) {
    -                ///  Base address 0
    -                BASE0: u32,
    -            }),
    -            ///  Base address 1
    -            BASE1: mmio.Mmio(packed struct(u32) {
    -                ///  Base address 1
    -                BASE1: u32,
    -            }),
    -            ///  Prefixes bytes for logical addresses 0-3
    -            PREFIX0: mmio.Mmio(packed struct(u32) {
    -                ///  Address prefix 0.
    -                AP0: u8,
    -                ///  Address prefix 1.
    -                AP1: u8,
    -                ///  Address prefix 2.
    -                AP2: u8,
    -                ///  Address prefix 3.
    -                AP3: u8,
    -            }),
    -            ///  Prefixes bytes for logical addresses 4-7
    -            PREFIX1: mmio.Mmio(packed struct(u32) {
    -                ///  Address prefix 4.
    -                AP4: u8,
    -                ///  Address prefix 5.
    -                AP5: u8,
    -                ///  Address prefix 6.
    -                AP6: u8,
    -                ///  Address prefix 7.
    -                AP7: u8,
    -            }),
    -            ///  Transmit address select
    -            TXADDRESS: mmio.Mmio(packed struct(u32) {
    -                ///  Transmit address select
    -                TXADDRESS: u3,
    -                padding: u29,
    -            }),
    -            ///  Receive address select
    -            RXADDRESSES: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable reception on logical address 0.
    -                ADDR0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable reception on logical address 1.
    -                ADDR1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable reception on logical address 2.
    -                ADDR2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable reception on logical address 3.
    -                ADDR3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable reception on logical address 4.
    -                ADDR4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable reception on logical address 5.
    -                ADDR5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable reception on logical address 6.
    -                ADDR6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable reception on logical address 7.
    -                ADDR7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u24,
    -            }),
    -            ///  CRC configuration
    -            CRCCNF: mmio.Mmio(packed struct(u32) {
    -                ///  CRC length in number of bytes.
    -                LEN: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  CRC length is zero and CRC calculation is disabled
    -                        Disabled = 0x0,
    -                        ///  CRC length is one byte and CRC calculation is enabled
    -                        One = 0x1,
    -                        ///  CRC length is two bytes and CRC calculation is enabled
    -                        Two = 0x2,
    -                        ///  CRC length is three bytes and CRC calculation is enabled
    -                        Three = 0x3,
    -                    },
    -                },
    -                reserved8: u6,
    -                ///  Include or exclude packet address field out of CRC calculation.
    -                SKIPADDR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  CRC calculation includes address field
    -                        Include = 0x0,
    -                        ///  CRC calculation does not include address field. The CRC calculation will start at the first byte after the address.
    -                        Skip = 0x1,
    -                    },
    -                },
    -                padding: u23,
    -            }),
    -            ///  CRC polynomial
    -            CRCPOLY: mmio.Mmio(packed struct(u32) {
    -                ///  CRC polynomial
    -                CRCPOLY: u24,
    -                padding: u8,
    -            }),
    -            ///  CRC initial value
    -            CRCINIT: mmio.Mmio(packed struct(u32) {
    -                ///  CRC initial value
    -                CRCINIT: u24,
    -                padding: u8,
    -            }),
    -            ///  Unspecified
    -            UNUSED0: u32,
    -            ///  Inter Frame Spacing in us
    -            TIFS: mmio.Mmio(packed struct(u32) {
    -                ///  Inter Frame Spacing in us
    -                TIFS: u8,
    -                padding: u24,
    -            }),
    -            ///  RSSI sample
    -            RSSISAMPLE: mmio.Mmio(packed struct(u32) {
    -                ///  RSSI sample
    -                RSSISAMPLE: u7,
    -                padding: u25,
    -            }),
    -            reserved1360: [4]u8,
    -            ///  Current radio state
    -            STATE: mmio.Mmio(packed struct(u32) {
    -                ///  Current radio state
    -                STATE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  RADIO is in the Disabled state
    -                        Disabled = 0x0,
    -                        ///  RADIO is in the RXRU state
    -                        RxRu = 0x1,
    -                        ///  RADIO is in the RXIDLE state
    -                        RxIdle = 0x2,
    -                        ///  RADIO is in the RX state
    -                        Rx = 0x3,
    -                        ///  RADIO is in the RXDISABLED state
    -                        RxDisable = 0x4,
    -                        ///  RADIO is in the TXRU state
    -                        TxRu = 0x9,
    -                        ///  RADIO is in the TXIDLE state
    -                        TxIdle = 0xa,
    -                        ///  RADIO is in the TX state
    -                        Tx = 0xb,
    -                        ///  RADIO is in the TXDISABLED state
    -                        TxDisable = 0xc,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            ///  Data whitening initial value
    -            DATAWHITEIV: mmio.Mmio(packed struct(u32) {
    -                ///  Data whitening initial value. Bit 6 is hard-wired to '1', writing '0' to it has no effect, and it will always be read back and used by the device as '1'.
    -                DATAWHITEIV: u7,
    -                padding: u25,
    -            }),
    -            reserved1376: [8]u8,
    -            ///  Bit counter compare
    -            BCC: mmio.Mmio(packed struct(u32) {
    -                ///  Bit counter compare
    -                BCC: u32,
    -            }),
    -            reserved1536: [156]u8,
    -            ///  Description collection[0]: Device address base segment 0
    -            DAB: [8]mmio.Mmio(packed struct(u32) {
    -                ///  Device address base segment 0
    -                DAB: u32,
    -            }),
    -            ///  Description collection[0]: Device address prefix 0
    -            DAP: [8]mmio.Mmio(packed struct(u32) {
    -                ///  Device address prefix 0
    -                DAP: u16,
    -                padding: u16,
    -            }),
    -            ///  Device address match configuration
    -            DACNF: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable device address matching using device address 0
    -                ENA0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable device address matching using device address 1
    -                ENA1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable device address matching using device address 2
    -                ENA2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable device address matching using device address 3
    -                ENA3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable device address matching using device address 4
    -                ENA4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable device address matching using device address 5
    -                ENA5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable device address matching using device address 6
    -                ENA6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable device address matching using device address 7
    -                ENA7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  TxAdd for device address 0
    -                TXADD0: u1,
    -                ///  TxAdd for device address 1
    -                TXADD1: u1,
    -                ///  TxAdd for device address 2
    -                TXADD2: u1,
    -                ///  TxAdd for device address 3
    -                TXADD3: u1,
    -                ///  TxAdd for device address 4
    -                TXADD4: u1,
    -                ///  TxAdd for device address 5
    -                TXADD5: u1,
    -                ///  TxAdd for device address 6
    -                TXADD6: u1,
    -                ///  TxAdd for device address 7
    -                TXADD7: u1,
    -                padding: u16,
    -            }),
    -            reserved1616: [12]u8,
    -            ///  Radio mode configuration register 0
    -            MODECNF0: mmio.Mmio(packed struct(u32) {
    -                ///  Radio ramp-up time
    -                RU: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Default ramp-up time (tRXEN), compatible with firmware written for nRF51
    -                        Default = 0x0,
    -                        ///  Fast ramp-up (tRXEN,FAST), see electrical specification for more information
    -                        Fast = 0x1,
    -                    },
    -                },
    -                reserved8: u7,
    -                ///  Default TX value
    -                DTX: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Transmit '1'
    -                        B1 = 0x0,
    -                        ///  Transmit '0'
    -                        B0 = 0x1,
    -                        ///  Transmit center frequency
    -                        Center = 0x2,
    -                        _,
    -                    },
    -                },
    -                padding: u22,
    -            }),
    -            reserved4092: [2472]u8,
    -            ///  Peripheral power control
    -            POWER: mmio.Mmio(packed struct(u32) {
    -                ///  Peripheral power control. The peripheral and its registers will be reset to its initial state by switching the peripheral off and then back on again.
    -                POWER: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Peripheral is powered off
    -                        Disabled = 0x0,
    -                        ///  Peripheral is powered on
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -        };
    -
    -        ///  UART with EasyDMA
    -        pub const UARTE0 = extern struct {
    -            ///  Start UART receiver
    -            TASKS_STARTRX: u32,
    -            ///  Stop UART receiver
    -            TASKS_STOPRX: u32,
    -            ///  Start UART transmitter
    -            TASKS_STARTTX: u32,
    -            ///  Stop UART transmitter
    -            TASKS_STOPTX: u32,
    -            reserved44: [28]u8,
    -            ///  Flush RX FIFO into RX buffer
    -            TASKS_FLUSHRX: u32,
    -            reserved256: [208]u8,
    -            ///  CTS is activated (set low). Clear To Send.
    -            EVENTS_CTS: u32,
    -            ///  CTS is deactivated (set high). Not Clear To Send.
    -            EVENTS_NCTS: u32,
    -            ///  Data received in RXD (but potentially not yet transferred to Data RAM)
    -            EVENTS_RXDRDY: u32,
    -            reserved272: [4]u8,
    -            ///  Receive buffer is filled up
    -            EVENTS_ENDRX: u32,
    -            reserved284: [8]u8,
    -            ///  Data sent from TXD
    -            EVENTS_TXDRDY: u32,
    -            ///  Last TX byte transmitted
    -            EVENTS_ENDTX: u32,
    -            ///  Error detected
    -            EVENTS_ERROR: u32,
    -            reserved324: [28]u8,
    -            ///  Receiver timeout
    -            EVENTS_RXTO: u32,
    -            reserved332: [4]u8,
    -            ///  UART receiver has started
    -            EVENTS_RXSTARTED: u32,
    -            ///  UART transmitter has started
    -            EVENTS_TXSTARTED: u32,
    -            reserved344: [4]u8,
    -            ///  Transmitter stopped
    -            EVENTS_TXSTOPPED: u32,
    -            reserved512: [164]u8,
    -            ///  Shortcut register
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                reserved5: u5,
    -                ///  Shortcut between ENDRX event and STARTRX task
    -                ENDRX_STARTRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between ENDRX event and STOPRX task
    -                ENDRX_STOPRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u25,
    -            }),
    -            reserved768: [252]u8,
    -            ///  Enable or disable interrupt
    -            INTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable interrupt for CTS event
    -                CTS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for NCTS event
    -                NCTS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for RXDRDY event
    -                RXDRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved4: u1,
    -                ///  Enable or disable interrupt for ENDRX event
    -                ENDRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved7: u2,
    -                ///  Enable or disable interrupt for TXDRDY event
    -                TXDRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for ENDTX event
    -                ENDTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for ERROR event
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved17: u7,
    -                ///  Enable or disable interrupt for RXTO event
    -                RXTO: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved19: u1,
    -                ///  Enable or disable interrupt for RXSTARTED event
    -                RXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for TXSTARTED event
    -                TXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved22: u1,
    -                ///  Enable or disable interrupt for TXSTOPPED event
    -                TXSTOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u9,
    -            }),
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Enable interrupt for CTS event
    -                CTS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for NCTS event
    -                NCTS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for RXDRDY event
    -                RXDRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved4: u1,
    -                ///  Write '1' to Enable interrupt for ENDRX event
    -                ENDRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved7: u2,
    -                ///  Write '1' to Enable interrupt for TXDRDY event
    -                TXDRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for ENDTX event
    -                ENDTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for ERROR event
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved17: u7,
    -                ///  Write '1' to Enable interrupt for RXTO event
    -                RXTO: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved19: u1,
    -                ///  Write '1' to Enable interrupt for RXSTARTED event
    -                RXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for TXSTARTED event
    -                TXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved22: u1,
    -                ///  Write '1' to Enable interrupt for TXSTOPPED event
    -                TXSTOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u9,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Disable interrupt for CTS event
    -                CTS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for NCTS event
    -                NCTS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for RXDRDY event
    -                RXDRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved4: u1,
    -                ///  Write '1' to Disable interrupt for ENDRX event
    -                ENDRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved7: u2,
    -                ///  Write '1' to Disable interrupt for TXDRDY event
    -                TXDRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for ENDTX event
    -                ENDTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for ERROR event
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved17: u7,
    -                ///  Write '1' to Disable interrupt for RXTO event
    -                RXTO: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved19: u1,
    -                ///  Write '1' to Disable interrupt for RXSTARTED event
    -                RXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for TXSTARTED event
    -                TXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved22: u1,
    -                ///  Write '1' to Disable interrupt for TXSTOPPED event
    -                TXSTOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u9,
    -            }),
    -            reserved1152: [372]u8,
    -            ///  Error source
    -            ERRORSRC: mmio.Mmio(packed struct(u32) {
    -                ///  Overrun error
    -                OVERRUN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: error not present
    -                        NotPresent = 0x0,
    -                        ///  Read: error present
    -                        Present = 0x1,
    -                    },
    -                },
    -                ///  Parity error
    -                PARITY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: error not present
    -                        NotPresent = 0x0,
    -                        ///  Read: error present
    -                        Present = 0x1,
    -                    },
    -                },
    -                ///  Framing error occurred
    -                FRAMING: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: error not present
    -                        NotPresent = 0x0,
    -                        ///  Read: error present
    -                        Present = 0x1,
    -                    },
    -                },
    -                ///  Break condition
    -                BREAK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: error not present
    -                        NotPresent = 0x0,
    -                        ///  Read: error present
    -                        Present = 0x1,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1280: [124]u8,
    -            ///  Enable UART
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable UARTE
    -                ENABLE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  Disable UARTE
    -                        Disabled = 0x0,
    -                        ///  Enable UARTE
    -                        Enabled = 0x8,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1316: [32]u8,
    -            ///  Baud rate. Accuracy depends on the HFCLK source selected.
    -            BAUDRATE: mmio.Mmio(packed struct(u32) {
    -                ///  Baud rate
    -                BAUDRATE: packed union {
    -                    raw: u32,
    -                    value: enum(u32) {
    -                        ///  1200 baud (actual rate: 1205)
    -                        Baud1200 = 0x4f000,
    -                        ///  2400 baud (actual rate: 2396)
    -                        Baud2400 = 0x9d000,
    -                        ///  4800 baud (actual rate: 4808)
    -                        Baud4800 = 0x13b000,
    -                        ///  9600 baud (actual rate: 9598)
    -                        Baud9600 = 0x275000,
    -                        ///  14400 baud (actual rate: 14401)
    -                        Baud14400 = 0x3af000,
    -                        ///  19200 baud (actual rate: 19208)
    -                        Baud19200 = 0x4ea000,
    -                        ///  28800 baud (actual rate: 28777)
    -                        Baud28800 = 0x75c000,
    -                        ///  31250 baud
    -                        Baud31250 = 0x800000,
    -                        ///  38400 baud (actual rate: 38369)
    -                        Baud38400 = 0x9d0000,
    -                        ///  56000 baud (actual rate: 55944)
    -                        Baud56000 = 0xe50000,
    -                        ///  57600 baud (actual rate: 57554)
    -                        Baud57600 = 0xeb0000,
    -                        ///  76800 baud (actual rate: 76923)
    -                        Baud76800 = 0x13a9000,
    -                        ///  115200 baud (actual rate: 115108)
    -                        Baud115200 = 0x1d60000,
    -                        ///  230400 baud (actual rate: 231884)
    -                        Baud230400 = 0x3b00000,
    -                        ///  250000 baud
    -                        Baud250000 = 0x4000000,
    -                        ///  460800 baud (actual rate: 457143)
    -                        Baud460800 = 0x7400000,
    -                        ///  921600 baud (actual rate: 941176)
    -                        Baud921600 = 0xf000000,
    -                        ///  1Mega baud
    -                        Baud1M = 0x10000000,
    -                        _,
    -                    },
    -                },
    -            }),
    -            reserved1388: [68]u8,
    -            ///  Configuration of parity and hardware flow control
    -            CONFIG: mmio.Mmio(packed struct(u32) {
    -                ///  Hardware flow control
    -                HWFC: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Parity
    -                PARITY: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        ///  Exclude parity bit
    -                        Excluded = 0x0,
    -                        ///  Include parity bit
    -                        Included = 0x7,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -        };
    -
    -        ///  Universal Asynchronous Receiver/Transmitter
    -        pub const UART0 = extern struct {
    -            ///  Start UART receiver
    -            TASKS_STARTRX: u32,
    -            ///  Stop UART receiver
    -            TASKS_STOPRX: u32,
    -            ///  Start UART transmitter
    -            TASKS_STARTTX: u32,
    -            ///  Stop UART transmitter
    -            TASKS_STOPTX: u32,
    -            reserved28: [12]u8,
    -            ///  Suspend UART
    -            TASKS_SUSPEND: u32,
    -            reserved256: [224]u8,
    -            ///  CTS is activated (set low). Clear To Send.
    -            EVENTS_CTS: u32,
    -            ///  CTS is deactivated (set high). Not Clear To Send.
    -            EVENTS_NCTS: u32,
    -            ///  Data received in RXD
    -            EVENTS_RXDRDY: u32,
    -            reserved284: [16]u8,
    -            ///  Data sent from TXD
    -            EVENTS_TXDRDY: u32,
    -            reserved292: [4]u8,
    -            ///  Error detected
    -            EVENTS_ERROR: u32,
    -            reserved324: [28]u8,
    -            ///  Receiver timeout
    -            EVENTS_RXTO: u32,
    -            reserved512: [184]u8,
    -            ///  Shortcut register
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                reserved3: u3,
    -                ///  Shortcut between CTS event and STARTRX task
    -                CTS_STARTRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between NCTS event and STOPRX task
    -                NCTS_STOPRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u27,
    -            }),
    -            reserved772: [256]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Enable interrupt for CTS event
    -                CTS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for NCTS event
    -                NCTS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for RXDRDY event
    -                RXDRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved7: u4,
    -                ///  Write '1' to Enable interrupt for TXDRDY event
    -                TXDRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved9: u1,
    -                ///  Write '1' to Enable interrupt for ERROR event
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved17: u7,
    -                ///  Write '1' to Enable interrupt for RXTO event
    -                RXTO: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u14,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Disable interrupt for CTS event
    -                CTS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for NCTS event
    -                NCTS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for RXDRDY event
    -                RXDRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved7: u4,
    -                ///  Write '1' to Disable interrupt for TXDRDY event
    -                TXDRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved9: u1,
    -                ///  Write '1' to Disable interrupt for ERROR event
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved17: u7,
    -                ///  Write '1' to Disable interrupt for RXTO event
    -                RXTO: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u14,
    -            }),
    -            reserved1152: [372]u8,
    -            ///  Error source
    -            ERRORSRC: mmio.Mmio(packed struct(u32) {
    -                ///  Overrun error
    -                OVERRUN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: error not present
    -                        NotPresent = 0x0,
    -                        ///  Read: error present
    -                        Present = 0x1,
    -                    },
    -                },
    -                ///  Parity error
    -                PARITY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: error not present
    -                        NotPresent = 0x0,
    -                        ///  Read: error present
    -                        Present = 0x1,
    -                    },
    -                },
    -                ///  Framing error occurred
    -                FRAMING: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: error not present
    -                        NotPresent = 0x0,
    -                        ///  Read: error present
    -                        Present = 0x1,
    -                    },
    -                },
    -                ///  Break condition
    -                BREAK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: error not present
    -                        NotPresent = 0x0,
    -                        ///  Read: error present
    -                        Present = 0x1,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1280: [124]u8,
    -            ///  Enable UART
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable UART
    -                ENABLE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  Disable UART
    -                        Disabled = 0x0,
    -                        ///  Enable UART
    -                        Enabled = 0x4,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1288: [4]u8,
    -            ///  Pin select for RTS
    -            PSELRTS: mmio.Mmio(packed struct(u32) {
    -                ///  Pin number configuration for UART RTS signal
    -                PSELRTS: packed union {
    -                    raw: u32,
    -                    value: enum(u32) {
    -                        ///  Disconnect
    -                        Disconnected = 0xffffffff,
    -                        _,
    -                    },
    -                },
    -            }),
    -            ///  Pin select for TXD
    -            PSELTXD: mmio.Mmio(packed struct(u32) {
    -                ///  Pin number configuration for UART TXD signal
    -                PSELTXD: packed union {
    -                    raw: u32,
    -                    value: enum(u32) {
    -                        ///  Disconnect
    -                        Disconnected = 0xffffffff,
    -                        _,
    -                    },
    -                },
    -            }),
    -            ///  Pin select for CTS
    -            PSELCTS: mmio.Mmio(packed struct(u32) {
    -                ///  Pin number configuration for UART CTS signal
    -                PSELCTS: packed union {
    -                    raw: u32,
    -                    value: enum(u32) {
    -                        ///  Disconnect
    -                        Disconnected = 0xffffffff,
    -                        _,
    -                    },
    -                },
    -            }),
    -            ///  Pin select for RXD
    -            PSELRXD: mmio.Mmio(packed struct(u32) {
    -                ///  Pin number configuration for UART RXD signal
    -                PSELRXD: packed union {
    -                    raw: u32,
    -                    value: enum(u32) {
    -                        ///  Disconnect
    -                        Disconnected = 0xffffffff,
    -                        _,
    -                    },
    -                },
    -            }),
    -            ///  RXD register
    -            RXD: mmio.Mmio(packed struct(u32) {
    -                ///  RX data received in previous transfers, double buffered
    -                RXD: u8,
    -                padding: u24,
    -            }),
    -            ///  TXD register
    -            TXD: mmio.Mmio(packed struct(u32) {
    -                ///  TX data to be transferred
    -                TXD: u8,
    -                padding: u24,
    -            }),
    -            reserved1316: [4]u8,
    -            ///  Baud rate
    -            BAUDRATE: mmio.Mmio(packed struct(u32) {
    -                ///  Baud rate
    -                BAUDRATE: packed union {
    -                    raw: u32,
    -                    value: enum(u32) {
    -                        ///  1200 baud (actual rate: 1205)
    -                        Baud1200 = 0x4f000,
    -                        ///  2400 baud (actual rate: 2396)
    -                        Baud2400 = 0x9d000,
    -                        ///  4800 baud (actual rate: 4808)
    -                        Baud4800 = 0x13b000,
    -                        ///  9600 baud (actual rate: 9598)
    -                        Baud9600 = 0x275000,
    -                        ///  14400 baud (actual rate: 14414)
    -                        Baud14400 = 0x3b0000,
    -                        ///  19200 baud (actual rate: 19208)
    -                        Baud19200 = 0x4ea000,
    -                        ///  28800 baud (actual rate: 28829)
    -                        Baud28800 = 0x75f000,
    -                        ///  31250 baud
    -                        Baud31250 = 0x800000,
    -                        ///  38400 baud (actual rate: 38462)
    -                        Baud38400 = 0x9d5000,
    -                        ///  56000 baud (actual rate: 55944)
    -                        Baud56000 = 0xe50000,
    -                        ///  57600 baud (actual rate: 57762)
    -                        Baud57600 = 0xebf000,
    -                        ///  76800 baud (actual rate: 76923)
    -                        Baud76800 = 0x13a9000,
    -                        ///  115200 baud (actual rate: 115942)
    -                        Baud115200 = 0x1d7e000,
    -                        ///  230400 baud (actual rate: 231884)
    -                        Baud230400 = 0x3afb000,
    -                        ///  250000 baud
    -                        Baud250000 = 0x4000000,
    -                        ///  460800 baud (actual rate: 470588)
    -                        Baud460800 = 0x75f7000,
    -                        ///  921600 baud (actual rate: 941176)
    -                        Baud921600 = 0xebed000,
    -                        ///  1Mega baud
    -                        Baud1M = 0x10000000,
    -                        _,
    -                    },
    -                },
    -            }),
    -            reserved1388: [68]u8,
    -            ///  Configuration of parity and hardware flow control
    -            CONFIG: mmio.Mmio(packed struct(u32) {
    -                ///  Hardware flow control
    -                HWFC: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Parity
    -                PARITY: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        ///  Exclude parity bit
    -                        Excluded = 0x0,
    -                        ///  Include parity bit
    -                        Included = 0x7,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -        };
    -
    -        ///  Serial Peripheral Interface Master with EasyDMA 0
    -        pub const SPIM0 = extern struct {
    -            reserved16: [16]u8,
    -            ///  Start SPI transaction
    -            TASKS_START: u32,
    -            ///  Stop SPI transaction
    -            TASKS_STOP: u32,
    -            reserved28: [4]u8,
    -            ///  Suspend SPI transaction
    -            TASKS_SUSPEND: u32,
    -            ///  Resume SPI transaction
    -            TASKS_RESUME: u32,
    -            reserved260: [224]u8,
    -            ///  SPI transaction has stopped
    -            EVENTS_STOPPED: u32,
    -            reserved272: [8]u8,
    -            ///  End of RXD buffer reached
    -            EVENTS_ENDRX: u32,
    -            reserved280: [4]u8,
    -            ///  End of RXD buffer and TXD buffer reached
    -            EVENTS_END: u32,
    -            reserved288: [4]u8,
    -            ///  End of TXD buffer reached
    -            EVENTS_ENDTX: u32,
    -            reserved332: [40]u8,
    -            ///  Transaction started
    -            EVENTS_STARTED: u32,
    -            reserved512: [176]u8,
    -            ///  Shortcut register
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                reserved17: u17,
    -                ///  Shortcut between END event and START task
    -                END_START: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u14,
    -            }),
    -            reserved772: [256]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to Enable interrupt for STOPPED event
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved4: u2,
    -                ///  Write '1' to Enable interrupt for ENDRX event
    -                ENDRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved6: u1,
    -                ///  Write '1' to Enable interrupt for END event
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved8: u1,
    -                ///  Write '1' to Enable interrupt for ENDTX event
    -                ENDTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved19: u10,
    -                ///  Write '1' to Enable interrupt for STARTED event
    -                STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u12,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to Disable interrupt for STOPPED event
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved4: u2,
    -                ///  Write '1' to Disable interrupt for ENDRX event
    -                ENDRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved6: u1,
    -                ///  Write '1' to Disable interrupt for END event
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved8: u1,
    -                ///  Write '1' to Disable interrupt for ENDTX event
    -                ENDTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved19: u10,
    -                ///  Write '1' to Disable interrupt for STARTED event
    -                STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u12,
    -            }),
    -            reserved1280: [500]u8,
    -            ///  Enable SPIM
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable SPIM
    -                ENABLE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  Disable SPIM
    -                        Disabled = 0x0,
    -                        ///  Enable SPIM
    -                        Enabled = 0x7,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1316: [32]u8,
    -            ///  SPI frequency. Accuracy depends on the HFCLK source selected.
    -            FREQUENCY: mmio.Mmio(packed struct(u32) {
    -                ///  SPI master data rate
    -                FREQUENCY: packed union {
    -                    raw: u32,
    -                    value: enum(u32) {
    -                        ///  125 kbps
    -                        K125 = 0x2000000,
    -                        ///  250 kbps
    -                        K250 = 0x4000000,
    -                        ///  500 kbps
    -                        K500 = 0x8000000,
    -                        ///  1 Mbps
    -                        M1 = 0x10000000,
    -                        ///  2 Mbps
    -                        M2 = 0x20000000,
    -                        ///  4 Mbps
    -                        M4 = 0x40000000,
    -                        ///  8 Mbps
    -                        M8 = 0x80000000,
    -                        _,
    -                    },
    -                },
    -            }),
    -            reserved1364: [44]u8,
    -            ///  Configuration register
    -            CONFIG: mmio.Mmio(packed struct(u32) {
    -                ///  Bit order
    -                ORDER: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Most significant bit shifted out first
    -                        MsbFirst = 0x0,
    -                        ///  Least significant bit shifted out first
    -                        LsbFirst = 0x1,
    -                    },
    -                },
    -                ///  Serial clock (SCK) phase
    -                CPHA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Sample on leading edge of clock, shift serial data on trailing edge
    -                        Leading = 0x0,
    -                        ///  Sample on trailing edge of clock, shift serial data on leading edge
    -                        Trailing = 0x1,
    -                    },
    -                },
    -                ///  Serial clock (SCK) polarity
    -                CPOL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Active high
    -                        ActiveHigh = 0x0,
    -                        ///  Active low
    -                        ActiveLow = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            reserved1472: [104]u8,
    -            ///  Over-read character. Character clocked out in case and over-read of the TXD buffer.
    -            ORC: mmio.Mmio(packed struct(u32) {
    -                ///  Over-read character. Character clocked out in case and over-read of the TXD buffer.
    -                ORC: u8,
    -                padding: u24,
    -            }),
    -        };
    -
    -        ///  SPI Slave 0
    -        pub const SPIS0 = extern struct {
    -            reserved36: [36]u8,
    -            ///  Acquire SPI semaphore
    -            TASKS_ACQUIRE: u32,
    -            ///  Release SPI semaphore, enabling the SPI slave to acquire it
    -            TASKS_RELEASE: u32,
    -            reserved260: [216]u8,
    -            ///  Granted transaction completed
    -            EVENTS_END: u32,
    -            reserved272: [8]u8,
    -            ///  End of RXD buffer reached
    -            EVENTS_ENDRX: u32,
    -            reserved296: [20]u8,
    -            ///  Semaphore acquired
    -            EVENTS_ACQUIRED: u32,
    -            reserved512: [212]u8,
    -            ///  Shortcut register
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                reserved2: u2,
    -                ///  Shortcut between END event and ACQUIRE task
    -                END_ACQUIRE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            reserved772: [256]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to Enable interrupt for END event
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved4: u2,
    -                ///  Write '1' to Enable interrupt for ENDRX event
    -                ENDRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved10: u5,
    -                ///  Write '1' to Enable interrupt for ACQUIRED event
    -                ACQUIRED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u21,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to Disable interrupt for END event
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved4: u2,
    -                ///  Write '1' to Disable interrupt for ENDRX event
    -                ENDRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved10: u5,
    -                ///  Write '1' to Disable interrupt for ACQUIRED event
    -                ACQUIRED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u21,
    -            }),
    -            reserved1024: [244]u8,
    -            ///  Semaphore status register
    -            SEMSTAT: mmio.Mmio(packed struct(u32) {
    -                ///  Semaphore status
    -                SEMSTAT: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Semaphore is free
    -                        Free = 0x0,
    -                        ///  Semaphore is assigned to CPU
    -                        CPU = 0x1,
    -                        ///  Semaphore is assigned to SPI slave
    -                        SPIS = 0x2,
    -                        ///  Semaphore is assigned to SPI but a handover to the CPU is pending
    -                        CPUPending = 0x3,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            reserved1088: [60]u8,
    -            ///  Status from last transaction
    -            STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  TX buffer over-read detected, and prevented
    -                OVERREAD: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: error not present
    -                        NotPresent = 0x0,
    -                        ///  Read: error present
    -                        Present = 0x1,
    -                    },
    -                },
    -                ///  RX buffer overflow detected, and prevented
    -                OVERFLOW: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: error not present
    -                        NotPresent = 0x0,
    -                        ///  Read: error present
    -                        Present = 0x1,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            reserved1280: [188]u8,
    -            ///  Enable SPI slave
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable SPI slave
    -                ENABLE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  Disable SPI slave
    -                        Disabled = 0x0,
    -                        ///  Enable SPI slave
    -                        Enabled = 0x2,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1364: [80]u8,
    -            ///  Configuration register
    -            CONFIG: mmio.Mmio(packed struct(u32) {
    -                ///  Bit order
    -                ORDER: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Most significant bit shifted out first
    -                        MsbFirst = 0x0,
    -                        ///  Least significant bit shifted out first
    -                        LsbFirst = 0x1,
    -                    },
    -                },
    -                ///  Serial clock (SCK) phase
    -                CPHA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Sample on leading edge of clock, shift serial data on trailing edge
    -                        Leading = 0x0,
    -                        ///  Sample on trailing edge of clock, shift serial data on leading edge
    -                        Trailing = 0x1,
    -                    },
    -                },
    -                ///  Serial clock (SCK) polarity
    -                CPOL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Active high
    -                        ActiveHigh = 0x0,
    -                        ///  Active low
    -                        ActiveLow = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            reserved1372: [4]u8,
    -            ///  Default character. Character clocked out in case of an ignored transaction.
    -            DEF: mmio.Mmio(packed struct(u32) {
    -                ///  Default character. Character clocked out in case of an ignored transaction.
    -                DEF: u8,
    -                padding: u24,
    -            }),
    -            reserved1472: [96]u8,
    -            ///  Over-read character
    -            ORC: mmio.Mmio(packed struct(u32) {
    -                ///  Over-read character. Character clocked out after an over-read of the transmit buffer.
    -                ORC: u8,
    -                padding: u24,
    -            }),
    -        };
    -
    -        ///  I2C compatible Two-Wire Master Interface with EasyDMA 0
    -        pub const TWIM0 = extern struct {
    -            ///  Start TWI receive sequence
    -            TASKS_STARTRX: u32,
    -            reserved8: [4]u8,
    -            ///  Start TWI transmit sequence
    -            TASKS_STARTTX: u32,
    -            reserved20: [8]u8,
    -            ///  Stop TWI transaction. Must be issued while the TWI master is not suspended.
    -            TASKS_STOP: u32,
    -            reserved28: [4]u8,
    -            ///  Suspend TWI transaction
    -            TASKS_SUSPEND: u32,
    -            ///  Resume TWI transaction
    -            TASKS_RESUME: u32,
    -            reserved260: [224]u8,
    -            ///  TWI stopped
    -            EVENTS_STOPPED: u32,
    -            reserved292: [28]u8,
    -            ///  TWI error
    -            EVENTS_ERROR: u32,
    -            reserved328: [32]u8,
    -            ///  Last byte has been sent out after the SUSPEND task has been issued, TWI traffic is now suspended.
    -            EVENTS_SUSPENDED: u32,
    -            ///  Receive sequence started
    -            EVENTS_RXSTARTED: u32,
    -            ///  Transmit sequence started
    -            EVENTS_TXSTARTED: u32,
    -            reserved348: [8]u8,
    -            ///  Byte boundary, starting to receive the last byte
    -            EVENTS_LASTRX: u32,
    -            ///  Byte boundary, starting to transmit the last byte
    -            EVENTS_LASTTX: u32,
    -            reserved512: [156]u8,
    -            ///  Shortcut register
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                reserved7: u7,
    -                ///  Shortcut between LASTTX event and STARTRX task
    -                LASTTX_STARTRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between LASTTX event and SUSPEND task
    -                LASTTX_SUSPEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between LASTTX event and STOP task
    -                LASTTX_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between LASTRX event and STARTTX task
    -                LASTRX_STARTTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved12: u1,
    -                ///  Shortcut between LASTRX event and STOP task
    -                LASTRX_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u19,
    -            }),
    -            reserved768: [252]u8,
    -            ///  Enable or disable interrupt
    -            INTEN: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Enable or disable interrupt for STOPPED event
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved9: u7,
    -                ///  Enable or disable interrupt for ERROR event
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved18: u8,
    -                ///  Enable or disable interrupt for SUSPENDED event
    -                SUSPENDED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for RXSTARTED event
    -                RXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for TXSTARTED event
    -                TXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved23: u2,
    -                ///  Enable or disable interrupt for LASTRX event
    -                LASTRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for LASTTX event
    -                LASTTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u7,
    -            }),
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to Enable interrupt for STOPPED event
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved9: u7,
    -                ///  Write '1' to Enable interrupt for ERROR event
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved18: u8,
    -                ///  Write '1' to Enable interrupt for SUSPENDED event
    -                SUSPENDED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for RXSTARTED event
    -                RXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for TXSTARTED event
    -                TXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved23: u2,
    -                ///  Write '1' to Enable interrupt for LASTRX event
    -                LASTRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for LASTTX event
    -                LASTTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u7,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to Disable interrupt for STOPPED event
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved9: u7,
    -                ///  Write '1' to Disable interrupt for ERROR event
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved18: u8,
    -                ///  Write '1' to Disable interrupt for SUSPENDED event
    -                SUSPENDED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for RXSTARTED event
    -                RXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for TXSTARTED event
    -                TXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved23: u2,
    -                ///  Write '1' to Disable interrupt for LASTRX event
    -                LASTRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for LASTTX event
    -                LASTTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u7,
    -            }),
    -            reserved1220: [440]u8,
    -            ///  Error source
    -            ERRORSRC: mmio.Mmio(packed struct(u32) {
    -                ///  Overrun error
    -                OVERRUN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Error did not occur
    -                        NotReceived = 0x0,
    -                        ///  Error occurred
    -                        Received = 0x1,
    -                    },
    -                },
    -                ///  NACK received after sending the address (write '1' to clear)
    -                ANACK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Error did not occur
    -                        NotReceived = 0x0,
    -                        ///  Error occurred
    -                        Received = 0x1,
    -                    },
    -                },
    -                ///  NACK received after sending a data byte (write '1' to clear)
    -                DNACK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Error did not occur
    -                        NotReceived = 0x0,
    -                        ///  Error occurred
    -                        Received = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            reserved1280: [56]u8,
    -            ///  Enable TWIM
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable TWIM
    -                ENABLE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  Disable TWIM
    -                        Disabled = 0x0,
    -                        ///  Enable TWIM
    -                        Enabled = 0x6,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1316: [32]u8,
    -            ///  TWI frequency
    -            FREQUENCY: mmio.Mmio(packed struct(u32) {
    -                ///  TWI master clock frequency
    -                FREQUENCY: packed union {
    -                    raw: u32,
    -                    value: enum(u32) {
    -                        ///  100 kbps
    -                        K100 = 0x1980000,
    -                        ///  250 kbps
    -                        K250 = 0x4000000,
    -                        ///  400 kbps
    -                        K400 = 0x6400000,
    -                        _,
    -                    },
    -                },
    -            }),
    -            reserved1416: [96]u8,
    -            ///  Address used in the TWI transfer
    -            ADDRESS: mmio.Mmio(packed struct(u32) {
    -                ///  Address used in the TWI transfer
    -                ADDRESS: u7,
    -                padding: u25,
    -            }),
    -        };
    -
    -        ///  I2C compatible Two-Wire Slave Interface with EasyDMA 0
    -        pub const TWIS0 = extern struct {
    -            reserved20: [20]u8,
    -            ///  Stop TWI transaction
    -            TASKS_STOP: u32,
    -            reserved28: [4]u8,
    -            ///  Suspend TWI transaction
    -            TASKS_SUSPEND: u32,
    -            ///  Resume TWI transaction
    -            TASKS_RESUME: u32,
    -            reserved48: [12]u8,
    -            ///  Prepare the TWI slave to respond to a write command
    -            TASKS_PREPARERX: u32,
    -            ///  Prepare the TWI slave to respond to a read command
    -            TASKS_PREPARETX: u32,
    -            reserved260: [204]u8,
    -            ///  TWI stopped
    -            EVENTS_STOPPED: u32,
    -            reserved292: [28]u8,
    -            ///  TWI error
    -            EVENTS_ERROR: u32,
    -            reserved332: [36]u8,
    -            ///  Receive sequence started
    -            EVENTS_RXSTARTED: u32,
    -            ///  Transmit sequence started
    -            EVENTS_TXSTARTED: u32,
    -            reserved356: [16]u8,
    -            ///  Write command received
    -            EVENTS_WRITE: u32,
    -            ///  Read command received
    -            EVENTS_READ: u32,
    -            reserved512: [148]u8,
    -            ///  Shortcut register
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                reserved13: u13,
    -                ///  Shortcut between WRITE event and SUSPEND task
    -                WRITE_SUSPEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between READ event and SUSPEND task
    -                READ_SUSPEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u17,
    -            }),
    -            reserved768: [252]u8,
    -            ///  Enable or disable interrupt
    -            INTEN: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Enable or disable interrupt for STOPPED event
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved9: u7,
    -                ///  Enable or disable interrupt for ERROR event
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved19: u9,
    -                ///  Enable or disable interrupt for RXSTARTED event
    -                RXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for TXSTARTED event
    -                TXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved25: u4,
    -                ///  Enable or disable interrupt for WRITE event
    -                WRITE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for READ event
    -                READ: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u5,
    -            }),
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to Enable interrupt for STOPPED event
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved9: u7,
    -                ///  Write '1' to Enable interrupt for ERROR event
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved19: u9,
    -                ///  Write '1' to Enable interrupt for RXSTARTED event
    -                RXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for TXSTARTED event
    -                TXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved25: u4,
    -                ///  Write '1' to Enable interrupt for WRITE event
    -                WRITE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for READ event
    -                READ: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u5,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to Disable interrupt for STOPPED event
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved9: u7,
    -                ///  Write '1' to Disable interrupt for ERROR event
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved19: u9,
    -                ///  Write '1' to Disable interrupt for RXSTARTED event
    -                RXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for TXSTARTED event
    -                TXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved25: u4,
    -                ///  Write '1' to Disable interrupt for WRITE event
    -                WRITE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for READ event
    -                READ: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u5,
    -            }),
    -            reserved1232: [452]u8,
    -            ///  Error source
    -            ERRORSRC: mmio.Mmio(packed struct(u32) {
    -                ///  RX buffer overflow detected, and prevented
    -                OVERFLOW: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Error did not occur
    -                        NotDetected = 0x0,
    -                        ///  Error occurred
    -                        Detected = 0x1,
    -                    },
    -                },
    -                reserved2: u1,
    -                ///  NACK sent after receiving a data byte
    -                DNACK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Error did not occur
    -                        NotReceived = 0x0,
    -                        ///  Error occurred
    -                        Received = 0x1,
    -                    },
    -                },
    -                ///  TX buffer over-read detected, and prevented
    -                OVERREAD: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Error did not occur
    -                        NotDetected = 0x0,
    -                        ///  Error occurred
    -                        Detected = 0x1,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            ///  Status register indicating which address had a match
    -            MATCH: mmio.Mmio(packed struct(u32) {
    -                ///  Which of the addresses in {ADDRESS} matched the incoming address
    -                MATCH: u1,
    -                padding: u31,
    -            }),
    -            reserved1280: [40]u8,
    -            ///  Enable TWIS
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable TWIS
    -                ENABLE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  Disable TWIS
    -                        Disabled = 0x0,
    -                        ///  Enable TWIS
    -                        Enabled = 0x9,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1416: [132]u8,
    -            ///  Description collection[0]: TWI slave address 0
    -            ADDRESS: [2]mmio.Mmio(packed struct(u32) {
    -                ///  TWI slave address
    -                ADDRESS: u7,
    -                padding: u25,
    -            }),
    -            reserved1428: [4]u8,
    -            ///  Configuration register for the address match mechanism
    -            CONFIG: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable address matching on ADDRESS[0]
    -                ADDRESS0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable address matching on ADDRESS[1]
    -                ADDRESS1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            reserved1472: [40]u8,
    -            ///  Over-read character. Character sent out in case of an over-read of the transmit buffer.
    -            ORC: mmio.Mmio(packed struct(u32) {
    -                ///  Over-read character. Character sent out in case of an over-read of the transmit buffer.
    -                ORC: u8,
    -                padding: u24,
    -            }),
    -        };
    -
    -        ///  Serial Peripheral Interface 0
    -        pub const SPI0 = extern struct {
    -            reserved264: [264]u8,
    -            ///  TXD byte sent and RXD byte received
    -            EVENTS_READY: u32,
    -            reserved772: [504]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                reserved2: u2,
    -                ///  Write '1' to Enable interrupt for READY event
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                reserved2: u2,
    -                ///  Write '1' to Disable interrupt for READY event
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            reserved1280: [500]u8,
    -            ///  Enable SPI
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable SPI
    -                ENABLE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  Disable SPI
    -                        Disabled = 0x0,
    -                        ///  Enable SPI
    -                        Enabled = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1304: [20]u8,
    -            ///  RXD register
    -            RXD: mmio.Mmio(packed struct(u32) {
    -                ///  RX data received. Double buffered
    -                RXD: u8,
    -                padding: u24,
    -            }),
    -            ///  TXD register
    -            TXD: mmio.Mmio(packed struct(u32) {
    -                ///  TX data to send. Double buffered
    -                TXD: u8,
    -                padding: u24,
    -            }),
    -            reserved1316: [4]u8,
    -            ///  SPI frequency
    -            FREQUENCY: mmio.Mmio(packed struct(u32) {
    -                ///  SPI master data rate
    -                FREQUENCY: packed union {
    -                    raw: u32,
    -                    value: enum(u32) {
    -                        ///  125 kbps
    -                        K125 = 0x2000000,
    -                        ///  250 kbps
    -                        K250 = 0x4000000,
    -                        ///  500 kbps
    -                        K500 = 0x8000000,
    -                        ///  1 Mbps
    -                        M1 = 0x10000000,
    -                        ///  2 Mbps
    -                        M2 = 0x20000000,
    -                        ///  4 Mbps
    -                        M4 = 0x40000000,
    -                        ///  8 Mbps
    -                        M8 = 0x80000000,
    -                        _,
    -                    },
    -                },
    -            }),
    -            reserved1364: [44]u8,
    -            ///  Configuration register
    -            CONFIG: mmio.Mmio(packed struct(u32) {
    -                ///  Bit order
    -                ORDER: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Most significant bit shifted out first
    -                        MsbFirst = 0x0,
    -                        ///  Least significant bit shifted out first
    -                        LsbFirst = 0x1,
    -                    },
    -                },
    -                ///  Serial clock (SCK) phase
    -                CPHA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Sample on leading edge of clock, shift serial data on trailing edge
    -                        Leading = 0x0,
    -                        ///  Sample on trailing edge of clock, shift serial data on leading edge
    -                        Trailing = 0x1,
    -                    },
    -                },
    -                ///  Serial clock (SCK) polarity
    -                CPOL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Active high
    -                        ActiveHigh = 0x0,
    -                        ///  Active low
    -                        ActiveLow = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -        };
    -
    -        ///  I2C compatible Two-Wire Interface 0
    -        pub const TWI0 = extern struct {
    -            ///  Start TWI receive sequence
    -            TASKS_STARTRX: u32,
    -            reserved8: [4]u8,
    -            ///  Start TWI transmit sequence
    -            TASKS_STARTTX: u32,
    -            reserved20: [8]u8,
    -            ///  Stop TWI transaction
    -            TASKS_STOP: u32,
    -            reserved28: [4]u8,
    -            ///  Suspend TWI transaction
    -            TASKS_SUSPEND: u32,
    -            ///  Resume TWI transaction
    -            TASKS_RESUME: u32,
    -            reserved260: [224]u8,
    -            ///  TWI stopped
    -            EVENTS_STOPPED: u32,
    -            ///  TWI RXD byte received
    -            EVENTS_RXDREADY: u32,
    -            reserved284: [16]u8,
    -            ///  TWI TXD byte sent
    -            EVENTS_TXDSENT: u32,
    -            reserved292: [4]u8,
    -            ///  TWI error
    -            EVENTS_ERROR: u32,
    -            reserved312: [16]u8,
    -            ///  TWI byte boundary, generated before each byte that is sent or received
    -            EVENTS_BB: u32,
    -            reserved328: [12]u8,
    -            ///  TWI entered the suspended state
    -            EVENTS_SUSPENDED: u32,
    -            reserved512: [180]u8,
    -            ///  Shortcut register
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                ///  Shortcut between BB event and SUSPEND task
    -                BB_SUSPEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between BB event and STOP task
    -                BB_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            reserved772: [256]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to Enable interrupt for STOPPED event
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for RXDREADY event
    -                RXDREADY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved7: u4,
    -                ///  Write '1' to Enable interrupt for TXDSENT event
    -                TXDSENT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved9: u1,
    -                ///  Write '1' to Enable interrupt for ERROR event
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved14: u4,
    -                ///  Write '1' to Enable interrupt for BB event
    -                BB: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved18: u3,
    -                ///  Write '1' to Enable interrupt for SUSPENDED event
    -                SUSPENDED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u13,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to Disable interrupt for STOPPED event
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for RXDREADY event
    -                RXDREADY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved7: u4,
    -                ///  Write '1' to Disable interrupt for TXDSENT event
    -                TXDSENT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved9: u1,
    -                ///  Write '1' to Disable interrupt for ERROR event
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved14: u4,
    -                ///  Write '1' to Disable interrupt for BB event
    -                BB: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved18: u3,
    -                ///  Write '1' to Disable interrupt for SUSPENDED event
    -                SUSPENDED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u13,
    -            }),
    -            reserved1220: [440]u8,
    -            ///  Error source
    -            ERRORSRC: mmio.Mmio(packed struct(u32) {
    -                ///  Overrun error
    -                OVERRUN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: no overrun occured
    -                        NotPresent = 0x0,
    -                        ///  Read: overrun occured
    -                        Present = 0x1,
    -                    },
    -                },
    -                ///  NACK received after sending the address (write '1' to clear)
    -                ANACK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: error not present
    -                        NotPresent = 0x0,
    -                        ///  Read: error present
    -                        Present = 0x1,
    -                    },
    -                },
    -                ///  NACK received after sending a data byte (write '1' to clear)
    -                DNACK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: error not present
    -                        NotPresent = 0x0,
    -                        ///  Read: error present
    -                        Present = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            reserved1280: [56]u8,
    -            ///  Enable TWI
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable TWI
    -                ENABLE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  Disable TWI
    -                        Disabled = 0x0,
    -                        ///  Enable TWI
    -                        Enabled = 0x5,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1288: [4]u8,
    -            ///  Pin select for SCL
    -            PSELSCL: mmio.Mmio(packed struct(u32) {
    -                ///  Pin number configuration for TWI SCL signal
    -                PSELSCL: packed union {
    -                    raw: u32,
    -                    value: enum(u32) {
    -                        ///  Disconnect
    -                        Disconnected = 0xffffffff,
    -                        _,
    -                    },
    -                },
    -            }),
    -            ///  Pin select for SDA
    -            PSELSDA: mmio.Mmio(packed struct(u32) {
    -                ///  Pin number configuration for TWI SDA signal
    -                PSELSDA: packed union {
    -                    raw: u32,
    -                    value: enum(u32) {
    -                        ///  Disconnect
    -                        Disconnected = 0xffffffff,
    -                        _,
    -                    },
    -                },
    -            }),
    -            reserved1304: [8]u8,
    -            ///  RXD register
    -            RXD: mmio.Mmio(packed struct(u32) {
    -                ///  RXD register
    -                RXD: u8,
    -                padding: u24,
    -            }),
    -            ///  TXD register
    -            TXD: mmio.Mmio(packed struct(u32) {
    -                ///  TXD register
    -                TXD: u8,
    -                padding: u24,
    -            }),
    -            reserved1316: [4]u8,
    -            ///  TWI frequency
    -            FREQUENCY: mmio.Mmio(packed struct(u32) {
    -                ///  TWI master clock frequency
    -                FREQUENCY: packed union {
    -                    raw: u32,
    -                    value: enum(u32) {
    -                        ///  100 kbps
    -                        K100 = 0x1980000,
    -                        ///  250 kbps
    -                        K250 = 0x4000000,
    -                        ///  400 kbps (actual rate 410.256 kbps)
    -                        K400 = 0x6680000,
    -                        _,
    -                    },
    -                },
    -            }),
    -            reserved1416: [96]u8,
    -            ///  Address used in the TWI transfer
    -            ADDRESS: mmio.Mmio(packed struct(u32) {
    -                ///  Address used in the TWI transfer
    -                ADDRESS: u7,
    -                padding: u25,
    -            }),
    -        };
    -
    -        ///  GPIO Port 1
    -        pub const P0 = extern struct {
    -            reserved1284: [1284]u8,
    -            ///  Write GPIO port
    -            OUT: mmio.Mmio(packed struct(u32) {
    -                ///  Pin 0
    -                PIN0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 1
    -                PIN1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 2
    -                PIN2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 3
    -                PIN3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 4
    -                PIN4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 5
    -                PIN5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 6
    -                PIN6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 7
    -                PIN7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 8
    -                PIN8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 9
    -                PIN9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 10
    -                PIN10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 11
    -                PIN11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 12
    -                PIN12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 13
    -                PIN13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 14
    -                PIN14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 15
    -                PIN15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 16
    -                PIN16: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 17
    -                PIN17: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 18
    -                PIN18: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 19
    -                PIN19: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 20
    -                PIN20: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 21
    -                PIN21: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 22
    -                PIN22: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 23
    -                PIN23: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 24
    -                PIN24: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 25
    -                PIN25: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 26
    -                PIN26: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 27
    -                PIN27: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 28
    -                PIN28: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 29
    -                PIN29: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 30
    -                PIN30: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 31
    -                PIN31: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -            }),
    -            ///  Set individual bits in GPIO port
    -            OUTSET: mmio.Mmio(packed struct(u32) {
    -                ///  Pin 0
    -                PIN0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 1
    -                PIN1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 2
    -                PIN2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 3
    -                PIN3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 4
    -                PIN4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 5
    -                PIN5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 6
    -                PIN6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 7
    -                PIN7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 8
    -                PIN8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 9
    -                PIN9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 10
    -                PIN10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 11
    -                PIN11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 12
    -                PIN12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 13
    -                PIN13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 14
    -                PIN14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 15
    -                PIN15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 16
    -                PIN16: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 17
    -                PIN17: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 18
    -                PIN18: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 19
    -                PIN19: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 20
    -                PIN20: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 21
    -                PIN21: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 22
    -                PIN22: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 23
    -                PIN23: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 24
    -                PIN24: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 25
    -                PIN25: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 26
    -                PIN26: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 27
    -                PIN27: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 28
    -                PIN28: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 29
    -                PIN29: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 30
    -                PIN30: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 31
    -                PIN31: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -            }),
    -            ///  Clear individual bits in GPIO port
    -            OUTCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Pin 0
    -                PIN0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 1
    -                PIN1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 2
    -                PIN2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 3
    -                PIN3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 4
    -                PIN4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 5
    -                PIN5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 6
    -                PIN6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 7
    -                PIN7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 8
    -                PIN8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 9
    -                PIN9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 10
    -                PIN10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 11
    -                PIN11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 12
    -                PIN12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 13
    -                PIN13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 14
    -                PIN14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 15
    -                PIN15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 16
    -                PIN16: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 17
    -                PIN17: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 18
    -                PIN18: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 19
    -                PIN19: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 20
    -                PIN20: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 21
    -                PIN21: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 22
    -                PIN22: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 23
    -                PIN23: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 24
    -                PIN24: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 25
    -                PIN25: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 26
    -                PIN26: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 27
    -                PIN27: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 28
    -                PIN28: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 29
    -                PIN29: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 30
    -                PIN30: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 31
    -                PIN31: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -            }),
    -            ///  Read GPIO port
    -            IN: mmio.Mmio(packed struct(u32) {
    -                ///  Pin 0
    -                PIN0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 1
    -                PIN1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 2
    -                PIN2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 3
    -                PIN3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 4
    -                PIN4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 5
    -                PIN5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 6
    -                PIN6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 7
    -                PIN7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 8
    -                PIN8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 9
    -                PIN9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 10
    -                PIN10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 11
    -                PIN11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 12
    -                PIN12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 13
    -                PIN13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 14
    -                PIN14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 15
    -                PIN15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 16
    -                PIN16: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 17
    -                PIN17: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 18
    -                PIN18: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 19
    -                PIN19: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 20
    -                PIN20: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 21
    -                PIN21: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 22
    -                PIN22: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 23
    -                PIN23: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 24
    -                PIN24: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 25
    -                PIN25: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 26
    -                PIN26: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 27
    -                PIN27: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 28
    -                PIN28: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 29
    -                PIN29: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 30
    -                PIN30: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 31
    -                PIN31: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -            }),
    -            ///  Direction of GPIO pins
    -            DIR: mmio.Mmio(packed struct(u32) {
    -                ///  Pin 0
    -                PIN0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 1
    -                PIN1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 2
    -                PIN2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 3
    -                PIN3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 4
    -                PIN4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 5
    -                PIN5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 6
    -                PIN6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 7
    -                PIN7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 8
    -                PIN8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 9
    -                PIN9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 10
    -                PIN10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 11
    -                PIN11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 12
    -                PIN12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 13
    -                PIN13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 14
    -                PIN14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 15
    -                PIN15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 16
    -                PIN16: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 17
    -                PIN17: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 18
    -                PIN18: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 19
    -                PIN19: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 20
    -                PIN20: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 21
    -                PIN21: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 22
    -                PIN22: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 23
    -                PIN23: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 24
    -                PIN24: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 25
    -                PIN25: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 26
    -                PIN26: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 27
    -                PIN27: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 28
    -                PIN28: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 29
    -                PIN29: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 30
    -                PIN30: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 31
    -                PIN31: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -            }),
    -            ///  DIR set register
    -            DIRSET: mmio.Mmio(packed struct(u32) {
    -                ///  Set as output pin 0
    -                PIN0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 1
    -                PIN1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 2
    -                PIN2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 3
    -                PIN3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 4
    -                PIN4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 5
    -                PIN5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 6
    -                PIN6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 7
    -                PIN7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 8
    -                PIN8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 9
    -                PIN9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 10
    -                PIN10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 11
    -                PIN11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 12
    -                PIN12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 13
    -                PIN13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 14
    -                PIN14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 15
    -                PIN15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 16
    -                PIN16: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 17
    -                PIN17: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 18
    -                PIN18: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 19
    -                PIN19: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 20
    -                PIN20: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 21
    -                PIN21: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 22
    -                PIN22: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 23
    -                PIN23: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 24
    -                PIN24: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 25
    -                PIN25: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 26
    -                PIN26: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 27
    -                PIN27: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 28
    -                PIN28: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 29
    -                PIN29: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 30
    -                PIN30: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 31
    -                PIN31: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -            }),
    -            ///  DIR clear register
    -            DIRCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Set as input pin 0
    -                PIN0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 1
    -                PIN1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 2
    -                PIN2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 3
    -                PIN3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 4
    -                PIN4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 5
    -                PIN5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 6
    -                PIN6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 7
    -                PIN7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 8
    -                PIN8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 9
    -                PIN9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 10
    -                PIN10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 11
    -                PIN11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 12
    -                PIN12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 13
    -                PIN13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 14
    -                PIN14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 15
    -                PIN15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 16
    -                PIN16: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 17
    -                PIN17: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 18
    -                PIN18: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 19
    -                PIN19: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 20
    -                PIN20: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 21
    -                PIN21: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 22
    -                PIN22: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 23
    -                PIN23: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 24
    -                PIN24: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 25
    -                PIN25: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 26
    -                PIN26: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 27
    -                PIN27: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 28
    -                PIN28: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 29
    -                PIN29: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 30
    -                PIN30: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 31
    -                PIN31: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -            }),
    -            ///  Latch register indicating what GPIO pins that have met the criteria set in the PIN_CNF[n].SENSE registers
    -            LATCH: mmio.Mmio(packed struct(u32) {
    -                ///  Status on whether PIN0 has met criteria set in PIN_CNF0.SENSE register. Write '1' to clear.
    -                PIN0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN1 has met criteria set in PIN_CNF1.SENSE register. Write '1' to clear.
    -                PIN1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN2 has met criteria set in PIN_CNF2.SENSE register. Write '1' to clear.
    -                PIN2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN3 has met criteria set in PIN_CNF3.SENSE register. Write '1' to clear.
    -                PIN3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN4 has met criteria set in PIN_CNF4.SENSE register. Write '1' to clear.
    -                PIN4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN5 has met criteria set in PIN_CNF5.SENSE register. Write '1' to clear.
    -                PIN5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN6 has met criteria set in PIN_CNF6.SENSE register. Write '1' to clear.
    -                PIN6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN7 has met criteria set in PIN_CNF7.SENSE register. Write '1' to clear.
    -                PIN7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN8 has met criteria set in PIN_CNF8.SENSE register. Write '1' to clear.
    -                PIN8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN9 has met criteria set in PIN_CNF9.SENSE register. Write '1' to clear.
    -                PIN9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN10 has met criteria set in PIN_CNF10.SENSE register. Write '1' to clear.
    -                PIN10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN11 has met criteria set in PIN_CNF11.SENSE register. Write '1' to clear.
    -                PIN11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN12 has met criteria set in PIN_CNF12.SENSE register. Write '1' to clear.
    -                PIN12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN13 has met criteria set in PIN_CNF13.SENSE register. Write '1' to clear.
    -                PIN13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN14 has met criteria set in PIN_CNF14.SENSE register. Write '1' to clear.
    -                PIN14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN15 has met criteria set in PIN_CNF15.SENSE register. Write '1' to clear.
    -                PIN15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN16 has met criteria set in PIN_CNF16.SENSE register. Write '1' to clear.
    -                PIN16: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN17 has met criteria set in PIN_CNF17.SENSE register. Write '1' to clear.
    -                PIN17: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN18 has met criteria set in PIN_CNF18.SENSE register. Write '1' to clear.
    -                PIN18: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN19 has met criteria set in PIN_CNF19.SENSE register. Write '1' to clear.
    -                PIN19: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN20 has met criteria set in PIN_CNF20.SENSE register. Write '1' to clear.
    -                PIN20: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN21 has met criteria set in PIN_CNF21.SENSE register. Write '1' to clear.
    -                PIN21: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN22 has met criteria set in PIN_CNF22.SENSE register. Write '1' to clear.
    -                PIN22: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN23 has met criteria set in PIN_CNF23.SENSE register. Write '1' to clear.
    -                PIN23: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN24 has met criteria set in PIN_CNF24.SENSE register. Write '1' to clear.
    -                PIN24: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN25 has met criteria set in PIN_CNF25.SENSE register. Write '1' to clear.
    -                PIN25: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN26 has met criteria set in PIN_CNF26.SENSE register. Write '1' to clear.
    -                PIN26: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN27 has met criteria set in PIN_CNF27.SENSE register. Write '1' to clear.
    -                PIN27: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN28 has met criteria set in PIN_CNF28.SENSE register. Write '1' to clear.
    -                PIN28: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN29 has met criteria set in PIN_CNF29.SENSE register. Write '1' to clear.
    -                PIN29: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN30 has met criteria set in PIN_CNF30.SENSE register. Write '1' to clear.
    -                PIN30: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN31 has met criteria set in PIN_CNF31.SENSE register. Write '1' to clear.
    -                PIN31: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -            }),
    -            ///  Select between default DETECT signal behaviour and LDETECT mode
    -            DETECTMODE: mmio.Mmio(packed struct(u32) {
    -                ///  Select between default DETECT signal behaviour and LDETECT mode
    -                DETECTMODE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  DETECT directly connected to PIN DETECT signals
    -                        Default = 0x0,
    -                        ///  Use the latched LDETECT behaviour
    -                        LDETECT = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1792: [472]u8,
    -            ///  Description collection[0]: Configuration of GPIO pins
    -            PIN_CNF: [32]mmio.Mmio(packed struct(u32) {
    -                ///  Pin direction. Same physical register as DIR register
    -                DIR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Configure pin as an input pin
    -                        Input = 0x0,
    -                        ///  Configure pin as an output pin
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Connect or disconnect input buffer
    -                INPUT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Connect input buffer
    -                        Connect = 0x0,
    -                        ///  Disconnect input buffer
    -                        Disconnect = 0x1,
    -                    },
    -                },
    -                ///  Pull configuration
    -                PULL: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  No pull
    -                        Disabled = 0x0,
    -                        ///  Pull down on pin
    -                        Pulldown = 0x1,
    -                        ///  Pull up on pin
    -                        Pullup = 0x3,
    -                        _,
    -                    },
    -                },
    -                reserved8: u4,
    -                ///  Drive configuration
    -                DRIVE: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        ///  Standard '0', standard '1'
    -                        S0S1 = 0x0,
    -                        ///  High drive '0', standard '1'
    -                        H0S1 = 0x1,
    -                        ///  Standard '0', high drive '1'
    -                        S0H1 = 0x2,
    -                        ///  High drive '0', high 'drive '1''
    -                        H0H1 = 0x3,
    -                        ///  Disconnect '0' standard '1' (normally used for wired-or connections)
    -                        D0S1 = 0x4,
    -                        ///  Disconnect '0', high drive '1' (normally used for wired-or connections)
    -                        D0H1 = 0x5,
    -                        ///  Standard '0'. disconnect '1' (normally used for wired-and connections)
    -                        S0D1 = 0x6,
    -                        ///  High drive '0', disconnect '1' (normally used for wired-and connections)
    -                        H0D1 = 0x7,
    -                    },
    -                },
    -                reserved16: u5,
    -                ///  Pin sensing mechanism
    -                SENSE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Sense for high level
    -                        High = 0x2,
    -                        ///  Sense for low level
    -                        Low = 0x3,
    -                        _,
    -                    },
    -                },
    -                padding: u14,
    -            }),
    -        };
    -
    -        ///  FPU
    -        pub const FPU = extern struct {
    -            ///  Unused.
    -            UNUSED: u32,
    -        };
    -
    -        ///  Inter-IC Sound
    -        pub const I2S = extern struct {
    -            ///  Starts continuous I2S transfer. Also starts MCK generator when this is enabled.
    -            TASKS_START: u32,
    -            ///  Stops I2S transfer. Also stops MCK generator. Triggering this task will cause the {event:STOPPED} event to be generated.
    -            TASKS_STOP: u32,
    -            reserved260: [252]u8,
    -            ///  The RXD.PTR register has been copied to internal double-buffers. When the I2S module is started and RX is enabled, this event will be generated for every RXTXD.MAXCNT words that are received on the SDIN pin.
    -            EVENTS_RXPTRUPD: u32,
    -            ///  I2S transfer stopped.
    -            EVENTS_STOPPED: u32,
    -            reserved276: [8]u8,
    -            ///  The TDX.PTR register has been copied to internal double-buffers. When the I2S module is started and TX is enabled, this event will be generated for every RXTXD.MAXCNT words that are sent on the SDOUT pin.
    -            EVENTS_TXPTRUPD: u32,
    -            reserved768: [488]u8,
    -            ///  Enable or disable interrupt
    -            INTEN: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Enable or disable interrupt for RXPTRUPD event
    -                RXPTRUPD: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for STOPPED event
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved5: u2,
    -                ///  Enable or disable interrupt for TXPTRUPD event
    -                TXPTRUPD: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u26,
    -            }),
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to Enable interrupt for RXPTRUPD event
    -                RXPTRUPD: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for STOPPED event
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved5: u2,
    -                ///  Write '1' to Enable interrupt for TXPTRUPD event
    -                TXPTRUPD: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u26,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to Disable interrupt for RXPTRUPD event
    -                RXPTRUPD: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for STOPPED event
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved5: u2,
    -                ///  Write '1' to Disable interrupt for TXPTRUPD event
    -                TXPTRUPD: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u26,
    -            }),
    -            reserved1280: [500]u8,
    -            ///  Enable I2S module.
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable I2S module.
    -                ENABLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -        };
    -
    -        ///  Event Generator Unit 0
    -        pub const EGU0 = extern struct {
    -            ///  Description collection[0]: Trigger 0 for triggering the corresponding TRIGGERED[0] event
    -            TASKS_TRIGGER: [16]u32,
    -            reserved256: [192]u8,
    -            ///  Description collection[0]: Event number 0 generated by triggering the corresponding TRIGGER[0] task
    -            EVENTS_TRIGGERED: [16]u32,
    -            reserved768: [448]u8,
    -            ///  Enable or disable interrupt
    -            INTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable interrupt for TRIGGERED[0] event
    -                TRIGGERED0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for TRIGGERED[1] event
    -                TRIGGERED1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for TRIGGERED[2] event
    -                TRIGGERED2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for TRIGGERED[3] event
    -                TRIGGERED3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for TRIGGERED[4] event
    -                TRIGGERED4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for TRIGGERED[5] event
    -                TRIGGERED5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for TRIGGERED[6] event
    -                TRIGGERED6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for TRIGGERED[7] event
    -                TRIGGERED7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for TRIGGERED[8] event
    -                TRIGGERED8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for TRIGGERED[9] event
    -                TRIGGERED9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for TRIGGERED[10] event
    -                TRIGGERED10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for TRIGGERED[11] event
    -                TRIGGERED11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for TRIGGERED[12] event
    -                TRIGGERED12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for TRIGGERED[13] event
    -                TRIGGERED13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for TRIGGERED[14] event
    -                TRIGGERED14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for TRIGGERED[15] event
    -                TRIGGERED15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u16,
    -            }),
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Enable interrupt for TRIGGERED[0] event
    -                TRIGGERED0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for TRIGGERED[1] event
    -                TRIGGERED1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for TRIGGERED[2] event
    -                TRIGGERED2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for TRIGGERED[3] event
    -                TRIGGERED3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for TRIGGERED[4] event
    -                TRIGGERED4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for TRIGGERED[5] event
    -                TRIGGERED5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for TRIGGERED[6] event
    -                TRIGGERED6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for TRIGGERED[7] event
    -                TRIGGERED7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for TRIGGERED[8] event
    -                TRIGGERED8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for TRIGGERED[9] event
    -                TRIGGERED9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for TRIGGERED[10] event
    -                TRIGGERED10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for TRIGGERED[11] event
    -                TRIGGERED11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for TRIGGERED[12] event
    -                TRIGGERED12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for TRIGGERED[13] event
    -                TRIGGERED13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for TRIGGERED[14] event
    -                TRIGGERED14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for TRIGGERED[15] event
    -                TRIGGERED15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u16,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Disable interrupt for TRIGGERED[0] event
    -                TRIGGERED0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for TRIGGERED[1] event
    -                TRIGGERED1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for TRIGGERED[2] event
    -                TRIGGERED2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for TRIGGERED[3] event
    -                TRIGGERED3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for TRIGGERED[4] event
    -                TRIGGERED4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for TRIGGERED[5] event
    -                TRIGGERED5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for TRIGGERED[6] event
    -                TRIGGERED6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for TRIGGERED[7] event
    -                TRIGGERED7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for TRIGGERED[8] event
    -                TRIGGERED8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for TRIGGERED[9] event
    -                TRIGGERED9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for TRIGGERED[10] event
    -                TRIGGERED10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for TRIGGERED[11] event
    -                TRIGGERED11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for TRIGGERED[12] event
    -                TRIGGERED12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for TRIGGERED[13] event
    -                TRIGGERED13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for TRIGGERED[14] event
    -                TRIGGERED14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for TRIGGERED[15] event
    -                TRIGGERED15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u16,
    -            }),
    -        };
    -
    -        ///  Memory Watch Unit
    -        pub const MWU = extern struct {
    -            reserved768: [768]u8,
    -            ///  Enable or disable interrupt
    -            INTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable interrupt for REGION[0].WA event
    -                REGION0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for REGION[0].RA event
    -                REGION0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for REGION[1].WA event
    -                REGION1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for REGION[1].RA event
    -                REGION1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for REGION[2].WA event
    -                REGION2WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for REGION[2].RA event
    -                REGION2RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for REGION[3].WA event
    -                REGION3WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for REGION[3].RA event
    -                REGION3RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved24: u16,
    -                ///  Enable or disable interrupt for PREGION[0].WA event
    -                PREGION0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for PREGION[0].RA event
    -                PREGION0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for PREGION[1].WA event
    -                PREGION1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for PREGION[1].RA event
    -                PREGION1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u4,
    -            }),
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Enable interrupt for REGION[0].WA event
    -                REGION0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for REGION[0].RA event
    -                REGION0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for REGION[1].WA event
    -                REGION1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for REGION[1].RA event
    -                REGION1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for REGION[2].WA event
    -                REGION2WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for REGION[2].RA event
    -                REGION2RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for REGION[3].WA event
    -                REGION3WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for REGION[3].RA event
    -                REGION3RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved24: u16,
    -                ///  Write '1' to Enable interrupt for PREGION[0].WA event
    -                PREGION0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for PREGION[0].RA event
    -                PREGION0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for PREGION[1].WA event
    -                PREGION1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for PREGION[1].RA event
    -                PREGION1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u4,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Disable interrupt for REGION[0].WA event
    -                REGION0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for REGION[0].RA event
    -                REGION0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for REGION[1].WA event
    -                REGION1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for REGION[1].RA event
    -                REGION1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for REGION[2].WA event
    -                REGION2WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for REGION[2].RA event
    -                REGION2RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for REGION[3].WA event
    -                REGION3WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for REGION[3].RA event
    -                REGION3RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved24: u16,
    -                ///  Write '1' to Disable interrupt for PREGION[0].WA event
    -                PREGION0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for PREGION[0].RA event
    -                PREGION0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for PREGION[1].WA event
    -                PREGION1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for PREGION[1].RA event
    -                PREGION1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u4,
    -            }),
    -            reserved800: [20]u8,
    -            ///  Enable or disable non-maskable interrupt
    -            NMIEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable non-maskable interrupt for REGION[0].WA event
    -                REGION0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable non-maskable interrupt for REGION[0].RA event
    -                REGION0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable non-maskable interrupt for REGION[1].WA event
    -                REGION1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable non-maskable interrupt for REGION[1].RA event
    -                REGION1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable non-maskable interrupt for REGION[2].WA event
    -                REGION2WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable non-maskable interrupt for REGION[2].RA event
    -                REGION2RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable non-maskable interrupt for REGION[3].WA event
    -                REGION3WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable non-maskable interrupt for REGION[3].RA event
    -                REGION3RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved24: u16,
    -                ///  Enable or disable non-maskable interrupt for PREGION[0].WA event
    -                PREGION0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable non-maskable interrupt for PREGION[0].RA event
    -                PREGION0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable non-maskable interrupt for PREGION[1].WA event
    -                PREGION1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable non-maskable interrupt for PREGION[1].RA event
    -                PREGION1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u4,
    -            }),
    -            ///  Enable non-maskable interrupt
    -            NMIENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Enable non-maskable interrupt for REGION[0].WA event
    -                REGION0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable non-maskable interrupt for REGION[0].RA event
    -                REGION0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable non-maskable interrupt for REGION[1].WA event
    -                REGION1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable non-maskable interrupt for REGION[1].RA event
    -                REGION1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable non-maskable interrupt for REGION[2].WA event
    -                REGION2WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable non-maskable interrupt for REGION[2].RA event
    -                REGION2RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable non-maskable interrupt for REGION[3].WA event
    -                REGION3WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable non-maskable interrupt for REGION[3].RA event
    -                REGION3RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved24: u16,
    -                ///  Write '1' to Enable non-maskable interrupt for PREGION[0].WA event
    -                PREGION0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable non-maskable interrupt for PREGION[0].RA event
    -                PREGION0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable non-maskable interrupt for PREGION[1].WA event
    -                PREGION1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable non-maskable interrupt for PREGION[1].RA event
    -                PREGION1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u4,
    -            }),
    -            ///  Disable non-maskable interrupt
    -            NMIENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Disable non-maskable interrupt for REGION[0].WA event
    -                REGION0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable non-maskable interrupt for REGION[0].RA event
    -                REGION0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable non-maskable interrupt for REGION[1].WA event
    -                REGION1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable non-maskable interrupt for REGION[1].RA event
    -                REGION1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable non-maskable interrupt for REGION[2].WA event
    -                REGION2WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable non-maskable interrupt for REGION[2].RA event
    -                REGION2RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable non-maskable interrupt for REGION[3].WA event
    -                REGION3WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable non-maskable interrupt for REGION[3].RA event
    -                REGION3RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved24: u16,
    -                ///  Write '1' to Disable non-maskable interrupt for PREGION[0].WA event
    -                PREGION0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable non-maskable interrupt for PREGION[0].RA event
    -                PREGION0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable non-maskable interrupt for PREGION[1].WA event
    -                PREGION1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable non-maskable interrupt for PREGION[1].RA event
    -                PREGION1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u4,
    -            }),
    -            reserved1296: [484]u8,
    -            ///  Enable/disable regions watch
    -            REGIONEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable/disable write access watch in region[0]
    -                RGN0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable write access watch in this region
    -                        Disable = 0x0,
    -                        ///  Enable write access watch in this region
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable/disable read access watch in region[0]
    -                RGN0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable read access watch in this region
    -                        Disable = 0x0,
    -                        ///  Enable read access watch in this region
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable/disable write access watch in region[1]
    -                RGN1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable write access watch in this region
    -                        Disable = 0x0,
    -                        ///  Enable write access watch in this region
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable/disable read access watch in region[1]
    -                RGN1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable read access watch in this region
    -                        Disable = 0x0,
    -                        ///  Enable read access watch in this region
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable/disable write access watch in region[2]
    -                RGN2WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable write access watch in this region
    -                        Disable = 0x0,
    -                        ///  Enable write access watch in this region
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable/disable read access watch in region[2]
    -                RGN2RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable read access watch in this region
    -                        Disable = 0x0,
    -                        ///  Enable read access watch in this region
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable/disable write access watch in region[3]
    -                RGN3WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable write access watch in this region
    -                        Disable = 0x0,
    -                        ///  Enable write access watch in this region
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable/disable read access watch in region[3]
    -                RGN3RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable read access watch in this region
    -                        Disable = 0x0,
    -                        ///  Enable read access watch in this region
    -                        Enable = 0x1,
    -                    },
    -                },
    -                reserved24: u16,
    -                ///  Enable/disable write access watch in PREGION[0]
    -                PRGN0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable write access watch in this PREGION
    -                        Disable = 0x0,
    -                        ///  Enable write access watch in this PREGION
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable/disable read access watch in PREGION[0]
    -                PRGN0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable read access watch in this PREGION
    -                        Disable = 0x0,
    -                        ///  Enable read access watch in this PREGION
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable/disable write access watch in PREGION[1]
    -                PRGN1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable write access watch in this PREGION
    -                        Disable = 0x0,
    -                        ///  Enable write access watch in this PREGION
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable/disable read access watch in PREGION[1]
    -                PRGN1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable read access watch in this PREGION
    -                        Disable = 0x0,
    -                        ///  Enable read access watch in this PREGION
    -                        Enable = 0x1,
    -                    },
    -                },
    -                padding: u4,
    -            }),
    -            ///  Enable regions watch
    -            REGIONENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Enable write access watch in region[0]
    -                RGN0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Write access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Write access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable read access watch in region[0]
    -                RGN0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Read access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable write access watch in region[1]
    -                RGN1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Write access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Write access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable read access watch in region[1]
    -                RGN1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Read access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable write access watch in region[2]
    -                RGN2WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Write access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Write access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable read access watch in region[2]
    -                RGN2RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Read access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable write access watch in region[3]
    -                RGN3WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Write access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Write access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable read access watch in region[3]
    -                RGN3RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Read access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved24: u16,
    -                ///  Enable write access watch in PREGION[0]
    -                PRGN0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Write access watch in this PREGION is disabled
    -                        Disabled = 0x0,
    -                        ///  Write access watch in this PREGION is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable read access watch in PREGION[0]
    -                PRGN0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read access watch in this PREGION is disabled
    -                        Disabled = 0x0,
    -                        ///  Read access watch in this PREGION is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable write access watch in PREGION[1]
    -                PRGN1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Write access watch in this PREGION is disabled
    -                        Disabled = 0x0,
    -                        ///  Write access watch in this PREGION is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable read access watch in PREGION[1]
    -                PRGN1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read access watch in this PREGION is disabled
    -                        Disabled = 0x0,
    -                        ///  Read access watch in this PREGION is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u4,
    -            }),
    -            ///  Disable regions watch
    -            REGIONENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Disable write access watch in region[0]
    -                RGN0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Write access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Write access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Disable read access watch in region[0]
    -                RGN0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Read access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Disable write access watch in region[1]
    -                RGN1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Write access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Write access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Disable read access watch in region[1]
    -                RGN1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Read access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Disable write access watch in region[2]
    -                RGN2WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Write access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Write access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Disable read access watch in region[2]
    -                RGN2RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Read access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Disable write access watch in region[3]
    -                RGN3WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Write access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Write access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Disable read access watch in region[3]
    -                RGN3RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Read access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved24: u16,
    -                ///  Disable write access watch in PREGION[0]
    -                PRGN0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Write access watch in this PREGION is disabled
    -                        Disabled = 0x0,
    -                        ///  Write access watch in this PREGION is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Disable read access watch in PREGION[0]
    -                PRGN0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read access watch in this PREGION is disabled
    -                        Disabled = 0x0,
    -                        ///  Read access watch in this PREGION is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Disable write access watch in PREGION[1]
    -                PRGN1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Write access watch in this PREGION is disabled
    -                        Disabled = 0x0,
    -                        ///  Write access watch in this PREGION is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Disable read access watch in PREGION[1]
    -                PRGN1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read access watch in this PREGION is disabled
    -                        Disabled = 0x0,
    -                        ///  Read access watch in this PREGION is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u4,
    -            }),
    -        };
    -
    -        ///  Programmable Peripheral Interconnect
    -        pub const PPI = extern struct {
    -            reserved1280: [1280]u8,
    -            ///  Channel enable register
    -            CHEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable channel 0
    -                CH0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 1
    -                CH1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 2
    -                CH2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 3
    -                CH3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 4
    -                CH4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 5
    -                CH5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 6
    -                CH6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 7
    -                CH7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 8
    -                CH8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 9
    -                CH9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 10
    -                CH10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 11
    -                CH11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 12
    -                CH12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 13
    -                CH13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 14
    -                CH14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 15
    -                CH15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 16
    -                CH16: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 17
    -                CH17: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 18
    -                CH18: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 19
    -                CH19: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 20
    -                CH20: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 21
    -                CH21: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 22
    -                CH22: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 23
    -                CH23: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 24
    -                CH24: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 25
    -                CH25: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 26
    -                CH26: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 27
    -                CH27: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 28
    -                CH28: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 29
    -                CH29: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 30
    -                CH30: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 31
    -                CH31: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -            }),
    -            ///  Channel enable set register
    -            CHENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Channel 0 enable set register. Writing '0' has no effect
    -                CH0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 1 enable set register. Writing '0' has no effect
    -                CH1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 2 enable set register. Writing '0' has no effect
    -                CH2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 3 enable set register. Writing '0' has no effect
    -                CH3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 4 enable set register. Writing '0' has no effect
    -                CH4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 5 enable set register. Writing '0' has no effect
    -                CH5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 6 enable set register. Writing '0' has no effect
    -                CH6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 7 enable set register. Writing '0' has no effect
    -                CH7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 8 enable set register. Writing '0' has no effect
    -                CH8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 9 enable set register. Writing '0' has no effect
    -                CH9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 10 enable set register. Writing '0' has no effect
    -                CH10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 11 enable set register. Writing '0' has no effect
    -                CH11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 12 enable set register. Writing '0' has no effect
    -                CH12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 13 enable set register. Writing '0' has no effect
    -                CH13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 14 enable set register. Writing '0' has no effect
    -                CH14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 15 enable set register. Writing '0' has no effect
    -                CH15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 16 enable set register. Writing '0' has no effect
    -                CH16: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 17 enable set register. Writing '0' has no effect
    -                CH17: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 18 enable set register. Writing '0' has no effect
    -                CH18: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 19 enable set register. Writing '0' has no effect
    -                CH19: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 20 enable set register. Writing '0' has no effect
    -                CH20: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 21 enable set register. Writing '0' has no effect
    -                CH21: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 22 enable set register. Writing '0' has no effect
    -                CH22: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 23 enable set register. Writing '0' has no effect
    -                CH23: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 24 enable set register. Writing '0' has no effect
    -                CH24: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 25 enable set register. Writing '0' has no effect
    -                CH25: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 26 enable set register. Writing '0' has no effect
    -                CH26: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 27 enable set register. Writing '0' has no effect
    -                CH27: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 28 enable set register. Writing '0' has no effect
    -                CH28: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 29 enable set register. Writing '0' has no effect
    -                CH29: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 30 enable set register. Writing '0' has no effect
    -                CH30: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 31 enable set register. Writing '0' has no effect
    -                CH31: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -            }),
    -            ///  Channel enable clear register
    -            CHENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Channel 0 enable clear register. Writing '0' has no effect
    -                CH0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 1 enable clear register. Writing '0' has no effect
    -                CH1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 2 enable clear register. Writing '0' has no effect
    -                CH2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 3 enable clear register. Writing '0' has no effect
    -                CH3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 4 enable clear register. Writing '0' has no effect
    -                CH4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 5 enable clear register. Writing '0' has no effect
    -                CH5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 6 enable clear register. Writing '0' has no effect
    -                CH6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 7 enable clear register. Writing '0' has no effect
    -                CH7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 8 enable clear register. Writing '0' has no effect
    -                CH8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 9 enable clear register. Writing '0' has no effect
    -                CH9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 10 enable clear register. Writing '0' has no effect
    -                CH10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 11 enable clear register. Writing '0' has no effect
    -                CH11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 12 enable clear register. Writing '0' has no effect
    -                CH12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 13 enable clear register. Writing '0' has no effect
    -                CH13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 14 enable clear register. Writing '0' has no effect
    -                CH14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 15 enable clear register. Writing '0' has no effect
    -                CH15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 16 enable clear register. Writing '0' has no effect
    -                CH16: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 17 enable clear register. Writing '0' has no effect
    -                CH17: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 18 enable clear register. Writing '0' has no effect
    -                CH18: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 19 enable clear register. Writing '0' has no effect
    -                CH19: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 20 enable clear register. Writing '0' has no effect
    -                CH20: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 21 enable clear register. Writing '0' has no effect
    -                CH21: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 22 enable clear register. Writing '0' has no effect
    -                CH22: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 23 enable clear register. Writing '0' has no effect
    -                CH23: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 24 enable clear register. Writing '0' has no effect
    -                CH24: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 25 enable clear register. Writing '0' has no effect
    -                CH25: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 26 enable clear register. Writing '0' has no effect
    -                CH26: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 27 enable clear register. Writing '0' has no effect
    -                CH27: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 28 enable clear register. Writing '0' has no effect
    -                CH28: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 29 enable clear register. Writing '0' has no effect
    -                CH29: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 30 enable clear register. Writing '0' has no effect
    -                CH30: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 31 enable clear register. Writing '0' has no effect
    -                CH31: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -            }),
    -            reserved2048: [756]u8,
    -            ///  Description collection[0]: Channel group 0
    -            CHG: [6]mmio.Mmio(packed struct(u32) {
    -                ///  Include or exclude channel 0
    -                CH0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 1
    -                CH1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 2
    -                CH2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 3
    -                CH3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 4
    -                CH4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 5
    -                CH5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 6
    -                CH6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 7
    -                CH7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 8
    -                CH8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 9
    -                CH9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 10
    -                CH10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 11
    -                CH11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 12
    -                CH12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 13
    -                CH13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 14
    -                CH14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 15
    -                CH15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 16
    -                CH16: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 17
    -                CH17: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 18
    -                CH18: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 19
    -                CH19: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 20
    -                CH20: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 21
    -                CH21: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 22
    -                CH22: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 23
    -                CH23: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 24
    -                CH24: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 25
    -                CH25: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 26
    -                CH26: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 27
    -                CH27: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 28
    -                CH28: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 29
    -                CH29: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 30
    -                CH30: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 31
    -                CH31: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -            }),
    -        };
    -
    -        ///  NFC-A compatible radio
    -        pub const NFCT = extern struct {
    -            ///  Activate NFC peripheral for incoming and outgoing frames, change state to activated
    -            TASKS_ACTIVATE: u32,
    -            ///  Disable NFC peripheral
    -            TASKS_DISABLE: u32,
    -            ///  Enable NFC sense field mode, change state to sense mode
    -            TASKS_SENSE: u32,
    -            ///  Start transmission of a outgoing frame, change state to transmit
    -            TASKS_STARTTX: u32,
    -            reserved28: [12]u8,
    -            ///  Initializes the EasyDMA for receive.
    -            TASKS_ENABLERXDATA: u32,
    -            reserved36: [4]u8,
    -            ///  Force state machine to IDLE state
    -            TASKS_GOIDLE: u32,
    -            ///  Force state machine to SLEEP_A state
    -            TASKS_GOSLEEP: u32,
    -            reserved256: [212]u8,
    -            ///  The NFC peripheral is ready to receive and send frames
    -            EVENTS_READY: u32,
    -            ///  Remote NFC field detected
    -            EVENTS_FIELDDETECTED: u32,
    -            ///  Remote NFC field lost
    -            EVENTS_FIELDLOST: u32,
    -            ///  Marks the start of the first symbol of a transmitted frame
    -            EVENTS_TXFRAMESTART: u32,
    -            ///  Marks the end of the last transmitted on-air symbol of a frame
    -            EVENTS_TXFRAMEEND: u32,
    -            ///  Marks the end of the first symbol of a received frame
    -            EVENTS_RXFRAMESTART: u32,
    -            ///  Received data have been checked (CRC, parity) and transferred to RAM, and EasyDMA has ended accessing the RX buffer
    -            EVENTS_RXFRAMEEND: u32,
    -            ///  NFC error reported. The ERRORSTATUS register contains details on the source of the error.
    -            EVENTS_ERROR: u32,
    -            reserved296: [8]u8,
    -            ///  NFC RX frame error reported. The FRAMESTATUS.RX register contains details on the source of the error.
    -            EVENTS_RXERROR: u32,
    -            ///  RX buffer (as defined by PACKETPTR and MAXLEN) in Data RAM full.
    -            EVENTS_ENDRX: u32,
    -            ///  Transmission of data in RAM has ended, and EasyDMA has ended accessing the TX buffer
    -            EVENTS_ENDTX: u32,
    -            reserved312: [4]u8,
    -            ///  Auto collision resolution process has started
    -            EVENTS_AUTOCOLRESSTARTED: u32,
    -            reserved328: [12]u8,
    -            ///  NFC Auto collision resolution error reported.
    -            EVENTS_COLLISION: u32,
    -            ///  NFC Auto collision resolution successfully completed
    -            EVENTS_SELECTED: u32,
    -            ///  EasyDMA is ready to receive or send frames.
    -            EVENTS_STARTED: u32,
    -            reserved512: [172]u8,
    -            ///  Shortcut register
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                ///  Shortcut between FIELDDETECTED event and ACTIVATE task
    -                FIELDDETECTED_ACTIVATE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between FIELDLOST event and SENSE task
    -                FIELDLOST_SENSE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            reserved768: [252]u8,
    -            ///  Enable or disable interrupt
    -            INTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable interrupt for READY event
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for FIELDDETECTED event
    -                FIELDDETECTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for FIELDLOST event
    -                FIELDLOST: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for TXFRAMESTART event
    -                TXFRAMESTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for TXFRAMEEND event
    -                TXFRAMEEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for RXFRAMESTART event
    -                RXFRAMESTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for RXFRAMEEND event
    -                RXFRAMEEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for ERROR event
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved10: u2,
    -                ///  Enable or disable interrupt for RXERROR event
    -                RXERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for ENDRX event
    -                ENDRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for ENDTX event
    -                ENDTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved14: u1,
    -                ///  Enable or disable interrupt for AUTOCOLRESSTARTED event
    -                AUTOCOLRESSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved18: u3,
    -                ///  Enable or disable interrupt for COLLISION event
    -                COLLISION: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for SELECTED event
    -                SELECTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for STARTED event
    -                STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u11,
    -            }),
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Enable interrupt for READY event
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for FIELDDETECTED event
    -                FIELDDETECTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for FIELDLOST event
    -                FIELDLOST: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for TXFRAMESTART event
    -                TXFRAMESTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for TXFRAMEEND event
    -                TXFRAMEEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for RXFRAMESTART event
    -                RXFRAMESTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for RXFRAMEEND event
    -                RXFRAMEEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for ERROR event
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved10: u2,
    -                ///  Write '1' to Enable interrupt for RXERROR event
    -                RXERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for ENDRX event
    -                ENDRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for ENDTX event
    -                ENDTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved14: u1,
    -                ///  Write '1' to Enable interrupt for AUTOCOLRESSTARTED event
    -                AUTOCOLRESSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved18: u3,
    -                ///  Write '1' to Enable interrupt for COLLISION event
    -                COLLISION: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for SELECTED event
    -                SELECTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for STARTED event
    -                STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u11,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Disable interrupt for READY event
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for FIELDDETECTED event
    -                FIELDDETECTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for FIELDLOST event
    -                FIELDLOST: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for TXFRAMESTART event
    -                TXFRAMESTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for TXFRAMEEND event
    -                TXFRAMEEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for RXFRAMESTART event
    -                RXFRAMESTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for RXFRAMEEND event
    -                RXFRAMEEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for ERROR event
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved10: u2,
    -                ///  Write '1' to Disable interrupt for RXERROR event
    -                RXERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for ENDRX event
    -                ENDRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for ENDTX event
    -                ENDTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved14: u1,
    -                ///  Write '1' to Disable interrupt for AUTOCOLRESSTARTED event
    -                AUTOCOLRESSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved18: u3,
    -                ///  Write '1' to Disable interrupt for COLLISION event
    -                COLLISION: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for SELECTED event
    -                SELECTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for STARTED event
    -                STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u11,
    -            }),
    -            reserved1028: [248]u8,
    -            ///  NFC Error Status register
    -            ERRORSTATUS: mmio.Mmio(packed struct(u32) {
    -                ///  No STARTTX task triggered before expiration of the time set in FRAMEDELAYMAX
    -                FRAMEDELAYTIMEOUT: u1,
    -                reserved2: u1,
    -                ///  Field level is too high at max load resistance
    -                NFCFIELDTOOSTRONG: u1,
    -                ///  Field level is too low at min load resistance
    -                NFCFIELDTOOWEAK: u1,
    -                padding: u28,
    -            }),
    -            reserved1072: [40]u8,
    -            ///  Current value driven to the NFC Load Control
    -            CURRENTLOADCTRL: mmio.Mmio(packed struct(u32) {
    -                ///  Current value driven to the NFC Load Control
    -                CURRENTLOADCTRL: u6,
    -                padding: u26,
    -            }),
    -            reserved1084: [8]u8,
    -            ///  Indicates the presence or not of a valid field
    -            FIELDPRESENT: mmio.Mmio(packed struct(u32) {
    -                ///  Indicates the presence or not of a valid field. Available only in the activated state.
    -                FIELDPRESENT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  No valid field detected
    -                        NoField = 0x0,
    -                        ///  Valid field detected
    -                        FieldPresent = 0x1,
    -                    },
    -                },
    -                ///  Indicates if the low level has locked to the field
    -                LOCKDETECT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Not locked to field
    -                        NotLocked = 0x0,
    -                        ///  Locked to field
    -                        Locked = 0x1,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            reserved1284: [196]u8,
    -            ///  Minimum frame delay
    -            FRAMEDELAYMIN: mmio.Mmio(packed struct(u32) {
    -                ///  Minimum frame delay in number of 13.56 MHz clocks
    -                FRAMEDELAYMIN: u16,
    -                padding: u16,
    -            }),
    -            ///  Maximum frame delay
    -            FRAMEDELAYMAX: mmio.Mmio(packed struct(u32) {
    -                ///  Maximum frame delay in number of 13.56 MHz clocks
    -                FRAMEDELAYMAX: u16,
    -                padding: u16,
    -            }),
    -            ///  Configuration register for the Frame Delay Timer
    -            FRAMEDELAYMODE: mmio.Mmio(packed struct(u32) {
    -                ///  Configuration register for the Frame Delay Timer
    -                FRAMEDELAYMODE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Transmission is independent of frame timer and will start when the STARTTX task is triggered. No timeout.
    -                        FreeRun = 0x0,
    -                        ///  Frame is transmitted between FRAMEDELAYMIN and FRAMEDELAYMAX
    -                        Window = 0x1,
    -                        ///  Frame is transmitted exactly at FRAMEDELAYMAX
    -                        ExactVal = 0x2,
    -                        ///  Frame is transmitted on a bit grid between FRAMEDELAYMIN and FRAMEDELAYMAX
    -                        WindowGrid = 0x3,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            ///  Packet pointer for TXD and RXD data storage in Data RAM
    -            PACKETPTR: mmio.Mmio(packed struct(u32) {
    -                ///  Packet pointer for TXD and RXD data storage in Data RAM. This address is a byte aligned RAM address.
    -                PTR: u32,
    -            }),
    -            ///  Size of allocated for TXD and RXD data storage buffer in Data RAM
    -            MAXLEN: mmio.Mmio(packed struct(u32) {
    -                ///  Size of allocated for TXD and RXD data storage buffer in Data RAM
    -                MAXLEN: u9,
    -                padding: u23,
    -            }),
    -            reserved1424: [120]u8,
    -            ///  Last NFCID1 part (4, 7 or 10 bytes ID)
    -            NFCID1_LAST: mmio.Mmio(packed struct(u32) {
    -                ///  NFCID1 byte Z (very last byte sent)
    -                NFCID1_Z: u8,
    -                ///  NFCID1 byte Y
    -                NFCID1_Y: u8,
    -                ///  NFCID1 byte X
    -                NFCID1_X: u8,
    -                ///  NFCID1 byte W
    -                NFCID1_W: u8,
    -            }),
    -            ///  Second last NFCID1 part (7 or 10 bytes ID)
    -            NFCID1_2ND_LAST: mmio.Mmio(packed struct(u32) {
    -                ///  NFCID1 byte V
    -                NFCID1_V: u8,
    -                ///  NFCID1 byte U
    -                NFCID1_U: u8,
    -                ///  NFCID1 byte T
    -                NFCID1_T: u8,
    -                padding: u8,
    -            }),
    -            ///  Third last NFCID1 part (10 bytes ID)
    -            NFCID1_3RD_LAST: mmio.Mmio(packed struct(u32) {
    -                ///  NFCID1 byte S
    -                NFCID1_S: u8,
    -                ///  NFCID1 byte R
    -                NFCID1_R: u8,
    -                ///  NFCID1 byte Q
    -                NFCID1_Q: u8,
    -                padding: u8,
    -            }),
    -            reserved1440: [4]u8,
    -            ///  NFC-A SENS_RES auto-response settings
    -            SENSRES: mmio.Mmio(packed struct(u32) {
    -                ///  Bit frame SDD as defined by the b5:b1 of byte 1 in SENS_RES response in the NFC Forum, NFC Digital Protocol Technical Specification
    -                BITFRAMESDD: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        ///  SDD pattern 00000
    -                        SDD00000 = 0x0,
    -                        ///  SDD pattern 00001
    -                        SDD00001 = 0x1,
    -                        ///  SDD pattern 00010
    -                        SDD00010 = 0x2,
    -                        ///  SDD pattern 00100
    -                        SDD00100 = 0x4,
    -                        ///  SDD pattern 01000
    -                        SDD01000 = 0x8,
    -                        ///  SDD pattern 10000
    -                        SDD10000 = 0x10,
    -                        _,
    -                    },
    -                },
    -                ///  Reserved for future use. Shall be 0.
    -                RFU5: u1,
    -                ///  NFCID1 size. This value is used by the Auto collision resolution engine.
    -                NFCIDSIZE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  NFCID1 size: single (4 bytes)
    -                        NFCID1Single = 0x0,
    -                        ///  NFCID1 size: double (7 bytes)
    -                        NFCID1Double = 0x1,
    -                        ///  NFCID1 size: triple (10 bytes)
    -                        NFCID1Triple = 0x2,
    -                        _,
    -                    },
    -                },
    -                ///  Tag platform configuration as defined by the b4:b1 of byte 2 in SENS_RES response in the NFC Forum, NFC Digital Protocol Technical Specification
    -                PLATFCONFIG: u4,
    -                ///  Reserved for future use. Shall be 0.
    -                RFU74: u4,
    -                padding: u16,
    -            }),
    -            ///  NFC-A SEL_RES auto-response settings
    -            SELRES: mmio.Mmio(packed struct(u32) {
    -                ///  Reserved for future use. Shall be 0.
    -                RFU10: u2,
    -                ///  Cascade bit (controlled by hardware, write has no effect)
    -                CASCADE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  NFCID1 complete
    -                        Complete = 0x0,
    -                        ///  NFCID1 not complete
    -                        NotComplete = 0x1,
    -                    },
    -                },
    -                ///  Reserved for future use. Shall be 0.
    -                RFU43: u2,
    -                ///  Protocol as defined by the b7:b6 of SEL_RES response in the NFC Forum, NFC Digital Protocol Technical Specification
    -                PROTOCOL: u2,
    -                ///  Reserved for future use. Shall be 0.
    -                RFU7: u1,
    -                padding: u24,
    -            }),
    -        };
    -
    -        ///  GPIO Tasks and Events
    -        pub const GPIOTE = extern struct {
    -            ///  Description collection[0]: Task for writing to pin specified in CONFIG[0].PSEL. Action on pin is configured in CONFIG[0].POLARITY.
    -            TASKS_OUT: [8]u32,
    -            reserved48: [16]u8,
    -            ///  Description collection[0]: Task for writing to pin specified in CONFIG[0].PSEL. Action on pin is to set it high.
    -            TASKS_SET: [8]u32,
    -            reserved96: [16]u8,
    -            ///  Description collection[0]: Task for writing to pin specified in CONFIG[0].PSEL. Action on pin is to set it low.
    -            TASKS_CLR: [8]u32,
    -            reserved256: [128]u8,
    -            ///  Description collection[0]: Event generated from pin specified in CONFIG[0].PSEL
    -            EVENTS_IN: [8]u32,
    -            reserved380: [92]u8,
    -            ///  Event generated from multiple input GPIO pins with SENSE mechanism enabled
    -            EVENTS_PORT: u32,
    -            reserved772: [388]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Enable interrupt for IN[0] event
    -                IN0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for IN[1] event
    -                IN1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for IN[2] event
    -                IN2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for IN[3] event
    -                IN3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for IN[4] event
    -                IN4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for IN[5] event
    -                IN5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for IN[6] event
    -                IN6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for IN[7] event
    -                IN7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved31: u23,
    -                ///  Write '1' to Enable interrupt for PORT event
    -                PORT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Disable interrupt for IN[0] event
    -                IN0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for IN[1] event
    -                IN1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for IN[2] event
    -                IN2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for IN[3] event
    -                IN3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for IN[4] event
    -                IN4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for IN[5] event
    -                IN5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for IN[6] event
    -                IN6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for IN[7] event
    -                IN7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved31: u23,
    -                ///  Write '1' to Disable interrupt for PORT event
    -                PORT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -            }),
    -            reserved1296: [516]u8,
    -            ///  Description collection[0]: Configuration for OUT[n], SET[n] and CLR[n] tasks and IN[n] event
    -            CONFIG: [8]mmio.Mmio(packed struct(u32) {
    -                ///  Mode
    -                MODE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Disabled. Pin specified by PSEL will not be acquired by the GPIOTE module.
    -                        Disabled = 0x0,
    -                        ///  Event mode
    -                        Event = 0x1,
    -                        ///  Task mode
    -                        Task = 0x3,
    -                        _,
    -                    },
    -                },
    -                reserved8: u6,
    -                ///  GPIO number associated with SET[n], CLR[n] and OUT[n] tasks and IN[n] event
    -                PSEL: u5,
    -                reserved16: u3,
    -                ///  When In task mode: Operation to be performed on output when OUT[n] task is triggered. When In event mode: Operation on input that shall trigger IN[n] event.
    -                POLARITY: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Task mode: No effect on pin from OUT[n] task. Event mode: no IN[n] event generated on pin activity.
    -                        None = 0x0,
    -                        ///  Task mode: Set pin from OUT[n] task. Event mode: Generate IN[n] event when rising edge on pin.
    -                        LoToHi = 0x1,
    -                        ///  Task mode: Clear pin from OUT[n] task. Event mode: Generate IN[n] event when falling edge on pin.
    -                        HiToLo = 0x2,
    -                        ///  Task mode: Toggle pin from OUT[n]. Event mode: Generate IN[n] when any change on pin.
    -                        Toggle = 0x3,
    -                    },
    -                },
    -                reserved20: u2,
    -                ///  When in task mode: Initial value of the output when the GPIOTE channel is configured. When in event mode: No effect.
    -                OUTINIT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Task mode: Initial value of pin before task triggering is low
    -                        Low = 0x0,
    -                        ///  Task mode: Initial value of pin before task triggering is high
    -                        High = 0x1,
    -                    },
    -                },
    -                padding: u11,
    -            }),
    -        };
    -
    -        ///  Analog to Digital Converter
    -        pub const SAADC = extern struct {
    -            ///  Start the ADC and prepare the result buffer in RAM
    -            TASKS_START: u32,
    -            ///  Take one ADC sample, if scan is enabled all channels are sampled
    -            TASKS_SAMPLE: u32,
    -            ///  Stop the ADC and terminate any on-going conversion
    -            TASKS_STOP: u32,
    -            ///  Starts offset auto-calibration
    -            TASKS_CALIBRATEOFFSET: u32,
    -            reserved256: [240]u8,
    -            ///  The ADC has started
    -            EVENTS_STARTED: u32,
    -            ///  The ADC has filled up the Result buffer
    -            EVENTS_END: u32,
    -            ///  A conversion task has been completed. Depending on the mode, multiple conversions might be needed for a result to be transferred to RAM.
    -            EVENTS_DONE: u32,
    -            ///  A result is ready to get transferred to RAM.
    -            EVENTS_RESULTDONE: u32,
    -            ///  Calibration is complete
    -            EVENTS_CALIBRATEDONE: u32,
    -            ///  The ADC has stopped
    -            EVENTS_STOPPED: u32,
    -            reserved768: [488]u8,
    -            ///  Enable or disable interrupt
    -            INTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable interrupt for STARTED event
    -                STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for END event
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for DONE event
    -                DONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for RESULTDONE event
    -                RESULTDONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for CALIBRATEDONE event
    -                CALIBRATEDONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for STOPPED event
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for CH[0].LIMITH event
    -                CH0LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for CH[0].LIMITL event
    -                CH0LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for CH[1].LIMITH event
    -                CH1LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for CH[1].LIMITL event
    -                CH1LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for CH[2].LIMITH event
    -                CH2LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for CH[2].LIMITL event
    -                CH2LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for CH[3].LIMITH event
    -                CH3LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for CH[3].LIMITL event
    -                CH3LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for CH[4].LIMITH event
    -                CH4LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for CH[4].LIMITL event
    -                CH4LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for CH[5].LIMITH event
    -                CH5LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for CH[5].LIMITL event
    -                CH5LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for CH[6].LIMITH event
    -                CH6LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for CH[6].LIMITL event
    -                CH6LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for CH[7].LIMITH event
    -                CH7LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for CH[7].LIMITL event
    -                CH7LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u10,
    -            }),
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Enable interrupt for STARTED event
    -                STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for END event
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for DONE event
    -                DONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for RESULTDONE event
    -                RESULTDONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for CALIBRATEDONE event
    -                CALIBRATEDONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for STOPPED event
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for CH[0].LIMITH event
    -                CH0LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for CH[0].LIMITL event
    -                CH0LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for CH[1].LIMITH event
    -                CH1LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for CH[1].LIMITL event
    -                CH1LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for CH[2].LIMITH event
    -                CH2LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for CH[2].LIMITL event
    -                CH2LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for CH[3].LIMITH event
    -                CH3LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for CH[3].LIMITL event
    -                CH3LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for CH[4].LIMITH event
    -                CH4LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for CH[4].LIMITL event
    -                CH4LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for CH[5].LIMITH event
    -                CH5LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for CH[5].LIMITL event
    -                CH5LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for CH[6].LIMITH event
    -                CH6LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for CH[6].LIMITL event
    -                CH6LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for CH[7].LIMITH event
    -                CH7LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for CH[7].LIMITL event
    -                CH7LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u10,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Disable interrupt for STARTED event
    -                STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for END event
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for DONE event
    -                DONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for RESULTDONE event
    -                RESULTDONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for CALIBRATEDONE event
    -                CALIBRATEDONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for STOPPED event
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for CH[0].LIMITH event
    -                CH0LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for CH[0].LIMITL event
    -                CH0LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for CH[1].LIMITH event
    -                CH1LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for CH[1].LIMITL event
    -                CH1LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for CH[2].LIMITH event
    -                CH2LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for CH[2].LIMITL event
    -                CH2LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for CH[3].LIMITH event
    -                CH3LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for CH[3].LIMITL event
    -                CH3LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for CH[4].LIMITH event
    -                CH4LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for CH[4].LIMITL event
    -                CH4LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for CH[5].LIMITH event
    -                CH5LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for CH[5].LIMITL event
    -                CH5LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for CH[6].LIMITH event
    -                CH6LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for CH[6].LIMITL event
    -                CH6LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for CH[7].LIMITH event
    -                CH7LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for CH[7].LIMITL event
    -                CH7LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u10,
    -            }),
    -            reserved1024: [244]u8,
    -            ///  Status
    -            STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  Status
    -                STATUS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  ADC is ready. No on-going conversion.
    -                        Ready = 0x0,
    -                        ///  ADC is busy. Conversion in progress.
    -                        Busy = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1280: [252]u8,
    -            ///  Enable or disable ADC
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable ADC
    -                ENABLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable ADC
    -                        Disabled = 0x0,
    -                        ///  Enable ADC
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1520: [236]u8,
    -            ///  Resolution configuration
    -            RESOLUTION: mmio.Mmio(packed struct(u32) {
    -                ///  Set the resolution
    -                VAL: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        ///  8 bit
    -                        @"8bit" = 0x0,
    -                        ///  10 bit
    -                        @"10bit" = 0x1,
    -                        ///  12 bit
    -                        @"12bit" = 0x2,
    -                        ///  14 bit
    -                        @"14bit" = 0x3,
    -                        _,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            ///  Oversampling configuration. OVERSAMPLE should not be combined with SCAN. The RESOLUTION is applied before averaging, thus for high OVERSAMPLE a higher RESOLUTION should be used.
    -            OVERSAMPLE: mmio.Mmio(packed struct(u32) {
    -                ///  Oversample control
    -                OVERSAMPLE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  Bypass oversampling
    -                        Bypass = 0x0,
    -                        ///  Oversample 2x
    -                        Over2x = 0x1,
    -                        ///  Oversample 4x
    -                        Over4x = 0x2,
    -                        ///  Oversample 8x
    -                        Over8x = 0x3,
    -                        ///  Oversample 16x
    -                        Over16x = 0x4,
    -                        ///  Oversample 32x
    -                        Over32x = 0x5,
    -                        ///  Oversample 64x
    -                        Over64x = 0x6,
    -                        ///  Oversample 128x
    -                        Over128x = 0x7,
    -                        ///  Oversample 256x
    -                        Over256x = 0x8,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            ///  Controls normal or continuous sample rate
    -            SAMPLERATE: mmio.Mmio(packed struct(u32) {
    -                ///  Capture and compare value. Sample rate is 16 MHz/CC
    -                CC: u11,
    -                reserved12: u1,
    -                ///  Select mode for sample rate control
    -                MODE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Rate is controlled from SAMPLE task
    -                        Task = 0x0,
    -                        ///  Rate is controlled from local timer (use CC to control the rate)
    -                        Timers = 0x1,
    -                    },
    -                },
    -                padding: u19,
    -            }),
    -        };
    -
    -        ///  Timer/Counter 0
    -        pub const TIMER0 = extern struct {
    -            ///  Start Timer
    -            TASKS_START: u32,
    -            ///  Stop Timer
    -            TASKS_STOP: u32,
    -            ///  Increment Timer (Counter mode only)
    -            TASKS_COUNT: u32,
    -            ///  Clear time
    -            TASKS_CLEAR: u32,
    -            ///  Deprecated register - Shut down timer
    -            TASKS_SHUTDOWN: u32,
    -            reserved64: [44]u8,
    -            ///  Description collection[0]: Capture Timer value to CC[0] register
    -            TASKS_CAPTURE: [6]u32,
    -            reserved320: [232]u8,
    -            ///  Description collection[0]: Compare event on CC[0] match
    -            EVENTS_COMPARE: [6]u32,
    -            reserved512: [168]u8,
    -            ///  Shortcut register
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                ///  Shortcut between COMPARE[0] event and CLEAR task
    -                COMPARE0_CLEAR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between COMPARE[1] event and CLEAR task
    -                COMPARE1_CLEAR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between COMPARE[2] event and CLEAR task
    -                COMPARE2_CLEAR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between COMPARE[3] event and CLEAR task
    -                COMPARE3_CLEAR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between COMPARE[4] event and CLEAR task
    -                COMPARE4_CLEAR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between COMPARE[5] event and CLEAR task
    -                COMPARE5_CLEAR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved8: u2,
    -                ///  Shortcut between COMPARE[0] event and STOP task
    -                COMPARE0_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between COMPARE[1] event and STOP task
    -                COMPARE1_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between COMPARE[2] event and STOP task
    -                COMPARE2_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between COMPARE[3] event and STOP task
    -                COMPARE3_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between COMPARE[4] event and STOP task
    -                COMPARE4_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between COMPARE[5] event and STOP task
    -                COMPARE5_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u18,
    -            }),
    -            reserved772: [256]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                reserved16: u16,
    -                ///  Write '1' to Enable interrupt for COMPARE[0] event
    -                COMPARE0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for COMPARE[1] event
    -                COMPARE1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for COMPARE[2] event
    -                COMPARE2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for COMPARE[3] event
    -                COMPARE3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for COMPARE[4] event
    -                COMPARE4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for COMPARE[5] event
    -                COMPARE5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u10,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                reserved16: u16,
    -                ///  Write '1' to Disable interrupt for COMPARE[0] event
    -                COMPARE0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for COMPARE[1] event
    -                COMPARE1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for COMPARE[2] event
    -                COMPARE2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for COMPARE[3] event
    -                COMPARE3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for COMPARE[4] event
    -                COMPARE4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for COMPARE[5] event
    -                COMPARE5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u10,
    -            }),
    -            reserved1284: [504]u8,
    -            ///  Timer mode selection
    -            MODE: mmio.Mmio(packed struct(u32) {
    -                ///  Timer mode
    -                MODE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Select Timer mode
    -                        Timer = 0x0,
    -                        ///  Deprecated enumerator - Select Counter mode
    -                        Counter = 0x1,
    -                        ///  Select Low Power Counter mode
    -                        LowPowerCounter = 0x2,
    -                        _,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            ///  Configure the number of bits used by the TIMER
    -            BITMODE: mmio.Mmio(packed struct(u32) {
    -                ///  Timer bit width
    -                BITMODE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  16 bit timer bit width
    -                        @"16Bit" = 0x0,
    -                        ///  8 bit timer bit width
    -                        @"08Bit" = 0x1,
    -                        ///  24 bit timer bit width
    -                        @"24Bit" = 0x2,
    -                        ///  32 bit timer bit width
    -                        @"32Bit" = 0x3,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            reserved1296: [4]u8,
    -            ///  Timer prescaler register
    -            PRESCALER: mmio.Mmio(packed struct(u32) {
    -                ///  Prescaler value
    -                PRESCALER: u4,
    -                padding: u28,
    -            }),
    -            reserved1344: [44]u8,
    -            ///  Description collection[0]: Capture/Compare register 0
    -            CC: [6]mmio.Mmio(packed struct(u32) {
    -                ///  Capture/Compare value
    -                CC: u32,
    -            }),
    -        };
    -
    -        ///  Non Volatile Memory Controller
    -        pub const NVMC = extern struct {
    -            reserved1024: [1024]u8,
    -            ///  Ready flag
    -            READY: mmio.Mmio(packed struct(u32) {
    -                ///  NVMC is ready or busy
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  NVMC is busy (on-going write or erase operation)
    -                        Busy = 0x0,
    -                        ///  NVMC is ready
    -                        Ready = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1284: [256]u8,
    -            ///  Configuration register
    -            CONFIG: mmio.Mmio(packed struct(u32) {
    -                ///  Program memory access mode. It is strongly recommended to only activate erase and write modes when they are actively used. Enabling write or erase will invalidate the cache and keep it invalidated.
    -                WEN: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Read only access
    -                        Ren = 0x0,
    -                        ///  Write Enabled
    -                        Wen = 0x1,
    -                        ///  Erase enabled
    -                        Een = 0x2,
    -                        _,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            ///  Register for erasing a page in Code area
    -            ERASEPAGE: mmio.Mmio(packed struct(u32) {
    -                ///  Register for starting erase of a page in Code area
    -                ERASEPAGE: u32,
    -            }),
    -            ///  Register for erasing all non-volatile user memory
    -            ERASEALL: mmio.Mmio(packed struct(u32) {
    -                ///  Erase all non-volatile memory including UICR registers. Note that code erase has to be enabled by CONFIG.EEN before the UICR can be erased.
    -                ERASEALL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  No operation
    -                        NoOperation = 0x0,
    -                        ///  Start chip erase
    -                        Erase = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Deprecated register - Register for erasing a page in Code area. Equivalent to ERASEPAGE.
    -            ERASEPCR0: mmio.Mmio(packed struct(u32) {
    -                ///  Register for starting erase of a page in Code area. Equivalent to ERASEPAGE.
    -                ERASEPCR0: u32,
    -            }),
    -            ///  Register for erasing User Information Configuration Registers
    -            ERASEUICR: mmio.Mmio(packed struct(u32) {
    -                ///  Register starting erase of all User Information Configuration Registers. Note that code erase has to be enabled by CONFIG.EEN before the UICR can be erased.
    -                ERASEUICR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  No operation
    -                        NoOperation = 0x0,
    -                        ///  Start erase of UICR
    -                        Erase = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1344: [40]u8,
    -            ///  I-Code cache configuration register.
    -            ICACHECNF: mmio.Mmio(packed struct(u32) {
    -                ///  Cache enable
    -                CACHEEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable cache. Invalidates all cache entries.
    -                        Disabled = 0x0,
    -                        ///  Enable cache
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved8: u7,
    -                ///  Cache profiling enable
    -                CACHEPROFEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable cache profiling
    -                        Disabled = 0x0,
    -                        ///  Enable cache profiling
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u23,
    -            }),
    -            reserved1352: [4]u8,
    -            ///  I-Code cache hit counter.
    -            IHIT: mmio.Mmio(packed struct(u32) {
    -                ///  Number of cache hits
    -                HITS: u32,
    -            }),
    -            ///  I-Code cache miss counter.
    -            IMISS: mmio.Mmio(packed struct(u32) {
    -                ///  Number of cache misses
    -                MISSES: u32,
    -            }),
    -        };
    -
    -        ///  Pulse Density Modulation (Digital Microphone) Interface
    -        pub const PDM = extern struct {
    -            ///  Starts continuous PDM transfer
    -            TASKS_START: u32,
    -            ///  Stops PDM transfer
    -            TASKS_STOP: u32,
    -            reserved256: [248]u8,
    -            ///  PDM transfer has started
    -            EVENTS_STARTED: u32,
    -            ///  PDM transfer has finished
    -            EVENTS_STOPPED: u32,
    -            ///  The PDM has written the last sample specified by SAMPLE.MAXCNT (or the last sample after a STOP task has been received) to Data RAM
    -            EVENTS_END: u32,
    -            reserved768: [500]u8,
    -            ///  Enable or disable interrupt
    -            INTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable interrupt for STARTED event
    -                STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for STOPPED event
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for END event
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Enable interrupt for STARTED event
    -                STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for STOPPED event
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for END event
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Disable interrupt for STARTED event
    -                STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for STOPPED event
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for END event
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            reserved1280: [500]u8,
    -            ///  PDM module enable register
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable PDM module
    -                ENABLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  PDM clock generator control
    -            PDMCLKCTRL: mmio.Mmio(packed struct(u32) {
    -                ///  PDM_CLK frequency
    -                FREQ: packed union {
    -                    raw: u32,
    -                    value: enum(u32) {
    -                        ///  PDM_CLK = 32 MHz / 32 = 1.000 MHz
    -                        @"1000K" = 0x8000000,
    -                        ///  PDM_CLK = 32 MHz / 31 = 1.032 MHz
    -                        Default = 0x8400000,
    -                        ///  PDM_CLK = 32 MHz / 30 = 1.067 MHz
    -                        @"1067K" = 0x8800000,
    -                        _,
    -                    },
    -                },
    -            }),
    -            ///  Defines the routing of the connected PDM microphones' signals
    -            MODE: mmio.Mmio(packed struct(u32) {
    -                ///  Mono or stereo operation
    -                OPERATION: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Sample and store one pair (Left + Right) of 16bit samples per RAM word R=[31:16]; L=[15:0]
    -                        Stereo = 0x0,
    -                        ///  Sample and store two successive Left samples (16 bit each) per RAM word L1=[31:16]; L0=[15:0]
    -                        Mono = 0x1,
    -                    },
    -                },
    -                ///  Defines on which PDM_CLK edge Left (or mono) is sampled
    -                EDGE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Left (or mono) is sampled on falling edge of PDM_CLK
    -                        LeftFalling = 0x0,
    -                        ///  Left (or mono) is sampled on rising edge of PDM_CLK
    -                        LeftRising = 0x1,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            reserved1304: [12]u8,
    -            ///  Left output gain adjustment
    -            GAINL: mmio.Mmio(packed struct(u32) {
    -                ///  Left output gain adjustment, in 0.5 dB steps, around the default module gain (see electrical parameters) 0x00 -20 dB gain adjust 0x01 -19.5 dB gain adjust (...) 0x27 -0.5 dB gain adjust 0x28 0 dB gain adjust 0x29 +0.5 dB gain adjust (...) 0x4F +19.5 dB gain adjust 0x50 +20 dB gain adjust
    -                GAINL: packed union {
    -                    raw: u7,
    -                    value: enum(u7) {
    -                        ///  -20dB gain adjustment (minimum)
    -                        MinGain = 0x0,
    -                        ///  0dB gain adjustment ('2500 RMS' requirement)
    -                        DefaultGain = 0x28,
    -                        ///  +20dB gain adjustment (maximum)
    -                        MaxGain = 0x50,
    -                        _,
    -                    },
    -                },
    -                padding: u25,
    -            }),
    -            ///  Right output gain adjustment
    -            GAINR: mmio.Mmio(packed struct(u32) {
    -                ///  Right output gain adjustment, in 0.5 dB steps, around the default module gain (see electrical parameters)
    -                GAINR: packed union {
    -                    raw: u8,
    -                    value: enum(u8) {
    -                        ///  -20dB gain adjustment (minimum)
    -                        MinGain = 0x0,
    -                        ///  0dB gain adjustment ('2500 RMS' requirement)
    -                        DefaultGain = 0x28,
    -                        ///  +20dB gain adjustment (maximum)
    -                        MaxGain = 0x50,
    -                        _,
    -                    },
    -                },
    -                padding: u24,
    -            }),
    -        };
    -
    -        ///  Real time counter 0
    -        pub const RTC0 = extern struct {
    -            ///  Start RTC COUNTER
    -            TASKS_START: u32,
    -            ///  Stop RTC COUNTER
    -            TASKS_STOP: u32,
    -            ///  Clear RTC COUNTER
    -            TASKS_CLEAR: u32,
    -            ///  Set COUNTER to 0xFFFFF0
    -            TASKS_TRIGOVRFLW: u32,
    -            reserved256: [240]u8,
    -            ///  Event on COUNTER increment
    -            EVENTS_TICK: u32,
    -            ///  Event on COUNTER overflow
    -            EVENTS_OVRFLW: u32,
    -            reserved320: [56]u8,
    -            ///  Description collection[0]: Compare event on CC[0] match
    -            EVENTS_COMPARE: [4]u32,
    -            reserved772: [436]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Enable interrupt for TICK event
    -                TICK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for OVRFLW event
    -                OVRFLW: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved16: u14,
    -                ///  Write '1' to Enable interrupt for COMPARE[0] event
    -                COMPARE0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for COMPARE[1] event
    -                COMPARE1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for COMPARE[2] event
    -                COMPARE2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for COMPARE[3] event
    -                COMPARE3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u12,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Disable interrupt for TICK event
    -                TICK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for OVRFLW event
    -                OVRFLW: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved16: u14,
    -                ///  Write '1' to Disable interrupt for COMPARE[0] event
    -                COMPARE0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for COMPARE[1] event
    -                COMPARE1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for COMPARE[2] event
    -                COMPARE2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for COMPARE[3] event
    -                COMPARE3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u12,
    -            }),
    -            reserved832: [52]u8,
    -            ///  Enable or disable event routing
    -            EVTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable event routing for TICK event
    -                TICK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable event routing for OVRFLW event
    -                OVRFLW: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved16: u14,
    -                ///  Enable or disable event routing for COMPARE[0] event
    -                COMPARE0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable event routing for COMPARE[1] event
    -                COMPARE1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable event routing for COMPARE[2] event
    -                COMPARE2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable event routing for COMPARE[3] event
    -                COMPARE3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u12,
    -            }),
    -            ///  Enable event routing
    -            EVTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Enable event routing for TICK event
    -                TICK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable event routing for OVRFLW event
    -                OVRFLW: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved16: u14,
    -                ///  Write '1' to Enable event routing for COMPARE[0] event
    -                COMPARE0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable event routing for COMPARE[1] event
    -                COMPARE1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable event routing for COMPARE[2] event
    -                COMPARE2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable event routing for COMPARE[3] event
    -                COMPARE3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u12,
    -            }),
    -            ///  Disable event routing
    -            EVTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Disable event routing for TICK event
    -                TICK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable event routing for OVRFLW event
    -                OVRFLW: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved16: u14,
    -                ///  Write '1' to Disable event routing for COMPARE[0] event
    -                COMPARE0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable event routing for COMPARE[1] event
    -                COMPARE1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable event routing for COMPARE[2] event
    -                COMPARE2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable event routing for COMPARE[3] event
    -                COMPARE3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u12,
    -            }),
    -            reserved1284: [440]u8,
    -            ///  Current COUNTER value
    -            COUNTER: mmio.Mmio(packed struct(u32) {
    -                ///  Counter value
    -                COUNTER: u24,
    -                padding: u8,
    -            }),
    -            ///  12 bit prescaler for COUNTER frequency (32768/(PRESCALER+1)).Must be written when RTC is stopped
    -            PRESCALER: mmio.Mmio(packed struct(u32) {
    -                ///  Prescaler value
    -                PRESCALER: u12,
    -                padding: u20,
    -            }),
    -            reserved1344: [52]u8,
    -            ///  Description collection[0]: Compare register 0
    -            CC: [4]mmio.Mmio(packed struct(u32) {
    -                ///  Compare value
    -                COMPARE: u24,
    -                padding: u8,
    -            }),
    -        };
    -
    -        ///  Temperature Sensor
    -        pub const TEMP = extern struct {
    -            ///  Start temperature measurement
    -            TASKS_START: u32,
    -            ///  Stop temperature measurement
    -            TASKS_STOP: u32,
    -            reserved256: [248]u8,
    -            ///  Temperature measurement complete, data ready
    -            EVENTS_DATARDY: u32,
    -            reserved772: [512]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Enable interrupt for DATARDY event
    -                DATARDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Disable interrupt for DATARDY event
    -                DATARDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1288: [508]u8,
    -            ///  Temperature in degC (0.25deg steps)
    -            TEMP: mmio.Mmio(packed struct(u32) {
    -                ///  Temperature in degC (0.25deg steps)
    -                TEMP: u32,
    -            }),
    -            reserved1312: [20]u8,
    -            ///  Slope of 1st piece wise linear function
    -            A0: mmio.Mmio(packed struct(u32) {
    -                ///  Slope of 1st piece wise linear function
    -                A0: u12,
    -                padding: u20,
    -            }),
    -            ///  Slope of 2nd piece wise linear function
    -            A1: mmio.Mmio(packed struct(u32) {
    -                ///  Slope of 2nd piece wise linear function
    -                A1: u12,
    -                padding: u20,
    -            }),
    -            ///  Slope of 3rd piece wise linear function
    -            A2: mmio.Mmio(packed struct(u32) {
    -                ///  Slope of 3rd piece wise linear function
    -                A2: u12,
    -                padding: u20,
    -            }),
    -            ///  Slope of 4th piece wise linear function
    -            A3: mmio.Mmio(packed struct(u32) {
    -                ///  Slope of 4th piece wise linear function
    -                A3: u12,
    -                padding: u20,
    -            }),
    -            ///  Slope of 5th piece wise linear function
    -            A4: mmio.Mmio(packed struct(u32) {
    -                ///  Slope of 5th piece wise linear function
    -                A4: u12,
    -                padding: u20,
    -            }),
    -            ///  Slope of 6th piece wise linear function
    -            A5: mmio.Mmio(packed struct(u32) {
    -                ///  Slope of 6th piece wise linear function
    -                A5: u12,
    -                padding: u20,
    -            }),
    -            reserved1344: [8]u8,
    -            ///  y-intercept of 1st piece wise linear function
    -            B0: mmio.Mmio(packed struct(u32) {
    -                ///  y-intercept of 1st piece wise linear function
    -                B0: u14,
    -                padding: u18,
    -            }),
    -            ///  y-intercept of 2nd piece wise linear function
    -            B1: mmio.Mmio(packed struct(u32) {
    -                ///  y-intercept of 2nd piece wise linear function
    -                B1: u14,
    -                padding: u18,
    -            }),
    -            ///  y-intercept of 3rd piece wise linear function
    -            B2: mmio.Mmio(packed struct(u32) {
    -                ///  y-intercept of 3rd piece wise linear function
    -                B2: u14,
    -                padding: u18,
    -            }),
    -            ///  y-intercept of 4th piece wise linear function
    -            B3: mmio.Mmio(packed struct(u32) {
    -                ///  y-intercept of 4th piece wise linear function
    -                B3: u14,
    -                padding: u18,
    -            }),
    -            ///  y-intercept of 5th piece wise linear function
    -            B4: mmio.Mmio(packed struct(u32) {
    -                ///  y-intercept of 5th piece wise linear function
    -                B4: u14,
    -                padding: u18,
    -            }),
    -            ///  y-intercept of 6th piece wise linear function
    -            B5: mmio.Mmio(packed struct(u32) {
    -                ///  y-intercept of 6th piece wise linear function
    -                B5: u14,
    -                padding: u18,
    -            }),
    -            reserved1376: [8]u8,
    -            ///  End point of 1st piece wise linear function
    -            T0: mmio.Mmio(packed struct(u32) {
    -                ///  End point of 1st piece wise linear function
    -                T0: u8,
    -                padding: u24,
    -            }),
    -            ///  End point of 2nd piece wise linear function
    -            T1: mmio.Mmio(packed struct(u32) {
    -                ///  End point of 2nd piece wise linear function
    -                T1: u8,
    -                padding: u24,
    -            }),
    -            ///  End point of 3rd piece wise linear function
    -            T2: mmio.Mmio(packed struct(u32) {
    -                ///  End point of 3rd piece wise linear function
    -                T2: u8,
    -                padding: u24,
    -            }),
    -            ///  End point of 4th piece wise linear function
    -            T3: mmio.Mmio(packed struct(u32) {
    -                ///  End point of 4th piece wise linear function
    -                T3: u8,
    -                padding: u24,
    -            }),
    -            ///  End point of 5th piece wise linear function
    -            T4: mmio.Mmio(packed struct(u32) {
    -                ///  End point of 5th piece wise linear function
    -                T4: u8,
    -                padding: u24,
    -            }),
    -        };
    -
    -        ///  Random Number Generator
    -        pub const RNG = extern struct {
    -            ///  Task starting the random number generator
    -            TASKS_START: u32,
    -            ///  Task stopping the random number generator
    -            TASKS_STOP: u32,
    -            reserved256: [248]u8,
    -            ///  Event being generated for every new random number written to the VALUE register
    -            EVENTS_VALRDY: u32,
    -            reserved512: [252]u8,
    -            ///  Shortcut register
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                ///  Shortcut between VALRDY event and STOP task
    -                VALRDY_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved772: [256]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Enable interrupt for VALRDY event
    -                VALRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Disable interrupt for VALRDY event
    -                VALRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1284: [504]u8,
    -            ///  Configuration register
    -            CONFIG: mmio.Mmio(packed struct(u32) {
    -                ///  Bias correction
    -                DERCEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Output random number
    -            VALUE: mmio.Mmio(packed struct(u32) {
    -                ///  Generated random number
    -                VALUE: u8,
    -                padding: u24,
    -            }),
    -        };
    -
    -        ///  AES ECB Mode Encryption
    -        pub const ECB = extern struct {
    -            ///  Start ECB block encrypt
    -            TASKS_STARTECB: u32,
    -            ///  Abort a possible executing ECB operation
    -            TASKS_STOPECB: u32,
    -            reserved256: [248]u8,
    -            ///  ECB block encrypt complete
    -            EVENTS_ENDECB: u32,
    -            ///  ECB block encrypt aborted because of a STOPECB task or due to an error
    -            EVENTS_ERRORECB: u32,
    -            reserved772: [508]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Enable interrupt for ENDECB event
    -                ENDECB: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for ERRORECB event
    -                ERRORECB: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Disable interrupt for ENDECB event
    -                ENDECB: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for ERRORECB event
    -                ERRORECB: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            reserved1284: [504]u8,
    -            ///  ECB block encrypt memory pointers
    -            ECBDATAPTR: mmio.Mmio(packed struct(u32) {
    -                ///  Pointer to the ECB data structure (see Table 1 ECB data structure overview)
    -                ECBDATAPTR: u32,
    -            }),
    -        };
    -
    -        ///  AES CCM Mode Encryption
    -        pub const CCM = extern struct {
    -            ///  Start generation of key-stream. This operation will stop by itself when completed.
    -            TASKS_KSGEN: u32,
    -            ///  Start encryption/decryption. This operation will stop by itself when completed.
    -            TASKS_CRYPT: u32,
    -            ///  Stop encryption/decryption
    -            TASKS_STOP: u32,
    -            reserved256: [244]u8,
    -            ///  Key-stream generation complete
    -            EVENTS_ENDKSGEN: u32,
    -            ///  Encrypt/decrypt complete
    -            EVENTS_ENDCRYPT: u32,
    -            ///  CCM error event
    -            EVENTS_ERROR: u32,
    -            reserved512: [244]u8,
    -            ///  Shortcut register
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                ///  Shortcut between ENDKSGEN event and CRYPT task
    -                ENDKSGEN_CRYPT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved772: [256]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Enable interrupt for ENDKSGEN event
    -                ENDKSGEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for ENDCRYPT event
    -                ENDCRYPT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for ERROR event
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Disable interrupt for ENDKSGEN event
    -                ENDKSGEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for ENDCRYPT event
    -                ENDCRYPT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for ERROR event
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            reserved1024: [244]u8,
    -            ///  MIC check result
    -            MICSTATUS: mmio.Mmio(packed struct(u32) {
    -                ///  The result of the MIC check performed during the previous decryption operation
    -                MICSTATUS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  MIC check failed
    -                        CheckFailed = 0x0,
    -                        ///  MIC check passed
    -                        CheckPassed = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1280: [252]u8,
    -            ///  Enable
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable CCM
    -                ENABLE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x2,
    -                        _,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            ///  Operation mode
    -            MODE: mmio.Mmio(packed struct(u32) {
    -                ///  The mode of operation to be used
    -                MODE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  AES CCM packet encryption mode
    -                        Encryption = 0x0,
    -                        ///  AES CCM packet decryption mode
    -                        Decryption = 0x1,
    -                    },
    -                },
    -                reserved16: u15,
    -                ///  Data rate that the CCM shall run in synch with
    -                DATARATE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  In synch with 1 Mbit data rate
    -                        @"1Mbit" = 0x0,
    -                        ///  In synch with 2 Mbit data rate
    -                        @"2Mbit" = 0x1,
    -                    },
    -                },
    -                reserved24: u7,
    -                ///  Packet length configuration
    -                LENGTH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Default length. Effective length of LENGTH field is 5-bit
    -                        Default = 0x0,
    -                        ///  Extended length. Effective length of LENGTH field is 8-bit
    -                        Extended = 0x1,
    -                    },
    -                },
    -                padding: u7,
    -            }),
    -            ///  Pointer to data structure holding AES key and NONCE vector
    -            CNFPTR: mmio.Mmio(packed struct(u32) {
    -                ///  Pointer to the data structure holding the AES key and the CCM NONCE vector (see Table 1 CCM data structure overview)
    -                CNFPTR: u32,
    -            }),
    -            ///  Input pointer
    -            INPTR: mmio.Mmio(packed struct(u32) {
    -                ///  Input pointer
    -                INPTR: u32,
    -            }),
    -            ///  Output pointer
    -            OUTPTR: mmio.Mmio(packed struct(u32) {
    -                ///  Output pointer
    -                OUTPTR: u32,
    -            }),
    -            ///  Pointer to data area used for temporary storage
    -            SCRATCHPTR: mmio.Mmio(packed struct(u32) {
    -                ///  Pointer to a scratch data area used for temporary storage during key-stream generation, MIC generation and encryption/decryption.
    -                SCRATCHPTR: u32,
    -            }),
    -        };
    -
    -        ///  Accelerated Address Resolver
    -        pub const AAR = extern struct {
    -            ///  Start resolving addresses based on IRKs specified in the IRK data structure
    -            TASKS_START: u32,
    -            reserved8: [4]u8,
    -            ///  Stop resolving addresses
    -            TASKS_STOP: u32,
    -            reserved256: [244]u8,
    -            ///  Address resolution procedure complete
    -            EVENTS_END: u32,
    -            ///  Address resolved
    -            EVENTS_RESOLVED: u32,
    -            ///  Address not resolved
    -            EVENTS_NOTRESOLVED: u32,
    -            reserved772: [504]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Enable interrupt for END event
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for RESOLVED event
    -                RESOLVED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for NOTRESOLVED event
    -                NOTRESOLVED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Disable interrupt for END event
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for RESOLVED event
    -                RESOLVED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for NOTRESOLVED event
    -                NOTRESOLVED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            reserved1024: [244]u8,
    -            ///  Resolution status
    -            STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  The IRK that was used last time an address was resolved
    -                STATUS: u4,
    -                padding: u28,
    -            }),
    -            reserved1280: [252]u8,
    -            ///  Enable AAR
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable AAR
    -                ENABLE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x3,
    -                        _,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            ///  Number of IRKs
    -            NIRK: mmio.Mmio(packed struct(u32) {
    -                ///  Number of Identity root keys available in the IRK data structure
    -                NIRK: u5,
    -                padding: u27,
    -            }),
    -            ///  Pointer to IRK data structure
    -            IRKPTR: mmio.Mmio(packed struct(u32) {
    -                ///  Pointer to the IRK data structure
    -                IRKPTR: u32,
    -            }),
    -            reserved1296: [4]u8,
    -            ///  Pointer to the resolvable address
    -            ADDRPTR: mmio.Mmio(packed struct(u32) {
    -                ///  Pointer to the resolvable address (6-bytes)
    -                ADDRPTR: u32,
    -            }),
    -            ///  Pointer to data area used for temporary storage
    -            SCRATCHPTR: mmio.Mmio(packed struct(u32) {
    -                ///  Pointer to a scratch data area used for temporary storage during resolution.A space of minimum 3 bytes must be reserved.
    -                SCRATCHPTR: u32,
    -            }),
    -        };
    -
    -        ///  Watchdog Timer
    -        pub const WDT = extern struct {
    -            ///  Start the watchdog
    -            TASKS_START: u32,
    -            reserved256: [252]u8,
    -            ///  Watchdog timeout
    -            EVENTS_TIMEOUT: u32,
    -            reserved772: [512]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Enable interrupt for TIMEOUT event
    -                TIMEOUT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Disable interrupt for TIMEOUT event
    -                TIMEOUT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1024: [244]u8,
    -            ///  Run status
    -            RUNSTATUS: mmio.Mmio(packed struct(u32) {
    -                ///  Indicates whether or not the watchdog is running
    -                RUNSTATUS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Watchdog not running
    -                        NotRunning = 0x0,
    -                        ///  Watchdog is running
    -                        Running = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Request status
    -            REQSTATUS: mmio.Mmio(packed struct(u32) {
    -                ///  Request status for RR[0] register
    -                RR0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RR[0] register is not enabled, or are already requesting reload
    -                        DisabledOrRequested = 0x0,
    -                        ///  RR[0] register is enabled, and are not yet requesting reload
    -                        EnabledAndUnrequested = 0x1,
    -                    },
    -                },
    -                ///  Request status for RR[1] register
    -                RR1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RR[1] register is not enabled, or are already requesting reload
    -                        DisabledOrRequested = 0x0,
    -                        ///  RR[1] register is enabled, and are not yet requesting reload
    -                        EnabledAndUnrequested = 0x1,
    -                    },
    -                },
    -                ///  Request status for RR[2] register
    -                RR2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RR[2] register is not enabled, or are already requesting reload
    -                        DisabledOrRequested = 0x0,
    -                        ///  RR[2] register is enabled, and are not yet requesting reload
    -                        EnabledAndUnrequested = 0x1,
    -                    },
    -                },
    -                ///  Request status for RR[3] register
    -                RR3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RR[3] register is not enabled, or are already requesting reload
    -                        DisabledOrRequested = 0x0,
    -                        ///  RR[3] register is enabled, and are not yet requesting reload
    -                        EnabledAndUnrequested = 0x1,
    -                    },
    -                },
    -                ///  Request status for RR[4] register
    -                RR4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RR[4] register is not enabled, or are already requesting reload
    -                        DisabledOrRequested = 0x0,
    -                        ///  RR[4] register is enabled, and are not yet requesting reload
    -                        EnabledAndUnrequested = 0x1,
    -                    },
    -                },
    -                ///  Request status for RR[5] register
    -                RR5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RR[5] register is not enabled, or are already requesting reload
    -                        DisabledOrRequested = 0x0,
    -                        ///  RR[5] register is enabled, and are not yet requesting reload
    -                        EnabledAndUnrequested = 0x1,
    -                    },
    -                },
    -                ///  Request status for RR[6] register
    -                RR6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RR[6] register is not enabled, or are already requesting reload
    -                        DisabledOrRequested = 0x0,
    -                        ///  RR[6] register is enabled, and are not yet requesting reload
    -                        EnabledAndUnrequested = 0x1,
    -                    },
    -                },
    -                ///  Request status for RR[7] register
    -                RR7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RR[7] register is not enabled, or are already requesting reload
    -                        DisabledOrRequested = 0x0,
    -                        ///  RR[7] register is enabled, and are not yet requesting reload
    -                        EnabledAndUnrequested = 0x1,
    -                    },
    -                },
    -                padding: u24,
    -            }),
    -            reserved1284: [252]u8,
    -            ///  Counter reload value
    -            CRV: mmio.Mmio(packed struct(u32) {
    -                ///  Counter reload value in number of cycles of the 32.768 kHz clock
    -                CRV: u32,
    -            }),
    -            ///  Enable register for reload request registers
    -            RREN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable RR[0] register
    -                RR0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable RR[0] register
    -                        Disabled = 0x0,
    -                        ///  Enable RR[0] register
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable RR[1] register
    -                RR1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable RR[1] register
    -                        Disabled = 0x0,
    -                        ///  Enable RR[1] register
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable RR[2] register
    -                RR2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable RR[2] register
    -                        Disabled = 0x0,
    -                        ///  Enable RR[2] register
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable RR[3] register
    -                RR3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable RR[3] register
    -                        Disabled = 0x0,
    -                        ///  Enable RR[3] register
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable RR[4] register
    -                RR4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable RR[4] register
    -                        Disabled = 0x0,
    -                        ///  Enable RR[4] register
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable RR[5] register
    -                RR5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable RR[5] register
    -                        Disabled = 0x0,
    -                        ///  Enable RR[5] register
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable RR[6] register
    -                RR6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable RR[6] register
    -                        Disabled = 0x0,
    -                        ///  Enable RR[6] register
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable RR[7] register
    -                RR7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable RR[7] register
    -                        Disabled = 0x0,
    -                        ///  Enable RR[7] register
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u24,
    -            }),
    -            ///  Configuration register
    -            CONFIG: mmio.Mmio(packed struct(u32) {
    -                ///  Configure the watchdog to either be paused, or kept running, while the CPU is sleeping
    -                SLEEP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pause watchdog while the CPU is sleeping
    -                        Pause = 0x0,
    -                        ///  Keep the watchdog running while the CPU is sleeping
    -                        Run = 0x1,
    -                    },
    -                },
    -                reserved3: u2,
    -                ///  Configure the watchdog to either be paused, or kept running, while the CPU is halted by the debugger
    -                HALT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pause watchdog while the CPU is halted by the debugger
    -                        Pause = 0x0,
    -                        ///  Keep the watchdog running while the CPU is halted by the debugger
    -                        Run = 0x1,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1536: [240]u8,
    -            ///  Description collection[0]: Reload request 0
    -            RR: [8]mmio.Mmio(packed struct(u32) {
    -                ///  Reload request register
    -                RR: packed union {
    -                    raw: u32,
    -                    value: enum(u32) {
    -                        ///  Value to request a reload of the watchdog timer
    -                        Reload = 0x6e524635,
    -                        _,
    -                    },
    -                },
    -            }),
    -        };
    -
    -        ///  Pulse Width Modulation Unit 0
    -        pub const PWM0 = extern struct {
    -            reserved4: [4]u8,
    -            ///  Stops PWM pulse generation on all channels at the end of current PWM period, and stops sequence playback
    -            TASKS_STOP: u32,
    -            ///  Description collection[0]: Loads the first PWM value on all enabled channels from sequence 0, and starts playing that sequence at the rate defined in SEQ[0]REFRESH and/or DECODER.MODE. Causes PWM generation to start it was not running.
    -            TASKS_SEQSTART: [2]u32,
    -            ///  Steps by one value in the current sequence on all enabled channels if DECODER.MODE=NextStep. Does not cause PWM generation to start it was not running.
    -            TASKS_NEXTSTEP: u32,
    -            reserved260: [240]u8,
    -            ///  Response to STOP task, emitted when PWM pulses are no longer generated
    -            EVENTS_STOPPED: u32,
    -            ///  Description collection[0]: First PWM period started on sequence 0
    -            EVENTS_SEQSTARTED: [2]u32,
    -            ///  Description collection[0]: Emitted at end of every sequence 0, when last value from RAM has been applied to wave counter
    -            EVENTS_SEQEND: [2]u32,
    -            ///  Emitted at the end of each PWM period
    -            EVENTS_PWMPERIODEND: u32,
    -            ///  Concatenated sequences have been played the amount of times defined in LOOP.CNT
    -            EVENTS_LOOPSDONE: u32,
    -            reserved512: [224]u8,
    -            ///  Shortcut register
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                ///  Shortcut between SEQEND[0] event and STOP task
    -                SEQEND0_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between SEQEND[1] event and STOP task
    -                SEQEND1_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between LOOPSDONE event and SEQSTART[0] task
    -                LOOPSDONE_SEQSTART0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between LOOPSDONE event and SEQSTART[1] task
    -                LOOPSDONE_SEQSTART1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between LOOPSDONE event and STOP task
    -                LOOPSDONE_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u27,
    -            }),
    -            reserved768: [252]u8,
    -            ///  Enable or disable interrupt
    -            INTEN: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Enable or disable interrupt for STOPPED event
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for SEQSTARTED[0] event
    -                SEQSTARTED0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for SEQSTARTED[1] event
    -                SEQSTARTED1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for SEQEND[0] event
    -                SEQEND0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for SEQEND[1] event
    -                SEQEND1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for PWMPERIODEND event
    -                PWMPERIODEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for LOOPSDONE event
    -                LOOPSDONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u24,
    -            }),
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to Enable interrupt for STOPPED event
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for SEQSTARTED[0] event
    -                SEQSTARTED0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for SEQSTARTED[1] event
    -                SEQSTARTED1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for SEQEND[0] event
    -                SEQEND0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for SEQEND[1] event
    -                SEQEND1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for PWMPERIODEND event
    -                PWMPERIODEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for LOOPSDONE event
    -                LOOPSDONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u24,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to Disable interrupt for STOPPED event
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for SEQSTARTED[0] event
    -                SEQSTARTED0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for SEQSTARTED[1] event
    -                SEQSTARTED1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for SEQEND[0] event
    -                SEQEND0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for SEQEND[1] event
    -                SEQEND1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for PWMPERIODEND event
    -                PWMPERIODEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for LOOPSDONE event
    -                LOOPSDONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u24,
    -            }),
    -            reserved1280: [500]u8,
    -            ///  PWM module enable register
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable PWM module
    -                ENABLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Selects operating mode of the wave counter
    -            MODE: mmio.Mmio(packed struct(u32) {
    -                ///  Selects up or up and down as wave counter mode
    -                UPDOWN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Up counter - edge aligned PWM duty-cycle
    -                        Up = 0x0,
    -                        ///  Up and down counter - center aligned PWM duty cycle
    -                        UpAndDown = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Value up to which the pulse generator counter counts
    -            COUNTERTOP: mmio.Mmio(packed struct(u32) {
    -                ///  Value up to which the pulse generator counter counts. This register is ignored when DECODER.MODE=WaveForm and only values from RAM will be used.
    -                COUNTERTOP: u15,
    -                padding: u17,
    -            }),
    -            ///  Configuration for PWM_CLK
    -            PRESCALER: mmio.Mmio(packed struct(u32) {
    -                ///  Pre-scaler of PWM_CLK
    -                PRESCALER: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        ///  Divide by 1 (16MHz)
    -                        DIV_1 = 0x0,
    -                        ///  Divide by 2 ( 8MHz)
    -                        DIV_2 = 0x1,
    -                        ///  Divide by 4 ( 4MHz)
    -                        DIV_4 = 0x2,
    -                        ///  Divide by 8 ( 2MHz)
    -                        DIV_8 = 0x3,
    -                        ///  Divide by 16 ( 1MHz)
    -                        DIV_16 = 0x4,
    -                        ///  Divide by 32 ( 500kHz)
    -                        DIV_32 = 0x5,
    -                        ///  Divide by 64 ( 250kHz)
    -                        DIV_64 = 0x6,
    -                        ///  Divide by 128 ( 125kHz)
    -                        DIV_128 = 0x7,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            ///  Configuration of the decoder
    -            DECODER: mmio.Mmio(packed struct(u32) {
    -                ///  How a sequence is read from RAM and spread to the compare register
    -                LOAD: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  1st half word (16-bit) used in all PWM channels 0..3
    -                        Common = 0x0,
    -                        ///  1st half word (16-bit) used in channel 0..1; 2nd word in channel 2..3
    -                        Grouped = 0x1,
    -                        ///  1st half word (16-bit) in ch.0; 2nd in ch.1; ...; 4th in ch.3
    -                        Individual = 0x2,
    -                        ///  1st half word (16-bit) in ch.0; 2nd in ch.1; ...; 4th in COUNTERTOP
    -                        WaveForm = 0x3,
    -                    },
    -                },
    -                reserved8: u6,
    -                ///  Selects source for advancing the active sequence
    -                MODE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  SEQ[n].REFRESH is used to determine loading internal compare registers
    -                        RefreshCount = 0x0,
    -                        ///  NEXTSTEP task causes a new value to be loaded to internal compare registers
    -                        NextStep = 0x1,
    -                    },
    -                },
    -                padding: u23,
    -            }),
    -            ///  Amount of playback of a loop
    -            LOOP: mmio.Mmio(packed struct(u32) {
    -                ///  Amount of playback of pattern cycles
    -                CNT: packed union {
    -                    raw: u16,
    -                    value: enum(u16) {
    -                        ///  Looping disabled (stop at the end of the sequence)
    -                        Disabled = 0x0,
    -                        _,
    -                    },
    -                },
    -                padding: u16,
    -            }),
    -        };
    -
    -        ///  Quadrature Decoder
    -        pub const QDEC = extern struct {
    -            ///  Task starting the quadrature decoder
    -            TASKS_START: u32,
    -            ///  Task stopping the quadrature decoder
    -            TASKS_STOP: u32,
    -            ///  Read and clear ACC and ACCDBL
    -            TASKS_READCLRACC: u32,
    -            ///  Read and clear ACC
    -            TASKS_RDCLRACC: u32,
    -            ///  Read and clear ACCDBL
    -            TASKS_RDCLRDBL: u32,
    -            reserved256: [236]u8,
    -            ///  Event being generated for every new sample value written to the SAMPLE register
    -            EVENTS_SAMPLERDY: u32,
    -            ///  Non-null report ready
    -            EVENTS_REPORTRDY: u32,
    -            ///  ACC or ACCDBL register overflow
    -            EVENTS_ACCOF: u32,
    -            ///  Double displacement(s) detected
    -            EVENTS_DBLRDY: u32,
    -            ///  QDEC has been stopped
    -            EVENTS_STOPPED: u32,
    -            reserved512: [236]u8,
    -            ///  Shortcut register
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                ///  Shortcut between REPORTRDY event and READCLRACC task
    -                REPORTRDY_READCLRACC: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between SAMPLERDY event and STOP task
    -                SAMPLERDY_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between REPORTRDY event and RDCLRACC task
    -                REPORTRDY_RDCLRACC: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between REPORTRDY event and STOP task
    -                REPORTRDY_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between DBLRDY event and RDCLRDBL task
    -                DBLRDY_RDCLRDBL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between DBLRDY event and STOP task
    -                DBLRDY_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between SAMPLERDY event and READCLRACC task
    -                SAMPLERDY_READCLRACC: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u25,
    -            }),
    -            reserved772: [256]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Enable interrupt for SAMPLERDY event
    -                SAMPLERDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for REPORTRDY event
    -                REPORTRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for ACCOF event
    -                ACCOF: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for DBLRDY event
    -                DBLRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for STOPPED event
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u27,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Disable interrupt for SAMPLERDY event
    -                SAMPLERDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for REPORTRDY event
    -                REPORTRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for ACCOF event
    -                ACCOF: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for DBLRDY event
    -                DBLRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for STOPPED event
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u27,
    -            }),
    -            reserved1280: [500]u8,
    -            ///  Enable the quadrature decoder
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable the quadrature decoder
    -                ENABLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  LED output pin polarity
    -            LEDPOL: mmio.Mmio(packed struct(u32) {
    -                ///  LED output pin polarity
    -                LEDPOL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Led active on output pin low
    -                        ActiveLow = 0x0,
    -                        ///  Led active on output pin high
    -                        ActiveHigh = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Sample period
    -            SAMPLEPER: mmio.Mmio(packed struct(u32) {
    -                ///  Sample period. The SAMPLE register will be updated for every new sample
    -                SAMPLEPER: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  128 us
    -                        @"128us" = 0x0,
    -                        ///  256 us
    -                        @"256us" = 0x1,
    -                        ///  512 us
    -                        @"512us" = 0x2,
    -                        ///  1024 us
    -                        @"1024us" = 0x3,
    -                        ///  2048 us
    -                        @"2048us" = 0x4,
    -                        ///  4096 us
    -                        @"4096us" = 0x5,
    -                        ///  8192 us
    -                        @"8192us" = 0x6,
    -                        ///  16384 us
    -                        @"16384us" = 0x7,
    -                        ///  32768 us
    -                        @"32ms" = 0x8,
    -                        ///  65536 us
    -                        @"65ms" = 0x9,
    -                        ///  131072 us
    -                        @"131ms" = 0xa,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            ///  Motion sample value
    -            SAMPLE: mmio.Mmio(packed struct(u32) {
    -                ///  Last motion sample
    -                SAMPLE: u32,
    -            }),
    -            ///  Number of samples to be taken before REPORTRDY and DBLRDY events can be generated
    -            REPORTPER: mmio.Mmio(packed struct(u32) {
    -                ///  Specifies the number of samples to be accumulated in the ACC register before the REPORTRDY and DBLRDY events can be generated
    -                REPORTPER: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  10 samples / report
    -                        @"10Smpl" = 0x0,
    -                        ///  40 samples / report
    -                        @"40Smpl" = 0x1,
    -                        ///  80 samples / report
    -                        @"80Smpl" = 0x2,
    -                        ///  120 samples / report
    -                        @"120Smpl" = 0x3,
    -                        ///  160 samples / report
    -                        @"160Smpl" = 0x4,
    -                        ///  200 samples / report
    -                        @"200Smpl" = 0x5,
    -                        ///  240 samples / report
    -                        @"240Smpl" = 0x6,
    -                        ///  280 samples / report
    -                        @"280Smpl" = 0x7,
    -                        ///  1 sample / report
    -                        @"1Smpl" = 0x8,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            ///  Register accumulating the valid transitions
    -            ACC: mmio.Mmio(packed struct(u32) {
    -                ///  Register accumulating all valid samples (not double transition) read from the SAMPLE register
    -                ACC: u32,
    -            }),
    -            ///  Snapshot of the ACC register, updated by the READCLRACC or RDCLRACC task
    -            ACCREAD: mmio.Mmio(packed struct(u32) {
    -                ///  Snapshot of the ACC register.
    -                ACCREAD: u32,
    -            }),
    -            reserved1320: [12]u8,
    -            ///  Enable input debounce filters
    -            DBFEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable input debounce filters
    -                DBFEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Debounce input filters disabled
    -                        Disabled = 0x0,
    -                        ///  Debounce input filters enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1344: [20]u8,
    -            ///  Time period the LED is switched ON prior to sampling
    -            LEDPRE: mmio.Mmio(packed struct(u32) {
    -                ///  Period in us the LED is switched on prior to sampling
    -                LEDPRE: u9,
    -                padding: u23,
    -            }),
    -            ///  Register accumulating the number of detected double transitions
    -            ACCDBL: mmio.Mmio(packed struct(u32) {
    -                ///  Register accumulating the number of detected double or illegal transitions. ( SAMPLE = 2 ).
    -                ACCDBL: u4,
    -                padding: u28,
    -            }),
    -            ///  Snapshot of the ACCDBL, updated by the READCLRACC or RDCLRDBL task
    -            ACCDBLREAD: mmio.Mmio(packed struct(u32) {
    -                ///  Snapshot of the ACCDBL register. This field is updated when the READCLRACC or RDCLRDBL task is triggered.
    -                ACCDBLREAD: u4,
    -                padding: u28,
    -            }),
    -        };
    -
    -        ///  Comparator
    -        pub const COMP = extern struct {
    -            ///  Start comparator
    -            TASKS_START: u32,
    -            ///  Stop comparator
    -            TASKS_STOP: u32,
    -            ///  Sample comparator value
    -            TASKS_SAMPLE: u32,
    -            reserved256: [244]u8,
    -            ///  COMP is ready and output is valid
    -            EVENTS_READY: u32,
    -            ///  Downward crossing
    -            EVENTS_DOWN: u32,
    -            ///  Upward crossing
    -            EVENTS_UP: u32,
    -            ///  Downward or upward crossing
    -            EVENTS_CROSS: u32,
    -            reserved512: [240]u8,
    -            ///  Shortcut register
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                ///  Shortcut between READY event and SAMPLE task
    -                READY_SAMPLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between READY event and STOP task
    -                READY_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between DOWN event and STOP task
    -                DOWN_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between UP event and STOP task
    -                UP_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between CROSS event and STOP task
    -                CROSS_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u27,
    -            }),
    -            reserved768: [252]u8,
    -            ///  Enable or disable interrupt
    -            INTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable interrupt for READY event
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for DOWN event
    -                DOWN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for UP event
    -                UP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for CROSS event
    -                CROSS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Enable interrupt for READY event
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for DOWN event
    -                DOWN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for UP event
    -                UP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for CROSS event
    -                CROSS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Disable interrupt for READY event
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for DOWN event
    -                DOWN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for UP event
    -                UP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for CROSS event
    -                CROSS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1024: [244]u8,
    -            ///  Compare result
    -            RESULT: mmio.Mmio(packed struct(u32) {
    -                ///  Result of last compare. Decision point SAMPLE task.
    -                RESULT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Input voltage is below the threshold (VIN+ < VIN-)
    -                        Below = 0x0,
    -                        ///  Input voltage is above the threshold (VIN+ > VIN-)
    -                        Above = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1280: [252]u8,
    -            ///  COMP enable
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable COMP
    -                ENABLE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x2,
    -                        _,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            ///  Pin select
    -            PSEL: mmio.Mmio(packed struct(u32) {
    -                ///  Analog pin select
    -                PSEL: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        ///  AIN0 selected as analog input
    -                        AnalogInput0 = 0x0,
    -                        ///  AIN1 selected as analog input
    -                        AnalogInput1 = 0x1,
    -                        ///  AIN2 selected as analog input
    -                        AnalogInput2 = 0x2,
    -                        ///  AIN3 selected as analog input
    -                        AnalogInput3 = 0x3,
    -                        ///  AIN4 selected as analog input
    -                        AnalogInput4 = 0x4,
    -                        ///  AIN5 selected as analog input
    -                        AnalogInput5 = 0x5,
    -                        ///  AIN6 selected as analog input
    -                        AnalogInput6 = 0x6,
    -                        ///  AIN7 selected as analog input
    -                        AnalogInput7 = 0x7,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            ///  Reference source select for single-ended mode
    -            REFSEL: mmio.Mmio(packed struct(u32) {
    -                ///  Reference select
    -                REFSEL: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        ///  VREF = internal 1.2 V reference (VDD >= 1.7 V)
    -                        Int1V2 = 0x0,
    -                        ///  VREF = internal 1.8 V reference (VDD >= VREF + 0.2 V)
    -                        Int1V8 = 0x1,
    -                        ///  VREF = internal 2.4 V reference (VDD >= VREF + 0.2 V)
    -                        Int2V4 = 0x2,
    -                        ///  VREF = VDD
    -                        VDD = 0x4,
    -                        ///  VREF = AREF (VDD >= VREF >= AREFMIN)
    -                        ARef = 0x7,
    -                        _,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            ///  External reference select
    -            EXTREFSEL: mmio.Mmio(packed struct(u32) {
    -                ///  External analog reference select
    -                EXTREFSEL: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        ///  Use AIN0 as external analog reference
    -                        AnalogReference0 = 0x0,
    -                        ///  Use AIN1 as external analog reference
    -                        AnalogReference1 = 0x1,
    -                        ///  Use AIN2 as external analog reference
    -                        AnalogReference2 = 0x2,
    -                        ///  Use AIN3 as external analog reference
    -                        AnalogReference3 = 0x3,
    -                        ///  Use AIN4 as external analog reference
    -                        AnalogReference4 = 0x4,
    -                        ///  Use AIN5 as external analog reference
    -                        AnalogReference5 = 0x5,
    -                        ///  Use AIN6 as external analog reference
    -                        AnalogReference6 = 0x6,
    -                        ///  Use AIN7 as external analog reference
    -                        AnalogReference7 = 0x7,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            reserved1328: [32]u8,
    -            ///  Threshold configuration for hysteresis unit
    -            TH: mmio.Mmio(packed struct(u32) {
    -                ///  VDOWN = (THDOWN+1)/64*VREF
    -                THDOWN: u6,
    -                reserved8: u2,
    -                ///  VUP = (THUP+1)/64*VREF
    -                THUP: u6,
    -                padding: u18,
    -            }),
    -            ///  Mode configuration
    -            MODE: mmio.Mmio(packed struct(u32) {
    -                ///  Speed and power modes
    -                SP: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Low-power mode
    -                        Low = 0x0,
    -                        ///  Normal mode
    -                        Normal = 0x1,
    -                        ///  High-speed mode
    -                        High = 0x2,
    -                        _,
    -                    },
    -                },
    -                reserved8: u6,
    -                ///  Main operation modes
    -                MAIN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Single-ended mode
    -                        SE = 0x0,
    -                        ///  Differential mode
    -                        Diff = 0x1,
    -                    },
    -                },
    -                padding: u23,
    -            }),
    -            ///  Comparator hysteresis enable
    -            HYST: mmio.Mmio(packed struct(u32) {
    -                ///  Comparator hysteresis
    -                HYST: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Comparator hysteresis disabled
    -                        NoHyst = 0x0,
    -                        ///  Comparator hysteresis enabled
    -                        Hyst50mV = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Current source select on analog input
    -            ISOURCE: mmio.Mmio(packed struct(u32) {
    -                ///  Comparator hysteresis
    -                ISOURCE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Current source disabled
    -                        Off = 0x0,
    -                        ///  Current source enabled (+/- 2.5 uA)
    -                        Ien2mA5 = 0x1,
    -                        ///  Current source enabled (+/- 5 uA)
    -                        Ien5mA = 0x2,
    -                        ///  Current source enabled (+/- 10 uA)
    -                        Ien10mA = 0x3,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -        };
    -
    -        ///  Low Power Comparator
    -        pub const LPCOMP = extern struct {
    -            ///  Start comparator
    -            TASKS_START: u32,
    -            ///  Stop comparator
    -            TASKS_STOP: u32,
    -            ///  Sample comparator value
    -            TASKS_SAMPLE: u32,
    -            reserved256: [244]u8,
    -            ///  LPCOMP is ready and output is valid
    -            EVENTS_READY: u32,
    -            ///  Downward crossing
    -            EVENTS_DOWN: u32,
    -            ///  Upward crossing
    -            EVENTS_UP: u32,
    -            ///  Downward or upward crossing
    -            EVENTS_CROSS: u32,
    -            reserved512: [240]u8,
    -            ///  Shortcut register
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                ///  Shortcut between READY event and SAMPLE task
    -                READY_SAMPLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between READY event and STOP task
    -                READY_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between DOWN event and STOP task
    -                DOWN_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between UP event and STOP task
    -                UP_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between CROSS event and STOP task
    -                CROSS_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u27,
    -            }),
    -            reserved772: [256]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Enable interrupt for READY event
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for DOWN event
    -                DOWN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for UP event
    -                UP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Enable interrupt for CROSS event
    -                CROSS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to Disable interrupt for READY event
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for DOWN event
    -                DOWN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for UP event
    -                UP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to Disable interrupt for CROSS event
    -                CROSS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1024: [244]u8,
    -            ///  Compare result
    -            RESULT: mmio.Mmio(packed struct(u32) {
    -                ///  Result of last compare. Decision point SAMPLE task.
    -                RESULT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Input voltage is below the reference threshold (VIN+ < VIN-).
    -                        Below = 0x0,
    -                        ///  Input voltage is above the reference threshold (VIN+ > VIN-).
    -                        Above = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1280: [252]u8,
    -            ///  Enable LPCOMP
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable LPCOMP
    -                ENABLE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            ///  Input pin select
    -            PSEL: mmio.Mmio(packed struct(u32) {
    -                ///  Analog pin select
    -                PSEL: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        ///  AIN0 selected as analog input
    -                        AnalogInput0 = 0x0,
    -                        ///  AIN1 selected as analog input
    -                        AnalogInput1 = 0x1,
    -                        ///  AIN2 selected as analog input
    -                        AnalogInput2 = 0x2,
    -                        ///  AIN3 selected as analog input
    -                        AnalogInput3 = 0x3,
    -                        ///  AIN4 selected as analog input
    -                        AnalogInput4 = 0x4,
    -                        ///  AIN5 selected as analog input
    -                        AnalogInput5 = 0x5,
    -                        ///  AIN6 selected as analog input
    -                        AnalogInput6 = 0x6,
    -                        ///  AIN7 selected as analog input
    -                        AnalogInput7 = 0x7,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            ///  Reference select
    -            REFSEL: mmio.Mmio(packed struct(u32) {
    -                ///  Reference select
    -                REFSEL: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  VDD * 1/8 selected as reference
    -                        Ref1_8Vdd = 0x0,
    -                        ///  VDD * 2/8 selected as reference
    -                        Ref2_8Vdd = 0x1,
    -                        ///  VDD * 3/8 selected as reference
    -                        Ref3_8Vdd = 0x2,
    -                        ///  VDD * 4/8 selected as reference
    -                        Ref4_8Vdd = 0x3,
    -                        ///  VDD * 5/8 selected as reference
    -                        Ref5_8Vdd = 0x4,
    -                        ///  VDD * 6/8 selected as reference
    -                        Ref6_8Vdd = 0x5,
    -                        ///  VDD * 7/8 selected as reference
    -                        Ref7_8Vdd = 0x6,
    -                        ///  External analog reference selected
    -                        ARef = 0x7,
    -                        ///  VDD * 1/16 selected as reference
    -                        Ref1_16Vdd = 0x8,
    -                        ///  VDD * 3/16 selected as reference
    -                        Ref3_16Vdd = 0x9,
    -                        ///  VDD * 5/16 selected as reference
    -                        Ref5_16Vdd = 0xa,
    -                        ///  VDD * 7/16 selected as reference
    -                        Ref7_16Vdd = 0xb,
    -                        ///  VDD * 9/16 selected as reference
    -                        Ref9_16Vdd = 0xc,
    -                        ///  VDD * 11/16 selected as reference
    -                        Ref11_16Vdd = 0xd,
    -                        ///  VDD * 13/16 selected as reference
    -                        Ref13_16Vdd = 0xe,
    -                        ///  VDD * 15/16 selected as reference
    -                        Ref15_16Vdd = 0xf,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            ///  External reference select
    -            EXTREFSEL: mmio.Mmio(packed struct(u32) {
    -                ///  External analog reference select
    -                EXTREFSEL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Use AIN0 as external analog reference
    -                        AnalogReference0 = 0x0,
    -                        ///  Use AIN1 as external analog reference
    -                        AnalogReference1 = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1312: [16]u8,
    -            ///  Analog detect configuration
    -            ANADETECT: mmio.Mmio(packed struct(u32) {
    -                ///  Analog detect configuration
    -                ANADETECT: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Generate ANADETECT on crossing, both upward crossing and downward crossing
    -                        Cross = 0x0,
    -                        ///  Generate ANADETECT on upward crossing only
    -                        Up = 0x1,
    -                        ///  Generate ANADETECT on downward crossing only
    -                        Down = 0x2,
    -                        _,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            reserved1336: [20]u8,
    -            ///  Comparator hysteresis enable
    -            HYST: mmio.Mmio(packed struct(u32) {
    -                ///  Comparator hysteresis enable
    -                HYST: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Comparator hysteresis disabled
    -                        NoHyst = 0x0,
    -                        ///  Comparator hysteresis disabled (typ. 50 mV)
    -                        Hyst50mV = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -        };
    -
    -        ///  Software interrupt 0
    -        pub const SWI0 = extern struct {
    -            ///  Unused.
    -            UNUSED: u32,
    -        };
    -    };
    -};
    diff --git a/src/chips/nrf52840.zig b/src/chips/nrf52840.zig
    deleted file mode 100644
    index 955d043ff..000000000
    --- a/src/chips/nrf52840.zig
    +++ /dev/null
    @@ -1,21782 +0,0 @@
    -const micro = @import("microzig");
    -const mmio = micro.mmio;
    -
    -pub const devices = struct {
    -    ///  nRF52840 reference description for radio MCU with ARM 32-bit Cortex-M4 Microcontroller
    -    pub const nrf52840 = struct {
    -        pub const properties = struct {
    -            pub const @"cpu.nvic_prio_bits" = "3";
    -            pub const @"cpu.mpu" = "1";
    -            pub const @"cpu.fpu" = "1";
    -            pub const @"cpu.revision" = "r0p1";
    -            pub const @"cpu.vendor_systick_config" = "0";
    -            pub const license =
    -                \\
    -                \\Copyright (c) 2010 - 2021, Nordic Semiconductor ASA All rights reserved.\n
    -                \\\n
    -                \\Redistribution and use in source and binary forms, with or without\n
    -                \\modification, are permitted provided that the following conditions are met:\n
    -                \\\n
    -                \\1. Redistributions of source code must retain the above copyright notice, this\n
    -                \\   list of conditions and the following disclaimer.\n
    -                \\\n
    -                \\2. Redistributions in binary form must reproduce the above copyright\n
    -                \\   notice, this list of conditions and the following disclaimer in the\n
    -                \\   documentation and/or other materials provided with the distribution.\n
    -                \\\n
    -                \\3. Neither the name of Nordic Semiconductor ASA nor the names of its\n
    -                \\   contributors may be used to endorse or promote products derived from this\n
    -                \\   software without specific prior written permission.\n
    -                \\\n
    -                \\THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\n
    -                \\AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n
    -                \\IMPLIED WARRANTIES OF MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE\n
    -                \\ARE DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE\n
    -                \\LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n
    -                \\CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n
    -                \\SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n
    -                \\INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n
    -                \\CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n
    -                \\ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n
    -                \\POSSIBILITY OF SUCH DAMAGE.\n
    -                \\        
    -            ;
    -            pub const @"cpu.name" = "CM4";
    -            pub const @"cpu.endian" = "little";
    -        };
    -
    -        pub const VectorTable = extern struct {
    -            const Handler = micro.interrupt.Handler;
    -            const unhandled = micro.interrupt.unhandled;
    -
    -            initial_stack_pointer: u32,
    -            Reset: Handler = unhandled,
    -            NMI: Handler = unhandled,
    -            HardFault: Handler = unhandled,
    -            MemManageFault: Handler = unhandled,
    -            BusFault: Handler = unhandled,
    -            UsageFault: Handler = unhandled,
    -            reserved5: [4]u32 = undefined,
    -            SVCall: Handler = unhandled,
    -            DebugMonitor: Handler = unhandled,
    -            reserved11: [1]u32 = undefined,
    -            PendSV: Handler = unhandled,
    -            SysTick: Handler = unhandled,
    -            POWER_CLOCK: Handler = unhandled,
    -            RADIO: Handler = unhandled,
    -            UARTE0_UART0: Handler = unhandled,
    -            SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0: Handler = unhandled,
    -            SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1: Handler = unhandled,
    -            NFCT: Handler = unhandled,
    -            GPIOTE: Handler = unhandled,
    -            SAADC: Handler = unhandled,
    -            TIMER0: Handler = unhandled,
    -            TIMER1: Handler = unhandled,
    -            TIMER2: Handler = unhandled,
    -            RTC0: Handler = unhandled,
    -            TEMP: Handler = unhandled,
    -            RNG: Handler = unhandled,
    -            ECB: Handler = unhandled,
    -            CCM_AAR: Handler = unhandled,
    -            WDT: Handler = unhandled,
    -            RTC1: Handler = unhandled,
    -            QDEC: Handler = unhandled,
    -            COMP_LPCOMP: Handler = unhandled,
    -            SWI0_EGU0: Handler = unhandled,
    -            SWI1_EGU1: Handler = unhandled,
    -            SWI2_EGU2: Handler = unhandled,
    -            SWI3_EGU3: Handler = unhandled,
    -            SWI4_EGU4: Handler = unhandled,
    -            SWI5_EGU5: Handler = unhandled,
    -            TIMER3: Handler = unhandled,
    -            TIMER4: Handler = unhandled,
    -            PWM0: Handler = unhandled,
    -            PDM: Handler = unhandled,
    -            reserved44: [2]u32 = undefined,
    -            MWU: Handler = unhandled,
    -            PWM1: Handler = unhandled,
    -            PWM2: Handler = unhandled,
    -            SPIM2_SPIS2_SPI2: Handler = unhandled,
    -            RTC2: Handler = unhandled,
    -            I2S: Handler = unhandled,
    -            FPU: Handler = unhandled,
    -            USBD: Handler = unhandled,
    -            UARTE1: Handler = unhandled,
    -            QSPI: Handler = unhandled,
    -            CRYPTOCELL: Handler = unhandled,
    -            reserved57: [2]u32 = undefined,
    -            PWM3: Handler = unhandled,
    -            reserved60: [1]u32 = undefined,
    -            SPIM3: Handler = unhandled,
    -        };
    -
    -        pub const peripherals = struct {
    -            ///  Factory information configuration registers
    -            pub const FICR = @as(*volatile types.peripherals.FICR, @ptrFromInt(0x10000000));
    -            ///  User information configuration registers
    -            pub const UICR = @as(*volatile types.peripherals.UICR, @ptrFromInt(0x10001000));
    -            ///  Clock control
    -            pub const CLOCK = @as(*volatile types.peripherals.CLOCK, @ptrFromInt(0x40000000));
    -            ///  Power control
    -            pub const POWER = @as(*volatile types.peripherals.POWER, @ptrFromInt(0x40000000));
    -            ///  2.4 GHz radio
    -            pub const RADIO = @as(*volatile types.peripherals.RADIO, @ptrFromInt(0x40001000));
    -            ///  Universal Asynchronous Receiver/Transmitter
    -            pub const UART0 = @as(*volatile types.peripherals.UART0, @ptrFromInt(0x40002000));
    -            ///  UART with EasyDMA 0
    -            pub const UARTE0 = @as(*volatile types.peripherals.UARTE0, @ptrFromInt(0x40002000));
    -            ///  Serial Peripheral Interface 0
    -            pub const SPI0 = @as(*volatile types.peripherals.SPI0, @ptrFromInt(0x40003000));
    -            ///  Serial Peripheral Interface Master with EasyDMA 0
    -            pub const SPIM0 = @as(*volatile types.peripherals.SPIM0, @ptrFromInt(0x40003000));
    -            ///  SPI Slave 0
    -            pub const SPIS0 = @as(*volatile types.peripherals.SPIS0, @ptrFromInt(0x40003000));
    -            ///  I2C compatible Two-Wire Interface 0
    -            pub const TWI0 = @as(*volatile types.peripherals.TWI0, @ptrFromInt(0x40003000));
    -            ///  I2C compatible Two-Wire Master Interface with EasyDMA 0
    -            pub const TWIM0 = @as(*volatile types.peripherals.TWIM0, @ptrFromInt(0x40003000));
    -            ///  I2C compatible Two-Wire Slave Interface with EasyDMA 0
    -            pub const TWIS0 = @as(*volatile types.peripherals.TWIS0, @ptrFromInt(0x40003000));
    -            ///  Serial Peripheral Interface 1
    -            pub const SPI1 = @as(*volatile types.peripherals.SPI0, @ptrFromInt(0x40004000));
    -            ///  Serial Peripheral Interface Master with EasyDMA 1
    -            pub const SPIM1 = @as(*volatile types.peripherals.SPIM0, @ptrFromInt(0x40004000));
    -            ///  SPI Slave 1
    -            pub const SPIS1 = @as(*volatile types.peripherals.SPIS0, @ptrFromInt(0x40004000));
    -            ///  I2C compatible Two-Wire Interface 1
    -            pub const TWI1 = @as(*volatile types.peripherals.TWI0, @ptrFromInt(0x40004000));
    -            ///  I2C compatible Two-Wire Master Interface with EasyDMA 1
    -            pub const TWIM1 = @as(*volatile types.peripherals.TWIM0, @ptrFromInt(0x40004000));
    -            ///  I2C compatible Two-Wire Slave Interface with EasyDMA 1
    -            pub const TWIS1 = @as(*volatile types.peripherals.TWIS0, @ptrFromInt(0x40004000));
    -            ///  NFC-A compatible radio
    -            pub const NFCT = @as(*volatile types.peripherals.NFCT, @ptrFromInt(0x40005000));
    -            ///  GPIO Tasks and Events
    -            pub const GPIOTE = @as(*volatile types.peripherals.GPIOTE, @ptrFromInt(0x40006000));
    -            ///  Successive approximation register (SAR) analog-to-digital converter
    -            pub const SAADC = @as(*volatile types.peripherals.SAADC, @ptrFromInt(0x40007000));
    -            ///  Timer/Counter 0
    -            pub const TIMER0 = @as(*volatile types.peripherals.TIMER0, @ptrFromInt(0x40008000));
    -            ///  Timer/Counter 1
    -            pub const TIMER1 = @as(*volatile types.peripherals.TIMER0, @ptrFromInt(0x40009000));
    -            ///  Timer/Counter 2
    -            pub const TIMER2 = @as(*volatile types.peripherals.TIMER0, @ptrFromInt(0x4000a000));
    -            ///  Real time counter 0
    -            pub const RTC0 = @as(*volatile types.peripherals.RTC0, @ptrFromInt(0x4000b000));
    -            ///  Temperature Sensor
    -            pub const TEMP = @as(*volatile types.peripherals.TEMP, @ptrFromInt(0x4000c000));
    -            ///  Random Number Generator
    -            pub const RNG = @as(*volatile types.peripherals.RNG, @ptrFromInt(0x4000d000));
    -            ///  AES ECB Mode Encryption
    -            pub const ECB = @as(*volatile types.peripherals.ECB, @ptrFromInt(0x4000e000));
    -            ///  Accelerated Address Resolver
    -            pub const AAR = @as(*volatile types.peripherals.AAR, @ptrFromInt(0x4000f000));
    -            ///  AES CCM Mode Encryption
    -            pub const CCM = @as(*volatile types.peripherals.CCM, @ptrFromInt(0x4000f000));
    -            ///  Watchdog Timer
    -            pub const WDT = @as(*volatile types.peripherals.WDT, @ptrFromInt(0x40010000));
    -            ///  Real time counter 1
    -            pub const RTC1 = @as(*volatile types.peripherals.RTC0, @ptrFromInt(0x40011000));
    -            ///  Quadrature Decoder
    -            pub const QDEC = @as(*volatile types.peripherals.QDEC, @ptrFromInt(0x40012000));
    -            ///  Comparator
    -            pub const COMP = @as(*volatile types.peripherals.COMP, @ptrFromInt(0x40013000));
    -            ///  Low Power Comparator
    -            pub const LPCOMP = @as(*volatile types.peripherals.LPCOMP, @ptrFromInt(0x40013000));
    -            ///  Event Generator Unit 0
    -            pub const EGU0 = @as(*volatile types.peripherals.EGU0, @ptrFromInt(0x40014000));
    -            ///  Software interrupt 0
    -            pub const SWI0 = @as(*volatile types.peripherals.SWI0, @ptrFromInt(0x40014000));
    -            ///  Event Generator Unit 1
    -            pub const EGU1 = @as(*volatile types.peripherals.EGU0, @ptrFromInt(0x40015000));
    -            ///  Software interrupt 1
    -            pub const SWI1 = @as(*volatile types.peripherals.SWI0, @ptrFromInt(0x40015000));
    -            ///  Event Generator Unit 2
    -            pub const EGU2 = @as(*volatile types.peripherals.EGU0, @ptrFromInt(0x40016000));
    -            ///  Software interrupt 2
    -            pub const SWI2 = @as(*volatile types.peripherals.SWI0, @ptrFromInt(0x40016000));
    -            ///  Event Generator Unit 3
    -            pub const EGU3 = @as(*volatile types.peripherals.EGU0, @ptrFromInt(0x40017000));
    -            ///  Software interrupt 3
    -            pub const SWI3 = @as(*volatile types.peripherals.SWI0, @ptrFromInt(0x40017000));
    -            ///  Event Generator Unit 4
    -            pub const EGU4 = @as(*volatile types.peripherals.EGU0, @ptrFromInt(0x40018000));
    -            ///  Software interrupt 4
    -            pub const SWI4 = @as(*volatile types.peripherals.SWI0, @ptrFromInt(0x40018000));
    -            ///  Event Generator Unit 5
    -            pub const EGU5 = @as(*volatile types.peripherals.EGU0, @ptrFromInt(0x40019000));
    -            ///  Software interrupt 5
    -            pub const SWI5 = @as(*volatile types.peripherals.SWI0, @ptrFromInt(0x40019000));
    -            ///  Timer/Counter 3
    -            pub const TIMER3 = @as(*volatile types.peripherals.TIMER0, @ptrFromInt(0x4001a000));
    -            ///  Timer/Counter 4
    -            pub const TIMER4 = @as(*volatile types.peripherals.TIMER0, @ptrFromInt(0x4001b000));
    -            ///  Pulse width modulation unit 0
    -            pub const PWM0 = @as(*volatile types.peripherals.PWM0, @ptrFromInt(0x4001c000));
    -            ///  Pulse Density Modulation (Digital Microphone) Interface
    -            pub const PDM = @as(*volatile types.peripherals.PDM, @ptrFromInt(0x4001d000));
    -            ///  Access control lists
    -            pub const ACL = @as(*volatile types.peripherals.ACL, @ptrFromInt(0x4001e000));
    -            ///  Non Volatile Memory Controller
    -            pub const NVMC = @as(*volatile types.peripherals.NVMC, @ptrFromInt(0x4001e000));
    -            ///  Programmable Peripheral Interconnect
    -            pub const PPI = @as(*volatile types.peripherals.PPI, @ptrFromInt(0x4001f000));
    -            ///  Memory Watch Unit
    -            pub const MWU = @as(*volatile types.peripherals.MWU, @ptrFromInt(0x40020000));
    -            ///  Pulse width modulation unit 1
    -            pub const PWM1 = @as(*volatile types.peripherals.PWM0, @ptrFromInt(0x40021000));
    -            ///  Pulse width modulation unit 2
    -            pub const PWM2 = @as(*volatile types.peripherals.PWM0, @ptrFromInt(0x40022000));
    -            ///  Serial Peripheral Interface 2
    -            pub const SPI2 = @as(*volatile types.peripherals.SPI0, @ptrFromInt(0x40023000));
    -            ///  Serial Peripheral Interface Master with EasyDMA 2
    -            pub const SPIM2 = @as(*volatile types.peripherals.SPIM0, @ptrFromInt(0x40023000));
    -            ///  SPI Slave 2
    -            pub const SPIS2 = @as(*volatile types.peripherals.SPIS0, @ptrFromInt(0x40023000));
    -            ///  Real time counter 2
    -            pub const RTC2 = @as(*volatile types.peripherals.RTC0, @ptrFromInt(0x40024000));
    -            ///  Inter-IC Sound
    -            pub const I2S = @as(*volatile types.peripherals.I2S, @ptrFromInt(0x40025000));
    -            ///  FPU
    -            pub const FPU = @as(*volatile types.peripherals.FPU, @ptrFromInt(0x40026000));
    -            ///  Universal serial bus device
    -            pub const USBD = @as(*volatile types.peripherals.USBD, @ptrFromInt(0x40027000));
    -            ///  UART with EasyDMA 1
    -            pub const UARTE1 = @as(*volatile types.peripherals.UARTE0, @ptrFromInt(0x40028000));
    -            ///  External flash interface
    -            pub const QSPI = @as(*volatile types.peripherals.QSPI, @ptrFromInt(0x40029000));
    -            ///  Pulse width modulation unit 3
    -            pub const PWM3 = @as(*volatile types.peripherals.PWM0, @ptrFromInt(0x4002d000));
    -            ///  Serial Peripheral Interface Master with EasyDMA 3
    -            pub const SPIM3 = @as(*volatile types.peripherals.SPIM0, @ptrFromInt(0x4002f000));
    -            ///  GPIO Port 1
    -            pub const P0 = @as(*volatile types.peripherals.P0, @ptrFromInt(0x50000000));
    -            ///  GPIO Port 2
    -            pub const P1 = @as(*volatile types.peripherals.P0, @ptrFromInt(0x50000300));
    -            ///  CRYPTOCELL HOST_RGF interface
    -            pub const CC_HOST_RGF = @as(*volatile types.peripherals.CC_HOST_RGF, @ptrFromInt(0x5002a000));
    -            ///  ARM TrustZone CryptoCell register interface
    -            pub const CRYPTOCELL = @as(*volatile types.peripherals.CRYPTOCELL, @ptrFromInt(0x5002a000));
    -            ///  System Tick Timer
    -            pub const SysTick = @as(*volatile types.peripherals.SCS.SysTick, @ptrFromInt(0xe000e010));
    -        };
    -    };
    -};
    -
    -pub const types = struct {
    -    pub const peripherals = struct {
    -        ///  System Control Space
    -        pub const SCS = struct {
    -            ///  System Tick Timer
    -            pub const SysTick = extern struct {
    -                ///  SysTick Control and Status Register
    -                CTRL: mmio.Mmio(packed struct(u32) {
    -                    ENABLE: u1,
    -                    TICKINT: u1,
    -                    CLKSOURCE: u1,
    -                    reserved16: u13,
    -                    COUNTFLAG: u1,
    -                    padding: u15,
    -                }),
    -                ///  SysTick Reload Value Register
    -                LOAD: mmio.Mmio(packed struct(u32) {
    -                    RELOAD: u24,
    -                    padding: u8,
    -                }),
    -                ///  SysTick Current Value Register
    -                VAL: mmio.Mmio(packed struct(u32) {
    -                    CURRENT: u24,
    -                    padding: u8,
    -                }),
    -                ///  SysTick Calibration Register
    -                CALIB: mmio.Mmio(packed struct(u32) {
    -                    TENMS: u24,
    -                    reserved30: u6,
    -                    SKEW: u1,
    -                    NOREF: u1,
    -                }),
    -            };
    -        };
    -
    -        ///  Factory information configuration registers
    -        pub const FICR = extern struct {
    -            reserved16: [16]u8,
    -            ///  Code memory page size
    -            CODEPAGESIZE: mmio.Mmio(packed struct(u32) {
    -                ///  Code memory page size
    -                CODEPAGESIZE: u32,
    -            }),
    -            ///  Code memory size
    -            CODESIZE: mmio.Mmio(packed struct(u32) {
    -                ///  Code memory size in number of pages
    -                CODESIZE: u32,
    -            }),
    -            reserved96: [72]u8,
    -            ///  Description collection: Device identifier
    -            DEVICEID: [2]mmio.Mmio(packed struct(u32) {
    -                ///  64 bit unique device identifier
    -                DEVICEID: u32,
    -            }),
    -            reserved128: [24]u8,
    -            ///  Description collection: Encryption root, word n
    -            ER: [4]mmio.Mmio(packed struct(u32) {
    -                ///  Encryption root, word n
    -                ER: u32,
    -            }),
    -            ///  Description collection: Identity Root, word n
    -            IR: [4]mmio.Mmio(packed struct(u32) {
    -                ///  Identity Root, word n
    -                IR: u32,
    -            }),
    -            ///  Device address type
    -            DEVICEADDRTYPE: mmio.Mmio(packed struct(u32) {
    -                ///  Device address type
    -                DEVICEADDRTYPE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Public address
    -                        Public = 0x0,
    -                        ///  Random address
    -                        Random = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Description collection: Device address n
    -            DEVICEADDR: [2]mmio.Mmio(packed struct(u32) {
    -                ///  48 bit device address
    -                DEVICEADDR: u32,
    -            }),
    -            reserved848: [676]u8,
    -            ///  Description collection: Production test signature n
    -            PRODTEST: [3]mmio.Mmio(packed struct(u32) {
    -                ///  Production test signature n
    -                PRODTEST: packed union {
    -                    raw: u32,
    -                    value: enum(u32) {
    -                        ///  Production tests done
    -                        Done = 0xbb42319f,
    -                        ///  Production tests not done
    -                        NotDone = 0xffffffff,
    -                        _,
    -                    },
    -                },
    -            }),
    -        };
    -
    -        ///  User information configuration registers
    -        pub const UICR = extern struct {
    -            reserved20: [20]u8,
    -            ///  Description collection: Reserved for Nordic firmware design
    -            NRFFW: [13]mmio.Mmio(packed struct(u32) {
    -                ///  Reserved for Nordic firmware design
    -                NRFFW: u32,
    -            }),
    -            reserved80: [8]u8,
    -            ///  Description collection: Reserved for Nordic hardware design
    -            NRFHW: [12]mmio.Mmio(packed struct(u32) {
    -                ///  Reserved for Nordic hardware design
    -                NRFHW: u32,
    -            }),
    -            ///  Description collection: Reserved for customer
    -            CUSTOMER: [32]mmio.Mmio(packed struct(u32) {
    -                ///  Reserved for customer
    -                CUSTOMER: u32,
    -            }),
    -            reserved512: [256]u8,
    -            ///  Description collection: Mapping of the nRESET function (see POWER chapter for details)
    -            PSELRESET: [2]mmio.Mmio(packed struct(u32) {
    -                ///  GPIO pin number onto which nRESET is exposed
    -                PIN: u5,
    -                ///  Port number onto which nRESET is exposed
    -                PORT: u1,
    -                reserved31: u25,
    -                ///  Connection
    -                CONNECT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disconnect
    -                        Disconnected = 0x1,
    -                        ///  Connect
    -                        Connected = 0x0,
    -                    },
    -                },
    -            }),
    -            ///  Access port protection
    -            APPROTECT: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable access port protection.
    -                PALL: packed union {
    -                    raw: u8,
    -                    value: enum(u8) {
    -                        ///  Disable
    -                        Disabled = 0xff,
    -                        ///  Enable
    -                        Enabled = 0x0,
    -                        _,
    -                    },
    -                },
    -                padding: u24,
    -            }),
    -            ///  Setting of pins dedicated to NFC functionality: NFC antenna or GPIO
    -            NFCPINS: mmio.Mmio(packed struct(u32) {
    -                ///  Setting of pins dedicated to NFC functionality
    -                PROTECT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Operation as GPIO pins. Same protection as normal GPIO pins
    -                        Disabled = 0x0,
    -                        ///  Operation as NFC antenna pins. Configures the protection for NFC operation
    -                        NFC = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Processor debug control
    -            DEBUGCTRL: mmio.Mmio(packed struct(u32) {
    -                ///  Configure CPU non-intrusive debug features
    -                CPUNIDEN: packed union {
    -                    raw: u8,
    -                    value: enum(u8) {
    -                        ///  Enable CPU ITM and ETM functionality (default behavior)
    -                        Enabled = 0xff,
    -                        ///  Disable CPU ITM and ETM functionality
    -                        Disabled = 0x0,
    -                        _,
    -                    },
    -                },
    -                ///  Configure CPU flash patch and breakpoint (FPB) unit behavior
    -                CPUFPBEN: packed union {
    -                    raw: u8,
    -                    value: enum(u8) {
    -                        ///  Enable CPU FPB unit (default behavior)
    -                        Enabled = 0xff,
    -                        ///  Disable CPU FPB unit. Writes into the FPB registers will be ignored.
    -                        Disabled = 0x0,
    -                        _,
    -                    },
    -                },
    -                padding: u16,
    -            }),
    -            reserved772: [240]u8,
    -            ///  GPIO reference voltage / external output supply voltage in high voltage mode
    -            REGOUT0: mmio.Mmio(packed struct(u32) {
    -                ///  Output voltage from of REG0 regulator stage. The maximum output voltage from this stage is given as VDDH - VEXDIF.
    -                VOUT: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        ///  1.8 V
    -                        @"1V8" = 0x0,
    -                        ///  2.1 V
    -                        @"2V1" = 0x1,
    -                        ///  2.4 V
    -                        @"2V4" = 0x2,
    -                        ///  2.7 V
    -                        @"2V7" = 0x3,
    -                        ///  3.0 V
    -                        @"3V0" = 0x4,
    -                        ///  3.3 V
    -                        @"3V3" = 0x5,
    -                        ///  Default voltage: 1.8 V
    -                        DEFAULT = 0x7,
    -                        _,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -        };
    -
    -        ///  Clock control
    -        pub const CLOCK = extern struct {
    -            ///  Start HFXO crystal oscillator
    -            TASKS_HFCLKSTART: mmio.Mmio(packed struct(u32) {
    -                ///  Start HFXO crystal oscillator
    -                TASKS_HFCLKSTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Stop HFXO crystal oscillator
    -            TASKS_HFCLKSTOP: mmio.Mmio(packed struct(u32) {
    -                ///  Stop HFXO crystal oscillator
    -                TASKS_HFCLKSTOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Start LFCLK
    -            TASKS_LFCLKSTART: mmio.Mmio(packed struct(u32) {
    -                ///  Start LFCLK
    -                TASKS_LFCLKSTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Stop LFCLK
    -            TASKS_LFCLKSTOP: mmio.Mmio(packed struct(u32) {
    -                ///  Stop LFCLK
    -                TASKS_LFCLKSTOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Start calibration of LFRC
    -            TASKS_CAL: mmio.Mmio(packed struct(u32) {
    -                ///  Start calibration of LFRC
    -                TASKS_CAL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Start calibration timer
    -            TASKS_CTSTART: mmio.Mmio(packed struct(u32) {
    -                ///  Start calibration timer
    -                TASKS_CTSTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Stop calibration timer
    -            TASKS_CTSTOP: mmio.Mmio(packed struct(u32) {
    -                ///  Stop calibration timer
    -                TASKS_CTSTOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved256: [228]u8,
    -            ///  HFXO crystal oscillator started
    -            EVENTS_HFCLKSTARTED: mmio.Mmio(packed struct(u32) {
    -                ///  HFXO crystal oscillator started
    -                EVENTS_HFCLKSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  LFCLK started
    -            EVENTS_LFCLKSTARTED: mmio.Mmio(packed struct(u32) {
    -                ///  LFCLK started
    -                EVENTS_LFCLKSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved268: [4]u8,
    -            ///  Calibration of LFRC completed
    -            EVENTS_DONE: mmio.Mmio(packed struct(u32) {
    -                ///  Calibration of LFRC completed
    -                EVENTS_DONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Calibration timer timeout
    -            EVENTS_CTTO: mmio.Mmio(packed struct(u32) {
    -                ///  Calibration timer timeout
    -                EVENTS_CTTO: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved296: [20]u8,
    -            ///  Calibration timer has been started and is ready to process new tasks
    -            EVENTS_CTSTARTED: mmio.Mmio(packed struct(u32) {
    -                ///  Calibration timer has been started and is ready to process new tasks
    -                EVENTS_CTSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Calibration timer has been stopped and is ready to process new tasks
    -            EVENTS_CTSTOPPED: mmio.Mmio(packed struct(u32) {
    -                ///  Calibration timer has been stopped and is ready to process new tasks
    -                EVENTS_CTSTOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved772: [468]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to enable interrupt for event HFCLKSTARTED
    -                HFCLKSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event LFCLKSTARTED
    -                LFCLKSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved3: u1,
    -                ///  Write '1' to enable interrupt for event DONE
    -                DONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event CTTO
    -                CTTO: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved10: u5,
    -                ///  Write '1' to enable interrupt for event CTSTARTED
    -                CTSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event CTSTOPPED
    -                CTSTOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u20,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to disable interrupt for event HFCLKSTARTED
    -                HFCLKSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event LFCLKSTARTED
    -                LFCLKSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved3: u1,
    -                ///  Write '1' to disable interrupt for event DONE
    -                DONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event CTTO
    -                CTTO: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved10: u5,
    -                ///  Write '1' to disable interrupt for event CTSTARTED
    -                CTSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event CTSTOPPED
    -                CTSTOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u20,
    -            }),
    -            reserved1032: [252]u8,
    -            ///  Status indicating that HFCLKSTART task has been triggered
    -            HFCLKRUN: mmio.Mmio(packed struct(u32) {
    -                ///  HFCLKSTART task triggered or not
    -                STATUS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Task not triggered
    -                        NotTriggered = 0x0,
    -                        ///  Task triggered
    -                        Triggered = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  HFCLK status
    -            HFCLKSTAT: mmio.Mmio(packed struct(u32) {
    -                ///  Source of HFCLK
    -                SRC: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  64 MHz internal oscillator (HFINT)
    -                        RC = 0x0,
    -                        ///  64 MHz crystal oscillator (HFXO)
    -                        Xtal = 0x1,
    -                    },
    -                },
    -                reserved16: u15,
    -                ///  HFCLK state
    -                STATE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  HFCLK not running
    -                        NotRunning = 0x0,
    -                        ///  HFCLK running
    -                        Running = 0x1,
    -                    },
    -                },
    -                padding: u15,
    -            }),
    -            reserved1044: [4]u8,
    -            ///  Status indicating that LFCLKSTART task has been triggered
    -            LFCLKRUN: mmio.Mmio(packed struct(u32) {
    -                ///  LFCLKSTART task triggered or not
    -                STATUS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Task not triggered
    -                        NotTriggered = 0x0,
    -                        ///  Task triggered
    -                        Triggered = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  LFCLK status
    -            LFCLKSTAT: mmio.Mmio(packed struct(u32) {
    -                ///  Source of LFCLK
    -                SRC: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  32.768 kHz RC oscillator (LFRC)
    -                        RC = 0x0,
    -                        ///  32.768 kHz crystal oscillator (LFXO)
    -                        Xtal = 0x1,
    -                        ///  32.768 kHz synthesized from HFCLK (LFSYNT)
    -                        Synth = 0x2,
    -                        _,
    -                    },
    -                },
    -                reserved16: u14,
    -                ///  LFCLK state
    -                STATE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  LFCLK not running
    -                        NotRunning = 0x0,
    -                        ///  LFCLK running
    -                        Running = 0x1,
    -                    },
    -                },
    -                padding: u15,
    -            }),
    -            ///  Copy of LFCLKSRC register, set when LFCLKSTART task was triggered
    -            LFCLKSRCCOPY: mmio.Mmio(packed struct(u32) {
    -                ///  Clock source
    -                SRC: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  32.768 kHz RC oscillator (LFRC)
    -                        RC = 0x0,
    -                        ///  32.768 kHz crystal oscillator (LFXO)
    -                        Xtal = 0x1,
    -                        ///  32.768 kHz synthesized from HFCLK (LFSYNT)
    -                        Synth = 0x2,
    -                        _,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            reserved1304: [248]u8,
    -            ///  Clock source for the LFCLK
    -            LFCLKSRC: mmio.Mmio(packed struct(u32) {
    -                ///  Clock source
    -                SRC: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  32.768 kHz RC oscillator (LFRC)
    -                        RC = 0x0,
    -                        ///  32.768 kHz crystal oscillator (LFXO)
    -                        Xtal = 0x1,
    -                        ///  32.768 kHz synthesized from HFCLK (LFSYNT)
    -                        Synth = 0x2,
    -                        _,
    -                    },
    -                },
    -                reserved16: u14,
    -                ///  Enable or disable bypass of LFCLK crystal oscillator with external clock source
    -                BYPASS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable (use with Xtal or low-swing external source)
    -                        Disabled = 0x0,
    -                        ///  Enable (use with rail-to-rail external source)
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable external source for LFCLK
    -                EXTERNAL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable external source (use with Xtal)
    -                        Disabled = 0x0,
    -                        ///  Enable use of external source instead of Xtal (SRC needs to be set to Xtal)
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u14,
    -            }),
    -            reserved1320: [12]u8,
    -            ///  HFXO debounce time. The HFXO is started by triggering the TASKS_HFCLKSTART task.
    -            HFXODEBOUNCE: mmio.Mmio(packed struct(u32) {
    -                ///  HFXO debounce time. Debounce time = HFXODEBOUNCE * 16 us.
    -                HFXODEBOUNCE: packed union {
    -                    raw: u8,
    -                    value: enum(u8) {
    -                        ///  256 us debounce time. Recommended for TSX-3225, FA-20H and FA-128 crystals.
    -                        Db256us = 0x10,
    -                        ///  1024 us debounce time. Recommended for NX1612AA and NX1210AB crystals.
    -                        Db1024us = 0x40,
    -                        _,
    -                    },
    -                },
    -                padding: u24,
    -            }),
    -            reserved1336: [12]u8,
    -            ///  Calibration timer interval
    -            CTIV: mmio.Mmio(packed struct(u32) {
    -                ///  Calibration timer interval in multiple of 0.25 seconds. Range: 0.25 seconds to 31.75 seconds.
    -                CTIV: u7,
    -                padding: u25,
    -            }),
    -            reserved1372: [32]u8,
    -            ///  Clocking options for the trace port debug interface
    -            TRACECONFIG: mmio.Mmio(packed struct(u32) {
    -                ///  Speed of trace port clock. Note that the TRACECLK pin will output this clock divided by two.
    -                TRACEPORTSPEED: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  32 MHz trace port clock (TRACECLK = 16 MHz)
    -                        @"32MHz" = 0x0,
    -                        ///  16 MHz trace port clock (TRACECLK = 8 MHz)
    -                        @"16MHz" = 0x1,
    -                        ///  8 MHz trace port clock (TRACECLK = 4 MHz)
    -                        @"8MHz" = 0x2,
    -                        ///  4 MHz trace port clock (TRACECLK = 2 MHz)
    -                        @"4MHz" = 0x3,
    -                    },
    -                },
    -                reserved16: u14,
    -                ///  Pin multiplexing of trace signals. See pin assignment chapter for more details.
    -                TRACEMUX: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  No trace signals routed to pins. All pins can be used as regular GPIOs.
    -                        GPIO = 0x0,
    -                        ///  SWO trace signal routed to pin. Remaining pins can be used as regular GPIOs.
    -                        Serial = 0x1,
    -                        ///  All trace signals (TRACECLK and TRACEDATA[n]) routed to pins.
    -                        Parallel = 0x2,
    -                        _,
    -                    },
    -                },
    -                padding: u14,
    -            }),
    -            reserved1460: [84]u8,
    -            ///  LFRC mode configuration
    -            LFRCMODE: mmio.Mmio(packed struct(u32) {
    -                ///  Set LFRC mode
    -                MODE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Normal mode
    -                        Normal = 0x0,
    -                        ///  Ultra-low power mode (ULP)
    -                        ULP = 0x1,
    -                    },
    -                },
    -                reserved16: u15,
    -                ///  Active LFRC mode. This field is read only.
    -                STATUS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Normal mode
    -                        Normal = 0x0,
    -                        ///  Ultra-low power mode (ULP)
    -                        ULP = 0x1,
    -                    },
    -                },
    -                padding: u15,
    -            }),
    -        };
    -
    -        ///  Power control
    -        pub const POWER = extern struct {
    -            reserved120: [120]u8,
    -            ///  Enable Constant Latency mode
    -            TASKS_CONSTLAT: mmio.Mmio(packed struct(u32) {
    -                ///  Enable Constant Latency mode
    -                TASKS_CONSTLAT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Enable Low-power mode (variable latency)
    -            TASKS_LOWPWR: mmio.Mmio(packed struct(u32) {
    -                ///  Enable Low-power mode (variable latency)
    -                TASKS_LOWPWR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved264: [136]u8,
    -            ///  Power failure warning
    -            EVENTS_POFWARN: mmio.Mmio(packed struct(u32) {
    -                ///  Power failure warning
    -                EVENTS_POFWARN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved276: [8]u8,
    -            ///  CPU entered WFI/WFE sleep
    -            EVENTS_SLEEPENTER: mmio.Mmio(packed struct(u32) {
    -                ///  CPU entered WFI/WFE sleep
    -                EVENTS_SLEEPENTER: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  CPU exited WFI/WFE sleep
    -            EVENTS_SLEEPEXIT: mmio.Mmio(packed struct(u32) {
    -                ///  CPU exited WFI/WFE sleep
    -                EVENTS_SLEEPEXIT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Voltage supply detected on VBUS
    -            EVENTS_USBDETECTED: mmio.Mmio(packed struct(u32) {
    -                ///  Voltage supply detected on VBUS
    -                EVENTS_USBDETECTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Voltage supply removed from VBUS
    -            EVENTS_USBREMOVED: mmio.Mmio(packed struct(u32) {
    -                ///  Voltage supply removed from VBUS
    -                EVENTS_USBREMOVED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  USB 3.3 V supply ready
    -            EVENTS_USBPWRRDY: mmio.Mmio(packed struct(u32) {
    -                ///  USB 3.3 V supply ready
    -                EVENTS_USBPWRRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved772: [476]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                reserved2: u2,
    -                ///  Write '1' to enable interrupt for event POFWARN
    -                POFWARN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved5: u2,
    -                ///  Write '1' to enable interrupt for event SLEEPENTER
    -                SLEEPENTER: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event SLEEPEXIT
    -                SLEEPEXIT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event USBDETECTED
    -                USBDETECTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event USBREMOVED
    -                USBREMOVED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event USBPWRRDY
    -                USBPWRRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u22,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                reserved2: u2,
    -                ///  Write '1' to disable interrupt for event POFWARN
    -                POFWARN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved5: u2,
    -                ///  Write '1' to disable interrupt for event SLEEPENTER
    -                SLEEPENTER: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event SLEEPEXIT
    -                SLEEPEXIT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event USBDETECTED
    -                USBDETECTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event USBREMOVED
    -                USBREMOVED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event USBPWRRDY
    -                USBPWRRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u22,
    -            }),
    -            reserved1024: [244]u8,
    -            ///  Reset reason
    -            RESETREAS: mmio.Mmio(packed struct(u32) {
    -                ///  Reset from pin-reset detected
    -                RESETPIN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Not detected
    -                        NotDetected = 0x0,
    -                        ///  Detected
    -                        Detected = 0x1,
    -                    },
    -                },
    -                ///  Reset from watchdog detected
    -                DOG: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Not detected
    -                        NotDetected = 0x0,
    -                        ///  Detected
    -                        Detected = 0x1,
    -                    },
    -                },
    -                ///  Reset from soft reset detected
    -                SREQ: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Not detected
    -                        NotDetected = 0x0,
    -                        ///  Detected
    -                        Detected = 0x1,
    -                    },
    -                },
    -                ///  Reset from CPU lock-up detected
    -                LOCKUP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Not detected
    -                        NotDetected = 0x0,
    -                        ///  Detected
    -                        Detected = 0x1,
    -                    },
    -                },
    -                reserved16: u12,
    -                ///  Reset due to wake up from System OFF mode when wakeup is triggered from DETECT signal from GPIO
    -                OFF: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Not detected
    -                        NotDetected = 0x0,
    -                        ///  Detected
    -                        Detected = 0x1,
    -                    },
    -                },
    -                ///  Reset due to wake up from System OFF mode when wakeup is triggered from ANADETECT signal from LPCOMP
    -                LPCOMP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Not detected
    -                        NotDetected = 0x0,
    -                        ///  Detected
    -                        Detected = 0x1,
    -                    },
    -                },
    -                ///  Reset due to wake up from System OFF mode when wakeup is triggered from entering into debug interface mode
    -                DIF: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Not detected
    -                        NotDetected = 0x0,
    -                        ///  Detected
    -                        Detected = 0x1,
    -                    },
    -                },
    -                ///  Reset due to wake up from System OFF mode by NFC field detect
    -                NFC: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Not detected
    -                        NotDetected = 0x0,
    -                        ///  Detected
    -                        Detected = 0x1,
    -                    },
    -                },
    -                ///  Reset due to wake up from System OFF mode by VBUS rising into valid range
    -                VBUS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Not detected
    -                        NotDetected = 0x0,
    -                        ///  Detected
    -                        Detected = 0x1,
    -                    },
    -                },
    -                padding: u11,
    -            }),
    -            reserved1064: [36]u8,
    -            ///  Deprecated register - RAM status register
    -            RAMSTATUS: mmio.Mmio(packed struct(u32) {
    -                ///  RAM block 0 is on or off/powering up
    -                RAMBLOCK0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Off
    -                        Off = 0x0,
    -                        ///  On
    -                        On = 0x1,
    -                    },
    -                },
    -                ///  RAM block 1 is on or off/powering up
    -                RAMBLOCK1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Off
    -                        Off = 0x0,
    -                        ///  On
    -                        On = 0x1,
    -                    },
    -                },
    -                ///  RAM block 2 is on or off/powering up
    -                RAMBLOCK2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Off
    -                        Off = 0x0,
    -                        ///  On
    -                        On = 0x1,
    -                    },
    -                },
    -                ///  RAM block 3 is on or off/powering up
    -                RAMBLOCK3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Off
    -                        Off = 0x0,
    -                        ///  On
    -                        On = 0x1,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1080: [12]u8,
    -            ///  USB supply status
    -            USBREGSTATUS: mmio.Mmio(packed struct(u32) {
    -                ///  VBUS input detection status (USBDETECTED and USBREMOVED events are derived from this information)
    -                VBUSDETECT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  VBUS voltage below valid threshold
    -                        NoVbus = 0x0,
    -                        ///  VBUS voltage above valid threshold
    -                        VbusPresent = 0x1,
    -                    },
    -                },
    -                ///  USB supply output settling time elapsed
    -                OUTPUTRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  USBREG output settling time not elapsed
    -                        NotReady = 0x0,
    -                        ///  USBREG output settling time elapsed (same information as USBPWRRDY event)
    -                        Ready = 0x1,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            reserved1280: [196]u8,
    -            ///  System OFF register
    -            SYSTEMOFF: mmio.Mmio(packed struct(u32) {
    -                ///  Enable System OFF mode
    -                SYSTEMOFF: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Enable System OFF mode
    -                        Enter = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1296: [12]u8,
    -            ///  Power-fail comparator configuration
    -            POFCON: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable power failure warning
    -                POF: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Power-fail comparator threshold setting. This setting applies both for normal voltage mode (supply connected to both VDD and VDDH) and high voltage mode (supply connected to VDDH only). Values 0-3 set threshold below 1.7 V and should not be used as brown out detection will be activated before power failure warning on such low voltages.
    -                THRESHOLD: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  Set threshold to 1.7 V
    -                        V17 = 0x4,
    -                        ///  Set threshold to 1.8 V
    -                        V18 = 0x5,
    -                        ///  Set threshold to 1.9 V
    -                        V19 = 0x6,
    -                        ///  Set threshold to 2.0 V
    -                        V20 = 0x7,
    -                        ///  Set threshold to 2.1 V
    -                        V21 = 0x8,
    -                        ///  Set threshold to 2.2 V
    -                        V22 = 0x9,
    -                        ///  Set threshold to 2.3 V
    -                        V23 = 0xa,
    -                        ///  Set threshold to 2.4 V
    -                        V24 = 0xb,
    -                        ///  Set threshold to 2.5 V
    -                        V25 = 0xc,
    -                        ///  Set threshold to 2.6 V
    -                        V26 = 0xd,
    -                        ///  Set threshold to 2.7 V
    -                        V27 = 0xe,
    -                        ///  Set threshold to 2.8 V
    -                        V28 = 0xf,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                ///  Power-fail comparator threshold setting for high voltage mode (supply connected to VDDH only). This setting does not apply for normal voltage mode (supply connected to both VDD and VDDH).
    -                THRESHOLDVDDH: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  Set threshold to 2.7 V
    -                        V27 = 0x0,
    -                        ///  Set threshold to 2.8 V
    -                        V28 = 0x1,
    -                        ///  Set threshold to 2.9 V
    -                        V29 = 0x2,
    -                        ///  Set threshold to 3.0 V
    -                        V30 = 0x3,
    -                        ///  Set threshold to 3.1 V
    -                        V31 = 0x4,
    -                        ///  Set threshold to 3.2 V
    -                        V32 = 0x5,
    -                        ///  Set threshold to 3.3 V
    -                        V33 = 0x6,
    -                        ///  Set threshold to 3.4 V
    -                        V34 = 0x7,
    -                        ///  Set threshold to 3.5 V
    -                        V35 = 0x8,
    -                        ///  Set threshold to 3.6 V
    -                        V36 = 0x9,
    -                        ///  Set threshold to 3.7 V
    -                        V37 = 0xa,
    -                        ///  Set threshold to 3.8 V
    -                        V38 = 0xb,
    -                        ///  Set threshold to 3.9 V
    -                        V39 = 0xc,
    -                        ///  Set threshold to 4.0 V
    -                        V40 = 0xd,
    -                        ///  Set threshold to 4.1 V
    -                        V41 = 0xe,
    -                        ///  Set threshold to 4.2 V
    -                        V42 = 0xf,
    -                    },
    -                },
    -                padding: u20,
    -            }),
    -            reserved1308: [8]u8,
    -            ///  General purpose retention register
    -            GPREGRET: mmio.Mmio(packed struct(u32) {
    -                ///  General purpose retention register
    -                GPREGRET: u8,
    -                padding: u24,
    -            }),
    -            ///  General purpose retention register
    -            GPREGRET2: mmio.Mmio(packed struct(u32) {
    -                ///  General purpose retention register
    -                GPREGRET: u8,
    -                padding: u24,
    -            }),
    -            reserved1400: [84]u8,
    -            ///  Enable DC/DC converter for REG1 stage
    -            DCDCEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable DC/DC converter for REG1 stage.
    -                DCDCEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1408: [4]u8,
    -            ///  Enable DC/DC converter for REG0 stage
    -            DCDCEN0: mmio.Mmio(packed struct(u32) {
    -                ///  Enable DC/DC converter for REG0 stage.
    -                DCDCEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1600: [188]u8,
    -            ///  Main supply status
    -            MAINREGSTATUS: mmio.Mmio(packed struct(u32) {
    -                ///  Main supply status
    -                MAINREGSTATUS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Normal voltage mode. Voltage supplied on VDD.
    -                        Normal = 0x0,
    -                        ///  High voltage mode. Voltage supplied on VDDH.
    -                        High = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -        };
    -
    -        ///  GPIO Port 1
    -        pub const P0 = extern struct {
    -            reserved1284: [1284]u8,
    -            ///  Write GPIO port
    -            OUT: mmio.Mmio(packed struct(u32) {
    -                ///  Pin 0
    -                PIN0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 1
    -                PIN1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 2
    -                PIN2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 3
    -                PIN3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 4
    -                PIN4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 5
    -                PIN5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 6
    -                PIN6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 7
    -                PIN7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 8
    -                PIN8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 9
    -                PIN9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 10
    -                PIN10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 11
    -                PIN11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 12
    -                PIN12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 13
    -                PIN13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 14
    -                PIN14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 15
    -                PIN15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 16
    -                PIN16: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 17
    -                PIN17: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 18
    -                PIN18: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 19
    -                PIN19: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 20
    -                PIN20: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 21
    -                PIN21: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 22
    -                PIN22: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 23
    -                PIN23: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 24
    -                PIN24: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 25
    -                PIN25: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 26
    -                PIN26: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 27
    -                PIN27: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 28
    -                PIN28: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 29
    -                PIN29: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 30
    -                PIN30: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 31
    -                PIN31: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin driver is low
    -                        Low = 0x0,
    -                        ///  Pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -            }),
    -            ///  Set individual bits in GPIO port
    -            OUTSET: mmio.Mmio(packed struct(u32) {
    -                ///  Pin 0
    -                PIN0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 1
    -                PIN1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 2
    -                PIN2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 3
    -                PIN3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 4
    -                PIN4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 5
    -                PIN5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 6
    -                PIN6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 7
    -                PIN7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 8
    -                PIN8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 9
    -                PIN9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 10
    -                PIN10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 11
    -                PIN11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 12
    -                PIN12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 13
    -                PIN13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 14
    -                PIN14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 15
    -                PIN15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 16
    -                PIN16: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 17
    -                PIN17: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 18
    -                PIN18: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 19
    -                PIN19: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 20
    -                PIN20: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 21
    -                PIN21: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 22
    -                PIN22: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 23
    -                PIN23: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 24
    -                PIN24: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 25
    -                PIN25: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 26
    -                PIN26: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 27
    -                PIN27: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 28
    -                PIN28: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 29
    -                PIN29: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 30
    -                PIN30: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 31
    -                PIN31: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -            }),
    -            ///  Clear individual bits in GPIO port
    -            OUTCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Pin 0
    -                PIN0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 1
    -                PIN1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 2
    -                PIN2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 3
    -                PIN3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 4
    -                PIN4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 5
    -                PIN5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 6
    -                PIN6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 7
    -                PIN7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 8
    -                PIN8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 9
    -                PIN9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 10
    -                PIN10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 11
    -                PIN11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 12
    -                PIN12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 13
    -                PIN13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 14
    -                PIN14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 15
    -                PIN15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 16
    -                PIN16: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 17
    -                PIN17: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 18
    -                PIN18: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 19
    -                PIN19: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 20
    -                PIN20: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 21
    -                PIN21: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 22
    -                PIN22: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 23
    -                PIN23: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 24
    -                PIN24: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 25
    -                PIN25: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 26
    -                PIN26: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 27
    -                PIN27: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 28
    -                PIN28: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 29
    -                PIN29: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 30
    -                PIN30: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 31
    -                PIN31: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin driver is low
    -                        Low = 0x0,
    -                        ///  Read: pin driver is high
    -                        High = 0x1,
    -                    },
    -                },
    -            }),
    -            ///  Read GPIO port
    -            IN: mmio.Mmio(packed struct(u32) {
    -                ///  Pin 0
    -                PIN0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 1
    -                PIN1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 2
    -                PIN2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 3
    -                PIN3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 4
    -                PIN4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 5
    -                PIN5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 6
    -                PIN6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 7
    -                PIN7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 8
    -                PIN8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 9
    -                PIN9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 10
    -                PIN10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 11
    -                PIN11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 12
    -                PIN12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 13
    -                PIN13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 14
    -                PIN14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 15
    -                PIN15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 16
    -                PIN16: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 17
    -                PIN17: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 18
    -                PIN18: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 19
    -                PIN19: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 20
    -                PIN20: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 21
    -                PIN21: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 22
    -                PIN22: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 23
    -                PIN23: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 24
    -                PIN24: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 25
    -                PIN25: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 26
    -                PIN26: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 27
    -                PIN27: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 28
    -                PIN28: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 29
    -                PIN29: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 30
    -                PIN30: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -                ///  Pin 31
    -                PIN31: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin input is low
    -                        Low = 0x0,
    -                        ///  Pin input is high
    -                        High = 0x1,
    -                    },
    -                },
    -            }),
    -            ///  Direction of GPIO pins
    -            DIR: mmio.Mmio(packed struct(u32) {
    -                ///  Pin 0
    -                PIN0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 1
    -                PIN1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 2
    -                PIN2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 3
    -                PIN3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 4
    -                PIN4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 5
    -                PIN5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 6
    -                PIN6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 7
    -                PIN7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 8
    -                PIN8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 9
    -                PIN9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 10
    -                PIN10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 11
    -                PIN11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 12
    -                PIN12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 13
    -                PIN13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 14
    -                PIN14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 15
    -                PIN15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 16
    -                PIN16: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 17
    -                PIN17: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 18
    -                PIN18: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 19
    -                PIN19: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 20
    -                PIN20: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 21
    -                PIN21: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 22
    -                PIN22: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 23
    -                PIN23: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 24
    -                PIN24: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 25
    -                PIN25: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 26
    -                PIN26: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 27
    -                PIN27: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 28
    -                PIN28: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 29
    -                PIN29: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 30
    -                PIN30: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Pin 31
    -                PIN31: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pin set as input
    -                        Input = 0x0,
    -                        ///  Pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -            }),
    -            ///  DIR set register
    -            DIRSET: mmio.Mmio(packed struct(u32) {
    -                ///  Set as output pin 0
    -                PIN0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 1
    -                PIN1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 2
    -                PIN2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 3
    -                PIN3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 4
    -                PIN4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 5
    -                PIN5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 6
    -                PIN6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 7
    -                PIN7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 8
    -                PIN8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 9
    -                PIN9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 10
    -                PIN10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 11
    -                PIN11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 12
    -                PIN12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 13
    -                PIN13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 14
    -                PIN14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 15
    -                PIN15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 16
    -                PIN16: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 17
    -                PIN17: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 18
    -                PIN18: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 19
    -                PIN19: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 20
    -                PIN20: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 21
    -                PIN21: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 22
    -                PIN22: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 23
    -                PIN23: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 24
    -                PIN24: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 25
    -                PIN25: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 26
    -                PIN26: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 27
    -                PIN27: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 28
    -                PIN28: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 29
    -                PIN29: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 30
    -                PIN30: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as output pin 31
    -                PIN31: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -            }),
    -            ///  DIR clear register
    -            DIRCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Set as input pin 0
    -                PIN0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 1
    -                PIN1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 2
    -                PIN2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 3
    -                PIN3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 4
    -                PIN4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 5
    -                PIN5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 6
    -                PIN6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 7
    -                PIN7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 8
    -                PIN8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 9
    -                PIN9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 10
    -                PIN10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 11
    -                PIN11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 12
    -                PIN12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 13
    -                PIN13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 14
    -                PIN14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 15
    -                PIN15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 16
    -                PIN16: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 17
    -                PIN17: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 18
    -                PIN18: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 19
    -                PIN19: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 20
    -                PIN20: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 21
    -                PIN21: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 22
    -                PIN22: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 23
    -                PIN23: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 24
    -                PIN24: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 25
    -                PIN25: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 26
    -                PIN26: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 27
    -                PIN27: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 28
    -                PIN28: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 29
    -                PIN29: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 30
    -                PIN30: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Set as input pin 31
    -                PIN31: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: pin set as input
    -                        Input = 0x0,
    -                        ///  Read: pin set as output
    -                        Output = 0x1,
    -                    },
    -                },
    -            }),
    -            ///  Latch register indicating what GPIO pins that have met the criteria set in the PIN_CNF[n].SENSE registers
    -            LATCH: mmio.Mmio(packed struct(u32) {
    -                ///  Status on whether PIN0 has met criteria set in PIN_CNF0.SENSE register. Write '1' to clear.
    -                PIN0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN1 has met criteria set in PIN_CNF1.SENSE register. Write '1' to clear.
    -                PIN1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN2 has met criteria set in PIN_CNF2.SENSE register. Write '1' to clear.
    -                PIN2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN3 has met criteria set in PIN_CNF3.SENSE register. Write '1' to clear.
    -                PIN3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN4 has met criteria set in PIN_CNF4.SENSE register. Write '1' to clear.
    -                PIN4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN5 has met criteria set in PIN_CNF5.SENSE register. Write '1' to clear.
    -                PIN5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN6 has met criteria set in PIN_CNF6.SENSE register. Write '1' to clear.
    -                PIN6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN7 has met criteria set in PIN_CNF7.SENSE register. Write '1' to clear.
    -                PIN7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN8 has met criteria set in PIN_CNF8.SENSE register. Write '1' to clear.
    -                PIN8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN9 has met criteria set in PIN_CNF9.SENSE register. Write '1' to clear.
    -                PIN9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN10 has met criteria set in PIN_CNF10.SENSE register. Write '1' to clear.
    -                PIN10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN11 has met criteria set in PIN_CNF11.SENSE register. Write '1' to clear.
    -                PIN11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN12 has met criteria set in PIN_CNF12.SENSE register. Write '1' to clear.
    -                PIN12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN13 has met criteria set in PIN_CNF13.SENSE register. Write '1' to clear.
    -                PIN13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN14 has met criteria set in PIN_CNF14.SENSE register. Write '1' to clear.
    -                PIN14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN15 has met criteria set in PIN_CNF15.SENSE register. Write '1' to clear.
    -                PIN15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN16 has met criteria set in PIN_CNF16.SENSE register. Write '1' to clear.
    -                PIN16: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN17 has met criteria set in PIN_CNF17.SENSE register. Write '1' to clear.
    -                PIN17: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN18 has met criteria set in PIN_CNF18.SENSE register. Write '1' to clear.
    -                PIN18: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN19 has met criteria set in PIN_CNF19.SENSE register. Write '1' to clear.
    -                PIN19: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN20 has met criteria set in PIN_CNF20.SENSE register. Write '1' to clear.
    -                PIN20: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN21 has met criteria set in PIN_CNF21.SENSE register. Write '1' to clear.
    -                PIN21: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN22 has met criteria set in PIN_CNF22.SENSE register. Write '1' to clear.
    -                PIN22: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN23 has met criteria set in PIN_CNF23.SENSE register. Write '1' to clear.
    -                PIN23: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN24 has met criteria set in PIN_CNF24.SENSE register. Write '1' to clear.
    -                PIN24: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN25 has met criteria set in PIN_CNF25.SENSE register. Write '1' to clear.
    -                PIN25: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN26 has met criteria set in PIN_CNF26.SENSE register. Write '1' to clear.
    -                PIN26: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN27 has met criteria set in PIN_CNF27.SENSE register. Write '1' to clear.
    -                PIN27: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN28 has met criteria set in PIN_CNF28.SENSE register. Write '1' to clear.
    -                PIN28: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN29 has met criteria set in PIN_CNF29.SENSE register. Write '1' to clear.
    -                PIN29: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN30 has met criteria set in PIN_CNF30.SENSE register. Write '1' to clear.
    -                PIN30: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -                ///  Status on whether PIN31 has met criteria set in PIN_CNF31.SENSE register. Write '1' to clear.
    -                PIN31: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Criteria has not been met
    -                        NotLatched = 0x0,
    -                        ///  Criteria has been met
    -                        Latched = 0x1,
    -                    },
    -                },
    -            }),
    -            ///  Select between default DETECT signal behaviour and LDETECT mode
    -            DETECTMODE: mmio.Mmio(packed struct(u32) {
    -                ///  Select between default DETECT signal behaviour and LDETECT mode
    -                DETECTMODE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  DETECT directly connected to PIN DETECT signals
    -                        Default = 0x0,
    -                        ///  Use the latched LDETECT behaviour
    -                        LDETECT = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1792: [472]u8,
    -            ///  Description collection: Configuration of GPIO pins
    -            PIN_CNF: [32]mmio.Mmio(packed struct(u32) {
    -                ///  Pin direction. Same physical register as DIR register
    -                DIR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Configure pin as an input pin
    -                        Input = 0x0,
    -                        ///  Configure pin as an output pin
    -                        Output = 0x1,
    -                    },
    -                },
    -                ///  Connect or disconnect input buffer
    -                INPUT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Connect input buffer
    -                        Connect = 0x0,
    -                        ///  Disconnect input buffer
    -                        Disconnect = 0x1,
    -                    },
    -                },
    -                ///  Pull configuration
    -                PULL: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  No pull
    -                        Disabled = 0x0,
    -                        ///  Pull down on pin
    -                        Pulldown = 0x1,
    -                        ///  Pull up on pin
    -                        Pullup = 0x3,
    -                        _,
    -                    },
    -                },
    -                reserved8: u4,
    -                ///  Drive configuration
    -                DRIVE: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        ///  Standard '0', standard '1'
    -                        S0S1 = 0x0,
    -                        ///  High drive '0', standard '1'
    -                        H0S1 = 0x1,
    -                        ///  Standard '0', high drive '1'
    -                        S0H1 = 0x2,
    -                        ///  High drive '0', high 'drive '1''
    -                        H0H1 = 0x3,
    -                        ///  Disconnect '0' standard '1' (normally used for wired-or connections)
    -                        D0S1 = 0x4,
    -                        ///  Disconnect '0', high drive '1' (normally used for wired-or connections)
    -                        D0H1 = 0x5,
    -                        ///  Standard '0'. disconnect '1' (normally used for wired-and connections)
    -                        S0D1 = 0x6,
    -                        ///  High drive '0', disconnect '1' (normally used for wired-and connections)
    -                        H0D1 = 0x7,
    -                    },
    -                },
    -                reserved16: u5,
    -                ///  Pin sensing mechanism
    -                SENSE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Sense for high level
    -                        High = 0x2,
    -                        ///  Sense for low level
    -                        Low = 0x3,
    -                        _,
    -                    },
    -                },
    -                padding: u14,
    -            }),
    -        };
    -
    -        ///  Access control lists
    -        pub const ACL = struct {};
    -
    -        ///  2.4 GHz radio
    -        pub const RADIO = extern struct {
    -            ///  Enable RADIO in TX mode
    -            TASKS_TXEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable RADIO in TX mode
    -                TASKS_TXEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Enable RADIO in RX mode
    -            TASKS_RXEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable RADIO in RX mode
    -                TASKS_RXEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Start RADIO
    -            TASKS_START: mmio.Mmio(packed struct(u32) {
    -                ///  Start RADIO
    -                TASKS_START: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Stop RADIO
    -            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    -                ///  Stop RADIO
    -                TASKS_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Disable RADIO
    -            TASKS_DISABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Disable RADIO
    -                TASKS_DISABLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Start the RSSI and take one single sample of the receive signal strength
    -            TASKS_RSSISTART: mmio.Mmio(packed struct(u32) {
    -                ///  Start the RSSI and take one single sample of the receive signal strength
    -                TASKS_RSSISTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Stop the RSSI measurement
    -            TASKS_RSSISTOP: mmio.Mmio(packed struct(u32) {
    -                ///  Stop the RSSI measurement
    -                TASKS_RSSISTOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Start the bit counter
    -            TASKS_BCSTART: mmio.Mmio(packed struct(u32) {
    -                ///  Start the bit counter
    -                TASKS_BCSTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Stop the bit counter
    -            TASKS_BCSTOP: mmio.Mmio(packed struct(u32) {
    -                ///  Stop the bit counter
    -                TASKS_BCSTOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Start the energy detect measurement used in IEEE 802.15.4 mode
    -            TASKS_EDSTART: mmio.Mmio(packed struct(u32) {
    -                ///  Start the energy detect measurement used in IEEE 802.15.4 mode
    -                TASKS_EDSTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Stop the energy detect measurement
    -            TASKS_EDSTOP: mmio.Mmio(packed struct(u32) {
    -                ///  Stop the energy detect measurement
    -                TASKS_EDSTOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Start the clear channel assessment used in IEEE 802.15.4 mode
    -            TASKS_CCASTART: mmio.Mmio(packed struct(u32) {
    -                ///  Start the clear channel assessment used in IEEE 802.15.4 mode
    -                TASKS_CCASTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Stop the clear channel assessment
    -            TASKS_CCASTOP: mmio.Mmio(packed struct(u32) {
    -                ///  Stop the clear channel assessment
    -                TASKS_CCASTOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved256: [204]u8,
    -            ///  RADIO has ramped up and is ready to be started
    -            EVENTS_READY: mmio.Mmio(packed struct(u32) {
    -                ///  RADIO has ramped up and is ready to be started
    -                EVENTS_READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Address sent or received
    -            EVENTS_ADDRESS: mmio.Mmio(packed struct(u32) {
    -                ///  Address sent or received
    -                EVENTS_ADDRESS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Packet payload sent or received
    -            EVENTS_PAYLOAD: mmio.Mmio(packed struct(u32) {
    -                ///  Packet payload sent or received
    -                EVENTS_PAYLOAD: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Packet sent or received
    -            EVENTS_END: mmio.Mmio(packed struct(u32) {
    -                ///  Packet sent or received
    -                EVENTS_END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  RADIO has been disabled
    -            EVENTS_DISABLED: mmio.Mmio(packed struct(u32) {
    -                ///  RADIO has been disabled
    -                EVENTS_DISABLED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  A device address match occurred on the last received packet
    -            EVENTS_DEVMATCH: mmio.Mmio(packed struct(u32) {
    -                ///  A device address match occurred on the last received packet
    -                EVENTS_DEVMATCH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  No device address match occurred on the last received packet
    -            EVENTS_DEVMISS: mmio.Mmio(packed struct(u32) {
    -                ///  No device address match occurred on the last received packet
    -                EVENTS_DEVMISS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Sampling of receive signal strength complete
    -            EVENTS_RSSIEND: mmio.Mmio(packed struct(u32) {
    -                ///  Sampling of receive signal strength complete
    -                EVENTS_RSSIEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved296: [8]u8,
    -            ///  Bit counter reached bit count value
    -            EVENTS_BCMATCH: mmio.Mmio(packed struct(u32) {
    -                ///  Bit counter reached bit count value
    -                EVENTS_BCMATCH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved304: [4]u8,
    -            ///  Packet received with CRC ok
    -            EVENTS_CRCOK: mmio.Mmio(packed struct(u32) {
    -                ///  Packet received with CRC ok
    -                EVENTS_CRCOK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Packet received with CRC error
    -            EVENTS_CRCERROR: mmio.Mmio(packed struct(u32) {
    -                ///  Packet received with CRC error
    -                EVENTS_CRCERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  IEEE 802.15.4 length field received
    -            EVENTS_FRAMESTART: mmio.Mmio(packed struct(u32) {
    -                ///  IEEE 802.15.4 length field received
    -                EVENTS_FRAMESTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Sampling of energy detection complete. A new ED sample is ready for readout from the RADIO.EDSAMPLE register.
    -            EVENTS_EDEND: mmio.Mmio(packed struct(u32) {
    -                ///  Sampling of energy detection complete. A new ED sample is ready for readout from the RADIO.EDSAMPLE register.
    -                EVENTS_EDEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  The sampling of energy detection has stopped
    -            EVENTS_EDSTOPPED: mmio.Mmio(packed struct(u32) {
    -                ///  The sampling of energy detection has stopped
    -                EVENTS_EDSTOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Wireless medium in idle - clear to send
    -            EVENTS_CCAIDLE: mmio.Mmio(packed struct(u32) {
    -                ///  Wireless medium in idle - clear to send
    -                EVENTS_CCAIDLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Wireless medium busy - do not send
    -            EVENTS_CCABUSY: mmio.Mmio(packed struct(u32) {
    -                ///  Wireless medium busy - do not send
    -                EVENTS_CCABUSY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  The CCA has stopped
    -            EVENTS_CCASTOPPED: mmio.Mmio(packed struct(u32) {
    -                ///  The CCA has stopped
    -                EVENTS_CCASTOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Ble_LR CI field received, receive mode is changed from Ble_LR125Kbit to Ble_LR500Kbit.
    -            EVENTS_RATEBOOST: mmio.Mmio(packed struct(u32) {
    -                ///  Ble_LR CI field received, receive mode is changed from Ble_LR125Kbit to Ble_LR500Kbit.
    -                EVENTS_RATEBOOST: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  RADIO has ramped up and is ready to be started TX path
    -            EVENTS_TXREADY: mmio.Mmio(packed struct(u32) {
    -                ///  RADIO has ramped up and is ready to be started TX path
    -                EVENTS_TXREADY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  RADIO has ramped up and is ready to be started RX path
    -            EVENTS_RXREADY: mmio.Mmio(packed struct(u32) {
    -                ///  RADIO has ramped up and is ready to be started RX path
    -                EVENTS_RXREADY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  MAC header match found
    -            EVENTS_MHRMATCH: mmio.Mmio(packed struct(u32) {
    -                ///  MAC header match found
    -                EVENTS_MHRMATCH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved360: [8]u8,
    -            ///  Preamble indicator.
    -            EVENTS_SYNC: mmio.Mmio(packed struct(u32) {
    -                ///  Preamble indicator.
    -                EVENTS_SYNC: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Generated in Ble_LR125Kbit, Ble_LR500Kbit and Ieee802154_250Kbit modes when last bit is sent on air.
    -            EVENTS_PHYEND: mmio.Mmio(packed struct(u32) {
    -                ///  Generated in Ble_LR125Kbit, Ble_LR500Kbit and Ieee802154_250Kbit modes when last bit is sent on air.
    -                EVENTS_PHYEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved512: [144]u8,
    -            ///  Shortcuts between local events and tasks
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                ///  Shortcut between event READY and task START
    -                READY_START: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event END and task DISABLE
    -                END_DISABLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event DISABLED and task TXEN
    -                DISABLED_TXEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event DISABLED and task RXEN
    -                DISABLED_RXEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event ADDRESS and task RSSISTART
    -                ADDRESS_RSSISTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event END and task START
    -                END_START: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event ADDRESS and task BCSTART
    -                ADDRESS_BCSTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved8: u1,
    -                ///  Shortcut between event DISABLED and task RSSISTOP
    -                DISABLED_RSSISTOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved11: u2,
    -                ///  Shortcut between event RXREADY and task CCASTART
    -                RXREADY_CCASTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event CCAIDLE and task TXEN
    -                CCAIDLE_TXEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event CCABUSY and task DISABLE
    -                CCABUSY_DISABLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event FRAMESTART and task BCSTART
    -                FRAMESTART_BCSTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event READY and task EDSTART
    -                READY_EDSTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event EDEND and task DISABLE
    -                EDEND_DISABLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event CCAIDLE and task STOP
    -                CCAIDLE_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event TXREADY and task START
    -                TXREADY_START: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event RXREADY and task START
    -                RXREADY_START: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event PHYEND and task DISABLE
    -                PHYEND_DISABLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event PHYEND and task START
    -                PHYEND_START: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u10,
    -            }),
    -            reserved772: [256]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to enable interrupt for event READY
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event ADDRESS
    -                ADDRESS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event PAYLOAD
    -                PAYLOAD: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event END
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event DISABLED
    -                DISABLED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event DEVMATCH
    -                DEVMATCH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event DEVMISS
    -                DEVMISS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event RSSIEND
    -                RSSIEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved10: u2,
    -                ///  Write '1' to enable interrupt for event BCMATCH
    -                BCMATCH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved12: u1,
    -                ///  Write '1' to enable interrupt for event CRCOK
    -                CRCOK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event CRCERROR
    -                CRCERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event FRAMESTART
    -                FRAMESTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event EDEND
    -                EDEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event EDSTOPPED
    -                EDSTOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event CCAIDLE
    -                CCAIDLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event CCABUSY
    -                CCABUSY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event CCASTOPPED
    -                CCASTOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event RATEBOOST
    -                RATEBOOST: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event TXREADY
    -                TXREADY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event RXREADY
    -                RXREADY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event MHRMATCH
    -                MHRMATCH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved26: u2,
    -                ///  Write '1' to enable interrupt for event SYNC
    -                SYNC: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event PHYEND
    -                PHYEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u4,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to disable interrupt for event READY
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event ADDRESS
    -                ADDRESS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event PAYLOAD
    -                PAYLOAD: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event END
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event DISABLED
    -                DISABLED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event DEVMATCH
    -                DEVMATCH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event DEVMISS
    -                DEVMISS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event RSSIEND
    -                RSSIEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved10: u2,
    -                ///  Write '1' to disable interrupt for event BCMATCH
    -                BCMATCH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved12: u1,
    -                ///  Write '1' to disable interrupt for event CRCOK
    -                CRCOK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event CRCERROR
    -                CRCERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event FRAMESTART
    -                FRAMESTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event EDEND
    -                EDEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event EDSTOPPED
    -                EDSTOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event CCAIDLE
    -                CCAIDLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event CCABUSY
    -                CCABUSY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event CCASTOPPED
    -                CCASTOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event RATEBOOST
    -                RATEBOOST: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event TXREADY
    -                TXREADY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event RXREADY
    -                RXREADY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event MHRMATCH
    -                MHRMATCH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved26: u2,
    -                ///  Write '1' to disable interrupt for event SYNC
    -                SYNC: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event PHYEND
    -                PHYEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u4,
    -            }),
    -            reserved1024: [244]u8,
    -            ///  CRC status
    -            CRCSTATUS: mmio.Mmio(packed struct(u32) {
    -                ///  CRC status of packet received
    -                CRCSTATUS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Packet received with CRC error
    -                        CRCError = 0x0,
    -                        ///  Packet received with CRC ok
    -                        CRCOk = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1032: [4]u8,
    -            ///  Received address
    -            RXMATCH: mmio.Mmio(packed struct(u32) {
    -                ///  Received address
    -                RXMATCH: u3,
    -                padding: u29,
    -            }),
    -            ///  CRC field of previously received packet
    -            RXCRC: mmio.Mmio(packed struct(u32) {
    -                ///  CRC field of previously received packet
    -                RXCRC: u24,
    -                padding: u8,
    -            }),
    -            ///  Device address match index
    -            DAI: mmio.Mmio(packed struct(u32) {
    -                ///  Device address match index
    -                DAI: u3,
    -                padding: u29,
    -            }),
    -            ///  Payload status
    -            PDUSTAT: mmio.Mmio(packed struct(u32) {
    -                ///  Status on payload length vs. PCNF1.MAXLEN
    -                PDUSTAT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Payload less than PCNF1.MAXLEN
    -                        LessThan = 0x0,
    -                        ///  Payload greater than PCNF1.MAXLEN
    -                        GreaterThan = 0x1,
    -                    },
    -                },
    -                ///  Status on what rate packet is received with in Long Range
    -                CISTAT: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Frame is received at 125kbps
    -                        LR125kbit = 0x0,
    -                        ///  Frame is received at 500kbps
    -                        LR500kbit = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            reserved1284: [236]u8,
    -            ///  Packet pointer
    -            PACKETPTR: mmio.Mmio(packed struct(u32) {
    -                ///  Packet pointer
    -                PACKETPTR: u32,
    -            }),
    -            ///  Frequency
    -            FREQUENCY: mmio.Mmio(packed struct(u32) {
    -                ///  Radio channel frequency
    -                FREQUENCY: u7,
    -                reserved8: u1,
    -                ///  Channel map selection.
    -                MAP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Channel map between 2400 MHZ .. 2500 MHz
    -                        Default = 0x0,
    -                        ///  Channel map between 2360 MHZ .. 2460 MHz
    -                        Low = 0x1,
    -                    },
    -                },
    -                padding: u23,
    -            }),
    -            ///  Output power
    -            TXPOWER: mmio.Mmio(packed struct(u32) {
    -                ///  RADIO output power
    -                TXPOWER: packed union {
    -                    raw: u8,
    -                    value: enum(u8) {
    -                        ///  +8 dBm
    -                        Pos8dBm = 0x8,
    -                        ///  +7 dBm
    -                        Pos7dBm = 0x7,
    -                        ///  +6 dBm
    -                        Pos6dBm = 0x6,
    -                        ///  +5 dBm
    -                        Pos5dBm = 0x5,
    -                        ///  +4 dBm
    -                        Pos4dBm = 0x4,
    -                        ///  +3 dBm
    -                        Pos3dBm = 0x3,
    -                        ///  +2 dBm
    -                        Pos2dBm = 0x2,
    -                        ///  0 dBm
    -                        @"0dBm" = 0x0,
    -                        ///  -4 dBm
    -                        Neg4dBm = 0xfc,
    -                        ///  -8 dBm
    -                        Neg8dBm = 0xf8,
    -                        ///  -12 dBm
    -                        Neg12dBm = 0xf4,
    -                        ///  -16 dBm
    -                        Neg16dBm = 0xf0,
    -                        ///  -20 dBm
    -                        Neg20dBm = 0xec,
    -                        ///  Deprecated enumerator - -40 dBm
    -                        Neg30dBm = 0xe2,
    -                        ///  -40 dBm
    -                        Neg40dBm = 0xd8,
    -                        _,
    -                    },
    -                },
    -                padding: u24,
    -            }),
    -            ///  Data rate and modulation
    -            MODE: mmio.Mmio(packed struct(u32) {
    -                ///  Radio data rate and modulation setting. The radio supports frequency-shift keying (FSK) modulation.
    -                MODE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  1 Mbit/s Nordic proprietary radio mode
    -                        Nrf_1Mbit = 0x0,
    -                        ///  2 Mbit/s Nordic proprietary radio mode
    -                        Nrf_2Mbit = 0x1,
    -                        ///  1 Mbit/s BLE
    -                        Ble_1Mbit = 0x3,
    -                        ///  2 Mbit/s BLE
    -                        Ble_2Mbit = 0x4,
    -                        ///  Long range 125 kbit/s TX, 125 kbit/s and 500 kbit/s RX
    -                        Ble_LR125Kbit = 0x5,
    -                        ///  Long range 500 kbit/s TX, 125 kbit/s and 500 kbit/s RX
    -                        Ble_LR500Kbit = 0x6,
    -                        ///  IEEE 802.15.4-2006 250 kbit/s
    -                        Ieee802154_250Kbit = 0xf,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            ///  Packet configuration register 0
    -            PCNF0: mmio.Mmio(packed struct(u32) {
    -                ///  Length on air of LENGTH field in number of bits.
    -                LFLEN: u4,
    -                reserved8: u4,
    -                ///  Length on air of S0 field in number of bytes.
    -                S0LEN: u1,
    -                reserved16: u7,
    -                ///  Length on air of S1 field in number of bits.
    -                S1LEN: u4,
    -                ///  Include or exclude S1 field in RAM
    -                S1INCL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Include S1 field in RAM only if S1LEN > 0
    -                        Automatic = 0x0,
    -                        ///  Always include S1 field in RAM independent of S1LEN
    -                        Include = 0x1,
    -                    },
    -                },
    -                reserved22: u1,
    -                ///  Length of code indicator - long range
    -                CILEN: u2,
    -                ///  Length of preamble on air. Decision point: TASKS_START task
    -                PLEN: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  8-bit preamble
    -                        @"8bit" = 0x0,
    -                        ///  16-bit preamble
    -                        @"16bit" = 0x1,
    -                        ///  32-bit zero preamble - used for IEEE 802.15.4
    -                        @"32bitZero" = 0x2,
    -                        ///  Preamble - used for BLE long range
    -                        LongRange = 0x3,
    -                    },
    -                },
    -                ///  Indicates if LENGTH field contains CRC or not
    -                CRCINC: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  LENGTH does not contain CRC
    -                        Exclude = 0x0,
    -                        ///  LENGTH includes CRC
    -                        Include = 0x1,
    -                    },
    -                },
    -                reserved29: u2,
    -                ///  Length of TERM field in Long Range operation
    -                TERMLEN: u2,
    -                padding: u1,
    -            }),
    -            ///  Packet configuration register 1
    -            PCNF1: mmio.Mmio(packed struct(u32) {
    -                ///  Maximum length of packet payload. If the packet payload is larger than MAXLEN, the radio will truncate the payload to MAXLEN.
    -                MAXLEN: u8,
    -                ///  Static length in number of bytes
    -                STATLEN: u8,
    -                ///  Base address length in number of bytes
    -                BALEN: u3,
    -                reserved24: u5,
    -                ///  On air endianness of packet, this applies to the S0, LENGTH, S1 and the PAYLOAD fields.
    -                ENDIAN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Least significant bit on air first
    -                        Little = 0x0,
    -                        ///  Most significant bit on air first
    -                        Big = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable packet whitening
    -                WHITEEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u6,
    -            }),
    -            ///  Base address 0
    -            BASE0: mmio.Mmio(packed struct(u32) {
    -                ///  Base address 0
    -                BASE0: u32,
    -            }),
    -            ///  Base address 1
    -            BASE1: mmio.Mmio(packed struct(u32) {
    -                ///  Base address 1
    -                BASE1: u32,
    -            }),
    -            ///  Prefixes bytes for logical addresses 0-3
    -            PREFIX0: mmio.Mmio(packed struct(u32) {
    -                ///  Address prefix 0.
    -                AP0: u8,
    -                ///  Address prefix 1.
    -                AP1: u8,
    -                ///  Address prefix 2.
    -                AP2: u8,
    -                ///  Address prefix 3.
    -                AP3: u8,
    -            }),
    -            ///  Prefixes bytes for logical addresses 4-7
    -            PREFIX1: mmio.Mmio(packed struct(u32) {
    -                ///  Address prefix 4.
    -                AP4: u8,
    -                ///  Address prefix 5.
    -                AP5: u8,
    -                ///  Address prefix 6.
    -                AP6: u8,
    -                ///  Address prefix 7.
    -                AP7: u8,
    -            }),
    -            ///  Transmit address select
    -            TXADDRESS: mmio.Mmio(packed struct(u32) {
    -                ///  Transmit address select
    -                TXADDRESS: u3,
    -                padding: u29,
    -            }),
    -            ///  Receive address select
    -            RXADDRESSES: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable reception on logical address 0.
    -                ADDR0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable reception on logical address 1.
    -                ADDR1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable reception on logical address 2.
    -                ADDR2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable reception on logical address 3.
    -                ADDR3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable reception on logical address 4.
    -                ADDR4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable reception on logical address 5.
    -                ADDR5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable reception on logical address 6.
    -                ADDR6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable reception on logical address 7.
    -                ADDR7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u24,
    -            }),
    -            ///  CRC configuration
    -            CRCCNF: mmio.Mmio(packed struct(u32) {
    -                ///  CRC length in number of bytes.
    -                LEN: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  CRC length is zero and CRC calculation is disabled
    -                        Disabled = 0x0,
    -                        ///  CRC length is one byte and CRC calculation is enabled
    -                        One = 0x1,
    -                        ///  CRC length is two bytes and CRC calculation is enabled
    -                        Two = 0x2,
    -                        ///  CRC length is three bytes and CRC calculation is enabled
    -                        Three = 0x3,
    -                    },
    -                },
    -                reserved8: u6,
    -                ///  Include or exclude packet address field out of CRC calculation.
    -                SKIPADDR: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  CRC calculation includes address field
    -                        Include = 0x0,
    -                        ///  CRC calculation does not include address field. The CRC calculation will start at the first byte after the address.
    -                        Skip = 0x1,
    -                        ///  CRC calculation as per 802.15.4 standard. Starting at first byte after length field.
    -                        Ieee802154 = 0x2,
    -                        _,
    -                    },
    -                },
    -                padding: u22,
    -            }),
    -            ///  CRC polynomial
    -            CRCPOLY: mmio.Mmio(packed struct(u32) {
    -                ///  CRC polynomial
    -                CRCPOLY: u24,
    -                padding: u8,
    -            }),
    -            ///  CRC initial value
    -            CRCINIT: mmio.Mmio(packed struct(u32) {
    -                ///  CRC initial value
    -                CRCINIT: u24,
    -                padding: u8,
    -            }),
    -            reserved1348: [4]u8,
    -            ///  Interframe spacing in us
    -            TIFS: mmio.Mmio(packed struct(u32) {
    -                ///  Interframe spacing in us
    -                TIFS: u10,
    -                padding: u22,
    -            }),
    -            ///  RSSI sample
    -            RSSISAMPLE: mmio.Mmio(packed struct(u32) {
    -                ///  RSSI sample
    -                RSSISAMPLE: u7,
    -                padding: u25,
    -            }),
    -            reserved1360: [4]u8,
    -            ///  Current radio state
    -            STATE: mmio.Mmio(packed struct(u32) {
    -                ///  Current radio state
    -                STATE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  RADIO is in the Disabled state
    -                        Disabled = 0x0,
    -                        ///  RADIO is in the RXRU state
    -                        RxRu = 0x1,
    -                        ///  RADIO is in the RXIDLE state
    -                        RxIdle = 0x2,
    -                        ///  RADIO is in the RX state
    -                        Rx = 0x3,
    -                        ///  RADIO is in the RXDISABLED state
    -                        RxDisable = 0x4,
    -                        ///  RADIO is in the TXRU state
    -                        TxRu = 0x9,
    -                        ///  RADIO is in the TXIDLE state
    -                        TxIdle = 0xa,
    -                        ///  RADIO is in the TX state
    -                        Tx = 0xb,
    -                        ///  RADIO is in the TXDISABLED state
    -                        TxDisable = 0xc,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            ///  Data whitening initial value
    -            DATAWHITEIV: mmio.Mmio(packed struct(u32) {
    -                ///  Data whitening initial value. Bit 6 is hard-wired to '1', writing '0' to it has no effect, and it will always be read back and used by the device as '1'.
    -                DATAWHITEIV: u7,
    -                padding: u25,
    -            }),
    -            reserved1376: [8]u8,
    -            ///  Bit counter compare
    -            BCC: mmio.Mmio(packed struct(u32) {
    -                ///  Bit counter compare
    -                BCC: u32,
    -            }),
    -            reserved1536: [156]u8,
    -            ///  Description collection: Device address base segment n
    -            DAB: [8]mmio.Mmio(packed struct(u32) {
    -                ///  Device address base segment n
    -                DAB: u32,
    -            }),
    -            ///  Description collection: Device address prefix n
    -            DAP: [8]mmio.Mmio(packed struct(u32) {
    -                ///  Device address prefix n
    -                DAP: u16,
    -                padding: u16,
    -            }),
    -            ///  Device address match configuration
    -            DACNF: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable device address matching using device address 0
    -                ENA0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable device address matching using device address 1
    -                ENA1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable device address matching using device address 2
    -                ENA2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable device address matching using device address 3
    -                ENA3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable device address matching using device address 4
    -                ENA4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable device address matching using device address 5
    -                ENA5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable device address matching using device address 6
    -                ENA6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable device address matching using device address 7
    -                ENA7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  TxAdd for device address 0
    -                TXADD0: u1,
    -                ///  TxAdd for device address 1
    -                TXADD1: u1,
    -                ///  TxAdd for device address 2
    -                TXADD2: u1,
    -                ///  TxAdd for device address 3
    -                TXADD3: u1,
    -                ///  TxAdd for device address 4
    -                TXADD4: u1,
    -                ///  TxAdd for device address 5
    -                TXADD5: u1,
    -                ///  TxAdd for device address 6
    -                TXADD6: u1,
    -                ///  TxAdd for device address 7
    -                TXADD7: u1,
    -                padding: u16,
    -            }),
    -            ///  Search pattern configuration
    -            MHRMATCHCONF: mmio.Mmio(packed struct(u32) {
    -                ///  Search pattern configuration
    -                MHRMATCHCONF: u32,
    -            }),
    -            ///  Pattern mask
    -            MHRMATCHMAS: mmio.Mmio(packed struct(u32) {
    -                ///  Pattern mask
    -                MHRMATCHMAS: u32,
    -            }),
    -            reserved1616: [4]u8,
    -            ///  Radio mode configuration register 0
    -            MODECNF0: mmio.Mmio(packed struct(u32) {
    -                ///  Radio ramp-up time
    -                RU: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Default ramp-up time (tRXEN and tTXEN), compatible with firmware written for nRF51
    -                        Default = 0x0,
    -                        ///  Fast ramp-up (tRXEN,FAST and tTXEN,FAST), see electrical specification for more information
    -                        Fast = 0x1,
    -                    },
    -                },
    -                reserved8: u7,
    -                ///  Default TX value
    -                DTX: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Transmit '1'
    -                        B1 = 0x0,
    -                        ///  Transmit '0'
    -                        B0 = 0x1,
    -                        ///  Transmit center frequency
    -                        Center = 0x2,
    -                        _,
    -                    },
    -                },
    -                padding: u22,
    -            }),
    -            reserved1632: [12]u8,
    -            ///  IEEE 802.15.4 start of frame delimiter
    -            SFD: mmio.Mmio(packed struct(u32) {
    -                ///  IEEE 802.15.4 start of frame delimiter
    -                SFD: u8,
    -                padding: u24,
    -            }),
    -            ///  IEEE 802.15.4 energy detect loop count
    -            EDCNT: mmio.Mmio(packed struct(u32) {
    -                ///  IEEE 802.15.4 energy detect loop count
    -                EDCNT: u21,
    -                padding: u11,
    -            }),
    -            ///  IEEE 802.15.4 energy detect level
    -            EDSAMPLE: mmio.Mmio(packed struct(u32) {
    -                ///  IEEE 802.15.4 energy detect level
    -                EDLVL: u8,
    -                padding: u24,
    -            }),
    -            ///  IEEE 802.15.4 clear channel assessment control
    -            CCACTRL: mmio.Mmio(packed struct(u32) {
    -                ///  CCA mode of operation
    -                CCAMODE: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        ///  Energy above threshold
    -                        EdMode = 0x0,
    -                        ///  Carrier seen
    -                        CarrierMode = 0x1,
    -                        ///  Energy above threshold AND carrier seen
    -                        CarrierAndEdMode = 0x2,
    -                        ///  Energy above threshold OR carrier seen
    -                        CarrierOrEdMode = 0x3,
    -                        ///  Energy above threshold test mode that will abort when first ED measurement over threshold is seen. No averaging.
    -                        EdModeTest1 = 0x4,
    -                        _,
    -                    },
    -                },
    -                reserved8: u5,
    -                ///  CCA energy busy threshold. Used in all the CCA modes except CarrierMode.
    -                CCAEDTHRES: u8,
    -                ///  CCA correlator busy threshold. Only relevant to CarrierMode, CarrierAndEdMode and CarrierOrEdMode.
    -                CCACORRTHRES: u8,
    -                ///  Limit for occurances above CCACORRTHRES. When not equal to zero the corrolator based signal detect is enabled.
    -                CCACORRCNT: u8,
    -            }),
    -            reserved4092: [2444]u8,
    -            ///  Peripheral power control
    -            POWER: mmio.Mmio(packed struct(u32) {
    -                ///  Peripheral power control. The peripheral and its registers will be reset to its initial state by switching the peripheral off and then back on again.
    -                POWER: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Peripheral is powered off
    -                        Disabled = 0x0,
    -                        ///  Peripheral is powered on
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -        };
    -
    -        ///  Universal Asynchronous Receiver/Transmitter
    -        pub const UART0 = extern struct {
    -            ///  Start UART receiver
    -            TASKS_STARTRX: mmio.Mmio(packed struct(u32) {
    -                ///  Start UART receiver
    -                TASKS_STARTRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Stop UART receiver
    -            TASKS_STOPRX: mmio.Mmio(packed struct(u32) {
    -                ///  Stop UART receiver
    -                TASKS_STOPRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Start UART transmitter
    -            TASKS_STARTTX: mmio.Mmio(packed struct(u32) {
    -                ///  Start UART transmitter
    -                TASKS_STARTTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Stop UART transmitter
    -            TASKS_STOPTX: mmio.Mmio(packed struct(u32) {
    -                ///  Stop UART transmitter
    -                TASKS_STOPTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved28: [12]u8,
    -            ///  Suspend UART
    -            TASKS_SUSPEND: mmio.Mmio(packed struct(u32) {
    -                ///  Suspend UART
    -                TASKS_SUSPEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved256: [224]u8,
    -            ///  CTS is activated (set low). Clear To Send.
    -            EVENTS_CTS: mmio.Mmio(packed struct(u32) {
    -                ///  CTS is activated (set low). Clear To Send.
    -                EVENTS_CTS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  CTS is deactivated (set high). Not Clear To Send.
    -            EVENTS_NCTS: mmio.Mmio(packed struct(u32) {
    -                ///  CTS is deactivated (set high). Not Clear To Send.
    -                EVENTS_NCTS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Data received in RXD
    -            EVENTS_RXDRDY: mmio.Mmio(packed struct(u32) {
    -                ///  Data received in RXD
    -                EVENTS_RXDRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved284: [16]u8,
    -            ///  Data sent from TXD
    -            EVENTS_TXDRDY: mmio.Mmio(packed struct(u32) {
    -                ///  Data sent from TXD
    -                EVENTS_TXDRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved292: [4]u8,
    -            ///  Error detected
    -            EVENTS_ERROR: mmio.Mmio(packed struct(u32) {
    -                ///  Error detected
    -                EVENTS_ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved324: [28]u8,
    -            ///  Receiver timeout
    -            EVENTS_RXTO: mmio.Mmio(packed struct(u32) {
    -                ///  Receiver timeout
    -                EVENTS_RXTO: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved512: [184]u8,
    -            ///  Shortcuts between local events and tasks
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                reserved3: u3,
    -                ///  Shortcut between event CTS and task STARTRX
    -                CTS_STARTRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event NCTS and task STOPRX
    -                NCTS_STOPRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u27,
    -            }),
    -            reserved772: [256]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to enable interrupt for event CTS
    -                CTS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event NCTS
    -                NCTS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event RXDRDY
    -                RXDRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved7: u4,
    -                ///  Write '1' to enable interrupt for event TXDRDY
    -                TXDRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved9: u1,
    -                ///  Write '1' to enable interrupt for event ERROR
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved17: u7,
    -                ///  Write '1' to enable interrupt for event RXTO
    -                RXTO: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u14,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to disable interrupt for event CTS
    -                CTS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event NCTS
    -                NCTS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event RXDRDY
    -                RXDRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved7: u4,
    -                ///  Write '1' to disable interrupt for event TXDRDY
    -                TXDRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved9: u1,
    -                ///  Write '1' to disable interrupt for event ERROR
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved17: u7,
    -                ///  Write '1' to disable interrupt for event RXTO
    -                RXTO: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u14,
    -            }),
    -            reserved1152: [372]u8,
    -            ///  Error source
    -            ERRORSRC: mmio.Mmio(packed struct(u32) {
    -                ///  Overrun error
    -                OVERRUN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: error not present
    -                        NotPresent = 0x0,
    -                        ///  Read: error present
    -                        Present = 0x1,
    -                    },
    -                },
    -                ///  Parity error
    -                PARITY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: error not present
    -                        NotPresent = 0x0,
    -                        ///  Read: error present
    -                        Present = 0x1,
    -                    },
    -                },
    -                ///  Framing error occurred
    -                FRAMING: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: error not present
    -                        NotPresent = 0x0,
    -                        ///  Read: error present
    -                        Present = 0x1,
    -                    },
    -                },
    -                ///  Break condition
    -                BREAK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: error not present
    -                        NotPresent = 0x0,
    -                        ///  Read: error present
    -                        Present = 0x1,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1280: [124]u8,
    -            ///  Enable UART
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable UART
    -                ENABLE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  Disable UART
    -                        Disabled = 0x0,
    -                        ///  Enable UART
    -                        Enabled = 0x4,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1304: [20]u8,
    -            ///  RXD register
    -            RXD: mmio.Mmio(packed struct(u32) {
    -                ///  RX data received in previous transfers, double buffered
    -                RXD: u8,
    -                padding: u24,
    -            }),
    -            ///  TXD register
    -            TXD: mmio.Mmio(packed struct(u32) {
    -                ///  TX data to be transferred
    -                TXD: u8,
    -                padding: u24,
    -            }),
    -            reserved1316: [4]u8,
    -            ///  Baud rate. Accuracy depends on the HFCLK source selected.
    -            BAUDRATE: mmio.Mmio(packed struct(u32) {
    -                ///  Baud rate
    -                BAUDRATE: packed union {
    -                    raw: u32,
    -                    value: enum(u32) {
    -                        ///  1200 baud (actual rate: 1205)
    -                        Baud1200 = 0x4f000,
    -                        ///  2400 baud (actual rate: 2396)
    -                        Baud2400 = 0x9d000,
    -                        ///  4800 baud (actual rate: 4808)
    -                        Baud4800 = 0x13b000,
    -                        ///  9600 baud (actual rate: 9598)
    -                        Baud9600 = 0x275000,
    -                        ///  14400 baud (actual rate: 14414)
    -                        Baud14400 = 0x3b0000,
    -                        ///  19200 baud (actual rate: 19208)
    -                        Baud19200 = 0x4ea000,
    -                        ///  28800 baud (actual rate: 28829)
    -                        Baud28800 = 0x75f000,
    -                        ///  31250 baud
    -                        Baud31250 = 0x800000,
    -                        ///  38400 baud (actual rate: 38462)
    -                        Baud38400 = 0x9d5000,
    -                        ///  56000 baud (actual rate: 55944)
    -                        Baud56000 = 0xe50000,
    -                        ///  57600 baud (actual rate: 57762)
    -                        Baud57600 = 0xebf000,
    -                        ///  76800 baud (actual rate: 76923)
    -                        Baud76800 = 0x13a9000,
    -                        ///  115200 baud (actual rate: 115942)
    -                        Baud115200 = 0x1d7e000,
    -                        ///  230400 baud (actual rate: 231884)
    -                        Baud230400 = 0x3afb000,
    -                        ///  250000 baud
    -                        Baud250000 = 0x4000000,
    -                        ///  460800 baud (actual rate: 470588)
    -                        Baud460800 = 0x75f7000,
    -                        ///  921600 baud (actual rate: 941176)
    -                        Baud921600 = 0xebed000,
    -                        ///  1Mega baud
    -                        Baud1M = 0x10000000,
    -                        _,
    -                    },
    -                },
    -            }),
    -            reserved1388: [68]u8,
    -            ///  Configuration of parity and hardware flow control
    -            CONFIG: mmio.Mmio(packed struct(u32) {
    -                ///  Hardware flow control
    -                HWFC: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Parity
    -                PARITY: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        ///  Exclude parity bit
    -                        Excluded = 0x0,
    -                        ///  Include parity bit
    -                        Included = 0x7,
    -                        _,
    -                    },
    -                },
    -                ///  Stop bits
    -                STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  One stop bit
    -                        One = 0x0,
    -                        ///  Two stop bits
    -                        Two = 0x1,
    -                    },
    -                },
    -                padding: u27,
    -            }),
    -        };
    -
    -        ///  UART with EasyDMA 0
    -        pub const UARTE0 = extern struct {
    -            ///  Start UART receiver
    -            TASKS_STARTRX: mmio.Mmio(packed struct(u32) {
    -                ///  Start UART receiver
    -                TASKS_STARTRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Stop UART receiver
    -            TASKS_STOPRX: mmio.Mmio(packed struct(u32) {
    -                ///  Stop UART receiver
    -                TASKS_STOPRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Start UART transmitter
    -            TASKS_STARTTX: mmio.Mmio(packed struct(u32) {
    -                ///  Start UART transmitter
    -                TASKS_STARTTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Stop UART transmitter
    -            TASKS_STOPTX: mmio.Mmio(packed struct(u32) {
    -                ///  Stop UART transmitter
    -                TASKS_STOPTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved44: [28]u8,
    -            ///  Flush RX FIFO into RX buffer
    -            TASKS_FLUSHRX: mmio.Mmio(packed struct(u32) {
    -                ///  Flush RX FIFO into RX buffer
    -                TASKS_FLUSHRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved256: [208]u8,
    -            ///  CTS is activated (set low). Clear To Send.
    -            EVENTS_CTS: mmio.Mmio(packed struct(u32) {
    -                ///  CTS is activated (set low). Clear To Send.
    -                EVENTS_CTS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  CTS is deactivated (set high). Not Clear To Send.
    -            EVENTS_NCTS: mmio.Mmio(packed struct(u32) {
    -                ///  CTS is deactivated (set high). Not Clear To Send.
    -                EVENTS_NCTS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Data received in RXD (but potentially not yet transferred to Data RAM)
    -            EVENTS_RXDRDY: mmio.Mmio(packed struct(u32) {
    -                ///  Data received in RXD (but potentially not yet transferred to Data RAM)
    -                EVENTS_RXDRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved272: [4]u8,
    -            ///  Receive buffer is filled up
    -            EVENTS_ENDRX: mmio.Mmio(packed struct(u32) {
    -                ///  Receive buffer is filled up
    -                EVENTS_ENDRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved284: [8]u8,
    -            ///  Data sent from TXD
    -            EVENTS_TXDRDY: mmio.Mmio(packed struct(u32) {
    -                ///  Data sent from TXD
    -                EVENTS_TXDRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Last TX byte transmitted
    -            EVENTS_ENDTX: mmio.Mmio(packed struct(u32) {
    -                ///  Last TX byte transmitted
    -                EVENTS_ENDTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Error detected
    -            EVENTS_ERROR: mmio.Mmio(packed struct(u32) {
    -                ///  Error detected
    -                EVENTS_ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved324: [28]u8,
    -            ///  Receiver timeout
    -            EVENTS_RXTO: mmio.Mmio(packed struct(u32) {
    -                ///  Receiver timeout
    -                EVENTS_RXTO: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved332: [4]u8,
    -            ///  UART receiver has started
    -            EVENTS_RXSTARTED: mmio.Mmio(packed struct(u32) {
    -                ///  UART receiver has started
    -                EVENTS_RXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  UART transmitter has started
    -            EVENTS_TXSTARTED: mmio.Mmio(packed struct(u32) {
    -                ///  UART transmitter has started
    -                EVENTS_TXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved344: [4]u8,
    -            ///  Transmitter stopped
    -            EVENTS_TXSTOPPED: mmio.Mmio(packed struct(u32) {
    -                ///  Transmitter stopped
    -                EVENTS_TXSTOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved512: [164]u8,
    -            ///  Shortcuts between local events and tasks
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                reserved5: u5,
    -                ///  Shortcut between event ENDRX and task STARTRX
    -                ENDRX_STARTRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event ENDRX and task STOPRX
    -                ENDRX_STOPRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u25,
    -            }),
    -            reserved768: [252]u8,
    -            ///  Enable or disable interrupt
    -            INTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable interrupt for event CTS
    -                CTS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event NCTS
    -                NCTS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event RXDRDY
    -                RXDRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved4: u1,
    -                ///  Enable or disable interrupt for event ENDRX
    -                ENDRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved7: u2,
    -                ///  Enable or disable interrupt for event TXDRDY
    -                TXDRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event ENDTX
    -                ENDTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event ERROR
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved17: u7,
    -                ///  Enable or disable interrupt for event RXTO
    -                RXTO: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved19: u1,
    -                ///  Enable or disable interrupt for event RXSTARTED
    -                RXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event TXSTARTED
    -                TXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved22: u1,
    -                ///  Enable or disable interrupt for event TXSTOPPED
    -                TXSTOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u9,
    -            }),
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to enable interrupt for event CTS
    -                CTS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event NCTS
    -                NCTS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event RXDRDY
    -                RXDRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved4: u1,
    -                ///  Write '1' to enable interrupt for event ENDRX
    -                ENDRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved7: u2,
    -                ///  Write '1' to enable interrupt for event TXDRDY
    -                TXDRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event ENDTX
    -                ENDTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event ERROR
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved17: u7,
    -                ///  Write '1' to enable interrupt for event RXTO
    -                RXTO: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved19: u1,
    -                ///  Write '1' to enable interrupt for event RXSTARTED
    -                RXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event TXSTARTED
    -                TXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved22: u1,
    -                ///  Write '1' to enable interrupt for event TXSTOPPED
    -                TXSTOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u9,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to disable interrupt for event CTS
    -                CTS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event NCTS
    -                NCTS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event RXDRDY
    -                RXDRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved4: u1,
    -                ///  Write '1' to disable interrupt for event ENDRX
    -                ENDRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved7: u2,
    -                ///  Write '1' to disable interrupt for event TXDRDY
    -                TXDRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event ENDTX
    -                ENDTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event ERROR
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved17: u7,
    -                ///  Write '1' to disable interrupt for event RXTO
    -                RXTO: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved19: u1,
    -                ///  Write '1' to disable interrupt for event RXSTARTED
    -                RXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event TXSTARTED
    -                TXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved22: u1,
    -                ///  Write '1' to disable interrupt for event TXSTOPPED
    -                TXSTOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u9,
    -            }),
    -            reserved1152: [372]u8,
    -            ///  Error source Note : this register is read / write one to clear.
    -            ERRORSRC: mmio.Mmio(packed struct(u32) {
    -                ///  Overrun error
    -                OVERRUN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: error not present
    -                        NotPresent = 0x0,
    -                        ///  Read: error present
    -                        Present = 0x1,
    -                    },
    -                },
    -                ///  Parity error
    -                PARITY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: error not present
    -                        NotPresent = 0x0,
    -                        ///  Read: error present
    -                        Present = 0x1,
    -                    },
    -                },
    -                ///  Framing error occurred
    -                FRAMING: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: error not present
    -                        NotPresent = 0x0,
    -                        ///  Read: error present
    -                        Present = 0x1,
    -                    },
    -                },
    -                ///  Break condition
    -                BREAK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: error not present
    -                        NotPresent = 0x0,
    -                        ///  Read: error present
    -                        Present = 0x1,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1280: [124]u8,
    -            ///  Enable UART
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable UARTE
    -                ENABLE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  Disable UARTE
    -                        Disabled = 0x0,
    -                        ///  Enable UARTE
    -                        Enabled = 0x8,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1316: [32]u8,
    -            ///  Baud rate. Accuracy depends on the HFCLK source selected.
    -            BAUDRATE: mmio.Mmio(packed struct(u32) {
    -                ///  Baud rate
    -                BAUDRATE: packed union {
    -                    raw: u32,
    -                    value: enum(u32) {
    -                        ///  1200 baud (actual rate: 1205)
    -                        Baud1200 = 0x4f000,
    -                        ///  2400 baud (actual rate: 2396)
    -                        Baud2400 = 0x9d000,
    -                        ///  4800 baud (actual rate: 4808)
    -                        Baud4800 = 0x13b000,
    -                        ///  9600 baud (actual rate: 9598)
    -                        Baud9600 = 0x275000,
    -                        ///  14400 baud (actual rate: 14401)
    -                        Baud14400 = 0x3af000,
    -                        ///  19200 baud (actual rate: 19208)
    -                        Baud19200 = 0x4ea000,
    -                        ///  28800 baud (actual rate: 28777)
    -                        Baud28800 = 0x75c000,
    -                        ///  31250 baud
    -                        Baud31250 = 0x800000,
    -                        ///  38400 baud (actual rate: 38369)
    -                        Baud38400 = 0x9d0000,
    -                        ///  56000 baud (actual rate: 55944)
    -                        Baud56000 = 0xe50000,
    -                        ///  57600 baud (actual rate: 57554)
    -                        Baud57600 = 0xeb0000,
    -                        ///  76800 baud (actual rate: 76923)
    -                        Baud76800 = 0x13a9000,
    -                        ///  115200 baud (actual rate: 115108)
    -                        Baud115200 = 0x1d60000,
    -                        ///  230400 baud (actual rate: 231884)
    -                        Baud230400 = 0x3b00000,
    -                        ///  250000 baud
    -                        Baud250000 = 0x4000000,
    -                        ///  460800 baud (actual rate: 457143)
    -                        Baud460800 = 0x7400000,
    -                        ///  921600 baud (actual rate: 941176)
    -                        Baud921600 = 0xf000000,
    -                        ///  1Mega baud
    -                        Baud1M = 0x10000000,
    -                        _,
    -                    },
    -                },
    -            }),
    -            reserved1388: [68]u8,
    -            ///  Configuration of parity and hardware flow control
    -            CONFIG: mmio.Mmio(packed struct(u32) {
    -                ///  Hardware flow control
    -                HWFC: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Parity
    -                PARITY: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        ///  Exclude parity bit
    -                        Excluded = 0x0,
    -                        ///  Include even parity bit
    -                        Included = 0x7,
    -                        _,
    -                    },
    -                },
    -                ///  Stop bits
    -                STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  One stop bit
    -                        One = 0x0,
    -                        ///  Two stop bits
    -                        Two = 0x1,
    -                    },
    -                },
    -                padding: u27,
    -            }),
    -        };
    -
    -        ///  Serial Peripheral Interface 0
    -        pub const SPI0 = extern struct {
    -            reserved264: [264]u8,
    -            ///  TXD byte sent and RXD byte received
    -            EVENTS_READY: mmio.Mmio(packed struct(u32) {
    -                ///  TXD byte sent and RXD byte received
    -                EVENTS_READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved772: [504]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                reserved2: u2,
    -                ///  Write '1' to enable interrupt for event READY
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                reserved2: u2,
    -                ///  Write '1' to disable interrupt for event READY
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            reserved1280: [500]u8,
    -            ///  Enable SPI
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable SPI
    -                ENABLE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  Disable SPI
    -                        Disabled = 0x0,
    -                        ///  Enable SPI
    -                        Enabled = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1304: [20]u8,
    -            ///  RXD register
    -            RXD: mmio.Mmio(packed struct(u32) {
    -                ///  RX data received. Double buffered
    -                RXD: u8,
    -                padding: u24,
    -            }),
    -            ///  TXD register
    -            TXD: mmio.Mmio(packed struct(u32) {
    -                ///  TX data to send. Double buffered
    -                TXD: u8,
    -                padding: u24,
    -            }),
    -            reserved1316: [4]u8,
    -            ///  SPI frequency. Accuracy depends on the HFCLK source selected.
    -            FREQUENCY: mmio.Mmio(packed struct(u32) {
    -                ///  SPI master data rate
    -                FREQUENCY: packed union {
    -                    raw: u32,
    -                    value: enum(u32) {
    -                        ///  125 kbps
    -                        K125 = 0x2000000,
    -                        ///  250 kbps
    -                        K250 = 0x4000000,
    -                        ///  500 kbps
    -                        K500 = 0x8000000,
    -                        ///  1 Mbps
    -                        M1 = 0x10000000,
    -                        ///  2 Mbps
    -                        M2 = 0x20000000,
    -                        ///  4 Mbps
    -                        M4 = 0x40000000,
    -                        ///  8 Mbps
    -                        M8 = 0x80000000,
    -                        _,
    -                    },
    -                },
    -            }),
    -            reserved1364: [44]u8,
    -            ///  Configuration register
    -            CONFIG: mmio.Mmio(packed struct(u32) {
    -                ///  Bit order
    -                ORDER: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Most significant bit shifted out first
    -                        MsbFirst = 0x0,
    -                        ///  Least significant bit shifted out first
    -                        LsbFirst = 0x1,
    -                    },
    -                },
    -                ///  Serial clock (SCK) phase
    -                CPHA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Sample on leading edge of clock, shift serial data on trailing edge
    -                        Leading = 0x0,
    -                        ///  Sample on trailing edge of clock, shift serial data on leading edge
    -                        Trailing = 0x1,
    -                    },
    -                },
    -                ///  Serial clock (SCK) polarity
    -                CPOL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Active high
    -                        ActiveHigh = 0x0,
    -                        ///  Active low
    -                        ActiveLow = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -        };
    -
    -        ///  Serial Peripheral Interface Master with EasyDMA 0
    -        pub const SPIM0 = extern struct {
    -            reserved16: [16]u8,
    -            ///  Start SPI transaction
    -            TASKS_START: mmio.Mmio(packed struct(u32) {
    -                ///  Start SPI transaction
    -                TASKS_START: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Stop SPI transaction
    -            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    -                ///  Stop SPI transaction
    -                TASKS_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved28: [4]u8,
    -            ///  Suspend SPI transaction
    -            TASKS_SUSPEND: mmio.Mmio(packed struct(u32) {
    -                ///  Suspend SPI transaction
    -                TASKS_SUSPEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Resume SPI transaction
    -            TASKS_RESUME: mmio.Mmio(packed struct(u32) {
    -                ///  Resume SPI transaction
    -                TASKS_RESUME: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved260: [224]u8,
    -            ///  SPI transaction has stopped
    -            EVENTS_STOPPED: mmio.Mmio(packed struct(u32) {
    -                ///  SPI transaction has stopped
    -                EVENTS_STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved272: [8]u8,
    -            ///  End of RXD buffer reached
    -            EVENTS_ENDRX: mmio.Mmio(packed struct(u32) {
    -                ///  End of RXD buffer reached
    -                EVENTS_ENDRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved280: [4]u8,
    -            ///  End of RXD buffer and TXD buffer reached
    -            EVENTS_END: mmio.Mmio(packed struct(u32) {
    -                ///  End of RXD buffer and TXD buffer reached
    -                EVENTS_END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved288: [4]u8,
    -            ///  End of TXD buffer reached
    -            EVENTS_ENDTX: mmio.Mmio(packed struct(u32) {
    -                ///  End of TXD buffer reached
    -                EVENTS_ENDTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved332: [40]u8,
    -            ///  Transaction started
    -            EVENTS_STARTED: mmio.Mmio(packed struct(u32) {
    -                ///  Transaction started
    -                EVENTS_STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved512: [176]u8,
    -            ///  Shortcuts between local events and tasks
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                reserved17: u17,
    -                ///  Shortcut between event END and task START
    -                END_START: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u14,
    -            }),
    -            reserved772: [256]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to enable interrupt for event STOPPED
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved4: u2,
    -                ///  Write '1' to enable interrupt for event ENDRX
    -                ENDRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved6: u1,
    -                ///  Write '1' to enable interrupt for event END
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved8: u1,
    -                ///  Write '1' to enable interrupt for event ENDTX
    -                ENDTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved19: u10,
    -                ///  Write '1' to enable interrupt for event STARTED
    -                STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u12,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to disable interrupt for event STOPPED
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved4: u2,
    -                ///  Write '1' to disable interrupt for event ENDRX
    -                ENDRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved6: u1,
    -                ///  Write '1' to disable interrupt for event END
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved8: u1,
    -                ///  Write '1' to disable interrupt for event ENDTX
    -                ENDTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved19: u10,
    -                ///  Write '1' to disable interrupt for event STARTED
    -                STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u12,
    -            }),
    -            reserved1024: [244]u8,
    -            ///  Stall status for EasyDMA RAM accesses. The fields in this register is set to STALL by hardware whenever a stall occurres and can be cleared (set to NOSTALL) by the CPU.
    -            STALLSTAT: mmio.Mmio(packed struct(u32) {
    -                ///  Stall status for EasyDMA RAM reads
    -                TX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  No stall
    -                        NOSTALL = 0x0,
    -                        ///  A stall has occurred
    -                        STALL = 0x1,
    -                    },
    -                },
    -                ///  Stall status for EasyDMA RAM writes
    -                RX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  No stall
    -                        NOSTALL = 0x0,
    -                        ///  A stall has occurred
    -                        STALL = 0x1,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            reserved1280: [252]u8,
    -            ///  Enable SPIM
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable SPIM
    -                ENABLE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  Disable SPIM
    -                        Disabled = 0x0,
    -                        ///  Enable SPIM
    -                        Enabled = 0x7,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1316: [32]u8,
    -            ///  SPI frequency. Accuracy depends on the HFCLK source selected.
    -            FREQUENCY: mmio.Mmio(packed struct(u32) {
    -                ///  SPI master data rate
    -                FREQUENCY: packed union {
    -                    raw: u32,
    -                    value: enum(u32) {
    -                        ///  125 kbps
    -                        K125 = 0x2000000,
    -                        ///  250 kbps
    -                        K250 = 0x4000000,
    -                        ///  500 kbps
    -                        K500 = 0x8000000,
    -                        ///  1 Mbps
    -                        M1 = 0x10000000,
    -                        ///  2 Mbps
    -                        M2 = 0x20000000,
    -                        ///  4 Mbps
    -                        M4 = 0x40000000,
    -                        ///  8 Mbps
    -                        M8 = 0x80000000,
    -                        ///  16 Mbps
    -                        M16 = 0xa000000,
    -                        ///  32 Mbps
    -                        M32 = 0x14000000,
    -                        _,
    -                    },
    -                },
    -            }),
    -            reserved1364: [44]u8,
    -            ///  Configuration register
    -            CONFIG: mmio.Mmio(packed struct(u32) {
    -                ///  Bit order
    -                ORDER: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Most significant bit shifted out first
    -                        MsbFirst = 0x0,
    -                        ///  Least significant bit shifted out first
    -                        LsbFirst = 0x1,
    -                    },
    -                },
    -                ///  Serial clock (SCK) phase
    -                CPHA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Sample on leading edge of clock, shift serial data on trailing edge
    -                        Leading = 0x0,
    -                        ///  Sample on trailing edge of clock, shift serial data on leading edge
    -                        Trailing = 0x1,
    -                    },
    -                },
    -                ///  Serial clock (SCK) polarity
    -                CPOL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Active high
    -                        ActiveHigh = 0x0,
    -                        ///  Active low
    -                        ActiveLow = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            reserved1384: [16]u8,
    -            ///  Polarity of CSN output
    -            CSNPOL: mmio.Mmio(packed struct(u32) {
    -                ///  Polarity of CSN output
    -                CSNPOL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Active low (idle state high)
    -                        LOW = 0x0,
    -                        ///  Active high (idle state low)
    -                        HIGH = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Pin select for DCX signal
    -            PSELDCX: mmio.Mmio(packed struct(u32) {
    -                ///  Pin number
    -                PIN: u5,
    -                ///  Port number
    -                PORT: u1,
    -                reserved31: u25,
    -                ///  Connection
    -                CONNECT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disconnect
    -                        Disconnected = 0x1,
    -                        ///  Connect
    -                        Connected = 0x0,
    -                    },
    -                },
    -            }),
    -            ///  DCX configuration
    -            DCXCNT: mmio.Mmio(packed struct(u32) {
    -                ///  This register specifies the number of command bytes preceding the data bytes. The PSEL.DCX line will be low during transmission of command bytes and high during transmission of data bytes. Value 0xF indicates that all bytes are command bytes.
    -                DCXCNT: u4,
    -                padding: u28,
    -            }),
    -            reserved1472: [76]u8,
    -            ///  Byte transmitted after TXD.MAXCNT bytes have been transmitted in the case when RXD.MAXCNT is greater than TXD.MAXCNT
    -            ORC: mmio.Mmio(packed struct(u32) {
    -                ///  Byte transmitted after TXD.MAXCNT bytes have been transmitted in the case when RXD.MAXCNT is greater than TXD.MAXCNT.
    -                ORC: u8,
    -                padding: u24,
    -            }),
    -        };
    -
    -        ///  SPI Slave 0
    -        pub const SPIS0 = extern struct {
    -            reserved36: [36]u8,
    -            ///  Acquire SPI semaphore
    -            TASKS_ACQUIRE: mmio.Mmio(packed struct(u32) {
    -                ///  Acquire SPI semaphore
    -                TASKS_ACQUIRE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Release SPI semaphore, enabling the SPI slave to acquire it
    -            TASKS_RELEASE: mmio.Mmio(packed struct(u32) {
    -                ///  Release SPI semaphore, enabling the SPI slave to acquire it
    -                TASKS_RELEASE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved260: [216]u8,
    -            ///  Granted transaction completed
    -            EVENTS_END: mmio.Mmio(packed struct(u32) {
    -                ///  Granted transaction completed
    -                EVENTS_END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved272: [8]u8,
    -            ///  End of RXD buffer reached
    -            EVENTS_ENDRX: mmio.Mmio(packed struct(u32) {
    -                ///  End of RXD buffer reached
    -                EVENTS_ENDRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved296: [20]u8,
    -            ///  Semaphore acquired
    -            EVENTS_ACQUIRED: mmio.Mmio(packed struct(u32) {
    -                ///  Semaphore acquired
    -                EVENTS_ACQUIRED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved512: [212]u8,
    -            ///  Shortcuts between local events and tasks
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                reserved2: u2,
    -                ///  Shortcut between event END and task ACQUIRE
    -                END_ACQUIRE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            reserved772: [256]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to enable interrupt for event END
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved4: u2,
    -                ///  Write '1' to enable interrupt for event ENDRX
    -                ENDRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved10: u5,
    -                ///  Write '1' to enable interrupt for event ACQUIRED
    -                ACQUIRED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u21,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to disable interrupt for event END
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved4: u2,
    -                ///  Write '1' to disable interrupt for event ENDRX
    -                ENDRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved10: u5,
    -                ///  Write '1' to disable interrupt for event ACQUIRED
    -                ACQUIRED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u21,
    -            }),
    -            reserved1024: [244]u8,
    -            ///  Semaphore status register
    -            SEMSTAT: mmio.Mmio(packed struct(u32) {
    -                ///  Semaphore status
    -                SEMSTAT: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Semaphore is free
    -                        Free = 0x0,
    -                        ///  Semaphore is assigned to CPU
    -                        CPU = 0x1,
    -                        ///  Semaphore is assigned to SPI slave
    -                        SPIS = 0x2,
    -                        ///  Semaphore is assigned to SPI but a handover to the CPU is pending
    -                        CPUPending = 0x3,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            reserved1088: [60]u8,
    -            ///  Status from last transaction
    -            STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  TX buffer over-read detected, and prevented
    -                OVERREAD: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: error not present
    -                        NotPresent = 0x0,
    -                        ///  Read: error present
    -                        Present = 0x1,
    -                    },
    -                },
    -                ///  RX buffer overflow detected, and prevented
    -                OVERFLOW: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: error not present
    -                        NotPresent = 0x0,
    -                        ///  Read: error present
    -                        Present = 0x1,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            reserved1280: [188]u8,
    -            ///  Enable SPI slave
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable SPI slave
    -                ENABLE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  Disable SPI slave
    -                        Disabled = 0x0,
    -                        ///  Enable SPI slave
    -                        Enabled = 0x2,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1364: [80]u8,
    -            ///  Configuration register
    -            CONFIG: mmio.Mmio(packed struct(u32) {
    -                ///  Bit order
    -                ORDER: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Most significant bit shifted out first
    -                        MsbFirst = 0x0,
    -                        ///  Least significant bit shifted out first
    -                        LsbFirst = 0x1,
    -                    },
    -                },
    -                ///  Serial clock (SCK) phase
    -                CPHA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Sample on leading edge of clock, shift serial data on trailing edge
    -                        Leading = 0x0,
    -                        ///  Sample on trailing edge of clock, shift serial data on leading edge
    -                        Trailing = 0x1,
    -                    },
    -                },
    -                ///  Serial clock (SCK) polarity
    -                CPOL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Active high
    -                        ActiveHigh = 0x0,
    -                        ///  Active low
    -                        ActiveLow = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            reserved1372: [4]u8,
    -            ///  Default character. Character clocked out in case of an ignored transaction.
    -            DEF: mmio.Mmio(packed struct(u32) {
    -                ///  Default character. Character clocked out in case of an ignored transaction.
    -                DEF: u8,
    -                padding: u24,
    -            }),
    -            reserved1472: [96]u8,
    -            ///  Over-read character
    -            ORC: mmio.Mmio(packed struct(u32) {
    -                ///  Over-read character. Character clocked out after an over-read of the transmit buffer.
    -                ORC: u8,
    -                padding: u24,
    -            }),
    -        };
    -
    -        ///  I2C compatible Two-Wire Interface 0
    -        pub const TWI0 = extern struct {
    -            ///  Start TWI receive sequence
    -            TASKS_STARTRX: mmio.Mmio(packed struct(u32) {
    -                ///  Start TWI receive sequence
    -                TASKS_STARTRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved8: [4]u8,
    -            ///  Start TWI transmit sequence
    -            TASKS_STARTTX: mmio.Mmio(packed struct(u32) {
    -                ///  Start TWI transmit sequence
    -                TASKS_STARTTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved20: [8]u8,
    -            ///  Stop TWI transaction
    -            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    -                ///  Stop TWI transaction
    -                TASKS_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved28: [4]u8,
    -            ///  Suspend TWI transaction
    -            TASKS_SUSPEND: mmio.Mmio(packed struct(u32) {
    -                ///  Suspend TWI transaction
    -                TASKS_SUSPEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Resume TWI transaction
    -            TASKS_RESUME: mmio.Mmio(packed struct(u32) {
    -                ///  Resume TWI transaction
    -                TASKS_RESUME: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved260: [224]u8,
    -            ///  TWI stopped
    -            EVENTS_STOPPED: mmio.Mmio(packed struct(u32) {
    -                ///  TWI stopped
    -                EVENTS_STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  TWI RXD byte received
    -            EVENTS_RXDREADY: mmio.Mmio(packed struct(u32) {
    -                ///  TWI RXD byte received
    -                EVENTS_RXDREADY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved284: [16]u8,
    -            ///  TWI TXD byte sent
    -            EVENTS_TXDSENT: mmio.Mmio(packed struct(u32) {
    -                ///  TWI TXD byte sent
    -                EVENTS_TXDSENT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved292: [4]u8,
    -            ///  TWI error
    -            EVENTS_ERROR: mmio.Mmio(packed struct(u32) {
    -                ///  TWI error
    -                EVENTS_ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved312: [16]u8,
    -            ///  TWI byte boundary, generated before each byte that is sent or received
    -            EVENTS_BB: mmio.Mmio(packed struct(u32) {
    -                ///  TWI byte boundary, generated before each byte that is sent or received
    -                EVENTS_BB: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved328: [12]u8,
    -            ///  TWI entered the suspended state
    -            EVENTS_SUSPENDED: mmio.Mmio(packed struct(u32) {
    -                ///  TWI entered the suspended state
    -                EVENTS_SUSPENDED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved512: [180]u8,
    -            ///  Shortcuts between local events and tasks
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                ///  Shortcut between event BB and task SUSPEND
    -                BB_SUSPEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event BB and task STOP
    -                BB_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            reserved772: [256]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to enable interrupt for event STOPPED
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event RXDREADY
    -                RXDREADY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved7: u4,
    -                ///  Write '1' to enable interrupt for event TXDSENT
    -                TXDSENT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved9: u1,
    -                ///  Write '1' to enable interrupt for event ERROR
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved14: u4,
    -                ///  Write '1' to enable interrupt for event BB
    -                BB: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved18: u3,
    -                ///  Write '1' to enable interrupt for event SUSPENDED
    -                SUSPENDED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u13,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to disable interrupt for event STOPPED
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event RXDREADY
    -                RXDREADY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved7: u4,
    -                ///  Write '1' to disable interrupt for event TXDSENT
    -                TXDSENT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved9: u1,
    -                ///  Write '1' to disable interrupt for event ERROR
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved14: u4,
    -                ///  Write '1' to disable interrupt for event BB
    -                BB: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved18: u3,
    -                ///  Write '1' to disable interrupt for event SUSPENDED
    -                SUSPENDED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u13,
    -            }),
    -            reserved1220: [440]u8,
    -            ///  Error source
    -            ERRORSRC: mmio.Mmio(packed struct(u32) {
    -                ///  Overrun error
    -                OVERRUN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: no overrun occured
    -                        NotPresent = 0x0,
    -                        ///  Read: overrun occured
    -                        Present = 0x1,
    -                    },
    -                },
    -                ///  NACK received after sending the address (write '1' to clear)
    -                ANACK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: error not present
    -                        NotPresent = 0x0,
    -                        ///  Read: error present
    -                        Present = 0x1,
    -                    },
    -                },
    -                ///  NACK received after sending a data byte (write '1' to clear)
    -                DNACK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: error not present
    -                        NotPresent = 0x0,
    -                        ///  Read: error present
    -                        Present = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            reserved1280: [56]u8,
    -            ///  Enable TWI
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable TWI
    -                ENABLE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  Disable TWI
    -                        Disabled = 0x0,
    -                        ///  Enable TWI
    -                        Enabled = 0x5,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1304: [20]u8,
    -            ///  RXD register
    -            RXD: mmio.Mmio(packed struct(u32) {
    -                ///  RXD register
    -                RXD: u8,
    -                padding: u24,
    -            }),
    -            ///  TXD register
    -            TXD: mmio.Mmio(packed struct(u32) {
    -                ///  TXD register
    -                TXD: u8,
    -                padding: u24,
    -            }),
    -            reserved1316: [4]u8,
    -            ///  TWI frequency. Accuracy depends on the HFCLK source selected.
    -            FREQUENCY: mmio.Mmio(packed struct(u32) {
    -                ///  TWI master clock frequency
    -                FREQUENCY: packed union {
    -                    raw: u32,
    -                    value: enum(u32) {
    -                        ///  100 kbps
    -                        K100 = 0x1980000,
    -                        ///  250 kbps
    -                        K250 = 0x4000000,
    -                        ///  400 kbps (actual rate 410.256 kbps)
    -                        K400 = 0x6680000,
    -                        _,
    -                    },
    -                },
    -            }),
    -            reserved1416: [96]u8,
    -            ///  Address used in the TWI transfer
    -            ADDRESS: mmio.Mmio(packed struct(u32) {
    -                ///  Address used in the TWI transfer
    -                ADDRESS: u7,
    -                padding: u25,
    -            }),
    -        };
    -
    -        ///  I2C compatible Two-Wire Master Interface with EasyDMA 0
    -        pub const TWIM0 = extern struct {
    -            ///  Start TWI receive sequence
    -            TASKS_STARTRX: mmio.Mmio(packed struct(u32) {
    -                ///  Start TWI receive sequence
    -                TASKS_STARTRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved8: [4]u8,
    -            ///  Start TWI transmit sequence
    -            TASKS_STARTTX: mmio.Mmio(packed struct(u32) {
    -                ///  Start TWI transmit sequence
    -                TASKS_STARTTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved20: [8]u8,
    -            ///  Stop TWI transaction. Must be issued while the TWI master is not suspended.
    -            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    -                ///  Stop TWI transaction. Must be issued while the TWI master is not suspended.
    -                TASKS_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved28: [4]u8,
    -            ///  Suspend TWI transaction
    -            TASKS_SUSPEND: mmio.Mmio(packed struct(u32) {
    -                ///  Suspend TWI transaction
    -                TASKS_SUSPEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Resume TWI transaction
    -            TASKS_RESUME: mmio.Mmio(packed struct(u32) {
    -                ///  Resume TWI transaction
    -                TASKS_RESUME: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved260: [224]u8,
    -            ///  TWI stopped
    -            EVENTS_STOPPED: mmio.Mmio(packed struct(u32) {
    -                ///  TWI stopped
    -                EVENTS_STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved292: [28]u8,
    -            ///  TWI error
    -            EVENTS_ERROR: mmio.Mmio(packed struct(u32) {
    -                ///  TWI error
    -                EVENTS_ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved328: [32]u8,
    -            ///  Last byte has been sent out after the SUSPEND task has been issued, TWI traffic is now suspended.
    -            EVENTS_SUSPENDED: mmio.Mmio(packed struct(u32) {
    -                ///  Last byte has been sent out after the SUSPEND task has been issued, TWI traffic is now suspended.
    -                EVENTS_SUSPENDED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Receive sequence started
    -            EVENTS_RXSTARTED: mmio.Mmio(packed struct(u32) {
    -                ///  Receive sequence started
    -                EVENTS_RXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Transmit sequence started
    -            EVENTS_TXSTARTED: mmio.Mmio(packed struct(u32) {
    -                ///  Transmit sequence started
    -                EVENTS_TXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved348: [8]u8,
    -            ///  Byte boundary, starting to receive the last byte
    -            EVENTS_LASTRX: mmio.Mmio(packed struct(u32) {
    -                ///  Byte boundary, starting to receive the last byte
    -                EVENTS_LASTRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Byte boundary, starting to transmit the last byte
    -            EVENTS_LASTTX: mmio.Mmio(packed struct(u32) {
    -                ///  Byte boundary, starting to transmit the last byte
    -                EVENTS_LASTTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved512: [156]u8,
    -            ///  Shortcuts between local events and tasks
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                reserved7: u7,
    -                ///  Shortcut between event LASTTX and task STARTRX
    -                LASTTX_STARTRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event LASTTX and task SUSPEND
    -                LASTTX_SUSPEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event LASTTX and task STOP
    -                LASTTX_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event LASTRX and task STARTTX
    -                LASTRX_STARTTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event LASTRX and task SUSPEND
    -                LASTRX_SUSPEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event LASTRX and task STOP
    -                LASTRX_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u19,
    -            }),
    -            reserved768: [252]u8,
    -            ///  Enable or disable interrupt
    -            INTEN: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Enable or disable interrupt for event STOPPED
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved9: u7,
    -                ///  Enable or disable interrupt for event ERROR
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved18: u8,
    -                ///  Enable or disable interrupt for event SUSPENDED
    -                SUSPENDED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event RXSTARTED
    -                RXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event TXSTARTED
    -                TXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved23: u2,
    -                ///  Enable or disable interrupt for event LASTRX
    -                LASTRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event LASTTX
    -                LASTTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u7,
    -            }),
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to enable interrupt for event STOPPED
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved9: u7,
    -                ///  Write '1' to enable interrupt for event ERROR
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved18: u8,
    -                ///  Write '1' to enable interrupt for event SUSPENDED
    -                SUSPENDED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event RXSTARTED
    -                RXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event TXSTARTED
    -                TXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved23: u2,
    -                ///  Write '1' to enable interrupt for event LASTRX
    -                LASTRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event LASTTX
    -                LASTTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u7,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to disable interrupt for event STOPPED
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved9: u7,
    -                ///  Write '1' to disable interrupt for event ERROR
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved18: u8,
    -                ///  Write '1' to disable interrupt for event SUSPENDED
    -                SUSPENDED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event RXSTARTED
    -                RXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event TXSTARTED
    -                TXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved23: u2,
    -                ///  Write '1' to disable interrupt for event LASTRX
    -                LASTRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event LASTTX
    -                LASTTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u7,
    -            }),
    -            reserved1220: [440]u8,
    -            ///  Error source
    -            ERRORSRC: mmio.Mmio(packed struct(u32) {
    -                ///  Overrun error
    -                OVERRUN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Error did not occur
    -                        NotReceived = 0x0,
    -                        ///  Error occurred
    -                        Received = 0x1,
    -                    },
    -                },
    -                ///  NACK received after sending the address (write '1' to clear)
    -                ANACK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Error did not occur
    -                        NotReceived = 0x0,
    -                        ///  Error occurred
    -                        Received = 0x1,
    -                    },
    -                },
    -                ///  NACK received after sending a data byte (write '1' to clear)
    -                DNACK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Error did not occur
    -                        NotReceived = 0x0,
    -                        ///  Error occurred
    -                        Received = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            reserved1280: [56]u8,
    -            ///  Enable TWIM
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable TWIM
    -                ENABLE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  Disable TWIM
    -                        Disabled = 0x0,
    -                        ///  Enable TWIM
    -                        Enabled = 0x6,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1316: [32]u8,
    -            ///  TWI frequency. Accuracy depends on the HFCLK source selected.
    -            FREQUENCY: mmio.Mmio(packed struct(u32) {
    -                ///  TWI master clock frequency
    -                FREQUENCY: packed union {
    -                    raw: u32,
    -                    value: enum(u32) {
    -                        ///  100 kbps
    -                        K100 = 0x1980000,
    -                        ///  250 kbps
    -                        K250 = 0x4000000,
    -                        ///  400 kbps
    -                        K400 = 0x6400000,
    -                        _,
    -                    },
    -                },
    -            }),
    -            reserved1416: [96]u8,
    -            ///  Address used in the TWI transfer
    -            ADDRESS: mmio.Mmio(packed struct(u32) {
    -                ///  Address used in the TWI transfer
    -                ADDRESS: u7,
    -                padding: u25,
    -            }),
    -        };
    -
    -        ///  I2C compatible Two-Wire Slave Interface with EasyDMA 0
    -        pub const TWIS0 = extern struct {
    -            reserved20: [20]u8,
    -            ///  Stop TWI transaction
    -            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    -                ///  Stop TWI transaction
    -                TASKS_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved28: [4]u8,
    -            ///  Suspend TWI transaction
    -            TASKS_SUSPEND: mmio.Mmio(packed struct(u32) {
    -                ///  Suspend TWI transaction
    -                TASKS_SUSPEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Resume TWI transaction
    -            TASKS_RESUME: mmio.Mmio(packed struct(u32) {
    -                ///  Resume TWI transaction
    -                TASKS_RESUME: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved48: [12]u8,
    -            ///  Prepare the TWI slave to respond to a write command
    -            TASKS_PREPARERX: mmio.Mmio(packed struct(u32) {
    -                ///  Prepare the TWI slave to respond to a write command
    -                TASKS_PREPARERX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Prepare the TWI slave to respond to a read command
    -            TASKS_PREPARETX: mmio.Mmio(packed struct(u32) {
    -                ///  Prepare the TWI slave to respond to a read command
    -                TASKS_PREPARETX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved260: [204]u8,
    -            ///  TWI stopped
    -            EVENTS_STOPPED: mmio.Mmio(packed struct(u32) {
    -                ///  TWI stopped
    -                EVENTS_STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved292: [28]u8,
    -            ///  TWI error
    -            EVENTS_ERROR: mmio.Mmio(packed struct(u32) {
    -                ///  TWI error
    -                EVENTS_ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved332: [36]u8,
    -            ///  Receive sequence started
    -            EVENTS_RXSTARTED: mmio.Mmio(packed struct(u32) {
    -                ///  Receive sequence started
    -                EVENTS_RXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Transmit sequence started
    -            EVENTS_TXSTARTED: mmio.Mmio(packed struct(u32) {
    -                ///  Transmit sequence started
    -                EVENTS_TXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved356: [16]u8,
    -            ///  Write command received
    -            EVENTS_WRITE: mmio.Mmio(packed struct(u32) {
    -                ///  Write command received
    -                EVENTS_WRITE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Read command received
    -            EVENTS_READ: mmio.Mmio(packed struct(u32) {
    -                ///  Read command received
    -                EVENTS_READ: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved512: [148]u8,
    -            ///  Shortcuts between local events and tasks
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                reserved13: u13,
    -                ///  Shortcut between event WRITE and task SUSPEND
    -                WRITE_SUSPEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event READ and task SUSPEND
    -                READ_SUSPEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u17,
    -            }),
    -            reserved768: [252]u8,
    -            ///  Enable or disable interrupt
    -            INTEN: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Enable or disable interrupt for event STOPPED
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved9: u7,
    -                ///  Enable or disable interrupt for event ERROR
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved19: u9,
    -                ///  Enable or disable interrupt for event RXSTARTED
    -                RXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event TXSTARTED
    -                TXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved25: u4,
    -                ///  Enable or disable interrupt for event WRITE
    -                WRITE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event READ
    -                READ: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u5,
    -            }),
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to enable interrupt for event STOPPED
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved9: u7,
    -                ///  Write '1' to enable interrupt for event ERROR
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved19: u9,
    -                ///  Write '1' to enable interrupt for event RXSTARTED
    -                RXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event TXSTARTED
    -                TXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved25: u4,
    -                ///  Write '1' to enable interrupt for event WRITE
    -                WRITE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event READ
    -                READ: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u5,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to disable interrupt for event STOPPED
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved9: u7,
    -                ///  Write '1' to disable interrupt for event ERROR
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved19: u9,
    -                ///  Write '1' to disable interrupt for event RXSTARTED
    -                RXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event TXSTARTED
    -                TXSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved25: u4,
    -                ///  Write '1' to disable interrupt for event WRITE
    -                WRITE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event READ
    -                READ: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u5,
    -            }),
    -            reserved1232: [452]u8,
    -            ///  Error source
    -            ERRORSRC: mmio.Mmio(packed struct(u32) {
    -                ///  RX buffer overflow detected, and prevented
    -                OVERFLOW: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Error did not occur
    -                        NotDetected = 0x0,
    -                        ///  Error occurred
    -                        Detected = 0x1,
    -                    },
    -                },
    -                reserved2: u1,
    -                ///  NACK sent after receiving a data byte
    -                DNACK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Error did not occur
    -                        NotReceived = 0x0,
    -                        ///  Error occurred
    -                        Received = 0x1,
    -                    },
    -                },
    -                ///  TX buffer over-read detected, and prevented
    -                OVERREAD: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Error did not occur
    -                        NotDetected = 0x0,
    -                        ///  Error occurred
    -                        Detected = 0x1,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            ///  Status register indicating which address had a match
    -            MATCH: mmio.Mmio(packed struct(u32) {
    -                ///  Which of the addresses in {ADDRESS} matched the incoming address
    -                MATCH: u1,
    -                padding: u31,
    -            }),
    -            reserved1280: [40]u8,
    -            ///  Enable TWIS
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable TWIS
    -                ENABLE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  Disable TWIS
    -                        Disabled = 0x0,
    -                        ///  Enable TWIS
    -                        Enabled = 0x9,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1416: [132]u8,
    -            ///  Description collection: TWI slave address n
    -            ADDRESS: [2]mmio.Mmio(packed struct(u32) {
    -                ///  TWI slave address
    -                ADDRESS: u7,
    -                padding: u25,
    -            }),
    -            reserved1428: [4]u8,
    -            ///  Configuration register for the address match mechanism
    -            CONFIG: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable address matching on ADDRESS[0]
    -                ADDRESS0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable address matching on ADDRESS[1]
    -                ADDRESS1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            reserved1472: [40]u8,
    -            ///  Over-read character. Character sent out in case of an over-read of the transmit buffer.
    -            ORC: mmio.Mmio(packed struct(u32) {
    -                ///  Over-read character. Character sent out in case of an over-read of the transmit buffer.
    -                ORC: u8,
    -                padding: u24,
    -            }),
    -        };
    -
    -        ///  Pulse Density Modulation (Digital Microphone) Interface
    -        pub const PDM = extern struct {
    -            ///  Starts continuous PDM transfer
    -            TASKS_START: mmio.Mmio(packed struct(u32) {
    -                ///  Starts continuous PDM transfer
    -                TASKS_START: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Stops PDM transfer
    -            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    -                ///  Stops PDM transfer
    -                TASKS_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved256: [248]u8,
    -            ///  PDM transfer has started
    -            EVENTS_STARTED: mmio.Mmio(packed struct(u32) {
    -                ///  PDM transfer has started
    -                EVENTS_STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  PDM transfer has finished
    -            EVENTS_STOPPED: mmio.Mmio(packed struct(u32) {
    -                ///  PDM transfer has finished
    -                EVENTS_STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  The PDM has written the last sample specified by SAMPLE.MAXCNT (or the last sample after a STOP task has been received) to Data RAM
    -            EVENTS_END: mmio.Mmio(packed struct(u32) {
    -                ///  The PDM has written the last sample specified by SAMPLE.MAXCNT (or the last sample after a STOP task has been received) to Data RAM
    -                EVENTS_END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved768: [500]u8,
    -            ///  Enable or disable interrupt
    -            INTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable interrupt for event STARTED
    -                STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event STOPPED
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event END
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to enable interrupt for event STARTED
    -                STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event STOPPED
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event END
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to disable interrupt for event STARTED
    -                STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event STOPPED
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event END
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            reserved1280: [500]u8,
    -            ///  PDM module enable register
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable PDM module
    -                ENABLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  PDM clock generator control
    -            PDMCLKCTRL: mmio.Mmio(packed struct(u32) {
    -                ///  PDM_CLK frequency
    -                FREQ: packed union {
    -                    raw: u32,
    -                    value: enum(u32) {
    -                        ///  PDM_CLK = 32 MHz / 32 = 1.000 MHz
    -                        @"1000K" = 0x8000000,
    -                        ///  PDM_CLK = 32 MHz / 31 = 1.032 MHz. Nominal clock for RATIO=Ratio64.
    -                        Default = 0x8400000,
    -                        ///  PDM_CLK = 32 MHz / 30 = 1.067 MHz
    -                        @"1067K" = 0x8800000,
    -                        ///  PDM_CLK = 32 MHz / 26 = 1.231 MHz
    -                        @"1231K" = 0x9800000,
    -                        ///  PDM_CLK = 32 MHz / 25 = 1.280 MHz. Nominal clock for RATIO=Ratio80.
    -                        @"1280K" = 0xa000000,
    -                        ///  PDM_CLK = 32 MHz / 24 = 1.333 MHz
    -                        @"1333K" = 0xa800000,
    -                        _,
    -                    },
    -                },
    -            }),
    -            ///  Defines the routing of the connected PDM microphones' signals
    -            MODE: mmio.Mmio(packed struct(u32) {
    -                ///  Mono or stereo operation
    -                OPERATION: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Sample and store one pair (Left + Right) of 16bit samples per RAM word R=[31:16]; L=[15:0]
    -                        Stereo = 0x0,
    -                        ///  Sample and store two successive Left samples (16 bit each) per RAM word L1=[31:16]; L0=[15:0]
    -                        Mono = 0x1,
    -                    },
    -                },
    -                ///  Defines on which PDM_CLK edge Left (or mono) is sampled
    -                EDGE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Left (or mono) is sampled on falling edge of PDM_CLK
    -                        LeftFalling = 0x0,
    -                        ///  Left (or mono) is sampled on rising edge of PDM_CLK
    -                        LeftRising = 0x1,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            reserved1304: [12]u8,
    -            ///  Left output gain adjustment
    -            GAINL: mmio.Mmio(packed struct(u32) {
    -                ///  Left output gain adjustment, in 0.5 dB steps, around the default module gain (see electrical parameters) 0x00 -20 dB gain adjust 0x01 -19.5 dB gain adjust (...) 0x27 -0.5 dB gain adjust 0x28 0 dB gain adjust 0x29 +0.5 dB gain adjust (...) 0x4F +19.5 dB gain adjust 0x50 +20 dB gain adjust
    -                GAINL: packed union {
    -                    raw: u7,
    -                    value: enum(u7) {
    -                        ///  -20dB gain adjustment (minimum)
    -                        MinGain = 0x0,
    -                        ///  0dB gain adjustment
    -                        DefaultGain = 0x28,
    -                        ///  +20dB gain adjustment (maximum)
    -                        MaxGain = 0x50,
    -                        _,
    -                    },
    -                },
    -                padding: u25,
    -            }),
    -            ///  Right output gain adjustment
    -            GAINR: mmio.Mmio(packed struct(u32) {
    -                ///  Right output gain adjustment, in 0.5 dB steps, around the default module gain (see electrical parameters)
    -                GAINR: packed union {
    -                    raw: u7,
    -                    value: enum(u7) {
    -                        ///  -20dB gain adjustment (minimum)
    -                        MinGain = 0x0,
    -                        ///  0dB gain adjustment
    -                        DefaultGain = 0x28,
    -                        ///  +20dB gain adjustment (maximum)
    -                        MaxGain = 0x50,
    -                        _,
    -                    },
    -                },
    -                padding: u25,
    -            }),
    -            ///  Selects the ratio between PDM_CLK and output sample rate. Change PDMCLKCTRL accordingly.
    -            RATIO: mmio.Mmio(packed struct(u32) {
    -                ///  Selects the ratio between PDM_CLK and output sample rate
    -                RATIO: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Ratio of 64
    -                        Ratio64 = 0x0,
    -                        ///  Ratio of 80
    -                        Ratio80 = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -        };
    -
    -        ///  ARM TrustZone CryptoCell register interface
    -        pub const CRYPTOCELL = extern struct {
    -            reserved1280: [1280]u8,
    -            ///  Enable CRYPTOCELL subsystem
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable the CRYPTOCELL subsystem
    -                ENABLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  CRYPTOCELL subsystem disabled
    -                        Disabled = 0x0,
    -                        ///  CRYPTOCELL subsystem enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -        };
    -
    -        ///  CRYPTOCELL HOST_RGF interface
    -        pub const CC_HOST_RGF = extern struct {
    -            reserved6712: [6712]u8,
    -            ///  AES hardware key select
    -            HOST_CRYPTOKEY_SEL: mmio.Mmio(packed struct(u32) {
    -                ///  Select the source of the HW key that is used by the AES engine
    -                HOST_CRYPTOKEY_SEL: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Use device root key K_DR from CRYPTOCELL AO power domain
    -                        K_DR = 0x0,
    -                        ///  Use hard-coded RTL key K_PRTL
    -                        K_PRTL = 0x1,
    -                        ///  Use provided session key
    -                        Session = 0x2,
    -                        _,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            reserved6732: [16]u8,
    -            ///  This write-once register is the K_PRTL lock register. When this register is set, K_PRTL can not be used and a zeroed key will be used instead. The value of this register is saved in the CRYPTOCELL AO power domain.
    -            HOST_IOT_KPRTL_LOCK: mmio.Mmio(packed struct(u32) {
    -                ///  This register is the K_PRTL lock register. When this register is set, K_PRTL can not be used and a zeroed key will be used instead. The value of this register is saved in the CRYPTOCELL AO power domain.
    -                HOST_IOT_KPRTL_LOCK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  K_PRTL can be selected for use from register HOST_CRYPTOKEY_SEL
    -                        Disabled = 0x0,
    -                        ///  K_PRTL has been locked until next power-on reset (POR). If K_PRTL is selected anyway, a zeroed key will be used instead.
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  This register holds bits 31:0 of K_DR. The value of this register is saved in the CRYPTOCELL AO power domain. Reading from this address returns the K_DR valid status indicating if K_DR is successfully retained.
    -            HOST_IOT_KDR0: mmio.Mmio(packed struct(u32) {
    -                ///  Write: K_DR bits 31:0 Read: 0x00000000 when 128-bit K_DR key value is not yet retained in the CRYPTOCELL AO power domain Read: 0x00000001 when 128-bit K_DR key value is successfully retained in the CRYPTOCELL AO power domain
    -                HOST_IOT_KDR0: u32,
    -            }),
    -            ///  This register holds bits 63:32 of K_DR. The value of this register is saved in the CRYPTOCELL AO power domain.
    -            HOST_IOT_KDR1: mmio.Mmio(packed struct(u32) {
    -                ///  K_DR bits 63:32
    -                HOST_IOT_KDR1: u32,
    -            }),
    -            ///  This register holds bits 95:64 of K_DR. The value of this register is saved in the CRYPTOCELL AO power domain.
    -            HOST_IOT_KDR2: mmio.Mmio(packed struct(u32) {
    -                ///  K_DR bits 95:64
    -                HOST_IOT_KDR2: u32,
    -            }),
    -            ///  This register holds bits 127:96 of K_DR. The value of this register is saved in the CRYPTOCELL AO power domain.
    -            HOST_IOT_KDR3: mmio.Mmio(packed struct(u32) {
    -                ///  K_DR bits 127:96
    -                HOST_IOT_KDR3: u32,
    -            }),
    -            ///  Controls lifecycle state (LCS) for CRYPTOCELL subsystem
    -            HOST_IOT_LCS: mmio.Mmio(packed struct(u32) {
    -                ///  Lifecycle state value. This field is write-once per reset.
    -                LCS: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        ///  CC310 operates in debug mode
    -                        Debug = 0x0,
    -                        ///  CC310 operates in secure mode
    -                        Secure = 0x2,
    -                        _,
    -                    },
    -                },
    -                reserved8: u5,
    -                ///  This field is read-only and indicates if CRYPTOCELL LCS has been successfully configured since last reset
    -                LCS_IS_VALID: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  A valid LCS is not yet retained in the CRYPTOCELL AO power domain
    -                        Invalid = 0x0,
    -                        ///  A valid LCS is successfully retained in the CRYPTOCELL AO power domain
    -                        Valid = 0x1,
    -                    },
    -                },
    -                padding: u23,
    -            }),
    -        };
    -
    -        ///  External flash interface
    -        pub const QSPI = extern struct {
    -            ///  Activate QSPI interface
    -            TASKS_ACTIVATE: mmio.Mmio(packed struct(u32) {
    -                ///  Activate QSPI interface
    -                TASKS_ACTIVATE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Start transfer from external flash memory to internal RAM
    -            TASKS_READSTART: mmio.Mmio(packed struct(u32) {
    -                ///  Start transfer from external flash memory to internal RAM
    -                TASKS_READSTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Start transfer from internal RAM to external flash memory
    -            TASKS_WRITESTART: mmio.Mmio(packed struct(u32) {
    -                ///  Start transfer from internal RAM to external flash memory
    -                TASKS_WRITESTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Start external flash memory erase operation
    -            TASKS_ERASESTART: mmio.Mmio(packed struct(u32) {
    -                ///  Start external flash memory erase operation
    -                TASKS_ERASESTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Deactivate QSPI interface
    -            TASKS_DEACTIVATE: mmio.Mmio(packed struct(u32) {
    -                ///  Deactivate QSPI interface
    -                TASKS_DEACTIVATE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved256: [236]u8,
    -            ///  QSPI peripheral is ready. This event will be generated as a response to any QSPI task.
    -            EVENTS_READY: mmio.Mmio(packed struct(u32) {
    -                ///  QSPI peripheral is ready. This event will be generated as a response to any QSPI task.
    -                EVENTS_READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved768: [508]u8,
    -            ///  Enable or disable interrupt
    -            INTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable interrupt for event READY
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to enable interrupt for event READY
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to disable interrupt for event READY
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1280: [500]u8,
    -            ///  Enable QSPI peripheral and acquire the pins selected in PSELn registers
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable QSPI
    -                ENABLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable QSPI
    -                        Disabled = 0x0,
    -                        ///  Enable QSPI
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1344: [60]u8,
    -            ///  Address offset into the external memory for Execute in Place operation.
    -            XIPOFFSET: mmio.Mmio(packed struct(u32) {
    -                ///  Address offset into the external memory for Execute in Place operation. Value must be a multiple of 4.
    -                XIPOFFSET: u32,
    -            }),
    -            ///  Interface configuration.
    -            IFCONFIG0: mmio.Mmio(packed struct(u32) {
    -                ///  Configure number of data lines and opcode used for reading.
    -                READOC: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        ///  Single data line SPI. FAST_READ (opcode 0x0B).
    -                        FASTREAD = 0x0,
    -                        ///  Dual data line SPI. READ2O (opcode 0x3B).
    -                        READ2O = 0x1,
    -                        ///  Dual data line SPI. READ2IO (opcode 0xBB).
    -                        READ2IO = 0x2,
    -                        ///  Quad data line SPI. READ4O (opcode 0x6B).
    -                        READ4O = 0x3,
    -                        ///  Quad data line SPI. READ4IO (opcode 0xEB).
    -                        READ4IO = 0x4,
    -                        _,
    -                    },
    -                },
    -                ///  Configure number of data lines and opcode used for writing.
    -                WRITEOC: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        ///  Single data line SPI. PP (opcode 0x02).
    -                        PP = 0x0,
    -                        ///  Dual data line SPI. PP2O (opcode 0xA2).
    -                        PP2O = 0x1,
    -                        ///  Quad data line SPI. PP4O (opcode 0x32).
    -                        PP4O = 0x2,
    -                        ///  Quad data line SPI. PP4IO (opcode 0x38).
    -                        PP4IO = 0x3,
    -                        _,
    -                    },
    -                },
    -                ///  Addressing mode.
    -                ADDRMODE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  24-bit addressing.
    -                        @"24BIT" = 0x0,
    -                        ///  32-bit addressing.
    -                        @"32BIT" = 0x1,
    -                    },
    -                },
    -                ///  Enable deep power-down mode (DPM) feature.
    -                DPMENABLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable DPM feature.
    -                        Disable = 0x0,
    -                        ///  Enable DPM feature.
    -                        Enable = 0x1,
    -                    },
    -                },
    -                reserved12: u4,
    -                ///  Page size for commands PP, PP2O, PP4O and PP4IO.
    -                PPSIZE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  256 bytes.
    -                        @"256Bytes" = 0x0,
    -                        ///  512 bytes.
    -                        @"512Bytes" = 0x1,
    -                    },
    -                },
    -                padding: u19,
    -            }),
    -            reserved1536: [184]u8,
    -            ///  Interface configuration.
    -            IFCONFIG1: mmio.Mmio(packed struct(u32) {
    -                ///  Minimum amount of time that the CSN pin must stay high before it can go low again. Value is specified in number of 16 MHz periods (62.5 ns).
    -                SCKDELAY: u8,
    -                reserved24: u16,
    -                ///  Enter/exit deep power-down mode (DPM) for external flash memory.
    -                DPMEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exit DPM.
    -                        Exit = 0x0,
    -                        ///  Enter DPM.
    -                        Enter = 0x1,
    -                    },
    -                },
    -                ///  Select SPI mode.
    -                SPIMODE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Mode 0: Data are captured on the clock rising edge and data is output on a falling edge. Base level of clock is 0 (CPOL=0, CPHA=0).
    -                        MODE0 = 0x0,
    -                        ///  Mode 3: Data are captured on the clock falling edge and data is output on a rising edge. Base level of clock is 1 (CPOL=1, CPHA=1).
    -                        MODE3 = 0x1,
    -                    },
    -                },
    -                reserved28: u2,
    -                ///  SCK frequency is given as 32 MHz / (SCKFREQ + 1).
    -                SCKFREQ: u4,
    -            }),
    -            ///  Status register.
    -            STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved2: u2,
    -                ///  Deep power-down mode (DPM) status of external flash.
    -                DPM: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  External flash is not in DPM.
    -                        Disabled = 0x0,
    -                        ///  External flash is in DPM.
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Ready status.
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  QSPI peripheral is ready. It is allowed to trigger new tasks, writing custom instructions or enter/exit DPM.
    -                        READY = 0x1,
    -                        ///  QSPI peripheral is busy. It is not allowed to trigger any new tasks, writing custom instructions or enter/exit DPM.
    -                        BUSY = 0x0,
    -                    },
    -                },
    -                reserved24: u20,
    -                ///  Value of external flash device Status Register. When the external flash has two bytes status register this field includes the value of the low byte.
    -                SREG: u8,
    -            }),
    -            reserved1556: [12]u8,
    -            ///  Set the duration required to enter/exit deep power-down mode (DPM).
    -            DPMDUR: mmio.Mmio(packed struct(u32) {
    -                ///  Duration needed by external flash to enter DPM. Duration is given as ENTER * 256 * 62.5 ns.
    -                ENTER: u16,
    -                ///  Duration needed by external flash to exit DPM. Duration is given as EXIT * 256 * 62.5 ns.
    -                EXIT: u16,
    -            }),
    -            reserved1572: [12]u8,
    -            ///  Extended address configuration.
    -            ADDRCONF: mmio.Mmio(packed struct(u32) {
    -                ///  Opcode that enters the 32-bit addressing mode.
    -                OPCODE: u8,
    -                ///  Byte 0 following opcode.
    -                BYTE0: u8,
    -                ///  Byte 1 following byte 0.
    -                BYTE1: u8,
    -                ///  Extended addressing mode.
    -                MODE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Do not send any instruction.
    -                        NoInstr = 0x0,
    -                        ///  Send opcode.
    -                        Opcode = 0x1,
    -                        ///  Send opcode, byte0.
    -                        OpByte0 = 0x2,
    -                        ///  Send opcode, byte0, byte1.
    -                        All = 0x3,
    -                    },
    -                },
    -                ///  Wait for write complete before sending command.
    -                WIPWAIT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  No wait.
    -                        Disable = 0x0,
    -                        ///  Wait.
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Send WREN (write enable opcode 0x06) before instruction.
    -                WREN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Do not send WREN.
    -                        Disable = 0x0,
    -                        ///  Send WREN.
    -                        Enable = 0x1,
    -                    },
    -                },
    -                padding: u4,
    -            }),
    -            reserved1588: [12]u8,
    -            ///  Custom instruction configuration register.
    -            CINSTRCONF: mmio.Mmio(packed struct(u32) {
    -                ///  Opcode of Custom instruction.
    -                OPCODE: u8,
    -                ///  Length of custom instruction in number of bytes.
    -                LENGTH: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  Send opcode only.
    -                        @"1B" = 0x1,
    -                        ///  Send opcode, CINSTRDAT0.BYTE0.
    -                        @"2B" = 0x2,
    -                        ///  Send opcode, CINSTRDAT0.BYTE0 -> CINSTRDAT0.BYTE1.
    -                        @"3B" = 0x3,
    -                        ///  Send opcode, CINSTRDAT0.BYTE0 -> CINSTRDAT0.BYTE2.
    -                        @"4B" = 0x4,
    -                        ///  Send opcode, CINSTRDAT0.BYTE0 -> CINSTRDAT0.BYTE3.
    -                        @"5B" = 0x5,
    -                        ///  Send opcode, CINSTRDAT0.BYTE0 -> CINSTRDAT1.BYTE4.
    -                        @"6B" = 0x6,
    -                        ///  Send opcode, CINSTRDAT0.BYTE0 -> CINSTRDAT1.BYTE5.
    -                        @"7B" = 0x7,
    -                        ///  Send opcode, CINSTRDAT0.BYTE0 -> CINSTRDAT1.BYTE6.
    -                        @"8B" = 0x8,
    -                        ///  Send opcode, CINSTRDAT0.BYTE0 -> CINSTRDAT1.BYTE7.
    -                        @"9B" = 0x9,
    -                        _,
    -                    },
    -                },
    -                ///  Level of the IO2 pin (if connected) during transmission of custom instruction.
    -                LIO2: u1,
    -                ///  Level of the IO3 pin (if connected) during transmission of custom instruction.
    -                LIO3: u1,
    -                ///  Wait for write complete before sending command.
    -                WIPWAIT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  No wait.
    -                        Disable = 0x0,
    -                        ///  Wait.
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Send WREN (write enable opcode 0x06) before instruction.
    -                WREN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Do not send WREN.
    -                        Disable = 0x0,
    -                        ///  Send WREN.
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable long frame mode. When enabled, a custom instruction transaction has to be ended by writing the LFSTOP field.
    -                LFEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Long frame mode disabled
    -                        Disable = 0x0,
    -                        ///  Long frame mode enabled
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Stop (finalize) long frame transaction
    -                LFSTOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Stop
    -                        Stop = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u14,
    -            }),
    -            ///  Custom instruction data register 0.
    -            CINSTRDAT0: mmio.Mmio(packed struct(u32) {
    -                ///  Data byte 0
    -                BYTE0: u8,
    -                ///  Data byte 1
    -                BYTE1: u8,
    -                ///  Data byte 2
    -                BYTE2: u8,
    -                ///  Data byte 3
    -                BYTE3: u8,
    -            }),
    -            ///  Custom instruction data register 1.
    -            CINSTRDAT1: mmio.Mmio(packed struct(u32) {
    -                ///  Data byte 4
    -                BYTE4: u8,
    -                ///  Data byte 5
    -                BYTE5: u8,
    -                ///  Data byte 6
    -                BYTE6: u8,
    -                ///  Data byte 7
    -                BYTE7: u8,
    -            }),
    -            ///  SPI interface timing.
    -            IFTIMING: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  Timing related to sampling of the input serial data. The value of RXDELAY specifies the number of 64 MHz cycles (15.625 ns) delay from the the rising edge of the SPI Clock (SCK) until the input serial data is sampled. As en example, if set to 0 the input serial data is sampled on the rising edge of SCK.
    -                RXDELAY: u3,
    -                padding: u21,
    -            }),
    -        };
    -
    -        ///  Pulse width modulation unit 0
    -        pub const PWM0 = extern struct {
    -            reserved4: [4]u8,
    -            ///  Stops PWM pulse generation on all channels at the end of current PWM period, and stops sequence playback
    -            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    -                ///  Stops PWM pulse generation on all channels at the end of current PWM period, and stops sequence playback
    -                TASKS_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Description collection: Loads the first PWM value on all enabled channels from sequence n, and starts playing that sequence at the rate defined in SEQ[n]REFRESH and/or DECODER.MODE. Causes PWM generation to start if not running.
    -            TASKS_SEQSTART: [2]mmio.Mmio(packed struct(u32) {
    -                ///  Loads the first PWM value on all enabled channels from sequence n, and starts playing that sequence at the rate defined in SEQ[n]REFRESH and/or DECODER.MODE. Causes PWM generation to start if not running.
    -                TASKS_SEQSTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Steps by one value in the current sequence on all enabled channels if DECODER.MODE=NextStep. Does not cause PWM generation to start if not running.
    -            TASKS_NEXTSTEP: mmio.Mmio(packed struct(u32) {
    -                ///  Steps by one value in the current sequence on all enabled channels if DECODER.MODE=NextStep. Does not cause PWM generation to start if not running.
    -                TASKS_NEXTSTEP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved260: [240]u8,
    -            ///  Response to STOP task, emitted when PWM pulses are no longer generated
    -            EVENTS_STOPPED: mmio.Mmio(packed struct(u32) {
    -                ///  Response to STOP task, emitted when PWM pulses are no longer generated
    -                EVENTS_STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Description collection: First PWM period started on sequence n
    -            EVENTS_SEQSTARTED: [2]mmio.Mmio(packed struct(u32) {
    -                ///  First PWM period started on sequence n
    -                EVENTS_SEQSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Description collection: Emitted at end of every sequence n, when last value from RAM has been applied to wave counter
    -            EVENTS_SEQEND: [2]mmio.Mmio(packed struct(u32) {
    -                ///  Emitted at end of every sequence n, when last value from RAM has been applied to wave counter
    -                EVENTS_SEQEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Emitted at the end of each PWM period
    -            EVENTS_PWMPERIODEND: mmio.Mmio(packed struct(u32) {
    -                ///  Emitted at the end of each PWM period
    -                EVENTS_PWMPERIODEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Concatenated sequences have been played the amount of times defined in LOOP.CNT
    -            EVENTS_LOOPSDONE: mmio.Mmio(packed struct(u32) {
    -                ///  Concatenated sequences have been played the amount of times defined in LOOP.CNT
    -                EVENTS_LOOPSDONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved512: [224]u8,
    -            ///  Shortcuts between local events and tasks
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                ///  Shortcut between event SEQEND[0] and task STOP
    -                SEQEND0_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event SEQEND[1] and task STOP
    -                SEQEND1_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event LOOPSDONE and task SEQSTART[0]
    -                LOOPSDONE_SEQSTART0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event LOOPSDONE and task SEQSTART[1]
    -                LOOPSDONE_SEQSTART1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event LOOPSDONE and task STOP
    -                LOOPSDONE_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u27,
    -            }),
    -            reserved768: [252]u8,
    -            ///  Enable or disable interrupt
    -            INTEN: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Enable or disable interrupt for event STOPPED
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event SEQSTARTED[0]
    -                SEQSTARTED0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event SEQSTARTED[1]
    -                SEQSTARTED1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event SEQEND[0]
    -                SEQEND0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event SEQEND[1]
    -                SEQEND1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event PWMPERIODEND
    -                PWMPERIODEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event LOOPSDONE
    -                LOOPSDONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u24,
    -            }),
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to enable interrupt for event STOPPED
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event SEQSTARTED[0]
    -                SEQSTARTED0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event SEQSTARTED[1]
    -                SEQSTARTED1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event SEQEND[0]
    -                SEQEND0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event SEQEND[1]
    -                SEQEND1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event PWMPERIODEND
    -                PWMPERIODEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event LOOPSDONE
    -                LOOPSDONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u24,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to disable interrupt for event STOPPED
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event SEQSTARTED[0]
    -                SEQSTARTED0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event SEQSTARTED[1]
    -                SEQSTARTED1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event SEQEND[0]
    -                SEQEND0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event SEQEND[1]
    -                SEQEND1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event PWMPERIODEND
    -                PWMPERIODEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event LOOPSDONE
    -                LOOPSDONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u24,
    -            }),
    -            reserved1280: [500]u8,
    -            ///  PWM module enable register
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable PWM module
    -                ENABLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Selects operating mode of the wave counter
    -            MODE: mmio.Mmio(packed struct(u32) {
    -                ///  Selects up mode or up-and-down mode for the counter
    -                UPDOWN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Up counter, edge-aligned PWM duty cycle
    -                        Up = 0x0,
    -                        ///  Up and down counter, center-aligned PWM duty cycle
    -                        UpAndDown = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Value up to which the pulse generator counter counts
    -            COUNTERTOP: mmio.Mmio(packed struct(u32) {
    -                ///  Value up to which the pulse generator counter counts. This register is ignored when DECODER.MODE=WaveForm and only values from RAM are used.
    -                COUNTERTOP: u15,
    -                padding: u17,
    -            }),
    -            ///  Configuration for PWM_CLK
    -            PRESCALER: mmio.Mmio(packed struct(u32) {
    -                ///  Prescaler of PWM_CLK
    -                PRESCALER: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        ///  Divide by 1 (16 MHz)
    -                        DIV_1 = 0x0,
    -                        ///  Divide by 2 (8 MHz)
    -                        DIV_2 = 0x1,
    -                        ///  Divide by 4 (4 MHz)
    -                        DIV_4 = 0x2,
    -                        ///  Divide by 8 (2 MHz)
    -                        DIV_8 = 0x3,
    -                        ///  Divide by 16 (1 MHz)
    -                        DIV_16 = 0x4,
    -                        ///  Divide by 32 (500 kHz)
    -                        DIV_32 = 0x5,
    -                        ///  Divide by 64 (250 kHz)
    -                        DIV_64 = 0x6,
    -                        ///  Divide by 128 (125 kHz)
    -                        DIV_128 = 0x7,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            ///  Configuration of the decoder
    -            DECODER: mmio.Mmio(packed struct(u32) {
    -                ///  How a sequence is read from RAM and spread to the compare register
    -                LOAD: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  1st half word (16-bit) used in all PWM channels 0..3
    -                        Common = 0x0,
    -                        ///  1st half word (16-bit) used in channel 0..1; 2nd word in channel 2..3
    -                        Grouped = 0x1,
    -                        ///  1st half word (16-bit) in ch.0; 2nd in ch.1; ...; 4th in ch.3
    -                        Individual = 0x2,
    -                        ///  1st half word (16-bit) in ch.0; 2nd in ch.1; ...; 4th in COUNTERTOP
    -                        WaveForm = 0x3,
    -                    },
    -                },
    -                reserved8: u6,
    -                ///  Selects source for advancing the active sequence
    -                MODE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  SEQ[n].REFRESH is used to determine loading internal compare registers
    -                        RefreshCount = 0x0,
    -                        ///  NEXTSTEP task causes a new value to be loaded to internal compare registers
    -                        NextStep = 0x1,
    -                    },
    -                },
    -                padding: u23,
    -            }),
    -            ///  Number of playbacks of a loop
    -            LOOP: mmio.Mmio(packed struct(u32) {
    -                ///  Number of playbacks of pattern cycles
    -                CNT: packed union {
    -                    raw: u16,
    -                    value: enum(u16) {
    -                        ///  Looping disabled (stop at the end of the sequence)
    -                        Disabled = 0x0,
    -                        _,
    -                    },
    -                },
    -                padding: u16,
    -            }),
    -        };
    -
    -        ///  Universal serial bus device
    -        pub const USBD = extern struct {
    -            reserved4: [4]u8,
    -            ///  Description collection: Captures the EPIN[n].PTR and EPIN[n].MAXCNT registers values, and enables endpoint IN n to respond to traffic from host
    -            TASKS_STARTEPIN: [8]mmio.Mmio(packed struct(u32) {
    -                ///  Captures the EPIN[n].PTR and EPIN[n].MAXCNT registers values, and enables endpoint IN n to respond to traffic from host
    -                TASKS_STARTEPIN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Captures the ISOIN.PTR and ISOIN.MAXCNT registers values, and enables sending data on ISO endpoint
    -            TASKS_STARTISOIN: mmio.Mmio(packed struct(u32) {
    -                ///  Captures the ISOIN.PTR and ISOIN.MAXCNT registers values, and enables sending data on ISO endpoint
    -                TASKS_STARTISOIN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Description collection: Captures the EPOUT[n].PTR and EPOUT[n].MAXCNT registers values, and enables endpoint n to respond to traffic from host
    -            TASKS_STARTEPOUT: [8]mmio.Mmio(packed struct(u32) {
    -                ///  Captures the EPOUT[n].PTR and EPOUT[n].MAXCNT registers values, and enables endpoint n to respond to traffic from host
    -                TASKS_STARTEPOUT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Captures the ISOOUT.PTR and ISOOUT.MAXCNT registers values, and enables receiving of data on ISO endpoint
    -            TASKS_STARTISOOUT: mmio.Mmio(packed struct(u32) {
    -                ///  Captures the ISOOUT.PTR and ISOOUT.MAXCNT registers values, and enables receiving of data on ISO endpoint
    -                TASKS_STARTISOOUT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Allows OUT data stage on control endpoint 0
    -            TASKS_EP0RCVOUT: mmio.Mmio(packed struct(u32) {
    -                ///  Allows OUT data stage on control endpoint 0
    -                TASKS_EP0RCVOUT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Allows status stage on control endpoint 0
    -            TASKS_EP0STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  Allows status stage on control endpoint 0
    -                TASKS_EP0STATUS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Stalls data and status stage on control endpoint 0
    -            TASKS_EP0STALL: mmio.Mmio(packed struct(u32) {
    -                ///  Stalls data and status stage on control endpoint 0
    -                TASKS_EP0STALL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Forces D+ and D- lines into the state defined in the DPDMVALUE register
    -            TASKS_DPDMDRIVE: mmio.Mmio(packed struct(u32) {
    -                ///  Forces D+ and D- lines into the state defined in the DPDMVALUE register
    -                TASKS_DPDMDRIVE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Stops forcing D+ and D- lines into any state (USB engine takes control)
    -            TASKS_DPDMNODRIVE: mmio.Mmio(packed struct(u32) {
    -                ///  Stops forcing D+ and D- lines into any state (USB engine takes control)
    -                TASKS_DPDMNODRIVE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved256: [160]u8,
    -            ///  Signals that a USB reset condition has been detected on USB lines
    -            EVENTS_USBRESET: mmio.Mmio(packed struct(u32) {
    -                ///  Signals that a USB reset condition has been detected on USB lines
    -                EVENTS_USBRESET: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Confirms that the EPIN[n].PTR and EPIN[n].MAXCNT, or EPOUT[n].PTR and EPOUT[n].MAXCNT registers have been captured on all endpoints reported in the EPSTATUS register
    -            EVENTS_STARTED: mmio.Mmio(packed struct(u32) {
    -                ///  Confirms that the EPIN[n].PTR and EPIN[n].MAXCNT, or EPOUT[n].PTR and EPOUT[n].MAXCNT registers have been captured on all endpoints reported in the EPSTATUS register
    -                EVENTS_STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Description collection: The whole EPIN[n] buffer has been consumed. The RAM buffer can be accessed safely by software.
    -            EVENTS_ENDEPIN: [8]mmio.Mmio(packed struct(u32) {
    -                ///  The whole EPIN[n] buffer has been consumed. The RAM buffer can be accessed safely by software.
    -                EVENTS_ENDEPIN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  An acknowledged data transfer has taken place on the control endpoint
    -            EVENTS_EP0DATADONE: mmio.Mmio(packed struct(u32) {
    -                ///  An acknowledged data transfer has taken place on the control endpoint
    -                EVENTS_EP0DATADONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  The whole ISOIN buffer has been consumed. The RAM buffer can be accessed safely by software.
    -            EVENTS_ENDISOIN: mmio.Mmio(packed struct(u32) {
    -                ///  The whole ISOIN buffer has been consumed. The RAM buffer can be accessed safely by software.
    -                EVENTS_ENDISOIN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Description collection: The whole EPOUT[n] buffer has been consumed. The RAM buffer can be accessed safely by software.
    -            EVENTS_ENDEPOUT: [8]mmio.Mmio(packed struct(u32) {
    -                ///  The whole EPOUT[n] buffer has been consumed. The RAM buffer can be accessed safely by software.
    -                EVENTS_ENDEPOUT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  The whole ISOOUT buffer has been consumed. The RAM buffer can be accessed safely by software.
    -            EVENTS_ENDISOOUT: mmio.Mmio(packed struct(u32) {
    -                ///  The whole ISOOUT buffer has been consumed. The RAM buffer can be accessed safely by software.
    -                EVENTS_ENDISOOUT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Signals that a SOF (start of frame) condition has been detected on USB lines
    -            EVENTS_SOF: mmio.Mmio(packed struct(u32) {
    -                ///  Signals that a SOF (start of frame) condition has been detected on USB lines
    -                EVENTS_SOF: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  An event or an error not covered by specific events has occurred. Check EVENTCAUSE register to find the cause.
    -            EVENTS_USBEVENT: mmio.Mmio(packed struct(u32) {
    -                ///  An event or an error not covered by specific events has occurred. Check EVENTCAUSE register to find the cause.
    -                EVENTS_USBEVENT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  A valid SETUP token has been received (and acknowledged) on the control endpoint
    -            EVENTS_EP0SETUP: mmio.Mmio(packed struct(u32) {
    -                ///  A valid SETUP token has been received (and acknowledged) on the control endpoint
    -                EVENTS_EP0SETUP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  A data transfer has occurred on a data endpoint, indicated by the EPDATASTATUS register
    -            EVENTS_EPDATA: mmio.Mmio(packed struct(u32) {
    -                ///  A data transfer has occurred on a data endpoint, indicated by the EPDATASTATUS register
    -                EVENTS_EPDATA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved512: [156]u8,
    -            ///  Shortcuts between local events and tasks
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                ///  Shortcut between event EP0DATADONE and task STARTEPIN[0]
    -                EP0DATADONE_STARTEPIN0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event EP0DATADONE and task STARTEPOUT[0]
    -                EP0DATADONE_STARTEPOUT0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event EP0DATADONE and task EP0STATUS
    -                EP0DATADONE_EP0STATUS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event ENDEPOUT[0] and task EP0STATUS
    -                ENDEPOUT0_EP0STATUS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event ENDEPOUT[0] and task EP0RCVOUT
    -                ENDEPOUT0_EP0RCVOUT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u27,
    -            }),
    -            reserved768: [252]u8,
    -            ///  Enable or disable interrupt
    -            INTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable interrupt for event USBRESET
    -                USBRESET: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event STARTED
    -                STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event ENDEPIN[0]
    -                ENDEPIN0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event ENDEPIN[1]
    -                ENDEPIN1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event ENDEPIN[2]
    -                ENDEPIN2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event ENDEPIN[3]
    -                ENDEPIN3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event ENDEPIN[4]
    -                ENDEPIN4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event ENDEPIN[5]
    -                ENDEPIN5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event ENDEPIN[6]
    -                ENDEPIN6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event ENDEPIN[7]
    -                ENDEPIN7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event EP0DATADONE
    -                EP0DATADONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event ENDISOIN
    -                ENDISOIN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event ENDEPOUT[0]
    -                ENDEPOUT0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event ENDEPOUT[1]
    -                ENDEPOUT1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event ENDEPOUT[2]
    -                ENDEPOUT2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event ENDEPOUT[3]
    -                ENDEPOUT3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event ENDEPOUT[4]
    -                ENDEPOUT4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event ENDEPOUT[5]
    -                ENDEPOUT5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event ENDEPOUT[6]
    -                ENDEPOUT6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event ENDEPOUT[7]
    -                ENDEPOUT7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event ENDISOOUT
    -                ENDISOOUT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event SOF
    -                SOF: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event USBEVENT
    -                USBEVENT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event EP0SETUP
    -                EP0SETUP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event EPDATA
    -                EPDATA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u7,
    -            }),
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to enable interrupt for event USBRESET
    -                USBRESET: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event STARTED
    -                STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event ENDEPIN[0]
    -                ENDEPIN0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event ENDEPIN[1]
    -                ENDEPIN1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event ENDEPIN[2]
    -                ENDEPIN2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event ENDEPIN[3]
    -                ENDEPIN3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event ENDEPIN[4]
    -                ENDEPIN4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event ENDEPIN[5]
    -                ENDEPIN5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event ENDEPIN[6]
    -                ENDEPIN6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event ENDEPIN[7]
    -                ENDEPIN7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event EP0DATADONE
    -                EP0DATADONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event ENDISOIN
    -                ENDISOIN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event ENDEPOUT[0]
    -                ENDEPOUT0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event ENDEPOUT[1]
    -                ENDEPOUT1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event ENDEPOUT[2]
    -                ENDEPOUT2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event ENDEPOUT[3]
    -                ENDEPOUT3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event ENDEPOUT[4]
    -                ENDEPOUT4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event ENDEPOUT[5]
    -                ENDEPOUT5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event ENDEPOUT[6]
    -                ENDEPOUT6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event ENDEPOUT[7]
    -                ENDEPOUT7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event ENDISOOUT
    -                ENDISOOUT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event SOF
    -                SOF: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event USBEVENT
    -                USBEVENT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event EP0SETUP
    -                EP0SETUP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event EPDATA
    -                EPDATA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u7,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to disable interrupt for event USBRESET
    -                USBRESET: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event STARTED
    -                STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event ENDEPIN[0]
    -                ENDEPIN0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event ENDEPIN[1]
    -                ENDEPIN1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event ENDEPIN[2]
    -                ENDEPIN2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event ENDEPIN[3]
    -                ENDEPIN3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event ENDEPIN[4]
    -                ENDEPIN4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event ENDEPIN[5]
    -                ENDEPIN5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event ENDEPIN[6]
    -                ENDEPIN6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event ENDEPIN[7]
    -                ENDEPIN7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event EP0DATADONE
    -                EP0DATADONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event ENDISOIN
    -                ENDISOIN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event ENDEPOUT[0]
    -                ENDEPOUT0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event ENDEPOUT[1]
    -                ENDEPOUT1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event ENDEPOUT[2]
    -                ENDEPOUT2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event ENDEPOUT[3]
    -                ENDEPOUT3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event ENDEPOUT[4]
    -                ENDEPOUT4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event ENDEPOUT[5]
    -                ENDEPOUT5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event ENDEPOUT[6]
    -                ENDEPOUT6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event ENDEPOUT[7]
    -                ENDEPOUT7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event ENDISOOUT
    -                ENDISOOUT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event SOF
    -                SOF: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event USBEVENT
    -                USBEVENT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event EP0SETUP
    -                EP0SETUP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event EPDATA
    -                EPDATA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u7,
    -            }),
    -            reserved1024: [244]u8,
    -            ///  Details on what caused the USBEVENT event
    -            EVENTCAUSE: mmio.Mmio(packed struct(u32) {
    -                ///  CRC error was detected on isochronous OUT endpoint 8. Write '1' to clear.
    -                ISOOUTCRC: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  No error detected
    -                        NotDetected = 0x0,
    -                        ///  Error detected
    -                        Detected = 0x1,
    -                    },
    -                },
    -                reserved8: u7,
    -                ///  Signals that USB lines have been idle long enough for the device to enter suspend. Write '1' to clear.
    -                SUSPEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Suspend not detected
    -                        NotDetected = 0x0,
    -                        ///  Suspend detected
    -                        Detected = 0x1,
    -                    },
    -                },
    -                ///  Signals that a RESUME condition (K state or activity restart) has been detected on USB lines. Write '1' to clear.
    -                RESUME: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Resume not detected
    -                        NotDetected = 0x0,
    -                        ///  Resume detected
    -                        Detected = 0x1,
    -                    },
    -                },
    -                ///  USB MAC has been woken up and operational. Write '1' to clear.
    -                USBWUALLOWED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Wake up not allowed
    -                        NotAllowed = 0x0,
    -                        ///  Wake up allowed
    -                        Allowed = 0x1,
    -                    },
    -                },
    -                ///  USB device is ready for normal operation. Write '1' to clear.
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  USBEVENT was not issued due to USBD peripheral ready
    -                        NotDetected = 0x0,
    -                        ///  USBD peripheral is ready
    -                        Ready = 0x1,
    -                    },
    -                },
    -                padding: u20,
    -            }),
    -            reserved1128: [100]u8,
    -            ///  Provides information on which endpoint's EasyDMA registers have been captured
    -            EPSTATUS: mmio.Mmio(packed struct(u32) {
    -                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    -                EPIN0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  EasyDMA registers have not been captured for this endpoint
    -                        NoData = 0x0,
    -                        ///  EasyDMA registers have been captured for this endpoint
    -                        DataDone = 0x1,
    -                    },
    -                },
    -                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    -                EPIN1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  EasyDMA registers have not been captured for this endpoint
    -                        NoData = 0x0,
    -                        ///  EasyDMA registers have been captured for this endpoint
    -                        DataDone = 0x1,
    -                    },
    -                },
    -                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    -                EPIN2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  EasyDMA registers have not been captured for this endpoint
    -                        NoData = 0x0,
    -                        ///  EasyDMA registers have been captured for this endpoint
    -                        DataDone = 0x1,
    -                    },
    -                },
    -                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    -                EPIN3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  EasyDMA registers have not been captured for this endpoint
    -                        NoData = 0x0,
    -                        ///  EasyDMA registers have been captured for this endpoint
    -                        DataDone = 0x1,
    -                    },
    -                },
    -                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    -                EPIN4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  EasyDMA registers have not been captured for this endpoint
    -                        NoData = 0x0,
    -                        ///  EasyDMA registers have been captured for this endpoint
    -                        DataDone = 0x1,
    -                    },
    -                },
    -                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    -                EPIN5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  EasyDMA registers have not been captured for this endpoint
    -                        NoData = 0x0,
    -                        ///  EasyDMA registers have been captured for this endpoint
    -                        DataDone = 0x1,
    -                    },
    -                },
    -                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    -                EPIN6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  EasyDMA registers have not been captured for this endpoint
    -                        NoData = 0x0,
    -                        ///  EasyDMA registers have been captured for this endpoint
    -                        DataDone = 0x1,
    -                    },
    -                },
    -                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    -                EPIN7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  EasyDMA registers have not been captured for this endpoint
    -                        NoData = 0x0,
    -                        ///  EasyDMA registers have been captured for this endpoint
    -                        DataDone = 0x1,
    -                    },
    -                },
    -                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    -                EPIN8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  EasyDMA registers have not been captured for this endpoint
    -                        NoData = 0x0,
    -                        ///  EasyDMA registers have been captured for this endpoint
    -                        DataDone = 0x1,
    -                    },
    -                },
    -                reserved16: u7,
    -                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    -                EPOUT0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  EasyDMA registers have not been captured for this endpoint
    -                        NoData = 0x0,
    -                        ///  EasyDMA registers have been captured for this endpoint
    -                        DataDone = 0x1,
    -                    },
    -                },
    -                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    -                EPOUT1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  EasyDMA registers have not been captured for this endpoint
    -                        NoData = 0x0,
    -                        ///  EasyDMA registers have been captured for this endpoint
    -                        DataDone = 0x1,
    -                    },
    -                },
    -                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    -                EPOUT2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  EasyDMA registers have not been captured for this endpoint
    -                        NoData = 0x0,
    -                        ///  EasyDMA registers have been captured for this endpoint
    -                        DataDone = 0x1,
    -                    },
    -                },
    -                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    -                EPOUT3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  EasyDMA registers have not been captured for this endpoint
    -                        NoData = 0x0,
    -                        ///  EasyDMA registers have been captured for this endpoint
    -                        DataDone = 0x1,
    -                    },
    -                },
    -                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    -                EPOUT4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  EasyDMA registers have not been captured for this endpoint
    -                        NoData = 0x0,
    -                        ///  EasyDMA registers have been captured for this endpoint
    -                        DataDone = 0x1,
    -                    },
    -                },
    -                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    -                EPOUT5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  EasyDMA registers have not been captured for this endpoint
    -                        NoData = 0x0,
    -                        ///  EasyDMA registers have been captured for this endpoint
    -                        DataDone = 0x1,
    -                    },
    -                },
    -                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    -                EPOUT6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  EasyDMA registers have not been captured for this endpoint
    -                        NoData = 0x0,
    -                        ///  EasyDMA registers have been captured for this endpoint
    -                        DataDone = 0x1,
    -                    },
    -                },
    -                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    -                EPOUT7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  EasyDMA registers have not been captured for this endpoint
    -                        NoData = 0x0,
    -                        ///  EasyDMA registers have been captured for this endpoint
    -                        DataDone = 0x1,
    -                    },
    -                },
    -                ///  Captured state of endpoint's EasyDMA registers. Write '1' to clear.
    -                EPOUT8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  EasyDMA registers have not been captured for this endpoint
    -                        NoData = 0x0,
    -                        ///  EasyDMA registers have been captured for this endpoint
    -                        DataDone = 0x1,
    -                    },
    -                },
    -                padding: u7,
    -            }),
    -            ///  Provides information on which endpoint(s) an acknowledged data transfer has occurred (EPDATA event)
    -            EPDATASTATUS: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Acknowledged data transfer on this IN endpoint. Write '1' to clear.
    -                EPIN1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  No acknowledged data transfer on this endpoint
    -                        NotDone = 0x0,
    -                        ///  Acknowledged data transfer on this endpoint has occurred
    -                        DataDone = 0x1,
    -                    },
    -                },
    -                ///  Acknowledged data transfer on this IN endpoint. Write '1' to clear.
    -                EPIN2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  No acknowledged data transfer on this endpoint
    -                        NotDone = 0x0,
    -                        ///  Acknowledged data transfer on this endpoint has occurred
    -                        DataDone = 0x1,
    -                    },
    -                },
    -                ///  Acknowledged data transfer on this IN endpoint. Write '1' to clear.
    -                EPIN3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  No acknowledged data transfer on this endpoint
    -                        NotDone = 0x0,
    -                        ///  Acknowledged data transfer on this endpoint has occurred
    -                        DataDone = 0x1,
    -                    },
    -                },
    -                ///  Acknowledged data transfer on this IN endpoint. Write '1' to clear.
    -                EPIN4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  No acknowledged data transfer on this endpoint
    -                        NotDone = 0x0,
    -                        ///  Acknowledged data transfer on this endpoint has occurred
    -                        DataDone = 0x1,
    -                    },
    -                },
    -                ///  Acknowledged data transfer on this IN endpoint. Write '1' to clear.
    -                EPIN5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  No acknowledged data transfer on this endpoint
    -                        NotDone = 0x0,
    -                        ///  Acknowledged data transfer on this endpoint has occurred
    -                        DataDone = 0x1,
    -                    },
    -                },
    -                ///  Acknowledged data transfer on this IN endpoint. Write '1' to clear.
    -                EPIN6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  No acknowledged data transfer on this endpoint
    -                        NotDone = 0x0,
    -                        ///  Acknowledged data transfer on this endpoint has occurred
    -                        DataDone = 0x1,
    -                    },
    -                },
    -                ///  Acknowledged data transfer on this IN endpoint. Write '1' to clear.
    -                EPIN7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  No acknowledged data transfer on this endpoint
    -                        NotDone = 0x0,
    -                        ///  Acknowledged data transfer on this endpoint has occurred
    -                        DataDone = 0x1,
    -                    },
    -                },
    -                reserved17: u9,
    -                ///  Acknowledged data transfer on this OUT endpoint. Write '1' to clear.
    -                EPOUT1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  No acknowledged data transfer on this endpoint
    -                        NotStarted = 0x0,
    -                        ///  Acknowledged data transfer on this endpoint has occurred
    -                        Started = 0x1,
    -                    },
    -                },
    -                ///  Acknowledged data transfer on this OUT endpoint. Write '1' to clear.
    -                EPOUT2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  No acknowledged data transfer on this endpoint
    -                        NotStarted = 0x0,
    -                        ///  Acknowledged data transfer on this endpoint has occurred
    -                        Started = 0x1,
    -                    },
    -                },
    -                ///  Acknowledged data transfer on this OUT endpoint. Write '1' to clear.
    -                EPOUT3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  No acknowledged data transfer on this endpoint
    -                        NotStarted = 0x0,
    -                        ///  Acknowledged data transfer on this endpoint has occurred
    -                        Started = 0x1,
    -                    },
    -                },
    -                ///  Acknowledged data transfer on this OUT endpoint. Write '1' to clear.
    -                EPOUT4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  No acknowledged data transfer on this endpoint
    -                        NotStarted = 0x0,
    -                        ///  Acknowledged data transfer on this endpoint has occurred
    -                        Started = 0x1,
    -                    },
    -                },
    -                ///  Acknowledged data transfer on this OUT endpoint. Write '1' to clear.
    -                EPOUT5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  No acknowledged data transfer on this endpoint
    -                        NotStarted = 0x0,
    -                        ///  Acknowledged data transfer on this endpoint has occurred
    -                        Started = 0x1,
    -                    },
    -                },
    -                ///  Acknowledged data transfer on this OUT endpoint. Write '1' to clear.
    -                EPOUT6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  No acknowledged data transfer on this endpoint
    -                        NotStarted = 0x0,
    -                        ///  Acknowledged data transfer on this endpoint has occurred
    -                        Started = 0x1,
    -                    },
    -                },
    -                ///  Acknowledged data transfer on this OUT endpoint. Write '1' to clear.
    -                EPOUT7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  No acknowledged data transfer on this endpoint
    -                        NotStarted = 0x0,
    -                        ///  Acknowledged data transfer on this endpoint has occurred
    -                        Started = 0x1,
    -                    },
    -                },
    -                padding: u8,
    -            }),
    -            ///  Device USB address
    -            USBADDR: mmio.Mmio(packed struct(u32) {
    -                ///  Device USB address
    -                ADDR: u7,
    -                padding: u25,
    -            }),
    -            reserved1152: [12]u8,
    -            ///  SETUP data, byte 0, bmRequestType
    -            BMREQUESTTYPE: mmio.Mmio(packed struct(u32) {
    -                ///  Data transfer type
    -                RECIPIENT: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        ///  Device
    -                        Device = 0x0,
    -                        ///  Interface
    -                        Interface = 0x1,
    -                        ///  Endpoint
    -                        Endpoint = 0x2,
    -                        ///  Other
    -                        Other = 0x3,
    -                        _,
    -                    },
    -                },
    -                ///  Data transfer type
    -                TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Standard
    -                        Standard = 0x0,
    -                        ///  Class
    -                        Class = 0x1,
    -                        ///  Vendor
    -                        Vendor = 0x2,
    -                        _,
    -                    },
    -                },
    -                ///  Data transfer direction
    -                DIRECTION: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Host-to-device
    -                        HostToDevice = 0x0,
    -                        ///  Device-to-host
    -                        DeviceToHost = 0x1,
    -                    },
    -                },
    -                padding: u24,
    -            }),
    -            ///  SETUP data, byte 1, bRequest
    -            BREQUEST: mmio.Mmio(packed struct(u32) {
    -                ///  SETUP data, byte 1, bRequest. Values provided for standard requests only, user must implement class and vendor values.
    -                BREQUEST: packed union {
    -                    raw: u8,
    -                    value: enum(u8) {
    -                        ///  Standard request GET_STATUS
    -                        STD_GET_STATUS = 0x0,
    -                        ///  Standard request CLEAR_FEATURE
    -                        STD_CLEAR_FEATURE = 0x1,
    -                        ///  Standard request SET_FEATURE
    -                        STD_SET_FEATURE = 0x3,
    -                        ///  Standard request SET_ADDRESS
    -                        STD_SET_ADDRESS = 0x5,
    -                        ///  Standard request GET_DESCRIPTOR
    -                        STD_GET_DESCRIPTOR = 0x6,
    -                        ///  Standard request SET_DESCRIPTOR
    -                        STD_SET_DESCRIPTOR = 0x7,
    -                        ///  Standard request GET_CONFIGURATION
    -                        STD_GET_CONFIGURATION = 0x8,
    -                        ///  Standard request SET_CONFIGURATION
    -                        STD_SET_CONFIGURATION = 0x9,
    -                        ///  Standard request GET_INTERFACE
    -                        STD_GET_INTERFACE = 0xa,
    -                        ///  Standard request SET_INTERFACE
    -                        STD_SET_INTERFACE = 0xb,
    -                        ///  Standard request SYNCH_FRAME
    -                        STD_SYNCH_FRAME = 0xc,
    -                        _,
    -                    },
    -                },
    -                padding: u24,
    -            }),
    -            ///  SETUP data, byte 2, LSB of wValue
    -            WVALUEL: mmio.Mmio(packed struct(u32) {
    -                ///  SETUP data, byte 2, LSB of wValue
    -                WVALUEL: u8,
    -                padding: u24,
    -            }),
    -            ///  SETUP data, byte 3, MSB of wValue
    -            WVALUEH: mmio.Mmio(packed struct(u32) {
    -                ///  SETUP data, byte 3, MSB of wValue
    -                WVALUEH: u8,
    -                padding: u24,
    -            }),
    -            ///  SETUP data, byte 4, LSB of wIndex
    -            WINDEXL: mmio.Mmio(packed struct(u32) {
    -                ///  SETUP data, byte 4, LSB of wIndex
    -                WINDEXL: u8,
    -                padding: u24,
    -            }),
    -            ///  SETUP data, byte 5, MSB of wIndex
    -            WINDEXH: mmio.Mmio(packed struct(u32) {
    -                ///  SETUP data, byte 5, MSB of wIndex
    -                WINDEXH: u8,
    -                padding: u24,
    -            }),
    -            ///  SETUP data, byte 6, LSB of wLength
    -            WLENGTHL: mmio.Mmio(packed struct(u32) {
    -                ///  SETUP data, byte 6, LSB of wLength
    -                WLENGTHL: u8,
    -                padding: u24,
    -            }),
    -            ///  SETUP data, byte 7, MSB of wLength
    -            WLENGTHH: mmio.Mmio(packed struct(u32) {
    -                ///  SETUP data, byte 7, MSB of wLength
    -                WLENGTHH: u8,
    -                padding: u24,
    -            }),
    -            reserved1280: [96]u8,
    -            ///  Enable USB
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable USB
    -                ENABLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  USB peripheral is disabled
    -                        Disabled = 0x0,
    -                        ///  USB peripheral is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Control of the USB pull-up
    -            USBPULLUP: mmio.Mmio(packed struct(u32) {
    -                ///  Control of the USB pull-up on the D+ line
    -                CONNECT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pull-up is disconnected
    -                        Disabled = 0x0,
    -                        ///  Pull-up is connected to D+
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  State D+ and D- lines will be forced into by the DPDMDRIVE task. The DPDMNODRIVE task reverts the control of the lines to MAC IP (no forcing).
    -            DPDMVALUE: mmio.Mmio(packed struct(u32) {
    -                ///  State D+ and D- lines will be forced into by the DPDMDRIVE task
    -                STATE: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        ///  D+ forced low, D- forced high (K state) for a timing preset in hardware (50 us or 5 ms, depending on bus state)
    -                        Resume = 0x1,
    -                        ///  D+ forced high, D- forced low (J state)
    -                        J = 0x2,
    -                        ///  D+ forced low, D- forced high (K state)
    -                        K = 0x4,
    -                        _,
    -                    },
    -                },
    -                padding: u27,
    -            }),
    -            ///  Data toggle control and status
    -            DTOGGLE: mmio.Mmio(packed struct(u32) {
    -                ///  Select bulk endpoint number
    -                EP: u3,
    -                reserved7: u4,
    -                ///  Selects IN or OUT endpoint
    -                IO: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Selects OUT endpoint
    -                        Out = 0x0,
    -                        ///  Selects IN endpoint
    -                        In = 0x1,
    -                    },
    -                },
    -                ///  Data toggle value
    -                VALUE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  No action on data toggle when writing the register with this value
    -                        Nop = 0x0,
    -                        ///  Data toggle is DATA0 on endpoint set by EP and IO
    -                        Data0 = 0x1,
    -                        ///  Data toggle is DATA1 on endpoint set by EP and IO
    -                        Data1 = 0x2,
    -                        _,
    -                    },
    -                },
    -                padding: u22,
    -            }),
    -            ///  Endpoint IN enable
    -            EPINEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable IN endpoint 0
    -                IN0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable endpoint IN 0 (no response to IN tokens)
    -                        Disable = 0x0,
    -                        ///  Enable endpoint IN 0 (response to IN tokens)
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable IN endpoint 1
    -                IN1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable endpoint IN 1 (no response to IN tokens)
    -                        Disable = 0x0,
    -                        ///  Enable endpoint IN 1 (response to IN tokens)
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable IN endpoint 2
    -                IN2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable endpoint IN 2 (no response to IN tokens)
    -                        Disable = 0x0,
    -                        ///  Enable endpoint IN 2 (response to IN tokens)
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable IN endpoint 3
    -                IN3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable endpoint IN 3 (no response to IN tokens)
    -                        Disable = 0x0,
    -                        ///  Enable endpoint IN 3 (response to IN tokens)
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable IN endpoint 4
    -                IN4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable endpoint IN 4 (no response to IN tokens)
    -                        Disable = 0x0,
    -                        ///  Enable endpoint IN 4 (response to IN tokens)
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable IN endpoint 5
    -                IN5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable endpoint IN 5 (no response to IN tokens)
    -                        Disable = 0x0,
    -                        ///  Enable endpoint IN 5 (response to IN tokens)
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable IN endpoint 6
    -                IN6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable endpoint IN 6 (no response to IN tokens)
    -                        Disable = 0x0,
    -                        ///  Enable endpoint IN 6 (response to IN tokens)
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable IN endpoint 7
    -                IN7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable endpoint IN 7 (no response to IN tokens)
    -                        Disable = 0x0,
    -                        ///  Enable endpoint IN 7 (response to IN tokens)
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable ISO IN endpoint
    -                ISOIN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable ISO IN endpoint 8
    -                        Disable = 0x0,
    -                        ///  Enable ISO IN endpoint 8
    -                        Enable = 0x1,
    -                    },
    -                },
    -                padding: u23,
    -            }),
    -            ///  Endpoint OUT enable
    -            EPOUTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable OUT endpoint 0
    -                OUT0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable endpoint OUT 0 (no response to OUT tokens)
    -                        Disable = 0x0,
    -                        ///  Enable endpoint OUT 0 (response to OUT tokens)
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable OUT endpoint 1
    -                OUT1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable endpoint OUT 1 (no response to OUT tokens)
    -                        Disable = 0x0,
    -                        ///  Enable endpoint OUT 1 (response to OUT tokens)
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable OUT endpoint 2
    -                OUT2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable endpoint OUT 2 (no response to OUT tokens)
    -                        Disable = 0x0,
    -                        ///  Enable endpoint OUT 2 (response to OUT tokens)
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable OUT endpoint 3
    -                OUT3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable endpoint OUT 3 (no response to OUT tokens)
    -                        Disable = 0x0,
    -                        ///  Enable endpoint OUT 3 (response to OUT tokens)
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable OUT endpoint 4
    -                OUT4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable endpoint OUT 4 (no response to OUT tokens)
    -                        Disable = 0x0,
    -                        ///  Enable endpoint OUT 4 (response to OUT tokens)
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable OUT endpoint 5
    -                OUT5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable endpoint OUT 5 (no response to OUT tokens)
    -                        Disable = 0x0,
    -                        ///  Enable endpoint OUT 5 (response to OUT tokens)
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable OUT endpoint 6
    -                OUT6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable endpoint OUT 6 (no response to OUT tokens)
    -                        Disable = 0x0,
    -                        ///  Enable endpoint OUT 6 (response to OUT tokens)
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable OUT endpoint 7
    -                OUT7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable endpoint OUT 7 (no response to OUT tokens)
    -                        Disable = 0x0,
    -                        ///  Enable endpoint OUT 7 (response to OUT tokens)
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable ISO OUT endpoint 8
    -                ISOOUT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable ISO OUT endpoint 8
    -                        Disable = 0x0,
    -                        ///  Enable ISO OUT endpoint 8
    -                        Enable = 0x1,
    -                    },
    -                },
    -                padding: u23,
    -            }),
    -            ///  STALL endpoints
    -            EPSTALL: mmio.Mmio(packed struct(u32) {
    -                ///  Select endpoint number
    -                EP: u3,
    -                reserved7: u4,
    -                ///  Selects IN or OUT endpoint
    -                IO: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Selects OUT endpoint
    -                        Out = 0x0,
    -                        ///  Selects IN endpoint
    -                        In = 0x1,
    -                    },
    -                },
    -                ///  Stall selected endpoint
    -                STALL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Don't stall selected endpoint
    -                        UnStall = 0x0,
    -                        ///  Stall selected endpoint
    -                        Stall = 0x1,
    -                    },
    -                },
    -                padding: u23,
    -            }),
    -            ///  Controls the split of ISO buffers
    -            ISOSPLIT: mmio.Mmio(packed struct(u32) {
    -                ///  Controls the split of ISO buffers
    -                SPLIT: packed union {
    -                    raw: u16,
    -                    value: enum(u16) {
    -                        ///  Full buffer dedicated to either iso IN or OUT
    -                        OneDir = 0x0,
    -                        ///  Lower half for IN, upper half for OUT
    -                        HalfIN = 0x80,
    -                        _,
    -                    },
    -                },
    -                padding: u16,
    -            }),
    -            ///  Returns the current value of the start of frame counter
    -            FRAMECNTR: mmio.Mmio(packed struct(u32) {
    -                ///  Returns the current value of the start of frame counter
    -                FRAMECNTR: u11,
    -                padding: u21,
    -            }),
    -            reserved1324: [8]u8,
    -            ///  Controls USBD peripheral low power mode during USB suspend
    -            LOWPOWER: mmio.Mmio(packed struct(u32) {
    -                ///  Controls USBD peripheral low-power mode during USB suspend
    -                LOWPOWER: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Software must write this value to exit low power mode and before performing a remote wake-up
    -                        ForceNormal = 0x0,
    -                        ///  Software must write this value to enter low power mode after DMA and software have finished interacting with the USB peripheral
    -                        LowPower = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Controls the response of the ISO IN endpoint to an IN token when no data is ready to be sent
    -            ISOINCONFIG: mmio.Mmio(packed struct(u32) {
    -                ///  Controls the response of the ISO IN endpoint to an IN token when no data is ready to be sent
    -                RESPONSE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Endpoint does not respond in that case
    -                        NoResp = 0x0,
    -                        ///  Endpoint responds with a zero-length data packet in that case
    -                        ZeroData = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -        };
    -
    -        ///  NFC-A compatible radio
    -        pub const NFCT = extern struct {
    -            ///  Activate NFCT peripheral for incoming and outgoing frames, change state to activated
    -            TASKS_ACTIVATE: mmio.Mmio(packed struct(u32) {
    -                ///  Activate NFCT peripheral for incoming and outgoing frames, change state to activated
    -                TASKS_ACTIVATE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Disable NFCT peripheral
    -            TASKS_DISABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Disable NFCT peripheral
    -                TASKS_DISABLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Enable NFC sense field mode, change state to sense mode
    -            TASKS_SENSE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable NFC sense field mode, change state to sense mode
    -                TASKS_SENSE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Start transmission of an outgoing frame, change state to transmit
    -            TASKS_STARTTX: mmio.Mmio(packed struct(u32) {
    -                ///  Start transmission of an outgoing frame, change state to transmit
    -                TASKS_STARTTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved28: [12]u8,
    -            ///  Initializes the EasyDMA for receive.
    -            TASKS_ENABLERXDATA: mmio.Mmio(packed struct(u32) {
    -                ///  Initializes the EasyDMA for receive.
    -                TASKS_ENABLERXDATA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved36: [4]u8,
    -            ///  Force state machine to IDLE state
    -            TASKS_GOIDLE: mmio.Mmio(packed struct(u32) {
    -                ///  Force state machine to IDLE state
    -                TASKS_GOIDLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Force state machine to SLEEP_A state
    -            TASKS_GOSLEEP: mmio.Mmio(packed struct(u32) {
    -                ///  Force state machine to SLEEP_A state
    -                TASKS_GOSLEEP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved256: [212]u8,
    -            ///  The NFCT peripheral is ready to receive and send frames
    -            EVENTS_READY: mmio.Mmio(packed struct(u32) {
    -                ///  The NFCT peripheral is ready to receive and send frames
    -                EVENTS_READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Remote NFC field detected
    -            EVENTS_FIELDDETECTED: mmio.Mmio(packed struct(u32) {
    -                ///  Remote NFC field detected
    -                EVENTS_FIELDDETECTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Remote NFC field lost
    -            EVENTS_FIELDLOST: mmio.Mmio(packed struct(u32) {
    -                ///  Remote NFC field lost
    -                EVENTS_FIELDLOST: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Marks the start of the first symbol of a transmitted frame
    -            EVENTS_TXFRAMESTART: mmio.Mmio(packed struct(u32) {
    -                ///  Marks the start of the first symbol of a transmitted frame
    -                EVENTS_TXFRAMESTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Marks the end of the last transmitted on-air symbol of a frame
    -            EVENTS_TXFRAMEEND: mmio.Mmio(packed struct(u32) {
    -                ///  Marks the end of the last transmitted on-air symbol of a frame
    -                EVENTS_TXFRAMEEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Marks the end of the first symbol of a received frame
    -            EVENTS_RXFRAMESTART: mmio.Mmio(packed struct(u32) {
    -                ///  Marks the end of the first symbol of a received frame
    -                EVENTS_RXFRAMESTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Received data has been checked (CRC, parity) and transferred to RAM, and EasyDMA has ended accessing the RX buffer
    -            EVENTS_RXFRAMEEND: mmio.Mmio(packed struct(u32) {
    -                ///  Received data has been checked (CRC, parity) and transferred to RAM, and EasyDMA has ended accessing the RX buffer
    -                EVENTS_RXFRAMEEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  NFC error reported. The ERRORSTATUS register contains details on the source of the error.
    -            EVENTS_ERROR: mmio.Mmio(packed struct(u32) {
    -                ///  NFC error reported. The ERRORSTATUS register contains details on the source of the error.
    -                EVENTS_ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved296: [8]u8,
    -            ///  NFC RX frame error reported. The FRAMESTATUS.RX register contains details on the source of the error.
    -            EVENTS_RXERROR: mmio.Mmio(packed struct(u32) {
    -                ///  NFC RX frame error reported. The FRAMESTATUS.RX register contains details on the source of the error.
    -                EVENTS_RXERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  RX buffer (as defined by PACKETPTR and MAXLEN) in Data RAM full.
    -            EVENTS_ENDRX: mmio.Mmio(packed struct(u32) {
    -                ///  RX buffer (as defined by PACKETPTR and MAXLEN) in Data RAM full.
    -                EVENTS_ENDRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Transmission of data in RAM has ended, and EasyDMA has ended accessing the TX buffer
    -            EVENTS_ENDTX: mmio.Mmio(packed struct(u32) {
    -                ///  Transmission of data in RAM has ended, and EasyDMA has ended accessing the TX buffer
    -                EVENTS_ENDTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved312: [4]u8,
    -            ///  Auto collision resolution process has started
    -            EVENTS_AUTOCOLRESSTARTED: mmio.Mmio(packed struct(u32) {
    -                ///  Auto collision resolution process has started
    -                EVENTS_AUTOCOLRESSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved328: [12]u8,
    -            ///  NFC auto collision resolution error reported.
    -            EVENTS_COLLISION: mmio.Mmio(packed struct(u32) {
    -                ///  NFC auto collision resolution error reported.
    -                EVENTS_COLLISION: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  NFC auto collision resolution successfully completed
    -            EVENTS_SELECTED: mmio.Mmio(packed struct(u32) {
    -                ///  NFC auto collision resolution successfully completed
    -                EVENTS_SELECTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  EasyDMA is ready to receive or send frames.
    -            EVENTS_STARTED: mmio.Mmio(packed struct(u32) {
    -                ///  EasyDMA is ready to receive or send frames.
    -                EVENTS_STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved512: [172]u8,
    -            ///  Shortcuts between local events and tasks
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                ///  Shortcut between event FIELDDETECTED and task ACTIVATE
    -                FIELDDETECTED_ACTIVATE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event FIELDLOST and task SENSE
    -                FIELDLOST_SENSE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved5: u3,
    -                ///  Shortcut between event TXFRAMEEND and task ENABLERXDATA
    -                TXFRAMEEND_ENABLERXDATA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u26,
    -            }),
    -            reserved768: [252]u8,
    -            ///  Enable or disable interrupt
    -            INTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable interrupt for event READY
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event FIELDDETECTED
    -                FIELDDETECTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event FIELDLOST
    -                FIELDLOST: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event TXFRAMESTART
    -                TXFRAMESTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event TXFRAMEEND
    -                TXFRAMEEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event RXFRAMESTART
    -                RXFRAMESTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event RXFRAMEEND
    -                RXFRAMEEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event ERROR
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved10: u2,
    -                ///  Enable or disable interrupt for event RXERROR
    -                RXERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event ENDRX
    -                ENDRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event ENDTX
    -                ENDTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved14: u1,
    -                ///  Enable or disable interrupt for event AUTOCOLRESSTARTED
    -                AUTOCOLRESSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved18: u3,
    -                ///  Enable or disable interrupt for event COLLISION
    -                COLLISION: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event SELECTED
    -                SELECTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event STARTED
    -                STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u11,
    -            }),
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to enable interrupt for event READY
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event FIELDDETECTED
    -                FIELDDETECTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event FIELDLOST
    -                FIELDLOST: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event TXFRAMESTART
    -                TXFRAMESTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event TXFRAMEEND
    -                TXFRAMEEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event RXFRAMESTART
    -                RXFRAMESTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event RXFRAMEEND
    -                RXFRAMEEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event ERROR
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved10: u2,
    -                ///  Write '1' to enable interrupt for event RXERROR
    -                RXERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event ENDRX
    -                ENDRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event ENDTX
    -                ENDTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved14: u1,
    -                ///  Write '1' to enable interrupt for event AUTOCOLRESSTARTED
    -                AUTOCOLRESSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved18: u3,
    -                ///  Write '1' to enable interrupt for event COLLISION
    -                COLLISION: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event SELECTED
    -                SELECTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event STARTED
    -                STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u11,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to disable interrupt for event READY
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event FIELDDETECTED
    -                FIELDDETECTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event FIELDLOST
    -                FIELDLOST: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event TXFRAMESTART
    -                TXFRAMESTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event TXFRAMEEND
    -                TXFRAMEEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event RXFRAMESTART
    -                RXFRAMESTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event RXFRAMEEND
    -                RXFRAMEEND: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event ERROR
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved10: u2,
    -                ///  Write '1' to disable interrupt for event RXERROR
    -                RXERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event ENDRX
    -                ENDRX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event ENDTX
    -                ENDTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved14: u1,
    -                ///  Write '1' to disable interrupt for event AUTOCOLRESSTARTED
    -                AUTOCOLRESSTARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved18: u3,
    -                ///  Write '1' to disable interrupt for event COLLISION
    -                COLLISION: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event SELECTED
    -                SELECTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event STARTED
    -                STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u11,
    -            }),
    -            reserved1028: [248]u8,
    -            ///  NFC Error Status register
    -            ERRORSTATUS: mmio.Mmio(packed struct(u32) {
    -                ///  No STARTTX task triggered before expiration of the time set in FRAMEDELAYMAX
    -                FRAMEDELAYTIMEOUT: u1,
    -                padding: u31,
    -            }),
    -            reserved1040: [8]u8,
    -            ///  NfcTag state register
    -            NFCTAGSTATE: mmio.Mmio(packed struct(u32) {
    -                ///  NfcTag state
    -                NFCTAGSTATE: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        ///  Disabled or sense
    -                        Disabled = 0x0,
    -                        ///  RampUp
    -                        RampUp = 0x2,
    -                        ///  Idle
    -                        Idle = 0x3,
    -                        ///  Receive
    -                        Receive = 0x4,
    -                        ///  FrameDelay
    -                        FrameDelay = 0x5,
    -                        ///  Transmit
    -                        Transmit = 0x6,
    -                        _,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            reserved1056: [12]u8,
    -            ///  Sleep state during automatic collision resolution
    -            SLEEPSTATE: mmio.Mmio(packed struct(u32) {
    -                ///  Reflects the sleep state during automatic collision resolution. Set to IDLE by a GOIDLE task. Set to SLEEP_A when a valid SLEEP_REQ frame is received or by a GOSLEEP task.
    -                SLEEPSTATE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  State is IDLE.
    -                        Idle = 0x0,
    -                        ///  State is SLEEP_A.
    -                        SleepA = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1084: [24]u8,
    -            ///  Indicates the presence or not of a valid field
    -            FIELDPRESENT: mmio.Mmio(packed struct(u32) {
    -                ///  Indicates if a valid field is present. Available only in the activated state.
    -                FIELDPRESENT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  No valid field detected
    -                        NoField = 0x0,
    -                        ///  Valid field detected
    -                        FieldPresent = 0x1,
    -                    },
    -                },
    -                ///  Indicates if the low level has locked to the field
    -                LOCKDETECT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Not locked to field
    -                        NotLocked = 0x0,
    -                        ///  Locked to field
    -                        Locked = 0x1,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            reserved1284: [196]u8,
    -            ///  Minimum frame delay
    -            FRAMEDELAYMIN: mmio.Mmio(packed struct(u32) {
    -                ///  Minimum frame delay in number of 13.56 MHz clocks
    -                FRAMEDELAYMIN: u16,
    -                padding: u16,
    -            }),
    -            ///  Maximum frame delay
    -            FRAMEDELAYMAX: mmio.Mmio(packed struct(u32) {
    -                ///  Maximum frame delay in number of 13.56 MHz clocks
    -                FRAMEDELAYMAX: u20,
    -                padding: u12,
    -            }),
    -            ///  Configuration register for the Frame Delay Timer
    -            FRAMEDELAYMODE: mmio.Mmio(packed struct(u32) {
    -                ///  Configuration register for the Frame Delay Timer
    -                FRAMEDELAYMODE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Transmission is independent of frame timer and will start when the STARTTX task is triggered. No timeout.
    -                        FreeRun = 0x0,
    -                        ///  Frame is transmitted between FRAMEDELAYMIN and FRAMEDELAYMAX
    -                        Window = 0x1,
    -                        ///  Frame is transmitted exactly at FRAMEDELAYMAX
    -                        ExactVal = 0x2,
    -                        ///  Frame is transmitted on a bit grid between FRAMEDELAYMIN and FRAMEDELAYMAX
    -                        WindowGrid = 0x3,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            ///  Packet pointer for TXD and RXD data storage in Data RAM
    -            PACKETPTR: mmio.Mmio(packed struct(u32) {
    -                ///  Packet pointer for TXD and RXD data storage in Data RAM. This address is a byte-aligned RAM address.
    -                PTR: u32,
    -            }),
    -            ///  Size of the RAM buffer allocated to TXD and RXD data storage each
    -            MAXLEN: mmio.Mmio(packed struct(u32) {
    -                ///  Size of the RAM buffer allocated to TXD and RXD data storage each
    -                MAXLEN: u9,
    -                padding: u23,
    -            }),
    -            reserved1424: [120]u8,
    -            ///  Last NFCID1 part (4, 7 or 10 bytes ID)
    -            NFCID1_LAST: mmio.Mmio(packed struct(u32) {
    -                ///  NFCID1 byte Z (very last byte sent)
    -                NFCID1_Z: u8,
    -                ///  NFCID1 byte Y
    -                NFCID1_Y: u8,
    -                ///  NFCID1 byte X
    -                NFCID1_X: u8,
    -                ///  NFCID1 byte W
    -                NFCID1_W: u8,
    -            }),
    -            ///  Second last NFCID1 part (7 or 10 bytes ID)
    -            NFCID1_2ND_LAST: mmio.Mmio(packed struct(u32) {
    -                ///  NFCID1 byte V
    -                NFCID1_V: u8,
    -                ///  NFCID1 byte U
    -                NFCID1_U: u8,
    -                ///  NFCID1 byte T
    -                NFCID1_T: u8,
    -                padding: u8,
    -            }),
    -            ///  Third last NFCID1 part (10 bytes ID)
    -            NFCID1_3RD_LAST: mmio.Mmio(packed struct(u32) {
    -                ///  NFCID1 byte S
    -                NFCID1_S: u8,
    -                ///  NFCID1 byte R
    -                NFCID1_R: u8,
    -                ///  NFCID1 byte Q
    -                NFCID1_Q: u8,
    -                padding: u8,
    -            }),
    -            ///  Controls the auto collision resolution function. This setting must be done before the NFCT peripheral is enabled.
    -            AUTOCOLRESCONFIG: mmio.Mmio(packed struct(u32) {
    -                ///  Enables/disables auto collision resolution
    -                MODE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Auto collision resolution enabled
    -                        Enabled = 0x0,
    -                        ///  Auto collision resolution disabled
    -                        Disabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  NFC-A SENS_RES auto-response settings
    -            SENSRES: mmio.Mmio(packed struct(u32) {
    -                ///  Bit frame SDD as defined by the b5:b1 of byte 1 in SENS_RES response in the NFC Forum, NFC Digital Protocol Technical Specification
    -                BITFRAMESDD: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        ///  SDD pattern 00000
    -                        SDD00000 = 0x0,
    -                        ///  SDD pattern 00001
    -                        SDD00001 = 0x1,
    -                        ///  SDD pattern 00010
    -                        SDD00010 = 0x2,
    -                        ///  SDD pattern 00100
    -                        SDD00100 = 0x4,
    -                        ///  SDD pattern 01000
    -                        SDD01000 = 0x8,
    -                        ///  SDD pattern 10000
    -                        SDD10000 = 0x10,
    -                        _,
    -                    },
    -                },
    -                ///  Reserved for future use. Shall be 0.
    -                RFU5: u1,
    -                ///  NFCID1 size. This value is used by the auto collision resolution engine.
    -                NFCIDSIZE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  NFCID1 size: single (4 bytes)
    -                        NFCID1Single = 0x0,
    -                        ///  NFCID1 size: double (7 bytes)
    -                        NFCID1Double = 0x1,
    -                        ///  NFCID1 size: triple (10 bytes)
    -                        NFCID1Triple = 0x2,
    -                        _,
    -                    },
    -                },
    -                ///  Tag platform configuration as defined by the b4:b1 of byte 2 in SENS_RES response in the NFC Forum, NFC Digital Protocol Technical Specification
    -                PLATFCONFIG: u4,
    -                ///  Reserved for future use. Shall be 0.
    -                RFU74: u4,
    -                padding: u16,
    -            }),
    -            ///  NFC-A SEL_RES auto-response settings
    -            SELRES: mmio.Mmio(packed struct(u32) {
    -                ///  Reserved for future use. Shall be 0.
    -                RFU10: u2,
    -                ///  Cascade as defined by the b3 of SEL_RES response in the NFC Forum, NFC Digital Protocol Technical Specification (controlled by hardware, shall be 0)
    -                CASCADE: u1,
    -                ///  Reserved for future use. Shall be 0.
    -                RFU43: u2,
    -                ///  Protocol as defined by the b7:b6 of SEL_RES response in the NFC Forum, NFC Digital Protocol Technical Specification
    -                PROTOCOL: u2,
    -                ///  Reserved for future use. Shall be 0.
    -                RFU7: u1,
    -                padding: u24,
    -            }),
    -        };
    -
    -        ///  GPIO Tasks and Events
    -        pub const GPIOTE = extern struct {
    -            ///  Description collection: Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is configured in CONFIG[n].POLARITY.
    -            TASKS_OUT: [8]mmio.Mmio(packed struct(u32) {
    -                ///  Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is configured in CONFIG[n].POLARITY.
    -                TASKS_OUT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved48: [16]u8,
    -            ///  Description collection: Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is to set it high.
    -            TASKS_SET: [8]mmio.Mmio(packed struct(u32) {
    -                ///  Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is to set it high.
    -                TASKS_SET: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved96: [16]u8,
    -            ///  Description collection: Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is to set it low.
    -            TASKS_CLR: [8]mmio.Mmio(packed struct(u32) {
    -                ///  Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is to set it low.
    -                TASKS_CLR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved256: [128]u8,
    -            ///  Description collection: Event generated from pin specified in CONFIG[n].PSEL
    -            EVENTS_IN: [8]mmio.Mmio(packed struct(u32) {
    -                ///  Event generated from pin specified in CONFIG[n].PSEL
    -                EVENTS_IN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved380: [92]u8,
    -            ///  Event generated from multiple input GPIO pins with SENSE mechanism enabled
    -            EVENTS_PORT: mmio.Mmio(packed struct(u32) {
    -                ///  Event generated from multiple input GPIO pins with SENSE mechanism enabled
    -                EVENTS_PORT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved772: [388]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to enable interrupt for event IN[0]
    -                IN0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event IN[1]
    -                IN1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event IN[2]
    -                IN2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event IN[3]
    -                IN3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event IN[4]
    -                IN4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event IN[5]
    -                IN5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event IN[6]
    -                IN6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event IN[7]
    -                IN7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved31: u23,
    -                ///  Write '1' to enable interrupt for event PORT
    -                PORT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to disable interrupt for event IN[0]
    -                IN0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event IN[1]
    -                IN1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event IN[2]
    -                IN2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event IN[3]
    -                IN3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event IN[4]
    -                IN4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event IN[5]
    -                IN5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event IN[6]
    -                IN6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event IN[7]
    -                IN7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved31: u23,
    -                ///  Write '1' to disable interrupt for event PORT
    -                PORT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -            }),
    -            reserved1296: [516]u8,
    -            ///  Description collection: Configuration for OUT[n], SET[n] and CLR[n] tasks and IN[n] event
    -            CONFIG: [8]mmio.Mmio(packed struct(u32) {
    -                ///  Mode
    -                MODE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Disabled. Pin specified by PSEL will not be acquired by the GPIOTE module.
    -                        Disabled = 0x0,
    -                        ///  Event mode
    -                        Event = 0x1,
    -                        ///  Task mode
    -                        Task = 0x3,
    -                        _,
    -                    },
    -                },
    -                reserved8: u6,
    -                ///  GPIO number associated with SET[n], CLR[n] and OUT[n] tasks and IN[n] event
    -                PSEL: u5,
    -                ///  Port number
    -                PORT: u1,
    -                reserved16: u2,
    -                ///  When In task mode: Operation to be performed on output when OUT[n] task is triggered. When In event mode: Operation on input that shall trigger IN[n] event.
    -                POLARITY: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Task mode: No effect on pin from OUT[n] task. Event mode: no IN[n] event generated on pin activity.
    -                        None = 0x0,
    -                        ///  Task mode: Set pin from OUT[n] task. Event mode: Generate IN[n] event when rising edge on pin.
    -                        LoToHi = 0x1,
    -                        ///  Task mode: Clear pin from OUT[n] task. Event mode: Generate IN[n] event when falling edge on pin.
    -                        HiToLo = 0x2,
    -                        ///  Task mode: Toggle pin from OUT[n]. Event mode: Generate IN[n] when any change on pin.
    -                        Toggle = 0x3,
    -                    },
    -                },
    -                reserved20: u2,
    -                ///  When in task mode: Initial value of the output when the GPIOTE channel is configured. When in event mode: No effect.
    -                OUTINIT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Task mode: Initial value of pin before task triggering is low
    -                        Low = 0x0,
    -                        ///  Task mode: Initial value of pin before task triggering is high
    -                        High = 0x1,
    -                    },
    -                },
    -                padding: u11,
    -            }),
    -        };
    -
    -        ///  Successive approximation register (SAR) analog-to-digital converter
    -        pub const SAADC = extern struct {
    -            ///  Starts the SAADC and prepares the result buffer in RAM
    -            TASKS_START: mmio.Mmio(packed struct(u32) {
    -                ///  Starts the SAADC and prepares the result buffer in RAM
    -                TASKS_START: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Takes one SAADC sample
    -            TASKS_SAMPLE: mmio.Mmio(packed struct(u32) {
    -                ///  Takes one SAADC sample
    -                TASKS_SAMPLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Stops the SAADC and terminates all on-going conversions
    -            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    -                ///  Stops the SAADC and terminates all on-going conversions
    -                TASKS_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Starts offset auto-calibration
    -            TASKS_CALIBRATEOFFSET: mmio.Mmio(packed struct(u32) {
    -                ///  Starts offset auto-calibration
    -                TASKS_CALIBRATEOFFSET: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved256: [240]u8,
    -            ///  The SAADC has started
    -            EVENTS_STARTED: mmio.Mmio(packed struct(u32) {
    -                ///  The SAADC has started
    -                EVENTS_STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  The SAADC has filled up the result buffer
    -            EVENTS_END: mmio.Mmio(packed struct(u32) {
    -                ///  The SAADC has filled up the result buffer
    -                EVENTS_END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  A conversion task has been completed. Depending on the configuration, multiple conversions might be needed for a result to be transferred to RAM.
    -            EVENTS_DONE: mmio.Mmio(packed struct(u32) {
    -                ///  A conversion task has been completed. Depending on the configuration, multiple conversions might be needed for a result to be transferred to RAM.
    -                EVENTS_DONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Result ready for transfer to RAM
    -            EVENTS_RESULTDONE: mmio.Mmio(packed struct(u32) {
    -                ///  Result ready for transfer to RAM
    -                EVENTS_RESULTDONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Calibration is complete
    -            EVENTS_CALIBRATEDONE: mmio.Mmio(packed struct(u32) {
    -                ///  Calibration is complete
    -                EVENTS_CALIBRATEDONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  The SAADC has stopped
    -            EVENTS_STOPPED: mmio.Mmio(packed struct(u32) {
    -                ///  The SAADC has stopped
    -                EVENTS_STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved768: [488]u8,
    -            ///  Enable or disable interrupt
    -            INTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable interrupt for event STARTED
    -                STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event END
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event DONE
    -                DONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event RESULTDONE
    -                RESULTDONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event CALIBRATEDONE
    -                CALIBRATEDONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event STOPPED
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event CH0LIMITH
    -                CH0LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event CH0LIMITL
    -                CH0LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event CH1LIMITH
    -                CH1LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event CH1LIMITL
    -                CH1LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event CH2LIMITH
    -                CH2LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event CH2LIMITL
    -                CH2LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event CH3LIMITH
    -                CH3LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event CH3LIMITL
    -                CH3LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event CH4LIMITH
    -                CH4LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event CH4LIMITL
    -                CH4LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event CH5LIMITH
    -                CH5LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event CH5LIMITL
    -                CH5LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event CH6LIMITH
    -                CH6LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event CH6LIMITL
    -                CH6LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event CH7LIMITH
    -                CH7LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event CH7LIMITL
    -                CH7LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u10,
    -            }),
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to enable interrupt for event STARTED
    -                STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event END
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event DONE
    -                DONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event RESULTDONE
    -                RESULTDONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event CALIBRATEDONE
    -                CALIBRATEDONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event STOPPED
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event CH0LIMITH
    -                CH0LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event CH0LIMITL
    -                CH0LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event CH1LIMITH
    -                CH1LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event CH1LIMITL
    -                CH1LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event CH2LIMITH
    -                CH2LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event CH2LIMITL
    -                CH2LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event CH3LIMITH
    -                CH3LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event CH3LIMITL
    -                CH3LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event CH4LIMITH
    -                CH4LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event CH4LIMITL
    -                CH4LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event CH5LIMITH
    -                CH5LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event CH5LIMITL
    -                CH5LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event CH6LIMITH
    -                CH6LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event CH6LIMITL
    -                CH6LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event CH7LIMITH
    -                CH7LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event CH7LIMITL
    -                CH7LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u10,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to disable interrupt for event STARTED
    -                STARTED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event END
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event DONE
    -                DONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event RESULTDONE
    -                RESULTDONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event CALIBRATEDONE
    -                CALIBRATEDONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event STOPPED
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event CH0LIMITH
    -                CH0LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event CH0LIMITL
    -                CH0LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event CH1LIMITH
    -                CH1LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event CH1LIMITL
    -                CH1LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event CH2LIMITH
    -                CH2LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event CH2LIMITL
    -                CH2LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event CH3LIMITH
    -                CH3LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event CH3LIMITL
    -                CH3LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event CH4LIMITH
    -                CH4LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event CH4LIMITL
    -                CH4LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event CH5LIMITH
    -                CH5LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event CH5LIMITL
    -                CH5LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event CH6LIMITH
    -                CH6LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event CH6LIMITL
    -                CH6LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event CH7LIMITH
    -                CH7LIMITH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event CH7LIMITL
    -                CH7LIMITL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u10,
    -            }),
    -            reserved1024: [244]u8,
    -            ///  Status
    -            STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  Status
    -                STATUS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  SAADC is ready. No on-going conversions.
    -                        Ready = 0x0,
    -                        ///  SAADC is busy. Conversion in progress.
    -                        Busy = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1280: [252]u8,
    -            ///  Enable or disable SAADC
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable SAADC
    -                ENABLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable SAADC
    -                        Disabled = 0x0,
    -                        ///  Enable SAADC
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1520: [236]u8,
    -            ///  Resolution configuration
    -            RESOLUTION: mmio.Mmio(packed struct(u32) {
    -                ///  Set the resolution
    -                VAL: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        ///  8 bits
    -                        @"8bit" = 0x0,
    -                        ///  10 bits
    -                        @"10bit" = 0x1,
    -                        ///  12 bits
    -                        @"12bit" = 0x2,
    -                        ///  14 bits
    -                        @"14bit" = 0x3,
    -                        _,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            ///  Oversampling configuration. The RESOLUTION is applied before averaging, thus for high OVERSAMPLE a higher RESOLUTION should be used.
    -            OVERSAMPLE: mmio.Mmio(packed struct(u32) {
    -                ///  Oversample control
    -                OVERSAMPLE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  Bypass oversampling
    -                        Bypass = 0x0,
    -                        ///  Oversample 2x
    -                        Over2x = 0x1,
    -                        ///  Oversample 4x
    -                        Over4x = 0x2,
    -                        ///  Oversample 8x
    -                        Over8x = 0x3,
    -                        ///  Oversample 16x
    -                        Over16x = 0x4,
    -                        ///  Oversample 32x
    -                        Over32x = 0x5,
    -                        ///  Oversample 64x
    -                        Over64x = 0x6,
    -                        ///  Oversample 128x
    -                        Over128x = 0x7,
    -                        ///  Oversample 256x
    -                        Over256x = 0x8,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            ///  Controls normal or continuous sample rate
    -            SAMPLERATE: mmio.Mmio(packed struct(u32) {
    -                ///  Capture and compare value. Sample rate is 16 MHz/CC
    -                CC: u11,
    -                reserved12: u1,
    -                ///  Select mode for sample rate control
    -                MODE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Rate is controlled from SAMPLE task
    -                        Task = 0x0,
    -                        ///  Rate is controlled from local timer (use CC to control the rate)
    -                        Timers = 0x1,
    -                    },
    -                },
    -                padding: u19,
    -            }),
    -        };
    -
    -        ///  Timer/Counter 0
    -        pub const TIMER0 = extern struct {
    -            ///  Start Timer
    -            TASKS_START: mmio.Mmio(packed struct(u32) {
    -                ///  Start Timer
    -                TASKS_START: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Stop Timer
    -            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    -                ///  Stop Timer
    -                TASKS_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Increment Timer (Counter mode only)
    -            TASKS_COUNT: mmio.Mmio(packed struct(u32) {
    -                ///  Increment Timer (Counter mode only)
    -                TASKS_COUNT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Clear time
    -            TASKS_CLEAR: mmio.Mmio(packed struct(u32) {
    -                ///  Clear time
    -                TASKS_CLEAR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Deprecated register - Shut down timer
    -            TASKS_SHUTDOWN: mmio.Mmio(packed struct(u32) {
    -                ///  Deprecated field - Shut down timer
    -                TASKS_SHUTDOWN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved64: [44]u8,
    -            ///  Description collection: Capture Timer value to CC[n] register
    -            TASKS_CAPTURE: [6]mmio.Mmio(packed struct(u32) {
    -                ///  Capture Timer value to CC[n] register
    -                TASKS_CAPTURE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved320: [232]u8,
    -            ///  Description collection: Compare event on CC[n] match
    -            EVENTS_COMPARE: [6]mmio.Mmio(packed struct(u32) {
    -                ///  Compare event on CC[n] match
    -                EVENTS_COMPARE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved512: [168]u8,
    -            ///  Shortcuts between local events and tasks
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                ///  Shortcut between event COMPARE[0] and task CLEAR
    -                COMPARE0_CLEAR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event COMPARE[1] and task CLEAR
    -                COMPARE1_CLEAR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event COMPARE[2] and task CLEAR
    -                COMPARE2_CLEAR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event COMPARE[3] and task CLEAR
    -                COMPARE3_CLEAR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event COMPARE[4] and task CLEAR
    -                COMPARE4_CLEAR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event COMPARE[5] and task CLEAR
    -                COMPARE5_CLEAR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved8: u2,
    -                ///  Shortcut between event COMPARE[0] and task STOP
    -                COMPARE0_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event COMPARE[1] and task STOP
    -                COMPARE1_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event COMPARE[2] and task STOP
    -                COMPARE2_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event COMPARE[3] and task STOP
    -                COMPARE3_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event COMPARE[4] and task STOP
    -                COMPARE4_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event COMPARE[5] and task STOP
    -                COMPARE5_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u18,
    -            }),
    -            reserved772: [256]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                reserved16: u16,
    -                ///  Write '1' to enable interrupt for event COMPARE[0]
    -                COMPARE0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event COMPARE[1]
    -                COMPARE1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event COMPARE[2]
    -                COMPARE2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event COMPARE[3]
    -                COMPARE3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event COMPARE[4]
    -                COMPARE4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event COMPARE[5]
    -                COMPARE5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u10,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                reserved16: u16,
    -                ///  Write '1' to disable interrupt for event COMPARE[0]
    -                COMPARE0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event COMPARE[1]
    -                COMPARE1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event COMPARE[2]
    -                COMPARE2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event COMPARE[3]
    -                COMPARE3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event COMPARE[4]
    -                COMPARE4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event COMPARE[5]
    -                COMPARE5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u10,
    -            }),
    -            reserved1284: [504]u8,
    -            ///  Timer mode selection
    -            MODE: mmio.Mmio(packed struct(u32) {
    -                ///  Timer mode
    -                MODE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Select Timer mode
    -                        Timer = 0x0,
    -                        ///  Deprecated enumerator - Select Counter mode
    -                        Counter = 0x1,
    -                        ///  Select Low Power Counter mode
    -                        LowPowerCounter = 0x2,
    -                        _,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            ///  Configure the number of bits used by the TIMER
    -            BITMODE: mmio.Mmio(packed struct(u32) {
    -                ///  Timer bit width
    -                BITMODE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  16 bit timer bit width
    -                        @"16Bit" = 0x0,
    -                        ///  8 bit timer bit width
    -                        @"08Bit" = 0x1,
    -                        ///  24 bit timer bit width
    -                        @"24Bit" = 0x2,
    -                        ///  32 bit timer bit width
    -                        @"32Bit" = 0x3,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            reserved1296: [4]u8,
    -            ///  Timer prescaler register
    -            PRESCALER: mmio.Mmio(packed struct(u32) {
    -                ///  Prescaler value
    -                PRESCALER: u4,
    -                padding: u28,
    -            }),
    -            reserved1344: [44]u8,
    -            ///  Description collection: Capture/Compare register n
    -            CC: [6]mmio.Mmio(packed struct(u32) {
    -                ///  Capture/Compare value
    -                CC: u32,
    -            }),
    -        };
    -
    -        ///  FPU
    -        pub const FPU = extern struct {
    -            ///  Unused.
    -            UNUSED: u32,
    -        };
    -
    -        ///  Inter-IC Sound
    -        pub const I2S = extern struct {
    -            ///  Starts continuous I2S transfer. Also starts MCK generator when this is enabled.
    -            TASKS_START: mmio.Mmio(packed struct(u32) {
    -                ///  Starts continuous I2S transfer. Also starts MCK generator when this is enabled.
    -                TASKS_START: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Stops I2S transfer. Also stops MCK generator. Triggering this task will cause the STOPPED event to be generated.
    -            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    -                ///  Stops I2S transfer. Also stops MCK generator. Triggering this task will cause the STOPPED event to be generated.
    -                TASKS_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved260: [252]u8,
    -            ///  The RXD.PTR register has been copied to internal double-buffers. When the I2S module is started and RX is enabled, this event will be generated for every RXTXD.MAXCNT words that are received on the SDIN pin.
    -            EVENTS_RXPTRUPD: mmio.Mmio(packed struct(u32) {
    -                ///  The RXD.PTR register has been copied to internal double-buffers. When the I2S module is started and RX is enabled, this event will be generated for every RXTXD.MAXCNT words that are received on the SDIN pin.
    -                EVENTS_RXPTRUPD: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  I2S transfer stopped.
    -            EVENTS_STOPPED: mmio.Mmio(packed struct(u32) {
    -                ///  I2S transfer stopped.
    -                EVENTS_STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved276: [8]u8,
    -            ///  The TDX.PTR register has been copied to internal double-buffers. When the I2S module is started and TX is enabled, this event will be generated for every RXTXD.MAXCNT words that are sent on the SDOUT pin.
    -            EVENTS_TXPTRUPD: mmio.Mmio(packed struct(u32) {
    -                ///  The TDX.PTR register has been copied to internal double-buffers. When the I2S module is started and TX is enabled, this event will be generated for every RXTXD.MAXCNT words that are sent on the SDOUT pin.
    -                EVENTS_TXPTRUPD: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved768: [488]u8,
    -            ///  Enable or disable interrupt
    -            INTEN: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Enable or disable interrupt for event RXPTRUPD
    -                RXPTRUPD: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event STOPPED
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved5: u2,
    -                ///  Enable or disable interrupt for event TXPTRUPD
    -                TXPTRUPD: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u26,
    -            }),
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to enable interrupt for event RXPTRUPD
    -                RXPTRUPD: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event STOPPED
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved5: u2,
    -                ///  Write '1' to enable interrupt for event TXPTRUPD
    -                TXPTRUPD: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u26,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Write '1' to disable interrupt for event RXPTRUPD
    -                RXPTRUPD: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event STOPPED
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved5: u2,
    -                ///  Write '1' to disable interrupt for event TXPTRUPD
    -                TXPTRUPD: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u26,
    -            }),
    -            reserved1280: [500]u8,
    -            ///  Enable I2S module.
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable I2S module.
    -                ENABLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -        };
    -
    -        ///  Real time counter 0
    -        pub const RTC0 = extern struct {
    -            ///  Start RTC COUNTER
    -            TASKS_START: mmio.Mmio(packed struct(u32) {
    -                ///  Start RTC COUNTER
    -                TASKS_START: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Stop RTC COUNTER
    -            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    -                ///  Stop RTC COUNTER
    -                TASKS_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Clear RTC COUNTER
    -            TASKS_CLEAR: mmio.Mmio(packed struct(u32) {
    -                ///  Clear RTC COUNTER
    -                TASKS_CLEAR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Set COUNTER to 0xFFFFF0
    -            TASKS_TRIGOVRFLW: mmio.Mmio(packed struct(u32) {
    -                ///  Set COUNTER to 0xFFFFF0
    -                TASKS_TRIGOVRFLW: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved256: [240]u8,
    -            ///  Event on COUNTER increment
    -            EVENTS_TICK: mmio.Mmio(packed struct(u32) {
    -                ///  Event on COUNTER increment
    -                EVENTS_TICK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Event on COUNTER overflow
    -            EVENTS_OVRFLW: mmio.Mmio(packed struct(u32) {
    -                ///  Event on COUNTER overflow
    -                EVENTS_OVRFLW: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved320: [56]u8,
    -            ///  Description collection: Compare event on CC[n] match
    -            EVENTS_COMPARE: [4]mmio.Mmio(packed struct(u32) {
    -                ///  Compare event on CC[n] match
    -                EVENTS_COMPARE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved772: [436]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to enable interrupt for event TICK
    -                TICK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event OVRFLW
    -                OVRFLW: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved16: u14,
    -                ///  Write '1' to enable interrupt for event COMPARE[0]
    -                COMPARE0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event COMPARE[1]
    -                COMPARE1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event COMPARE[2]
    -                COMPARE2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event COMPARE[3]
    -                COMPARE3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u12,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to disable interrupt for event TICK
    -                TICK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event OVRFLW
    -                OVRFLW: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved16: u14,
    -                ///  Write '1' to disable interrupt for event COMPARE[0]
    -                COMPARE0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event COMPARE[1]
    -                COMPARE1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event COMPARE[2]
    -                COMPARE2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event COMPARE[3]
    -                COMPARE3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u12,
    -            }),
    -            reserved832: [52]u8,
    -            ///  Enable or disable event routing
    -            EVTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable event routing for event TICK
    -                TICK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Disable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable event routing for event OVRFLW
    -                OVRFLW: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Disable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved16: u14,
    -                ///  Enable or disable event routing for event COMPARE[0]
    -                COMPARE0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Disable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable event routing for event COMPARE[1]
    -                COMPARE1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Disable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable event routing for event COMPARE[2]
    -                COMPARE2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Disable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable event routing for event COMPARE[3]
    -                COMPARE3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Disable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u12,
    -            }),
    -            ///  Enable event routing
    -            EVTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to enable event routing for event TICK
    -                TICK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable event routing for event OVRFLW
    -                OVRFLW: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved16: u14,
    -                ///  Write '1' to enable event routing for event COMPARE[0]
    -                COMPARE0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable event routing for event COMPARE[1]
    -                COMPARE1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable event routing for event COMPARE[2]
    -                COMPARE2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable event routing for event COMPARE[3]
    -                COMPARE3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u12,
    -            }),
    -            ///  Disable event routing
    -            EVTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to disable event routing for event TICK
    -                TICK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable event routing for event OVRFLW
    -                OVRFLW: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved16: u14,
    -                ///  Write '1' to disable event routing for event COMPARE[0]
    -                COMPARE0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable event routing for event COMPARE[1]
    -                COMPARE1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable event routing for event COMPARE[2]
    -                COMPARE2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable event routing for event COMPARE[3]
    -                COMPARE3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u12,
    -            }),
    -            reserved1284: [440]u8,
    -            ///  Current COUNTER value
    -            COUNTER: mmio.Mmio(packed struct(u32) {
    -                ///  Counter value
    -                COUNTER: u24,
    -                padding: u8,
    -            }),
    -            ///  12 bit prescaler for COUNTER frequency (32768/(PRESCALER+1)).Must be written when RTC is stopped
    -            PRESCALER: mmio.Mmio(packed struct(u32) {
    -                ///  Prescaler value
    -                PRESCALER: u12,
    -                padding: u20,
    -            }),
    -            reserved1344: [52]u8,
    -            ///  Description collection: Compare register n
    -            CC: [4]mmio.Mmio(packed struct(u32) {
    -                ///  Compare value
    -                COMPARE: u24,
    -                padding: u8,
    -            }),
    -        };
    -
    -        ///  Temperature Sensor
    -        pub const TEMP = extern struct {
    -            ///  Start temperature measurement
    -            TASKS_START: mmio.Mmio(packed struct(u32) {
    -                ///  Start temperature measurement
    -                TASKS_START: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Stop temperature measurement
    -            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    -                ///  Stop temperature measurement
    -                TASKS_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved256: [248]u8,
    -            ///  Temperature measurement complete, data ready
    -            EVENTS_DATARDY: mmio.Mmio(packed struct(u32) {
    -                ///  Temperature measurement complete, data ready
    -                EVENTS_DATARDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved772: [512]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to enable interrupt for event DATARDY
    -                DATARDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to disable interrupt for event DATARDY
    -                DATARDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1288: [508]u8,
    -            ///  Temperature in degC (0.25deg steps)
    -            TEMP: mmio.Mmio(packed struct(u32) {
    -                ///  Temperature in degC (0.25deg steps)
    -                TEMP: u32,
    -            }),
    -            reserved1312: [20]u8,
    -            ///  Slope of 1st piece wise linear function
    -            A0: mmio.Mmio(packed struct(u32) {
    -                ///  Slope of 1st piece wise linear function
    -                A0: u12,
    -                padding: u20,
    -            }),
    -            ///  Slope of 2nd piece wise linear function
    -            A1: mmio.Mmio(packed struct(u32) {
    -                ///  Slope of 2nd piece wise linear function
    -                A1: u12,
    -                padding: u20,
    -            }),
    -            ///  Slope of 3rd piece wise linear function
    -            A2: mmio.Mmio(packed struct(u32) {
    -                ///  Slope of 3rd piece wise linear function
    -                A2: u12,
    -                padding: u20,
    -            }),
    -            ///  Slope of 4th piece wise linear function
    -            A3: mmio.Mmio(packed struct(u32) {
    -                ///  Slope of 4th piece wise linear function
    -                A3: u12,
    -                padding: u20,
    -            }),
    -            ///  Slope of 5th piece wise linear function
    -            A4: mmio.Mmio(packed struct(u32) {
    -                ///  Slope of 5th piece wise linear function
    -                A4: u12,
    -                padding: u20,
    -            }),
    -            ///  Slope of 6th piece wise linear function
    -            A5: mmio.Mmio(packed struct(u32) {
    -                ///  Slope of 6th piece wise linear function
    -                A5: u12,
    -                padding: u20,
    -            }),
    -            reserved1344: [8]u8,
    -            ///  y-intercept of 1st piece wise linear function
    -            B0: mmio.Mmio(packed struct(u32) {
    -                ///  y-intercept of 1st piece wise linear function
    -                B0: u14,
    -                padding: u18,
    -            }),
    -            ///  y-intercept of 2nd piece wise linear function
    -            B1: mmio.Mmio(packed struct(u32) {
    -                ///  y-intercept of 2nd piece wise linear function
    -                B1: u14,
    -                padding: u18,
    -            }),
    -            ///  y-intercept of 3rd piece wise linear function
    -            B2: mmio.Mmio(packed struct(u32) {
    -                ///  y-intercept of 3rd piece wise linear function
    -                B2: u14,
    -                padding: u18,
    -            }),
    -            ///  y-intercept of 4th piece wise linear function
    -            B3: mmio.Mmio(packed struct(u32) {
    -                ///  y-intercept of 4th piece wise linear function
    -                B3: u14,
    -                padding: u18,
    -            }),
    -            ///  y-intercept of 5th piece wise linear function
    -            B4: mmio.Mmio(packed struct(u32) {
    -                ///  y-intercept of 5th piece wise linear function
    -                B4: u14,
    -                padding: u18,
    -            }),
    -            ///  y-intercept of 6th piece wise linear function
    -            B5: mmio.Mmio(packed struct(u32) {
    -                ///  y-intercept of 6th piece wise linear function
    -                B5: u14,
    -                padding: u18,
    -            }),
    -            reserved1376: [8]u8,
    -            ///  End point of 1st piece wise linear function
    -            T0: mmio.Mmio(packed struct(u32) {
    -                ///  End point of 1st piece wise linear function
    -                T0: u8,
    -                padding: u24,
    -            }),
    -            ///  End point of 2nd piece wise linear function
    -            T1: mmio.Mmio(packed struct(u32) {
    -                ///  End point of 2nd piece wise linear function
    -                T1: u8,
    -                padding: u24,
    -            }),
    -            ///  End point of 3rd piece wise linear function
    -            T2: mmio.Mmio(packed struct(u32) {
    -                ///  End point of 3rd piece wise linear function
    -                T2: u8,
    -                padding: u24,
    -            }),
    -            ///  End point of 4th piece wise linear function
    -            T3: mmio.Mmio(packed struct(u32) {
    -                ///  End point of 4th piece wise linear function
    -                T3: u8,
    -                padding: u24,
    -            }),
    -            ///  End point of 5th piece wise linear function
    -            T4: mmio.Mmio(packed struct(u32) {
    -                ///  End point of 5th piece wise linear function
    -                T4: u8,
    -                padding: u24,
    -            }),
    -        };
    -
    -        ///  Random Number Generator
    -        pub const RNG = extern struct {
    -            ///  Task starting the random number generator
    -            TASKS_START: mmio.Mmio(packed struct(u32) {
    -                ///  Task starting the random number generator
    -                TASKS_START: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Task stopping the random number generator
    -            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    -                ///  Task stopping the random number generator
    -                TASKS_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved256: [248]u8,
    -            ///  Event being generated for every new random number written to the VALUE register
    -            EVENTS_VALRDY: mmio.Mmio(packed struct(u32) {
    -                ///  Event being generated for every new random number written to the VALUE register
    -                EVENTS_VALRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved512: [252]u8,
    -            ///  Shortcuts between local events and tasks
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                ///  Shortcut between event VALRDY and task STOP
    -                VALRDY_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved772: [256]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to enable interrupt for event VALRDY
    -                VALRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to disable interrupt for event VALRDY
    -                VALRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1284: [504]u8,
    -            ///  Configuration register
    -            CONFIG: mmio.Mmio(packed struct(u32) {
    -                ///  Bias correction
    -                DERCEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disabled
    -                        Disabled = 0x0,
    -                        ///  Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Output random number
    -            VALUE: mmio.Mmio(packed struct(u32) {
    -                ///  Generated random number
    -                VALUE: u8,
    -                padding: u24,
    -            }),
    -        };
    -
    -        ///  AES ECB Mode Encryption
    -        pub const ECB = extern struct {
    -            ///  Start ECB block encrypt
    -            TASKS_STARTECB: mmio.Mmio(packed struct(u32) {
    -                ///  Start ECB block encrypt
    -                TASKS_STARTECB: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Abort a possible executing ECB operation
    -            TASKS_STOPECB: mmio.Mmio(packed struct(u32) {
    -                ///  Abort a possible executing ECB operation
    -                TASKS_STOPECB: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved256: [248]u8,
    -            ///  ECB block encrypt complete
    -            EVENTS_ENDECB: mmio.Mmio(packed struct(u32) {
    -                ///  ECB block encrypt complete
    -                EVENTS_ENDECB: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  ECB block encrypt aborted because of a STOPECB task or due to an error
    -            EVENTS_ERRORECB: mmio.Mmio(packed struct(u32) {
    -                ///  ECB block encrypt aborted because of a STOPECB task or due to an error
    -                EVENTS_ERRORECB: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved772: [508]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to enable interrupt for event ENDECB
    -                ENDECB: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event ERRORECB
    -                ERRORECB: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to disable interrupt for event ENDECB
    -                ENDECB: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event ERRORECB
    -                ERRORECB: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            reserved1284: [504]u8,
    -            ///  ECB block encrypt memory pointers
    -            ECBDATAPTR: mmio.Mmio(packed struct(u32) {
    -                ///  Pointer to the ECB data structure (see Table 1 ECB data structure overview)
    -                ECBDATAPTR: u32,
    -            }),
    -        };
    -
    -        ///  Accelerated Address Resolver
    -        pub const AAR = extern struct {
    -            ///  Start resolving addresses based on IRKs specified in the IRK data structure
    -            TASKS_START: mmio.Mmio(packed struct(u32) {
    -                ///  Start resolving addresses based on IRKs specified in the IRK data structure
    -                TASKS_START: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved8: [4]u8,
    -            ///  Stop resolving addresses
    -            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    -                ///  Stop resolving addresses
    -                TASKS_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved256: [244]u8,
    -            ///  Address resolution procedure complete
    -            EVENTS_END: mmio.Mmio(packed struct(u32) {
    -                ///  Address resolution procedure complete
    -                EVENTS_END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Address resolved
    -            EVENTS_RESOLVED: mmio.Mmio(packed struct(u32) {
    -                ///  Address resolved
    -                EVENTS_RESOLVED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Address not resolved
    -            EVENTS_NOTRESOLVED: mmio.Mmio(packed struct(u32) {
    -                ///  Address not resolved
    -                EVENTS_NOTRESOLVED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved772: [504]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to enable interrupt for event END
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event RESOLVED
    -                RESOLVED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event NOTRESOLVED
    -                NOTRESOLVED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to disable interrupt for event END
    -                END: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event RESOLVED
    -                RESOLVED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event NOTRESOLVED
    -                NOTRESOLVED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            reserved1024: [244]u8,
    -            ///  Resolution status
    -            STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  The IRK that was used last time an address was resolved
    -                STATUS: u4,
    -                padding: u28,
    -            }),
    -            reserved1280: [252]u8,
    -            ///  Enable AAR
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable AAR
    -                ENABLE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x3,
    -                        _,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            ///  Number of IRKs
    -            NIRK: mmio.Mmio(packed struct(u32) {
    -                ///  Number of Identity root keys available in the IRK data structure
    -                NIRK: u5,
    -                padding: u27,
    -            }),
    -            ///  Pointer to IRK data structure
    -            IRKPTR: mmio.Mmio(packed struct(u32) {
    -                ///  Pointer to the IRK data structure
    -                IRKPTR: u32,
    -            }),
    -            reserved1296: [4]u8,
    -            ///  Pointer to the resolvable address
    -            ADDRPTR: mmio.Mmio(packed struct(u32) {
    -                ///  Pointer to the resolvable address (6-bytes)
    -                ADDRPTR: u32,
    -            }),
    -            ///  Pointer to data area used for temporary storage
    -            SCRATCHPTR: mmio.Mmio(packed struct(u32) {
    -                ///  Pointer to a scratch data area used for temporary storage during resolution. A space of minimum 3 bytes must be reserved.
    -                SCRATCHPTR: u32,
    -            }),
    -        };
    -
    -        ///  AES CCM Mode Encryption
    -        pub const CCM = extern struct {
    -            ///  Start generation of key-stream. This operation will stop by itself when completed.
    -            TASKS_KSGEN: mmio.Mmio(packed struct(u32) {
    -                ///  Start generation of key-stream. This operation will stop by itself when completed.
    -                TASKS_KSGEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Start encryption/decryption. This operation will stop by itself when completed.
    -            TASKS_CRYPT: mmio.Mmio(packed struct(u32) {
    -                ///  Start encryption/decryption. This operation will stop by itself when completed.
    -                TASKS_CRYPT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Stop encryption/decryption
    -            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    -                ///  Stop encryption/decryption
    -                TASKS_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Override DATARATE setting in MODE register with the contents of the RATEOVERRIDE register for any ongoing encryption/decryption
    -            TASKS_RATEOVERRIDE: mmio.Mmio(packed struct(u32) {
    -                ///  Override DATARATE setting in MODE register with the contents of the RATEOVERRIDE register for any ongoing encryption/decryption
    -                TASKS_RATEOVERRIDE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved256: [240]u8,
    -            ///  Key-stream generation complete
    -            EVENTS_ENDKSGEN: mmio.Mmio(packed struct(u32) {
    -                ///  Key-stream generation complete
    -                EVENTS_ENDKSGEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Encrypt/decrypt complete
    -            EVENTS_ENDCRYPT: mmio.Mmio(packed struct(u32) {
    -                ///  Encrypt/decrypt complete
    -                EVENTS_ENDCRYPT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Deprecated register - CCM error event
    -            EVENTS_ERROR: mmio.Mmio(packed struct(u32) {
    -                ///  Deprecated field - CCM error event
    -                EVENTS_ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved512: [244]u8,
    -            ///  Shortcuts between local events and tasks
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                ///  Shortcut between event ENDKSGEN and task CRYPT
    -                ENDKSGEN_CRYPT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved772: [256]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to enable interrupt for event ENDKSGEN
    -                ENDKSGEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event ENDCRYPT
    -                ENDCRYPT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Deprecated intsetfield - Write '1' to enable interrupt for event ERROR
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to disable interrupt for event ENDKSGEN
    -                ENDKSGEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event ENDCRYPT
    -                ENDCRYPT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Deprecated intclrfield - Write '1' to disable interrupt for event ERROR
    -                ERROR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            reserved1024: [244]u8,
    -            ///  MIC check result
    -            MICSTATUS: mmio.Mmio(packed struct(u32) {
    -                ///  The result of the MIC check performed during the previous decryption operation
    -                MICSTATUS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  MIC check failed
    -                        CheckFailed = 0x0,
    -                        ///  MIC check passed
    -                        CheckPassed = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1280: [252]u8,
    -            ///  Enable
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable CCM
    -                ENABLE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x2,
    -                        _,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            ///  Operation mode
    -            MODE: mmio.Mmio(packed struct(u32) {
    -                ///  The mode of operation to be used. The settings in this register apply whenever either the KSGEN or CRYPT tasks are triggered.
    -                MODE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  AES CCM packet encryption mode
    -                        Encryption = 0x0,
    -                        ///  AES CCM packet decryption mode
    -                        Decryption = 0x1,
    -                    },
    -                },
    -                reserved16: u15,
    -                ///  Radio data rate that the CCM shall run synchronous with
    -                DATARATE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  1 Mbps
    -                        @"1Mbit" = 0x0,
    -                        ///  2 Mbps
    -                        @"2Mbit" = 0x1,
    -                        ///  125 Kbps
    -                        @"125Kbps" = 0x2,
    -                        ///  500 Kbps
    -                        @"500Kbps" = 0x3,
    -                    },
    -                },
    -                reserved24: u6,
    -                ///  Packet length configuration
    -                LENGTH: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Default length. Effective length of LENGTH field in encrypted/decrypted packet is 5 bits. A key-stream for packet payloads up to 27 bytes will be generated.
    -                        Default = 0x0,
    -                        ///  Extended length. Effective length of LENGTH field in encrypted/decrypted packet is 8 bits. A key-stream for packet payloads up to MAXPACKETSIZE bytes will be generated.
    -                        Extended = 0x1,
    -                    },
    -                },
    -                padding: u7,
    -            }),
    -            ///  Pointer to data structure holding AES key and NONCE vector
    -            CNFPTR: mmio.Mmio(packed struct(u32) {
    -                ///  Pointer to the data structure holding the AES key and the CCM NONCE vector (see Table 1 CCM data structure overview)
    -                CNFPTR: u32,
    -            }),
    -            ///  Input pointer
    -            INPTR: mmio.Mmio(packed struct(u32) {
    -                ///  Input pointer
    -                INPTR: u32,
    -            }),
    -            ///  Output pointer
    -            OUTPTR: mmio.Mmio(packed struct(u32) {
    -                ///  Output pointer
    -                OUTPTR: u32,
    -            }),
    -            ///  Pointer to data area used for temporary storage
    -            SCRATCHPTR: mmio.Mmio(packed struct(u32) {
    -                ///  Pointer to a scratch data area used for temporary storage during key-stream generation, MIC generation and encryption/decryption.
    -                SCRATCHPTR: u32,
    -            }),
    -            ///  Length of key-stream generated when MODE.LENGTH = Extended.
    -            MAXPACKETSIZE: mmio.Mmio(packed struct(u32) {
    -                ///  Length of key-stream generated when MODE.LENGTH = Extended. This value must be greater or equal to the subsequent packet payload to be encrypted/decrypted.
    -                MAXPACKETSIZE: u8,
    -                padding: u24,
    -            }),
    -            ///  Data rate override setting.
    -            RATEOVERRIDE: mmio.Mmio(packed struct(u32) {
    -                ///  Data rate override setting.
    -                RATEOVERRIDE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  1 Mbps
    -                        @"1Mbit" = 0x0,
    -                        ///  2 Mbps
    -                        @"2Mbit" = 0x1,
    -                        ///  125 Kbps
    -                        @"125Kbps" = 0x2,
    -                        ///  500 Kbps
    -                        @"500Kbps" = 0x3,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -        };
    -
    -        ///  Watchdog Timer
    -        pub const WDT = extern struct {
    -            ///  Start the watchdog
    -            TASKS_START: mmio.Mmio(packed struct(u32) {
    -                ///  Start the watchdog
    -                TASKS_START: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved256: [252]u8,
    -            ///  Watchdog timeout
    -            EVENTS_TIMEOUT: mmio.Mmio(packed struct(u32) {
    -                ///  Watchdog timeout
    -                EVENTS_TIMEOUT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved772: [512]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to enable interrupt for event TIMEOUT
    -                TIMEOUT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to disable interrupt for event TIMEOUT
    -                TIMEOUT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1024: [244]u8,
    -            ///  Run status
    -            RUNSTATUS: mmio.Mmio(packed struct(u32) {
    -                ///  Indicates whether or not the watchdog is running
    -                RUNSTATUS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Watchdog not running
    -                        NotRunning = 0x0,
    -                        ///  Watchdog is running
    -                        Running = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Request status
    -            REQSTATUS: mmio.Mmio(packed struct(u32) {
    -                ///  Request status for RR[0] register
    -                RR0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RR[0] register is not enabled, or are already requesting reload
    -                        DisabledOrRequested = 0x0,
    -                        ///  RR[0] register is enabled, and are not yet requesting reload
    -                        EnabledAndUnrequested = 0x1,
    -                    },
    -                },
    -                ///  Request status for RR[1] register
    -                RR1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RR[1] register is not enabled, or are already requesting reload
    -                        DisabledOrRequested = 0x0,
    -                        ///  RR[1] register is enabled, and are not yet requesting reload
    -                        EnabledAndUnrequested = 0x1,
    -                    },
    -                },
    -                ///  Request status for RR[2] register
    -                RR2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RR[2] register is not enabled, or are already requesting reload
    -                        DisabledOrRequested = 0x0,
    -                        ///  RR[2] register is enabled, and are not yet requesting reload
    -                        EnabledAndUnrequested = 0x1,
    -                    },
    -                },
    -                ///  Request status for RR[3] register
    -                RR3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RR[3] register is not enabled, or are already requesting reload
    -                        DisabledOrRequested = 0x0,
    -                        ///  RR[3] register is enabled, and are not yet requesting reload
    -                        EnabledAndUnrequested = 0x1,
    -                    },
    -                },
    -                ///  Request status for RR[4] register
    -                RR4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RR[4] register is not enabled, or are already requesting reload
    -                        DisabledOrRequested = 0x0,
    -                        ///  RR[4] register is enabled, and are not yet requesting reload
    -                        EnabledAndUnrequested = 0x1,
    -                    },
    -                },
    -                ///  Request status for RR[5] register
    -                RR5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RR[5] register is not enabled, or are already requesting reload
    -                        DisabledOrRequested = 0x0,
    -                        ///  RR[5] register is enabled, and are not yet requesting reload
    -                        EnabledAndUnrequested = 0x1,
    -                    },
    -                },
    -                ///  Request status for RR[6] register
    -                RR6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RR[6] register is not enabled, or are already requesting reload
    -                        DisabledOrRequested = 0x0,
    -                        ///  RR[6] register is enabled, and are not yet requesting reload
    -                        EnabledAndUnrequested = 0x1,
    -                    },
    -                },
    -                ///  Request status for RR[7] register
    -                RR7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RR[7] register is not enabled, or are already requesting reload
    -                        DisabledOrRequested = 0x0,
    -                        ///  RR[7] register is enabled, and are not yet requesting reload
    -                        EnabledAndUnrequested = 0x1,
    -                    },
    -                },
    -                padding: u24,
    -            }),
    -            reserved1284: [252]u8,
    -            ///  Counter reload value
    -            CRV: mmio.Mmio(packed struct(u32) {
    -                ///  Counter reload value in number of cycles of the 32.768 kHz clock
    -                CRV: u32,
    -            }),
    -            ///  Enable register for reload request registers
    -            RREN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable RR[0] register
    -                RR0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable RR[0] register
    -                        Disabled = 0x0,
    -                        ///  Enable RR[0] register
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable RR[1] register
    -                RR1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable RR[1] register
    -                        Disabled = 0x0,
    -                        ///  Enable RR[1] register
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable RR[2] register
    -                RR2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable RR[2] register
    -                        Disabled = 0x0,
    -                        ///  Enable RR[2] register
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable RR[3] register
    -                RR3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable RR[3] register
    -                        Disabled = 0x0,
    -                        ///  Enable RR[3] register
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable RR[4] register
    -                RR4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable RR[4] register
    -                        Disabled = 0x0,
    -                        ///  Enable RR[4] register
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable RR[5] register
    -                RR5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable RR[5] register
    -                        Disabled = 0x0,
    -                        ///  Enable RR[5] register
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable RR[6] register
    -                RR6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable RR[6] register
    -                        Disabled = 0x0,
    -                        ///  Enable RR[6] register
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable RR[7] register
    -                RR7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable RR[7] register
    -                        Disabled = 0x0,
    -                        ///  Enable RR[7] register
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u24,
    -            }),
    -            ///  Configuration register
    -            CONFIG: mmio.Mmio(packed struct(u32) {
    -                ///  Configure the watchdog to either be paused, or kept running, while the CPU is sleeping
    -                SLEEP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pause watchdog while the CPU is sleeping
    -                        Pause = 0x0,
    -                        ///  Keep the watchdog running while the CPU is sleeping
    -                        Run = 0x1,
    -                    },
    -                },
    -                reserved3: u2,
    -                ///  Configure the watchdog to either be paused, or kept running, while the CPU is halted by the debugger
    -                HALT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Pause watchdog while the CPU is halted by the debugger
    -                        Pause = 0x0,
    -                        ///  Keep the watchdog running while the CPU is halted by the debugger
    -                        Run = 0x1,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1536: [240]u8,
    -            ///  Description collection: Reload request n
    -            RR: [8]mmio.Mmio(packed struct(u32) {
    -                ///  Reload request register
    -                RR: packed union {
    -                    raw: u32,
    -                    value: enum(u32) {
    -                        ///  Value to request a reload of the watchdog timer
    -                        Reload = 0x6e524635,
    -                        _,
    -                    },
    -                },
    -            }),
    -        };
    -
    -        ///  Memory Watch Unit
    -        pub const MWU = extern struct {
    -            reserved768: [768]u8,
    -            ///  Enable or disable interrupt
    -            INTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable interrupt for event REGION0WA
    -                REGION0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event REGION0RA
    -                REGION0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event REGION1WA
    -                REGION1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event REGION1RA
    -                REGION1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event REGION2WA
    -                REGION2WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event REGION2RA
    -                REGION2RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event REGION3WA
    -                REGION3WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event REGION3RA
    -                REGION3RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved24: u16,
    -                ///  Enable or disable interrupt for event PREGION0WA
    -                PREGION0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event PREGION0RA
    -                PREGION0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event PREGION1WA
    -                PREGION1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event PREGION1RA
    -                PREGION1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u4,
    -            }),
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to enable interrupt for event REGION0WA
    -                REGION0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event REGION0RA
    -                REGION0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event REGION1WA
    -                REGION1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event REGION1RA
    -                REGION1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event REGION2WA
    -                REGION2WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event REGION2RA
    -                REGION2RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event REGION3WA
    -                REGION3WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event REGION3RA
    -                REGION3RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved24: u16,
    -                ///  Write '1' to enable interrupt for event PREGION0WA
    -                PREGION0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event PREGION0RA
    -                PREGION0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event PREGION1WA
    -                PREGION1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event PREGION1RA
    -                PREGION1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u4,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to disable interrupt for event REGION0WA
    -                REGION0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event REGION0RA
    -                REGION0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event REGION1WA
    -                REGION1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event REGION1RA
    -                REGION1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event REGION2WA
    -                REGION2WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event REGION2RA
    -                REGION2RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event REGION3WA
    -                REGION3WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event REGION3RA
    -                REGION3RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved24: u16,
    -                ///  Write '1' to disable interrupt for event PREGION0WA
    -                PREGION0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event PREGION0RA
    -                PREGION0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event PREGION1WA
    -                PREGION1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event PREGION1RA
    -                PREGION1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u4,
    -            }),
    -            reserved800: [20]u8,
    -            ///  Enable or disable interrupt
    -            NMIEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable interrupt for event REGION0WA
    -                REGION0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event REGION0RA
    -                REGION0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event REGION1WA
    -                REGION1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event REGION1RA
    -                REGION1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event REGION2WA
    -                REGION2WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event REGION2RA
    -                REGION2RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event REGION3WA
    -                REGION3WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event REGION3RA
    -                REGION3RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved24: u16,
    -                ///  Enable or disable interrupt for event PREGION0WA
    -                PREGION0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event PREGION0RA
    -                PREGION0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event PREGION1WA
    -                PREGION1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event PREGION1RA
    -                PREGION1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u4,
    -            }),
    -            ///  Enable interrupt
    -            NMIENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to enable interrupt for event REGION0WA
    -                REGION0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event REGION0RA
    -                REGION0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event REGION1WA
    -                REGION1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event REGION1RA
    -                REGION1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event REGION2WA
    -                REGION2WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event REGION2RA
    -                REGION2RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event REGION3WA
    -                REGION3WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event REGION3RA
    -                REGION3RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved24: u16,
    -                ///  Write '1' to enable interrupt for event PREGION0WA
    -                PREGION0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event PREGION0RA
    -                PREGION0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event PREGION1WA
    -                PREGION1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event PREGION1RA
    -                PREGION1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u4,
    -            }),
    -            ///  Disable interrupt
    -            NMIENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to disable interrupt for event REGION0WA
    -                REGION0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event REGION0RA
    -                REGION0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event REGION1WA
    -                REGION1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event REGION1RA
    -                REGION1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event REGION2WA
    -                REGION2WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event REGION2RA
    -                REGION2RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event REGION3WA
    -                REGION3WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event REGION3RA
    -                REGION3RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved24: u16,
    -                ///  Write '1' to disable interrupt for event PREGION0WA
    -                PREGION0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event PREGION0RA
    -                PREGION0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event PREGION1WA
    -                PREGION1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event PREGION1RA
    -                PREGION1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u4,
    -            }),
    -            reserved1296: [484]u8,
    -            ///  Enable/disable regions watch
    -            REGIONEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable/disable write access watch in region[0]
    -                RGN0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable write access watch in this region
    -                        Disable = 0x0,
    -                        ///  Enable write access watch in this region
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable/disable read access watch in region[0]
    -                RGN0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable read access watch in this region
    -                        Disable = 0x0,
    -                        ///  Enable read access watch in this region
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable/disable write access watch in region[1]
    -                RGN1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable write access watch in this region
    -                        Disable = 0x0,
    -                        ///  Enable write access watch in this region
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable/disable read access watch in region[1]
    -                RGN1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable read access watch in this region
    -                        Disable = 0x0,
    -                        ///  Enable read access watch in this region
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable/disable write access watch in region[2]
    -                RGN2WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable write access watch in this region
    -                        Disable = 0x0,
    -                        ///  Enable write access watch in this region
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable/disable read access watch in region[2]
    -                RGN2RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable read access watch in this region
    -                        Disable = 0x0,
    -                        ///  Enable read access watch in this region
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable/disable write access watch in region[3]
    -                RGN3WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable write access watch in this region
    -                        Disable = 0x0,
    -                        ///  Enable write access watch in this region
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable/disable read access watch in region[3]
    -                RGN3RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable read access watch in this region
    -                        Disable = 0x0,
    -                        ///  Enable read access watch in this region
    -                        Enable = 0x1,
    -                    },
    -                },
    -                reserved24: u16,
    -                ///  Enable/disable write access watch in PREGION[0]
    -                PRGN0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable write access watch in this PREGION
    -                        Disable = 0x0,
    -                        ///  Enable write access watch in this PREGION
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable/disable read access watch in PREGION[0]
    -                PRGN0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable read access watch in this PREGION
    -                        Disable = 0x0,
    -                        ///  Enable read access watch in this PREGION
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable/disable write access watch in PREGION[1]
    -                PRGN1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable write access watch in this PREGION
    -                        Disable = 0x0,
    -                        ///  Enable write access watch in this PREGION
    -                        Enable = 0x1,
    -                    },
    -                },
    -                ///  Enable/disable read access watch in PREGION[1]
    -                PRGN1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable read access watch in this PREGION
    -                        Disable = 0x0,
    -                        ///  Enable read access watch in this PREGION
    -                        Enable = 0x1,
    -                    },
    -                },
    -                padding: u4,
    -            }),
    -            ///  Enable regions watch
    -            REGIONENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Enable write access watch in region[0]
    -                RGN0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Write access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Write access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable read access watch in region[0]
    -                RGN0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Read access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable write access watch in region[1]
    -                RGN1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Write access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Write access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable read access watch in region[1]
    -                RGN1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Read access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable write access watch in region[2]
    -                RGN2WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Write access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Write access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable read access watch in region[2]
    -                RGN2RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Read access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable write access watch in region[3]
    -                RGN3WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Write access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Write access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable read access watch in region[3]
    -                RGN3RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Read access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved24: u16,
    -                ///  Enable write access watch in PREGION[0]
    -                PRGN0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Write access watch in this PREGION is disabled
    -                        Disabled = 0x0,
    -                        ///  Write access watch in this PREGION is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable read access watch in PREGION[0]
    -                PRGN0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read access watch in this PREGION is disabled
    -                        Disabled = 0x0,
    -                        ///  Read access watch in this PREGION is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable write access watch in PREGION[1]
    -                PRGN1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Write access watch in this PREGION is disabled
    -                        Disabled = 0x0,
    -                        ///  Write access watch in this PREGION is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable read access watch in PREGION[1]
    -                PRGN1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read access watch in this PREGION is disabled
    -                        Disabled = 0x0,
    -                        ///  Read access watch in this PREGION is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u4,
    -            }),
    -            ///  Disable regions watch
    -            REGIONENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Disable write access watch in region[0]
    -                RGN0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Write access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Write access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Disable read access watch in region[0]
    -                RGN0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Read access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Disable write access watch in region[1]
    -                RGN1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Write access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Write access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Disable read access watch in region[1]
    -                RGN1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Read access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Disable write access watch in region[2]
    -                RGN2WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Write access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Write access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Disable read access watch in region[2]
    -                RGN2RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Read access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Disable write access watch in region[3]
    -                RGN3WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Write access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Write access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Disable read access watch in region[3]
    -                RGN3RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read access watch in this region is disabled
    -                        Disabled = 0x0,
    -                        ///  Read access watch in this region is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved24: u16,
    -                ///  Disable write access watch in PREGION[0]
    -                PRGN0WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Write access watch in this PREGION is disabled
    -                        Disabled = 0x0,
    -                        ///  Write access watch in this PREGION is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Disable read access watch in PREGION[0]
    -                PRGN0RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read access watch in this PREGION is disabled
    -                        Disabled = 0x0,
    -                        ///  Read access watch in this PREGION is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Disable write access watch in PREGION[1]
    -                PRGN1WA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Write access watch in this PREGION is disabled
    -                        Disabled = 0x0,
    -                        ///  Write access watch in this PREGION is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Disable read access watch in PREGION[1]
    -                PRGN1RA: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read access watch in this PREGION is disabled
    -                        Disabled = 0x0,
    -                        ///  Read access watch in this PREGION is enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u4,
    -            }),
    -        };
    -
    -        ///  Quadrature Decoder
    -        pub const QDEC = extern struct {
    -            ///  Task starting the quadrature decoder
    -            TASKS_START: mmio.Mmio(packed struct(u32) {
    -                ///  Task starting the quadrature decoder
    -                TASKS_START: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Task stopping the quadrature decoder
    -            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    -                ///  Task stopping the quadrature decoder
    -                TASKS_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Read and clear ACC and ACCDBL
    -            TASKS_READCLRACC: mmio.Mmio(packed struct(u32) {
    -                ///  Read and clear ACC and ACCDBL
    -                TASKS_READCLRACC: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Read and clear ACC
    -            TASKS_RDCLRACC: mmio.Mmio(packed struct(u32) {
    -                ///  Read and clear ACC
    -                TASKS_RDCLRACC: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Read and clear ACCDBL
    -            TASKS_RDCLRDBL: mmio.Mmio(packed struct(u32) {
    -                ///  Read and clear ACCDBL
    -                TASKS_RDCLRDBL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved256: [236]u8,
    -            ///  Event being generated for every new sample value written to the SAMPLE register
    -            EVENTS_SAMPLERDY: mmio.Mmio(packed struct(u32) {
    -                ///  Event being generated for every new sample value written to the SAMPLE register
    -                EVENTS_SAMPLERDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Non-null report ready
    -            EVENTS_REPORTRDY: mmio.Mmio(packed struct(u32) {
    -                ///  Non-null report ready
    -                EVENTS_REPORTRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  ACC or ACCDBL register overflow
    -            EVENTS_ACCOF: mmio.Mmio(packed struct(u32) {
    -                ///  ACC or ACCDBL register overflow
    -                EVENTS_ACCOF: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Double displacement(s) detected
    -            EVENTS_DBLRDY: mmio.Mmio(packed struct(u32) {
    -                ///  Double displacement(s) detected
    -                EVENTS_DBLRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  QDEC has been stopped
    -            EVENTS_STOPPED: mmio.Mmio(packed struct(u32) {
    -                ///  QDEC has been stopped
    -                EVENTS_STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved512: [236]u8,
    -            ///  Shortcuts between local events and tasks
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                ///  Shortcut between event REPORTRDY and task READCLRACC
    -                REPORTRDY_READCLRACC: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event SAMPLERDY and task STOP
    -                SAMPLERDY_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event REPORTRDY and task RDCLRACC
    -                REPORTRDY_RDCLRACC: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event REPORTRDY and task STOP
    -                REPORTRDY_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event DBLRDY and task RDCLRDBL
    -                DBLRDY_RDCLRDBL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event DBLRDY and task STOP
    -                DBLRDY_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event SAMPLERDY and task READCLRACC
    -                SAMPLERDY_READCLRACC: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u25,
    -            }),
    -            reserved772: [256]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to enable interrupt for event SAMPLERDY
    -                SAMPLERDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event REPORTRDY
    -                REPORTRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event ACCOF
    -                ACCOF: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event DBLRDY
    -                DBLRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event STOPPED
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u27,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to disable interrupt for event SAMPLERDY
    -                SAMPLERDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event REPORTRDY
    -                REPORTRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event ACCOF
    -                ACCOF: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event DBLRDY
    -                DBLRDY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event STOPPED
    -                STOPPED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u27,
    -            }),
    -            reserved1280: [500]u8,
    -            ///  Enable the quadrature decoder
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable the quadrature decoder
    -                ENABLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  LED output pin polarity
    -            LEDPOL: mmio.Mmio(packed struct(u32) {
    -                ///  LED output pin polarity
    -                LEDPOL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Led active on output pin low
    -                        ActiveLow = 0x0,
    -                        ///  Led active on output pin high
    -                        ActiveHigh = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Sample period
    -            SAMPLEPER: mmio.Mmio(packed struct(u32) {
    -                ///  Sample period. The SAMPLE register will be updated for every new sample
    -                SAMPLEPER: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  128 us
    -                        @"128us" = 0x0,
    -                        ///  256 us
    -                        @"256us" = 0x1,
    -                        ///  512 us
    -                        @"512us" = 0x2,
    -                        ///  1024 us
    -                        @"1024us" = 0x3,
    -                        ///  2048 us
    -                        @"2048us" = 0x4,
    -                        ///  4096 us
    -                        @"4096us" = 0x5,
    -                        ///  8192 us
    -                        @"8192us" = 0x6,
    -                        ///  16384 us
    -                        @"16384us" = 0x7,
    -                        ///  32768 us
    -                        @"32ms" = 0x8,
    -                        ///  65536 us
    -                        @"65ms" = 0x9,
    -                        ///  131072 us
    -                        @"131ms" = 0xa,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            ///  Motion sample value
    -            SAMPLE: mmio.Mmio(packed struct(u32) {
    -                ///  Last motion sample
    -                SAMPLE: u32,
    -            }),
    -            ///  Number of samples to be taken before REPORTRDY and DBLRDY events can be generated
    -            REPORTPER: mmio.Mmio(packed struct(u32) {
    -                ///  Specifies the number of samples to be accumulated in the ACC register before the REPORTRDY and DBLRDY events can be generated
    -                REPORTPER: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  10 samples / report
    -                        @"10Smpl" = 0x0,
    -                        ///  40 samples / report
    -                        @"40Smpl" = 0x1,
    -                        ///  80 samples / report
    -                        @"80Smpl" = 0x2,
    -                        ///  120 samples / report
    -                        @"120Smpl" = 0x3,
    -                        ///  160 samples / report
    -                        @"160Smpl" = 0x4,
    -                        ///  200 samples / report
    -                        @"200Smpl" = 0x5,
    -                        ///  240 samples / report
    -                        @"240Smpl" = 0x6,
    -                        ///  280 samples / report
    -                        @"280Smpl" = 0x7,
    -                        ///  1 sample / report
    -                        @"1Smpl" = 0x8,
    -                        _,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            ///  Register accumulating the valid transitions
    -            ACC: mmio.Mmio(packed struct(u32) {
    -                ///  Register accumulating all valid samples (not double transition) read from the SAMPLE register
    -                ACC: u32,
    -            }),
    -            ///  Snapshot of the ACC register, updated by the READCLRACC or RDCLRACC task
    -            ACCREAD: mmio.Mmio(packed struct(u32) {
    -                ///  Snapshot of the ACC register.
    -                ACCREAD: u32,
    -            }),
    -            reserved1320: [12]u8,
    -            ///  Enable input debounce filters
    -            DBFEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable input debounce filters
    -                DBFEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Debounce input filters disabled
    -                        Disabled = 0x0,
    -                        ///  Debounce input filters enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1344: [20]u8,
    -            ///  Time period the LED is switched ON prior to sampling
    -            LEDPRE: mmio.Mmio(packed struct(u32) {
    -                ///  Period in us the LED is switched on prior to sampling
    -                LEDPRE: u9,
    -                padding: u23,
    -            }),
    -            ///  Register accumulating the number of detected double transitions
    -            ACCDBL: mmio.Mmio(packed struct(u32) {
    -                ///  Register accumulating the number of detected double or illegal transitions. ( SAMPLE = 2 ).
    -                ACCDBL: u4,
    -                padding: u28,
    -            }),
    -            ///  Snapshot of the ACCDBL, updated by the READCLRACC or RDCLRDBL task
    -            ACCDBLREAD: mmio.Mmio(packed struct(u32) {
    -                ///  Snapshot of the ACCDBL register. This field is updated when the READCLRACC or RDCLRDBL task is triggered.
    -                ACCDBLREAD: u4,
    -                padding: u28,
    -            }),
    -        };
    -
    -        ///  Comparator
    -        pub const COMP = extern struct {
    -            ///  Start comparator
    -            TASKS_START: mmio.Mmio(packed struct(u32) {
    -                ///  Start comparator
    -                TASKS_START: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Stop comparator
    -            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    -                ///  Stop comparator
    -                TASKS_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Sample comparator value
    -            TASKS_SAMPLE: mmio.Mmio(packed struct(u32) {
    -                ///  Sample comparator value
    -                TASKS_SAMPLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved256: [244]u8,
    -            ///  COMP is ready and output is valid
    -            EVENTS_READY: mmio.Mmio(packed struct(u32) {
    -                ///  COMP is ready and output is valid
    -                EVENTS_READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Downward crossing
    -            EVENTS_DOWN: mmio.Mmio(packed struct(u32) {
    -                ///  Downward crossing
    -                EVENTS_DOWN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Upward crossing
    -            EVENTS_UP: mmio.Mmio(packed struct(u32) {
    -                ///  Upward crossing
    -                EVENTS_UP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Downward or upward crossing
    -            EVENTS_CROSS: mmio.Mmio(packed struct(u32) {
    -                ///  Downward or upward crossing
    -                EVENTS_CROSS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved512: [240]u8,
    -            ///  Shortcuts between local events and tasks
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                ///  Shortcut between event READY and task SAMPLE
    -                READY_SAMPLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event READY and task STOP
    -                READY_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event DOWN and task STOP
    -                DOWN_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event UP and task STOP
    -                UP_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event CROSS and task STOP
    -                CROSS_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u27,
    -            }),
    -            reserved768: [252]u8,
    -            ///  Enable or disable interrupt
    -            INTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable interrupt for event READY
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event DOWN
    -                DOWN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event UP
    -                UP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event CROSS
    -                CROSS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to enable interrupt for event READY
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event DOWN
    -                DOWN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event UP
    -                UP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event CROSS
    -                CROSS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to disable interrupt for event READY
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event DOWN
    -                DOWN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event UP
    -                UP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event CROSS
    -                CROSS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1024: [244]u8,
    -            ///  Compare result
    -            RESULT: mmio.Mmio(packed struct(u32) {
    -                ///  Result of last compare. Decision point SAMPLE task.
    -                RESULT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Input voltage is below the threshold (VIN+ < VIN-)
    -                        Below = 0x0,
    -                        ///  Input voltage is above the threshold (VIN+ > VIN-)
    -                        Above = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1280: [252]u8,
    -            ///  COMP enable
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable COMP
    -                ENABLE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x2,
    -                        _,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            ///  Pin select
    -            PSEL: mmio.Mmio(packed struct(u32) {
    -                ///  Analog pin select
    -                PSEL: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        ///  AIN0 selected as analog input
    -                        AnalogInput0 = 0x0,
    -                        ///  AIN1 selected as analog input
    -                        AnalogInput1 = 0x1,
    -                        ///  AIN2 selected as analog input
    -                        AnalogInput2 = 0x2,
    -                        ///  AIN3 selected as analog input
    -                        AnalogInput3 = 0x3,
    -                        ///  AIN4 selected as analog input
    -                        AnalogInput4 = 0x4,
    -                        ///  AIN5 selected as analog input
    -                        AnalogInput5 = 0x5,
    -                        ///  AIN6 selected as analog input
    -                        AnalogInput6 = 0x6,
    -                        ///  AIN7 selected as analog input
    -                        AnalogInput7 = 0x7,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            ///  Reference source select for single-ended mode
    -            REFSEL: mmio.Mmio(packed struct(u32) {
    -                ///  Reference select
    -                REFSEL: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        ///  VREF = internal 1.2 V reference (VDD >= 1.7 V)
    -                        Int1V2 = 0x0,
    -                        ///  VREF = internal 1.8 V reference (VDD >= VREF + 0.2 V)
    -                        Int1V8 = 0x1,
    -                        ///  VREF = internal 2.4 V reference (VDD >= VREF + 0.2 V)
    -                        Int2V4 = 0x2,
    -                        ///  VREF = VDD
    -                        VDD = 0x4,
    -                        ///  VREF = AREF (VDD >= VREF >= AREFMIN)
    -                        ARef = 0x5,
    -                        _,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            ///  External reference select
    -            EXTREFSEL: mmio.Mmio(packed struct(u32) {
    -                ///  External analog reference select
    -                EXTREFSEL: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        ///  Use AIN0 as external analog reference
    -                        AnalogReference0 = 0x0,
    -                        ///  Use AIN1 as external analog reference
    -                        AnalogReference1 = 0x1,
    -                        ///  Use AIN2 as external analog reference
    -                        AnalogReference2 = 0x2,
    -                        ///  Use AIN3 as external analog reference
    -                        AnalogReference3 = 0x3,
    -                        ///  Use AIN4 as external analog reference
    -                        AnalogReference4 = 0x4,
    -                        ///  Use AIN5 as external analog reference
    -                        AnalogReference5 = 0x5,
    -                        ///  Use AIN6 as external analog reference
    -                        AnalogReference6 = 0x6,
    -                        ///  Use AIN7 as external analog reference
    -                        AnalogReference7 = 0x7,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            reserved1328: [32]u8,
    -            ///  Threshold configuration for hysteresis unit
    -            TH: mmio.Mmio(packed struct(u32) {
    -                ///  VDOWN = (THDOWN+1)/64*VREF
    -                THDOWN: u6,
    -                reserved8: u2,
    -                ///  VUP = (THUP+1)/64*VREF
    -                THUP: u6,
    -                padding: u18,
    -            }),
    -            ///  Mode configuration
    -            MODE: mmio.Mmio(packed struct(u32) {
    -                ///  Speed and power modes
    -                SP: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Low-power mode
    -                        Low = 0x0,
    -                        ///  Normal mode
    -                        Normal = 0x1,
    -                        ///  High-speed mode
    -                        High = 0x2,
    -                        _,
    -                    },
    -                },
    -                reserved8: u6,
    -                ///  Main operation modes
    -                MAIN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Single-ended mode
    -                        SE = 0x0,
    -                        ///  Differential mode
    -                        Diff = 0x1,
    -                    },
    -                },
    -                padding: u23,
    -            }),
    -            ///  Comparator hysteresis enable
    -            HYST: mmio.Mmio(packed struct(u32) {
    -                ///  Comparator hysteresis
    -                HYST: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Comparator hysteresis disabled
    -                        NoHyst = 0x0,
    -                        ///  Comparator hysteresis enabled
    -                        Hyst50mV = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -        };
    -
    -        ///  Low Power Comparator
    -        pub const LPCOMP = extern struct {
    -            ///  Start comparator
    -            TASKS_START: mmio.Mmio(packed struct(u32) {
    -                ///  Start comparator
    -                TASKS_START: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Stop comparator
    -            TASKS_STOP: mmio.Mmio(packed struct(u32) {
    -                ///  Stop comparator
    -                TASKS_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Sample comparator value
    -            TASKS_SAMPLE: mmio.Mmio(packed struct(u32) {
    -                ///  Sample comparator value
    -                TASKS_SAMPLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved256: [244]u8,
    -            ///  LPCOMP is ready and output is valid
    -            EVENTS_READY: mmio.Mmio(packed struct(u32) {
    -                ///  LPCOMP is ready and output is valid
    -                EVENTS_READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Downward crossing
    -            EVENTS_DOWN: mmio.Mmio(packed struct(u32) {
    -                ///  Downward crossing
    -                EVENTS_DOWN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Upward crossing
    -            EVENTS_UP: mmio.Mmio(packed struct(u32) {
    -                ///  Upward crossing
    -                EVENTS_UP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Downward or upward crossing
    -            EVENTS_CROSS: mmio.Mmio(packed struct(u32) {
    -                ///  Downward or upward crossing
    -                EVENTS_CROSS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved512: [240]u8,
    -            ///  Shortcuts between local events and tasks
    -            SHORTS: mmio.Mmio(packed struct(u32) {
    -                ///  Shortcut between event READY and task SAMPLE
    -                READY_SAMPLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event READY and task STOP
    -                READY_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event DOWN and task STOP
    -                DOWN_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event UP and task STOP
    -                UP_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Shortcut between event CROSS and task STOP
    -                CROSS_STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable shortcut
    -                        Disabled = 0x0,
    -                        ///  Enable shortcut
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u27,
    -            }),
    -            reserved772: [256]u8,
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to enable interrupt for event READY
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event DOWN
    -                DOWN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event UP
    -                UP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event CROSS
    -                CROSS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to disable interrupt for event READY
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event DOWN
    -                DOWN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event UP
    -                UP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event CROSS
    -                CROSS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            reserved1024: [244]u8,
    -            ///  Compare result
    -            RESULT: mmio.Mmio(packed struct(u32) {
    -                ///  Result of last compare. Decision point SAMPLE task.
    -                RESULT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Input voltage is below the reference threshold (VIN+ < VIN-).
    -                        Below = 0x0,
    -                        ///  Input voltage is above the reference threshold (VIN+ > VIN-).
    -                        Above = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1280: [252]u8,
    -            ///  Enable LPCOMP
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable LPCOMP
    -                ENABLE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            ///  Input pin select
    -            PSEL: mmio.Mmio(packed struct(u32) {
    -                ///  Analog pin select
    -                PSEL: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        ///  AIN0 selected as analog input
    -                        AnalogInput0 = 0x0,
    -                        ///  AIN1 selected as analog input
    -                        AnalogInput1 = 0x1,
    -                        ///  AIN2 selected as analog input
    -                        AnalogInput2 = 0x2,
    -                        ///  AIN3 selected as analog input
    -                        AnalogInput3 = 0x3,
    -                        ///  AIN4 selected as analog input
    -                        AnalogInput4 = 0x4,
    -                        ///  AIN5 selected as analog input
    -                        AnalogInput5 = 0x5,
    -                        ///  AIN6 selected as analog input
    -                        AnalogInput6 = 0x6,
    -                        ///  AIN7 selected as analog input
    -                        AnalogInput7 = 0x7,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            ///  Reference select
    -            REFSEL: mmio.Mmio(packed struct(u32) {
    -                ///  Reference select
    -                REFSEL: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  VDD * 1/8 selected as reference
    -                        Ref1_8Vdd = 0x0,
    -                        ///  VDD * 2/8 selected as reference
    -                        Ref2_8Vdd = 0x1,
    -                        ///  VDD * 3/8 selected as reference
    -                        Ref3_8Vdd = 0x2,
    -                        ///  VDD * 4/8 selected as reference
    -                        Ref4_8Vdd = 0x3,
    -                        ///  VDD * 5/8 selected as reference
    -                        Ref5_8Vdd = 0x4,
    -                        ///  VDD * 6/8 selected as reference
    -                        Ref6_8Vdd = 0x5,
    -                        ///  VDD * 7/8 selected as reference
    -                        Ref7_8Vdd = 0x6,
    -                        ///  External analog reference selected
    -                        ARef = 0x7,
    -                        ///  VDD * 1/16 selected as reference
    -                        Ref1_16Vdd = 0x8,
    -                        ///  VDD * 3/16 selected as reference
    -                        Ref3_16Vdd = 0x9,
    -                        ///  VDD * 5/16 selected as reference
    -                        Ref5_16Vdd = 0xa,
    -                        ///  VDD * 7/16 selected as reference
    -                        Ref7_16Vdd = 0xb,
    -                        ///  VDD * 9/16 selected as reference
    -                        Ref9_16Vdd = 0xc,
    -                        ///  VDD * 11/16 selected as reference
    -                        Ref11_16Vdd = 0xd,
    -                        ///  VDD * 13/16 selected as reference
    -                        Ref13_16Vdd = 0xe,
    -                        ///  VDD * 15/16 selected as reference
    -                        Ref15_16Vdd = 0xf,
    -                    },
    -                },
    -                padding: u28,
    -            }),
    -            ///  External reference select
    -            EXTREFSEL: mmio.Mmio(packed struct(u32) {
    -                ///  External analog reference select
    -                EXTREFSEL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Use AIN0 as external analog reference
    -                        AnalogReference0 = 0x0,
    -                        ///  Use AIN1 as external analog reference
    -                        AnalogReference1 = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1312: [16]u8,
    -            ///  Analog detect configuration
    -            ANADETECT: mmio.Mmio(packed struct(u32) {
    -                ///  Analog detect configuration
    -                ANADETECT: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Generate ANADETECT on crossing, both upward crossing and downward crossing
    -                        Cross = 0x0,
    -                        ///  Generate ANADETECT on upward crossing only
    -                        Up = 0x1,
    -                        ///  Generate ANADETECT on downward crossing only
    -                        Down = 0x2,
    -                        _,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            reserved1336: [20]u8,
    -            ///  Comparator hysteresis enable
    -            HYST: mmio.Mmio(packed struct(u32) {
    -                ///  Comparator hysteresis enable
    -                HYST: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Comparator hysteresis disabled
    -                        Disabled = 0x0,
    -                        ///  Comparator hysteresis enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -        };
    -
    -        ///  Event Generator Unit 0
    -        pub const EGU0 = extern struct {
    -            ///  Description collection: Trigger n for triggering the corresponding TRIGGERED[n] event
    -            TASKS_TRIGGER: [16]mmio.Mmio(packed struct(u32) {
    -                ///  Trigger n for triggering the corresponding TRIGGERED[n] event
    -                TASKS_TRIGGER: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Trigger task
    -                        Trigger = 0x1,
    -                        _,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved256: [192]u8,
    -            ///  Description collection: Event number n generated by triggering the corresponding TRIGGER[n] task
    -            EVENTS_TRIGGERED: [16]mmio.Mmio(packed struct(u32) {
    -                ///  Event number n generated by triggering the corresponding TRIGGER[n] task
    -                EVENTS_TRIGGERED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Event not generated
    -                        NotGenerated = 0x0,
    -                        ///  Event generated
    -                        Generated = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved768: [448]u8,
    -            ///  Enable or disable interrupt
    -            INTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable interrupt for event TRIGGERED[0]
    -                TRIGGERED0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event TRIGGERED[1]
    -                TRIGGERED1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event TRIGGERED[2]
    -                TRIGGERED2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event TRIGGERED[3]
    -                TRIGGERED3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event TRIGGERED[4]
    -                TRIGGERED4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event TRIGGERED[5]
    -                TRIGGERED5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event TRIGGERED[6]
    -                TRIGGERED6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event TRIGGERED[7]
    -                TRIGGERED7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event TRIGGERED[8]
    -                TRIGGERED8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event TRIGGERED[9]
    -                TRIGGERED9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event TRIGGERED[10]
    -                TRIGGERED10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event TRIGGERED[11]
    -                TRIGGERED11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event TRIGGERED[12]
    -                TRIGGERED12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event TRIGGERED[13]
    -                TRIGGERED13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event TRIGGERED[14]
    -                TRIGGERED14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable interrupt for event TRIGGERED[15]
    -                TRIGGERED15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable
    -                        Disabled = 0x0,
    -                        ///  Enable
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u16,
    -            }),
    -            ///  Enable interrupt
    -            INTENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to enable interrupt for event TRIGGERED[0]
    -                TRIGGERED0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event TRIGGERED[1]
    -                TRIGGERED1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event TRIGGERED[2]
    -                TRIGGERED2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event TRIGGERED[3]
    -                TRIGGERED3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event TRIGGERED[4]
    -                TRIGGERED4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event TRIGGERED[5]
    -                TRIGGERED5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event TRIGGERED[6]
    -                TRIGGERED6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event TRIGGERED[7]
    -                TRIGGERED7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event TRIGGERED[8]
    -                TRIGGERED8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event TRIGGERED[9]
    -                TRIGGERED9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event TRIGGERED[10]
    -                TRIGGERED10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event TRIGGERED[11]
    -                TRIGGERED11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event TRIGGERED[12]
    -                TRIGGERED12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event TRIGGERED[13]
    -                TRIGGERED13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event TRIGGERED[14]
    -                TRIGGERED14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to enable interrupt for event TRIGGERED[15]
    -                TRIGGERED15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u16,
    -            }),
    -            ///  Disable interrupt
    -            INTENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Write '1' to disable interrupt for event TRIGGERED[0]
    -                TRIGGERED0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event TRIGGERED[1]
    -                TRIGGERED1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event TRIGGERED[2]
    -                TRIGGERED2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event TRIGGERED[3]
    -                TRIGGERED3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event TRIGGERED[4]
    -                TRIGGERED4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event TRIGGERED[5]
    -                TRIGGERED5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event TRIGGERED[6]
    -                TRIGGERED6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event TRIGGERED[7]
    -                TRIGGERED7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event TRIGGERED[8]
    -                TRIGGERED8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event TRIGGERED[9]
    -                TRIGGERED9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event TRIGGERED[10]
    -                TRIGGERED10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event TRIGGERED[11]
    -                TRIGGERED11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event TRIGGERED[12]
    -                TRIGGERED12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event TRIGGERED[13]
    -                TRIGGERED13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event TRIGGERED[14]
    -                TRIGGERED14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Write '1' to disable interrupt for event TRIGGERED[15]
    -                TRIGGERED15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: Disabled
    -                        Disabled = 0x0,
    -                        ///  Read: Enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u16,
    -            }),
    -        };
    -
    -        ///  Software interrupt 0
    -        pub const SWI0 = extern struct {
    -            ///  Unused.
    -            UNUSED: u32,
    -        };
    -
    -        ///  Programmable Peripheral Interconnect
    -        pub const PPI = extern struct {
    -            reserved1280: [1280]u8,
    -            ///  Channel enable register
    -            CHEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable or disable channel 0
    -                CH0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 1
    -                CH1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 2
    -                CH2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 3
    -                CH3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 4
    -                CH4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 5
    -                CH5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 6
    -                CH6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 7
    -                CH7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 8
    -                CH8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 9
    -                CH9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 10
    -                CH10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 11
    -                CH11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 12
    -                CH12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 13
    -                CH13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 14
    -                CH14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 15
    -                CH15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 16
    -                CH16: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 17
    -                CH17: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 18
    -                CH18: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 19
    -                CH19: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 20
    -                CH20: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 21
    -                CH21: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 22
    -                CH22: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 23
    -                CH23: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 24
    -                CH24: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 25
    -                CH25: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 26
    -                CH26: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 27
    -                CH27: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 28
    -                CH28: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 29
    -                CH29: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 30
    -                CH30: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Enable or disable channel 31
    -                CH31: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable channel
    -                        Disabled = 0x0,
    -                        ///  Enable channel
    -                        Enabled = 0x1,
    -                    },
    -                },
    -            }),
    -            ///  Channel enable set register
    -            CHENSET: mmio.Mmio(packed struct(u32) {
    -                ///  Channel 0 enable set register. Writing '0' has no effect
    -                CH0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 1 enable set register. Writing '0' has no effect
    -                CH1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 2 enable set register. Writing '0' has no effect
    -                CH2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 3 enable set register. Writing '0' has no effect
    -                CH3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 4 enable set register. Writing '0' has no effect
    -                CH4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 5 enable set register. Writing '0' has no effect
    -                CH5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 6 enable set register. Writing '0' has no effect
    -                CH6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 7 enable set register. Writing '0' has no effect
    -                CH7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 8 enable set register. Writing '0' has no effect
    -                CH8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 9 enable set register. Writing '0' has no effect
    -                CH9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 10 enable set register. Writing '0' has no effect
    -                CH10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 11 enable set register. Writing '0' has no effect
    -                CH11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 12 enable set register. Writing '0' has no effect
    -                CH12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 13 enable set register. Writing '0' has no effect
    -                CH13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 14 enable set register. Writing '0' has no effect
    -                CH14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 15 enable set register. Writing '0' has no effect
    -                CH15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 16 enable set register. Writing '0' has no effect
    -                CH16: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 17 enable set register. Writing '0' has no effect
    -                CH17: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 18 enable set register. Writing '0' has no effect
    -                CH18: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 19 enable set register. Writing '0' has no effect
    -                CH19: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 20 enable set register. Writing '0' has no effect
    -                CH20: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 21 enable set register. Writing '0' has no effect
    -                CH21: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 22 enable set register. Writing '0' has no effect
    -                CH22: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 23 enable set register. Writing '0' has no effect
    -                CH23: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 24 enable set register. Writing '0' has no effect
    -                CH24: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 25 enable set register. Writing '0' has no effect
    -                CH25: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 26 enable set register. Writing '0' has no effect
    -                CH26: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 27 enable set register. Writing '0' has no effect
    -                CH27: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 28 enable set register. Writing '0' has no effect
    -                CH28: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 29 enable set register. Writing '0' has no effect
    -                CH29: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 30 enable set register. Writing '0' has no effect
    -                CH30: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 31 enable set register. Writing '0' has no effect
    -                CH31: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -            }),
    -            ///  Channel enable clear register
    -            CHENCLR: mmio.Mmio(packed struct(u32) {
    -                ///  Channel 0 enable clear register. Writing '0' has no effect
    -                CH0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 1 enable clear register. Writing '0' has no effect
    -                CH1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 2 enable clear register. Writing '0' has no effect
    -                CH2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 3 enable clear register. Writing '0' has no effect
    -                CH3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 4 enable clear register. Writing '0' has no effect
    -                CH4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 5 enable clear register. Writing '0' has no effect
    -                CH5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 6 enable clear register. Writing '0' has no effect
    -                CH6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 7 enable clear register. Writing '0' has no effect
    -                CH7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 8 enable clear register. Writing '0' has no effect
    -                CH8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 9 enable clear register. Writing '0' has no effect
    -                CH9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 10 enable clear register. Writing '0' has no effect
    -                CH10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 11 enable clear register. Writing '0' has no effect
    -                CH11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 12 enable clear register. Writing '0' has no effect
    -                CH12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 13 enable clear register. Writing '0' has no effect
    -                CH13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 14 enable clear register. Writing '0' has no effect
    -                CH14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 15 enable clear register. Writing '0' has no effect
    -                CH15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 16 enable clear register. Writing '0' has no effect
    -                CH16: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 17 enable clear register. Writing '0' has no effect
    -                CH17: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 18 enable clear register. Writing '0' has no effect
    -                CH18: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 19 enable clear register. Writing '0' has no effect
    -                CH19: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 20 enable clear register. Writing '0' has no effect
    -                CH20: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 21 enable clear register. Writing '0' has no effect
    -                CH21: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 22 enable clear register. Writing '0' has no effect
    -                CH22: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 23 enable clear register. Writing '0' has no effect
    -                CH23: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 24 enable clear register. Writing '0' has no effect
    -                CH24: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 25 enable clear register. Writing '0' has no effect
    -                CH25: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 26 enable clear register. Writing '0' has no effect
    -                CH26: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 27 enable clear register. Writing '0' has no effect
    -                CH27: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 28 enable clear register. Writing '0' has no effect
    -                CH28: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 29 enable clear register. Writing '0' has no effect
    -                CH29: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 30 enable clear register. Writing '0' has no effect
    -                CH30: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                ///  Channel 31 enable clear register. Writing '0' has no effect
    -                CH31: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Read: channel disabled
    -                        Disabled = 0x0,
    -                        ///  Read: channel enabled
    -                        Enabled = 0x1,
    -                    },
    -                },
    -            }),
    -            reserved2048: [756]u8,
    -            ///  Description collection: Channel group n
    -            CHG: [6]mmio.Mmio(packed struct(u32) {
    -                ///  Include or exclude channel 0
    -                CH0: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 1
    -                CH1: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 2
    -                CH2: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 3
    -                CH3: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 4
    -                CH4: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 5
    -                CH5: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 6
    -                CH6: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 7
    -                CH7: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 8
    -                CH8: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 9
    -                CH9: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 10
    -                CH10: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 11
    -                CH11: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 12
    -                CH12: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 13
    -                CH13: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 14
    -                CH14: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 15
    -                CH15: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 16
    -                CH16: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 17
    -                CH17: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 18
    -                CH18: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 19
    -                CH19: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 20
    -                CH20: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 21
    -                CH21: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 22
    -                CH22: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 23
    -                CH23: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 24
    -                CH24: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 25
    -                CH25: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 26
    -                CH26: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 27
    -                CH27: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 28
    -                CH28: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 29
    -                CH29: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 30
    -                CH30: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -                ///  Include or exclude channel 31
    -                CH31: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Exclude
    -                        Excluded = 0x0,
    -                        ///  Include
    -                        Included = 0x1,
    -                    },
    -                },
    -            }),
    -        };
    -
    -        ///  Non Volatile Memory Controller
    -        pub const NVMC = extern struct {
    -            reserved1024: [1024]u8,
    -            ///  Ready flag
    -            READY: mmio.Mmio(packed struct(u32) {
    -                ///  NVMC is ready or busy
    -                READY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  NVMC is busy (on-going write or erase operation)
    -                        Busy = 0x0,
    -                        ///  NVMC is ready
    -                        Ready = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1032: [4]u8,
    -            ///  Ready flag
    -            READYNEXT: mmio.Mmio(packed struct(u32) {
    -                ///  NVMC can accept a new write operation
    -                READYNEXT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  NVMC cannot accept any write operation
    -                        Busy = 0x0,
    -                        ///  NVMC is ready
    -                        Ready = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            reserved1284: [248]u8,
    -            ///  Configuration register
    -            CONFIG: mmio.Mmio(packed struct(u32) {
    -                ///  Program memory access mode. It is strongly recommended to only activate erase and write modes when they are actively used. Enabling write or erase will invalidate the cache and keep it invalidated.
    -                WEN: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Read only access
    -                        Ren = 0x0,
    -                        ///  Write enabled
    -                        Wen = 0x1,
    -                        ///  Erase enabled
    -                        Een = 0x2,
    -                        _,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            ///  Register for erasing a page in code area
    -            ERASEPAGE: mmio.Mmio(packed struct(u32) {
    -                ///  Register for starting erase of a page in code area
    -                ERASEPAGE: u32,
    -            }),
    -            ///  Register for erasing all non-volatile user memory
    -            ERASEALL: mmio.Mmio(packed struct(u32) {
    -                ///  Erase all non-volatile memory including UICR registers. Note that the erase must be enabled using CONFIG.WEN before the non-volatile memory can be erased.
    -                ERASEALL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  No operation
    -                        NoOperation = 0x0,
    -                        ///  Start chip erase
    -                        Erase = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Deprecated register - Register for erasing a page in code area. Equivalent to ERASEPAGE.
    -            ERASEPCR0: mmio.Mmio(packed struct(u32) {
    -                ///  Register for starting erase of a page in code area. Equivalent to ERASEPAGE.
    -                ERASEPCR0: u32,
    -            }),
    -            ///  Register for erasing user information configuration registers
    -            ERASEUICR: mmio.Mmio(packed struct(u32) {
    -                ///  Register starting erase of all user information configuration registers. Note that the erase must be enabled using CONFIG.WEN before the UICR can be erased.
    -                ERASEUICR: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  No operation
    -                        NoOperation = 0x0,
    -                        ///  Start erase of UICR
    -                        Erase = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Register for partial erase of a page in code area
    -            ERASEPAGEPARTIAL: mmio.Mmio(packed struct(u32) {
    -                ///  Register for starting partial erase of a page in code area
    -                ERASEPAGEPARTIAL: u32,
    -            }),
    -            ///  Register for partial erase configuration
    -            ERASEPAGEPARTIALCFG: mmio.Mmio(packed struct(u32) {
    -                ///  Duration of the partial erase in milliseconds
    -                DURATION: u7,
    -                padding: u25,
    -            }),
    -            reserved1344: [32]u8,
    -            ///  I-code cache configuration register.
    -            ICACHECNF: mmio.Mmio(packed struct(u32) {
    -                ///  Cache enable
    -                CACHEEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable cache. Invalidates all cache entries.
    -                        Disabled = 0x0,
    -                        ///  Enable cache
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                reserved8: u7,
    -                ///  Cache profiling enable
    -                CACHEPROFEN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disable cache profiling
    -                        Disabled = 0x0,
    -                        ///  Enable cache profiling
    -                        Enabled = 0x1,
    -                    },
    -                },
    -                padding: u23,
    -            }),
    -            reserved1352: [4]u8,
    -            ///  I-code cache hit counter.
    -            IHIT: mmio.Mmio(packed struct(u32) {
    -                ///  Number of cache hits
    -                HITS: u32,
    -            }),
    -            ///  I-code cache miss counter.
    -            IMISS: mmio.Mmio(packed struct(u32) {
    -                ///  Number of cache misses
    -                MISSES: u32,
    -            }),
    -        };
    -    };
    -};
    
    From 597843c4c1759dd62baf0cbec9e4d0a391c4586c Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20Quei=C3=9Fner?= 
    Date: Fri, 22 Sep 2023 09:02:37 +0200
    Subject: [PATCH 205/286] Microzig Generation 2 Build Interface  (#26)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    * Drops microzig dependency
    * Starts to port to MicroZig Build Gen 2
    * Drops CI
    
    ---------
    
    Co-authored-by: Felix "xq" Queißner 
    ---
     .github/workflows/build.yml |   19 -
     build.zig                   |  102 ++-
     build.zig.zon               |    7 +-
     src/boards.zig              |   12 -
     src/chips.zig               |    9 -
     src/chips/ATmega328P.zig    | 1388 -----------------------------------
     6 files changed, 78 insertions(+), 1459 deletions(-)
     delete mode 100644 .github/workflows/build.yml
     delete mode 100644 src/chips/ATmega328P.zig
    
    diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
    deleted file mode 100644
    index 63ea5331c..000000000
    --- a/.github/workflows/build.yml
    +++ /dev/null
    @@ -1,19 +0,0 @@
    -name: Build
    -on:
    -  push:
    -
    -jobs:
    -  build:
    -    runs-on: ${{ matrix.os }}
    -    strategy:
    -      matrix:
    -        os: [ubuntu-latest, windows-latest, macos-latest]
    -        optimize: [Debug, ReleaseSmall, ReleaseFast, ReleaseSafe]
    -    steps:
    -      - uses: actions/checkout@v2
    -      - uses: goto-bus-stop/setup-zig@v2.1.1
    -        with:
    -          version: 0.11.0
    -
    -      - name: Build
    -        run: zig build install "-Doptimize=${{matrix.optimize}}"
    diff --git a/build.zig b/build.zig
    index dd84d30ca..19ba0769f 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -1,32 +1,84 @@
     const std = @import("std");
    -const microzig = @import("microzig");
     
    -pub const boards = @import("src/boards.zig");
    -pub const chips = @import("src/chips.zig");
    +fn path(comptime suffix: []const u8) std.Build.LazyPath {
    +    return .{
    +        .cwd_relative = comptime ((std.fs.path.dirname(@src().file) orelse ".") ++ suffix),
    +    };
    +}
     
    -pub fn build(b: *std.build.Builder) void {
    -    const optimize = b.standardOptimizeOption(.{});
    -    inline for (@typeInfo(boards).Struct.decls) |decl| {
    -        const exe = microzig.addEmbeddedExecutable(b, .{
    -            .name = @field(boards, decl.name).name ++ ".minimal",
    -            .source_file = .{
    -                .path = "test/programs/minimal.zig",
    +const hal = .{
    +    .source_file = path("/src/hals/ATmega328P.zig"),
    +};
    +
    +pub const chips = struct {
    +    pub const atmega328p = .{
    +        .preferred_format = .hex,
    +        .chip = .{
    +            .name = "ATmega328P",
    +            .url = "https://www.microchip.com/en-us/product/atmega328p",
    +            .cpu = .avr5,
    +            .register_definition = .{
    +                .json = path("/src/chips/ATmega328P.json"),
                 },
    -            .backing = .{ .board = @field(boards, decl.name) },
    -            .optimize = optimize,
    -        });
    -        exe.installArtifact(b);
    -    }
    +            .memory_regions = &.{
    +                .{ .offset = 0x000000, .length = 32 * 1024, .kind = .flash },
    +                .{ .offset = 0x800100, .length = 2048, .kind = .ram },
    +            },
    +        },
    +        .hal = hal,
    +    };
    +};
     
    -    inline for (@typeInfo(chips).Struct.decls) |decl| {
    -        const exe = microzig.addEmbeddedExecutable(b, .{
    -            .name = @field(chips, decl.name).name ++ ".minimal",
    -            .source_file = .{
    -                .path = "test/programs/minimal.zig",
    +pub const boards = struct {
    +    pub const arduino = struct {
    +        pub const nano = .{
    +            .preferred_format = .hex,
    +            .chip = chips.atmega328p.chip,
    +            .hal = hal,
    +            .board = .{
    +                .name = "Arduino Nano",
    +                .url = "https://docs.arduino.cc/hardware/nano",
    +                .source_file = path("/src/boards/arduino_nano.zig"),
                 },
    -            .backing = .{ .chip = @field(chips, decl.name) },
    -            .optimize = optimize,
    -        });
    -        exe.installArtifact(b);
    -    }
    +        };
    +
    +        pub const uno_rev3 = .{
    +            .preferred_format = .hex,
    +            .chip = chips.atmega328p.chip,
    +            .hal = hal,
    +            .board = .{
    +                .name = "Arduino Uno",
    +                .url = "https://docs.arduino.cc/hardware/uno-rev3",
    +                .source_file = path("/src/boards/arduino_uno.zig"),
    +            },
    +        };
    +    };
    +};
    +
    +pub fn build(b: *std.build.Builder) void {
    +    _ = b;
    +    // const optimize = b.standardOptimizeOption(.{});
    +    // inline for (@typeInfo(boards).Struct.decls) |decl| {
    +    //     const exe = microzig.addEmbeddedExecutable(b, .{
    +    //         .name = @field(boards, decl.name).name ++ ".minimal",
    +    //         .source_file = .{
    +    //             .path = "test/programs/minimal.zig",
    +    //         },
    +    //         .backing = .{ .board = @field(boards, decl.name) },
    +    //         .optimize = optimize,
    +    //     });
    +    //     exe.installArtifact(b);
    +    // }
    +
    +    // inline for (@typeInfo(chips).Struct.decls) |decl| {
    +    //     const exe = microzig.addEmbeddedExecutable(b, .{
    +    //         .name = @field(chips, decl.name).name ++ ".minimal",
    +    //         .source_file = .{
    +    //             .path = "test/programs/minimal.zig",
    +    //         },
    +    //         .backing = .{ .chip = @field(chips, decl.name) },
    +    //         .optimize = optimize,
    +    //     });
    +    //     exe.installArtifact(b);
    +    // }
     }
    diff --git a/build.zig.zon b/build.zig.zon
    index e8787ef0b..fd45779e6 100644
    --- a/build.zig.zon
    +++ b/build.zig.zon
    @@ -1,10 +1,5 @@
     .{
         .name = "microzig-espressif-esp",
         .version = "0.1.0",
    -    .dependencies = .{
    -        .microzig = .{
    -            .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/0b3be0a4cc7e6d45714cb09961efc771e364723c.tar.gz",
    -            .hash = "1220ada6d01db7b3d0aa8642df89b1af9ee71b681438249e9a7efb2275fc4cf32152",
    -        },
    -    },
    +    .dependencies = .{},
     }
    diff --git a/src/boards.zig b/src/boards.zig
    index 0691ab575..a6be3d0b4 100644
    --- a/src/boards.zig
    +++ b/src/boards.zig
    @@ -5,15 +5,3 @@ const chips = @import("chips.zig");
     fn root_dir() []const u8 {
         return std.fs.path.dirname(@src().file) orelse unreachable;
     }
    -
    -pub const arduino_nano = micro.Board{
    -    .name = "Arduino Nano",
    -    .source = .{ .path = root_dir() ++ "/boards/arduino_nano.zig" },
    -    .chip = chips.atmega328p,
    -};
    -
    -pub const arduino_uno = micro.Board{
    -    .name = "Arduino Uno",
    -    .source = .{ .path = root_dir() ++ "/boards/arduino_uno.zig" },
    -    .chip = chips.atmega328p,
    -};
    diff --git a/src/chips.zig b/src/chips.zig
    index a1c7d58f2..c46427f7d 100644
    --- a/src/chips.zig
    +++ b/src/chips.zig
    @@ -6,12 +6,3 @@ const MemoryRegion = micro.MemoryRegion;
     fn root_dir() []const u8 {
         return std.fs.path.dirname(@src().file) orelse ".";
     }
    -
    -pub const atmega328p = Chip.from_standard_paths(root_dir(), .{
    -    .name = "ATmega328P",
    -    .cpu = micro.cpus.avr5,
    -    .memory_regions = &.{
    -        MemoryRegion{ .offset = 0x000000, .length = 32 * 1024, .kind = .flash },
    -        MemoryRegion{ .offset = 0x800100, .length = 2048, .kind = .ram },
    -    },
    -});
    diff --git a/src/chips/ATmega328P.zig b/src/chips/ATmega328P.zig
    deleted file mode 100644
    index 6ea04102c..000000000
    --- a/src/chips/ATmega328P.zig
    +++ /dev/null
    @@ -1,1388 +0,0 @@
    -const micro = @import("microzig");
    -const mmio = micro.mmio;
    -
    -pub const devices = struct {
    -    pub const ATmega328P = struct {
    -        pub const properties = struct {
    -            pub const family = "megaAVR";
    -            pub const arch = "AVR8";
    -        };
    -
    -        pub const VectorTable = extern struct {
    -            const Handler = micro.interrupt.Handler;
    -            const unhandled = micro.interrupt.unhandled;
    -
    -            RESET: Handler = unhandled,
    -            ///  External Interrupt Request 0
    -            INT0: Handler = unhandled,
    -            ///  External Interrupt Request 1
    -            INT1: Handler = unhandled,
    -            ///  Pin Change Interrupt Request 0
    -            PCINT0: Handler = unhandled,
    -            ///  Pin Change Interrupt Request 1
    -            PCINT1: Handler = unhandled,
    -            ///  Pin Change Interrupt Request 2
    -            PCINT2: Handler = unhandled,
    -            ///  Watchdog Time-out Interrupt
    -            WDT: Handler = unhandled,
    -            ///  Timer/Counter2 Compare Match A
    -            TIMER2_COMPA: Handler = unhandled,
    -            ///  Timer/Counter2 Compare Match B
    -            TIMER2_COMPB: Handler = unhandled,
    -            ///  Timer/Counter2 Overflow
    -            TIMER2_OVF: Handler = unhandled,
    -            ///  Timer/Counter1 Capture Event
    -            TIMER1_CAPT: Handler = unhandled,
    -            ///  Timer/Counter1 Compare Match A
    -            TIMER1_COMPA: Handler = unhandled,
    -            ///  Timer/Counter1 Compare Match B
    -            TIMER1_COMPB: Handler = unhandled,
    -            ///  Timer/Counter1 Overflow
    -            TIMER1_OVF: Handler = unhandled,
    -            ///  TimerCounter0 Compare Match A
    -            TIMER0_COMPA: Handler = unhandled,
    -            ///  TimerCounter0 Compare Match B
    -            TIMER0_COMPB: Handler = unhandled,
    -            ///  Timer/Couner0 Overflow
    -            TIMER0_OVF: Handler = unhandled,
    -            ///  SPI Serial Transfer Complete
    -            SPI_STC: Handler = unhandled,
    -            ///  USART Rx Complete
    -            USART_RX: Handler = unhandled,
    -            ///  USART, Data Register Empty
    -            USART_UDRE: Handler = unhandled,
    -            ///  USART Tx Complete
    -            USART_TX: Handler = unhandled,
    -            ///  ADC Conversion Complete
    -            ADC: Handler = unhandled,
    -            ///  EEPROM Ready
    -            EE_READY: Handler = unhandled,
    -            ///  Analog Comparator
    -            ANALOG_COMP: Handler = unhandled,
    -            ///  Two-wire Serial Interface
    -            TWI: Handler = unhandled,
    -            ///  Store Program Memory Read
    -            SPM_Ready: Handler = unhandled,
    -        };
    -
    -        pub const peripherals = struct {
    -            ///  Fuses
    -            pub const FUSE = @as(*volatile types.peripherals.FUSE, @ptrFromInt(0x0));
    -            ///  Lockbits
    -            pub const LOCKBIT = @as(*volatile types.peripherals.LOCKBIT, @ptrFromInt(0x0));
    -            ///  I/O Port
    -            pub const PORTB = @as(*volatile types.peripherals.PORT.PORTB, @ptrFromInt(0x23));
    -            ///  I/O Port
    -            pub const PORTC = @as(*volatile types.peripherals.PORT.PORTC, @ptrFromInt(0x26));
    -            ///  I/O Port
    -            pub const PORTD = @as(*volatile types.peripherals.PORT.PORTD, @ptrFromInt(0x29));
    -            ///  Timer/Counter, 8-bit
    -            pub const TC0 = @as(*volatile types.peripherals.TC8.TC0, @ptrFromInt(0x35));
    -            ///  Timer/Counter, 16-bit
    -            pub const TC1 = @as(*volatile types.peripherals.TC16.TC1, @ptrFromInt(0x36));
    -            ///  Timer/Counter, 8-bit Async
    -            pub const TC2 = @as(*volatile types.peripherals.TC8_ASYNC.TC2, @ptrFromInt(0x37));
    -            ///  External Interrupts
    -            pub const EXINT = @as(*volatile types.peripherals.EXINT, @ptrFromInt(0x3b));
    -            ///  CPU Registers
    -            pub const CPU = @as(*volatile types.peripherals.CPU, @ptrFromInt(0x3e));
    -            ///  EEPROM
    -            pub const EEPROM = @as(*volatile types.peripherals.EEPROM, @ptrFromInt(0x3f));
    -            ///  Serial Peripheral Interface
    -            pub const SPI = @as(*volatile types.peripherals.SPI, @ptrFromInt(0x4c));
    -            ///  Analog Comparator
    -            pub const AC = @as(*volatile types.peripherals.AC, @ptrFromInt(0x50));
    -            ///  Watchdog Timer
    -            pub const WDT = @as(*volatile types.peripherals.WDT, @ptrFromInt(0x60));
    -            ///  Analog-to-Digital Converter
    -            pub const ADC = @as(*volatile types.peripherals.ADC, @ptrFromInt(0x78));
    -            ///  Two Wire Serial Interface
    -            pub const TWI = @as(*volatile types.peripherals.TWI, @ptrFromInt(0xb8));
    -            ///  USART
    -            pub const USART0 = @as(*volatile types.peripherals.USART.USART0, @ptrFromInt(0xc0));
    -        };
    -    };
    -};
    -
    -pub const types = struct {
    -    pub const peripherals = struct {
    -        ///  Fuses
    -        pub const FUSE = extern struct {
    -            pub const ENUM_SUT_CKSEL = enum(u6) {
    -                ///  Ext. Clock; Start-up time PWRDWN/RESET: 6 CK/14 CK + 0 ms
    -                EXTCLK_6CK_14CK_0MS = 0x0,
    -                ///  Ext. Clock; Start-up time PWRDWN/RESET: 6 CK/14 CK + 4.1 ms
    -                EXTCLK_6CK_14CK_4MS1 = 0x10,
    -                ///  Ext. Clock; Start-up time PWRDWN/RESET: 6 CK/14 CK + 65 ms
    -                EXTCLK_6CK_14CK_65MS = 0x20,
    -                ///  Int. RC Osc. 8 MHz; Start-up time PWRDWN/RESET: 6 CK/14 CK + 0 ms
    -                INTRCOSC_8MHZ_6CK_14CK_0MS = 0x2,
    -                ///  Int. RC Osc. 8 MHz; Start-up time PWRDWN/RESET: 6 CK/14 CK + 4.1 ms
    -                INTRCOSC_8MHZ_6CK_14CK_4MS1 = 0x12,
    -                ///  Int. RC Osc. 8 MHz; Start-up time PWRDWN/RESET: 6 CK/14 CK + 65 ms
    -                INTRCOSC_8MHZ_6CK_14CK_65MS = 0x22,
    -                ///  Int. RC Osc. 128kHz; Start-up time PWRDWN/RESET: 6 CK/14 CK + 0 ms
    -                INTRCOSC_128KHZ_6CK_14CK_0MS = 0x3,
    -                ///  Int. RC Osc. 128kHz; Start-up time PWRDWN/RESET: 6 CK/14 CK + 4.1 ms
    -                INTRCOSC_128KHZ_6CK_14CK_4MS1 = 0x13,
    -                ///  Int. RC Osc. 128kHz; Start-up time PWRDWN/RESET: 6 CK/14 CK + 65 ms
    -                INTRCOSC_128KHZ_6CK_14CK_65MS = 0x23,
    -                ///  Ext. Low-Freq. Crystal; Start-up time PWRDWN/RESET: 1K CK/14 CK + 0 ms
    -                EXTLOFXTAL_1KCK_14CK_0MS = 0x4,
    -                ///  Ext. Low-Freq. Crystal; Start-up time PWRDWN/RESET: 1K CK/14 CK + 4.1 ms
    -                EXTLOFXTAL_1KCK_14CK_4MS1 = 0x14,
    -                ///  Ext. Low-Freq. Crystal; Start-up time PWRDWN/RESET: 1K CK/14 CK + 65 ms
    -                EXTLOFXTAL_1KCK_14CK_65MS = 0x24,
    -                ///  Ext. Low-Freq. Crystal; Start-up time PWRDWN/RESET: 32K CK/14 CK + 0 ms
    -                EXTLOFXTAL_32KCK_14CK_0MS = 0x5,
    -                ///  Ext. Low-Freq. Crystal; Start-up time PWRDWN/RESET: 32K CK/14 CK + 4.1 ms
    -                EXTLOFXTAL_32KCK_14CK_4MS1 = 0x15,
    -                ///  Ext. Low-Freq. Crystal; Start-up time PWRDWN/RESET: 32K CK/14 CK + 65 ms
    -                EXTLOFXTAL_32KCK_14CK_65MS = 0x25,
    -                ///  Ext. Full-swing Crystal; Start-up time PWRDWN/RESET: 258 CK/14 CK + 4.1 ms
    -                EXTFSXTAL_258CK_14CK_4MS1 = 0x6,
    -                ///  Ext. Full-swing Crystal; Start-up time PWRDWN/RESET: 258 CK/14 CK + 65 ms
    -                EXTFSXTAL_258CK_14CK_65MS = 0x16,
    -                ///  Ext. Full-swing Crystal; Start-up time PWRDWN/RESET: 1K CK /14 CK + 0 ms
    -                EXTFSXTAL_1KCK_14CK_0MS = 0x26,
    -                ///  Ext. Full-swing Crystal; Start-up time PWRDWN/RESET: 1K CK /14 CK + 4.1 ms
    -                EXTFSXTAL_1KCK_14CK_4MS1 = 0x36,
    -                ///  Ext. Full-swing Crystal; Start-up time PWRDWN/RESET: 1K CK /14 CK + 65 ms
    -                EXTFSXTAL_1KCK_14CK_65MS = 0x7,
    -                ///  Ext. Full-swing Crystal; Start-up time PWRDWN/RESET: 16K CK/14 CK + 0 ms
    -                EXTFSXTAL_16KCK_14CK_0MS = 0x17,
    -                ///  Ext. Full-swing Crystal; Start-up time PWRDWN/RESET: 16K CK/14 CK + 4.1 ms
    -                EXTFSXTAL_16KCK_14CK_4MS1 = 0x27,
    -                ///  Ext. Full-swing Crystal; Start-up time PWRDWN/RESET: 16K CK/14 CK + 65 ms
    -                EXTFSXTAL_16KCK_14CK_65MS = 0x37,
    -                ///  Ext. Crystal Osc. 0.4-0.9 MHz; Start-up time PWRDWN/RESET: 258 CK/14 CK + 4.1 ms
    -                EXTXOSC_0MHZ4_0MHZ9_258CK_14CK_4MS1 = 0x8,
    -                ///  Ext. Crystal Osc. 0.4-0.9 MHz; Start-up time PWRDWN/RESET: 258 CK/14 CK + 65 ms
    -                EXTXOSC_0MHZ4_0MHZ9_258CK_14CK_65MS = 0x18,
    -                ///  Ext. Crystal Osc. 0.4-0.9 MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 0 ms
    -                EXTXOSC_0MHZ4_0MHZ9_1KCK_14CK_0MS = 0x28,
    -                ///  Ext. Crystal Osc. 0.4-0.9 MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 4.1 ms
    -                EXTXOSC_0MHZ4_0MHZ9_1KCK_14CK_4MS1 = 0x38,
    -                ///  Ext. Crystal Osc. 0.4-0.9 MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 65 ms
    -                EXTXOSC_0MHZ4_0MHZ9_1KCK_14CK_65MS = 0x9,
    -                ///  Ext. Crystal Osc. 0.4-0.9 MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 0 ms
    -                EXTXOSC_0MHZ4_0MHZ9_16KCK_14CK_0MS = 0x19,
    -                ///  Ext. Crystal Osc. 0.4-0.9 MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 4.1 ms
    -                EXTXOSC_0MHZ4_0MHZ9_16KCK_14CK_4MS1 = 0x29,
    -                ///  Ext. Crystal Osc. 0.4-0.9 MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 65 ms
    -                EXTXOSC_0MHZ4_0MHZ9_16KCK_14CK_65MS = 0x39,
    -                ///  Ext. Crystal Osc. 0.9-3.0 MHz; Start-up time PWRDWN/RESET: 258 CK/14 CK + 4.1 ms
    -                EXTXOSC_0MHZ9_3MHZ_258CK_14CK_4MS1 = 0xa,
    -                ///  Ext. Crystal Osc. 0.9-3.0 MHz; Start-up time PWRDWN/RESET: 258 CK/14 CK + 65 ms
    -                EXTXOSC_0MHZ9_3MHZ_258CK_14CK_65MS = 0x1a,
    -                ///  Ext. Crystal Osc. 0.9-3.0 MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 0 ms
    -                EXTXOSC_0MHZ9_3MHZ_1KCK_14CK_0MS = 0x2a,
    -                ///  Ext. Crystal Osc. 0.9-3.0 MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 4.1 ms
    -                EXTXOSC_0MHZ9_3MHZ_1KCK_14CK_4MS1 = 0x3a,
    -                ///  Ext. Crystal Osc. 0.9-3.0 MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 65 ms
    -                EXTXOSC_0MHZ9_3MHZ_1KCK_14CK_65MS = 0xb,
    -                ///  Ext. Crystal Osc. 0.9-3.0 MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 0 ms
    -                EXTXOSC_0MHZ9_3MHZ_16KCK_14CK_0MS = 0x1b,
    -                ///  Ext. Crystal Osc. 0.9-3.0 MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 4.1 ms
    -                EXTXOSC_0MHZ9_3MHZ_16KCK_14CK_4MS1 = 0x2b,
    -                ///  Ext. Crystal Osc. 0.9-3.0 MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 65 ms
    -                EXTXOSC_0MHZ9_3MHZ_16KCK_14CK_65MS = 0x3b,
    -                ///  Ext. Crystal Osc. 3.0-8.0 MHz; Start-up time PWRDWN/RESET: 258 CK/14 CK + 4.1 ms
    -                EXTXOSC_3MHZ_8MHZ_258CK_14CK_4MS1 = 0xc,
    -                ///  Ext. Crystal Osc. 3.0-8.0 MHz; Start-up time PWRDWN/RESET: 258 CK/14 CK + 65 ms
    -                EXTXOSC_3MHZ_8MHZ_258CK_14CK_65MS = 0x1c,
    -                ///  Ext. Crystal Osc. 3.0-8.0 MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 0 ms
    -                EXTXOSC_3MHZ_8MHZ_1KCK_14CK_0MS = 0x2c,
    -                ///  Ext. Crystal Osc. 3.0-8.0 MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 4.1 ms
    -                EXTXOSC_3MHZ_8MHZ_1KCK_14CK_4MS1 = 0x3c,
    -                ///  Ext. Crystal Osc. 3.0-8.0 MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 65 ms
    -                EXTXOSC_3MHZ_8MHZ_1KCK_14CK_65MS = 0xd,
    -                ///  Ext. Crystal Osc. 3.0-8.0 MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 0 ms
    -                EXTXOSC_3MHZ_8MHZ_16KCK_14CK_0MS = 0x1d,
    -                ///  Ext. Crystal Osc. 3.0-8.0 MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 4.1 ms
    -                EXTXOSC_3MHZ_8MHZ_16KCK_14CK_4MS1 = 0x2d,
    -                ///  Ext. Crystal Osc. 3.0-8.0 MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 65 ms
    -                EXTXOSC_3MHZ_8MHZ_16KCK_14CK_65MS = 0x3d,
    -                ///  Ext. Crystal Osc. 8.0- MHz; Start-up time PWRDWN/RESET: 258 CK/14 CK + 4.1 ms
    -                EXTXOSC_8MHZ_XX_258CK_14CK_4MS1 = 0xe,
    -                ///  Ext. Crystal Osc. 8.0- MHz; Start-up time PWRDWN/RESET: 258 CK/14 CK + 65 ms
    -                EXTXOSC_8MHZ_XX_258CK_14CK_65MS = 0x1e,
    -                ///  Ext. Crystal Osc. 8.0- MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 0 ms
    -                EXTXOSC_8MHZ_XX_1KCK_14CK_0MS = 0x2e,
    -                ///  Ext. Crystal Osc. 8.0- MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 4.1 ms
    -                EXTXOSC_8MHZ_XX_1KCK_14CK_4MS1 = 0x3e,
    -                ///  Ext. Crystal Osc. 8.0- MHz; Start-up time PWRDWN/RESET: 1K CK /14 CK + 65 ms
    -                EXTXOSC_8MHZ_XX_1KCK_14CK_65MS = 0xf,
    -                ///  Ext. Crystal Osc. 8.0- MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 0 ms
    -                EXTXOSC_8MHZ_XX_16KCK_14CK_0MS = 0x1f,
    -                ///  Ext. Crystal Osc. 8.0- MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 4.1 ms
    -                EXTXOSC_8MHZ_XX_16KCK_14CK_4MS1 = 0x2f,
    -                ///  Ext. Crystal Osc. 8.0- MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 65 ms
    -                EXTXOSC_8MHZ_XX_16KCK_14CK_65MS = 0x3f,
    -                _,
    -            };
    -
    -            pub const ENUM_BODLEVEL = enum(u3) {
    -                ///  Brown-out detection at VCC=4.3 V
    -                @"4V3" = 0x4,
    -                ///  Brown-out detection at VCC=2.7 V
    -                @"2V7" = 0x5,
    -                ///  Brown-out detection at VCC=1.8 V
    -                @"1V8" = 0x6,
    -                ///  Brown-out detection disabled
    -                DISABLED = 0x7,
    -                _,
    -            };
    -
    -            pub const ENUM_BOOTSZ = enum(u2) {
    -                ///  Boot Flash size=256 words start address=$3F00
    -                @"256W_3F00" = 0x3,
    -                ///  Boot Flash size=512 words start address=$3E00
    -                @"512W_3E00" = 0x2,
    -                ///  Boot Flash size=1024 words start address=$3C00
    -                @"1024W_3C00" = 0x1,
    -                ///  Boot Flash size=2048 words start address=$3800
    -                @"2048W_3800" = 0x0,
    -            };
    -
    -            LOW: mmio.Mmio(packed struct(u8) {
    -                ///  Select Clock Source
    -                SUT_CKSEL: packed union {
    -                    raw: u6,
    -                    value: ENUM_SUT_CKSEL,
    -                },
    -                ///  Clock output on PORTB0
    -                CKOUT: u1,
    -                ///  Divide clock by 8 internally
    -                CKDIV8: u1,
    -            }),
    -            HIGH: mmio.Mmio(packed struct(u8) {
    -                ///  Boot Reset vector Enabled
    -                BOOTRST: u1,
    -                ///  Select boot size
    -                BOOTSZ: packed union {
    -                    raw: u2,
    -                    value: ENUM_BOOTSZ,
    -                },
    -                ///  Preserve EEPROM through the Chip Erase cycle
    -                EESAVE: u1,
    -                ///  Watch-dog Timer always on
    -                WDTON: u1,
    -                ///  Serial program downloading (SPI) enabled
    -                SPIEN: u1,
    -                ///  Debug Wire enable
    -                DWEN: u1,
    -                ///  Reset Disabled (Enable PC6 as i/o pin)
    -                RSTDISBL: u1,
    -            }),
    -            EXTENDED: mmio.Mmio(packed struct(u8) {
    -                ///  Brown-out Detector trigger level
    -                BODLEVEL: packed union {
    -                    raw: u3,
    -                    value: ENUM_BODLEVEL,
    -                },
    -                padding: u5,
    -            }),
    -        };
    -
    -        ///  Lockbits
    -        pub const LOCKBIT = extern struct {
    -            pub const ENUM_LB = enum(u2) {
    -                ///  Further programming and verification disabled
    -                PROG_VER_DISABLED = 0x0,
    -                ///  Further programming disabled
    -                PROG_DISABLED = 0x2,
    -                ///  No memory lock features enabled
    -                NO_LOCK = 0x3,
    -                _,
    -            };
    -
    -            pub const ENUM_BLB = enum(u2) {
    -                ///  LPM and SPM prohibited in Application Section
    -                LPM_SPM_DISABLE = 0x0,
    -                ///  LPM prohibited in Application Section
    -                LPM_DISABLE = 0x1,
    -                ///  SPM prohibited in Application Section
    -                SPM_DISABLE = 0x2,
    -                ///  No lock on SPM and LPM in Application Section
    -                NO_LOCK = 0x3,
    -            };
    -
    -            pub const ENUM_BLB2 = enum(u2) {
    -                ///  LPM and SPM prohibited in Boot Section
    -                LPM_SPM_DISABLE = 0x0,
    -                ///  LPM prohibited in Boot Section
    -                LPM_DISABLE = 0x1,
    -                ///  SPM prohibited in Boot Section
    -                SPM_DISABLE = 0x2,
    -                ///  No lock on SPM and LPM in Boot Section
    -                NO_LOCK = 0x3,
    -            };
    -
    -            LOCKBIT: mmio.Mmio(packed struct(u8) {
    -                ///  Memory Lock
    -                LB: packed union {
    -                    raw: u2,
    -                    value: ENUM_LB,
    -                },
    -                ///  Boot Loader Protection Mode
    -                BLB0: packed union {
    -                    raw: u2,
    -                    value: ENUM_BLB,
    -                },
    -                ///  Boot Loader Protection Mode
    -                BLB1: packed union {
    -                    raw: u2,
    -                    value: ENUM_BLB2,
    -                },
    -                padding: u2,
    -            }),
    -        };
    -
    -        ///  USART
    -        pub const USART = struct {
    -            pub const COMM_USART_MODE_2BIT = enum(u2) {
    -                ///  Asynchronous USART
    -                ASYNCHRONOUS_USART = 0x0,
    -                ///  Synchronous USART
    -                SYNCHRONOUS_USART = 0x1,
    -                ///  Master SPI
    -                MASTER_SPI = 0x3,
    -                _,
    -            };
    -
    -            pub const COMM_UPM_PARITY_MODE = enum(u2) {
    -                ///  Disabled
    -                DISABLED = 0x0,
    -                ///  Reserved
    -                RESERVED = 0x1,
    -                ///  Enabled, Even Parity
    -                ENABLED_EVEN_PARITY = 0x2,
    -                ///  Enabled, Odd Parity
    -                ENABLED_ODD_PARITY = 0x3,
    -            };
    -
    -            pub const COMM_STOP_BIT_SEL = enum(u1) {
    -                ///  1-bit
    -                @"1_BIT" = 0x0,
    -                ///  2-bit
    -                @"2_BIT" = 0x1,
    -            };
    -
    -            ///  USART
    -            pub const USART0 = extern struct {
    -                ///  USART Control and Status Register A
    -                UCSR0A: mmio.Mmio(packed struct(u8) {
    -                    ///  Multi-processor Communication Mode
    -                    MPCM0: u1,
    -                    ///  Double the USART transmission speed
    -                    U2X0: u1,
    -                    ///  Parity Error
    -                    UPE0: u1,
    -                    ///  Data overRun
    -                    DOR0: u1,
    -                    ///  Framing Error
    -                    FE0: u1,
    -                    ///  USART Data Register Empty
    -                    UDRE0: u1,
    -                    ///  USART Transmitt Complete
    -                    TXC0: u1,
    -                    ///  USART Receive Complete
    -                    RXC0: u1,
    -                }),
    -                ///  USART Control and Status Register B
    -                UCSR0B: mmio.Mmio(packed struct(u8) {
    -                    ///  Transmit Data Bit 8
    -                    TXB80: u1,
    -                    ///  Receive Data Bit 8
    -                    RXB80: u1,
    -                    ///  Character Size - together with UCSZ0 in UCSR0C
    -                    UCSZ02: u1,
    -                    ///  Transmitter Enable
    -                    TXEN0: u1,
    -                    ///  Receiver Enable
    -                    RXEN0: u1,
    -                    ///  USART Data register Empty Interrupt Enable
    -                    UDRIE0: u1,
    -                    ///  TX Complete Interrupt Enable
    -                    TXCIE0: u1,
    -                    ///  RX Complete Interrupt Enable
    -                    RXCIE0: u1,
    -                }),
    -                ///  USART Control and Status Register C
    -                UCSR0C: mmio.Mmio(packed struct(u8) {
    -                    ///  Clock Polarity
    -                    UCPOL0: u1,
    -                    ///  Character Size - together with UCSZ2 in UCSR0B
    -                    UCSZ0: u2,
    -                    ///  Stop Bit Select
    -                    USBS0: packed union {
    -                        raw: u1,
    -                        value: COMM_STOP_BIT_SEL,
    -                    },
    -                    ///  Parity Mode Bits
    -                    UPM0: packed union {
    -                        raw: u2,
    -                        value: COMM_UPM_PARITY_MODE,
    -                    },
    -                    ///  USART Mode Select
    -                    UMSEL0: packed union {
    -                        raw: u2,
    -                        value: COMM_USART_MODE_2BIT,
    -                    },
    -                }),
    -                reserved4: [1]u8,
    -                ///  USART Baud Rate Register Bytes
    -                UBRR0: u16,
    -                ///  USART I/O Data Register
    -                UDR0: u8,
    -            };
    -        };
    -
    -        ///  Two Wire Serial Interface
    -        pub const TWI = extern struct {
    -            pub const COMM_TWI_PRESACLE = enum(u2) {
    -                ///  1
    -                @"1" = 0x0,
    -                ///  4
    -                @"4" = 0x1,
    -                ///  16
    -                @"16" = 0x2,
    -                ///  64
    -                @"64" = 0x3,
    -            };
    -
    -            ///  TWI Bit Rate register
    -            TWBR: u8,
    -            ///  TWI Status Register
    -            TWSR: mmio.Mmio(packed struct(u8) {
    -                ///  TWI Prescaler
    -                TWPS: packed union {
    -                    raw: u2,
    -                    value: COMM_TWI_PRESACLE,
    -                },
    -                reserved3: u1,
    -                ///  TWI Status
    -                TWS: u5,
    -            }),
    -            ///  TWI (Slave) Address register
    -            TWAR: mmio.Mmio(packed struct(u8) {
    -                ///  TWI General Call Recognition Enable Bit
    -                TWGCE: u1,
    -                ///  TWI (Slave) Address register Bits
    -                TWA: u7,
    -            }),
    -            ///  TWI Data register
    -            TWDR: u8,
    -            ///  TWI Control Register
    -            TWCR: mmio.Mmio(packed struct(u8) {
    -                ///  TWI Interrupt Enable
    -                TWIE: u1,
    -                reserved2: u1,
    -                ///  TWI Enable Bit
    -                TWEN: u1,
    -                ///  TWI Write Collition Flag
    -                TWWC: u1,
    -                ///  TWI Stop Condition Bit
    -                TWSTO: u1,
    -                ///  TWI Start Condition Bit
    -                TWSTA: u1,
    -                ///  TWI Enable Acknowledge Bit
    -                TWEA: u1,
    -                ///  TWI Interrupt Flag
    -                TWINT: u1,
    -            }),
    -            ///  TWI (Slave) Address Mask Register
    -            TWAMR: mmio.Mmio(packed struct(u8) {
    -                reserved1: u1,
    -                TWAM: u7,
    -            }),
    -        };
    -
    -        ///  Timer/Counter, 16-bit
    -        pub const TC16 = struct {
    -            pub const CLK_SEL_3BIT_EXT = enum(u3) {
    -                ///  No Clock Source (Stopped)
    -                NO_CLOCK_SOURCE_STOPPED = 0x0,
    -                ///  Running, No Prescaling
    -                RUNNING_NO_PRESCALING = 0x1,
    -                ///  Running, CLK/8
    -                RUNNING_CLK_8 = 0x2,
    -                ///  Running, CLK/64
    -                RUNNING_CLK_64 = 0x3,
    -                ///  Running, CLK/256
    -                RUNNING_CLK_256 = 0x4,
    -                ///  Running, CLK/1024
    -                RUNNING_CLK_1024 = 0x5,
    -                ///  Running, ExtClk Tn Falling Edge
    -                RUNNING_EXTCLK_TN_FALLING_EDGE = 0x6,
    -                ///  Running, ExtClk Tn Rising Edge
    -                RUNNING_EXTCLK_TN_RISING_EDGE = 0x7,
    -            };
    -
    -            ///  Timer/Counter, 16-bit
    -            pub const TC1 = extern struct {
    -                ///  Timer/Counter Interrupt Flag register
    -                TIFR1: mmio.Mmio(packed struct(u8) {
    -                    ///  Timer/Counter1 Overflow Flag
    -                    TOV1: u1,
    -                    ///  Output Compare Flag 1A
    -                    OCF1A: u1,
    -                    ///  Output Compare Flag 1B
    -                    OCF1B: u1,
    -                    reserved5: u2,
    -                    ///  Input Capture Flag 1
    -                    ICF1: u1,
    -                    padding: u2,
    -                }),
    -                reserved13: [12]u8,
    -                ///  General Timer/Counter Control Register
    -                GTCCR: mmio.Mmio(packed struct(u8) {
    -                    ///  Prescaler Reset Timer/Counter1 and Timer/Counter0
    -                    PSRSYNC: u1,
    -                    reserved7: u6,
    -                    ///  Timer/Counter Synchronization Mode
    -                    TSM: u1,
    -                }),
    -                reserved57: [43]u8,
    -                ///  Timer/Counter Interrupt Mask Register
    -                TIMSK1: mmio.Mmio(packed struct(u8) {
    -                    ///  Timer/Counter1 Overflow Interrupt Enable
    -                    TOIE1: u1,
    -                    ///  Timer/Counter1 Output CompareA Match Interrupt Enable
    -                    OCIE1A: u1,
    -                    ///  Timer/Counter1 Output CompareB Match Interrupt Enable
    -                    OCIE1B: u1,
    -                    reserved5: u2,
    -                    ///  Timer/Counter1 Input Capture Interrupt Enable
    -                    ICIE1: u1,
    -                    padding: u2,
    -                }),
    -                reserved74: [16]u8,
    -                ///  Timer/Counter1 Control Register A
    -                TCCR1A: mmio.Mmio(packed struct(u8) {
    -                    ///  Waveform Generation Mode
    -                    WGM1: u2,
    -                    reserved4: u2,
    -                    ///  Compare Output Mode 1B, bits
    -                    COM1B: u2,
    -                    ///  Compare Output Mode 1A, bits
    -                    COM1A: u2,
    -                }),
    -                ///  Timer/Counter1 Control Register B
    -                TCCR1B: mmio.Mmio(packed struct(u8) {
    -                    ///  Prescaler source of Timer/Counter 1
    -                    CS1: packed union {
    -                        raw: u3,
    -                        value: CLK_SEL_3BIT_EXT,
    -                    },
    -                    ///  Waveform Generation Mode
    -                    WGM1: u2,
    -                    reserved6: u1,
    -                    ///  Input Capture 1 Edge Select
    -                    ICES1: u1,
    -                    ///  Input Capture 1 Noise Canceler
    -                    ICNC1: u1,
    -                }),
    -                ///  Timer/Counter1 Control Register C
    -                TCCR1C: mmio.Mmio(packed struct(u8) {
    -                    reserved6: u6,
    -                    FOC1B: u1,
    -                    FOC1A: u1,
    -                }),
    -                reserved78: [1]u8,
    -                ///  Timer/Counter1 Bytes
    -                TCNT1: u16,
    -                ///  Timer/Counter1 Input Capture Register Bytes
    -                ICR1: u16,
    -                ///  Timer/Counter1 Output Compare Register Bytes
    -                OCR1A: u16,
    -                ///  Timer/Counter1 Output Compare Register Bytes
    -                OCR1B: u16,
    -            };
    -        };
    -
    -        ///  Timer/Counter, 8-bit Async
    -        pub const TC8_ASYNC = struct {
    -            pub const CLK_SEL_3BIT = enum(u3) {
    -                ///  No Clock Source (Stopped)
    -                NO_CLOCK_SOURCE_STOPPED = 0x0,
    -                ///  Running, No Prescaling
    -                RUNNING_NO_PRESCALING = 0x1,
    -                ///  Running, CLK/8
    -                RUNNING_CLK_8 = 0x2,
    -                ///  Running, CLK/32
    -                RUNNING_CLK_32 = 0x3,
    -                ///  Running, CLK/64
    -                RUNNING_CLK_64 = 0x4,
    -                ///  Running, CLK/128
    -                RUNNING_CLK_128 = 0x5,
    -                ///  Running, CLK/256
    -                RUNNING_CLK_256 = 0x6,
    -                ///  Running, CLK/1024
    -                RUNNING_CLK_1024 = 0x7,
    -            };
    -
    -            ///  Timer/Counter, 8-bit Async
    -            pub const TC2 = extern struct {
    -                ///  Timer/Counter Interrupt Flag Register
    -                TIFR2: mmio.Mmio(packed struct(u8) {
    -                    ///  Timer/Counter2 Overflow Flag
    -                    TOV2: u1,
    -                    ///  Output Compare Flag 2A
    -                    OCF2A: u1,
    -                    ///  Output Compare Flag 2B
    -                    OCF2B: u1,
    -                    padding: u5,
    -                }),
    -                reserved12: [11]u8,
    -                ///  General Timer Counter Control register
    -                GTCCR: mmio.Mmio(packed struct(u8) {
    -                    reserved1: u1,
    -                    ///  Prescaler Reset Timer/Counter2
    -                    PSRASY: u1,
    -                    reserved7: u5,
    -                    ///  Timer/Counter Synchronization Mode
    -                    TSM: u1,
    -                }),
    -                reserved57: [44]u8,
    -                ///  Timer/Counter Interrupt Mask register
    -                TIMSK2: mmio.Mmio(packed struct(u8) {
    -                    ///  Timer/Counter2 Overflow Interrupt Enable
    -                    TOIE2: u1,
    -                    ///  Timer/Counter2 Output Compare Match A Interrupt Enable
    -                    OCIE2A: u1,
    -                    ///  Timer/Counter2 Output Compare Match B Interrupt Enable
    -                    OCIE2B: u1,
    -                    padding: u5,
    -                }),
    -                reserved121: [63]u8,
    -                ///  Timer/Counter2 Control Register A
    -                TCCR2A: mmio.Mmio(packed struct(u8) {
    -                    ///  Waveform Genration Mode
    -                    WGM2: u2,
    -                    reserved4: u2,
    -                    ///  Compare Output Mode bits
    -                    COM2B: u2,
    -                    ///  Compare Output Mode bits
    -                    COM2A: u2,
    -                }),
    -                ///  Timer/Counter2 Control Register B
    -                TCCR2B: mmio.Mmio(packed struct(u8) {
    -                    ///  Clock Select bits
    -                    CS2: packed union {
    -                        raw: u3,
    -                        value: CLK_SEL_3BIT,
    -                    },
    -                    ///  Waveform Generation Mode
    -                    WGM22: u1,
    -                    reserved6: u2,
    -                    ///  Force Output Compare B
    -                    FOC2B: u1,
    -                    ///  Force Output Compare A
    -                    FOC2A: u1,
    -                }),
    -                ///  Timer/Counter2
    -                TCNT2: u8,
    -                ///  Timer/Counter2 Output Compare Register A
    -                OCR2A: u8,
    -                ///  Timer/Counter2 Output Compare Register B
    -                OCR2B: u8,
    -                reserved127: [1]u8,
    -                ///  Asynchronous Status Register
    -                ASSR: mmio.Mmio(packed struct(u8) {
    -                    ///  Timer/Counter Control Register2 Update Busy
    -                    TCR2BUB: u1,
    -                    ///  Timer/Counter Control Register2 Update Busy
    -                    TCR2AUB: u1,
    -                    ///  Output Compare Register 2 Update Busy
    -                    OCR2BUB: u1,
    -                    ///  Output Compare Register2 Update Busy
    -                    OCR2AUB: u1,
    -                    ///  Timer/Counter2 Update Busy
    -                    TCN2UB: u1,
    -                    ///  Asynchronous Timer/Counter2
    -                    AS2: u1,
    -                    ///  Enable External Clock Input
    -                    EXCLK: u1,
    -                    padding: u1,
    -                }),
    -            };
    -        };
    -
    -        ///  Analog-to-Digital Converter
    -        pub const ADC = extern struct {
    -            pub const ANALOG_ADC_V_REF3 = enum(u2) {
    -                ///  AREF, Internal Vref turned off
    -                AREF_INTERNAL_VREF_TURNED_OFF = 0x0,
    -                ///  AVCC with external capacitor at AREF pin
    -                AVCC_WITH_EXTERNAL_CAPACITOR_AT_AREF_PIN = 0x1,
    -                ///  Reserved
    -                RESERVED = 0x2,
    -                ///  Internal 1.1V Voltage Reference with external capacitor at AREF pin
    -                INTERNAL_1_1V_VOLTAGE_REFERENCE_WITH_EXTERNAL_CAPACITOR_AT_AREF_PIN = 0x3,
    -            };
    -
    -            pub const ADC_MUX_SINGLE = enum(u4) {
    -                ///  ADC Single Ended Input pin 0
    -                ADC0 = 0x0,
    -                ///  ADC Single Ended Input pin 1
    -                ADC1 = 0x1,
    -                ///  ADC Single Ended Input pin 2
    -                ADC2 = 0x2,
    -                ///  ADC Single Ended Input pin 3
    -                ADC3 = 0x3,
    -                ///  ADC Single Ended Input pin 4
    -                ADC4 = 0x4,
    -                ///  ADC Single Ended Input pin 5
    -                ADC5 = 0x5,
    -                ///  ADC Single Ended Input pin 6
    -                ADC6 = 0x6,
    -                ///  ADC Single Ended Input pin 7
    -                ADC7 = 0x7,
    -                ///  Temperature sensor
    -                TEMPSENS = 0x8,
    -                ///  Internal Reference (VBG)
    -                ADC_VBG = 0xe,
    -                ///  0V (GND)
    -                ADC_GND = 0xf,
    -                _,
    -            };
    -
    -            pub const ANALOG_ADC_PRESCALER = enum(u3) {
    -                ///  2
    -                @"2" = 0x0,
    -                ///  2
    -                @"2" = 0x1,
    -                ///  4
    -                @"4" = 0x2,
    -                ///  8
    -                @"8" = 0x3,
    -                ///  16
    -                @"16" = 0x4,
    -                ///  32
    -                @"32" = 0x5,
    -                ///  64
    -                @"64" = 0x6,
    -                ///  128
    -                @"128" = 0x7,
    -            };
    -
    -            pub const ANALOG_ADC_AUTO_TRIGGER = enum(u3) {
    -                ///  Free Running mode
    -                FREE_RUNNING_MODE = 0x0,
    -                ///  Analog Comparator
    -                ANALOG_COMPARATOR = 0x1,
    -                ///  External Interrupt Request 0
    -                EXTERNAL_INTERRUPT_REQUEST_0 = 0x2,
    -                ///  Timer/Counter0 Compare Match A
    -                TIMER_COUNTER0_COMPARE_MATCH_A = 0x3,
    -                ///  Timer/Counter0 Overflow
    -                TIMER_COUNTER0_OVERFLOW = 0x4,
    -                ///  Timer/Counter1 Compare Match B
    -                TIMER_COUNTER1_COMPARE_MATCH_B = 0x5,
    -                ///  Timer/Counter1 Overflow
    -                TIMER_COUNTER1_OVERFLOW = 0x6,
    -                ///  Timer/Counter1 Capture Event
    -                TIMER_COUNTER1_CAPTURE_EVENT = 0x7,
    -            };
    -
    -            ///  ADC Data Register Bytes
    -            ADC: u16,
    -            ///  The ADC Control and Status register A
    -            ADCSRA: mmio.Mmio(packed struct(u8) {
    -                ///  ADC Prescaler Select Bits
    -                ADPS: packed union {
    -                    raw: u3,
    -                    value: ANALOG_ADC_PRESCALER,
    -                },
    -                ///  ADC Interrupt Enable
    -                ADIE: u1,
    -                ///  ADC Interrupt Flag
    -                ADIF: u1,
    -                ///  ADC Auto Trigger Enable
    -                ADATE: u1,
    -                ///  ADC Start Conversion
    -                ADSC: u1,
    -                ///  ADC Enable
    -                ADEN: u1,
    -            }),
    -            ///  The ADC Control and Status register B
    -            ADCSRB: mmio.Mmio(packed struct(u8) {
    -                ///  ADC Auto Trigger Source bits
    -                ADTS: packed union {
    -                    raw: u3,
    -                    value: ANALOG_ADC_AUTO_TRIGGER,
    -                },
    -                reserved6: u3,
    -                ACME: u1,
    -                padding: u1,
    -            }),
    -            ///  The ADC multiplexer Selection Register
    -            ADMUX: mmio.Mmio(packed struct(u8) {
    -                ///  Analog Channel Selection Bits
    -                MUX: packed union {
    -                    raw: u4,
    -                    value: ADC_MUX_SINGLE,
    -                },
    -                reserved5: u1,
    -                ///  Left Adjust Result
    -                ADLAR: u1,
    -                ///  Reference Selection Bits
    -                REFS: packed union {
    -                    raw: u2,
    -                    value: ANALOG_ADC_V_REF3,
    -                },
    -            }),
    -            reserved6: [1]u8,
    -            ///  Digital Input Disable Register
    -            DIDR0: mmio.Mmio(packed struct(u8) {
    -                ADC0D: u1,
    -                ADC1D: u1,
    -                ADC2D: u1,
    -                ADC3D: u1,
    -                ADC4D: u1,
    -                ADC5D: u1,
    -                padding: u2,
    -            }),
    -        };
    -
    -        ///  Analog Comparator
    -        pub const AC = extern struct {
    -            pub const ANALOG_COMP_INTERRUPT = enum(u2) {
    -                ///  Interrupt on Toggle
    -                INTERRUPT_ON_TOGGLE = 0x0,
    -                ///  Reserved
    -                RESERVED = 0x1,
    -                ///  Interrupt on Falling Edge
    -                INTERRUPT_ON_FALLING_EDGE = 0x2,
    -                ///  Interrupt on Rising Edge
    -                INTERRUPT_ON_RISING_EDGE = 0x3,
    -            };
    -
    -            ///  Analog Comparator Control And Status Register
    -            ACSR: mmio.Mmio(packed struct(u8) {
    -                ///  Analog Comparator Interrupt Mode Select bits
    -                ACIS: packed union {
    -                    raw: u2,
    -                    value: ANALOG_COMP_INTERRUPT,
    -                },
    -                ///  Analog Comparator Input Capture Enable
    -                ACIC: u1,
    -                ///  Analog Comparator Interrupt Enable
    -                ACIE: u1,
    -                ///  Analog Comparator Interrupt Flag
    -                ACI: u1,
    -                ///  Analog Compare Output
    -                ACO: u1,
    -                ///  Analog Comparator Bandgap Select
    -                ACBG: u1,
    -                ///  Analog Comparator Disable
    -                ACD: u1,
    -            }),
    -            reserved47: [46]u8,
    -            ///  Digital Input Disable Register 1
    -            DIDR1: mmio.Mmio(packed struct(u8) {
    -                ///  AIN0 Digital Input Disable
    -                AIN0D: u1,
    -                ///  AIN1 Digital Input Disable
    -                AIN1D: u1,
    -                padding: u6,
    -            }),
    -        };
    -
    -        ///  I/O Port
    -        pub const PORT = struct {
    -            ///  I/O Port
    -            pub const PORTB = extern struct {
    -                ///  Port B Input Pins
    -                PINB: u8,
    -                ///  Port B Data Direction Register
    -                DDRB: u8,
    -                ///  Port B Data Register
    -                PORTB: u8,
    -            };
    -
    -            ///  I/O Port
    -            pub const PORTC = extern struct {
    -                ///  Port C Input Pins
    -                PINC: u8,
    -                ///  Port C Data Direction Register
    -                DDRC: u8,
    -                ///  Port C Data Register
    -                PORTC: u8,
    -            };
    -
    -            ///  I/O Port
    -            pub const PORTD = extern struct {
    -                ///  Port D Input Pins
    -                PIND: u8,
    -                ///  Port D Data Direction Register
    -                DDRD: u8,
    -                ///  Port D Data Register
    -                PORTD: u8,
    -            };
    -        };
    -
    -        ///  Timer/Counter, 8-bit
    -        pub const TC8 = struct {
    -            pub const CLK_SEL_3BIT_EXT = enum(u3) {
    -                ///  No Clock Source (Stopped)
    -                NO_CLOCK_SOURCE_STOPPED = 0x0,
    -                ///  Running, No Prescaling
    -                RUNNING_NO_PRESCALING = 0x1,
    -                ///  Running, CLK/8
    -                RUNNING_CLK_8 = 0x2,
    -                ///  Running, CLK/64
    -                RUNNING_CLK_64 = 0x3,
    -                ///  Running, CLK/256
    -                RUNNING_CLK_256 = 0x4,
    -                ///  Running, CLK/1024
    -                RUNNING_CLK_1024 = 0x5,
    -                ///  Running, ExtClk Tn Falling Edge
    -                RUNNING_EXTCLK_TN_FALLING_EDGE = 0x6,
    -                ///  Running, ExtClk Tn Rising Edge
    -                RUNNING_EXTCLK_TN_RISING_EDGE = 0x7,
    -            };
    -
    -            ///  Timer/Counter, 8-bit
    -            pub const TC0 = extern struct {
    -                ///  Timer/Counter0 Interrupt Flag register
    -                TIFR0: mmio.Mmio(packed struct(u8) {
    -                    ///  Timer/Counter0 Overflow Flag
    -                    TOV0: u1,
    -                    ///  Timer/Counter0 Output Compare Flag 0A
    -                    OCF0A: u1,
    -                    ///  Timer/Counter0 Output Compare Flag 0B
    -                    OCF0B: u1,
    -                    padding: u5,
    -                }),
    -                reserved14: [13]u8,
    -                ///  General Timer/Counter Control Register
    -                GTCCR: mmio.Mmio(packed struct(u8) {
    -                    ///  Prescaler Reset Timer/Counter1 and Timer/Counter0
    -                    PSRSYNC: u1,
    -                    reserved7: u6,
    -                    ///  Timer/Counter Synchronization Mode
    -                    TSM: u1,
    -                }),
    -                ///  Timer/Counter Control Register A
    -                TCCR0A: mmio.Mmio(packed struct(u8) {
    -                    ///  Waveform Generation Mode
    -                    WGM0: u2,
    -                    reserved4: u2,
    -                    ///  Compare Output Mode, Fast PWm
    -                    COM0B: u2,
    -                    ///  Compare Output Mode, Phase Correct PWM Mode
    -                    COM0A: u2,
    -                }),
    -                ///  Timer/Counter Control Register B
    -                TCCR0B: mmio.Mmio(packed struct(u8) {
    -                    ///  Clock Select
    -                    CS0: packed union {
    -                        raw: u3,
    -                        value: CLK_SEL_3BIT_EXT,
    -                    },
    -                    WGM02: u1,
    -                    reserved6: u2,
    -                    ///  Force Output Compare B
    -                    FOC0B: u1,
    -                    ///  Force Output Compare A
    -                    FOC0A: u1,
    -                }),
    -                ///  Timer/Counter0
    -                TCNT0: u8,
    -                ///  Timer/Counter0 Output Compare Register
    -                OCR0A: u8,
    -                ///  Timer/Counter0 Output Compare Register
    -                OCR0B: u8,
    -                reserved57: [37]u8,
    -                ///  Timer/Counter0 Interrupt Mask Register
    -                TIMSK0: mmio.Mmio(packed struct(u8) {
    -                    ///  Timer/Counter0 Overflow Interrupt Enable
    -                    TOIE0: u1,
    -                    ///  Timer/Counter0 Output Compare Match A Interrupt Enable
    -                    OCIE0A: u1,
    -                    ///  Timer/Counter0 Output Compare Match B Interrupt Enable
    -                    OCIE0B: u1,
    -                    padding: u5,
    -                }),
    -            };
    -        };
    -
    -        ///  External Interrupts
    -        pub const EXINT = extern struct {
    -            ///  Interrupt Sense Control
    -            pub const INTERRUPT_SENSE_CONTROL = enum(u2) {
    -                ///  Low Level of INTX
    -                LOW_LEVEL_OF_INTX = 0x0,
    -                ///  Any Logical Change of INTX
    -                ANY_LOGICAL_CHANGE_OF_INTX = 0x1,
    -                ///  Falling Edge of INTX
    -                FALLING_EDGE_OF_INTX = 0x2,
    -                ///  Rising Edge of INTX
    -                RISING_EDGE_OF_INTX = 0x3,
    -            };
    -
    -            ///  Pin Change Interrupt Flag Register
    -            PCIFR: mmio.Mmio(packed struct(u8) {
    -                ///  Pin Change Interrupt Flags
    -                PCIF: u3,
    -                padding: u5,
    -            }),
    -            ///  External Interrupt Flag Register
    -            EIFR: mmio.Mmio(packed struct(u8) {
    -                ///  External Interrupt Flags
    -                INTF: u2,
    -                padding: u6,
    -            }),
    -            ///  External Interrupt Mask Register
    -            EIMSK: mmio.Mmio(packed struct(u8) {
    -                ///  External Interrupt Request 1 Enable
    -                INT: u2,
    -                padding: u6,
    -            }),
    -            reserved45: [42]u8,
    -            ///  Pin Change Interrupt Control Register
    -            PCICR: mmio.Mmio(packed struct(u8) {
    -                ///  Pin Change Interrupt Enables
    -                PCIE: u3,
    -                padding: u5,
    -            }),
    -            ///  External Interrupt Control Register
    -            EICRA: mmio.Mmio(packed struct(u8) {
    -                ///  External Interrupt Sense Control 0 Bits
    -                ISC0: packed union {
    -                    raw: u2,
    -                    value: INTERRUPT_SENSE_CONTROL,
    -                },
    -                ///  External Interrupt Sense Control 1 Bits
    -                ISC1: packed union {
    -                    raw: u2,
    -                    value: INTERRUPT_SENSE_CONTROL,
    -                },
    -                padding: u4,
    -            }),
    -            reserved48: [1]u8,
    -            ///  Pin Change Mask Register 0
    -            PCMSK0: mmio.Mmio(packed struct(u8) {
    -                ///  Pin Change Enable Masks
    -                PCINT: u8,
    -            }),
    -            ///  Pin Change Mask Register 1
    -            PCMSK1: mmio.Mmio(packed struct(u8) {
    -                ///  Pin Change Enable Masks
    -                PCINT: u7,
    -                padding: u1,
    -            }),
    -            ///  Pin Change Mask Register 2
    -            PCMSK2: mmio.Mmio(packed struct(u8) {
    -                ///  Pin Change Enable Masks
    -                PCINT: u8,
    -            }),
    -        };
    -
    -        ///  Serial Peripheral Interface
    -        pub const SPI = extern struct {
    -            pub const COMM_SCK_RATE_3BIT = enum(u2) {
    -                ///  fosc/2 or fosc/4
    -                FOSC_2_OR_FOSC_4 = 0x0,
    -                ///  fosc/8 or fosc/16
    -                FOSC_8_OR_FOSC_16 = 0x1,
    -                ///  fosc/32 or fosc/64
    -                FOSC_32_OR_FOSC_64 = 0x2,
    -                ///  fosc/64 or fosc/128
    -                FOSC_64_OR_FOSC_128 = 0x3,
    -            };
    -
    -            ///  SPI Control Register
    -            SPCR: mmio.Mmio(packed struct(u8) {
    -                ///  SPI Clock Rate Selects
    -                SPR: packed union {
    -                    raw: u2,
    -                    value: COMM_SCK_RATE_3BIT,
    -                },
    -                ///  Clock Phase
    -                CPHA: u1,
    -                ///  Clock polarity
    -                CPOL: u1,
    -                ///  Master/Slave Select
    -                MSTR: u1,
    -                ///  Data Order
    -                DORD: u1,
    -                ///  SPI Enable
    -                SPE: u1,
    -                ///  SPI Interrupt Enable
    -                SPIE: u1,
    -            }),
    -            ///  SPI Status Register
    -            SPSR: mmio.Mmio(packed struct(u8) {
    -                ///  Double SPI Speed Bit
    -                SPI2X: u1,
    -                reserved6: u5,
    -                ///  Write Collision Flag
    -                WCOL: u1,
    -                ///  SPI Interrupt Flag
    -                SPIF: u1,
    -            }),
    -            ///  SPI Data Register
    -            SPDR: u8,
    -        };
    -
    -        ///  Watchdog Timer
    -        pub const WDT = extern struct {
    -            pub const WDOG_TIMER_PRESCALE_4BITS = enum(u4) {
    -                ///  Oscillator Cycles 2K
    -                OSCILLATOR_CYCLES_2K = 0x0,
    -                ///  Oscillator Cycles 4K
    -                OSCILLATOR_CYCLES_4K = 0x1,
    -                ///  Oscillator Cycles 8K
    -                OSCILLATOR_CYCLES_8K = 0x2,
    -                ///  Oscillator Cycles 16K
    -                OSCILLATOR_CYCLES_16K = 0x3,
    -                ///  Oscillator Cycles 32K
    -                OSCILLATOR_CYCLES_32K = 0x4,
    -                ///  Oscillator Cycles 64K
    -                OSCILLATOR_CYCLES_64K = 0x5,
    -                ///  Oscillator Cycles 128K
    -                OSCILLATOR_CYCLES_128K = 0x6,
    -                ///  Oscillator Cycles 256K
    -                OSCILLATOR_CYCLES_256K = 0x7,
    -                ///  Oscillator Cycles 512K
    -                OSCILLATOR_CYCLES_512K = 0x8,
    -                ///  Oscillator Cycles 1024K
    -                OSCILLATOR_CYCLES_1024K = 0x9,
    -                _,
    -            };
    -
    -            ///  Watchdog Timer Control Register
    -            WDTCSR: mmio.Mmio(packed struct(u8) {
    -                ///  Watchdog Timer Prescaler Bits
    -                WDP_bit0: u1,
    -                ///  Watchdog Timer Prescaler Bits
    -                WDP_bit1: u1,
    -                ///  Watchdog Timer Prescaler Bits
    -                WDP_bit2: u1,
    -                ///  Watch Dog Enable
    -                WDE: u1,
    -                ///  Watchdog Change Enable
    -                WDCE: u1,
    -                ///  Watchdog Timer Prescaler Bits
    -                WDP_bit3: u1,
    -                ///  Watchdog Timeout Interrupt Enable
    -                WDIE: u1,
    -                ///  Watchdog Timeout Interrupt Flag
    -                WDIF: u1,
    -            }),
    -        };
    -
    -        ///  CPU Registers
    -        pub const CPU = extern struct {
    -            pub const CPU_CLK_PRESCALE_4_BITS_SMALL = enum(u4) {
    -                ///  1
    -                @"1" = 0x0,
    -                ///  2
    -                @"2" = 0x1,
    -                ///  4
    -                @"4" = 0x2,
    -                ///  8
    -                @"8" = 0x3,
    -                ///  16
    -                @"16" = 0x4,
    -                ///  32
    -                @"32" = 0x5,
    -                ///  64
    -                @"64" = 0x6,
    -                ///  128
    -                @"128" = 0x7,
    -                ///  256
    -                @"256" = 0x8,
    -                _,
    -            };
    -
    -            pub const CPU_SLEEP_MODE_3BITS2 = enum(u3) {
    -                ///  Idle
    -                IDLE = 0x0,
    -                ///  ADC Noise Reduction (If Available)
    -                ADC = 0x1,
    -                ///  Power Down
    -                PDOWN = 0x2,
    -                ///  Power Save
    -                PSAVE = 0x3,
    -                ///  Reserved
    -                VAL_0x04 = 0x4,
    -                ///  Reserved
    -                VAL_0x05 = 0x5,
    -                ///  Standby
    -                STDBY = 0x6,
    -                ///  Extended Standby
    -                ESTDBY = 0x7,
    -            };
    -
    -            ///  Oscillator Calibration Values
    -            pub const OSCCAL_VALUE_ADDRESSES = enum(u1) {
    -                ///  8.0 MHz
    -                @"8_0_MHz" = 0x0,
    -                _,
    -            };
    -
    -            ///  General Purpose I/O Register 0
    -            GPIOR0: u8,
    -            reserved12: [11]u8,
    -            ///  General Purpose I/O Register 1
    -            GPIOR1: u8,
    -            ///  General Purpose I/O Register 2
    -            GPIOR2: u8,
    -            reserved21: [7]u8,
    -            ///  Sleep Mode Control Register
    -            SMCR: mmio.Mmio(packed struct(u8) {
    -                ///  Sleep Enable
    -                SE: u1,
    -                ///  Sleep Mode Select Bits
    -                SM: packed union {
    -                    raw: u3,
    -                    value: CPU_SLEEP_MODE_3BITS2,
    -                },
    -                padding: u4,
    -            }),
    -            ///  MCU Status Register
    -            MCUSR: mmio.Mmio(packed struct(u8) {
    -                ///  Power-on reset flag
    -                PORF: u1,
    -                ///  External Reset Flag
    -                EXTRF: u1,
    -                ///  Brown-out Reset Flag
    -                BORF: u1,
    -                ///  Watchdog Reset Flag
    -                WDRF: u1,
    -                padding: u4,
    -            }),
    -            ///  MCU Control Register
    -            MCUCR: mmio.Mmio(packed struct(u8) {
    -                IVCE: u1,
    -                IVSEL: u1,
    -                reserved4: u2,
    -                PUD: u1,
    -                ///  BOD Sleep Enable
    -                BODSE: u1,
    -                ///  BOD Sleep
    -                BODS: u1,
    -                padding: u1,
    -            }),
    -            reserved25: [1]u8,
    -            ///  Store Program Memory Control and Status Register
    -            SPMCSR: mmio.Mmio(packed struct(u8) {
    -                ///  Store Program Memory
    -                SPMEN: u1,
    -                ///  Page Erase
    -                PGERS: u1,
    -                ///  Page Write
    -                PGWRT: u1,
    -                ///  Boot Lock Bit Set
    -                BLBSET: u1,
    -                ///  Read-While-Write section read enable
    -                RWWSRE: u1,
    -                ///  Signature Row Read
    -                SIGRD: u1,
    -                ///  Read-While-Write Section Busy
    -                RWWSB: u1,
    -                ///  SPM Interrupt Enable
    -                SPMIE: u1,
    -            }),
    -            reserved31: [5]u8,
    -            ///  Stack Pointer
    -            SP: u16,
    -            ///  Status Register
    -            SREG: mmio.Mmio(packed struct(u8) {
    -                ///  Carry Flag
    -                C: u1,
    -                ///  Zero Flag
    -                Z: u1,
    -                ///  Negative Flag
    -                N: u1,
    -                ///  Two's Complement Overflow Flag
    -                V: u1,
    -                ///  Sign Bit
    -                S: u1,
    -                ///  Half Carry Flag
    -                H: u1,
    -                ///  Bit Copy Storage
    -                T: u1,
    -                ///  Global Interrupt Enable
    -                I: u1,
    -            }),
    -            reserved35: [1]u8,
    -            ///  Clock Prescale Register
    -            CLKPR: mmio.Mmio(packed struct(u8) {
    -                ///  Clock Prescaler Select Bits
    -                CLKPS: packed union {
    -                    raw: u4,
    -                    value: CPU_CLK_PRESCALE_4_BITS_SMALL,
    -                },
    -                reserved7: u3,
    -                ///  Clock Prescaler Change Enable
    -                CLKPCE: u1,
    -            }),
    -            reserved38: [2]u8,
    -            ///  Power Reduction Register
    -            PRR: mmio.Mmio(packed struct(u8) {
    -                ///  Power Reduction ADC
    -                PRADC: u1,
    -                ///  Power Reduction USART
    -                PRUSART0: u1,
    -                ///  Power Reduction Serial Peripheral Interface
    -                PRSPI: u1,
    -                ///  Power Reduction Timer/Counter1
    -                PRTIM1: u1,
    -                reserved5: u1,
    -                ///  Power Reduction Timer/Counter0
    -                PRTIM0: u1,
    -                ///  Power Reduction Timer/Counter2
    -                PRTIM2: u1,
    -                ///  Power Reduction TWI
    -                PRTWI: u1,
    -            }),
    -            reserved40: [1]u8,
    -            ///  Oscillator Calibration Value
    -            OSCCAL: mmio.Mmio(packed struct(u8) {
    -                ///  Oscillator Calibration
    -                OSCCAL: u8,
    -            }),
    -        };
    -
    -        ///  EEPROM
    -        pub const EEPROM = extern struct {
    -            pub const EEP_MODE = enum(u2) {
    -                ///  Erase and Write in one operation
    -                ERASE_AND_WRITE_IN_ONE_OPERATION = 0x0,
    -                ///  Erase Only
    -                ERASE_ONLY = 0x1,
    -                ///  Write Only
    -                WRITE_ONLY = 0x2,
    -                _,
    -            };
    -
    -            ///  EEPROM Control Register
    -            EECR: mmio.Mmio(packed struct(u8) {
    -                ///  EEPROM Read Enable
    -                EERE: u1,
    -                ///  EEPROM Write Enable
    -                EEPE: u1,
    -                ///  EEPROM Master Write Enable
    -                EEMPE: u1,
    -                ///  EEPROM Ready Interrupt Enable
    -                EERIE: u1,
    -                ///  EEPROM Programming Mode Bits
    -                EEPM: packed union {
    -                    raw: u2,
    -                    value: EEP_MODE,
    -                },
    -                padding: u2,
    -            }),
    -            ///  EEPROM Data Register
    -            EEDR: u8,
    -            ///  EEPROM Address Register Bytes
    -            EEAR: u16,
    -        };
    -    };
    -};
    
    From d9cbc3654e2925dfdf2ccf4cd8179728dbc2d0bb Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20Quei=C3=9Fner?= 
    Date: Fri, 22 Sep 2023 09:02:51 +0200
    Subject: [PATCH 206/286] Microzig Generation 2 Build Interface  (#82)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    * Starts to rework build framework.
    * First building version.
    * Documents paths to supported devices.
    * Tiny fix for MicroZig.
    * Drops CI
    
    ---------
    
    Co-authored-by: Felix "xq" Queißner 
    ---
     .buildkite/pipeline.yml     |     5 -
     .github/workflows/build.yml |    22 -
     README.adoc                 |    12 +-
     build.zig                   |   382 +-
     build.zig.zon               |     8 +-
     src/boards.zig              |    69 -
     src/bootroms/w25q32jvssiq.S |    42 +
     src/chips.zig               |    25 -
     src/chips/RP2040.zig        | 18145 ----------------------------------
     9 files changed, 288 insertions(+), 18422 deletions(-)
     delete mode 100644 .buildkite/pipeline.yml
     delete mode 100644 .github/workflows/build.yml
     delete mode 100644 src/boards.zig
     create mode 100644 src/bootroms/w25q32jvssiq.S
     delete mode 100644 src/chips.zig
     delete mode 100644 src/chips/RP2040.zig
    
    diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml
    deleted file mode 100644
    index 4e00ec296..000000000
    --- a/.buildkite/pipeline.yml
    +++ /dev/null
    @@ -1,5 +0,0 @@
    -steps:
    -  - name: Build Examples
    -    command: zig build
    -  - name: Test
    -    command: zig build test
    diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
    deleted file mode 100644
    index 50ac1a489..000000000
    --- a/.github/workflows/build.yml
    +++ /dev/null
    @@ -1,22 +0,0 @@
    -name: Build
    -on:
    -  push:
    -
    -jobs:
    -  build:
    -    runs-on: ${{ matrix.os }}
    -    strategy:
    -      matrix:
    -        os: [
    -          ubuntu-latest,
    -          windows-latest,
    -          macos-latest,
    -        ]
    -    steps:
    -    - uses: actions/checkout@v2
    -    - uses: goto-bus-stop/setup-zig@v1.3.0
    -      with:
    -        version: 0.11.0
    -
    -    - name: Build and Unit Test
    -      run: zig build test -Doptimize=ReleaseSmall
    diff --git a/README.adoc b/README.adoc
    index c31cb3dd8..8b6358dae 100644
    --- a/README.adoc
    +++ b/README.adoc
    @@ -8,8 +8,10 @@ HAL and register definitions for the RP2040.
     
     == Supported devices ==
     
    -- Raspberry Pi Pico
    -- (*experimental*) Waveshare RP2040-Plus (4M Flash)
    -- (*experimental*) Waveshare RP2040-Plus (16M Flash)
    -- (*experimental*) Waveshare RP2040-ETH Mini
    -- (*experimental*) Waveshare RP2040-Matrix
    +- Raspberry Pi RP2040 (`chips.rp2040`)
    +- Raspberry Pi Pico (`boards.raspberry_pi.pico`)
    +- (*experimental*) Waveshare RP2040-Plus (4M Flash) (`boards.waveshare.rp2040_plus_4m`)
    +- (*experimental*) Waveshare RP2040-Plus (16M Flash) (`boards.waveshare.rp2040_plus_16m`)
    +- (*experimental*) Waveshare RP2040-ETH Mini (`boards.waveshare.rp2040_eth`)
    +- (*experimental*) Waveshare RP2040-Matrix (`boards.waveshare.rp2040_matrix`)
    +
    diff --git a/build.zig b/build.zig
    index 1d4dd3c58..cb3c13fcf 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -1,15 +1,101 @@
     const std = @import("std");
    -const Build = std.Build;
    -const comptimePrint = std.fmt.comptimePrint;
    +const microzig = @import("root").dependencies.imports.microzig; // HACK: Please import MicroZig always under the name `microzig`. Otherwise the RP2040 module will fail to be properly imported.
     
    -const microzig = @import("microzig");
    +fn root() []const u8 {
    +    return comptime (std.fs.path.dirname(@src().file) orelse ".");
    +}
    +const build_root = root();
     
    -pub const chips = @import("src/chips.zig");
    -pub const boards = @import("src/boards.zig");
    +////////////////////////////////////////
    +//      MicroZig Gen 2 Interface      //
    +////////////////////////////////////////
     
    -const build_root = root();
    +pub fn build(b: *std.Build) !void {
    +    //  Dummy func to make package manager happy
    +    _ = b;
    +}
    +
    +pub const chips = struct {
    +    // Note: This chip has no flash support defined and requires additional configuration!
    +    pub const rp2040 = .{
    +        .preferred_format = .{ .uf2 = .RP2040 },
    +        .chip = chip,
    +        .hal = hal,
    +        .board = null,
    +        .linker_script = linker_script,
    +    };
    +};
    +
    +pub const boards = struct {
    +    pub const raspberry_pi = struct {
    +        pub const pico = .{
    +            .preferred_format = .{ .uf2 = .RP2040 },
    +            .chip = chip,
    +            .hal = hal,
    +            .linker_script = linker_script,
    +            .board = .{
    +                .name = "RaspberryPi Pico",
    +                .source_file = .{ .cwd_relative = build_root ++ "/src/boards/raspberry_pi_pico.zig" },
    +                .url = "https://www.raspberrypi.com/products/raspberry-pi-pico/",
    +            },
    +            .configure = rp2040_configure(.w25q080),
    +        };
    +    };
     
    -const linkerscript_path = build_root ++ "/rp2040.ld";
    +    pub const waveshare = struct {
    +        pub const rp2040_plus_4m = .{
    +            .preferred_format = .{ .uf2 = .RP2040 },
    +            .chip = chip,
    +            .hal = hal,
    +            .linker_script = linker_script,
    +            .board = .{
    +                .name = "Waveshare RP2040-Plus (4M Flash)",
    +                .source_file = .{ .cwd_relative = build_root ++ "/src/boards/waveshare_rp2040_plus_4m.zig" },
    +                .url = "https://www.waveshare.com/rp2040-plus.htm",
    +            },
    +            .configure = rp2040_configure(.w25q080),
    +        };
    +
    +        pub const rp2040_plus_16m = .{
    +            .preferred_format = .{ .uf2 = .RP2040 },
    +            .chip = chip,
    +            .hal = hal,
    +            .linker_script = linker_script,
    +            .board = .{
    +                .name = "Waveshare RP2040-Plus (16M Flash)",
    +                .source_file = .{ .cwd_relative = build_root ++ "/src/boards/waveshare_rp2040_plus_16m.zig" },
    +                .url = "https://www.waveshare.com/rp2040-plus.htm",
    +            },
    +            .configure = rp2040_configure(.w25q080),
    +        };
    +
    +        pub const rp2040_eth = .{
    +            .preferred_format = .{ .uf2 = .RP2040 },
    +            .chip = chip,
    +            .hal = hal,
    +            .linker_script = linker_script,
    +            .board = .{
    +                .name = "Waveshare RP2040-ETH Mini",
    +                .source_file = .{ .cwd_relative = build_root ++ "/src/boards/waveshare_rp2040_eth.zig" },
    +                .url = "https://www.waveshare.com/rp2040-eth.htm",
    +            },
    +            .configure = rp2040_configure(.w25q080),
    +        };
    +
    +        pub const rp2040_matrix = .{
    +            .preferred_format = .{ .uf2 = .RP2040 },
    +            .chip = chip,
    +            .hal = hal,
    +            .linker_script = linker_script,
    +            .board = .{
    +                .name = "Waveshare RP2040-Matrix",
    +                .source_file = .{ .cwd_relative = build_root ++ "/src/boards/waveshare_rp2040_matrix.zig" },
    +                .url = "https://www.waveshare.com/rp2040-matrix.htm",
    +            },
    +            .configure = rp2040_configure(.w25q080),
    +        };
    +    };
    +};
     
     pub const BootROM = union(enum) {
         artifact: *std.build.CompileStep, // provide a custom startup code
    @@ -26,24 +112,54 @@ pub const BootROM = union(enum) {
         legacy,
     };
     
    -pub const PicoExecutableOptions = struct {
    -    name: []const u8,
    -    source_file: std.Build.LazyPath,
    -    optimize: std.builtin.OptimizeMode = .Debug,
    +const linker_script = .{
    +    .source_file = .{ .cwd_relative = build_root ++ "/rp2040.ld" },
    +};
     
    -    board: boards.Board = boards.raspberry_pi_pico,
    +const hal = .{
    +    .source_file = .{ .cwd_relative = build_root ++ "/src/hal.zig" },
    +};
     
    -    bootrom: ?BootROM = null,
    +const chip = .{
    +    .name = "RP2040",
    +    .url = "https://www.raspberrypi.com/products/rp2040/",
    +    .cpu = .cortex_m0plus,
    +    .register_definition = .{
    +        .json = .{ .cwd_relative = build_root ++ "/src/chips/RP2040.json" },
    +    },
    +    .memory_regions = &.{
    +        .{ .kind = .flash, .offset = 0x10000100, .length = (2048 * 1024) - 256 },
    +        .{ .kind = .flash, .offset = 0x10000000, .length = 256 },
    +        .{ .kind = .ram, .offset = 0x20000000, .length = 256 * 1024 },
    +    },
     };
     
    -pub const addPiPicoExecutable = addExecutable; // Deprecated, use addExecutable!
    +/// Returns a configuration function that will add the provided `BootROM` to the firmware.
    +pub fn rp2040_configure(comptime bootrom: BootROM) *const fn (host_build: *std.Build, *microzig.Firmware) void {
    +    const T = struct {
    +        fn configure(host_build: *std.Build, fw: *microzig.Firmware) void {
    +            const bootrom_file = getBootrom(host_build, bootrom);
    +
    +            // HACK: Inject the file as a dependency to MicroZig.board
    +            fw.modules.board.?.dependencies.put(
    +                "bootloader",
    +                host_build.createModule(.{
    +                    .source_file = bootrom_file.bin,
    +                }),
    +            ) catch @panic("oom");
    +            bootrom_file.bin.addStepDependencies(&fw.artifact.step);
    +        }
    +    };
    +
    +    return T.configure;
    +}
     
     pub const Stage2Bootloader = struct {
         bin: std.Build.LazyPath,
         elf: ?std.Build.LazyPath,
     };
     
    -pub fn getBootrom(b: *Build, rom: BootROM) Stage2Bootloader {
    +pub fn getBootrom(b: *std.Build, rom: BootROM) Stage2Bootloader {
         const rom_exe = switch (rom) {
             .artifact => |artifact| artifact,
             .blob => |blob| return Stage2Bootloader{
    @@ -52,7 +168,7 @@ pub fn getBootrom(b: *Build, rom: BootROM) Stage2Bootloader {
             },
     
             else => blk: {
    -            var target = chips.rp2040.cpu.target;
    +            var target = @as(microzig.CpuModel, chip.cpu).getDescriptor().target;
                 target.abi = .eabi;
     
                 const rom_path = b.pathFromRoot(b.fmt("{s}/src/bootroms/{s}.S", .{ build_root, @tagName(rom) }));
    @@ -84,134 +200,106 @@ pub fn getBootrom(b: *Build, rom: BootROM) Stage2Bootloader {
         };
     }
     
    -pub fn addExecutable(
    -    b: *Build,
    -    opts: PicoExecutableOptions,
    -) *microzig.EmbeddedExecutable {
    -    var exe = microzig.addEmbeddedExecutable(b, .{
    -        .name = opts.name,
    -        .source_file = opts.source_file,
    -        .backing = .{ .board = opts.board.inner },
    -        .optimize = opts.optimize,
    -        .linkerscript_source_file = .{ .path = linkerscript_path },
    -    });
    -
    -    const i: *std.Build.CompileStep = exe.inner;
    -
    -    const bootrom_file = getBootrom(b, opts.bootrom orelse opts.board.bootrom);
    -
    -    // HACK: Inject the file as a dependency to MicroZig.board
    -    i.modules.get("microzig").?.dependencies.get("board").?.dependencies.put(
    -        "bootloader",
    -        b.createModule(.{
    -            .source_file = bootrom_file.bin,
    -        }),
    -    ) catch @panic("oom");
    -    bootrom_file.bin.addStepDependencies(&i.step);
    -
    -    return exe;
    -}
    -
    -// this build script is mostly for testing and verification of this
    -// package. In an attempt to modularize -- designing for a case where a
    -// project requires multiple HALs, it accepts microzig as a param
    -pub fn build(b: *Build) !void {
    -    const optimize = b.standardOptimizeOption(.{});
    -
    -    const args_dep = b.dependency("args", .{});
    -    const args_mod = args_dep.module("args");
    -
    -    var examples = Examples.init(b, optimize);
    -    examples.install(b);
    -
    -    const pio_tests = b.addTest(.{
    -        .root_source_file = .{
    -            .path = "src/hal.zig",
    -        },
    -        .optimize = optimize,
    -    });
    -    pio_tests.addIncludePath(.{ .path = "src/hal/pio/assembler" });
    -
    -    const test_step = b.step("test", "run unit tests");
    -    test_step.dependOn(&b.addRunArtifact(pio_tests).step);
    -
    -    {
    -        const flash_tool = b.addExecutable(.{
    -            .name = "rp2040-flash",
    -            .optimize = .Debug,
    -            .target = .{},
    -            .root_source_file = .{ .path = "tools/rp2040-flash.zig" },
    -        });
    -        flash_tool.addModule("args", args_mod);
    -
    -        b.installArtifact(flash_tool);
    -    }
    -
    -    // Install all bootroms for debugging and CI
    -    inline for (comptime std.enums.values(std.meta.Tag(BootROM))) |rom| {
    -        if (rom == .artifact or rom == .blob) {
    -            continue;
    -        }
    -
    -        if (rom == .is25lp080) {
    -            // TODO: https://github.com/ZigEmbeddedGroup/raspberrypi-rp2040/issues/79
    -            //  is25lp080.o:(text+0x16): has non-ABS relocation R_ARM_THM_CALL against symbol 'read_flash_sreg'
    -            continue;
    -        }
    -
    -        const files = getBootrom(b, rom);
    -        if (files.elf) |elf| {
    -            b.getInstallStep().dependOn(
    -                &b.addInstallFileWithDir(elf, .{ .custom = "stage2" }, b.fmt("{s}.elf", .{@tagName(rom)})).step,
    -            );
    -        }
    -        b.getInstallStep().dependOn(
    -            &b.addInstallFileWithDir(files.bin, .{ .custom = "stage2" }, b.fmt("{s}.bin", .{@tagName(rom)})).step,
    -        );
    -    }
    -}
    -
    -fn root() []const u8 {
    -    return comptime (std.fs.path.dirname(@src().file) orelse ".") ++ "/";
    -}
    -
    -pub const Examples = struct {
    -    adc: *microzig.EmbeddedExecutable,
    -    blinky: *microzig.EmbeddedExecutable,
    -    blinky_core1: *microzig.EmbeddedExecutable,
    -    gpio_clk: *microzig.EmbeddedExecutable,
    -    i2c_bus_scan: *microzig.EmbeddedExecutable,
    -    pwm: *microzig.EmbeddedExecutable,
    -    spi_master: *microzig.EmbeddedExecutable,
    -    uart: *microzig.EmbeddedExecutable,
    -    squarewave: *microzig.EmbeddedExecutable,
    -    //uart_pins: microzig.EmbeddedExecutable,
    -    flash_program: *microzig.EmbeddedExecutable,
    -    usb_device: *microzig.EmbeddedExecutable,
    -    usb_hid: *microzig.EmbeddedExecutable,
    -    ws2812: *microzig.EmbeddedExecutable,
    -    random: *microzig.EmbeddedExecutable,
    -
    -    pub fn init(b: *Build, optimize: std.builtin.OptimizeMode) Examples {
    -        var ret: Examples = undefined;
    -        inline for (@typeInfo(Examples).Struct.fields) |field| {
    -            const path = comptime root() ++ "examples/" ++ field.name ++ ".zig";
    -
    -            @field(ret, field.name) = addExecutable(b, .{
    -                .name = field.name,
    -                .source_file = .{ .path = path },
    -                .optimize = optimize,
    -            });
    -        }
    -
    -        return ret;
    -    }
    -
    -    pub fn install(examples: *Examples, b: *Build) void {
    -        inline for (@typeInfo(Examples).Struct.fields) |field| {
    -            b.getInstallStep().dependOn(
    -                &b.addInstallFileWithDir(@field(examples, field.name).inner.getEmittedBin(), .{ .custom = "firmware" }, field.name ++ ".elf").step,
    -            );
    -        }
    -    }
    -};
    +/////////////////////////////////////////
    +//      MicroZig Legacy Interface      //
    +/////////////////////////////////////////
    +
    +// // this build script is mostly for testing and verification of this
    +// // package. In an attempt to modularize -- designing for a case where a
    +// // project requires multiple HALs, it accepts microzig as a param
    +// pub fn build(b: *Build) !void {
    +//     const optimize = b.standardOptimizeOption(.{});
    +
    +//     const args_dep = b.dependency("args", .{});
    +//     const args_mod = args_dep.module("args");
    +
    +//     var examples = Examples.init(b, optimize);
    +//     examples.install(b);
    +
    +//     const pio_tests = b.addTest(.{
    +//         .root_source_file = .{
    +//             .path = "src/hal.zig",
    +//         },
    +//         .optimize = optimize,
    +//     });
    +//     pio_tests.addIncludePath(.{ .path = "src/hal/pio/assembler" });
    +
    +//     const test_step = b.step("test", "run unit tests");
    +//     test_step.dependOn(&b.addRunArtifact(pio_tests).step);
    +
    +//     {
    +//         const flash_tool = b.addExecutable(.{
    +//             .name = "rp2040-flash",
    +//             .optimize = .Debug,
    +//             .target = .{},
    +//             .root_source_file = .{ .path = "tools/rp2040-flash.zig" },
    +//         });
    +//         flash_tool.addModule("args", args_mod);
    +
    +//         b.installArtifact(flash_tool);
    +//     }
    +
    +//     // Install all bootroms for debugging and CI
    +//     inline for (comptime std.enums.values(std.meta.Tag(BootROM))) |rom| {
    +//         if (rom == .artifact or rom == .blob) {
    +//             continue;
    +//         }
    +
    +//         if (rom == .is25lp080) {
    +//             // TODO: https://github.com/ZigEmbeddedGroup/raspberrypi-rp2040/issues/79
    +//             //  is25lp080.o:(text+0x16): has non-ABS relocation R_ARM_THM_CALL against symbol 'read_flash_sreg'
    +//             continue;
    +//         }
    +
    +//         const files = getBootrom(b, rom);
    +//         if (files.elf) |elf| {
    +//             b.getInstallStep().dependOn(
    +//                 &b.addInstallFileWithDir(elf, .{ .custom = "stage2" }, b.fmt("{s}.elf", .{@tagName(rom)})).step,
    +//             );
    +//         }
    +//         b.getInstallStep().dependOn(
    +//             &b.addInstallFileWithDir(files.bin, .{ .custom = "stage2" }, b.fmt("{s}.bin", .{@tagName(rom)})).step,
    +//         );
    +//     }
    +// }
    +
    +// pub const Examples = struct {
    +//     adc: *microzig.EmbeddedExecutable,
    +//     blinky: *microzig.EmbeddedExecutable,
    +//     blinky_core1: *microzig.EmbeddedExecutable,
    +//     gpio_clk: *microzig.EmbeddedExecutable,
    +//     i2c_bus_scan: *microzig.EmbeddedExecutable,
    +//     pwm: *microzig.EmbeddedExecutable,
    +//     spi_master: *microzig.EmbeddedExecutable,
    +//     uart: *microzig.EmbeddedExecutable,
    +//     squarewave: *microzig.EmbeddedExecutable,
    +//     //uart_pins: microzig.EmbeddedExecutable,
    +//     flash_program: *microzig.EmbeddedExecutable,
    +//     usb_device: *microzig.EmbeddedExecutable,
    +//     usb_hid: *microzig.EmbeddedExecutable,
    +//     ws2812: *microzig.EmbeddedExecutable,
    +//     random: *microzig.EmbeddedExecutable,
    +
    +//     pub fn init(b: *Build, optimize: std.builtin.OptimizeMode) Examples {
    +//         var ret: Examples = undefined;
    +//         inline for (@typeInfo(Examples).Struct.fields) |field| {
    +//             const path = comptime root() ++ "examples/" ++ field.name ++ ".zig";
    +
    +//             @field(ret, field.name) = addExecutable(b, .{
    +//                 .name = field.name,
    +//                 .source_file = .{ .path = path },
    +//                 .optimize = optimize,
    +//             });
    +//         }
    +
    +//         return ret;
    +//     }
    +
    +//     pub fn install(examples: *Examples, b: *Build) void {
    +//         inline for (@typeInfo(Examples).Struct.fields) |field| {
    +//             b.getInstallStep().dependOn(
    +//                 &b.addInstallFileWithDir(@field(examples, field.name).inner.getEmittedBin(), .{ .custom = "firmware" }, field.name ++ ".elf").step,
    +//             );
    +//         }
    +//     }
    +// };
    diff --git a/build.zig.zon b/build.zig.zon
    index cfb4ad4ce..9fb27651e 100644
    --- a/build.zig.zon
    +++ b/build.zig.zon
    @@ -2,10 +2,10 @@
         .name = "rp2040",
         .version = "0.0.0",
         .dependencies = .{
    -        .microzig = .{
    -            .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/0b3be0a4cc7e6d45714cb09961efc771e364723c.tar.gz",
    -            .hash = "1220ada6d01db7b3d0aa8642df89b1af9ee71b681438249e9a7efb2275fc4cf32152",
    -        },
    +        // .microzig = .{
    +        //     .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/0b3be0a4cc7e6d45714cb09961efc771e364723c.tar.gz",
    +        //     .hash = "1220ada6d01db7b3d0aa8642df89b1af9ee71b681438249e9a7efb2275fc4cf32152",
    +        // },
             .args = .{
                 .url = "https://github.com/MasterQ32/zig-args/archive/91d1e89fb89a4d01dec7c9aec95b0a324080ebcc.tar.gz",
                 .hash = "12203d04cafc97f952d74cdb077e74c0ab3414f9f6b5fbd159112c62bfa584a0dbed",
    diff --git a/src/boards.zig b/src/boards.zig
    deleted file mode 100644
    index 8f68040ea..000000000
    --- a/src/boards.zig
    +++ /dev/null
    @@ -1,69 +0,0 @@
    -const std = @import("std");
    -const microzig = @import("microzig");
    -const rp2040 = @import("../build.zig");
    -const chips = @import("chips.zig");
    -
    -fn root_dir() []const u8 {
    -    return std.fs.path.dirname(@src().file) orelse ".";
    -}
    -
    -fn board_path(comptime path: []const u8) std.Build.LazyPath {
    -    return .{
    -        .path = std.fmt.comptimePrint("{s}/boards/{s}", .{ root_dir(), path }),
    -    };
    -}
    -
    -pub const Board = struct {
    -    inner: microzig.Board,
    -    bootrom: rp2040.BootROM,
    -};
    -
    -// https://www.raspberrypi.com/products/raspberry-pi-pico/
    -pub const raspberry_pi_pico = Board{
    -    .inner = .{
    -        .name = "Raspberry Pi Pico",
    -        .source = board_path("raspberry_pi_pico.zig"),
    -        .chip = chips.rp2040,
    -    },
    -    .bootrom = .w25q080,
    -};
    -
    -// https://www.waveshare.com/rp2040-plus.htm
    -pub const waveshare_rp2040_plus_4m = Board{
    -    .inner = .{
    -        .name = "Waveshare RP2040-Plus (4M Flash)",
    -        .source = board_path("waveshare_rp2040_plus_4m.zig"),
    -        .chip = chips.rp2040,
    -    },
    -    .bootrom = .w25q080,
    -};
    -
    -// https://www.waveshare.com/rp2040-plus.htm
    -pub const waveshare_rp2040_plus_16m = Board{
    -    .inner = .{
    -        .name = "Waveshare RP2040-Plus (16M Flash)",
    -        .source = board_path("waveshare_rp2040_plus_16m.zig"),
    -        .chip = chips.rp2040,
    -    },
    -    .bootrom = .w25q080,
    -};
    -
    -// https://www.waveshare.com/rp2040-eth.htm
    -pub const waveshare_rp2040_eth = Board{
    -    .inner = .{
    -        .name = "Waveshare RP2040-ETH Mini",
    -        .source = board_path("waveshare_rp2040_eth.zig"),
    -        .chip = chips.rp2040,
    -    },
    -    .bootrom = .w25q080,
    -};
    -
    -// https://www.waveshare.com/rp2040-matrix.htm
    -pub const waveshare_rp2040_matrix = Board{
    -    .inner = .{
    -        .name = "Waveshare RP2040-Matrix",
    -        .source = board_path("waveshare_rp2040_matrix.zig"),
    -        .chip = chips.rp2040,
    -    },
    -    .bootrom = .w25q080,
    -};
    diff --git a/src/bootroms/w25q32jvssiq.S b/src/bootroms/w25q32jvssiq.S
    new file mode 100644
    index 000000000..a122d72dd
    --- /dev/null
    +++ b/src/bootroms/w25q32jvssiq.S
    @@ -0,0 +1,42 @@
    +
    +// This blob was read from the original RP2040-ETH board
    +// and is assumed to be working with the W25Q32JVSSIQ flash.
    +
    +.text
    +.global _stage2_boot
    +_stage2_boot:
    +
    +// 00000000  00 b5 32 4b 21 20 58 60  98 68 02 21 88 43 98 60  |..2K! X`.h.!.C.`|
    +// 00000010  d8 60 18 61 58 61 2e 4b  00 21 99 60 02 21 59 61  |.`.aXa.K.!.`.!Ya|
    +// 00000020  01 21 f0 22 99 50 2b 49  19 60 01 21 99 60 35 20  |.!.".P+I.`.!.`5 |
    +// 00000030  00 f0 44 f8 02 22 90 42  14 d0 06 21 19 66 00 f0  |..D..".B...!.f..|
    +// 00000040  34 f8 19 6e 01 21 19 66  00 20 18 66 1a 66 00 f0  |4..n.!.f. .f.f..|
    +// 00000050  2c f8 19 6e 19 6e 19 6e  05 20 00 f0 2f f8 01 21  |,..n.n.n. ../..!|
    +// 00000060  08 42 f9 d1 00 21 99 60  1b 49 19 60 00 21 59 60  |.B...!.`.I.`.!Y`|
    +// 00000070  1a 49 1b 48 01 60 01 21  99 60 eb 21 19 66 a0 21  |.I.H.`.!.`.!.f.!|
    +// 00000080  19 66 00 f0 12 f8 00 21  99 60 16 49 14 48 01 60  |.f.....!.`.I.H.`|
    +// 00000090  01 21 99 60 01 bc 00 28  00 d0 00 47 12 48 13 49  |.!.`...(...G.H.I|
    +// 000000a0  08 60 03 c8 80 f3 08 88  08 47 03 b5 99 6a 04 20  |.`.......G...j. |
    +// 000000b0  01 42 fb d0 01 20 01 42  f8 d1 03 bd 02 b5 18 66  |.B... .B.......f|
    +// 000000c0  18 66 ff f7 f2 ff 18 6e  18 6e 02 bd 00 00 02 40  |.f.....n.n.....@|
    +// 000000d0  00 00 00 18 00 00 07 00  00 03 5f 00 21 22 00 00  |.........._.!"..|
    +// 000000e0  f4 00 00 18 22 20 00 a0  00 01 00 10 08 ed 00 e0  |...." ..........|
    +// 000000f0  00 00 00 00 00 00 00 00  00 00 00 00 74 b2 4e 7a  |............t.Nz|
    +
    +.byte 0x00, 0xb5, 0x32, 0x4b, 0x21, 0x20, 0x58, 0x60,   0x98, 0x68, 0x02, 0x21, 0x88, 0x43, 0x98, 0x60
    +.byte 0xd8, 0x60, 0x18, 0x61, 0x58, 0x61, 0x2e, 0x4b,   0x00, 0x21, 0x99, 0x60, 0x02, 0x21, 0x59, 0x61
    +.byte 0x01, 0x21, 0xf0, 0x22, 0x99, 0x50, 0x2b, 0x49,   0x19, 0x60, 0x01, 0x21, 0x99, 0x60, 0x35, 0x20
    +.byte 0x00, 0xf0, 0x44, 0xf8, 0x02, 0x22, 0x90, 0x42,   0x14, 0xd0, 0x06, 0x21, 0x19, 0x66, 0x00, 0xf0
    +.byte 0x34, 0xf8, 0x19, 0x6e, 0x01, 0x21, 0x19, 0x66,   0x00, 0x20, 0x18, 0x66, 0x1a, 0x66, 0x00, 0xf0
    +.byte 0x2c, 0xf8, 0x19, 0x6e, 0x19, 0x6e, 0x19, 0x6e,   0x05, 0x20, 0x00, 0xf0, 0x2f, 0xf8, 0x01, 0x21
    +.byte 0x08, 0x42, 0xf9, 0xd1, 0x00, 0x21, 0x99, 0x60,   0x1b, 0x49, 0x19, 0x60, 0x00, 0x21, 0x59, 0x60
    +.byte 0x1a, 0x49, 0x1b, 0x48, 0x01, 0x60, 0x01, 0x21,   0x99, 0x60, 0xeb, 0x21, 0x19, 0x66, 0xa0, 0x21
    +.byte 0x19, 0x66, 0x00, 0xf0, 0x12, 0xf8, 0x00, 0x21,   0x99, 0x60, 0x16, 0x49, 0x14, 0x48, 0x01, 0x60
    +.byte 0x01, 0x21, 0x99, 0x60, 0x01, 0xbc, 0x00, 0x28,   0x00, 0xd0, 0x00, 0x47, 0x12, 0x48, 0x13, 0x49
    +.byte 0x08, 0x60, 0x03, 0xc8, 0x80, 0xf3, 0x08, 0x88,   0x08, 0x47, 0x03, 0xb5, 0x99, 0x6a, 0x04, 0x20
    +.byte 0x01, 0x42, 0xfb, 0xd0, 0x01, 0x20, 0x01, 0x42,   0xf8, 0xd1, 0x03, 0xbd, 0x02, 0xb5, 0x18, 0x66
    +.byte 0x18, 0x66, 0xff, 0xf7, 0xf2, 0xff, 0x18, 0x6e,   0x18, 0x6e, 0x02, 0xbd, 0x00, 0x00, 0x02, 0x40
    +.byte 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x07, 0x00,   0x00, 0x03, 0x5f, 0x00, 0x21, 0x22, 0x00, 0x00
    +.byte 0xf4, 0x00, 0x00, 0x18, 0x22, 0x20, 0x00, 0xa0,   0x00, 0x01, 0x00, 0x10, 0x08, 0xed, 0x00, 0xe0
    +.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   0x00, 0x00, 0x00, 0x00, 0x74, 0xb2, 0x4e, 0x7a
    +
    diff --git a/src/chips.zig b/src/chips.zig
    deleted file mode 100644
    index 48b20e033..000000000
    --- a/src/chips.zig
    +++ /dev/null
    @@ -1,25 +0,0 @@
    -const std = @import("std");
    -const microzig = @import("microzig");
    -
    -fn root_dir() []const u8 {
    -    return std.fs.path.dirname(@src().file) orelse ".";
    -}
    -
    -const chip_path = std.fmt.comptimePrint("{s}/chips/RP2040.zig", .{root_dir()});
    -const hal_path = std.fmt.comptimePrint("{s}/hal.zig", .{root_dir()});
    -const json_register_schema_path = std.fmt.comptimePrint("{s}/chips/RP2040.json", .{root_dir()});
    -
    -pub const rp2040 = microzig.Chip{
    -    .name = "RP2040",
    -    .source = .{ .path = chip_path },
    -    .hal = .{ .path = hal_path },
    -    .cpu = microzig.cpus.cortex_m0plus,
    -    .memory_regions = &.{
    -        .{ .kind = .flash, .offset = 0x10000100, .length = (2048 * 1024) - 256 },
    -        .{ .kind = .flash, .offset = 0x10000000, .length = 256 },
    -        .{ .kind = .ram, .offset = 0x20000000, .length = 256 * 1024 },
    -    },
    -    .json_register_schema = .{
    -        .path = json_register_schema_path,
    -    },
    -};
    diff --git a/src/chips/RP2040.zig b/src/chips/RP2040.zig
    deleted file mode 100644
    index a11f25564..000000000
    --- a/src/chips/RP2040.zig
    +++ /dev/null
    @@ -1,18145 +0,0 @@
    -const micro = @import("microzig");
    -const mmio = micro.mmio;
    -
    -pub const devices = struct {
    -    pub const RP2040 = struct {
    -        pub const properties = struct {
    -            pub const @"cpu.nvic_prio_bits" = "2";
    -            pub const @"cpu.mpu" = "true";
    -            pub const @"cpu.fpu" = "false";
    -            pub const @"cpu.num_interrupts" = "26";
    -            pub const @"cpu.vtor" = "1";
    -            pub const @"cpu.revision" = "r0p1";
    -            pub const @"cpu.vendor_systick_config" = "false";
    -            pub const license =
    -                \\
    -                \\    Copyright (c) 2020 Raspberry Pi (Trading) Ltd. \n
    -                \\    \n
    -                \\    SPDX-License-Identifier: BSD-3-Clause
    -                \\  
    -            ;
    -            pub const @"cpu.name" = "CM0PLUS";
    -            pub const @"cpu.endian" = "little";
    -        };
    -
    -        pub const VectorTable = extern struct {
    -            const Handler = micro.interrupt.Handler;
    -            const unhandled = micro.interrupt.unhandled;
    -
    -            initial_stack_pointer: u32,
    -            Reset: Handler = unhandled,
    -            NMI: Handler = unhandled,
    -            HardFault: Handler = unhandled,
    -            reserved2: [7]u32 = undefined,
    -            SVCall: Handler = unhandled,
    -            reserved10: [2]u32 = undefined,
    -            PendSV: Handler = unhandled,
    -            SysTick: Handler = unhandled,
    -            TIMER_IRQ_0: Handler = unhandled,
    -            TIMER_IRQ_1: Handler = unhandled,
    -            TIMER_IRQ_2: Handler = unhandled,
    -            TIMER_IRQ_3: Handler = unhandled,
    -            PWM_IRQ_WRAP: Handler = unhandled,
    -            USBCTRL_IRQ: Handler = unhandled,
    -            XIP_IRQ: Handler = unhandled,
    -            PIO0_IRQ_0: Handler = unhandled,
    -            PIO0_IRQ_1: Handler = unhandled,
    -            PIO1_IRQ_0: Handler = unhandled,
    -            PIO1_IRQ_1: Handler = unhandled,
    -            DMA_IRQ_0: Handler = unhandled,
    -            DMA_IRQ_1: Handler = unhandled,
    -            IO_IRQ_BANK0: Handler = unhandled,
    -            IO_IRQ_QSPI: Handler = unhandled,
    -            SIO_IRQ_PROC0: Handler = unhandled,
    -            SIO_IRQ_PROC1: Handler = unhandled,
    -            CLOCKS_IRQ: Handler = unhandled,
    -            SPI0_IRQ: Handler = unhandled,
    -            SPI1_IRQ: Handler = unhandled,
    -            UART0_IRQ: Handler = unhandled,
    -            UART1_IRQ: Handler = unhandled,
    -            ADC_IRQ_FIFO: Handler = unhandled,
    -            I2C0_IRQ: Handler = unhandled,
    -            I2C1_IRQ: Handler = unhandled,
    -            RTC_IRQ: Handler = unhandled,
    -        };
    -
    -        pub const peripherals = struct {
    -            ///  System Control Space
    -            pub const MPU = @as(*volatile types.peripherals.SCS, @ptrFromInt(0xd90));
    -            ///  QSPI flash execute-in-place block
    -            pub const XIP_CTRL = @as(*volatile types.peripherals.XIP_CTRL, @ptrFromInt(0x14000000));
    -            ///  DW_apb_ssi has the following features:
    -            ///  * APB interface – Allows for easy integration into a DesignWare Synthesizable Components for AMBA 2 implementation.
    -            ///  * APB3 and APB4 protocol support.
    -            ///  * Scalable APB data bus width – Supports APB data bus widths of 8, 16, and 32 bits.
    -            ///  * Serial-master or serial-slave operation – Enables serial communication with serial-master or serial-slave peripheral devices.
    -            ///  * Programmable Dual/Quad/Octal SPI support in Master Mode.
    -            ///  * Dual Data Rate (DDR) and Read Data Strobe (RDS) Support - Enables the DW_apb_ssi master to perform operations with the device in DDR and RDS modes when working in Dual/Quad/Octal mode of operation.
    -            ///  * Data Mask Support - Enables the DW_apb_ssi to selectively update the bytes in the device. This feature is applicable only in enhanced SPI modes.
    -            ///  * eXecute-In-Place (XIP) support - Enables the DW_apb_ssi master to behave as a memory mapped I/O and fetches the data from the device based on the APB read request. This feature is applicable only in enhanced SPI modes.
    -            ///  * DMA Controller Interface – Enables the DW_apb_ssi to interface to a DMA controller over the bus using a handshaking interface for transfer requests.
    -            ///  * Independent masking of interrupts – Master collision, transmit FIFO overflow, transmit FIFO empty, receive FIFO full, receive FIFO underflow, and receive FIFO overflow interrupts can all be masked independently.
    -            ///  * Multi-master contention detection – Informs the processor of multiple serial-master accesses on the serial bus.
    -            ///  * Bypass of meta-stability flip-flops for synchronous clocks – When the APB clock (pclk) and the DW_apb_ssi serial clock (ssi_clk) are synchronous, meta-stable flip-flops are not used when transferring control signals across these clock domains.
    -            ///  * Programmable delay on the sample time of the received serial data bit (rxd); enables programmable control of routing delays resulting in higher serial data-bit rates.
    -            ///  * Programmable features:
    -            ///  - Serial interface operation – Choice of Motorola SPI, Texas Instruments Synchronous Serial Protocol or National Semiconductor Microwire.
    -            ///  - Clock bit-rate – Dynamic control of the serial bit rate of the data transfer; used in only serial-master mode of operation.
    -            ///  - Data Item size (4 to 32 bits) – Item size of each data transfer under the control of the programmer.
    -            ///  * Configured features:
    -            ///  - FIFO depth – 16 words deep. The FIFO width is fixed at 32 bits.
    -            ///  - 1 slave select output.
    -            ///  - Hardware slave-select – Dedicated hardware slave-select line.
    -            ///  - Combined interrupt line - one combined interrupt line from the DW_apb_ssi to the interrupt controller.
    -            ///  - Interrupt polarity – active high interrupt lines.
    -            ///  - Serial clock polarity – low serial-clock polarity directly after reset.
    -            ///  - Serial clock phase – capture on first edge of serial-clock directly after reset.
    -            pub const XIP_SSI = @as(*volatile types.peripherals.XIP_SSI, @ptrFromInt(0x18000000));
    -            pub const SYSINFO = @as(*volatile types.peripherals.SYSINFO, @ptrFromInt(0x40000000));
    -            ///  Register block for various chip control signals
    -            pub const SYSCFG = @as(*volatile types.peripherals.SYSCFG, @ptrFromInt(0x40004000));
    -            pub const CLOCKS = @as(*volatile types.peripherals.CLOCKS, @ptrFromInt(0x40008000));
    -            pub const RESETS = @as(*volatile types.peripherals.RESETS, @ptrFromInt(0x4000c000));
    -            pub const PSM = @as(*volatile types.peripherals.PSM, @ptrFromInt(0x40010000));
    -            pub const IO_BANK0 = @as(*volatile types.peripherals.IO_BANK0, @ptrFromInt(0x40014000));
    -            pub const IO_QSPI = @as(*volatile types.peripherals.IO_QSPI, @ptrFromInt(0x40018000));
    -            pub const PADS_BANK0 = @as(*volatile types.peripherals.PADS_BANK0, @ptrFromInt(0x4001c000));
    -            pub const PADS_QSPI = @as(*volatile types.peripherals.PADS_QSPI, @ptrFromInt(0x40020000));
    -            ///  Controls the crystal oscillator
    -            pub const XOSC = @as(*volatile types.peripherals.XOSC, @ptrFromInt(0x40024000));
    -            pub const PLL_SYS = @as(*volatile types.peripherals.PLL_SYS, @ptrFromInt(0x40028000));
    -            pub const PLL_USB = @as(*volatile types.peripherals.PLL_SYS, @ptrFromInt(0x4002c000));
    -            ///  Register block for busfabric control signals and performance counters
    -            pub const BUSCTRL = @as(*volatile types.peripherals.BUSCTRL, @ptrFromInt(0x40030000));
    -            pub const UART0 = @as(*volatile types.peripherals.UART0, @ptrFromInt(0x40034000));
    -            pub const UART1 = @as(*volatile types.peripherals.UART0, @ptrFromInt(0x40038000));
    -            pub const SPI0 = @as(*volatile types.peripherals.SPI0, @ptrFromInt(0x4003c000));
    -            pub const SPI1 = @as(*volatile types.peripherals.SPI0, @ptrFromInt(0x40040000));
    -            ///  DW_apb_i2c address block
    -            ///  List of configuration constants for the Synopsys I2C hardware (you may see references to these in I2C register header; these are *fixed* values, set at hardware design time):
    -            ///  IC_ULTRA_FAST_MODE ................ 0x0
    -            ///  IC_UFM_TBUF_CNT_DEFAULT ........... 0x8
    -            ///  IC_UFM_SCL_LOW_COUNT .............. 0x0008
    -            ///  IC_UFM_SCL_HIGH_COUNT ............. 0x0006
    -            ///  IC_TX_TL .......................... 0x0
    -            ///  IC_TX_CMD_BLOCK ................... 0x1
    -            ///  IC_HAS_DMA ........................ 0x1
    -            ///  IC_HAS_ASYNC_FIFO ................. 0x0
    -            ///  IC_SMBUS_ARP ...................... 0x0
    -            ///  IC_FIRST_DATA_BYTE_STATUS ......... 0x1
    -            ///  IC_INTR_IO ........................ 0x1
    -            ///  IC_MASTER_MODE .................... 0x1
    -            ///  IC_DEFAULT_ACK_GENERAL_CALL ....... 0x1
    -            ///  IC_INTR_POL ....................... 0x1
    -            ///  IC_OPTIONAL_SAR ................... 0x0
    -            ///  IC_DEFAULT_TAR_SLAVE_ADDR ......... 0x055
    -            ///  IC_DEFAULT_SLAVE_ADDR ............. 0x055
    -            ///  IC_DEFAULT_HS_SPKLEN .............. 0x1
    -            ///  IC_FS_SCL_HIGH_COUNT .............. 0x0006
    -            ///  IC_HS_SCL_LOW_COUNT ............... 0x0008
    -            ///  IC_DEVICE_ID_VALUE ................ 0x0
    -            ///  IC_10BITADDR_MASTER ............... 0x0
    -            ///  IC_CLK_FREQ_OPTIMIZATION .......... 0x0
    -            ///  IC_DEFAULT_FS_SPKLEN .............. 0x7
    -            ///  IC_ADD_ENCODED_PARAMS ............. 0x0
    -            ///  IC_DEFAULT_SDA_HOLD ............... 0x000001
    -            ///  IC_DEFAULT_SDA_SETUP .............. 0x64
    -            ///  IC_AVOID_RX_FIFO_FLUSH_ON_TX_ABRT . 0x0
    -            ///  IC_CLOCK_PERIOD ................... 100
    -            ///  IC_EMPTYFIFO_HOLD_MASTER_EN ....... 1
    -            ///  IC_RESTART_EN ..................... 0x1
    -            ///  IC_TX_CMD_BLOCK_DEFAULT ........... 0x0
    -            ///  IC_BUS_CLEAR_FEATURE .............. 0x0
    -            ///  IC_CAP_LOADING .................... 100
    -            ///  IC_FS_SCL_LOW_COUNT ............... 0x000d
    -            ///  APB_DATA_WIDTH .................... 32
    -            ///  IC_SDA_STUCK_TIMEOUT_DEFAULT ...... 0xffffffff
    -            ///  IC_SLV_DATA_NACK_ONLY ............. 0x1
    -            ///  IC_10BITADDR_SLAVE ................ 0x0
    -            ///  IC_CLK_TYPE ....................... 0x0
    -            ///  IC_SMBUS_UDID_MSB ................. 0x0
    -            ///  IC_SMBUS_SUSPEND_ALERT ............ 0x0
    -            ///  IC_HS_SCL_HIGH_COUNT .............. 0x0006
    -            ///  IC_SLV_RESTART_DET_EN ............. 0x1
    -            ///  IC_SMBUS .......................... 0x0
    -            ///  IC_OPTIONAL_SAR_DEFAULT ........... 0x0
    -            ///  IC_PERSISTANT_SLV_ADDR_DEFAULT .... 0x0
    -            ///  IC_USE_COUNTS ..................... 0x0
    -            ///  IC_RX_BUFFER_DEPTH ................ 16
    -            ///  IC_SCL_STUCK_TIMEOUT_DEFAULT ...... 0xffffffff
    -            ///  IC_RX_FULL_HLD_BUS_EN ............. 0x1
    -            ///  IC_SLAVE_DISABLE .................. 0x1
    -            ///  IC_RX_TL .......................... 0x0
    -            ///  IC_DEVICE_ID ...................... 0x0
    -            ///  IC_HC_COUNT_VALUES ................ 0x0
    -            ///  I2C_DYNAMIC_TAR_UPDATE ............ 0
    -            ///  IC_SMBUS_CLK_LOW_MEXT_DEFAULT ..... 0xffffffff
    -            ///  IC_SMBUS_CLK_LOW_SEXT_DEFAULT ..... 0xffffffff
    -            ///  IC_HS_MASTER_CODE ................. 0x1
    -            ///  IC_SMBUS_RST_IDLE_CNT_DEFAULT ..... 0xffff
    -            ///  IC_SMBUS_UDID_LSB_DEFAULT ......... 0xffffffff
    -            ///  IC_SS_SCL_HIGH_COUNT .............. 0x0028
    -            ///  IC_SS_SCL_LOW_COUNT ............... 0x002f
    -            ///  IC_MAX_SPEED_MODE ................. 0x2
    -            ///  IC_STAT_FOR_CLK_STRETCH ........... 0x0
    -            ///  IC_STOP_DET_IF_MASTER_ACTIVE ...... 0x0
    -            ///  IC_DEFAULT_UFM_SPKLEN ............. 0x1
    -            ///  IC_TX_BUFFER_DEPTH ................ 16
    -            pub const I2C0 = @as(*volatile types.peripherals.I2C0, @ptrFromInt(0x40044000));
    -            ///  DW_apb_i2c address block
    -            ///  List of configuration constants for the Synopsys I2C hardware (you may see references to these in I2C register header; these are *fixed* values, set at hardware design time):
    -            ///  IC_ULTRA_FAST_MODE ................ 0x0
    -            ///  IC_UFM_TBUF_CNT_DEFAULT ........... 0x8
    -            ///  IC_UFM_SCL_LOW_COUNT .............. 0x0008
    -            ///  IC_UFM_SCL_HIGH_COUNT ............. 0x0006
    -            ///  IC_TX_TL .......................... 0x0
    -            ///  IC_TX_CMD_BLOCK ................... 0x1
    -            ///  IC_HAS_DMA ........................ 0x1
    -            ///  IC_HAS_ASYNC_FIFO ................. 0x0
    -            ///  IC_SMBUS_ARP ...................... 0x0
    -            ///  IC_FIRST_DATA_BYTE_STATUS ......... 0x1
    -            ///  IC_INTR_IO ........................ 0x1
    -            ///  IC_MASTER_MODE .................... 0x1
    -            ///  IC_DEFAULT_ACK_GENERAL_CALL ....... 0x1
    -            ///  IC_INTR_POL ....................... 0x1
    -            ///  IC_OPTIONAL_SAR ................... 0x0
    -            ///  IC_DEFAULT_TAR_SLAVE_ADDR ......... 0x055
    -            ///  IC_DEFAULT_SLAVE_ADDR ............. 0x055
    -            ///  IC_DEFAULT_HS_SPKLEN .............. 0x1
    -            ///  IC_FS_SCL_HIGH_COUNT .............. 0x0006
    -            ///  IC_HS_SCL_LOW_COUNT ............... 0x0008
    -            ///  IC_DEVICE_ID_VALUE ................ 0x0
    -            ///  IC_10BITADDR_MASTER ............... 0x0
    -            ///  IC_CLK_FREQ_OPTIMIZATION .......... 0x0
    -            ///  IC_DEFAULT_FS_SPKLEN .............. 0x7
    -            ///  IC_ADD_ENCODED_PARAMS ............. 0x0
    -            ///  IC_DEFAULT_SDA_HOLD ............... 0x000001
    -            ///  IC_DEFAULT_SDA_SETUP .............. 0x64
    -            ///  IC_AVOID_RX_FIFO_FLUSH_ON_TX_ABRT . 0x0
    -            ///  IC_CLOCK_PERIOD ................... 100
    -            ///  IC_EMPTYFIFO_HOLD_MASTER_EN ....... 1
    -            ///  IC_RESTART_EN ..................... 0x1
    -            ///  IC_TX_CMD_BLOCK_DEFAULT ........... 0x0
    -            ///  IC_BUS_CLEAR_FEATURE .............. 0x0
    -            ///  IC_CAP_LOADING .................... 100
    -            ///  IC_FS_SCL_LOW_COUNT ............... 0x000d
    -            ///  APB_DATA_WIDTH .................... 32
    -            ///  IC_SDA_STUCK_TIMEOUT_DEFAULT ...... 0xffffffff
    -            ///  IC_SLV_DATA_NACK_ONLY ............. 0x1
    -            ///  IC_10BITADDR_SLAVE ................ 0x0
    -            ///  IC_CLK_TYPE ....................... 0x0
    -            ///  IC_SMBUS_UDID_MSB ................. 0x0
    -            ///  IC_SMBUS_SUSPEND_ALERT ............ 0x0
    -            ///  IC_HS_SCL_HIGH_COUNT .............. 0x0006
    -            ///  IC_SLV_RESTART_DET_EN ............. 0x1
    -            ///  IC_SMBUS .......................... 0x0
    -            ///  IC_OPTIONAL_SAR_DEFAULT ........... 0x0
    -            ///  IC_PERSISTANT_SLV_ADDR_DEFAULT .... 0x0
    -            ///  IC_USE_COUNTS ..................... 0x0
    -            ///  IC_RX_BUFFER_DEPTH ................ 16
    -            ///  IC_SCL_STUCK_TIMEOUT_DEFAULT ...... 0xffffffff
    -            ///  IC_RX_FULL_HLD_BUS_EN ............. 0x1
    -            ///  IC_SLAVE_DISABLE .................. 0x1
    -            ///  IC_RX_TL .......................... 0x0
    -            ///  IC_DEVICE_ID ...................... 0x0
    -            ///  IC_HC_COUNT_VALUES ................ 0x0
    -            ///  I2C_DYNAMIC_TAR_UPDATE ............ 0
    -            ///  IC_SMBUS_CLK_LOW_MEXT_DEFAULT ..... 0xffffffff
    -            ///  IC_SMBUS_CLK_LOW_SEXT_DEFAULT ..... 0xffffffff
    -            ///  IC_HS_MASTER_CODE ................. 0x1
    -            ///  IC_SMBUS_RST_IDLE_CNT_DEFAULT ..... 0xffff
    -            ///  IC_SMBUS_UDID_LSB_DEFAULT ......... 0xffffffff
    -            ///  IC_SS_SCL_HIGH_COUNT .............. 0x0028
    -            ///  IC_SS_SCL_LOW_COUNT ............... 0x002f
    -            ///  IC_MAX_SPEED_MODE ................. 0x2
    -            ///  IC_STAT_FOR_CLK_STRETCH ........... 0x0
    -            ///  IC_STOP_DET_IF_MASTER_ACTIVE ...... 0x0
    -            ///  IC_DEFAULT_UFM_SPKLEN ............. 0x1
    -            ///  IC_TX_BUFFER_DEPTH ................ 16
    -            pub const I2C1 = @as(*volatile types.peripherals.I2C0, @ptrFromInt(0x40048000));
    -            ///  Control and data interface to SAR ADC
    -            pub const ADC = @as(*volatile types.peripherals.ADC, @ptrFromInt(0x4004c000));
    -            ///  Simple PWM
    -            pub const PWM = @as(*volatile types.peripherals.PWM, @ptrFromInt(0x40050000));
    -            ///  Controls time and alarms
    -            ///  time is a 64 bit value indicating the time in usec since power-on
    -            ///  timeh is the top 32 bits of time & timel is the bottom 32 bits
    -            ///  to change time write to timelw before timehw
    -            ///  to read time read from timelr before timehr
    -            ///  An alarm is set by setting alarm_enable and writing to the corresponding alarm register
    -            ///  When an alarm is pending, the corresponding alarm_running signal will be high
    -            ///  An alarm can be cancelled before it has finished by clearing the alarm_enable
    -            ///  When an alarm fires, the corresponding alarm_irq is set and alarm_running is cleared
    -            ///  To clear the interrupt write a 1 to the corresponding alarm_irq
    -            pub const TIMER = @as(*volatile types.peripherals.TIMER, @ptrFromInt(0x40054000));
    -            pub const WATCHDOG = @as(*volatile types.peripherals.WATCHDOG, @ptrFromInt(0x40058000));
    -            ///  Register block to control RTC
    -            pub const RTC = @as(*volatile types.peripherals.RTC, @ptrFromInt(0x4005c000));
    -            pub const ROSC = @as(*volatile types.peripherals.ROSC, @ptrFromInt(0x40060000));
    -            ///  control and status for on-chip voltage regulator and chip level reset subsystem
    -            pub const VREG_AND_CHIP_RESET = @as(*volatile types.peripherals.VREG_AND_CHIP_RESET, @ptrFromInt(0x40064000));
    -            ///  Testbench manager. Allows the programmer to know what platform their software is running on.
    -            pub const TBMAN = @as(*volatile types.peripherals.TBMAN, @ptrFromInt(0x4006c000));
    -            ///  DMA with separate read and write masters
    -            pub const DMA = @as(*volatile types.peripherals.DMA, @ptrFromInt(0x50000000));
    -            ///  DPRAM layout for USB device.
    -            pub const USBCTRL_DPRAM = @as(*volatile types.peripherals.USBCTRL_DPRAM, @ptrFromInt(0x50100000));
    -            ///  USB FS/LS controller device registers
    -            pub const USBCTRL_REGS = @as(*volatile types.peripherals.USBCTRL_REGS, @ptrFromInt(0x50110000));
    -            ///  Programmable IO block
    -            pub const PIO0 = @as(*volatile types.peripherals.PIO0, @ptrFromInt(0x50200000));
    -            ///  Programmable IO block
    -            pub const PIO1 = @as(*volatile types.peripherals.PIO0, @ptrFromInt(0x50300000));
    -            ///  Single-cycle IO block
    -            ///  Provides core-local and inter-core hardware for the two processors, with single-cycle access.
    -            pub const SIO = @as(*volatile types.peripherals.SIO, @ptrFromInt(0xd0000000));
    -            pub const PPB = @as(*volatile types.peripherals.PPB, @ptrFromInt(0xe0000000));
    -            ///  System Tick Timer
    -            pub const SysTick = @as(*volatile types.peripherals.SysTick, @ptrFromInt(0xe000e010));
    -            ///  System Control Space
    -            pub const NVIC = @as(*volatile types.peripherals.NVIC, @ptrFromInt(0xe000e100));
    -            ///  System Control Space
    -            pub const SCB = @as(*volatile types.peripherals.SCB, @ptrFromInt(0xe000ed00));
    -        };
    -    };
    -};
    -
    -pub const types = struct {
    -    pub const peripherals = struct {
    -        ///  System Tick Timer
    -        pub const SysTick = extern struct {
    -            ///  SysTick Control and Status Register
    -            CTRL: mmio.Mmio(packed struct(u32) {
    -                ENABLE: u1,
    -                TICKINT: u1,
    -                CLKSOURCE: u1,
    -                reserved16: u13,
    -                COUNTFLAG: u1,
    -                padding: u15,
    -            }),
    -            ///  SysTick Reload Value Register
    -            LOAD: mmio.Mmio(packed struct(u32) {
    -                RELOAD: u24,
    -                padding: u8,
    -            }),
    -            ///  SysTick Current Value Register
    -            VAL: mmio.Mmio(packed struct(u32) {
    -                CURRENT: u24,
    -                padding: u8,
    -            }),
    -            ///  SysTick Calibration Register
    -            CALIB: mmio.Mmio(packed struct(u32) {
    -                TENMS: u24,
    -                reserved30: u6,
    -                SKEW: u1,
    -                NOREF: u1,
    -            }),
    -        };
    -
    -        ///  System Control Block
    -        pub const SCB = extern struct {
    -            CPUID: mmio.Mmio(packed struct(u32) {
    -                REVISION: u4,
    -                PARTNO: u12,
    -                ARCHITECTURE: u4,
    -                VARIANT: u4,
    -                IMPLEMENTER: u8,
    -            }),
    -            ///  Interrupt Control and State Register
    -            ICSR: mmio.Mmio(packed struct(u32) {
    -                VECTACTIVE: u9,
    -                reserved12: u3,
    -                VECTPENDING: u9,
    -                reserved22: u1,
    -                ISRPENDING: u1,
    -                ISRPREEMPT: u1,
    -                reserved25: u1,
    -                PENDSTCLR: u1,
    -                PENDSTSET: u1,
    -                PENDSVCLR: u1,
    -                PENDSVSET: u1,
    -                reserved31: u2,
    -                NMIPENDSET: u1,
    -            }),
    -            ///  Vector Table Offset Register
    -            VTOR: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                TBLOFF: u24,
    -            }),
    -            ///  Application Interrupt and Reset Control Register
    -            AIRCR: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                VECTCLRACTIVE: u1,
    -                SYSRESETREQ: u1,
    -                reserved15: u12,
    -                ENDIANESS: u1,
    -                VECTKEY: u16,
    -            }),
    -            ///  System Control Register
    -            SCR: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                SLEEPONEXIT: u1,
    -                SLEEPDEEP: u1,
    -                reserved4: u1,
    -                SEVONPEND: u1,
    -                padding: u27,
    -            }),
    -            ///  Configuration Control Register
    -            CCR: mmio.Mmio(packed struct(u32) {
    -                reserved3: u3,
    -                UNALIGN_TRP: u1,
    -                reserved9: u5,
    -                STKALIGN: u1,
    -                padding: u22,
    -            }),
    -            reserved28: [4]u8,
    -            ///  System Handlers Priority Registers. [0] is RESERVED
    -            SHP: u32,
    -            reserved36: [4]u8,
    -            ///  System Handler Control and State Register
    -            SHCSR: mmio.Mmio(packed struct(u32) {
    -                reserved15: u15,
    -                SVCALLPENDED: u1,
    -                padding: u16,
    -            }),
    -        };
    -
    -        ///  Nested Vectored Interrupt Controller
    -        pub const NVIC = extern struct {
    -            ///  Interrupt Set Enable Register
    -            ISER: mmio.Mmio(packed struct(u32) {
    -                TIMER_IRQ_0: u1,
    -                TIMER_IRQ_1: u1,
    -                TIMER_IRQ_2: u1,
    -                TIMER_IRQ_3: u1,
    -                PWM_IRQ_WRAP: u1,
    -                USBCTRL_IRQ: u1,
    -                XIP_IRQ: u1,
    -                PIO0_IRQ_0: u1,
    -                PIO0_IRQ_1: u1,
    -                PIO1_IRQ_0: u1,
    -                PIO1_IRQ_1: u1,
    -                DMA_IRQ_0: u1,
    -                DMA_IRQ_1: u1,
    -                IO_IRQ_BANK0: u1,
    -                IO_IRQ_QSPI: u1,
    -                SIO_IRQ_PROC0: u1,
    -                SIO_IRQ_PROC1: u1,
    -                CLOCKS_IRQ: u1,
    -                SPI0_IRQ: u1,
    -                SPI1_IRQ: u1,
    -                UART0_IRQ: u1,
    -                UART1_IRQ: u1,
    -                ADC_IRQ_FIFO: u1,
    -                I2C0_IRQ: u1,
    -                I2C1_IRQ: u1,
    -                RTC_IRQ: u1,
    -                padding: u6,
    -            }),
    -            reserved128: [124]u8,
    -            ///  Interrupt Clear Enable Register
    -            ICER: mmio.Mmio(packed struct(u32) {
    -                TIMER_IRQ_0: u1,
    -                TIMER_IRQ_1: u1,
    -                TIMER_IRQ_2: u1,
    -                TIMER_IRQ_3: u1,
    -                PWM_IRQ_WRAP: u1,
    -                USBCTRL_IRQ: u1,
    -                XIP_IRQ: u1,
    -                PIO0_IRQ_0: u1,
    -                PIO0_IRQ_1: u1,
    -                PIO1_IRQ_0: u1,
    -                PIO1_IRQ_1: u1,
    -                DMA_IRQ_0: u1,
    -                DMA_IRQ_1: u1,
    -                IO_IRQ_BANK0: u1,
    -                IO_IRQ_QSPI: u1,
    -                SIO_IRQ_PROC0: u1,
    -                SIO_IRQ_PROC1: u1,
    -                CLOCKS_IRQ: u1,
    -                SPI0_IRQ: u1,
    -                SPI1_IRQ: u1,
    -                UART0_IRQ: u1,
    -                UART1_IRQ: u1,
    -                ADC_IRQ_FIFO: u1,
    -                I2C0_IRQ: u1,
    -                I2C1_IRQ: u1,
    -                RTC_IRQ: u1,
    -                padding: u6,
    -            }),
    -            reserved256: [124]u8,
    -            ///  Interrupt Set Pending Register
    -            ISPR: mmio.Mmio(packed struct(u32) {
    -                TIMER_IRQ_0: u1,
    -                TIMER_IRQ_1: u1,
    -                TIMER_IRQ_2: u1,
    -                TIMER_IRQ_3: u1,
    -                PWM_IRQ_WRAP: u1,
    -                USBCTRL_IRQ: u1,
    -                XIP_IRQ: u1,
    -                PIO0_IRQ_0: u1,
    -                PIO0_IRQ_1: u1,
    -                PIO1_IRQ_0: u1,
    -                PIO1_IRQ_1: u1,
    -                DMA_IRQ_0: u1,
    -                DMA_IRQ_1: u1,
    -                IO_IRQ_BANK0: u1,
    -                IO_IRQ_QSPI: u1,
    -                SIO_IRQ_PROC0: u1,
    -                SIO_IRQ_PROC1: u1,
    -                CLOCKS_IRQ: u1,
    -                SPI0_IRQ: u1,
    -                SPI1_IRQ: u1,
    -                UART0_IRQ: u1,
    -                UART1_IRQ: u1,
    -                ADC_IRQ_FIFO: u1,
    -                I2C0_IRQ: u1,
    -                I2C1_IRQ: u1,
    -                RTC_IRQ: u1,
    -                padding: u6,
    -            }),
    -            reserved384: [124]u8,
    -            ///  Interrupt Clear Pending Register
    -            ICPR: mmio.Mmio(packed struct(u32) {
    -                TIMER_IRQ_0: u1,
    -                TIMER_IRQ_1: u1,
    -                TIMER_IRQ_2: u1,
    -                TIMER_IRQ_3: u1,
    -                PWM_IRQ_WRAP: u1,
    -                USBCTRL_IRQ: u1,
    -                XIP_IRQ: u1,
    -                PIO0_IRQ_0: u1,
    -                PIO0_IRQ_1: u1,
    -                PIO1_IRQ_0: u1,
    -                PIO1_IRQ_1: u1,
    -                DMA_IRQ_0: u1,
    -                DMA_IRQ_1: u1,
    -                IO_IRQ_BANK0: u1,
    -                IO_IRQ_QSPI: u1,
    -                SIO_IRQ_PROC0: u1,
    -                SIO_IRQ_PROC1: u1,
    -                CLOCKS_IRQ: u1,
    -                SPI0_IRQ: u1,
    -                SPI1_IRQ: u1,
    -                UART0_IRQ: u1,
    -                UART1_IRQ: u1,
    -                ADC_IRQ_FIFO: u1,
    -                I2C0_IRQ: u1,
    -                I2C1_IRQ: u1,
    -                RTC_IRQ: u1,
    -                padding: u6,
    -            }),
    -            reserved768: [380]u8,
    -            ///  Interrupt Priority Register
    -            IPR0: mmio.Mmio(packed struct(u32) {
    -                reserved6: u6,
    -                TIMER_IRQ_0: u2,
    -                reserved14: u6,
    -                TIMER_IRQ_1: u2,
    -                reserved22: u6,
    -                TIMER_IRQ_2: u2,
    -                reserved30: u6,
    -                TIMER_IRQ_3: u2,
    -            }),
    -            ///  Interrupt Priority Register
    -            IPR1: mmio.Mmio(packed struct(u32) {
    -                reserved6: u6,
    -                PWM_IRQ_WRAP: u2,
    -                reserved14: u6,
    -                USBCTRL_IRQ: u2,
    -                reserved22: u6,
    -                XIP_IRQ: u2,
    -                reserved30: u6,
    -                PIO0_IRQ_0: u2,
    -            }),
    -            ///  Interrupt Priority Register
    -            IPR2: mmio.Mmio(packed struct(u32) {
    -                reserved6: u6,
    -                PIO0_IRQ_1: u2,
    -                reserved14: u6,
    -                PIO1_IRQ_0: u2,
    -                reserved22: u6,
    -                PIO1_IRQ_1: u2,
    -                reserved30: u6,
    -                DMA_IRQ_0: u2,
    -            }),
    -            ///  Interrupt Priority Register
    -            IPR3: mmio.Mmio(packed struct(u32) {
    -                reserved6: u6,
    -                DMA_IRQ_1: u2,
    -                reserved14: u6,
    -                IO_IRQ_BANK0: u2,
    -                reserved22: u6,
    -                IO_IRQ_QSPI: u2,
    -                reserved30: u6,
    -                SIO_IRQ_PROC0: u2,
    -            }),
    -            ///  Interrupt Priority Register
    -            IPR4: mmio.Mmio(packed struct(u32) {
    -                reserved6: u6,
    -                SIO_IRQ_PROC1: u2,
    -                reserved14: u6,
    -                CLOCKS_IRQ: u2,
    -                reserved22: u6,
    -                SPI0_IRQ: u2,
    -                reserved30: u6,
    -                SPI1_IRQ: u2,
    -            }),
    -            ///  Interrupt Priority Register
    -            IPR5: mmio.Mmio(packed struct(u32) {
    -                reserved6: u6,
    -                UART0_IRQ: u2,
    -                reserved14: u6,
    -                UART1_IRQ: u2,
    -                reserved22: u6,
    -                ADC_IRQ_FIFO: u2,
    -                reserved30: u6,
    -                I2C0_IRQ: u2,
    -            }),
    -            ///  Interrupt Priority Register
    -            IPR6: mmio.Mmio(packed struct(u32) {
    -                reserved6: u6,
    -                I2C1_IRQ: u2,
    -                reserved14: u6,
    -                RTC_IRQ: u2,
    -                padding: u16,
    -            }),
    -            ///  Interrupt Priority Register
    -            IPR7: u32,
    -        };
    -
    -        ///  Memory Protection Unit
    -        pub const MPU = extern struct {
    -            ///  MPU Type Register
    -            TYPE: mmio.Mmio(packed struct(u32) {
    -                SEPARATE: u1,
    -                reserved8: u7,
    -                DREGION: u8,
    -                IREGION: u8,
    -                padding: u8,
    -            }),
    -            ///  MPU Control Register
    -            CTRL: mmio.Mmio(packed struct(u32) {
    -                ENABLE: u1,
    -                HFNMIENA: u1,
    -                PRIVDEFENA: u1,
    -                padding: u29,
    -            }),
    -            ///  MPU Region RNRber Register
    -            RNR: mmio.Mmio(packed struct(u32) {
    -                REGION: u8,
    -                padding: u24,
    -            }),
    -            ///  MPU Region Base Address Register
    -            RBAR: mmio.Mmio(packed struct(u32) {
    -                REGION: u4,
    -                VALID: u1,
    -                reserved8: u3,
    -                ADDR: u24,
    -            }),
    -            ///  MPU Region Attribute and Size Register
    -            RASR: mmio.Mmio(packed struct(u32) {
    -                ENABLE: u1,
    -                SIZE: u5,
    -                reserved8: u2,
    -                SRD: u8,
    -                B: u1,
    -                C: u1,
    -                S: u1,
    -                TEX: u3,
    -                reserved24: u2,
    -                AP: u3,
    -                reserved28: u1,
    -                XN: u1,
    -                padding: u3,
    -            }),
    -        };
    -
    -        ///  QSPI flash execute-in-place block
    -        pub const XIP_CTRL = extern struct {
    -            ///  Cache control
    -            CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  When 1, enable the cache. When the cache is disabled, all XIP accesses
    -                ///  will go straight to the flash, without querying the cache. When enabled,
    -                ///  cacheable XIP accesses will query the cache, and the flash will
    -                ///  not be accessed if the tag matches and the valid bit is set.
    -                ///  If the cache is enabled, cache-as-SRAM accesses have no effect on the
    -                ///  cache data RAM, and will produce a bus error response.
    -                EN: u1,
    -                ///  When 1, writes to any alias other than 0x0 (caching, allocating)
    -                ///  will produce a bus fault. When 0, these writes are silently ignored.
    -                ///  In either case, writes to the 0x0 alias will deallocate on tag match,
    -                ///  as usual.
    -                ERR_BADWRITE: u1,
    -                reserved3: u1,
    -                ///  When 1, the cache memories are powered down. They retain state,
    -                ///  but can not be accessed. This reduces static power dissipation.
    -                ///  Writing 1 to this bit forces CTRL_EN to 0, i.e. the cache cannot
    -                ///  be enabled when powered down.
    -                ///  Cache-as-SRAM accesses will produce a bus error response when
    -                ///  the cache is powered down.
    -                POWER_DOWN: u1,
    -                padding: u28,
    -            }),
    -            ///  Cache Flush control
    -            FLUSH: mmio.Mmio(packed struct(u32) {
    -                ///  Write 1 to flush the cache. This clears the tag memory, but
    -                ///  the data memory retains its contents. (This means cache-as-SRAM
    -                ///  contents is not affected by flush or reset.)
    -                ///  Reading will hold the bus (stall the processor) until the flush
    -                ///  completes. Alternatively STAT can be polled until completion.
    -                FLUSH: u1,
    -                padding: u31,
    -            }),
    -            ///  Cache Status
    -            STAT: mmio.Mmio(packed struct(u32) {
    -                ///  Reads as 0 while a cache flush is in progress, and 1 otherwise.
    -                ///  The cache is flushed whenever the XIP block is reset, and also
    -                ///  when requested via the FLUSH register.
    -                FLUSH_READY: u1,
    -                ///  When 1, indicates the XIP streaming FIFO is completely empty.
    -                FIFO_EMPTY: u1,
    -                ///  When 1, indicates the XIP streaming FIFO is completely full.
    -                ///  The streaming FIFO is 2 entries deep, so the full and empty
    -                ///  flag allow its level to be ascertained.
    -                FIFO_FULL: u1,
    -                padding: u29,
    -            }),
    -            ///  Cache Hit counter
    -            ///  A 32 bit saturating counter that increments upon each cache hit,
    -            ///  i.e. when an XIP access is serviced directly from cached data.
    -            ///  Write any value to clear.
    -            CTR_HIT: u32,
    -            ///  Cache Access counter
    -            ///  A 32 bit saturating counter that increments upon each XIP access,
    -            ///  whether the cache is hit or not. This includes noncacheable accesses.
    -            ///  Write any value to clear.
    -            CTR_ACC: u32,
    -            ///  FIFO stream address
    -            STREAM_ADDR: mmio.Mmio(packed struct(u32) {
    -                reserved2: u2,
    -                ///  The address of the next word to be streamed from flash to the streaming FIFO.
    -                ///  Increments automatically after each flash access.
    -                ///  Write the initial access address here before starting a streaming read.
    -                STREAM_ADDR: u30,
    -            }),
    -            ///  FIFO stream control
    -            STREAM_CTR: mmio.Mmio(packed struct(u32) {
    -                ///  Write a nonzero value to start a streaming read. This will then
    -                ///  progress in the background, using flash idle cycles to transfer
    -                ///  a linear data block from flash to the streaming FIFO.
    -                ///  Decrements automatically (1 at a time) as the stream
    -                ///  progresses, and halts on reaching 0.
    -                ///  Write 0 to halt an in-progress stream, and discard any in-flight
    -                ///  read, so that a new stream can immediately be started (after
    -                ///  draining the FIFO and reinitialising STREAM_ADDR)
    -                STREAM_CTR: u22,
    -                padding: u10,
    -            }),
    -            ///  FIFO stream data
    -            ///  Streamed data is buffered here, for retrieval by the system DMA.
    -            ///  This FIFO can also be accessed via the XIP_AUX slave, to avoid exposing
    -            ///  the DMA to bus stalls caused by other XIP traffic.
    -            STREAM_FIFO: u32,
    -        };
    -
    -        ///  DW_apb_ssi has the following features:
    -        ///  * APB interface – Allows for easy integration into a DesignWare Synthesizable Components for AMBA 2 implementation.
    -        ///  * APB3 and APB4 protocol support.
    -        ///  * Scalable APB data bus width – Supports APB data bus widths of 8, 16, and 32 bits.
    -        ///  * Serial-master or serial-slave operation – Enables serial communication with serial-master or serial-slave peripheral devices.
    -        ///  * Programmable Dual/Quad/Octal SPI support in Master Mode.
    -        ///  * Dual Data Rate (DDR) and Read Data Strobe (RDS) Support - Enables the DW_apb_ssi master to perform operations with the device in DDR and RDS modes when working in Dual/Quad/Octal mode of operation.
    -        ///  * Data Mask Support - Enables the DW_apb_ssi to selectively update the bytes in the device. This feature is applicable only in enhanced SPI modes.
    -        ///  * eXecute-In-Place (XIP) support - Enables the DW_apb_ssi master to behave as a memory mapped I/O and fetches the data from the device based on the APB read request. This feature is applicable only in enhanced SPI modes.
    -        ///  * DMA Controller Interface – Enables the DW_apb_ssi to interface to a DMA controller over the bus using a handshaking interface for transfer requests.
    -        ///  * Independent masking of interrupts – Master collision, transmit FIFO overflow, transmit FIFO empty, receive FIFO full, receive FIFO underflow, and receive FIFO overflow interrupts can all be masked independently.
    -        ///  * Multi-master contention detection – Informs the processor of multiple serial-master accesses on the serial bus.
    -        ///  * Bypass of meta-stability flip-flops for synchronous clocks – When the APB clock (pclk) and the DW_apb_ssi serial clock (ssi_clk) are synchronous, meta-stable flip-flops are not used when transferring control signals across these clock domains.
    -        ///  * Programmable delay on the sample time of the received serial data bit (rxd); enables programmable control of routing delays resulting in higher serial data-bit rates.
    -        ///  * Programmable features:
    -        ///  - Serial interface operation – Choice of Motorola SPI, Texas Instruments Synchronous Serial Protocol or National Semiconductor Microwire.
    -        ///  - Clock bit-rate – Dynamic control of the serial bit rate of the data transfer; used in only serial-master mode of operation.
    -        ///  - Data Item size (4 to 32 bits) – Item size of each data transfer under the control of the programmer.
    -        ///  * Configured features:
    -        ///  - FIFO depth – 16 words deep. The FIFO width is fixed at 32 bits.
    -        ///  - 1 slave select output.
    -        ///  - Hardware slave-select – Dedicated hardware slave-select line.
    -        ///  - Combined interrupt line - one combined interrupt line from the DW_apb_ssi to the interrupt controller.
    -        ///  - Interrupt polarity – active high interrupt lines.
    -        ///  - Serial clock polarity – low serial-clock polarity directly after reset.
    -        ///  - Serial clock phase – capture on first edge of serial-clock directly after reset.
    -        pub const XIP_SSI = extern struct {
    -            ///  Control register 0
    -            CTRLR0: mmio.Mmio(packed struct(u32) {
    -                ///  Data frame size
    -                DFS: u4,
    -                ///  Frame format
    -                FRF: u2,
    -                ///  Serial clock phase
    -                SCPH: u1,
    -                ///  Serial clock polarity
    -                SCPOL: u1,
    -                ///  Transfer mode
    -                TMOD: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Both transmit and receive
    -                        TX_AND_RX = 0x0,
    -                        ///  Transmit only (not for FRF == 0, standard SPI mode)
    -                        TX_ONLY = 0x1,
    -                        ///  Receive only (not for FRF == 0, standard SPI mode)
    -                        RX_ONLY = 0x2,
    -                        ///  EEPROM read mode (TX then RX; RX starts after control data TX'd)
    -                        EEPROM_READ = 0x3,
    -                    },
    -                },
    -                ///  Slave output enable
    -                SLV_OE: u1,
    -                ///  Shift register loop (test mode)
    -                SRL: u1,
    -                ///  Control frame size
    -                ///  Value of n -> n+1 clocks per frame.
    -                CFS: u4,
    -                ///  Data frame size in 32b transfer mode
    -                ///  Value of n -> n+1 clocks per frame.
    -                DFS_32: u5,
    -                ///  SPI frame format
    -                SPI_FRF: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Standard 1-bit SPI frame format; 1 bit per SCK, full-duplex
    -                        STD = 0x0,
    -                        ///  Dual-SPI frame format; two bits per SCK, half-duplex
    -                        DUAL = 0x1,
    -                        ///  Quad-SPI frame format; four bits per SCK, half-duplex
    -                        QUAD = 0x2,
    -                        _,
    -                    },
    -                },
    -                reserved24: u1,
    -                ///  Slave select toggle enable
    -                SSTE: u1,
    -                padding: u7,
    -            }),
    -            ///  Master Control register 1
    -            CTRLR1: mmio.Mmio(packed struct(u32) {
    -                ///  Number of data frames
    -                NDF: u16,
    -                padding: u16,
    -            }),
    -            ///  SSI Enable
    -            SSIENR: mmio.Mmio(packed struct(u32) {
    -                ///  SSI enable
    -                SSI_EN: u1,
    -                padding: u31,
    -            }),
    -            ///  Microwire Control
    -            MWCR: mmio.Mmio(packed struct(u32) {
    -                ///  Microwire transfer mode
    -                MWMOD: u1,
    -                ///  Microwire control
    -                MDD: u1,
    -                ///  Microwire handshaking
    -                MHS: u1,
    -                padding: u29,
    -            }),
    -            ///  Slave enable
    -            SER: mmio.Mmio(packed struct(u32) {
    -                ///  For each bit:
    -                ///  0 -> slave not selected
    -                ///  1 -> slave selected
    -                SER: u1,
    -                padding: u31,
    -            }),
    -            ///  Baud rate
    -            BAUDR: mmio.Mmio(packed struct(u32) {
    -                ///  SSI clock divider
    -                SCKDV: u16,
    -                padding: u16,
    -            }),
    -            ///  TX FIFO threshold level
    -            TXFTLR: mmio.Mmio(packed struct(u32) {
    -                ///  Transmit FIFO threshold
    -                TFT: u8,
    -                padding: u24,
    -            }),
    -            ///  RX FIFO threshold level
    -            RXFTLR: mmio.Mmio(packed struct(u32) {
    -                ///  Receive FIFO threshold
    -                RFT: u8,
    -                padding: u24,
    -            }),
    -            ///  TX FIFO level
    -            TXFLR: mmio.Mmio(packed struct(u32) {
    -                ///  Transmit FIFO level
    -                TFTFL: u8,
    -                padding: u24,
    -            }),
    -            ///  RX FIFO level
    -            RXFLR: mmio.Mmio(packed struct(u32) {
    -                ///  Receive FIFO level
    -                RXTFL: u8,
    -                padding: u24,
    -            }),
    -            ///  Status register
    -            SR: mmio.Mmio(packed struct(u32) {
    -                ///  SSI busy flag
    -                BUSY: u1,
    -                ///  Transmit FIFO not full
    -                TFNF: u1,
    -                ///  Transmit FIFO empty
    -                TFE: u1,
    -                ///  Receive FIFO not empty
    -                RFNE: u1,
    -                ///  Receive FIFO full
    -                RFF: u1,
    -                ///  Transmission error
    -                TXE: u1,
    -                ///  Data collision error
    -                DCOL: u1,
    -                padding: u25,
    -            }),
    -            ///  Interrupt mask
    -            IMR: mmio.Mmio(packed struct(u32) {
    -                ///  Transmit FIFO empty interrupt mask
    -                TXEIM: u1,
    -                ///  Transmit FIFO overflow interrupt mask
    -                TXOIM: u1,
    -                ///  Receive FIFO underflow interrupt mask
    -                RXUIM: u1,
    -                ///  Receive FIFO overflow interrupt mask
    -                RXOIM: u1,
    -                ///  Receive FIFO full interrupt mask
    -                RXFIM: u1,
    -                ///  Multi-master contention interrupt mask
    -                MSTIM: u1,
    -                padding: u26,
    -            }),
    -            ///  Interrupt status
    -            ISR: mmio.Mmio(packed struct(u32) {
    -                ///  Transmit FIFO empty interrupt status
    -                TXEIS: u1,
    -                ///  Transmit FIFO overflow interrupt status
    -                TXOIS: u1,
    -                ///  Receive FIFO underflow interrupt status
    -                RXUIS: u1,
    -                ///  Receive FIFO overflow interrupt status
    -                RXOIS: u1,
    -                ///  Receive FIFO full interrupt status
    -                RXFIS: u1,
    -                ///  Multi-master contention interrupt status
    -                MSTIS: u1,
    -                padding: u26,
    -            }),
    -            ///  Raw interrupt status
    -            RISR: mmio.Mmio(packed struct(u32) {
    -                ///  Transmit FIFO empty raw interrupt status
    -                TXEIR: u1,
    -                ///  Transmit FIFO overflow raw interrupt status
    -                TXOIR: u1,
    -                ///  Receive FIFO underflow raw interrupt status
    -                RXUIR: u1,
    -                ///  Receive FIFO overflow raw interrupt status
    -                RXOIR: u1,
    -                ///  Receive FIFO full raw interrupt status
    -                RXFIR: u1,
    -                ///  Multi-master contention raw interrupt status
    -                MSTIR: u1,
    -                padding: u26,
    -            }),
    -            ///  TX FIFO overflow interrupt clear
    -            TXOICR: mmio.Mmio(packed struct(u32) {
    -                ///  Clear-on-read transmit FIFO overflow interrupt
    -                TXOICR: u1,
    -                padding: u31,
    -            }),
    -            ///  RX FIFO overflow interrupt clear
    -            RXOICR: mmio.Mmio(packed struct(u32) {
    -                ///  Clear-on-read receive FIFO overflow interrupt
    -                RXOICR: u1,
    -                padding: u31,
    -            }),
    -            ///  RX FIFO underflow interrupt clear
    -            RXUICR: mmio.Mmio(packed struct(u32) {
    -                ///  Clear-on-read receive FIFO underflow interrupt
    -                RXUICR: u1,
    -                padding: u31,
    -            }),
    -            ///  Multi-master interrupt clear
    -            MSTICR: mmio.Mmio(packed struct(u32) {
    -                ///  Clear-on-read multi-master contention interrupt
    -                MSTICR: u1,
    -                padding: u31,
    -            }),
    -            ///  Interrupt clear
    -            ICR: mmio.Mmio(packed struct(u32) {
    -                ///  Clear-on-read all active interrupts
    -                ICR: u1,
    -                padding: u31,
    -            }),
    -            ///  DMA control
    -            DMACR: mmio.Mmio(packed struct(u32) {
    -                ///  Receive DMA enable
    -                RDMAE: u1,
    -                ///  Transmit DMA enable
    -                TDMAE: u1,
    -                padding: u30,
    -            }),
    -            ///  DMA TX data level
    -            DMATDLR: mmio.Mmio(packed struct(u32) {
    -                ///  Transmit data watermark level
    -                DMATDL: u8,
    -                padding: u24,
    -            }),
    -            ///  DMA RX data level
    -            DMARDLR: mmio.Mmio(packed struct(u32) {
    -                ///  Receive data watermark level (DMARDLR+1)
    -                DMARDL: u8,
    -                padding: u24,
    -            }),
    -            ///  Identification register
    -            IDR: mmio.Mmio(packed struct(u32) {
    -                ///  Peripheral dentification code
    -                IDCODE: u32,
    -            }),
    -            ///  Version ID
    -            SSI_VERSION_ID: mmio.Mmio(packed struct(u32) {
    -                ///  SNPS component version (format X.YY)
    -                SSI_COMP_VERSION: u32,
    -            }),
    -            ///  Data Register 0 (of 36)
    -            DR0: mmio.Mmio(packed struct(u32) {
    -                ///  First data register of 36
    -                DR: u32,
    -            }),
    -            reserved240: [140]u8,
    -            ///  RX sample delay
    -            RX_SAMPLE_DLY: mmio.Mmio(packed struct(u32) {
    -                ///  RXD sample delay (in SCLK cycles)
    -                RSD: u8,
    -                padding: u24,
    -            }),
    -            ///  SPI control
    -            SPI_CTRLR0: mmio.Mmio(packed struct(u32) {
    -                ///  Address and instruction transfer format
    -                TRANS_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Command and address both in standard SPI frame format
    -                        @"1C1A" = 0x0,
    -                        ///  Command in standard SPI format, address in format specified by FRF
    -                        @"1C2A" = 0x1,
    -                        ///  Command and address both in format specified by FRF (e.g. Dual-SPI)
    -                        @"2C2A" = 0x2,
    -                        _,
    -                    },
    -                },
    -                ///  Address length (0b-60b in 4b increments)
    -                ADDR_L: u4,
    -                reserved8: u2,
    -                ///  Instruction length (0/4/8/16b)
    -                INST_L: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  No instruction
    -                        NONE = 0x0,
    -                        ///  4-bit instruction
    -                        @"4B" = 0x1,
    -                        ///  8-bit instruction
    -                        @"8B" = 0x2,
    -                        ///  16-bit instruction
    -                        @"16B" = 0x3,
    -                    },
    -                },
    -                reserved11: u1,
    -                ///  Wait cycles between control frame transmit and data reception (in SCLK cycles)
    -                WAIT_CYCLES: u5,
    -                ///  SPI DDR transfer enable
    -                SPI_DDR_EN: u1,
    -                ///  Instruction DDR transfer enable
    -                INST_DDR_EN: u1,
    -                ///  Read data strobe enable
    -                SPI_RXDS_EN: u1,
    -                reserved24: u5,
    -                ///  SPI Command to send in XIP mode (INST_L = 8-bit) or to append to Address (INST_L = 0-bit)
    -                XIP_CMD: u8,
    -            }),
    -            ///  TX drive edge
    -            TXD_DRIVE_EDGE: mmio.Mmio(packed struct(u32) {
    -                ///  TXD drive edge
    -                TDE: u8,
    -                padding: u24,
    -            }),
    -        };
    -
    -        pub const SYSINFO = extern struct {
    -            ///  JEDEC JEP-106 compliant chip identifier.
    -            CHIP_ID: mmio.Mmio(packed struct(u32) {
    -                MANUFACTURER: u12,
    -                PART: u16,
    -                REVISION: u4,
    -            }),
    -            ///  Platform register. Allows software to know what environment it is running in.
    -            PLATFORM: mmio.Mmio(packed struct(u32) {
    -                FPGA: u1,
    -                ASIC: u1,
    -                padding: u30,
    -            }),
    -            reserved64: [56]u8,
    -            ///  Git hash of the chip source. Used to identify chip version.
    -            GITREF_RP2040: u32,
    -        };
    -
    -        ///  Register block for various chip control signals
    -        pub const SYSCFG = extern struct {
    -            ///  Processor core 0 NMI source mask
    -            ///  Set a bit high to enable NMI from that IRQ
    -            PROC0_NMI_MASK: u32,
    -            ///  Processor core 1 NMI source mask
    -            ///  Set a bit high to enable NMI from that IRQ
    -            PROC1_NMI_MASK: u32,
    -            ///  Configuration for processors
    -            PROC_CONFIG: mmio.Mmio(packed struct(u32) {
    -                ///  Indication that proc0 has halted
    -                PROC0_HALTED: u1,
    -                ///  Indication that proc1 has halted
    -                PROC1_HALTED: u1,
    -                reserved24: u22,
    -                ///  Configure proc0 DAP instance ID.
    -                ///  Recommend that this is NOT changed until you require debug access in multi-chip environment
    -                ///  WARNING: do not set to 15 as this is reserved for RescueDP
    -                PROC0_DAP_INSTID: u4,
    -                ///  Configure proc1 DAP instance ID.
    -                ///  Recommend that this is NOT changed until you require debug access in multi-chip environment
    -                ///  WARNING: do not set to 15 as this is reserved for RescueDP
    -                PROC1_DAP_INSTID: u4,
    -            }),
    -            ///  For each bit, if 1, bypass the input synchronizer between that GPIO
    -            ///  and the GPIO input register in the SIO. The input synchronizers should
    -            ///  generally be unbypassed, to avoid injecting metastabilities into processors.
    -            ///  If you're feeling brave, you can bypass to save two cycles of input
    -            ///  latency. This register applies to GPIO 0...29.
    -            PROC_IN_SYNC_BYPASS: mmio.Mmio(packed struct(u32) {
    -                PROC_IN_SYNC_BYPASS: u30,
    -                padding: u2,
    -            }),
    -            ///  For each bit, if 1, bypass the input synchronizer between that GPIO
    -            ///  and the GPIO input register in the SIO. The input synchronizers should
    -            ///  generally be unbypassed, to avoid injecting metastabilities into processors.
    -            ///  If you're feeling brave, you can bypass to save two cycles of input
    -            ///  latency. This register applies to GPIO 30...35 (the QSPI IOs).
    -            PROC_IN_SYNC_BYPASS_HI: mmio.Mmio(packed struct(u32) {
    -                PROC_IN_SYNC_BYPASS_HI: u6,
    -                padding: u26,
    -            }),
    -            ///  Directly control the SWD debug port of either processor
    -            DBGFORCE: mmio.Mmio(packed struct(u32) {
    -                ///  Observe the value of processor 0 SWDIO output.
    -                PROC0_SWDO: u1,
    -                ///  Directly drive processor 0 SWDIO input, if PROC0_ATTACH is set
    -                PROC0_SWDI: u1,
    -                ///  Directly drive processor 0 SWCLK, if PROC0_ATTACH is set
    -                PROC0_SWCLK: u1,
    -                ///  Attach processor 0 debug port to syscfg controls, and disconnect it from external SWD pads.
    -                PROC0_ATTACH: u1,
    -                ///  Observe the value of processor 1 SWDIO output.
    -                PROC1_SWDO: u1,
    -                ///  Directly drive processor 1 SWDIO input, if PROC1_ATTACH is set
    -                PROC1_SWDI: u1,
    -                ///  Directly drive processor 1 SWCLK, if PROC1_ATTACH is set
    -                PROC1_SWCLK: u1,
    -                ///  Attach processor 1 debug port to syscfg controls, and disconnect it from external SWD pads.
    -                PROC1_ATTACH: u1,
    -                padding: u24,
    -            }),
    -            ///  Control power downs to memories. Set high to power down memories.
    -            ///  Use with extreme caution
    -            MEMPOWERDOWN: mmio.Mmio(packed struct(u32) {
    -                SRAM0: u1,
    -                SRAM1: u1,
    -                SRAM2: u1,
    -                SRAM3: u1,
    -                SRAM4: u1,
    -                SRAM5: u1,
    -                USB: u1,
    -                ROM: u1,
    -                padding: u24,
    -            }),
    -        };
    -
    -        pub const CLOCKS = extern struct {
    -            ///  Clock control, can be changed on-the-fly (except for auxsrc)
    -            CLK_GPOUT0_CTRL: mmio.Mmio(packed struct(u32) {
    -                reserved5: u5,
    -                ///  Selects the auxiliary clock source, will glitch when switching
    -                AUXSRC: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        clksrc_pll_sys = 0x0,
    -                        clksrc_gpin0 = 0x1,
    -                        clksrc_gpin1 = 0x2,
    -                        clksrc_pll_usb = 0x3,
    -                        rosc_clksrc = 0x4,
    -                        xosc_clksrc = 0x5,
    -                        clk_sys = 0x6,
    -                        clk_usb = 0x7,
    -                        clk_adc = 0x8,
    -                        clk_rtc = 0x9,
    -                        clk_ref = 0xa,
    -                        _,
    -                    },
    -                },
    -                reserved10: u1,
    -                ///  Asynchronously kills the clock generator
    -                KILL: u1,
    -                ///  Starts and stops the clock generator cleanly
    -                ENABLE: u1,
    -                ///  Enables duty cycle correction for odd divisors
    -                DC50: u1,
    -                reserved16: u3,
    -                ///  This delays the enable signal by up to 3 cycles of the input clock
    -                ///  This must be set before the clock is enabled to have any effect
    -                PHASE: u2,
    -                reserved20: u2,
    -                ///  An edge on this signal shifts the phase of the output by 1 cycle of the input clock
    -                ///  This can be done at any time
    -                NUDGE: u1,
    -                padding: u11,
    -            }),
    -            ///  Clock divisor, can be changed on-the-fly
    -            CLK_GPOUT0_DIV: mmio.Mmio(packed struct(u32) {
    -                ///  Fractional component of the divisor
    -                FRAC: u8,
    -                ///  Integer component of the divisor, 0 -> divide by 2^16
    -                INT: u24,
    -            }),
    -            ///  Indicates which SRC is currently selected by the glitchless mux (one-hot).
    -            ///  This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1.
    -            CLK_GPOUT0_SELECTED: u32,
    -            ///  Clock control, can be changed on-the-fly (except for auxsrc)
    -            CLK_GPOUT1_CTRL: mmio.Mmio(packed struct(u32) {
    -                reserved5: u5,
    -                ///  Selects the auxiliary clock source, will glitch when switching
    -                AUXSRC: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        clksrc_pll_sys = 0x0,
    -                        clksrc_gpin0 = 0x1,
    -                        clksrc_gpin1 = 0x2,
    -                        clksrc_pll_usb = 0x3,
    -                        rosc_clksrc = 0x4,
    -                        xosc_clksrc = 0x5,
    -                        clk_sys = 0x6,
    -                        clk_usb = 0x7,
    -                        clk_adc = 0x8,
    -                        clk_rtc = 0x9,
    -                        clk_ref = 0xa,
    -                        _,
    -                    },
    -                },
    -                reserved10: u1,
    -                ///  Asynchronously kills the clock generator
    -                KILL: u1,
    -                ///  Starts and stops the clock generator cleanly
    -                ENABLE: u1,
    -                ///  Enables duty cycle correction for odd divisors
    -                DC50: u1,
    -                reserved16: u3,
    -                ///  This delays the enable signal by up to 3 cycles of the input clock
    -                ///  This must be set before the clock is enabled to have any effect
    -                PHASE: u2,
    -                reserved20: u2,
    -                ///  An edge on this signal shifts the phase of the output by 1 cycle of the input clock
    -                ///  This can be done at any time
    -                NUDGE: u1,
    -                padding: u11,
    -            }),
    -            ///  Clock divisor, can be changed on-the-fly
    -            CLK_GPOUT1_DIV: mmio.Mmio(packed struct(u32) {
    -                ///  Fractional component of the divisor
    -                FRAC: u8,
    -                ///  Integer component of the divisor, 0 -> divide by 2^16
    -                INT: u24,
    -            }),
    -            ///  Indicates which SRC is currently selected by the glitchless mux (one-hot).
    -            ///  This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1.
    -            CLK_GPOUT1_SELECTED: u32,
    -            ///  Clock control, can be changed on-the-fly (except for auxsrc)
    -            CLK_GPOUT2_CTRL: mmio.Mmio(packed struct(u32) {
    -                reserved5: u5,
    -                ///  Selects the auxiliary clock source, will glitch when switching
    -                AUXSRC: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        clksrc_pll_sys = 0x0,
    -                        clksrc_gpin0 = 0x1,
    -                        clksrc_gpin1 = 0x2,
    -                        clksrc_pll_usb = 0x3,
    -                        rosc_clksrc_ph = 0x4,
    -                        xosc_clksrc = 0x5,
    -                        clk_sys = 0x6,
    -                        clk_usb = 0x7,
    -                        clk_adc = 0x8,
    -                        clk_rtc = 0x9,
    -                        clk_ref = 0xa,
    -                        _,
    -                    },
    -                },
    -                reserved10: u1,
    -                ///  Asynchronously kills the clock generator
    -                KILL: u1,
    -                ///  Starts and stops the clock generator cleanly
    -                ENABLE: u1,
    -                ///  Enables duty cycle correction for odd divisors
    -                DC50: u1,
    -                reserved16: u3,
    -                ///  This delays the enable signal by up to 3 cycles of the input clock
    -                ///  This must be set before the clock is enabled to have any effect
    -                PHASE: u2,
    -                reserved20: u2,
    -                ///  An edge on this signal shifts the phase of the output by 1 cycle of the input clock
    -                ///  This can be done at any time
    -                NUDGE: u1,
    -                padding: u11,
    -            }),
    -            ///  Clock divisor, can be changed on-the-fly
    -            CLK_GPOUT2_DIV: mmio.Mmio(packed struct(u32) {
    -                ///  Fractional component of the divisor
    -                FRAC: u8,
    -                ///  Integer component of the divisor, 0 -> divide by 2^16
    -                INT: u24,
    -            }),
    -            ///  Indicates which SRC is currently selected by the glitchless mux (one-hot).
    -            ///  This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1.
    -            CLK_GPOUT2_SELECTED: u32,
    -            ///  Clock control, can be changed on-the-fly (except for auxsrc)
    -            CLK_GPOUT3_CTRL: mmio.Mmio(packed struct(u32) {
    -                reserved5: u5,
    -                ///  Selects the auxiliary clock source, will glitch when switching
    -                AUXSRC: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        clksrc_pll_sys = 0x0,
    -                        clksrc_gpin0 = 0x1,
    -                        clksrc_gpin1 = 0x2,
    -                        clksrc_pll_usb = 0x3,
    -                        rosc_clksrc_ph = 0x4,
    -                        xosc_clksrc = 0x5,
    -                        clk_sys = 0x6,
    -                        clk_usb = 0x7,
    -                        clk_adc = 0x8,
    -                        clk_rtc = 0x9,
    -                        clk_ref = 0xa,
    -                        _,
    -                    },
    -                },
    -                reserved10: u1,
    -                ///  Asynchronously kills the clock generator
    -                KILL: u1,
    -                ///  Starts and stops the clock generator cleanly
    -                ENABLE: u1,
    -                ///  Enables duty cycle correction for odd divisors
    -                DC50: u1,
    -                reserved16: u3,
    -                ///  This delays the enable signal by up to 3 cycles of the input clock
    -                ///  This must be set before the clock is enabled to have any effect
    -                PHASE: u2,
    -                reserved20: u2,
    -                ///  An edge on this signal shifts the phase of the output by 1 cycle of the input clock
    -                ///  This can be done at any time
    -                NUDGE: u1,
    -                padding: u11,
    -            }),
    -            ///  Clock divisor, can be changed on-the-fly
    -            CLK_GPOUT3_DIV: mmio.Mmio(packed struct(u32) {
    -                ///  Fractional component of the divisor
    -                FRAC: u8,
    -                ///  Integer component of the divisor, 0 -> divide by 2^16
    -                INT: u24,
    -            }),
    -            ///  Indicates which SRC is currently selected by the glitchless mux (one-hot).
    -            ///  This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1.
    -            CLK_GPOUT3_SELECTED: u32,
    -            ///  Clock control, can be changed on-the-fly (except for auxsrc)
    -            CLK_REF_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  Selects the clock source glitchlessly, can be changed on-the-fly
    -                SRC: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        rosc_clksrc_ph = 0x0,
    -                        clksrc_clk_ref_aux = 0x1,
    -                        xosc_clksrc = 0x2,
    -                        _,
    -                    },
    -                },
    -                reserved5: u3,
    -                ///  Selects the auxiliary clock source, will glitch when switching
    -                AUXSRC: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        clksrc_pll_usb = 0x0,
    -                        clksrc_gpin0 = 0x1,
    -                        clksrc_gpin1 = 0x2,
    -                        _,
    -                    },
    -                },
    -                padding: u25,
    -            }),
    -            ///  Clock divisor, can be changed on-the-fly
    -            CLK_REF_DIV: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  Integer component of the divisor, 0 -> divide by 2^16
    -                INT: u2,
    -                padding: u22,
    -            }),
    -            ///  Indicates which SRC is currently selected by the glitchless mux (one-hot).
    -            ///  The glitchless multiplexer does not switch instantaneously (to avoid glitches), so software should poll this register to wait for the switch to complete. This register contains one decoded bit for each of the clock sources enumerated in the CTRL SRC field. At most one of these bits will be set at any time, indicating that clock is currently present at the output of the glitchless mux. Whilst switching is in progress, this register may briefly show all-0s.
    -            CLK_REF_SELECTED: u32,
    -            ///  Clock control, can be changed on-the-fly (except for auxsrc)
    -            CLK_SYS_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  Selects the clock source glitchlessly, can be changed on-the-fly
    -                SRC: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        clk_ref = 0x0,
    -                        clksrc_clk_sys_aux = 0x1,
    -                    },
    -                },
    -                reserved5: u4,
    -                ///  Selects the auxiliary clock source, will glitch when switching
    -                AUXSRC: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        clksrc_pll_sys = 0x0,
    -                        clksrc_pll_usb = 0x1,
    -                        rosc_clksrc = 0x2,
    -                        xosc_clksrc = 0x3,
    -                        clksrc_gpin0 = 0x4,
    -                        clksrc_gpin1 = 0x5,
    -                        _,
    -                    },
    -                },
    -                padding: u24,
    -            }),
    -            ///  Clock divisor, can be changed on-the-fly
    -            CLK_SYS_DIV: mmio.Mmio(packed struct(u32) {
    -                ///  Fractional component of the divisor
    -                FRAC: u8,
    -                ///  Integer component of the divisor, 0 -> divide by 2^16
    -                INT: u24,
    -            }),
    -            ///  Indicates which SRC is currently selected by the glitchless mux (one-hot).
    -            ///  The glitchless multiplexer does not switch instantaneously (to avoid glitches), so software should poll this register to wait for the switch to complete. This register contains one decoded bit for each of the clock sources enumerated in the CTRL SRC field. At most one of these bits will be set at any time, indicating that clock is currently present at the output of the glitchless mux. Whilst switching is in progress, this register may briefly show all-0s.
    -            CLK_SYS_SELECTED: u32,
    -            ///  Clock control, can be changed on-the-fly (except for auxsrc)
    -            CLK_PERI_CTRL: mmio.Mmio(packed struct(u32) {
    -                reserved5: u5,
    -                ///  Selects the auxiliary clock source, will glitch when switching
    -                AUXSRC: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        clk_sys = 0x0,
    -                        clksrc_pll_sys = 0x1,
    -                        clksrc_pll_usb = 0x2,
    -                        rosc_clksrc_ph = 0x3,
    -                        xosc_clksrc = 0x4,
    -                        clksrc_gpin0 = 0x5,
    -                        clksrc_gpin1 = 0x6,
    -                        _,
    -                    },
    -                },
    -                reserved10: u2,
    -                ///  Asynchronously kills the clock generator
    -                KILL: u1,
    -                ///  Starts and stops the clock generator cleanly
    -                ENABLE: u1,
    -                padding: u20,
    -            }),
    -            reserved80: [4]u8,
    -            ///  Indicates which SRC is currently selected by the glitchless mux (one-hot).
    -            ///  This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1.
    -            CLK_PERI_SELECTED: u32,
    -            ///  Clock control, can be changed on-the-fly (except for auxsrc)
    -            CLK_USB_CTRL: mmio.Mmio(packed struct(u32) {
    -                reserved5: u5,
    -                ///  Selects the auxiliary clock source, will glitch when switching
    -                AUXSRC: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        clksrc_pll_usb = 0x0,
    -                        clksrc_pll_sys = 0x1,
    -                        rosc_clksrc_ph = 0x2,
    -                        xosc_clksrc = 0x3,
    -                        clksrc_gpin0 = 0x4,
    -                        clksrc_gpin1 = 0x5,
    -                        _,
    -                    },
    -                },
    -                reserved10: u2,
    -                ///  Asynchronously kills the clock generator
    -                KILL: u1,
    -                ///  Starts and stops the clock generator cleanly
    -                ENABLE: u1,
    -                reserved16: u4,
    -                ///  This delays the enable signal by up to 3 cycles of the input clock
    -                ///  This must be set before the clock is enabled to have any effect
    -                PHASE: u2,
    -                reserved20: u2,
    -                ///  An edge on this signal shifts the phase of the output by 1 cycle of the input clock
    -                ///  This can be done at any time
    -                NUDGE: u1,
    -                padding: u11,
    -            }),
    -            ///  Clock divisor, can be changed on-the-fly
    -            CLK_USB_DIV: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  Integer component of the divisor, 0 -> divide by 2^16
    -                INT: u2,
    -                padding: u22,
    -            }),
    -            ///  Indicates which SRC is currently selected by the glitchless mux (one-hot).
    -            ///  This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1.
    -            CLK_USB_SELECTED: u32,
    -            ///  Clock control, can be changed on-the-fly (except for auxsrc)
    -            CLK_ADC_CTRL: mmio.Mmio(packed struct(u32) {
    -                reserved5: u5,
    -                ///  Selects the auxiliary clock source, will glitch when switching
    -                AUXSRC: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        clksrc_pll_usb = 0x0,
    -                        clksrc_pll_sys = 0x1,
    -                        rosc_clksrc_ph = 0x2,
    -                        xosc_clksrc = 0x3,
    -                        clksrc_gpin0 = 0x4,
    -                        clksrc_gpin1 = 0x5,
    -                        _,
    -                    },
    -                },
    -                reserved10: u2,
    -                ///  Asynchronously kills the clock generator
    -                KILL: u1,
    -                ///  Starts and stops the clock generator cleanly
    -                ENABLE: u1,
    -                reserved16: u4,
    -                ///  This delays the enable signal by up to 3 cycles of the input clock
    -                ///  This must be set before the clock is enabled to have any effect
    -                PHASE: u2,
    -                reserved20: u2,
    -                ///  An edge on this signal shifts the phase of the output by 1 cycle of the input clock
    -                ///  This can be done at any time
    -                NUDGE: u1,
    -                padding: u11,
    -            }),
    -            ///  Clock divisor, can be changed on-the-fly
    -            CLK_ADC_DIV: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  Integer component of the divisor, 0 -> divide by 2^16
    -                INT: u2,
    -                padding: u22,
    -            }),
    -            ///  Indicates which SRC is currently selected by the glitchless mux (one-hot).
    -            ///  This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1.
    -            CLK_ADC_SELECTED: u32,
    -            ///  Clock control, can be changed on-the-fly (except for auxsrc)
    -            CLK_RTC_CTRL: mmio.Mmio(packed struct(u32) {
    -                reserved5: u5,
    -                ///  Selects the auxiliary clock source, will glitch when switching
    -                AUXSRC: packed union {
    -                    raw: u3,
    -                    value: enum(u3) {
    -                        clksrc_pll_usb = 0x0,
    -                        clksrc_pll_sys = 0x1,
    -                        rosc_clksrc_ph = 0x2,
    -                        xosc_clksrc = 0x3,
    -                        clksrc_gpin0 = 0x4,
    -                        clksrc_gpin1 = 0x5,
    -                        _,
    -                    },
    -                },
    -                reserved10: u2,
    -                ///  Asynchronously kills the clock generator
    -                KILL: u1,
    -                ///  Starts and stops the clock generator cleanly
    -                ENABLE: u1,
    -                reserved16: u4,
    -                ///  This delays the enable signal by up to 3 cycles of the input clock
    -                ///  This must be set before the clock is enabled to have any effect
    -                PHASE: u2,
    -                reserved20: u2,
    -                ///  An edge on this signal shifts the phase of the output by 1 cycle of the input clock
    -                ///  This can be done at any time
    -                NUDGE: u1,
    -                padding: u11,
    -            }),
    -            ///  Clock divisor, can be changed on-the-fly
    -            CLK_RTC_DIV: mmio.Mmio(packed struct(u32) {
    -                ///  Fractional component of the divisor
    -                FRAC: u8,
    -                ///  Integer component of the divisor, 0 -> divide by 2^16
    -                INT: u24,
    -            }),
    -            ///  Indicates which SRC is currently selected by the glitchless mux (one-hot).
    -            ///  This slice does not have a glitchless mux (only the AUX_SRC field is present, not SRC) so this register is hardwired to 0x1.
    -            CLK_RTC_SELECTED: u32,
    -            CLK_SYS_RESUS_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  This is expressed as a number of clk_ref cycles
    -                ///  and must be >= 2x clk_ref_freq/min_clk_tst_freq
    -                TIMEOUT: u8,
    -                ///  Enable resus
    -                ENABLE: u1,
    -                reserved12: u3,
    -                ///  Force a resus, for test purposes only
    -                FRCE: u1,
    -                reserved16: u3,
    -                ///  For clearing the resus after the fault that triggered it has been corrected
    -                CLEAR: u1,
    -                padding: u15,
    -            }),
    -            CLK_SYS_RESUS_STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  Clock has been resuscitated, correct the error then send ctrl_clear=1
    -                RESUSSED: u1,
    -                padding: u31,
    -            }),
    -            ///  Reference clock frequency in kHz
    -            FC0_REF_KHZ: mmio.Mmio(packed struct(u32) {
    -                FC0_REF_KHZ: u20,
    -                padding: u12,
    -            }),
    -            ///  Minimum pass frequency in kHz. This is optional. Set to 0 if you are not using the pass/fail flags
    -            FC0_MIN_KHZ: mmio.Mmio(packed struct(u32) {
    -                FC0_MIN_KHZ: u25,
    -                padding: u7,
    -            }),
    -            ///  Maximum pass frequency in kHz. This is optional. Set to 0x1ffffff if you are not using the pass/fail flags
    -            FC0_MAX_KHZ: mmio.Mmio(packed struct(u32) {
    -                FC0_MAX_KHZ: u25,
    -                padding: u7,
    -            }),
    -            ///  Delays the start of frequency counting to allow the mux to settle
    -            ///  Delay is measured in multiples of the reference clock period
    -            FC0_DELAY: mmio.Mmio(packed struct(u32) {
    -                FC0_DELAY: u3,
    -                padding: u29,
    -            }),
    -            ///  The test interval is 0.98us * 2**interval, but let's call it 1us * 2**interval
    -            ///  The default gives a test interval of 250us
    -            FC0_INTERVAL: mmio.Mmio(packed struct(u32) {
    -                FC0_INTERVAL: u4,
    -                padding: u28,
    -            }),
    -            ///  Clock sent to frequency counter, set to 0 when not required
    -            ///  Writing to this register initiates the frequency count
    -            FC0_SRC: mmio.Mmio(packed struct(u32) {
    -                FC0_SRC: packed union {
    -                    raw: u8,
    -                    value: enum(u8) {
    -                        NULL = 0x0,
    -                        pll_sys_clksrc_primary = 0x1,
    -                        pll_usb_clksrc_primary = 0x2,
    -                        rosc_clksrc = 0x3,
    -                        rosc_clksrc_ph = 0x4,
    -                        xosc_clksrc = 0x5,
    -                        clksrc_gpin0 = 0x6,
    -                        clksrc_gpin1 = 0x7,
    -                        clk_ref = 0x8,
    -                        clk_sys = 0x9,
    -                        clk_peri = 0xa,
    -                        clk_usb = 0xb,
    -                        clk_adc = 0xc,
    -                        clk_rtc = 0xd,
    -                        _,
    -                    },
    -                },
    -                padding: u24,
    -            }),
    -            ///  Frequency counter status
    -            FC0_STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  Test passed
    -                PASS: u1,
    -                reserved4: u3,
    -                ///  Test complete
    -                DONE: u1,
    -                reserved8: u3,
    -                ///  Test running
    -                RUNNING: u1,
    -                reserved12: u3,
    -                ///  Waiting for test clock to start
    -                WAITING: u1,
    -                reserved16: u3,
    -                ///  Test failed
    -                FAIL: u1,
    -                reserved20: u3,
    -                ///  Test clock slower than expected, only valid when status_done=1
    -                SLOW: u1,
    -                reserved24: u3,
    -                ///  Test clock faster than expected, only valid when status_done=1
    -                FAST: u1,
    -                reserved28: u3,
    -                ///  Test clock stopped during test
    -                DIED: u1,
    -                padding: u3,
    -            }),
    -            ///  Result of frequency measurement, only valid when status_done=1
    -            FC0_RESULT: mmio.Mmio(packed struct(u32) {
    -                FRAC: u5,
    -                KHZ: u25,
    -                padding: u2,
    -            }),
    -            ///  enable clock in wake mode
    -            WAKE_EN0: mmio.Mmio(packed struct(u32) {
    -                clk_sys_clocks: u1,
    -                clk_adc_adc: u1,
    -                clk_sys_adc: u1,
    -                clk_sys_busctrl: u1,
    -                clk_sys_busfabric: u1,
    -                clk_sys_dma: u1,
    -                clk_sys_i2c0: u1,
    -                clk_sys_i2c1: u1,
    -                clk_sys_io: u1,
    -                clk_sys_jtag: u1,
    -                clk_sys_vreg_and_chip_reset: u1,
    -                clk_sys_pads: u1,
    -                clk_sys_pio0: u1,
    -                clk_sys_pio1: u1,
    -                clk_sys_pll_sys: u1,
    -                clk_sys_pll_usb: u1,
    -                clk_sys_psm: u1,
    -                clk_sys_pwm: u1,
    -                clk_sys_resets: u1,
    -                clk_sys_rom: u1,
    -                clk_sys_rosc: u1,
    -                clk_rtc_rtc: u1,
    -                clk_sys_rtc: u1,
    -                clk_sys_sio: u1,
    -                clk_peri_spi0: u1,
    -                clk_sys_spi0: u1,
    -                clk_peri_spi1: u1,
    -                clk_sys_spi1: u1,
    -                clk_sys_sram0: u1,
    -                clk_sys_sram1: u1,
    -                clk_sys_sram2: u1,
    -                clk_sys_sram3: u1,
    -            }),
    -            ///  enable clock in wake mode
    -            WAKE_EN1: mmio.Mmio(packed struct(u32) {
    -                clk_sys_sram4: u1,
    -                clk_sys_sram5: u1,
    -                clk_sys_syscfg: u1,
    -                clk_sys_sysinfo: u1,
    -                clk_sys_tbman: u1,
    -                clk_sys_timer: u1,
    -                clk_peri_uart0: u1,
    -                clk_sys_uart0: u1,
    -                clk_peri_uart1: u1,
    -                clk_sys_uart1: u1,
    -                clk_sys_usbctrl: u1,
    -                clk_usb_usbctrl: u1,
    -                clk_sys_watchdog: u1,
    -                clk_sys_xip: u1,
    -                clk_sys_xosc: u1,
    -                padding: u17,
    -            }),
    -            ///  enable clock in sleep mode
    -            SLEEP_EN0: mmio.Mmio(packed struct(u32) {
    -                clk_sys_clocks: u1,
    -                clk_adc_adc: u1,
    -                clk_sys_adc: u1,
    -                clk_sys_busctrl: u1,
    -                clk_sys_busfabric: u1,
    -                clk_sys_dma: u1,
    -                clk_sys_i2c0: u1,
    -                clk_sys_i2c1: u1,
    -                clk_sys_io: u1,
    -                clk_sys_jtag: u1,
    -                clk_sys_vreg_and_chip_reset: u1,
    -                clk_sys_pads: u1,
    -                clk_sys_pio0: u1,
    -                clk_sys_pio1: u1,
    -                clk_sys_pll_sys: u1,
    -                clk_sys_pll_usb: u1,
    -                clk_sys_psm: u1,
    -                clk_sys_pwm: u1,
    -                clk_sys_resets: u1,
    -                clk_sys_rom: u1,
    -                clk_sys_rosc: u1,
    -                clk_rtc_rtc: u1,
    -                clk_sys_rtc: u1,
    -                clk_sys_sio: u1,
    -                clk_peri_spi0: u1,
    -                clk_sys_spi0: u1,
    -                clk_peri_spi1: u1,
    -                clk_sys_spi1: u1,
    -                clk_sys_sram0: u1,
    -                clk_sys_sram1: u1,
    -                clk_sys_sram2: u1,
    -                clk_sys_sram3: u1,
    -            }),
    -            ///  enable clock in sleep mode
    -            SLEEP_EN1: mmio.Mmio(packed struct(u32) {
    -                clk_sys_sram4: u1,
    -                clk_sys_sram5: u1,
    -                clk_sys_syscfg: u1,
    -                clk_sys_sysinfo: u1,
    -                clk_sys_tbman: u1,
    -                clk_sys_timer: u1,
    -                clk_peri_uart0: u1,
    -                clk_sys_uart0: u1,
    -                clk_peri_uart1: u1,
    -                clk_sys_uart1: u1,
    -                clk_sys_usbctrl: u1,
    -                clk_usb_usbctrl: u1,
    -                clk_sys_watchdog: u1,
    -                clk_sys_xip: u1,
    -                clk_sys_xosc: u1,
    -                padding: u17,
    -            }),
    -            ///  indicates the state of the clock enable
    -            ENABLED0: mmio.Mmio(packed struct(u32) {
    -                clk_sys_clocks: u1,
    -                clk_adc_adc: u1,
    -                clk_sys_adc: u1,
    -                clk_sys_busctrl: u1,
    -                clk_sys_busfabric: u1,
    -                clk_sys_dma: u1,
    -                clk_sys_i2c0: u1,
    -                clk_sys_i2c1: u1,
    -                clk_sys_io: u1,
    -                clk_sys_jtag: u1,
    -                clk_sys_vreg_and_chip_reset: u1,
    -                clk_sys_pads: u1,
    -                clk_sys_pio0: u1,
    -                clk_sys_pio1: u1,
    -                clk_sys_pll_sys: u1,
    -                clk_sys_pll_usb: u1,
    -                clk_sys_psm: u1,
    -                clk_sys_pwm: u1,
    -                clk_sys_resets: u1,
    -                clk_sys_rom: u1,
    -                clk_sys_rosc: u1,
    -                clk_rtc_rtc: u1,
    -                clk_sys_rtc: u1,
    -                clk_sys_sio: u1,
    -                clk_peri_spi0: u1,
    -                clk_sys_spi0: u1,
    -                clk_peri_spi1: u1,
    -                clk_sys_spi1: u1,
    -                clk_sys_sram0: u1,
    -                clk_sys_sram1: u1,
    -                clk_sys_sram2: u1,
    -                clk_sys_sram3: u1,
    -            }),
    -            ///  indicates the state of the clock enable
    -            ENABLED1: mmio.Mmio(packed struct(u32) {
    -                clk_sys_sram4: u1,
    -                clk_sys_sram5: u1,
    -                clk_sys_syscfg: u1,
    -                clk_sys_sysinfo: u1,
    -                clk_sys_tbman: u1,
    -                clk_sys_timer: u1,
    -                clk_peri_uart0: u1,
    -                clk_sys_uart0: u1,
    -                clk_peri_uart1: u1,
    -                clk_sys_uart1: u1,
    -                clk_sys_usbctrl: u1,
    -                clk_usb_usbctrl: u1,
    -                clk_sys_watchdog: u1,
    -                clk_sys_xip: u1,
    -                clk_sys_xosc: u1,
    -                padding: u17,
    -            }),
    -            ///  Raw Interrupts
    -            INTR: mmio.Mmio(packed struct(u32) {
    -                CLK_SYS_RESUS: u1,
    -                padding: u31,
    -            }),
    -            ///  Interrupt Enable
    -            INTE: mmio.Mmio(packed struct(u32) {
    -                CLK_SYS_RESUS: u1,
    -                padding: u31,
    -            }),
    -            ///  Interrupt Force
    -            INTF: mmio.Mmio(packed struct(u32) {
    -                CLK_SYS_RESUS: u1,
    -                padding: u31,
    -            }),
    -            ///  Interrupt status after masking & forcing
    -            INTS: mmio.Mmio(packed struct(u32) {
    -                CLK_SYS_RESUS: u1,
    -                padding: u31,
    -            }),
    -        };
    -
    -        pub const RESETS = extern struct {
    -            ///  Reset control. If a bit is set it means the peripheral is in reset. 0 means the peripheral's reset is deasserted.
    -            RESET: mmio.Mmio(packed struct(u32) {
    -                adc: u1,
    -                busctrl: u1,
    -                dma: u1,
    -                i2c0: u1,
    -                i2c1: u1,
    -                io_bank0: u1,
    -                io_qspi: u1,
    -                jtag: u1,
    -                pads_bank0: u1,
    -                pads_qspi: u1,
    -                pio0: u1,
    -                pio1: u1,
    -                pll_sys: u1,
    -                pll_usb: u1,
    -                pwm: u1,
    -                rtc: u1,
    -                spi0: u1,
    -                spi1: u1,
    -                syscfg: u1,
    -                sysinfo: u1,
    -                tbman: u1,
    -                timer: u1,
    -                uart0: u1,
    -                uart1: u1,
    -                usbctrl: u1,
    -                padding: u7,
    -            }),
    -            ///  Watchdog select. If a bit is set then the watchdog will reset this peripheral when the watchdog fires.
    -            WDSEL: mmio.Mmio(packed struct(u32) {
    -                adc: u1,
    -                busctrl: u1,
    -                dma: u1,
    -                i2c0: u1,
    -                i2c1: u1,
    -                io_bank0: u1,
    -                io_qspi: u1,
    -                jtag: u1,
    -                pads_bank0: u1,
    -                pads_qspi: u1,
    -                pio0: u1,
    -                pio1: u1,
    -                pll_sys: u1,
    -                pll_usb: u1,
    -                pwm: u1,
    -                rtc: u1,
    -                spi0: u1,
    -                spi1: u1,
    -                syscfg: u1,
    -                sysinfo: u1,
    -                tbman: u1,
    -                timer: u1,
    -                uart0: u1,
    -                uart1: u1,
    -                usbctrl: u1,
    -                padding: u7,
    -            }),
    -            ///  Reset done. If a bit is set then a reset done signal has been returned by the peripheral. This indicates that the peripheral's registers are ready to be accessed.
    -            RESET_DONE: mmio.Mmio(packed struct(u32) {
    -                adc: u1,
    -                busctrl: u1,
    -                dma: u1,
    -                i2c0: u1,
    -                i2c1: u1,
    -                io_bank0: u1,
    -                io_qspi: u1,
    -                jtag: u1,
    -                pads_bank0: u1,
    -                pads_qspi: u1,
    -                pio0: u1,
    -                pio1: u1,
    -                pll_sys: u1,
    -                pll_usb: u1,
    -                pwm: u1,
    -                rtc: u1,
    -                spi0: u1,
    -                spi1: u1,
    -                syscfg: u1,
    -                sysinfo: u1,
    -                tbman: u1,
    -                timer: u1,
    -                uart0: u1,
    -                uart1: u1,
    -                usbctrl: u1,
    -                padding: u7,
    -            }),
    -        };
    -
    -        pub const PSM = extern struct {
    -            ///  Force block out of reset (i.e. power it on)
    -            FRCE_ON: mmio.Mmio(packed struct(u32) {
    -                rosc: u1,
    -                xosc: u1,
    -                clocks: u1,
    -                resets: u1,
    -                busfabric: u1,
    -                rom: u1,
    -                sram0: u1,
    -                sram1: u1,
    -                sram2: u1,
    -                sram3: u1,
    -                sram4: u1,
    -                sram5: u1,
    -                xip: u1,
    -                vreg_and_chip_reset: u1,
    -                sio: u1,
    -                proc0: u1,
    -                proc1: u1,
    -                padding: u15,
    -            }),
    -            ///  Force into reset (i.e. power it off)
    -            FRCE_OFF: mmio.Mmio(packed struct(u32) {
    -                rosc: u1,
    -                xosc: u1,
    -                clocks: u1,
    -                resets: u1,
    -                busfabric: u1,
    -                rom: u1,
    -                sram0: u1,
    -                sram1: u1,
    -                sram2: u1,
    -                sram3: u1,
    -                sram4: u1,
    -                sram5: u1,
    -                xip: u1,
    -                vreg_and_chip_reset: u1,
    -                sio: u1,
    -                proc0: u1,
    -                proc1: u1,
    -                padding: u15,
    -            }),
    -            ///  Set to 1 if this peripheral should be reset when the watchdog fires.
    -            WDSEL: mmio.Mmio(packed struct(u32) {
    -                rosc: u1,
    -                xosc: u1,
    -                clocks: u1,
    -                resets: u1,
    -                busfabric: u1,
    -                rom: u1,
    -                sram0: u1,
    -                sram1: u1,
    -                sram2: u1,
    -                sram3: u1,
    -                sram4: u1,
    -                sram5: u1,
    -                xip: u1,
    -                vreg_and_chip_reset: u1,
    -                sio: u1,
    -                proc0: u1,
    -                proc1: u1,
    -                padding: u15,
    -            }),
    -            ///  Indicates the peripheral's registers are ready to access.
    -            DONE: mmio.Mmio(packed struct(u32) {
    -                rosc: u1,
    -                xosc: u1,
    -                clocks: u1,
    -                resets: u1,
    -                busfabric: u1,
    -                rom: u1,
    -                sram0: u1,
    -                sram1: u1,
    -                sram2: u1,
    -                sram3: u1,
    -                sram4: u1,
    -                sram5: u1,
    -                xip: u1,
    -                vreg_and_chip_reset: u1,
    -                sio: u1,
    -                proc0: u1,
    -                proc1: u1,
    -                padding: u15,
    -            }),
    -        };
    -
    -        pub const IO_BANK0 = extern struct {
    -            ///  GPIO status
    -            GPIO0_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO0_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        jtag_tck = 0x0,
    -                        spi0_rx = 0x1,
    -                        uart0_tx = 0x2,
    -                        i2c0_sda = 0x3,
    -                        pwm_a_0 = 0x4,
    -                        sio_0 = 0x5,
    -                        pio0_0 = 0x6,
    -                        pio1_0 = 0x7,
    -                        usb_muxing_overcurr_detect = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO1_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO1_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        jtag_tms = 0x0,
    -                        spi0_ss_n = 0x1,
    -                        uart0_rx = 0x2,
    -                        i2c0_scl = 0x3,
    -                        pwm_b_0 = 0x4,
    -                        sio_1 = 0x5,
    -                        pio0_1 = 0x6,
    -                        pio1_1 = 0x7,
    -                        usb_muxing_vbus_detect = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO2_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO2_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        jtag_tdi = 0x0,
    -                        spi0_sclk = 0x1,
    -                        uart0_cts = 0x2,
    -                        i2c1_sda = 0x3,
    -                        pwm_a_1 = 0x4,
    -                        sio_2 = 0x5,
    -                        pio0_2 = 0x6,
    -                        pio1_2 = 0x7,
    -                        usb_muxing_vbus_en = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO3_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO3_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        jtag_tdo = 0x0,
    -                        spi0_tx = 0x1,
    -                        uart0_rts = 0x2,
    -                        i2c1_scl = 0x3,
    -                        pwm_b_1 = 0x4,
    -                        sio_3 = 0x5,
    -                        pio0_3 = 0x6,
    -                        pio1_3 = 0x7,
    -                        usb_muxing_overcurr_detect = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO4_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO4_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        spi0_rx = 0x1,
    -                        uart1_tx = 0x2,
    -                        i2c0_sda = 0x3,
    -                        pwm_a_2 = 0x4,
    -                        sio_4 = 0x5,
    -                        pio0_4 = 0x6,
    -                        pio1_4 = 0x7,
    -                        usb_muxing_vbus_detect = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO5_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO5_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        spi0_ss_n = 0x1,
    -                        uart1_rx = 0x2,
    -                        i2c0_scl = 0x3,
    -                        pwm_b_2 = 0x4,
    -                        sio_5 = 0x5,
    -                        pio0_5 = 0x6,
    -                        pio1_5 = 0x7,
    -                        usb_muxing_vbus_en = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO6_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO6_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        spi0_sclk = 0x1,
    -                        uart1_cts = 0x2,
    -                        i2c1_sda = 0x3,
    -                        pwm_a_3 = 0x4,
    -                        sio_6 = 0x5,
    -                        pio0_6 = 0x6,
    -                        pio1_6 = 0x7,
    -                        usb_muxing_extphy_softcon = 0x8,
    -                        usb_muxing_overcurr_detect = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO7_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO7_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        spi0_tx = 0x1,
    -                        uart1_rts = 0x2,
    -                        i2c1_scl = 0x3,
    -                        pwm_b_3 = 0x4,
    -                        sio_7 = 0x5,
    -                        pio0_7 = 0x6,
    -                        pio1_7 = 0x7,
    -                        usb_muxing_extphy_oe_n = 0x8,
    -                        usb_muxing_vbus_detect = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO8_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO8_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        spi1_rx = 0x1,
    -                        uart1_tx = 0x2,
    -                        i2c0_sda = 0x3,
    -                        pwm_a_4 = 0x4,
    -                        sio_8 = 0x5,
    -                        pio0_8 = 0x6,
    -                        pio1_8 = 0x7,
    -                        usb_muxing_extphy_rcv = 0x8,
    -                        usb_muxing_vbus_en = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO9_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO9_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        spi1_ss_n = 0x1,
    -                        uart1_rx = 0x2,
    -                        i2c0_scl = 0x3,
    -                        pwm_b_4 = 0x4,
    -                        sio_9 = 0x5,
    -                        pio0_9 = 0x6,
    -                        pio1_9 = 0x7,
    -                        usb_muxing_extphy_vp = 0x8,
    -                        usb_muxing_overcurr_detect = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO10_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO10_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        spi1_sclk = 0x1,
    -                        uart1_cts = 0x2,
    -                        i2c1_sda = 0x3,
    -                        pwm_a_5 = 0x4,
    -                        sio_10 = 0x5,
    -                        pio0_10 = 0x6,
    -                        pio1_10 = 0x7,
    -                        usb_muxing_extphy_vm = 0x8,
    -                        usb_muxing_vbus_detect = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO11_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO11_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        spi1_tx = 0x1,
    -                        uart1_rts = 0x2,
    -                        i2c1_scl = 0x3,
    -                        pwm_b_5 = 0x4,
    -                        sio_11 = 0x5,
    -                        pio0_11 = 0x6,
    -                        pio1_11 = 0x7,
    -                        usb_muxing_extphy_suspnd = 0x8,
    -                        usb_muxing_vbus_en = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO12_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO12_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        spi1_rx = 0x1,
    -                        uart0_tx = 0x2,
    -                        i2c0_sda = 0x3,
    -                        pwm_a_6 = 0x4,
    -                        sio_12 = 0x5,
    -                        pio0_12 = 0x6,
    -                        pio1_12 = 0x7,
    -                        usb_muxing_extphy_speed = 0x8,
    -                        usb_muxing_overcurr_detect = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO13_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO13_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        spi1_ss_n = 0x1,
    -                        uart0_rx = 0x2,
    -                        i2c0_scl = 0x3,
    -                        pwm_b_6 = 0x4,
    -                        sio_13 = 0x5,
    -                        pio0_13 = 0x6,
    -                        pio1_13 = 0x7,
    -                        usb_muxing_extphy_vpo = 0x8,
    -                        usb_muxing_vbus_detect = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO14_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO14_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        spi1_sclk = 0x1,
    -                        uart0_cts = 0x2,
    -                        i2c1_sda = 0x3,
    -                        pwm_a_7 = 0x4,
    -                        sio_14 = 0x5,
    -                        pio0_14 = 0x6,
    -                        pio1_14 = 0x7,
    -                        usb_muxing_extphy_vmo = 0x8,
    -                        usb_muxing_vbus_en = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO15_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO15_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        spi1_tx = 0x1,
    -                        uart0_rts = 0x2,
    -                        i2c1_scl = 0x3,
    -                        pwm_b_7 = 0x4,
    -                        sio_15 = 0x5,
    -                        pio0_15 = 0x6,
    -                        pio1_15 = 0x7,
    -                        usb_muxing_digital_dp = 0x8,
    -                        usb_muxing_overcurr_detect = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO16_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO16_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        spi0_rx = 0x1,
    -                        uart0_tx = 0x2,
    -                        i2c0_sda = 0x3,
    -                        pwm_a_0 = 0x4,
    -                        sio_16 = 0x5,
    -                        pio0_16 = 0x6,
    -                        pio1_16 = 0x7,
    -                        usb_muxing_digital_dm = 0x8,
    -                        usb_muxing_vbus_detect = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO17_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO17_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        spi0_ss_n = 0x1,
    -                        uart0_rx = 0x2,
    -                        i2c0_scl = 0x3,
    -                        pwm_b_0 = 0x4,
    -                        sio_17 = 0x5,
    -                        pio0_17 = 0x6,
    -                        pio1_17 = 0x7,
    -                        usb_muxing_vbus_en = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO18_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO18_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        spi0_sclk = 0x1,
    -                        uart0_cts = 0x2,
    -                        i2c1_sda = 0x3,
    -                        pwm_a_1 = 0x4,
    -                        sio_18 = 0x5,
    -                        pio0_18 = 0x6,
    -                        pio1_18 = 0x7,
    -                        usb_muxing_overcurr_detect = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO19_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO19_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        spi0_tx = 0x1,
    -                        uart0_rts = 0x2,
    -                        i2c1_scl = 0x3,
    -                        pwm_b_1 = 0x4,
    -                        sio_19 = 0x5,
    -                        pio0_19 = 0x6,
    -                        pio1_19 = 0x7,
    -                        usb_muxing_vbus_detect = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO20_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO20_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        spi0_rx = 0x1,
    -                        uart1_tx = 0x2,
    -                        i2c0_sda = 0x3,
    -                        pwm_a_2 = 0x4,
    -                        sio_20 = 0x5,
    -                        pio0_20 = 0x6,
    -                        pio1_20 = 0x7,
    -                        clocks_gpin_0 = 0x8,
    -                        usb_muxing_vbus_en = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO21_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO21_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        spi0_ss_n = 0x1,
    -                        uart1_rx = 0x2,
    -                        i2c0_scl = 0x3,
    -                        pwm_b_2 = 0x4,
    -                        sio_21 = 0x5,
    -                        pio0_21 = 0x6,
    -                        pio1_21 = 0x7,
    -                        clocks_gpout_0 = 0x8,
    -                        usb_muxing_overcurr_detect = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO22_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO22_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        spi0_sclk = 0x1,
    -                        uart1_cts = 0x2,
    -                        i2c1_sda = 0x3,
    -                        pwm_a_3 = 0x4,
    -                        sio_22 = 0x5,
    -                        pio0_22 = 0x6,
    -                        pio1_22 = 0x7,
    -                        clocks_gpin_1 = 0x8,
    -                        usb_muxing_vbus_detect = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO23_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO23_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        spi0_tx = 0x1,
    -                        uart1_rts = 0x2,
    -                        i2c1_scl = 0x3,
    -                        pwm_b_3 = 0x4,
    -                        sio_23 = 0x5,
    -                        pio0_23 = 0x6,
    -                        pio1_23 = 0x7,
    -                        clocks_gpout_1 = 0x8,
    -                        usb_muxing_vbus_en = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO24_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO24_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        spi1_rx = 0x1,
    -                        uart1_tx = 0x2,
    -                        i2c0_sda = 0x3,
    -                        pwm_a_4 = 0x4,
    -                        sio_24 = 0x5,
    -                        pio0_24 = 0x6,
    -                        pio1_24 = 0x7,
    -                        clocks_gpout_2 = 0x8,
    -                        usb_muxing_overcurr_detect = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO25_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO25_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        spi1_ss_n = 0x1,
    -                        uart1_rx = 0x2,
    -                        i2c0_scl = 0x3,
    -                        pwm_b_4 = 0x4,
    -                        sio_25 = 0x5,
    -                        pio0_25 = 0x6,
    -                        pio1_25 = 0x7,
    -                        clocks_gpout_3 = 0x8,
    -                        usb_muxing_vbus_detect = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO26_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO26_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        spi1_sclk = 0x1,
    -                        uart1_cts = 0x2,
    -                        i2c1_sda = 0x3,
    -                        pwm_a_5 = 0x4,
    -                        sio_26 = 0x5,
    -                        pio0_26 = 0x6,
    -                        pio1_26 = 0x7,
    -                        usb_muxing_vbus_en = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO27_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO27_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        spi1_tx = 0x1,
    -                        uart1_rts = 0x2,
    -                        i2c1_scl = 0x3,
    -                        pwm_b_5 = 0x4,
    -                        sio_27 = 0x5,
    -                        pio0_27 = 0x6,
    -                        pio1_27 = 0x7,
    -                        usb_muxing_overcurr_detect = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO28_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO28_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        spi1_rx = 0x1,
    -                        uart0_tx = 0x2,
    -                        i2c0_sda = 0x3,
    -                        pwm_a_6 = 0x4,
    -                        sio_28 = 0x5,
    -                        pio0_28 = 0x6,
    -                        pio1_28 = 0x7,
    -                        usb_muxing_vbus_detect = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO29_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO29_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        spi1_ss_n = 0x1,
    -                        uart0_rx = 0x2,
    -                        i2c0_scl = 0x3,
    -                        pwm_b_6 = 0x4,
    -                        sio_29 = 0x5,
    -                        pio0_29 = 0x6,
    -                        pio1_29 = 0x7,
    -                        usb_muxing_vbus_en = 0x9,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  Raw Interrupts
    -            INTR0: mmio.Mmio(packed struct(u32) {
    -                GPIO0_LEVEL_LOW: u1,
    -                GPIO0_LEVEL_HIGH: u1,
    -                GPIO0_EDGE_LOW: u1,
    -                GPIO0_EDGE_HIGH: u1,
    -                GPIO1_LEVEL_LOW: u1,
    -                GPIO1_LEVEL_HIGH: u1,
    -                GPIO1_EDGE_LOW: u1,
    -                GPIO1_EDGE_HIGH: u1,
    -                GPIO2_LEVEL_LOW: u1,
    -                GPIO2_LEVEL_HIGH: u1,
    -                GPIO2_EDGE_LOW: u1,
    -                GPIO2_EDGE_HIGH: u1,
    -                GPIO3_LEVEL_LOW: u1,
    -                GPIO3_LEVEL_HIGH: u1,
    -                GPIO3_EDGE_LOW: u1,
    -                GPIO3_EDGE_HIGH: u1,
    -                GPIO4_LEVEL_LOW: u1,
    -                GPIO4_LEVEL_HIGH: u1,
    -                GPIO4_EDGE_LOW: u1,
    -                GPIO4_EDGE_HIGH: u1,
    -                GPIO5_LEVEL_LOW: u1,
    -                GPIO5_LEVEL_HIGH: u1,
    -                GPIO5_EDGE_LOW: u1,
    -                GPIO5_EDGE_HIGH: u1,
    -                GPIO6_LEVEL_LOW: u1,
    -                GPIO6_LEVEL_HIGH: u1,
    -                GPIO6_EDGE_LOW: u1,
    -                GPIO6_EDGE_HIGH: u1,
    -                GPIO7_LEVEL_LOW: u1,
    -                GPIO7_LEVEL_HIGH: u1,
    -                GPIO7_EDGE_LOW: u1,
    -                GPIO7_EDGE_HIGH: u1,
    -            }),
    -            ///  Raw Interrupts
    -            INTR1: mmio.Mmio(packed struct(u32) {
    -                GPIO8_LEVEL_LOW: u1,
    -                GPIO8_LEVEL_HIGH: u1,
    -                GPIO8_EDGE_LOW: u1,
    -                GPIO8_EDGE_HIGH: u1,
    -                GPIO9_LEVEL_LOW: u1,
    -                GPIO9_LEVEL_HIGH: u1,
    -                GPIO9_EDGE_LOW: u1,
    -                GPIO9_EDGE_HIGH: u1,
    -                GPIO10_LEVEL_LOW: u1,
    -                GPIO10_LEVEL_HIGH: u1,
    -                GPIO10_EDGE_LOW: u1,
    -                GPIO10_EDGE_HIGH: u1,
    -                GPIO11_LEVEL_LOW: u1,
    -                GPIO11_LEVEL_HIGH: u1,
    -                GPIO11_EDGE_LOW: u1,
    -                GPIO11_EDGE_HIGH: u1,
    -                GPIO12_LEVEL_LOW: u1,
    -                GPIO12_LEVEL_HIGH: u1,
    -                GPIO12_EDGE_LOW: u1,
    -                GPIO12_EDGE_HIGH: u1,
    -                GPIO13_LEVEL_LOW: u1,
    -                GPIO13_LEVEL_HIGH: u1,
    -                GPIO13_EDGE_LOW: u1,
    -                GPIO13_EDGE_HIGH: u1,
    -                GPIO14_LEVEL_LOW: u1,
    -                GPIO14_LEVEL_HIGH: u1,
    -                GPIO14_EDGE_LOW: u1,
    -                GPIO14_EDGE_HIGH: u1,
    -                GPIO15_LEVEL_LOW: u1,
    -                GPIO15_LEVEL_HIGH: u1,
    -                GPIO15_EDGE_LOW: u1,
    -                GPIO15_EDGE_HIGH: u1,
    -            }),
    -            ///  Raw Interrupts
    -            INTR2: mmio.Mmio(packed struct(u32) {
    -                GPIO16_LEVEL_LOW: u1,
    -                GPIO16_LEVEL_HIGH: u1,
    -                GPIO16_EDGE_LOW: u1,
    -                GPIO16_EDGE_HIGH: u1,
    -                GPIO17_LEVEL_LOW: u1,
    -                GPIO17_LEVEL_HIGH: u1,
    -                GPIO17_EDGE_LOW: u1,
    -                GPIO17_EDGE_HIGH: u1,
    -                GPIO18_LEVEL_LOW: u1,
    -                GPIO18_LEVEL_HIGH: u1,
    -                GPIO18_EDGE_LOW: u1,
    -                GPIO18_EDGE_HIGH: u1,
    -                GPIO19_LEVEL_LOW: u1,
    -                GPIO19_LEVEL_HIGH: u1,
    -                GPIO19_EDGE_LOW: u1,
    -                GPIO19_EDGE_HIGH: u1,
    -                GPIO20_LEVEL_LOW: u1,
    -                GPIO20_LEVEL_HIGH: u1,
    -                GPIO20_EDGE_LOW: u1,
    -                GPIO20_EDGE_HIGH: u1,
    -                GPIO21_LEVEL_LOW: u1,
    -                GPIO21_LEVEL_HIGH: u1,
    -                GPIO21_EDGE_LOW: u1,
    -                GPIO21_EDGE_HIGH: u1,
    -                GPIO22_LEVEL_LOW: u1,
    -                GPIO22_LEVEL_HIGH: u1,
    -                GPIO22_EDGE_LOW: u1,
    -                GPIO22_EDGE_HIGH: u1,
    -                GPIO23_LEVEL_LOW: u1,
    -                GPIO23_LEVEL_HIGH: u1,
    -                GPIO23_EDGE_LOW: u1,
    -                GPIO23_EDGE_HIGH: u1,
    -            }),
    -            ///  Raw Interrupts
    -            INTR3: mmio.Mmio(packed struct(u32) {
    -                GPIO24_LEVEL_LOW: u1,
    -                GPIO24_LEVEL_HIGH: u1,
    -                GPIO24_EDGE_LOW: u1,
    -                GPIO24_EDGE_HIGH: u1,
    -                GPIO25_LEVEL_LOW: u1,
    -                GPIO25_LEVEL_HIGH: u1,
    -                GPIO25_EDGE_LOW: u1,
    -                GPIO25_EDGE_HIGH: u1,
    -                GPIO26_LEVEL_LOW: u1,
    -                GPIO26_LEVEL_HIGH: u1,
    -                GPIO26_EDGE_LOW: u1,
    -                GPIO26_EDGE_HIGH: u1,
    -                GPIO27_LEVEL_LOW: u1,
    -                GPIO27_LEVEL_HIGH: u1,
    -                GPIO27_EDGE_LOW: u1,
    -                GPIO27_EDGE_HIGH: u1,
    -                GPIO28_LEVEL_LOW: u1,
    -                GPIO28_LEVEL_HIGH: u1,
    -                GPIO28_EDGE_LOW: u1,
    -                GPIO28_EDGE_HIGH: u1,
    -                GPIO29_LEVEL_LOW: u1,
    -                GPIO29_LEVEL_HIGH: u1,
    -                GPIO29_EDGE_LOW: u1,
    -                GPIO29_EDGE_HIGH: u1,
    -                padding: u8,
    -            }),
    -            ///  Interrupt Enable for proc0
    -            PROC0_INTE0: mmio.Mmio(packed struct(u32) {
    -                GPIO0_LEVEL_LOW: u1,
    -                GPIO0_LEVEL_HIGH: u1,
    -                GPIO0_EDGE_LOW: u1,
    -                GPIO0_EDGE_HIGH: u1,
    -                GPIO1_LEVEL_LOW: u1,
    -                GPIO1_LEVEL_HIGH: u1,
    -                GPIO1_EDGE_LOW: u1,
    -                GPIO1_EDGE_HIGH: u1,
    -                GPIO2_LEVEL_LOW: u1,
    -                GPIO2_LEVEL_HIGH: u1,
    -                GPIO2_EDGE_LOW: u1,
    -                GPIO2_EDGE_HIGH: u1,
    -                GPIO3_LEVEL_LOW: u1,
    -                GPIO3_LEVEL_HIGH: u1,
    -                GPIO3_EDGE_LOW: u1,
    -                GPIO3_EDGE_HIGH: u1,
    -                GPIO4_LEVEL_LOW: u1,
    -                GPIO4_LEVEL_HIGH: u1,
    -                GPIO4_EDGE_LOW: u1,
    -                GPIO4_EDGE_HIGH: u1,
    -                GPIO5_LEVEL_LOW: u1,
    -                GPIO5_LEVEL_HIGH: u1,
    -                GPIO5_EDGE_LOW: u1,
    -                GPIO5_EDGE_HIGH: u1,
    -                GPIO6_LEVEL_LOW: u1,
    -                GPIO6_LEVEL_HIGH: u1,
    -                GPIO6_EDGE_LOW: u1,
    -                GPIO6_EDGE_HIGH: u1,
    -                GPIO7_LEVEL_LOW: u1,
    -                GPIO7_LEVEL_HIGH: u1,
    -                GPIO7_EDGE_LOW: u1,
    -                GPIO7_EDGE_HIGH: u1,
    -            }),
    -            ///  Interrupt Enable for proc0
    -            PROC0_INTE1: mmio.Mmio(packed struct(u32) {
    -                GPIO8_LEVEL_LOW: u1,
    -                GPIO8_LEVEL_HIGH: u1,
    -                GPIO8_EDGE_LOW: u1,
    -                GPIO8_EDGE_HIGH: u1,
    -                GPIO9_LEVEL_LOW: u1,
    -                GPIO9_LEVEL_HIGH: u1,
    -                GPIO9_EDGE_LOW: u1,
    -                GPIO9_EDGE_HIGH: u1,
    -                GPIO10_LEVEL_LOW: u1,
    -                GPIO10_LEVEL_HIGH: u1,
    -                GPIO10_EDGE_LOW: u1,
    -                GPIO10_EDGE_HIGH: u1,
    -                GPIO11_LEVEL_LOW: u1,
    -                GPIO11_LEVEL_HIGH: u1,
    -                GPIO11_EDGE_LOW: u1,
    -                GPIO11_EDGE_HIGH: u1,
    -                GPIO12_LEVEL_LOW: u1,
    -                GPIO12_LEVEL_HIGH: u1,
    -                GPIO12_EDGE_LOW: u1,
    -                GPIO12_EDGE_HIGH: u1,
    -                GPIO13_LEVEL_LOW: u1,
    -                GPIO13_LEVEL_HIGH: u1,
    -                GPIO13_EDGE_LOW: u1,
    -                GPIO13_EDGE_HIGH: u1,
    -                GPIO14_LEVEL_LOW: u1,
    -                GPIO14_LEVEL_HIGH: u1,
    -                GPIO14_EDGE_LOW: u1,
    -                GPIO14_EDGE_HIGH: u1,
    -                GPIO15_LEVEL_LOW: u1,
    -                GPIO15_LEVEL_HIGH: u1,
    -                GPIO15_EDGE_LOW: u1,
    -                GPIO15_EDGE_HIGH: u1,
    -            }),
    -            ///  Interrupt Enable for proc0
    -            PROC0_INTE2: mmio.Mmio(packed struct(u32) {
    -                GPIO16_LEVEL_LOW: u1,
    -                GPIO16_LEVEL_HIGH: u1,
    -                GPIO16_EDGE_LOW: u1,
    -                GPIO16_EDGE_HIGH: u1,
    -                GPIO17_LEVEL_LOW: u1,
    -                GPIO17_LEVEL_HIGH: u1,
    -                GPIO17_EDGE_LOW: u1,
    -                GPIO17_EDGE_HIGH: u1,
    -                GPIO18_LEVEL_LOW: u1,
    -                GPIO18_LEVEL_HIGH: u1,
    -                GPIO18_EDGE_LOW: u1,
    -                GPIO18_EDGE_HIGH: u1,
    -                GPIO19_LEVEL_LOW: u1,
    -                GPIO19_LEVEL_HIGH: u1,
    -                GPIO19_EDGE_LOW: u1,
    -                GPIO19_EDGE_HIGH: u1,
    -                GPIO20_LEVEL_LOW: u1,
    -                GPIO20_LEVEL_HIGH: u1,
    -                GPIO20_EDGE_LOW: u1,
    -                GPIO20_EDGE_HIGH: u1,
    -                GPIO21_LEVEL_LOW: u1,
    -                GPIO21_LEVEL_HIGH: u1,
    -                GPIO21_EDGE_LOW: u1,
    -                GPIO21_EDGE_HIGH: u1,
    -                GPIO22_LEVEL_LOW: u1,
    -                GPIO22_LEVEL_HIGH: u1,
    -                GPIO22_EDGE_LOW: u1,
    -                GPIO22_EDGE_HIGH: u1,
    -                GPIO23_LEVEL_LOW: u1,
    -                GPIO23_LEVEL_HIGH: u1,
    -                GPIO23_EDGE_LOW: u1,
    -                GPIO23_EDGE_HIGH: u1,
    -            }),
    -            ///  Interrupt Enable for proc0
    -            PROC0_INTE3: mmio.Mmio(packed struct(u32) {
    -                GPIO24_LEVEL_LOW: u1,
    -                GPIO24_LEVEL_HIGH: u1,
    -                GPIO24_EDGE_LOW: u1,
    -                GPIO24_EDGE_HIGH: u1,
    -                GPIO25_LEVEL_LOW: u1,
    -                GPIO25_LEVEL_HIGH: u1,
    -                GPIO25_EDGE_LOW: u1,
    -                GPIO25_EDGE_HIGH: u1,
    -                GPIO26_LEVEL_LOW: u1,
    -                GPIO26_LEVEL_HIGH: u1,
    -                GPIO26_EDGE_LOW: u1,
    -                GPIO26_EDGE_HIGH: u1,
    -                GPIO27_LEVEL_LOW: u1,
    -                GPIO27_LEVEL_HIGH: u1,
    -                GPIO27_EDGE_LOW: u1,
    -                GPIO27_EDGE_HIGH: u1,
    -                GPIO28_LEVEL_LOW: u1,
    -                GPIO28_LEVEL_HIGH: u1,
    -                GPIO28_EDGE_LOW: u1,
    -                GPIO28_EDGE_HIGH: u1,
    -                GPIO29_LEVEL_LOW: u1,
    -                GPIO29_LEVEL_HIGH: u1,
    -                GPIO29_EDGE_LOW: u1,
    -                GPIO29_EDGE_HIGH: u1,
    -                padding: u8,
    -            }),
    -            ///  Interrupt Force for proc0
    -            PROC0_INTF0: mmio.Mmio(packed struct(u32) {
    -                GPIO0_LEVEL_LOW: u1,
    -                GPIO0_LEVEL_HIGH: u1,
    -                GPIO0_EDGE_LOW: u1,
    -                GPIO0_EDGE_HIGH: u1,
    -                GPIO1_LEVEL_LOW: u1,
    -                GPIO1_LEVEL_HIGH: u1,
    -                GPIO1_EDGE_LOW: u1,
    -                GPIO1_EDGE_HIGH: u1,
    -                GPIO2_LEVEL_LOW: u1,
    -                GPIO2_LEVEL_HIGH: u1,
    -                GPIO2_EDGE_LOW: u1,
    -                GPIO2_EDGE_HIGH: u1,
    -                GPIO3_LEVEL_LOW: u1,
    -                GPIO3_LEVEL_HIGH: u1,
    -                GPIO3_EDGE_LOW: u1,
    -                GPIO3_EDGE_HIGH: u1,
    -                GPIO4_LEVEL_LOW: u1,
    -                GPIO4_LEVEL_HIGH: u1,
    -                GPIO4_EDGE_LOW: u1,
    -                GPIO4_EDGE_HIGH: u1,
    -                GPIO5_LEVEL_LOW: u1,
    -                GPIO5_LEVEL_HIGH: u1,
    -                GPIO5_EDGE_LOW: u1,
    -                GPIO5_EDGE_HIGH: u1,
    -                GPIO6_LEVEL_LOW: u1,
    -                GPIO6_LEVEL_HIGH: u1,
    -                GPIO6_EDGE_LOW: u1,
    -                GPIO6_EDGE_HIGH: u1,
    -                GPIO7_LEVEL_LOW: u1,
    -                GPIO7_LEVEL_HIGH: u1,
    -                GPIO7_EDGE_LOW: u1,
    -                GPIO7_EDGE_HIGH: u1,
    -            }),
    -            ///  Interrupt Force for proc0
    -            PROC0_INTF1: mmio.Mmio(packed struct(u32) {
    -                GPIO8_LEVEL_LOW: u1,
    -                GPIO8_LEVEL_HIGH: u1,
    -                GPIO8_EDGE_LOW: u1,
    -                GPIO8_EDGE_HIGH: u1,
    -                GPIO9_LEVEL_LOW: u1,
    -                GPIO9_LEVEL_HIGH: u1,
    -                GPIO9_EDGE_LOW: u1,
    -                GPIO9_EDGE_HIGH: u1,
    -                GPIO10_LEVEL_LOW: u1,
    -                GPIO10_LEVEL_HIGH: u1,
    -                GPIO10_EDGE_LOW: u1,
    -                GPIO10_EDGE_HIGH: u1,
    -                GPIO11_LEVEL_LOW: u1,
    -                GPIO11_LEVEL_HIGH: u1,
    -                GPIO11_EDGE_LOW: u1,
    -                GPIO11_EDGE_HIGH: u1,
    -                GPIO12_LEVEL_LOW: u1,
    -                GPIO12_LEVEL_HIGH: u1,
    -                GPIO12_EDGE_LOW: u1,
    -                GPIO12_EDGE_HIGH: u1,
    -                GPIO13_LEVEL_LOW: u1,
    -                GPIO13_LEVEL_HIGH: u1,
    -                GPIO13_EDGE_LOW: u1,
    -                GPIO13_EDGE_HIGH: u1,
    -                GPIO14_LEVEL_LOW: u1,
    -                GPIO14_LEVEL_HIGH: u1,
    -                GPIO14_EDGE_LOW: u1,
    -                GPIO14_EDGE_HIGH: u1,
    -                GPIO15_LEVEL_LOW: u1,
    -                GPIO15_LEVEL_HIGH: u1,
    -                GPIO15_EDGE_LOW: u1,
    -                GPIO15_EDGE_HIGH: u1,
    -            }),
    -            ///  Interrupt Force for proc0
    -            PROC0_INTF2: mmio.Mmio(packed struct(u32) {
    -                GPIO16_LEVEL_LOW: u1,
    -                GPIO16_LEVEL_HIGH: u1,
    -                GPIO16_EDGE_LOW: u1,
    -                GPIO16_EDGE_HIGH: u1,
    -                GPIO17_LEVEL_LOW: u1,
    -                GPIO17_LEVEL_HIGH: u1,
    -                GPIO17_EDGE_LOW: u1,
    -                GPIO17_EDGE_HIGH: u1,
    -                GPIO18_LEVEL_LOW: u1,
    -                GPIO18_LEVEL_HIGH: u1,
    -                GPIO18_EDGE_LOW: u1,
    -                GPIO18_EDGE_HIGH: u1,
    -                GPIO19_LEVEL_LOW: u1,
    -                GPIO19_LEVEL_HIGH: u1,
    -                GPIO19_EDGE_LOW: u1,
    -                GPIO19_EDGE_HIGH: u1,
    -                GPIO20_LEVEL_LOW: u1,
    -                GPIO20_LEVEL_HIGH: u1,
    -                GPIO20_EDGE_LOW: u1,
    -                GPIO20_EDGE_HIGH: u1,
    -                GPIO21_LEVEL_LOW: u1,
    -                GPIO21_LEVEL_HIGH: u1,
    -                GPIO21_EDGE_LOW: u1,
    -                GPIO21_EDGE_HIGH: u1,
    -                GPIO22_LEVEL_LOW: u1,
    -                GPIO22_LEVEL_HIGH: u1,
    -                GPIO22_EDGE_LOW: u1,
    -                GPIO22_EDGE_HIGH: u1,
    -                GPIO23_LEVEL_LOW: u1,
    -                GPIO23_LEVEL_HIGH: u1,
    -                GPIO23_EDGE_LOW: u1,
    -                GPIO23_EDGE_HIGH: u1,
    -            }),
    -            ///  Interrupt Force for proc0
    -            PROC0_INTF3: mmio.Mmio(packed struct(u32) {
    -                GPIO24_LEVEL_LOW: u1,
    -                GPIO24_LEVEL_HIGH: u1,
    -                GPIO24_EDGE_LOW: u1,
    -                GPIO24_EDGE_HIGH: u1,
    -                GPIO25_LEVEL_LOW: u1,
    -                GPIO25_LEVEL_HIGH: u1,
    -                GPIO25_EDGE_LOW: u1,
    -                GPIO25_EDGE_HIGH: u1,
    -                GPIO26_LEVEL_LOW: u1,
    -                GPIO26_LEVEL_HIGH: u1,
    -                GPIO26_EDGE_LOW: u1,
    -                GPIO26_EDGE_HIGH: u1,
    -                GPIO27_LEVEL_LOW: u1,
    -                GPIO27_LEVEL_HIGH: u1,
    -                GPIO27_EDGE_LOW: u1,
    -                GPIO27_EDGE_HIGH: u1,
    -                GPIO28_LEVEL_LOW: u1,
    -                GPIO28_LEVEL_HIGH: u1,
    -                GPIO28_EDGE_LOW: u1,
    -                GPIO28_EDGE_HIGH: u1,
    -                GPIO29_LEVEL_LOW: u1,
    -                GPIO29_LEVEL_HIGH: u1,
    -                GPIO29_EDGE_LOW: u1,
    -                GPIO29_EDGE_HIGH: u1,
    -                padding: u8,
    -            }),
    -            ///  Interrupt status after masking & forcing for proc0
    -            PROC0_INTS0: mmio.Mmio(packed struct(u32) {
    -                GPIO0_LEVEL_LOW: u1,
    -                GPIO0_LEVEL_HIGH: u1,
    -                GPIO0_EDGE_LOW: u1,
    -                GPIO0_EDGE_HIGH: u1,
    -                GPIO1_LEVEL_LOW: u1,
    -                GPIO1_LEVEL_HIGH: u1,
    -                GPIO1_EDGE_LOW: u1,
    -                GPIO1_EDGE_HIGH: u1,
    -                GPIO2_LEVEL_LOW: u1,
    -                GPIO2_LEVEL_HIGH: u1,
    -                GPIO2_EDGE_LOW: u1,
    -                GPIO2_EDGE_HIGH: u1,
    -                GPIO3_LEVEL_LOW: u1,
    -                GPIO3_LEVEL_HIGH: u1,
    -                GPIO3_EDGE_LOW: u1,
    -                GPIO3_EDGE_HIGH: u1,
    -                GPIO4_LEVEL_LOW: u1,
    -                GPIO4_LEVEL_HIGH: u1,
    -                GPIO4_EDGE_LOW: u1,
    -                GPIO4_EDGE_HIGH: u1,
    -                GPIO5_LEVEL_LOW: u1,
    -                GPIO5_LEVEL_HIGH: u1,
    -                GPIO5_EDGE_LOW: u1,
    -                GPIO5_EDGE_HIGH: u1,
    -                GPIO6_LEVEL_LOW: u1,
    -                GPIO6_LEVEL_HIGH: u1,
    -                GPIO6_EDGE_LOW: u1,
    -                GPIO6_EDGE_HIGH: u1,
    -                GPIO7_LEVEL_LOW: u1,
    -                GPIO7_LEVEL_HIGH: u1,
    -                GPIO7_EDGE_LOW: u1,
    -                GPIO7_EDGE_HIGH: u1,
    -            }),
    -            ///  Interrupt status after masking & forcing for proc0
    -            PROC0_INTS1: mmio.Mmio(packed struct(u32) {
    -                GPIO8_LEVEL_LOW: u1,
    -                GPIO8_LEVEL_HIGH: u1,
    -                GPIO8_EDGE_LOW: u1,
    -                GPIO8_EDGE_HIGH: u1,
    -                GPIO9_LEVEL_LOW: u1,
    -                GPIO9_LEVEL_HIGH: u1,
    -                GPIO9_EDGE_LOW: u1,
    -                GPIO9_EDGE_HIGH: u1,
    -                GPIO10_LEVEL_LOW: u1,
    -                GPIO10_LEVEL_HIGH: u1,
    -                GPIO10_EDGE_LOW: u1,
    -                GPIO10_EDGE_HIGH: u1,
    -                GPIO11_LEVEL_LOW: u1,
    -                GPIO11_LEVEL_HIGH: u1,
    -                GPIO11_EDGE_LOW: u1,
    -                GPIO11_EDGE_HIGH: u1,
    -                GPIO12_LEVEL_LOW: u1,
    -                GPIO12_LEVEL_HIGH: u1,
    -                GPIO12_EDGE_LOW: u1,
    -                GPIO12_EDGE_HIGH: u1,
    -                GPIO13_LEVEL_LOW: u1,
    -                GPIO13_LEVEL_HIGH: u1,
    -                GPIO13_EDGE_LOW: u1,
    -                GPIO13_EDGE_HIGH: u1,
    -                GPIO14_LEVEL_LOW: u1,
    -                GPIO14_LEVEL_HIGH: u1,
    -                GPIO14_EDGE_LOW: u1,
    -                GPIO14_EDGE_HIGH: u1,
    -                GPIO15_LEVEL_LOW: u1,
    -                GPIO15_LEVEL_HIGH: u1,
    -                GPIO15_EDGE_LOW: u1,
    -                GPIO15_EDGE_HIGH: u1,
    -            }),
    -            ///  Interrupt status after masking & forcing for proc0
    -            PROC0_INTS2: mmio.Mmio(packed struct(u32) {
    -                GPIO16_LEVEL_LOW: u1,
    -                GPIO16_LEVEL_HIGH: u1,
    -                GPIO16_EDGE_LOW: u1,
    -                GPIO16_EDGE_HIGH: u1,
    -                GPIO17_LEVEL_LOW: u1,
    -                GPIO17_LEVEL_HIGH: u1,
    -                GPIO17_EDGE_LOW: u1,
    -                GPIO17_EDGE_HIGH: u1,
    -                GPIO18_LEVEL_LOW: u1,
    -                GPIO18_LEVEL_HIGH: u1,
    -                GPIO18_EDGE_LOW: u1,
    -                GPIO18_EDGE_HIGH: u1,
    -                GPIO19_LEVEL_LOW: u1,
    -                GPIO19_LEVEL_HIGH: u1,
    -                GPIO19_EDGE_LOW: u1,
    -                GPIO19_EDGE_HIGH: u1,
    -                GPIO20_LEVEL_LOW: u1,
    -                GPIO20_LEVEL_HIGH: u1,
    -                GPIO20_EDGE_LOW: u1,
    -                GPIO20_EDGE_HIGH: u1,
    -                GPIO21_LEVEL_LOW: u1,
    -                GPIO21_LEVEL_HIGH: u1,
    -                GPIO21_EDGE_LOW: u1,
    -                GPIO21_EDGE_HIGH: u1,
    -                GPIO22_LEVEL_LOW: u1,
    -                GPIO22_LEVEL_HIGH: u1,
    -                GPIO22_EDGE_LOW: u1,
    -                GPIO22_EDGE_HIGH: u1,
    -                GPIO23_LEVEL_LOW: u1,
    -                GPIO23_LEVEL_HIGH: u1,
    -                GPIO23_EDGE_LOW: u1,
    -                GPIO23_EDGE_HIGH: u1,
    -            }),
    -            ///  Interrupt status after masking & forcing for proc0
    -            PROC0_INTS3: mmio.Mmio(packed struct(u32) {
    -                GPIO24_LEVEL_LOW: u1,
    -                GPIO24_LEVEL_HIGH: u1,
    -                GPIO24_EDGE_LOW: u1,
    -                GPIO24_EDGE_HIGH: u1,
    -                GPIO25_LEVEL_LOW: u1,
    -                GPIO25_LEVEL_HIGH: u1,
    -                GPIO25_EDGE_LOW: u1,
    -                GPIO25_EDGE_HIGH: u1,
    -                GPIO26_LEVEL_LOW: u1,
    -                GPIO26_LEVEL_HIGH: u1,
    -                GPIO26_EDGE_LOW: u1,
    -                GPIO26_EDGE_HIGH: u1,
    -                GPIO27_LEVEL_LOW: u1,
    -                GPIO27_LEVEL_HIGH: u1,
    -                GPIO27_EDGE_LOW: u1,
    -                GPIO27_EDGE_HIGH: u1,
    -                GPIO28_LEVEL_LOW: u1,
    -                GPIO28_LEVEL_HIGH: u1,
    -                GPIO28_EDGE_LOW: u1,
    -                GPIO28_EDGE_HIGH: u1,
    -                GPIO29_LEVEL_LOW: u1,
    -                GPIO29_LEVEL_HIGH: u1,
    -                GPIO29_EDGE_LOW: u1,
    -                GPIO29_EDGE_HIGH: u1,
    -                padding: u8,
    -            }),
    -            ///  Interrupt Enable for proc1
    -            PROC1_INTE0: mmio.Mmio(packed struct(u32) {
    -                GPIO0_LEVEL_LOW: u1,
    -                GPIO0_LEVEL_HIGH: u1,
    -                GPIO0_EDGE_LOW: u1,
    -                GPIO0_EDGE_HIGH: u1,
    -                GPIO1_LEVEL_LOW: u1,
    -                GPIO1_LEVEL_HIGH: u1,
    -                GPIO1_EDGE_LOW: u1,
    -                GPIO1_EDGE_HIGH: u1,
    -                GPIO2_LEVEL_LOW: u1,
    -                GPIO2_LEVEL_HIGH: u1,
    -                GPIO2_EDGE_LOW: u1,
    -                GPIO2_EDGE_HIGH: u1,
    -                GPIO3_LEVEL_LOW: u1,
    -                GPIO3_LEVEL_HIGH: u1,
    -                GPIO3_EDGE_LOW: u1,
    -                GPIO3_EDGE_HIGH: u1,
    -                GPIO4_LEVEL_LOW: u1,
    -                GPIO4_LEVEL_HIGH: u1,
    -                GPIO4_EDGE_LOW: u1,
    -                GPIO4_EDGE_HIGH: u1,
    -                GPIO5_LEVEL_LOW: u1,
    -                GPIO5_LEVEL_HIGH: u1,
    -                GPIO5_EDGE_LOW: u1,
    -                GPIO5_EDGE_HIGH: u1,
    -                GPIO6_LEVEL_LOW: u1,
    -                GPIO6_LEVEL_HIGH: u1,
    -                GPIO6_EDGE_LOW: u1,
    -                GPIO6_EDGE_HIGH: u1,
    -                GPIO7_LEVEL_LOW: u1,
    -                GPIO7_LEVEL_HIGH: u1,
    -                GPIO7_EDGE_LOW: u1,
    -                GPIO7_EDGE_HIGH: u1,
    -            }),
    -            ///  Interrupt Enable for proc1
    -            PROC1_INTE1: mmio.Mmio(packed struct(u32) {
    -                GPIO8_LEVEL_LOW: u1,
    -                GPIO8_LEVEL_HIGH: u1,
    -                GPIO8_EDGE_LOW: u1,
    -                GPIO8_EDGE_HIGH: u1,
    -                GPIO9_LEVEL_LOW: u1,
    -                GPIO9_LEVEL_HIGH: u1,
    -                GPIO9_EDGE_LOW: u1,
    -                GPIO9_EDGE_HIGH: u1,
    -                GPIO10_LEVEL_LOW: u1,
    -                GPIO10_LEVEL_HIGH: u1,
    -                GPIO10_EDGE_LOW: u1,
    -                GPIO10_EDGE_HIGH: u1,
    -                GPIO11_LEVEL_LOW: u1,
    -                GPIO11_LEVEL_HIGH: u1,
    -                GPIO11_EDGE_LOW: u1,
    -                GPIO11_EDGE_HIGH: u1,
    -                GPIO12_LEVEL_LOW: u1,
    -                GPIO12_LEVEL_HIGH: u1,
    -                GPIO12_EDGE_LOW: u1,
    -                GPIO12_EDGE_HIGH: u1,
    -                GPIO13_LEVEL_LOW: u1,
    -                GPIO13_LEVEL_HIGH: u1,
    -                GPIO13_EDGE_LOW: u1,
    -                GPIO13_EDGE_HIGH: u1,
    -                GPIO14_LEVEL_LOW: u1,
    -                GPIO14_LEVEL_HIGH: u1,
    -                GPIO14_EDGE_LOW: u1,
    -                GPIO14_EDGE_HIGH: u1,
    -                GPIO15_LEVEL_LOW: u1,
    -                GPIO15_LEVEL_HIGH: u1,
    -                GPIO15_EDGE_LOW: u1,
    -                GPIO15_EDGE_HIGH: u1,
    -            }),
    -            ///  Interrupt Enable for proc1
    -            PROC1_INTE2: mmio.Mmio(packed struct(u32) {
    -                GPIO16_LEVEL_LOW: u1,
    -                GPIO16_LEVEL_HIGH: u1,
    -                GPIO16_EDGE_LOW: u1,
    -                GPIO16_EDGE_HIGH: u1,
    -                GPIO17_LEVEL_LOW: u1,
    -                GPIO17_LEVEL_HIGH: u1,
    -                GPIO17_EDGE_LOW: u1,
    -                GPIO17_EDGE_HIGH: u1,
    -                GPIO18_LEVEL_LOW: u1,
    -                GPIO18_LEVEL_HIGH: u1,
    -                GPIO18_EDGE_LOW: u1,
    -                GPIO18_EDGE_HIGH: u1,
    -                GPIO19_LEVEL_LOW: u1,
    -                GPIO19_LEVEL_HIGH: u1,
    -                GPIO19_EDGE_LOW: u1,
    -                GPIO19_EDGE_HIGH: u1,
    -                GPIO20_LEVEL_LOW: u1,
    -                GPIO20_LEVEL_HIGH: u1,
    -                GPIO20_EDGE_LOW: u1,
    -                GPIO20_EDGE_HIGH: u1,
    -                GPIO21_LEVEL_LOW: u1,
    -                GPIO21_LEVEL_HIGH: u1,
    -                GPIO21_EDGE_LOW: u1,
    -                GPIO21_EDGE_HIGH: u1,
    -                GPIO22_LEVEL_LOW: u1,
    -                GPIO22_LEVEL_HIGH: u1,
    -                GPIO22_EDGE_LOW: u1,
    -                GPIO22_EDGE_HIGH: u1,
    -                GPIO23_LEVEL_LOW: u1,
    -                GPIO23_LEVEL_HIGH: u1,
    -                GPIO23_EDGE_LOW: u1,
    -                GPIO23_EDGE_HIGH: u1,
    -            }),
    -            ///  Interrupt Enable for proc1
    -            PROC1_INTE3: mmio.Mmio(packed struct(u32) {
    -                GPIO24_LEVEL_LOW: u1,
    -                GPIO24_LEVEL_HIGH: u1,
    -                GPIO24_EDGE_LOW: u1,
    -                GPIO24_EDGE_HIGH: u1,
    -                GPIO25_LEVEL_LOW: u1,
    -                GPIO25_LEVEL_HIGH: u1,
    -                GPIO25_EDGE_LOW: u1,
    -                GPIO25_EDGE_HIGH: u1,
    -                GPIO26_LEVEL_LOW: u1,
    -                GPIO26_LEVEL_HIGH: u1,
    -                GPIO26_EDGE_LOW: u1,
    -                GPIO26_EDGE_HIGH: u1,
    -                GPIO27_LEVEL_LOW: u1,
    -                GPIO27_LEVEL_HIGH: u1,
    -                GPIO27_EDGE_LOW: u1,
    -                GPIO27_EDGE_HIGH: u1,
    -                GPIO28_LEVEL_LOW: u1,
    -                GPIO28_LEVEL_HIGH: u1,
    -                GPIO28_EDGE_LOW: u1,
    -                GPIO28_EDGE_HIGH: u1,
    -                GPIO29_LEVEL_LOW: u1,
    -                GPIO29_LEVEL_HIGH: u1,
    -                GPIO29_EDGE_LOW: u1,
    -                GPIO29_EDGE_HIGH: u1,
    -                padding: u8,
    -            }),
    -            ///  Interrupt Force for proc1
    -            PROC1_INTF0: mmio.Mmio(packed struct(u32) {
    -                GPIO0_LEVEL_LOW: u1,
    -                GPIO0_LEVEL_HIGH: u1,
    -                GPIO0_EDGE_LOW: u1,
    -                GPIO0_EDGE_HIGH: u1,
    -                GPIO1_LEVEL_LOW: u1,
    -                GPIO1_LEVEL_HIGH: u1,
    -                GPIO1_EDGE_LOW: u1,
    -                GPIO1_EDGE_HIGH: u1,
    -                GPIO2_LEVEL_LOW: u1,
    -                GPIO2_LEVEL_HIGH: u1,
    -                GPIO2_EDGE_LOW: u1,
    -                GPIO2_EDGE_HIGH: u1,
    -                GPIO3_LEVEL_LOW: u1,
    -                GPIO3_LEVEL_HIGH: u1,
    -                GPIO3_EDGE_LOW: u1,
    -                GPIO3_EDGE_HIGH: u1,
    -                GPIO4_LEVEL_LOW: u1,
    -                GPIO4_LEVEL_HIGH: u1,
    -                GPIO4_EDGE_LOW: u1,
    -                GPIO4_EDGE_HIGH: u1,
    -                GPIO5_LEVEL_LOW: u1,
    -                GPIO5_LEVEL_HIGH: u1,
    -                GPIO5_EDGE_LOW: u1,
    -                GPIO5_EDGE_HIGH: u1,
    -                GPIO6_LEVEL_LOW: u1,
    -                GPIO6_LEVEL_HIGH: u1,
    -                GPIO6_EDGE_LOW: u1,
    -                GPIO6_EDGE_HIGH: u1,
    -                GPIO7_LEVEL_LOW: u1,
    -                GPIO7_LEVEL_HIGH: u1,
    -                GPIO7_EDGE_LOW: u1,
    -                GPIO7_EDGE_HIGH: u1,
    -            }),
    -            ///  Interrupt Force for proc1
    -            PROC1_INTF1: mmio.Mmio(packed struct(u32) {
    -                GPIO8_LEVEL_LOW: u1,
    -                GPIO8_LEVEL_HIGH: u1,
    -                GPIO8_EDGE_LOW: u1,
    -                GPIO8_EDGE_HIGH: u1,
    -                GPIO9_LEVEL_LOW: u1,
    -                GPIO9_LEVEL_HIGH: u1,
    -                GPIO9_EDGE_LOW: u1,
    -                GPIO9_EDGE_HIGH: u1,
    -                GPIO10_LEVEL_LOW: u1,
    -                GPIO10_LEVEL_HIGH: u1,
    -                GPIO10_EDGE_LOW: u1,
    -                GPIO10_EDGE_HIGH: u1,
    -                GPIO11_LEVEL_LOW: u1,
    -                GPIO11_LEVEL_HIGH: u1,
    -                GPIO11_EDGE_LOW: u1,
    -                GPIO11_EDGE_HIGH: u1,
    -                GPIO12_LEVEL_LOW: u1,
    -                GPIO12_LEVEL_HIGH: u1,
    -                GPIO12_EDGE_LOW: u1,
    -                GPIO12_EDGE_HIGH: u1,
    -                GPIO13_LEVEL_LOW: u1,
    -                GPIO13_LEVEL_HIGH: u1,
    -                GPIO13_EDGE_LOW: u1,
    -                GPIO13_EDGE_HIGH: u1,
    -                GPIO14_LEVEL_LOW: u1,
    -                GPIO14_LEVEL_HIGH: u1,
    -                GPIO14_EDGE_LOW: u1,
    -                GPIO14_EDGE_HIGH: u1,
    -                GPIO15_LEVEL_LOW: u1,
    -                GPIO15_LEVEL_HIGH: u1,
    -                GPIO15_EDGE_LOW: u1,
    -                GPIO15_EDGE_HIGH: u1,
    -            }),
    -            ///  Interrupt Force for proc1
    -            PROC1_INTF2: mmio.Mmio(packed struct(u32) {
    -                GPIO16_LEVEL_LOW: u1,
    -                GPIO16_LEVEL_HIGH: u1,
    -                GPIO16_EDGE_LOW: u1,
    -                GPIO16_EDGE_HIGH: u1,
    -                GPIO17_LEVEL_LOW: u1,
    -                GPIO17_LEVEL_HIGH: u1,
    -                GPIO17_EDGE_LOW: u1,
    -                GPIO17_EDGE_HIGH: u1,
    -                GPIO18_LEVEL_LOW: u1,
    -                GPIO18_LEVEL_HIGH: u1,
    -                GPIO18_EDGE_LOW: u1,
    -                GPIO18_EDGE_HIGH: u1,
    -                GPIO19_LEVEL_LOW: u1,
    -                GPIO19_LEVEL_HIGH: u1,
    -                GPIO19_EDGE_LOW: u1,
    -                GPIO19_EDGE_HIGH: u1,
    -                GPIO20_LEVEL_LOW: u1,
    -                GPIO20_LEVEL_HIGH: u1,
    -                GPIO20_EDGE_LOW: u1,
    -                GPIO20_EDGE_HIGH: u1,
    -                GPIO21_LEVEL_LOW: u1,
    -                GPIO21_LEVEL_HIGH: u1,
    -                GPIO21_EDGE_LOW: u1,
    -                GPIO21_EDGE_HIGH: u1,
    -                GPIO22_LEVEL_LOW: u1,
    -                GPIO22_LEVEL_HIGH: u1,
    -                GPIO22_EDGE_LOW: u1,
    -                GPIO22_EDGE_HIGH: u1,
    -                GPIO23_LEVEL_LOW: u1,
    -                GPIO23_LEVEL_HIGH: u1,
    -                GPIO23_EDGE_LOW: u1,
    -                GPIO23_EDGE_HIGH: u1,
    -            }),
    -            ///  Interrupt Force for proc1
    -            PROC1_INTF3: mmio.Mmio(packed struct(u32) {
    -                GPIO24_LEVEL_LOW: u1,
    -                GPIO24_LEVEL_HIGH: u1,
    -                GPIO24_EDGE_LOW: u1,
    -                GPIO24_EDGE_HIGH: u1,
    -                GPIO25_LEVEL_LOW: u1,
    -                GPIO25_LEVEL_HIGH: u1,
    -                GPIO25_EDGE_LOW: u1,
    -                GPIO25_EDGE_HIGH: u1,
    -                GPIO26_LEVEL_LOW: u1,
    -                GPIO26_LEVEL_HIGH: u1,
    -                GPIO26_EDGE_LOW: u1,
    -                GPIO26_EDGE_HIGH: u1,
    -                GPIO27_LEVEL_LOW: u1,
    -                GPIO27_LEVEL_HIGH: u1,
    -                GPIO27_EDGE_LOW: u1,
    -                GPIO27_EDGE_HIGH: u1,
    -                GPIO28_LEVEL_LOW: u1,
    -                GPIO28_LEVEL_HIGH: u1,
    -                GPIO28_EDGE_LOW: u1,
    -                GPIO28_EDGE_HIGH: u1,
    -                GPIO29_LEVEL_LOW: u1,
    -                GPIO29_LEVEL_HIGH: u1,
    -                GPIO29_EDGE_LOW: u1,
    -                GPIO29_EDGE_HIGH: u1,
    -                padding: u8,
    -            }),
    -            ///  Interrupt status after masking & forcing for proc1
    -            PROC1_INTS0: mmio.Mmio(packed struct(u32) {
    -                GPIO0_LEVEL_LOW: u1,
    -                GPIO0_LEVEL_HIGH: u1,
    -                GPIO0_EDGE_LOW: u1,
    -                GPIO0_EDGE_HIGH: u1,
    -                GPIO1_LEVEL_LOW: u1,
    -                GPIO1_LEVEL_HIGH: u1,
    -                GPIO1_EDGE_LOW: u1,
    -                GPIO1_EDGE_HIGH: u1,
    -                GPIO2_LEVEL_LOW: u1,
    -                GPIO2_LEVEL_HIGH: u1,
    -                GPIO2_EDGE_LOW: u1,
    -                GPIO2_EDGE_HIGH: u1,
    -                GPIO3_LEVEL_LOW: u1,
    -                GPIO3_LEVEL_HIGH: u1,
    -                GPIO3_EDGE_LOW: u1,
    -                GPIO3_EDGE_HIGH: u1,
    -                GPIO4_LEVEL_LOW: u1,
    -                GPIO4_LEVEL_HIGH: u1,
    -                GPIO4_EDGE_LOW: u1,
    -                GPIO4_EDGE_HIGH: u1,
    -                GPIO5_LEVEL_LOW: u1,
    -                GPIO5_LEVEL_HIGH: u1,
    -                GPIO5_EDGE_LOW: u1,
    -                GPIO5_EDGE_HIGH: u1,
    -                GPIO6_LEVEL_LOW: u1,
    -                GPIO6_LEVEL_HIGH: u1,
    -                GPIO6_EDGE_LOW: u1,
    -                GPIO6_EDGE_HIGH: u1,
    -                GPIO7_LEVEL_LOW: u1,
    -                GPIO7_LEVEL_HIGH: u1,
    -                GPIO7_EDGE_LOW: u1,
    -                GPIO7_EDGE_HIGH: u1,
    -            }),
    -            ///  Interrupt status after masking & forcing for proc1
    -            PROC1_INTS1: mmio.Mmio(packed struct(u32) {
    -                GPIO8_LEVEL_LOW: u1,
    -                GPIO8_LEVEL_HIGH: u1,
    -                GPIO8_EDGE_LOW: u1,
    -                GPIO8_EDGE_HIGH: u1,
    -                GPIO9_LEVEL_LOW: u1,
    -                GPIO9_LEVEL_HIGH: u1,
    -                GPIO9_EDGE_LOW: u1,
    -                GPIO9_EDGE_HIGH: u1,
    -                GPIO10_LEVEL_LOW: u1,
    -                GPIO10_LEVEL_HIGH: u1,
    -                GPIO10_EDGE_LOW: u1,
    -                GPIO10_EDGE_HIGH: u1,
    -                GPIO11_LEVEL_LOW: u1,
    -                GPIO11_LEVEL_HIGH: u1,
    -                GPIO11_EDGE_LOW: u1,
    -                GPIO11_EDGE_HIGH: u1,
    -                GPIO12_LEVEL_LOW: u1,
    -                GPIO12_LEVEL_HIGH: u1,
    -                GPIO12_EDGE_LOW: u1,
    -                GPIO12_EDGE_HIGH: u1,
    -                GPIO13_LEVEL_LOW: u1,
    -                GPIO13_LEVEL_HIGH: u1,
    -                GPIO13_EDGE_LOW: u1,
    -                GPIO13_EDGE_HIGH: u1,
    -                GPIO14_LEVEL_LOW: u1,
    -                GPIO14_LEVEL_HIGH: u1,
    -                GPIO14_EDGE_LOW: u1,
    -                GPIO14_EDGE_HIGH: u1,
    -                GPIO15_LEVEL_LOW: u1,
    -                GPIO15_LEVEL_HIGH: u1,
    -                GPIO15_EDGE_LOW: u1,
    -                GPIO15_EDGE_HIGH: u1,
    -            }),
    -            ///  Interrupt status after masking & forcing for proc1
    -            PROC1_INTS2: mmio.Mmio(packed struct(u32) {
    -                GPIO16_LEVEL_LOW: u1,
    -                GPIO16_LEVEL_HIGH: u1,
    -                GPIO16_EDGE_LOW: u1,
    -                GPIO16_EDGE_HIGH: u1,
    -                GPIO17_LEVEL_LOW: u1,
    -                GPIO17_LEVEL_HIGH: u1,
    -                GPIO17_EDGE_LOW: u1,
    -                GPIO17_EDGE_HIGH: u1,
    -                GPIO18_LEVEL_LOW: u1,
    -                GPIO18_LEVEL_HIGH: u1,
    -                GPIO18_EDGE_LOW: u1,
    -                GPIO18_EDGE_HIGH: u1,
    -                GPIO19_LEVEL_LOW: u1,
    -                GPIO19_LEVEL_HIGH: u1,
    -                GPIO19_EDGE_LOW: u1,
    -                GPIO19_EDGE_HIGH: u1,
    -                GPIO20_LEVEL_LOW: u1,
    -                GPIO20_LEVEL_HIGH: u1,
    -                GPIO20_EDGE_LOW: u1,
    -                GPIO20_EDGE_HIGH: u1,
    -                GPIO21_LEVEL_LOW: u1,
    -                GPIO21_LEVEL_HIGH: u1,
    -                GPIO21_EDGE_LOW: u1,
    -                GPIO21_EDGE_HIGH: u1,
    -                GPIO22_LEVEL_LOW: u1,
    -                GPIO22_LEVEL_HIGH: u1,
    -                GPIO22_EDGE_LOW: u1,
    -                GPIO22_EDGE_HIGH: u1,
    -                GPIO23_LEVEL_LOW: u1,
    -                GPIO23_LEVEL_HIGH: u1,
    -                GPIO23_EDGE_LOW: u1,
    -                GPIO23_EDGE_HIGH: u1,
    -            }),
    -            ///  Interrupt status after masking & forcing for proc1
    -            PROC1_INTS3: mmio.Mmio(packed struct(u32) {
    -                GPIO24_LEVEL_LOW: u1,
    -                GPIO24_LEVEL_HIGH: u1,
    -                GPIO24_EDGE_LOW: u1,
    -                GPIO24_EDGE_HIGH: u1,
    -                GPIO25_LEVEL_LOW: u1,
    -                GPIO25_LEVEL_HIGH: u1,
    -                GPIO25_EDGE_LOW: u1,
    -                GPIO25_EDGE_HIGH: u1,
    -                GPIO26_LEVEL_LOW: u1,
    -                GPIO26_LEVEL_HIGH: u1,
    -                GPIO26_EDGE_LOW: u1,
    -                GPIO26_EDGE_HIGH: u1,
    -                GPIO27_LEVEL_LOW: u1,
    -                GPIO27_LEVEL_HIGH: u1,
    -                GPIO27_EDGE_LOW: u1,
    -                GPIO27_EDGE_HIGH: u1,
    -                GPIO28_LEVEL_LOW: u1,
    -                GPIO28_LEVEL_HIGH: u1,
    -                GPIO28_EDGE_LOW: u1,
    -                GPIO28_EDGE_HIGH: u1,
    -                GPIO29_LEVEL_LOW: u1,
    -                GPIO29_LEVEL_HIGH: u1,
    -                GPIO29_EDGE_LOW: u1,
    -                GPIO29_EDGE_HIGH: u1,
    -                padding: u8,
    -            }),
    -            ///  Interrupt Enable for dormant_wake
    -            DORMANT_WAKE_INTE0: mmio.Mmio(packed struct(u32) {
    -                GPIO0_LEVEL_LOW: u1,
    -                GPIO0_LEVEL_HIGH: u1,
    -                GPIO0_EDGE_LOW: u1,
    -                GPIO0_EDGE_HIGH: u1,
    -                GPIO1_LEVEL_LOW: u1,
    -                GPIO1_LEVEL_HIGH: u1,
    -                GPIO1_EDGE_LOW: u1,
    -                GPIO1_EDGE_HIGH: u1,
    -                GPIO2_LEVEL_LOW: u1,
    -                GPIO2_LEVEL_HIGH: u1,
    -                GPIO2_EDGE_LOW: u1,
    -                GPIO2_EDGE_HIGH: u1,
    -                GPIO3_LEVEL_LOW: u1,
    -                GPIO3_LEVEL_HIGH: u1,
    -                GPIO3_EDGE_LOW: u1,
    -                GPIO3_EDGE_HIGH: u1,
    -                GPIO4_LEVEL_LOW: u1,
    -                GPIO4_LEVEL_HIGH: u1,
    -                GPIO4_EDGE_LOW: u1,
    -                GPIO4_EDGE_HIGH: u1,
    -                GPIO5_LEVEL_LOW: u1,
    -                GPIO5_LEVEL_HIGH: u1,
    -                GPIO5_EDGE_LOW: u1,
    -                GPIO5_EDGE_HIGH: u1,
    -                GPIO6_LEVEL_LOW: u1,
    -                GPIO6_LEVEL_HIGH: u1,
    -                GPIO6_EDGE_LOW: u1,
    -                GPIO6_EDGE_HIGH: u1,
    -                GPIO7_LEVEL_LOW: u1,
    -                GPIO7_LEVEL_HIGH: u1,
    -                GPIO7_EDGE_LOW: u1,
    -                GPIO7_EDGE_HIGH: u1,
    -            }),
    -            ///  Interrupt Enable for dormant_wake
    -            DORMANT_WAKE_INTE1: mmio.Mmio(packed struct(u32) {
    -                GPIO8_LEVEL_LOW: u1,
    -                GPIO8_LEVEL_HIGH: u1,
    -                GPIO8_EDGE_LOW: u1,
    -                GPIO8_EDGE_HIGH: u1,
    -                GPIO9_LEVEL_LOW: u1,
    -                GPIO9_LEVEL_HIGH: u1,
    -                GPIO9_EDGE_LOW: u1,
    -                GPIO9_EDGE_HIGH: u1,
    -                GPIO10_LEVEL_LOW: u1,
    -                GPIO10_LEVEL_HIGH: u1,
    -                GPIO10_EDGE_LOW: u1,
    -                GPIO10_EDGE_HIGH: u1,
    -                GPIO11_LEVEL_LOW: u1,
    -                GPIO11_LEVEL_HIGH: u1,
    -                GPIO11_EDGE_LOW: u1,
    -                GPIO11_EDGE_HIGH: u1,
    -                GPIO12_LEVEL_LOW: u1,
    -                GPIO12_LEVEL_HIGH: u1,
    -                GPIO12_EDGE_LOW: u1,
    -                GPIO12_EDGE_HIGH: u1,
    -                GPIO13_LEVEL_LOW: u1,
    -                GPIO13_LEVEL_HIGH: u1,
    -                GPIO13_EDGE_LOW: u1,
    -                GPIO13_EDGE_HIGH: u1,
    -                GPIO14_LEVEL_LOW: u1,
    -                GPIO14_LEVEL_HIGH: u1,
    -                GPIO14_EDGE_LOW: u1,
    -                GPIO14_EDGE_HIGH: u1,
    -                GPIO15_LEVEL_LOW: u1,
    -                GPIO15_LEVEL_HIGH: u1,
    -                GPIO15_EDGE_LOW: u1,
    -                GPIO15_EDGE_HIGH: u1,
    -            }),
    -            ///  Interrupt Enable for dormant_wake
    -            DORMANT_WAKE_INTE2: mmio.Mmio(packed struct(u32) {
    -                GPIO16_LEVEL_LOW: u1,
    -                GPIO16_LEVEL_HIGH: u1,
    -                GPIO16_EDGE_LOW: u1,
    -                GPIO16_EDGE_HIGH: u1,
    -                GPIO17_LEVEL_LOW: u1,
    -                GPIO17_LEVEL_HIGH: u1,
    -                GPIO17_EDGE_LOW: u1,
    -                GPIO17_EDGE_HIGH: u1,
    -                GPIO18_LEVEL_LOW: u1,
    -                GPIO18_LEVEL_HIGH: u1,
    -                GPIO18_EDGE_LOW: u1,
    -                GPIO18_EDGE_HIGH: u1,
    -                GPIO19_LEVEL_LOW: u1,
    -                GPIO19_LEVEL_HIGH: u1,
    -                GPIO19_EDGE_LOW: u1,
    -                GPIO19_EDGE_HIGH: u1,
    -                GPIO20_LEVEL_LOW: u1,
    -                GPIO20_LEVEL_HIGH: u1,
    -                GPIO20_EDGE_LOW: u1,
    -                GPIO20_EDGE_HIGH: u1,
    -                GPIO21_LEVEL_LOW: u1,
    -                GPIO21_LEVEL_HIGH: u1,
    -                GPIO21_EDGE_LOW: u1,
    -                GPIO21_EDGE_HIGH: u1,
    -                GPIO22_LEVEL_LOW: u1,
    -                GPIO22_LEVEL_HIGH: u1,
    -                GPIO22_EDGE_LOW: u1,
    -                GPIO22_EDGE_HIGH: u1,
    -                GPIO23_LEVEL_LOW: u1,
    -                GPIO23_LEVEL_HIGH: u1,
    -                GPIO23_EDGE_LOW: u1,
    -                GPIO23_EDGE_HIGH: u1,
    -            }),
    -            ///  Interrupt Enable for dormant_wake
    -            DORMANT_WAKE_INTE3: mmio.Mmio(packed struct(u32) {
    -                GPIO24_LEVEL_LOW: u1,
    -                GPIO24_LEVEL_HIGH: u1,
    -                GPIO24_EDGE_LOW: u1,
    -                GPIO24_EDGE_HIGH: u1,
    -                GPIO25_LEVEL_LOW: u1,
    -                GPIO25_LEVEL_HIGH: u1,
    -                GPIO25_EDGE_LOW: u1,
    -                GPIO25_EDGE_HIGH: u1,
    -                GPIO26_LEVEL_LOW: u1,
    -                GPIO26_LEVEL_HIGH: u1,
    -                GPIO26_EDGE_LOW: u1,
    -                GPIO26_EDGE_HIGH: u1,
    -                GPIO27_LEVEL_LOW: u1,
    -                GPIO27_LEVEL_HIGH: u1,
    -                GPIO27_EDGE_LOW: u1,
    -                GPIO27_EDGE_HIGH: u1,
    -                GPIO28_LEVEL_LOW: u1,
    -                GPIO28_LEVEL_HIGH: u1,
    -                GPIO28_EDGE_LOW: u1,
    -                GPIO28_EDGE_HIGH: u1,
    -                GPIO29_LEVEL_LOW: u1,
    -                GPIO29_LEVEL_HIGH: u1,
    -                GPIO29_EDGE_LOW: u1,
    -                GPIO29_EDGE_HIGH: u1,
    -                padding: u8,
    -            }),
    -            ///  Interrupt Force for dormant_wake
    -            DORMANT_WAKE_INTF0: mmio.Mmio(packed struct(u32) {
    -                GPIO0_LEVEL_LOW: u1,
    -                GPIO0_LEVEL_HIGH: u1,
    -                GPIO0_EDGE_LOW: u1,
    -                GPIO0_EDGE_HIGH: u1,
    -                GPIO1_LEVEL_LOW: u1,
    -                GPIO1_LEVEL_HIGH: u1,
    -                GPIO1_EDGE_LOW: u1,
    -                GPIO1_EDGE_HIGH: u1,
    -                GPIO2_LEVEL_LOW: u1,
    -                GPIO2_LEVEL_HIGH: u1,
    -                GPIO2_EDGE_LOW: u1,
    -                GPIO2_EDGE_HIGH: u1,
    -                GPIO3_LEVEL_LOW: u1,
    -                GPIO3_LEVEL_HIGH: u1,
    -                GPIO3_EDGE_LOW: u1,
    -                GPIO3_EDGE_HIGH: u1,
    -                GPIO4_LEVEL_LOW: u1,
    -                GPIO4_LEVEL_HIGH: u1,
    -                GPIO4_EDGE_LOW: u1,
    -                GPIO4_EDGE_HIGH: u1,
    -                GPIO5_LEVEL_LOW: u1,
    -                GPIO5_LEVEL_HIGH: u1,
    -                GPIO5_EDGE_LOW: u1,
    -                GPIO5_EDGE_HIGH: u1,
    -                GPIO6_LEVEL_LOW: u1,
    -                GPIO6_LEVEL_HIGH: u1,
    -                GPIO6_EDGE_LOW: u1,
    -                GPIO6_EDGE_HIGH: u1,
    -                GPIO7_LEVEL_LOW: u1,
    -                GPIO7_LEVEL_HIGH: u1,
    -                GPIO7_EDGE_LOW: u1,
    -                GPIO7_EDGE_HIGH: u1,
    -            }),
    -            ///  Interrupt Force for dormant_wake
    -            DORMANT_WAKE_INTF1: mmio.Mmio(packed struct(u32) {
    -                GPIO8_LEVEL_LOW: u1,
    -                GPIO8_LEVEL_HIGH: u1,
    -                GPIO8_EDGE_LOW: u1,
    -                GPIO8_EDGE_HIGH: u1,
    -                GPIO9_LEVEL_LOW: u1,
    -                GPIO9_LEVEL_HIGH: u1,
    -                GPIO9_EDGE_LOW: u1,
    -                GPIO9_EDGE_HIGH: u1,
    -                GPIO10_LEVEL_LOW: u1,
    -                GPIO10_LEVEL_HIGH: u1,
    -                GPIO10_EDGE_LOW: u1,
    -                GPIO10_EDGE_HIGH: u1,
    -                GPIO11_LEVEL_LOW: u1,
    -                GPIO11_LEVEL_HIGH: u1,
    -                GPIO11_EDGE_LOW: u1,
    -                GPIO11_EDGE_HIGH: u1,
    -                GPIO12_LEVEL_LOW: u1,
    -                GPIO12_LEVEL_HIGH: u1,
    -                GPIO12_EDGE_LOW: u1,
    -                GPIO12_EDGE_HIGH: u1,
    -                GPIO13_LEVEL_LOW: u1,
    -                GPIO13_LEVEL_HIGH: u1,
    -                GPIO13_EDGE_LOW: u1,
    -                GPIO13_EDGE_HIGH: u1,
    -                GPIO14_LEVEL_LOW: u1,
    -                GPIO14_LEVEL_HIGH: u1,
    -                GPIO14_EDGE_LOW: u1,
    -                GPIO14_EDGE_HIGH: u1,
    -                GPIO15_LEVEL_LOW: u1,
    -                GPIO15_LEVEL_HIGH: u1,
    -                GPIO15_EDGE_LOW: u1,
    -                GPIO15_EDGE_HIGH: u1,
    -            }),
    -            ///  Interrupt Force for dormant_wake
    -            DORMANT_WAKE_INTF2: mmio.Mmio(packed struct(u32) {
    -                GPIO16_LEVEL_LOW: u1,
    -                GPIO16_LEVEL_HIGH: u1,
    -                GPIO16_EDGE_LOW: u1,
    -                GPIO16_EDGE_HIGH: u1,
    -                GPIO17_LEVEL_LOW: u1,
    -                GPIO17_LEVEL_HIGH: u1,
    -                GPIO17_EDGE_LOW: u1,
    -                GPIO17_EDGE_HIGH: u1,
    -                GPIO18_LEVEL_LOW: u1,
    -                GPIO18_LEVEL_HIGH: u1,
    -                GPIO18_EDGE_LOW: u1,
    -                GPIO18_EDGE_HIGH: u1,
    -                GPIO19_LEVEL_LOW: u1,
    -                GPIO19_LEVEL_HIGH: u1,
    -                GPIO19_EDGE_LOW: u1,
    -                GPIO19_EDGE_HIGH: u1,
    -                GPIO20_LEVEL_LOW: u1,
    -                GPIO20_LEVEL_HIGH: u1,
    -                GPIO20_EDGE_LOW: u1,
    -                GPIO20_EDGE_HIGH: u1,
    -                GPIO21_LEVEL_LOW: u1,
    -                GPIO21_LEVEL_HIGH: u1,
    -                GPIO21_EDGE_LOW: u1,
    -                GPIO21_EDGE_HIGH: u1,
    -                GPIO22_LEVEL_LOW: u1,
    -                GPIO22_LEVEL_HIGH: u1,
    -                GPIO22_EDGE_LOW: u1,
    -                GPIO22_EDGE_HIGH: u1,
    -                GPIO23_LEVEL_LOW: u1,
    -                GPIO23_LEVEL_HIGH: u1,
    -                GPIO23_EDGE_LOW: u1,
    -                GPIO23_EDGE_HIGH: u1,
    -            }),
    -            ///  Interrupt Force for dormant_wake
    -            DORMANT_WAKE_INTF3: mmio.Mmio(packed struct(u32) {
    -                GPIO24_LEVEL_LOW: u1,
    -                GPIO24_LEVEL_HIGH: u1,
    -                GPIO24_EDGE_LOW: u1,
    -                GPIO24_EDGE_HIGH: u1,
    -                GPIO25_LEVEL_LOW: u1,
    -                GPIO25_LEVEL_HIGH: u1,
    -                GPIO25_EDGE_LOW: u1,
    -                GPIO25_EDGE_HIGH: u1,
    -                GPIO26_LEVEL_LOW: u1,
    -                GPIO26_LEVEL_HIGH: u1,
    -                GPIO26_EDGE_LOW: u1,
    -                GPIO26_EDGE_HIGH: u1,
    -                GPIO27_LEVEL_LOW: u1,
    -                GPIO27_LEVEL_HIGH: u1,
    -                GPIO27_EDGE_LOW: u1,
    -                GPIO27_EDGE_HIGH: u1,
    -                GPIO28_LEVEL_LOW: u1,
    -                GPIO28_LEVEL_HIGH: u1,
    -                GPIO28_EDGE_LOW: u1,
    -                GPIO28_EDGE_HIGH: u1,
    -                GPIO29_LEVEL_LOW: u1,
    -                GPIO29_LEVEL_HIGH: u1,
    -                GPIO29_EDGE_LOW: u1,
    -                GPIO29_EDGE_HIGH: u1,
    -                padding: u8,
    -            }),
    -            ///  Interrupt status after masking & forcing for dormant_wake
    -            DORMANT_WAKE_INTS0: mmio.Mmio(packed struct(u32) {
    -                GPIO0_LEVEL_LOW: u1,
    -                GPIO0_LEVEL_HIGH: u1,
    -                GPIO0_EDGE_LOW: u1,
    -                GPIO0_EDGE_HIGH: u1,
    -                GPIO1_LEVEL_LOW: u1,
    -                GPIO1_LEVEL_HIGH: u1,
    -                GPIO1_EDGE_LOW: u1,
    -                GPIO1_EDGE_HIGH: u1,
    -                GPIO2_LEVEL_LOW: u1,
    -                GPIO2_LEVEL_HIGH: u1,
    -                GPIO2_EDGE_LOW: u1,
    -                GPIO2_EDGE_HIGH: u1,
    -                GPIO3_LEVEL_LOW: u1,
    -                GPIO3_LEVEL_HIGH: u1,
    -                GPIO3_EDGE_LOW: u1,
    -                GPIO3_EDGE_HIGH: u1,
    -                GPIO4_LEVEL_LOW: u1,
    -                GPIO4_LEVEL_HIGH: u1,
    -                GPIO4_EDGE_LOW: u1,
    -                GPIO4_EDGE_HIGH: u1,
    -                GPIO5_LEVEL_LOW: u1,
    -                GPIO5_LEVEL_HIGH: u1,
    -                GPIO5_EDGE_LOW: u1,
    -                GPIO5_EDGE_HIGH: u1,
    -                GPIO6_LEVEL_LOW: u1,
    -                GPIO6_LEVEL_HIGH: u1,
    -                GPIO6_EDGE_LOW: u1,
    -                GPIO6_EDGE_HIGH: u1,
    -                GPIO7_LEVEL_LOW: u1,
    -                GPIO7_LEVEL_HIGH: u1,
    -                GPIO7_EDGE_LOW: u1,
    -                GPIO7_EDGE_HIGH: u1,
    -            }),
    -            ///  Interrupt status after masking & forcing for dormant_wake
    -            DORMANT_WAKE_INTS1: mmio.Mmio(packed struct(u32) {
    -                GPIO8_LEVEL_LOW: u1,
    -                GPIO8_LEVEL_HIGH: u1,
    -                GPIO8_EDGE_LOW: u1,
    -                GPIO8_EDGE_HIGH: u1,
    -                GPIO9_LEVEL_LOW: u1,
    -                GPIO9_LEVEL_HIGH: u1,
    -                GPIO9_EDGE_LOW: u1,
    -                GPIO9_EDGE_HIGH: u1,
    -                GPIO10_LEVEL_LOW: u1,
    -                GPIO10_LEVEL_HIGH: u1,
    -                GPIO10_EDGE_LOW: u1,
    -                GPIO10_EDGE_HIGH: u1,
    -                GPIO11_LEVEL_LOW: u1,
    -                GPIO11_LEVEL_HIGH: u1,
    -                GPIO11_EDGE_LOW: u1,
    -                GPIO11_EDGE_HIGH: u1,
    -                GPIO12_LEVEL_LOW: u1,
    -                GPIO12_LEVEL_HIGH: u1,
    -                GPIO12_EDGE_LOW: u1,
    -                GPIO12_EDGE_HIGH: u1,
    -                GPIO13_LEVEL_LOW: u1,
    -                GPIO13_LEVEL_HIGH: u1,
    -                GPIO13_EDGE_LOW: u1,
    -                GPIO13_EDGE_HIGH: u1,
    -                GPIO14_LEVEL_LOW: u1,
    -                GPIO14_LEVEL_HIGH: u1,
    -                GPIO14_EDGE_LOW: u1,
    -                GPIO14_EDGE_HIGH: u1,
    -                GPIO15_LEVEL_LOW: u1,
    -                GPIO15_LEVEL_HIGH: u1,
    -                GPIO15_EDGE_LOW: u1,
    -                GPIO15_EDGE_HIGH: u1,
    -            }),
    -            ///  Interrupt status after masking & forcing for dormant_wake
    -            DORMANT_WAKE_INTS2: mmio.Mmio(packed struct(u32) {
    -                GPIO16_LEVEL_LOW: u1,
    -                GPIO16_LEVEL_HIGH: u1,
    -                GPIO16_EDGE_LOW: u1,
    -                GPIO16_EDGE_HIGH: u1,
    -                GPIO17_LEVEL_LOW: u1,
    -                GPIO17_LEVEL_HIGH: u1,
    -                GPIO17_EDGE_LOW: u1,
    -                GPIO17_EDGE_HIGH: u1,
    -                GPIO18_LEVEL_LOW: u1,
    -                GPIO18_LEVEL_HIGH: u1,
    -                GPIO18_EDGE_LOW: u1,
    -                GPIO18_EDGE_HIGH: u1,
    -                GPIO19_LEVEL_LOW: u1,
    -                GPIO19_LEVEL_HIGH: u1,
    -                GPIO19_EDGE_LOW: u1,
    -                GPIO19_EDGE_HIGH: u1,
    -                GPIO20_LEVEL_LOW: u1,
    -                GPIO20_LEVEL_HIGH: u1,
    -                GPIO20_EDGE_LOW: u1,
    -                GPIO20_EDGE_HIGH: u1,
    -                GPIO21_LEVEL_LOW: u1,
    -                GPIO21_LEVEL_HIGH: u1,
    -                GPIO21_EDGE_LOW: u1,
    -                GPIO21_EDGE_HIGH: u1,
    -                GPIO22_LEVEL_LOW: u1,
    -                GPIO22_LEVEL_HIGH: u1,
    -                GPIO22_EDGE_LOW: u1,
    -                GPIO22_EDGE_HIGH: u1,
    -                GPIO23_LEVEL_LOW: u1,
    -                GPIO23_LEVEL_HIGH: u1,
    -                GPIO23_EDGE_LOW: u1,
    -                GPIO23_EDGE_HIGH: u1,
    -            }),
    -            ///  Interrupt status after masking & forcing for dormant_wake
    -            DORMANT_WAKE_INTS3: mmio.Mmio(packed struct(u32) {
    -                GPIO24_LEVEL_LOW: u1,
    -                GPIO24_LEVEL_HIGH: u1,
    -                GPIO24_EDGE_LOW: u1,
    -                GPIO24_EDGE_HIGH: u1,
    -                GPIO25_LEVEL_LOW: u1,
    -                GPIO25_LEVEL_HIGH: u1,
    -                GPIO25_EDGE_LOW: u1,
    -                GPIO25_EDGE_HIGH: u1,
    -                GPIO26_LEVEL_LOW: u1,
    -                GPIO26_LEVEL_HIGH: u1,
    -                GPIO26_EDGE_LOW: u1,
    -                GPIO26_EDGE_HIGH: u1,
    -                GPIO27_LEVEL_LOW: u1,
    -                GPIO27_LEVEL_HIGH: u1,
    -                GPIO27_EDGE_LOW: u1,
    -                GPIO27_EDGE_HIGH: u1,
    -                GPIO28_LEVEL_LOW: u1,
    -                GPIO28_LEVEL_HIGH: u1,
    -                GPIO28_EDGE_LOW: u1,
    -                GPIO28_EDGE_HIGH: u1,
    -                GPIO29_LEVEL_LOW: u1,
    -                GPIO29_LEVEL_HIGH: u1,
    -                GPIO29_EDGE_LOW: u1,
    -                GPIO29_EDGE_HIGH: u1,
    -                padding: u8,
    -            }),
    -        };
    -
    -        pub const IO_QSPI = extern struct {
    -            ///  GPIO status
    -            GPIO_QSPI_SCLK_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO_QSPI_SCLK_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        xip_sclk = 0x0,
    -                        sio_30 = 0x5,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO_QSPI_SS_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO_QSPI_SS_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        xip_ss_n = 0x0,
    -                        sio_31 = 0x5,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO_QSPI_SD0_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO_QSPI_SD0_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        xip_sd0 = 0x0,
    -                        sio_32 = 0x5,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO_QSPI_SD1_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO_QSPI_SD1_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        xip_sd1 = 0x0,
    -                        sio_33 = 0x5,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO_QSPI_SD2_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO_QSPI_SD2_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        xip_sd2 = 0x0,
    -                        sio_34 = 0x5,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  GPIO status
    -            GPIO_QSPI_SD3_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  output signal from selected peripheral, before register override is applied
    -                OUTFROMPERI: u1,
    -                ///  output signal to pad after register override is applied
    -                OUTTOPAD: u1,
    -                reserved12: u2,
    -                ///  output enable from selected peripheral, before register override is applied
    -                OEFROMPERI: u1,
    -                ///  output enable to pad after register override is applied
    -                OETOPAD: u1,
    -                reserved17: u3,
    -                ///  input signal from pad, before override is applied
    -                INFROMPAD: u1,
    -                reserved19: u1,
    -                ///  input signal to peripheral, after override is applied
    -                INTOPERI: u1,
    -                reserved24: u4,
    -                ///  interrupt from pad before override is applied
    -                IRQFROMPAD: u1,
    -                reserved26: u1,
    -                ///  interrupt to processors, after override is applied
    -                IRQTOPROC: u1,
    -                padding: u5,
    -            }),
    -            ///  GPIO control including function select and overrides.
    -            GPIO_QSPI_SD3_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  0-31 -> selects pin function according to the gpio table
    -                ///  31 == NULL
    -                FUNCSEL: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        xip_sd3 = 0x0,
    -                        sio_35 = 0x5,
    -                        null = 0x1f,
    -                        _,
    -                    },
    -                },
    -                reserved8: u3,
    -                OUTOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  drive output low
    -                        LOW = 0x2,
    -                        ///  drive output high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved12: u2,
    -                OEOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  drive output enable from peripheral signal selected by funcsel
    -                        NORMAL = 0x0,
    -                        ///  drive output enable from inverse of peripheral signal selected by funcsel
    -                        INVERT = 0x1,
    -                        ///  disable output
    -                        DISABLE = 0x2,
    -                        ///  enable output
    -                        ENABLE = 0x3,
    -                    },
    -                },
    -                reserved16: u2,
    -                INOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the peri input
    -                        NORMAL = 0x0,
    -                        ///  invert the peri input
    -                        INVERT = 0x1,
    -                        ///  drive peri input low
    -                        LOW = 0x2,
    -                        ///  drive peri input high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                reserved28: u10,
    -                IRQOVER: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  don't invert the interrupt
    -                        NORMAL = 0x0,
    -                        ///  invert the interrupt
    -                        INVERT = 0x1,
    -                        ///  drive interrupt low
    -                        LOW = 0x2,
    -                        ///  drive interrupt high
    -                        HIGH = 0x3,
    -                    },
    -                },
    -                padding: u2,
    -            }),
    -            ///  Raw Interrupts
    -            INTR: mmio.Mmio(packed struct(u32) {
    -                GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    -                GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SCLK_EDGE_LOW: u1,
    -                GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    -                GPIO_QSPI_SS_LEVEL_LOW: u1,
    -                GPIO_QSPI_SS_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SS_EDGE_LOW: u1,
    -                GPIO_QSPI_SS_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD0_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD0_EDGE_LOW: u1,
    -                GPIO_QSPI_SD0_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD1_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD1_EDGE_LOW: u1,
    -                GPIO_QSPI_SD1_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD2_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD2_EDGE_LOW: u1,
    -                GPIO_QSPI_SD2_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD3_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD3_EDGE_LOW: u1,
    -                GPIO_QSPI_SD3_EDGE_HIGH: u1,
    -                padding: u8,
    -            }),
    -            ///  Interrupt Enable for proc0
    -            PROC0_INTE: mmio.Mmio(packed struct(u32) {
    -                GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    -                GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SCLK_EDGE_LOW: u1,
    -                GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    -                GPIO_QSPI_SS_LEVEL_LOW: u1,
    -                GPIO_QSPI_SS_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SS_EDGE_LOW: u1,
    -                GPIO_QSPI_SS_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD0_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD0_EDGE_LOW: u1,
    -                GPIO_QSPI_SD0_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD1_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD1_EDGE_LOW: u1,
    -                GPIO_QSPI_SD1_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD2_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD2_EDGE_LOW: u1,
    -                GPIO_QSPI_SD2_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD3_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD3_EDGE_LOW: u1,
    -                GPIO_QSPI_SD3_EDGE_HIGH: u1,
    -                padding: u8,
    -            }),
    -            ///  Interrupt Force for proc0
    -            PROC0_INTF: mmio.Mmio(packed struct(u32) {
    -                GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    -                GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SCLK_EDGE_LOW: u1,
    -                GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    -                GPIO_QSPI_SS_LEVEL_LOW: u1,
    -                GPIO_QSPI_SS_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SS_EDGE_LOW: u1,
    -                GPIO_QSPI_SS_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD0_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD0_EDGE_LOW: u1,
    -                GPIO_QSPI_SD0_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD1_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD1_EDGE_LOW: u1,
    -                GPIO_QSPI_SD1_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD2_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD2_EDGE_LOW: u1,
    -                GPIO_QSPI_SD2_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD3_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD3_EDGE_LOW: u1,
    -                GPIO_QSPI_SD3_EDGE_HIGH: u1,
    -                padding: u8,
    -            }),
    -            ///  Interrupt status after masking & forcing for proc0
    -            PROC0_INTS: mmio.Mmio(packed struct(u32) {
    -                GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    -                GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SCLK_EDGE_LOW: u1,
    -                GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    -                GPIO_QSPI_SS_LEVEL_LOW: u1,
    -                GPIO_QSPI_SS_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SS_EDGE_LOW: u1,
    -                GPIO_QSPI_SS_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD0_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD0_EDGE_LOW: u1,
    -                GPIO_QSPI_SD0_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD1_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD1_EDGE_LOW: u1,
    -                GPIO_QSPI_SD1_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD2_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD2_EDGE_LOW: u1,
    -                GPIO_QSPI_SD2_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD3_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD3_EDGE_LOW: u1,
    -                GPIO_QSPI_SD3_EDGE_HIGH: u1,
    -                padding: u8,
    -            }),
    -            ///  Interrupt Enable for proc1
    -            PROC1_INTE: mmio.Mmio(packed struct(u32) {
    -                GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    -                GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SCLK_EDGE_LOW: u1,
    -                GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    -                GPIO_QSPI_SS_LEVEL_LOW: u1,
    -                GPIO_QSPI_SS_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SS_EDGE_LOW: u1,
    -                GPIO_QSPI_SS_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD0_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD0_EDGE_LOW: u1,
    -                GPIO_QSPI_SD0_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD1_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD1_EDGE_LOW: u1,
    -                GPIO_QSPI_SD1_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD2_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD2_EDGE_LOW: u1,
    -                GPIO_QSPI_SD2_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD3_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD3_EDGE_LOW: u1,
    -                GPIO_QSPI_SD3_EDGE_HIGH: u1,
    -                padding: u8,
    -            }),
    -            ///  Interrupt Force for proc1
    -            PROC1_INTF: mmio.Mmio(packed struct(u32) {
    -                GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    -                GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SCLK_EDGE_LOW: u1,
    -                GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    -                GPIO_QSPI_SS_LEVEL_LOW: u1,
    -                GPIO_QSPI_SS_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SS_EDGE_LOW: u1,
    -                GPIO_QSPI_SS_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD0_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD0_EDGE_LOW: u1,
    -                GPIO_QSPI_SD0_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD1_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD1_EDGE_LOW: u1,
    -                GPIO_QSPI_SD1_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD2_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD2_EDGE_LOW: u1,
    -                GPIO_QSPI_SD2_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD3_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD3_EDGE_LOW: u1,
    -                GPIO_QSPI_SD3_EDGE_HIGH: u1,
    -                padding: u8,
    -            }),
    -            ///  Interrupt status after masking & forcing for proc1
    -            PROC1_INTS: mmio.Mmio(packed struct(u32) {
    -                GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    -                GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SCLK_EDGE_LOW: u1,
    -                GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    -                GPIO_QSPI_SS_LEVEL_LOW: u1,
    -                GPIO_QSPI_SS_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SS_EDGE_LOW: u1,
    -                GPIO_QSPI_SS_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD0_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD0_EDGE_LOW: u1,
    -                GPIO_QSPI_SD0_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD1_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD1_EDGE_LOW: u1,
    -                GPIO_QSPI_SD1_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD2_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD2_EDGE_LOW: u1,
    -                GPIO_QSPI_SD2_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD3_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD3_EDGE_LOW: u1,
    -                GPIO_QSPI_SD3_EDGE_HIGH: u1,
    -                padding: u8,
    -            }),
    -            ///  Interrupt Enable for dormant_wake
    -            DORMANT_WAKE_INTE: mmio.Mmio(packed struct(u32) {
    -                GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    -                GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SCLK_EDGE_LOW: u1,
    -                GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    -                GPIO_QSPI_SS_LEVEL_LOW: u1,
    -                GPIO_QSPI_SS_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SS_EDGE_LOW: u1,
    -                GPIO_QSPI_SS_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD0_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD0_EDGE_LOW: u1,
    -                GPIO_QSPI_SD0_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD1_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD1_EDGE_LOW: u1,
    -                GPIO_QSPI_SD1_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD2_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD2_EDGE_LOW: u1,
    -                GPIO_QSPI_SD2_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD3_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD3_EDGE_LOW: u1,
    -                GPIO_QSPI_SD3_EDGE_HIGH: u1,
    -                padding: u8,
    -            }),
    -            ///  Interrupt Force for dormant_wake
    -            DORMANT_WAKE_INTF: mmio.Mmio(packed struct(u32) {
    -                GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    -                GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SCLK_EDGE_LOW: u1,
    -                GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    -                GPIO_QSPI_SS_LEVEL_LOW: u1,
    -                GPIO_QSPI_SS_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SS_EDGE_LOW: u1,
    -                GPIO_QSPI_SS_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD0_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD0_EDGE_LOW: u1,
    -                GPIO_QSPI_SD0_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD1_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD1_EDGE_LOW: u1,
    -                GPIO_QSPI_SD1_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD2_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD2_EDGE_LOW: u1,
    -                GPIO_QSPI_SD2_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD3_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD3_EDGE_LOW: u1,
    -                GPIO_QSPI_SD3_EDGE_HIGH: u1,
    -                padding: u8,
    -            }),
    -            ///  Interrupt status after masking & forcing for dormant_wake
    -            DORMANT_WAKE_INTS: mmio.Mmio(packed struct(u32) {
    -                GPIO_QSPI_SCLK_LEVEL_LOW: u1,
    -                GPIO_QSPI_SCLK_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SCLK_EDGE_LOW: u1,
    -                GPIO_QSPI_SCLK_EDGE_HIGH: u1,
    -                GPIO_QSPI_SS_LEVEL_LOW: u1,
    -                GPIO_QSPI_SS_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SS_EDGE_LOW: u1,
    -                GPIO_QSPI_SS_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD0_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD0_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD0_EDGE_LOW: u1,
    -                GPIO_QSPI_SD0_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD1_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD1_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD1_EDGE_LOW: u1,
    -                GPIO_QSPI_SD1_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD2_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD2_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD2_EDGE_LOW: u1,
    -                GPIO_QSPI_SD2_EDGE_HIGH: u1,
    -                GPIO_QSPI_SD3_LEVEL_LOW: u1,
    -                GPIO_QSPI_SD3_LEVEL_HIGH: u1,
    -                GPIO_QSPI_SD3_EDGE_LOW: u1,
    -                GPIO_QSPI_SD3_EDGE_HIGH: u1,
    -                padding: u8,
    -            }),
    -        };
    -
    -        pub const PADS_BANK0 = extern struct {
    -            ///  Voltage select. Per bank control
    -            VOLTAGE_SELECT: mmio.Mmio(packed struct(u32) {
    -                VOLTAGE_SELECT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Set voltage to 3.3V (DVDD >= 2V5)
    -                        @"3v3" = 0x0,
    -                        ///  Set voltage to 1.8V (DVDD <= 1V8)
    -                        @"1v8" = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Pad control register
    -            GPIO0: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO1: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO2: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO3: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO4: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO5: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO6: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO7: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO8: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO9: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO10: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO11: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO12: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO13: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO14: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO15: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO16: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO17: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO18: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO19: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO20: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO21: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO22: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO23: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO24: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO25: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO26: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO27: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO28: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO29: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            SWCLK: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            SWD: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -        };
    -
    -        pub const PADS_QSPI = extern struct {
    -            ///  Voltage select. Per bank control
    -            VOLTAGE_SELECT: mmio.Mmio(packed struct(u32) {
    -                VOLTAGE_SELECT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Set voltage to 3.3V (DVDD >= 2V5)
    -                        @"3v3" = 0x0,
    -                        ///  Set voltage to 1.8V (DVDD <= 1V8)
    -                        @"1v8" = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  Pad control register
    -            GPIO_QSPI_SCLK: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO_QSPI_SD0: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO_QSPI_SD1: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO_QSPI_SD2: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO_QSPI_SD3: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -            ///  Pad control register
    -            GPIO_QSPI_SS: mmio.Mmio(packed struct(u32) {
    -                ///  Slew rate control. 1 = Fast, 0 = Slow
    -                SLEWFAST: u1,
    -                ///  Enable schmitt trigger
    -                SCHMITT: u1,
    -                ///  Pull down enable
    -                PDE: u1,
    -                ///  Pull up enable
    -                PUE: u1,
    -                ///  Drive strength.
    -                DRIVE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"2mA" = 0x0,
    -                        @"4mA" = 0x1,
    -                        @"8mA" = 0x2,
    -                        @"12mA" = 0x3,
    -                    },
    -                },
    -                ///  Input enable
    -                IE: u1,
    -                ///  Output disable. Has priority over output enable from peripherals
    -                OD: u1,
    -                padding: u24,
    -            }),
    -        };
    -
    -        ///  Controls the crystal oscillator
    -        pub const XOSC = extern struct {
    -            ///  Crystal Oscillator Control
    -            CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  Frequency range. This resets to 0xAA0 and cannot be changed.
    -                FREQ_RANGE: packed union {
    -                    raw: u12,
    -                    value: enum(u12) {
    -                        @"1_15MHZ" = 0xaa0,
    -                        RESERVED_1 = 0xaa1,
    -                        RESERVED_2 = 0xaa2,
    -                        RESERVED_3 = 0xaa3,
    -                        _,
    -                    },
    -                },
    -                ///  On power-up this field is initialised to DISABLE and the chip runs from the ROSC.
    -                ///  If the chip has subsequently been programmed to run from the XOSC then setting this field to DISABLE may lock-up the chip. If this is a concern then run the clk_ref from the ROSC and enable the clk_sys RESUS feature.
    -                ///  The 12-bit code is intended to give some protection against accidental writes. An invalid setting will enable the oscillator.
    -                ENABLE: packed union {
    -                    raw: u12,
    -                    value: enum(u12) {
    -                        DISABLE = 0xd1e,
    -                        ENABLE = 0xfab,
    -                        _,
    -                    },
    -                },
    -                padding: u8,
    -            }),
    -            ///  Crystal Oscillator Status
    -            STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  The current frequency range setting, always reads 0
    -                FREQ_RANGE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"1_15MHZ" = 0x0,
    -                        RESERVED_1 = 0x1,
    -                        RESERVED_2 = 0x2,
    -                        RESERVED_3 = 0x3,
    -                    },
    -                },
    -                reserved12: u10,
    -                ///  Oscillator is enabled but not necessarily running and stable, resets to 0
    -                ENABLED: u1,
    -                reserved24: u11,
    -                ///  An invalid value has been written to CTRL_ENABLE or CTRL_FREQ_RANGE or DORMANT
    -                BADWRITE: u1,
    -                reserved31: u6,
    -                ///  Oscillator is running and stable
    -                STABLE: u1,
    -            }),
    -            ///  Crystal Oscillator pause control
    -            ///  This is used to save power by pausing the XOSC
    -            ///  On power-up this field is initialised to WAKE
    -            ///  An invalid write will also select WAKE
    -            ///  WARNING: stop the PLLs before selecting dormant mode
    -            ///  WARNING: setup the irq before selecting dormant mode
    -            DORMANT: u32,
    -            ///  Controls the startup delay
    -            STARTUP: mmio.Mmio(packed struct(u32) {
    -                ///  in multiples of 256*xtal_period. The reset value of 0xc4 corresponds to approx 50 000 cycles.
    -                DELAY: u14,
    -                reserved20: u6,
    -                ///  Multiplies the startup_delay by 4. This is of little value to the user given that the delay can be programmed directly.
    -                X4: u1,
    -                padding: u11,
    -            }),
    -            reserved28: [12]u8,
    -            ///  A down counter running at the xosc frequency which counts to zero and stops.
    -            ///  To start the counter write a non-zero value.
    -            ///  Can be used for short software pauses when setting up time sensitive hardware.
    -            COUNT: mmio.Mmio(packed struct(u32) {
    -                COUNT: u8,
    -                padding: u24,
    -            }),
    -        };
    -
    -        pub const PLL_SYS = extern struct {
    -            ///  Control and Status
    -            ///  GENERAL CONSTRAINTS:
    -            ///  Reference clock frequency min=5MHz, max=800MHz
    -            ///  Feedback divider min=16, max=320
    -            ///  VCO frequency min=400MHz, max=1600MHz
    -            CS: mmio.Mmio(packed struct(u32) {
    -                ///  Divides the PLL input reference clock.
    -                ///  Behaviour is undefined for div=0.
    -                ///  PLL output will be unpredictable during refdiv changes, wait for lock=1 before using it.
    -                REFDIV: u6,
    -                reserved8: u2,
    -                ///  Passes the reference clock to the output instead of the divided VCO. The VCO continues to run so the user can switch between the reference clock and the divided VCO but the output will glitch when doing so.
    -                BYPASS: u1,
    -                reserved31: u22,
    -                ///  PLL is locked
    -                LOCK: u1,
    -            }),
    -            ///  Controls the PLL power modes.
    -            PWR: mmio.Mmio(packed struct(u32) {
    -                ///  PLL powerdown
    -                ///  To save power set high when PLL output not required.
    -                PD: u1,
    -                reserved2: u1,
    -                ///  PLL DSM powerdown
    -                ///  Nothing is achieved by setting this low.
    -                DSMPD: u1,
    -                ///  PLL post divider powerdown
    -                ///  To save power set high when PLL output not required or bypass=1.
    -                POSTDIVPD: u1,
    -                reserved5: u1,
    -                ///  PLL VCO powerdown
    -                ///  To save power set high when PLL output not required or bypass=1.
    -                VCOPD: u1,
    -                padding: u26,
    -            }),
    -            ///  Feedback divisor
    -            ///  (note: this PLL does not support fractional division)
    -            FBDIV_INT: mmio.Mmio(packed struct(u32) {
    -                ///  see ctrl reg description for constraints
    -                FBDIV_INT: u12,
    -                padding: u20,
    -            }),
    -            ///  Controls the PLL post dividers for the primary output
    -            ///  (note: this PLL does not have a secondary output)
    -            ///  the primary output is driven from VCO divided by postdiv1*postdiv2
    -            PRIM: mmio.Mmio(packed struct(u32) {
    -                reserved12: u12,
    -                ///  divide by 1-7
    -                POSTDIV2: u3,
    -                reserved16: u1,
    -                ///  divide by 1-7
    -                POSTDIV1: u3,
    -                padding: u13,
    -            }),
    -        };
    -
    -        pub const PPB = extern struct {
    -            reserved57360: [57360]u8,
    -            ///  Use the SysTick Control and Status Register to enable the SysTick features.
    -            SYST_CSR: mmio.Mmio(packed struct(u32) {
    -                ///  Enable SysTick counter:
    -                ///  0 = Counter disabled.
    -                ///  1 = Counter enabled.
    -                ENABLE: u1,
    -                ///  Enables SysTick exception request:
    -                ///  0 = Counting down to zero does not assert the SysTick exception request.
    -                ///  1 = Counting down to zero to asserts the SysTick exception request.
    -                TICKINT: u1,
    -                ///  SysTick clock source. Always reads as one if SYST_CALIB reports NOREF.
    -                ///  Selects the SysTick timer clock source:
    -                ///  0 = External reference clock.
    -                ///  1 = Processor clock.
    -                CLKSOURCE: u1,
    -                reserved16: u13,
    -                ///  Returns 1 if timer counted to 0 since last time this was read. Clears on read by application or debugger.
    -                COUNTFLAG: u1,
    -                padding: u15,
    -            }),
    -            ///  Use the SysTick Reload Value Register to specify the start value to load into the current value register when the counter reaches 0. It can be any value between 0 and 0x00FFFFFF. A start value of 0 is possible, but has no effect because the SysTick interrupt and COUNTFLAG are activated when counting from 1 to 0. The reset value of this register is UNKNOWN.
    -            ///  To generate a multi-shot timer with a period of N processor clock cycles, use a RELOAD value of N-1. For example, if the SysTick interrupt is required every 100 clock pulses, set RELOAD to 99.
    -            SYST_RVR: mmio.Mmio(packed struct(u32) {
    -                ///  Value to load into the SysTick Current Value Register when the counter reaches 0.
    -                RELOAD: u24,
    -                padding: u8,
    -            }),
    -            ///  Use the SysTick Current Value Register to find the current value in the register. The reset value of this register is UNKNOWN.
    -            SYST_CVR: mmio.Mmio(packed struct(u32) {
    -                ///  Reads return the current value of the SysTick counter. This register is write-clear. Writing to it with any value clears the register to 0. Clearing this register also clears the COUNTFLAG bit of the SysTick Control and Status Register.
    -                CURRENT: u24,
    -                padding: u8,
    -            }),
    -            ///  Use the SysTick Calibration Value Register to enable software to scale to any required speed using divide and multiply.
    -            SYST_CALIB: mmio.Mmio(packed struct(u32) {
    -                ///  An optional Reload value to be used for 10ms (100Hz) timing, subject to system clock skew errors. If the value reads as 0, the calibration value is not known.
    -                TENMS: u24,
    -                reserved30: u6,
    -                ///  If reads as 1, the calibration value for 10ms is inexact (due to clock frequency).
    -                SKEW: u1,
    -                ///  If reads as 1, the Reference clock is not provided - the CLKSOURCE bit of the SysTick Control and Status register will be forced to 1 and cannot be cleared to 0.
    -                NOREF: u1,
    -            }),
    -            reserved57600: [224]u8,
    -            ///  Use the Interrupt Set-Enable Register to enable interrupts and determine which interrupts are currently enabled.
    -            ///  If a pending interrupt is enabled, the NVIC activates the interrupt based on its priority. If an interrupt is not enabled, asserting its interrupt signal changes the interrupt state to pending, but the NVIC never activates the interrupt, regardless of its priority.
    -            NVIC_ISER: mmio.Mmio(packed struct(u32) {
    -                ///  Interrupt set-enable bits.
    -                ///  Write:
    -                ///  0 = No effect.
    -                ///  1 = Enable interrupt.
    -                ///  Read:
    -                ///  0 = Interrupt disabled.
    -                ///  1 = Interrupt enabled.
    -                SETENA: u32,
    -            }),
    -            reserved57728: [124]u8,
    -            ///  Use the Interrupt Clear-Enable Registers to disable interrupts and determine which interrupts are currently enabled.
    -            NVIC_ICER: mmio.Mmio(packed struct(u32) {
    -                ///  Interrupt clear-enable bits.
    -                ///  Write:
    -                ///  0 = No effect.
    -                ///  1 = Disable interrupt.
    -                ///  Read:
    -                ///  0 = Interrupt disabled.
    -                ///  1 = Interrupt enabled.
    -                CLRENA: u32,
    -            }),
    -            reserved57856: [124]u8,
    -            ///  The NVIC_ISPR forces interrupts into the pending state, and shows which interrupts are pending.
    -            NVIC_ISPR: mmio.Mmio(packed struct(u32) {
    -                ///  Interrupt set-pending bits.
    -                ///  Write:
    -                ///  0 = No effect.
    -                ///  1 = Changes interrupt state to pending.
    -                ///  Read:
    -                ///  0 = Interrupt is not pending.
    -                ///  1 = Interrupt is pending.
    -                ///  Note: Writing 1 to the NVIC_ISPR bit corresponding to:
    -                ///  An interrupt that is pending has no effect.
    -                ///  A disabled interrupt sets the state of that interrupt to pending.
    -                SETPEND: u32,
    -            }),
    -            reserved57984: [124]u8,
    -            ///  Use the Interrupt Clear-Pending Register to clear pending interrupts and determine which interrupts are currently pending.
    -            NVIC_ICPR: mmio.Mmio(packed struct(u32) {
    -                ///  Interrupt clear-pending bits.
    -                ///  Write:
    -                ///  0 = No effect.
    -                ///  1 = Removes pending state and interrupt.
    -                ///  Read:
    -                ///  0 = Interrupt is not pending.
    -                ///  1 = Interrupt is pending.
    -                CLRPEND: u32,
    -            }),
    -            reserved58368: [380]u8,
    -            ///  Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest.
    -            ///  Note: Writing 1 to an NVIC_ICPR bit does not affect the active state of the corresponding interrupt.
    -            ///  These registers are only word-accessible
    -            NVIC_IPR0: mmio.Mmio(packed struct(u32) {
    -                reserved6: u6,
    -                ///  Priority of interrupt 0
    -                IP_0: u2,
    -                reserved14: u6,
    -                ///  Priority of interrupt 1
    -                IP_1: u2,
    -                reserved22: u6,
    -                ///  Priority of interrupt 2
    -                IP_2: u2,
    -                reserved30: u6,
    -                ///  Priority of interrupt 3
    -                IP_3: u2,
    -            }),
    -            ///  Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest.
    -            NVIC_IPR1: mmio.Mmio(packed struct(u32) {
    -                reserved6: u6,
    -                ///  Priority of interrupt 4
    -                IP_4: u2,
    -                reserved14: u6,
    -                ///  Priority of interrupt 5
    -                IP_5: u2,
    -                reserved22: u6,
    -                ///  Priority of interrupt 6
    -                IP_6: u2,
    -                reserved30: u6,
    -                ///  Priority of interrupt 7
    -                IP_7: u2,
    -            }),
    -            ///  Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest.
    -            NVIC_IPR2: mmio.Mmio(packed struct(u32) {
    -                reserved6: u6,
    -                ///  Priority of interrupt 8
    -                IP_8: u2,
    -                reserved14: u6,
    -                ///  Priority of interrupt 9
    -                IP_9: u2,
    -                reserved22: u6,
    -                ///  Priority of interrupt 10
    -                IP_10: u2,
    -                reserved30: u6,
    -                ///  Priority of interrupt 11
    -                IP_11: u2,
    -            }),
    -            ///  Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest.
    -            NVIC_IPR3: mmio.Mmio(packed struct(u32) {
    -                reserved6: u6,
    -                ///  Priority of interrupt 12
    -                IP_12: u2,
    -                reserved14: u6,
    -                ///  Priority of interrupt 13
    -                IP_13: u2,
    -                reserved22: u6,
    -                ///  Priority of interrupt 14
    -                IP_14: u2,
    -                reserved30: u6,
    -                ///  Priority of interrupt 15
    -                IP_15: u2,
    -            }),
    -            ///  Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest.
    -            NVIC_IPR4: mmio.Mmio(packed struct(u32) {
    -                reserved6: u6,
    -                ///  Priority of interrupt 16
    -                IP_16: u2,
    -                reserved14: u6,
    -                ///  Priority of interrupt 17
    -                IP_17: u2,
    -                reserved22: u6,
    -                ///  Priority of interrupt 18
    -                IP_18: u2,
    -                reserved30: u6,
    -                ///  Priority of interrupt 19
    -                IP_19: u2,
    -            }),
    -            ///  Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest.
    -            NVIC_IPR5: mmio.Mmio(packed struct(u32) {
    -                reserved6: u6,
    -                ///  Priority of interrupt 20
    -                IP_20: u2,
    -                reserved14: u6,
    -                ///  Priority of interrupt 21
    -                IP_21: u2,
    -                reserved22: u6,
    -                ///  Priority of interrupt 22
    -                IP_22: u2,
    -                reserved30: u6,
    -                ///  Priority of interrupt 23
    -                IP_23: u2,
    -            }),
    -            ///  Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest.
    -            NVIC_IPR6: mmio.Mmio(packed struct(u32) {
    -                reserved6: u6,
    -                ///  Priority of interrupt 24
    -                IP_24: u2,
    -                reserved14: u6,
    -                ///  Priority of interrupt 25
    -                IP_25: u2,
    -                reserved22: u6,
    -                ///  Priority of interrupt 26
    -                IP_26: u2,
    -                reserved30: u6,
    -                ///  Priority of interrupt 27
    -                IP_27: u2,
    -            }),
    -            ///  Use the Interrupt Priority Registers to assign a priority from 0 to 3 to each of the available interrupts. 0 is the highest priority, and 3 is the lowest.
    -            NVIC_IPR7: mmio.Mmio(packed struct(u32) {
    -                reserved6: u6,
    -                ///  Priority of interrupt 28
    -                IP_28: u2,
    -                reserved14: u6,
    -                ///  Priority of interrupt 29
    -                IP_29: u2,
    -                reserved22: u6,
    -                ///  Priority of interrupt 30
    -                IP_30: u2,
    -                reserved30: u6,
    -                ///  Priority of interrupt 31
    -                IP_31: u2,
    -            }),
    -            reserved60672: [2272]u8,
    -            ///  Read the CPU ID Base Register to determine: the ID number of the processor core, the version number of the processor core, the implementation details of the processor core.
    -            CPUID: mmio.Mmio(packed struct(u32) {
    -                ///  Minor revision number m in the rnpm revision status:
    -                ///  0x1 = Patch 1.
    -                REVISION: u4,
    -                ///  Number of processor within family: 0xC60 = Cortex-M0+
    -                PARTNO: u12,
    -                ///  Constant that defines the architecture of the processor:
    -                ///  0xC = ARMv6-M architecture.
    -                ARCHITECTURE: u4,
    -                ///  Major revision number n in the rnpm revision status:
    -                ///  0x0 = Revision 0.
    -                VARIANT: u4,
    -                ///  Implementor code: 0x41 = ARM
    -                IMPLEMENTER: u8,
    -            }),
    -            ///  Use the Interrupt Control State Register to set a pending Non-Maskable Interrupt (NMI), set or clear a pending PendSV, set or clear a pending SysTick, check for pending exceptions, check the vector number of the highest priority pended exception, check the vector number of the active exception.
    -            ICSR: mmio.Mmio(packed struct(u32) {
    -                ///  Active exception number field. Reset clears the VECTACTIVE field.
    -                VECTACTIVE: u9,
    -                reserved12: u3,
    -                ///  Indicates the exception number for the highest priority pending exception: 0 = no pending exceptions. Non zero = The pending state includes the effect of memory-mapped enable and mask registers. It does not include the PRIMASK special-purpose register qualifier.
    -                VECTPENDING: u9,
    -                reserved22: u1,
    -                ///  External interrupt pending flag
    -                ISRPENDING: u1,
    -                ///  The system can only access this bit when the core is halted. It indicates that a pending interrupt is to be taken in the next running cycle. If C_MASKINTS is clear in the Debug Halting Control and Status Register, the interrupt is serviced.
    -                ISRPREEMPT: u1,
    -                reserved25: u1,
    -                ///  SysTick exception clear-pending bit.
    -                ///  Write:
    -                ///  0 = No effect.
    -                ///  1 = Removes the pending state from the SysTick exception.
    -                ///  This bit is WO. On a register read its value is Unknown.
    -                PENDSTCLR: u1,
    -                ///  SysTick exception set-pending bit.
    -                ///  Write:
    -                ///  0 = No effect.
    -                ///  1 = Changes SysTick exception state to pending.
    -                ///  Read:
    -                ///  0 = SysTick exception is not pending.
    -                ///  1 = SysTick exception is pending.
    -                PENDSTSET: u1,
    -                ///  PendSV clear-pending bit.
    -                ///  Write:
    -                ///  0 = No effect.
    -                ///  1 = Removes the pending state from the PendSV exception.
    -                PENDSVCLR: u1,
    -                ///  PendSV set-pending bit.
    -                ///  Write:
    -                ///  0 = No effect.
    -                ///  1 = Changes PendSV exception state to pending.
    -                ///  Read:
    -                ///  0 = PendSV exception is not pending.
    -                ///  1 = PendSV exception is pending.
    -                ///  Writing 1 to this bit is the only way to set the PendSV exception state to pending.
    -                PENDSVSET: u1,
    -                reserved31: u2,
    -                ///  Setting this bit will activate an NMI. Since NMI is the highest priority exception, it will activate as soon as it is registered.
    -                ///  NMI set-pending bit.
    -                ///  Write:
    -                ///  0 = No effect.
    -                ///  1 = Changes NMI exception state to pending.
    -                ///  Read:
    -                ///  0 = NMI exception is not pending.
    -                ///  1 = NMI exception is pending.
    -                ///  Because NMI is the highest-priority exception, normally the processor enters the NMI
    -                ///  exception handler as soon as it detects a write of 1 to this bit. Entering the handler then clears
    -                ///  this bit to 0. This means a read of this bit by the NMI exception handler returns 1 only if the
    -                ///  NMI signal is reasserted while the processor is executing that handler.
    -                NMIPENDSET: u1,
    -            }),
    -            ///  The VTOR holds the vector table offset address.
    -            VTOR: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  Bits [31:8] of the indicate the vector table offset address.
    -                TBLOFF: u24,
    -            }),
    -            ///  Use the Application Interrupt and Reset Control Register to: determine data endianness, clear all active state information from debug halt mode, request a system reset.
    -            AIRCR: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Clears all active state information for fixed and configurable exceptions. This bit: is self-clearing, can only be set by the DAP when the core is halted. When set: clears all active exception status of the processor, forces a return to Thread mode, forces an IPSR of 0. A debugger must re-initialize the stack.
    -                VECTCLRACTIVE: u1,
    -                ///  Writing 1 to this bit causes the SYSRESETREQ signal to the outer system to be asserted to request a reset. The intention is to force a large system reset of all major components except for debug. The C_HALT bit in the DHCSR is cleared as a result of the system reset requested. The debugger does not lose contact with the device.
    -                SYSRESETREQ: u1,
    -                reserved15: u12,
    -                ///  Data endianness implemented:
    -                ///  0 = Little-endian.
    -                ENDIANESS: u1,
    -                ///  Register key:
    -                ///  Reads as Unknown
    -                ///  On writes, write 0x05FA to VECTKEY, otherwise the write is ignored.
    -                VECTKEY: u16,
    -            }),
    -            ///  System Control Register. Use the System Control Register for power-management functions: signal to the system when the processor can enter a low power state, control how the processor enters and exits low power states.
    -            SCR: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Indicates sleep-on-exit when returning from Handler mode to Thread mode:
    -                ///  0 = Do not sleep when returning to Thread mode.
    -                ///  1 = Enter sleep, or deep sleep, on return from an ISR to Thread mode.
    -                ///  Setting this bit to 1 enables an interrupt driven application to avoid returning to an empty main application.
    -                SLEEPONEXIT: u1,
    -                ///  Controls whether the processor uses sleep or deep sleep as its low power mode:
    -                ///  0 = Sleep.
    -                ///  1 = Deep sleep.
    -                SLEEPDEEP: u1,
    -                reserved4: u1,
    -                ///  Send Event on Pending bit:
    -                ///  0 = Only enabled interrupts or events can wakeup the processor, disabled interrupts are excluded.
    -                ///  1 = Enabled events and all interrupts, including disabled interrupts, can wakeup the processor.
    -                ///  When an event or interrupt becomes pending, the event signal wakes up the processor from WFE. If the
    -                ///  processor is not waiting for an event, the event is registered and affects the next WFE.
    -                ///  The processor also wakes up on execution of an SEV instruction or an external event.
    -                SEVONPEND: u1,
    -                padding: u27,
    -            }),
    -            ///  The Configuration and Control Register permanently enables stack alignment and causes unaligned accesses to result in a Hard Fault.
    -            CCR: mmio.Mmio(packed struct(u32) {
    -                reserved3: u3,
    -                ///  Always reads as one, indicates that all unaligned accesses generate a HardFault.
    -                UNALIGN_TRP: u1,
    -                reserved9: u5,
    -                ///  Always reads as one, indicates 8-byte stack alignment on exception entry. On exception entry, the processor uses bit[9] of the stacked PSR to indicate the stack alignment. On return from the exception it uses this stacked bit to restore the correct stack alignment.
    -                STKALIGN: u1,
    -                padding: u22,
    -            }),
    -            reserved60700: [4]u8,
    -            ///  System handlers are a special class of exception handler that can have their priority set to any of the priority levels. Use the System Handler Priority Register 2 to set the priority of SVCall.
    -            SHPR2: mmio.Mmio(packed struct(u32) {
    -                reserved30: u30,
    -                ///  Priority of system handler 11, SVCall
    -                PRI_11: u2,
    -            }),
    -            ///  System handlers are a special class of exception handler that can have their priority set to any of the priority levels. Use the System Handler Priority Register 3 to set the priority of PendSV and SysTick.
    -            SHPR3: mmio.Mmio(packed struct(u32) {
    -                reserved22: u22,
    -                ///  Priority of system handler 14, PendSV
    -                PRI_14: u2,
    -                reserved30: u6,
    -                ///  Priority of system handler 15, SysTick
    -                PRI_15: u2,
    -            }),
    -            ///  Use the System Handler Control and State Register to determine or clear the pending status of SVCall.
    -            SHCSR: mmio.Mmio(packed struct(u32) {
    -                reserved15: u15,
    -                ///  Reads as 1 if SVCall is Pending. Write 1 to set pending SVCall, write 0 to clear pending SVCall.
    -                SVCALLPENDED: u1,
    -                padding: u16,
    -            }),
    -            reserved60816: [104]u8,
    -            ///  Read the MPU Type Register to determine if the processor implements an MPU, and how many regions the MPU supports.
    -            MPU_TYPE: mmio.Mmio(packed struct(u32) {
    -                ///  Indicates support for separate instruction and data address maps. Reads as 0 as ARMv6-M only supports a unified MPU.
    -                SEPARATE: u1,
    -                reserved8: u7,
    -                ///  Number of regions supported by the MPU.
    -                DREGION: u8,
    -                ///  Instruction region. Reads as zero as ARMv6-M only supports a unified MPU.
    -                IREGION: u8,
    -                padding: u8,
    -            }),
    -            ///  Use the MPU Control Register to enable and disable the MPU, and to control whether the default memory map is enabled as a background region for privileged accesses, and whether the MPU is enabled for HardFaults and NMIs.
    -            MPU_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  Enables the MPU. If the MPU is disabled, privileged and unprivileged accesses use the default memory map.
    -                ///  0 = MPU disabled.
    -                ///  1 = MPU enabled.
    -                ENABLE: u1,
    -                ///  Controls the use of the MPU for HardFaults and NMIs. Setting this bit when ENABLE is clear results in UNPREDICTABLE behaviour.
    -                ///  When the MPU is enabled:
    -                ///  0 = MPU is disabled during HardFault and NMI handlers, regardless of the value of the ENABLE bit.
    -                ///  1 = the MPU is enabled during HardFault and NMI handlers.
    -                HFNMIENA: u1,
    -                ///  Controls whether the default memory map is enabled as a background region for privileged accesses. This bit is ignored when ENABLE is clear.
    -                ///  0 = If the MPU is enabled, disables use of the default memory map. Any memory access to a location not
    -                ///  covered by any enabled region causes a fault.
    -                ///  1 = If the MPU is enabled, enables use of the default memory map as a background region for privileged software accesses.
    -                ///  When enabled, the background region acts as if it is region number -1. Any region that is defined and enabled has priority over this default map.
    -                PRIVDEFENA: u1,
    -                padding: u29,
    -            }),
    -            ///  Use the MPU Region Number Register to select the region currently accessed by MPU_RBAR and MPU_RASR.
    -            MPU_RNR: mmio.Mmio(packed struct(u32) {
    -                ///  Indicates the MPU region referenced by the MPU_RBAR and MPU_RASR registers.
    -                ///  The MPU supports 8 memory regions, so the permitted values of this field are 0-7.
    -                REGION: u4,
    -                padding: u28,
    -            }),
    -            ///  Read the MPU Region Base Address Register to determine the base address of the region identified by MPU_RNR. Write to update the base address of said region or that of a specified region, with whose number MPU_RNR will also be updated.
    -            MPU_RBAR: mmio.Mmio(packed struct(u32) {
    -                ///  On writes, specifies the number of the region whose base address to update provided VALID is set written as 1. On reads, returns bits [3:0] of MPU_RNR.
    -                REGION: u4,
    -                ///  On writes, indicates whether the write must update the base address of the region identified by the REGION field, updating the MPU_RNR to indicate this new region.
    -                ///  Write:
    -                ///  0 = MPU_RNR not changed, and the processor:
    -                ///  Updates the base address for the region specified in the MPU_RNR.
    -                ///  Ignores the value of the REGION field.
    -                ///  1 = The processor:
    -                ///  Updates the value of the MPU_RNR to the value of the REGION field.
    -                ///  Updates the base address for the region specified in the REGION field.
    -                ///  Always reads as zero.
    -                VALID: u1,
    -                reserved8: u3,
    -                ///  Base address of the region.
    -                ADDR: u24,
    -            }),
    -            ///  Use the MPU Region Attribute and Size Register to define the size, access behaviour and memory type of the region identified by MPU_RNR, and enable that region.
    -            MPU_RASR: mmio.Mmio(packed struct(u32) {
    -                ///  Enables the region.
    -                ENABLE: u1,
    -                ///  Indicates the region size. Region size in bytes = 2^(SIZE+1). The minimum permitted value is 7 (b00111) = 256Bytes
    -                SIZE: u5,
    -                reserved8: u2,
    -                ///  Subregion Disable. For regions of 256 bytes or larger, each bit of this field controls whether one of the eight equal subregions is enabled.
    -                SRD: u8,
    -                ///  The MPU Region Attribute field. Use to define the region attribute control.
    -                ///  28 = XN: Instruction access disable bit:
    -                ///  0 = Instruction fetches enabled.
    -                ///  1 = Instruction fetches disabled.
    -                ///  26:24 = AP: Access permission field
    -                ///  18 = S: Shareable bit
    -                ///  17 = C: Cacheable bit
    -                ///  16 = B: Bufferable bit
    -                ATTRS: u16,
    -            }),
    -        };
    -
    -        ///  Register block for busfabric control signals and performance counters
    -        pub const BUSCTRL = extern struct {
    -            ///  Set the priority of each master for bus arbitration.
    -            BUS_PRIORITY: mmio.Mmio(packed struct(u32) {
    -                ///  0 - low priority, 1 - high priority
    -                PROC0: u1,
    -                reserved4: u3,
    -                ///  0 - low priority, 1 - high priority
    -                PROC1: u1,
    -                reserved8: u3,
    -                ///  0 - low priority, 1 - high priority
    -                DMA_R: u1,
    -                reserved12: u3,
    -                ///  0 - low priority, 1 - high priority
    -                DMA_W: u1,
    -                padding: u19,
    -            }),
    -            ///  Bus priority acknowledge
    -            BUS_PRIORITY_ACK: mmio.Mmio(packed struct(u32) {
    -                ///  Goes to 1 once all arbiters have registered the new global priority levels.
    -                ///  Arbiters update their local priority when servicing a new nonsequential access.
    -                ///  In normal circumstances this will happen almost immediately.
    -                BUS_PRIORITY_ACK: u1,
    -                padding: u31,
    -            }),
    -            ///  Bus fabric performance counter 0
    -            PERFCTR0: mmio.Mmio(packed struct(u32) {
    -                ///  Busfabric saturating performance counter 0
    -                ///  Count some event signal from the busfabric arbiters.
    -                ///  Write any value to clear. Select an event to count using PERFSEL0
    -                PERFCTR0: u24,
    -                padding: u8,
    -            }),
    -            ///  Bus fabric performance event select for PERFCTR0
    -            PERFSEL0: mmio.Mmio(packed struct(u32) {
    -                ///  Select an event for PERFCTR0. Count either contested accesses, or all accesses, on a downstream port of the main crossbar.
    -                PERFSEL0: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        apb_contested = 0x0,
    -                        apb = 0x1,
    -                        fastperi_contested = 0x2,
    -                        fastperi = 0x3,
    -                        sram5_contested = 0x4,
    -                        sram5 = 0x5,
    -                        sram4_contested = 0x6,
    -                        sram4 = 0x7,
    -                        sram3_contested = 0x8,
    -                        sram3 = 0x9,
    -                        sram2_contested = 0xa,
    -                        sram2 = 0xb,
    -                        sram1_contested = 0xc,
    -                        sram1 = 0xd,
    -                        sram0_contested = 0xe,
    -                        sram0 = 0xf,
    -                        xip_main_contested = 0x10,
    -                        xip_main = 0x11,
    -                        rom_contested = 0x12,
    -                        rom = 0x13,
    -                        _,
    -                    },
    -                },
    -                padding: u27,
    -            }),
    -            ///  Bus fabric performance counter 1
    -            PERFCTR1: mmio.Mmio(packed struct(u32) {
    -                ///  Busfabric saturating performance counter 1
    -                ///  Count some event signal from the busfabric arbiters.
    -                ///  Write any value to clear. Select an event to count using PERFSEL1
    -                PERFCTR1: u24,
    -                padding: u8,
    -            }),
    -            ///  Bus fabric performance event select for PERFCTR1
    -            PERFSEL1: mmio.Mmio(packed struct(u32) {
    -                ///  Select an event for PERFCTR1. Count either contested accesses, or all accesses, on a downstream port of the main crossbar.
    -                PERFSEL1: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        apb_contested = 0x0,
    -                        apb = 0x1,
    -                        fastperi_contested = 0x2,
    -                        fastperi = 0x3,
    -                        sram5_contested = 0x4,
    -                        sram5 = 0x5,
    -                        sram4_contested = 0x6,
    -                        sram4 = 0x7,
    -                        sram3_contested = 0x8,
    -                        sram3 = 0x9,
    -                        sram2_contested = 0xa,
    -                        sram2 = 0xb,
    -                        sram1_contested = 0xc,
    -                        sram1 = 0xd,
    -                        sram0_contested = 0xe,
    -                        sram0 = 0xf,
    -                        xip_main_contested = 0x10,
    -                        xip_main = 0x11,
    -                        rom_contested = 0x12,
    -                        rom = 0x13,
    -                        _,
    -                    },
    -                },
    -                padding: u27,
    -            }),
    -            ///  Bus fabric performance counter 2
    -            PERFCTR2: mmio.Mmio(packed struct(u32) {
    -                ///  Busfabric saturating performance counter 2
    -                ///  Count some event signal from the busfabric arbiters.
    -                ///  Write any value to clear. Select an event to count using PERFSEL2
    -                PERFCTR2: u24,
    -                padding: u8,
    -            }),
    -            ///  Bus fabric performance event select for PERFCTR2
    -            PERFSEL2: mmio.Mmio(packed struct(u32) {
    -                ///  Select an event for PERFCTR2. Count either contested accesses, or all accesses, on a downstream port of the main crossbar.
    -                PERFSEL2: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        apb_contested = 0x0,
    -                        apb = 0x1,
    -                        fastperi_contested = 0x2,
    -                        fastperi = 0x3,
    -                        sram5_contested = 0x4,
    -                        sram5 = 0x5,
    -                        sram4_contested = 0x6,
    -                        sram4 = 0x7,
    -                        sram3_contested = 0x8,
    -                        sram3 = 0x9,
    -                        sram2_contested = 0xa,
    -                        sram2 = 0xb,
    -                        sram1_contested = 0xc,
    -                        sram1 = 0xd,
    -                        sram0_contested = 0xe,
    -                        sram0 = 0xf,
    -                        xip_main_contested = 0x10,
    -                        xip_main = 0x11,
    -                        rom_contested = 0x12,
    -                        rom = 0x13,
    -                        _,
    -                    },
    -                },
    -                padding: u27,
    -            }),
    -            ///  Bus fabric performance counter 3
    -            PERFCTR3: mmio.Mmio(packed struct(u32) {
    -                ///  Busfabric saturating performance counter 3
    -                ///  Count some event signal from the busfabric arbiters.
    -                ///  Write any value to clear. Select an event to count using PERFSEL3
    -                PERFCTR3: u24,
    -                padding: u8,
    -            }),
    -            ///  Bus fabric performance event select for PERFCTR3
    -            PERFSEL3: mmio.Mmio(packed struct(u32) {
    -                ///  Select an event for PERFCTR3. Count either contested accesses, or all accesses, on a downstream port of the main crossbar.
    -                PERFSEL3: packed union {
    -                    raw: u5,
    -                    value: enum(u5) {
    -                        apb_contested = 0x0,
    -                        apb = 0x1,
    -                        fastperi_contested = 0x2,
    -                        fastperi = 0x3,
    -                        sram5_contested = 0x4,
    -                        sram5 = 0x5,
    -                        sram4_contested = 0x6,
    -                        sram4 = 0x7,
    -                        sram3_contested = 0x8,
    -                        sram3 = 0x9,
    -                        sram2_contested = 0xa,
    -                        sram2 = 0xb,
    -                        sram1_contested = 0xc,
    -                        sram1 = 0xd,
    -                        sram0_contested = 0xe,
    -                        sram0 = 0xf,
    -                        xip_main_contested = 0x10,
    -                        xip_main = 0x11,
    -                        rom_contested = 0x12,
    -                        rom = 0x13,
    -                        _,
    -                    },
    -                },
    -                padding: u27,
    -            }),
    -        };
    -
    -        pub const UART0 = extern struct {
    -            ///  Data Register, UARTDR
    -            UARTDR: mmio.Mmio(packed struct(u32) {
    -                ///  Receive (read) data character. Transmit (write) data character.
    -                DATA: u8,
    -                ///  Framing error. When set to 1, it indicates that the received character did not have a valid stop bit (a valid stop bit is 1). In FIFO mode, this error is associated with the character at the top of the FIFO.
    -                FE: u1,
    -                ///  Parity error. When set to 1, it indicates that the parity of the received data character does not match the parity that the EPS and SPS bits in the Line Control Register, UARTLCR_H. In FIFO mode, this error is associated with the character at the top of the FIFO.
    -                PE: u1,
    -                ///  Break error. This bit is set to 1 if a break condition was detected, indicating that the received data input was held LOW for longer than a full-word transmission time (defined as start, data, parity and stop bits). In FIFO mode, this error is associated with the character at the top of the FIFO. When a break occurs, only one 0 character is loaded into the FIFO. The next character is only enabled after the receive data input goes to a 1 (marking state), and the next valid start bit is received.
    -                BE: u1,
    -                ///  Overrun error. This bit is set to 1 if data is received and the receive FIFO is already full. This is cleared to 0 once there is an empty space in the FIFO and a new character can be written to it.
    -                OE: u1,
    -                padding: u20,
    -            }),
    -            ///  Receive Status Register/Error Clear Register, UARTRSR/UARTECR
    -            UARTRSR: mmio.Mmio(packed struct(u32) {
    -                ///  Framing error. When set to 1, it indicates that the received character did not have a valid stop bit (a valid stop bit is 1). This bit is cleared to 0 by a write to UARTECR. In FIFO mode, this error is associated with the character at the top of the FIFO.
    -                FE: u1,
    -                ///  Parity error. When set to 1, it indicates that the parity of the received data character does not match the parity that the EPS and SPS bits in the Line Control Register, UARTLCR_H. This bit is cleared to 0 by a write to UARTECR. In FIFO mode, this error is associated with the character at the top of the FIFO.
    -                PE: u1,
    -                ///  Break error. This bit is set to 1 if a break condition was detected, indicating that the received data input was held LOW for longer than a full-word transmission time (defined as start, data, parity, and stop bits). This bit is cleared to 0 after a write to UARTECR. In FIFO mode, this error is associated with the character at the top of the FIFO. When a break occurs, only one 0 character is loaded into the FIFO. The next character is only enabled after the receive data input goes to a 1 (marking state) and the next valid start bit is received.
    -                BE: u1,
    -                ///  Overrun error. This bit is set to 1 if data is received and the FIFO is already full. This bit is cleared to 0 by a write to UARTECR. The FIFO contents remain valid because no more data is written when the FIFO is full, only the contents of the shift register are overwritten. The CPU must now read the data, to empty the FIFO.
    -                OE: u1,
    -                padding: u28,
    -            }),
    -            reserved24: [16]u8,
    -            ///  Flag Register, UARTFR
    -            UARTFR: mmio.Mmio(packed struct(u32) {
    -                ///  Clear to send. This bit is the complement of the UART clear to send, nUARTCTS, modem status input. That is, the bit is 1 when nUARTCTS is LOW.
    -                CTS: u1,
    -                ///  Data set ready. This bit is the complement of the UART data set ready, nUARTDSR, modem status input. That is, the bit is 1 when nUARTDSR is LOW.
    -                DSR: u1,
    -                ///  Data carrier detect. This bit is the complement of the UART data carrier detect, nUARTDCD, modem status input. That is, the bit is 1 when nUARTDCD is LOW.
    -                DCD: u1,
    -                ///  UART busy. If this bit is set to 1, the UART is busy transmitting data. This bit remains set until the complete byte, including all the stop bits, has been sent from the shift register. This bit is set as soon as the transmit FIFO becomes non-empty, regardless of whether the UART is enabled or not.
    -                BUSY: u1,
    -                ///  Receive FIFO empty. The meaning of this bit depends on the state of the FEN bit in the UARTLCR_H Register. If the FIFO is disabled, this bit is set when the receive holding register is empty. If the FIFO is enabled, the RXFE bit is set when the receive FIFO is empty.
    -                RXFE: u1,
    -                ///  Transmit FIFO full. The meaning of this bit depends on the state of the FEN bit in the UARTLCR_H Register. If the FIFO is disabled, this bit is set when the transmit holding register is full. If the FIFO is enabled, the TXFF bit is set when the transmit FIFO is full.
    -                TXFF: u1,
    -                ///  Receive FIFO full. The meaning of this bit depends on the state of the FEN bit in the UARTLCR_H Register. If the FIFO is disabled, this bit is set when the receive holding register is full. If the FIFO is enabled, the RXFF bit is set when the receive FIFO is full.
    -                RXFF: u1,
    -                ///  Transmit FIFO empty. The meaning of this bit depends on the state of the FEN bit in the Line Control Register, UARTLCR_H. If the FIFO is disabled, this bit is set when the transmit holding register is empty. If the FIFO is enabled, the TXFE bit is set when the transmit FIFO is empty. This bit does not indicate if there is data in the transmit shift register.
    -                TXFE: u1,
    -                ///  Ring indicator. This bit is the complement of the UART ring indicator, nUARTRI, modem status input. That is, the bit is 1 when nUARTRI is LOW.
    -                RI: u1,
    -                padding: u23,
    -            }),
    -            reserved32: [4]u8,
    -            ///  IrDA Low-Power Counter Register, UARTILPR
    -            UARTILPR: mmio.Mmio(packed struct(u32) {
    -                ///  8-bit low-power divisor value. These bits are cleared to 0 at reset.
    -                ILPDVSR: u8,
    -                padding: u24,
    -            }),
    -            ///  Integer Baud Rate Register, UARTIBRD
    -            UARTIBRD: mmio.Mmio(packed struct(u32) {
    -                ///  The integer baud rate divisor. These bits are cleared to 0 on reset.
    -                BAUD_DIVINT: u16,
    -                padding: u16,
    -            }),
    -            ///  Fractional Baud Rate Register, UARTFBRD
    -            UARTFBRD: mmio.Mmio(packed struct(u32) {
    -                ///  The fractional baud rate divisor. These bits are cleared to 0 on reset.
    -                BAUD_DIVFRAC: u6,
    -                padding: u26,
    -            }),
    -            ///  Line Control Register, UARTLCR_H
    -            UARTLCR_H: mmio.Mmio(packed struct(u32) {
    -                ///  Send break. If this bit is set to 1, a low-level is continually output on the UARTTXD output, after completing transmission of the current character. For the proper execution of the break command, the software must set this bit for at least two complete frames. For normal use, this bit must be cleared to 0.
    -                BRK: u1,
    -                ///  Parity enable: 0 = parity is disabled and no parity bit added to the data frame 1 = parity checking and generation is enabled.
    -                PEN: u1,
    -                ///  Even parity select. Controls the type of parity the UART uses during transmission and reception: 0 = odd parity. The UART generates or checks for an odd number of 1s in the data and parity bits. 1 = even parity. The UART generates or checks for an even number of 1s in the data and parity bits. This bit has no effect when the PEN bit disables parity checking and generation.
    -                EPS: u1,
    -                ///  Two stop bits select. If this bit is set to 1, two stop bits are transmitted at the end of the frame. The receive logic does not check for two stop bits being received.
    -                STP2: u1,
    -                ///  Enable FIFOs: 0 = FIFOs are disabled (character mode) that is, the FIFOs become 1-byte-deep holding registers 1 = transmit and receive FIFO buffers are enabled (FIFO mode).
    -                FEN: u1,
    -                ///  Word length. These bits indicate the number of data bits transmitted or received in a frame as follows: b11 = 8 bits b10 = 7 bits b01 = 6 bits b00 = 5 bits.
    -                WLEN: u2,
    -                ///  Stick parity select. 0 = stick parity is disabled 1 = either: * if the EPS bit is 0 then the parity bit is transmitted and checked as a 1 * if the EPS bit is 1 then the parity bit is transmitted and checked as a 0. This bit has no effect when the PEN bit disables parity checking and generation.
    -                SPS: u1,
    -                padding: u24,
    -            }),
    -            ///  Control Register, UARTCR
    -            UARTCR: mmio.Mmio(packed struct(u32) {
    -                ///  UART enable: 0 = UART is disabled. If the UART is disabled in the middle of transmission or reception, it completes the current character before stopping. 1 = the UART is enabled. Data transmission and reception occurs for either UART signals or SIR signals depending on the setting of the SIREN bit.
    -                UARTEN: u1,
    -                ///  SIR enable: 0 = IrDA SIR ENDEC is disabled. nSIROUT remains LOW (no light pulse generated), and signal transitions on SIRIN have no effect. 1 = IrDA SIR ENDEC is enabled. Data is transmitted and received on nSIROUT and SIRIN. UARTTXD remains HIGH, in the marking state. Signal transitions on UARTRXD or modem status inputs have no effect. This bit has no effect if the UARTEN bit disables the UART.
    -                SIREN: u1,
    -                ///  SIR low-power IrDA mode. This bit selects the IrDA encoding mode. If this bit is cleared to 0, low-level bits are transmitted as an active high pulse with a width of 3 / 16th of the bit period. If this bit is set to 1, low-level bits are transmitted with a pulse width that is 3 times the period of the IrLPBaud16 input signal, regardless of the selected bit rate. Setting this bit uses less power, but might reduce transmission distances.
    -                SIRLP: u1,
    -                reserved7: u4,
    -                ///  Loopback enable. If this bit is set to 1 and the SIREN bit is set to 1 and the SIRTEST bit in the Test Control Register, UARTTCR is set to 1, then the nSIROUT path is inverted, and fed through to the SIRIN path. The SIRTEST bit in the test register must be set to 1 to override the normal half-duplex SIR operation. This must be the requirement for accessing the test registers during normal operation, and SIRTEST must be cleared to 0 when loopback testing is finished. This feature reduces the amount of external coupling required during system test. If this bit is set to 1, and the SIRTEST bit is set to 0, the UARTTXD path is fed through to the UARTRXD path. In either SIR mode or UART mode, when this bit is set, the modem outputs are also fed through to the modem inputs. This bit is cleared to 0 on reset, to disable loopback.
    -                LBE: u1,
    -                ///  Transmit enable. If this bit is set to 1, the transmit section of the UART is enabled. Data transmission occurs for either UART signals, or SIR signals depending on the setting of the SIREN bit. When the UART is disabled in the middle of transmission, it completes the current character before stopping.
    -                TXE: u1,
    -                ///  Receive enable. If this bit is set to 1, the receive section of the UART is enabled. Data reception occurs for either UART signals or SIR signals depending on the setting of the SIREN bit. When the UART is disabled in the middle of reception, it completes the current character before stopping.
    -                RXE: u1,
    -                ///  Data transmit ready. This bit is the complement of the UART data transmit ready, nUARTDTR, modem status output. That is, when the bit is programmed to a 1 then nUARTDTR is LOW.
    -                DTR: u1,
    -                ///  Request to send. This bit is the complement of the UART request to send, nUARTRTS, modem status output. That is, when the bit is programmed to a 1 then nUARTRTS is LOW.
    -                RTS: u1,
    -                ///  This bit is the complement of the UART Out1 (nUARTOut1) modem status output. That is, when the bit is programmed to a 1 the output is 0. For DTE this can be used as Data Carrier Detect (DCD).
    -                OUT1: u1,
    -                ///  This bit is the complement of the UART Out2 (nUARTOut2) modem status output. That is, when the bit is programmed to a 1, the output is 0. For DTE this can be used as Ring Indicator (RI).
    -                OUT2: u1,
    -                ///  RTS hardware flow control enable. If this bit is set to 1, RTS hardware flow control is enabled. Data is only requested when there is space in the receive FIFO for it to be received.
    -                RTSEN: u1,
    -                ///  CTS hardware flow control enable. If this bit is set to 1, CTS hardware flow control is enabled. Data is only transmitted when the nUARTCTS signal is asserted.
    -                CTSEN: u1,
    -                padding: u16,
    -            }),
    -            ///  Interrupt FIFO Level Select Register, UARTIFLS
    -            UARTIFLS: mmio.Mmio(packed struct(u32) {
    -                ///  Transmit interrupt FIFO level select. The trigger points for the transmit interrupt are as follows: b000 = Transmit FIFO becomes <= 1 / 8 full b001 = Transmit FIFO becomes <= 1 / 4 full b010 = Transmit FIFO becomes <= 1 / 2 full b011 = Transmit FIFO becomes <= 3 / 4 full b100 = Transmit FIFO becomes <= 7 / 8 full b101-b111 = reserved.
    -                TXIFLSEL: u3,
    -                ///  Receive interrupt FIFO level select. The trigger points for the receive interrupt are as follows: b000 = Receive FIFO becomes >= 1 / 8 full b001 = Receive FIFO becomes >= 1 / 4 full b010 = Receive FIFO becomes >= 1 / 2 full b011 = Receive FIFO becomes >= 3 / 4 full b100 = Receive FIFO becomes >= 7 / 8 full b101-b111 = reserved.
    -                RXIFLSEL: u3,
    -                padding: u26,
    -            }),
    -            ///  Interrupt Mask Set/Clear Register, UARTIMSC
    -            UARTIMSC: mmio.Mmio(packed struct(u32) {
    -                ///  nUARTRI modem interrupt mask. A read returns the current mask for the UARTRIINTR interrupt. On a write of 1, the mask of the UARTRIINTR interrupt is set. A write of 0 clears the mask.
    -                RIMIM: u1,
    -                ///  nUARTCTS modem interrupt mask. A read returns the current mask for the UARTCTSINTR interrupt. On a write of 1, the mask of the UARTCTSINTR interrupt is set. A write of 0 clears the mask.
    -                CTSMIM: u1,
    -                ///  nUARTDCD modem interrupt mask. A read returns the current mask for the UARTDCDINTR interrupt. On a write of 1, the mask of the UARTDCDINTR interrupt is set. A write of 0 clears the mask.
    -                DCDMIM: u1,
    -                ///  nUARTDSR modem interrupt mask. A read returns the current mask for the UARTDSRINTR interrupt. On a write of 1, the mask of the UARTDSRINTR interrupt is set. A write of 0 clears the mask.
    -                DSRMIM: u1,
    -                ///  Receive interrupt mask. A read returns the current mask for the UARTRXINTR interrupt. On a write of 1, the mask of the UARTRXINTR interrupt is set. A write of 0 clears the mask.
    -                RXIM: u1,
    -                ///  Transmit interrupt mask. A read returns the current mask for the UARTTXINTR interrupt. On a write of 1, the mask of the UARTTXINTR interrupt is set. A write of 0 clears the mask.
    -                TXIM: u1,
    -                ///  Receive timeout interrupt mask. A read returns the current mask for the UARTRTINTR interrupt. On a write of 1, the mask of the UARTRTINTR interrupt is set. A write of 0 clears the mask.
    -                RTIM: u1,
    -                ///  Framing error interrupt mask. A read returns the current mask for the UARTFEINTR interrupt. On a write of 1, the mask of the UARTFEINTR interrupt is set. A write of 0 clears the mask.
    -                FEIM: u1,
    -                ///  Parity error interrupt mask. A read returns the current mask for the UARTPEINTR interrupt. On a write of 1, the mask of the UARTPEINTR interrupt is set. A write of 0 clears the mask.
    -                PEIM: u1,
    -                ///  Break error interrupt mask. A read returns the current mask for the UARTBEINTR interrupt. On a write of 1, the mask of the UARTBEINTR interrupt is set. A write of 0 clears the mask.
    -                BEIM: u1,
    -                ///  Overrun error interrupt mask. A read returns the current mask for the UARTOEINTR interrupt. On a write of 1, the mask of the UARTOEINTR interrupt is set. A write of 0 clears the mask.
    -                OEIM: u1,
    -                padding: u21,
    -            }),
    -            ///  Raw Interrupt Status Register, UARTRIS
    -            UARTRIS: mmio.Mmio(packed struct(u32) {
    -                ///  nUARTRI modem interrupt status. Returns the raw interrupt state of the UARTRIINTR interrupt.
    -                RIRMIS: u1,
    -                ///  nUARTCTS modem interrupt status. Returns the raw interrupt state of the UARTCTSINTR interrupt.
    -                CTSRMIS: u1,
    -                ///  nUARTDCD modem interrupt status. Returns the raw interrupt state of the UARTDCDINTR interrupt.
    -                DCDRMIS: u1,
    -                ///  nUARTDSR modem interrupt status. Returns the raw interrupt state of the UARTDSRINTR interrupt.
    -                DSRRMIS: u1,
    -                ///  Receive interrupt status. Returns the raw interrupt state of the UARTRXINTR interrupt.
    -                RXRIS: u1,
    -                ///  Transmit interrupt status. Returns the raw interrupt state of the UARTTXINTR interrupt.
    -                TXRIS: u1,
    -                ///  Receive timeout interrupt status. Returns the raw interrupt state of the UARTRTINTR interrupt. a
    -                RTRIS: u1,
    -                ///  Framing error interrupt status. Returns the raw interrupt state of the UARTFEINTR interrupt.
    -                FERIS: u1,
    -                ///  Parity error interrupt status. Returns the raw interrupt state of the UARTPEINTR interrupt.
    -                PERIS: u1,
    -                ///  Break error interrupt status. Returns the raw interrupt state of the UARTBEINTR interrupt.
    -                BERIS: u1,
    -                ///  Overrun error interrupt status. Returns the raw interrupt state of the UARTOEINTR interrupt.
    -                OERIS: u1,
    -                padding: u21,
    -            }),
    -            ///  Masked Interrupt Status Register, UARTMIS
    -            UARTMIS: mmio.Mmio(packed struct(u32) {
    -                ///  nUARTRI modem masked interrupt status. Returns the masked interrupt state of the UARTRIINTR interrupt.
    -                RIMMIS: u1,
    -                ///  nUARTCTS modem masked interrupt status. Returns the masked interrupt state of the UARTCTSINTR interrupt.
    -                CTSMMIS: u1,
    -                ///  nUARTDCD modem masked interrupt status. Returns the masked interrupt state of the UARTDCDINTR interrupt.
    -                DCDMMIS: u1,
    -                ///  nUARTDSR modem masked interrupt status. Returns the masked interrupt state of the UARTDSRINTR interrupt.
    -                DSRMMIS: u1,
    -                ///  Receive masked interrupt status. Returns the masked interrupt state of the UARTRXINTR interrupt.
    -                RXMIS: u1,
    -                ///  Transmit masked interrupt status. Returns the masked interrupt state of the UARTTXINTR interrupt.
    -                TXMIS: u1,
    -                ///  Receive timeout masked interrupt status. Returns the masked interrupt state of the UARTRTINTR interrupt.
    -                RTMIS: u1,
    -                ///  Framing error masked interrupt status. Returns the masked interrupt state of the UARTFEINTR interrupt.
    -                FEMIS: u1,
    -                ///  Parity error masked interrupt status. Returns the masked interrupt state of the UARTPEINTR interrupt.
    -                PEMIS: u1,
    -                ///  Break error masked interrupt status. Returns the masked interrupt state of the UARTBEINTR interrupt.
    -                BEMIS: u1,
    -                ///  Overrun error masked interrupt status. Returns the masked interrupt state of the UARTOEINTR interrupt.
    -                OEMIS: u1,
    -                padding: u21,
    -            }),
    -            ///  Interrupt Clear Register, UARTICR
    -            UARTICR: mmio.Mmio(packed struct(u32) {
    -                ///  nUARTRI modem interrupt clear. Clears the UARTRIINTR interrupt.
    -                RIMIC: u1,
    -                ///  nUARTCTS modem interrupt clear. Clears the UARTCTSINTR interrupt.
    -                CTSMIC: u1,
    -                ///  nUARTDCD modem interrupt clear. Clears the UARTDCDINTR interrupt.
    -                DCDMIC: u1,
    -                ///  nUARTDSR modem interrupt clear. Clears the UARTDSRINTR interrupt.
    -                DSRMIC: u1,
    -                ///  Receive interrupt clear. Clears the UARTRXINTR interrupt.
    -                RXIC: u1,
    -                ///  Transmit interrupt clear. Clears the UARTTXINTR interrupt.
    -                TXIC: u1,
    -                ///  Receive timeout interrupt clear. Clears the UARTRTINTR interrupt.
    -                RTIC: u1,
    -                ///  Framing error interrupt clear. Clears the UARTFEINTR interrupt.
    -                FEIC: u1,
    -                ///  Parity error interrupt clear. Clears the UARTPEINTR interrupt.
    -                PEIC: u1,
    -                ///  Break error interrupt clear. Clears the UARTBEINTR interrupt.
    -                BEIC: u1,
    -                ///  Overrun error interrupt clear. Clears the UARTOEINTR interrupt.
    -                OEIC: u1,
    -                padding: u21,
    -            }),
    -            ///  DMA Control Register, UARTDMACR
    -            UARTDMACR: mmio.Mmio(packed struct(u32) {
    -                ///  Receive DMA enable. If this bit is set to 1, DMA for the receive FIFO is enabled.
    -                RXDMAE: u1,
    -                ///  Transmit DMA enable. If this bit is set to 1, DMA for the transmit FIFO is enabled.
    -                TXDMAE: u1,
    -                ///  DMA on error. If this bit is set to 1, the DMA receive request outputs, UARTRXDMASREQ or UARTRXDMABREQ, are disabled when the UART error interrupt is asserted.
    -                DMAONERR: u1,
    -                padding: u29,
    -            }),
    -            reserved4064: [3988]u8,
    -            ///  UARTPeriphID0 Register
    -            UARTPERIPHID0: mmio.Mmio(packed struct(u32) {
    -                ///  These bits read back as 0x11
    -                PARTNUMBER0: u8,
    -                padding: u24,
    -            }),
    -            ///  UARTPeriphID1 Register
    -            UARTPERIPHID1: mmio.Mmio(packed struct(u32) {
    -                ///  These bits read back as 0x0
    -                PARTNUMBER1: u4,
    -                ///  These bits read back as 0x1
    -                DESIGNER0: u4,
    -                padding: u24,
    -            }),
    -            ///  UARTPeriphID2 Register
    -            UARTPERIPHID2: mmio.Mmio(packed struct(u32) {
    -                ///  These bits read back as 0x4
    -                DESIGNER1: u4,
    -                ///  This field depends on the revision of the UART: r1p0 0x0 r1p1 0x1 r1p3 0x2 r1p4 0x2 r1p5 0x3
    -                REVISION: u4,
    -                padding: u24,
    -            }),
    -            ///  UARTPeriphID3 Register
    -            UARTPERIPHID3: mmio.Mmio(packed struct(u32) {
    -                ///  These bits read back as 0x00
    -                CONFIGURATION: u8,
    -                padding: u24,
    -            }),
    -            ///  UARTPCellID0 Register
    -            UARTPCELLID0: mmio.Mmio(packed struct(u32) {
    -                ///  These bits read back as 0x0D
    -                UARTPCELLID0: u8,
    -                padding: u24,
    -            }),
    -            ///  UARTPCellID1 Register
    -            UARTPCELLID1: mmio.Mmio(packed struct(u32) {
    -                ///  These bits read back as 0xF0
    -                UARTPCELLID1: u8,
    -                padding: u24,
    -            }),
    -            ///  UARTPCellID2 Register
    -            UARTPCELLID2: mmio.Mmio(packed struct(u32) {
    -                ///  These bits read back as 0x05
    -                UARTPCELLID2: u8,
    -                padding: u24,
    -            }),
    -            ///  UARTPCellID3 Register
    -            UARTPCELLID3: mmio.Mmio(packed struct(u32) {
    -                ///  These bits read back as 0xB1
    -                UARTPCELLID3: u8,
    -                padding: u24,
    -            }),
    -        };
    -
    -        ///  Single-cycle IO block
    -        ///  Provides core-local and inter-core hardware for the two processors, with single-cycle access.
    -        pub const SIO = extern struct {
    -            ///  Processor core identifier
    -            ///  Value is 0 when read from processor core 0, and 1 when read from processor core 1.
    -            CPUID: u32,
    -            ///  Input value for GPIO pins
    -            GPIO_IN: mmio.Mmio(packed struct(u32) {
    -                ///  Input value for GPIO0...29
    -                GPIO_IN: u30,
    -                padding: u2,
    -            }),
    -            ///  Input value for QSPI pins
    -            GPIO_HI_IN: mmio.Mmio(packed struct(u32) {
    -                ///  Input value on QSPI IO in order 0..5: SCLK, SSn, SD0, SD1, SD2, SD3
    -                GPIO_HI_IN: u6,
    -                padding: u26,
    -            }),
    -            reserved16: [4]u8,
    -            ///  GPIO output value
    -            GPIO_OUT: mmio.Mmio(packed struct(u32) {
    -                ///  Set output level (1/0 -> high/low) for GPIO0...29.
    -                ///  Reading back gives the last value written, NOT the input value from the pins.
    -                ///  If core 0 and core 1 both write to GPIO_OUT simultaneously (or to a SET/CLR/XOR alias),
    -                ///  the result is as though the write from core 0 took place first,
    -                ///  and the write from core 1 was then applied to that intermediate result.
    -                GPIO_OUT: u30,
    -                padding: u2,
    -            }),
    -            ///  GPIO output value set
    -            GPIO_OUT_SET: mmio.Mmio(packed struct(u32) {
    -                ///  Perform an atomic bit-set on GPIO_OUT, i.e. `GPIO_OUT |= wdata`
    -                GPIO_OUT_SET: u30,
    -                padding: u2,
    -            }),
    -            ///  GPIO output value clear
    -            GPIO_OUT_CLR: mmio.Mmio(packed struct(u32) {
    -                ///  Perform an atomic bit-clear on GPIO_OUT, i.e. `GPIO_OUT &= ~wdata`
    -                GPIO_OUT_CLR: u30,
    -                padding: u2,
    -            }),
    -            ///  GPIO output value XOR
    -            GPIO_OUT_XOR: mmio.Mmio(packed struct(u32) {
    -                ///  Perform an atomic bitwise XOR on GPIO_OUT, i.e. `GPIO_OUT ^= wdata`
    -                GPIO_OUT_XOR: u30,
    -                padding: u2,
    -            }),
    -            ///  GPIO output enable
    -            GPIO_OE: mmio.Mmio(packed struct(u32) {
    -                ///  Set output enable (1/0 -> output/input) for GPIO0...29.
    -                ///  Reading back gives the last value written.
    -                ///  If core 0 and core 1 both write to GPIO_OE simultaneously (or to a SET/CLR/XOR alias),
    -                ///  the result is as though the write from core 0 took place first,
    -                ///  and the write from core 1 was then applied to that intermediate result.
    -                GPIO_OE: u30,
    -                padding: u2,
    -            }),
    -            ///  GPIO output enable set
    -            GPIO_OE_SET: mmio.Mmio(packed struct(u32) {
    -                ///  Perform an atomic bit-set on GPIO_OE, i.e. `GPIO_OE |= wdata`
    -                GPIO_OE_SET: u30,
    -                padding: u2,
    -            }),
    -            ///  GPIO output enable clear
    -            GPIO_OE_CLR: mmio.Mmio(packed struct(u32) {
    -                ///  Perform an atomic bit-clear on GPIO_OE, i.e. `GPIO_OE &= ~wdata`
    -                GPIO_OE_CLR: u30,
    -                padding: u2,
    -            }),
    -            ///  GPIO output enable XOR
    -            GPIO_OE_XOR: mmio.Mmio(packed struct(u32) {
    -                ///  Perform an atomic bitwise XOR on GPIO_OE, i.e. `GPIO_OE ^= wdata`
    -                GPIO_OE_XOR: u30,
    -                padding: u2,
    -            }),
    -            ///  QSPI output value
    -            GPIO_HI_OUT: mmio.Mmio(packed struct(u32) {
    -                ///  Set output level (1/0 -> high/low) for QSPI IO0...5.
    -                ///  Reading back gives the last value written, NOT the input value from the pins.
    -                ///  If core 0 and core 1 both write to GPIO_HI_OUT simultaneously (or to a SET/CLR/XOR alias),
    -                ///  the result is as though the write from core 0 took place first,
    -                ///  and the write from core 1 was then applied to that intermediate result.
    -                GPIO_HI_OUT: u6,
    -                padding: u26,
    -            }),
    -            ///  QSPI output value set
    -            GPIO_HI_OUT_SET: mmio.Mmio(packed struct(u32) {
    -                ///  Perform an atomic bit-set on GPIO_HI_OUT, i.e. `GPIO_HI_OUT |= wdata`
    -                GPIO_HI_OUT_SET: u6,
    -                padding: u26,
    -            }),
    -            ///  QSPI output value clear
    -            GPIO_HI_OUT_CLR: mmio.Mmio(packed struct(u32) {
    -                ///  Perform an atomic bit-clear on GPIO_HI_OUT, i.e. `GPIO_HI_OUT &= ~wdata`
    -                GPIO_HI_OUT_CLR: u6,
    -                padding: u26,
    -            }),
    -            ///  QSPI output value XOR
    -            GPIO_HI_OUT_XOR: mmio.Mmio(packed struct(u32) {
    -                ///  Perform an atomic bitwise XOR on GPIO_HI_OUT, i.e. `GPIO_HI_OUT ^= wdata`
    -                GPIO_HI_OUT_XOR: u6,
    -                padding: u26,
    -            }),
    -            ///  QSPI output enable
    -            GPIO_HI_OE: mmio.Mmio(packed struct(u32) {
    -                ///  Set output enable (1/0 -> output/input) for QSPI IO0...5.
    -                ///  Reading back gives the last value written.
    -                ///  If core 0 and core 1 both write to GPIO_HI_OE simultaneously (or to a SET/CLR/XOR alias),
    -                ///  the result is as though the write from core 0 took place first,
    -                ///  and the write from core 1 was then applied to that intermediate result.
    -                GPIO_HI_OE: u6,
    -                padding: u26,
    -            }),
    -            ///  QSPI output enable set
    -            GPIO_HI_OE_SET: mmio.Mmio(packed struct(u32) {
    -                ///  Perform an atomic bit-set on GPIO_HI_OE, i.e. `GPIO_HI_OE |= wdata`
    -                GPIO_HI_OE_SET: u6,
    -                padding: u26,
    -            }),
    -            ///  QSPI output enable clear
    -            GPIO_HI_OE_CLR: mmio.Mmio(packed struct(u32) {
    -                ///  Perform an atomic bit-clear on GPIO_HI_OE, i.e. `GPIO_HI_OE &= ~wdata`
    -                GPIO_HI_OE_CLR: u6,
    -                padding: u26,
    -            }),
    -            ///  QSPI output enable XOR
    -            GPIO_HI_OE_XOR: mmio.Mmio(packed struct(u32) {
    -                ///  Perform an atomic bitwise XOR on GPIO_HI_OE, i.e. `GPIO_HI_OE ^= wdata`
    -                GPIO_HI_OE_XOR: u6,
    -                padding: u26,
    -            }),
    -            ///  Status register for inter-core FIFOs (mailboxes).
    -            ///  There is one FIFO in the core 0 -> core 1 direction, and one core 1 -> core 0. Both are 32 bits wide and 8 words deep.
    -            ///  Core 0 can see the read side of the 1->0 FIFO (RX), and the write side of 0->1 FIFO (TX).
    -            ///  Core 1 can see the read side of the 0->1 FIFO (RX), and the write side of 1->0 FIFO (TX).
    -            ///  The SIO IRQ for each core is the logical OR of the VLD, WOF and ROE fields of its FIFO_ST register.
    -            FIFO_ST: mmio.Mmio(packed struct(u32) {
    -                ///  Value is 1 if this core's RX FIFO is not empty (i.e. if FIFO_RD is valid)
    -                VLD: u1,
    -                ///  Value is 1 if this core's TX FIFO is not full (i.e. if FIFO_WR is ready for more data)
    -                RDY: u1,
    -                ///  Sticky flag indicating the TX FIFO was written when full. This write was ignored by the FIFO.
    -                WOF: u1,
    -                ///  Sticky flag indicating the RX FIFO was read when empty. This read was ignored by the FIFO.
    -                ROE: u1,
    -                padding: u28,
    -            }),
    -            ///  Write access to this core's TX FIFO
    -            FIFO_WR: u32,
    -            ///  Read access to this core's RX FIFO
    -            FIFO_RD: u32,
    -            ///  Spinlock state
    -            ///  A bitmap containing the state of all 32 spinlocks (1=locked).
    -            ///  Mainly intended for debugging.
    -            SPINLOCK_ST: u32,
    -            ///  Divider unsigned dividend
    -            ///  Write to the DIVIDEND operand of the divider, i.e. the p in `p / q`.
    -            ///  Any operand write starts a new calculation. The results appear in QUOTIENT, REMAINDER.
    -            ///  UDIVIDEND/SDIVIDEND are aliases of the same internal register. The U alias starts an
    -            ///  unsigned calculation, and the S alias starts a signed calculation.
    -            DIV_UDIVIDEND: u32,
    -            ///  Divider unsigned divisor
    -            ///  Write to the DIVISOR operand of the divider, i.e. the q in `p / q`.
    -            ///  Any operand write starts a new calculation. The results appear in QUOTIENT, REMAINDER.
    -            ///  UDIVISOR/SDIVISOR are aliases of the same internal register. The U alias starts an
    -            ///  unsigned calculation, and the S alias starts a signed calculation.
    -            DIV_UDIVISOR: u32,
    -            ///  Divider signed dividend
    -            ///  The same as UDIVIDEND, but starts a signed calculation, rather than unsigned.
    -            DIV_SDIVIDEND: u32,
    -            ///  Divider signed divisor
    -            ///  The same as UDIVISOR, but starts a signed calculation, rather than unsigned.
    -            DIV_SDIVISOR: u32,
    -            ///  Divider result quotient
    -            ///  The result of `DIVIDEND / DIVISOR` (division). Contents undefined while CSR_READY is low.
    -            ///  For signed calculations, QUOTIENT is negative when the signs of DIVIDEND and DIVISOR differ.
    -            ///  This register can be written to directly, for context save/restore purposes. This halts any
    -            ///  in-progress calculation and sets the CSR_READY and CSR_DIRTY flags.
    -            ///  Reading from QUOTIENT clears the CSR_DIRTY flag, so should read results in the order
    -            ///  REMAINDER, QUOTIENT if CSR_DIRTY is used.
    -            DIV_QUOTIENT: u32,
    -            ///  Divider result remainder
    -            ///  The result of `DIVIDEND % DIVISOR` (modulo). Contents undefined while CSR_READY is low.
    -            ///  For signed calculations, REMAINDER is negative only when DIVIDEND is negative.
    -            ///  This register can be written to directly, for context save/restore purposes. This halts any
    -            ///  in-progress calculation and sets the CSR_READY and CSR_DIRTY flags.
    -            DIV_REMAINDER: u32,
    -            ///  Control and status register for divider.
    -            DIV_CSR: mmio.Mmio(packed struct(u32) {
    -                ///  Reads as 0 when a calculation is in progress, 1 otherwise.
    -                ///  Writing an operand (xDIVIDEND, xDIVISOR) will immediately start a new calculation, no
    -                ///  matter if one is already in progress.
    -                ///  Writing to a result register will immediately terminate any in-progress calculation
    -                ///  and set the READY and DIRTY flags.
    -                READY: u1,
    -                ///  Changes to 1 when any register is written, and back to 0 when QUOTIENT is read.
    -                ///  Software can use this flag to make save/restore more efficient (skip if not DIRTY).
    -                ///  If the flag is used in this way, it's recommended to either read QUOTIENT only,
    -                ///  or REMAINDER and then QUOTIENT, to prevent data loss on context switch.
    -                DIRTY: u1,
    -                padding: u30,
    -            }),
    -            reserved128: [4]u8,
    -            ///  Read/write access to accumulator 0
    -            INTERP0_ACCUM0: u32,
    -            ///  Read/write access to accumulator 1
    -            INTERP0_ACCUM1: u32,
    -            ///  Read/write access to BASE0 register.
    -            INTERP0_BASE0: u32,
    -            ///  Read/write access to BASE1 register.
    -            INTERP0_BASE1: u32,
    -            ///  Read/write access to BASE2 register.
    -            INTERP0_BASE2: u32,
    -            ///  Read LANE0 result, and simultaneously write lane results to both accumulators (POP).
    -            INTERP0_POP_LANE0: u32,
    -            ///  Read LANE1 result, and simultaneously write lane results to both accumulators (POP).
    -            INTERP0_POP_LANE1: u32,
    -            ///  Read FULL result, and simultaneously write lane results to both accumulators (POP).
    -            INTERP0_POP_FULL: u32,
    -            ///  Read LANE0 result, without altering any internal state (PEEK).
    -            INTERP0_PEEK_LANE0: u32,
    -            ///  Read LANE1 result, without altering any internal state (PEEK).
    -            INTERP0_PEEK_LANE1: u32,
    -            ///  Read FULL result, without altering any internal state (PEEK).
    -            INTERP0_PEEK_FULL: u32,
    -            ///  Control register for lane 0
    -            INTERP0_CTRL_LANE0: mmio.Mmio(packed struct(u32) {
    -                ///  Logical right-shift applied to accumulator before masking
    -                SHIFT: u5,
    -                ///  The least-significant bit allowed to pass by the mask (inclusive)
    -                MASK_LSB: u5,
    -                ///  The most-significant bit allowed to pass by the mask (inclusive)
    -                ///  Setting MSB < LSB may cause chip to turn inside-out
    -                MASK_MSB: u5,
    -                ///  If SIGNED is set, the shifted and masked accumulator value is sign-extended to 32 bits
    -                ///  before adding to BASE0, and LANE0 PEEK/POP appear extended to 32 bits when read by processor.
    -                SIGNED: u1,
    -                ///  If 1, feed the opposite lane's accumulator into this lane's shift + mask hardware.
    -                ///  Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is before the shift+mask bypass)
    -                CROSS_INPUT: u1,
    -                ///  If 1, feed the opposite lane's result into this lane's accumulator on POP.
    -                CROSS_RESULT: u1,
    -                ///  If 1, mask + shift is bypassed for LANE0 result. This does not affect FULL result.
    -                ADD_RAW: u1,
    -                ///  ORed into bits 29:28 of the lane result presented to the processor on the bus.
    -                ///  No effect on the internal 32-bit datapath. Handy for using a lane to generate sequence
    -                ///  of pointers into flash or SRAM.
    -                FORCE_MSB: u2,
    -                ///  Only present on INTERP0 on each core. If BLEND mode is enabled:
    -                ///  - LANE1 result is a linear interpolation between BASE0 and BASE1, controlled
    -                ///  by the 8 LSBs of lane 1 shift and mask value (a fractional number between
    -                ///  0 and 255/256ths)
    -                ///  - LANE0 result does not have BASE0 added (yields only the 8 LSBs of lane 1 shift+mask value)
    -                ///  - FULL result does not have lane 1 shift+mask value added (BASE2 + lane 0 shift+mask)
    -                ///  LANE1 SIGNED flag controls whether the interpolation is signed or unsigned.
    -                BLEND: u1,
    -                reserved23: u1,
    -                ///  Indicates if any masked-off MSBs in ACCUM0 are set.
    -                OVERF0: u1,
    -                ///  Indicates if any masked-off MSBs in ACCUM1 are set.
    -                OVERF1: u1,
    -                ///  Set if either OVERF0 or OVERF1 is set.
    -                OVERF: u1,
    -                padding: u6,
    -            }),
    -            ///  Control register for lane 1
    -            INTERP0_CTRL_LANE1: mmio.Mmio(packed struct(u32) {
    -                ///  Logical right-shift applied to accumulator before masking
    -                SHIFT: u5,
    -                ///  The least-significant bit allowed to pass by the mask (inclusive)
    -                MASK_LSB: u5,
    -                ///  The most-significant bit allowed to pass by the mask (inclusive)
    -                ///  Setting MSB < LSB may cause chip to turn inside-out
    -                MASK_MSB: u5,
    -                ///  If SIGNED is set, the shifted and masked accumulator value is sign-extended to 32 bits
    -                ///  before adding to BASE1, and LANE1 PEEK/POP appear extended to 32 bits when read by processor.
    -                SIGNED: u1,
    -                ///  If 1, feed the opposite lane's accumulator into this lane's shift + mask hardware.
    -                ///  Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is before the shift+mask bypass)
    -                CROSS_INPUT: u1,
    -                ///  If 1, feed the opposite lane's result into this lane's accumulator on POP.
    -                CROSS_RESULT: u1,
    -                ///  If 1, mask + shift is bypassed for LANE1 result. This does not affect FULL result.
    -                ADD_RAW: u1,
    -                ///  ORed into bits 29:28 of the lane result presented to the processor on the bus.
    -                ///  No effect on the internal 32-bit datapath. Handy for using a lane to generate sequence
    -                ///  of pointers into flash or SRAM.
    -                FORCE_MSB: u2,
    -                padding: u11,
    -            }),
    -            ///  Values written here are atomically added to ACCUM0
    -            ///  Reading yields lane 0's raw shift and mask value (BASE0 not added).
    -            INTERP0_ACCUM0_ADD: mmio.Mmio(packed struct(u32) {
    -                INTERP0_ACCUM0_ADD: u24,
    -                padding: u8,
    -            }),
    -            ///  Values written here are atomically added to ACCUM1
    -            ///  Reading yields lane 1's raw shift and mask value (BASE1 not added).
    -            INTERP0_ACCUM1_ADD: mmio.Mmio(packed struct(u32) {
    -                INTERP0_ACCUM1_ADD: u24,
    -                padding: u8,
    -            }),
    -            ///  On write, the lower 16 bits go to BASE0, upper bits to BASE1 simultaneously.
    -            ///  Each half is sign-extended to 32 bits if that lane's SIGNED flag is set.
    -            INTERP0_BASE_1AND0: u32,
    -            ///  Read/write access to accumulator 0
    -            INTERP1_ACCUM0: u32,
    -            ///  Read/write access to accumulator 1
    -            INTERP1_ACCUM1: u32,
    -            ///  Read/write access to BASE0 register.
    -            INTERP1_BASE0: u32,
    -            ///  Read/write access to BASE1 register.
    -            INTERP1_BASE1: u32,
    -            ///  Read/write access to BASE2 register.
    -            INTERP1_BASE2: u32,
    -            ///  Read LANE0 result, and simultaneously write lane results to both accumulators (POP).
    -            INTERP1_POP_LANE0: u32,
    -            ///  Read LANE1 result, and simultaneously write lane results to both accumulators (POP).
    -            INTERP1_POP_LANE1: u32,
    -            ///  Read FULL result, and simultaneously write lane results to both accumulators (POP).
    -            INTERP1_POP_FULL: u32,
    -            ///  Read LANE0 result, without altering any internal state (PEEK).
    -            INTERP1_PEEK_LANE0: u32,
    -            ///  Read LANE1 result, without altering any internal state (PEEK).
    -            INTERP1_PEEK_LANE1: u32,
    -            ///  Read FULL result, without altering any internal state (PEEK).
    -            INTERP1_PEEK_FULL: u32,
    -            ///  Control register for lane 0
    -            INTERP1_CTRL_LANE0: mmio.Mmio(packed struct(u32) {
    -                ///  Logical right-shift applied to accumulator before masking
    -                SHIFT: u5,
    -                ///  The least-significant bit allowed to pass by the mask (inclusive)
    -                MASK_LSB: u5,
    -                ///  The most-significant bit allowed to pass by the mask (inclusive)
    -                ///  Setting MSB < LSB may cause chip to turn inside-out
    -                MASK_MSB: u5,
    -                ///  If SIGNED is set, the shifted and masked accumulator value is sign-extended to 32 bits
    -                ///  before adding to BASE0, and LANE0 PEEK/POP appear extended to 32 bits when read by processor.
    -                SIGNED: u1,
    -                ///  If 1, feed the opposite lane's accumulator into this lane's shift + mask hardware.
    -                ///  Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is before the shift+mask bypass)
    -                CROSS_INPUT: u1,
    -                ///  If 1, feed the opposite lane's result into this lane's accumulator on POP.
    -                CROSS_RESULT: u1,
    -                ///  If 1, mask + shift is bypassed for LANE0 result. This does not affect FULL result.
    -                ADD_RAW: u1,
    -                ///  ORed into bits 29:28 of the lane result presented to the processor on the bus.
    -                ///  No effect on the internal 32-bit datapath. Handy for using a lane to generate sequence
    -                ///  of pointers into flash or SRAM.
    -                FORCE_MSB: u2,
    -                reserved22: u1,
    -                ///  Only present on INTERP1 on each core. If CLAMP mode is enabled:
    -                ///  - LANE0 result is shifted and masked ACCUM0, clamped by a lower bound of
    -                ///  BASE0 and an upper bound of BASE1.
    -                ///  - Signedness of these comparisons is determined by LANE0_CTRL_SIGNED
    -                CLAMP: u1,
    -                ///  Indicates if any masked-off MSBs in ACCUM0 are set.
    -                OVERF0: u1,
    -                ///  Indicates if any masked-off MSBs in ACCUM1 are set.
    -                OVERF1: u1,
    -                ///  Set if either OVERF0 or OVERF1 is set.
    -                OVERF: u1,
    -                padding: u6,
    -            }),
    -            ///  Control register for lane 1
    -            INTERP1_CTRL_LANE1: mmio.Mmio(packed struct(u32) {
    -                ///  Logical right-shift applied to accumulator before masking
    -                SHIFT: u5,
    -                ///  The least-significant bit allowed to pass by the mask (inclusive)
    -                MASK_LSB: u5,
    -                ///  The most-significant bit allowed to pass by the mask (inclusive)
    -                ///  Setting MSB < LSB may cause chip to turn inside-out
    -                MASK_MSB: u5,
    -                ///  If SIGNED is set, the shifted and masked accumulator value is sign-extended to 32 bits
    -                ///  before adding to BASE1, and LANE1 PEEK/POP appear extended to 32 bits when read by processor.
    -                SIGNED: u1,
    -                ///  If 1, feed the opposite lane's accumulator into this lane's shift + mask hardware.
    -                ///  Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is before the shift+mask bypass)
    -                CROSS_INPUT: u1,
    -                ///  If 1, feed the opposite lane's result into this lane's accumulator on POP.
    -                CROSS_RESULT: u1,
    -                ///  If 1, mask + shift is bypassed for LANE1 result. This does not affect FULL result.
    -                ADD_RAW: u1,
    -                ///  ORed into bits 29:28 of the lane result presented to the processor on the bus.
    -                ///  No effect on the internal 32-bit datapath. Handy for using a lane to generate sequence
    -                ///  of pointers into flash or SRAM.
    -                FORCE_MSB: u2,
    -                padding: u11,
    -            }),
    -            ///  Values written here are atomically added to ACCUM0
    -            ///  Reading yields lane 0's raw shift and mask value (BASE0 not added).
    -            INTERP1_ACCUM0_ADD: mmio.Mmio(packed struct(u32) {
    -                INTERP1_ACCUM0_ADD: u24,
    -                padding: u8,
    -            }),
    -            ///  Values written here are atomically added to ACCUM1
    -            ///  Reading yields lane 1's raw shift and mask value (BASE1 not added).
    -            INTERP1_ACCUM1_ADD: mmio.Mmio(packed struct(u32) {
    -                INTERP1_ACCUM1_ADD: u24,
    -                padding: u8,
    -            }),
    -            ///  On write, the lower 16 bits go to BASE0, upper bits to BASE1 simultaneously.
    -            ///  Each half is sign-extended to 32 bits if that lane's SIGNED flag is set.
    -            INTERP1_BASE_1AND0: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK0: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK1: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK2: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK3: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK4: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK5: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK6: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK7: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK8: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK9: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK10: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK11: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK12: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK13: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK14: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK15: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK16: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK17: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK18: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK19: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK20: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK21: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK22: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK23: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK24: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK25: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK26: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK27: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK28: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK29: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK30: u32,
    -            ///  Reading from a spinlock address will:
    -            ///  - Return 0 if lock is already locked
    -            ///  - Otherwise return nonzero, and simultaneously claim the lock
    -            ///  Writing (any value) releases the lock.
    -            ///  If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins.
    -            ///  The value returned on success is 0x1 << lock number.
    -            SPINLOCK31: u32,
    -        };
    -
    -        pub const SPI0 = extern struct {
    -            ///  Control register 0, SSPCR0 on page 3-4
    -            SSPCR0: mmio.Mmio(packed struct(u32) {
    -                ///  Data Size Select: 0000 Reserved, undefined operation. 0001 Reserved, undefined operation. 0010 Reserved, undefined operation. 0011 4-bit data. 0100 5-bit data. 0101 6-bit data. 0110 7-bit data. 0111 8-bit data. 1000 9-bit data. 1001 10-bit data. 1010 11-bit data. 1011 12-bit data. 1100 13-bit data. 1101 14-bit data. 1110 15-bit data. 1111 16-bit data.
    -                DSS: u4,
    -                ///  Frame format: 00 Motorola SPI frame format. 01 TI synchronous serial frame format. 10 National Microwire frame format. 11 Reserved, undefined operation.
    -                FRF: u2,
    -                ///  SSPCLKOUT polarity, applicable to Motorola SPI frame format only. See Motorola SPI frame format on page 2-10.
    -                SPO: u1,
    -                ///  SSPCLKOUT phase, applicable to Motorola SPI frame format only. See Motorola SPI frame format on page 2-10.
    -                SPH: u1,
    -                ///  Serial clock rate. The value SCR is used to generate the transmit and receive bit rate of the PrimeCell SSP. The bit rate is: F SSPCLK CPSDVSR x (1+SCR) where CPSDVSR is an even value from 2-254, programmed through the SSPCPSR register and SCR is a value from 0-255.
    -                SCR: u8,
    -                padding: u16,
    -            }),
    -            ///  Control register 1, SSPCR1 on page 3-5
    -            SSPCR1: mmio.Mmio(packed struct(u32) {
    -                ///  Loop back mode: 0 Normal serial port operation enabled. 1 Output of transmit serial shifter is connected to input of receive serial shifter internally.
    -                LBM: u1,
    -                ///  Synchronous serial port enable: 0 SSP operation disabled. 1 SSP operation enabled.
    -                SSE: u1,
    -                ///  Master or slave mode select. This bit can be modified only when the PrimeCell SSP is disabled, SSE=0: 0 Device configured as master, default. 1 Device configured as slave.
    -                MS: u1,
    -                ///  Slave-mode output disable. This bit is relevant only in the slave mode, MS=1. In multiple-slave systems, it is possible for an PrimeCell SSP master to broadcast a message to all slaves in the system while ensuring that only one slave drives data onto its serial output line. In such systems the RXD lines from multiple slaves could be tied together. To operate in such systems, the SOD bit can be set if the PrimeCell SSP slave is not supposed to drive the SSPTXD line: 0 SSP can drive the SSPTXD output in slave mode. 1 SSP must not drive the SSPTXD output in slave mode.
    -                SOD: u1,
    -                padding: u28,
    -            }),
    -            ///  Data register, SSPDR on page 3-6
    -            SSPDR: mmio.Mmio(packed struct(u32) {
    -                ///  Transmit/Receive FIFO: Read Receive FIFO. Write Transmit FIFO. You must right-justify data when the PrimeCell SSP is programmed for a data size that is less than 16 bits. Unused bits at the top are ignored by transmit logic. The receive logic automatically right-justifies.
    -                DATA: u16,
    -                padding: u16,
    -            }),
    -            ///  Status register, SSPSR on page 3-7
    -            SSPSR: mmio.Mmio(packed struct(u32) {
    -                ///  Transmit FIFO empty, RO: 0 Transmit FIFO is not empty. 1 Transmit FIFO is empty.
    -                TFE: u1,
    -                ///  Transmit FIFO not full, RO: 0 Transmit FIFO is full. 1 Transmit FIFO is not full.
    -                TNF: u1,
    -                ///  Receive FIFO not empty, RO: 0 Receive FIFO is empty. 1 Receive FIFO is not empty.
    -                RNE: u1,
    -                ///  Receive FIFO full, RO: 0 Receive FIFO is not full. 1 Receive FIFO is full.
    -                RFF: u1,
    -                ///  PrimeCell SSP busy flag, RO: 0 SSP is idle. 1 SSP is currently transmitting and/or receiving a frame or the transmit FIFO is not empty.
    -                BSY: u1,
    -                padding: u27,
    -            }),
    -            ///  Clock prescale register, SSPCPSR on page 3-8
    -            SSPCPSR: mmio.Mmio(packed struct(u32) {
    -                ///  Clock prescale divisor. Must be an even number from 2-254, depending on the frequency of SSPCLK. The least significant bit always returns zero on reads.
    -                CPSDVSR: u8,
    -                padding: u24,
    -            }),
    -            ///  Interrupt mask set or clear register, SSPIMSC on page 3-9
    -            SSPIMSC: mmio.Mmio(packed struct(u32) {
    -                ///  Receive overrun interrupt mask: 0 Receive FIFO written to while full condition interrupt is masked. 1 Receive FIFO written to while full condition interrupt is not masked.
    -                RORIM: u1,
    -                ///  Receive timeout interrupt mask: 0 Receive FIFO not empty and no read prior to timeout period interrupt is masked. 1 Receive FIFO not empty and no read prior to timeout period interrupt is not masked.
    -                RTIM: u1,
    -                ///  Receive FIFO interrupt mask: 0 Receive FIFO half full or less condition interrupt is masked. 1 Receive FIFO half full or less condition interrupt is not masked.
    -                RXIM: u1,
    -                ///  Transmit FIFO interrupt mask: 0 Transmit FIFO half empty or less condition interrupt is masked. 1 Transmit FIFO half empty or less condition interrupt is not masked.
    -                TXIM: u1,
    -                padding: u28,
    -            }),
    -            ///  Raw interrupt status register, SSPRIS on page 3-10
    -            SSPRIS: mmio.Mmio(packed struct(u32) {
    -                ///  Gives the raw interrupt state, prior to masking, of the SSPRORINTR interrupt
    -                RORRIS: u1,
    -                ///  Gives the raw interrupt state, prior to masking, of the SSPRTINTR interrupt
    -                RTRIS: u1,
    -                ///  Gives the raw interrupt state, prior to masking, of the SSPRXINTR interrupt
    -                RXRIS: u1,
    -                ///  Gives the raw interrupt state, prior to masking, of the SSPTXINTR interrupt
    -                TXRIS: u1,
    -                padding: u28,
    -            }),
    -            ///  Masked interrupt status register, SSPMIS on page 3-11
    -            SSPMIS: mmio.Mmio(packed struct(u32) {
    -                ///  Gives the receive over run masked interrupt status, after masking, of the SSPRORINTR interrupt
    -                RORMIS: u1,
    -                ///  Gives the receive timeout masked interrupt state, after masking, of the SSPRTINTR interrupt
    -                RTMIS: u1,
    -                ///  Gives the receive FIFO masked interrupt state, after masking, of the SSPRXINTR interrupt
    -                RXMIS: u1,
    -                ///  Gives the transmit FIFO masked interrupt state, after masking, of the SSPTXINTR interrupt
    -                TXMIS: u1,
    -                padding: u28,
    -            }),
    -            ///  Interrupt clear register, SSPICR on page 3-11
    -            SSPICR: mmio.Mmio(packed struct(u32) {
    -                ///  Clears the SSPRORINTR interrupt
    -                RORIC: u1,
    -                ///  Clears the SSPRTINTR interrupt
    -                RTIC: u1,
    -                padding: u30,
    -            }),
    -            ///  DMA control register, SSPDMACR on page 3-12
    -            SSPDMACR: mmio.Mmio(packed struct(u32) {
    -                ///  Receive DMA Enable. If this bit is set to 1, DMA for the receive FIFO is enabled.
    -                RXDMAE: u1,
    -                ///  Transmit DMA Enable. If this bit is set to 1, DMA for the transmit FIFO is enabled.
    -                TXDMAE: u1,
    -                padding: u30,
    -            }),
    -            reserved4064: [4024]u8,
    -            ///  Peripheral identification registers, SSPPeriphID0-3 on page 3-13
    -            SSPPERIPHID0: mmio.Mmio(packed struct(u32) {
    -                ///  These bits read back as 0x22
    -                PARTNUMBER0: u8,
    -                padding: u24,
    -            }),
    -            ///  Peripheral identification registers, SSPPeriphID0-3 on page 3-13
    -            SSPPERIPHID1: mmio.Mmio(packed struct(u32) {
    -                ///  These bits read back as 0x0
    -                PARTNUMBER1: u4,
    -                ///  These bits read back as 0x1
    -                DESIGNER0: u4,
    -                padding: u24,
    -            }),
    -            ///  Peripheral identification registers, SSPPeriphID0-3 on page 3-13
    -            SSPPERIPHID2: mmio.Mmio(packed struct(u32) {
    -                ///  These bits read back as 0x4
    -                DESIGNER1: u4,
    -                ///  These bits return the peripheral revision
    -                REVISION: u4,
    -                padding: u24,
    -            }),
    -            ///  Peripheral identification registers, SSPPeriphID0-3 on page 3-13
    -            SSPPERIPHID3: mmio.Mmio(packed struct(u32) {
    -                ///  These bits read back as 0x00
    -                CONFIGURATION: u8,
    -                padding: u24,
    -            }),
    -            ///  PrimeCell identification registers, SSPPCellID0-3 on page 3-16
    -            SSPPCELLID0: mmio.Mmio(packed struct(u32) {
    -                ///  These bits read back as 0x0D
    -                SSPPCELLID0: u8,
    -                padding: u24,
    -            }),
    -            ///  PrimeCell identification registers, SSPPCellID0-3 on page 3-16
    -            SSPPCELLID1: mmio.Mmio(packed struct(u32) {
    -                ///  These bits read back as 0xF0
    -                SSPPCELLID1: u8,
    -                padding: u24,
    -            }),
    -            ///  PrimeCell identification registers, SSPPCellID0-3 on page 3-16
    -            SSPPCELLID2: mmio.Mmio(packed struct(u32) {
    -                ///  These bits read back as 0x05
    -                SSPPCELLID2: u8,
    -                padding: u24,
    -            }),
    -            ///  PrimeCell identification registers, SSPPCellID0-3 on page 3-16
    -            SSPPCELLID3: mmio.Mmio(packed struct(u32) {
    -                ///  These bits read back as 0xB1
    -                SSPPCELLID3: u8,
    -                padding: u24,
    -            }),
    -        };
    -
    -        ///  USB FS/LS controller device registers
    -        pub const USBCTRL_REGS = extern struct {
    -            ///  Device address and endpoint control
    -            ADDR_ENDP: mmio.Mmio(packed struct(u32) {
    -                ///  In device mode, the address that the device should respond to. Set in response to a SET_ADDR setup packet from the host. In host mode set to the address of the device to communicate with.
    -                ADDRESS: u7,
    -                reserved16: u9,
    -                ///  Device endpoint to send data to. Only valid for HOST mode.
    -                ENDPOINT: u4,
    -                padding: u12,
    -            }),
    -            ///  Interrupt endpoint 1. Only valid for HOST mode.
    -            ADDR_ENDP1: mmio.Mmio(packed struct(u32) {
    -                ///  Device address
    -                ADDRESS: u7,
    -                reserved16: u9,
    -                ///  Endpoint number of the interrupt endpoint
    -                ENDPOINT: u4,
    -                reserved25: u5,
    -                ///  Direction of the interrupt endpoint. In=0, Out=1
    -                INTEP_DIR: u1,
    -                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -                INTEP_PREAMBLE: u1,
    -                padding: u5,
    -            }),
    -            ///  Interrupt endpoint 2. Only valid for HOST mode.
    -            ADDR_ENDP2: mmio.Mmio(packed struct(u32) {
    -                ///  Device address
    -                ADDRESS: u7,
    -                reserved16: u9,
    -                ///  Endpoint number of the interrupt endpoint
    -                ENDPOINT: u4,
    -                reserved25: u5,
    -                ///  Direction of the interrupt endpoint. In=0, Out=1
    -                INTEP_DIR: u1,
    -                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -                INTEP_PREAMBLE: u1,
    -                padding: u5,
    -            }),
    -            ///  Interrupt endpoint 3. Only valid for HOST mode.
    -            ADDR_ENDP3: mmio.Mmio(packed struct(u32) {
    -                ///  Device address
    -                ADDRESS: u7,
    -                reserved16: u9,
    -                ///  Endpoint number of the interrupt endpoint
    -                ENDPOINT: u4,
    -                reserved25: u5,
    -                ///  Direction of the interrupt endpoint. In=0, Out=1
    -                INTEP_DIR: u1,
    -                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -                INTEP_PREAMBLE: u1,
    -                padding: u5,
    -            }),
    -            ///  Interrupt endpoint 4. Only valid for HOST mode.
    -            ADDR_ENDP4: mmio.Mmio(packed struct(u32) {
    -                ///  Device address
    -                ADDRESS: u7,
    -                reserved16: u9,
    -                ///  Endpoint number of the interrupt endpoint
    -                ENDPOINT: u4,
    -                reserved25: u5,
    -                ///  Direction of the interrupt endpoint. In=0, Out=1
    -                INTEP_DIR: u1,
    -                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -                INTEP_PREAMBLE: u1,
    -                padding: u5,
    -            }),
    -            ///  Interrupt endpoint 5. Only valid for HOST mode.
    -            ADDR_ENDP5: mmio.Mmio(packed struct(u32) {
    -                ///  Device address
    -                ADDRESS: u7,
    -                reserved16: u9,
    -                ///  Endpoint number of the interrupt endpoint
    -                ENDPOINT: u4,
    -                reserved25: u5,
    -                ///  Direction of the interrupt endpoint. In=0, Out=1
    -                INTEP_DIR: u1,
    -                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -                INTEP_PREAMBLE: u1,
    -                padding: u5,
    -            }),
    -            ///  Interrupt endpoint 6. Only valid for HOST mode.
    -            ADDR_ENDP6: mmio.Mmio(packed struct(u32) {
    -                ///  Device address
    -                ADDRESS: u7,
    -                reserved16: u9,
    -                ///  Endpoint number of the interrupt endpoint
    -                ENDPOINT: u4,
    -                reserved25: u5,
    -                ///  Direction of the interrupt endpoint. In=0, Out=1
    -                INTEP_DIR: u1,
    -                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -                INTEP_PREAMBLE: u1,
    -                padding: u5,
    -            }),
    -            ///  Interrupt endpoint 7. Only valid for HOST mode.
    -            ADDR_ENDP7: mmio.Mmio(packed struct(u32) {
    -                ///  Device address
    -                ADDRESS: u7,
    -                reserved16: u9,
    -                ///  Endpoint number of the interrupt endpoint
    -                ENDPOINT: u4,
    -                reserved25: u5,
    -                ///  Direction of the interrupt endpoint. In=0, Out=1
    -                INTEP_DIR: u1,
    -                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -                INTEP_PREAMBLE: u1,
    -                padding: u5,
    -            }),
    -            ///  Interrupt endpoint 8. Only valid for HOST mode.
    -            ADDR_ENDP8: mmio.Mmio(packed struct(u32) {
    -                ///  Device address
    -                ADDRESS: u7,
    -                reserved16: u9,
    -                ///  Endpoint number of the interrupt endpoint
    -                ENDPOINT: u4,
    -                reserved25: u5,
    -                ///  Direction of the interrupt endpoint. In=0, Out=1
    -                INTEP_DIR: u1,
    -                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -                INTEP_PREAMBLE: u1,
    -                padding: u5,
    -            }),
    -            ///  Interrupt endpoint 9. Only valid for HOST mode.
    -            ADDR_ENDP9: mmio.Mmio(packed struct(u32) {
    -                ///  Device address
    -                ADDRESS: u7,
    -                reserved16: u9,
    -                ///  Endpoint number of the interrupt endpoint
    -                ENDPOINT: u4,
    -                reserved25: u5,
    -                ///  Direction of the interrupt endpoint. In=0, Out=1
    -                INTEP_DIR: u1,
    -                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -                INTEP_PREAMBLE: u1,
    -                padding: u5,
    -            }),
    -            ///  Interrupt endpoint 10. Only valid for HOST mode.
    -            ADDR_ENDP10: mmio.Mmio(packed struct(u32) {
    -                ///  Device address
    -                ADDRESS: u7,
    -                reserved16: u9,
    -                ///  Endpoint number of the interrupt endpoint
    -                ENDPOINT: u4,
    -                reserved25: u5,
    -                ///  Direction of the interrupt endpoint. In=0, Out=1
    -                INTEP_DIR: u1,
    -                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -                INTEP_PREAMBLE: u1,
    -                padding: u5,
    -            }),
    -            ///  Interrupt endpoint 11. Only valid for HOST mode.
    -            ADDR_ENDP11: mmio.Mmio(packed struct(u32) {
    -                ///  Device address
    -                ADDRESS: u7,
    -                reserved16: u9,
    -                ///  Endpoint number of the interrupt endpoint
    -                ENDPOINT: u4,
    -                reserved25: u5,
    -                ///  Direction of the interrupt endpoint. In=0, Out=1
    -                INTEP_DIR: u1,
    -                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -                INTEP_PREAMBLE: u1,
    -                padding: u5,
    -            }),
    -            ///  Interrupt endpoint 12. Only valid for HOST mode.
    -            ADDR_ENDP12: mmio.Mmio(packed struct(u32) {
    -                ///  Device address
    -                ADDRESS: u7,
    -                reserved16: u9,
    -                ///  Endpoint number of the interrupt endpoint
    -                ENDPOINT: u4,
    -                reserved25: u5,
    -                ///  Direction of the interrupt endpoint. In=0, Out=1
    -                INTEP_DIR: u1,
    -                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -                INTEP_PREAMBLE: u1,
    -                padding: u5,
    -            }),
    -            ///  Interrupt endpoint 13. Only valid for HOST mode.
    -            ADDR_ENDP13: mmio.Mmio(packed struct(u32) {
    -                ///  Device address
    -                ADDRESS: u7,
    -                reserved16: u9,
    -                ///  Endpoint number of the interrupt endpoint
    -                ENDPOINT: u4,
    -                reserved25: u5,
    -                ///  Direction of the interrupt endpoint. In=0, Out=1
    -                INTEP_DIR: u1,
    -                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -                INTEP_PREAMBLE: u1,
    -                padding: u5,
    -            }),
    -            ///  Interrupt endpoint 14. Only valid for HOST mode.
    -            ADDR_ENDP14: mmio.Mmio(packed struct(u32) {
    -                ///  Device address
    -                ADDRESS: u7,
    -                reserved16: u9,
    -                ///  Endpoint number of the interrupt endpoint
    -                ENDPOINT: u4,
    -                reserved25: u5,
    -                ///  Direction of the interrupt endpoint. In=0, Out=1
    -                INTEP_DIR: u1,
    -                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -                INTEP_PREAMBLE: u1,
    -                padding: u5,
    -            }),
    -            ///  Interrupt endpoint 15. Only valid for HOST mode.
    -            ADDR_ENDP15: mmio.Mmio(packed struct(u32) {
    -                ///  Device address
    -                ADDRESS: u7,
    -                reserved16: u9,
    -                ///  Endpoint number of the interrupt endpoint
    -                ENDPOINT: u4,
    -                reserved25: u5,
    -                ///  Direction of the interrupt endpoint. In=0, Out=1
    -                INTEP_DIR: u1,
    -                ///  Interrupt EP requires preamble (is a low speed device on a full speed hub)
    -                INTEP_PREAMBLE: u1,
    -                padding: u5,
    -            }),
    -            ///  Main control register
    -            MAIN_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  Enable controller
    -                CONTROLLER_EN: u1,
    -                ///  Device mode = 0, Host mode = 1
    -                HOST_NDEVICE: u1,
    -                reserved31: u29,
    -                ///  Reduced timings for simulation
    -                SIM_TIMING: u1,
    -            }),
    -            ///  Set the SOF (Start of Frame) frame number in the host controller. The SOF packet is sent every 1ms and the host will increment the frame number by 1 each time.
    -            SOF_WR: mmio.Mmio(packed struct(u32) {
    -                COUNT: u11,
    -                padding: u21,
    -            }),
    -            ///  Read the last SOF (Start of Frame) frame number seen. In device mode the last SOF received from the host. In host mode the last SOF sent by the host.
    -            SOF_RD: mmio.Mmio(packed struct(u32) {
    -                COUNT: u11,
    -                padding: u21,
    -            }),
    -            ///  SIE control register
    -            SIE_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  Host: Start transaction
    -                START_TRANS: u1,
    -                ///  Host: Send Setup packet
    -                SEND_SETUP: u1,
    -                ///  Host: Send transaction (OUT from host)
    -                SEND_DATA: u1,
    -                ///  Host: Receive transaction (IN to host)
    -                RECEIVE_DATA: u1,
    -                ///  Host: Stop transaction
    -                STOP_TRANS: u1,
    -                reserved6: u1,
    -                ///  Host: Preable enable for LS device on FS hub
    -                PREAMBLE_EN: u1,
    -                reserved8: u1,
    -                ///  Host: Delay packet(s) until after SOF
    -                SOF_SYNC: u1,
    -                ///  Host: Enable SOF generation (for full speed bus)
    -                SOF_EN: u1,
    -                ///  Host: Enable keep alive packet (for low speed bus)
    -                KEEP_ALIVE_EN: u1,
    -                ///  Host: Enable VBUS
    -                VBUS_EN: u1,
    -                ///  Device: Remote wakeup. Device can initiate its own resume after suspend.
    -                RESUME: u1,
    -                ///  Host: Reset bus
    -                RESET_BUS: u1,
    -                reserved15: u1,
    -                ///  Host: Enable pull down resistors
    -                PULLDOWN_EN: u1,
    -                ///  Device: Enable pull up resistor
    -                PULLUP_EN: u1,
    -                ///  Device: Pull-up strength (0=1K2, 1=2k3)
    -                RPU_OPT: u1,
    -                ///  Power down bus transceiver
    -                TRANSCEIVER_PD: u1,
    -                reserved24: u5,
    -                ///  Direct control of DM
    -                DIRECT_DM: u1,
    -                ///  Direct control of DP
    -                DIRECT_DP: u1,
    -                ///  Direct bus drive enable
    -                DIRECT_EN: u1,
    -                ///  Device: Set bit in EP_STATUS_STALL_NAK when EP0 sends a NAK
    -                EP0_INT_NAK: u1,
    -                ///  Device: Set bit in BUFF_STATUS for every 2 buffers completed on EP0
    -                EP0_INT_2BUF: u1,
    -                ///  Device: Set bit in BUFF_STATUS for every buffer completed on EP0
    -                EP0_INT_1BUF: u1,
    -                ///  Device: EP0 single buffered = 0, double buffered = 1
    -                EP0_DOUBLE_BUF: u1,
    -                ///  Device: Set bit in EP_STATUS_STALL_NAK when EP0 sends a STALL
    -                EP0_INT_STALL: u1,
    -            }),
    -            ///  SIE status register
    -            SIE_STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  Device: VBUS Detected
    -                VBUS_DETECTED: u1,
    -                reserved2: u1,
    -                ///  USB bus line state
    -                LINE_STATE: u2,
    -                ///  Bus in suspended state. Valid for device and host. Host and device will go into suspend if neither Keep Alive / SOF frames are enabled.
    -                SUSPENDED: u1,
    -                reserved8: u3,
    -                ///  Host: device speed. Disconnected = 00, LS = 01, FS = 10
    -                SPEED: u2,
    -                ///  VBUS over current detected
    -                VBUS_OVER_CURR: u1,
    -                ///  Host: Device has initiated a remote resume. Device: host has initiated a resume.
    -                RESUME: u1,
    -                reserved16: u4,
    -                ///  Device: connected
    -                CONNECTED: u1,
    -                ///  Device: Setup packet received
    -                SETUP_REC: u1,
    -                ///  Transaction complete.
    -                ///  Raised by device if:
    -                ///  * An IN or OUT packet is sent with the `LAST_BUFF` bit set in the buffer control register
    -                ///  Raised by host if:
    -                ///  * A setup packet is sent when no data in or data out transaction follows * An IN packet is received and the `LAST_BUFF` bit is set in the buffer control register * An IN packet is received with zero length * An OUT packet is sent and the `LAST_BUFF` bit is set
    -                TRANS_COMPLETE: u1,
    -                ///  Device: bus reset received
    -                BUS_RESET: u1,
    -                reserved24: u4,
    -                ///  CRC Error. Raised by the Serial RX engine.
    -                CRC_ERROR: u1,
    -                ///  Bit Stuff Error. Raised by the Serial RX engine.
    -                BIT_STUFF_ERROR: u1,
    -                ///  RX overflow is raised by the Serial RX engine if the incoming data is too fast.
    -                RX_OVERFLOW: u1,
    -                ///  RX timeout is raised by both the host and device if an ACK is not received in the maximum time specified by the USB spec.
    -                RX_TIMEOUT: u1,
    -                ///  Host: NAK received
    -                NAK_REC: u1,
    -                ///  Host: STALL received
    -                STALL_REC: u1,
    -                ///  ACK received. Raised by both host and device.
    -                ACK_REC: u1,
    -                ///  Data Sequence Error.
    -                ///  The device can raise a sequence error in the following conditions:
    -                ///  * A SETUP packet is received followed by a DATA1 packet (data phase should always be DATA0) * An OUT packet is received from the host but doesn't match the data pid in the buffer control register read from DPSRAM
    -                ///  The host can raise a data sequence error in the following conditions:
    -                ///  * An IN packet from the device has the wrong data PID
    -                DATA_SEQ_ERROR: u1,
    -            }),
    -            ///  interrupt endpoint control register
    -            INT_EP_CTRL: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Host: Enable interrupt endpoint 1 -> 15
    -                INT_EP_ACTIVE: u15,
    -                padding: u16,
    -            }),
    -            ///  Buffer status register. A bit set here indicates that a buffer has completed on the endpoint (if the buffer interrupt is enabled). It is possible for 2 buffers to be completed, so clearing the buffer status bit may instantly re set it on the next clock cycle.
    -            BUFF_STATUS: mmio.Mmio(packed struct(u32) {
    -                EP0_IN: u1,
    -                EP0_OUT: u1,
    -                EP1_IN: u1,
    -                EP1_OUT: u1,
    -                EP2_IN: u1,
    -                EP2_OUT: u1,
    -                EP3_IN: u1,
    -                EP3_OUT: u1,
    -                EP4_IN: u1,
    -                EP4_OUT: u1,
    -                EP5_IN: u1,
    -                EP5_OUT: u1,
    -                EP6_IN: u1,
    -                EP6_OUT: u1,
    -                EP7_IN: u1,
    -                EP7_OUT: u1,
    -                EP8_IN: u1,
    -                EP8_OUT: u1,
    -                EP9_IN: u1,
    -                EP9_OUT: u1,
    -                EP10_IN: u1,
    -                EP10_OUT: u1,
    -                EP11_IN: u1,
    -                EP11_OUT: u1,
    -                EP12_IN: u1,
    -                EP12_OUT: u1,
    -                EP13_IN: u1,
    -                EP13_OUT: u1,
    -                EP14_IN: u1,
    -                EP14_OUT: u1,
    -                EP15_IN: u1,
    -                EP15_OUT: u1,
    -            }),
    -            ///  Which of the double buffers should be handled. Only valid if using an interrupt per buffer (i.e. not per 2 buffers). Not valid for host interrupt endpoint polling because they are only single buffered.
    -            BUFF_CPU_SHOULD_HANDLE: mmio.Mmio(packed struct(u32) {
    -                EP0_IN: u1,
    -                EP0_OUT: u1,
    -                EP1_IN: u1,
    -                EP1_OUT: u1,
    -                EP2_IN: u1,
    -                EP2_OUT: u1,
    -                EP3_IN: u1,
    -                EP3_OUT: u1,
    -                EP4_IN: u1,
    -                EP4_OUT: u1,
    -                EP5_IN: u1,
    -                EP5_OUT: u1,
    -                EP6_IN: u1,
    -                EP6_OUT: u1,
    -                EP7_IN: u1,
    -                EP7_OUT: u1,
    -                EP8_IN: u1,
    -                EP8_OUT: u1,
    -                EP9_IN: u1,
    -                EP9_OUT: u1,
    -                EP10_IN: u1,
    -                EP10_OUT: u1,
    -                EP11_IN: u1,
    -                EP11_OUT: u1,
    -                EP12_IN: u1,
    -                EP12_OUT: u1,
    -                EP13_IN: u1,
    -                EP13_OUT: u1,
    -                EP14_IN: u1,
    -                EP14_OUT: u1,
    -                EP15_IN: u1,
    -                EP15_OUT: u1,
    -            }),
    -            ///  Device only: Can be set to ignore the buffer control register for this endpoint in case you would like to revoke a buffer. A NAK will be sent for every access to the endpoint until this bit is cleared. A corresponding bit in `EP_ABORT_DONE` is set when it is safe to modify the buffer control register.
    -            EP_ABORT: mmio.Mmio(packed struct(u32) {
    -                EP0_IN: u1,
    -                EP0_OUT: u1,
    -                EP1_IN: u1,
    -                EP1_OUT: u1,
    -                EP2_IN: u1,
    -                EP2_OUT: u1,
    -                EP3_IN: u1,
    -                EP3_OUT: u1,
    -                EP4_IN: u1,
    -                EP4_OUT: u1,
    -                EP5_IN: u1,
    -                EP5_OUT: u1,
    -                EP6_IN: u1,
    -                EP6_OUT: u1,
    -                EP7_IN: u1,
    -                EP7_OUT: u1,
    -                EP8_IN: u1,
    -                EP8_OUT: u1,
    -                EP9_IN: u1,
    -                EP9_OUT: u1,
    -                EP10_IN: u1,
    -                EP10_OUT: u1,
    -                EP11_IN: u1,
    -                EP11_OUT: u1,
    -                EP12_IN: u1,
    -                EP12_OUT: u1,
    -                EP13_IN: u1,
    -                EP13_OUT: u1,
    -                EP14_IN: u1,
    -                EP14_OUT: u1,
    -                EP15_IN: u1,
    -                EP15_OUT: u1,
    -            }),
    -            ///  Device only: Used in conjunction with `EP_ABORT`. Set once an endpoint is idle so the programmer knows it is safe to modify the buffer control register.
    -            EP_ABORT_DONE: mmio.Mmio(packed struct(u32) {
    -                EP0_IN: u1,
    -                EP0_OUT: u1,
    -                EP1_IN: u1,
    -                EP1_OUT: u1,
    -                EP2_IN: u1,
    -                EP2_OUT: u1,
    -                EP3_IN: u1,
    -                EP3_OUT: u1,
    -                EP4_IN: u1,
    -                EP4_OUT: u1,
    -                EP5_IN: u1,
    -                EP5_OUT: u1,
    -                EP6_IN: u1,
    -                EP6_OUT: u1,
    -                EP7_IN: u1,
    -                EP7_OUT: u1,
    -                EP8_IN: u1,
    -                EP8_OUT: u1,
    -                EP9_IN: u1,
    -                EP9_OUT: u1,
    -                EP10_IN: u1,
    -                EP10_OUT: u1,
    -                EP11_IN: u1,
    -                EP11_OUT: u1,
    -                EP12_IN: u1,
    -                EP12_OUT: u1,
    -                EP13_IN: u1,
    -                EP13_OUT: u1,
    -                EP14_IN: u1,
    -                EP14_OUT: u1,
    -                EP15_IN: u1,
    -                EP15_OUT: u1,
    -            }),
    -            ///  Device: this bit must be set in conjunction with the `STALL` bit in the buffer control register to send a STALL on EP0. The device controller clears these bits when a SETUP packet is received because the USB spec requires that a STALL condition is cleared when a SETUP packet is received.
    -            EP_STALL_ARM: mmio.Mmio(packed struct(u32) {
    -                EP0_IN: u1,
    -                EP0_OUT: u1,
    -                padding: u30,
    -            }),
    -            ///  Used by the host controller. Sets the wait time in microseconds before trying again if the device replies with a NAK.
    -            NAK_POLL: mmio.Mmio(packed struct(u32) {
    -                ///  NAK polling interval for a low speed device
    -                DELAY_LS: u10,
    -                reserved16: u6,
    -                ///  NAK polling interval for a full speed device
    -                DELAY_FS: u10,
    -                padding: u6,
    -            }),
    -            ///  Device: bits are set when the `IRQ_ON_NAK` or `IRQ_ON_STALL` bits are set. For EP0 this comes from `SIE_CTRL`. For all other endpoints it comes from the endpoint control register.
    -            EP_STATUS_STALL_NAK: mmio.Mmio(packed struct(u32) {
    -                EP0_IN: u1,
    -                EP0_OUT: u1,
    -                EP1_IN: u1,
    -                EP1_OUT: u1,
    -                EP2_IN: u1,
    -                EP2_OUT: u1,
    -                EP3_IN: u1,
    -                EP3_OUT: u1,
    -                EP4_IN: u1,
    -                EP4_OUT: u1,
    -                EP5_IN: u1,
    -                EP5_OUT: u1,
    -                EP6_IN: u1,
    -                EP6_OUT: u1,
    -                EP7_IN: u1,
    -                EP7_OUT: u1,
    -                EP8_IN: u1,
    -                EP8_OUT: u1,
    -                EP9_IN: u1,
    -                EP9_OUT: u1,
    -                EP10_IN: u1,
    -                EP10_OUT: u1,
    -                EP11_IN: u1,
    -                EP11_OUT: u1,
    -                EP12_IN: u1,
    -                EP12_OUT: u1,
    -                EP13_IN: u1,
    -                EP13_OUT: u1,
    -                EP14_IN: u1,
    -                EP14_OUT: u1,
    -                EP15_IN: u1,
    -                EP15_OUT: u1,
    -            }),
    -            ///  Where to connect the USB controller. Should be to_phy by default.
    -            USB_MUXING: mmio.Mmio(packed struct(u32) {
    -                TO_PHY: u1,
    -                TO_EXTPHY: u1,
    -                TO_DIGITAL_PAD: u1,
    -                SOFTCON: u1,
    -                padding: u28,
    -            }),
    -            ///  Overrides for the power signals in the event that the VBUS signals are not hooked up to GPIO. Set the value of the override and then the override enable to switch over to the override value.
    -            USB_PWR: mmio.Mmio(packed struct(u32) {
    -                VBUS_EN: u1,
    -                VBUS_EN_OVERRIDE_EN: u1,
    -                VBUS_DETECT: u1,
    -                VBUS_DETECT_OVERRIDE_EN: u1,
    -                OVERCURR_DETECT: u1,
    -                OVERCURR_DETECT_EN: u1,
    -                padding: u26,
    -            }),
    -            ///  This register allows for direct control of the USB phy. Use in conjunction with usbphy_direct_override register to enable each override bit.
    -            USBPHY_DIRECT: mmio.Mmio(packed struct(u32) {
    -                ///  Enable the second DP pull up resistor. 0 - Pull = Rpu2; 1 - Pull = Rpu1 + Rpu2
    -                DP_PULLUP_HISEL: u1,
    -                ///  DP pull up enable
    -                DP_PULLUP_EN: u1,
    -                ///  DP pull down enable
    -                DP_PULLDN_EN: u1,
    -                reserved4: u1,
    -                ///  Enable the second DM pull up resistor. 0 - Pull = Rpu2; 1 - Pull = Rpu1 + Rpu2
    -                DM_PULLUP_HISEL: u1,
    -                ///  DM pull up enable
    -                DM_PULLUP_EN: u1,
    -                ///  DM pull down enable
    -                DM_PULLDN_EN: u1,
    -                reserved8: u1,
    -                ///  Output enable. If TX_DIFFMODE=1, OE for DPP/DPM diff pair. 0 - DPP/DPM in Hi-Z state; 1 - DPP/DPM driving
    -                ///  If TX_DIFFMODE=0, OE for DPP only. 0 - DPP in Hi-Z state; 1 - DPP driving
    -                TX_DP_OE: u1,
    -                ///  Output enable. If TX_DIFFMODE=1, Ignored.
    -                ///  If TX_DIFFMODE=0, OE for DPM only. 0 - DPM in Hi-Z state; 1 - DPM driving
    -                TX_DM_OE: u1,
    -                ///  Output data. If TX_DIFFMODE=1, Drives DPP/DPM diff pair. TX_DP_OE=1 to enable drive. DPP=TX_DP, DPM=~TX_DP
    -                ///  If TX_DIFFMODE=0, Drives DPP only. TX_DP_OE=1 to enable drive. DPP=TX_DP
    -                TX_DP: u1,
    -                ///  Output data. TX_DIFFMODE=1, Ignored
    -                ///  TX_DIFFMODE=0, Drives DPM only. TX_DM_OE=1 to enable drive. DPM=TX_DM
    -                TX_DM: u1,
    -                ///  RX power down override (if override enable is set). 1 = powered down.
    -                RX_PD: u1,
    -                ///  TX power down override (if override enable is set). 1 = powered down.
    -                TX_PD: u1,
    -                ///  TX_FSSLEW=0: Low speed slew rate
    -                ///  TX_FSSLEW=1: Full speed slew rate
    -                TX_FSSLEW: u1,
    -                ///  TX_DIFFMODE=0: Single ended mode
    -                ///  TX_DIFFMODE=1: Differential drive mode (TX_DM, TX_DM_OE ignored)
    -                TX_DIFFMODE: u1,
    -                ///  Differential RX
    -                RX_DD: u1,
    -                ///  DPP pin state
    -                RX_DP: u1,
    -                ///  DPM pin state
    -                RX_DM: u1,
    -                ///  DP overcurrent
    -                DP_OVCN: u1,
    -                ///  DM overcurrent
    -                DM_OVCN: u1,
    -                ///  DP over voltage
    -                DP_OVV: u1,
    -                ///  DM over voltage
    -                DM_OVV: u1,
    -                padding: u9,
    -            }),
    -            ///  Override enable for each control in usbphy_direct
    -            USBPHY_DIRECT_OVERRIDE: mmio.Mmio(packed struct(u32) {
    -                DP_PULLUP_HISEL_OVERRIDE_EN: u1,
    -                DM_PULLUP_HISEL_OVERRIDE_EN: u1,
    -                DP_PULLUP_EN_OVERRIDE_EN: u1,
    -                DP_PULLDN_EN_OVERRIDE_EN: u1,
    -                DM_PULLDN_EN_OVERRIDE_EN: u1,
    -                TX_DP_OE_OVERRIDE_EN: u1,
    -                TX_DM_OE_OVERRIDE_EN: u1,
    -                TX_DP_OVERRIDE_EN: u1,
    -                TX_DM_OVERRIDE_EN: u1,
    -                RX_PD_OVERRIDE_EN: u1,
    -                TX_PD_OVERRIDE_EN: u1,
    -                TX_FSSLEW_OVERRIDE_EN: u1,
    -                DM_PULLUP_OVERRIDE_EN: u1,
    -                reserved15: u2,
    -                TX_DIFFMODE_OVERRIDE_EN: u1,
    -                padding: u16,
    -            }),
    -            ///  Used to adjust trim values of USB phy pull down resistors.
    -            USBPHY_TRIM: mmio.Mmio(packed struct(u32) {
    -                ///  Value to drive to USB PHY
    -                ///  DP pulldown resistor trim control
    -                ///  Experimental data suggests that the reset value will work, but this register allows adjustment if required
    -                DP_PULLDN_TRIM: u5,
    -                reserved8: u3,
    -                ///  Value to drive to USB PHY
    -                ///  DM pulldown resistor trim control
    -                ///  Experimental data suggests that the reset value will work, but this register allows adjustment if required
    -                DM_PULLDN_TRIM: u5,
    -                padding: u19,
    -            }),
    -            reserved140: [4]u8,
    -            ///  Raw Interrupts
    -            INTR: mmio.Mmio(packed struct(u32) {
    -                ///  Host: raised when a device is connected or disconnected (i.e. when SIE_STATUS.SPEED changes). Cleared by writing to SIE_STATUS.SPEED
    -                HOST_CONN_DIS: u1,
    -                ///  Host: raised when a device wakes up the host. Cleared by writing to SIE_STATUS.RESUME
    -                HOST_RESUME: u1,
    -                ///  Host: raised every time the host sends a SOF (Start of Frame). Cleared by reading SOF_RD
    -                HOST_SOF: u1,
    -                ///  Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by writing to this bit.
    -                TRANS_COMPLETE: u1,
    -                ///  Raised when any bit in BUFF_STATUS is set. Clear by clearing all bits in BUFF_STATUS.
    -                BUFF_STATUS: u1,
    -                ///  Source: SIE_STATUS.DATA_SEQ_ERROR
    -                ERROR_DATA_SEQ: u1,
    -                ///  Source: SIE_STATUS.RX_TIMEOUT
    -                ERROR_RX_TIMEOUT: u1,
    -                ///  Source: SIE_STATUS.RX_OVERFLOW
    -                ERROR_RX_OVERFLOW: u1,
    -                ///  Source: SIE_STATUS.BIT_STUFF_ERROR
    -                ERROR_BIT_STUFF: u1,
    -                ///  Source: SIE_STATUS.CRC_ERROR
    -                ERROR_CRC: u1,
    -                ///  Source: SIE_STATUS.STALL_REC
    -                STALL: u1,
    -                ///  Source: SIE_STATUS.VBUS_DETECTED
    -                VBUS_DETECT: u1,
    -                ///  Source: SIE_STATUS.BUS_RESET
    -                BUS_RESET: u1,
    -                ///  Set when the device connection state changes. Cleared by writing to SIE_STATUS.CONNECTED
    -                DEV_CONN_DIS: u1,
    -                ///  Set when the device suspend state changes. Cleared by writing to SIE_STATUS.SUSPENDED
    -                DEV_SUSPEND: u1,
    -                ///  Set when the device receives a resume from the host. Cleared by writing to SIE_STATUS.RESUME
    -                DEV_RESUME_FROM_HOST: u1,
    -                ///  Device. Source: SIE_STATUS.SETUP_REC
    -                SETUP_REQ: u1,
    -                ///  Set every time the device receives a SOF (Start of Frame) packet. Cleared by reading SOF_RD
    -                DEV_SOF: u1,
    -                ///  Raised when any bit in ABORT_DONE is set. Clear by clearing all bits in ABORT_DONE.
    -                ABORT_DONE: u1,
    -                ///  Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by clearing all bits in EP_STATUS_STALL_NAK.
    -                EP_STALL_NAK: u1,
    -                padding: u12,
    -            }),
    -            ///  Interrupt Enable
    -            INTE: mmio.Mmio(packed struct(u32) {
    -                ///  Host: raised when a device is connected or disconnected (i.e. when SIE_STATUS.SPEED changes). Cleared by writing to SIE_STATUS.SPEED
    -                HOST_CONN_DIS: u1,
    -                ///  Host: raised when a device wakes up the host. Cleared by writing to SIE_STATUS.RESUME
    -                HOST_RESUME: u1,
    -                ///  Host: raised every time the host sends a SOF (Start of Frame). Cleared by reading SOF_RD
    -                HOST_SOF: u1,
    -                ///  Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by writing to this bit.
    -                TRANS_COMPLETE: u1,
    -                ///  Raised when any bit in BUFF_STATUS is set. Clear by clearing all bits in BUFF_STATUS.
    -                BUFF_STATUS: u1,
    -                ///  Source: SIE_STATUS.DATA_SEQ_ERROR
    -                ERROR_DATA_SEQ: u1,
    -                ///  Source: SIE_STATUS.RX_TIMEOUT
    -                ERROR_RX_TIMEOUT: u1,
    -                ///  Source: SIE_STATUS.RX_OVERFLOW
    -                ERROR_RX_OVERFLOW: u1,
    -                ///  Source: SIE_STATUS.BIT_STUFF_ERROR
    -                ERROR_BIT_STUFF: u1,
    -                ///  Source: SIE_STATUS.CRC_ERROR
    -                ERROR_CRC: u1,
    -                ///  Source: SIE_STATUS.STALL_REC
    -                STALL: u1,
    -                ///  Source: SIE_STATUS.VBUS_DETECTED
    -                VBUS_DETECT: u1,
    -                ///  Source: SIE_STATUS.BUS_RESET
    -                BUS_RESET: u1,
    -                ///  Set when the device connection state changes. Cleared by writing to SIE_STATUS.CONNECTED
    -                DEV_CONN_DIS: u1,
    -                ///  Set when the device suspend state changes. Cleared by writing to SIE_STATUS.SUSPENDED
    -                DEV_SUSPEND: u1,
    -                ///  Set when the device receives a resume from the host. Cleared by writing to SIE_STATUS.RESUME
    -                DEV_RESUME_FROM_HOST: u1,
    -                ///  Device. Source: SIE_STATUS.SETUP_REC
    -                SETUP_REQ: u1,
    -                ///  Set every time the device receives a SOF (Start of Frame) packet. Cleared by reading SOF_RD
    -                DEV_SOF: u1,
    -                ///  Raised when any bit in ABORT_DONE is set. Clear by clearing all bits in ABORT_DONE.
    -                ABORT_DONE: u1,
    -                ///  Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by clearing all bits in EP_STATUS_STALL_NAK.
    -                EP_STALL_NAK: u1,
    -                padding: u12,
    -            }),
    -            ///  Interrupt Force
    -            INTF: mmio.Mmio(packed struct(u32) {
    -                ///  Host: raised when a device is connected or disconnected (i.e. when SIE_STATUS.SPEED changes). Cleared by writing to SIE_STATUS.SPEED
    -                HOST_CONN_DIS: u1,
    -                ///  Host: raised when a device wakes up the host. Cleared by writing to SIE_STATUS.RESUME
    -                HOST_RESUME: u1,
    -                ///  Host: raised every time the host sends a SOF (Start of Frame). Cleared by reading SOF_RD
    -                HOST_SOF: u1,
    -                ///  Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by writing to this bit.
    -                TRANS_COMPLETE: u1,
    -                ///  Raised when any bit in BUFF_STATUS is set. Clear by clearing all bits in BUFF_STATUS.
    -                BUFF_STATUS: u1,
    -                ///  Source: SIE_STATUS.DATA_SEQ_ERROR
    -                ERROR_DATA_SEQ: u1,
    -                ///  Source: SIE_STATUS.RX_TIMEOUT
    -                ERROR_RX_TIMEOUT: u1,
    -                ///  Source: SIE_STATUS.RX_OVERFLOW
    -                ERROR_RX_OVERFLOW: u1,
    -                ///  Source: SIE_STATUS.BIT_STUFF_ERROR
    -                ERROR_BIT_STUFF: u1,
    -                ///  Source: SIE_STATUS.CRC_ERROR
    -                ERROR_CRC: u1,
    -                ///  Source: SIE_STATUS.STALL_REC
    -                STALL: u1,
    -                ///  Source: SIE_STATUS.VBUS_DETECTED
    -                VBUS_DETECT: u1,
    -                ///  Source: SIE_STATUS.BUS_RESET
    -                BUS_RESET: u1,
    -                ///  Set when the device connection state changes. Cleared by writing to SIE_STATUS.CONNECTED
    -                DEV_CONN_DIS: u1,
    -                ///  Set when the device suspend state changes. Cleared by writing to SIE_STATUS.SUSPENDED
    -                DEV_SUSPEND: u1,
    -                ///  Set when the device receives a resume from the host. Cleared by writing to SIE_STATUS.RESUME
    -                DEV_RESUME_FROM_HOST: u1,
    -                ///  Device. Source: SIE_STATUS.SETUP_REC
    -                SETUP_REQ: u1,
    -                ///  Set every time the device receives a SOF (Start of Frame) packet. Cleared by reading SOF_RD
    -                DEV_SOF: u1,
    -                ///  Raised when any bit in ABORT_DONE is set. Clear by clearing all bits in ABORT_DONE.
    -                ABORT_DONE: u1,
    -                ///  Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by clearing all bits in EP_STATUS_STALL_NAK.
    -                EP_STALL_NAK: u1,
    -                padding: u12,
    -            }),
    -            ///  Interrupt status after masking & forcing
    -            INTS: mmio.Mmio(packed struct(u32) {
    -                ///  Host: raised when a device is connected or disconnected (i.e. when SIE_STATUS.SPEED changes). Cleared by writing to SIE_STATUS.SPEED
    -                HOST_CONN_DIS: u1,
    -                ///  Host: raised when a device wakes up the host. Cleared by writing to SIE_STATUS.RESUME
    -                HOST_RESUME: u1,
    -                ///  Host: raised every time the host sends a SOF (Start of Frame). Cleared by reading SOF_RD
    -                HOST_SOF: u1,
    -                ///  Raised every time SIE_STATUS.TRANS_COMPLETE is set. Clear by writing to this bit.
    -                TRANS_COMPLETE: u1,
    -                ///  Raised when any bit in BUFF_STATUS is set. Clear by clearing all bits in BUFF_STATUS.
    -                BUFF_STATUS: u1,
    -                ///  Source: SIE_STATUS.DATA_SEQ_ERROR
    -                ERROR_DATA_SEQ: u1,
    -                ///  Source: SIE_STATUS.RX_TIMEOUT
    -                ERROR_RX_TIMEOUT: u1,
    -                ///  Source: SIE_STATUS.RX_OVERFLOW
    -                ERROR_RX_OVERFLOW: u1,
    -                ///  Source: SIE_STATUS.BIT_STUFF_ERROR
    -                ERROR_BIT_STUFF: u1,
    -                ///  Source: SIE_STATUS.CRC_ERROR
    -                ERROR_CRC: u1,
    -                ///  Source: SIE_STATUS.STALL_REC
    -                STALL: u1,
    -                ///  Source: SIE_STATUS.VBUS_DETECTED
    -                VBUS_DETECT: u1,
    -                ///  Source: SIE_STATUS.BUS_RESET
    -                BUS_RESET: u1,
    -                ///  Set when the device connection state changes. Cleared by writing to SIE_STATUS.CONNECTED
    -                DEV_CONN_DIS: u1,
    -                ///  Set when the device suspend state changes. Cleared by writing to SIE_STATUS.SUSPENDED
    -                DEV_SUSPEND: u1,
    -                ///  Set when the device receives a resume from the host. Cleared by writing to SIE_STATUS.RESUME
    -                DEV_RESUME_FROM_HOST: u1,
    -                ///  Device. Source: SIE_STATUS.SETUP_REC
    -                SETUP_REQ: u1,
    -                ///  Set every time the device receives a SOF (Start of Frame) packet. Cleared by reading SOF_RD
    -                DEV_SOF: u1,
    -                ///  Raised when any bit in ABORT_DONE is set. Clear by clearing all bits in ABORT_DONE.
    -                ABORT_DONE: u1,
    -                ///  Raised when any bit in EP_STATUS_STALL_NAK is set. Clear by clearing all bits in EP_STATUS_STALL_NAK.
    -                EP_STALL_NAK: u1,
    -                padding: u12,
    -            }),
    -        };
    -
    -        ///  DW_apb_i2c address block
    -        ///  List of configuration constants for the Synopsys I2C hardware (you may see references to these in I2C register header; these are *fixed* values, set at hardware design time):
    -        ///  IC_ULTRA_FAST_MODE ................ 0x0
    -        ///  IC_UFM_TBUF_CNT_DEFAULT ........... 0x8
    -        ///  IC_UFM_SCL_LOW_COUNT .............. 0x0008
    -        ///  IC_UFM_SCL_HIGH_COUNT ............. 0x0006
    -        ///  IC_TX_TL .......................... 0x0
    -        ///  IC_TX_CMD_BLOCK ................... 0x1
    -        ///  IC_HAS_DMA ........................ 0x1
    -        ///  IC_HAS_ASYNC_FIFO ................. 0x0
    -        ///  IC_SMBUS_ARP ...................... 0x0
    -        ///  IC_FIRST_DATA_BYTE_STATUS ......... 0x1
    -        ///  IC_INTR_IO ........................ 0x1
    -        ///  IC_MASTER_MODE .................... 0x1
    -        ///  IC_DEFAULT_ACK_GENERAL_CALL ....... 0x1
    -        ///  IC_INTR_POL ....................... 0x1
    -        ///  IC_OPTIONAL_SAR ................... 0x0
    -        ///  IC_DEFAULT_TAR_SLAVE_ADDR ......... 0x055
    -        ///  IC_DEFAULT_SLAVE_ADDR ............. 0x055
    -        ///  IC_DEFAULT_HS_SPKLEN .............. 0x1
    -        ///  IC_FS_SCL_HIGH_COUNT .............. 0x0006
    -        ///  IC_HS_SCL_LOW_COUNT ............... 0x0008
    -        ///  IC_DEVICE_ID_VALUE ................ 0x0
    -        ///  IC_10BITADDR_MASTER ............... 0x0
    -        ///  IC_CLK_FREQ_OPTIMIZATION .......... 0x0
    -        ///  IC_DEFAULT_FS_SPKLEN .............. 0x7
    -        ///  IC_ADD_ENCODED_PARAMS ............. 0x0
    -        ///  IC_DEFAULT_SDA_HOLD ............... 0x000001
    -        ///  IC_DEFAULT_SDA_SETUP .............. 0x64
    -        ///  IC_AVOID_RX_FIFO_FLUSH_ON_TX_ABRT . 0x0
    -        ///  IC_CLOCK_PERIOD ................... 100
    -        ///  IC_EMPTYFIFO_HOLD_MASTER_EN ....... 1
    -        ///  IC_RESTART_EN ..................... 0x1
    -        ///  IC_TX_CMD_BLOCK_DEFAULT ........... 0x0
    -        ///  IC_BUS_CLEAR_FEATURE .............. 0x0
    -        ///  IC_CAP_LOADING .................... 100
    -        ///  IC_FS_SCL_LOW_COUNT ............... 0x000d
    -        ///  APB_DATA_WIDTH .................... 32
    -        ///  IC_SDA_STUCK_TIMEOUT_DEFAULT ...... 0xffffffff
    -        ///  IC_SLV_DATA_NACK_ONLY ............. 0x1
    -        ///  IC_10BITADDR_SLAVE ................ 0x0
    -        ///  IC_CLK_TYPE ....................... 0x0
    -        ///  IC_SMBUS_UDID_MSB ................. 0x0
    -        ///  IC_SMBUS_SUSPEND_ALERT ............ 0x0
    -        ///  IC_HS_SCL_HIGH_COUNT .............. 0x0006
    -        ///  IC_SLV_RESTART_DET_EN ............. 0x1
    -        ///  IC_SMBUS .......................... 0x0
    -        ///  IC_OPTIONAL_SAR_DEFAULT ........... 0x0
    -        ///  IC_PERSISTANT_SLV_ADDR_DEFAULT .... 0x0
    -        ///  IC_USE_COUNTS ..................... 0x0
    -        ///  IC_RX_BUFFER_DEPTH ................ 16
    -        ///  IC_SCL_STUCK_TIMEOUT_DEFAULT ...... 0xffffffff
    -        ///  IC_RX_FULL_HLD_BUS_EN ............. 0x1
    -        ///  IC_SLAVE_DISABLE .................. 0x1
    -        ///  IC_RX_TL .......................... 0x0
    -        ///  IC_DEVICE_ID ...................... 0x0
    -        ///  IC_HC_COUNT_VALUES ................ 0x0
    -        ///  I2C_DYNAMIC_TAR_UPDATE ............ 0
    -        ///  IC_SMBUS_CLK_LOW_MEXT_DEFAULT ..... 0xffffffff
    -        ///  IC_SMBUS_CLK_LOW_SEXT_DEFAULT ..... 0xffffffff
    -        ///  IC_HS_MASTER_CODE ................. 0x1
    -        ///  IC_SMBUS_RST_IDLE_CNT_DEFAULT ..... 0xffff
    -        ///  IC_SMBUS_UDID_LSB_DEFAULT ......... 0xffffffff
    -        ///  IC_SS_SCL_HIGH_COUNT .............. 0x0028
    -        ///  IC_SS_SCL_LOW_COUNT ............... 0x002f
    -        ///  IC_MAX_SPEED_MODE ................. 0x2
    -        ///  IC_STAT_FOR_CLK_STRETCH ........... 0x0
    -        ///  IC_STOP_DET_IF_MASTER_ACTIVE ...... 0x0
    -        ///  IC_DEFAULT_UFM_SPKLEN ............. 0x1
    -        ///  IC_TX_BUFFER_DEPTH ................ 16
    -        pub const I2C0 = extern struct {
    -            ///  I2C Control Register. This register can be written only when the DW_apb_i2c is disabled, which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect.
    -            ///  Read/Write Access: - bit 10 is read only. - bit 11 is read only - bit 16 is read only - bit 17 is read only - bits 18 and 19 are read only.
    -            IC_CON: mmio.Mmio(packed struct(u32) {
    -                ///  This bit controls whether the DW_apb_i2c master is enabled.
    -                ///  NOTE: Software should ensure that if this bit is written with '1' then bit 6 should also be written with a '1'.
    -                MASTER_MODE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Master mode is disabled
    -                        DISABLED = 0x0,
    -                        ///  Master mode is enabled
    -                        ENABLED = 0x1,
    -                    },
    -                },
    -                ///  These bits control at which speed the DW_apb_i2c operates; its setting is relevant only if one is operating the DW_apb_i2c in master mode. Hardware protects against illegal values being programmed by software. These bits must be programmed appropriately for slave mode also, as it is used to capture correct value of spike filter as per the speed mode.
    -                ///  This register should be programmed only with a value in the range of 1 to IC_MAX_SPEED_MODE; otherwise, hardware updates this register with the value of IC_MAX_SPEED_MODE.
    -                ///  1: standard mode (100 kbit/s)
    -                ///  2: fast mode (<=400 kbit/s) or fast mode plus (<=1000Kbit/s)
    -                ///  3: high speed mode (3.4 Mbit/s)
    -                ///  Note: This field is not applicable when IC_ULTRA_FAST_MODE=1
    -                SPEED: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Standard Speed mode of operation
    -                        STANDARD = 0x1,
    -                        ///  Fast or Fast Plus mode of operation
    -                        FAST = 0x2,
    -                        ///  High Speed mode of operation
    -                        HIGH = 0x3,
    -                        _,
    -                    },
    -                },
    -                ///  When acting as a slave, this bit controls whether the DW_apb_i2c responds to 7- or 10-bit addresses. - 0: 7-bit addressing. The DW_apb_i2c ignores transactions that involve 10-bit addressing; for 7-bit addressing, only the lower 7 bits of the IC_SAR register are compared. - 1: 10-bit addressing. The DW_apb_i2c responds to only 10-bit addressing transfers that match the full 10 bits of the IC_SAR register.
    -                IC_10BITADDR_SLAVE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Slave 7Bit addressing
    -                        ADDR_7BITS = 0x0,
    -                        ///  Slave 10Bit addressing
    -                        ADDR_10BITS = 0x1,
    -                    },
    -                },
    -                ///  Controls whether the DW_apb_i2c starts its transfers in 7- or 10-bit addressing mode when acting as a master. - 0: 7-bit addressing - 1: 10-bit addressing
    -                IC_10BITADDR_MASTER: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Master 7Bit addressing mode
    -                        ADDR_7BITS = 0x0,
    -                        ///  Master 10Bit addressing mode
    -                        ADDR_10BITS = 0x1,
    -                    },
    -                },
    -                ///  Determines whether RESTART conditions may be sent when acting as a master. Some older slaves do not support handling RESTART conditions; however, RESTART conditions are used in several DW_apb_i2c operations. When RESTART is disabled, the master is prohibited from performing the following functions: - Sending a START BYTE - Performing any high-speed mode operation - High-speed mode operation - Performing direction changes in combined format mode - Performing a read operation with a 10-bit address By replacing RESTART condition followed by a STOP and a subsequent START condition, split operations are broken down into multiple DW_apb_i2c transfers. If the above operations are performed, it will result in setting bit 6 (TX_ABRT) of the IC_RAW_INTR_STAT register.
    -                ///  Reset value: ENABLED
    -                IC_RESTART_EN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Master restart disabled
    -                        DISABLED = 0x0,
    -                        ///  Master restart enabled
    -                        ENABLED = 0x1,
    -                    },
    -                },
    -                ///  This bit controls whether I2C has its slave disabled, which means once the presetn signal is applied, then this bit is set and the slave is disabled.
    -                ///  If this bit is set (slave is disabled), DW_apb_i2c functions only as a master and does not perform any action that requires a slave.
    -                ///  NOTE: Software should ensure that if this bit is written with 0, then bit 0 should also be written with a 0.
    -                IC_SLAVE_DISABLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Slave mode is enabled
    -                        SLAVE_ENABLED = 0x0,
    -                        ///  Slave mode is disabled
    -                        SLAVE_DISABLED = 0x1,
    -                    },
    -                },
    -                ///  In slave mode: - 1'b1: issues the STOP_DET interrupt only when it is addressed. - 1'b0: issues the STOP_DET irrespective of whether it's addressed or not. Reset value: 0x0
    -                ///  NOTE: During a general call address, this slave does not issue the STOP_DET interrupt if STOP_DET_IF_ADDRESSED = 1'b1, even if the slave responds to the general call address by generating ACK. The STOP_DET interrupt is generated only when the transmitted address matches the slave address (SAR).
    -                STOP_DET_IFADDRESSED: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  slave issues STOP_DET intr always
    -                        DISABLED = 0x0,
    -                        ///  slave issues STOP_DET intr only if addressed
    -                        ENABLED = 0x1,
    -                    },
    -                },
    -                ///  This bit controls the generation of the TX_EMPTY interrupt, as described in the IC_RAW_INTR_STAT register.
    -                ///  Reset value: 0x0.
    -                TX_EMPTY_CTRL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Default behaviour of TX_EMPTY interrupt
    -                        DISABLED = 0x0,
    -                        ///  Controlled generation of TX_EMPTY interrupt
    -                        ENABLED = 0x1,
    -                    },
    -                },
    -                ///  This bit controls whether DW_apb_i2c should hold the bus when the Rx FIFO is physically full to its RX_BUFFER_DEPTH, as described in the IC_RX_FULL_HLD_BUS_EN parameter.
    -                ///  Reset value: 0x0.
    -                RX_FIFO_FULL_HLD_CTRL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Overflow when RX_FIFO is full
    -                        DISABLED = 0x0,
    -                        ///  Hold bus when RX_FIFO is full
    -                        ENABLED = 0x1,
    -                    },
    -                },
    -                ///  Master issues the STOP_DET interrupt irrespective of whether master is active or not
    -                STOP_DET_IF_MASTER_ACTIVE: u1,
    -                padding: u21,
    -            }),
    -            ///  I2C Target Address Register
    -            ///  This register is 12 bits wide, and bits 31:12 are reserved. This register can be written to only when IC_ENABLE[0] is set to 0.
    -            ///  Note: If the software or application is aware that the DW_apb_i2c is not using the TAR address for the pending commands in the Tx FIFO, then it is possible to update the TAR address even while the Tx FIFO has entries (IC_STATUS[2]= 0). - It is not necessary to perform any write to this register if DW_apb_i2c is enabled as an I2C slave only.
    -            IC_TAR: mmio.Mmio(packed struct(u32) {
    -                ///  This is the target address for any master transaction. When transmitting a General Call, these bits are ignored. To generate a START BYTE, the CPU needs to write only once into these bits.
    -                ///  If the IC_TAR and IC_SAR are the same, loopback exists but the FIFOs are shared between master and slave, so full loopback is not feasible. Only one direction loopback mode is supported (simplex), not duplex. A master cannot transmit to itself; it can transmit to only a slave.
    -                IC_TAR: u10,
    -                ///  If bit 11 (SPECIAL) is set to 1 and bit 13(Device-ID) is set to 0, then this bit indicates whether a General Call or START byte command is to be performed by the DW_apb_i2c. - 0: General Call Address - after issuing a General Call, only writes may be performed. Attempting to issue a read command results in setting bit 6 (TX_ABRT) of the IC_RAW_INTR_STAT register. The DW_apb_i2c remains in General Call mode until the SPECIAL bit value (bit 11) is cleared. - 1: START BYTE Reset value: 0x0
    -                GC_OR_START: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  GENERAL_CALL byte transmission
    -                        GENERAL_CALL = 0x0,
    -                        ///  START byte transmission
    -                        START_BYTE = 0x1,
    -                    },
    -                },
    -                ///  This bit indicates whether software performs a Device-ID or General Call or START BYTE command. - 0: ignore bit 10 GC_OR_START and use IC_TAR normally - 1: perform special I2C command as specified in Device_ID or GC_OR_START bit Reset value: 0x0
    -                SPECIAL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Disables programming of GENERAL_CALL or START_BYTE transmission
    -                        DISABLED = 0x0,
    -                        ///  Enables programming of GENERAL_CALL or START_BYTE transmission
    -                        ENABLED = 0x1,
    -                    },
    -                },
    -                padding: u20,
    -            }),
    -            ///  I2C Slave Address Register
    -            IC_SAR: mmio.Mmio(packed struct(u32) {
    -                ///  The IC_SAR holds the slave address when the I2C is operating as a slave. For 7-bit addressing, only IC_SAR[6:0] is used.
    -                ///  This register can be written only when the I2C interface is disabled, which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect.
    -                ///  Note: The default values cannot be any of the reserved address locations: that is, 0x00 to 0x07, or 0x78 to 0x7f. The correct operation of the device is not guaranteed if you program the IC_SAR or IC_TAR to a reserved value. Refer to <> for a complete list of these reserved values.
    -                IC_SAR: u10,
    -                padding: u22,
    -            }),
    -            reserved16: [4]u8,
    -            ///  I2C Rx/Tx Data Buffer and Command Register; this is the register the CPU writes to when filling the TX FIFO and the CPU reads from when retrieving bytes from RX FIFO.
    -            ///  The size of the register changes as follows:
    -            ///  Write: - 11 bits when IC_EMPTYFIFO_HOLD_MASTER_EN=1 - 9 bits when IC_EMPTYFIFO_HOLD_MASTER_EN=0 Read: - 12 bits when IC_FIRST_DATA_BYTE_STATUS = 1 - 8 bits when IC_FIRST_DATA_BYTE_STATUS = 0 Note: In order for the DW_apb_i2c to continue acknowledging reads, a read command should be written for every byte that is to be received; otherwise the DW_apb_i2c will stop acknowledging.
    -            IC_DATA_CMD: mmio.Mmio(packed struct(u32) {
    -                ///  This register contains the data to be transmitted or received on the I2C bus. If you are writing to this register and want to perform a read, bits 7:0 (DAT) are ignored by the DW_apb_i2c. However, when you read this register, these bits return the value of data received on the DW_apb_i2c interface.
    -                ///  Reset value: 0x0
    -                DAT: u8,
    -                ///  This bit controls whether a read or a write is performed. This bit does not control the direction when the DW_apb_i2con acts as a slave. It controls only the direction when it acts as a master.
    -                ///  When a command is entered in the TX FIFO, this bit distinguishes the write and read commands. In slave-receiver mode, this bit is a 'don't care' because writes to this register are not required. In slave-transmitter mode, a '0' indicates that the data in IC_DATA_CMD is to be transmitted.
    -                ///  When programming this bit, you should remember the following: attempting to perform a read operation after a General Call command has been sent results in a TX_ABRT interrupt (bit 6 of the IC_RAW_INTR_STAT register), unless bit 11 (SPECIAL) in the IC_TAR register has been cleared. If a '1' is written to this bit after receiving a RD_REQ interrupt, then a TX_ABRT interrupt occurs.
    -                ///  Reset value: 0x0
    -                CMD: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Master Write Command
    -                        WRITE = 0x0,
    -                        ///  Master Read Command
    -                        READ = 0x1,
    -                    },
    -                },
    -                ///  This bit controls whether a STOP is issued after the byte is sent or received.
    -                ///  - 1 - STOP is issued after this byte, regardless of whether or not the Tx FIFO is empty. If the Tx FIFO is not empty, the master immediately tries to start a new transfer by issuing a START and arbitrating for the bus. - 0 - STOP is not issued after this byte, regardless of whether or not the Tx FIFO is empty. If the Tx FIFO is not empty, the master continues the current transfer by sending/receiving data bytes according to the value of the CMD bit. If the Tx FIFO is empty, the master holds the SCL line low and stalls the bus until a new command is available in the Tx FIFO. Reset value: 0x0
    -                STOP: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Don't Issue STOP after this command
    -                        DISABLE = 0x0,
    -                        ///  Issue STOP after this command
    -                        ENABLE = 0x1,
    -                    },
    -                },
    -                ///  This bit controls whether a RESTART is issued before the byte is sent or received.
    -                ///  1 - If IC_RESTART_EN is 1, a RESTART is issued before the data is sent/received (according to the value of CMD), regardless of whether or not the transfer direction is changing from the previous command; if IC_RESTART_EN is 0, a STOP followed by a START is issued instead.
    -                ///  0 - If IC_RESTART_EN is 1, a RESTART is issued only if the transfer direction is changing from the previous command; if IC_RESTART_EN is 0, a STOP followed by a START is issued instead.
    -                ///  Reset value: 0x0
    -                RESTART: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Don't Issue RESTART before this command
    -                        DISABLE = 0x0,
    -                        ///  Issue RESTART before this command
    -                        ENABLE = 0x1,
    -                    },
    -                },
    -                ///  Indicates the first data byte received after the address phase for receive transfer in Master receiver or Slave receiver mode.
    -                ///  Reset value : 0x0
    -                ///  NOTE: In case of APB_DATA_WIDTH=8,
    -                ///  1. The user has to perform two APB Reads to IC_DATA_CMD in order to get status on 11 bit.
    -                ///  2. In order to read the 11 bit, the user has to perform the first data byte read [7:0] (offset 0x10) and then perform the second read [15:8] (offset 0x11) in order to know the status of 11 bit (whether the data received in previous read is a first data byte or not).
    -                ///  3. The 11th bit is an optional read field, user can ignore 2nd byte read [15:8] (offset 0x11) if not interested in FIRST_DATA_BYTE status.
    -                FIRST_DATA_BYTE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Sequential data byte received
    -                        INACTIVE = 0x0,
    -                        ///  Non sequential data byte received
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                padding: u20,
    -            }),
    -            ///  Standard Speed I2C Clock SCL High Count Register
    -            IC_SS_SCL_HCNT: mmio.Mmio(packed struct(u32) {
    -                ///  This register must be set before any I2C bus transaction can take place to ensure proper I/O timing. This register sets the SCL clock high-period count for standard speed. For more information, refer to 'IC_CLK Frequency Configuration'.
    -                ///  This register can be written only when the I2C interface is disabled which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect.
    -                ///  The minimum valid value is 6; hardware prevents values less than this being written, and if attempted results in 6 being set. For designs with APB_DATA_WIDTH = 8, the order of programming is important to ensure the correct operation of the DW_apb_i2c. The lower byte must be programmed first. Then the upper byte is programmed.
    -                ///  NOTE: This register must not be programmed to a value higher than 65525, because DW_apb_i2c uses a 16-bit counter to flag an I2C bus idle condition when this counter reaches a value of IC_SS_SCL_HCNT + 10.
    -                IC_SS_SCL_HCNT: u16,
    -                padding: u16,
    -            }),
    -            ///  Standard Speed I2C Clock SCL Low Count Register
    -            IC_SS_SCL_LCNT: mmio.Mmio(packed struct(u32) {
    -                ///  This register must be set before any I2C bus transaction can take place to ensure proper I/O timing. This register sets the SCL clock low period count for standard speed. For more information, refer to 'IC_CLK Frequency Configuration'
    -                ///  This register can be written only when the I2C interface is disabled which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect.
    -                ///  The minimum valid value is 8; hardware prevents values less than this being written, and if attempted, results in 8 being set. For designs with APB_DATA_WIDTH = 8, the order of programming is important to ensure the correct operation of DW_apb_i2c. The lower byte must be programmed first, and then the upper byte is programmed.
    -                IC_SS_SCL_LCNT: u16,
    -                padding: u16,
    -            }),
    -            ///  Fast Mode or Fast Mode Plus I2C Clock SCL High Count Register
    -            IC_FS_SCL_HCNT: mmio.Mmio(packed struct(u32) {
    -                ///  This register must be set before any I2C bus transaction can take place to ensure proper I/O timing. This register sets the SCL clock high-period count for fast mode or fast mode plus. It is used in high-speed mode to send the Master Code and START BYTE or General CALL. For more information, refer to 'IC_CLK Frequency Configuration'.
    -                ///  This register goes away and becomes read-only returning 0s if IC_MAX_SPEED_MODE = standard. This register can be written only when the I2C interface is disabled, which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect.
    -                ///  The minimum valid value is 6; hardware prevents values less than this being written, and if attempted results in 6 being set. For designs with APB_DATA_WIDTH == 8 the order of programming is important to ensure the correct operation of the DW_apb_i2c. The lower byte must be programmed first. Then the upper byte is programmed.
    -                IC_FS_SCL_HCNT: u16,
    -                padding: u16,
    -            }),
    -            ///  Fast Mode or Fast Mode Plus I2C Clock SCL Low Count Register
    -            IC_FS_SCL_LCNT: mmio.Mmio(packed struct(u32) {
    -                ///  This register must be set before any I2C bus transaction can take place to ensure proper I/O timing. This register sets the SCL clock low period count for fast speed. It is used in high-speed mode to send the Master Code and START BYTE or General CALL. For more information, refer to 'IC_CLK Frequency Configuration'.
    -                ///  This register goes away and becomes read-only returning 0s if IC_MAX_SPEED_MODE = standard.
    -                ///  This register can be written only when the I2C interface is disabled, which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect.
    -                ///  The minimum valid value is 8; hardware prevents values less than this being written, and if attempted results in 8 being set. For designs with APB_DATA_WIDTH = 8 the order of programming is important to ensure the correct operation of the DW_apb_i2c. The lower byte must be programmed first. Then the upper byte is programmed. If the value is less than 8 then the count value gets changed to 8.
    -                IC_FS_SCL_LCNT: u16,
    -                padding: u16,
    -            }),
    -            reserved44: [8]u8,
    -            ///  I2C Interrupt Status Register
    -            ///  Each bit in this register has a corresponding mask bit in the IC_INTR_MASK register. These bits are cleared by reading the matching interrupt clear register. The unmasked raw versions of these bits are available in the IC_RAW_INTR_STAT register.
    -            IC_INTR_STAT: mmio.Mmio(packed struct(u32) {
    -                ///  See IC_RAW_INTR_STAT for a detailed description of R_RX_UNDER bit.
    -                ///  Reset value: 0x0
    -                R_RX_UNDER: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RX_UNDER interrupt is inactive
    -                        INACTIVE = 0x0,
    -                        ///  RX_UNDER interrupt is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  See IC_RAW_INTR_STAT for a detailed description of R_RX_OVER bit.
    -                ///  Reset value: 0x0
    -                R_RX_OVER: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  R_RX_OVER interrupt is inactive
    -                        INACTIVE = 0x0,
    -                        ///  R_RX_OVER interrupt is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  See IC_RAW_INTR_STAT for a detailed description of R_RX_FULL bit.
    -                ///  Reset value: 0x0
    -                R_RX_FULL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  R_RX_FULL interrupt is inactive
    -                        INACTIVE = 0x0,
    -                        ///  R_RX_FULL interrupt is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  See IC_RAW_INTR_STAT for a detailed description of R_TX_OVER bit.
    -                ///  Reset value: 0x0
    -                R_TX_OVER: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  R_TX_OVER interrupt is inactive
    -                        INACTIVE = 0x0,
    -                        ///  R_TX_OVER interrupt is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  See IC_RAW_INTR_STAT for a detailed description of R_TX_EMPTY bit.
    -                ///  Reset value: 0x0
    -                R_TX_EMPTY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  R_TX_EMPTY interrupt is inactive
    -                        INACTIVE = 0x0,
    -                        ///  R_TX_EMPTY interrupt is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  See IC_RAW_INTR_STAT for a detailed description of R_RD_REQ bit.
    -                ///  Reset value: 0x0
    -                R_RD_REQ: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  R_RD_REQ interrupt is inactive
    -                        INACTIVE = 0x0,
    -                        ///  R_RD_REQ interrupt is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  See IC_RAW_INTR_STAT for a detailed description of R_TX_ABRT bit.
    -                ///  Reset value: 0x0
    -                R_TX_ABRT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  R_TX_ABRT interrupt is inactive
    -                        INACTIVE = 0x0,
    -                        ///  R_TX_ABRT interrupt is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  See IC_RAW_INTR_STAT for a detailed description of R_RX_DONE bit.
    -                ///  Reset value: 0x0
    -                R_RX_DONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  R_RX_DONE interrupt is inactive
    -                        INACTIVE = 0x0,
    -                        ///  R_RX_DONE interrupt is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  See IC_RAW_INTR_STAT for a detailed description of R_ACTIVITY bit.
    -                ///  Reset value: 0x0
    -                R_ACTIVITY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  R_ACTIVITY interrupt is inactive
    -                        INACTIVE = 0x0,
    -                        ///  R_ACTIVITY interrupt is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  See IC_RAW_INTR_STAT for a detailed description of R_STOP_DET bit.
    -                ///  Reset value: 0x0
    -                R_STOP_DET: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  R_STOP_DET interrupt is inactive
    -                        INACTIVE = 0x0,
    -                        ///  R_STOP_DET interrupt is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  See IC_RAW_INTR_STAT for a detailed description of R_START_DET bit.
    -                ///  Reset value: 0x0
    -                R_START_DET: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  R_START_DET interrupt is inactive
    -                        INACTIVE = 0x0,
    -                        ///  R_START_DET interrupt is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  See IC_RAW_INTR_STAT for a detailed description of R_GEN_CALL bit.
    -                ///  Reset value: 0x0
    -                R_GEN_CALL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  R_GEN_CALL interrupt is inactive
    -                        INACTIVE = 0x0,
    -                        ///  R_GEN_CALL interrupt is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  See IC_RAW_INTR_STAT for a detailed description of R_RESTART_DET bit.
    -                ///  Reset value: 0x0
    -                R_RESTART_DET: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  R_RESTART_DET interrupt is inactive
    -                        INACTIVE = 0x0,
    -                        ///  R_RESTART_DET interrupt is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                padding: u19,
    -            }),
    -            ///  I2C Interrupt Mask Register.
    -            ///  These bits mask their corresponding interrupt status bits. This register is active low; a value of 0 masks the interrupt, whereas a value of 1 unmasks the interrupt.
    -            IC_INTR_MASK: mmio.Mmio(packed struct(u32) {
    -                ///  This bit masks the R_RX_UNDER interrupt in IC_INTR_STAT register.
    -                ///  Reset value: 0x1
    -                M_RX_UNDER: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RX_UNDER interrupt is masked
    -                        ENABLED = 0x0,
    -                        ///  RX_UNDER interrupt is unmasked
    -                        DISABLED = 0x1,
    -                    },
    -                },
    -                ///  This bit masks the R_RX_OVER interrupt in IC_INTR_STAT register.
    -                ///  Reset value: 0x1
    -                M_RX_OVER: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RX_OVER interrupt is masked
    -                        ENABLED = 0x0,
    -                        ///  RX_OVER interrupt is unmasked
    -                        DISABLED = 0x1,
    -                    },
    -                },
    -                ///  This bit masks the R_RX_FULL interrupt in IC_INTR_STAT register.
    -                ///  Reset value: 0x1
    -                M_RX_FULL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RX_FULL interrupt is masked
    -                        ENABLED = 0x0,
    -                        ///  RX_FULL interrupt is unmasked
    -                        DISABLED = 0x1,
    -                    },
    -                },
    -                ///  This bit masks the R_TX_OVER interrupt in IC_INTR_STAT register.
    -                ///  Reset value: 0x1
    -                M_TX_OVER: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  TX_OVER interrupt is masked
    -                        ENABLED = 0x0,
    -                        ///  TX_OVER interrupt is unmasked
    -                        DISABLED = 0x1,
    -                    },
    -                },
    -                ///  This bit masks the R_TX_EMPTY interrupt in IC_INTR_STAT register.
    -                ///  Reset value: 0x1
    -                M_TX_EMPTY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  TX_EMPTY interrupt is masked
    -                        ENABLED = 0x0,
    -                        ///  TX_EMPTY interrupt is unmasked
    -                        DISABLED = 0x1,
    -                    },
    -                },
    -                ///  This bit masks the R_RD_REQ interrupt in IC_INTR_STAT register.
    -                ///  Reset value: 0x1
    -                M_RD_REQ: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RD_REQ interrupt is masked
    -                        ENABLED = 0x0,
    -                        ///  RD_REQ interrupt is unmasked
    -                        DISABLED = 0x1,
    -                    },
    -                },
    -                ///  This bit masks the R_TX_ABRT interrupt in IC_INTR_STAT register.
    -                ///  Reset value: 0x1
    -                M_TX_ABRT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  TX_ABORT interrupt is masked
    -                        ENABLED = 0x0,
    -                        ///  TX_ABORT interrupt is unmasked
    -                        DISABLED = 0x1,
    -                    },
    -                },
    -                ///  This bit masks the R_RX_DONE interrupt in IC_INTR_STAT register.
    -                ///  Reset value: 0x1
    -                M_RX_DONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RX_DONE interrupt is masked
    -                        ENABLED = 0x0,
    -                        ///  RX_DONE interrupt is unmasked
    -                        DISABLED = 0x1,
    -                    },
    -                },
    -                ///  This bit masks the R_ACTIVITY interrupt in IC_INTR_STAT register.
    -                ///  Reset value: 0x0
    -                M_ACTIVITY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  ACTIVITY interrupt is masked
    -                        ENABLED = 0x0,
    -                        ///  ACTIVITY interrupt is unmasked
    -                        DISABLED = 0x1,
    -                    },
    -                },
    -                ///  This bit masks the R_STOP_DET interrupt in IC_INTR_STAT register.
    -                ///  Reset value: 0x0
    -                M_STOP_DET: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  STOP_DET interrupt is masked
    -                        ENABLED = 0x0,
    -                        ///  STOP_DET interrupt is unmasked
    -                        DISABLED = 0x1,
    -                    },
    -                },
    -                ///  This bit masks the R_START_DET interrupt in IC_INTR_STAT register.
    -                ///  Reset value: 0x0
    -                M_START_DET: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  START_DET interrupt is masked
    -                        ENABLED = 0x0,
    -                        ///  START_DET interrupt is unmasked
    -                        DISABLED = 0x1,
    -                    },
    -                },
    -                ///  This bit masks the R_GEN_CALL interrupt in IC_INTR_STAT register.
    -                ///  Reset value: 0x1
    -                M_GEN_CALL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  GEN_CALL interrupt is masked
    -                        ENABLED = 0x0,
    -                        ///  GEN_CALL interrupt is unmasked
    -                        DISABLED = 0x1,
    -                    },
    -                },
    -                ///  This bit masks the R_RESTART_DET interrupt in IC_INTR_STAT register.
    -                ///  Reset value: 0x0
    -                M_RESTART_DET: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RESTART_DET interrupt is masked
    -                        ENABLED = 0x0,
    -                        ///  RESTART_DET interrupt is unmasked
    -                        DISABLED = 0x1,
    -                    },
    -                },
    -                padding: u19,
    -            }),
    -            ///  I2C Raw Interrupt Status Register
    -            ///  Unlike the IC_INTR_STAT register, these bits are not masked so they always show the true status of the DW_apb_i2c.
    -            IC_RAW_INTR_STAT: mmio.Mmio(packed struct(u32) {
    -                ///  Set if the processor attempts to read the receive buffer when it is empty by reading from the IC_DATA_CMD register. If the module is disabled (IC_ENABLE[0]=0), this bit keeps its level until the master or slave state machines go into idle, and when ic_en goes to 0, this interrupt is cleared.
    -                ///  Reset value: 0x0
    -                RX_UNDER: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RX_UNDER interrupt is inactive
    -                        INACTIVE = 0x0,
    -                        ///  RX_UNDER interrupt is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  Set if the receive buffer is completely filled to IC_RX_BUFFER_DEPTH and an additional byte is received from an external I2C device. The DW_apb_i2c acknowledges this, but any data bytes received after the FIFO is full are lost. If the module is disabled (IC_ENABLE[0]=0), this bit keeps its level until the master or slave state machines go into idle, and when ic_en goes to 0, this interrupt is cleared.
    -                ///  Note: If bit 9 of the IC_CON register (RX_FIFO_FULL_HLD_CTRL) is programmed to HIGH, then the RX_OVER interrupt never occurs, because the Rx FIFO never overflows.
    -                ///  Reset value: 0x0
    -                RX_OVER: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RX_OVER interrupt is inactive
    -                        INACTIVE = 0x0,
    -                        ///  RX_OVER interrupt is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  Set when the receive buffer reaches or goes above the RX_TL threshold in the IC_RX_TL register. It is automatically cleared by hardware when buffer level goes below the threshold. If the module is disabled (IC_ENABLE[0]=0), the RX FIFO is flushed and held in reset; therefore the RX FIFO is not full. So this bit is cleared once the IC_ENABLE bit 0 is programmed with a 0, regardless of the activity that continues.
    -                ///  Reset value: 0x0
    -                RX_FULL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RX_FULL interrupt is inactive
    -                        INACTIVE = 0x0,
    -                        ///  RX_FULL interrupt is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  Set during transmit if the transmit buffer is filled to IC_TX_BUFFER_DEPTH and the processor attempts to issue another I2C command by writing to the IC_DATA_CMD register. When the module is disabled, this bit keeps its level until the master or slave state machines go into idle, and when ic_en goes to 0, this interrupt is cleared.
    -                ///  Reset value: 0x0
    -                TX_OVER: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  TX_OVER interrupt is inactive
    -                        INACTIVE = 0x0,
    -                        ///  TX_OVER interrupt is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  The behavior of the TX_EMPTY interrupt status differs based on the TX_EMPTY_CTRL selection in the IC_CON register. - When TX_EMPTY_CTRL = 0: This bit is set to 1 when the transmit buffer is at or below the threshold value set in the IC_TX_TL register. - When TX_EMPTY_CTRL = 1: This bit is set to 1 when the transmit buffer is at or below the threshold value set in the IC_TX_TL register and the transmission of the address/data from the internal shift register for the most recently popped command is completed. It is automatically cleared by hardware when the buffer level goes above the threshold. When IC_ENABLE[0] is set to 0, the TX FIFO is flushed and held in reset. There the TX FIFO looks like it has no data within it, so this bit is set to 1, provided there is activity in the master or slave state machines. When there is no longer any activity, then with ic_en=0, this bit is set to 0.
    -                ///  Reset value: 0x0.
    -                TX_EMPTY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  TX_EMPTY interrupt is inactive
    -                        INACTIVE = 0x0,
    -                        ///  TX_EMPTY interrupt is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  This bit is set to 1 when DW_apb_i2c is acting as a slave and another I2C master is attempting to read data from DW_apb_i2c. The DW_apb_i2c holds the I2C bus in a wait state (SCL=0) until this interrupt is serviced, which means that the slave has been addressed by a remote master that is asking for data to be transferred. The processor must respond to this interrupt and then write the requested data to the IC_DATA_CMD register. This bit is set to 0 just after the processor reads the IC_CLR_RD_REQ register.
    -                ///  Reset value: 0x0
    -                RD_REQ: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RD_REQ interrupt is inactive
    -                        INACTIVE = 0x0,
    -                        ///  RD_REQ interrupt is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  This bit indicates if DW_apb_i2c, as an I2C transmitter, is unable to complete the intended actions on the contents of the transmit FIFO. This situation can occur both as an I2C master or an I2C slave, and is referred to as a 'transmit abort'. When this bit is set to 1, the IC_TX_ABRT_SOURCE register indicates the reason why the transmit abort takes places.
    -                ///  Note: The DW_apb_i2c flushes/resets/empties the TX_FIFO and RX_FIFO whenever there is a transmit abort caused by any of the events tracked by the IC_TX_ABRT_SOURCE register. The FIFOs remains in this flushed state until the register IC_CLR_TX_ABRT is read. Once this read is performed, the Tx FIFO is then ready to accept more data bytes from the APB interface.
    -                ///  Reset value: 0x0
    -                TX_ABRT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  TX_ABRT interrupt is inactive
    -                        INACTIVE = 0x0,
    -                        ///  TX_ABRT interrupt is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  When the DW_apb_i2c is acting as a slave-transmitter, this bit is set to 1 if the master does not acknowledge a transmitted byte. This occurs on the last byte of the transmission, indicating that the transmission is done.
    -                ///  Reset value: 0x0
    -                RX_DONE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RX_DONE interrupt is inactive
    -                        INACTIVE = 0x0,
    -                        ///  RX_DONE interrupt is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  This bit captures DW_apb_i2c activity and stays set until it is cleared. There are four ways to clear it: - Disabling the DW_apb_i2c - Reading the IC_CLR_ACTIVITY register - Reading the IC_CLR_INTR register - System reset Once this bit is set, it stays set unless one of the four methods is used to clear it. Even if the DW_apb_i2c module is idle, this bit remains set until cleared, indicating that there was activity on the bus.
    -                ///  Reset value: 0x0
    -                ACTIVITY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RAW_INTR_ACTIVITY interrupt is inactive
    -                        INACTIVE = 0x0,
    -                        ///  RAW_INTR_ACTIVITY interrupt is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  Indicates whether a STOP condition has occurred on the I2C interface regardless of whether DW_apb_i2c is operating in slave or master mode.
    -                ///  In Slave Mode: - If IC_CON[7]=1'b1 (STOP_DET_IFADDRESSED), the STOP_DET interrupt will be issued only if slave is addressed. Note: During a general call address, this slave does not issue a STOP_DET interrupt if STOP_DET_IF_ADDRESSED=1'b1, even if the slave responds to the general call address by generating ACK. The STOP_DET interrupt is generated only when the transmitted address matches the slave address (SAR). - If IC_CON[7]=1'b0 (STOP_DET_IFADDRESSED), the STOP_DET interrupt is issued irrespective of whether it is being addressed. In Master Mode: - If IC_CON[10]=1'b1 (STOP_DET_IF_MASTER_ACTIVE),the STOP_DET interrupt will be issued only if Master is active. - If IC_CON[10]=1'b0 (STOP_DET_IFADDRESSED),the STOP_DET interrupt will be issued irrespective of whether master is active or not. Reset value: 0x0
    -                STOP_DET: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  STOP_DET interrupt is inactive
    -                        INACTIVE = 0x0,
    -                        ///  STOP_DET interrupt is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  Indicates whether a START or RESTART condition has occurred on the I2C interface regardless of whether DW_apb_i2c is operating in slave or master mode.
    -                ///  Reset value: 0x0
    -                START_DET: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  START_DET interrupt is inactive
    -                        INACTIVE = 0x0,
    -                        ///  START_DET interrupt is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  Set only when a General Call address is received and it is acknowledged. It stays set until it is cleared either by disabling DW_apb_i2c or when the CPU reads bit 0 of the IC_CLR_GEN_CALL register. DW_apb_i2c stores the received data in the Rx buffer.
    -                ///  Reset value: 0x0
    -                GEN_CALL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  GEN_CALL interrupt is inactive
    -                        INACTIVE = 0x0,
    -                        ///  GEN_CALL interrupt is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  Indicates whether a RESTART condition has occurred on the I2C interface when DW_apb_i2c is operating in Slave mode and the slave is being addressed. Enabled only when IC_SLV_RESTART_DET_EN=1.
    -                ///  Note: However, in high-speed mode or during a START BYTE transfer, the RESTART comes before the address field as per the I2C protocol. In this case, the slave is not the addressed slave when the RESTART is issued, therefore DW_apb_i2c does not generate the RESTART_DET interrupt.
    -                ///  Reset value: 0x0
    -                RESTART_DET: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  RESTART_DET interrupt is inactive
    -                        INACTIVE = 0x0,
    -                        ///  RESTART_DET interrupt is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                padding: u19,
    -            }),
    -            ///  I2C Receive FIFO Threshold Register
    -            IC_RX_TL: mmio.Mmio(packed struct(u32) {
    -                ///  Receive FIFO Threshold Level.
    -                ///  Controls the level of entries (or above) that triggers the RX_FULL interrupt (bit 2 in IC_RAW_INTR_STAT register). The valid range is 0-255, with the additional restriction that hardware does not allow this value to be set to a value larger than the depth of the buffer. If an attempt is made to do that, the actual value set will be the maximum depth of the buffer. A value of 0 sets the threshold for 1 entry, and a value of 255 sets the threshold for 256 entries.
    -                RX_TL: u8,
    -                padding: u24,
    -            }),
    -            ///  I2C Transmit FIFO Threshold Register
    -            IC_TX_TL: mmio.Mmio(packed struct(u32) {
    -                ///  Transmit FIFO Threshold Level.
    -                ///  Controls the level of entries (or below) that trigger the TX_EMPTY interrupt (bit 4 in IC_RAW_INTR_STAT register). The valid range is 0-255, with the additional restriction that it may not be set to value larger than the depth of the buffer. If an attempt is made to do that, the actual value set will be the maximum depth of the buffer. A value of 0 sets the threshold for 0 entries, and a value of 255 sets the threshold for 255 entries.
    -                TX_TL: u8,
    -                padding: u24,
    -            }),
    -            ///  Clear Combined and Individual Interrupt Register
    -            IC_CLR_INTR: mmio.Mmio(packed struct(u32) {
    -                ///  Read this register to clear the combined interrupt, all individual interrupts, and the IC_TX_ABRT_SOURCE register. This bit does not clear hardware clearable interrupts but software clearable interrupts. Refer to Bit 9 of the IC_TX_ABRT_SOURCE register for an exception to clearing IC_TX_ABRT_SOURCE.
    -                ///  Reset value: 0x0
    -                CLR_INTR: u1,
    -                padding: u31,
    -            }),
    -            ///  Clear RX_UNDER Interrupt Register
    -            IC_CLR_RX_UNDER: mmio.Mmio(packed struct(u32) {
    -                ///  Read this register to clear the RX_UNDER interrupt (bit 0) of the IC_RAW_INTR_STAT register.
    -                ///  Reset value: 0x0
    -                CLR_RX_UNDER: u1,
    -                padding: u31,
    -            }),
    -            ///  Clear RX_OVER Interrupt Register
    -            IC_CLR_RX_OVER: mmio.Mmio(packed struct(u32) {
    -                ///  Read this register to clear the RX_OVER interrupt (bit 1) of the IC_RAW_INTR_STAT register.
    -                ///  Reset value: 0x0
    -                CLR_RX_OVER: u1,
    -                padding: u31,
    -            }),
    -            ///  Clear TX_OVER Interrupt Register
    -            IC_CLR_TX_OVER: mmio.Mmio(packed struct(u32) {
    -                ///  Read this register to clear the TX_OVER interrupt (bit 3) of the IC_RAW_INTR_STAT register.
    -                ///  Reset value: 0x0
    -                CLR_TX_OVER: u1,
    -                padding: u31,
    -            }),
    -            ///  Clear RD_REQ Interrupt Register
    -            IC_CLR_RD_REQ: mmio.Mmio(packed struct(u32) {
    -                ///  Read this register to clear the RD_REQ interrupt (bit 5) of the IC_RAW_INTR_STAT register.
    -                ///  Reset value: 0x0
    -                CLR_RD_REQ: u1,
    -                padding: u31,
    -            }),
    -            ///  Clear TX_ABRT Interrupt Register
    -            IC_CLR_TX_ABRT: mmio.Mmio(packed struct(u32) {
    -                ///  Read this register to clear the TX_ABRT interrupt (bit 6) of the IC_RAW_INTR_STAT register, and the IC_TX_ABRT_SOURCE register. This also releases the TX FIFO from the flushed/reset state, allowing more writes to the TX FIFO. Refer to Bit 9 of the IC_TX_ABRT_SOURCE register for an exception to clearing IC_TX_ABRT_SOURCE.
    -                ///  Reset value: 0x0
    -                CLR_TX_ABRT: u1,
    -                padding: u31,
    -            }),
    -            ///  Clear RX_DONE Interrupt Register
    -            IC_CLR_RX_DONE: mmio.Mmio(packed struct(u32) {
    -                ///  Read this register to clear the RX_DONE interrupt (bit 7) of the IC_RAW_INTR_STAT register.
    -                ///  Reset value: 0x0
    -                CLR_RX_DONE: u1,
    -                padding: u31,
    -            }),
    -            ///  Clear ACTIVITY Interrupt Register
    -            IC_CLR_ACTIVITY: mmio.Mmio(packed struct(u32) {
    -                ///  Reading this register clears the ACTIVITY interrupt if the I2C is not active anymore. If the I2C module is still active on the bus, the ACTIVITY interrupt bit continues to be set. It is automatically cleared by hardware if the module is disabled and if there is no further activity on the bus. The value read from this register to get status of the ACTIVITY interrupt (bit 8) of the IC_RAW_INTR_STAT register.
    -                ///  Reset value: 0x0
    -                CLR_ACTIVITY: u1,
    -                padding: u31,
    -            }),
    -            ///  Clear STOP_DET Interrupt Register
    -            IC_CLR_STOP_DET: mmio.Mmio(packed struct(u32) {
    -                ///  Read this register to clear the STOP_DET interrupt (bit 9) of the IC_RAW_INTR_STAT register.
    -                ///  Reset value: 0x0
    -                CLR_STOP_DET: u1,
    -                padding: u31,
    -            }),
    -            ///  Clear START_DET Interrupt Register
    -            IC_CLR_START_DET: mmio.Mmio(packed struct(u32) {
    -                ///  Read this register to clear the START_DET interrupt (bit 10) of the IC_RAW_INTR_STAT register.
    -                ///  Reset value: 0x0
    -                CLR_START_DET: u1,
    -                padding: u31,
    -            }),
    -            ///  Clear GEN_CALL Interrupt Register
    -            IC_CLR_GEN_CALL: mmio.Mmio(packed struct(u32) {
    -                ///  Read this register to clear the GEN_CALL interrupt (bit 11) of IC_RAW_INTR_STAT register.
    -                ///  Reset value: 0x0
    -                CLR_GEN_CALL: u1,
    -                padding: u31,
    -            }),
    -            ///  I2C Enable Register
    -            IC_ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Controls whether the DW_apb_i2c is enabled. - 0: Disables DW_apb_i2c (TX and RX FIFOs are held in an erased state) - 1: Enables DW_apb_i2c Software can disable DW_apb_i2c while it is active. However, it is important that care be taken to ensure that DW_apb_i2c is disabled properly. A recommended procedure is described in 'Disabling DW_apb_i2c'.
    -                ///  When DW_apb_i2c is disabled, the following occurs: - The TX FIFO and RX FIFO get flushed. - Status bits in the IC_INTR_STAT register are still active until DW_apb_i2c goes into IDLE state. If the module is transmitting, it stops as well as deletes the contents of the transmit buffer after the current transfer is complete. If the module is receiving, the DW_apb_i2c stops the current transfer at the end of the current byte and does not acknowledge the transfer.
    -                ///  In systems with asynchronous pclk and ic_clk when IC_CLK_TYPE parameter set to asynchronous (1), there is a two ic_clk delay when enabling or disabling the DW_apb_i2c. For a detailed description on how to disable DW_apb_i2c, refer to 'Disabling DW_apb_i2c'
    -                ///  Reset value: 0x0
    -                ENABLE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  I2C is disabled
    -                        DISABLED = 0x0,
    -                        ///  I2C is enabled
    -                        ENABLED = 0x1,
    -                    },
    -                },
    -                ///  When set, the controller initiates the transfer abort. - 0: ABORT not initiated or ABORT done - 1: ABORT operation in progress The software can abort the I2C transfer in master mode by setting this bit. The software can set this bit only when ENABLE is already set; otherwise, the controller ignores any write to ABORT bit. The software cannot clear the ABORT bit once set. In response to an ABORT, the controller issues a STOP and flushes the Tx FIFO after completing the current transfer, then sets the TX_ABORT interrupt after the abort operation. The ABORT bit is cleared automatically after the abort operation.
    -                ///  For a detailed description on how to abort I2C transfers, refer to 'Aborting I2C Transfers'.
    -                ///  Reset value: 0x0
    -                ABORT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  ABORT operation not in progress
    -                        DISABLE = 0x0,
    -                        ///  ABORT operation in progress
    -                        ENABLED = 0x1,
    -                    },
    -                },
    -                ///  In Master mode: - 1'b1: Blocks the transmission of data on I2C bus even if Tx FIFO has data to transmit. - 1'b0: The transmission of data starts on I2C bus automatically, as soon as the first data is available in the Tx FIFO. Note: To block the execution of Master commands, set the TX_CMD_BLOCK bit only when Tx FIFO is empty (IC_STATUS[2]==1) and Master is in Idle state (IC_STATUS[5] == 0). Any further commands put in the Tx FIFO are not executed until TX_CMD_BLOCK bit is unset. Reset value: IC_TX_CMD_BLOCK_DEFAULT
    -                TX_CMD_BLOCK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Tx Command execution not blocked
    -                        NOT_BLOCKED = 0x0,
    -                        ///  Tx Command execution blocked
    -                        BLOCKED = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            ///  I2C Status Register
    -            ///  This is a read-only register used to indicate the current transfer status and FIFO status. The status register may be read at any time. None of the bits in this register request an interrupt.
    -            ///  When the I2C is disabled by writing 0 in bit 0 of the IC_ENABLE register: - Bits 1 and 2 are set to 1 - Bits 3 and 10 are set to 0 When the master or slave state machines goes to idle and ic_en=0: - Bits 5 and 6 are set to 0
    -            IC_STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  I2C Activity Status. Reset value: 0x0
    -                ACTIVITY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  I2C is idle
    -                        INACTIVE = 0x0,
    -                        ///  I2C is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  Transmit FIFO Not Full. Set when the transmit FIFO contains one or more empty locations, and is cleared when the FIFO is full. - 0: Transmit FIFO is full - 1: Transmit FIFO is not full Reset value: 0x1
    -                TFNF: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Tx FIFO is full
    -                        FULL = 0x0,
    -                        ///  Tx FIFO not full
    -                        NOT_FULL = 0x1,
    -                    },
    -                },
    -                ///  Transmit FIFO Completely Empty. When the transmit FIFO is completely empty, this bit is set. When it contains one or more valid entries, this bit is cleared. This bit field does not request an interrupt. - 0: Transmit FIFO is not empty - 1: Transmit FIFO is empty Reset value: 0x1
    -                TFE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Tx FIFO not empty
    -                        NON_EMPTY = 0x0,
    -                        ///  Tx FIFO is empty
    -                        EMPTY = 0x1,
    -                    },
    -                },
    -                ///  Receive FIFO Not Empty. This bit is set when the receive FIFO contains one or more entries; it is cleared when the receive FIFO is empty. - 0: Receive FIFO is empty - 1: Receive FIFO is not empty Reset value: 0x0
    -                RFNE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Rx FIFO is empty
    -                        EMPTY = 0x0,
    -                        ///  Rx FIFO not empty
    -                        NOT_EMPTY = 0x1,
    -                    },
    -                },
    -                ///  Receive FIFO Completely Full. When the receive FIFO is completely full, this bit is set. When the receive FIFO contains one or more empty location, this bit is cleared. - 0: Receive FIFO is not full - 1: Receive FIFO is full Reset value: 0x0
    -                RFF: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Rx FIFO not full
    -                        NOT_FULL = 0x0,
    -                        ///  Rx FIFO is full
    -                        FULL = 0x1,
    -                    },
    -                },
    -                ///  Master FSM Activity Status. When the Master Finite State Machine (FSM) is not in the IDLE state, this bit is set. - 0: Master FSM is in IDLE state so the Master part of DW_apb_i2c is not Active - 1: Master FSM is not in IDLE state so the Master part of DW_apb_i2c is Active Note: IC_STATUS[0]-that is, ACTIVITY bit-is the OR of SLV_ACTIVITY and MST_ACTIVITY bits.
    -                ///  Reset value: 0x0
    -                MST_ACTIVITY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Master is idle
    -                        IDLE = 0x0,
    -                        ///  Master not idle
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  Slave FSM Activity Status. When the Slave Finite State Machine (FSM) is not in the IDLE state, this bit is set. - 0: Slave FSM is in IDLE state so the Slave part of DW_apb_i2c is not Active - 1: Slave FSM is not in IDLE state so the Slave part of DW_apb_i2c is Active Reset value: 0x0
    -                SLV_ACTIVITY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Slave is idle
    -                        IDLE = 0x0,
    -                        ///  Slave not idle
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                padding: u25,
    -            }),
    -            ///  I2C Transmit FIFO Level Register This register contains the number of valid data entries in the transmit FIFO buffer. It is cleared whenever: - The I2C is disabled - There is a transmit abort - that is, TX_ABRT bit is set in the IC_RAW_INTR_STAT register - The slave bulk transmit mode is aborted The register increments whenever data is placed into the transmit FIFO and decrements when data is taken from the transmit FIFO.
    -            IC_TXFLR: mmio.Mmio(packed struct(u32) {
    -                ///  Transmit FIFO Level. Contains the number of valid data entries in the transmit FIFO.
    -                ///  Reset value: 0x0
    -                TXFLR: u5,
    -                padding: u27,
    -            }),
    -            ///  I2C Receive FIFO Level Register This register contains the number of valid data entries in the receive FIFO buffer. It is cleared whenever: - The I2C is disabled - Whenever there is a transmit abort caused by any of the events tracked in IC_TX_ABRT_SOURCE The register increments whenever data is placed into the receive FIFO and decrements when data is taken from the receive FIFO.
    -            IC_RXFLR: mmio.Mmio(packed struct(u32) {
    -                ///  Receive FIFO Level. Contains the number of valid data entries in the receive FIFO.
    -                ///  Reset value: 0x0
    -                RXFLR: u5,
    -                padding: u27,
    -            }),
    -            ///  I2C SDA Hold Time Length Register
    -            ///  The bits [15:0] of this register are used to control the hold time of SDA during transmit in both slave and master mode (after SCL goes from HIGH to LOW).
    -            ///  The bits [23:16] of this register are used to extend the SDA transition (if any) whenever SCL is HIGH in the receiver in either master or slave mode.
    -            ///  Writes to this register succeed only when IC_ENABLE[0]=0.
    -            ///  The values in this register are in units of ic_clk period. The value programmed in IC_SDA_TX_HOLD must be greater than the minimum hold time in each mode (one cycle in master mode, seven cycles in slave mode) for the value to be implemented.
    -            ///  The programmed SDA hold time during transmit (IC_SDA_TX_HOLD) cannot exceed at any time the duration of the low part of scl. Therefore the programmed value cannot be larger than N_SCL_LOW-2, where N_SCL_LOW is the duration of the low part of the scl period measured in ic_clk cycles.
    -            IC_SDA_HOLD: mmio.Mmio(packed struct(u32) {
    -                ///  Sets the required SDA hold time in units of ic_clk period, when DW_apb_i2c acts as a transmitter.
    -                ///  Reset value: IC_DEFAULT_SDA_HOLD[15:0].
    -                IC_SDA_TX_HOLD: u16,
    -                ///  Sets the required SDA hold time in units of ic_clk period, when DW_apb_i2c acts as a receiver.
    -                ///  Reset value: IC_DEFAULT_SDA_HOLD[23:16].
    -                IC_SDA_RX_HOLD: u8,
    -                padding: u8,
    -            }),
    -            ///  I2C Transmit Abort Source Register
    -            ///  This register has 32 bits that indicate the source of the TX_ABRT bit. Except for Bit 9, this register is cleared whenever the IC_CLR_TX_ABRT register or the IC_CLR_INTR register is read. To clear Bit 9, the source of the ABRT_SBYTE_NORSTRT must be fixed first; RESTART must be enabled (IC_CON[5]=1), the SPECIAL bit must be cleared (IC_TAR[11]), or the GC_OR_START bit must be cleared (IC_TAR[10]).
    -            ///  Once the source of the ABRT_SBYTE_NORSTRT is fixed, then this bit can be cleared in the same manner as other bits in this register. If the source of the ABRT_SBYTE_NORSTRT is not fixed before attempting to clear this bit, Bit 9 clears for one cycle and is then re-asserted.
    -            IC_TX_ABRT_SOURCE: mmio.Mmio(packed struct(u32) {
    -                ///  This field indicates that the Master is in 7-bit addressing mode and the address sent was not acknowledged by any slave.
    -                ///  Reset value: 0x0
    -                ///  Role of DW_apb_i2c: Master-Transmitter or Master-Receiver
    -                ABRT_7B_ADDR_NOACK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  This abort is not generated
    -                        INACTIVE = 0x0,
    -                        ///  This abort is generated because of NOACK for 7-bit address
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  This field indicates that the Master is in 10-bit address mode and the first 10-bit address byte was not acknowledged by any slave.
    -                ///  Reset value: 0x0
    -                ///  Role of DW_apb_i2c: Master-Transmitter or Master-Receiver
    -                ABRT_10ADDR1_NOACK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  This abort is not generated
    -                        INACTIVE = 0x0,
    -                        ///  Byte 1 of 10Bit Address not ACKed by any slave
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  This field indicates that the Master is in 10-bit address mode and that the second address byte of the 10-bit address was not acknowledged by any slave.
    -                ///  Reset value: 0x0
    -                ///  Role of DW_apb_i2c: Master-Transmitter or Master-Receiver
    -                ABRT_10ADDR2_NOACK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  This abort is not generated
    -                        INACTIVE = 0x0,
    -                        ///  Byte 2 of 10Bit Address not ACKed by any slave
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  This field indicates the master-mode only bit. When the master receives an acknowledgement for the address, but when it sends data byte(s) following the address, it did not receive an acknowledge from the remote slave(s).
    -                ///  Reset value: 0x0
    -                ///  Role of DW_apb_i2c: Master-Transmitter
    -                ABRT_TXDATA_NOACK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Transmitted data non-ACKed by addressed slave-scenario not present
    -                        ABRT_TXDATA_NOACK_VOID = 0x0,
    -                        ///  Transmitted data not ACKed by addressed slave
    -                        ABRT_TXDATA_NOACK_GENERATED = 0x1,
    -                    },
    -                },
    -                ///  This field indicates that DW_apb_i2c in master mode has sent a General Call and no slave on the bus acknowledged the General Call.
    -                ///  Reset value: 0x0
    -                ///  Role of DW_apb_i2c: Master-Transmitter
    -                ABRT_GCALL_NOACK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  GCALL not ACKed by any slave-scenario not present
    -                        ABRT_GCALL_NOACK_VOID = 0x0,
    -                        ///  GCALL not ACKed by any slave
    -                        ABRT_GCALL_NOACK_GENERATED = 0x1,
    -                    },
    -                },
    -                ///  This field indicates that DW_apb_i2c in the master mode has sent a General Call but the user programmed the byte following the General Call to be a read from the bus (IC_DATA_CMD[9] is set to 1).
    -                ///  Reset value: 0x0
    -                ///  Role of DW_apb_i2c: Master-Transmitter
    -                ABRT_GCALL_READ: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  GCALL is followed by read from bus-scenario not present
    -                        ABRT_GCALL_READ_VOID = 0x0,
    -                        ///  GCALL is followed by read from bus
    -                        ABRT_GCALL_READ_GENERATED = 0x1,
    -                    },
    -                },
    -                ///  This field indicates that the Master is in High Speed mode and the High Speed Master code was acknowledged (wrong behavior).
    -                ///  Reset value: 0x0
    -                ///  Role of DW_apb_i2c: Master
    -                ABRT_HS_ACKDET: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  HS Master code ACKed in HS Mode- scenario not present
    -                        ABRT_HS_ACK_VOID = 0x0,
    -                        ///  HS Master code ACKed in HS Mode
    -                        ABRT_HS_ACK_GENERATED = 0x1,
    -                    },
    -                },
    -                ///  This field indicates that the Master has sent a START Byte and the START Byte was acknowledged (wrong behavior).
    -                ///  Reset value: 0x0
    -                ///  Role of DW_apb_i2c: Master
    -                ABRT_SBYTE_ACKDET: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  ACK detected for START byte- scenario not present
    -                        ABRT_SBYTE_ACKDET_VOID = 0x0,
    -                        ///  ACK detected for START byte
    -                        ABRT_SBYTE_ACKDET_GENERATED = 0x1,
    -                    },
    -                },
    -                ///  This field indicates that the restart is disabled (IC_RESTART_EN bit (IC_CON[5]) =0) and the user is trying to use the master to transfer data in High Speed mode.
    -                ///  Reset value: 0x0
    -                ///  Role of DW_apb_i2c: Master-Transmitter or Master-Receiver
    -                ABRT_HS_NORSTRT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  User trying to switch Master to HS mode when RESTART disabled- scenario not present
    -                        ABRT_HS_NORSTRT_VOID = 0x0,
    -                        ///  User trying to switch Master to HS mode when RESTART disabled
    -                        ABRT_HS_NORSTRT_GENERATED = 0x1,
    -                    },
    -                },
    -                ///  To clear Bit 9, the source of the ABRT_SBYTE_NORSTRT must be fixed first; restart must be enabled (IC_CON[5]=1), the SPECIAL bit must be cleared (IC_TAR[11]), or the GC_OR_START bit must be cleared (IC_TAR[10]). Once the source of the ABRT_SBYTE_NORSTRT is fixed, then this bit can be cleared in the same manner as other bits in this register. If the source of the ABRT_SBYTE_NORSTRT is not fixed before attempting to clear this bit, bit 9 clears for one cycle and then gets reasserted. When this field is set to 1, the restart is disabled (IC_RESTART_EN bit (IC_CON[5]) =0) and the user is trying to send a START Byte.
    -                ///  Reset value: 0x0
    -                ///  Role of DW_apb_i2c: Master
    -                ABRT_SBYTE_NORSTRT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  User trying to send START byte when RESTART disabled- scenario not present
    -                        ABRT_SBYTE_NORSTRT_VOID = 0x0,
    -                        ///  User trying to send START byte when RESTART disabled
    -                        ABRT_SBYTE_NORSTRT_GENERATED = 0x1,
    -                    },
    -                },
    -                ///  This field indicates that the restart is disabled (IC_RESTART_EN bit (IC_CON[5]) =0) and the master sends a read command in 10-bit addressing mode.
    -                ///  Reset value: 0x0
    -                ///  Role of DW_apb_i2c: Master-Receiver
    -                ABRT_10B_RD_NORSTRT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Master not trying to read in 10Bit addressing mode when RESTART disabled
    -                        ABRT_10B_RD_VOID = 0x0,
    -                        ///  Master trying to read in 10Bit addressing mode when RESTART disabled
    -                        ABRT_10B_RD_GENERATED = 0x1,
    -                    },
    -                },
    -                ///  This field indicates that the User tries to initiate a Master operation with the Master mode disabled.
    -                ///  Reset value: 0x0
    -                ///  Role of DW_apb_i2c: Master-Transmitter or Master-Receiver
    -                ABRT_MASTER_DIS: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  User initiating master operation when MASTER disabled- scenario not present
    -                        ABRT_MASTER_DIS_VOID = 0x0,
    -                        ///  User initiating master operation when MASTER disabled
    -                        ABRT_MASTER_DIS_GENERATED = 0x1,
    -                    },
    -                },
    -                ///  This field specifies that the Master has lost arbitration, or if IC_TX_ABRT_SOURCE[14] is also set, then the slave transmitter has lost arbitration.
    -                ///  Reset value: 0x0
    -                ///  Role of DW_apb_i2c: Master-Transmitter or Slave-Transmitter
    -                ARB_LOST: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Master or Slave-Transmitter lost arbitration- scenario not present
    -                        ABRT_LOST_VOID = 0x0,
    -                        ///  Master or Slave-Transmitter lost arbitration
    -                        ABRT_LOST_GENERATED = 0x1,
    -                    },
    -                },
    -                ///  This field specifies that the Slave has received a read command and some data exists in the TX FIFO, so the slave issues a TX_ABRT interrupt to flush old data in TX FIFO.
    -                ///  Reset value: 0x0
    -                ///  Role of DW_apb_i2c: Slave-Transmitter
    -                ABRT_SLVFLUSH_TXFIFO: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Slave flushes existing data in TX-FIFO upon getting read command- scenario not present
    -                        ABRT_SLVFLUSH_TXFIFO_VOID = 0x0,
    -                        ///  Slave flushes existing data in TX-FIFO upon getting read command
    -                        ABRT_SLVFLUSH_TXFIFO_GENERATED = 0x1,
    -                    },
    -                },
    -                ///  This field indicates that a Slave has lost the bus while transmitting data to a remote master. IC_TX_ABRT_SOURCE[12] is set at the same time. Note: Even though the slave never 'owns' the bus, something could go wrong on the bus. This is a fail safe check. For instance, during a data transmission at the low-to-high transition of SCL, if what is on the data bus is not what is supposed to be transmitted, then DW_apb_i2c no longer own the bus.
    -                ///  Reset value: 0x0
    -                ///  Role of DW_apb_i2c: Slave-Transmitter
    -                ABRT_SLV_ARBLOST: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Slave lost arbitration to remote master- scenario not present
    -                        ABRT_SLV_ARBLOST_VOID = 0x0,
    -                        ///  Slave lost arbitration to remote master
    -                        ABRT_SLV_ARBLOST_GENERATED = 0x1,
    -                    },
    -                },
    -                ///  1: When the processor side responds to a slave mode request for data to be transmitted to a remote master and user writes a 1 in CMD (bit 8) of IC_DATA_CMD register.
    -                ///  Reset value: 0x0
    -                ///  Role of DW_apb_i2c: Slave-Transmitter
    -                ABRT_SLVRD_INTX: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Slave trying to transmit to remote master in read mode- scenario not present
    -                        ABRT_SLVRD_INTX_VOID = 0x0,
    -                        ///  Slave trying to transmit to remote master in read mode
    -                        ABRT_SLVRD_INTX_GENERATED = 0x1,
    -                    },
    -                },
    -                ///  This is a master-mode-only bit. Master has detected the transfer abort (IC_ENABLE[1])
    -                ///  Reset value: 0x0
    -                ///  Role of DW_apb_i2c: Master-Transmitter
    -                ABRT_USER_ABRT: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Transfer abort detected by master- scenario not present
    -                        ABRT_USER_ABRT_VOID = 0x0,
    -                        ///  Transfer abort detected by master
    -                        ABRT_USER_ABRT_GENERATED = 0x1,
    -                    },
    -                },
    -                reserved23: u6,
    -                ///  This field indicates the number of Tx FIFO Data Commands which are flushed due to TX_ABRT interrupt. It is cleared whenever I2C is disabled.
    -                ///  Reset value: 0x0
    -                ///  Role of DW_apb_i2c: Master-Transmitter or Slave-Transmitter
    -                TX_FLUSH_CNT: u9,
    -            }),
    -            ///  Generate Slave Data NACK Register
    -            ///  The register is used to generate a NACK for the data part of a transfer when DW_apb_i2c is acting as a slave-receiver. This register only exists when the IC_SLV_DATA_NACK_ONLY parameter is set to 1. When this parameter disabled, this register does not exist and writing to the register's address has no effect.
    -            ///  A write can occur on this register if both of the following conditions are met: - DW_apb_i2c is disabled (IC_ENABLE[0] = 0) - Slave part is inactive (IC_STATUS[6] = 0) Note: The IC_STATUS[6] is a register read-back location for the internal slv_activity signal; the user should poll this before writing the ic_slv_data_nack_only bit.
    -            IC_SLV_DATA_NACK_ONLY: mmio.Mmio(packed struct(u32) {
    -                ///  Generate NACK. This NACK generation only occurs when DW_apb_i2c is a slave-receiver. If this register is set to a value of 1, it can only generate a NACK after a data byte is received; hence, the data transfer is aborted and the data received is not pushed to the receive buffer.
    -                ///  When the register is set to a value of 0, it generates NACK/ACK, depending on normal criteria. - 1: generate NACK after data byte received - 0: generate NACK/ACK normally Reset value: 0x0
    -                NACK: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Slave receiver generates NACK normally
    -                        DISABLED = 0x0,
    -                        ///  Slave receiver generates NACK upon data reception only
    -                        ENABLED = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  DMA Control Register
    -            ///  The register is used to enable the DMA Controller interface operation. There is a separate bit for transmit and receive. This can be programmed regardless of the state of IC_ENABLE.
    -            IC_DMA_CR: mmio.Mmio(packed struct(u32) {
    -                ///  Receive DMA Enable. This bit enables/disables the receive FIFO DMA channel. Reset value: 0x0
    -                RDMAE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Receive FIFO DMA channel disabled
    -                        DISABLED = 0x0,
    -                        ///  Receive FIFO DMA channel enabled
    -                        ENABLED = 0x1,
    -                    },
    -                },
    -                ///  Transmit DMA Enable. This bit enables/disables the transmit FIFO DMA channel. Reset value: 0x0
    -                TDMAE: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  transmit FIFO DMA channel disabled
    -                        DISABLED = 0x0,
    -                        ///  Transmit FIFO DMA channel enabled
    -                        ENABLED = 0x1,
    -                    },
    -                },
    -                padding: u30,
    -            }),
    -            ///  DMA Transmit Data Level Register
    -            IC_DMA_TDLR: mmio.Mmio(packed struct(u32) {
    -                ///  Transmit Data Level. This bit field controls the level at which a DMA request is made by the transmit logic. It is equal to the watermark level; that is, the dma_tx_req signal is generated when the number of valid data entries in the transmit FIFO is equal to or below this field value, and TDMAE = 1.
    -                ///  Reset value: 0x0
    -                DMATDL: u4,
    -                padding: u28,
    -            }),
    -            ///  I2C Receive Data Level Register
    -            IC_DMA_RDLR: mmio.Mmio(packed struct(u32) {
    -                ///  Receive Data Level. This bit field controls the level at which a DMA request is made by the receive logic. The watermark level = DMARDL+1; that is, dma_rx_req is generated when the number of valid data entries in the receive FIFO is equal to or more than this field value + 1, and RDMAE =1. For instance, when DMARDL is 0, then dma_rx_req is asserted when 1 or more data entries are present in the receive FIFO.
    -                ///  Reset value: 0x0
    -                DMARDL: u4,
    -                padding: u28,
    -            }),
    -            ///  I2C SDA Setup Register
    -            ///  This register controls the amount of time delay (in terms of number of ic_clk clock periods) introduced in the rising edge of SCL - relative to SDA changing - when DW_apb_i2c services a read request in a slave-transmitter operation. The relevant I2C requirement is tSU:DAT (note 4) as detailed in the I2C Bus Specification. This register must be programmed with a value equal to or greater than 2.
    -            ///  Writes to this register succeed only when IC_ENABLE[0] = 0.
    -            ///  Note: The length of setup time is calculated using [(IC_SDA_SETUP - 1) * (ic_clk_period)], so if the user requires 10 ic_clk periods of setup time, they should program a value of 11. The IC_SDA_SETUP register is only used by the DW_apb_i2c when operating as a slave transmitter.
    -            IC_SDA_SETUP: mmio.Mmio(packed struct(u32) {
    -                ///  SDA Setup. It is recommended that if the required delay is 1000ns, then for an ic_clk frequency of 10 MHz, IC_SDA_SETUP should be programmed to a value of 11. IC_SDA_SETUP must be programmed with a minimum value of 2.
    -                SDA_SETUP: u8,
    -                padding: u24,
    -            }),
    -            ///  I2C ACK General Call Register
    -            ///  The register controls whether DW_apb_i2c responds with a ACK or NACK when it receives an I2C General Call address.
    -            ///  This register is applicable only when the DW_apb_i2c is in slave mode.
    -            IC_ACK_GENERAL_CALL: mmio.Mmio(packed struct(u32) {
    -                ///  ACK General Call. When set to 1, DW_apb_i2c responds with a ACK (by asserting ic_data_oe) when it receives a General Call. Otherwise, DW_apb_i2c responds with a NACK (by negating ic_data_oe).
    -                ACK_GEN_CALL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Generate NACK for a General Call
    -                        DISABLED = 0x0,
    -                        ///  Generate ACK for a General Call
    -                        ENABLED = 0x1,
    -                    },
    -                },
    -                padding: u31,
    -            }),
    -            ///  I2C Enable Status Register
    -            ///  The register is used to report the DW_apb_i2c hardware status when the IC_ENABLE[0] register is set from 1 to 0; that is, when DW_apb_i2c is disabled.
    -            ///  If IC_ENABLE[0] has been set to 1, bits 2:1 are forced to 0, and bit 0 is forced to 1.
    -            ///  If IC_ENABLE[0] has been set to 0, bits 2:1 is only be valid as soon as bit 0 is read as '0'.
    -            ///  Note: When IC_ENABLE[0] has been set to 0, a delay occurs for bit 0 to be read as 0 because disabling the DW_apb_i2c depends on I2C bus activities.
    -            IC_ENABLE_STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  ic_en Status. This bit always reflects the value driven on the output port ic_en. - When read as 1, DW_apb_i2c is deemed to be in an enabled state. - When read as 0, DW_apb_i2c is deemed completely inactive. Note: The CPU can safely read this bit anytime. When this bit is read as 0, the CPU can safely read SLV_RX_DATA_LOST (bit 2) and SLV_DISABLED_WHILE_BUSY (bit 1).
    -                ///  Reset value: 0x0
    -                IC_EN: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  I2C disabled
    -                        DISABLED = 0x0,
    -                        ///  I2C enabled
    -                        ENABLED = 0x1,
    -                    },
    -                },
    -                ///  Slave Disabled While Busy (Transmit, Receive). This bit indicates if a potential or active Slave operation has been aborted due to the setting bit 0 of the IC_ENABLE register from 1 to 0. This bit is set when the CPU writes a 0 to the IC_ENABLE register while:
    -                ///  (a) DW_apb_i2c is receiving the address byte of the Slave-Transmitter operation from a remote master;
    -                ///  OR,
    -                ///  (b) address and data bytes of the Slave-Receiver operation from a remote master.
    -                ///  When read as 1, DW_apb_i2c is deemed to have forced a NACK during any part of an I2C transfer, irrespective of whether the I2C address matches the slave address set in DW_apb_i2c (IC_SAR register) OR if the transfer is completed before IC_ENABLE is set to 0 but has not taken effect.
    -                ///  Note: If the remote I2C master terminates the transfer with a STOP condition before the DW_apb_i2c has a chance to NACK a transfer, and IC_ENABLE[0] has been set to 0, then this bit will also be set to 1.
    -                ///  When read as 0, DW_apb_i2c is deemed to have been disabled when there is master activity, or when the I2C bus is idle.
    -                ///  Note: The CPU can safely read this bit when IC_EN (bit 0) is read as 0.
    -                ///  Reset value: 0x0
    -                SLV_DISABLED_WHILE_BUSY: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Slave is disabled when it is idle
    -                        INACTIVE = 0x0,
    -                        ///  Slave is disabled when it is active
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                ///  Slave Received Data Lost. This bit indicates if a Slave-Receiver operation has been aborted with at least one data byte received from an I2C transfer due to the setting bit 0 of IC_ENABLE from 1 to 0. When read as 1, DW_apb_i2c is deemed to have been actively engaged in an aborted I2C transfer (with matching address) and the data phase of the I2C transfer has been entered, even though a data byte has been responded with a NACK.
    -                ///  Note: If the remote I2C master terminates the transfer with a STOP condition before the DW_apb_i2c has a chance to NACK a transfer, and IC_ENABLE[0] has been set to 0, then this bit is also set to 1.
    -                ///  When read as 0, DW_apb_i2c is deemed to have been disabled without being actively involved in the data phase of a Slave-Receiver transfer.
    -                ///  Note: The CPU can safely read this bit when IC_EN (bit 0) is read as 0.
    -                ///  Reset value: 0x0
    -                SLV_RX_DATA_LOST: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  Slave RX Data is not lost
    -                        INACTIVE = 0x0,
    -                        ///  Slave RX Data is lost
    -                        ACTIVE = 0x1,
    -                    },
    -                },
    -                padding: u29,
    -            }),
    -            ///  I2C SS, FS or FM+ spike suppression limit
    -            ///  This register is used to store the duration, measured in ic_clk cycles, of the longest spike that is filtered out by the spike suppression logic when the component is operating in SS, FS or FM+ modes. The relevant I2C requirement is tSP (table 4) as detailed in the I2C Bus Specification. This register must be programmed with a minimum value of 1.
    -            IC_FS_SPKLEN: mmio.Mmio(packed struct(u32) {
    -                ///  This register must be set before any I2C bus transaction can take place to ensure stable operation. This register sets the duration, measured in ic_clk cycles, of the longest spike in the SCL or SDA lines that will be filtered out by the spike suppression logic. This register can be written only when the I2C interface is disabled which corresponds to the IC_ENABLE[0] register being set to 0. Writes at other times have no effect. The minimum valid value is 1; hardware prevents values less than this being written, and if attempted results in 1 being set. or more information, refer to 'Spike Suppression'.
    -                IC_FS_SPKLEN: u8,
    -                padding: u24,
    -            }),
    -            reserved168: [4]u8,
    -            ///  Clear RESTART_DET Interrupt Register
    -            IC_CLR_RESTART_DET: mmio.Mmio(packed struct(u32) {
    -                ///  Read this register to clear the RESTART_DET interrupt (bit 12) of IC_RAW_INTR_STAT register.
    -                ///  Reset value: 0x0
    -                CLR_RESTART_DET: u1,
    -                padding: u31,
    -            }),
    -            reserved244: [72]u8,
    -            ///  Component Parameter Register 1
    -            ///  Note This register is not implemented and therefore reads as 0. If it was implemented it would be a constant read-only register that contains encoded information about the component's parameter settings. Fields shown below are the settings for those parameters
    -            IC_COMP_PARAM_1: mmio.Mmio(packed struct(u32) {
    -                ///  APB data bus width is 32 bits
    -                APB_DATA_WIDTH: u2,
    -                ///  MAX SPEED MODE = FAST MODE
    -                MAX_SPEED_MODE: u2,
    -                ///  Programmable count values for each mode.
    -                HC_COUNT_VALUES: u1,
    -                ///  COMBINED Interrupt outputs
    -                INTR_IO: u1,
    -                ///  DMA handshaking signals are enabled
    -                HAS_DMA: u1,
    -                ///  Encoded parameters not visible
    -                ADD_ENCODED_PARAMS: u1,
    -                ///  RX Buffer Depth = 16
    -                RX_BUFFER_DEPTH: u8,
    -                ///  TX Buffer Depth = 16
    -                TX_BUFFER_DEPTH: u8,
    -                padding: u8,
    -            }),
    -            ///  I2C Component Version Register
    -            IC_COMP_VERSION: mmio.Mmio(packed struct(u32) {
    -                IC_COMP_VERSION: u32,
    -            }),
    -            ///  I2C Component Type Register
    -            IC_COMP_TYPE: mmio.Mmio(packed struct(u32) {
    -                ///  Designware Component Type number = 0x44_57_01_40. This assigned unique hex value is constant and is derived from the two ASCII letters 'DW' followed by a 16-bit unsigned number.
    -                IC_COMP_TYPE: u32,
    -            }),
    -        };
    -
    -        ///  Programmable IO block
    -        pub const PIO0 = extern struct {
    -            ///  PIO control register
    -            CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  Enable/disable each of the four state machines by writing 1/0 to each of these four bits. When disabled, a state machine will cease executing instructions, except those written directly to SMx_INSTR by the system. Multiple bits can be set/cleared at once to run/halt multiple state machines simultaneously.
    -                SM_ENABLE: u4,
    -                ///  Write 1 to instantly clear internal SM state which may be otherwise difficult to access and will affect future execution.
    -                ///  Specifically, the following are cleared: input and output shift counters; the contents of the input shift register; the delay counter; the waiting-on-IRQ state; any stalled instruction written to SMx_INSTR or run by OUT/MOV EXEC; any pin write left asserted due to OUT_STICKY.
    -                SM_RESTART: u4,
    -                ///  Restart a state machine's clock divider from an initial phase of 0. Clock dividers are free-running, so once started, their output (including fractional jitter) is completely determined by the integer/fractional divisor configured in SMx_CLKDIV. This means that, if multiple clock dividers with the same divisor are restarted simultaneously, by writing multiple 1 bits to this field, the execution clocks of those state machines will run in precise lockstep.
    -                ///  Note that setting/clearing SM_ENABLE does not stop the clock divider from running, so once multiple state machines' clocks are synchronised, it is safe to disable/reenable a state machine, whilst keeping the clock dividers in sync.
    -                ///  Note also that CLKDIV_RESTART can be written to whilst the state machine is running, and this is useful to resynchronise clock dividers after the divisors (SMx_CLKDIV) have been changed on-the-fly.
    -                CLKDIV_RESTART: u4,
    -                padding: u20,
    -            }),
    -            ///  FIFO status register
    -            FSTAT: mmio.Mmio(packed struct(u32) {
    -                ///  State machine RX FIFO is full
    -                RXFULL: u4,
    -                reserved8: u4,
    -                ///  State machine RX FIFO is empty
    -                RXEMPTY: u4,
    -                reserved16: u4,
    -                ///  State machine TX FIFO is full
    -                TXFULL: u4,
    -                reserved24: u4,
    -                ///  State machine TX FIFO is empty
    -                TXEMPTY: u4,
    -                padding: u4,
    -            }),
    -            ///  FIFO debug register
    -            FDEBUG: mmio.Mmio(packed struct(u32) {
    -                ///  State machine has stalled on full RX FIFO during a blocking PUSH, or an IN with autopush enabled. This flag is also set when a nonblocking PUSH to a full FIFO took place, in which case the state machine has dropped data. Write 1 to clear.
    -                RXSTALL: u4,
    -                reserved8: u4,
    -                ///  RX FIFO underflow (i.e. read-on-empty by the system) has occurred. Write 1 to clear. Note that read-on-empty does not perturb the state of the FIFO in any way, but the data returned by reading from an empty FIFO is undefined, so this flag generally only becomes set due to some kind of software error.
    -                RXUNDER: u4,
    -                reserved16: u4,
    -                ///  TX FIFO overflow (i.e. write-on-full by the system) has occurred. Write 1 to clear. Note that write-on-full does not alter the state or contents of the FIFO in any way, but the data that the system attempted to write is dropped, so if this flag is set, your software has quite likely dropped some data on the floor.
    -                TXOVER: u4,
    -                reserved24: u4,
    -                ///  State machine has stalled on empty TX FIFO during a blocking PULL, or an OUT with autopull enabled. Write 1 to clear.
    -                TXSTALL: u4,
    -                padding: u4,
    -            }),
    -            ///  FIFO levels
    -            FLEVEL: mmio.Mmio(packed struct(u32) {
    -                TX0: u4,
    -                RX0: u4,
    -                TX1: u4,
    -                RX1: u4,
    -                TX2: u4,
    -                RX2: u4,
    -                TX3: u4,
    -                RX3: u4,
    -            }),
    -            ///  Direct write access to the TX FIFO for this state machine. Each write pushes one word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO.
    -            TXF0: u32,
    -            ///  Direct write access to the TX FIFO for this state machine. Each write pushes one word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO.
    -            TXF1: u32,
    -            ///  Direct write access to the TX FIFO for this state machine. Each write pushes one word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO.
    -            TXF2: u32,
    -            ///  Direct write access to the TX FIFO for this state machine. Each write pushes one word to the FIFO. Attempting to write to a full FIFO has no effect on the FIFO state or contents, and sets the sticky FDEBUG_TXOVER error flag for this FIFO.
    -            TXF3: u32,
    -            ///  Direct read access to the RX FIFO for this state machine. Each read pops one word from the FIFO. Attempting to read from an empty FIFO has no effect on the FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The data returned to the system on a read from an empty FIFO is undefined.
    -            RXF0: u32,
    -            ///  Direct read access to the RX FIFO for this state machine. Each read pops one word from the FIFO. Attempting to read from an empty FIFO has no effect on the FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The data returned to the system on a read from an empty FIFO is undefined.
    -            RXF1: u32,
    -            ///  Direct read access to the RX FIFO for this state machine. Each read pops one word from the FIFO. Attempting to read from an empty FIFO has no effect on the FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The data returned to the system on a read from an empty FIFO is undefined.
    -            RXF2: u32,
    -            ///  Direct read access to the RX FIFO for this state machine. Each read pops one word from the FIFO. Attempting to read from an empty FIFO has no effect on the FIFO state, and sets the sticky FDEBUG_RXUNDER error flag for this FIFO. The data returned to the system on a read from an empty FIFO is undefined.
    -            RXF3: u32,
    -            ///  State machine IRQ flags register. Write 1 to clear. There are 8 state machine IRQ flags, which can be set, cleared, and waited on by the state machines. There's no fixed association between flags and state machines -- any state machine can use any flag.
    -            ///  Any of the 8 flags can be used for timing synchronisation between state machines, using IRQ and WAIT instructions. The lower four of these flags are also routed out to system-level interrupt requests, alongside FIFO status interrupts -- see e.g. IRQ0_INTE.
    -            IRQ: mmio.Mmio(packed struct(u32) {
    -                IRQ: u8,
    -                padding: u24,
    -            }),
    -            ///  Writing a 1 to each of these bits will forcibly assert the corresponding IRQ. Note this is different to the INTF register: writing here affects PIO internal state. INTF just asserts the processor-facing IRQ signal for testing ISRs, and is not visible to the state machines.
    -            IRQ_FORCE: mmio.Mmio(packed struct(u32) {
    -                IRQ_FORCE: u8,
    -                padding: u24,
    -            }),
    -            ///  There is a 2-flipflop synchronizer on each GPIO input, which protects PIO logic from metastabilities. This increases input delay, and for fast synchronous IO (e.g. SPI) these synchronizers may need to be bypassed. Each bit in this register corresponds to one GPIO.
    -            ///  0 -> input is synchronized (default)
    -            ///  1 -> synchronizer is bypassed
    -            ///  If in doubt, leave this register as all zeroes.
    -            INPUT_SYNC_BYPASS: u32,
    -            ///  Read to sample the pad output values PIO is currently driving to the GPIOs. On RP2040 there are 30 GPIOs, so the two most significant bits are hardwired to 0.
    -            DBG_PADOUT: u32,
    -            ///  Read to sample the pad output enables (direction) PIO is currently driving to the GPIOs. On RP2040 there are 30 GPIOs, so the two most significant bits are hardwired to 0.
    -            DBG_PADOE: u32,
    -            ///  The PIO hardware has some free parameters that may vary between chip products.
    -            ///  These should be provided in the chip datasheet, but are also exposed here.
    -            DBG_CFGINFO: mmio.Mmio(packed struct(u32) {
    -                ///  The depth of the state machine TX/RX FIFOs, measured in words.
    -                ///  Joining fifos via SHIFTCTRL_FJOIN gives one FIFO with double
    -                ///  this depth.
    -                FIFO_DEPTH: u6,
    -                reserved8: u2,
    -                ///  The number of state machines this PIO instance is equipped with.
    -                SM_COUNT: u4,
    -                reserved16: u4,
    -                ///  The size of the instruction memory, measured in units of one instruction
    -                IMEM_SIZE: u6,
    -                padding: u10,
    -            }),
    -            ///  Write-only access to instruction memory location 0
    -            INSTR_MEM0: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM0: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 1
    -            INSTR_MEM1: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM1: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 2
    -            INSTR_MEM2: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM2: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 3
    -            INSTR_MEM3: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM3: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 4
    -            INSTR_MEM4: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM4: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 5
    -            INSTR_MEM5: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM5: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 6
    -            INSTR_MEM6: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM6: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 7
    -            INSTR_MEM7: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM7: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 8
    -            INSTR_MEM8: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM8: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 9
    -            INSTR_MEM9: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM9: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 10
    -            INSTR_MEM10: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM10: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 11
    -            INSTR_MEM11: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM11: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 12
    -            INSTR_MEM12: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM12: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 13
    -            INSTR_MEM13: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM13: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 14
    -            INSTR_MEM14: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM14: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 15
    -            INSTR_MEM15: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM15: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 16
    -            INSTR_MEM16: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM16: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 17
    -            INSTR_MEM17: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM17: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 18
    -            INSTR_MEM18: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM18: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 19
    -            INSTR_MEM19: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM19: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 20
    -            INSTR_MEM20: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM20: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 21
    -            INSTR_MEM21: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM21: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 22
    -            INSTR_MEM22: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM22: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 23
    -            INSTR_MEM23: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM23: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 24
    -            INSTR_MEM24: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM24: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 25
    -            INSTR_MEM25: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM25: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 26
    -            INSTR_MEM26: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM26: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 27
    -            INSTR_MEM27: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM27: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 28
    -            INSTR_MEM28: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM28: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 29
    -            INSTR_MEM29: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM29: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 30
    -            INSTR_MEM30: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM30: u16,
    -                padding: u16,
    -            }),
    -            ///  Write-only access to instruction memory location 31
    -            INSTR_MEM31: mmio.Mmio(packed struct(u32) {
    -                INSTR_MEM31: u16,
    -                padding: u16,
    -            }),
    -            ///  Clock divisor register for state machine 0
    -            ///  Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256)
    -            SM0_CLKDIV: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  Fractional part of clock divisor
    -                FRAC: u8,
    -                ///  Effective frequency is sysclk/(int + frac/256).
    -                ///  Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0.
    -                INT: u16,
    -            }),
    -            ///  Execution/behavioural settings for state machine 0
    -            SM0_EXECCTRL: mmio.Mmio(packed struct(u32) {
    -                ///  Comparison level for the MOV x, STATUS instruction
    -                STATUS_N: u4,
    -                ///  Comparison used for the MOV x, STATUS instruction.
    -                STATUS_SEL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  All-ones if TX FIFO level < N, otherwise all-zeroes
    -                        TXLEVEL = 0x0,
    -                        ///  All-ones if RX FIFO level < N, otherwise all-zeroes
    -                        RXLEVEL = 0x1,
    -                    },
    -                },
    -                reserved7: u2,
    -                ///  After reaching wrap_top, execution is wrapped to this address.
    -                WRAP_BOTTOM: u5,
    -                ///  After reaching this address, execution is wrapped to wrap_bottom.
    -                ///  If the instruction is a jump, and the jump condition is true, the jump takes priority.
    -                WRAP_TOP: u5,
    -                ///  Continuously assert the most recent OUT/SET to the pins
    -                OUT_STICKY: u1,
    -                ///  If 1, use a bit of OUT data as an auxiliary write enable
    -                ///  When used in conjunction with OUT_STICKY, writes with an enable of 0 will
    -                ///  deassert the latest pin write. This can create useful masking/override behaviour
    -                ///  due to the priority ordering of state machine pin writes (SM0 < SM1 < ...)
    -                INLINE_OUT_EN: u1,
    -                ///  Which data bit to use for inline OUT enable
    -                OUT_EN_SEL: u5,
    -                ///  The GPIO number to use as condition for JMP PIN. Unaffected by input mapping.
    -                JMP_PIN: u5,
    -                ///  If 1, side-set data is asserted to pin directions, instead of pin values
    -                SIDE_PINDIR: u1,
    -                ///  If 1, the MSB of the Delay/Side-set instruction field is used as side-set enable, rather than a side-set data bit. This allows instructions to perform side-set optionally, rather than on every instruction, but the maximum possible side-set width is reduced from 5 to 4. Note that the value of PINCTRL_SIDESET_COUNT is inclusive of this enable bit.
    -                SIDE_EN: u1,
    -                ///  If 1, an instruction written to SMx_INSTR is stalled, and latched by the state machine. Will clear to 0 once this instruction completes.
    -                EXEC_STALLED: u1,
    -            }),
    -            ///  Control behaviour of the input/output shift registers for state machine 0
    -            SM0_SHIFTCTRL: mmio.Mmio(packed struct(u32) {
    -                reserved16: u16,
    -                ///  Push automatically when the input shift register is filled, i.e. on an IN instruction which causes the input shift counter to reach or exceed PUSH_THRESH.
    -                AUTOPUSH: u1,
    -                ///  Pull automatically when the output shift register is emptied, i.e. on or following an OUT instruction which causes the output shift counter to reach or exceed PULL_THRESH.
    -                AUTOPULL: u1,
    -                ///  1 = shift input shift register to right (data enters from left). 0 = to left.
    -                IN_SHIFTDIR: u1,
    -                ///  1 = shift out of output shift register to right. 0 = to left.
    -                OUT_SHIFTDIR: u1,
    -                ///  Number of bits shifted into ISR before autopush, or conditional push (PUSH IFFULL), will take place.
    -                ///  Write 0 for value of 32.
    -                PUSH_THRESH: u5,
    -                ///  Number of bits shifted out of OSR before autopull, or conditional pull (PULL IFEMPTY), will take place.
    -                ///  Write 0 for value of 32.
    -                PULL_THRESH: u5,
    -                ///  When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.
    -                ///  RX FIFO is disabled as a result (always reads as both full and empty).
    -                ///  FIFOs are flushed when this bit is changed.
    -                FJOIN_TX: u1,
    -                ///  When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.
    -                ///  TX FIFO is disabled as a result (always reads as both full and empty).
    -                ///  FIFOs are flushed when this bit is changed.
    -                FJOIN_RX: u1,
    -            }),
    -            ///  Current instruction address of state machine 0
    -            SM0_ADDR: mmio.Mmio(packed struct(u32) {
    -                SM0_ADDR: u5,
    -                padding: u27,
    -            }),
    -            ///  Read to see the instruction currently addressed by state machine 0's program counter
    -            ///  Write to execute an instruction immediately (including jumps) and then resume execution.
    -            SM0_INSTR: mmio.Mmio(packed struct(u32) {
    -                SM0_INSTR: u16,
    -                padding: u16,
    -            }),
    -            ///  State machine pin control
    -            SM0_PINCTRL: mmio.Mmio(packed struct(u32) {
    -                ///  The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV PINS instruction. The data written to this pin will always be the least-significant bit of the OUT or MOV data.
    -                OUT_BASE: u5,
    -                ///  The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS instruction. The data written to this pin is the least-significant bit of the SET data.
    -                SET_BASE: u5,
    -                ///  The lowest-numbered pin that will be affected by a side-set operation. The MSBs of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT) are used for side-set data, with the remaining LSBs used for delay. The least-significant bit of the side-set portion is the bit written to this pin, with more-significant bits written to higher-numbered pins.
    -                SIDESET_BASE: u5,
    -                ///  The pin which is mapped to the least-significant bit of a state machine's IN data bus. Higher-numbered pins are mapped to consecutively more-significant data bits, with a modulo of 32 applied to pin number.
    -                IN_BASE: u5,
    -                ///  The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction. In the range 0 to 32 inclusive.
    -                OUT_COUNT: u6,
    -                ///  The number of pins asserted by a SET. In the range 0 to 5 inclusive.
    -                SET_COUNT: u3,
    -                ///  The number of MSBs of the Delay/Side-set instruction field which are used for side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits, no side-set) and maximum of 5 (all side-set, no delay).
    -                SIDESET_COUNT: u3,
    -            }),
    -            ///  Clock divisor register for state machine 1
    -            ///  Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256)
    -            SM1_CLKDIV: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  Fractional part of clock divisor
    -                FRAC: u8,
    -                ///  Effective frequency is sysclk/(int + frac/256).
    -                ///  Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0.
    -                INT: u16,
    -            }),
    -            ///  Execution/behavioural settings for state machine 1
    -            SM1_EXECCTRL: mmio.Mmio(packed struct(u32) {
    -                ///  Comparison level for the MOV x, STATUS instruction
    -                STATUS_N: u4,
    -                ///  Comparison used for the MOV x, STATUS instruction.
    -                STATUS_SEL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  All-ones if TX FIFO level < N, otherwise all-zeroes
    -                        TXLEVEL = 0x0,
    -                        ///  All-ones if RX FIFO level < N, otherwise all-zeroes
    -                        RXLEVEL = 0x1,
    -                    },
    -                },
    -                reserved7: u2,
    -                ///  After reaching wrap_top, execution is wrapped to this address.
    -                WRAP_BOTTOM: u5,
    -                ///  After reaching this address, execution is wrapped to wrap_bottom.
    -                ///  If the instruction is a jump, and the jump condition is true, the jump takes priority.
    -                WRAP_TOP: u5,
    -                ///  Continuously assert the most recent OUT/SET to the pins
    -                OUT_STICKY: u1,
    -                ///  If 1, use a bit of OUT data as an auxiliary write enable
    -                ///  When used in conjunction with OUT_STICKY, writes with an enable of 0 will
    -                ///  deassert the latest pin write. This can create useful masking/override behaviour
    -                ///  due to the priority ordering of state machine pin writes (SM0 < SM1 < ...)
    -                INLINE_OUT_EN: u1,
    -                ///  Which data bit to use for inline OUT enable
    -                OUT_EN_SEL: u5,
    -                ///  The GPIO number to use as condition for JMP PIN. Unaffected by input mapping.
    -                JMP_PIN: u5,
    -                ///  If 1, side-set data is asserted to pin directions, instead of pin values
    -                SIDE_PINDIR: u1,
    -                ///  If 1, the MSB of the Delay/Side-set instruction field is used as side-set enable, rather than a side-set data bit. This allows instructions to perform side-set optionally, rather than on every instruction, but the maximum possible side-set width is reduced from 5 to 4. Note that the value of PINCTRL_SIDESET_COUNT is inclusive of this enable bit.
    -                SIDE_EN: u1,
    -                ///  If 1, an instruction written to SMx_INSTR is stalled, and latched by the state machine. Will clear to 0 once this instruction completes.
    -                EXEC_STALLED: u1,
    -            }),
    -            ///  Control behaviour of the input/output shift registers for state machine 1
    -            SM1_SHIFTCTRL: mmio.Mmio(packed struct(u32) {
    -                reserved16: u16,
    -                ///  Push automatically when the input shift register is filled, i.e. on an IN instruction which causes the input shift counter to reach or exceed PUSH_THRESH.
    -                AUTOPUSH: u1,
    -                ///  Pull automatically when the output shift register is emptied, i.e. on or following an OUT instruction which causes the output shift counter to reach or exceed PULL_THRESH.
    -                AUTOPULL: u1,
    -                ///  1 = shift input shift register to right (data enters from left). 0 = to left.
    -                IN_SHIFTDIR: u1,
    -                ///  1 = shift out of output shift register to right. 0 = to left.
    -                OUT_SHIFTDIR: u1,
    -                ///  Number of bits shifted into ISR before autopush, or conditional push (PUSH IFFULL), will take place.
    -                ///  Write 0 for value of 32.
    -                PUSH_THRESH: u5,
    -                ///  Number of bits shifted out of OSR before autopull, or conditional pull (PULL IFEMPTY), will take place.
    -                ///  Write 0 for value of 32.
    -                PULL_THRESH: u5,
    -                ///  When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.
    -                ///  RX FIFO is disabled as a result (always reads as both full and empty).
    -                ///  FIFOs are flushed when this bit is changed.
    -                FJOIN_TX: u1,
    -                ///  When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.
    -                ///  TX FIFO is disabled as a result (always reads as both full and empty).
    -                ///  FIFOs are flushed when this bit is changed.
    -                FJOIN_RX: u1,
    -            }),
    -            ///  Current instruction address of state machine 1
    -            SM1_ADDR: mmio.Mmio(packed struct(u32) {
    -                SM1_ADDR: u5,
    -                padding: u27,
    -            }),
    -            ///  Read to see the instruction currently addressed by state machine 1's program counter
    -            ///  Write to execute an instruction immediately (including jumps) and then resume execution.
    -            SM1_INSTR: mmio.Mmio(packed struct(u32) {
    -                SM1_INSTR: u16,
    -                padding: u16,
    -            }),
    -            ///  State machine pin control
    -            SM1_PINCTRL: mmio.Mmio(packed struct(u32) {
    -                ///  The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV PINS instruction. The data written to this pin will always be the least-significant bit of the OUT or MOV data.
    -                OUT_BASE: u5,
    -                ///  The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS instruction. The data written to this pin is the least-significant bit of the SET data.
    -                SET_BASE: u5,
    -                ///  The lowest-numbered pin that will be affected by a side-set operation. The MSBs of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT) are used for side-set data, with the remaining LSBs used for delay. The least-significant bit of the side-set portion is the bit written to this pin, with more-significant bits written to higher-numbered pins.
    -                SIDESET_BASE: u5,
    -                ///  The pin which is mapped to the least-significant bit of a state machine's IN data bus. Higher-numbered pins are mapped to consecutively more-significant data bits, with a modulo of 32 applied to pin number.
    -                IN_BASE: u5,
    -                ///  The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction. In the range 0 to 32 inclusive.
    -                OUT_COUNT: u6,
    -                ///  The number of pins asserted by a SET. In the range 0 to 5 inclusive.
    -                SET_COUNT: u3,
    -                ///  The number of MSBs of the Delay/Side-set instruction field which are used for side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits, no side-set) and maximum of 5 (all side-set, no delay).
    -                SIDESET_COUNT: u3,
    -            }),
    -            ///  Clock divisor register for state machine 2
    -            ///  Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256)
    -            SM2_CLKDIV: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  Fractional part of clock divisor
    -                FRAC: u8,
    -                ///  Effective frequency is sysclk/(int + frac/256).
    -                ///  Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0.
    -                INT: u16,
    -            }),
    -            ///  Execution/behavioural settings for state machine 2
    -            SM2_EXECCTRL: mmio.Mmio(packed struct(u32) {
    -                ///  Comparison level for the MOV x, STATUS instruction
    -                STATUS_N: u4,
    -                ///  Comparison used for the MOV x, STATUS instruction.
    -                STATUS_SEL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  All-ones if TX FIFO level < N, otherwise all-zeroes
    -                        TXLEVEL = 0x0,
    -                        ///  All-ones if RX FIFO level < N, otherwise all-zeroes
    -                        RXLEVEL = 0x1,
    -                    },
    -                },
    -                reserved7: u2,
    -                ///  After reaching wrap_top, execution is wrapped to this address.
    -                WRAP_BOTTOM: u5,
    -                ///  After reaching this address, execution is wrapped to wrap_bottom.
    -                ///  If the instruction is a jump, and the jump condition is true, the jump takes priority.
    -                WRAP_TOP: u5,
    -                ///  Continuously assert the most recent OUT/SET to the pins
    -                OUT_STICKY: u1,
    -                ///  If 1, use a bit of OUT data as an auxiliary write enable
    -                ///  When used in conjunction with OUT_STICKY, writes with an enable of 0 will
    -                ///  deassert the latest pin write. This can create useful masking/override behaviour
    -                ///  due to the priority ordering of state machine pin writes (SM0 < SM1 < ...)
    -                INLINE_OUT_EN: u1,
    -                ///  Which data bit to use for inline OUT enable
    -                OUT_EN_SEL: u5,
    -                ///  The GPIO number to use as condition for JMP PIN. Unaffected by input mapping.
    -                JMP_PIN: u5,
    -                ///  If 1, side-set data is asserted to pin directions, instead of pin values
    -                SIDE_PINDIR: u1,
    -                ///  If 1, the MSB of the Delay/Side-set instruction field is used as side-set enable, rather than a side-set data bit. This allows instructions to perform side-set optionally, rather than on every instruction, but the maximum possible side-set width is reduced from 5 to 4. Note that the value of PINCTRL_SIDESET_COUNT is inclusive of this enable bit.
    -                SIDE_EN: u1,
    -                ///  If 1, an instruction written to SMx_INSTR is stalled, and latched by the state machine. Will clear to 0 once this instruction completes.
    -                EXEC_STALLED: u1,
    -            }),
    -            ///  Control behaviour of the input/output shift registers for state machine 2
    -            SM2_SHIFTCTRL: mmio.Mmio(packed struct(u32) {
    -                reserved16: u16,
    -                ///  Push automatically when the input shift register is filled, i.e. on an IN instruction which causes the input shift counter to reach or exceed PUSH_THRESH.
    -                AUTOPUSH: u1,
    -                ///  Pull automatically when the output shift register is emptied, i.e. on or following an OUT instruction which causes the output shift counter to reach or exceed PULL_THRESH.
    -                AUTOPULL: u1,
    -                ///  1 = shift input shift register to right (data enters from left). 0 = to left.
    -                IN_SHIFTDIR: u1,
    -                ///  1 = shift out of output shift register to right. 0 = to left.
    -                OUT_SHIFTDIR: u1,
    -                ///  Number of bits shifted into ISR before autopush, or conditional push (PUSH IFFULL), will take place.
    -                ///  Write 0 for value of 32.
    -                PUSH_THRESH: u5,
    -                ///  Number of bits shifted out of OSR before autopull, or conditional pull (PULL IFEMPTY), will take place.
    -                ///  Write 0 for value of 32.
    -                PULL_THRESH: u5,
    -                ///  When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.
    -                ///  RX FIFO is disabled as a result (always reads as both full and empty).
    -                ///  FIFOs are flushed when this bit is changed.
    -                FJOIN_TX: u1,
    -                ///  When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.
    -                ///  TX FIFO is disabled as a result (always reads as both full and empty).
    -                ///  FIFOs are flushed when this bit is changed.
    -                FJOIN_RX: u1,
    -            }),
    -            ///  Current instruction address of state machine 2
    -            SM2_ADDR: mmio.Mmio(packed struct(u32) {
    -                SM2_ADDR: u5,
    -                padding: u27,
    -            }),
    -            ///  Read to see the instruction currently addressed by state machine 2's program counter
    -            ///  Write to execute an instruction immediately (including jumps) and then resume execution.
    -            SM2_INSTR: mmio.Mmio(packed struct(u32) {
    -                SM2_INSTR: u16,
    -                padding: u16,
    -            }),
    -            ///  State machine pin control
    -            SM2_PINCTRL: mmio.Mmio(packed struct(u32) {
    -                ///  The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV PINS instruction. The data written to this pin will always be the least-significant bit of the OUT or MOV data.
    -                OUT_BASE: u5,
    -                ///  The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS instruction. The data written to this pin is the least-significant bit of the SET data.
    -                SET_BASE: u5,
    -                ///  The lowest-numbered pin that will be affected by a side-set operation. The MSBs of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT) are used for side-set data, with the remaining LSBs used for delay. The least-significant bit of the side-set portion is the bit written to this pin, with more-significant bits written to higher-numbered pins.
    -                SIDESET_BASE: u5,
    -                ///  The pin which is mapped to the least-significant bit of a state machine's IN data bus. Higher-numbered pins are mapped to consecutively more-significant data bits, with a modulo of 32 applied to pin number.
    -                IN_BASE: u5,
    -                ///  The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction. In the range 0 to 32 inclusive.
    -                OUT_COUNT: u6,
    -                ///  The number of pins asserted by a SET. In the range 0 to 5 inclusive.
    -                SET_COUNT: u3,
    -                ///  The number of MSBs of the Delay/Side-set instruction field which are used for side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits, no side-set) and maximum of 5 (all side-set, no delay).
    -                SIDESET_COUNT: u3,
    -            }),
    -            ///  Clock divisor register for state machine 3
    -            ///  Frequency = clock freq / (CLKDIV_INT + CLKDIV_FRAC / 256)
    -            SM3_CLKDIV: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  Fractional part of clock divisor
    -                FRAC: u8,
    -                ///  Effective frequency is sysclk/(int + frac/256).
    -                ///  Value of 0 is interpreted as 65536. If INT is 0, FRAC must also be 0.
    -                INT: u16,
    -            }),
    -            ///  Execution/behavioural settings for state machine 3
    -            SM3_EXECCTRL: mmio.Mmio(packed struct(u32) {
    -                ///  Comparison level for the MOV x, STATUS instruction
    -                STATUS_N: u4,
    -                ///  Comparison used for the MOV x, STATUS instruction.
    -                STATUS_SEL: packed union {
    -                    raw: u1,
    -                    value: enum(u1) {
    -                        ///  All-ones if TX FIFO level < N, otherwise all-zeroes
    -                        TXLEVEL = 0x0,
    -                        ///  All-ones if RX FIFO level < N, otherwise all-zeroes
    -                        RXLEVEL = 0x1,
    -                    },
    -                },
    -                reserved7: u2,
    -                ///  After reaching wrap_top, execution is wrapped to this address.
    -                WRAP_BOTTOM: u5,
    -                ///  After reaching this address, execution is wrapped to wrap_bottom.
    -                ///  If the instruction is a jump, and the jump condition is true, the jump takes priority.
    -                WRAP_TOP: u5,
    -                ///  Continuously assert the most recent OUT/SET to the pins
    -                OUT_STICKY: u1,
    -                ///  If 1, use a bit of OUT data as an auxiliary write enable
    -                ///  When used in conjunction with OUT_STICKY, writes with an enable of 0 will
    -                ///  deassert the latest pin write. This can create useful masking/override behaviour
    -                ///  due to the priority ordering of state machine pin writes (SM0 < SM1 < ...)
    -                INLINE_OUT_EN: u1,
    -                ///  Which data bit to use for inline OUT enable
    -                OUT_EN_SEL: u5,
    -                ///  The GPIO number to use as condition for JMP PIN. Unaffected by input mapping.
    -                JMP_PIN: u5,
    -                ///  If 1, side-set data is asserted to pin directions, instead of pin values
    -                SIDE_PINDIR: u1,
    -                ///  If 1, the MSB of the Delay/Side-set instruction field is used as side-set enable, rather than a side-set data bit. This allows instructions to perform side-set optionally, rather than on every instruction, but the maximum possible side-set width is reduced from 5 to 4. Note that the value of PINCTRL_SIDESET_COUNT is inclusive of this enable bit.
    -                SIDE_EN: u1,
    -                ///  If 1, an instruction written to SMx_INSTR is stalled, and latched by the state machine. Will clear to 0 once this instruction completes.
    -                EXEC_STALLED: u1,
    -            }),
    -            ///  Control behaviour of the input/output shift registers for state machine 3
    -            SM3_SHIFTCTRL: mmio.Mmio(packed struct(u32) {
    -                reserved16: u16,
    -                ///  Push automatically when the input shift register is filled, i.e. on an IN instruction which causes the input shift counter to reach or exceed PUSH_THRESH.
    -                AUTOPUSH: u1,
    -                ///  Pull automatically when the output shift register is emptied, i.e. on or following an OUT instruction which causes the output shift counter to reach or exceed PULL_THRESH.
    -                AUTOPULL: u1,
    -                ///  1 = shift input shift register to right (data enters from left). 0 = to left.
    -                IN_SHIFTDIR: u1,
    -                ///  1 = shift out of output shift register to right. 0 = to left.
    -                OUT_SHIFTDIR: u1,
    -                ///  Number of bits shifted into ISR before autopush, or conditional push (PUSH IFFULL), will take place.
    -                ///  Write 0 for value of 32.
    -                PUSH_THRESH: u5,
    -                ///  Number of bits shifted out of OSR before autopull, or conditional pull (PULL IFEMPTY), will take place.
    -                ///  Write 0 for value of 32.
    -                PULL_THRESH: u5,
    -                ///  When 1, TX FIFO steals the RX FIFO's storage, and becomes twice as deep.
    -                ///  RX FIFO is disabled as a result (always reads as both full and empty).
    -                ///  FIFOs are flushed when this bit is changed.
    -                FJOIN_TX: u1,
    -                ///  When 1, RX FIFO steals the TX FIFO's storage, and becomes twice as deep.
    -                ///  TX FIFO is disabled as a result (always reads as both full and empty).
    -                ///  FIFOs are flushed when this bit is changed.
    -                FJOIN_RX: u1,
    -            }),
    -            ///  Current instruction address of state machine 3
    -            SM3_ADDR: mmio.Mmio(packed struct(u32) {
    -                SM3_ADDR: u5,
    -                padding: u27,
    -            }),
    -            ///  Read to see the instruction currently addressed by state machine 3's program counter
    -            ///  Write to execute an instruction immediately (including jumps) and then resume execution.
    -            SM3_INSTR: mmio.Mmio(packed struct(u32) {
    -                SM3_INSTR: u16,
    -                padding: u16,
    -            }),
    -            ///  State machine pin control
    -            SM3_PINCTRL: mmio.Mmio(packed struct(u32) {
    -                ///  The lowest-numbered pin that will be affected by an OUT PINS, OUT PINDIRS or MOV PINS instruction. The data written to this pin will always be the least-significant bit of the OUT or MOV data.
    -                OUT_BASE: u5,
    -                ///  The lowest-numbered pin that will be affected by a SET PINS or SET PINDIRS instruction. The data written to this pin is the least-significant bit of the SET data.
    -                SET_BASE: u5,
    -                ///  The lowest-numbered pin that will be affected by a side-set operation. The MSBs of an instruction's side-set/delay field (up to 5, determined by SIDESET_COUNT) are used for side-set data, with the remaining LSBs used for delay. The least-significant bit of the side-set portion is the bit written to this pin, with more-significant bits written to higher-numbered pins.
    -                SIDESET_BASE: u5,
    -                ///  The pin which is mapped to the least-significant bit of a state machine's IN data bus. Higher-numbered pins are mapped to consecutively more-significant data bits, with a modulo of 32 applied to pin number.
    -                IN_BASE: u5,
    -                ///  The number of pins asserted by an OUT PINS, OUT PINDIRS or MOV PINS instruction. In the range 0 to 32 inclusive.
    -                OUT_COUNT: u6,
    -                ///  The number of pins asserted by a SET. In the range 0 to 5 inclusive.
    -                SET_COUNT: u3,
    -                ///  The number of MSBs of the Delay/Side-set instruction field which are used for side-set. Inclusive of the enable bit, if present. Minimum of 0 (all delay bits, no side-set) and maximum of 5 (all side-set, no delay).
    -                SIDESET_COUNT: u3,
    -            }),
    -            ///  Raw Interrupts
    -            INTR: mmio.Mmio(packed struct(u32) {
    -                SM0_RXNEMPTY: u1,
    -                SM1_RXNEMPTY: u1,
    -                SM2_RXNEMPTY: u1,
    -                SM3_RXNEMPTY: u1,
    -                SM0_TXNFULL: u1,
    -                SM1_TXNFULL: u1,
    -                SM2_TXNFULL: u1,
    -                SM3_TXNFULL: u1,
    -                SM0: u1,
    -                SM1: u1,
    -                SM2: u1,
    -                SM3: u1,
    -                padding: u20,
    -            }),
    -            ///  Interrupt Enable for irq0
    -            IRQ0_INTE: mmio.Mmio(packed struct(u32) {
    -                SM0_RXNEMPTY: u1,
    -                SM1_RXNEMPTY: u1,
    -                SM2_RXNEMPTY: u1,
    -                SM3_RXNEMPTY: u1,
    -                SM0_TXNFULL: u1,
    -                SM1_TXNFULL: u1,
    -                SM2_TXNFULL: u1,
    -                SM3_TXNFULL: u1,
    -                SM0: u1,
    -                SM1: u1,
    -                SM2: u1,
    -                SM3: u1,
    -                padding: u20,
    -            }),
    -            ///  Interrupt Force for irq0
    -            IRQ0_INTF: mmio.Mmio(packed struct(u32) {
    -                SM0_RXNEMPTY: u1,
    -                SM1_RXNEMPTY: u1,
    -                SM2_RXNEMPTY: u1,
    -                SM3_RXNEMPTY: u1,
    -                SM0_TXNFULL: u1,
    -                SM1_TXNFULL: u1,
    -                SM2_TXNFULL: u1,
    -                SM3_TXNFULL: u1,
    -                SM0: u1,
    -                SM1: u1,
    -                SM2: u1,
    -                SM3: u1,
    -                padding: u20,
    -            }),
    -            ///  Interrupt status after masking & forcing for irq0
    -            IRQ0_INTS: mmio.Mmio(packed struct(u32) {
    -                SM0_RXNEMPTY: u1,
    -                SM1_RXNEMPTY: u1,
    -                SM2_RXNEMPTY: u1,
    -                SM3_RXNEMPTY: u1,
    -                SM0_TXNFULL: u1,
    -                SM1_TXNFULL: u1,
    -                SM2_TXNFULL: u1,
    -                SM3_TXNFULL: u1,
    -                SM0: u1,
    -                SM1: u1,
    -                SM2: u1,
    -                SM3: u1,
    -                padding: u20,
    -            }),
    -            ///  Interrupt Enable for irq1
    -            IRQ1_INTE: mmio.Mmio(packed struct(u32) {
    -                SM0_RXNEMPTY: u1,
    -                SM1_RXNEMPTY: u1,
    -                SM2_RXNEMPTY: u1,
    -                SM3_RXNEMPTY: u1,
    -                SM0_TXNFULL: u1,
    -                SM1_TXNFULL: u1,
    -                SM2_TXNFULL: u1,
    -                SM3_TXNFULL: u1,
    -                SM0: u1,
    -                SM1: u1,
    -                SM2: u1,
    -                SM3: u1,
    -                padding: u20,
    -            }),
    -            ///  Interrupt Force for irq1
    -            IRQ1_INTF: mmio.Mmio(packed struct(u32) {
    -                SM0_RXNEMPTY: u1,
    -                SM1_RXNEMPTY: u1,
    -                SM2_RXNEMPTY: u1,
    -                SM3_RXNEMPTY: u1,
    -                SM0_TXNFULL: u1,
    -                SM1_TXNFULL: u1,
    -                SM2_TXNFULL: u1,
    -                SM3_TXNFULL: u1,
    -                SM0: u1,
    -                SM1: u1,
    -                SM2: u1,
    -                SM3: u1,
    -                padding: u20,
    -            }),
    -            ///  Interrupt status after masking & forcing for irq1
    -            IRQ1_INTS: mmio.Mmio(packed struct(u32) {
    -                SM0_RXNEMPTY: u1,
    -                SM1_RXNEMPTY: u1,
    -                SM2_RXNEMPTY: u1,
    -                SM3_RXNEMPTY: u1,
    -                SM0_TXNFULL: u1,
    -                SM1_TXNFULL: u1,
    -                SM2_TXNFULL: u1,
    -                SM3_TXNFULL: u1,
    -                SM0: u1,
    -                SM1: u1,
    -                SM2: u1,
    -                SM3: u1,
    -                padding: u20,
    -            }),
    -        };
    -
    -        ///  Control and data interface to SAR ADC
    -        pub const ADC = extern struct {
    -            ///  ADC Control and Status
    -            CS: mmio.Mmio(packed struct(u32) {
    -                ///  Power on ADC and enable its clock.
    -                ///  1 - enabled. 0 - disabled.
    -                EN: u1,
    -                ///  Power on temperature sensor. 1 - enabled. 0 - disabled.
    -                TS_EN: u1,
    -                ///  Start a single conversion. Self-clearing. Ignored if start_many is asserted.
    -                START_ONCE: u1,
    -                ///  Continuously perform conversions whilst this bit is 1. A new conversion will start immediately after the previous finishes.
    -                START_MANY: u1,
    -                reserved8: u4,
    -                ///  1 if the ADC is ready to start a new conversion. Implies any previous conversion has completed.
    -                ///  0 whilst conversion in progress.
    -                READY: u1,
    -                ///  The most recent ADC conversion encountered an error; result is undefined or noisy.
    -                ERR: u1,
    -                ///  Some past ADC conversion encountered an error. Write 1 to clear.
    -                ERR_STICKY: u1,
    -                reserved12: u1,
    -                ///  Select analog mux input. Updated automatically in round-robin mode.
    -                AINSEL: u3,
    -                reserved16: u1,
    -                ///  Round-robin sampling. 1 bit per channel. Set all bits to 0 to disable.
    -                ///  Otherwise, the ADC will cycle through each enabled channel in a round-robin fashion.
    -                ///  The first channel to be sampled will be the one currently indicated by AINSEL.
    -                ///  AINSEL will be updated after each conversion with the newly-selected channel.
    -                RROBIN: u5,
    -                padding: u11,
    -            }),
    -            ///  Result of most recent ADC conversion
    -            RESULT: mmio.Mmio(packed struct(u32) {
    -                RESULT: u12,
    -                padding: u20,
    -            }),
    -            ///  FIFO control and status
    -            FCS: mmio.Mmio(packed struct(u32) {
    -                ///  If 1: write result to the FIFO after each conversion.
    -                EN: u1,
    -                ///  If 1: FIFO results are right-shifted to be one byte in size. Enables DMA to byte buffers.
    -                SHIFT: u1,
    -                ///  If 1: conversion error bit appears in the FIFO alongside the result
    -                ERR: u1,
    -                ///  If 1: assert DMA requests when FIFO contains data
    -                DREQ_EN: u1,
    -                reserved8: u4,
    -                EMPTY: u1,
    -                FULL: u1,
    -                ///  1 if the FIFO has been underflowed. Write 1 to clear.
    -                UNDER: u1,
    -                ///  1 if the FIFO has been overflowed. Write 1 to clear.
    -                OVER: u1,
    -                reserved16: u4,
    -                ///  The number of conversion results currently waiting in the FIFO
    -                LEVEL: u4,
    -                reserved24: u4,
    -                ///  DREQ/IRQ asserted when level >= threshold
    -                THRESH: u4,
    -                padding: u4,
    -            }),
    -            ///  Conversion result FIFO
    -            FIFO: mmio.Mmio(packed struct(u32) {
    -                VAL: u12,
    -                reserved15: u3,
    -                ///  1 if this particular sample experienced a conversion error. Remains in the same location if the sample is shifted.
    -                ERR: u1,
    -                padding: u16,
    -            }),
    -            ///  Clock divider. If non-zero, CS_START_MANY will start conversions
    -            ///  at regular intervals rather than back-to-back.
    -            ///  The divider is reset when either of these fields are written.
    -            ///  Total period is 1 + INT + FRAC / 256
    -            DIV: mmio.Mmio(packed struct(u32) {
    -                ///  Fractional part of clock divisor. First-order delta-sigma.
    -                FRAC: u8,
    -                ///  Integer part of clock divisor.
    -                INT: u16,
    -                padding: u8,
    -            }),
    -            ///  Raw Interrupts
    -            INTR: mmio.Mmio(packed struct(u32) {
    -                ///  Triggered when the sample FIFO reaches a certain level.
    -                ///  This level can be programmed via the FCS_THRESH field.
    -                FIFO: u1,
    -                padding: u31,
    -            }),
    -            ///  Interrupt Enable
    -            INTE: mmio.Mmio(packed struct(u32) {
    -                ///  Triggered when the sample FIFO reaches a certain level.
    -                ///  This level can be programmed via the FCS_THRESH field.
    -                FIFO: u1,
    -                padding: u31,
    -            }),
    -            ///  Interrupt Force
    -            INTF: mmio.Mmio(packed struct(u32) {
    -                ///  Triggered when the sample FIFO reaches a certain level.
    -                ///  This level can be programmed via the FCS_THRESH field.
    -                FIFO: u1,
    -                padding: u31,
    -            }),
    -            ///  Interrupt status after masking & forcing
    -            INTS: mmio.Mmio(packed struct(u32) {
    -                ///  Triggered when the sample FIFO reaches a certain level.
    -                ///  This level can be programmed via the FCS_THRESH field.
    -                FIFO: u1,
    -                padding: u31,
    -            }),
    -        };
    -
    -        ///  Simple PWM
    -        pub const PWM = extern struct {
    -            ///  Control and status register
    -            CH0_CSR: mmio.Mmio(packed struct(u32) {
    -                ///  Enable the PWM channel.
    -                EN: u1,
    -                ///  1: Enable phase-correct modulation. 0: Trailing-edge
    -                PH_CORRECT: u1,
    -                ///  Invert output A
    -                A_INV: u1,
    -                ///  Invert output B
    -                B_INV: u1,
    -                DIVMODE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Free-running counting at rate dictated by fractional divider
    -                        div = 0x0,
    -                        ///  Fractional divider operation is gated by the PWM B pin.
    -                        level = 0x1,
    -                        ///  Counter advances with each rising edge of the PWM B pin.
    -                        rise = 0x2,
    -                        ///  Counter advances with each falling edge of the PWM B pin.
    -                        fall = 0x3,
    -                    },
    -                },
    -                ///  Retard the phase of the counter by 1 count, while it is running.
    -                ///  Self-clearing. Write a 1, and poll until low. Counter must be running.
    -                PH_RET: u1,
    -                ///  Advance the phase of the counter by 1 count, while it is running.
    -                ///  Self-clearing. Write a 1, and poll until low. Counter must be running
    -                ///  at less than full speed (div_int + div_frac / 16 > 1)
    -                PH_ADV: u1,
    -                padding: u24,
    -            }),
    -            ///  INT and FRAC form a fixed-point fractional number.
    -            ///  Counting rate is system clock frequency divided by this number.
    -            ///  Fractional division uses simple 1st-order sigma-delta.
    -            CH0_DIV: mmio.Mmio(packed struct(u32) {
    -                FRAC: u4,
    -                INT: u8,
    -                padding: u20,
    -            }),
    -            ///  Direct access to the PWM counter
    -            CH0_CTR: mmio.Mmio(packed struct(u32) {
    -                CH0_CTR: u16,
    -                padding: u16,
    -            }),
    -            ///  Counter compare values
    -            CH0_CC: mmio.Mmio(packed struct(u32) {
    -                A: u16,
    -                B: u16,
    -            }),
    -            ///  Counter wrap value
    -            CH0_TOP: mmio.Mmio(packed struct(u32) {
    -                CH0_TOP: u16,
    -                padding: u16,
    -            }),
    -            ///  Control and status register
    -            CH1_CSR: mmio.Mmio(packed struct(u32) {
    -                ///  Enable the PWM channel.
    -                EN: u1,
    -                ///  1: Enable phase-correct modulation. 0: Trailing-edge
    -                PH_CORRECT: u1,
    -                ///  Invert output A
    -                A_INV: u1,
    -                ///  Invert output B
    -                B_INV: u1,
    -                DIVMODE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Free-running counting at rate dictated by fractional divider
    -                        div = 0x0,
    -                        ///  Fractional divider operation is gated by the PWM B pin.
    -                        level = 0x1,
    -                        ///  Counter advances with each rising edge of the PWM B pin.
    -                        rise = 0x2,
    -                        ///  Counter advances with each falling edge of the PWM B pin.
    -                        fall = 0x3,
    -                    },
    -                },
    -                ///  Retard the phase of the counter by 1 count, while it is running.
    -                ///  Self-clearing. Write a 1, and poll until low. Counter must be running.
    -                PH_RET: u1,
    -                ///  Advance the phase of the counter by 1 count, while it is running.
    -                ///  Self-clearing. Write a 1, and poll until low. Counter must be running
    -                ///  at less than full speed (div_int + div_frac / 16 > 1)
    -                PH_ADV: u1,
    -                padding: u24,
    -            }),
    -            ///  INT and FRAC form a fixed-point fractional number.
    -            ///  Counting rate is system clock frequency divided by this number.
    -            ///  Fractional division uses simple 1st-order sigma-delta.
    -            CH1_DIV: mmio.Mmio(packed struct(u32) {
    -                FRAC: u4,
    -                INT: u8,
    -                padding: u20,
    -            }),
    -            ///  Direct access to the PWM counter
    -            CH1_CTR: mmio.Mmio(packed struct(u32) {
    -                CH1_CTR: u16,
    -                padding: u16,
    -            }),
    -            ///  Counter compare values
    -            CH1_CC: mmio.Mmio(packed struct(u32) {
    -                A: u16,
    -                B: u16,
    -            }),
    -            ///  Counter wrap value
    -            CH1_TOP: mmio.Mmio(packed struct(u32) {
    -                CH1_TOP: u16,
    -                padding: u16,
    -            }),
    -            ///  Control and status register
    -            CH2_CSR: mmio.Mmio(packed struct(u32) {
    -                ///  Enable the PWM channel.
    -                EN: u1,
    -                ///  1: Enable phase-correct modulation. 0: Trailing-edge
    -                PH_CORRECT: u1,
    -                ///  Invert output A
    -                A_INV: u1,
    -                ///  Invert output B
    -                B_INV: u1,
    -                DIVMODE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Free-running counting at rate dictated by fractional divider
    -                        div = 0x0,
    -                        ///  Fractional divider operation is gated by the PWM B pin.
    -                        level = 0x1,
    -                        ///  Counter advances with each rising edge of the PWM B pin.
    -                        rise = 0x2,
    -                        ///  Counter advances with each falling edge of the PWM B pin.
    -                        fall = 0x3,
    -                    },
    -                },
    -                ///  Retard the phase of the counter by 1 count, while it is running.
    -                ///  Self-clearing. Write a 1, and poll until low. Counter must be running.
    -                PH_RET: u1,
    -                ///  Advance the phase of the counter by 1 count, while it is running.
    -                ///  Self-clearing. Write a 1, and poll until low. Counter must be running
    -                ///  at less than full speed (div_int + div_frac / 16 > 1)
    -                PH_ADV: u1,
    -                padding: u24,
    -            }),
    -            ///  INT and FRAC form a fixed-point fractional number.
    -            ///  Counting rate is system clock frequency divided by this number.
    -            ///  Fractional division uses simple 1st-order sigma-delta.
    -            CH2_DIV: mmio.Mmio(packed struct(u32) {
    -                FRAC: u4,
    -                INT: u8,
    -                padding: u20,
    -            }),
    -            ///  Direct access to the PWM counter
    -            CH2_CTR: mmio.Mmio(packed struct(u32) {
    -                CH2_CTR: u16,
    -                padding: u16,
    -            }),
    -            ///  Counter compare values
    -            CH2_CC: mmio.Mmio(packed struct(u32) {
    -                A: u16,
    -                B: u16,
    -            }),
    -            ///  Counter wrap value
    -            CH2_TOP: mmio.Mmio(packed struct(u32) {
    -                CH2_TOP: u16,
    -                padding: u16,
    -            }),
    -            ///  Control and status register
    -            CH3_CSR: mmio.Mmio(packed struct(u32) {
    -                ///  Enable the PWM channel.
    -                EN: u1,
    -                ///  1: Enable phase-correct modulation. 0: Trailing-edge
    -                PH_CORRECT: u1,
    -                ///  Invert output A
    -                A_INV: u1,
    -                ///  Invert output B
    -                B_INV: u1,
    -                DIVMODE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Free-running counting at rate dictated by fractional divider
    -                        div = 0x0,
    -                        ///  Fractional divider operation is gated by the PWM B pin.
    -                        level = 0x1,
    -                        ///  Counter advances with each rising edge of the PWM B pin.
    -                        rise = 0x2,
    -                        ///  Counter advances with each falling edge of the PWM B pin.
    -                        fall = 0x3,
    -                    },
    -                },
    -                ///  Retard the phase of the counter by 1 count, while it is running.
    -                ///  Self-clearing. Write a 1, and poll until low. Counter must be running.
    -                PH_RET: u1,
    -                ///  Advance the phase of the counter by 1 count, while it is running.
    -                ///  Self-clearing. Write a 1, and poll until low. Counter must be running
    -                ///  at less than full speed (div_int + div_frac / 16 > 1)
    -                PH_ADV: u1,
    -                padding: u24,
    -            }),
    -            ///  INT and FRAC form a fixed-point fractional number.
    -            ///  Counting rate is system clock frequency divided by this number.
    -            ///  Fractional division uses simple 1st-order sigma-delta.
    -            CH3_DIV: mmio.Mmio(packed struct(u32) {
    -                FRAC: u4,
    -                INT: u8,
    -                padding: u20,
    -            }),
    -            ///  Direct access to the PWM counter
    -            CH3_CTR: mmio.Mmio(packed struct(u32) {
    -                CH3_CTR: u16,
    -                padding: u16,
    -            }),
    -            ///  Counter compare values
    -            CH3_CC: mmio.Mmio(packed struct(u32) {
    -                A: u16,
    -                B: u16,
    -            }),
    -            ///  Counter wrap value
    -            CH3_TOP: mmio.Mmio(packed struct(u32) {
    -                CH3_TOP: u16,
    -                padding: u16,
    -            }),
    -            ///  Control and status register
    -            CH4_CSR: mmio.Mmio(packed struct(u32) {
    -                ///  Enable the PWM channel.
    -                EN: u1,
    -                ///  1: Enable phase-correct modulation. 0: Trailing-edge
    -                PH_CORRECT: u1,
    -                ///  Invert output A
    -                A_INV: u1,
    -                ///  Invert output B
    -                B_INV: u1,
    -                DIVMODE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Free-running counting at rate dictated by fractional divider
    -                        div = 0x0,
    -                        ///  Fractional divider operation is gated by the PWM B pin.
    -                        level = 0x1,
    -                        ///  Counter advances with each rising edge of the PWM B pin.
    -                        rise = 0x2,
    -                        ///  Counter advances with each falling edge of the PWM B pin.
    -                        fall = 0x3,
    -                    },
    -                },
    -                ///  Retard the phase of the counter by 1 count, while it is running.
    -                ///  Self-clearing. Write a 1, and poll until low. Counter must be running.
    -                PH_RET: u1,
    -                ///  Advance the phase of the counter by 1 count, while it is running.
    -                ///  Self-clearing. Write a 1, and poll until low. Counter must be running
    -                ///  at less than full speed (div_int + div_frac / 16 > 1)
    -                PH_ADV: u1,
    -                padding: u24,
    -            }),
    -            ///  INT and FRAC form a fixed-point fractional number.
    -            ///  Counting rate is system clock frequency divided by this number.
    -            ///  Fractional division uses simple 1st-order sigma-delta.
    -            CH4_DIV: mmio.Mmio(packed struct(u32) {
    -                FRAC: u4,
    -                INT: u8,
    -                padding: u20,
    -            }),
    -            ///  Direct access to the PWM counter
    -            CH4_CTR: mmio.Mmio(packed struct(u32) {
    -                CH4_CTR: u16,
    -                padding: u16,
    -            }),
    -            ///  Counter compare values
    -            CH4_CC: mmio.Mmio(packed struct(u32) {
    -                A: u16,
    -                B: u16,
    -            }),
    -            ///  Counter wrap value
    -            CH4_TOP: mmio.Mmio(packed struct(u32) {
    -                CH4_TOP: u16,
    -                padding: u16,
    -            }),
    -            ///  Control and status register
    -            CH5_CSR: mmio.Mmio(packed struct(u32) {
    -                ///  Enable the PWM channel.
    -                EN: u1,
    -                ///  1: Enable phase-correct modulation. 0: Trailing-edge
    -                PH_CORRECT: u1,
    -                ///  Invert output A
    -                A_INV: u1,
    -                ///  Invert output B
    -                B_INV: u1,
    -                DIVMODE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Free-running counting at rate dictated by fractional divider
    -                        div = 0x0,
    -                        ///  Fractional divider operation is gated by the PWM B pin.
    -                        level = 0x1,
    -                        ///  Counter advances with each rising edge of the PWM B pin.
    -                        rise = 0x2,
    -                        ///  Counter advances with each falling edge of the PWM B pin.
    -                        fall = 0x3,
    -                    },
    -                },
    -                ///  Retard the phase of the counter by 1 count, while it is running.
    -                ///  Self-clearing. Write a 1, and poll until low. Counter must be running.
    -                PH_RET: u1,
    -                ///  Advance the phase of the counter by 1 count, while it is running.
    -                ///  Self-clearing. Write a 1, and poll until low. Counter must be running
    -                ///  at less than full speed (div_int + div_frac / 16 > 1)
    -                PH_ADV: u1,
    -                padding: u24,
    -            }),
    -            ///  INT and FRAC form a fixed-point fractional number.
    -            ///  Counting rate is system clock frequency divided by this number.
    -            ///  Fractional division uses simple 1st-order sigma-delta.
    -            CH5_DIV: mmio.Mmio(packed struct(u32) {
    -                FRAC: u4,
    -                INT: u8,
    -                padding: u20,
    -            }),
    -            ///  Direct access to the PWM counter
    -            CH5_CTR: mmio.Mmio(packed struct(u32) {
    -                CH5_CTR: u16,
    -                padding: u16,
    -            }),
    -            ///  Counter compare values
    -            CH5_CC: mmio.Mmio(packed struct(u32) {
    -                A: u16,
    -                B: u16,
    -            }),
    -            ///  Counter wrap value
    -            CH5_TOP: mmio.Mmio(packed struct(u32) {
    -                CH5_TOP: u16,
    -                padding: u16,
    -            }),
    -            ///  Control and status register
    -            CH6_CSR: mmio.Mmio(packed struct(u32) {
    -                ///  Enable the PWM channel.
    -                EN: u1,
    -                ///  1: Enable phase-correct modulation. 0: Trailing-edge
    -                PH_CORRECT: u1,
    -                ///  Invert output A
    -                A_INV: u1,
    -                ///  Invert output B
    -                B_INV: u1,
    -                DIVMODE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Free-running counting at rate dictated by fractional divider
    -                        div = 0x0,
    -                        ///  Fractional divider operation is gated by the PWM B pin.
    -                        level = 0x1,
    -                        ///  Counter advances with each rising edge of the PWM B pin.
    -                        rise = 0x2,
    -                        ///  Counter advances with each falling edge of the PWM B pin.
    -                        fall = 0x3,
    -                    },
    -                },
    -                ///  Retard the phase of the counter by 1 count, while it is running.
    -                ///  Self-clearing. Write a 1, and poll until low. Counter must be running.
    -                PH_RET: u1,
    -                ///  Advance the phase of the counter by 1 count, while it is running.
    -                ///  Self-clearing. Write a 1, and poll until low. Counter must be running
    -                ///  at less than full speed (div_int + div_frac / 16 > 1)
    -                PH_ADV: u1,
    -                padding: u24,
    -            }),
    -            ///  INT and FRAC form a fixed-point fractional number.
    -            ///  Counting rate is system clock frequency divided by this number.
    -            ///  Fractional division uses simple 1st-order sigma-delta.
    -            CH6_DIV: mmio.Mmio(packed struct(u32) {
    -                FRAC: u4,
    -                INT: u8,
    -                padding: u20,
    -            }),
    -            ///  Direct access to the PWM counter
    -            CH6_CTR: mmio.Mmio(packed struct(u32) {
    -                CH6_CTR: u16,
    -                padding: u16,
    -            }),
    -            ///  Counter compare values
    -            CH6_CC: mmio.Mmio(packed struct(u32) {
    -                A: u16,
    -                B: u16,
    -            }),
    -            ///  Counter wrap value
    -            CH6_TOP: mmio.Mmio(packed struct(u32) {
    -                CH6_TOP: u16,
    -                padding: u16,
    -            }),
    -            ///  Control and status register
    -            CH7_CSR: mmio.Mmio(packed struct(u32) {
    -                ///  Enable the PWM channel.
    -                EN: u1,
    -                ///  1: Enable phase-correct modulation. 0: Trailing-edge
    -                PH_CORRECT: u1,
    -                ///  Invert output A
    -                A_INV: u1,
    -                ///  Invert output B
    -                B_INV: u1,
    -                DIVMODE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        ///  Free-running counting at rate dictated by fractional divider
    -                        div = 0x0,
    -                        ///  Fractional divider operation is gated by the PWM B pin.
    -                        level = 0x1,
    -                        ///  Counter advances with each rising edge of the PWM B pin.
    -                        rise = 0x2,
    -                        ///  Counter advances with each falling edge of the PWM B pin.
    -                        fall = 0x3,
    -                    },
    -                },
    -                ///  Retard the phase of the counter by 1 count, while it is running.
    -                ///  Self-clearing. Write a 1, and poll until low. Counter must be running.
    -                PH_RET: u1,
    -                ///  Advance the phase of the counter by 1 count, while it is running.
    -                ///  Self-clearing. Write a 1, and poll until low. Counter must be running
    -                ///  at less than full speed (div_int + div_frac / 16 > 1)
    -                PH_ADV: u1,
    -                padding: u24,
    -            }),
    -            ///  INT and FRAC form a fixed-point fractional number.
    -            ///  Counting rate is system clock frequency divided by this number.
    -            ///  Fractional division uses simple 1st-order sigma-delta.
    -            CH7_DIV: mmio.Mmio(packed struct(u32) {
    -                FRAC: u4,
    -                INT: u8,
    -                padding: u20,
    -            }),
    -            ///  Direct access to the PWM counter
    -            CH7_CTR: mmio.Mmio(packed struct(u32) {
    -                CH7_CTR: u16,
    -                padding: u16,
    -            }),
    -            ///  Counter compare values
    -            CH7_CC: mmio.Mmio(packed struct(u32) {
    -                A: u16,
    -                B: u16,
    -            }),
    -            ///  Counter wrap value
    -            CH7_TOP: mmio.Mmio(packed struct(u32) {
    -                CH7_TOP: u16,
    -                padding: u16,
    -            }),
    -            ///  This register aliases the CSR_EN bits for all channels.
    -            ///  Writing to this register allows multiple channels to be enabled
    -            ///  or disabled simultaneously, so they can run in perfect sync.
    -            ///  For each channel, there is only one physical EN register bit,
    -            ///  which can be accessed through here or CHx_CSR.
    -            EN: mmio.Mmio(packed struct(u32) {
    -                CH0: u1,
    -                CH1: u1,
    -                CH2: u1,
    -                CH3: u1,
    -                CH4: u1,
    -                CH5: u1,
    -                CH6: u1,
    -                CH7: u1,
    -                padding: u24,
    -            }),
    -            ///  Raw Interrupts
    -            INTR: mmio.Mmio(packed struct(u32) {
    -                CH0: u1,
    -                CH1: u1,
    -                CH2: u1,
    -                CH3: u1,
    -                CH4: u1,
    -                CH5: u1,
    -                CH6: u1,
    -                CH7: u1,
    -                padding: u24,
    -            }),
    -            ///  Interrupt Enable
    -            INTE: mmio.Mmio(packed struct(u32) {
    -                CH0: u1,
    -                CH1: u1,
    -                CH2: u1,
    -                CH3: u1,
    -                CH4: u1,
    -                CH5: u1,
    -                CH6: u1,
    -                CH7: u1,
    -                padding: u24,
    -            }),
    -            ///  Interrupt Force
    -            INTF: mmio.Mmio(packed struct(u32) {
    -                CH0: u1,
    -                CH1: u1,
    -                CH2: u1,
    -                CH3: u1,
    -                CH4: u1,
    -                CH5: u1,
    -                CH6: u1,
    -                CH7: u1,
    -                padding: u24,
    -            }),
    -            ///  Interrupt status after masking & forcing
    -            INTS: mmio.Mmio(packed struct(u32) {
    -                CH0: u1,
    -                CH1: u1,
    -                CH2: u1,
    -                CH3: u1,
    -                CH4: u1,
    -                CH5: u1,
    -                CH6: u1,
    -                CH7: u1,
    -                padding: u24,
    -            }),
    -        };
    -
    -        ///  Controls time and alarms
    -        ///  time is a 64 bit value indicating the time in usec since power-on
    -        ///  timeh is the top 32 bits of time & timel is the bottom 32 bits
    -        ///  to change time write to timelw before timehw
    -        ///  to read time read from timelr before timehr
    -        ///  An alarm is set by setting alarm_enable and writing to the corresponding alarm register
    -        ///  When an alarm is pending, the corresponding alarm_running signal will be high
    -        ///  An alarm can be cancelled before it has finished by clearing the alarm_enable
    -        ///  When an alarm fires, the corresponding alarm_irq is set and alarm_running is cleared
    -        ///  To clear the interrupt write a 1 to the corresponding alarm_irq
    -        pub const TIMER = extern struct {
    -            ///  Write to bits 63:32 of time
    -            ///  always write timelw before timehw
    -            TIMEHW: u32,
    -            ///  Write to bits 31:0 of time
    -            ///  writes do not get copied to time until timehw is written
    -            TIMELW: u32,
    -            ///  Read from bits 63:32 of time
    -            ///  always read timelr before timehr
    -            TIMEHR: u32,
    -            ///  Read from bits 31:0 of time
    -            TIMELR: u32,
    -            ///  Arm alarm 0, and configure the time it will fire.
    -            ///  Once armed, the alarm fires when TIMER_ALARM0 == TIMELR.
    -            ///  The alarm will disarm itself once it fires, and can
    -            ///  be disarmed early using the ARMED status register.
    -            ALARM0: u32,
    -            ///  Arm alarm 1, and configure the time it will fire.
    -            ///  Once armed, the alarm fires when TIMER_ALARM1 == TIMELR.
    -            ///  The alarm will disarm itself once it fires, and can
    -            ///  be disarmed early using the ARMED status register.
    -            ALARM1: u32,
    -            ///  Arm alarm 2, and configure the time it will fire.
    -            ///  Once armed, the alarm fires when TIMER_ALARM2 == TIMELR.
    -            ///  The alarm will disarm itself once it fires, and can
    -            ///  be disarmed early using the ARMED status register.
    -            ALARM2: u32,
    -            ///  Arm alarm 3, and configure the time it will fire.
    -            ///  Once armed, the alarm fires when TIMER_ALARM3 == TIMELR.
    -            ///  The alarm will disarm itself once it fires, and can
    -            ///  be disarmed early using the ARMED status register.
    -            ALARM3: u32,
    -            ///  Indicates the armed/disarmed status of each alarm.
    -            ///  A write to the corresponding ALARMx register arms the alarm.
    -            ///  Alarms automatically disarm upon firing, but writing ones here
    -            ///  will disarm immediately without waiting to fire.
    -            ARMED: mmio.Mmio(packed struct(u32) {
    -                ARMED: u4,
    -                padding: u28,
    -            }),
    -            ///  Raw read from bits 63:32 of time (no side effects)
    -            TIMERAWH: u32,
    -            ///  Raw read from bits 31:0 of time (no side effects)
    -            TIMERAWL: u32,
    -            ///  Set bits high to enable pause when the corresponding debug ports are active
    -            DBGPAUSE: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Pause when processor 0 is in debug mode
    -                DBG0: u1,
    -                ///  Pause when processor 1 is in debug mode
    -                DBG1: u1,
    -                padding: u29,
    -            }),
    -            ///  Set high to pause the timer
    -            PAUSE: mmio.Mmio(packed struct(u32) {
    -                PAUSE: u1,
    -                padding: u31,
    -            }),
    -            ///  Raw Interrupts
    -            INTR: mmio.Mmio(packed struct(u32) {
    -                ALARM_0: u1,
    -                ALARM_1: u1,
    -                ALARM_2: u1,
    -                ALARM_3: u1,
    -                padding: u28,
    -            }),
    -            ///  Interrupt Enable
    -            INTE: mmio.Mmio(packed struct(u32) {
    -                ALARM_0: u1,
    -                ALARM_1: u1,
    -                ALARM_2: u1,
    -                ALARM_3: u1,
    -                padding: u28,
    -            }),
    -            ///  Interrupt Force
    -            INTF: mmio.Mmio(packed struct(u32) {
    -                ALARM_0: u1,
    -                ALARM_1: u1,
    -                ALARM_2: u1,
    -                ALARM_3: u1,
    -                padding: u28,
    -            }),
    -            ///  Interrupt status after masking & forcing
    -            INTS: mmio.Mmio(packed struct(u32) {
    -                ALARM_0: u1,
    -                ALARM_1: u1,
    -                ALARM_2: u1,
    -                ALARM_3: u1,
    -                padding: u28,
    -            }),
    -        };
    -
    -        pub const WATCHDOG = extern struct {
    -            ///  Watchdog control
    -            ///  The rst_wdsel register determines which subsystems are reset when the watchdog is triggered.
    -            ///  The watchdog can be triggered in software.
    -            CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  Indicates the number of ticks / 2 (see errata RP2040-E1) before a watchdog reset will be triggered
    -                TIME: u24,
    -                ///  Pause the watchdog timer when JTAG is accessing the bus fabric
    -                PAUSE_JTAG: u1,
    -                ///  Pause the watchdog timer when processor 0 is in debug mode
    -                PAUSE_DBG0: u1,
    -                ///  Pause the watchdog timer when processor 1 is in debug mode
    -                PAUSE_DBG1: u1,
    -                reserved30: u3,
    -                ///  When not enabled the watchdog timer is paused
    -                ENABLE: u1,
    -                ///  Trigger a watchdog reset
    -                TRIGGER: u1,
    -            }),
    -            ///  Load the watchdog timer. The maximum setting is 0xffffff which corresponds to 0xffffff / 2 ticks before triggering a watchdog reset (see errata RP2040-E1).
    -            LOAD: mmio.Mmio(packed struct(u32) {
    -                LOAD: u24,
    -                padding: u8,
    -            }),
    -            ///  Logs the reason for the last reset. Both bits are zero for the case of a hardware reset.
    -            REASON: mmio.Mmio(packed struct(u32) {
    -                TIMER: u1,
    -                FORCE: u1,
    -                padding: u30,
    -            }),
    -            ///  Scratch register. Information persists through soft reset of the chip.
    -            SCRATCH0: u32,
    -            ///  Scratch register. Information persists through soft reset of the chip.
    -            SCRATCH1: u32,
    -            ///  Scratch register. Information persists through soft reset of the chip.
    -            SCRATCH2: u32,
    -            ///  Scratch register. Information persists through soft reset of the chip.
    -            SCRATCH3: u32,
    -            ///  Scratch register. Information persists through soft reset of the chip.
    -            SCRATCH4: u32,
    -            ///  Scratch register. Information persists through soft reset of the chip.
    -            SCRATCH5: u32,
    -            ///  Scratch register. Information persists through soft reset of the chip.
    -            SCRATCH6: u32,
    -            ///  Scratch register. Information persists through soft reset of the chip.
    -            SCRATCH7: u32,
    -            ///  Controls the tick generator
    -            TICK: mmio.Mmio(packed struct(u32) {
    -                ///  Total number of clk_tick cycles before the next tick.
    -                CYCLES: u9,
    -                ///  start / stop tick generation
    -                ENABLE: u1,
    -                ///  Is the tick generator running?
    -                RUNNING: u1,
    -                ///  Count down timer: the remaining number clk_tick cycles before the next tick is generated.
    -                COUNT: u9,
    -                padding: u12,
    -            }),
    -        };
    -
    -        ///  Register block to control RTC
    -        pub const RTC = extern struct {
    -            ///  Divider minus 1 for the 1 second counter. Safe to change the value when RTC is not enabled.
    -            CLKDIV_M1: mmio.Mmio(packed struct(u32) {
    -                CLKDIV_M1: u16,
    -                padding: u16,
    -            }),
    -            ///  RTC setup register 0
    -            SETUP_0: mmio.Mmio(packed struct(u32) {
    -                ///  Day of the month (1..31)
    -                DAY: u5,
    -                reserved8: u3,
    -                ///  Month (1..12)
    -                MONTH: u4,
    -                ///  Year
    -                YEAR: u12,
    -                padding: u8,
    -            }),
    -            ///  RTC setup register 1
    -            SETUP_1: mmio.Mmio(packed struct(u32) {
    -                ///  Seconds
    -                SEC: u6,
    -                reserved8: u2,
    -                ///  Minutes
    -                MIN: u6,
    -                reserved16: u2,
    -                ///  Hours
    -                HOUR: u5,
    -                reserved24: u3,
    -                ///  Day of the week: 1-Monday...0-Sunday ISO 8601 mod 7
    -                DOTW: u3,
    -                padding: u5,
    -            }),
    -            ///  RTC Control and status
    -            CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  Enable RTC
    -                RTC_ENABLE: u1,
    -                ///  RTC enabled (running)
    -                RTC_ACTIVE: u1,
    -                reserved4: u2,
    -                ///  Load RTC
    -                LOAD: u1,
    -                reserved8: u3,
    -                ///  If set, leapyear is forced off.
    -                ///  Useful for years divisible by 100 but not by 400
    -                FORCE_NOTLEAPYEAR: u1,
    -                padding: u23,
    -            }),
    -            ///  Interrupt setup register 0
    -            IRQ_SETUP_0: mmio.Mmio(packed struct(u32) {
    -                ///  Day of the month (1..31)
    -                DAY: u5,
    -                reserved8: u3,
    -                ///  Month (1..12)
    -                MONTH: u4,
    -                ///  Year
    -                YEAR: u12,
    -                ///  Enable day matching
    -                DAY_ENA: u1,
    -                ///  Enable month matching
    -                MONTH_ENA: u1,
    -                ///  Enable year matching
    -                YEAR_ENA: u1,
    -                reserved28: u1,
    -                ///  Global match enable. Don't change any other value while this one is enabled
    -                MATCH_ENA: u1,
    -                MATCH_ACTIVE: u1,
    -                padding: u2,
    -            }),
    -            ///  Interrupt setup register 1
    -            IRQ_SETUP_1: mmio.Mmio(packed struct(u32) {
    -                ///  Seconds
    -                SEC: u6,
    -                reserved8: u2,
    -                ///  Minutes
    -                MIN: u6,
    -                reserved16: u2,
    -                ///  Hours
    -                HOUR: u5,
    -                reserved24: u3,
    -                ///  Day of the week
    -                DOTW: u3,
    -                reserved28: u1,
    -                ///  Enable second matching
    -                SEC_ENA: u1,
    -                ///  Enable minute matching
    -                MIN_ENA: u1,
    -                ///  Enable hour matching
    -                HOUR_ENA: u1,
    -                ///  Enable day of the week matching
    -                DOTW_ENA: u1,
    -            }),
    -            ///  RTC register 1.
    -            RTC_1: mmio.Mmio(packed struct(u32) {
    -                ///  Day of the month (1..31)
    -                DAY: u5,
    -                reserved8: u3,
    -                ///  Month (1..12)
    -                MONTH: u4,
    -                ///  Year
    -                YEAR: u12,
    -                padding: u8,
    -            }),
    -            ///  RTC register 0
    -            ///  Read this before RTC 1!
    -            RTC_0: mmio.Mmio(packed struct(u32) {
    -                ///  Seconds
    -                SEC: u6,
    -                reserved8: u2,
    -                ///  Minutes
    -                MIN: u6,
    -                reserved16: u2,
    -                ///  Hours
    -                HOUR: u5,
    -                reserved24: u3,
    -                ///  Day of the week
    -                DOTW: u3,
    -                padding: u5,
    -            }),
    -            ///  Raw Interrupts
    -            INTR: mmio.Mmio(packed struct(u32) {
    -                RTC: u1,
    -                padding: u31,
    -            }),
    -            ///  Interrupt Enable
    -            INTE: mmio.Mmio(packed struct(u32) {
    -                RTC: u1,
    -                padding: u31,
    -            }),
    -            ///  Interrupt Force
    -            INTF: mmio.Mmio(packed struct(u32) {
    -                RTC: u1,
    -                padding: u31,
    -            }),
    -            ///  Interrupt status after masking & forcing
    -            INTS: mmio.Mmio(packed struct(u32) {
    -                RTC: u1,
    -                padding: u31,
    -            }),
    -        };
    -
    -        pub const ROSC = extern struct {
    -            ///  Ring Oscillator control
    -            CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  Controls the number of delay stages in the ROSC ring
    -                ///  LOW uses stages 0 to 7
    -                ///  MEDIUM uses stages 0 to 5
    -                ///  HIGH uses stages 0 to 3
    -                ///  TOOHIGH uses stages 0 to 1 and should not be used because its frequency exceeds design specifications
    -                ///  The clock output will not glitch when changing the range up one step at a time
    -                ///  The clock output will glitch when changing the range down
    -                ///  Note: the values here are gray coded which is why HIGH comes before TOOHIGH
    -                FREQ_RANGE: packed union {
    -                    raw: u12,
    -                    value: enum(u12) {
    -                        LOW = 0xfa4,
    -                        MEDIUM = 0xfa5,
    -                        HIGH = 0xfa7,
    -                        TOOHIGH = 0xfa6,
    -                        _,
    -                    },
    -                },
    -                ///  On power-up this field is initialised to ENABLE
    -                ///  The system clock must be switched to another source before setting this field to DISABLE otherwise the chip will lock up
    -                ///  The 12-bit code is intended to give some protection against accidental writes. An invalid setting will enable the oscillator.
    -                ENABLE: packed union {
    -                    raw: u12,
    -                    value: enum(u12) {
    -                        DISABLE = 0xd1e,
    -                        ENABLE = 0xfab,
    -                        _,
    -                    },
    -                },
    -                padding: u8,
    -            }),
    -            ///  The FREQA & FREQB registers control the frequency by controlling the drive strength of each stage
    -            ///  The drive strength has 4 levels determined by the number of bits set
    -            ///  Increasing the number of bits set increases the drive strength and increases the oscillation frequency
    -            ///  0 bits set is the default drive strength
    -            ///  1 bit set doubles the drive strength
    -            ///  2 bits set triples drive strength
    -            ///  3 bits set quadruples drive strength
    -            FREQA: mmio.Mmio(packed struct(u32) {
    -                ///  Stage 0 drive strength
    -                DS0: u3,
    -                reserved4: u1,
    -                ///  Stage 1 drive strength
    -                DS1: u3,
    -                reserved8: u1,
    -                ///  Stage 2 drive strength
    -                DS2: u3,
    -                reserved12: u1,
    -                ///  Stage 3 drive strength
    -                DS3: u3,
    -                reserved16: u1,
    -                ///  Set to 0x9696 to apply the settings
    -                ///  Any other value in this field will set all drive strengths to 0
    -                PASSWD: packed union {
    -                    raw: u16,
    -                    value: enum(u16) {
    -                        PASS = 0x9696,
    -                        _,
    -                    },
    -                },
    -            }),
    -            ///  For a detailed description see freqa register
    -            FREQB: mmio.Mmio(packed struct(u32) {
    -                ///  Stage 4 drive strength
    -                DS4: u3,
    -                reserved4: u1,
    -                ///  Stage 5 drive strength
    -                DS5: u3,
    -                reserved8: u1,
    -                ///  Stage 6 drive strength
    -                DS6: u3,
    -                reserved12: u1,
    -                ///  Stage 7 drive strength
    -                DS7: u3,
    -                reserved16: u1,
    -                ///  Set to 0x9696 to apply the settings
    -                ///  Any other value in this field will set all drive strengths to 0
    -                PASSWD: packed union {
    -                    raw: u16,
    -                    value: enum(u16) {
    -                        PASS = 0x9696,
    -                        _,
    -                    },
    -                },
    -            }),
    -            ///  Ring Oscillator pause control
    -            ///  This is used to save power by pausing the ROSC
    -            ///  On power-up this field is initialised to WAKE
    -            ///  An invalid write will also select WAKE
    -            ///  Warning: setup the irq before selecting dormant mode
    -            DORMANT: u32,
    -            ///  Controls the output divider
    -            DIV: mmio.Mmio(packed struct(u32) {
    -                ///  set to 0xaa0 + div where
    -                ///  div = 0 divides by 32
    -                ///  div = 1-31 divides by div
    -                ///  any other value sets div=31
    -                ///  this register resets to div=16
    -                DIV: packed union {
    -                    raw: u12,
    -                    value: enum(u12) {
    -                        PASS = 0xaa0,
    -                        _,
    -                    },
    -                },
    -                padding: u20,
    -            }),
    -            ///  Controls the phase shifted output
    -            PHASE: mmio.Mmio(packed struct(u32) {
    -                ///  phase shift the phase-shifted output by SHIFT input clocks
    -                ///  this can be changed on-the-fly
    -                ///  must be set to 0 before setting div=1
    -                SHIFT: u2,
    -                ///  invert the phase-shifted output
    -                ///  this is ignored when div=1
    -                FLIP: u1,
    -                ///  enable the phase-shifted output
    -                ///  this can be changed on-the-fly
    -                ENABLE: u1,
    -                ///  set to 0xaa
    -                ///  any other value enables the output with shift=0
    -                PASSWD: u8,
    -                padding: u20,
    -            }),
    -            ///  Ring Oscillator Status
    -            STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved12: u12,
    -                ///  Oscillator is enabled but not necessarily running and stable
    -                ///  this resets to 0 but transitions to 1 during chip startup
    -                ENABLED: u1,
    -                reserved16: u3,
    -                ///  post-divider is running
    -                ///  this resets to 0 but transitions to 1 during chip startup
    -                DIV_RUNNING: u1,
    -                reserved24: u7,
    -                ///  An invalid value has been written to CTRL_ENABLE or CTRL_FREQ_RANGE or FREQA or FREQB or DIV or PHASE or DORMANT
    -                BADWRITE: u1,
    -                reserved31: u6,
    -                ///  Oscillator is running and stable
    -                STABLE: u1,
    -            }),
    -            ///  This just reads the state of the oscillator output so randomness is compromised if the ring oscillator is stopped or run at a harmonic of the bus frequency
    -            RANDOMBIT: mmio.Mmio(packed struct(u32) {
    -                RANDOMBIT: u1,
    -                padding: u31,
    -            }),
    -            ///  A down counter running at the ROSC frequency which counts to zero and stops.
    -            ///  To start the counter write a non-zero value.
    -            ///  Can be used for short software pauses when setting up time sensitive hardware.
    -            COUNT: mmio.Mmio(packed struct(u32) {
    -                COUNT: u8,
    -                padding: u24,
    -            }),
    -        };
    -
    -        ///  control and status for on-chip voltage regulator and chip level reset subsystem
    -        pub const VREG_AND_CHIP_RESET = extern struct {
    -            ///  Voltage regulator control and status
    -            VREG: mmio.Mmio(packed struct(u32) {
    -                ///  enable
    -                ///  0=not enabled, 1=enabled
    -                EN: u1,
    -                ///  high impedance mode select
    -                ///  0=not in high impedance mode, 1=in high impedance mode
    -                HIZ: u1,
    -                reserved4: u2,
    -                ///  output voltage select
    -                ///  0000 to 0101 - 0.80V
    -                ///  0110 - 0.85V
    -                ///  0111 - 0.90V
    -                ///  1000 - 0.95V
    -                ///  1001 - 1.00V
    -                ///  1010 - 1.05V
    -                ///  1011 - 1.10V (default)
    -                ///  1100 - 1.15V
    -                ///  1101 - 1.20V
    -                ///  1110 - 1.25V
    -                ///  1111 - 1.30V
    -                VSEL: u4,
    -                reserved12: u4,
    -                ///  regulation status
    -                ///  0=not in regulation, 1=in regulation
    -                ROK: u1,
    -                padding: u19,
    -            }),
    -            ///  brown-out detection control
    -            BOD: mmio.Mmio(packed struct(u32) {
    -                ///  enable
    -                ///  0=not enabled, 1=enabled
    -                EN: u1,
    -                reserved4: u3,
    -                ///  threshold select
    -                ///  0000 - 0.473V
    -                ///  0001 - 0.516V
    -                ///  0010 - 0.559V
    -                ///  0011 - 0.602V
    -                ///  0100 - 0.645V
    -                ///  0101 - 0.688V
    -                ///  0110 - 0.731V
    -                ///  0111 - 0.774V
    -                ///  1000 - 0.817V
    -                ///  1001 - 0.860V (default)
    -                ///  1010 - 0.903V
    -                ///  1011 - 0.946V
    -                ///  1100 - 0.989V
    -                ///  1101 - 1.032V
    -                ///  1110 - 1.075V
    -                ///  1111 - 1.118V
    -                VSEL: u4,
    -                padding: u24,
    -            }),
    -            ///  Chip reset control and status
    -            CHIP_RESET: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  Last reset was from the power-on reset or brown-out detection blocks
    -                HAD_POR: u1,
    -                reserved16: u7,
    -                ///  Last reset was from the RUN pin
    -                HAD_RUN: u1,
    -                reserved20: u3,
    -                ///  Last reset was from the debug port
    -                HAD_PSM_RESTART: u1,
    -                reserved24: u3,
    -                ///  This is set by psm_restart from the debugger.
    -                ///  Its purpose is to branch bootcode to a safe mode when the debugger has issued a psm_restart in order to recover from a boot lock-up.
    -                ///  In the safe mode the debugger can repair the boot code, clear this flag then reboot the processor.
    -                PSM_RESTART_FLAG: u1,
    -                padding: u7,
    -            }),
    -        };
    -
    -        ///  Testbench manager. Allows the programmer to know what platform their software is running on.
    -        pub const TBMAN = extern struct {
    -            ///  Indicates the type of platform in use
    -            PLATFORM: mmio.Mmio(packed struct(u32) {
    -                ///  Indicates the platform is an ASIC
    -                ASIC: u1,
    -                ///  Indicates the platform is an FPGA
    -                FPGA: u1,
    -                padding: u30,
    -            }),
    -        };
    -
    -        ///  DMA with separate read and write masters
    -        pub const DMA = extern struct {
    -            ///  DMA Channel 0 Read Address pointer
    -            ///  This register updates automatically each time a read completes. The current value is the next address to be read by this channel.
    -            CH0_READ_ADDR: u32,
    -            ///  DMA Channel 0 Write Address pointer
    -            ///  This register updates automatically each time a write completes. The current value is the next address to be written by this channel.
    -            CH0_WRITE_ADDR: u32,
    -            ///  DMA Channel 0 Transfer Count
    -            ///  Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).
    -            ///  When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.
    -            ///  Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.
    -            ///  The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.
    -            CH0_TRANS_COUNT: u32,
    -            ///  DMA Channel 0 Control and Status
    -            CH0_CTRL_TRIG: mmio.Mmio(packed struct(u32) {
    -                ///  DMA Channel Enable.
    -                ///  When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)
    -                EN: u1,
    -                ///  HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.
    -                ///  This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.
    -                HIGH_PRIORITY: u1,
    -                ///  Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.
    -                DATA_SIZE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        SIZE_BYTE = 0x0,
    -                        SIZE_HALFWORD = 0x1,
    -                        SIZE_WORD = 0x2,
    -                        _,
    -                    },
    -                },
    -                ///  If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.
    -                ///  Generally this should be disabled for peripheral-to-memory transfers.
    -                INCR_READ: u1,
    -                ///  If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.
    -                ///  Generally this should be disabled for memory-to-peripheral transfers.
    -                INCR_WRITE: u1,
    -                ///  Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.
    -                ///  Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.
    -                RING_SIZE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        RING_NONE = 0x0,
    -                        _,
    -                    },
    -                },
    -                ///  Select whether RING_SIZE applies to read or write addresses.
    -                ///  If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.
    -                RING_SEL: u1,
    -                ///  When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.
    -                CHAIN_TO: u4,
    -                ///  Select a Transfer Request signal.
    -                ///  The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).
    -                ///  0x0 to 0x3a -> select DREQ n as TREQ
    -                TREQ_SEL: packed union {
    -                    raw: u6,
    -                    value: enum(u6) {
    -                        ///  Select Timer 0 as TREQ
    -                        TIMER0 = 0x3b,
    -                        ///  Select Timer 1 as TREQ
    -                        TIMER1 = 0x3c,
    -                        ///  Select Timer 2 as TREQ (Optional)
    -                        TIMER2 = 0x3d,
    -                        ///  Select Timer 3 as TREQ (Optional)
    -                        TIMER3 = 0x3e,
    -                        ///  Permanent request, for unpaced transfers.
    -                        PERMANENT = 0x3f,
    -                        _,
    -                    },
    -                },
    -                ///  In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.
    -                ///  This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.
    -                IRQ_QUIET: u1,
    -                ///  Apply byte-swap transformation to DMA data.
    -                ///  For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.
    -                BSWAP: u1,
    -                ///  If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.
    -                ///  This allows checksum to be enabled or disabled on a per-control- block basis.
    -                SNIFF_EN: u1,
    -                ///  This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.
    -                ///  To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    -                BUSY: u1,
    -                reserved29: u4,
    -                ///  If 1, the channel received a write bus error. Write one to clear.
    -                ///  WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)
    -                WRITE_ERROR: u1,
    -                ///  If 1, the channel received a read bus error. Write one to clear.
    -                ///  READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)
    -                READ_ERROR: u1,
    -                ///  Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.
    -                AHB_ERROR: u1,
    -            }),
    -            ///  Alias for channel 0 CTRL register
    -            CH0_AL1_CTRL: u32,
    -            ///  Alias for channel 0 READ_ADDR register
    -            CH0_AL1_READ_ADDR: u32,
    -            ///  Alias for channel 0 WRITE_ADDR register
    -            CH0_AL1_WRITE_ADDR: u32,
    -            ///  Alias for channel 0 TRANS_COUNT register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH0_AL1_TRANS_COUNT_TRIG: u32,
    -            ///  Alias for channel 0 CTRL register
    -            CH0_AL2_CTRL: u32,
    -            ///  Alias for channel 0 TRANS_COUNT register
    -            CH0_AL2_TRANS_COUNT: u32,
    -            ///  Alias for channel 0 READ_ADDR register
    -            CH0_AL2_READ_ADDR: u32,
    -            ///  Alias for channel 0 WRITE_ADDR register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH0_AL2_WRITE_ADDR_TRIG: u32,
    -            ///  Alias for channel 0 CTRL register
    -            CH0_AL3_CTRL: u32,
    -            ///  Alias for channel 0 WRITE_ADDR register
    -            CH0_AL3_WRITE_ADDR: u32,
    -            ///  Alias for channel 0 TRANS_COUNT register
    -            CH0_AL3_TRANS_COUNT: u32,
    -            ///  Alias for channel 0 READ_ADDR register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH0_AL3_READ_ADDR_TRIG: u32,
    -            ///  DMA Channel 1 Read Address pointer
    -            ///  This register updates automatically each time a read completes. The current value is the next address to be read by this channel.
    -            CH1_READ_ADDR: u32,
    -            ///  DMA Channel 1 Write Address pointer
    -            ///  This register updates automatically each time a write completes. The current value is the next address to be written by this channel.
    -            CH1_WRITE_ADDR: u32,
    -            ///  DMA Channel 1 Transfer Count
    -            ///  Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).
    -            ///  When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.
    -            ///  Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.
    -            ///  The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.
    -            CH1_TRANS_COUNT: u32,
    -            ///  DMA Channel 1 Control and Status
    -            CH1_CTRL_TRIG: mmio.Mmio(packed struct(u32) {
    -                ///  DMA Channel Enable.
    -                ///  When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)
    -                EN: u1,
    -                ///  HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.
    -                ///  This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.
    -                HIGH_PRIORITY: u1,
    -                ///  Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.
    -                DATA_SIZE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        SIZE_BYTE = 0x0,
    -                        SIZE_HALFWORD = 0x1,
    -                        SIZE_WORD = 0x2,
    -                        _,
    -                    },
    -                },
    -                ///  If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.
    -                ///  Generally this should be disabled for peripheral-to-memory transfers.
    -                INCR_READ: u1,
    -                ///  If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.
    -                ///  Generally this should be disabled for memory-to-peripheral transfers.
    -                INCR_WRITE: u1,
    -                ///  Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.
    -                ///  Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.
    -                RING_SIZE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        RING_NONE = 0x0,
    -                        _,
    -                    },
    -                },
    -                ///  Select whether RING_SIZE applies to read or write addresses.
    -                ///  If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.
    -                RING_SEL: u1,
    -                ///  When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.
    -                CHAIN_TO: u4,
    -                ///  Select a Transfer Request signal.
    -                ///  The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).
    -                ///  0x0 to 0x3a -> select DREQ n as TREQ
    -                TREQ_SEL: packed union {
    -                    raw: u6,
    -                    value: enum(u6) {
    -                        ///  Select Timer 0 as TREQ
    -                        TIMER0 = 0x3b,
    -                        ///  Select Timer 1 as TREQ
    -                        TIMER1 = 0x3c,
    -                        ///  Select Timer 2 as TREQ (Optional)
    -                        TIMER2 = 0x3d,
    -                        ///  Select Timer 3 as TREQ (Optional)
    -                        TIMER3 = 0x3e,
    -                        ///  Permanent request, for unpaced transfers.
    -                        PERMANENT = 0x3f,
    -                        _,
    -                    },
    -                },
    -                ///  In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.
    -                ///  This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.
    -                IRQ_QUIET: u1,
    -                ///  Apply byte-swap transformation to DMA data.
    -                ///  For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.
    -                BSWAP: u1,
    -                ///  If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.
    -                ///  This allows checksum to be enabled or disabled on a per-control- block basis.
    -                SNIFF_EN: u1,
    -                ///  This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.
    -                ///  To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    -                BUSY: u1,
    -                reserved29: u4,
    -                ///  If 1, the channel received a write bus error. Write one to clear.
    -                ///  WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)
    -                WRITE_ERROR: u1,
    -                ///  If 1, the channel received a read bus error. Write one to clear.
    -                ///  READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)
    -                READ_ERROR: u1,
    -                ///  Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.
    -                AHB_ERROR: u1,
    -            }),
    -            ///  Alias for channel 1 CTRL register
    -            CH1_AL1_CTRL: u32,
    -            ///  Alias for channel 1 READ_ADDR register
    -            CH1_AL1_READ_ADDR: u32,
    -            ///  Alias for channel 1 WRITE_ADDR register
    -            CH1_AL1_WRITE_ADDR: u32,
    -            ///  Alias for channel 1 TRANS_COUNT register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH1_AL1_TRANS_COUNT_TRIG: u32,
    -            ///  Alias for channel 1 CTRL register
    -            CH1_AL2_CTRL: u32,
    -            ///  Alias for channel 1 TRANS_COUNT register
    -            CH1_AL2_TRANS_COUNT: u32,
    -            ///  Alias for channel 1 READ_ADDR register
    -            CH1_AL2_READ_ADDR: u32,
    -            ///  Alias for channel 1 WRITE_ADDR register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH1_AL2_WRITE_ADDR_TRIG: u32,
    -            ///  Alias for channel 1 CTRL register
    -            CH1_AL3_CTRL: u32,
    -            ///  Alias for channel 1 WRITE_ADDR register
    -            CH1_AL3_WRITE_ADDR: u32,
    -            ///  Alias for channel 1 TRANS_COUNT register
    -            CH1_AL3_TRANS_COUNT: u32,
    -            ///  Alias for channel 1 READ_ADDR register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH1_AL3_READ_ADDR_TRIG: u32,
    -            ///  DMA Channel 2 Read Address pointer
    -            ///  This register updates automatically each time a read completes. The current value is the next address to be read by this channel.
    -            CH2_READ_ADDR: u32,
    -            ///  DMA Channel 2 Write Address pointer
    -            ///  This register updates automatically each time a write completes. The current value is the next address to be written by this channel.
    -            CH2_WRITE_ADDR: u32,
    -            ///  DMA Channel 2 Transfer Count
    -            ///  Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).
    -            ///  When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.
    -            ///  Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.
    -            ///  The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.
    -            CH2_TRANS_COUNT: u32,
    -            ///  DMA Channel 2 Control and Status
    -            CH2_CTRL_TRIG: mmio.Mmio(packed struct(u32) {
    -                ///  DMA Channel Enable.
    -                ///  When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)
    -                EN: u1,
    -                ///  HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.
    -                ///  This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.
    -                HIGH_PRIORITY: u1,
    -                ///  Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.
    -                DATA_SIZE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        SIZE_BYTE = 0x0,
    -                        SIZE_HALFWORD = 0x1,
    -                        SIZE_WORD = 0x2,
    -                        _,
    -                    },
    -                },
    -                ///  If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.
    -                ///  Generally this should be disabled for peripheral-to-memory transfers.
    -                INCR_READ: u1,
    -                ///  If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.
    -                ///  Generally this should be disabled for memory-to-peripheral transfers.
    -                INCR_WRITE: u1,
    -                ///  Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.
    -                ///  Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.
    -                RING_SIZE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        RING_NONE = 0x0,
    -                        _,
    -                    },
    -                },
    -                ///  Select whether RING_SIZE applies to read or write addresses.
    -                ///  If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.
    -                RING_SEL: u1,
    -                ///  When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.
    -                CHAIN_TO: u4,
    -                ///  Select a Transfer Request signal.
    -                ///  The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).
    -                ///  0x0 to 0x3a -> select DREQ n as TREQ
    -                TREQ_SEL: packed union {
    -                    raw: u6,
    -                    value: enum(u6) {
    -                        ///  Select Timer 0 as TREQ
    -                        TIMER0 = 0x3b,
    -                        ///  Select Timer 1 as TREQ
    -                        TIMER1 = 0x3c,
    -                        ///  Select Timer 2 as TREQ (Optional)
    -                        TIMER2 = 0x3d,
    -                        ///  Select Timer 3 as TREQ (Optional)
    -                        TIMER3 = 0x3e,
    -                        ///  Permanent request, for unpaced transfers.
    -                        PERMANENT = 0x3f,
    -                        _,
    -                    },
    -                },
    -                ///  In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.
    -                ///  This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.
    -                IRQ_QUIET: u1,
    -                ///  Apply byte-swap transformation to DMA data.
    -                ///  For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.
    -                BSWAP: u1,
    -                ///  If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.
    -                ///  This allows checksum to be enabled or disabled on a per-control- block basis.
    -                SNIFF_EN: u1,
    -                ///  This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.
    -                ///  To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    -                BUSY: u1,
    -                reserved29: u4,
    -                ///  If 1, the channel received a write bus error. Write one to clear.
    -                ///  WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)
    -                WRITE_ERROR: u1,
    -                ///  If 1, the channel received a read bus error. Write one to clear.
    -                ///  READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)
    -                READ_ERROR: u1,
    -                ///  Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.
    -                AHB_ERROR: u1,
    -            }),
    -            ///  Alias for channel 2 CTRL register
    -            CH2_AL1_CTRL: u32,
    -            ///  Alias for channel 2 READ_ADDR register
    -            CH2_AL1_READ_ADDR: u32,
    -            ///  Alias for channel 2 WRITE_ADDR register
    -            CH2_AL1_WRITE_ADDR: u32,
    -            ///  Alias for channel 2 TRANS_COUNT register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH2_AL1_TRANS_COUNT_TRIG: u32,
    -            ///  Alias for channel 2 CTRL register
    -            CH2_AL2_CTRL: u32,
    -            ///  Alias for channel 2 TRANS_COUNT register
    -            CH2_AL2_TRANS_COUNT: u32,
    -            ///  Alias for channel 2 READ_ADDR register
    -            CH2_AL2_READ_ADDR: u32,
    -            ///  Alias for channel 2 WRITE_ADDR register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH2_AL2_WRITE_ADDR_TRIG: u32,
    -            ///  Alias for channel 2 CTRL register
    -            CH2_AL3_CTRL: u32,
    -            ///  Alias for channel 2 WRITE_ADDR register
    -            CH2_AL3_WRITE_ADDR: u32,
    -            ///  Alias for channel 2 TRANS_COUNT register
    -            CH2_AL3_TRANS_COUNT: u32,
    -            ///  Alias for channel 2 READ_ADDR register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH2_AL3_READ_ADDR_TRIG: u32,
    -            ///  DMA Channel 3 Read Address pointer
    -            ///  This register updates automatically each time a read completes. The current value is the next address to be read by this channel.
    -            CH3_READ_ADDR: u32,
    -            ///  DMA Channel 3 Write Address pointer
    -            ///  This register updates automatically each time a write completes. The current value is the next address to be written by this channel.
    -            CH3_WRITE_ADDR: u32,
    -            ///  DMA Channel 3 Transfer Count
    -            ///  Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).
    -            ///  When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.
    -            ///  Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.
    -            ///  The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.
    -            CH3_TRANS_COUNT: u32,
    -            ///  DMA Channel 3 Control and Status
    -            CH3_CTRL_TRIG: mmio.Mmio(packed struct(u32) {
    -                ///  DMA Channel Enable.
    -                ///  When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)
    -                EN: u1,
    -                ///  HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.
    -                ///  This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.
    -                HIGH_PRIORITY: u1,
    -                ///  Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.
    -                DATA_SIZE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        SIZE_BYTE = 0x0,
    -                        SIZE_HALFWORD = 0x1,
    -                        SIZE_WORD = 0x2,
    -                        _,
    -                    },
    -                },
    -                ///  If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.
    -                ///  Generally this should be disabled for peripheral-to-memory transfers.
    -                INCR_READ: u1,
    -                ///  If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.
    -                ///  Generally this should be disabled for memory-to-peripheral transfers.
    -                INCR_WRITE: u1,
    -                ///  Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.
    -                ///  Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.
    -                RING_SIZE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        RING_NONE = 0x0,
    -                        _,
    -                    },
    -                },
    -                ///  Select whether RING_SIZE applies to read or write addresses.
    -                ///  If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.
    -                RING_SEL: u1,
    -                ///  When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.
    -                CHAIN_TO: u4,
    -                ///  Select a Transfer Request signal.
    -                ///  The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).
    -                ///  0x0 to 0x3a -> select DREQ n as TREQ
    -                TREQ_SEL: packed union {
    -                    raw: u6,
    -                    value: enum(u6) {
    -                        ///  Select Timer 0 as TREQ
    -                        TIMER0 = 0x3b,
    -                        ///  Select Timer 1 as TREQ
    -                        TIMER1 = 0x3c,
    -                        ///  Select Timer 2 as TREQ (Optional)
    -                        TIMER2 = 0x3d,
    -                        ///  Select Timer 3 as TREQ (Optional)
    -                        TIMER3 = 0x3e,
    -                        ///  Permanent request, for unpaced transfers.
    -                        PERMANENT = 0x3f,
    -                        _,
    -                    },
    -                },
    -                ///  In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.
    -                ///  This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.
    -                IRQ_QUIET: u1,
    -                ///  Apply byte-swap transformation to DMA data.
    -                ///  For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.
    -                BSWAP: u1,
    -                ///  If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.
    -                ///  This allows checksum to be enabled or disabled on a per-control- block basis.
    -                SNIFF_EN: u1,
    -                ///  This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.
    -                ///  To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    -                BUSY: u1,
    -                reserved29: u4,
    -                ///  If 1, the channel received a write bus error. Write one to clear.
    -                ///  WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)
    -                WRITE_ERROR: u1,
    -                ///  If 1, the channel received a read bus error. Write one to clear.
    -                ///  READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)
    -                READ_ERROR: u1,
    -                ///  Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.
    -                AHB_ERROR: u1,
    -            }),
    -            ///  Alias for channel 3 CTRL register
    -            CH3_AL1_CTRL: u32,
    -            ///  Alias for channel 3 READ_ADDR register
    -            CH3_AL1_READ_ADDR: u32,
    -            ///  Alias for channel 3 WRITE_ADDR register
    -            CH3_AL1_WRITE_ADDR: u32,
    -            ///  Alias for channel 3 TRANS_COUNT register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH3_AL1_TRANS_COUNT_TRIG: u32,
    -            ///  Alias for channel 3 CTRL register
    -            CH3_AL2_CTRL: u32,
    -            ///  Alias for channel 3 TRANS_COUNT register
    -            CH3_AL2_TRANS_COUNT: u32,
    -            ///  Alias for channel 3 READ_ADDR register
    -            CH3_AL2_READ_ADDR: u32,
    -            ///  Alias for channel 3 WRITE_ADDR register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH3_AL2_WRITE_ADDR_TRIG: u32,
    -            ///  Alias for channel 3 CTRL register
    -            CH3_AL3_CTRL: u32,
    -            ///  Alias for channel 3 WRITE_ADDR register
    -            CH3_AL3_WRITE_ADDR: u32,
    -            ///  Alias for channel 3 TRANS_COUNT register
    -            CH3_AL3_TRANS_COUNT: u32,
    -            ///  Alias for channel 3 READ_ADDR register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH3_AL3_READ_ADDR_TRIG: u32,
    -            ///  DMA Channel 4 Read Address pointer
    -            ///  This register updates automatically each time a read completes. The current value is the next address to be read by this channel.
    -            CH4_READ_ADDR: u32,
    -            ///  DMA Channel 4 Write Address pointer
    -            ///  This register updates automatically each time a write completes. The current value is the next address to be written by this channel.
    -            CH4_WRITE_ADDR: u32,
    -            ///  DMA Channel 4 Transfer Count
    -            ///  Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).
    -            ///  When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.
    -            ///  Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.
    -            ///  The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.
    -            CH4_TRANS_COUNT: u32,
    -            ///  DMA Channel 4 Control and Status
    -            CH4_CTRL_TRIG: mmio.Mmio(packed struct(u32) {
    -                ///  DMA Channel Enable.
    -                ///  When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)
    -                EN: u1,
    -                ///  HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.
    -                ///  This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.
    -                HIGH_PRIORITY: u1,
    -                ///  Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.
    -                DATA_SIZE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        SIZE_BYTE = 0x0,
    -                        SIZE_HALFWORD = 0x1,
    -                        SIZE_WORD = 0x2,
    -                        _,
    -                    },
    -                },
    -                ///  If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.
    -                ///  Generally this should be disabled for peripheral-to-memory transfers.
    -                INCR_READ: u1,
    -                ///  If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.
    -                ///  Generally this should be disabled for memory-to-peripheral transfers.
    -                INCR_WRITE: u1,
    -                ///  Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.
    -                ///  Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.
    -                RING_SIZE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        RING_NONE = 0x0,
    -                        _,
    -                    },
    -                },
    -                ///  Select whether RING_SIZE applies to read or write addresses.
    -                ///  If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.
    -                RING_SEL: u1,
    -                ///  When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.
    -                CHAIN_TO: u4,
    -                ///  Select a Transfer Request signal.
    -                ///  The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).
    -                ///  0x0 to 0x3a -> select DREQ n as TREQ
    -                TREQ_SEL: packed union {
    -                    raw: u6,
    -                    value: enum(u6) {
    -                        ///  Select Timer 0 as TREQ
    -                        TIMER0 = 0x3b,
    -                        ///  Select Timer 1 as TREQ
    -                        TIMER1 = 0x3c,
    -                        ///  Select Timer 2 as TREQ (Optional)
    -                        TIMER2 = 0x3d,
    -                        ///  Select Timer 3 as TREQ (Optional)
    -                        TIMER3 = 0x3e,
    -                        ///  Permanent request, for unpaced transfers.
    -                        PERMANENT = 0x3f,
    -                        _,
    -                    },
    -                },
    -                ///  In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.
    -                ///  This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.
    -                IRQ_QUIET: u1,
    -                ///  Apply byte-swap transformation to DMA data.
    -                ///  For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.
    -                BSWAP: u1,
    -                ///  If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.
    -                ///  This allows checksum to be enabled or disabled on a per-control- block basis.
    -                SNIFF_EN: u1,
    -                ///  This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.
    -                ///  To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    -                BUSY: u1,
    -                reserved29: u4,
    -                ///  If 1, the channel received a write bus error. Write one to clear.
    -                ///  WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)
    -                WRITE_ERROR: u1,
    -                ///  If 1, the channel received a read bus error. Write one to clear.
    -                ///  READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)
    -                READ_ERROR: u1,
    -                ///  Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.
    -                AHB_ERROR: u1,
    -            }),
    -            ///  Alias for channel 4 CTRL register
    -            CH4_AL1_CTRL: u32,
    -            ///  Alias for channel 4 READ_ADDR register
    -            CH4_AL1_READ_ADDR: u32,
    -            ///  Alias for channel 4 WRITE_ADDR register
    -            CH4_AL1_WRITE_ADDR: u32,
    -            ///  Alias for channel 4 TRANS_COUNT register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH4_AL1_TRANS_COUNT_TRIG: u32,
    -            ///  Alias for channel 4 CTRL register
    -            CH4_AL2_CTRL: u32,
    -            ///  Alias for channel 4 TRANS_COUNT register
    -            CH4_AL2_TRANS_COUNT: u32,
    -            ///  Alias for channel 4 READ_ADDR register
    -            CH4_AL2_READ_ADDR: u32,
    -            ///  Alias for channel 4 WRITE_ADDR register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH4_AL2_WRITE_ADDR_TRIG: u32,
    -            ///  Alias for channel 4 CTRL register
    -            CH4_AL3_CTRL: u32,
    -            ///  Alias for channel 4 WRITE_ADDR register
    -            CH4_AL3_WRITE_ADDR: u32,
    -            ///  Alias for channel 4 TRANS_COUNT register
    -            CH4_AL3_TRANS_COUNT: u32,
    -            ///  Alias for channel 4 READ_ADDR register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH4_AL3_READ_ADDR_TRIG: u32,
    -            ///  DMA Channel 5 Read Address pointer
    -            ///  This register updates automatically each time a read completes. The current value is the next address to be read by this channel.
    -            CH5_READ_ADDR: u32,
    -            ///  DMA Channel 5 Write Address pointer
    -            ///  This register updates automatically each time a write completes. The current value is the next address to be written by this channel.
    -            CH5_WRITE_ADDR: u32,
    -            ///  DMA Channel 5 Transfer Count
    -            ///  Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).
    -            ///  When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.
    -            ///  Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.
    -            ///  The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.
    -            CH5_TRANS_COUNT: u32,
    -            ///  DMA Channel 5 Control and Status
    -            CH5_CTRL_TRIG: mmio.Mmio(packed struct(u32) {
    -                ///  DMA Channel Enable.
    -                ///  When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)
    -                EN: u1,
    -                ///  HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.
    -                ///  This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.
    -                HIGH_PRIORITY: u1,
    -                ///  Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.
    -                DATA_SIZE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        SIZE_BYTE = 0x0,
    -                        SIZE_HALFWORD = 0x1,
    -                        SIZE_WORD = 0x2,
    -                        _,
    -                    },
    -                },
    -                ///  If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.
    -                ///  Generally this should be disabled for peripheral-to-memory transfers.
    -                INCR_READ: u1,
    -                ///  If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.
    -                ///  Generally this should be disabled for memory-to-peripheral transfers.
    -                INCR_WRITE: u1,
    -                ///  Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.
    -                ///  Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.
    -                RING_SIZE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        RING_NONE = 0x0,
    -                        _,
    -                    },
    -                },
    -                ///  Select whether RING_SIZE applies to read or write addresses.
    -                ///  If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.
    -                RING_SEL: u1,
    -                ///  When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.
    -                CHAIN_TO: u4,
    -                ///  Select a Transfer Request signal.
    -                ///  The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).
    -                ///  0x0 to 0x3a -> select DREQ n as TREQ
    -                TREQ_SEL: packed union {
    -                    raw: u6,
    -                    value: enum(u6) {
    -                        ///  Select Timer 0 as TREQ
    -                        TIMER0 = 0x3b,
    -                        ///  Select Timer 1 as TREQ
    -                        TIMER1 = 0x3c,
    -                        ///  Select Timer 2 as TREQ (Optional)
    -                        TIMER2 = 0x3d,
    -                        ///  Select Timer 3 as TREQ (Optional)
    -                        TIMER3 = 0x3e,
    -                        ///  Permanent request, for unpaced transfers.
    -                        PERMANENT = 0x3f,
    -                        _,
    -                    },
    -                },
    -                ///  In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.
    -                ///  This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.
    -                IRQ_QUIET: u1,
    -                ///  Apply byte-swap transformation to DMA data.
    -                ///  For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.
    -                BSWAP: u1,
    -                ///  If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.
    -                ///  This allows checksum to be enabled or disabled on a per-control- block basis.
    -                SNIFF_EN: u1,
    -                ///  This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.
    -                ///  To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    -                BUSY: u1,
    -                reserved29: u4,
    -                ///  If 1, the channel received a write bus error. Write one to clear.
    -                ///  WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)
    -                WRITE_ERROR: u1,
    -                ///  If 1, the channel received a read bus error. Write one to clear.
    -                ///  READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)
    -                READ_ERROR: u1,
    -                ///  Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.
    -                AHB_ERROR: u1,
    -            }),
    -            ///  Alias for channel 5 CTRL register
    -            CH5_AL1_CTRL: u32,
    -            ///  Alias for channel 5 READ_ADDR register
    -            CH5_AL1_READ_ADDR: u32,
    -            ///  Alias for channel 5 WRITE_ADDR register
    -            CH5_AL1_WRITE_ADDR: u32,
    -            ///  Alias for channel 5 TRANS_COUNT register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH5_AL1_TRANS_COUNT_TRIG: u32,
    -            ///  Alias for channel 5 CTRL register
    -            CH5_AL2_CTRL: u32,
    -            ///  Alias for channel 5 TRANS_COUNT register
    -            CH5_AL2_TRANS_COUNT: u32,
    -            ///  Alias for channel 5 READ_ADDR register
    -            CH5_AL2_READ_ADDR: u32,
    -            ///  Alias for channel 5 WRITE_ADDR register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH5_AL2_WRITE_ADDR_TRIG: u32,
    -            ///  Alias for channel 5 CTRL register
    -            CH5_AL3_CTRL: u32,
    -            ///  Alias for channel 5 WRITE_ADDR register
    -            CH5_AL3_WRITE_ADDR: u32,
    -            ///  Alias for channel 5 TRANS_COUNT register
    -            CH5_AL3_TRANS_COUNT: u32,
    -            ///  Alias for channel 5 READ_ADDR register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH5_AL3_READ_ADDR_TRIG: u32,
    -            ///  DMA Channel 6 Read Address pointer
    -            ///  This register updates automatically each time a read completes. The current value is the next address to be read by this channel.
    -            CH6_READ_ADDR: u32,
    -            ///  DMA Channel 6 Write Address pointer
    -            ///  This register updates automatically each time a write completes. The current value is the next address to be written by this channel.
    -            CH6_WRITE_ADDR: u32,
    -            ///  DMA Channel 6 Transfer Count
    -            ///  Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).
    -            ///  When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.
    -            ///  Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.
    -            ///  The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.
    -            CH6_TRANS_COUNT: u32,
    -            ///  DMA Channel 6 Control and Status
    -            CH6_CTRL_TRIG: mmio.Mmio(packed struct(u32) {
    -                ///  DMA Channel Enable.
    -                ///  When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)
    -                EN: u1,
    -                ///  HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.
    -                ///  This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.
    -                HIGH_PRIORITY: u1,
    -                ///  Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.
    -                DATA_SIZE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        SIZE_BYTE = 0x0,
    -                        SIZE_HALFWORD = 0x1,
    -                        SIZE_WORD = 0x2,
    -                        _,
    -                    },
    -                },
    -                ///  If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.
    -                ///  Generally this should be disabled for peripheral-to-memory transfers.
    -                INCR_READ: u1,
    -                ///  If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.
    -                ///  Generally this should be disabled for memory-to-peripheral transfers.
    -                INCR_WRITE: u1,
    -                ///  Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.
    -                ///  Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.
    -                RING_SIZE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        RING_NONE = 0x0,
    -                        _,
    -                    },
    -                },
    -                ///  Select whether RING_SIZE applies to read or write addresses.
    -                ///  If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.
    -                RING_SEL: u1,
    -                ///  When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.
    -                CHAIN_TO: u4,
    -                ///  Select a Transfer Request signal.
    -                ///  The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).
    -                ///  0x0 to 0x3a -> select DREQ n as TREQ
    -                TREQ_SEL: packed union {
    -                    raw: u6,
    -                    value: enum(u6) {
    -                        ///  Select Timer 0 as TREQ
    -                        TIMER0 = 0x3b,
    -                        ///  Select Timer 1 as TREQ
    -                        TIMER1 = 0x3c,
    -                        ///  Select Timer 2 as TREQ (Optional)
    -                        TIMER2 = 0x3d,
    -                        ///  Select Timer 3 as TREQ (Optional)
    -                        TIMER3 = 0x3e,
    -                        ///  Permanent request, for unpaced transfers.
    -                        PERMANENT = 0x3f,
    -                        _,
    -                    },
    -                },
    -                ///  In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.
    -                ///  This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.
    -                IRQ_QUIET: u1,
    -                ///  Apply byte-swap transformation to DMA data.
    -                ///  For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.
    -                BSWAP: u1,
    -                ///  If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.
    -                ///  This allows checksum to be enabled or disabled on a per-control- block basis.
    -                SNIFF_EN: u1,
    -                ///  This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.
    -                ///  To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    -                BUSY: u1,
    -                reserved29: u4,
    -                ///  If 1, the channel received a write bus error. Write one to clear.
    -                ///  WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)
    -                WRITE_ERROR: u1,
    -                ///  If 1, the channel received a read bus error. Write one to clear.
    -                ///  READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)
    -                READ_ERROR: u1,
    -                ///  Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.
    -                AHB_ERROR: u1,
    -            }),
    -            ///  Alias for channel 6 CTRL register
    -            CH6_AL1_CTRL: u32,
    -            ///  Alias for channel 6 READ_ADDR register
    -            CH6_AL1_READ_ADDR: u32,
    -            ///  Alias for channel 6 WRITE_ADDR register
    -            CH6_AL1_WRITE_ADDR: u32,
    -            ///  Alias for channel 6 TRANS_COUNT register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH6_AL1_TRANS_COUNT_TRIG: u32,
    -            ///  Alias for channel 6 CTRL register
    -            CH6_AL2_CTRL: u32,
    -            ///  Alias for channel 6 TRANS_COUNT register
    -            CH6_AL2_TRANS_COUNT: u32,
    -            ///  Alias for channel 6 READ_ADDR register
    -            CH6_AL2_READ_ADDR: u32,
    -            ///  Alias for channel 6 WRITE_ADDR register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH6_AL2_WRITE_ADDR_TRIG: u32,
    -            ///  Alias for channel 6 CTRL register
    -            CH6_AL3_CTRL: u32,
    -            ///  Alias for channel 6 WRITE_ADDR register
    -            CH6_AL3_WRITE_ADDR: u32,
    -            ///  Alias for channel 6 TRANS_COUNT register
    -            CH6_AL3_TRANS_COUNT: u32,
    -            ///  Alias for channel 6 READ_ADDR register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH6_AL3_READ_ADDR_TRIG: u32,
    -            ///  DMA Channel 7 Read Address pointer
    -            ///  This register updates automatically each time a read completes. The current value is the next address to be read by this channel.
    -            CH7_READ_ADDR: u32,
    -            ///  DMA Channel 7 Write Address pointer
    -            ///  This register updates automatically each time a write completes. The current value is the next address to be written by this channel.
    -            CH7_WRITE_ADDR: u32,
    -            ///  DMA Channel 7 Transfer Count
    -            ///  Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).
    -            ///  When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.
    -            ///  Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.
    -            ///  The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.
    -            CH7_TRANS_COUNT: u32,
    -            ///  DMA Channel 7 Control and Status
    -            CH7_CTRL_TRIG: mmio.Mmio(packed struct(u32) {
    -                ///  DMA Channel Enable.
    -                ///  When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)
    -                EN: u1,
    -                ///  HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.
    -                ///  This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.
    -                HIGH_PRIORITY: u1,
    -                ///  Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.
    -                DATA_SIZE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        SIZE_BYTE = 0x0,
    -                        SIZE_HALFWORD = 0x1,
    -                        SIZE_WORD = 0x2,
    -                        _,
    -                    },
    -                },
    -                ///  If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.
    -                ///  Generally this should be disabled for peripheral-to-memory transfers.
    -                INCR_READ: u1,
    -                ///  If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.
    -                ///  Generally this should be disabled for memory-to-peripheral transfers.
    -                INCR_WRITE: u1,
    -                ///  Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.
    -                ///  Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.
    -                RING_SIZE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        RING_NONE = 0x0,
    -                        _,
    -                    },
    -                },
    -                ///  Select whether RING_SIZE applies to read or write addresses.
    -                ///  If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.
    -                RING_SEL: u1,
    -                ///  When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.
    -                CHAIN_TO: u4,
    -                ///  Select a Transfer Request signal.
    -                ///  The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).
    -                ///  0x0 to 0x3a -> select DREQ n as TREQ
    -                TREQ_SEL: packed union {
    -                    raw: u6,
    -                    value: enum(u6) {
    -                        ///  Select Timer 0 as TREQ
    -                        TIMER0 = 0x3b,
    -                        ///  Select Timer 1 as TREQ
    -                        TIMER1 = 0x3c,
    -                        ///  Select Timer 2 as TREQ (Optional)
    -                        TIMER2 = 0x3d,
    -                        ///  Select Timer 3 as TREQ (Optional)
    -                        TIMER3 = 0x3e,
    -                        ///  Permanent request, for unpaced transfers.
    -                        PERMANENT = 0x3f,
    -                        _,
    -                    },
    -                },
    -                ///  In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.
    -                ///  This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.
    -                IRQ_QUIET: u1,
    -                ///  Apply byte-swap transformation to DMA data.
    -                ///  For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.
    -                BSWAP: u1,
    -                ///  If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.
    -                ///  This allows checksum to be enabled or disabled on a per-control- block basis.
    -                SNIFF_EN: u1,
    -                ///  This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.
    -                ///  To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    -                BUSY: u1,
    -                reserved29: u4,
    -                ///  If 1, the channel received a write bus error. Write one to clear.
    -                ///  WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)
    -                WRITE_ERROR: u1,
    -                ///  If 1, the channel received a read bus error. Write one to clear.
    -                ///  READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)
    -                READ_ERROR: u1,
    -                ///  Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.
    -                AHB_ERROR: u1,
    -            }),
    -            ///  Alias for channel 7 CTRL register
    -            CH7_AL1_CTRL: u32,
    -            ///  Alias for channel 7 READ_ADDR register
    -            CH7_AL1_READ_ADDR: u32,
    -            ///  Alias for channel 7 WRITE_ADDR register
    -            CH7_AL1_WRITE_ADDR: u32,
    -            ///  Alias for channel 7 TRANS_COUNT register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH7_AL1_TRANS_COUNT_TRIG: u32,
    -            ///  Alias for channel 7 CTRL register
    -            CH7_AL2_CTRL: u32,
    -            ///  Alias for channel 7 TRANS_COUNT register
    -            CH7_AL2_TRANS_COUNT: u32,
    -            ///  Alias for channel 7 READ_ADDR register
    -            CH7_AL2_READ_ADDR: u32,
    -            ///  Alias for channel 7 WRITE_ADDR register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH7_AL2_WRITE_ADDR_TRIG: u32,
    -            ///  Alias for channel 7 CTRL register
    -            CH7_AL3_CTRL: u32,
    -            ///  Alias for channel 7 WRITE_ADDR register
    -            CH7_AL3_WRITE_ADDR: u32,
    -            ///  Alias for channel 7 TRANS_COUNT register
    -            CH7_AL3_TRANS_COUNT: u32,
    -            ///  Alias for channel 7 READ_ADDR register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH7_AL3_READ_ADDR_TRIG: u32,
    -            ///  DMA Channel 8 Read Address pointer
    -            ///  This register updates automatically each time a read completes. The current value is the next address to be read by this channel.
    -            CH8_READ_ADDR: u32,
    -            ///  DMA Channel 8 Write Address pointer
    -            ///  This register updates automatically each time a write completes. The current value is the next address to be written by this channel.
    -            CH8_WRITE_ADDR: u32,
    -            ///  DMA Channel 8 Transfer Count
    -            ///  Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).
    -            ///  When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.
    -            ///  Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.
    -            ///  The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.
    -            CH8_TRANS_COUNT: u32,
    -            ///  DMA Channel 8 Control and Status
    -            CH8_CTRL_TRIG: mmio.Mmio(packed struct(u32) {
    -                ///  DMA Channel Enable.
    -                ///  When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)
    -                EN: u1,
    -                ///  HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.
    -                ///  This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.
    -                HIGH_PRIORITY: u1,
    -                ///  Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.
    -                DATA_SIZE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        SIZE_BYTE = 0x0,
    -                        SIZE_HALFWORD = 0x1,
    -                        SIZE_WORD = 0x2,
    -                        _,
    -                    },
    -                },
    -                ///  If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.
    -                ///  Generally this should be disabled for peripheral-to-memory transfers.
    -                INCR_READ: u1,
    -                ///  If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.
    -                ///  Generally this should be disabled for memory-to-peripheral transfers.
    -                INCR_WRITE: u1,
    -                ///  Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.
    -                ///  Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.
    -                RING_SIZE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        RING_NONE = 0x0,
    -                        _,
    -                    },
    -                },
    -                ///  Select whether RING_SIZE applies to read or write addresses.
    -                ///  If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.
    -                RING_SEL: u1,
    -                ///  When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.
    -                CHAIN_TO: u4,
    -                ///  Select a Transfer Request signal.
    -                ///  The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).
    -                ///  0x0 to 0x3a -> select DREQ n as TREQ
    -                TREQ_SEL: packed union {
    -                    raw: u6,
    -                    value: enum(u6) {
    -                        ///  Select Timer 0 as TREQ
    -                        TIMER0 = 0x3b,
    -                        ///  Select Timer 1 as TREQ
    -                        TIMER1 = 0x3c,
    -                        ///  Select Timer 2 as TREQ (Optional)
    -                        TIMER2 = 0x3d,
    -                        ///  Select Timer 3 as TREQ (Optional)
    -                        TIMER3 = 0x3e,
    -                        ///  Permanent request, for unpaced transfers.
    -                        PERMANENT = 0x3f,
    -                        _,
    -                    },
    -                },
    -                ///  In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.
    -                ///  This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.
    -                IRQ_QUIET: u1,
    -                ///  Apply byte-swap transformation to DMA data.
    -                ///  For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.
    -                BSWAP: u1,
    -                ///  If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.
    -                ///  This allows checksum to be enabled or disabled on a per-control- block basis.
    -                SNIFF_EN: u1,
    -                ///  This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.
    -                ///  To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    -                BUSY: u1,
    -                reserved29: u4,
    -                ///  If 1, the channel received a write bus error. Write one to clear.
    -                ///  WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)
    -                WRITE_ERROR: u1,
    -                ///  If 1, the channel received a read bus error. Write one to clear.
    -                ///  READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)
    -                READ_ERROR: u1,
    -                ///  Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.
    -                AHB_ERROR: u1,
    -            }),
    -            ///  Alias for channel 8 CTRL register
    -            CH8_AL1_CTRL: u32,
    -            ///  Alias for channel 8 READ_ADDR register
    -            CH8_AL1_READ_ADDR: u32,
    -            ///  Alias for channel 8 WRITE_ADDR register
    -            CH8_AL1_WRITE_ADDR: u32,
    -            ///  Alias for channel 8 TRANS_COUNT register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH8_AL1_TRANS_COUNT_TRIG: u32,
    -            ///  Alias for channel 8 CTRL register
    -            CH8_AL2_CTRL: u32,
    -            ///  Alias for channel 8 TRANS_COUNT register
    -            CH8_AL2_TRANS_COUNT: u32,
    -            ///  Alias for channel 8 READ_ADDR register
    -            CH8_AL2_READ_ADDR: u32,
    -            ///  Alias for channel 8 WRITE_ADDR register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH8_AL2_WRITE_ADDR_TRIG: u32,
    -            ///  Alias for channel 8 CTRL register
    -            CH8_AL3_CTRL: u32,
    -            ///  Alias for channel 8 WRITE_ADDR register
    -            CH8_AL3_WRITE_ADDR: u32,
    -            ///  Alias for channel 8 TRANS_COUNT register
    -            CH8_AL3_TRANS_COUNT: u32,
    -            ///  Alias for channel 8 READ_ADDR register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH8_AL3_READ_ADDR_TRIG: u32,
    -            ///  DMA Channel 9 Read Address pointer
    -            ///  This register updates automatically each time a read completes. The current value is the next address to be read by this channel.
    -            CH9_READ_ADDR: u32,
    -            ///  DMA Channel 9 Write Address pointer
    -            ///  This register updates automatically each time a write completes. The current value is the next address to be written by this channel.
    -            CH9_WRITE_ADDR: u32,
    -            ///  DMA Channel 9 Transfer Count
    -            ///  Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).
    -            ///  When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.
    -            ///  Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.
    -            ///  The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.
    -            CH9_TRANS_COUNT: u32,
    -            ///  DMA Channel 9 Control and Status
    -            CH9_CTRL_TRIG: mmio.Mmio(packed struct(u32) {
    -                ///  DMA Channel Enable.
    -                ///  When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)
    -                EN: u1,
    -                ///  HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.
    -                ///  This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.
    -                HIGH_PRIORITY: u1,
    -                ///  Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.
    -                DATA_SIZE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        SIZE_BYTE = 0x0,
    -                        SIZE_HALFWORD = 0x1,
    -                        SIZE_WORD = 0x2,
    -                        _,
    -                    },
    -                },
    -                ///  If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.
    -                ///  Generally this should be disabled for peripheral-to-memory transfers.
    -                INCR_READ: u1,
    -                ///  If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.
    -                ///  Generally this should be disabled for memory-to-peripheral transfers.
    -                INCR_WRITE: u1,
    -                ///  Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.
    -                ///  Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.
    -                RING_SIZE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        RING_NONE = 0x0,
    -                        _,
    -                    },
    -                },
    -                ///  Select whether RING_SIZE applies to read or write addresses.
    -                ///  If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.
    -                RING_SEL: u1,
    -                ///  When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.
    -                CHAIN_TO: u4,
    -                ///  Select a Transfer Request signal.
    -                ///  The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).
    -                ///  0x0 to 0x3a -> select DREQ n as TREQ
    -                TREQ_SEL: packed union {
    -                    raw: u6,
    -                    value: enum(u6) {
    -                        ///  Select Timer 0 as TREQ
    -                        TIMER0 = 0x3b,
    -                        ///  Select Timer 1 as TREQ
    -                        TIMER1 = 0x3c,
    -                        ///  Select Timer 2 as TREQ (Optional)
    -                        TIMER2 = 0x3d,
    -                        ///  Select Timer 3 as TREQ (Optional)
    -                        TIMER3 = 0x3e,
    -                        ///  Permanent request, for unpaced transfers.
    -                        PERMANENT = 0x3f,
    -                        _,
    -                    },
    -                },
    -                ///  In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.
    -                ///  This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.
    -                IRQ_QUIET: u1,
    -                ///  Apply byte-swap transformation to DMA data.
    -                ///  For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.
    -                BSWAP: u1,
    -                ///  If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.
    -                ///  This allows checksum to be enabled or disabled on a per-control- block basis.
    -                SNIFF_EN: u1,
    -                ///  This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.
    -                ///  To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    -                BUSY: u1,
    -                reserved29: u4,
    -                ///  If 1, the channel received a write bus error. Write one to clear.
    -                ///  WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)
    -                WRITE_ERROR: u1,
    -                ///  If 1, the channel received a read bus error. Write one to clear.
    -                ///  READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)
    -                READ_ERROR: u1,
    -                ///  Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.
    -                AHB_ERROR: u1,
    -            }),
    -            ///  Alias for channel 9 CTRL register
    -            CH9_AL1_CTRL: u32,
    -            ///  Alias for channel 9 READ_ADDR register
    -            CH9_AL1_READ_ADDR: u32,
    -            ///  Alias for channel 9 WRITE_ADDR register
    -            CH9_AL1_WRITE_ADDR: u32,
    -            ///  Alias for channel 9 TRANS_COUNT register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH9_AL1_TRANS_COUNT_TRIG: u32,
    -            ///  Alias for channel 9 CTRL register
    -            CH9_AL2_CTRL: u32,
    -            ///  Alias for channel 9 TRANS_COUNT register
    -            CH9_AL2_TRANS_COUNT: u32,
    -            ///  Alias for channel 9 READ_ADDR register
    -            CH9_AL2_READ_ADDR: u32,
    -            ///  Alias for channel 9 WRITE_ADDR register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH9_AL2_WRITE_ADDR_TRIG: u32,
    -            ///  Alias for channel 9 CTRL register
    -            CH9_AL3_CTRL: u32,
    -            ///  Alias for channel 9 WRITE_ADDR register
    -            CH9_AL3_WRITE_ADDR: u32,
    -            ///  Alias for channel 9 TRANS_COUNT register
    -            CH9_AL3_TRANS_COUNT: u32,
    -            ///  Alias for channel 9 READ_ADDR register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH9_AL3_READ_ADDR_TRIG: u32,
    -            ///  DMA Channel 10 Read Address pointer
    -            ///  This register updates automatically each time a read completes. The current value is the next address to be read by this channel.
    -            CH10_READ_ADDR: u32,
    -            ///  DMA Channel 10 Write Address pointer
    -            ///  This register updates automatically each time a write completes. The current value is the next address to be written by this channel.
    -            CH10_WRITE_ADDR: u32,
    -            ///  DMA Channel 10 Transfer Count
    -            ///  Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).
    -            ///  When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.
    -            ///  Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.
    -            ///  The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.
    -            CH10_TRANS_COUNT: u32,
    -            ///  DMA Channel 10 Control and Status
    -            CH10_CTRL_TRIG: mmio.Mmio(packed struct(u32) {
    -                ///  DMA Channel Enable.
    -                ///  When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)
    -                EN: u1,
    -                ///  HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.
    -                ///  This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.
    -                HIGH_PRIORITY: u1,
    -                ///  Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.
    -                DATA_SIZE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        SIZE_BYTE = 0x0,
    -                        SIZE_HALFWORD = 0x1,
    -                        SIZE_WORD = 0x2,
    -                        _,
    -                    },
    -                },
    -                ///  If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.
    -                ///  Generally this should be disabled for peripheral-to-memory transfers.
    -                INCR_READ: u1,
    -                ///  If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.
    -                ///  Generally this should be disabled for memory-to-peripheral transfers.
    -                INCR_WRITE: u1,
    -                ///  Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.
    -                ///  Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.
    -                RING_SIZE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        RING_NONE = 0x0,
    -                        _,
    -                    },
    -                },
    -                ///  Select whether RING_SIZE applies to read or write addresses.
    -                ///  If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.
    -                RING_SEL: u1,
    -                ///  When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.
    -                CHAIN_TO: u4,
    -                ///  Select a Transfer Request signal.
    -                ///  The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).
    -                ///  0x0 to 0x3a -> select DREQ n as TREQ
    -                TREQ_SEL: packed union {
    -                    raw: u6,
    -                    value: enum(u6) {
    -                        ///  Select Timer 0 as TREQ
    -                        TIMER0 = 0x3b,
    -                        ///  Select Timer 1 as TREQ
    -                        TIMER1 = 0x3c,
    -                        ///  Select Timer 2 as TREQ (Optional)
    -                        TIMER2 = 0x3d,
    -                        ///  Select Timer 3 as TREQ (Optional)
    -                        TIMER3 = 0x3e,
    -                        ///  Permanent request, for unpaced transfers.
    -                        PERMANENT = 0x3f,
    -                        _,
    -                    },
    -                },
    -                ///  In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.
    -                ///  This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.
    -                IRQ_QUIET: u1,
    -                ///  Apply byte-swap transformation to DMA data.
    -                ///  For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.
    -                BSWAP: u1,
    -                ///  If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.
    -                ///  This allows checksum to be enabled or disabled on a per-control- block basis.
    -                SNIFF_EN: u1,
    -                ///  This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.
    -                ///  To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    -                BUSY: u1,
    -                reserved29: u4,
    -                ///  If 1, the channel received a write bus error. Write one to clear.
    -                ///  WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)
    -                WRITE_ERROR: u1,
    -                ///  If 1, the channel received a read bus error. Write one to clear.
    -                ///  READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)
    -                READ_ERROR: u1,
    -                ///  Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.
    -                AHB_ERROR: u1,
    -            }),
    -            ///  Alias for channel 10 CTRL register
    -            CH10_AL1_CTRL: u32,
    -            ///  Alias for channel 10 READ_ADDR register
    -            CH10_AL1_READ_ADDR: u32,
    -            ///  Alias for channel 10 WRITE_ADDR register
    -            CH10_AL1_WRITE_ADDR: u32,
    -            ///  Alias for channel 10 TRANS_COUNT register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH10_AL1_TRANS_COUNT_TRIG: u32,
    -            ///  Alias for channel 10 CTRL register
    -            CH10_AL2_CTRL: u32,
    -            ///  Alias for channel 10 TRANS_COUNT register
    -            CH10_AL2_TRANS_COUNT: u32,
    -            ///  Alias for channel 10 READ_ADDR register
    -            CH10_AL2_READ_ADDR: u32,
    -            ///  Alias for channel 10 WRITE_ADDR register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH10_AL2_WRITE_ADDR_TRIG: u32,
    -            ///  Alias for channel 10 CTRL register
    -            CH10_AL3_CTRL: u32,
    -            ///  Alias for channel 10 WRITE_ADDR register
    -            CH10_AL3_WRITE_ADDR: u32,
    -            ///  Alias for channel 10 TRANS_COUNT register
    -            CH10_AL3_TRANS_COUNT: u32,
    -            ///  Alias for channel 10 READ_ADDR register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH10_AL3_READ_ADDR_TRIG: u32,
    -            ///  DMA Channel 11 Read Address pointer
    -            ///  This register updates automatically each time a read completes. The current value is the next address to be read by this channel.
    -            CH11_READ_ADDR: u32,
    -            ///  DMA Channel 11 Write Address pointer
    -            ///  This register updates automatically each time a write completes. The current value is the next address to be written by this channel.
    -            CH11_WRITE_ADDR: u32,
    -            ///  DMA Channel 11 Transfer Count
    -            ///  Program the number of bus transfers a channel will perform before halting. Note that, if transfers are larger than one byte in size, this is not equal to the number of bytes transferred (see CTRL_DATA_SIZE).
    -            ///  When the channel is active, reading this register shows the number of transfers remaining, updating automatically each time a write transfer completes.
    -            ///  Writing this register sets the RELOAD value for the transfer counter. Each time this channel is triggered, the RELOAD value is copied into the live transfer counter. The channel can be started multiple times, and will perform the same number of transfers each time, as programmed by most recent write.
    -            ///  The RELOAD value can be observed at CHx_DBG_TCR. If TRANS_COUNT is used as a trigger, the written value is used immediately as the length of the new transfer sequence, as well as being written to RELOAD.
    -            CH11_TRANS_COUNT: u32,
    -            ///  DMA Channel 11 Control and Status
    -            CH11_CTRL_TRIG: mmio.Mmio(packed struct(u32) {
    -                ///  DMA Channel Enable.
    -                ///  When 1, the channel will respond to triggering events, which will cause it to become BUSY and start transferring data. When 0, the channel will ignore triggers, stop issuing transfers, and pause the current transfer sequence (i.e. BUSY will remain high if already high)
    -                EN: u1,
    -                ///  HIGH_PRIORITY gives a channel preferential treatment in issue scheduling: in each scheduling round, all high priority channels are considered first, and then only a single low priority channel, before returning to the high priority channels.
    -                ///  This only affects the order in which the DMA schedules channels. The DMA's bus priority is not changed. If the DMA is not saturated then a low priority channel will see no loss of throughput.
    -                HIGH_PRIORITY: u1,
    -                ///  Set the size of each bus transfer (byte/halfword/word). READ_ADDR and WRITE_ADDR advance by this amount (1/2/4 bytes) with each transfer.
    -                DATA_SIZE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        SIZE_BYTE = 0x0,
    -                        SIZE_HALFWORD = 0x1,
    -                        SIZE_WORD = 0x2,
    -                        _,
    -                    },
    -                },
    -                ///  If 1, the read address increments with each transfer. If 0, each read is directed to the same, initial address.
    -                ///  Generally this should be disabled for peripheral-to-memory transfers.
    -                INCR_READ: u1,
    -                ///  If 1, the write address increments with each transfer. If 0, each write is directed to the same, initial address.
    -                ///  Generally this should be disabled for memory-to-peripheral transfers.
    -                INCR_WRITE: u1,
    -                ///  Size of address wrap region. If 0, don't wrap. For values n > 0, only the lower n bits of the address will change. This wraps the address on a (1 << n) byte boundary, facilitating access to naturally-aligned ring buffers.
    -                ///  Ring sizes between 2 and 32768 bytes are possible. This can apply to either read or write addresses, based on value of RING_SEL.
    -                RING_SIZE: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        RING_NONE = 0x0,
    -                        _,
    -                    },
    -                },
    -                ///  Select whether RING_SIZE applies to read or write addresses.
    -                ///  If 0, read addresses are wrapped on a (1 << RING_SIZE) boundary. If 1, write addresses are wrapped.
    -                RING_SEL: u1,
    -                ///  When this channel completes, it will trigger the channel indicated by CHAIN_TO. Disable by setting CHAIN_TO = _(this channel)_.
    -                CHAIN_TO: u4,
    -                ///  Select a Transfer Request signal.
    -                ///  The channel uses the transfer request signal to pace its data transfer rate. Sources for TREQ signals are internal (TIMERS) or external (DREQ, a Data Request from the system).
    -                ///  0x0 to 0x3a -> select DREQ n as TREQ
    -                TREQ_SEL: packed union {
    -                    raw: u6,
    -                    value: enum(u6) {
    -                        ///  Select Timer 0 as TREQ
    -                        TIMER0 = 0x3b,
    -                        ///  Select Timer 1 as TREQ
    -                        TIMER1 = 0x3c,
    -                        ///  Select Timer 2 as TREQ (Optional)
    -                        TIMER2 = 0x3d,
    -                        ///  Select Timer 3 as TREQ (Optional)
    -                        TIMER3 = 0x3e,
    -                        ///  Permanent request, for unpaced transfers.
    -                        PERMANENT = 0x3f,
    -                        _,
    -                    },
    -                },
    -                ///  In QUIET mode, the channel does not generate IRQs at the end of every transfer block. Instead, an IRQ is raised when NULL is written to a trigger register, indicating the end of a control block chain.
    -                ///  This reduces the number of interrupts to be serviced by the CPU when transferring a DMA chain of many small control blocks.
    -                IRQ_QUIET: u1,
    -                ///  Apply byte-swap transformation to DMA data.
    -                ///  For byte data, this has no effect. For halfword data, the two bytes of each halfword are swapped. For word data, the four bytes of each word are swapped to reverse order.
    -                BSWAP: u1,
    -                ///  If 1, this channel's data transfers are visible to the sniff hardware, and each transfer will advance the state of the checksum. This only applies if the sniff hardware is enabled, and has this channel selected.
    -                ///  This allows checksum to be enabled or disabled on a per-control- block basis.
    -                SNIFF_EN: u1,
    -                ///  This flag goes high when the channel starts a new transfer sequence, and low when the last transfer of that sequence completes. Clearing EN while BUSY is high pauses the channel, and BUSY will stay high while paused.
    -                ///  To terminate a sequence early (and clear the BUSY flag), see CHAN_ABORT.
    -                BUSY: u1,
    -                reserved29: u4,
    -                ///  If 1, the channel received a write bus error. Write one to clear.
    -                ///  WRITE_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 5 transfers later)
    -                WRITE_ERROR: u1,
    -                ///  If 1, the channel received a read bus error. Write one to clear.
    -                ///  READ_ADDR shows the approximate address where the bus error was encountered (will not to be earlier, or more than 3 transfers later)
    -                READ_ERROR: u1,
    -                ///  Logical OR of the READ_ERROR and WRITE_ERROR flags. The channel halts when it encounters any bus error, and always raises its channel IRQ flag.
    -                AHB_ERROR: u1,
    -            }),
    -            ///  Alias for channel 11 CTRL register
    -            CH11_AL1_CTRL: u32,
    -            ///  Alias for channel 11 READ_ADDR register
    -            CH11_AL1_READ_ADDR: u32,
    -            ///  Alias for channel 11 WRITE_ADDR register
    -            CH11_AL1_WRITE_ADDR: u32,
    -            ///  Alias for channel 11 TRANS_COUNT register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH11_AL1_TRANS_COUNT_TRIG: u32,
    -            ///  Alias for channel 11 CTRL register
    -            CH11_AL2_CTRL: u32,
    -            ///  Alias for channel 11 TRANS_COUNT register
    -            CH11_AL2_TRANS_COUNT: u32,
    -            ///  Alias for channel 11 READ_ADDR register
    -            CH11_AL2_READ_ADDR: u32,
    -            ///  Alias for channel 11 WRITE_ADDR register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH11_AL2_WRITE_ADDR_TRIG: u32,
    -            ///  Alias for channel 11 CTRL register
    -            CH11_AL3_CTRL: u32,
    -            ///  Alias for channel 11 WRITE_ADDR register
    -            CH11_AL3_WRITE_ADDR: u32,
    -            ///  Alias for channel 11 TRANS_COUNT register
    -            CH11_AL3_TRANS_COUNT: u32,
    -            ///  Alias for channel 11 READ_ADDR register
    -            ///  This is a trigger register (0xc). Writing a nonzero value will
    -            ///  reload the channel counter and start the channel.
    -            CH11_AL3_READ_ADDR_TRIG: u32,
    -            reserved1024: [256]u8,
    -            ///  Interrupt Status (raw)
    -            INTR: mmio.Mmio(packed struct(u32) {
    -                ///  Raw interrupt status for DMA Channels 0..15. Bit n corresponds to channel n. Ignores any masking or forcing. Channel interrupts can be cleared by writing a bit mask to INTR, INTS0 or INTS1.
    -                ///  Channel interrupts can be routed to either of two system-level IRQs based on INTE0 and INTE1.
    -                ///  This can be used vector different channel interrupts to different ISRs: this might be done to allow NVIC IRQ preemption for more time-critical channels, or to spread IRQ load across different cores.
    -                ///  It is also valid to ignore this behaviour and just use INTE0/INTS0/IRQ 0.
    -                INTR: u16,
    -                padding: u16,
    -            }),
    -            ///  Interrupt Enables for IRQ 0
    -            INTE0: mmio.Mmio(packed struct(u32) {
    -                ///  Set bit n to pass interrupts from channel n to DMA IRQ 0.
    -                INTE0: u16,
    -                padding: u16,
    -            }),
    -            ///  Force Interrupts
    -            INTF0: mmio.Mmio(packed struct(u32) {
    -                ///  Write 1s to force the corresponding bits in INTE0. The interrupt remains asserted until INTF0 is cleared.
    -                INTF0: u16,
    -                padding: u16,
    -            }),
    -            ///  Interrupt Status for IRQ 0
    -            INTS0: mmio.Mmio(packed struct(u32) {
    -                ///  Indicates active channel interrupt requests which are currently causing IRQ 0 to be asserted.
    -                ///  Channel interrupts can be cleared by writing a bit mask here.
    -                INTS0: u16,
    -                padding: u16,
    -            }),
    -            reserved1044: [4]u8,
    -            ///  Interrupt Enables for IRQ 1
    -            INTE1: mmio.Mmio(packed struct(u32) {
    -                ///  Set bit n to pass interrupts from channel n to DMA IRQ 1.
    -                INTE1: u16,
    -                padding: u16,
    -            }),
    -            ///  Force Interrupts for IRQ 1
    -            INTF1: mmio.Mmio(packed struct(u32) {
    -                ///  Write 1s to force the corresponding bits in INTE0. The interrupt remains asserted until INTF0 is cleared.
    -                INTF1: u16,
    -                padding: u16,
    -            }),
    -            ///  Interrupt Status (masked) for IRQ 1
    -            INTS1: mmio.Mmio(packed struct(u32) {
    -                ///  Indicates active channel interrupt requests which are currently causing IRQ 1 to be asserted.
    -                ///  Channel interrupts can be cleared by writing a bit mask here.
    -                INTS1: u16,
    -                padding: u16,
    -            }),
    -            ///  Pacing (X/Y) Fractional Timer
    -            ///  The pacing timer produces TREQ assertions at a rate set by ((X/Y) * sys_clk). This equation is evaluated every sys_clk cycles and therefore can only generate TREQs at a rate of 1 per sys_clk (i.e. permanent TREQ) or less.
    -            TIMER0: mmio.Mmio(packed struct(u32) {
    -                ///  Pacing Timer Divisor. Specifies the Y value for the (X/Y) fractional timer.
    -                Y: u16,
    -                ///  Pacing Timer Dividend. Specifies the X value for the (X/Y) fractional timer.
    -                X: u16,
    -            }),
    -            ///  Pacing (X/Y) Fractional Timer
    -            ///  The pacing timer produces TREQ assertions at a rate set by ((X/Y) * sys_clk). This equation is evaluated every sys_clk cycles and therefore can only generate TREQs at a rate of 1 per sys_clk (i.e. permanent TREQ) or less.
    -            TIMER1: mmio.Mmio(packed struct(u32) {
    -                ///  Pacing Timer Divisor. Specifies the Y value for the (X/Y) fractional timer.
    -                Y: u16,
    -                ///  Pacing Timer Dividend. Specifies the X value for the (X/Y) fractional timer.
    -                X: u16,
    -            }),
    -            ///  Pacing (X/Y) Fractional Timer
    -            ///  The pacing timer produces TREQ assertions at a rate set by ((X/Y) * sys_clk). This equation is evaluated every sys_clk cycles and therefore can only generate TREQs at a rate of 1 per sys_clk (i.e. permanent TREQ) or less.
    -            TIMER2: mmio.Mmio(packed struct(u32) {
    -                ///  Pacing Timer Divisor. Specifies the Y value for the (X/Y) fractional timer.
    -                Y: u16,
    -                ///  Pacing Timer Dividend. Specifies the X value for the (X/Y) fractional timer.
    -                X: u16,
    -            }),
    -            ///  Pacing (X/Y) Fractional Timer
    -            ///  The pacing timer produces TREQ assertions at a rate set by ((X/Y) * sys_clk). This equation is evaluated every sys_clk cycles and therefore can only generate TREQs at a rate of 1 per sys_clk (i.e. permanent TREQ) or less.
    -            TIMER3: mmio.Mmio(packed struct(u32) {
    -                ///  Pacing Timer Divisor. Specifies the Y value for the (X/Y) fractional timer.
    -                Y: u16,
    -                ///  Pacing Timer Dividend. Specifies the X value for the (X/Y) fractional timer.
    -                X: u16,
    -            }),
    -            ///  Trigger one or more channels simultaneously
    -            MULTI_CHAN_TRIGGER: mmio.Mmio(packed struct(u32) {
    -                ///  Each bit in this register corresponds to a DMA channel. Writing a 1 to the relevant bit is the same as writing to that channel's trigger register; the channel will start if it is currently enabled and not already busy.
    -                MULTI_CHAN_TRIGGER: u16,
    -                padding: u16,
    -            }),
    -            ///  Sniffer Control
    -            SNIFF_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  Enable sniffer
    -                EN: u1,
    -                ///  DMA channel for Sniffer to observe
    -                DMACH: u4,
    -                CALC: packed union {
    -                    raw: u4,
    -                    value: enum(u4) {
    -                        ///  Calculate a CRC-32 (IEEE802.3 polynomial)
    -                        CRC32 = 0x0,
    -                        ///  Calculate a CRC-32 (IEEE802.3 polynomial) with bit reversed data
    -                        CRC32R = 0x1,
    -                        ///  Calculate a CRC-16-CCITT
    -                        CRC16 = 0x2,
    -                        ///  Calculate a CRC-16-CCITT with bit reversed data
    -                        CRC16R = 0x3,
    -                        ///  XOR reduction over all data. == 1 if the total 1 population count is odd.
    -                        EVEN = 0xe,
    -                        ///  Calculate a simple 32-bit checksum (addition with a 32 bit accumulator)
    -                        SUM = 0xf,
    -                        _,
    -                    },
    -                },
    -                ///  Locally perform a byte reverse on the sniffed data, before feeding into checksum.
    -                ///  Note that the sniff hardware is downstream of the DMA channel byteswap performed in the read master: if channel CTRL_BSWAP and SNIFF_CTRL_BSWAP are both enabled, their effects cancel from the sniffer's point of view.
    -                BSWAP: u1,
    -                ///  If set, the result appears bit-reversed when read. This does not affect the way the checksum is calculated; the result is transformed on-the-fly between the result register and the bus.
    -                OUT_REV: u1,
    -                ///  If set, the result appears inverted (bitwise complement) when read. This does not affect the way the checksum is calculated; the result is transformed on-the-fly between the result register and the bus.
    -                OUT_INV: u1,
    -                padding: u20,
    -            }),
    -            ///  Data accumulator for sniff hardware
    -            ///  Write an initial seed value here before starting a DMA transfer on the channel indicated by SNIFF_CTRL_DMACH. The hardware will update this register each time it observes a read from the indicated channel. Once the channel completes, the final result can be read from this register.
    -            SNIFF_DATA: u32,
    -            reserved1088: [4]u8,
    -            ///  Debug RAF, WAF, TDF levels
    -            FIFO_LEVELS: mmio.Mmio(packed struct(u32) {
    -                ///  Current Transfer-Data-FIFO fill level
    -                TDF_LVL: u8,
    -                ///  Current Write-Address-FIFO fill level
    -                WAF_LVL: u8,
    -                ///  Current Read-Address-FIFO fill level
    -                RAF_LVL: u8,
    -                padding: u8,
    -            }),
    -            ///  Abort an in-progress transfer sequence on one or more channels
    -            CHAN_ABORT: mmio.Mmio(packed struct(u32) {
    -                ///  Each bit corresponds to a channel. Writing a 1 aborts whatever transfer sequence is in progress on that channel. The bit will remain high until any in-flight transfers have been flushed through the address and data FIFOs.
    -                ///  After writing, this register must be polled until it returns all-zero. Until this point, it is unsafe to restart the channel.
    -                CHAN_ABORT: u16,
    -                padding: u16,
    -            }),
    -            ///  The number of channels this DMA instance is equipped with. This DMA supports up to 16 hardware channels, but can be configured with as few as one, to minimise silicon area.
    -            N_CHANNELS: mmio.Mmio(packed struct(u32) {
    -                N_CHANNELS: u5,
    -                padding: u27,
    -            }),
    -            reserved2048: [948]u8,
    -            ///  Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.
    -            CH0_DBG_CTDREQ: mmio.Mmio(packed struct(u32) {
    -                CH0_DBG_CTDREQ: u6,
    -                padding: u26,
    -            }),
    -            ///  Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer
    -            CH0_DBG_TCR: u32,
    -            reserved2112: [56]u8,
    -            ///  Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.
    -            CH1_DBG_CTDREQ: mmio.Mmio(packed struct(u32) {
    -                CH1_DBG_CTDREQ: u6,
    -                padding: u26,
    -            }),
    -            ///  Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer
    -            CH1_DBG_TCR: u32,
    -            reserved2176: [56]u8,
    -            ///  Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.
    -            CH2_DBG_CTDREQ: mmio.Mmio(packed struct(u32) {
    -                CH2_DBG_CTDREQ: u6,
    -                padding: u26,
    -            }),
    -            ///  Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer
    -            CH2_DBG_TCR: u32,
    -            reserved2240: [56]u8,
    -            ///  Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.
    -            CH3_DBG_CTDREQ: mmio.Mmio(packed struct(u32) {
    -                CH3_DBG_CTDREQ: u6,
    -                padding: u26,
    -            }),
    -            ///  Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer
    -            CH3_DBG_TCR: u32,
    -            reserved2304: [56]u8,
    -            ///  Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.
    -            CH4_DBG_CTDREQ: mmio.Mmio(packed struct(u32) {
    -                CH4_DBG_CTDREQ: u6,
    -                padding: u26,
    -            }),
    -            ///  Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer
    -            CH4_DBG_TCR: u32,
    -            reserved2368: [56]u8,
    -            ///  Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.
    -            CH5_DBG_CTDREQ: mmio.Mmio(packed struct(u32) {
    -                CH5_DBG_CTDREQ: u6,
    -                padding: u26,
    -            }),
    -            ///  Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer
    -            CH5_DBG_TCR: u32,
    -            reserved2432: [56]u8,
    -            ///  Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.
    -            CH6_DBG_CTDREQ: mmio.Mmio(packed struct(u32) {
    -                CH6_DBG_CTDREQ: u6,
    -                padding: u26,
    -            }),
    -            ///  Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer
    -            CH6_DBG_TCR: u32,
    -            reserved2496: [56]u8,
    -            ///  Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.
    -            CH7_DBG_CTDREQ: mmio.Mmio(packed struct(u32) {
    -                CH7_DBG_CTDREQ: u6,
    -                padding: u26,
    -            }),
    -            ///  Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer
    -            CH7_DBG_TCR: u32,
    -            reserved2560: [56]u8,
    -            ///  Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.
    -            CH8_DBG_CTDREQ: mmio.Mmio(packed struct(u32) {
    -                CH8_DBG_CTDREQ: u6,
    -                padding: u26,
    -            }),
    -            ///  Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer
    -            CH8_DBG_TCR: u32,
    -            reserved2624: [56]u8,
    -            ///  Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.
    -            CH9_DBG_CTDREQ: mmio.Mmio(packed struct(u32) {
    -                CH9_DBG_CTDREQ: u6,
    -                padding: u26,
    -            }),
    -            ///  Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer
    -            CH9_DBG_TCR: u32,
    -            reserved2688: [56]u8,
    -            ///  Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.
    -            CH10_DBG_CTDREQ: mmio.Mmio(packed struct(u32) {
    -                CH10_DBG_CTDREQ: u6,
    -                padding: u26,
    -            }),
    -            ///  Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer
    -            CH10_DBG_TCR: u32,
    -            reserved2752: [56]u8,
    -            ///  Read: get channel DREQ counter (i.e. how many accesses the DMA expects it can perform on the peripheral without overflow/underflow. Write any value: clears the counter, and cause channel to re-initiate DREQ handshake.
    -            CH11_DBG_CTDREQ: mmio.Mmio(packed struct(u32) {
    -                CH11_DBG_CTDREQ: u6,
    -                padding: u26,
    -            }),
    -            ///  Read to get channel TRANS_COUNT reload value, i.e. the length of the next transfer
    -            CH11_DBG_TCR: u32,
    -        };
    -
    -        ///  DPRAM layout for USB device.
    -        pub const USBCTRL_DPRAM = extern struct {
    -            ///  Bytes 0-3 of the SETUP packet from the host.
    -            SETUP_PACKET_LOW: mmio.Mmio(packed struct(u32) {
    -                BMREQUESTTYPE: u8,
    -                BREQUEST: u8,
    -                WVALUE: u16,
    -            }),
    -            ///  Bytes 4-7 of the setup packet from the host.
    -            SETUP_PACKET_HIGH: mmio.Mmio(packed struct(u32) {
    -                WINDEX: u16,
    -                WLENGTH: u16,
    -            }),
    -            EP1_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP1_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP2_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP2_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP3_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP3_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP4_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP4_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP5_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP5_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP6_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP6_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP7_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP7_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP8_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP8_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP9_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP9_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP10_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP10_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP11_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP11_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP12_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP12_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP13_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP13_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP14_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP14_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP15_IN_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            EP15_OUT_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  64 byte aligned buffer address for this EP (bits 0-5 are ignored). Relative to the start of the DPRAM.
    -                BUFFER_ADDRESS: u16,
    -                ///  Trigger an interrupt if a NAK is sent. Intended for debug only.
    -                INTERRUPT_ON_NAK: u1,
    -                ///  Trigger an interrupt if a STALL is sent. Intended for debug only.
    -                INTERRUPT_ON_STALL: u1,
    -                reserved26: u8,
    -                ENDPOINT_TYPE: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        Control = 0x0,
    -                        Isochronous = 0x1,
    -                        Bulk = 0x2,
    -                        Interrupt = 0x3,
    -                    },
    -                },
    -                ///  Trigger an interrupt each time both buffers are done. Only valid in double buffered mode.
    -                INTERRUPT_PER_DOUBLE_BUFF: u1,
    -                ///  Trigger an interrupt each time a buffer is done.
    -                INTERRUPT_PER_BUFF: u1,
    -                ///  This endpoint is double buffered.
    -                DOUBLE_BUFFERED: u1,
    -                ///  Enable this endpoint. The device will not reply to any packets for this endpoint if this bit is not set.
    -                ENABLE: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP0_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP0_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP1_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP1_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP2_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP2_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP3_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP3_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP4_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP4_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP5_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP5_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP6_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP6_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP7_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP7_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP8_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP8_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP9_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP9_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP10_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP10_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP11_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP11_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP12_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP12_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP13_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP13_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP14_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP14_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP15_IN_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -            ///  Buffer control for both buffers of an endpoint. Fields ending in a _1 are for buffer 1.
    -            ///  Fields ending in a _0 are for buffer 0. Buffer 1 controls are only valid if the endpoint is in double buffered mode.
    -            EP15_OUT_BUFFER_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  The length of the data in buffer 0.
    -                LENGTH_0: u10,
    -                ///  Buffer 0 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_0: u1,
    -                ///  Reply with a stall (valid for both buffers).
    -                STALL: u1,
    -                ///  Reset the buffer selector to buffer 0.
    -                RESET: u1,
    -                ///  The data pid of buffer 0.
    -                PID_0: u1,
    -                ///  Buffer 0 is the last buffer of the transfer.
    -                LAST_0: u1,
    -                ///  Buffer 0 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_0: u1,
    -                ///  The length of the data in buffer 1.
    -                LENGTH_1: u10,
    -                ///  Buffer 1 is available. This bit is set to indicate the buffer can be used by the controller. The controller clears the available bit when writing the status back.
    -                AVAILABLE_1: u1,
    -                ///  The number of bytes buffer 1 is offset from buffer 0 in Isochronous mode. Only valid in double buffered mode for an Isochronous endpoint.
    -                ///  For a non Isochronous endpoint the offset is always 64 bytes.
    -                DOUBLE_BUFFER_ISO_OFFSET: packed union {
    -                    raw: u2,
    -                    value: enum(u2) {
    -                        @"128" = 0x0,
    -                        @"256" = 0x1,
    -                        @"512" = 0x2,
    -                        @"1024" = 0x3,
    -                    },
    -                },
    -                ///  The data pid of buffer 1.
    -                PID_1: u1,
    -                ///  Buffer 1 is the last buffer of the transfer.
    -                LAST_1: u1,
    -                ///  Buffer 1 is full. For an IN transfer (TX to the host) the bit is set to indicate the data is valid. For an OUT transfer (RX from the host) this bit should be left as a 0. The host will set it when it has filled the buffer with data.
    -                FULL_1: u1,
    -            }),
    -        };
    -    };
    -};
    
    From e018e7ec6f3a483d3d3baa25506448b8cb532648 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20Quei=C3=9Fner?= 
    Date: Fri, 22 Sep 2023 09:03:15 +0200
    Subject: [PATCH 207/286] Microzig Generation 2 Build Interface  (#28)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    * Removes old build code.
    * Makes basic build work again.
    * First build
    * Drops CI
    
    ---------
    
    Co-authored-by: Felix "xq" Queißner 
    ---
     .github/FUNDING.yml                   |     1 -
     .github/workflows/build.yml           |    19 -
     build.zig                             |    82 +-
     build.zig.zon                         |     7 +-
     src/chips.zig                         |    23 -
     esp32c3.svd => src/chips/ESP32-C3.svd |     0
     src/chips/ESP32_C3.json               | 33570 ------------------------
     src/chips/ESP32_C3.zig                | 12378 ---------
     src/cpus.zig                          |    23 -
     9 files changed, 64 insertions(+), 46039 deletions(-)
     delete mode 100644 .github/FUNDING.yml
     delete mode 100644 .github/workflows/build.yml
     delete mode 100644 src/chips.zig
     rename esp32c3.svd => src/chips/ESP32-C3.svd (100%)
     delete mode 100644 src/chips/ESP32_C3.json
     delete mode 100644 src/chips/ESP32_C3.zig
     delete mode 100644 src/cpus.zig
    
    diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
    deleted file mode 100644
    index 85b5393bb..000000000
    --- a/.github/FUNDING.yml
    +++ /dev/null
    @@ -1 +0,0 @@
    -github: MasterQ32
    diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
    deleted file mode 100644
    index 63ea5331c..000000000
    --- a/.github/workflows/build.yml
    +++ /dev/null
    @@ -1,19 +0,0 @@
    -name: Build
    -on:
    -  push:
    -
    -jobs:
    -  build:
    -    runs-on: ${{ matrix.os }}
    -    strategy:
    -      matrix:
    -        os: [ubuntu-latest, windows-latest, macos-latest]
    -        optimize: [Debug, ReleaseSmall, ReleaseFast, ReleaseSafe]
    -    steps:
    -      - uses: actions/checkout@v2
    -      - uses: goto-bus-stop/setup-zig@v2.1.1
    -        with:
    -          version: 0.11.0
    -
    -      - name: Build
    -        run: zig build install "-Doptimize=${{matrix.optimize}}"
    diff --git a/build.zig b/build.zig
    index e04ab94ae..089066cbd 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -1,30 +1,74 @@
     const std = @import("std");
    -const microzig = @import("microzig");
     
    -pub const chips = @import("src/chips.zig");
    -pub const cpus = @import("src/cpus.zig");
    +fn path(comptime suffix: []const u8) std.Build.LazyPath {
    +    return .{
    +        .cwd_relative = comptime ((std.fs.path.dirname(@src().file) orelse ".") ++ suffix),
    +    };
    +}
     
    -pub fn build(b: *std.Build) void {
    -    const optimize = b.standardOptimizeOption(.{});
    +const esp_riscv = .{
    +    .name = "Espressif RISC-V",
    +    .source_file = path("/src/cpus/espressif-riscv.zig"),
    +    .target = std.zig.CrossTarget{
    +        .cpu_arch = .riscv32,
    +        .cpu_model = .{ .explicit = &std.Target.riscv.cpu.generic_rv32 },
    +        .cpu_features_add = std.Target.riscv.featureSet(&.{
    +            std.Target.riscv.Feature.c,
    +            std.Target.riscv.Feature.m,
    +        }),
    +        .os_tag = .freestanding,
    +        .abi = .eabi,
    +    },
    +};
    +
    +const hal = .{
    +    .source_file = path("/src/hals/ESP32_C3.zig"),
    +};
    +
    +pub const chips = struct {
    +    pub const esp32_c3 = .{
    +        .preferred_format = .bin, // TODO: Exchange FLAT format with .esp format
    +        .chip = .{
    +            .name = "ESP32-C3",
    +            .url = "https://www.espressif.com/en/products/socs/esp32-c3",
    +
    +            .cpu = .{ .custom = &esp_riscv },
     
    -    var exe = microzig.addEmbeddedExecutable(b, .{
    -        .name = "esp-bringup",
    -        .source_file = .{
    -            .path = "src/example/blinky.zig",
    +            .register_definition = .{
    +                .svd = path("/src/chips/ESP32-C3.svd"),
    +            },
    +
    +            .memory_regions = &.{
    +                .{ .kind = .flash, .offset = 0x4200_0000, .length = 0x0080_0000 }, // external memory, ibus
    +                .{ .kind = .ram, .offset = 0x3FC8_0000, .length = 0x0006_0000 }, // sram 1, data bus
    +            },
             },
    -        .backing = .{ .chip = chips.esp32_c3 },
    -        .optimize = optimize,
    -    });
    +        .hal = hal,
    +    };
    +};
    +
    +pub fn build(b: *std.Build) void {
    +    _ = b;
    +    // const optimize = b.standardOptimizeOption(.{});
    +
    +    // var exe = microzig.addEmbeddedExecutable(b, .{
    +    //     .name = "esp-bringup",
    +    //     .source_file = .{
    +    //         .path = "src/example/blinky.zig",
    +    //     },
    +    //     .backing = .{ .chip = chips.esp32_c3 },
    +    //     .optimize = optimize,
    +    // });
     
    -    const fw_objcopy = b.addObjCopy(exe.inner.getEmittedBin(), .{
    -        .format = .bin,
    -    });
    +    // const fw_objcopy = b.addObjCopy(exe.inner.getEmittedBin(), .{
    +    //     .format = .bin,
    +    // });
     
    -    const fw_bin = fw_objcopy.getOutput();
    +    // const fw_bin = fw_objcopy.getOutput();
     
    -    const install_fw_bin = b.addInstallFile(fw_bin, "firmware/blinky.bin");
    +    // const install_fw_bin = b.addInstallFile(fw_bin, "firmware/blinky.bin");
     
    -    b.getInstallStep().dependOn(&install_fw_bin.step);
    +    // b.getInstallStep().dependOn(&install_fw_bin.step);
     
    -    b.installArtifact(exe.inner);
    +    // b.installArtifact(exe.inner);
     }
    diff --git a/build.zig.zon b/build.zig.zon
    index e8787ef0b..fd45779e6 100644
    --- a/build.zig.zon
    +++ b/build.zig.zon
    @@ -1,10 +1,5 @@
     .{
         .name = "microzig-espressif-esp",
         .version = "0.1.0",
    -    .dependencies = .{
    -        .microzig = .{
    -            .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/0b3be0a4cc7e6d45714cb09961efc771e364723c.tar.gz",
    -            .hash = "1220ada6d01db7b3d0aa8642df89b1af9ee71b681438249e9a7efb2275fc4cf32152",
    -        },
    -    },
    +    .dependencies = .{},
     }
    diff --git a/src/chips.zig b/src/chips.zig
    deleted file mode 100644
    index 3baa05a3d..000000000
    --- a/src/chips.zig
    +++ /dev/null
    @@ -1,23 +0,0 @@
    -const std = @import("std");
    -const microzig = @import("microzig");
    -const cpus = @import("cpus.zig");
    -
    -fn root_dir() []const u8 {
    -    return std.fs.path.dirname(@src().file) orelse unreachable;
    -}
    -
    -pub const esp32_c3 = microzig.Chip{
    -    .name = "ESP32-C3",
    -    .source = .{
    -        .path = root_dir() ++ "/chips/ESP32_C3.zig",
    -    },
    -    .hal = .{
    -        .path = root_dir() ++ "/hals/ESP32_C3.zig",
    -    },
    -
    -    .cpu = cpus.esp32_c3,
    -    .memory_regions = &.{
    -        .{ .kind = .flash, .offset = 0x4200_0000, .length = 0x0080_0000 }, // external memory, ibus
    -        .{ .kind = .ram, .offset = 0x3FC8_0000, .length = 0x0006_0000 }, // sram 1, data bus
    -    },
    -};
    diff --git a/esp32c3.svd b/src/chips/ESP32-C3.svd
    similarity index 100%
    rename from esp32c3.svd
    rename to src/chips/ESP32-C3.svd
    diff --git a/src/chips/ESP32_C3.json b/src/chips/ESP32_C3.json
    deleted file mode 100644
    index 4691dc788..000000000
    --- a/src/chips/ESP32_C3.json
    +++ /dev/null
    @@ -1,33570 +0,0 @@
    -{
    -  "version": "0.1.0",
    -  "types": {
    -    "peripherals": {
    -      "AES": {
    -        "description": "AES (Advanced Encryption Standard) Accelerator",
    -        "children": {
    -          "registers": {
    -            "KEY_0": {
    -              "description": "Key material key_0 configure register",
    -              "offset": 0,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY_0": {
    -                    "description": "This bits stores key_0 that is a part of key material.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "KEY_1": {
    -              "description": "Key material key_1 configure register",
    -              "offset": 4,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY_1": {
    -                    "description": "This bits stores key_1 that is a part of key material.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "KEY_2": {
    -              "description": "Key material key_2 configure register",
    -              "offset": 8,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY_2": {
    -                    "description": "This bits stores key_2 that is a part of key material.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "KEY_3": {
    -              "description": "Key material key_3 configure register",
    -              "offset": 12,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY_3": {
    -                    "description": "This bits stores key_3 that is a part of key material.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "KEY_4": {
    -              "description": "Key material key_4 configure register",
    -              "offset": 16,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY_4": {
    -                    "description": "This bits stores key_4 that is a part of key material.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "KEY_5": {
    -              "description": "Key material key_5 configure register",
    -              "offset": 20,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY_5": {
    -                    "description": "This bits stores key_5 that is a part of key material.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "KEY_6": {
    -              "description": "Key material key_6 configure register",
    -              "offset": 24,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY_6": {
    -                    "description": "This bits stores key_6 that is a part of key material.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "KEY_7": {
    -              "description": "Key material key_7 configure register",
    -              "offset": 28,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY_7": {
    -                    "description": "This bits stores key_7 that is a part of key material.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "TEXT_IN_0": {
    -              "description": "source text material text_in_0 configure register",
    -              "offset": 32,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TEXT_IN_0": {
    -                    "description": "This bits stores text_in_0 that is a part of source text material.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "TEXT_IN_1": {
    -              "description": "source text material text_in_1 configure register",
    -              "offset": 36,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TEXT_IN_1": {
    -                    "description": "This bits stores text_in_1 that is a part of source text material.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "TEXT_IN_2": {
    -              "description": "source text material text_in_2 configure register",
    -              "offset": 40,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TEXT_IN_2": {
    -                    "description": "This bits stores text_in_2 that is a part of source text material.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "TEXT_IN_3": {
    -              "description": "source text material text_in_3 configure register",
    -              "offset": 44,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TEXT_IN_3": {
    -                    "description": "This bits stores text_in_3 that is a part of source text material.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "TEXT_OUT_0": {
    -              "description": "result text material text_out_0 configure register",
    -              "offset": 48,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TEXT_OUT_0": {
    -                    "description": "This bits stores text_out_0 that is a part of result text material.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "TEXT_OUT_1": {
    -              "description": "result text material text_out_1 configure register",
    -              "offset": 52,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TEXT_OUT_1": {
    -                    "description": "This bits stores text_out_1 that is a part of result text material.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "TEXT_OUT_2": {
    -              "description": "result text material text_out_2 configure register",
    -              "offset": 56,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TEXT_OUT_2": {
    -                    "description": "This bits stores text_out_2 that is a part of result text material.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "TEXT_OUT_3": {
    -              "description": "result text material text_out_3 configure register",
    -              "offset": 60,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TEXT_OUT_3": {
    -                    "description": "This bits stores text_out_3 that is a part of result text material.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "MODE": {
    -              "description": "AES Mode register",
    -              "offset": 64,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "MODE": {
    -                    "description": "This bits decides which one operation mode will be used. 3'd0: AES-EN-128, 3'd1: AES-EN-192, 3'd2: AES-EN-256, 3'd4: AES-DE-128, 3'd5: AES-DE-192, 3'd6: AES-DE-256.",
    -                    "offset": 0,
    -                    "size": 3
    -                  }
    -                }
    -              }
    -            },
    -            "ENDIAN": {
    -              "description": "AES Endian configure register",
    -              "offset": 68,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ENDIAN": {
    -                    "description": "endian. [1:0] key endian, [3:2] text_in endian or in_stream endian,  [5:4] text_out endian or out_stream endian",
    -                    "offset": 0,
    -                    "size": 6
    -                  }
    -                }
    -              }
    -            },
    -            "TRIGGER": {
    -              "description": "AES trigger register",
    -              "offset": 72,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TRIGGER": {
    -                    "description": "Set this bit to start AES calculation.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "STATE": {
    -              "description": "AES state register",
    -              "offset": 76,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "STATE": {
    -                    "description": "Those bits shows AES status. For typical AES, 0: idle, 1: busy. For DMA-AES, 0: idle, 1: busy, 2: calculation_done.",
    -                    "offset": 0,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IV_MEM": {
    -              "description": "The memory that stores initialization vector",
    -              "offset": 80,
    -              "size": 8,
    -              "count": 16,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295
    -            },
    -            "H_MEM": {
    -              "description": "The memory that stores GCM hash subkey",
    -              "offset": 96,
    -              "size": 8,
    -              "count": 16,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295
    -            },
    -            "J0_MEM": {
    -              "description": "The memory that stores J0",
    -              "offset": 112,
    -              "size": 8,
    -              "count": 16,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295
    -            },
    -            "T0_MEM": {
    -              "description": "The memory that stores T0",
    -              "offset": 128,
    -              "size": 8,
    -              "count": 16,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295
    -            },
    -            "DMA_ENABLE": {
    -              "description": "DMA-AES working mode register",
    -              "offset": 144,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_ENABLE": {
    -                    "description": "1'b0: typical AES working mode, 1'b1: DMA-AES working mode.",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "BLOCK_MODE": {
    -              "description": "AES cipher block mode register",
    -              "offset": 148,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BLOCK_MODE": {
    -                    "description": "Those bits decides which block mode will be used. 0x0: ECB, 0x1: CBC, 0x2: OFB, 0x3: CTR, 0x4: CFB-8, 0x5: CFB-128, 0x6: GCM, 0x7: reserved.",
    -                    "offset": 0,
    -                    "size": 3
    -                  }
    -                }
    -              }
    -            },
    -            "BLOCK_NUM": {
    -              "description": "AES block number register",
    -              "offset": 152,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BLOCK_NUM": {
    -                    "description": "Those bits stores the number of Plaintext/ciphertext block.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "INC_SEL": {
    -              "description": "Standard incrementing function configure register",
    -              "offset": 156,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INC_SEL": {
    -                    "description": "This bit decides the standard incrementing function. 0: INC32. 1: INC128.",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "AAD_BLOCK_NUM": {
    -              "description": "Additional Authential Data block number register",
    -              "offset": 160,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "AAD_BLOCK_NUM": {
    -                    "description": "Those bits stores the number of AAD block.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "REMAINDER_BIT_NUM": {
    -              "description": "AES remainder bit number register",
    -              "offset": 164,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "REMAINDER_BIT_NUM": {
    -                    "description": "Those bits stores the number of remainder bit.",
    -                    "offset": 0,
    -                    "size": 7
    -                  }
    -                }
    -              }
    -            },
    -            "CONTINUE": {
    -              "description": "AES continue register",
    -              "offset": 168,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CONTINUE": {
    -                    "description": "Set this bit to continue GCM operation.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_CLEAR": {
    -              "description": "AES Interrupt clear register",
    -              "offset": 172,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INT_CLEAR": {
    -                    "description": "Set this bit to clear the AES interrupt.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ENA": {
    -              "description": "AES Interrupt enable register",
    -              "offset": 176,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INT_ENA": {
    -                    "description": "Set this bit to enable interrupt that occurs when DMA-AES calculation is done.",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DATE": {
    -              "description": "AES version control register",
    -              "offset": 180,
    -              "size": 32,
    -              "reset_value": 538513936,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATE": {
    -                    "description": "This bits stores the version information of AES.",
    -                    "offset": 0,
    -                    "size": 30
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_EXIT": {
    -              "description": "AES-DMA exit config",
    -              "offset": 184,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_EXIT": {
    -                    "description": "Set this register to leave calculation done stage. Recommend to use it after software finishes reading DMA's output buffer.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "APB_CTRL": {
    -        "description": "Advanced Peripheral Bus Controller",
    -        "children": {
    -          "registers": {
    -            "SYSCLK_CONF": {
    -              "description": "APB_CTRL_SYSCLK_CONF_REG",
    -              "offset": 0,
    -              "size": 32,
    -              "reset_value": 1,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PRE_DIV_CNT": {
    -                    "description": "reg_pre_div_cnt",
    -                    "offset": 0,
    -                    "size": 10
    -                  },
    -                  "CLK_320M_EN": {
    -                    "description": "reg_clk_320m_en",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "CLK_EN": {
    -                    "description": "reg_clk_en",
    -                    "offset": 11,
    -                    "size": 1
    -                  },
    -                  "RST_TICK_CNT": {
    -                    "description": "reg_rst_tick_cnt",
    -                    "offset": 12,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "TICK_CONF": {
    -              "description": "APB_CTRL_TICK_CONF_REG",
    -              "offset": 4,
    -              "size": 32,
    -              "reset_value": 67367,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "XTAL_TICK_NUM": {
    -                    "description": "reg_xtal_tick_num",
    -                    "offset": 0,
    -                    "size": 8
    -                  },
    -                  "CK8M_TICK_NUM": {
    -                    "description": "reg_ck8m_tick_num",
    -                    "offset": 8,
    -                    "size": 8
    -                  },
    -                  "TICK_ENABLE": {
    -                    "description": "reg_tick_enable",
    -                    "offset": 16,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CLK_OUT_EN": {
    -              "description": "APB_CTRL_CLK_OUT_EN_REG",
    -              "offset": 8,
    -              "size": 32,
    -              "reset_value": 2047,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CLK20_OEN": {
    -                    "description": "reg_clk20_oen",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "CLK22_OEN": {
    -                    "description": "reg_clk22_oen",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "CLK44_OEN": {
    -                    "description": "reg_clk44_oen",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "CLK_BB_OEN": {
    -                    "description": "reg_clk_bb_oen",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "CLK80_OEN": {
    -                    "description": "reg_clk80_oen",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "CLK160_OEN": {
    -                    "description": "reg_clk160_oen",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "CLK_320M_OEN": {
    -                    "description": "reg_clk_320m_oen",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "CLK_ADC_INF_OEN": {
    -                    "description": "reg_clk_adc_inf_oen",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "CLK_DAC_CPU_OEN": {
    -                    "description": "reg_clk_dac_cpu_oen",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "CLK40X_BB_OEN": {
    -                    "description": "reg_clk40x_bb_oen",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "CLK_XTAL_OEN": {
    -                    "description": "reg_clk_xtal_oen",
    -                    "offset": 10,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "WIFI_BB_CFG": {
    -              "description": "APB_CTRL_WIFI_BB_CFG_REG",
    -              "offset": 12,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "WIFI_BB_CFG": {
    -                    "description": "reg_wifi_bb_cfg",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "WIFI_BB_CFG_2": {
    -              "description": "APB_CTRL_WIFI_BB_CFG_2_REG",
    -              "offset": 16,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "WIFI_BB_CFG_2": {
    -                    "description": "reg_wifi_bb_cfg_2",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "WIFI_CLK_EN": {
    -              "description": "APB_CTRL_WIFI_CLK_EN_REG",
    -              "offset": 20,
    -              "size": 32,
    -              "reset_value": 4294762544,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "WIFI_CLK_EN": {
    -                    "description": "reg_wifi_clk_en",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "WIFI_RST_EN": {
    -              "description": "APB_CTRL_WIFI_RST_EN_REG",
    -              "offset": 24,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "WIFI_RST": {
    -                    "description": "reg_wifi_rst",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "HOST_INF_SEL": {
    -              "description": "APB_CTRL_HOST_INF_SEL_REG",
    -              "offset": 28,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PERI_IO_SWAP": {
    -                    "description": "reg_peri_io_swap",
    -                    "offset": 0,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "EXT_MEM_PMS_LOCK": {
    -              "description": "APB_CTRL_EXT_MEM_PMS_LOCK_REG",
    -              "offset": 32,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "EXT_MEM_PMS_LOCK": {
    -                    "description": "reg_ext_mem_pms_lock",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "FLASH_ACE0_ATTR": {
    -              "description": "APB_CTRL_FLASH_ACE0_ATTR_REG",
    -              "offset": 40,
    -              "size": 32,
    -              "reset_value": 3,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "FLASH_ACE0_ATTR": {
    -                    "description": "reg_flash_ace0_attr",
    -                    "offset": 0,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "FLASH_ACE1_ATTR": {
    -              "description": "APB_CTRL_FLASH_ACE1_ATTR_REG",
    -              "offset": 44,
    -              "size": 32,
    -              "reset_value": 3,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "FLASH_ACE1_ATTR": {
    -                    "description": "reg_flash_ace1_attr",
    -                    "offset": 0,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "FLASH_ACE2_ATTR": {
    -              "description": "APB_CTRL_FLASH_ACE2_ATTR_REG",
    -              "offset": 48,
    -              "size": 32,
    -              "reset_value": 3,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "FLASH_ACE2_ATTR": {
    -                    "description": "reg_flash_ace2_attr",
    -                    "offset": 0,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "FLASH_ACE3_ATTR": {
    -              "description": "APB_CTRL_FLASH_ACE3_ATTR_REG",
    -              "offset": 52,
    -              "size": 32,
    -              "reset_value": 3,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "FLASH_ACE3_ATTR": {
    -                    "description": "reg_flash_ace3_attr",
    -                    "offset": 0,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "FLASH_ACE0_ADDR": {
    -              "description": "APB_CTRL_FLASH_ACE0_ADDR_REG",
    -              "offset": 56,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "S": {
    -                    "description": "reg_flash_ace0_addr_s",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "FLASH_ACE1_ADDR": {
    -              "description": "APB_CTRL_FLASH_ACE1_ADDR_REG",
    -              "offset": 60,
    -              "size": 32,
    -              "reset_value": 4194304,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "S": {
    -                    "description": "reg_flash_ace1_addr_s",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "FLASH_ACE2_ADDR": {
    -              "description": "APB_CTRL_FLASH_ACE2_ADDR_REG",
    -              "offset": 64,
    -              "size": 32,
    -              "reset_value": 8388608,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "S": {
    -                    "description": "reg_flash_ace2_addr_s",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "FLASH_ACE3_ADDR": {
    -              "description": "APB_CTRL_FLASH_ACE3_ADDR_REG",
    -              "offset": 68,
    -              "size": 32,
    -              "reset_value": 12582912,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "S": {
    -                    "description": "reg_flash_ace3_addr_s",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "FLASH_ACE0_SIZE": {
    -              "description": "APB_CTRL_FLASH_ACE0_SIZE_REG",
    -              "offset": 72,
    -              "size": 32,
    -              "reset_value": 1024,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "FLASH_ACE0_SIZE": {
    -                    "description": "reg_flash_ace0_size",
    -                    "offset": 0,
    -                    "size": 13
    -                  }
    -                }
    -              }
    -            },
    -            "FLASH_ACE1_SIZE": {
    -              "description": "APB_CTRL_FLASH_ACE1_SIZE_REG",
    -              "offset": 76,
    -              "size": 32,
    -              "reset_value": 1024,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "FLASH_ACE1_SIZE": {
    -                    "description": "reg_flash_ace1_size",
    -                    "offset": 0,
    -                    "size": 13
    -                  }
    -                }
    -              }
    -            },
    -            "FLASH_ACE2_SIZE": {
    -              "description": "APB_CTRL_FLASH_ACE2_SIZE_REG",
    -              "offset": 80,
    -              "size": 32,
    -              "reset_value": 1024,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "FLASH_ACE2_SIZE": {
    -                    "description": "reg_flash_ace2_size",
    -                    "offset": 0,
    -                    "size": 13
    -                  }
    -                }
    -              }
    -            },
    -            "FLASH_ACE3_SIZE": {
    -              "description": "APB_CTRL_FLASH_ACE3_SIZE_REG",
    -              "offset": 84,
    -              "size": 32,
    -              "reset_value": 1024,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "FLASH_ACE3_SIZE": {
    -                    "description": "reg_flash_ace3_size",
    -                    "offset": 0,
    -                    "size": 13
    -                  }
    -                }
    -              }
    -            },
    -            "SPI_MEM_PMS_CTRL": {
    -              "description": "APB_CTRL_SPI_MEM_PMS_CTRL_REG",
    -              "offset": 136,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SPI_MEM_REJECT_INT": {
    -                    "description": "reg_spi_mem_reject_int",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SPI_MEM_REJECT_CLR": {
    -                    "description": "reg_spi_mem_reject_clr",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SPI_MEM_REJECT_CDE": {
    -                    "description": "reg_spi_mem_reject_cde",
    -                    "offset": 2,
    -                    "size": 5,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "SPI_MEM_REJECT_ADDR": {
    -              "description": "APB_CTRL_SPI_MEM_REJECT_ADDR_REG",
    -              "offset": 140,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SPI_MEM_REJECT_ADDR": {
    -                    "description": "reg_spi_mem_reject_addr",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "SDIO_CTRL": {
    -              "description": "APB_CTRL_SDIO_CTRL_REG",
    -              "offset": 144,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SDIO_WIN_ACCESS_EN": {
    -                    "description": "reg_sdio_win_access_en",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "REDCY_SIG0": {
    -              "description": "APB_CTRL_REDCY_SIG0_REG",
    -              "offset": 148,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "REDCY_SIG0": {
    -                    "description": "reg_redcy_sig0",
    -                    "offset": 0,
    -                    "size": 31
    -                  },
    -                  "REDCY_ANDOR": {
    -                    "description": "reg_redcy_andor",
    -                    "offset": 31,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "REDCY_SIG1": {
    -              "description": "APB_CTRL_REDCY_SIG1_REG",
    -              "offset": 152,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "REDCY_SIG1": {
    -                    "description": "reg_redcy_sig1",
    -                    "offset": 0,
    -                    "size": 31
    -                  },
    -                  "REDCY_NANDOR": {
    -                    "description": "reg_redcy_nandor",
    -                    "offset": 31,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "FRONT_END_MEM_PD": {
    -              "description": "APB_CTRL_FRONT_END_MEM_PD_REG",
    -              "offset": 156,
    -              "size": 32,
    -              "reset_value": 21,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "AGC_MEM_FORCE_PU": {
    -                    "description": "reg_agc_mem_force_pu",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "AGC_MEM_FORCE_PD": {
    -                    "description": "reg_agc_mem_force_pd",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "PBUS_MEM_FORCE_PU": {
    -                    "description": "reg_pbus_mem_force_pu",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "PBUS_MEM_FORCE_PD": {
    -                    "description": "reg_pbus_mem_force_pd",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "DC_MEM_FORCE_PU": {
    -                    "description": "reg_dc_mem_force_pu",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "DC_MEM_FORCE_PD": {
    -                    "description": "reg_dc_mem_force_pd",
    -                    "offset": 5,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "RETENTION_CTRL": {
    -              "description": "APB_CTRL_RETENTION_CTRL_REG",
    -              "offset": 160,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RETENTION_LINK_ADDR": {
    -                    "description": "reg_retention_link_addr",
    -                    "offset": 0,
    -                    "size": 27
    -                  },
    -                  "NOBYPASS_CPU_ISO_RST": {
    -                    "description": "reg_nobypass_cpu_iso_rst",
    -                    "offset": 27,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CLKGATE_FORCE_ON": {
    -              "description": "APB_CTRL_CLKGATE_FORCE_ON_REG",
    -              "offset": 164,
    -              "size": 32,
    -              "reset_value": 63,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ROM_CLKGATE_FORCE_ON": {
    -                    "description": "reg_rom_clkgate_force_on",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "SRAM_CLKGATE_FORCE_ON": {
    -                    "description": "reg_sram_clkgate_force_on",
    -                    "offset": 2,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "MEM_POWER_DOWN": {
    -              "description": "APB_CTRL_MEM_POWER_DOWN_REG",
    -              "offset": 168,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ROM_POWER_DOWN": {
    -                    "description": "reg_rom_power_down",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "SRAM_POWER_DOWN": {
    -                    "description": "reg_sram_power_down",
    -                    "offset": 2,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "MEM_POWER_UP": {
    -              "description": "APB_CTRL_MEM_POWER_UP_REG",
    -              "offset": 172,
    -              "size": 32,
    -              "reset_value": 63,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ROM_POWER_UP": {
    -                    "description": "reg_rom_power_up",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "SRAM_POWER_UP": {
    -                    "description": "reg_sram_power_up",
    -                    "offset": 2,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "RND_DATA": {
    -              "description": "APB_CTRL_RND_DATA_REG",
    -              "offset": 176,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RND_DATA": {
    -                    "description": "reg_rnd_data",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "PERI_BACKUP_CONFIG": {
    -              "description": "APB_CTRL_PERI_BACKUP_CONFIG_REG",
    -              "offset": 180,
    -              "size": 32,
    -              "reset_value": 25728,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PERI_BACKUP_FLOW_ERR": {
    -                    "description": "reg_peri_backup_flow_err",
    -                    "offset": 1,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "PERI_BACKUP_BURST_LIMIT": {
    -                    "description": "reg_peri_backup_burst_limit",
    -                    "offset": 4,
    -                    "size": 5
    -                  },
    -                  "PERI_BACKUP_TOUT_THRES": {
    -                    "description": "reg_peri_backup_tout_thres",
    -                    "offset": 9,
    -                    "size": 10
    -                  },
    -                  "PERI_BACKUP_SIZE": {
    -                    "description": "reg_peri_backup_size",
    -                    "offset": 19,
    -                    "size": 10
    -                  },
    -                  "PERI_BACKUP_START": {
    -                    "description": "reg_peri_backup_start",
    -                    "offset": 29,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "PERI_BACKUP_TO_MEM": {
    -                    "description": "reg_peri_backup_to_mem",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "PERI_BACKUP_ENA": {
    -                    "description": "reg_peri_backup_ena",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "PERI_BACKUP_APB_ADDR": {
    -              "description": "APB_CTRL_PERI_BACKUP_APB_ADDR_REG",
    -              "offset": 184,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BACKUP_APB_START_ADDR": {
    -                    "description": "reg_backup_apb_start_addr",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "PERI_BACKUP_MEM_ADDR": {
    -              "description": "APB_CTRL_PERI_BACKUP_MEM_ADDR_REG",
    -              "offset": 188,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BACKUP_MEM_START_ADDR": {
    -                    "description": "reg_backup_mem_start_addr",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "PERI_BACKUP_INT_RAW": {
    -              "description": "APB_CTRL_PERI_BACKUP_INT_RAW_REG",
    -              "offset": 192,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PERI_BACKUP_DONE_INT_RAW": {
    -                    "description": "reg_peri_backup_done_int_raw",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "PERI_BACKUP_ERR_INT_RAW": {
    -                    "description": "reg_peri_backup_err_int_raw",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "PERI_BACKUP_INT_ST": {
    -              "description": "APB_CTRL_PERI_BACKUP_INT_ST_REG",
    -              "offset": 196,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PERI_BACKUP_DONE_INT_ST": {
    -                    "description": "reg_peri_backup_done_int_st",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "PERI_BACKUP_ERR_INT_ST": {
    -                    "description": "reg_peri_backup_err_int_st",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "PERI_BACKUP_INT_ENA": {
    -              "description": "APB_CTRL_PERI_BACKUP_INT_ENA_REG",
    -              "offset": 200,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PERI_BACKUP_DONE_INT_ENA": {
    -                    "description": "reg_peri_backup_done_int_ena",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "PERI_BACKUP_ERR_INT_ENA": {
    -                    "description": "reg_peri_backup_err_int_ena",
    -                    "offset": 1,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "PERI_BACKUP_INT_CLR": {
    -              "description": "APB_CTRL_PERI_BACKUP_INT_CLR_REG",
    -              "offset": 208,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PERI_BACKUP_DONE_INT_CLR": {
    -                    "description": "reg_peri_backup_done_int_clr",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "PERI_BACKUP_ERR_INT_CLR": {
    -                    "description": "reg_peri_backup_err_int_clr",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DATE": {
    -              "description": "APB_CTRL_DATE_REG",
    -              "offset": 1020,
    -              "size": 32,
    -              "reset_value": 33583632,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATE": {
    -                    "description": "reg_dateVersion control",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "APB_SARADC": {
    -        "description": "Successive Approximation Register Analog to Digital Converter",
    -        "children": {
    -          "registers": {
    -            "CTRL": {
    -              "description": "digital saradc configure register",
    -              "offset": 0,
    -              "size": 32,
    -              "reset_value": 1073971776,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SARADC_START_FORCE": {
    -                    "description": "select software enable saradc sample",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "SARADC_START": {
    -                    "description": "software enable saradc sample",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "SARADC_SAR_CLK_GATED": {
    -                    "description": "SAR clock gated",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "SARADC_SAR_CLK_DIV": {
    -                    "description": "SAR clock divider",
    -                    "offset": 7,
    -                    "size": 8
    -                  },
    -                  "SARADC_SAR_PATT_LEN": {
    -                    "description": "0 ~ 15 means length 1 ~ 16",
    -                    "offset": 15,
    -                    "size": 3
    -                  },
    -                  "SARADC_SAR_PATT_P_CLEAR": {
    -                    "description": "clear the pointer of pattern table for DIG ADC1 CTRL",
    -                    "offset": 23,
    -                    "size": 1
    -                  },
    -                  "SARADC_XPD_SAR_FORCE": {
    -                    "description": "force option to xpd sar blocks",
    -                    "offset": 27,
    -                    "size": 2
    -                  },
    -                  "SARADC_WAIT_ARB_CYCLE": {
    -                    "description": "wait arbit signal stable after sar_done",
    -                    "offset": 30,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "CTRL2": {
    -              "description": "digital saradc configure register",
    -              "offset": 4,
    -              "size": 32,
    -              "reset_value": 41470,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SARADC_MEAS_NUM_LIMIT": {
    -                    "description": "enable max meas num",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "SARADC_MAX_MEAS_NUM": {
    -                    "description": "max conversion number",
    -                    "offset": 1,
    -                    "size": 8
    -                  },
    -                  "SARADC_SAR1_INV": {
    -                    "description": "1: data to DIG ADC1 CTRL is inverted, otherwise not",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "SARADC_SAR2_INV": {
    -                    "description": "1: data to DIG ADC2 CTRL is inverted, otherwise not",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "SARADC_TIMER_TARGET": {
    -                    "description": "to set saradc timer target",
    -                    "offset": 12,
    -                    "size": 12
    -                  },
    -                  "SARADC_TIMER_EN": {
    -                    "description": "to enable saradc timer trigger",
    -                    "offset": 24,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "FILTER_CTRL1": {
    -              "description": "digital saradc configure register",
    -              "offset": 8,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "APB_SARADC_FILTER_FACTOR1": {
    -                    "description": "Factor of saradc filter1",
    -                    "offset": 26,
    -                    "size": 3
    -                  },
    -                  "APB_SARADC_FILTER_FACTOR0": {
    -                    "description": "Factor of saradc filter0",
    -                    "offset": 29,
    -                    "size": 3
    -                  }
    -                }
    -              }
    -            },
    -            "FSM_WAIT": {
    -              "description": "digital saradc configure register",
    -              "offset": 12,
    -              "size": 32,
    -              "reset_value": 16713736,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SARADC_XPD_WAIT": {
    -                    "description": "saradc_xpd_wait",
    -                    "offset": 0,
    -                    "size": 8
    -                  },
    -                  "SARADC_RSTB_WAIT": {
    -                    "description": "saradc_rstb_wait",
    -                    "offset": 8,
    -                    "size": 8
    -                  },
    -                  "SARADC_STANDBY_WAIT": {
    -                    "description": "saradc_standby_wait",
    -                    "offset": 16,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "SAR1_STATUS": {
    -              "description": "digital saradc configure register",
    -              "offset": 16,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SARADC_SAR1_STATUS": {
    -                    "description": "saradc1 status about data and channel",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "SAR2_STATUS": {
    -              "description": "digital saradc configure register",
    -              "offset": 20,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SARADC_SAR2_STATUS": {
    -                    "description": "saradc2 status about data and channel",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "SAR_PATT_TAB1": {
    -              "description": "digital saradc configure register",
    -              "offset": 24,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SARADC_SAR_PATT_TAB1": {
    -                    "description": "item 0 ~ 3 for pattern table 1 (each item one byte)",
    -                    "offset": 0,
    -                    "size": 24
    -                  }
    -                }
    -              }
    -            },
    -            "SAR_PATT_TAB2": {
    -              "description": "digital saradc configure register",
    -              "offset": 28,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SARADC_SAR_PATT_TAB2": {
    -                    "description": "Item 4 ~ 7 for pattern table 1 (each item one byte)",
    -                    "offset": 0,
    -                    "size": 24
    -                  }
    -                }
    -              }
    -            },
    -            "ONETIME_SAMPLE": {
    -              "description": "digital saradc configure register",
    -              "offset": 32,
    -              "size": 32,
    -              "reset_value": 436207616,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SARADC_ONETIME_ATTEN": {
    -                    "description": "configure onetime atten",
    -                    "offset": 23,
    -                    "size": 2
    -                  },
    -                  "SARADC_ONETIME_CHANNEL": {
    -                    "description": "configure onetime channel",
    -                    "offset": 25,
    -                    "size": 4
    -                  },
    -                  "SARADC_ONETIME_START": {
    -                    "description": "trigger adc onetime sample",
    -                    "offset": 29,
    -                    "size": 1
    -                  },
    -                  "SARADC2_ONETIME_SAMPLE": {
    -                    "description": "enable adc2 onetime sample",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "SARADC1_ONETIME_SAMPLE": {
    -                    "description": "enable adc1 onetime sample",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "ARB_CTRL": {
    -              "description": "digital saradc configure register",
    -              "offset": 36,
    -              "size": 32,
    -              "reset_value": 2304,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ADC_ARB_APB_FORCE": {
    -                    "description": "adc2 arbiter force to enableapb controller",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "ADC_ARB_RTC_FORCE": {
    -                    "description": "adc2 arbiter force to enable rtc controller",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "ADC_ARB_WIFI_FORCE": {
    -                    "description": "adc2 arbiter force to enable wifi controller",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "ADC_ARB_GRANT_FORCE": {
    -                    "description": "adc2 arbiter force grant",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "ADC_ARB_APB_PRIORITY": {
    -                    "description": "Set adc2 arbiterapb priority",
    -                    "offset": 6,
    -                    "size": 2
    -                  },
    -                  "ADC_ARB_RTC_PRIORITY": {
    -                    "description": "Set adc2 arbiter rtc priority",
    -                    "offset": 8,
    -                    "size": 2
    -                  },
    -                  "ADC_ARB_WIFI_PRIORITY": {
    -                    "description": "Set adc2 arbiter wifi priority",
    -                    "offset": 10,
    -                    "size": 2
    -                  },
    -                  "ADC_ARB_FIX_PRIORITY": {
    -                    "description": "adc2 arbiter uses fixed priority",
    -                    "offset": 12,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "FILTER_CTRL0": {
    -              "description": "digital saradc configure register",
    -              "offset": 40,
    -              "size": 32,
    -              "reset_value": 57933824,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "APB_SARADC_FILTER_CHANNEL1": {
    -                    "description": "configure filter1 to adc channel",
    -                    "offset": 18,
    -                    "size": 4
    -                  },
    -                  "APB_SARADC_FILTER_CHANNEL0": {
    -                    "description": "configure filter0 to adc channel",
    -                    "offset": 22,
    -                    "size": 4
    -                  },
    -                  "APB_SARADC_FILTER_RESET": {
    -                    "description": "enable apb_adc1_filter",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "SAR1DATA_STATUS": {
    -              "description": "digital saradc configure register",
    -              "offset": 44,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "APB_SARADC1_DATA": {
    -                    "description": "saradc1 data",
    -                    "offset": 0,
    -                    "size": 17,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "SAR2DATA_STATUS": {
    -              "description": "digital saradc configure register",
    -              "offset": 48,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "APB_SARADC2_DATA": {
    -                    "description": "saradc2 data",
    -                    "offset": 0,
    -                    "size": 17,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "THRES0_CTRL": {
    -              "description": "digital saradc configure register",
    -              "offset": 52,
    -              "size": 32,
    -              "reset_value": 262125,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "APB_SARADC_THRES0_CHANNEL": {
    -                    "description": "configure thres0 to adc channel",
    -                    "offset": 0,
    -                    "size": 4
    -                  },
    -                  "APB_SARADC_THRES0_HIGH": {
    -                    "description": "saradc thres0 monitor thres",
    -                    "offset": 5,
    -                    "size": 13
    -                  },
    -                  "APB_SARADC_THRES0_LOW": {
    -                    "description": "saradc thres0 monitor thres",
    -                    "offset": 18,
    -                    "size": 13
    -                  }
    -                }
    -              }
    -            },
    -            "THRES1_CTRL": {
    -              "description": "digital saradc configure register",
    -              "offset": 56,
    -              "size": 32,
    -              "reset_value": 262125,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "APB_SARADC_THRES1_CHANNEL": {
    -                    "description": "configure thres1 to adc channel",
    -                    "offset": 0,
    -                    "size": 4
    -                  },
    -                  "APB_SARADC_THRES1_HIGH": {
    -                    "description": "saradc thres1 monitor thres",
    -                    "offset": 5,
    -                    "size": 13
    -                  },
    -                  "APB_SARADC_THRES1_LOW": {
    -                    "description": "saradc thres1 monitor thres",
    -                    "offset": 18,
    -                    "size": 13
    -                  }
    -                }
    -              }
    -            },
    -            "THRES_CTRL": {
    -              "description": "digital saradc configure register",
    -              "offset": 60,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "APB_SARADC_THRES_ALL_EN": {
    -                    "description": "enable thres to all channel",
    -                    "offset": 27,
    -                    "size": 1
    -                  },
    -                  "APB_SARADC_THRES1_EN": {
    -                    "description": "enable thres1",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "APB_SARADC_THRES0_EN": {
    -                    "description": "enable thres0",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ENA": {
    -              "description": "digital saradc int register",
    -              "offset": 64,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "APB_SARADC_THRES1_LOW_INT_ENA": {
    -                    "description": "saradc thres1 low  interrupt enable",
    -                    "offset": 26,
    -                    "size": 1
    -                  },
    -                  "APB_SARADC_THRES0_LOW_INT_ENA": {
    -                    "description": "saradc thres0 low interrupt enable",
    -                    "offset": 27,
    -                    "size": 1
    -                  },
    -                  "APB_SARADC_THRES1_HIGH_INT_ENA": {
    -                    "description": "saradc thres1 high interrupt enable",
    -                    "offset": 28,
    -                    "size": 1
    -                  },
    -                  "APB_SARADC_THRES0_HIGH_INT_ENA": {
    -                    "description": "saradc thres0 high interrupt enable",
    -                    "offset": 29,
    -                    "size": 1
    -                  },
    -                  "APB_SARADC2_DONE_INT_ENA": {
    -                    "description": "saradc2 done interrupt enable",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "APB_SARADC1_DONE_INT_ENA": {
    -                    "description": "saradc1 done interrupt enable",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "INT_RAW": {
    -              "description": "digital saradc int register",
    -              "offset": 68,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "APB_SARADC_THRES1_LOW_INT_RAW": {
    -                    "description": "saradc thres1 low  interrupt raw",
    -                    "offset": 26,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "APB_SARADC_THRES0_LOW_INT_RAW": {
    -                    "description": "saradc thres0 low interrupt raw",
    -                    "offset": 27,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "APB_SARADC_THRES1_HIGH_INT_RAW": {
    -                    "description": "saradc thres1 high interrupt raw",
    -                    "offset": 28,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "APB_SARADC_THRES0_HIGH_INT_RAW": {
    -                    "description": "saradc thres0 high interrupt raw",
    -                    "offset": 29,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "APB_SARADC2_DONE_INT_RAW": {
    -                    "description": "saradc2 done interrupt raw",
    -                    "offset": 30,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "APB_SARADC1_DONE_INT_RAW": {
    -                    "description": "saradc1 done interrupt raw",
    -                    "offset": 31,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ST": {
    -              "description": "digital saradc int register",
    -              "offset": 72,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "APB_SARADC_THRES1_LOW_INT_ST": {
    -                    "description": "saradc thres1 low  interrupt state",
    -                    "offset": 26,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "APB_SARADC_THRES0_LOW_INT_ST": {
    -                    "description": "saradc thres0 low interrupt state",
    -                    "offset": 27,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "APB_SARADC_THRES1_HIGH_INT_ST": {
    -                    "description": "saradc thres1 high interrupt state",
    -                    "offset": 28,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "APB_SARADC_THRES0_HIGH_INT_ST": {
    -                    "description": "saradc thres0 high interrupt state",
    -                    "offset": 29,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "APB_SARADC2_DONE_INT_ST": {
    -                    "description": "saradc2 done interrupt state",
    -                    "offset": 30,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "APB_SARADC1_DONE_INT_ST": {
    -                    "description": "saradc1 done interrupt state",
    -                    "offset": 31,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_CLR": {
    -              "description": "digital saradc int register",
    -              "offset": 76,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "APB_SARADC_THRES1_LOW_INT_CLR": {
    -                    "description": "saradc thres1 low  interrupt clear",
    -                    "offset": 26,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "APB_SARADC_THRES0_LOW_INT_CLR": {
    -                    "description": "saradc thres0 low interrupt clear",
    -                    "offset": 27,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "APB_SARADC_THRES1_HIGH_INT_CLR": {
    -                    "description": "saradc thres1 high interrupt clear",
    -                    "offset": 28,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "APB_SARADC_THRES0_HIGH_INT_CLR": {
    -                    "description": "saradc thres0 high interrupt clear",
    -                    "offset": 29,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "APB_SARADC2_DONE_INT_CLR": {
    -                    "description": "saradc2 done interrupt clear",
    -                    "offset": 30,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "APB_SARADC1_DONE_INT_CLR": {
    -                    "description": "saradc1 done interrupt clear",
    -                    "offset": 31,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_CONF": {
    -              "description": "digital saradc configure register",
    -              "offset": 80,
    -              "size": 32,
    -              "reset_value": 255,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "APB_ADC_EOF_NUM": {
    -                    "description": "the dma_in_suc_eof gen when sample cnt = spi_eof_num",
    -                    "offset": 0,
    -                    "size": 16
    -                  },
    -                  "APB_ADC_RESET_FSM": {
    -                    "description": "reset_apb_adc_state",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "APB_ADC_TRANS": {
    -                    "description": "enable apb_adc use spi_dma",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CLKM_CONF": {
    -              "description": "digital saradc configure register",
    -              "offset": 84,
    -              "size": 32,
    -              "reset_value": 4,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CLKM_DIV_NUM": {
    -                    "description": "Integral I2S clock divider value",
    -                    "offset": 0,
    -                    "size": 8
    -                  },
    -                  "CLKM_DIV_B": {
    -                    "description": "Fractional clock divider numerator value",
    -                    "offset": 8,
    -                    "size": 6
    -                  },
    -                  "CLKM_DIV_A": {
    -                    "description": "Fractional clock divider denominator value",
    -                    "offset": 14,
    -                    "size": 6
    -                  },
    -                  "CLK_EN": {
    -                    "description": "reg clk en",
    -                    "offset": 20,
    -                    "size": 1
    -                  },
    -                  "CLK_SEL": {
    -                    "description": "Set this bit to enable clk_apll",
    -                    "offset": 21,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "APB_TSENS_CTRL": {
    -              "description": "digital tsens configure register",
    -              "offset": 88,
    -              "size": 32,
    -              "reset_value": 98304,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TSENS_OUT": {
    -                    "description": "temperature sensor data out",
    -                    "offset": 0,
    -                    "size": 8,
    -                    "access": "read-only"
    -                  },
    -                  "TSENS_IN_INV": {
    -                    "description": "invert temperature sensor data",
    -                    "offset": 13,
    -                    "size": 1
    -                  },
    -                  "TSENS_CLK_DIV": {
    -                    "description": "temperature sensor clock divider",
    -                    "offset": 14,
    -                    "size": 8
    -                  },
    -                  "TSENS_PU": {
    -                    "description": "temperature sensor power up",
    -                    "offset": 22,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "TSENS_CTRL2": {
    -              "description": "digital tsens configure register",
    -              "offset": 92,
    -              "size": 32,
    -              "reset_value": 16386,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TSENS_XPD_WAIT": {
    -                    "description": "the time that power up tsens need wait",
    -                    "offset": 0,
    -                    "size": 12
    -                  },
    -                  "TSENS_XPD_FORCE": {
    -                    "description": "force power up tsens",
    -                    "offset": 12,
    -                    "size": 2
    -                  },
    -                  "TSENS_CLK_INV": {
    -                    "description": "inv tsens clk",
    -                    "offset": 14,
    -                    "size": 1
    -                  },
    -                  "TSENS_CLK_SEL": {
    -                    "description": "tsens clk select",
    -                    "offset": 15,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CALI": {
    -              "description": "digital saradc configure register",
    -              "offset": 96,
    -              "size": 32,
    -              "reset_value": 32768,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "APB_SARADC_CALI_CFG": {
    -                    "description": "saradc cali factor",
    -                    "offset": 0,
    -                    "size": 17
    -                  }
    -                }
    -              }
    -            },
    -            "CTRL_DATE": {
    -              "description": "version",
    -              "offset": 1020,
    -              "size": 32,
    -              "reset_value": 33583473,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATE": {
    -                    "description": "version",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "ASSIST_DEBUG": {
    -        "description": "Debug Assist",
    -        "children": {
    -          "registers": {
    -            "C0RE_0_MONTR_ENA": {
    -              "description": "ASSIST_DEBUG_C0RE_0_MONTR_ENA_REG",
    -              "offset": 0,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_AREA_DRAM0_0_RD_ENA": {
    -                    "description": "reg_core_0_area_dram0_0_rd_ena",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "CORE_0_AREA_DRAM0_0_WR_ENA": {
    -                    "description": "reg_core_0_area_dram0_0_wr_ena",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "CORE_0_AREA_DRAM0_1_RD_ENA": {
    -                    "description": "reg_core_0_area_dram0_1_rd_ena",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "CORE_0_AREA_DRAM0_1_WR_ENA": {
    -                    "description": "reg_core_0_area_dram0_1_wr_ena",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "CORE_0_AREA_PIF_0_RD_ENA": {
    -                    "description": "reg_core_0_area_pif_0_rd_ena",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "CORE_0_AREA_PIF_0_WR_ENA": {
    -                    "description": "reg_core_0_area_pif_0_wr_ena",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "CORE_0_AREA_PIF_1_RD_ENA": {
    -                    "description": "reg_core_0_area_pif_1_rd_ena",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "CORE_0_AREA_PIF_1_WR_ENA": {
    -                    "description": "reg_core_0_area_pif_1_wr_ena",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "CORE_0_SP_SPILL_MIN_ENA": {
    -                    "description": "reg_core_0_sp_spill_min_ena",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "CORE_0_SP_SPILL_MAX_ENA": {
    -                    "description": "reg_core_0_sp_spill_max_ena",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "CORE_0_IRAM0_EXCEPTION_MONITOR_ENA": {
    -                    "description": "reg_core_0_iram0_exception_monitor_ena",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "CORE_0_DRAM0_EXCEPTION_MONITOR_ENA": {
    -                    "description": "reg_core_0_dram0_exception_monitor_ena",
    -                    "offset": 11,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_INTR_RAW": {
    -              "description": "ASSIST_DEBUG_CORE_0_INTR_RAW_REG",
    -              "offset": 4,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_AREA_DRAM0_0_RD_RAW": {
    -                    "description": "reg_core_0_area_dram0_0_rd_raw",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_AREA_DRAM0_0_WR_RAW": {
    -                    "description": "reg_core_0_area_dram0_0_wr_raw",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_AREA_DRAM0_1_RD_RAW": {
    -                    "description": "reg_core_0_area_dram0_1_rd_raw",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_AREA_DRAM0_1_WR_RAW": {
    -                    "description": "reg_core_0_area_dram0_1_wr_raw",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_AREA_PIF_0_RD_RAW": {
    -                    "description": "reg_core_0_area_pif_0_rd_raw",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_AREA_PIF_0_WR_RAW": {
    -                    "description": "reg_core_0_area_pif_0_wr_raw",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_AREA_PIF_1_RD_RAW": {
    -                    "description": "reg_core_0_area_pif_1_rd_raw",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_AREA_PIF_1_WR_RAW": {
    -                    "description": "reg_core_0_area_pif_1_wr_raw",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_SP_SPILL_MIN_RAW": {
    -                    "description": "reg_core_0_sp_spill_min_raw",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_SP_SPILL_MAX_RAW": {
    -                    "description": "reg_core_0_sp_spill_max_raw",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_IRAM0_EXCEPTION_MONITOR_RAW": {
    -                    "description": "reg_core_0_iram0_exception_monitor_raw",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_DRAM0_EXCEPTION_MONITOR_RAW": {
    -                    "description": "reg_core_0_dram0_exception_monitor_raw",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_INTR_ENA": {
    -              "description": "ASSIST_DEBUG_CORE_0_INTR_ENA_REG",
    -              "offset": 8,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_AREA_DRAM0_0_RD_INTR_ENA": {
    -                    "description": "reg_core_0_area_dram0_0_rd_intr_ena",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "CORE_0_AREA_DRAM0_0_WR_INTR_ENA": {
    -                    "description": "reg_core_0_area_dram0_0_wr_intr_ena",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "CORE_0_AREA_DRAM0_1_RD_INTR_ENA": {
    -                    "description": "reg_core_0_area_dram0_1_rd_intr_ena",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "CORE_0_AREA_DRAM0_1_WR_INTR_ENA": {
    -                    "description": "reg_core_0_area_dram0_1_wr_intr_ena",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "CORE_0_AREA_PIF_0_RD_INTR_ENA": {
    -                    "description": "reg_core_0_area_pif_0_rd_intr_ena",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "CORE_0_AREA_PIF_0_WR_INTR_ENA": {
    -                    "description": "reg_core_0_area_pif_0_wr_intr_ena",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "CORE_0_AREA_PIF_1_RD_INTR_ENA": {
    -                    "description": "reg_core_0_area_pif_1_rd_intr_ena",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "CORE_0_AREA_PIF_1_WR_INTR_ENA": {
    -                    "description": "reg_core_0_area_pif_1_wr_intr_ena",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "CORE_0_SP_SPILL_MIN_INTR_ENA": {
    -                    "description": "reg_core_0_sp_spill_min_intr_ena",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "CORE_0_SP_SPILL_MAX_INTR_ENA": {
    -                    "description": "reg_core_0_sp_spill_max_intr_ena",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "CORE_0_IRAM0_EXCEPTION_MONITOR_RLS": {
    -                    "description": "reg_core_0_iram0_exception_monitor_ena",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "CORE_0_DRAM0_EXCEPTION_MONITOR_RLS": {
    -                    "description": "reg_core_0_dram0_exception_monitor_ena",
    -                    "offset": 11,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_INTR_CLR": {
    -              "description": "ASSIST_DEBUG_CORE_0_INTR_CLR_REG",
    -              "offset": 12,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_AREA_DRAM0_0_RD_CLR": {
    -                    "description": "reg_core_0_area_dram0_0_rd_clr",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "CORE_0_AREA_DRAM0_0_WR_CLR": {
    -                    "description": "reg_core_0_area_dram0_0_wr_clr",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "CORE_0_AREA_DRAM0_1_RD_CLR": {
    -                    "description": "reg_core_0_area_dram0_1_rd_clr",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "CORE_0_AREA_DRAM0_1_WR_CLR": {
    -                    "description": "reg_core_0_area_dram0_1_wr_clr",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "CORE_0_AREA_PIF_0_RD_CLR": {
    -                    "description": "reg_core_0_area_pif_0_rd_clr",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "CORE_0_AREA_PIF_0_WR_CLR": {
    -                    "description": "reg_core_0_area_pif_0_wr_clr",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "CORE_0_AREA_PIF_1_RD_CLR": {
    -                    "description": "reg_core_0_area_pif_1_rd_clr",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "CORE_0_AREA_PIF_1_WR_CLR": {
    -                    "description": "reg_core_0_area_pif_1_wr_clr",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "CORE_0_SP_SPILL_MIN_CLR": {
    -                    "description": "reg_core_0_sp_spill_min_clr",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "CORE_0_SP_SPILL_MAX_CLR": {
    -                    "description": "reg_core_0_sp_spill_max_clr",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "CORE_0_IRAM0_EXCEPTION_MONITOR_CLR": {
    -                    "description": "reg_core_0_iram0_exception_monitor_clr",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "CORE_0_DRAM0_EXCEPTION_MONITOR_CLR": {
    -                    "description": "reg_core_0_dram0_exception_monitor_clr",
    -                    "offset": 11,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_AREA_DRAM0_0_MIN": {
    -              "description": "ASSIST_DEBUG_CORE_0_AREA_DRAM0_0_MIN_REG",
    -              "offset": 16,
    -              "size": 32,
    -              "reset_value": 4294967295,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_AREA_DRAM0_0_MIN": {
    -                    "description": "reg_core_0_area_dram0_0_min",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_AREA_DRAM0_0_MAX": {
    -              "description": "ASSIST_DEBUG_CORE_0_AREA_DRAM0_0_MAX_REG",
    -              "offset": 20,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_AREA_DRAM0_0_MAX": {
    -                    "description": "reg_core_0_area_dram0_0_max",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_AREA_DRAM0_1_MIN": {
    -              "description": "ASSIST_DEBUG_CORE_0_AREA_DRAM0_1_MIN_REG",
    -              "offset": 24,
    -              "size": 32,
    -              "reset_value": 4294967295,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_AREA_DRAM0_1_MIN": {
    -                    "description": "reg_core_0_area_dram0_1_min",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_AREA_DRAM0_1_MAX": {
    -              "description": "ASSIST_DEBUG_CORE_0_AREA_DRAM0_1_MAX_REG",
    -              "offset": 28,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_AREA_DRAM0_1_MAX": {
    -                    "description": "reg_core_0_area_dram0_1_max",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_AREA_PIF_0_MIN": {
    -              "description": "ASSIST_DEBUG_CORE_0_AREA_PIF_0_MIN_REG",
    -              "offset": 32,
    -              "size": 32,
    -              "reset_value": 4294967295,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_AREA_PIF_0_MIN": {
    -                    "description": "reg_core_0_area_pif_0_min",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_AREA_PIF_0_MAX": {
    -              "description": "ASSIST_DEBUG_CORE_0_AREA_PIF_0_MAX_REG",
    -              "offset": 36,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_AREA_PIF_0_MAX": {
    -                    "description": "reg_core_0_area_pif_0_max",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_AREA_PIF_1_MIN": {
    -              "description": "ASSIST_DEBUG_CORE_0_AREA_PIF_1_MIN_REG",
    -              "offset": 40,
    -              "size": 32,
    -              "reset_value": 4294967295,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_AREA_PIF_1_MIN": {
    -                    "description": "reg_core_0_area_pif_1_min",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_AREA_PIF_1_MAX": {
    -              "description": "ASSIST_DEBUG_CORE_0_AREA_PIF_1_MAX_REG",
    -              "offset": 44,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_AREA_PIF_1_MAX": {
    -                    "description": "reg_core_0_area_pif_1_max",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_AREA_PC": {
    -              "description": "ASSIST_DEBUG_CORE_0_AREA_PC_REG",
    -              "offset": 48,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_AREA_PC": {
    -                    "description": "reg_core_0_area_pc",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_AREA_SP": {
    -              "description": "ASSIST_DEBUG_CORE_0_AREA_SP_REG",
    -              "offset": 52,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_AREA_SP": {
    -                    "description": "reg_core_0_area_sp",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_SP_MIN": {
    -              "description": "ASSIST_DEBUG_CORE_0_SP_MIN_REG",
    -              "offset": 56,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_SP_MIN": {
    -                    "description": "reg_core_0_sp_min",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_SP_MAX": {
    -              "description": "ASSIST_DEBUG_CORE_0_SP_MAX_REG",
    -              "offset": 60,
    -              "size": 32,
    -              "reset_value": 4294967295,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_SP_MAX": {
    -                    "description": "reg_core_0_sp_max",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_SP_PC": {
    -              "description": "ASSIST_DEBUG_CORE_0_SP_PC_REG",
    -              "offset": 64,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_SP_PC": {
    -                    "description": "reg_core_0_sp_pc",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_RCD_EN": {
    -              "description": "ASSIST_DEBUG_CORE_0_RCD_EN_REG",
    -              "offset": 68,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_RCD_RECORDEN": {
    -                    "description": "reg_core_0_rcd_recorden",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "CORE_0_RCD_PDEBUGEN": {
    -                    "description": "reg_core_0_rcd_pdebugen",
    -                    "offset": 1,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_RCD_PDEBUGPC": {
    -              "description": "ASSIST_DEBUG_CORE_0_RCD_PDEBUGPC_REG",
    -              "offset": 72,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_RCD_PDEBUGPC": {
    -                    "description": "reg_core_0_rcd_pdebugpc",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_RCD_PDEBUGSP": {
    -              "description": "ASSIST_DEBUG_CORE_0_RCD_PDEBUGSP_REG",
    -              "offset": 76,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_RCD_PDEBUGSP": {
    -                    "description": "reg_core_0_rcd_pdebugsp",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_IRAM0_EXCEPTION_MONITOR_0": {
    -              "description": "ASSIST_DEBUG_CORE_0_RCD_PDEBUGSP_REG",
    -              "offset": 80,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_IRAM0_RECORDING_ADDR_0": {
    -                    "description": "reg_core_0_iram0_recording_addr_0",
    -                    "offset": 0,
    -                    "size": 24,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_IRAM0_RECORDING_WR_0": {
    -                    "description": "reg_core_0_iram0_recording_wr_0",
    -                    "offset": 24,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_IRAM0_RECORDING_LOADSTORE_0": {
    -                    "description": "reg_core_0_iram0_recording_loadstore_0",
    -                    "offset": 25,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_IRAM0_EXCEPTION_MONITOR_1": {
    -              "description": "ASSIST_DEBUG_CORE_0_IRAM0_EXCEPTION_MONITOR_1_REG",
    -              "offset": 84,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_IRAM0_RECORDING_ADDR_1": {
    -                    "description": "reg_core_0_iram0_recording_addr_1",
    -                    "offset": 0,
    -                    "size": 24,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_IRAM0_RECORDING_WR_1": {
    -                    "description": "reg_core_0_iram0_recording_wr_1",
    -                    "offset": 24,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_IRAM0_RECORDING_LOADSTORE_1": {
    -                    "description": "reg_core_0_iram0_recording_loadstore_1",
    -                    "offset": 25,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_DRAM0_EXCEPTION_MONITOR_0": {
    -              "description": "ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_0_REG",
    -              "offset": 88,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_DRAM0_RECORDING_ADDR_0": {
    -                    "description": "reg_core_0_dram0_recording_addr_0",
    -                    "offset": 0,
    -                    "size": 24,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_DRAM0_RECORDING_WR_0": {
    -                    "description": "reg_core_0_dram0_recording_wr_0",
    -                    "offset": 24,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_DRAM0_RECORDING_BYTEEN_0": {
    -                    "description": "reg_core_0_dram0_recording_byteen_0",
    -                    "offset": 25,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_DRAM0_EXCEPTION_MONITOR_1": {
    -              "description": "ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_1_REG",
    -              "offset": 92,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_DRAM0_RECORDING_PC_0": {
    -                    "description": "reg_core_0_dram0_recording_pc_0",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_DRAM0_EXCEPTION_MONITOR_2": {
    -              "description": "ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_1_REG",
    -              "offset": 96,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_DRAM0_RECORDING_ADDR_1": {
    -                    "description": "reg_core_0_dram0_recording_addr_1",
    -                    "offset": 0,
    -                    "size": 24,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_DRAM0_RECORDING_WR_1": {
    -                    "description": "reg_core_0_dram0_recording_wr_1",
    -                    "offset": 24,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_DRAM0_RECORDING_BYTEEN_1": {
    -                    "description": "reg_core_0_dram0_recording_byteen_1",
    -                    "offset": 25,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_DRAM0_EXCEPTION_MONITOR_3": {
    -              "description": "ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_3_REG",
    -              "offset": 100,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_DRAM0_RECORDING_PC_1": {
    -                    "description": "reg_core_0_dram0_recording_pc_1",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_0": {
    -              "description": "ASSIST_DEBUG_CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_0_REG",
    -              "offset": 104,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_X_IRAM0_DRAM0_LIMIT_CYCLE_0": {
    -                    "description": "reg_core_x_iram0_dram0_limit_cycle_0",
    -                    "offset": 0,
    -                    "size": 20
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_1": {
    -              "description": "ASSIST_DEBUG_CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_1_REG",
    -              "offset": 108,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_X_IRAM0_DRAM0_LIMIT_CYCLE_1": {
    -                    "description": "reg_core_x_iram0_dram0_limit_cycle_1",
    -                    "offset": 0,
    -                    "size": 20
    -                  }
    -                }
    -              }
    -            },
    -            "LOG_SETTING": {
    -              "description": "ASSIST_DEBUG_LOG_SETTING",
    -              "offset": 112,
    -              "size": 32,
    -              "reset_value": 128,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "LOG_ENA": {
    -                    "description": "reg_log_ena",
    -                    "offset": 0,
    -                    "size": 3
    -                  },
    -                  "LOG_MODE": {
    -                    "description": "reg_log_mode",
    -                    "offset": 3,
    -                    "size": 4
    -                  },
    -                  "LOG_MEM_LOOP_ENABLE": {
    -                    "description": "reg_log_mem_loop_enable",
    -                    "offset": 7,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "LOG_DATA_0": {
    -              "description": "ASSIST_DEBUG_LOG_DATA_0_REG",
    -              "offset": 116,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "LOG_DATA_0": {
    -                    "description": "reg_log_data_0",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "LOG_DATA_MASK": {
    -              "description": "ASSIST_DEBUG_LOG_DATA_MASK_REG",
    -              "offset": 120,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "LOG_DATA_SIZE": {
    -                    "description": "reg_log_data_size",
    -                    "offset": 0,
    -                    "size": 16
    -                  }
    -                }
    -              }
    -            },
    -            "LOG_MIN": {
    -              "description": "ASSIST_DEBUG_LOG_MIN_REG",
    -              "offset": 124,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "LOG_MIN": {
    -                    "description": "reg_log_min",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "LOG_MAX": {
    -              "description": "ASSIST_DEBUG_LOG_MAX_REG",
    -              "offset": 128,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "LOG_MAX": {
    -                    "description": "reg_log_max",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "LOG_MEM_START": {
    -              "description": "ASSIST_DEBUG_LOG_MEM_START_REG",
    -              "offset": 132,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "LOG_MEM_START": {
    -                    "description": "reg_log_mem_start",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "LOG_MEM_END": {
    -              "description": "ASSIST_DEBUG_LOG_MEM_END_REG",
    -              "offset": 136,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "LOG_MEM_END": {
    -                    "description": "reg_log_mem_end",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "LOG_MEM_WRITING_ADDR": {
    -              "description": "ASSIST_DEBUG_LOG_MEM_WRITING_ADDR_REG",
    -              "offset": 140,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "LOG_MEM_WRITING_ADDR": {
    -                    "description": "reg_log_mem_writing_addr",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "LOG_MEM_FULL_FLAG": {
    -              "description": "ASSIST_DEBUG_LOG_MEM_FULL_FLAG_REG",
    -              "offset": 144,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "LOG_MEM_FULL_FLAG": {
    -                    "description": "reg_log_mem_full_flag",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CLR_LOG_MEM_FULL_FLAG": {
    -                    "description": "reg_clr_log_mem_full_flag",
    -                    "offset": 1,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "C0RE_0_LASTPC_BEFORE_EXCEPTION": {
    -              "description": "ASSIST_DEBUG_C0RE_0_LASTPC_BEFORE_EXCEPTION",
    -              "offset": 148,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_LASTPC_BEFORE_EXC": {
    -                    "description": "reg_core_0_lastpc_before_exc",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "C0RE_0_DEBUG_MODE": {
    -              "description": "ASSIST_DEBUG_C0RE_0_DEBUG_MODE",
    -              "offset": 152,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_DEBUG_MODE": {
    -                    "description": "reg_core_0_debug_mode",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_DEBUG_MODULE_ACTIVE": {
    -                    "description": "reg_core_0_debug_module_active",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DATE": {
    -              "description": "ASSIST_DEBUG_DATE_REG",
    -              "offset": 508,
    -              "size": 32,
    -              "reset_value": 33587216,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ASSIST_DEBUG_DATE": {
    -                    "description": "reg_assist_debug_date",
    -                    "offset": 0,
    -                    "size": 28
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "DMA": {
    -        "description": "DMA (Direct Memory Access) Controller",
    -        "children": {
    -          "registers": {
    -            "INT_RAW_CH0": {
    -              "description": "DMA_INT_RAW_CH0_REG.",
    -              "offset": 0,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_DONE_CH0_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 0.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_SUC_EOF_CH0_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 0. For UHCI0, the raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received and no data error is detected for Rx channel 0.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_ERR_EOF_CH0_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when data error is detected only in the case that the peripheral is UHCI0 for Rx channel 0. For other peripherals, this raw interrupt is reserved.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_DONE_CH0_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been transmitted to peripherals for Tx channel 0.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_EOF_CH0_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been read from memory for Tx channel 0.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_DSCR_ERR_CH0_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when detecting inlink descriptor error, including owner error, the second and third word error of inlink descriptor for Rx channel 0.",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_DSCR_ERR_CH0_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when detecting outlink descriptor error, including owner error, the second and third word error of outlink descriptor for Tx channel 0.",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_DSCR_EMPTY_CH0_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when Rx buffer pointed by inlink is full and receiving data is not completed, but there is no more inlink for Rx channel 0.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_TOTAL_EOF_CH0_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when data corresponding a outlink (includes one link descriptor or few link descriptors) is transmitted out for Tx channel 0.",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "INFIFO_OVF_CH0_INT_RAW": {
    -                    "description": "This raw interrupt bit turns to high level when level 1 fifo of Rx channel 0 is overflow.",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "INFIFO_UDF_CH0_INT_RAW": {
    -                    "description": "This raw interrupt bit turns to high level when level 1 fifo of Rx channel 0 is underflow.",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUTFIFO_OVF_CH0_INT_RAW": {
    -                    "description": "This raw interrupt bit turns to high level when level 1 fifo of Tx channel 0 is overflow.",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUTFIFO_UDF_CH0_INT_RAW": {
    -                    "description": "This raw interrupt bit turns to high level when level 1 fifo of Tx channel 0 is underflow.",
    -                    "offset": 12,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ST_CH0": {
    -              "description": "DMA_INT_ST_CH0_REG.",
    -              "offset": 4,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_DONE_CH0_INT_ST": {
    -                    "description": "The raw interrupt status bit for the IN_DONE_CH_INT interrupt.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_SUC_EOF_CH0_INT_ST": {
    -                    "description": "The raw interrupt status bit for the IN_SUC_EOF_CH_INT interrupt.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_ERR_EOF_CH0_INT_ST": {
    -                    "description": "The raw interrupt status bit for the IN_ERR_EOF_CH_INT interrupt.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_DONE_CH0_INT_ST": {
    -                    "description": "The raw interrupt status bit for the OUT_DONE_CH_INT interrupt.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_EOF_CH0_INT_ST": {
    -                    "description": "The raw interrupt status bit for the OUT_EOF_CH_INT interrupt.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_DSCR_ERR_CH0_INT_ST": {
    -                    "description": "The raw interrupt status bit for the IN_DSCR_ERR_CH_INT interrupt.",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_DSCR_ERR_CH0_INT_ST": {
    -                    "description": "The raw interrupt status bit for the OUT_DSCR_ERR_CH_INT interrupt.",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_DSCR_EMPTY_CH0_INT_ST": {
    -                    "description": "The raw interrupt status bit for the IN_DSCR_EMPTY_CH_INT interrupt.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_TOTAL_EOF_CH0_INT_ST": {
    -                    "description": "The raw interrupt status bit for the OUT_TOTAL_EOF_CH_INT interrupt.",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "INFIFO_OVF_CH0_INT_ST": {
    -                    "description": "The raw interrupt status bit for the INFIFO_OVF_L1_CH_INT interrupt.",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "INFIFO_UDF_CH0_INT_ST": {
    -                    "description": "The raw interrupt status bit for the INFIFO_UDF_L1_CH_INT interrupt.",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUTFIFO_OVF_CH0_INT_ST": {
    -                    "description": "The raw interrupt status bit for the OUTFIFO_OVF_L1_CH_INT interrupt.",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUTFIFO_UDF_CH0_INT_ST": {
    -                    "description": "The raw interrupt status bit for the OUTFIFO_UDF_L1_CH_INT interrupt.",
    -                    "offset": 12,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ENA_CH0": {
    -              "description": "DMA_INT_ENA_CH0_REG.",
    -              "offset": 8,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_DONE_CH0_INT_ENA": {
    -                    "description": "The interrupt enable bit for the IN_DONE_CH_INT interrupt.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "IN_SUC_EOF_CH0_INT_ENA": {
    -                    "description": "The interrupt enable bit for the IN_SUC_EOF_CH_INT interrupt.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "IN_ERR_EOF_CH0_INT_ENA": {
    -                    "description": "The interrupt enable bit for the IN_ERR_EOF_CH_INT interrupt.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "OUT_DONE_CH0_INT_ENA": {
    -                    "description": "The interrupt enable bit for the OUT_DONE_CH_INT interrupt.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "OUT_EOF_CH0_INT_ENA": {
    -                    "description": "The interrupt enable bit for the OUT_EOF_CH_INT interrupt.",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "IN_DSCR_ERR_CH0_INT_ENA": {
    -                    "description": "The interrupt enable bit for the IN_DSCR_ERR_CH_INT interrupt.",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "OUT_DSCR_ERR_CH0_INT_ENA": {
    -                    "description": "The interrupt enable bit for the OUT_DSCR_ERR_CH_INT interrupt.",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "IN_DSCR_EMPTY_CH0_INT_ENA": {
    -                    "description": "The interrupt enable bit for the IN_DSCR_EMPTY_CH_INT interrupt.",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "OUT_TOTAL_EOF_CH0_INT_ENA": {
    -                    "description": "The interrupt enable bit for the OUT_TOTAL_EOF_CH_INT interrupt.",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "INFIFO_OVF_CH0_INT_ENA": {
    -                    "description": "The interrupt enable bit for the INFIFO_OVF_L1_CH_INT interrupt.",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "INFIFO_UDF_CH0_INT_ENA": {
    -                    "description": "The interrupt enable bit for the INFIFO_UDF_L1_CH_INT interrupt.",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "OUTFIFO_OVF_CH0_INT_ENA": {
    -                    "description": "The interrupt enable bit for the OUTFIFO_OVF_L1_CH_INT interrupt.",
    -                    "offset": 11,
    -                    "size": 1
    -                  },
    -                  "OUTFIFO_UDF_CH0_INT_ENA": {
    -                    "description": "The interrupt enable bit for the OUTFIFO_UDF_L1_CH_INT interrupt.",
    -                    "offset": 12,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "INT_CLR_CH0": {
    -              "description": "DMA_INT_CLR_CH0_REG.",
    -              "offset": 12,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_DONE_CH0_INT_CLR": {
    -                    "description": "Set this bit to clear the IN_DONE_CH_INT interrupt.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "IN_SUC_EOF_CH0_INT_CLR": {
    -                    "description": "Set this bit to clear the IN_SUC_EOF_CH_INT interrupt.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "IN_ERR_EOF_CH0_INT_CLR": {
    -                    "description": "Set this bit to clear the IN_ERR_EOF_CH_INT interrupt.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OUT_DONE_CH0_INT_CLR": {
    -                    "description": "Set this bit to clear the OUT_DONE_CH_INT interrupt.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OUT_EOF_CH0_INT_CLR": {
    -                    "description": "Set this bit to clear the OUT_EOF_CH_INT interrupt.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "IN_DSCR_ERR_CH0_INT_CLR": {
    -                    "description": "Set this bit to clear the IN_DSCR_ERR_CH_INT interrupt.",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OUT_DSCR_ERR_CH0_INT_CLR": {
    -                    "description": "Set this bit to clear the OUT_DSCR_ERR_CH_INT interrupt.",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "IN_DSCR_EMPTY_CH0_INT_CLR": {
    -                    "description": "Set this bit to clear the IN_DSCR_EMPTY_CH_INT interrupt.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OUT_TOTAL_EOF_CH0_INT_CLR": {
    -                    "description": "Set this bit to clear the OUT_TOTAL_EOF_CH_INT interrupt.",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "INFIFO_OVF_CH0_INT_CLR": {
    -                    "description": "Set this bit to clear the INFIFO_OVF_L1_CH_INT interrupt.",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "INFIFO_UDF_CH0_INT_CLR": {
    -                    "description": "Set this bit to clear the INFIFO_UDF_L1_CH_INT interrupt.",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OUTFIFO_OVF_CH0_INT_CLR": {
    -                    "description": "Set this bit to clear the OUTFIFO_OVF_L1_CH_INT interrupt.",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OUTFIFO_UDF_CH0_INT_CLR": {
    -                    "description": "Set this bit to clear the OUTFIFO_UDF_L1_CH_INT interrupt.",
    -                    "offset": 12,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_RAW_CH1": {
    -              "description": "DMA_INT_RAW_CH1_REG.",
    -              "offset": 16,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_DONE_CH1_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 1.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_SUC_EOF_CH1_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 1. For UHCI0, the raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received and no data error is detected for Rx channel 1.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_ERR_EOF_CH1_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when data error is detected only in the case that the peripheral is UHCI0 for Rx channel 1. For other peripherals, this raw interrupt is reserved.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_DONE_CH1_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been transmitted to peripherals for Tx channel 1.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_EOF_CH1_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been read from memory for Tx channel 1.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_DSCR_ERR_CH1_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when detecting inlink descriptor error, including owner error, the second and third word error of inlink descriptor for Rx channel 1.",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_DSCR_ERR_CH1_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when detecting outlink descriptor error, including owner error, the second and third word error of outlink descriptor for Tx channel 1.",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_DSCR_EMPTY_CH1_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when Rx buffer pointed by inlink is full and receiving data is not completed, but there is no more inlink for Rx channel 1.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_TOTAL_EOF_CH1_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when data corresponding a outlink (includes one link descriptor or few link descriptors) is transmitted out for Tx channel 1.",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "INFIFO_OVF_CH1_INT_RAW": {
    -                    "description": "This raw interrupt bit turns to high level when level 1 fifo of Rx channel 1 is overflow.",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "INFIFO_UDF_CH1_INT_RAW": {
    -                    "description": "This raw interrupt bit turns to high level when level 1 fifo of Rx channel 1 is underflow.",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUTFIFO_OVF_CH1_INT_RAW": {
    -                    "description": "This raw interrupt bit turns to high level when level 1 fifo of Tx channel 1 is overflow.",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUTFIFO_UDF_CH1_INT_RAW": {
    -                    "description": "This raw interrupt bit turns to high level when level 1 fifo of Tx channel 1 is underflow.",
    -                    "offset": 12,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ST_CH1": {
    -              "description": "DMA_INT_ST_CH1_REG.",
    -              "offset": 20,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_DONE_CH1_INT_ST": {
    -                    "description": "The raw interrupt status bit for the IN_DONE_CH_INT interrupt.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_SUC_EOF_CH1_INT_ST": {
    -                    "description": "The raw interrupt status bit for the IN_SUC_EOF_CH_INT interrupt.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_ERR_EOF_CH1_INT_ST": {
    -                    "description": "The raw interrupt status bit for the IN_ERR_EOF_CH_INT interrupt.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_DONE_CH1_INT_ST": {
    -                    "description": "The raw interrupt status bit for the OUT_DONE_CH_INT interrupt.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_EOF_CH1_INT_ST": {
    -                    "description": "The raw interrupt status bit for the OUT_EOF_CH_INT interrupt.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_DSCR_ERR_CH1_INT_ST": {
    -                    "description": "The raw interrupt status bit for the IN_DSCR_ERR_CH_INT interrupt.",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_DSCR_ERR_CH1_INT_ST": {
    -                    "description": "The raw interrupt status bit for the OUT_DSCR_ERR_CH_INT interrupt.",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_DSCR_EMPTY_CH1_INT_ST": {
    -                    "description": "The raw interrupt status bit for the IN_DSCR_EMPTY_CH_INT interrupt.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_TOTAL_EOF_CH1_INT_ST": {
    -                    "description": "The raw interrupt status bit for the OUT_TOTAL_EOF_CH_INT interrupt.",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "INFIFO_OVF_CH1_INT_ST": {
    -                    "description": "The raw interrupt status bit for the INFIFO_OVF_L1_CH_INT interrupt.",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "INFIFO_UDF_CH1_INT_ST": {
    -                    "description": "The raw interrupt status bit for the INFIFO_UDF_L1_CH_INT interrupt.",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUTFIFO_OVF_CH1_INT_ST": {
    -                    "description": "The raw interrupt status bit for the OUTFIFO_OVF_L1_CH_INT interrupt.",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUTFIFO_UDF_CH1_INT_ST": {
    -                    "description": "The raw interrupt status bit for the OUTFIFO_UDF_L1_CH_INT interrupt.",
    -                    "offset": 12,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ENA_CH1": {
    -              "description": "DMA_INT_ENA_CH1_REG.",
    -              "offset": 24,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_DONE_CH1_INT_ENA": {
    -                    "description": "The interrupt enable bit for the IN_DONE_CH_INT interrupt.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "IN_SUC_EOF_CH1_INT_ENA": {
    -                    "description": "The interrupt enable bit for the IN_SUC_EOF_CH_INT interrupt.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "IN_ERR_EOF_CH1_INT_ENA": {
    -                    "description": "The interrupt enable bit for the IN_ERR_EOF_CH_INT interrupt.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "OUT_DONE_CH1_INT_ENA": {
    -                    "description": "The interrupt enable bit for the OUT_DONE_CH_INT interrupt.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "OUT_EOF_CH1_INT_ENA": {
    -                    "description": "The interrupt enable bit for the OUT_EOF_CH_INT interrupt.",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "IN_DSCR_ERR_CH1_INT_ENA": {
    -                    "description": "The interrupt enable bit for the IN_DSCR_ERR_CH_INT interrupt.",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "OUT_DSCR_ERR_CH1_INT_ENA": {
    -                    "description": "The interrupt enable bit for the OUT_DSCR_ERR_CH_INT interrupt.",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "IN_DSCR_EMPTY_CH1_INT_ENA": {
    -                    "description": "The interrupt enable bit for the IN_DSCR_EMPTY_CH_INT interrupt.",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "OUT_TOTAL_EOF_CH1_INT_ENA": {
    -                    "description": "The interrupt enable bit for the OUT_TOTAL_EOF_CH_INT interrupt.",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "INFIFO_OVF_CH1_INT_ENA": {
    -                    "description": "The interrupt enable bit for the INFIFO_OVF_L1_CH_INT interrupt.",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "INFIFO_UDF_CH1_INT_ENA": {
    -                    "description": "The interrupt enable bit for the INFIFO_UDF_L1_CH_INT interrupt.",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "OUTFIFO_OVF_CH1_INT_ENA": {
    -                    "description": "The interrupt enable bit for the OUTFIFO_OVF_L1_CH_INT interrupt.",
    -                    "offset": 11,
    -                    "size": 1
    -                  },
    -                  "OUTFIFO_UDF_CH1_INT_ENA": {
    -                    "description": "The interrupt enable bit for the OUTFIFO_UDF_L1_CH_INT interrupt.",
    -                    "offset": 12,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "INT_CLR_CH1": {
    -              "description": "DMA_INT_CLR_CH1_REG.",
    -              "offset": 28,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_DONE_CH1_INT_CLR": {
    -                    "description": "Set this bit to clear the IN_DONE_CH_INT interrupt.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "IN_SUC_EOF_CH1_INT_CLR": {
    -                    "description": "Set this bit to clear the IN_SUC_EOF_CH_INT interrupt.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "IN_ERR_EOF_CH1_INT_CLR": {
    -                    "description": "Set this bit to clear the IN_ERR_EOF_CH_INT interrupt.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OUT_DONE_CH1_INT_CLR": {
    -                    "description": "Set this bit to clear the OUT_DONE_CH_INT interrupt.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OUT_EOF_CH1_INT_CLR": {
    -                    "description": "Set this bit to clear the OUT_EOF_CH_INT interrupt.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "IN_DSCR_ERR_CH1_INT_CLR": {
    -                    "description": "Set this bit to clear the IN_DSCR_ERR_CH_INT interrupt.",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OUT_DSCR_ERR_CH1_INT_CLR": {
    -                    "description": "Set this bit to clear the OUT_DSCR_ERR_CH_INT interrupt.",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "IN_DSCR_EMPTY_CH1_INT_CLR": {
    -                    "description": "Set this bit to clear the IN_DSCR_EMPTY_CH_INT interrupt.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OUT_TOTAL_EOF_CH1_INT_CLR": {
    -                    "description": "Set this bit to clear the OUT_TOTAL_EOF_CH_INT interrupt.",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "INFIFO_OVF_CH1_INT_CLR": {
    -                    "description": "Set this bit to clear the INFIFO_OVF_L1_CH_INT interrupt.",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "INFIFO_UDF_CH1_INT_CLR": {
    -                    "description": "Set this bit to clear the INFIFO_UDF_L1_CH_INT interrupt.",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OUTFIFO_OVF_CH1_INT_CLR": {
    -                    "description": "Set this bit to clear the OUTFIFO_OVF_L1_CH_INT interrupt.",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OUTFIFO_UDF_CH1_INT_CLR": {
    -                    "description": "Set this bit to clear the OUTFIFO_UDF_L1_CH_INT interrupt.",
    -                    "offset": 12,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_RAW_CH2": {
    -              "description": "DMA_INT_RAW_CH2_REG.",
    -              "offset": 32,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_DONE_CH2_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 2.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_SUC_EOF_CH2_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 2. For UHCI0, the raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received and no data error is detected for Rx channel 2.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_ERR_EOF_CH2_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when data error is detected only in the case that the peripheral is UHCI0 for Rx channel 2. For other peripherals, this raw interrupt is reserved.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_DONE_CH2_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been transmitted to peripherals for Tx channel 2.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_EOF_CH2_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been read from memory for Tx channel 2.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_DSCR_ERR_CH2_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when detecting inlink descriptor error, including owner error, the second and third word error of inlink descriptor for Rx channel 2.",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_DSCR_ERR_CH2_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when detecting outlink descriptor error, including owner error, the second and third word error of outlink descriptor for Tx channel 2.",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_DSCR_EMPTY_CH2_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when Rx buffer pointed by inlink is full and receiving data is not completed, but there is no more inlink for Rx channel 2.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_TOTAL_EOF_CH2_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when data corresponding a outlink (includes one link descriptor or few link descriptors) is transmitted out for Tx channel 2.",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "INFIFO_OVF_CH2_INT_RAW": {
    -                    "description": "This raw interrupt bit turns to high level when level 1 fifo of Rx channel 2 is overflow.",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "INFIFO_UDF_CH2_INT_RAW": {
    -                    "description": "This raw interrupt bit turns to high level when level 1 fifo of Rx channel 2 is underflow.",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUTFIFO_OVF_CH2_INT_RAW": {
    -                    "description": "This raw interrupt bit turns to high level when level 1 fifo of Tx channel 2 is overflow.",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUTFIFO_UDF_CH2_INT_RAW": {
    -                    "description": "This raw interrupt bit turns to high level when level 1 fifo of Tx channel 2 is underflow.",
    -                    "offset": 12,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ST_CH2": {
    -              "description": "DMA_INT_ST_CH2_REG.",
    -              "offset": 36,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_DONE_CH2_INT_ST": {
    -                    "description": "The raw interrupt status bit for the IN_DONE_CH_INT interrupt.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_SUC_EOF_CH2_INT_ST": {
    -                    "description": "The raw interrupt status bit for the IN_SUC_EOF_CH_INT interrupt.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_ERR_EOF_CH2_INT_ST": {
    -                    "description": "The raw interrupt status bit for the IN_ERR_EOF_CH_INT interrupt.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_DONE_CH2_INT_ST": {
    -                    "description": "The raw interrupt status bit for the OUT_DONE_CH_INT interrupt.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_EOF_CH2_INT_ST": {
    -                    "description": "The raw interrupt status bit for the OUT_EOF_CH_INT interrupt.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_DSCR_ERR_CH2_INT_ST": {
    -                    "description": "The raw interrupt status bit for the IN_DSCR_ERR_CH_INT interrupt.",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_DSCR_ERR_CH2_INT_ST": {
    -                    "description": "The raw interrupt status bit for the OUT_DSCR_ERR_CH_INT interrupt.",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_DSCR_EMPTY_CH2_INT_ST": {
    -                    "description": "The raw interrupt status bit for the IN_DSCR_EMPTY_CH_INT interrupt.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_TOTAL_EOF_CH2_INT_ST": {
    -                    "description": "The raw interrupt status bit for the OUT_TOTAL_EOF_CH_INT interrupt.",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "INFIFO_OVF_CH2_INT_ST": {
    -                    "description": "The raw interrupt status bit for the INFIFO_OVF_L1_CH_INT interrupt.",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "INFIFO_UDF_CH2_INT_ST": {
    -                    "description": "The raw interrupt status bit for the INFIFO_UDF_L1_CH_INT interrupt.",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUTFIFO_OVF_CH2_INT_ST": {
    -                    "description": "The raw interrupt status bit for the OUTFIFO_OVF_L1_CH_INT interrupt.",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUTFIFO_UDF_CH2_INT_ST": {
    -                    "description": "The raw interrupt status bit for the OUTFIFO_UDF_L1_CH_INT interrupt.",
    -                    "offset": 12,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ENA_CH2": {
    -              "description": "DMA_INT_ENA_CH2_REG.",
    -              "offset": 40,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_DONE_CH2_INT_ENA": {
    -                    "description": "The interrupt enable bit for the IN_DONE_CH_INT interrupt.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "IN_SUC_EOF_CH2_INT_ENA": {
    -                    "description": "The interrupt enable bit for the IN_SUC_EOF_CH_INT interrupt.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "IN_ERR_EOF_CH2_INT_ENA": {
    -                    "description": "The interrupt enable bit for the IN_ERR_EOF_CH_INT interrupt.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "OUT_DONE_CH2_INT_ENA": {
    -                    "description": "The interrupt enable bit for the OUT_DONE_CH_INT interrupt.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "OUT_EOF_CH2_INT_ENA": {
    -                    "description": "The interrupt enable bit for the OUT_EOF_CH_INT interrupt.",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "IN_DSCR_ERR_CH2_INT_ENA": {
    -                    "description": "The interrupt enable bit for the IN_DSCR_ERR_CH_INT interrupt.",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "OUT_DSCR_ERR_CH2_INT_ENA": {
    -                    "description": "The interrupt enable bit for the OUT_DSCR_ERR_CH_INT interrupt.",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "IN_DSCR_EMPTY_CH2_INT_ENA": {
    -                    "description": "The interrupt enable bit for the IN_DSCR_EMPTY_CH_INT interrupt.",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "OUT_TOTAL_EOF_CH2_INT_ENA": {
    -                    "description": "The interrupt enable bit for the OUT_TOTAL_EOF_CH_INT interrupt.",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "INFIFO_OVF_CH2_INT_ENA": {
    -                    "description": "The interrupt enable bit for the INFIFO_OVF_L1_CH_INT interrupt.",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "INFIFO_UDF_CH2_INT_ENA": {
    -                    "description": "The interrupt enable bit for the INFIFO_UDF_L1_CH_INT interrupt.",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "OUTFIFO_OVF_CH2_INT_ENA": {
    -                    "description": "The interrupt enable bit for the OUTFIFO_OVF_L1_CH_INT interrupt.",
    -                    "offset": 11,
    -                    "size": 1
    -                  },
    -                  "OUTFIFO_UDF_CH2_INT_ENA": {
    -                    "description": "The interrupt enable bit for the OUTFIFO_UDF_L1_CH_INT interrupt.",
    -                    "offset": 12,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "INT_CLR_CH2": {
    -              "description": "DMA_INT_CLR_CH2_REG.",
    -              "offset": 44,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_DONE_CH2_INT_CLR": {
    -                    "description": "Set this bit to clear the IN_DONE_CH_INT interrupt.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "IN_SUC_EOF_CH2_INT_CLR": {
    -                    "description": "Set this bit to clear the IN_SUC_EOF_CH_INT interrupt.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "IN_ERR_EOF_CH2_INT_CLR": {
    -                    "description": "Set this bit to clear the IN_ERR_EOF_CH_INT interrupt.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OUT_DONE_CH2_INT_CLR": {
    -                    "description": "Set this bit to clear the OUT_DONE_CH_INT interrupt.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OUT_EOF_CH2_INT_CLR": {
    -                    "description": "Set this bit to clear the OUT_EOF_CH_INT interrupt.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "IN_DSCR_ERR_CH2_INT_CLR": {
    -                    "description": "Set this bit to clear the IN_DSCR_ERR_CH_INT interrupt.",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OUT_DSCR_ERR_CH2_INT_CLR": {
    -                    "description": "Set this bit to clear the OUT_DSCR_ERR_CH_INT interrupt.",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "IN_DSCR_EMPTY_CH2_INT_CLR": {
    -                    "description": "Set this bit to clear the IN_DSCR_EMPTY_CH_INT interrupt.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OUT_TOTAL_EOF_CH2_INT_CLR": {
    -                    "description": "Set this bit to clear the OUT_TOTAL_EOF_CH_INT interrupt.",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "INFIFO_OVF_CH2_INT_CLR": {
    -                    "description": "Set this bit to clear the INFIFO_OVF_L1_CH_INT interrupt.",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "INFIFO_UDF_CH2_INT_CLR": {
    -                    "description": "Set this bit to clear the INFIFO_UDF_L1_CH_INT interrupt.",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OUTFIFO_OVF_CH2_INT_CLR": {
    -                    "description": "Set this bit to clear the OUTFIFO_OVF_L1_CH_INT interrupt.",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OUTFIFO_UDF_CH2_INT_CLR": {
    -                    "description": "Set this bit to clear the OUTFIFO_UDF_L1_CH_INT interrupt.",
    -                    "offset": 12,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "AHB_TEST": {
    -              "description": "DMA_AHB_TEST_REG.",
    -              "offset": 64,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "AHB_TESTMODE": {
    -                    "description": "reserved",
    -                    "offset": 0,
    -                    "size": 3
    -                  },
    -                  "AHB_TESTADDR": {
    -                    "description": "reserved",
    -                    "offset": 4,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "MISC_CONF": {
    -              "description": "DMA_MISC_CONF_REG.",
    -              "offset": 68,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "AHBM_RST_INTER": {
    -                    "description": "Set this bit, then clear this bit to reset the internal ahb FSM.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "ARB_PRI_DIS": {
    -                    "description": "Set this bit to disable priority arbitration function.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "CLK_EN": {
    -                    "description": "reg_clk_en",
    -                    "offset": 3,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DATE": {
    -              "description": "DMA_DATE_REG.",
    -              "offset": 72,
    -              "size": 32,
    -              "reset_value": 33587792,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATE": {
    -                    "description": "register version.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "IN_CONF0_CH0": {
    -              "description": "DMA_IN_CONF0_CH0_REG.",
    -              "offset": 112,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_RST_CH0": {
    -                    "description": "This bit is used to reset DMA channel 0 Rx FSM and Rx FIFO pointer.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "IN_LOOP_TEST_CH0": {
    -                    "description": "reserved",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "INDSCR_BURST_EN_CH0": {
    -                    "description": "Set this bit to 1 to enable INCR burst transfer for Rx channel 0 reading link descriptor when accessing internal SRAM.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "IN_DATA_BURST_EN_CH0": {
    -                    "description": "Set this bit to 1 to enable INCR burst transfer for Rx channel 0 receiving data when accessing internal SRAM.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "MEM_TRANS_EN_CH0": {
    -                    "description": "Set this bit 1 to enable automatic transmitting data from memory to memory via DMA.",
    -                    "offset": 4,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "IN_CONF1_CH0": {
    -              "description": "DMA_IN_CONF1_CH0_REG.",
    -              "offset": 116,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_CHECK_OWNER_CH0": {
    -                    "description": "Set this bit to enable checking the owner attribute of the link descriptor.",
    -                    "offset": 12,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "INFIFO_STATUS_CH0": {
    -              "description": "DMA_INFIFO_STATUS_CH0_REG.",
    -              "offset": 120,
    -              "size": 32,
    -              "reset_value": 125829123,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INFIFO_FULL_CH0": {
    -                    "description": "L1 Rx FIFO full signal for Rx channel 0.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "INFIFO_EMPTY_CH0": {
    -                    "description": "L1 Rx FIFO empty signal for Rx channel 0.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "INFIFO_CNT_CH0": {
    -                    "description": "The register stores the byte number of the data in L1 Rx FIFO for Rx channel 0.",
    -                    "offset": 2,
    -                    "size": 6,
    -                    "access": "read-only"
    -                  },
    -                  "IN_REMAIN_UNDER_1B_CH0": {
    -                    "description": "reserved",
    -                    "offset": 23,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_REMAIN_UNDER_2B_CH0": {
    -                    "description": "reserved",
    -                    "offset": 24,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_REMAIN_UNDER_3B_CH0": {
    -                    "description": "reserved",
    -                    "offset": 25,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_REMAIN_UNDER_4B_CH0": {
    -                    "description": "reserved",
    -                    "offset": 26,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_BUF_HUNGRY_CH0": {
    -                    "description": "reserved",
    -                    "offset": 27,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_POP_CH0": {
    -              "description": "DMA_IN_POP_CH0_REG.",
    -              "offset": 124,
    -              "size": 32,
    -              "reset_value": 2048,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INFIFO_RDATA_CH0": {
    -                    "description": "This register stores the data popping from DMA FIFO.",
    -                    "offset": 0,
    -                    "size": 12,
    -                    "access": "read-only"
    -                  },
    -                  "INFIFO_POP_CH0": {
    -                    "description": "Set this bit to pop data from DMA FIFO.",
    -                    "offset": 12,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "IN_LINK_CH0": {
    -              "description": "DMA_IN_LINK_CH0_REG.",
    -              "offset": 128,
    -              "size": 32,
    -              "reset_value": 17825792,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INLINK_ADDR_CH0": {
    -                    "description": "This register stores the 20 least significant bits of the first inlink descriptor's address.",
    -                    "offset": 0,
    -                    "size": 20
    -                  },
    -                  "INLINK_AUTO_RET_CH0": {
    -                    "description": "Set this bit to return to current inlink descriptor's address, when there are some errors in current receiving data.",
    -                    "offset": 20,
    -                    "size": 1
    -                  },
    -                  "INLINK_STOP_CH0": {
    -                    "description": "Set this bit to stop dealing with the inlink descriptors.",
    -                    "offset": 21,
    -                    "size": 1
    -                  },
    -                  "INLINK_START_CH0": {
    -                    "description": "Set this bit to start dealing with the inlink descriptors.",
    -                    "offset": 22,
    -                    "size": 1
    -                  },
    -                  "INLINK_RESTART_CH0": {
    -                    "description": "Set this bit to mount a new inlink descriptor.",
    -                    "offset": 23,
    -                    "size": 1
    -                  },
    -                  "INLINK_PARK_CH0": {
    -                    "description": "1: the inlink descriptor's FSM is in idle state.  0: the inlink descriptor's FSM is working.",
    -                    "offset": 24,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_STATE_CH0": {
    -              "description": "DMA_IN_STATE_CH0_REG.",
    -              "offset": 132,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INLINK_DSCR_ADDR_CH0": {
    -                    "description": "This register stores the current inlink descriptor's address.",
    -                    "offset": 0,
    -                    "size": 18,
    -                    "access": "read-only"
    -                  },
    -                  "IN_DSCR_STATE_CH0": {
    -                    "description": "reserved",
    -                    "offset": 18,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "IN_STATE_CH0": {
    -                    "description": "reserved",
    -                    "offset": 20,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_SUC_EOF_DES_ADDR_CH0": {
    -              "description": "DMA_IN_SUC_EOF_DES_ADDR_CH0_REG.",
    -              "offset": 136,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_SUC_EOF_DES_ADDR_CH0": {
    -                    "description": "This register stores the address of the inlink descriptor when the EOF bit in this descriptor is 1.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_ERR_EOF_DES_ADDR_CH0": {
    -              "description": "DMA_IN_ERR_EOF_DES_ADDR_CH0_REG.",
    -              "offset": 140,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_ERR_EOF_DES_ADDR_CH0": {
    -                    "description": "This register stores the address of the inlink descriptor when there are some errors in current receiving data. Only used when peripheral is UHCI0.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_DSCR_CH0": {
    -              "description": "DMA_IN_DSCR_CH0_REG.",
    -              "offset": 144,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INLINK_DSCR_CH0": {
    -                    "description": "The address of the current inlink descriptor x.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_DSCR_BF0_CH0": {
    -              "description": "DMA_IN_DSCR_BF0_CH0_REG.",
    -              "offset": 148,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INLINK_DSCR_BF0_CH0": {
    -                    "description": "The address of the last inlink descriptor x-1.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_DSCR_BF1_CH0": {
    -              "description": "DMA_IN_DSCR_BF1_CH0_REG.",
    -              "offset": 152,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INLINK_DSCR_BF1_CH0": {
    -                    "description": "The address of the second-to-last inlink descriptor x-2.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_PRI_CH0": {
    -              "description": "DMA_IN_PRI_CH0_REG.",
    -              "offset": 156,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_PRI_CH0": {
    -                    "description": "The priority of Rx channel 0. The larger of the value, the higher of the priority.",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "IN_PERI_SEL_CH0": {
    -              "description": "DMA_IN_PERI_SEL_CH0_REG.",
    -              "offset": 160,
    -              "size": 32,
    -              "reset_value": 63,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PERI_IN_SEL_CH0": {
    -                    "description": "This register is used to select peripheral for Rx channel 0. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.",
    -                    "offset": 0,
    -                    "size": 6
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_CONF0_CH0": {
    -              "description": "DMA_OUT_CONF0_CH0_REG.",
    -              "offset": 208,
    -              "size": 32,
    -              "reset_value": 8,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUT_RST_CH0": {
    -                    "description": "This bit is used to reset DMA channel 0 Tx FSM and Tx FIFO pointer.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "OUT_LOOP_TEST_CH0": {
    -                    "description": "reserved",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "OUT_AUTO_WRBACK_CH0": {
    -                    "description": "Set this bit to enable automatic outlink-writeback when all the data in tx buffer has been transmitted.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "OUT_EOF_MODE_CH0": {
    -                    "description": "EOF flag generation mode when transmitting data. 1: EOF flag for Tx channel 0 is generated when data need to transmit has been popped from FIFO in DMA",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "OUTDSCR_BURST_EN_CH0": {
    -                    "description": "Set this bit to 1 to enable INCR burst transfer for Tx channel 0 reading link descriptor when accessing internal SRAM.",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "OUT_DATA_BURST_EN_CH0": {
    -                    "description": "Set this bit to 1 to enable INCR burst transfer for Tx channel 0 transmitting data when accessing internal SRAM.",
    -                    "offset": 5,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_CONF1_CH0": {
    -              "description": "DMA_OUT_CONF1_CH0_REG.",
    -              "offset": 212,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUT_CHECK_OWNER_CH0": {
    -                    "description": "Set this bit to enable checking the owner attribute of the link descriptor.",
    -                    "offset": 12,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "OUTFIFO_STATUS_CH0": {
    -              "description": "DMA_OUTFIFO_STATUS_CH0_REG.",
    -              "offset": 216,
    -              "size": 32,
    -              "reset_value": 125829122,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUTFIFO_FULL_CH0": {
    -                    "description": "L1 Tx FIFO full signal for Tx channel 0.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUTFIFO_EMPTY_CH0": {
    -                    "description": "L1 Tx FIFO empty signal for Tx channel 0.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUTFIFO_CNT_CH0": {
    -                    "description": "The register stores the byte number of the data in L1 Tx FIFO for Tx channel 0.",
    -                    "offset": 2,
    -                    "size": 6,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_REMAIN_UNDER_1B_CH0": {
    -                    "description": "reserved",
    -                    "offset": 23,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_REMAIN_UNDER_2B_CH0": {
    -                    "description": "reserved",
    -                    "offset": 24,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_REMAIN_UNDER_3B_CH0": {
    -                    "description": "reserved",
    -                    "offset": 25,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_REMAIN_UNDER_4B_CH0": {
    -                    "description": "reserved",
    -                    "offset": 26,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_PUSH_CH0": {
    -              "description": "DMA_OUT_PUSH_CH0_REG.",
    -              "offset": 220,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUTFIFO_WDATA_CH0": {
    -                    "description": "This register stores the data that need to be pushed into DMA FIFO.",
    -                    "offset": 0,
    -                    "size": 9
    -                  },
    -                  "OUTFIFO_PUSH_CH0": {
    -                    "description": "Set this bit to push data into DMA FIFO.",
    -                    "offset": 9,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_LINK_CH0": {
    -              "description": "DMA_OUT_LINK_CH0_REG.",
    -              "offset": 224,
    -              "size": 32,
    -              "reset_value": 8388608,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUTLINK_ADDR_CH0": {
    -                    "description": "This register stores the 20 least significant bits of the first outlink descriptor's address.",
    -                    "offset": 0,
    -                    "size": 20
    -                  },
    -                  "OUTLINK_STOP_CH0": {
    -                    "description": "Set this bit to stop dealing with the outlink descriptors.",
    -                    "offset": 20,
    -                    "size": 1
    -                  },
    -                  "OUTLINK_START_CH0": {
    -                    "description": "Set this bit to start dealing with the outlink descriptors.",
    -                    "offset": 21,
    -                    "size": 1
    -                  },
    -                  "OUTLINK_RESTART_CH0": {
    -                    "description": "Set this bit to restart a new outlink from the last address.",
    -                    "offset": 22,
    -                    "size": 1
    -                  },
    -                  "OUTLINK_PARK_CH0": {
    -                    "description": "1: the outlink descriptor's FSM is in idle state.  0: the outlink descriptor's FSM is working.",
    -                    "offset": 23,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_STATE_CH0": {
    -              "description": "DMA_OUT_STATE_CH0_REG.",
    -              "offset": 228,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUTLINK_DSCR_ADDR_CH0": {
    -                    "description": "This register stores the current outlink descriptor's address.",
    -                    "offset": 0,
    -                    "size": 18,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_DSCR_STATE_CH0": {
    -                    "description": "reserved",
    -                    "offset": 18,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_STATE_CH0": {
    -                    "description": "reserved",
    -                    "offset": 20,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_EOF_DES_ADDR_CH0": {
    -              "description": "DMA_OUT_EOF_DES_ADDR_CH0_REG.",
    -              "offset": 232,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUT_EOF_DES_ADDR_CH0": {
    -                    "description": "This register stores the address of the outlink descriptor when the EOF bit in this descriptor is 1.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_EOF_BFR_DES_ADDR_CH0": {
    -              "description": "DMA_OUT_EOF_BFR_DES_ADDR_CH0_REG.",
    -              "offset": 236,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUT_EOF_BFR_DES_ADDR_CH0": {
    -                    "description": "This register stores the address of the outlink descriptor before the last outlink descriptor.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_DSCR_CH0": {
    -              "description": "DMA_OUT_DSCR_CH0_REG.",
    -              "offset": 240,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUTLINK_DSCR_CH0": {
    -                    "description": "The address of the current outlink descriptor y.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_DSCR_BF0_CH0": {
    -              "description": "DMA_OUT_DSCR_BF0_CH0_REG.",
    -              "offset": 244,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUTLINK_DSCR_BF0_CH0": {
    -                    "description": "The address of the last outlink descriptor y-1.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_DSCR_BF1_CH0": {
    -              "description": "DMA_OUT_DSCR_BF1_CH0_REG.",
    -              "offset": 248,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUTLINK_DSCR_BF1_CH0": {
    -                    "description": "The address of the second-to-last inlink descriptor x-2.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_PRI_CH0": {
    -              "description": "DMA_OUT_PRI_CH0_REG.",
    -              "offset": 252,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_PRI_CH0": {
    -                    "description": "The priority of Tx channel 0. The larger of the value, the higher of the priority.",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_PERI_SEL_CH0": {
    -              "description": "DMA_OUT_PERI_SEL_CH0_REG.",
    -              "offset": 256,
    -              "size": 32,
    -              "reset_value": 63,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PERI_OUT_SEL_CH0": {
    -                    "description": "This register is used to select peripheral for Tx channel 0. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.",
    -                    "offset": 0,
    -                    "size": 6
    -                  }
    -                }
    -              }
    -            },
    -            "IN_CONF0_CH1": {
    -              "description": "DMA_IN_CONF0_CH1_REG.",
    -              "offset": 304,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_RST_CH1": {
    -                    "description": "This bit is used to reset DMA channel 1 Rx FSM and Rx FIFO pointer.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "IN_LOOP_TEST_CH1": {
    -                    "description": "reserved",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "INDSCR_BURST_EN_CH1": {
    -                    "description": "Set this bit to 1 to enable INCR burst transfer for Rx channel 1 reading link descriptor when accessing internal SRAM.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "IN_DATA_BURST_EN_CH1": {
    -                    "description": "Set this bit to 1 to enable INCR burst transfer for Rx channel 1 receiving data when accessing internal SRAM.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "MEM_TRANS_EN_CH1": {
    -                    "description": "Set this bit 1 to enable automatic transmitting data from memory to memory via DMA.",
    -                    "offset": 4,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "IN_CONF1_CH1": {
    -              "description": "DMA_IN_CONF1_CH1_REG.",
    -              "offset": 308,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_CHECK_OWNER_CH1": {
    -                    "description": "Set this bit to enable checking the owner attribute of the link descriptor.",
    -                    "offset": 12,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "INFIFO_STATUS_CH1": {
    -              "description": "DMA_INFIFO_STATUS_CH1_REG.",
    -              "offset": 312,
    -              "size": 32,
    -              "reset_value": 125829123,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INFIFO_FULL_CH1": {
    -                    "description": "L1 Rx FIFO full signal for Rx channel 1.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "INFIFO_EMPTY_CH1": {
    -                    "description": "L1 Rx FIFO empty signal for Rx channel 1.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "INFIFO_CNT_CH1": {
    -                    "description": "The register stores the byte number of the data in L1 Rx FIFO for Rx channel 1.",
    -                    "offset": 2,
    -                    "size": 6,
    -                    "access": "read-only"
    -                  },
    -                  "IN_REMAIN_UNDER_1B_CH1": {
    -                    "description": "reserved",
    -                    "offset": 23,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_REMAIN_UNDER_2B_CH1": {
    -                    "description": "reserved",
    -                    "offset": 24,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_REMAIN_UNDER_3B_CH1": {
    -                    "description": "reserved",
    -                    "offset": 25,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_REMAIN_UNDER_4B_CH1": {
    -                    "description": "reserved",
    -                    "offset": 26,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_BUF_HUNGRY_CH1": {
    -                    "description": "reserved",
    -                    "offset": 27,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_POP_CH1": {
    -              "description": "DMA_IN_POP_CH1_REG.",
    -              "offset": 316,
    -              "size": 32,
    -              "reset_value": 2048,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INFIFO_RDATA_CH1": {
    -                    "description": "This register stores the data popping from DMA FIFO.",
    -                    "offset": 0,
    -                    "size": 12,
    -                    "access": "read-only"
    -                  },
    -                  "INFIFO_POP_CH1": {
    -                    "description": "Set this bit to pop data from DMA FIFO.",
    -                    "offset": 12,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "IN_LINK_CH1": {
    -              "description": "DMA_IN_LINK_CH1_REG.",
    -              "offset": 320,
    -              "size": 32,
    -              "reset_value": 17825792,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INLINK_ADDR_CH1": {
    -                    "description": "This register stores the 20 least significant bits of the first inlink descriptor's address.",
    -                    "offset": 0,
    -                    "size": 20
    -                  },
    -                  "INLINK_AUTO_RET_CH1": {
    -                    "description": "Set this bit to return to current inlink descriptor's address, when there are some errors in current receiving data.",
    -                    "offset": 20,
    -                    "size": 1
    -                  },
    -                  "INLINK_STOP_CH1": {
    -                    "description": "Set this bit to stop dealing with the inlink descriptors.",
    -                    "offset": 21,
    -                    "size": 1
    -                  },
    -                  "INLINK_START_CH1": {
    -                    "description": "Set this bit to start dealing with the inlink descriptors.",
    -                    "offset": 22,
    -                    "size": 1
    -                  },
    -                  "INLINK_RESTART_CH1": {
    -                    "description": "Set this bit to mount a new inlink descriptor.",
    -                    "offset": 23,
    -                    "size": 1
    -                  },
    -                  "INLINK_PARK_CH1": {
    -                    "description": "1: the inlink descriptor's FSM is in idle state.  0: the inlink descriptor's FSM is working.",
    -                    "offset": 24,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_STATE_CH1": {
    -              "description": "DMA_IN_STATE_CH1_REG.",
    -              "offset": 324,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INLINK_DSCR_ADDR_CH1": {
    -                    "description": "This register stores the current inlink descriptor's address.",
    -                    "offset": 0,
    -                    "size": 18,
    -                    "access": "read-only"
    -                  },
    -                  "IN_DSCR_STATE_CH1": {
    -                    "description": "reserved",
    -                    "offset": 18,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "IN_STATE_CH1": {
    -                    "description": "reserved",
    -                    "offset": 20,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_SUC_EOF_DES_ADDR_CH1": {
    -              "description": "DMA_IN_SUC_EOF_DES_ADDR_CH1_REG.",
    -              "offset": 328,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_SUC_EOF_DES_ADDR_CH1": {
    -                    "description": "This register stores the address of the inlink descriptor when the EOF bit in this descriptor is 1.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_ERR_EOF_DES_ADDR_CH1": {
    -              "description": "DMA_IN_ERR_EOF_DES_ADDR_CH1_REG.",
    -              "offset": 332,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_ERR_EOF_DES_ADDR_CH1": {
    -                    "description": "This register stores the address of the inlink descriptor when there are some errors in current receiving data. Only used when peripheral is UHCI0.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_DSCR_CH1": {
    -              "description": "DMA_IN_DSCR_CH1_REG.",
    -              "offset": 336,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INLINK_DSCR_CH1": {
    -                    "description": "The address of the current inlink descriptor x.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_DSCR_BF0_CH1": {
    -              "description": "DMA_IN_DSCR_BF0_CH1_REG.",
    -              "offset": 340,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INLINK_DSCR_BF0_CH1": {
    -                    "description": "The address of the last inlink descriptor x-1.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_DSCR_BF1_CH1": {
    -              "description": "DMA_IN_DSCR_BF1_CH1_REG.",
    -              "offset": 344,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INLINK_DSCR_BF1_CH1": {
    -                    "description": "The address of the second-to-last inlink descriptor x-2.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_PRI_CH1": {
    -              "description": "DMA_IN_PRI_CH1_REG.",
    -              "offset": 348,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_PRI_CH1": {
    -                    "description": "The priority of Rx channel 1. The larger of the value, the higher of the priority.",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "IN_PERI_SEL_CH1": {
    -              "description": "DMA_IN_PERI_SEL_CH1_REG.",
    -              "offset": 352,
    -              "size": 32,
    -              "reset_value": 63,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PERI_IN_SEL_CH1": {
    -                    "description": "This register is used to select peripheral for Rx channel 1. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.",
    -                    "offset": 0,
    -                    "size": 6
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_CONF0_CH1": {
    -              "description": "DMA_OUT_CONF0_CH1_REG.",
    -              "offset": 400,
    -              "size": 32,
    -              "reset_value": 8,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUT_RST_CH1": {
    -                    "description": "This bit is used to reset DMA channel 1 Tx FSM and Tx FIFO pointer.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "OUT_LOOP_TEST_CH1": {
    -                    "description": "reserved",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "OUT_AUTO_WRBACK_CH1": {
    -                    "description": "Set this bit to enable automatic outlink-writeback when all the data in tx buffer has been transmitted.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "OUT_EOF_MODE_CH1": {
    -                    "description": "EOF flag generation mode when transmitting data. 1: EOF flag for Tx channel 1 is generated when data need to transmit has been popped from FIFO in DMA",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "OUTDSCR_BURST_EN_CH1": {
    -                    "description": "Set this bit to 1 to enable INCR burst transfer for Tx channel 1 reading link descriptor when accessing internal SRAM.",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "OUT_DATA_BURST_EN_CH1": {
    -                    "description": "Set this bit to 1 to enable INCR burst transfer for Tx channel 1 transmitting data when accessing internal SRAM.",
    -                    "offset": 5,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_CONF1_CH1": {
    -              "description": "DMA_OUT_CONF1_CH1_REG.",
    -              "offset": 404,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUT_CHECK_OWNER_CH1": {
    -                    "description": "Set this bit to enable checking the owner attribute of the link descriptor.",
    -                    "offset": 12,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "OUTFIFO_STATUS_CH1": {
    -              "description": "DMA_OUTFIFO_STATUS_CH1_REG.",
    -              "offset": 408,
    -              "size": 32,
    -              "reset_value": 125829122,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUTFIFO_FULL_CH1": {
    -                    "description": "L1 Tx FIFO full signal for Tx channel 1.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUTFIFO_EMPTY_CH1": {
    -                    "description": "L1 Tx FIFO empty signal for Tx channel 1.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUTFIFO_CNT_CH1": {
    -                    "description": "The register stores the byte number of the data in L1 Tx FIFO for Tx channel 1.",
    -                    "offset": 2,
    -                    "size": 6,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_REMAIN_UNDER_1B_CH1": {
    -                    "description": "reserved",
    -                    "offset": 23,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_REMAIN_UNDER_2B_CH1": {
    -                    "description": "reserved",
    -                    "offset": 24,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_REMAIN_UNDER_3B_CH1": {
    -                    "description": "reserved",
    -                    "offset": 25,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_REMAIN_UNDER_4B_CH1": {
    -                    "description": "reserved",
    -                    "offset": 26,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_PUSH_CH1": {
    -              "description": "DMA_OUT_PUSH_CH1_REG.",
    -              "offset": 412,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUTFIFO_WDATA_CH1": {
    -                    "description": "This register stores the data that need to be pushed into DMA FIFO.",
    -                    "offset": 0,
    -                    "size": 9
    -                  },
    -                  "OUTFIFO_PUSH_CH1": {
    -                    "description": "Set this bit to push data into DMA FIFO.",
    -                    "offset": 9,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_LINK_CH1": {
    -              "description": "DMA_OUT_LINK_CH1_REG.",
    -              "offset": 416,
    -              "size": 32,
    -              "reset_value": 8388608,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUTLINK_ADDR_CH1": {
    -                    "description": "This register stores the 20 least significant bits of the first outlink descriptor's address.",
    -                    "offset": 0,
    -                    "size": 20
    -                  },
    -                  "OUTLINK_STOP_CH1": {
    -                    "description": "Set this bit to stop dealing with the outlink descriptors.",
    -                    "offset": 20,
    -                    "size": 1
    -                  },
    -                  "OUTLINK_START_CH1": {
    -                    "description": "Set this bit to start dealing with the outlink descriptors.",
    -                    "offset": 21,
    -                    "size": 1
    -                  },
    -                  "OUTLINK_RESTART_CH1": {
    -                    "description": "Set this bit to restart a new outlink from the last address.",
    -                    "offset": 22,
    -                    "size": 1
    -                  },
    -                  "OUTLINK_PARK_CH1": {
    -                    "description": "1: the outlink descriptor's FSM is in idle state.  0: the outlink descriptor's FSM is working.",
    -                    "offset": 23,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_STATE_CH1": {
    -              "description": "DMA_OUT_STATE_CH1_REG.",
    -              "offset": 420,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUTLINK_DSCR_ADDR_CH1": {
    -                    "description": "This register stores the current outlink descriptor's address.",
    -                    "offset": 0,
    -                    "size": 18,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_DSCR_STATE_CH1": {
    -                    "description": "reserved",
    -                    "offset": 18,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_STATE_CH1": {
    -                    "description": "reserved",
    -                    "offset": 20,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_EOF_DES_ADDR_CH1": {
    -              "description": "DMA_OUT_EOF_DES_ADDR_CH1_REG.",
    -              "offset": 424,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUT_EOF_DES_ADDR_CH1": {
    -                    "description": "This register stores the address of the outlink descriptor when the EOF bit in this descriptor is 1.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_EOF_BFR_DES_ADDR_CH1": {
    -              "description": "DMA_OUT_EOF_BFR_DES_ADDR_CH1_REG.",
    -              "offset": 428,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUT_EOF_BFR_DES_ADDR_CH1": {
    -                    "description": "This register stores the address of the outlink descriptor before the last outlink descriptor.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_DSCR_CH1": {
    -              "description": "DMA_OUT_DSCR_CH1_REG.",
    -              "offset": 432,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUTLINK_DSCR_CH1": {
    -                    "description": "The address of the current outlink descriptor y.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_DSCR_BF0_CH1": {
    -              "description": "DMA_OUT_DSCR_BF0_CH1_REG.",
    -              "offset": 436,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUTLINK_DSCR_BF0_CH1": {
    -                    "description": "The address of the last outlink descriptor y-1.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_DSCR_BF1_CH1": {
    -              "description": "DMA_OUT_DSCR_BF1_CH1_REG.",
    -              "offset": 440,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUTLINK_DSCR_BF1_CH1": {
    -                    "description": "The address of the second-to-last inlink descriptor x-2.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_PRI_CH1": {
    -              "description": "DMA_OUT_PRI_CH1_REG.",
    -              "offset": 444,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_PRI_CH1": {
    -                    "description": "The priority of Tx channel 1. The larger of the value, the higher of the priority.",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_PERI_SEL_CH1": {
    -              "description": "DMA_OUT_PERI_SEL_CH1_REG.",
    -              "offset": 448,
    -              "size": 32,
    -              "reset_value": 63,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PERI_OUT_SEL_CH1": {
    -                    "description": "This register is used to select peripheral for Tx channel 1. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.",
    -                    "offset": 0,
    -                    "size": 6
    -                  }
    -                }
    -              }
    -            },
    -            "IN_CONF0_CH2": {
    -              "description": "DMA_IN_CONF0_CH2_REG.",
    -              "offset": 496,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_RST_CH2": {
    -                    "description": "This bit is used to reset DMA channel 2 Rx FSM and Rx FIFO pointer.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "IN_LOOP_TEST_CH2": {
    -                    "description": "reserved",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "INDSCR_BURST_EN_CH2": {
    -                    "description": "Set this bit to 1 to enable INCR burst transfer for Rx channel 2 reading link descriptor when accessing internal SRAM.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "IN_DATA_BURST_EN_CH2": {
    -                    "description": "Set this bit to 1 to enable INCR burst transfer for Rx channel 2 receiving data when accessing internal SRAM.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "MEM_TRANS_EN_CH2": {
    -                    "description": "Set this bit 1 to enable automatic transmitting data from memory to memory via DMA.",
    -                    "offset": 4,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "IN_CONF1_CH2": {
    -              "description": "DMA_IN_CONF1_CH2_REG.",
    -              "offset": 500,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_CHECK_OWNER_CH2": {
    -                    "description": "Set this bit to enable checking the owner attribute of the link descriptor.",
    -                    "offset": 12,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "INFIFO_STATUS_CH2": {
    -              "description": "DMA_INFIFO_STATUS_CH2_REG.",
    -              "offset": 504,
    -              "size": 32,
    -              "reset_value": 125829123,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INFIFO_FULL_CH2": {
    -                    "description": "L1 Rx FIFO full signal for Rx channel 2.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "INFIFO_EMPTY_CH2": {
    -                    "description": "L1 Rx FIFO empty signal for Rx channel 2.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "INFIFO_CNT_CH2": {
    -                    "description": "The register stores the byte number of the data in L1 Rx FIFO for Rx channel 2.",
    -                    "offset": 2,
    -                    "size": 6,
    -                    "access": "read-only"
    -                  },
    -                  "IN_REMAIN_UNDER_1B_CH2": {
    -                    "description": "reserved",
    -                    "offset": 23,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_REMAIN_UNDER_2B_CH2": {
    -                    "description": "reserved",
    -                    "offset": 24,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_REMAIN_UNDER_3B_CH2": {
    -                    "description": "reserved",
    -                    "offset": 25,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_REMAIN_UNDER_4B_CH2": {
    -                    "description": "reserved",
    -                    "offset": 26,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_BUF_HUNGRY_CH2": {
    -                    "description": "reserved",
    -                    "offset": 27,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_POP_CH2": {
    -              "description": "DMA_IN_POP_CH2_REG.",
    -              "offset": 508,
    -              "size": 32,
    -              "reset_value": 2048,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INFIFO_RDATA_CH2": {
    -                    "description": "This register stores the data popping from DMA FIFO.",
    -                    "offset": 0,
    -                    "size": 12,
    -                    "access": "read-only"
    -                  },
    -                  "INFIFO_POP_CH2": {
    -                    "description": "Set this bit to pop data from DMA FIFO.",
    -                    "offset": 12,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "IN_LINK_CH2": {
    -              "description": "DMA_IN_LINK_CH2_REG.",
    -              "offset": 512,
    -              "size": 32,
    -              "reset_value": 17825792,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INLINK_ADDR_CH2": {
    -                    "description": "This register stores the 20 least significant bits of the first inlink descriptor's address.",
    -                    "offset": 0,
    -                    "size": 20
    -                  },
    -                  "INLINK_AUTO_RET_CH2": {
    -                    "description": "Set this bit to return to current inlink descriptor's address, when there are some errors in current receiving data.",
    -                    "offset": 20,
    -                    "size": 1
    -                  },
    -                  "INLINK_STOP_CH2": {
    -                    "description": "Set this bit to stop dealing with the inlink descriptors.",
    -                    "offset": 21,
    -                    "size": 1
    -                  },
    -                  "INLINK_START_CH2": {
    -                    "description": "Set this bit to start dealing with the inlink descriptors.",
    -                    "offset": 22,
    -                    "size": 1
    -                  },
    -                  "INLINK_RESTART_CH2": {
    -                    "description": "Set this bit to mount a new inlink descriptor.",
    -                    "offset": 23,
    -                    "size": 1
    -                  },
    -                  "INLINK_PARK_CH2": {
    -                    "description": "1: the inlink descriptor's FSM is in idle state.  0: the inlink descriptor's FSM is working.",
    -                    "offset": 24,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_STATE_CH2": {
    -              "description": "DMA_IN_STATE_CH2_REG.",
    -              "offset": 516,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INLINK_DSCR_ADDR_CH2": {
    -                    "description": "This register stores the current inlink descriptor's address.",
    -                    "offset": 0,
    -                    "size": 18,
    -                    "access": "read-only"
    -                  },
    -                  "IN_DSCR_STATE_CH2": {
    -                    "description": "reserved",
    -                    "offset": 18,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "IN_STATE_CH2": {
    -                    "description": "reserved",
    -                    "offset": 20,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_SUC_EOF_DES_ADDR_CH2": {
    -              "description": "DMA_IN_SUC_EOF_DES_ADDR_CH2_REG.",
    -              "offset": 520,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_SUC_EOF_DES_ADDR_CH2": {
    -                    "description": "This register stores the address of the inlink descriptor when the EOF bit in this descriptor is 1.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_ERR_EOF_DES_ADDR_CH2": {
    -              "description": "DMA_IN_ERR_EOF_DES_ADDR_CH2_REG.",
    -              "offset": 524,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_ERR_EOF_DES_ADDR_CH2": {
    -                    "description": "This register stores the address of the inlink descriptor when there are some errors in current receiving data. Only used when peripheral is UHCI0.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_DSCR_CH2": {
    -              "description": "DMA_IN_DSCR_CH2_REG.",
    -              "offset": 528,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INLINK_DSCR_CH2": {
    -                    "description": "The address of the current inlink descriptor x.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_DSCR_BF0_CH2": {
    -              "description": "DMA_IN_DSCR_BF0_CH2_REG.",
    -              "offset": 532,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INLINK_DSCR_BF0_CH2": {
    -                    "description": "The address of the last inlink descriptor x-1.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_DSCR_BF1_CH2": {
    -              "description": "DMA_IN_DSCR_BF1_CH2_REG.",
    -              "offset": 536,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INLINK_DSCR_BF1_CH2": {
    -                    "description": "The address of the second-to-last inlink descriptor x-2.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_PRI_CH2": {
    -              "description": "DMA_IN_PRI_CH2_REG.",
    -              "offset": 540,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_PRI_CH2": {
    -                    "description": "The priority of Rx channel 2. The larger of the value, the higher of the priority.",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "IN_PERI_SEL_CH2": {
    -              "description": "DMA_IN_PERI_SEL_CH2_REG.",
    -              "offset": 544,
    -              "size": 32,
    -              "reset_value": 63,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PERI_IN_SEL_CH2": {
    -                    "description": "This register is used to select peripheral for Rx channel 2. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.",
    -                    "offset": 0,
    -                    "size": 6
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_CONF0_CH2": {
    -              "description": "DMA_OUT_CONF0_CH2_REG.",
    -              "offset": 592,
    -              "size": 32,
    -              "reset_value": 8,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUT_RST_CH2": {
    -                    "description": "This bit is used to reset DMA channel 2 Tx FSM and Tx FIFO pointer.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "OUT_LOOP_TEST_CH2": {
    -                    "description": "reserved",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "OUT_AUTO_WRBACK_CH2": {
    -                    "description": "Set this bit to enable automatic outlink-writeback when all the data in tx buffer has been transmitted.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "OUT_EOF_MODE_CH2": {
    -                    "description": "EOF flag generation mode when transmitting data. 1: EOF flag for Tx channel 2 is generated when data need to transmit has been popped from FIFO in DMA",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "OUTDSCR_BURST_EN_CH2": {
    -                    "description": "Set this bit to 1 to enable INCR burst transfer for Tx channel 2 reading link descriptor when accessing internal SRAM.",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "OUT_DATA_BURST_EN_CH2": {
    -                    "description": "Set this bit to 1 to enable INCR burst transfer for Tx channel 2 transmitting data when accessing internal SRAM.",
    -                    "offset": 5,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_CONF1_CH2": {
    -              "description": "DMA_OUT_CONF1_CH2_REG.",
    -              "offset": 596,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUT_CHECK_OWNER_CH2": {
    -                    "description": "Set this bit to enable checking the owner attribute of the link descriptor.",
    -                    "offset": 12,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "OUTFIFO_STATUS_CH2": {
    -              "description": "DMA_OUTFIFO_STATUS_CH2_REG.",
    -              "offset": 600,
    -              "size": 32,
    -              "reset_value": 125829122,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUTFIFO_FULL_CH2": {
    -                    "description": "L1 Tx FIFO full signal for Tx channel 2.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUTFIFO_EMPTY_CH2": {
    -                    "description": "L1 Tx FIFO empty signal for Tx channel 2.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUTFIFO_CNT_CH2": {
    -                    "description": "The register stores the byte number of the data in L1 Tx FIFO for Tx channel 2.",
    -                    "offset": 2,
    -                    "size": 6,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_REMAIN_UNDER_1B_CH2": {
    -                    "description": "reserved",
    -                    "offset": 23,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_REMAIN_UNDER_2B_CH2": {
    -                    "description": "reserved",
    -                    "offset": 24,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_REMAIN_UNDER_3B_CH2": {
    -                    "description": "reserved",
    -                    "offset": 25,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_REMAIN_UNDER_4B_CH2": {
    -                    "description": "reserved",
    -                    "offset": 26,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_PUSH_CH2": {
    -              "description": "DMA_OUT_PUSH_CH2_REG.",
    -              "offset": 604,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUTFIFO_WDATA_CH2": {
    -                    "description": "This register stores the data that need to be pushed into DMA FIFO.",
    -                    "offset": 0,
    -                    "size": 9
    -                  },
    -                  "OUTFIFO_PUSH_CH2": {
    -                    "description": "Set this bit to push data into DMA FIFO.",
    -                    "offset": 9,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_LINK_CH2": {
    -              "description": "DMA_OUT_LINK_CH2_REG.",
    -              "offset": 608,
    -              "size": 32,
    -              "reset_value": 8388608,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUTLINK_ADDR_CH2": {
    -                    "description": "This register stores the 20 least significant bits of the first outlink descriptor's address.",
    -                    "offset": 0,
    -                    "size": 20
    -                  },
    -                  "OUTLINK_STOP_CH2": {
    -                    "description": "Set this bit to stop dealing with the outlink descriptors.",
    -                    "offset": 20,
    -                    "size": 1
    -                  },
    -                  "OUTLINK_START_CH2": {
    -                    "description": "Set this bit to start dealing with the outlink descriptors.",
    -                    "offset": 21,
    -                    "size": 1
    -                  },
    -                  "OUTLINK_RESTART_CH2": {
    -                    "description": "Set this bit to restart a new outlink from the last address.",
    -                    "offset": 22,
    -                    "size": 1
    -                  },
    -                  "OUTLINK_PARK_CH2": {
    -                    "description": "1: the outlink descriptor's FSM is in idle state.  0: the outlink descriptor's FSM is working.",
    -                    "offset": 23,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_STATE_CH2": {
    -              "description": "DMA_OUT_STATE_CH2_REG.",
    -              "offset": 612,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUTLINK_DSCR_ADDR_CH2": {
    -                    "description": "This register stores the current outlink descriptor's address.",
    -                    "offset": 0,
    -                    "size": 18,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_DSCR_STATE_CH2": {
    -                    "description": "reserved",
    -                    "offset": 18,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_STATE_CH2": {
    -                    "description": "reserved",
    -                    "offset": 20,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_EOF_DES_ADDR_CH2": {
    -              "description": "DMA_OUT_EOF_DES_ADDR_CH2_REG.",
    -              "offset": 616,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUT_EOF_DES_ADDR_CH2": {
    -                    "description": "This register stores the address of the outlink descriptor when the EOF bit in this descriptor is 1.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_EOF_BFR_DES_ADDR_CH2": {
    -              "description": "DMA_OUT_EOF_BFR_DES_ADDR_CH2_REG.",
    -              "offset": 620,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUT_EOF_BFR_DES_ADDR_CH2": {
    -                    "description": "This register stores the address of the outlink descriptor before the last outlink descriptor.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_DSCR_CH2": {
    -              "description": "DMA_OUT_DSCR_CH2_REG.",
    -              "offset": 624,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUTLINK_DSCR_CH2": {
    -                    "description": "The address of the current outlink descriptor y.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_DSCR_BF0_CH2": {
    -              "description": "DMA_OUT_DSCR_BF0_CH2_REG.",
    -              "offset": 628,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUTLINK_DSCR_BF0_CH2": {
    -                    "description": "The address of the last outlink descriptor y-1.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_DSCR_BF1_CH2": {
    -              "description": "DMA_OUT_DSCR_BF1_CH2_REG.",
    -              "offset": 632,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUTLINK_DSCR_BF1_CH2": {
    -                    "description": "The address of the second-to-last inlink descriptor x-2.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_PRI_CH2": {
    -              "description": "DMA_OUT_PRI_CH2_REG.",
    -              "offset": 636,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_PRI_CH2": {
    -                    "description": "The priority of Tx channel 2. The larger of the value, the higher of the priority.",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_PERI_SEL_CH2": {
    -              "description": "DMA_OUT_PERI_SEL_CH2_REG.",
    -              "offset": 640,
    -              "size": 32,
    -              "reset_value": 63,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PERI_OUT_SEL_CH2": {
    -                    "description": "This register is used to select peripheral for Tx channel 2. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.",
    -                    "offset": 0,
    -                    "size": 6
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "DS": {
    -        "description": "Digital Signature",
    -        "children": {
    -          "registers": {
    -            "Y_MEM": {
    -              "description": "memory that stores Y",
    -              "offset": 0,
    -              "size": 8,
    -              "count": 512,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295
    -            },
    -            "M_MEM": {
    -              "description": "memory that stores M",
    -              "offset": 512,
    -              "size": 8,
    -              "count": 512,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295
    -            },
    -            "RB_MEM": {
    -              "description": "memory that stores Rb",
    -              "offset": 1024,
    -              "size": 8,
    -              "count": 512,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295
    -            },
    -            "BOX_MEM": {
    -              "description": "memory that stores BOX",
    -              "offset": 1536,
    -              "size": 8,
    -              "count": 48,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295
    -            },
    -            "X_MEM": {
    -              "description": "memory that stores X",
    -              "offset": 2048,
    -              "size": 8,
    -              "count": 512,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295
    -            },
    -            "Z_MEM": {
    -              "description": "memory that stores Z",
    -              "offset": 2560,
    -              "size": 8,
    -              "count": 512,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295
    -            },
    -            "SET_START": {
    -              "description": "DS start control register",
    -              "offset": 3584,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SET_START": {
    -                    "description": "set this bit to start DS operation.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "SET_CONTINUE": {
    -              "description": "DS continue control register",
    -              "offset": 3588,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SET_CONTINUE": {
    -                    "description": "set this bit to continue DS operation.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "SET_FINISH": {
    -              "description": "DS finish control register",
    -              "offset": 3592,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SET_FINISH": {
    -                    "description": "Set this bit to finish DS process.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "QUERY_BUSY": {
    -              "description": "DS query busy register",
    -              "offset": 3596,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "QUERY_BUSY": {
    -                    "description": "digital signature state. 1'b0: idle, 1'b1: busy",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "QUERY_KEY_WRONG": {
    -              "description": "DS query key-wrong counter register",
    -              "offset": 3600,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "QUERY_KEY_WRONG": {
    -                    "description": "digital signature key wrong counter",
    -                    "offset": 0,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "QUERY_CHECK": {
    -              "description": "DS query check result register",
    -              "offset": 3604,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "MD_ERROR": {
    -                    "description": "MD checkout result. 1'b0: MD check pass, 1'b1: MD check fail",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "PADDING_BAD": {
    -                    "description": "padding checkout result. 1'b0: a good padding, 1'b1: a bad padding",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DATE": {
    -              "description": "DS version control register",
    -              "offset": 3616,
    -              "size": 32,
    -              "reset_value": 538969624,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATE": {
    -                    "description": "ds version information",
    -                    "offset": 0,
    -                    "size": 30
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "EFUSE": {
    -        "description": "eFuse Controller",
    -        "children": {
    -          "registers": {
    -            "PGM_DATA0": {
    -              "description": "Register 0 that stores data to be programmed.",
    -              "offset": 0,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PGM_DATA_0": {
    -                    "description": "The content of the 0th 32-bit data to be programmed.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "PGM_DATA1": {
    -              "description": "Register 1 that stores data to be programmed.",
    -              "offset": 4,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PGM_DATA_1": {
    -                    "description": "The content of the 1st 32-bit data to be programmed.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "PGM_DATA2": {
    -              "description": "Register 2 that stores data to be programmed.",
    -              "offset": 8,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PGM_DATA_2": {
    -                    "description": "The content of the 2nd 32-bit data to be programmed.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "PGM_DATA3": {
    -              "description": "Register 3 that stores data to be programmed.",
    -              "offset": 12,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PGM_DATA_3": {
    -                    "description": "The content of the 3rd 32-bit data to be programmed.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "PGM_DATA4": {
    -              "description": "Register 4 that stores data to be programmed.",
    -              "offset": 16,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PGM_DATA_4": {
    -                    "description": "The content of the 4th 32-bit data to be programmed.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "PGM_DATA5": {
    -              "description": "Register 5 that stores data to be programmed.",
    -              "offset": 20,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PGM_DATA_5": {
    -                    "description": "The content of the 5th 32-bit data to be programmed.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "PGM_DATA6": {
    -              "description": "Register 6 that stores data to be programmed.",
    -              "offset": 24,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PGM_DATA_6": {
    -                    "description": "The content of the 6th 32-bit data to be programmed.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "PGM_DATA7": {
    -              "description": "Register 7 that stores data to be programmed.",
    -              "offset": 28,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PGM_DATA_7": {
    -                    "description": "The content of the 7th 32-bit data to be programmed.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "PGM_CHECK_VALUE0": {
    -              "description": "Register 0 that stores the RS code to be programmed.",
    -              "offset": 32,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PGM_RS_DATA_0": {
    -                    "description": "The content of the 0th 32-bit RS code to be programmed.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "PGM_CHECK_VALUE1": {
    -              "description": "Register 1 that stores the RS code to be programmed.",
    -              "offset": 36,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PGM_RS_DATA_1": {
    -                    "description": "The content of the 1st 32-bit RS code to be programmed.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "PGM_CHECK_VALUE2": {
    -              "description": "Register 2 that stores the RS code to be programmed.",
    -              "offset": 40,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PGM_RS_DATA_2": {
    -                    "description": "The content of the 2nd 32-bit RS code to be programmed.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "RD_WR_DIS": {
    -              "description": "BLOCK0 data register 0.",
    -              "offset": 44,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "WR_DIS": {
    -                    "description": "Disable programming of individual eFuses.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_REPEAT_DATA0": {
    -              "description": "BLOCK0 data register 1.",
    -              "offset": 48,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RD_DIS": {
    -                    "description": "Set this bit to disable reading from BlOCK4-10.",
    -                    "offset": 0,
    -                    "size": 7,
    -                    "access": "read-only"
    -                  },
    -                  "DIS_RTC_RAM_BOOT": {
    -                    "description": "Set this bit to disable boot from RTC RAM.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DIS_ICACHE": {
    -                    "description": "Set this bit to disable Icache.",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DIS_USB_JTAG": {
    -                    "description": "Set this bit to disable function of usb switch to jtag in module of usb device.",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DIS_DOWNLOAD_ICACHE": {
    -                    "description": "Set this bit to disable Icache in download mode (boot_mode[3:0] is 0, 1, 2, 3, 6, 7).",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DIS_USB_DEVICE": {
    -                    "description": "Set this bit to disable usb device.",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DIS_FORCE_DOWNLOAD": {
    -                    "description": "Set this bit to disable the function that forces chip into download mode.",
    -                    "offset": 12,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RPT4_RESERVED6": {
    -                    "description": "Reserved (used for four backups method).",
    -                    "offset": 13,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DIS_CAN": {
    -                    "description": "Set this bit to disable CAN function.",
    -                    "offset": 14,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "JTAG_SEL_ENABLE": {
    -                    "description": "Set this bit to enable selection between usb_to_jtag and pad_to_jtag through strapping gpio10 when both reg_dis_usb_jtag and reg_dis_pad_jtag are equal to 0.",
    -                    "offset": 15,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SOFT_DIS_JTAG": {
    -                    "description": "Set these bits to disable JTAG in the soft way (odd number 1 means disable ). JTAG can be enabled in HMAC module.",
    -                    "offset": 16,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  },
    -                  "DIS_PAD_JTAG": {
    -                    "description": "Set this bit to disable JTAG in the hard way. JTAG is disabled permanently.",
    -                    "offset": 19,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DIS_DOWNLOAD_MANUAL_ENCRYPT": {
    -                    "description": "Set this bit to disable flash encryption when in download boot modes.",
    -                    "offset": 20,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "USB_DREFH": {
    -                    "description": "Controls single-end input threshold vrefh, 1.76 V to 2 V with step of 80 mV, stored in eFuse.",
    -                    "offset": 21,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "USB_DREFL": {
    -                    "description": "Controls single-end input threshold vrefl, 0.8 V to 1.04 V with step of 80 mV, stored in eFuse.",
    -                    "offset": 23,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "USB_EXCHG_PINS": {
    -                    "description": "Set this bit to exchange USB D+ and D- pins.",
    -                    "offset": 25,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "VDD_SPI_AS_GPIO": {
    -                    "description": "Set this bit to vdd spi pin function as gpio.",
    -                    "offset": 26,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "BTLC_GPIO_ENABLE": {
    -                    "description": "Enable btlc gpio.",
    -                    "offset": 27,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "POWERGLITCH_EN": {
    -                    "description": "Set this bit to enable power glitch function.",
    -                    "offset": 29,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "POWER_GLITCH_DSENSE": {
    -                    "description": "Sample delay configuration of power glitch.",
    -                    "offset": 30,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_REPEAT_DATA1": {
    -              "description": "BLOCK0 data register 2.",
    -              "offset": 52,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RPT4_RESERVED2": {
    -                    "description": "Reserved (used for four backups method).",
    -                    "offset": 0,
    -                    "size": 16,
    -                    "access": "read-only"
    -                  },
    -                  "WDT_DELAY_SEL": {
    -                    "description": "Selects RTC watchdog timeout threshold, in unit of slow clock cycle. 0: 40000. 1: 80000. 2: 160000. 3:320000.",
    -                    "offset": 16,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "SPI_BOOT_CRYPT_CNT": {
    -                    "description": "Set this bit to enable SPI boot encrypt/decrypt. Odd number of 1: enable. even number of 1: disable.",
    -                    "offset": 18,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  },
    -                  "SECURE_BOOT_KEY_REVOKE0": {
    -                    "description": "Set this bit to enable revoking first secure boot key.",
    -                    "offset": 21,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SECURE_BOOT_KEY_REVOKE1": {
    -                    "description": "Set this bit to enable revoking second secure boot key.",
    -                    "offset": 22,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SECURE_BOOT_KEY_REVOKE2": {
    -                    "description": "Set this bit to enable revoking third secure boot key.",
    -                    "offset": 23,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "KEY_PURPOSE_0": {
    -                    "description": "Purpose of Key0.",
    -                    "offset": 24,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  },
    -                  "KEY_PURPOSE_1": {
    -                    "description": "Purpose of Key1.",
    -                    "offset": 28,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_REPEAT_DATA2": {
    -              "description": "BLOCK0 data register 3.",
    -              "offset": 56,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY_PURPOSE_2": {
    -                    "description": "Purpose of Key2.",
    -                    "offset": 0,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  },
    -                  "KEY_PURPOSE_3": {
    -                    "description": "Purpose of Key3.",
    -                    "offset": 4,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  },
    -                  "KEY_PURPOSE_4": {
    -                    "description": "Purpose of Key4.",
    -                    "offset": 8,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  },
    -                  "KEY_PURPOSE_5": {
    -                    "description": "Purpose of Key5.",
    -                    "offset": 12,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  },
    -                  "RPT4_RESERVED3": {
    -                    "description": "Reserved (used for four backups method).",
    -                    "offset": 16,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  },
    -                  "SECURE_BOOT_EN": {
    -                    "description": "Set this bit to enable secure boot.",
    -                    "offset": 20,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SECURE_BOOT_AGGRESSIVE_REVOKE": {
    -                    "description": "Set this bit to enable revoking aggressive secure boot.",
    -                    "offset": 21,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RPT4_RESERVED0": {
    -                    "description": "Reserved (used for four backups method).",
    -                    "offset": 22,
    -                    "size": 6,
    -                    "access": "read-only"
    -                  },
    -                  "FLASH_TPUW": {
    -                    "description": "Configures flash waiting time after power-up, in unit of ms. If the value is less than 15, the waiting time is the configurable value; Otherwise, the waiting time is twice the configurable value.",
    -                    "offset": 28,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_REPEAT_DATA3": {
    -              "description": "BLOCK0 data register 4.",
    -              "offset": 60,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DIS_DOWNLOAD_MODE": {
    -                    "description": "Set this bit to disable download mode (boot_mode[3:0] = 0, 1, 2, 3, 6, 7).",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DIS_LEGACY_SPI_BOOT": {
    -                    "description": "Set this bit to disable Legacy SPI boot mode (boot_mode[3:0] = 4).",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "UART_PRINT_CHANNEL": {
    -                    "description": "Selectes the default UART print channel. 0: UART0. 1: UART1.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "FLASH_ECC_MODE": {
    -                    "description": "Set ECC mode in ROM, 0: ROM would Enable Flash ECC 16to18 byte mode. 1:ROM would use 16to17 byte mode.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DIS_USB_DOWNLOAD_MODE": {
    -                    "description": "Set this bit to disable UART download mode through USB.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "ENABLE_SECURITY_DOWNLOAD": {
    -                    "description": "Set this bit to enable secure UART download mode.",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "UART_PRINT_CONTROL": {
    -                    "description": "Set the default UARTboot message output mode. 00: Enabled. 01: Enabled when GPIO8 is low at reset. 10: Enabled when GPIO8 is high at reset. 11:disabled.",
    -                    "offset": 6,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "PIN_POWER_SELECTION": {
    -                    "description": "GPIO33-GPIO37 power supply selection in ROM code. 0: VDD3P3_CPU. 1: VDD_SPI.",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "FLASH_TYPE": {
    -                    "description": "Set the maximum lines of SPI flash. 0: four lines. 1: eight lines.",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "FLASH_PAGE_SIZE": {
    -                    "description": "Set Flash page size.",
    -                    "offset": 10,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "FLASH_ECC_EN": {
    -                    "description": "Set 1 to enable ECC for flash boot.",
    -                    "offset": 12,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "FORCE_SEND_RESUME": {
    -                    "description": "Set this bit to force ROM code to send a resume command during SPI boot.",
    -                    "offset": 13,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SECURE_VERSION": {
    -                    "description": "Secure version (used by ESP-IDF anti-rollback feature).",
    -                    "offset": 14,
    -                    "size": 16,
    -                    "access": "read-only"
    -                  },
    -                  "RPT4_RESERVED1": {
    -                    "description": "Reserved (used for four backups method).",
    -                    "offset": 30,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_REPEAT_DATA4": {
    -              "description": "BLOCK0 data register 5.",
    -              "offset": 64,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RPT4_RESERVED4": {
    -                    "description": "Reserved (used for four backups method).",
    -                    "offset": 0,
    -                    "size": 24,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_MAC_SPI_SYS_0": {
    -              "description": "BLOCK1 data register 0.",
    -              "offset": 68,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "MAC_0": {
    -                    "description": "Stores the low 32 bits of MAC address.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_MAC_SPI_SYS_1": {
    -              "description": "BLOCK1 data register 1.",
    -              "offset": 72,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "MAC_1": {
    -                    "description": "Stores the high 16 bits of MAC address.",
    -                    "offset": 0,
    -                    "size": 16,
    -                    "access": "read-only"
    -                  },
    -                  "SPI_PAD_CONF_0": {
    -                    "description": "Stores the zeroth part of SPI_PAD_CONF.",
    -                    "offset": 16,
    -                    "size": 16,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_MAC_SPI_SYS_2": {
    -              "description": "BLOCK1 data register 2.",
    -              "offset": 76,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SPI_PAD_CONF_1": {
    -                    "description": "Stores the first part of SPI_PAD_CONF.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_MAC_SPI_SYS_3": {
    -              "description": "BLOCK1 data register 3.",
    -              "offset": 80,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SPI_PAD_CONF_2": {
    -                    "description": "Stores the second part of SPI_PAD_CONF.",
    -                    "offset": 0,
    -                    "size": 18,
    -                    "access": "read-only"
    -                  },
    -                  "SYS_DATA_PART0_0": {
    -                    "description": "Stores the fist 14 bits of the zeroth part of system data.",
    -                    "offset": 18,
    -                    "size": 14,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_MAC_SPI_SYS_4": {
    -              "description": "BLOCK1 data register 4.",
    -              "offset": 84,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SYS_DATA_PART0_1": {
    -                    "description": "Stores the fist 32 bits of the zeroth part of system data.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_MAC_SPI_SYS_5": {
    -              "description": "BLOCK1 data register 5.",
    -              "offset": 88,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SYS_DATA_PART0_2": {
    -                    "description": "Stores the second 32 bits of the zeroth part of system data.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_SYS_PART1_DATA0": {
    -              "description": "Register 0 of BLOCK2 (system).",
    -              "offset": 92,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SYS_DATA_PART1_0": {
    -                    "description": "Stores the zeroth 32 bits of the first part of system data.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_SYS_PART1_DATA1": {
    -              "description": "Register 1 of BLOCK2 (system).",
    -              "offset": 96,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SYS_DATA_PART1_1": {
    -                    "description": "Stores the first 32 bits of the first part of system data.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_SYS_PART1_DATA2": {
    -              "description": "Register 2 of BLOCK2 (system).",
    -              "offset": 100,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SYS_DATA_PART1_2": {
    -                    "description": "Stores the second 32 bits of the first part of system data.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_SYS_PART1_DATA3": {
    -              "description": "Register 3 of BLOCK2 (system).",
    -              "offset": 104,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SYS_DATA_PART1_3": {
    -                    "description": "Stores the third 32 bits of the first part of system data.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_SYS_PART1_DATA4": {
    -              "description": "Register 4 of BLOCK2 (system).",
    -              "offset": 108,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SYS_DATA_PART1_4": {
    -                    "description": "Stores the fourth 32 bits of the first part of system data.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_SYS_PART1_DATA5": {
    -              "description": "Register 5 of BLOCK2 (system).",
    -              "offset": 112,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SYS_DATA_PART1_5": {
    -                    "description": "Stores the fifth 32 bits of the first part of system data.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_SYS_PART1_DATA6": {
    -              "description": "Register 6 of BLOCK2 (system).",
    -              "offset": 116,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SYS_DATA_PART1_6": {
    -                    "description": "Stores the sixth 32 bits of the first part of system data.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_SYS_PART1_DATA7": {
    -              "description": "Register 7 of BLOCK2 (system).",
    -              "offset": 120,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SYS_DATA_PART1_7": {
    -                    "description": "Stores the seventh 32 bits of the first part of system data.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_USR_DATA0": {
    -              "description": "Register 0 of BLOCK3 (user).",
    -              "offset": 124,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "USR_DATA0": {
    -                    "description": "Stores the zeroth 32 bits of BLOCK3 (user).",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_USR_DATA1": {
    -              "description": "Register 1 of BLOCK3 (user).",
    -              "offset": 128,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "USR_DATA1": {
    -                    "description": "Stores the first 32 bits of BLOCK3 (user).",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_USR_DATA2": {
    -              "description": "Register 2 of BLOCK3 (user).",
    -              "offset": 132,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "USR_DATA2": {
    -                    "description": "Stores the second 32 bits of BLOCK3 (user).",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_USR_DATA3": {
    -              "description": "Register 3 of BLOCK3 (user).",
    -              "offset": 136,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "USR_DATA3": {
    -                    "description": "Stores the third 32 bits of BLOCK3 (user).",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_USR_DATA4": {
    -              "description": "Register 4 of BLOCK3 (user).",
    -              "offset": 140,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "USR_DATA4": {
    -                    "description": "Stores the fourth 32 bits of BLOCK3 (user).",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_USR_DATA5": {
    -              "description": "Register 5 of BLOCK3 (user).",
    -              "offset": 144,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "USR_DATA5": {
    -                    "description": "Stores the fifth 32 bits of BLOCK3 (user).",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_USR_DATA6": {
    -              "description": "Register 6 of BLOCK3 (user).",
    -              "offset": 148,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "USR_DATA6": {
    -                    "description": "Stores the sixth 32 bits of BLOCK3 (user).",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_USR_DATA7": {
    -              "description": "Register 7 of BLOCK3 (user).",
    -              "offset": 152,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "USR_DATA7": {
    -                    "description": "Stores the seventh 32 bits of BLOCK3 (user).",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY0_DATA0": {
    -              "description": "Register 0 of BLOCK4 (KEY0).",
    -              "offset": 156,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY0_DATA0": {
    -                    "description": "Stores the zeroth 32 bits of KEY0.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY0_DATA1": {
    -              "description": "Register 1 of BLOCK4 (KEY0).",
    -              "offset": 160,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY0_DATA1": {
    -                    "description": "Stores the first 32 bits of KEY0.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY0_DATA2": {
    -              "description": "Register 2 of BLOCK4 (KEY0).",
    -              "offset": 164,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY0_DATA2": {
    -                    "description": "Stores the second 32 bits of KEY0.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY0_DATA3": {
    -              "description": "Register 3 of BLOCK4 (KEY0).",
    -              "offset": 168,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY0_DATA3": {
    -                    "description": "Stores the third 32 bits of KEY0.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY0_DATA4": {
    -              "description": "Register 4 of BLOCK4 (KEY0).",
    -              "offset": 172,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY0_DATA4": {
    -                    "description": "Stores the fourth 32 bits of KEY0.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY0_DATA5": {
    -              "description": "Register 5 of BLOCK4 (KEY0).",
    -              "offset": 176,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY0_DATA5": {
    -                    "description": "Stores the fifth 32 bits of KEY0.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY0_DATA6": {
    -              "description": "Register 6 of BLOCK4 (KEY0).",
    -              "offset": 180,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY0_DATA6": {
    -                    "description": "Stores the sixth 32 bits of KEY0.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY0_DATA7": {
    -              "description": "Register 7 of BLOCK4 (KEY0).",
    -              "offset": 184,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY0_DATA7": {
    -                    "description": "Stores the seventh 32 bits of KEY0.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY1_DATA0": {
    -              "description": "Register 0 of BLOCK5 (KEY1).",
    -              "offset": 188,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY1_DATA0": {
    -                    "description": "Stores the zeroth 32 bits of KEY1.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY1_DATA1": {
    -              "description": "Register 1 of BLOCK5 (KEY1).",
    -              "offset": 192,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY1_DATA1": {
    -                    "description": "Stores the first 32 bits of KEY1.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY1_DATA2": {
    -              "description": "Register 2 of BLOCK5 (KEY1).",
    -              "offset": 196,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY1_DATA2": {
    -                    "description": "Stores the second 32 bits of KEY1.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY1_DATA3": {
    -              "description": "Register 3 of BLOCK5 (KEY1).",
    -              "offset": 200,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY1_DATA3": {
    -                    "description": "Stores the third 32 bits of KEY1.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY1_DATA4": {
    -              "description": "Register 4 of BLOCK5 (KEY1).",
    -              "offset": 204,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY1_DATA4": {
    -                    "description": "Stores the fourth 32 bits of KEY1.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY1_DATA5": {
    -              "description": "Register 5 of BLOCK5 (KEY1).",
    -              "offset": 208,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY1_DATA5": {
    -                    "description": "Stores the fifth 32 bits of KEY1.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY1_DATA6": {
    -              "description": "Register 6 of BLOCK5 (KEY1).",
    -              "offset": 212,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY1_DATA6": {
    -                    "description": "Stores the sixth 32 bits of KEY1.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY1_DATA7": {
    -              "description": "Register 7 of BLOCK5 (KEY1).",
    -              "offset": 216,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY1_DATA7": {
    -                    "description": "Stores the seventh 32 bits of KEY1.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY2_DATA0": {
    -              "description": "Register 0 of BLOCK6 (KEY2).",
    -              "offset": 220,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY2_DATA0": {
    -                    "description": "Stores the zeroth 32 bits of KEY2.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY2_DATA1": {
    -              "description": "Register 1 of BLOCK6 (KEY2).",
    -              "offset": 224,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY2_DATA1": {
    -                    "description": "Stores the first 32 bits of KEY2.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY2_DATA2": {
    -              "description": "Register 2 of BLOCK6 (KEY2).",
    -              "offset": 228,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY2_DATA2": {
    -                    "description": "Stores the second 32 bits of KEY2.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY2_DATA3": {
    -              "description": "Register 3 of BLOCK6 (KEY2).",
    -              "offset": 232,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY2_DATA3": {
    -                    "description": "Stores the third 32 bits of KEY2.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY2_DATA4": {
    -              "description": "Register 4 of BLOCK6 (KEY2).",
    -              "offset": 236,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY2_DATA4": {
    -                    "description": "Stores the fourth 32 bits of KEY2.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY2_DATA5": {
    -              "description": "Register 5 of BLOCK6 (KEY2).",
    -              "offset": 240,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY2_DATA5": {
    -                    "description": "Stores the fifth 32 bits of KEY2.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY2_DATA6": {
    -              "description": "Register 6 of BLOCK6 (KEY2).",
    -              "offset": 244,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY2_DATA6": {
    -                    "description": "Stores the sixth 32 bits of KEY2.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY2_DATA7": {
    -              "description": "Register 7 of BLOCK6 (KEY2).",
    -              "offset": 248,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY2_DATA7": {
    -                    "description": "Stores the seventh 32 bits of KEY2.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY3_DATA0": {
    -              "description": "Register 0 of BLOCK7 (KEY3).",
    -              "offset": 252,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY3_DATA0": {
    -                    "description": "Stores the zeroth 32 bits of KEY3.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY3_DATA1": {
    -              "description": "Register 1 of BLOCK7 (KEY3).",
    -              "offset": 256,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY3_DATA1": {
    -                    "description": "Stores the first 32 bits of KEY3.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY3_DATA2": {
    -              "description": "Register 2 of BLOCK7 (KEY3).",
    -              "offset": 260,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY3_DATA2": {
    -                    "description": "Stores the second 32 bits of KEY3.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY3_DATA3": {
    -              "description": "Register 3 of BLOCK7 (KEY3).",
    -              "offset": 264,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY3_DATA3": {
    -                    "description": "Stores the third 32 bits of KEY3.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY3_DATA4": {
    -              "description": "Register 4 of BLOCK7 (KEY3).",
    -              "offset": 268,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY3_DATA4": {
    -                    "description": "Stores the fourth 32 bits of KEY3.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY3_DATA5": {
    -              "description": "Register 5 of BLOCK7 (KEY3).",
    -              "offset": 272,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY3_DATA5": {
    -                    "description": "Stores the fifth 32 bits of KEY3.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY3_DATA6": {
    -              "description": "Register 6 of BLOCK7 (KEY3).",
    -              "offset": 276,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY3_DATA6": {
    -                    "description": "Stores the sixth 32 bits of KEY3.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY3_DATA7": {
    -              "description": "Register 7 of BLOCK7 (KEY3).",
    -              "offset": 280,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY3_DATA7": {
    -                    "description": "Stores the seventh 32 bits of KEY3.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY4_DATA0": {
    -              "description": "Register 0 of BLOCK8 (KEY4).",
    -              "offset": 284,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY4_DATA0": {
    -                    "description": "Stores the zeroth 32 bits of KEY4.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY4_DATA1": {
    -              "description": "Register 1 of BLOCK8 (KEY4).",
    -              "offset": 288,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY4_DATA1": {
    -                    "description": "Stores the first 32 bits of KEY4.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY4_DATA2": {
    -              "description": "Register 2 of BLOCK8 (KEY4).",
    -              "offset": 292,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY4_DATA2": {
    -                    "description": "Stores the second 32 bits of KEY4.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY4_DATA3": {
    -              "description": "Register 3 of BLOCK8 (KEY4).",
    -              "offset": 296,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY4_DATA3": {
    -                    "description": "Stores the third 32 bits of KEY4.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY4_DATA4": {
    -              "description": "Register 4 of BLOCK8 (KEY4).",
    -              "offset": 300,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY4_DATA4": {
    -                    "description": "Stores the fourth 32 bits of KEY4.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY4_DATA5": {
    -              "description": "Register 5 of BLOCK8 (KEY4).",
    -              "offset": 304,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY4_DATA5": {
    -                    "description": "Stores the fifth 32 bits of KEY4.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY4_DATA6": {
    -              "description": "Register 6 of BLOCK8 (KEY4).",
    -              "offset": 308,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY4_DATA6": {
    -                    "description": "Stores the sixth 32 bits of KEY4.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY4_DATA7": {
    -              "description": "Register 7 of BLOCK8 (KEY4).",
    -              "offset": 312,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY4_DATA7": {
    -                    "description": "Stores the seventh 32 bits of KEY4.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY5_DATA0": {
    -              "description": "Register 0 of BLOCK9 (KEY5).",
    -              "offset": 316,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY5_DATA0": {
    -                    "description": "Stores the zeroth 32 bits of KEY5.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY5_DATA1": {
    -              "description": "Register 1 of BLOCK9 (KEY5).",
    -              "offset": 320,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY5_DATA1": {
    -                    "description": "Stores the first 32 bits of KEY5.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY5_DATA2": {
    -              "description": "Register 2 of BLOCK9 (KEY5).",
    -              "offset": 324,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY5_DATA2": {
    -                    "description": "Stores the second 32 bits of KEY5.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY5_DATA3": {
    -              "description": "Register 3 of BLOCK9 (KEY5).",
    -              "offset": 328,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY5_DATA3": {
    -                    "description": "Stores the third 32 bits of KEY5.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY5_DATA4": {
    -              "description": "Register 4 of BLOCK9 (KEY5).",
    -              "offset": 332,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY5_DATA4": {
    -                    "description": "Stores the fourth 32 bits of KEY5.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY5_DATA5": {
    -              "description": "Register 5 of BLOCK9 (KEY5).",
    -              "offset": 336,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY5_DATA5": {
    -                    "description": "Stores the fifth 32 bits of KEY5.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY5_DATA6": {
    -              "description": "Register 6 of BLOCK9 (KEY5).",
    -              "offset": 340,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY5_DATA6": {
    -                    "description": "Stores the sixth 32 bits of KEY5.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_KEY5_DATA7": {
    -              "description": "Register 7 of BLOCK9 (KEY5).",
    -              "offset": 344,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY5_DATA7": {
    -                    "description": "Stores the seventh 32 bits of KEY5.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_SYS_PART2_DATA0": {
    -              "description": "Register 0 of BLOCK10 (system).",
    -              "offset": 348,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SYS_DATA_PART2_0": {
    -                    "description": "Stores the 0th 32 bits of the 2nd part of system data.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_SYS_PART2_DATA1": {
    -              "description": "Register 1 of BLOCK9 (KEY5).",
    -              "offset": 352,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SYS_DATA_PART2_1": {
    -                    "description": "Stores the 1st 32 bits of the 2nd part of system data.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_SYS_PART2_DATA2": {
    -              "description": "Register 2 of BLOCK10 (system).",
    -              "offset": 356,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SYS_DATA_PART2_2": {
    -                    "description": "Stores the 2nd 32 bits of the 2nd part of system data.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_SYS_PART2_DATA3": {
    -              "description": "Register 3 of BLOCK10 (system).",
    -              "offset": 360,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SYS_DATA_PART2_3": {
    -                    "description": "Stores the 3rd 32 bits of the 2nd part of system data.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_SYS_PART2_DATA4": {
    -              "description": "Register 4 of BLOCK10 (system).",
    -              "offset": 364,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SYS_DATA_PART2_4": {
    -                    "description": "Stores the 4th 32 bits of the 2nd part of system data.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_SYS_PART2_DATA5": {
    -              "description": "Register 5 of BLOCK10 (system).",
    -              "offset": 368,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SYS_DATA_PART2_5": {
    -                    "description": "Stores the 5th 32 bits of the 2nd part of system data.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_SYS_PART2_DATA6": {
    -              "description": "Register 6 of BLOCK10 (system).",
    -              "offset": 372,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SYS_DATA_PART2_6": {
    -                    "description": "Stores the 6th 32 bits of the 2nd part of system data.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_SYS_PART2_DATA7": {
    -              "description": "Register 7 of BLOCK10 (system).",
    -              "offset": 376,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SYS_DATA_PART2_7": {
    -                    "description": "Stores the 7th 32 bits of the 2nd part of system data.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_REPEAT_ERR0": {
    -              "description": "Programming error record register 0 of BLOCK0.",
    -              "offset": 380,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RD_DIS_ERR": {
    -                    "description": "If any bit in RD_DIS is 1, then it indicates a programming error.",
    -                    "offset": 0,
    -                    "size": 7,
    -                    "access": "read-only"
    -                  },
    -                  "DIS_RTC_RAM_BOOT_ERR": {
    -                    "description": "If DIS_RTC_RAM_BOOT is 1, then it indicates a programming error.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DIS_ICACHE_ERR": {
    -                    "description": "If DIS_ICACHE is 1, then it indicates a programming error.",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DIS_USB_JTAG_ERR": {
    -                    "description": "If DIS_USB_JTAG is 1, then it indicates a programming error.",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DIS_DOWNLOAD_ICACHE_ERR": {
    -                    "description": "If DIS_DOWNLOAD_ICACHE is 1, then it indicates a programming error.",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DIS_USB_DEVICE_ERR": {
    -                    "description": "If DIS_USB_DEVICE is 1, then it indicates a programming error.",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DIS_FORCE_DOWNLOAD_ERR": {
    -                    "description": "If DIS_FORCE_DOWNLOAD is 1, then it indicates a programming error.",
    -                    "offset": 12,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RPT4_RESERVED6_ERR": {
    -                    "description": "Reserved.",
    -                    "offset": 13,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DIS_CAN_ERR": {
    -                    "description": "If DIS_CAN is 1, then it indicates a programming error.",
    -                    "offset": 14,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "JTAG_SEL_ENABLE_ERR": {
    -                    "description": "If JTAG_SEL_ENABLE is 1, then it indicates a programming error.",
    -                    "offset": 15,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SOFT_DIS_JTAG_ERR": {
    -                    "description": "If SOFT_DIS_JTAG is 1, then it indicates a programming error.",
    -                    "offset": 16,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  },
    -                  "DIS_PAD_JTAG_ERR": {
    -                    "description": "If DIS_PAD_JTAG is 1, then it indicates a programming error.",
    -                    "offset": 19,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DIS_DOWNLOAD_MANUAL_ENCRYPT_ERR": {
    -                    "description": "If DIS_DOWNLOAD_MANUAL_ENCRYPT is 1, then it indicates a programming error.",
    -                    "offset": 20,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "USB_DREFH_ERR": {
    -                    "description": "If any bit in USB_DREFH is 1, then it indicates a programming error.",
    -                    "offset": 21,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "USB_DREFL_ERR": {
    -                    "description": "If any bit in USB_DREFL is 1, then it indicates a programming error.",
    -                    "offset": 23,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "USB_EXCHG_PINS_ERR": {
    -                    "description": "If USB_EXCHG_PINS is 1, then it indicates a programming error.",
    -                    "offset": 25,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "VDD_SPI_AS_GPIO_ERR": {
    -                    "description": "If VDD_SPI_AS_GPIO is 1, then it indicates a programming error.",
    -                    "offset": 26,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "BTLC_GPIO_ENABLE_ERR": {
    -                    "description": "If any bit in BTLC_GPIO_ENABLE is 1, then it indicates a programming error.",
    -                    "offset": 27,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "POWERGLITCH_EN_ERR": {
    -                    "description": "If POWERGLITCH_EN is 1, then it indicates a programming error.",
    -                    "offset": 29,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "POWER_GLITCH_DSENSE_ERR": {
    -                    "description": "If any bit in POWER_GLITCH_DSENSE is 1, then it indicates a programming error.",
    -                    "offset": 30,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_REPEAT_ERR1": {
    -              "description": "Programming error record register 1 of BLOCK0.",
    -              "offset": 384,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RPT4_RESERVED2_ERR": {
    -                    "description": "Reserved.",
    -                    "offset": 0,
    -                    "size": 16,
    -                    "access": "read-only"
    -                  },
    -                  "WDT_DELAY_SEL_ERR": {
    -                    "description": "If any bit in WDT_DELAY_SEL is 1, then it indicates a programming error.",
    -                    "offset": 16,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "SPI_BOOT_CRYPT_CNT_ERR": {
    -                    "description": "If any bit in SPI_BOOT_CRYPT_CNT is 1, then it indicates a programming error.",
    -                    "offset": 18,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  },
    -                  "SECURE_BOOT_KEY_REVOKE0_ERR": {
    -                    "description": "If SECURE_BOOT_KEY_REVOKE0 is 1, then it indicates a programming error.",
    -                    "offset": 21,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SECURE_BOOT_KEY_REVOKE1_ERR": {
    -                    "description": "If SECURE_BOOT_KEY_REVOKE1 is 1, then it indicates a programming error.",
    -                    "offset": 22,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SECURE_BOOT_KEY_REVOKE2_ERR": {
    -                    "description": "If SECURE_BOOT_KEY_REVOKE2 is 1, then it indicates a programming error.",
    -                    "offset": 23,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "KEY_PURPOSE_0_ERR": {
    -                    "description": "If any bit in KEY_PURPOSE_0 is 1, then it indicates a programming error.",
    -                    "offset": 24,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  },
    -                  "KEY_PURPOSE_1_ERR": {
    -                    "description": "If any bit in KEY_PURPOSE_1 is 1, then it indicates a programming error.",
    -                    "offset": 28,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_REPEAT_ERR2": {
    -              "description": "Programming error record register 2 of BLOCK0.",
    -              "offset": 388,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY_PURPOSE_2_ERR": {
    -                    "description": "If any bit in KEY_PURPOSE_2 is 1, then it indicates a programming error.",
    -                    "offset": 0,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  },
    -                  "KEY_PURPOSE_3_ERR": {
    -                    "description": "If any bit in KEY_PURPOSE_3 is 1, then it indicates a programming error.",
    -                    "offset": 4,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  },
    -                  "KEY_PURPOSE_4_ERR": {
    -                    "description": "If any bit in KEY_PURPOSE_4 is 1, then it indicates a programming error.",
    -                    "offset": 8,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  },
    -                  "KEY_PURPOSE_5_ERR": {
    -                    "description": "If any bit in KEY_PURPOSE_5 is 1, then it indicates a programming error.",
    -                    "offset": 12,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  },
    -                  "RPT4_RESERVED3_ERR": {
    -                    "description": "Reserved.",
    -                    "offset": 16,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  },
    -                  "SECURE_BOOT_EN_ERR": {
    -                    "description": "If SECURE_BOOT_EN is 1, then it indicates a programming error.",
    -                    "offset": 20,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SECURE_BOOT_AGGRESSIVE_REVOKE_ERR": {
    -                    "description": "If SECURE_BOOT_AGGRESSIVE_REVOKE is 1, then it indicates a programming error.",
    -                    "offset": 21,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RPT4_RESERVED0_ERR": {
    -                    "description": "Reserved.",
    -                    "offset": 22,
    -                    "size": 6,
    -                    "access": "read-only"
    -                  },
    -                  "FLASH_TPUW_ERR": {
    -                    "description": "If any bit in FLASH_TPUM is 1, then it indicates a programming error.",
    -                    "offset": 28,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_REPEAT_ERR3": {
    -              "description": "Programming error record register 3 of BLOCK0.",
    -              "offset": 392,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DIS_DOWNLOAD_MODE_ERR": {
    -                    "description": "If DIS_DOWNLOAD_MODE is 1, then it indicates a programming error.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DIS_LEGACY_SPI_BOOT_ERR": {
    -                    "description": "If DIS_LEGACY_SPI_BOOT is 1, then it indicates a programming error.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "UART_PRINT_CHANNEL_ERR": {
    -                    "description": "If UART_PRINT_CHANNEL is 1, then it indicates a programming error.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "FLASH_ECC_MODE_ERR": {
    -                    "description": "If FLASH_ECC_MODE is 1, then it indicates a programming error.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DIS_USB_DOWNLOAD_MODE_ERR": {
    -                    "description": "If DIS_USB_DOWNLOAD_MODE is 1, then it indicates a programming error.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "ENABLE_SECURITY_DOWNLOAD_ERR": {
    -                    "description": "If ENABLE_SECURITY_DOWNLOAD is 1, then it indicates a programming error.",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "UART_PRINT_CONTROL_ERR": {
    -                    "description": "If any bit in UART_PRINT_CONTROL is 1, then it indicates a programming error.",
    -                    "offset": 6,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "PIN_POWER_SELECTION_ERR": {
    -                    "description": "If PIN_POWER_SELECTION is 1, then it indicates a programming error.",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "FLASH_TYPE_ERR": {
    -                    "description": "If FLASH_TYPE is 1, then it indicates a programming error.",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "FLASH_PAGE_SIZE_ERR": {
    -                    "description": "If any bits in FLASH_PAGE_SIZE is 1, then it indicates a programming error.",
    -                    "offset": 10,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "FLASH_ECC_EN_ERR": {
    -                    "description": "If FLASH_ECC_EN_ERR is 1, then it indicates a programming error.",
    -                    "offset": 12,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "FORCE_SEND_RESUME_ERR": {
    -                    "description": "If FORCE_SEND_RESUME is 1, then it indicates a programming error.",
    -                    "offset": 13,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SECURE_VERSION_ERR": {
    -                    "description": "If any bit in SECURE_VERSION is 1, then it indicates a programming error.",
    -                    "offset": 14,
    -                    "size": 16,
    -                    "access": "read-only"
    -                  },
    -                  "RPT4_RESERVED1_ERR": {
    -                    "description": "Reserved.",
    -                    "offset": 30,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_REPEAT_ERR4": {
    -              "description": "Programming error record register 4 of BLOCK0.",
    -              "offset": 400,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RPT4_RESERVED4_ERR": {
    -                    "description": "Reserved.",
    -                    "offset": 0,
    -                    "size": 24,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_RS_ERR0": {
    -              "description": "Programming error record register 0 of BLOCK1-10.",
    -              "offset": 448,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "MAC_SPI_8M_ERR_NUM": {
    -                    "description": "The value of this signal means the number of error bytes.",
    -                    "offset": 0,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  },
    -                  "MAC_SPI_8M_FAIL": {
    -                    "description": "0: Means no failure and that the data of MAC_SPI_8M is reliable 1: Means that programming user data failed and the number of error bytes is over 6.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SYS_PART1_NUM": {
    -                    "description": "The value of this signal means the number of error bytes.",
    -                    "offset": 4,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  },
    -                  "SYS_PART1_FAIL": {
    -                    "description": "0: Means no failure and that the data of system part1 is reliable 1: Means that programming user data failed and the number of error bytes is over 6.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "USR_DATA_ERR_NUM": {
    -                    "description": "The value of this signal means the number of error bytes.",
    -                    "offset": 8,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  },
    -                  "USR_DATA_FAIL": {
    -                    "description": "0: Means no failure and that the user data is reliable 1: Means that programming user data failed and the number of error bytes is over 6.",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "KEY0_ERR_NUM": {
    -                    "description": "The value of this signal means the number of error bytes.",
    -                    "offset": 12,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  },
    -                  "KEY0_FAIL": {
    -                    "description": "0: Means no failure and that the data of key0 is reliable 1: Means that programming key0 failed and the number of error bytes is over 6.",
    -                    "offset": 15,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "KEY1_ERR_NUM": {
    -                    "description": "The value of this signal means the number of error bytes.",
    -                    "offset": 16,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  },
    -                  "KEY1_FAIL": {
    -                    "description": "0: Means no failure and that the data of key1 is reliable 1: Means that programming key1 failed and the number of error bytes is over 6.",
    -                    "offset": 19,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "KEY2_ERR_NUM": {
    -                    "description": "The value of this signal means the number of error bytes.",
    -                    "offset": 20,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  },
    -                  "KEY2_FAIL": {
    -                    "description": "0: Means no failure and that the data of key2 is reliable 1: Means that programming key2 failed and the number of error bytes is over 6.",
    -                    "offset": 23,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "KEY3_ERR_NUM": {
    -                    "description": "The value of this signal means the number of error bytes.",
    -                    "offset": 24,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  },
    -                  "KEY3_FAIL": {
    -                    "description": "0: Means no failure and that the data of key3 is reliable 1: Means that programming key3 failed and the number of error bytes is over 6.",
    -                    "offset": 27,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "KEY4_ERR_NUM": {
    -                    "description": "The value of this signal means the number of error bytes.",
    -                    "offset": 28,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  },
    -                  "KEY4_FAIL": {
    -                    "description": "0: Means no failure and that the data of key4 is reliable 1: Means that programming key4 failed and the number of error bytes is over 6.",
    -                    "offset": 31,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RD_RS_ERR1": {
    -              "description": "Programming error record register 1 of BLOCK1-10.",
    -              "offset": 452,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY5_ERR_NUM": {
    -                    "description": "The value of this signal means the number of error bytes.",
    -                    "offset": 0,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  },
    -                  "KEY5_FAIL": {
    -                    "description": "0: Means no failure and that the data of KEY5 is reliable 1: Means that programming user data failed and the number of error bytes is over 6.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SYS_PART2_ERR_NUM": {
    -                    "description": "The value of this signal means the number of error bytes.",
    -                    "offset": 4,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  },
    -                  "SYS_PART2_FAIL": {
    -                    "description": "0: Means no failure and that the data of system part2 is reliable 1: Means that programming user data failed and the number of error bytes is over 6.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CLK": {
    -              "description": "eFuse clcok configuration register.",
    -              "offset": 456,
    -              "size": 32,
    -              "reset_value": 2,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "EFUSE_MEM_FORCE_PD": {
    -                    "description": "Set this bit to force eFuse SRAM into power-saving mode.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "MEM_CLK_FORCE_ON": {
    -                    "description": "Set this bit and force to activate clock signal of eFuse SRAM.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "EFUSE_MEM_FORCE_PU": {
    -                    "description": "Set this bit to force eFuse SRAM into working mode.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "EN": {
    -                    "description": "Set this bit and force to enable clock signal of eFuse memory.",
    -                    "offset": 16,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CONF": {
    -              "description": "eFuse operation mode configuraiton register;",
    -              "offset": 460,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OP_CODE": {
    -                    "description": "0x5A5A: Operate programming command 0x5AA5: Operate read command.",
    -                    "offset": 0,
    -                    "size": 16
    -                  }
    -                }
    -              }
    -            },
    -            "STATUS": {
    -              "description": "eFuse status register.",
    -              "offset": 464,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "STATE": {
    -                    "description": "Indicates the state of the eFuse state machine.",
    -                    "offset": 0,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  },
    -                  "OTP_LOAD_SW": {
    -                    "description": "The value of OTP_LOAD_SW.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OTP_VDDQ_C_SYNC2": {
    -                    "description": "The value of OTP_VDDQ_C_SYNC2.",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OTP_STROBE_SW": {
    -                    "description": "The value of OTP_STROBE_SW.",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OTP_CSB_SW": {
    -                    "description": "The value of OTP_CSB_SW.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OTP_PGENB_SW": {
    -                    "description": "The value of OTP_PGENB_SW.",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OTP_VDDQ_IS_SW": {
    -                    "description": "The value of OTP_VDDQ_IS_SW.",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "REPEAT_ERR_CNT": {
    -                    "description": "Indicates the number of error bits during programming BLOCK0.",
    -                    "offset": 10,
    -                    "size": 8,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CMD": {
    -              "description": "eFuse command register.",
    -              "offset": 468,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "READ_CMD": {
    -                    "description": "Set this bit to send read command.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "PGM_CMD": {
    -                    "description": "Set this bit to send programming command.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "BLK_NUM": {
    -                    "description": "The serial number of the block to be programmed. Value 0-10 corresponds to block number 0-10, respectively.",
    -                    "offset": 2,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "INT_RAW": {
    -              "description": "eFuse raw interrupt register.",
    -              "offset": 472,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "READ_DONE_INT_RAW": {
    -                    "description": "The raw bit signal for read_done interrupt.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "PGM_DONE_INT_RAW": {
    -                    "description": "The raw bit signal for pgm_done interrupt.",
    -                    "offset": 1,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ST": {
    -              "description": "eFuse interrupt status register.",
    -              "offset": 476,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "READ_DONE_INT_ST": {
    -                    "description": "The status signal for read_done interrupt.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "PGM_DONE_INT_ST": {
    -                    "description": "The status signal for pgm_done interrupt.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ENA": {
    -              "description": "eFuse interrupt enable register.",
    -              "offset": 480,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "READ_DONE_INT_ENA": {
    -                    "description": "The enable signal for read_done interrupt.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "PGM_DONE_INT_ENA": {
    -                    "description": "The enable signal for pgm_done interrupt.",
    -                    "offset": 1,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "INT_CLR": {
    -              "description": "eFuse interrupt clear register.",
    -              "offset": 484,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "READ_DONE_INT_CLR": {
    -                    "description": "The clear signal for read_done interrupt.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "PGM_DONE_INT_CLR": {
    -                    "description": "The clear signal for pgm_done interrupt.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DAC_CONF": {
    -              "description": "Controls the eFuse programming voltage.",
    -              "offset": 488,
    -              "size": 32,
    -              "reset_value": 130588,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DAC_CLK_DIV": {
    -                    "description": "Controls the division factor of the rising clock of the programming voltage.",
    -                    "offset": 0,
    -                    "size": 8
    -                  },
    -                  "DAC_CLK_PAD_SEL": {
    -                    "description": "Don't care.",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "DAC_NUM": {
    -                    "description": "Controls the rising period of the programming voltage.",
    -                    "offset": 9,
    -                    "size": 8
    -                  },
    -                  "OE_CLR": {
    -                    "description": "Reduces the power supply of the programming voltage.",
    -                    "offset": 17,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "RD_TIM_CONF": {
    -              "description": "Configures read timing parameters.",
    -              "offset": 492,
    -              "size": 32,
    -              "reset_value": 301989888,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "READ_INIT_NUM": {
    -                    "description": "Configures the initial read time of eFuse.",
    -                    "offset": 24,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "WR_TIM_CONF1": {
    -              "description": "Configurarion register 1 of eFuse programming timing parameters.",
    -              "offset": 496,
    -              "size": 32,
    -              "reset_value": 2654208,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PWR_ON_NUM": {
    -                    "description": "Configures the power up time for VDDQ.",
    -                    "offset": 8,
    -                    "size": 16
    -                  }
    -                }
    -              }
    -            },
    -            "WR_TIM_CONF2": {
    -              "description": "Configurarion register 2 of eFuse programming timing parameters.",
    -              "offset": 500,
    -              "size": 32,
    -              "reset_value": 400,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PWR_OFF_NUM": {
    -                    "description": "Configures the power outage time for VDDQ.",
    -                    "offset": 0,
    -                    "size": 16
    -                  }
    -                }
    -              }
    -            },
    -            "DATE": {
    -              "description": "eFuse version register.",
    -              "offset": 508,
    -              "size": 32,
    -              "reset_value": 33583616,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATE": {
    -                    "description": "Stores eFuse version.",
    -                    "offset": 0,
    -                    "size": 28
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "EXTMEM": {
    -        "description": "External Memory",
    -        "children": {
    -          "registers": {
    -            "ICACHE_CTRL": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 0,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_ENABLE": {
    -                    "description": "The bit is used to activate the data cache. 0: disable, 1: enable",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "ICACHE_CTRL1": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 4,
    -              "size": 32,
    -              "reset_value": 3,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_SHUT_IBUS": {
    -                    "description": "The bit is used to disable core0 ibus, 0: enable, 1: disable",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "ICACHE_SHUT_DBUS": {
    -                    "description": "The bit is used to disable core1 ibus, 0: enable, 1: disable",
    -                    "offset": 1,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "ICACHE_TAG_POWER_CTRL": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 8,
    -              "size": 32,
    -              "reset_value": 5,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_TAG_MEM_FORCE_ON": {
    -                    "description": "The bit is used to close clock gating of  icache tag memory. 1: close gating, 0: open clock gating.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "ICACHE_TAG_MEM_FORCE_PD": {
    -                    "description": "The bit is used to power  icache tag memory down, 0: follow rtc_lslp, 1: power down",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "ICACHE_TAG_MEM_FORCE_PU": {
    -                    "description": "The bit is used to power  icache tag memory up, 0: follow rtc_lslp, 1: power up",
    -                    "offset": 2,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "ICACHE_PRELOCK_CTRL": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 12,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_PRELOCK_SCT0_EN": {
    -                    "description": "The bit is used to enable the first section of prelock function.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "ICACHE_PRELOCK_SCT1_EN": {
    -                    "description": "The bit is used to enable the second section of prelock function.",
    -                    "offset": 1,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "ICACHE_PRELOCK_SCT0_ADDR": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 16,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_PRELOCK_SCT0_ADDR": {
    -                    "description": "The bits are used to configure the first start virtual address of data prelock, which is combined with ICACHE_PRELOCK_SCT0_SIZE_REG",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "ICACHE_PRELOCK_SCT1_ADDR": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 20,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_PRELOCK_SCT1_ADDR": {
    -                    "description": "The bits are used to configure the second start virtual address of data prelock, which is combined with ICACHE_PRELOCK_SCT1_SIZE_REG",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "ICACHE_PRELOCK_SCT_SIZE": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 24,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_PRELOCK_SCT1_SIZE": {
    -                    "description": "The bits are used to configure the second length of data locking, which is combined with ICACHE_PRELOCK_SCT1_ADDR_REG",
    -                    "offset": 0,
    -                    "size": 16
    -                  },
    -                  "ICACHE_PRELOCK_SCT0_SIZE": {
    -                    "description": "The bits are used to configure the first length of data locking, which is combined with ICACHE_PRELOCK_SCT0_ADDR_REG",
    -                    "offset": 16,
    -                    "size": 16
    -                  }
    -                }
    -              }
    -            },
    -            "ICACHE_LOCK_CTRL": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 28,
    -              "size": 32,
    -              "reset_value": 4,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_LOCK_ENA": {
    -                    "description": "The bit is used to enable lock operation. It will be cleared by hardware after lock operation done.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "ICACHE_UNLOCK_ENA": {
    -                    "description": "The bit is used to enable unlock operation. It will be cleared by hardware after unlock operation done.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "ICACHE_LOCK_DONE": {
    -                    "description": "The bit is used to indicate unlock/lock operation is finished.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "ICACHE_LOCK_ADDR": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 32,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_LOCK_ADDR": {
    -                    "description": "The bits are used to configure the start virtual address for lock operations. It should be combined with ICACHE_LOCK_SIZE_REG.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "ICACHE_LOCK_SIZE": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 36,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_LOCK_SIZE": {
    -                    "description": "The bits are used to configure the length for lock operations. The bits are the counts of cache block. It should be combined with ICACHE_LOCK_ADDR_REG.",
    -                    "offset": 0,
    -                    "size": 16
    -                  }
    -                }
    -              }
    -            },
    -            "ICACHE_SYNC_CTRL": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 40,
    -              "size": 32,
    -              "reset_value": 1,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_INVALIDATE_ENA": {
    -                    "description": "The bit is used to enable invalidate operation. It will be cleared by hardware after invalidate operation done.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "ICACHE_SYNC_DONE": {
    -                    "description": "The bit is used to indicate invalidate operation is finished.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "ICACHE_SYNC_ADDR": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 44,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_SYNC_ADDR": {
    -                    "description": "The bits are used to configure the start virtual address for clean operations. It should be combined with ICACHE_SYNC_SIZE_REG.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "ICACHE_SYNC_SIZE": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 48,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_SYNC_SIZE": {
    -                    "description": "The bits are used to configure the length for sync operations. The bits are the counts of cache block. It should be combined with ICACHE_SYNC_ADDR_REG.",
    -                    "offset": 0,
    -                    "size": 23
    -                  }
    -                }
    -              }
    -            },
    -            "ICACHE_PRELOAD_CTRL": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 52,
    -              "size": 32,
    -              "reset_value": 2,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_PRELOAD_ENA": {
    -                    "description": "The bit is used to enable preload operation. It will be cleared by hardware after preload operation done.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "ICACHE_PRELOAD_DONE": {
    -                    "description": "The bit is used to indicate preload operation is finished.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "ICACHE_PRELOAD_ORDER": {
    -                    "description": "The bit is used to configure the direction of preload operation. 1: descending, 0: ascending.",
    -                    "offset": 2,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "ICACHE_PRELOAD_ADDR": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 56,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_PRELOAD_ADDR": {
    -                    "description": "The bits are used to configure the start virtual address for preload operation. It should be combined with ICACHE_PRELOAD_SIZE_REG.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "ICACHE_PRELOAD_SIZE": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 60,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_PRELOAD_SIZE": {
    -                    "description": "The bits are used to configure the length for preload operation. The bits are the counts of cache block. It should be combined with ICACHE_PRELOAD_ADDR_REG..",
    -                    "offset": 0,
    -                    "size": 16
    -                  }
    -                }
    -              }
    -            },
    -            "ICACHE_AUTOLOAD_CTRL": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 64,
    -              "size": 32,
    -              "reset_value": 8,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_AUTOLOAD_SCT0_ENA": {
    -                    "description": "The bits are used to enable the first section for autoload operation.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "ICACHE_AUTOLOAD_SCT1_ENA": {
    -                    "description": "The bits are used to enable the second section for autoload operation.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "ICACHE_AUTOLOAD_ENA": {
    -                    "description": "The bit is used to enable and disable autoload operation. It is combined with icache_autoload_done. 1: enable, 0: disable.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "ICACHE_AUTOLOAD_DONE": {
    -                    "description": "The bit is used to indicate autoload operation is finished.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "ICACHE_AUTOLOAD_ORDER": {
    -                    "description": "The bits are used to configure the direction of autoload. 1: descending, 0: ascending.",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "ICACHE_AUTOLOAD_RQST": {
    -                    "description": "The bits are used to configure trigger conditions for autoload. 0/3: cache miss, 1: cache hit, 2: both cache miss and hit.",
    -                    "offset": 5,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "ICACHE_AUTOLOAD_SCT0_ADDR": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 68,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_AUTOLOAD_SCT0_ADDR": {
    -                    "description": "The bits are used to configure the start virtual address of the first section for autoload operation. It should be combined with icache_autoload_sct0_ena.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "ICACHE_AUTOLOAD_SCT0_SIZE": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 72,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_AUTOLOAD_SCT0_SIZE": {
    -                    "description": "The bits are used to configure the length of the first section for autoload operation. It should be combined with icache_autoload_sct0_ena.",
    -                    "offset": 0,
    -                    "size": 27
    -                  }
    -                }
    -              }
    -            },
    -            "ICACHE_AUTOLOAD_SCT1_ADDR": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 76,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_AUTOLOAD_SCT1_ADDR": {
    -                    "description": "The bits are used to configure the start virtual address of the second section for autoload operation. It should be combined with icache_autoload_sct1_ena.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "ICACHE_AUTOLOAD_SCT1_SIZE": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 80,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_AUTOLOAD_SCT1_SIZE": {
    -                    "description": "The bits are used to configure the length of the second section for autoload operation. It should be combined with icache_autoload_sct1_ena.",
    -                    "offset": 0,
    -                    "size": 27
    -                  }
    -                }
    -              }
    -            },
    -            "IBUS_TO_FLASH_START_VADDR": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 84,
    -              "size": 32,
    -              "reset_value": 1107296256,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IBUS_TO_FLASH_START_VADDR": {
    -                    "description": "The bits are used to configure the start virtual address of ibus to access flash. The register is used to give constraints to ibus access counter.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "IBUS_TO_FLASH_END_VADDR": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 88,
    -              "size": 32,
    -              "reset_value": 1115684863,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IBUS_TO_FLASH_END_VADDR": {
    -                    "description": "The bits are used to configure the end virtual address of ibus to access flash. The register is used to give constraints to ibus access counter.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "DBUS_TO_FLASH_START_VADDR": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 92,
    -              "size": 32,
    -              "reset_value": 1006632960,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DBUS_TO_FLASH_START_VADDR": {
    -                    "description": "The bits are used to configure the start virtual address of dbus to access flash. The register is used to give constraints to dbus access counter.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "DBUS_TO_FLASH_END_VADDR": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 96,
    -              "size": 32,
    -              "reset_value": 1015021567,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DBUS_TO_FLASH_END_VADDR": {
    -                    "description": "The bits are used to configure the end virtual address of dbus to access flash. The register is used to give constraints to dbus access counter.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "CACHE_ACS_CNT_CLR": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 100,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IBUS_ACS_CNT_CLR": {
    -                    "description": "The bit is used to clear ibus counter.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "DBUS_ACS_CNT_CLR": {
    -                    "description": "The bit is used to clear dbus counter.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IBUS_ACS_MISS_CNT": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 104,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IBUS_ACS_MISS_CNT": {
    -                    "description": "The bits are used to count the number of the cache miss caused by ibus access flash.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IBUS_ACS_CNT": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 108,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IBUS_ACS_CNT": {
    -                    "description": "The bits are used to count the number of ibus access flash through icache.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DBUS_ACS_FLASH_MISS_CNT": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 112,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DBUS_ACS_FLASH_MISS_CNT": {
    -                    "description": "The bits are used to count the number of the cache miss caused by dbus access flash.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DBUS_ACS_CNT": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 116,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DBUS_ACS_CNT": {
    -                    "description": "The bits are used to count the number of dbus access flash through icache.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CACHE_ILG_INT_ENA": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 120,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_SYNC_OP_FAULT_INT_ENA": {
    -                    "description": "The bit is used to enable interrupt by sync configurations fault.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "ICACHE_PRELOAD_OP_FAULT_INT_ENA": {
    -                    "description": "The bit is used to enable interrupt by preload configurations fault.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "MMU_ENTRY_FAULT_INT_ENA": {
    -                    "description": "The bit is used to enable interrupt by mmu entry fault.",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "IBUS_CNT_OVF_INT_ENA": {
    -                    "description": "The bit is used to enable interrupt by ibus counter overflow.",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "DBUS_CNT_OVF_INT_ENA": {
    -                    "description": "The bit is used to enable interrupt by dbus counter overflow.",
    -                    "offset": 8,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CACHE_ILG_INT_CLR": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 124,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_SYNC_OP_FAULT_INT_CLR": {
    -                    "description": "The bit is used to clear interrupt by sync configurations fault.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "ICACHE_PRELOAD_OP_FAULT_INT_CLR": {
    -                    "description": "The bit is used to clear interrupt by preload configurations fault.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "MMU_ENTRY_FAULT_INT_CLR": {
    -                    "description": "The bit is used to clear interrupt by mmu entry fault.",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "IBUS_CNT_OVF_INT_CLR": {
    -                    "description": "The bit is used to clear interrupt by ibus counter overflow.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "DBUS_CNT_OVF_INT_CLR": {
    -                    "description": "The bit is used to clear interrupt by dbus counter overflow.",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CACHE_ILG_INT_ST": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 128,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_SYNC_OP_FAULT_ST": {
    -                    "description": "The bit is used to indicate interrupt by sync configurations fault.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "ICACHE_PRELOAD_OP_FAULT_ST": {
    -                    "description": "The bit is used to indicate interrupt by preload configurations fault.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "MMU_ENTRY_FAULT_ST": {
    -                    "description": "The bit is used to indicate interrupt by mmu entry fault.",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IBUS_ACS_CNT_OVF_ST": {
    -                    "description": "The bit is used to indicate interrupt by ibus access flash/spiram counter overflow.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IBUS_ACS_MISS_CNT_OVF_ST": {
    -                    "description": "The bit is used to indicate interrupt by ibus access flash/spiram miss counter overflow.",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DBUS_ACS_CNT_OVF_ST": {
    -                    "description": "The bit is used to indicate interrupt by dbus access flash/spiram counter overflow.",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DBUS_ACS_FLASH_MISS_CNT_OVF_ST": {
    -                    "description": "The bit is used to indicate interrupt by dbus access flash miss counter overflow.",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CORE0_ACS_CACHE_INT_ENA": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 132,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE0_IBUS_ACS_MSK_IC_INT_ENA": {
    -                    "description": "The bit is used to enable interrupt by cpu access icache while the corresponding ibus is disabled which include speculative access.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "CORE0_IBUS_WR_IC_INT_ENA": {
    -                    "description": "The bit is used to enable interrupt by ibus trying to write icache",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "CORE0_IBUS_REJECT_INT_ENA": {
    -                    "description": "The bit is used to enable interrupt by authentication fail.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "CORE0_DBUS_ACS_MSK_IC_INT_ENA": {
    -                    "description": "The bit is used to enable interrupt by cpu access icache while the corresponding dbus is disabled which include speculative access.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "CORE0_DBUS_REJECT_INT_ENA": {
    -                    "description": "The bit is used to enable interrupt by authentication fail.",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "CORE0_DBUS_WR_IC_INT_ENA": {
    -                    "description": "The bit is used to enable interrupt by dbus trying to write icache",
    -                    "offset": 5,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CORE0_ACS_CACHE_INT_CLR": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 136,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE0_IBUS_ACS_MSK_IC_INT_CLR": {
    -                    "description": "The bit is used to clear interrupt by cpu access icache while the corresponding ibus is disabled or icache is disabled which include speculative access.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "CORE0_IBUS_WR_IC_INT_CLR": {
    -                    "description": "The bit is used to clear interrupt by ibus trying to write icache",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "CORE0_IBUS_REJECT_INT_CLR": {
    -                    "description": "The bit is used to clear interrupt by authentication fail.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "CORE0_DBUS_ACS_MSK_IC_INT_CLR": {
    -                    "description": "The bit is used to clear interrupt by cpu access icache while the corresponding dbus is disabled or icache is disabled which include speculative access.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "CORE0_DBUS_REJECT_INT_CLR": {
    -                    "description": "The bit is used to clear interrupt by authentication fail.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "CORE0_DBUS_WR_IC_INT_CLR": {
    -                    "description": "The bit is used to clear interrupt by dbus trying to write icache",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CORE0_ACS_CACHE_INT_ST": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 140,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE0_IBUS_ACS_MSK_ICACHE_ST": {
    -                    "description": "The bit is used to indicate interrupt by cpu access  icache while the core0_ibus is disabled or icache is disabled which include speculative access.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE0_IBUS_WR_ICACHE_ST": {
    -                    "description": "The bit is used to indicate interrupt by ibus trying to write icache",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE0_IBUS_REJECT_ST": {
    -                    "description": "The bit is used to indicate interrupt by authentication fail.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE0_DBUS_ACS_MSK_ICACHE_ST": {
    -                    "description": "The bit is used to indicate interrupt by cpu access icache while the core0_dbus is disabled or icache is disabled which include speculative access.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE0_DBUS_REJECT_ST": {
    -                    "description": "The bit is used to indicate interrupt by authentication fail.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE0_DBUS_WR_ICACHE_ST": {
    -                    "description": "The bit is used to indicate interrupt by dbus trying to write icache",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CORE0_DBUS_REJECT_ST": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 144,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE0_DBUS_ATTR": {
    -                    "description": "The bits are used to indicate the attribute of CPU access dbus when authentication fail. 0: invalidate, 1: execute-able, 2: read-able, 4: write-able.",
    -                    "offset": 0,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  },
    -                  "CORE0_DBUS_WORLD": {
    -                    "description": "The bit is used to indicate the world of CPU access dbus when authentication fail. 0: WORLD0, 1: WORLD1",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CORE0_DBUS_REJECT_VADDR": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 148,
    -              "size": 32,
    -              "reset_value": 4294967295,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE0_DBUS_VADDR": {
    -                    "description": "The bits are used to indicate the virtual address of CPU access dbus when authentication fail.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CORE0_IBUS_REJECT_ST": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 152,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE0_IBUS_ATTR": {
    -                    "description": "The bits are used to indicate the attribute of CPU access ibus when authentication fail. 0: invalidate, 1: execute-able, 2: read-able",
    -                    "offset": 0,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  },
    -                  "CORE0_IBUS_WORLD": {
    -                    "description": "The bit is used to indicate the world of CPU access ibus when authentication fail. 0: WORLD0, 1: WORLD1",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CORE0_IBUS_REJECT_VADDR": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 156,
    -              "size": 32,
    -              "reset_value": 4294967295,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE0_IBUS_VADDR": {
    -                    "description": "The bits are used to indicate the virtual address of CPU access  ibus when authentication fail.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CACHE_MMU_FAULT_CONTENT": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 160,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CACHE_MMU_FAULT_CONTENT": {
    -                    "description": "The bits are used to indicate the content of mmu entry which cause mmu fault..",
    -                    "offset": 0,
    -                    "size": 10,
    -                    "access": "read-only"
    -                  },
    -                  "CACHE_MMU_FAULT_CODE": {
    -                    "description": "The right-most 3 bits are used to indicate the operations which cause mmu fault occurrence. 0: default, 1: cpu miss, 2: preload miss, 3: writeback, 4: cpu miss evict recovery address, 5: load miss evict recovery address, 6: external dma tx, 7: external dma rx. The most significant bit is used to indicate this operation occurs in which one icache.",
    -                    "offset": 10,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CACHE_MMU_FAULT_VADDR": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 164,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CACHE_MMU_FAULT_VADDR": {
    -                    "description": "The bits are used to indicate the virtual address which cause mmu fault..",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CACHE_WRAP_AROUND_CTRL": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 168,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CACHE_FLASH_WRAP_AROUND": {
    -                    "description": "The bit is used to enable wrap around mode when read data from flash.",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CACHE_MMU_POWER_CTRL": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 172,
    -              "size": 32,
    -              "reset_value": 5,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CACHE_MMU_MEM_FORCE_ON": {
    -                    "description": "The bit is used to enable clock gating to save power when access mmu memory, 0: enable, 1: disable",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "CACHE_MMU_MEM_FORCE_PD": {
    -                    "description": "The bit is used to power mmu memory down, 0: follow_rtc_lslp_pd, 1: power down",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "CACHE_MMU_MEM_FORCE_PU": {
    -                    "description": "The bit is used to power mmu memory down, 0: follow_rtc_lslp_pd, 1: power up",
    -                    "offset": 2,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CACHE_STATE": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 176,
    -              "size": 32,
    -              "reset_value": 1,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_STATE": {
    -                    "description": "The bit is used to indicate whether  icache main fsm is in idle state or not. 1: in idle state,  0: not in idle state",
    -                    "offset": 0,
    -                    "size": 12,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CACHE_ENCRYPT_DECRYPT_RECORD_DISABLE": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 180,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RECORD_DISABLE_DB_ENCRYPT": {
    -                    "description": "Reserved.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "RECORD_DISABLE_G0CB_DECRYPT": {
    -                    "description": "Reserved.",
    -                    "offset": 1,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CACHE_ENCRYPT_DECRYPT_CLK_FORCE_ON": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 184,
    -              "size": 32,
    -              "reset_value": 7,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CLK_FORCE_ON_MANUAL_CRYPT": {
    -                    "description": "The bit is used to close clock gating of manual crypt clock. 1: close gating, 0: open clock gating.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "CLK_FORCE_ON_AUTO_CRYPT": {
    -                    "description": "The bit is used to close clock gating of automatic crypt clock. 1: close gating, 0: open clock gating.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "CLK_FORCE_ON_CRYPT": {
    -                    "description": "The bit is used to close clock gating of external memory encrypt and decrypt clock. 1: close gating, 0: open clock gating.",
    -                    "offset": 2,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CACHE_PRELOAD_INT_CTRL": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 188,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_PRELOAD_INT_ST": {
    -                    "description": "The bit is used to indicate the interrupt by  icache pre-load done.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "ICACHE_PRELOAD_INT_ENA": {
    -                    "description": "The bit is used to enable the interrupt by  icache pre-load done.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "ICACHE_PRELOAD_INT_CLR": {
    -                    "description": "The bit is used to clear the interrupt by  icache pre-load done.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CACHE_SYNC_INT_CTRL": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 192,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_SYNC_INT_ST": {
    -                    "description": "The bit is used to indicate the interrupt by  icache sync done.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "ICACHE_SYNC_INT_ENA": {
    -                    "description": "The bit is used to enable the interrupt by  icache sync done.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "ICACHE_SYNC_INT_CLR": {
    -                    "description": "The bit is used to clear the interrupt by  icache sync done.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CACHE_MMU_OWNER": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 196,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CACHE_MMU_OWNER": {
    -                    "description": "The bits are used to specify the owner of MMU.bit0/bit2: ibus, bit1/bit3: dbus",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CACHE_CONF_MISC": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 200,
    -              "size": 32,
    -              "reset_value": 7,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CACHE_IGNORE_PRELOAD_MMU_ENTRY_FAULT": {
    -                    "description": "The bit is used to disable checking mmu entry fault by preload operation.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "CACHE_IGNORE_SYNC_MMU_ENTRY_FAULT": {
    -                    "description": "The bit is used to disable checking mmu entry fault by sync operation.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "CACHE_TRACE_ENA": {
    -                    "description": "The bit is used to enable cache trace function.",
    -                    "offset": 2,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "ICACHE_FREEZE": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 204,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ENA": {
    -                    "description": "The bit is used to enable icache freeze mode",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "MODE": {
    -                    "description": "The bit is used to configure freeze mode, 0:  assert busy if CPU miss 1: assert hit if CPU miss",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "DONE": {
    -                    "description": "The bit is used to indicate icache freeze success",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "ICACHE_ATOMIC_OPERATE_ENA": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 208,
    -              "size": 32,
    -              "reset_value": 1,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_ATOMIC_OPERATE_ENA": {
    -                    "description": "The bit is used to activate icache atomic operation protection. In this case, sync/lock operation can not interrupt miss-work. This feature does not work during invalidateAll operation.",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CACHE_REQUEST": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 212,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BYPASS": {
    -                    "description": "The bit is used to disable request recording which could cause performance issue",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "IBUS_PMS_TBL_LOCK": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 216,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IBUS_PMS_LOCK": {
    -                    "description": "The bit is used to configure the ibus permission control section boundary0",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "IBUS_PMS_TBL_BOUNDARY0": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 220,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IBUS_PMS_BOUNDARY0": {
    -                    "description": "The bit is used to configure the ibus permission control section boundary0",
    -                    "offset": 0,
    -                    "size": 12
    -                  }
    -                }
    -              }
    -            },
    -            "IBUS_PMS_TBL_BOUNDARY1": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 224,
    -              "size": 32,
    -              "reset_value": 2048,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IBUS_PMS_BOUNDARY1": {
    -                    "description": "The bit is used to configure the ibus permission control section boundary1",
    -                    "offset": 0,
    -                    "size": 12
    -                  }
    -                }
    -              }
    -            },
    -            "IBUS_PMS_TBL_BOUNDARY2": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 228,
    -              "size": 32,
    -              "reset_value": 2048,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IBUS_PMS_BOUNDARY2": {
    -                    "description": "The bit is used to configure the ibus permission control section boundary2",
    -                    "offset": 0,
    -                    "size": 12
    -                  }
    -                }
    -              }
    -            },
    -            "IBUS_PMS_TBL_ATTR": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 232,
    -              "size": 32,
    -              "reset_value": 255,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IBUS_PMS_SCT1_ATTR": {
    -                    "description": "The bit is used to configure attribute of the ibus permission control section1, bit0: fetch in world0, bit1: load in world0, bit2: fetch in world1, bit3: load in world1",
    -                    "offset": 0,
    -                    "size": 4
    -                  },
    -                  "IBUS_PMS_SCT2_ATTR": {
    -                    "description": "The bit is used to configure attribute of the ibus permission control section2, bit0: fetch in world0, bit1: load in world0, bit2: fetch in world1, bit3: load in world1",
    -                    "offset": 4,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "DBUS_PMS_TBL_LOCK": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 236,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DBUS_PMS_LOCK": {
    -                    "description": "The bit is used to configure the ibus permission control section boundary0",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DBUS_PMS_TBL_BOUNDARY0": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 240,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DBUS_PMS_BOUNDARY0": {
    -                    "description": "The bit is used to configure the dbus permission control section boundary0",
    -                    "offset": 0,
    -                    "size": 12
    -                  }
    -                }
    -              }
    -            },
    -            "DBUS_PMS_TBL_BOUNDARY1": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 244,
    -              "size": 32,
    -              "reset_value": 2048,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DBUS_PMS_BOUNDARY1": {
    -                    "description": "The bit is used to configure the dbus permission control section boundary1",
    -                    "offset": 0,
    -                    "size": 12
    -                  }
    -                }
    -              }
    -            },
    -            "DBUS_PMS_TBL_BOUNDARY2": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 248,
    -              "size": 32,
    -              "reset_value": 2048,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DBUS_PMS_BOUNDARY2": {
    -                    "description": "The bit is used to configure the dbus permission control section boundary2",
    -                    "offset": 0,
    -                    "size": 12
    -                  }
    -                }
    -              }
    -            },
    -            "DBUS_PMS_TBL_ATTR": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 252,
    -              "size": 32,
    -              "reset_value": 15,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DBUS_PMS_SCT1_ATTR": {
    -                    "description": "The bit is used to configure attribute of the dbus permission control section1, bit0: load in world0, bit2: load in world1",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "DBUS_PMS_SCT2_ATTR": {
    -                    "description": "The bit is used to configure attribute of the dbus permission control section2, bit0: load in world0, bit2: load in world1",
    -                    "offset": 2,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "CLOCK_GATE": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 256,
    -              "size": 32,
    -              "reset_value": 1,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CLK_EN": {
    -                    "description": "clock gate enable.",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "REG_DATE": {
    -              "description": "This description will be updated in the near future.",
    -              "offset": 1020,
    -              "size": 32,
    -              "reset_value": 33583456,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATE": {
    -                    "description": "version information",
    -                    "offset": 0,
    -                    "size": 28
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "GPIO": {
    -        "description": "General Purpose Input/Output",
    -        "children": {
    -          "registers": {
    -            "BT_SELECT": {
    -              "description": "GPIO bit select register",
    -              "offset": 0,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BT_SEL": {
    -                    "description": "GPIO bit select register",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "OUT": {
    -              "description": "GPIO output register",
    -              "offset": 4,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATA_ORIG": {
    -                    "description": "GPIO output register for GPIO0-25",
    -                    "offset": 0,
    -                    "size": 26
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_W1TS": {
    -              "description": "GPIO output set register",
    -              "offset": 8,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUT_W1TS": {
    -                    "description": "GPIO output set register for GPIO0-25",
    -                    "offset": 0,
    -                    "size": 26,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_W1TC": {
    -              "description": "GPIO output clear register",
    -              "offset": 12,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUT_W1TC": {
    -                    "description": "GPIO output clear register for GPIO0-25",
    -                    "offset": 0,
    -                    "size": 26,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "SDIO_SELECT": {
    -              "description": "GPIO sdio select register",
    -              "offset": 28,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SDIO_SEL": {
    -                    "description": "GPIO sdio select register",
    -                    "offset": 0,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "ENABLE": {
    -              "description": "GPIO output enable register",
    -              "offset": 32,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATA": {
    -                    "description": "GPIO output enable register for GPIO0-25",
    -                    "offset": 0,
    -                    "size": 26
    -                  }
    -                }
    -              }
    -            },
    -            "ENABLE_W1TS": {
    -              "description": "GPIO output enable set register",
    -              "offset": 36,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ENABLE_W1TS": {
    -                    "description": "GPIO output enable set register for GPIO0-25",
    -                    "offset": 0,
    -                    "size": 26,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "ENABLE_W1TC": {
    -              "description": "GPIO output enable clear register",
    -              "offset": 40,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ENABLE_W1TC": {
    -                    "description": "GPIO output enable clear register for GPIO0-25",
    -                    "offset": 0,
    -                    "size": 26,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "STRAP": {
    -              "description": "pad strapping register",
    -              "offset": 56,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "STRAPPING": {
    -                    "description": "pad strapping register",
    -                    "offset": 0,
    -                    "size": 16,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN": {
    -              "description": "GPIO input register",
    -              "offset": 60,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATA_NEXT": {
    -                    "description": "GPIO input register for GPIO0-25",
    -                    "offset": 0,
    -                    "size": 26,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "STATUS": {
    -              "description": "GPIO interrupt status register",
    -              "offset": 68,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INTERRUPT": {
    -                    "description": "GPIO interrupt status register for GPIO0-25",
    -                    "offset": 0,
    -                    "size": 26
    -                  }
    -                }
    -              }
    -            },
    -            "STATUS_W1TS": {
    -              "description": "GPIO interrupt status set register",
    -              "offset": 72,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "STATUS_W1TS": {
    -                    "description": "GPIO interrupt status set register for GPIO0-25",
    -                    "offset": 0,
    -                    "size": 26,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "STATUS_W1TC": {
    -              "description": "GPIO interrupt status clear register",
    -              "offset": 76,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "STATUS_W1TC": {
    -                    "description": "GPIO interrupt status clear register for GPIO0-25",
    -                    "offset": 0,
    -                    "size": 26,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "PCPU_INT": {
    -              "description": "GPIO PRO_CPU interrupt status register",
    -              "offset": 92,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PROCPU_INT": {
    -                    "description": "GPIO PRO_CPU interrupt status register for GPIO0-25",
    -                    "offset": 0,
    -                    "size": 26,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "PCPU_NMI_INT": {
    -              "description": "GPIO PRO_CPU(not shielded) interrupt status register",
    -              "offset": 96,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PROCPU_NMI_INT": {
    -                    "description": "GPIO PRO_CPU(not shielded) interrupt status register for GPIO0-25",
    -                    "offset": 0,
    -                    "size": 26,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CPUSDIO_INT": {
    -              "description": "GPIO CPUSDIO interrupt status register",
    -              "offset": 100,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SDIO_INT": {
    -                    "description": "GPIO CPUSDIO interrupt status register for GPIO0-25",
    -                    "offset": 0,
    -                    "size": 26,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "PIN": {
    -              "description": "GPIO pin configuration register",
    -              "offset": 116,
    -              "size": 32,
    -              "count": 26,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PIN_SYNC2_BYPASS": {
    -                    "description": "set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger at posedge.",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "PIN_PAD_DRIVER": {
    -                    "description": "set this bit to select pad driver. 1:open-drain. :normal.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "PIN_SYNC1_BYPASS": {
    -                    "description": "set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger at posedge.",
    -                    "offset": 3,
    -                    "size": 2
    -                  },
    -                  "PIN_INT_TYPE": {
    -                    "description": "set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level. 5:valid at high level",
    -                    "offset": 7,
    -                    "size": 3
    -                  },
    -                  "PIN_WAKEUP_ENABLE": {
    -                    "description": "set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "PIN_CONFIG": {
    -                    "description": "reserved",
    -                    "offset": 11,
    -                    "size": 2
    -                  },
    -                  "PIN_INT_ENA": {
    -                    "description": "set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded) interrupt.",
    -                    "offset": 13,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "STATUS_NEXT": {
    -              "description": "GPIO interrupt source register",
    -              "offset": 332,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "STATUS_INTERRUPT_NEXT": {
    -                    "description": "GPIO interrupt source register for GPIO0-25",
    -                    "offset": 0,
    -                    "size": 26,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "FUNC_IN_SEL_CFG": {
    -              "description": "GPIO input function configuration register",
    -              "offset": 340,
    -              "size": 32,
    -              "count": 128,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_SEL": {
    -                    "description": "set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always high level. s=x3C: set this port always low level.",
    -                    "offset": 0,
    -                    "size": 5
    -                  },
    -                  "IN_INV_SEL": {
    -                    "description": "set this bit to invert input signal. 1:invert. :not invert.",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "SEL": {
    -                    "description": "set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.",
    -                    "offset": 6,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "FUNC_OUT_SEL_CFG": {
    -              "description": "GPIO output function select register",
    -              "offset": 1364,
    -              "size": 32,
    -              "count": 26,
    -              "reset_value": 128,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUT_SEL": {
    -                    "description": "The value of the bits: <=s<=256. Set the value to select output signal. s=-255: output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals GPIO_OUT_REG[n].",
    -                    "offset": 0,
    -                    "size": 8
    -                  },
    -                  "INV_SEL": {
    -                    "description": "set this bit to invert output signal.1:invert.:not invert.",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "OEN_SEL": {
    -                    "description": "set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output enable signal.:use peripheral output enable signal.",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "OEN_INV_SEL": {
    -                    "description": "set this bit to invert output enable signal.1:invert.:not invert.",
    -                    "offset": 10,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CLOCK_GATE": {
    -              "description": "GPIO clock gate register",
    -              "offset": 1580,
    -              "size": 32,
    -              "reset_value": 1,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CLK_EN": {
    -                    "description": "set this bit to enable GPIO clock gate",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "REG_DATE": {
    -              "description": "GPIO version register",
    -              "offset": 1788,
    -              "size": 32,
    -              "reset_value": 33579312,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "REG_DATE": {
    -                    "description": "version register",
    -                    "offset": 0,
    -                    "size": 28
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "GPIOSD": {
    -        "description": "Sigma-Delta Modulation",
    -        "children": {
    -          "registers": {
    -            "SIGMADELTA": {
    -              "description": "Duty Cycle Configure Register of SDM%s",
    -              "offset": 0,
    -              "size": 32,
    -              "count": 4,
    -              "reset_value": 65280,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SD0_IN": {
    -                    "description": "This field is used to configure the duty cycle of sigma delta modulation output.",
    -                    "offset": 0,
    -                    "size": 8
    -                  },
    -                  "SD0_PRESCALE": {
    -                    "description": "This field is used to set a divider value to divide APB clock.",
    -                    "offset": 8,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "SIGMADELTA_CG": {
    -              "description": "Clock Gating Configure Register",
    -              "offset": 32,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CLK_EN": {
    -                    "description": "Clock enable bit of configuration registers for sigma delta modulation.",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "SIGMADELTA_MISC": {
    -              "description": "MISC Register",
    -              "offset": 36,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "FUNCTION_CLK_EN": {
    -                    "description": "Clock enable bit of sigma delta modulation.",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "SPI_SWAP": {
    -                    "description": "Reserved.",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "SIGMADELTA_VERSION": {
    -              "description": "Version Control Register",
    -              "offset": 40,
    -              "size": 32,
    -              "reset_value": 33579568,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "GPIO_SD_DATE": {
    -                    "description": "Version control register.",
    -                    "offset": 0,
    -                    "size": 28
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "HMAC": {
    -        "description": "HMAC (Hash-based Message Authentication Code) Accelerator",
    -        "children": {
    -          "registers": {
    -            "SET_START": {
    -              "description": "Process control register 0.",
    -              "offset": 64,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SET_START": {
    -                    "description": "Start hmac operation.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "SET_PARA_PURPOSE": {
    -              "description": "Configure purpose.",
    -              "offset": 68,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PURPOSE_SET": {
    -                    "description": "Set hmac parameter purpose.",
    -                    "offset": 0,
    -                    "size": 4,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "SET_PARA_KEY": {
    -              "description": "Configure key.",
    -              "offset": 72,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "KEY_SET": {
    -                    "description": "Set hmac parameter key.",
    -                    "offset": 0,
    -                    "size": 3,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "SET_PARA_FINISH": {
    -              "description": "Finish initial configuration.",
    -              "offset": 76,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SET_PARA_END": {
    -                    "description": "Finish hmac configuration.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "SET_MESSAGE_ONE": {
    -              "description": "Process control register 1.",
    -              "offset": 80,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SET_TEXT_ONE": {
    -                    "description": "Call SHA to calculate one message block.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "SET_MESSAGE_ING": {
    -              "description": "Process control register 2.",
    -              "offset": 84,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SET_TEXT_ING": {
    -                    "description": "Continue typical hmac.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "SET_MESSAGE_END": {
    -              "description": "Process control register 3.",
    -              "offset": 88,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SET_TEXT_END": {
    -                    "description": "Start hardware padding.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "SET_RESULT_FINISH": {
    -              "description": "Process control register 4.",
    -              "offset": 92,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SET_RESULT_END": {
    -                    "description": "After read result from upstream, then let hmac back to idle.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "SET_INVALIDATE_JTAG": {
    -              "description": "Invalidate register 0.",
    -              "offset": 96,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SET_INVALIDATE_JTAG": {
    -                    "description": "Clear result from hmac downstream JTAG.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "SET_INVALIDATE_DS": {
    -              "description": "Invalidate register 1.",
    -              "offset": 100,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SET_INVALIDATE_DS": {
    -                    "description": "Clear result from hmac downstream DS.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "QUERY_ERROR": {
    -              "description": "Error register.",
    -              "offset": 104,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "QUREY_CHECK": {
    -                    "description": "Hmac configuration state. 0: key are agree with purpose. 1: error",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "QUERY_BUSY": {
    -              "description": "Busy register.",
    -              "offset": 108,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUSY_STATE": {
    -                    "description": "Hmac state. 1'b0: idle. 1'b1: busy",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "WR_MESSAGE_MEM": {
    -              "description": "Message block memory.",
    -              "offset": 128,
    -              "size": 8,
    -              "count": 64,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295
    -            },
    -            "RD_RESULT_MEM": {
    -              "description": "Result from upstream.",
    -              "offset": 192,
    -              "size": 8,
    -              "count": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295
    -            },
    -            "SET_MESSAGE_PAD": {
    -              "description": "Process control register 5.",
    -              "offset": 240,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SET_TEXT_PAD": {
    -                    "description": "Start software padding.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "ONE_BLOCK": {
    -              "description": "Process control register 6.",
    -              "offset": 244,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SET_ONE_BLOCK": {
    -                    "description": "Don't have to do padding.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "SOFT_JTAG_CTRL": {
    -              "description": "Jtag register 0.",
    -              "offset": 248,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SOFT_JTAG_CTRL": {
    -                    "description": "Turn on JTAG verification.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "WR_JTAG": {
    -              "description": "Jtag register 1.",
    -              "offset": 252,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "WR_JTAG": {
    -                    "description": "32-bit of key to be compared.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "I2C0": {
    -        "description": "I2C (Inter-Integrated Circuit) Controller",
    -        "children": {
    -          "registers": {
    -            "SCL_LOW_PERIOD": {
    -              "description": "I2C_SCL_LOW_PERIOD_REG",
    -              "offset": 0,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SCL_LOW_PERIOD": {
    -                    "description": "reg_scl_low_period",
    -                    "offset": 0,
    -                    "size": 9
    -                  }
    -                }
    -              }
    -            },
    -            "CTR": {
    -              "description": "I2C_CTR_REG",
    -              "offset": 4,
    -              "size": 32,
    -              "reset_value": 523,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SDA_FORCE_OUT": {
    -                    "description": "reg_sda_force_out",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "SCL_FORCE_OUT": {
    -                    "description": "reg_scl_force_out",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "SAMPLE_SCL_LEVEL": {
    -                    "description": "reg_sample_scl_level",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "RX_FULL_ACK_LEVEL": {
    -                    "description": "reg_rx_full_ack_level",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "MS_MODE": {
    -                    "description": "reg_ms_mode",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "TRANS_START": {
    -                    "description": "reg_trans_start",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "TX_LSB_FIRST": {
    -                    "description": "reg_tx_lsb_first",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "RX_LSB_FIRST": {
    -                    "description": "reg_rx_lsb_first",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "CLK_EN": {
    -                    "description": "reg_clk_en",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "ARBITRATION_EN": {
    -                    "description": "reg_arbitration_en",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "FSM_RST": {
    -                    "description": "reg_fsm_rst",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "CONF_UPGATE": {
    -                    "description": "reg_conf_upgate",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SLV_TX_AUTO_START_EN": {
    -                    "description": "reg_slv_tx_auto_start_en",
    -                    "offset": 12,
    -                    "size": 1
    -                  },
    -                  "ADDR_10BIT_RW_CHECK_EN": {
    -                    "description": "reg_addr_10bit_rw_check_en",
    -                    "offset": 13,
    -                    "size": 1
    -                  },
    -                  "ADDR_BROADCASTING_EN": {
    -                    "description": "reg_addr_broadcasting_en",
    -                    "offset": 14,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "SR": {
    -              "description": "I2C_SR_REG",
    -              "offset": 8,
    -              "size": 32,
    -              "reset_value": 49152,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RESP_REC": {
    -                    "description": "reg_resp_rec",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SLAVE_RW": {
    -                    "description": "reg_slave_rw",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "ARB_LOST": {
    -                    "description": "reg_arb_lost",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "BUS_BUSY": {
    -                    "description": "reg_bus_busy",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SLAVE_ADDRESSED": {
    -                    "description": "reg_slave_addressed",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RXFIFO_CNT": {
    -                    "description": "reg_rxfifo_cnt",
    -                    "offset": 8,
    -                    "size": 6,
    -                    "access": "read-only"
    -                  },
    -                  "STRETCH_CAUSE": {
    -                    "description": "reg_stretch_cause",
    -                    "offset": 14,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "TXFIFO_CNT": {
    -                    "description": "reg_txfifo_cnt",
    -                    "offset": 18,
    -                    "size": 6,
    -                    "access": "read-only"
    -                  },
    -                  "SCL_MAIN_STATE_LAST": {
    -                    "description": "reg_scl_main_state_last",
    -                    "offset": 24,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  },
    -                  "SCL_STATE_LAST": {
    -                    "description": "reg_scl_state_last",
    -                    "offset": 28,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "TO": {
    -              "description": "I2C_TO_REG",
    -              "offset": 12,
    -              "size": 32,
    -              "reset_value": 16,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIME_OUT_VALUE": {
    -                    "description": "reg_time_out_value",
    -                    "offset": 0,
    -                    "size": 5
    -                  },
    -                  "TIME_OUT_EN": {
    -                    "description": "reg_time_out_en",
    -                    "offset": 5,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "SLAVE_ADDR": {
    -              "description": "I2C_SLAVE_ADDR_REG",
    -              "offset": 16,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SLAVE_ADDR": {
    -                    "description": "reg_slave_addr",
    -                    "offset": 0,
    -                    "size": 15
    -                  },
    -                  "ADDR_10BIT_EN": {
    -                    "description": "reg_addr_10bit_en",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "FIFO_ST": {
    -              "description": "I2C_FIFO_ST_REG",
    -              "offset": 20,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RXFIFO_RADDR": {
    -                    "description": "reg_rxfifo_raddr",
    -                    "offset": 0,
    -                    "size": 5,
    -                    "access": "read-only"
    -                  },
    -                  "RXFIFO_WADDR": {
    -                    "description": "reg_rxfifo_waddr",
    -                    "offset": 5,
    -                    "size": 5,
    -                    "access": "read-only"
    -                  },
    -                  "TXFIFO_RADDR": {
    -                    "description": "reg_txfifo_raddr",
    -                    "offset": 10,
    -                    "size": 5,
    -                    "access": "read-only"
    -                  },
    -                  "TXFIFO_WADDR": {
    -                    "description": "reg_txfifo_waddr",
    -                    "offset": 15,
    -                    "size": 5,
    -                    "access": "read-only"
    -                  },
    -                  "SLAVE_RW_POINT": {
    -                    "description": "reg_slave_rw_point",
    -                    "offset": 22,
    -                    "size": 8,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "FIFO_CONF": {
    -              "description": "I2C_FIFO_CONF_REG",
    -              "offset": 24,
    -              "size": 32,
    -              "reset_value": 16523,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RXFIFO_WM_THRHD": {
    -                    "description": "reg_rxfifo_wm_thrhd",
    -                    "offset": 0,
    -                    "size": 5
    -                  },
    -                  "TXFIFO_WM_THRHD": {
    -                    "description": "reg_txfifo_wm_thrhd",
    -                    "offset": 5,
    -                    "size": 5
    -                  },
    -                  "NONFIFO_EN": {
    -                    "description": "reg_nonfifo_en",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "FIFO_ADDR_CFG_EN": {
    -                    "description": "reg_fifo_addr_cfg_en",
    -                    "offset": 11,
    -                    "size": 1
    -                  },
    -                  "RX_FIFO_RST": {
    -                    "description": "reg_rx_fifo_rst",
    -                    "offset": 12,
    -                    "size": 1
    -                  },
    -                  "TX_FIFO_RST": {
    -                    "description": "reg_tx_fifo_rst",
    -                    "offset": 13,
    -                    "size": 1
    -                  },
    -                  "FIFO_PRT_EN": {
    -                    "description": "reg_fifo_prt_en",
    -                    "offset": 14,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DATA": {
    -              "description": "I2C_FIFO_DATA_REG",
    -              "offset": 28,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "FIFO_RDATA": {
    -                    "description": "reg_fifo_rdata",
    -                    "offset": 0,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "INT_RAW": {
    -              "description": "I2C_INT_RAW_REG",
    -              "offset": 32,
    -              "size": 32,
    -              "reset_value": 2,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RXFIFO_WM_INT_RAW": {
    -                    "description": "reg_rxfifo_wm_int_raw",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TXFIFO_WM_INT_RAW": {
    -                    "description": "reg_txfifo_wm_int_raw",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RXFIFO_OVF_INT_RAW": {
    -                    "description": "reg_rxfifo_ovf_int_raw",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "END_DETECT_INT_RAW": {
    -                    "description": "reg_end_detect_int_raw",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "BYTE_TRANS_DONE_INT_RAW": {
    -                    "description": "reg_byte_trans_done_int_raw",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "ARBITRATION_LOST_INT_RAW": {
    -                    "description": "reg_arbitration_lost_int_raw",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "MST_TXFIFO_UDF_INT_RAW": {
    -                    "description": "reg_mst_txfifo_udf_int_raw",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TRANS_COMPLETE_INT_RAW": {
    -                    "description": "reg_trans_complete_int_raw",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TIME_OUT_INT_RAW": {
    -                    "description": "reg_time_out_int_raw",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TRANS_START_INT_RAW": {
    -                    "description": "reg_trans_start_int_raw",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "NACK_INT_RAW": {
    -                    "description": "reg_nack_int_raw",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TXFIFO_OVF_INT_RAW": {
    -                    "description": "reg_txfifo_ovf_int_raw",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RXFIFO_UDF_INT_RAW": {
    -                    "description": "reg_rxfifo_udf_int_raw",
    -                    "offset": 12,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SCL_ST_TO_INT_RAW": {
    -                    "description": "reg_scl_st_to_int_raw",
    -                    "offset": 13,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SCL_MAIN_ST_TO_INT_RAW": {
    -                    "description": "reg_scl_main_st_to_int_raw",
    -                    "offset": 14,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DET_START_INT_RAW": {
    -                    "description": "reg_det_start_int_raw",
    -                    "offset": 15,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SLAVE_STRETCH_INT_RAW": {
    -                    "description": "reg_slave_stretch_int_raw",
    -                    "offset": 16,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "GENERAL_CALL_INT_RAW": {
    -                    "description": "reg_general_call_int_raw",
    -                    "offset": 17,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_CLR": {
    -              "description": "I2C_INT_CLR_REG",
    -              "offset": 36,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RXFIFO_WM_INT_CLR": {
    -                    "description": "reg_rxfifo_wm_int_clr",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "TXFIFO_WM_INT_CLR": {
    -                    "description": "reg_txfifo_wm_int_clr",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RXFIFO_OVF_INT_CLR": {
    -                    "description": "reg_rxfifo_ovf_int_clr",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "END_DETECT_INT_CLR": {
    -                    "description": "reg_end_detect_int_clr",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "BYTE_TRANS_DONE_INT_CLR": {
    -                    "description": "reg_byte_trans_done_int_clr",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "ARBITRATION_LOST_INT_CLR": {
    -                    "description": "reg_arbitration_lost_int_clr",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "MST_TXFIFO_UDF_INT_CLR": {
    -                    "description": "reg_mst_txfifo_udf_int_clr",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "TRANS_COMPLETE_INT_CLR": {
    -                    "description": "reg_trans_complete_int_clr",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "TIME_OUT_INT_CLR": {
    -                    "description": "reg_time_out_int_clr",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "TRANS_START_INT_CLR": {
    -                    "description": "reg_trans_start_int_clr",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "NACK_INT_CLR": {
    -                    "description": "reg_nack_int_clr",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "TXFIFO_OVF_INT_CLR": {
    -                    "description": "reg_txfifo_ovf_int_clr",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RXFIFO_UDF_INT_CLR": {
    -                    "description": "reg_rxfifo_udf_int_clr",
    -                    "offset": 12,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SCL_ST_TO_INT_CLR": {
    -                    "description": "reg_scl_st_to_int_clr",
    -                    "offset": 13,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SCL_MAIN_ST_TO_INT_CLR": {
    -                    "description": "reg_scl_main_st_to_int_clr",
    -                    "offset": 14,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "DET_START_INT_CLR": {
    -                    "description": "reg_det_start_int_clr",
    -                    "offset": 15,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SLAVE_STRETCH_INT_CLR": {
    -                    "description": "reg_slave_stretch_int_clr",
    -                    "offset": 16,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "GENERAL_CALL_INT_CLR": {
    -                    "description": "reg_general_call_int_clr",
    -                    "offset": 17,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ENA": {
    -              "description": "I2C_INT_ENA_REG",
    -              "offset": 40,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RXFIFO_WM_INT_ENA": {
    -                    "description": "reg_rxfifo_wm_int_ena",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "TXFIFO_WM_INT_ENA": {
    -                    "description": "reg_txfifo_wm_int_ena",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "RXFIFO_OVF_INT_ENA": {
    -                    "description": "reg_rxfifo_ovf_int_ena",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "END_DETECT_INT_ENA": {
    -                    "description": "reg_end_detect_int_ena",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "BYTE_TRANS_DONE_INT_ENA": {
    -                    "description": "reg_byte_trans_done_int_ena",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "ARBITRATION_LOST_INT_ENA": {
    -                    "description": "reg_arbitration_lost_int_ena",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "MST_TXFIFO_UDF_INT_ENA": {
    -                    "description": "reg_mst_txfifo_udf_int_ena",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "TRANS_COMPLETE_INT_ENA": {
    -                    "description": "reg_trans_complete_int_ena",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "TIME_OUT_INT_ENA": {
    -                    "description": "reg_time_out_int_ena",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "TRANS_START_INT_ENA": {
    -                    "description": "reg_trans_start_int_ena",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "NACK_INT_ENA": {
    -                    "description": "reg_nack_int_ena",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "TXFIFO_OVF_INT_ENA": {
    -                    "description": "reg_txfifo_ovf_int_ena",
    -                    "offset": 11,
    -                    "size": 1
    -                  },
    -                  "RXFIFO_UDF_INT_ENA": {
    -                    "description": "reg_rxfifo_udf_int_ena",
    -                    "offset": 12,
    -                    "size": 1
    -                  },
    -                  "SCL_ST_TO_INT_ENA": {
    -                    "description": "reg_scl_st_to_int_ena",
    -                    "offset": 13,
    -                    "size": 1
    -                  },
    -                  "SCL_MAIN_ST_TO_INT_ENA": {
    -                    "description": "reg_scl_main_st_to_int_ena",
    -                    "offset": 14,
    -                    "size": 1
    -                  },
    -                  "DET_START_INT_ENA": {
    -                    "description": "reg_det_start_int_ena",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "SLAVE_STRETCH_INT_ENA": {
    -                    "description": "reg_slave_stretch_int_ena",
    -                    "offset": 16,
    -                    "size": 1
    -                  },
    -                  "GENERAL_CALL_INT_ENA": {
    -                    "description": "reg_general_call_int_ena",
    -                    "offset": 17,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "INT_STATUS": {
    -              "description": "I2C_INT_STATUS_REG",
    -              "offset": 44,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RXFIFO_WM_INT_ST": {
    -                    "description": "reg_rxfifo_wm_int_st",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TXFIFO_WM_INT_ST": {
    -                    "description": "reg_txfifo_wm_int_st",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RXFIFO_OVF_INT_ST": {
    -                    "description": "reg_rxfifo_ovf_int_st",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "END_DETECT_INT_ST": {
    -                    "description": "reg_end_detect_int_st",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "BYTE_TRANS_DONE_INT_ST": {
    -                    "description": "reg_byte_trans_done_int_st",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "ARBITRATION_LOST_INT_ST": {
    -                    "description": "reg_arbitration_lost_int_st",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "MST_TXFIFO_UDF_INT_ST": {
    -                    "description": "reg_mst_txfifo_udf_int_st",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TRANS_COMPLETE_INT_ST": {
    -                    "description": "reg_trans_complete_int_st",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TIME_OUT_INT_ST": {
    -                    "description": "reg_time_out_int_st",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TRANS_START_INT_ST": {
    -                    "description": "reg_trans_start_int_st",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "NACK_INT_ST": {
    -                    "description": "reg_nack_int_st",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TXFIFO_OVF_INT_ST": {
    -                    "description": "reg_txfifo_ovf_int_st",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RXFIFO_UDF_INT_ST": {
    -                    "description": "reg_rxfifo_udf_int_st",
    -                    "offset": 12,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SCL_ST_TO_INT_ST": {
    -                    "description": "reg_scl_st_to_int_st",
    -                    "offset": 13,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SCL_MAIN_ST_TO_INT_ST": {
    -                    "description": "reg_scl_main_st_to_int_st",
    -                    "offset": 14,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DET_START_INT_ST": {
    -                    "description": "reg_det_start_int_st",
    -                    "offset": 15,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SLAVE_STRETCH_INT_ST": {
    -                    "description": "reg_slave_stretch_int_st",
    -                    "offset": 16,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "GENERAL_CALL_INT_ST": {
    -                    "description": "reg_general_call_int_st",
    -                    "offset": 17,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "SDA_HOLD": {
    -              "description": "I2C_SDA_HOLD_REG",
    -              "offset": 48,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIME": {
    -                    "description": "reg_sda_hold_time",
    -                    "offset": 0,
    -                    "size": 9
    -                  }
    -                }
    -              }
    -            },
    -            "SDA_SAMPLE": {
    -              "description": "I2C_SDA_SAMPLE_REG",
    -              "offset": 52,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIME": {
    -                    "description": "reg_sda_sample_time",
    -                    "offset": 0,
    -                    "size": 9
    -                  }
    -                }
    -              }
    -            },
    -            "SCL_HIGH_PERIOD": {
    -              "description": "I2C_SCL_HIGH_PERIOD_REG",
    -              "offset": 56,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SCL_HIGH_PERIOD": {
    -                    "description": "reg_scl_high_period",
    -                    "offset": 0,
    -                    "size": 9
    -                  },
    -                  "SCL_WAIT_HIGH_PERIOD": {
    -                    "description": "reg_scl_wait_high_period",
    -                    "offset": 9,
    -                    "size": 7
    -                  }
    -                }
    -              }
    -            },
    -            "SCL_START_HOLD": {
    -              "description": "I2C_SCL_START_HOLD_REG",
    -              "offset": 64,
    -              "size": 32,
    -              "reset_value": 8,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIME": {
    -                    "description": "reg_scl_start_hold_time",
    -                    "offset": 0,
    -                    "size": 9
    -                  }
    -                }
    -              }
    -            },
    -            "SCL_RSTART_SETUP": {
    -              "description": "I2C_SCL_RSTART_SETUP_REG",
    -              "offset": 68,
    -              "size": 32,
    -              "reset_value": 8,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIME": {
    -                    "description": "reg_scl_rstart_setup_time",
    -                    "offset": 0,
    -                    "size": 9
    -                  }
    -                }
    -              }
    -            },
    -            "SCL_STOP_HOLD": {
    -              "description": "I2C_SCL_STOP_HOLD_REG",
    -              "offset": 72,
    -              "size": 32,
    -              "reset_value": 8,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIME": {
    -                    "description": "reg_scl_stop_hold_time",
    -                    "offset": 0,
    -                    "size": 9
    -                  }
    -                }
    -              }
    -            },
    -            "SCL_STOP_SETUP": {
    -              "description": "I2C_SCL_STOP_SETUP_REG",
    -              "offset": 76,
    -              "size": 32,
    -              "reset_value": 8,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIME": {
    -                    "description": "reg_scl_stop_setup_time",
    -                    "offset": 0,
    -                    "size": 9
    -                  }
    -                }
    -              }
    -            },
    -            "FILTER_CFG": {
    -              "description": "I2C_FILTER_CFG_REG",
    -              "offset": 80,
    -              "size": 32,
    -              "reset_value": 768,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SCL_FILTER_THRES": {
    -                    "description": "reg_scl_filter_thres",
    -                    "offset": 0,
    -                    "size": 4
    -                  },
    -                  "SDA_FILTER_THRES": {
    -                    "description": "reg_sda_filter_thres",
    -                    "offset": 4,
    -                    "size": 4
    -                  },
    -                  "SCL_FILTER_EN": {
    -                    "description": "reg_scl_filter_en",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "SDA_FILTER_EN": {
    -                    "description": "reg_sda_filter_en",
    -                    "offset": 9,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CLK_CONF": {
    -              "description": "I2C_CLK_CONF_REG",
    -              "offset": 84,
    -              "size": 32,
    -              "reset_value": 2097152,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SCLK_DIV_NUM": {
    -                    "description": "reg_sclk_div_num",
    -                    "offset": 0,
    -                    "size": 8
    -                  },
    -                  "SCLK_DIV_A": {
    -                    "description": "reg_sclk_div_a",
    -                    "offset": 8,
    -                    "size": 6
    -                  },
    -                  "SCLK_DIV_B": {
    -                    "description": "reg_sclk_div_b",
    -                    "offset": 14,
    -                    "size": 6
    -                  },
    -                  "SCLK_SEL": {
    -                    "description": "reg_sclk_sel",
    -                    "offset": 20,
    -                    "size": 1
    -                  },
    -                  "SCLK_ACTIVE": {
    -                    "description": "reg_sclk_active",
    -                    "offset": 21,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "COMD": {
    -              "description": "I2C_COMD%s_REG",
    -              "offset": 88,
    -              "size": 32,
    -              "count": 8,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "COMMAND": {
    -                    "description": "reg_command",
    -                    "offset": 0,
    -                    "size": 14
    -                  },
    -                  "COMMAND_DONE": {
    -                    "description": "reg_command_done",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "SCL_ST_TIME_OUT": {
    -              "description": "I2C_SCL_ST_TIME_OUT_REG",
    -              "offset": 120,
    -              "size": 32,
    -              "reset_value": 16,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SCL_ST_TO_I2C": {
    -                    "description": "reg_scl_st_to_regno more than 23",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "SCL_MAIN_ST_TIME_OUT": {
    -              "description": "I2C_SCL_MAIN_ST_TIME_OUT_REG",
    -              "offset": 124,
    -              "size": 32,
    -              "reset_value": 16,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SCL_MAIN_ST_TO_I2C": {
    -                    "description": "reg_scl_main_st_to_regno more than 23",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "SCL_SP_CONF": {
    -              "description": "I2C_SCL_SP_CONF_REG",
    -              "offset": 128,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SCL_RST_SLV_EN": {
    -                    "description": "reg_scl_rst_slv_en",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "SCL_RST_SLV_NUM": {
    -                    "description": "reg_scl_rst_slv_num",
    -                    "offset": 1,
    -                    "size": 5
    -                  },
    -                  "SCL_PD_EN": {
    -                    "description": "reg_scl_pd_en",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "SDA_PD_EN": {
    -                    "description": "reg_sda_pd_en",
    -                    "offset": 7,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "SCL_STRETCH_CONF": {
    -              "description": "I2C_SCL_STRETCH_CONF_REG",
    -              "offset": 132,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "STRETCH_PROTECT_NUM": {
    -                    "description": "reg_stretch_protect_num",
    -                    "offset": 0,
    -                    "size": 10
    -                  },
    -                  "SLAVE_SCL_STRETCH_EN": {
    -                    "description": "reg_slave_scl_stretch_en",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "SLAVE_SCL_STRETCH_CLR": {
    -                    "description": "reg_slave_scl_stretch_clr",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SLAVE_BYTE_ACK_CTL_EN": {
    -                    "description": "reg_slave_byte_ack_ctl_en",
    -                    "offset": 12,
    -                    "size": 1
    -                  },
    -                  "SLAVE_BYTE_ACK_LVL": {
    -                    "description": "reg_slave_byte_ack_lvl",
    -                    "offset": 13,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DATE": {
    -              "description": "I2C_DATE_REG",
    -              "offset": 248,
    -              "size": 32,
    -              "reset_value": 537330177,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATE": {
    -                    "description": "reg_date",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "TXFIFO_START_ADDR": {
    -              "description": "I2C_TXFIFO_START_ADDR_REG",
    -              "offset": 256,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TXFIFO_START_ADDR": {
    -                    "description": "reg_txfifo_start_addr.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RXFIFO_START_ADDR": {
    -              "description": "I2C_RXFIFO_START_ADDR_REG",
    -              "offset": 384,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RXFIFO_START_ADDR": {
    -                    "description": "reg_rxfifo_start_addr.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "I2S": {
    -        "description": "I2S (Inter-IC Sound) Controller",
    -        "children": {
    -          "registers": {
    -            "INT_RAW": {
    -              "description": "I2S interrupt raw register, valid in level.",
    -              "offset": 12,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_DONE_INT_RAW": {
    -                    "description": "The raw interrupt status bit  for the i2s_rx_done_int interrupt",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TX_DONE_INT_RAW": {
    -                    "description": "The raw interrupt status bit  for the i2s_tx_done_int interrupt",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RX_HUNG_INT_RAW": {
    -                    "description": "The raw interrupt status bit  for the i2s_rx_hung_int interrupt",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TX_HUNG_INT_RAW": {
    -                    "description": "The raw interrupt status bit  for the i2s_tx_hung_int interrupt",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ST": {
    -              "description": "I2S interrupt status register.",
    -              "offset": 16,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_DONE_INT_ST": {
    -                    "description": "The masked interrupt status bit  for the i2s_rx_done_int interrupt",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TX_DONE_INT_ST": {
    -                    "description": "The masked interrupt status bit  for the i2s_tx_done_int interrupt",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RX_HUNG_INT_ST": {
    -                    "description": "The masked interrupt status bit  for the i2s_rx_hung_int interrupt",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TX_HUNG_INT_ST": {
    -                    "description": "The masked interrupt status bit  for the i2s_tx_hung_int interrupt",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ENA": {
    -              "description": "I2S interrupt enable register.",
    -              "offset": 20,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_DONE_INT_ENA": {
    -                    "description": "The interrupt enable bit  for the i2s_rx_done_int interrupt",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "TX_DONE_INT_ENA": {
    -                    "description": "The interrupt enable bit  for the i2s_tx_done_int interrupt",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "RX_HUNG_INT_ENA": {
    -                    "description": "The interrupt enable bit  for the i2s_rx_hung_int interrupt",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "TX_HUNG_INT_ENA": {
    -                    "description": "The interrupt enable bit  for the i2s_tx_hung_int interrupt",
    -                    "offset": 3,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "INT_CLR": {
    -              "description": "I2S interrupt clear register.",
    -              "offset": 24,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_DONE_INT_CLR": {
    -                    "description": "Set this bit to clear the i2s_rx_done_int interrupt",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "TX_DONE_INT_CLR": {
    -                    "description": "Set this bit to clear the i2s_tx_done_int interrupt",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RX_HUNG_INT_CLR": {
    -                    "description": "Set this bit to clear the i2s_rx_hung_int interrupt",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "TX_HUNG_INT_CLR": {
    -                    "description": "Set this bit to clear the i2s_tx_hung_int interrupt",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RX_CONF": {
    -              "description": "I2S RX configure register",
    -              "offset": 32,
    -              "size": 32,
    -              "reset_value": 38400,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_RESET": {
    -                    "description": "Set this bit to reset receiver",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RX_FIFO_RESET": {
    -                    "description": "Set this bit to reset Rx AFIFO",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RX_START": {
    -                    "description": "Set this bit to start receiving data",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "RX_SLAVE_MOD": {
    -                    "description": "Set this bit to enable slave receiver mode",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "RX_MONO": {
    -                    "description": "Set this bit to enable receiver  in mono mode",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "RX_BIG_ENDIAN": {
    -                    "description": "I2S Rx byte endian, 1: low addr value to high addr. 0: low addr with low addr value.",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "RX_UPDATE": {
    -                    "description": "Set 1 to update I2S RX registers from APB clock domain to I2S RX clock domain. This bit will be cleared by hardware after update register done.",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "RX_MONO_FST_VLD": {
    -                    "description": "1: The first channel data value is valid in I2S RX mono mode.   0: The second channel data value is valid in I2S RX mono mode.",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "RX_PCM_CONF": {
    -                    "description": "I2S RX compress/decompress configuration bit. & 0 (atol): A-Law decompress, 1 (ltoa) : A-Law compress, 2 (utol) : u-Law decompress, 3 (ltou) : u-Law compress. &",
    -                    "offset": 10,
    -                    "size": 2
    -                  },
    -                  "RX_PCM_BYPASS": {
    -                    "description": "Set this bit to bypass Compress/Decompress module for received data.",
    -                    "offset": 12,
    -                    "size": 1
    -                  },
    -                  "RX_STOP_MODE": {
    -                    "description": "0  : I2S Rx only stop when reg_rx_start is cleared.   1: Stop when reg_rx_start is 0 or in_suc_eof is 1.   2:  Stop I2S RX when reg_rx_start is 0 or RX FIFO is full.",
    -                    "offset": 13,
    -                    "size": 2
    -                  },
    -                  "RX_LEFT_ALIGN": {
    -                    "description": "1: I2S RX left alignment mode. 0: I2S RX right alignment mode.",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "RX_24_FILL_EN": {
    -                    "description": "1: store 24 channel bits to 32 bits. 0:store 24 channel bits to 24 bits.",
    -                    "offset": 16,
    -                    "size": 1
    -                  },
    -                  "RX_WS_IDLE_POL": {
    -                    "description": "0: WS should be 0 when receiving left channel data, and WS is 1in right channel.  1: WS should be 1 when receiving left channel data, and WS is 0in right channel.",
    -                    "offset": 17,
    -                    "size": 1
    -                  },
    -                  "RX_BIT_ORDER": {
    -                    "description": "I2S Rx bit endian. 1:small endian, the LSB is received first. 0:big endian, the MSB is received first.",
    -                    "offset": 18,
    -                    "size": 1
    -                  },
    -                  "RX_TDM_EN": {
    -                    "description": "1: Enable I2S TDM Rx mode . 0: Disable.",
    -                    "offset": 19,
    -                    "size": 1
    -                  },
    -                  "RX_PDM_EN": {
    -                    "description": "1: Enable I2S PDM Rx mode . 0: Disable.",
    -                    "offset": 20,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "TX_CONF": {
    -              "description": "I2S TX configure register",
    -              "offset": 36,
    -              "size": 32,
    -              "reset_value": 45568,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_RESET": {
    -                    "description": "Set this bit to reset transmitter",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "TX_FIFO_RESET": {
    -                    "description": "Set this bit to reset Tx AFIFO",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "TX_START": {
    -                    "description": "Set this bit to start transmitting data",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "TX_SLAVE_MOD": {
    -                    "description": "Set this bit to enable slave transmitter mode",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "TX_MONO": {
    -                    "description": "Set this bit to enable transmitter in mono mode",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "TX_CHAN_EQUAL": {
    -                    "description": "1: The value of Left channel data is equal to the value of right channel data in I2S TX mono mode or TDM channel select mode. 0: The invalid channel data is reg_i2s_single_data in I2S TX mono mode or TDM channel select mode.",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "TX_BIG_ENDIAN": {
    -                    "description": "I2S Tx byte endian, 1: low addr value to high addr.  0: low addr with low addr value.",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "TX_UPDATE": {
    -                    "description": "Set 1 to update I2S TX registers from APB clock domain to I2S TX clock domain. This bit will be cleared by hardware after update register done.",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "TX_MONO_FST_VLD": {
    -                    "description": "1: The first channel data value is valid in I2S TX mono mode.   0: The second channel data value is valid in I2S TX mono mode.",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "TX_PCM_CONF": {
    -                    "description": "I2S TX compress/decompress configuration bit. & 0 (atol): A-Law decompress, 1 (ltoa) : A-Law compress, 2 (utol) : u-Law decompress, 3 (ltou) : u-Law compress. &",
    -                    "offset": 10,
    -                    "size": 2
    -                  },
    -                  "TX_PCM_BYPASS": {
    -                    "description": "Set this bit to bypass  Compress/Decompress module for transmitted data.",
    -                    "offset": 12,
    -                    "size": 1
    -                  },
    -                  "TX_STOP_EN": {
    -                    "description": "Set this bit to stop disable output BCK signal and WS signal when tx FIFO is emtpy",
    -                    "offset": 13,
    -                    "size": 1
    -                  },
    -                  "TX_LEFT_ALIGN": {
    -                    "description": "1: I2S TX left alignment mode. 0: I2S TX right alignment mode.",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "TX_24_FILL_EN": {
    -                    "description": "1: Sent 32 bits in 24 channel bits mode. 0: Sent 24 bits in 24 channel bits mode",
    -                    "offset": 16,
    -                    "size": 1
    -                  },
    -                  "TX_WS_IDLE_POL": {
    -                    "description": "0: WS should be 0 when sending left channel data, and WS is 1in right channel.  1: WS should be 1 when sending left channel data, and WS is 0in right channel.",
    -                    "offset": 17,
    -                    "size": 1
    -                  },
    -                  "TX_BIT_ORDER": {
    -                    "description": "I2S Tx bit endian. 1:small endian, the LSB is sent first. 0:big endian, the MSB is sent first.",
    -                    "offset": 18,
    -                    "size": 1
    -                  },
    -                  "TX_TDM_EN": {
    -                    "description": "1: Enable I2S TDM Tx mode . 0: Disable.",
    -                    "offset": 19,
    -                    "size": 1
    -                  },
    -                  "TX_PDM_EN": {
    -                    "description": "1: Enable I2S PDM Tx mode . 0: Disable.",
    -                    "offset": 20,
    -                    "size": 1
    -                  },
    -                  "TX_CHAN_MOD": {
    -                    "description": "I2S transmitter channel mode configuration bits.",
    -                    "offset": 24,
    -                    "size": 3
    -                  },
    -                  "SIG_LOOPBACK": {
    -                    "description": "Enable signal loop back mode with transmitter module and receiver module sharing the same WS and BCK signals.",
    -                    "offset": 27,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "RX_CONF1": {
    -              "description": "I2S RX configure register 1",
    -              "offset": 40,
    -              "size": 32,
    -              "reset_value": 792584960,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_TDM_WS_WIDTH": {
    -                    "description": "The width of rx_ws_out in TDM mode is (I2S_RX_TDM_WS_WIDTH[6:0] +1) * T_bck",
    -                    "offset": 0,
    -                    "size": 7
    -                  },
    -                  "RX_BCK_DIV_NUM": {
    -                    "description": "Bit clock configuration bits in receiver mode.",
    -                    "offset": 7,
    -                    "size": 6
    -                  },
    -                  "RX_BITS_MOD": {
    -                    "description": "Set the bits to configure the valid data bit length of I2S receiver channel. 7: all the valid channel data is in 8-bit-mode. 15: all the valid channel data is in 16-bit-mode. 23: all the valid channel data is in 24-bit-mode. 31:all the valid channel data is in 32-bit-mode.",
    -                    "offset": 13,
    -                    "size": 5
    -                  },
    -                  "RX_HALF_SAMPLE_BITS": {
    -                    "description": "I2S Rx half sample bits -1.",
    -                    "offset": 18,
    -                    "size": 6
    -                  },
    -                  "RX_TDM_CHAN_BITS": {
    -                    "description": "The Rx bit number for each channel minus 1in TDM mode.",
    -                    "offset": 24,
    -                    "size": 5
    -                  },
    -                  "RX_MSB_SHIFT": {
    -                    "description": "Set this bit to enable receiver in Phillips standard mode",
    -                    "offset": 29,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "TX_CONF1": {
    -              "description": "I2S TX configure register 1",
    -              "offset": 44,
    -              "size": 32,
    -              "reset_value": 1866326784,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_TDM_WS_WIDTH": {
    -                    "description": "The width of tx_ws_out in TDM mode is (I2S_TX_TDM_WS_WIDTH[6:0] +1) * T_bck",
    -                    "offset": 0,
    -                    "size": 7
    -                  },
    -                  "TX_BCK_DIV_NUM": {
    -                    "description": "Bit clock configuration bits in transmitter mode.",
    -                    "offset": 7,
    -                    "size": 6
    -                  },
    -                  "TX_BITS_MOD": {
    -                    "description": "Set the bits to configure the valid data bit length of I2S transmitter channel. 7: all the valid channel data is in 8-bit-mode. 15: all the valid channel data is in 16-bit-mode. 23: all the valid channel data is in 24-bit-mode. 31:all the valid channel data is in 32-bit-mode.",
    -                    "offset": 13,
    -                    "size": 5
    -                  },
    -                  "TX_HALF_SAMPLE_BITS": {
    -                    "description": "I2S Tx half sample bits -1.",
    -                    "offset": 18,
    -                    "size": 6
    -                  },
    -                  "TX_TDM_CHAN_BITS": {
    -                    "description": "The Tx bit number for each channel minus 1in TDM mode.",
    -                    "offset": 24,
    -                    "size": 5
    -                  },
    -                  "TX_MSB_SHIFT": {
    -                    "description": "Set this bit to enable transmitter in Phillips standard mode",
    -                    "offset": 29,
    -                    "size": 1
    -                  },
    -                  "TX_BCK_NO_DLY": {
    -                    "description": "1: BCK is not delayed to generate pos/neg edge in master mode. 0: BCK is delayed to generate pos/neg edge in master mode.",
    -                    "offset": 30,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "RX_CLKM_CONF": {
    -              "description": "I2S RX clock configure register",
    -              "offset": 48,
    -              "size": 32,
    -              "reset_value": 2,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_CLKM_DIV_NUM": {
    -                    "description": "Integral I2S clock divider value",
    -                    "offset": 0,
    -                    "size": 8
    -                  },
    -                  "RX_CLK_ACTIVE": {
    -                    "description": "I2S Rx module clock enable signal.",
    -                    "offset": 26,
    -                    "size": 1
    -                  },
    -                  "RX_CLK_SEL": {
    -                    "description": "Select I2S Rx module source clock. 0: no clock. 1: APLL. 2: CLK160. 3: I2S_MCLK_in.",
    -                    "offset": 27,
    -                    "size": 2
    -                  },
    -                  "MCLK_SEL": {
    -                    "description": "0: UseI2S Tx module clock as I2S_MCLK_OUT.  1: UseI2S Rx module clock as I2S_MCLK_OUT.",
    -                    "offset": 29,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "TX_CLKM_CONF": {
    -              "description": "I2S TX clock configure register",
    -              "offset": 52,
    -              "size": 32,
    -              "reset_value": 2,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_CLKM_DIV_NUM": {
    -                    "description": "Integral I2S TX clock divider value. f_I2S_CLK = f_I2S_CLK_S/(N+b/a). There will be (a-b) * n-div and b * (n+1)-div.  So the average combination will be:  for b <= a/2, z * [x * n-div + (n+1)-div] + y * n-div. For b > a/2, z * [n-div + x * (n+1)-div] + y * (n+1)-div.",
    -                    "offset": 0,
    -                    "size": 8
    -                  },
    -                  "TX_CLK_ACTIVE": {
    -                    "description": "I2S Tx module clock enable signal.",
    -                    "offset": 26,
    -                    "size": 1
    -                  },
    -                  "TX_CLK_SEL": {
    -                    "description": "Select I2S Tx module source clock. 0: XTAL clock. 1: APLL. 2: CLK160. 3: I2S_MCLK_in.",
    -                    "offset": 27,
    -                    "size": 2
    -                  },
    -                  "CLK_EN": {
    -                    "description": "Set this bit to enable clk gate",
    -                    "offset": 29,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "RX_CLKM_DIV_CONF": {
    -              "description": "I2S RX module clock divider configure register",
    -              "offset": 56,
    -              "size": 32,
    -              "reset_value": 512,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_CLKM_DIV_Z": {
    -                    "description": "For b <= a/2, the value of I2S_RX_CLKM_DIV_Z is b. For b > a/2, the value of I2S_RX_CLKM_DIV_Z is (a-b).",
    -                    "offset": 0,
    -                    "size": 9
    -                  },
    -                  "RX_CLKM_DIV_Y": {
    -                    "description": "For b <= a/2, the value of I2S_RX_CLKM_DIV_Y is (a%b) . For b > a/2, the value of I2S_RX_CLKM_DIV_Y is (a%(a-b)).",
    -                    "offset": 9,
    -                    "size": 9
    -                  },
    -                  "RX_CLKM_DIV_X": {
    -                    "description": "For b <= a/2, the value of I2S_RX_CLKM_DIV_X is (a/b) - 1. For b > a/2, the value of I2S_RX_CLKM_DIV_X is (a/(a-b)) - 1.",
    -                    "offset": 18,
    -                    "size": 9
    -                  },
    -                  "RX_CLKM_DIV_YN1": {
    -                    "description": "For b <= a/2, the value of I2S_RX_CLKM_DIV_YN1 is 0 . For b > a/2, the value of I2S_RX_CLKM_DIV_YN1 is 1.",
    -                    "offset": 27,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "TX_CLKM_DIV_CONF": {
    -              "description": "I2S TX module clock divider configure register",
    -              "offset": 60,
    -              "size": 32,
    -              "reset_value": 512,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_CLKM_DIV_Z": {
    -                    "description": "For b <= a/2, the value of I2S_TX_CLKM_DIV_Z is b. For b > a/2, the value of I2S_TX_CLKM_DIV_Z is (a-b).",
    -                    "offset": 0,
    -                    "size": 9
    -                  },
    -                  "TX_CLKM_DIV_Y": {
    -                    "description": "For b <= a/2, the value of I2S_TX_CLKM_DIV_Y is (a%b) . For b > a/2, the value of I2S_TX_CLKM_DIV_Y is (a%(a-b)).",
    -                    "offset": 9,
    -                    "size": 9
    -                  },
    -                  "TX_CLKM_DIV_X": {
    -                    "description": "For b <= a/2, the value of I2S_TX_CLKM_DIV_X is (a/b) - 1. For b > a/2, the value of I2S_TX_CLKM_DIV_X is (a/(a-b)) - 1.",
    -                    "offset": 18,
    -                    "size": 9
    -                  },
    -                  "TX_CLKM_DIV_YN1": {
    -                    "description": "For b <= a/2, the value of I2S_TX_CLKM_DIV_YN1 is 0 . For b > a/2, the value of I2S_TX_CLKM_DIV_YN1 is 1.",
    -                    "offset": 27,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "TX_PCM2PDM_CONF": {
    -              "description": "I2S TX PCM2PDM configuration register",
    -              "offset": 64,
    -              "size": 32,
    -              "reset_value": 4890628,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_PDM_HP_BYPASS": {
    -                    "description": "I2S TX PDM bypass hp filter or not. The option has been removed.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "TX_PDM_SINC_OSR2": {
    -                    "description": "I2S TX PDM OSR2 value",
    -                    "offset": 1,
    -                    "size": 4
    -                  },
    -                  "TX_PDM_PRESCALE": {
    -                    "description": "I2S TX PDM prescale for sigmadelta",
    -                    "offset": 5,
    -                    "size": 8
    -                  },
    -                  "TX_PDM_HP_IN_SHIFT": {
    -                    "description": "I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4",
    -                    "offset": 13,
    -                    "size": 2
    -                  },
    -                  "TX_PDM_LP_IN_SHIFT": {
    -                    "description": "I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4",
    -                    "offset": 15,
    -                    "size": 2
    -                  },
    -                  "TX_PDM_SINC_IN_SHIFT": {
    -                    "description": "I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4",
    -                    "offset": 17,
    -                    "size": 2
    -                  },
    -                  "TX_PDM_SIGMADELTA_IN_SHIFT": {
    -                    "description": "I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4",
    -                    "offset": 19,
    -                    "size": 2
    -                  },
    -                  "TX_PDM_SIGMADELTA_DITHER2": {
    -                    "description": "I2S TX PDM sigmadelta dither2 value",
    -                    "offset": 21,
    -                    "size": 1
    -                  },
    -                  "TX_PDM_SIGMADELTA_DITHER": {
    -                    "description": "I2S TX PDM sigmadelta dither value",
    -                    "offset": 22,
    -                    "size": 1
    -                  },
    -                  "TX_PDM_DAC_2OUT_EN": {
    -                    "description": "I2S TX PDM dac mode enable",
    -                    "offset": 23,
    -                    "size": 1
    -                  },
    -                  "TX_PDM_DAC_MODE_EN": {
    -                    "description": "I2S TX PDM dac 2channel enable",
    -                    "offset": 24,
    -                    "size": 1
    -                  },
    -                  "PCM2PDM_CONV_EN": {
    -                    "description": "I2S TX PDM Converter enable",
    -                    "offset": 25,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "TX_PCM2PDM_CONF1": {
    -              "description": "I2S TX PCM2PDM configuration register",
    -              "offset": 68,
    -              "size": 32,
    -              "reset_value": 66552768,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_PDM_FP": {
    -                    "description": "I2S TX PDM Fp",
    -                    "offset": 0,
    -                    "size": 10
    -                  },
    -                  "TX_PDM_FS": {
    -                    "description": "I2S TX PDM Fs",
    -                    "offset": 10,
    -                    "size": 10
    -                  },
    -                  "TX_IIR_HP_MULT12_5": {
    -                    "description": "The fourth parameter of PDM TX IIR_HP filter stage 2 is (504 + I2S_TX_IIR_HP_MULT12_5[2:0])",
    -                    "offset": 20,
    -                    "size": 3
    -                  },
    -                  "TX_IIR_HP_MULT12_0": {
    -                    "description": "The fourth parameter of PDM TX IIR_HP filter stage 1 is (504 + I2S_TX_IIR_HP_MULT12_0[2:0])",
    -                    "offset": 23,
    -                    "size": 3
    -                  }
    -                }
    -              }
    -            },
    -            "RX_TDM_CTRL": {
    -              "description": "I2S TX TDM mode control register",
    -              "offset": 80,
    -              "size": 32,
    -              "reset_value": 65535,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_TDM_PDM_CHAN0_EN": {
    -                    "description": "1: Enable the valid data input of I2S RX TDM or PDM channel 0. 0:  Disable, just input 0 in this channel.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "RX_TDM_PDM_CHAN1_EN": {
    -                    "description": "1: Enable the valid data input of I2S RX TDM or PDM channel 1. 0:  Disable, just input 0 in this channel.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "RX_TDM_PDM_CHAN2_EN": {
    -                    "description": "1: Enable the valid data input of I2S RX TDM or PDM channel 2. 0:  Disable, just input 0 in this channel.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "RX_TDM_PDM_CHAN3_EN": {
    -                    "description": "1: Enable the valid data input of I2S RX TDM or PDM channel 3. 0:  Disable, just input 0 in this channel.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "RX_TDM_PDM_CHAN4_EN": {
    -                    "description": "1: Enable the valid data input of I2S RX TDM or PDM channel 4. 0:  Disable, just input 0 in this channel.",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "RX_TDM_PDM_CHAN5_EN": {
    -                    "description": "1: Enable the valid data input of I2S RX TDM or PDM channel 5. 0:  Disable, just input 0 in this channel.",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "RX_TDM_PDM_CHAN6_EN": {
    -                    "description": "1: Enable the valid data input of I2S RX TDM or PDM channel 6. 0:  Disable, just input 0 in this channel.",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "RX_TDM_PDM_CHAN7_EN": {
    -                    "description": "1: Enable the valid data input of I2S RX TDM or PDM channel 7. 0:  Disable, just input 0 in this channel.",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "RX_TDM_CHAN8_EN": {
    -                    "description": "1: Enable the valid data input of I2S RX TDM channel 8. 0:  Disable, just input 0 in this channel.",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "RX_TDM_CHAN9_EN": {
    -                    "description": "1: Enable the valid data input of I2S RX TDM channel 9. 0:  Disable, just input 0 in this channel.",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "RX_TDM_CHAN10_EN": {
    -                    "description": "1: Enable the valid data input of I2S RX TDM channel 10. 0:  Disable, just input 0 in this channel.",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "RX_TDM_CHAN11_EN": {
    -                    "description": "1: Enable the valid data input of I2S RX TDM channel 11. 0:  Disable, just input 0 in this channel.",
    -                    "offset": 11,
    -                    "size": 1
    -                  },
    -                  "RX_TDM_CHAN12_EN": {
    -                    "description": "1: Enable the valid data input of I2S RX TDM channel 12. 0:  Disable, just input 0 in this channel.",
    -                    "offset": 12,
    -                    "size": 1
    -                  },
    -                  "RX_TDM_CHAN13_EN": {
    -                    "description": "1: Enable the valid data input of I2S RX TDM channel 13. 0:  Disable, just input 0 in this channel.",
    -                    "offset": 13,
    -                    "size": 1
    -                  },
    -                  "RX_TDM_CHAN14_EN": {
    -                    "description": "1: Enable the valid data input of I2S RX TDM channel 14. 0:  Disable, just input 0 in this channel.",
    -                    "offset": 14,
    -                    "size": 1
    -                  },
    -                  "RX_TDM_CHAN15_EN": {
    -                    "description": "1: Enable the valid data input of I2S RX TDM channel 15. 0:  Disable, just input 0 in this channel.",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "RX_TDM_TOT_CHAN_NUM": {
    -                    "description": "The total channel number of I2S TX TDM mode.",
    -                    "offset": 16,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "TX_TDM_CTRL": {
    -              "description": "I2S TX TDM mode control register",
    -              "offset": 84,
    -              "size": 32,
    -              "reset_value": 65535,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_TDM_CHAN0_EN": {
    -                    "description": "1: Enable the valid data output of I2S TX TDM channel 0. 0:  Disable, just output 0 in this channel.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "TX_TDM_CHAN1_EN": {
    -                    "description": "1: Enable the valid data output of I2S TX TDM channel 1. 0:  Disable, just output 0 in this channel.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "TX_TDM_CHAN2_EN": {
    -                    "description": "1: Enable the valid data output of I2S TX TDM channel 2. 0:  Disable, just output 0 in this channel.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "TX_TDM_CHAN3_EN": {
    -                    "description": "1: Enable the valid data output of I2S TX TDM channel 3. 0:  Disable, just output 0 in this channel.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "TX_TDM_CHAN4_EN": {
    -                    "description": "1: Enable the valid data output of I2S TX TDM channel 4. 0:  Disable, just output 0 in this channel.",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "TX_TDM_CHAN5_EN": {
    -                    "description": "1: Enable the valid data output of I2S TX TDM channel 5. 0:  Disable, just output 0 in this channel.",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "TX_TDM_CHAN6_EN": {
    -                    "description": "1: Enable the valid data output of I2S TX TDM channel 6. 0:  Disable, just output 0 in this channel.",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "TX_TDM_CHAN7_EN": {
    -                    "description": "1: Enable the valid data output of I2S TX TDM channel 7. 0:  Disable, just output 0 in this channel.",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "TX_TDM_CHAN8_EN": {
    -                    "description": "1: Enable the valid data output of I2S TX TDM channel 8. 0:  Disable, just output 0 in this channel.",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "TX_TDM_CHAN9_EN": {
    -                    "description": "1: Enable the valid data output of I2S TX TDM channel 9. 0:  Disable, just output 0 in this channel.",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "TX_TDM_CHAN10_EN": {
    -                    "description": "1: Enable the valid data output of I2S TX TDM channel 10. 0:  Disable, just output 0 in this channel.",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "TX_TDM_CHAN11_EN": {
    -                    "description": "1: Enable the valid data output of I2S TX TDM channel 11. 0:  Disable, just output 0 in this channel.",
    -                    "offset": 11,
    -                    "size": 1
    -                  },
    -                  "TX_TDM_CHAN12_EN": {
    -                    "description": "1: Enable the valid data output of I2S TX TDM channel 12. 0:  Disable, just output 0 in this channel.",
    -                    "offset": 12,
    -                    "size": 1
    -                  },
    -                  "TX_TDM_CHAN13_EN": {
    -                    "description": "1: Enable the valid data output of I2S TX TDM channel 13. 0:  Disable, just output 0 in this channel.",
    -                    "offset": 13,
    -                    "size": 1
    -                  },
    -                  "TX_TDM_CHAN14_EN": {
    -                    "description": "1: Enable the valid data output of I2S TX TDM channel 14. 0:  Disable, just output 0 in this channel.",
    -                    "offset": 14,
    -                    "size": 1
    -                  },
    -                  "TX_TDM_CHAN15_EN": {
    -                    "description": "1: Enable the valid data output of I2S TX TDM channel 15. 0:  Disable, just output 0 in this channel.",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "TX_TDM_TOT_CHAN_NUM": {
    -                    "description": "The total channel number of I2S TX TDM mode.",
    -                    "offset": 16,
    -                    "size": 4
    -                  },
    -                  "TX_TDM_SKIP_MSK_EN": {
    -                    "description": "When DMA TX buffer stores the data of (REG_TX_TDM_TOT_CHAN_NUM + 1)  channels, and only the data of the enabled channels is sent, then this bit should be set. Clear it when all the data stored in DMA TX buffer is for enabled channels.",
    -                    "offset": 20,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "RX_TIMING": {
    -              "description": "I2S RX timing control register",
    -              "offset": 88,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_SD_IN_DM": {
    -                    "description": "The delay mode of I2S Rx SD input signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "RX_WS_OUT_DM": {
    -                    "description": "The delay mode of I2S Rx WS output signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.",
    -                    "offset": 16,
    -                    "size": 2
    -                  },
    -                  "RX_BCK_OUT_DM": {
    -                    "description": "The delay mode of I2S Rx BCK output signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.",
    -                    "offset": 20,
    -                    "size": 2
    -                  },
    -                  "RX_WS_IN_DM": {
    -                    "description": "The delay mode of I2S Rx WS input signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.",
    -                    "offset": 24,
    -                    "size": 2
    -                  },
    -                  "RX_BCK_IN_DM": {
    -                    "description": "The delay mode of I2S Rx BCK input signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.",
    -                    "offset": 28,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "TX_TIMING": {
    -              "description": "I2S TX timing control register",
    -              "offset": 92,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_SD_OUT_DM": {
    -                    "description": "The delay mode of I2S TX SD output signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "TX_SD1_OUT_DM": {
    -                    "description": "The delay mode of I2S TX SD1 output signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "TX_WS_OUT_DM": {
    -                    "description": "The delay mode of I2S TX WS output signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.",
    -                    "offset": 16,
    -                    "size": 2
    -                  },
    -                  "TX_BCK_OUT_DM": {
    -                    "description": "The delay mode of I2S TX BCK output signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.",
    -                    "offset": 20,
    -                    "size": 2
    -                  },
    -                  "TX_WS_IN_DM": {
    -                    "description": "The delay mode of I2S TX WS input signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.",
    -                    "offset": 24,
    -                    "size": 2
    -                  },
    -                  "TX_BCK_IN_DM": {
    -                    "description": "The delay mode of I2S TX BCK input signal. 0: bypass. 1: delay by pos edge.  2: delay by neg edge. 3: not used.",
    -                    "offset": 28,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "LC_HUNG_CONF": {
    -              "description": "I2S HUNG configure register.",
    -              "offset": 96,
    -              "size": 32,
    -              "reset_value": 2064,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "LC_FIFO_TIMEOUT": {
    -                    "description": "the i2s_tx_hung_int interrupt or the i2s_rx_hung_int interrupt will be triggered when fifo hung counter is equal to this value",
    -                    "offset": 0,
    -                    "size": 8
    -                  },
    -                  "LC_FIFO_TIMEOUT_SHIFT": {
    -                    "description": "The bits are used to scale tick counter threshold. The tick counter is reset when counter value >= 88000/2^i2s_lc_fifo_timeout_shift",
    -                    "offset": 8,
    -                    "size": 3
    -                  },
    -                  "LC_FIFO_TIMEOUT_ENA": {
    -                    "description": "The enable bit for FIFO timeout",
    -                    "offset": 11,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "RXEOF_NUM": {
    -              "description": "I2S RX data number control register.",
    -              "offset": 100,
    -              "size": 32,
    -              "reset_value": 64,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_EOF_NUM": {
    -                    "description": "The receive data bit length is (I2S_RX_BITS_MOD[4:0] + 1) * (REG_RX_EOF_NUM[11:0] + 1) . It will trigger in_suc_eof interrupt in the configured DMA RX channel.",
    -                    "offset": 0,
    -                    "size": 12
    -                  }
    -                }
    -              }
    -            },
    -            "CONF_SIGLE_DATA": {
    -              "description": "I2S signal data register",
    -              "offset": 104,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SINGLE_DATA": {
    -                    "description": "The configured constant channel data to be sent out.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "STATE": {
    -              "description": "I2S TX status register",
    -              "offset": 108,
    -              "size": 32,
    -              "reset_value": 1,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_IDLE": {
    -                    "description": "1: i2s_tx is idle state. 0: i2s_tx is working.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DATE": {
    -              "description": "Version control register",
    -              "offset": 128,
    -              "size": 32,
    -              "reset_value": 33583648,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATE": {
    -                    "description": "I2S version control register",
    -                    "offset": 0,
    -                    "size": 28
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "INTERRUPT_CORE0": {
    -        "description": "Interrupt Core",
    -        "children": {
    -          "registers": {
    -            "MAC_INTR_MAP": {
    -              "description": "mac intr map register",
    -              "offset": 0,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "MAC_INTR_MAP": {
    -                    "description": "core0_mac_intr_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "MAC_NMI_MAP": {
    -              "description": "mac nmi_intr map register",
    -              "offset": 4,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "MAC_NMI_MAP": {
    -                    "description": "reg_core0_mac_nmi_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "PWR_INTR_MAP": {
    -              "description": "pwr intr map register",
    -              "offset": 8,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PWR_INTR_MAP": {
    -                    "description": "reg_core0_pwr_intr_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "BB_INT_MAP": {
    -              "description": "bb intr map register",
    -              "offset": 12,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BB_INT_MAP": {
    -                    "description": "reg_core0_bb_int_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "BT_MAC_INT_MAP": {
    -              "description": "bt intr map register",
    -              "offset": 16,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BT_MAC_INT_MAP": {
    -                    "description": "reg_core0_bt_mac_int_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "BT_BB_INT_MAP": {
    -              "description": "bb_bt intr map register",
    -              "offset": 20,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BT_BB_INT_MAP": {
    -                    "description": "reg_core0_bt_bb_int_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "BT_BB_NMI_MAP": {
    -              "description": "bb_bt_nmi intr map register",
    -              "offset": 24,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BT_BB_NMI_MAP": {
    -                    "description": "reg_core0_bt_bb_nmi_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "RWBT_IRQ_MAP": {
    -              "description": "rwbt intr map register",
    -              "offset": 28,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RWBT_IRQ_MAP": {
    -                    "description": "reg_core0_rwbt_irq_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "RWBLE_IRQ_MAP": {
    -              "description": "rwble intr map register",
    -              "offset": 32,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RWBLE_IRQ_MAP": {
    -                    "description": "reg_core0_rwble_irq_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "RWBT_NMI_MAP": {
    -              "description": "rwbt_nmi intr map register",
    -              "offset": 36,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RWBT_NMI_MAP": {
    -                    "description": "reg_core0_rwbt_nmi_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "RWBLE_NMI_MAP": {
    -              "description": "rwble_nmi intr map register",
    -              "offset": 40,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RWBLE_NMI_MAP": {
    -                    "description": "reg_core0_rwble_nmi_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "I2C_MST_INT_MAP": {
    -              "description": "i2c intr map register",
    -              "offset": 44,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "I2C_MST_INT_MAP": {
    -                    "description": "reg_core0_i2c_mst_int_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "SLC0_INTR_MAP": {
    -              "description": "slc0 intr map register",
    -              "offset": 48,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SLC0_INTR_MAP": {
    -                    "description": "reg_core0_slc0_intr_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "SLC1_INTR_MAP": {
    -              "description": "slc1 intr map register",
    -              "offset": 52,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SLC1_INTR_MAP": {
    -                    "description": "reg_core0_slc1_intr_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "APB_CTRL_INTR_MAP": {
    -              "description": "apb_ctrl intr map register",
    -              "offset": 56,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "APB_CTRL_INTR_MAP": {
    -                    "description": "reg_core0_apb_ctrl_intr_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "UHCI0_INTR_MAP": {
    -              "description": "uchi0 intr map register",
    -              "offset": 60,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "UHCI0_INTR_MAP": {
    -                    "description": "reg_core0_uhci0_intr_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "GPIO_INTERRUPT_PRO_MAP": {
    -              "description": "gpio intr map register",
    -              "offset": 64,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "GPIO_INTERRUPT_PRO_MAP": {
    -                    "description": "reg_core0_gpio_interrupt_pro_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "GPIO_INTERRUPT_PRO_NMI_MAP": {
    -              "description": "gpio_pro intr map register",
    -              "offset": 68,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "GPIO_INTERRUPT_PRO_NMI_MAP": {
    -                    "description": "reg_core0_gpio_interrupt_pro_nmi_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "SPI_INTR_1_MAP": {
    -              "description": "gpio_pro_nmi intr map register",
    -              "offset": 72,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SPI_INTR_1_MAP": {
    -                    "description": "reg_core0_spi_intr_1_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "SPI_INTR_2_MAP": {
    -              "description": "spi1 intr map register",
    -              "offset": 76,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SPI_INTR_2_MAP": {
    -                    "description": "reg_core0_spi_intr_2_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "I2S1_INT_MAP": {
    -              "description": "spi2 intr map register",
    -              "offset": 80,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "I2S1_INT_MAP": {
    -                    "description": "reg_core0_i2s1_int_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "UART_INTR_MAP": {
    -              "description": "i2s1 intr map register",
    -              "offset": 84,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "UART_INTR_MAP": {
    -                    "description": "reg_core0_uart_intr_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "UART1_INTR_MAP": {
    -              "description": "uart1 intr map register",
    -              "offset": 88,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "UART1_INTR_MAP": {
    -                    "description": "reg_core0_uart1_intr_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "LEDC_INT_MAP": {
    -              "description": "ledc intr map register",
    -              "offset": 92,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "LEDC_INT_MAP": {
    -                    "description": "reg_core0_ledc_int_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "EFUSE_INT_MAP": {
    -              "description": "efuse intr map register",
    -              "offset": 96,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "EFUSE_INT_MAP": {
    -                    "description": "reg_core0_efuse_int_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "CAN_INT_MAP": {
    -              "description": "can intr map register",
    -              "offset": 100,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CAN_INT_MAP": {
    -                    "description": "reg_core0_can_int_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "USB_INTR_MAP": {
    -              "description": "usb intr map register",
    -              "offset": 104,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "USB_INTR_MAP": {
    -                    "description": "reg_core0_usb_intr_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "RTC_CORE_INTR_MAP": {
    -              "description": "rtc intr map register",
    -              "offset": 108,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_CORE_INTR_MAP": {
    -                    "description": "reg_core0_rtc_core_intr_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "RMT_INTR_MAP": {
    -              "description": "rmt intr map register",
    -              "offset": 112,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RMT_INTR_MAP": {
    -                    "description": "reg_core0_rmt_intr_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "I2C_EXT0_INTR_MAP": {
    -              "description": "i2c intr map register",
    -              "offset": 116,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "I2C_EXT0_INTR_MAP": {
    -                    "description": "reg_core0_i2c_ext0_intr_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "TIMER_INT1_MAP": {
    -              "description": "timer1 intr map register",
    -              "offset": 120,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_INT1_MAP": {
    -                    "description": "reg_core0_timer_int1_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "TIMER_INT2_MAP": {
    -              "description": "timer2 intr map register",
    -              "offset": 124,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_INT2_MAP": {
    -                    "description": "reg_core0_timer_int2_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "TG_T0_INT_MAP": {
    -              "description": "tg to intr map register",
    -              "offset": 128,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TG_T0_INT_MAP": {
    -                    "description": "reg_core0_tg_t0_int_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "TG_WDT_INT_MAP": {
    -              "description": "tg wdt intr map register",
    -              "offset": 132,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TG_WDT_INT_MAP": {
    -                    "description": "reg_core0_tg_wdt_int_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "TG1_T0_INT_MAP": {
    -              "description": "tg1 to intr map register",
    -              "offset": 136,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TG1_T0_INT_MAP": {
    -                    "description": "reg_core0_tg1_t0_int_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "TG1_WDT_INT_MAP": {
    -              "description": "tg1 wdt intr map register",
    -              "offset": 140,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TG1_WDT_INT_MAP": {
    -                    "description": "reg_core0_tg1_wdt_int_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "CACHE_IA_INT_MAP": {
    -              "description": "cache ia intr map register",
    -              "offset": 144,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CACHE_IA_INT_MAP": {
    -                    "description": "reg_core0_cache_ia_int_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "SYSTIMER_TARGET0_INT_MAP": {
    -              "description": "systimer intr map register",
    -              "offset": 148,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SYSTIMER_TARGET0_INT_MAP": {
    -                    "description": "reg_core0_systimer_target0_int_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "SYSTIMER_TARGET1_INT_MAP": {
    -              "description": "systimer target1 intr map register",
    -              "offset": 152,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SYSTIMER_TARGET1_INT_MAP": {
    -                    "description": "reg_core0_systimer_target1_int_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "SYSTIMER_TARGET2_INT_MAP": {
    -              "description": "systimer target2 intr map register",
    -              "offset": 156,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SYSTIMER_TARGET2_INT_MAP": {
    -                    "description": "reg_core0_systimer_target2_int_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "SPI_MEM_REJECT_INTR_MAP": {
    -              "description": "spi mem reject intr map register",
    -              "offset": 160,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SPI_MEM_REJECT_INTR_MAP": {
    -                    "description": "reg_core0_spi_mem_reject_intr_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "ICACHE_PRELOAD_INT_MAP": {
    -              "description": "icache perload intr map register",
    -              "offset": 164,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_PRELOAD_INT_MAP": {
    -                    "description": "reg_core0_icache_preload_int_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "ICACHE_SYNC_INT_MAP": {
    -              "description": "icache sync intr map register",
    -              "offset": 168,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_SYNC_INT_MAP": {
    -                    "description": "reg_core0_icache_sync_int_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "APB_ADC_INT_MAP": {
    -              "description": "adc intr map register",
    -              "offset": 172,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "APB_ADC_INT_MAP": {
    -                    "description": "reg_core0_apb_adc_int_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_CH0_INT_MAP": {
    -              "description": "dma ch0 intr map register",
    -              "offset": 176,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_CH0_INT_MAP": {
    -                    "description": "reg_core0_dma_ch0_int_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_CH1_INT_MAP": {
    -              "description": "dma ch1 intr map register",
    -              "offset": 180,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_CH1_INT_MAP": {
    -                    "description": "reg_core0_dma_ch1_int_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_CH2_INT_MAP": {
    -              "description": "dma ch2 intr map register",
    -              "offset": 184,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_CH2_INT_MAP": {
    -                    "description": "reg_core0_dma_ch2_int_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "RSA_INT_MAP": {
    -              "description": "rsa intr map register",
    -              "offset": 188,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RSA_INT_MAP": {
    -                    "description": "reg_core0_rsa_int_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "AES_INT_MAP": {
    -              "description": "aes intr map register",
    -              "offset": 192,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "AES_INT_MAP": {
    -                    "description": "reg_core0_aes_int_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "SHA_INT_MAP": {
    -              "description": "sha intr map register",
    -              "offset": 196,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SHA_INT_MAP": {
    -                    "description": "reg_core0_sha_int_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INTR_FROM_CPU_0_MAP": {
    -              "description": "cpu from cpu 0 intr map register",
    -              "offset": 200,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_INTR_FROM_CPU_0_MAP": {
    -                    "description": "reg_core0_cpu_intr_from_cpu_0_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INTR_FROM_CPU_1_MAP": {
    -              "description": "cpu from cpu 0 intr map register",
    -              "offset": 204,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_INTR_FROM_CPU_1_MAP": {
    -                    "description": "reg_core0_cpu_intr_from_cpu_1_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INTR_FROM_CPU_2_MAP": {
    -              "description": "cpu from cpu 1 intr map register",
    -              "offset": 208,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_INTR_FROM_CPU_2_MAP": {
    -                    "description": "reg_core0_cpu_intr_from_cpu_2_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INTR_FROM_CPU_3_MAP": {
    -              "description": "cpu from cpu 3 intr map register",
    -              "offset": 212,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_INTR_FROM_CPU_3_MAP": {
    -                    "description": "reg_core0_cpu_intr_from_cpu_3_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "ASSIST_DEBUG_INTR_MAP": {
    -              "description": "assist debug intr map register",
    -              "offset": 216,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ASSIST_DEBUG_INTR_MAP": {
    -                    "description": "reg_core0_assist_debug_intr_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR_MAP": {
    -              "description": "dma pms violatile intr map register",
    -              "offset": 220,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR_MAP": {
    -                    "description": "reg_core0_dma_apbperi_pms_monitor_violate_intr_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP": {
    -              "description": "iram0 pms violatile intr map register",
    -              "offset": 224,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP": {
    -                    "description": "reg_core0_core_0_iram0_pms_monitor_violate_intr_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP": {
    -              "description": "mac intr map register",
    -              "offset": 228,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP": {
    -                    "description": "reg_core0_core_0_dram0_pms_monitor_violate_intr_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR_MAP": {
    -              "description": "mac intr map register",
    -              "offset": 232,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR_MAP": {
    -                    "description": "reg_core0_core_0_pif_pms_monitor_violate_intr_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP": {
    -              "description": "mac intr map register",
    -              "offset": 236,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP": {
    -                    "description": "reg_core0_core_0_pif_pms_monitor_violate_size_intr_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "BACKUP_PMS_VIOLATE_INTR_MAP": {
    -              "description": "mac intr map register",
    -              "offset": 240,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BACKUP_PMS_VIOLATE_INTR_MAP": {
    -                    "description": "reg_core0_backup_pms_violate_intr_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "CACHE_CORE0_ACS_INT_MAP": {
    -              "description": "mac intr map register",
    -              "offset": 244,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CACHE_CORE0_ACS_INT_MAP": {
    -                    "description": "reg_core0_cache_core0_acs_int_map",
    -                    "offset": 0,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "INTR_STATUS_REG_0": {
    -              "description": "mac intr map register",
    -              "offset": 248,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INTR_STATUS_0": {
    -                    "description": "reg_core0_intr_status_0",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INTR_STATUS_REG_1": {
    -              "description": "mac intr map register",
    -              "offset": 252,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INTR_STATUS_1": {
    -                    "description": "reg_core0_intr_status_1",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CLOCK_GATE": {
    -              "description": "mac intr map register",
    -              "offset": 256,
    -              "size": 32,
    -              "reset_value": 1,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "REG_CLK_EN": {
    -                    "description": "reg_core0_reg_clk_en",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_ENABLE": {
    -              "description": "mac intr map register",
    -              "offset": 260,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_INT_ENABLE": {
    -                    "description": "reg_core0_cpu_int_enable",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_TYPE": {
    -              "description": "mac intr map register",
    -              "offset": 264,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_INT_TYPE": {
    -                    "description": "reg_core0_cpu_int_type",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_CLEAR": {
    -              "description": "mac intr map register",
    -              "offset": 268,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_INT_CLEAR": {
    -                    "description": "reg_core0_cpu_int_clear",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_EIP_STATUS": {
    -              "description": "mac intr map register",
    -              "offset": 272,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_INT_EIP_STATUS": {
    -                    "description": "reg_core0_cpu_int_eip_status",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_0": {
    -              "description": "mac intr map register",
    -              "offset": 276,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_0_MAP": {
    -                    "description": "reg_core0_cpu_pri_0_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_1": {
    -              "description": "mac intr map register",
    -              "offset": 280,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_1_MAP": {
    -                    "description": "reg_core0_cpu_pri_1_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_2": {
    -              "description": "mac intr map register",
    -              "offset": 284,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_2_MAP": {
    -                    "description": "reg_core0_cpu_pri_2_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_3": {
    -              "description": "mac intr map register",
    -              "offset": 288,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_3_MAP": {
    -                    "description": "reg_core0_cpu_pri_3_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_4": {
    -              "description": "mac intr map register",
    -              "offset": 292,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_4_MAP": {
    -                    "description": "reg_core0_cpu_pri_4_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_5": {
    -              "description": "mac intr map register",
    -              "offset": 296,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_5_MAP": {
    -                    "description": "reg_core0_cpu_pri_5_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_6": {
    -              "description": "mac intr map register",
    -              "offset": 300,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_6_MAP": {
    -                    "description": "reg_core0_cpu_pri_6_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_7": {
    -              "description": "mac intr map register",
    -              "offset": 304,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_7_MAP": {
    -                    "description": "reg_core0_cpu_pri_7_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_8": {
    -              "description": "mac intr map register",
    -              "offset": 308,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_8_MAP": {
    -                    "description": "reg_core0_cpu_pri_8_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_9": {
    -              "description": "mac intr map register",
    -              "offset": 312,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_9_MAP": {
    -                    "description": "reg_core0_cpu_pri_9_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_10": {
    -              "description": "mac intr map register",
    -              "offset": 316,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_10_MAP": {
    -                    "description": "reg_core0_cpu_pri_10_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_11": {
    -              "description": "mac intr map register",
    -              "offset": 320,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_11_MAP": {
    -                    "description": "reg_core0_cpu_pri_11_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_12": {
    -              "description": "mac intr map register",
    -              "offset": 324,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_12_MAP": {
    -                    "description": "reg_core0_cpu_pri_12_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_13": {
    -              "description": "mac intr map register",
    -              "offset": 328,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_13_MAP": {
    -                    "description": "reg_core0_cpu_pri_13_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_14": {
    -              "description": "mac intr map register",
    -              "offset": 332,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_14_MAP": {
    -                    "description": "reg_core0_cpu_pri_14_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_15": {
    -              "description": "mac intr map register",
    -              "offset": 336,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_15_MAP": {
    -                    "description": "reg_core0_cpu_pri_15_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_16": {
    -              "description": "mac intr map register",
    -              "offset": 340,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_16_MAP": {
    -                    "description": "reg_core0_cpu_pri_16_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_17": {
    -              "description": "mac intr map register",
    -              "offset": 344,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_17_MAP": {
    -                    "description": "reg_core0_cpu_pri_17_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_18": {
    -              "description": "mac intr map register",
    -              "offset": 348,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_18_MAP": {
    -                    "description": "reg_core0_cpu_pri_18_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_19": {
    -              "description": "mac intr map register",
    -              "offset": 352,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_19_MAP": {
    -                    "description": "reg_core0_cpu_pri_19_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_20": {
    -              "description": "mac intr map register",
    -              "offset": 356,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_20_MAP": {
    -                    "description": "reg_core0_cpu_pri_20_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_21": {
    -              "description": "mac intr map register",
    -              "offset": 360,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_21_MAP": {
    -                    "description": "reg_core0_cpu_pri_21_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_22": {
    -              "description": "mac intr map register",
    -              "offset": 364,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_22_MAP": {
    -                    "description": "reg_core0_cpu_pri_22_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_23": {
    -              "description": "mac intr map register",
    -              "offset": 368,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_23_MAP": {
    -                    "description": "reg_core0_cpu_pri_23_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_24": {
    -              "description": "mac intr map register",
    -              "offset": 372,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_24_MAP": {
    -                    "description": "reg_core0_cpu_pri_24_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_25": {
    -              "description": "mac intr map register",
    -              "offset": 376,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_25_MAP": {
    -                    "description": "reg_core0_cpu_pri_25_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_26": {
    -              "description": "mac intr map register",
    -              "offset": 380,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_26_MAP": {
    -                    "description": "reg_core0_cpu_pri_26_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_27": {
    -              "description": "mac intr map register",
    -              "offset": 384,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_27_MAP": {
    -                    "description": "reg_core0_cpu_pri_27_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_28": {
    -              "description": "mac intr map register",
    -              "offset": 388,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_28_MAP": {
    -                    "description": "reg_core0_cpu_pri_28_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_29": {
    -              "description": "mac intr map register",
    -              "offset": 392,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_29_MAP": {
    -                    "description": "reg_core0_cpu_pri_29_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_30": {
    -              "description": "mac intr map register",
    -              "offset": 396,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_30_MAP": {
    -                    "description": "reg_core0_cpu_pri_30_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_PRI_31": {
    -              "description": "mac intr map register",
    -              "offset": 400,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_PRI_31_MAP": {
    -                    "description": "reg_core0_cpu_pri_31_map",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INT_THRESH": {
    -              "description": "mac intr map register",
    -              "offset": 404,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_INT_THRESH": {
    -                    "description": "reg_core0_cpu_int_thresh",
    -                    "offset": 0,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "INTERRUPT_REG_DATE": {
    -              "description": "mac intr map register",
    -              "offset": 2044,
    -              "size": 32,
    -              "reset_value": 33583632,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INTERRUPT_REG_DATE": {
    -                    "description": "reg_core0_interrupt_reg_date",
    -                    "offset": 0,
    -                    "size": 28
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "IO_MUX": {
    -        "description": "Input/Output Multiplexer",
    -        "children": {
    -          "registers": {
    -            "PIN_CTRL": {
    -              "description": "Clock Output Configuration Register",
    -              "offset": 0,
    -              "size": 32,
    -              "reset_value": 2047,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CLK_OUT1": {
    -                    "description": "If you want to output clock for I2S to CLK_OUT_out1, set this register to 0x0. CLK_OUT_out1 can be found in peripheral output signals.",
    -                    "offset": 0,
    -                    "size": 4
    -                  },
    -                  "CLK_OUT2": {
    -                    "description": "If you want to output clock for I2S to CLK_OUT_out2, set this register to 0x0. CLK_OUT_out2 can be found in peripheral output signals.",
    -                    "offset": 4,
    -                    "size": 4
    -                  },
    -                  "CLK_OUT3": {
    -                    "description": "If you want to output clock for I2S to CLK_OUT_out3, set this register to 0x0. CLK_OUT_out3 can be found in peripheral output signals.",
    -                    "offset": 8,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "GPIO": {
    -              "description": "IO MUX Configure Register for pad XTAL_32K_P",
    -              "offset": 4,
    -              "size": 32,
    -              "count": 22,
    -              "reset_value": 2816,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "MCU_OE": {
    -                    "description": "Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "SLP_SEL": {
    -                    "description": "Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "MCU_WPD": {
    -                    "description": "Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0: internal pull-down disabled.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "MCU_WPU": {
    -                    "description": "Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0: internal pull-up disabled.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "MCU_IE": {
    -                    "description": "Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "FUN_WPD": {
    -                    "description": "Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal pull-down disabled.",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "FUN_WPU": {
    -                    "description": "Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up disabled.",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "FUN_IE": {
    -                    "description": "Input enable of the pad. 1: input enabled; 0: input disabled.",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "FUN_DRV": {
    -                    "description": "Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.",
    -                    "offset": 10,
    -                    "size": 2
    -                  },
    -                  "MCU_SEL": {
    -                    "description": "Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function 2; etc.",
    -                    "offset": 12,
    -                    "size": 3
    -                  },
    -                  "FILTER_EN": {
    -                    "description": "Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.",
    -                    "offset": 15,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DATE": {
    -              "description": "IO MUX Version Control Register",
    -              "offset": 252,
    -              "size": 32,
    -              "reset_value": 33579088,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "REG_DATE": {
    -                    "description": "Version control register",
    -                    "offset": 0,
    -                    "size": 28
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "LEDC": {
    -        "description": "LED Control PWM (Pulse Width Modulation)",
    -        "children": {
    -          "registers": {
    -            "LSCH0_CONF0": {
    -              "description": "LEDC_LSCH0_CONF0.",
    -              "offset": 0,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_SEL_LSCH0": {
    -                    "description": "reg_timer_sel_lsch0.",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "SIG_OUT_EN_LSCH0": {
    -                    "description": "reg_sig_out_en_lsch0.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "IDLE_LV_LSCH0": {
    -                    "description": "reg_idle_lv_lsch0.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "PARA_UP_LSCH0": {
    -                    "description": "reg_para_up_lsch0.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OVF_NUM_LSCH0": {
    -                    "description": "reg_ovf_num_lsch0.",
    -                    "offset": 5,
    -                    "size": 10
    -                  },
    -                  "OVF_CNT_EN_LSCH0": {
    -                    "description": "reg_ovf_cnt_en_lsch0.",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "OVF_CNT_RESET_LSCH0": {
    -                    "description": "reg_ovf_cnt_reset_lsch0.",
    -                    "offset": 16,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH0_HPOINT": {
    -              "description": "LEDC_LSCH0_HPOINT.",
    -              "offset": 4,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "HPOINT_LSCH0": {
    -                    "description": "reg_hpoint_lsch0.",
    -                    "offset": 0,
    -                    "size": 14
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH0_DUTY": {
    -              "description": "LEDC_LSCH0_DUTY.",
    -              "offset": 8,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DUTY_LSCH0": {
    -                    "description": "reg_duty_lsch0.",
    -                    "offset": 0,
    -                    "size": 19
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH0_CONF1": {
    -              "description": "LEDC_LSCH0_CONF1.",
    -              "offset": 12,
    -              "size": 32,
    -              "reset_value": 1073741824,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DUTY_SCALE_LSCH0": {
    -                    "description": "reg_duty_scale_lsch0.",
    -                    "offset": 0,
    -                    "size": 10
    -                  },
    -                  "DUTY_CYCLE_LSCH0": {
    -                    "description": "reg_duty_cycle_lsch0.",
    -                    "offset": 10,
    -                    "size": 10
    -                  },
    -                  "DUTY_NUM_LSCH0": {
    -                    "description": "reg_duty_num_lsch0.",
    -                    "offset": 20,
    -                    "size": 10
    -                  },
    -                  "DUTY_INC_LSCH0": {
    -                    "description": "reg_duty_inc_lsch0.",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "DUTY_START_LSCH0": {
    -                    "description": "reg_duty_start_lsch0.",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH0_DUTY_R": {
    -              "description": "LEDC_LSCH0_DUTY_R.",
    -              "offset": 16,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DUTY_LSCH0_R": {
    -                    "description": "reg_duty_lsch0_r.",
    -                    "offset": 0,
    -                    "size": 19,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH1_CONF0": {
    -              "description": "LEDC_LSCH1_CONF0.",
    -              "offset": 20,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_SEL_LSCH1": {
    -                    "description": "reg_timer_sel_lsch1.",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "SIG_OUT_EN_LSCH1": {
    -                    "description": "reg_sig_out_en_lsch1.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "IDLE_LV_LSCH1": {
    -                    "description": "reg_idle_lv_lsch1.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "PARA_UP_LSCH1": {
    -                    "description": "reg_para_up_lsch1.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OVF_NUM_LSCH1": {
    -                    "description": "reg_ovf_num_lsch1.",
    -                    "offset": 5,
    -                    "size": 10
    -                  },
    -                  "OVF_CNT_EN_LSCH1": {
    -                    "description": "reg_ovf_cnt_en_lsch1.",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "OVF_CNT_RESET_LSCH1": {
    -                    "description": "reg_ovf_cnt_reset_lsch1.",
    -                    "offset": 16,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH1_HPOINT": {
    -              "description": "LEDC_LSCH1_HPOINT.",
    -              "offset": 24,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "HPOINT_LSCH1": {
    -                    "description": "reg_hpoint_lsch1.",
    -                    "offset": 0,
    -                    "size": 14
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH1_DUTY": {
    -              "description": "LEDC_LSCH1_DUTY.",
    -              "offset": 28,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DUTY_LSCH1": {
    -                    "description": "reg_duty_lsch1.",
    -                    "offset": 0,
    -                    "size": 19
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH1_CONF1": {
    -              "description": "LEDC_LSCH1_CONF1.",
    -              "offset": 32,
    -              "size": 32,
    -              "reset_value": 1073741824,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DUTY_SCALE_LSCH1": {
    -                    "description": "reg_duty_scale_lsch1.",
    -                    "offset": 0,
    -                    "size": 10
    -                  },
    -                  "DUTY_CYCLE_LSCH1": {
    -                    "description": "reg_duty_cycle_lsch1.",
    -                    "offset": 10,
    -                    "size": 10
    -                  },
    -                  "DUTY_NUM_LSCH1": {
    -                    "description": "reg_duty_num_lsch1.",
    -                    "offset": 20,
    -                    "size": 10
    -                  },
    -                  "DUTY_INC_LSCH1": {
    -                    "description": "reg_duty_inc_lsch1.",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "DUTY_START_LSCH1": {
    -                    "description": "reg_duty_start_lsch1.",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH1_DUTY_R": {
    -              "description": "LEDC_LSCH1_DUTY_R.",
    -              "offset": 36,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DUTY_LSCH1_R": {
    -                    "description": "reg_duty_lsch1_r.",
    -                    "offset": 0,
    -                    "size": 19,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH2_CONF0": {
    -              "description": "LEDC_LSCH2_CONF0.",
    -              "offset": 40,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_SEL_LSCH2": {
    -                    "description": "reg_timer_sel_lsch2.",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "SIG_OUT_EN_LSCH2": {
    -                    "description": "reg_sig_out_en_lsch2.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "IDLE_LV_LSCH2": {
    -                    "description": "reg_idle_lv_lsch2.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "PARA_UP_LSCH2": {
    -                    "description": "reg_para_up_lsch2.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OVF_NUM_LSCH2": {
    -                    "description": "reg_ovf_num_lsch2.",
    -                    "offset": 5,
    -                    "size": 10
    -                  },
    -                  "OVF_CNT_EN_LSCH2": {
    -                    "description": "reg_ovf_cnt_en_lsch2.",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "OVF_CNT_RESET_LSCH2": {
    -                    "description": "reg_ovf_cnt_reset_lsch2.",
    -                    "offset": 16,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH2_HPOINT": {
    -              "description": "LEDC_LSCH2_HPOINT.",
    -              "offset": 44,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "HPOINT_LSCH2": {
    -                    "description": "reg_hpoint_lsch2.",
    -                    "offset": 0,
    -                    "size": 14
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH2_DUTY": {
    -              "description": "LEDC_LSCH2_DUTY.",
    -              "offset": 48,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DUTY_LSCH2": {
    -                    "description": "reg_duty_lsch2.",
    -                    "offset": 0,
    -                    "size": 19
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH2_CONF1": {
    -              "description": "LEDC_LSCH2_CONF1.",
    -              "offset": 52,
    -              "size": 32,
    -              "reset_value": 1073741824,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DUTY_SCALE_LSCH2": {
    -                    "description": "reg_duty_scale_lsch2.",
    -                    "offset": 0,
    -                    "size": 10
    -                  },
    -                  "DUTY_CYCLE_LSCH2": {
    -                    "description": "reg_duty_cycle_lsch2.",
    -                    "offset": 10,
    -                    "size": 10
    -                  },
    -                  "DUTY_NUM_LSCH2": {
    -                    "description": "reg_duty_num_lsch2.",
    -                    "offset": 20,
    -                    "size": 10
    -                  },
    -                  "DUTY_INC_LSCH2": {
    -                    "description": "reg_duty_inc_lsch2.",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "DUTY_START_LSCH2": {
    -                    "description": "reg_duty_start_lsch2.",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH2_DUTY_R": {
    -              "description": "LEDC_LSCH2_DUTY_R.",
    -              "offset": 56,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DUTY_LSCH2_R": {
    -                    "description": "reg_duty_lsch2_r.",
    -                    "offset": 0,
    -                    "size": 19,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH3_CONF0": {
    -              "description": "LEDC_LSCH3_CONF0.",
    -              "offset": 60,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_SEL_LSCH3": {
    -                    "description": "reg_timer_sel_lsch3.",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "SIG_OUT_EN_LSCH3": {
    -                    "description": "reg_sig_out_en_lsch3.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "IDLE_LV_LSCH3": {
    -                    "description": "reg_idle_lv_lsch3.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "PARA_UP_LSCH3": {
    -                    "description": "reg_para_up_lsch3.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OVF_NUM_LSCH3": {
    -                    "description": "reg_ovf_num_lsch3.",
    -                    "offset": 5,
    -                    "size": 10
    -                  },
    -                  "OVF_CNT_EN_LSCH3": {
    -                    "description": "reg_ovf_cnt_en_lsch3.",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "OVF_CNT_RESET_LSCH3": {
    -                    "description": "reg_ovf_cnt_reset_lsch3.",
    -                    "offset": 16,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH3_HPOINT": {
    -              "description": "LEDC_LSCH3_HPOINT.",
    -              "offset": 64,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "HPOINT_LSCH3": {
    -                    "description": "reg_hpoint_lsch3.",
    -                    "offset": 0,
    -                    "size": 14
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH3_DUTY": {
    -              "description": "LEDC_LSCH3_DUTY.",
    -              "offset": 68,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DUTY_LSCH3": {
    -                    "description": "reg_duty_lsch3.",
    -                    "offset": 0,
    -                    "size": 19
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH3_CONF1": {
    -              "description": "LEDC_LSCH3_CONF1.",
    -              "offset": 72,
    -              "size": 32,
    -              "reset_value": 1073741824,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DUTY_SCALE_LSCH3": {
    -                    "description": "reg_duty_scale_lsch3.",
    -                    "offset": 0,
    -                    "size": 10
    -                  },
    -                  "DUTY_CYCLE_LSCH3": {
    -                    "description": "reg_duty_cycle_lsch3.",
    -                    "offset": 10,
    -                    "size": 10
    -                  },
    -                  "DUTY_NUM_LSCH3": {
    -                    "description": "reg_duty_num_lsch3.",
    -                    "offset": 20,
    -                    "size": 10
    -                  },
    -                  "DUTY_INC_LSCH3": {
    -                    "description": "reg_duty_inc_lsch3.",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "DUTY_START_LSCH3": {
    -                    "description": "reg_duty_start_lsch3.",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH3_DUTY_R": {
    -              "description": "LEDC_LSCH3_DUTY_R.",
    -              "offset": 76,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DUTY_LSCH3_R": {
    -                    "description": "reg_duty_lsch3_r.",
    -                    "offset": 0,
    -                    "size": 19,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH4_CONF0": {
    -              "description": "LEDC_LSCH4_CONF0.",
    -              "offset": 80,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_SEL_LSCH4": {
    -                    "description": "reg_timer_sel_lsch4.",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "SIG_OUT_EN_LSCH4": {
    -                    "description": "reg_sig_out_en_lsch4.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "IDLE_LV_LSCH4": {
    -                    "description": "reg_idle_lv_lsch4.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "PARA_UP_LSCH4": {
    -                    "description": "reg_para_up_lsch4.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OVF_NUM_LSCH4": {
    -                    "description": "reg_ovf_num_lsch4.",
    -                    "offset": 5,
    -                    "size": 10
    -                  },
    -                  "OVF_CNT_EN_LSCH4": {
    -                    "description": "reg_ovf_cnt_en_lsch4.",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "OVF_CNT_RESET_LSCH4": {
    -                    "description": "reg_ovf_cnt_reset_lsch4.",
    -                    "offset": 16,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH4_HPOINT": {
    -              "description": "LEDC_LSCH4_HPOINT.",
    -              "offset": 84,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "HPOINT_LSCH4": {
    -                    "description": "reg_hpoint_lsch4.",
    -                    "offset": 0,
    -                    "size": 14
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH4_DUTY": {
    -              "description": "LEDC_LSCH4_DUTY.",
    -              "offset": 88,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DUTY_LSCH4": {
    -                    "description": "reg_duty_lsch4.",
    -                    "offset": 0,
    -                    "size": 19
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH4_CONF1": {
    -              "description": "LEDC_LSCH4_CONF1.",
    -              "offset": 92,
    -              "size": 32,
    -              "reset_value": 1073741824,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DUTY_SCALE_LSCH4": {
    -                    "description": "reg_duty_scale_lsch4.",
    -                    "offset": 0,
    -                    "size": 10
    -                  },
    -                  "DUTY_CYCLE_LSCH4": {
    -                    "description": "reg_duty_cycle_lsch4.",
    -                    "offset": 10,
    -                    "size": 10
    -                  },
    -                  "DUTY_NUM_LSCH4": {
    -                    "description": "reg_duty_num_lsch4.",
    -                    "offset": 20,
    -                    "size": 10
    -                  },
    -                  "DUTY_INC_LSCH4": {
    -                    "description": "reg_duty_inc_lsch4.",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "DUTY_START_LSCH4": {
    -                    "description": "reg_duty_start_lsch4.",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH4_DUTY_R": {
    -              "description": "LEDC_LSCH4_DUTY_R.",
    -              "offset": 96,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DUTY_LSCH4_R": {
    -                    "description": "reg_duty_lsch4_r.",
    -                    "offset": 0,
    -                    "size": 19,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH5_CONF0": {
    -              "description": "LEDC_LSCH5_CONF0.",
    -              "offset": 100,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_SEL_LSCH5": {
    -                    "description": "reg_timer_sel_lsch5.",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "SIG_OUT_EN_LSCH5": {
    -                    "description": "reg_sig_out_en_lsch5.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "IDLE_LV_LSCH5": {
    -                    "description": "reg_idle_lv_lsch5.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "PARA_UP_LSCH5": {
    -                    "description": "reg_para_up_lsch5.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OVF_NUM_LSCH5": {
    -                    "description": "reg_ovf_num_lsch5.",
    -                    "offset": 5,
    -                    "size": 10
    -                  },
    -                  "OVF_CNT_EN_LSCH5": {
    -                    "description": "reg_ovf_cnt_en_lsch5.",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "OVF_CNT_RESET_LSCH5": {
    -                    "description": "reg_ovf_cnt_reset_lsch5.",
    -                    "offset": 16,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH5_HPOINT": {
    -              "description": "LEDC_LSCH5_HPOINT.",
    -              "offset": 104,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "HPOINT_LSCH5": {
    -                    "description": "reg_hpoint_lsch5.",
    -                    "offset": 0,
    -                    "size": 14
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH5_DUTY": {
    -              "description": "LEDC_LSCH5_DUTY.",
    -              "offset": 108,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DUTY_LSCH5": {
    -                    "description": "reg_duty_lsch5.",
    -                    "offset": 0,
    -                    "size": 19
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH5_CONF1": {
    -              "description": "LEDC_LSCH5_CONF1.",
    -              "offset": 112,
    -              "size": 32,
    -              "reset_value": 1073741824,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DUTY_SCALE_LSCH5": {
    -                    "description": "reg_duty_scale_lsch5.",
    -                    "offset": 0,
    -                    "size": 10
    -                  },
    -                  "DUTY_CYCLE_LSCH5": {
    -                    "description": "reg_duty_cycle_lsch5.",
    -                    "offset": 10,
    -                    "size": 10
    -                  },
    -                  "DUTY_NUM_LSCH5": {
    -                    "description": "reg_duty_num_lsch5.",
    -                    "offset": 20,
    -                    "size": 10
    -                  },
    -                  "DUTY_INC_LSCH5": {
    -                    "description": "reg_duty_inc_lsch5.",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "DUTY_START_LSCH5": {
    -                    "description": "reg_duty_start_lsch5.",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "LSCH5_DUTY_R": {
    -              "description": "LEDC_LSCH5_DUTY_R.",
    -              "offset": 116,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DUTY_LSCH5_R": {
    -                    "description": "reg_duty_lsch5_r.",
    -                    "offset": 0,
    -                    "size": 19,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "LSTIMER0_CONF": {
    -              "description": "LEDC_LSTIMER0_CONF.",
    -              "offset": 160,
    -              "size": 32,
    -              "reset_value": 8388608,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "LSTIMER0_DUTY_RES": {
    -                    "description": "reg_lstimer0_duty_res.",
    -                    "offset": 0,
    -                    "size": 4
    -                  },
    -                  "CLK_DIV_LSTIMER0": {
    -                    "description": "reg_clk_div_lstimer0.",
    -                    "offset": 4,
    -                    "size": 18
    -                  },
    -                  "LSTIMER0_PAUSE": {
    -                    "description": "reg_lstimer0_pause.",
    -                    "offset": 22,
    -                    "size": 1
    -                  },
    -                  "LSTIMER0_RST": {
    -                    "description": "reg_lstimer0_rst.",
    -                    "offset": 23,
    -                    "size": 1
    -                  },
    -                  "TICK_SEL_LSTIMER0": {
    -                    "description": "reg_tick_sel_lstimer0.",
    -                    "offset": 24,
    -                    "size": 1
    -                  },
    -                  "LSTIMER0_PARA_UP": {
    -                    "description": "reg_lstimer0_para_up.",
    -                    "offset": 25,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "LSTIMER0_VALUE": {
    -              "description": "LEDC_LSTIMER0_VALUE.",
    -              "offset": 164,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "LSTIMER0_CNT": {
    -                    "description": "reg_lstimer0_cnt.",
    -                    "offset": 0,
    -                    "size": 14,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "LSTIMER1_CONF": {
    -              "description": "LEDC_LSTIMER1_CONF.",
    -              "offset": 168,
    -              "size": 32,
    -              "reset_value": 8388608,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "LSTIMER1_DUTY_RES": {
    -                    "description": "reg_lstimer1_duty_res.",
    -                    "offset": 0,
    -                    "size": 4
    -                  },
    -                  "CLK_DIV_LSTIMER1": {
    -                    "description": "reg_clk_div_lstimer1.",
    -                    "offset": 4,
    -                    "size": 18
    -                  },
    -                  "LSTIMER1_PAUSE": {
    -                    "description": "reg_lstimer1_pause.",
    -                    "offset": 22,
    -                    "size": 1
    -                  },
    -                  "LSTIMER1_RST": {
    -                    "description": "reg_lstimer1_rst.",
    -                    "offset": 23,
    -                    "size": 1
    -                  },
    -                  "TICK_SEL_LSTIMER1": {
    -                    "description": "reg_tick_sel_lstimer1.",
    -                    "offset": 24,
    -                    "size": 1
    -                  },
    -                  "LSTIMER1_PARA_UP": {
    -                    "description": "reg_lstimer1_para_up.",
    -                    "offset": 25,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "LSTIMER1_VALUE": {
    -              "description": "LEDC_LSTIMER1_VALUE.",
    -              "offset": 172,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "LSTIMER1_CNT": {
    -                    "description": "reg_lstimer1_cnt.",
    -                    "offset": 0,
    -                    "size": 14,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "LSTIMER2_CONF": {
    -              "description": "LEDC_LSTIMER2_CONF.",
    -              "offset": 176,
    -              "size": 32,
    -              "reset_value": 8388608,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "LSTIMER2_DUTY_RES": {
    -                    "description": "reg_lstimer2_duty_res.",
    -                    "offset": 0,
    -                    "size": 4
    -                  },
    -                  "CLK_DIV_LSTIMER2": {
    -                    "description": "reg_clk_div_lstimer2.",
    -                    "offset": 4,
    -                    "size": 18
    -                  },
    -                  "LSTIMER2_PAUSE": {
    -                    "description": "reg_lstimer2_pause.",
    -                    "offset": 22,
    -                    "size": 1
    -                  },
    -                  "LSTIMER2_RST": {
    -                    "description": "reg_lstimer2_rst.",
    -                    "offset": 23,
    -                    "size": 1
    -                  },
    -                  "TICK_SEL_LSTIMER2": {
    -                    "description": "reg_tick_sel_lstimer2.",
    -                    "offset": 24,
    -                    "size": 1
    -                  },
    -                  "LSTIMER2_PARA_UP": {
    -                    "description": "reg_lstimer2_para_up.",
    -                    "offset": 25,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "LSTIMER2_VALUE": {
    -              "description": "LEDC_LSTIMER2_VALUE.",
    -              "offset": 180,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "LSTIMER2_CNT": {
    -                    "description": "reg_lstimer2_cnt.",
    -                    "offset": 0,
    -                    "size": 14,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "LSTIMER3_CONF": {
    -              "description": "LEDC_LSTIMER3_CONF.",
    -              "offset": 184,
    -              "size": 32,
    -              "reset_value": 8388608,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "LSTIMER3_DUTY_RES": {
    -                    "description": "reg_lstimer3_duty_res.",
    -                    "offset": 0,
    -                    "size": 4
    -                  },
    -                  "CLK_DIV_LSTIMER3": {
    -                    "description": "reg_clk_div_lstimer3.",
    -                    "offset": 4,
    -                    "size": 18
    -                  },
    -                  "LSTIMER3_PAUSE": {
    -                    "description": "reg_lstimer3_pause.",
    -                    "offset": 22,
    -                    "size": 1
    -                  },
    -                  "LSTIMER3_RST": {
    -                    "description": "reg_lstimer3_rst.",
    -                    "offset": 23,
    -                    "size": 1
    -                  },
    -                  "TICK_SEL_LSTIMER3": {
    -                    "description": "reg_tick_sel_lstimer3.",
    -                    "offset": 24,
    -                    "size": 1
    -                  },
    -                  "LSTIMER3_PARA_UP": {
    -                    "description": "reg_lstimer3_para_up.",
    -                    "offset": 25,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "LSTIMER3_VALUE": {
    -              "description": "LEDC_LSTIMER3_VALUE.",
    -              "offset": 188,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "LSTIMER3_CNT": {
    -                    "description": "reg_lstimer3_cnt.",
    -                    "offset": 0,
    -                    "size": 14,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_RAW": {
    -              "description": "LEDC_INT_RAW.",
    -              "offset": 192,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "LSTIMER0_OVF_INT_RAW": {
    -                    "description": "reg_lstimer0_ovf_int_raw.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "LSTIMER1_OVF_INT_RAW": {
    -                    "description": "reg_lstimer1_ovf_int_raw.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "LSTIMER2_OVF_INT_RAW": {
    -                    "description": "reg_lstimer2_ovf_int_raw.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "LSTIMER3_OVF_INT_RAW": {
    -                    "description": "reg_lstimer3_ovf_int_raw.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DUTY_CHNG_END_LSCH0_INT_RAW": {
    -                    "description": "reg_duty_chng_end_lsch0_int_raw.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DUTY_CHNG_END_LSCH1_INT_RAW": {
    -                    "description": "reg_duty_chng_end_lsch1_int_raw.",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DUTY_CHNG_END_LSCH2_INT_RAW": {
    -                    "description": "reg_duty_chng_end_lsch2_int_raw.",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DUTY_CHNG_END_LSCH3_INT_RAW": {
    -                    "description": "reg_duty_chng_end_lsch3_int_raw.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DUTY_CHNG_END_LSCH4_INT_RAW": {
    -                    "description": "reg_duty_chng_end_lsch4_int_raw.",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DUTY_CHNG_END_LSCH5_INT_RAW": {
    -                    "description": "reg_duty_chng_end_lsch5_int_raw.",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OVF_CNT_LSCH0_INT_RAW": {
    -                    "description": "reg_ovf_cnt_lsch0_int_raw.",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OVF_CNT_LSCH1_INT_RAW": {
    -                    "description": "reg_ovf_cnt_lsch1_int_raw.",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OVF_CNT_LSCH2_INT_RAW": {
    -                    "description": "reg_ovf_cnt_lsch2_int_raw.",
    -                    "offset": 12,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OVF_CNT_LSCH3_INT_RAW": {
    -                    "description": "reg_ovf_cnt_lsch3_int_raw.",
    -                    "offset": 13,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OVF_CNT_LSCH4_INT_RAW": {
    -                    "description": "reg_ovf_cnt_lsch4_int_raw.",
    -                    "offset": 14,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OVF_CNT_LSCH5_INT_RAW": {
    -                    "description": "reg_ovf_cnt_lsch5_int_raw.",
    -                    "offset": 15,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ST": {
    -              "description": "LEDC_INT_ST.",
    -              "offset": 196,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "LSTIMER0_OVF_INT_ST": {
    -                    "description": "reg_lstimer0_ovf_int_st.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "LSTIMER1_OVF_INT_ST": {
    -                    "description": "reg_lstimer1_ovf_int_st.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "LSTIMER2_OVF_INT_ST": {
    -                    "description": "reg_lstimer2_ovf_int_st.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "LSTIMER3_OVF_INT_ST": {
    -                    "description": "reg_lstimer3_ovf_int_st.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DUTY_CHNG_END_LSCH0_INT_ST": {
    -                    "description": "reg_duty_chng_end_lsch0_int_st.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DUTY_CHNG_END_LSCH1_INT_ST": {
    -                    "description": "reg_duty_chng_end_lsch1_int_st.",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DUTY_CHNG_END_LSCH2_INT_ST": {
    -                    "description": "reg_duty_chng_end_lsch2_int_st.",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DUTY_CHNG_END_LSCH3_INT_ST": {
    -                    "description": "reg_duty_chng_end_lsch3_int_st.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DUTY_CHNG_END_LSCH4_INT_ST": {
    -                    "description": "reg_duty_chng_end_lsch4_int_st.",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DUTY_CHNG_END_LSCH5_INT_ST": {
    -                    "description": "reg_duty_chng_end_lsch5_int_st.",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OVF_CNT_LSCH0_INT_ST": {
    -                    "description": "reg_ovf_cnt_lsch0_int_st.",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OVF_CNT_LSCH1_INT_ST": {
    -                    "description": "reg_ovf_cnt_lsch1_int_st.",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OVF_CNT_LSCH2_INT_ST": {
    -                    "description": "reg_ovf_cnt_lsch2_int_st.",
    -                    "offset": 12,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OVF_CNT_LSCH3_INT_ST": {
    -                    "description": "reg_ovf_cnt_lsch3_int_st.",
    -                    "offset": 13,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OVF_CNT_LSCH4_INT_ST": {
    -                    "description": "reg_ovf_cnt_lsch4_int_st.",
    -                    "offset": 14,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OVF_CNT_LSCH5_INT_ST": {
    -                    "description": "reg_ovf_cnt_lsch5_int_st.",
    -                    "offset": 15,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ENA": {
    -              "description": "LEDC_INT_ENA.",
    -              "offset": 200,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "LSTIMER0_OVF_INT_ENA": {
    -                    "description": "reg_lstimer0_ovf_int_ena.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "LSTIMER1_OVF_INT_ENA": {
    -                    "description": "reg_lstimer1_ovf_int_ena.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "LSTIMER2_OVF_INT_ENA": {
    -                    "description": "reg_lstimer2_ovf_int_ena.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "LSTIMER3_OVF_INT_ENA": {
    -                    "description": "reg_lstimer3_ovf_int_ena.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "DUTY_CHNG_END_LSCH0_INT_ENA": {
    -                    "description": "reg_duty_chng_end_lsch0_int_ena.",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "DUTY_CHNG_END_LSCH1_INT_ENA": {
    -                    "description": "reg_duty_chng_end_lsch1_int_ena.",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "DUTY_CHNG_END_LSCH2_INT_ENA": {
    -                    "description": "reg_duty_chng_end_lsch2_int_ena.",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "DUTY_CHNG_END_LSCH3_INT_ENA": {
    -                    "description": "reg_duty_chng_end_lsch3_int_ena.",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "DUTY_CHNG_END_LSCH4_INT_ENA": {
    -                    "description": "reg_duty_chng_end_lsch4_int_ena.",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "DUTY_CHNG_END_LSCH5_INT_ENA": {
    -                    "description": "reg_duty_chng_end_lsch5_int_ena.",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "OVF_CNT_LSCH0_INT_ENA": {
    -                    "description": "reg_ovf_cnt_lsch0_int_ena.",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "OVF_CNT_LSCH1_INT_ENA": {
    -                    "description": "reg_ovf_cnt_lsch1_int_ena.",
    -                    "offset": 11,
    -                    "size": 1
    -                  },
    -                  "OVF_CNT_LSCH2_INT_ENA": {
    -                    "description": "reg_ovf_cnt_lsch2_int_ena.",
    -                    "offset": 12,
    -                    "size": 1
    -                  },
    -                  "OVF_CNT_LSCH3_INT_ENA": {
    -                    "description": "reg_ovf_cnt_lsch3_int_ena.",
    -                    "offset": 13,
    -                    "size": 1
    -                  },
    -                  "OVF_CNT_LSCH4_INT_ENA": {
    -                    "description": "reg_ovf_cnt_lsch4_int_ena.",
    -                    "offset": 14,
    -                    "size": 1
    -                  },
    -                  "OVF_CNT_LSCH5_INT_ENA": {
    -                    "description": "reg_ovf_cnt_lsch5_int_ena.",
    -                    "offset": 15,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "INT_CLR": {
    -              "description": "LEDC_INT_CLR.",
    -              "offset": 204,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "LSTIMER0_OVF_INT_CLR": {
    -                    "description": "reg_lstimer0_ovf_int_clr.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "LSTIMER1_OVF_INT_CLR": {
    -                    "description": "reg_lstimer1_ovf_int_clr.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "LSTIMER2_OVF_INT_CLR": {
    -                    "description": "reg_lstimer2_ovf_int_clr.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "LSTIMER3_OVF_INT_CLR": {
    -                    "description": "reg_lstimer3_ovf_int_clr.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "DUTY_CHNG_END_LSCH0_INT_CLR": {
    -                    "description": "reg_duty_chng_end_lsch0_int_clr.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "DUTY_CHNG_END_LSCH1_INT_CLR": {
    -                    "description": "reg_duty_chng_end_lsch1_int_clr.",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "DUTY_CHNG_END_LSCH2_INT_CLR": {
    -                    "description": "reg_duty_chng_end_lsch2_int_clr.",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "DUTY_CHNG_END_LSCH3_INT_CLR": {
    -                    "description": "reg_duty_chng_end_lsch3_int_clr.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "DUTY_CHNG_END_LSCH4_INT_CLR": {
    -                    "description": "reg_duty_chng_end_lsch4_int_clr.",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "DUTY_CHNG_END_LSCH5_INT_CLR": {
    -                    "description": "reg_duty_chng_end_lsch5_int_clr.",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OVF_CNT_LSCH0_INT_CLR": {
    -                    "description": "reg_ovf_cnt_lsch0_int_clr.",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OVF_CNT_LSCH1_INT_CLR": {
    -                    "description": "reg_ovf_cnt_lsch1_int_clr.",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OVF_CNT_LSCH2_INT_CLR": {
    -                    "description": "reg_ovf_cnt_lsch2_int_clr.",
    -                    "offset": 12,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OVF_CNT_LSCH3_INT_CLR": {
    -                    "description": "reg_ovf_cnt_lsch3_int_clr.",
    -                    "offset": 13,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OVF_CNT_LSCH4_INT_CLR": {
    -                    "description": "reg_ovf_cnt_lsch4_int_clr.",
    -                    "offset": 14,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OVF_CNT_LSCH5_INT_CLR": {
    -                    "description": "reg_ovf_cnt_lsch5_int_clr.",
    -                    "offset": 15,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CONF": {
    -              "description": "LEDC_CONF.",
    -              "offset": 208,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "APB_CLK_SEL": {
    -                    "description": "reg_apb_clk_sel.",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "CLK_EN": {
    -                    "description": "reg_clk_en.",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DATE": {
    -              "description": "LEDC_DATE.",
    -              "offset": 252,
    -              "size": 32,
    -              "reset_value": 419829504,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "LEDC_DATE": {
    -                    "description": "reg_ledc_date.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "RMT": {
    -        "description": "Remote Control Peripheral",
    -        "children": {
    -          "registers": {
    -            "CH0DATA": {
    -              "description": "RMT_CH0DATA_REG.",
    -              "offset": 0,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATA": {
    -                    "description": "Reserved.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "CH1DATA": {
    -              "description": "RMT_CH1DATA_REG.",
    -              "offset": 4,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATA": {
    -                    "description": "Reserved.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "CH2DATA": {
    -              "description": "RMT_CH2DATA_REG.",
    -              "offset": 8,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATA": {
    -                    "description": "Reserved.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "CH3DATA": {
    -              "description": "RMT_CH3DATA_REG.",
    -              "offset": 12,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATA": {
    -                    "description": "Reserved.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "CH2CONF1": {
    -              "description": "RMT_CH2CONF1_REG.",
    -              "offset": 28,
    -              "size": 32,
    -              "reset_value": 488,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_EN": {
    -                    "description": "reg_rx_en_ch2.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "MEM_WR_RST": {
    -                    "description": "reg_mem_wr_rst_ch2.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "APB_MEM_RST": {
    -                    "description": "reg_apb_mem_rst_ch2.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "MEM_OWNER": {
    -                    "description": "reg_mem_owner_ch2.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "RX_FILTER_EN": {
    -                    "description": "reg_rx_filter_en_ch2.",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "RX_FILTER_THRES": {
    -                    "description": "reg_rx_filter_thres_ch2.",
    -                    "offset": 5,
    -                    "size": 8
    -                  },
    -                  "MEM_RX_WRAP_EN": {
    -                    "description": "reg_mem_rx_wrap_en_ch2.",
    -                    "offset": 13,
    -                    "size": 1
    -                  },
    -                  "AFIFO_RST": {
    -                    "description": "reg_afifo_rst_ch2.",
    -                    "offset": 14,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "CONF_UPDATE": {
    -                    "description": "reg_conf_update_ch2.",
    -                    "offset": 15,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CH3CONF1": {
    -              "description": "RMT_CH3CONF1_REG.",
    -              "offset": 36,
    -              "size": 32,
    -              "reset_value": 488,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_EN": {
    -                    "description": "reg_rx_en_ch3.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "MEM_WR_RST": {
    -                    "description": "reg_mem_wr_rst_ch3.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "APB_MEM_RST": {
    -                    "description": "reg_apb_mem_rst_ch3.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "MEM_OWNER": {
    -                    "description": "reg_mem_owner_ch3.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "RX_FILTER_EN": {
    -                    "description": "reg_rx_filter_en_ch3.",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "RX_FILTER_THRES": {
    -                    "description": "reg_rx_filter_thres_ch3.",
    -                    "offset": 5,
    -                    "size": 8
    -                  },
    -                  "MEM_RX_WRAP_EN": {
    -                    "description": "reg_mem_rx_wrap_en_ch3.",
    -                    "offset": 13,
    -                    "size": 1
    -                  },
    -                  "AFIFO_RST": {
    -                    "description": "reg_afifo_rst_ch3.",
    -                    "offset": 14,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "CONF_UPDATE": {
    -                    "description": "reg_conf_update_ch3.",
    -                    "offset": 15,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CH0STATUS": {
    -              "description": "RMT_CH0STATUS_REG.",
    -              "offset": 40,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "MEM_RADDR_EX": {
    -                    "description": "reg_mem_raddr_ex_ch0.",
    -                    "offset": 0,
    -                    "size": 9,
    -                    "access": "read-only"
    -                  },
    -                  "STATE": {
    -                    "description": "reg_state_ch0.",
    -                    "offset": 9,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  },
    -                  "APB_MEM_WADDR": {
    -                    "description": "reg_apb_mem_waddr_ch0.",
    -                    "offset": 12,
    -                    "size": 9,
    -                    "access": "read-only"
    -                  },
    -                  "APB_MEM_RD_ERR": {
    -                    "description": "reg_apb_mem_rd_err_ch0.",
    -                    "offset": 21,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "MEM_EMPTY": {
    -                    "description": "reg_mem_empty_ch0.",
    -                    "offset": 22,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "APB_MEM_WR_ERR": {
    -                    "description": "reg_apb_mem_wr_err_ch0.",
    -                    "offset": 23,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "APB_MEM_RADDR": {
    -                    "description": "reg_apb_mem_raddr_ch0.",
    -                    "offset": 24,
    -                    "size": 8,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CH1STATUS": {
    -              "description": "RMT_CH1STATUS_REG.",
    -              "offset": 44,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "MEM_RADDR_EX": {
    -                    "description": "reg_mem_raddr_ex_ch1.",
    -                    "offset": 0,
    -                    "size": 9,
    -                    "access": "read-only"
    -                  },
    -                  "STATE": {
    -                    "description": "reg_state_ch1.",
    -                    "offset": 9,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  },
    -                  "APB_MEM_WADDR": {
    -                    "description": "reg_apb_mem_waddr_ch1.",
    -                    "offset": 12,
    -                    "size": 9,
    -                    "access": "read-only"
    -                  },
    -                  "APB_MEM_RD_ERR": {
    -                    "description": "reg_apb_mem_rd_err_ch1.",
    -                    "offset": 21,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "MEM_EMPTY": {
    -                    "description": "reg_mem_empty_ch1.",
    -                    "offset": 22,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "APB_MEM_WR_ERR": {
    -                    "description": "reg_apb_mem_wr_err_ch1.",
    -                    "offset": 23,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "APB_MEM_RADDR": {
    -                    "description": "reg_apb_mem_raddr_ch1.",
    -                    "offset": 24,
    -                    "size": 8,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CH2STATUS": {
    -              "description": "RMT_CH2STATUS_REG.",
    -              "offset": 48,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "MEM_WADDR_EX": {
    -                    "description": "reg_mem_waddr_ex_ch2.",
    -                    "offset": 0,
    -                    "size": 9,
    -                    "access": "read-only"
    -                  },
    -                  "APB_MEM_RADDR": {
    -                    "description": "reg_apb_mem_raddr_ch2.",
    -                    "offset": 12,
    -                    "size": 9,
    -                    "access": "read-only"
    -                  },
    -                  "STATE": {
    -                    "description": "reg_state_ch2.",
    -                    "offset": 22,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  },
    -                  "MEM_OWNER_ERR": {
    -                    "description": "reg_mem_owner_err_ch2.",
    -                    "offset": 25,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "MEM_FULL": {
    -                    "description": "reg_mem_full_ch2.",
    -                    "offset": 26,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "APB_MEM_RD_ERR": {
    -                    "description": "reg_apb_mem_rd_err_ch2.",
    -                    "offset": 27,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CH3STATUS": {
    -              "description": "RMT_CH3STATUS_REG.",
    -              "offset": 52,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "MEM_WADDR_EX": {
    -                    "description": "reg_mem_waddr_ex_ch3.",
    -                    "offset": 0,
    -                    "size": 9,
    -                    "access": "read-only"
    -                  },
    -                  "APB_MEM_RADDR": {
    -                    "description": "reg_apb_mem_raddr_ch3.",
    -                    "offset": 12,
    -                    "size": 9,
    -                    "access": "read-only"
    -                  },
    -                  "STATE": {
    -                    "description": "reg_state_ch3.",
    -                    "offset": 22,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  },
    -                  "MEM_OWNER_ERR": {
    -                    "description": "reg_mem_owner_err_ch3.",
    -                    "offset": 25,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "MEM_FULL": {
    -                    "description": "reg_mem_full_ch3.",
    -                    "offset": 26,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "APB_MEM_RD_ERR": {
    -                    "description": "reg_apb_mem_rd_err_ch3.",
    -                    "offset": 27,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_RAW": {
    -              "description": "RMT_INT_RAW_REG.",
    -              "offset": 56,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CH2_RX_THR_EVENT_INT_RAW": {
    -                    "description": "reg_ch2_rx_thr_event_int_raw.",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CH3_RX_THR_EVENT_INT_RAW": {
    -                    "description": "reg_ch3_rx_thr_event_int_raw.",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ST": {
    -              "description": "RMT_INT_ST_REG.",
    -              "offset": 60,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CH2_RX_THR_EVENT_INT_ST": {
    -                    "description": "reg_ch2_rx_thr_event_int_st.",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CH3_RX_THR_EVENT_INT_ST": {
    -                    "description": "reg_ch3_rx_thr_event_int_st.",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ENA": {
    -              "description": "RMT_INT_ENA_REG.",
    -              "offset": 64,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CH2_RX_THR_EVENT_INT_ENA": {
    -                    "description": "reg_ch2_rx_thr_event_int_ena.",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "CH3_RX_THR_EVENT_INT_ENA": {
    -                    "description": "reg_ch3_rx_thr_event_int_ena.",
    -                    "offset": 11,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "INT_CLR": {
    -              "description": "RMT_INT_CLR_REG.",
    -              "offset": 68,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CH2_RX_THR_EVENT_INT_CLR": {
    -                    "description": "reg_ch2_rx_thr_event_int_clr.",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "CH3_RX_THR_EVENT_INT_CLR": {
    -                    "description": "reg_ch3_rx_thr_event_int_clr.",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CH0CARRIER_DUTY": {
    -              "description": "RMT_CH0CARRIER_DUTY_REG.",
    -              "offset": 72,
    -              "size": 32,
    -              "reset_value": 4194368,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CARRIER_LOW": {
    -                    "description": "reg_carrier_low_ch0.",
    -                    "offset": 0,
    -                    "size": 16
    -                  },
    -                  "CARRIER_HIGH": {
    -                    "description": "reg_carrier_high_ch0.",
    -                    "offset": 16,
    -                    "size": 16
    -                  }
    -                }
    -              }
    -            },
    -            "CH1CARRIER_DUTY": {
    -              "description": "RMT_CH1CARRIER_DUTY_REG.",
    -              "offset": 76,
    -              "size": 32,
    -              "reset_value": 4194368,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CARRIER_LOW": {
    -                    "description": "reg_carrier_low_ch1.",
    -                    "offset": 0,
    -                    "size": 16
    -                  },
    -                  "CARRIER_HIGH": {
    -                    "description": "reg_carrier_high_ch1.",
    -                    "offset": 16,
    -                    "size": 16
    -                  }
    -                }
    -              }
    -            },
    -            "CH2_RX_CARRIER_RM": {
    -              "description": "RMT_CH2_RX_CARRIER_RM_REG.",
    -              "offset": 80,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CARRIER_LOW_THRES": {
    -                    "description": "reg_carrier_low_thres_ch2.",
    -                    "offset": 0,
    -                    "size": 16
    -                  },
    -                  "CARRIER_HIGH_THRES": {
    -                    "description": "reg_carrier_high_thres_ch2.",
    -                    "offset": 16,
    -                    "size": 16
    -                  }
    -                }
    -              }
    -            },
    -            "CH3_RX_CARRIER_RM": {
    -              "description": "RMT_CH3_RX_CARRIER_RM_REG.",
    -              "offset": 84,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CARRIER_LOW_THRES": {
    -                    "description": "reg_carrier_low_thres_ch3.",
    -                    "offset": 0,
    -                    "size": 16
    -                  },
    -                  "CARRIER_HIGH_THRES": {
    -                    "description": "reg_carrier_high_thres_ch3.",
    -                    "offset": 16,
    -                    "size": 16
    -                  }
    -                }
    -              }
    -            },
    -            "SYS_CONF": {
    -              "description": "RMT_SYS_CONF_REG.",
    -              "offset": 104,
    -              "size": 32,
    -              "reset_value": 83886096,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "APB_FIFO_MASK": {
    -                    "description": "reg_apb_fifo_mask.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "MEM_CLK_FORCE_ON": {
    -                    "description": "reg_mem_clk_force_on.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "MEM_FORCE_PD": {
    -                    "description": "reg_rmt_mem_force_pd.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "MEM_FORCE_PU": {
    -                    "description": "reg_rmt_mem_force_pu.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "SCLK_DIV_NUM": {
    -                    "description": "reg_rmt_sclk_div_num.",
    -                    "offset": 4,
    -                    "size": 8
    -                  },
    -                  "SCLK_DIV_A": {
    -                    "description": "reg_rmt_sclk_div_a.",
    -                    "offset": 12,
    -                    "size": 6
    -                  },
    -                  "SCLK_DIV_B": {
    -                    "description": "reg_rmt_sclk_div_b.",
    -                    "offset": 18,
    -                    "size": 6
    -                  },
    -                  "SCLK_SEL": {
    -                    "description": "reg_rmt_sclk_sel.",
    -                    "offset": 24,
    -                    "size": 2
    -                  },
    -                  "SCLK_ACTIVE": {
    -                    "description": "reg_rmt_sclk_active.",
    -                    "offset": 26,
    -                    "size": 1
    -                  },
    -                  "CLK_EN": {
    -                    "description": "reg_clk_en.",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "TX_SIM": {
    -              "description": "RMT_TX_SIM_REG.",
    -              "offset": 108,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_SIM_CH0": {
    -                    "description": "reg_rmt_tx_sim_ch0.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "TX_SIM_CH1": {
    -                    "description": "reg_rmt_tx_sim_ch1.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "TX_SIM_EN": {
    -                    "description": "reg_rmt_tx_sim_en.",
    -                    "offset": 2,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "REF_CNT_RST": {
    -              "description": "RMT_REF_CNT_RST_REG.",
    -              "offset": 112,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CH0": {
    -                    "description": "reg_ref_cnt_rst_ch0.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "CH1": {
    -                    "description": "reg_ref_cnt_rst_ch1.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "CH2": {
    -                    "description": "reg_ref_cnt_rst_ch2.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "CH3": {
    -                    "description": "reg_ref_cnt_rst_ch3.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DATE": {
    -              "description": "RMT_DATE_REG.",
    -              "offset": 204,
    -              "size": 32,
    -              "reset_value": 33579569,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATE": {
    -                    "description": "reg_rmt_date.",
    -                    "offset": 0,
    -                    "size": 28
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "RNG": {
    -        "description": "Hardware random number generator",
    -        "children": {
    -          "registers": {
    -            "DATA": {
    -              "description": "Random number data",
    -              "offset": 176,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295
    -            }
    -          }
    -        }
    -      },
    -      "RSA": {
    -        "description": "RSA (Rivest Shamir Adleman) Accelerator",
    -        "children": {
    -          "registers": {
    -            "M_MEM": {
    -              "description": "The memory that stores M",
    -              "offset": 0,
    -              "size": 8,
    -              "count": 16,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295
    -            },
    -            "Z_MEM": {
    -              "description": "The memory that stores Z",
    -              "offset": 512,
    -              "size": 8,
    -              "count": 16,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295
    -            },
    -            "Y_MEM": {
    -              "description": "The memory that stores Y",
    -              "offset": 1024,
    -              "size": 8,
    -              "count": 16,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295
    -            },
    -            "X_MEM": {
    -              "description": "The memory that stores X",
    -              "offset": 1536,
    -              "size": 8,
    -              "count": 16,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295
    -            },
    -            "M_PRIME": {
    -              "description": "RSA M_prime register",
    -              "offset": 2048,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "M_PRIME": {
    -                    "description": "Those bits stores m'",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "MODE": {
    -              "description": "RSA mode register",
    -              "offset": 2052,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "MODE": {
    -                    "description": "rsa mode (rsa length).",
    -                    "offset": 0,
    -                    "size": 7
    -                  }
    -                }
    -              }
    -            },
    -            "QUERY_CLEAN": {
    -              "description": "RSA query clean register",
    -              "offset": 2056,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "QUERY_CLEAN": {
    -                    "description": "query clean",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "SET_START_MODEXP": {
    -              "description": "RSA modular exponentiation trigger register.",
    -              "offset": 2060,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SET_START_MODEXP": {
    -                    "description": "start modular exponentiation",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "SET_START_MODMULT": {
    -              "description": "RSA modular multiplication trigger register.",
    -              "offset": 2064,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SET_START_MODMULT": {
    -                    "description": "start modular multiplication",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "SET_START_MULT": {
    -              "description": "RSA normal multiplication trigger register.",
    -              "offset": 2068,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SET_START_MULT": {
    -                    "description": "start multiplicaiton",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "QUERY_IDLE": {
    -              "description": "RSA query idle register",
    -              "offset": 2072,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "QUERY_IDLE": {
    -                    "description": "query rsa idle. 1'b0: busy, 1'b1: idle",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_CLR": {
    -              "description": "RSA interrupt clear register",
    -              "offset": 2076,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CLEAR_INTERRUPT": {
    -                    "description": "set this bit to clear RSA interrupt.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CONSTANT_TIME": {
    -              "description": "RSA constant time option register",
    -              "offset": 2080,
    -              "size": 32,
    -              "reset_value": 1,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CONSTANT_TIME": {
    -                    "description": "Configure this bit to 0 for acceleration. 0: with acceleration, 1: without acceleration(defalut).",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "SEARCH_ENABLE": {
    -              "description": "RSA search option",
    -              "offset": 2084,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SEARCH_ENABLE": {
    -                    "description": "Configure this bit to 1 for acceleration. 1: with acceleration, 0: without acceleration(default). This option should be used together with RSA_SEARCH_POS.",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "SEARCH_POS": {
    -              "description": "RSA search position configure register",
    -              "offset": 2088,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SEARCH_POS": {
    -                    "description": "Configure this field to set search position. This field should be used together with RSA_SEARCH_ENABLE. The field is only meaningful when RSA_SEARCH_ENABLE is high.",
    -                    "offset": 0,
    -                    "size": 12
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ENA": {
    -              "description": "RSA interrupt enable register",
    -              "offset": 2092,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INT_ENA": {
    -                    "description": "Set this bit to enable interrupt that occurs when rsa calculation is done. 1'b0: disable, 1'b1: enable(default).",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DATE": {
    -              "description": "RSA version control register",
    -              "offset": 2096,
    -              "size": 32,
    -              "reset_value": 538969624,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATE": {
    -                    "description": "rsa version information",
    -                    "offset": 0,
    -                    "size": 30
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "RTC_CNTL": {
    -        "description": "Real-Time Clock Control",
    -        "children": {
    -          "registers": {
    -            "OPTIONS0": {
    -              "description": "rtc configure register",
    -              "offset": 0,
    -              "size": 32,
    -              "reset_value": 469803008,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SW_STALL_APPCPU_C0": {
    -                    "description": "{reg_sw_stall_appcpu_c1[5:0],  reg_sw_stall_appcpu_c0[1:0]} == 0x86 will stall APP CPU",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "SW_STALL_PROCPU_C0": {
    -                    "description": "{reg_sw_stall_procpu_c1[5:0],  reg_sw_stall_procpu_c0[1:0]} == 0x86 will stall PRO CPU",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "SW_APPCPU_RST": {
    -                    "description": "APP CPU SW reset",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SW_PROCPU_RST": {
    -                    "description": "PRO CPU SW reset",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "BB_I2C_FORCE_PD": {
    -                    "description": "BB_I2C force power down",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "BB_I2C_FORCE_PU": {
    -                    "description": "BB_I2C force power up",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "BBPLL_I2C_FORCE_PD": {
    -                    "description": "BB_PLL _I2C force power down",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "BBPLL_I2C_FORCE_PU": {
    -                    "description": "BB_PLL_I2C force power up",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "BBPLL_FORCE_PD": {
    -                    "description": "BB_PLL force power down",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "BBPLL_FORCE_PU": {
    -                    "description": "BB_PLL force power up",
    -                    "offset": 11,
    -                    "size": 1
    -                  },
    -                  "XTL_FORCE_PD": {
    -                    "description": "crystall force power down",
    -                    "offset": 12,
    -                    "size": 1
    -                  },
    -                  "XTL_FORCE_PU": {
    -                    "description": "crystall force power up",
    -                    "offset": 13,
    -                    "size": 1
    -                  },
    -                  "XTL_EN_WAIT": {
    -                    "description": "wait bias_sleep and current source wakeup",
    -                    "offset": 14,
    -                    "size": 4
    -                  },
    -                  "XTL_EXT_CTR_SEL": {
    -                    "description": "analog configure",
    -                    "offset": 20,
    -                    "size": 3
    -                  },
    -                  "XTL_FORCE_ISO": {
    -                    "description": "analog configure",
    -                    "offset": 23,
    -                    "size": 1
    -                  },
    -                  "PLL_FORCE_ISO": {
    -                    "description": "analog configure",
    -                    "offset": 24,
    -                    "size": 1
    -                  },
    -                  "ANALOG_FORCE_ISO": {
    -                    "description": "analog configure",
    -                    "offset": 25,
    -                    "size": 1
    -                  },
    -                  "XTL_FORCE_NOISO": {
    -                    "description": "analog configure",
    -                    "offset": 26,
    -                    "size": 1
    -                  },
    -                  "PLL_FORCE_NOISO": {
    -                    "description": "analog configure",
    -                    "offset": 27,
    -                    "size": 1
    -                  },
    -                  "ANALOG_FORCE_NOISO": {
    -                    "description": "analog configure",
    -                    "offset": 28,
    -                    "size": 1
    -                  },
    -                  "DG_WRAP_FORCE_RST": {
    -                    "description": "digital wrap force reset in deep sleep",
    -                    "offset": 29,
    -                    "size": 1
    -                  },
    -                  "DG_WRAP_FORCE_NORST": {
    -                    "description": "digital core force no reset in deep sleep",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "SW_SYS_RST": {
    -                    "description": "SW system reset",
    -                    "offset": 31,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "SLP_TIMER0": {
    -              "description": "rtc configure register",
    -              "offset": 4,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SLP_VAL_LO": {
    -                    "description": "configure the  sleep time",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "SLP_TIMER1": {
    -              "description": "rtc configure register",
    -              "offset": 8,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SLP_VAL_HI": {
    -                    "description": "RTC sleep timer high 16 bits",
    -                    "offset": 0,
    -                    "size": 16
    -                  },
    -                  "RTC_MAIN_TIMER_ALARM_EN": {
    -                    "description": "timer alarm enable bit",
    -                    "offset": 16,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "TIME_UPDATE": {
    -              "description": "rtc configure register",
    -              "offset": 12,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_SYS_STALL": {
    -                    "description": "Enable to record system stall time",
    -                    "offset": 27,
    -                    "size": 1
    -                  },
    -                  "TIMER_XTL_OFF": {
    -                    "description": "Enable to record 40M XTAL OFF time",
    -                    "offset": 28,
    -                    "size": 1
    -                  },
    -                  "TIMER_SYS_RST": {
    -                    "description": "enable to record system reset time",
    -                    "offset": 29,
    -                    "size": 1
    -                  },
    -                  "RTC_TIME_UPDATE": {
    -                    "description": "Set 1: to update register with RTC timer",
    -                    "offset": 31,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "TIME_LOW0": {
    -              "description": "rtc configure register",
    -              "offset": 16,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_TIMER_VALUE0_LOW": {
    -                    "description": "RTC timer low 32 bits",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "TIME_HIGH0": {
    -              "description": "rtc configure register",
    -              "offset": 20,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_TIMER_VALUE0_HIGH": {
    -                    "description": "RTC timer high 16 bits",
    -                    "offset": 0,
    -                    "size": 16,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "STATE0": {
    -              "description": "rtc configure register",
    -              "offset": 24,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_SW_CPU_INT": {
    -                    "description": "rtc software interrupt to main cpu",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RTC_SLP_REJECT_CAUSE_CLR": {
    -                    "description": "clear rtc sleep reject cause",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "APB2RTC_BRIDGE_SEL": {
    -                    "description": "1: APB to RTC using bridge",
    -                    "offset": 22,
    -                    "size": 1
    -                  },
    -                  "SDIO_ACTIVE_IND": {
    -                    "description": "SDIO active indication",
    -                    "offset": 28,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SLP_WAKEUP": {
    -                    "description": "leep wakeup bit",
    -                    "offset": 29,
    -                    "size": 1
    -                  },
    -                  "SLP_REJECT": {
    -                    "description": "leep reject bit",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "SLEEP_EN": {
    -                    "description": "sleep enable bit",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "TIMER1": {
    -              "description": "rtc configure register",
    -              "offset": 28,
    -              "size": 32,
    -              "reset_value": 672400387,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_STALL_EN": {
    -                    "description": "CPU stall enable bit",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "CPU_STALL_WAIT": {
    -                    "description": "CPU stall wait cycles in fast_clk_rtc",
    -                    "offset": 1,
    -                    "size": 5
    -                  },
    -                  "CK8M_WAIT": {
    -                    "description": "CK8M wait cycles in slow_clk_rtc",
    -                    "offset": 6,
    -                    "size": 8
    -                  },
    -                  "XTL_BUF_WAIT": {
    -                    "description": "XTAL wait cycles in slow_clk_rtc",
    -                    "offset": 14,
    -                    "size": 10
    -                  },
    -                  "PLL_BUF_WAIT": {
    -                    "description": "PLL wait cycles in slow_clk_rtc",
    -                    "offset": 24,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "TIMER2": {
    -              "description": "rtc configure register",
    -              "offset": 32,
    -              "size": 32,
    -              "reset_value": 16777216,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "MIN_TIME_CK8M_OFF": {
    -                    "description": "minimal cycles in slow_clk_rtc for CK8M in power down state",
    -                    "offset": 24,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "TIMER3": {
    -              "description": "rtc configure register",
    -              "offset": 36,
    -              "size": 32,
    -              "reset_value": 168299016,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "WIFI_WAIT_TIMER": {
    -                    "description": "wifi power domain wakeup time",
    -                    "offset": 0,
    -                    "size": 9
    -                  },
    -                  "WIFI_POWERUP_TIMER": {
    -                    "description": "wifi power domain power on time",
    -                    "offset": 9,
    -                    "size": 7
    -                  },
    -                  "BT_WAIT_TIMER": {
    -                    "description": "bt power domain wakeup time",
    -                    "offset": 16,
    -                    "size": 9
    -                  },
    -                  "BT_POWERUP_TIMER": {
    -                    "description": "bt power domain power on time",
    -                    "offset": 25,
    -                    "size": 7
    -                  }
    -                }
    -              }
    -            },
    -            "TIMER4": {
    -              "description": "rtc configure register",
    -              "offset": 40,
    -              "size": 32,
    -              "reset_value": 270535176,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_TOP_WAIT_TIMER": {
    -                    "description": "cpu top power domain wakeup time",
    -                    "offset": 0,
    -                    "size": 9
    -                  },
    -                  "CPU_TOP_POWERUP_TIMER": {
    -                    "description": "cpu top power domain power on time",
    -                    "offset": 9,
    -                    "size": 7
    -                  },
    -                  "DG_WRAP_WAIT_TIMER": {
    -                    "description": "digital wrap power domain wakeup time",
    -                    "offset": 16,
    -                    "size": 9
    -                  },
    -                  "DG_WRAP_POWERUP_TIMER": {
    -                    "description": "digital wrap power domain power on time",
    -                    "offset": 25,
    -                    "size": 7
    -                  }
    -                }
    -              }
    -            },
    -            "TIMER5": {
    -              "description": "rtc configure register",
    -              "offset": 44,
    -              "size": 32,
    -              "reset_value": 32768,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "MIN_SLP_VAL": {
    -                    "description": "minimal sleep cycles in slow_clk_rtc",
    -                    "offset": 8,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "TIMER6": {
    -              "description": "rtc configure register",
    -              "offset": 48,
    -              "size": 32,
    -              "reset_value": 168296448,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DG_PERI_WAIT_TIMER": {
    -                    "description": "digital peri power domain wakeup time",
    -                    "offset": 16,
    -                    "size": 9
    -                  },
    -                  "DG_PERI_POWERUP_TIMER": {
    -                    "description": "digital peri power domain power on time",
    -                    "offset": 25,
    -                    "size": 7
    -                  }
    -                }
    -              }
    -            },
    -            "ANA_CONF": {
    -              "description": "rtc configure register",
    -              "offset": 52,
    -              "size": 32,
    -              "reset_value": 12845056,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RESET_POR_FORCE_PD": {
    -                    "description": "force no bypass i2c power on reset",
    -                    "offset": 18,
    -                    "size": 1
    -                  },
    -                  "RESET_POR_FORCE_PU": {
    -                    "description": "force bypass i2c power on reset",
    -                    "offset": 19,
    -                    "size": 1
    -                  },
    -                  "GLITCH_RST_EN": {
    -                    "description": "enable glitch reset",
    -                    "offset": 20,
    -                    "size": 1
    -                  },
    -                  "SAR_I2C_PU": {
    -                    "description": "PLLA force power up",
    -                    "offset": 22,
    -                    "size": 1
    -                  },
    -                  "PLLA_FORCE_PD": {
    -                    "description": "PLLA force power down",
    -                    "offset": 23,
    -                    "size": 1
    -                  },
    -                  "PLLA_FORCE_PU": {
    -                    "description": "PLLA force power up",
    -                    "offset": 24,
    -                    "size": 1
    -                  },
    -                  "BBPLL_CAL_SLP_START": {
    -                    "description": "start BBPLL calibration during sleep",
    -                    "offset": 25,
    -                    "size": 1
    -                  },
    -                  "PVTMON_PU": {
    -                    "description": "1: PVTMON power up",
    -                    "offset": 26,
    -                    "size": 1
    -                  },
    -                  "TXRF_I2C_PU": {
    -                    "description": "1: TXRF_I2C power up",
    -                    "offset": 27,
    -                    "size": 1
    -                  },
    -                  "RFRX_PBUS_PU": {
    -                    "description": "1: RFRX_PBUS power up",
    -                    "offset": 28,
    -                    "size": 1
    -                  },
    -                  "CKGEN_I2C_PU": {
    -                    "description": "1: CKGEN_I2C power up",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "PLL_I2C_PU": {
    -                    "description": "power up pll i2c",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "RESET_STATE": {
    -              "description": "rtc configure register",
    -              "offset": 56,
    -              "size": 32,
    -              "reset_value": 12288,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RESET_CAUSE_PROCPU": {
    -                    "description": "reset cause of PRO CPU",
    -                    "offset": 0,
    -                    "size": 6,
    -                    "access": "read-only"
    -                  },
    -                  "RESET_CAUSE_APPCPU": {
    -                    "description": "reset cause of APP CPU",
    -                    "offset": 6,
    -                    "size": 6,
    -                    "access": "read-only"
    -                  },
    -                  "STAT_VECTOR_SEL_APPCPU": {
    -                    "description": "APP CPU state vector sel",
    -                    "offset": 12,
    -                    "size": 1
    -                  },
    -                  "STAT_VECTOR_SEL_PROCPU": {
    -                    "description": "PRO CPU state vector sel",
    -                    "offset": 13,
    -                    "size": 1
    -                  },
    -                  "ALL_RESET_FLAG_PROCPU": {
    -                    "description": "PRO CPU reset_flag",
    -                    "offset": 14,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "ALL_RESET_FLAG_APPCPU": {
    -                    "description": "APP CPU reset flag",
    -                    "offset": 15,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "ALL_RESET_FLAG_CLR_PROCPU": {
    -                    "description": "clear PRO CPU reset_flag",
    -                    "offset": 16,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "ALL_RESET_FLAG_CLR_APPCPU": {
    -                    "description": "clear APP CPU reset flag",
    -                    "offset": 17,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OCD_HALT_ON_RESET_APPCPU": {
    -                    "description": "APPCPU OcdHaltOnReset",
    -                    "offset": 18,
    -                    "size": 1
    -                  },
    -                  "OCD_HALT_ON_RESET_PROCPU": {
    -                    "description": "PROCPU OcdHaltOnReset",
    -                    "offset": 19,
    -                    "size": 1
    -                  },
    -                  "JTAG_RESET_FLAG_PROCPU": {
    -                    "description": "configure jtag reset configure",
    -                    "offset": 20,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "JTAG_RESET_FLAG_APPCPU": {
    -                    "description": "configure jtag reset configure",
    -                    "offset": 21,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "JTAG_RESET_FLAG_CLR_PROCPU": {
    -                    "description": "configure jtag reset configure",
    -                    "offset": 22,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "JTAG_RESET_FLAG_CLR_APPCPU": {
    -                    "description": "configure jtag reset configure",
    -                    "offset": 23,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RTC_DRESET_MASK_APPCPU": {
    -                    "description": "configure dreset configure",
    -                    "offset": 24,
    -                    "size": 1
    -                  },
    -                  "RTC_DRESET_MASK_PROCPU": {
    -                    "description": "configure dreset configure",
    -                    "offset": 25,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "WAKEUP_STATE": {
    -              "description": "rtc configure register",
    -              "offset": 60,
    -              "size": 32,
    -              "reset_value": 393216,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_WAKEUP_ENA": {
    -                    "description": "wakeup enable bitmap",
    -                    "offset": 15,
    -                    "size": 17
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ENA_RTC": {
    -              "description": "rtc configure register",
    -              "offset": 64,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SLP_WAKEUP_INT_ENA": {
    -                    "description": "enable sleep wakeup interrupt",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "SLP_REJECT_INT_ENA": {
    -                    "description": "enable sleep reject interrupt",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "RTC_WDT_INT_ENA": {
    -                    "description": "enable RTC WDT interrupt",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "RTC_BROWN_OUT_INT_ENA": {
    -                    "description": "enable brown out interrupt",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "RTC_MAIN_TIMER_INT_ENA": {
    -                    "description": "enable RTC main timer interrupt",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "RTC_SWD_INT_ENA": {
    -                    "description": "enable super watch dog interrupt",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "RTC_XTAL32K_DEAD_INT_ENA": {
    -                    "description": "enable xtal32k_dead  interrupt",
    -                    "offset": 16,
    -                    "size": 1
    -                  },
    -                  "RTC_GLITCH_DET_INT_ENA": {
    -                    "description": "enbale gitch det interrupt",
    -                    "offset": 19,
    -                    "size": 1
    -                  },
    -                  "RTC_BBPLL_CAL_INT_ENA": {
    -                    "description": "enbale bbpll cal end interrupt",
    -                    "offset": 20,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "INT_RAW_RTC": {
    -              "description": "rtc configure register",
    -              "offset": 68,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SLP_WAKEUP_INT_RAW": {
    -                    "description": "sleep wakeup interrupt raw",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SLP_REJECT_INT_RAW": {
    -                    "description": "sleep reject interrupt raw",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_WDT_INT_RAW": {
    -                    "description": "RTC WDT interrupt raw",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_BROWN_OUT_INT_RAW": {
    -                    "description": "brown out interrupt raw",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_MAIN_TIMER_INT_RAW": {
    -                    "description": "RTC main timer interrupt raw",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_SWD_INT_RAW": {
    -                    "description": "super watch dog interrupt raw",
    -                    "offset": 15,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_XTAL32K_DEAD_INT_RAW": {
    -                    "description": "xtal32k dead detection interrupt raw",
    -                    "offset": 16,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_GLITCH_DET_INT_RAW": {
    -                    "description": "glitch_det_interrupt_raw",
    -                    "offset": 19,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_BBPLL_CAL_INT_RAW": {
    -                    "description": "bbpll cal end interrupt state",
    -                    "offset": 20,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ST_RTC": {
    -              "description": "rtc configure register",
    -              "offset": 72,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SLP_WAKEUP_INT_ST": {
    -                    "description": "sleep wakeup interrupt state",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SLP_REJECT_INT_ST": {
    -                    "description": "sleep reject interrupt state",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_WDT_INT_ST": {
    -                    "description": "RTC WDT interrupt state",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_BROWN_OUT_INT_ST": {
    -                    "description": "brown out interrupt state",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_MAIN_TIMER_INT_ST": {
    -                    "description": "RTC main timer interrupt state",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_SWD_INT_ST": {
    -                    "description": "super watch dog interrupt state",
    -                    "offset": 15,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_XTAL32K_DEAD_INT_ST": {
    -                    "description": "xtal32k dead detection interrupt state",
    -                    "offset": 16,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_GLITCH_DET_INT_ST": {
    -                    "description": "glitch_det_interrupt state",
    -                    "offset": 19,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_BBPLL_CAL_INT_ST": {
    -                    "description": "bbpll cal end interrupt state",
    -                    "offset": 20,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_CLR_RTC": {
    -              "description": "rtc configure register",
    -              "offset": 76,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SLP_WAKEUP_INT_CLR": {
    -                    "description": "Clear sleep wakeup interrupt state",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SLP_REJECT_INT_CLR": {
    -                    "description": "Clear sleep reject interrupt state",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RTC_WDT_INT_CLR": {
    -                    "description": "Clear RTC WDT interrupt state",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RTC_BROWN_OUT_INT_CLR": {
    -                    "description": "Clear brown out interrupt state",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RTC_MAIN_TIMER_INT_CLR": {
    -                    "description": "Clear RTC main timer interrupt state",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RTC_SWD_INT_CLR": {
    -                    "description": "Clear super watch dog interrupt state",
    -                    "offset": 15,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RTC_XTAL32K_DEAD_INT_CLR": {
    -                    "description": "Clear RTC WDT interrupt state",
    -                    "offset": 16,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RTC_GLITCH_DET_INT_CLR": {
    -                    "description": "Clear glitch det interrupt state",
    -                    "offset": 19,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RTC_BBPLL_CAL_INT_CLR": {
    -                    "description": "clear bbpll cal end interrupt state",
    -                    "offset": 20,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "STORE0": {
    -              "description": "rtc configure register",
    -              "offset": 80,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_SCRATCH0": {
    -                    "description": "reserved register",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "STORE1": {
    -              "description": "rtc configure register",
    -              "offset": 84,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_SCRATCH1": {
    -                    "description": "reserved register",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "STORE2": {
    -              "description": "rtc configure register",
    -              "offset": 88,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_SCRATCH2": {
    -                    "description": "reserved register",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "STORE3": {
    -              "description": "rtc configure register",
    -              "offset": 92,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_SCRATCH3": {
    -                    "description": "reserved register",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "EXT_XTL_CONF": {
    -              "description": "rtc configure register",
    -              "offset": 96,
    -              "size": 32,
    -              "reset_value": 420992,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "XTAL32K_WDT_EN": {
    -                    "description": "xtal 32k watch dog enable",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "XTAL32K_WDT_CLK_FO": {
    -                    "description": "xtal 32k watch dog clock force on",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "XTAL32K_WDT_RESET": {
    -                    "description": "xtal 32k watch dog sw reset",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "XTAL32K_EXT_CLK_FO": {
    -                    "description": "xtal 32k external xtal clock force on",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "XTAL32K_AUTO_BACKUP": {
    -                    "description": "xtal 32k switch to back up clock when xtal is dead",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "XTAL32K_AUTO_RESTART": {
    -                    "description": "xtal 32k restart xtal when xtal is dead",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "XTAL32K_AUTO_RETURN": {
    -                    "description": "xtal 32k switch back xtal when xtal is restarted",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "XTAL32K_XPD_FORCE": {
    -                    "description": "Xtal 32k xpd control by sw or fsm",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "ENCKINIT_XTAL_32K": {
    -                    "description": "apply an internal clock to help xtal 32k to start",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "DBUF_XTAL_32K": {
    -                    "description": "0: single-end buffer 1: differential buffer",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "DGM_XTAL_32K": {
    -                    "description": "xtal_32k gm control",
    -                    "offset": 10,
    -                    "size": 3
    -                  },
    -                  "DRES_XTAL_32K": {
    -                    "description": "DRES_XTAL_32K",
    -                    "offset": 13,
    -                    "size": 3
    -                  },
    -                  "XPD_XTAL_32K": {
    -                    "description": "XPD_XTAL_32K",
    -                    "offset": 16,
    -                    "size": 1
    -                  },
    -                  "DAC_XTAL_32K": {
    -                    "description": "DAC_XTAL_32K",
    -                    "offset": 17,
    -                    "size": 3
    -                  },
    -                  "RTC_WDT_STATE": {
    -                    "description": "state of 32k_wdt",
    -                    "offset": 20,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_XTAL32K_GPIO_SEL": {
    -                    "description": "XTAL_32K sel. 0: external XTAL_32K",
    -                    "offset": 23,
    -                    "size": 1
    -                  },
    -                  "XTL_EXT_CTR_LV": {
    -                    "description": "0: power down XTAL at high level",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "XTL_EXT_CTR_EN": {
    -                    "description": "enable gpio configure xtal power on",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "EXT_WAKEUP_CONF": {
    -              "description": "rtc configure register",
    -              "offset": 100,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "GPIO_WAKEUP_FILTER": {
    -                    "description": "enable filter for gpio wakeup event",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "SLP_REJECT_CONF": {
    -              "description": "rtc configure register",
    -              "offset": 104,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_SLEEP_REJECT_ENA": {
    -                    "description": "sleep reject enable",
    -                    "offset": 12,
    -                    "size": 18
    -                  },
    -                  "LIGHT_SLP_REJECT_EN": {
    -                    "description": "enable reject for light sleep",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "DEEP_SLP_REJECT_EN": {
    -                    "description": "enable reject for deep sleep",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_PERIOD_CONF": {
    -              "description": "rtc configure register",
    -              "offset": 108,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_CPUSEL_CONF": {
    -                    "description": "CPU sel option",
    -                    "offset": 29,
    -                    "size": 1
    -                  },
    -                  "RTC_CPUPERIOD_SEL": {
    -                    "description": "CPU clk sel option",
    -                    "offset": 30,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "CLK_CONF": {
    -              "description": "rtc configure register",
    -              "offset": 112,
    -              "size": 32,
    -              "reset_value": 290992664,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "EFUSE_CLK_FORCE_GATING": {
    -                    "description": "efuse_clk_force_gating",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "EFUSE_CLK_FORCE_NOGATING": {
    -                    "description": "efuse_clk_force_nogating",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "CK8M_DIV_SEL_VLD": {
    -                    "description": "used to sync reg_ck8m_div_sel bus. Clear vld before set reg_ck8m_div_sel",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "CK8M_DIV": {
    -                    "description": "CK8M_D256_OUT divider. 00: div128",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "ENB_CK8M": {
    -                    "description": "disable CK8M and CK8M_D256_OUT",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "ENB_CK8M_DIV": {
    -                    "description": "1: CK8M_D256_OUT is actually CK8M",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "DIG_XTAL32K_EN": {
    -                    "description": "enable CK_XTAL_32K for digital core (no relationship with RTC core)",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "DIG_CLK8M_D256_EN": {
    -                    "description": "enable CK8M_D256_OUT for digital core (no relationship with RTC core)",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "DIG_CLK8M_EN": {
    -                    "description": "enable CK8M for digital core (no relationship with RTC core)",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "CK8M_DIV_SEL": {
    -                    "description": "divider = reg_ck8m_div_sel + 1",
    -                    "offset": 12,
    -                    "size": 3
    -                  },
    -                  "XTAL_FORCE_NOGATING": {
    -                    "description": "XTAL force no gating during sleep",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "CK8M_FORCE_NOGATING": {
    -                    "description": "CK8M force no gating during sleep",
    -                    "offset": 16,
    -                    "size": 1
    -                  },
    -                  "CK8M_DFREQ": {
    -                    "description": "CK8M_DFREQ",
    -                    "offset": 17,
    -                    "size": 8
    -                  },
    -                  "CK8M_FORCE_PD": {
    -                    "description": "CK8M force power down",
    -                    "offset": 25,
    -                    "size": 1
    -                  },
    -                  "CK8M_FORCE_PU": {
    -                    "description": "CK8M force power up",
    -                    "offset": 26,
    -                    "size": 1
    -                  },
    -                  "XTAL_GLOBAL_FORCE_GATING": {
    -                    "description": "force enable xtal clk gating",
    -                    "offset": 27,
    -                    "size": 1
    -                  },
    -                  "XTAL_GLOBAL_FORCE_NOGATING": {
    -                    "description": "force bypass xtal clk gating",
    -                    "offset": 28,
    -                    "size": 1
    -                  },
    -                  "FAST_CLK_RTC_SEL": {
    -                    "description": "fast_clk_rtc sel. 0: XTAL div 4",
    -                    "offset": 29,
    -                    "size": 1
    -                  },
    -                  "ANA_CLK_RTC_SEL": {
    -                    "description": "slelect rtc slow clk",
    -                    "offset": 30,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "SLOW_CLK_CONF": {
    -              "description": "rtc configure register",
    -              "offset": 116,
    -              "size": 32,
    -              "reset_value": 4194304,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_ANA_CLK_DIV_VLD": {
    -                    "description": "used to sync div bus. clear vld before set reg_rtc_ana_clk_div",
    -                    "offset": 22,
    -                    "size": 1
    -                  },
    -                  "RTC_ANA_CLK_DIV": {
    -                    "description": "the clk divider num of RTC_CLK",
    -                    "offset": 23,
    -                    "size": 8
    -                  },
    -                  "RTC_SLOW_CLK_NEXT_EDGE": {
    -                    "description": "flag rtc_slow_clk_next_edge",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "SDIO_CONF": {
    -              "description": "rtc configure register",
    -              "offset": 120,
    -              "size": 32,
    -              "reset_value": 179355146,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SDIO_TIMER_TARGET": {
    -                    "description": "timer count to apply reg_sdio_dcap after sdio power on",
    -                    "offset": 0,
    -                    "size": 8
    -                  },
    -                  "SDIO_DTHDRV": {
    -                    "description": "Tieh = 1 mode drive ability. Initially set to 0 to limit charge current",
    -                    "offset": 9,
    -                    "size": 2
    -                  },
    -                  "SDIO_DCAP": {
    -                    "description": "ability to prevent LDO from overshoot",
    -                    "offset": 11,
    -                    "size": 2
    -                  },
    -                  "SDIO_INITI": {
    -                    "description": "add resistor from ldo output to ground. 0: no res",
    -                    "offset": 13,
    -                    "size": 2
    -                  },
    -                  "SDIO_EN_INITI": {
    -                    "description": "0 to set init[1:0]=0",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "SDIO_DCURLIM": {
    -                    "description": "tune current limit threshold when tieh = 0. About 800mA/(8+d)",
    -                    "offset": 16,
    -                    "size": 3
    -                  },
    -                  "SDIO_MODECURLIM": {
    -                    "description": "select current limit mode",
    -                    "offset": 19,
    -                    "size": 1
    -                  },
    -                  "SDIO_ENCURLIM": {
    -                    "description": "enable current limit",
    -                    "offset": 20,
    -                    "size": 1
    -                  },
    -                  "SDIO_REG_PD_EN": {
    -                    "description": "power down SDIO_REG in sleep. Only active when reg_sdio_force = 0",
    -                    "offset": 21,
    -                    "size": 1
    -                  },
    -                  "SDIO_FORCE": {
    -                    "description": "1: use SW option to control SDIO_REG",
    -                    "offset": 22,
    -                    "size": 1
    -                  },
    -                  "SDIO_TIEH": {
    -                    "description": "SW option for SDIO_TIEH. Only active when reg_sdio_force = 1",
    -                    "offset": 23,
    -                    "size": 1
    -                  },
    -                  "_1P8_READY": {
    -                    "description": "read only register for REG1P8_READY",
    -                    "offset": 24,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DREFL_SDIO": {
    -                    "description": "SW option for DREFL_SDIO. Only active when reg_sdio_force = 1",
    -                    "offset": 25,
    -                    "size": 2
    -                  },
    -                  "DREFM_SDIO": {
    -                    "description": "SW option for DREFM_SDIO. Only active when reg_sdio_force = 1",
    -                    "offset": 27,
    -                    "size": 2
    -                  },
    -                  "DREFH_SDIO": {
    -                    "description": "SW option for DREFH_SDIO. Only active when reg_sdio_force = 1",
    -                    "offset": 29,
    -                    "size": 2
    -                  },
    -                  "XPD_SDIO": {
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "BIAS_CONF": {
    -              "description": "rtc configure register",
    -              "offset": 124,
    -              "size": 32,
    -              "reset_value": 67584,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DG_VDD_DRV_B_SLP": {
    -                    "offset": 0,
    -                    "size": 8
    -                  },
    -                  "DG_VDD_DRV_B_SLP_EN": {
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "BIAS_BUF_IDLE": {
    -                    "description": "bias buf when rtc in normal work state",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "BIAS_BUF_WAKE": {
    -                    "description": "bias buf when rtc in wakeup state",
    -                    "offset": 11,
    -                    "size": 1
    -                  },
    -                  "BIAS_BUF_DEEP_SLP": {
    -                    "description": "bias buf when rtc in sleep state",
    -                    "offset": 12,
    -                    "size": 1
    -                  },
    -                  "BIAS_BUF_MONITOR": {
    -                    "description": "bias buf when rtc in monitor state",
    -                    "offset": 13,
    -                    "size": 1
    -                  },
    -                  "PD_CUR_DEEP_SLP": {
    -                    "description": "xpd cur when rtc in sleep_state",
    -                    "offset": 14,
    -                    "size": 1
    -                  },
    -                  "PD_CUR_MONITOR": {
    -                    "description": "xpd cur when rtc in monitor state",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "BIAS_SLEEP_DEEP_SLP": {
    -                    "description": "bias_sleep when rtc in sleep_state",
    -                    "offset": 16,
    -                    "size": 1
    -                  },
    -                  "BIAS_SLEEP_MONITOR": {
    -                    "description": "bias_sleep when rtc in monitor state",
    -                    "offset": 17,
    -                    "size": 1
    -                  },
    -                  "DBG_ATTEN_DEEP_SLP": {
    -                    "description": "DBG_ATTEN when rtc in sleep state",
    -                    "offset": 18,
    -                    "size": 4
    -                  },
    -                  "DBG_ATTEN_MONITOR": {
    -                    "description": "DBG_ATTEN when rtc in monitor state",
    -                    "offset": 22,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "RTC_CNTL": {
    -              "description": "rtc configure register",
    -              "offset": 128,
    -              "size": 32,
    -              "reset_value": 2684354560,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DIG_REG_CAL_EN": {
    -                    "description": "software enable digital regulator cali",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "SCK_DCAP": {
    -                    "description": "SCK_DCAP",
    -                    "offset": 14,
    -                    "size": 8
    -                  },
    -                  "DBOOST_FORCE_PD": {
    -                    "description": "RTC_DBOOST force power down",
    -                    "offset": 28,
    -                    "size": 1
    -                  },
    -                  "DBOOST_FORCE_PU": {
    -                    "description": "RTC_DBOOST force power up",
    -                    "offset": 29,
    -                    "size": 1
    -                  },
    -                  "REGULATOR_FORCE_PD": {
    -                    "description": "RTC_REG force power down (for RTC_REG power down means decrease the voltage to 0.8v or lower )",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "REGULATOR_FORCE_PU": {
    -                    "description": "RTC_REG force power up",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "PWC": {
    -              "description": "rtc configure register",
    -              "offset": 132,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_PAD_FORCE_HOLD": {
    -                    "description": "rtc pad force hold",
    -                    "offset": 21,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DIG_PWC": {
    -              "description": "rtc configure register",
    -              "offset": 136,
    -              "size": 32,
    -              "reset_value": 5591056,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "VDD_SPI_PWR_DRV": {
    -                    "description": "vdd_spi drv's software value",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "VDD_SPI_PWR_FORCE": {
    -                    "description": "vdd_spi drv use software value",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "LSLP_MEM_FORCE_PD": {
    -                    "description": "memories in digital core force PD in sleep",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "LSLP_MEM_FORCE_PU": {
    -                    "description": "memories in digital core force PU in sleep",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "BT_FORCE_PD": {
    -                    "description": "bt force power down",
    -                    "offset": 11,
    -                    "size": 1
    -                  },
    -                  "BT_FORCE_PU": {
    -                    "description": "bt force power up",
    -                    "offset": 12,
    -                    "size": 1
    -                  },
    -                  "DG_PERI_FORCE_PD": {
    -                    "description": "digital peri force power down",
    -                    "offset": 13,
    -                    "size": 1
    -                  },
    -                  "DG_PERI_FORCE_PU": {
    -                    "description": "digital peri force power up",
    -                    "offset": 14,
    -                    "size": 1
    -                  },
    -                  "RTC_FASTMEM_FORCE_LPD": {
    -                    "description": "fastmemory  retention mode in sleep",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "RTC_FASTMEM_FORCE_LPU": {
    -                    "description": "fastmemory donlt entry retention mode in sleep",
    -                    "offset": 16,
    -                    "size": 1
    -                  },
    -                  "WIFI_FORCE_PD": {
    -                    "description": "wifi force power down",
    -                    "offset": 17,
    -                    "size": 1
    -                  },
    -                  "WIFI_FORCE_PU": {
    -                    "description": "wifi force power up",
    -                    "offset": 18,
    -                    "size": 1
    -                  },
    -                  "DG_WRAP_FORCE_PD": {
    -                    "description": "digital core force power down",
    -                    "offset": 19,
    -                    "size": 1
    -                  },
    -                  "DG_WRAP_FORCE_PU": {
    -                    "description": "digital core force power up",
    -                    "offset": 20,
    -                    "size": 1
    -                  },
    -                  "CPU_TOP_FORCE_PD": {
    -                    "description": "cpu core force power down",
    -                    "offset": 21,
    -                    "size": 1
    -                  },
    -                  "CPU_TOP_FORCE_PU": {
    -                    "description": "cpu force power up",
    -                    "offset": 22,
    -                    "size": 1
    -                  },
    -                  "BT_PD_EN": {
    -                    "description": "enable power down bt in sleep",
    -                    "offset": 27,
    -                    "size": 1
    -                  },
    -                  "DG_PERI_PD_EN": {
    -                    "description": "enable power down digital peri in sleep",
    -                    "offset": 28,
    -                    "size": 1
    -                  },
    -                  "CPU_TOP_PD_EN": {
    -                    "description": "enable power down cpu in sleep",
    -                    "offset": 29,
    -                    "size": 1
    -                  },
    -                  "WIFI_PD_EN": {
    -                    "description": "enable power down wifi in sleep",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "DG_WRAP_PD_EN": {
    -                    "description": "enable power down digital wrap in sleep",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DIG_ISO": {
    -              "description": "rtc configure register",
    -              "offset": 140,
    -              "size": 32,
    -              "reset_value": 2860535936,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "FORCE_OFF": {
    -                    "description": "DIG_ISO force off",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "FORCE_ON": {
    -                    "description": "DIG_ISO force on",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "DG_PAD_AUTOHOLD": {
    -                    "description": "read only register to indicate digital pad auto-hold status",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CLR_DG_PAD_AUTOHOLD": {
    -                    "description": "wtite only register to clear digital pad auto-hold",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "DG_PAD_AUTOHOLD_EN": {
    -                    "description": "digital pad enable auto-hold",
    -                    "offset": 11,
    -                    "size": 1
    -                  },
    -                  "DG_PAD_FORCE_NOISO": {
    -                    "description": "digital pad force no ISO",
    -                    "offset": 12,
    -                    "size": 1
    -                  },
    -                  "DG_PAD_FORCE_ISO": {
    -                    "description": "digital pad force ISO",
    -                    "offset": 13,
    -                    "size": 1
    -                  },
    -                  "DG_PAD_FORCE_UNHOLD": {
    -                    "description": "digital pad force un-hold",
    -                    "offset": 14,
    -                    "size": 1
    -                  },
    -                  "DG_PAD_FORCE_HOLD": {
    -                    "description": "digital pad force hold",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "BT_FORCE_ISO": {
    -                    "description": "bt force ISO",
    -                    "offset": 22,
    -                    "size": 1
    -                  },
    -                  "BT_FORCE_NOISO": {
    -                    "description": "bt force no ISO",
    -                    "offset": 23,
    -                    "size": 1
    -                  },
    -                  "DG_PERI_FORCE_ISO": {
    -                    "description": "Digital peri force ISO",
    -                    "offset": 24,
    -                    "size": 1
    -                  },
    -                  "DG_PERI_FORCE_NOISO": {
    -                    "description": "digital peri force no ISO",
    -                    "offset": 25,
    -                    "size": 1
    -                  },
    -                  "CPU_TOP_FORCE_ISO": {
    -                    "description": "cpu force ISO",
    -                    "offset": 26,
    -                    "size": 1
    -                  },
    -                  "CPU_TOP_FORCE_NOISO": {
    -                    "description": "cpu force no ISO",
    -                    "offset": 27,
    -                    "size": 1
    -                  },
    -                  "WIFI_FORCE_ISO": {
    -                    "description": "wifi force ISO",
    -                    "offset": 28,
    -                    "size": 1
    -                  },
    -                  "WIFI_FORCE_NOISO": {
    -                    "description": "wifi force no ISO",
    -                    "offset": 29,
    -                    "size": 1
    -                  },
    -                  "DG_WRAP_FORCE_ISO": {
    -                    "description": "digital core force ISO",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "DG_WRAP_FORCE_NOISO": {
    -                    "description": "digital core force no ISO",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "WDTCONFIG0": {
    -              "description": "rtc configure register",
    -              "offset": 144,
    -              "size": 32,
    -              "reset_value": 78356,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "WDT_CHIP_RESET_WIDTH": {
    -                    "description": "chip reset siginal pulse width",
    -                    "offset": 0,
    -                    "size": 8
    -                  },
    -                  "WDT_CHIP_RESET_EN": {
    -                    "description": "wdt reset whole chip enable",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "WDT_PAUSE_IN_SLP": {
    -                    "description": "pause WDT in sleep",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "WDT_APPCPU_RESET_EN": {
    -                    "description": "enable WDT reset APP CPU",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "WDT_PROCPU_RESET_EN": {
    -                    "description": "enable WDT reset PRO CPU",
    -                    "offset": 11,
    -                    "size": 1
    -                  },
    -                  "WDT_FLASHBOOT_MOD_EN": {
    -                    "description": "enable WDT in flash boot",
    -                    "offset": 12,
    -                    "size": 1
    -                  },
    -                  "WDT_SYS_RESET_LENGTH": {
    -                    "description": "system reset counter length",
    -                    "offset": 13,
    -                    "size": 3
    -                  },
    -                  "WDT_CPU_RESET_LENGTH": {
    -                    "description": "CPU reset counter length",
    -                    "offset": 16,
    -                    "size": 3
    -                  },
    -                  "WDT_STG3": {
    -                    "description": "1: interrupt stage en",
    -                    "offset": 19,
    -                    "size": 3
    -                  },
    -                  "WDT_STG2": {
    -                    "description": "1: interrupt stage en",
    -                    "offset": 22,
    -                    "size": 3
    -                  },
    -                  "WDT_STG1": {
    -                    "description": "1: interrupt stage en",
    -                    "offset": 25,
    -                    "size": 3
    -                  },
    -                  "WDT_STG0": {
    -                    "description": "1: interrupt stage en",
    -                    "offset": 28,
    -                    "size": 3
    -                  },
    -                  "WDT_EN": {
    -                    "description": "enable rtc wdt",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "WDTCONFIG1": {
    -              "description": "rtc configure register",
    -              "offset": 148,
    -              "size": 32,
    -              "reset_value": 200000,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "WDT_STG0_HOLD": {
    -                    "description": "the hold time of stage0",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "WDTCONFIG2": {
    -              "description": "rtc configure register",
    -              "offset": 152,
    -              "size": 32,
    -              "reset_value": 80000,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "WDT_STG1_HOLD": {
    -                    "description": "the hold time of stage1",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "WDTCONFIG3": {
    -              "description": "rtc configure register",
    -              "offset": 156,
    -              "size": 32,
    -              "reset_value": 4095,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "WDT_STG2_HOLD": {
    -                    "description": "the hold time of stage2",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "WDTCONFIG4": {
    -              "description": "rtc configure register",
    -              "offset": 160,
    -              "size": 32,
    -              "reset_value": 4095,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "WDT_STG3_HOLD": {
    -                    "description": "the hold time of stage3",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "WDTFEED": {
    -              "description": "rtc configure register",
    -              "offset": 164,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_WDT_FEED": {
    -                    "description": "sw feed rtc wdt",
    -                    "offset": 31,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "WDTWPROTECT": {
    -              "description": "rtc configure register",
    -              "offset": 168,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "WDT_WKEY": {
    -                    "description": "the key of rtc wdt",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "SWD_CONF": {
    -              "description": "rtc configure register",
    -              "offset": 172,
    -              "size": 32,
    -              "reset_value": 78643200,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SWD_RESET_FLAG": {
    -                    "description": "swd reset flag",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SWD_FEED_INT": {
    -                    "description": "swd interrupt for feeding",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SWD_BYPASS_RST": {
    -                    "description": "Bypass swd rst",
    -                    "offset": 17,
    -                    "size": 1
    -                  },
    -                  "SWD_SIGNAL_WIDTH": {
    -                    "description": "adjust signal width send to swd",
    -                    "offset": 18,
    -                    "size": 10
    -                  },
    -                  "SWD_RST_FLAG_CLR": {
    -                    "description": "reset swd reset flag",
    -                    "offset": 28,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SWD_FEED": {
    -                    "description": "Sw feed swd",
    -                    "offset": 29,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SWD_DISABLE": {
    -                    "description": "disabel SWD",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "SWD_AUTO_FEED_EN": {
    -                    "description": "automatically feed swd when int comes",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "SWD_WPROTECT": {
    -              "description": "rtc configure register",
    -              "offset": 176,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SWD_WKEY": {
    -                    "description": "the key of super wdt",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "SW_CPU_STALL": {
    -              "description": "rtc configure register",
    -              "offset": 180,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SW_STALL_APPCPU_C1": {
    -                    "description": "{reg_sw_stall_appcpu_c1[5:0]",
    -                    "offset": 20,
    -                    "size": 6
    -                  },
    -                  "SW_STALL_PROCPU_C1": {
    -                    "description": "stall cpu by software",
    -                    "offset": 26,
    -                    "size": 6
    -                  }
    -                }
    -              }
    -            },
    -            "STORE4": {
    -              "description": "rtc configure register",
    -              "offset": 184,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_SCRATCH4": {
    -                    "description": "reserved register",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "STORE5": {
    -              "description": "rtc configure register",
    -              "offset": 188,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_SCRATCH5": {
    -                    "description": "reserved register",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "STORE6": {
    -              "description": "rtc configure register",
    -              "offset": 192,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_SCRATCH6": {
    -                    "description": "reserved register",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "STORE7": {
    -              "description": "rtc configure register",
    -              "offset": 196,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_SCRATCH7": {
    -                    "description": "reserved register",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "LOW_POWER_ST": {
    -              "description": "rtc configure register",
    -              "offset": 200,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "XPD_ROM0": {
    -                    "description": "rom0 power down",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "XPD_DIG_DCDC": {
    -                    "description": "External DCDC power down",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_PERI_ISO": {
    -                    "description": "rtc peripheral iso",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "XPD_RTC_PERI": {
    -                    "description": "rtc peripheral power down",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "WIFI_ISO": {
    -                    "description": "wifi iso",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "XPD_WIFI": {
    -                    "description": "wifi wrap power down",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DIG_ISO": {
    -                    "description": "digital wrap iso",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "XPD_DIG": {
    -                    "description": "digital wrap power down",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_TOUCH_STATE_START": {
    -                    "description": "touch should start to work",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_TOUCH_STATE_SWITCH": {
    -                    "description": "touch is about to working. Switch rtc main state",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_TOUCH_STATE_SLP": {
    -                    "description": "touch is in sleep state",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_TOUCH_STATE_DONE": {
    -                    "description": "touch is done",
    -                    "offset": 12,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_COCPU_STATE_START": {
    -                    "description": "ulp/cocpu should start to work",
    -                    "offset": 13,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_COCPU_STATE_SWITCH": {
    -                    "description": "ulp/cocpu is about to working. Switch rtc main state",
    -                    "offset": 14,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_COCPU_STATE_SLP": {
    -                    "description": "ulp/cocpu is in sleep state",
    -                    "offset": 15,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_COCPU_STATE_DONE": {
    -                    "description": "ulp/cocpu is done",
    -                    "offset": 16,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_MAIN_STATE_XTAL_ISO": {
    -                    "description": "no use any more",
    -                    "offset": 17,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_MAIN_STATE_PLL_ON": {
    -                    "description": "rtc main state machine is in states that pll should be running",
    -                    "offset": 18,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_RDY_FOR_WAKEUP": {
    -                    "description": "rtc is ready to receive wake up trigger from wake up source",
    -                    "offset": 19,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_MAIN_STATE_WAIT_END": {
    -                    "description": "rtc main state machine has been waited for some cycles",
    -                    "offset": 20,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_IN_WAKEUP_STATE": {
    -                    "description": "rtc main state machine is in the states of wakeup process",
    -                    "offset": 21,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_IN_LOW_POWER_STATE": {
    -                    "description": "rtc main state machine is in the states of low power",
    -                    "offset": 22,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_MAIN_STATE_IN_WAIT_8M": {
    -                    "description": "rtc main state machine is in wait 8m state",
    -                    "offset": 23,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_MAIN_STATE_IN_WAIT_PLL": {
    -                    "description": "rtc main state machine is in wait pll state",
    -                    "offset": 24,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_MAIN_STATE_IN_WAIT_XTL": {
    -                    "description": "rtc main state machine is in wait xtal state",
    -                    "offset": 25,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_MAIN_STATE_IN_SLP": {
    -                    "description": "rtc main state machine is in sleep state",
    -                    "offset": 26,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_MAIN_STATE_IN_IDLE": {
    -                    "description": "rtc main state machine is in idle state",
    -                    "offset": 27,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_MAIN_STATE": {
    -                    "description": "rtc main state machine status",
    -                    "offset": 28,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DIAG0": {
    -              "description": "rtc configure register",
    -              "offset": 204,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_LOW_POWER_DIAG1": {
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "PAD_HOLD": {
    -              "description": "rtc configure register",
    -              "offset": 208,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_GPIO_PIN0_HOLD": {
    -                    "description": "the hold configure of rtc gpio0",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "RTC_GPIO_PIN1_HOLD": {
    -                    "description": "the hold configure of rtc gpio1",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "RTC_GPIO_PIN2_HOLD": {
    -                    "description": "the hold configure of rtc gpio2",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "RTC_GPIO_PIN3_HOLD": {
    -                    "description": "the hold configure of rtc gpio3",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "RTC_GPIO_PIN4_HOLD": {
    -                    "description": "the hold configure of rtc gpio4",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "RTC_GPIO_PIN5_HOLD": {
    -                    "description": "the hold configure of rtc gpio5",
    -                    "offset": 5,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DIG_PAD_HOLD": {
    -              "description": "rtc configure register",
    -              "offset": 212,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DIG_PAD_HOLD": {
    -                    "description": "the configure of digital pad",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "BROWN_OUT": {
    -              "description": "rtc configure register",
    -              "offset": 216,
    -              "size": 32,
    -              "reset_value": 1140785168,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INT_WAIT": {
    -                    "description": "brown out interrupt wait cycles",
    -                    "offset": 4,
    -                    "size": 10
    -                  },
    -                  "CLOSE_FLASH_ENA": {
    -                    "description": "enable close flash when brown out happens",
    -                    "offset": 14,
    -                    "size": 1
    -                  },
    -                  "PD_RF_ENA": {
    -                    "description": "enable power down RF when brown out happens",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "RST_WAIT": {
    -                    "description": "brown out reset wait cycles",
    -                    "offset": 16,
    -                    "size": 10
    -                  },
    -                  "RST_ENA": {
    -                    "description": "enable brown out reset",
    -                    "offset": 26,
    -                    "size": 1
    -                  },
    -                  "RST_SEL": {
    -                    "description": "1:  4-pos reset",
    -                    "offset": 27,
    -                    "size": 1
    -                  },
    -                  "ANA_RST_EN": {
    -                    "description": "brown_out origin reset enable",
    -                    "offset": 28,
    -                    "size": 1
    -                  },
    -                  "CNT_CLR": {
    -                    "description": "clear brown out counter",
    -                    "offset": 29,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "ENA": {
    -                    "description": "enable brown out",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "DET": {
    -                    "description": "the flag of brown det from analog",
    -                    "offset": 31,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "TIME_LOW1": {
    -              "description": "rtc configure register",
    -              "offset": 220,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_TIMER_VALUE1_LOW": {
    -                    "description": "RTC timer low 32 bits",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "TIME_HIGH1": {
    -              "description": "rtc configure register",
    -              "offset": 224,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_TIMER_VALUE1_HIGH": {
    -                    "description": "RTC timer high 16 bits",
    -                    "offset": 0,
    -                    "size": 16,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "XTAL32K_CLK_FACTOR": {
    -              "description": "rtc configure register",
    -              "offset": 228,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "XTAL32K_CLK_FACTOR": {
    -                    "description": "xtal 32k watch dog backup clock factor",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "XTAL32K_CONF": {
    -              "description": "rtc configure register",
    -              "offset": 232,
    -              "size": 32,
    -              "reset_value": 267386880,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "XTAL32K_RETURN_WAIT": {
    -                    "description": "cycles to wait to return noral xtal 32k",
    -                    "offset": 0,
    -                    "size": 4
    -                  },
    -                  "XTAL32K_RESTART_WAIT": {
    -                    "description": "cycles to wait to repower on xtal 32k",
    -                    "offset": 4,
    -                    "size": 16
    -                  },
    -                  "XTAL32K_WDT_TIMEOUT": {
    -                    "description": "If no clock detected for this amount of time",
    -                    "offset": 20,
    -                    "size": 8
    -                  },
    -                  "XTAL32K_STABLE_THRES": {
    -                    "description": "if restarted xtal32k period is smaller than this",
    -                    "offset": 28,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "USB_CONF": {
    -              "description": "rtc configure register",
    -              "offset": 236,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IO_MUX_RESET_DISABLE": {
    -                    "description": "disable io_mux reset",
    -                    "offset": 18,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "SLP_REJECT_CAUSE": {
    -              "description": "RTC_CNTL_RTC_SLP_REJECT_CAUSE_REG",
    -              "offset": 240,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "REJECT_CAUSE": {
    -                    "description": "sleep reject cause",
    -                    "offset": 0,
    -                    "size": 18,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OPTION1": {
    -              "description": "rtc configure register",
    -              "offset": 244,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "FORCE_DOWNLOAD_BOOT": {
    -                    "description": "force chip entry download mode",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "SLP_WAKEUP_CAUSE": {
    -              "description": "RTC_CNTL_RTC_SLP_WAKEUP_CAUSE_REG",
    -              "offset": 248,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "WAKEUP_CAUSE": {
    -                    "description": "sleep wakeup cause",
    -                    "offset": 0,
    -                    "size": 17,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "ULP_CP_TIMER_1": {
    -              "description": "rtc configure register",
    -              "offset": 252,
    -              "size": 32,
    -              "reset_value": 51200,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ULP_CP_TIMER_SLP_CYCLE": {
    -                    "description": "sleep cycles for ULP-coprocessor timer",
    -                    "offset": 8,
    -                    "size": 24
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ENA_RTC_W1TS": {
    -              "description": "rtc configure register",
    -              "offset": 256,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SLP_WAKEUP_INT_ENA_W1TS": {
    -                    "description": "enable sleep wakeup interrupt",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SLP_REJECT_INT_ENA_W1TS": {
    -                    "description": "enable sleep reject interrupt",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RTC_WDT_INT_ENA_W1TS": {
    -                    "description": "enable RTC WDT interrupt",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RTC_BROWN_OUT_INT_ENA_W1TS": {
    -                    "description": "enable brown out interrupt",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RTC_MAIN_TIMER_INT_ENA_W1TS": {
    -                    "description": "enable RTC main timer interrupt",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RTC_SWD_INT_ENA_W1TS": {
    -                    "description": "enable super watch dog interrupt",
    -                    "offset": 15,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RTC_XTAL32K_DEAD_INT_ENA_W1TS": {
    -                    "description": "enable xtal32k_dead  interrupt",
    -                    "offset": 16,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RTC_GLITCH_DET_INT_ENA_W1TS": {
    -                    "description": "enbale gitch det interrupt",
    -                    "offset": 19,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RTC_BBPLL_CAL_INT_ENA_W1TS": {
    -                    "description": "enbale bbpll cal interrupt",
    -                    "offset": 20,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ENA_RTC_W1TC": {
    -              "description": "rtc configure register",
    -              "offset": 260,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SLP_WAKEUP_INT_ENA_W1TC": {
    -                    "description": "clear sleep wakeup interrupt enable",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SLP_REJECT_INT_ENA_W1TC": {
    -                    "description": "clear sleep reject interrupt enable",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RTC_WDT_INT_ENA_W1TC": {
    -                    "description": "clear RTC WDT interrupt enable",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RTC_BROWN_OUT_INT_ENA_W1TC": {
    -                    "description": "clear brown out interrupt enable",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RTC_MAIN_TIMER_INT_ENA_W1TC": {
    -                    "description": "Clear RTC main timer interrupt enable",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RTC_SWD_INT_ENA_W1TC": {
    -                    "description": "clear super watch dog interrupt enable",
    -                    "offset": 15,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RTC_XTAL32K_DEAD_INT_ENA_W1TC": {
    -                    "description": "clear xtal32k_dead  interrupt enable",
    -                    "offset": 16,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RTC_GLITCH_DET_INT_ENA_W1TC": {
    -                    "description": "clear gitch det interrupt enable",
    -                    "offset": 19,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RTC_BBPLL_CAL_INT_ENA_W1TC": {
    -                    "description": "clear bbpll cal interrupt enable",
    -                    "offset": 20,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RETENTION_CTRL": {
    -              "description": "rtc configure register",
    -              "offset": 264,
    -              "size": 32,
    -              "reset_value": 2697986048,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RETENTION_CLK_SEL": {
    -                    "description": "Retention clk sel",
    -                    "offset": 18,
    -                    "size": 1
    -                  },
    -                  "RETENTION_DONE_WAIT": {
    -                    "description": "Retention done wait time",
    -                    "offset": 19,
    -                    "size": 3
    -                  },
    -                  "RETENTION_CLKOFF_WAIT": {
    -                    "description": "Retention clkoff wait time",
    -                    "offset": 22,
    -                    "size": 4
    -                  },
    -                  "RETENTION_EN": {
    -                    "description": "enable cpu retention when light sleep",
    -                    "offset": 26,
    -                    "size": 1
    -                  },
    -                  "RETENTION_WAIT": {
    -                    "description": "wait cycles for rention operation",
    -                    "offset": 27,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "FIB_SEL": {
    -              "description": "rtc configure register",
    -              "offset": 268,
    -              "size": 32,
    -              "reset_value": 7,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_FIB_SEL": {
    -                    "description": "select use analog fib signal",
    -                    "offset": 0,
    -                    "size": 3
    -                  }
    -                }
    -              }
    -            },
    -            "GPIO_WAKEUP": {
    -              "description": "rtc configure register",
    -              "offset": 272,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_GPIO_WAKEUP_STATUS": {
    -                    "description": "rtc gpio wakeup flag",
    -                    "offset": 0,
    -                    "size": 6,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_GPIO_WAKEUP_STATUS_CLR": {
    -                    "description": "clear rtc gpio wakeup flag",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "RTC_GPIO_PIN_CLK_GATE": {
    -                    "description": "enable rtc io clk gate",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "RTC_GPIO_PIN5_INT_TYPE": {
    -                    "description": "configure gpio wakeup type",
    -                    "offset": 8,
    -                    "size": 3
    -                  },
    -                  "RTC_GPIO_PIN4_INT_TYPE": {
    -                    "description": "configure gpio wakeup type",
    -                    "offset": 11,
    -                    "size": 3
    -                  },
    -                  "RTC_GPIO_PIN3_INT_TYPE": {
    -                    "description": "configure gpio wakeup type",
    -                    "offset": 14,
    -                    "size": 3
    -                  },
    -                  "RTC_GPIO_PIN2_INT_TYPE": {
    -                    "description": "configure gpio wakeup type",
    -                    "offset": 17,
    -                    "size": 3
    -                  },
    -                  "RTC_GPIO_PIN1_INT_TYPE": {
    -                    "description": "configure gpio wakeup type",
    -                    "offset": 20,
    -                    "size": 3
    -                  },
    -                  "RTC_GPIO_PIN0_INT_TYPE": {
    -                    "description": "configure gpio wakeup type",
    -                    "offset": 23,
    -                    "size": 3
    -                  },
    -                  "RTC_GPIO_PIN5_WAKEUP_ENABLE": {
    -                    "description": "enable wakeup from rtc gpio5",
    -                    "offset": 26,
    -                    "size": 1
    -                  },
    -                  "RTC_GPIO_PIN4_WAKEUP_ENABLE": {
    -                    "description": "enable wakeup from rtc gpio4",
    -                    "offset": 27,
    -                    "size": 1
    -                  },
    -                  "RTC_GPIO_PIN3_WAKEUP_ENABLE": {
    -                    "description": "enable wakeup from rtc gpio3",
    -                    "offset": 28,
    -                    "size": 1
    -                  },
    -                  "RTC_GPIO_PIN2_WAKEUP_ENABLE": {
    -                    "description": "enable wakeup from rtc gpio2",
    -                    "offset": 29,
    -                    "size": 1
    -                  },
    -                  "RTC_GPIO_PIN1_WAKEUP_ENABLE": {
    -                    "description": "enable wakeup from rtc gpio1",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "RTC_GPIO_PIN0_WAKEUP_ENABLE": {
    -                    "description": "enable wakeup from rtc gpio0",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DBG_SEL": {
    -              "description": "rtc configure register",
    -              "offset": 276,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_DEBUG_12M_NO_GATING": {
    -                    "description": "use for debug",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "RTC_DEBUG_BIT_SEL": {
    -                    "description": "use for debug",
    -                    "offset": 2,
    -                    "size": 5
    -                  },
    -                  "RTC_DEBUG_SEL0": {
    -                    "description": "use for debug",
    -                    "offset": 7,
    -                    "size": 5
    -                  },
    -                  "RTC_DEBUG_SEL1": {
    -                    "description": "use for debug",
    -                    "offset": 12,
    -                    "size": 5
    -                  },
    -                  "RTC_DEBUG_SEL2": {
    -                    "description": "use for debug",
    -                    "offset": 17,
    -                    "size": 5
    -                  },
    -                  "RTC_DEBUG_SEL3": {
    -                    "description": "use for debug",
    -                    "offset": 22,
    -                    "size": 5
    -                  },
    -                  "RTC_DEBUG_SEL4": {
    -                    "description": "use for debug",
    -                    "offset": 27,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "DBG_MAP": {
    -              "description": "rtc configure register",
    -              "offset": 280,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_GPIO_PIN5_MUX_SEL": {
    -                    "description": "use for debug",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "RTC_GPIO_PIN4_MUX_SEL": {
    -                    "description": "use for debug",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "RTC_GPIO_PIN3_MUX_SEL": {
    -                    "description": "use for debug",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "RTC_GPIO_PIN2_MUX_SEL": {
    -                    "description": "use for debug",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "RTC_GPIO_PIN1_MUX_SEL": {
    -                    "description": "use for debug",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "RTC_GPIO_PIN0_MUX_SEL": {
    -                    "description": "use for debug",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "RTC_GPIO_PIN5_FUN_SEL": {
    -                    "description": "use for debug",
    -                    "offset": 8,
    -                    "size": 4
    -                  },
    -                  "RTC_GPIO_PIN4_FUN_SEL": {
    -                    "description": "use for debug",
    -                    "offset": 12,
    -                    "size": 4
    -                  },
    -                  "RTC_GPIO_PIN3_FUN_SEL": {
    -                    "description": "use for debug",
    -                    "offset": 16,
    -                    "size": 4
    -                  },
    -                  "RTC_GPIO_PIN2_FUN_SEL": {
    -                    "description": "use for debug",
    -                    "offset": 20,
    -                    "size": 4
    -                  },
    -                  "RTC_GPIO_PIN1_FUN_SEL": {
    -                    "description": "use for debug",
    -                    "offset": 24,
    -                    "size": 4
    -                  },
    -                  "RTC_GPIO_PIN0_FUN_SEL": {
    -                    "description": "use for debug",
    -                    "offset": 28,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "SENSOR_CTRL": {
    -              "description": "rtc configure register",
    -              "offset": 284,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SAR2_PWDET_CCT": {
    -                    "description": "reg_sar2_pwdet_cct",
    -                    "offset": 27,
    -                    "size": 3
    -                  },
    -                  "FORCE_XPD_SAR": {
    -                    "description": "force power up SAR",
    -                    "offset": 30,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "DBG_SAR_SEL": {
    -              "description": "rtc configure register",
    -              "offset": 288,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SAR_DEBUG_SEL": {
    -                    "description": "use for debug",
    -                    "offset": 27,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "PG_CTRL": {
    -              "description": "rtc configure register",
    -              "offset": 292,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "POWER_GLITCH_DSENSE": {
    -                    "description": "power glitch desense",
    -                    "offset": 26,
    -                    "size": 2
    -                  },
    -                  "POWER_GLITCH_FORCE_PD": {
    -                    "description": "force disable power glitch",
    -                    "offset": 28,
    -                    "size": 1
    -                  },
    -                  "POWER_GLITCH_FORCE_PU": {
    -                    "description": "force enable power glitch",
    -                    "offset": 29,
    -                    "size": 1
    -                  },
    -                  "POWER_GLITCH_EFUSE_SEL": {
    -                    "description": "use efuse value control power glitch enable",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "POWER_GLITCH_EN": {
    -                    "description": "enable power glitch",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DATE": {
    -              "description": "rtc configure register",
    -              "offset": 508,
    -              "size": 32,
    -              "reset_value": 33583728,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_CNTL_DATE": {
    -                    "description": "verision",
    -                    "offset": 0,
    -                    "size": 28
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "SENSITIVE": {
    -        "description": "Sensitive",
    -        "children": {
    -          "registers": {
    -            "ROM_TABLE_LOCK": {
    -              "description": "SENSITIVE_ROM_TABLE_LOCK_REG",
    -              "offset": 0,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ROM_TABLE_LOCK": {
    -                    "description": "rom_table_lock",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "ROM_TABLE": {
    -              "description": "SENSITIVE_ROM_TABLE_REG",
    -              "offset": 4,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ROM_TABLE": {
    -                    "description": "rom_table",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "PRIVILEGE_MODE_SEL_LOCK": {
    -              "description": "SENSITIVE_PRIVILEGE_MODE_SEL_LOCK_REG",
    -              "offset": 8,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PRIVILEGE_MODE_SEL_LOCK": {
    -                    "description": "privilege_mode_sel_lock",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "PRIVILEGE_MODE_SEL": {
    -              "description": "SENSITIVE_PRIVILEGE_MODE_SEL_REG",
    -              "offset": 12,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PRIVILEGE_MODE_SEL": {
    -                    "description": "privilege_mode_sel",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "APB_PERIPHERAL_ACCESS_0": {
    -              "description": "SENSITIVE_APB_PERIPHERAL_ACCESS_0_REG",
    -              "offset": 16,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "APB_PERIPHERAL_ACCESS_LOCK": {
    -                    "description": "apb_peripheral_access_lock",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "APB_PERIPHERAL_ACCESS_1": {
    -              "description": "SENSITIVE_APB_PERIPHERAL_ACCESS_1_REG",
    -              "offset": 20,
    -              "size": 32,
    -              "reset_value": 1,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "APB_PERIPHERAL_ACCESS_SPLIT_BURST": {
    -                    "description": "apb_peripheral_access_split_burst",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "INTERNAL_SRAM_USAGE_0": {
    -              "description": "SENSITIVE_INTERNAL_SRAM_USAGE_0_REG",
    -              "offset": 24,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INTERNAL_SRAM_USAGE_LOCK": {
    -                    "description": "internal_sram_usage_lock",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "INTERNAL_SRAM_USAGE_1": {
    -              "description": "SENSITIVE_INTERNAL_SRAM_USAGE_1_REG",
    -              "offset": 28,
    -              "size": 32,
    -              "reset_value": 15,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INTERNAL_SRAM_USAGE_CPU_CACHE": {
    -                    "description": "internal_sram_usage_cpu_cache",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "INTERNAL_SRAM_USAGE_CPU_SRAM": {
    -                    "description": "internal_sram_usage_cpu_sram",
    -                    "offset": 1,
    -                    "size": 3
    -                  }
    -                }
    -              }
    -            },
    -            "INTERNAL_SRAM_USAGE_3": {
    -              "description": "SENSITIVE_INTERNAL_SRAM_USAGE_3_REG",
    -              "offset": 32,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INTERNAL_SRAM_USAGE_MAC_DUMP_SRAM": {
    -                    "description": "internal_sram_usage_mac_dump_sram",
    -                    "offset": 0,
    -                    "size": 3
    -                  },
    -                  "INTERNAL_SRAM_ALLOC_MAC_DUMP": {
    -                    "description": "internal_sram_alloc_mac_dump",
    -                    "offset": 3,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "INTERNAL_SRAM_USAGE_4": {
    -              "description": "SENSITIVE_INTERNAL_SRAM_USAGE_4_REG",
    -              "offset": 36,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INTERNAL_SRAM_USAGE_LOG_SRAM": {
    -                    "description": "internal_sram_usage_log_sram",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CACHE_TAG_ACCESS_0": {
    -              "description": "SENSITIVE_CACHE_TAG_ACCESS_0_REG",
    -              "offset": 40,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CACHE_TAG_ACCESS_LOCK": {
    -                    "description": "cache_tag_access_lock",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CACHE_TAG_ACCESS_1": {
    -              "description": "SENSITIVE_CACHE_TAG_ACCESS_1_REG",
    -              "offset": 44,
    -              "size": 32,
    -              "reset_value": 15,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PRO_I_TAG_RD_ACS": {
    -                    "description": "pro_i_tag_rd_acs",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "PRO_I_TAG_WR_ACS": {
    -                    "description": "pro_i_tag_wr_acs",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "PRO_D_TAG_RD_ACS": {
    -                    "description": "pro_d_tag_rd_acs",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "PRO_D_TAG_WR_ACS": {
    -                    "description": "pro_d_tag_wr_acs",
    -                    "offset": 3,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CACHE_MMU_ACCESS_0": {
    -              "description": "SENSITIVE_CACHE_MMU_ACCESS_0_REG",
    -              "offset": 48,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CACHE_MMU_ACCESS_LOCK": {
    -                    "description": "cache_mmu_access_lock",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CACHE_MMU_ACCESS_1": {
    -              "description": "SENSITIVE_CACHE_MMU_ACCESS_1_REG",
    -              "offset": 52,
    -              "size": 32,
    -              "reset_value": 3,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PRO_MMU_RD_ACS": {
    -                    "description": "pro_mmu_rd_acs",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "PRO_MMU_WR_ACS": {
    -                    "description": "pro_mmu_wr_acs",
    -                    "offset": 1,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_APBPERI_SPI2_PMS_CONSTRAIN_0": {
    -              "description": "SENSITIVE_DMA_APBPERI_SPI2_PMS_CONSTRAIN_0_REG",
    -              "offset": 56,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_APBPERI_SPI2_PMS_CONSTRAIN_LOCK": {
    -                    "description": "dma_apbperi_spi2_pms_constrain_lock",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_APBPERI_SPI2_PMS_CONSTRAIN_1": {
    -              "description": "SENSITIVE_DMA_APBPERI_SPI2_PMS_CONSTRAIN_1_REG",
    -              "offset": 60,
    -              "size": 32,
    -              "reset_value": 1044735,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0": {
    -                    "description": "dma_apbperi_spi2_pms_constrain_sram_world_0_pms_0",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1": {
    -                    "description": "dma_apbperi_spi2_pms_constrain_sram_world_0_pms_1",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2": {
    -                    "description": "dma_apbperi_spi2_pms_constrain_sram_world_0_pms_2",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3": {
    -                    "description": "dma_apbperi_spi2_pms_constrain_sram_world_0_pms_3",
    -                    "offset": 6,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0": {
    -                    "description": "dma_apbperi_spi2_pms_constrain_sram_world_1_pms_0",
    -                    "offset": 12,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1": {
    -                    "description": "dma_apbperi_spi2_pms_constrain_sram_world_1_pms_1",
    -                    "offset": 14,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2": {
    -                    "description": "dma_apbperi_spi2_pms_constrain_sram_world_1_pms_2",
    -                    "offset": 16,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3": {
    -                    "description": "dma_apbperi_spi2_pms_constrain_sram_world_1_pms_3",
    -                    "offset": 18,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_APBPERI_UCHI0_PMS_CONSTRAIN_0": {
    -              "description": "SENSITIVE_DMA_APBPERI_UCHI0_PMS_CONSTRAIN_0_REG",
    -              "offset": 64,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_APBPERI_UCHI0_PMS_CONSTRAIN_LOCK": {
    -                    "description": "dma_apbperi_uchi0_pms_constrain_lock",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_APBPERI_UCHI0_PMS_CONSTRAIN_1": {
    -              "description": "SENSITIVE_DMA_APBPERI_UCHI0_PMS_CONSTRAIN_1_REG",
    -              "offset": 68,
    -              "size": 32,
    -              "reset_value": 1044735,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0": {
    -                    "description": "dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_0",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1": {
    -                    "description": "dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_1",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2": {
    -                    "description": "dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_2",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3": {
    -                    "description": "dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_3",
    -                    "offset": 6,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0": {
    -                    "description": "dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_0",
    -                    "offset": 12,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1": {
    -                    "description": "dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_1",
    -                    "offset": 14,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2": {
    -                    "description": "dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_2",
    -                    "offset": 16,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3": {
    -                    "description": "dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_3",
    -                    "offset": 18,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_APBPERI_I2S0_PMS_CONSTRAIN_0": {
    -              "description": "SENSITIVE_DMA_APBPERI_I2S0_PMS_CONSTRAIN_0_REG",
    -              "offset": 72,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_APBPERI_I2S0_PMS_CONSTRAIN_LOCK": {
    -                    "description": "dma_apbperi_i2s0_pms_constrain_lock",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_APBPERI_I2S0_PMS_CONSTRAIN_1": {
    -              "description": "SENSITIVE_DMA_APBPERI_I2S0_PMS_CONSTRAIN_1_REG",
    -              "offset": 76,
    -              "size": 32,
    -              "reset_value": 1044735,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0": {
    -                    "description": "dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_0",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1": {
    -                    "description": "dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_1",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2": {
    -                    "description": "dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_2",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3": {
    -                    "description": "dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_3",
    -                    "offset": 6,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0": {
    -                    "description": "dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_0",
    -                    "offset": 12,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1": {
    -                    "description": "dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_1",
    -                    "offset": 14,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2": {
    -                    "description": "dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_2",
    -                    "offset": 16,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3": {
    -                    "description": "dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_3",
    -                    "offset": 18,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_APBPERI_MAC_PMS_CONSTRAIN_0": {
    -              "description": "SENSITIVE_DMA_APBPERI_MAC_PMS_CONSTRAIN_0_REG",
    -              "offset": 80,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_APBPERI_MAC_PMS_CONSTRAIN_LOCK": {
    -                    "description": "dma_apbperi_mac_pms_constrain_lock",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_APBPERI_MAC_PMS_CONSTRAIN_1": {
    -              "description": "SENSITIVE_DMA_APBPERI_MAC_PMS_CONSTRAIN_1_REG",
    -              "offset": 84,
    -              "size": 32,
    -              "reset_value": 1044735,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0": {
    -                    "description": "dma_apbperi_mac_pms_constrain_sram_world_0_pms_0",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1": {
    -                    "description": "dma_apbperi_mac_pms_constrain_sram_world_0_pms_1",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2": {
    -                    "description": "dma_apbperi_mac_pms_constrain_sram_world_0_pms_2",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3": {
    -                    "description": "dma_apbperi_mac_pms_constrain_sram_world_0_pms_3",
    -                    "offset": 6,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0": {
    -                    "description": "dma_apbperi_mac_pms_constrain_sram_world_1_pms_0",
    -                    "offset": 12,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1": {
    -                    "description": "dma_apbperi_mac_pms_constrain_sram_world_1_pms_1",
    -                    "offset": 14,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2": {
    -                    "description": "dma_apbperi_mac_pms_constrain_sram_world_1_pms_2",
    -                    "offset": 16,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3": {
    -                    "description": "dma_apbperi_mac_pms_constrain_sram_world_1_pms_3",
    -                    "offset": 18,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_APBPERI_BACKUP_PMS_CONSTRAIN_0": {
    -              "description": "SENSITIVE_DMA_APBPERI_BACKUP_PMS_CONSTRAIN_0_REG",
    -              "offset": 88,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_APBPERI_BACKUP_PMS_CONSTRAIN_LOCK": {
    -                    "description": "dma_apbperi_backup_pms_constrain_lock",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_APBPERI_BACKUP_PMS_CONSTRAIN_1": {
    -              "description": "SENSITIVE_DMA_APBPERI_BACKUP_PMS_CONSTRAIN_1_REG",
    -              "offset": 92,
    -              "size": 32,
    -              "reset_value": 1044735,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0": {
    -                    "description": "dma_apbperi_backup_pms_constrain_sram_world_0_pms_0",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1": {
    -                    "description": "dma_apbperi_backup_pms_constrain_sram_world_0_pms_1",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2": {
    -                    "description": "dma_apbperi_backup_pms_constrain_sram_world_0_pms_2",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3": {
    -                    "description": "dma_apbperi_backup_pms_constrain_sram_world_0_pms_3",
    -                    "offset": 6,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0": {
    -                    "description": "dma_apbperi_backup_pms_constrain_sram_world_1_pms_0",
    -                    "offset": 12,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1": {
    -                    "description": "dma_apbperi_backup_pms_constrain_sram_world_1_pms_1",
    -                    "offset": 14,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2": {
    -                    "description": "dma_apbperi_backup_pms_constrain_sram_world_1_pms_2",
    -                    "offset": 16,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3": {
    -                    "description": "dma_apbperi_backup_pms_constrain_sram_world_1_pms_3",
    -                    "offset": 18,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_APBPERI_LC_PMS_CONSTRAIN_0": {
    -              "description": "SENSITIVE_DMA_APBPERI_LC_PMS_CONSTRAIN_0_REG",
    -              "offset": 96,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_APBPERI_LC_PMS_CONSTRAIN_LOCK": {
    -                    "description": "dma_apbperi_lc_pms_constrain_lock",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_APBPERI_LC_PMS_CONSTRAIN_1": {
    -              "description": "SENSITIVE_DMA_APBPERI_LC_PMS_CONSTRAIN_1_REG",
    -              "offset": 100,
    -              "size": 32,
    -              "reset_value": 1044735,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0": {
    -                    "description": "dma_apbperi_lc_pms_constrain_sram_world_0_pms_0",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1": {
    -                    "description": "dma_apbperi_lc_pms_constrain_sram_world_0_pms_1",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2": {
    -                    "description": "dma_apbperi_lc_pms_constrain_sram_world_0_pms_2",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3": {
    -                    "description": "dma_apbperi_lc_pms_constrain_sram_world_0_pms_3",
    -                    "offset": 6,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0": {
    -                    "description": "dma_apbperi_lc_pms_constrain_sram_world_1_pms_0",
    -                    "offset": 12,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1": {
    -                    "description": "dma_apbperi_lc_pms_constrain_sram_world_1_pms_1",
    -                    "offset": 14,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2": {
    -                    "description": "dma_apbperi_lc_pms_constrain_sram_world_1_pms_2",
    -                    "offset": 16,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3": {
    -                    "description": "dma_apbperi_lc_pms_constrain_sram_world_1_pms_3",
    -                    "offset": 18,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_APBPERI_AES_PMS_CONSTRAIN_0": {
    -              "description": "SENSITIVE_DMA_APBPERI_AES_PMS_CONSTRAIN_0_REG",
    -              "offset": 104,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_APBPERI_AES_PMS_CONSTRAIN_LOCK": {
    -                    "description": "dma_apbperi_aes_pms_constrain_lock",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_APBPERI_AES_PMS_CONSTRAIN_1": {
    -              "description": "SENSITIVE_DMA_APBPERI_AES_PMS_CONSTRAIN_1_REG",
    -              "offset": 108,
    -              "size": 32,
    -              "reset_value": 1044735,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0": {
    -                    "description": "dma_apbperi_aes_pms_constrain_sram_world_0_pms_0",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1": {
    -                    "description": "dma_apbperi_aes_pms_constrain_sram_world_0_pms_1",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2": {
    -                    "description": "dma_apbperi_aes_pms_constrain_sram_world_0_pms_2",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3": {
    -                    "description": "dma_apbperi_aes_pms_constrain_sram_world_0_pms_3",
    -                    "offset": 6,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0": {
    -                    "description": "dma_apbperi_aes_pms_constrain_sram_world_1_pms_0",
    -                    "offset": 12,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1": {
    -                    "description": "dma_apbperi_aes_pms_constrain_sram_world_1_pms_1",
    -                    "offset": 14,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2": {
    -                    "description": "dma_apbperi_aes_pms_constrain_sram_world_1_pms_2",
    -                    "offset": 16,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3": {
    -                    "description": "dma_apbperi_aes_pms_constrain_sram_world_1_pms_3",
    -                    "offset": 18,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_APBPERI_SHA_PMS_CONSTRAIN_0": {
    -              "description": "SENSITIVE_DMA_APBPERI_SHA_PMS_CONSTRAIN_0_REG",
    -              "offset": 112,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_APBPERI_SHA_PMS_CONSTRAIN_LOCK": {
    -                    "description": "dma_apbperi_sha_pms_constrain_lock",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_APBPERI_SHA_PMS_CONSTRAIN_1": {
    -              "description": "SENSITIVE_DMA_APBPERI_SHA_PMS_CONSTRAIN_1_REG",
    -              "offset": 116,
    -              "size": 32,
    -              "reset_value": 1044735,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0": {
    -                    "description": "dma_apbperi_sha_pms_constrain_sram_world_0_pms_0",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1": {
    -                    "description": "dma_apbperi_sha_pms_constrain_sram_world_0_pms_1",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2": {
    -                    "description": "dma_apbperi_sha_pms_constrain_sram_world_0_pms_2",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3": {
    -                    "description": "dma_apbperi_sha_pms_constrain_sram_world_0_pms_3",
    -                    "offset": 6,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0": {
    -                    "description": "dma_apbperi_sha_pms_constrain_sram_world_1_pms_0",
    -                    "offset": 12,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1": {
    -                    "description": "dma_apbperi_sha_pms_constrain_sram_world_1_pms_1",
    -                    "offset": 14,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2": {
    -                    "description": "dma_apbperi_sha_pms_constrain_sram_world_1_pms_2",
    -                    "offset": 16,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3": {
    -                    "description": "dma_apbperi_sha_pms_constrain_sram_world_1_pms_3",
    -                    "offset": 18,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_0": {
    -              "description": "SENSITIVE_DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_0_REG",
    -              "offset": 120,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_LOCK": {
    -                    "description": "dma_apbperi_adc_dac_pms_constrain_lock",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_1": {
    -              "description": "SENSITIVE_DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_1_REG",
    -              "offset": 124,
    -              "size": 32,
    -              "reset_value": 1044735,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0": {
    -                    "description": "dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_0",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1": {
    -                    "description": "dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_1",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2": {
    -                    "description": "dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_2",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3": {
    -                    "description": "dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_3",
    -                    "offset": 6,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0": {
    -                    "description": "dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_0",
    -                    "offset": 12,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1": {
    -                    "description": "dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_1",
    -                    "offset": 14,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2": {
    -                    "description": "dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_2",
    -                    "offset": 16,
    -                    "size": 2
    -                  },
    -                  "DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3": {
    -                    "description": "dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_3",
    -                    "offset": 18,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_APBPERI_PMS_MONITOR_0": {
    -              "description": "SENSITIVE_DMA_APBPERI_PMS_MONITOR_0_REG",
    -              "offset": 128,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_APBPERI_PMS_MONITOR_LOCK": {
    -                    "description": "dma_apbperi_pms_monitor_lock",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_APBPERI_PMS_MONITOR_1": {
    -              "description": "SENSITIVE_DMA_APBPERI_PMS_MONITOR_1_REG",
    -              "offset": 132,
    -              "size": 32,
    -              "reset_value": 3,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_APBPERI_PMS_MONITOR_VIOLATE_CLR": {
    -                    "description": "dma_apbperi_pms_monitor_violate_clr",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "DMA_APBPERI_PMS_MONITOR_VIOLATE_EN": {
    -                    "description": "dma_apbperi_pms_monitor_violate_en",
    -                    "offset": 1,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_APBPERI_PMS_MONITOR_2": {
    -              "description": "SENSITIVE_DMA_APBPERI_PMS_MONITOR_2_REG",
    -              "offset": 136,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR": {
    -                    "description": "dma_apbperi_pms_monitor_violate_intr",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_WORLD": {
    -                    "description": "dma_apbperi_pms_monitor_violate_status_world",
    -                    "offset": 1,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_ADDR": {
    -                    "description": "dma_apbperi_pms_monitor_violate_status_addr",
    -                    "offset": 3,
    -                    "size": 24,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_APBPERI_PMS_MONITOR_3": {
    -              "description": "SENSITIVE_DMA_APBPERI_PMS_MONITOR_3_REG",
    -              "offset": 140,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_WR": {
    -                    "description": "dma_apbperi_pms_monitor_violate_status_wr",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_BYTEEN": {
    -                    "description": "dma_apbperi_pms_monitor_violate_status_byteen",
    -                    "offset": 1,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_0": {
    -              "description": "SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_0_REG",
    -              "offset": 144,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_LOCK": {
    -                    "description": "core_x_iram0_dram0_dma_split_line_constrain_lock",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_1": {
    -              "description": "SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_1_REG",
    -              "offset": 148,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_0": {
    -                    "description": "core_x_iram0_dram0_dma_sram_category_0",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_1": {
    -                    "description": "core_x_iram0_dram0_dma_sram_category_1",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_2": {
    -                    "description": "core_x_iram0_dram0_dma_sram_category_2",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "CORE_X_IRAM0_DRAM0_DMA_SRAM_SPLITADDR": {
    -                    "description": "core_x_iram0_dram0_dma_sram_splitaddr",
    -                    "offset": 14,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_2": {
    -              "description": "SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_2_REG",
    -              "offset": 152,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_0": {
    -                    "description": "core_x_iram0_sram_line_0_category_0",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_1": {
    -                    "description": "core_x_iram0_sram_line_0_category_1",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_2": {
    -                    "description": "core_x_iram0_sram_line_0_category_2",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "CORE_X_IRAM0_SRAM_LINE_0_SPLITADDR": {
    -                    "description": "core_x_iram0_sram_line_0_splitaddr",
    -                    "offset": 14,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_3": {
    -              "description": "SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_3_REG",
    -              "offset": 156,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_0": {
    -                    "description": "core_x_iram0_sram_line_1_category_0",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_1": {
    -                    "description": "core_x_iram0_sram_line_1_category_1",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_2": {
    -                    "description": "core_x_iram0_sram_line_1_category_2",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "CORE_X_IRAM0_SRAM_LINE_1_SPLITADDR": {
    -                    "description": "core_x_iram0_sram_line_1_splitaddr",
    -                    "offset": 14,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_4": {
    -              "description": "SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_4_REG",
    -              "offset": 160,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_0": {
    -                    "description": "core_x_dram0_dma_sram_line_0_category_0",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_1": {
    -                    "description": "core_x_dram0_dma_sram_line_0_category_1",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_2": {
    -                    "description": "core_x_dram0_dma_sram_line_0_category_2",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "CORE_X_DRAM0_DMA_SRAM_LINE_0_SPLITADDR": {
    -                    "description": "core_x_dram0_dma_sram_line_0_splitaddr",
    -                    "offset": 14,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_5": {
    -              "description": "SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_5_REG",
    -              "offset": 164,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_0": {
    -                    "description": "core_x_dram0_dma_sram_line_1_category_0",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_1": {
    -                    "description": "core_x_dram0_dma_sram_line_1_category_1",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_2": {
    -                    "description": "core_x_dram0_dma_sram_line_1_category_2",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "CORE_X_DRAM0_DMA_SRAM_LINE_1_SPLITADDR": {
    -                    "description": "core_x_dram0_dma_sram_line_1_splitaddr",
    -                    "offset": 14,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_X_IRAM0_PMS_CONSTRAIN_0": {
    -              "description": "SENSITIVE_CORE_X_IRAM0_PMS_CONSTRAIN_0_REG",
    -              "offset": 168,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_X_IRAM0_PMS_CONSTRAIN_LOCK": {
    -                    "description": "core_x_iram0_pms_constrain_lock",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_X_IRAM0_PMS_CONSTRAIN_1": {
    -              "description": "SENSITIVE_CORE_X_IRAM0_PMS_CONSTRAIN_1_REG",
    -              "offset": 172,
    -              "size": 32,
    -              "reset_value": 1867775,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0": {
    -                    "description": "core_x_iram0_pms_constrain_sram_world_1_pms_0",
    -                    "offset": 0,
    -                    "size": 3
    -                  },
    -                  "CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1": {
    -                    "description": "core_x_iram0_pms_constrain_sram_world_1_pms_1",
    -                    "offset": 3,
    -                    "size": 3
    -                  },
    -                  "CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2": {
    -                    "description": "core_x_iram0_pms_constrain_sram_world_1_pms_2",
    -                    "offset": 6,
    -                    "size": 3
    -                  },
    -                  "CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3": {
    -                    "description": "core_x_iram0_pms_constrain_sram_world_1_pms_3",
    -                    "offset": 9,
    -                    "size": 3
    -                  },
    -                  "CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_CACHEDATAARRAY_PMS_0": {
    -                    "description": "core_x_iram0_pms_constrain_sram_world_1_cachedataarray_pms_0",
    -                    "offset": 12,
    -                    "size": 3
    -                  },
    -                  "CORE_X_IRAM0_PMS_CONSTRAIN_ROM_WORLD_1_PMS": {
    -                    "description": "core_x_iram0_pms_constrain_rom_world_1_pms",
    -                    "offset": 18,
    -                    "size": 3
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_X_IRAM0_PMS_CONSTRAIN_2": {
    -              "description": "SENSITIVE_CORE_X_IRAM0_PMS_CONSTRAIN_2_REG",
    -              "offset": 176,
    -              "size": 32,
    -              "reset_value": 1867775,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0": {
    -                    "description": "core_x_iram0_pms_constrain_sram_world_0_pms_0",
    -                    "offset": 0,
    -                    "size": 3
    -                  },
    -                  "CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1": {
    -                    "description": "core_x_iram0_pms_constrain_sram_world_0_pms_1",
    -                    "offset": 3,
    -                    "size": 3
    -                  },
    -                  "CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2": {
    -                    "description": "core_x_iram0_pms_constrain_sram_world_0_pms_2",
    -                    "offset": 6,
    -                    "size": 3
    -                  },
    -                  "CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3": {
    -                    "description": "core_x_iram0_pms_constrain_sram_world_0_pms_3",
    -                    "offset": 9,
    -                    "size": 3
    -                  },
    -                  "CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_CACHEDATAARRAY_PMS_0": {
    -                    "description": "core_x_iram0_pms_constrain_sram_world_0_cachedataarray_pms_0",
    -                    "offset": 12,
    -                    "size": 3
    -                  },
    -                  "CORE_X_IRAM0_PMS_CONSTRAIN_ROM_WORLD_0_PMS": {
    -                    "description": "core_x_iram0_pms_constrain_rom_world_0_pms",
    -                    "offset": 18,
    -                    "size": 3
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_IRAM0_PMS_MONITOR_0": {
    -              "description": "SENSITIVE_CORE_0_IRAM0_PMS_MONITOR_0_REG",
    -              "offset": 180,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_IRAM0_PMS_MONITOR_LOCK": {
    -                    "description": "core_0_iram0_pms_monitor_lock",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_IRAM0_PMS_MONITOR_1": {
    -              "description": "SENSITIVE_CORE_0_IRAM0_PMS_MONITOR_1_REG",
    -              "offset": 184,
    -              "size": 32,
    -              "reset_value": 3,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_IRAM0_PMS_MONITOR_VIOLATE_CLR": {
    -                    "description": "core_0_iram0_pms_monitor_violate_clr",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "CORE_0_IRAM0_PMS_MONITOR_VIOLATE_EN": {
    -                    "description": "core_0_iram0_pms_monitor_violate_en",
    -                    "offset": 1,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_IRAM0_PMS_MONITOR_2": {
    -              "description": "SENSITIVE_CORE_0_IRAM0_PMS_MONITOR_2_REG",
    -              "offset": 188,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR": {
    -                    "description": "core_0_iram0_pms_monitor_violate_intr",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_WR": {
    -                    "description": "core_0_iram0_pms_monitor_violate_status_wr",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_LOADSTORE": {
    -                    "description": "core_0_iram0_pms_monitor_violate_status_loadstore",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_WORLD": {
    -                    "description": "core_0_iram0_pms_monitor_violate_status_world",
    -                    "offset": 3,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_ADDR": {
    -                    "description": "core_0_iram0_pms_monitor_violate_status_addr",
    -                    "offset": 5,
    -                    "size": 24,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_X_DRAM0_PMS_CONSTRAIN_0": {
    -              "description": "SENSITIVE_CORE_X_DRAM0_PMS_CONSTRAIN_0_REG",
    -              "offset": 192,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_X_DRAM0_PMS_CONSTRAIN_LOCK": {
    -                    "description": "core_x_dram0_pms_constrain_lock",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_X_DRAM0_PMS_CONSTRAIN_1": {
    -              "description": "SENSITIVE_CORE_X_DRAM0_PMS_CONSTRAIN_1_REG",
    -              "offset": 196,
    -              "size": 32,
    -              "reset_value": 252702975,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0": {
    -                    "description": "core_x_dram0_pms_constrain_sram_world_0_pms_0",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1": {
    -                    "description": "core_x_dram0_pms_constrain_sram_world_0_pms_1",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2": {
    -                    "description": "core_x_dram0_pms_constrain_sram_world_0_pms_2",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3": {
    -                    "description": "core_x_dram0_pms_constrain_sram_world_0_pms_3",
    -                    "offset": 6,
    -                    "size": 2
    -                  },
    -                  "CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0": {
    -                    "description": "core_x_dram0_pms_constrain_sram_world_1_pms_0",
    -                    "offset": 12,
    -                    "size": 2
    -                  },
    -                  "CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1": {
    -                    "description": "core_x_dram0_pms_constrain_sram_world_1_pms_1",
    -                    "offset": 14,
    -                    "size": 2
    -                  },
    -                  "CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2": {
    -                    "description": "core_x_dram0_pms_constrain_sram_world_1_pms_2",
    -                    "offset": 16,
    -                    "size": 2
    -                  },
    -                  "CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3": {
    -                    "description": "core_x_dram0_pms_constrain_sram_world_1_pms_3",
    -                    "offset": 18,
    -                    "size": 2
    -                  },
    -                  "CORE_X_DRAM0_PMS_CONSTRAIN_ROM_WORLD_0_PMS": {
    -                    "description": "core_x_dram0_pms_constrain_rom_world_0_pms",
    -                    "offset": 24,
    -                    "size": 2
    -                  },
    -                  "CORE_X_DRAM0_PMS_CONSTRAIN_ROM_WORLD_1_PMS": {
    -                    "description": "core_x_dram0_pms_constrain_rom_world_1_pms",
    -                    "offset": 26,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_DRAM0_PMS_MONITOR_0": {
    -              "description": "SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_0_REG",
    -              "offset": 200,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_DRAM0_PMS_MONITOR_LOCK": {
    -                    "description": "core_0_dram0_pms_monitor_lock",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_DRAM0_PMS_MONITOR_1": {
    -              "description": "SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_1_REG",
    -              "offset": 204,
    -              "size": 32,
    -              "reset_value": 3,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_DRAM0_PMS_MONITOR_VIOLATE_CLR": {
    -                    "description": "core_0_dram0_pms_monitor_violate_clr",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "CORE_0_DRAM0_PMS_MONITOR_VIOLATE_EN": {
    -                    "description": "core_0_dram0_pms_monitor_violate_en",
    -                    "offset": 1,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_DRAM0_PMS_MONITOR_2": {
    -              "description": "SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_2_REG",
    -              "offset": 208,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR": {
    -                    "description": "core_0_dram0_pms_monitor_violate_intr",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_LOCK": {
    -                    "description": "core_0_dram0_pms_monitor_violate_status_lock",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_WORLD": {
    -                    "description": "core_0_dram0_pms_monitor_violate_status_world",
    -                    "offset": 2,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_ADDR": {
    -                    "description": "core_0_dram0_pms_monitor_violate_status_addr",
    -                    "offset": 4,
    -                    "size": 24,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_DRAM0_PMS_MONITOR_3": {
    -              "description": "SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_3_REG",
    -              "offset": 212,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_WR": {
    -                    "description": "core_0_dram0_pms_monitor_violate_status_wr",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_BYTEEN": {
    -                    "description": "core_0_dram0_pms_monitor_violate_status_byteen",
    -                    "offset": 1,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_PIF_PMS_CONSTRAIN_0": {
    -              "description": "SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_0_REG",
    -              "offset": 216,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_PIF_PMS_CONSTRAIN_LOCK": {
    -                    "description": "core_0_pif_pms_constrain_lock",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_PIF_PMS_CONSTRAIN_1": {
    -              "description": "SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_1_REG",
    -              "offset": 220,
    -              "size": 32,
    -              "reset_value": 3473932287,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_UART": {
    -                    "description": "core_0_pif_pms_constrain_world_0_uart",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_G0SPI_1": {
    -                    "description": "core_0_pif_pms_constrain_world_0_g0spi_1",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_G0SPI_0": {
    -                    "description": "core_0_pif_pms_constrain_world_0_g0spi_0",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_GPIO": {
    -                    "description": "core_0_pif_pms_constrain_world_0_gpio",
    -                    "offset": 6,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_FE2": {
    -                    "description": "core_0_pif_pms_constrain_world_0_fe2",
    -                    "offset": 8,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_FE": {
    -                    "description": "core_0_pif_pms_constrain_world_0_fe",
    -                    "offset": 10,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_TIMER": {
    -                    "description": "core_0_pif_pms_constrain_world_0_timer",
    -                    "offset": 12,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_RTC": {
    -                    "description": "core_0_pif_pms_constrain_world_0_rtc",
    -                    "offset": 14,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_IO_MUX": {
    -                    "description": "core_0_pif_pms_constrain_world_0_io_mux",
    -                    "offset": 16,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_WDG": {
    -                    "description": "core_0_pif_pms_constrain_world_0_wdg",
    -                    "offset": 18,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_MISC": {
    -                    "description": "core_0_pif_pms_constrain_world_0_misc",
    -                    "offset": 24,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_I2C": {
    -                    "description": "core_0_pif_pms_constrain_world_0_i2c",
    -                    "offset": 26,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_UART1": {
    -                    "description": "core_0_pif_pms_constrain_world_0_uart1",
    -                    "offset": 30,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_PIF_PMS_CONSTRAIN_2": {
    -              "description": "SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_2_REG",
    -              "offset": 224,
    -              "size": 32,
    -              "reset_value": 4240641267,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_BT": {
    -                    "description": "core_0_pif_pms_constrain_world_0_bt",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_I2C_EXT0": {
    -                    "description": "core_0_pif_pms_constrain_world_0_i2c_ext0",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_UHCI0": {
    -                    "description": "core_0_pif_pms_constrain_world_0_uhci0",
    -                    "offset": 6,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_RMT": {
    -                    "description": "core_0_pif_pms_constrain_world_0_rmt",
    -                    "offset": 10,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_LEDC": {
    -                    "description": "core_0_pif_pms_constrain_world_0_ledc",
    -                    "offset": 16,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_BB": {
    -                    "description": "core_0_pif_pms_constrain_world_0_bb",
    -                    "offset": 22,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_TIMERGROUP": {
    -                    "description": "core_0_pif_pms_constrain_world_0_timergroup",
    -                    "offset": 26,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_TIMERGROUP1": {
    -                    "description": "core_0_pif_pms_constrain_world_0_timergroup1",
    -                    "offset": 28,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SYSTIMER": {
    -                    "description": "core_0_pif_pms_constrain_world_0_systimer",
    -                    "offset": 30,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_PIF_PMS_CONSTRAIN_3": {
    -              "description": "SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_3_REG",
    -              "offset": 228,
    -              "size": 32,
    -              "reset_value": 1019268147,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SPI_2": {
    -                    "description": "core_0_pif_pms_constrain_world_0_spi_2",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_APB_CTRL": {
    -                    "description": "core_0_pif_pms_constrain_world_0_apb_ctrl",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CAN": {
    -                    "description": "core_0_pif_pms_constrain_world_0_can",
    -                    "offset": 10,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_I2S1": {
    -                    "description": "core_0_pif_pms_constrain_world_0_i2s1",
    -                    "offset": 14,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_RWBT": {
    -                    "description": "core_0_pif_pms_constrain_world_0_rwbt",
    -                    "offset": 22,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_WIFIMAC": {
    -                    "description": "core_0_pif_pms_constrain_world_0_wifimac",
    -                    "offset": 26,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_PWR": {
    -                    "description": "core_0_pif_pms_constrain_world_0_pwr",
    -                    "offset": 28,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_PIF_PMS_CONSTRAIN_4": {
    -              "description": "SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_4_REG",
    -              "offset": 232,
    -              "size": 32,
    -              "reset_value": 4294964220,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_USB_WRAP": {
    -                    "description": "core_0_pif_pms_constrain_world_0_usb_wrap",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CRYPTO_PERI": {
    -                    "description": "core_0_pif_pms_constrain_world_0_crypto_peri",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CRYPTO_DMA": {
    -                    "description": "core_0_pif_pms_constrain_world_0_crypto_dma",
    -                    "offset": 6,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_APB_ADC": {
    -                    "description": "core_0_pif_pms_constrain_world_0_apb_adc",
    -                    "offset": 8,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_BT_PWR": {
    -                    "description": "core_0_pif_pms_constrain_world_0_bt_pwr",
    -                    "offset": 12,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_USB_DEVICE": {
    -                    "description": "core_0_pif_pms_constrain_world_0_usb_device",
    -                    "offset": 14,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SYSTEM": {
    -                    "description": "core_0_pif_pms_constrain_world_0_system",
    -                    "offset": 16,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SENSITIVE": {
    -                    "description": "core_0_pif_pms_constrain_world_0_sensitive",
    -                    "offset": 18,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_INTERRUPT": {
    -                    "description": "core_0_pif_pms_constrain_world_0_interrupt",
    -                    "offset": 20,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_DMA_COPY": {
    -                    "description": "core_0_pif_pms_constrain_world_0_dma_copy",
    -                    "offset": 22,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CACHE_CONFIG": {
    -                    "description": "core_0_pif_pms_constrain_world_0_cache_config",
    -                    "offset": 24,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_AD": {
    -                    "description": "core_0_pif_pms_constrain_world_0_ad",
    -                    "offset": 26,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_DIO": {
    -                    "description": "core_0_pif_pms_constrain_world_0_dio",
    -                    "offset": 28,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_WORLD_CONTROLLER": {
    -                    "description": "core_0_pif_pms_constrain_world_0_world_controller",
    -                    "offset": 30,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_PIF_PMS_CONSTRAIN_5": {
    -              "description": "SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_5_REG",
    -              "offset": 236,
    -              "size": 32,
    -              "reset_value": 3473932287,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_UART": {
    -                    "description": "core_0_pif_pms_constrain_world_1_uart",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_G0SPI_1": {
    -                    "description": "core_0_pif_pms_constrain_world_1_g0spi_1",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_G0SPI_0": {
    -                    "description": "core_0_pif_pms_constrain_world_1_g0spi_0",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_GPIO": {
    -                    "description": "core_0_pif_pms_constrain_world_1_gpio",
    -                    "offset": 6,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_FE2": {
    -                    "description": "core_0_pif_pms_constrain_world_1_fe2",
    -                    "offset": 8,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_FE": {
    -                    "description": "core_0_pif_pms_constrain_world_1_fe",
    -                    "offset": 10,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_TIMER": {
    -                    "description": "core_0_pif_pms_constrain_world_1_timer",
    -                    "offset": 12,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_RTC": {
    -                    "description": "core_0_pif_pms_constrain_world_1_rtc",
    -                    "offset": 14,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_IO_MUX": {
    -                    "description": "core_0_pif_pms_constrain_world_1_io_mux",
    -                    "offset": 16,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_WDG": {
    -                    "description": "core_0_pif_pms_constrain_world_1_wdg",
    -                    "offset": 18,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_MISC": {
    -                    "description": "core_0_pif_pms_constrain_world_1_misc",
    -                    "offset": 24,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_I2C": {
    -                    "description": "core_0_pif_pms_constrain_world_1_i2c",
    -                    "offset": 26,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_UART1": {
    -                    "description": "core_0_pif_pms_constrain_world_1_uart1",
    -                    "offset": 30,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_PIF_PMS_CONSTRAIN_6": {
    -              "description": "SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_6_REG",
    -              "offset": 240,
    -              "size": 32,
    -              "reset_value": 4240641267,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_BT": {
    -                    "description": "core_0_pif_pms_constrain_world_1_bt",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_I2C_EXT0": {
    -                    "description": "core_0_pif_pms_constrain_world_1_i2c_ext0",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_UHCI0": {
    -                    "description": "core_0_pif_pms_constrain_world_1_uhci0",
    -                    "offset": 6,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_RMT": {
    -                    "description": "core_0_pif_pms_constrain_world_1_rmt",
    -                    "offset": 10,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_LEDC": {
    -                    "description": "core_0_pif_pms_constrain_world_1_ledc",
    -                    "offset": 16,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_BB": {
    -                    "description": "core_0_pif_pms_constrain_world_1_bb",
    -                    "offset": 22,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_TIMERGROUP": {
    -                    "description": "core_0_pif_pms_constrain_world_1_timergroup",
    -                    "offset": 26,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_TIMERGROUP1": {
    -                    "description": "core_0_pif_pms_constrain_world_1_timergroup1",
    -                    "offset": 28,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SYSTIMER": {
    -                    "description": "core_0_pif_pms_constrain_world_1_systimer",
    -                    "offset": 30,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_PIF_PMS_CONSTRAIN_7": {
    -              "description": "SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_7_REG",
    -              "offset": 244,
    -              "size": 32,
    -              "reset_value": 1019268147,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SPI_2": {
    -                    "description": "core_0_pif_pms_constrain_world_1_spi_2",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_APB_CTRL": {
    -                    "description": "core_0_pif_pms_constrain_world_1_apb_ctrl",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CAN": {
    -                    "description": "core_0_pif_pms_constrain_world_1_can",
    -                    "offset": 10,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_I2S1": {
    -                    "description": "core_0_pif_pms_constrain_world_1_i2s1",
    -                    "offset": 14,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_RWBT": {
    -                    "description": "core_0_pif_pms_constrain_world_1_rwbt",
    -                    "offset": 22,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_WIFIMAC": {
    -                    "description": "core_0_pif_pms_constrain_world_1_wifimac",
    -                    "offset": 26,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_PWR": {
    -                    "description": "core_0_pif_pms_constrain_world_1_pwr",
    -                    "offset": 28,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_PIF_PMS_CONSTRAIN_8": {
    -              "description": "SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_8_REG",
    -              "offset": 248,
    -              "size": 32,
    -              "reset_value": 4294964220,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_USB_WRAP": {
    -                    "description": "core_0_pif_pms_constrain_world_1_usb_wrap",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CRYPTO_PERI": {
    -                    "description": "core_0_pif_pms_constrain_world_1_crypto_peri",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CRYPTO_DMA": {
    -                    "description": "core_0_pif_pms_constrain_world_1_crypto_dma",
    -                    "offset": 6,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_APB_ADC": {
    -                    "description": "core_0_pif_pms_constrain_world_1_apb_adc",
    -                    "offset": 8,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_BT_PWR": {
    -                    "description": "core_0_pif_pms_constrain_world_1_bt_pwr",
    -                    "offset": 12,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_USB_DEVICE": {
    -                    "description": "core_0_pif_pms_constrain_world_1_usb_device",
    -                    "offset": 14,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SYSTEM": {
    -                    "description": "core_0_pif_pms_constrain_world_1_system",
    -                    "offset": 16,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SENSITIVE": {
    -                    "description": "core_0_pif_pms_constrain_world_1_sensitive",
    -                    "offset": 18,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_INTERRUPT": {
    -                    "description": "core_0_pif_pms_constrain_world_1_interrupt",
    -                    "offset": 20,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_DMA_COPY": {
    -                    "description": "core_0_pif_pms_constrain_world_1_dma_copy",
    -                    "offset": 22,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CACHE_CONFIG": {
    -                    "description": "core_0_pif_pms_constrain_world_1_cache_config",
    -                    "offset": 24,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_AD": {
    -                    "description": "core_0_pif_pms_constrain_world_1_ad",
    -                    "offset": 26,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_DIO": {
    -                    "description": "core_0_pif_pms_constrain_world_1_dio",
    -                    "offset": 28,
    -                    "size": 2
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_WORLD_CONTROLLER": {
    -                    "description": "core_0_pif_pms_constrain_world_1_world_controller",
    -                    "offset": 30,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_PIF_PMS_CONSTRAIN_9": {
    -              "description": "SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_9_REG",
    -              "offset": 252,
    -              "size": 32,
    -              "reset_value": 4194303,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_SPLTADDR_WORLD_0": {
    -                    "description": "core_0_pif_pms_constrain_rtcfast_spltaddr_world_0",
    -                    "offset": 0,
    -                    "size": 11
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_SPLTADDR_WORLD_1": {
    -                    "description": "core_0_pif_pms_constrain_rtcfast_spltaddr_world_1",
    -                    "offset": 11,
    -                    "size": 11
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_PIF_PMS_CONSTRAIN_10": {
    -              "description": "SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_10_REG",
    -              "offset": 256,
    -              "size": 32,
    -              "reset_value": 4095,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_0_L": {
    -                    "description": "core_0_pif_pms_constrain_rtcfast_world_0_l",
    -                    "offset": 0,
    -                    "size": 3
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_0_H": {
    -                    "description": "core_0_pif_pms_constrain_rtcfast_world_0_h",
    -                    "offset": 3,
    -                    "size": 3
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_1_L": {
    -                    "description": "core_0_pif_pms_constrain_rtcfast_world_1_l",
    -                    "offset": 6,
    -                    "size": 3
    -                  },
    -                  "CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_1_H": {
    -                    "description": "core_0_pif_pms_constrain_rtcfast_world_1_h",
    -                    "offset": 9,
    -                    "size": 3
    -                  }
    -                }
    -              }
    -            },
    -            "REGION_PMS_CONSTRAIN_0": {
    -              "description": "SENSITIVE_REGION_PMS_CONSTRAIN_0_REG",
    -              "offset": 260,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "REGION_PMS_CONSTRAIN_LOCK": {
    -                    "description": "region_pms_constrain_lock",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "REGION_PMS_CONSTRAIN_1": {
    -              "description": "SENSITIVE_REGION_PMS_CONSTRAIN_1_REG",
    -              "offset": 264,
    -              "size": 32,
    -              "reset_value": 16383,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "REGION_PMS_CONSTRAIN_WORLD_0_AREA_0": {
    -                    "description": "region_pms_constrain_world_0_area_0",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "REGION_PMS_CONSTRAIN_WORLD_0_AREA_1": {
    -                    "description": "region_pms_constrain_world_0_area_1",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "REGION_PMS_CONSTRAIN_WORLD_0_AREA_2": {
    -                    "description": "region_pms_constrain_world_0_area_2",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "REGION_PMS_CONSTRAIN_WORLD_0_AREA_3": {
    -                    "description": "region_pms_constrain_world_0_area_3",
    -                    "offset": 6,
    -                    "size": 2
    -                  },
    -                  "REGION_PMS_CONSTRAIN_WORLD_0_AREA_4": {
    -                    "description": "region_pms_constrain_world_0_area_4",
    -                    "offset": 8,
    -                    "size": 2
    -                  },
    -                  "REGION_PMS_CONSTRAIN_WORLD_0_AREA_5": {
    -                    "description": "region_pms_constrain_world_0_area_5",
    -                    "offset": 10,
    -                    "size": 2
    -                  },
    -                  "REGION_PMS_CONSTRAIN_WORLD_0_AREA_6": {
    -                    "description": "region_pms_constrain_world_0_area_6",
    -                    "offset": 12,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "REGION_PMS_CONSTRAIN_2": {
    -              "description": "SENSITIVE_REGION_PMS_CONSTRAIN_2_REG",
    -              "offset": 268,
    -              "size": 32,
    -              "reset_value": 16383,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "REGION_PMS_CONSTRAIN_WORLD_1_AREA_0": {
    -                    "description": "region_pms_constrain_world_1_area_0",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "REGION_PMS_CONSTRAIN_WORLD_1_AREA_1": {
    -                    "description": "region_pms_constrain_world_1_area_1",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "REGION_PMS_CONSTRAIN_WORLD_1_AREA_2": {
    -                    "description": "region_pms_constrain_world_1_area_2",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "REGION_PMS_CONSTRAIN_WORLD_1_AREA_3": {
    -                    "description": "region_pms_constrain_world_1_area_3",
    -                    "offset": 6,
    -                    "size": 2
    -                  },
    -                  "REGION_PMS_CONSTRAIN_WORLD_1_AREA_4": {
    -                    "description": "region_pms_constrain_world_1_area_4",
    -                    "offset": 8,
    -                    "size": 2
    -                  },
    -                  "REGION_PMS_CONSTRAIN_WORLD_1_AREA_5": {
    -                    "description": "region_pms_constrain_world_1_area_5",
    -                    "offset": 10,
    -                    "size": 2
    -                  },
    -                  "REGION_PMS_CONSTRAIN_WORLD_1_AREA_6": {
    -                    "description": "region_pms_constrain_world_1_area_6",
    -                    "offset": 12,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "REGION_PMS_CONSTRAIN_3": {
    -              "description": "SENSITIVE_REGION_PMS_CONSTRAIN_3_REG",
    -              "offset": 272,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "REGION_PMS_CONSTRAIN_ADDR_0": {
    -                    "description": "region_pms_constrain_addr_0",
    -                    "offset": 0,
    -                    "size": 30
    -                  }
    -                }
    -              }
    -            },
    -            "REGION_PMS_CONSTRAIN_4": {
    -              "description": "SENSITIVE_REGION_PMS_CONSTRAIN_4_REG",
    -              "offset": 276,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "REGION_PMS_CONSTRAIN_ADDR_1": {
    -                    "description": "region_pms_constrain_addr_1",
    -                    "offset": 0,
    -                    "size": 30
    -                  }
    -                }
    -              }
    -            },
    -            "REGION_PMS_CONSTRAIN_5": {
    -              "description": "SENSITIVE_REGION_PMS_CONSTRAIN_5_REG",
    -              "offset": 280,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "REGION_PMS_CONSTRAIN_ADDR_2": {
    -                    "description": "region_pms_constrain_addr_2",
    -                    "offset": 0,
    -                    "size": 30
    -                  }
    -                }
    -              }
    -            },
    -            "REGION_PMS_CONSTRAIN_6": {
    -              "description": "SENSITIVE_REGION_PMS_CONSTRAIN_6_REG",
    -              "offset": 284,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "REGION_PMS_CONSTRAIN_ADDR_3": {
    -                    "description": "region_pms_constrain_addr_3",
    -                    "offset": 0,
    -                    "size": 30
    -                  }
    -                }
    -              }
    -            },
    -            "REGION_PMS_CONSTRAIN_7": {
    -              "description": "SENSITIVE_REGION_PMS_CONSTRAIN_7_REG",
    -              "offset": 288,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "REGION_PMS_CONSTRAIN_ADDR_4": {
    -                    "description": "region_pms_constrain_addr_4",
    -                    "offset": 0,
    -                    "size": 30
    -                  }
    -                }
    -              }
    -            },
    -            "REGION_PMS_CONSTRAIN_8": {
    -              "description": "SENSITIVE_REGION_PMS_CONSTRAIN_8_REG",
    -              "offset": 292,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "REGION_PMS_CONSTRAIN_ADDR_5": {
    -                    "description": "region_pms_constrain_addr_5",
    -                    "offset": 0,
    -                    "size": 30
    -                  }
    -                }
    -              }
    -            },
    -            "REGION_PMS_CONSTRAIN_9": {
    -              "description": "SENSITIVE_REGION_PMS_CONSTRAIN_9_REG",
    -              "offset": 296,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "REGION_PMS_CONSTRAIN_ADDR_6": {
    -                    "description": "region_pms_constrain_addr_6",
    -                    "offset": 0,
    -                    "size": 30
    -                  }
    -                }
    -              }
    -            },
    -            "REGION_PMS_CONSTRAIN_10": {
    -              "description": "SENSITIVE_REGION_PMS_CONSTRAIN_10_REG",
    -              "offset": 300,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "REGION_PMS_CONSTRAIN_ADDR_7": {
    -                    "description": "region_pms_constrain_addr_7",
    -                    "offset": 0,
    -                    "size": 30
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_PIF_PMS_MONITOR_0": {
    -              "description": "SENSITIVE_CORE_0_PIF_PMS_MONITOR_0_REG",
    -              "offset": 304,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_PIF_PMS_MONITOR_LOCK": {
    -                    "description": "core_0_pif_pms_monitor_lock",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_PIF_PMS_MONITOR_1": {
    -              "description": "SENSITIVE_CORE_0_PIF_PMS_MONITOR_1_REG",
    -              "offset": 308,
    -              "size": 32,
    -              "reset_value": 3,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_PIF_PMS_MONITOR_VIOLATE_CLR": {
    -                    "description": "core_0_pif_pms_monitor_violate_clr",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "CORE_0_PIF_PMS_MONITOR_VIOLATE_EN": {
    -                    "description": "core_0_pif_pms_monitor_violate_en",
    -                    "offset": 1,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_PIF_PMS_MONITOR_2": {
    -              "description": "SENSITIVE_CORE_0_PIF_PMS_MONITOR_2_REG",
    -              "offset": 312,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR": {
    -                    "description": "core_0_pif_pms_monitor_violate_intr",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HPORT_0": {
    -                    "description": "core_0_pif_pms_monitor_violate_status_hport_0",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HSIZE": {
    -                    "description": "core_0_pif_pms_monitor_violate_status_hsize",
    -                    "offset": 2,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HWRITE": {
    -                    "description": "core_0_pif_pms_monitor_violate_status_hwrite",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HWORLD": {
    -                    "description": "core_0_pif_pms_monitor_violate_status_hworld",
    -                    "offset": 6,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_PIF_PMS_MONITOR_3": {
    -              "description": "SENSITIVE_CORE_0_PIF_PMS_MONITOR_3_REG",
    -              "offset": 316,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HADDR": {
    -                    "description": "core_0_pif_pms_monitor_violate_status_haddr",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_PIF_PMS_MONITOR_4": {
    -              "description": "SENSITIVE_CORE_0_PIF_PMS_MONITOR_4_REG",
    -              "offset": 320,
    -              "size": 32,
    -              "reset_value": 3,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_CLR": {
    -                    "description": "core_0_pif_pms_monitor_nonword_violate_clr",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_EN": {
    -                    "description": "core_0_pif_pms_monitor_nonword_violate_en",
    -                    "offset": 1,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_PIF_PMS_MONITOR_5": {
    -              "description": "SENSITIVE_CORE_0_PIF_PMS_MONITOR_5_REG",
    -              "offset": 324,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_INTR": {
    -                    "description": "core_0_pif_pms_monitor_nonword_violate_intr",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_STATUS_HSIZE": {
    -                    "description": "core_0_pif_pms_monitor_nonword_violate_status_hsize",
    -                    "offset": 1,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_STATUS_HWORLD": {
    -                    "description": "core_0_pif_pms_monitor_nonword_violate_status_hworld",
    -                    "offset": 3,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_0_PIF_PMS_MONITOR_6": {
    -              "description": "SENSITIVE_CORE_0_PIF_PMS_MONITOR_6_REG",
    -              "offset": 328,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_STATUS_HADDR": {
    -                    "description": "core_0_pif_pms_monitor_nonword_violate_status_haddr",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "BACKUP_BUS_PMS_CONSTRAIN_0": {
    -              "description": "SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_0_REG",
    -              "offset": 332,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BACKUP_BUS_PMS_CONSTRAIN_LOCK": {
    -                    "description": "backup_bus_pms_constrain_lock",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "BACKUP_BUS_PMS_CONSTRAIN_1": {
    -              "description": "SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_1_REG",
    -              "offset": 336,
    -              "size": 32,
    -              "reset_value": 3473932287,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BACKUP_BUS_PMS_CONSTRAIN_UART": {
    -                    "description": "backup_bus_pms_constrain_uart",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_G0SPI_1": {
    -                    "description": "backup_bus_pms_constrain_g0spi_1",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_G0SPI_0": {
    -                    "description": "backup_bus_pms_constrain_g0spi_0",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_GPIO": {
    -                    "description": "backup_bus_pms_constrain_gpio",
    -                    "offset": 6,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_FE2": {
    -                    "description": "backup_bus_pms_constrain_fe2",
    -                    "offset": 8,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_FE": {
    -                    "description": "backup_bus_pms_constrain_fe",
    -                    "offset": 10,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_TIMER": {
    -                    "description": "backup_bus_pms_constrain_timer",
    -                    "offset": 12,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_RTC": {
    -                    "description": "backup_bus_pms_constrain_rtc",
    -                    "offset": 14,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_IO_MUX": {
    -                    "description": "backup_bus_pms_constrain_io_mux",
    -                    "offset": 16,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_WDG": {
    -                    "description": "backup_bus_pms_constrain_wdg",
    -                    "offset": 18,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_MISC": {
    -                    "description": "backup_bus_pms_constrain_misc",
    -                    "offset": 24,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_I2C": {
    -                    "description": "backup_bus_pms_constrain_i2c",
    -                    "offset": 26,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_UART1": {
    -                    "description": "backup_bus_pms_constrain_uart1",
    -                    "offset": 30,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "BACKUP_BUS_PMS_CONSTRAIN_2": {
    -              "description": "SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_2_REG",
    -              "offset": 340,
    -              "size": 32,
    -              "reset_value": 4240641267,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BACKUP_BUS_PMS_CONSTRAIN_BT": {
    -                    "description": "backup_bus_pms_constrain_bt",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_I2C_EXT0": {
    -                    "description": "backup_bus_pms_constrain_i2c_ext0",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_UHCI0": {
    -                    "description": "backup_bus_pms_constrain_uhci0",
    -                    "offset": 6,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_RMT": {
    -                    "description": "backup_bus_pms_constrain_rmt",
    -                    "offset": 10,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_LEDC": {
    -                    "description": "backup_bus_pms_constrain_ledc",
    -                    "offset": 16,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_BB": {
    -                    "description": "backup_bus_pms_constrain_bb",
    -                    "offset": 22,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_TIMERGROUP": {
    -                    "description": "backup_bus_pms_constrain_timergroup",
    -                    "offset": 26,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_TIMERGROUP1": {
    -                    "description": "backup_bus_pms_constrain_timergroup1",
    -                    "offset": 28,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_SYSTIMER": {
    -                    "description": "backup_bus_pms_constrain_systimer",
    -                    "offset": 30,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "BACKUP_BUS_PMS_CONSTRAIN_3": {
    -              "description": "SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_3_REG",
    -              "offset": 344,
    -              "size": 32,
    -              "reset_value": 1019268147,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BACKUP_BUS_PMS_CONSTRAIN_SPI_2": {
    -                    "description": "backup_bus_pms_constrain_spi_2",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_APB_CTRL": {
    -                    "description": "backup_bus_pms_constrain_apb_ctrl",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_CAN": {
    -                    "description": "backup_bus_pms_constrain_can",
    -                    "offset": 10,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_I2S1": {
    -                    "description": "backup_bus_pms_constrain_i2s1",
    -                    "offset": 14,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_RWBT": {
    -                    "description": "backup_bus_pms_constrain_rwbt",
    -                    "offset": 22,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_WIFIMAC": {
    -                    "description": "backup_bus_pms_constrain_wifimac",
    -                    "offset": 26,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_PWR": {
    -                    "description": "backup_bus_pms_constrain_pwr",
    -                    "offset": 28,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "BACKUP_BUS_PMS_CONSTRAIN_4": {
    -              "description": "SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_4_REG",
    -              "offset": 348,
    -              "size": 32,
    -              "reset_value": 62460,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BACKUP_BUS_PMS_CONSTRAIN_USB_WRAP": {
    -                    "description": "backup_bus_pms_constrain_usb_wrap",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_CRYPTO_PERI": {
    -                    "description": "backup_bus_pms_constrain_crypto_peri",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_CRYPTO_DMA": {
    -                    "description": "backup_bus_pms_constrain_crypto_dma",
    -                    "offset": 6,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_APB_ADC": {
    -                    "description": "backup_bus_pms_constrain_apb_adc",
    -                    "offset": 8,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_BT_PWR": {
    -                    "description": "backup_bus_pms_constrain_bt_pwr",
    -                    "offset": 12,
    -                    "size": 2
    -                  },
    -                  "BACKUP_BUS_PMS_CONSTRAIN_USB_DEVICE": {
    -                    "description": "backup_bus_pms_constrain_usb_device",
    -                    "offset": 14,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "BACKUP_BUS_PMS_MONITOR_0": {
    -              "description": "SENSITIVE_BACKUP_BUS_PMS_MONITOR_0_REG",
    -              "offset": 352,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BACKUP_BUS_PMS_MONITOR_LOCK": {
    -                    "description": "backup_bus_pms_monitor_lock",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "BACKUP_BUS_PMS_MONITOR_1": {
    -              "description": "SENSITIVE_BACKUP_BUS_PMS_MONITOR_1_REG",
    -              "offset": 356,
    -              "size": 32,
    -              "reset_value": 3,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BACKUP_BUS_PMS_MONITOR_VIOLATE_CLR": {
    -                    "description": "backup_bus_pms_monitor_violate_clr",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "BACKUP_BUS_PMS_MONITOR_VIOLATE_EN": {
    -                    "description": "backup_bus_pms_monitor_violate_en",
    -                    "offset": 1,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "BACKUP_BUS_PMS_MONITOR_2": {
    -              "description": "SENSITIVE_BACKUP_BUS_PMS_MONITOR_2_REG",
    -              "offset": 360,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BACKUP_BUS_PMS_MONITOR_VIOLATE_INTR": {
    -                    "description": "backup_bus_pms_monitor_violate_intr",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "BACKUP_BUS_PMS_MONITOR_VIOLATE_STATUS_HTRANS": {
    -                    "description": "backup_bus_pms_monitor_violate_status_htrans",
    -                    "offset": 1,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "BACKUP_BUS_PMS_MONITOR_VIOLATE_STATUS_HSIZE": {
    -                    "description": "backup_bus_pms_monitor_violate_status_hsize",
    -                    "offset": 3,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  },
    -                  "BACKUP_BUS_PMS_MONITOR_VIOLATE_STATUS_HWRITE": {
    -                    "description": "backup_bus_pms_monitor_violate_status_hwrite",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "BACKUP_BUS_PMS_MONITOR_3": {
    -              "description": "SENSITIVE_BACKUP_BUS_PMS_MONITOR_3_REG",
    -              "offset": 364,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BACKUP_BUS_PMS_MONITOR_VIOLATE_HADDR": {
    -                    "description": "backup_bus_pms_monitor_violate_haddr",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CLOCK_GATE": {
    -              "description": "SENSITIVE_CLOCK_GATE_REG",
    -              "offset": 368,
    -              "size": 32,
    -              "reset_value": 1,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CLK_EN": {
    -                    "description": "clk_en",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DATE": {
    -              "description": "SENSITIVE_DATE_REG",
    -              "offset": 4092,
    -              "size": 32,
    -              "reset_value": 33620480,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATE": {
    -                    "description": "reg_date",
    -                    "offset": 0,
    -                    "size": 28
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "SHA": {
    -        "description": "SHA (Secure Hash Algorithm) Accelerator",
    -        "children": {
    -          "registers": {
    -            "MODE": {
    -              "description": "Initial configuration register.",
    -              "offset": 0,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "MODE": {
    -                    "description": "Sha mode.",
    -                    "offset": 0,
    -                    "size": 3
    -                  }
    -                }
    -              }
    -            },
    -            "T_STRING": {
    -              "description": "SHA 512/t configuration register 0.",
    -              "offset": 4,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "T_STRING": {
    -                    "description": "Sha t_string (used if and only if mode == SHA_512/t).",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "T_LENGTH": {
    -              "description": "SHA 512/t configuration register 1.",
    -              "offset": 8,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "T_LENGTH": {
    -                    "description": "Sha t_length (used if and only if mode == SHA_512/t).",
    -                    "offset": 0,
    -                    "size": 6
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_BLOCK_NUM": {
    -              "description": "DMA configuration register 0.",
    -              "offset": 12,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_BLOCK_NUM": {
    -                    "description": "Dma-sha block number.",
    -                    "offset": 0,
    -                    "size": 6
    -                  }
    -                }
    -              }
    -            },
    -            "START": {
    -              "description": "Typical SHA configuration register 0.",
    -              "offset": 16,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "START": {
    -                    "description": "Reserved.",
    -                    "offset": 1,
    -                    "size": 31,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CONTINUE": {
    -              "description": "Typical SHA configuration register 1.",
    -              "offset": 20,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CONTINUE": {
    -                    "description": "Reserved.",
    -                    "offset": 1,
    -                    "size": 31,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "BUSY": {
    -              "description": "Busy register.",
    -              "offset": 24,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "STATE": {
    -                    "description": "Sha busy state. 1'b0: idle. 1'b1: busy.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_START": {
    -              "description": "DMA configuration register 1.",
    -              "offset": 28,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_START": {
    -                    "description": "Start dma-sha.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_CONTINUE": {
    -              "description": "DMA configuration register 2.",
    -              "offset": 32,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_CONTINUE": {
    -                    "description": "Continue dma-sha.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CLEAR_IRQ": {
    -              "description": "Interrupt clear register.",
    -              "offset": 36,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CLEAR_INTERRUPT": {
    -                    "description": "Clear sha interrupt.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IRQ_ENA": {
    -              "description": "Interrupt enable register.",
    -              "offset": 40,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "INTERRUPT_ENA": {
    -                    "description": "Sha interrupt enable register. 1'b0: disable(default). 1'b1: enable.",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DATE": {
    -              "description": "Date register.",
    -              "offset": 44,
    -              "size": 32,
    -              "reset_value": 538969622,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATE": {
    -                    "description": "Sha date information/ sha version information.",
    -                    "offset": 0,
    -                    "size": 30
    -                  }
    -                }
    -              }
    -            },
    -            "H_MEM": {
    -              "description": "Sha H memory which contains intermediate hash or finial hash.",
    -              "offset": 64,
    -              "size": 8,
    -              "count": 64,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295
    -            },
    -            "M_MEM": {
    -              "description": "Sha M memory which contains message.",
    -              "offset": 128,
    -              "size": 8,
    -              "count": 64,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295
    -            }
    -          }
    -        }
    -      },
    -      "SPI0": {
    -        "description": "SPI (Serial Peripheral Interface) Controller",
    -        "children": {
    -          "registers": {
    -            "CTRL": {
    -              "description": "SPI0 control register.",
    -              "offset": 8,
    -              "size": 32,
    -              "reset_value": 2891776,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "FDUMMY_OUT": {
    -                    "description": "In the dummy phase the signal level of spi is output by the spi controller.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "FCMD_DUAL": {
    -                    "description": "Apply 2 signals during command phase 1:enable 0: disable",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "FCMD_QUAD": {
    -                    "description": "Apply 4 signals during command phase 1:enable 0: disable",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "FASTRD_MODE": {
    -                    "description": "This bit enable the bits: spi_mem_fread_qio, spi_mem_fread_dio, spi_mem_fread_qout and spi_mem_fread_dout. 1: enable 0: disable.",
    -                    "offset": 13,
    -                    "size": 1
    -                  },
    -                  "FREAD_DUAL": {
    -                    "description": "In the read operations, read-data phase apply 2 signals. 1: enable 0: disable.",
    -                    "offset": 14,
    -                    "size": 1
    -                  },
    -                  "Q_POL": {
    -                    "description": "The bit is used to set MISO line polarity, 1: high 0, low",
    -                    "offset": 18,
    -                    "size": 1
    -                  },
    -                  "D_POL": {
    -                    "description": "The bit is used to set MOSI line polarity, 1: high 0, low",
    -                    "offset": 19,
    -                    "size": 1
    -                  },
    -                  "FREAD_QUAD": {
    -                    "description": "In the read operations read-data phase apply 4 signals. 1: enable 0: disable.",
    -                    "offset": 20,
    -                    "size": 1
    -                  },
    -                  "WP": {
    -                    "description": "Write protect signal output when SPI is idle.  1: output high, 0: output low.",
    -                    "offset": 21,
    -                    "size": 1
    -                  },
    -                  "FREAD_DIO": {
    -                    "description": "In the read operations address phase and read-data phase apply 2 signals. 1: enable 0: disable.",
    -                    "offset": 23,
    -                    "size": 1
    -                  },
    -                  "FREAD_QIO": {
    -                    "description": "In the read operations address phase and read-data phase apply 4 signals. 1: enable 0: disable.",
    -                    "offset": 24,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CTRL1": {
    -              "description": "SPI0 control1 register.",
    -              "offset": 12,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CLK_MODE": {
    -                    "description": "SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is alwasy on.",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "RXFIFO_RST": {
    -                    "description": "SPI0 RX FIFO reset signal.",
    -                    "offset": 30,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CTRL2": {
    -              "description": "SPI0 control2 register.",
    -              "offset": 16,
    -              "size": 32,
    -              "reset_value": 33,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CS_SETUP_TIME": {
    -                    "description": "(cycles-1) of prepare phase by spi clock this bits are combined with spi_mem_cs_setup bit.",
    -                    "offset": 0,
    -                    "size": 5
    -                  },
    -                  "CS_HOLD_TIME": {
    -                    "description": "Spi cs signal is delayed to inactive by spi clock this bits are combined with spi_mem_cs_hold bit.",
    -                    "offset": 5,
    -                    "size": 5
    -                  },
    -                  "CS_HOLD_DELAY": {
    -                    "description": "These bits are used to set the minimum CS high time tSHSL between SPI burst transfer when accesses to flash. tSHSL is (SPI_MEM_CS_HOLD_DELAY[5:0] + 1) MSPI core clock cycles.",
    -                    "offset": 25,
    -                    "size": 6
    -                  },
    -                  "SYNC_RESET": {
    -                    "description": "The FSM will be reset.",
    -                    "offset": 31,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CLOCK": {
    -              "description": "SPI clock division control register.",
    -              "offset": 20,
    -              "size": 32,
    -              "reset_value": 196867,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CLKCNT_L": {
    -                    "description": "In the master mode it must be equal to spi_mem_clkcnt_N.",
    -                    "offset": 0,
    -                    "size": 8
    -                  },
    -                  "CLKCNT_H": {
    -                    "description": "In the master mode it must be floor((spi_mem_clkcnt_N+1)/2-1).",
    -                    "offset": 8,
    -                    "size": 8
    -                  },
    -                  "CLKCNT_N": {
    -                    "description": "In the master mode it is the divider of spi_mem_clk. So spi_mem_clk frequency is system/(spi_mem_clkcnt_N+1)",
    -                    "offset": 16,
    -                    "size": 8
    -                  },
    -                  "CLK_EQU_SYSCLK": {
    -                    "description": "Set this bit in 1-division mode.",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "USER": {
    -              "description": "SPI0 user register.",
    -              "offset": 24,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CS_HOLD": {
    -                    "description": "spi cs keep low when spi is in  done  phase. 1: enable 0: disable.",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "CS_SETUP": {
    -                    "description": "spi cs is enable when spi is in  prepare  phase. 1: enable 0: disable.",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "CK_OUT_EDGE": {
    -                    "description": "the bit combined with spi_mem_mosi_delay_mode bits to set mosi signal delay mode.",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "USR_DUMMY_IDLE": {
    -                    "description": "spi clock is disable in dummy phase when the bit is enable.",
    -                    "offset": 26,
    -                    "size": 1
    -                  },
    -                  "USR_DUMMY": {
    -                    "description": "This bit enable the dummy phase of an operation.",
    -                    "offset": 29,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "USER1": {
    -              "description": "SPI0 user1 register.",
    -              "offset": 28,
    -              "size": 32,
    -              "reset_value": 1543503879,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "USR_DUMMY_CYCLELEN": {
    -                    "description": "The length in spi_mem_clk cycles of dummy phase. The register value shall be (cycle_num-1).",
    -                    "offset": 0,
    -                    "size": 6
    -                  },
    -                  "USR_ADDR_BITLEN": {
    -                    "description": "The length in bits of address phase. The register value shall be (bit_num-1).",
    -                    "offset": 26,
    -                    "size": 6
    -                  }
    -                }
    -              }
    -            },
    -            "USER2": {
    -              "description": "SPI0 user2 register.",
    -              "offset": 32,
    -              "size": 32,
    -              "reset_value": 1879048192,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "USR_COMMAND_VALUE": {
    -                    "description": "The value of  command.",
    -                    "offset": 0,
    -                    "size": 16
    -                  },
    -                  "USR_COMMAND_BITLEN": {
    -                    "description": "The length in bits of command phase. The register value shall be (bit_num-1)",
    -                    "offset": 28,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "RD_STATUS": {
    -              "description": "SPI0 read control register.",
    -              "offset": 44,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "WB_MODE": {
    -                    "description": "Mode bits in the flash fast read mode  it is combined with spi_mem_fastrd_mode bit.",
    -                    "offset": 16,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "MISC": {
    -              "description": "SPI0 misc register",
    -              "offset": 52,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TRANS_END": {
    -                    "description": "The bit is used to indicate the  spi0_mst_st controlled transmitting is done.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "TRANS_END_INT_ENA": {
    -                    "description": "The bit is used to enable the interrupt of  spi0_mst_st controlled transmitting is done.",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "CSPI_ST_TRANS_END": {
    -                    "description": "The bit is used to indicate the  spi0_slv_st controlled transmitting is done.",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "CSPI_ST_TRANS_END_INT_ENA": {
    -                    "description": "The bit is used to enable the interrupt of spi0_slv_st controlled transmitting is done.",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "CK_IDLE_EDGE": {
    -                    "description": "1: spi clk line is high when idle     0: spi clk line is low when idle",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "CS_KEEP_ACTIVE": {
    -                    "description": "spi cs line keep low when the bit is set.",
    -                    "offset": 10,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CACHE_FCTRL": {
    -              "description": "SPI0 bit mode control register.",
    -              "offset": 60,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CACHE_REQ_EN": {
    -                    "description": "For SPI0, Cache access enable, 1: enable, 0:disable.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "CACHE_USR_ADDR_4BYTE": {
    -                    "description": "For SPI0,  cache  read flash with 4 bytes address, 1: enable, 0:disable.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "CACHE_FLASH_USR_CMD": {
    -                    "description": "For SPI0,  cache  read flash for user define command, 1: enable, 0:disable.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "FDIN_DUAL": {
    -                    "description": "For SPI0 flash, din phase apply 2 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_dio.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "FDOUT_DUAL": {
    -                    "description": "For SPI0 flash, dout phase apply 2 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_dio.",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "FADDR_DUAL": {
    -                    "description": "For SPI0 flash, address phase apply 2 signals. 1: enable 0: disable.  The bit is the same with spi_mem_fread_dio.",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "FDIN_QUAD": {
    -                    "description": "For SPI0 flash, din phase apply 4 signals. 1: enable 0: disable.  The bit is the same with spi_mem_fread_qio.",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "FDOUT_QUAD": {
    -                    "description": "For SPI0 flash, dout phase apply 4 signals. 1: enable 0: disable.  The bit is the same with spi_mem_fread_qio.",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "FADDR_QUAD": {
    -                    "description": "For SPI0 flash, address phase apply 4 signals. 1: enable 0: disable.  The bit is the same with spi_mem_fread_qio.",
    -                    "offset": 8,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "FSM": {
    -              "description": "SPI0 FSM status register",
    -              "offset": 84,
    -              "size": 32,
    -              "reset_value": 512,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CSPI_ST": {
    -                    "description": "The current status of SPI0 slave FSM: spi0_slv_st. 0: idle state, 1: preparation state, 2: send command state, 3: send address state, 4: wait state, 5: read data state, 6:write data state, 7: done state, 8: read data end state.",
    -                    "offset": 0,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  },
    -                  "EM_ST": {
    -                    "description": "The current status of SPI0 master FSM: spi0_mst_st. 0: idle state, 1:EM_CACHE_GRANT , 2: program/erase suspend state, 3: SPI0 read data state, 4: wait cache/EDMA sent data is stored in SPI0 TX FIFO, 5: SPI0 write data state.",
    -                    "offset": 4,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  },
    -                  "CSPI_LOCK_DELAY_TIME": {
    -                    "description": "The lock delay time of SPI0/1 arbiter by spi0_slv_st, after PER is sent by SPI1.",
    -                    "offset": 7,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "TIMING_CALI": {
    -              "description": "SPI0 timing calibration register",
    -              "offset": 168,
    -              "size": 32,
    -              "reset_value": 1,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMING_CLK_ENA": {
    -                    "description": "The bit is used to enable timing adjust clock for all reading operations.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "TIMING_CALI": {
    -                    "description": "The bit is used to enable timing auto-calibration for all reading operations.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "EXTRA_DUMMY_CYCLELEN": {
    -                    "description": "add extra dummy spi clock cycle length for spi clock calibration.",
    -                    "offset": 2,
    -                    "size": 3
    -                  }
    -                }
    -              }
    -            },
    -            "DIN_MODE": {
    -              "description": "SPI0 input delay mode control register",
    -              "offset": 172,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DIN0_MODE": {
    -                    "description": "the input signals are delayed by system clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb,  3: input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input with the spi_clk high edge,  6: input with the spi_clk low edge",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "DIN1_MODE": {
    -                    "description": "the input signals are delayed by system clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb,  3: input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input with the spi_clk high edge,  6: input with the spi_clk low edge",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "DIN2_MODE": {
    -                    "description": "the input signals are delayed by system clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb,  3: input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input with the spi_clk high edge,  6: input with the spi_clk low edge",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "DIN3_MODE": {
    -                    "description": "the input signals are delayed by system clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb,  3: input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input with the spi_clk high edge,  6: input with the spi_clk low edge",
    -                    "offset": 6,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "DIN_NUM": {
    -              "description": "SPI0 input delay number control register",
    -              "offset": 176,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DIN0_NUM": {
    -                    "description": "the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "DIN1_NUM": {
    -                    "description": "the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "DIN2_NUM": {
    -                    "description": "the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "DIN3_NUM": {
    -                    "description": "the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...",
    -                    "offset": 6,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "DOUT_MODE": {
    -              "description": "SPI0 output delay mode control register",
    -              "offset": 180,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DOUT0_MODE": {
    -                    "description": "the output signals are delayed by system clock cycles, 0: output without delayed, 1: output with the posedge of clk_apb,2 output with the negedge of clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low edge",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "DOUT1_MODE": {
    -                    "description": "the output signals are delayed by system clock cycles, 0: output without delayed, 1: output with the posedge of clk_apb,2 output with the negedge of clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low edge",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "DOUT2_MODE": {
    -                    "description": "the output signals are delayed by system clock cycles, 0: output without delayed, 1: output with the posedge of clk_apb,2 output with the negedge of clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low edge",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "DOUT3_MODE": {
    -                    "description": "the output signals are delayed by system clock cycles, 0: output without delayed, 1: output with the posedge of clk_apb,2 output with the negedge of clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low edge",
    -                    "offset": 3,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CLOCK_GATE": {
    -              "description": "SPI0 clk_gate register",
    -              "offset": 220,
    -              "size": 32,
    -              "reset_value": 1,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CLK_EN": {
    -                    "description": "Register clock gate enable signal. 1: Enable. 0: Disable.",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CORE_CLK_SEL": {
    -              "description": "SPI0 module clock select register",
    -              "offset": 224,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SPI01_CLK_SEL": {
    -                    "description": "When the digital system clock selects PLL clock and the frequency of PLL clock is 480MHz, the value of reg_spi01_clk_sel:  0: SPI0/1 module clock (clk) is 80MHz. 1: SPI0/1 module clock (clk) is 120MHz.  2: SPI0/1 module clock (clk) 160MHz. 3: Not used. When the digital system clock selects PLL clock and the frequency of PLL clock is 320MHz, the value of reg_spi01_clk_sel:  0: SPI0/1 module clock (clk) is 80MHz. 1: SPI0/1 module clock (clk) is 80MHz.  2: SPI0/1 module clock (clk) 160MHz. 3: Not used.",
    -                    "offset": 0,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "DATE": {
    -              "description": "Version control register",
    -              "offset": 1020,
    -              "size": 32,
    -              "reset_value": 33583408,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATE": {
    -                    "description": "SPI register version.",
    -                    "offset": 0,
    -                    "size": 28
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "SPI1": {
    -        "description": "SPI (Serial Peripheral Interface) Controller",
    -        "children": {
    -          "registers": {
    -            "CMD": {
    -              "description": "SPI1 memory command register",
    -              "offset": 0,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SPI1_MST_ST": {
    -                    "description": "The current status of SPI1 master FSM.",
    -                    "offset": 0,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  },
    -                  "MSPI_ST": {
    -                    "description": "The current status of SPI1 slave FSM: mspi_st. 0: idle state, 1: preparation state, 2: send command state, 3: send address state, 4: wait state, 5: read data state, 6:write data state, 7: done state, 8: read data end state.",
    -                    "offset": 4,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  },
    -                  "FLASH_PE": {
    -                    "description": "In user mode, it is set to indicate that program/erase operation will be triggered. The bit is combined with spi_mem_usr bit. The bit will be cleared once the operation done.1: enable 0: disable.",
    -                    "offset": 17,
    -                    "size": 1
    -                  },
    -                  "USR": {
    -                    "description": "User define command enable.  An operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.",
    -                    "offset": 18,
    -                    "size": 1
    -                  },
    -                  "FLASH_HPM": {
    -                    "description": "Drive Flash into high performance mode.  The bit will be cleared once the operation done.1: enable 0: disable.",
    -                    "offset": 19,
    -                    "size": 1
    -                  },
    -                  "FLASH_RES": {
    -                    "description": "This bit combined with reg_resandres bit releases Flash from the power-down state or high performance mode and obtains the devices ID. The bit will be cleared once the operation done.1: enable 0: disable.",
    -                    "offset": 20,
    -                    "size": 1
    -                  },
    -                  "FLASH_DP": {
    -                    "description": "Drive Flash into power down.  An operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.",
    -                    "offset": 21,
    -                    "size": 1
    -                  },
    -                  "FLASH_CE": {
    -                    "description": "Chip erase enable. Chip erase operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.",
    -                    "offset": 22,
    -                    "size": 1
    -                  },
    -                  "FLASH_BE": {
    -                    "description": "Block erase enable(32KB) .  Block erase operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.",
    -                    "offset": 23,
    -                    "size": 1
    -                  },
    -                  "FLASH_SE": {
    -                    "description": "Sector erase enable(4KB). Sector erase operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.",
    -                    "offset": 24,
    -                    "size": 1
    -                  },
    -                  "FLASH_PP": {
    -                    "description": "Page program enable(1 byte ~256 bytes data to be programmed). Page program operation  will be triggered when the bit is set. The bit will be cleared once the operation done .1: enable 0: disable.",
    -                    "offset": 25,
    -                    "size": 1
    -                  },
    -                  "FLASH_WRSR": {
    -                    "description": "Write status register enable.   Write status operation  will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.",
    -                    "offset": 26,
    -                    "size": 1
    -                  },
    -                  "FLASH_RDSR": {
    -                    "description": "Read status register-1.  Read status operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.",
    -                    "offset": 27,
    -                    "size": 1
    -                  },
    -                  "FLASH_RDID": {
    -                    "description": "Read JEDEC ID . Read ID command will be sent when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.",
    -                    "offset": 28,
    -                    "size": 1
    -                  },
    -                  "FLASH_WRDI": {
    -                    "description": "Write flash disable. Write disable command will be sent when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.",
    -                    "offset": 29,
    -                    "size": 1
    -                  },
    -                  "FLASH_WREN": {
    -                    "description": "Write flash enable.  Write enable command will be sent when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "FLASH_READ": {
    -                    "description": "Read flash enable. Read flash operation will be triggered when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "ADDR": {
    -              "description": "SPI1 address register",
    -              "offset": 4,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "USR_ADDR_VALUE": {
    -                    "description": "In user mode, it is the memory address. other then the bit0-bit23 is the memory address, the bit24-bit31 are the byte length of a transfer.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "CTRL": {
    -              "description": "SPI1 control register.",
    -              "offset": 8,
    -              "size": 32,
    -              "reset_value": 2924544,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "FDUMMY_OUT": {
    -                    "description": "In the dummy phase the signal level of spi is output by the spi controller.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "FCMD_DUAL": {
    -                    "description": "Apply 2 signals during command phase 1:enable 0: disable",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "FCMD_QUAD": {
    -                    "description": "Apply 4 signals during command phase 1:enable 0: disable",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "FCS_CRC_EN": {
    -                    "description": "For SPI1,  initialize crc32 module before writing encrypted data to flash. Active low.",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "TX_CRC_EN": {
    -                    "description": "For SPI1,  enable crc32 when writing encrypted data to flash. 1: enable 0:disable",
    -                    "offset": 11,
    -                    "size": 1
    -                  },
    -                  "FASTRD_MODE": {
    -                    "description": "This bit enable the bits: spi_mem_fread_qio, spi_mem_fread_dio, spi_mem_fread_qout and spi_mem_fread_dout. 1: enable 0: disable.",
    -                    "offset": 13,
    -                    "size": 1
    -                  },
    -                  "FREAD_DUAL": {
    -                    "description": "In the read operations, read-data phase apply 2 signals. 1: enable 0: disable.",
    -                    "offset": 14,
    -                    "size": 1
    -                  },
    -                  "RESANDRES": {
    -                    "description": "The Device ID is read out to SPI_MEM_RD_STATUS register,  this bit combine with spi_mem_flash_res bit. 1: enable 0: disable.",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "Q_POL": {
    -                    "description": "The bit is used to set MISO line polarity, 1: high 0, low",
    -                    "offset": 18,
    -                    "size": 1
    -                  },
    -                  "D_POL": {
    -                    "description": "The bit is used to set MOSI line polarity, 1: high 0, low",
    -                    "offset": 19,
    -                    "size": 1
    -                  },
    -                  "FREAD_QUAD": {
    -                    "description": "In the read operations read-data phase apply 4 signals. 1: enable 0: disable.",
    -                    "offset": 20,
    -                    "size": 1
    -                  },
    -                  "WP": {
    -                    "description": "Write protect signal output when SPI is idle.  1: output high, 0: output low.",
    -                    "offset": 21,
    -                    "size": 1
    -                  },
    -                  "WRSR_2B": {
    -                    "description": "two bytes data will be written to status register when it is set. 1: enable 0: disable.",
    -                    "offset": 22,
    -                    "size": 1
    -                  },
    -                  "FREAD_DIO": {
    -                    "description": "In the read operations address phase and read-data phase apply 2 signals. 1: enable 0: disable.",
    -                    "offset": 23,
    -                    "size": 1
    -                  },
    -                  "FREAD_QIO": {
    -                    "description": "In the read operations address phase and read-data phase apply 4 signals. 1: enable 0: disable.",
    -                    "offset": 24,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CTRL1": {
    -              "description": "SPI1 control1 register.",
    -              "offset": 12,
    -              "size": 32,
    -              "reset_value": 4092,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CLK_MODE": {
    -                    "description": "SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is alwasy on.",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "CS_HOLD_DLY_RES": {
    -                    "description": "After RES/DP/HPM command is sent, SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 512) SPI_CLK cycles.",
    -                    "offset": 2,
    -                    "size": 10
    -                  }
    -                }
    -              }
    -            },
    -            "CTRL2": {
    -              "description": "SPI1 control2 register.",
    -              "offset": 16,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SYNC_RESET": {
    -                    "description": "The FSM will be reset.",
    -                    "offset": 31,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CLOCK": {
    -              "description": "SPI1 clock division control register.",
    -              "offset": 20,
    -              "size": 32,
    -              "reset_value": 196867,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CLKCNT_L": {
    -                    "description": "In the master mode it must be equal to spi_mem_clkcnt_N.",
    -                    "offset": 0,
    -                    "size": 8
    -                  },
    -                  "CLKCNT_H": {
    -                    "description": "In the master mode it must be floor((spi_mem_clkcnt_N+1)/2-1).",
    -                    "offset": 8,
    -                    "size": 8
    -                  },
    -                  "CLKCNT_N": {
    -                    "description": "In the master mode it is the divider of spi_mem_clk. So spi_mem_clk frequency is system/(spi_mem_clkcnt_N+1)",
    -                    "offset": 16,
    -                    "size": 8
    -                  },
    -                  "CLK_EQU_SYSCLK": {
    -                    "description": "reserved",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "USER": {
    -              "description": "SPI1 user register.",
    -              "offset": 24,
    -              "size": 32,
    -              "reset_value": 2147483648,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CK_OUT_EDGE": {
    -                    "description": "the bit combined with spi_mem_mosi_delay_mode bits to set mosi signal delay mode.",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "FWRITE_DUAL": {
    -                    "description": "In the write operations read-data phase apply 2 signals",
    -                    "offset": 12,
    -                    "size": 1
    -                  },
    -                  "FWRITE_QUAD": {
    -                    "description": "In the write operations read-data phase apply 4 signals",
    -                    "offset": 13,
    -                    "size": 1
    -                  },
    -                  "FWRITE_DIO": {
    -                    "description": "In the write operations address phase and read-data phase apply 2 signals.",
    -                    "offset": 14,
    -                    "size": 1
    -                  },
    -                  "FWRITE_QIO": {
    -                    "description": "In the write operations address phase and read-data phase apply 4 signals.",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "USR_MISO_HIGHPART": {
    -                    "description": "read-data phase only access to high-part of the buffer spi_mem_w8~spi_mem_w15. 1: enable 0: disable.",
    -                    "offset": 24,
    -                    "size": 1
    -                  },
    -                  "USR_MOSI_HIGHPART": {
    -                    "description": "write-data phase only access to high-part of the buffer spi_mem_w8~spi_mem_w15. 1: enable 0: disable.",
    -                    "offset": 25,
    -                    "size": 1
    -                  },
    -                  "USR_DUMMY_IDLE": {
    -                    "description": "SPI clock is disable in dummy phase when the bit is enable.",
    -                    "offset": 26,
    -                    "size": 1
    -                  },
    -                  "USR_MOSI": {
    -                    "description": "This bit enable the write-data phase of an operation.",
    -                    "offset": 27,
    -                    "size": 1
    -                  },
    -                  "USR_MISO": {
    -                    "description": "This bit enable the read-data phase of an operation.",
    -                    "offset": 28,
    -                    "size": 1
    -                  },
    -                  "USR_DUMMY": {
    -                    "description": "This bit enable the dummy phase of an operation.",
    -                    "offset": 29,
    -                    "size": 1
    -                  },
    -                  "USR_ADDR": {
    -                    "description": "This bit enable the address phase of an operation.",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "USR_COMMAND": {
    -                    "description": "This bit enable the command phase of an operation.",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "USER1": {
    -              "description": "SPI1 user1 register.",
    -              "offset": 28,
    -              "size": 32,
    -              "reset_value": 1543503879,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "USR_DUMMY_CYCLELEN": {
    -                    "description": "The length in spi_mem_clk cycles of dummy phase. The register value shall be (cycle_num-1).",
    -                    "offset": 0,
    -                    "size": 6
    -                  },
    -                  "USR_ADDR_BITLEN": {
    -                    "description": "The length in bits of address phase. The register value shall be (bit_num-1).",
    -                    "offset": 26,
    -                    "size": 6
    -                  }
    -                }
    -              }
    -            },
    -            "USER2": {
    -              "description": "SPI1 user2 register.",
    -              "offset": 32,
    -              "size": 32,
    -              "reset_value": 1879048192,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "USR_COMMAND_VALUE": {
    -                    "description": "The value of  command.",
    -                    "offset": 0,
    -                    "size": 16
    -                  },
    -                  "USR_COMMAND_BITLEN": {
    -                    "description": "The length in bits of command phase. The register value shall be (bit_num-1)",
    -                    "offset": 28,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "MOSI_DLEN": {
    -              "description": "SPI1 send data bit length control register.",
    -              "offset": 36,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "USR_MOSI_DBITLEN": {
    -                    "description": "The length in bits of write-data. The register value shall be (bit_num-1).",
    -                    "offset": 0,
    -                    "size": 10
    -                  }
    -                }
    -              }
    -            },
    -            "MISO_DLEN": {
    -              "description": "SPI1 receive data bit length control register.",
    -              "offset": 40,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "USR_MISO_DBITLEN": {
    -                    "description": "The length in bits of  read-data. The register value shall be (bit_num-1).",
    -                    "offset": 0,
    -                    "size": 10
    -                  }
    -                }
    -              }
    -            },
    -            "RD_STATUS": {
    -              "description": "SPI1 status register.",
    -              "offset": 44,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "STATUS": {
    -                    "description": "The value is stored when set spi_mem_flash_rdsr bit and spi_mem_flash_res bit.",
    -                    "offset": 0,
    -                    "size": 16
    -                  },
    -                  "WB_MODE": {
    -                    "description": "Mode bits in the flash fast read mode  it is combined with spi_mem_fastrd_mode bit.",
    -                    "offset": 16,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "MISC": {
    -              "description": "SPI1 misc register",
    -              "offset": 52,
    -              "size": 32,
    -              "reset_value": 2,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CS0_DIS": {
    -                    "description": "SPI_CS0 pin enable, 1: disable SPI_CS0, 0: SPI_CS0 pin is active to select SPI device, such as flash, external RAM and so on.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "CS1_DIS": {
    -                    "description": "SPI_CS1 pin enable, 1: disable SPI_CS1, 0: SPI_CS1 pin is active to select SPI device, such as flash, external RAM and so on.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "CK_IDLE_EDGE": {
    -                    "description": "1: spi clk line is high when idle     0: spi clk line is low when idle",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "CS_KEEP_ACTIVE": {
    -                    "description": "spi cs line keep low when the bit is set.",
    -                    "offset": 10,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "TX_CRC": {
    -              "description": "SPI1 TX CRC data register.",
    -              "offset": 56,
    -              "size": 32,
    -              "reset_value": 4294967295,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATA": {
    -                    "description": "For SPI1, the value of crc32.",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CACHE_FCTRL": {
    -              "description": "SPI1 bit mode control register.",
    -              "offset": 60,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CACHE_USR_ADDR_4BYTE": {
    -                    "description": "For SPI1,  cache  read flash with 4 bytes address, 1: enable, 0:disable.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "FDIN_DUAL": {
    -                    "description": "For SPI1, din phase apply 2 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_dio.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "FDOUT_DUAL": {
    -                    "description": "For SPI1, dout phase apply 2 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_dio.",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "FADDR_DUAL": {
    -                    "description": "For SPI1, address phase apply 2 signals. 1: enable 0: disable.  The bit is the same with spi_mem_fread_dio.",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "FDIN_QUAD": {
    -                    "description": "For SPI1, din phase apply 4 signals. 1: enable 0: disable.  The bit is the same with spi_mem_fread_qio.",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "FDOUT_QUAD": {
    -                    "description": "For SPI1, dout phase apply 4 signals. 1: enable 0: disable.  The bit is the same with spi_mem_fread_qio.",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "FADDR_QUAD": {
    -                    "description": "For SPI1, address phase apply 4 signals. 1: enable 0: disable.  The bit is the same with spi_mem_fread_qio.",
    -                    "offset": 8,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "W0": {
    -              "description": "SPI1 memory data buffer0",
    -              "offset": 88,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF0": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W1": {
    -              "description": "SPI1 memory data buffer1",
    -              "offset": 92,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF1": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W2": {
    -              "description": "SPI1 memory data buffer2",
    -              "offset": 96,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF2": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W3": {
    -              "description": "SPI1 memory data buffer3",
    -              "offset": 100,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF3": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W4": {
    -              "description": "SPI1 memory data buffer4",
    -              "offset": 104,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF4": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W5": {
    -              "description": "SPI1 memory data buffer5",
    -              "offset": 108,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF5": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W6": {
    -              "description": "SPI1 memory data buffer6",
    -              "offset": 112,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF6": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W7": {
    -              "description": "SPI1 memory data buffer7",
    -              "offset": 116,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF7": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W8": {
    -              "description": "SPI1 memory data buffer8",
    -              "offset": 120,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF8": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W9": {
    -              "description": "SPI1 memory data buffer9",
    -              "offset": 124,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF9": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W10": {
    -              "description": "SPI1 memory data buffer10",
    -              "offset": 128,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF10": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W11": {
    -              "description": "SPI1 memory data buffer11",
    -              "offset": 132,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF11": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W12": {
    -              "description": "SPI1 memory data buffer12",
    -              "offset": 136,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF12": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W13": {
    -              "description": "SPI1 memory data buffer13",
    -              "offset": 140,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF13": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W14": {
    -              "description": "SPI1 memory data buffer14",
    -              "offset": 144,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF14": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W15": {
    -              "description": "SPI1 memory data buffer15",
    -              "offset": 148,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF15": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "FLASH_WAITI_CTRL": {
    -              "description": "SPI1 wait idle control register",
    -              "offset": 152,
    -              "size": 32,
    -              "reset_value": 20,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "WAITI_DUMMY": {
    -                    "description": "The dummy phase enable when wait flash idle (RDSR)",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "WAITI_CMD": {
    -                    "description": "The command to wait flash idle(RDSR).",
    -                    "offset": 2,
    -                    "size": 8
    -                  },
    -                  "WAITI_DUMMY_CYCLELEN": {
    -                    "description": "The dummy cycle length when wait flash idle(RDSR).",
    -                    "offset": 10,
    -                    "size": 6
    -                  }
    -                }
    -              }
    -            },
    -            "FLASH_SUS_CTRL": {
    -              "description": "SPI1 flash suspend control register",
    -              "offset": 156,
    -              "size": 32,
    -              "reset_value": 134225920,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "FLASH_PER": {
    -                    "description": "program erase resume bit, program erase suspend operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "FLASH_PES": {
    -                    "description": "program erase suspend bit, program erase suspend operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "FLASH_PER_WAIT_EN": {
    -                    "description": "1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4 or *128) SPI_CLK cycles after program erase resume command is sent. 0: SPI1 does not wait after program erase resume command is sent.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "FLASH_PES_WAIT_EN": {
    -                    "description": "1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4 or *128) SPI_CLK cycles after program erase suspend command is sent. 0: SPI1 does not wait after program erase suspend command is sent.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "PES_PER_EN": {
    -                    "description": "Set this bit to enable PES end triggers PER transfer option. If this bit is 0, application should send PER after PES is done.",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "FLASH_PES_EN": {
    -                    "description": "Set this bit to enable Auto-suspending function.",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "PESR_END_MSK": {
    -                    "description": "The mask value when check SUS/SUS1/SUS2 status bit. If the read status value is status_in[15:0](only status_in[7:0] is valid when only one byte of data is read out, status_in[15:0] is valid when two bytes of data are read out), SUS/SUS1/SUS2 = status_in[15:0]^ SPI_MEM_PESR_END_MSK[15:0].",
    -                    "offset": 6,
    -                    "size": 16
    -                  },
    -                  "RD_SUS_2B": {
    -                    "description": "1: Read two bytes when check flash SUS/SUS1/SUS2 status bit. 0:  Read one byte when check flash SUS/SUS1/SUS2 status bit",
    -                    "offset": 22,
    -                    "size": 1
    -                  },
    -                  "PER_END_EN": {
    -                    "description": "1: Both WIP and SUS/SUS1/SUS2 bits should be checked to insure the resume status of flash. 0: Only need to check WIP is 0.",
    -                    "offset": 23,
    -                    "size": 1
    -                  },
    -                  "PES_END_EN": {
    -                    "description": "1: Both WIP and SUS/SUS1/SUS2 bits should be checked to insure the suspend status of flash. 0: Only need to check WIP is 0.",
    -                    "offset": 24,
    -                    "size": 1
    -                  },
    -                  "SUS_TIMEOUT_CNT": {
    -                    "description": "When SPI1 checks SUS/SUS1/SUS2 bits fail for SPI_MEM_SUS_TIMEOUT_CNT[6:0] times, it will be treated as check pass.",
    -                    "offset": 25,
    -                    "size": 7
    -                  }
    -                }
    -              }
    -            },
    -            "FLASH_SUS_CMD": {
    -              "description": "SPI1 flash suspend command register",
    -              "offset": 160,
    -              "size": 32,
    -              "reset_value": 357754,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "FLASH_PER_COMMAND": {
    -                    "description": "Program/Erase resume command.",
    -                    "offset": 0,
    -                    "size": 8
    -                  },
    -                  "FLASH_PES_COMMAND": {
    -                    "description": "Program/Erase suspend command.",
    -                    "offset": 8,
    -                    "size": 8
    -                  },
    -                  "WAIT_PESR_COMMAND": {
    -                    "description": "Flash SUS/SUS1/SUS2 status bit read command. The command should be sent when SUS/SUS1/SUS2 bit should be checked to insure the suspend or resume status of flash.",
    -                    "offset": 16,
    -                    "size": 16
    -                  }
    -                }
    -              }
    -            },
    -            "SUS_STATUS": {
    -              "description": "SPI1 flash suspend status register",
    -              "offset": 164,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "FLASH_SUS": {
    -                    "description": "The status of flash suspend, only used in SPI1.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "WAIT_PESR_CMD_2B": {
    -                    "description": "1: SPI1 sends out SPI_MEM_WAIT_PESR_COMMAND[15:0] to check SUS/SUS1/SUS2 bit. 0: SPI1 sends out SPI_MEM_WAIT_PESR_COMMAND[7:0] to check SUS/SUS1/SUS2 bit.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "FLASH_HPM_DLY_128": {
    -                    "description": "1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after HPM command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after HPM command is sent.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "FLASH_RES_DLY_128": {
    -                    "description": "1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after RES command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after RES command is sent.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "FLASH_DP_DLY_128": {
    -                    "description": "1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after DP command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after DP command is sent.",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "FLASH_PER_DLY_128": {
    -                    "description": "Valid when SPI_MEM_FLASH_PER_WAIT_EN is 1. 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after PER command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after PER command is sent.",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "FLASH_PES_DLY_128": {
    -                    "description": "Valid when SPI_MEM_FLASH_PES_WAIT_EN is 1. 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after PES command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after PES command is sent.",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "SPI0_LOCK_EN": {
    -                    "description": "1: Enable SPI0 lock SPI0/1 arbiter option. 0: Disable it.",
    -                    "offset": 7,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "TIMING_CALI": {
    -              "description": "SPI1 timing control register",
    -              "offset": 168,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMING_CALI": {
    -                    "description": "The bit is used to enable timing auto-calibration for all reading operations.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "EXTRA_DUMMY_CYCLELEN": {
    -                    "description": "add extra dummy spi clock cycle length for spi clock calibration.",
    -                    "offset": 2,
    -                    "size": 3
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ENA": {
    -              "description": "SPI1 interrupt enable register",
    -              "offset": 192,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PER_END_INT_ENA": {
    -                    "description": "The enable bit for SPI_MEM_PER_END_INT interrupt.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "PES_END_INT_ENA": {
    -                    "description": "The enable bit for SPI_MEM_PES_END_INT interrupt.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "WPE_END_INT_ENA": {
    -                    "description": "The enable bit for SPI_MEM_WPE_END_INT interrupt.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "SLV_ST_END_INT_ENA": {
    -                    "description": "The enable bit for SPI_MEM_SLV_ST_END_INT interrupt.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "MST_ST_END_INT_ENA": {
    -                    "description": "The enable bit for SPI_MEM_MST_ST_END_INT interrupt.",
    -                    "offset": 4,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "INT_CLR": {
    -              "description": "SPI1 interrupt clear register",
    -              "offset": 196,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PER_END_INT_CLR": {
    -                    "description": "The clear bit for SPI_MEM_PER_END_INT interrupt.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "PES_END_INT_CLR": {
    -                    "description": "The clear bit for SPI_MEM_PES_END_INT interrupt.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "WPE_END_INT_CLR": {
    -                    "description": "The clear bit for SPI_MEM_WPE_END_INT interrupt.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SLV_ST_END_INT_CLR": {
    -                    "description": "The clear bit for SPI_MEM_SLV_ST_END_INT interrupt.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "MST_ST_END_INT_CLR": {
    -                    "description": "The clear bit for SPI_MEM_MST_ST_END_INT interrupt.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_RAW": {
    -              "description": "SPI1 interrupt raw register",
    -              "offset": 200,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PER_END_INT_RAW": {
    -                    "description": "The raw bit for SPI_MEM_PER_END_INT interrupt. 1: Triggered when Auto Resume command (0x7A) is sent and flash is resumed. 0: Others.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "PES_END_INT_RAW": {
    -                    "description": "The raw bit for SPI_MEM_PES_END_INT interrupt.1: Triggered when Auto Suspend command (0x75) is sent and flash is suspended. 0: Others.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "WPE_END_INT_RAW": {
    -                    "description": "The raw bit for SPI_MEM_WPE_END_INT interrupt. 1: Triggered when WRSR/PP/SE/BE/CE is sent and flash is already idle. 0: Others.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SLV_ST_END_INT_RAW": {
    -                    "description": "The raw bit for SPI_MEM_SLV_ST_END_INT interrupt. 1: Triggered when spi1_slv_st is changed from non idle state to idle state. It means that SPI_CS raises high. 0: Others",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "MST_ST_END_INT_RAW": {
    -                    "description": "The raw bit for SPI_MEM_MST_ST_END_INT interrupt. 1: Triggered when spi1_mst_st is changed from non idle state to idle state. 0: Others.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ST": {
    -              "description": "SPI1 interrupt status register",
    -              "offset": 204,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PER_END_INT_ST": {
    -                    "description": "The status bit for SPI_MEM_PER_END_INT interrupt.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "PES_END_INT_ST": {
    -                    "description": "The status bit for SPI_MEM_PES_END_INT interrupt.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "WPE_END_INT_ST": {
    -                    "description": "The status bit for SPI_MEM_WPE_END_INT interrupt.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SLV_ST_END_INT_ST": {
    -                    "description": "The status bit for SPI_MEM_SLV_ST_END_INT interrupt.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "MST_ST_END_INT_ST": {
    -                    "description": "The status bit for SPI_MEM_MST_ST_END_INT interrupt.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CLOCK_GATE": {
    -              "description": "SPI1 clk_gate register",
    -              "offset": 220,
    -              "size": 32,
    -              "reset_value": 1,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CLK_EN": {
    -                    "description": "Register clock gate enable signal. 1: Enable. 0: Disable.",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DATE": {
    -              "description": "Version control register",
    -              "offset": 1020,
    -              "size": 32,
    -              "reset_value": 33583472,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATE": {
    -                    "description": "Version control register",
    -                    "offset": 0,
    -                    "size": 28
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "SPI2": {
    -        "description": "SPI (Serial Peripheral Interface) Controller",
    -        "children": {
    -          "registers": {
    -            "CMD": {
    -              "description": "Command control register",
    -              "offset": 0,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CONF_BITLEN": {
    -                    "description": "Define the APB cycles of  SPI_CONF state. Can be configured in CONF state.",
    -                    "offset": 0,
    -                    "size": 18
    -                  },
    -                  "UPDATE": {
    -                    "description": "Set this bit to synchronize SPI registers from APB clock domain into SPI module clock domain, which is only used in SPI master mode.",
    -                    "offset": 23,
    -                    "size": 1
    -                  },
    -                  "USR": {
    -                    "description": "User define command enable.  An operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable. Can not be changed by CONF_buf.",
    -                    "offset": 24,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "ADDR": {
    -              "description": "Address value register",
    -              "offset": 4,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "USR_ADDR_VALUE": {
    -                    "description": "Address to slave. Can be configured in CONF state.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "CTRL": {
    -              "description": "SPI control register",
    -              "offset": 8,
    -              "size": 32,
    -              "reset_value": 3932160,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DUMMY_OUT": {
    -                    "description": "In the dummy phase the signal level of spi is output by the spi controller. Can be configured in CONF state.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "FADDR_DUAL": {
    -                    "description": "Apply 2 signals during addr phase 1:enable 0: disable. Can be configured in CONF state.",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "FADDR_QUAD": {
    -                    "description": "Apply 4 signals during addr phase 1:enable 0: disable. Can be configured in CONF state.",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "FCMD_DUAL": {
    -                    "description": "Apply 2 signals during command phase 1:enable 0: disable. Can be configured in CONF state.",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "FCMD_QUAD": {
    -                    "description": "Apply 4 signals during command phase 1:enable 0: disable. Can be configured in CONF state.",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "FREAD_DUAL": {
    -                    "description": "In the read operations, read-data phase apply 2 signals. 1: enable 0: disable. Can be configured in CONF state.",
    -                    "offset": 14,
    -                    "size": 1
    -                  },
    -                  "FREAD_QUAD": {
    -                    "description": "In the read operations read-data phase apply 4 signals. 1: enable 0: disable.  Can be configured in CONF state.",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "Q_POL": {
    -                    "description": "The bit is used to set MISO line polarity, 1: high 0, low. Can be configured in CONF state.",
    -                    "offset": 18,
    -                    "size": 1
    -                  },
    -                  "D_POL": {
    -                    "description": "The bit is used to set MOSI line polarity, 1: high 0, low. Can be configured in CONF state.",
    -                    "offset": 19,
    -                    "size": 1
    -                  },
    -                  "HOLD_POL": {
    -                    "description": "SPI_HOLD output value when SPI is idle. 1: output high, 0: output low. Can be configured in CONF state.",
    -                    "offset": 20,
    -                    "size": 1
    -                  },
    -                  "WP_POL": {
    -                    "description": "Write protect signal output when SPI is idle.  1: output high, 0: output low.  Can be configured in CONF state.",
    -                    "offset": 21,
    -                    "size": 1
    -                  },
    -                  "RD_BIT_ORDER": {
    -                    "description": "In read-data (MISO) phase 1: LSB first 0: MSB first. Can be configured in CONF state.",
    -                    "offset": 25,
    -                    "size": 1
    -                  },
    -                  "WR_BIT_ORDER": {
    -                    "description": "In command address write-data (MOSI) phases 1: LSB firs 0: MSB first. Can be configured in CONF state.",
    -                    "offset": 26,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CLOCK": {
    -              "description": "SPI clock control register",
    -              "offset": 12,
    -              "size": 32,
    -              "reset_value": 2147496003,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CLKCNT_L": {
    -                    "description": "In the master mode it must be equal to spi_clkcnt_N. In the slave mode it must be 0. Can be configured in CONF state.",
    -                    "offset": 0,
    -                    "size": 6
    -                  },
    -                  "CLKCNT_H": {
    -                    "description": "In the master mode it must be floor((spi_clkcnt_N+1)/2-1). In the slave mode it must be 0. Can be configured in CONF state.",
    -                    "offset": 6,
    -                    "size": 6
    -                  },
    -                  "CLKCNT_N": {
    -                    "description": "In the master mode it is the divider of spi_clk. So spi_clk frequency is system/(spi_clkdiv_pre+1)/(spi_clkcnt_N+1). Can be configured in CONF state.",
    -                    "offset": 12,
    -                    "size": 6
    -                  },
    -                  "CLKDIV_PRE": {
    -                    "description": "In the master mode it is pre-divider of spi_clk.  Can be configured in CONF state.",
    -                    "offset": 18,
    -                    "size": 4
    -                  },
    -                  "CLK_EQU_SYSCLK": {
    -                    "description": "In the master mode 1: spi_clk is eqaul to system 0: spi_clk is divided from system clock. Can be configured in CONF state.",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "USER": {
    -              "description": "SPI USER control register",
    -              "offset": 16,
    -              "size": 32,
    -              "reset_value": 2147483840,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DOUTDIN": {
    -                    "description": "Set the bit to enable full duplex communication. 1: enable 0: disable. Can be configured in CONF state.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "QPI_MODE": {
    -                    "description": "Both for master mode and slave mode. 1: spi controller is in QPI mode. 0: others. Can be configured in CONF state.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "TSCK_I_EDGE": {
    -                    "description": "In the slave mode, this bit can be used to change the polarity of tsck. 0: tsck = spi_ck_i. 1:tsck = !spi_ck_i.",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "CS_HOLD": {
    -                    "description": "spi cs keep low when spi is in  done  phase. 1: enable 0: disable. Can be configured in CONF state.",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "CS_SETUP": {
    -                    "description": "spi cs is enable when spi is in  prepare  phase. 1: enable 0: disable. Can be configured in CONF state.",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "RSCK_I_EDGE": {
    -                    "description": "In the slave mode, this bit can be used to change the polarity of rsck. 0: rsck = !spi_ck_i. 1:rsck = spi_ck_i.",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "CK_OUT_EDGE": {
    -                    "description": "the bit combined with spi_mosi_delay_mode bits to set mosi signal delay mode. Can be configured in CONF state.",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "FWRITE_DUAL": {
    -                    "description": "In the write operations read-data phase apply 2 signals. Can be configured in CONF state.",
    -                    "offset": 12,
    -                    "size": 1
    -                  },
    -                  "FWRITE_QUAD": {
    -                    "description": "In the write operations read-data phase apply 4 signals. Can be configured in CONF state.",
    -                    "offset": 13,
    -                    "size": 1
    -                  },
    -                  "USR_CONF_NXT": {
    -                    "description": "1: Enable the DMA CONF phase of next seg-trans operation, which means seg-trans will continue. 0: The seg-trans will end after the current SPI seg-trans or this is not seg-trans mode. Can be configured in CONF state.",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "SIO": {
    -                    "description": "Set the bit to enable 3-line half duplex communication mosi and miso signals share the same pin. 1: enable 0: disable. Can be configured in CONF state.",
    -                    "offset": 17,
    -                    "size": 1
    -                  },
    -                  "USR_MISO_HIGHPART": {
    -                    "description": "read-data phase only access to high-part of the buffer spi_w8~spi_w15. 1: enable 0: disable. Can be configured in CONF state.",
    -                    "offset": 24,
    -                    "size": 1
    -                  },
    -                  "USR_MOSI_HIGHPART": {
    -                    "description": "write-data phase only access to high-part of the buffer spi_w8~spi_w15. 1: enable 0: disable.  Can be configured in CONF state.",
    -                    "offset": 25,
    -                    "size": 1
    -                  },
    -                  "USR_DUMMY_IDLE": {
    -                    "description": "spi clock is disable in dummy phase when the bit is enable. Can be configured in CONF state.",
    -                    "offset": 26,
    -                    "size": 1
    -                  },
    -                  "USR_MOSI": {
    -                    "description": "This bit enable the write-data phase of an operation. Can be configured in CONF state.",
    -                    "offset": 27,
    -                    "size": 1
    -                  },
    -                  "USR_MISO": {
    -                    "description": "This bit enable the read-data phase of an operation. Can be configured in CONF state.",
    -                    "offset": 28,
    -                    "size": 1
    -                  },
    -                  "USR_DUMMY": {
    -                    "description": "This bit enable the dummy phase of an operation. Can be configured in CONF state.",
    -                    "offset": 29,
    -                    "size": 1
    -                  },
    -                  "USR_ADDR": {
    -                    "description": "This bit enable the address phase of an operation. Can be configured in CONF state.",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "USR_COMMAND": {
    -                    "description": "This bit enable the command phase of an operation. Can be configured in CONF state.",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "USER1": {
    -              "description": "SPI USER control register 1",
    -              "offset": 20,
    -              "size": 32,
    -              "reset_value": 3091267591,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "USR_DUMMY_CYCLELEN": {
    -                    "description": "The length in spi_clk cycles of dummy phase. The register value shall be (cycle_num-1). Can be configured in CONF state.",
    -                    "offset": 0,
    -                    "size": 8
    -                  },
    -                  "MST_WFULL_ERR_END_EN": {
    -                    "description": "1: SPI transfer is ended when SPI RX AFIFO wfull error is valid in GP-SPI master FD/HD-mode. 0: SPI transfer is not ended when SPI RX AFIFO wfull error is valid in GP-SPI master FD/HD-mode.",
    -                    "offset": 16,
    -                    "size": 1
    -                  },
    -                  "CS_SETUP_TIME": {
    -                    "description": "(cycles+1) of prepare phase by spi clock this bits are combined with spi_cs_setup bit. Can be configured in CONF state.",
    -                    "offset": 17,
    -                    "size": 5
    -                  },
    -                  "CS_HOLD_TIME": {
    -                    "description": "delay cycles of cs pin by spi clock this bits are combined with spi_cs_hold bit. Can be configured in CONF state.",
    -                    "offset": 22,
    -                    "size": 5
    -                  },
    -                  "USR_ADDR_BITLEN": {
    -                    "description": "The length in bits of address phase. The register value shall be (bit_num-1). Can be configured in CONF state.",
    -                    "offset": 27,
    -                    "size": 5
    -                  }
    -                }
    -              }
    -            },
    -            "USER2": {
    -              "description": "SPI USER control register 2",
    -              "offset": 24,
    -              "size": 32,
    -              "reset_value": 2013265920,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "USR_COMMAND_VALUE": {
    -                    "description": "The value of  command. Can be configured in CONF state.",
    -                    "offset": 0,
    -                    "size": 16
    -                  },
    -                  "MST_REMPTY_ERR_END_EN": {
    -                    "description": "1: SPI transfer is ended when SPI TX AFIFO read empty error is valid in GP-SPI master FD/HD-mode. 0: SPI transfer is not ended when SPI TX AFIFO read empty error is valid in GP-SPI master FD/HD-mode.",
    -                    "offset": 27,
    -                    "size": 1
    -                  },
    -                  "USR_COMMAND_BITLEN": {
    -                    "description": "The length in bits of command phase. The register value shall be (bit_num-1). Can be configured in CONF state.",
    -                    "offset": 28,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "MS_DLEN": {
    -              "description": "SPI data bit length control register",
    -              "offset": 28,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "MS_DATA_BITLEN": {
    -                    "description": "The value of these bits is the configured SPI transmission data bit length in master mode DMA controlled transfer or CPU controlled transfer. The value is also the configured bit length in slave mode DMA RX controlled transfer. The register value shall be (bit_num-1). Can be configured in CONF state.",
    -                    "offset": 0,
    -                    "size": 18
    -                  }
    -                }
    -              }
    -            },
    -            "MISC": {
    -              "description": "SPI misc register",
    -              "offset": 32,
    -              "size": 32,
    -              "reset_value": 62,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CS0_DIS": {
    -                    "description": "SPI CS0 pin enable, 1: disable CS0, 0: spi_cs0 signal is from/to CS0 pin. Can be configured in CONF state.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "CS1_DIS": {
    -                    "description": "SPI CS1 pin enable, 1: disable CS1, 0: spi_cs1 signal is from/to CS1 pin. Can be configured in CONF state.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "CS2_DIS": {
    -                    "description": "SPI CS2 pin enable, 1: disable CS2, 0: spi_cs2 signal is from/to CS2 pin. Can be configured in CONF state.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "CS3_DIS": {
    -                    "description": "SPI CS3 pin enable, 1: disable CS3, 0: spi_cs3 signal is from/to CS3 pin. Can be configured in CONF state.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "CS4_DIS": {
    -                    "description": "SPI CS4 pin enable, 1: disable CS4, 0: spi_cs4 signal is from/to CS4 pin. Can be configured in CONF state.",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "CS5_DIS": {
    -                    "description": "SPI CS5 pin enable, 1: disable CS5, 0: spi_cs5 signal is from/to CS5 pin. Can be configured in CONF state.",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "CK_DIS": {
    -                    "description": "1: spi clk out disable,  0: spi clk out enable. Can be configured in CONF state.",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "MASTER_CS_POL": {
    -                    "description": "In the master mode the bits are the polarity of spi cs line, the value is equivalent to spi_cs ^ spi_master_cs_pol. Can be configured in CONF state.",
    -                    "offset": 7,
    -                    "size": 6
    -                  },
    -                  "SLAVE_CS_POL": {
    -                    "description": "spi slave input cs polarity select. 1: inv  0: not change. Can be configured in CONF state.",
    -                    "offset": 23,
    -                    "size": 1
    -                  },
    -                  "CK_IDLE_EDGE": {
    -                    "description": "1: spi clk line is high when idle     0: spi clk line is low when idle. Can be configured in CONF state.",
    -                    "offset": 29,
    -                    "size": 1
    -                  },
    -                  "CS_KEEP_ACTIVE": {
    -                    "description": "spi cs line keep low when the bit is set. Can be configured in CONF state.",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "QUAD_DIN_PIN_SWAP": {
    -                    "description": "1:  spi quad input swap enable  0:  spi quad input swap disable. Can be configured in CONF state.",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DIN_MODE": {
    -              "description": "SPI input delay mode configuration",
    -              "offset": 36,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DIN0_MODE": {
    -                    "description": "the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state.",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "DIN1_MODE": {
    -                    "description": "the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state.",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "DIN2_MODE": {
    -                    "description": "the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state.",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "DIN3_MODE": {
    -                    "description": "the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state.",
    -                    "offset": 6,
    -                    "size": 2
    -                  },
    -                  "TIMING_HCLK_ACTIVE": {
    -                    "description": "1:enable hclk in SPI input timing module.  0: disable it. Can be configured in CONF state.",
    -                    "offset": 16,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DIN_NUM": {
    -              "description": "SPI input delay number configuration",
    -              "offset": 40,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DIN0_NUM": {
    -                    "description": "the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...  Can be configured in CONF state.",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "DIN1_NUM": {
    -                    "description": "the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...  Can be configured in CONF state.",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "DIN2_NUM": {
    -                    "description": "the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...  Can be configured in CONF state.",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "DIN3_NUM": {
    -                    "description": "the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...  Can be configured in CONF state.",
    -                    "offset": 6,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "DOUT_MODE": {
    -              "description": "SPI output delay mode configuration",
    -              "offset": 44,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DOUT0_MODE": {
    -                    "description": "The output signal 0 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "DOUT1_MODE": {
    -                    "description": "The output signal 1 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "DOUT2_MODE": {
    -                    "description": "The output signal 2 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "DOUT3_MODE": {
    -                    "description": "The output signal 3 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state.",
    -                    "offset": 3,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_CONF": {
    -              "description": "SPI DMA control register",
    -              "offset": 48,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_SLV_SEG_TRANS_EN": {
    -                    "description": "Enable dma segment transfer in spi dma half slave mode. 1: enable. 0: disable.",
    -                    "offset": 18,
    -                    "size": 1
    -                  },
    -                  "SLV_RX_SEG_TRANS_CLR_EN": {
    -                    "description": "1: spi_dma_infifo_full_vld is cleared by spi slave cmd 5. 0: spi_dma_infifo_full_vld is cleared by spi_trans_done.",
    -                    "offset": 19,
    -                    "size": 1
    -                  },
    -                  "SLV_TX_SEG_TRANS_CLR_EN": {
    -                    "description": "1: spi_dma_outfifo_empty_vld is cleared by spi slave cmd 6. 0: spi_dma_outfifo_empty_vld is cleared by spi_trans_done.",
    -                    "offset": 20,
    -                    "size": 1
    -                  },
    -                  "RX_EOF_EN": {
    -                    "description": "1: spi_dma_inlink_eof is set when the number of dma pushed data bytes is equal to the value of spi_slv/mst_dma_rd_bytelen[19:0] in spi dma transition.  0: spi_dma_inlink_eof is set by spi_trans_done in non-seg-trans or spi_dma_seg_trans_done in seg-trans.",
    -                    "offset": 21,
    -                    "size": 1
    -                  },
    -                  "DMA_RX_ENA": {
    -                    "description": "Set this bit to enable SPI DMA controlled receive data mode.",
    -                    "offset": 27,
    -                    "size": 1
    -                  },
    -                  "DMA_TX_ENA": {
    -                    "description": "Set this bit to enable SPI DMA controlled send data mode.",
    -                    "offset": 28,
    -                    "size": 1
    -                  },
    -                  "RX_AFIFO_RST": {
    -                    "description": "Set this bit to reset RX AFIFO, which is used to receive data in SPI master and slave mode transfer.",
    -                    "offset": 29,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "BUF_AFIFO_RST": {
    -                    "description": "Set this bit to reset BUF TX AFIFO, which is used send data out in SPI slave CPU controlled mode transfer and master mode transfer.",
    -                    "offset": 30,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "DMA_AFIFO_RST": {
    -                    "description": "Set this bit to reset DMA TX AFIFO, which is used to send data out in SPI slave DMA controlled mode transfer.",
    -                    "offset": 31,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_INT_ENA": {
    -              "description": "SPI DMA interrupt enable register",
    -              "offset": 52,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_INFIFO_FULL_ERR_INT_ENA": {
    -                    "description": "The enable bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "DMA_OUTFIFO_EMPTY_ERR_INT_ENA": {
    -                    "description": "The enable bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "SLV_EX_QPI_INT_ENA": {
    -                    "description": "The enable bit for SPI slave Ex_QPI interrupt.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "SLV_EN_QPI_INT_ENA": {
    -                    "description": "The enable bit for SPI slave En_QPI interrupt.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "SLV_CMD7_INT_ENA": {
    -                    "description": "The enable bit for SPI slave CMD7 interrupt.",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "SLV_CMD8_INT_ENA": {
    -                    "description": "The enable bit for SPI slave CMD8 interrupt.",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "SLV_CMD9_INT_ENA": {
    -                    "description": "The enable bit for SPI slave CMD9 interrupt.",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "SLV_CMDA_INT_ENA": {
    -                    "description": "The enable bit for SPI slave CMDA interrupt.",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "SLV_RD_DMA_DONE_INT_ENA": {
    -                    "description": "The enable bit for SPI_SLV_RD_DMA_DONE_INT interrupt.",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "SLV_WR_DMA_DONE_INT_ENA": {
    -                    "description": "The enable bit for SPI_SLV_WR_DMA_DONE_INT interrupt.",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "SLV_RD_BUF_DONE_INT_ENA": {
    -                    "description": "The enable bit for SPI_SLV_RD_BUF_DONE_INT interrupt.",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "SLV_WR_BUF_DONE_INT_ENA": {
    -                    "description": "The enable bit for SPI_SLV_WR_BUF_DONE_INT interrupt.",
    -                    "offset": 11,
    -                    "size": 1
    -                  },
    -                  "TRANS_DONE_INT_ENA": {
    -                    "description": "The enable bit for SPI_TRANS_DONE_INT interrupt.",
    -                    "offset": 12,
    -                    "size": 1
    -                  },
    -                  "DMA_SEG_TRANS_DONE_INT_ENA": {
    -                    "description": "The enable bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt.",
    -                    "offset": 13,
    -                    "size": 1
    -                  },
    -                  "SEG_MAGIC_ERR_INT_ENA": {
    -                    "description": "The enable bit for SPI_SEG_MAGIC_ERR_INT interrupt.",
    -                    "offset": 14,
    -                    "size": 1
    -                  },
    -                  "SLV_BUF_ADDR_ERR_INT_ENA": {
    -                    "description": "The enable bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt.",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "SLV_CMD_ERR_INT_ENA": {
    -                    "description": "The enable bit for SPI_SLV_CMD_ERR_INT interrupt.",
    -                    "offset": 16,
    -                    "size": 1
    -                  },
    -                  "MST_RX_AFIFO_WFULL_ERR_INT_ENA": {
    -                    "description": "The enable bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt.",
    -                    "offset": 17,
    -                    "size": 1
    -                  },
    -                  "MST_TX_AFIFO_REMPTY_ERR_INT_ENA": {
    -                    "description": "The enable bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt.",
    -                    "offset": 18,
    -                    "size": 1
    -                  },
    -                  "APP2_INT_ENA": {
    -                    "description": "The enable bit for SPI_APP2_INT interrupt.",
    -                    "offset": 19,
    -                    "size": 1
    -                  },
    -                  "APP1_INT_ENA": {
    -                    "description": "The enable bit for SPI_APP1_INT interrupt.",
    -                    "offset": 20,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_INT_CLR": {
    -              "description": "SPI DMA interrupt clear register",
    -              "offset": 56,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_INFIFO_FULL_ERR_INT_CLR": {
    -                    "description": "The clear bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "DMA_OUTFIFO_EMPTY_ERR_INT_CLR": {
    -                    "description": "The clear bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SLV_EX_QPI_INT_CLR": {
    -                    "description": "The clear bit for SPI slave Ex_QPI interrupt.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SLV_EN_QPI_INT_CLR": {
    -                    "description": "The clear bit for SPI slave En_QPI interrupt.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SLV_CMD7_INT_CLR": {
    -                    "description": "The clear bit for SPI slave CMD7 interrupt.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SLV_CMD8_INT_CLR": {
    -                    "description": "The clear bit for SPI slave CMD8 interrupt.",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SLV_CMD9_INT_CLR": {
    -                    "description": "The clear bit for SPI slave CMD9 interrupt.",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SLV_CMDA_INT_CLR": {
    -                    "description": "The clear bit for SPI slave CMDA interrupt.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SLV_RD_DMA_DONE_INT_CLR": {
    -                    "description": "The clear bit for SPI_SLV_RD_DMA_DONE_INT interrupt.",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SLV_WR_DMA_DONE_INT_CLR": {
    -                    "description": "The clear bit for SPI_SLV_WR_DMA_DONE_INT interrupt.",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SLV_RD_BUF_DONE_INT_CLR": {
    -                    "description": "The clear bit for SPI_SLV_RD_BUF_DONE_INT interrupt.",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SLV_WR_BUF_DONE_INT_CLR": {
    -                    "description": "The clear bit for SPI_SLV_WR_BUF_DONE_INT interrupt.",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "TRANS_DONE_INT_CLR": {
    -                    "description": "The clear bit for SPI_TRANS_DONE_INT interrupt.",
    -                    "offset": 12,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "DMA_SEG_TRANS_DONE_INT_CLR": {
    -                    "description": "The clear bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt.",
    -                    "offset": 13,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SEG_MAGIC_ERR_INT_CLR": {
    -                    "description": "The clear bit for SPI_SEG_MAGIC_ERR_INT interrupt.",
    -                    "offset": 14,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SLV_BUF_ADDR_ERR_INT_CLR": {
    -                    "description": "The clear bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt.",
    -                    "offset": 15,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SLV_CMD_ERR_INT_CLR": {
    -                    "description": "The clear bit for SPI_SLV_CMD_ERR_INT interrupt.",
    -                    "offset": 16,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "MST_RX_AFIFO_WFULL_ERR_INT_CLR": {
    -                    "description": "The clear bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt.",
    -                    "offset": 17,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "MST_TX_AFIFO_REMPTY_ERR_INT_CLR": {
    -                    "description": "The clear bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt.",
    -                    "offset": 18,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "APP2_INT_CLR": {
    -                    "description": "The clear bit for SPI_APP2_INT interrupt.",
    -                    "offset": 19,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "APP1_INT_CLR": {
    -                    "description": "The clear bit for SPI_APP1_INT interrupt.",
    -                    "offset": 20,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_INT_RAW": {
    -              "description": "SPI DMA interrupt raw register",
    -              "offset": 60,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_INFIFO_FULL_ERR_INT_RAW": {
    -                    "description": "1: The current data rate of DMA Rx is smaller than that of SPI, which will lose the receive data.  0: Others.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "DMA_OUTFIFO_EMPTY_ERR_INT_RAW": {
    -                    "description": "1: The current data rate of DMA TX is smaller than that of SPI. SPI will stop in master mode and send out all 0 in slave mode.  0: Others.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "SLV_EX_QPI_INT_RAW": {
    -                    "description": "The raw bit for SPI slave Ex_QPI interrupt. 1: SPI slave mode Ex_QPI transmission is ended. 0: Others.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "SLV_EN_QPI_INT_RAW": {
    -                    "description": "The raw bit for SPI slave En_QPI interrupt. 1: SPI slave mode En_QPI transmission is ended. 0: Others.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "SLV_CMD7_INT_RAW": {
    -                    "description": "The raw bit for SPI slave CMD7 interrupt. 1: SPI slave mode CMD7 transmission is ended. 0: Others.",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "SLV_CMD8_INT_RAW": {
    -                    "description": "The raw bit for SPI slave CMD8 interrupt. 1: SPI slave mode CMD8 transmission is ended. 0: Others.",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "SLV_CMD9_INT_RAW": {
    -                    "description": "The raw bit for SPI slave CMD9 interrupt. 1: SPI slave mode CMD9 transmission is ended. 0: Others.",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "SLV_CMDA_INT_RAW": {
    -                    "description": "The raw bit for SPI slave CMDA interrupt. 1: SPI slave mode CMDA transmission is ended. 0: Others.",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "SLV_RD_DMA_DONE_INT_RAW": {
    -                    "description": "The raw bit for SPI_SLV_RD_DMA_DONE_INT interrupt. 1: SPI slave mode Rd_DMA transmission is ended. 0: Others.",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "SLV_WR_DMA_DONE_INT_RAW": {
    -                    "description": "The raw bit for SPI_SLV_WR_DMA_DONE_INT interrupt. 1: SPI slave mode Wr_DMA transmission is ended. 0: Others.",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "SLV_RD_BUF_DONE_INT_RAW": {
    -                    "description": "The raw bit for SPI_SLV_RD_BUF_DONE_INT interrupt. 1: SPI slave mode Rd_BUF transmission is ended. 0: Others.",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "SLV_WR_BUF_DONE_INT_RAW": {
    -                    "description": "The raw bit for SPI_SLV_WR_BUF_DONE_INT interrupt. 1: SPI slave mode Wr_BUF transmission is ended. 0: Others.",
    -                    "offset": 11,
    -                    "size": 1
    -                  },
    -                  "TRANS_DONE_INT_RAW": {
    -                    "description": "The raw bit for SPI_TRANS_DONE_INT interrupt. 1: SPI master mode transmission is ended. 0: others.",
    -                    "offset": 12,
    -                    "size": 1
    -                  },
    -                  "DMA_SEG_TRANS_DONE_INT_RAW": {
    -                    "description": "The raw bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt. 1:  spi master DMA full-duplex/half-duplex seg-conf-trans ends or slave half-duplex seg-trans ends. And data has been pushed to corresponding memory.  0:  seg-conf-trans or seg-trans is not ended or not occurred.",
    -                    "offset": 13,
    -                    "size": 1
    -                  },
    -                  "SEG_MAGIC_ERR_INT_RAW": {
    -                    "description": "The raw bit for SPI_SEG_MAGIC_ERR_INT interrupt. 1: The magic value in CONF buffer is error in the DMA seg-conf-trans. 0: others.",
    -                    "offset": 14,
    -                    "size": 1
    -                  },
    -                  "SLV_BUF_ADDR_ERR_INT_RAW": {
    -                    "description": "The raw bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt. 1: The accessing data address of the current SPI slave mode CPU controlled FD, Wr_BUF or Rd_BUF transmission is bigger than 63. 0: Others.",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "SLV_CMD_ERR_INT_RAW": {
    -                    "description": "The raw bit for SPI_SLV_CMD_ERR_INT interrupt. 1: The slave command value in the current SPI slave HD mode transmission is not supported. 0: Others.",
    -                    "offset": 16,
    -                    "size": 1
    -                  },
    -                  "MST_RX_AFIFO_WFULL_ERR_INT_RAW": {
    -                    "description": "The raw bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt. 1: There is a RX AFIFO write-full error when SPI inputs data in master mode. 0: Others.",
    -                    "offset": 17,
    -                    "size": 1
    -                  },
    -                  "MST_TX_AFIFO_REMPTY_ERR_INT_RAW": {
    -                    "description": "The raw bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt. 1: There is a TX BUF AFIFO read-empty error when SPI outputs data in master mode. 0: Others.",
    -                    "offset": 18,
    -                    "size": 1
    -                  },
    -                  "APP2_INT_RAW": {
    -                    "description": "The raw bit for SPI_APP2_INT interrupt. The value is only controlled by application.",
    -                    "offset": 19,
    -                    "size": 1
    -                  },
    -                  "APP1_INT_RAW": {
    -                    "description": "The raw bit for SPI_APP1_INT interrupt. The value is only controlled by application.",
    -                    "offset": 20,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DMA_INT_ST": {
    -              "description": "SPI DMA interrupt status register",
    -              "offset": 64,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DMA_INFIFO_FULL_ERR_INT_ST": {
    -                    "description": "The status bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DMA_OUTFIFO_EMPTY_ERR_INT_ST": {
    -                    "description": "The status bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SLV_EX_QPI_INT_ST": {
    -                    "description": "The status bit for SPI slave Ex_QPI interrupt.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SLV_EN_QPI_INT_ST": {
    -                    "description": "The status bit for SPI slave En_QPI interrupt.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SLV_CMD7_INT_ST": {
    -                    "description": "The status bit for SPI slave CMD7 interrupt.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SLV_CMD8_INT_ST": {
    -                    "description": "The status bit for SPI slave CMD8 interrupt.",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SLV_CMD9_INT_ST": {
    -                    "description": "The status bit for SPI slave CMD9 interrupt.",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SLV_CMDA_INT_ST": {
    -                    "description": "The status bit for SPI slave CMDA interrupt.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SLV_RD_DMA_DONE_INT_ST": {
    -                    "description": "The status bit for SPI_SLV_RD_DMA_DONE_INT interrupt.",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SLV_WR_DMA_DONE_INT_ST": {
    -                    "description": "The status bit for SPI_SLV_WR_DMA_DONE_INT interrupt.",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SLV_RD_BUF_DONE_INT_ST": {
    -                    "description": "The status bit for SPI_SLV_RD_BUF_DONE_INT interrupt.",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SLV_WR_BUF_DONE_INT_ST": {
    -                    "description": "The status bit for SPI_SLV_WR_BUF_DONE_INT interrupt.",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TRANS_DONE_INT_ST": {
    -                    "description": "The status bit for SPI_TRANS_DONE_INT interrupt.",
    -                    "offset": 12,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DMA_SEG_TRANS_DONE_INT_ST": {
    -                    "description": "The status bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt.",
    -                    "offset": 13,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SEG_MAGIC_ERR_INT_ST": {
    -                    "description": "The status bit for SPI_SEG_MAGIC_ERR_INT interrupt.",
    -                    "offset": 14,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SLV_BUF_ADDR_ERR_INT_ST": {
    -                    "description": "The status bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt.",
    -                    "offset": 15,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SLV_CMD_ERR_INT_ST": {
    -                    "description": "The status bit for SPI_SLV_CMD_ERR_INT interrupt.",
    -                    "offset": 16,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "MST_RX_AFIFO_WFULL_ERR_INT_ST": {
    -                    "description": "The status bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt.",
    -                    "offset": 17,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "MST_TX_AFIFO_REMPTY_ERR_INT_ST": {
    -                    "description": "The status bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt.",
    -                    "offset": 18,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "APP2_INT_ST": {
    -                    "description": "The status bit for SPI_APP2_INT interrupt.",
    -                    "offset": 19,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "APP1_INT_ST": {
    -                    "description": "The status bit for SPI_APP1_INT interrupt.",
    -                    "offset": 20,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "W0": {
    -              "description": "SPI CPU-controlled buffer0",
    -              "offset": 152,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF0": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W1": {
    -              "description": "SPI CPU-controlled buffer1",
    -              "offset": 156,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF1": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W2": {
    -              "description": "SPI CPU-controlled buffer2",
    -              "offset": 160,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF2": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W3": {
    -              "description": "SPI CPU-controlled buffer3",
    -              "offset": 164,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF3": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W4": {
    -              "description": "SPI CPU-controlled buffer4",
    -              "offset": 168,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF4": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W5": {
    -              "description": "SPI CPU-controlled buffer5",
    -              "offset": 172,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF5": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W6": {
    -              "description": "SPI CPU-controlled buffer6",
    -              "offset": 176,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF6": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W7": {
    -              "description": "SPI CPU-controlled buffer7",
    -              "offset": 180,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF7": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W8": {
    -              "description": "SPI CPU-controlled buffer8",
    -              "offset": 184,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF8": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W9": {
    -              "description": "SPI CPU-controlled buffer9",
    -              "offset": 188,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF9": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W10": {
    -              "description": "SPI CPU-controlled buffer10",
    -              "offset": 192,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF10": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W11": {
    -              "description": "SPI CPU-controlled buffer11",
    -              "offset": 196,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF11": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W12": {
    -              "description": "SPI CPU-controlled buffer12",
    -              "offset": 200,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF12": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W13": {
    -              "description": "SPI CPU-controlled buffer13",
    -              "offset": 204,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF13": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W14": {
    -              "description": "SPI CPU-controlled buffer14",
    -              "offset": 208,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF14": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "W15": {
    -              "description": "SPI CPU-controlled buffer15",
    -              "offset": 212,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BUF15": {
    -                    "description": "data buffer",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "SLAVE": {
    -              "description": "SPI slave control register",
    -              "offset": 224,
    -              "size": 32,
    -              "reset_value": 41943040,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CLK_MODE": {
    -                    "description": "SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is alwasy on. Can be configured in CONF state.",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "CLK_MODE_13": {
    -                    "description": "{CPOL, CPHA},1: support spi clk mode 1 and 3, first edge output data B[0]/B[7].  0: support spi clk mode 0 and 2, first edge output data B[1]/B[6].",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "RSCK_DATA_OUT": {
    -                    "description": "It saves half a cycle when tsck is the same as rsck. 1: output data at rsck posedge   0: output data at tsck posedge",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "SLV_RDDMA_BITLEN_EN": {
    -                    "description": "1: SPI_SLV_DATA_BITLEN stores data bit length of master-read-slave data length in DMA controlled mode(Rd_DMA). 0: others",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "SLV_WRDMA_BITLEN_EN": {
    -                    "description": "1: SPI_SLV_DATA_BITLEN stores data bit length of master-write-to-slave data length in DMA controlled mode(Wr_DMA). 0: others",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "SLV_RDBUF_BITLEN_EN": {
    -                    "description": "1: SPI_SLV_DATA_BITLEN stores data bit length of master-read-slave data length in CPU controlled mode(Rd_BUF). 0: others",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "SLV_WRBUF_BITLEN_EN": {
    -                    "description": "1: SPI_SLV_DATA_BITLEN stores data bit length of master-write-to-slave data length in CPU controlled mode(Wr_BUF). 0: others",
    -                    "offset": 11,
    -                    "size": 1
    -                  },
    -                  "DMA_SEG_MAGIC_VALUE": {
    -                    "description": "The magic value of BM table in master DMA seg-trans.",
    -                    "offset": 22,
    -                    "size": 4
    -                  },
    -                  "MODE": {
    -                    "description": "Set SPI work mode. 1: slave mode 0: master mode.",
    -                    "offset": 26,
    -                    "size": 1
    -                  },
    -                  "SOFT_RESET": {
    -                    "description": "Software reset enable, reset the spi clock line cs line and data lines. Can be configured in CONF state.",
    -                    "offset": 27,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "USR_CONF": {
    -                    "description": "1: Enable the DMA CONF phase of current seg-trans operation, which means seg-trans will start. 0: This is not seg-trans mode.",
    -                    "offset": 28,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "SLAVE1": {
    -              "description": "SPI slave control register 1",
    -              "offset": 228,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SLV_DATA_BITLEN": {
    -                    "description": "The transferred data bit length in SPI slave FD and HD mode.",
    -                    "offset": 0,
    -                    "size": 18
    -                  },
    -                  "SLV_LAST_COMMAND": {
    -                    "description": "In the slave mode it is the value of command.",
    -                    "offset": 18,
    -                    "size": 8
    -                  },
    -                  "SLV_LAST_ADDR": {
    -                    "description": "In the slave mode it is the value of address.",
    -                    "offset": 26,
    -                    "size": 6
    -                  }
    -                }
    -              }
    -            },
    -            "CLK_GATE": {
    -              "description": "SPI module clock and register clock control",
    -              "offset": 232,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CLK_EN": {
    -                    "description": "Set this bit to enable clk gate",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "MST_CLK_ACTIVE": {
    -                    "description": "Set this bit to power on the SPI module clock.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "MST_CLK_SEL": {
    -                    "description": "This bit is used to select SPI module clock source in master mode. 1: PLL_CLK_80M. 0: XTAL CLK.",
    -                    "offset": 2,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DATE": {
    -              "description": "Version control",
    -              "offset": 240,
    -              "size": 32,
    -              "reset_value": 33583648,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATE": {
    -                    "description": "SPI register version.",
    -                    "offset": 0,
    -                    "size": 28
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "SYSTEM": {
    -        "description": "System",
    -        "children": {
    -          "registers": {
    -            "CPU_PERI_CLK_EN": {
    -              "description": "cpu_peripheral clock gating register",
    -              "offset": 0,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CLK_EN_ASSIST_DEBUG": {
    -                    "description": "reg_clk_en_assist_debug",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "CLK_EN_DEDICATED_GPIO": {
    -                    "description": "reg_clk_en_dedicated_gpio",
    -                    "offset": 7,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_PERI_RST_EN": {
    -              "description": "cpu_peripheral reset register",
    -              "offset": 4,
    -              "size": 32,
    -              "reset_value": 192,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RST_EN_ASSIST_DEBUG": {
    -                    "description": "reg_rst_en_assist_debug",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "RST_EN_DEDICATED_GPIO": {
    -                    "description": "reg_rst_en_dedicated_gpio",
    -                    "offset": 7,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_PER_CONF": {
    -              "description": "cpu clock config register",
    -              "offset": 8,
    -              "size": 32,
    -              "reset_value": 12,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPUPERIOD_SEL": {
    -                    "description": "reg_cpuperiod_sel",
    -                    "offset": 0,
    -                    "size": 2
    -                  },
    -                  "PLL_FREQ_SEL": {
    -                    "description": "reg_pll_freq_sel",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "CPU_WAIT_MODE_FORCE_ON": {
    -                    "description": "reg_cpu_wait_mode_force_on",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "CPU_WAITI_DELAY_NUM": {
    -                    "description": "reg_cpu_waiti_delay_num",
    -                    "offset": 4,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "MEM_PD_MASK": {
    -              "description": "memory power down mask register",
    -              "offset": 12,
    -              "size": 32,
    -              "reset_value": 1,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "LSLP_MEM_PD_MASK": {
    -                    "description": "reg_lslp_mem_pd_mask",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "PERIP_CLK_EN0": {
    -              "description": "peripheral clock gating register",
    -              "offset": 16,
    -              "size": 32,
    -              "reset_value": 4190232687,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMERS_CLK_EN": {
    -                    "description": "reg_timers_clk_en",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "SPI01_CLK_EN": {
    -                    "description": "reg_spi01_clk_en",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "UART_CLK_EN": {
    -                    "description": "reg_uart_clk_en",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "WDG_CLK_EN": {
    -                    "description": "reg_wdg_clk_en",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "I2S0_CLK_EN": {
    -                    "description": "reg_i2s0_clk_en",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "UART1_CLK_EN": {
    -                    "description": "reg_uart1_clk_en",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "SPI2_CLK_EN": {
    -                    "description": "reg_spi2_clk_en",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "I2C_EXT0_CLK_EN": {
    -                    "description": "reg_ext0_clk_en",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "UHCI0_CLK_EN": {
    -                    "description": "reg_uhci0_clk_en",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "RMT_CLK_EN": {
    -                    "description": "reg_rmt_clk_en",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "PCNT_CLK_EN": {
    -                    "description": "reg_pcnt_clk_en",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "LEDC_CLK_EN": {
    -                    "description": "reg_ledc_clk_en",
    -                    "offset": 11,
    -                    "size": 1
    -                  },
    -                  "UHCI1_CLK_EN": {
    -                    "description": "reg_uhci1_clk_en",
    -                    "offset": 12,
    -                    "size": 1
    -                  },
    -                  "TIMERGROUP_CLK_EN": {
    -                    "description": "reg_timergroup_clk_en",
    -                    "offset": 13,
    -                    "size": 1
    -                  },
    -                  "EFUSE_CLK_EN": {
    -                    "description": "reg_efuse_clk_en",
    -                    "offset": 14,
    -                    "size": 1
    -                  },
    -                  "TIMERGROUP1_CLK_EN": {
    -                    "description": "reg_timergroup1_clk_en",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "SPI3_CLK_EN": {
    -                    "description": "reg_spi3_clk_en",
    -                    "offset": 16,
    -                    "size": 1
    -                  },
    -                  "PWM0_CLK_EN": {
    -                    "description": "reg_pwm0_clk_en",
    -                    "offset": 17,
    -                    "size": 1
    -                  },
    -                  "EXT1_CLK_EN": {
    -                    "description": "reg_ext1_clk_en",
    -                    "offset": 18,
    -                    "size": 1
    -                  },
    -                  "CAN_CLK_EN": {
    -                    "description": "reg_can_clk_en",
    -                    "offset": 19,
    -                    "size": 1
    -                  },
    -                  "PWM1_CLK_EN": {
    -                    "description": "reg_pwm1_clk_en",
    -                    "offset": 20,
    -                    "size": 1
    -                  },
    -                  "I2S1_CLK_EN": {
    -                    "description": "reg_i2s1_clk_en",
    -                    "offset": 21,
    -                    "size": 1
    -                  },
    -                  "SPI2_DMA_CLK_EN": {
    -                    "description": "reg_spi2_dma_clk_en",
    -                    "offset": 22,
    -                    "size": 1
    -                  },
    -                  "USB_DEVICE_CLK_EN": {
    -                    "description": "reg_usb_device_clk_en",
    -                    "offset": 23,
    -                    "size": 1
    -                  },
    -                  "UART_MEM_CLK_EN": {
    -                    "description": "reg_uart_mem_clk_en",
    -                    "offset": 24,
    -                    "size": 1
    -                  },
    -                  "PWM2_CLK_EN": {
    -                    "description": "reg_pwm2_clk_en",
    -                    "offset": 25,
    -                    "size": 1
    -                  },
    -                  "PWM3_CLK_EN": {
    -                    "description": "reg_pwm3_clk_en",
    -                    "offset": 26,
    -                    "size": 1
    -                  },
    -                  "SPI3_DMA_CLK_EN": {
    -                    "description": "reg_spi3_dma_clk_en",
    -                    "offset": 27,
    -                    "size": 1
    -                  },
    -                  "APB_SARADC_CLK_EN": {
    -                    "description": "reg_apb_saradc_clk_en",
    -                    "offset": 28,
    -                    "size": 1
    -                  },
    -                  "SYSTIMER_CLK_EN": {
    -                    "description": "reg_systimer_clk_en",
    -                    "offset": 29,
    -                    "size": 1
    -                  },
    -                  "ADC2_ARB_CLK_EN": {
    -                    "description": "reg_adc2_arb_clk_en",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "SPI4_CLK_EN": {
    -                    "description": "reg_spi4_clk_en",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "PERIP_CLK_EN1": {
    -              "description": "peripheral clock gating register",
    -              "offset": 20,
    -              "size": 32,
    -              "reset_value": 512,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CRYPTO_AES_CLK_EN": {
    -                    "description": "reg_crypto_aes_clk_en",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "CRYPTO_SHA_CLK_EN": {
    -                    "description": "reg_crypto_sha_clk_en",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "CRYPTO_RSA_CLK_EN": {
    -                    "description": "reg_crypto_rsa_clk_en",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "CRYPTO_DS_CLK_EN": {
    -                    "description": "reg_crypto_ds_clk_en",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "CRYPTO_HMAC_CLK_EN": {
    -                    "description": "reg_crypto_hmac_clk_en",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "DMA_CLK_EN": {
    -                    "description": "reg_dma_clk_en",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "SDIO_HOST_CLK_EN": {
    -                    "description": "reg_sdio_host_clk_en",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "LCD_CAM_CLK_EN": {
    -                    "description": "reg_lcd_cam_clk_en",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "UART2_CLK_EN": {
    -                    "description": "reg_uart2_clk_en",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "TSENS_CLK_EN": {
    -                    "description": "reg_tsens_clk_en",
    -                    "offset": 10,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "PERIP_RST_EN0": {
    -              "description": "reserved",
    -              "offset": 24,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMERS_RST": {
    -                    "description": "reg_timers_rst",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "SPI01_RST": {
    -                    "description": "reg_spi01_rst",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "UART_RST": {
    -                    "description": "reg_uart_rst",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "WDG_RST": {
    -                    "description": "reg_wdg_rst",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "I2S0_RST": {
    -                    "description": "reg_i2s0_rst",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "UART1_RST": {
    -                    "description": "reg_uart1_rst",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "SPI2_RST": {
    -                    "description": "reg_spi2_rst",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "I2C_EXT0_RST": {
    -                    "description": "reg_ext0_rst",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "UHCI0_RST": {
    -                    "description": "reg_uhci0_rst",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "RMT_RST": {
    -                    "description": "reg_rmt_rst",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "PCNT_RST": {
    -                    "description": "reg_pcnt_rst",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "LEDC_RST": {
    -                    "description": "reg_ledc_rst",
    -                    "offset": 11,
    -                    "size": 1
    -                  },
    -                  "UHCI1_RST": {
    -                    "description": "reg_uhci1_rst",
    -                    "offset": 12,
    -                    "size": 1
    -                  },
    -                  "TIMERGROUP_RST": {
    -                    "description": "reg_timergroup_rst",
    -                    "offset": 13,
    -                    "size": 1
    -                  },
    -                  "EFUSE_RST": {
    -                    "description": "reg_efuse_rst",
    -                    "offset": 14,
    -                    "size": 1
    -                  },
    -                  "TIMERGROUP1_RST": {
    -                    "description": "reg_timergroup1_rst",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "SPI3_RST": {
    -                    "description": "reg_spi3_rst",
    -                    "offset": 16,
    -                    "size": 1
    -                  },
    -                  "PWM0_RST": {
    -                    "description": "reg_pwm0_rst",
    -                    "offset": 17,
    -                    "size": 1
    -                  },
    -                  "EXT1_RST": {
    -                    "description": "reg_ext1_rst",
    -                    "offset": 18,
    -                    "size": 1
    -                  },
    -                  "CAN_RST": {
    -                    "description": "reg_can_rst",
    -                    "offset": 19,
    -                    "size": 1
    -                  },
    -                  "PWM1_RST": {
    -                    "description": "reg_pwm1_rst",
    -                    "offset": 20,
    -                    "size": 1
    -                  },
    -                  "I2S1_RST": {
    -                    "description": "reg_i2s1_rst",
    -                    "offset": 21,
    -                    "size": 1
    -                  },
    -                  "SPI2_DMA_RST": {
    -                    "description": "reg_spi2_dma_rst",
    -                    "offset": 22,
    -                    "size": 1
    -                  },
    -                  "USB_DEVICE_RST": {
    -                    "description": "reg_usb_device_rst",
    -                    "offset": 23,
    -                    "size": 1
    -                  },
    -                  "UART_MEM_RST": {
    -                    "description": "reg_uart_mem_rst",
    -                    "offset": 24,
    -                    "size": 1
    -                  },
    -                  "PWM2_RST": {
    -                    "description": "reg_pwm2_rst",
    -                    "offset": 25,
    -                    "size": 1
    -                  },
    -                  "PWM3_RST": {
    -                    "description": "reg_pwm3_rst",
    -                    "offset": 26,
    -                    "size": 1
    -                  },
    -                  "SPI3_DMA_RST": {
    -                    "description": "reg_spi3_dma_rst",
    -                    "offset": 27,
    -                    "size": 1
    -                  },
    -                  "APB_SARADC_RST": {
    -                    "description": "reg_apb_saradc_rst",
    -                    "offset": 28,
    -                    "size": 1
    -                  },
    -                  "SYSTIMER_RST": {
    -                    "description": "reg_systimer_rst",
    -                    "offset": 29,
    -                    "size": 1
    -                  },
    -                  "ADC2_ARB_RST": {
    -                    "description": "reg_adc2_arb_rst",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "SPI4_RST": {
    -                    "description": "reg_spi4_rst",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "PERIP_RST_EN1": {
    -              "description": "peripheral reset register",
    -              "offset": 28,
    -              "size": 32,
    -              "reset_value": 510,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CRYPTO_AES_RST": {
    -                    "description": "reg_crypto_aes_rst",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "CRYPTO_SHA_RST": {
    -                    "description": "reg_crypto_sha_rst",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "CRYPTO_RSA_RST": {
    -                    "description": "reg_crypto_rsa_rst",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "CRYPTO_DS_RST": {
    -                    "description": "reg_crypto_ds_rst",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "CRYPTO_HMAC_RST": {
    -                    "description": "reg_crypto_hmac_rst",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "DMA_RST": {
    -                    "description": "reg_dma_rst",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "SDIO_HOST_RST": {
    -                    "description": "reg_sdio_host_rst",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "LCD_CAM_RST": {
    -                    "description": "reg_lcd_cam_rst",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "UART2_RST": {
    -                    "description": "reg_uart2_rst",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "TSENS_RST": {
    -                    "description": "reg_tsens_rst",
    -                    "offset": 10,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "BT_LPCK_DIV_INT": {
    -              "description": "clock config register",
    -              "offset": 32,
    -              "size": 32,
    -              "reset_value": 255,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BT_LPCK_DIV_NUM": {
    -                    "description": "reg_bt_lpck_div_num",
    -                    "offset": 0,
    -                    "size": 12
    -                  }
    -                }
    -              }
    -            },
    -            "BT_LPCK_DIV_FRAC": {
    -              "description": "clock config register",
    -              "offset": 36,
    -              "size": 32,
    -              "reset_value": 33558529,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BT_LPCK_DIV_B": {
    -                    "description": "reg_bt_lpck_div_b",
    -                    "offset": 0,
    -                    "size": 12
    -                  },
    -                  "BT_LPCK_DIV_A": {
    -                    "description": "reg_bt_lpck_div_a",
    -                    "offset": 12,
    -                    "size": 12
    -                  },
    -                  "LPCLK_SEL_RTC_SLOW": {
    -                    "description": "reg_lpclk_sel_rtc_slow",
    -                    "offset": 24,
    -                    "size": 1
    -                  },
    -                  "LPCLK_SEL_8M": {
    -                    "description": "reg_lpclk_sel_8m",
    -                    "offset": 25,
    -                    "size": 1
    -                  },
    -                  "LPCLK_SEL_XTAL": {
    -                    "description": "reg_lpclk_sel_xtal",
    -                    "offset": 26,
    -                    "size": 1
    -                  },
    -                  "LPCLK_SEL_XTAL32K": {
    -                    "description": "reg_lpclk_sel_xtal32k",
    -                    "offset": 27,
    -                    "size": 1
    -                  },
    -                  "LPCLK_RTC_EN": {
    -                    "description": "reg_lpclk_rtc_en",
    -                    "offset": 28,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INTR_FROM_CPU_0": {
    -              "description": "interrupt generate register",
    -              "offset": 40,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_INTR_FROM_CPU_0": {
    -                    "description": "reg_cpu_intr_from_cpu_0",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INTR_FROM_CPU_1": {
    -              "description": "interrupt generate register",
    -              "offset": 44,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_INTR_FROM_CPU_1": {
    -                    "description": "reg_cpu_intr_from_cpu_1",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INTR_FROM_CPU_2": {
    -              "description": "interrupt generate register",
    -              "offset": 48,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_INTR_FROM_CPU_2": {
    -                    "description": "reg_cpu_intr_from_cpu_2",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CPU_INTR_FROM_CPU_3": {
    -              "description": "interrupt generate register",
    -              "offset": 52,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CPU_INTR_FROM_CPU_3": {
    -                    "description": "reg_cpu_intr_from_cpu_3",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "RSA_PD_CTRL": {
    -              "description": "rsa memory power control register",
    -              "offset": 56,
    -              "size": 32,
    -              "reset_value": 1,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RSA_MEM_PD": {
    -                    "description": "reg_rsa_mem_pd",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "RSA_MEM_FORCE_PU": {
    -                    "description": "reg_rsa_mem_force_pu",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "RSA_MEM_FORCE_PD": {
    -                    "description": "reg_rsa_mem_force_pd",
    -                    "offset": 2,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "EDMA_CTRL": {
    -              "description": "edma clcok and reset register",
    -              "offset": 60,
    -              "size": 32,
    -              "reset_value": 1,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "EDMA_CLK_ON": {
    -                    "description": "reg_edma_clk_on",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "EDMA_RESET": {
    -                    "description": "reg_edma_reset",
    -                    "offset": 1,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CACHE_CONTROL": {
    -              "description": "cache control register",
    -              "offset": 64,
    -              "size": 32,
    -              "reset_value": 5,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ICACHE_CLK_ON": {
    -                    "description": "reg_icache_clk_on",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "ICACHE_RESET": {
    -                    "description": "reg_icache_reset",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "DCACHE_CLK_ON": {
    -                    "description": "reg_dcache_clk_on",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "DCACHE_RESET": {
    -                    "description": "reg_dcache_reset",
    -                    "offset": 3,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "EXTERNAL_DEVICE_ENCRYPT_DECRYPT_CONTROL": {
    -              "description": "SYSTEM_EXTERNAL_DEVICE_ENCRYPT_DECRYPT_CONTROL_REG",
    -              "offset": 68,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ENABLE_SPI_MANUAL_ENCRYPT": {
    -                    "description": "reg_enable_spi_manual_encrypt",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "ENABLE_DOWNLOAD_DB_ENCRYPT": {
    -                    "description": "reg_enable_download_db_encrypt",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "ENABLE_DOWNLOAD_G0CB_DECRYPT": {
    -                    "description": "reg_enable_download_g0cb_decrypt",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "ENABLE_DOWNLOAD_MANUAL_ENCRYPT": {
    -                    "description": "reg_enable_download_manual_encrypt",
    -                    "offset": 3,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "RTC_FASTMEM_CONFIG": {
    -              "description": "fast memory config register",
    -              "offset": 72,
    -              "size": 32,
    -              "reset_value": 2146435072,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_MEM_CRC_START": {
    -                    "description": "reg_rtc_mem_crc_start",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "RTC_MEM_CRC_ADDR": {
    -                    "description": "reg_rtc_mem_crc_addr",
    -                    "offset": 9,
    -                    "size": 11
    -                  },
    -                  "RTC_MEM_CRC_LEN": {
    -                    "description": "reg_rtc_mem_crc_len",
    -                    "offset": 20,
    -                    "size": 11
    -                  },
    -                  "RTC_MEM_CRC_FINISH": {
    -                    "description": "reg_rtc_mem_crc_finish",
    -                    "offset": 31,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RTC_FASTMEM_CRC": {
    -              "description": "reserved",
    -              "offset": 76,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_MEM_CRC_RES": {
    -                    "description": "reg_rtc_mem_crc_res",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "REDUNDANT_ECO_CTRL": {
    -              "description": "eco register",
    -              "offset": 80,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "REDUNDANT_ECO_DRIVE": {
    -                    "description": "reg_redundant_eco_drive",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "REDUNDANT_ECO_RESULT": {
    -                    "description": "reg_redundant_eco_result",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CLOCK_GATE": {
    -              "description": "clock gating register",
    -              "offset": 84,
    -              "size": 32,
    -              "reset_value": 1,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CLK_EN": {
    -                    "description": "reg_clk_en",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "SYSCLK_CONF": {
    -              "description": "system clock config register",
    -              "offset": 88,
    -              "size": 32,
    -              "reset_value": 1,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PRE_DIV_CNT": {
    -                    "description": "reg_pre_div_cnt",
    -                    "offset": 0,
    -                    "size": 10
    -                  },
    -                  "SOC_CLK_SEL": {
    -                    "description": "reg_soc_clk_sel",
    -                    "offset": 10,
    -                    "size": 2
    -                  },
    -                  "CLK_XTAL_FREQ": {
    -                    "description": "reg_clk_xtal_freq",
    -                    "offset": 12,
    -                    "size": 7,
    -                    "access": "read-only"
    -                  },
    -                  "CLK_DIV_EN": {
    -                    "description": "reg_clk_div_en",
    -                    "offset": 19,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "MEM_PVT": {
    -              "description": "mem pvt register",
    -              "offset": 92,
    -              "size": 32,
    -              "reset_value": 3,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "MEM_PATH_LEN": {
    -                    "description": "reg_mem_path_len",
    -                    "offset": 0,
    -                    "size": 4
    -                  },
    -                  "MEM_ERR_CNT_CLR": {
    -                    "description": "reg_mem_err_cnt_clr",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "MONITOR_EN": {
    -                    "description": "reg_mem_pvt_monitor_en",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "MEM_TIMING_ERR_CNT": {
    -                    "description": "reg_mem_timing_err_cnt",
    -                    "offset": 6,
    -                    "size": 16,
    -                    "access": "read-only"
    -                  },
    -                  "MEM_VT_SEL": {
    -                    "description": "reg_mem_vt_sel",
    -                    "offset": 22,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "COMB_PVT_LVT_CONF": {
    -              "description": "mem pvt register",
    -              "offset": 96,
    -              "size": 32,
    -              "reset_value": 3,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "COMB_PATH_LEN_LVT": {
    -                    "description": "reg_comb_path_len_lvt",
    -                    "offset": 0,
    -                    "size": 5
    -                  },
    -                  "COMB_ERR_CNT_CLR_LVT": {
    -                    "description": "reg_comb_err_cnt_clr_lvt",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "COMB_PVT_MONITOR_EN_LVT": {
    -                    "description": "reg_comb_pvt_monitor_en_lvt",
    -                    "offset": 6,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "COMB_PVT_NVT_CONF": {
    -              "description": "mem pvt register",
    -              "offset": 100,
    -              "size": 32,
    -              "reset_value": 3,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "COMB_PATH_LEN_NVT": {
    -                    "description": "reg_comb_path_len_nvt",
    -                    "offset": 0,
    -                    "size": 5
    -                  },
    -                  "COMB_ERR_CNT_CLR_NVT": {
    -                    "description": "reg_comb_err_cnt_clr_nvt",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "COMB_PVT_MONITOR_EN_NVT": {
    -                    "description": "reg_comb_pvt_monitor_en_nvt",
    -                    "offset": 6,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "COMB_PVT_HVT_CONF": {
    -              "description": "mem pvt register",
    -              "offset": 104,
    -              "size": 32,
    -              "reset_value": 3,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "COMB_PATH_LEN_HVT": {
    -                    "description": "reg_comb_path_len_hvt",
    -                    "offset": 0,
    -                    "size": 5
    -                  },
    -                  "COMB_ERR_CNT_CLR_HVT": {
    -                    "description": "reg_comb_err_cnt_clr_hvt",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "COMB_PVT_MONITOR_EN_HVT": {
    -                    "description": "reg_comb_pvt_monitor_en_hvt",
    -                    "offset": 6,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "COMB_PVT_ERR_LVT_SITE0": {
    -              "description": "mem pvt register",
    -              "offset": 108,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "COMB_TIMING_ERR_CNT_LVT_SITE0": {
    -                    "description": "reg_comb_timing_err_cnt_lvt_site0",
    -                    "offset": 0,
    -                    "size": 16,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "COMB_PVT_ERR_NVT_SITE0": {
    -              "description": "mem pvt register",
    -              "offset": 112,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "COMB_TIMING_ERR_CNT_NVT_SITE0": {
    -                    "description": "reg_comb_timing_err_cnt_nvt_site0",
    -                    "offset": 0,
    -                    "size": 16,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "COMB_PVT_ERR_HVT_SITE0": {
    -              "description": "mem pvt register",
    -              "offset": 116,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "COMB_TIMING_ERR_CNT_HVT_SITE0": {
    -                    "description": "reg_comb_timing_err_cnt_hvt_site0",
    -                    "offset": 0,
    -                    "size": 16,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "COMB_PVT_ERR_LVT_SITE1": {
    -              "description": "mem pvt register",
    -              "offset": 120,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "COMB_TIMING_ERR_CNT_LVT_SITE1": {
    -                    "description": "reg_comb_timing_err_cnt_lvt_site1",
    -                    "offset": 0,
    -                    "size": 16,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "COMB_PVT_ERR_NVT_SITE1": {
    -              "description": "mem pvt register",
    -              "offset": 124,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "COMB_TIMING_ERR_CNT_NVT_SITE1": {
    -                    "description": "reg_comb_timing_err_cnt_nvt_site1",
    -                    "offset": 0,
    -                    "size": 16,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "COMB_PVT_ERR_HVT_SITE1": {
    -              "description": "mem pvt register",
    -              "offset": 128,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "COMB_TIMING_ERR_CNT_HVT_SITE1": {
    -                    "description": "reg_comb_timing_err_cnt_hvt_site1",
    -                    "offset": 0,
    -                    "size": 16,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "COMB_PVT_ERR_LVT_SITE2": {
    -              "description": "mem pvt register",
    -              "offset": 132,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "COMB_TIMING_ERR_CNT_LVT_SITE2": {
    -                    "description": "reg_comb_timing_err_cnt_lvt_site2",
    -                    "offset": 0,
    -                    "size": 16,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "COMB_PVT_ERR_NVT_SITE2": {
    -              "description": "mem pvt register",
    -              "offset": 136,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "COMB_TIMING_ERR_CNT_NVT_SITE2": {
    -                    "description": "reg_comb_timing_err_cnt_nvt_site2",
    -                    "offset": 0,
    -                    "size": 16,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "COMB_PVT_ERR_HVT_SITE2": {
    -              "description": "mem pvt register",
    -              "offset": 140,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "COMB_TIMING_ERR_CNT_HVT_SITE2": {
    -                    "description": "reg_comb_timing_err_cnt_hvt_site2",
    -                    "offset": 0,
    -                    "size": 16,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "COMB_PVT_ERR_LVT_SITE3": {
    -              "description": "mem pvt register",
    -              "offset": 144,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "COMB_TIMING_ERR_CNT_LVT_SITE3": {
    -                    "description": "reg_comb_timing_err_cnt_lvt_site3",
    -                    "offset": 0,
    -                    "size": 16,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "COMB_PVT_ERR_NVT_SITE3": {
    -              "description": "mem pvt register",
    -              "offset": 148,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "COMB_TIMING_ERR_CNT_NVT_SITE3": {
    -                    "description": "reg_comb_timing_err_cnt_nvt_site3",
    -                    "offset": 0,
    -                    "size": 16,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "COMB_PVT_ERR_HVT_SITE3": {
    -              "description": "mem pvt register",
    -              "offset": 152,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "COMB_TIMING_ERR_CNT_HVT_SITE3": {
    -                    "description": "reg_comb_timing_err_cnt_hvt_site3",
    -                    "offset": 0,
    -                    "size": 16,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "SYSTEM_REG_DATE": {
    -              "description": "Version register",
    -              "offset": 4092,
    -              "size": 32,
    -              "reset_value": 33583440,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SYSTEM_REG_DATE": {
    -                    "description": "reg_system_reg_date",
    -                    "offset": 0,
    -                    "size": 28
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "SYSTIMER": {
    -        "description": "System Timer",
    -        "children": {
    -          "registers": {
    -            "CONF": {
    -              "description": "SYSTIMER_CONF.",
    -              "offset": 0,
    -              "size": 32,
    -              "reset_value": 1174405120,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SYSTIMER_CLK_FO": {
    -                    "description": "systimer clock force on",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "TARGET2_WORK_EN": {
    -                    "description": "target2 work enable",
    -                    "offset": 22,
    -                    "size": 1
    -                  },
    -                  "TARGET1_WORK_EN": {
    -                    "description": "target1 work enable",
    -                    "offset": 23,
    -                    "size": 1
    -                  },
    -                  "TARGET0_WORK_EN": {
    -                    "description": "target0 work enable",
    -                    "offset": 24,
    -                    "size": 1
    -                  },
    -                  "TIMER_UNIT1_CORE1_STALL_EN": {
    -                    "description": "If timer unit1 is stalled when core1 stalled",
    -                    "offset": 25,
    -                    "size": 1
    -                  },
    -                  "TIMER_UNIT1_CORE0_STALL_EN": {
    -                    "description": "If timer unit1 is stalled when core0 stalled",
    -                    "offset": 26,
    -                    "size": 1
    -                  },
    -                  "TIMER_UNIT0_CORE1_STALL_EN": {
    -                    "description": "If timer unit0 is stalled when core1 stalled",
    -                    "offset": 27,
    -                    "size": 1
    -                  },
    -                  "TIMER_UNIT0_CORE0_STALL_EN": {
    -                    "description": "If timer unit0 is stalled when core0 stalled",
    -                    "offset": 28,
    -                    "size": 1
    -                  },
    -                  "TIMER_UNIT1_WORK_EN": {
    -                    "description": "timer unit1 work enable",
    -                    "offset": 29,
    -                    "size": 1
    -                  },
    -                  "TIMER_UNIT0_WORK_EN": {
    -                    "description": "timer unit0 work enable",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "CLK_EN": {
    -                    "description": "register file clk gating",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "UNIT0_OP": {
    -              "description": "SYSTIMER_UNIT0_OP.",
    -              "offset": 4,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_UNIT0_VALUE_VALID": {
    -                    "description": "reg_timer_unit0_value_valid",
    -                    "offset": 29,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TIMER_UNIT0_UPDATE": {
    -                    "description": "update timer_unit0",
    -                    "offset": 30,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "UNIT1_OP": {
    -              "description": "SYSTIMER_UNIT1_OP.",
    -              "offset": 8,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_UNIT1_VALUE_VALID": {
    -                    "description": "timer value is sync and valid",
    -                    "offset": 29,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TIMER_UNIT1_UPDATE": {
    -                    "description": "update timer unit1",
    -                    "offset": 30,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "UNIT0_LOAD_HI": {
    -              "description": "SYSTIMER_UNIT0_LOAD_HI.",
    -              "offset": 12,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_UNIT0_LOAD_HI": {
    -                    "description": "timer unit0 load high 32 bit",
    -                    "offset": 0,
    -                    "size": 20
    -                  }
    -                }
    -              }
    -            },
    -            "UNIT0_LOAD_LO": {
    -              "description": "SYSTIMER_UNIT0_LOAD_LO.",
    -              "offset": 16,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_UNIT0_LOAD_LO": {
    -                    "description": "timer unit0 load low 32 bit",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "UNIT1_LOAD_HI": {
    -              "description": "SYSTIMER_UNIT1_LOAD_HI.",
    -              "offset": 20,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_UNIT1_LOAD_HI": {
    -                    "description": "timer unit1 load high 32 bit",
    -                    "offset": 0,
    -                    "size": 20
    -                  }
    -                }
    -              }
    -            },
    -            "UNIT1_LOAD_LO": {
    -              "description": "SYSTIMER_UNIT1_LOAD_LO.",
    -              "offset": 24,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_UNIT1_LOAD_LO": {
    -                    "description": "timer unit1 load low 32 bit",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "TARGET0_HI": {
    -              "description": "SYSTIMER_TARGET0_HI.",
    -              "offset": 28,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_TARGET0_HI": {
    -                    "description": "timer taget0 high 32 bit",
    -                    "offset": 0,
    -                    "size": 20
    -                  }
    -                }
    -              }
    -            },
    -            "TARGET0_LO": {
    -              "description": "SYSTIMER_TARGET0_LO.",
    -              "offset": 32,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_TARGET0_LO": {
    -                    "description": "timer taget0 low 32 bit",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "TARGET1_HI": {
    -              "description": "SYSTIMER_TARGET1_HI.",
    -              "offset": 36,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_TARGET1_HI": {
    -                    "description": "timer taget1 high 32 bit",
    -                    "offset": 0,
    -                    "size": 20
    -                  }
    -                }
    -              }
    -            },
    -            "TARGET1_LO": {
    -              "description": "SYSTIMER_TARGET1_LO.",
    -              "offset": 40,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_TARGET1_LO": {
    -                    "description": "timer taget1 low 32 bit",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "TARGET2_HI": {
    -              "description": "SYSTIMER_TARGET2_HI.",
    -              "offset": 44,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_TARGET2_HI": {
    -                    "description": "timer taget2 high 32 bit",
    -                    "offset": 0,
    -                    "size": 20
    -                  }
    -                }
    -              }
    -            },
    -            "TARGET2_LO": {
    -              "description": "SYSTIMER_TARGET2_LO.",
    -              "offset": 48,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_TARGET2_LO": {
    -                    "description": "timer taget2 low 32 bit",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "TARGET0_CONF": {
    -              "description": "SYSTIMER_TARGET0_CONF.",
    -              "offset": 52,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TARGET0_PERIOD": {
    -                    "description": "target0 period",
    -                    "offset": 0,
    -                    "size": 26
    -                  },
    -                  "TARGET0_PERIOD_MODE": {
    -                    "description": "Set target0 to period mode",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "TARGET0_TIMER_UNIT_SEL": {
    -                    "description": "select which unit to compare",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "TARGET1_CONF": {
    -              "description": "SYSTIMER_TARGET1_CONF.",
    -              "offset": 56,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TARGET1_PERIOD": {
    -                    "description": "target1 period",
    -                    "offset": 0,
    -                    "size": 26
    -                  },
    -                  "TARGET1_PERIOD_MODE": {
    -                    "description": "Set target1 to period mode",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "TARGET1_TIMER_UNIT_SEL": {
    -                    "description": "select which unit to compare",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "TARGET2_CONF": {
    -              "description": "SYSTIMER_TARGET2_CONF.",
    -              "offset": 60,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TARGET2_PERIOD": {
    -                    "description": "target2 period",
    -                    "offset": 0,
    -                    "size": 26
    -                  },
    -                  "TARGET2_PERIOD_MODE": {
    -                    "description": "Set target2 to period mode",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "TARGET2_TIMER_UNIT_SEL": {
    -                    "description": "select which unit to compare",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "UNIT0_VALUE_HI": {
    -              "description": "SYSTIMER_UNIT0_VALUE_HI.",
    -              "offset": 64,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_UNIT0_VALUE_HI": {
    -                    "description": "timer read value high 32bit",
    -                    "offset": 0,
    -                    "size": 20,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "UNIT0_VALUE_LO": {
    -              "description": "SYSTIMER_UNIT0_VALUE_LO.",
    -              "offset": 68,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_UNIT0_VALUE_LO": {
    -                    "description": "timer read value low 32bit",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "UNIT1_VALUE_HI": {
    -              "description": "SYSTIMER_UNIT1_VALUE_HI.",
    -              "offset": 72,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_UNIT1_VALUE_HI": {
    -                    "description": "timer read value high 32bit",
    -                    "offset": 0,
    -                    "size": 20,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "UNIT1_VALUE_LO": {
    -              "description": "SYSTIMER_UNIT1_VALUE_LO.",
    -              "offset": 76,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_UNIT1_VALUE_LO": {
    -                    "description": "timer read value low 32bit",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "COMP0_LOAD": {
    -              "description": "SYSTIMER_COMP0_LOAD.",
    -              "offset": 80,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_COMP0_LOAD": {
    -                    "description": "timer comp0 load value",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "COMP1_LOAD": {
    -              "description": "SYSTIMER_COMP1_LOAD.",
    -              "offset": 84,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_COMP1_LOAD": {
    -                    "description": "timer comp1 load value",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "COMP2_LOAD": {
    -              "description": "SYSTIMER_COMP2_LOAD.",
    -              "offset": 88,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_COMP2_LOAD": {
    -                    "description": "timer comp2 load value",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "UNIT0_LOAD": {
    -              "description": "SYSTIMER_UNIT0_LOAD.",
    -              "offset": 92,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_UNIT0_LOAD": {
    -                    "description": "timer unit0 load value",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "UNIT1_LOAD": {
    -              "description": "SYSTIMER_UNIT1_LOAD.",
    -              "offset": 96,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIMER_UNIT1_LOAD": {
    -                    "description": "timer unit1 load value",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ENA": {
    -              "description": "SYSTIMER_INT_ENA.",
    -              "offset": 100,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TARGET0_INT_ENA": {
    -                    "description": "interupt0 enable",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "TARGET1_INT_ENA": {
    -                    "description": "interupt1 enable",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "TARGET2_INT_ENA": {
    -                    "description": "interupt2 enable",
    -                    "offset": 2,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "INT_RAW": {
    -              "description": "SYSTIMER_INT_RAW.",
    -              "offset": 104,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TARGET0_INT_RAW": {
    -                    "description": "interupt0 raw",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TARGET1_INT_RAW": {
    -                    "description": "interupt1 raw",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TARGET2_INT_RAW": {
    -                    "description": "interupt2 raw",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_CLR": {
    -              "description": "SYSTIMER_INT_CLR.",
    -              "offset": 108,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TARGET0_INT_CLR": {
    -                    "description": "interupt0 clear",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "TARGET1_INT_CLR": {
    -                    "description": "interupt1 clear",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "TARGET2_INT_CLR": {
    -                    "description": "interupt2 clear",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ST": {
    -              "description": "SYSTIMER_INT_ST.",
    -              "offset": 112,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TARGET0_INT_ST": {
    -                    "description": "reg_target0_int_st",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TARGET1_INT_ST": {
    -                    "description": "reg_target1_int_st",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TARGET2_INT_ST": {
    -                    "description": "reg_target2_int_st",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DATE": {
    -              "description": "SYSTIMER_DATE.",
    -              "offset": 252,
    -              "size": 32,
    -              "reset_value": 33579377,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATE": {
    -                    "description": "reg_date",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "TIMG0": {
    -        "description": "Timer Group",
    -        "children": {
    -          "registers": {
    -            "T0CONFIG": {
    -              "description": "TIMG_T0CONFIG_REG.",
    -              "offset": 0,
    -              "size": 32,
    -              "reset_value": 1610620928,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "T0_USE_XTAL": {
    -                    "description": "reg_t0_use_xtal.",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "T0_ALARM_EN": {
    -                    "description": "reg_t0_alarm_en.",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "T0_DIVCNT_RST": {
    -                    "description": "reg_t0_divcnt_rst.",
    -                    "offset": 12,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "T0_DIVIDER": {
    -                    "description": "reg_t0_divider.",
    -                    "offset": 13,
    -                    "size": 16
    -                  },
    -                  "T0_AUTORELOAD": {
    -                    "description": "reg_t0_autoreload.",
    -                    "offset": 29,
    -                    "size": 1
    -                  },
    -                  "T0_INCREASE": {
    -                    "description": "reg_t0_increase.",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "T0_EN": {
    -                    "description": "reg_t0_en.",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "T0LO": {
    -              "description": "TIMG_T0LO_REG.",
    -              "offset": 4,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "T0_LO": {
    -                    "description": "t0_lo",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "T0HI": {
    -              "description": "TIMG_T0HI_REG.",
    -              "offset": 8,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "T0_HI": {
    -                    "description": "t0_hi",
    -                    "offset": 0,
    -                    "size": 22,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "T0UPDATE": {
    -              "description": "TIMG_T0UPDATE_REG.",
    -              "offset": 12,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "T0_UPDATE": {
    -                    "description": "t0_update",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "T0ALARMLO": {
    -              "description": "TIMG_T0ALARMLO_REG.",
    -              "offset": 16,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "T0_ALARM_LO": {
    -                    "description": "reg_t0_alarm_lo.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "T0ALARMHI": {
    -              "description": "TIMG_T0ALARMHI_REG.",
    -              "offset": 20,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "T0_ALARM_HI": {
    -                    "description": "reg_t0_alarm_hi.",
    -                    "offset": 0,
    -                    "size": 22
    -                  }
    -                }
    -              }
    -            },
    -            "T0LOADLO": {
    -              "description": "TIMG_T0LOADLO_REG.",
    -              "offset": 24,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "T0_LOAD_LO": {
    -                    "description": "reg_t0_load_lo.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "T0LOADHI": {
    -              "description": "TIMG_T0LOADHI_REG.",
    -              "offset": 28,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "T0_LOAD_HI": {
    -                    "description": "reg_t0_load_hi.",
    -                    "offset": 0,
    -                    "size": 22
    -                  }
    -                }
    -              }
    -            },
    -            "T0LOAD": {
    -              "description": "TIMG_T0LOAD_REG.",
    -              "offset": 32,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "T0_LOAD": {
    -                    "description": "t0_load",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "WDTCONFIG0": {
    -              "description": "TIMG_WDTCONFIG0_REG.",
    -              "offset": 72,
    -              "size": 32,
    -              "reset_value": 311296,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "WDT_APPCPU_RESET_EN": {
    -                    "description": "reg_wdt_appcpu_reset_en.",
    -                    "offset": 12,
    -                    "size": 1
    -                  },
    -                  "WDT_PROCPU_RESET_EN": {
    -                    "description": "reg_wdt_procpu_reset_en.",
    -                    "offset": 13,
    -                    "size": 1
    -                  },
    -                  "WDT_FLASHBOOT_MOD_EN": {
    -                    "description": "reg_wdt_flashboot_mod_en.",
    -                    "offset": 14,
    -                    "size": 1
    -                  },
    -                  "WDT_SYS_RESET_LENGTH": {
    -                    "description": "reg_wdt_sys_reset_length.",
    -                    "offset": 15,
    -                    "size": 3
    -                  },
    -                  "WDT_CPU_RESET_LENGTH": {
    -                    "description": "reg_wdt_cpu_reset_length.",
    -                    "offset": 18,
    -                    "size": 3
    -                  },
    -                  "WDT_USE_XTAL": {
    -                    "description": "reg_wdt_use_xtal.",
    -                    "offset": 21,
    -                    "size": 1
    -                  },
    -                  "WDT_CONF_UPDATE_EN": {
    -                    "description": "reg_wdt_conf_update_en.",
    -                    "offset": 22,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "WDT_STG3": {
    -                    "description": "reg_wdt_stg3.",
    -                    "offset": 23,
    -                    "size": 2
    -                  },
    -                  "WDT_STG2": {
    -                    "description": "reg_wdt_stg2.",
    -                    "offset": 25,
    -                    "size": 2
    -                  },
    -                  "WDT_STG1": {
    -                    "description": "reg_wdt_stg1.",
    -                    "offset": 27,
    -                    "size": 2
    -                  },
    -                  "WDT_STG0": {
    -                    "description": "reg_wdt_stg0.",
    -                    "offset": 29,
    -                    "size": 2
    -                  },
    -                  "WDT_EN": {
    -                    "description": "reg_wdt_en.",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "WDTCONFIG1": {
    -              "description": "TIMG_WDTCONFIG1_REG.",
    -              "offset": 76,
    -              "size": 32,
    -              "reset_value": 65536,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "WDT_DIVCNT_RST": {
    -                    "description": "reg_wdt_divcnt_rst.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "WDT_CLK_PRESCALE": {
    -                    "description": "reg_wdt_clk_prescale.",
    -                    "offset": 16,
    -                    "size": 16
    -                  }
    -                }
    -              }
    -            },
    -            "WDTCONFIG2": {
    -              "description": "TIMG_WDTCONFIG2_REG.",
    -              "offset": 80,
    -              "size": 32,
    -              "reset_value": 26000000,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "WDT_STG0_HOLD": {
    -                    "description": "reg_wdt_stg0_hold.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "WDTCONFIG3": {
    -              "description": "TIMG_WDTCONFIG3_REG.",
    -              "offset": 84,
    -              "size": 32,
    -              "reset_value": 134217727,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "WDT_STG1_HOLD": {
    -                    "description": "reg_wdt_stg1_hold.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "WDTCONFIG4": {
    -              "description": "TIMG_WDTCONFIG4_REG.",
    -              "offset": 88,
    -              "size": 32,
    -              "reset_value": 1048575,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "WDT_STG2_HOLD": {
    -                    "description": "reg_wdt_stg2_hold.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "WDTCONFIG5": {
    -              "description": "TIMG_WDTCONFIG5_REG.",
    -              "offset": 92,
    -              "size": 32,
    -              "reset_value": 1048575,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "WDT_STG3_HOLD": {
    -                    "description": "reg_wdt_stg3_hold.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "WDTFEED": {
    -              "description": "TIMG_WDTFEED_REG.",
    -              "offset": 96,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "WDT_FEED": {
    -                    "description": "wdt_feed",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "WDTWPROTECT": {
    -              "description": "TIMG_WDTWPROTECT_REG.",
    -              "offset": 100,
    -              "size": 32,
    -              "reset_value": 1356348065,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "WDT_WKEY": {
    -                    "description": "reg_wdt_wkey.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "RTCCALICFG": {
    -              "description": "TIMG_RTCCALICFG_REG.",
    -              "offset": 104,
    -              "size": 32,
    -              "reset_value": 77824,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_CALI_START_CYCLING": {
    -                    "description": "reg_rtc_cali_start_cycling.",
    -                    "offset": 12,
    -                    "size": 1
    -                  },
    -                  "RTC_CALI_CLK_SEL": {
    -                    "description": "reg_rtc_cali_clk_sel.0:rtcslowclock.1:clk_80m.2:xtal_32k",
    -                    "offset": 13,
    -                    "size": 2
    -                  },
    -                  "RTC_CALI_RDY": {
    -                    "description": "rtc_cali_rdy",
    -                    "offset": 15,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_CALI_MAX": {
    -                    "description": "reg_rtc_cali_max.",
    -                    "offset": 16,
    -                    "size": 15
    -                  },
    -                  "RTC_CALI_START": {
    -                    "description": "reg_rtc_cali_start.",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "RTCCALICFG1": {
    -              "description": "TIMG_RTCCALICFG1_REG.",
    -              "offset": 108,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_CALI_CYCLING_DATA_VLD": {
    -                    "description": "rtc_cali_cycling_data_vld",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_CALI_VALUE": {
    -                    "description": "rtc_cali_value",
    -                    "offset": 7,
    -                    "size": 25,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ENA_TIMERS": {
    -              "description": "INT_ENA_TIMG_REG",
    -              "offset": 112,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "T0_INT_ENA": {
    -                    "description": "t0_int_ena",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "WDT_INT_ENA": {
    -                    "description": "wdt_int_ena",
    -                    "offset": 1,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "INT_RAW_TIMERS": {
    -              "description": "INT_RAW_TIMG_REG",
    -              "offset": 116,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "T0_INT_RAW": {
    -                    "description": "t0_int_raw",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "WDT_INT_RAW": {
    -                    "description": "wdt_int_raw",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ST_TIMERS": {
    -              "description": "INT_ST_TIMG_REG",
    -              "offset": 120,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "T0_INT_ST": {
    -                    "description": "t0_int_st",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "WDT_INT_ST": {
    -                    "description": "wdt_int_st",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_CLR_TIMERS": {
    -              "description": "INT_CLR_TIMG_REG",
    -              "offset": 124,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "T0_INT_CLR": {
    -                    "description": "t0_int_clr",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "WDT_INT_CLR": {
    -                    "description": "wdt_int_clr",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RTCCALICFG2": {
    -              "description": "TIMG_RTCCALICFG2_REG.",
    -              "offset": 128,
    -              "size": 32,
    -              "reset_value": 4294967192,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RTC_CALI_TIMEOUT": {
    -                    "description": "timeoutindicator",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTC_CALI_TIMEOUT_RST_CNT": {
    -                    "description": "reg_rtc_cali_timeout_rst_cnt.Cyclesthatreleasecalibrationtimeoutreset",
    -                    "offset": 3,
    -                    "size": 4
    -                  },
    -                  "RTC_CALI_TIMEOUT_THRES": {
    -                    "description": "reg_rtc_cali_timeout_thres.timeoutifcalivaluecountsoverthreshold",
    -                    "offset": 7,
    -                    "size": 25
    -                  }
    -                }
    -              }
    -            },
    -            "NTIMG_DATE": {
    -              "description": "TIMG_NTIMG_DATE_REG.",
    -              "offset": 248,
    -              "size": 32,
    -              "reset_value": 33579409,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "NTIMGS_DATE": {
    -                    "description": "reg_ntimers_date.",
    -                    "offset": 0,
    -                    "size": 28
    -                  }
    -                }
    -              }
    -            },
    -            "REGCLK": {
    -              "description": "TIMG_REGCLK_REG.",
    -              "offset": 252,
    -              "size": 32,
    -              "reset_value": 1610612736,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "WDT_CLK_IS_ACTIVE": {
    -                    "description": "reg_wdt_clk_is_active.",
    -                    "offset": 29,
    -                    "size": 1
    -                  },
    -                  "TIMER_CLK_IS_ACTIVE": {
    -                    "description": "reg_timer_clk_is_active.",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "CLK_EN": {
    -                    "description": "reg_clk_en.",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "XTS_AES": {
    -        "description": "XTS-AES-128 Flash Encryption",
    -        "children": {
    -          "registers": {
    -            "PLAIN_MEM": {
    -              "description": "The memory that stores plaintext",
    -              "offset": 0,
    -              "size": 8,
    -              "count": 16,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295
    -            },
    -            "LINESIZE": {
    -              "description": "XTS-AES line-size register",
    -              "offset": 64,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "LINESIZE": {
    -                    "description": "This bit stores the line size parameter. 0: 16Byte, 1: 32Byte.",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DESTINATION": {
    -              "description": "XTS-AES destination register",
    -              "offset": 68,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DESTINATION": {
    -                    "description": "This bit stores the destination. 0: flash(default). 1: reserved.",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "PHYSICAL_ADDRESS": {
    -              "description": "XTS-AES physical address register",
    -              "offset": 72,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PHYSICAL_ADDRESS": {
    -                    "description": "Those bits stores the physical address. If linesize is 16-byte, the physical address should be aligned of 16 bytes. If linesize is 32-byte, the physical address should be aligned of 32 bytes.",
    -                    "offset": 0,
    -                    "size": 30
    -                  }
    -                }
    -              }
    -            },
    -            "TRIGGER": {
    -              "description": "XTS-AES trigger register",
    -              "offset": 76,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TRIGGER": {
    -                    "description": "Set this bit to start manual encryption calculation",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RELEASE": {
    -              "description": "XTS-AES release register",
    -              "offset": 80,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RELEASE": {
    -                    "description": "Set this bit to release the manual encrypted result, after that the result will be visible to spi",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DESTROY": {
    -              "description": "XTS-AES destroy register",
    -              "offset": 84,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DESTROY": {
    -                    "description": "Set this bit to destroy XTS-AES result.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "STATE": {
    -              "description": "XTS-AES status register",
    -              "offset": 88,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "STATE": {
    -                    "description": "Those bits shows XTS-AES status. 0=IDLE, 1=WORK, 2=RELEASE, 3=USE. IDLE means that XTS-AES is idle. WORK means that XTS-AES is busy with calculation. RELEASE means the encrypted result is generated but not visible to mspi. USE means that the encrypted result is visible to mspi.",
    -                    "offset": 0,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DATE": {
    -              "description": "XTS-AES version control register",
    -              "offset": 92,
    -              "size": 32,
    -              "reset_value": 538969635,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATE": {
    -                    "description": "Those bits stores the version information of XTS-AES.",
    -                    "offset": 0,
    -                    "size": 30
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "TWAI": {
    -        "description": "Two-Wire Automotive Interface",
    -        "children": {
    -          "registers": {
    -            "MODE": {
    -              "description": "Mode Register",
    -              "offset": 0,
    -              "size": 32,
    -              "reset_value": 1,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RESET_MODE": {
    -                    "description": "This bit is used to configure the operating mode of the TWAI Controller. 1: Reset mode; 0: Operating mode.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "LISTEN_ONLY_MODE": {
    -                    "description": "1: Listen only mode. In this mode the nodes will only receive messages from the bus, without generating the acknowledge signal nor updating the RX error counter.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "SELF_TEST_MODE": {
    -                    "description": "1: Self test mode. In this mode the TX nodes can perform a successful transmission without receiving the acknowledge signal. This mode is often used to test a single node with the self reception request command.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "RX_FILTER_MODE": {
    -                    "description": "This bit is used to configure the filter mode. 0: Dual filter mode; 1: Single filter mode.",
    -                    "offset": 3,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CMD": {
    -              "description": "Command Register",
    -              "offset": 4,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_REQ": {
    -                    "description": "Set the bit to 1 to allow the driving nodes start transmission.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "ABORT_TX": {
    -                    "description": "Set the bit to 1 to cancel a pending transmission request.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RELEASE_BUF": {
    -                    "description": "Set the bit to 1 to release the RX buffer.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "CLR_OVERRUN": {
    -                    "description": "Set the bit to 1 to clear the data overrun status bit.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SELF_RX_REQ": {
    -                    "description": "Self reception request command. Set the bit to 1 to allow a message be transmitted and received simultaneously.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "STATUS": {
    -              "description": "Status register",
    -              "offset": 8,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_BUF_ST": {
    -                    "description": "1: The data in the RX buffer is not empty, with at least one received data packet.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OVERRUN_ST": {
    -                    "description": "1: The RX FIFO is full and data overrun has occurred.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TX_BUF_ST": {
    -                    "description": "1: The TX buffer is empty, the CPU may write a message into it.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TX_COMPLETE": {
    -                    "description": "1: The TWAI controller has successfully received a packet from the bus.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RX_ST": {
    -                    "description": "1: The TWAI Controller is receiving a message from the bus.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TX_ST": {
    -                    "description": "1: The TWAI Controller is transmitting a message to the bus.",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "ERR_ST": {
    -                    "description": "1: At least one of the RX/TX error counter has reached or exceeded the value set in register TWAI_ERR_WARNING_LIMIT_REG.",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "BUS_OFF_ST": {
    -                    "description": "1: In bus-off status, the TWAI Controller is no longer involved in bus activities.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "MISS_ST": {
    -                    "description": "This bit reflects whether the data packet in the RX FIFO is complete. 1: The current packet is missing; 0: The current packet is complete",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_RAW": {
    -              "description": "Interrupt Register",
    -              "offset": 12,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_INT_ST": {
    -                    "description": "Receive interrupt. If this bit is set to 1, it indicates there are messages to be handled in the RX FIFO.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TX_INT_ST": {
    -                    "description": "Transmit interrupt. If this bit is set to 1, it indicates the message transmitting mis- sion is finished and a new transmission is able to execute.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "ERR_WARN_INT_ST": {
    -                    "description": "Error warning interrupt. If this bit is set to 1, it indicates the error status signal and the bus-off status signal of Status register have changed (e.g., switched from 0 to 1 or from 1 to 0).",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OVERRUN_INT_ST": {
    -                    "description": "Data overrun interrupt. If this bit is set to 1, it indicates a data overrun interrupt is generated in the RX FIFO.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "ERR_PASSIVE_INT_ST": {
    -                    "description": "Error passive interrupt. If this bit is set to 1, it indicates the TWAI Controller is switched between error active status and error passive status due to the change of error counters.",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "ARB_LOST_INT_ST": {
    -                    "description": "Arbitration lost interrupt. If this bit is set to 1, it indicates an arbitration lost interrupt is generated.",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "BUS_ERR_INT_ST": {
    -                    "description": "Error interrupt. If this bit is set to 1, it indicates an error is detected on the bus.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ENA": {
    -              "description": "Interrupt Enable Register",
    -              "offset": 16,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_INT_ENA": {
    -                    "description": "Set this bit to 1 to enable receive interrupt.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "TX_INT_ENA": {
    -                    "description": "Set this bit to 1 to enable transmit interrupt.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "ERR_WARN_INT_ENA": {
    -                    "description": "Set this bit to 1 to enable error warning interrupt.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "OVERRUN_INT_ENA": {
    -                    "description": "Set this bit to 1 to enable data overrun interrupt.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "ERR_PASSIVE_INT_ENA": {
    -                    "description": "Set this bit to 1 to enable error passive interrupt.",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "ARB_LOST_INT_ENA": {
    -                    "description": "Set this bit to 1 to enable arbitration lost interrupt.",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "BUS_ERR_INT_ENA": {
    -                    "description": "Set this bit to 1 to enable error interrupt.",
    -                    "offset": 7,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "BUS_TIMING_0": {
    -              "description": "Bus Timing Register 0",
    -              "offset": 24,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "BAUD_PRESC": {
    -                    "description": "Baud Rate Prescaler, determines the frequency dividing ratio.",
    -                    "offset": 0,
    -                    "size": 13
    -                  },
    -                  "SYNC_JUMP_WIDTH": {
    -                    "description": "Synchronization Jump Width (SJW), 1 \\verb+~+ 14 Tq wide.",
    -                    "offset": 14,
    -                    "size": 2
    -                  }
    -                }
    -              }
    -            },
    -            "BUS_TIMING_1": {
    -              "description": "Bus Timing Register 1",
    -              "offset": 28,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TIME_SEG1": {
    -                    "description": "The width of PBS1.",
    -                    "offset": 0,
    -                    "size": 4
    -                  },
    -                  "TIME_SEG2": {
    -                    "description": "The width of PBS2.",
    -                    "offset": 4,
    -                    "size": 3
    -                  },
    -                  "TIME_SAMP": {
    -                    "description": "The number of sample points. 0: the bus is sampled once; 1: the bus is sampled three times",
    -                    "offset": 7,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "ARB_LOST_CAP": {
    -              "description": "Arbitration Lost Capture Register",
    -              "offset": 44,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ARB_LOST_CAP": {
    -                    "description": "This register contains information about the bit position of lost arbitration.",
    -                    "offset": 0,
    -                    "size": 5,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "ERR_CODE_CAP": {
    -              "description": "Error Code Capture Register",
    -              "offset": 48,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ECC_SEGMENT": {
    -                    "description": "This register contains information about the location of errors, see Table 181 for details.",
    -                    "offset": 0,
    -                    "size": 5,
    -                    "access": "read-only"
    -                  },
    -                  "ECC_DIRECTION": {
    -                    "description": "This register contains information about transmission direction of the node when error occurs. 1: Error occurs when receiving a message; 0: Error occurs when transmitting a message",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "ECC_TYPE": {
    -                    "description": "This register contains information about error types: 00: bit error; 01: form error; 10: stuff error; 11: other type of error",
    -                    "offset": 6,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "ERR_WARNING_LIMIT": {
    -              "description": "Error Warning Limit Register",
    -              "offset": 52,
    -              "size": 32,
    -              "reset_value": 96,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ERR_WARNING_LIMIT": {
    -                    "description": "Error warning threshold. In the case when any of a error counter value exceeds the threshold, or all the error counter values are below the threshold, an error warning interrupt will be triggered (given the enable signal is valid).",
    -                    "offset": 0,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "RX_ERR_CNT": {
    -              "description": "Receive Error Counter Register",
    -              "offset": 56,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_ERR_CNT": {
    -                    "description": "The RX error counter register, reflects value changes under reception status.",
    -                    "offset": 0,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "TX_ERR_CNT": {
    -              "description": "Transmit Error Counter Register",
    -              "offset": 60,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_ERR_CNT": {
    -                    "description": "The TX error counter register, reflects value changes under transmission status.",
    -                    "offset": 0,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "DATA_0": {
    -              "description": "Data register 0",
    -              "offset": 64,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_BYTE_0": {
    -                    "description": "In reset mode, it is acceptance code register 0 with R/W Permission. In operation mode, it stores the 0th byte information of the data to be transmitted under operating mode.",
    -                    "offset": 0,
    -                    "size": 8,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DATA_1": {
    -              "description": "Data register 1",
    -              "offset": 68,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_BYTE_1": {
    -                    "description": "In reset mode, it is acceptance code register 1 with R/W Permission. In operation mode, it stores the 1st byte information of the data to be transmitted under operating mode.",
    -                    "offset": 0,
    -                    "size": 8,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DATA_2": {
    -              "description": "Data register 2",
    -              "offset": 72,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_BYTE_2": {
    -                    "description": "In reset mode, it is acceptance code register 2 with R/W Permission. In operation mode, it stores the 2nd byte information of the data to be transmitted under operating mode.",
    -                    "offset": 0,
    -                    "size": 8,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DATA_3": {
    -              "description": "Data register 3",
    -              "offset": 76,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_BYTE_3": {
    -                    "description": "In reset mode, it is acceptance code register 3 with R/W Permission. In operation mode, it stores the 3rd byte information of the data to be transmitted under operating mode.",
    -                    "offset": 0,
    -                    "size": 8,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DATA_4": {
    -              "description": "Data register 4",
    -              "offset": 80,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_BYTE_4": {
    -                    "description": "In reset mode, it is acceptance mask register 0 with R/W Permission. In operation mode, it stores the 4th byte information of the data to be transmitted under operating mode.",
    -                    "offset": 0,
    -                    "size": 8,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DATA_5": {
    -              "description": "Data register 5",
    -              "offset": 84,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_BYTE_5": {
    -                    "description": "In reset mode, it is acceptance mask register 1 with R/W Permission. In operation mode, it stores the 5th byte information of the data to be transmitted under operating mode.",
    -                    "offset": 0,
    -                    "size": 8,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DATA_6": {
    -              "description": "Data register 6",
    -              "offset": 88,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_BYTE_6": {
    -                    "description": "In reset mode, it is acceptance mask register 2 with R/W Permission. In operation mode, it stores the 6th byte information of the data to be transmitted under operating mode.",
    -                    "offset": 0,
    -                    "size": 8,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DATA_7": {
    -              "description": "Data register 7",
    -              "offset": 92,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_BYTE_7": {
    -                    "description": "In reset mode, it is acceptance mask register 3 with R/W Permission. In operation mode, it stores the 7th byte information of the data to be transmitted under operating mode.",
    -                    "offset": 0,
    -                    "size": 8,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DATA_8": {
    -              "description": "Data register 8",
    -              "offset": 96,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_BYTE_8": {
    -                    "description": "Stored the 8th byte information of the data to be transmitted under operating mode.",
    -                    "offset": 0,
    -                    "size": 8,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DATA_9": {
    -              "description": "Data register 9",
    -              "offset": 100,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_BYTE_9": {
    -                    "description": "Stored the 9th byte information of the data to be transmitted under operating mode.",
    -                    "offset": 0,
    -                    "size": 8,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DATA_10": {
    -              "description": "Data register 10",
    -              "offset": 104,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_BYTE_10": {
    -                    "description": "Stored the 10th byte information of the data to be transmitted under operating mode.",
    -                    "offset": 0,
    -                    "size": 8,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DATA_11": {
    -              "description": "Data register 11",
    -              "offset": 108,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_BYTE_11": {
    -                    "description": "Stored the 11th byte information of the data to be transmitted under operating mode.",
    -                    "offset": 0,
    -                    "size": 8,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "DATA_12": {
    -              "description": "Data register 12",
    -              "offset": 112,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_BYTE_12": {
    -                    "description": "Stored the 12th byte information of the data to be transmitted under operating mode.",
    -                    "offset": 0,
    -                    "size": 8,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RX_MESSAGE_CNT": {
    -              "description": "Receive Message Counter Register",
    -              "offset": 116,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_MESSAGE_COUNTER": {
    -                    "description": "This register reflects the number of messages available within the RX FIFO.",
    -                    "offset": 0,
    -                    "size": 7,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CLOCK_DIVIDER": {
    -              "description": "Clock Divider register",
    -              "offset": 124,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CD": {
    -                    "description": "These bits are used to configure frequency dividing coefficients of the external CLKOUT pin.",
    -                    "offset": 0,
    -                    "size": 8
    -                  },
    -                  "CLOCK_OFF": {
    -                    "description": "This bit can be configured under reset mode. 1: Disable the external CLKOUT pin; 0: Enable the external CLKOUT pin",
    -                    "offset": 8,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "UART0": {
    -        "description": "UART (Universal Asynchronous Receiver-Transmitter) Controller",
    -        "children": {
    -          "registers": {
    -            "FIFO": {
    -              "description": "FIFO data register",
    -              "offset": 0,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RXFIFO_RD_BYTE": {
    -                    "description": "UART 0 accesses FIFO via this register.",
    -                    "offset": 0,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "INT_RAW": {
    -              "description": "Raw interrupt status",
    -              "offset": 4,
    -              "size": 32,
    -              "reset_value": 2,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RXFIFO_FULL_INT_RAW": {
    -                    "description": "This interrupt raw bit turns to high level when receiver receives more data than what rxfifo_full_thrhd specifies.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TXFIFO_EMPTY_INT_RAW": {
    -                    "description": "This interrupt raw bit turns to high level when the amount of data in Tx-FIFO is less than what txfifo_empty_thrhd specifies .",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "PARITY_ERR_INT_RAW": {
    -                    "description": "This interrupt raw bit turns to high level when receiver detects a parity error in the data.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "FRM_ERR_INT_RAW": {
    -                    "description": "This interrupt raw bit turns to high level when receiver detects a data frame error .",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RXFIFO_OVF_INT_RAW": {
    -                    "description": "This interrupt raw bit turns to high level when receiver receives more data than the FIFO can store.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DSR_CHG_INT_RAW": {
    -                    "description": "This interrupt raw bit turns to high level when receiver detects the edge change of DSRn signal.",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CTS_CHG_INT_RAW": {
    -                    "description": "This interrupt raw bit turns to high level when receiver detects the edge change of CTSn signal.",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "BRK_DET_INT_RAW": {
    -                    "description": "This interrupt raw bit turns to high level when receiver detects a 0 after the stop bit.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RXFIFO_TOUT_INT_RAW": {
    -                    "description": "This interrupt raw bit turns to high level when receiver takes more time than rx_tout_thrhd to receive a byte.",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SW_XON_INT_RAW": {
    -                    "description": "This interrupt raw bit turns to high level when receiver recevies Xon char when uart_sw_flow_con_en is set to 1.",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SW_XOFF_INT_RAW": {
    -                    "description": "This interrupt raw bit turns to high level when receiver receives Xoff char when uart_sw_flow_con_en is set to 1.",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "GLITCH_DET_INT_RAW": {
    -                    "description": "This interrupt raw bit turns to high level when receiver detects a glitch in the middle of a start bit.",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TX_BRK_DONE_INT_RAW": {
    -                    "description": "This interrupt raw bit turns to high level when transmitter completes  sending  NULL characters, after all data in Tx-FIFO are sent.",
    -                    "offset": 12,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TX_BRK_IDLE_DONE_INT_RAW": {
    -                    "description": "This interrupt raw bit turns to high level when transmitter has kept the shortest duration after sending the  last data.",
    -                    "offset": 13,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TX_DONE_INT_RAW": {
    -                    "description": "This interrupt raw bit turns to high level when transmitter has send out all data in FIFO.",
    -                    "offset": 14,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RS485_PARITY_ERR_INT_RAW": {
    -                    "description": "This interrupt raw bit turns to high level when receiver detects a parity error from the echo of transmitter in rs485 mode.",
    -                    "offset": 15,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RS485_FRM_ERR_INT_RAW": {
    -                    "description": "This interrupt raw bit turns to high level when receiver detects a data frame error from the echo of transmitter in rs485 mode.",
    -                    "offset": 16,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RS485_CLASH_INT_RAW": {
    -                    "description": "This interrupt raw bit turns to high level when detects a clash between transmitter and receiver in rs485 mode.",
    -                    "offset": 17,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "AT_CMD_CHAR_DET_INT_RAW": {
    -                    "description": "This interrupt raw bit turns to high level when receiver detects the configured at_cmd char.",
    -                    "offset": 18,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "WAKEUP_INT_RAW": {
    -                    "description": "This interrupt raw bit turns to high level when input rxd edge changes more times than what reg_active_threshold specifies in light sleeping mode.",
    -                    "offset": 19,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ST": {
    -              "description": "Masked interrupt status",
    -              "offset": 8,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RXFIFO_FULL_INT_ST": {
    -                    "description": "This is the status bit for rxfifo_full_int_raw when rxfifo_full_int_ena is set to 1.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TXFIFO_EMPTY_INT_ST": {
    -                    "description": "This is the status bit for  txfifo_empty_int_raw  when txfifo_empty_int_ena is set to 1.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "PARITY_ERR_INT_ST": {
    -                    "description": "This is the status bit for parity_err_int_raw when parity_err_int_ena is set to 1.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "FRM_ERR_INT_ST": {
    -                    "description": "This is the status bit for frm_err_int_raw when frm_err_int_ena is set to 1.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RXFIFO_OVF_INT_ST": {
    -                    "description": "This is the status bit for rxfifo_ovf_int_raw when rxfifo_ovf_int_ena is set to 1.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "DSR_CHG_INT_ST": {
    -                    "description": "This is the status bit for dsr_chg_int_raw when dsr_chg_int_ena is set to 1.",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CTS_CHG_INT_ST": {
    -                    "description": "This is the status bit for cts_chg_int_raw when cts_chg_int_ena is set to 1.",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "BRK_DET_INT_ST": {
    -                    "description": "This is the status bit for brk_det_int_raw when brk_det_int_ena is set to 1.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RXFIFO_TOUT_INT_ST": {
    -                    "description": "This is the status bit for rxfifo_tout_int_raw when rxfifo_tout_int_ena is set to 1.",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SW_XON_INT_ST": {
    -                    "description": "This is the status bit for sw_xon_int_raw when sw_xon_int_ena is set to 1.",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SW_XOFF_INT_ST": {
    -                    "description": "This is the status bit for sw_xoff_int_raw when sw_xoff_int_ena is set to 1.",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "GLITCH_DET_INT_ST": {
    -                    "description": "This is the status bit for glitch_det_int_raw when glitch_det_int_ena is set to 1.",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TX_BRK_DONE_INT_ST": {
    -                    "description": "This is the status bit for tx_brk_done_int_raw when tx_brk_done_int_ena is set to 1.",
    -                    "offset": 12,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TX_BRK_IDLE_DONE_INT_ST": {
    -                    "description": "This is the stauts bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena is set to 1.",
    -                    "offset": 13,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TX_DONE_INT_ST": {
    -                    "description": "This is the status bit for tx_done_int_raw when tx_done_int_ena is set to 1.",
    -                    "offset": 14,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RS485_PARITY_ERR_INT_ST": {
    -                    "description": "This is the status bit for rs485_parity_err_int_raw when rs485_parity_int_ena is set to 1.",
    -                    "offset": 15,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RS485_FRM_ERR_INT_ST": {
    -                    "description": "This is the status bit for rs485_frm_err_int_raw when rs485_fm_err_int_ena is set to 1.",
    -                    "offset": 16,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RS485_CLASH_INT_ST": {
    -                    "description": "This is the status bit for rs485_clash_int_raw when rs485_clash_int_ena is set to 1.",
    -                    "offset": 17,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "AT_CMD_CHAR_DET_INT_ST": {
    -                    "description": "This is the status bit for at_cmd_det_int_raw when at_cmd_char_det_int_ena is set to 1.",
    -                    "offset": 18,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "WAKEUP_INT_ST": {
    -                    "description": "This is the status bit for uart_wakeup_int_raw when uart_wakeup_int_ena is set to 1.",
    -                    "offset": 19,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ENA": {
    -              "description": "Interrupt enable bits",
    -              "offset": 12,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RXFIFO_FULL_INT_ENA": {
    -                    "description": "This is the enable bit for rxfifo_full_int_st register.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "TXFIFO_EMPTY_INT_ENA": {
    -                    "description": "This is the enable bit for txfifo_empty_int_st register.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "PARITY_ERR_INT_ENA": {
    -                    "description": "This is the enable bit for parity_err_int_st register.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "FRM_ERR_INT_ENA": {
    -                    "description": "This is the enable bit for frm_err_int_st register.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "RXFIFO_OVF_INT_ENA": {
    -                    "description": "This is the enable bit for rxfifo_ovf_int_st register.",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "DSR_CHG_INT_ENA": {
    -                    "description": "This is the enable bit for dsr_chg_int_st register.",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "CTS_CHG_INT_ENA": {
    -                    "description": "This is the enable bit for cts_chg_int_st register.",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "BRK_DET_INT_ENA": {
    -                    "description": "This is the enable bit for brk_det_int_st register.",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "RXFIFO_TOUT_INT_ENA": {
    -                    "description": "This is the enable bit for rxfifo_tout_int_st register.",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "SW_XON_INT_ENA": {
    -                    "description": "This is the enable bit for sw_xon_int_st register.",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "SW_XOFF_INT_ENA": {
    -                    "description": "This is the enable bit for sw_xoff_int_st register.",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "GLITCH_DET_INT_ENA": {
    -                    "description": "This is the enable bit for glitch_det_int_st register.",
    -                    "offset": 11,
    -                    "size": 1
    -                  },
    -                  "TX_BRK_DONE_INT_ENA": {
    -                    "description": "This is the enable bit for tx_brk_done_int_st register.",
    -                    "offset": 12,
    -                    "size": 1
    -                  },
    -                  "TX_BRK_IDLE_DONE_INT_ENA": {
    -                    "description": "This is the enable bit for tx_brk_idle_done_int_st register.",
    -                    "offset": 13,
    -                    "size": 1
    -                  },
    -                  "TX_DONE_INT_ENA": {
    -                    "description": "This is the enable bit for tx_done_int_st register.",
    -                    "offset": 14,
    -                    "size": 1
    -                  },
    -                  "RS485_PARITY_ERR_INT_ENA": {
    -                    "description": "This is the enable bit for rs485_parity_err_int_st register.",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "RS485_FRM_ERR_INT_ENA": {
    -                    "description": "This is the enable bit for rs485_parity_err_int_st register.",
    -                    "offset": 16,
    -                    "size": 1
    -                  },
    -                  "RS485_CLASH_INT_ENA": {
    -                    "description": "This is the enable bit for rs485_clash_int_st register.",
    -                    "offset": 17,
    -                    "size": 1
    -                  },
    -                  "AT_CMD_CHAR_DET_INT_ENA": {
    -                    "description": "This is the enable bit for at_cmd_char_det_int_st register.",
    -                    "offset": 18,
    -                    "size": 1
    -                  },
    -                  "WAKEUP_INT_ENA": {
    -                    "description": "This is the enable bit for uart_wakeup_int_st register.",
    -                    "offset": 19,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "INT_CLR": {
    -              "description": "Interrupt clear bits",
    -              "offset": 16,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RXFIFO_FULL_INT_CLR": {
    -                    "description": "Set this bit to clear the rxfifo_full_int_raw interrupt.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "TXFIFO_EMPTY_INT_CLR": {
    -                    "description": "Set this bit to clear txfifo_empty_int_raw interrupt.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "PARITY_ERR_INT_CLR": {
    -                    "description": "Set this bit to clear parity_err_int_raw interrupt.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "FRM_ERR_INT_CLR": {
    -                    "description": "Set this bit to clear frm_err_int_raw interrupt.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RXFIFO_OVF_INT_CLR": {
    -                    "description": "Set this bit to clear rxfifo_ovf_int_raw interrupt.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "DSR_CHG_INT_CLR": {
    -                    "description": "Set this bit to clear the dsr_chg_int_raw interrupt.",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "CTS_CHG_INT_CLR": {
    -                    "description": "Set this bit to clear the cts_chg_int_raw interrupt.",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "BRK_DET_INT_CLR": {
    -                    "description": "Set this bit to clear the brk_det_int_raw interrupt.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RXFIFO_TOUT_INT_CLR": {
    -                    "description": "Set this bit to clear the rxfifo_tout_int_raw interrupt.",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SW_XON_INT_CLR": {
    -                    "description": "Set this bit to clear the sw_xon_int_raw interrupt.",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SW_XOFF_INT_CLR": {
    -                    "description": "Set this bit to clear the sw_xoff_int_raw interrupt.",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "GLITCH_DET_INT_CLR": {
    -                    "description": "Set this bit to clear the glitch_det_int_raw interrupt.",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "TX_BRK_DONE_INT_CLR": {
    -                    "description": "Set this bit to clear the tx_brk_done_int_raw interrupt..",
    -                    "offset": 12,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "TX_BRK_IDLE_DONE_INT_CLR": {
    -                    "description": "Set this bit to clear the tx_brk_idle_done_int_raw interrupt.",
    -                    "offset": 13,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "TX_DONE_INT_CLR": {
    -                    "description": "Set this bit to clear the tx_done_int_raw interrupt.",
    -                    "offset": 14,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RS485_PARITY_ERR_INT_CLR": {
    -                    "description": "Set this bit to clear the rs485_parity_err_int_raw interrupt.",
    -                    "offset": 15,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RS485_FRM_ERR_INT_CLR": {
    -                    "description": "Set this bit to clear the rs485_frm_err_int_raw interrupt.",
    -                    "offset": 16,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RS485_CLASH_INT_CLR": {
    -                    "description": "Set this bit to clear the rs485_clash_int_raw interrupt.",
    -                    "offset": 17,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "AT_CMD_CHAR_DET_INT_CLR": {
    -                    "description": "Set this bit to clear the at_cmd_char_det_int_raw interrupt.",
    -                    "offset": 18,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "WAKEUP_INT_CLR": {
    -                    "description": "Set this bit to clear the uart_wakeup_int_raw interrupt.",
    -                    "offset": 19,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CLKDIV": {
    -              "description": "Clock divider configuration",
    -              "offset": 20,
    -              "size": 32,
    -              "reset_value": 694,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CLKDIV": {
    -                    "description": "The integral part of the frequency divider factor.",
    -                    "offset": 0,
    -                    "size": 12
    -                  },
    -                  "FRAG": {
    -                    "description": "The decimal part of the frequency divider factor.",
    -                    "offset": 20,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "RX_FILT": {
    -              "description": "Rx Filter configuration",
    -              "offset": 24,
    -              "size": 32,
    -              "reset_value": 8,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "GLITCH_FILT": {
    -                    "description": "when input pulse width is lower than this value, the pulse is ignored.",
    -                    "offset": 0,
    -                    "size": 8
    -                  },
    -                  "GLITCH_FILT_EN": {
    -                    "description": "Set this bit to enable Rx signal filter.",
    -                    "offset": 8,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "STATUS": {
    -              "description": "UART status register",
    -              "offset": 28,
    -              "size": 32,
    -              "reset_value": 3758145536,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RXFIFO_CNT": {
    -                    "description": "Stores the byte number of valid data in Rx-FIFO.",
    -                    "offset": 0,
    -                    "size": 10,
    -                    "access": "read-only"
    -                  },
    -                  "DSRN": {
    -                    "description": "The register represent the level value of the internal uart dsr signal.",
    -                    "offset": 13,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CTSN": {
    -                    "description": "This register represent the level value of the internal uart cts signal.",
    -                    "offset": 14,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RXD": {
    -                    "description": "This register represent the  level value of the internal uart rxd signal.",
    -                    "offset": 15,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TXFIFO_CNT": {
    -                    "description": "Stores the byte number of data in Tx-FIFO.",
    -                    "offset": 16,
    -                    "size": 10,
    -                    "access": "read-only"
    -                  },
    -                  "DTRN": {
    -                    "description": "This bit represents the level of the internal uart dtr signal.",
    -                    "offset": 29,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RTSN": {
    -                    "description": "This bit represents the level of the internal uart rts signal.",
    -                    "offset": 30,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TXD": {
    -                    "description": "This bit represents the  level of the internal uart txd signal.",
    -                    "offset": 31,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CONF0": {
    -              "description": "a",
    -              "offset": 32,
    -              "size": 32,
    -              "reset_value": 268435484,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PARITY": {
    -                    "description": "This register is used to configure the parity check mode.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "PARITY_EN": {
    -                    "description": "Set this bit to enable uart parity check.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "BIT_NUM": {
    -                    "description": "This register is used to set the length of data.",
    -                    "offset": 2,
    -                    "size": 2
    -                  },
    -                  "STOP_BIT_NUM": {
    -                    "description": "This register is used to set the length of  stop bit.",
    -                    "offset": 4,
    -                    "size": 2
    -                  },
    -                  "SW_RTS": {
    -                    "description": "This register is used to configure the software rts signal which is used in software flow control.",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "SW_DTR": {
    -                    "description": "This register is used to configure the software dtr signal which is used in software flow control.",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "TXD_BRK": {
    -                    "description": "Set this bit to enbale transmitter to  send NULL when the process of sending data is done.",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "IRDA_DPLX": {
    -                    "description": "Set this bit to enable IrDA loopback mode.",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "IRDA_TX_EN": {
    -                    "description": "This is the start enable bit for IrDA transmitter.",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "IRDA_WCTL": {
    -                    "description": "1'h1: The IrDA transmitter's 11th bit is the same as 10th bit. 1'h0: Set IrDA transmitter's 11th bit to 0.",
    -                    "offset": 11,
    -                    "size": 1
    -                  },
    -                  "IRDA_TX_INV": {
    -                    "description": "Set this bit to invert the level of  IrDA transmitter.",
    -                    "offset": 12,
    -                    "size": 1
    -                  },
    -                  "IRDA_RX_INV": {
    -                    "description": "Set this bit to invert the level of IrDA receiver.",
    -                    "offset": 13,
    -                    "size": 1
    -                  },
    -                  "LOOPBACK": {
    -                    "description": "Set this bit to enable uart loopback test mode.",
    -                    "offset": 14,
    -                    "size": 1
    -                  },
    -                  "TX_FLOW_EN": {
    -                    "description": "Set this bit to enable flow control function for transmitter.",
    -                    "offset": 15,
    -                    "size": 1
    -                  },
    -                  "IRDA_EN": {
    -                    "description": "Set this bit to enable IrDA protocol.",
    -                    "offset": 16,
    -                    "size": 1
    -                  },
    -                  "RXFIFO_RST": {
    -                    "description": "Set this bit to reset the uart receive-FIFO.",
    -                    "offset": 17,
    -                    "size": 1
    -                  },
    -                  "TXFIFO_RST": {
    -                    "description": "Set this bit to reset the uart transmit-FIFO.",
    -                    "offset": 18,
    -                    "size": 1
    -                  },
    -                  "RXD_INV": {
    -                    "description": "Set this bit to inverse the level value of uart rxd signal.",
    -                    "offset": 19,
    -                    "size": 1
    -                  },
    -                  "CTS_INV": {
    -                    "description": "Set this bit to inverse the level value of uart cts signal.",
    -                    "offset": 20,
    -                    "size": 1
    -                  },
    -                  "DSR_INV": {
    -                    "description": "Set this bit to inverse the level value of uart dsr signal.",
    -                    "offset": 21,
    -                    "size": 1
    -                  },
    -                  "TXD_INV": {
    -                    "description": "Set this bit to inverse the level value of uart txd signal.",
    -                    "offset": 22,
    -                    "size": 1
    -                  },
    -                  "RTS_INV": {
    -                    "description": "Set this bit to inverse the level value of uart rts signal.",
    -                    "offset": 23,
    -                    "size": 1
    -                  },
    -                  "DTR_INV": {
    -                    "description": "Set this bit to inverse the level value of uart dtr signal.",
    -                    "offset": 24,
    -                    "size": 1
    -                  },
    -                  "CLK_EN": {
    -                    "description": "1'h1: Force clock on for register. 1'h0: Support clock only when application writes registers.",
    -                    "offset": 25,
    -                    "size": 1
    -                  },
    -                  "ERR_WR_MASK": {
    -                    "description": "1'h1: Receiver stops storing data into FIFO when data is wrong. 1'h0: Receiver stores the data even if the  received data is wrong.",
    -                    "offset": 26,
    -                    "size": 1
    -                  },
    -                  "AUTOBAUD_EN": {
    -                    "description": "This is the enable bit for detecting baudrate.",
    -                    "offset": 27,
    -                    "size": 1
    -                  },
    -                  "MEM_CLK_EN": {
    -                    "description": "UART memory clock gate enable signal.",
    -                    "offset": 28,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "CONF1": {
    -              "description": "Configuration register 1",
    -              "offset": 36,
    -              "size": 32,
    -              "reset_value": 49248,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RXFIFO_FULL_THRHD": {
    -                    "description": "It will produce rxfifo_full_int interrupt when receiver receives more data than this register value.",
    -                    "offset": 0,
    -                    "size": 9
    -                  },
    -                  "TXFIFO_EMPTY_THRHD": {
    -                    "description": "It will produce txfifo_empty_int interrupt when the data amount in Tx-FIFO is less than this register value.",
    -                    "offset": 9,
    -                    "size": 9
    -                  },
    -                  "DIS_RX_DAT_OVF": {
    -                    "description": "Disable UART Rx data overflow detect.",
    -                    "offset": 18,
    -                    "size": 1
    -                  },
    -                  "RX_TOUT_FLOW_DIS": {
    -                    "description": "Set this bit to stop accumulating idle_cnt when hardware flow control works.",
    -                    "offset": 19,
    -                    "size": 1
    -                  },
    -                  "RX_FLOW_EN": {
    -                    "description": "This is the flow enable bit for UART receiver.",
    -                    "offset": 20,
    -                    "size": 1
    -                  },
    -                  "RX_TOUT_EN": {
    -                    "description": "This is the enble bit for uart receiver's timeout function.",
    -                    "offset": 21,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "LOWPULSE": {
    -              "description": "Autobaud minimum low pulse duration register",
    -              "offset": 40,
    -              "size": 32,
    -              "reset_value": 4095,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "MIN_CNT": {
    -                    "description": "This register stores the value of the minimum duration time of the low level pulse. It is used in baud rate-detect process.",
    -                    "offset": 0,
    -                    "size": 12,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "HIGHPULSE": {
    -              "description": "Autobaud minimum high pulse duration register",
    -              "offset": 44,
    -              "size": 32,
    -              "reset_value": 4095,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "MIN_CNT": {
    -                    "description": "This register stores  the value of the maxinum duration time for the high level pulse. It is used in baud rate-detect process.",
    -                    "offset": 0,
    -                    "size": 12,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RXD_CNT": {
    -              "description": "Autobaud edge change count register",
    -              "offset": 48,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RXD_EDGE_CNT": {
    -                    "description": "This register stores the count of rxd edge change. It is used in baud rate-detect process.",
    -                    "offset": 0,
    -                    "size": 10,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "FLOW_CONF": {
    -              "description": "Software flow-control configuration",
    -              "offset": 52,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SW_FLOW_CON_EN": {
    -                    "description": "Set this bit to enable software flow control. It is used with register sw_xon or sw_xoff.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "XONOFF_DEL": {
    -                    "description": "Set this bit to remove flow control char from the received data.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "FORCE_XON": {
    -                    "description": "Set this bit to enable the transmitter to go on sending data.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "FORCE_XOFF": {
    -                    "description": "Set this bit to stop the  transmitter from sending data.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "SEND_XON": {
    -                    "description": "Set this bit to send Xon char. It is cleared by hardware automatically.",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "SEND_XOFF": {
    -                    "description": "Set this bit to send Xoff char. It is cleared by hardware automatically.",
    -                    "offset": 5,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "SLEEP_CONF": {
    -              "description": "Sleep-mode configuration",
    -              "offset": 56,
    -              "size": 32,
    -              "reset_value": 240,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ACTIVE_THRESHOLD": {
    -                    "description": "The uart is activated from light sleeping mode when the input rxd edge changes more times than this register value.",
    -                    "offset": 0,
    -                    "size": 10
    -                  }
    -                }
    -              }
    -            },
    -            "SWFC_CONF0": {
    -              "description": "Software flow-control character configuration",
    -              "offset": 60,
    -              "size": 32,
    -              "reset_value": 9952,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "XOFF_THRESHOLD": {
    -                    "description": "When the data amount in Rx-FIFO is more than this register value with uart_sw_flow_con_en set to 1, it will send a Xoff char.",
    -                    "offset": 0,
    -                    "size": 9
    -                  },
    -                  "XOFF_CHAR": {
    -                    "description": "This register stores the Xoff flow control char.",
    -                    "offset": 9,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "SWFC_CONF1": {
    -              "description": "Software flow-control character configuration",
    -              "offset": 64,
    -              "size": 32,
    -              "reset_value": 8704,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "XON_THRESHOLD": {
    -                    "description": "When the data amount in Rx-FIFO is less than this register value with uart_sw_flow_con_en set to 1, it will send a Xon char.",
    -                    "offset": 0,
    -                    "size": 9
    -                  },
    -                  "XON_CHAR": {
    -                    "description": "This register stores the Xon flow control char.",
    -                    "offset": 9,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "TXBRK_CONF": {
    -              "description": "Tx Break character configuration",
    -              "offset": 68,
    -              "size": 32,
    -              "reset_value": 10,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_BRK_NUM": {
    -                    "description": "This register is used to configure the number of 0 to be sent after the process of sending data is done. It is active when txd_brk is set to 1.",
    -                    "offset": 0,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "IDLE_CONF": {
    -              "description": "Frame-end idle configuration",
    -              "offset": 72,
    -              "size": 32,
    -              "reset_value": 262400,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_IDLE_THRHD": {
    -                    "description": "It will produce frame end signal when receiver takes more time to receive one byte data than this register value.",
    -                    "offset": 0,
    -                    "size": 10
    -                  },
    -                  "TX_IDLE_NUM": {
    -                    "description": "This register is used to configure the duration time between transfers.",
    -                    "offset": 10,
    -                    "size": 10
    -                  }
    -                }
    -              }
    -            },
    -            "RS485_CONF": {
    -              "description": "RS485 mode configuration",
    -              "offset": 76,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RS485_EN": {
    -                    "description": "Set this bit to choose the rs485 mode.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "DL0_EN": {
    -                    "description": "Set this bit to delay the stop bit by 1 bit.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "DL1_EN": {
    -                    "description": "Set this bit to delay the stop bit by 1 bit.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "RS485TX_RX_EN": {
    -                    "description": "Set this bit to enable receiver could receive data when the transmitter is transmitting data in rs485 mode.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "RS485RXBY_TX_EN": {
    -                    "description": "1'h1: enable rs485 transmitter to send data when rs485 receiver line is busy.",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "RS485_RX_DLY_NUM": {
    -                    "description": "This register is used to delay the receiver's internal data signal.",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "RS485_TX_DLY_NUM": {
    -                    "description": "This register is used to delay the transmitter's internal data signal.",
    -                    "offset": 6,
    -                    "size": 4
    -                  }
    -                }
    -              }
    -            },
    -            "AT_CMD_PRECNT": {
    -              "description": "Pre-sequence timing configuration",
    -              "offset": 80,
    -              "size": 32,
    -              "reset_value": 2305,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PRE_IDLE_NUM": {
    -                    "description": "This register is used to configure the idle duration time before the first at_cmd is received by receiver.",
    -                    "offset": 0,
    -                    "size": 16
    -                  }
    -                }
    -              }
    -            },
    -            "AT_CMD_POSTCNT": {
    -              "description": "Post-sequence timing configuration",
    -              "offset": 84,
    -              "size": 32,
    -              "reset_value": 2305,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "POST_IDLE_NUM": {
    -                    "description": "This register is used to configure the duration time between the last at_cmd and the next data.",
    -                    "offset": 0,
    -                    "size": 16
    -                  }
    -                }
    -              }
    -            },
    -            "AT_CMD_GAPTOUT": {
    -              "description": "Timeout configuration",
    -              "offset": 88,
    -              "size": 32,
    -              "reset_value": 11,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_GAP_TOUT": {
    -                    "description": "This register is used to configure the duration time between the at_cmd chars.",
    -                    "offset": 0,
    -                    "size": 16
    -                  }
    -                }
    -              }
    -            },
    -            "AT_CMD_CHAR": {
    -              "description": "AT escape sequence detection configuration",
    -              "offset": 92,
    -              "size": 32,
    -              "reset_value": 811,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "AT_CMD_CHAR": {
    -                    "description": "This register is used to configure the content of at_cmd char.",
    -                    "offset": 0,
    -                    "size": 8
    -                  },
    -                  "CHAR_NUM": {
    -                    "description": "This register is used to configure the num of continuous at_cmd chars received by receiver.",
    -                    "offset": 8,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "MEM_CONF": {
    -              "description": "UART threshold and allocation configuration",
    -              "offset": 96,
    -              "size": 32,
    -              "reset_value": 655378,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_SIZE": {
    -                    "description": "This register is used to configure the amount of mem allocated for receive-FIFO. The default number is 128 bytes.",
    -                    "offset": 1,
    -                    "size": 3
    -                  },
    -                  "TX_SIZE": {
    -                    "description": "This register is used to configure the amount of mem allocated for transmit-FIFO. The default number is 128 bytes.",
    -                    "offset": 4,
    -                    "size": 3
    -                  },
    -                  "RX_FLOW_THRHD": {
    -                    "description": "This register is used to configure the maximum amount of data that can be received  when hardware flow control works.",
    -                    "offset": 7,
    -                    "size": 9
    -                  },
    -                  "RX_TOUT_THRHD": {
    -                    "description": "This register is used to configure the threshold time that receiver takes to receive one byte. The rxfifo_tout_int interrupt will be trigger when the receiver takes more time to receive one byte with rx_tout_en set to 1.",
    -                    "offset": 16,
    -                    "size": 10
    -                  },
    -                  "MEM_FORCE_PD": {
    -                    "description": "Set this bit to force power down UART memory.",
    -                    "offset": 26,
    -                    "size": 1
    -                  },
    -                  "MEM_FORCE_PU": {
    -                    "description": "Set this bit to force power up UART memory.",
    -                    "offset": 27,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "MEM_TX_STATUS": {
    -              "description": "Tx-FIFO write and read offset address.",
    -              "offset": 100,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "APB_TX_WADDR": {
    -                    "description": "This register stores the offset address in Tx-FIFO when software writes Tx-FIFO via APB.",
    -                    "offset": 0,
    -                    "size": 10,
    -                    "access": "read-only"
    -                  },
    -                  "TX_RADDR": {
    -                    "description": "This register stores the offset address in Tx-FIFO when Tx-FSM reads data via Tx-FIFO_Ctrl.",
    -                    "offset": 11,
    -                    "size": 10,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "MEM_RX_STATUS": {
    -              "description": "Rx-FIFO write and read offset address.",
    -              "offset": 104,
    -              "size": 32,
    -              "reset_value": 524544,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "APB_RX_RADDR": {
    -                    "description": "This register stores the offset address in RX-FIFO when software reads data from Rx-FIFO via APB. UART0 is 10'h100. UART1 is 10'h180.",
    -                    "offset": 0,
    -                    "size": 10,
    -                    "access": "read-only"
    -                  },
    -                  "RX_WADDR": {
    -                    "description": "This register stores the offset address in Rx-FIFO when Rx-FIFO_Ctrl writes Rx-FIFO. UART0 is 10'h100. UART1 is 10'h180.",
    -                    "offset": 11,
    -                    "size": 10,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "FSM_STATUS": {
    -              "description": "UART transmit and receive status.",
    -              "offset": 108,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ST_URX_OUT": {
    -                    "description": "This is the status register of receiver.",
    -                    "offset": 0,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  },
    -                  "ST_UTX_OUT": {
    -                    "description": "This is the status register of transmitter.",
    -                    "offset": 4,
    -                    "size": 4,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "POSPULSE": {
    -              "description": "Autobaud high pulse register",
    -              "offset": 112,
    -              "size": 32,
    -              "reset_value": 4095,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "POSEDGE_MIN_CNT": {
    -                    "description": "This register stores the minimal input clock count between two positive edges. It is used in boudrate-detect process.",
    -                    "offset": 0,
    -                    "size": 12,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "NEGPULSE": {
    -              "description": "Autobaud low pulse register",
    -              "offset": 116,
    -              "size": 32,
    -              "reset_value": 4095,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "NEGEDGE_MIN_CNT": {
    -                    "description": "This register stores the minimal input clock count between two negative edges. It is used in boudrate-detect process.",
    -                    "offset": 0,
    -                    "size": 12,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CLK_CONF": {
    -              "description": "UART core clock configuration",
    -              "offset": 120,
    -              "size": 32,
    -              "reset_value": 57675776,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SCLK_DIV_B": {
    -                    "description": "The  denominator of the frequency divider factor.",
    -                    "offset": 0,
    -                    "size": 6
    -                  },
    -                  "SCLK_DIV_A": {
    -                    "description": "The numerator of the frequency divider factor.",
    -                    "offset": 6,
    -                    "size": 6
    -                  },
    -                  "SCLK_DIV_NUM": {
    -                    "description": "The integral part of the frequency divider factor.",
    -                    "offset": 12,
    -                    "size": 8
    -                  },
    -                  "SCLK_SEL": {
    -                    "description": "UART clock source select. 1: 80Mhz, 2: 8Mhz, 3: XTAL.",
    -                    "offset": 20,
    -                    "size": 2
    -                  },
    -                  "SCLK_EN": {
    -                    "description": "Set this bit to enable UART Tx/Rx clock.",
    -                    "offset": 22,
    -                    "size": 1
    -                  },
    -                  "RST_CORE": {
    -                    "description": "Write 1 then write 0 to this bit, reset UART Tx/Rx.",
    -                    "offset": 23,
    -                    "size": 1
    -                  },
    -                  "TX_SCLK_EN": {
    -                    "description": "Set this bit to enable UART Tx clock.",
    -                    "offset": 24,
    -                    "size": 1
    -                  },
    -                  "RX_SCLK_EN": {
    -                    "description": "Set this bit to enable UART Rx clock.",
    -                    "offset": 25,
    -                    "size": 1
    -                  },
    -                  "TX_RST_CORE": {
    -                    "description": "Write 1 then write 0 to this bit, reset UART Tx.",
    -                    "offset": 26,
    -                    "size": 1
    -                  },
    -                  "RX_RST_CORE": {
    -                    "description": "Write 1 then write 0 to this bit, reset UART Rx.",
    -                    "offset": 27,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DATE": {
    -              "description": "UART Version register",
    -              "offset": 124,
    -              "size": 32,
    -              "reset_value": 33587824,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATE": {
    -                    "description": "This is the version register.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "ID": {
    -              "description": "UART ID register",
    -              "offset": 128,
    -              "size": 32,
    -              "reset_value": 1073743104,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ID": {
    -                    "description": "This register is used to configure the uart_id.",
    -                    "offset": 0,
    -                    "size": 30
    -                  },
    -                  "HIGH_SPEED": {
    -                    "description": "This bit used to select synchronize mode. 1: Registers are auto synchronized into UART Core clock and UART core should be keep the same with APB clock. 0: After configure registers, software needs to write 1 to UART_REG_UPDATE to synchronize registers.",
    -                    "offset": 30,
    -                    "size": 1
    -                  },
    -                  "REG_UPDATE": {
    -                    "description": "Software write 1 would synchronize registers into UART Core clock domain and would be cleared by hardware after synchronization is done.",
    -                    "offset": 31,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "USB_DEVICE": {
    -        "description": "Full-speed USB Serial/JTAG Controller",
    -        "children": {
    -          "registers": {
    -            "EP1": {
    -              "description": "USB_DEVICE_EP1_REG.",
    -              "offset": 0,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RDWR_BYTE": {
    -                    "description": "Write and read byte data to/from UART Tx/Rx FIFO through this field. When USB_DEVICE_SERIAL_IN_EMPTY_INT is set, then user can write data (up to 64 bytes) into UART Tx FIFO. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is set, user can check USB_DEVICE_OUT_EP1_WR_ADDR USB_DEVICE_OUT_EP0_RD_ADDR to know how many data is received, then read data from UART Rx FIFO.",
    -                    "offset": 0,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "EP1_CONF": {
    -              "description": "USB_DEVICE_EP1_CONF_REG.",
    -              "offset": 4,
    -              "size": 32,
    -              "reset_value": 2,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "WR_DONE": {
    -                    "description": "Set this bit to indicate writing byte data to UART Tx FIFO is done.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SERIAL_IN_EP_DATA_FREE": {
    -                    "description": "1'b1: Indicate UART Tx FIFO is not full and can write data into in. After writing USB_DEVICE_WR_DONE, this bit would be 0 until data in UART Tx FIFO is read by USB Host.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SERIAL_OUT_EP_DATA_AVAIL": {
    -                    "description": "1'b1: Indicate there is data in UART Rx FIFO.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_RAW": {
    -              "description": "USB_DEVICE_INT_RAW_REG.",
    -              "offset": 8,
    -              "size": 32,
    -              "reset_value": 8,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "JTAG_IN_FLUSH_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when flush cmd is received for IN endpoint 2 of JTAG.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SOF_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when SOF frame is received.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SERIAL_OUT_RECV_PKT_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when Serial Port OUT Endpoint received one packet.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SERIAL_IN_EMPTY_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when Serial Port IN Endpoint is empty.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "PID_ERR_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when pid error is detected.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CRC5_ERR_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when CRC5 error is detected.",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CRC16_ERR_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when CRC16 error is detected.",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "STUFF_ERR_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when stuff error is detected.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_TOKEN_REC_IN_EP1_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when IN token for IN endpoint 1 is received.",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "USB_BUS_RESET_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when usb bus reset is detected.",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_EP1_ZERO_PAYLOAD_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when OUT endpoint 1 received packet with zero palyload.",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_EP2_ZERO_PAYLOAD_INT_RAW": {
    -                    "description": "The raw interrupt bit turns to high level when OUT endpoint 2 received packet with zero palyload.",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ST": {
    -              "description": "USB_DEVICE_INT_ST_REG.",
    -              "offset": 12,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "JTAG_IN_FLUSH_INT_ST": {
    -                    "description": "The raw interrupt status bit for the USB_DEVICE_JTAG_IN_FLUSH_INT interrupt.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SOF_INT_ST": {
    -                    "description": "The raw interrupt status bit for the USB_DEVICE_SOF_INT interrupt.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SERIAL_OUT_RECV_PKT_INT_ST": {
    -                    "description": "The raw interrupt status bit for the USB_DEVICE_SERIAL_OUT_RECV_PKT_INT interrupt.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SERIAL_IN_EMPTY_INT_ST": {
    -                    "description": "The raw interrupt status bit for the USB_DEVICE_SERIAL_IN_EMPTY_INT interrupt.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "PID_ERR_INT_ST": {
    -                    "description": "The raw interrupt status bit for the USB_DEVICE_PID_ERR_INT interrupt.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CRC5_ERR_INT_ST": {
    -                    "description": "The raw interrupt status bit for the USB_DEVICE_CRC5_ERR_INT interrupt.",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "CRC16_ERR_INT_ST": {
    -                    "description": "The raw interrupt status bit for the USB_DEVICE_CRC16_ERR_INT interrupt.",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "STUFF_ERR_INT_ST": {
    -                    "description": "The raw interrupt status bit for the USB_DEVICE_STUFF_ERR_INT interrupt.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_TOKEN_REC_IN_EP1_INT_ST": {
    -                    "description": "The raw interrupt status bit for the USB_DEVICE_IN_TOKEN_REC_IN_EP1_INT interrupt.",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "USB_BUS_RESET_INT_ST": {
    -                    "description": "The raw interrupt status bit for the USB_DEVICE_USB_BUS_RESET_INT interrupt.",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_EP1_ZERO_PAYLOAD_INT_ST": {
    -                    "description": "The raw interrupt status bit for the USB_DEVICE_OUT_EP1_ZERO_PAYLOAD_INT interrupt.",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_EP2_ZERO_PAYLOAD_INT_ST": {
    -                    "description": "The raw interrupt status bit for the USB_DEVICE_OUT_EP2_ZERO_PAYLOAD_INT interrupt.",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ENA": {
    -              "description": "USB_DEVICE_INT_ENA_REG.",
    -              "offset": 16,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "JTAG_IN_FLUSH_INT_ENA": {
    -                    "description": "The interrupt enable bit for the USB_DEVICE_JTAG_IN_FLUSH_INT interrupt.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "SOF_INT_ENA": {
    -                    "description": "The interrupt enable bit for the USB_DEVICE_SOF_INT interrupt.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "SERIAL_OUT_RECV_PKT_INT_ENA": {
    -                    "description": "The interrupt enable bit for the USB_DEVICE_SERIAL_OUT_RECV_PKT_INT interrupt.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "SERIAL_IN_EMPTY_INT_ENA": {
    -                    "description": "The interrupt enable bit for the USB_DEVICE_SERIAL_IN_EMPTY_INT interrupt.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "PID_ERR_INT_ENA": {
    -                    "description": "The interrupt enable bit for the USB_DEVICE_PID_ERR_INT interrupt.",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "CRC5_ERR_INT_ENA": {
    -                    "description": "The interrupt enable bit for the USB_DEVICE_CRC5_ERR_INT interrupt.",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "CRC16_ERR_INT_ENA": {
    -                    "description": "The interrupt enable bit for the USB_DEVICE_CRC16_ERR_INT interrupt.",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "STUFF_ERR_INT_ENA": {
    -                    "description": "The interrupt enable bit for the USB_DEVICE_STUFF_ERR_INT interrupt.",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "IN_TOKEN_REC_IN_EP1_INT_ENA": {
    -                    "description": "The interrupt enable bit for the USB_DEVICE_IN_TOKEN_REC_IN_EP1_INT interrupt.",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "USB_BUS_RESET_INT_ENA": {
    -                    "description": "The interrupt enable bit for the USB_DEVICE_USB_BUS_RESET_INT interrupt.",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "OUT_EP1_ZERO_PAYLOAD_INT_ENA": {
    -                    "description": "The interrupt enable bit for the USB_DEVICE_OUT_EP1_ZERO_PAYLOAD_INT interrupt.",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "OUT_EP2_ZERO_PAYLOAD_INT_ENA": {
    -                    "description": "The interrupt enable bit for the USB_DEVICE_OUT_EP2_ZERO_PAYLOAD_INT interrupt.",
    -                    "offset": 11,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "INT_CLR": {
    -              "description": "USB_DEVICE_INT_CLR_REG.",
    -              "offset": 20,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "JTAG_IN_FLUSH_INT_CLR": {
    -                    "description": "Set this bit to clear the USB_DEVICE_JTAG_IN_FLUSH_INT interrupt.",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SOF_INT_CLR": {
    -                    "description": "Set this bit to clear the USB_DEVICE_JTAG_SOF_INT interrupt.",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SERIAL_OUT_RECV_PKT_INT_CLR": {
    -                    "description": "Set this bit to clear the USB_DEVICE_SERIAL_OUT_RECV_PKT_INT interrupt.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SERIAL_IN_EMPTY_INT_CLR": {
    -                    "description": "Set this bit to clear the USB_DEVICE_SERIAL_IN_EMPTY_INT interrupt.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "PID_ERR_INT_CLR": {
    -                    "description": "Set this bit to clear the USB_DEVICE_PID_ERR_INT interrupt.",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "CRC5_ERR_INT_CLR": {
    -                    "description": "Set this bit to clear the USB_DEVICE_CRC5_ERR_INT interrupt.",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "CRC16_ERR_INT_CLR": {
    -                    "description": "Set this bit to clear the USB_DEVICE_CRC16_ERR_INT interrupt.",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "STUFF_ERR_INT_CLR": {
    -                    "description": "Set this bit to clear the USB_DEVICE_STUFF_ERR_INT interrupt.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "IN_TOKEN_REC_IN_EP1_INT_CLR": {
    -                    "description": "Set this bit to clear the USB_DEVICE_IN_TOKEN_IN_EP1_INT interrupt.",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "USB_BUS_RESET_INT_CLR": {
    -                    "description": "Set this bit to clear the USB_DEVICE_USB_BUS_RESET_INT interrupt.",
    -                    "offset": 9,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OUT_EP1_ZERO_PAYLOAD_INT_CLR": {
    -                    "description": "Set this bit to clear the USB_DEVICE_OUT_EP1_ZERO_PAYLOAD_INT interrupt.",
    -                    "offset": 10,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OUT_EP2_ZERO_PAYLOAD_INT_CLR": {
    -                    "description": "Set this bit to clear the USB_DEVICE_OUT_EP2_ZERO_PAYLOAD_INT interrupt.",
    -                    "offset": 11,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CONF0": {
    -              "description": "USB_DEVICE_CONF0_REG.",
    -              "offset": 24,
    -              "size": 32,
    -              "reset_value": 16896,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PHY_SEL": {
    -                    "description": "Select internal/external PHY",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "EXCHG_PINS_OVERRIDE": {
    -                    "description": "Enable software control USB D+ D- exchange",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "EXCHG_PINS": {
    -                    "description": "USB D+ D- exchange",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "VREFH": {
    -                    "description": "Control single-end input high threshold,1.76V to 2V, step 80mV",
    -                    "offset": 3,
    -                    "size": 2
    -                  },
    -                  "VREFL": {
    -                    "description": "Control single-end input low threshold,0.8V to 1.04V, step 80mV",
    -                    "offset": 5,
    -                    "size": 2
    -                  },
    -                  "VREF_OVERRIDE": {
    -                    "description": "Enable software control input  threshold",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "PAD_PULL_OVERRIDE": {
    -                    "description": "Enable software control USB D+ D- pullup pulldown",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "DP_PULLUP": {
    -                    "description": "Control USB D+ pull up.",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "DP_PULLDOWN": {
    -                    "description": "Control USB D+ pull down.",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "DM_PULLUP": {
    -                    "description": "Control USB D- pull up.",
    -                    "offset": 11,
    -                    "size": 1
    -                  },
    -                  "DM_PULLDOWN": {
    -                    "description": "Control USB D- pull down.",
    -                    "offset": 12,
    -                    "size": 1
    -                  },
    -                  "PULLUP_VALUE": {
    -                    "description": "Control pull up value.",
    -                    "offset": 13,
    -                    "size": 1
    -                  },
    -                  "USB_PAD_ENABLE": {
    -                    "description": "Enable USB pad function.",
    -                    "offset": 14,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "TEST": {
    -              "description": "USB_DEVICE_TEST_REG.",
    -              "offset": 28,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ENABLE": {
    -                    "description": "Enable test of the USB pad",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "USB_OE": {
    -                    "description": "USB pad oen in test",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "TX_DP": {
    -                    "description": "USB D+ tx value in test",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "TX_DM": {
    -                    "description": "USB D- tx value in test",
    -                    "offset": 3,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "JFIFO_ST": {
    -              "description": "USB_DEVICE_JFIFO_ST_REG.",
    -              "offset": 32,
    -              "size": 32,
    -              "reset_value": 68,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_FIFO_CNT": {
    -                    "description": "JTAT in fifo counter.",
    -                    "offset": 0,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "IN_FIFO_EMPTY": {
    -                    "description": "1: JTAG in fifo is empty.",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_FIFO_FULL": {
    -                    "description": "1: JTAG in fifo is full.",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_FIFO_CNT": {
    -                    "description": "JTAT out fifo counter.",
    -                    "offset": 4,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_FIFO_EMPTY": {
    -                    "description": "1: JTAG out fifo is empty.",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_FIFO_FULL": {
    -                    "description": "1: JTAG out fifo is full.",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "IN_FIFO_RESET": {
    -                    "description": "Write 1 to reset JTAG in fifo.",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "OUT_FIFO_RESET": {
    -                    "description": "Write 1 to reset JTAG out fifo.",
    -                    "offset": 9,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "FRAM_NUM": {
    -              "description": "USB_DEVICE_FRAM_NUM_REG.",
    -              "offset": 36,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SOF_FRAME_INDEX": {
    -                    "description": "Frame index of received SOF frame.",
    -                    "offset": 0,
    -                    "size": 11,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_EP0_ST": {
    -              "description": "USB_DEVICE_IN_EP0_ST_REG.",
    -              "offset": 40,
    -              "size": 32,
    -              "reset_value": 1,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_EP0_STATE": {
    -                    "description": "State of IN Endpoint 0.",
    -                    "offset": 0,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "IN_EP0_WR_ADDR": {
    -                    "description": "Write data address of IN endpoint 0.",
    -                    "offset": 2,
    -                    "size": 7,
    -                    "access": "read-only"
    -                  },
    -                  "IN_EP0_RD_ADDR": {
    -                    "description": "Read data address of IN endpoint 0.",
    -                    "offset": 9,
    -                    "size": 7,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_EP1_ST": {
    -              "description": "USB_DEVICE_IN_EP1_ST_REG.",
    -              "offset": 44,
    -              "size": 32,
    -              "reset_value": 1,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_EP1_STATE": {
    -                    "description": "State of IN Endpoint 1.",
    -                    "offset": 0,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "IN_EP1_WR_ADDR": {
    -                    "description": "Write data address of IN endpoint 1.",
    -                    "offset": 2,
    -                    "size": 7,
    -                    "access": "read-only"
    -                  },
    -                  "IN_EP1_RD_ADDR": {
    -                    "description": "Read data address of IN endpoint 1.",
    -                    "offset": 9,
    -                    "size": 7,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_EP2_ST": {
    -              "description": "USB_DEVICE_IN_EP2_ST_REG.",
    -              "offset": 48,
    -              "size": 32,
    -              "reset_value": 1,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_EP2_STATE": {
    -                    "description": "State of IN Endpoint 2.",
    -                    "offset": 0,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "IN_EP2_WR_ADDR": {
    -                    "description": "Write data address of IN endpoint 2.",
    -                    "offset": 2,
    -                    "size": 7,
    -                    "access": "read-only"
    -                  },
    -                  "IN_EP2_RD_ADDR": {
    -                    "description": "Read data address of IN endpoint 2.",
    -                    "offset": 9,
    -                    "size": 7,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "IN_EP3_ST": {
    -              "description": "USB_DEVICE_IN_EP3_ST_REG.",
    -              "offset": 52,
    -              "size": 32,
    -              "reset_value": 1,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "IN_EP3_STATE": {
    -                    "description": "State of IN Endpoint 3.",
    -                    "offset": 0,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "IN_EP3_WR_ADDR": {
    -                    "description": "Write data address of IN endpoint 3.",
    -                    "offset": 2,
    -                    "size": 7,
    -                    "access": "read-only"
    -                  },
    -                  "IN_EP3_RD_ADDR": {
    -                    "description": "Read data address of IN endpoint 3.",
    -                    "offset": 9,
    -                    "size": 7,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_EP0_ST": {
    -              "description": "USB_DEVICE_OUT_EP0_ST_REG.",
    -              "offset": 56,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUT_EP0_STATE": {
    -                    "description": "State of OUT Endpoint 0.",
    -                    "offset": 0,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_EP0_WR_ADDR": {
    -                    "description": "Write data address of OUT endpoint 0. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is detected, there are USB_DEVICE_OUT_EP0_WR_ADDR-2 bytes data in OUT EP0.",
    -                    "offset": 2,
    -                    "size": 7,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_EP0_RD_ADDR": {
    -                    "description": "Read data address of OUT endpoint 0.",
    -                    "offset": 9,
    -                    "size": 7,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_EP1_ST": {
    -              "description": "USB_DEVICE_OUT_EP1_ST_REG.",
    -              "offset": 60,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUT_EP1_STATE": {
    -                    "description": "State of OUT Endpoint 1.",
    -                    "offset": 0,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_EP1_WR_ADDR": {
    -                    "description": "Write data address of OUT endpoint 1. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is detected, there are USB_DEVICE_OUT_EP1_WR_ADDR-2 bytes data in OUT EP1.",
    -                    "offset": 2,
    -                    "size": 7,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_EP1_RD_ADDR": {
    -                    "description": "Read data address of OUT endpoint 1.",
    -                    "offset": 9,
    -                    "size": 7,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_EP1_REC_DATA_CNT": {
    -                    "description": "Data count in OUT endpoint 1 when one packet is received.",
    -                    "offset": 16,
    -                    "size": 7,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "OUT_EP2_ST": {
    -              "description": "USB_DEVICE_OUT_EP2_ST_REG.",
    -              "offset": 64,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "OUT_EP2_STATE": {
    -                    "description": "State of OUT Endpoint 2.",
    -                    "offset": 0,
    -                    "size": 2,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_EP2_WR_ADDR": {
    -                    "description": "Write data address of OUT endpoint 2. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is detected, there are USB_DEVICE_OUT_EP2_WR_ADDR-2 bytes data in OUT EP2.",
    -                    "offset": 2,
    -                    "size": 7,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_EP2_RD_ADDR": {
    -                    "description": "Read data address of OUT endpoint 2.",
    -                    "offset": 9,
    -                    "size": 7,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "MISC_CONF": {
    -              "description": "USB_DEVICE_MISC_CONF_REG.",
    -              "offset": 68,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CLK_EN": {
    -                    "description": "1'h1: Force clock on for register. 1'h0: Support clock only when application writes registers.",
    -                    "offset": 0,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "MEM_CONF": {
    -              "description": "USB_DEVICE_MEM_CONF_REG.",
    -              "offset": 72,
    -              "size": 32,
    -              "reset_value": 2,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "USB_MEM_PD": {
    -                    "description": "1: power down usb memory.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "USB_MEM_CLK_EN": {
    -                    "description": "1: Force clock on for usb memory.",
    -                    "offset": 1,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "DATE": {
    -              "description": "USB_DEVICE_DATE_REG.",
    -              "offset": 128,
    -              "size": 32,
    -              "reset_value": 33583872,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATE": {
    -                    "description": "register version.",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      },
    -      "UHCI0": {
    -        "description": "Universal Host Controller Interface",
    -        "children": {
    -          "registers": {
    -            "CONF0": {
    -              "description": "a",
    -              "offset": 0,
    -              "size": 32,
    -              "reset_value": 1760,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_RST": {
    -                    "description": "Write 1, then write 0 to this bit to reset decode state machine.",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "RX_RST": {
    -                    "description": "Write 1, then write 0 to this bit to reset encode state machine.",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "UART0_CE": {
    -                    "description": "Set this bit to link up HCI and UART0.",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "UART1_CE": {
    -                    "description": "Set this bit to link up HCI and UART1.",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "SEPER_EN": {
    -                    "description": "Set this bit to separate the data frame using a special char.",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "HEAD_EN": {
    -                    "description": "Set this bit to encode the data packet with a formatting header.",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "CRC_REC_EN": {
    -                    "description": "Set this bit to enable UHCI to receive the 16 bit CRC.",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "UART_IDLE_EOF_EN": {
    -                    "description": "If this bit is set to 1, UHCI will end the payload receiving process when UART has been in idle state.",
    -                    "offset": 8,
    -                    "size": 1
    -                  },
    -                  "LEN_EOF_EN": {
    -                    "description": "If this bit is set to 1, UHCI decoder receiving payload data is end when the receiving byte count has reached the specified value. The value is payload length indicated by UHCI packet header when UHCI_HEAD_EN is 1 or the value is configuration value when UHCI_HEAD_EN is 0. If this bit is set to 0, UHCI decoder receiving payload data is end when 0xc0 is received.",
    -                    "offset": 9,
    -                    "size": 1
    -                  },
    -                  "ENCODE_CRC_EN": {
    -                    "description": "Set this bit to enable data integrity checking by appending a 16 bit CCITT-CRC to end of the payload.",
    -                    "offset": 10,
    -                    "size": 1
    -                  },
    -                  "CLK_EN": {
    -                    "description": "1'b1: Force clock on for register. 1'b0: Support clock only when application writes registers.",
    -                    "offset": 11,
    -                    "size": 1
    -                  },
    -                  "UART_RX_BRK_EOF_EN": {
    -                    "description": "If this bit is set to 1, UHCI will end payload receive process when NULL frame is received by UART.",
    -                    "offset": 12,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "INT_RAW": {
    -              "description": "a",
    -              "offset": 4,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_START_INT_RAW": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TX_START_INT_RAW": {
    -                    "description": "a",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RX_HUNG_INT_RAW": {
    -                    "description": "a",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TX_HUNG_INT_RAW": {
    -                    "description": "a",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SEND_S_REG_Q_INT_RAW": {
    -                    "description": "a",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SEND_A_REG_Q_INT_RAW": {
    -                    "description": "a",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUT_EOF_INT_RAW": {
    -                    "description": "This is the interrupt raw bit. Triggered when there are some errors in EOF in the",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "APP_CTRL0_INT_RAW": {
    -                    "description": "Soft control int raw bit.",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "APP_CTRL1_INT_RAW": {
    -                    "description": "Soft control int raw bit.",
    -                    "offset": 8,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ST": {
    -              "description": "a",
    -              "offset": 8,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_START_INT_ST": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TX_START_INT_ST": {
    -                    "description": "a",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "RX_HUNG_INT_ST": {
    -                    "description": "a",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "TX_HUNG_INT_ST": {
    -                    "description": "a",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SEND_S_REG_Q_INT_ST": {
    -                    "description": "a",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "SEND_A_REG_Q_INT_ST": {
    -                    "description": "a",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "OUTLINK_EOF_ERR_INT_ST": {
    -                    "description": "a",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "APP_CTRL0_INT_ST": {
    -                    "description": "a",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  },
    -                  "APP_CTRL1_INT_ST": {
    -                    "description": "a",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "INT_ENA": {
    -              "description": "a",
    -              "offset": 12,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_START_INT_ENA": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "TX_START_INT_ENA": {
    -                    "description": "a",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "RX_HUNG_INT_ENA": {
    -                    "description": "a",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "TX_HUNG_INT_ENA": {
    -                    "description": "a",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "SEND_S_REG_Q_INT_ENA": {
    -                    "description": "a",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "SEND_A_REG_Q_INT_ENA": {
    -                    "description": "a",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "OUTLINK_EOF_ERR_INT_ENA": {
    -                    "description": "a",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "APP_CTRL0_INT_ENA": {
    -                    "description": "a",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "APP_CTRL1_INT_ENA": {
    -                    "description": "a",
    -                    "offset": 8,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "INT_CLR": {
    -              "description": "a",
    -              "offset": 16,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_START_INT_CLR": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "TX_START_INT_CLR": {
    -                    "description": "a",
    -                    "offset": 1,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "RX_HUNG_INT_CLR": {
    -                    "description": "a",
    -                    "offset": 2,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "TX_HUNG_INT_CLR": {
    -                    "description": "a",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SEND_S_REG_Q_INT_CLR": {
    -                    "description": "a",
    -                    "offset": 4,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "SEND_A_REG_Q_INT_CLR": {
    -                    "description": "a",
    -                    "offset": 5,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "OUTLINK_EOF_ERR_INT_CLR": {
    -                    "description": "a",
    -                    "offset": 6,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "APP_CTRL0_INT_CLR": {
    -                    "description": "a",
    -                    "offset": 7,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  },
    -                  "APP_CTRL1_INT_CLR": {
    -                    "description": "a",
    -                    "offset": 8,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "CONF1": {
    -              "description": "a",
    -              "offset": 20,
    -              "size": 32,
    -              "reset_value": 51,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "CHECK_SUM_EN": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "CHECK_SEQ_EN": {
    -                    "description": "a",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "CRC_DISABLE": {
    -                    "description": "a",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "SAVE_HEAD": {
    -                    "description": "a",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "TX_CHECK_SUM_RE": {
    -                    "description": "a",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "TX_ACK_NUM_RE": {
    -                    "description": "a",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "WAIT_SW_START": {
    -                    "description": "a",
    -                    "offset": 7,
    -                    "size": 1
    -                  },
    -                  "SW_START": {
    -                    "description": "a",
    -                    "offset": 8,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "STATE0": {
    -              "description": "a",
    -              "offset": 24,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_ERR_CAUSE": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  },
    -                  "DECODE_STATE": {
    -                    "description": "a",
    -                    "offset": 3,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "STATE1": {
    -              "description": "a",
    -              "offset": 28,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ENCODE_STATE": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 3,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "ESCAPE_CONF": {
    -              "description": "a",
    -              "offset": 32,
    -              "size": 32,
    -              "reset_value": 51,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TX_C0_ESC_EN": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 1
    -                  },
    -                  "TX_DB_ESC_EN": {
    -                    "description": "a",
    -                    "offset": 1,
    -                    "size": 1
    -                  },
    -                  "TX_11_ESC_EN": {
    -                    "description": "a",
    -                    "offset": 2,
    -                    "size": 1
    -                  },
    -                  "TX_13_ESC_EN": {
    -                    "description": "a",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "RX_C0_ESC_EN": {
    -                    "description": "a",
    -                    "offset": 4,
    -                    "size": 1
    -                  },
    -                  "RX_DB_ESC_EN": {
    -                    "description": "a",
    -                    "offset": 5,
    -                    "size": 1
    -                  },
    -                  "RX_11_ESC_EN": {
    -                    "description": "a",
    -                    "offset": 6,
    -                    "size": 1
    -                  },
    -                  "RX_13_ESC_EN": {
    -                    "description": "a",
    -                    "offset": 7,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "HUNG_CONF": {
    -              "description": "a",
    -              "offset": 36,
    -              "size": 32,
    -              "reset_value": 8456208,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "TXFIFO_TIMEOUT": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 8
    -                  },
    -                  "TXFIFO_TIMEOUT_SHIFT": {
    -                    "description": "a",
    -                    "offset": 8,
    -                    "size": 3
    -                  },
    -                  "TXFIFO_TIMEOUT_ENA": {
    -                    "description": "a",
    -                    "offset": 11,
    -                    "size": 1
    -                  },
    -                  "RXFIFO_TIMEOUT": {
    -                    "description": "a",
    -                    "offset": 12,
    -                    "size": 8
    -                  },
    -                  "RXFIFO_TIMEOUT_SHIFT": {
    -                    "description": "a",
    -                    "offset": 20,
    -                    "size": 3
    -                  },
    -                  "RXFIFO_TIMEOUT_ENA": {
    -                    "description": "a",
    -                    "offset": 23,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "ACK_NUM": {
    -              "description": "a",
    -              "offset": 40,
    -              "size": 32,
    -              "reset_value": 8,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ACK_NUM": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 3
    -                  },
    -                  "LOAD": {
    -                    "description": "a",
    -                    "offset": 3,
    -                    "size": 1,
    -                    "access": "write-only"
    -                  }
    -                }
    -              }
    -            },
    -            "RX_HEAD": {
    -              "description": "a",
    -              "offset": 44,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "RX_HEAD": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 32,
    -                    "access": "read-only"
    -                  }
    -                }
    -              }
    -            },
    -            "QUICK_SENT": {
    -              "description": "a",
    -              "offset": 48,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SINGLE_SEND_NUM": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 3
    -                  },
    -                  "SINGLE_SEND_EN": {
    -                    "description": "a",
    -                    "offset": 3,
    -                    "size": 1
    -                  },
    -                  "ALWAYS_SEND_NUM": {
    -                    "description": "a",
    -                    "offset": 4,
    -                    "size": 3
    -                  },
    -                  "ALWAYS_SEND_EN": {
    -                    "description": "a",
    -                    "offset": 7,
    -                    "size": 1
    -                  }
    -                }
    -              }
    -            },
    -            "REG_Q0_WORD0": {
    -              "description": "a",
    -              "offset": 52,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SEND_Q0_WORD0": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "REG_Q0_WORD1": {
    -              "description": "a",
    -              "offset": 56,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SEND_Q0_WORD1": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "REG_Q1_WORD0": {
    -              "description": "a",
    -              "offset": 60,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SEND_Q1_WORD0": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "REG_Q1_WORD1": {
    -              "description": "a",
    -              "offset": 64,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SEND_Q1_WORD1": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "REG_Q2_WORD0": {
    -              "description": "a",
    -              "offset": 68,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SEND_Q2_WORD0": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "REG_Q2_WORD1": {
    -              "description": "a",
    -              "offset": 72,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SEND_Q2_WORD1": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "REG_Q3_WORD0": {
    -              "description": "a",
    -              "offset": 76,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SEND_Q3_WORD0": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "REG_Q3_WORD1": {
    -              "description": "a",
    -              "offset": 80,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SEND_Q3_WORD1": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "REG_Q4_WORD0": {
    -              "description": "a",
    -              "offset": 84,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SEND_Q4_WORD0": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "REG_Q4_WORD1": {
    -              "description": "a",
    -              "offset": 88,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SEND_Q4_WORD1": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "REG_Q5_WORD0": {
    -              "description": "a",
    -              "offset": 92,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SEND_Q5_WORD0": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "REG_Q5_WORD1": {
    -              "description": "a",
    -              "offset": 96,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SEND_Q5_WORD1": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "REG_Q6_WORD0": {
    -              "description": "a",
    -              "offset": 100,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SEND_Q6_WORD0": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "REG_Q6_WORD1": {
    -              "description": "a",
    -              "offset": 104,
    -              "size": 32,
    -              "reset_value": 0,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SEND_Q6_WORD1": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            },
    -            "ESC_CONF0": {
    -              "description": "a",
    -              "offset": 108,
    -              "size": 32,
    -              "reset_value": 14474176,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "SEPER_CHAR": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 8
    -                  },
    -                  "SEPER_ESC_CHAR0": {
    -                    "description": "a",
    -                    "offset": 8,
    -                    "size": 8
    -                  },
    -                  "SEPER_ESC_CHAR1": {
    -                    "description": "a",
    -                    "offset": 16,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "ESC_CONF1": {
    -              "description": "a",
    -              "offset": 112,
    -              "size": 32,
    -              "reset_value": 14539739,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ESC_SEQ0": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 8
    -                  },
    -                  "ESC_SEQ0_CHAR0": {
    -                    "description": "a",
    -                    "offset": 8,
    -                    "size": 8
    -                  },
    -                  "ESC_SEQ0_CHAR1": {
    -                    "description": "a",
    -                    "offset": 16,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "ESC_CONF2": {
    -              "description": "a",
    -              "offset": 116,
    -              "size": 32,
    -              "reset_value": 14605073,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ESC_SEQ1": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 8
    -                  },
    -                  "ESC_SEQ1_CHAR0": {
    -                    "description": "a",
    -                    "offset": 8,
    -                    "size": 8
    -                  },
    -                  "ESC_SEQ1_CHAR1": {
    -                    "description": "a",
    -                    "offset": 16,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "ESC_CONF3": {
    -              "description": "a",
    -              "offset": 120,
    -              "size": 32,
    -              "reset_value": 14670611,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "ESC_SEQ2": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 8
    -                  },
    -                  "ESC_SEQ2_CHAR0": {
    -                    "description": "a",
    -                    "offset": 8,
    -                    "size": 8
    -                  },
    -                  "ESC_SEQ2_CHAR1": {
    -                    "description": "a",
    -                    "offset": 16,
    -                    "size": 8
    -                  }
    -                }
    -              }
    -            },
    -            "PKT_THRES": {
    -              "description": "a",
    -              "offset": 124,
    -              "size": 32,
    -              "reset_value": 128,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "PKT_THRS": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 13
    -                  }
    -                }
    -              }
    -            },
    -            "DATE": {
    -              "description": "a",
    -              "offset": 128,
    -              "size": 32,
    -              "reset_value": 33583472,
    -              "reset_mask": 4294967295,
    -              "children": {
    -                "fields": {
    -                  "DATE": {
    -                    "description": "a",
    -                    "offset": 0,
    -                    "size": 32
    -                  }
    -                }
    -              }
    -            }
    -          }
    -        }
    -      }
    -    }
    -  },
    -  "devices": {
    -    "ESP32-C3": {
    -      "arch": "unknown",
    -      "description": "32-bit RISC-V MCU & 2.4 GHz Wi-Fi & Bluetooth 5 (LE)",
    -      "properties": {
    -        "cpu.mpuPresent": "false",
    -        "cpu.nvicPrioBits": "4",
    -        "cpu.vendorSystickConfig": "false",
    -        "cpu.revision": "r0p0",
    -        "cpu.endian": "little",
    -        "license": "\n    Copyright 2022 Espressif Systems (Shanghai) PTE LTD\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n",
    -        "cpu.name": "RV32IMC",
    -        "cpu.fpuPresent": "false"
    -      },
    -      "children": {
    -        "interrupts": {
    -          "AES": {
    -            "index": 48
    -          },
    -          "APB_ADC": {
    -            "index": 43
    -          },
    -          "ASSIST_DEBUG": {
    -            "index": 54
    -          },
    -          "DMA_CH0": {
    -            "index": 44
    -          },
    -          "DMA_CH1": {
    -            "index": 45
    -          },
    -          "DMA_CH2": {
    -            "index": 46
    -          },
    -          "EFUSE": {
    -            "index": 24
    -          },
    -          "GPIO": {
    -            "index": 16
    -          },
    -          "GPIO_NMI": {
    -            "index": 17
    -          },
    -          "I2C_EXT0": {
    -            "index": 29
    -          },
    -          "I2S": {
    -            "index": 20
    -          },
    -          "LEDC": {
    -            "index": 23
    -          },
    -          "RMT": {
    -            "index": 28
    -          },
    -          "RSA": {
    -            "index": 47
    -          },
    -          "RTC_CORE": {
    -            "index": 27
    -          },
    -          "SHA": {
    -            "index": 49
    -          },
    -          "SPI2": {
    -            "index": 19
    -          },
    -          "SYSTIMER_TARGET0": {
    -            "index": 37
    -          },
    -          "SYSTIMER_TARGET1": {
    -            "index": 38
    -          },
    -          "SYSTIMER_TARGET2": {
    -            "index": 39
    -          },
    -          "TG0_T0_LEVEL": {
    -            "index": 32
    -          },
    -          "TG0_WDT_LEVEL": {
    -            "index": 33
    -          },
    -          "TG1_T0_LEVEL": {
    -            "index": 34
    -          },
    -          "TG1_WDT_LEVEL": {
    -            "index": 35
    -          },
    -          "TWAI": {
    -            "index": 25
    -          },
    -          "UART0": {
    -            "index": 21
    -          },
    -          "UART1": {
    -            "index": 22
    -          },
    -          "UHCI0": {
    -            "index": 15
    -          },
    -          "USB_SERIAL_JTAG": {
    -            "index": 26
    -          }
    -        },
    -        "peripheral_instances": {
    -          "AES": {
    -            "description": "AES (Advanced Encryption Standard) Accelerator",
    -            "offset": 1610850304,
    -            "type": "types.peripherals.AES"
    -          },
    -          "APB_CTRL": {
    -            "description": "Advanced Peripheral Bus Controller",
    -            "offset": 1610768384,
    -            "type": "types.peripherals.APB_CTRL"
    -          },
    -          "APB_SARADC": {
    -            "description": "Successive Approximation Register Analog to Digital Converter",
    -            "offset": 1610874880,
    -            "type": "types.peripherals.APB_SARADC"
    -          },
    -          "ASSIST_DEBUG": {
    -            "description": "Debug Assist",
    -            "offset": 1611456512,
    -            "type": "types.peripherals.ASSIST_DEBUG"
    -          },
    -          "DMA": {
    -            "description": "DMA (Direct Memory Access) Controller",
    -            "offset": 1610870784,
    -            "type": "types.peripherals.DMA"
    -          },
    -          "DS": {
    -            "description": "Digital Signature",
    -            "offset": 1610862592,
    -            "type": "types.peripherals.DS"
    -          },
    -          "EFUSE": {
    -            "description": "eFuse Controller",
    -            "offset": 1610647552,
    -            "type": "types.peripherals.EFUSE"
    -          },
    -          "EXTMEM": {
    -            "description": "External Memory",
    -            "offset": 1611415552,
    -            "type": "types.peripherals.EXTMEM"
    -          },
    -          "GPIO": {
    -            "description": "General Purpose Input/Output",
    -            "offset": 1610629120,
    -            "type": "types.peripherals.GPIO"
    -          },
    -          "GPIOSD": {
    -            "description": "Sigma-Delta Modulation",
    -            "offset": 1610632960,
    -            "type": "types.peripherals.GPIOSD"
    -          },
    -          "HMAC": {
    -            "description": "HMAC (Hash-based Message Authentication Code) Accelerator",
    -            "offset": 1610866688,
    -            "type": "types.peripherals.HMAC"
    -          },
    -          "I2C0": {
    -            "description": "I2C (Inter-Integrated Circuit) Controller",
    -            "offset": 1610690560,
    -            "type": "types.peripherals.I2C0"
    -          },
    -          "I2S": {
    -            "description": "I2S (Inter-IC Sound) Controller",
    -            "offset": 1610797056,
    -            "type": "types.peripherals.I2S"
    -          },
    -          "INTERRUPT_CORE0": {
    -            "description": "Interrupt Core",
    -            "offset": 1611407360,
    -            "type": "types.peripherals.INTERRUPT_CORE0"
    -          },
    -          "IO_MUX": {
    -            "description": "Input/Output Multiplexer",
    -            "offset": 1610649600,
    -            "type": "types.peripherals.IO_MUX"
    -          },
    -          "LEDC": {
    -            "description": "LED Control PWM (Pulse Width Modulation)",
    -            "offset": 1610715136,
    -            "type": "types.peripherals.LEDC"
    -          },
    -          "RMT": {
    -            "description": "Remote Control Peripheral",
    -            "offset": 1610702848,
    -            "type": "types.peripherals.RMT"
    -          },
    -          "RNG": {
    -            "description": "Hardware random number generator",
    -            "offset": 1610768384,
    -            "type": "types.peripherals.RNG"
    -          },
    -          "RSA": {
    -            "description": "RSA (Rivest Shamir Adleman) Accelerator",
    -            "offset": 1610858496,
    -            "type": "types.peripherals.RSA"
    -          },
    -          "RTC_CNTL": {
    -            "description": "Real-Time Clock Control",
    -            "offset": 1610645504,
    -            "type": "types.peripherals.RTC_CNTL"
    -          },
    -          "SENSITIVE": {
    -            "description": "Sensitive",
    -            "offset": 1611403264,
    -            "type": "types.peripherals.SENSITIVE"
    -          },
    -          "SHA": {
    -            "description": "SHA (Secure Hash Algorithm) Accelerator",
    -            "offset": 1610854400,
    -            "type": "types.peripherals.SHA"
    -          },
    -          "SPI0": {
    -            "description": "SPI (Serial Peripheral Interface) Controller",
    -            "offset": 1610625024,
    -            "type": "types.peripherals.SPI0"
    -          },
    -          "SPI1": {
    -            "description": "SPI (Serial Peripheral Interface) Controller",
    -            "offset": 1610620928,
    -            "type": "types.peripherals.SPI1"
    -          },
    -          "SPI2": {
    -            "description": "SPI (Serial Peripheral Interface) Controller",
    -            "offset": 1610760192,
    -            "type": "types.peripherals.SPI2"
    -          },
    -          "SYSTEM": {
    -            "description": "System",
    -            "offset": 1611399168,
    -            "type": "types.peripherals.SYSTEM"
    -          },
    -          "SYSTIMER": {
    -            "description": "System Timer",
    -            "offset": 1610756096,
    -            "type": "types.peripherals.SYSTIMER"
    -          },
    -          "TIMG0": {
    -            "description": "Timer Group",
    -            "offset": 1610739712,
    -            "type": "types.peripherals.TIMG0"
    -          },
    -          "TIMG1": {
    -            "description": "Timer Group",
    -            "offset": 1610743808,
    -            "type": "types.peripherals.TIMG0"
    -          },
    -          "TWAI": {
    -            "description": "Two-Wire Automotive Interface",
    -            "offset": 1610788864,
    -            "type": "types.peripherals.TWAI"
    -          },
    -          "UART0": {
    -            "description": "UART (Universal Asynchronous Receiver-Transmitter) Controller",
    -            "offset": 1610612736,
    -            "type": "types.peripherals.UART0"
    -          },
    -          "UART1": {
    -            "description": "UART (Universal Asynchronous Receiver-Transmitter) Controller",
    -            "offset": 1610678272,
    -            "type": "types.peripherals.UART0"
    -          },
    -          "UHCI0": {
    -            "description": "Universal Host Controller Interface",
    -            "offset": 1610694656,
    -            "type": "types.peripherals.UHCI0"
    -          },
    -          "UHCI1": {
    -            "description": "Universal Host Controller Interface",
    -            "offset": 1610661888,
    -            "type": "types.peripherals.UHCI0"
    -          },
    -          "USB_DEVICE": {
    -            "description": "Full-speed USB Serial/JTAG Controller",
    -            "offset": 1610887168,
    -            "type": "types.peripherals.USB_DEVICE"
    -          },
    -          "XTS_AES": {
    -            "description": "XTS-AES-128 Flash Encryption",
    -            "offset": 1611448320,
    -            "type": "types.peripherals.XTS_AES"
    -          }
    -        }
    -      }
    -    }
    -  }
    -}
    \ No newline at end of file
    diff --git a/src/chips/ESP32_C3.zig b/src/chips/ESP32_C3.zig
    deleted file mode 100644
    index 8a632a07d..000000000
    --- a/src/chips/ESP32_C3.zig
    +++ /dev/null
    @@ -1,12378 +0,0 @@
    -const micro = @import("microzig");
    -const mmio = micro.mmio;
    -
    -pub const devices = struct {
    -    ///  32-bit RISC-V MCU & 2.4 GHz Wi-Fi & Bluetooth 5 (LE)
    -    pub const @"ESP32-C3" = struct {
    -        pub const properties = struct {
    -            pub const @"cpu.mpuPresent" = "false";
    -            pub const @"cpu.nvicPrioBits" = "4";
    -            pub const @"cpu.vendorSystickConfig" = "false";
    -            pub const @"cpu.revision" = "r0p0";
    -            pub const @"cpu.endian" = "little";
    -            pub const license =
    -                \\
    -                \\    Copyright 2022 Espressif Systems (Shanghai) PTE LTD
    -                \\
    -                \\    Licensed under the Apache License, Version 2.0 (the "License");
    -                \\    you may not use this file except in compliance with the License.
    -                \\    You may obtain a copy of the License at
    -                \\
    -                \\        http://www.apache.org/licenses/LICENSE-2.0
    -                \\
    -                \\    Unless required by applicable law or agreed to in writing, software
    -                \\    distributed under the License is distributed on an "AS IS" BASIS,
    -                \\    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -                \\    See the License for the specific language governing permissions and
    -                \\    limitations under the License.
    -                \\
    -            ;
    -            pub const @"cpu.name" = "RV32IMC";
    -            pub const @"cpu.fpuPresent" = "false";
    -        };
    -
    -        pub const peripherals = struct {
    -            ///  UART (Universal Asynchronous Receiver-Transmitter) Controller
    -            pub const UART0 = @as(*volatile types.peripherals.UART0, @ptrFromInt(0x60000000));
    -            ///  SPI (Serial Peripheral Interface) Controller
    -            pub const SPI1 = @as(*volatile types.peripherals.SPI1, @ptrFromInt(0x60002000));
    -            ///  SPI (Serial Peripheral Interface) Controller
    -            pub const SPI0 = @as(*volatile types.peripherals.SPI0, @ptrFromInt(0x60003000));
    -            ///  General Purpose Input/Output
    -            pub const GPIO = @as(*volatile types.peripherals.GPIO, @ptrFromInt(0x60004000));
    -            ///  Sigma-Delta Modulation
    -            pub const GPIOSD = @as(*volatile types.peripherals.GPIOSD, @ptrFromInt(0x60004f00));
    -            ///  Real-Time Clock Control
    -            pub const RTC_CNTL = @as(*volatile types.peripherals.RTC_CNTL, @ptrFromInt(0x60008000));
    -            ///  eFuse Controller
    -            pub const EFUSE = @as(*volatile types.peripherals.EFUSE, @ptrFromInt(0x60008800));
    -            ///  Input/Output Multiplexer
    -            pub const IO_MUX = @as(*volatile types.peripherals.IO_MUX, @ptrFromInt(0x60009000));
    -            ///  Universal Host Controller Interface
    -            pub const UHCI1 = @as(*volatile types.peripherals.UHCI0, @ptrFromInt(0x6000c000));
    -            ///  UART (Universal Asynchronous Receiver-Transmitter) Controller
    -            pub const UART1 = @as(*volatile types.peripherals.UART0, @ptrFromInt(0x60010000));
    -            ///  I2C (Inter-Integrated Circuit) Controller
    -            pub const I2C0 = @as(*volatile types.peripherals.I2C0, @ptrFromInt(0x60013000));
    -            ///  Universal Host Controller Interface
    -            pub const UHCI0 = @as(*volatile types.peripherals.UHCI0, @ptrFromInt(0x60014000));
    -            ///  Remote Control Peripheral
    -            pub const RMT = @as(*volatile types.peripherals.RMT, @ptrFromInt(0x60016000));
    -            ///  LED Control PWM (Pulse Width Modulation)
    -            pub const LEDC = @as(*volatile types.peripherals.LEDC, @ptrFromInt(0x60019000));
    -            ///  Timer Group
    -            pub const TIMG0 = @as(*volatile types.peripherals.TIMG0, @ptrFromInt(0x6001f000));
    -            ///  Timer Group
    -            pub const TIMG1 = @as(*volatile types.peripherals.TIMG0, @ptrFromInt(0x60020000));
    -            ///  System Timer
    -            pub const SYSTIMER = @as(*volatile types.peripherals.SYSTIMER, @ptrFromInt(0x60023000));
    -            ///  SPI (Serial Peripheral Interface) Controller
    -            pub const SPI2 = @as(*volatile types.peripherals.SPI2, @ptrFromInt(0x60024000));
    -            ///  Advanced Peripheral Bus Controller
    -            pub const APB_CTRL = @as(*volatile types.peripherals.APB_CTRL, @ptrFromInt(0x60026000));
    -            ///  Hardware random number generator
    -            pub const RNG = @as(*volatile types.peripherals.RNG, @ptrFromInt(0x60026000));
    -            ///  Two-Wire Automotive Interface
    -            pub const TWAI = @as(*volatile types.peripherals.TWAI, @ptrFromInt(0x6002b000));
    -            ///  I2S (Inter-IC Sound) Controller
    -            pub const I2S = @as(*volatile types.peripherals.I2S, @ptrFromInt(0x6002d000));
    -            ///  AES (Advanced Encryption Standard) Accelerator
    -            pub const AES = @as(*volatile types.peripherals.AES, @ptrFromInt(0x6003a000));
    -            ///  SHA (Secure Hash Algorithm) Accelerator
    -            pub const SHA = @as(*volatile types.peripherals.SHA, @ptrFromInt(0x6003b000));
    -            ///  RSA (Rivest Shamir Adleman) Accelerator
    -            pub const RSA = @as(*volatile types.peripherals.RSA, @ptrFromInt(0x6003c000));
    -            ///  Digital Signature
    -            pub const DS = @as(*volatile types.peripherals.DS, @ptrFromInt(0x6003d000));
    -            ///  HMAC (Hash-based Message Authentication Code) Accelerator
    -            pub const HMAC = @as(*volatile types.peripherals.HMAC, @ptrFromInt(0x6003e000));
    -            ///  DMA (Direct Memory Access) Controller
    -            pub const DMA = @as(*volatile types.peripherals.DMA, @ptrFromInt(0x6003f000));
    -            ///  Successive Approximation Register Analog to Digital Converter
    -            pub const APB_SARADC = @as(*volatile types.peripherals.APB_SARADC, @ptrFromInt(0x60040000));
    -            ///  Full-speed USB Serial/JTAG Controller
    -            pub const USB_DEVICE = @as(*volatile types.peripherals.USB_DEVICE, @ptrFromInt(0x60043000));
    -            ///  System
    -            pub const SYSTEM = @as(*volatile types.peripherals.SYSTEM, @ptrFromInt(0x600c0000));
    -            ///  Sensitive
    -            pub const SENSITIVE = @as(*volatile types.peripherals.SENSITIVE, @ptrFromInt(0x600c1000));
    -            ///  Interrupt Core
    -            pub const INTERRUPT_CORE0 = @as(*volatile types.peripherals.INTERRUPT_CORE0, @ptrFromInt(0x600c2000));
    -            ///  External Memory
    -            pub const EXTMEM = @as(*volatile types.peripherals.EXTMEM, @ptrFromInt(0x600c4000));
    -            ///  XTS-AES-128 Flash Encryption
    -            pub const XTS_AES = @as(*volatile types.peripherals.XTS_AES, @ptrFromInt(0x600cc000));
    -            ///  Debug Assist
    -            pub const ASSIST_DEBUG = @as(*volatile types.peripherals.ASSIST_DEBUG, @ptrFromInt(0x600ce000));
    -        };
    -    };
    -};
    -
    -pub const types = struct {
    -    pub const peripherals = struct {
    -        ///  AES (Advanced Encryption Standard) Accelerator
    -        pub const AES = extern struct {
    -            ///  Key material key_0 configure register
    -            KEY_0: mmio.Mmio(packed struct(u32) {
    -                ///  This bits stores key_0 that is a part of key material.
    -                KEY_0: u32,
    -            }),
    -            ///  Key material key_1 configure register
    -            KEY_1: mmio.Mmio(packed struct(u32) {
    -                ///  This bits stores key_1 that is a part of key material.
    -                KEY_1: u32,
    -            }),
    -            ///  Key material key_2 configure register
    -            KEY_2: mmio.Mmio(packed struct(u32) {
    -                ///  This bits stores key_2 that is a part of key material.
    -                KEY_2: u32,
    -            }),
    -            ///  Key material key_3 configure register
    -            KEY_3: mmio.Mmio(packed struct(u32) {
    -                ///  This bits stores key_3 that is a part of key material.
    -                KEY_3: u32,
    -            }),
    -            ///  Key material key_4 configure register
    -            KEY_4: mmio.Mmio(packed struct(u32) {
    -                ///  This bits stores key_4 that is a part of key material.
    -                KEY_4: u32,
    -            }),
    -            ///  Key material key_5 configure register
    -            KEY_5: mmio.Mmio(packed struct(u32) {
    -                ///  This bits stores key_5 that is a part of key material.
    -                KEY_5: u32,
    -            }),
    -            ///  Key material key_6 configure register
    -            KEY_6: mmio.Mmio(packed struct(u32) {
    -                ///  This bits stores key_6 that is a part of key material.
    -                KEY_6: u32,
    -            }),
    -            ///  Key material key_7 configure register
    -            KEY_7: mmio.Mmio(packed struct(u32) {
    -                ///  This bits stores key_7 that is a part of key material.
    -                KEY_7: u32,
    -            }),
    -            ///  source text material text_in_0 configure register
    -            TEXT_IN_0: mmio.Mmio(packed struct(u32) {
    -                ///  This bits stores text_in_0 that is a part of source text material.
    -                TEXT_IN_0: u32,
    -            }),
    -            ///  source text material text_in_1 configure register
    -            TEXT_IN_1: mmio.Mmio(packed struct(u32) {
    -                ///  This bits stores text_in_1 that is a part of source text material.
    -                TEXT_IN_1: u32,
    -            }),
    -            ///  source text material text_in_2 configure register
    -            TEXT_IN_2: mmio.Mmio(packed struct(u32) {
    -                ///  This bits stores text_in_2 that is a part of source text material.
    -                TEXT_IN_2: u32,
    -            }),
    -            ///  source text material text_in_3 configure register
    -            TEXT_IN_3: mmio.Mmio(packed struct(u32) {
    -                ///  This bits stores text_in_3 that is a part of source text material.
    -                TEXT_IN_3: u32,
    -            }),
    -            ///  result text material text_out_0 configure register
    -            TEXT_OUT_0: mmio.Mmio(packed struct(u32) {
    -                ///  This bits stores text_out_0 that is a part of result text material.
    -                TEXT_OUT_0: u32,
    -            }),
    -            ///  result text material text_out_1 configure register
    -            TEXT_OUT_1: mmio.Mmio(packed struct(u32) {
    -                ///  This bits stores text_out_1 that is a part of result text material.
    -                TEXT_OUT_1: u32,
    -            }),
    -            ///  result text material text_out_2 configure register
    -            TEXT_OUT_2: mmio.Mmio(packed struct(u32) {
    -                ///  This bits stores text_out_2 that is a part of result text material.
    -                TEXT_OUT_2: u32,
    -            }),
    -            ///  result text material text_out_3 configure register
    -            TEXT_OUT_3: mmio.Mmio(packed struct(u32) {
    -                ///  This bits stores text_out_3 that is a part of result text material.
    -                TEXT_OUT_3: u32,
    -            }),
    -            ///  AES Mode register
    -            MODE: mmio.Mmio(packed struct(u32) {
    -                ///  This bits decides which one operation mode will be used. 3'd0: AES-EN-128, 3'd1: AES-EN-192, 3'd2: AES-EN-256, 3'd4: AES-DE-128, 3'd5: AES-DE-192, 3'd6: AES-DE-256.
    -                MODE: u3,
    -                padding: u29,
    -            }),
    -            ///  AES Endian configure register
    -            ENDIAN: mmio.Mmio(packed struct(u32) {
    -                ///  endian. [1:0] key endian, [3:2] text_in endian or in_stream endian, [5:4] text_out endian or out_stream endian
    -                ENDIAN: u6,
    -                padding: u26,
    -            }),
    -            ///  AES trigger register
    -            TRIGGER: mmio.Mmio(packed struct(u32) {
    -                ///  Set this bit to start AES calculation.
    -                TRIGGER: u1,
    -                padding: u31,
    -            }),
    -            ///  AES state register
    -            STATE: mmio.Mmio(packed struct(u32) {
    -                ///  Those bits shows AES status. For typical AES, 0: idle, 1: busy. For DMA-AES, 0: idle, 1: busy, 2: calculation_done.
    -                STATE: u2,
    -                padding: u30,
    -            }),
    -            ///  The memory that stores initialization vector
    -            IV_MEM: [16]u8,
    -            ///  The memory that stores GCM hash subkey
    -            H_MEM: [16]u8,
    -            ///  The memory that stores J0
    -            J0_MEM: [16]u8,
    -            ///  The memory that stores T0
    -            T0_MEM: [16]u8,
    -            ///  DMA-AES working mode register
    -            DMA_ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  1'b0: typical AES working mode, 1'b1: DMA-AES working mode.
    -                DMA_ENABLE: u1,
    -                padding: u31,
    -            }),
    -            ///  AES cipher block mode register
    -            BLOCK_MODE: mmio.Mmio(packed struct(u32) {
    -                ///  Those bits decides which block mode will be used. 0x0: ECB, 0x1: CBC, 0x2: OFB, 0x3: CTR, 0x4: CFB-8, 0x5: CFB-128, 0x6: GCM, 0x7: reserved.
    -                BLOCK_MODE: u3,
    -                padding: u29,
    -            }),
    -            ///  AES block number register
    -            BLOCK_NUM: mmio.Mmio(packed struct(u32) {
    -                ///  Those bits stores the number of Plaintext/ciphertext block.
    -                BLOCK_NUM: u32,
    -            }),
    -            ///  Standard incrementing function configure register
    -            INC_SEL: mmio.Mmio(packed struct(u32) {
    -                ///  This bit decides the standard incrementing function. 0: INC32. 1: INC128.
    -                INC_SEL: u1,
    -                padding: u31,
    -            }),
    -            ///  Additional Authential Data block number register
    -            AAD_BLOCK_NUM: mmio.Mmio(packed struct(u32) {
    -                ///  Those bits stores the number of AAD block.
    -                AAD_BLOCK_NUM: u32,
    -            }),
    -            ///  AES remainder bit number register
    -            REMAINDER_BIT_NUM: mmio.Mmio(packed struct(u32) {
    -                ///  Those bits stores the number of remainder bit.
    -                REMAINDER_BIT_NUM: u7,
    -                padding: u25,
    -            }),
    -            ///  AES continue register
    -            CONTINUE: mmio.Mmio(packed struct(u32) {
    -                ///  Set this bit to continue GCM operation.
    -                CONTINUE: u1,
    -                padding: u31,
    -            }),
    -            ///  AES Interrupt clear register
    -            INT_CLEAR: mmio.Mmio(packed struct(u32) {
    -                ///  Set this bit to clear the AES interrupt.
    -                INT_CLEAR: u1,
    -                padding: u31,
    -            }),
    -            ///  AES Interrupt enable register
    -            INT_ENA: mmio.Mmio(packed struct(u32) {
    -                ///  Set this bit to enable interrupt that occurs when DMA-AES calculation is done.
    -                INT_ENA: u1,
    -                padding: u31,
    -            }),
    -            ///  AES version control register
    -            DATE: mmio.Mmio(packed struct(u32) {
    -                ///  This bits stores the version information of AES.
    -                DATE: u30,
    -                padding: u2,
    -            }),
    -            ///  AES-DMA exit config
    -            DMA_EXIT: mmio.Mmio(packed struct(u32) {
    -                ///  Set this register to leave calculation done stage. Recommend to use it after software finishes reading DMA's output buffer.
    -                DMA_EXIT: u1,
    -                padding: u31,
    -            }),
    -        };
    -
    -        ///  Advanced Peripheral Bus Controller
    -        pub const APB_CTRL = extern struct {
    -            ///  APB_CTRL_SYSCLK_CONF_REG
    -            SYSCLK_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  reg_pre_div_cnt
    -                PRE_DIV_CNT: u10,
    -                ///  reg_clk_320m_en
    -                CLK_320M_EN: u1,
    -                ///  reg_clk_en
    -                CLK_EN: u1,
    -                ///  reg_rst_tick_cnt
    -                RST_TICK_CNT: u1,
    -                padding: u19,
    -            }),
    -            ///  APB_CTRL_TICK_CONF_REG
    -            TICK_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  reg_xtal_tick_num
    -                XTAL_TICK_NUM: u8,
    -                ///  reg_ck8m_tick_num
    -                CK8M_TICK_NUM: u8,
    -                ///  reg_tick_enable
    -                TICK_ENABLE: u1,
    -                padding: u15,
    -            }),
    -            ///  APB_CTRL_CLK_OUT_EN_REG
    -            CLK_OUT_EN: mmio.Mmio(packed struct(u32) {
    -                ///  reg_clk20_oen
    -                CLK20_OEN: u1,
    -                ///  reg_clk22_oen
    -                CLK22_OEN: u1,
    -                ///  reg_clk44_oen
    -                CLK44_OEN: u1,
    -                ///  reg_clk_bb_oen
    -                CLK_BB_OEN: u1,
    -                ///  reg_clk80_oen
    -                CLK80_OEN: u1,
    -                ///  reg_clk160_oen
    -                CLK160_OEN: u1,
    -                ///  reg_clk_320m_oen
    -                CLK_320M_OEN: u1,
    -                ///  reg_clk_adc_inf_oen
    -                CLK_ADC_INF_OEN: u1,
    -                ///  reg_clk_dac_cpu_oen
    -                CLK_DAC_CPU_OEN: u1,
    -                ///  reg_clk40x_bb_oen
    -                CLK40X_BB_OEN: u1,
    -                ///  reg_clk_xtal_oen
    -                CLK_XTAL_OEN: u1,
    -                padding: u21,
    -            }),
    -            ///  APB_CTRL_WIFI_BB_CFG_REG
    -            WIFI_BB_CFG: mmio.Mmio(packed struct(u32) {
    -                ///  reg_wifi_bb_cfg
    -                WIFI_BB_CFG: u32,
    -            }),
    -            ///  APB_CTRL_WIFI_BB_CFG_2_REG
    -            WIFI_BB_CFG_2: mmio.Mmio(packed struct(u32) {
    -                ///  reg_wifi_bb_cfg_2
    -                WIFI_BB_CFG_2: u32,
    -            }),
    -            ///  APB_CTRL_WIFI_CLK_EN_REG
    -            WIFI_CLK_EN: mmio.Mmio(packed struct(u32) {
    -                ///  reg_wifi_clk_en
    -                WIFI_CLK_EN: u32,
    -            }),
    -            ///  APB_CTRL_WIFI_RST_EN_REG
    -            WIFI_RST_EN: mmio.Mmio(packed struct(u32) {
    -                ///  reg_wifi_rst
    -                WIFI_RST: u32,
    -            }),
    -            ///  APB_CTRL_HOST_INF_SEL_REG
    -            HOST_INF_SEL: mmio.Mmio(packed struct(u32) {
    -                ///  reg_peri_io_swap
    -                PERI_IO_SWAP: u8,
    -                padding: u24,
    -            }),
    -            ///  APB_CTRL_EXT_MEM_PMS_LOCK_REG
    -            EXT_MEM_PMS_LOCK: mmio.Mmio(packed struct(u32) {
    -                ///  reg_ext_mem_pms_lock
    -                EXT_MEM_PMS_LOCK: u1,
    -                padding: u31,
    -            }),
    -            reserved40: [4]u8,
    -            ///  APB_CTRL_FLASH_ACE0_ATTR_REG
    -            FLASH_ACE0_ATTR: mmio.Mmio(packed struct(u32) {
    -                ///  reg_flash_ace0_attr
    -                FLASH_ACE0_ATTR: u2,
    -                padding: u30,
    -            }),
    -            ///  APB_CTRL_FLASH_ACE1_ATTR_REG
    -            FLASH_ACE1_ATTR: mmio.Mmio(packed struct(u32) {
    -                ///  reg_flash_ace1_attr
    -                FLASH_ACE1_ATTR: u2,
    -                padding: u30,
    -            }),
    -            ///  APB_CTRL_FLASH_ACE2_ATTR_REG
    -            FLASH_ACE2_ATTR: mmio.Mmio(packed struct(u32) {
    -                ///  reg_flash_ace2_attr
    -                FLASH_ACE2_ATTR: u2,
    -                padding: u30,
    -            }),
    -            ///  APB_CTRL_FLASH_ACE3_ATTR_REG
    -            FLASH_ACE3_ATTR: mmio.Mmio(packed struct(u32) {
    -                ///  reg_flash_ace3_attr
    -                FLASH_ACE3_ATTR: u2,
    -                padding: u30,
    -            }),
    -            ///  APB_CTRL_FLASH_ACE0_ADDR_REG
    -            FLASH_ACE0_ADDR: mmio.Mmio(packed struct(u32) {
    -                ///  reg_flash_ace0_addr_s
    -                S: u32,
    -            }),
    -            ///  APB_CTRL_FLASH_ACE1_ADDR_REG
    -            FLASH_ACE1_ADDR: mmio.Mmio(packed struct(u32) {
    -                ///  reg_flash_ace1_addr_s
    -                S: u32,
    -            }),
    -            ///  APB_CTRL_FLASH_ACE2_ADDR_REG
    -            FLASH_ACE2_ADDR: mmio.Mmio(packed struct(u32) {
    -                ///  reg_flash_ace2_addr_s
    -                S: u32,
    -            }),
    -            ///  APB_CTRL_FLASH_ACE3_ADDR_REG
    -            FLASH_ACE3_ADDR: mmio.Mmio(packed struct(u32) {
    -                ///  reg_flash_ace3_addr_s
    -                S: u32,
    -            }),
    -            ///  APB_CTRL_FLASH_ACE0_SIZE_REG
    -            FLASH_ACE0_SIZE: mmio.Mmio(packed struct(u32) {
    -                ///  reg_flash_ace0_size
    -                FLASH_ACE0_SIZE: u13,
    -                padding: u19,
    -            }),
    -            ///  APB_CTRL_FLASH_ACE1_SIZE_REG
    -            FLASH_ACE1_SIZE: mmio.Mmio(packed struct(u32) {
    -                ///  reg_flash_ace1_size
    -                FLASH_ACE1_SIZE: u13,
    -                padding: u19,
    -            }),
    -            ///  APB_CTRL_FLASH_ACE2_SIZE_REG
    -            FLASH_ACE2_SIZE: mmio.Mmio(packed struct(u32) {
    -                ///  reg_flash_ace2_size
    -                FLASH_ACE2_SIZE: u13,
    -                padding: u19,
    -            }),
    -            ///  APB_CTRL_FLASH_ACE3_SIZE_REG
    -            FLASH_ACE3_SIZE: mmio.Mmio(packed struct(u32) {
    -                ///  reg_flash_ace3_size
    -                FLASH_ACE3_SIZE: u13,
    -                padding: u19,
    -            }),
    -            reserved136: [48]u8,
    -            ///  APB_CTRL_SPI_MEM_PMS_CTRL_REG
    -            SPI_MEM_PMS_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  reg_spi_mem_reject_int
    -                SPI_MEM_REJECT_INT: u1,
    -                ///  reg_spi_mem_reject_clr
    -                SPI_MEM_REJECT_CLR: u1,
    -                ///  reg_spi_mem_reject_cde
    -                SPI_MEM_REJECT_CDE: u5,
    -                padding: u25,
    -            }),
    -            ///  APB_CTRL_SPI_MEM_REJECT_ADDR_REG
    -            SPI_MEM_REJECT_ADDR: mmio.Mmio(packed struct(u32) {
    -                ///  reg_spi_mem_reject_addr
    -                SPI_MEM_REJECT_ADDR: u32,
    -            }),
    -            ///  APB_CTRL_SDIO_CTRL_REG
    -            SDIO_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  reg_sdio_win_access_en
    -                SDIO_WIN_ACCESS_EN: u1,
    -                padding: u31,
    -            }),
    -            ///  APB_CTRL_REDCY_SIG0_REG
    -            REDCY_SIG0: mmio.Mmio(packed struct(u32) {
    -                ///  reg_redcy_sig0
    -                REDCY_SIG0: u31,
    -                ///  reg_redcy_andor
    -                REDCY_ANDOR: u1,
    -            }),
    -            ///  APB_CTRL_REDCY_SIG1_REG
    -            REDCY_SIG1: mmio.Mmio(packed struct(u32) {
    -                ///  reg_redcy_sig1
    -                REDCY_SIG1: u31,
    -                ///  reg_redcy_nandor
    -                REDCY_NANDOR: u1,
    -            }),
    -            ///  APB_CTRL_FRONT_END_MEM_PD_REG
    -            FRONT_END_MEM_PD: mmio.Mmio(packed struct(u32) {
    -                ///  reg_agc_mem_force_pu
    -                AGC_MEM_FORCE_PU: u1,
    -                ///  reg_agc_mem_force_pd
    -                AGC_MEM_FORCE_PD: u1,
    -                ///  reg_pbus_mem_force_pu
    -                PBUS_MEM_FORCE_PU: u1,
    -                ///  reg_pbus_mem_force_pd
    -                PBUS_MEM_FORCE_PD: u1,
    -                ///  reg_dc_mem_force_pu
    -                DC_MEM_FORCE_PU: u1,
    -                ///  reg_dc_mem_force_pd
    -                DC_MEM_FORCE_PD: u1,
    -                padding: u26,
    -            }),
    -            ///  APB_CTRL_RETENTION_CTRL_REG
    -            RETENTION_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  reg_retention_link_addr
    -                RETENTION_LINK_ADDR: u27,
    -                ///  reg_nobypass_cpu_iso_rst
    -                NOBYPASS_CPU_ISO_RST: u1,
    -                padding: u4,
    -            }),
    -            ///  APB_CTRL_CLKGATE_FORCE_ON_REG
    -            CLKGATE_FORCE_ON: mmio.Mmio(packed struct(u32) {
    -                ///  reg_rom_clkgate_force_on
    -                ROM_CLKGATE_FORCE_ON: u2,
    -                ///  reg_sram_clkgate_force_on
    -                SRAM_CLKGATE_FORCE_ON: u4,
    -                padding: u26,
    -            }),
    -            ///  APB_CTRL_MEM_POWER_DOWN_REG
    -            MEM_POWER_DOWN: mmio.Mmio(packed struct(u32) {
    -                ///  reg_rom_power_down
    -                ROM_POWER_DOWN: u2,
    -                ///  reg_sram_power_down
    -                SRAM_POWER_DOWN: u4,
    -                padding: u26,
    -            }),
    -            ///  APB_CTRL_MEM_POWER_UP_REG
    -            MEM_POWER_UP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_rom_power_up
    -                ROM_POWER_UP: u2,
    -                ///  reg_sram_power_up
    -                SRAM_POWER_UP: u4,
    -                padding: u26,
    -            }),
    -            ///  APB_CTRL_RND_DATA_REG
    -            RND_DATA: mmio.Mmio(packed struct(u32) {
    -                ///  reg_rnd_data
    -                RND_DATA: u32,
    -            }),
    -            ///  APB_CTRL_PERI_BACKUP_CONFIG_REG
    -            PERI_BACKUP_CONFIG: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  reg_peri_backup_flow_err
    -                PERI_BACKUP_FLOW_ERR: u2,
    -                reserved4: u1,
    -                ///  reg_peri_backup_burst_limit
    -                PERI_BACKUP_BURST_LIMIT: u5,
    -                ///  reg_peri_backup_tout_thres
    -                PERI_BACKUP_TOUT_THRES: u10,
    -                ///  reg_peri_backup_size
    -                PERI_BACKUP_SIZE: u10,
    -                ///  reg_peri_backup_start
    -                PERI_BACKUP_START: u1,
    -                ///  reg_peri_backup_to_mem
    -                PERI_BACKUP_TO_MEM: u1,
    -                ///  reg_peri_backup_ena
    -                PERI_BACKUP_ENA: u1,
    -            }),
    -            ///  APB_CTRL_PERI_BACKUP_APB_ADDR_REG
    -            PERI_BACKUP_APB_ADDR: mmio.Mmio(packed struct(u32) {
    -                ///  reg_backup_apb_start_addr
    -                BACKUP_APB_START_ADDR: u32,
    -            }),
    -            ///  APB_CTRL_PERI_BACKUP_MEM_ADDR_REG
    -            PERI_BACKUP_MEM_ADDR: mmio.Mmio(packed struct(u32) {
    -                ///  reg_backup_mem_start_addr
    -                BACKUP_MEM_START_ADDR: u32,
    -            }),
    -            ///  APB_CTRL_PERI_BACKUP_INT_RAW_REG
    -            PERI_BACKUP_INT_RAW: mmio.Mmio(packed struct(u32) {
    -                ///  reg_peri_backup_done_int_raw
    -                PERI_BACKUP_DONE_INT_RAW: u1,
    -                ///  reg_peri_backup_err_int_raw
    -                PERI_BACKUP_ERR_INT_RAW: u1,
    -                padding: u30,
    -            }),
    -            ///  APB_CTRL_PERI_BACKUP_INT_ST_REG
    -            PERI_BACKUP_INT_ST: mmio.Mmio(packed struct(u32) {
    -                ///  reg_peri_backup_done_int_st
    -                PERI_BACKUP_DONE_INT_ST: u1,
    -                ///  reg_peri_backup_err_int_st
    -                PERI_BACKUP_ERR_INT_ST: u1,
    -                padding: u30,
    -            }),
    -            ///  APB_CTRL_PERI_BACKUP_INT_ENA_REG
    -            PERI_BACKUP_INT_ENA: mmio.Mmio(packed struct(u32) {
    -                ///  reg_peri_backup_done_int_ena
    -                PERI_BACKUP_DONE_INT_ENA: u1,
    -                ///  reg_peri_backup_err_int_ena
    -                PERI_BACKUP_ERR_INT_ENA: u1,
    -                padding: u30,
    -            }),
    -            reserved208: [4]u8,
    -            ///  APB_CTRL_PERI_BACKUP_INT_CLR_REG
    -            PERI_BACKUP_INT_CLR: mmio.Mmio(packed struct(u32) {
    -                ///  reg_peri_backup_done_int_clr
    -                PERI_BACKUP_DONE_INT_CLR: u1,
    -                ///  reg_peri_backup_err_int_clr
    -                PERI_BACKUP_ERR_INT_CLR: u1,
    -                padding: u30,
    -            }),
    -            reserved1020: [808]u8,
    -            ///  APB_CTRL_DATE_REG
    -            DATE: mmio.Mmio(packed struct(u32) {
    -                ///  reg_dateVersion control
    -                DATE: u32,
    -            }),
    -        };
    -
    -        ///  Successive Approximation Register Analog to Digital Converter
    -        pub const APB_SARADC = extern struct {
    -            ///  digital saradc configure register
    -            CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  select software enable saradc sample
    -                SARADC_START_FORCE: u1,
    -                ///  software enable saradc sample
    -                SARADC_START: u1,
    -                reserved6: u4,
    -                ///  SAR clock gated
    -                SARADC_SAR_CLK_GATED: u1,
    -                ///  SAR clock divider
    -                SARADC_SAR_CLK_DIV: u8,
    -                ///  0 ~ 15 means length 1 ~ 16
    -                SARADC_SAR_PATT_LEN: u3,
    -                reserved23: u5,
    -                ///  clear the pointer of pattern table for DIG ADC1 CTRL
    -                SARADC_SAR_PATT_P_CLEAR: u1,
    -                reserved27: u3,
    -                ///  force option to xpd sar blocks
    -                SARADC_XPD_SAR_FORCE: u2,
    -                reserved30: u1,
    -                ///  wait arbit signal stable after sar_done
    -                SARADC_WAIT_ARB_CYCLE: u2,
    -            }),
    -            ///  digital saradc configure register
    -            CTRL2: mmio.Mmio(packed struct(u32) {
    -                ///  enable max meas num
    -                SARADC_MEAS_NUM_LIMIT: u1,
    -                ///  max conversion number
    -                SARADC_MAX_MEAS_NUM: u8,
    -                ///  1: data to DIG ADC1 CTRL is inverted, otherwise not
    -                SARADC_SAR1_INV: u1,
    -                ///  1: data to DIG ADC2 CTRL is inverted, otherwise not
    -                SARADC_SAR2_INV: u1,
    -                reserved12: u1,
    -                ///  to set saradc timer target
    -                SARADC_TIMER_TARGET: u12,
    -                ///  to enable saradc timer trigger
    -                SARADC_TIMER_EN: u1,
    -                padding: u7,
    -            }),
    -            ///  digital saradc configure register
    -            FILTER_CTRL1: mmio.Mmio(packed struct(u32) {
    -                reserved26: u26,
    -                ///  Factor of saradc filter1
    -                APB_SARADC_FILTER_FACTOR1: u3,
    -                ///  Factor of saradc filter0
    -                APB_SARADC_FILTER_FACTOR0: u3,
    -            }),
    -            ///  digital saradc configure register
    -            FSM_WAIT: mmio.Mmio(packed struct(u32) {
    -                ///  saradc_xpd_wait
    -                SARADC_XPD_WAIT: u8,
    -                ///  saradc_rstb_wait
    -                SARADC_RSTB_WAIT: u8,
    -                ///  saradc_standby_wait
    -                SARADC_STANDBY_WAIT: u8,
    -                padding: u8,
    -            }),
    -            ///  digital saradc configure register
    -            SAR1_STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  saradc1 status about data and channel
    -                SARADC_SAR1_STATUS: u32,
    -            }),
    -            ///  digital saradc configure register
    -            SAR2_STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  saradc2 status about data and channel
    -                SARADC_SAR2_STATUS: u32,
    -            }),
    -            ///  digital saradc configure register
    -            SAR_PATT_TAB1: mmio.Mmio(packed struct(u32) {
    -                ///  item 0 ~ 3 for pattern table 1 (each item one byte)
    -                SARADC_SAR_PATT_TAB1: u24,
    -                padding: u8,
    -            }),
    -            ///  digital saradc configure register
    -            SAR_PATT_TAB2: mmio.Mmio(packed struct(u32) {
    -                ///  Item 4 ~ 7 for pattern table 1 (each item one byte)
    -                SARADC_SAR_PATT_TAB2: u24,
    -                padding: u8,
    -            }),
    -            ///  digital saradc configure register
    -            ONETIME_SAMPLE: mmio.Mmio(packed struct(u32) {
    -                reserved23: u23,
    -                ///  configure onetime atten
    -                SARADC_ONETIME_ATTEN: u2,
    -                ///  configure onetime channel
    -                SARADC_ONETIME_CHANNEL: u4,
    -                ///  trigger adc onetime sample
    -                SARADC_ONETIME_START: u1,
    -                ///  enable adc2 onetime sample
    -                SARADC2_ONETIME_SAMPLE: u1,
    -                ///  enable adc1 onetime sample
    -                SARADC1_ONETIME_SAMPLE: u1,
    -            }),
    -            ///  digital saradc configure register
    -            ARB_CTRL: mmio.Mmio(packed struct(u32) {
    -                reserved2: u2,
    -                ///  adc2 arbiter force to enableapb controller
    -                ADC_ARB_APB_FORCE: u1,
    -                ///  adc2 arbiter force to enable rtc controller
    -                ADC_ARB_RTC_FORCE: u1,
    -                ///  adc2 arbiter force to enable wifi controller
    -                ADC_ARB_WIFI_FORCE: u1,
    -                ///  adc2 arbiter force grant
    -                ADC_ARB_GRANT_FORCE: u1,
    -                ///  Set adc2 arbiterapb priority
    -                ADC_ARB_APB_PRIORITY: u2,
    -                ///  Set adc2 arbiter rtc priority
    -                ADC_ARB_RTC_PRIORITY: u2,
    -                ///  Set adc2 arbiter wifi priority
    -                ADC_ARB_WIFI_PRIORITY: u2,
    -                ///  adc2 arbiter uses fixed priority
    -                ADC_ARB_FIX_PRIORITY: u1,
    -                padding: u19,
    -            }),
    -            ///  digital saradc configure register
    -            FILTER_CTRL0: mmio.Mmio(packed struct(u32) {
    -                reserved18: u18,
    -                ///  configure filter1 to adc channel
    -                APB_SARADC_FILTER_CHANNEL1: u4,
    -                ///  configure filter0 to adc channel
    -                APB_SARADC_FILTER_CHANNEL0: u4,
    -                reserved31: u5,
    -                ///  enable apb_adc1_filter
    -                APB_SARADC_FILTER_RESET: u1,
    -            }),
    -            ///  digital saradc configure register
    -            SAR1DATA_STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  saradc1 data
    -                APB_SARADC1_DATA: u17,
    -                padding: u15,
    -            }),
    -            ///  digital saradc configure register
    -            SAR2DATA_STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  saradc2 data
    -                APB_SARADC2_DATA: u17,
    -                padding: u15,
    -            }),
    -            ///  digital saradc configure register
    -            THRES0_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  configure thres0 to adc channel
    -                APB_SARADC_THRES0_CHANNEL: u4,
    -                reserved5: u1,
    -                ///  saradc thres0 monitor thres
    -                APB_SARADC_THRES0_HIGH: u13,
    -                ///  saradc thres0 monitor thres
    -                APB_SARADC_THRES0_LOW: u13,
    -                padding: u1,
    -            }),
    -            ///  digital saradc configure register
    -            THRES1_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  configure thres1 to adc channel
    -                APB_SARADC_THRES1_CHANNEL: u4,
    -                reserved5: u1,
    -                ///  saradc thres1 monitor thres
    -                APB_SARADC_THRES1_HIGH: u13,
    -                ///  saradc thres1 monitor thres
    -                APB_SARADC_THRES1_LOW: u13,
    -                padding: u1,
    -            }),
    -            ///  digital saradc configure register
    -            THRES_CTRL: mmio.Mmio(packed struct(u32) {
    -                reserved27: u27,
    -                ///  enable thres to all channel
    -                APB_SARADC_THRES_ALL_EN: u1,
    -                reserved30: u2,
    -                ///  enable thres1
    -                APB_SARADC_THRES1_EN: u1,
    -                ///  enable thres0
    -                APB_SARADC_THRES0_EN: u1,
    -            }),
    -            ///  digital saradc int register
    -            INT_ENA: mmio.Mmio(packed struct(u32) {
    -                reserved26: u26,
    -                ///  saradc thres1 low interrupt enable
    -                APB_SARADC_THRES1_LOW_INT_ENA: u1,
    -                ///  saradc thres0 low interrupt enable
    -                APB_SARADC_THRES0_LOW_INT_ENA: u1,
    -                ///  saradc thres1 high interrupt enable
    -                APB_SARADC_THRES1_HIGH_INT_ENA: u1,
    -                ///  saradc thres0 high interrupt enable
    -                APB_SARADC_THRES0_HIGH_INT_ENA: u1,
    -                ///  saradc2 done interrupt enable
    -                APB_SARADC2_DONE_INT_ENA: u1,
    -                ///  saradc1 done interrupt enable
    -                APB_SARADC1_DONE_INT_ENA: u1,
    -            }),
    -            ///  digital saradc int register
    -            INT_RAW: mmio.Mmio(packed struct(u32) {
    -                reserved26: u26,
    -                ///  saradc thres1 low interrupt raw
    -                APB_SARADC_THRES1_LOW_INT_RAW: u1,
    -                ///  saradc thres0 low interrupt raw
    -                APB_SARADC_THRES0_LOW_INT_RAW: u1,
    -                ///  saradc thres1 high interrupt raw
    -                APB_SARADC_THRES1_HIGH_INT_RAW: u1,
    -                ///  saradc thres0 high interrupt raw
    -                APB_SARADC_THRES0_HIGH_INT_RAW: u1,
    -                ///  saradc2 done interrupt raw
    -                APB_SARADC2_DONE_INT_RAW: u1,
    -                ///  saradc1 done interrupt raw
    -                APB_SARADC1_DONE_INT_RAW: u1,
    -            }),
    -            ///  digital saradc int register
    -            INT_ST: mmio.Mmio(packed struct(u32) {
    -                reserved26: u26,
    -                ///  saradc thres1 low interrupt state
    -                APB_SARADC_THRES1_LOW_INT_ST: u1,
    -                ///  saradc thres0 low interrupt state
    -                APB_SARADC_THRES0_LOW_INT_ST: u1,
    -                ///  saradc thres1 high interrupt state
    -                APB_SARADC_THRES1_HIGH_INT_ST: u1,
    -                ///  saradc thres0 high interrupt state
    -                APB_SARADC_THRES0_HIGH_INT_ST: u1,
    -                ///  saradc2 done interrupt state
    -                APB_SARADC2_DONE_INT_ST: u1,
    -                ///  saradc1 done interrupt state
    -                APB_SARADC1_DONE_INT_ST: u1,
    -            }),
    -            ///  digital saradc int register
    -            INT_CLR: mmio.Mmio(packed struct(u32) {
    -                reserved26: u26,
    -                ///  saradc thres1 low interrupt clear
    -                APB_SARADC_THRES1_LOW_INT_CLR: u1,
    -                ///  saradc thres0 low interrupt clear
    -                APB_SARADC_THRES0_LOW_INT_CLR: u1,
    -                ///  saradc thres1 high interrupt clear
    -                APB_SARADC_THRES1_HIGH_INT_CLR: u1,
    -                ///  saradc thres0 high interrupt clear
    -                APB_SARADC_THRES0_HIGH_INT_CLR: u1,
    -                ///  saradc2 done interrupt clear
    -                APB_SARADC2_DONE_INT_CLR: u1,
    -                ///  saradc1 done interrupt clear
    -                APB_SARADC1_DONE_INT_CLR: u1,
    -            }),
    -            ///  digital saradc configure register
    -            DMA_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  the dma_in_suc_eof gen when sample cnt = spi_eof_num
    -                APB_ADC_EOF_NUM: u16,
    -                reserved30: u14,
    -                ///  reset_apb_adc_state
    -                APB_ADC_RESET_FSM: u1,
    -                ///  enable apb_adc use spi_dma
    -                APB_ADC_TRANS: u1,
    -            }),
    -            ///  digital saradc configure register
    -            CLKM_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  Integral I2S clock divider value
    -                CLKM_DIV_NUM: u8,
    -                ///  Fractional clock divider numerator value
    -                CLKM_DIV_B: u6,
    -                ///  Fractional clock divider denominator value
    -                CLKM_DIV_A: u6,
    -                ///  reg clk en
    -                CLK_EN: u1,
    -                ///  Set this bit to enable clk_apll
    -                CLK_SEL: u2,
    -                padding: u9,
    -            }),
    -            ///  digital tsens configure register
    -            APB_TSENS_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  temperature sensor data out
    -                TSENS_OUT: u8,
    -                reserved13: u5,
    -                ///  invert temperature sensor data
    -                TSENS_IN_INV: u1,
    -                ///  temperature sensor clock divider
    -                TSENS_CLK_DIV: u8,
    -                ///  temperature sensor power up
    -                TSENS_PU: u1,
    -                padding: u9,
    -            }),
    -            ///  digital tsens configure register
    -            TSENS_CTRL2: mmio.Mmio(packed struct(u32) {
    -                ///  the time that power up tsens need wait
    -                TSENS_XPD_WAIT: u12,
    -                ///  force power up tsens
    -                TSENS_XPD_FORCE: u2,
    -                ///  inv tsens clk
    -                TSENS_CLK_INV: u1,
    -                ///  tsens clk select
    -                TSENS_CLK_SEL: u1,
    -                padding: u16,
    -            }),
    -            ///  digital saradc configure register
    -            CALI: mmio.Mmio(packed struct(u32) {
    -                ///  saradc cali factor
    -                APB_SARADC_CALI_CFG: u17,
    -                padding: u15,
    -            }),
    -            reserved1020: [920]u8,
    -            ///  version
    -            CTRL_DATE: mmio.Mmio(packed struct(u32) {
    -                ///  version
    -                DATE: u32,
    -            }),
    -        };
    -
    -        ///  Debug Assist
    -        pub const ASSIST_DEBUG = extern struct {
    -            ///  ASSIST_DEBUG_C0RE_0_MONTR_ENA_REG
    -            C0RE_0_MONTR_ENA: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_area_dram0_0_rd_ena
    -                CORE_0_AREA_DRAM0_0_RD_ENA: u1,
    -                ///  reg_core_0_area_dram0_0_wr_ena
    -                CORE_0_AREA_DRAM0_0_WR_ENA: u1,
    -                ///  reg_core_0_area_dram0_1_rd_ena
    -                CORE_0_AREA_DRAM0_1_RD_ENA: u1,
    -                ///  reg_core_0_area_dram0_1_wr_ena
    -                CORE_0_AREA_DRAM0_1_WR_ENA: u1,
    -                ///  reg_core_0_area_pif_0_rd_ena
    -                CORE_0_AREA_PIF_0_RD_ENA: u1,
    -                ///  reg_core_0_area_pif_0_wr_ena
    -                CORE_0_AREA_PIF_0_WR_ENA: u1,
    -                ///  reg_core_0_area_pif_1_rd_ena
    -                CORE_0_AREA_PIF_1_RD_ENA: u1,
    -                ///  reg_core_0_area_pif_1_wr_ena
    -                CORE_0_AREA_PIF_1_WR_ENA: u1,
    -                ///  reg_core_0_sp_spill_min_ena
    -                CORE_0_SP_SPILL_MIN_ENA: u1,
    -                ///  reg_core_0_sp_spill_max_ena
    -                CORE_0_SP_SPILL_MAX_ENA: u1,
    -                ///  reg_core_0_iram0_exception_monitor_ena
    -                CORE_0_IRAM0_EXCEPTION_MONITOR_ENA: u1,
    -                ///  reg_core_0_dram0_exception_monitor_ena
    -                CORE_0_DRAM0_EXCEPTION_MONITOR_ENA: u1,
    -                padding: u20,
    -            }),
    -            ///  ASSIST_DEBUG_CORE_0_INTR_RAW_REG
    -            CORE_0_INTR_RAW: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_area_dram0_0_rd_raw
    -                CORE_0_AREA_DRAM0_0_RD_RAW: u1,
    -                ///  reg_core_0_area_dram0_0_wr_raw
    -                CORE_0_AREA_DRAM0_0_WR_RAW: u1,
    -                ///  reg_core_0_area_dram0_1_rd_raw
    -                CORE_0_AREA_DRAM0_1_RD_RAW: u1,
    -                ///  reg_core_0_area_dram0_1_wr_raw
    -                CORE_0_AREA_DRAM0_1_WR_RAW: u1,
    -                ///  reg_core_0_area_pif_0_rd_raw
    -                CORE_0_AREA_PIF_0_RD_RAW: u1,
    -                ///  reg_core_0_area_pif_0_wr_raw
    -                CORE_0_AREA_PIF_0_WR_RAW: u1,
    -                ///  reg_core_0_area_pif_1_rd_raw
    -                CORE_0_AREA_PIF_1_RD_RAW: u1,
    -                ///  reg_core_0_area_pif_1_wr_raw
    -                CORE_0_AREA_PIF_1_WR_RAW: u1,
    -                ///  reg_core_0_sp_spill_min_raw
    -                CORE_0_SP_SPILL_MIN_RAW: u1,
    -                ///  reg_core_0_sp_spill_max_raw
    -                CORE_0_SP_SPILL_MAX_RAW: u1,
    -                ///  reg_core_0_iram0_exception_monitor_raw
    -                CORE_0_IRAM0_EXCEPTION_MONITOR_RAW: u1,
    -                ///  reg_core_0_dram0_exception_monitor_raw
    -                CORE_0_DRAM0_EXCEPTION_MONITOR_RAW: u1,
    -                padding: u20,
    -            }),
    -            ///  ASSIST_DEBUG_CORE_0_INTR_ENA_REG
    -            CORE_0_INTR_ENA: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_area_dram0_0_rd_intr_ena
    -                CORE_0_AREA_DRAM0_0_RD_INTR_ENA: u1,
    -                ///  reg_core_0_area_dram0_0_wr_intr_ena
    -                CORE_0_AREA_DRAM0_0_WR_INTR_ENA: u1,
    -                ///  reg_core_0_area_dram0_1_rd_intr_ena
    -                CORE_0_AREA_DRAM0_1_RD_INTR_ENA: u1,
    -                ///  reg_core_0_area_dram0_1_wr_intr_ena
    -                CORE_0_AREA_DRAM0_1_WR_INTR_ENA: u1,
    -                ///  reg_core_0_area_pif_0_rd_intr_ena
    -                CORE_0_AREA_PIF_0_RD_INTR_ENA: u1,
    -                ///  reg_core_0_area_pif_0_wr_intr_ena
    -                CORE_0_AREA_PIF_0_WR_INTR_ENA: u1,
    -                ///  reg_core_0_area_pif_1_rd_intr_ena
    -                CORE_0_AREA_PIF_1_RD_INTR_ENA: u1,
    -                ///  reg_core_0_area_pif_1_wr_intr_ena
    -                CORE_0_AREA_PIF_1_WR_INTR_ENA: u1,
    -                ///  reg_core_0_sp_spill_min_intr_ena
    -                CORE_0_SP_SPILL_MIN_INTR_ENA: u1,
    -                ///  reg_core_0_sp_spill_max_intr_ena
    -                CORE_0_SP_SPILL_MAX_INTR_ENA: u1,
    -                ///  reg_core_0_iram0_exception_monitor_ena
    -                CORE_0_IRAM0_EXCEPTION_MONITOR_RLS: u1,
    -                ///  reg_core_0_dram0_exception_monitor_ena
    -                CORE_0_DRAM0_EXCEPTION_MONITOR_RLS: u1,
    -                padding: u20,
    -            }),
    -            ///  ASSIST_DEBUG_CORE_0_INTR_CLR_REG
    -            CORE_0_INTR_CLR: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_area_dram0_0_rd_clr
    -                CORE_0_AREA_DRAM0_0_RD_CLR: u1,
    -                ///  reg_core_0_area_dram0_0_wr_clr
    -                CORE_0_AREA_DRAM0_0_WR_CLR: u1,
    -                ///  reg_core_0_area_dram0_1_rd_clr
    -                CORE_0_AREA_DRAM0_1_RD_CLR: u1,
    -                ///  reg_core_0_area_dram0_1_wr_clr
    -                CORE_0_AREA_DRAM0_1_WR_CLR: u1,
    -                ///  reg_core_0_area_pif_0_rd_clr
    -                CORE_0_AREA_PIF_0_RD_CLR: u1,
    -                ///  reg_core_0_area_pif_0_wr_clr
    -                CORE_0_AREA_PIF_0_WR_CLR: u1,
    -                ///  reg_core_0_area_pif_1_rd_clr
    -                CORE_0_AREA_PIF_1_RD_CLR: u1,
    -                ///  reg_core_0_area_pif_1_wr_clr
    -                CORE_0_AREA_PIF_1_WR_CLR: u1,
    -                ///  reg_core_0_sp_spill_min_clr
    -                CORE_0_SP_SPILL_MIN_CLR: u1,
    -                ///  reg_core_0_sp_spill_max_clr
    -                CORE_0_SP_SPILL_MAX_CLR: u1,
    -                ///  reg_core_0_iram0_exception_monitor_clr
    -                CORE_0_IRAM0_EXCEPTION_MONITOR_CLR: u1,
    -                ///  reg_core_0_dram0_exception_monitor_clr
    -                CORE_0_DRAM0_EXCEPTION_MONITOR_CLR: u1,
    -                padding: u20,
    -            }),
    -            ///  ASSIST_DEBUG_CORE_0_AREA_DRAM0_0_MIN_REG
    -            CORE_0_AREA_DRAM0_0_MIN: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_area_dram0_0_min
    -                CORE_0_AREA_DRAM0_0_MIN: u32,
    -            }),
    -            ///  ASSIST_DEBUG_CORE_0_AREA_DRAM0_0_MAX_REG
    -            CORE_0_AREA_DRAM0_0_MAX: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_area_dram0_0_max
    -                CORE_0_AREA_DRAM0_0_MAX: u32,
    -            }),
    -            ///  ASSIST_DEBUG_CORE_0_AREA_DRAM0_1_MIN_REG
    -            CORE_0_AREA_DRAM0_1_MIN: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_area_dram0_1_min
    -                CORE_0_AREA_DRAM0_1_MIN: u32,
    -            }),
    -            ///  ASSIST_DEBUG_CORE_0_AREA_DRAM0_1_MAX_REG
    -            CORE_0_AREA_DRAM0_1_MAX: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_area_dram0_1_max
    -                CORE_0_AREA_DRAM0_1_MAX: u32,
    -            }),
    -            ///  ASSIST_DEBUG_CORE_0_AREA_PIF_0_MIN_REG
    -            CORE_0_AREA_PIF_0_MIN: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_area_pif_0_min
    -                CORE_0_AREA_PIF_0_MIN: u32,
    -            }),
    -            ///  ASSIST_DEBUG_CORE_0_AREA_PIF_0_MAX_REG
    -            CORE_0_AREA_PIF_0_MAX: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_area_pif_0_max
    -                CORE_0_AREA_PIF_0_MAX: u32,
    -            }),
    -            ///  ASSIST_DEBUG_CORE_0_AREA_PIF_1_MIN_REG
    -            CORE_0_AREA_PIF_1_MIN: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_area_pif_1_min
    -                CORE_0_AREA_PIF_1_MIN: u32,
    -            }),
    -            ///  ASSIST_DEBUG_CORE_0_AREA_PIF_1_MAX_REG
    -            CORE_0_AREA_PIF_1_MAX: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_area_pif_1_max
    -                CORE_0_AREA_PIF_1_MAX: u32,
    -            }),
    -            ///  ASSIST_DEBUG_CORE_0_AREA_PC_REG
    -            CORE_0_AREA_PC: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_area_pc
    -                CORE_0_AREA_PC: u32,
    -            }),
    -            ///  ASSIST_DEBUG_CORE_0_AREA_SP_REG
    -            CORE_0_AREA_SP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_area_sp
    -                CORE_0_AREA_SP: u32,
    -            }),
    -            ///  ASSIST_DEBUG_CORE_0_SP_MIN_REG
    -            CORE_0_SP_MIN: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_sp_min
    -                CORE_0_SP_MIN: u32,
    -            }),
    -            ///  ASSIST_DEBUG_CORE_0_SP_MAX_REG
    -            CORE_0_SP_MAX: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_sp_max
    -                CORE_0_SP_MAX: u32,
    -            }),
    -            ///  ASSIST_DEBUG_CORE_0_SP_PC_REG
    -            CORE_0_SP_PC: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_sp_pc
    -                CORE_0_SP_PC: u32,
    -            }),
    -            ///  ASSIST_DEBUG_CORE_0_RCD_EN_REG
    -            CORE_0_RCD_EN: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_rcd_recorden
    -                CORE_0_RCD_RECORDEN: u1,
    -                ///  reg_core_0_rcd_pdebugen
    -                CORE_0_RCD_PDEBUGEN: u1,
    -                padding: u30,
    -            }),
    -            ///  ASSIST_DEBUG_CORE_0_RCD_PDEBUGPC_REG
    -            CORE_0_RCD_PDEBUGPC: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_rcd_pdebugpc
    -                CORE_0_RCD_PDEBUGPC: u32,
    -            }),
    -            ///  ASSIST_DEBUG_CORE_0_RCD_PDEBUGSP_REG
    -            CORE_0_RCD_PDEBUGSP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_rcd_pdebugsp
    -                CORE_0_RCD_PDEBUGSP: u32,
    -            }),
    -            ///  ASSIST_DEBUG_CORE_0_RCD_PDEBUGSP_REG
    -            CORE_0_IRAM0_EXCEPTION_MONITOR_0: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_iram0_recording_addr_0
    -                CORE_0_IRAM0_RECORDING_ADDR_0: u24,
    -                ///  reg_core_0_iram0_recording_wr_0
    -                CORE_0_IRAM0_RECORDING_WR_0: u1,
    -                ///  reg_core_0_iram0_recording_loadstore_0
    -                CORE_0_IRAM0_RECORDING_LOADSTORE_0: u1,
    -                padding: u6,
    -            }),
    -            ///  ASSIST_DEBUG_CORE_0_IRAM0_EXCEPTION_MONITOR_1_REG
    -            CORE_0_IRAM0_EXCEPTION_MONITOR_1: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_iram0_recording_addr_1
    -                CORE_0_IRAM0_RECORDING_ADDR_1: u24,
    -                ///  reg_core_0_iram0_recording_wr_1
    -                CORE_0_IRAM0_RECORDING_WR_1: u1,
    -                ///  reg_core_0_iram0_recording_loadstore_1
    -                CORE_0_IRAM0_RECORDING_LOADSTORE_1: u1,
    -                padding: u6,
    -            }),
    -            ///  ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_0_REG
    -            CORE_0_DRAM0_EXCEPTION_MONITOR_0: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_dram0_recording_addr_0
    -                CORE_0_DRAM0_RECORDING_ADDR_0: u24,
    -                ///  reg_core_0_dram0_recording_wr_0
    -                CORE_0_DRAM0_RECORDING_WR_0: u1,
    -                ///  reg_core_0_dram0_recording_byteen_0
    -                CORE_0_DRAM0_RECORDING_BYTEEN_0: u4,
    -                padding: u3,
    -            }),
    -            ///  ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_1_REG
    -            CORE_0_DRAM0_EXCEPTION_MONITOR_1: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_dram0_recording_pc_0
    -                CORE_0_DRAM0_RECORDING_PC_0: u32,
    -            }),
    -            ///  ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_1_REG
    -            CORE_0_DRAM0_EXCEPTION_MONITOR_2: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_dram0_recording_addr_1
    -                CORE_0_DRAM0_RECORDING_ADDR_1: u24,
    -                ///  reg_core_0_dram0_recording_wr_1
    -                CORE_0_DRAM0_RECORDING_WR_1: u1,
    -                ///  reg_core_0_dram0_recording_byteen_1
    -                CORE_0_DRAM0_RECORDING_BYTEEN_1: u4,
    -                padding: u3,
    -            }),
    -            ///  ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_3_REG
    -            CORE_0_DRAM0_EXCEPTION_MONITOR_3: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_dram0_recording_pc_1
    -                CORE_0_DRAM0_RECORDING_PC_1: u32,
    -            }),
    -            ///  ASSIST_DEBUG_CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_0_REG
    -            CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_0: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_x_iram0_dram0_limit_cycle_0
    -                CORE_X_IRAM0_DRAM0_LIMIT_CYCLE_0: u20,
    -                padding: u12,
    -            }),
    -            ///  ASSIST_DEBUG_CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_1_REG
    -            CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_1: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_x_iram0_dram0_limit_cycle_1
    -                CORE_X_IRAM0_DRAM0_LIMIT_CYCLE_1: u20,
    -                padding: u12,
    -            }),
    -            ///  ASSIST_DEBUG_LOG_SETTING
    -            LOG_SETTING: mmio.Mmio(packed struct(u32) {
    -                ///  reg_log_ena
    -                LOG_ENA: u3,
    -                ///  reg_log_mode
    -                LOG_MODE: u4,
    -                ///  reg_log_mem_loop_enable
    -                LOG_MEM_LOOP_ENABLE: u1,
    -                padding: u24,
    -            }),
    -            ///  ASSIST_DEBUG_LOG_DATA_0_REG
    -            LOG_DATA_0: mmio.Mmio(packed struct(u32) {
    -                ///  reg_log_data_0
    -                LOG_DATA_0: u32,
    -            }),
    -            ///  ASSIST_DEBUG_LOG_DATA_MASK_REG
    -            LOG_DATA_MASK: mmio.Mmio(packed struct(u32) {
    -                ///  reg_log_data_size
    -                LOG_DATA_SIZE: u16,
    -                padding: u16,
    -            }),
    -            ///  ASSIST_DEBUG_LOG_MIN_REG
    -            LOG_MIN: mmio.Mmio(packed struct(u32) {
    -                ///  reg_log_min
    -                LOG_MIN: u32,
    -            }),
    -            ///  ASSIST_DEBUG_LOG_MAX_REG
    -            LOG_MAX: mmio.Mmio(packed struct(u32) {
    -                ///  reg_log_max
    -                LOG_MAX: u32,
    -            }),
    -            ///  ASSIST_DEBUG_LOG_MEM_START_REG
    -            LOG_MEM_START: mmio.Mmio(packed struct(u32) {
    -                ///  reg_log_mem_start
    -                LOG_MEM_START: u32,
    -            }),
    -            ///  ASSIST_DEBUG_LOG_MEM_END_REG
    -            LOG_MEM_END: mmio.Mmio(packed struct(u32) {
    -                ///  reg_log_mem_end
    -                LOG_MEM_END: u32,
    -            }),
    -            ///  ASSIST_DEBUG_LOG_MEM_WRITING_ADDR_REG
    -            LOG_MEM_WRITING_ADDR: mmio.Mmio(packed struct(u32) {
    -                ///  reg_log_mem_writing_addr
    -                LOG_MEM_WRITING_ADDR: u32,
    -            }),
    -            ///  ASSIST_DEBUG_LOG_MEM_FULL_FLAG_REG
    -            LOG_MEM_FULL_FLAG: mmio.Mmio(packed struct(u32) {
    -                ///  reg_log_mem_full_flag
    -                LOG_MEM_FULL_FLAG: u1,
    -                ///  reg_clr_log_mem_full_flag
    -                CLR_LOG_MEM_FULL_FLAG: u1,
    -                padding: u30,
    -            }),
    -            ///  ASSIST_DEBUG_C0RE_0_LASTPC_BEFORE_EXCEPTION
    -            C0RE_0_LASTPC_BEFORE_EXCEPTION: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_lastpc_before_exc
    -                CORE_0_LASTPC_BEFORE_EXC: u32,
    -            }),
    -            ///  ASSIST_DEBUG_C0RE_0_DEBUG_MODE
    -            C0RE_0_DEBUG_MODE: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core_0_debug_mode
    -                CORE_0_DEBUG_MODE: u1,
    -                ///  reg_core_0_debug_module_active
    -                CORE_0_DEBUG_MODULE_ACTIVE: u1,
    -                padding: u30,
    -            }),
    -            reserved508: [352]u8,
    -            ///  ASSIST_DEBUG_DATE_REG
    -            DATE: mmio.Mmio(packed struct(u32) {
    -                ///  reg_assist_debug_date
    -                ASSIST_DEBUG_DATE: u28,
    -                padding: u4,
    -            }),
    -        };
    -
    -        ///  DMA (Direct Memory Access) Controller
    -        pub const DMA = extern struct {
    -            ///  DMA_INT_RAW_CH0_REG.
    -            INT_RAW_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 0.
    -                IN_DONE_CH0_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 0. For UHCI0, the raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received and no data error is detected for Rx channel 0.
    -                IN_SUC_EOF_CH0_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when data error is detected only in the case that the peripheral is UHCI0 for Rx channel 0. For other peripherals, this raw interrupt is reserved.
    -                IN_ERR_EOF_CH0_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been transmitted to peripherals for Tx channel 0.
    -                OUT_DONE_CH0_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been read from memory for Tx channel 0.
    -                OUT_EOF_CH0_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when detecting inlink descriptor error, including owner error, the second and third word error of inlink descriptor for Rx channel 0.
    -                IN_DSCR_ERR_CH0_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when detecting outlink descriptor error, including owner error, the second and third word error of outlink descriptor for Tx channel 0.
    -                OUT_DSCR_ERR_CH0_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when Rx buffer pointed by inlink is full and receiving data is not completed, but there is no more inlink for Rx channel 0.
    -                IN_DSCR_EMPTY_CH0_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when data corresponding a outlink (includes one link descriptor or few link descriptors) is transmitted out for Tx channel 0.
    -                OUT_TOTAL_EOF_CH0_INT_RAW: u1,
    -                ///  This raw interrupt bit turns to high level when level 1 fifo of Rx channel 0 is overflow.
    -                INFIFO_OVF_CH0_INT_RAW: u1,
    -                ///  This raw interrupt bit turns to high level when level 1 fifo of Rx channel 0 is underflow.
    -                INFIFO_UDF_CH0_INT_RAW: u1,
    -                ///  This raw interrupt bit turns to high level when level 1 fifo of Tx channel 0 is overflow.
    -                OUTFIFO_OVF_CH0_INT_RAW: u1,
    -                ///  This raw interrupt bit turns to high level when level 1 fifo of Tx channel 0 is underflow.
    -                OUTFIFO_UDF_CH0_INT_RAW: u1,
    -                padding: u19,
    -            }),
    -            ///  DMA_INT_ST_CH0_REG.
    -            INT_ST_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  The raw interrupt status bit for the IN_DONE_CH_INT interrupt.
    -                IN_DONE_CH0_INT_ST: u1,
    -                ///  The raw interrupt status bit for the IN_SUC_EOF_CH_INT interrupt.
    -                IN_SUC_EOF_CH0_INT_ST: u1,
    -                ///  The raw interrupt status bit for the IN_ERR_EOF_CH_INT interrupt.
    -                IN_ERR_EOF_CH0_INT_ST: u1,
    -                ///  The raw interrupt status bit for the OUT_DONE_CH_INT interrupt.
    -                OUT_DONE_CH0_INT_ST: u1,
    -                ///  The raw interrupt status bit for the OUT_EOF_CH_INT interrupt.
    -                OUT_EOF_CH0_INT_ST: u1,
    -                ///  The raw interrupt status bit for the IN_DSCR_ERR_CH_INT interrupt.
    -                IN_DSCR_ERR_CH0_INT_ST: u1,
    -                ///  The raw interrupt status bit for the OUT_DSCR_ERR_CH_INT interrupt.
    -                OUT_DSCR_ERR_CH0_INT_ST: u1,
    -                ///  The raw interrupt status bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    -                IN_DSCR_EMPTY_CH0_INT_ST: u1,
    -                ///  The raw interrupt status bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    -                OUT_TOTAL_EOF_CH0_INT_ST: u1,
    -                ///  The raw interrupt status bit for the INFIFO_OVF_L1_CH_INT interrupt.
    -                INFIFO_OVF_CH0_INT_ST: u1,
    -                ///  The raw interrupt status bit for the INFIFO_UDF_L1_CH_INT interrupt.
    -                INFIFO_UDF_CH0_INT_ST: u1,
    -                ///  The raw interrupt status bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    -                OUTFIFO_OVF_CH0_INT_ST: u1,
    -                ///  The raw interrupt status bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    -                OUTFIFO_UDF_CH0_INT_ST: u1,
    -                padding: u19,
    -            }),
    -            ///  DMA_INT_ENA_CH0_REG.
    -            INT_ENA_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  The interrupt enable bit for the IN_DONE_CH_INT interrupt.
    -                IN_DONE_CH0_INT_ENA: u1,
    -                ///  The interrupt enable bit for the IN_SUC_EOF_CH_INT interrupt.
    -                IN_SUC_EOF_CH0_INT_ENA: u1,
    -                ///  The interrupt enable bit for the IN_ERR_EOF_CH_INT interrupt.
    -                IN_ERR_EOF_CH0_INT_ENA: u1,
    -                ///  The interrupt enable bit for the OUT_DONE_CH_INT interrupt.
    -                OUT_DONE_CH0_INT_ENA: u1,
    -                ///  The interrupt enable bit for the OUT_EOF_CH_INT interrupt.
    -                OUT_EOF_CH0_INT_ENA: u1,
    -                ///  The interrupt enable bit for the IN_DSCR_ERR_CH_INT interrupt.
    -                IN_DSCR_ERR_CH0_INT_ENA: u1,
    -                ///  The interrupt enable bit for the OUT_DSCR_ERR_CH_INT interrupt.
    -                OUT_DSCR_ERR_CH0_INT_ENA: u1,
    -                ///  The interrupt enable bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    -                IN_DSCR_EMPTY_CH0_INT_ENA: u1,
    -                ///  The interrupt enable bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    -                OUT_TOTAL_EOF_CH0_INT_ENA: u1,
    -                ///  The interrupt enable bit for the INFIFO_OVF_L1_CH_INT interrupt.
    -                INFIFO_OVF_CH0_INT_ENA: u1,
    -                ///  The interrupt enable bit for the INFIFO_UDF_L1_CH_INT interrupt.
    -                INFIFO_UDF_CH0_INT_ENA: u1,
    -                ///  The interrupt enable bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    -                OUTFIFO_OVF_CH0_INT_ENA: u1,
    -                ///  The interrupt enable bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    -                OUTFIFO_UDF_CH0_INT_ENA: u1,
    -                padding: u19,
    -            }),
    -            ///  DMA_INT_CLR_CH0_REG.
    -            INT_CLR_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  Set this bit to clear the IN_DONE_CH_INT interrupt.
    -                IN_DONE_CH0_INT_CLR: u1,
    -                ///  Set this bit to clear the IN_SUC_EOF_CH_INT interrupt.
    -                IN_SUC_EOF_CH0_INT_CLR: u1,
    -                ///  Set this bit to clear the IN_ERR_EOF_CH_INT interrupt.
    -                IN_ERR_EOF_CH0_INT_CLR: u1,
    -                ///  Set this bit to clear the OUT_DONE_CH_INT interrupt.
    -                OUT_DONE_CH0_INT_CLR: u1,
    -                ///  Set this bit to clear the OUT_EOF_CH_INT interrupt.
    -                OUT_EOF_CH0_INT_CLR: u1,
    -                ///  Set this bit to clear the IN_DSCR_ERR_CH_INT interrupt.
    -                IN_DSCR_ERR_CH0_INT_CLR: u1,
    -                ///  Set this bit to clear the OUT_DSCR_ERR_CH_INT interrupt.
    -                OUT_DSCR_ERR_CH0_INT_CLR: u1,
    -                ///  Set this bit to clear the IN_DSCR_EMPTY_CH_INT interrupt.
    -                IN_DSCR_EMPTY_CH0_INT_CLR: u1,
    -                ///  Set this bit to clear the OUT_TOTAL_EOF_CH_INT interrupt.
    -                OUT_TOTAL_EOF_CH0_INT_CLR: u1,
    -                ///  Set this bit to clear the INFIFO_OVF_L1_CH_INT interrupt.
    -                INFIFO_OVF_CH0_INT_CLR: u1,
    -                ///  Set this bit to clear the INFIFO_UDF_L1_CH_INT interrupt.
    -                INFIFO_UDF_CH0_INT_CLR: u1,
    -                ///  Set this bit to clear the OUTFIFO_OVF_L1_CH_INT interrupt.
    -                OUTFIFO_OVF_CH0_INT_CLR: u1,
    -                ///  Set this bit to clear the OUTFIFO_UDF_L1_CH_INT interrupt.
    -                OUTFIFO_UDF_CH0_INT_CLR: u1,
    -                padding: u19,
    -            }),
    -            ///  DMA_INT_RAW_CH1_REG.
    -            INT_RAW_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 1.
    -                IN_DONE_CH1_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 1. For UHCI0, the raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received and no data error is detected for Rx channel 1.
    -                IN_SUC_EOF_CH1_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when data error is detected only in the case that the peripheral is UHCI0 for Rx channel 1. For other peripherals, this raw interrupt is reserved.
    -                IN_ERR_EOF_CH1_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been transmitted to peripherals for Tx channel 1.
    -                OUT_DONE_CH1_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been read from memory for Tx channel 1.
    -                OUT_EOF_CH1_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when detecting inlink descriptor error, including owner error, the second and third word error of inlink descriptor for Rx channel 1.
    -                IN_DSCR_ERR_CH1_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when detecting outlink descriptor error, including owner error, the second and third word error of outlink descriptor for Tx channel 1.
    -                OUT_DSCR_ERR_CH1_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when Rx buffer pointed by inlink is full and receiving data is not completed, but there is no more inlink for Rx channel 1.
    -                IN_DSCR_EMPTY_CH1_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when data corresponding a outlink (includes one link descriptor or few link descriptors) is transmitted out for Tx channel 1.
    -                OUT_TOTAL_EOF_CH1_INT_RAW: u1,
    -                ///  This raw interrupt bit turns to high level when level 1 fifo of Rx channel 1 is overflow.
    -                INFIFO_OVF_CH1_INT_RAW: u1,
    -                ///  This raw interrupt bit turns to high level when level 1 fifo of Rx channel 1 is underflow.
    -                INFIFO_UDF_CH1_INT_RAW: u1,
    -                ///  This raw interrupt bit turns to high level when level 1 fifo of Tx channel 1 is overflow.
    -                OUTFIFO_OVF_CH1_INT_RAW: u1,
    -                ///  This raw interrupt bit turns to high level when level 1 fifo of Tx channel 1 is underflow.
    -                OUTFIFO_UDF_CH1_INT_RAW: u1,
    -                padding: u19,
    -            }),
    -            ///  DMA_INT_ST_CH1_REG.
    -            INT_ST_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  The raw interrupt status bit for the IN_DONE_CH_INT interrupt.
    -                IN_DONE_CH1_INT_ST: u1,
    -                ///  The raw interrupt status bit for the IN_SUC_EOF_CH_INT interrupt.
    -                IN_SUC_EOF_CH1_INT_ST: u1,
    -                ///  The raw interrupt status bit for the IN_ERR_EOF_CH_INT interrupt.
    -                IN_ERR_EOF_CH1_INT_ST: u1,
    -                ///  The raw interrupt status bit for the OUT_DONE_CH_INT interrupt.
    -                OUT_DONE_CH1_INT_ST: u1,
    -                ///  The raw interrupt status bit for the OUT_EOF_CH_INT interrupt.
    -                OUT_EOF_CH1_INT_ST: u1,
    -                ///  The raw interrupt status bit for the IN_DSCR_ERR_CH_INT interrupt.
    -                IN_DSCR_ERR_CH1_INT_ST: u1,
    -                ///  The raw interrupt status bit for the OUT_DSCR_ERR_CH_INT interrupt.
    -                OUT_DSCR_ERR_CH1_INT_ST: u1,
    -                ///  The raw interrupt status bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    -                IN_DSCR_EMPTY_CH1_INT_ST: u1,
    -                ///  The raw interrupt status bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    -                OUT_TOTAL_EOF_CH1_INT_ST: u1,
    -                ///  The raw interrupt status bit for the INFIFO_OVF_L1_CH_INT interrupt.
    -                INFIFO_OVF_CH1_INT_ST: u1,
    -                ///  The raw interrupt status bit for the INFIFO_UDF_L1_CH_INT interrupt.
    -                INFIFO_UDF_CH1_INT_ST: u1,
    -                ///  The raw interrupt status bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    -                OUTFIFO_OVF_CH1_INT_ST: u1,
    -                ///  The raw interrupt status bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    -                OUTFIFO_UDF_CH1_INT_ST: u1,
    -                padding: u19,
    -            }),
    -            ///  DMA_INT_ENA_CH1_REG.
    -            INT_ENA_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  The interrupt enable bit for the IN_DONE_CH_INT interrupt.
    -                IN_DONE_CH1_INT_ENA: u1,
    -                ///  The interrupt enable bit for the IN_SUC_EOF_CH_INT interrupt.
    -                IN_SUC_EOF_CH1_INT_ENA: u1,
    -                ///  The interrupt enable bit for the IN_ERR_EOF_CH_INT interrupt.
    -                IN_ERR_EOF_CH1_INT_ENA: u1,
    -                ///  The interrupt enable bit for the OUT_DONE_CH_INT interrupt.
    -                OUT_DONE_CH1_INT_ENA: u1,
    -                ///  The interrupt enable bit for the OUT_EOF_CH_INT interrupt.
    -                OUT_EOF_CH1_INT_ENA: u1,
    -                ///  The interrupt enable bit for the IN_DSCR_ERR_CH_INT interrupt.
    -                IN_DSCR_ERR_CH1_INT_ENA: u1,
    -                ///  The interrupt enable bit for the OUT_DSCR_ERR_CH_INT interrupt.
    -                OUT_DSCR_ERR_CH1_INT_ENA: u1,
    -                ///  The interrupt enable bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    -                IN_DSCR_EMPTY_CH1_INT_ENA: u1,
    -                ///  The interrupt enable bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    -                OUT_TOTAL_EOF_CH1_INT_ENA: u1,
    -                ///  The interrupt enable bit for the INFIFO_OVF_L1_CH_INT interrupt.
    -                INFIFO_OVF_CH1_INT_ENA: u1,
    -                ///  The interrupt enable bit for the INFIFO_UDF_L1_CH_INT interrupt.
    -                INFIFO_UDF_CH1_INT_ENA: u1,
    -                ///  The interrupt enable bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    -                OUTFIFO_OVF_CH1_INT_ENA: u1,
    -                ///  The interrupt enable bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    -                OUTFIFO_UDF_CH1_INT_ENA: u1,
    -                padding: u19,
    -            }),
    -            ///  DMA_INT_CLR_CH1_REG.
    -            INT_CLR_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  Set this bit to clear the IN_DONE_CH_INT interrupt.
    -                IN_DONE_CH1_INT_CLR: u1,
    -                ///  Set this bit to clear the IN_SUC_EOF_CH_INT interrupt.
    -                IN_SUC_EOF_CH1_INT_CLR: u1,
    -                ///  Set this bit to clear the IN_ERR_EOF_CH_INT interrupt.
    -                IN_ERR_EOF_CH1_INT_CLR: u1,
    -                ///  Set this bit to clear the OUT_DONE_CH_INT interrupt.
    -                OUT_DONE_CH1_INT_CLR: u1,
    -                ///  Set this bit to clear the OUT_EOF_CH_INT interrupt.
    -                OUT_EOF_CH1_INT_CLR: u1,
    -                ///  Set this bit to clear the IN_DSCR_ERR_CH_INT interrupt.
    -                IN_DSCR_ERR_CH1_INT_CLR: u1,
    -                ///  Set this bit to clear the OUT_DSCR_ERR_CH_INT interrupt.
    -                OUT_DSCR_ERR_CH1_INT_CLR: u1,
    -                ///  Set this bit to clear the IN_DSCR_EMPTY_CH_INT interrupt.
    -                IN_DSCR_EMPTY_CH1_INT_CLR: u1,
    -                ///  Set this bit to clear the OUT_TOTAL_EOF_CH_INT interrupt.
    -                OUT_TOTAL_EOF_CH1_INT_CLR: u1,
    -                ///  Set this bit to clear the INFIFO_OVF_L1_CH_INT interrupt.
    -                INFIFO_OVF_CH1_INT_CLR: u1,
    -                ///  Set this bit to clear the INFIFO_UDF_L1_CH_INT interrupt.
    -                INFIFO_UDF_CH1_INT_CLR: u1,
    -                ///  Set this bit to clear the OUTFIFO_OVF_L1_CH_INT interrupt.
    -                OUTFIFO_OVF_CH1_INT_CLR: u1,
    -                ///  Set this bit to clear the OUTFIFO_UDF_L1_CH_INT interrupt.
    -                OUTFIFO_UDF_CH1_INT_CLR: u1,
    -                padding: u19,
    -            }),
    -            ///  DMA_INT_RAW_CH2_REG.
    -            INT_RAW_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 2.
    -                IN_DONE_CH2_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 2. For UHCI0, the raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received and no data error is detected for Rx channel 2.
    -                IN_SUC_EOF_CH2_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when data error is detected only in the case that the peripheral is UHCI0 for Rx channel 2. For other peripherals, this raw interrupt is reserved.
    -                IN_ERR_EOF_CH2_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been transmitted to peripherals for Tx channel 2.
    -                OUT_DONE_CH2_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been read from memory for Tx channel 2.
    -                OUT_EOF_CH2_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when detecting inlink descriptor error, including owner error, the second and third word error of inlink descriptor for Rx channel 2.
    -                IN_DSCR_ERR_CH2_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when detecting outlink descriptor error, including owner error, the second and third word error of outlink descriptor for Tx channel 2.
    -                OUT_DSCR_ERR_CH2_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when Rx buffer pointed by inlink is full and receiving data is not completed, but there is no more inlink for Rx channel 2.
    -                IN_DSCR_EMPTY_CH2_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when data corresponding a outlink (includes one link descriptor or few link descriptors) is transmitted out for Tx channel 2.
    -                OUT_TOTAL_EOF_CH2_INT_RAW: u1,
    -                ///  This raw interrupt bit turns to high level when level 1 fifo of Rx channel 2 is overflow.
    -                INFIFO_OVF_CH2_INT_RAW: u1,
    -                ///  This raw interrupt bit turns to high level when level 1 fifo of Rx channel 2 is underflow.
    -                INFIFO_UDF_CH2_INT_RAW: u1,
    -                ///  This raw interrupt bit turns to high level when level 1 fifo of Tx channel 2 is overflow.
    -                OUTFIFO_OVF_CH2_INT_RAW: u1,
    -                ///  This raw interrupt bit turns to high level when level 1 fifo of Tx channel 2 is underflow.
    -                OUTFIFO_UDF_CH2_INT_RAW: u1,
    -                padding: u19,
    -            }),
    -            ///  DMA_INT_ST_CH2_REG.
    -            INT_ST_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  The raw interrupt status bit for the IN_DONE_CH_INT interrupt.
    -                IN_DONE_CH2_INT_ST: u1,
    -                ///  The raw interrupt status bit for the IN_SUC_EOF_CH_INT interrupt.
    -                IN_SUC_EOF_CH2_INT_ST: u1,
    -                ///  The raw interrupt status bit for the IN_ERR_EOF_CH_INT interrupt.
    -                IN_ERR_EOF_CH2_INT_ST: u1,
    -                ///  The raw interrupt status bit for the OUT_DONE_CH_INT interrupt.
    -                OUT_DONE_CH2_INT_ST: u1,
    -                ///  The raw interrupt status bit for the OUT_EOF_CH_INT interrupt.
    -                OUT_EOF_CH2_INT_ST: u1,
    -                ///  The raw interrupt status bit for the IN_DSCR_ERR_CH_INT interrupt.
    -                IN_DSCR_ERR_CH2_INT_ST: u1,
    -                ///  The raw interrupt status bit for the OUT_DSCR_ERR_CH_INT interrupt.
    -                OUT_DSCR_ERR_CH2_INT_ST: u1,
    -                ///  The raw interrupt status bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    -                IN_DSCR_EMPTY_CH2_INT_ST: u1,
    -                ///  The raw interrupt status bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    -                OUT_TOTAL_EOF_CH2_INT_ST: u1,
    -                ///  The raw interrupt status bit for the INFIFO_OVF_L1_CH_INT interrupt.
    -                INFIFO_OVF_CH2_INT_ST: u1,
    -                ///  The raw interrupt status bit for the INFIFO_UDF_L1_CH_INT interrupt.
    -                INFIFO_UDF_CH2_INT_ST: u1,
    -                ///  The raw interrupt status bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    -                OUTFIFO_OVF_CH2_INT_ST: u1,
    -                ///  The raw interrupt status bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    -                OUTFIFO_UDF_CH2_INT_ST: u1,
    -                padding: u19,
    -            }),
    -            ///  DMA_INT_ENA_CH2_REG.
    -            INT_ENA_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  The interrupt enable bit for the IN_DONE_CH_INT interrupt.
    -                IN_DONE_CH2_INT_ENA: u1,
    -                ///  The interrupt enable bit for the IN_SUC_EOF_CH_INT interrupt.
    -                IN_SUC_EOF_CH2_INT_ENA: u1,
    -                ///  The interrupt enable bit for the IN_ERR_EOF_CH_INT interrupt.
    -                IN_ERR_EOF_CH2_INT_ENA: u1,
    -                ///  The interrupt enable bit for the OUT_DONE_CH_INT interrupt.
    -                OUT_DONE_CH2_INT_ENA: u1,
    -                ///  The interrupt enable bit for the OUT_EOF_CH_INT interrupt.
    -                OUT_EOF_CH2_INT_ENA: u1,
    -                ///  The interrupt enable bit for the IN_DSCR_ERR_CH_INT interrupt.
    -                IN_DSCR_ERR_CH2_INT_ENA: u1,
    -                ///  The interrupt enable bit for the OUT_DSCR_ERR_CH_INT interrupt.
    -                OUT_DSCR_ERR_CH2_INT_ENA: u1,
    -                ///  The interrupt enable bit for the IN_DSCR_EMPTY_CH_INT interrupt.
    -                IN_DSCR_EMPTY_CH2_INT_ENA: u1,
    -                ///  The interrupt enable bit for the OUT_TOTAL_EOF_CH_INT interrupt.
    -                OUT_TOTAL_EOF_CH2_INT_ENA: u1,
    -                ///  The interrupt enable bit for the INFIFO_OVF_L1_CH_INT interrupt.
    -                INFIFO_OVF_CH2_INT_ENA: u1,
    -                ///  The interrupt enable bit for the INFIFO_UDF_L1_CH_INT interrupt.
    -                INFIFO_UDF_CH2_INT_ENA: u1,
    -                ///  The interrupt enable bit for the OUTFIFO_OVF_L1_CH_INT interrupt.
    -                OUTFIFO_OVF_CH2_INT_ENA: u1,
    -                ///  The interrupt enable bit for the OUTFIFO_UDF_L1_CH_INT interrupt.
    -                OUTFIFO_UDF_CH2_INT_ENA: u1,
    -                padding: u19,
    -            }),
    -            ///  DMA_INT_CLR_CH2_REG.
    -            INT_CLR_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  Set this bit to clear the IN_DONE_CH_INT interrupt.
    -                IN_DONE_CH2_INT_CLR: u1,
    -                ///  Set this bit to clear the IN_SUC_EOF_CH_INT interrupt.
    -                IN_SUC_EOF_CH2_INT_CLR: u1,
    -                ///  Set this bit to clear the IN_ERR_EOF_CH_INT interrupt.
    -                IN_ERR_EOF_CH2_INT_CLR: u1,
    -                ///  Set this bit to clear the OUT_DONE_CH_INT interrupt.
    -                OUT_DONE_CH2_INT_CLR: u1,
    -                ///  Set this bit to clear the OUT_EOF_CH_INT interrupt.
    -                OUT_EOF_CH2_INT_CLR: u1,
    -                ///  Set this bit to clear the IN_DSCR_ERR_CH_INT interrupt.
    -                IN_DSCR_ERR_CH2_INT_CLR: u1,
    -                ///  Set this bit to clear the OUT_DSCR_ERR_CH_INT interrupt.
    -                OUT_DSCR_ERR_CH2_INT_CLR: u1,
    -                ///  Set this bit to clear the IN_DSCR_EMPTY_CH_INT interrupt.
    -                IN_DSCR_EMPTY_CH2_INT_CLR: u1,
    -                ///  Set this bit to clear the OUT_TOTAL_EOF_CH_INT interrupt.
    -                OUT_TOTAL_EOF_CH2_INT_CLR: u1,
    -                ///  Set this bit to clear the INFIFO_OVF_L1_CH_INT interrupt.
    -                INFIFO_OVF_CH2_INT_CLR: u1,
    -                ///  Set this bit to clear the INFIFO_UDF_L1_CH_INT interrupt.
    -                INFIFO_UDF_CH2_INT_CLR: u1,
    -                ///  Set this bit to clear the OUTFIFO_OVF_L1_CH_INT interrupt.
    -                OUTFIFO_OVF_CH2_INT_CLR: u1,
    -                ///  Set this bit to clear the OUTFIFO_UDF_L1_CH_INT interrupt.
    -                OUTFIFO_UDF_CH2_INT_CLR: u1,
    -                padding: u19,
    -            }),
    -            reserved64: [16]u8,
    -            ///  DMA_AHB_TEST_REG.
    -            AHB_TEST: mmio.Mmio(packed struct(u32) {
    -                ///  reserved
    -                AHB_TESTMODE: u3,
    -                reserved4: u1,
    -                ///  reserved
    -                AHB_TESTADDR: u2,
    -                padding: u26,
    -            }),
    -            ///  DMA_MISC_CONF_REG.
    -            MISC_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  Set this bit, then clear this bit to reset the internal ahb FSM.
    -                AHBM_RST_INTER: u1,
    -                reserved2: u1,
    -                ///  Set this bit to disable priority arbitration function.
    -                ARB_PRI_DIS: u1,
    -                ///  reg_clk_en
    -                CLK_EN: u1,
    -                padding: u28,
    -            }),
    -            ///  DMA_DATE_REG.
    -            DATE: mmio.Mmio(packed struct(u32) {
    -                ///  register version.
    -                DATE: u32,
    -            }),
    -            reserved112: [36]u8,
    -            ///  DMA_IN_CONF0_CH0_REG.
    -            IN_CONF0_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  This bit is used to reset DMA channel 0 Rx FSM and Rx FIFO pointer.
    -                IN_RST_CH0: u1,
    -                ///  reserved
    -                IN_LOOP_TEST_CH0: u1,
    -                ///  Set this bit to 1 to enable INCR burst transfer for Rx channel 0 reading link descriptor when accessing internal SRAM.
    -                INDSCR_BURST_EN_CH0: u1,
    -                ///  Set this bit to 1 to enable INCR burst transfer for Rx channel 0 receiving data when accessing internal SRAM.
    -                IN_DATA_BURST_EN_CH0: u1,
    -                ///  Set this bit 1 to enable automatic transmitting data from memory to memory via DMA.
    -                MEM_TRANS_EN_CH0: u1,
    -                padding: u27,
    -            }),
    -            ///  DMA_IN_CONF1_CH0_REG.
    -            IN_CONF1_CH0: mmio.Mmio(packed struct(u32) {
    -                reserved12: u12,
    -                ///  Set this bit to enable checking the owner attribute of the link descriptor.
    -                IN_CHECK_OWNER_CH0: u1,
    -                padding: u19,
    -            }),
    -            ///  DMA_INFIFO_STATUS_CH0_REG.
    -            INFIFO_STATUS_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  L1 Rx FIFO full signal for Rx channel 0.
    -                INFIFO_FULL_CH0: u1,
    -                ///  L1 Rx FIFO empty signal for Rx channel 0.
    -                INFIFO_EMPTY_CH0: u1,
    -                ///  The register stores the byte number of the data in L1 Rx FIFO for Rx channel 0.
    -                INFIFO_CNT_CH0: u6,
    -                reserved23: u15,
    -                ///  reserved
    -                IN_REMAIN_UNDER_1B_CH0: u1,
    -                ///  reserved
    -                IN_REMAIN_UNDER_2B_CH0: u1,
    -                ///  reserved
    -                IN_REMAIN_UNDER_3B_CH0: u1,
    -                ///  reserved
    -                IN_REMAIN_UNDER_4B_CH0: u1,
    -                ///  reserved
    -                IN_BUF_HUNGRY_CH0: u1,
    -                padding: u4,
    -            }),
    -            ///  DMA_IN_POP_CH0_REG.
    -            IN_POP_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the data popping from DMA FIFO.
    -                INFIFO_RDATA_CH0: u12,
    -                ///  Set this bit to pop data from DMA FIFO.
    -                INFIFO_POP_CH0: u1,
    -                padding: u19,
    -            }),
    -            ///  DMA_IN_LINK_CH0_REG.
    -            IN_LINK_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the 20 least significant bits of the first inlink descriptor's address.
    -                INLINK_ADDR_CH0: u20,
    -                ///  Set this bit to return to current inlink descriptor's address, when there are some errors in current receiving data.
    -                INLINK_AUTO_RET_CH0: u1,
    -                ///  Set this bit to stop dealing with the inlink descriptors.
    -                INLINK_STOP_CH0: u1,
    -                ///  Set this bit to start dealing with the inlink descriptors.
    -                INLINK_START_CH0: u1,
    -                ///  Set this bit to mount a new inlink descriptor.
    -                INLINK_RESTART_CH0: u1,
    -                ///  1: the inlink descriptor's FSM is in idle state. 0: the inlink descriptor's FSM is working.
    -                INLINK_PARK_CH0: u1,
    -                padding: u7,
    -            }),
    -            ///  DMA_IN_STATE_CH0_REG.
    -            IN_STATE_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the current inlink descriptor's address.
    -                INLINK_DSCR_ADDR_CH0: u18,
    -                ///  reserved
    -                IN_DSCR_STATE_CH0: u2,
    -                ///  reserved
    -                IN_STATE_CH0: u3,
    -                padding: u9,
    -            }),
    -            ///  DMA_IN_SUC_EOF_DES_ADDR_CH0_REG.
    -            IN_SUC_EOF_DES_ADDR_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the address of the inlink descriptor when the EOF bit in this descriptor is 1.
    -                IN_SUC_EOF_DES_ADDR_CH0: u32,
    -            }),
    -            ///  DMA_IN_ERR_EOF_DES_ADDR_CH0_REG.
    -            IN_ERR_EOF_DES_ADDR_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the address of the inlink descriptor when there are some errors in current receiving data. Only used when peripheral is UHCI0.
    -                IN_ERR_EOF_DES_ADDR_CH0: u32,
    -            }),
    -            ///  DMA_IN_DSCR_CH0_REG.
    -            IN_DSCR_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  The address of the current inlink descriptor x.
    -                INLINK_DSCR_CH0: u32,
    -            }),
    -            ///  DMA_IN_DSCR_BF0_CH0_REG.
    -            IN_DSCR_BF0_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  The address of the last inlink descriptor x-1.
    -                INLINK_DSCR_BF0_CH0: u32,
    -            }),
    -            ///  DMA_IN_DSCR_BF1_CH0_REG.
    -            IN_DSCR_BF1_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  The address of the second-to-last inlink descriptor x-2.
    -                INLINK_DSCR_BF1_CH0: u32,
    -            }),
    -            ///  DMA_IN_PRI_CH0_REG.
    -            IN_PRI_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  The priority of Rx channel 0. The larger of the value, the higher of the priority.
    -                RX_PRI_CH0: u4,
    -                padding: u28,
    -            }),
    -            ///  DMA_IN_PERI_SEL_CH0_REG.
    -            IN_PERI_SEL_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  This register is used to select peripheral for Rx channel 0. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.
    -                PERI_IN_SEL_CH0: u6,
    -                padding: u26,
    -            }),
    -            reserved208: [44]u8,
    -            ///  DMA_OUT_CONF0_CH0_REG.
    -            OUT_CONF0_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  This bit is used to reset DMA channel 0 Tx FSM and Tx FIFO pointer.
    -                OUT_RST_CH0: u1,
    -                ///  reserved
    -                OUT_LOOP_TEST_CH0: u1,
    -                ///  Set this bit to enable automatic outlink-writeback when all the data in tx buffer has been transmitted.
    -                OUT_AUTO_WRBACK_CH0: u1,
    -                ///  EOF flag generation mode when transmitting data. 1: EOF flag for Tx channel 0 is generated when data need to transmit has been popped from FIFO in DMA
    -                OUT_EOF_MODE_CH0: u1,
    -                ///  Set this bit to 1 to enable INCR burst transfer for Tx channel 0 reading link descriptor when accessing internal SRAM.
    -                OUTDSCR_BURST_EN_CH0: u1,
    -                ///  Set this bit to 1 to enable INCR burst transfer for Tx channel 0 transmitting data when accessing internal SRAM.
    -                OUT_DATA_BURST_EN_CH0: u1,
    -                padding: u26,
    -            }),
    -            ///  DMA_OUT_CONF1_CH0_REG.
    -            OUT_CONF1_CH0: mmio.Mmio(packed struct(u32) {
    -                reserved12: u12,
    -                ///  Set this bit to enable checking the owner attribute of the link descriptor.
    -                OUT_CHECK_OWNER_CH0: u1,
    -                padding: u19,
    -            }),
    -            ///  DMA_OUTFIFO_STATUS_CH0_REG.
    -            OUTFIFO_STATUS_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  L1 Tx FIFO full signal for Tx channel 0.
    -                OUTFIFO_FULL_CH0: u1,
    -                ///  L1 Tx FIFO empty signal for Tx channel 0.
    -                OUTFIFO_EMPTY_CH0: u1,
    -                ///  The register stores the byte number of the data in L1 Tx FIFO for Tx channel 0.
    -                OUTFIFO_CNT_CH0: u6,
    -                reserved23: u15,
    -                ///  reserved
    -                OUT_REMAIN_UNDER_1B_CH0: u1,
    -                ///  reserved
    -                OUT_REMAIN_UNDER_2B_CH0: u1,
    -                ///  reserved
    -                OUT_REMAIN_UNDER_3B_CH0: u1,
    -                ///  reserved
    -                OUT_REMAIN_UNDER_4B_CH0: u1,
    -                padding: u5,
    -            }),
    -            ///  DMA_OUT_PUSH_CH0_REG.
    -            OUT_PUSH_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the data that need to be pushed into DMA FIFO.
    -                OUTFIFO_WDATA_CH0: u9,
    -                ///  Set this bit to push data into DMA FIFO.
    -                OUTFIFO_PUSH_CH0: u1,
    -                padding: u22,
    -            }),
    -            ///  DMA_OUT_LINK_CH0_REG.
    -            OUT_LINK_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the 20 least significant bits of the first outlink descriptor's address.
    -                OUTLINK_ADDR_CH0: u20,
    -                ///  Set this bit to stop dealing with the outlink descriptors.
    -                OUTLINK_STOP_CH0: u1,
    -                ///  Set this bit to start dealing with the outlink descriptors.
    -                OUTLINK_START_CH0: u1,
    -                ///  Set this bit to restart a new outlink from the last address.
    -                OUTLINK_RESTART_CH0: u1,
    -                ///  1: the outlink descriptor's FSM is in idle state. 0: the outlink descriptor's FSM is working.
    -                OUTLINK_PARK_CH0: u1,
    -                padding: u8,
    -            }),
    -            ///  DMA_OUT_STATE_CH0_REG.
    -            OUT_STATE_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the current outlink descriptor's address.
    -                OUTLINK_DSCR_ADDR_CH0: u18,
    -                ///  reserved
    -                OUT_DSCR_STATE_CH0: u2,
    -                ///  reserved
    -                OUT_STATE_CH0: u3,
    -                padding: u9,
    -            }),
    -            ///  DMA_OUT_EOF_DES_ADDR_CH0_REG.
    -            OUT_EOF_DES_ADDR_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the address of the outlink descriptor when the EOF bit in this descriptor is 1.
    -                OUT_EOF_DES_ADDR_CH0: u32,
    -            }),
    -            ///  DMA_OUT_EOF_BFR_DES_ADDR_CH0_REG.
    -            OUT_EOF_BFR_DES_ADDR_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the address of the outlink descriptor before the last outlink descriptor.
    -                OUT_EOF_BFR_DES_ADDR_CH0: u32,
    -            }),
    -            ///  DMA_OUT_DSCR_CH0_REG.
    -            OUT_DSCR_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  The address of the current outlink descriptor y.
    -                OUTLINK_DSCR_CH0: u32,
    -            }),
    -            ///  DMA_OUT_DSCR_BF0_CH0_REG.
    -            OUT_DSCR_BF0_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  The address of the last outlink descriptor y-1.
    -                OUTLINK_DSCR_BF0_CH0: u32,
    -            }),
    -            ///  DMA_OUT_DSCR_BF1_CH0_REG.
    -            OUT_DSCR_BF1_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  The address of the second-to-last inlink descriptor x-2.
    -                OUTLINK_DSCR_BF1_CH0: u32,
    -            }),
    -            ///  DMA_OUT_PRI_CH0_REG.
    -            OUT_PRI_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  The priority of Tx channel 0. The larger of the value, the higher of the priority.
    -                TX_PRI_CH0: u4,
    -                padding: u28,
    -            }),
    -            ///  DMA_OUT_PERI_SEL_CH0_REG.
    -            OUT_PERI_SEL_CH0: mmio.Mmio(packed struct(u32) {
    -                ///  This register is used to select peripheral for Tx channel 0. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.
    -                PERI_OUT_SEL_CH0: u6,
    -                padding: u26,
    -            }),
    -            reserved304: [44]u8,
    -            ///  DMA_IN_CONF0_CH1_REG.
    -            IN_CONF0_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  This bit is used to reset DMA channel 1 Rx FSM and Rx FIFO pointer.
    -                IN_RST_CH1: u1,
    -                ///  reserved
    -                IN_LOOP_TEST_CH1: u1,
    -                ///  Set this bit to 1 to enable INCR burst transfer for Rx channel 1 reading link descriptor when accessing internal SRAM.
    -                INDSCR_BURST_EN_CH1: u1,
    -                ///  Set this bit to 1 to enable INCR burst transfer for Rx channel 1 receiving data when accessing internal SRAM.
    -                IN_DATA_BURST_EN_CH1: u1,
    -                ///  Set this bit 1 to enable automatic transmitting data from memory to memory via DMA.
    -                MEM_TRANS_EN_CH1: u1,
    -                padding: u27,
    -            }),
    -            ///  DMA_IN_CONF1_CH1_REG.
    -            IN_CONF1_CH1: mmio.Mmio(packed struct(u32) {
    -                reserved12: u12,
    -                ///  Set this bit to enable checking the owner attribute of the link descriptor.
    -                IN_CHECK_OWNER_CH1: u1,
    -                padding: u19,
    -            }),
    -            ///  DMA_INFIFO_STATUS_CH1_REG.
    -            INFIFO_STATUS_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  L1 Rx FIFO full signal for Rx channel 1.
    -                INFIFO_FULL_CH1: u1,
    -                ///  L1 Rx FIFO empty signal for Rx channel 1.
    -                INFIFO_EMPTY_CH1: u1,
    -                ///  The register stores the byte number of the data in L1 Rx FIFO for Rx channel 1.
    -                INFIFO_CNT_CH1: u6,
    -                reserved23: u15,
    -                ///  reserved
    -                IN_REMAIN_UNDER_1B_CH1: u1,
    -                ///  reserved
    -                IN_REMAIN_UNDER_2B_CH1: u1,
    -                ///  reserved
    -                IN_REMAIN_UNDER_3B_CH1: u1,
    -                ///  reserved
    -                IN_REMAIN_UNDER_4B_CH1: u1,
    -                ///  reserved
    -                IN_BUF_HUNGRY_CH1: u1,
    -                padding: u4,
    -            }),
    -            ///  DMA_IN_POP_CH1_REG.
    -            IN_POP_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the data popping from DMA FIFO.
    -                INFIFO_RDATA_CH1: u12,
    -                ///  Set this bit to pop data from DMA FIFO.
    -                INFIFO_POP_CH1: u1,
    -                padding: u19,
    -            }),
    -            ///  DMA_IN_LINK_CH1_REG.
    -            IN_LINK_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the 20 least significant bits of the first inlink descriptor's address.
    -                INLINK_ADDR_CH1: u20,
    -                ///  Set this bit to return to current inlink descriptor's address, when there are some errors in current receiving data.
    -                INLINK_AUTO_RET_CH1: u1,
    -                ///  Set this bit to stop dealing with the inlink descriptors.
    -                INLINK_STOP_CH1: u1,
    -                ///  Set this bit to start dealing with the inlink descriptors.
    -                INLINK_START_CH1: u1,
    -                ///  Set this bit to mount a new inlink descriptor.
    -                INLINK_RESTART_CH1: u1,
    -                ///  1: the inlink descriptor's FSM is in idle state. 0: the inlink descriptor's FSM is working.
    -                INLINK_PARK_CH1: u1,
    -                padding: u7,
    -            }),
    -            ///  DMA_IN_STATE_CH1_REG.
    -            IN_STATE_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the current inlink descriptor's address.
    -                INLINK_DSCR_ADDR_CH1: u18,
    -                ///  reserved
    -                IN_DSCR_STATE_CH1: u2,
    -                ///  reserved
    -                IN_STATE_CH1: u3,
    -                padding: u9,
    -            }),
    -            ///  DMA_IN_SUC_EOF_DES_ADDR_CH1_REG.
    -            IN_SUC_EOF_DES_ADDR_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the address of the inlink descriptor when the EOF bit in this descriptor is 1.
    -                IN_SUC_EOF_DES_ADDR_CH1: u32,
    -            }),
    -            ///  DMA_IN_ERR_EOF_DES_ADDR_CH1_REG.
    -            IN_ERR_EOF_DES_ADDR_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the address of the inlink descriptor when there are some errors in current receiving data. Only used when peripheral is UHCI0.
    -                IN_ERR_EOF_DES_ADDR_CH1: u32,
    -            }),
    -            ///  DMA_IN_DSCR_CH1_REG.
    -            IN_DSCR_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  The address of the current inlink descriptor x.
    -                INLINK_DSCR_CH1: u32,
    -            }),
    -            ///  DMA_IN_DSCR_BF0_CH1_REG.
    -            IN_DSCR_BF0_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  The address of the last inlink descriptor x-1.
    -                INLINK_DSCR_BF0_CH1: u32,
    -            }),
    -            ///  DMA_IN_DSCR_BF1_CH1_REG.
    -            IN_DSCR_BF1_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  The address of the second-to-last inlink descriptor x-2.
    -                INLINK_DSCR_BF1_CH1: u32,
    -            }),
    -            ///  DMA_IN_PRI_CH1_REG.
    -            IN_PRI_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  The priority of Rx channel 1. The larger of the value, the higher of the priority.
    -                RX_PRI_CH1: u4,
    -                padding: u28,
    -            }),
    -            ///  DMA_IN_PERI_SEL_CH1_REG.
    -            IN_PERI_SEL_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  This register is used to select peripheral for Rx channel 1. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.
    -                PERI_IN_SEL_CH1: u6,
    -                padding: u26,
    -            }),
    -            reserved400: [44]u8,
    -            ///  DMA_OUT_CONF0_CH1_REG.
    -            OUT_CONF0_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  This bit is used to reset DMA channel 1 Tx FSM and Tx FIFO pointer.
    -                OUT_RST_CH1: u1,
    -                ///  reserved
    -                OUT_LOOP_TEST_CH1: u1,
    -                ///  Set this bit to enable automatic outlink-writeback when all the data in tx buffer has been transmitted.
    -                OUT_AUTO_WRBACK_CH1: u1,
    -                ///  EOF flag generation mode when transmitting data. 1: EOF flag for Tx channel 1 is generated when data need to transmit has been popped from FIFO in DMA
    -                OUT_EOF_MODE_CH1: u1,
    -                ///  Set this bit to 1 to enable INCR burst transfer for Tx channel 1 reading link descriptor when accessing internal SRAM.
    -                OUTDSCR_BURST_EN_CH1: u1,
    -                ///  Set this bit to 1 to enable INCR burst transfer for Tx channel 1 transmitting data when accessing internal SRAM.
    -                OUT_DATA_BURST_EN_CH1: u1,
    -                padding: u26,
    -            }),
    -            ///  DMA_OUT_CONF1_CH1_REG.
    -            OUT_CONF1_CH1: mmio.Mmio(packed struct(u32) {
    -                reserved12: u12,
    -                ///  Set this bit to enable checking the owner attribute of the link descriptor.
    -                OUT_CHECK_OWNER_CH1: u1,
    -                padding: u19,
    -            }),
    -            ///  DMA_OUTFIFO_STATUS_CH1_REG.
    -            OUTFIFO_STATUS_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  L1 Tx FIFO full signal for Tx channel 1.
    -                OUTFIFO_FULL_CH1: u1,
    -                ///  L1 Tx FIFO empty signal for Tx channel 1.
    -                OUTFIFO_EMPTY_CH1: u1,
    -                ///  The register stores the byte number of the data in L1 Tx FIFO for Tx channel 1.
    -                OUTFIFO_CNT_CH1: u6,
    -                reserved23: u15,
    -                ///  reserved
    -                OUT_REMAIN_UNDER_1B_CH1: u1,
    -                ///  reserved
    -                OUT_REMAIN_UNDER_2B_CH1: u1,
    -                ///  reserved
    -                OUT_REMAIN_UNDER_3B_CH1: u1,
    -                ///  reserved
    -                OUT_REMAIN_UNDER_4B_CH1: u1,
    -                padding: u5,
    -            }),
    -            ///  DMA_OUT_PUSH_CH1_REG.
    -            OUT_PUSH_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the data that need to be pushed into DMA FIFO.
    -                OUTFIFO_WDATA_CH1: u9,
    -                ///  Set this bit to push data into DMA FIFO.
    -                OUTFIFO_PUSH_CH1: u1,
    -                padding: u22,
    -            }),
    -            ///  DMA_OUT_LINK_CH1_REG.
    -            OUT_LINK_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the 20 least significant bits of the first outlink descriptor's address.
    -                OUTLINK_ADDR_CH1: u20,
    -                ///  Set this bit to stop dealing with the outlink descriptors.
    -                OUTLINK_STOP_CH1: u1,
    -                ///  Set this bit to start dealing with the outlink descriptors.
    -                OUTLINK_START_CH1: u1,
    -                ///  Set this bit to restart a new outlink from the last address.
    -                OUTLINK_RESTART_CH1: u1,
    -                ///  1: the outlink descriptor's FSM is in idle state. 0: the outlink descriptor's FSM is working.
    -                OUTLINK_PARK_CH1: u1,
    -                padding: u8,
    -            }),
    -            ///  DMA_OUT_STATE_CH1_REG.
    -            OUT_STATE_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the current outlink descriptor's address.
    -                OUTLINK_DSCR_ADDR_CH1: u18,
    -                ///  reserved
    -                OUT_DSCR_STATE_CH1: u2,
    -                ///  reserved
    -                OUT_STATE_CH1: u3,
    -                padding: u9,
    -            }),
    -            ///  DMA_OUT_EOF_DES_ADDR_CH1_REG.
    -            OUT_EOF_DES_ADDR_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the address of the outlink descriptor when the EOF bit in this descriptor is 1.
    -                OUT_EOF_DES_ADDR_CH1: u32,
    -            }),
    -            ///  DMA_OUT_EOF_BFR_DES_ADDR_CH1_REG.
    -            OUT_EOF_BFR_DES_ADDR_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the address of the outlink descriptor before the last outlink descriptor.
    -                OUT_EOF_BFR_DES_ADDR_CH1: u32,
    -            }),
    -            ///  DMA_OUT_DSCR_CH1_REG.
    -            OUT_DSCR_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  The address of the current outlink descriptor y.
    -                OUTLINK_DSCR_CH1: u32,
    -            }),
    -            ///  DMA_OUT_DSCR_BF0_CH1_REG.
    -            OUT_DSCR_BF0_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  The address of the last outlink descriptor y-1.
    -                OUTLINK_DSCR_BF0_CH1: u32,
    -            }),
    -            ///  DMA_OUT_DSCR_BF1_CH1_REG.
    -            OUT_DSCR_BF1_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  The address of the second-to-last inlink descriptor x-2.
    -                OUTLINK_DSCR_BF1_CH1: u32,
    -            }),
    -            ///  DMA_OUT_PRI_CH1_REG.
    -            OUT_PRI_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  The priority of Tx channel 1. The larger of the value, the higher of the priority.
    -                TX_PRI_CH1: u4,
    -                padding: u28,
    -            }),
    -            ///  DMA_OUT_PERI_SEL_CH1_REG.
    -            OUT_PERI_SEL_CH1: mmio.Mmio(packed struct(u32) {
    -                ///  This register is used to select peripheral for Tx channel 1. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.
    -                PERI_OUT_SEL_CH1: u6,
    -                padding: u26,
    -            }),
    -            reserved496: [44]u8,
    -            ///  DMA_IN_CONF0_CH2_REG.
    -            IN_CONF0_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  This bit is used to reset DMA channel 2 Rx FSM and Rx FIFO pointer.
    -                IN_RST_CH2: u1,
    -                ///  reserved
    -                IN_LOOP_TEST_CH2: u1,
    -                ///  Set this bit to 1 to enable INCR burst transfer for Rx channel 2 reading link descriptor when accessing internal SRAM.
    -                INDSCR_BURST_EN_CH2: u1,
    -                ///  Set this bit to 1 to enable INCR burst transfer for Rx channel 2 receiving data when accessing internal SRAM.
    -                IN_DATA_BURST_EN_CH2: u1,
    -                ///  Set this bit 1 to enable automatic transmitting data from memory to memory via DMA.
    -                MEM_TRANS_EN_CH2: u1,
    -                padding: u27,
    -            }),
    -            ///  DMA_IN_CONF1_CH2_REG.
    -            IN_CONF1_CH2: mmio.Mmio(packed struct(u32) {
    -                reserved12: u12,
    -                ///  Set this bit to enable checking the owner attribute of the link descriptor.
    -                IN_CHECK_OWNER_CH2: u1,
    -                padding: u19,
    -            }),
    -            ///  DMA_INFIFO_STATUS_CH2_REG.
    -            INFIFO_STATUS_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  L1 Rx FIFO full signal for Rx channel 2.
    -                INFIFO_FULL_CH2: u1,
    -                ///  L1 Rx FIFO empty signal for Rx channel 2.
    -                INFIFO_EMPTY_CH2: u1,
    -                ///  The register stores the byte number of the data in L1 Rx FIFO for Rx channel 2.
    -                INFIFO_CNT_CH2: u6,
    -                reserved23: u15,
    -                ///  reserved
    -                IN_REMAIN_UNDER_1B_CH2: u1,
    -                ///  reserved
    -                IN_REMAIN_UNDER_2B_CH2: u1,
    -                ///  reserved
    -                IN_REMAIN_UNDER_3B_CH2: u1,
    -                ///  reserved
    -                IN_REMAIN_UNDER_4B_CH2: u1,
    -                ///  reserved
    -                IN_BUF_HUNGRY_CH2: u1,
    -                padding: u4,
    -            }),
    -            ///  DMA_IN_POP_CH2_REG.
    -            IN_POP_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the data popping from DMA FIFO.
    -                INFIFO_RDATA_CH2: u12,
    -                ///  Set this bit to pop data from DMA FIFO.
    -                INFIFO_POP_CH2: u1,
    -                padding: u19,
    -            }),
    -            ///  DMA_IN_LINK_CH2_REG.
    -            IN_LINK_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the 20 least significant bits of the first inlink descriptor's address.
    -                INLINK_ADDR_CH2: u20,
    -                ///  Set this bit to return to current inlink descriptor's address, when there are some errors in current receiving data.
    -                INLINK_AUTO_RET_CH2: u1,
    -                ///  Set this bit to stop dealing with the inlink descriptors.
    -                INLINK_STOP_CH2: u1,
    -                ///  Set this bit to start dealing with the inlink descriptors.
    -                INLINK_START_CH2: u1,
    -                ///  Set this bit to mount a new inlink descriptor.
    -                INLINK_RESTART_CH2: u1,
    -                ///  1: the inlink descriptor's FSM is in idle state. 0: the inlink descriptor's FSM is working.
    -                INLINK_PARK_CH2: u1,
    -                padding: u7,
    -            }),
    -            ///  DMA_IN_STATE_CH2_REG.
    -            IN_STATE_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the current inlink descriptor's address.
    -                INLINK_DSCR_ADDR_CH2: u18,
    -                ///  reserved
    -                IN_DSCR_STATE_CH2: u2,
    -                ///  reserved
    -                IN_STATE_CH2: u3,
    -                padding: u9,
    -            }),
    -            ///  DMA_IN_SUC_EOF_DES_ADDR_CH2_REG.
    -            IN_SUC_EOF_DES_ADDR_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the address of the inlink descriptor when the EOF bit in this descriptor is 1.
    -                IN_SUC_EOF_DES_ADDR_CH2: u32,
    -            }),
    -            ///  DMA_IN_ERR_EOF_DES_ADDR_CH2_REG.
    -            IN_ERR_EOF_DES_ADDR_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the address of the inlink descriptor when there are some errors in current receiving data. Only used when peripheral is UHCI0.
    -                IN_ERR_EOF_DES_ADDR_CH2: u32,
    -            }),
    -            ///  DMA_IN_DSCR_CH2_REG.
    -            IN_DSCR_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  The address of the current inlink descriptor x.
    -                INLINK_DSCR_CH2: u32,
    -            }),
    -            ///  DMA_IN_DSCR_BF0_CH2_REG.
    -            IN_DSCR_BF0_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  The address of the last inlink descriptor x-1.
    -                INLINK_DSCR_BF0_CH2: u32,
    -            }),
    -            ///  DMA_IN_DSCR_BF1_CH2_REG.
    -            IN_DSCR_BF1_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  The address of the second-to-last inlink descriptor x-2.
    -                INLINK_DSCR_BF1_CH2: u32,
    -            }),
    -            ///  DMA_IN_PRI_CH2_REG.
    -            IN_PRI_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  The priority of Rx channel 2. The larger of the value, the higher of the priority.
    -                RX_PRI_CH2: u4,
    -                padding: u28,
    -            }),
    -            ///  DMA_IN_PERI_SEL_CH2_REG.
    -            IN_PERI_SEL_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  This register is used to select peripheral for Rx channel 2. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.
    -                PERI_IN_SEL_CH2: u6,
    -                padding: u26,
    -            }),
    -            reserved592: [44]u8,
    -            ///  DMA_OUT_CONF0_CH2_REG.
    -            OUT_CONF0_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  This bit is used to reset DMA channel 2 Tx FSM and Tx FIFO pointer.
    -                OUT_RST_CH2: u1,
    -                ///  reserved
    -                OUT_LOOP_TEST_CH2: u1,
    -                ///  Set this bit to enable automatic outlink-writeback when all the data in tx buffer has been transmitted.
    -                OUT_AUTO_WRBACK_CH2: u1,
    -                ///  EOF flag generation mode when transmitting data. 1: EOF flag for Tx channel 2 is generated when data need to transmit has been popped from FIFO in DMA
    -                OUT_EOF_MODE_CH2: u1,
    -                ///  Set this bit to 1 to enable INCR burst transfer for Tx channel 2 reading link descriptor when accessing internal SRAM.
    -                OUTDSCR_BURST_EN_CH2: u1,
    -                ///  Set this bit to 1 to enable INCR burst transfer for Tx channel 2 transmitting data when accessing internal SRAM.
    -                OUT_DATA_BURST_EN_CH2: u1,
    -                padding: u26,
    -            }),
    -            ///  DMA_OUT_CONF1_CH2_REG.
    -            OUT_CONF1_CH2: mmio.Mmio(packed struct(u32) {
    -                reserved12: u12,
    -                ///  Set this bit to enable checking the owner attribute of the link descriptor.
    -                OUT_CHECK_OWNER_CH2: u1,
    -                padding: u19,
    -            }),
    -            ///  DMA_OUTFIFO_STATUS_CH2_REG.
    -            OUTFIFO_STATUS_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  L1 Tx FIFO full signal for Tx channel 2.
    -                OUTFIFO_FULL_CH2: u1,
    -                ///  L1 Tx FIFO empty signal for Tx channel 2.
    -                OUTFIFO_EMPTY_CH2: u1,
    -                ///  The register stores the byte number of the data in L1 Tx FIFO for Tx channel 2.
    -                OUTFIFO_CNT_CH2: u6,
    -                reserved23: u15,
    -                ///  reserved
    -                OUT_REMAIN_UNDER_1B_CH2: u1,
    -                ///  reserved
    -                OUT_REMAIN_UNDER_2B_CH2: u1,
    -                ///  reserved
    -                OUT_REMAIN_UNDER_3B_CH2: u1,
    -                ///  reserved
    -                OUT_REMAIN_UNDER_4B_CH2: u1,
    -                padding: u5,
    -            }),
    -            ///  DMA_OUT_PUSH_CH2_REG.
    -            OUT_PUSH_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the data that need to be pushed into DMA FIFO.
    -                OUTFIFO_WDATA_CH2: u9,
    -                ///  Set this bit to push data into DMA FIFO.
    -                OUTFIFO_PUSH_CH2: u1,
    -                padding: u22,
    -            }),
    -            ///  DMA_OUT_LINK_CH2_REG.
    -            OUT_LINK_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the 20 least significant bits of the first outlink descriptor's address.
    -                OUTLINK_ADDR_CH2: u20,
    -                ///  Set this bit to stop dealing with the outlink descriptors.
    -                OUTLINK_STOP_CH2: u1,
    -                ///  Set this bit to start dealing with the outlink descriptors.
    -                OUTLINK_START_CH2: u1,
    -                ///  Set this bit to restart a new outlink from the last address.
    -                OUTLINK_RESTART_CH2: u1,
    -                ///  1: the outlink descriptor's FSM is in idle state. 0: the outlink descriptor's FSM is working.
    -                OUTLINK_PARK_CH2: u1,
    -                padding: u8,
    -            }),
    -            ///  DMA_OUT_STATE_CH2_REG.
    -            OUT_STATE_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the current outlink descriptor's address.
    -                OUTLINK_DSCR_ADDR_CH2: u18,
    -                ///  reserved
    -                OUT_DSCR_STATE_CH2: u2,
    -                ///  reserved
    -                OUT_STATE_CH2: u3,
    -                padding: u9,
    -            }),
    -            ///  DMA_OUT_EOF_DES_ADDR_CH2_REG.
    -            OUT_EOF_DES_ADDR_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the address of the outlink descriptor when the EOF bit in this descriptor is 1.
    -                OUT_EOF_DES_ADDR_CH2: u32,
    -            }),
    -            ///  DMA_OUT_EOF_BFR_DES_ADDR_CH2_REG.
    -            OUT_EOF_BFR_DES_ADDR_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the address of the outlink descriptor before the last outlink descriptor.
    -                OUT_EOF_BFR_DES_ADDR_CH2: u32,
    -            }),
    -            ///  DMA_OUT_DSCR_CH2_REG.
    -            OUT_DSCR_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  The address of the current outlink descriptor y.
    -                OUTLINK_DSCR_CH2: u32,
    -            }),
    -            ///  DMA_OUT_DSCR_BF0_CH2_REG.
    -            OUT_DSCR_BF0_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  The address of the last outlink descriptor y-1.
    -                OUTLINK_DSCR_BF0_CH2: u32,
    -            }),
    -            ///  DMA_OUT_DSCR_BF1_CH2_REG.
    -            OUT_DSCR_BF1_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  The address of the second-to-last inlink descriptor x-2.
    -                OUTLINK_DSCR_BF1_CH2: u32,
    -            }),
    -            ///  DMA_OUT_PRI_CH2_REG.
    -            OUT_PRI_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  The priority of Tx channel 2. The larger of the value, the higher of the priority.
    -                TX_PRI_CH2: u4,
    -                padding: u28,
    -            }),
    -            ///  DMA_OUT_PERI_SEL_CH2_REG.
    -            OUT_PERI_SEL_CH2: mmio.Mmio(packed struct(u32) {
    -                ///  This register is used to select peripheral for Tx channel 2. 0:SPI2. 1: reserved. 2: UHCI0. 3: I2S0. 4: reserved. 5: reserved. 6: AES. 7: SHA. 8: ADC_DAC.
    -                PERI_OUT_SEL_CH2: u6,
    -                padding: u26,
    -            }),
    -        };
    -
    -        ///  Digital Signature
    -        pub const DS = extern struct {
    -            ///  memory that stores Y
    -            Y_MEM: [512]u8,
    -            ///  memory that stores M
    -            M_MEM: [512]u8,
    -            ///  memory that stores Rb
    -            RB_MEM: [512]u8,
    -            ///  memory that stores BOX
    -            BOX_MEM: [48]u8,
    -            reserved2048: [464]u8,
    -            ///  memory that stores X
    -            X_MEM: [512]u8,
    -            ///  memory that stores Z
    -            Z_MEM: [512]u8,
    -            reserved3584: [512]u8,
    -            ///  DS start control register
    -            SET_START: mmio.Mmio(packed struct(u32) {
    -                ///  set this bit to start DS operation.
    -                SET_START: u1,
    -                padding: u31,
    -            }),
    -            ///  DS continue control register
    -            SET_CONTINUE: mmio.Mmio(packed struct(u32) {
    -                ///  set this bit to continue DS operation.
    -                SET_CONTINUE: u1,
    -                padding: u31,
    -            }),
    -            ///  DS finish control register
    -            SET_FINISH: mmio.Mmio(packed struct(u32) {
    -                ///  Set this bit to finish DS process.
    -                SET_FINISH: u1,
    -                padding: u31,
    -            }),
    -            ///  DS query busy register
    -            QUERY_BUSY: mmio.Mmio(packed struct(u32) {
    -                ///  digital signature state. 1'b0: idle, 1'b1: busy
    -                QUERY_BUSY: u1,
    -                padding: u31,
    -            }),
    -            ///  DS query key-wrong counter register
    -            QUERY_KEY_WRONG: mmio.Mmio(packed struct(u32) {
    -                ///  digital signature key wrong counter
    -                QUERY_KEY_WRONG: u4,
    -                padding: u28,
    -            }),
    -            ///  DS query check result register
    -            QUERY_CHECK: mmio.Mmio(packed struct(u32) {
    -                ///  MD checkout result. 1'b0: MD check pass, 1'b1: MD check fail
    -                MD_ERROR: u1,
    -                ///  padding checkout result. 1'b0: a good padding, 1'b1: a bad padding
    -                PADDING_BAD: u1,
    -                padding: u30,
    -            }),
    -            reserved3616: [8]u8,
    -            ///  DS version control register
    -            DATE: mmio.Mmio(packed struct(u32) {
    -                ///  ds version information
    -                DATE: u30,
    -                padding: u2,
    -            }),
    -        };
    -
    -        ///  eFuse Controller
    -        pub const EFUSE = extern struct {
    -            ///  Register 0 that stores data to be programmed.
    -            PGM_DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  The content of the 0th 32-bit data to be programmed.
    -                PGM_DATA_0: u32,
    -            }),
    -            ///  Register 1 that stores data to be programmed.
    -            PGM_DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  The content of the 1st 32-bit data to be programmed.
    -                PGM_DATA_1: u32,
    -            }),
    -            ///  Register 2 that stores data to be programmed.
    -            PGM_DATA2: mmio.Mmio(packed struct(u32) {
    -                ///  The content of the 2nd 32-bit data to be programmed.
    -                PGM_DATA_2: u32,
    -            }),
    -            ///  Register 3 that stores data to be programmed.
    -            PGM_DATA3: mmio.Mmio(packed struct(u32) {
    -                ///  The content of the 3rd 32-bit data to be programmed.
    -                PGM_DATA_3: u32,
    -            }),
    -            ///  Register 4 that stores data to be programmed.
    -            PGM_DATA4: mmio.Mmio(packed struct(u32) {
    -                ///  The content of the 4th 32-bit data to be programmed.
    -                PGM_DATA_4: u32,
    -            }),
    -            ///  Register 5 that stores data to be programmed.
    -            PGM_DATA5: mmio.Mmio(packed struct(u32) {
    -                ///  The content of the 5th 32-bit data to be programmed.
    -                PGM_DATA_5: u32,
    -            }),
    -            ///  Register 6 that stores data to be programmed.
    -            PGM_DATA6: mmio.Mmio(packed struct(u32) {
    -                ///  The content of the 6th 32-bit data to be programmed.
    -                PGM_DATA_6: u32,
    -            }),
    -            ///  Register 7 that stores data to be programmed.
    -            PGM_DATA7: mmio.Mmio(packed struct(u32) {
    -                ///  The content of the 7th 32-bit data to be programmed.
    -                PGM_DATA_7: u32,
    -            }),
    -            ///  Register 0 that stores the RS code to be programmed.
    -            PGM_CHECK_VALUE0: mmio.Mmio(packed struct(u32) {
    -                ///  The content of the 0th 32-bit RS code to be programmed.
    -                PGM_RS_DATA_0: u32,
    -            }),
    -            ///  Register 1 that stores the RS code to be programmed.
    -            PGM_CHECK_VALUE1: mmio.Mmio(packed struct(u32) {
    -                ///  The content of the 1st 32-bit RS code to be programmed.
    -                PGM_RS_DATA_1: u32,
    -            }),
    -            ///  Register 2 that stores the RS code to be programmed.
    -            PGM_CHECK_VALUE2: mmio.Mmio(packed struct(u32) {
    -                ///  The content of the 2nd 32-bit RS code to be programmed.
    -                PGM_RS_DATA_2: u32,
    -            }),
    -            ///  BLOCK0 data register 0.
    -            RD_WR_DIS: mmio.Mmio(packed struct(u32) {
    -                ///  Disable programming of individual eFuses.
    -                WR_DIS: u32,
    -            }),
    -            ///  BLOCK0 data register 1.
    -            RD_REPEAT_DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Set this bit to disable reading from BlOCK4-10.
    -                RD_DIS: u7,
    -                ///  Set this bit to disable boot from RTC RAM.
    -                DIS_RTC_RAM_BOOT: u1,
    -                ///  Set this bit to disable Icache.
    -                DIS_ICACHE: u1,
    -                ///  Set this bit to disable function of usb switch to jtag in module of usb device.
    -                DIS_USB_JTAG: u1,
    -                ///  Set this bit to disable Icache in download mode (boot_mode[3:0] is 0, 1, 2, 3, 6, 7).
    -                DIS_DOWNLOAD_ICACHE: u1,
    -                ///  Set this bit to disable usb device.
    -                DIS_USB_DEVICE: u1,
    -                ///  Set this bit to disable the function that forces chip into download mode.
    -                DIS_FORCE_DOWNLOAD: u1,
    -                ///  Reserved (used for four backups method).
    -                RPT4_RESERVED6: u1,
    -                ///  Set this bit to disable CAN function.
    -                DIS_CAN: u1,
    -                ///  Set this bit to enable selection between usb_to_jtag and pad_to_jtag through strapping gpio10 when both reg_dis_usb_jtag and reg_dis_pad_jtag are equal to 0.
    -                JTAG_SEL_ENABLE: u1,
    -                ///  Set these bits to disable JTAG in the soft way (odd number 1 means disable ). JTAG can be enabled in HMAC module.
    -                SOFT_DIS_JTAG: u3,
    -                ///  Set this bit to disable JTAG in the hard way. JTAG is disabled permanently.
    -                DIS_PAD_JTAG: u1,
    -                ///  Set this bit to disable flash encryption when in download boot modes.
    -                DIS_DOWNLOAD_MANUAL_ENCRYPT: u1,
    -                ///  Controls single-end input threshold vrefh, 1.76 V to 2 V with step of 80 mV, stored in eFuse.
    -                USB_DREFH: u2,
    -                ///  Controls single-end input threshold vrefl, 0.8 V to 1.04 V with step of 80 mV, stored in eFuse.
    -                USB_DREFL: u2,
    -                ///  Set this bit to exchange USB D+ and D- pins.
    -                USB_EXCHG_PINS: u1,
    -                ///  Set this bit to vdd spi pin function as gpio.
    -                VDD_SPI_AS_GPIO: u1,
    -                ///  Enable btlc gpio.
    -                BTLC_GPIO_ENABLE: u2,
    -                ///  Set this bit to enable power glitch function.
    -                POWERGLITCH_EN: u1,
    -                ///  Sample delay configuration of power glitch.
    -                POWER_GLITCH_DSENSE: u2,
    -            }),
    -            ///  BLOCK0 data register 2.
    -            RD_REPEAT_DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Reserved (used for four backups method).
    -                RPT4_RESERVED2: u16,
    -                ///  Selects RTC watchdog timeout threshold, in unit of slow clock cycle. 0: 40000. 1: 80000. 2: 160000. 3:320000.
    -                WDT_DELAY_SEL: u2,
    -                ///  Set this bit to enable SPI boot encrypt/decrypt. Odd number of 1: enable. even number of 1: disable.
    -                SPI_BOOT_CRYPT_CNT: u3,
    -                ///  Set this bit to enable revoking first secure boot key.
    -                SECURE_BOOT_KEY_REVOKE0: u1,
    -                ///  Set this bit to enable revoking second secure boot key.
    -                SECURE_BOOT_KEY_REVOKE1: u1,
    -                ///  Set this bit to enable revoking third secure boot key.
    -                SECURE_BOOT_KEY_REVOKE2: u1,
    -                ///  Purpose of Key0.
    -                KEY_PURPOSE_0: u4,
    -                ///  Purpose of Key1.
    -                KEY_PURPOSE_1: u4,
    -            }),
    -            ///  BLOCK0 data register 3.
    -            RD_REPEAT_DATA2: mmio.Mmio(packed struct(u32) {
    -                ///  Purpose of Key2.
    -                KEY_PURPOSE_2: u4,
    -                ///  Purpose of Key3.
    -                KEY_PURPOSE_3: u4,
    -                ///  Purpose of Key4.
    -                KEY_PURPOSE_4: u4,
    -                ///  Purpose of Key5.
    -                KEY_PURPOSE_5: u4,
    -                ///  Reserved (used for four backups method).
    -                RPT4_RESERVED3: u4,
    -                ///  Set this bit to enable secure boot.
    -                SECURE_BOOT_EN: u1,
    -                ///  Set this bit to enable revoking aggressive secure boot.
    -                SECURE_BOOT_AGGRESSIVE_REVOKE: u1,
    -                ///  Reserved (used for four backups method).
    -                RPT4_RESERVED0: u6,
    -                ///  Configures flash waiting time after power-up, in unit of ms. If the value is less than 15, the waiting time is the configurable value; Otherwise, the waiting time is twice the configurable value.
    -                FLASH_TPUW: u4,
    -            }),
    -            ///  BLOCK0 data register 4.
    -            RD_REPEAT_DATA3: mmio.Mmio(packed struct(u32) {
    -                ///  Set this bit to disable download mode (boot_mode[3:0] = 0, 1, 2, 3, 6, 7).
    -                DIS_DOWNLOAD_MODE: u1,
    -                ///  Set this bit to disable Legacy SPI boot mode (boot_mode[3:0] = 4).
    -                DIS_LEGACY_SPI_BOOT: u1,
    -                ///  Selectes the default UART print channel. 0: UART0. 1: UART1.
    -                UART_PRINT_CHANNEL: u1,
    -                ///  Set ECC mode in ROM, 0: ROM would Enable Flash ECC 16to18 byte mode. 1:ROM would use 16to17 byte mode.
    -                FLASH_ECC_MODE: u1,
    -                ///  Set this bit to disable UART download mode through USB.
    -                DIS_USB_DOWNLOAD_MODE: u1,
    -                ///  Set this bit to enable secure UART download mode.
    -                ENABLE_SECURITY_DOWNLOAD: u1,
    -                ///  Set the default UARTboot message output mode. 00: Enabled. 01: Enabled when GPIO8 is low at reset. 10: Enabled when GPIO8 is high at reset. 11:disabled.
    -                UART_PRINT_CONTROL: u2,
    -                ///  GPIO33-GPIO37 power supply selection in ROM code. 0: VDD3P3_CPU. 1: VDD_SPI.
    -                PIN_POWER_SELECTION: u1,
    -                ///  Set the maximum lines of SPI flash. 0: four lines. 1: eight lines.
    -                FLASH_TYPE: u1,
    -                ///  Set Flash page size.
    -                FLASH_PAGE_SIZE: u2,
    -                ///  Set 1 to enable ECC for flash boot.
    -                FLASH_ECC_EN: u1,
    -                ///  Set this bit to force ROM code to send a resume command during SPI boot.
    -                FORCE_SEND_RESUME: u1,
    -                ///  Secure version (used by ESP-IDF anti-rollback feature).
    -                SECURE_VERSION: u16,
    -                ///  Reserved (used for four backups method).
    -                RPT4_RESERVED1: u2,
    -            }),
    -            ///  BLOCK0 data register 5.
    -            RD_REPEAT_DATA4: mmio.Mmio(packed struct(u32) {
    -                ///  Reserved (used for four backups method).
    -                RPT4_RESERVED4: u24,
    -                padding: u8,
    -            }),
    -            ///  BLOCK1 data register 0.
    -            RD_MAC_SPI_SYS_0: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the low 32 bits of MAC address.
    -                MAC_0: u32,
    -            }),
    -            ///  BLOCK1 data register 1.
    -            RD_MAC_SPI_SYS_1: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the high 16 bits of MAC address.
    -                MAC_1: u16,
    -                ///  Stores the zeroth part of SPI_PAD_CONF.
    -                SPI_PAD_CONF_0: u16,
    -            }),
    -            ///  BLOCK1 data register 2.
    -            RD_MAC_SPI_SYS_2: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the first part of SPI_PAD_CONF.
    -                SPI_PAD_CONF_1: u32,
    -            }),
    -            ///  BLOCK1 data register 3.
    -            RD_MAC_SPI_SYS_3: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the second part of SPI_PAD_CONF.
    -                SPI_PAD_CONF_2: u18,
    -                ///  Stores the fist 14 bits of the zeroth part of system data.
    -                SYS_DATA_PART0_0: u14,
    -            }),
    -            ///  BLOCK1 data register 4.
    -            RD_MAC_SPI_SYS_4: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the fist 32 bits of the zeroth part of system data.
    -                SYS_DATA_PART0_1: u32,
    -            }),
    -            ///  BLOCK1 data register 5.
    -            RD_MAC_SPI_SYS_5: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the second 32 bits of the zeroth part of system data.
    -                SYS_DATA_PART0_2: u32,
    -            }),
    -            ///  Register 0 of BLOCK2 (system).
    -            RD_SYS_PART1_DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the zeroth 32 bits of the first part of system data.
    -                SYS_DATA_PART1_0: u32,
    -            }),
    -            ///  Register 1 of BLOCK2 (system).
    -            RD_SYS_PART1_DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the first 32 bits of the first part of system data.
    -                SYS_DATA_PART1_1: u32,
    -            }),
    -            ///  Register 2 of BLOCK2 (system).
    -            RD_SYS_PART1_DATA2: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the second 32 bits of the first part of system data.
    -                SYS_DATA_PART1_2: u32,
    -            }),
    -            ///  Register 3 of BLOCK2 (system).
    -            RD_SYS_PART1_DATA3: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the third 32 bits of the first part of system data.
    -                SYS_DATA_PART1_3: u32,
    -            }),
    -            ///  Register 4 of BLOCK2 (system).
    -            RD_SYS_PART1_DATA4: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the fourth 32 bits of the first part of system data.
    -                SYS_DATA_PART1_4: u32,
    -            }),
    -            ///  Register 5 of BLOCK2 (system).
    -            RD_SYS_PART1_DATA5: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the fifth 32 bits of the first part of system data.
    -                SYS_DATA_PART1_5: u32,
    -            }),
    -            ///  Register 6 of BLOCK2 (system).
    -            RD_SYS_PART1_DATA6: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the sixth 32 bits of the first part of system data.
    -                SYS_DATA_PART1_6: u32,
    -            }),
    -            ///  Register 7 of BLOCK2 (system).
    -            RD_SYS_PART1_DATA7: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the seventh 32 bits of the first part of system data.
    -                SYS_DATA_PART1_7: u32,
    -            }),
    -            ///  Register 0 of BLOCK3 (user).
    -            RD_USR_DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the zeroth 32 bits of BLOCK3 (user).
    -                USR_DATA0: u32,
    -            }),
    -            ///  Register 1 of BLOCK3 (user).
    -            RD_USR_DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the first 32 bits of BLOCK3 (user).
    -                USR_DATA1: u32,
    -            }),
    -            ///  Register 2 of BLOCK3 (user).
    -            RD_USR_DATA2: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the second 32 bits of BLOCK3 (user).
    -                USR_DATA2: u32,
    -            }),
    -            ///  Register 3 of BLOCK3 (user).
    -            RD_USR_DATA3: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the third 32 bits of BLOCK3 (user).
    -                USR_DATA3: u32,
    -            }),
    -            ///  Register 4 of BLOCK3 (user).
    -            RD_USR_DATA4: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the fourth 32 bits of BLOCK3 (user).
    -                USR_DATA4: u32,
    -            }),
    -            ///  Register 5 of BLOCK3 (user).
    -            RD_USR_DATA5: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the fifth 32 bits of BLOCK3 (user).
    -                USR_DATA5: u32,
    -            }),
    -            ///  Register 6 of BLOCK3 (user).
    -            RD_USR_DATA6: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the sixth 32 bits of BLOCK3 (user).
    -                USR_DATA6: u32,
    -            }),
    -            ///  Register 7 of BLOCK3 (user).
    -            RD_USR_DATA7: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the seventh 32 bits of BLOCK3 (user).
    -                USR_DATA7: u32,
    -            }),
    -            ///  Register 0 of BLOCK4 (KEY0).
    -            RD_KEY0_DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the zeroth 32 bits of KEY0.
    -                KEY0_DATA0: u32,
    -            }),
    -            ///  Register 1 of BLOCK4 (KEY0).
    -            RD_KEY0_DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the first 32 bits of KEY0.
    -                KEY0_DATA1: u32,
    -            }),
    -            ///  Register 2 of BLOCK4 (KEY0).
    -            RD_KEY0_DATA2: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the second 32 bits of KEY0.
    -                KEY0_DATA2: u32,
    -            }),
    -            ///  Register 3 of BLOCK4 (KEY0).
    -            RD_KEY0_DATA3: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the third 32 bits of KEY0.
    -                KEY0_DATA3: u32,
    -            }),
    -            ///  Register 4 of BLOCK4 (KEY0).
    -            RD_KEY0_DATA4: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the fourth 32 bits of KEY0.
    -                KEY0_DATA4: u32,
    -            }),
    -            ///  Register 5 of BLOCK4 (KEY0).
    -            RD_KEY0_DATA5: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the fifth 32 bits of KEY0.
    -                KEY0_DATA5: u32,
    -            }),
    -            ///  Register 6 of BLOCK4 (KEY0).
    -            RD_KEY0_DATA6: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the sixth 32 bits of KEY0.
    -                KEY0_DATA6: u32,
    -            }),
    -            ///  Register 7 of BLOCK4 (KEY0).
    -            RD_KEY0_DATA7: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the seventh 32 bits of KEY0.
    -                KEY0_DATA7: u32,
    -            }),
    -            ///  Register 0 of BLOCK5 (KEY1).
    -            RD_KEY1_DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the zeroth 32 bits of KEY1.
    -                KEY1_DATA0: u32,
    -            }),
    -            ///  Register 1 of BLOCK5 (KEY1).
    -            RD_KEY1_DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the first 32 bits of KEY1.
    -                KEY1_DATA1: u32,
    -            }),
    -            ///  Register 2 of BLOCK5 (KEY1).
    -            RD_KEY1_DATA2: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the second 32 bits of KEY1.
    -                KEY1_DATA2: u32,
    -            }),
    -            ///  Register 3 of BLOCK5 (KEY1).
    -            RD_KEY1_DATA3: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the third 32 bits of KEY1.
    -                KEY1_DATA3: u32,
    -            }),
    -            ///  Register 4 of BLOCK5 (KEY1).
    -            RD_KEY1_DATA4: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the fourth 32 bits of KEY1.
    -                KEY1_DATA4: u32,
    -            }),
    -            ///  Register 5 of BLOCK5 (KEY1).
    -            RD_KEY1_DATA5: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the fifth 32 bits of KEY1.
    -                KEY1_DATA5: u32,
    -            }),
    -            ///  Register 6 of BLOCK5 (KEY1).
    -            RD_KEY1_DATA6: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the sixth 32 bits of KEY1.
    -                KEY1_DATA6: u32,
    -            }),
    -            ///  Register 7 of BLOCK5 (KEY1).
    -            RD_KEY1_DATA7: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the seventh 32 bits of KEY1.
    -                KEY1_DATA7: u32,
    -            }),
    -            ///  Register 0 of BLOCK6 (KEY2).
    -            RD_KEY2_DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the zeroth 32 bits of KEY2.
    -                KEY2_DATA0: u32,
    -            }),
    -            ///  Register 1 of BLOCK6 (KEY2).
    -            RD_KEY2_DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the first 32 bits of KEY2.
    -                KEY2_DATA1: u32,
    -            }),
    -            ///  Register 2 of BLOCK6 (KEY2).
    -            RD_KEY2_DATA2: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the second 32 bits of KEY2.
    -                KEY2_DATA2: u32,
    -            }),
    -            ///  Register 3 of BLOCK6 (KEY2).
    -            RD_KEY2_DATA3: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the third 32 bits of KEY2.
    -                KEY2_DATA3: u32,
    -            }),
    -            ///  Register 4 of BLOCK6 (KEY2).
    -            RD_KEY2_DATA4: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the fourth 32 bits of KEY2.
    -                KEY2_DATA4: u32,
    -            }),
    -            ///  Register 5 of BLOCK6 (KEY2).
    -            RD_KEY2_DATA5: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the fifth 32 bits of KEY2.
    -                KEY2_DATA5: u32,
    -            }),
    -            ///  Register 6 of BLOCK6 (KEY2).
    -            RD_KEY2_DATA6: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the sixth 32 bits of KEY2.
    -                KEY2_DATA6: u32,
    -            }),
    -            ///  Register 7 of BLOCK6 (KEY2).
    -            RD_KEY2_DATA7: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the seventh 32 bits of KEY2.
    -                KEY2_DATA7: u32,
    -            }),
    -            ///  Register 0 of BLOCK7 (KEY3).
    -            RD_KEY3_DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the zeroth 32 bits of KEY3.
    -                KEY3_DATA0: u32,
    -            }),
    -            ///  Register 1 of BLOCK7 (KEY3).
    -            RD_KEY3_DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the first 32 bits of KEY3.
    -                KEY3_DATA1: u32,
    -            }),
    -            ///  Register 2 of BLOCK7 (KEY3).
    -            RD_KEY3_DATA2: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the second 32 bits of KEY3.
    -                KEY3_DATA2: u32,
    -            }),
    -            ///  Register 3 of BLOCK7 (KEY3).
    -            RD_KEY3_DATA3: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the third 32 bits of KEY3.
    -                KEY3_DATA3: u32,
    -            }),
    -            ///  Register 4 of BLOCK7 (KEY3).
    -            RD_KEY3_DATA4: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the fourth 32 bits of KEY3.
    -                KEY3_DATA4: u32,
    -            }),
    -            ///  Register 5 of BLOCK7 (KEY3).
    -            RD_KEY3_DATA5: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the fifth 32 bits of KEY3.
    -                KEY3_DATA5: u32,
    -            }),
    -            ///  Register 6 of BLOCK7 (KEY3).
    -            RD_KEY3_DATA6: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the sixth 32 bits of KEY3.
    -                KEY3_DATA6: u32,
    -            }),
    -            ///  Register 7 of BLOCK7 (KEY3).
    -            RD_KEY3_DATA7: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the seventh 32 bits of KEY3.
    -                KEY3_DATA7: u32,
    -            }),
    -            ///  Register 0 of BLOCK8 (KEY4).
    -            RD_KEY4_DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the zeroth 32 bits of KEY4.
    -                KEY4_DATA0: u32,
    -            }),
    -            ///  Register 1 of BLOCK8 (KEY4).
    -            RD_KEY4_DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the first 32 bits of KEY4.
    -                KEY4_DATA1: u32,
    -            }),
    -            ///  Register 2 of BLOCK8 (KEY4).
    -            RD_KEY4_DATA2: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the second 32 bits of KEY4.
    -                KEY4_DATA2: u32,
    -            }),
    -            ///  Register 3 of BLOCK8 (KEY4).
    -            RD_KEY4_DATA3: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the third 32 bits of KEY4.
    -                KEY4_DATA3: u32,
    -            }),
    -            ///  Register 4 of BLOCK8 (KEY4).
    -            RD_KEY4_DATA4: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the fourth 32 bits of KEY4.
    -                KEY4_DATA4: u32,
    -            }),
    -            ///  Register 5 of BLOCK8 (KEY4).
    -            RD_KEY4_DATA5: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the fifth 32 bits of KEY4.
    -                KEY4_DATA5: u32,
    -            }),
    -            ///  Register 6 of BLOCK8 (KEY4).
    -            RD_KEY4_DATA6: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the sixth 32 bits of KEY4.
    -                KEY4_DATA6: u32,
    -            }),
    -            ///  Register 7 of BLOCK8 (KEY4).
    -            RD_KEY4_DATA7: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the seventh 32 bits of KEY4.
    -                KEY4_DATA7: u32,
    -            }),
    -            ///  Register 0 of BLOCK9 (KEY5).
    -            RD_KEY5_DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the zeroth 32 bits of KEY5.
    -                KEY5_DATA0: u32,
    -            }),
    -            ///  Register 1 of BLOCK9 (KEY5).
    -            RD_KEY5_DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the first 32 bits of KEY5.
    -                KEY5_DATA1: u32,
    -            }),
    -            ///  Register 2 of BLOCK9 (KEY5).
    -            RD_KEY5_DATA2: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the second 32 bits of KEY5.
    -                KEY5_DATA2: u32,
    -            }),
    -            ///  Register 3 of BLOCK9 (KEY5).
    -            RD_KEY5_DATA3: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the third 32 bits of KEY5.
    -                KEY5_DATA3: u32,
    -            }),
    -            ///  Register 4 of BLOCK9 (KEY5).
    -            RD_KEY5_DATA4: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the fourth 32 bits of KEY5.
    -                KEY5_DATA4: u32,
    -            }),
    -            ///  Register 5 of BLOCK9 (KEY5).
    -            RD_KEY5_DATA5: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the fifth 32 bits of KEY5.
    -                KEY5_DATA5: u32,
    -            }),
    -            ///  Register 6 of BLOCK9 (KEY5).
    -            RD_KEY5_DATA6: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the sixth 32 bits of KEY5.
    -                KEY5_DATA6: u32,
    -            }),
    -            ///  Register 7 of BLOCK9 (KEY5).
    -            RD_KEY5_DATA7: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the seventh 32 bits of KEY5.
    -                KEY5_DATA7: u32,
    -            }),
    -            ///  Register 0 of BLOCK10 (system).
    -            RD_SYS_PART2_DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the 0th 32 bits of the 2nd part of system data.
    -                SYS_DATA_PART2_0: u32,
    -            }),
    -            ///  Register 1 of BLOCK9 (KEY5).
    -            RD_SYS_PART2_DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the 1st 32 bits of the 2nd part of system data.
    -                SYS_DATA_PART2_1: u32,
    -            }),
    -            ///  Register 2 of BLOCK10 (system).
    -            RD_SYS_PART2_DATA2: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the 2nd 32 bits of the 2nd part of system data.
    -                SYS_DATA_PART2_2: u32,
    -            }),
    -            ///  Register 3 of BLOCK10 (system).
    -            RD_SYS_PART2_DATA3: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the 3rd 32 bits of the 2nd part of system data.
    -                SYS_DATA_PART2_3: u32,
    -            }),
    -            ///  Register 4 of BLOCK10 (system).
    -            RD_SYS_PART2_DATA4: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the 4th 32 bits of the 2nd part of system data.
    -                SYS_DATA_PART2_4: u32,
    -            }),
    -            ///  Register 5 of BLOCK10 (system).
    -            RD_SYS_PART2_DATA5: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the 5th 32 bits of the 2nd part of system data.
    -                SYS_DATA_PART2_5: u32,
    -            }),
    -            ///  Register 6 of BLOCK10 (system).
    -            RD_SYS_PART2_DATA6: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the 6th 32 bits of the 2nd part of system data.
    -                SYS_DATA_PART2_6: u32,
    -            }),
    -            ///  Register 7 of BLOCK10 (system).
    -            RD_SYS_PART2_DATA7: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the 7th 32 bits of the 2nd part of system data.
    -                SYS_DATA_PART2_7: u32,
    -            }),
    -            ///  Programming error record register 0 of BLOCK0.
    -            RD_REPEAT_ERR0: mmio.Mmio(packed struct(u32) {
    -                ///  If any bit in RD_DIS is 1, then it indicates a programming error.
    -                RD_DIS_ERR: u7,
    -                ///  If DIS_RTC_RAM_BOOT is 1, then it indicates a programming error.
    -                DIS_RTC_RAM_BOOT_ERR: u1,
    -                ///  If DIS_ICACHE is 1, then it indicates a programming error.
    -                DIS_ICACHE_ERR: u1,
    -                ///  If DIS_USB_JTAG is 1, then it indicates a programming error.
    -                DIS_USB_JTAG_ERR: u1,
    -                ///  If DIS_DOWNLOAD_ICACHE is 1, then it indicates a programming error.
    -                DIS_DOWNLOAD_ICACHE_ERR: u1,
    -                ///  If DIS_USB_DEVICE is 1, then it indicates a programming error.
    -                DIS_USB_DEVICE_ERR: u1,
    -                ///  If DIS_FORCE_DOWNLOAD is 1, then it indicates a programming error.
    -                DIS_FORCE_DOWNLOAD_ERR: u1,
    -                ///  Reserved.
    -                RPT4_RESERVED6_ERR: u1,
    -                ///  If DIS_CAN is 1, then it indicates a programming error.
    -                DIS_CAN_ERR: u1,
    -                ///  If JTAG_SEL_ENABLE is 1, then it indicates a programming error.
    -                JTAG_SEL_ENABLE_ERR: u1,
    -                ///  If SOFT_DIS_JTAG is 1, then it indicates a programming error.
    -                SOFT_DIS_JTAG_ERR: u3,
    -                ///  If DIS_PAD_JTAG is 1, then it indicates a programming error.
    -                DIS_PAD_JTAG_ERR: u1,
    -                ///  If DIS_DOWNLOAD_MANUAL_ENCRYPT is 1, then it indicates a programming error.
    -                DIS_DOWNLOAD_MANUAL_ENCRYPT_ERR: u1,
    -                ///  If any bit in USB_DREFH is 1, then it indicates a programming error.
    -                USB_DREFH_ERR: u2,
    -                ///  If any bit in USB_DREFL is 1, then it indicates a programming error.
    -                USB_DREFL_ERR: u2,
    -                ///  If USB_EXCHG_PINS is 1, then it indicates a programming error.
    -                USB_EXCHG_PINS_ERR: u1,
    -                ///  If VDD_SPI_AS_GPIO is 1, then it indicates a programming error.
    -                VDD_SPI_AS_GPIO_ERR: u1,
    -                ///  If any bit in BTLC_GPIO_ENABLE is 1, then it indicates a programming error.
    -                BTLC_GPIO_ENABLE_ERR: u2,
    -                ///  If POWERGLITCH_EN is 1, then it indicates a programming error.
    -                POWERGLITCH_EN_ERR: u1,
    -                ///  If any bit in POWER_GLITCH_DSENSE is 1, then it indicates a programming error.
    -                POWER_GLITCH_DSENSE_ERR: u2,
    -            }),
    -            ///  Programming error record register 1 of BLOCK0.
    -            RD_REPEAT_ERR1: mmio.Mmio(packed struct(u32) {
    -                ///  Reserved.
    -                RPT4_RESERVED2_ERR: u16,
    -                ///  If any bit in WDT_DELAY_SEL is 1, then it indicates a programming error.
    -                WDT_DELAY_SEL_ERR: u2,
    -                ///  If any bit in SPI_BOOT_CRYPT_CNT is 1, then it indicates a programming error.
    -                SPI_BOOT_CRYPT_CNT_ERR: u3,
    -                ///  If SECURE_BOOT_KEY_REVOKE0 is 1, then it indicates a programming error.
    -                SECURE_BOOT_KEY_REVOKE0_ERR: u1,
    -                ///  If SECURE_BOOT_KEY_REVOKE1 is 1, then it indicates a programming error.
    -                SECURE_BOOT_KEY_REVOKE1_ERR: u1,
    -                ///  If SECURE_BOOT_KEY_REVOKE2 is 1, then it indicates a programming error.
    -                SECURE_BOOT_KEY_REVOKE2_ERR: u1,
    -                ///  If any bit in KEY_PURPOSE_0 is 1, then it indicates a programming error.
    -                KEY_PURPOSE_0_ERR: u4,
    -                ///  If any bit in KEY_PURPOSE_1 is 1, then it indicates a programming error.
    -                KEY_PURPOSE_1_ERR: u4,
    -            }),
    -            ///  Programming error record register 2 of BLOCK0.
    -            RD_REPEAT_ERR2: mmio.Mmio(packed struct(u32) {
    -                ///  If any bit in KEY_PURPOSE_2 is 1, then it indicates a programming error.
    -                KEY_PURPOSE_2_ERR: u4,
    -                ///  If any bit in KEY_PURPOSE_3 is 1, then it indicates a programming error.
    -                KEY_PURPOSE_3_ERR: u4,
    -                ///  If any bit in KEY_PURPOSE_4 is 1, then it indicates a programming error.
    -                KEY_PURPOSE_4_ERR: u4,
    -                ///  If any bit in KEY_PURPOSE_5 is 1, then it indicates a programming error.
    -                KEY_PURPOSE_5_ERR: u4,
    -                ///  Reserved.
    -                RPT4_RESERVED3_ERR: u4,
    -                ///  If SECURE_BOOT_EN is 1, then it indicates a programming error.
    -                SECURE_BOOT_EN_ERR: u1,
    -                ///  If SECURE_BOOT_AGGRESSIVE_REVOKE is 1, then it indicates a programming error.
    -                SECURE_BOOT_AGGRESSIVE_REVOKE_ERR: u1,
    -                ///  Reserved.
    -                RPT4_RESERVED0_ERR: u6,
    -                ///  If any bit in FLASH_TPUM is 1, then it indicates a programming error.
    -                FLASH_TPUW_ERR: u4,
    -            }),
    -            ///  Programming error record register 3 of BLOCK0.
    -            RD_REPEAT_ERR3: mmio.Mmio(packed struct(u32) {
    -                ///  If DIS_DOWNLOAD_MODE is 1, then it indicates a programming error.
    -                DIS_DOWNLOAD_MODE_ERR: u1,
    -                ///  If DIS_LEGACY_SPI_BOOT is 1, then it indicates a programming error.
    -                DIS_LEGACY_SPI_BOOT_ERR: u1,
    -                ///  If UART_PRINT_CHANNEL is 1, then it indicates a programming error.
    -                UART_PRINT_CHANNEL_ERR: u1,
    -                ///  If FLASH_ECC_MODE is 1, then it indicates a programming error.
    -                FLASH_ECC_MODE_ERR: u1,
    -                ///  If DIS_USB_DOWNLOAD_MODE is 1, then it indicates a programming error.
    -                DIS_USB_DOWNLOAD_MODE_ERR: u1,
    -                ///  If ENABLE_SECURITY_DOWNLOAD is 1, then it indicates a programming error.
    -                ENABLE_SECURITY_DOWNLOAD_ERR: u1,
    -                ///  If any bit in UART_PRINT_CONTROL is 1, then it indicates a programming error.
    -                UART_PRINT_CONTROL_ERR: u2,
    -                ///  If PIN_POWER_SELECTION is 1, then it indicates a programming error.
    -                PIN_POWER_SELECTION_ERR: u1,
    -                ///  If FLASH_TYPE is 1, then it indicates a programming error.
    -                FLASH_TYPE_ERR: u1,
    -                ///  If any bits in FLASH_PAGE_SIZE is 1, then it indicates a programming error.
    -                FLASH_PAGE_SIZE_ERR: u2,
    -                ///  If FLASH_ECC_EN_ERR is 1, then it indicates a programming error.
    -                FLASH_ECC_EN_ERR: u1,
    -                ///  If FORCE_SEND_RESUME is 1, then it indicates a programming error.
    -                FORCE_SEND_RESUME_ERR: u1,
    -                ///  If any bit in SECURE_VERSION is 1, then it indicates a programming error.
    -                SECURE_VERSION_ERR: u16,
    -                ///  Reserved.
    -                RPT4_RESERVED1_ERR: u2,
    -            }),
    -            reserved400: [4]u8,
    -            ///  Programming error record register 4 of BLOCK0.
    -            RD_REPEAT_ERR4: mmio.Mmio(packed struct(u32) {
    -                ///  Reserved.
    -                RPT4_RESERVED4_ERR: u24,
    -                padding: u8,
    -            }),
    -            reserved448: [44]u8,
    -            ///  Programming error record register 0 of BLOCK1-10.
    -            RD_RS_ERR0: mmio.Mmio(packed struct(u32) {
    -                ///  The value of this signal means the number of error bytes.
    -                MAC_SPI_8M_ERR_NUM: u3,
    -                ///  0: Means no failure and that the data of MAC_SPI_8M is reliable 1: Means that programming user data failed and the number of error bytes is over 6.
    -                MAC_SPI_8M_FAIL: u1,
    -                ///  The value of this signal means the number of error bytes.
    -                SYS_PART1_NUM: u3,
    -                ///  0: Means no failure and that the data of system part1 is reliable 1: Means that programming user data failed and the number of error bytes is over 6.
    -                SYS_PART1_FAIL: u1,
    -                ///  The value of this signal means the number of error bytes.
    -                USR_DATA_ERR_NUM: u3,
    -                ///  0: Means no failure and that the user data is reliable 1: Means that programming user data failed and the number of error bytes is over 6.
    -                USR_DATA_FAIL: u1,
    -                ///  The value of this signal means the number of error bytes.
    -                KEY0_ERR_NUM: u3,
    -                ///  0: Means no failure and that the data of key0 is reliable 1: Means that programming key0 failed and the number of error bytes is over 6.
    -                KEY0_FAIL: u1,
    -                ///  The value of this signal means the number of error bytes.
    -                KEY1_ERR_NUM: u3,
    -                ///  0: Means no failure and that the data of key1 is reliable 1: Means that programming key1 failed and the number of error bytes is over 6.
    -                KEY1_FAIL: u1,
    -                ///  The value of this signal means the number of error bytes.
    -                KEY2_ERR_NUM: u3,
    -                ///  0: Means no failure and that the data of key2 is reliable 1: Means that programming key2 failed and the number of error bytes is over 6.
    -                KEY2_FAIL: u1,
    -                ///  The value of this signal means the number of error bytes.
    -                KEY3_ERR_NUM: u3,
    -                ///  0: Means no failure and that the data of key3 is reliable 1: Means that programming key3 failed and the number of error bytes is over 6.
    -                KEY3_FAIL: u1,
    -                ///  The value of this signal means the number of error bytes.
    -                KEY4_ERR_NUM: u3,
    -                ///  0: Means no failure and that the data of key4 is reliable 1: Means that programming key4 failed and the number of error bytes is over 6.
    -                KEY4_FAIL: u1,
    -            }),
    -            ///  Programming error record register 1 of BLOCK1-10.
    -            RD_RS_ERR1: mmio.Mmio(packed struct(u32) {
    -                ///  The value of this signal means the number of error bytes.
    -                KEY5_ERR_NUM: u3,
    -                ///  0: Means no failure and that the data of KEY5 is reliable 1: Means that programming user data failed and the number of error bytes is over 6.
    -                KEY5_FAIL: u1,
    -                ///  The value of this signal means the number of error bytes.
    -                SYS_PART2_ERR_NUM: u3,
    -                ///  0: Means no failure and that the data of system part2 is reliable 1: Means that programming user data failed and the number of error bytes is over 6.
    -                SYS_PART2_FAIL: u1,
    -                padding: u24,
    -            }),
    -            ///  eFuse clcok configuration register.
    -            CLK: mmio.Mmio(packed struct(u32) {
    -                ///  Set this bit to force eFuse SRAM into power-saving mode.
    -                EFUSE_MEM_FORCE_PD: u1,
    -                ///  Set this bit and force to activate clock signal of eFuse SRAM.
    -                MEM_CLK_FORCE_ON: u1,
    -                ///  Set this bit to force eFuse SRAM into working mode.
    -                EFUSE_MEM_FORCE_PU: u1,
    -                reserved16: u13,
    -                ///  Set this bit and force to enable clock signal of eFuse memory.
    -                EN: u1,
    -                padding: u15,
    -            }),
    -            ///  eFuse operation mode configuraiton register;
    -            CONF: mmio.Mmio(packed struct(u32) {
    -                ///  0x5A5A: Operate programming command 0x5AA5: Operate read command.
    -                OP_CODE: u16,
    -                padding: u16,
    -            }),
    -            ///  eFuse status register.
    -            STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  Indicates the state of the eFuse state machine.
    -                STATE: u4,
    -                ///  The value of OTP_LOAD_SW.
    -                OTP_LOAD_SW: u1,
    -                ///  The value of OTP_VDDQ_C_SYNC2.
    -                OTP_VDDQ_C_SYNC2: u1,
    -                ///  The value of OTP_STROBE_SW.
    -                OTP_STROBE_SW: u1,
    -                ///  The value of OTP_CSB_SW.
    -                OTP_CSB_SW: u1,
    -                ///  The value of OTP_PGENB_SW.
    -                OTP_PGENB_SW: u1,
    -                ///  The value of OTP_VDDQ_IS_SW.
    -                OTP_VDDQ_IS_SW: u1,
    -                ///  Indicates the number of error bits during programming BLOCK0.
    -                REPEAT_ERR_CNT: u8,
    -                padding: u14,
    -            }),
    -            ///  eFuse command register.
    -            CMD: mmio.Mmio(packed struct(u32) {
    -                ///  Set this bit to send read command.
    -                READ_CMD: u1,
    -                ///  Set this bit to send programming command.
    -                PGM_CMD: u1,
    -                ///  The serial number of the block to be programmed. Value 0-10 corresponds to block number 0-10, respectively.
    -                BLK_NUM: u4,
    -                padding: u26,
    -            }),
    -            ///  eFuse raw interrupt register.
    -            INT_RAW: mmio.Mmio(packed struct(u32) {
    -                ///  The raw bit signal for read_done interrupt.
    -                READ_DONE_INT_RAW: u1,
    -                ///  The raw bit signal for pgm_done interrupt.
    -                PGM_DONE_INT_RAW: u1,
    -                padding: u30,
    -            }),
    -            ///  eFuse interrupt status register.
    -            INT_ST: mmio.Mmio(packed struct(u32) {
    -                ///  The status signal for read_done interrupt.
    -                READ_DONE_INT_ST: u1,
    -                ///  The status signal for pgm_done interrupt.
    -                PGM_DONE_INT_ST: u1,
    -                padding: u30,
    -            }),
    -            ///  eFuse interrupt enable register.
    -            INT_ENA: mmio.Mmio(packed struct(u32) {
    -                ///  The enable signal for read_done interrupt.
    -                READ_DONE_INT_ENA: u1,
    -                ///  The enable signal for pgm_done interrupt.
    -                PGM_DONE_INT_ENA: u1,
    -                padding: u30,
    -            }),
    -            ///  eFuse interrupt clear register.
    -            INT_CLR: mmio.Mmio(packed struct(u32) {
    -                ///  The clear signal for read_done interrupt.
    -                READ_DONE_INT_CLR: u1,
    -                ///  The clear signal for pgm_done interrupt.
    -                PGM_DONE_INT_CLR: u1,
    -                padding: u30,
    -            }),
    -            ///  Controls the eFuse programming voltage.
    -            DAC_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  Controls the division factor of the rising clock of the programming voltage.
    -                DAC_CLK_DIV: u8,
    -                ///  Don't care.
    -                DAC_CLK_PAD_SEL: u1,
    -                ///  Controls the rising period of the programming voltage.
    -                DAC_NUM: u8,
    -                ///  Reduces the power supply of the programming voltage.
    -                OE_CLR: u1,
    -                padding: u14,
    -            }),
    -            ///  Configures read timing parameters.
    -            RD_TIM_CONF: mmio.Mmio(packed struct(u32) {
    -                reserved24: u24,
    -                ///  Configures the initial read time of eFuse.
    -                READ_INIT_NUM: u8,
    -            }),
    -            ///  Configurarion register 1 of eFuse programming timing parameters.
    -            WR_TIM_CONF1: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  Configures the power up time for VDDQ.
    -                PWR_ON_NUM: u16,
    -                padding: u8,
    -            }),
    -            ///  Configurarion register 2 of eFuse programming timing parameters.
    -            WR_TIM_CONF2: mmio.Mmio(packed struct(u32) {
    -                ///  Configures the power outage time for VDDQ.
    -                PWR_OFF_NUM: u16,
    -                padding: u16,
    -            }),
    -            reserved508: [4]u8,
    -            ///  eFuse version register.
    -            DATE: mmio.Mmio(packed struct(u32) {
    -                ///  Stores eFuse version.
    -                DATE: u28,
    -                padding: u4,
    -            }),
    -        };
    -
    -        ///  External Memory
    -        pub const EXTMEM = extern struct {
    -            ///  This description will be updated in the near future.
    -            ICACHE_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to activate the data cache. 0: disable, 1: enable
    -                ICACHE_ENABLE: u1,
    -                padding: u31,
    -            }),
    -            ///  This description will be updated in the near future.
    -            ICACHE_CTRL1: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to disable core0 ibus, 0: enable, 1: disable
    -                ICACHE_SHUT_IBUS: u1,
    -                ///  The bit is used to disable core1 ibus, 0: enable, 1: disable
    -                ICACHE_SHUT_DBUS: u1,
    -                padding: u30,
    -            }),
    -            ///  This description will be updated in the near future.
    -            ICACHE_TAG_POWER_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to close clock gating of icache tag memory. 1: close gating, 0: open clock gating.
    -                ICACHE_TAG_MEM_FORCE_ON: u1,
    -                ///  The bit is used to power icache tag memory down, 0: follow rtc_lslp, 1: power down
    -                ICACHE_TAG_MEM_FORCE_PD: u1,
    -                ///  The bit is used to power icache tag memory up, 0: follow rtc_lslp, 1: power up
    -                ICACHE_TAG_MEM_FORCE_PU: u1,
    -                padding: u29,
    -            }),
    -            ///  This description will be updated in the near future.
    -            ICACHE_PRELOCK_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to enable the first section of prelock function.
    -                ICACHE_PRELOCK_SCT0_EN: u1,
    -                ///  The bit is used to enable the second section of prelock function.
    -                ICACHE_PRELOCK_SCT1_EN: u1,
    -                padding: u30,
    -            }),
    -            ///  This description will be updated in the near future.
    -            ICACHE_PRELOCK_SCT0_ADDR: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to configure the first start virtual address of data prelock, which is combined with ICACHE_PRELOCK_SCT0_SIZE_REG
    -                ICACHE_PRELOCK_SCT0_ADDR: u32,
    -            }),
    -            ///  This description will be updated in the near future.
    -            ICACHE_PRELOCK_SCT1_ADDR: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to configure the second start virtual address of data prelock, which is combined with ICACHE_PRELOCK_SCT1_SIZE_REG
    -                ICACHE_PRELOCK_SCT1_ADDR: u32,
    -            }),
    -            ///  This description will be updated in the near future.
    -            ICACHE_PRELOCK_SCT_SIZE: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to configure the second length of data locking, which is combined with ICACHE_PRELOCK_SCT1_ADDR_REG
    -                ICACHE_PRELOCK_SCT1_SIZE: u16,
    -                ///  The bits are used to configure the first length of data locking, which is combined with ICACHE_PRELOCK_SCT0_ADDR_REG
    -                ICACHE_PRELOCK_SCT0_SIZE: u16,
    -            }),
    -            ///  This description will be updated in the near future.
    -            ICACHE_LOCK_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to enable lock operation. It will be cleared by hardware after lock operation done.
    -                ICACHE_LOCK_ENA: u1,
    -                ///  The bit is used to enable unlock operation. It will be cleared by hardware after unlock operation done.
    -                ICACHE_UNLOCK_ENA: u1,
    -                ///  The bit is used to indicate unlock/lock operation is finished.
    -                ICACHE_LOCK_DONE: u1,
    -                padding: u29,
    -            }),
    -            ///  This description will be updated in the near future.
    -            ICACHE_LOCK_ADDR: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to configure the start virtual address for lock operations. It should be combined with ICACHE_LOCK_SIZE_REG.
    -                ICACHE_LOCK_ADDR: u32,
    -            }),
    -            ///  This description will be updated in the near future.
    -            ICACHE_LOCK_SIZE: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to configure the length for lock operations. The bits are the counts of cache block. It should be combined with ICACHE_LOCK_ADDR_REG.
    -                ICACHE_LOCK_SIZE: u16,
    -                padding: u16,
    -            }),
    -            ///  This description will be updated in the near future.
    -            ICACHE_SYNC_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to enable invalidate operation. It will be cleared by hardware after invalidate operation done.
    -                ICACHE_INVALIDATE_ENA: u1,
    -                ///  The bit is used to indicate invalidate operation is finished.
    -                ICACHE_SYNC_DONE: u1,
    -                padding: u30,
    -            }),
    -            ///  This description will be updated in the near future.
    -            ICACHE_SYNC_ADDR: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to configure the start virtual address for clean operations. It should be combined with ICACHE_SYNC_SIZE_REG.
    -                ICACHE_SYNC_ADDR: u32,
    -            }),
    -            ///  This description will be updated in the near future.
    -            ICACHE_SYNC_SIZE: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to configure the length for sync operations. The bits are the counts of cache block. It should be combined with ICACHE_SYNC_ADDR_REG.
    -                ICACHE_SYNC_SIZE: u23,
    -                padding: u9,
    -            }),
    -            ///  This description will be updated in the near future.
    -            ICACHE_PRELOAD_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to enable preload operation. It will be cleared by hardware after preload operation done.
    -                ICACHE_PRELOAD_ENA: u1,
    -                ///  The bit is used to indicate preload operation is finished.
    -                ICACHE_PRELOAD_DONE: u1,
    -                ///  The bit is used to configure the direction of preload operation. 1: descending, 0: ascending.
    -                ICACHE_PRELOAD_ORDER: u1,
    -                padding: u29,
    -            }),
    -            ///  This description will be updated in the near future.
    -            ICACHE_PRELOAD_ADDR: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to configure the start virtual address for preload operation. It should be combined with ICACHE_PRELOAD_SIZE_REG.
    -                ICACHE_PRELOAD_ADDR: u32,
    -            }),
    -            ///  This description will be updated in the near future.
    -            ICACHE_PRELOAD_SIZE: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to configure the length for preload operation. The bits are the counts of cache block. It should be combined with ICACHE_PRELOAD_ADDR_REG..
    -                ICACHE_PRELOAD_SIZE: u16,
    -                padding: u16,
    -            }),
    -            ///  This description will be updated in the near future.
    -            ICACHE_AUTOLOAD_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to enable the first section for autoload operation.
    -                ICACHE_AUTOLOAD_SCT0_ENA: u1,
    -                ///  The bits are used to enable the second section for autoload operation.
    -                ICACHE_AUTOLOAD_SCT1_ENA: u1,
    -                ///  The bit is used to enable and disable autoload operation. It is combined with icache_autoload_done. 1: enable, 0: disable.
    -                ICACHE_AUTOLOAD_ENA: u1,
    -                ///  The bit is used to indicate autoload operation is finished.
    -                ICACHE_AUTOLOAD_DONE: u1,
    -                ///  The bits are used to configure the direction of autoload. 1: descending, 0: ascending.
    -                ICACHE_AUTOLOAD_ORDER: u1,
    -                ///  The bits are used to configure trigger conditions for autoload. 0/3: cache miss, 1: cache hit, 2: both cache miss and hit.
    -                ICACHE_AUTOLOAD_RQST: u2,
    -                padding: u25,
    -            }),
    -            ///  This description will be updated in the near future.
    -            ICACHE_AUTOLOAD_SCT0_ADDR: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to configure the start virtual address of the first section for autoload operation. It should be combined with icache_autoload_sct0_ena.
    -                ICACHE_AUTOLOAD_SCT0_ADDR: u32,
    -            }),
    -            ///  This description will be updated in the near future.
    -            ICACHE_AUTOLOAD_SCT0_SIZE: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to configure the length of the first section for autoload operation. It should be combined with icache_autoload_sct0_ena.
    -                ICACHE_AUTOLOAD_SCT0_SIZE: u27,
    -                padding: u5,
    -            }),
    -            ///  This description will be updated in the near future.
    -            ICACHE_AUTOLOAD_SCT1_ADDR: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to configure the start virtual address of the second section for autoload operation. It should be combined with icache_autoload_sct1_ena.
    -                ICACHE_AUTOLOAD_SCT1_ADDR: u32,
    -            }),
    -            ///  This description will be updated in the near future.
    -            ICACHE_AUTOLOAD_SCT1_SIZE: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to configure the length of the second section for autoload operation. It should be combined with icache_autoload_sct1_ena.
    -                ICACHE_AUTOLOAD_SCT1_SIZE: u27,
    -                padding: u5,
    -            }),
    -            ///  This description will be updated in the near future.
    -            IBUS_TO_FLASH_START_VADDR: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to configure the start virtual address of ibus to access flash. The register is used to give constraints to ibus access counter.
    -                IBUS_TO_FLASH_START_VADDR: u32,
    -            }),
    -            ///  This description will be updated in the near future.
    -            IBUS_TO_FLASH_END_VADDR: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to configure the end virtual address of ibus to access flash. The register is used to give constraints to ibus access counter.
    -                IBUS_TO_FLASH_END_VADDR: u32,
    -            }),
    -            ///  This description will be updated in the near future.
    -            DBUS_TO_FLASH_START_VADDR: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to configure the start virtual address of dbus to access flash. The register is used to give constraints to dbus access counter.
    -                DBUS_TO_FLASH_START_VADDR: u32,
    -            }),
    -            ///  This description will be updated in the near future.
    -            DBUS_TO_FLASH_END_VADDR: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to configure the end virtual address of dbus to access flash. The register is used to give constraints to dbus access counter.
    -                DBUS_TO_FLASH_END_VADDR: u32,
    -            }),
    -            ///  This description will be updated in the near future.
    -            CACHE_ACS_CNT_CLR: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to clear ibus counter.
    -                IBUS_ACS_CNT_CLR: u1,
    -                ///  The bit is used to clear dbus counter.
    -                DBUS_ACS_CNT_CLR: u1,
    -                padding: u30,
    -            }),
    -            ///  This description will be updated in the near future.
    -            IBUS_ACS_MISS_CNT: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to count the number of the cache miss caused by ibus access flash.
    -                IBUS_ACS_MISS_CNT: u32,
    -            }),
    -            ///  This description will be updated in the near future.
    -            IBUS_ACS_CNT: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to count the number of ibus access flash through icache.
    -                IBUS_ACS_CNT: u32,
    -            }),
    -            ///  This description will be updated in the near future.
    -            DBUS_ACS_FLASH_MISS_CNT: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to count the number of the cache miss caused by dbus access flash.
    -                DBUS_ACS_FLASH_MISS_CNT: u32,
    -            }),
    -            ///  This description will be updated in the near future.
    -            DBUS_ACS_CNT: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to count the number of dbus access flash through icache.
    -                DBUS_ACS_CNT: u32,
    -            }),
    -            ///  This description will be updated in the near future.
    -            CACHE_ILG_INT_ENA: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to enable interrupt by sync configurations fault.
    -                ICACHE_SYNC_OP_FAULT_INT_ENA: u1,
    -                ///  The bit is used to enable interrupt by preload configurations fault.
    -                ICACHE_PRELOAD_OP_FAULT_INT_ENA: u1,
    -                reserved5: u3,
    -                ///  The bit is used to enable interrupt by mmu entry fault.
    -                MMU_ENTRY_FAULT_INT_ENA: u1,
    -                reserved7: u1,
    -                ///  The bit is used to enable interrupt by ibus counter overflow.
    -                IBUS_CNT_OVF_INT_ENA: u1,
    -                ///  The bit is used to enable interrupt by dbus counter overflow.
    -                DBUS_CNT_OVF_INT_ENA: u1,
    -                padding: u23,
    -            }),
    -            ///  This description will be updated in the near future.
    -            CACHE_ILG_INT_CLR: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to clear interrupt by sync configurations fault.
    -                ICACHE_SYNC_OP_FAULT_INT_CLR: u1,
    -                ///  The bit is used to clear interrupt by preload configurations fault.
    -                ICACHE_PRELOAD_OP_FAULT_INT_CLR: u1,
    -                reserved5: u3,
    -                ///  The bit is used to clear interrupt by mmu entry fault.
    -                MMU_ENTRY_FAULT_INT_CLR: u1,
    -                reserved7: u1,
    -                ///  The bit is used to clear interrupt by ibus counter overflow.
    -                IBUS_CNT_OVF_INT_CLR: u1,
    -                ///  The bit is used to clear interrupt by dbus counter overflow.
    -                DBUS_CNT_OVF_INT_CLR: u1,
    -                padding: u23,
    -            }),
    -            ///  This description will be updated in the near future.
    -            CACHE_ILG_INT_ST: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to indicate interrupt by sync configurations fault.
    -                ICACHE_SYNC_OP_FAULT_ST: u1,
    -                ///  The bit is used to indicate interrupt by preload configurations fault.
    -                ICACHE_PRELOAD_OP_FAULT_ST: u1,
    -                reserved5: u3,
    -                ///  The bit is used to indicate interrupt by mmu entry fault.
    -                MMU_ENTRY_FAULT_ST: u1,
    -                reserved7: u1,
    -                ///  The bit is used to indicate interrupt by ibus access flash/spiram counter overflow.
    -                IBUS_ACS_CNT_OVF_ST: u1,
    -                ///  The bit is used to indicate interrupt by ibus access flash/spiram miss counter overflow.
    -                IBUS_ACS_MISS_CNT_OVF_ST: u1,
    -                ///  The bit is used to indicate interrupt by dbus access flash/spiram counter overflow.
    -                DBUS_ACS_CNT_OVF_ST: u1,
    -                ///  The bit is used to indicate interrupt by dbus access flash miss counter overflow.
    -                DBUS_ACS_FLASH_MISS_CNT_OVF_ST: u1,
    -                padding: u21,
    -            }),
    -            ///  This description will be updated in the near future.
    -            CORE0_ACS_CACHE_INT_ENA: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to enable interrupt by cpu access icache while the corresponding ibus is disabled which include speculative access.
    -                CORE0_IBUS_ACS_MSK_IC_INT_ENA: u1,
    -                ///  The bit is used to enable interrupt by ibus trying to write icache
    -                CORE0_IBUS_WR_IC_INT_ENA: u1,
    -                ///  The bit is used to enable interrupt by authentication fail.
    -                CORE0_IBUS_REJECT_INT_ENA: u1,
    -                ///  The bit is used to enable interrupt by cpu access icache while the corresponding dbus is disabled which include speculative access.
    -                CORE0_DBUS_ACS_MSK_IC_INT_ENA: u1,
    -                ///  The bit is used to enable interrupt by authentication fail.
    -                CORE0_DBUS_REJECT_INT_ENA: u1,
    -                ///  The bit is used to enable interrupt by dbus trying to write icache
    -                CORE0_DBUS_WR_IC_INT_ENA: u1,
    -                padding: u26,
    -            }),
    -            ///  This description will be updated in the near future.
    -            CORE0_ACS_CACHE_INT_CLR: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to clear interrupt by cpu access icache while the corresponding ibus is disabled or icache is disabled which include speculative access.
    -                CORE0_IBUS_ACS_MSK_IC_INT_CLR: u1,
    -                ///  The bit is used to clear interrupt by ibus trying to write icache
    -                CORE0_IBUS_WR_IC_INT_CLR: u1,
    -                ///  The bit is used to clear interrupt by authentication fail.
    -                CORE0_IBUS_REJECT_INT_CLR: u1,
    -                ///  The bit is used to clear interrupt by cpu access icache while the corresponding dbus is disabled or icache is disabled which include speculative access.
    -                CORE0_DBUS_ACS_MSK_IC_INT_CLR: u1,
    -                ///  The bit is used to clear interrupt by authentication fail.
    -                CORE0_DBUS_REJECT_INT_CLR: u1,
    -                ///  The bit is used to clear interrupt by dbus trying to write icache
    -                CORE0_DBUS_WR_IC_INT_CLR: u1,
    -                padding: u26,
    -            }),
    -            ///  This description will be updated in the near future.
    -            CORE0_ACS_CACHE_INT_ST: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to indicate interrupt by cpu access icache while the core0_ibus is disabled or icache is disabled which include speculative access.
    -                CORE0_IBUS_ACS_MSK_ICACHE_ST: u1,
    -                ///  The bit is used to indicate interrupt by ibus trying to write icache
    -                CORE0_IBUS_WR_ICACHE_ST: u1,
    -                ///  The bit is used to indicate interrupt by authentication fail.
    -                CORE0_IBUS_REJECT_ST: u1,
    -                ///  The bit is used to indicate interrupt by cpu access icache while the core0_dbus is disabled or icache is disabled which include speculative access.
    -                CORE0_DBUS_ACS_MSK_ICACHE_ST: u1,
    -                ///  The bit is used to indicate interrupt by authentication fail.
    -                CORE0_DBUS_REJECT_ST: u1,
    -                ///  The bit is used to indicate interrupt by dbus trying to write icache
    -                CORE0_DBUS_WR_ICACHE_ST: u1,
    -                padding: u26,
    -            }),
    -            ///  This description will be updated in the near future.
    -            CORE0_DBUS_REJECT_ST: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to indicate the attribute of CPU access dbus when authentication fail. 0: invalidate, 1: execute-able, 2: read-able, 4: write-able.
    -                CORE0_DBUS_ATTR: u3,
    -                ///  The bit is used to indicate the world of CPU access dbus when authentication fail. 0: WORLD0, 1: WORLD1
    -                CORE0_DBUS_WORLD: u1,
    -                padding: u28,
    -            }),
    -            ///  This description will be updated in the near future.
    -            CORE0_DBUS_REJECT_VADDR: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to indicate the virtual address of CPU access dbus when authentication fail.
    -                CORE0_DBUS_VADDR: u32,
    -            }),
    -            ///  This description will be updated in the near future.
    -            CORE0_IBUS_REJECT_ST: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to indicate the attribute of CPU access ibus when authentication fail. 0: invalidate, 1: execute-able, 2: read-able
    -                CORE0_IBUS_ATTR: u3,
    -                ///  The bit is used to indicate the world of CPU access ibus when authentication fail. 0: WORLD0, 1: WORLD1
    -                CORE0_IBUS_WORLD: u1,
    -                padding: u28,
    -            }),
    -            ///  This description will be updated in the near future.
    -            CORE0_IBUS_REJECT_VADDR: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to indicate the virtual address of CPU access ibus when authentication fail.
    -                CORE0_IBUS_VADDR: u32,
    -            }),
    -            ///  This description will be updated in the near future.
    -            CACHE_MMU_FAULT_CONTENT: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to indicate the content of mmu entry which cause mmu fault..
    -                CACHE_MMU_FAULT_CONTENT: u10,
    -                ///  The right-most 3 bits are used to indicate the operations which cause mmu fault occurrence. 0: default, 1: cpu miss, 2: preload miss, 3: writeback, 4: cpu miss evict recovery address, 5: load miss evict recovery address, 6: external dma tx, 7: external dma rx. The most significant bit is used to indicate this operation occurs in which one icache.
    -                CACHE_MMU_FAULT_CODE: u4,
    -                padding: u18,
    -            }),
    -            ///  This description will be updated in the near future.
    -            CACHE_MMU_FAULT_VADDR: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to indicate the virtual address which cause mmu fault..
    -                CACHE_MMU_FAULT_VADDR: u32,
    -            }),
    -            ///  This description will be updated in the near future.
    -            CACHE_WRAP_AROUND_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to enable wrap around mode when read data from flash.
    -                CACHE_FLASH_WRAP_AROUND: u1,
    -                padding: u31,
    -            }),
    -            ///  This description will be updated in the near future.
    -            CACHE_MMU_POWER_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to enable clock gating to save power when access mmu memory, 0: enable, 1: disable
    -                CACHE_MMU_MEM_FORCE_ON: u1,
    -                ///  The bit is used to power mmu memory down, 0: follow_rtc_lslp_pd, 1: power down
    -                CACHE_MMU_MEM_FORCE_PD: u1,
    -                ///  The bit is used to power mmu memory down, 0: follow_rtc_lslp_pd, 1: power up
    -                CACHE_MMU_MEM_FORCE_PU: u1,
    -                padding: u29,
    -            }),
    -            ///  This description will be updated in the near future.
    -            CACHE_STATE: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to indicate whether icache main fsm is in idle state or not. 1: in idle state, 0: not in idle state
    -                ICACHE_STATE: u12,
    -                padding: u20,
    -            }),
    -            ///  This description will be updated in the near future.
    -            CACHE_ENCRYPT_DECRYPT_RECORD_DISABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Reserved.
    -                RECORD_DISABLE_DB_ENCRYPT: u1,
    -                ///  Reserved.
    -                RECORD_DISABLE_G0CB_DECRYPT: u1,
    -                padding: u30,
    -            }),
    -            ///  This description will be updated in the near future.
    -            CACHE_ENCRYPT_DECRYPT_CLK_FORCE_ON: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to close clock gating of manual crypt clock. 1: close gating, 0: open clock gating.
    -                CLK_FORCE_ON_MANUAL_CRYPT: u1,
    -                ///  The bit is used to close clock gating of automatic crypt clock. 1: close gating, 0: open clock gating.
    -                CLK_FORCE_ON_AUTO_CRYPT: u1,
    -                ///  The bit is used to close clock gating of external memory encrypt and decrypt clock. 1: close gating, 0: open clock gating.
    -                CLK_FORCE_ON_CRYPT: u1,
    -                padding: u29,
    -            }),
    -            ///  This description will be updated in the near future.
    -            CACHE_PRELOAD_INT_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to indicate the interrupt by icache pre-load done.
    -                ICACHE_PRELOAD_INT_ST: u1,
    -                ///  The bit is used to enable the interrupt by icache pre-load done.
    -                ICACHE_PRELOAD_INT_ENA: u1,
    -                ///  The bit is used to clear the interrupt by icache pre-load done.
    -                ICACHE_PRELOAD_INT_CLR: u1,
    -                padding: u29,
    -            }),
    -            ///  This description will be updated in the near future.
    -            CACHE_SYNC_INT_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to indicate the interrupt by icache sync done.
    -                ICACHE_SYNC_INT_ST: u1,
    -                ///  The bit is used to enable the interrupt by icache sync done.
    -                ICACHE_SYNC_INT_ENA: u1,
    -                ///  The bit is used to clear the interrupt by icache sync done.
    -                ICACHE_SYNC_INT_CLR: u1,
    -                padding: u29,
    -            }),
    -            ///  This description will be updated in the near future.
    -            CACHE_MMU_OWNER: mmio.Mmio(packed struct(u32) {
    -                ///  The bits are used to specify the owner of MMU.bit0/bit2: ibus, bit1/bit3: dbus
    -                CACHE_MMU_OWNER: u4,
    -                padding: u28,
    -            }),
    -            ///  This description will be updated in the near future.
    -            CACHE_CONF_MISC: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to disable checking mmu entry fault by preload operation.
    -                CACHE_IGNORE_PRELOAD_MMU_ENTRY_FAULT: u1,
    -                ///  The bit is used to disable checking mmu entry fault by sync operation.
    -                CACHE_IGNORE_SYNC_MMU_ENTRY_FAULT: u1,
    -                ///  The bit is used to enable cache trace function.
    -                CACHE_TRACE_ENA: u1,
    -                padding: u29,
    -            }),
    -            ///  This description will be updated in the near future.
    -            ICACHE_FREEZE: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to enable icache freeze mode
    -                ENA: u1,
    -                ///  The bit is used to configure freeze mode, 0: assert busy if CPU miss 1: assert hit if CPU miss
    -                MODE: u1,
    -                ///  The bit is used to indicate icache freeze success
    -                DONE: u1,
    -                padding: u29,
    -            }),
    -            ///  This description will be updated in the near future.
    -            ICACHE_ATOMIC_OPERATE_ENA: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to activate icache atomic operation protection. In this case, sync/lock operation can not interrupt miss-work. This feature does not work during invalidateAll operation.
    -                ICACHE_ATOMIC_OPERATE_ENA: u1,
    -                padding: u31,
    -            }),
    -            ///  This description will be updated in the near future.
    -            CACHE_REQUEST: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to disable request recording which could cause performance issue
    -                BYPASS: u1,
    -                padding: u31,
    -            }),
    -            ///  This description will be updated in the near future.
    -            IBUS_PMS_TBL_LOCK: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to configure the ibus permission control section boundary0
    -                IBUS_PMS_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  This description will be updated in the near future.
    -            IBUS_PMS_TBL_BOUNDARY0: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to configure the ibus permission control section boundary0
    -                IBUS_PMS_BOUNDARY0: u12,
    -                padding: u20,
    -            }),
    -            ///  This description will be updated in the near future.
    -            IBUS_PMS_TBL_BOUNDARY1: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to configure the ibus permission control section boundary1
    -                IBUS_PMS_BOUNDARY1: u12,
    -                padding: u20,
    -            }),
    -            ///  This description will be updated in the near future.
    -            IBUS_PMS_TBL_BOUNDARY2: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to configure the ibus permission control section boundary2
    -                IBUS_PMS_BOUNDARY2: u12,
    -                padding: u20,
    -            }),
    -            ///  This description will be updated in the near future.
    -            IBUS_PMS_TBL_ATTR: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to configure attribute of the ibus permission control section1, bit0: fetch in world0, bit1: load in world0, bit2: fetch in world1, bit3: load in world1
    -                IBUS_PMS_SCT1_ATTR: u4,
    -                ///  The bit is used to configure attribute of the ibus permission control section2, bit0: fetch in world0, bit1: load in world0, bit2: fetch in world1, bit3: load in world1
    -                IBUS_PMS_SCT2_ATTR: u4,
    -                padding: u24,
    -            }),
    -            ///  This description will be updated in the near future.
    -            DBUS_PMS_TBL_LOCK: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to configure the ibus permission control section boundary0
    -                DBUS_PMS_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  This description will be updated in the near future.
    -            DBUS_PMS_TBL_BOUNDARY0: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to configure the dbus permission control section boundary0
    -                DBUS_PMS_BOUNDARY0: u12,
    -                padding: u20,
    -            }),
    -            ///  This description will be updated in the near future.
    -            DBUS_PMS_TBL_BOUNDARY1: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to configure the dbus permission control section boundary1
    -                DBUS_PMS_BOUNDARY1: u12,
    -                padding: u20,
    -            }),
    -            ///  This description will be updated in the near future.
    -            DBUS_PMS_TBL_BOUNDARY2: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to configure the dbus permission control section boundary2
    -                DBUS_PMS_BOUNDARY2: u12,
    -                padding: u20,
    -            }),
    -            ///  This description will be updated in the near future.
    -            DBUS_PMS_TBL_ATTR: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to configure attribute of the dbus permission control section1, bit0: load in world0, bit2: load in world1
    -                DBUS_PMS_SCT1_ATTR: u2,
    -                ///  The bit is used to configure attribute of the dbus permission control section2, bit0: load in world0, bit2: load in world1
    -                DBUS_PMS_SCT2_ATTR: u2,
    -                padding: u28,
    -            }),
    -            ///  This description will be updated in the near future.
    -            CLOCK_GATE: mmio.Mmio(packed struct(u32) {
    -                ///  clock gate enable.
    -                CLK_EN: u1,
    -                padding: u31,
    -            }),
    -            reserved1020: [760]u8,
    -            ///  This description will be updated in the near future.
    -            REG_DATE: mmio.Mmio(packed struct(u32) {
    -                ///  version information
    -                DATE: u28,
    -                padding: u4,
    -            }),
    -        };
    -
    -        ///  General Purpose Input/Output
    -        pub const GPIO = extern struct {
    -            ///  GPIO bit select register
    -            BT_SELECT: mmio.Mmio(packed struct(u32) {
    -                ///  GPIO bit select register
    -                BT_SEL: u32,
    -            }),
    -            ///  GPIO output register
    -            OUT: mmio.Mmio(packed struct(u32) {
    -                ///  GPIO output register for GPIO0-25
    -                DATA_ORIG: u26,
    -                padding: u6,
    -            }),
    -            ///  GPIO output set register
    -            OUT_W1TS: mmio.Mmio(packed struct(u32) {
    -                ///  GPIO output set register for GPIO0-25
    -                OUT_W1TS: u26,
    -                padding: u6,
    -            }),
    -            ///  GPIO output clear register
    -            OUT_W1TC: mmio.Mmio(packed struct(u32) {
    -                ///  GPIO output clear register for GPIO0-25
    -                OUT_W1TC: u26,
    -                padding: u6,
    -            }),
    -            reserved28: [12]u8,
    -            ///  GPIO sdio select register
    -            SDIO_SELECT: mmio.Mmio(packed struct(u32) {
    -                ///  GPIO sdio select register
    -                SDIO_SEL: u8,
    -                padding: u24,
    -            }),
    -            ///  GPIO output enable register
    -            ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  GPIO output enable register for GPIO0-25
    -                DATA: u26,
    -                padding: u6,
    -            }),
    -            ///  GPIO output enable set register
    -            ENABLE_W1TS: mmio.Mmio(packed struct(u32) {
    -                ///  GPIO output enable set register for GPIO0-25
    -                ENABLE_W1TS: u26,
    -                padding: u6,
    -            }),
    -            ///  GPIO output enable clear register
    -            ENABLE_W1TC: mmio.Mmio(packed struct(u32) {
    -                ///  GPIO output enable clear register for GPIO0-25
    -                ENABLE_W1TC: u26,
    -                padding: u6,
    -            }),
    -            reserved56: [12]u8,
    -            ///  pad strapping register
    -            STRAP: mmio.Mmio(packed struct(u32) {
    -                ///  pad strapping register
    -                STRAPPING: u16,
    -                padding: u16,
    -            }),
    -            ///  GPIO input register
    -            IN: mmio.Mmio(packed struct(u32) {
    -                ///  GPIO input register for GPIO0-25
    -                DATA_NEXT: u26,
    -                padding: u6,
    -            }),
    -            reserved68: [4]u8,
    -            ///  GPIO interrupt status register
    -            STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  GPIO interrupt status register for GPIO0-25
    -                INTERRUPT: u26,
    -                padding: u6,
    -            }),
    -            ///  GPIO interrupt status set register
    -            STATUS_W1TS: mmio.Mmio(packed struct(u32) {
    -                ///  GPIO interrupt status set register for GPIO0-25
    -                STATUS_W1TS: u26,
    -                padding: u6,
    -            }),
    -            ///  GPIO interrupt status clear register
    -            STATUS_W1TC: mmio.Mmio(packed struct(u32) {
    -                ///  GPIO interrupt status clear register for GPIO0-25
    -                STATUS_W1TC: u26,
    -                padding: u6,
    -            }),
    -            reserved92: [12]u8,
    -            ///  GPIO PRO_CPU interrupt status register
    -            PCPU_INT: mmio.Mmio(packed struct(u32) {
    -                ///  GPIO PRO_CPU interrupt status register for GPIO0-25
    -                PROCPU_INT: u26,
    -                padding: u6,
    -            }),
    -            ///  GPIO PRO_CPU(not shielded) interrupt status register
    -            PCPU_NMI_INT: mmio.Mmio(packed struct(u32) {
    -                ///  GPIO PRO_CPU(not shielded) interrupt status register for GPIO0-25
    -                PROCPU_NMI_INT: u26,
    -                padding: u6,
    -            }),
    -            ///  GPIO CPUSDIO interrupt status register
    -            CPUSDIO_INT: mmio.Mmio(packed struct(u32) {
    -                ///  GPIO CPUSDIO interrupt status register for GPIO0-25
    -                SDIO_INT: u26,
    -                padding: u6,
    -            }),
    -            reserved116: [12]u8,
    -            ///  GPIO pin configuration register
    -            PIN: [26]mmio.Mmio(packed struct(u32) {
    -                ///  set GPIO input_sync2 signal mode. :disable. 1:trigger at negedge. 2or3:trigger at posedge.
    -                PIN_SYNC2_BYPASS: u2,
    -                ///  set this bit to select pad driver. 1:open-drain. :normal.
    -                PIN_PAD_DRIVER: u1,
    -                ///  set GPIO input_sync1 signal mode. :disable. 1:trigger at negedge. 2or3:trigger at posedge.
    -                PIN_SYNC1_BYPASS: u2,
    -                reserved7: u2,
    -                ///  set this value to choose interrupt mode. :disable GPIO interrupt. 1:trigger at posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level. 5:valid at high level
    -                PIN_INT_TYPE: u3,
    -                ///  set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode)
    -                PIN_WAKEUP_ENABLE: u1,
    -                ///  reserved
    -                PIN_CONFIG: u2,
    -                ///  set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded) interrupt.
    -                PIN_INT_ENA: u5,
    -                padding: u14,
    -            }),
    -            reserved332: [112]u8,
    -            ///  GPIO interrupt source register
    -            STATUS_NEXT: mmio.Mmio(packed struct(u32) {
    -                ///  GPIO interrupt source register for GPIO0-25
    -                STATUS_INTERRUPT_NEXT: u26,
    -                padding: u6,
    -            }),
    -            reserved340: [4]u8,
    -            ///  GPIO input function configuration register
    -            FUNC_IN_SEL_CFG: [128]mmio.Mmio(packed struct(u32) {
    -                ///  set this value: s=-53: connect GPIO[s] to this port. s=x38: set this port always high level. s=x3C: set this port always low level.
    -                IN_SEL: u5,
    -                ///  set this bit to invert input signal. 1:invert. :not invert.
    -                IN_INV_SEL: u1,
    -                ///  set this bit to bypass GPIO. 1:do not bypass GPIO. :bypass GPIO.
    -                SEL: u1,
    -                padding: u25,
    -            }),
    -            reserved1364: [512]u8,
    -            ///  GPIO output function select register
    -            FUNC_OUT_SEL_CFG: [26]mmio.Mmio(packed struct(u32) {
    -                ///  The value of the bits: <=s<=256. Set the value to select output signal. s=-255: output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals GPIO_OUT_REG[n].
    -                OUT_SEL: u8,
    -                ///  set this bit to invert output signal.1:invert.:not invert.
    -                INV_SEL: u1,
    -                ///  set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output enable signal.:use peripheral output enable signal.
    -                OEN_SEL: u1,
    -                ///  set this bit to invert output enable signal.1:invert.:not invert.
    -                OEN_INV_SEL: u1,
    -                padding: u21,
    -            }),
    -            reserved1580: [112]u8,
    -            ///  GPIO clock gate register
    -            CLOCK_GATE: mmio.Mmio(packed struct(u32) {
    -                ///  set this bit to enable GPIO clock gate
    -                CLK_EN: u1,
    -                padding: u31,
    -            }),
    -            reserved1788: [204]u8,
    -            ///  GPIO version register
    -            REG_DATE: mmio.Mmio(packed struct(u32) {
    -                ///  version register
    -                REG_DATE: u28,
    -                padding: u4,
    -            }),
    -        };
    -
    -        ///  Sigma-Delta Modulation
    -        pub const GPIOSD = extern struct {
    -            ///  Duty Cycle Configure Register of SDM%s
    -            SIGMADELTA: [4]mmio.Mmio(packed struct(u32) {
    -                ///  This field is used to configure the duty cycle of sigma delta modulation output.
    -                SD0_IN: u8,
    -                ///  This field is used to set a divider value to divide APB clock.
    -                SD0_PRESCALE: u8,
    -                padding: u16,
    -            }),
    -            reserved32: [16]u8,
    -            ///  Clock Gating Configure Register
    -            SIGMADELTA_CG: mmio.Mmio(packed struct(u32) {
    -                reserved31: u31,
    -                ///  Clock enable bit of configuration registers for sigma delta modulation.
    -                CLK_EN: u1,
    -            }),
    -            ///  MISC Register
    -            SIGMADELTA_MISC: mmio.Mmio(packed struct(u32) {
    -                reserved30: u30,
    -                ///  Clock enable bit of sigma delta modulation.
    -                FUNCTION_CLK_EN: u1,
    -                ///  Reserved.
    -                SPI_SWAP: u1,
    -            }),
    -            ///  Version Control Register
    -            SIGMADELTA_VERSION: mmio.Mmio(packed struct(u32) {
    -                ///  Version control register.
    -                GPIO_SD_DATE: u28,
    -                padding: u4,
    -            }),
    -        };
    -
    -        ///  HMAC (Hash-based Message Authentication Code) Accelerator
    -        pub const HMAC = extern struct {
    -            reserved64: [64]u8,
    -            ///  Process control register 0.
    -            SET_START: mmio.Mmio(packed struct(u32) {
    -                ///  Start hmac operation.
    -                SET_START: u1,
    -                padding: u31,
    -            }),
    -            ///  Configure purpose.
    -            SET_PARA_PURPOSE: mmio.Mmio(packed struct(u32) {
    -                ///  Set hmac parameter purpose.
    -                PURPOSE_SET: u4,
    -                padding: u28,
    -            }),
    -            ///  Configure key.
    -            SET_PARA_KEY: mmio.Mmio(packed struct(u32) {
    -                ///  Set hmac parameter key.
    -                KEY_SET: u3,
    -                padding: u29,
    -            }),
    -            ///  Finish initial configuration.
    -            SET_PARA_FINISH: mmio.Mmio(packed struct(u32) {
    -                ///  Finish hmac configuration.
    -                SET_PARA_END: u1,
    -                padding: u31,
    -            }),
    -            ///  Process control register 1.
    -            SET_MESSAGE_ONE: mmio.Mmio(packed struct(u32) {
    -                ///  Call SHA to calculate one message block.
    -                SET_TEXT_ONE: u1,
    -                padding: u31,
    -            }),
    -            ///  Process control register 2.
    -            SET_MESSAGE_ING: mmio.Mmio(packed struct(u32) {
    -                ///  Continue typical hmac.
    -                SET_TEXT_ING: u1,
    -                padding: u31,
    -            }),
    -            ///  Process control register 3.
    -            SET_MESSAGE_END: mmio.Mmio(packed struct(u32) {
    -                ///  Start hardware padding.
    -                SET_TEXT_END: u1,
    -                padding: u31,
    -            }),
    -            ///  Process control register 4.
    -            SET_RESULT_FINISH: mmio.Mmio(packed struct(u32) {
    -                ///  After read result from upstream, then let hmac back to idle.
    -                SET_RESULT_END: u1,
    -                padding: u31,
    -            }),
    -            ///  Invalidate register 0.
    -            SET_INVALIDATE_JTAG: mmio.Mmio(packed struct(u32) {
    -                ///  Clear result from hmac downstream JTAG.
    -                SET_INVALIDATE_JTAG: u1,
    -                padding: u31,
    -            }),
    -            ///  Invalidate register 1.
    -            SET_INVALIDATE_DS: mmio.Mmio(packed struct(u32) {
    -                ///  Clear result from hmac downstream DS.
    -                SET_INVALIDATE_DS: u1,
    -                padding: u31,
    -            }),
    -            ///  Error register.
    -            QUERY_ERROR: mmio.Mmio(packed struct(u32) {
    -                ///  Hmac configuration state. 0: key are agree with purpose. 1: error
    -                QUREY_CHECK: u1,
    -                padding: u31,
    -            }),
    -            ///  Busy register.
    -            QUERY_BUSY: mmio.Mmio(packed struct(u32) {
    -                ///  Hmac state. 1'b0: idle. 1'b1: busy
    -                BUSY_STATE: u1,
    -                padding: u31,
    -            }),
    -            reserved128: [16]u8,
    -            ///  Message block memory.
    -            WR_MESSAGE_MEM: [64]u8,
    -            ///  Result from upstream.
    -            RD_RESULT_MEM: [32]u8,
    -            reserved240: [16]u8,
    -            ///  Process control register 5.
    -            SET_MESSAGE_PAD: mmio.Mmio(packed struct(u32) {
    -                ///  Start software padding.
    -                SET_TEXT_PAD: u1,
    -                padding: u31,
    -            }),
    -            ///  Process control register 6.
    -            ONE_BLOCK: mmio.Mmio(packed struct(u32) {
    -                ///  Don't have to do padding.
    -                SET_ONE_BLOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  Jtag register 0.
    -            SOFT_JTAG_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  Turn on JTAG verification.
    -                SOFT_JTAG_CTRL: u1,
    -                padding: u31,
    -            }),
    -            ///  Jtag register 1.
    -            WR_JTAG: mmio.Mmio(packed struct(u32) {
    -                ///  32-bit of key to be compared.
    -                WR_JTAG: u32,
    -            }),
    -        };
    -
    -        ///  I2C (Inter-Integrated Circuit) Controller
    -        pub const I2C0 = extern struct {
    -            ///  I2C_SCL_LOW_PERIOD_REG
    -            SCL_LOW_PERIOD: mmio.Mmio(packed struct(u32) {
    -                ///  reg_scl_low_period
    -                SCL_LOW_PERIOD: u9,
    -                padding: u23,
    -            }),
    -            ///  I2C_CTR_REG
    -            CTR: mmio.Mmio(packed struct(u32) {
    -                ///  reg_sda_force_out
    -                SDA_FORCE_OUT: u1,
    -                ///  reg_scl_force_out
    -                SCL_FORCE_OUT: u1,
    -                ///  reg_sample_scl_level
    -                SAMPLE_SCL_LEVEL: u1,
    -                ///  reg_rx_full_ack_level
    -                RX_FULL_ACK_LEVEL: u1,
    -                ///  reg_ms_mode
    -                MS_MODE: u1,
    -                ///  reg_trans_start
    -                TRANS_START: u1,
    -                ///  reg_tx_lsb_first
    -                TX_LSB_FIRST: u1,
    -                ///  reg_rx_lsb_first
    -                RX_LSB_FIRST: u1,
    -                ///  reg_clk_en
    -                CLK_EN: u1,
    -                ///  reg_arbitration_en
    -                ARBITRATION_EN: u1,
    -                ///  reg_fsm_rst
    -                FSM_RST: u1,
    -                ///  reg_conf_upgate
    -                CONF_UPGATE: u1,
    -                ///  reg_slv_tx_auto_start_en
    -                SLV_TX_AUTO_START_EN: u1,
    -                ///  reg_addr_10bit_rw_check_en
    -                ADDR_10BIT_RW_CHECK_EN: u1,
    -                ///  reg_addr_broadcasting_en
    -                ADDR_BROADCASTING_EN: u1,
    -                padding: u17,
    -            }),
    -            ///  I2C_SR_REG
    -            SR: mmio.Mmio(packed struct(u32) {
    -                ///  reg_resp_rec
    -                RESP_REC: u1,
    -                ///  reg_slave_rw
    -                SLAVE_RW: u1,
    -                reserved3: u1,
    -                ///  reg_arb_lost
    -                ARB_LOST: u1,
    -                ///  reg_bus_busy
    -                BUS_BUSY: u1,
    -                ///  reg_slave_addressed
    -                SLAVE_ADDRESSED: u1,
    -                reserved8: u2,
    -                ///  reg_rxfifo_cnt
    -                RXFIFO_CNT: u6,
    -                ///  reg_stretch_cause
    -                STRETCH_CAUSE: u2,
    -                reserved18: u2,
    -                ///  reg_txfifo_cnt
    -                TXFIFO_CNT: u6,
    -                ///  reg_scl_main_state_last
    -                SCL_MAIN_STATE_LAST: u3,
    -                reserved28: u1,
    -                ///  reg_scl_state_last
    -                SCL_STATE_LAST: u3,
    -                padding: u1,
    -            }),
    -            ///  I2C_TO_REG
    -            TO: mmio.Mmio(packed struct(u32) {
    -                ///  reg_time_out_value
    -                TIME_OUT_VALUE: u5,
    -                ///  reg_time_out_en
    -                TIME_OUT_EN: u1,
    -                padding: u26,
    -            }),
    -            ///  I2C_SLAVE_ADDR_REG
    -            SLAVE_ADDR: mmio.Mmio(packed struct(u32) {
    -                ///  reg_slave_addr
    -                SLAVE_ADDR: u15,
    -                reserved31: u16,
    -                ///  reg_addr_10bit_en
    -                ADDR_10BIT_EN: u1,
    -            }),
    -            ///  I2C_FIFO_ST_REG
    -            FIFO_ST: mmio.Mmio(packed struct(u32) {
    -                ///  reg_rxfifo_raddr
    -                RXFIFO_RADDR: u5,
    -                ///  reg_rxfifo_waddr
    -                RXFIFO_WADDR: u5,
    -                ///  reg_txfifo_raddr
    -                TXFIFO_RADDR: u5,
    -                ///  reg_txfifo_waddr
    -                TXFIFO_WADDR: u5,
    -                reserved22: u2,
    -                ///  reg_slave_rw_point
    -                SLAVE_RW_POINT: u8,
    -                padding: u2,
    -            }),
    -            ///  I2C_FIFO_CONF_REG
    -            FIFO_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  reg_rxfifo_wm_thrhd
    -                RXFIFO_WM_THRHD: u5,
    -                ///  reg_txfifo_wm_thrhd
    -                TXFIFO_WM_THRHD: u5,
    -                ///  reg_nonfifo_en
    -                NONFIFO_EN: u1,
    -                ///  reg_fifo_addr_cfg_en
    -                FIFO_ADDR_CFG_EN: u1,
    -                ///  reg_rx_fifo_rst
    -                RX_FIFO_RST: u1,
    -                ///  reg_tx_fifo_rst
    -                TX_FIFO_RST: u1,
    -                ///  reg_fifo_prt_en
    -                FIFO_PRT_EN: u1,
    -                padding: u17,
    -            }),
    -            ///  I2C_FIFO_DATA_REG
    -            DATA: mmio.Mmio(packed struct(u32) {
    -                ///  reg_fifo_rdata
    -                FIFO_RDATA: u8,
    -                padding: u24,
    -            }),
    -            ///  I2C_INT_RAW_REG
    -            INT_RAW: mmio.Mmio(packed struct(u32) {
    -                ///  reg_rxfifo_wm_int_raw
    -                RXFIFO_WM_INT_RAW: u1,
    -                ///  reg_txfifo_wm_int_raw
    -                TXFIFO_WM_INT_RAW: u1,
    -                ///  reg_rxfifo_ovf_int_raw
    -                RXFIFO_OVF_INT_RAW: u1,
    -                ///  reg_end_detect_int_raw
    -                END_DETECT_INT_RAW: u1,
    -                ///  reg_byte_trans_done_int_raw
    -                BYTE_TRANS_DONE_INT_RAW: u1,
    -                ///  reg_arbitration_lost_int_raw
    -                ARBITRATION_LOST_INT_RAW: u1,
    -                ///  reg_mst_txfifo_udf_int_raw
    -                MST_TXFIFO_UDF_INT_RAW: u1,
    -                ///  reg_trans_complete_int_raw
    -                TRANS_COMPLETE_INT_RAW: u1,
    -                ///  reg_time_out_int_raw
    -                TIME_OUT_INT_RAW: u1,
    -                ///  reg_trans_start_int_raw
    -                TRANS_START_INT_RAW: u1,
    -                ///  reg_nack_int_raw
    -                NACK_INT_RAW: u1,
    -                ///  reg_txfifo_ovf_int_raw
    -                TXFIFO_OVF_INT_RAW: u1,
    -                ///  reg_rxfifo_udf_int_raw
    -                RXFIFO_UDF_INT_RAW: u1,
    -                ///  reg_scl_st_to_int_raw
    -                SCL_ST_TO_INT_RAW: u1,
    -                ///  reg_scl_main_st_to_int_raw
    -                SCL_MAIN_ST_TO_INT_RAW: u1,
    -                ///  reg_det_start_int_raw
    -                DET_START_INT_RAW: u1,
    -                ///  reg_slave_stretch_int_raw
    -                SLAVE_STRETCH_INT_RAW: u1,
    -                ///  reg_general_call_int_raw
    -                GENERAL_CALL_INT_RAW: u1,
    -                padding: u14,
    -            }),
    -            ///  I2C_INT_CLR_REG
    -            INT_CLR: mmio.Mmio(packed struct(u32) {
    -                ///  reg_rxfifo_wm_int_clr
    -                RXFIFO_WM_INT_CLR: u1,
    -                ///  reg_txfifo_wm_int_clr
    -                TXFIFO_WM_INT_CLR: u1,
    -                ///  reg_rxfifo_ovf_int_clr
    -                RXFIFO_OVF_INT_CLR: u1,
    -                ///  reg_end_detect_int_clr
    -                END_DETECT_INT_CLR: u1,
    -                ///  reg_byte_trans_done_int_clr
    -                BYTE_TRANS_DONE_INT_CLR: u1,
    -                ///  reg_arbitration_lost_int_clr
    -                ARBITRATION_LOST_INT_CLR: u1,
    -                ///  reg_mst_txfifo_udf_int_clr
    -                MST_TXFIFO_UDF_INT_CLR: u1,
    -                ///  reg_trans_complete_int_clr
    -                TRANS_COMPLETE_INT_CLR: u1,
    -                ///  reg_time_out_int_clr
    -                TIME_OUT_INT_CLR: u1,
    -                ///  reg_trans_start_int_clr
    -                TRANS_START_INT_CLR: u1,
    -                ///  reg_nack_int_clr
    -                NACK_INT_CLR: u1,
    -                ///  reg_txfifo_ovf_int_clr
    -                TXFIFO_OVF_INT_CLR: u1,
    -                ///  reg_rxfifo_udf_int_clr
    -                RXFIFO_UDF_INT_CLR: u1,
    -                ///  reg_scl_st_to_int_clr
    -                SCL_ST_TO_INT_CLR: u1,
    -                ///  reg_scl_main_st_to_int_clr
    -                SCL_MAIN_ST_TO_INT_CLR: u1,
    -                ///  reg_det_start_int_clr
    -                DET_START_INT_CLR: u1,
    -                ///  reg_slave_stretch_int_clr
    -                SLAVE_STRETCH_INT_CLR: u1,
    -                ///  reg_general_call_int_clr
    -                GENERAL_CALL_INT_CLR: u1,
    -                padding: u14,
    -            }),
    -            ///  I2C_INT_ENA_REG
    -            INT_ENA: mmio.Mmio(packed struct(u32) {
    -                ///  reg_rxfifo_wm_int_ena
    -                RXFIFO_WM_INT_ENA: u1,
    -                ///  reg_txfifo_wm_int_ena
    -                TXFIFO_WM_INT_ENA: u1,
    -                ///  reg_rxfifo_ovf_int_ena
    -                RXFIFO_OVF_INT_ENA: u1,
    -                ///  reg_end_detect_int_ena
    -                END_DETECT_INT_ENA: u1,
    -                ///  reg_byte_trans_done_int_ena
    -                BYTE_TRANS_DONE_INT_ENA: u1,
    -                ///  reg_arbitration_lost_int_ena
    -                ARBITRATION_LOST_INT_ENA: u1,
    -                ///  reg_mst_txfifo_udf_int_ena
    -                MST_TXFIFO_UDF_INT_ENA: u1,
    -                ///  reg_trans_complete_int_ena
    -                TRANS_COMPLETE_INT_ENA: u1,
    -                ///  reg_time_out_int_ena
    -                TIME_OUT_INT_ENA: u1,
    -                ///  reg_trans_start_int_ena
    -                TRANS_START_INT_ENA: u1,
    -                ///  reg_nack_int_ena
    -                NACK_INT_ENA: u1,
    -                ///  reg_txfifo_ovf_int_ena
    -                TXFIFO_OVF_INT_ENA: u1,
    -                ///  reg_rxfifo_udf_int_ena
    -                RXFIFO_UDF_INT_ENA: u1,
    -                ///  reg_scl_st_to_int_ena
    -                SCL_ST_TO_INT_ENA: u1,
    -                ///  reg_scl_main_st_to_int_ena
    -                SCL_MAIN_ST_TO_INT_ENA: u1,
    -                ///  reg_det_start_int_ena
    -                DET_START_INT_ENA: u1,
    -                ///  reg_slave_stretch_int_ena
    -                SLAVE_STRETCH_INT_ENA: u1,
    -                ///  reg_general_call_int_ena
    -                GENERAL_CALL_INT_ENA: u1,
    -                padding: u14,
    -            }),
    -            ///  I2C_INT_STATUS_REG
    -            INT_STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  reg_rxfifo_wm_int_st
    -                RXFIFO_WM_INT_ST: u1,
    -                ///  reg_txfifo_wm_int_st
    -                TXFIFO_WM_INT_ST: u1,
    -                ///  reg_rxfifo_ovf_int_st
    -                RXFIFO_OVF_INT_ST: u1,
    -                ///  reg_end_detect_int_st
    -                END_DETECT_INT_ST: u1,
    -                ///  reg_byte_trans_done_int_st
    -                BYTE_TRANS_DONE_INT_ST: u1,
    -                ///  reg_arbitration_lost_int_st
    -                ARBITRATION_LOST_INT_ST: u1,
    -                ///  reg_mst_txfifo_udf_int_st
    -                MST_TXFIFO_UDF_INT_ST: u1,
    -                ///  reg_trans_complete_int_st
    -                TRANS_COMPLETE_INT_ST: u1,
    -                ///  reg_time_out_int_st
    -                TIME_OUT_INT_ST: u1,
    -                ///  reg_trans_start_int_st
    -                TRANS_START_INT_ST: u1,
    -                ///  reg_nack_int_st
    -                NACK_INT_ST: u1,
    -                ///  reg_txfifo_ovf_int_st
    -                TXFIFO_OVF_INT_ST: u1,
    -                ///  reg_rxfifo_udf_int_st
    -                RXFIFO_UDF_INT_ST: u1,
    -                ///  reg_scl_st_to_int_st
    -                SCL_ST_TO_INT_ST: u1,
    -                ///  reg_scl_main_st_to_int_st
    -                SCL_MAIN_ST_TO_INT_ST: u1,
    -                ///  reg_det_start_int_st
    -                DET_START_INT_ST: u1,
    -                ///  reg_slave_stretch_int_st
    -                SLAVE_STRETCH_INT_ST: u1,
    -                ///  reg_general_call_int_st
    -                GENERAL_CALL_INT_ST: u1,
    -                padding: u14,
    -            }),
    -            ///  I2C_SDA_HOLD_REG
    -            SDA_HOLD: mmio.Mmio(packed struct(u32) {
    -                ///  reg_sda_hold_time
    -                TIME: u9,
    -                padding: u23,
    -            }),
    -            ///  I2C_SDA_SAMPLE_REG
    -            SDA_SAMPLE: mmio.Mmio(packed struct(u32) {
    -                ///  reg_sda_sample_time
    -                TIME: u9,
    -                padding: u23,
    -            }),
    -            ///  I2C_SCL_HIGH_PERIOD_REG
    -            SCL_HIGH_PERIOD: mmio.Mmio(packed struct(u32) {
    -                ///  reg_scl_high_period
    -                SCL_HIGH_PERIOD: u9,
    -                ///  reg_scl_wait_high_period
    -                SCL_WAIT_HIGH_PERIOD: u7,
    -                padding: u16,
    -            }),
    -            reserved64: [4]u8,
    -            ///  I2C_SCL_START_HOLD_REG
    -            SCL_START_HOLD: mmio.Mmio(packed struct(u32) {
    -                ///  reg_scl_start_hold_time
    -                TIME: u9,
    -                padding: u23,
    -            }),
    -            ///  I2C_SCL_RSTART_SETUP_REG
    -            SCL_RSTART_SETUP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_scl_rstart_setup_time
    -                TIME: u9,
    -                padding: u23,
    -            }),
    -            ///  I2C_SCL_STOP_HOLD_REG
    -            SCL_STOP_HOLD: mmio.Mmio(packed struct(u32) {
    -                ///  reg_scl_stop_hold_time
    -                TIME: u9,
    -                padding: u23,
    -            }),
    -            ///  I2C_SCL_STOP_SETUP_REG
    -            SCL_STOP_SETUP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_scl_stop_setup_time
    -                TIME: u9,
    -                padding: u23,
    -            }),
    -            ///  I2C_FILTER_CFG_REG
    -            FILTER_CFG: mmio.Mmio(packed struct(u32) {
    -                ///  reg_scl_filter_thres
    -                SCL_FILTER_THRES: u4,
    -                ///  reg_sda_filter_thres
    -                SDA_FILTER_THRES: u4,
    -                ///  reg_scl_filter_en
    -                SCL_FILTER_EN: u1,
    -                ///  reg_sda_filter_en
    -                SDA_FILTER_EN: u1,
    -                padding: u22,
    -            }),
    -            ///  I2C_CLK_CONF_REG
    -            CLK_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  reg_sclk_div_num
    -                SCLK_DIV_NUM: u8,
    -                ///  reg_sclk_div_a
    -                SCLK_DIV_A: u6,
    -                ///  reg_sclk_div_b
    -                SCLK_DIV_B: u6,
    -                ///  reg_sclk_sel
    -                SCLK_SEL: u1,
    -                ///  reg_sclk_active
    -                SCLK_ACTIVE: u1,
    -                padding: u10,
    -            }),
    -            ///  I2C_COMD%s_REG
    -            COMD: [8]mmio.Mmio(packed struct(u32) {
    -                ///  reg_command
    -                COMMAND: u14,
    -                reserved31: u17,
    -                ///  reg_command_done
    -                COMMAND_DONE: u1,
    -            }),
    -            ///  I2C_SCL_ST_TIME_OUT_REG
    -            SCL_ST_TIME_OUT: mmio.Mmio(packed struct(u32) {
    -                ///  reg_scl_st_to_regno more than 23
    -                SCL_ST_TO_I2C: u5,
    -                padding: u27,
    -            }),
    -            ///  I2C_SCL_MAIN_ST_TIME_OUT_REG
    -            SCL_MAIN_ST_TIME_OUT: mmio.Mmio(packed struct(u32) {
    -                ///  reg_scl_main_st_to_regno more than 23
    -                SCL_MAIN_ST_TO_I2C: u5,
    -                padding: u27,
    -            }),
    -            ///  I2C_SCL_SP_CONF_REG
    -            SCL_SP_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  reg_scl_rst_slv_en
    -                SCL_RST_SLV_EN: u1,
    -                ///  reg_scl_rst_slv_num
    -                SCL_RST_SLV_NUM: u5,
    -                ///  reg_scl_pd_en
    -                SCL_PD_EN: u1,
    -                ///  reg_sda_pd_en
    -                SDA_PD_EN: u1,
    -                padding: u24,
    -            }),
    -            ///  I2C_SCL_STRETCH_CONF_REG
    -            SCL_STRETCH_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  reg_stretch_protect_num
    -                STRETCH_PROTECT_NUM: u10,
    -                ///  reg_slave_scl_stretch_en
    -                SLAVE_SCL_STRETCH_EN: u1,
    -                ///  reg_slave_scl_stretch_clr
    -                SLAVE_SCL_STRETCH_CLR: u1,
    -                ///  reg_slave_byte_ack_ctl_en
    -                SLAVE_BYTE_ACK_CTL_EN: u1,
    -                ///  reg_slave_byte_ack_lvl
    -                SLAVE_BYTE_ACK_LVL: u1,
    -                padding: u18,
    -            }),
    -            reserved248: [112]u8,
    -            ///  I2C_DATE_REG
    -            DATE: mmio.Mmio(packed struct(u32) {
    -                ///  reg_date
    -                DATE: u32,
    -            }),
    -            reserved256: [4]u8,
    -            ///  I2C_TXFIFO_START_ADDR_REG
    -            TXFIFO_START_ADDR: mmio.Mmio(packed struct(u32) {
    -                ///  reg_txfifo_start_addr.
    -                TXFIFO_START_ADDR: u32,
    -            }),
    -            reserved384: [124]u8,
    -            ///  I2C_RXFIFO_START_ADDR_REG
    -            RXFIFO_START_ADDR: mmio.Mmio(packed struct(u32) {
    -                ///  reg_rxfifo_start_addr.
    -                RXFIFO_START_ADDR: u32,
    -            }),
    -        };
    -
    -        ///  I2S (Inter-IC Sound) Controller
    -        pub const I2S = extern struct {
    -            reserved12: [12]u8,
    -            ///  I2S interrupt raw register, valid in level.
    -            INT_RAW: mmio.Mmio(packed struct(u32) {
    -                ///  The raw interrupt status bit for the i2s_rx_done_int interrupt
    -                RX_DONE_INT_RAW: u1,
    -                ///  The raw interrupt status bit for the i2s_tx_done_int interrupt
    -                TX_DONE_INT_RAW: u1,
    -                ///  The raw interrupt status bit for the i2s_rx_hung_int interrupt
    -                RX_HUNG_INT_RAW: u1,
    -                ///  The raw interrupt status bit for the i2s_tx_hung_int interrupt
    -                TX_HUNG_INT_RAW: u1,
    -                padding: u28,
    -            }),
    -            ///  I2S interrupt status register.
    -            INT_ST: mmio.Mmio(packed struct(u32) {
    -                ///  The masked interrupt status bit for the i2s_rx_done_int interrupt
    -                RX_DONE_INT_ST: u1,
    -                ///  The masked interrupt status bit for the i2s_tx_done_int interrupt
    -                TX_DONE_INT_ST: u1,
    -                ///  The masked interrupt status bit for the i2s_rx_hung_int interrupt
    -                RX_HUNG_INT_ST: u1,
    -                ///  The masked interrupt status bit for the i2s_tx_hung_int interrupt
    -                TX_HUNG_INT_ST: u1,
    -                padding: u28,
    -            }),
    -            ///  I2S interrupt enable register.
    -            INT_ENA: mmio.Mmio(packed struct(u32) {
    -                ///  The interrupt enable bit for the i2s_rx_done_int interrupt
    -                RX_DONE_INT_ENA: u1,
    -                ///  The interrupt enable bit for the i2s_tx_done_int interrupt
    -                TX_DONE_INT_ENA: u1,
    -                ///  The interrupt enable bit for the i2s_rx_hung_int interrupt
    -                RX_HUNG_INT_ENA: u1,
    -                ///  The interrupt enable bit for the i2s_tx_hung_int interrupt
    -                TX_HUNG_INT_ENA: u1,
    -                padding: u28,
    -            }),
    -            ///  I2S interrupt clear register.
    -            INT_CLR: mmio.Mmio(packed struct(u32) {
    -                ///  Set this bit to clear the i2s_rx_done_int interrupt
    -                RX_DONE_INT_CLR: u1,
    -                ///  Set this bit to clear the i2s_tx_done_int interrupt
    -                TX_DONE_INT_CLR: u1,
    -                ///  Set this bit to clear the i2s_rx_hung_int interrupt
    -                RX_HUNG_INT_CLR: u1,
    -                ///  Set this bit to clear the i2s_tx_hung_int interrupt
    -                TX_HUNG_INT_CLR: u1,
    -                padding: u28,
    -            }),
    -            reserved32: [4]u8,
    -            ///  I2S RX configure register
    -            RX_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  Set this bit to reset receiver
    -                RX_RESET: u1,
    -                ///  Set this bit to reset Rx AFIFO
    -                RX_FIFO_RESET: u1,
    -                ///  Set this bit to start receiving data
    -                RX_START: u1,
    -                ///  Set this bit to enable slave receiver mode
    -                RX_SLAVE_MOD: u1,
    -                reserved5: u1,
    -                ///  Set this bit to enable receiver in mono mode
    -                RX_MONO: u1,
    -                reserved7: u1,
    -                ///  I2S Rx byte endian, 1: low addr value to high addr. 0: low addr with low addr value.
    -                RX_BIG_ENDIAN: u1,
    -                ///  Set 1 to update I2S RX registers from APB clock domain to I2S RX clock domain. This bit will be cleared by hardware after update register done.
    -                RX_UPDATE: u1,
    -                ///  1: The first channel data value is valid in I2S RX mono mode. 0: The second channel data value is valid in I2S RX mono mode.
    -                RX_MONO_FST_VLD: u1,
    -                ///  I2S RX compress/decompress configuration bit. & 0 (atol): A-Law decompress, 1 (ltoa) : A-Law compress, 2 (utol) : u-Law decompress, 3 (ltou) : u-Law compress. &
    -                RX_PCM_CONF: u2,
    -                ///  Set this bit to bypass Compress/Decompress module for received data.
    -                RX_PCM_BYPASS: u1,
    -                ///  0 : I2S Rx only stop when reg_rx_start is cleared. 1: Stop when reg_rx_start is 0 or in_suc_eof is 1. 2: Stop I2S RX when reg_rx_start is 0 or RX FIFO is full.
    -                RX_STOP_MODE: u2,
    -                ///  1: I2S RX left alignment mode. 0: I2S RX right alignment mode.
    -                RX_LEFT_ALIGN: u1,
    -                ///  1: store 24 channel bits to 32 bits. 0:store 24 channel bits to 24 bits.
    -                RX_24_FILL_EN: u1,
    -                ///  0: WS should be 0 when receiving left channel data, and WS is 1in right channel. 1: WS should be 1 when receiving left channel data, and WS is 0in right channel.
    -                RX_WS_IDLE_POL: u1,
    -                ///  I2S Rx bit endian. 1:small endian, the LSB is received first. 0:big endian, the MSB is received first.
    -                RX_BIT_ORDER: u1,
    -                ///  1: Enable I2S TDM Rx mode . 0: Disable.
    -                RX_TDM_EN: u1,
    -                ///  1: Enable I2S PDM Rx mode . 0: Disable.
    -                RX_PDM_EN: u1,
    -                padding: u11,
    -            }),
    -            ///  I2S TX configure register
    -            TX_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  Set this bit to reset transmitter
    -                TX_RESET: u1,
    -                ///  Set this bit to reset Tx AFIFO
    -                TX_FIFO_RESET: u1,
    -                ///  Set this bit to start transmitting data
    -                TX_START: u1,
    -                ///  Set this bit to enable slave transmitter mode
    -                TX_SLAVE_MOD: u1,
    -                reserved5: u1,
    -                ///  Set this bit to enable transmitter in mono mode
    -                TX_MONO: u1,
    -                ///  1: The value of Left channel data is equal to the value of right channel data in I2S TX mono mode or TDM channel select mode. 0: The invalid channel data is reg_i2s_single_data in I2S TX mono mode or TDM channel select mode.
    -                TX_CHAN_EQUAL: u1,
    -                ///  I2S Tx byte endian, 1: low addr value to high addr. 0: low addr with low addr value.
    -                TX_BIG_ENDIAN: u1,
    -                ///  Set 1 to update I2S TX registers from APB clock domain to I2S TX clock domain. This bit will be cleared by hardware after update register done.
    -                TX_UPDATE: u1,
    -                ///  1: The first channel data value is valid in I2S TX mono mode. 0: The second channel data value is valid in I2S TX mono mode.
    -                TX_MONO_FST_VLD: u1,
    -                ///  I2S TX compress/decompress configuration bit. & 0 (atol): A-Law decompress, 1 (ltoa) : A-Law compress, 2 (utol) : u-Law decompress, 3 (ltou) : u-Law compress. &
    -                TX_PCM_CONF: u2,
    -                ///  Set this bit to bypass Compress/Decompress module for transmitted data.
    -                TX_PCM_BYPASS: u1,
    -                ///  Set this bit to stop disable output BCK signal and WS signal when tx FIFO is emtpy
    -                TX_STOP_EN: u1,
    -                reserved15: u1,
    -                ///  1: I2S TX left alignment mode. 0: I2S TX right alignment mode.
    -                TX_LEFT_ALIGN: u1,
    -                ///  1: Sent 32 bits in 24 channel bits mode. 0: Sent 24 bits in 24 channel bits mode
    -                TX_24_FILL_EN: u1,
    -                ///  0: WS should be 0 when sending left channel data, and WS is 1in right channel. 1: WS should be 1 when sending left channel data, and WS is 0in right channel.
    -                TX_WS_IDLE_POL: u1,
    -                ///  I2S Tx bit endian. 1:small endian, the LSB is sent first. 0:big endian, the MSB is sent first.
    -                TX_BIT_ORDER: u1,
    -                ///  1: Enable I2S TDM Tx mode . 0: Disable.
    -                TX_TDM_EN: u1,
    -                ///  1: Enable I2S PDM Tx mode . 0: Disable.
    -                TX_PDM_EN: u1,
    -                reserved24: u3,
    -                ///  I2S transmitter channel mode configuration bits.
    -                TX_CHAN_MOD: u3,
    -                ///  Enable signal loop back mode with transmitter module and receiver module sharing the same WS and BCK signals.
    -                SIG_LOOPBACK: u1,
    -                padding: u4,
    -            }),
    -            ///  I2S RX configure register 1
    -            RX_CONF1: mmio.Mmio(packed struct(u32) {
    -                ///  The width of rx_ws_out in TDM mode is (I2S_RX_TDM_WS_WIDTH[6:0] +1) * T_bck
    -                RX_TDM_WS_WIDTH: u7,
    -                ///  Bit clock configuration bits in receiver mode.
    -                RX_BCK_DIV_NUM: u6,
    -                ///  Set the bits to configure the valid data bit length of I2S receiver channel. 7: all the valid channel data is in 8-bit-mode. 15: all the valid channel data is in 16-bit-mode. 23: all the valid channel data is in 24-bit-mode. 31:all the valid channel data is in 32-bit-mode.
    -                RX_BITS_MOD: u5,
    -                ///  I2S Rx half sample bits -1.
    -                RX_HALF_SAMPLE_BITS: u6,
    -                ///  The Rx bit number for each channel minus 1in TDM mode.
    -                RX_TDM_CHAN_BITS: u5,
    -                ///  Set this bit to enable receiver in Phillips standard mode
    -                RX_MSB_SHIFT: u1,
    -                padding: u2,
    -            }),
    -            ///  I2S TX configure register 1
    -            TX_CONF1: mmio.Mmio(packed struct(u32) {
    -                ///  The width of tx_ws_out in TDM mode is (I2S_TX_TDM_WS_WIDTH[6:0] +1) * T_bck
    -                TX_TDM_WS_WIDTH: u7,
    -                ///  Bit clock configuration bits in transmitter mode.
    -                TX_BCK_DIV_NUM: u6,
    -                ///  Set the bits to configure the valid data bit length of I2S transmitter channel. 7: all the valid channel data is in 8-bit-mode. 15: all the valid channel data is in 16-bit-mode. 23: all the valid channel data is in 24-bit-mode. 31:all the valid channel data is in 32-bit-mode.
    -                TX_BITS_MOD: u5,
    -                ///  I2S Tx half sample bits -1.
    -                TX_HALF_SAMPLE_BITS: u6,
    -                ///  The Tx bit number for each channel minus 1in TDM mode.
    -                TX_TDM_CHAN_BITS: u5,
    -                ///  Set this bit to enable transmitter in Phillips standard mode
    -                TX_MSB_SHIFT: u1,
    -                ///  1: BCK is not delayed to generate pos/neg edge in master mode. 0: BCK is delayed to generate pos/neg edge in master mode.
    -                TX_BCK_NO_DLY: u1,
    -                padding: u1,
    -            }),
    -            ///  I2S RX clock configure register
    -            RX_CLKM_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  Integral I2S clock divider value
    -                RX_CLKM_DIV_NUM: u8,
    -                reserved26: u18,
    -                ///  I2S Rx module clock enable signal.
    -                RX_CLK_ACTIVE: u1,
    -                ///  Select I2S Rx module source clock. 0: no clock. 1: APLL. 2: CLK160. 3: I2S_MCLK_in.
    -                RX_CLK_SEL: u2,
    -                ///  0: UseI2S Tx module clock as I2S_MCLK_OUT. 1: UseI2S Rx module clock as I2S_MCLK_OUT.
    -                MCLK_SEL: u1,
    -                padding: u2,
    -            }),
    -            ///  I2S TX clock configure register
    -            TX_CLKM_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  Integral I2S TX clock divider value. f_I2S_CLK = f_I2S_CLK_S/(N+b/a). There will be (a-b) * n-div and b * (n+1)-div. So the average combination will be: for b <= a/2, z * [x * n-div + (n+1)-div] + y * n-div. For b > a/2, z * [n-div + x * (n+1)-div] + y * (n+1)-div.
    -                TX_CLKM_DIV_NUM: u8,
    -                reserved26: u18,
    -                ///  I2S Tx module clock enable signal.
    -                TX_CLK_ACTIVE: u1,
    -                ///  Select I2S Tx module source clock. 0: XTAL clock. 1: APLL. 2: CLK160. 3: I2S_MCLK_in.
    -                TX_CLK_SEL: u2,
    -                ///  Set this bit to enable clk gate
    -                CLK_EN: u1,
    -                padding: u2,
    -            }),
    -            ///  I2S RX module clock divider configure register
    -            RX_CLKM_DIV_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  For b <= a/2, the value of I2S_RX_CLKM_DIV_Z is b. For b > a/2, the value of I2S_RX_CLKM_DIV_Z is (a-b).
    -                RX_CLKM_DIV_Z: u9,
    -                ///  For b <= a/2, the value of I2S_RX_CLKM_DIV_Y is (a%b) . For b > a/2, the value of I2S_RX_CLKM_DIV_Y is (a%(a-b)).
    -                RX_CLKM_DIV_Y: u9,
    -                ///  For b <= a/2, the value of I2S_RX_CLKM_DIV_X is (a/b) - 1. For b > a/2, the value of I2S_RX_CLKM_DIV_X is (a/(a-b)) - 1.
    -                RX_CLKM_DIV_X: u9,
    -                ///  For b <= a/2, the value of I2S_RX_CLKM_DIV_YN1 is 0 . For b > a/2, the value of I2S_RX_CLKM_DIV_YN1 is 1.
    -                RX_CLKM_DIV_YN1: u1,
    -                padding: u4,
    -            }),
    -            ///  I2S TX module clock divider configure register
    -            TX_CLKM_DIV_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  For b <= a/2, the value of I2S_TX_CLKM_DIV_Z is b. For b > a/2, the value of I2S_TX_CLKM_DIV_Z is (a-b).
    -                TX_CLKM_DIV_Z: u9,
    -                ///  For b <= a/2, the value of I2S_TX_CLKM_DIV_Y is (a%b) . For b > a/2, the value of I2S_TX_CLKM_DIV_Y is (a%(a-b)).
    -                TX_CLKM_DIV_Y: u9,
    -                ///  For b <= a/2, the value of I2S_TX_CLKM_DIV_X is (a/b) - 1. For b > a/2, the value of I2S_TX_CLKM_DIV_X is (a/(a-b)) - 1.
    -                TX_CLKM_DIV_X: u9,
    -                ///  For b <= a/2, the value of I2S_TX_CLKM_DIV_YN1 is 0 . For b > a/2, the value of I2S_TX_CLKM_DIV_YN1 is 1.
    -                TX_CLKM_DIV_YN1: u1,
    -                padding: u4,
    -            }),
    -            ///  I2S TX PCM2PDM configuration register
    -            TX_PCM2PDM_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  I2S TX PDM bypass hp filter or not. The option has been removed.
    -                TX_PDM_HP_BYPASS: u1,
    -                ///  I2S TX PDM OSR2 value
    -                TX_PDM_SINC_OSR2: u4,
    -                ///  I2S TX PDM prescale for sigmadelta
    -                TX_PDM_PRESCALE: u8,
    -                ///  I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4
    -                TX_PDM_HP_IN_SHIFT: u2,
    -                ///  I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4
    -                TX_PDM_LP_IN_SHIFT: u2,
    -                ///  I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4
    -                TX_PDM_SINC_IN_SHIFT: u2,
    -                ///  I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4
    -                TX_PDM_SIGMADELTA_IN_SHIFT: u2,
    -                ///  I2S TX PDM sigmadelta dither2 value
    -                TX_PDM_SIGMADELTA_DITHER2: u1,
    -                ///  I2S TX PDM sigmadelta dither value
    -                TX_PDM_SIGMADELTA_DITHER: u1,
    -                ///  I2S TX PDM dac mode enable
    -                TX_PDM_DAC_2OUT_EN: u1,
    -                ///  I2S TX PDM dac 2channel enable
    -                TX_PDM_DAC_MODE_EN: u1,
    -                ///  I2S TX PDM Converter enable
    -                PCM2PDM_CONV_EN: u1,
    -                padding: u6,
    -            }),
    -            ///  I2S TX PCM2PDM configuration register
    -            TX_PCM2PDM_CONF1: mmio.Mmio(packed struct(u32) {
    -                ///  I2S TX PDM Fp
    -                TX_PDM_FP: u10,
    -                ///  I2S TX PDM Fs
    -                TX_PDM_FS: u10,
    -                ///  The fourth parameter of PDM TX IIR_HP filter stage 2 is (504 + I2S_TX_IIR_HP_MULT12_5[2:0])
    -                TX_IIR_HP_MULT12_5: u3,
    -                ///  The fourth parameter of PDM TX IIR_HP filter stage 1 is (504 + I2S_TX_IIR_HP_MULT12_0[2:0])
    -                TX_IIR_HP_MULT12_0: u3,
    -                padding: u6,
    -            }),
    -            reserved80: [8]u8,
    -            ///  I2S TX TDM mode control register
    -            RX_TDM_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  1: Enable the valid data input of I2S RX TDM or PDM channel 0. 0: Disable, just input 0 in this channel.
    -                RX_TDM_PDM_CHAN0_EN: u1,
    -                ///  1: Enable the valid data input of I2S RX TDM or PDM channel 1. 0: Disable, just input 0 in this channel.
    -                RX_TDM_PDM_CHAN1_EN: u1,
    -                ///  1: Enable the valid data input of I2S RX TDM or PDM channel 2. 0: Disable, just input 0 in this channel.
    -                RX_TDM_PDM_CHAN2_EN: u1,
    -                ///  1: Enable the valid data input of I2S RX TDM or PDM channel 3. 0: Disable, just input 0 in this channel.
    -                RX_TDM_PDM_CHAN3_EN: u1,
    -                ///  1: Enable the valid data input of I2S RX TDM or PDM channel 4. 0: Disable, just input 0 in this channel.
    -                RX_TDM_PDM_CHAN4_EN: u1,
    -                ///  1: Enable the valid data input of I2S RX TDM or PDM channel 5. 0: Disable, just input 0 in this channel.
    -                RX_TDM_PDM_CHAN5_EN: u1,
    -                ///  1: Enable the valid data input of I2S RX TDM or PDM channel 6. 0: Disable, just input 0 in this channel.
    -                RX_TDM_PDM_CHAN6_EN: u1,
    -                ///  1: Enable the valid data input of I2S RX TDM or PDM channel 7. 0: Disable, just input 0 in this channel.
    -                RX_TDM_PDM_CHAN7_EN: u1,
    -                ///  1: Enable the valid data input of I2S RX TDM channel 8. 0: Disable, just input 0 in this channel.
    -                RX_TDM_CHAN8_EN: u1,
    -                ///  1: Enable the valid data input of I2S RX TDM channel 9. 0: Disable, just input 0 in this channel.
    -                RX_TDM_CHAN9_EN: u1,
    -                ///  1: Enable the valid data input of I2S RX TDM channel 10. 0: Disable, just input 0 in this channel.
    -                RX_TDM_CHAN10_EN: u1,
    -                ///  1: Enable the valid data input of I2S RX TDM channel 11. 0: Disable, just input 0 in this channel.
    -                RX_TDM_CHAN11_EN: u1,
    -                ///  1: Enable the valid data input of I2S RX TDM channel 12. 0: Disable, just input 0 in this channel.
    -                RX_TDM_CHAN12_EN: u1,
    -                ///  1: Enable the valid data input of I2S RX TDM channel 13. 0: Disable, just input 0 in this channel.
    -                RX_TDM_CHAN13_EN: u1,
    -                ///  1: Enable the valid data input of I2S RX TDM channel 14. 0: Disable, just input 0 in this channel.
    -                RX_TDM_CHAN14_EN: u1,
    -                ///  1: Enable the valid data input of I2S RX TDM channel 15. 0: Disable, just input 0 in this channel.
    -                RX_TDM_CHAN15_EN: u1,
    -                ///  The total channel number of I2S TX TDM mode.
    -                RX_TDM_TOT_CHAN_NUM: u4,
    -                padding: u12,
    -            }),
    -            ///  I2S TX TDM mode control register
    -            TX_TDM_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  1: Enable the valid data output of I2S TX TDM channel 0. 0: Disable, just output 0 in this channel.
    -                TX_TDM_CHAN0_EN: u1,
    -                ///  1: Enable the valid data output of I2S TX TDM channel 1. 0: Disable, just output 0 in this channel.
    -                TX_TDM_CHAN1_EN: u1,
    -                ///  1: Enable the valid data output of I2S TX TDM channel 2. 0: Disable, just output 0 in this channel.
    -                TX_TDM_CHAN2_EN: u1,
    -                ///  1: Enable the valid data output of I2S TX TDM channel 3. 0: Disable, just output 0 in this channel.
    -                TX_TDM_CHAN3_EN: u1,
    -                ///  1: Enable the valid data output of I2S TX TDM channel 4. 0: Disable, just output 0 in this channel.
    -                TX_TDM_CHAN4_EN: u1,
    -                ///  1: Enable the valid data output of I2S TX TDM channel 5. 0: Disable, just output 0 in this channel.
    -                TX_TDM_CHAN5_EN: u1,
    -                ///  1: Enable the valid data output of I2S TX TDM channel 6. 0: Disable, just output 0 in this channel.
    -                TX_TDM_CHAN6_EN: u1,
    -                ///  1: Enable the valid data output of I2S TX TDM channel 7. 0: Disable, just output 0 in this channel.
    -                TX_TDM_CHAN7_EN: u1,
    -                ///  1: Enable the valid data output of I2S TX TDM channel 8. 0: Disable, just output 0 in this channel.
    -                TX_TDM_CHAN8_EN: u1,
    -                ///  1: Enable the valid data output of I2S TX TDM channel 9. 0: Disable, just output 0 in this channel.
    -                TX_TDM_CHAN9_EN: u1,
    -                ///  1: Enable the valid data output of I2S TX TDM channel 10. 0: Disable, just output 0 in this channel.
    -                TX_TDM_CHAN10_EN: u1,
    -                ///  1: Enable the valid data output of I2S TX TDM channel 11. 0: Disable, just output 0 in this channel.
    -                TX_TDM_CHAN11_EN: u1,
    -                ///  1: Enable the valid data output of I2S TX TDM channel 12. 0: Disable, just output 0 in this channel.
    -                TX_TDM_CHAN12_EN: u1,
    -                ///  1: Enable the valid data output of I2S TX TDM channel 13. 0: Disable, just output 0 in this channel.
    -                TX_TDM_CHAN13_EN: u1,
    -                ///  1: Enable the valid data output of I2S TX TDM channel 14. 0: Disable, just output 0 in this channel.
    -                TX_TDM_CHAN14_EN: u1,
    -                ///  1: Enable the valid data output of I2S TX TDM channel 15. 0: Disable, just output 0 in this channel.
    -                TX_TDM_CHAN15_EN: u1,
    -                ///  The total channel number of I2S TX TDM mode.
    -                TX_TDM_TOT_CHAN_NUM: u4,
    -                ///  When DMA TX buffer stores the data of (REG_TX_TDM_TOT_CHAN_NUM + 1) channels, and only the data of the enabled channels is sent, then this bit should be set. Clear it when all the data stored in DMA TX buffer is for enabled channels.
    -                TX_TDM_SKIP_MSK_EN: u1,
    -                padding: u11,
    -            }),
    -            ///  I2S RX timing control register
    -            RX_TIMING: mmio.Mmio(packed struct(u32) {
    -                ///  The delay mode of I2S Rx SD input signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used.
    -                RX_SD_IN_DM: u2,
    -                reserved16: u14,
    -                ///  The delay mode of I2S Rx WS output signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used.
    -                RX_WS_OUT_DM: u2,
    -                reserved20: u2,
    -                ///  The delay mode of I2S Rx BCK output signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used.
    -                RX_BCK_OUT_DM: u2,
    -                reserved24: u2,
    -                ///  The delay mode of I2S Rx WS input signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used.
    -                RX_WS_IN_DM: u2,
    -                reserved28: u2,
    -                ///  The delay mode of I2S Rx BCK input signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used.
    -                RX_BCK_IN_DM: u2,
    -                padding: u2,
    -            }),
    -            ///  I2S TX timing control register
    -            TX_TIMING: mmio.Mmio(packed struct(u32) {
    -                ///  The delay mode of I2S TX SD output signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used.
    -                TX_SD_OUT_DM: u2,
    -                reserved4: u2,
    -                ///  The delay mode of I2S TX SD1 output signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used.
    -                TX_SD1_OUT_DM: u2,
    -                reserved16: u10,
    -                ///  The delay mode of I2S TX WS output signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used.
    -                TX_WS_OUT_DM: u2,
    -                reserved20: u2,
    -                ///  The delay mode of I2S TX BCK output signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used.
    -                TX_BCK_OUT_DM: u2,
    -                reserved24: u2,
    -                ///  The delay mode of I2S TX WS input signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used.
    -                TX_WS_IN_DM: u2,
    -                reserved28: u2,
    -                ///  The delay mode of I2S TX BCK input signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used.
    -                TX_BCK_IN_DM: u2,
    -                padding: u2,
    -            }),
    -            ///  I2S HUNG configure register.
    -            LC_HUNG_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  the i2s_tx_hung_int interrupt or the i2s_rx_hung_int interrupt will be triggered when fifo hung counter is equal to this value
    -                LC_FIFO_TIMEOUT: u8,
    -                ///  The bits are used to scale tick counter threshold. The tick counter is reset when counter value >= 88000/2^i2s_lc_fifo_timeout_shift
    -                LC_FIFO_TIMEOUT_SHIFT: u3,
    -                ///  The enable bit for FIFO timeout
    -                LC_FIFO_TIMEOUT_ENA: u1,
    -                padding: u20,
    -            }),
    -            ///  I2S RX data number control register.
    -            RXEOF_NUM: mmio.Mmio(packed struct(u32) {
    -                ///  The receive data bit length is (I2S_RX_BITS_MOD[4:0] + 1) * (REG_RX_EOF_NUM[11:0] + 1) . It will trigger in_suc_eof interrupt in the configured DMA RX channel.
    -                RX_EOF_NUM: u12,
    -                padding: u20,
    -            }),
    -            ///  I2S signal data register
    -            CONF_SIGLE_DATA: mmio.Mmio(packed struct(u32) {
    -                ///  The configured constant channel data to be sent out.
    -                SINGLE_DATA: u32,
    -            }),
    -            ///  I2S TX status register
    -            STATE: mmio.Mmio(packed struct(u32) {
    -                ///  1: i2s_tx is idle state. 0: i2s_tx is working.
    -                TX_IDLE: u1,
    -                padding: u31,
    -            }),
    -            reserved128: [16]u8,
    -            ///  Version control register
    -            DATE: mmio.Mmio(packed struct(u32) {
    -                ///  I2S version control register
    -                DATE: u28,
    -                padding: u4,
    -            }),
    -        };
    -
    -        ///  Interrupt Core
    -        pub const INTERRUPT_CORE0 = extern struct {
    -            ///  mac intr map register
    -            MAC_INTR_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  core0_mac_intr_map
    -                MAC_INTR_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  mac nmi_intr map register
    -            MAC_NMI_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_mac_nmi_map
    -                MAC_NMI_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  pwr intr map register
    -            PWR_INTR_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_pwr_intr_map
    -                PWR_INTR_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  bb intr map register
    -            BB_INT_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_bb_int_map
    -                BB_INT_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  bt intr map register
    -            BT_MAC_INT_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_bt_mac_int_map
    -                BT_MAC_INT_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  bb_bt intr map register
    -            BT_BB_INT_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_bt_bb_int_map
    -                BT_BB_INT_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  bb_bt_nmi intr map register
    -            BT_BB_NMI_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_bt_bb_nmi_map
    -                BT_BB_NMI_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  rwbt intr map register
    -            RWBT_IRQ_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_rwbt_irq_map
    -                RWBT_IRQ_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  rwble intr map register
    -            RWBLE_IRQ_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_rwble_irq_map
    -                RWBLE_IRQ_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  rwbt_nmi intr map register
    -            RWBT_NMI_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_rwbt_nmi_map
    -                RWBT_NMI_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  rwble_nmi intr map register
    -            RWBLE_NMI_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_rwble_nmi_map
    -                RWBLE_NMI_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  i2c intr map register
    -            I2C_MST_INT_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_i2c_mst_int_map
    -                I2C_MST_INT_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  slc0 intr map register
    -            SLC0_INTR_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_slc0_intr_map
    -                SLC0_INTR_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  slc1 intr map register
    -            SLC1_INTR_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_slc1_intr_map
    -                SLC1_INTR_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  apb_ctrl intr map register
    -            APB_CTRL_INTR_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_apb_ctrl_intr_map
    -                APB_CTRL_INTR_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  uchi0 intr map register
    -            UHCI0_INTR_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_uhci0_intr_map
    -                UHCI0_INTR_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  gpio intr map register
    -            GPIO_INTERRUPT_PRO_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_gpio_interrupt_pro_map
    -                GPIO_INTERRUPT_PRO_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  gpio_pro intr map register
    -            GPIO_INTERRUPT_PRO_NMI_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_gpio_interrupt_pro_nmi_map
    -                GPIO_INTERRUPT_PRO_NMI_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  gpio_pro_nmi intr map register
    -            SPI_INTR_1_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_spi_intr_1_map
    -                SPI_INTR_1_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  spi1 intr map register
    -            SPI_INTR_2_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_spi_intr_2_map
    -                SPI_INTR_2_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  spi2 intr map register
    -            I2S1_INT_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_i2s1_int_map
    -                I2S1_INT_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  i2s1 intr map register
    -            UART_INTR_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_uart_intr_map
    -                UART_INTR_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  uart1 intr map register
    -            UART1_INTR_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_uart1_intr_map
    -                UART1_INTR_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  ledc intr map register
    -            LEDC_INT_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_ledc_int_map
    -                LEDC_INT_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  efuse intr map register
    -            EFUSE_INT_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_efuse_int_map
    -                EFUSE_INT_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  can intr map register
    -            CAN_INT_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_can_int_map
    -                CAN_INT_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  usb intr map register
    -            USB_INTR_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_usb_intr_map
    -                USB_INTR_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  rtc intr map register
    -            RTC_CORE_INTR_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_rtc_core_intr_map
    -                RTC_CORE_INTR_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  rmt intr map register
    -            RMT_INTR_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_rmt_intr_map
    -                RMT_INTR_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  i2c intr map register
    -            I2C_EXT0_INTR_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_i2c_ext0_intr_map
    -                I2C_EXT0_INTR_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  timer1 intr map register
    -            TIMER_INT1_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_timer_int1_map
    -                TIMER_INT1_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  timer2 intr map register
    -            TIMER_INT2_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_timer_int2_map
    -                TIMER_INT2_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  tg to intr map register
    -            TG_T0_INT_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_tg_t0_int_map
    -                TG_T0_INT_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  tg wdt intr map register
    -            TG_WDT_INT_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_tg_wdt_int_map
    -                TG_WDT_INT_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  tg1 to intr map register
    -            TG1_T0_INT_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_tg1_t0_int_map
    -                TG1_T0_INT_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  tg1 wdt intr map register
    -            TG1_WDT_INT_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_tg1_wdt_int_map
    -                TG1_WDT_INT_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  cache ia intr map register
    -            CACHE_IA_INT_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cache_ia_int_map
    -                CACHE_IA_INT_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  systimer intr map register
    -            SYSTIMER_TARGET0_INT_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_systimer_target0_int_map
    -                SYSTIMER_TARGET0_INT_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  systimer target1 intr map register
    -            SYSTIMER_TARGET1_INT_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_systimer_target1_int_map
    -                SYSTIMER_TARGET1_INT_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  systimer target2 intr map register
    -            SYSTIMER_TARGET2_INT_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_systimer_target2_int_map
    -                SYSTIMER_TARGET2_INT_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  spi mem reject intr map register
    -            SPI_MEM_REJECT_INTR_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_spi_mem_reject_intr_map
    -                SPI_MEM_REJECT_INTR_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  icache perload intr map register
    -            ICACHE_PRELOAD_INT_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_icache_preload_int_map
    -                ICACHE_PRELOAD_INT_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  icache sync intr map register
    -            ICACHE_SYNC_INT_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_icache_sync_int_map
    -                ICACHE_SYNC_INT_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  adc intr map register
    -            APB_ADC_INT_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_apb_adc_int_map
    -                APB_ADC_INT_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  dma ch0 intr map register
    -            DMA_CH0_INT_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_dma_ch0_int_map
    -                DMA_CH0_INT_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  dma ch1 intr map register
    -            DMA_CH1_INT_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_dma_ch1_int_map
    -                DMA_CH1_INT_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  dma ch2 intr map register
    -            DMA_CH2_INT_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_dma_ch2_int_map
    -                DMA_CH2_INT_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  rsa intr map register
    -            RSA_INT_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_rsa_int_map
    -                RSA_INT_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  aes intr map register
    -            AES_INT_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_aes_int_map
    -                AES_INT_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  sha intr map register
    -            SHA_INT_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_sha_int_map
    -                SHA_INT_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  cpu from cpu 0 intr map register
    -            CPU_INTR_FROM_CPU_0_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_intr_from_cpu_0_map
    -                CPU_INTR_FROM_CPU_0_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  cpu from cpu 0 intr map register
    -            CPU_INTR_FROM_CPU_1_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_intr_from_cpu_1_map
    -                CPU_INTR_FROM_CPU_1_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  cpu from cpu 1 intr map register
    -            CPU_INTR_FROM_CPU_2_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_intr_from_cpu_2_map
    -                CPU_INTR_FROM_CPU_2_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  cpu from cpu 3 intr map register
    -            CPU_INTR_FROM_CPU_3_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_intr_from_cpu_3_map
    -                CPU_INTR_FROM_CPU_3_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  assist debug intr map register
    -            ASSIST_DEBUG_INTR_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_assist_debug_intr_map
    -                ASSIST_DEBUG_INTR_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  dma pms violatile intr map register
    -            DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_dma_apbperi_pms_monitor_violate_intr_map
    -                DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  iram0 pms violatile intr map register
    -            CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_core_0_iram0_pms_monitor_violate_intr_map
    -                CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  mac intr map register
    -            CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_core_0_dram0_pms_monitor_violate_intr_map
    -                CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  mac intr map register
    -            CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_core_0_pif_pms_monitor_violate_intr_map
    -                CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  mac intr map register
    -            CORE_0_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_core_0_pif_pms_monitor_violate_size_intr_map
    -                CORE_0_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  mac intr map register
    -            BACKUP_PMS_VIOLATE_INTR_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_backup_pms_violate_intr_map
    -                BACKUP_PMS_VIOLATE_INTR_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  mac intr map register
    -            CACHE_CORE0_ACS_INT_MAP: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cache_core0_acs_int_map
    -                CACHE_CORE0_ACS_INT_MAP: u5,
    -                padding: u27,
    -            }),
    -            ///  mac intr map register
    -            INTR_STATUS_REG_0: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_intr_status_0
    -                INTR_STATUS_0: u32,
    -            }),
    -            ///  mac intr map register
    -            INTR_STATUS_REG_1: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_intr_status_1
    -                INTR_STATUS_1: u32,
    -            }),
    -            ///  mac intr map register
    -            CLOCK_GATE: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_reg_clk_en
    -                REG_CLK_EN: u1,
    -                padding: u31,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_int_enable
    -                CPU_INT_ENABLE: u32,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_TYPE: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_int_type
    -                CPU_INT_TYPE: u32,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_CLEAR: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_int_clear
    -                CPU_INT_CLEAR: u32,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_EIP_STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_int_eip_status
    -                CPU_INT_EIP_STATUS: u32,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_0: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_0_map
    -                CPU_PRI_0_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_1: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_1_map
    -                CPU_PRI_1_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_2: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_2_map
    -                CPU_PRI_2_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_3: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_3_map
    -                CPU_PRI_3_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_4: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_4_map
    -                CPU_PRI_4_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_5: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_5_map
    -                CPU_PRI_5_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_6: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_6_map
    -                CPU_PRI_6_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_7: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_7_map
    -                CPU_PRI_7_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_8: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_8_map
    -                CPU_PRI_8_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_9: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_9_map
    -                CPU_PRI_9_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_10: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_10_map
    -                CPU_PRI_10_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_11: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_11_map
    -                CPU_PRI_11_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_12: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_12_map
    -                CPU_PRI_12_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_13: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_13_map
    -                CPU_PRI_13_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_14: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_14_map
    -                CPU_PRI_14_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_15: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_15_map
    -                CPU_PRI_15_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_16: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_16_map
    -                CPU_PRI_16_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_17: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_17_map
    -                CPU_PRI_17_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_18: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_18_map
    -                CPU_PRI_18_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_19: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_19_map
    -                CPU_PRI_19_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_20: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_20_map
    -                CPU_PRI_20_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_21: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_21_map
    -                CPU_PRI_21_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_22: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_22_map
    -                CPU_PRI_22_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_23: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_23_map
    -                CPU_PRI_23_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_24: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_24_map
    -                CPU_PRI_24_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_25: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_25_map
    -                CPU_PRI_25_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_26: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_26_map
    -                CPU_PRI_26_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_27: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_27_map
    -                CPU_PRI_27_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_28: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_28_map
    -                CPU_PRI_28_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_29: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_29_map
    -                CPU_PRI_29_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_30: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_30_map
    -                CPU_PRI_30_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_PRI_31: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_pri_31_map
    -                CPU_PRI_31_MAP: u4,
    -                padding: u28,
    -            }),
    -            ///  mac intr map register
    -            CPU_INT_THRESH: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_cpu_int_thresh
    -                CPU_INT_THRESH: u4,
    -                padding: u28,
    -            }),
    -            reserved2044: [1636]u8,
    -            ///  mac intr map register
    -            INTERRUPT_REG_DATE: mmio.Mmio(packed struct(u32) {
    -                ///  reg_core0_interrupt_reg_date
    -                INTERRUPT_REG_DATE: u28,
    -                padding: u4,
    -            }),
    -        };
    -
    -        ///  Input/Output Multiplexer
    -        pub const IO_MUX = extern struct {
    -            ///  Clock Output Configuration Register
    -            PIN_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  If you want to output clock for I2S to CLK_OUT_out1, set this register to 0x0. CLK_OUT_out1 can be found in peripheral output signals.
    -                CLK_OUT1: u4,
    -                ///  If you want to output clock for I2S to CLK_OUT_out2, set this register to 0x0. CLK_OUT_out2 can be found in peripheral output signals.
    -                CLK_OUT2: u4,
    -                ///  If you want to output clock for I2S to CLK_OUT_out3, set this register to 0x0. CLK_OUT_out3 can be found in peripheral output signals.
    -                CLK_OUT3: u4,
    -                padding: u20,
    -            }),
    -            ///  IO MUX Configure Register for pad XTAL_32K_P
    -            GPIO: [22]mmio.Mmio(packed struct(u32) {
    -                ///  Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled.
    -                MCU_OE: u1,
    -                ///  Sleep mode selection of this pad. Set to 1 to put the pad in pad mode.
    -                SLP_SEL: u1,
    -                ///  Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0: internal pull-down disabled.
    -                MCU_WPD: u1,
    -                ///  Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0: internal pull-up disabled.
    -                MCU_WPU: u1,
    -                ///  Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled.
    -                MCU_IE: u1,
    -                reserved7: u2,
    -                ///  Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal pull-down disabled.
    -                FUN_WPD: u1,
    -                ///  Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up disabled.
    -                FUN_WPU: u1,
    -                ///  Input enable of the pad. 1: input enabled; 0: input disabled.
    -                FUN_IE: u1,
    -                ///  Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA.
    -                FUN_DRV: u2,
    -                ///  Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function 2; etc.
    -                MCU_SEL: u3,
    -                ///  Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled.
    -                FILTER_EN: u1,
    -                padding: u16,
    -            }),
    -            reserved252: [160]u8,
    -            ///  IO MUX Version Control Register
    -            DATE: mmio.Mmio(packed struct(u32) {
    -                ///  Version control register
    -                REG_DATE: u28,
    -                padding: u4,
    -            }),
    -        };
    -
    -        ///  LED Control PWM (Pulse Width Modulation)
    -        pub const LEDC = extern struct {
    -            ///  LEDC_LSCH0_CONF0.
    -            LSCH0_CONF0: mmio.Mmio(packed struct(u32) {
    -                ///  reg_timer_sel_lsch0.
    -                TIMER_SEL_LSCH0: u2,
    -                ///  reg_sig_out_en_lsch0.
    -                SIG_OUT_EN_LSCH0: u1,
    -                ///  reg_idle_lv_lsch0.
    -                IDLE_LV_LSCH0: u1,
    -                ///  reg_para_up_lsch0.
    -                PARA_UP_LSCH0: u1,
    -                ///  reg_ovf_num_lsch0.
    -                OVF_NUM_LSCH0: u10,
    -                ///  reg_ovf_cnt_en_lsch0.
    -                OVF_CNT_EN_LSCH0: u1,
    -                ///  reg_ovf_cnt_reset_lsch0.
    -                OVF_CNT_RESET_LSCH0: u1,
    -                padding: u15,
    -            }),
    -            ///  LEDC_LSCH0_HPOINT.
    -            LSCH0_HPOINT: mmio.Mmio(packed struct(u32) {
    -                ///  reg_hpoint_lsch0.
    -                HPOINT_LSCH0: u14,
    -                padding: u18,
    -            }),
    -            ///  LEDC_LSCH0_DUTY.
    -            LSCH0_DUTY: mmio.Mmio(packed struct(u32) {
    -                ///  reg_duty_lsch0.
    -                DUTY_LSCH0: u19,
    -                padding: u13,
    -            }),
    -            ///  LEDC_LSCH0_CONF1.
    -            LSCH0_CONF1: mmio.Mmio(packed struct(u32) {
    -                ///  reg_duty_scale_lsch0.
    -                DUTY_SCALE_LSCH0: u10,
    -                ///  reg_duty_cycle_lsch0.
    -                DUTY_CYCLE_LSCH0: u10,
    -                ///  reg_duty_num_lsch0.
    -                DUTY_NUM_LSCH0: u10,
    -                ///  reg_duty_inc_lsch0.
    -                DUTY_INC_LSCH0: u1,
    -                ///  reg_duty_start_lsch0.
    -                DUTY_START_LSCH0: u1,
    -            }),
    -            ///  LEDC_LSCH0_DUTY_R.
    -            LSCH0_DUTY_R: mmio.Mmio(packed struct(u32) {
    -                ///  reg_duty_lsch0_r.
    -                DUTY_LSCH0_R: u19,
    -                padding: u13,
    -            }),
    -            ///  LEDC_LSCH1_CONF0.
    -            LSCH1_CONF0: mmio.Mmio(packed struct(u32) {
    -                ///  reg_timer_sel_lsch1.
    -                TIMER_SEL_LSCH1: u2,
    -                ///  reg_sig_out_en_lsch1.
    -                SIG_OUT_EN_LSCH1: u1,
    -                ///  reg_idle_lv_lsch1.
    -                IDLE_LV_LSCH1: u1,
    -                ///  reg_para_up_lsch1.
    -                PARA_UP_LSCH1: u1,
    -                ///  reg_ovf_num_lsch1.
    -                OVF_NUM_LSCH1: u10,
    -                ///  reg_ovf_cnt_en_lsch1.
    -                OVF_CNT_EN_LSCH1: u1,
    -                ///  reg_ovf_cnt_reset_lsch1.
    -                OVF_CNT_RESET_LSCH1: u1,
    -                padding: u15,
    -            }),
    -            ///  LEDC_LSCH1_HPOINT.
    -            LSCH1_HPOINT: mmio.Mmio(packed struct(u32) {
    -                ///  reg_hpoint_lsch1.
    -                HPOINT_LSCH1: u14,
    -                padding: u18,
    -            }),
    -            ///  LEDC_LSCH1_DUTY.
    -            LSCH1_DUTY: mmio.Mmio(packed struct(u32) {
    -                ///  reg_duty_lsch1.
    -                DUTY_LSCH1: u19,
    -                padding: u13,
    -            }),
    -            ///  LEDC_LSCH1_CONF1.
    -            LSCH1_CONF1: mmio.Mmio(packed struct(u32) {
    -                ///  reg_duty_scale_lsch1.
    -                DUTY_SCALE_LSCH1: u10,
    -                ///  reg_duty_cycle_lsch1.
    -                DUTY_CYCLE_LSCH1: u10,
    -                ///  reg_duty_num_lsch1.
    -                DUTY_NUM_LSCH1: u10,
    -                ///  reg_duty_inc_lsch1.
    -                DUTY_INC_LSCH1: u1,
    -                ///  reg_duty_start_lsch1.
    -                DUTY_START_LSCH1: u1,
    -            }),
    -            ///  LEDC_LSCH1_DUTY_R.
    -            LSCH1_DUTY_R: mmio.Mmio(packed struct(u32) {
    -                ///  reg_duty_lsch1_r.
    -                DUTY_LSCH1_R: u19,
    -                padding: u13,
    -            }),
    -            ///  LEDC_LSCH2_CONF0.
    -            LSCH2_CONF0: mmio.Mmio(packed struct(u32) {
    -                ///  reg_timer_sel_lsch2.
    -                TIMER_SEL_LSCH2: u2,
    -                ///  reg_sig_out_en_lsch2.
    -                SIG_OUT_EN_LSCH2: u1,
    -                ///  reg_idle_lv_lsch2.
    -                IDLE_LV_LSCH2: u1,
    -                ///  reg_para_up_lsch2.
    -                PARA_UP_LSCH2: u1,
    -                ///  reg_ovf_num_lsch2.
    -                OVF_NUM_LSCH2: u10,
    -                ///  reg_ovf_cnt_en_lsch2.
    -                OVF_CNT_EN_LSCH2: u1,
    -                ///  reg_ovf_cnt_reset_lsch2.
    -                OVF_CNT_RESET_LSCH2: u1,
    -                padding: u15,
    -            }),
    -            ///  LEDC_LSCH2_HPOINT.
    -            LSCH2_HPOINT: mmio.Mmio(packed struct(u32) {
    -                ///  reg_hpoint_lsch2.
    -                HPOINT_LSCH2: u14,
    -                padding: u18,
    -            }),
    -            ///  LEDC_LSCH2_DUTY.
    -            LSCH2_DUTY: mmio.Mmio(packed struct(u32) {
    -                ///  reg_duty_lsch2.
    -                DUTY_LSCH2: u19,
    -                padding: u13,
    -            }),
    -            ///  LEDC_LSCH2_CONF1.
    -            LSCH2_CONF1: mmio.Mmio(packed struct(u32) {
    -                ///  reg_duty_scale_lsch2.
    -                DUTY_SCALE_LSCH2: u10,
    -                ///  reg_duty_cycle_lsch2.
    -                DUTY_CYCLE_LSCH2: u10,
    -                ///  reg_duty_num_lsch2.
    -                DUTY_NUM_LSCH2: u10,
    -                ///  reg_duty_inc_lsch2.
    -                DUTY_INC_LSCH2: u1,
    -                ///  reg_duty_start_lsch2.
    -                DUTY_START_LSCH2: u1,
    -            }),
    -            ///  LEDC_LSCH2_DUTY_R.
    -            LSCH2_DUTY_R: mmio.Mmio(packed struct(u32) {
    -                ///  reg_duty_lsch2_r.
    -                DUTY_LSCH2_R: u19,
    -                padding: u13,
    -            }),
    -            ///  LEDC_LSCH3_CONF0.
    -            LSCH3_CONF0: mmio.Mmio(packed struct(u32) {
    -                ///  reg_timer_sel_lsch3.
    -                TIMER_SEL_LSCH3: u2,
    -                ///  reg_sig_out_en_lsch3.
    -                SIG_OUT_EN_LSCH3: u1,
    -                ///  reg_idle_lv_lsch3.
    -                IDLE_LV_LSCH3: u1,
    -                ///  reg_para_up_lsch3.
    -                PARA_UP_LSCH3: u1,
    -                ///  reg_ovf_num_lsch3.
    -                OVF_NUM_LSCH3: u10,
    -                ///  reg_ovf_cnt_en_lsch3.
    -                OVF_CNT_EN_LSCH3: u1,
    -                ///  reg_ovf_cnt_reset_lsch3.
    -                OVF_CNT_RESET_LSCH3: u1,
    -                padding: u15,
    -            }),
    -            ///  LEDC_LSCH3_HPOINT.
    -            LSCH3_HPOINT: mmio.Mmio(packed struct(u32) {
    -                ///  reg_hpoint_lsch3.
    -                HPOINT_LSCH3: u14,
    -                padding: u18,
    -            }),
    -            ///  LEDC_LSCH3_DUTY.
    -            LSCH3_DUTY: mmio.Mmio(packed struct(u32) {
    -                ///  reg_duty_lsch3.
    -                DUTY_LSCH3: u19,
    -                padding: u13,
    -            }),
    -            ///  LEDC_LSCH3_CONF1.
    -            LSCH3_CONF1: mmio.Mmio(packed struct(u32) {
    -                ///  reg_duty_scale_lsch3.
    -                DUTY_SCALE_LSCH3: u10,
    -                ///  reg_duty_cycle_lsch3.
    -                DUTY_CYCLE_LSCH3: u10,
    -                ///  reg_duty_num_lsch3.
    -                DUTY_NUM_LSCH3: u10,
    -                ///  reg_duty_inc_lsch3.
    -                DUTY_INC_LSCH3: u1,
    -                ///  reg_duty_start_lsch3.
    -                DUTY_START_LSCH3: u1,
    -            }),
    -            ///  LEDC_LSCH3_DUTY_R.
    -            LSCH3_DUTY_R: mmio.Mmio(packed struct(u32) {
    -                ///  reg_duty_lsch3_r.
    -                DUTY_LSCH3_R: u19,
    -                padding: u13,
    -            }),
    -            ///  LEDC_LSCH4_CONF0.
    -            LSCH4_CONF0: mmio.Mmio(packed struct(u32) {
    -                ///  reg_timer_sel_lsch4.
    -                TIMER_SEL_LSCH4: u2,
    -                ///  reg_sig_out_en_lsch4.
    -                SIG_OUT_EN_LSCH4: u1,
    -                ///  reg_idle_lv_lsch4.
    -                IDLE_LV_LSCH4: u1,
    -                ///  reg_para_up_lsch4.
    -                PARA_UP_LSCH4: u1,
    -                ///  reg_ovf_num_lsch4.
    -                OVF_NUM_LSCH4: u10,
    -                ///  reg_ovf_cnt_en_lsch4.
    -                OVF_CNT_EN_LSCH4: u1,
    -                ///  reg_ovf_cnt_reset_lsch4.
    -                OVF_CNT_RESET_LSCH4: u1,
    -                padding: u15,
    -            }),
    -            ///  LEDC_LSCH4_HPOINT.
    -            LSCH4_HPOINT: mmio.Mmio(packed struct(u32) {
    -                ///  reg_hpoint_lsch4.
    -                HPOINT_LSCH4: u14,
    -                padding: u18,
    -            }),
    -            ///  LEDC_LSCH4_DUTY.
    -            LSCH4_DUTY: mmio.Mmio(packed struct(u32) {
    -                ///  reg_duty_lsch4.
    -                DUTY_LSCH4: u19,
    -                padding: u13,
    -            }),
    -            ///  LEDC_LSCH4_CONF1.
    -            LSCH4_CONF1: mmio.Mmio(packed struct(u32) {
    -                ///  reg_duty_scale_lsch4.
    -                DUTY_SCALE_LSCH4: u10,
    -                ///  reg_duty_cycle_lsch4.
    -                DUTY_CYCLE_LSCH4: u10,
    -                ///  reg_duty_num_lsch4.
    -                DUTY_NUM_LSCH4: u10,
    -                ///  reg_duty_inc_lsch4.
    -                DUTY_INC_LSCH4: u1,
    -                ///  reg_duty_start_lsch4.
    -                DUTY_START_LSCH4: u1,
    -            }),
    -            ///  LEDC_LSCH4_DUTY_R.
    -            LSCH4_DUTY_R: mmio.Mmio(packed struct(u32) {
    -                ///  reg_duty_lsch4_r.
    -                DUTY_LSCH4_R: u19,
    -                padding: u13,
    -            }),
    -            ///  LEDC_LSCH5_CONF0.
    -            LSCH5_CONF0: mmio.Mmio(packed struct(u32) {
    -                ///  reg_timer_sel_lsch5.
    -                TIMER_SEL_LSCH5: u2,
    -                ///  reg_sig_out_en_lsch5.
    -                SIG_OUT_EN_LSCH5: u1,
    -                ///  reg_idle_lv_lsch5.
    -                IDLE_LV_LSCH5: u1,
    -                ///  reg_para_up_lsch5.
    -                PARA_UP_LSCH5: u1,
    -                ///  reg_ovf_num_lsch5.
    -                OVF_NUM_LSCH5: u10,
    -                ///  reg_ovf_cnt_en_lsch5.
    -                OVF_CNT_EN_LSCH5: u1,
    -                ///  reg_ovf_cnt_reset_lsch5.
    -                OVF_CNT_RESET_LSCH5: u1,
    -                padding: u15,
    -            }),
    -            ///  LEDC_LSCH5_HPOINT.
    -            LSCH5_HPOINT: mmio.Mmio(packed struct(u32) {
    -                ///  reg_hpoint_lsch5.
    -                HPOINT_LSCH5: u14,
    -                padding: u18,
    -            }),
    -            ///  LEDC_LSCH5_DUTY.
    -            LSCH5_DUTY: mmio.Mmio(packed struct(u32) {
    -                ///  reg_duty_lsch5.
    -                DUTY_LSCH5: u19,
    -                padding: u13,
    -            }),
    -            ///  LEDC_LSCH5_CONF1.
    -            LSCH5_CONF1: mmio.Mmio(packed struct(u32) {
    -                ///  reg_duty_scale_lsch5.
    -                DUTY_SCALE_LSCH5: u10,
    -                ///  reg_duty_cycle_lsch5.
    -                DUTY_CYCLE_LSCH5: u10,
    -                ///  reg_duty_num_lsch5.
    -                DUTY_NUM_LSCH5: u10,
    -                ///  reg_duty_inc_lsch5.
    -                DUTY_INC_LSCH5: u1,
    -                ///  reg_duty_start_lsch5.
    -                DUTY_START_LSCH5: u1,
    -            }),
    -            ///  LEDC_LSCH5_DUTY_R.
    -            LSCH5_DUTY_R: mmio.Mmio(packed struct(u32) {
    -                ///  reg_duty_lsch5_r.
    -                DUTY_LSCH5_R: u19,
    -                padding: u13,
    -            }),
    -            reserved160: [40]u8,
    -            ///  LEDC_LSTIMER0_CONF.
    -            LSTIMER0_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  reg_lstimer0_duty_res.
    -                LSTIMER0_DUTY_RES: u4,
    -                ///  reg_clk_div_lstimer0.
    -                CLK_DIV_LSTIMER0: u18,
    -                ///  reg_lstimer0_pause.
    -                LSTIMER0_PAUSE: u1,
    -                ///  reg_lstimer0_rst.
    -                LSTIMER0_RST: u1,
    -                ///  reg_tick_sel_lstimer0.
    -                TICK_SEL_LSTIMER0: u1,
    -                ///  reg_lstimer0_para_up.
    -                LSTIMER0_PARA_UP: u1,
    -                padding: u6,
    -            }),
    -            ///  LEDC_LSTIMER0_VALUE.
    -            LSTIMER0_VALUE: mmio.Mmio(packed struct(u32) {
    -                ///  reg_lstimer0_cnt.
    -                LSTIMER0_CNT: u14,
    -                padding: u18,
    -            }),
    -            ///  LEDC_LSTIMER1_CONF.
    -            LSTIMER1_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  reg_lstimer1_duty_res.
    -                LSTIMER1_DUTY_RES: u4,
    -                ///  reg_clk_div_lstimer1.
    -                CLK_DIV_LSTIMER1: u18,
    -                ///  reg_lstimer1_pause.
    -                LSTIMER1_PAUSE: u1,
    -                ///  reg_lstimer1_rst.
    -                LSTIMER1_RST: u1,
    -                ///  reg_tick_sel_lstimer1.
    -                TICK_SEL_LSTIMER1: u1,
    -                ///  reg_lstimer1_para_up.
    -                LSTIMER1_PARA_UP: u1,
    -                padding: u6,
    -            }),
    -            ///  LEDC_LSTIMER1_VALUE.
    -            LSTIMER1_VALUE: mmio.Mmio(packed struct(u32) {
    -                ///  reg_lstimer1_cnt.
    -                LSTIMER1_CNT: u14,
    -                padding: u18,
    -            }),
    -            ///  LEDC_LSTIMER2_CONF.
    -            LSTIMER2_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  reg_lstimer2_duty_res.
    -                LSTIMER2_DUTY_RES: u4,
    -                ///  reg_clk_div_lstimer2.
    -                CLK_DIV_LSTIMER2: u18,
    -                ///  reg_lstimer2_pause.
    -                LSTIMER2_PAUSE: u1,
    -                ///  reg_lstimer2_rst.
    -                LSTIMER2_RST: u1,
    -                ///  reg_tick_sel_lstimer2.
    -                TICK_SEL_LSTIMER2: u1,
    -                ///  reg_lstimer2_para_up.
    -                LSTIMER2_PARA_UP: u1,
    -                padding: u6,
    -            }),
    -            ///  LEDC_LSTIMER2_VALUE.
    -            LSTIMER2_VALUE: mmio.Mmio(packed struct(u32) {
    -                ///  reg_lstimer2_cnt.
    -                LSTIMER2_CNT: u14,
    -                padding: u18,
    -            }),
    -            ///  LEDC_LSTIMER3_CONF.
    -            LSTIMER3_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  reg_lstimer3_duty_res.
    -                LSTIMER3_DUTY_RES: u4,
    -                ///  reg_clk_div_lstimer3.
    -                CLK_DIV_LSTIMER3: u18,
    -                ///  reg_lstimer3_pause.
    -                LSTIMER3_PAUSE: u1,
    -                ///  reg_lstimer3_rst.
    -                LSTIMER3_RST: u1,
    -                ///  reg_tick_sel_lstimer3.
    -                TICK_SEL_LSTIMER3: u1,
    -                ///  reg_lstimer3_para_up.
    -                LSTIMER3_PARA_UP: u1,
    -                padding: u6,
    -            }),
    -            ///  LEDC_LSTIMER3_VALUE.
    -            LSTIMER3_VALUE: mmio.Mmio(packed struct(u32) {
    -                ///  reg_lstimer3_cnt.
    -                LSTIMER3_CNT: u14,
    -                padding: u18,
    -            }),
    -            ///  LEDC_INT_RAW.
    -            INT_RAW: mmio.Mmio(packed struct(u32) {
    -                ///  reg_lstimer0_ovf_int_raw.
    -                LSTIMER0_OVF_INT_RAW: u1,
    -                ///  reg_lstimer1_ovf_int_raw.
    -                LSTIMER1_OVF_INT_RAW: u1,
    -                ///  reg_lstimer2_ovf_int_raw.
    -                LSTIMER2_OVF_INT_RAW: u1,
    -                ///  reg_lstimer3_ovf_int_raw.
    -                LSTIMER3_OVF_INT_RAW: u1,
    -                ///  reg_duty_chng_end_lsch0_int_raw.
    -                DUTY_CHNG_END_LSCH0_INT_RAW: u1,
    -                ///  reg_duty_chng_end_lsch1_int_raw.
    -                DUTY_CHNG_END_LSCH1_INT_RAW: u1,
    -                ///  reg_duty_chng_end_lsch2_int_raw.
    -                DUTY_CHNG_END_LSCH2_INT_RAW: u1,
    -                ///  reg_duty_chng_end_lsch3_int_raw.
    -                DUTY_CHNG_END_LSCH3_INT_RAW: u1,
    -                ///  reg_duty_chng_end_lsch4_int_raw.
    -                DUTY_CHNG_END_LSCH4_INT_RAW: u1,
    -                ///  reg_duty_chng_end_lsch5_int_raw.
    -                DUTY_CHNG_END_LSCH5_INT_RAW: u1,
    -                ///  reg_ovf_cnt_lsch0_int_raw.
    -                OVF_CNT_LSCH0_INT_RAW: u1,
    -                ///  reg_ovf_cnt_lsch1_int_raw.
    -                OVF_CNT_LSCH1_INT_RAW: u1,
    -                ///  reg_ovf_cnt_lsch2_int_raw.
    -                OVF_CNT_LSCH2_INT_RAW: u1,
    -                ///  reg_ovf_cnt_lsch3_int_raw.
    -                OVF_CNT_LSCH3_INT_RAW: u1,
    -                ///  reg_ovf_cnt_lsch4_int_raw.
    -                OVF_CNT_LSCH4_INT_RAW: u1,
    -                ///  reg_ovf_cnt_lsch5_int_raw.
    -                OVF_CNT_LSCH5_INT_RAW: u1,
    -                padding: u16,
    -            }),
    -            ///  LEDC_INT_ST.
    -            INT_ST: mmio.Mmio(packed struct(u32) {
    -                ///  reg_lstimer0_ovf_int_st.
    -                LSTIMER0_OVF_INT_ST: u1,
    -                ///  reg_lstimer1_ovf_int_st.
    -                LSTIMER1_OVF_INT_ST: u1,
    -                ///  reg_lstimer2_ovf_int_st.
    -                LSTIMER2_OVF_INT_ST: u1,
    -                ///  reg_lstimer3_ovf_int_st.
    -                LSTIMER3_OVF_INT_ST: u1,
    -                ///  reg_duty_chng_end_lsch0_int_st.
    -                DUTY_CHNG_END_LSCH0_INT_ST: u1,
    -                ///  reg_duty_chng_end_lsch1_int_st.
    -                DUTY_CHNG_END_LSCH1_INT_ST: u1,
    -                ///  reg_duty_chng_end_lsch2_int_st.
    -                DUTY_CHNG_END_LSCH2_INT_ST: u1,
    -                ///  reg_duty_chng_end_lsch3_int_st.
    -                DUTY_CHNG_END_LSCH3_INT_ST: u1,
    -                ///  reg_duty_chng_end_lsch4_int_st.
    -                DUTY_CHNG_END_LSCH4_INT_ST: u1,
    -                ///  reg_duty_chng_end_lsch5_int_st.
    -                DUTY_CHNG_END_LSCH5_INT_ST: u1,
    -                ///  reg_ovf_cnt_lsch0_int_st.
    -                OVF_CNT_LSCH0_INT_ST: u1,
    -                ///  reg_ovf_cnt_lsch1_int_st.
    -                OVF_CNT_LSCH1_INT_ST: u1,
    -                ///  reg_ovf_cnt_lsch2_int_st.
    -                OVF_CNT_LSCH2_INT_ST: u1,
    -                ///  reg_ovf_cnt_lsch3_int_st.
    -                OVF_CNT_LSCH3_INT_ST: u1,
    -                ///  reg_ovf_cnt_lsch4_int_st.
    -                OVF_CNT_LSCH4_INT_ST: u1,
    -                ///  reg_ovf_cnt_lsch5_int_st.
    -                OVF_CNT_LSCH5_INT_ST: u1,
    -                padding: u16,
    -            }),
    -            ///  LEDC_INT_ENA.
    -            INT_ENA: mmio.Mmio(packed struct(u32) {
    -                ///  reg_lstimer0_ovf_int_ena.
    -                LSTIMER0_OVF_INT_ENA: u1,
    -                ///  reg_lstimer1_ovf_int_ena.
    -                LSTIMER1_OVF_INT_ENA: u1,
    -                ///  reg_lstimer2_ovf_int_ena.
    -                LSTIMER2_OVF_INT_ENA: u1,
    -                ///  reg_lstimer3_ovf_int_ena.
    -                LSTIMER3_OVF_INT_ENA: u1,
    -                ///  reg_duty_chng_end_lsch0_int_ena.
    -                DUTY_CHNG_END_LSCH0_INT_ENA: u1,
    -                ///  reg_duty_chng_end_lsch1_int_ena.
    -                DUTY_CHNG_END_LSCH1_INT_ENA: u1,
    -                ///  reg_duty_chng_end_lsch2_int_ena.
    -                DUTY_CHNG_END_LSCH2_INT_ENA: u1,
    -                ///  reg_duty_chng_end_lsch3_int_ena.
    -                DUTY_CHNG_END_LSCH3_INT_ENA: u1,
    -                ///  reg_duty_chng_end_lsch4_int_ena.
    -                DUTY_CHNG_END_LSCH4_INT_ENA: u1,
    -                ///  reg_duty_chng_end_lsch5_int_ena.
    -                DUTY_CHNG_END_LSCH5_INT_ENA: u1,
    -                ///  reg_ovf_cnt_lsch0_int_ena.
    -                OVF_CNT_LSCH0_INT_ENA: u1,
    -                ///  reg_ovf_cnt_lsch1_int_ena.
    -                OVF_CNT_LSCH1_INT_ENA: u1,
    -                ///  reg_ovf_cnt_lsch2_int_ena.
    -                OVF_CNT_LSCH2_INT_ENA: u1,
    -                ///  reg_ovf_cnt_lsch3_int_ena.
    -                OVF_CNT_LSCH3_INT_ENA: u1,
    -                ///  reg_ovf_cnt_lsch4_int_ena.
    -                OVF_CNT_LSCH4_INT_ENA: u1,
    -                ///  reg_ovf_cnt_lsch5_int_ena.
    -                OVF_CNT_LSCH5_INT_ENA: u1,
    -                padding: u16,
    -            }),
    -            ///  LEDC_INT_CLR.
    -            INT_CLR: mmio.Mmio(packed struct(u32) {
    -                ///  reg_lstimer0_ovf_int_clr.
    -                LSTIMER0_OVF_INT_CLR: u1,
    -                ///  reg_lstimer1_ovf_int_clr.
    -                LSTIMER1_OVF_INT_CLR: u1,
    -                ///  reg_lstimer2_ovf_int_clr.
    -                LSTIMER2_OVF_INT_CLR: u1,
    -                ///  reg_lstimer3_ovf_int_clr.
    -                LSTIMER3_OVF_INT_CLR: u1,
    -                ///  reg_duty_chng_end_lsch0_int_clr.
    -                DUTY_CHNG_END_LSCH0_INT_CLR: u1,
    -                ///  reg_duty_chng_end_lsch1_int_clr.
    -                DUTY_CHNG_END_LSCH1_INT_CLR: u1,
    -                ///  reg_duty_chng_end_lsch2_int_clr.
    -                DUTY_CHNG_END_LSCH2_INT_CLR: u1,
    -                ///  reg_duty_chng_end_lsch3_int_clr.
    -                DUTY_CHNG_END_LSCH3_INT_CLR: u1,
    -                ///  reg_duty_chng_end_lsch4_int_clr.
    -                DUTY_CHNG_END_LSCH4_INT_CLR: u1,
    -                ///  reg_duty_chng_end_lsch5_int_clr.
    -                DUTY_CHNG_END_LSCH5_INT_CLR: u1,
    -                ///  reg_ovf_cnt_lsch0_int_clr.
    -                OVF_CNT_LSCH0_INT_CLR: u1,
    -                ///  reg_ovf_cnt_lsch1_int_clr.
    -                OVF_CNT_LSCH1_INT_CLR: u1,
    -                ///  reg_ovf_cnt_lsch2_int_clr.
    -                OVF_CNT_LSCH2_INT_CLR: u1,
    -                ///  reg_ovf_cnt_lsch3_int_clr.
    -                OVF_CNT_LSCH3_INT_CLR: u1,
    -                ///  reg_ovf_cnt_lsch4_int_clr.
    -                OVF_CNT_LSCH4_INT_CLR: u1,
    -                ///  reg_ovf_cnt_lsch5_int_clr.
    -                OVF_CNT_LSCH5_INT_CLR: u1,
    -                padding: u16,
    -            }),
    -            ///  LEDC_CONF.
    -            CONF: mmio.Mmio(packed struct(u32) {
    -                ///  reg_apb_clk_sel.
    -                APB_CLK_SEL: u2,
    -                reserved31: u29,
    -                ///  reg_clk_en.
    -                CLK_EN: u1,
    -            }),
    -            reserved252: [40]u8,
    -            ///  LEDC_DATE.
    -            DATE: mmio.Mmio(packed struct(u32) {
    -                ///  reg_ledc_date.
    -                LEDC_DATE: u32,
    -            }),
    -        };
    -
    -        ///  Remote Control Peripheral
    -        pub const RMT = extern struct {
    -            ///  RMT_CH0DATA_REG.
    -            CH0DATA: mmio.Mmio(packed struct(u32) {
    -                ///  Reserved.
    -                DATA: u32,
    -            }),
    -            ///  RMT_CH1DATA_REG.
    -            CH1DATA: mmio.Mmio(packed struct(u32) {
    -                ///  Reserved.
    -                DATA: u32,
    -            }),
    -            ///  RMT_CH2DATA_REG.
    -            CH2DATA: mmio.Mmio(packed struct(u32) {
    -                ///  Reserved.
    -                DATA: u32,
    -            }),
    -            ///  RMT_CH3DATA_REG.
    -            CH3DATA: mmio.Mmio(packed struct(u32) {
    -                ///  Reserved.
    -                DATA: u32,
    -            }),
    -            reserved28: [12]u8,
    -            ///  RMT_CH2CONF1_REG.
    -            CH2CONF1: mmio.Mmio(packed struct(u32) {
    -                ///  reg_rx_en_ch2.
    -                RX_EN: u1,
    -                ///  reg_mem_wr_rst_ch2.
    -                MEM_WR_RST: u1,
    -                ///  reg_apb_mem_rst_ch2.
    -                APB_MEM_RST: u1,
    -                ///  reg_mem_owner_ch2.
    -                MEM_OWNER: u1,
    -                ///  reg_rx_filter_en_ch2.
    -                RX_FILTER_EN: u1,
    -                ///  reg_rx_filter_thres_ch2.
    -                RX_FILTER_THRES: u8,
    -                ///  reg_mem_rx_wrap_en_ch2.
    -                MEM_RX_WRAP_EN: u1,
    -                ///  reg_afifo_rst_ch2.
    -                AFIFO_RST: u1,
    -                ///  reg_conf_update_ch2.
    -                CONF_UPDATE: u1,
    -                padding: u16,
    -            }),
    -            reserved36: [4]u8,
    -            ///  RMT_CH3CONF1_REG.
    -            CH3CONF1: mmio.Mmio(packed struct(u32) {
    -                ///  reg_rx_en_ch3.
    -                RX_EN: u1,
    -                ///  reg_mem_wr_rst_ch3.
    -                MEM_WR_RST: u1,
    -                ///  reg_apb_mem_rst_ch3.
    -                APB_MEM_RST: u1,
    -                ///  reg_mem_owner_ch3.
    -                MEM_OWNER: u1,
    -                ///  reg_rx_filter_en_ch3.
    -                RX_FILTER_EN: u1,
    -                ///  reg_rx_filter_thres_ch3.
    -                RX_FILTER_THRES: u8,
    -                ///  reg_mem_rx_wrap_en_ch3.
    -                MEM_RX_WRAP_EN: u1,
    -                ///  reg_afifo_rst_ch3.
    -                AFIFO_RST: u1,
    -                ///  reg_conf_update_ch3.
    -                CONF_UPDATE: u1,
    -                padding: u16,
    -            }),
    -            ///  RMT_CH0STATUS_REG.
    -            CH0STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  reg_mem_raddr_ex_ch0.
    -                MEM_RADDR_EX: u9,
    -                ///  reg_state_ch0.
    -                STATE: u3,
    -                ///  reg_apb_mem_waddr_ch0.
    -                APB_MEM_WADDR: u9,
    -                ///  reg_apb_mem_rd_err_ch0.
    -                APB_MEM_RD_ERR: u1,
    -                ///  reg_mem_empty_ch0.
    -                MEM_EMPTY: u1,
    -                ///  reg_apb_mem_wr_err_ch0.
    -                APB_MEM_WR_ERR: u1,
    -                ///  reg_apb_mem_raddr_ch0.
    -                APB_MEM_RADDR: u8,
    -            }),
    -            ///  RMT_CH1STATUS_REG.
    -            CH1STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  reg_mem_raddr_ex_ch1.
    -                MEM_RADDR_EX: u9,
    -                ///  reg_state_ch1.
    -                STATE: u3,
    -                ///  reg_apb_mem_waddr_ch1.
    -                APB_MEM_WADDR: u9,
    -                ///  reg_apb_mem_rd_err_ch1.
    -                APB_MEM_RD_ERR: u1,
    -                ///  reg_mem_empty_ch1.
    -                MEM_EMPTY: u1,
    -                ///  reg_apb_mem_wr_err_ch1.
    -                APB_MEM_WR_ERR: u1,
    -                ///  reg_apb_mem_raddr_ch1.
    -                APB_MEM_RADDR: u8,
    -            }),
    -            ///  RMT_CH2STATUS_REG.
    -            CH2STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  reg_mem_waddr_ex_ch2.
    -                MEM_WADDR_EX: u9,
    -                reserved12: u3,
    -                ///  reg_apb_mem_raddr_ch2.
    -                APB_MEM_RADDR: u9,
    -                reserved22: u1,
    -                ///  reg_state_ch2.
    -                STATE: u3,
    -                ///  reg_mem_owner_err_ch2.
    -                MEM_OWNER_ERR: u1,
    -                ///  reg_mem_full_ch2.
    -                MEM_FULL: u1,
    -                ///  reg_apb_mem_rd_err_ch2.
    -                APB_MEM_RD_ERR: u1,
    -                padding: u4,
    -            }),
    -            ///  RMT_CH3STATUS_REG.
    -            CH3STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  reg_mem_waddr_ex_ch3.
    -                MEM_WADDR_EX: u9,
    -                reserved12: u3,
    -                ///  reg_apb_mem_raddr_ch3.
    -                APB_MEM_RADDR: u9,
    -                reserved22: u1,
    -                ///  reg_state_ch3.
    -                STATE: u3,
    -                ///  reg_mem_owner_err_ch3.
    -                MEM_OWNER_ERR: u1,
    -                ///  reg_mem_full_ch3.
    -                MEM_FULL: u1,
    -                ///  reg_apb_mem_rd_err_ch3.
    -                APB_MEM_RD_ERR: u1,
    -                padding: u4,
    -            }),
    -            ///  RMT_INT_RAW_REG.
    -            INT_RAW: mmio.Mmio(packed struct(u32) {
    -                reserved10: u10,
    -                ///  reg_ch2_rx_thr_event_int_raw.
    -                CH2_RX_THR_EVENT_INT_RAW: u1,
    -                ///  reg_ch3_rx_thr_event_int_raw.
    -                CH3_RX_THR_EVENT_INT_RAW: u1,
    -                padding: u20,
    -            }),
    -            ///  RMT_INT_ST_REG.
    -            INT_ST: mmio.Mmio(packed struct(u32) {
    -                reserved10: u10,
    -                ///  reg_ch2_rx_thr_event_int_st.
    -                CH2_RX_THR_EVENT_INT_ST: u1,
    -                ///  reg_ch3_rx_thr_event_int_st.
    -                CH3_RX_THR_EVENT_INT_ST: u1,
    -                padding: u20,
    -            }),
    -            ///  RMT_INT_ENA_REG.
    -            INT_ENA: mmio.Mmio(packed struct(u32) {
    -                reserved10: u10,
    -                ///  reg_ch2_rx_thr_event_int_ena.
    -                CH2_RX_THR_EVENT_INT_ENA: u1,
    -                ///  reg_ch3_rx_thr_event_int_ena.
    -                CH3_RX_THR_EVENT_INT_ENA: u1,
    -                padding: u20,
    -            }),
    -            ///  RMT_INT_CLR_REG.
    -            INT_CLR: mmio.Mmio(packed struct(u32) {
    -                reserved10: u10,
    -                ///  reg_ch2_rx_thr_event_int_clr.
    -                CH2_RX_THR_EVENT_INT_CLR: u1,
    -                ///  reg_ch3_rx_thr_event_int_clr.
    -                CH3_RX_THR_EVENT_INT_CLR: u1,
    -                padding: u20,
    -            }),
    -            ///  RMT_CH0CARRIER_DUTY_REG.
    -            CH0CARRIER_DUTY: mmio.Mmio(packed struct(u32) {
    -                ///  reg_carrier_low_ch0.
    -                CARRIER_LOW: u16,
    -                ///  reg_carrier_high_ch0.
    -                CARRIER_HIGH: u16,
    -            }),
    -            ///  RMT_CH1CARRIER_DUTY_REG.
    -            CH1CARRIER_DUTY: mmio.Mmio(packed struct(u32) {
    -                ///  reg_carrier_low_ch1.
    -                CARRIER_LOW: u16,
    -                ///  reg_carrier_high_ch1.
    -                CARRIER_HIGH: u16,
    -            }),
    -            ///  RMT_CH2_RX_CARRIER_RM_REG.
    -            CH2_RX_CARRIER_RM: mmio.Mmio(packed struct(u32) {
    -                ///  reg_carrier_low_thres_ch2.
    -                CARRIER_LOW_THRES: u16,
    -                ///  reg_carrier_high_thres_ch2.
    -                CARRIER_HIGH_THRES: u16,
    -            }),
    -            ///  RMT_CH3_RX_CARRIER_RM_REG.
    -            CH3_RX_CARRIER_RM: mmio.Mmio(packed struct(u32) {
    -                ///  reg_carrier_low_thres_ch3.
    -                CARRIER_LOW_THRES: u16,
    -                ///  reg_carrier_high_thres_ch3.
    -                CARRIER_HIGH_THRES: u16,
    -            }),
    -            reserved104: [16]u8,
    -            ///  RMT_SYS_CONF_REG.
    -            SYS_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  reg_apb_fifo_mask.
    -                APB_FIFO_MASK: u1,
    -                ///  reg_mem_clk_force_on.
    -                MEM_CLK_FORCE_ON: u1,
    -                ///  reg_rmt_mem_force_pd.
    -                MEM_FORCE_PD: u1,
    -                ///  reg_rmt_mem_force_pu.
    -                MEM_FORCE_PU: u1,
    -                ///  reg_rmt_sclk_div_num.
    -                SCLK_DIV_NUM: u8,
    -                ///  reg_rmt_sclk_div_a.
    -                SCLK_DIV_A: u6,
    -                ///  reg_rmt_sclk_div_b.
    -                SCLK_DIV_B: u6,
    -                ///  reg_rmt_sclk_sel.
    -                SCLK_SEL: u2,
    -                ///  reg_rmt_sclk_active.
    -                SCLK_ACTIVE: u1,
    -                reserved31: u4,
    -                ///  reg_clk_en.
    -                CLK_EN: u1,
    -            }),
    -            ///  RMT_TX_SIM_REG.
    -            TX_SIM: mmio.Mmio(packed struct(u32) {
    -                ///  reg_rmt_tx_sim_ch0.
    -                TX_SIM_CH0: u1,
    -                ///  reg_rmt_tx_sim_ch1.
    -                TX_SIM_CH1: u1,
    -                ///  reg_rmt_tx_sim_en.
    -                TX_SIM_EN: u1,
    -                padding: u29,
    -            }),
    -            ///  RMT_REF_CNT_RST_REG.
    -            REF_CNT_RST: mmio.Mmio(packed struct(u32) {
    -                ///  reg_ref_cnt_rst_ch0.
    -                CH0: u1,
    -                ///  reg_ref_cnt_rst_ch1.
    -                CH1: u1,
    -                ///  reg_ref_cnt_rst_ch2.
    -                CH2: u1,
    -                ///  reg_ref_cnt_rst_ch3.
    -                CH3: u1,
    -                padding: u28,
    -            }),
    -            reserved204: [88]u8,
    -            ///  RMT_DATE_REG.
    -            DATE: mmio.Mmio(packed struct(u32) {
    -                ///  reg_rmt_date.
    -                DATE: u28,
    -                padding: u4,
    -            }),
    -        };
    -
    -        ///  Hardware random number generator
    -        pub const RNG = extern struct {
    -            reserved176: [176]u8,
    -            ///  Random number data
    -            DATA: u32,
    -        };
    -
    -        ///  RSA (Rivest Shamir Adleman) Accelerator
    -        pub const RSA = extern struct {
    -            ///  The memory that stores M
    -            M_MEM: [16]u8,
    -            reserved512: [496]u8,
    -            ///  The memory that stores Z
    -            Z_MEM: [16]u8,
    -            reserved1024: [496]u8,
    -            ///  The memory that stores Y
    -            Y_MEM: [16]u8,
    -            reserved1536: [496]u8,
    -            ///  The memory that stores X
    -            X_MEM: [16]u8,
    -            reserved2048: [496]u8,
    -            ///  RSA M_prime register
    -            M_PRIME: mmio.Mmio(packed struct(u32) {
    -                ///  Those bits stores m'
    -                M_PRIME: u32,
    -            }),
    -            ///  RSA mode register
    -            MODE: mmio.Mmio(packed struct(u32) {
    -                ///  rsa mode (rsa length).
    -                MODE: u7,
    -                padding: u25,
    -            }),
    -            ///  RSA query clean register
    -            QUERY_CLEAN: mmio.Mmio(packed struct(u32) {
    -                ///  query clean
    -                QUERY_CLEAN: u1,
    -                padding: u31,
    -            }),
    -            ///  RSA modular exponentiation trigger register.
    -            SET_START_MODEXP: mmio.Mmio(packed struct(u32) {
    -                ///  start modular exponentiation
    -                SET_START_MODEXP: u1,
    -                padding: u31,
    -            }),
    -            ///  RSA modular multiplication trigger register.
    -            SET_START_MODMULT: mmio.Mmio(packed struct(u32) {
    -                ///  start modular multiplication
    -                SET_START_MODMULT: u1,
    -                padding: u31,
    -            }),
    -            ///  RSA normal multiplication trigger register.
    -            SET_START_MULT: mmio.Mmio(packed struct(u32) {
    -                ///  start multiplicaiton
    -                SET_START_MULT: u1,
    -                padding: u31,
    -            }),
    -            ///  RSA query idle register
    -            QUERY_IDLE: mmio.Mmio(packed struct(u32) {
    -                ///  query rsa idle. 1'b0: busy, 1'b1: idle
    -                QUERY_IDLE: u1,
    -                padding: u31,
    -            }),
    -            ///  RSA interrupt clear register
    -            INT_CLR: mmio.Mmio(packed struct(u32) {
    -                ///  set this bit to clear RSA interrupt.
    -                CLEAR_INTERRUPT: u1,
    -                padding: u31,
    -            }),
    -            ///  RSA constant time option register
    -            CONSTANT_TIME: mmio.Mmio(packed struct(u32) {
    -                ///  Configure this bit to 0 for acceleration. 0: with acceleration, 1: without acceleration(defalut).
    -                CONSTANT_TIME: u1,
    -                padding: u31,
    -            }),
    -            ///  RSA search option
    -            SEARCH_ENABLE: mmio.Mmio(packed struct(u32) {
    -                ///  Configure this bit to 1 for acceleration. 1: with acceleration, 0: without acceleration(default). This option should be used together with RSA_SEARCH_POS.
    -                SEARCH_ENABLE: u1,
    -                padding: u31,
    -            }),
    -            ///  RSA search position configure register
    -            SEARCH_POS: mmio.Mmio(packed struct(u32) {
    -                ///  Configure this field to set search position. This field should be used together with RSA_SEARCH_ENABLE. The field is only meaningful when RSA_SEARCH_ENABLE is high.
    -                SEARCH_POS: u12,
    -                padding: u20,
    -            }),
    -            ///  RSA interrupt enable register
    -            INT_ENA: mmio.Mmio(packed struct(u32) {
    -                ///  Set this bit to enable interrupt that occurs when rsa calculation is done. 1'b0: disable, 1'b1: enable(default).
    -                INT_ENA: u1,
    -                padding: u31,
    -            }),
    -            ///  RSA version control register
    -            DATE: mmio.Mmio(packed struct(u32) {
    -                ///  rsa version information
    -                DATE: u30,
    -                padding: u2,
    -            }),
    -        };
    -
    -        ///  Real-Time Clock Control
    -        pub const RTC_CNTL = extern struct {
    -            ///  rtc configure register
    -            OPTIONS0: mmio.Mmio(packed struct(u32) {
    -                ///  {reg_sw_stall_appcpu_c1[5:0], reg_sw_stall_appcpu_c0[1:0]} == 0x86 will stall APP CPU
    -                SW_STALL_APPCPU_C0: u2,
    -                ///  {reg_sw_stall_procpu_c1[5:0], reg_sw_stall_procpu_c0[1:0]} == 0x86 will stall PRO CPU
    -                SW_STALL_PROCPU_C0: u2,
    -                ///  APP CPU SW reset
    -                SW_APPCPU_RST: u1,
    -                ///  PRO CPU SW reset
    -                SW_PROCPU_RST: u1,
    -                ///  BB_I2C force power down
    -                BB_I2C_FORCE_PD: u1,
    -                ///  BB_I2C force power up
    -                BB_I2C_FORCE_PU: u1,
    -                ///  BB_PLL _I2C force power down
    -                BBPLL_I2C_FORCE_PD: u1,
    -                ///  BB_PLL_I2C force power up
    -                BBPLL_I2C_FORCE_PU: u1,
    -                ///  BB_PLL force power down
    -                BBPLL_FORCE_PD: u1,
    -                ///  BB_PLL force power up
    -                BBPLL_FORCE_PU: u1,
    -                ///  crystall force power down
    -                XTL_FORCE_PD: u1,
    -                ///  crystall force power up
    -                XTL_FORCE_PU: u1,
    -                ///  wait bias_sleep and current source wakeup
    -                XTL_EN_WAIT: u4,
    -                reserved20: u2,
    -                ///  analog configure
    -                XTL_EXT_CTR_SEL: u3,
    -                ///  analog configure
    -                XTL_FORCE_ISO: u1,
    -                ///  analog configure
    -                PLL_FORCE_ISO: u1,
    -                ///  analog configure
    -                ANALOG_FORCE_ISO: u1,
    -                ///  analog configure
    -                XTL_FORCE_NOISO: u1,
    -                ///  analog configure
    -                PLL_FORCE_NOISO: u1,
    -                ///  analog configure
    -                ANALOG_FORCE_NOISO: u1,
    -                ///  digital wrap force reset in deep sleep
    -                DG_WRAP_FORCE_RST: u1,
    -                ///  digital core force no reset in deep sleep
    -                DG_WRAP_FORCE_NORST: u1,
    -                ///  SW system reset
    -                SW_SYS_RST: u1,
    -            }),
    -            ///  rtc configure register
    -            SLP_TIMER0: mmio.Mmio(packed struct(u32) {
    -                ///  configure the sleep time
    -                SLP_VAL_LO: u32,
    -            }),
    -            ///  rtc configure register
    -            SLP_TIMER1: mmio.Mmio(packed struct(u32) {
    -                ///  RTC sleep timer high 16 bits
    -                SLP_VAL_HI: u16,
    -                ///  timer alarm enable bit
    -                RTC_MAIN_TIMER_ALARM_EN: u1,
    -                padding: u15,
    -            }),
    -            ///  rtc configure register
    -            TIME_UPDATE: mmio.Mmio(packed struct(u32) {
    -                reserved27: u27,
    -                ///  Enable to record system stall time
    -                TIMER_SYS_STALL: u1,
    -                ///  Enable to record 40M XTAL OFF time
    -                TIMER_XTL_OFF: u1,
    -                ///  enable to record system reset time
    -                TIMER_SYS_RST: u1,
    -                reserved31: u1,
    -                ///  Set 1: to update register with RTC timer
    -                RTC_TIME_UPDATE: u1,
    -            }),
    -            ///  rtc configure register
    -            TIME_LOW0: mmio.Mmio(packed struct(u32) {
    -                ///  RTC timer low 32 bits
    -                RTC_TIMER_VALUE0_LOW: u32,
    -            }),
    -            ///  rtc configure register
    -            TIME_HIGH0: mmio.Mmio(packed struct(u32) {
    -                ///  RTC timer high 16 bits
    -                RTC_TIMER_VALUE0_HIGH: u16,
    -                padding: u16,
    -            }),
    -            ///  rtc configure register
    -            STATE0: mmio.Mmio(packed struct(u32) {
    -                ///  rtc software interrupt to main cpu
    -                RTC_SW_CPU_INT: u1,
    -                ///  clear rtc sleep reject cause
    -                RTC_SLP_REJECT_CAUSE_CLR: u1,
    -                reserved22: u20,
    -                ///  1: APB to RTC using bridge
    -                APB2RTC_BRIDGE_SEL: u1,
    -                reserved28: u5,
    -                ///  SDIO active indication
    -                SDIO_ACTIVE_IND: u1,
    -                ///  leep wakeup bit
    -                SLP_WAKEUP: u1,
    -                ///  leep reject bit
    -                SLP_REJECT: u1,
    -                ///  sleep enable bit
    -                SLEEP_EN: u1,
    -            }),
    -            ///  rtc configure register
    -            TIMER1: mmio.Mmio(packed struct(u32) {
    -                ///  CPU stall enable bit
    -                CPU_STALL_EN: u1,
    -                ///  CPU stall wait cycles in fast_clk_rtc
    -                CPU_STALL_WAIT: u5,
    -                ///  CK8M wait cycles in slow_clk_rtc
    -                CK8M_WAIT: u8,
    -                ///  XTAL wait cycles in slow_clk_rtc
    -                XTL_BUF_WAIT: u10,
    -                ///  PLL wait cycles in slow_clk_rtc
    -                PLL_BUF_WAIT: u8,
    -            }),
    -            ///  rtc configure register
    -            TIMER2: mmio.Mmio(packed struct(u32) {
    -                reserved24: u24,
    -                ///  minimal cycles in slow_clk_rtc for CK8M in power down state
    -                MIN_TIME_CK8M_OFF: u8,
    -            }),
    -            ///  rtc configure register
    -            TIMER3: mmio.Mmio(packed struct(u32) {
    -                ///  wifi power domain wakeup time
    -                WIFI_WAIT_TIMER: u9,
    -                ///  wifi power domain power on time
    -                WIFI_POWERUP_TIMER: u7,
    -                ///  bt power domain wakeup time
    -                BT_WAIT_TIMER: u9,
    -                ///  bt power domain power on time
    -                BT_POWERUP_TIMER: u7,
    -            }),
    -            ///  rtc configure register
    -            TIMER4: mmio.Mmio(packed struct(u32) {
    -                ///  cpu top power domain wakeup time
    -                CPU_TOP_WAIT_TIMER: u9,
    -                ///  cpu top power domain power on time
    -                CPU_TOP_POWERUP_TIMER: u7,
    -                ///  digital wrap power domain wakeup time
    -                DG_WRAP_WAIT_TIMER: u9,
    -                ///  digital wrap power domain power on time
    -                DG_WRAP_POWERUP_TIMER: u7,
    -            }),
    -            ///  rtc configure register
    -            TIMER5: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  minimal sleep cycles in slow_clk_rtc
    -                MIN_SLP_VAL: u8,
    -                padding: u16,
    -            }),
    -            ///  rtc configure register
    -            TIMER6: mmio.Mmio(packed struct(u32) {
    -                reserved16: u16,
    -                ///  digital peri power domain wakeup time
    -                DG_PERI_WAIT_TIMER: u9,
    -                ///  digital peri power domain power on time
    -                DG_PERI_POWERUP_TIMER: u7,
    -            }),
    -            ///  rtc configure register
    -            ANA_CONF: mmio.Mmio(packed struct(u32) {
    -                reserved18: u18,
    -                ///  force no bypass i2c power on reset
    -                RESET_POR_FORCE_PD: u1,
    -                ///  force bypass i2c power on reset
    -                RESET_POR_FORCE_PU: u1,
    -                ///  enable glitch reset
    -                GLITCH_RST_EN: u1,
    -                reserved22: u1,
    -                ///  PLLA force power up
    -                SAR_I2C_PU: u1,
    -                ///  PLLA force power down
    -                PLLA_FORCE_PD: u1,
    -                ///  PLLA force power up
    -                PLLA_FORCE_PU: u1,
    -                ///  start BBPLL calibration during sleep
    -                BBPLL_CAL_SLP_START: u1,
    -                ///  1: PVTMON power up
    -                PVTMON_PU: u1,
    -                ///  1: TXRF_I2C power up
    -                TXRF_I2C_PU: u1,
    -                ///  1: RFRX_PBUS power up
    -                RFRX_PBUS_PU: u1,
    -                reserved30: u1,
    -                ///  1: CKGEN_I2C power up
    -                CKGEN_I2C_PU: u1,
    -                ///  power up pll i2c
    -                PLL_I2C_PU: u1,
    -            }),
    -            ///  rtc configure register
    -            RESET_STATE: mmio.Mmio(packed struct(u32) {
    -                ///  reset cause of PRO CPU
    -                RESET_CAUSE_PROCPU: u6,
    -                ///  reset cause of APP CPU
    -                RESET_CAUSE_APPCPU: u6,
    -                ///  APP CPU state vector sel
    -                STAT_VECTOR_SEL_APPCPU: u1,
    -                ///  PRO CPU state vector sel
    -                STAT_VECTOR_SEL_PROCPU: u1,
    -                ///  PRO CPU reset_flag
    -                ALL_RESET_FLAG_PROCPU: u1,
    -                ///  APP CPU reset flag
    -                ALL_RESET_FLAG_APPCPU: u1,
    -                ///  clear PRO CPU reset_flag
    -                ALL_RESET_FLAG_CLR_PROCPU: u1,
    -                ///  clear APP CPU reset flag
    -                ALL_RESET_FLAG_CLR_APPCPU: u1,
    -                ///  APPCPU OcdHaltOnReset
    -                OCD_HALT_ON_RESET_APPCPU: u1,
    -                ///  PROCPU OcdHaltOnReset
    -                OCD_HALT_ON_RESET_PROCPU: u1,
    -                ///  configure jtag reset configure
    -                JTAG_RESET_FLAG_PROCPU: u1,
    -                ///  configure jtag reset configure
    -                JTAG_RESET_FLAG_APPCPU: u1,
    -                ///  configure jtag reset configure
    -                JTAG_RESET_FLAG_CLR_PROCPU: u1,
    -                ///  configure jtag reset configure
    -                JTAG_RESET_FLAG_CLR_APPCPU: u1,
    -                ///  configure dreset configure
    -                RTC_DRESET_MASK_APPCPU: u1,
    -                ///  configure dreset configure
    -                RTC_DRESET_MASK_PROCPU: u1,
    -                padding: u6,
    -            }),
    -            ///  rtc configure register
    -            WAKEUP_STATE: mmio.Mmio(packed struct(u32) {
    -                reserved15: u15,
    -                ///  wakeup enable bitmap
    -                RTC_WAKEUP_ENA: u17,
    -            }),
    -            ///  rtc configure register
    -            INT_ENA_RTC: mmio.Mmio(packed struct(u32) {
    -                ///  enable sleep wakeup interrupt
    -                SLP_WAKEUP_INT_ENA: u1,
    -                ///  enable sleep reject interrupt
    -                SLP_REJECT_INT_ENA: u1,
    -                reserved3: u1,
    -                ///  enable RTC WDT interrupt
    -                RTC_WDT_INT_ENA: u1,
    -                reserved9: u5,
    -                ///  enable brown out interrupt
    -                RTC_BROWN_OUT_INT_ENA: u1,
    -                ///  enable RTC main timer interrupt
    -                RTC_MAIN_TIMER_INT_ENA: u1,
    -                reserved15: u4,
    -                ///  enable super watch dog interrupt
    -                RTC_SWD_INT_ENA: u1,
    -                ///  enable xtal32k_dead interrupt
    -                RTC_XTAL32K_DEAD_INT_ENA: u1,
    -                reserved19: u2,
    -                ///  enbale gitch det interrupt
    -                RTC_GLITCH_DET_INT_ENA: u1,
    -                ///  enbale bbpll cal end interrupt
    -                RTC_BBPLL_CAL_INT_ENA: u1,
    -                padding: u11,
    -            }),
    -            ///  rtc configure register
    -            INT_RAW_RTC: mmio.Mmio(packed struct(u32) {
    -                ///  sleep wakeup interrupt raw
    -                SLP_WAKEUP_INT_RAW: u1,
    -                ///  sleep reject interrupt raw
    -                SLP_REJECT_INT_RAW: u1,
    -                reserved3: u1,
    -                ///  RTC WDT interrupt raw
    -                RTC_WDT_INT_RAW: u1,
    -                reserved9: u5,
    -                ///  brown out interrupt raw
    -                RTC_BROWN_OUT_INT_RAW: u1,
    -                ///  RTC main timer interrupt raw
    -                RTC_MAIN_TIMER_INT_RAW: u1,
    -                reserved15: u4,
    -                ///  super watch dog interrupt raw
    -                RTC_SWD_INT_RAW: u1,
    -                ///  xtal32k dead detection interrupt raw
    -                RTC_XTAL32K_DEAD_INT_RAW: u1,
    -                reserved19: u2,
    -                ///  glitch_det_interrupt_raw
    -                RTC_GLITCH_DET_INT_RAW: u1,
    -                ///  bbpll cal end interrupt state
    -                RTC_BBPLL_CAL_INT_RAW: u1,
    -                padding: u11,
    -            }),
    -            ///  rtc configure register
    -            INT_ST_RTC: mmio.Mmio(packed struct(u32) {
    -                ///  sleep wakeup interrupt state
    -                SLP_WAKEUP_INT_ST: u1,
    -                ///  sleep reject interrupt state
    -                SLP_REJECT_INT_ST: u1,
    -                reserved3: u1,
    -                ///  RTC WDT interrupt state
    -                RTC_WDT_INT_ST: u1,
    -                reserved9: u5,
    -                ///  brown out interrupt state
    -                RTC_BROWN_OUT_INT_ST: u1,
    -                ///  RTC main timer interrupt state
    -                RTC_MAIN_TIMER_INT_ST: u1,
    -                reserved15: u4,
    -                ///  super watch dog interrupt state
    -                RTC_SWD_INT_ST: u1,
    -                ///  xtal32k dead detection interrupt state
    -                RTC_XTAL32K_DEAD_INT_ST: u1,
    -                reserved19: u2,
    -                ///  glitch_det_interrupt state
    -                RTC_GLITCH_DET_INT_ST: u1,
    -                ///  bbpll cal end interrupt state
    -                RTC_BBPLL_CAL_INT_ST: u1,
    -                padding: u11,
    -            }),
    -            ///  rtc configure register
    -            INT_CLR_RTC: mmio.Mmio(packed struct(u32) {
    -                ///  Clear sleep wakeup interrupt state
    -                SLP_WAKEUP_INT_CLR: u1,
    -                ///  Clear sleep reject interrupt state
    -                SLP_REJECT_INT_CLR: u1,
    -                reserved3: u1,
    -                ///  Clear RTC WDT interrupt state
    -                RTC_WDT_INT_CLR: u1,
    -                reserved9: u5,
    -                ///  Clear brown out interrupt state
    -                RTC_BROWN_OUT_INT_CLR: u1,
    -                ///  Clear RTC main timer interrupt state
    -                RTC_MAIN_TIMER_INT_CLR: u1,
    -                reserved15: u4,
    -                ///  Clear super watch dog interrupt state
    -                RTC_SWD_INT_CLR: u1,
    -                ///  Clear RTC WDT interrupt state
    -                RTC_XTAL32K_DEAD_INT_CLR: u1,
    -                reserved19: u2,
    -                ///  Clear glitch det interrupt state
    -                RTC_GLITCH_DET_INT_CLR: u1,
    -                ///  clear bbpll cal end interrupt state
    -                RTC_BBPLL_CAL_INT_CLR: u1,
    -                padding: u11,
    -            }),
    -            ///  rtc configure register
    -            STORE0: mmio.Mmio(packed struct(u32) {
    -                ///  reserved register
    -                RTC_SCRATCH0: u32,
    -            }),
    -            ///  rtc configure register
    -            STORE1: mmio.Mmio(packed struct(u32) {
    -                ///  reserved register
    -                RTC_SCRATCH1: u32,
    -            }),
    -            ///  rtc configure register
    -            STORE2: mmio.Mmio(packed struct(u32) {
    -                ///  reserved register
    -                RTC_SCRATCH2: u32,
    -            }),
    -            ///  rtc configure register
    -            STORE3: mmio.Mmio(packed struct(u32) {
    -                ///  reserved register
    -                RTC_SCRATCH3: u32,
    -            }),
    -            ///  rtc configure register
    -            EXT_XTL_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  xtal 32k watch dog enable
    -                XTAL32K_WDT_EN: u1,
    -                ///  xtal 32k watch dog clock force on
    -                XTAL32K_WDT_CLK_FO: u1,
    -                ///  xtal 32k watch dog sw reset
    -                XTAL32K_WDT_RESET: u1,
    -                ///  xtal 32k external xtal clock force on
    -                XTAL32K_EXT_CLK_FO: u1,
    -                ///  xtal 32k switch to back up clock when xtal is dead
    -                XTAL32K_AUTO_BACKUP: u1,
    -                ///  xtal 32k restart xtal when xtal is dead
    -                XTAL32K_AUTO_RESTART: u1,
    -                ///  xtal 32k switch back xtal when xtal is restarted
    -                XTAL32K_AUTO_RETURN: u1,
    -                ///  Xtal 32k xpd control by sw or fsm
    -                XTAL32K_XPD_FORCE: u1,
    -                ///  apply an internal clock to help xtal 32k to start
    -                ENCKINIT_XTAL_32K: u1,
    -                ///  0: single-end buffer 1: differential buffer
    -                DBUF_XTAL_32K: u1,
    -                ///  xtal_32k gm control
    -                DGM_XTAL_32K: u3,
    -                ///  DRES_XTAL_32K
    -                DRES_XTAL_32K: u3,
    -                ///  XPD_XTAL_32K
    -                XPD_XTAL_32K: u1,
    -                ///  DAC_XTAL_32K
    -                DAC_XTAL_32K: u3,
    -                ///  state of 32k_wdt
    -                RTC_WDT_STATE: u3,
    -                ///  XTAL_32K sel. 0: external XTAL_32K
    -                RTC_XTAL32K_GPIO_SEL: u1,
    -                reserved30: u6,
    -                ///  0: power down XTAL at high level
    -                XTL_EXT_CTR_LV: u1,
    -                ///  enable gpio configure xtal power on
    -                XTL_EXT_CTR_EN: u1,
    -            }),
    -            ///  rtc configure register
    -            EXT_WAKEUP_CONF: mmio.Mmio(packed struct(u32) {
    -                reserved31: u31,
    -                ///  enable filter for gpio wakeup event
    -                GPIO_WAKEUP_FILTER: u1,
    -            }),
    -            ///  rtc configure register
    -            SLP_REJECT_CONF: mmio.Mmio(packed struct(u32) {
    -                reserved12: u12,
    -                ///  sleep reject enable
    -                RTC_SLEEP_REJECT_ENA: u18,
    -                ///  enable reject for light sleep
    -                LIGHT_SLP_REJECT_EN: u1,
    -                ///  enable reject for deep sleep
    -                DEEP_SLP_REJECT_EN: u1,
    -            }),
    -            ///  rtc configure register
    -            CPU_PERIOD_CONF: mmio.Mmio(packed struct(u32) {
    -                reserved29: u29,
    -                ///  CPU sel option
    -                RTC_CPUSEL_CONF: u1,
    -                ///  CPU clk sel option
    -                RTC_CPUPERIOD_SEL: u2,
    -            }),
    -            ///  rtc configure register
    -            CLK_CONF: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  efuse_clk_force_gating
    -                EFUSE_CLK_FORCE_GATING: u1,
    -                ///  efuse_clk_force_nogating
    -                EFUSE_CLK_FORCE_NOGATING: u1,
    -                ///  used to sync reg_ck8m_div_sel bus. Clear vld before set reg_ck8m_div_sel
    -                CK8M_DIV_SEL_VLD: u1,
    -                ///  CK8M_D256_OUT divider. 00: div128
    -                CK8M_DIV: u2,
    -                ///  disable CK8M and CK8M_D256_OUT
    -                ENB_CK8M: u1,
    -                ///  1: CK8M_D256_OUT is actually CK8M
    -                ENB_CK8M_DIV: u1,
    -                ///  enable CK_XTAL_32K for digital core (no relationship with RTC core)
    -                DIG_XTAL32K_EN: u1,
    -                ///  enable CK8M_D256_OUT for digital core (no relationship with RTC core)
    -                DIG_CLK8M_D256_EN: u1,
    -                ///  enable CK8M for digital core (no relationship with RTC core)
    -                DIG_CLK8M_EN: u1,
    -                reserved12: u1,
    -                ///  divider = reg_ck8m_div_sel + 1
    -                CK8M_DIV_SEL: u3,
    -                ///  XTAL force no gating during sleep
    -                XTAL_FORCE_NOGATING: u1,
    -                ///  CK8M force no gating during sleep
    -                CK8M_FORCE_NOGATING: u1,
    -                ///  CK8M_DFREQ
    -                CK8M_DFREQ: u8,
    -                ///  CK8M force power down
    -                CK8M_FORCE_PD: u1,
    -                ///  CK8M force power up
    -                CK8M_FORCE_PU: u1,
    -                ///  force enable xtal clk gating
    -                XTAL_GLOBAL_FORCE_GATING: u1,
    -                ///  force bypass xtal clk gating
    -                XTAL_GLOBAL_FORCE_NOGATING: u1,
    -                ///  fast_clk_rtc sel. 0: XTAL div 4
    -                FAST_CLK_RTC_SEL: u1,
    -                ///  slelect rtc slow clk
    -                ANA_CLK_RTC_SEL: u2,
    -            }),
    -            ///  rtc configure register
    -            SLOW_CLK_CONF: mmio.Mmio(packed struct(u32) {
    -                reserved22: u22,
    -                ///  used to sync div bus. clear vld before set reg_rtc_ana_clk_div
    -                RTC_ANA_CLK_DIV_VLD: u1,
    -                ///  the clk divider num of RTC_CLK
    -                RTC_ANA_CLK_DIV: u8,
    -                ///  flag rtc_slow_clk_next_edge
    -                RTC_SLOW_CLK_NEXT_EDGE: u1,
    -            }),
    -            ///  rtc configure register
    -            SDIO_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  timer count to apply reg_sdio_dcap after sdio power on
    -                SDIO_TIMER_TARGET: u8,
    -                reserved9: u1,
    -                ///  Tieh = 1 mode drive ability. Initially set to 0 to limit charge current
    -                SDIO_DTHDRV: u2,
    -                ///  ability to prevent LDO from overshoot
    -                SDIO_DCAP: u2,
    -                ///  add resistor from ldo output to ground. 0: no res
    -                SDIO_INITI: u2,
    -                ///  0 to set init[1:0]=0
    -                SDIO_EN_INITI: u1,
    -                ///  tune current limit threshold when tieh = 0. About 800mA/(8+d)
    -                SDIO_DCURLIM: u3,
    -                ///  select current limit mode
    -                SDIO_MODECURLIM: u1,
    -                ///  enable current limit
    -                SDIO_ENCURLIM: u1,
    -                ///  power down SDIO_REG in sleep. Only active when reg_sdio_force = 0
    -                SDIO_REG_PD_EN: u1,
    -                ///  1: use SW option to control SDIO_REG
    -                SDIO_FORCE: u1,
    -                ///  SW option for SDIO_TIEH. Only active when reg_sdio_force = 1
    -                SDIO_TIEH: u1,
    -                ///  read only register for REG1P8_READY
    -                _1P8_READY: u1,
    -                ///  SW option for DREFL_SDIO. Only active when reg_sdio_force = 1
    -                DREFL_SDIO: u2,
    -                ///  SW option for DREFM_SDIO. Only active when reg_sdio_force = 1
    -                DREFM_SDIO: u2,
    -                ///  SW option for DREFH_SDIO. Only active when reg_sdio_force = 1
    -                DREFH_SDIO: u2,
    -                XPD_SDIO: u1,
    -            }),
    -            ///  rtc configure register
    -            BIAS_CONF: mmio.Mmio(packed struct(u32) {
    -                DG_VDD_DRV_B_SLP: u8,
    -                DG_VDD_DRV_B_SLP_EN: u1,
    -                reserved10: u1,
    -                ///  bias buf when rtc in normal work state
    -                BIAS_BUF_IDLE: u1,
    -                ///  bias buf when rtc in wakeup state
    -                BIAS_BUF_WAKE: u1,
    -                ///  bias buf when rtc in sleep state
    -                BIAS_BUF_DEEP_SLP: u1,
    -                ///  bias buf when rtc in monitor state
    -                BIAS_BUF_MONITOR: u1,
    -                ///  xpd cur when rtc in sleep_state
    -                PD_CUR_DEEP_SLP: u1,
    -                ///  xpd cur when rtc in monitor state
    -                PD_CUR_MONITOR: u1,
    -                ///  bias_sleep when rtc in sleep_state
    -                BIAS_SLEEP_DEEP_SLP: u1,
    -                ///  bias_sleep when rtc in monitor state
    -                BIAS_SLEEP_MONITOR: u1,
    -                ///  DBG_ATTEN when rtc in sleep state
    -                DBG_ATTEN_DEEP_SLP: u4,
    -                ///  DBG_ATTEN when rtc in monitor state
    -                DBG_ATTEN_MONITOR: u4,
    -                padding: u6,
    -            }),
    -            ///  rtc configure register
    -            RTC_CNTL: mmio.Mmio(packed struct(u32) {
    -                reserved7: u7,
    -                ///  software enable digital regulator cali
    -                DIG_REG_CAL_EN: u1,
    -                reserved14: u6,
    -                ///  SCK_DCAP
    -                SCK_DCAP: u8,
    -                reserved28: u6,
    -                ///  RTC_DBOOST force power down
    -                DBOOST_FORCE_PD: u1,
    -                ///  RTC_DBOOST force power up
    -                DBOOST_FORCE_PU: u1,
    -                ///  RTC_REG force power down (for RTC_REG power down means decrease the voltage to 0.8v or lower )
    -                REGULATOR_FORCE_PD: u1,
    -                ///  RTC_REG force power up
    -                REGULATOR_FORCE_PU: u1,
    -            }),
    -            ///  rtc configure register
    -            PWC: mmio.Mmio(packed struct(u32) {
    -                reserved21: u21,
    -                ///  rtc pad force hold
    -                RTC_PAD_FORCE_HOLD: u1,
    -                padding: u10,
    -            }),
    -            ///  rtc configure register
    -            DIG_PWC: mmio.Mmio(packed struct(u32) {
    -                ///  vdd_spi drv's software value
    -                VDD_SPI_PWR_DRV: u2,
    -                ///  vdd_spi drv use software value
    -                VDD_SPI_PWR_FORCE: u1,
    -                ///  memories in digital core force PD in sleep
    -                LSLP_MEM_FORCE_PD: u1,
    -                ///  memories in digital core force PU in sleep
    -                LSLP_MEM_FORCE_PU: u1,
    -                reserved11: u6,
    -                ///  bt force power down
    -                BT_FORCE_PD: u1,
    -                ///  bt force power up
    -                BT_FORCE_PU: u1,
    -                ///  digital peri force power down
    -                DG_PERI_FORCE_PD: u1,
    -                ///  digital peri force power up
    -                DG_PERI_FORCE_PU: u1,
    -                ///  fastmemory retention mode in sleep
    -                RTC_FASTMEM_FORCE_LPD: u1,
    -                ///  fastmemory donlt entry retention mode in sleep
    -                RTC_FASTMEM_FORCE_LPU: u1,
    -                ///  wifi force power down
    -                WIFI_FORCE_PD: u1,
    -                ///  wifi force power up
    -                WIFI_FORCE_PU: u1,
    -                ///  digital core force power down
    -                DG_WRAP_FORCE_PD: u1,
    -                ///  digital core force power up
    -                DG_WRAP_FORCE_PU: u1,
    -                ///  cpu core force power down
    -                CPU_TOP_FORCE_PD: u1,
    -                ///  cpu force power up
    -                CPU_TOP_FORCE_PU: u1,
    -                reserved27: u4,
    -                ///  enable power down bt in sleep
    -                BT_PD_EN: u1,
    -                ///  enable power down digital peri in sleep
    -                DG_PERI_PD_EN: u1,
    -                ///  enable power down cpu in sleep
    -                CPU_TOP_PD_EN: u1,
    -                ///  enable power down wifi in sleep
    -                WIFI_PD_EN: u1,
    -                ///  enable power down digital wrap in sleep
    -                DG_WRAP_PD_EN: u1,
    -            }),
    -            ///  rtc configure register
    -            DIG_ISO: mmio.Mmio(packed struct(u32) {
    -                reserved7: u7,
    -                ///  DIG_ISO force off
    -                FORCE_OFF: u1,
    -                ///  DIG_ISO force on
    -                FORCE_ON: u1,
    -                ///  read only register to indicate digital pad auto-hold status
    -                DG_PAD_AUTOHOLD: u1,
    -                ///  wtite only register to clear digital pad auto-hold
    -                CLR_DG_PAD_AUTOHOLD: u1,
    -                ///  digital pad enable auto-hold
    -                DG_PAD_AUTOHOLD_EN: u1,
    -                ///  digital pad force no ISO
    -                DG_PAD_FORCE_NOISO: u1,
    -                ///  digital pad force ISO
    -                DG_PAD_FORCE_ISO: u1,
    -                ///  digital pad force un-hold
    -                DG_PAD_FORCE_UNHOLD: u1,
    -                ///  digital pad force hold
    -                DG_PAD_FORCE_HOLD: u1,
    -                reserved22: u6,
    -                ///  bt force ISO
    -                BT_FORCE_ISO: u1,
    -                ///  bt force no ISO
    -                BT_FORCE_NOISO: u1,
    -                ///  Digital peri force ISO
    -                DG_PERI_FORCE_ISO: u1,
    -                ///  digital peri force no ISO
    -                DG_PERI_FORCE_NOISO: u1,
    -                ///  cpu force ISO
    -                CPU_TOP_FORCE_ISO: u1,
    -                ///  cpu force no ISO
    -                CPU_TOP_FORCE_NOISO: u1,
    -                ///  wifi force ISO
    -                WIFI_FORCE_ISO: u1,
    -                ///  wifi force no ISO
    -                WIFI_FORCE_NOISO: u1,
    -                ///  digital core force ISO
    -                DG_WRAP_FORCE_ISO: u1,
    -                ///  digital core force no ISO
    -                DG_WRAP_FORCE_NOISO: u1,
    -            }),
    -            ///  rtc configure register
    -            WDTCONFIG0: mmio.Mmio(packed struct(u32) {
    -                ///  chip reset siginal pulse width
    -                WDT_CHIP_RESET_WIDTH: u8,
    -                ///  wdt reset whole chip enable
    -                WDT_CHIP_RESET_EN: u1,
    -                ///  pause WDT in sleep
    -                WDT_PAUSE_IN_SLP: u1,
    -                ///  enable WDT reset APP CPU
    -                WDT_APPCPU_RESET_EN: u1,
    -                ///  enable WDT reset PRO CPU
    -                WDT_PROCPU_RESET_EN: u1,
    -                ///  enable WDT in flash boot
    -                WDT_FLASHBOOT_MOD_EN: u1,
    -                ///  system reset counter length
    -                WDT_SYS_RESET_LENGTH: u3,
    -                ///  CPU reset counter length
    -                WDT_CPU_RESET_LENGTH: u3,
    -                ///  1: interrupt stage en
    -                WDT_STG3: u3,
    -                ///  1: interrupt stage en
    -                WDT_STG2: u3,
    -                ///  1: interrupt stage en
    -                WDT_STG1: u3,
    -                ///  1: interrupt stage en
    -                WDT_STG0: u3,
    -                ///  enable rtc wdt
    -                WDT_EN: u1,
    -            }),
    -            ///  rtc configure register
    -            WDTCONFIG1: mmio.Mmio(packed struct(u32) {
    -                ///  the hold time of stage0
    -                WDT_STG0_HOLD: u32,
    -            }),
    -            ///  rtc configure register
    -            WDTCONFIG2: mmio.Mmio(packed struct(u32) {
    -                ///  the hold time of stage1
    -                WDT_STG1_HOLD: u32,
    -            }),
    -            ///  rtc configure register
    -            WDTCONFIG3: mmio.Mmio(packed struct(u32) {
    -                ///  the hold time of stage2
    -                WDT_STG2_HOLD: u32,
    -            }),
    -            ///  rtc configure register
    -            WDTCONFIG4: mmio.Mmio(packed struct(u32) {
    -                ///  the hold time of stage3
    -                WDT_STG3_HOLD: u32,
    -            }),
    -            ///  rtc configure register
    -            WDTFEED: mmio.Mmio(packed struct(u32) {
    -                reserved31: u31,
    -                ///  sw feed rtc wdt
    -                RTC_WDT_FEED: u1,
    -            }),
    -            ///  rtc configure register
    -            WDTWPROTECT: mmio.Mmio(packed struct(u32) {
    -                ///  the key of rtc wdt
    -                WDT_WKEY: u32,
    -            }),
    -            ///  rtc configure register
    -            SWD_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  swd reset flag
    -                SWD_RESET_FLAG: u1,
    -                ///  swd interrupt for feeding
    -                SWD_FEED_INT: u1,
    -                reserved17: u15,
    -                ///  Bypass swd rst
    -                SWD_BYPASS_RST: u1,
    -                ///  adjust signal width send to swd
    -                SWD_SIGNAL_WIDTH: u10,
    -                ///  reset swd reset flag
    -                SWD_RST_FLAG_CLR: u1,
    -                ///  Sw feed swd
    -                SWD_FEED: u1,
    -                ///  disabel SWD
    -                SWD_DISABLE: u1,
    -                ///  automatically feed swd when int comes
    -                SWD_AUTO_FEED_EN: u1,
    -            }),
    -            ///  rtc configure register
    -            SWD_WPROTECT: mmio.Mmio(packed struct(u32) {
    -                ///  the key of super wdt
    -                SWD_WKEY: u32,
    -            }),
    -            ///  rtc configure register
    -            SW_CPU_STALL: mmio.Mmio(packed struct(u32) {
    -                reserved20: u20,
    -                ///  {reg_sw_stall_appcpu_c1[5:0]
    -                SW_STALL_APPCPU_C1: u6,
    -                ///  stall cpu by software
    -                SW_STALL_PROCPU_C1: u6,
    -            }),
    -            ///  rtc configure register
    -            STORE4: mmio.Mmio(packed struct(u32) {
    -                ///  reserved register
    -                RTC_SCRATCH4: u32,
    -            }),
    -            ///  rtc configure register
    -            STORE5: mmio.Mmio(packed struct(u32) {
    -                ///  reserved register
    -                RTC_SCRATCH5: u32,
    -            }),
    -            ///  rtc configure register
    -            STORE6: mmio.Mmio(packed struct(u32) {
    -                ///  reserved register
    -                RTC_SCRATCH6: u32,
    -            }),
    -            ///  rtc configure register
    -            STORE7: mmio.Mmio(packed struct(u32) {
    -                ///  reserved register
    -                RTC_SCRATCH7: u32,
    -            }),
    -            ///  rtc configure register
    -            LOW_POWER_ST: mmio.Mmio(packed struct(u32) {
    -                ///  rom0 power down
    -                XPD_ROM0: u1,
    -                reserved2: u1,
    -                ///  External DCDC power down
    -                XPD_DIG_DCDC: u1,
    -                ///  rtc peripheral iso
    -                RTC_PERI_ISO: u1,
    -                ///  rtc peripheral power down
    -                XPD_RTC_PERI: u1,
    -                ///  wifi iso
    -                WIFI_ISO: u1,
    -                ///  wifi wrap power down
    -                XPD_WIFI: u1,
    -                ///  digital wrap iso
    -                DIG_ISO: u1,
    -                ///  digital wrap power down
    -                XPD_DIG: u1,
    -                ///  touch should start to work
    -                RTC_TOUCH_STATE_START: u1,
    -                ///  touch is about to working. Switch rtc main state
    -                RTC_TOUCH_STATE_SWITCH: u1,
    -                ///  touch is in sleep state
    -                RTC_TOUCH_STATE_SLP: u1,
    -                ///  touch is done
    -                RTC_TOUCH_STATE_DONE: u1,
    -                ///  ulp/cocpu should start to work
    -                RTC_COCPU_STATE_START: u1,
    -                ///  ulp/cocpu is about to working. Switch rtc main state
    -                RTC_COCPU_STATE_SWITCH: u1,
    -                ///  ulp/cocpu is in sleep state
    -                RTC_COCPU_STATE_SLP: u1,
    -                ///  ulp/cocpu is done
    -                RTC_COCPU_STATE_DONE: u1,
    -                ///  no use any more
    -                RTC_MAIN_STATE_XTAL_ISO: u1,
    -                ///  rtc main state machine is in states that pll should be running
    -                RTC_MAIN_STATE_PLL_ON: u1,
    -                ///  rtc is ready to receive wake up trigger from wake up source
    -                RTC_RDY_FOR_WAKEUP: u1,
    -                ///  rtc main state machine has been waited for some cycles
    -                RTC_MAIN_STATE_WAIT_END: u1,
    -                ///  rtc main state machine is in the states of wakeup process
    -                RTC_IN_WAKEUP_STATE: u1,
    -                ///  rtc main state machine is in the states of low power
    -                RTC_IN_LOW_POWER_STATE: u1,
    -                ///  rtc main state machine is in wait 8m state
    -                RTC_MAIN_STATE_IN_WAIT_8M: u1,
    -                ///  rtc main state machine is in wait pll state
    -                RTC_MAIN_STATE_IN_WAIT_PLL: u1,
    -                ///  rtc main state machine is in wait xtal state
    -                RTC_MAIN_STATE_IN_WAIT_XTL: u1,
    -                ///  rtc main state machine is in sleep state
    -                RTC_MAIN_STATE_IN_SLP: u1,
    -                ///  rtc main state machine is in idle state
    -                RTC_MAIN_STATE_IN_IDLE: u1,
    -                ///  rtc main state machine status
    -                RTC_MAIN_STATE: u4,
    -            }),
    -            ///  rtc configure register
    -            DIAG0: mmio.Mmio(packed struct(u32) {
    -                RTC_LOW_POWER_DIAG1: u32,
    -            }),
    -            ///  rtc configure register
    -            PAD_HOLD: mmio.Mmio(packed struct(u32) {
    -                ///  the hold configure of rtc gpio0
    -                RTC_GPIO_PIN0_HOLD: u1,
    -                ///  the hold configure of rtc gpio1
    -                RTC_GPIO_PIN1_HOLD: u1,
    -                ///  the hold configure of rtc gpio2
    -                RTC_GPIO_PIN2_HOLD: u1,
    -                ///  the hold configure of rtc gpio3
    -                RTC_GPIO_PIN3_HOLD: u1,
    -                ///  the hold configure of rtc gpio4
    -                RTC_GPIO_PIN4_HOLD: u1,
    -                ///  the hold configure of rtc gpio5
    -                RTC_GPIO_PIN5_HOLD: u1,
    -                padding: u26,
    -            }),
    -            ///  rtc configure register
    -            DIG_PAD_HOLD: mmio.Mmio(packed struct(u32) {
    -                ///  the configure of digital pad
    -                DIG_PAD_HOLD: u32,
    -            }),
    -            ///  rtc configure register
    -            BROWN_OUT: mmio.Mmio(packed struct(u32) {
    -                reserved4: u4,
    -                ///  brown out interrupt wait cycles
    -                INT_WAIT: u10,
    -                ///  enable close flash when brown out happens
    -                CLOSE_FLASH_ENA: u1,
    -                ///  enable power down RF when brown out happens
    -                PD_RF_ENA: u1,
    -                ///  brown out reset wait cycles
    -                RST_WAIT: u10,
    -                ///  enable brown out reset
    -                RST_ENA: u1,
    -                ///  1: 4-pos reset
    -                RST_SEL: u1,
    -                ///  brown_out origin reset enable
    -                ANA_RST_EN: u1,
    -                ///  clear brown out counter
    -                CNT_CLR: u1,
    -                ///  enable brown out
    -                ENA: u1,
    -                ///  the flag of brown det from analog
    -                DET: u1,
    -            }),
    -            ///  rtc configure register
    -            TIME_LOW1: mmio.Mmio(packed struct(u32) {
    -                ///  RTC timer low 32 bits
    -                RTC_TIMER_VALUE1_LOW: u32,
    -            }),
    -            ///  rtc configure register
    -            TIME_HIGH1: mmio.Mmio(packed struct(u32) {
    -                ///  RTC timer high 16 bits
    -                RTC_TIMER_VALUE1_HIGH: u16,
    -                padding: u16,
    -            }),
    -            ///  rtc configure register
    -            XTAL32K_CLK_FACTOR: mmio.Mmio(packed struct(u32) {
    -                ///  xtal 32k watch dog backup clock factor
    -                XTAL32K_CLK_FACTOR: u32,
    -            }),
    -            ///  rtc configure register
    -            XTAL32K_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  cycles to wait to return noral xtal 32k
    -                XTAL32K_RETURN_WAIT: u4,
    -                ///  cycles to wait to repower on xtal 32k
    -                XTAL32K_RESTART_WAIT: u16,
    -                ///  If no clock detected for this amount of time
    -                XTAL32K_WDT_TIMEOUT: u8,
    -                ///  if restarted xtal32k period is smaller than this
    -                XTAL32K_STABLE_THRES: u4,
    -            }),
    -            ///  rtc configure register
    -            USB_CONF: mmio.Mmio(packed struct(u32) {
    -                reserved18: u18,
    -                ///  disable io_mux reset
    -                IO_MUX_RESET_DISABLE: u1,
    -                padding: u13,
    -            }),
    -            ///  RTC_CNTL_RTC_SLP_REJECT_CAUSE_REG
    -            SLP_REJECT_CAUSE: mmio.Mmio(packed struct(u32) {
    -                ///  sleep reject cause
    -                REJECT_CAUSE: u18,
    -                padding: u14,
    -            }),
    -            ///  rtc configure register
    -            OPTION1: mmio.Mmio(packed struct(u32) {
    -                ///  force chip entry download mode
    -                FORCE_DOWNLOAD_BOOT: u1,
    -                padding: u31,
    -            }),
    -            ///  RTC_CNTL_RTC_SLP_WAKEUP_CAUSE_REG
    -            SLP_WAKEUP_CAUSE: mmio.Mmio(packed struct(u32) {
    -                ///  sleep wakeup cause
    -                WAKEUP_CAUSE: u17,
    -                padding: u15,
    -            }),
    -            ///  rtc configure register
    -            ULP_CP_TIMER_1: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  sleep cycles for ULP-coprocessor timer
    -                ULP_CP_TIMER_SLP_CYCLE: u24,
    -            }),
    -            ///  rtc configure register
    -            INT_ENA_RTC_W1TS: mmio.Mmio(packed struct(u32) {
    -                ///  enable sleep wakeup interrupt
    -                SLP_WAKEUP_INT_ENA_W1TS: u1,
    -                ///  enable sleep reject interrupt
    -                SLP_REJECT_INT_ENA_W1TS: u1,
    -                reserved3: u1,
    -                ///  enable RTC WDT interrupt
    -                RTC_WDT_INT_ENA_W1TS: u1,
    -                reserved9: u5,
    -                ///  enable brown out interrupt
    -                RTC_BROWN_OUT_INT_ENA_W1TS: u1,
    -                ///  enable RTC main timer interrupt
    -                RTC_MAIN_TIMER_INT_ENA_W1TS: u1,
    -                reserved15: u4,
    -                ///  enable super watch dog interrupt
    -                RTC_SWD_INT_ENA_W1TS: u1,
    -                ///  enable xtal32k_dead interrupt
    -                RTC_XTAL32K_DEAD_INT_ENA_W1TS: u1,
    -                reserved19: u2,
    -                ///  enbale gitch det interrupt
    -                RTC_GLITCH_DET_INT_ENA_W1TS: u1,
    -                ///  enbale bbpll cal interrupt
    -                RTC_BBPLL_CAL_INT_ENA_W1TS: u1,
    -                padding: u11,
    -            }),
    -            ///  rtc configure register
    -            INT_ENA_RTC_W1TC: mmio.Mmio(packed struct(u32) {
    -                ///  clear sleep wakeup interrupt enable
    -                SLP_WAKEUP_INT_ENA_W1TC: u1,
    -                ///  clear sleep reject interrupt enable
    -                SLP_REJECT_INT_ENA_W1TC: u1,
    -                reserved3: u1,
    -                ///  clear RTC WDT interrupt enable
    -                RTC_WDT_INT_ENA_W1TC: u1,
    -                reserved9: u5,
    -                ///  clear brown out interrupt enable
    -                RTC_BROWN_OUT_INT_ENA_W1TC: u1,
    -                ///  Clear RTC main timer interrupt enable
    -                RTC_MAIN_TIMER_INT_ENA_W1TC: u1,
    -                reserved15: u4,
    -                ///  clear super watch dog interrupt enable
    -                RTC_SWD_INT_ENA_W1TC: u1,
    -                ///  clear xtal32k_dead interrupt enable
    -                RTC_XTAL32K_DEAD_INT_ENA_W1TC: u1,
    -                reserved19: u2,
    -                ///  clear gitch det interrupt enable
    -                RTC_GLITCH_DET_INT_ENA_W1TC: u1,
    -                ///  clear bbpll cal interrupt enable
    -                RTC_BBPLL_CAL_INT_ENA_W1TC: u1,
    -                padding: u11,
    -            }),
    -            ///  rtc configure register
    -            RETENTION_CTRL: mmio.Mmio(packed struct(u32) {
    -                reserved18: u18,
    -                ///  Retention clk sel
    -                RETENTION_CLK_SEL: u1,
    -                ///  Retention done wait time
    -                RETENTION_DONE_WAIT: u3,
    -                ///  Retention clkoff wait time
    -                RETENTION_CLKOFF_WAIT: u4,
    -                ///  enable cpu retention when light sleep
    -                RETENTION_EN: u1,
    -                ///  wait cycles for rention operation
    -                RETENTION_WAIT: u5,
    -            }),
    -            ///  rtc configure register
    -            FIB_SEL: mmio.Mmio(packed struct(u32) {
    -                ///  select use analog fib signal
    -                RTC_FIB_SEL: u3,
    -                padding: u29,
    -            }),
    -            ///  rtc configure register
    -            GPIO_WAKEUP: mmio.Mmio(packed struct(u32) {
    -                ///  rtc gpio wakeup flag
    -                RTC_GPIO_WAKEUP_STATUS: u6,
    -                ///  clear rtc gpio wakeup flag
    -                RTC_GPIO_WAKEUP_STATUS_CLR: u1,
    -                ///  enable rtc io clk gate
    -                RTC_GPIO_PIN_CLK_GATE: u1,
    -                ///  configure gpio wakeup type
    -                RTC_GPIO_PIN5_INT_TYPE: u3,
    -                ///  configure gpio wakeup type
    -                RTC_GPIO_PIN4_INT_TYPE: u3,
    -                ///  configure gpio wakeup type
    -                RTC_GPIO_PIN3_INT_TYPE: u3,
    -                ///  configure gpio wakeup type
    -                RTC_GPIO_PIN2_INT_TYPE: u3,
    -                ///  configure gpio wakeup type
    -                RTC_GPIO_PIN1_INT_TYPE: u3,
    -                ///  configure gpio wakeup type
    -                RTC_GPIO_PIN0_INT_TYPE: u3,
    -                ///  enable wakeup from rtc gpio5
    -                RTC_GPIO_PIN5_WAKEUP_ENABLE: u1,
    -                ///  enable wakeup from rtc gpio4
    -                RTC_GPIO_PIN4_WAKEUP_ENABLE: u1,
    -                ///  enable wakeup from rtc gpio3
    -                RTC_GPIO_PIN3_WAKEUP_ENABLE: u1,
    -                ///  enable wakeup from rtc gpio2
    -                RTC_GPIO_PIN2_WAKEUP_ENABLE: u1,
    -                ///  enable wakeup from rtc gpio1
    -                RTC_GPIO_PIN1_WAKEUP_ENABLE: u1,
    -                ///  enable wakeup from rtc gpio0
    -                RTC_GPIO_PIN0_WAKEUP_ENABLE: u1,
    -            }),
    -            ///  rtc configure register
    -            DBG_SEL: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  use for debug
    -                RTC_DEBUG_12M_NO_GATING: u1,
    -                ///  use for debug
    -                RTC_DEBUG_BIT_SEL: u5,
    -                ///  use for debug
    -                RTC_DEBUG_SEL0: u5,
    -                ///  use for debug
    -                RTC_DEBUG_SEL1: u5,
    -                ///  use for debug
    -                RTC_DEBUG_SEL2: u5,
    -                ///  use for debug
    -                RTC_DEBUG_SEL3: u5,
    -                ///  use for debug
    -                RTC_DEBUG_SEL4: u5,
    -            }),
    -            ///  rtc configure register
    -            DBG_MAP: mmio.Mmio(packed struct(u32) {
    -                reserved2: u2,
    -                ///  use for debug
    -                RTC_GPIO_PIN5_MUX_SEL: u1,
    -                ///  use for debug
    -                RTC_GPIO_PIN4_MUX_SEL: u1,
    -                ///  use for debug
    -                RTC_GPIO_PIN3_MUX_SEL: u1,
    -                ///  use for debug
    -                RTC_GPIO_PIN2_MUX_SEL: u1,
    -                ///  use for debug
    -                RTC_GPIO_PIN1_MUX_SEL: u1,
    -                ///  use for debug
    -                RTC_GPIO_PIN0_MUX_SEL: u1,
    -                ///  use for debug
    -                RTC_GPIO_PIN5_FUN_SEL: u4,
    -                ///  use for debug
    -                RTC_GPIO_PIN4_FUN_SEL: u4,
    -                ///  use for debug
    -                RTC_GPIO_PIN3_FUN_SEL: u4,
    -                ///  use for debug
    -                RTC_GPIO_PIN2_FUN_SEL: u4,
    -                ///  use for debug
    -                RTC_GPIO_PIN1_FUN_SEL: u4,
    -                ///  use for debug
    -                RTC_GPIO_PIN0_FUN_SEL: u4,
    -            }),
    -            ///  rtc configure register
    -            SENSOR_CTRL: mmio.Mmio(packed struct(u32) {
    -                reserved27: u27,
    -                ///  reg_sar2_pwdet_cct
    -                SAR2_PWDET_CCT: u3,
    -                ///  force power up SAR
    -                FORCE_XPD_SAR: u2,
    -            }),
    -            ///  rtc configure register
    -            DBG_SAR_SEL: mmio.Mmio(packed struct(u32) {
    -                reserved27: u27,
    -                ///  use for debug
    -                SAR_DEBUG_SEL: u5,
    -            }),
    -            ///  rtc configure register
    -            PG_CTRL: mmio.Mmio(packed struct(u32) {
    -                reserved26: u26,
    -                ///  power glitch desense
    -                POWER_GLITCH_DSENSE: u2,
    -                ///  force disable power glitch
    -                POWER_GLITCH_FORCE_PD: u1,
    -                ///  force enable power glitch
    -                POWER_GLITCH_FORCE_PU: u1,
    -                ///  use efuse value control power glitch enable
    -                POWER_GLITCH_EFUSE_SEL: u1,
    -                ///  enable power glitch
    -                POWER_GLITCH_EN: u1,
    -            }),
    -            reserved508: [212]u8,
    -            ///  rtc configure register
    -            DATE: mmio.Mmio(packed struct(u32) {
    -                ///  verision
    -                RTC_CNTL_DATE: u28,
    -                padding: u4,
    -            }),
    -        };
    -
    -        ///  Sensitive
    -        pub const SENSITIVE = extern struct {
    -            ///  SENSITIVE_ROM_TABLE_LOCK_REG
    -            ROM_TABLE_LOCK: mmio.Mmio(packed struct(u32) {
    -                ///  rom_table_lock
    -                ROM_TABLE_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_ROM_TABLE_REG
    -            ROM_TABLE: mmio.Mmio(packed struct(u32) {
    -                ///  rom_table
    -                ROM_TABLE: u32,
    -            }),
    -            ///  SENSITIVE_PRIVILEGE_MODE_SEL_LOCK_REG
    -            PRIVILEGE_MODE_SEL_LOCK: mmio.Mmio(packed struct(u32) {
    -                ///  privilege_mode_sel_lock
    -                PRIVILEGE_MODE_SEL_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_PRIVILEGE_MODE_SEL_REG
    -            PRIVILEGE_MODE_SEL: mmio.Mmio(packed struct(u32) {
    -                ///  privilege_mode_sel
    -                PRIVILEGE_MODE_SEL: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_APB_PERIPHERAL_ACCESS_0_REG
    -            APB_PERIPHERAL_ACCESS_0: mmio.Mmio(packed struct(u32) {
    -                ///  apb_peripheral_access_lock
    -                APB_PERIPHERAL_ACCESS_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_APB_PERIPHERAL_ACCESS_1_REG
    -            APB_PERIPHERAL_ACCESS_1: mmio.Mmio(packed struct(u32) {
    -                ///  apb_peripheral_access_split_burst
    -                APB_PERIPHERAL_ACCESS_SPLIT_BURST: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_INTERNAL_SRAM_USAGE_0_REG
    -            INTERNAL_SRAM_USAGE_0: mmio.Mmio(packed struct(u32) {
    -                ///  internal_sram_usage_lock
    -                INTERNAL_SRAM_USAGE_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_INTERNAL_SRAM_USAGE_1_REG
    -            INTERNAL_SRAM_USAGE_1: mmio.Mmio(packed struct(u32) {
    -                ///  internal_sram_usage_cpu_cache
    -                INTERNAL_SRAM_USAGE_CPU_CACHE: u1,
    -                ///  internal_sram_usage_cpu_sram
    -                INTERNAL_SRAM_USAGE_CPU_SRAM: u3,
    -                padding: u28,
    -            }),
    -            ///  SENSITIVE_INTERNAL_SRAM_USAGE_3_REG
    -            INTERNAL_SRAM_USAGE_3: mmio.Mmio(packed struct(u32) {
    -                ///  internal_sram_usage_mac_dump_sram
    -                INTERNAL_SRAM_USAGE_MAC_DUMP_SRAM: u3,
    -                ///  internal_sram_alloc_mac_dump
    -                INTERNAL_SRAM_ALLOC_MAC_DUMP: u1,
    -                padding: u28,
    -            }),
    -            ///  SENSITIVE_INTERNAL_SRAM_USAGE_4_REG
    -            INTERNAL_SRAM_USAGE_4: mmio.Mmio(packed struct(u32) {
    -                ///  internal_sram_usage_log_sram
    -                INTERNAL_SRAM_USAGE_LOG_SRAM: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_CACHE_TAG_ACCESS_0_REG
    -            CACHE_TAG_ACCESS_0: mmio.Mmio(packed struct(u32) {
    -                ///  cache_tag_access_lock
    -                CACHE_TAG_ACCESS_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_CACHE_TAG_ACCESS_1_REG
    -            CACHE_TAG_ACCESS_1: mmio.Mmio(packed struct(u32) {
    -                ///  pro_i_tag_rd_acs
    -                PRO_I_TAG_RD_ACS: u1,
    -                ///  pro_i_tag_wr_acs
    -                PRO_I_TAG_WR_ACS: u1,
    -                ///  pro_d_tag_rd_acs
    -                PRO_D_TAG_RD_ACS: u1,
    -                ///  pro_d_tag_wr_acs
    -                PRO_D_TAG_WR_ACS: u1,
    -                padding: u28,
    -            }),
    -            ///  SENSITIVE_CACHE_MMU_ACCESS_0_REG
    -            CACHE_MMU_ACCESS_0: mmio.Mmio(packed struct(u32) {
    -                ///  cache_mmu_access_lock
    -                CACHE_MMU_ACCESS_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_CACHE_MMU_ACCESS_1_REG
    -            CACHE_MMU_ACCESS_1: mmio.Mmio(packed struct(u32) {
    -                ///  pro_mmu_rd_acs
    -                PRO_MMU_RD_ACS: u1,
    -                ///  pro_mmu_wr_acs
    -                PRO_MMU_WR_ACS: u1,
    -                padding: u30,
    -            }),
    -            ///  SENSITIVE_DMA_APBPERI_SPI2_PMS_CONSTRAIN_0_REG
    -            DMA_APBPERI_SPI2_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    -                ///  dma_apbperi_spi2_pms_constrain_lock
    -                DMA_APBPERI_SPI2_PMS_CONSTRAIN_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_DMA_APBPERI_SPI2_PMS_CONSTRAIN_1_REG
    -            DMA_APBPERI_SPI2_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    -                ///  dma_apbperi_spi2_pms_constrain_sram_world_0_pms_0
    -                DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    -                ///  dma_apbperi_spi2_pms_constrain_sram_world_0_pms_1
    -                DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    -                ///  dma_apbperi_spi2_pms_constrain_sram_world_0_pms_2
    -                DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    -                ///  dma_apbperi_spi2_pms_constrain_sram_world_0_pms_3
    -                DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    -                reserved12: u4,
    -                ///  dma_apbperi_spi2_pms_constrain_sram_world_1_pms_0
    -                DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    -                ///  dma_apbperi_spi2_pms_constrain_sram_world_1_pms_1
    -                DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    -                ///  dma_apbperi_spi2_pms_constrain_sram_world_1_pms_2
    -                DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    -                ///  dma_apbperi_spi2_pms_constrain_sram_world_1_pms_3
    -                DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    -                padding: u12,
    -            }),
    -            ///  SENSITIVE_DMA_APBPERI_UCHI0_PMS_CONSTRAIN_0_REG
    -            DMA_APBPERI_UCHI0_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    -                ///  dma_apbperi_uchi0_pms_constrain_lock
    -                DMA_APBPERI_UCHI0_PMS_CONSTRAIN_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_DMA_APBPERI_UCHI0_PMS_CONSTRAIN_1_REG
    -            DMA_APBPERI_UCHI0_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    -                ///  dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_0
    -                DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    -                ///  dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_1
    -                DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    -                ///  dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_2
    -                DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    -                ///  dma_apbperi_uchi0_pms_constrain_sram_world_0_pms_3
    -                DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    -                reserved12: u4,
    -                ///  dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_0
    -                DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    -                ///  dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_1
    -                DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    -                ///  dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_2
    -                DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    -                ///  dma_apbperi_uchi0_pms_constrain_sram_world_1_pms_3
    -                DMA_APBPERI_UCHI0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    -                padding: u12,
    -            }),
    -            ///  SENSITIVE_DMA_APBPERI_I2S0_PMS_CONSTRAIN_0_REG
    -            DMA_APBPERI_I2S0_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    -                ///  dma_apbperi_i2s0_pms_constrain_lock
    -                DMA_APBPERI_I2S0_PMS_CONSTRAIN_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_DMA_APBPERI_I2S0_PMS_CONSTRAIN_1_REG
    -            DMA_APBPERI_I2S0_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    -                ///  dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_0
    -                DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    -                ///  dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_1
    -                DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    -                ///  dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_2
    -                DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    -                ///  dma_apbperi_i2s0_pms_constrain_sram_world_0_pms_3
    -                DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    -                reserved12: u4,
    -                ///  dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_0
    -                DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    -                ///  dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_1
    -                DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    -                ///  dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_2
    -                DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    -                ///  dma_apbperi_i2s0_pms_constrain_sram_world_1_pms_3
    -                DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    -                padding: u12,
    -            }),
    -            ///  SENSITIVE_DMA_APBPERI_MAC_PMS_CONSTRAIN_0_REG
    -            DMA_APBPERI_MAC_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    -                ///  dma_apbperi_mac_pms_constrain_lock
    -                DMA_APBPERI_MAC_PMS_CONSTRAIN_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_DMA_APBPERI_MAC_PMS_CONSTRAIN_1_REG
    -            DMA_APBPERI_MAC_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    -                ///  dma_apbperi_mac_pms_constrain_sram_world_0_pms_0
    -                DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    -                ///  dma_apbperi_mac_pms_constrain_sram_world_0_pms_1
    -                DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    -                ///  dma_apbperi_mac_pms_constrain_sram_world_0_pms_2
    -                DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    -                ///  dma_apbperi_mac_pms_constrain_sram_world_0_pms_3
    -                DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    -                reserved12: u4,
    -                ///  dma_apbperi_mac_pms_constrain_sram_world_1_pms_0
    -                DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    -                ///  dma_apbperi_mac_pms_constrain_sram_world_1_pms_1
    -                DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    -                ///  dma_apbperi_mac_pms_constrain_sram_world_1_pms_2
    -                DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    -                ///  dma_apbperi_mac_pms_constrain_sram_world_1_pms_3
    -                DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    -                padding: u12,
    -            }),
    -            ///  SENSITIVE_DMA_APBPERI_BACKUP_PMS_CONSTRAIN_0_REG
    -            DMA_APBPERI_BACKUP_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    -                ///  dma_apbperi_backup_pms_constrain_lock
    -                DMA_APBPERI_BACKUP_PMS_CONSTRAIN_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_DMA_APBPERI_BACKUP_PMS_CONSTRAIN_1_REG
    -            DMA_APBPERI_BACKUP_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    -                ///  dma_apbperi_backup_pms_constrain_sram_world_0_pms_0
    -                DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    -                ///  dma_apbperi_backup_pms_constrain_sram_world_0_pms_1
    -                DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    -                ///  dma_apbperi_backup_pms_constrain_sram_world_0_pms_2
    -                DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    -                ///  dma_apbperi_backup_pms_constrain_sram_world_0_pms_3
    -                DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    -                reserved12: u4,
    -                ///  dma_apbperi_backup_pms_constrain_sram_world_1_pms_0
    -                DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    -                ///  dma_apbperi_backup_pms_constrain_sram_world_1_pms_1
    -                DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    -                ///  dma_apbperi_backup_pms_constrain_sram_world_1_pms_2
    -                DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    -                ///  dma_apbperi_backup_pms_constrain_sram_world_1_pms_3
    -                DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    -                padding: u12,
    -            }),
    -            ///  SENSITIVE_DMA_APBPERI_LC_PMS_CONSTRAIN_0_REG
    -            DMA_APBPERI_LC_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    -                ///  dma_apbperi_lc_pms_constrain_lock
    -                DMA_APBPERI_LC_PMS_CONSTRAIN_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_DMA_APBPERI_LC_PMS_CONSTRAIN_1_REG
    -            DMA_APBPERI_LC_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    -                ///  dma_apbperi_lc_pms_constrain_sram_world_0_pms_0
    -                DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    -                ///  dma_apbperi_lc_pms_constrain_sram_world_0_pms_1
    -                DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    -                ///  dma_apbperi_lc_pms_constrain_sram_world_0_pms_2
    -                DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    -                ///  dma_apbperi_lc_pms_constrain_sram_world_0_pms_3
    -                DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    -                reserved12: u4,
    -                ///  dma_apbperi_lc_pms_constrain_sram_world_1_pms_0
    -                DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    -                ///  dma_apbperi_lc_pms_constrain_sram_world_1_pms_1
    -                DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    -                ///  dma_apbperi_lc_pms_constrain_sram_world_1_pms_2
    -                DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    -                ///  dma_apbperi_lc_pms_constrain_sram_world_1_pms_3
    -                DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    -                padding: u12,
    -            }),
    -            ///  SENSITIVE_DMA_APBPERI_AES_PMS_CONSTRAIN_0_REG
    -            DMA_APBPERI_AES_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    -                ///  dma_apbperi_aes_pms_constrain_lock
    -                DMA_APBPERI_AES_PMS_CONSTRAIN_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_DMA_APBPERI_AES_PMS_CONSTRAIN_1_REG
    -            DMA_APBPERI_AES_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    -                ///  dma_apbperi_aes_pms_constrain_sram_world_0_pms_0
    -                DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    -                ///  dma_apbperi_aes_pms_constrain_sram_world_0_pms_1
    -                DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    -                ///  dma_apbperi_aes_pms_constrain_sram_world_0_pms_2
    -                DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    -                ///  dma_apbperi_aes_pms_constrain_sram_world_0_pms_3
    -                DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    -                reserved12: u4,
    -                ///  dma_apbperi_aes_pms_constrain_sram_world_1_pms_0
    -                DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    -                ///  dma_apbperi_aes_pms_constrain_sram_world_1_pms_1
    -                DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    -                ///  dma_apbperi_aes_pms_constrain_sram_world_1_pms_2
    -                DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    -                ///  dma_apbperi_aes_pms_constrain_sram_world_1_pms_3
    -                DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    -                padding: u12,
    -            }),
    -            ///  SENSITIVE_DMA_APBPERI_SHA_PMS_CONSTRAIN_0_REG
    -            DMA_APBPERI_SHA_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    -                ///  dma_apbperi_sha_pms_constrain_lock
    -                DMA_APBPERI_SHA_PMS_CONSTRAIN_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_DMA_APBPERI_SHA_PMS_CONSTRAIN_1_REG
    -            DMA_APBPERI_SHA_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    -                ///  dma_apbperi_sha_pms_constrain_sram_world_0_pms_0
    -                DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    -                ///  dma_apbperi_sha_pms_constrain_sram_world_0_pms_1
    -                DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    -                ///  dma_apbperi_sha_pms_constrain_sram_world_0_pms_2
    -                DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    -                ///  dma_apbperi_sha_pms_constrain_sram_world_0_pms_3
    -                DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    -                reserved12: u4,
    -                ///  dma_apbperi_sha_pms_constrain_sram_world_1_pms_0
    -                DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    -                ///  dma_apbperi_sha_pms_constrain_sram_world_1_pms_1
    -                DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    -                ///  dma_apbperi_sha_pms_constrain_sram_world_1_pms_2
    -                DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    -                ///  dma_apbperi_sha_pms_constrain_sram_world_1_pms_3
    -                DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    -                padding: u12,
    -            }),
    -            ///  SENSITIVE_DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_0_REG
    -            DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    -                ///  dma_apbperi_adc_dac_pms_constrain_lock
    -                DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_1_REG
    -            DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    -                ///  dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_0
    -                DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    -                ///  dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_1
    -                DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    -                ///  dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_2
    -                DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    -                ///  dma_apbperi_adc_dac_pms_constrain_sram_world_0_pms_3
    -                DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    -                reserved12: u4,
    -                ///  dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_0
    -                DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    -                ///  dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_1
    -                DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    -                ///  dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_2
    -                DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    -                ///  dma_apbperi_adc_dac_pms_constrain_sram_world_1_pms_3
    -                DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    -                padding: u12,
    -            }),
    -            ///  SENSITIVE_DMA_APBPERI_PMS_MONITOR_0_REG
    -            DMA_APBPERI_PMS_MONITOR_0: mmio.Mmio(packed struct(u32) {
    -                ///  dma_apbperi_pms_monitor_lock
    -                DMA_APBPERI_PMS_MONITOR_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_DMA_APBPERI_PMS_MONITOR_1_REG
    -            DMA_APBPERI_PMS_MONITOR_1: mmio.Mmio(packed struct(u32) {
    -                ///  dma_apbperi_pms_monitor_violate_clr
    -                DMA_APBPERI_PMS_MONITOR_VIOLATE_CLR: u1,
    -                ///  dma_apbperi_pms_monitor_violate_en
    -                DMA_APBPERI_PMS_MONITOR_VIOLATE_EN: u1,
    -                padding: u30,
    -            }),
    -            ///  SENSITIVE_DMA_APBPERI_PMS_MONITOR_2_REG
    -            DMA_APBPERI_PMS_MONITOR_2: mmio.Mmio(packed struct(u32) {
    -                ///  dma_apbperi_pms_monitor_violate_intr
    -                DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR: u1,
    -                ///  dma_apbperi_pms_monitor_violate_status_world
    -                DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_WORLD: u2,
    -                ///  dma_apbperi_pms_monitor_violate_status_addr
    -                DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_ADDR: u24,
    -                padding: u5,
    -            }),
    -            ///  SENSITIVE_DMA_APBPERI_PMS_MONITOR_3_REG
    -            DMA_APBPERI_PMS_MONITOR_3: mmio.Mmio(packed struct(u32) {
    -                ///  dma_apbperi_pms_monitor_violate_status_wr
    -                DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_WR: u1,
    -                ///  dma_apbperi_pms_monitor_violate_status_byteen
    -                DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_BYTEEN: u4,
    -                padding: u27,
    -            }),
    -            ///  SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_0_REG
    -            CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    -                ///  core_x_iram0_dram0_dma_split_line_constrain_lock
    -                CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_1_REG
    -            CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    -                ///  core_x_iram0_dram0_dma_sram_category_0
    -                CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_0: u2,
    -                ///  core_x_iram0_dram0_dma_sram_category_1
    -                CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_1: u2,
    -                ///  core_x_iram0_dram0_dma_sram_category_2
    -                CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_2: u2,
    -                reserved14: u8,
    -                ///  core_x_iram0_dram0_dma_sram_splitaddr
    -                CORE_X_IRAM0_DRAM0_DMA_SRAM_SPLITADDR: u8,
    -                padding: u10,
    -            }),
    -            ///  SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_2_REG
    -            CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_2: mmio.Mmio(packed struct(u32) {
    -                ///  core_x_iram0_sram_line_0_category_0
    -                CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_0: u2,
    -                ///  core_x_iram0_sram_line_0_category_1
    -                CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_1: u2,
    -                ///  core_x_iram0_sram_line_0_category_2
    -                CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_2: u2,
    -                reserved14: u8,
    -                ///  core_x_iram0_sram_line_0_splitaddr
    -                CORE_X_IRAM0_SRAM_LINE_0_SPLITADDR: u8,
    -                padding: u10,
    -            }),
    -            ///  SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_3_REG
    -            CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_3: mmio.Mmio(packed struct(u32) {
    -                ///  core_x_iram0_sram_line_1_category_0
    -                CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_0: u2,
    -                ///  core_x_iram0_sram_line_1_category_1
    -                CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_1: u2,
    -                ///  core_x_iram0_sram_line_1_category_2
    -                CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_2: u2,
    -                reserved14: u8,
    -                ///  core_x_iram0_sram_line_1_splitaddr
    -                CORE_X_IRAM0_SRAM_LINE_1_SPLITADDR: u8,
    -                padding: u10,
    -            }),
    -            ///  SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_4_REG
    -            CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_4: mmio.Mmio(packed struct(u32) {
    -                ///  core_x_dram0_dma_sram_line_0_category_0
    -                CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_0: u2,
    -                ///  core_x_dram0_dma_sram_line_0_category_1
    -                CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_1: u2,
    -                ///  core_x_dram0_dma_sram_line_0_category_2
    -                CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_2: u2,
    -                reserved14: u8,
    -                ///  core_x_dram0_dma_sram_line_0_splitaddr
    -                CORE_X_DRAM0_DMA_SRAM_LINE_0_SPLITADDR: u8,
    -                padding: u10,
    -            }),
    -            ///  SENSITIVE_CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_5_REG
    -            CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_5: mmio.Mmio(packed struct(u32) {
    -                ///  core_x_dram0_dma_sram_line_1_category_0
    -                CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_0: u2,
    -                ///  core_x_dram0_dma_sram_line_1_category_1
    -                CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_1: u2,
    -                ///  core_x_dram0_dma_sram_line_1_category_2
    -                CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_2: u2,
    -                reserved14: u8,
    -                ///  core_x_dram0_dma_sram_line_1_splitaddr
    -                CORE_X_DRAM0_DMA_SRAM_LINE_1_SPLITADDR: u8,
    -                padding: u10,
    -            }),
    -            ///  SENSITIVE_CORE_X_IRAM0_PMS_CONSTRAIN_0_REG
    -            CORE_X_IRAM0_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    -                ///  core_x_iram0_pms_constrain_lock
    -                CORE_X_IRAM0_PMS_CONSTRAIN_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_CORE_X_IRAM0_PMS_CONSTRAIN_1_REG
    -            CORE_X_IRAM0_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    -                ///  core_x_iram0_pms_constrain_sram_world_1_pms_0
    -                CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u3,
    -                ///  core_x_iram0_pms_constrain_sram_world_1_pms_1
    -                CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u3,
    -                ///  core_x_iram0_pms_constrain_sram_world_1_pms_2
    -                CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u3,
    -                ///  core_x_iram0_pms_constrain_sram_world_1_pms_3
    -                CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u3,
    -                ///  core_x_iram0_pms_constrain_sram_world_1_cachedataarray_pms_0
    -                CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_CACHEDATAARRAY_PMS_0: u3,
    -                reserved18: u3,
    -                ///  core_x_iram0_pms_constrain_rom_world_1_pms
    -                CORE_X_IRAM0_PMS_CONSTRAIN_ROM_WORLD_1_PMS: u3,
    -                padding: u11,
    -            }),
    -            ///  SENSITIVE_CORE_X_IRAM0_PMS_CONSTRAIN_2_REG
    -            CORE_X_IRAM0_PMS_CONSTRAIN_2: mmio.Mmio(packed struct(u32) {
    -                ///  core_x_iram0_pms_constrain_sram_world_0_pms_0
    -                CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u3,
    -                ///  core_x_iram0_pms_constrain_sram_world_0_pms_1
    -                CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u3,
    -                ///  core_x_iram0_pms_constrain_sram_world_0_pms_2
    -                CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u3,
    -                ///  core_x_iram0_pms_constrain_sram_world_0_pms_3
    -                CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u3,
    -                ///  core_x_iram0_pms_constrain_sram_world_0_cachedataarray_pms_0
    -                CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_CACHEDATAARRAY_PMS_0: u3,
    -                reserved18: u3,
    -                ///  core_x_iram0_pms_constrain_rom_world_0_pms
    -                CORE_X_IRAM0_PMS_CONSTRAIN_ROM_WORLD_0_PMS: u3,
    -                padding: u11,
    -            }),
    -            ///  SENSITIVE_CORE_0_IRAM0_PMS_MONITOR_0_REG
    -            CORE_0_IRAM0_PMS_MONITOR_0: mmio.Mmio(packed struct(u32) {
    -                ///  core_0_iram0_pms_monitor_lock
    -                CORE_0_IRAM0_PMS_MONITOR_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_CORE_0_IRAM0_PMS_MONITOR_1_REG
    -            CORE_0_IRAM0_PMS_MONITOR_1: mmio.Mmio(packed struct(u32) {
    -                ///  core_0_iram0_pms_monitor_violate_clr
    -                CORE_0_IRAM0_PMS_MONITOR_VIOLATE_CLR: u1,
    -                ///  core_0_iram0_pms_monitor_violate_en
    -                CORE_0_IRAM0_PMS_MONITOR_VIOLATE_EN: u1,
    -                padding: u30,
    -            }),
    -            ///  SENSITIVE_CORE_0_IRAM0_PMS_MONITOR_2_REG
    -            CORE_0_IRAM0_PMS_MONITOR_2: mmio.Mmio(packed struct(u32) {
    -                ///  core_0_iram0_pms_monitor_violate_intr
    -                CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR: u1,
    -                ///  core_0_iram0_pms_monitor_violate_status_wr
    -                CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_WR: u1,
    -                ///  core_0_iram0_pms_monitor_violate_status_loadstore
    -                CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_LOADSTORE: u1,
    -                ///  core_0_iram0_pms_monitor_violate_status_world
    -                CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_WORLD: u2,
    -                ///  core_0_iram0_pms_monitor_violate_status_addr
    -                CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_ADDR: u24,
    -                padding: u3,
    -            }),
    -            ///  SENSITIVE_CORE_X_DRAM0_PMS_CONSTRAIN_0_REG
    -            CORE_X_DRAM0_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    -                ///  core_x_dram0_pms_constrain_lock
    -                CORE_X_DRAM0_PMS_CONSTRAIN_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_CORE_X_DRAM0_PMS_CONSTRAIN_1_REG
    -            CORE_X_DRAM0_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    -                ///  core_x_dram0_pms_constrain_sram_world_0_pms_0
    -                CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0: u2,
    -                ///  core_x_dram0_pms_constrain_sram_world_0_pms_1
    -                CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1: u2,
    -                ///  core_x_dram0_pms_constrain_sram_world_0_pms_2
    -                CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2: u2,
    -                ///  core_x_dram0_pms_constrain_sram_world_0_pms_3
    -                CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3: u2,
    -                reserved12: u4,
    -                ///  core_x_dram0_pms_constrain_sram_world_1_pms_0
    -                CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0: u2,
    -                ///  core_x_dram0_pms_constrain_sram_world_1_pms_1
    -                CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1: u2,
    -                ///  core_x_dram0_pms_constrain_sram_world_1_pms_2
    -                CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2: u2,
    -                ///  core_x_dram0_pms_constrain_sram_world_1_pms_3
    -                CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3: u2,
    -                reserved24: u4,
    -                ///  core_x_dram0_pms_constrain_rom_world_0_pms
    -                CORE_X_DRAM0_PMS_CONSTRAIN_ROM_WORLD_0_PMS: u2,
    -                ///  core_x_dram0_pms_constrain_rom_world_1_pms
    -                CORE_X_DRAM0_PMS_CONSTRAIN_ROM_WORLD_1_PMS: u2,
    -                padding: u4,
    -            }),
    -            ///  SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_0_REG
    -            CORE_0_DRAM0_PMS_MONITOR_0: mmio.Mmio(packed struct(u32) {
    -                ///  core_0_dram0_pms_monitor_lock
    -                CORE_0_DRAM0_PMS_MONITOR_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_1_REG
    -            CORE_0_DRAM0_PMS_MONITOR_1: mmio.Mmio(packed struct(u32) {
    -                ///  core_0_dram0_pms_monitor_violate_clr
    -                CORE_0_DRAM0_PMS_MONITOR_VIOLATE_CLR: u1,
    -                ///  core_0_dram0_pms_monitor_violate_en
    -                CORE_0_DRAM0_PMS_MONITOR_VIOLATE_EN: u1,
    -                padding: u30,
    -            }),
    -            ///  SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_2_REG
    -            CORE_0_DRAM0_PMS_MONITOR_2: mmio.Mmio(packed struct(u32) {
    -                ///  core_0_dram0_pms_monitor_violate_intr
    -                CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR: u1,
    -                ///  core_0_dram0_pms_monitor_violate_status_lock
    -                CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_LOCK: u1,
    -                ///  core_0_dram0_pms_monitor_violate_status_world
    -                CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_WORLD: u2,
    -                ///  core_0_dram0_pms_monitor_violate_status_addr
    -                CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_ADDR: u24,
    -                padding: u4,
    -            }),
    -            ///  SENSITIVE_CORE_0_DRAM0_PMS_MONITOR_3_REG
    -            CORE_0_DRAM0_PMS_MONITOR_3: mmio.Mmio(packed struct(u32) {
    -                ///  core_0_dram0_pms_monitor_violate_status_wr
    -                CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_WR: u1,
    -                ///  core_0_dram0_pms_monitor_violate_status_byteen
    -                CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_BYTEEN: u4,
    -                padding: u27,
    -            }),
    -            ///  SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_0_REG
    -            CORE_0_PIF_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    -                ///  core_0_pif_pms_constrain_lock
    -                CORE_0_PIF_PMS_CONSTRAIN_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_1_REG
    -            CORE_0_PIF_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    -                ///  core_0_pif_pms_constrain_world_0_uart
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_UART: u2,
    -                ///  core_0_pif_pms_constrain_world_0_g0spi_1
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_G0SPI_1: u2,
    -                ///  core_0_pif_pms_constrain_world_0_g0spi_0
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_G0SPI_0: u2,
    -                ///  core_0_pif_pms_constrain_world_0_gpio
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_GPIO: u2,
    -                ///  core_0_pif_pms_constrain_world_0_fe2
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_FE2: u2,
    -                ///  core_0_pif_pms_constrain_world_0_fe
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_FE: u2,
    -                ///  core_0_pif_pms_constrain_world_0_timer
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_TIMER: u2,
    -                ///  core_0_pif_pms_constrain_world_0_rtc
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_RTC: u2,
    -                ///  core_0_pif_pms_constrain_world_0_io_mux
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_IO_MUX: u2,
    -                ///  core_0_pif_pms_constrain_world_0_wdg
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_WDG: u2,
    -                reserved24: u4,
    -                ///  core_0_pif_pms_constrain_world_0_misc
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_MISC: u2,
    -                ///  core_0_pif_pms_constrain_world_0_i2c
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_I2C: u2,
    -                reserved30: u2,
    -                ///  core_0_pif_pms_constrain_world_0_uart1
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_UART1: u2,
    -            }),
    -            ///  SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_2_REG
    -            CORE_0_PIF_PMS_CONSTRAIN_2: mmio.Mmio(packed struct(u32) {
    -                ///  core_0_pif_pms_constrain_world_0_bt
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_BT: u2,
    -                reserved4: u2,
    -                ///  core_0_pif_pms_constrain_world_0_i2c_ext0
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_I2C_EXT0: u2,
    -                ///  core_0_pif_pms_constrain_world_0_uhci0
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_UHCI0: u2,
    -                reserved10: u2,
    -                ///  core_0_pif_pms_constrain_world_0_rmt
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_RMT: u2,
    -                reserved16: u4,
    -                ///  core_0_pif_pms_constrain_world_0_ledc
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_LEDC: u2,
    -                reserved22: u4,
    -                ///  core_0_pif_pms_constrain_world_0_bb
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_BB: u2,
    -                reserved26: u2,
    -                ///  core_0_pif_pms_constrain_world_0_timergroup
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_TIMERGROUP: u2,
    -                ///  core_0_pif_pms_constrain_world_0_timergroup1
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_TIMERGROUP1: u2,
    -                ///  core_0_pif_pms_constrain_world_0_systimer
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SYSTIMER: u2,
    -            }),
    -            ///  SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_3_REG
    -            CORE_0_PIF_PMS_CONSTRAIN_3: mmio.Mmio(packed struct(u32) {
    -                ///  core_0_pif_pms_constrain_world_0_spi_2
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SPI_2: u2,
    -                reserved4: u2,
    -                ///  core_0_pif_pms_constrain_world_0_apb_ctrl
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_APB_CTRL: u2,
    -                reserved10: u4,
    -                ///  core_0_pif_pms_constrain_world_0_can
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CAN: u2,
    -                reserved14: u2,
    -                ///  core_0_pif_pms_constrain_world_0_i2s1
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_I2S1: u2,
    -                reserved22: u6,
    -                ///  core_0_pif_pms_constrain_world_0_rwbt
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_RWBT: u2,
    -                reserved26: u2,
    -                ///  core_0_pif_pms_constrain_world_0_wifimac
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_WIFIMAC: u2,
    -                ///  core_0_pif_pms_constrain_world_0_pwr
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_PWR: u2,
    -                padding: u2,
    -            }),
    -            ///  SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_4_REG
    -            CORE_0_PIF_PMS_CONSTRAIN_4: mmio.Mmio(packed struct(u32) {
    -                reserved2: u2,
    -                ///  core_0_pif_pms_constrain_world_0_usb_wrap
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_USB_WRAP: u2,
    -                ///  core_0_pif_pms_constrain_world_0_crypto_peri
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CRYPTO_PERI: u2,
    -                ///  core_0_pif_pms_constrain_world_0_crypto_dma
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CRYPTO_DMA: u2,
    -                ///  core_0_pif_pms_constrain_world_0_apb_adc
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_APB_ADC: u2,
    -                reserved12: u2,
    -                ///  core_0_pif_pms_constrain_world_0_bt_pwr
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_BT_PWR: u2,
    -                ///  core_0_pif_pms_constrain_world_0_usb_device
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_USB_DEVICE: u2,
    -                ///  core_0_pif_pms_constrain_world_0_system
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SYSTEM: u2,
    -                ///  core_0_pif_pms_constrain_world_0_sensitive
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SENSITIVE: u2,
    -                ///  core_0_pif_pms_constrain_world_0_interrupt
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_INTERRUPT: u2,
    -                ///  core_0_pif_pms_constrain_world_0_dma_copy
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_DMA_COPY: u2,
    -                ///  core_0_pif_pms_constrain_world_0_cache_config
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CACHE_CONFIG: u2,
    -                ///  core_0_pif_pms_constrain_world_0_ad
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_AD: u2,
    -                ///  core_0_pif_pms_constrain_world_0_dio
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_DIO: u2,
    -                ///  core_0_pif_pms_constrain_world_0_world_controller
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_WORLD_CONTROLLER: u2,
    -            }),
    -            ///  SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_5_REG
    -            CORE_0_PIF_PMS_CONSTRAIN_5: mmio.Mmio(packed struct(u32) {
    -                ///  core_0_pif_pms_constrain_world_1_uart
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_UART: u2,
    -                ///  core_0_pif_pms_constrain_world_1_g0spi_1
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_G0SPI_1: u2,
    -                ///  core_0_pif_pms_constrain_world_1_g0spi_0
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_G0SPI_0: u2,
    -                ///  core_0_pif_pms_constrain_world_1_gpio
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_GPIO: u2,
    -                ///  core_0_pif_pms_constrain_world_1_fe2
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_FE2: u2,
    -                ///  core_0_pif_pms_constrain_world_1_fe
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_FE: u2,
    -                ///  core_0_pif_pms_constrain_world_1_timer
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_TIMER: u2,
    -                ///  core_0_pif_pms_constrain_world_1_rtc
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_RTC: u2,
    -                ///  core_0_pif_pms_constrain_world_1_io_mux
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_IO_MUX: u2,
    -                ///  core_0_pif_pms_constrain_world_1_wdg
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_WDG: u2,
    -                reserved24: u4,
    -                ///  core_0_pif_pms_constrain_world_1_misc
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_MISC: u2,
    -                ///  core_0_pif_pms_constrain_world_1_i2c
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_I2C: u2,
    -                reserved30: u2,
    -                ///  core_0_pif_pms_constrain_world_1_uart1
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_UART1: u2,
    -            }),
    -            ///  SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_6_REG
    -            CORE_0_PIF_PMS_CONSTRAIN_6: mmio.Mmio(packed struct(u32) {
    -                ///  core_0_pif_pms_constrain_world_1_bt
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_BT: u2,
    -                reserved4: u2,
    -                ///  core_0_pif_pms_constrain_world_1_i2c_ext0
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_I2C_EXT0: u2,
    -                ///  core_0_pif_pms_constrain_world_1_uhci0
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_UHCI0: u2,
    -                reserved10: u2,
    -                ///  core_0_pif_pms_constrain_world_1_rmt
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_RMT: u2,
    -                reserved16: u4,
    -                ///  core_0_pif_pms_constrain_world_1_ledc
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_LEDC: u2,
    -                reserved22: u4,
    -                ///  core_0_pif_pms_constrain_world_1_bb
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_BB: u2,
    -                reserved26: u2,
    -                ///  core_0_pif_pms_constrain_world_1_timergroup
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_TIMERGROUP: u2,
    -                ///  core_0_pif_pms_constrain_world_1_timergroup1
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_TIMERGROUP1: u2,
    -                ///  core_0_pif_pms_constrain_world_1_systimer
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SYSTIMER: u2,
    -            }),
    -            ///  SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_7_REG
    -            CORE_0_PIF_PMS_CONSTRAIN_7: mmio.Mmio(packed struct(u32) {
    -                ///  core_0_pif_pms_constrain_world_1_spi_2
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SPI_2: u2,
    -                reserved4: u2,
    -                ///  core_0_pif_pms_constrain_world_1_apb_ctrl
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_APB_CTRL: u2,
    -                reserved10: u4,
    -                ///  core_0_pif_pms_constrain_world_1_can
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CAN: u2,
    -                reserved14: u2,
    -                ///  core_0_pif_pms_constrain_world_1_i2s1
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_I2S1: u2,
    -                reserved22: u6,
    -                ///  core_0_pif_pms_constrain_world_1_rwbt
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_RWBT: u2,
    -                reserved26: u2,
    -                ///  core_0_pif_pms_constrain_world_1_wifimac
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_WIFIMAC: u2,
    -                ///  core_0_pif_pms_constrain_world_1_pwr
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_PWR: u2,
    -                padding: u2,
    -            }),
    -            ///  SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_8_REG
    -            CORE_0_PIF_PMS_CONSTRAIN_8: mmio.Mmio(packed struct(u32) {
    -                reserved2: u2,
    -                ///  core_0_pif_pms_constrain_world_1_usb_wrap
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_USB_WRAP: u2,
    -                ///  core_0_pif_pms_constrain_world_1_crypto_peri
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CRYPTO_PERI: u2,
    -                ///  core_0_pif_pms_constrain_world_1_crypto_dma
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CRYPTO_DMA: u2,
    -                ///  core_0_pif_pms_constrain_world_1_apb_adc
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_APB_ADC: u2,
    -                reserved12: u2,
    -                ///  core_0_pif_pms_constrain_world_1_bt_pwr
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_BT_PWR: u2,
    -                ///  core_0_pif_pms_constrain_world_1_usb_device
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_USB_DEVICE: u2,
    -                ///  core_0_pif_pms_constrain_world_1_system
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SYSTEM: u2,
    -                ///  core_0_pif_pms_constrain_world_1_sensitive
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SENSITIVE: u2,
    -                ///  core_0_pif_pms_constrain_world_1_interrupt
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_INTERRUPT: u2,
    -                ///  core_0_pif_pms_constrain_world_1_dma_copy
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_DMA_COPY: u2,
    -                ///  core_0_pif_pms_constrain_world_1_cache_config
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CACHE_CONFIG: u2,
    -                ///  core_0_pif_pms_constrain_world_1_ad
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_AD: u2,
    -                ///  core_0_pif_pms_constrain_world_1_dio
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_DIO: u2,
    -                ///  core_0_pif_pms_constrain_world_1_world_controller
    -                CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_WORLD_CONTROLLER: u2,
    -            }),
    -            ///  SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_9_REG
    -            CORE_0_PIF_PMS_CONSTRAIN_9: mmio.Mmio(packed struct(u32) {
    -                ///  core_0_pif_pms_constrain_rtcfast_spltaddr_world_0
    -                CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_SPLTADDR_WORLD_0: u11,
    -                ///  core_0_pif_pms_constrain_rtcfast_spltaddr_world_1
    -                CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_SPLTADDR_WORLD_1: u11,
    -                padding: u10,
    -            }),
    -            ///  SENSITIVE_CORE_0_PIF_PMS_CONSTRAIN_10_REG
    -            CORE_0_PIF_PMS_CONSTRAIN_10: mmio.Mmio(packed struct(u32) {
    -                ///  core_0_pif_pms_constrain_rtcfast_world_0_l
    -                CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_0_L: u3,
    -                ///  core_0_pif_pms_constrain_rtcfast_world_0_h
    -                CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_0_H: u3,
    -                ///  core_0_pif_pms_constrain_rtcfast_world_1_l
    -                CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_1_L: u3,
    -                ///  core_0_pif_pms_constrain_rtcfast_world_1_h
    -                CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_1_H: u3,
    -                padding: u20,
    -            }),
    -            ///  SENSITIVE_REGION_PMS_CONSTRAIN_0_REG
    -            REGION_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    -                ///  region_pms_constrain_lock
    -                REGION_PMS_CONSTRAIN_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_REGION_PMS_CONSTRAIN_1_REG
    -            REGION_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    -                ///  region_pms_constrain_world_0_area_0
    -                REGION_PMS_CONSTRAIN_WORLD_0_AREA_0: u2,
    -                ///  region_pms_constrain_world_0_area_1
    -                REGION_PMS_CONSTRAIN_WORLD_0_AREA_1: u2,
    -                ///  region_pms_constrain_world_0_area_2
    -                REGION_PMS_CONSTRAIN_WORLD_0_AREA_2: u2,
    -                ///  region_pms_constrain_world_0_area_3
    -                REGION_PMS_CONSTRAIN_WORLD_0_AREA_3: u2,
    -                ///  region_pms_constrain_world_0_area_4
    -                REGION_PMS_CONSTRAIN_WORLD_0_AREA_4: u2,
    -                ///  region_pms_constrain_world_0_area_5
    -                REGION_PMS_CONSTRAIN_WORLD_0_AREA_5: u2,
    -                ///  region_pms_constrain_world_0_area_6
    -                REGION_PMS_CONSTRAIN_WORLD_0_AREA_6: u2,
    -                padding: u18,
    -            }),
    -            ///  SENSITIVE_REGION_PMS_CONSTRAIN_2_REG
    -            REGION_PMS_CONSTRAIN_2: mmio.Mmio(packed struct(u32) {
    -                ///  region_pms_constrain_world_1_area_0
    -                REGION_PMS_CONSTRAIN_WORLD_1_AREA_0: u2,
    -                ///  region_pms_constrain_world_1_area_1
    -                REGION_PMS_CONSTRAIN_WORLD_1_AREA_1: u2,
    -                ///  region_pms_constrain_world_1_area_2
    -                REGION_PMS_CONSTRAIN_WORLD_1_AREA_2: u2,
    -                ///  region_pms_constrain_world_1_area_3
    -                REGION_PMS_CONSTRAIN_WORLD_1_AREA_3: u2,
    -                ///  region_pms_constrain_world_1_area_4
    -                REGION_PMS_CONSTRAIN_WORLD_1_AREA_4: u2,
    -                ///  region_pms_constrain_world_1_area_5
    -                REGION_PMS_CONSTRAIN_WORLD_1_AREA_5: u2,
    -                ///  region_pms_constrain_world_1_area_6
    -                REGION_PMS_CONSTRAIN_WORLD_1_AREA_6: u2,
    -                padding: u18,
    -            }),
    -            ///  SENSITIVE_REGION_PMS_CONSTRAIN_3_REG
    -            REGION_PMS_CONSTRAIN_3: mmio.Mmio(packed struct(u32) {
    -                ///  region_pms_constrain_addr_0
    -                REGION_PMS_CONSTRAIN_ADDR_0: u30,
    -                padding: u2,
    -            }),
    -            ///  SENSITIVE_REGION_PMS_CONSTRAIN_4_REG
    -            REGION_PMS_CONSTRAIN_4: mmio.Mmio(packed struct(u32) {
    -                ///  region_pms_constrain_addr_1
    -                REGION_PMS_CONSTRAIN_ADDR_1: u30,
    -                padding: u2,
    -            }),
    -            ///  SENSITIVE_REGION_PMS_CONSTRAIN_5_REG
    -            REGION_PMS_CONSTRAIN_5: mmio.Mmio(packed struct(u32) {
    -                ///  region_pms_constrain_addr_2
    -                REGION_PMS_CONSTRAIN_ADDR_2: u30,
    -                padding: u2,
    -            }),
    -            ///  SENSITIVE_REGION_PMS_CONSTRAIN_6_REG
    -            REGION_PMS_CONSTRAIN_6: mmio.Mmio(packed struct(u32) {
    -                ///  region_pms_constrain_addr_3
    -                REGION_PMS_CONSTRAIN_ADDR_3: u30,
    -                padding: u2,
    -            }),
    -            ///  SENSITIVE_REGION_PMS_CONSTRAIN_7_REG
    -            REGION_PMS_CONSTRAIN_7: mmio.Mmio(packed struct(u32) {
    -                ///  region_pms_constrain_addr_4
    -                REGION_PMS_CONSTRAIN_ADDR_4: u30,
    -                padding: u2,
    -            }),
    -            ///  SENSITIVE_REGION_PMS_CONSTRAIN_8_REG
    -            REGION_PMS_CONSTRAIN_8: mmio.Mmio(packed struct(u32) {
    -                ///  region_pms_constrain_addr_5
    -                REGION_PMS_CONSTRAIN_ADDR_5: u30,
    -                padding: u2,
    -            }),
    -            ///  SENSITIVE_REGION_PMS_CONSTRAIN_9_REG
    -            REGION_PMS_CONSTRAIN_9: mmio.Mmio(packed struct(u32) {
    -                ///  region_pms_constrain_addr_6
    -                REGION_PMS_CONSTRAIN_ADDR_6: u30,
    -                padding: u2,
    -            }),
    -            ///  SENSITIVE_REGION_PMS_CONSTRAIN_10_REG
    -            REGION_PMS_CONSTRAIN_10: mmio.Mmio(packed struct(u32) {
    -                ///  region_pms_constrain_addr_7
    -                REGION_PMS_CONSTRAIN_ADDR_7: u30,
    -                padding: u2,
    -            }),
    -            ///  SENSITIVE_CORE_0_PIF_PMS_MONITOR_0_REG
    -            CORE_0_PIF_PMS_MONITOR_0: mmio.Mmio(packed struct(u32) {
    -                ///  core_0_pif_pms_monitor_lock
    -                CORE_0_PIF_PMS_MONITOR_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_CORE_0_PIF_PMS_MONITOR_1_REG
    -            CORE_0_PIF_PMS_MONITOR_1: mmio.Mmio(packed struct(u32) {
    -                ///  core_0_pif_pms_monitor_violate_clr
    -                CORE_0_PIF_PMS_MONITOR_VIOLATE_CLR: u1,
    -                ///  core_0_pif_pms_monitor_violate_en
    -                CORE_0_PIF_PMS_MONITOR_VIOLATE_EN: u1,
    -                padding: u30,
    -            }),
    -            ///  SENSITIVE_CORE_0_PIF_PMS_MONITOR_2_REG
    -            CORE_0_PIF_PMS_MONITOR_2: mmio.Mmio(packed struct(u32) {
    -                ///  core_0_pif_pms_monitor_violate_intr
    -                CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR: u1,
    -                ///  core_0_pif_pms_monitor_violate_status_hport_0
    -                CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HPORT_0: u1,
    -                ///  core_0_pif_pms_monitor_violate_status_hsize
    -                CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HSIZE: u3,
    -                ///  core_0_pif_pms_monitor_violate_status_hwrite
    -                CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HWRITE: u1,
    -                ///  core_0_pif_pms_monitor_violate_status_hworld
    -                CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HWORLD: u2,
    -                padding: u24,
    -            }),
    -            ///  SENSITIVE_CORE_0_PIF_PMS_MONITOR_3_REG
    -            CORE_0_PIF_PMS_MONITOR_3: mmio.Mmio(packed struct(u32) {
    -                ///  core_0_pif_pms_monitor_violate_status_haddr
    -                CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HADDR: u32,
    -            }),
    -            ///  SENSITIVE_CORE_0_PIF_PMS_MONITOR_4_REG
    -            CORE_0_PIF_PMS_MONITOR_4: mmio.Mmio(packed struct(u32) {
    -                ///  core_0_pif_pms_monitor_nonword_violate_clr
    -                CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_CLR: u1,
    -                ///  core_0_pif_pms_monitor_nonword_violate_en
    -                CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_EN: u1,
    -                padding: u30,
    -            }),
    -            ///  SENSITIVE_CORE_0_PIF_PMS_MONITOR_5_REG
    -            CORE_0_PIF_PMS_MONITOR_5: mmio.Mmio(packed struct(u32) {
    -                ///  core_0_pif_pms_monitor_nonword_violate_intr
    -                CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_INTR: u1,
    -                ///  core_0_pif_pms_monitor_nonword_violate_status_hsize
    -                CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_STATUS_HSIZE: u2,
    -                ///  core_0_pif_pms_monitor_nonword_violate_status_hworld
    -                CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_STATUS_HWORLD: u2,
    -                padding: u27,
    -            }),
    -            ///  SENSITIVE_CORE_0_PIF_PMS_MONITOR_6_REG
    -            CORE_0_PIF_PMS_MONITOR_6: mmio.Mmio(packed struct(u32) {
    -                ///  core_0_pif_pms_monitor_nonword_violate_status_haddr
    -                CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_STATUS_HADDR: u32,
    -            }),
    -            ///  SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_0_REG
    -            BACKUP_BUS_PMS_CONSTRAIN_0: mmio.Mmio(packed struct(u32) {
    -                ///  backup_bus_pms_constrain_lock
    -                BACKUP_BUS_PMS_CONSTRAIN_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_1_REG
    -            BACKUP_BUS_PMS_CONSTRAIN_1: mmio.Mmio(packed struct(u32) {
    -                ///  backup_bus_pms_constrain_uart
    -                BACKUP_BUS_PMS_CONSTRAIN_UART: u2,
    -                ///  backup_bus_pms_constrain_g0spi_1
    -                BACKUP_BUS_PMS_CONSTRAIN_G0SPI_1: u2,
    -                ///  backup_bus_pms_constrain_g0spi_0
    -                BACKUP_BUS_PMS_CONSTRAIN_G0SPI_0: u2,
    -                ///  backup_bus_pms_constrain_gpio
    -                BACKUP_BUS_PMS_CONSTRAIN_GPIO: u2,
    -                ///  backup_bus_pms_constrain_fe2
    -                BACKUP_BUS_PMS_CONSTRAIN_FE2: u2,
    -                ///  backup_bus_pms_constrain_fe
    -                BACKUP_BUS_PMS_CONSTRAIN_FE: u2,
    -                ///  backup_bus_pms_constrain_timer
    -                BACKUP_BUS_PMS_CONSTRAIN_TIMER: u2,
    -                ///  backup_bus_pms_constrain_rtc
    -                BACKUP_BUS_PMS_CONSTRAIN_RTC: u2,
    -                ///  backup_bus_pms_constrain_io_mux
    -                BACKUP_BUS_PMS_CONSTRAIN_IO_MUX: u2,
    -                ///  backup_bus_pms_constrain_wdg
    -                BACKUP_BUS_PMS_CONSTRAIN_WDG: u2,
    -                reserved24: u4,
    -                ///  backup_bus_pms_constrain_misc
    -                BACKUP_BUS_PMS_CONSTRAIN_MISC: u2,
    -                ///  backup_bus_pms_constrain_i2c
    -                BACKUP_BUS_PMS_CONSTRAIN_I2C: u2,
    -                reserved30: u2,
    -                ///  backup_bus_pms_constrain_uart1
    -                BACKUP_BUS_PMS_CONSTRAIN_UART1: u2,
    -            }),
    -            ///  SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_2_REG
    -            BACKUP_BUS_PMS_CONSTRAIN_2: mmio.Mmio(packed struct(u32) {
    -                ///  backup_bus_pms_constrain_bt
    -                BACKUP_BUS_PMS_CONSTRAIN_BT: u2,
    -                reserved4: u2,
    -                ///  backup_bus_pms_constrain_i2c_ext0
    -                BACKUP_BUS_PMS_CONSTRAIN_I2C_EXT0: u2,
    -                ///  backup_bus_pms_constrain_uhci0
    -                BACKUP_BUS_PMS_CONSTRAIN_UHCI0: u2,
    -                reserved10: u2,
    -                ///  backup_bus_pms_constrain_rmt
    -                BACKUP_BUS_PMS_CONSTRAIN_RMT: u2,
    -                reserved16: u4,
    -                ///  backup_bus_pms_constrain_ledc
    -                BACKUP_BUS_PMS_CONSTRAIN_LEDC: u2,
    -                reserved22: u4,
    -                ///  backup_bus_pms_constrain_bb
    -                BACKUP_BUS_PMS_CONSTRAIN_BB: u2,
    -                reserved26: u2,
    -                ///  backup_bus_pms_constrain_timergroup
    -                BACKUP_BUS_PMS_CONSTRAIN_TIMERGROUP: u2,
    -                ///  backup_bus_pms_constrain_timergroup1
    -                BACKUP_BUS_PMS_CONSTRAIN_TIMERGROUP1: u2,
    -                ///  backup_bus_pms_constrain_systimer
    -                BACKUP_BUS_PMS_CONSTRAIN_SYSTIMER: u2,
    -            }),
    -            ///  SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_3_REG
    -            BACKUP_BUS_PMS_CONSTRAIN_3: mmio.Mmio(packed struct(u32) {
    -                ///  backup_bus_pms_constrain_spi_2
    -                BACKUP_BUS_PMS_CONSTRAIN_SPI_2: u2,
    -                reserved4: u2,
    -                ///  backup_bus_pms_constrain_apb_ctrl
    -                BACKUP_BUS_PMS_CONSTRAIN_APB_CTRL: u2,
    -                reserved10: u4,
    -                ///  backup_bus_pms_constrain_can
    -                BACKUP_BUS_PMS_CONSTRAIN_CAN: u2,
    -                reserved14: u2,
    -                ///  backup_bus_pms_constrain_i2s1
    -                BACKUP_BUS_PMS_CONSTRAIN_I2S1: u2,
    -                reserved22: u6,
    -                ///  backup_bus_pms_constrain_rwbt
    -                BACKUP_BUS_PMS_CONSTRAIN_RWBT: u2,
    -                reserved26: u2,
    -                ///  backup_bus_pms_constrain_wifimac
    -                BACKUP_BUS_PMS_CONSTRAIN_WIFIMAC: u2,
    -                ///  backup_bus_pms_constrain_pwr
    -                BACKUP_BUS_PMS_CONSTRAIN_PWR: u2,
    -                padding: u2,
    -            }),
    -            ///  SENSITIVE_BACKUP_BUS_PMS_CONSTRAIN_4_REG
    -            BACKUP_BUS_PMS_CONSTRAIN_4: mmio.Mmio(packed struct(u32) {
    -                reserved2: u2,
    -                ///  backup_bus_pms_constrain_usb_wrap
    -                BACKUP_BUS_PMS_CONSTRAIN_USB_WRAP: u2,
    -                ///  backup_bus_pms_constrain_crypto_peri
    -                BACKUP_BUS_PMS_CONSTRAIN_CRYPTO_PERI: u2,
    -                ///  backup_bus_pms_constrain_crypto_dma
    -                BACKUP_BUS_PMS_CONSTRAIN_CRYPTO_DMA: u2,
    -                ///  backup_bus_pms_constrain_apb_adc
    -                BACKUP_BUS_PMS_CONSTRAIN_APB_ADC: u2,
    -                reserved12: u2,
    -                ///  backup_bus_pms_constrain_bt_pwr
    -                BACKUP_BUS_PMS_CONSTRAIN_BT_PWR: u2,
    -                ///  backup_bus_pms_constrain_usb_device
    -                BACKUP_BUS_PMS_CONSTRAIN_USB_DEVICE: u2,
    -                padding: u16,
    -            }),
    -            ///  SENSITIVE_BACKUP_BUS_PMS_MONITOR_0_REG
    -            BACKUP_BUS_PMS_MONITOR_0: mmio.Mmio(packed struct(u32) {
    -                ///  backup_bus_pms_monitor_lock
    -                BACKUP_BUS_PMS_MONITOR_LOCK: u1,
    -                padding: u31,
    -            }),
    -            ///  SENSITIVE_BACKUP_BUS_PMS_MONITOR_1_REG
    -            BACKUP_BUS_PMS_MONITOR_1: mmio.Mmio(packed struct(u32) {
    -                ///  backup_bus_pms_monitor_violate_clr
    -                BACKUP_BUS_PMS_MONITOR_VIOLATE_CLR: u1,
    -                ///  backup_bus_pms_monitor_violate_en
    -                BACKUP_BUS_PMS_MONITOR_VIOLATE_EN: u1,
    -                padding: u30,
    -            }),
    -            ///  SENSITIVE_BACKUP_BUS_PMS_MONITOR_2_REG
    -            BACKUP_BUS_PMS_MONITOR_2: mmio.Mmio(packed struct(u32) {
    -                ///  backup_bus_pms_monitor_violate_intr
    -                BACKUP_BUS_PMS_MONITOR_VIOLATE_INTR: u1,
    -                ///  backup_bus_pms_monitor_violate_status_htrans
    -                BACKUP_BUS_PMS_MONITOR_VIOLATE_STATUS_HTRANS: u2,
    -                ///  backup_bus_pms_monitor_violate_status_hsize
    -                BACKUP_BUS_PMS_MONITOR_VIOLATE_STATUS_HSIZE: u3,
    -                ///  backup_bus_pms_monitor_violate_status_hwrite
    -                BACKUP_BUS_PMS_MONITOR_VIOLATE_STATUS_HWRITE: u1,
    -                padding: u25,
    -            }),
    -            ///  SENSITIVE_BACKUP_BUS_PMS_MONITOR_3_REG
    -            BACKUP_BUS_PMS_MONITOR_3: mmio.Mmio(packed struct(u32) {
    -                ///  backup_bus_pms_monitor_violate_haddr
    -                BACKUP_BUS_PMS_MONITOR_VIOLATE_HADDR: u32,
    -            }),
    -            ///  SENSITIVE_CLOCK_GATE_REG
    -            CLOCK_GATE: mmio.Mmio(packed struct(u32) {
    -                ///  clk_en
    -                CLK_EN: u1,
    -                padding: u31,
    -            }),
    -            reserved4092: [3720]u8,
    -            ///  SENSITIVE_DATE_REG
    -            DATE: mmio.Mmio(packed struct(u32) {
    -                ///  reg_date
    -                DATE: u28,
    -                padding: u4,
    -            }),
    -        };
    -
    -        ///  SHA (Secure Hash Algorithm) Accelerator
    -        pub const SHA = extern struct {
    -            ///  Initial configuration register.
    -            MODE: mmio.Mmio(packed struct(u32) {
    -                ///  Sha mode.
    -                MODE: u3,
    -                padding: u29,
    -            }),
    -            ///  SHA 512/t configuration register 0.
    -            T_STRING: mmio.Mmio(packed struct(u32) {
    -                ///  Sha t_string (used if and only if mode == SHA_512/t).
    -                T_STRING: u32,
    -            }),
    -            ///  SHA 512/t configuration register 1.
    -            T_LENGTH: mmio.Mmio(packed struct(u32) {
    -                ///  Sha t_length (used if and only if mode == SHA_512/t).
    -                T_LENGTH: u6,
    -                padding: u26,
    -            }),
    -            ///  DMA configuration register 0.
    -            DMA_BLOCK_NUM: mmio.Mmio(packed struct(u32) {
    -                ///  Dma-sha block number.
    -                DMA_BLOCK_NUM: u6,
    -                padding: u26,
    -            }),
    -            ///  Typical SHA configuration register 0.
    -            START: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Reserved.
    -                START: u31,
    -            }),
    -            ///  Typical SHA configuration register 1.
    -            CONTINUE: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Reserved.
    -                CONTINUE: u31,
    -            }),
    -            ///  Busy register.
    -            BUSY: mmio.Mmio(packed struct(u32) {
    -                ///  Sha busy state. 1'b0: idle. 1'b1: busy.
    -                STATE: u1,
    -                padding: u31,
    -            }),
    -            ///  DMA configuration register 1.
    -            DMA_START: mmio.Mmio(packed struct(u32) {
    -                ///  Start dma-sha.
    -                DMA_START: u1,
    -                padding: u31,
    -            }),
    -            ///  DMA configuration register 2.
    -            DMA_CONTINUE: mmio.Mmio(packed struct(u32) {
    -                ///  Continue dma-sha.
    -                DMA_CONTINUE: u1,
    -                padding: u31,
    -            }),
    -            ///  Interrupt clear register.
    -            CLEAR_IRQ: mmio.Mmio(packed struct(u32) {
    -                ///  Clear sha interrupt.
    -                CLEAR_INTERRUPT: u1,
    -                padding: u31,
    -            }),
    -            ///  Interrupt enable register.
    -            IRQ_ENA: mmio.Mmio(packed struct(u32) {
    -                ///  Sha interrupt enable register. 1'b0: disable(default). 1'b1: enable.
    -                INTERRUPT_ENA: u1,
    -                padding: u31,
    -            }),
    -            ///  Date register.
    -            DATE: mmio.Mmio(packed struct(u32) {
    -                ///  Sha date information/ sha version information.
    -                DATE: u30,
    -                padding: u2,
    -            }),
    -            reserved64: [16]u8,
    -            ///  Sha H memory which contains intermediate hash or finial hash.
    -            H_MEM: [64]u8,
    -            ///  Sha M memory which contains message.
    -            M_MEM: [64]u8,
    -        };
    -
    -        ///  SPI (Serial Peripheral Interface) Controller
    -        pub const SPI0 = extern struct {
    -            reserved8: [8]u8,
    -            ///  SPI0 control register.
    -            CTRL: mmio.Mmio(packed struct(u32) {
    -                reserved3: u3,
    -                ///  In the dummy phase the signal level of spi is output by the spi controller.
    -                FDUMMY_OUT: u1,
    -                reserved7: u3,
    -                ///  Apply 2 signals during command phase 1:enable 0: disable
    -                FCMD_DUAL: u1,
    -                ///  Apply 4 signals during command phase 1:enable 0: disable
    -                FCMD_QUAD: u1,
    -                reserved13: u4,
    -                ///  This bit enable the bits: spi_mem_fread_qio, spi_mem_fread_dio, spi_mem_fread_qout and spi_mem_fread_dout. 1: enable 0: disable.
    -                FASTRD_MODE: u1,
    -                ///  In the read operations, read-data phase apply 2 signals. 1: enable 0: disable.
    -                FREAD_DUAL: u1,
    -                reserved18: u3,
    -                ///  The bit is used to set MISO line polarity, 1: high 0, low
    -                Q_POL: u1,
    -                ///  The bit is used to set MOSI line polarity, 1: high 0, low
    -                D_POL: u1,
    -                ///  In the read operations read-data phase apply 4 signals. 1: enable 0: disable.
    -                FREAD_QUAD: u1,
    -                ///  Write protect signal output when SPI is idle. 1: output high, 0: output low.
    -                WP: u1,
    -                reserved23: u1,
    -                ///  In the read operations address phase and read-data phase apply 2 signals. 1: enable 0: disable.
    -                FREAD_DIO: u1,
    -                ///  In the read operations address phase and read-data phase apply 4 signals. 1: enable 0: disable.
    -                FREAD_QIO: u1,
    -                padding: u7,
    -            }),
    -            ///  SPI0 control1 register.
    -            CTRL1: mmio.Mmio(packed struct(u32) {
    -                ///  SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is alwasy on.
    -                CLK_MODE: u2,
    -                reserved30: u28,
    -                ///  SPI0 RX FIFO reset signal.
    -                RXFIFO_RST: u1,
    -                padding: u1,
    -            }),
    -            ///  SPI0 control2 register.
    -            CTRL2: mmio.Mmio(packed struct(u32) {
    -                ///  (cycles-1) of prepare phase by spi clock this bits are combined with spi_mem_cs_setup bit.
    -                CS_SETUP_TIME: u5,
    -                ///  Spi cs signal is delayed to inactive by spi clock this bits are combined with spi_mem_cs_hold bit.
    -                CS_HOLD_TIME: u5,
    -                reserved25: u15,
    -                ///  These bits are used to set the minimum CS high time tSHSL between SPI burst transfer when accesses to flash. tSHSL is (SPI_MEM_CS_HOLD_DELAY[5:0] + 1) MSPI core clock cycles.
    -                CS_HOLD_DELAY: u6,
    -                ///  The FSM will be reset.
    -                SYNC_RESET: u1,
    -            }),
    -            ///  SPI clock division control register.
    -            CLOCK: mmio.Mmio(packed struct(u32) {
    -                ///  In the master mode it must be equal to spi_mem_clkcnt_N.
    -                CLKCNT_L: u8,
    -                ///  In the master mode it must be floor((spi_mem_clkcnt_N+1)/2-1).
    -                CLKCNT_H: u8,
    -                ///  In the master mode it is the divider of spi_mem_clk. So spi_mem_clk frequency is system/(spi_mem_clkcnt_N+1)
    -                CLKCNT_N: u8,
    -                reserved31: u7,
    -                ///  Set this bit in 1-division mode.
    -                CLK_EQU_SYSCLK: u1,
    -            }),
    -            ///  SPI0 user register.
    -            USER: mmio.Mmio(packed struct(u32) {
    -                reserved6: u6,
    -                ///  spi cs keep low when spi is in done phase. 1: enable 0: disable.
    -                CS_HOLD: u1,
    -                ///  spi cs is enable when spi is in prepare phase. 1: enable 0: disable.
    -                CS_SETUP: u1,
    -                reserved9: u1,
    -                ///  the bit combined with spi_mem_mosi_delay_mode bits to set mosi signal delay mode.
    -                CK_OUT_EDGE: u1,
    -                reserved26: u16,
    -                ///  spi clock is disable in dummy phase when the bit is enable.
    -                USR_DUMMY_IDLE: u1,
    -                reserved29: u2,
    -                ///  This bit enable the dummy phase of an operation.
    -                USR_DUMMY: u1,
    -                padding: u2,
    -            }),
    -            ///  SPI0 user1 register.
    -            USER1: mmio.Mmio(packed struct(u32) {
    -                ///  The length in spi_mem_clk cycles of dummy phase. The register value shall be (cycle_num-1).
    -                USR_DUMMY_CYCLELEN: u6,
    -                reserved26: u20,
    -                ///  The length in bits of address phase. The register value shall be (bit_num-1).
    -                USR_ADDR_BITLEN: u6,
    -            }),
    -            ///  SPI0 user2 register.
    -            USER2: mmio.Mmio(packed struct(u32) {
    -                ///  The value of command.
    -                USR_COMMAND_VALUE: u16,
    -                reserved28: u12,
    -                ///  The length in bits of command phase. The register value shall be (bit_num-1)
    -                USR_COMMAND_BITLEN: u4,
    -            }),
    -            reserved44: [8]u8,
    -            ///  SPI0 read control register.
    -            RD_STATUS: mmio.Mmio(packed struct(u32) {
    -                reserved16: u16,
    -                ///  Mode bits in the flash fast read mode it is combined with spi_mem_fastrd_mode bit.
    -                WB_MODE: u8,
    -                padding: u8,
    -            }),
    -            reserved52: [4]u8,
    -            ///  SPI0 misc register
    -            MISC: mmio.Mmio(packed struct(u32) {
    -                reserved3: u3,
    -                ///  The bit is used to indicate the spi0_mst_st controlled transmitting is done.
    -                TRANS_END: u1,
    -                ///  The bit is used to enable the interrupt of spi0_mst_st controlled transmitting is done.
    -                TRANS_END_INT_ENA: u1,
    -                ///  The bit is used to indicate the spi0_slv_st controlled transmitting is done.
    -                CSPI_ST_TRANS_END: u1,
    -                ///  The bit is used to enable the interrupt of spi0_slv_st controlled transmitting is done.
    -                CSPI_ST_TRANS_END_INT_ENA: u1,
    -                reserved9: u2,
    -                ///  1: spi clk line is high when idle 0: spi clk line is low when idle
    -                CK_IDLE_EDGE: u1,
    -                ///  spi cs line keep low when the bit is set.
    -                CS_KEEP_ACTIVE: u1,
    -                padding: u21,
    -            }),
    -            reserved60: [4]u8,
    -            ///  SPI0 bit mode control register.
    -            CACHE_FCTRL: mmio.Mmio(packed struct(u32) {
    -                ///  For SPI0, Cache access enable, 1: enable, 0:disable.
    -                CACHE_REQ_EN: u1,
    -                ///  For SPI0, cache read flash with 4 bytes address, 1: enable, 0:disable.
    -                CACHE_USR_ADDR_4BYTE: u1,
    -                ///  For SPI0, cache read flash for user define command, 1: enable, 0:disable.
    -                CACHE_FLASH_USR_CMD: u1,
    -                ///  For SPI0 flash, din phase apply 2 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_dio.
    -                FDIN_DUAL: u1,
    -                ///  For SPI0 flash, dout phase apply 2 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_dio.
    -                FDOUT_DUAL: u1,
    -                ///  For SPI0 flash, address phase apply 2 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_dio.
    -                FADDR_DUAL: u1,
    -                ///  For SPI0 flash, din phase apply 4 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_qio.
    -                FDIN_QUAD: u1,
    -                ///  For SPI0 flash, dout phase apply 4 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_qio.
    -                FDOUT_QUAD: u1,
    -                ///  For SPI0 flash, address phase apply 4 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_qio.
    -                FADDR_QUAD: u1,
    -                padding: u23,
    -            }),
    -            reserved84: [20]u8,
    -            ///  SPI0 FSM status register
    -            FSM: mmio.Mmio(packed struct(u32) {
    -                ///  The current status of SPI0 slave FSM: spi0_slv_st. 0: idle state, 1: preparation state, 2: send command state, 3: send address state, 4: wait state, 5: read data state, 6:write data state, 7: done state, 8: read data end state.
    -                CSPI_ST: u4,
    -                ///  The current status of SPI0 master FSM: spi0_mst_st. 0: idle state, 1:EM_CACHE_GRANT , 2: program/erase suspend state, 3: SPI0 read data state, 4: wait cache/EDMA sent data is stored in SPI0 TX FIFO, 5: SPI0 write data state.
    -                EM_ST: u3,
    -                ///  The lock delay time of SPI0/1 arbiter by spi0_slv_st, after PER is sent by SPI1.
    -                CSPI_LOCK_DELAY_TIME: u5,
    -                padding: u20,
    -            }),
    -            reserved168: [80]u8,
    -            ///  SPI0 timing calibration register
    -            TIMING_CALI: mmio.Mmio(packed struct(u32) {
    -                ///  The bit is used to enable timing adjust clock for all reading operations.
    -                TIMING_CLK_ENA: u1,
    -                ///  The bit is used to enable timing auto-calibration for all reading operations.
    -                TIMING_CALI: u1,
    -                ///  add extra dummy spi clock cycle length for spi clock calibration.
    -                EXTRA_DUMMY_CYCLELEN: u3,
    -                padding: u27,
    -            }),
    -            ///  SPI0 input delay mode control register
    -            DIN_MODE: mmio.Mmio(packed struct(u32) {
    -                ///  the input signals are delayed by system clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input with the spi_clk high edge, 6: input with the spi_clk low edge
    -                DIN0_MODE: u2,
    -                ///  the input signals are delayed by system clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input with the spi_clk high edge, 6: input with the spi_clk low edge
    -                DIN1_MODE: u2,
    -                ///  the input signals are delayed by system clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input with the spi_clk high edge, 6: input with the spi_clk low edge
    -                DIN2_MODE: u2,
    -                ///  the input signals are delayed by system clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the posedge of clk_160, 4 input with the negedge of clk_160, 5: input with the spi_clk high edge, 6: input with the spi_clk low edge
    -                DIN3_MODE: u2,
    -                padding: u24,
    -            }),
    -            ///  SPI0 input delay number control register
    -            DIN_NUM: mmio.Mmio(packed struct(u32) {
    -                ///  the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...
    -                DIN0_NUM: u2,
    -                ///  the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...
    -                DIN1_NUM: u2,
    -                ///  the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...
    -                DIN2_NUM: u2,
    -                ///  the input signals are delayed by system clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,...
    -                DIN3_NUM: u2,
    -                padding: u24,
    -            }),
    -            ///  SPI0 output delay mode control register
    -            DOUT_MODE: mmio.Mmio(packed struct(u32) {
    -                ///  the output signals are delayed by system clock cycles, 0: output without delayed, 1: output with the posedge of clk_apb,2 output with the negedge of clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low edge
    -                DOUT0_MODE: u1,
    -                ///  the output signals are delayed by system clock cycles, 0: output without delayed, 1: output with the posedge of clk_apb,2 output with the negedge of clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low edge
    -                DOUT1_MODE: u1,
    -                ///  the output signals are delayed by system clock cycles, 0: output without delayed, 1: output with the posedge of clk_apb,2 output with the negedge of clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low edge
    -                DOUT2_MODE: u1,
    -                ///  the output signals are delayed by system clock cycles, 0: output without delayed, 1: output with the posedge of clk_apb,2 output with the negedge of clk_apb, 3: output with the posedge of clk_160,4 output with the negedge of clk_160,5: output with the spi_clk high edge ,6: output with the spi_clk low edge
    -                DOUT3_MODE: u1,
    -                padding: u28,
    -            }),
    -            reserved220: [36]u8,
    -            ///  SPI0 clk_gate register
    -            CLOCK_GATE: mmio.Mmio(packed struct(u32) {
    -                ///  Register clock gate enable signal. 1: Enable. 0: Disable.
    -                CLK_EN: u1,
    -                padding: u31,
    -            }),
    -            ///  SPI0 module clock select register
    -            CORE_CLK_SEL: mmio.Mmio(packed struct(u32) {
    -                ///  When the digital system clock selects PLL clock and the frequency of PLL clock is 480MHz, the value of reg_spi01_clk_sel: 0: SPI0/1 module clock (clk) is 80MHz. 1: SPI0/1 module clock (clk) is 120MHz. 2: SPI0/1 module clock (clk) 160MHz. 3: Not used. When the digital system clock selects PLL clock and the frequency of PLL clock is 320MHz, the value of reg_spi01_clk_sel: 0: SPI0/1 module clock (clk) is 80MHz. 1: SPI0/1 module clock (clk) is 80MHz. 2: SPI0/1 module clock (clk) 160MHz. 3: Not used.
    -                SPI01_CLK_SEL: u2,
    -                padding: u30,
    -            }),
    -            reserved1020: [792]u8,
    -            ///  Version control register
    -            DATE: mmio.Mmio(packed struct(u32) {
    -                ///  SPI register version.
    -                DATE: u28,
    -                padding: u4,
    -            }),
    -        };
    -
    -        ///  SPI (Serial Peripheral Interface) Controller
    -        pub const SPI1 = extern struct {
    -            ///  SPI1 memory command register
    -            CMD: mmio.Mmio(packed struct(u32) {
    -                ///  The current status of SPI1 master FSM.
    -                SPI1_MST_ST: u4,
    -                ///  The current status of SPI1 slave FSM: mspi_st. 0: idle state, 1: preparation state, 2: send command state, 3: send address state, 4: wait state, 5: read data state, 6:write data state, 7: done state, 8: read data end state.
    -                MSPI_ST: u4,
    -                reserved17: u9,
    -                ///  In user mode, it is set to indicate that program/erase operation will be triggered. The bit is combined with spi_mem_usr bit. The bit will be cleared once the operation done.1: enable 0: disable.
    -                FLASH_PE: u1,
    -                ///  User define command enable. An operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.
    -                USR: u1,
    -                ///  Drive Flash into high performance mode. The bit will be cleared once the operation done.1: enable 0: disable.
    -                FLASH_HPM: u1,
    -                ///  This bit combined with reg_resandres bit releases Flash from the power-down state or high performance mode and obtains the devices ID. The bit will be cleared once the operation done.1: enable 0: disable.
    -                FLASH_RES: u1,
    -                ///  Drive Flash into power down. An operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.
    -                FLASH_DP: u1,
    -                ///  Chip erase enable. Chip erase operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.
    -                FLASH_CE: u1,
    -                ///  Block erase enable(32KB) . Block erase operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.
    -                FLASH_BE: u1,
    -                ///  Sector erase enable(4KB). Sector erase operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.
    -                FLASH_SE: u1,
    -                ///  Page program enable(1 byte ~256 bytes data to be programmed). Page program operation will be triggered when the bit is set. The bit will be cleared once the operation done .1: enable 0: disable.
    -                FLASH_PP: u1,
    -                ///  Write status register enable. Write status operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.
    -                FLASH_WRSR: u1,
    -                ///  Read status register-1. Read status operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.
    -                FLASH_RDSR: u1,
    -                ///  Read JEDEC ID . Read ID command will be sent when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.
    -                FLASH_RDID: u1,
    -                ///  Write flash disable. Write disable command will be sent when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.
    -                FLASH_WRDI: u1,
    -                ///  Write flash enable. Write enable command will be sent when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.
    -                FLASH_WREN: u1,
    -                ///  Read flash enable. Read flash operation will be triggered when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.
    -                FLASH_READ: u1,
    -            }),
    -            ///  SPI1 address register
    -            ADDR: mmio.Mmio(packed struct(u32) {
    -                ///  In user mode, it is the memory address. other then the bit0-bit23 is the memory address, the bit24-bit31 are the byte length of a transfer.
    -                USR_ADDR_VALUE: u32,
    -            }),
    -            ///  SPI1 control register.
    -            CTRL: mmio.Mmio(packed struct(u32) {
    -                reserved3: u3,
    -                ///  In the dummy phase the signal level of spi is output by the spi controller.
    -                FDUMMY_OUT: u1,
    -                reserved7: u3,
    -                ///  Apply 2 signals during command phase 1:enable 0: disable
    -                FCMD_DUAL: u1,
    -                ///  Apply 4 signals during command phase 1:enable 0: disable
    -                FCMD_QUAD: u1,
    -                reserved10: u1,
    -                ///  For SPI1, initialize crc32 module before writing encrypted data to flash. Active low.
    -                FCS_CRC_EN: u1,
    -                ///  For SPI1, enable crc32 when writing encrypted data to flash. 1: enable 0:disable
    -                TX_CRC_EN: u1,
    -                reserved13: u1,
    -                ///  This bit enable the bits: spi_mem_fread_qio, spi_mem_fread_dio, spi_mem_fread_qout and spi_mem_fread_dout. 1: enable 0: disable.
    -                FASTRD_MODE: u1,
    -                ///  In the read operations, read-data phase apply 2 signals. 1: enable 0: disable.
    -                FREAD_DUAL: u1,
    -                ///  The Device ID is read out to SPI_MEM_RD_STATUS register, this bit combine with spi_mem_flash_res bit. 1: enable 0: disable.
    -                RESANDRES: u1,
    -                reserved18: u2,
    -                ///  The bit is used to set MISO line polarity, 1: high 0, low
    -                Q_POL: u1,
    -                ///  The bit is used to set MOSI line polarity, 1: high 0, low
    -                D_POL: u1,
    -                ///  In the read operations read-data phase apply 4 signals. 1: enable 0: disable.
    -                FREAD_QUAD: u1,
    -                ///  Write protect signal output when SPI is idle. 1: output high, 0: output low.
    -                WP: u1,
    -                ///  two bytes data will be written to status register when it is set. 1: enable 0: disable.
    -                WRSR_2B: u1,
    -                ///  In the read operations address phase and read-data phase apply 2 signals. 1: enable 0: disable.
    -                FREAD_DIO: u1,
    -                ///  In the read operations address phase and read-data phase apply 4 signals. 1: enable 0: disable.
    -                FREAD_QIO: u1,
    -                padding: u7,
    -            }),
    -            ///  SPI1 control1 register.
    -            CTRL1: mmio.Mmio(packed struct(u32) {
    -                ///  SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is alwasy on.
    -                CLK_MODE: u2,
    -                ///  After RES/DP/HPM command is sent, SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 512) SPI_CLK cycles.
    -                CS_HOLD_DLY_RES: u10,
    -                padding: u20,
    -            }),
    -            ///  SPI1 control2 register.
    -            CTRL2: mmio.Mmio(packed struct(u32) {
    -                reserved31: u31,
    -                ///  The FSM will be reset.
    -                SYNC_RESET: u1,
    -            }),
    -            ///  SPI1 clock division control register.
    -            CLOCK: mmio.Mmio(packed struct(u32) {
    -                ///  In the master mode it must be equal to spi_mem_clkcnt_N.
    -                CLKCNT_L: u8,
    -                ///  In the master mode it must be floor((spi_mem_clkcnt_N+1)/2-1).
    -                CLKCNT_H: u8,
    -                ///  In the master mode it is the divider of spi_mem_clk. So spi_mem_clk frequency is system/(spi_mem_clkcnt_N+1)
    -                CLKCNT_N: u8,
    -                reserved31: u7,
    -                ///  reserved
    -                CLK_EQU_SYSCLK: u1,
    -            }),
    -            ///  SPI1 user register.
    -            USER: mmio.Mmio(packed struct(u32) {
    -                reserved9: u9,
    -                ///  the bit combined with spi_mem_mosi_delay_mode bits to set mosi signal delay mode.
    -                CK_OUT_EDGE: u1,
    -                reserved12: u2,
    -                ///  In the write operations read-data phase apply 2 signals
    -                FWRITE_DUAL: u1,
    -                ///  In the write operations read-data phase apply 4 signals
    -                FWRITE_QUAD: u1,
    -                ///  In the write operations address phase and read-data phase apply 2 signals.
    -                FWRITE_DIO: u1,
    -                ///  In the write operations address phase and read-data phase apply 4 signals.
    -                FWRITE_QIO: u1,
    -                reserved24: u8,
    -                ///  read-data phase only access to high-part of the buffer spi_mem_w8~spi_mem_w15. 1: enable 0: disable.
    -                USR_MISO_HIGHPART: u1,
    -                ///  write-data phase only access to high-part of the buffer spi_mem_w8~spi_mem_w15. 1: enable 0: disable.
    -                USR_MOSI_HIGHPART: u1,
    -                ///  SPI clock is disable in dummy phase when the bit is enable.
    -                USR_DUMMY_IDLE: u1,
    -                ///  This bit enable the write-data phase of an operation.
    -                USR_MOSI: u1,
    -                ///  This bit enable the read-data phase of an operation.
    -                USR_MISO: u1,
    -                ///  This bit enable the dummy phase of an operation.
    -                USR_DUMMY: u1,
    -                ///  This bit enable the address phase of an operation.
    -                USR_ADDR: u1,
    -                ///  This bit enable the command phase of an operation.
    -                USR_COMMAND: u1,
    -            }),
    -            ///  SPI1 user1 register.
    -            USER1: mmio.Mmio(packed struct(u32) {
    -                ///  The length in spi_mem_clk cycles of dummy phase. The register value shall be (cycle_num-1).
    -                USR_DUMMY_CYCLELEN: u6,
    -                reserved26: u20,
    -                ///  The length in bits of address phase. The register value shall be (bit_num-1).
    -                USR_ADDR_BITLEN: u6,
    -            }),
    -            ///  SPI1 user2 register.
    -            USER2: mmio.Mmio(packed struct(u32) {
    -                ///  The value of command.
    -                USR_COMMAND_VALUE: u16,
    -                reserved28: u12,
    -                ///  The length in bits of command phase. The register value shall be (bit_num-1)
    -                USR_COMMAND_BITLEN: u4,
    -            }),
    -            ///  SPI1 send data bit length control register.
    -            MOSI_DLEN: mmio.Mmio(packed struct(u32) {
    -                ///  The length in bits of write-data. The register value shall be (bit_num-1).
    -                USR_MOSI_DBITLEN: u10,
    -                padding: u22,
    -            }),
    -            ///  SPI1 receive data bit length control register.
    -            MISO_DLEN: mmio.Mmio(packed struct(u32) {
    -                ///  The length in bits of read-data. The register value shall be (bit_num-1).
    -                USR_MISO_DBITLEN: u10,
    -                padding: u22,
    -            }),
    -            ///  SPI1 status register.
    -            RD_STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  The value is stored when set spi_mem_flash_rdsr bit and spi_mem_flash_res bit.
    -                STATUS: u16,
    -                ///  Mode bits in the flash fast read mode it is combined with spi_mem_fastrd_mode bit.
    -                WB_MODE: u8,
    -                padding: u8,
    -            }),
    -            reserved52: [4]u8,
    -            ///  SPI1 misc register
    -            MISC: mmio.Mmio(packed struct(u32) {
    -                ///  SPI_CS0 pin enable, 1: disable SPI_CS0, 0: SPI_CS0 pin is active to select SPI device, such as flash, external RAM and so on.
    -                CS0_DIS: u1,
    -                ///  SPI_CS1 pin enable, 1: disable SPI_CS1, 0: SPI_CS1 pin is active to select SPI device, such as flash, external RAM and so on.
    -                CS1_DIS: u1,
    -                reserved9: u7,
    -                ///  1: spi clk line is high when idle 0: spi clk line is low when idle
    -                CK_IDLE_EDGE: u1,
    -                ///  spi cs line keep low when the bit is set.
    -                CS_KEEP_ACTIVE: u1,
    -                padding: u21,
    -            }),
    -            ///  SPI1 TX CRC data register.
    -            TX_CRC: mmio.Mmio(packed struct(u32) {
    -                ///  For SPI1, the value of crc32.
    -                DATA: u32,
    -            }),
    -            ///  SPI1 bit mode control register.
    -            CACHE_FCTRL: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  For SPI1, cache read flash with 4 bytes address, 1: enable, 0:disable.
    -                CACHE_USR_ADDR_4BYTE: u1,
    -                reserved3: u1,
    -                ///  For SPI1, din phase apply 2 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_dio.
    -                FDIN_DUAL: u1,
    -                ///  For SPI1, dout phase apply 2 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_dio.
    -                FDOUT_DUAL: u1,
    -                ///  For SPI1, address phase apply 2 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_dio.
    -                FADDR_DUAL: u1,
    -                ///  For SPI1, din phase apply 4 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_qio.
    -                FDIN_QUAD: u1,
    -                ///  For SPI1, dout phase apply 4 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_qio.
    -                FDOUT_QUAD: u1,
    -                ///  For SPI1, address phase apply 4 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_qio.
    -                FADDR_QUAD: u1,
    -                padding: u23,
    -            }),
    -            reserved88: [24]u8,
    -            ///  SPI1 memory data buffer0
    -            W0: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF0: u32,
    -            }),
    -            ///  SPI1 memory data buffer1
    -            W1: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF1: u32,
    -            }),
    -            ///  SPI1 memory data buffer2
    -            W2: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF2: u32,
    -            }),
    -            ///  SPI1 memory data buffer3
    -            W3: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF3: u32,
    -            }),
    -            ///  SPI1 memory data buffer4
    -            W4: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF4: u32,
    -            }),
    -            ///  SPI1 memory data buffer5
    -            W5: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF5: u32,
    -            }),
    -            ///  SPI1 memory data buffer6
    -            W6: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF6: u32,
    -            }),
    -            ///  SPI1 memory data buffer7
    -            W7: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF7: u32,
    -            }),
    -            ///  SPI1 memory data buffer8
    -            W8: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF8: u32,
    -            }),
    -            ///  SPI1 memory data buffer9
    -            W9: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF9: u32,
    -            }),
    -            ///  SPI1 memory data buffer10
    -            W10: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF10: u32,
    -            }),
    -            ///  SPI1 memory data buffer11
    -            W11: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF11: u32,
    -            }),
    -            ///  SPI1 memory data buffer12
    -            W12: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF12: u32,
    -            }),
    -            ///  SPI1 memory data buffer13
    -            W13: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF13: u32,
    -            }),
    -            ///  SPI1 memory data buffer14
    -            W14: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF14: u32,
    -            }),
    -            ///  SPI1 memory data buffer15
    -            W15: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF15: u32,
    -            }),
    -            ///  SPI1 wait idle control register
    -            FLASH_WAITI_CTRL: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  The dummy phase enable when wait flash idle (RDSR)
    -                WAITI_DUMMY: u1,
    -                ///  The command to wait flash idle(RDSR).
    -                WAITI_CMD: u8,
    -                ///  The dummy cycle length when wait flash idle(RDSR).
    -                WAITI_DUMMY_CYCLELEN: u6,
    -                padding: u16,
    -            }),
    -            ///  SPI1 flash suspend control register
    -            FLASH_SUS_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  program erase resume bit, program erase suspend operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.
    -                FLASH_PER: u1,
    -                ///  program erase suspend bit, program erase suspend operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.
    -                FLASH_PES: u1,
    -                ///  1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4 or *128) SPI_CLK cycles after program erase resume command is sent. 0: SPI1 does not wait after program erase resume command is sent.
    -                FLASH_PER_WAIT_EN: u1,
    -                ///  1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4 or *128) SPI_CLK cycles after program erase suspend command is sent. 0: SPI1 does not wait after program erase suspend command is sent.
    -                FLASH_PES_WAIT_EN: u1,
    -                ///  Set this bit to enable PES end triggers PER transfer option. If this bit is 0, application should send PER after PES is done.
    -                PES_PER_EN: u1,
    -                ///  Set this bit to enable Auto-suspending function.
    -                FLASH_PES_EN: u1,
    -                ///  The mask value when check SUS/SUS1/SUS2 status bit. If the read status value is status_in[15:0](only status_in[7:0] is valid when only one byte of data is read out, status_in[15:0] is valid when two bytes of data are read out), SUS/SUS1/SUS2 = status_in[15:0]^ SPI_MEM_PESR_END_MSK[15:0].
    -                PESR_END_MSK: u16,
    -                ///  1: Read two bytes when check flash SUS/SUS1/SUS2 status bit. 0: Read one byte when check flash SUS/SUS1/SUS2 status bit
    -                RD_SUS_2B: u1,
    -                ///  1: Both WIP and SUS/SUS1/SUS2 bits should be checked to insure the resume status of flash. 0: Only need to check WIP is 0.
    -                PER_END_EN: u1,
    -                ///  1: Both WIP and SUS/SUS1/SUS2 bits should be checked to insure the suspend status of flash. 0: Only need to check WIP is 0.
    -                PES_END_EN: u1,
    -                ///  When SPI1 checks SUS/SUS1/SUS2 bits fail for SPI_MEM_SUS_TIMEOUT_CNT[6:0] times, it will be treated as check pass.
    -                SUS_TIMEOUT_CNT: u7,
    -            }),
    -            ///  SPI1 flash suspend command register
    -            FLASH_SUS_CMD: mmio.Mmio(packed struct(u32) {
    -                ///  Program/Erase resume command.
    -                FLASH_PER_COMMAND: u8,
    -                ///  Program/Erase suspend command.
    -                FLASH_PES_COMMAND: u8,
    -                ///  Flash SUS/SUS1/SUS2 status bit read command. The command should be sent when SUS/SUS1/SUS2 bit should be checked to insure the suspend or resume status of flash.
    -                WAIT_PESR_COMMAND: u16,
    -            }),
    -            ///  SPI1 flash suspend status register
    -            SUS_STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  The status of flash suspend, only used in SPI1.
    -                FLASH_SUS: u1,
    -                ///  1: SPI1 sends out SPI_MEM_WAIT_PESR_COMMAND[15:0] to check SUS/SUS1/SUS2 bit. 0: SPI1 sends out SPI_MEM_WAIT_PESR_COMMAND[7:0] to check SUS/SUS1/SUS2 bit.
    -                WAIT_PESR_CMD_2B: u1,
    -                ///  1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after HPM command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after HPM command is sent.
    -                FLASH_HPM_DLY_128: u1,
    -                ///  1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after RES command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after RES command is sent.
    -                FLASH_RES_DLY_128: u1,
    -                ///  1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after DP command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after DP command is sent.
    -                FLASH_DP_DLY_128: u1,
    -                ///  Valid when SPI_MEM_FLASH_PER_WAIT_EN is 1. 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after PER command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after PER command is sent.
    -                FLASH_PER_DLY_128: u1,
    -                ///  Valid when SPI_MEM_FLASH_PES_WAIT_EN is 1. 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after PES command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after PES command is sent.
    -                FLASH_PES_DLY_128: u1,
    -                ///  1: Enable SPI0 lock SPI0/1 arbiter option. 0: Disable it.
    -                SPI0_LOCK_EN: u1,
    -                padding: u24,
    -            }),
    -            ///  SPI1 timing control register
    -            TIMING_CALI: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  The bit is used to enable timing auto-calibration for all reading operations.
    -                TIMING_CALI: u1,
    -                ///  add extra dummy spi clock cycle length for spi clock calibration.
    -                EXTRA_DUMMY_CYCLELEN: u3,
    -                padding: u27,
    -            }),
    -            reserved192: [20]u8,
    -            ///  SPI1 interrupt enable register
    -            INT_ENA: mmio.Mmio(packed struct(u32) {
    -                ///  The enable bit for SPI_MEM_PER_END_INT interrupt.
    -                PER_END_INT_ENA: u1,
    -                ///  The enable bit for SPI_MEM_PES_END_INT interrupt.
    -                PES_END_INT_ENA: u1,
    -                ///  The enable bit for SPI_MEM_WPE_END_INT interrupt.
    -                WPE_END_INT_ENA: u1,
    -                ///  The enable bit for SPI_MEM_SLV_ST_END_INT interrupt.
    -                SLV_ST_END_INT_ENA: u1,
    -                ///  The enable bit for SPI_MEM_MST_ST_END_INT interrupt.
    -                MST_ST_END_INT_ENA: u1,
    -                padding: u27,
    -            }),
    -            ///  SPI1 interrupt clear register
    -            INT_CLR: mmio.Mmio(packed struct(u32) {
    -                ///  The clear bit for SPI_MEM_PER_END_INT interrupt.
    -                PER_END_INT_CLR: u1,
    -                ///  The clear bit for SPI_MEM_PES_END_INT interrupt.
    -                PES_END_INT_CLR: u1,
    -                ///  The clear bit for SPI_MEM_WPE_END_INT interrupt.
    -                WPE_END_INT_CLR: u1,
    -                ///  The clear bit for SPI_MEM_SLV_ST_END_INT interrupt.
    -                SLV_ST_END_INT_CLR: u1,
    -                ///  The clear bit for SPI_MEM_MST_ST_END_INT interrupt.
    -                MST_ST_END_INT_CLR: u1,
    -                padding: u27,
    -            }),
    -            ///  SPI1 interrupt raw register
    -            INT_RAW: mmio.Mmio(packed struct(u32) {
    -                ///  The raw bit for SPI_MEM_PER_END_INT interrupt. 1: Triggered when Auto Resume command (0x7A) is sent and flash is resumed. 0: Others.
    -                PER_END_INT_RAW: u1,
    -                ///  The raw bit for SPI_MEM_PES_END_INT interrupt.1: Triggered when Auto Suspend command (0x75) is sent and flash is suspended. 0: Others.
    -                PES_END_INT_RAW: u1,
    -                ///  The raw bit for SPI_MEM_WPE_END_INT interrupt. 1: Triggered when WRSR/PP/SE/BE/CE is sent and flash is already idle. 0: Others.
    -                WPE_END_INT_RAW: u1,
    -                ///  The raw bit for SPI_MEM_SLV_ST_END_INT interrupt. 1: Triggered when spi1_slv_st is changed from non idle state to idle state. It means that SPI_CS raises high. 0: Others
    -                SLV_ST_END_INT_RAW: u1,
    -                ///  The raw bit for SPI_MEM_MST_ST_END_INT interrupt. 1: Triggered when spi1_mst_st is changed from non idle state to idle state. 0: Others.
    -                MST_ST_END_INT_RAW: u1,
    -                padding: u27,
    -            }),
    -            ///  SPI1 interrupt status register
    -            INT_ST: mmio.Mmio(packed struct(u32) {
    -                ///  The status bit for SPI_MEM_PER_END_INT interrupt.
    -                PER_END_INT_ST: u1,
    -                ///  The status bit for SPI_MEM_PES_END_INT interrupt.
    -                PES_END_INT_ST: u1,
    -                ///  The status bit for SPI_MEM_WPE_END_INT interrupt.
    -                WPE_END_INT_ST: u1,
    -                ///  The status bit for SPI_MEM_SLV_ST_END_INT interrupt.
    -                SLV_ST_END_INT_ST: u1,
    -                ///  The status bit for SPI_MEM_MST_ST_END_INT interrupt.
    -                MST_ST_END_INT_ST: u1,
    -                padding: u27,
    -            }),
    -            reserved220: [12]u8,
    -            ///  SPI1 clk_gate register
    -            CLOCK_GATE: mmio.Mmio(packed struct(u32) {
    -                ///  Register clock gate enable signal. 1: Enable. 0: Disable.
    -                CLK_EN: u1,
    -                padding: u31,
    -            }),
    -            reserved1020: [796]u8,
    -            ///  Version control register
    -            DATE: mmio.Mmio(packed struct(u32) {
    -                ///  Version control register
    -                DATE: u28,
    -                padding: u4,
    -            }),
    -        };
    -
    -        ///  SPI (Serial Peripheral Interface) Controller
    -        pub const SPI2 = extern struct {
    -            ///  Command control register
    -            CMD: mmio.Mmio(packed struct(u32) {
    -                ///  Define the APB cycles of SPI_CONF state. Can be configured in CONF state.
    -                CONF_BITLEN: u18,
    -                reserved23: u5,
    -                ///  Set this bit to synchronize SPI registers from APB clock domain into SPI module clock domain, which is only used in SPI master mode.
    -                UPDATE: u1,
    -                ///  User define command enable. An operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable. Can not be changed by CONF_buf.
    -                USR: u1,
    -                padding: u7,
    -            }),
    -            ///  Address value register
    -            ADDR: mmio.Mmio(packed struct(u32) {
    -                ///  Address to slave. Can be configured in CONF state.
    -                USR_ADDR_VALUE: u32,
    -            }),
    -            ///  SPI control register
    -            CTRL: mmio.Mmio(packed struct(u32) {
    -                reserved3: u3,
    -                ///  In the dummy phase the signal level of spi is output by the spi controller. Can be configured in CONF state.
    -                DUMMY_OUT: u1,
    -                reserved5: u1,
    -                ///  Apply 2 signals during addr phase 1:enable 0: disable. Can be configured in CONF state.
    -                FADDR_DUAL: u1,
    -                ///  Apply 4 signals during addr phase 1:enable 0: disable. Can be configured in CONF state.
    -                FADDR_QUAD: u1,
    -                reserved8: u1,
    -                ///  Apply 2 signals during command phase 1:enable 0: disable. Can be configured in CONF state.
    -                FCMD_DUAL: u1,
    -                ///  Apply 4 signals during command phase 1:enable 0: disable. Can be configured in CONF state.
    -                FCMD_QUAD: u1,
    -                reserved14: u4,
    -                ///  In the read operations, read-data phase apply 2 signals. 1: enable 0: disable. Can be configured in CONF state.
    -                FREAD_DUAL: u1,
    -                ///  In the read operations read-data phase apply 4 signals. 1: enable 0: disable. Can be configured in CONF state.
    -                FREAD_QUAD: u1,
    -                reserved18: u2,
    -                ///  The bit is used to set MISO line polarity, 1: high 0, low. Can be configured in CONF state.
    -                Q_POL: u1,
    -                ///  The bit is used to set MOSI line polarity, 1: high 0, low. Can be configured in CONF state.
    -                D_POL: u1,
    -                ///  SPI_HOLD output value when SPI is idle. 1: output high, 0: output low. Can be configured in CONF state.
    -                HOLD_POL: u1,
    -                ///  Write protect signal output when SPI is idle. 1: output high, 0: output low. Can be configured in CONF state.
    -                WP_POL: u1,
    -                reserved25: u3,
    -                ///  In read-data (MISO) phase 1: LSB first 0: MSB first. Can be configured in CONF state.
    -                RD_BIT_ORDER: u1,
    -                ///  In command address write-data (MOSI) phases 1: LSB firs 0: MSB first. Can be configured in CONF state.
    -                WR_BIT_ORDER: u1,
    -                padding: u5,
    -            }),
    -            ///  SPI clock control register
    -            CLOCK: mmio.Mmio(packed struct(u32) {
    -                ///  In the master mode it must be equal to spi_clkcnt_N. In the slave mode it must be 0. Can be configured in CONF state.
    -                CLKCNT_L: u6,
    -                ///  In the master mode it must be floor((spi_clkcnt_N+1)/2-1). In the slave mode it must be 0. Can be configured in CONF state.
    -                CLKCNT_H: u6,
    -                ///  In the master mode it is the divider of spi_clk. So spi_clk frequency is system/(spi_clkdiv_pre+1)/(spi_clkcnt_N+1). Can be configured in CONF state.
    -                CLKCNT_N: u6,
    -                ///  In the master mode it is pre-divider of spi_clk. Can be configured in CONF state.
    -                CLKDIV_PRE: u4,
    -                reserved31: u9,
    -                ///  In the master mode 1: spi_clk is eqaul to system 0: spi_clk is divided from system clock. Can be configured in CONF state.
    -                CLK_EQU_SYSCLK: u1,
    -            }),
    -            ///  SPI USER control register
    -            USER: mmio.Mmio(packed struct(u32) {
    -                ///  Set the bit to enable full duplex communication. 1: enable 0: disable. Can be configured in CONF state.
    -                DOUTDIN: u1,
    -                reserved3: u2,
    -                ///  Both for master mode and slave mode. 1: spi controller is in QPI mode. 0: others. Can be configured in CONF state.
    -                QPI_MODE: u1,
    -                reserved5: u1,
    -                ///  In the slave mode, this bit can be used to change the polarity of tsck. 0: tsck = spi_ck_i. 1:tsck = !spi_ck_i.
    -                TSCK_I_EDGE: u1,
    -                ///  spi cs keep low when spi is in done phase. 1: enable 0: disable. Can be configured in CONF state.
    -                CS_HOLD: u1,
    -                ///  spi cs is enable when spi is in prepare phase. 1: enable 0: disable. Can be configured in CONF state.
    -                CS_SETUP: u1,
    -                ///  In the slave mode, this bit can be used to change the polarity of rsck. 0: rsck = !spi_ck_i. 1:rsck = spi_ck_i.
    -                RSCK_I_EDGE: u1,
    -                ///  the bit combined with spi_mosi_delay_mode bits to set mosi signal delay mode. Can be configured in CONF state.
    -                CK_OUT_EDGE: u1,
    -                reserved12: u2,
    -                ///  In the write operations read-data phase apply 2 signals. Can be configured in CONF state.
    -                FWRITE_DUAL: u1,
    -                ///  In the write operations read-data phase apply 4 signals. Can be configured in CONF state.
    -                FWRITE_QUAD: u1,
    -                reserved15: u1,
    -                ///  1: Enable the DMA CONF phase of next seg-trans operation, which means seg-trans will continue. 0: The seg-trans will end after the current SPI seg-trans or this is not seg-trans mode. Can be configured in CONF state.
    -                USR_CONF_NXT: u1,
    -                reserved17: u1,
    -                ///  Set the bit to enable 3-line half duplex communication mosi and miso signals share the same pin. 1: enable 0: disable. Can be configured in CONF state.
    -                SIO: u1,
    -                reserved24: u6,
    -                ///  read-data phase only access to high-part of the buffer spi_w8~spi_w15. 1: enable 0: disable. Can be configured in CONF state.
    -                USR_MISO_HIGHPART: u1,
    -                ///  write-data phase only access to high-part of the buffer spi_w8~spi_w15. 1: enable 0: disable. Can be configured in CONF state.
    -                USR_MOSI_HIGHPART: u1,
    -                ///  spi clock is disable in dummy phase when the bit is enable. Can be configured in CONF state.
    -                USR_DUMMY_IDLE: u1,
    -                ///  This bit enable the write-data phase of an operation. Can be configured in CONF state.
    -                USR_MOSI: u1,
    -                ///  This bit enable the read-data phase of an operation. Can be configured in CONF state.
    -                USR_MISO: u1,
    -                ///  This bit enable the dummy phase of an operation. Can be configured in CONF state.
    -                USR_DUMMY: u1,
    -                ///  This bit enable the address phase of an operation. Can be configured in CONF state.
    -                USR_ADDR: u1,
    -                ///  This bit enable the command phase of an operation. Can be configured in CONF state.
    -                USR_COMMAND: u1,
    -            }),
    -            ///  SPI USER control register 1
    -            USER1: mmio.Mmio(packed struct(u32) {
    -                ///  The length in spi_clk cycles of dummy phase. The register value shall be (cycle_num-1). Can be configured in CONF state.
    -                USR_DUMMY_CYCLELEN: u8,
    -                reserved16: u8,
    -                ///  1: SPI transfer is ended when SPI RX AFIFO wfull error is valid in GP-SPI master FD/HD-mode. 0: SPI transfer is not ended when SPI RX AFIFO wfull error is valid in GP-SPI master FD/HD-mode.
    -                MST_WFULL_ERR_END_EN: u1,
    -                ///  (cycles+1) of prepare phase by spi clock this bits are combined with spi_cs_setup bit. Can be configured in CONF state.
    -                CS_SETUP_TIME: u5,
    -                ///  delay cycles of cs pin by spi clock this bits are combined with spi_cs_hold bit. Can be configured in CONF state.
    -                CS_HOLD_TIME: u5,
    -                ///  The length in bits of address phase. The register value shall be (bit_num-1). Can be configured in CONF state.
    -                USR_ADDR_BITLEN: u5,
    -            }),
    -            ///  SPI USER control register 2
    -            USER2: mmio.Mmio(packed struct(u32) {
    -                ///  The value of command. Can be configured in CONF state.
    -                USR_COMMAND_VALUE: u16,
    -                reserved27: u11,
    -                ///  1: SPI transfer is ended when SPI TX AFIFO read empty error is valid in GP-SPI master FD/HD-mode. 0: SPI transfer is not ended when SPI TX AFIFO read empty error is valid in GP-SPI master FD/HD-mode.
    -                MST_REMPTY_ERR_END_EN: u1,
    -                ///  The length in bits of command phase. The register value shall be (bit_num-1). Can be configured in CONF state.
    -                USR_COMMAND_BITLEN: u4,
    -            }),
    -            ///  SPI data bit length control register
    -            MS_DLEN: mmio.Mmio(packed struct(u32) {
    -                ///  The value of these bits is the configured SPI transmission data bit length in master mode DMA controlled transfer or CPU controlled transfer. The value is also the configured bit length in slave mode DMA RX controlled transfer. The register value shall be (bit_num-1). Can be configured in CONF state.
    -                MS_DATA_BITLEN: u18,
    -                padding: u14,
    -            }),
    -            ///  SPI misc register
    -            MISC: mmio.Mmio(packed struct(u32) {
    -                ///  SPI CS0 pin enable, 1: disable CS0, 0: spi_cs0 signal is from/to CS0 pin. Can be configured in CONF state.
    -                CS0_DIS: u1,
    -                ///  SPI CS1 pin enable, 1: disable CS1, 0: spi_cs1 signal is from/to CS1 pin. Can be configured in CONF state.
    -                CS1_DIS: u1,
    -                ///  SPI CS2 pin enable, 1: disable CS2, 0: spi_cs2 signal is from/to CS2 pin. Can be configured in CONF state.
    -                CS2_DIS: u1,
    -                ///  SPI CS3 pin enable, 1: disable CS3, 0: spi_cs3 signal is from/to CS3 pin. Can be configured in CONF state.
    -                CS3_DIS: u1,
    -                ///  SPI CS4 pin enable, 1: disable CS4, 0: spi_cs4 signal is from/to CS4 pin. Can be configured in CONF state.
    -                CS4_DIS: u1,
    -                ///  SPI CS5 pin enable, 1: disable CS5, 0: spi_cs5 signal is from/to CS5 pin. Can be configured in CONF state.
    -                CS5_DIS: u1,
    -                ///  1: spi clk out disable, 0: spi clk out enable. Can be configured in CONF state.
    -                CK_DIS: u1,
    -                ///  In the master mode the bits are the polarity of spi cs line, the value is equivalent to spi_cs ^ spi_master_cs_pol. Can be configured in CONF state.
    -                MASTER_CS_POL: u6,
    -                reserved23: u10,
    -                ///  spi slave input cs polarity select. 1: inv 0: not change. Can be configured in CONF state.
    -                SLAVE_CS_POL: u1,
    -                reserved29: u5,
    -                ///  1: spi clk line is high when idle 0: spi clk line is low when idle. Can be configured in CONF state.
    -                CK_IDLE_EDGE: u1,
    -                ///  spi cs line keep low when the bit is set. Can be configured in CONF state.
    -                CS_KEEP_ACTIVE: u1,
    -                ///  1: spi quad input swap enable 0: spi quad input swap disable. Can be configured in CONF state.
    -                QUAD_DIN_PIN_SWAP: u1,
    -            }),
    -            ///  SPI input delay mode configuration
    -            DIN_MODE: mmio.Mmio(packed struct(u32) {
    -                ///  the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state.
    -                DIN0_MODE: u2,
    -                ///  the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state.
    -                DIN1_MODE: u2,
    -                ///  the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state.
    -                DIN2_MODE: u2,
    -                ///  the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state.
    -                DIN3_MODE: u2,
    -                reserved16: u8,
    -                ///  1:enable hclk in SPI input timing module. 0: disable it. Can be configured in CONF state.
    -                TIMING_HCLK_ACTIVE: u1,
    -                padding: u15,
    -            }),
    -            ///  SPI input delay number configuration
    -            DIN_NUM: mmio.Mmio(packed struct(u32) {
    -                ///  the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,... Can be configured in CONF state.
    -                DIN0_NUM: u2,
    -                ///  the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,... Can be configured in CONF state.
    -                DIN1_NUM: u2,
    -                ///  the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,... Can be configured in CONF state.
    -                DIN2_NUM: u2,
    -                ///  the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,... Can be configured in CONF state.
    -                DIN3_NUM: u2,
    -                padding: u24,
    -            }),
    -            ///  SPI output delay mode configuration
    -            DOUT_MODE: mmio.Mmio(packed struct(u32) {
    -                ///  The output signal 0 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state.
    -                DOUT0_MODE: u1,
    -                ///  The output signal 1 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state.
    -                DOUT1_MODE: u1,
    -                ///  The output signal 2 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state.
    -                DOUT2_MODE: u1,
    -                ///  The output signal 3 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state.
    -                DOUT3_MODE: u1,
    -                padding: u28,
    -            }),
    -            ///  SPI DMA control register
    -            DMA_CONF: mmio.Mmio(packed struct(u32) {
    -                reserved18: u18,
    -                ///  Enable dma segment transfer in spi dma half slave mode. 1: enable. 0: disable.
    -                DMA_SLV_SEG_TRANS_EN: u1,
    -                ///  1: spi_dma_infifo_full_vld is cleared by spi slave cmd 5. 0: spi_dma_infifo_full_vld is cleared by spi_trans_done.
    -                SLV_RX_SEG_TRANS_CLR_EN: u1,
    -                ///  1: spi_dma_outfifo_empty_vld is cleared by spi slave cmd 6. 0: spi_dma_outfifo_empty_vld is cleared by spi_trans_done.
    -                SLV_TX_SEG_TRANS_CLR_EN: u1,
    -                ///  1: spi_dma_inlink_eof is set when the number of dma pushed data bytes is equal to the value of spi_slv/mst_dma_rd_bytelen[19:0] in spi dma transition. 0: spi_dma_inlink_eof is set by spi_trans_done in non-seg-trans or spi_dma_seg_trans_done in seg-trans.
    -                RX_EOF_EN: u1,
    -                reserved27: u5,
    -                ///  Set this bit to enable SPI DMA controlled receive data mode.
    -                DMA_RX_ENA: u1,
    -                ///  Set this bit to enable SPI DMA controlled send data mode.
    -                DMA_TX_ENA: u1,
    -                ///  Set this bit to reset RX AFIFO, which is used to receive data in SPI master and slave mode transfer.
    -                RX_AFIFO_RST: u1,
    -                ///  Set this bit to reset BUF TX AFIFO, which is used send data out in SPI slave CPU controlled mode transfer and master mode transfer.
    -                BUF_AFIFO_RST: u1,
    -                ///  Set this bit to reset DMA TX AFIFO, which is used to send data out in SPI slave DMA controlled mode transfer.
    -                DMA_AFIFO_RST: u1,
    -            }),
    -            ///  SPI DMA interrupt enable register
    -            DMA_INT_ENA: mmio.Mmio(packed struct(u32) {
    -                ///  The enable bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt.
    -                DMA_INFIFO_FULL_ERR_INT_ENA: u1,
    -                ///  The enable bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt.
    -                DMA_OUTFIFO_EMPTY_ERR_INT_ENA: u1,
    -                ///  The enable bit for SPI slave Ex_QPI interrupt.
    -                SLV_EX_QPI_INT_ENA: u1,
    -                ///  The enable bit for SPI slave En_QPI interrupt.
    -                SLV_EN_QPI_INT_ENA: u1,
    -                ///  The enable bit for SPI slave CMD7 interrupt.
    -                SLV_CMD7_INT_ENA: u1,
    -                ///  The enable bit for SPI slave CMD8 interrupt.
    -                SLV_CMD8_INT_ENA: u1,
    -                ///  The enable bit for SPI slave CMD9 interrupt.
    -                SLV_CMD9_INT_ENA: u1,
    -                ///  The enable bit for SPI slave CMDA interrupt.
    -                SLV_CMDA_INT_ENA: u1,
    -                ///  The enable bit for SPI_SLV_RD_DMA_DONE_INT interrupt.
    -                SLV_RD_DMA_DONE_INT_ENA: u1,
    -                ///  The enable bit for SPI_SLV_WR_DMA_DONE_INT interrupt.
    -                SLV_WR_DMA_DONE_INT_ENA: u1,
    -                ///  The enable bit for SPI_SLV_RD_BUF_DONE_INT interrupt.
    -                SLV_RD_BUF_DONE_INT_ENA: u1,
    -                ///  The enable bit for SPI_SLV_WR_BUF_DONE_INT interrupt.
    -                SLV_WR_BUF_DONE_INT_ENA: u1,
    -                ///  The enable bit for SPI_TRANS_DONE_INT interrupt.
    -                TRANS_DONE_INT_ENA: u1,
    -                ///  The enable bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt.
    -                DMA_SEG_TRANS_DONE_INT_ENA: u1,
    -                ///  The enable bit for SPI_SEG_MAGIC_ERR_INT interrupt.
    -                SEG_MAGIC_ERR_INT_ENA: u1,
    -                ///  The enable bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt.
    -                SLV_BUF_ADDR_ERR_INT_ENA: u1,
    -                ///  The enable bit for SPI_SLV_CMD_ERR_INT interrupt.
    -                SLV_CMD_ERR_INT_ENA: u1,
    -                ///  The enable bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt.
    -                MST_RX_AFIFO_WFULL_ERR_INT_ENA: u1,
    -                ///  The enable bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt.
    -                MST_TX_AFIFO_REMPTY_ERR_INT_ENA: u1,
    -                ///  The enable bit for SPI_APP2_INT interrupt.
    -                APP2_INT_ENA: u1,
    -                ///  The enable bit for SPI_APP1_INT interrupt.
    -                APP1_INT_ENA: u1,
    -                padding: u11,
    -            }),
    -            ///  SPI DMA interrupt clear register
    -            DMA_INT_CLR: mmio.Mmio(packed struct(u32) {
    -                ///  The clear bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt.
    -                DMA_INFIFO_FULL_ERR_INT_CLR: u1,
    -                ///  The clear bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt.
    -                DMA_OUTFIFO_EMPTY_ERR_INT_CLR: u1,
    -                ///  The clear bit for SPI slave Ex_QPI interrupt.
    -                SLV_EX_QPI_INT_CLR: u1,
    -                ///  The clear bit for SPI slave En_QPI interrupt.
    -                SLV_EN_QPI_INT_CLR: u1,
    -                ///  The clear bit for SPI slave CMD7 interrupt.
    -                SLV_CMD7_INT_CLR: u1,
    -                ///  The clear bit for SPI slave CMD8 interrupt.
    -                SLV_CMD8_INT_CLR: u1,
    -                ///  The clear bit for SPI slave CMD9 interrupt.
    -                SLV_CMD9_INT_CLR: u1,
    -                ///  The clear bit for SPI slave CMDA interrupt.
    -                SLV_CMDA_INT_CLR: u1,
    -                ///  The clear bit for SPI_SLV_RD_DMA_DONE_INT interrupt.
    -                SLV_RD_DMA_DONE_INT_CLR: u1,
    -                ///  The clear bit for SPI_SLV_WR_DMA_DONE_INT interrupt.
    -                SLV_WR_DMA_DONE_INT_CLR: u1,
    -                ///  The clear bit for SPI_SLV_RD_BUF_DONE_INT interrupt.
    -                SLV_RD_BUF_DONE_INT_CLR: u1,
    -                ///  The clear bit for SPI_SLV_WR_BUF_DONE_INT interrupt.
    -                SLV_WR_BUF_DONE_INT_CLR: u1,
    -                ///  The clear bit for SPI_TRANS_DONE_INT interrupt.
    -                TRANS_DONE_INT_CLR: u1,
    -                ///  The clear bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt.
    -                DMA_SEG_TRANS_DONE_INT_CLR: u1,
    -                ///  The clear bit for SPI_SEG_MAGIC_ERR_INT interrupt.
    -                SEG_MAGIC_ERR_INT_CLR: u1,
    -                ///  The clear bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt.
    -                SLV_BUF_ADDR_ERR_INT_CLR: u1,
    -                ///  The clear bit for SPI_SLV_CMD_ERR_INT interrupt.
    -                SLV_CMD_ERR_INT_CLR: u1,
    -                ///  The clear bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt.
    -                MST_RX_AFIFO_WFULL_ERR_INT_CLR: u1,
    -                ///  The clear bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt.
    -                MST_TX_AFIFO_REMPTY_ERR_INT_CLR: u1,
    -                ///  The clear bit for SPI_APP2_INT interrupt.
    -                APP2_INT_CLR: u1,
    -                ///  The clear bit for SPI_APP1_INT interrupt.
    -                APP1_INT_CLR: u1,
    -                padding: u11,
    -            }),
    -            ///  SPI DMA interrupt raw register
    -            DMA_INT_RAW: mmio.Mmio(packed struct(u32) {
    -                ///  1: The current data rate of DMA Rx is smaller than that of SPI, which will lose the receive data. 0: Others.
    -                DMA_INFIFO_FULL_ERR_INT_RAW: u1,
    -                ///  1: The current data rate of DMA TX is smaller than that of SPI. SPI will stop in master mode and send out all 0 in slave mode. 0: Others.
    -                DMA_OUTFIFO_EMPTY_ERR_INT_RAW: u1,
    -                ///  The raw bit for SPI slave Ex_QPI interrupt. 1: SPI slave mode Ex_QPI transmission is ended. 0: Others.
    -                SLV_EX_QPI_INT_RAW: u1,
    -                ///  The raw bit for SPI slave En_QPI interrupt. 1: SPI slave mode En_QPI transmission is ended. 0: Others.
    -                SLV_EN_QPI_INT_RAW: u1,
    -                ///  The raw bit for SPI slave CMD7 interrupt. 1: SPI slave mode CMD7 transmission is ended. 0: Others.
    -                SLV_CMD7_INT_RAW: u1,
    -                ///  The raw bit for SPI slave CMD8 interrupt. 1: SPI slave mode CMD8 transmission is ended. 0: Others.
    -                SLV_CMD8_INT_RAW: u1,
    -                ///  The raw bit for SPI slave CMD9 interrupt. 1: SPI slave mode CMD9 transmission is ended. 0: Others.
    -                SLV_CMD9_INT_RAW: u1,
    -                ///  The raw bit for SPI slave CMDA interrupt. 1: SPI slave mode CMDA transmission is ended. 0: Others.
    -                SLV_CMDA_INT_RAW: u1,
    -                ///  The raw bit for SPI_SLV_RD_DMA_DONE_INT interrupt. 1: SPI slave mode Rd_DMA transmission is ended. 0: Others.
    -                SLV_RD_DMA_DONE_INT_RAW: u1,
    -                ///  The raw bit for SPI_SLV_WR_DMA_DONE_INT interrupt. 1: SPI slave mode Wr_DMA transmission is ended. 0: Others.
    -                SLV_WR_DMA_DONE_INT_RAW: u1,
    -                ///  The raw bit for SPI_SLV_RD_BUF_DONE_INT interrupt. 1: SPI slave mode Rd_BUF transmission is ended. 0: Others.
    -                SLV_RD_BUF_DONE_INT_RAW: u1,
    -                ///  The raw bit for SPI_SLV_WR_BUF_DONE_INT interrupt. 1: SPI slave mode Wr_BUF transmission is ended. 0: Others.
    -                SLV_WR_BUF_DONE_INT_RAW: u1,
    -                ///  The raw bit for SPI_TRANS_DONE_INT interrupt. 1: SPI master mode transmission is ended. 0: others.
    -                TRANS_DONE_INT_RAW: u1,
    -                ///  The raw bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt. 1: spi master DMA full-duplex/half-duplex seg-conf-trans ends or slave half-duplex seg-trans ends. And data has been pushed to corresponding memory. 0: seg-conf-trans or seg-trans is not ended or not occurred.
    -                DMA_SEG_TRANS_DONE_INT_RAW: u1,
    -                ///  The raw bit for SPI_SEG_MAGIC_ERR_INT interrupt. 1: The magic value in CONF buffer is error in the DMA seg-conf-trans. 0: others.
    -                SEG_MAGIC_ERR_INT_RAW: u1,
    -                ///  The raw bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt. 1: The accessing data address of the current SPI slave mode CPU controlled FD, Wr_BUF or Rd_BUF transmission is bigger than 63. 0: Others.
    -                SLV_BUF_ADDR_ERR_INT_RAW: u1,
    -                ///  The raw bit for SPI_SLV_CMD_ERR_INT interrupt. 1: The slave command value in the current SPI slave HD mode transmission is not supported. 0: Others.
    -                SLV_CMD_ERR_INT_RAW: u1,
    -                ///  The raw bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt. 1: There is a RX AFIFO write-full error when SPI inputs data in master mode. 0: Others.
    -                MST_RX_AFIFO_WFULL_ERR_INT_RAW: u1,
    -                ///  The raw bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt. 1: There is a TX BUF AFIFO read-empty error when SPI outputs data in master mode. 0: Others.
    -                MST_TX_AFIFO_REMPTY_ERR_INT_RAW: u1,
    -                ///  The raw bit for SPI_APP2_INT interrupt. The value is only controlled by application.
    -                APP2_INT_RAW: u1,
    -                ///  The raw bit for SPI_APP1_INT interrupt. The value is only controlled by application.
    -                APP1_INT_RAW: u1,
    -                padding: u11,
    -            }),
    -            ///  SPI DMA interrupt status register
    -            DMA_INT_ST: mmio.Mmio(packed struct(u32) {
    -                ///  The status bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt.
    -                DMA_INFIFO_FULL_ERR_INT_ST: u1,
    -                ///  The status bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt.
    -                DMA_OUTFIFO_EMPTY_ERR_INT_ST: u1,
    -                ///  The status bit for SPI slave Ex_QPI interrupt.
    -                SLV_EX_QPI_INT_ST: u1,
    -                ///  The status bit for SPI slave En_QPI interrupt.
    -                SLV_EN_QPI_INT_ST: u1,
    -                ///  The status bit for SPI slave CMD7 interrupt.
    -                SLV_CMD7_INT_ST: u1,
    -                ///  The status bit for SPI slave CMD8 interrupt.
    -                SLV_CMD8_INT_ST: u1,
    -                ///  The status bit for SPI slave CMD9 interrupt.
    -                SLV_CMD9_INT_ST: u1,
    -                ///  The status bit for SPI slave CMDA interrupt.
    -                SLV_CMDA_INT_ST: u1,
    -                ///  The status bit for SPI_SLV_RD_DMA_DONE_INT interrupt.
    -                SLV_RD_DMA_DONE_INT_ST: u1,
    -                ///  The status bit for SPI_SLV_WR_DMA_DONE_INT interrupt.
    -                SLV_WR_DMA_DONE_INT_ST: u1,
    -                ///  The status bit for SPI_SLV_RD_BUF_DONE_INT interrupt.
    -                SLV_RD_BUF_DONE_INT_ST: u1,
    -                ///  The status bit for SPI_SLV_WR_BUF_DONE_INT interrupt.
    -                SLV_WR_BUF_DONE_INT_ST: u1,
    -                ///  The status bit for SPI_TRANS_DONE_INT interrupt.
    -                TRANS_DONE_INT_ST: u1,
    -                ///  The status bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt.
    -                DMA_SEG_TRANS_DONE_INT_ST: u1,
    -                ///  The status bit for SPI_SEG_MAGIC_ERR_INT interrupt.
    -                SEG_MAGIC_ERR_INT_ST: u1,
    -                ///  The status bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt.
    -                SLV_BUF_ADDR_ERR_INT_ST: u1,
    -                ///  The status bit for SPI_SLV_CMD_ERR_INT interrupt.
    -                SLV_CMD_ERR_INT_ST: u1,
    -                ///  The status bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt.
    -                MST_RX_AFIFO_WFULL_ERR_INT_ST: u1,
    -                ///  The status bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt.
    -                MST_TX_AFIFO_REMPTY_ERR_INT_ST: u1,
    -                ///  The status bit for SPI_APP2_INT interrupt.
    -                APP2_INT_ST: u1,
    -                ///  The status bit for SPI_APP1_INT interrupt.
    -                APP1_INT_ST: u1,
    -                padding: u11,
    -            }),
    -            reserved152: [84]u8,
    -            ///  SPI CPU-controlled buffer0
    -            W0: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF0: u32,
    -            }),
    -            ///  SPI CPU-controlled buffer1
    -            W1: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF1: u32,
    -            }),
    -            ///  SPI CPU-controlled buffer2
    -            W2: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF2: u32,
    -            }),
    -            ///  SPI CPU-controlled buffer3
    -            W3: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF3: u32,
    -            }),
    -            ///  SPI CPU-controlled buffer4
    -            W4: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF4: u32,
    -            }),
    -            ///  SPI CPU-controlled buffer5
    -            W5: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF5: u32,
    -            }),
    -            ///  SPI CPU-controlled buffer6
    -            W6: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF6: u32,
    -            }),
    -            ///  SPI CPU-controlled buffer7
    -            W7: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF7: u32,
    -            }),
    -            ///  SPI CPU-controlled buffer8
    -            W8: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF8: u32,
    -            }),
    -            ///  SPI CPU-controlled buffer9
    -            W9: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF9: u32,
    -            }),
    -            ///  SPI CPU-controlled buffer10
    -            W10: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF10: u32,
    -            }),
    -            ///  SPI CPU-controlled buffer11
    -            W11: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF11: u32,
    -            }),
    -            ///  SPI CPU-controlled buffer12
    -            W12: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF12: u32,
    -            }),
    -            ///  SPI CPU-controlled buffer13
    -            W13: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF13: u32,
    -            }),
    -            ///  SPI CPU-controlled buffer14
    -            W14: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF14: u32,
    -            }),
    -            ///  SPI CPU-controlled buffer15
    -            W15: mmio.Mmio(packed struct(u32) {
    -                ///  data buffer
    -                BUF15: u32,
    -            }),
    -            reserved224: [8]u8,
    -            ///  SPI slave control register
    -            SLAVE: mmio.Mmio(packed struct(u32) {
    -                ///  SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is alwasy on. Can be configured in CONF state.
    -                CLK_MODE: u2,
    -                ///  {CPOL, CPHA},1: support spi clk mode 1 and 3, first edge output data B[0]/B[7]. 0: support spi clk mode 0 and 2, first edge output data B[1]/B[6].
    -                CLK_MODE_13: u1,
    -                ///  It saves half a cycle when tsck is the same as rsck. 1: output data at rsck posedge 0: output data at tsck posedge
    -                RSCK_DATA_OUT: u1,
    -                reserved8: u4,
    -                ///  1: SPI_SLV_DATA_BITLEN stores data bit length of master-read-slave data length in DMA controlled mode(Rd_DMA). 0: others
    -                SLV_RDDMA_BITLEN_EN: u1,
    -                ///  1: SPI_SLV_DATA_BITLEN stores data bit length of master-write-to-slave data length in DMA controlled mode(Wr_DMA). 0: others
    -                SLV_WRDMA_BITLEN_EN: u1,
    -                ///  1: SPI_SLV_DATA_BITLEN stores data bit length of master-read-slave data length in CPU controlled mode(Rd_BUF). 0: others
    -                SLV_RDBUF_BITLEN_EN: u1,
    -                ///  1: SPI_SLV_DATA_BITLEN stores data bit length of master-write-to-slave data length in CPU controlled mode(Wr_BUF). 0: others
    -                SLV_WRBUF_BITLEN_EN: u1,
    -                reserved22: u10,
    -                ///  The magic value of BM table in master DMA seg-trans.
    -                DMA_SEG_MAGIC_VALUE: u4,
    -                ///  Set SPI work mode. 1: slave mode 0: master mode.
    -                MODE: u1,
    -                ///  Software reset enable, reset the spi clock line cs line and data lines. Can be configured in CONF state.
    -                SOFT_RESET: u1,
    -                ///  1: Enable the DMA CONF phase of current seg-trans operation, which means seg-trans will start. 0: This is not seg-trans mode.
    -                USR_CONF: u1,
    -                padding: u3,
    -            }),
    -            ///  SPI slave control register 1
    -            SLAVE1: mmio.Mmio(packed struct(u32) {
    -                ///  The transferred data bit length in SPI slave FD and HD mode.
    -                SLV_DATA_BITLEN: u18,
    -                ///  In the slave mode it is the value of command.
    -                SLV_LAST_COMMAND: u8,
    -                ///  In the slave mode it is the value of address.
    -                SLV_LAST_ADDR: u6,
    -            }),
    -            ///  SPI module clock and register clock control
    -            CLK_GATE: mmio.Mmio(packed struct(u32) {
    -                ///  Set this bit to enable clk gate
    -                CLK_EN: u1,
    -                ///  Set this bit to power on the SPI module clock.
    -                MST_CLK_ACTIVE: u1,
    -                ///  This bit is used to select SPI module clock source in master mode. 1: PLL_CLK_80M. 0: XTAL CLK.
    -                MST_CLK_SEL: u1,
    -                padding: u29,
    -            }),
    -            reserved240: [4]u8,
    -            ///  Version control
    -            DATE: mmio.Mmio(packed struct(u32) {
    -                ///  SPI register version.
    -                DATE: u28,
    -                padding: u4,
    -            }),
    -        };
    -
    -        ///  System
    -        pub const SYSTEM = extern struct {
    -            ///  cpu_peripheral clock gating register
    -            CPU_PERI_CLK_EN: mmio.Mmio(packed struct(u32) {
    -                reserved6: u6,
    -                ///  reg_clk_en_assist_debug
    -                CLK_EN_ASSIST_DEBUG: u1,
    -                ///  reg_clk_en_dedicated_gpio
    -                CLK_EN_DEDICATED_GPIO: u1,
    -                padding: u24,
    -            }),
    -            ///  cpu_peripheral reset register
    -            CPU_PERI_RST_EN: mmio.Mmio(packed struct(u32) {
    -                reserved6: u6,
    -                ///  reg_rst_en_assist_debug
    -                RST_EN_ASSIST_DEBUG: u1,
    -                ///  reg_rst_en_dedicated_gpio
    -                RST_EN_DEDICATED_GPIO: u1,
    -                padding: u24,
    -            }),
    -            ///  cpu clock config register
    -            CPU_PER_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  reg_cpuperiod_sel
    -                CPUPERIOD_SEL: u2,
    -                ///  reg_pll_freq_sel
    -                PLL_FREQ_SEL: u1,
    -                ///  reg_cpu_wait_mode_force_on
    -                CPU_WAIT_MODE_FORCE_ON: u1,
    -                ///  reg_cpu_waiti_delay_num
    -                CPU_WAITI_DELAY_NUM: u4,
    -                padding: u24,
    -            }),
    -            ///  memory power down mask register
    -            MEM_PD_MASK: mmio.Mmio(packed struct(u32) {
    -                ///  reg_lslp_mem_pd_mask
    -                LSLP_MEM_PD_MASK: u1,
    -                padding: u31,
    -            }),
    -            ///  peripheral clock gating register
    -            PERIP_CLK_EN0: mmio.Mmio(packed struct(u32) {
    -                ///  reg_timers_clk_en
    -                TIMERS_CLK_EN: u1,
    -                ///  reg_spi01_clk_en
    -                SPI01_CLK_EN: u1,
    -                ///  reg_uart_clk_en
    -                UART_CLK_EN: u1,
    -                ///  reg_wdg_clk_en
    -                WDG_CLK_EN: u1,
    -                ///  reg_i2s0_clk_en
    -                I2S0_CLK_EN: u1,
    -                ///  reg_uart1_clk_en
    -                UART1_CLK_EN: u1,
    -                ///  reg_spi2_clk_en
    -                SPI2_CLK_EN: u1,
    -                ///  reg_ext0_clk_en
    -                I2C_EXT0_CLK_EN: u1,
    -                ///  reg_uhci0_clk_en
    -                UHCI0_CLK_EN: u1,
    -                ///  reg_rmt_clk_en
    -                RMT_CLK_EN: u1,
    -                ///  reg_pcnt_clk_en
    -                PCNT_CLK_EN: u1,
    -                ///  reg_ledc_clk_en
    -                LEDC_CLK_EN: u1,
    -                ///  reg_uhci1_clk_en
    -                UHCI1_CLK_EN: u1,
    -                ///  reg_timergroup_clk_en
    -                TIMERGROUP_CLK_EN: u1,
    -                ///  reg_efuse_clk_en
    -                EFUSE_CLK_EN: u1,
    -                ///  reg_timergroup1_clk_en
    -                TIMERGROUP1_CLK_EN: u1,
    -                ///  reg_spi3_clk_en
    -                SPI3_CLK_EN: u1,
    -                ///  reg_pwm0_clk_en
    -                PWM0_CLK_EN: u1,
    -                ///  reg_ext1_clk_en
    -                EXT1_CLK_EN: u1,
    -                ///  reg_can_clk_en
    -                CAN_CLK_EN: u1,
    -                ///  reg_pwm1_clk_en
    -                PWM1_CLK_EN: u1,
    -                ///  reg_i2s1_clk_en
    -                I2S1_CLK_EN: u1,
    -                ///  reg_spi2_dma_clk_en
    -                SPI2_DMA_CLK_EN: u1,
    -                ///  reg_usb_device_clk_en
    -                USB_DEVICE_CLK_EN: u1,
    -                ///  reg_uart_mem_clk_en
    -                UART_MEM_CLK_EN: u1,
    -                ///  reg_pwm2_clk_en
    -                PWM2_CLK_EN: u1,
    -                ///  reg_pwm3_clk_en
    -                PWM3_CLK_EN: u1,
    -                ///  reg_spi3_dma_clk_en
    -                SPI3_DMA_CLK_EN: u1,
    -                ///  reg_apb_saradc_clk_en
    -                APB_SARADC_CLK_EN: u1,
    -                ///  reg_systimer_clk_en
    -                SYSTIMER_CLK_EN: u1,
    -                ///  reg_adc2_arb_clk_en
    -                ADC2_ARB_CLK_EN: u1,
    -                ///  reg_spi4_clk_en
    -                SPI4_CLK_EN: u1,
    -            }),
    -            ///  peripheral clock gating register
    -            PERIP_CLK_EN1: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  reg_crypto_aes_clk_en
    -                CRYPTO_AES_CLK_EN: u1,
    -                ///  reg_crypto_sha_clk_en
    -                CRYPTO_SHA_CLK_EN: u1,
    -                ///  reg_crypto_rsa_clk_en
    -                CRYPTO_RSA_CLK_EN: u1,
    -                ///  reg_crypto_ds_clk_en
    -                CRYPTO_DS_CLK_EN: u1,
    -                ///  reg_crypto_hmac_clk_en
    -                CRYPTO_HMAC_CLK_EN: u1,
    -                ///  reg_dma_clk_en
    -                DMA_CLK_EN: u1,
    -                ///  reg_sdio_host_clk_en
    -                SDIO_HOST_CLK_EN: u1,
    -                ///  reg_lcd_cam_clk_en
    -                LCD_CAM_CLK_EN: u1,
    -                ///  reg_uart2_clk_en
    -                UART2_CLK_EN: u1,
    -                ///  reg_tsens_clk_en
    -                TSENS_CLK_EN: u1,
    -                padding: u21,
    -            }),
    -            ///  reserved
    -            PERIP_RST_EN0: mmio.Mmio(packed struct(u32) {
    -                ///  reg_timers_rst
    -                TIMERS_RST: u1,
    -                ///  reg_spi01_rst
    -                SPI01_RST: u1,
    -                ///  reg_uart_rst
    -                UART_RST: u1,
    -                ///  reg_wdg_rst
    -                WDG_RST: u1,
    -                ///  reg_i2s0_rst
    -                I2S0_RST: u1,
    -                ///  reg_uart1_rst
    -                UART1_RST: u1,
    -                ///  reg_spi2_rst
    -                SPI2_RST: u1,
    -                ///  reg_ext0_rst
    -                I2C_EXT0_RST: u1,
    -                ///  reg_uhci0_rst
    -                UHCI0_RST: u1,
    -                ///  reg_rmt_rst
    -                RMT_RST: u1,
    -                ///  reg_pcnt_rst
    -                PCNT_RST: u1,
    -                ///  reg_ledc_rst
    -                LEDC_RST: u1,
    -                ///  reg_uhci1_rst
    -                UHCI1_RST: u1,
    -                ///  reg_timergroup_rst
    -                TIMERGROUP_RST: u1,
    -                ///  reg_efuse_rst
    -                EFUSE_RST: u1,
    -                ///  reg_timergroup1_rst
    -                TIMERGROUP1_RST: u1,
    -                ///  reg_spi3_rst
    -                SPI3_RST: u1,
    -                ///  reg_pwm0_rst
    -                PWM0_RST: u1,
    -                ///  reg_ext1_rst
    -                EXT1_RST: u1,
    -                ///  reg_can_rst
    -                CAN_RST: u1,
    -                ///  reg_pwm1_rst
    -                PWM1_RST: u1,
    -                ///  reg_i2s1_rst
    -                I2S1_RST: u1,
    -                ///  reg_spi2_dma_rst
    -                SPI2_DMA_RST: u1,
    -                ///  reg_usb_device_rst
    -                USB_DEVICE_RST: u1,
    -                ///  reg_uart_mem_rst
    -                UART_MEM_RST: u1,
    -                ///  reg_pwm2_rst
    -                PWM2_RST: u1,
    -                ///  reg_pwm3_rst
    -                PWM3_RST: u1,
    -                ///  reg_spi3_dma_rst
    -                SPI3_DMA_RST: u1,
    -                ///  reg_apb_saradc_rst
    -                APB_SARADC_RST: u1,
    -                ///  reg_systimer_rst
    -                SYSTIMER_RST: u1,
    -                ///  reg_adc2_arb_rst
    -                ADC2_ARB_RST: u1,
    -                ///  reg_spi4_rst
    -                SPI4_RST: u1,
    -            }),
    -            ///  peripheral reset register
    -            PERIP_RST_EN1: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  reg_crypto_aes_rst
    -                CRYPTO_AES_RST: u1,
    -                ///  reg_crypto_sha_rst
    -                CRYPTO_SHA_RST: u1,
    -                ///  reg_crypto_rsa_rst
    -                CRYPTO_RSA_RST: u1,
    -                ///  reg_crypto_ds_rst
    -                CRYPTO_DS_RST: u1,
    -                ///  reg_crypto_hmac_rst
    -                CRYPTO_HMAC_RST: u1,
    -                ///  reg_dma_rst
    -                DMA_RST: u1,
    -                ///  reg_sdio_host_rst
    -                SDIO_HOST_RST: u1,
    -                ///  reg_lcd_cam_rst
    -                LCD_CAM_RST: u1,
    -                ///  reg_uart2_rst
    -                UART2_RST: u1,
    -                ///  reg_tsens_rst
    -                TSENS_RST: u1,
    -                padding: u21,
    -            }),
    -            ///  clock config register
    -            BT_LPCK_DIV_INT: mmio.Mmio(packed struct(u32) {
    -                ///  reg_bt_lpck_div_num
    -                BT_LPCK_DIV_NUM: u12,
    -                padding: u20,
    -            }),
    -            ///  clock config register
    -            BT_LPCK_DIV_FRAC: mmio.Mmio(packed struct(u32) {
    -                ///  reg_bt_lpck_div_b
    -                BT_LPCK_DIV_B: u12,
    -                ///  reg_bt_lpck_div_a
    -                BT_LPCK_DIV_A: u12,
    -                ///  reg_lpclk_sel_rtc_slow
    -                LPCLK_SEL_RTC_SLOW: u1,
    -                ///  reg_lpclk_sel_8m
    -                LPCLK_SEL_8M: u1,
    -                ///  reg_lpclk_sel_xtal
    -                LPCLK_SEL_XTAL: u1,
    -                ///  reg_lpclk_sel_xtal32k
    -                LPCLK_SEL_XTAL32K: u1,
    -                ///  reg_lpclk_rtc_en
    -                LPCLK_RTC_EN: u1,
    -                padding: u3,
    -            }),
    -            ///  interrupt generate register
    -            CPU_INTR_FROM_CPU_0: mmio.Mmio(packed struct(u32) {
    -                ///  reg_cpu_intr_from_cpu_0
    -                CPU_INTR_FROM_CPU_0: u1,
    -                padding: u31,
    -            }),
    -            ///  interrupt generate register
    -            CPU_INTR_FROM_CPU_1: mmio.Mmio(packed struct(u32) {
    -                ///  reg_cpu_intr_from_cpu_1
    -                CPU_INTR_FROM_CPU_1: u1,
    -                padding: u31,
    -            }),
    -            ///  interrupt generate register
    -            CPU_INTR_FROM_CPU_2: mmio.Mmio(packed struct(u32) {
    -                ///  reg_cpu_intr_from_cpu_2
    -                CPU_INTR_FROM_CPU_2: u1,
    -                padding: u31,
    -            }),
    -            ///  interrupt generate register
    -            CPU_INTR_FROM_CPU_3: mmio.Mmio(packed struct(u32) {
    -                ///  reg_cpu_intr_from_cpu_3
    -                CPU_INTR_FROM_CPU_3: u1,
    -                padding: u31,
    -            }),
    -            ///  rsa memory power control register
    -            RSA_PD_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  reg_rsa_mem_pd
    -                RSA_MEM_PD: u1,
    -                ///  reg_rsa_mem_force_pu
    -                RSA_MEM_FORCE_PU: u1,
    -                ///  reg_rsa_mem_force_pd
    -                RSA_MEM_FORCE_PD: u1,
    -                padding: u29,
    -            }),
    -            ///  edma clcok and reset register
    -            EDMA_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  reg_edma_clk_on
    -                EDMA_CLK_ON: u1,
    -                ///  reg_edma_reset
    -                EDMA_RESET: u1,
    -                padding: u30,
    -            }),
    -            ///  cache control register
    -            CACHE_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  reg_icache_clk_on
    -                ICACHE_CLK_ON: u1,
    -                ///  reg_icache_reset
    -                ICACHE_RESET: u1,
    -                ///  reg_dcache_clk_on
    -                DCACHE_CLK_ON: u1,
    -                ///  reg_dcache_reset
    -                DCACHE_RESET: u1,
    -                padding: u28,
    -            }),
    -            ///  SYSTEM_EXTERNAL_DEVICE_ENCRYPT_DECRYPT_CONTROL_REG
    -            EXTERNAL_DEVICE_ENCRYPT_DECRYPT_CONTROL: mmio.Mmio(packed struct(u32) {
    -                ///  reg_enable_spi_manual_encrypt
    -                ENABLE_SPI_MANUAL_ENCRYPT: u1,
    -                ///  reg_enable_download_db_encrypt
    -                ENABLE_DOWNLOAD_DB_ENCRYPT: u1,
    -                ///  reg_enable_download_g0cb_decrypt
    -                ENABLE_DOWNLOAD_G0CB_DECRYPT: u1,
    -                ///  reg_enable_download_manual_encrypt
    -                ENABLE_DOWNLOAD_MANUAL_ENCRYPT: u1,
    -                padding: u28,
    -            }),
    -            ///  fast memory config register
    -            RTC_FASTMEM_CONFIG: mmio.Mmio(packed struct(u32) {
    -                reserved8: u8,
    -                ///  reg_rtc_mem_crc_start
    -                RTC_MEM_CRC_START: u1,
    -                ///  reg_rtc_mem_crc_addr
    -                RTC_MEM_CRC_ADDR: u11,
    -                ///  reg_rtc_mem_crc_len
    -                RTC_MEM_CRC_LEN: u11,
    -                ///  reg_rtc_mem_crc_finish
    -                RTC_MEM_CRC_FINISH: u1,
    -            }),
    -            ///  reserved
    -            RTC_FASTMEM_CRC: mmio.Mmio(packed struct(u32) {
    -                ///  reg_rtc_mem_crc_res
    -                RTC_MEM_CRC_RES: u32,
    -            }),
    -            ///  eco register
    -            REDUNDANT_ECO_CTRL: mmio.Mmio(packed struct(u32) {
    -                ///  reg_redundant_eco_drive
    -                REDUNDANT_ECO_DRIVE: u1,
    -                ///  reg_redundant_eco_result
    -                REDUNDANT_ECO_RESULT: u1,
    -                padding: u30,
    -            }),
    -            ///  clock gating register
    -            CLOCK_GATE: mmio.Mmio(packed struct(u32) {
    -                ///  reg_clk_en
    -                CLK_EN: u1,
    -                padding: u31,
    -            }),
    -            ///  system clock config register
    -            SYSCLK_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  reg_pre_div_cnt
    -                PRE_DIV_CNT: u10,
    -                ///  reg_soc_clk_sel
    -                SOC_CLK_SEL: u2,
    -                ///  reg_clk_xtal_freq
    -                CLK_XTAL_FREQ: u7,
    -                ///  reg_clk_div_en
    -                CLK_DIV_EN: u1,
    -                padding: u12,
    -            }),
    -            ///  mem pvt register
    -            MEM_PVT: mmio.Mmio(packed struct(u32) {
    -                ///  reg_mem_path_len
    -                MEM_PATH_LEN: u4,
    -                ///  reg_mem_err_cnt_clr
    -                MEM_ERR_CNT_CLR: u1,
    -                ///  reg_mem_pvt_monitor_en
    -                MONITOR_EN: u1,
    -                ///  reg_mem_timing_err_cnt
    -                MEM_TIMING_ERR_CNT: u16,
    -                ///  reg_mem_vt_sel
    -                MEM_VT_SEL: u2,
    -                padding: u8,
    -            }),
    -            ///  mem pvt register
    -            COMB_PVT_LVT_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  reg_comb_path_len_lvt
    -                COMB_PATH_LEN_LVT: u5,
    -                ///  reg_comb_err_cnt_clr_lvt
    -                COMB_ERR_CNT_CLR_LVT: u1,
    -                ///  reg_comb_pvt_monitor_en_lvt
    -                COMB_PVT_MONITOR_EN_LVT: u1,
    -                padding: u25,
    -            }),
    -            ///  mem pvt register
    -            COMB_PVT_NVT_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  reg_comb_path_len_nvt
    -                COMB_PATH_LEN_NVT: u5,
    -                ///  reg_comb_err_cnt_clr_nvt
    -                COMB_ERR_CNT_CLR_NVT: u1,
    -                ///  reg_comb_pvt_monitor_en_nvt
    -                COMB_PVT_MONITOR_EN_NVT: u1,
    -                padding: u25,
    -            }),
    -            ///  mem pvt register
    -            COMB_PVT_HVT_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  reg_comb_path_len_hvt
    -                COMB_PATH_LEN_HVT: u5,
    -                ///  reg_comb_err_cnt_clr_hvt
    -                COMB_ERR_CNT_CLR_HVT: u1,
    -                ///  reg_comb_pvt_monitor_en_hvt
    -                COMB_PVT_MONITOR_EN_HVT: u1,
    -                padding: u25,
    -            }),
    -            ///  mem pvt register
    -            COMB_PVT_ERR_LVT_SITE0: mmio.Mmio(packed struct(u32) {
    -                ///  reg_comb_timing_err_cnt_lvt_site0
    -                COMB_TIMING_ERR_CNT_LVT_SITE0: u16,
    -                padding: u16,
    -            }),
    -            ///  mem pvt register
    -            COMB_PVT_ERR_NVT_SITE0: mmio.Mmio(packed struct(u32) {
    -                ///  reg_comb_timing_err_cnt_nvt_site0
    -                COMB_TIMING_ERR_CNT_NVT_SITE0: u16,
    -                padding: u16,
    -            }),
    -            ///  mem pvt register
    -            COMB_PVT_ERR_HVT_SITE0: mmio.Mmio(packed struct(u32) {
    -                ///  reg_comb_timing_err_cnt_hvt_site0
    -                COMB_TIMING_ERR_CNT_HVT_SITE0: u16,
    -                padding: u16,
    -            }),
    -            ///  mem pvt register
    -            COMB_PVT_ERR_LVT_SITE1: mmio.Mmio(packed struct(u32) {
    -                ///  reg_comb_timing_err_cnt_lvt_site1
    -                COMB_TIMING_ERR_CNT_LVT_SITE1: u16,
    -                padding: u16,
    -            }),
    -            ///  mem pvt register
    -            COMB_PVT_ERR_NVT_SITE1: mmio.Mmio(packed struct(u32) {
    -                ///  reg_comb_timing_err_cnt_nvt_site1
    -                COMB_TIMING_ERR_CNT_NVT_SITE1: u16,
    -                padding: u16,
    -            }),
    -            ///  mem pvt register
    -            COMB_PVT_ERR_HVT_SITE1: mmio.Mmio(packed struct(u32) {
    -                ///  reg_comb_timing_err_cnt_hvt_site1
    -                COMB_TIMING_ERR_CNT_HVT_SITE1: u16,
    -                padding: u16,
    -            }),
    -            ///  mem pvt register
    -            COMB_PVT_ERR_LVT_SITE2: mmio.Mmio(packed struct(u32) {
    -                ///  reg_comb_timing_err_cnt_lvt_site2
    -                COMB_TIMING_ERR_CNT_LVT_SITE2: u16,
    -                padding: u16,
    -            }),
    -            ///  mem pvt register
    -            COMB_PVT_ERR_NVT_SITE2: mmio.Mmio(packed struct(u32) {
    -                ///  reg_comb_timing_err_cnt_nvt_site2
    -                COMB_TIMING_ERR_CNT_NVT_SITE2: u16,
    -                padding: u16,
    -            }),
    -            ///  mem pvt register
    -            COMB_PVT_ERR_HVT_SITE2: mmio.Mmio(packed struct(u32) {
    -                ///  reg_comb_timing_err_cnt_hvt_site2
    -                COMB_TIMING_ERR_CNT_HVT_SITE2: u16,
    -                padding: u16,
    -            }),
    -            ///  mem pvt register
    -            COMB_PVT_ERR_LVT_SITE3: mmio.Mmio(packed struct(u32) {
    -                ///  reg_comb_timing_err_cnt_lvt_site3
    -                COMB_TIMING_ERR_CNT_LVT_SITE3: u16,
    -                padding: u16,
    -            }),
    -            ///  mem pvt register
    -            COMB_PVT_ERR_NVT_SITE3: mmio.Mmio(packed struct(u32) {
    -                ///  reg_comb_timing_err_cnt_nvt_site3
    -                COMB_TIMING_ERR_CNT_NVT_SITE3: u16,
    -                padding: u16,
    -            }),
    -            ///  mem pvt register
    -            COMB_PVT_ERR_HVT_SITE3: mmio.Mmio(packed struct(u32) {
    -                ///  reg_comb_timing_err_cnt_hvt_site3
    -                COMB_TIMING_ERR_CNT_HVT_SITE3: u16,
    -                padding: u16,
    -            }),
    -            reserved4092: [3936]u8,
    -            ///  Version register
    -            SYSTEM_REG_DATE: mmio.Mmio(packed struct(u32) {
    -                ///  reg_system_reg_date
    -                SYSTEM_REG_DATE: u28,
    -                padding: u4,
    -            }),
    -        };
    -
    -        ///  System Timer
    -        pub const SYSTIMER = extern struct {
    -            ///  SYSTIMER_CONF.
    -            CONF: mmio.Mmio(packed struct(u32) {
    -                ///  systimer clock force on
    -                SYSTIMER_CLK_FO: u1,
    -                reserved22: u21,
    -                ///  target2 work enable
    -                TARGET2_WORK_EN: u1,
    -                ///  target1 work enable
    -                TARGET1_WORK_EN: u1,
    -                ///  target0 work enable
    -                TARGET0_WORK_EN: u1,
    -                ///  If timer unit1 is stalled when core1 stalled
    -                TIMER_UNIT1_CORE1_STALL_EN: u1,
    -                ///  If timer unit1 is stalled when core0 stalled
    -                TIMER_UNIT1_CORE0_STALL_EN: u1,
    -                ///  If timer unit0 is stalled when core1 stalled
    -                TIMER_UNIT0_CORE1_STALL_EN: u1,
    -                ///  If timer unit0 is stalled when core0 stalled
    -                TIMER_UNIT0_CORE0_STALL_EN: u1,
    -                ///  timer unit1 work enable
    -                TIMER_UNIT1_WORK_EN: u1,
    -                ///  timer unit0 work enable
    -                TIMER_UNIT0_WORK_EN: u1,
    -                ///  register file clk gating
    -                CLK_EN: u1,
    -            }),
    -            ///  SYSTIMER_UNIT0_OP.
    -            UNIT0_OP: mmio.Mmio(packed struct(u32) {
    -                reserved29: u29,
    -                ///  reg_timer_unit0_value_valid
    -                TIMER_UNIT0_VALUE_VALID: u1,
    -                ///  update timer_unit0
    -                TIMER_UNIT0_UPDATE: u1,
    -                padding: u1,
    -            }),
    -            ///  SYSTIMER_UNIT1_OP.
    -            UNIT1_OP: mmio.Mmio(packed struct(u32) {
    -                reserved29: u29,
    -                ///  timer value is sync and valid
    -                TIMER_UNIT1_VALUE_VALID: u1,
    -                ///  update timer unit1
    -                TIMER_UNIT1_UPDATE: u1,
    -                padding: u1,
    -            }),
    -            ///  SYSTIMER_UNIT0_LOAD_HI.
    -            UNIT0_LOAD_HI: mmio.Mmio(packed struct(u32) {
    -                ///  timer unit0 load high 32 bit
    -                TIMER_UNIT0_LOAD_HI: u20,
    -                padding: u12,
    -            }),
    -            ///  SYSTIMER_UNIT0_LOAD_LO.
    -            UNIT0_LOAD_LO: mmio.Mmio(packed struct(u32) {
    -                ///  timer unit0 load low 32 bit
    -                TIMER_UNIT0_LOAD_LO: u32,
    -            }),
    -            ///  SYSTIMER_UNIT1_LOAD_HI.
    -            UNIT1_LOAD_HI: mmio.Mmio(packed struct(u32) {
    -                ///  timer unit1 load high 32 bit
    -                TIMER_UNIT1_LOAD_HI: u20,
    -                padding: u12,
    -            }),
    -            ///  SYSTIMER_UNIT1_LOAD_LO.
    -            UNIT1_LOAD_LO: mmio.Mmio(packed struct(u32) {
    -                ///  timer unit1 load low 32 bit
    -                TIMER_UNIT1_LOAD_LO: u32,
    -            }),
    -            ///  SYSTIMER_TARGET0_HI.
    -            TARGET0_HI: mmio.Mmio(packed struct(u32) {
    -                ///  timer taget0 high 32 bit
    -                TIMER_TARGET0_HI: u20,
    -                padding: u12,
    -            }),
    -            ///  SYSTIMER_TARGET0_LO.
    -            TARGET0_LO: mmio.Mmio(packed struct(u32) {
    -                ///  timer taget0 low 32 bit
    -                TIMER_TARGET0_LO: u32,
    -            }),
    -            ///  SYSTIMER_TARGET1_HI.
    -            TARGET1_HI: mmio.Mmio(packed struct(u32) {
    -                ///  timer taget1 high 32 bit
    -                TIMER_TARGET1_HI: u20,
    -                padding: u12,
    -            }),
    -            ///  SYSTIMER_TARGET1_LO.
    -            TARGET1_LO: mmio.Mmio(packed struct(u32) {
    -                ///  timer taget1 low 32 bit
    -                TIMER_TARGET1_LO: u32,
    -            }),
    -            ///  SYSTIMER_TARGET2_HI.
    -            TARGET2_HI: mmio.Mmio(packed struct(u32) {
    -                ///  timer taget2 high 32 bit
    -                TIMER_TARGET2_HI: u20,
    -                padding: u12,
    -            }),
    -            ///  SYSTIMER_TARGET2_LO.
    -            TARGET2_LO: mmio.Mmio(packed struct(u32) {
    -                ///  timer taget2 low 32 bit
    -                TIMER_TARGET2_LO: u32,
    -            }),
    -            ///  SYSTIMER_TARGET0_CONF.
    -            TARGET0_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  target0 period
    -                TARGET0_PERIOD: u26,
    -                reserved30: u4,
    -                ///  Set target0 to period mode
    -                TARGET0_PERIOD_MODE: u1,
    -                ///  select which unit to compare
    -                TARGET0_TIMER_UNIT_SEL: u1,
    -            }),
    -            ///  SYSTIMER_TARGET1_CONF.
    -            TARGET1_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  target1 period
    -                TARGET1_PERIOD: u26,
    -                reserved30: u4,
    -                ///  Set target1 to period mode
    -                TARGET1_PERIOD_MODE: u1,
    -                ///  select which unit to compare
    -                TARGET1_TIMER_UNIT_SEL: u1,
    -            }),
    -            ///  SYSTIMER_TARGET2_CONF.
    -            TARGET2_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  target2 period
    -                TARGET2_PERIOD: u26,
    -                reserved30: u4,
    -                ///  Set target2 to period mode
    -                TARGET2_PERIOD_MODE: u1,
    -                ///  select which unit to compare
    -                TARGET2_TIMER_UNIT_SEL: u1,
    -            }),
    -            ///  SYSTIMER_UNIT0_VALUE_HI.
    -            UNIT0_VALUE_HI: mmio.Mmio(packed struct(u32) {
    -                ///  timer read value high 32bit
    -                TIMER_UNIT0_VALUE_HI: u20,
    -                padding: u12,
    -            }),
    -            ///  SYSTIMER_UNIT0_VALUE_LO.
    -            UNIT0_VALUE_LO: mmio.Mmio(packed struct(u32) {
    -                ///  timer read value low 32bit
    -                TIMER_UNIT0_VALUE_LO: u32,
    -            }),
    -            ///  SYSTIMER_UNIT1_VALUE_HI.
    -            UNIT1_VALUE_HI: mmio.Mmio(packed struct(u32) {
    -                ///  timer read value high 32bit
    -                TIMER_UNIT1_VALUE_HI: u20,
    -                padding: u12,
    -            }),
    -            ///  SYSTIMER_UNIT1_VALUE_LO.
    -            UNIT1_VALUE_LO: mmio.Mmio(packed struct(u32) {
    -                ///  timer read value low 32bit
    -                TIMER_UNIT1_VALUE_LO: u32,
    -            }),
    -            ///  SYSTIMER_COMP0_LOAD.
    -            COMP0_LOAD: mmio.Mmio(packed struct(u32) {
    -                ///  timer comp0 load value
    -                TIMER_COMP0_LOAD: u1,
    -                padding: u31,
    -            }),
    -            ///  SYSTIMER_COMP1_LOAD.
    -            COMP1_LOAD: mmio.Mmio(packed struct(u32) {
    -                ///  timer comp1 load value
    -                TIMER_COMP1_LOAD: u1,
    -                padding: u31,
    -            }),
    -            ///  SYSTIMER_COMP2_LOAD.
    -            COMP2_LOAD: mmio.Mmio(packed struct(u32) {
    -                ///  timer comp2 load value
    -                TIMER_COMP2_LOAD: u1,
    -                padding: u31,
    -            }),
    -            ///  SYSTIMER_UNIT0_LOAD.
    -            UNIT0_LOAD: mmio.Mmio(packed struct(u32) {
    -                ///  timer unit0 load value
    -                TIMER_UNIT0_LOAD: u1,
    -                padding: u31,
    -            }),
    -            ///  SYSTIMER_UNIT1_LOAD.
    -            UNIT1_LOAD: mmio.Mmio(packed struct(u32) {
    -                ///  timer unit1 load value
    -                TIMER_UNIT1_LOAD: u1,
    -                padding: u31,
    -            }),
    -            ///  SYSTIMER_INT_ENA.
    -            INT_ENA: mmio.Mmio(packed struct(u32) {
    -                ///  interupt0 enable
    -                TARGET0_INT_ENA: u1,
    -                ///  interupt1 enable
    -                TARGET1_INT_ENA: u1,
    -                ///  interupt2 enable
    -                TARGET2_INT_ENA: u1,
    -                padding: u29,
    -            }),
    -            ///  SYSTIMER_INT_RAW.
    -            INT_RAW: mmio.Mmio(packed struct(u32) {
    -                ///  interupt0 raw
    -                TARGET0_INT_RAW: u1,
    -                ///  interupt1 raw
    -                TARGET1_INT_RAW: u1,
    -                ///  interupt2 raw
    -                TARGET2_INT_RAW: u1,
    -                padding: u29,
    -            }),
    -            ///  SYSTIMER_INT_CLR.
    -            INT_CLR: mmio.Mmio(packed struct(u32) {
    -                ///  interupt0 clear
    -                TARGET0_INT_CLR: u1,
    -                ///  interupt1 clear
    -                TARGET1_INT_CLR: u1,
    -                ///  interupt2 clear
    -                TARGET2_INT_CLR: u1,
    -                padding: u29,
    -            }),
    -            ///  SYSTIMER_INT_ST.
    -            INT_ST: mmio.Mmio(packed struct(u32) {
    -                ///  reg_target0_int_st
    -                TARGET0_INT_ST: u1,
    -                ///  reg_target1_int_st
    -                TARGET1_INT_ST: u1,
    -                ///  reg_target2_int_st
    -                TARGET2_INT_ST: u1,
    -                padding: u29,
    -            }),
    -            reserved252: [136]u8,
    -            ///  SYSTIMER_DATE.
    -            DATE: mmio.Mmio(packed struct(u32) {
    -                ///  reg_date
    -                DATE: u32,
    -            }),
    -        };
    -
    -        ///  Timer Group
    -        pub const TIMG0 = extern struct {
    -            ///  TIMG_T0CONFIG_REG.
    -            T0CONFIG: mmio.Mmio(packed struct(u32) {
    -                reserved9: u9,
    -                ///  reg_t0_use_xtal.
    -                T0_USE_XTAL: u1,
    -                ///  reg_t0_alarm_en.
    -                T0_ALARM_EN: u1,
    -                reserved12: u1,
    -                ///  reg_t0_divcnt_rst.
    -                T0_DIVCNT_RST: u1,
    -                ///  reg_t0_divider.
    -                T0_DIVIDER: u16,
    -                ///  reg_t0_autoreload.
    -                T0_AUTORELOAD: u1,
    -                ///  reg_t0_increase.
    -                T0_INCREASE: u1,
    -                ///  reg_t0_en.
    -                T0_EN: u1,
    -            }),
    -            ///  TIMG_T0LO_REG.
    -            T0LO: mmio.Mmio(packed struct(u32) {
    -                ///  t0_lo
    -                T0_LO: u32,
    -            }),
    -            ///  TIMG_T0HI_REG.
    -            T0HI: mmio.Mmio(packed struct(u32) {
    -                ///  t0_hi
    -                T0_HI: u22,
    -                padding: u10,
    -            }),
    -            ///  TIMG_T0UPDATE_REG.
    -            T0UPDATE: mmio.Mmio(packed struct(u32) {
    -                reserved31: u31,
    -                ///  t0_update
    -                T0_UPDATE: u1,
    -            }),
    -            ///  TIMG_T0ALARMLO_REG.
    -            T0ALARMLO: mmio.Mmio(packed struct(u32) {
    -                ///  reg_t0_alarm_lo.
    -                T0_ALARM_LO: u32,
    -            }),
    -            ///  TIMG_T0ALARMHI_REG.
    -            T0ALARMHI: mmio.Mmio(packed struct(u32) {
    -                ///  reg_t0_alarm_hi.
    -                T0_ALARM_HI: u22,
    -                padding: u10,
    -            }),
    -            ///  TIMG_T0LOADLO_REG.
    -            T0LOADLO: mmio.Mmio(packed struct(u32) {
    -                ///  reg_t0_load_lo.
    -                T0_LOAD_LO: u32,
    -            }),
    -            ///  TIMG_T0LOADHI_REG.
    -            T0LOADHI: mmio.Mmio(packed struct(u32) {
    -                ///  reg_t0_load_hi.
    -                T0_LOAD_HI: u22,
    -                padding: u10,
    -            }),
    -            ///  TIMG_T0LOAD_REG.
    -            T0LOAD: mmio.Mmio(packed struct(u32) {
    -                ///  t0_load
    -                T0_LOAD: u32,
    -            }),
    -            reserved72: [36]u8,
    -            ///  TIMG_WDTCONFIG0_REG.
    -            WDTCONFIG0: mmio.Mmio(packed struct(u32) {
    -                reserved12: u12,
    -                ///  reg_wdt_appcpu_reset_en.
    -                WDT_APPCPU_RESET_EN: u1,
    -                ///  reg_wdt_procpu_reset_en.
    -                WDT_PROCPU_RESET_EN: u1,
    -                ///  reg_wdt_flashboot_mod_en.
    -                WDT_FLASHBOOT_MOD_EN: u1,
    -                ///  reg_wdt_sys_reset_length.
    -                WDT_SYS_RESET_LENGTH: u3,
    -                ///  reg_wdt_cpu_reset_length.
    -                WDT_CPU_RESET_LENGTH: u3,
    -                ///  reg_wdt_use_xtal.
    -                WDT_USE_XTAL: u1,
    -                ///  reg_wdt_conf_update_en.
    -                WDT_CONF_UPDATE_EN: u1,
    -                ///  reg_wdt_stg3.
    -                WDT_STG3: u2,
    -                ///  reg_wdt_stg2.
    -                WDT_STG2: u2,
    -                ///  reg_wdt_stg1.
    -                WDT_STG1: u2,
    -                ///  reg_wdt_stg0.
    -                WDT_STG0: u2,
    -                ///  reg_wdt_en.
    -                WDT_EN: u1,
    -            }),
    -            ///  TIMG_WDTCONFIG1_REG.
    -            WDTCONFIG1: mmio.Mmio(packed struct(u32) {
    -                ///  reg_wdt_divcnt_rst.
    -                WDT_DIVCNT_RST: u1,
    -                reserved16: u15,
    -                ///  reg_wdt_clk_prescale.
    -                WDT_CLK_PRESCALE: u16,
    -            }),
    -            ///  TIMG_WDTCONFIG2_REG.
    -            WDTCONFIG2: mmio.Mmio(packed struct(u32) {
    -                ///  reg_wdt_stg0_hold.
    -                WDT_STG0_HOLD: u32,
    -            }),
    -            ///  TIMG_WDTCONFIG3_REG.
    -            WDTCONFIG3: mmio.Mmio(packed struct(u32) {
    -                ///  reg_wdt_stg1_hold.
    -                WDT_STG1_HOLD: u32,
    -            }),
    -            ///  TIMG_WDTCONFIG4_REG.
    -            WDTCONFIG4: mmio.Mmio(packed struct(u32) {
    -                ///  reg_wdt_stg2_hold.
    -                WDT_STG2_HOLD: u32,
    -            }),
    -            ///  TIMG_WDTCONFIG5_REG.
    -            WDTCONFIG5: mmio.Mmio(packed struct(u32) {
    -                ///  reg_wdt_stg3_hold.
    -                WDT_STG3_HOLD: u32,
    -            }),
    -            ///  TIMG_WDTFEED_REG.
    -            WDTFEED: mmio.Mmio(packed struct(u32) {
    -                ///  wdt_feed
    -                WDT_FEED: u32,
    -            }),
    -            ///  TIMG_WDTWPROTECT_REG.
    -            WDTWPROTECT: mmio.Mmio(packed struct(u32) {
    -                ///  reg_wdt_wkey.
    -                WDT_WKEY: u32,
    -            }),
    -            ///  TIMG_RTCCALICFG_REG.
    -            RTCCALICFG: mmio.Mmio(packed struct(u32) {
    -                reserved12: u12,
    -                ///  reg_rtc_cali_start_cycling.
    -                RTC_CALI_START_CYCLING: u1,
    -                ///  reg_rtc_cali_clk_sel.0:rtcslowclock.1:clk_80m.2:xtal_32k
    -                RTC_CALI_CLK_SEL: u2,
    -                ///  rtc_cali_rdy
    -                RTC_CALI_RDY: u1,
    -                ///  reg_rtc_cali_max.
    -                RTC_CALI_MAX: u15,
    -                ///  reg_rtc_cali_start.
    -                RTC_CALI_START: u1,
    -            }),
    -            ///  TIMG_RTCCALICFG1_REG.
    -            RTCCALICFG1: mmio.Mmio(packed struct(u32) {
    -                ///  rtc_cali_cycling_data_vld
    -                RTC_CALI_CYCLING_DATA_VLD: u1,
    -                reserved7: u6,
    -                ///  rtc_cali_value
    -                RTC_CALI_VALUE: u25,
    -            }),
    -            ///  INT_ENA_TIMG_REG
    -            INT_ENA_TIMERS: mmio.Mmio(packed struct(u32) {
    -                ///  t0_int_ena
    -                T0_INT_ENA: u1,
    -                ///  wdt_int_ena
    -                WDT_INT_ENA: u1,
    -                padding: u30,
    -            }),
    -            ///  INT_RAW_TIMG_REG
    -            INT_RAW_TIMERS: mmio.Mmio(packed struct(u32) {
    -                ///  t0_int_raw
    -                T0_INT_RAW: u1,
    -                ///  wdt_int_raw
    -                WDT_INT_RAW: u1,
    -                padding: u30,
    -            }),
    -            ///  INT_ST_TIMG_REG
    -            INT_ST_TIMERS: mmio.Mmio(packed struct(u32) {
    -                ///  t0_int_st
    -                T0_INT_ST: u1,
    -                ///  wdt_int_st
    -                WDT_INT_ST: u1,
    -                padding: u30,
    -            }),
    -            ///  INT_CLR_TIMG_REG
    -            INT_CLR_TIMERS: mmio.Mmio(packed struct(u32) {
    -                ///  t0_int_clr
    -                T0_INT_CLR: u1,
    -                ///  wdt_int_clr
    -                WDT_INT_CLR: u1,
    -                padding: u30,
    -            }),
    -            ///  TIMG_RTCCALICFG2_REG.
    -            RTCCALICFG2: mmio.Mmio(packed struct(u32) {
    -                ///  timeoutindicator
    -                RTC_CALI_TIMEOUT: u1,
    -                reserved3: u2,
    -                ///  reg_rtc_cali_timeout_rst_cnt.Cyclesthatreleasecalibrationtimeoutreset
    -                RTC_CALI_TIMEOUT_RST_CNT: u4,
    -                ///  reg_rtc_cali_timeout_thres.timeoutifcalivaluecountsoverthreshold
    -                RTC_CALI_TIMEOUT_THRES: u25,
    -            }),
    -            reserved248: [116]u8,
    -            ///  TIMG_NTIMG_DATE_REG.
    -            NTIMG_DATE: mmio.Mmio(packed struct(u32) {
    -                ///  reg_ntimers_date.
    -                NTIMGS_DATE: u28,
    -                padding: u4,
    -            }),
    -            ///  TIMG_REGCLK_REG.
    -            REGCLK: mmio.Mmio(packed struct(u32) {
    -                reserved29: u29,
    -                ///  reg_wdt_clk_is_active.
    -                WDT_CLK_IS_ACTIVE: u1,
    -                ///  reg_timer_clk_is_active.
    -                TIMER_CLK_IS_ACTIVE: u1,
    -                ///  reg_clk_en.
    -                CLK_EN: u1,
    -            }),
    -        };
    -
    -        ///  XTS-AES-128 Flash Encryption
    -        pub const XTS_AES = extern struct {
    -            ///  The memory that stores plaintext
    -            PLAIN_MEM: [16]u8,
    -            reserved64: [48]u8,
    -            ///  XTS-AES line-size register
    -            LINESIZE: mmio.Mmio(packed struct(u32) {
    -                ///  This bit stores the line size parameter. 0: 16Byte, 1: 32Byte.
    -                LINESIZE: u1,
    -                padding: u31,
    -            }),
    -            ///  XTS-AES destination register
    -            DESTINATION: mmio.Mmio(packed struct(u32) {
    -                ///  This bit stores the destination. 0: flash(default). 1: reserved.
    -                DESTINATION: u1,
    -                padding: u31,
    -            }),
    -            ///  XTS-AES physical address register
    -            PHYSICAL_ADDRESS: mmio.Mmio(packed struct(u32) {
    -                ///  Those bits stores the physical address. If linesize is 16-byte, the physical address should be aligned of 16 bytes. If linesize is 32-byte, the physical address should be aligned of 32 bytes.
    -                PHYSICAL_ADDRESS: u30,
    -                padding: u2,
    -            }),
    -            ///  XTS-AES trigger register
    -            TRIGGER: mmio.Mmio(packed struct(u32) {
    -                ///  Set this bit to start manual encryption calculation
    -                TRIGGER: u1,
    -                padding: u31,
    -            }),
    -            ///  XTS-AES release register
    -            RELEASE: mmio.Mmio(packed struct(u32) {
    -                ///  Set this bit to release the manual encrypted result, after that the result will be visible to spi
    -                RELEASE: u1,
    -                padding: u31,
    -            }),
    -            ///  XTS-AES destroy register
    -            DESTROY: mmio.Mmio(packed struct(u32) {
    -                ///  Set this bit to destroy XTS-AES result.
    -                DESTROY: u1,
    -                padding: u31,
    -            }),
    -            ///  XTS-AES status register
    -            STATE: mmio.Mmio(packed struct(u32) {
    -                ///  Those bits shows XTS-AES status. 0=IDLE, 1=WORK, 2=RELEASE, 3=USE. IDLE means that XTS-AES is idle. WORK means that XTS-AES is busy with calculation. RELEASE means the encrypted result is generated but not visible to mspi. USE means that the encrypted result is visible to mspi.
    -                STATE: u2,
    -                padding: u30,
    -            }),
    -            ///  XTS-AES version control register
    -            DATE: mmio.Mmio(packed struct(u32) {
    -                ///  Those bits stores the version information of XTS-AES.
    -                DATE: u30,
    -                padding: u2,
    -            }),
    -        };
    -
    -        ///  Two-Wire Automotive Interface
    -        pub const TWAI = extern struct {
    -            ///  Mode Register
    -            MODE: mmio.Mmio(packed struct(u32) {
    -                ///  This bit is used to configure the operating mode of the TWAI Controller. 1: Reset mode; 0: Operating mode.
    -                RESET_MODE: u1,
    -                ///  1: Listen only mode. In this mode the nodes will only receive messages from the bus, without generating the acknowledge signal nor updating the RX error counter.
    -                LISTEN_ONLY_MODE: u1,
    -                ///  1: Self test mode. In this mode the TX nodes can perform a successful transmission without receiving the acknowledge signal. This mode is often used to test a single node with the self reception request command.
    -                SELF_TEST_MODE: u1,
    -                ///  This bit is used to configure the filter mode. 0: Dual filter mode; 1: Single filter mode.
    -                RX_FILTER_MODE: u1,
    -                padding: u28,
    -            }),
    -            ///  Command Register
    -            CMD: mmio.Mmio(packed struct(u32) {
    -                ///  Set the bit to 1 to allow the driving nodes start transmission.
    -                TX_REQ: u1,
    -                ///  Set the bit to 1 to cancel a pending transmission request.
    -                ABORT_TX: u1,
    -                ///  Set the bit to 1 to release the RX buffer.
    -                RELEASE_BUF: u1,
    -                ///  Set the bit to 1 to clear the data overrun status bit.
    -                CLR_OVERRUN: u1,
    -                ///  Self reception request command. Set the bit to 1 to allow a message be transmitted and received simultaneously.
    -                SELF_RX_REQ: u1,
    -                padding: u27,
    -            }),
    -            ///  Status register
    -            STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  1: The data in the RX buffer is not empty, with at least one received data packet.
    -                RX_BUF_ST: u1,
    -                ///  1: The RX FIFO is full and data overrun has occurred.
    -                OVERRUN_ST: u1,
    -                ///  1: The TX buffer is empty, the CPU may write a message into it.
    -                TX_BUF_ST: u1,
    -                ///  1: The TWAI controller has successfully received a packet from the bus.
    -                TX_COMPLETE: u1,
    -                ///  1: The TWAI Controller is receiving a message from the bus.
    -                RX_ST: u1,
    -                ///  1: The TWAI Controller is transmitting a message to the bus.
    -                TX_ST: u1,
    -                ///  1: At least one of the RX/TX error counter has reached or exceeded the value set in register TWAI_ERR_WARNING_LIMIT_REG.
    -                ERR_ST: u1,
    -                ///  1: In bus-off status, the TWAI Controller is no longer involved in bus activities.
    -                BUS_OFF_ST: u1,
    -                ///  This bit reflects whether the data packet in the RX FIFO is complete. 1: The current packet is missing; 0: The current packet is complete
    -                MISS_ST: u1,
    -                padding: u23,
    -            }),
    -            ///  Interrupt Register
    -            INT_RAW: mmio.Mmio(packed struct(u32) {
    -                ///  Receive interrupt. If this bit is set to 1, it indicates there are messages to be handled in the RX FIFO.
    -                RX_INT_ST: u1,
    -                ///  Transmit interrupt. If this bit is set to 1, it indicates the message transmitting mis- sion is finished and a new transmission is able to execute.
    -                TX_INT_ST: u1,
    -                ///  Error warning interrupt. If this bit is set to 1, it indicates the error status signal and the bus-off status signal of Status register have changed (e.g., switched from 0 to 1 or from 1 to 0).
    -                ERR_WARN_INT_ST: u1,
    -                ///  Data overrun interrupt. If this bit is set to 1, it indicates a data overrun interrupt is generated in the RX FIFO.
    -                OVERRUN_INT_ST: u1,
    -                reserved5: u1,
    -                ///  Error passive interrupt. If this bit is set to 1, it indicates the TWAI Controller is switched between error active status and error passive status due to the change of error counters.
    -                ERR_PASSIVE_INT_ST: u1,
    -                ///  Arbitration lost interrupt. If this bit is set to 1, it indicates an arbitration lost interrupt is generated.
    -                ARB_LOST_INT_ST: u1,
    -                ///  Error interrupt. If this bit is set to 1, it indicates an error is detected on the bus.
    -                BUS_ERR_INT_ST: u1,
    -                padding: u24,
    -            }),
    -            ///  Interrupt Enable Register
    -            INT_ENA: mmio.Mmio(packed struct(u32) {
    -                ///  Set this bit to 1 to enable receive interrupt.
    -                RX_INT_ENA: u1,
    -                ///  Set this bit to 1 to enable transmit interrupt.
    -                TX_INT_ENA: u1,
    -                ///  Set this bit to 1 to enable error warning interrupt.
    -                ERR_WARN_INT_ENA: u1,
    -                ///  Set this bit to 1 to enable data overrun interrupt.
    -                OVERRUN_INT_ENA: u1,
    -                reserved5: u1,
    -                ///  Set this bit to 1 to enable error passive interrupt.
    -                ERR_PASSIVE_INT_ENA: u1,
    -                ///  Set this bit to 1 to enable arbitration lost interrupt.
    -                ARB_LOST_INT_ENA: u1,
    -                ///  Set this bit to 1 to enable error interrupt.
    -                BUS_ERR_INT_ENA: u1,
    -                padding: u24,
    -            }),
    -            reserved24: [4]u8,
    -            ///  Bus Timing Register 0
    -            BUS_TIMING_0: mmio.Mmio(packed struct(u32) {
    -                ///  Baud Rate Prescaler, determines the frequency dividing ratio.
    -                BAUD_PRESC: u13,
    -                reserved14: u1,
    -                ///  Synchronization Jump Width (SJW), 1 \verb+~+ 14 Tq wide.
    -                SYNC_JUMP_WIDTH: u2,
    -                padding: u16,
    -            }),
    -            ///  Bus Timing Register 1
    -            BUS_TIMING_1: mmio.Mmio(packed struct(u32) {
    -                ///  The width of PBS1.
    -                TIME_SEG1: u4,
    -                ///  The width of PBS2.
    -                TIME_SEG2: u3,
    -                ///  The number of sample points. 0: the bus is sampled once; 1: the bus is sampled three times
    -                TIME_SAMP: u1,
    -                padding: u24,
    -            }),
    -            reserved44: [12]u8,
    -            ///  Arbitration Lost Capture Register
    -            ARB_LOST_CAP: mmio.Mmio(packed struct(u32) {
    -                ///  This register contains information about the bit position of lost arbitration.
    -                ARB_LOST_CAP: u5,
    -                padding: u27,
    -            }),
    -            ///  Error Code Capture Register
    -            ERR_CODE_CAP: mmio.Mmio(packed struct(u32) {
    -                ///  This register contains information about the location of errors, see Table 181 for details.
    -                ECC_SEGMENT: u5,
    -                ///  This register contains information about transmission direction of the node when error occurs. 1: Error occurs when receiving a message; 0: Error occurs when transmitting a message
    -                ECC_DIRECTION: u1,
    -                ///  This register contains information about error types: 00: bit error; 01: form error; 10: stuff error; 11: other type of error
    -                ECC_TYPE: u2,
    -                padding: u24,
    -            }),
    -            ///  Error Warning Limit Register
    -            ERR_WARNING_LIMIT: mmio.Mmio(packed struct(u32) {
    -                ///  Error warning threshold. In the case when any of a error counter value exceeds the threshold, or all the error counter values are below the threshold, an error warning interrupt will be triggered (given the enable signal is valid).
    -                ERR_WARNING_LIMIT: u8,
    -                padding: u24,
    -            }),
    -            ///  Receive Error Counter Register
    -            RX_ERR_CNT: mmio.Mmio(packed struct(u32) {
    -                ///  The RX error counter register, reflects value changes under reception status.
    -                RX_ERR_CNT: u8,
    -                padding: u24,
    -            }),
    -            ///  Transmit Error Counter Register
    -            TX_ERR_CNT: mmio.Mmio(packed struct(u32) {
    -                ///  The TX error counter register, reflects value changes under transmission status.
    -                TX_ERR_CNT: u8,
    -                padding: u24,
    -            }),
    -            ///  Data register 0
    -            DATA_0: mmio.Mmio(packed struct(u32) {
    -                ///  In reset mode, it is acceptance code register 0 with R/W Permission. In operation mode, it stores the 0th byte information of the data to be transmitted under operating mode.
    -                TX_BYTE_0: u8,
    -                padding: u24,
    -            }),
    -            ///  Data register 1
    -            DATA_1: mmio.Mmio(packed struct(u32) {
    -                ///  In reset mode, it is acceptance code register 1 with R/W Permission. In operation mode, it stores the 1st byte information of the data to be transmitted under operating mode.
    -                TX_BYTE_1: u8,
    -                padding: u24,
    -            }),
    -            ///  Data register 2
    -            DATA_2: mmio.Mmio(packed struct(u32) {
    -                ///  In reset mode, it is acceptance code register 2 with R/W Permission. In operation mode, it stores the 2nd byte information of the data to be transmitted under operating mode.
    -                TX_BYTE_2: u8,
    -                padding: u24,
    -            }),
    -            ///  Data register 3
    -            DATA_3: mmio.Mmio(packed struct(u32) {
    -                ///  In reset mode, it is acceptance code register 3 with R/W Permission. In operation mode, it stores the 3rd byte information of the data to be transmitted under operating mode.
    -                TX_BYTE_3: u8,
    -                padding: u24,
    -            }),
    -            ///  Data register 4
    -            DATA_4: mmio.Mmio(packed struct(u32) {
    -                ///  In reset mode, it is acceptance mask register 0 with R/W Permission. In operation mode, it stores the 4th byte information of the data to be transmitted under operating mode.
    -                TX_BYTE_4: u8,
    -                padding: u24,
    -            }),
    -            ///  Data register 5
    -            DATA_5: mmio.Mmio(packed struct(u32) {
    -                ///  In reset mode, it is acceptance mask register 1 with R/W Permission. In operation mode, it stores the 5th byte information of the data to be transmitted under operating mode.
    -                TX_BYTE_5: u8,
    -                padding: u24,
    -            }),
    -            ///  Data register 6
    -            DATA_6: mmio.Mmio(packed struct(u32) {
    -                ///  In reset mode, it is acceptance mask register 2 with R/W Permission. In operation mode, it stores the 6th byte information of the data to be transmitted under operating mode.
    -                TX_BYTE_6: u8,
    -                padding: u24,
    -            }),
    -            ///  Data register 7
    -            DATA_7: mmio.Mmio(packed struct(u32) {
    -                ///  In reset mode, it is acceptance mask register 3 with R/W Permission. In operation mode, it stores the 7th byte information of the data to be transmitted under operating mode.
    -                TX_BYTE_7: u8,
    -                padding: u24,
    -            }),
    -            ///  Data register 8
    -            DATA_8: mmio.Mmio(packed struct(u32) {
    -                ///  Stored the 8th byte information of the data to be transmitted under operating mode.
    -                TX_BYTE_8: u8,
    -                padding: u24,
    -            }),
    -            ///  Data register 9
    -            DATA_9: mmio.Mmio(packed struct(u32) {
    -                ///  Stored the 9th byte information of the data to be transmitted under operating mode.
    -                TX_BYTE_9: u8,
    -                padding: u24,
    -            }),
    -            ///  Data register 10
    -            DATA_10: mmio.Mmio(packed struct(u32) {
    -                ///  Stored the 10th byte information of the data to be transmitted under operating mode.
    -                TX_BYTE_10: u8,
    -                padding: u24,
    -            }),
    -            ///  Data register 11
    -            DATA_11: mmio.Mmio(packed struct(u32) {
    -                ///  Stored the 11th byte information of the data to be transmitted under operating mode.
    -                TX_BYTE_11: u8,
    -                padding: u24,
    -            }),
    -            ///  Data register 12
    -            DATA_12: mmio.Mmio(packed struct(u32) {
    -                ///  Stored the 12th byte information of the data to be transmitted under operating mode.
    -                TX_BYTE_12: u8,
    -                padding: u24,
    -            }),
    -            ///  Receive Message Counter Register
    -            RX_MESSAGE_CNT: mmio.Mmio(packed struct(u32) {
    -                ///  This register reflects the number of messages available within the RX FIFO.
    -                RX_MESSAGE_COUNTER: u7,
    -                padding: u25,
    -            }),
    -            reserved124: [4]u8,
    -            ///  Clock Divider register
    -            CLOCK_DIVIDER: mmio.Mmio(packed struct(u32) {
    -                ///  These bits are used to configure frequency dividing coefficients of the external CLKOUT pin.
    -                CD: u8,
    -                ///  This bit can be configured under reset mode. 1: Disable the external CLKOUT pin; 0: Enable the external CLKOUT pin
    -                CLOCK_OFF: u1,
    -                padding: u23,
    -            }),
    -        };
    -
    -        ///  UART (Universal Asynchronous Receiver-Transmitter) Controller
    -        pub const UART0 = extern struct {
    -            ///  FIFO data register
    -            FIFO: mmio.Mmio(packed struct(u32) {
    -                ///  UART 0 accesses FIFO via this register.
    -                RXFIFO_RD_BYTE: u8,
    -                padding: u24,
    -            }),
    -            ///  Raw interrupt status
    -            INT_RAW: mmio.Mmio(packed struct(u32) {
    -                ///  This interrupt raw bit turns to high level when receiver receives more data than what rxfifo_full_thrhd specifies.
    -                RXFIFO_FULL_INT_RAW: u1,
    -                ///  This interrupt raw bit turns to high level when the amount of data in Tx-FIFO is less than what txfifo_empty_thrhd specifies .
    -                TXFIFO_EMPTY_INT_RAW: u1,
    -                ///  This interrupt raw bit turns to high level when receiver detects a parity error in the data.
    -                PARITY_ERR_INT_RAW: u1,
    -                ///  This interrupt raw bit turns to high level when receiver detects a data frame error .
    -                FRM_ERR_INT_RAW: u1,
    -                ///  This interrupt raw bit turns to high level when receiver receives more data than the FIFO can store.
    -                RXFIFO_OVF_INT_RAW: u1,
    -                ///  This interrupt raw bit turns to high level when receiver detects the edge change of DSRn signal.
    -                DSR_CHG_INT_RAW: u1,
    -                ///  This interrupt raw bit turns to high level when receiver detects the edge change of CTSn signal.
    -                CTS_CHG_INT_RAW: u1,
    -                ///  This interrupt raw bit turns to high level when receiver detects a 0 after the stop bit.
    -                BRK_DET_INT_RAW: u1,
    -                ///  This interrupt raw bit turns to high level when receiver takes more time than rx_tout_thrhd to receive a byte.
    -                RXFIFO_TOUT_INT_RAW: u1,
    -                ///  This interrupt raw bit turns to high level when receiver recevies Xon char when uart_sw_flow_con_en is set to 1.
    -                SW_XON_INT_RAW: u1,
    -                ///  This interrupt raw bit turns to high level when receiver receives Xoff char when uart_sw_flow_con_en is set to 1.
    -                SW_XOFF_INT_RAW: u1,
    -                ///  This interrupt raw bit turns to high level when receiver detects a glitch in the middle of a start bit.
    -                GLITCH_DET_INT_RAW: u1,
    -                ///  This interrupt raw bit turns to high level when transmitter completes sending NULL characters, after all data in Tx-FIFO are sent.
    -                TX_BRK_DONE_INT_RAW: u1,
    -                ///  This interrupt raw bit turns to high level when transmitter has kept the shortest duration after sending the last data.
    -                TX_BRK_IDLE_DONE_INT_RAW: u1,
    -                ///  This interrupt raw bit turns to high level when transmitter has send out all data in FIFO.
    -                TX_DONE_INT_RAW: u1,
    -                ///  This interrupt raw bit turns to high level when receiver detects a parity error from the echo of transmitter in rs485 mode.
    -                RS485_PARITY_ERR_INT_RAW: u1,
    -                ///  This interrupt raw bit turns to high level when receiver detects a data frame error from the echo of transmitter in rs485 mode.
    -                RS485_FRM_ERR_INT_RAW: u1,
    -                ///  This interrupt raw bit turns to high level when detects a clash between transmitter and receiver in rs485 mode.
    -                RS485_CLASH_INT_RAW: u1,
    -                ///  This interrupt raw bit turns to high level when receiver detects the configured at_cmd char.
    -                AT_CMD_CHAR_DET_INT_RAW: u1,
    -                ///  This interrupt raw bit turns to high level when input rxd edge changes more times than what reg_active_threshold specifies in light sleeping mode.
    -                WAKEUP_INT_RAW: u1,
    -                padding: u12,
    -            }),
    -            ///  Masked interrupt status
    -            INT_ST: mmio.Mmio(packed struct(u32) {
    -                ///  This is the status bit for rxfifo_full_int_raw when rxfifo_full_int_ena is set to 1.
    -                RXFIFO_FULL_INT_ST: u1,
    -                ///  This is the status bit for txfifo_empty_int_raw when txfifo_empty_int_ena is set to 1.
    -                TXFIFO_EMPTY_INT_ST: u1,
    -                ///  This is the status bit for parity_err_int_raw when parity_err_int_ena is set to 1.
    -                PARITY_ERR_INT_ST: u1,
    -                ///  This is the status bit for frm_err_int_raw when frm_err_int_ena is set to 1.
    -                FRM_ERR_INT_ST: u1,
    -                ///  This is the status bit for rxfifo_ovf_int_raw when rxfifo_ovf_int_ena is set to 1.
    -                RXFIFO_OVF_INT_ST: u1,
    -                ///  This is the status bit for dsr_chg_int_raw when dsr_chg_int_ena is set to 1.
    -                DSR_CHG_INT_ST: u1,
    -                ///  This is the status bit for cts_chg_int_raw when cts_chg_int_ena is set to 1.
    -                CTS_CHG_INT_ST: u1,
    -                ///  This is the status bit for brk_det_int_raw when brk_det_int_ena is set to 1.
    -                BRK_DET_INT_ST: u1,
    -                ///  This is the status bit for rxfifo_tout_int_raw when rxfifo_tout_int_ena is set to 1.
    -                RXFIFO_TOUT_INT_ST: u1,
    -                ///  This is the status bit for sw_xon_int_raw when sw_xon_int_ena is set to 1.
    -                SW_XON_INT_ST: u1,
    -                ///  This is the status bit for sw_xoff_int_raw when sw_xoff_int_ena is set to 1.
    -                SW_XOFF_INT_ST: u1,
    -                ///  This is the status bit for glitch_det_int_raw when glitch_det_int_ena is set to 1.
    -                GLITCH_DET_INT_ST: u1,
    -                ///  This is the status bit for tx_brk_done_int_raw when tx_brk_done_int_ena is set to 1.
    -                TX_BRK_DONE_INT_ST: u1,
    -                ///  This is the stauts bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena is set to 1.
    -                TX_BRK_IDLE_DONE_INT_ST: u1,
    -                ///  This is the status bit for tx_done_int_raw when tx_done_int_ena is set to 1.
    -                TX_DONE_INT_ST: u1,
    -                ///  This is the status bit for rs485_parity_err_int_raw when rs485_parity_int_ena is set to 1.
    -                RS485_PARITY_ERR_INT_ST: u1,
    -                ///  This is the status bit for rs485_frm_err_int_raw when rs485_fm_err_int_ena is set to 1.
    -                RS485_FRM_ERR_INT_ST: u1,
    -                ///  This is the status bit for rs485_clash_int_raw when rs485_clash_int_ena is set to 1.
    -                RS485_CLASH_INT_ST: u1,
    -                ///  This is the status bit for at_cmd_det_int_raw when at_cmd_char_det_int_ena is set to 1.
    -                AT_CMD_CHAR_DET_INT_ST: u1,
    -                ///  This is the status bit for uart_wakeup_int_raw when uart_wakeup_int_ena is set to 1.
    -                WAKEUP_INT_ST: u1,
    -                padding: u12,
    -            }),
    -            ///  Interrupt enable bits
    -            INT_ENA: mmio.Mmio(packed struct(u32) {
    -                ///  This is the enable bit for rxfifo_full_int_st register.
    -                RXFIFO_FULL_INT_ENA: u1,
    -                ///  This is the enable bit for txfifo_empty_int_st register.
    -                TXFIFO_EMPTY_INT_ENA: u1,
    -                ///  This is the enable bit for parity_err_int_st register.
    -                PARITY_ERR_INT_ENA: u1,
    -                ///  This is the enable bit for frm_err_int_st register.
    -                FRM_ERR_INT_ENA: u1,
    -                ///  This is the enable bit for rxfifo_ovf_int_st register.
    -                RXFIFO_OVF_INT_ENA: u1,
    -                ///  This is the enable bit for dsr_chg_int_st register.
    -                DSR_CHG_INT_ENA: u1,
    -                ///  This is the enable bit for cts_chg_int_st register.
    -                CTS_CHG_INT_ENA: u1,
    -                ///  This is the enable bit for brk_det_int_st register.
    -                BRK_DET_INT_ENA: u1,
    -                ///  This is the enable bit for rxfifo_tout_int_st register.
    -                RXFIFO_TOUT_INT_ENA: u1,
    -                ///  This is the enable bit for sw_xon_int_st register.
    -                SW_XON_INT_ENA: u1,
    -                ///  This is the enable bit for sw_xoff_int_st register.
    -                SW_XOFF_INT_ENA: u1,
    -                ///  This is the enable bit for glitch_det_int_st register.
    -                GLITCH_DET_INT_ENA: u1,
    -                ///  This is the enable bit for tx_brk_done_int_st register.
    -                TX_BRK_DONE_INT_ENA: u1,
    -                ///  This is the enable bit for tx_brk_idle_done_int_st register.
    -                TX_BRK_IDLE_DONE_INT_ENA: u1,
    -                ///  This is the enable bit for tx_done_int_st register.
    -                TX_DONE_INT_ENA: u1,
    -                ///  This is the enable bit for rs485_parity_err_int_st register.
    -                RS485_PARITY_ERR_INT_ENA: u1,
    -                ///  This is the enable bit for rs485_parity_err_int_st register.
    -                RS485_FRM_ERR_INT_ENA: u1,
    -                ///  This is the enable bit for rs485_clash_int_st register.
    -                RS485_CLASH_INT_ENA: u1,
    -                ///  This is the enable bit for at_cmd_char_det_int_st register.
    -                AT_CMD_CHAR_DET_INT_ENA: u1,
    -                ///  This is the enable bit for uart_wakeup_int_st register.
    -                WAKEUP_INT_ENA: u1,
    -                padding: u12,
    -            }),
    -            ///  Interrupt clear bits
    -            INT_CLR: mmio.Mmio(packed struct(u32) {
    -                ///  Set this bit to clear the rxfifo_full_int_raw interrupt.
    -                RXFIFO_FULL_INT_CLR: u1,
    -                ///  Set this bit to clear txfifo_empty_int_raw interrupt.
    -                TXFIFO_EMPTY_INT_CLR: u1,
    -                ///  Set this bit to clear parity_err_int_raw interrupt.
    -                PARITY_ERR_INT_CLR: u1,
    -                ///  Set this bit to clear frm_err_int_raw interrupt.
    -                FRM_ERR_INT_CLR: u1,
    -                ///  Set this bit to clear rxfifo_ovf_int_raw interrupt.
    -                RXFIFO_OVF_INT_CLR: u1,
    -                ///  Set this bit to clear the dsr_chg_int_raw interrupt.
    -                DSR_CHG_INT_CLR: u1,
    -                ///  Set this bit to clear the cts_chg_int_raw interrupt.
    -                CTS_CHG_INT_CLR: u1,
    -                ///  Set this bit to clear the brk_det_int_raw interrupt.
    -                BRK_DET_INT_CLR: u1,
    -                ///  Set this bit to clear the rxfifo_tout_int_raw interrupt.
    -                RXFIFO_TOUT_INT_CLR: u1,
    -                ///  Set this bit to clear the sw_xon_int_raw interrupt.
    -                SW_XON_INT_CLR: u1,
    -                ///  Set this bit to clear the sw_xoff_int_raw interrupt.
    -                SW_XOFF_INT_CLR: u1,
    -                ///  Set this bit to clear the glitch_det_int_raw interrupt.
    -                GLITCH_DET_INT_CLR: u1,
    -                ///  Set this bit to clear the tx_brk_done_int_raw interrupt..
    -                TX_BRK_DONE_INT_CLR: u1,
    -                ///  Set this bit to clear the tx_brk_idle_done_int_raw interrupt.
    -                TX_BRK_IDLE_DONE_INT_CLR: u1,
    -                ///  Set this bit to clear the tx_done_int_raw interrupt.
    -                TX_DONE_INT_CLR: u1,
    -                ///  Set this bit to clear the rs485_parity_err_int_raw interrupt.
    -                RS485_PARITY_ERR_INT_CLR: u1,
    -                ///  Set this bit to clear the rs485_frm_err_int_raw interrupt.
    -                RS485_FRM_ERR_INT_CLR: u1,
    -                ///  Set this bit to clear the rs485_clash_int_raw interrupt.
    -                RS485_CLASH_INT_CLR: u1,
    -                ///  Set this bit to clear the at_cmd_char_det_int_raw interrupt.
    -                AT_CMD_CHAR_DET_INT_CLR: u1,
    -                ///  Set this bit to clear the uart_wakeup_int_raw interrupt.
    -                WAKEUP_INT_CLR: u1,
    -                padding: u12,
    -            }),
    -            ///  Clock divider configuration
    -            CLKDIV: mmio.Mmio(packed struct(u32) {
    -                ///  The integral part of the frequency divider factor.
    -                CLKDIV: u12,
    -                reserved20: u8,
    -                ///  The decimal part of the frequency divider factor.
    -                FRAG: u4,
    -                padding: u8,
    -            }),
    -            ///  Rx Filter configuration
    -            RX_FILT: mmio.Mmio(packed struct(u32) {
    -                ///  when input pulse width is lower than this value, the pulse is ignored.
    -                GLITCH_FILT: u8,
    -                ///  Set this bit to enable Rx signal filter.
    -                GLITCH_FILT_EN: u1,
    -                padding: u23,
    -            }),
    -            ///  UART status register
    -            STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  Stores the byte number of valid data in Rx-FIFO.
    -                RXFIFO_CNT: u10,
    -                reserved13: u3,
    -                ///  The register represent the level value of the internal uart dsr signal.
    -                DSRN: u1,
    -                ///  This register represent the level value of the internal uart cts signal.
    -                CTSN: u1,
    -                ///  This register represent the level value of the internal uart rxd signal.
    -                RXD: u1,
    -                ///  Stores the byte number of data in Tx-FIFO.
    -                TXFIFO_CNT: u10,
    -                reserved29: u3,
    -                ///  This bit represents the level of the internal uart dtr signal.
    -                DTRN: u1,
    -                ///  This bit represents the level of the internal uart rts signal.
    -                RTSN: u1,
    -                ///  This bit represents the level of the internal uart txd signal.
    -                TXD: u1,
    -            }),
    -            ///  a
    -            CONF0: mmio.Mmio(packed struct(u32) {
    -                ///  This register is used to configure the parity check mode.
    -                PARITY: u1,
    -                ///  Set this bit to enable uart parity check.
    -                PARITY_EN: u1,
    -                ///  This register is used to set the length of data.
    -                BIT_NUM: u2,
    -                ///  This register is used to set the length of stop bit.
    -                STOP_BIT_NUM: u2,
    -                ///  This register is used to configure the software rts signal which is used in software flow control.
    -                SW_RTS: u1,
    -                ///  This register is used to configure the software dtr signal which is used in software flow control.
    -                SW_DTR: u1,
    -                ///  Set this bit to enbale transmitter to send NULL when the process of sending data is done.
    -                TXD_BRK: u1,
    -                ///  Set this bit to enable IrDA loopback mode.
    -                IRDA_DPLX: u1,
    -                ///  This is the start enable bit for IrDA transmitter.
    -                IRDA_TX_EN: u1,
    -                ///  1'h1: The IrDA transmitter's 11th bit is the same as 10th bit. 1'h0: Set IrDA transmitter's 11th bit to 0.
    -                IRDA_WCTL: u1,
    -                ///  Set this bit to invert the level of IrDA transmitter.
    -                IRDA_TX_INV: u1,
    -                ///  Set this bit to invert the level of IrDA receiver.
    -                IRDA_RX_INV: u1,
    -                ///  Set this bit to enable uart loopback test mode.
    -                LOOPBACK: u1,
    -                ///  Set this bit to enable flow control function for transmitter.
    -                TX_FLOW_EN: u1,
    -                ///  Set this bit to enable IrDA protocol.
    -                IRDA_EN: u1,
    -                ///  Set this bit to reset the uart receive-FIFO.
    -                RXFIFO_RST: u1,
    -                ///  Set this bit to reset the uart transmit-FIFO.
    -                TXFIFO_RST: u1,
    -                ///  Set this bit to inverse the level value of uart rxd signal.
    -                RXD_INV: u1,
    -                ///  Set this bit to inverse the level value of uart cts signal.
    -                CTS_INV: u1,
    -                ///  Set this bit to inverse the level value of uart dsr signal.
    -                DSR_INV: u1,
    -                ///  Set this bit to inverse the level value of uart txd signal.
    -                TXD_INV: u1,
    -                ///  Set this bit to inverse the level value of uart rts signal.
    -                RTS_INV: u1,
    -                ///  Set this bit to inverse the level value of uart dtr signal.
    -                DTR_INV: u1,
    -                ///  1'h1: Force clock on for register. 1'h0: Support clock only when application writes registers.
    -                CLK_EN: u1,
    -                ///  1'h1: Receiver stops storing data into FIFO when data is wrong. 1'h0: Receiver stores the data even if the received data is wrong.
    -                ERR_WR_MASK: u1,
    -                ///  This is the enable bit for detecting baudrate.
    -                AUTOBAUD_EN: u1,
    -                ///  UART memory clock gate enable signal.
    -                MEM_CLK_EN: u1,
    -                padding: u3,
    -            }),
    -            ///  Configuration register 1
    -            CONF1: mmio.Mmio(packed struct(u32) {
    -                ///  It will produce rxfifo_full_int interrupt when receiver receives more data than this register value.
    -                RXFIFO_FULL_THRHD: u9,
    -                ///  It will produce txfifo_empty_int interrupt when the data amount in Tx-FIFO is less than this register value.
    -                TXFIFO_EMPTY_THRHD: u9,
    -                ///  Disable UART Rx data overflow detect.
    -                DIS_RX_DAT_OVF: u1,
    -                ///  Set this bit to stop accumulating idle_cnt when hardware flow control works.
    -                RX_TOUT_FLOW_DIS: u1,
    -                ///  This is the flow enable bit for UART receiver.
    -                RX_FLOW_EN: u1,
    -                ///  This is the enble bit for uart receiver's timeout function.
    -                RX_TOUT_EN: u1,
    -                padding: u10,
    -            }),
    -            ///  Autobaud minimum low pulse duration register
    -            LOWPULSE: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the value of the minimum duration time of the low level pulse. It is used in baud rate-detect process.
    -                MIN_CNT: u12,
    -                padding: u20,
    -            }),
    -            ///  Autobaud minimum high pulse duration register
    -            HIGHPULSE: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the value of the maxinum duration time for the high level pulse. It is used in baud rate-detect process.
    -                MIN_CNT: u12,
    -                padding: u20,
    -            }),
    -            ///  Autobaud edge change count register
    -            RXD_CNT: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the count of rxd edge change. It is used in baud rate-detect process.
    -                RXD_EDGE_CNT: u10,
    -                padding: u22,
    -            }),
    -            ///  Software flow-control configuration
    -            FLOW_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  Set this bit to enable software flow control. It is used with register sw_xon or sw_xoff.
    -                SW_FLOW_CON_EN: u1,
    -                ///  Set this bit to remove flow control char from the received data.
    -                XONOFF_DEL: u1,
    -                ///  Set this bit to enable the transmitter to go on sending data.
    -                FORCE_XON: u1,
    -                ///  Set this bit to stop the transmitter from sending data.
    -                FORCE_XOFF: u1,
    -                ///  Set this bit to send Xon char. It is cleared by hardware automatically.
    -                SEND_XON: u1,
    -                ///  Set this bit to send Xoff char. It is cleared by hardware automatically.
    -                SEND_XOFF: u1,
    -                padding: u26,
    -            }),
    -            ///  Sleep-mode configuration
    -            SLEEP_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  The uart is activated from light sleeping mode when the input rxd edge changes more times than this register value.
    -                ACTIVE_THRESHOLD: u10,
    -                padding: u22,
    -            }),
    -            ///  Software flow-control character configuration
    -            SWFC_CONF0: mmio.Mmio(packed struct(u32) {
    -                ///  When the data amount in Rx-FIFO is more than this register value with uart_sw_flow_con_en set to 1, it will send a Xoff char.
    -                XOFF_THRESHOLD: u9,
    -                ///  This register stores the Xoff flow control char.
    -                XOFF_CHAR: u8,
    -                padding: u15,
    -            }),
    -            ///  Software flow-control character configuration
    -            SWFC_CONF1: mmio.Mmio(packed struct(u32) {
    -                ///  When the data amount in Rx-FIFO is less than this register value with uart_sw_flow_con_en set to 1, it will send a Xon char.
    -                XON_THRESHOLD: u9,
    -                ///  This register stores the Xon flow control char.
    -                XON_CHAR: u8,
    -                padding: u15,
    -            }),
    -            ///  Tx Break character configuration
    -            TXBRK_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  This register is used to configure the number of 0 to be sent after the process of sending data is done. It is active when txd_brk is set to 1.
    -                TX_BRK_NUM: u8,
    -                padding: u24,
    -            }),
    -            ///  Frame-end idle configuration
    -            IDLE_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  It will produce frame end signal when receiver takes more time to receive one byte data than this register value.
    -                RX_IDLE_THRHD: u10,
    -                ///  This register is used to configure the duration time between transfers.
    -                TX_IDLE_NUM: u10,
    -                padding: u12,
    -            }),
    -            ///  RS485 mode configuration
    -            RS485_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  Set this bit to choose the rs485 mode.
    -                RS485_EN: u1,
    -                ///  Set this bit to delay the stop bit by 1 bit.
    -                DL0_EN: u1,
    -                ///  Set this bit to delay the stop bit by 1 bit.
    -                DL1_EN: u1,
    -                ///  Set this bit to enable receiver could receive data when the transmitter is transmitting data in rs485 mode.
    -                RS485TX_RX_EN: u1,
    -                ///  1'h1: enable rs485 transmitter to send data when rs485 receiver line is busy.
    -                RS485RXBY_TX_EN: u1,
    -                ///  This register is used to delay the receiver's internal data signal.
    -                RS485_RX_DLY_NUM: u1,
    -                ///  This register is used to delay the transmitter's internal data signal.
    -                RS485_TX_DLY_NUM: u4,
    -                padding: u22,
    -            }),
    -            ///  Pre-sequence timing configuration
    -            AT_CMD_PRECNT: mmio.Mmio(packed struct(u32) {
    -                ///  This register is used to configure the idle duration time before the first at_cmd is received by receiver.
    -                PRE_IDLE_NUM: u16,
    -                padding: u16,
    -            }),
    -            ///  Post-sequence timing configuration
    -            AT_CMD_POSTCNT: mmio.Mmio(packed struct(u32) {
    -                ///  This register is used to configure the duration time between the last at_cmd and the next data.
    -                POST_IDLE_NUM: u16,
    -                padding: u16,
    -            }),
    -            ///  Timeout configuration
    -            AT_CMD_GAPTOUT: mmio.Mmio(packed struct(u32) {
    -                ///  This register is used to configure the duration time between the at_cmd chars.
    -                RX_GAP_TOUT: u16,
    -                padding: u16,
    -            }),
    -            ///  AT escape sequence detection configuration
    -            AT_CMD_CHAR: mmio.Mmio(packed struct(u32) {
    -                ///  This register is used to configure the content of at_cmd char.
    -                AT_CMD_CHAR: u8,
    -                ///  This register is used to configure the num of continuous at_cmd chars received by receiver.
    -                CHAR_NUM: u8,
    -                padding: u16,
    -            }),
    -            ///  UART threshold and allocation configuration
    -            MEM_CONF: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  This register is used to configure the amount of mem allocated for receive-FIFO. The default number is 128 bytes.
    -                RX_SIZE: u3,
    -                ///  This register is used to configure the amount of mem allocated for transmit-FIFO. The default number is 128 bytes.
    -                TX_SIZE: u3,
    -                ///  This register is used to configure the maximum amount of data that can be received when hardware flow control works.
    -                RX_FLOW_THRHD: u9,
    -                ///  This register is used to configure the threshold time that receiver takes to receive one byte. The rxfifo_tout_int interrupt will be trigger when the receiver takes more time to receive one byte with rx_tout_en set to 1.
    -                RX_TOUT_THRHD: u10,
    -                ///  Set this bit to force power down UART memory.
    -                MEM_FORCE_PD: u1,
    -                ///  Set this bit to force power up UART memory.
    -                MEM_FORCE_PU: u1,
    -                padding: u4,
    -            }),
    -            ///  Tx-FIFO write and read offset address.
    -            MEM_TX_STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the offset address in Tx-FIFO when software writes Tx-FIFO via APB.
    -                APB_TX_WADDR: u10,
    -                reserved11: u1,
    -                ///  This register stores the offset address in Tx-FIFO when Tx-FSM reads data via Tx-FIFO_Ctrl.
    -                TX_RADDR: u10,
    -                padding: u11,
    -            }),
    -            ///  Rx-FIFO write and read offset address.
    -            MEM_RX_STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the offset address in RX-FIFO when software reads data from Rx-FIFO via APB. UART0 is 10'h100. UART1 is 10'h180.
    -                APB_RX_RADDR: u10,
    -                reserved11: u1,
    -                ///  This register stores the offset address in Rx-FIFO when Rx-FIFO_Ctrl writes Rx-FIFO. UART0 is 10'h100. UART1 is 10'h180.
    -                RX_WADDR: u10,
    -                padding: u11,
    -            }),
    -            ///  UART transmit and receive status.
    -            FSM_STATUS: mmio.Mmio(packed struct(u32) {
    -                ///  This is the status register of receiver.
    -                ST_URX_OUT: u4,
    -                ///  This is the status register of transmitter.
    -                ST_UTX_OUT: u4,
    -                padding: u24,
    -            }),
    -            ///  Autobaud high pulse register
    -            POSPULSE: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the minimal input clock count between two positive edges. It is used in boudrate-detect process.
    -                POSEDGE_MIN_CNT: u12,
    -                padding: u20,
    -            }),
    -            ///  Autobaud low pulse register
    -            NEGPULSE: mmio.Mmio(packed struct(u32) {
    -                ///  This register stores the minimal input clock count between two negative edges. It is used in boudrate-detect process.
    -                NEGEDGE_MIN_CNT: u12,
    -                padding: u20,
    -            }),
    -            ///  UART core clock configuration
    -            CLK_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  The denominator of the frequency divider factor.
    -                SCLK_DIV_B: u6,
    -                ///  The numerator of the frequency divider factor.
    -                SCLK_DIV_A: u6,
    -                ///  The integral part of the frequency divider factor.
    -                SCLK_DIV_NUM: u8,
    -                ///  UART clock source select. 1: 80Mhz, 2: 8Mhz, 3: XTAL.
    -                SCLK_SEL: u2,
    -                ///  Set this bit to enable UART Tx/Rx clock.
    -                SCLK_EN: u1,
    -                ///  Write 1 then write 0 to this bit, reset UART Tx/Rx.
    -                RST_CORE: u1,
    -                ///  Set this bit to enable UART Tx clock.
    -                TX_SCLK_EN: u1,
    -                ///  Set this bit to enable UART Rx clock.
    -                RX_SCLK_EN: u1,
    -                ///  Write 1 then write 0 to this bit, reset UART Tx.
    -                TX_RST_CORE: u1,
    -                ///  Write 1 then write 0 to this bit, reset UART Rx.
    -                RX_RST_CORE: u1,
    -                padding: u4,
    -            }),
    -            ///  UART Version register
    -            DATE: mmio.Mmio(packed struct(u32) {
    -                ///  This is the version register.
    -                DATE: u32,
    -            }),
    -            ///  UART ID register
    -            ID: mmio.Mmio(packed struct(u32) {
    -                ///  This register is used to configure the uart_id.
    -                ID: u30,
    -                ///  This bit used to select synchronize mode. 1: Registers are auto synchronized into UART Core clock and UART core should be keep the same with APB clock. 0: After configure registers, software needs to write 1 to UART_REG_UPDATE to synchronize registers.
    -                HIGH_SPEED: u1,
    -                ///  Software write 1 would synchronize registers into UART Core clock domain and would be cleared by hardware after synchronization is done.
    -                REG_UPDATE: u1,
    -            }),
    -        };
    -
    -        ///  Full-speed USB Serial/JTAG Controller
    -        pub const USB_DEVICE = extern struct {
    -            ///  USB_DEVICE_EP1_REG.
    -            EP1: mmio.Mmio(packed struct(u32) {
    -                ///  Write and read byte data to/from UART Tx/Rx FIFO through this field. When USB_DEVICE_SERIAL_IN_EMPTY_INT is set, then user can write data (up to 64 bytes) into UART Tx FIFO. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is set, user can check USB_DEVICE_OUT_EP1_WR_ADDR USB_DEVICE_OUT_EP0_RD_ADDR to know how many data is received, then read data from UART Rx FIFO.
    -                RDWR_BYTE: u8,
    -                padding: u24,
    -            }),
    -            ///  USB_DEVICE_EP1_CONF_REG.
    -            EP1_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  Set this bit to indicate writing byte data to UART Tx FIFO is done.
    -                WR_DONE: u1,
    -                ///  1'b1: Indicate UART Tx FIFO is not full and can write data into in. After writing USB_DEVICE_WR_DONE, this bit would be 0 until data in UART Tx FIFO is read by USB Host.
    -                SERIAL_IN_EP_DATA_FREE: u1,
    -                ///  1'b1: Indicate there is data in UART Rx FIFO.
    -                SERIAL_OUT_EP_DATA_AVAIL: u1,
    -                padding: u29,
    -            }),
    -            ///  USB_DEVICE_INT_RAW_REG.
    -            INT_RAW: mmio.Mmio(packed struct(u32) {
    -                ///  The raw interrupt bit turns to high level when flush cmd is received for IN endpoint 2 of JTAG.
    -                JTAG_IN_FLUSH_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when SOF frame is received.
    -                SOF_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when Serial Port OUT Endpoint received one packet.
    -                SERIAL_OUT_RECV_PKT_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when Serial Port IN Endpoint is empty.
    -                SERIAL_IN_EMPTY_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when pid error is detected.
    -                PID_ERR_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when CRC5 error is detected.
    -                CRC5_ERR_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when CRC16 error is detected.
    -                CRC16_ERR_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when stuff error is detected.
    -                STUFF_ERR_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when IN token for IN endpoint 1 is received.
    -                IN_TOKEN_REC_IN_EP1_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when usb bus reset is detected.
    -                USB_BUS_RESET_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when OUT endpoint 1 received packet with zero palyload.
    -                OUT_EP1_ZERO_PAYLOAD_INT_RAW: u1,
    -                ///  The raw interrupt bit turns to high level when OUT endpoint 2 received packet with zero palyload.
    -                OUT_EP2_ZERO_PAYLOAD_INT_RAW: u1,
    -                padding: u20,
    -            }),
    -            ///  USB_DEVICE_INT_ST_REG.
    -            INT_ST: mmio.Mmio(packed struct(u32) {
    -                ///  The raw interrupt status bit for the USB_DEVICE_JTAG_IN_FLUSH_INT interrupt.
    -                JTAG_IN_FLUSH_INT_ST: u1,
    -                ///  The raw interrupt status bit for the USB_DEVICE_SOF_INT interrupt.
    -                SOF_INT_ST: u1,
    -                ///  The raw interrupt status bit for the USB_DEVICE_SERIAL_OUT_RECV_PKT_INT interrupt.
    -                SERIAL_OUT_RECV_PKT_INT_ST: u1,
    -                ///  The raw interrupt status bit for the USB_DEVICE_SERIAL_IN_EMPTY_INT interrupt.
    -                SERIAL_IN_EMPTY_INT_ST: u1,
    -                ///  The raw interrupt status bit for the USB_DEVICE_PID_ERR_INT interrupt.
    -                PID_ERR_INT_ST: u1,
    -                ///  The raw interrupt status bit for the USB_DEVICE_CRC5_ERR_INT interrupt.
    -                CRC5_ERR_INT_ST: u1,
    -                ///  The raw interrupt status bit for the USB_DEVICE_CRC16_ERR_INT interrupt.
    -                CRC16_ERR_INT_ST: u1,
    -                ///  The raw interrupt status bit for the USB_DEVICE_STUFF_ERR_INT interrupt.
    -                STUFF_ERR_INT_ST: u1,
    -                ///  The raw interrupt status bit for the USB_DEVICE_IN_TOKEN_REC_IN_EP1_INT interrupt.
    -                IN_TOKEN_REC_IN_EP1_INT_ST: u1,
    -                ///  The raw interrupt status bit for the USB_DEVICE_USB_BUS_RESET_INT interrupt.
    -                USB_BUS_RESET_INT_ST: u1,
    -                ///  The raw interrupt status bit for the USB_DEVICE_OUT_EP1_ZERO_PAYLOAD_INT interrupt.
    -                OUT_EP1_ZERO_PAYLOAD_INT_ST: u1,
    -                ///  The raw interrupt status bit for the USB_DEVICE_OUT_EP2_ZERO_PAYLOAD_INT interrupt.
    -                OUT_EP2_ZERO_PAYLOAD_INT_ST: u1,
    -                padding: u20,
    -            }),
    -            ///  USB_DEVICE_INT_ENA_REG.
    -            INT_ENA: mmio.Mmio(packed struct(u32) {
    -                ///  The interrupt enable bit for the USB_DEVICE_JTAG_IN_FLUSH_INT interrupt.
    -                JTAG_IN_FLUSH_INT_ENA: u1,
    -                ///  The interrupt enable bit for the USB_DEVICE_SOF_INT interrupt.
    -                SOF_INT_ENA: u1,
    -                ///  The interrupt enable bit for the USB_DEVICE_SERIAL_OUT_RECV_PKT_INT interrupt.
    -                SERIAL_OUT_RECV_PKT_INT_ENA: u1,
    -                ///  The interrupt enable bit for the USB_DEVICE_SERIAL_IN_EMPTY_INT interrupt.
    -                SERIAL_IN_EMPTY_INT_ENA: u1,
    -                ///  The interrupt enable bit for the USB_DEVICE_PID_ERR_INT interrupt.
    -                PID_ERR_INT_ENA: u1,
    -                ///  The interrupt enable bit for the USB_DEVICE_CRC5_ERR_INT interrupt.
    -                CRC5_ERR_INT_ENA: u1,
    -                ///  The interrupt enable bit for the USB_DEVICE_CRC16_ERR_INT interrupt.
    -                CRC16_ERR_INT_ENA: u1,
    -                ///  The interrupt enable bit for the USB_DEVICE_STUFF_ERR_INT interrupt.
    -                STUFF_ERR_INT_ENA: u1,
    -                ///  The interrupt enable bit for the USB_DEVICE_IN_TOKEN_REC_IN_EP1_INT interrupt.
    -                IN_TOKEN_REC_IN_EP1_INT_ENA: u1,
    -                ///  The interrupt enable bit for the USB_DEVICE_USB_BUS_RESET_INT interrupt.
    -                USB_BUS_RESET_INT_ENA: u1,
    -                ///  The interrupt enable bit for the USB_DEVICE_OUT_EP1_ZERO_PAYLOAD_INT interrupt.
    -                OUT_EP1_ZERO_PAYLOAD_INT_ENA: u1,
    -                ///  The interrupt enable bit for the USB_DEVICE_OUT_EP2_ZERO_PAYLOAD_INT interrupt.
    -                OUT_EP2_ZERO_PAYLOAD_INT_ENA: u1,
    -                padding: u20,
    -            }),
    -            ///  USB_DEVICE_INT_CLR_REG.
    -            INT_CLR: mmio.Mmio(packed struct(u32) {
    -                ///  Set this bit to clear the USB_DEVICE_JTAG_IN_FLUSH_INT interrupt.
    -                JTAG_IN_FLUSH_INT_CLR: u1,
    -                ///  Set this bit to clear the USB_DEVICE_JTAG_SOF_INT interrupt.
    -                SOF_INT_CLR: u1,
    -                ///  Set this bit to clear the USB_DEVICE_SERIAL_OUT_RECV_PKT_INT interrupt.
    -                SERIAL_OUT_RECV_PKT_INT_CLR: u1,
    -                ///  Set this bit to clear the USB_DEVICE_SERIAL_IN_EMPTY_INT interrupt.
    -                SERIAL_IN_EMPTY_INT_CLR: u1,
    -                ///  Set this bit to clear the USB_DEVICE_PID_ERR_INT interrupt.
    -                PID_ERR_INT_CLR: u1,
    -                ///  Set this bit to clear the USB_DEVICE_CRC5_ERR_INT interrupt.
    -                CRC5_ERR_INT_CLR: u1,
    -                ///  Set this bit to clear the USB_DEVICE_CRC16_ERR_INT interrupt.
    -                CRC16_ERR_INT_CLR: u1,
    -                ///  Set this bit to clear the USB_DEVICE_STUFF_ERR_INT interrupt.
    -                STUFF_ERR_INT_CLR: u1,
    -                ///  Set this bit to clear the USB_DEVICE_IN_TOKEN_IN_EP1_INT interrupt.
    -                IN_TOKEN_REC_IN_EP1_INT_CLR: u1,
    -                ///  Set this bit to clear the USB_DEVICE_USB_BUS_RESET_INT interrupt.
    -                USB_BUS_RESET_INT_CLR: u1,
    -                ///  Set this bit to clear the USB_DEVICE_OUT_EP1_ZERO_PAYLOAD_INT interrupt.
    -                OUT_EP1_ZERO_PAYLOAD_INT_CLR: u1,
    -                ///  Set this bit to clear the USB_DEVICE_OUT_EP2_ZERO_PAYLOAD_INT interrupt.
    -                OUT_EP2_ZERO_PAYLOAD_INT_CLR: u1,
    -                padding: u20,
    -            }),
    -            ///  USB_DEVICE_CONF0_REG.
    -            CONF0: mmio.Mmio(packed struct(u32) {
    -                ///  Select internal/external PHY
    -                PHY_SEL: u1,
    -                ///  Enable software control USB D+ D- exchange
    -                EXCHG_PINS_OVERRIDE: u1,
    -                ///  USB D+ D- exchange
    -                EXCHG_PINS: u1,
    -                ///  Control single-end input high threshold,1.76V to 2V, step 80mV
    -                VREFH: u2,
    -                ///  Control single-end input low threshold,0.8V to 1.04V, step 80mV
    -                VREFL: u2,
    -                ///  Enable software control input threshold
    -                VREF_OVERRIDE: u1,
    -                ///  Enable software control USB D+ D- pullup pulldown
    -                PAD_PULL_OVERRIDE: u1,
    -                ///  Control USB D+ pull up.
    -                DP_PULLUP: u1,
    -                ///  Control USB D+ pull down.
    -                DP_PULLDOWN: u1,
    -                ///  Control USB D- pull up.
    -                DM_PULLUP: u1,
    -                ///  Control USB D- pull down.
    -                DM_PULLDOWN: u1,
    -                ///  Control pull up value.
    -                PULLUP_VALUE: u1,
    -                ///  Enable USB pad function.
    -                USB_PAD_ENABLE: u1,
    -                padding: u17,
    -            }),
    -            ///  USB_DEVICE_TEST_REG.
    -            TEST: mmio.Mmio(packed struct(u32) {
    -                ///  Enable test of the USB pad
    -                ENABLE: u1,
    -                ///  USB pad oen in test
    -                USB_OE: u1,
    -                ///  USB D+ tx value in test
    -                TX_DP: u1,
    -                ///  USB D- tx value in test
    -                TX_DM: u1,
    -                padding: u28,
    -            }),
    -            ///  USB_DEVICE_JFIFO_ST_REG.
    -            JFIFO_ST: mmio.Mmio(packed struct(u32) {
    -                ///  JTAT in fifo counter.
    -                IN_FIFO_CNT: u2,
    -                ///  1: JTAG in fifo is empty.
    -                IN_FIFO_EMPTY: u1,
    -                ///  1: JTAG in fifo is full.
    -                IN_FIFO_FULL: u1,
    -                ///  JTAT out fifo counter.
    -                OUT_FIFO_CNT: u2,
    -                ///  1: JTAG out fifo is empty.
    -                OUT_FIFO_EMPTY: u1,
    -                ///  1: JTAG out fifo is full.
    -                OUT_FIFO_FULL: u1,
    -                ///  Write 1 to reset JTAG in fifo.
    -                IN_FIFO_RESET: u1,
    -                ///  Write 1 to reset JTAG out fifo.
    -                OUT_FIFO_RESET: u1,
    -                padding: u22,
    -            }),
    -            ///  USB_DEVICE_FRAM_NUM_REG.
    -            FRAM_NUM: mmio.Mmio(packed struct(u32) {
    -                ///  Frame index of received SOF frame.
    -                SOF_FRAME_INDEX: u11,
    -                padding: u21,
    -            }),
    -            ///  USB_DEVICE_IN_EP0_ST_REG.
    -            IN_EP0_ST: mmio.Mmio(packed struct(u32) {
    -                ///  State of IN Endpoint 0.
    -                IN_EP0_STATE: u2,
    -                ///  Write data address of IN endpoint 0.
    -                IN_EP0_WR_ADDR: u7,
    -                ///  Read data address of IN endpoint 0.
    -                IN_EP0_RD_ADDR: u7,
    -                padding: u16,
    -            }),
    -            ///  USB_DEVICE_IN_EP1_ST_REG.
    -            IN_EP1_ST: mmio.Mmio(packed struct(u32) {
    -                ///  State of IN Endpoint 1.
    -                IN_EP1_STATE: u2,
    -                ///  Write data address of IN endpoint 1.
    -                IN_EP1_WR_ADDR: u7,
    -                ///  Read data address of IN endpoint 1.
    -                IN_EP1_RD_ADDR: u7,
    -                padding: u16,
    -            }),
    -            ///  USB_DEVICE_IN_EP2_ST_REG.
    -            IN_EP2_ST: mmio.Mmio(packed struct(u32) {
    -                ///  State of IN Endpoint 2.
    -                IN_EP2_STATE: u2,
    -                ///  Write data address of IN endpoint 2.
    -                IN_EP2_WR_ADDR: u7,
    -                ///  Read data address of IN endpoint 2.
    -                IN_EP2_RD_ADDR: u7,
    -                padding: u16,
    -            }),
    -            ///  USB_DEVICE_IN_EP3_ST_REG.
    -            IN_EP3_ST: mmio.Mmio(packed struct(u32) {
    -                ///  State of IN Endpoint 3.
    -                IN_EP3_STATE: u2,
    -                ///  Write data address of IN endpoint 3.
    -                IN_EP3_WR_ADDR: u7,
    -                ///  Read data address of IN endpoint 3.
    -                IN_EP3_RD_ADDR: u7,
    -                padding: u16,
    -            }),
    -            ///  USB_DEVICE_OUT_EP0_ST_REG.
    -            OUT_EP0_ST: mmio.Mmio(packed struct(u32) {
    -                ///  State of OUT Endpoint 0.
    -                OUT_EP0_STATE: u2,
    -                ///  Write data address of OUT endpoint 0. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is detected, there are USB_DEVICE_OUT_EP0_WR_ADDR-2 bytes data in OUT EP0.
    -                OUT_EP0_WR_ADDR: u7,
    -                ///  Read data address of OUT endpoint 0.
    -                OUT_EP0_RD_ADDR: u7,
    -                padding: u16,
    -            }),
    -            ///  USB_DEVICE_OUT_EP1_ST_REG.
    -            OUT_EP1_ST: mmio.Mmio(packed struct(u32) {
    -                ///  State of OUT Endpoint 1.
    -                OUT_EP1_STATE: u2,
    -                ///  Write data address of OUT endpoint 1. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is detected, there are USB_DEVICE_OUT_EP1_WR_ADDR-2 bytes data in OUT EP1.
    -                OUT_EP1_WR_ADDR: u7,
    -                ///  Read data address of OUT endpoint 1.
    -                OUT_EP1_RD_ADDR: u7,
    -                ///  Data count in OUT endpoint 1 when one packet is received.
    -                OUT_EP1_REC_DATA_CNT: u7,
    -                padding: u9,
    -            }),
    -            ///  USB_DEVICE_OUT_EP2_ST_REG.
    -            OUT_EP2_ST: mmio.Mmio(packed struct(u32) {
    -                ///  State of OUT Endpoint 2.
    -                OUT_EP2_STATE: u2,
    -                ///  Write data address of OUT endpoint 2. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is detected, there are USB_DEVICE_OUT_EP2_WR_ADDR-2 bytes data in OUT EP2.
    -                OUT_EP2_WR_ADDR: u7,
    -                ///  Read data address of OUT endpoint 2.
    -                OUT_EP2_RD_ADDR: u7,
    -                padding: u16,
    -            }),
    -            ///  USB_DEVICE_MISC_CONF_REG.
    -            MISC_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  1'h1: Force clock on for register. 1'h0: Support clock only when application writes registers.
    -                CLK_EN: u1,
    -                padding: u31,
    -            }),
    -            ///  USB_DEVICE_MEM_CONF_REG.
    -            MEM_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  1: power down usb memory.
    -                USB_MEM_PD: u1,
    -                ///  1: Force clock on for usb memory.
    -                USB_MEM_CLK_EN: u1,
    -                padding: u30,
    -            }),
    -            reserved128: [52]u8,
    -            ///  USB_DEVICE_DATE_REG.
    -            DATE: mmio.Mmio(packed struct(u32) {
    -                ///  register version.
    -                DATE: u32,
    -            }),
    -        };
    -
    -        ///  Universal Host Controller Interface
    -        pub const UHCI0 = extern struct {
    -            ///  a
    -            CONF0: mmio.Mmio(packed struct(u32) {
    -                ///  Write 1, then write 0 to this bit to reset decode state machine.
    -                TX_RST: u1,
    -                ///  Write 1, then write 0 to this bit to reset encode state machine.
    -                RX_RST: u1,
    -                ///  Set this bit to link up HCI and UART0.
    -                UART0_CE: u1,
    -                ///  Set this bit to link up HCI and UART1.
    -                UART1_CE: u1,
    -                reserved5: u1,
    -                ///  Set this bit to separate the data frame using a special char.
    -                SEPER_EN: u1,
    -                ///  Set this bit to encode the data packet with a formatting header.
    -                HEAD_EN: u1,
    -                ///  Set this bit to enable UHCI to receive the 16 bit CRC.
    -                CRC_REC_EN: u1,
    -                ///  If this bit is set to 1, UHCI will end the payload receiving process when UART has been in idle state.
    -                UART_IDLE_EOF_EN: u1,
    -                ///  If this bit is set to 1, UHCI decoder receiving payload data is end when the receiving byte count has reached the specified value. The value is payload length indicated by UHCI packet header when UHCI_HEAD_EN is 1 or the value is configuration value when UHCI_HEAD_EN is 0. If this bit is set to 0, UHCI decoder receiving payload data is end when 0xc0 is received.
    -                LEN_EOF_EN: u1,
    -                ///  Set this bit to enable data integrity checking by appending a 16 bit CCITT-CRC to end of the payload.
    -                ENCODE_CRC_EN: u1,
    -                ///  1'b1: Force clock on for register. 1'b0: Support clock only when application writes registers.
    -                CLK_EN: u1,
    -                ///  If this bit is set to 1, UHCI will end payload receive process when NULL frame is received by UART.
    -                UART_RX_BRK_EOF_EN: u1,
    -                padding: u19,
    -            }),
    -            ///  a
    -            INT_RAW: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                RX_START_INT_RAW: u1,
    -                ///  a
    -                TX_START_INT_RAW: u1,
    -                ///  a
    -                RX_HUNG_INT_RAW: u1,
    -                ///  a
    -                TX_HUNG_INT_RAW: u1,
    -                ///  a
    -                SEND_S_REG_Q_INT_RAW: u1,
    -                ///  a
    -                SEND_A_REG_Q_INT_RAW: u1,
    -                ///  This is the interrupt raw bit. Triggered when there are some errors in EOF in the
    -                OUT_EOF_INT_RAW: u1,
    -                ///  Soft control int raw bit.
    -                APP_CTRL0_INT_RAW: u1,
    -                ///  Soft control int raw bit.
    -                APP_CTRL1_INT_RAW: u1,
    -                padding: u23,
    -            }),
    -            ///  a
    -            INT_ST: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                RX_START_INT_ST: u1,
    -                ///  a
    -                TX_START_INT_ST: u1,
    -                ///  a
    -                RX_HUNG_INT_ST: u1,
    -                ///  a
    -                TX_HUNG_INT_ST: u1,
    -                ///  a
    -                SEND_S_REG_Q_INT_ST: u1,
    -                ///  a
    -                SEND_A_REG_Q_INT_ST: u1,
    -                ///  a
    -                OUTLINK_EOF_ERR_INT_ST: u1,
    -                ///  a
    -                APP_CTRL0_INT_ST: u1,
    -                ///  a
    -                APP_CTRL1_INT_ST: u1,
    -                padding: u23,
    -            }),
    -            ///  a
    -            INT_ENA: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                RX_START_INT_ENA: u1,
    -                ///  a
    -                TX_START_INT_ENA: u1,
    -                ///  a
    -                RX_HUNG_INT_ENA: u1,
    -                ///  a
    -                TX_HUNG_INT_ENA: u1,
    -                ///  a
    -                SEND_S_REG_Q_INT_ENA: u1,
    -                ///  a
    -                SEND_A_REG_Q_INT_ENA: u1,
    -                ///  a
    -                OUTLINK_EOF_ERR_INT_ENA: u1,
    -                ///  a
    -                APP_CTRL0_INT_ENA: u1,
    -                ///  a
    -                APP_CTRL1_INT_ENA: u1,
    -                padding: u23,
    -            }),
    -            ///  a
    -            INT_CLR: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                RX_START_INT_CLR: u1,
    -                ///  a
    -                TX_START_INT_CLR: u1,
    -                ///  a
    -                RX_HUNG_INT_CLR: u1,
    -                ///  a
    -                TX_HUNG_INT_CLR: u1,
    -                ///  a
    -                SEND_S_REG_Q_INT_CLR: u1,
    -                ///  a
    -                SEND_A_REG_Q_INT_CLR: u1,
    -                ///  a
    -                OUTLINK_EOF_ERR_INT_CLR: u1,
    -                ///  a
    -                APP_CTRL0_INT_CLR: u1,
    -                ///  a
    -                APP_CTRL1_INT_CLR: u1,
    -                padding: u23,
    -            }),
    -            ///  a
    -            CONF1: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                CHECK_SUM_EN: u1,
    -                ///  a
    -                CHECK_SEQ_EN: u1,
    -                ///  a
    -                CRC_DISABLE: u1,
    -                ///  a
    -                SAVE_HEAD: u1,
    -                ///  a
    -                TX_CHECK_SUM_RE: u1,
    -                ///  a
    -                TX_ACK_NUM_RE: u1,
    -                reserved7: u1,
    -                ///  a
    -                WAIT_SW_START: u1,
    -                ///  a
    -                SW_START: u1,
    -                padding: u23,
    -            }),
    -            ///  a
    -            STATE0: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                RX_ERR_CAUSE: u3,
    -                ///  a
    -                DECODE_STATE: u3,
    -                padding: u26,
    -            }),
    -            ///  a
    -            STATE1: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                ENCODE_STATE: u3,
    -                padding: u29,
    -            }),
    -            ///  a
    -            ESCAPE_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                TX_C0_ESC_EN: u1,
    -                ///  a
    -                TX_DB_ESC_EN: u1,
    -                ///  a
    -                TX_11_ESC_EN: u1,
    -                ///  a
    -                TX_13_ESC_EN: u1,
    -                ///  a
    -                RX_C0_ESC_EN: u1,
    -                ///  a
    -                RX_DB_ESC_EN: u1,
    -                ///  a
    -                RX_11_ESC_EN: u1,
    -                ///  a
    -                RX_13_ESC_EN: u1,
    -                padding: u24,
    -            }),
    -            ///  a
    -            HUNG_CONF: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                TXFIFO_TIMEOUT: u8,
    -                ///  a
    -                TXFIFO_TIMEOUT_SHIFT: u3,
    -                ///  a
    -                TXFIFO_TIMEOUT_ENA: u1,
    -                ///  a
    -                RXFIFO_TIMEOUT: u8,
    -                ///  a
    -                RXFIFO_TIMEOUT_SHIFT: u3,
    -                ///  a
    -                RXFIFO_TIMEOUT_ENA: u1,
    -                padding: u8,
    -            }),
    -            ///  a
    -            ACK_NUM: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                ACK_NUM: u3,
    -                ///  a
    -                LOAD: u1,
    -                padding: u28,
    -            }),
    -            ///  a
    -            RX_HEAD: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                RX_HEAD: u32,
    -            }),
    -            ///  a
    -            QUICK_SENT: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                SINGLE_SEND_NUM: u3,
    -                ///  a
    -                SINGLE_SEND_EN: u1,
    -                ///  a
    -                ALWAYS_SEND_NUM: u3,
    -                ///  a
    -                ALWAYS_SEND_EN: u1,
    -                padding: u24,
    -            }),
    -            ///  a
    -            REG_Q0_WORD0: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                SEND_Q0_WORD0: u32,
    -            }),
    -            ///  a
    -            REG_Q0_WORD1: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                SEND_Q0_WORD1: u32,
    -            }),
    -            ///  a
    -            REG_Q1_WORD0: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                SEND_Q1_WORD0: u32,
    -            }),
    -            ///  a
    -            REG_Q1_WORD1: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                SEND_Q1_WORD1: u32,
    -            }),
    -            ///  a
    -            REG_Q2_WORD0: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                SEND_Q2_WORD0: u32,
    -            }),
    -            ///  a
    -            REG_Q2_WORD1: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                SEND_Q2_WORD1: u32,
    -            }),
    -            ///  a
    -            REG_Q3_WORD0: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                SEND_Q3_WORD0: u32,
    -            }),
    -            ///  a
    -            REG_Q3_WORD1: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                SEND_Q3_WORD1: u32,
    -            }),
    -            ///  a
    -            REG_Q4_WORD0: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                SEND_Q4_WORD0: u32,
    -            }),
    -            ///  a
    -            REG_Q4_WORD1: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                SEND_Q4_WORD1: u32,
    -            }),
    -            ///  a
    -            REG_Q5_WORD0: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                SEND_Q5_WORD0: u32,
    -            }),
    -            ///  a
    -            REG_Q5_WORD1: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                SEND_Q5_WORD1: u32,
    -            }),
    -            ///  a
    -            REG_Q6_WORD0: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                SEND_Q6_WORD0: u32,
    -            }),
    -            ///  a
    -            REG_Q6_WORD1: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                SEND_Q6_WORD1: u32,
    -            }),
    -            ///  a
    -            ESC_CONF0: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                SEPER_CHAR: u8,
    -                ///  a
    -                SEPER_ESC_CHAR0: u8,
    -                ///  a
    -                SEPER_ESC_CHAR1: u8,
    -                padding: u8,
    -            }),
    -            ///  a
    -            ESC_CONF1: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                ESC_SEQ0: u8,
    -                ///  a
    -                ESC_SEQ0_CHAR0: u8,
    -                ///  a
    -                ESC_SEQ0_CHAR1: u8,
    -                padding: u8,
    -            }),
    -            ///  a
    -            ESC_CONF2: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                ESC_SEQ1: u8,
    -                ///  a
    -                ESC_SEQ1_CHAR0: u8,
    -                ///  a
    -                ESC_SEQ1_CHAR1: u8,
    -                padding: u8,
    -            }),
    -            ///  a
    -            ESC_CONF3: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                ESC_SEQ2: u8,
    -                ///  a
    -                ESC_SEQ2_CHAR0: u8,
    -                ///  a
    -                ESC_SEQ2_CHAR1: u8,
    -                padding: u8,
    -            }),
    -            ///  a
    -            PKT_THRES: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                PKT_THRS: u13,
    -                padding: u19,
    -            }),
    -            ///  a
    -            DATE: mmio.Mmio(packed struct(u32) {
    -                ///  a
    -                DATE: u32,
    -            }),
    -        };
    -    };
    -};
    diff --git a/src/cpus.zig b/src/cpus.zig
    deleted file mode 100644
    index c8bda913e..000000000
    --- a/src/cpus.zig
    +++ /dev/null
    @@ -1,23 +0,0 @@
    -const std = @import("std");
    -const microzig = @import("microzig");
    -
    -fn root_dir() []const u8 {
    -    return std.fs.path.dirname(@src().file) orelse unreachable;
    -}
    -
    -pub const esp32_c3 = microzig.Cpu{
    -    .name = "Espressif RISC-V",
    -    .source = .{
    -        .path = root_dir() ++ "/cpus/espressif-riscv.zig",
    -    },
    -    .target = std.zig.CrossTarget{
    -        .cpu_arch = .riscv32,
    -        .cpu_model = .{ .explicit = &std.Target.riscv.cpu.generic_rv32 },
    -        .cpu_features_add = std.Target.riscv.featureSet(&.{
    -            std.Target.riscv.Feature.c,
    -            std.Target.riscv.Feature.m,
    -        }),
    -        .os_tag = .freestanding,
    -        .abi = .eabi,
    -    },
    -};
    
    From 696e309f6d80d873d9bbefeaad56b395366c851c Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20Quei=C3=9Fner?= 
    Date: Fri, 22 Sep 2023 09:03:33 +0200
    Subject: [PATCH 208/286] Microzig Generation 2 Build Interface  (#21)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    * MicroZig Gen 2 interface
    * Adds ELF patching to handle the checksum requirement
    
    ---------
    
    Co-authored-by: Felix "xq" Queißner 
    ---
     .gitmodules             |     3 -
     build.zig               |   119 +-
     deps/microzig           |     1 -
     src/boards.zig          |    13 -
     src/chips.zig           |    18 -
     src/chips/LPC176x5x.zig | 12741 --------------------------------------
     src/hals/LPC176x5x.zig  |    20 +-
     src/tools/patchelf.zig  |    66 +
     8 files changed, 164 insertions(+), 12817 deletions(-)
     delete mode 160000 deps/microzig
     delete mode 100644 src/boards.zig
     delete mode 100644 src/chips.zig
     delete mode 100644 src/chips/LPC176x5x.zig
     create mode 100644 src/tools/patchelf.zig
    
    diff --git a/.gitmodules b/.gitmodules
    index 32e895ccb..e69de29bb 100644
    --- a/.gitmodules
    +++ b/.gitmodules
    @@ -1,3 +0,0 @@
    -[submodule "deps/microzig"]
    -	path = deps/microzig
    -	url = https://github.com/ZigEmbeddedGroup/microzig.git
    diff --git a/build.zig b/build.zig
    index 56ed4e58a..639a034ce 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -1,38 +1,95 @@
     const std = @import("std");
    -const microzig = @import("deps/microzig/build.zig");
     
    -pub const boards = @import("src/boards.zig");
    -pub const chips = @import("src/chips.zig");
    +fn path(comptime suffix: []const u8) std.Build.LazyPath {
    +    return .{
    +        .cwd_relative = comptime ((std.fs.path.dirname(@src().file) orelse ".") ++ suffix),
    +    };
    +}
     
    -pub fn build(b: *std.build.Builder) void {
    -    const optimize = b.standardOptimizeOption(.{});
    -    inline for (@typeInfo(boards).Struct.decls) |decl| {
    -        if (!decl.is_pub)
    -            continue;
    +const hal = .{
    +    .source_file = path("/src/hals/LPC176x5x.zig"),
    +};
     
    -        const exe = microzig.addEmbeddedExecutable(b, .{
    -            .name = @field(boards, decl.name).name ++ ".minimal",
    -            .source_file = .{
    -                .path = "test/programs/minimal.zig",
    +pub const chips = struct {
    +    pub const lpc176x5x = .{
    +        .preferred_format = .elf,
    +        .chip = .{
    +            // TODO: Separate over those chips, this is not generic!
    +            .name = "LPC176x5x",
    +            .cpu = .cortex_m3,
    +            .memory_regions = &.{
    +                .{ .offset = 0x00000000, .length = 512 * 1024, .kind = .flash },
    +                .{ .offset = 0x10000000, .length = 32 * 1024, .kind = .ram },
    +                .{ .offset = 0x2007C000, .length = 32 * 1024, .kind = .ram },
    +            },
    +            .register_definition = .{
    +                .json = path("/src/chips/LPC176x5x.json"),
                 },
    -            .backing = .{ .board = @field(boards, decl.name) },
    -            .optimize = optimize,
    -        });
    -        exe.installArtifact(b);
    -    }
    -
    -    inline for (@typeInfo(chips).Struct.decls) |decl| {
    -        if (!decl.is_pub)
    -            continue;
    -
    -        const exe = microzig.addEmbeddedExecutable(b, .{
    -            .name = @field(chips, decl.name).name ++ ".minimal",
    -            .source_file = .{
    -                .path = "test/programs/minimal.zig",
    +        },
    +        .hal = hal,
    +        .binary_post_process = postprocess,
    +    };
    +};
    +
    +pub const boards = struct {
    +    pub const mbed = struct {
    +        pub const lpc1768 = .{
    +            .preferred_format = .hex,
    +            .chip = chips.lpc176x5x.chip,
    +            .hal = hal,
    +            .board = .{
    +                .name = "mbed LPC1768",
    +                .url = "https://os.mbed.com/platforms/mbed-LPC1768/",
    +                .source_file = path("/src/boards/mbed_LPC1768.zig"),
                 },
    -            .backing = .{ .chip = @field(chips, decl.name) },
    -            .optimize = optimize,
    -        });
    -        exe.installArtifact(b);
    -    }
    +            .binary_post_process = postprocess,
    +        };
    +    };
    +};
    +
    +/// Post-processes an ELF file to add a checksum over the first 8 words so the
    +/// cpu will properly boot.
    +fn postprocess(b: *std.Build, input: std.Build.LazyPath) std.Build.LazyPath {
    +    const patchelf = b.addExecutable(.{
    +        .name = "lpc176x5x-patchelf",
    +        .root_source_file = path("/src/tools/patchelf.zig"),
    +    });
    +
    +    const patch = b.addRunArtifact(patchelf);
    +    patch.addFileArg(input);
    +    return patch.addOutputFileArg("firmware.elf");
    +}
    +
    +pub fn build(b: *std.Build) void {
    +    _ = b;
    +    // const optimize = b.standardOptimizeOption(.{});
    +    // inline for (@typeInfo(boards).Struct.decls) |decl| {
    +    //     if (!decl.is_pub)
    +    //         continue;
    +
    +    //     const exe = microzig.addEmbeddedExecutable(b, .{
    +    //         .name = @field(boards, decl.name).name ++ ".minimal",
    +    //         .source_file = .{
    +    //             .path = "test/programs/minimal.zig",
    +    //         },
    +    //         .backing = .{ .board = @field(boards, decl.name) },
    +    //         .optimize = optimize,
    +    //     });
    +    //     exe.installArtifact(b);
    +    // }
    +
    +    // inline for (@typeInfo(chips).Struct.decls) |decl| {
    +    //     if (!decl.is_pub)
    +    //         continue;
    +
    +    //     const exe = microzig.addEmbeddedExecutable(b, .{
    +    //         .name = @field(chips, decl.name).name ++ ".minimal",
    +    //         .source_file = .{
    +    //             .path = "test/programs/minimal.zig",
    +    //         },
    +    //         .backing = .{ .chip = @field(chips, decl.name) },
    +    //         .optimize = optimize,
    +    //     });
    +    //     exe.installArtifact(b);
    +    // }
     }
    diff --git a/deps/microzig b/deps/microzig
    deleted file mode 160000
    index 9392fe0f7..000000000
    --- a/deps/microzig
    +++ /dev/null
    @@ -1 +0,0 @@
    -Subproject commit 9392fe0f7bddde26155c181ab80b70097b49c791
    diff --git a/src/boards.zig b/src/boards.zig
    deleted file mode 100644
    index 9890a0c00..000000000
    --- a/src/boards.zig
    +++ /dev/null
    @@ -1,13 +0,0 @@
    -const std = @import("std");
    -const micro = @import("../deps/microzig/build.zig");
    -const chips = @import("chips.zig");
    -
    -fn root_dir() []const u8 {
    -    return std.fs.path.dirname(@src().file) orelse ".";
    -}
    -
    -pub const mbed_lpc1768 = micro.Board{
    -    .name = "mbed LPC1768",
    -    .source = .{ .path = root_dir() ++ "/boards/mbed_LPC1768.zig" },
    -    .chip = chips.lpc176x5x,
    -};
    diff --git a/src/chips.zig b/src/chips.zig
    deleted file mode 100644
    index 741fabadb..000000000
    --- a/src/chips.zig
    +++ /dev/null
    @@ -1,18 +0,0 @@
    -const std = @import("std");
    -const micro = @import("../deps/microzig/build.zig");
    -const Chip = micro.Chip;
    -const MemoryRegion = micro.MemoryRegion;
    -
    -fn root_dir() []const u8 {
    -    return std.fs.path.dirname(@src().file) orelse unreachable;
    -}
    -
    -pub const lpc176x5x = Chip.from_standard_paths(root_dir(), .{
    -    .name = "LPC176x5x",
    -    .cpu = micro.cpus.cortex_m3,
    -    .memory_regions = &.{
    -        MemoryRegion{ .offset = 0x00000000, .length = 512 * 1024, .kind = .flash },
    -        MemoryRegion{ .offset = 0x10000000, .length = 32 * 1024, .kind = .ram },
    -        MemoryRegion{ .offset = 0x2007C000, .length = 32 * 1024, .kind = .ram },
    -    },
    -});
    diff --git a/src/chips/LPC176x5x.zig b/src/chips/LPC176x5x.zig
    deleted file mode 100644
    index 34e166cb0..000000000
    --- a/src/chips/LPC176x5x.zig
    +++ /dev/null
    @@ -1,12741 +0,0 @@
    -const micro = @import("microzig");
    -const mmio = micro.mmio;
    -
    -pub const devices = struct {
    -    ///  LPC176x/LPC175x M3
    -    pub const LPC176x5x = struct {
    -        pub const properties = struct {
    -            pub const @"cpu.nvic_prio_bits" = "5";
    -            pub const @"cpu.mpu" = "1";
    -            pub const @"cpu.fpu" = "0";
    -            pub const @"cpu.revision" = "r0p0";
    -            pub const @"cpu.vendor_systick_config" = "0";
    -            pub const @"cpu.endian" = "little";
    -            pub const @"cpu.name" = "CM3";
    -        };
    -
    -        pub const VectorTable = extern struct {
    -            const Handler = micro.interrupt.Handler;
    -            const unhandled = micro.interrupt.unhandled;
    -
    -            initial_stack_pointer: u32,
    -            Reset: Handler = unhandled,
    -            NMI: Handler = unhandled,
    -            HardFault: Handler = unhandled,
    -            MemManageFault: Handler = unhandled,
    -            BusFault: Handler = unhandled,
    -            UsageFault: Handler = unhandled,
    -            reserved5: [4]u32 = undefined,
    -            SVCall: Handler = unhandled,
    -            DebugMonitor: Handler = unhandled,
    -            reserved11: [1]u32 = undefined,
    -            PendSV: Handler = unhandled,
    -            SysTick: Handler = unhandled,
    -            WDT: Handler = unhandled,
    -            TIMER0: Handler = unhandled,
    -            TIMER1: Handler = unhandled,
    -            TIMER2: Handler = unhandled,
    -            TIMER3: Handler = unhandled,
    -            UART0: Handler = unhandled,
    -            UART1: Handler = unhandled,
    -            UART2: Handler = unhandled,
    -            UART3: Handler = unhandled,
    -            PWM1: Handler = unhandled,
    -            I2C0: Handler = unhandled,
    -            I2C1: Handler = unhandled,
    -            I2C2: Handler = unhandled,
    -            SPI: Handler = unhandled,
    -            SSP0: Handler = unhandled,
    -            SSP1: Handler = unhandled,
    -            reserved30: [1]u32 = undefined,
    -            RTC: Handler = unhandled,
    -            EINT0: Handler = unhandled,
    -            reserved33: [3]u32 = undefined,
    -            ADC: Handler = unhandled,
    -            reserved37: [1]u32 = undefined,
    -            USB: Handler = unhandled,
    -            CAN: Handler = unhandled,
    -            DMA: Handler = unhandled,
    -            I2S: Handler = unhandled,
    -            ENET: Handler = unhandled,
    -            RIT: Handler = unhandled,
    -            MCPWM: Handler = unhandled,
    -            QEI: Handler = unhandled,
    -            reserved46: [2]u32 = undefined,
    -            CANActivity: Handler = unhandled,
    -        };
    -
    -        pub const peripherals = struct {
    -            ///  General Purpose I/O
    -            pub const GPIO = @ptrCast(*volatile types.GPIO, 0x2009c000);
    -            ///  Watchdog Timer (WDT)
    -            pub const WDT = @ptrCast(*volatile types.WDT, 0x40000000);
    -            ///  Timer0/1/2/3
    -            pub const TIMER0 = @ptrCast(*volatile types.TIMER0, 0x40004000);
    -            ///  Timer0/1/2/3
    -            pub const TIMER1 = @ptrCast(*volatile types.TIMER0, 0x40008000);
    -            ///  UART0/2/3
    -            pub const UART0 = @ptrCast(*volatile types.UART0, 0x4000c000);
    -            ///  UART1
    -            pub const UART1 = @ptrCast(*volatile types.UART1, 0x40010000);
    -            ///  Pulse Width Modulators (PWM1)
    -            pub const PWM1 = @ptrCast(*volatile types.PWM1, 0x40018000);
    -            ///  I2C bus interface
    -            pub const I2C0 = @ptrCast(*volatile types.I2C0, 0x4001c000);
    -            ///  SPI
    -            pub const SPI = @ptrCast(*volatile types.SPI, 0x40020000);
    -            ///  Real Time Clock (RTC)
    -            pub const RTC = @ptrCast(*volatile types.RTC, 0x40024000);
    -            ///  GPIO
    -            pub const GPIOINT = @ptrCast(*volatile types.GPIOINT, 0x40028080);
    -            ///  Pin connect block
    -            pub const PINCONNECT = @ptrCast(*volatile types.PINCONNECT, 0x4002c000);
    -            ///  SSP1 controller
    -            pub const SSP1 = @ptrCast(*volatile types.SSP1, 0x40030000);
    -            ///  Analog-to-Digital Converter (ADC)
    -            pub const ADC = @ptrCast(*volatile types.ADC, 0x40034000);
    -            ///  CAN acceptance filter RAM
    -            pub const CANAFRAM = @ptrCast(*volatile types.CANAFRAM, 0x40038000);
    -            ///  CAN controller acceptance filter
    -            pub const CANAF = @ptrCast(*volatile types.CANAF, 0x4003c000);
    -            ///  Central CAN controller
    -            pub const CCAN = @ptrCast(*volatile types.CCAN, 0x40040000);
    -            ///  CAN1 controller
    -            pub const CAN1 = @ptrCast(*volatile types.CAN1, 0x40044000);
    -            ///  CAN1 controller
    -            pub const CAN2 = @ptrCast(*volatile types.CAN1, 0x40048000);
    -            ///  I2C bus interface
    -            pub const I2C1 = @ptrCast(*volatile types.I2C0, 0x4005c000);
    -            ///  SSP controller
    -            pub const SSP0 = @ptrCast(*volatile types.SSP1, 0x40088000);
    -            ///  Digital-to-Analog Converter (DAC)
    -            pub const DAC = @ptrCast(*volatile types.DAC, 0x4008c000);
    -            ///  Timer0/1/2/3
    -            pub const TIMER2 = @ptrCast(*volatile types.TIMER0, 0x40090000);
    -            ///  Timer0/1/2/3
    -            pub const TIMER3 = @ptrCast(*volatile types.TIMER0, 0x40094000);
    -            ///  UART0/2/3
    -            pub const UART2 = @ptrCast(*volatile types.UART0, 0x40098000);
    -            ///  UART0/2/3
    -            pub const UART3 = @ptrCast(*volatile types.UART0, 0x4009c000);
    -            ///  I2C bus interface
    -            pub const I2C2 = @ptrCast(*volatile types.I2C0, 0x400a0000);
    -            ///  I2S interface
    -            pub const I2S = @ptrCast(*volatile types.I2S, 0x400a8000);
    -            ///  Repetitive Interrupt Timer (RIT)
    -            pub const RITIMER = @ptrCast(*volatile types.RITIMER, 0x400b0000);
    -            ///  Motor Control PWM
    -            pub const MCPWM = @ptrCast(*volatile types.MCPWM, 0x400b8000);
    -            ///  Quadrature Encoder Interface (QEI)
    -            pub const QEI = @ptrCast(*volatile types.QEI, 0x400bc000);
    -            ///  System and clock control
    -            pub const SYSCON = @ptrCast(*volatile types.SYSCON, 0x400fc000);
    -            ///  Ethernet
    -            pub const EMAC = @ptrCast(*volatile types.EMAC, 0x50000000);
    -            ///  General purpose DMA controller
    -            pub const GPDMA = @ptrCast(*volatile types.GPDMA, 0x50004000);
    -            ///  USB device/host/OTG controller
    -            pub const USB = @ptrCast(*volatile types.USB, 0x50008000);
    -        };
    -    };
    -};
    -
    -pub const types = struct {
    -    ///  Watchdog Timer (WDT)
    -    pub const WDT = extern struct {
    -        ///  Watchdog mode register. This register determines the basic mode and status of the Watchdog Timer.
    -        MOD: mmio.Mmio(packed struct(u32) {
    -            ///  Watchdog enable bit. This bit is Set Only.
    -            WDEN: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  The watchdog timer is stopped.
    -                    STOP = 0x0,
    -                    ///  The watchdog timer is running.
    -                    RUN = 0x1,
    -                },
    -            },
    -            ///  Watchdog reset enable bit. This bit is Set Only. See Table 652.
    -            WDRESET: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  A watchdog timeout will not cause a chip reset.
    -                    NORESET = 0x0,
    -                    ///  A watchdog timeout will cause a chip reset.
    -                    RESET = 0x1,
    -                },
    -            },
    -            ///  Watchdog time-out flag. Set when the watchdog timer times out, cleared by software.
    -            WDTOF: u1,
    -            ///  Watchdog interrupt flag. Cleared by software.
    -            WDINT: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u28,
    -        }),
    -        ///  Watchdog timer constant register. The value in this register determines the time-out value.
    -        TC: mmio.Mmio(packed struct(u32) {
    -            ///  Watchdog time-out interval.
    -            Count: u32,
    -        }),
    -        ///  Watchdog feed sequence register. Writing 0xAA followed by 0x55 to this register reloads the Watchdog timer with the value contained in WDTC.
    -        FEED: mmio.Mmio(packed struct(u32) {
    -            ///  Feed value should be 0xAA followed by 0x55.
    -            Feed: u8,
    -            padding: u24,
    -        }),
    -        ///  Watchdog timer value register. This register reads out the current value of the Watchdog timer.
    -        TV: mmio.Mmio(packed struct(u32) {
    -            ///  Counter timer value.
    -            Count: u32,
    -        }),
    -        ///  Watchdog clock select register.
    -        CLKSEL: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u30,
    -            ///  If this bit is set to one writing to this register does not affect bit 0. The clock source can only be changed by first clearing this bit, then writing the new value of bit 0.
    -            LOCK: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  This bit is set to 0 on any reset. It cannot be cleared by software.
    -                    UNLOCKED = 0x0,
    -                    ///  Software can set this bit to 1 at any time. Once WDLOCK is set, the bits of this register cannot be modified.
    -                    LOCKED = 0x1,
    -                },
    -            },
    -        }),
    -    };
    -
    -    ///  Timer0/1/2/3
    -    pub const TIMER0 = extern struct {
    -        ///  Interrupt Register. The IR can be written to clear interrupts. The IR can be read to identify which of eight possible interrupt sources are pending.
    -        IR: mmio.Mmio(packed struct(u32) {
    -            ///  Interrupt flag for match channel 0.
    -            MR0INT: u1,
    -            ///  Interrupt flag for match channel 1.
    -            MR1INT: u1,
    -            ///  Interrupt flag for match channel 2.
    -            MR2INT: u1,
    -            ///  Interrupt flag for match channel 3.
    -            MR3INT: u1,
    -            ///  Interrupt flag for capture channel 0 event.
    -            CR0INT: u1,
    -            ///  Interrupt flag for capture channel 1 event.
    -            CR1INT: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u26,
    -        }),
    -        ///  Timer Control Register. The TCR is used to control the Timer Counter functions. The Timer Counter can be disabled or reset through the TCR.
    -        TCR: mmio.Mmio(packed struct(u32) {
    -            ///  When one, the Timer Counter and Prescale Counter are enabled for counting. When zero, the counters are disabled.
    -            CEN: u1,
    -            ///  When one, the Timer Counter and the Prescale Counter are synchronously reset on the next positive edge of PCLK. The counters remain reset until TCR[1] is returned to zero.
    -            CRST: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u30,
    -        }),
    -        ///  Timer Counter. The 32 bit TC is incremented every PR+1 cycles of PCLK. The TC is controlled through the TCR.
    -        TC: mmio.Mmio(packed struct(u32) {
    -            ///  Timer counter value.
    -            TC: u32,
    -        }),
    -        ///  Prescale Register. When the Prescale Counter (PC) is equal to this value, the next clock increments the TC and clears the PC.
    -        PR: mmio.Mmio(packed struct(u32) {
    -            ///  Prescale counter maximum value.
    -            PM: u32,
    -        }),
    -        ///  Prescale Counter. The 32 bit PC is a counter which is incremented to the value stored in PR. When the value in PR is reached, the TC is incremented and the PC is cleared. The PC is observable and controllable through the bus interface.
    -        PC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescale counter value.
    -            PC: u32,
    -        }),
    -        ///  Match Control Register. The MCR is used to control if an interrupt is generated and if the TC is reset when a Match occurs.
    -        MCR: mmio.Mmio(packed struct(u32) {
    -            ///  Interrupt on MR0
    -            MR0I: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Interrupt is generated when MR0 matches the value in the TC.
    -                    INTERRUPT_IS_GENERAT = 0x1,
    -                    ///  Interrupt is disabled
    -                    INTERRUPT_IS_DISABLE = 0x0,
    -                },
    -            },
    -            ///  Reset on MR0
    -            MR0R: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  TC will be reset if MR0 matches it.
    -                    TC_WILL_BE_RESET_IF_ = 0x1,
    -                    ///  Feature disabled.
    -                    FEATURE_DISABLED_ = 0x0,
    -                },
    -            },
    -            ///  Stop on MR0
    -            MR0S: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  TC and PC will be stopped and TCR[0] will be set to 0 if MR0 matches the TC.
    -                    TC_AND_PC_WILL_BE_ST = 0x1,
    -                    ///  Feature disabled.
    -                    FEATURE_DISABLED_ = 0x0,
    -                },
    -            },
    -            ///  Interrupt on MR1
    -            MR1I: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Interrupt is generated when MR1 matches the value in the TC.
    -                    INTERRUPT_IS_GENERAT = 0x1,
    -                    ///  Interrupt is disabled.
    -                    INTERRUPT_IS_DISABLE = 0x0,
    -                },
    -            },
    -            ///  Reset on MR1
    -            MR1R: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  TC will be reset if MR1 matches it.
    -                    TC_WILL_BE_RESET_IF_ = 0x1,
    -                    ///  Feature disabled.
    -                    FEATURE_DISABLED_ = 0x0,
    -                },
    -            },
    -            ///  Stop on MR1
    -            MR1S: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  TC and PC will be stopped and TCR[0] will be set to 0 if MR1 matches the TC.
    -                    TC_AND_PC_WILL_BE_ST = 0x1,
    -                    ///  Feature disabled.
    -                    FEATURE_DISABLED_ = 0x0,
    -                },
    -            },
    -            ///  Interrupt on MR2
    -            MR2I: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Interrupt is generated when MR2 matches the value in the TC.
    -                    INTERRUPT_IS_GENERAT = 0x1,
    -                    ///  Interrupt is disabled
    -                    INTERRUPT_IS_DISABLE = 0x0,
    -                },
    -            },
    -            ///  Reset on MR2
    -            MR2R: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  TC will be reset if MR2 matches it.
    -                    TC_WILL_BE_RESET_IF_ = 0x1,
    -                    ///  Feature disabled.
    -                    FEATURE_DISABLED_ = 0x0,
    -                },
    -            },
    -            ///  Stop on MR2.
    -            MR2S: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  TC and PC will be stopped and TCR[0] will be set to 0 if MR2 matches the TC
    -                    TC_AND_PC_WILL_BE_ST = 0x1,
    -                    ///  Feature disabled.
    -                    FEATURE_DISABLED_ = 0x0,
    -                },
    -            },
    -            ///  Interrupt on MR3
    -            MR3I: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Interrupt is generated when MR3 matches the value in the TC.
    -                    INTERRUPT_IS_GENERAT = 0x1,
    -                    ///  This interrupt is disabled
    -                    THIS_INTERRUPT_IS_DI = 0x0,
    -                },
    -            },
    -            ///  Reset on MR3
    -            MR3R: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  TC will be reset if MR3 matches it.
    -                    TC_WILL_BE_RESET_IF_ = 0x1,
    -                    ///  Feature disabled.
    -                    FEATURE_DISABLED_ = 0x0,
    -                },
    -            },
    -            ///  Stop on MR3
    -            MR3S: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  TC and PC will be stopped and TCR[0] will be set to 0 if MR3 matches the TC.
    -                    TC_AND_PC_WILL_BE_ST = 0x1,
    -                    ///  Feature disabled.
    -                    FEATURE_DISABLED_ = 0x0,
    -                },
    -            },
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u20,
    -        }),
    -        reserved40: [16]u8,
    -        ///  Capture Control Register. The CCR controls which edges of the capture inputs are used to load the Capture Registers and whether or not an interrupt is generated when a capture takes place.
    -        CCR: mmio.Mmio(packed struct(u32) {
    -            ///  Capture on CAPn.0 rising edge
    -            CAP0RE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  A sequence of 0 then 1 on CAPn.0 will cause CR0 to be loaded with the contents of TC.
    -                    ENABLE = 0x1,
    -                    ///  This feature is disabled.
    -                    DISABLE = 0x0,
    -                },
    -            },
    -            ///  Capture on CAPn.0 falling edge
    -            CAP0FE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  A sequence of 1 then 0 on CAPn.0 will cause CR0 to be loaded with the contents of TC.
    -                    ENABLE = 0x1,
    -                    ///  This feature is disabled.
    -                    DISABLE = 0x0,
    -                },
    -            },
    -            ///  Interrupt on CAPn.0 event
    -            CAP0I: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  A CR0 load due to a CAPn.0 event will generate an interrupt.
    -                    ENABLE = 0x1,
    -                    ///  This feature is disabled.
    -                    DISABLE = 0x0,
    -                },
    -            },
    -            ///  Capture on CAPn.1 rising edge
    -            CAP1RE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  A sequence of 0 then 1 on CAPn.1 will cause CR1 to be loaded with the contents of TC.
    -                    ENABLE = 0x1,
    -                    ///  This feature is disabled.
    -                    DISABLE = 0x0,
    -                },
    -            },
    -            ///  Capture on CAPn.1 falling edge
    -            CAP1FE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  A sequence of 1 then 0 on CAPn.1 will cause CR1 to be loaded with the contents of TC.
    -                    ENABLE = 0x1,
    -                    ///  This feature is disabled.
    -                    DISABLE = 0x0,
    -                },
    -            },
    -            ///  Interrupt on CAPn.1 event
    -            CAP1I: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  A CR1 load due to a CAPn.1 event will generate an interrupt.
    -                    ENABLE = 0x1,
    -                    ///  This feature is disabled.
    -                    DISABLE = 0x0,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u26,
    -        }),
    -        reserved60: [16]u8,
    -        ///  External Match Register. The EMR controls the external match pins.
    -        EMR: mmio.Mmio(packed struct(u32) {
    -            ///  External Match 0. When a match occurs between the TC and MR0, this bit can either toggle, go low, go high, or do nothing, depending on bits 5:4 of this register. This bit can be driven onto a MATn.0 pin, in a positive-logic manner (0 = low, 1 = high).
    -            EM0: u1,
    -            ///  External Match 1. When a match occurs between the TC and MR1, this bit can either toggle, go low, go high, or do nothing, depending on bits 7:6 of this register. This bit can be driven onto a MATn.1 pin, in a positive-logic manner (0 = low, 1 = high).
    -            EM1: u1,
    -            ///  External Match 2. When a match occurs between the TC and MR2, this bit can either toggle, go low, go high, or do nothing, depending on bits 9:8 of this register. This bit can be driven onto a MATn.0 pin, in a positive-logic manner (0 = low, 1 = high).
    -            EM2: u1,
    -            ///  External Match 3. When a match occurs between the TC and MR3, this bit can either toggle, go low, go high, or do nothing, depending on bits 11:10 of this register. This bit can be driven onto a MATn.0 pin, in a positive-logic manner (0 = low, 1 = high).
    -            EM3: u1,
    -            ///  External Match Control 0. Determines the functionality of External Match 0.
    -            EMC0: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Do Nothing.
    -                    DO_NOTHING_ = 0x0,
    -                    ///  Clear the corresponding External Match bit/output to 0 (MATn.m pin is LOW if pinned out).
    -                    CLEAR_THE_CORRESPOND = 0x1,
    -                    ///  Set the corresponding External Match bit/output to 1 (MATn.m pin is HIGH if pinned out).
    -                    SET_THE_CORRESPONDIN = 0x2,
    -                    ///  Toggle the corresponding External Match bit/output.
    -                    TOGGLE_THE_CORRESPON = 0x3,
    -                },
    -            },
    -            ///  External Match Control 1. Determines the functionality of External Match 1.
    -            EMC1: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Do Nothing.
    -                    DO_NOTHING_ = 0x0,
    -                    ///  Clear the corresponding External Match bit/output to 0 (MATn.m pin is LOW if pinned out).
    -                    CLEAR_THE_CORRESPOND = 0x1,
    -                    ///  Set the corresponding External Match bit/output to 1 (MATn.m pin is HIGH if pinned out).
    -                    SET_THE_CORRESPONDIN = 0x2,
    -                    ///  Toggle the corresponding External Match bit/output.
    -                    TOGGLE_THE_CORRESPON = 0x3,
    -                },
    -            },
    -            ///  External Match Control 2. Determines the functionality of External Match 2.
    -            EMC2: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Do Nothing.
    -                    DO_NOTHING_ = 0x0,
    -                    ///  Clear the corresponding External Match bit/output to 0 (MATn.m pin is LOW if pinned out).
    -                    CLEAR_THE_CORRESPOND = 0x1,
    -                    ///  Set the corresponding External Match bit/output to 1 (MATn.m pin is HIGH if pinned out).
    -                    SET_THE_CORRESPONDIN = 0x2,
    -                    ///  Toggle the corresponding External Match bit/output.
    -                    TOGGLE_THE_CORRESPON = 0x3,
    -                },
    -            },
    -            ///  External Match Control 3. Determines the functionality of External Match 3.
    -            EMC3: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Do Nothing.
    -                    DO_NOTHING_ = 0x0,
    -                    ///  Clear the corresponding External Match bit/output to 0 (MATn.m pin is LOW if pinned out).
    -                    CLEAR_THE_CORRESPOND = 0x1,
    -                    ///  Set the corresponding External Match bit/output to 1 (MATn.m pin is HIGH if pinned out).
    -                    SET_THE_CORRESPONDIN = 0x2,
    -                    ///  Toggle the corresponding External Match bit/output.
    -                    TOGGLE_THE_CORRESPON = 0x3,
    -                },
    -            },
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u20,
    -        }),
    -        reserved112: [48]u8,
    -        ///  Count Control Register. The CTCR selects between Timer and Counter mode, and in Counter mode selects the signal and edge(s) for counting.
    -        CTCR: mmio.Mmio(packed struct(u32) {
    -            ///  Counter/Timer Mode This field selects which rising PCLK edges can increment Timer's Prescale Counter (PC), or clear PC and increment Timer Counter (TC). Timer Mode: the TC is incremented when the Prescale Counter matches the Prescale Register.
    -            CTMODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Timer Mode: every rising PCLK edge
    -                    TIMER_MODE_EVERY_RI = 0x0,
    -                    ///  Counter Mode: TC is incremented on rising edges on the CAP input selected by bits 3:2.
    -                    RISING = 0x1,
    -                    ///  Counter Mode: TC is incremented on falling edges on the CAP input selected by bits 3:2.
    -                    FALLING = 0x2,
    -                    ///  Counter Mode: TC is incremented on both edges on the CAP input selected by bits 3:2.
    -                    DUALEDGE = 0x3,
    -                },
    -            },
    -            ///  Count Input Select When bits 1:0 in this register are not 00, these bits select which CAP pin is sampled for clocking. Note: If Counter mode is selected for a particular CAPn input in the TnCTCR, the 3 bits for that input in the Capture Control Register (TnCCR) must be programmed as 000. However, capture and/or interrupt can be selected for the other 3 CAPn inputs in the same timer.
    -            CINSEL: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CAPn.0 for TIMERn
    -                    CAPN_0_FOR_TIMERN = 0x0,
    -                    ///  CAPn.1 for TIMERn
    -                    CAPN_1_FOR_TIMERN = 0x1,
    -                    _,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u28,
    -        }),
    -    };
    -
    -    ///  General Purpose I/O
    -    pub const GPIO = struct {};
    -
    -    ///  UART0/2/3
    -    pub const UART0 = extern struct {
    -        ///  Receiver Buffer Register. Contains the next received character to be read (DLAB =0).
    -        RBR: mmio.Mmio(packed struct(u32) {
    -            ///  The UARTn Receiver Buffer Register contains the oldest received byte in the UARTn Rx FIFO.
    -            RBR: u8,
    -            ///  Reserved, the value read from a reserved bit is not defined.
    -            RESERVED: u24,
    -        }),
    -        ///  Divisor Latch MSB. Most significant byte of the baud rate divisor value. The full divisor is used to generate a baud rate from the fractional rate divider (DLAB =1).
    -        DLM: mmio.Mmio(packed struct(u32) {
    -            ///  The UARTn Divisor Latch MSB Register, along with the U0DLL register, determines the baud rate of the UARTn.
    -            DLMSB: u8,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u24,
    -        }),
    -        ///  Interrupt ID Register. Identifies which interrupt(s) are pending.
    -        IIR: mmio.Mmio(packed struct(u32) {
    -            ///  Interrupt status. Note that UnIIR[0] is active low. The pending interrupt can be determined by evaluating UnIIR[3:1].
    -            INTSTATUS: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  At least one interrupt is pending.
    -                    AT_LEAST_ONE_INTERRU = 0x0,
    -                    ///  No interrupt is pending.
    -                    NO_INTERRUPT_IS_PEND = 0x1,
    -                },
    -            },
    -            ///  Interrupt identification. UnIER[3:1] identifies an interrupt corresponding to the UARTn Rx or TX FIFO. All other combinations of UnIER[3:1] not listed below are reserved (000,100,101,111).
    -            INTID: packed union {
    -                raw: u3,
    -                value: enum(u3) {
    -                    ///  1 - Receive Line Status (RLS).
    -                    @"1_RECEIVE_LINE_S" = 0x3,
    -                    ///  2a - Receive Data Available (RDA).
    -                    @"2A__RECEIVE_DATA_AV" = 0x2,
    -                    ///  2b - Character Time-out Indicator (CTI).
    -                    @"2B__CHARACTER_TIME_" = 0x6,
    -                    ///  3 - THRE Interrupt
    -                    @"3_THRE_INTERRUPT" = 0x1,
    -                    _,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u2,
    -            ///  Copies of UnFCR[0].
    -            FIFOENABLE: u2,
    -            ///  End of auto-baud interrupt. True if auto-baud has finished successfully and interrupt is enabled.
    -            ABEOINT: u1,
    -            ///  Auto-baud time-out interrupt. True if auto-baud has timed out and interrupt is enabled.
    -            ABTOINT: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u22,
    -        }),
    -        ///  Line Control Register. Contains controls for frame formatting and break generation.
    -        LCR: mmio.Mmio(packed struct(u32) {
    -            ///  Word Length Select.
    -            WLS: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  5-bit character length
    -                    @"5_BIT_CHARACTER_LENG" = 0x0,
    -                    ///  6-bit character length
    -                    @"6_BIT_CHARACTER_LENG" = 0x1,
    -                    ///  7-bit character length
    -                    @"7_BIT_CHARACTER_LENG" = 0x2,
    -                    ///  8-bit character length
    -                    @"8_BIT_CHARACTER_LENG" = 0x3,
    -                },
    -            },
    -            ///  Stop Bit Select
    -            SBS: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  1 stop bit.
    -                    @"1_STOP_BIT_" = 0x0,
    -                    ///  2 stop bits (1.5 if UnLCR[1:0]=00).
    -                    @"2_STOP_BITS_1_5_IF_" = 0x1,
    -                },
    -            },
    -            ///  Parity Enable.
    -            PE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disable parity generation and checking.
    -                    DISABLE_PARITY_GENER = 0x0,
    -                    ///  Enable parity generation and checking.
    -                    ENABLE_PARITY_GENERA = 0x1,
    -                },
    -            },
    -            ///  Parity Select
    -            PS: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Odd parity. Number of 1s in the transmitted character and the attached parity bit will be odd.
    -                    ODD_PARITY_NUMBER_O = 0x0,
    -                    ///  Even Parity. Number of 1s in the transmitted character and the attached parity bit will be even.
    -                    EVEN_PARITY_NUMBER_ = 0x1,
    -                    ///  Forced 1 stick parity.
    -                    FORCED_1_STICK_PARIT = 0x2,
    -                    ///  Forced 0 stick parity.
    -                    FORCED_0_STICK_PARIT = 0x3,
    -                },
    -            },
    -            ///  Break Control
    -            BC: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disable break transmission.
    -                    DISABLE_BREAK_TRANSM = 0x0,
    -                    ///  Enable break transmission. Output pin UARTn TXD is forced to logic 0 when UnLCR[6] is active high.
    -                    ENABLE_BREAK_TRANSMI = 0x1,
    -                },
    -            },
    -            ///  Divisor Latch Access Bit
    -            DLAB: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disable access to Divisor Latches.
    -                    DISABLE_ACCESS_TO_DI = 0x0,
    -                    ///  Enable access to Divisor Latches.
    -                    ENABLE_ACCESS_TO_DIV = 0x1,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u24,
    -        }),
    -        reserved20: [4]u8,
    -        ///  Line Status Register. Contains flags for transmit and receive status, including line errors.
    -        LSR: mmio.Mmio(packed struct(u32) {
    -            ///  Receiver Data Ready. UnLSR[0] is set when the UnRBR holds an unread character and is cleared when the UARTn RBR FIFO is empty.
    -            RDR: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  The UARTn receiver FIFO is empty.
    -                    EMPTY = 0x0,
    -                    ///  The UARTn receiver FIFO is not empty.
    -                    NOTEMPTY = 0x1,
    -                },
    -            },
    -            ///  Overrun Error. The overrun error condition is set as soon as it occurs. An UnLSR read clears UnLSR[1]. UnLSR[1] is set when UARTn RSR has a new character assembled and the UARTn RBR FIFO is full. In this case, the UARTn RBR FIFO will not be overwritten and the character in the UARTn RSR will be lost.
    -            OE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Overrun error status is inactive.
    -                    INACTIVE = 0x0,
    -                    ///  Overrun error status is active.
    -                    ACTIVE = 0x1,
    -                },
    -            },
    -            ///  Parity Error. When the parity bit of a received character is in the wrong state, a parity error occurs. An UnLSR read clears UnLSR[2]. Time of parity error detection is dependent on UnFCR[0]. Note: A parity error is associated with the character at the top of the UARTn RBR FIFO.
    -            PE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Parity error status is inactive.
    -                    INACTIVE = 0x0,
    -                    ///  Parity error status is active.
    -                    ACTIVE = 0x1,
    -                },
    -            },
    -            ///  Framing Error. When the stop bit of a received character is a logic 0, a framing error occurs. An UnLSR read clears UnLSR[3]. The time of the framing error detection is dependent on UnFCR[0]. Upon detection of a framing error, the Rx will attempt to resynchronize to the data and assume that the bad stop bit is actually an early start bit. However, it cannot be assumed that the next received byte will be correct even if there is no Framing Error. Note: A framing error is associated with the character at the top of the UARTn RBR FIFO.
    -            FE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Framing error status is inactive.
    -                    INACTIVE = 0x0,
    -                    ///  Framing error status is active.
    -                    ACTIVE = 0x1,
    -                },
    -            },
    -            ///  Break Interrupt. When RXDn is held in the spacing state (all zeroes) for one full character transmission (start, data, parity, stop), a break interrupt occurs. Once the break condition has been detected, the receiver goes idle until RXDn goes to marking state (all ones). An UnLSR read clears this status bit. The time of break detection is dependent on UnFCR[0]. Note: The break interrupt is associated with the character at the top of the UARTn RBR FIFO.
    -            BI: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Break interrupt status is inactive.
    -                    INACTIVE = 0x0,
    -                    ///  Break interrupt status is active.
    -                    ACTIVE = 0x1,
    -                },
    -            },
    -            ///  Transmitter Holding Register Empty. THRE is set immediately upon detection of an empty UARTn THR and is cleared on a UnTHR write.
    -            THRE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  UnTHR contains valid data.
    -                    VALIDDATA = 0x0,
    -                    ///  UnTHR is empty.
    -                    EMPTY = 0x1,
    -                },
    -            },
    -            ///  Transmitter Empty. TEMT is set when both UnTHR and UnTSR are empty; TEMT is cleared when either the UnTSR or the UnTHR contain valid data.
    -            TEMT: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  UnTHR and/or the UnTSR contains valid data.
    -                    VALIDDATA = 0x0,
    -                    ///  UnTHR and the UnTSR are empty.
    -                    EMPTY = 0x1,
    -                },
    -            },
    -            ///  Error in RX FIFO . UnLSR[7] is set when a character with a Rx error such as framing error, parity error or break interrupt, is loaded into the UnRBR. This bit is cleared when the UnLSR register is read and there are no subsequent errors in the UARTn FIFO.
    -            RXFE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  UnRBR contains no UARTn RX errors or UnFCR[0]=0.
    -                    NOERROR = 0x0,
    -                    ///  UARTn RBR contains at least one UARTn RX error.
    -                    ERRORS = 0x1,
    -                },
    -            },
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u24,
    -        }),
    -        reserved28: [4]u8,
    -        ///  Scratch Pad Register. 8-bit temporary storage for software.
    -        SCR: mmio.Mmio(packed struct(u32) {
    -            ///  A readable, writable byte.
    -            PAD: u8,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u24,
    -        }),
    -        ///  Auto-baud Control Register. Contains controls for the auto-baud feature.
    -        ACR: mmio.Mmio(packed struct(u32) {
    -            ///  Start bit. This bit is automatically cleared after auto-baud completion.
    -            START: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Auto-baud stop (auto-baud is not running).
    -                    AUTO_BAUD_STOP_AUTO = 0x0,
    -                    ///  Auto-baud start (auto-baud is running). Auto-baud run bit. This bit is automatically cleared after auto-baud completion.
    -                    AUTO_BAUD_START_AUT = 0x1,
    -                },
    -            },
    -            ///  Auto-baud mode select bit.
    -            MODE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Mode 0.
    -                    MODE_0_ = 0x0,
    -                    ///  Mode 1.
    -                    MODE_1_ = 0x1,
    -                },
    -            },
    -            ///  Restart bit.
    -            AUTORESTART: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  No restart.
    -                    NO_RESTART_ = 0x0,
    -                    ///  Restart in case of time-out (counter restarts at next UARTn Rx falling edge)
    -                    RESTART_IN_CASE_OF_T = 0x1,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u5,
    -            ///  End of auto-baud interrupt clear bit (write-only accessible). Writing a 1 will clear the corresponding interrupt in the UnIIR. Writing a 0 has no impact.
    -            ABEOINTCLR: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  No impact.
    -                    NO_IMPACT_ = 0x0,
    -                    ///  Clear the corresponding interrupt in the IIR.
    -                    CLEAR_THE_CORRESPOND = 0x1,
    -                },
    -            },
    -            ///  Auto-baud time-out interrupt clear bit (write-only accessible). Writing a 1 will clear the corresponding interrupt in the UnIIR. Writing a 0 has no impact.
    -            ABTOINTCLR: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  No impact.
    -                    NO_IMPACT_ = 0x0,
    -                    ///  Clear the corresponding interrupt in the IIR.
    -                    CLEAR_THE_CORRESPOND = 0x1,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u22,
    -        }),
    -        reserved40: [4]u8,
    -        ///  Fractional Divider Register. Generates a clock input for the baud rate divider.
    -        FDR: mmio.Mmio(packed struct(u32) {
    -            ///  Baud-rate generation pre-scaler divisor value. If this field is 0, fractional baud-rate generator will not impact the UARTn baudrate.
    -            DIVADDVAL: u4,
    -            ///  Baud-rate pre-scaler multiplier value. This field must be greater or equal 1 for UARTn to operate properly, regardless of whether the fractional baud-rate generator is used or not.
    -            MULVAL: u4,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u24,
    -        }),
    -        reserved48: [4]u8,
    -        ///  Transmit Enable Register. Turns off UART transmitter for use with software flow control.
    -        TER: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u7,
    -            ///  When this bit is 1, as it is after a Reset, data written to the THR is output on the TXD pin as soon as any preceding data has been sent. If this bit is cleared to 0 while a character is being sent, the transmission of that character is completed, but no further characters are sent until this bit is set again. In other words, a 0 in this bit blocks the transfer of characters from the THR or TX FIFO into the transmit shift register. Software implementing software-handshaking can clear this bit when it receives an XOFF character (DC3). Software can set this bit again when it receives an XON (DC1) character.
    -            TXEN: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u24,
    -        }),
    -        reserved76: [24]u8,
    -        ///  RS-485/EIA-485 Control. Contains controls to configure various aspects of RS-485/EIA-485 modes.
    -        RS485CTRL: mmio.Mmio(packed struct(u32) {
    -            ///  NMM enable.
    -            NMMEN: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  RS-485/EIA-485 Normal Multidrop Mode (NMM) is disabled.
    -                    DISABLED = 0x0,
    -                    ///  RS-485/EIA-485 Normal Multidrop Mode (NMM) is enabled. In this mode, an address is detected when a received byte has the parity bit = 1, generating a received data interrupt. See Section 18.6.16 RS-485/EIA-485 modes of operation.
    -                    ENABLED = 0x1,
    -                },
    -            },
    -            ///  Receiver enable.
    -            RXDIS: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  The receiver is enabled.
    -                    ENABLED = 0x0,
    -                    ///  The receiver is disabled.
    -                    DISABLED = 0x1,
    -                },
    -            },
    -            ///  AAD enable.
    -            AADEN: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Auto Address Detect (AAD) is disabled.
    -                    DISABLED = 0x0,
    -                    ///  Auto Address Detect (AAD) is enabled.
    -                    ENABLED = 0x1,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u1,
    -            ///  Direction control enable.
    -            DCTRL: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disable Auto Direction Control.
    -                    DISABLE_AUTO_DIRECTI = 0x0,
    -                    ///  Enable Auto Direction Control.
    -                    ENABLE_AUTO_DIRECTIO = 0x1,
    -                },
    -            },
    -            ///  Direction control pin polarity. This bit reverses the polarity of the direction control signal on the Un_OE pin.
    -            OINV: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  The direction control pin will be driven to logic 0 when the transmitter has data to be sent. It will be driven to logic 1 after the last bit of data has been transmitted.
    -                    DIRLOW = 0x0,
    -                    ///  The direction control pin will be driven to logic 1 when the transmitter has data to be sent. It will be driven to logic 0 after the last bit of data has been transmitted.
    -                    DIRHIGH = 0x1,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u26,
    -        }),
    -        ///  RS-485/EIA-485 address match. Contains the address match value for RS-485/EIA-485 mode.
    -        RS485ADRMATCH: mmio.Mmio(packed struct(u32) {
    -            ///  Contains the address match value.
    -            ADRMATCH: u8,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u24,
    -        }),
    -        ///  RS-485/EIA-485 direction control delay.
    -        RS485DLY: mmio.Mmio(packed struct(u32) {
    -            ///  Contains the direction control (UnOE) delay value. This register works in conjunction with an 8-bit counter.
    -            DLY: u8,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u24,
    -        }),
    -    };
    -
    -    ///  UART1
    -    pub const UART1 = extern struct {
    -        ///  DLAB =0 Receiver Buffer Register. Contains the next received character to be read.
    -        RBR: mmio.Mmio(packed struct(u32) {
    -            ///  The UART1 Receiver Buffer Register contains the oldest received byte in the UART1 RX FIFO.
    -            RBR: u8,
    -            ///  Reserved, the value read from a reserved bit is not defined.
    -            RESERVED: u24,
    -        }),
    -        ///  DLAB =1. Divisor Latch MSB. Most significant byte of the baud rate divisor value. The full divisor is used to generate a baud rate from the fractional rate divider.
    -        DLM: mmio.Mmio(packed struct(u32) {
    -            ///  The UART1 Divisor Latch MSB Register, along with the U1DLL register, determines the baud rate of the UART1.
    -            DLMSB: u8,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u24,
    -        }),
    -        ///  Interrupt ID Register. Identifies which interrupt(s) are pending.
    -        IIR: mmio.Mmio(packed struct(u32) {
    -            ///  Interrupt status. Note that IIR[0] is active low. The pending interrupt can be determined by evaluating IIR[3:1].
    -            INTSTATUS: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  At least one interrupt is pending.
    -                    AT_LEAST_ONE_INTERRU = 0x0,
    -                    ///  No interrupt is pending.
    -                    NO_INTERRUPT_IS_PEND = 0x1,
    -                },
    -            },
    -            ///  Interrupt identification. IER[3:1] identifies an interrupt corresponding to the UART1 Rx or TX FIFO. All other combinations of IER[3:1] not listed below are reserved (100,101,111).
    -            INTID: packed union {
    -                raw: u3,
    -                value: enum(u3) {
    -                    ///  1 - Receive Line Status (RLS).
    -                    RLS = 0x3,
    -                    ///  2a - Receive Data Available (RDA).
    -                    RDA = 0x2,
    -                    ///  2b - Character Time-out Indicator (CTI).
    -                    CTI = 0x6,
    -                    ///  3 - THRE Interrupt.
    -                    THRE = 0x1,
    -                    ///  4 - Modem Interrupt.
    -                    MODEM = 0x0,
    -                    _,
    -                },
    -            },
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u2,
    -            ///  Copies of FCR[0].
    -            FIFOENABLE: u2,
    -            ///  End of auto-baud interrupt. True if auto-baud has finished successfully and interrupt is enabled.
    -            ABEOINT: u1,
    -            ///  Auto-baud time-out interrupt. True if auto-baud has timed out and interrupt is enabled.
    -            ABTOINT: u1,
    -            ///  Reserved, the value read from a reserved bit is not defined.
    -            RESERVED: u22,
    -        }),
    -        ///  Line Control Register. Contains controls for frame formatting and break generation.
    -        LCR: mmio.Mmio(packed struct(u32) {
    -            ///  Word Length Select.
    -            WLS: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  5-bit character length.
    -                    @"5_BIT_CHARACTER_LENG" = 0x0,
    -                    ///  6-bit character length.
    -                    @"6_BIT_CHARACTER_LENG" = 0x1,
    -                    ///  7-bit character length.
    -                    @"7_BIT_CHARACTER_LENG" = 0x2,
    -                    ///  8-bit character length.
    -                    @"8_BIT_CHARACTER_LENG" = 0x3,
    -                },
    -            },
    -            ///  Stop Bit Select.
    -            SBS: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  1 stop bit.
    -                    @"1_STOP_BIT_" = 0x0,
    -                    ///  2 stop bits (1.5 if LCR[1:0]=00).
    -                    @"2_STOP_BITS_1_5_IF_" = 0x1,
    -                },
    -            },
    -            ///  Parity Enable.
    -            PE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disable parity generation and checking.
    -                    DISABLE_PARITY_GENER = 0x0,
    -                    ///  Enable parity generation and checking.
    -                    ENABLE_PARITY_GENERA = 0x1,
    -                },
    -            },
    -            ///  Parity Select.
    -            PS: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Odd parity. Number of 1s in the transmitted character and the attached parity bit will be odd.
    -                    ODD_PARITY_NUMBER_O = 0x0,
    -                    ///  Even Parity. Number of 1s in the transmitted character and the attached parity bit will be even.
    -                    EVEN_PARITY_NUMBER_ = 0x1,
    -                    ///  Forced 1 stick parity.
    -                    FORCED1STICK_PAR = 0x2,
    -                    ///  Forced 0 stick parity.
    -                    FORCED0STICK_PAR = 0x3,
    -                },
    -            },
    -            ///  Break Control.
    -            BC: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disable break transmission.
    -                    DISABLE_BREAK_TRANSM = 0x0,
    -                    ///  Enable break transmission. Output pin UART1 TXD is forced to logic 0 when LCR[6] is active high.
    -                    ENABLE_BREAK_TRANSMI = 0x1,
    -                },
    -            },
    -            ///  Divisor Latch Access Bit (DLAB)
    -            DLAB: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disable access to Divisor Latches.
    -                    DISABLE_ACCESS_TO_DI = 0x0,
    -                    ///  Enable access to Divisor Latches.
    -                    ENABLE_ACCESS_TO_DIV = 0x1,
    -                },
    -            },
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u24,
    -        }),
    -        ///  Modem Control Register. Contains controls for flow control handshaking and loopback mode.
    -        MCR: mmio.Mmio(packed struct(u32) {
    -            ///  DTR Control. Source for modem output pin, DTR. This bit reads as 0 when modem loopback mode is active.
    -            DTRCTRL: u1,
    -            ///  RTS Control. Source for modem output pin RTS. This bit reads as 0 when modem loopback mode is active.
    -            RTSCTRL: u1,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u2,
    -            ///  Loopback Mode Select. The modem loopback mode provides a mechanism to perform diagnostic loopback testing. Serial data from the transmitter is connected internally to serial input of the receiver. Input pin, RXD1, has no effect on loopback and output pin, TXD1 is held in marking state. The 4 modem inputs (CTS, DSR, RI and DCD) are disconnected externally. Externally, the modem outputs (RTS, DTR) are set inactive. Internally, the 4 modem outputs are connected to the 4 modem inputs. As a result of these connections, the upper 4 bits of the MSR will be driven by the lower 4 bits of the MCR rather than the 4 modem inputs in normal mode. This permits modem status interrupts to be generated in loopback mode by writing the lower 4 bits of MCR.
    -            LMS: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disable modem loopback mode.
    -                    DISABLE_MODEM_LOOPBA = 0x0,
    -                    ///  Enable modem loopback mode.
    -                    ENABLE_MODEM_LOOPBAC = 0x1,
    -                },
    -            },
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u1,
    -            ///  RTS enable.
    -            RTSEN: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disable auto-rts flow control.
    -                    DISABLE_AUTO_RTS_FLO = 0x0,
    -                    ///  Enable auto-rts flow control.
    -                    ENABLE_AUTO_RTS_FLOW = 0x1,
    -                },
    -            },
    -            ///  CTS enable.
    -            CTSEN: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disable auto-cts flow control.
    -                    DISABLE_AUTO_CTS_FLO = 0x0,
    -                    ///  Enable auto-cts flow control.
    -                    ENABLE_AUTO_CTS_FLOW = 0x1,
    -                },
    -            },
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u24,
    -        }),
    -        ///  Line Status Register. Contains flags for transmit and receive status, including line errors.
    -        LSR: mmio.Mmio(packed struct(u32) {
    -            ///  Receiver Data Ready. LSR[0] is set when the RBR holds an unread character and is cleared when the UART1 RBR FIFO is empty.
    -            RDR: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  The UART1 receiver FIFO is empty.
    -                    EMPTY = 0x0,
    -                    ///  The UART1 receiver FIFO is not empty.
    -                    NOTEMPTY = 0x1,
    -                },
    -            },
    -            ///  Overrun Error. The overrun error condition is set as soon as it occurs. An LSR read clears LSR[1]. LSR[1] is set when UART1 RSR has a new character assembled and the UART1 RBR FIFO is full. In this case, the UART1 RBR FIFO will not be overwritten and the character in the UART1 RSR will be lost.
    -            OE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Overrun error status is inactive.
    -                    INACTIVE = 0x0,
    -                    ///  Overrun error status is active.
    -                    ACTIVE = 0x1,
    -                },
    -            },
    -            ///  Parity Error. When the parity bit of a received character is in the wrong state, a parity error occurs. An LSR read clears LSR[2]. Time of parity error detection is dependent on FCR[0]. Note: A parity error is associated with the character at the top of the UART1 RBR FIFO.
    -            PE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Parity error status is inactive.
    -                    INACTIVE = 0x0,
    -                    ///  Parity error status is active.
    -                    ACTIVE = 0x1,
    -                },
    -            },
    -            ///  Framing Error. When the stop bit of a received character is a logic 0, a framing error occurs. An LSR read clears LSR[3]. The time of the framing error detection is dependent on FCR0. Upon detection of a framing error, the RX will attempt to resynchronize to the data and assume that the bad stop bit is actually an early start bit. However, it cannot be assumed that the next received byte will be correct even if there is no Framing Error. Note: A framing error is associated with the character at the top of the UART1 RBR FIFO.
    -            FE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Framing error status is inactive.
    -                    INACTIVE = 0x0,
    -                    ///  Framing error status is active.
    -                    ACTIVE = 0x1,
    -                },
    -            },
    -            ///  Break Interrupt. When RXD1 is held in the spacing state (all zeroes) for one full character transmission (start, data, parity, stop), a break interrupt occurs. Once the break condition has been detected, the receiver goes idle until RXD1 goes to marking state (all ones). An LSR read clears this status bit. The time of break detection is dependent on FCR[0]. Note: The break interrupt is associated with the character at the top of the UART1 RBR FIFO.
    -            BI: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Break interrupt status is inactive.
    -                    INACTIVE = 0x0,
    -                    ///  Break interrupt status is active.
    -                    ACTIVE = 0x1,
    -                },
    -            },
    -            ///  Transmitter Holding Register Empty. THRE is set immediately upon detection of an empty UART1 THR and is cleared on a THR write.
    -            THRE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  THR contains valid data.
    -                    VALID = 0x0,
    -                    ///  THR is empty.
    -                    THR_IS_EMPTY_ = 0x1,
    -                },
    -            },
    -            ///  Transmitter Empty. TEMT is set when both THR and TSR are empty; TEMT is cleared when either the TSR or the THR contain valid data.
    -            TEMT: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  THR and/or the TSR contains valid data.
    -                    VALID = 0x0,
    -                    ///  THR and the TSR are empty.
    -                    EMPTY = 0x1,
    -                },
    -            },
    -            ///  Error in RX FIFO. LSR[7] is set when a character with a RX error such as framing error, parity error or break interrupt, is loaded into the RBR. This bit is cleared when the LSR register is read and there are no subsequent errors in the UART1 FIFO.
    -            RXFE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  RBR contains no UART1 RX errors or FCR[0]=0.
    -                    NOERROR = 0x0,
    -                    ///  UART1 RBR contains at least one UART1 RX error.
    -                    ERRORS = 0x1,
    -                },
    -            },
    -            ///  Reserved, the value read from a reserved bit is not defined.
    -            RESERVED: u24,
    -        }),
    -        ///  Modem Status Register. Contains handshake signal status flags.
    -        MSR: mmio.Mmio(packed struct(u32) {
    -            ///  Delta CTS. Set upon state change of input CTS. Cleared on an MSR read.
    -            DCTS: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  No change detected on modem input, CTS.
    -                    NO_CHANGE_DETECTED_O = 0x0,
    -                    ///  State change detected on modem input, CTS.
    -                    STATE_CHANGE_DETECTE = 0x1,
    -                },
    -            },
    -            ///  Delta DSR. Set upon state change of input DSR. Cleared on an MSR read.
    -            DDSR: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  No change detected on modem input, DSR.
    -                    NO_CHANGE_DETECTED_O = 0x0,
    -                    ///  State change detected on modem input, DSR.
    -                    STATE_CHANGE_DETECTE = 0x1,
    -                },
    -            },
    -            ///  Trailing Edge RI. Set upon low to high transition of input RI. Cleared on an MSR read.
    -            TERI: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  No change detected on modem input, RI.
    -                    NO_CHANGE_DETECTED_O = 0x0,
    -                    ///  Low-to-high transition detected on RI.
    -                    LOW_TO_HIGH_TRANSITI = 0x1,
    -                },
    -            },
    -            ///  Delta DCD. Set upon state change of input DCD. Cleared on an MSR read.
    -            DDCD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  No change detected on modem input, DCD.
    -                    NO_CHANGE_DETECTED_O = 0x0,
    -                    ///  State change detected on modem input, DCD.
    -                    STATE_CHANGE_DETECTE = 0x1,
    -                },
    -            },
    -            ///  Clear To Send State. Complement of input signal CTS. This bit is connected to MCR[1] in modem loopback mode.
    -            CTS: u1,
    -            ///  Data Set Ready State. Complement of input signal DSR. This bit is connected to MCR[0] in modem loopback mode.
    -            DSR: u1,
    -            ///  Ring Indicator State. Complement of input RI. This bit is connected to MCR[2] in modem loopback mode.
    -            RI: u1,
    -            ///  Data Carrier Detect State. Complement of input DCD. This bit is connected to MCR[3] in modem loopback mode.
    -            DCD: u1,
    -            ///  Reserved, the value read from a reserved bit is not defined.
    -            RESERVED: u24,
    -        }),
    -        ///  Scratch Pad Register. 8-bit temporary storage for software.
    -        SCR: mmio.Mmio(packed struct(u32) {
    -            ///  A readable, writable byte.
    -            Pad: u8,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u24,
    -        }),
    -        ///  Auto-baud Control Register. Contains controls for the auto-baud feature.
    -        ACR: mmio.Mmio(packed struct(u32) {
    -            ///  Auto-baud start bit. This bit is automatically cleared after auto-baud completion.
    -            START: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Auto-baud stop (auto-baud is not running).
    -                    STOP = 0x0,
    -                    ///  Auto-baud start (auto-baud is running). Auto-baud run bit. This bit is automatically cleared after auto-baud completion.
    -                    START = 0x1,
    -                },
    -            },
    -            ///  Auto-baud mode select bit.
    -            MODE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Mode 0.
    -                    MODE_0_ = 0x0,
    -                    ///  Mode 1.
    -                    MODE_1_ = 0x1,
    -                },
    -            },
    -            ///  Auto-baud restart bit.
    -            AUTORESTART: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  No restart
    -                    NO_RESTART = 0x0,
    -                    ///  Restart in case of time-out (counter restarts at next UART1 Rx falling edge)
    -                    RESTART_IN_CASE_OF_T = 0x1,
    -                },
    -            },
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u5,
    -            ///  End of auto-baud interrupt clear bit (write-only).
    -            ABEOINTCLR: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Writing a 0 has no impact.
    -                    WRITING_A_0_HAS_NO_I = 0x0,
    -                    ///  Writing a 1 will clear the corresponding interrupt in the IIR.
    -                    WRITING_A_1_WILL_CLE = 0x1,
    -                },
    -            },
    -            ///  Auto-baud time-out interrupt clear bit (write-only).
    -            ABTOINTCLR: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Writing a 0 has no impact.
    -                    WRITING_A_0_HAS_NO_I = 0x0,
    -                    ///  Writing a 1 will clear the corresponding interrupt in the IIR.
    -                    WRITING_A_1_WILL_CLE = 0x1,
    -                },
    -            },
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u22,
    -        }),
    -        reserved40: [4]u8,
    -        ///  Fractional Divider Register. Generates a clock input for the baud rate divider.
    -        FDR: mmio.Mmio(packed struct(u32) {
    -            ///  Baud rate generation pre-scaler divisor value. If this field is 0, fractional baud rate generator will not impact the UART1 baud rate.
    -            DIVADDVAL: u4,
    -            ///  Baud rate pre-scaler multiplier value. This field must be greater or equal 1 for UART1 to operate properly, regardless of whether the fractional baud rate generator is used or not.
    -            MULVAL: u4,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u24,
    -        }),
    -        reserved48: [4]u8,
    -        ///  Transmit Enable Register. Turns off UART transmitter for use with software flow control.
    -        TER: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u7,
    -            ///  When this bit is 1, as it is after a Reset, data written to the THR is output on the TXD pin as soon as any preceding data has been sent. If this bit cleared to 0 while a character is being sent, the transmission of that character is completed, but no further characters are sent until this bit is set again. In other words, a 0 in this bit blocks the transfer of characters from the THR or TX FIFO into the transmit shift register. Software can clear this bit when it detects that the a hardware-handshaking TX-permit signal (CTS) has gone false, or with software handshaking, when it receives an XOFF character (DC3). Software can set this bit again when it detects that the TX-permit signal has gone true, or when it receives an XON (DC1) character.
    -            TXEN: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u24,
    -        }),
    -        reserved76: [24]u8,
    -        ///  RS-485/EIA-485 Control. Contains controls to configure various aspects of RS-485/EIA-485 modes.
    -        RS485CTRL: mmio.Mmio(packed struct(u32) {
    -            ///  RS-485/EIA-485 Normal Multidrop Mode (NMM) mode select.
    -            NMMEN: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled.
    -                    DISABLED_ = 0x0,
    -                    ///  Enabled. In this mode, an address is detected when a received byte causes the UART to set the parity error and generate an interrupt.
    -                    ENABLED_IN_THIS_MOD = 0x1,
    -                },
    -            },
    -            ///  Receive enable.
    -            RXDIS: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Enabled.
    -                    ENABLED_ = 0x0,
    -                    ///  Disabled.
    -                    DISABLED_ = 0x1,
    -                },
    -            },
    -            ///  Auto Address Detect (AAD) enable.
    -            AADEN: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled.
    -                    DISABLED_ = 0x0,
    -                    ///  Enabled.
    -                    ENABLED_ = 0x1,
    -                },
    -            },
    -            ///  Direction control.
    -            SEL: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  RTS. If direction control is enabled (bit DCTRL = 1), pin RTS is used for direction control.
    -                    RTS_IF_DIRECTION_CO = 0x0,
    -                    ///  DTR. If direction control is enabled (bit DCTRL = 1), pin DTR is used for direction control.
    -                    DTR_IF_DIRECTION_CO = 0x1,
    -                },
    -            },
    -            ///  Direction control enable.
    -            DCTRL: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disable Auto Direction Control.
    -                    DISABLE_AUTO_DIRECTI = 0x0,
    -                    ///  Enable Auto Direction Control.
    -                    ENABLE_AUTO_DIRECTIO = 0x1,
    -                },
    -            },
    -            ///  Polarity. This bit reverses the polarity of the direction control signal on the RTS (or DTR) pin.
    -            OINV: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  LOW. The direction control pin will be driven to logic 0 when the transmitter has data to be sent. It will be driven to logic 1 after the last bit of data has been transmitted.
    -                    LOW_THE_DIRECTION_C = 0x0,
    -                    ///  HIGH. The direction control pin will be driven to logic 1 when the transmitter has data to be sent. It will be driven to logic 0 after the last bit of data has been transmitted.
    -                    HIGH_THE_DIRECTION_ = 0x1,
    -                },
    -            },
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u26,
    -        }),
    -        ///  RS-485/EIA-485 address match. Contains the address match value for RS-485/EIA-485 mode.
    -        RS485ADRMATCH: mmio.Mmio(packed struct(u32) {
    -            ///  Contains the address match value.
    -            ADRMATCH: u8,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u24,
    -        }),
    -        ///  RS-485/EIA-485 direction control delay.
    -        RS485DLY: mmio.Mmio(packed struct(u32) {
    -            ///  Contains the direction control (RTS or DTR) delay value. This register works in conjunction with an 8-bit counter.
    -            DLY: u8,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u24,
    -        }),
    -    };
    -
    -    ///  Pulse Width Modulators (PWM1)
    -    pub const PWM1 = extern struct {
    -        ///  Interrupt Register. The IR can be written to clear interrupts, or read to identify which PWM interrupt sources are pending.
    -        IR: mmio.Mmio(packed struct(u32) {
    -            ///  Interrupt flag for PWM match channel 0.
    -            PWMMR0INT: u1,
    -            ///  Interrupt flag for PWM match channel 1.
    -            PWMMR1INT: u1,
    -            ///  Interrupt flag for PWM match channel 2.
    -            PWMMR2INT: u1,
    -            ///  Interrupt flag for PWM match channel 3.
    -            PWMMR3INT: u1,
    -            ///  Interrupt flag for capture input 0
    -            PWMCAP0INT: u1,
    -            ///  Interrupt flag for capture input 1 (available in PWM1IR only; this bit is reserved in PWM0IR).
    -            PWMCAP1INT: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u2,
    -            ///  Interrupt flag for PWM match channel 4.
    -            PWMMR4INT: u1,
    -            ///  Interrupt flag for PWM match channel 5.
    -            PWMMR5INT: u1,
    -            ///  Interrupt flag for PWM match channel 6.
    -            PWMMR6INT: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u21,
    -        }),
    -        ///  Timer Control Register. The TCR is used to control the Timer Counter functions.
    -        TCR: mmio.Mmio(packed struct(u32) {
    -            ///  Counter Enable
    -            CE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  The PWM Timer Counter and PWM Prescale Counter are enabled for counting.
    -                    THE_PWM_TIMER_COUNTE = 0x1,
    -                    ///  The counters are disabled.
    -                    THE_COUNTERS_ARE_DIS = 0x0,
    -                },
    -            },
    -            ///  Counter Reset
    -            CR: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  The PWM Timer Counter and the PWM Prescale Counter are synchronously reset on the next positive edge of PCLK. The counters remain reset until this bit is returned to zero.
    -                    THE_PWM_TIMER_COUNTE = 0x1,
    -                    ///  Clear reset.
    -                    CLEAR_RESET_ = 0x0,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u1,
    -            ///  PWM Enable
    -            PWMEN: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  PWM mode is enabled (counter resets to 1). PWM mode causes the shadow registers to operate in connection with the Match registers. A program write to a Match register will not have an effect on the Match result until the corresponding bit in PWMLER has been set, followed by the occurrence of a PWM Match 0 event. Note that the PWM Match register that determines the PWM rate (PWM Match Register 0 - MR0) must be set up prior to the PWM being enabled. Otherwise a Match event will not occur to cause shadow register contents to become effective.
    -                    PWM_MODE_IS_ENABLED_ = 0x1,
    -                    ///  Timer mode is enabled (counter resets to 0).
    -                    TIMER_MODE_IS_ENABLE = 0x0,
    -                },
    -            },
    -            ///  Master Disable (PWM0 only). The two PWMs may be synchronized using the Master Disable control bit. The Master disable bit of the Master PWM (PWM0 module) controls a secondary enable input to both PWMs, as shown in Figure 141. This bit has no function in the Slave PWM (PWM1).
    -            MDIS: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Master use. PWM0 is the master, and both PWMs are enabled for counting.
    -                    MASTER_USE_PWM0_IS_ = 0x1,
    -                    ///  Individual use. The PWMs are used independently, and the individual Counter Enable bits are used to control the PWMs.
    -                    INDIVIDUAL_USE_THE_ = 0x0,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u27,
    -        }),
    -        ///  Timer Counter. The 32 bit TC is incremented every PR+1 cycles of PCLK. The TC is controlled through the TCR.
    -        TC: mmio.Mmio(packed struct(u32) {
    -            ///  Timer counter value.
    -            TC: u32,
    -        }),
    -        ///  Prescale Register. Determines how often the PWM counter is incremented.
    -        PR: mmio.Mmio(packed struct(u32) {
    -            ///  Prescale counter maximum value.
    -            PM: u32,
    -        }),
    -        ///  Prescale Counter. Prescaler for the main PWM counter.
    -        PC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescale counter value.
    -            PC: u32,
    -        }),
    -        ///  Match Control Register. The MCR is used to control whether an interrupt is generated and if the PWM counter is reset when a Match occurs.
    -        MCR: mmio.Mmio(packed struct(u32) {
    -            ///  Interrupt PWM0
    -            PWMMR0I: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled.
    -                    DISABLED_ = 0x0,
    -                    ///  Interrupt on PWMMR0: an interrupt is generated when PWMMR0 matches the value in the PWMTC.
    -                    INTERRUPT_ON_PWMMR0 = 0x1,
    -                },
    -            },
    -            ///  Reset PWM0
    -            PWMMR0R: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled.
    -                    DISABLED_ = 0x0,
    -                    ///  Reset on PWMMR0: the PWMTC will be reset if PWMMR0 matches it.
    -                    RESET_ON_PWMMR0_THE = 0x1,
    -                },
    -            },
    -            ///  Stop PWM0
    -            PWMMR0S: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled
    -                    DISABLED = 0x0,
    -                    ///  Stop on PWMMR0: the PWMTC and PWMPC will be stopped and PWMTCR bit 0 will be set to 0 if PWMMR0 matches the PWMTC.
    -                    STOP_ON_PWMMR0_THE_ = 0x1,
    -                },
    -            },
    -            ///  Interrupt PWM1
    -            PWMMR1I: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled.
    -                    DISABLED_ = 0x0,
    -                    ///  Interrupt on PWMMR1: an interrupt is generated when PWMMR1 matches the value in the PWMTC.
    -                    INTERRUPT_ON_PWMMR1 = 0x1,
    -                },
    -            },
    -            ///  Reset PWM1
    -            PWMMR1R: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled.
    -                    DISABLED_ = 0x0,
    -                    ///  Reset on PWMMR1: the PWMTC will be reset if PWMMR1 matches it.
    -                    RESET_ON_PWMMR1_THE = 0x1,
    -                },
    -            },
    -            ///  Stop PWM1
    -            PWMMR1S: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled
    -                    DISABLED = 0x0,
    -                    ///  Stop on PWMMR1: the PWMTC and PWMPC will be stopped and PWMTCR bit 0 will be set to 0 if PWMMR1 matches the PWMTC.
    -                    STOP_ON_PWMMR1_THE_ = 0x1,
    -                },
    -            },
    -            ///  Interrupt PWM0
    -            PWMMR2I: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled.
    -                    DISABLED_ = 0x0,
    -                    ///  Interrupt on PWMMR2: an interrupt is generated when PWMMR2 matches the value in the PWMTC.
    -                    INTERRUPT_ON_PWMMR2 = 0x1,
    -                },
    -            },
    -            ///  Reset PWM0
    -            PWMMR2R: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled.
    -                    DISABLED_ = 0x0,
    -                    ///  Reset on PWMMR2: the PWMTC will be reset if PWMMR2 matches it.
    -                    RESET_ON_PWMMR2_THE = 0x1,
    -                },
    -            },
    -            ///  Stop PWM0
    -            PWMMR2S: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled
    -                    DISABLED = 0x0,
    -                    ///  Stop on PWMMR2: the PWMTC and PWMPC will be stopped and PWMTCR bit 0 will be set to 0 if PWMMR0 matches the PWMTC.
    -                    STOP_ON_PWMMR2_THE_ = 0x1,
    -                },
    -            },
    -            ///  Interrupt PWM3
    -            PWMMR3I: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled.
    -                    DISABLED_ = 0x0,
    -                    ///  Interrupt on PWMMR3: an interrupt is generated when PWMMR3 matches the value in the PWMTC.
    -                    INTERRUPT_ON_PWMMR3 = 0x1,
    -                },
    -            },
    -            ///  Reset PWM3
    -            PWMMR3R: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled.
    -                    DISABLED_ = 0x0,
    -                    ///  Reset on PWMMR3: the PWMTC will be reset if PWMMR3 matches it.
    -                    RESET_ON_PWMMR3_THE = 0x1,
    -                },
    -            },
    -            ///  Stop PWM0
    -            PWMMR3S: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled
    -                    DISABLED = 0x0,
    -                    ///  Stop on PWMMR3: the PWMTC and PWMPC will be stopped and PWMTCR bit 0 will be set to 0 if PWMMR0 matches the PWMTC.
    -                    STOP_ON_PWMMR3_THE_ = 0x1,
    -                },
    -            },
    -            ///  Interrupt PWM4
    -            PWMMR4I: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled.
    -                    DISABLED_ = 0x0,
    -                    ///  Interrupt on PWMMR4: an interrupt is generated when PWMMR4 matches the value in the PWMTC.
    -                    INTERRUPT_ON_PWMMR4 = 0x1,
    -                },
    -            },
    -            ///  Reset PWM4
    -            PWMMR4R: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled.
    -                    DISABLED_ = 0x0,
    -                    ///  Reset on PWMMR4: the PWMTC will be reset if PWMMR4 matches it.
    -                    RESET_ON_PWMMR4_THE = 0x1,
    -                },
    -            },
    -            ///  Stop PWM4
    -            PWMMR4S: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled
    -                    DISABLED = 0x0,
    -                    ///  Stop on PWMMR4: the PWMTC and PWMPC will be stopped and PWMTCR bit 0 will be set to 0 if PWMMR4 matches the PWMTC.
    -                    STOP_ON_PWMMR4_THE_ = 0x1,
    -                },
    -            },
    -            ///  Interrupt PWM5
    -            PWMMR5I: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled.
    -                    DISABLED_ = 0x0,
    -                    ///  Interrupt on PWMMR5: an interrupt is generated when PWMMR5 matches the value in the PWMTC.
    -                    INTERRUPT_ON_PWMMR5 = 0x1,
    -                },
    -            },
    -            ///  Reset PWM5
    -            PWMMR5R: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled.
    -                    DISABLED_ = 0x0,
    -                    ///  Reset on PWMMR5: the PWMTC will be reset if PWMMR5 matches it.
    -                    RESET_ON_PWMMR5_THE = 0x1,
    -                },
    -            },
    -            ///  Stop PWM5
    -            PWMMR5S: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled
    -                    DISABLED = 0x0,
    -                    ///  Stop on PWMMR5: the PWMTC and PWMPC will be stopped and PWMTCR bit 0 will be set to 0 if PWMMR5 matches the PWMTC.
    -                    STOP_ON_PWMMR5_THE_ = 0x1,
    -                },
    -            },
    -            ///  Interrupt PWM6
    -            PWMMR6I: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled.
    -                    DISABLED_ = 0x0,
    -                    ///  Interrupt on PWMMR6: an interrupt is generated when PWMMR6 matches the value in the PWMTC.
    -                    INTERRUPT_ON_PWMMR6 = 0x1,
    -                },
    -            },
    -            ///  Reset PWM6
    -            PWMMR6R: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled.
    -                    DISABLED_ = 0x0,
    -                    ///  Reset on PWMMR6: the PWMTC will be reset if PWMMR6 matches it.
    -                    RESET_ON_PWMMR6_THE = 0x1,
    -                },
    -            },
    -            ///  Stop PWM6
    -            PWMMR6S: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled
    -                    DISABLED = 0x0,
    -                    ///  Stop on PWMMR6: the PWMTC and PWMPC will be stopped and PWMTCR bit 0 will be set to 0 if PWMMR6 matches the PWMTC.
    -                    STOP_ON_PWMMR6_THE_ = 0x1,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u11,
    -        }),
    -        reserved40: [16]u8,
    -        ///  Capture Control Register. The CCR controls which edges of the capture inputs are used to load the Capture Registers and whether or not an interrupt is generated for a capture event.
    -        CCR: mmio.Mmio(packed struct(u32) {
    -            ///  Capture on PWMn_CAP0 rising edge
    -            CAP0_R: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled. This feature is disabled.
    -                    DISABLED_THIS_FEATU = 0x0,
    -                    ///  Rising edge. A synchronously sampled rising edge on PWMn_CAP0 will cause CR0 to be loaded with the contents of the TC.
    -                    RISING_EDGE_A_SYNCH = 0x1,
    -                },
    -            },
    -            ///  Capture on PWMn_CAP0 falling edge
    -            CAP0_F: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled. This feature is disabled.
    -                    DISABLED_THIS_FEATU = 0x0,
    -                    ///  Falling edge. A synchronously sampled falling edge on PWMn_CAP0 will cause CR0 to be loaded with the contents of TC.
    -                    FALLING_EDGE_A_SYNC = 0x1,
    -                },
    -            },
    -            ///  Interrupt on PWMn_CAP0 event
    -            CAP0_I: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled. This feature is disabled.
    -                    DISABLED_THIS_FEATU = 0x0,
    -                    ///  Interrupt. A CR0 load due to a PWMn_CAP0 event will generate an interrupt.
    -                    INTERRUPT_A_CR0_LOA = 0x1,
    -                },
    -            },
    -            ///  Capture on PWMn_CAP1 rising edge. Reserved for PWM0.
    -            CAP1_R: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled. This feature is disabled.
    -                    DISABLED_THIS_FEATU = 0x0,
    -                    ///  Rising edge. A synchronously sampled rising edge on PWMn_CAP1 will cause CR1 to be loaded with the contents of the TC.
    -                    RISING_EDGE_A_SYNCH = 0x1,
    -                },
    -            },
    -            ///  Capture on PWMn_CAP1 falling edge. Reserved for PWM0.
    -            CAP1_F: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled. This feature is disabled.
    -                    DISABLED_THIS_FEATU = 0x0,
    -                    ///  Falling edge. A synchronously sampled falling edge on PWMn_CAP1 will cause CR1 to be loaded with the contents of TC.
    -                    FALLING_EDGE_A_SYNC = 0x1,
    -                },
    -            },
    -            ///  Interrupt on PWMn_CAP1 event. Reserved for PWM0.
    -            CAP1_I: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled. This feature is disabled.
    -                    DISABLED_THIS_FEATU = 0x0,
    -                    ///  Interrupt. A CR1 load due to a PWMn_CAP1 event will generate an interrupt.
    -                    INTERRUPT_A_CR1_LOA = 0x1,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u26,
    -        }),
    -        reserved76: [32]u8,
    -        ///  PWM Control Register. Enables PWM outputs and selects either single edge or double edge controlled PWM outputs.
    -        PCR: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved.
    -            RESERVED: u2,
    -            ///  PWM[2] output single/double edge mode control.
    -            PWMSEL2: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Single edge controlled mode is selected.
    -                    SINGLE_EDGE_CONTROLL = 0x0,
    -                    ///  Double edge controlled mode is selected.
    -                    DOUBLE_EDGE_CONTROLL = 0x1,
    -                },
    -            },
    -            ///  PWM[3] output edge control.
    -            PWMSEL3: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Single edge controlled mode is selected.
    -                    SINGLE_EDGE_CONTROLL = 0x0,
    -                    ///  Double edge controlled mode is selected.
    -                    DOUBLE_EDGE_CONTROLL = 0x1,
    -                },
    -            },
    -            ///  PWM[4] output edge control.
    -            PWMSEL4: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Single edge controlled mode is selected.
    -                    SINGLE_EDGE_CONTROLL = 0x0,
    -                    ///  Double edge controlled mode is selected.
    -                    DOUBLE_EDGE_CONTROLL = 0x1,
    -                },
    -            },
    -            ///  PWM[5] output edge control.
    -            PWMSEL5: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Single edge controlled mode is selected.
    -                    SINGLE_EDGE_CONTROLL = 0x0,
    -                    ///  Double edge controlled mode is selected.
    -                    DOUBLE_EDGE_CONTROLL = 0x1,
    -                },
    -            },
    -            ///  PWM[6] output edge control.
    -            PWMSEL6: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Single edge controlled mode is selected.
    -                    SINGLE_EDGE_CONTROLL = 0x0,
    -                    ///  Double edge controlled mode is selected.
    -                    DOUBLE_EDGE_CONTROLL = 0x1,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u2,
    -            ///  PWM[1] output enable control.
    -            PWMENA1: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  The PWM output is disabled.
    -                    THE_PWM_OUTPUT_IS_DI = 0x0,
    -                    ///  The PWM output is enabled.
    -                    THE_PWM_OUTPUT_IS_EN = 0x1,
    -                },
    -            },
    -            ///  PWM[2] output enable control.
    -            PWMENA2: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  The PWM output is disabled.
    -                    THE_PWM_OUTPUT_IS_DI = 0x0,
    -                    ///  The PWM output is enabled.
    -                    THE_PWM_OUTPUT_IS_EN = 0x1,
    -                },
    -            },
    -            ///  PWM[3] output enable control.
    -            PWMENA3: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  The PWM output is disabled.
    -                    THE_PWM_OUTPUT_IS_DI = 0x0,
    -                    ///  The PWM output is enabled.
    -                    THE_PWM_OUTPUT_IS_EN = 0x1,
    -                },
    -            },
    -            ///  PWM[4] output enable control.
    -            PWMENA4: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  The PWM output is disabled.
    -                    THE_PWM_OUTPUT_IS_DI = 0x0,
    -                    ///  The PWM output is enabled.
    -                    THE_PWM_OUTPUT_IS_EN = 0x1,
    -                },
    -            },
    -            ///  PWM[5] output enable control.
    -            PWMENA5: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  The PWM output is disabled.
    -                    THE_PWM_OUTPUT_IS_DI = 0x0,
    -                    ///  The PWM output is enabled.
    -                    THE_PWM_OUTPUT_IS_EN = 0x1,
    -                },
    -            },
    -            ///  PWM[6] output enable control. See PWMENA1 for details.
    -            PWMENA6: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  The PWM output is disabled.
    -                    THE_PWM_OUTPUT_IS_DI = 0x0,
    -                    ///  The PWM output is enabled.
    -                    THE_PWM_OUTPUT_IS_EN = 0x1,
    -                },
    -            },
    -            ///  Unused, always zero.
    -            RESERVED: u17,
    -        }),
    -        ///  Load Enable Register. Enables use of updated PWM match values.
    -        LER: mmio.Mmio(packed struct(u32) {
    -            ///  Enable PWM Match 0 Latch. PWM MR0 register update control. Writing a one to this bit allows the last value written to the PWM Match Register 0 to be become effective when the timer is next reset by a PWM Match event. See Section 27.6.7.
    -            MAT0LATCHEN: u1,
    -            ///  Enable PWM Match 1 Latch. PWM MR1 register update control. See bit 0 for details.
    -            MAT1LATCHEN: u1,
    -            ///  Enable PWM Match 2 Latch. PWM MR2 register update control. See bit 0 for details.
    -            MAT2LATCHEN: u1,
    -            ///  Enable PWM Match 3 Latch. PWM MR3 register update control. See bit 0 for details.
    -            MAT3LATCHEN: u1,
    -            ///  Enable PWM Match 4 Latch. PWM MR4 register update control. See bit 0 for details.
    -            MAT4LATCHEN: u1,
    -            ///  Enable PWM Match 5 Latch. PWM MR5 register update control. See bit 0 for details.
    -            MAT5LATCHEN: u1,
    -            ///  Enable PWM Match 6 Latch. PWM MR6 register update control. See bit 0 for details.
    -            MAT6LATCHEN: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u25,
    -        }),
    -        reserved112: [28]u8,
    -        ///  Count Control Register. The CTCR selects between Timer and Counter mode, and in Counter mode selects the signal and edge(s) for counting.
    -        CTCR: mmio.Mmio(packed struct(u32) {
    -            ///  Counter/ Timer Mode
    -            MOD: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Timer Mode: the TC is incremented when the Prescale Counter matches the Prescale register.
    -                    TIMER_MODE_THE_TC_I = 0x0,
    -                    ///  Rising edge counter Mode: the TC is incremented on rising edges of the PWM_CAP input selected by bits 3:2.
    -                    RISING_EDGE_COUNTER_ = 0x1,
    -                    ///  Falling edge counter Mode: the TC is incremented on falling edges of the PWM_CAP input selected by bits 3:2.
    -                    FALLING_EDGE_COUNTER = 0x2,
    -                    ///  Dual edge counter Mode: the TC is incremented on both edges of the PWM_CAP input selected by bits 3:2.
    -                    DUAL_EDGE_COUNTER_MO = 0x3,
    -                },
    -            },
    -            ///  Count Input Select. When bits 1:0 are not 00, these bits select which PWM_CAP pin carries the signal used to increment the TC. Other combinations are reserved.
    -            CIS: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  For PWM0: 00 = PWM0_CAP0 (Other combinations are reserved) For PWM1: 00 = PWM1_CAP0, 01 = PWM1_CAP1 (Other combinations are reserved)
    -                    FOR_PWM0_00_EQ_PWM0_ = 0x0,
    -                    _,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u28,
    -        }),
    -    };
    -
    -    ///  I2C bus interface
    -    pub const I2C0 = extern struct {
    -        ///  I2C Control Set Register. When a one is written to a bit of this register, the corresponding bit in the I2C control register is set. Writing a zero has no effect on the corresponding bit in the I2C control register.
    -        CONSET: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved. User software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u2,
    -            ///  Assert acknowledge flag.
    -            AA: u1,
    -            ///  I2C interrupt flag.
    -            SI: u1,
    -            ///  STOP flag.
    -            STO: u1,
    -            ///  START flag.
    -            STA: u1,
    -            ///  I2C interface enable.
    -            I2EN: u1,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u25,
    -        }),
    -        ///  I2C Status Register. During I2C operation, this register provides detailed status codes that allow software to determine the next action needed.
    -        STAT: mmio.Mmio(packed struct(u32) {
    -            ///  These bits are unused and are always 0.
    -            RESERVED: u3,
    -            ///  These bits give the actual status information about the I 2C interface.
    -            Status: u5,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u24,
    -        }),
    -        ///  I2C Data Register. During master or slave transmit mode, data to be transmitted is written to this register. During master or slave receive mode, data that has been received may be read from this register.
    -        DAT: mmio.Mmio(packed struct(u32) {
    -            ///  This register holds data values that have been received or are to be transmitted.
    -            Data: u8,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u24,
    -        }),
    -        ///  I2C Slave Address Register 0. Contains the 7-bit slave address for operation of the I2C interface in slave mode, and is not used in master mode. The least significant bit determines whether a slave responds to the General Call address.
    -        ADR0: mmio.Mmio(packed struct(u32) {
    -            ///  General Call enable bit.
    -            GC: u1,
    -            ///  The I2C device address for slave mode.
    -            Address: u7,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u24,
    -        }),
    -        ///  SCH Duty Cycle Register High Half Word. Determines the high time of the I2C clock.
    -        SCLH: mmio.Mmio(packed struct(u32) {
    -            ///  Count for SCL HIGH time period selection.
    -            SCLH: u16,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u16,
    -        }),
    -        ///  SCL Duty Cycle Register Low Half Word. Determines the low time of the I2C clock. SCLL and SCLH together determine the clock frequency generated by an I2C master and certain times used in slave mode.
    -        SCLL: mmio.Mmio(packed struct(u32) {
    -            ///  Count for SCL low time period selection.
    -            SCLL: u16,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u16,
    -        }),
    -        ///  I2C Control Clear Register. When a one is written to a bit of this register, the corresponding bit in the I2C control register is cleared. Writing a zero has no effect on the corresponding bit in the I2C control register.
    -        CONCLR: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved. User software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u2,
    -            ///  Assert acknowledge Clear bit.
    -            AAC: u1,
    -            ///  I2C interrupt Clear bit.
    -            SIC: u1,
    -            ///  Reserved. User software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u1,
    -            ///  START flag Clear bit.
    -            STAC: u1,
    -            ///  I2C interface Disable bit.
    -            I2ENC: u1,
    -            ///  Reserved. User software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u1,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u24,
    -        }),
    -        ///  Monitor mode control register.
    -        MMCTRL: mmio.Mmio(packed struct(u32) {
    -            ///  Monitor mode enable.
    -            MM_ENA: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Monitor mode disabled.
    -                    MONITOR_MODE_DISABLE = 0x0,
    -                    ///  The I 2C module will enter monitor mode. In this mode the SDA output will be forced high. This will prevent the I2C module from outputting data of any kind (including ACK) onto the I2C data bus. Depending on the state of the ENA_SCL bit, the output may be also forced high, preventing the module from having control over the I2C clock line.
    -                    THE_I_2C_MODULE_WILL = 0x1,
    -                },
    -            },
    -            ///  SCL output enable.
    -            ENA_SCL: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  When this bit is cleared to 0, the SCL output will be forced high when the module is in monitor mode. As described above, this will prevent the module from having any control over the I2C clock line.
    -                    WHEN_THIS_BIT_IS_CLE = 0x0,
    -                    ///  When this bit is set, the I2C module may exercise the same control over the clock line that it would in normal operation. This means that, acting as a slave peripheral, the I2C module can stretch the clock line (hold it low) until it has had time to respond to an I2C interrupt.[1]
    -                    WHEN_THIS_BIT_IS_SET = 0x1,
    -                },
    -            },
    -            ///  Select interrupt register match.
    -            MATCH_ALL: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  When this bit is cleared, an interrupt will only be generated when a match occurs to one of the (up-to) four address registers described above. That is, the module will respond as a normal slave as far as address-recognition is concerned.
    -                    WHEN_THIS_BIT_IS_CLE = 0x0,
    -                    ///  When this bit is set to 1 and the I2C is in monitor mode, an interrupt will be generated on ANY address received. This will enable the part to monitor all traffic on the bus.
    -                    WHEN_THIS_BIT_IS_SET = 0x1,
    -                },
    -            },
    -            ///  Reserved. The value read from reserved bits is not defined.
    -            RESERVED: u29,
    -        }),
    -        reserved44: [12]u8,
    -        ///  Data buffer register. The contents of the 8 MSBs of the DAT shift register will be transferred to the DATA_BUFFER automatically after every nine bits (8 bits of data plus ACK or NACK) has been received on the bus.
    -        DATA_BUFFER: mmio.Mmio(packed struct(u32) {
    -            ///  This register holds contents of the 8 MSBs of the DAT shift register.
    -            Data: u8,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u24,
    -        }),
    -    };
    -
    -    ///  SPI
    -    pub const SPI = extern struct {
    -        ///  SPI Control Register. This register controls the operation of the SPI.
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u2,
    -            ///  The SPI controller sends and receives 8 bits of data per transfer.
    -            BITENABLE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  The SPI controller sends and receives the number of bits selected by bits 11:8.
    -                    THE_SPI_CONTROLLER_S = 0x1,
    -                    _,
    -                },
    -            },
    -            ///  Clock phase control determines the relationship between the data and the clock on SPI transfers, and controls when a slave transfer is defined as starting and ending.
    -            CPHA: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Data is sampled on the first clock edge of SCK. A transfer starts and ends with activation and deactivation of the SSEL signal.
    -                    FIRST_EDGE = 0x0,
    -                    ///  Data is sampled on the second clock edge of the SCK. A transfer starts with the first clock edge, and ends with the last sampling edge when the SSEL signal is active.
    -                    SECOND_EDGE = 0x1,
    -                },
    -            },
    -            ///  Clock polarity control.
    -            CPOL: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  SCK is active high.
    -                    SCK_IS_ACTIVE_HIGH_ = 0x0,
    -                    ///  SCK is active low.
    -                    SCK_IS_ACTIVE_LOW_ = 0x1,
    -                },
    -            },
    -            ///  Master mode select.
    -            MSTR: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  The SPI operates in Slave mode.
    -                    SLAVE = 0x0,
    -                    ///  The SPI operates in Master mode.
    -                    MASTER = 0x1,
    -                },
    -            },
    -            ///  LSB First controls which direction each byte is shifted when transferred.
    -            LSBF: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  SPI data is transferred MSB (bit 7) first.
    -                    MSB = 0x0,
    -                    ///  SPI data is transferred LSB (bit 0) first.
    -                    LSB = 0x1,
    -                },
    -            },
    -            ///  Serial peripheral interrupt enable.
    -            SPIE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  SPI interrupts are inhibited.
    -                    INTBLOCK = 0x0,
    -                    ///  A hardware interrupt is generated each time the SPIF or MODF bits are activated.
    -                    HWINT = 0x1,
    -                },
    -            },
    -            ///  When bit 2 of this register is 1, this field controls the number of bits per transfer:
    -            BITS: packed union {
    -                raw: u4,
    -                value: enum(u4) {
    -                    ///  8 bits per transfer
    -                    @"8_BITS_PER_TRANSFER" = 0x8,
    -                    ///  9 bits per transfer
    -                    @"9_BITS_PER_TRANSFER" = 0x9,
    -                    ///  10 bits per transfer
    -                    @"10_BITS_PER_TRANSFER" = 0xa,
    -                    ///  11 bits per transfer
    -                    @"11_BITS_PER_TRANSFER" = 0xb,
    -                    ///  12 bits per transfer
    -                    @"12_BITS_PER_TRANSFER" = 0xc,
    -                    ///  13 bits per transfer
    -                    @"13_BITS_PER_TRANSFER" = 0xd,
    -                    ///  14 bits per transfer
    -                    @"14_BITS_PER_TRANSFER" = 0xe,
    -                    ///  15 bits per transfer
    -                    @"15_BITS_PER_TRANSFER" = 0xf,
    -                    ///  16 bits per transfer
    -                    @"16_BITS_PER_TRANSFER" = 0x0,
    -                    _,
    -                },
    -            },
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u20,
    -        }),
    -        ///  SPI Status Register. This register shows the status of the SPI.
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u3,
    -            ///  Slave abort. When 1, this bit indicates that a slave abort has occurred. This bit is cleared by reading this register.
    -            ABRT: u1,
    -            ///  Mode fault. when 1, this bit indicates that a Mode fault error has occurred. This bit is cleared by reading this register, then writing the SPI0 control register.
    -            MODF: u1,
    -            ///  Read overrun. When 1, this bit indicates that a read overrun has occurred. This bit is cleared by reading this register.
    -            ROVR: u1,
    -            ///  Write collision. When 1, this bit indicates that a write collision has occurred. This bit is cleared by reading this register, then accessing the SPI Data Register.
    -            WCOL: u1,
    -            ///  SPI transfer complete flag. When 1, this bit indicates when a SPI data transfer is complete. When a master, this bit is set at the end of the last cycle of the transfer. When a slave, this bit is set on the last data sampling edge of the SCK. This bit is cleared by first reading this register, then accessing the SPI Data Register. Note: this is not the SPI interrupt flag. This flag is found in the SPINT register.
    -            SPIF: u1,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u24,
    -        }),
    -        ///  SPI Data Register. This bi-directional register provides the transmit and receive data for the SPI. Transmit data is provided to the SPI0 by writing to this register. Data received by the SPI0 can be read from this register.
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  SPI Bi-directional data port.
    -            DATALOW: u8,
    -            ///  If bit 2 of the SPCR is 1 and bits 11:8 are other than 1000, some or all of these bits contain the additional transmit and receive bits. When less than 16 bits are selected, the more significant among these bits read as zeroes.
    -            DATAHIGH: u8,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u16,
    -        }),
    -        ///  SPI Clock Counter Register. This register controls the frequency of a master's SCK0.
    -        CCR: mmio.Mmio(packed struct(u32) {
    -            ///  SPI0 Clock counter setting.
    -            COUNTER: u8,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u24,
    -        }),
    -        reserved28: [12]u8,
    -        ///  SPI Interrupt Flag. This register contains the interrupt flag for the SPI interface.
    -        INT: mmio.Mmio(packed struct(u32) {
    -            ///  SPI interrupt flag. Set by the SPI interface to generate an interrupt. Cleared by writing a 1 to this bit. Note: this bit will be set once when SPIE = 1 and at least one of SPIF and WCOL bits is 1. However, only when the SPI Interrupt bit is set and SPI0 Interrupt is enabled in the NVIC, SPI based interrupt can be processed by interrupt handling software.
    -            SPIF: u1,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u7,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u24,
    -        }),
    -    };
    -
    -    ///  Real Time Clock (RTC)
    -    pub const RTC = extern struct {
    -        ///  Interrupt Location Register
    -        ILR: mmio.Mmio(packed struct(u32) {
    -            ///  When one, the Counter Increment Interrupt block generated an interrupt. Writing a one to this bit location clears the counter increment interrupt.
    -            RTCCIF: u1,
    -            ///  When one, the alarm registers generated an interrupt. Writing a one to this bit location clears the alarm interrupt.
    -            RTCALF: u1,
    -            reserved21: u19,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u11,
    -        }),
    -        reserved8: [4]u8,
    -        ///  Clock Control Register
    -        CCR: mmio.Mmio(packed struct(u32) {
    -            ///  Clock Enable.
    -            CLKEN: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  The time counters are enabled.
    -                    THE_TIME_COUNTERS_AR = 0x1,
    -                    ///  The time counters are disabled so that they may be initialized.
    -                    THE_TIME_COUNTERS_AR = 0x0,
    -                },
    -            },
    -            ///  CTC Reset.
    -            CTCRST: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  When one, the elements in the internal oscillator divider are reset, and remain reset until CCR[1] is changed to zero. This is the divider that generates the 1 Hz clock from the 32.768 kHz crystal. The state of the divider is not visible to software.
    -                    RESET = 0x1,
    -                    ///  No effect.
    -                    NO_EFFECT_ = 0x0,
    -                },
    -            },
    -            ///  Internal test mode controls. These bits must be 0 for normal RTC operation.
    -            RESERVED: u2,
    -            ///  Calibration counter enable.
    -            CCALEN: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  The calibration counter is disabled and reset to zero.
    -                    THE_CALIBRATION_COUN = 0x1,
    -                    ///  The calibration counter is enabled and counting, using the 1 Hz clock. When the calibration counter is equal to the value of the CALIBRATION register, the counter resets and repeats counting up to the value of the CALIBRATION register. See Section 30.6.4.2 and Section 30.6.5.
    -                    THE_CALIBRATION_COUN = 0x0,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u27,
    -        }),
    -        ///  Counter Increment Interrupt Register
    -        CIIR: mmio.Mmio(packed struct(u32) {
    -            ///  When 1, an increment of the Second value generates an interrupt.
    -            IMSEC: u1,
    -            ///  When 1, an increment of the Minute value generates an interrupt.
    -            IMMIN: u1,
    -            ///  When 1, an increment of the Hour value generates an interrupt.
    -            IMHOUR: u1,
    -            ///  When 1, an increment of the Day of Month value generates an interrupt.
    -            IMDOM: u1,
    -            ///  When 1, an increment of the Day of Week value generates an interrupt.
    -            IMDOW: u1,
    -            ///  When 1, an increment of the Day of Year value generates an interrupt.
    -            IMDOY: u1,
    -            ///  When 1, an increment of the Month value generates an interrupt.
    -            IMMON: u1,
    -            ///  When 1, an increment of the Year value generates an interrupt.
    -            IMYEAR: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u24,
    -        }),
    -        ///  Alarm Mask Register
    -        AMR: mmio.Mmio(packed struct(u32) {
    -            ///  When 1, the Second value is not compared for the alarm.
    -            AMRSEC: u1,
    -            ///  When 1, the Minutes value is not compared for the alarm.
    -            AMRMIN: u1,
    -            ///  When 1, the Hour value is not compared for the alarm.
    -            AMRHOUR: u1,
    -            ///  When 1, the Day of Month value is not compared for the alarm.
    -            AMRDOM: u1,
    -            ///  When 1, the Day of Week value is not compared for the alarm.
    -            AMRDOW: u1,
    -            ///  When 1, the Day of Year value is not compared for the alarm.
    -            AMRDOY: u1,
    -            ///  When 1, the Month value is not compared for the alarm.
    -            AMRMON: u1,
    -            ///  When 1, the Year value is not compared for the alarm.
    -            AMRYEAR: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u24,
    -        }),
    -        ///  Consolidated Time Register 0
    -        CTIME0: mmio.Mmio(packed struct(u32) {
    -            ///  Seconds value in the range of 0 to 59
    -            SECONDS: u6,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u2,
    -            ///  Minutes value in the range of 0 to 59
    -            MINUTES: u6,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u2,
    -            ///  Hours value in the range of 0 to 23
    -            HOURS: u5,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u3,
    -            ///  Day of week value in the range of 0 to 6
    -            DOW: u3,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u5,
    -        }),
    -        ///  Consolidated Time Register 1
    -        CTIME1: mmio.Mmio(packed struct(u32) {
    -            ///  Day of month value in the range of 1 to 28, 29, 30, or 31 (depending on the month and whether it is a leap year).
    -            DOM: u5,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u3,
    -            ///  Month value in the range of 1 to 12.
    -            MONTH: u4,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u4,
    -            ///  Year value in the range of 0 to 4095.
    -            YEAR: u12,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u4,
    -        }),
    -        ///  Consolidated Time Register 2
    -        CTIME2: mmio.Mmio(packed struct(u32) {
    -            ///  Day of year value in the range of 1 to 365 (366 for leap years).
    -            DOY: u12,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u20,
    -        }),
    -        ///  Seconds Counter
    -        SEC: mmio.Mmio(packed struct(u32) {
    -            ///  Seconds value in the range of 0 to 59
    -            SECONDS: u6,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u26,
    -        }),
    -        ///  Minutes Register
    -        MIN: mmio.Mmio(packed struct(u32) {
    -            ///  Minutes value in the range of 0 to 59
    -            MINUTES: u6,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u26,
    -        }),
    -        ///  Hours Register
    -        HRS: mmio.Mmio(packed struct(u32) {
    -            ///  Hours value in the range of 0 to 23
    -            HOURS: u5,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u27,
    -        }),
    -        ///  Day of Month Register
    -        DOM: mmio.Mmio(packed struct(u32) {
    -            ///  Day of month value in the range of 1 to 28, 29, 30, or 31 (depending on the month and whether it is a leap year).
    -            DOM: u5,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u27,
    -        }),
    -        ///  Day of Week Register
    -        DOW: mmio.Mmio(packed struct(u32) {
    -            ///  Day of week value in the range of 0 to 6.
    -            DOW: u3,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u29,
    -        }),
    -        ///  Day of Year Register
    -        DOY: mmio.Mmio(packed struct(u32) {
    -            ///  Day of year value in the range of 1 to 365 (366 for leap years).
    -            DOY: u9,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u23,
    -        }),
    -        ///  Months Register
    -        MONTH: mmio.Mmio(packed struct(u32) {
    -            ///  Month value in the range of 1 to 12.
    -            MONTH: u4,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u28,
    -        }),
    -        ///  Years Register
    -        YEAR: mmio.Mmio(packed struct(u32) {
    -            ///  Year value in the range of 0 to 4095.
    -            YEAR: u12,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u20,
    -        }),
    -        ///  Calibration Value Register
    -        CALIBRATION: mmio.Mmio(packed struct(u32) {
    -            ///  If enabled, the calibration counter counts up to this value. The maximum value is 131, 072 corresponding to about 36.4 hours. Calibration is disabled if CALVAL = 0.
    -            CALVAL: u17,
    -            ///  Calibration direction
    -            CALDIR: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Backward calibration. When CALVAL is equal to the calibration counter, the RTC timers will stop incrementing for 1 second.
    -                    BACKWARD_CALIBRATION = 0x1,
    -                    ///  Forward calibration. When CALVAL is equal to the calibration counter, the RTC timers will jump by 2 seconds.
    -                    FORWARD_CALIBRATION_ = 0x0,
    -                },
    -            },
    -            padding: u14,
    -        }),
    -        reserved88: [20]u8,
    -        ///  RTC Auxiliary Enable register
    -        RTC_AUXEN: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u4,
    -            ///  Oscillator Fail Detect interrupt enable. When 0: the RTC Oscillator Fail detect interrupt is disabled. When 1: the RTC Oscillator Fail detect interrupt is enabled. See Section 30.6.2.5.
    -            RTC_OSCFEN: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u27,
    -        }),
    -        ///  RTC Auxiliary control register
    -        RTC_AUX: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u4,
    -            ///  RTC Oscillator Fail detect flag. Read: this bit is set if the RTC oscillator stops, and when RTC power is first turned on. An interrupt will occur when this bit is set, the RTC_OSCFEN bit in RTC_AUXEN is a 1, and the RTC interrupt is enabled in the NVIC. Write: writing a 1 to this bit clears the flag.
    -            RTC_OSCF: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u1,
    -            ///  When 0: the RTC_ALARM pin reflects the RTC alarm status. When 1: the RTC_ALARM pin indicates Deep Power-down mode.
    -            RTC_PDOUT: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u25,
    -        }),
    -        ///  Alarm value for Seconds
    -        ASEC: mmio.Mmio(packed struct(u32) {
    -            ///  Seconds value in the range of 0 to 59
    -            SECONDS: u6,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u26,
    -        }),
    -        ///  Alarm value for Minutes
    -        AMIN: mmio.Mmio(packed struct(u32) {
    -            ///  Minutes value in the range of 0 to 59
    -            MINUTES: u6,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u26,
    -        }),
    -        ///  Alarm value for Hours
    -        AHRS: mmio.Mmio(packed struct(u32) {
    -            ///  Hours value in the range of 0 to 23
    -            HOURS: u5,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u27,
    -        }),
    -        ///  Alarm value for Day of Month
    -        ADOM: mmio.Mmio(packed struct(u32) {
    -            ///  Day of month value in the range of 1 to 28, 29, 30, or 31 (depending on the month and whether it is a leap year).
    -            DOM: u5,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u27,
    -        }),
    -        ///  Alarm value for Day of Week
    -        ADOW: mmio.Mmio(packed struct(u32) {
    -            ///  Day of week value in the range of 0 to 6.
    -            DOW: u3,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u29,
    -        }),
    -        ///  Alarm value for Day of Year
    -        ADOY: mmio.Mmio(packed struct(u32) {
    -            ///  Day of year value in the range of 1 to 365 (366 for leap years).
    -            DOY: u9,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u23,
    -        }),
    -        ///  Alarm value for Months
    -        AMON: mmio.Mmio(packed struct(u32) {
    -            ///  Month value in the range of 1 to 12.
    -            MONTH: u4,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u28,
    -        }),
    -        ///  Alarm value for Year
    -        AYRS: mmio.Mmio(packed struct(u32) {
    -            ///  Year value in the range of 0 to 4095.
    -            YEAR: u12,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u20,
    -        }),
    -    };
    -
    -    ///  GPIO
    -    pub const GPIOINT = extern struct {
    -        ///  GPIO overall Interrupt Status.
    -        STATUS: mmio.Mmio(packed struct(u32) {
    -            ///  Port 0 GPIO interrupt pending.
    -            P0INT: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  No pending interrupts on Port 0.
    -                    NO_PENDING_INTERRUPT = 0x0,
    -                    ///  At least one pending interrupt on Port 0.
    -                    AT_LEAST_ONE_PENDING = 0x1,
    -                },
    -            },
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u1,
    -            ///  Port 2 GPIO interrupt pending.
    -            P2INT: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  No pending interrupts on Port 2.
    -                    NO_PENDING_INTERRUPT = 0x0,
    -                    ///  At least one pending interrupt on Port 2.
    -                    AT_LEAST_ONE_PENDING = 0x1,
    -                },
    -            },
    -            padding: u29,
    -        }),
    -        ///  GPIO Interrupt Status for Rising edge for Port 0.
    -        STATR0: mmio.Mmio(packed struct(u32) {
    -            ///  Status of Rising Edge Interrupt for P0[0]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_0REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[1]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_1REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[2]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_2REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[3]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_3REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[4]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_4REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[5]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_5REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[6]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_6REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[7]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_7REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[8]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_8REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[9]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_9REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[10]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_10REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[11]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_11REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[12]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_12REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[13]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_13REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[14]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_14REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[15]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_15REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[16]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_16REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[17]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_17REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[18]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_18REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[19]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_19REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[20]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_20REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[21]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_21REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[22]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_22REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[23]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_23REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[24]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_24REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[25]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_25REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[26]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_26REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[27]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_27REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[28]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_28REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[29]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_29REI: u1,
    -            ///  Status of Rising Edge Interrupt for P0[30]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P0_30REI: u1,
    -            ///  Reserved.
    -            RESERVED: u1,
    -        }),
    -        ///  GPIO Interrupt Status for Falling edge for Port 0.
    -        STATF0: mmio.Mmio(packed struct(u32) {
    -            ///  Status of Falling Edge Interrupt for P0[0]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_0FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[1]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_1FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[2]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_2FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[3]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_3FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[4]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_4FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[5]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_5FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[6]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_6FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[7]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_7FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[8]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_8FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[9]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_9FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[10]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_10FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[11]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_11FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[12]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_12FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[13]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_13FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[14]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_14FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[15]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_15FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[16]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_16FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[17]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_17FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[18]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_18FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[19]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_19FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[20]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_20FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[21]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_21FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[22]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_22FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[23]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_23FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[24]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_24FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[25]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_25FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[26]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_26FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[27]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_27FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[28]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_28FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[29]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_29FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P0[30]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P0_30FEI: u1,
    -            ///  Reserved.
    -            RESERVED: u1,
    -        }),
    -        ///  GPIO Interrupt Clear.
    -        CLR0: mmio.Mmio(packed struct(u32) {
    -            ///  Clear GPIO port Interrupts for P0[0]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_0CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[1]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_1CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[2]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_2CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[3]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_3CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[4]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_4CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[5]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_5CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[6]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_6CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[7]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_7CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[8]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_8CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[9]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_9CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[10]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_10CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[11]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_11CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[12]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_12CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[13]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_13CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[14]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_14CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[15]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_15CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[16]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_16CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[17]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_17CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[18]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_18CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[19]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_19CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[20]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_20CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[21]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_21CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[22]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_22CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[23]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_23CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[24]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_24CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[25]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_25CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[26]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_26CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[27]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_27CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[28]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_28CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[29]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_29CI: u1,
    -            ///  Clear GPIO port Interrupts for P0[30]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P0_30CI: u1,
    -            ///  Reserved.
    -            RESERVED: u1,
    -        }),
    -        ///  GPIO Interrupt Enable for Rising edge for Port 0.
    -        ENR0: mmio.Mmio(packed struct(u32) {
    -            ///  Enable rising edge interrupt for P0[0]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_0ER: u1,
    -            ///  Enable rising edge interrupt for P0[1]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_1ER: u1,
    -            ///  Enable rising edge interrupt for P0[2]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_2ER: u1,
    -            ///  Enable rising edge interrupt for P0[3]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_3ER: u1,
    -            ///  Enable rising edge interrupt for P0[4]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_4ER: u1,
    -            ///  Enable rising edge interrupt for P0[5]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_5ER: u1,
    -            ///  Enable rising edge interrupt for P0[6]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_6ER: u1,
    -            ///  Enable rising edge interrupt for P0[7]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_7ER: u1,
    -            ///  Enable rising edge interrupt for P0[8]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_8ER: u1,
    -            ///  Enable rising edge interrupt for P0[9]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_9ER: u1,
    -            ///  Enable rising edge interrupt for P0[10]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_10ER: u1,
    -            ///  Enable rising edge interrupt for P0[11]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_11ER: u1,
    -            ///  Enable rising edge interrupt for P0[12]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_12ER: u1,
    -            ///  Enable rising edge interrupt for P0[13]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_13ER: u1,
    -            ///  Enable rising edge interrupt for P0[14]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_14ER: u1,
    -            ///  Enable rising edge interrupt for P0[15]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_15ER: u1,
    -            ///  Enable rising edge interrupt for P0[16]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_16ER: u1,
    -            ///  Enable rising edge interrupt for P0[17]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_17ER: u1,
    -            ///  Enable rising edge interrupt for P0[18]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_18ER: u1,
    -            ///  Enable rising edge interrupt for P0[19]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_19ER: u1,
    -            ///  Enable rising edge interrupt for P0[20]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_20ER: u1,
    -            ///  Enable rising edge interrupt for P0[21]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_21ER: u1,
    -            ///  Enable rising edge interrupt for P0[22]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_22ER: u1,
    -            ///  Enable rising edge interrupt for P0[23]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_23ER: u1,
    -            ///  Enable rising edge interrupt for P0[24]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_24ER: u1,
    -            ///  Enable rising edge interrupt for P0[25]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_25ER: u1,
    -            ///  Enable rising edge interrupt for P0[26]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_26ER: u1,
    -            ///  Enable rising edge interrupt for P0[27]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_27ER: u1,
    -            ///  Enable rising edge interrupt for P0[28]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_28ER: u1,
    -            ///  Enable rising edge interrupt for P0[29]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_29ER: u1,
    -            ///  Enable rising edge interrupt for P0[30]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P0_30ER: u1,
    -            ///  Reserved.
    -            RESERVED: u1,
    -        }),
    -        ///  GPIO Interrupt Enable for Falling edge for Port 0.
    -        ENF0: mmio.Mmio(packed struct(u32) {
    -            ///  Enable falling edge interrupt for P0[0]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_0EF: u1,
    -            ///  Enable falling edge interrupt for P0[1]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_1EF: u1,
    -            ///  Enable falling edge interrupt for P0[2]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_2EF: u1,
    -            ///  Enable falling edge interrupt for P0[3]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_3EF: u1,
    -            ///  Enable falling edge interrupt for P0[4]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_4EF: u1,
    -            ///  Enable falling edge interrupt for P0[5]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_5EF: u1,
    -            ///  Enable falling edge interrupt for P0[6]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_6EF: u1,
    -            ///  Enable falling edge interrupt for P0[7]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_7EF: u1,
    -            ///  Enable falling edge interrupt for P0[8]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_8EF: u1,
    -            ///  Enable falling edge interrupt for P0[9]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_9EF: u1,
    -            ///  Enable falling edge interrupt for P0[10]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_10EF: u1,
    -            ///  Enable falling edge interrupt for P0[11]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_11EF: u1,
    -            ///  Enable falling edge interrupt for P0[12]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_12EF: u1,
    -            ///  Enable falling edge interrupt for P0[13]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_13EF: u1,
    -            ///  Enable falling edge interrupt for P0[14]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_14EF: u1,
    -            ///  Enable falling edge interrupt for P0[15]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_15EF: u1,
    -            ///  Enable falling edge interrupt for P0[16]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_16EF: u1,
    -            ///  Enable falling edge interrupt for P0[17]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_17EF: u1,
    -            ///  Enable falling edge interrupt for P0[18]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_18EF: u1,
    -            ///  Enable falling edge interrupt for P0[19]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_19EF: u1,
    -            ///  Enable falling edge interrupt for P0[20]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_20EF: u1,
    -            ///  Enable falling edge interrupt for P0[21]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_21EF: u1,
    -            ///  Enable falling edge interrupt for P0[22]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_22EF: u1,
    -            ///  Enable falling edge interrupt for P0[23]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_23EF: u1,
    -            ///  Enable falling edge interrupt for P0[24]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_24EF: u1,
    -            ///  Enable falling edge interrupt for P0[25]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_25EF: u1,
    -            ///  Enable falling edge interrupt for P0[26]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_26EF: u1,
    -            ///  Enable falling edge interrupt for P0[27]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_27EF: u1,
    -            ///  Enable falling edge interrupt for P0[28]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_28EF: u1,
    -            ///  Enable falling edge interrupt for P0[29]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_29EF: u1,
    -            ///  Enable falling edge interrupt for P0[30]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P0_30EF: u1,
    -            ///  Reserved.
    -            RESERVED: u1,
    -        }),
    -        reserved36: [12]u8,
    -        ///  GPIO Interrupt Status for Rising edge for Port 0.
    -        STATR2: mmio.Mmio(packed struct(u32) {
    -            ///  Status of Rising Edge Interrupt for P2[0]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P2_0REI: u1,
    -            ///  Status of Rising Edge Interrupt for P2[1]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P2_1REI: u1,
    -            ///  Status of Rising Edge Interrupt for P2[2]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P2_2REI: u1,
    -            ///  Status of Rising Edge Interrupt for P2[3]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P2_3REI: u1,
    -            ///  Status of Rising Edge Interrupt for P2[4]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P2_4REI: u1,
    -            ///  Status of Rising Edge Interrupt for P2[5]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P2_5REI: u1,
    -            ///  Status of Rising Edge Interrupt for P2[6]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P2_6REI: u1,
    -            ///  Status of Rising Edge Interrupt for P2[7]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P2_7REI: u1,
    -            ///  Status of Rising Edge Interrupt for P2[8]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P2_8REI: u1,
    -            ///  Status of Rising Edge Interrupt for P2[9]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P2_9REI: u1,
    -            ///  Status of Rising Edge Interrupt for P2[10]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P2_10REI: u1,
    -            ///  Status of Rising Edge Interrupt for P2[11]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P2_11REI: u1,
    -            ///  Status of Rising Edge Interrupt for P2[12]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P2_12REI: u1,
    -            ///  Status of Rising Edge Interrupt for P2[13]. 0 = No rising edge detected. 1 = Rising edge interrupt generated.
    -            P2_13REI: u1,
    -            ///  Reserved.
    -            RESERVED: u18,
    -        }),
    -        ///  GPIO Interrupt Status for Falling edge for Port 0.
    -        STATF2: mmio.Mmio(packed struct(u32) {
    -            ///  Status of Falling Edge Interrupt for P2[0]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P2_0FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P2[1]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P2_1FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P2[2]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P2_2FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P2[3]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P2_3FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P2[4]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P2_4FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P2[5]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P2_5FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P2[6]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P2_6FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P2[7]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P2_7FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P2[8]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P2_8FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P2[9]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P2_9FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P2[10]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P2_10FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P2[11]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P2_11FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P2[12]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P2_12FEI: u1,
    -            ///  Status of Falling Edge Interrupt for P2[13]. 0 = No falling edge detected. 1 = Falling edge interrupt generated.
    -            P2_13FEI: u1,
    -            ///  Reserved.
    -            RESERVED: u18,
    -        }),
    -        ///  GPIO Interrupt Clear.
    -        CLR2: mmio.Mmio(packed struct(u32) {
    -            ///  Clear GPIO port Interrupts for P2[0]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P2_0CI: u1,
    -            ///  Clear GPIO port Interrupts for P2[1]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P2_1CI: u1,
    -            ///  Clear GPIO port Interrupts for P2[2]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P2_2CI: u1,
    -            ///  Clear GPIO port Interrupts for P2[3]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P2_3CI: u1,
    -            ///  Clear GPIO port Interrupts for P2[4]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P2_4CI: u1,
    -            ///  Clear GPIO port Interrupts for P2[5]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P2_5CI: u1,
    -            ///  Clear GPIO port Interrupts for P2[6]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P2_6CI: u1,
    -            ///  Clear GPIO port Interrupts for P2[7]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P2_7CI: u1,
    -            ///  Clear GPIO port Interrupts for P2[8]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P2_8CI: u1,
    -            ///  Clear GPIO port Interrupts for P2[9]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P2_9CI: u1,
    -            ///  Clear GPIO port Interrupts for P2[10]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P2_10CI: u1,
    -            ///  Clear GPIO port Interrupts for P2[11]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P2_11CI: u1,
    -            ///  Clear GPIO port Interrupts for P2[12]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P2_12CI: u1,
    -            ///  Clear GPIO port Interrupts for P2[13]. 0 = No effect. 1 = Clear corresponding bits in IOnINTSTATR and IOnSTATF.
    -            P2_13CI: u1,
    -            ///  Reserved.
    -            RESERVED: u18,
    -        }),
    -        ///  GPIO Interrupt Enable for Rising edge for Port 0.
    -        ENR2: mmio.Mmio(packed struct(u32) {
    -            ///  Enable rising edge interrupt for P2[0]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P2_0ER: u1,
    -            ///  Enable rising edge interrupt for P2[1]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P2_1ER: u1,
    -            ///  Enable rising edge interrupt for P2[2]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P2_2ER: u1,
    -            ///  Enable rising edge interrupt for P2[3]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P2_3ER: u1,
    -            ///  Enable rising edge interrupt for P2[4]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P2_4ER: u1,
    -            ///  Enable rising edge interrupt for P2[5]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P2_5ER: u1,
    -            ///  Enable rising edge interrupt for P2[6]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P2_6ER: u1,
    -            ///  Enable rising edge interrupt for P2[7]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P2_7ER: u1,
    -            ///  Enable rising edge interrupt for P2[8]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P2_8ER: u1,
    -            ///  Enable rising edge interrupt for P2[9]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P2_9ER: u1,
    -            ///  Enable rising edge interrupt for P2[10]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P2_10ER: u1,
    -            ///  Enable rising edge interrupt for P2[11]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P2_11ER: u1,
    -            ///  Enable rising edge interrupt for P2[12]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P2_12ER: u1,
    -            ///  Enable rising edge interrupt for P2[13]. 0 = Disable rising edge interrupt. 1 = Enable rising edge interrupt.
    -            P2_13ER: u1,
    -            ///  Reserved.
    -            RESERVED: u18,
    -        }),
    -        ///  GPIO Interrupt Enable for Falling edge for Port 0.
    -        ENF2: mmio.Mmio(packed struct(u32) {
    -            ///  Enable falling edge interrupt for P2[0]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P2_0EF: u1,
    -            ///  Enable falling edge interrupt for P2[1]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P2_1EF: u1,
    -            ///  Enable falling edge interrupt for P2[2]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P2_2EF: u1,
    -            ///  Enable falling edge interrupt for P2[3]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P2_3EF: u1,
    -            ///  Enable falling edge interrupt for P2[4]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P2_4EF: u1,
    -            ///  Enable falling edge interrupt for P2[5]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P2_5EF: u1,
    -            ///  Enable falling edge interrupt for P2[6]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P2_6EF: u1,
    -            ///  Enable falling edge interrupt for P2[7]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P2_7EF: u1,
    -            ///  Enable falling edge interrupt for P2[8]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P2_8EF: u1,
    -            ///  Enable falling edge interrupt for P2[9]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P2_9EF: u1,
    -            ///  Enable falling edge interrupt for P2[10]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P2_10EF: u1,
    -            ///  Enable falling edge interrupt for P2[11]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P2_11EF: u1,
    -            ///  Enable falling edge interrupt for P2[12]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P2_12EF: u1,
    -            ///  Enable falling edge interrupt for P2[13]. 0 = Disable falling edge interrupt. 1 = Enable falling edge interrupt.
    -            P2_13EF: u1,
    -            ///  Reserved.
    -            RESERVED: u18,
    -        }),
    -    };
    -
    -    ///  Pin connect block
    -    pub const PINCONNECT = extern struct {
    -        ///  Pin function select register 0.
    -        PINSEL0: mmio.Mmio(packed struct(u32) {
    -            ///  Pin function select P0.0.
    -            P0_0: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P0.0
    -                    GPIO_P0 = 0x0,
    -                    ///  RD1
    -                    RD1 = 0x1,
    -                    ///  TXD3
    -                    TXD3 = 0x2,
    -                    ///  SDA1
    -                    SDA1 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P0.1.
    -            P0_1: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P0.1
    -                    GPIO_P0 = 0x0,
    -                    ///  TD1
    -                    TD1 = 0x1,
    -                    ///  RXD3
    -                    RXD3 = 0x2,
    -                    ///  SCL1
    -                    SCL1 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P0.2.
    -            P0_2: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P0.2
    -                    GPIO_P0 = 0x0,
    -                    ///  TXD0
    -                    TXD0 = 0x1,
    -                    ///  AD0.7
    -                    AD0 = 0x2,
    -                    ///  Reserved
    -                    RESERVED = 0x3,
    -                },
    -            },
    -            ///  Pin function select P0.3.
    -            P0_3: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P0.3.
    -                    GPIO_P0 = 0x0,
    -                    ///  RXD0
    -                    RXD0 = 0x1,
    -                    ///  AD0.6
    -                    AD0 = 0x2,
    -                    ///  Reserved.
    -                    RESERVED = 0x3,
    -                },
    -            },
    -            ///  Pin function select P0.4.
    -            P0_4: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P0.4.
    -                    GPIO_P0 = 0x0,
    -                    ///  I2SRX_CLK
    -                    I2SRX_CLK = 0x1,
    -                    ///  RD2
    -                    RD2 = 0x2,
    -                    ///  CAP2.0
    -                    CAP2 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P0.5.
    -            P0_5: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P0.5.
    -                    GPIO_P0 = 0x0,
    -                    ///  I2SRX_WS
    -                    I2SRX_WS = 0x1,
    -                    ///  TD2
    -                    TD2 = 0x2,
    -                    ///  CAP2.1
    -                    CAP2 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P0.6.
    -            P0_6: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P0.6.
    -                    GPIO_P0 = 0x0,
    -                    ///  I2SRX_SDA
    -                    I2SRX_SDA = 0x1,
    -                    ///  SSEL1
    -                    SSEL1 = 0x2,
    -                    ///  MAT2.0
    -                    MAT2 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P0.7.
    -            P0_7: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P0.7.
    -                    GPIO_P0 = 0x0,
    -                    ///  I2STX_CLK
    -                    I2STX_CLK = 0x1,
    -                    ///  SCK1
    -                    SCK1 = 0x2,
    -                    ///  MAT2.1
    -                    MAT2 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P0.8.
    -            P0_8: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P0.8.
    -                    GPIO_P0 = 0x0,
    -                    ///  I2STX_WS
    -                    I2STX_WS = 0x1,
    -                    ///  MISO1
    -                    MISO1 = 0x2,
    -                    ///  MAT2.2
    -                    MAT2 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P0.9.
    -            P0_9: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P0.9
    -                    GPIO_P0 = 0x0,
    -                    ///  I2STX_SDA
    -                    I2STX_SDA = 0x1,
    -                    ///  MOSI1
    -                    MOSI1 = 0x2,
    -                    ///  MAT2.3
    -                    MAT2 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P0.10.
    -            P0_10: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P0.10
    -                    GPIO_P0 = 0x0,
    -                    ///  TXD2
    -                    TXD2 = 0x1,
    -                    ///  SDA2
    -                    SDA2 = 0x2,
    -                    ///  MAT3.0
    -                    MAT3 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P0.11.
    -            P0_11: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P0.11
    -                    GPIO_P0 = 0x0,
    -                    ///  RXD2
    -                    RXD2 = 0x1,
    -                    ///  SCL2
    -                    SCL2 = 0x2,
    -                    ///  MAT3.1
    -                    MAT3 = 0x3,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u6,
    -            ///  Pin function select P0.15.
    -            P0_15: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P0.15
    -                    GPIO_P0 = 0x0,
    -                    ///  TXD1
    -                    TXD1 = 0x1,
    -                    ///  SCK0
    -                    SCK0 = 0x2,
    -                    ///  SCK
    -                    SCK = 0x3,
    -                },
    -            },
    -        }),
    -        ///  Pin function select register 1.
    -        PINSEL1: mmio.Mmio(packed struct(u32) {
    -            ///  Pin function select P0.16.
    -            P0_16: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P0.16
    -                    GPIO_P0 = 0x0,
    -                    ///  RXD1
    -                    RXD1 = 0x1,
    -                    ///  SSEL0
    -                    SSEL0 = 0x2,
    -                    ///  SSEL
    -                    SSEL = 0x3,
    -                },
    -            },
    -            ///  Pin function select P0.17.
    -            P0_17: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P0.17
    -                    GPIO_P0 = 0x0,
    -                    ///  CTS1
    -                    CTS1 = 0x1,
    -                    ///  MISO0
    -                    MISO0 = 0x2,
    -                    ///  MISO
    -                    MISO = 0x3,
    -                },
    -            },
    -            ///  Pin function select P0.18.
    -            P0_18: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P0.18
    -                    GPIO_P0 = 0x0,
    -                    ///  DCD1
    -                    DCD1 = 0x1,
    -                    ///  MOSI0
    -                    MOSI0 = 0x2,
    -                    ///  MOSI
    -                    MOSI = 0x3,
    -                },
    -            },
    -            ///  Pin function select P019.
    -            P0_19: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P0.19.
    -                    GPIO_P0 = 0x0,
    -                    ///  DSR1
    -                    DSR1 = 0x1,
    -                    ///  Reserved
    -                    RESERVED = 0x2,
    -                    ///  SDA1
    -                    SDA1 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P0.20.
    -            P0_20: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P0.20.
    -                    GPIO_P0 = 0x0,
    -                    ///  DTR1
    -                    DTR1 = 0x1,
    -                    ///  Reserved
    -                    RESERVED = 0x2,
    -                    ///  SCL1
    -                    SCL1 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P0.21.
    -            P0_21: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO Port 0.21.
    -                    GPIO_PORT_0 = 0x0,
    -                    ///  RI1
    -                    RI1 = 0x1,
    -                    ///  Reserved
    -                    RESERVED = 0x2,
    -                    ///  RD1
    -                    RD1 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P022
    -            P0_22: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P0.22.
    -                    GPIO_P0 = 0x0,
    -                    ///  RTS1
    -                    RTS1 = 0x1,
    -                    ///  Reserved
    -                    RESERVED = 0x2,
    -                    ///  TD1
    -                    TD1 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P023.
    -            P0_23: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P0.23.
    -                    GPIO_P0 = 0x0,
    -                    ///  AD0.0
    -                    AD0 = 0x1,
    -                    ///  I2SRX_CLK
    -                    I2SRX_CLK = 0x2,
    -                    ///  CAP3.0
    -                    CAP3 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P0.24.
    -            P0_24: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P0.24.
    -                    GPIO_P0 = 0x0,
    -                    ///  AD0.1
    -                    AD0 = 0x1,
    -                    ///  I2SRX_WS
    -                    I2SRX_WS = 0x2,
    -                    ///  CAP3.1
    -                    CAP3 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P0.25.
    -            P0_25: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P0.25
    -                    GPIO_P0 = 0x0,
    -                    ///  AD0.2
    -                    AD0 = 0x1,
    -                    ///  I2SRX_SDA
    -                    I2SRX_SDA = 0x2,
    -                    ///  TXD3
    -                    TXD3 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P0.26.
    -            P0_26: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P0.26
    -                    GPIO_P0 = 0x0,
    -                    ///  AD0.3
    -                    AD0 = 0x1,
    -                    ///  AOUT
    -                    AOUT = 0x2,
    -                    ///  RXD3
    -                    RXD3 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P0.27.
    -            P0_27: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P0.27
    -                    GPIO_P0 = 0x0,
    -                    ///  SDA0
    -                    SDA0 = 0x1,
    -                    ///  USB_SDA
    -                    USB_SDA = 0x2,
    -                    ///  Reserved
    -                    RESERVED = 0x3,
    -                },
    -            },
    -            ///  Pin function select P0.28.
    -            P0_28: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P0.28
    -                    GPIO_P0 = 0x0,
    -                    ///  SCL0
    -                    SCL0 = 0x1,
    -                    ///  USB_SCL
    -                    USB_SCL = 0x2,
    -                    ///  Reserved
    -                    RESERVED = 0x3,
    -                },
    -            },
    -            ///  Pin function select P0.29
    -            P0_29: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P0.29
    -                    GPIO_P0 = 0x0,
    -                    ///  USB_D+
    -                    USB_DP = 0x1,
    -                    ///  Reserved
    -                    RESERVED = 0x2,
    -                    ///  Reserved
    -                    RESERVED = 0x3,
    -                },
    -            },
    -            ///  Pin function select P0.30.
    -            P0_30: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P0.30
    -                    GPIO_P0 = 0x0,
    -                    ///  USB_D-
    -                    USB_DM = 0x1,
    -                    ///  Reserved
    -                    RESERVED = 0x2,
    -                    ///  Reserved
    -                    RESERVED = 0x3,
    -                },
    -            },
    -            ///  Reserved
    -            RESERVED: u2,
    -        }),
    -        ///  Pin function select register 2.
    -        PINSEL2: mmio.Mmio(packed struct(u32) {
    -            ///  Pin function select P1.0.
    -            P1_0: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P1.0
    -                    GPIO_P1 = 0x0,
    -                    ///  ENET_TXD0
    -                    ENET_TXD0 = 0x1,
    -                    ///  Reserved
    -                    RESERVED = 0x2,
    -                    ///  Reserved
    -                    RESERVED = 0x3,
    -                },
    -            },
    -            ///  Pin function select P1.1.
    -            P1_1: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P1.1
    -                    GPIO_P1 = 0x0,
    -                    ///  ENET_TXD1
    -                    ENET_TXD1 = 0x1,
    -                    ///  Reserved
    -                    RESERVED = 0x2,
    -                    ///  Reserved
    -                    RESERVED = 0x3,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u4,
    -            ///  Pin function select P1.4.
    -            P1_4: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P1.4.
    -                    GPIO_P1 = 0x0,
    -                    ///  ENET_TX_EN
    -                    ENET_TX_EN = 0x1,
    -                    ///  Reserved
    -                    RESERVED = 0x2,
    -                    ///  Reserved
    -                    RESERVED = 0x3,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u6,
    -            ///  Pin function select P1.8.
    -            P1_8: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P1.8.
    -                    GPIO_P1 = 0x0,
    -                    ///  ENET_CRS
    -                    ENET_CRS = 0x1,
    -                    ///  Reserved
    -                    RESERVED = 0x2,
    -                    ///  Reserved
    -                    RESERVED = 0x3,
    -                },
    -            },
    -            ///  Pin function select P1.9.
    -            P1_9: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO Port 1.9
    -                    GPIO_PORT_1 = 0x0,
    -                    ///  ENET_RXD0
    -                    ENET_RXD0 = 0x1,
    -                    ///  Reserved
    -                    RESERVED = 0x2,
    -                    ///  Reserved
    -                    RESERVED = 0x3,
    -                },
    -            },
    -            ///  Pin function select P1.10.
    -            P1_10: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P1.10
    -                    GPIO_P1 = 0x0,
    -                    ///  ENET_RXD1
    -                    ENET_RXD1 = 0x1,
    -                    ///  Reserved
    -                    RESERVED = 0x2,
    -                    ///  Reserved
    -                    RESERVED = 0x3,
    -                },
    -            },
    -            ///  Pin function select P1.14.
    -            P1_14: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P1.14
    -                    GPIO_P1 = 0x0,
    -                    ///  ENET_RX_ER
    -                    ENET_RX_ER = 0x1,
    -                    ///  Reserved
    -                    RESERVED = 0x2,
    -                    ///  Reserved
    -                    RESERVED = 0x3,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u6,
    -            ///  Pin function select P1.15.
    -            P1_15: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P1.15
    -                    GPIO_P1 = 0x0,
    -                    ///  ENET_REF_CLK
    -                    ENET_REF_CLK = 0x1,
    -                    ///  Reserved
    -                    RESERVED = 0x2,
    -                    ///  Reserved
    -                    RESERVED = 0x3,
    -                },
    -            },
    -        }),
    -        ///  Pin function select register 3.
    -        PINSEL3: mmio.Mmio(packed struct(u32) {
    -            ///  Pin function select P1.16.
    -            P1_16: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P1.16
    -                    GPIO_P1 = 0x0,
    -                    ///  ENET_MDC
    -                    ENET_MDC = 0x1,
    -                    ///  Reserved
    -                    RESERVED = 0x2,
    -                    ///  Reserved
    -                    RESERVED = 0x3,
    -                },
    -            },
    -            ///  Pin function select P1.17.
    -            P1_17: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P1.17
    -                    GPIO_P1 = 0x0,
    -                    ///  ENET_MDIO
    -                    ENET_MDIO = 0x1,
    -                    ///  Reserved
    -                    RESERVED = 0x2,
    -                    ///  Reserved
    -                    RESERVED = 0x3,
    -                },
    -            },
    -            ///  Pin function select P1.18.
    -            P1_18: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P1.18
    -                    GPIO_P1 = 0x0,
    -                    ///  USB_UP_LED
    -                    USB_UP_LED = 0x1,
    -                    ///  PWM1.1
    -                    PWM1 = 0x2,
    -                    ///  CAP1.0
    -                    CAP1 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P1.19.
    -            P1_19: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P1.19.
    -                    GPIO_P1 = 0x0,
    -                    ///  MCOA0
    -                    MCOA0 = 0x1,
    -                    ///  USB_PPWR
    -                    USB_PPWR = 0x2,
    -                    ///  CAP1.1
    -                    CAP1 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P1.20.
    -            P1_20: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P1.20.
    -                    GPIO_P1 = 0x0,
    -                    ///  MCI0
    -                    MCI0 = 0x1,
    -                    ///  PWM1.2
    -                    PWM1 = 0x2,
    -                    ///  SCK0
    -                    SCK0 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P1.21.
    -            P1_21: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P1.21.
    -                    GPIO_P1 = 0x0,
    -                    ///  MCABORT
    -                    MCABORT = 0x1,
    -                    ///  PWM1.3
    -                    PWM1 = 0x2,
    -                    ///  SSEL0
    -                    SSEL0 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P1.22
    -            P1_22: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P1.22.
    -                    GPIO_P1 = 0x0,
    -                    ///  MCOB0
    -                    MCOB0 = 0x1,
    -                    ///  USB_PWRD
    -                    USB_PWRD = 0x2,
    -                    ///  MAT1.0
    -                    MAT1 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P1.23.
    -            P1_23: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P1.23.
    -                    GPIO_P1 = 0x0,
    -                    ///  MCI1
    -                    MCI1 = 0x1,
    -                    ///  PWM1.4
    -                    PWM1 = 0x2,
    -                    ///  MISO0
    -                    MISO0 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P1.24.
    -            P1_24: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P1.24.
    -                    GPIO_P1 = 0x0,
    -                    ///  MCI2
    -                    MCI2 = 0x1,
    -                    ///  PWM1.5
    -                    PWM1 = 0x2,
    -                    ///  MOSI0
    -                    MOSI0 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P1.25.
    -            P1_25: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P1.25
    -                    GPIO_P1 = 0x0,
    -                    ///  MCOA1
    -                    MCOA1 = 0x1,
    -                    ///  Reserved
    -                    RESERVED = 0x2,
    -                    ///  MAT1.1
    -                    MAT1 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P1.26.
    -            P1_26: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P1.26
    -                    GPIO_P1 = 0x0,
    -                    ///  MCOB1
    -                    MCOB1 = 0x1,
    -                    ///  PWM1.6
    -                    PWM1 = 0x2,
    -                    ///  CAP0.0
    -                    CAP0 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P1.27.
    -            P1_27: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P1.27
    -                    GPIO_P1 = 0x0,
    -                    ///  CLKOUT
    -                    CLKOUT = 0x1,
    -                    ///  USB_OVRCR
    -                    USB_OVRCR = 0x2,
    -                    ///  CAP0.1
    -                    CAP0 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P1.28.
    -            P1_28: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P1.28
    -                    GPIO_P1 = 0x0,
    -                    ///  MCOA2
    -                    MCOA2 = 0x1,
    -                    ///  PCAP1.0
    -                    PCAP1 = 0x2,
    -                    ///  MAT0.0
    -                    MAT0 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P1.29
    -            P1_29: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P1.29
    -                    GPIO_P1 = 0x0,
    -                    ///  MCOB2
    -                    MCOB2 = 0x1,
    -                    ///  PCAP1.1
    -                    PCAP1 = 0x2,
    -                    ///  MAT0.1
    -                    MAT0 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P1.30.
    -            P1_30: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P1.30
    -                    GPIO_P1 = 0x0,
    -                    ///  Reserved
    -                    RESERVED = 0x1,
    -                    ///  VBUS
    -                    VBUS = 0x2,
    -                    ///  AD0.4
    -                    AD0 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P1.31.
    -            P1_31: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO Port 1.31
    -                    GPIO_PORT_1 = 0x0,
    -                    ///  Reserved
    -                    RESERVED = 0x1,
    -                    ///  SCK1
    -                    SCK1 = 0x2,
    -                    ///  AD0.5
    -                    AD0 = 0x3,
    -                },
    -            },
    -        }),
    -        ///  Pin function select register 4
    -        PINSEL4: mmio.Mmio(packed struct(u32) {
    -            ///  Pin function select P2.0.
    -            P2_0: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P2.0
    -                    GPIO_P2 = 0x0,
    -                    ///  PWM1.1
    -                    PWM1 = 0x1,
    -                    ///  TXD1
    -                    TXD1 = 0x2,
    -                    ///  Reserved
    -                    RESERVED = 0x3,
    -                },
    -            },
    -            ///  Pin function select P2.1.
    -            P2_1: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P2.1
    -                    GPIO_P2 = 0x0,
    -                    ///  PWM1.2
    -                    PWM1 = 0x1,
    -                    ///  RXD1
    -                    RXD1 = 0x2,
    -                    ///  Reserved
    -                    RESERVED = 0x3,
    -                },
    -            },
    -            ///  Pin function select P2.2.
    -            P2_2: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P2.2
    -                    GPIO_P2 = 0x0,
    -                    ///  PWM1.3
    -                    PWM1 = 0x1,
    -                    ///  CTS1
    -                    CTS1 = 0x2,
    -                    ///  Reserved
    -                    RESERVED = 0x3,
    -                },
    -            },
    -            ///  Pin function select P2.3.
    -            P2_3: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P2.3.
    -                    GPIO_P2 = 0x0,
    -                    ///  PWM1.4
    -                    PWM1 = 0x1,
    -                    ///  DCD1
    -                    DCD1 = 0x2,
    -                    ///  Reserved.
    -                    RESERVED = 0x3,
    -                },
    -            },
    -            ///  Pin function select P2.4.
    -            P2_4: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P2.4.
    -                    GPIO_P2 = 0x0,
    -                    ///  PWM1.5
    -                    PWM1 = 0x1,
    -                    ///  DSR1
    -                    DSR1 = 0x2,
    -                    ///  Reserved.
    -                    RESERVED = 0x3,
    -                },
    -            },
    -            ///  Pin function select P2.5.
    -            P2_5: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P2.5.
    -                    GPIO_P2 = 0x0,
    -                    ///  PWM1.6
    -                    PWM1 = 0x1,
    -                    ///  DTR1
    -                    DTR1 = 0x2,
    -                    ///  Reserved
    -                    RESERVED = 0x3,
    -                },
    -            },
    -            ///  Pin function select P2.6.
    -            P2_6: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P2.6.
    -                    GPIO_P2 = 0x0,
    -                    ///  PCAP1.0
    -                    PCAP1 = 0x1,
    -                    ///  RI1
    -                    RI1 = 0x2,
    -                    ///  Reserved
    -                    RESERVED = 0x3,
    -                },
    -            },
    -            ///  Pin function select P2.7.
    -            P2_7: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P2.7.
    -                    GPIO_P2 = 0x0,
    -                    ///  RD2
    -                    RD2 = 0x1,
    -                    ///  RTS1
    -                    RTS1 = 0x2,
    -                    ///  Reserved
    -                    RESERVED = 0x3,
    -                },
    -            },
    -            ///  Pin function select P2.8.
    -            P2_8: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P2.8.
    -                    GPIO_P2 = 0x0,
    -                    ///  TD2
    -                    TD2 = 0x1,
    -                    ///  TXD2
    -                    TXD2 = 0x2,
    -                    ///  ENET_MDC
    -                    ENET_MDC = 0x3,
    -                },
    -            },
    -            ///  Pin function select P2.9.
    -            P2_9: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P2.9
    -                    GPIO_P2 = 0x0,
    -                    ///  USB_CONNECT
    -                    USB_CONNECT = 0x1,
    -                    ///  RXD2
    -                    RXD2 = 0x2,
    -                    ///  ENET_MDIO
    -                    ENET_MDIO = 0x3,
    -                },
    -            },
    -            ///  Pin function select P2.10.
    -            P2_10: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P2.10
    -                    GPIO_P2 = 0x0,
    -                    ///  EINT0
    -                    EINT0 = 0x1,
    -                    ///  NMI
    -                    NMI = 0x2,
    -                    ///  Reserved
    -                    RESERVED = 0x3,
    -                },
    -            },
    -            ///  Pin function select P2.11.
    -            P2_11: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P2.11
    -                    GPIO_P2 = 0x0,
    -                    ///  EINT1
    -                    EINT1 = 0x1,
    -                    ///  Reserved
    -                    RESERVED = 0x2,
    -                    ///  I2STX_CLK
    -                    I2STX_CLK = 0x3,
    -                },
    -            },
    -            ///  Pin function select P2.12.
    -            P2_12: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P2.12
    -                    GPIO_P2 = 0x0,
    -                    ///  EINT2
    -                    EINT2 = 0x1,
    -                    ///  Reserved
    -                    RESERVED = 0x2,
    -                    ///  I2STX_WS
    -                    I2STX_WS = 0x3,
    -                },
    -            },
    -            ///  Pin function select P2.13.
    -            P2_13: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P2.13
    -                    GPIO_P2 = 0x0,
    -                    ///  EINT3
    -                    EINT3 = 0x1,
    -                    ///  Reserved
    -                    RESERVED = 0x2,
    -                    ///  I2STX_SDA
    -                    I2STX_SDA = 0x3,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u4,
    -        }),
    -        reserved28: [8]u8,
    -        ///  Pin function select register 7
    -        PINSEL7: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved.
    -            RESERVED: u18,
    -            ///  Pin function select P3.25.
    -            P3_25: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P3.25
    -                    GPIO_P3 = 0x0,
    -                    ///  Reserved
    -                    RESERVED = 0x1,
    -                    ///  MAT0.0
    -                    MAT0 = 0x2,
    -                    ///  PWM1.2
    -                    PWM1 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P3.26.
    -            P3_26: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P3.26
    -                    GPIO_P3 = 0x0,
    -                    ///  STCLK
    -                    STCLK = 0x1,
    -                    ///  MAT0.1
    -                    MAT0 = 0x2,
    -                    ///  PWM1.3
    -                    PWM1 = 0x3,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u10,
    -        }),
    -        reserved36: [4]u8,
    -        ///  Pin function select register 9
    -        PINSEL9: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved.
    -            RESERVED: u24,
    -            ///  Pin function select P4.28.
    -            P4_28: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P4.28
    -                    GPIO_P4 = 0x0,
    -                    ///  RX_MCLK
    -                    RX_MCLK = 0x1,
    -                    ///  MAT2.0
    -                    MAT2 = 0x2,
    -                    ///  TXD3
    -                    TXD3 = 0x3,
    -                },
    -            },
    -            ///  Pin function select P4.29.
    -            P4_29: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  GPIO P4.29
    -                    GPIO_P4 = 0x0,
    -                    ///  TX_MCLK
    -                    TX_MCLK = 0x1,
    -                    ///  MAT2.1
    -                    MAT2 = 0x2,
    -                    ///  RXD3
    -                    RXD3 = 0x3,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u4,
    -        }),
    -        ///  Pin function select register 10
    -        PINSEL10: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved. Software should not write 1 to these bits.
    -            RESERVED: u3,
    -            ///  TPIU interface pins control.
    -            TPIUCTRL: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled. TPIU interface is disabled.
    -                    DISABLED = 0x0,
    -                    ///  Enabled. TPIU interface is enabled. TPIU signals are available on the pins hosting them regardless of the PINSEL4 content.
    -                    ENABLED = 0x1,
    -                },
    -            },
    -            ///  Reserved. Software should not write 1 to these bits.
    -            RESERVED: u28,
    -        }),
    -        reserved64: [20]u8,
    -        ///  Pin mode select register 0
    -        PINMODE0: mmio.Mmio(packed struct(u32) {
    -            ///  Port 0 pin 0 on-chip pull-up/down resistor control.
    -            P0_00MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P0.0 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P0.0 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P0.0 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P0.0 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 0 pin 1 control.
    -            P0_01MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P0.1 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P0.1 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P0.1 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P0.1 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 0 pin 2 control.
    -            P0_02MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P0.2 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P0.2 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P0.2 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P0.2 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 0 pin 3 control.
    -            P0_03MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P0.3 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P0.3 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P0.3 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P0.3 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 0 pin 4 control.
    -            P0_04MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P0.4 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P0.4 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P0.4 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P0.4 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 0 pin 5 control.
    -            P0_05MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P0.5 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P0.5 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P0.5 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P0.5 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 0 pin 6 control.
    -            P0_06MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P0.6 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Disabled. Repeater. P0.6 pin has repeater mode enabled.
    -                    DISABLED = 0x1,
    -                    ///  Disabled. P0.6 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P0.6 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 0 pin 7 control.
    -            P0_07MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P0.7 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P0.7 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P0.7 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P0.7 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 0 pin 8 control.
    -            P0_08MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P0.8 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P0.8 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P0.8 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P0.8 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 0 pin 9 control.
    -            P0_09MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P0.9 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P0.9 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P0.9 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P0.9 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 0 pin 10 control.
    -            P0_10MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P0.10 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P0.10 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P0.10 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P0.10 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 0 pin 11 control.
    -            P0_11MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P0.11 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P0.11 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P0.11 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P0.11 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u6,
    -            ///  Port 0 pin 15 control.
    -            P0_15MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P0.15 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P0.15 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P0.15 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P0.15 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -        }),
    -        ///  Pin mode select register 1
    -        PINMODE1: mmio.Mmio(packed struct(u32) {
    -            ///  Port 1 pin 16 control.
    -            P0_16MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P0.16 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P0.16 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P0.16 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P0.16 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 17 control.
    -            P0_17MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P0.17 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P0.17 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P0.17 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P0.17 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 18 control.
    -            P0_18MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P0.18 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P0.18 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P0.18 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P0.18 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 19 control.
    -            P0_19MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P0.19 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P0.19 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P0.19 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P0.19 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 20 control.
    -            P0_20MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P0.20 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P0.20 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P0.20 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P0.20 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 21 control.
    -            P0_21MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P0.21 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P0.21 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P0.21 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P0.21 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 22 control.
    -            P0_22MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P0.22 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P0.22 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P0.22 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P0.22 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 23 control.
    -            P0_23MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P0.23 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P0.23 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P0.23 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P0.23 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 24 control.
    -            P0_24MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P0.24 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P0.24 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P0.24 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P0.24 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 25 control.
    -            P0_25MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P0.25 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P0.25 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P0.25 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P0.25 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 26 control.
    -            P0_26MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P0.26 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P0.26 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P0.26 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P0.26 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u8,
    -            ///  Reserved.
    -            RESERVED: u2,
    -        }),
    -        ///  Pin mode select register 2
    -        PINMODE2: mmio.Mmio(packed struct(u32) {
    -            ///  Port 1 pin 0 control.
    -            P1_00MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P1.0 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P1.0 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P1.0 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P1.0 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 1 control.
    -            P1_01MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P1.1 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P1.1 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P1.1 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P1.1 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u4,
    -            ///  Port 1 pin 4 control.
    -            P1_04MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P1.4 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P1.4 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P1.4 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P1.4 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u6,
    -            ///  Port 1 pin 8 control.
    -            P1_08MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P1.8 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P1.8 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P1.8 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P1.8 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 9 control.
    -            P1_09MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P1.9 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P1.9 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P1.9 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P1.9 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 10 control.
    -            P1_10MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P1.10 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P1.10 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P1.10 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P1.10 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u6,
    -            ///  Port 1 pin 14 control.
    -            P1_14MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P1.14 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P1.14 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P1.14 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P1.14 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 15 control.
    -            P1_15MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P1.15 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P1.15 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P1.15 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P1.15 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -        }),
    -        ///  Pin mode select register 3.
    -        PINMODE3: mmio.Mmio(packed struct(u32) {
    -            ///  Port 1 pin 16 control.
    -            P1_16MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P1.16 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P1.16 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P1.16 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P1.16 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 17 control.
    -            P1_17MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P1.17 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P1.17 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P1.17 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P1.17 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 18 control.
    -            P1_18MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P1.18 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P1.18 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P1.18 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P1.18 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 19 control.
    -            P1_19MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P1.19 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P1.19 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P1.19 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P1.19 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 20 control.
    -            P1_20MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P1.20 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P1.20 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P1.20 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P1.20 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 21 control.
    -            P1_21MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P1.21 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P1.21 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P1.21 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P1.21 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 22 control.
    -            P1_22MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P1.22 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P1.22 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P1.22 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P1.22 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 23 control.
    -            P1_23MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P1.23 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P1.23 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P1.23 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P1.23 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 24 control.
    -            P1_24MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P1.24 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P1.24 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P1.24 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P1.24 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 25 control.
    -            P1_25MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P1.25 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P1.25 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P1.25 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P1.25 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 26 control.
    -            P1_26MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P1.26 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P1.26 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P1.26 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P1.26 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 27 control.
    -            P1_27MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P1.27 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P1.27 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P1.27 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P1.27 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 28 control.
    -            P1_28MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P1.28 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P1.28 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P1.28 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P1.28 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 29 control.
    -            P1_29MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P1.29 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P1.29 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P1.29 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P1.29 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 30 control.
    -            P1_30MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P1.30 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P1.30 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P1.30 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P1.30 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 1 pin 31 control.
    -            P1_31MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P1.31 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P1.31 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P1.31 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P1.31 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -        }),
    -        ///  Pin mode select register 4
    -        PINMODE4: mmio.Mmio(packed struct(u32) {
    -            ///  Port 2 pin 0 control.
    -            P2_00MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P2.0 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P2.0 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P2.0 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P2.0 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 2 pin 1 control.
    -            P2_01MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P2.1 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P2.1 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P2.1 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P2.1 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 2 pin 2 control.
    -            P2_02MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P2.2 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P2.2 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P2.2 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P2.2 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 2 pin 3 control.
    -            P2_03MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P2.3 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P2.3 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P2.3 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P2.3 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 2 pin 4 control.
    -            P2_04MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P2.4 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P2.4 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P2.4 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P2.4 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 2 pin 5 control.
    -            P2_05MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P2.5 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P2.5 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P2.5 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P2.5 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 2 pin 6 control.
    -            P2_06MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P2.6 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P2.6 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P2.6 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P2.6 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 2 pin 7 control.
    -            P2_07MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P2.7 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P2.7 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P2.7 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P2.7 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 2 pin 8 control.
    -            P2_08MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P2.8 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P2.8 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P2.8 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P2.8 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 2 pin 9 control.
    -            P2_09MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P2.9 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P2.9 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P2.9 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P2.9 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 2 pin 10 control.
    -            P2_10MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P2.10 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P2.10 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P2.10 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P2.10 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 2 pin 11 control.
    -            P2_11MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P2.11 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P2.11 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P2.11 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P2.11 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 2 pin 12 control.
    -            P2_12MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P2.12 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P2.12 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P2.12 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P2.12 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 2 pin 13 control.
    -            P2_13MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P2.13 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P2.13 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P2.13 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P2.13 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u4,
    -        }),
    -        reserved92: [8]u8,
    -        ///  Pin mode select register 7
    -        PINMODE7: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved
    -            RESERVED: u18,
    -            ///  Port 3 pin 25 control.
    -            P3_25MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P3.25 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P3.25 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P3.25 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P3.25 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 3 pin 26 control.
    -            P3_26MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P3.26 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P3.26 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P3.26 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P3.26 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u10,
    -        }),
    -        reserved100: [4]u8,
    -        ///  Pin mode select register 9
    -        PINMODE9: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved.
    -            RESERVED: u24,
    -            ///  Port 4 pin 28 control.
    -            P4_28MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P4.28 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P4.28 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P4.28 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P4.28 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Port 4 pin 29 control.
    -            P4_29MODE: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Pull-up. P4.29 pin has a pull-up resistor enabled.
    -                    PULL_UP = 0x0,
    -                    ///  Repeater. P4.29 pin has repeater mode enabled.
    -                    REPEATER = 0x1,
    -                    ///  Disabled. P4.29 pin has neither pull-up nor pull-down.
    -                    DISABLED = 0x2,
    -                    ///  Pull-down. P4.29 has a pull-down resistor enabled.
    -                    PULL_DOWN = 0x3,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u4,
    -        }),
    -        ///  Open drain mode control register 0
    -        PINMODE_OD0: mmio.Mmio(packed struct(u32) {
    -            ///  Port 0 pin 0 open drain mode control. Pins may potentially be used for I2C-buses using standard port pins. If so, they should be configured for open drain mode via the related bits in PINMODE_OD0.
    -            P0_00OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P0.0 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P0.0 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 0 pin 1 open drain mode control. Pins may potentially be used for I2C-buses using standard port pins. If so, they should be configured for open drain mode via the related bits in PINMODE_OD0.
    -            P0_01OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P0.1 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P0.1 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 0 pin 2 open drain mode control
    -            P0_02OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P0.2 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P0.2 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 0 pin 3 open drain mode control
    -            P0_03OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P0.3 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P0.3 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 0 pin 4 open drain mode control
    -            P0_04OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P0.4 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P0.4 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 0 pin 5 open drain mode control
    -            P0_05OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P0.5 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P0.5 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 0 pin 6 open drain mode control
    -            P0_06OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P0.6 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P0.6 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 0 pin 7 open drain mode control
    -            P0_07OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P0.7 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P0.7 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 0 pin 8 open drain mode control
    -            P0_08OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P0.8 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P0.8 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 0 pin 9 open drain mode control
    -            P0_09OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P0.9 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P0.9 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 0 pin 10 open drain mode control. Pins may potentially be used for I2C-buses using standard port pins. If so, they should be configured for open drain mode via the related bits in PINMODE_OD0.
    -            P0_10OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P0.10 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P0.10 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 0 pin 11 open drain mode control. Pins may potentially be used for I2C-buses using standard port pins. If so, they should be configured for open drain mode via the related bits in PINMODE_OD0.
    -            P0_11OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P0.11 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P0.11 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u3,
    -            ///  Port 0 pin 15 open drain mode control
    -            P0_15OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P0.15 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P0.15 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 0 pin 16 open drain mode control
    -            P0_16OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P0.16 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P0.16 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 0 pin 17 open drain mode control
    -            P0_17OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P0.17 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P0.17 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 0 pin 18 open drain mode control
    -            P0_18OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P0.18 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P0.18 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 0 pin 19 open drain mode control. Pins may potentially be used for I2C-buses using standard port pins. If so, they should be configured for open drain mode via the related bits in PINMODE_OD0.
    -            P0_19OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P0.19 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P0.19 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 0 pin 20open drain mode control. Pins may potentially be used for I2C-buses using standard port pins. If so, they should be configured for open drain mode via the related bits in PINMODE_OD0.
    -            P0_20OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P0.20 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P0.20 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 0 pin 21 open drain mode control
    -            P0_21OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P0.21 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P0.21 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 0 pin 22 open drain mode control
    -            P0_22OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P0.22 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P0.22 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 0 pin 23 open drain mode control
    -            P0_23OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P0.23 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P0.23 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 0 pin 24open drain mode control
    -            P0_24OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P0.23 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P0.23 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 0 pin 25 open drain mode control
    -            P0_25OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P0.25 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P0.25 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 0 pin 26 open drain mode control
    -            P0_26OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P0.26 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P0.26 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u2,
    -            ///  Port 0 pin 29 open drain mode control
    -            P0_29OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P0.29 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P0.29 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 0 pin 30 open drain mode control
    -            P0_30OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P0.30 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P0.30 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u1,
    -        }),
    -        ///  Open drain mode control register 1
    -        PINMODE_OD1: mmio.Mmio(packed struct(u32) {
    -            ///  Port 1 pin 0 open drain mode control.
    -            P1_00OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P1.0 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P1.0 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 1 pin 1 open drain mode control, see P1.00OD
    -            P1_01OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P1.1 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P1.1 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u2,
    -            ///  Port 1 pin 4 open drain mode control, see P1.00OD
    -            P1_04OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P1.4 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P1.4 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u3,
    -            ///  Port 1 pin 8 open drain mode control, see P1.00OD
    -            P1_08OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P1.8 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P1.8 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 1 pin 9 open drain mode control, see P1.00OD
    -            P1_09OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P1.9 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P1.9 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 1 pin 10 open drain mode control, see P1.00OD
    -            P1_10OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P1.10 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P1.10 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u3,
    -            ///  Port 1 pin 14 open drain mode control, see P1.00OD
    -            P1_14OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P1.14 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P1.14 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 1 pin 15 open drain mode control, see P1.00OD
    -            P1_15OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P1.15 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P1.15 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 1 pin 16 open drain mode control, see P1.00OD
    -            P1_16OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P1.16 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P1.16 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 1 pin 17 open drain mode control, see P1.00OD
    -            P1_17OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P1.17 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P1.17 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 1 pin 18 open drain mode control, see P1.00OD
    -            P1_18OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P1.18 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P1.18 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 1 pin 19 open drain mode control, see P1.00OD
    -            P1_19OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P1.19 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P1.19 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 1 pin 20open drain mode control, see P1.00OD
    -            P1_20OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P1.20 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P1.20 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 1 pin 21 open drain mode control, see P1.00OD
    -            P1_21OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P1.21 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P1.21 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 1 pin 22 open drain mode control, see P1.00OD
    -            P1_22OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P1.22 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P1.22 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 1 pin 23 open drain mode control, see P1.00OD
    -            P1_23OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P1.23 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P1.23 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 1 pin 24open drain mode control, see P1.00OD
    -            P1_24OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P1.24 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P1.24 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 1 pin 25 open drain mode control, see P1.00OD
    -            P1_25OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P1.25 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P1.25 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 1 pin 26 open drain mode control, see P1.00OD
    -            P1_26OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P1.26 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P1.26 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 1 pin 27 open drain mode control, see P1.00OD
    -            P1_27OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P1.27 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P1.27 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 1 pin 28 open drain mode control, see P1.00OD
    -            P1_28OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P1.28 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P1.28 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 1 pin 29 open drain mode control, see P1.00OD
    -            P1_29OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P1.29 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P1.29 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 1 pin 30 open drain mode control, see P1.00OD
    -            P1_30OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P1.30 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P1.30 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 1 pin 31 open drain mode control.
    -            P1_31OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P1.31 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P1.31 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -        }),
    -        ///  Open drain mode control register 2
    -        PINMODE_OD2: mmio.Mmio(packed struct(u32) {
    -            ///  Port 2 pin 0 open drain mode control.
    -            P2_00OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P2.0 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P2.0 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 2 pin 1 open drain mode control, see P2.00OD
    -            P2_01OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P2.1 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P2.1p in is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 2 pin 2 open drain mode control, see P2.00OD
    -            P2_02OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P2.2 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P2.2 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 2 pin 3 open drain mode control, see P2.00OD
    -            P2_03OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P2.3 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P2.3 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 2 pin 4 open drain mode control, see P2.00OD
    -            P2_04OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P2.4 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P2.4 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 2 pin 5 open drain mode control, see P2.00OD
    -            P2_05OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P2.5 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P2.5 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 2 pin 6 open drain mode control, see P2.00OD
    -            P2_06OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P2.6 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P2.6 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 2 pin 7 open drain mode control, see P2.00OD
    -            P2_07OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P2.7 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P2.7 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 2 pin 8 open drain mode control, see P2.00OD
    -            P2_08OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P2.8 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P2.8 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 2 pin 9 open drain mode control, see P2.00OD
    -            P2_09OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P2.9 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P2.9 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 2 pin 10 open drain mode control, see P2.00OD
    -            P2_10OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P2.10 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P2.10 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 2 pin 11 open drain mode control, see P2.00OD
    -            P2_11OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P2.11 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P2.11 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 2 pin 12 open drain mode control, see P2.00OD
    -            P2_12OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P2.12 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P2.12 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 2 pin 13 open drain mode control, see P2.00OD
    -            P2_13OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P2.13 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P2.13 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u18,
    -        }),
    -        ///  Open drain mode control register 3
    -        PINMODE_OD3: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved.
    -            RESERVED: u25,
    -            ///  Port 3 pin 25 open drain mode control.
    -            P3_25OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P3.25 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P3.25 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 3 pin 26 open drain mode control, see P3.25OD
    -            P3_26OD: u1,
    -            ///  Reserved.
    -            RESERVED: u5,
    -        }),
    -        ///  Open drain mode control register 4
    -        PINMODE_OD4: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved.
    -            RESERVED: u28,
    -            ///  Port 4 pin 28 open drain mode control.
    -            P4_28OD: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. P4.28 pin is in the normal (not open drain) mode.
    -                    NORMAL = 0x0,
    -                    ///  Open-drain. P4.28 pin is in the open drain mode.
    -                    OPEN_DRAIN = 0x1,
    -                },
    -            },
    -            ///  Port 4 pin 29 open drain mode control, see P4.28OD
    -            P4_29OD: u1,
    -            ///  Reserved.
    -            RESERVED: u2,
    -        }),
    -        ///  I2C Pin Configuration register
    -        I2CPADCFG: mmio.Mmio(packed struct(u32) {
    -            ///  Drive mode control for the SDA0 pin, P0.27.
    -            SDADRV0: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Standard. The SDA0 pin is in the standard drive mode.
    -                    STANDARD = 0x0,
    -                    ///  Fast-mode plus. The SDA0 pin is in Fast Mode Plus drive mode.
    -                    FAST_MODE_PLUS = 0x1,
    -                },
    -            },
    -            ///  I 2C filter mode control for the SDA0 pin, P0.27.
    -            SDAI2C0: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Enabled. The SDA0 pin has I2C glitch filtering and slew rate control enabled.
    -                    ENABLED = 0x0,
    -                    ///  Disabled. The SDA0 pin has I2C glitch filtering and slew rate control disabled.
    -                    DISABLED = 0x1,
    -                },
    -            },
    -            ///  Drive mode control for the SCL0 pin, P0.28.
    -            SCLDRV0: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Standard. The SCL0 pin is in the standard drive mode.
    -                    STANDARD = 0x0,
    -                    ///  Fast-mode plus. The SCL0 pin is in Fast Mode Plus drive mode.
    -                    FAST_MODE_PLUS = 0x1,
    -                },
    -            },
    -            ///  I 2C filter mode control for the SCL0 pin, P0.28.
    -            SCLI2C0: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Enabled. The SCL0 pin has I2C glitch filtering and slew rate control enabled.
    -                    ENABLED = 0x0,
    -                    ///  Disabled. The SCL0 pin has I2C glitch filtering and slew rate control disabled.
    -                    DISABLED = 0x1,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u28,
    -        }),
    -    };
    -
    -    ///  SSP1 controller
    -    pub const SSP1 = extern struct {
    -        ///  Control Register 0. Selects the serial clock rate, bus type, and data size.
    -        CR0: mmio.Mmio(packed struct(u32) {
    -            ///  Data Size Select. This field controls the number of bits transferred in each frame. Values 0000-0010 are not supported and should not be used.
    -            DSS: packed union {
    -                raw: u4,
    -                value: enum(u4) {
    -                    ///  4-bit transfer
    -                    @"4_BIT_TRANSFER" = 0x3,
    -                    ///  5-bit transfer
    -                    @"5_BIT_TRANSFER" = 0x4,
    -                    ///  6-bit transfer
    -                    @"6_BIT_TRANSFER" = 0x5,
    -                    ///  7-bit transfer
    -                    @"7_BIT_TRANSFER" = 0x6,
    -                    ///  8-bit transfer
    -                    @"8_BIT_TRANSFER" = 0x7,
    -                    ///  9-bit transfer
    -                    @"9_BIT_TRANSFER" = 0x8,
    -                    ///  10-bit transfer
    -                    @"10_BIT_TRANSFER" = 0x9,
    -                    ///  11-bit transfer
    -                    @"11_BIT_TRANSFER" = 0xa,
    -                    ///  12-bit transfer
    -                    @"12_BIT_TRANSFER" = 0xb,
    -                    ///  13-bit transfer
    -                    @"13_BIT_TRANSFER" = 0xc,
    -                    ///  14-bit transfer
    -                    @"14_BIT_TRANSFER" = 0xd,
    -                    ///  15-bit transfer
    -                    @"15_BIT_TRANSFER" = 0xe,
    -                    ///  16-bit transfer
    -                    @"16_BIT_TRANSFER" = 0xf,
    -                    _,
    -                },
    -            },
    -            ///  Frame Format.
    -            FRF: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  SPI
    -                    SPI = 0x0,
    -                    ///  TI
    -                    TI = 0x1,
    -                    ///  Microwire
    -                    MICROWIRE = 0x2,
    -                    ///  This combination is not supported and should not be used.
    -                    THIS_COMBINATION_IS_ = 0x3,
    -                },
    -            },
    -            ///  Clock Out Polarity. This bit is only used in SPI mode.
    -            CPOL: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  SSP controller maintains the bus clock low between frames.
    -                    BUS_LOW = 0x0,
    -                    ///  SSP controller maintains the bus clock high between frames.
    -                    BUS_HIGH = 0x1,
    -                },
    -            },
    -            ///  Clock Out Phase. This bit is only used in SPI mode.
    -            CPHA: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  SSP controller captures serial data on the first clock transition of the frame, that is, the transition away from the inter-frame state of the clock line.
    -                    FIRST_CLOCK = 0x0,
    -                    ///  SSP controller captures serial data on the second clock transition of the frame, that is, the transition back to the inter-frame state of the clock line.
    -                    SECOND_CLOCK = 0x1,
    -                },
    -            },
    -            ///  Serial Clock Rate. The number of prescaler-output clocks per bit on the bus, minus one. Given that CPSDVSR is the prescale divider, and the APB clock PCLK clocks the prescaler, the bit frequency is PCLK / (CPSDVSR X [SCR+1]).
    -            SCR: u8,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u16,
    -        }),
    -        ///  Control Register 1. Selects master/slave and other modes.
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Loop Back Mode.
    -            LBM: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  During normal operation.
    -                    NORMAL = 0x0,
    -                    ///  Serial input is taken from the serial output (MOSI or MISO) rather than the serial input pin (MISO or MOSI respectively).
    -                    OUPTU = 0x1,
    -                },
    -            },
    -            ///  SSP Enable.
    -            SSE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  The SSP controller is disabled.
    -                    DISABLED = 0x0,
    -                    ///  The SSP controller will interact with other devices on the serial bus. Software should write the appropriate control information to the other SSP registers and interrupt controller registers, before setting this bit.
    -                    ENABLED = 0x1,
    -                },
    -            },
    -            ///  Master/Slave Mode.This bit can only be written when the SSE bit is 0.
    -            MS: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  The SSP controller acts as a master on the bus, driving the SCLK, MOSI, and SSEL lines and receiving the MISO line.
    -                    MASTER = 0x0,
    -                    ///  The SSP controller acts as a slave on the bus, driving MISO line and receiving SCLK, MOSI, and SSEL lines.
    -                    SLAVE = 0x1,
    -                },
    -            },
    -            ///  Slave Output Disable. This bit is relevant only in slave mode (MS = 1). If it is 1, this blocks this SSP controller from driving the transmit data line (MISO).
    -            SOD: u1,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u28,
    -        }),
    -        ///  Data Register. Writes fill the transmit FIFO, and reads empty the receive FIFO.
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  Write: software can write data to be sent in a future frame to this register whenever the TNF bit in the Status register is 1, indicating that the Tx FIFO is not full. If the Tx FIFO was previously empty and the SSP controller is not busy on the bus, transmission of the data will begin immediately. Otherwise the data written to this register will be sent as soon as all previous data has been sent (and received). If the data length is less than 16 bits, software must right-justify the data written to this register. Read: software can read data from this register whenever the RNE bit in the Status register is 1, indicating that the Rx FIFO is not empty. When software reads this register, the SSP controller returns data from the least recent frame in the Rx FIFO. If the data length is less than 16 bits, the data is right-justified in this field with higher order bits filled with 0s.
    -            DATA: u16,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u16,
    -        }),
    -        ///  Status Register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Transmit FIFO Empty. This bit is 1 is the Transmit FIFO is empty, 0 if not.
    -            TFE: u1,
    -            ///  Transmit FIFO Not Full. This bit is 0 if the Tx FIFO is full, 1 if not.
    -            TNF: u1,
    -            ///  Receive FIFO Not Empty. This bit is 0 if the Receive FIFO is empty, 1 if not.
    -            RNE: u1,
    -            ///  Receive FIFO Full. This bit is 1 if the Receive FIFO is full, 0 if not.
    -            RFF: u1,
    -            ///  Busy. This bit is 0 if the SSPn controller is idle, or 1 if it is currently sending/receiving a frame and/or the Tx FIFO is not empty.
    -            BSY: u1,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u27,
    -        }),
    -        ///  Clock Prescale Register
    -        CPSR: mmio.Mmio(packed struct(u32) {
    -            ///  This even value between 2 and 254, by which PCLK is divided to yield the prescaler output clock. Bit 0 always reads as 0.
    -            CPSDVSR: u8,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u24,
    -        }),
    -        ///  Interrupt Mask Set and Clear Register
    -        IMSC: mmio.Mmio(packed struct(u32) {
    -            ///  Software should set this bit to enable interrupt when a Receive Overrun occurs, that is, when the Rx FIFO is full and another frame is completely received. The ARM spec implies that the preceding frame data is overwritten by the new frame data when this occurs.
    -            RORIM: u1,
    -            ///  Software should set this bit to enable interrupt when a Receive Time-out condition occurs. A Receive Time-out occurs when the Rx FIFO is not empty, and no has not been read for a time-out period. The time-out period is the same for master and slave modes and is determined by the SSP bit rate: 32 bits at PCLK / (CPSDVSR X [SCR+1]).
    -            RTIM: u1,
    -            ///  Software should set this bit to enable interrupt when the Rx FIFO is at least half full.
    -            RXIM: u1,
    -            ///  Software should set this bit to enable interrupt when the Tx FIFO is at least half empty.
    -            TXIM: u1,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u28,
    -        }),
    -        ///  Raw Interrupt Status Register
    -        RIS: mmio.Mmio(packed struct(u32) {
    -            ///  This bit is 1 if another frame was completely received while the RxFIFO was full. The ARM spec implies that the preceding frame data is overwritten by the new frame data when this occurs.
    -            RORRIS: u1,
    -            ///  This bit is 1 if the Rx FIFO is not empty, and has not been read for a time-out period. The time-out period is the same for master and slave modes and is determined by the SSP bit rate: 32 bits at PCLK / (CPSDVSR X [SCR+1]).
    -            RTRIS: u1,
    -            ///  This bit is 1 if the Rx FIFO is at least half full.
    -            RXRIS: u1,
    -            ///  This bit is 1 if the Tx FIFO is at least half empty.
    -            TXRIS: u1,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u28,
    -        }),
    -        ///  Masked Interrupt Status Register
    -        MIS: mmio.Mmio(packed struct(u32) {
    -            ///  This bit is 1 if another frame was completely received while the RxFIFO was full, and this interrupt is enabled.
    -            RORMIS: u1,
    -            ///  This bit is 1 if the Rx FIFO is not empty, has not been read for a time-out period, and this interrupt is enabled. The time-out period is the same for master and slave modes and is determined by the SSP bit rate: 32 bits at PCLK / (CPSDVSR X [SCR+1]).
    -            RTMIS: u1,
    -            ///  This bit is 1 if the Rx FIFO is at least half full, and this interrupt is enabled.
    -            RXMIS: u1,
    -            ///  This bit is 1 if the Tx FIFO is at least half empty, and this interrupt is enabled.
    -            TXMIS: u1,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u28,
    -        }),
    -        ///  SSPICR Interrupt Clear Register
    -        ICR: mmio.Mmio(packed struct(u32) {
    -            ///  Writing a 1 to this bit clears the frame was received when RxFIFO was full interrupt.
    -            RORIC: u1,
    -            ///  Writing a 1 to this bit clears the Rx FIFO was not empty and has not been read for a time-out period interrupt. The time-out period is the same for master and slave modes and is determined by the SSP bit rate: 32 bits at PCLK / (CPSDVSR / [SCR+1]).
    -            RTIC: u1,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u30,
    -        }),
    -        ///  SSP0 DMA control register
    -        DMACR: mmio.Mmio(packed struct(u32) {
    -            ///  Receive DMA Enable. When this bit is set to one 1, DMA for the receive FIFO is enabled, otherwise receive DMA is disabled.
    -            RXDMAE: u1,
    -            ///  Transmit DMA Enable. When this bit is set to one 1, DMA for the transmit FIFO is enabled, otherwise transmit DMA is disabled
    -            TXDMAE: u1,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u30,
    -        }),
    -    };
    -
    -    ///  Analog-to-Digital Converter (ADC)
    -    pub const ADC = extern struct {
    -        ///  A/D Control Register. The ADCR register must be written to select the operating mode before A/D conversion can occur.
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  Selects which of the AD0[7:0] pins is (are) to be sampled and converted. For AD0, bit 0 selects Pin AD0[0], and bit 7 selects pin AD0[7]. In software-controlled mode, only one of these bits should be 1. In hardware scan mode, any value containing 1 to 8 ones is allowed. All zeroes is equivalent to 0x01.
    -            SEL: u8,
    -            ///  The APB clock (PCLK) is divided by (this value plus one) to produce the clock for the A/D converter, which should be less than or equal to 12.4 MHz. Typically, software should program the smallest value in this field that yields a clock of 12.4 MHz or slightly less, but in certain cases (such as a high-impedance analog source) a slower clock may be desirable.
    -            CLKDIV: u8,
    -            ///  Burst mode
    -            BURST: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  The AD converter does repeated conversions at up to 400 kHz, scanning (if necessary) through the pins selected by bits set to ones in the SEL field. The first conversion after the start corresponds to the least-significant 1 in the SEL field, then higher numbered 1-bits (pins) if applicable. Repeated conversions can be terminated by clearing this bit, but the conversion that's in progress when this bit is cleared will be completed. START bits must be 000 when BURST = 1 or conversions will not start.
    -                    BURST = 0x1,
    -                    ///  Conversions are software controlled and require 31 clocks.
    -                    SW = 0x0,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u4,
    -            ///  Power down mode
    -            PDN: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  The A/D converter is operational.
    -                    POWERED = 0x1,
    -                    ///  The A/D converter is in power-down mode.
    -                    POWERDOWN = 0x0,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u2,
    -            ///  When the BURST bit is 0, these bits control whether and when an A/D conversion is started:
    -            START: packed union {
    -                raw: u3,
    -                value: enum(u3) {
    -                    ///  No start (this value should be used when clearing PDN to 0).
    -                    NO_START_THIS_VALUE = 0x0,
    -                    ///  Start conversion now.
    -                    START_CONVERSION_NOW = 0x1,
    -                    ///  Start conversion when the edge selected by bit 27 occurs on the P2[10] pin.
    -                    P2_10 = 0x2,
    -                    ///  Start conversion when the edge selected by bit 27 occurs on the P1[27] pin.
    -                    P1_27 = 0x3,
    -                    ///  Start conversion when the edge selected by bit 27 occurs on MAT0.1. Note that this does not require that the MAT0.1 function appear on a device pin.
    -                    MAT0_1 = 0x4,
    -                    ///  Start conversion when the edge selected by bit 27 occurs on MAT0.3. Note that it is not possible to cause the MAT0.3 function to appear on a device pin.
    -                    MAT0_3 = 0x5,
    -                    ///  Start conversion when the edge selected by bit 27 occurs on MAT1.0. Note that this does not require that the MAT1.0 function appear on a device pin.
    -                    MAT1_0 = 0x6,
    -                    ///  Start conversion when the edge selected by bit 27 occurs on MAT1.1. Note that this does not require that the MAT1.1 function appear on a device pin.
    -                    MAT1_1 = 0x7,
    -                },
    -            },
    -            ///  This bit is significant only when the START field contains 010-111. In these cases:
    -            EDGE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Start conversion on a falling edge on the selected CAP/MAT signal.
    -                    FALLLING = 0x1,
    -                    ///  Start conversion on a rising edge on the selected CAP/MAT signal.
    -                    RISING = 0x0,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u4,
    -        }),
    -        ///  A/D Global Data Register. This register contains the ADC's DONE bit and the result of the most recent A/D conversion.
    -        GDR: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u4,
    -            ///  When DONE is 1, this field contains a binary fraction representing the voltage on the AD0[n] pin selected by the SEL field, as it falls within the range of VREFP to VSS. Zero in the field indicates that the voltage on the input pin was less than, equal to, or close to that on VSS, while 0xFFF indicates that the voltage on the input was close to, equal to, or greater than that on VREFP.
    -            RESULT: u12,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u8,
    -            ///  These bits contain the channel from which the RESULT bits were converted (e.g. 000 identifies channel 0, 001 channel 1...).
    -            CHN: u3,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u3,
    -            ///  This bit is 1 in burst mode if the results of one or more conversions was (were) lost and overwritten before the conversion that produced the result in the RESULT bits. This bit is cleared by reading this register.
    -            OVERRUN: u1,
    -            ///  This bit is set to 1 when an A/D conversion completes. It is cleared when this register is read and when the ADCR is written. If the ADCR is written while a conversion is still in progress, this bit is set and a new conversion is started.
    -            DONE: u1,
    -        }),
    -        reserved12: [4]u8,
    -        ///  A/D Interrupt Enable Register. This register contains enable bits that allow the DONE flag of each A/D channel to be included or excluded from contributing to the generation of an A/D interrupt.
    -        INTEN: mmio.Mmio(packed struct(u32) {
    -            ///  Interrupt enable
    -            ADINTEN0: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Completion of a conversion on ADC channel 0 will not generate an interrupt.
    -                    DISABLE = 0x0,
    -                    ///  Completion of a conversion on ADC channel 0 will generate an interrupt.
    -                    ENABLE = 0x1,
    -                },
    -            },
    -            ///  Interrupt enable
    -            ADINTEN1: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Completion of a conversion on ADC channel 1 will not generate an interrupt.
    -                    DISABLE = 0x0,
    -                    ///  Completion of a conversion on ADC channel 1 will generate an interrupt.
    -                    ENABLE = 0x1,
    -                },
    -            },
    -            ///  Interrupt enable
    -            ADINTEN2: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Completion of a conversion on ADC channel 2 will not generate an interrupt.
    -                    DISABLE = 0x0,
    -                    ///  Completion of a conversion on ADC channel 2 will generate an interrupt.
    -                    ENABLE = 0x1,
    -                },
    -            },
    -            ///  Interrupt enable
    -            ADINTEN3: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Completion of a conversion on ADC channel 3 will not generate an interrupt.
    -                    DISABLE = 0x0,
    -                    ///  Completion of a conversion on ADC channel 3 will generate an interrupt.
    -                    ENABLE = 0x1,
    -                },
    -            },
    -            ///  Interrupt enable
    -            ADINTEN4: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Completion of a conversion on ADC channel 4 will not generate an interrupt.
    -                    DISABLE = 0x0,
    -                    ///  Completion of a conversion on ADC channel 4 will generate an interrupt.
    -                    ENABLE = 0x1,
    -                },
    -            },
    -            ///  Interrupt enable
    -            ADINTEN5: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Completion of a conversion on ADC channel 5 will not generate an interrupt.
    -                    DISABLE = 0x0,
    -                    ///  Completion of a conversion on ADC channel 5 will generate an interrupt.
    -                    ENABLE = 0x1,
    -                },
    -            },
    -            ///  Interrupt enable
    -            ADINTEN6: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Completion of a conversion on ADC channel 6 will not generate an interrupt.
    -                    DISABLE = 0x0,
    -                    ///  Completion of a conversion on ADC channel 6 will generate an interrupt.
    -                    ENABLE = 0x1,
    -                },
    -            },
    -            ///  Interrupt enable
    -            ADINTEN7: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Completion of a conversion on ADC channel 7 will not generate an interrupt.
    -                    DISABLE = 0x0,
    -                    ///  Completion of a conversion on ADC channel 7 will generate an interrupt.
    -                    ENABLE = 0x1,
    -                },
    -            },
    -            ///  Interrupt enable
    -            ADGINTEN: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Only the individual ADC channels enabled by ADINTEN7:0 will generate interrupts.
    -                    CHANNELS = 0x0,
    -                    ///  The global DONE flag in ADDR is enabled to generate an interrupt in addition to any individual ADC channels that are enabled to generate interrupts.
    -                    GLOBAL = 0x1,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u23,
    -        }),
    -        reserved48: [32]u8,
    -        ///  A/D Status Register. This register contains DONE and OVERRUN flags for all of the A/D channels, as well as the A/D interrupt/DMA flag.
    -        STAT: mmio.Mmio(packed struct(u32) {
    -            ///  This bit mirrors the DONE status flag from the result register for A/D channel 0.
    -            DONE0: u1,
    -            ///  This bit mirrors the DONE status flag from the result register for A/D channel 1.
    -            DONE1: u1,
    -            ///  This bit mirrors the DONE status flag from the result register for A/D channel 2.
    -            DONE2: u1,
    -            ///  This bit mirrors the DONE status flag from the result register for A/D channel 3.
    -            DONE3: u1,
    -            ///  This bit mirrors the DONE status flag from the result register for A/D channel 4.
    -            DONE4: u1,
    -            ///  This bit mirrors the DONE status flag from the result register for A/D channel 5.
    -            DONE5: u1,
    -            ///  This bit mirrors the DONE status flag from the result register for A/D channel 6.
    -            DONE6: u1,
    -            ///  This bit mirrors the DONE status flag from the result register for A/D channel 7.
    -            DONE7: u1,
    -            ///  This bit mirrors the OVERRRUN status flag from the result register for A/D channel 0.
    -            OVERRUN0: u1,
    -            ///  This bit mirrors the OVERRRUN status flag from the result register for A/D channel 1.
    -            OVERRUN1: u1,
    -            ///  This bit mirrors the OVERRRUN status flag from the result register for A/D channel 2.
    -            OVERRUN2: u1,
    -            ///  This bit mirrors the OVERRRUN status flag from the result register for A/D channel 3.
    -            OVERRUN3: u1,
    -            ///  This bit mirrors the OVERRRUN status flag from the result register for A/D channel 4.
    -            OVERRUN4: u1,
    -            ///  This bit mirrors the OVERRRUN status flag from the result register for A/D channel 5.
    -            OVERRUN5: u1,
    -            ///  This bit mirrors the OVERRRUN status flag from the result register for A/D channel 6.
    -            OVERRUN6: u1,
    -            ///  This bit mirrors the OVERRRUN status flag from the result register for A/D channel 7.
    -            OVERRUN7: u1,
    -            ///  This bit is the A/D interrupt flag. It is one when any of the individual A/D channel Done flags is asserted and enabled to contribute to the A/D interrupt via the ADINTEN register.
    -            ADINT: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u15,
    -        }),
    -        ///  ADC trim register.
    -        TRM: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u4,
    -            ///  Offset trim bits for ADC operation. Initialized by the boot code. Can be overwritten by the user.
    -            ADCOFFS: u4,
    -            ///  written-to by boot code. Can not be overwritten by the user. These bits are locked after boot code write.
    -            TRIM: u4,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u20,
    -        }),
    -    };
    -
    -    ///  CAN acceptance filter RAM
    -    pub const CANAFRAM = struct {};
    -
    -    ///  CAN controller acceptance filter
    -    pub const CANAF = extern struct {
    -        ///  Acceptance Filter Register
    -        AFMR: mmio.Mmio(packed struct(u32) {
    -            ///  if AccBP is 0, the Acceptance Filter is not operational. All Rx messages on all CAN buses are ignored.
    -            ACCOFF: u1,
    -            ///  All Rx messages are accepted on enabled CAN controllers. Software must set this bit before modifying the contents of any of the registers described below, and before modifying the contents of Lookup Table RAM in any way other than setting or clearing Disable bits in Standard Identifier entries. When both this bit and AccOff are 0, the Acceptance filter operates to screen received CAN Identifiers.
    -            ACCBP: u1,
    -            ///  FullCAN mode
    -            EFCAN: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Software must read all messages for all enabled IDs on all enabled CAN buses, from the receiving CAN controllers.
    -                    SOFTWARE_MUST_READ_A = 0x0,
    -                    ///  The Acceptance Filter itself will take care of receiving and storing messages for selected Standard ID values on selected CAN buses. See Section 21.16 FullCAN mode on page 576.
    -                    THE_ACCEPTANCE_FILTE = 0x1,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u29,
    -        }),
    -        ///  Standard Frame Individual Start Address Register
    -        SFF_SA: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u2,
    -            ///  The start address of the table of individual Standard Identifiers in AF Lookup RAM. If the table is empty, write the same value in this register and the SFF_GRP_sa register described below. For compatibility with possible future devices, write zeroes in bits 31:11 and 1:0 of this register. If the eFCAN bit in the AFMR is 1, this value also indicates the size of the table of Standard IDs which the Acceptance Filter will search and (if found) automatically store received messages in Acceptance Filter RAM.
    -            SFF_SA: u9,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u21,
    -        }),
    -        ///  Standard Frame Group Start Address Register
    -        SFF_GRP_SA: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u2,
    -            ///  The start address of the table of grouped Standard Identifiers in AF Lookup RAM. If the table is empty, write the same value in this register and the EFF_sa register described below. The largest value that should be written to this register is 0x800, when only the Standard Individual table is used, and the last word (address 0x7FC) in AF Lookup Table RAM is used. For compatibility with possible future devices, please write zeroes in bits 31:12 and 1:0 of this register.
    -            SFF_GRP_SA: u10,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u20,
    -        }),
    -        ///  Extended Frame Start Address Register
    -        EFF_SA: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u2,
    -            ///  The start address of the table of individual Extended Identifiers in AF Lookup RAM. If the table is empty, write the same value in this register and the EFF_GRP_sa register described below. The largest value that should be written to this register is 0x800, when both Extended Tables are empty and the last word (address 0x7FC) in AF Lookup Table RAM is used. For compatibility with possible future devices, please write zeroes in bits 31:11 and 1:0 of this register.
    -            EFF_SA: u9,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u21,
    -        }),
    -        ///  Extended Frame Group Start Address Register
    -        EFF_GRP_SA: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u2,
    -            ///  The start address of the table of grouped Extended Identifiers in AF Lookup RAM. If the table is empty, write the same value in this register and the ENDofTable register described below. The largest value that should be written to this register is 0x800, when this table is empty and the last word (address 0x7FC) in AF Lookup Table RAM is used. For compatibility with possible future devices, please write zeroes in bits 31:12 and 1:0 of this register.
    -            EFF_GRP_SA: u10,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u20,
    -        }),
    -        ///  End of AF Tables register
    -        ENDOFTABLE: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u2,
    -            ///  The address above the last active address in the last active AF table. For compatibility with possible future devices, please write zeroes in bits 31:12 and 1:0 of this register. If the eFCAN bit in the AFMR is 0, the largest value that should be written to this register is 0x800, which allows the last word (address 0x7FC) in AF Lookup Table RAM to be used. If the eFCAN bit in the AFMR is 1, this value marks the start of the area of Acceptance Filter RAM, into which the Acceptance Filter will automatically receive messages for selected IDs on selected CAN buses. In this case, the maximum value that should be written to this register is 0x800 minus 6 times the value in SFF_sa. This allows 12 bytes of message storage between this address and the end of Acceptance Filter RAM, for each Standard ID that is specified between the start of Acceptance Filter RAM, and the next active AF table.
    -            ENDOFTABLE: u10,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u20,
    -        }),
    -        ///  LUT Error Address register
    -        LUTERRAD: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u2,
    -            ///  It the LUT Error bit (below) is 1, this read-only field contains the address in AF Lookup Table RAM, at which the Acceptance Filter encountered an error in the content of the tables.
    -            LUTERRAD: u9,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u21,
    -        }),
    -        ///  LUT Error Register
    -        LUTERR: mmio.Mmio(packed struct(u32) {
    -            ///  This read-only bit is set to 1 if the Acceptance Filter encounters an error in the content of the tables in AF RAM. It is cleared when software reads the LUTerrAd register. This condition is ORed with the other CAN interrupts from the CAN controllers, to produce the request that is connected to the NVIC.
    -            LUTERR: u1,
    -            ///  Reserved, the value read from a reserved bit is not defined.
    -            RESERVED: u31,
    -        }),
    -        ///  FullCAN interrupt enable register
    -        FCANIE: mmio.Mmio(packed struct(u32) {
    -            ///  Global FullCAN Interrupt Enable. When 1, this interrupt is enabled.
    -            FCANIE: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u31,
    -        }),
    -        ///  FullCAN interrupt and capture register0
    -        FCANIC0: mmio.Mmio(packed struct(u32) {
    -            ///  FullCan Interrupt Pending 0 = FullCan Interrupt Pending bit 0. 1 = FullCan Interrupt Pending bit 1. ... 31 = FullCan Interrupt Pending bit 31.
    -            INTPND: u32,
    -        }),
    -        ///  FullCAN interrupt and capture register1
    -        FCANIC1: mmio.Mmio(packed struct(u32) {
    -            ///  FullCan Interrupt Pending bit 32. 0 = FullCan Interrupt Pending bit 32. 1 = FullCan Interrupt Pending bit 33. ... 31 = FullCan Interrupt Pending bit 63.
    -            IntPnd32: u32,
    -        }),
    -    };
    -
    -    ///  Central CAN controller
    -    pub const CCAN = extern struct {
    -        ///  CAN Central Transmit Status Register
    -        TXSR: mmio.Mmio(packed struct(u32) {
    -            ///  When 1, the CAN controller 1 is sending a message (same as TS in the CAN1GSR).
    -            TS1: u1,
    -            ///  When 1, the CAN controller 2 is sending a message (same as TS in the CAN2GSR)
    -            TS2: u1,
    -            ///  Reserved, the value read from a reserved bit is not defined.
    -            RESERVED: u6,
    -            ///  When 1, all 3 Tx Buffers of the CAN1 controller are available to the CPU (same as TBS in CAN1GSR).
    -            TBS1: u1,
    -            ///  When 1, all 3 Tx Buffers of the CAN2 controller are available to the CPU (same as TBS in CAN2GSR).
    -            TBS2: u1,
    -            ///  Reserved, the value read from a reserved bit is not defined.
    -            RESERVED: u6,
    -            ///  When 1, all requested transmissions have been completed successfully by the CAN1 controller (same as TCS in CAN1GSR).
    -            TCS1: u1,
    -            ///  When 1, all requested transmissions have been completed successfully by the CAN2 controller (same as TCS in CAN2GSR).
    -            TCS2: u1,
    -            ///  Reserved, the value read from a reserved bit is not defined.
    -            RESERVED: u14,
    -        }),
    -        ///  CAN Central Receive Status Register
    -        RXSR: mmio.Mmio(packed struct(u32) {
    -            ///  When 1, CAN1 is receiving a message (same as RS in CAN1GSR).
    -            RS1: u1,
    -            ///  When 1, CAN2 is receiving a message (same as RS in CAN2GSR).
    -            RS2: u1,
    -            ///  Reserved, the value read from a reserved bit is not defined.
    -            RESERVED: u6,
    -            ///  When 1, a received message is available in the CAN1 controller (same as RBS in CAN1GSR).
    -            RB1: u1,
    -            ///  When 1, a received message is available in the CAN2 controller (same as RBS in CAN2GSR).
    -            RB2: u1,
    -            ///  Reserved, the value read from a reserved bit is not defined.
    -            RESERVED: u6,
    -            ///  When 1, a message was lost because the preceding message to CAN1 controller was not read out quickly enough (same as DOS in CAN1GSR).
    -            DOS1: u1,
    -            ///  When 1, a message was lost because the preceding message to CAN2 controller was not read out quickly enough (same as DOS in CAN2GSR).
    -            DOS2: u1,
    -            ///  Reserved, the value read from a reserved bit is not defined.
    -            RESERVED: u14,
    -        }),
    -        ///  CAN Central Miscellaneous Register
    -        MSR: mmio.Mmio(packed struct(u32) {
    -            ///  When 1, one or both of the CAN1 Tx and Rx Error Counters has reached the limit set in the CAN1EWL register (same as ES in CAN1GSR)
    -            E1: u1,
    -            ///  When 1, one or both of the CAN2 Tx and Rx Error Counters has reached the limit set in the CAN2EWL register (same as ES in CAN2GSR)
    -            E2: u1,
    -            ///  Reserved, the value read from a reserved bit is not defined.
    -            RESERVED: u6,
    -            ///  When 1, the CAN1 controller is currently involved in bus activities (same as BS in CAN1GSR).
    -            BS1: u1,
    -            ///  When 1, the CAN2 controller is currently involved in bus activities (same as BS in CAN2GSR).
    -            BS2: u1,
    -            ///  Reserved, the value read from a reserved bit is not defined.
    -            RESERVED: u22,
    -        }),
    -    };
    -
    -    ///  CAN1 controller
    -    pub const CAN1 = extern struct {
    -        ///  Controls the operating mode of the CAN Controller.
    -        MOD: mmio.Mmio(packed struct(u32) {
    -            ///  Reset Mode.
    -            RM: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal.The CAN Controller is in the Operating Mode, and certain registers can not be written.
    -                    NORMAL_THE_CAN_CONTR = 0x0,
    -                    ///  Reset. CAN operation is disabled, writable registers can be written and the current transmission/reception of a message is aborted.
    -                    RESET_CAN_OPERATION = 0x1,
    -                },
    -            },
    -            ///  Listen Only Mode.
    -            LOM: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. The CAN controller acknowledges a successfully received message on the CAN bus. The error counters are stopped at the current value.
    -                    NORMAL_THE_CAN_CONT = 0x0,
    -                    ///  Listen only. The controller gives no acknowledgment, even if a message is successfully received. Messages cannot be sent, and the controller operates in error passive mode. This mode is intended for software bit rate detection and hot plugging.
    -                    LISTEN_ONLY_THE_CON = 0x1,
    -                },
    -            },
    -            ///  Self Test Mode.
    -            STM: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Normal. A transmitted message must be acknowledged to be considered successful.
    -                    NORMAL_A_TRANSMITTE = 0x0,
    -                    ///  Self test. The controller will consider a Tx message successful even if there is no acknowledgment received. In this mode a full node test is possible without any other active node on the bus using the SRR bit in CANxCMR.
    -                    SELF_TEST_THE_CONTR = 0x1,
    -                },
    -            },
    -            ///  Transmit Priority Mode.
    -            TPM: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  CAN ID. The transmit priority for 3 Transmit Buffers depends on the CAN Identifier.
    -                    CAN_ID_THE_TRANSMIT = 0x0,
    -                    ///  Local priority. The transmit priority for 3 Transmit Buffers depends on the contents of the Tx Priority register within the Transmit Buffer.
    -                    LOCAL_PRIORITY_THE_ = 0x1,
    -                },
    -            },
    -            ///  Sleep Mode.
    -            SM: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Wake-up. Normal operation.
    -                    WAKE_UP_NORMAL_OPER = 0x0,
    -                    ///  Sleep. The CAN controller enters Sleep Mode if no CAN interrupt is pending and there is no bus activity. See the Sleep Mode description Section 21.8.2 on page 565.
    -                    SLEEP_THE_CAN_CONTR = 0x1,
    -                },
    -            },
    -            ///  Receive Polarity Mode.
    -            RPM: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Low active. RD input is active Low (dominant bit = 0).
    -                    LOW_ACTIVE_RD_INPUT = 0x0,
    -                    ///  High active. RD input is active High (dominant bit = 1) -- reverse polarity.
    -                    HIGH_ACTIVE_RD_INPU = 0x1,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u1,
    -            ///  Test Mode.
    -            TM: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled. Normal operation.
    -                    DISABLED_NORMAL_OPE = 0x0,
    -                    ///  Enabled. The TD pin will reflect the bit, detected on RD pin, with the next positive edge of the system clock.
    -                    ENABLED_THE_TD_PIN_ = 0x1,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u24,
    -        }),
    -        ///  Command bits that affect the state of the CAN Controller
    -        CMR: mmio.Mmio(packed struct(u32) {
    -            ///  Transmission Request.
    -            TR: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Absent.No transmission request.
    -                    ABSENT_NO_TRANSMISSI = 0x0,
    -                    ///  Present. The message, previously written to the CANxTFI, CANxTID, and optionally the CANxTDA and CANxTDB registers, is queued for transmission from the selected Transmit Buffer. If at two or all three of STB1, STB2 and STB3 bits are selected when TR=1 is written, Transmit Buffer will be selected based on the chosen priority scheme (for details see Section 21.5.3 Transmit Buffers (TXB))
    -                    PRESENT_THE_MESSAGE = 0x1,
    -                },
    -            },
    -            ///  Abort Transmission.
    -            AT: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  No action. Do not abort the transmission.
    -                    NO_ACTION_DO_NOT_AB = 0x0,
    -                    ///  Present. if not already in progress, a pending Transmission Request for the selected Transmit Buffer is cancelled.
    -                    PRESENT_IF_NOT_ALRE = 0x1,
    -                },
    -            },
    -            ///  Release Receive Buffer.
    -            RRB: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  No action. Do not release the receive buffer.
    -                    NO_ACTION_DO_NOT_RE = 0x0,
    -                    ///  Released. The information in the Receive Buffer (consisting of CANxRFS, CANxRID, and if applicable the CANxRDA and CANxRDB registers) is released, and becomes eligible for replacement by the next received frame. If the next received frame is not available, writing this command clears the RBS bit in the Status Register(s).
    -                    RELEASED_THE_INFORM = 0x1,
    -                },
    -            },
    -            ///  Clear Data Overrun.
    -            CDO: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  No action. Do not clear the data overrun bit.
    -                    NO_ACTION_DO_NOT_CL = 0x0,
    -                    ///  Clear. The Data Overrun bit in Status Register(s) is cleared.
    -                    CLEAR_THE_DATA_OVER = 0x1,
    -                },
    -            },
    -            ///  Self Reception Request.
    -            SRR: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Absent. No self reception request.
    -                    ABSENT_NO_SELF_RECE = 0x0,
    -                    ///  Present. The message, previously written to the CANxTFS, CANxTID, and optionally the CANxTDA and CANxTDB registers, is queued for transmission from the selected Transmit Buffer and received simultaneously. This differs from the TR bit above in that the receiver is not disabled during the transmission, so that it receives the message if its Identifier is recognized by the Acceptance Filter.
    -                    PRESENT_THE_MESSAGE = 0x1,
    -                },
    -            },
    -            ///  Select Tx Buffer 1.
    -            STB1: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Not selected. Tx Buffer 1 is not selected for transmission.
    -                    NOT_SELECTED_TX_BUF = 0x0,
    -                    ///  Selected. Tx Buffer 1 is selected for transmission.
    -                    SELECTED_TX_BUFFER_ = 0x1,
    -                },
    -            },
    -            ///  Select Tx Buffer 2.
    -            STB2: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Not selected. Tx Buffer 2 is not selected for transmission.
    -                    NOT_SELECTED_TX_BUF = 0x0,
    -                    ///  Selected. Tx Buffer 2 is selected for transmission.
    -                    SELECTED_TX_BUFFER_ = 0x1,
    -                },
    -            },
    -            ///  Select Tx Buffer 3.
    -            STB3: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Not selected. Tx Buffer 3 is not selected for transmission.
    -                    NOT_SELECTED_TX_BUF = 0x0,
    -                    ///  Selected. Tx Buffer 3 is selected for transmission.
    -                    SELECTED_TX_BUFFER_ = 0x1,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u24,
    -        }),
    -        ///  Global Controller Status and Error Counters. The error counters can only be written when RM in CANMOD is 1.
    -        GSR: mmio.Mmio(packed struct(u32) {
    -            ///  Receive Buffer Status. After reading all messages and releasing their memory space with the command 'Release Receive Buffer,' this bit is cleared.
    -            RBS: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Empty. No message is available.
    -                    EMPTY_NO_MESSAGE_IS = 0x0,
    -                    ///  Full. At least one complete message is received by the Double Receive Buffer and available in the CANxRFS, CANxRID, and if applicable the CANxRDA and CANxRDB registers. This bit is cleared by the Release Receive Buffer command in CANxCMR, if no subsequent received message is available.
    -                    FULL_AT_LEAST_ONE_C = 0x1,
    -                },
    -            },
    -            ///  Data Overrun Status. If there is not enough space to store the message within the Receive Buffer, that message is dropped and the Data Overrun condition is signalled to the CPU in the moment this message becomes valid. If this message is not completed successfully (e.g. because of an error), no overrun condition is signalled.
    -            DOS: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Absent. No data overrun has occurred since the last Clear Data Overrun command was given/written to CANxCMR (or since Reset).
    -                    ABSENT_NO_DATA_OVER = 0x0,
    -                    ///  Overrun. A message was lost because the preceding message to this CAN controller was not read and released quickly enough (there was not enough space for a new message in the Double Receive Buffer).
    -                    OVERRUN_A_MESSAGE_W = 0x1,
    -                },
    -            },
    -            ///  Transmit Buffer Status.
    -            TBS: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Locked. At least one of the Transmit Buffers is not available for the CPU, i.e. at least one previously queued message for this CAN controller has not yet been sent, and therefore software should not write to the CANxTFI, CANxTID, CANxTDA, nor CANxTDB registers of that (those) Tx buffer(s).
    -                    LOCKED_AT_LEAST_ONE = 0x0,
    -                    ///  Released. All three Transmit Buffers are available for the CPU. No transmit message is pending for this CAN controller (in any of the 3 Tx buffers), and software may write to any of the CANxTFI, CANxTID, CANxTDA, and CANxTDB registers.
    -                    RELEASED_ALL_THREE_ = 0x1,
    -                },
    -            },
    -            ///  Transmit Complete Status. The Transmission Complete Status bit is set '0' (incomplete) whenever the Transmission Request bit or the Self Reception Request bit is set '1' at least for one of the three Transmit Buffers. The Transmission Complete Status bit will remain '0' until all messages are transmitted successfully.
    -            TCS: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Incomplete. At least one requested transmission has not been successfully completed yet.
    -                    INCOMPLETE_AT_LEAST = 0x0,
    -                    ///  Complete. All requested transmission(s) has (have) been successfully completed.
    -                    COMPLETE_ALL_REQUES = 0x1,
    -                },
    -            },
    -            ///  Receive Status. If both the Receive Status and the Transmit Status bits are '0' (idle), the CAN-Bus is idle. If both bits are set, the controller is waiting to become idle again. After hardware reset 11 consecutive recessive bits have to be detected until idle status is reached. After Bus-off this will take 128 times of 11 consecutive recessive bits.
    -            RS: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Idle. The CAN controller is idle.
    -                    IDLE_THE_CAN_CONTRO = 0x0,
    -                    ///  Receive. The CAN controller is receiving a message.
    -                    RECEIVE_THE_CAN_CON = 0x1,
    -                },
    -            },
    -            ///  Transmit Status. If both the Receive Status and the Transmit Status bits are '0' (idle), the CAN-Bus is idle. If both bits are set, the controller is waiting to become idle again. After hardware reset 11 consecutive recessive bits have to be detected until idle status is reached. After Bus-off this will take 128 times of 11 consecutive recessive bits.
    -            TS: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Idle. The CAN controller is idle.
    -                    IDLE_THE_CAN_CONTRO = 0x0,
    -                    ///  Transmit. The CAN controller is sending a message.
    -                    TRANSMIT_THE_CAN_CO = 0x1,
    -                },
    -            },
    -            ///  Error Status. Errors detected during reception or transmission will effect the error counters according to the CAN specification. The Error Status bit is set when at least one of the error counters has reached or exceeded the Error Warning Limit. An Error Warning Interrupt is generated, if enabled. The default value of the Error Warning Limit after hardware reset is 96 decimal, see also Section 21.7.7 CAN Error Warning Limit register (CAN1EWL - 0x4004 4018, CAN2EWL - 0x4004 8018).
    -            ES: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  OK. Both error counters are below the Error Warning Limit.
    -                    OK_BOTH_ERROR_COUNT = 0x0,
    -                    ///  Error. One or both of the Transmit and Receive Error Counters has reached the limit set in the Error Warning Limit register.
    -                    ERROR_ONE_OR_BOTH_O = 0x1,
    -                },
    -            },
    -            ///  Bus Status. Mode bit '1' (present) and an Error Warning Interrupt is generated, if enabled. Afterwards the Transmit Error Counter is set to '127', and the Receive Error Counter is cleared. It will stay in this mode until the CPU clears the Reset Mode bit. Once this is completed the CAN Controller will wait the minimum protocol-defined time (128 occurrences of the Bus-Free signal) counting down the Transmit Error Counter. After that, the Bus Status bit is cleared (Bus-On), the Error Status bit is set '0' (ok), the Error Counters are reset, and an Error Warning Interrupt is generated, if enabled. Reading the TX Error Counter during this time gives information about the status of the Bus-Off recovery.
    -            BS: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Bus-on. The CAN Controller is involved in bus activities
    -                    BUS_ON_THE_CAN_CONT = 0x0,
    -                    ///  Bus-off. The CAN controller is currently not involved/prohibited from bus activity because the Transmit Error Counter reached its limiting value of 255.
    -                    BUS_OFF_THE_CAN_CON = 0x1,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u8,
    -            ///  The current value of the Rx Error Counter (an 8-bit value).
    -            RXERR: u8,
    -            ///  The current value of the Tx Error Counter (an 8-bit value).
    -            TXERR: u8,
    -        }),
    -        ///  Interrupt status, Arbitration Lost Capture, Error Code Capture
    -        ICR: mmio.Mmio(packed struct(u32) {
    -            ///  Receive Interrupt. This bit is set whenever the RBS bit in CANxSR and the RIE bit in CANxIER are both 1, indicating that a new message was received and stored in the Receive Buffer. The Receive Interrupt Bit is not cleared upon a read access to the Interrupt Register. Giving the Command Release Receive Buffer will clear RI temporarily. If there is another message available within the Receive Buffer after the release command, RI is set again. Otherwise RI remains cleared.
    -            RI: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Reset
    -                    RESET = 0x0,
    -                    ///  Set
    -                    SET = 0x1,
    -                },
    -            },
    -            ///  Transmit Interrupt 1. This bit is set when the TBS1 bit in CANxSR goes from 0 to 1 (whenever a message out of TXB1 was successfully transmitted or aborted), indicating that Transmit buffer 1 is available, and the TIE1 bit in CANxIER is 1.
    -            TI1: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Reset
    -                    RESET = 0x0,
    -                    ///  Set
    -                    SET = 0x1,
    -                },
    -            },
    -            ///  Error Warning Interrupt. This bit is set on every change (set or clear) of either the Error Status or Bus Status bit in CANxSR and the EIE bit bit is set within the Interrupt Enable Register at the time of the change.
    -            EI: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Reset
    -                    RESET = 0x0,
    -                    ///  Set
    -                    SET = 0x1,
    -                },
    -            },
    -            ///  Data Overrun Interrupt. This bit is set when the DOS bit in CANxSR goes from 0 to 1 and the DOIE bit in CANxIER is 1.
    -            DOI: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Reset
    -                    RESET = 0x0,
    -                    ///  Set
    -                    SET = 0x1,
    -                },
    -            },
    -            ///  Wake-Up Interrupt. This bit is set if the CAN controller is sleeping and bus activity is detected and the WUIE bit in CANxIER is 1. A Wake-Up Interrupt is also generated if the CPU tries to set the Sleep bit while the CAN controller is involved in bus activities or a CAN Interrupt is pending. The WUI flag can also get asserted when the according enable bit WUIE is not set. In this case a Wake-Up Interrupt does not get asserted.
    -            WUI: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Reset
    -                    RESET = 0x0,
    -                    ///  Set
    -                    SET = 0x1,
    -                },
    -            },
    -            ///  Error Passive Interrupt. This bit is set if the EPIE bit in CANxIER is 1, and the CAN controller switches between Error Passive and Error Active mode in either direction. This is the case when the CAN Controller has reached the Error Passive Status (at least one error counter exceeds the CAN protocol defined level of 127) or if the CAN Controller is in Error Passive Status and enters the Error Active Status again.
    -            EPI: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Reset
    -                    RESET = 0x0,
    -                    ///  Set
    -                    SET = 0x1,
    -                },
    -            },
    -            ///  Arbitration Lost Interrupt. This bit is set if the ALIE bit in CANxIER is 1, and the CAN controller loses arbitration while attempting to transmit. In this case the CAN node becomes a receiver.
    -            ALI: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Reset
    -                    RESET = 0x0,
    -                    ///  Set
    -                    SET = 0x1,
    -                },
    -            },
    -            ///  Bus Error Interrupt -- this bit is set if the BEIE bit in CANxIER is 1, and the CAN controller detects an error on the bus.
    -            BEI: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Reset
    -                    RESET = 0x0,
    -                    ///  Set
    -                    SET = 0x1,
    -                },
    -            },
    -            ///  ID Ready Interrupt -- this bit is set if the IDIE bit in CANxIER is 1, and a CAN Identifier has been received (a message was successfully transmitted or aborted). This bit is set whenever a message was successfully transmitted or aborted and the IDIE bit is set in the IER register.
    -            IDI: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Reset
    -                    RESET = 0x0,
    -                    ///  Set
    -                    SET = 0x1,
    -                },
    -            },
    -            ///  Transmit Interrupt 2. This bit is set when the TBS2 bit in CANxSR goes from 0 to 1 (whenever a message out of TXB2 was successfully transmitted or aborted), indicating that Transmit buffer 2 is available, and the TIE2 bit in CANxIER is 1.
    -            TI2: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Reset
    -                    RESET = 0x0,
    -                    ///  Set
    -                    SET = 0x1,
    -                },
    -            },
    -            ///  Transmit Interrupt 3. This bit is set when the TBS3 bit in CANxSR goes from 0 to 1 (whenever a message out of TXB3 was successfully transmitted or aborted), indicating that Transmit buffer 3 is available, and the TIE3 bit in CANxIER is 1.
    -            TI3: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Reset
    -                    RESET = 0x0,
    -                    ///  Set
    -                    SET = 0x1,
    -                },
    -            },
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u5,
    -            ///  Error Code Capture: when the CAN controller detects a bus error, the location of the error within the frame is captured in this field. The value reflects an internal state variable, and as a result is not very linear: 00011 = Start of Frame 00010 = ID28 ... ID21 00110 = ID20 ... ID18 00100 = SRTR Bit 00101 = IDE bit 00111 = ID17 ... 13 01111 = ID12 ... ID5 01110 = ID4 ... ID0 01100 = RTR Bit 01101 = Reserved Bit 1 01001 = Reserved Bit 0 01011 = Data Length Code 01010 = Data Field 01000 = CRC Sequence 11000 = CRC Delimiter 11001 = Acknowledge Slot 11011 = Acknowledge Delimiter 11010 = End of Frame 10010 = Intermission Whenever a bus error occurs, the corresponding bus error interrupt is forced, if enabled. At the same time, the current position of the Bit Stream Processor is captured into the Error Code Capture Register. The content within this register is fixed until the user software has read out its content once. From now on, the capture mechanism is activated again, i.e. reading the CANxICR enables another Bus Error Interrupt.
    -            ERRBIT4_0: u5,
    -            ///  When the CAN controller detects a bus error, the direction of the current bit is captured in this bit.
    -            ERRDIR: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Error occurred during transmitting.
    -                    ERROR_OCCURRED_DURIN = 0x0,
    -                    ///  Error occurred during receiving.
    -                    ERROR_OCCURRED_DURIN = 0x1,
    -                },
    -            },
    -            ///  When the CAN controller detects a bus error, the type of error is captured in this field:
    -            ERRC1_0: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Bit error
    -                    BIT_ERROR = 0x0,
    -                    ///  Form error
    -                    FORM_ERROR = 0x1,
    -                    ///  Stuff error
    -                    STUFF_ERROR = 0x2,
    -                    ///  Other error
    -                    OTHER_ERROR = 0x3,
    -                },
    -            },
    -            ///  Each time arbitration is lost while trying to send on the CAN, the bit number within the frame is captured into this field. After the content of ALCBIT is read, the ALI bit is cleared and a new Arbitration Lost interrupt can occur. 00 = arbitration lost in the first bit (MS) of identifier ... 11 = arbitration lost in SRTS bit (RTR bit for standard frame messages) 12 = arbitration lost in IDE bit 13 = arbitration lost in 12th bit of identifier (extended frame only) ... 30 = arbitration lost in last bit of identifier (extended frame only) 31 = arbitration lost in RTR bit (extended frame only) On arbitration lost, the corresponding arbitration lost interrupt is forced, if enabled. At that time, the current bit position of the Bit Stream Processor is captured into the Arbitration Lost Capture Register. The content within this register is fixed until the user application has read out its contents once. From now on, the capture mechanism is activated again.
    -            ALCBIT: u8,
    -        }),
    -        ///  Interrupt Enable
    -        IER: mmio.Mmio(packed struct(u32) {
    -            ///  Receiver Interrupt Enable. When the Receive Buffer Status is 'full', the CAN Controller requests the respective interrupt.
    -            RIE: u1,
    -            ///  Transmit Interrupt Enable for Buffer1. When a message has been successfully transmitted out of TXB1 or Transmit Buffer 1 is accessible again (e.g. after an Abort Transmission command), the CAN Controller requests the respective interrupt.
    -            TIE1: u1,
    -            ///  Error Warning Interrupt Enable. If the Error or Bus Status change (see Status Register), the CAN Controller requests the respective interrupt.
    -            EIE: u1,
    -            ///  Data Overrun Interrupt Enable. If the Data Overrun Status bit is set (see Status Register), the CAN Controller requests the respective interrupt.
    -            DOIE: u1,
    -            ///  Wake-Up Interrupt Enable. If the sleeping CAN controller wakes up, the respective interrupt is requested.
    -            WUIE: u1,
    -            ///  Error Passive Interrupt Enable. If the error status of the CAN Controller changes from error active to error passive or vice versa, the respective interrupt is requested.
    -            EPIE: u1,
    -            ///  Arbitration Lost Interrupt Enable. If the CAN Controller has lost arbitration, the respective interrupt is requested.
    -            ALIE: u1,
    -            ///  Bus Error Interrupt Enable. If a bus error has been detected, the CAN Controller requests the respective interrupt.
    -            BEIE: u1,
    -            ///  ID Ready Interrupt Enable. When a CAN identifier has been received, the CAN Controller requests the respective interrupt.
    -            IDIE: u1,
    -            ///  Transmit Interrupt Enable for Buffer2. When a message has been successfully transmitted out of TXB2 or Transmit Buffer 2 is accessible again (e.g. after an Abort Transmission command), the CAN Controller requests the respective interrupt.
    -            TIE2: u1,
    -            ///  Transmit Interrupt Enable for Buffer3. When a message has been successfully transmitted out of TXB3 or Transmit Buffer 3 is accessible again (e.g. after an Abort Transmission command), the CAN Controller requests the respective interrupt.
    -            TIE3: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u21,
    -        }),
    -        ///  Bus Timing. Can only be written when RM in CANMOD is 1.
    -        BTR: mmio.Mmio(packed struct(u32) {
    -            ///  Baud Rate Prescaler. The APB clock is divided by (this value plus one) to produce the CAN clock.
    -            BRP: u10,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u4,
    -            ///  The Synchronization Jump Width is (this value plus one) CAN clocks.
    -            SJW: u2,
    -            ///  The delay from the nominal Sync point to the sample point is (this value plus one) CAN clocks.
    -            TESG1: u4,
    -            ///  The delay from the sample point to the next nominal sync point is (this value plus one) CAN clocks. The nominal CAN bit time is (this value plus the value in TSEG1 plus 3) CAN clocks.
    -            TESG2: u3,
    -            ///  Sampling
    -            SAM: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  The bus is sampled once (recommended for high speed buses)
    -                    THE_BUS_IS_SAMPLED_O = 0x0,
    -                    ///  The bus is sampled 3 times (recommended for low to medium speed buses to filter spikes on the bus-line)
    -                    THE_BUS_IS_SAMPLED_3 = 0x1,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u8,
    -        }),
    -        ///  Error Warning Limit. Can only be written when RM in CANMOD is 1.
    -        EWL: mmio.Mmio(packed struct(u32) {
    -            ///  During CAN operation, this value is compared to both the Tx and Rx Error Counters. If either of these counter matches this value, the Error Status (ES) bit in CANSR is set.
    -            EWL: u8,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u24,
    -        }),
    -        ///  Status Register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Receive Buffer Status. This bit is identical to the RBS bit in the CANxGSR.
    -            RBS_1: u1,
    -            ///  Data Overrun Status. This bit is identical to the DOS bit in the CANxGSR.
    -            DOS_1: u1,
    -            ///  Transmit Buffer Status 1.
    -            TBS1_1: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Locked. Software cannot access the Tx Buffer 1 nor write to the corresponding CANxTFI, CANxTID, CANxTDA, and CANxTDB registers because a message is either waiting for transmission or is in transmitting process.
    -                    LOCKED_SOFTWARE_CAN = 0x0,
    -                    ///  Released. Software may write a message into the Transmit Buffer 1 and its CANxTFI, CANxTID, CANxTDA, and CANxTDB registers.
    -                    RELEASED_SOFTWARE_M = 0x1,
    -                },
    -            },
    -            ///  Transmission Complete Status.
    -            TCS1_1: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Incomplete. The previously requested transmission for Tx Buffer 1 is not complete.
    -                    INCOMPLETE_THE_PREV = 0x0,
    -                    ///  Complete. The previously requested transmission for Tx Buffer 1 has been successfully completed.
    -                    COMPLETE_THE_PREVIO = 0x1,
    -                },
    -            },
    -            ///  Receive Status. This bit is identical to the RS bit in the GSR.
    -            RS_1: u1,
    -            ///  Transmit Status 1.
    -            TS1_1: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Idle. There is no transmission from Tx Buffer 1.
    -                    IDLE_THERE_IS_NO_TR = 0x0,
    -                    ///  Transmit. The CAN Controller is transmitting a message from Tx Buffer 1.
    -                    TRANSMIT_THE_CAN_CO = 0x1,
    -                },
    -            },
    -            ///  Error Status. This bit is identical to the ES bit in the CANxGSR.
    -            ES_1: u1,
    -            ///  Bus Status. This bit is identical to the BS bit in the CANxGSR.
    -            BS_1: u1,
    -            ///  Receive Buffer Status. This bit is identical to the RBS bit in the CANxGSR.
    -            RBS_2: u1,
    -            ///  Data Overrun Status. This bit is identical to the DOS bit in the CANxGSR.
    -            DOS_2: u1,
    -            ///  Transmit Buffer Status 2.
    -            TBS2_2: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Locked. Software cannot access the Tx Buffer 2 nor write to the corresponding CANxTFI, CANxTID, CANxTDA, and CANxTDB registers because a message is either waiting for transmission or is in transmitting process.
    -                    LOCKED_SOFTWARE_CAN = 0x0,
    -                    ///  Released. Software may write a message into the Transmit Buffer 2 and its CANxTFI, CANxTID, CANxTDA, and CANxTDB registers.
    -                    RELEASED_SOFTWARE_M = 0x1,
    -                },
    -            },
    -            ///  Transmission Complete Status.
    -            TCS2_2: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Incomplete. The previously requested transmission for Tx Buffer 2 is not complete.
    -                    INCOMPLETE_THE_PREV = 0x0,
    -                    ///  Complete. The previously requested transmission for Tx Buffer 2 has been successfully completed.
    -                    COMPLETE_THE_PREVIO = 0x1,
    -                },
    -            },
    -            ///  Receive Status. This bit is identical to the RS bit in the GSR.
    -            RS_2: u1,
    -            ///  Transmit Status 2.
    -            TS2_2: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Idle. There is no transmission from Tx Buffer 2.
    -                    IDLE_THERE_IS_NO_TR = 0x0,
    -                    ///  Transmit. The CAN Controller is transmitting a message from Tx Buffer 2.
    -                    TRANSMIT_THE_CAN_CO = 0x1,
    -                },
    -            },
    -            ///  Error Status. This bit is identical to the ES bit in the CANxGSR.
    -            ES_2: u1,
    -            ///  Bus Status. This bit is identical to the BS bit in the CANxGSR.
    -            BS_2: u1,
    -            ///  Receive Buffer Status. This bit is identical to the RBS bit in the CANxGSR.
    -            RBS_3: u1,
    -            ///  Data Overrun Status. This bit is identical to the DOS bit in the CANxGSR.
    -            DOS_3: u1,
    -            ///  Transmit Buffer Status 3.
    -            TBS3_3: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Locked. Software cannot access the Tx Buffer 3 nor write to the corresponding CANxTFI, CANxTID, CANxTDA, and CANxTDB registers because a message is either waiting for transmission or is in transmitting process.
    -                    LOCKED_SOFTWARE_CAN = 0x0,
    -                    ///  Released. Software may write a message into the Transmit Buffer 3 and its CANxTFI, CANxTID, CANxTDA, and CANxTDB registers.
    -                    RELEASED_SOFTWARE_M = 0x1,
    -                },
    -            },
    -            ///  Transmission Complete Status.
    -            TCS3_3: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Incomplete. The previously requested transmission for Tx Buffer 3 is not complete.
    -                    INCOMPLETE_THE_PREV = 0x0,
    -                    ///  Complete. The previously requested transmission for Tx Buffer 3 has been successfully completed.
    -                    COMPLETE_THE_PREVIO = 0x1,
    -                },
    -            },
    -            ///  Receive Status. This bit is identical to the RS bit in the GSR.
    -            RS_3: u1,
    -            ///  Transmit Status 3.
    -            TS3_3: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Idle. There is no transmission from Tx Buffer 3.
    -                    IDLE_THERE_IS_NO_TR = 0x0,
    -                    ///  Transmit. The CAN Controller is transmitting a message from Tx Buffer 3.
    -                    TRANSMIT_THE_CAN_CO = 0x1,
    -                },
    -            },
    -            ///  Error Status. This bit is identical to the ES bit in the CANxGSR.
    -            ES_3: u1,
    -            ///  Bus Status. This bit is identical to the BS bit in the CANxGSR.
    -            BS_3: u1,
    -            ///  Reserved, the value read from a reserved bit is not defined.
    -            RESERVED: u8,
    -        }),
    -        ///  Receive frame status. Can only be written when RM in CANMOD is 1.
    -        RFS: mmio.Mmio(packed struct(u32) {
    -            ///  ID Index. If the BP bit (below) is 0, this value is the zero-based number of the Lookup Table RAM entry at which the Acceptance Filter matched the received Identifier. Disabled entries in the Standard tables are included in this numbering, but will not be matched. See Section 21.17 Examples of acceptance filter tables and ID index values on page 587 for examples of ID Index values.
    -            IDINDEX: u10,
    -            ///  If this bit is 1, the current message was received in AF Bypass mode, and the ID Index field (above) is meaningless.
    -            BP: u1,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u5,
    -            ///  The field contains the Data Length Code (DLC) field of the current received message. When RTR = 0, this is related to the number of data bytes available in the CANRDA and CANRDB registers as follows: 0000-0111 = 0 to 7 bytes1000-1111 = 8 bytes With RTR = 1, this value indicates the number of data bytes requested to be sent back, with the same encoding.
    -            DLC: u4,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u10,
    -            ///  This bit contains the Remote Transmission Request bit of the current received message. 0 indicates a Data Frame, in which (if DLC is non-zero) data can be read from the CANRDA and possibly the CANRDB registers. 1 indicates a Remote frame, in which case the DLC value identifies the number of data bytes requested to be sent using the same Identifier.
    -            RTR: u1,
    -            ///  A 0 in this bit indicates that the current received message included an 11-bit Identifier, while a 1 indicates a 29-bit Identifier. This affects the contents of the CANid register described below.
    -            FF: u1,
    -        }),
    -        ///  Received Identifier. Can only be written when RM in CANMOD is 1.
    -        RID: mmio.Mmio(packed struct(u32) {
    -            ///  The 11-bit Identifier field of the current received message. In CAN 2.0A, these bits are called ID10-0, while in CAN 2.0B they're called ID29-18.
    -            ID: u11,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u21,
    -        }),
    -        ///  Received data bytes 1-4. Can only be written when RM in CANMOD is 1.
    -        RDA: mmio.Mmio(packed struct(u32) {
    -            ///  Data 1. If the DLC field in CANRFS >= 0001, this contains the first Data byte of the current received message.
    -            DATA1: u8,
    -            ///  Data 2. If the DLC field in CANRFS >= 0010, this contains the first Data byte of the current received message.
    -            DATA2: u8,
    -            ///  Data 3. If the DLC field in CANRFS >= 0011, this contains the first Data byte of the current received message.
    -            DATA3: u8,
    -            ///  Data 4. If the DLC field in CANRFS >= 0100, this contains the first Data byte of the current received message.
    -            DATA4: u8,
    -        }),
    -        ///  Received data bytes 5-8. Can only be written when RM in CANMOD is 1.
    -        RDB: mmio.Mmio(packed struct(u32) {
    -            ///  Data 5. If the DLC field in CANRFS >= 0101, this contains the first Data byte of the current received message.
    -            DATA5: u8,
    -            ///  Data 6. If the DLC field in CANRFS >= 0110, this contains the first Data byte of the current received message.
    -            DATA6: u8,
    -            ///  Data 7. If the DLC field in CANRFS >= 0111, this contains the first Data byte of the current received message.
    -            DATA7: u8,
    -            ///  Data 8. If the DLC field in CANRFS >= 1000, this contains the first Data byte of the current received message.
    -            DATA8: u8,
    -        }),
    -    };
    -
    -    ///  USB device/host/OTG controller
    -    pub const USB = extern struct {
    -        reserved220: [220]u8,
    -        ///  USB Receive Packet Length
    -        RXPLEN: mmio.Mmio(packed struct(u32) {
    -            ///  The remaining number of bytes to be read from the currently selected endpoint's buffer. When this field decrements to 0, the RxENDPKT bit will be set in USBDevIntSt.
    -            PKT_LNGTH: u10,
    -            ///  Data valid. This bit is useful for isochronous endpoints. Non-isochronous endpoints do not raise an interrupt when an erroneous data packet is received. But invalid data packet can be produced with a bus reset. For isochronous endpoints, data transfer will happen even if an erroneous packet is received. In this case DV bit will not be set for the packet.
    -            DV: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Data is invalid.
    -                    DATA_IS_INVALID_ = 0x0,
    -                    ///  Data is valid.
    -                    DATA_IS_VALID_ = 0x1,
    -                },
    -            },
    -            ///  The PKT_LNGTH field is valid and the packet is ready for reading.
    -            PKT_RDY: u1,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u20,
    -        }),
    -        reserved256: [32]u8,
    -        ///  OTG Interrupt Status
    -        INTST: mmio.Mmio(packed struct(u32) {
    -            ///  Timer time-out.
    -            TMR: u1,
    -            ///  Remove pull-up. This bit is set by hardware to indicate that software needs to disable the D+ pull-up resistor.
    -            REMOVE_PU: u1,
    -            ///  HNP failed. This bit is set by hardware to indicate that the HNP switching has failed.
    -            HNP_FAILURE: u1,
    -            ///  HNP succeeded. This bit is set by hardware to indicate that the HNP switching has succeeded.
    -            HNP_SUCCESS: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u28,
    -        }),
    -        ///  OTG Interrupt Enable
    -        INTEN: mmio.Mmio(packed struct(u32) {
    -            ///  1 = enable the corresponding bit in the IntSt register.
    -            TMR_EN: u1,
    -            ///  1 = enable the corresponding bit in the IntSt register.
    -            REMOVE_PU_EN: u1,
    -            ///  1 = enable the corresponding bit in the IntSt register.
    -            HNP_FAILURE_EN: u1,
    -            ///  1 = enable the corresponding bit in the IntSt register.
    -            HNP_SUCCES_EN: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u28,
    -        }),
    -        ///  OTG Interrupt Set
    -        INTSET: mmio.Mmio(packed struct(u32) {
    -            ///  0 = no effect. 1 = set the corresponding bit in the IntSt register.
    -            TMR_SET: u1,
    -            ///  0 = no effect. 1 = set the corresponding bit in the IntSt register.
    -            REMOVE_PU_SET: u1,
    -            ///  0 = no effect. 1 = set the corresponding bit in the IntSt register.
    -            HNP_FAILURE_SET: u1,
    -            ///  0 = no effect. 1 = set the corresponding bit in the IntSt register.
    -            HNP_SUCCES_SET: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u28,
    -        }),
    -        ///  OTG Interrupt Clear
    -        INTCLR: mmio.Mmio(packed struct(u32) {
    -            ///  0 = no effect. 1 = clear the corresponding bit in the IntSt register.
    -            TMR_CLR: u1,
    -            ///  0 = no effect. 1 = clear the corresponding bit in the IntSt register.
    -            REMOVE_PU_CLR: u1,
    -            ///  0 = no effect. 1 = clear the corresponding bit in the IntSt register.
    -            HNP_FAILURE_CLR: u1,
    -            ///  0 = no effect. 1 = clear the corresponding bit in the IntSt register.
    -            HNP_SUCCES_CLR: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u28,
    -        }),
    -        ///  OTG Status and Control and USB port select
    -        STCTRL: mmio.Mmio(packed struct(u32) {
    -            ///  Controls connection of USB functions (see Figure 51). Bit 0 is set or cleared by hardware when B_HNP_TRACK or A_HNP_TRACK is set and HNP succeeds. See Section 14.9. 00: U1 = device (OTG), U2 = host 01: U1 = host (OTG), U2 = host 10: Reserved 11: U1 = host, U2 = device In a device-only configuration, the following values are allowed: 00: U1 = device. The USB device controller signals are mapped to the U1 port: USB_CONNECT1, USB_UP_LED1, USB_D+1, USB_D-1. 11: U2 = device. The USB device controller signals are mapped to the U2 port: USB_CONNECT2, USB_UP_LED2, USB_D+2, USB_D-2.
    -            PORT_FUNC: u2,
    -            ///  Timer scale selection. This field determines the duration of each timer count. 00: 10 ms (100 KHz) 01: 100 ms (10 KHz) 10: 1000 ms (1 KHz) 11: Reserved
    -            TMR_SCALE: u2,
    -            ///  Timer mode selection. 0: monoshot 1: free running
    -            TMR_MODE: u1,
    -            ///  Timer enable. When set, TMR_CNT increments. When cleared, TMR_CNT is reset to 0.
    -            TMR_EN: u1,
    -            ///  Timer reset. Writing one to this bit resets TMR_CNT to 0. This provides a single bit control for the software to restart the timer when the timer is enabled.
    -            TMR_RST: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u1,
    -            ///  Enable HNP tracking for B-device (peripheral), see Section 14.9. Hardware clears this bit when HNP_SUCCESS or HNP_FAILURE is set.
    -            B_HNP_TRACK: u1,
    -            ///  Enable HNP tracking for A-device (host), see Section 14.9. Hardware clears this bit when HNP_SUCCESS or HNP_FAILURE is set.
    -            A_HNP_TRACK: u1,
    -            ///  When the B-device changes its role from peripheral to host, software sets this bit when it removes the D+ pull-up, see Section 14.9. Hardware clears this bit when HNP_SUCCESS or HNP_FAILURE is set.
    -            PU_REMOVED: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u5,
    -            ///  Current timer count value.
    -            TMR_CNT: u16,
    -        }),
    -        ///  OTG Timer
    -        TMR: mmio.Mmio(packed struct(u32) {
    -            ///  The TMR interrupt is set when TMR_CNT reaches this value.
    -            TIMEOUT_CNT: u16,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u16,
    -        }),
    -        reserved512: [232]u8,
    -        ///  USB Device Interrupt Status
    -        DEVINTST: mmio.Mmio(packed struct(u32) {
    -            ///  The frame interrupt occurs every 1 ms. This is used in isochronous packet transfers.
    -            FRAME: u1,
    -            ///  Fast endpoint interrupt. If an Endpoint Interrupt Priority register (USBEpIntPri) bit is set, the corresponding endpoint interrupt will be routed to this bit.
    -            EP_FAST: u1,
    -            ///  Slow endpoints interrupt. If an Endpoint Interrupt Priority Register (USBEpIntPri) bit is not set, the corresponding endpoint interrupt will be routed to this bit.
    -            EP_SLOW: u1,
    -            ///  Set when USB Bus reset, USB suspend change or Connect change event occurs. Refer to Section 13.12.6 Set Device Status (Command: 0xFE, Data: write 1 byte) on page 366.
    -            DEV_STAT: u1,
    -            ///  The command code register (USBCmdCode) is empty (New command can be written).
    -            CCEMPTY: u1,
    -            ///  Command data register (USBCmdData) is full (Data can be read now).
    -            CDFULL: u1,
    -            ///  The current packet in the endpoint buffer is transferred to the CPU.
    -            RxENDPKT: u1,
    -            ///  The number of data bytes transferred to the endpoint buffer equals the number of bytes programmed in the TxPacket length register (USBTxPLen).
    -            TxENDPKT: u1,
    -            ///  Endpoints realized. Set when Realize Endpoint register (USBReEp) or MaxPacketSize register (USBMaxPSize) is updated and the corresponding operation is completed.
    -            EP_RLZED: u1,
    -            ///  Error Interrupt. Any bus error interrupt from the USB device. Refer to Section 13.12.9 Read Error Status (Command: 0xFB, Data: read 1 byte) on page 368
    -            ERR_INT: u1,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u22,
    -        }),
    -        ///  USB Device Interrupt Enable
    -        DEVINTEN: mmio.Mmio(packed struct(u32) {
    -            ///  0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.
    -            FRAMEEN: u1,
    -            ///  0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.
    -            EP_FASTEN: u1,
    -            ///  0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.
    -            EP_SLOWEN: u1,
    -            ///  0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.
    -            DEV_STATEN: u1,
    -            ///  0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.
    -            CCEMPTYEN: u1,
    -            ///  0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.
    -            CDFULLEN: u1,
    -            ///  0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.
    -            RxENDPKTEN: u1,
    -            ///  0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.
    -            TxENDPKTEN: u1,
    -            ///  0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.
    -            EP_RLZEDEN: u1,
    -            ///  0 = No interrupt is generated. 1 = An interrupt will be generated when the corresponding bit in the Device Interrupt Status (USBDevIntSt) register (Table 261) is set. By default, the interrupt is routed to the USB_INT_REQ_LP interrupt line. Optionally, either the EP_FAST or FRAME interrupt may be routed to the USB_INT_REQ_HP interrupt line by changing the value of USBDevIntPri.
    -            ERR_INTEN: u1,
    -            ///  Reserved
    -            RESERVED: u22,
    -        }),
    -        ///  USB Device Interrupt Clear
    -        DEVINTCLR: mmio.Mmio(packed struct(u32) {
    -            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.
    -            FRAMECLR: u1,
    -            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.
    -            EP_FASTCLR: u1,
    -            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.
    -            EP_SLOWCLR: u1,
    -            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.
    -            DEV_STATCLR: u1,
    -            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.
    -            CCEMPTYCLR: u1,
    -            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.
    -            CDFULLCLR: u1,
    -            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.
    -            RxENDPKTCLR: u1,
    -            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.
    -            TxENDPKTCLR: u1,
    -            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.
    -            EP_RLZEDCLR: u1,
    -            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is cleared.
    -            ERR_INTCLR: u1,
    -            ///  Reserved
    -            RESERVED: u22,
    -        }),
    -        ///  USB Device Interrupt Set
    -        DEVINTSET: mmio.Mmio(packed struct(u32) {
    -            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.
    -            FRAMESET: u1,
    -            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.
    -            EP_FASTSET: u1,
    -            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.
    -            EP_SLOWSET: u1,
    -            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.
    -            DEV_STATSET: u1,
    -            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.
    -            CCEMPTYSET: u1,
    -            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.
    -            CDFULLSET: u1,
    -            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.
    -            RxENDPKTSET: u1,
    -            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.
    -            TxENDPKTSET: u1,
    -            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.
    -            EP_RLZEDSET: u1,
    -            ///  0 = No effect. 1 = The corresponding bit in USBDevIntSt (Section 13.10.3.2) is set.
    -            ERR_INTSET: u1,
    -            ///  Reserved
    -            RESERVED: u22,
    -        }),
    -        ///  USB Command Code
    -        CMDCODE: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u8,
    -            ///  The command phase:
    -            CMD_PHASE: packed union {
    -                raw: u8,
    -                value: enum(u8) {
    -                    ///  Read
    -                    READ = 0x2,
    -                    ///  Write
    -                    WRITE = 0x1,
    -                    ///  Command
    -                    COMMAND = 0x5,
    -                    _,
    -                },
    -            },
    -            ///  This is a multi-purpose field. When CMD_PHASE is Command or Read, this field contains the code for the command (CMD_CODE). When CMD_PHASE is Write, this field contains the command write data (CMD_WDATA).
    -            CMD_CODE_WDATA: u8,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u8,
    -        }),
    -        ///  USB Command Data
    -        CMDDATA: mmio.Mmio(packed struct(u32) {
    -            ///  Command Read Data.
    -            CMD_RDATA: u8,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u24,
    -        }),
    -        ///  USB Receive Data
    -        RXDATA: mmio.Mmio(packed struct(u32) {
    -            ///  Data received.
    -            RX_DATA: u32,
    -        }),
    -        ///  USB Transmit Data
    -        TXDATA: mmio.Mmio(packed struct(u32) {
    -            ///  Transmit Data.
    -            TX_DATA: u32,
    -        }),
    -        reserved548: [4]u8,
    -        ///  USB Transmit Packet Length
    -        TXPLEN: mmio.Mmio(packed struct(u32) {
    -            ///  The remaining number of bytes to be written to the selected endpoint buffer. This field is decremented by 4 by hardware after each write to USBTxData. When this field decrements to 0, the TxENDPKT bit will be set in USBDevIntSt.
    -            PKT_LNGTH: u10,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u22,
    -        }),
    -        ///  USB Control
    -        CTRL: mmio.Mmio(packed struct(u32) {
    -            ///  Read mode control. Enables reading data from the OUT endpoint buffer for the endpoint specified in the LOG_ENDPOINT field using the USBRxData register. This bit is cleared by hardware when the last word of the current packet is read from USBRxData.
    -            RD_EN: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled.
    -                    DISABLED_ = 0x0,
    -                    ///  Enabled.
    -                    ENABLED_ = 0x1,
    -                },
    -            },
    -            ///  Write mode control. Enables writing data to the IN endpoint buffer for the endpoint specified in the LOG_ENDPOINT field using the USBTxData register. This bit is cleared by hardware when the number of bytes in USBTxLen have been sent.
    -            WR_EN: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled.
    -                    DISABLED_ = 0x0,
    -                    ///  Enabled.
    -                    ENABLED_ = 0x1,
    -                },
    -            },
    -            ///  Logical Endpoint number.
    -            LOG_ENDPOINT: u4,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u26,
    -        }),
    -        ///  USB Device Interrupt Priority
    -        DEVINTPRI: mmio.Mmio(packed struct(u32) {
    -            ///  Frame interrupt routing
    -            FRAME: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  FRAME interrupt is routed to USB_INT_REQ_LP.
    -                    LP = 0x0,
    -                    ///  FRAME interrupt is routed to USB_INT_REQ_HP.
    -                    HP = 0x1,
    -                },
    -            },
    -            ///  Fast endpoint interrupt routing
    -            EP_FAST: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  EP_FAST interrupt is routed to USB_INT_REQ_LP.
    -                    LP = 0x0,
    -                    ///  EP_FAST interrupt is routed to USB_INT_REQ_HP.
    -                    HP = 0x1,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u30,
    -        }),
    -        ///  USB Endpoint Interrupt Status
    -        EPINTST: mmio.Mmio(packed struct(u32) {
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST0: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST1: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST2: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST3: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST4: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST5: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST6: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST7: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST8: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST9: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST10: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST11: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST12: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST13: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST14: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST15: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST16: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST17: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST18: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST19: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST20: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST21: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST22: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST23: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST24: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST25: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST26: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST27: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST28: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST29: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST30: u1,
    -            ///  1 = Endpoint Data Received (bits 0, 2, 4, ..., 30) or Transmitted (bits 1, 3, 5, ..., 31) Interrupt received.
    -            EPST31: u1,
    -        }),
    -        ///  USB Endpoint Interrupt Enable
    -        EPINTEN: mmio.Mmio(packed struct(u32) {
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN0: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN1: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN2: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN3: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN4: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN5: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN6: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN7: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN8: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN9: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN10: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN11: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN12: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN13: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN14: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN15: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN16: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN17: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN18: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN19: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN20: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN21: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN22: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN23: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN24: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN25: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN26: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN27: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN28: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN29: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN30: u1,
    -            ///  0= The corresponding bit in USBDMARSt is set when an interrupt occurs for this endpoint. 1 = The corresponding bit in USBEpIntSt is set when an interrupt occurs for this endpoint. Implies Slave mode for this endpoint.
    -            EPEN31: u1,
    -        }),
    -        ///  USB Endpoint Interrupt Clear
    -        EPINTCLR: mmio.Mmio(packed struct(u32) {
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR0: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR1: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR2: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR3: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR4: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR5: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR6: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR7: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR8: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR9: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR10: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR11: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR12: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR13: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR14: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR15: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR16: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR17: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR18: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR19: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR20: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR21: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR22: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR23: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR24: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR25: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR26: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR27: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR28: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR29: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR30: u1,
    -            ///  0 = No effect. 1 = Clears the corresponding bit in USBEpIntSt, by executing the SIE Select Endpoint/Clear Interrupt command for this endpoint.
    -            EPCLR31: u1,
    -        }),
    -        ///  USB Endpoint Interrupt Set
    -        EPINTSET: mmio.Mmio(packed struct(u32) {
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET0: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET1: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET2: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET3: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET4: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET5: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET6: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET7: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET8: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET9: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET10: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET11: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET12: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET13: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET14: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET15: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET16: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET17: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET18: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET19: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET20: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET21: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET22: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET23: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET24: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET25: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET26: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET27: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET28: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET29: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET30: u1,
    -            ///  0 = No effect. 1 = Sets the corresponding bit in USBEpIntSt.
    -            EPSET31: u1,
    -        }),
    -        ///  USB Endpoint Priority
    -        EPINTPRI: mmio.Mmio(packed struct(u32) {
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI0: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI1: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI2: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI3: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI4: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI5: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI6: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI7: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI8: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI9: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI10: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI11: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI12: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI13: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI14: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI15: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI16: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI17: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI18: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI19: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI20: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI21: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI22: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI23: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI24: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI25: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI26: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI27: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI28: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI29: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI30: u1,
    -            ///  0 = The corresponding interrupt is routed to the EP_SLOW bit of USBDevIntSt 1 = The corresponding interrupt is routed to the EP_FAST bit of USBDevIntSt
    -            EPPRI31: u1,
    -        }),
    -        ///  USB Realize Endpoint
    -        REEP: mmio.Mmio(packed struct(u32) {
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR0: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR1: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR2: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR3: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR4: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR5: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR6: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR7: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR8: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR9: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR10: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR11: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR12: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR13: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR14: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR15: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR16: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR17: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR18: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR19: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR20: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR21: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR22: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR23: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR24: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR25: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR26: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR27: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR28: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR29: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR30: u1,
    -            ///  0 = Endpoint EPxx is not realized. 1 = Endpoint EPxx is realized.
    -            EPR31: u1,
    -        }),
    -        ///  USB Endpoint Index
    -        EPIND: mmio.Mmio(packed struct(u32) {
    -            ///  Physical endpoint number (0-31)
    -            PHY_EP: u5,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u27,
    -        }),
    -        ///  USB MaxPacketSize
    -        MAXPSIZE: mmio.Mmio(packed struct(u32) {
    -            ///  The maximum packet size value.
    -            MPS: u10,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u22,
    -        }),
    -        ///  USB DMA Request Status
    -        DMARST: mmio.Mmio(packed struct(u32) {
    -            ///  Control endpoint OUT (DMA cannot be enabled for this endpoint and EP0 bit must be 0).
    -            EPRST0: u1,
    -            ///  Control endpoint IN (DMA cannot be enabled for this endpoint and EP1 bit must be 0).
    -            EPRST1: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST2: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST3: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST4: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST5: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST6: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST7: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST8: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST9: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST10: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST11: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST12: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST13: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST14: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST15: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST16: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST17: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST18: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST19: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST20: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST21: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST22: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST23: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST24: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST25: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST26: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST27: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST28: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST29: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST30: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA request. 0 = DMA not requested by endpoint xx. 1 = DMA requested by endpoint xx.
    -            EPRST31: u1,
    -        }),
    -        ///  USB DMA Request Clear
    -        DMARCLR: mmio.Mmio(packed struct(u32) {
    -            ///  Control endpoint OUT (DMA cannot be enabled for this endpoint and the EP0 bit must be 0).
    -            EPRCLR0: u1,
    -            ///  Control endpoint IN (DMA cannot be enabled for this endpoint and the EP1 bit must be 0).
    -            EPRCLR1: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR2: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR3: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR4: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR5: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR6: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR7: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR8: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR9: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR10: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR11: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR12: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR13: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR14: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR15: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR16: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR17: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR18: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR19: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR20: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR21: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR22: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR23: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR24: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR25: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR26: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR27: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR28: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR29: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR30: u1,
    -            ///  Clear the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Clear the corresponding bit in USBDMARSt.
    -            EPRCLR31: u1,
    -        }),
    -        ///  USB DMA Request Set
    -        DMARSET: mmio.Mmio(packed struct(u32) {
    -            ///  Control endpoint OUT (DMA cannot be enabled for this endpoint and the EP0 bit must be 0).
    -            EPRSET0: u1,
    -            ///  Control endpoint IN (DMA cannot be enabled for this endpoint and the EP1 bit must be 0).
    -            EPRSET1: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET2: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET3: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET4: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET5: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET6: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET7: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET8: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET9: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET10: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET11: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET12: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET13: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET14: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET15: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET16: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET17: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET18: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET19: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET20: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET21: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET22: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET23: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET24: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET25: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET26: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET27: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET28: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET29: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET30: u1,
    -            ///  Set the endpoint xx (2 <= xx <= 31) DMA request. 0 = No effect 1 = Set the corresponding bit in USBDMARSt.
    -            EPRSET31: u1,
    -        }),
    -        reserved640: [36]u8,
    -        ///  USB UDCA Head
    -        UDCAH: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved. Read value is undefined, only zero should be written. The UDCA is aligned to 128-byte boundaries.
    -            RESERVED: u7,
    -            ///  Start address of the UDCA.
    -            UDCA_ADDR: u25,
    -        }),
    -        ///  USB Endpoint DMA Status
    -        EPDMAST: mmio.Mmio(packed struct(u32) {
    -            ///  Control endpoint OUT (DMA cannot be enabled for this endpoint and the EP0_DMA_ENABLE bit must be 0).
    -            EP_DMA_ST0: u1,
    -            ///  Control endpoint IN (DMA cannot be enabled for this endpoint and the EP1_DMA_ENABLE bit must be 0).
    -            EP_DMA_ST1: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST2: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST3: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST4: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST5: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST6: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST7: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST8: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST9: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST10: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST11: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST12: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST13: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST14: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST15: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST16: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST17: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST18: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST19: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST20: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST21: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST22: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST23: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST24: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST25: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST26: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST27: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST28: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST29: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST30: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA enabled bit. 0 = The DMA for endpoint EPxx is disabled. 1 = The DMA for endpoint EPxx is enabled.
    -            EP_DMA_ST31: u1,
    -        }),
    -        ///  USB Endpoint DMA Enable
    -        EPDMAEN: mmio.Mmio(packed struct(u32) {
    -            ///  Control endpoint OUT (DMA cannot be enabled for this endpoint and the EP0_DMA_ENABLE bit value must be 0).
    -            EP_DMA_EN0: u1,
    -            ///  Control endpoint IN (DMA cannot be enabled for this endpoint and the EP1_DMA_ENABLE bit must be 0).
    -            EP_DMA_EN1: u1,
    -            ///  Endpoint xx(2 <= xx <= 31) DMA enable control bit. 0 = No effect. 1 = Enable the DMA operation for endpoint EPxx.
    -            EP_DMA_EN: u30,
    -        }),
    -        ///  USB Endpoint DMA Disable
    -        EPDMADIS: mmio.Mmio(packed struct(u32) {
    -            ///  Control endpoint OUT (DMA cannot be enabled for this endpoint and the EP0_DMA_DISABLE bit value must be 0).
    -            EP_DMA_DIS0: u1,
    -            ///  Control endpoint IN (DMA cannot be enabled for this endpoint and the EP1_DMA_DISABLE bit value must be 0).
    -            EP_DMA_DIS1: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS2: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS3: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS4: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS5: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS6: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS7: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS8: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS9: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS10: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS11: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS12: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS13: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS14: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS15: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS16: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS17: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS18: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS19: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS20: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS21: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS22: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS23: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS24: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS25: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS26: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS27: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS28: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS29: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS30: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) DMA disable control bit. 0 = No effect. 1 = Disable the DMA operation for endpoint EPxx.
    -            EP_DMA_DIS31: u1,
    -        }),
    -        ///  USB DMA Interrupt Status
    -        DMAINTST: mmio.Mmio(packed struct(u32) {
    -            ///  End of Transfer Interrupt bit.
    -            EOT: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  All bits in the USBEoTIntSt register are 0.
    -                    ALL_BITS_IN_THE_USBE = 0x0,
    -                    ///  At least one bit in the USBEoTIntSt is set.
    -                    AT_LEAST_ONE_BIT_IN_ = 0x1,
    -                },
    -            },
    -            ///  New DD Request Interrupt bit.
    -            NDDR: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  All bits in the USBNDDRIntSt register are 0.
    -                    ALL_BITS_IN_THE_USBN = 0x0,
    -                    ///  At least one bit in the USBNDDRIntSt is set.
    -                    AT_LEAST_ONE_BIT_IN_ = 0x1,
    -                },
    -            },
    -            ///  System Error Interrupt bit.
    -            ERR: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  All bits in the USBSysErrIntSt register are 0.
    -                    ALL_BITS_IN_THE_USBS = 0x0,
    -                    ///  At least one bit in the USBSysErrIntSt is set.
    -                    AT_LEAST_ONE_BIT_IN_ = 0x1,
    -                },
    -            },
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u29,
    -        }),
    -        ///  USB DMA Interrupt Enable
    -        DMAINTEN: mmio.Mmio(packed struct(u32) {
    -            ///  End of Transfer Interrupt enable bit.
    -            EOT: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled.
    -                    DISABLED_ = 0x0,
    -                    ///  Enabled.
    -                    ENABLED_ = 0x1,
    -                },
    -            },
    -            ///  New DD Request Interrupt enable bit.
    -            NDDR: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled.
    -                    DISABLED_ = 0x0,
    -                    ///  Enabled.
    -                    ENABLED_ = 0x1,
    -                },
    -            },
    -            ///  System Error Interrupt enable bit.
    -            ERR: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled.
    -                    DISABLED_ = 0x0,
    -                    ///  Enabled.
    -                    ENABLED_ = 0x1,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u29,
    -        }),
    -        reserved672: [8]u8,
    -        ///  USB End of Transfer Interrupt Status
    -        EOTINTST: mmio.Mmio(packed struct(u32) {
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST0: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST1: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST2: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST3: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST4: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST5: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST6: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST7: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST8: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST9: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST10: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST11: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST12: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST13: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST14: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST15: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST16: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST17: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST18: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST19: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST20: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST21: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST22: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST23: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST24: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST25: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST26: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST27: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST28: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST29: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST30: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = There is no End of Transfer interrupt request for endpoint xx. 1 = There is an End of Transfer Interrupt request for endpoint xx.
    -            EPTXINTST31: u1,
    -        }),
    -        ///  USB End of Transfer Interrupt Clear
    -        EOTINTCLR: mmio.Mmio(packed struct(u32) {
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR0: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR1: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR2: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR3: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR4: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR5: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR6: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR7: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR8: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR9: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR10: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR11: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR12: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR13: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR14: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR15: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR16: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR17: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR18: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR19: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR20: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR21: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR22: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR23: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR24: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR25: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR26: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR27: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR28: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR29: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR30: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Clear the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTCLR31: u1,
    -        }),
    -        ///  USB End of Transfer Interrupt Set
    -        EOTINTSET: mmio.Mmio(packed struct(u32) {
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET0: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET1: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET2: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET3: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET4: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET5: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET6: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET7: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET8: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET9: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET10: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET11: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET12: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET13: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET14: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET15: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET16: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET17: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET18: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET19: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET20: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET21: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET22: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET23: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET24: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET25: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET26: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET27: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET28: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET29: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET30: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) End of Transfer Interrupt request. 0 = No effect. 1 = Set the EPxx End of Transfer Interrupt request in the USBEoTIntSt register.
    -            EPTXINTSET31: u1,
    -        }),
    -        ///  USB New DD Request Interrupt Status
    -        NDDRINTST: mmio.Mmio(packed struct(u32) {
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST0: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST1: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST2: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST3: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST4: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST5: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST6: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST7: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST8: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST9: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST10: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST11: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST12: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST13: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST14: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST15: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST16: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST17: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST18: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST19: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST20: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST21: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST22: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST23: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST24: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST25: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST26: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST27: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST28: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST29: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST30: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = There is no new DD interrupt request for endpoint xx. 1 = There is a new DD interrupt request for endpoint xx.
    -            EPNDDINTST31: u1,
    -        }),
    -        ///  USB New DD Request Interrupt Clear
    -        NDDRINTCLR: mmio.Mmio(packed struct(u32) {
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR0: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR1: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR2: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR3: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR4: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR5: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR6: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR7: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR8: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR9: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR10: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR11: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR12: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR13: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR14: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR15: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR16: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR17: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR18: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR19: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR20: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR21: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR22: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR23: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR24: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR25: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR26: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR27: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR28: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR29: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR30: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Clear the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTCLR31: u1,
    -        }),
    -        ///  USB New DD Request Interrupt Set
    -        NDDRINTSET: mmio.Mmio(packed struct(u32) {
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET0: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET1: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET2: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET3: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET4: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET5: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET6: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET7: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET8: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET9: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET10: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET11: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET12: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET13: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET14: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET15: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET16: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET17: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET18: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET19: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET20: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET21: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET22: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET23: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET24: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET25: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET26: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET27: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET28: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET29: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET30: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) new DD interrupt request. 0 = No effect. 1 = Set the EPxx new DD interrupt request in the USBNDDRIntSt register.
    -            EPNDDINTSET31: u1,
    -        }),
    -        ///  USB System Error Interrupt Status
    -        SYSERRINTST: mmio.Mmio(packed struct(u32) {
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST0: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST1: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST2: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST3: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST4: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST5: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST6: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST7: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST8: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST9: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST10: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST11: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST12: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST13: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST14: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST15: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST16: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST17: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST18: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST19: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST20: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST21: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST22: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST23: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST24: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST25: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST26: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST27: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST28: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST29: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST30: u1,
    -            ///  Endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = There is no System Error Interrupt request for endpoint xx. 1 = There is a System Error Interrupt request for endpoint xx.
    -            EPERRINTST31: u1,
    -        }),
    -        ///  USB System Error Interrupt Clear
    -        SYSERRINTCLR: mmio.Mmio(packed struct(u32) {
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR0: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR1: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR2: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR3: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR4: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR5: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR6: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR7: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR8: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR9: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR10: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR11: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR12: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR13: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR14: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR15: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR16: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR17: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR18: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR19: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR20: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR21: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR22: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR23: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR24: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR25: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR26: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR27: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR28: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR29: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR30: u1,
    -            ///  Clear endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Clear the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTCLR31: u1,
    -        }),
    -        ///  USB System Error Interrupt Set
    -        SYSERRINTSET: mmio.Mmio(packed struct(u32) {
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET0: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET1: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET2: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET3: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET4: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET5: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET6: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET7: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET8: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET9: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET10: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET11: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET12: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET13: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET14: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET15: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET16: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET17: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET18: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET19: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET20: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET21: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET22: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET23: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET24: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET25: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET26: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET27: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET28: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET29: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET30: u1,
    -            ///  Set endpoint xx (2 <= xx <= 31) System Error Interrupt request. 0 = No effect. 1 = Set the EPxx System Error Interrupt request in the USBSysErrIntSt register.
    -            EPERRINTSET31: u1,
    -        }),
    -        reserved768: [60]u8,
    -        ///  I2C Receive
    -        I2C_RX: mmio.Mmio(packed struct(u32) {
    -            ///  Receive data.
    -            RXDATA: u8,
    -            padding: u24,
    -        }),
    -        ///  I2C Status
    -        I2C_STS: mmio.Mmio(packed struct(u32) {
    -            ///  Transaction Done Interrupt. This flag is set if a transaction completes successfully. It is cleared by writing a one to bit 0 of the status register. It is unaffected by slave transactions.
    -            TDI: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Transaction has not completed.
    -                    NOT_COMPLETE = 0x0,
    -                    ///  Transaction completed.
    -                    COMPLETE = 0x1,
    -                },
    -            },
    -            ///  Arbitration Failure Interrupt. When transmitting, if the SDA is low when SDAOUT is high, then this I2C has lost the arbitration to another device on the bus. The Arbitration Failure bit is set when this happens. It is cleared by writing a one to bit 1 of the status register.
    -            AFI: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  No arbitration failure on last transmission.
    -                    NO_ARBITRATION_FAILU = 0x0,
    -                    ///  Arbitration failure occurred on last transmission.
    -                    ARBITRATION_FAILURE_ = 0x1,
    -                },
    -            },
    -            ///  No Acknowledge Interrupt. After every byte of data is sent, the transmitter expects an acknowledge from the receiver. This bit is set if the acknowledge is not received. It is cleared when a byte is written to the master TX FIFO.
    -            NAI: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Last transmission received an acknowledge.
    -                    ACKNOWLEDGE_RCVD = 0x0,
    -                    ///  Last transmission did not receive an acknowledge.
    -                    NO_ACKNOWLEDGE_RCVD = 0x1,
    -                },
    -            },
    -            ///  Master Data Request Interrupt. Once a transmission is started, the transmitter must have data to transmit as long as it isn't followed by a stop condition or it will hold SCL low until more data is available. The Master Data Request bit is set when the master transmitter is data-starved. If the master TX FIFO is empty and the last byte did not have a STOP condition flag, then SCL is held low until the CPU writes another byte to transmit. This bit is cleared when a byte is written to the master TX FIFO.
    -            DRMI: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Master transmitter does not need data.
    -                    BUSY = 0x0,
    -                    ///  Master transmitter needs data.
    -                    NEED_DATA = 0x1,
    -                },
    -            },
    -            ///  Slave Data Request Interrupt. Once a transmission is started, the transmitter must have data to transmit as long as it isn't followed by a STOP condition or it will hold SCL low until more data is available. The Slave Data Request bit is set when the slave transmitter is data-starved. If the slave TX FIFO is empty and the last byte transmitted was acknowledged, then SCL is held low until the CPU writes another byte to transmit. This bit is cleared when a byte is written to the slave Tx FIFO.
    -            DRSI: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Slave transmitter does not need data.
    -                    BUSY = 0x0,
    -                    ///  Slave transmitter needs data.
    -                    NEED_DATA = 0x1,
    -                },
    -            },
    -            ///  Indicates whether the bus is busy. This bit is set when a START condition has been seen. It is cleared when a STOP condition is seen..
    -            Active: u1,
    -            ///  The current value of the SCL signal.
    -            SCL: u1,
    -            ///  The current value of the SDA signal.
    -            SDA: u1,
    -            ///  Receive FIFO Full (RFF). This bit is set when the RX FIFO is full and cannot accept any more data. It is cleared when the RX FIFO is not full. If a byte arrives when the Receive FIFO is full, the SCL is held low until the CPU reads the RX FIFO and makes room for it.
    -            RFF: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  RX FIFO is not full
    -                    RX_FIFO_IS_NOT_FULL = 0x0,
    -                    ///  RX FIFO is full
    -                    RX_FIFO_IS_FULL = 0x1,
    -                },
    -            },
    -            ///  Receive FIFO Empty. RFE is set when the RX FIFO is empty and is cleared when the RX FIFO contains valid data.
    -            RFE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  RX FIFO contains data.
    -                    DATA = 0x0,
    -                    ///  RX FIFO is empty
    -                    EMPTY = 0x1,
    -                },
    -            },
    -            ///  Transmit FIFO Full. TFF is set when the TX FIFO is full and is cleared when the TX FIFO is not full.
    -            TFF: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  TX FIFO is not full.
    -                    TX_FIFO_IS_NOT_FULL_ = 0x0,
    -                    ///  TX FIFO is full
    -                    TX_FIFO_IS_FULL = 0x1,
    -                },
    -            },
    -            ///  Transmit FIFO Empty. TFE is set when the TX FIFO is empty and is cleared when the TX FIFO contains valid data.
    -            TFE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  TX FIFO contains valid data.
    -                    VALID_DATA = 0x0,
    -                    ///  TX FIFO is empty
    -                    EMPTY = 0x1,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u20,
    -        }),
    -        ///  I2C Control
    -        I2C_CTL: mmio.Mmio(packed struct(u32) {
    -            ///  Transmit Done Interrupt Enable. This enables the TDI interrupt signalling that this I2C issued a STOP condition.
    -            TDIE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disable the TDI interrupt.
    -                    DISABLE_THE_TDI_INTE = 0x0,
    -                    ///  Enable the TDI interrupt.
    -                    ENABLE_THE_TDI_INTER = 0x1,
    -                },
    -            },
    -            ///  Transmitter Arbitration Failure Interrupt Enable. This enables the AFI interrupt which is asserted during transmission when trying to set SDA high, but the bus is driven low by another device.
    -            AFIE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disable the AFI.
    -                    DISABLE_THE_AFI_ = 0x0,
    -                    ///  Enable the AFI.
    -                    ENABLE_THE_AFI_ = 0x1,
    -                },
    -            },
    -            ///  Transmitter No Acknowledge Interrupt Enable. This enables the NAI interrupt signalling that transmitted byte was not acknowledged.
    -            NAIE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disable the NAI.
    -                    DISABLE_THE_NAI_ = 0x0,
    -                    ///  Enable the NAI.
    -                    ENABLE_THE_NAI_ = 0x1,
    -                },
    -            },
    -            ///  Master Transmitter Data Request Interrupt Enable. This enables the DRMI interrupt which signals that the master transmitter has run out of data, has not issued a STOP, and is holding the SCL line low.
    -            DRMIE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disable the DRMI interrupt.
    -                    DISABLE_THE_DRMI_INT = 0x0,
    -                    ///  Enable the DRMI interrupt.
    -                    ENABLE_THE_DRMI_INTE = 0x1,
    -                },
    -            },
    -            ///  Slave Transmitter Data Request Interrupt Enable. This enables the DRSI interrupt which signals that the slave transmitter has run out of data and the last byte was acknowledged, so the SCL line is being held low.
    -            DRSIE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disable the DRSI interrupt.
    -                    DISABLE_THE_DRSI_INT = 0x0,
    -                    ///  Enable the DRSI interrupt.
    -                    ENABLE_THE_DRSI_INTE = 0x1,
    -                },
    -            },
    -            ///  Receive FIFO Full Interrupt Enable. This enables the Receive FIFO Full interrupt to indicate that the receive FIFO cannot accept any more data.
    -            REFIE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disable the RFFI.
    -                    DISABLE_THE_RFFI_ = 0x0,
    -                    ///  Enable the RFFI.
    -                    ENABLE_THE_RFFI_ = 0x1,
    -                },
    -            },
    -            ///  Receive Data Available Interrupt Enable. This enables the DAI interrupt to indicate that data is available in the receive FIFO (i.e. not empty).
    -            RFDAIE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disable the DAI.
    -                    DISABLE_THE_DAI_ = 0x0,
    -                    ///  Enable the DAI.
    -                    ENABLE_THE_DAI_ = 0x1,
    -                },
    -            },
    -            ///  Transmit FIFO Not Full Interrupt Enable. This enables the Transmit FIFO Not Full interrupt to indicate that the more data can be written to the transmit FIFO. Note that this is not full. It is intended help the CPU to write to the I2C block only when there is room in the FIFO and do this without polling the status register.
    -            TFFIE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disable the TFFI.
    -                    DISABLE_THE_TFFI_ = 0x0,
    -                    ///  Enable the TFFI.
    -                    ENABLE_THE_TFFI_ = 0x1,
    -                },
    -            },
    -            ///  Soft reset. This is only needed in unusual circumstances. If a device issues a start condition without issuing a stop condition. A system timer may be used to reset the I2C if the bus remains busy longer than the time-out period. On a soft reset, the Tx and Rx FIFOs are flushed, I2C_STS register is cleared, and all internal state machines are reset to appear idle. The I2C_CLKHI, I2C_CLKLO and I2C_CTL (except Soft Reset Bit) are NOT modified by a soft reset.
    -            SRST: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  No reset.
    -                    NO_RESET = 0x0,
    -                    ///  Reset the I2C to idle state. Self clearing.
    -                    RESET = 0x1,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u23,
    -        }),
    -        ///  I2C Clock High
    -        I2C_CLKHI: mmio.Mmio(packed struct(u32) {
    -            ///  Clock divisor high. This value is the number of 48 MHz clocks the serial clock (SCL) will be high.
    -            CDHI: u8,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u24,
    -        }),
    -        ///  I2C Clock Low
    -        I2C_CLKLO: mmio.Mmio(packed struct(u32) {
    -            ///  Clock divisor low. This value is the number of 48 MHz clocks the serial clock (SCL) will be low.
    -            CDLO: u8,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u24,
    -        }),
    -        reserved4084: [3296]u8,
    -        ///  USB Clock Control
    -        USBCLKCTRL: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u1,
    -            ///  Device clock enable. Enables the usbclk input to the device controller
    -            DEV_CLK_EN: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u1,
    -            ///  Port select register clock enable.
    -            PORTSEL_CLK_EN: u1,
    -            ///  AHB clock enable
    -            AHB_CLK_EN: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u27,
    -        }),
    -        ///  USB Clock Status
    -        USBCLKST: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u1,
    -            ///  Device clock on. The usbclk input to the device controller is active .
    -            DEV_CLK_ON: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u1,
    -            ///  Port select register clock on.
    -            PORTSEL_CLK_ON: u1,
    -            ///  AHB clock on.
    -            AHB_CLK_ON: u1,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u27,
    -        }),
    -    };
    -
    -    ///  General purpose DMA controller
    -    pub const GPDMA = extern struct {
    -        ///  DMA Interrupt Status Register
    -        INTSTAT: mmio.Mmio(packed struct(u32) {
    -            ///  Status of DMA channel interrupts after masking. Each bit represents one channel: 0 - the corresponding channel has no active interrupt request. 1 - the corresponding channel does have an active interrupt request.
    -            INTSTAT0: u1,
    -            ///  Status of DMA channel interrupts after masking. Each bit represents one channel: 0 - the corresponding channel has no active interrupt request. 1 - the corresponding channel does have an active interrupt request.
    -            INTSTAT1: u1,
    -            ///  Status of DMA channel interrupts after masking. Each bit represents one channel: 0 - the corresponding channel has no active interrupt request. 1 - the corresponding channel does have an active interrupt request.
    -            INTSTAT2: u1,
    -            ///  Status of DMA channel interrupts after masking. Each bit represents one channel: 0 - the corresponding channel has no active interrupt request. 1 - the corresponding channel does have an active interrupt request.
    -            INTSTAT3: u1,
    -            ///  Status of DMA channel interrupts after masking. Each bit represents one channel: 0 - the corresponding channel has no active interrupt request. 1 - the corresponding channel does have an active interrupt request.
    -            INTSTAT4: u1,
    -            ///  Status of DMA channel interrupts after masking. Each bit represents one channel: 0 - the corresponding channel has no active interrupt request. 1 - the corresponding channel does have an active interrupt request.
    -            INTSTAT5: u1,
    -            ///  Status of DMA channel interrupts after masking. Each bit represents one channel: 0 - the corresponding channel has no active interrupt request. 1 - the corresponding channel does have an active interrupt request.
    -            INTSTAT6: u1,
    -            ///  Status of DMA channel interrupts after masking. Each bit represents one channel: 0 - the corresponding channel has no active interrupt request. 1 - the corresponding channel does have an active interrupt request.
    -            INTSTAT7: u1,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u24,
    -        }),
    -        ///  DMA Interrupt Terminal Count Request Status Register
    -        INTTCSTAT: mmio.Mmio(packed struct(u32) {
    -            ///  Terminal count interrupt request status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    -            INTTCSTAT0: u1,
    -            ///  Terminal count interrupt request status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    -            INTTCSTAT1: u1,
    -            ///  Terminal count interrupt request status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    -            INTTCSTAT2: u1,
    -            ///  Terminal count interrupt request status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    -            INTTCSTAT3: u1,
    -            ///  Terminal count interrupt request status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    -            INTTCSTAT4: u1,
    -            ///  Terminal count interrupt request status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    -            INTTCSTAT5: u1,
    -            ///  Terminal count interrupt request status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    -            INTTCSTAT6: u1,
    -            ///  Terminal count interrupt request status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    -            INTTCSTAT7: u1,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u24,
    -        }),
    -        ///  DMA Interrupt Terminal Count Request Clear Register
    -        INTTCCLEAR: mmio.Mmio(packed struct(u32) {
    -            ///  Allows clearing the Terminal count interrupt request (IntTCStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel terminal count interrupt.
    -            INTTCCLEAR0: u1,
    -            ///  Allows clearing the Terminal count interrupt request (IntTCStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel terminal count interrupt.
    -            INTTCCLEAR1: u1,
    -            ///  Allows clearing the Terminal count interrupt request (IntTCStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel terminal count interrupt.
    -            INTTCCLEAR2: u1,
    -            ///  Allows clearing the Terminal count interrupt request (IntTCStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel terminal count interrupt.
    -            INTTCCLEAR3: u1,
    -            ///  Allows clearing the Terminal count interrupt request (IntTCStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel terminal count interrupt.
    -            INTTCCLEAR4: u1,
    -            ///  Allows clearing the Terminal count interrupt request (IntTCStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel terminal count interrupt.
    -            INTTCCLEAR5: u1,
    -            ///  Allows clearing the Terminal count interrupt request (IntTCStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel terminal count interrupt.
    -            INTTCCLEAR6: u1,
    -            ///  Allows clearing the Terminal count interrupt request (IntTCStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel terminal count interrupt.
    -            INTTCCLEAR7: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u24,
    -        }),
    -        ///  DMA Interrupt Error Status Register
    -        INTERRSTAT: mmio.Mmio(packed struct(u32) {
    -            ///  Interrupt error status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    -            INTERRSTAT0: u1,
    -            ///  Interrupt error status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    -            INTERRSTAT1: u1,
    -            ///  Interrupt error status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    -            INTERRSTAT2: u1,
    -            ///  Interrupt error status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    -            INTERRSTAT3: u1,
    -            ///  Interrupt error status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    -            INTERRSTAT4: u1,
    -            ///  Interrupt error status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    -            INTERRSTAT5: u1,
    -            ///  Interrupt error status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    -            INTERRSTAT6: u1,
    -            ///  Interrupt error status for DMA channels. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    -            INTERRSTAT7: u1,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u24,
    -        }),
    -        ///  DMA Interrupt Error Clear Register
    -        INTERRCLR: mmio.Mmio(packed struct(u32) {
    -            ///  Writing a 1 clears the error interrupt request (IntErrStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel error interrupt.
    -            INTERRCLR0: u1,
    -            ///  Writing a 1 clears the error interrupt request (IntErrStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel error interrupt.
    -            INTERRCLR1: u1,
    -            ///  Writing a 1 clears the error interrupt request (IntErrStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel error interrupt.
    -            INTERRCLR2: u1,
    -            ///  Writing a 1 clears the error interrupt request (IntErrStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel error interrupt.
    -            INTERRCLR3: u1,
    -            ///  Writing a 1 clears the error interrupt request (IntErrStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel error interrupt.
    -            INTERRCLR4: u1,
    -            ///  Writing a 1 clears the error interrupt request (IntErrStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel error interrupt.
    -            INTERRCLR5: u1,
    -            ///  Writing a 1 clears the error interrupt request (IntErrStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel error interrupt.
    -            INTERRCLR6: u1,
    -            ///  Writing a 1 clears the error interrupt request (IntErrStat) for DMA channels. Each bit represents one channel: 0 - writing 0 has no effect. 1 - clears the corresponding channel error interrupt.
    -            INTERRCLR7: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u24,
    -        }),
    -        ///  DMA Raw Interrupt Terminal Count Status Register
    -        RAWINTTCSTAT: mmio.Mmio(packed struct(u32) {
    -            ///  Status of the terminal count interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    -            RAWINTTCSTAT0: u1,
    -            ///  Status of the terminal count interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    -            RAWINTTCSTAT1: u1,
    -            ///  Status of the terminal count interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    -            RAWINTTCSTAT2: u1,
    -            ///  Status of the terminal count interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    -            RAWINTTCSTAT3: u1,
    -            ///  Status of the terminal count interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    -            RAWINTTCSTAT4: u1,
    -            ///  Status of the terminal count interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    -            RAWINTTCSTAT5: u1,
    -            ///  Status of the terminal count interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    -            RAWINTTCSTAT6: u1,
    -            ///  Status of the terminal count interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active terminal count interrupt request. 1 - the corresponding channel does have an active terminal count interrupt request.
    -            RAWINTTCSTAT7: u1,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u24,
    -        }),
    -        ///  DMA Raw Error Interrupt Status Register
    -        RAWINTERRSTAT: mmio.Mmio(packed struct(u32) {
    -            ///  Status of the error interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    -            RAWINTERRSTAT0: u1,
    -            ///  Status of the error interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    -            RAWINTERRSTAT1: u1,
    -            ///  Status of the error interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    -            RAWINTERRSTAT2: u1,
    -            ///  Status of the error interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    -            RAWINTERRSTAT3: u1,
    -            ///  Status of the error interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    -            RAWINTERRSTAT4: u1,
    -            ///  Status of the error interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    -            RAWINTERRSTAT5: u1,
    -            ///  Status of the error interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    -            RAWINTERRSTAT6: u1,
    -            ///  Status of the error interrupt for DMA channels prior to masking. Each bit represents one channel: 0 - the corresponding channel has no active error interrupt request. 1 - the corresponding channel does have an active error interrupt request.
    -            RAWINTERRSTAT7: u1,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u24,
    -        }),
    -        ///  DMA Enabled Channel Register
    -        ENBLDCHNS: mmio.Mmio(packed struct(u32) {
    -            ///  Enable status for DMA channels. Each bit represents one channel: 0 - DMA channel is disabled. 1 - DMA channel is enabled.
    -            ENABLEDCHANNELS0: u1,
    -            ///  Enable status for DMA channels. Each bit represents one channel: 0 - DMA channel is disabled. 1 - DMA channel is enabled.
    -            ENABLEDCHANNELS1: u1,
    -            ///  Enable status for DMA channels. Each bit represents one channel: 0 - DMA channel is disabled. 1 - DMA channel is enabled.
    -            ENABLEDCHANNELS2: u1,
    -            ///  Enable status for DMA channels. Each bit represents one channel: 0 - DMA channel is disabled. 1 - DMA channel is enabled.
    -            ENABLEDCHANNELS3: u1,
    -            ///  Enable status for DMA channels. Each bit represents one channel: 0 - DMA channel is disabled. 1 - DMA channel is enabled.
    -            ENABLEDCHANNELS4: u1,
    -            ///  Enable status for DMA channels. Each bit represents one channel: 0 - DMA channel is disabled. 1 - DMA channel is enabled.
    -            ENABLEDCHANNELS5: u1,
    -            ///  Enable status for DMA channels. Each bit represents one channel: 0 - DMA channel is disabled. 1 - DMA channel is enabled.
    -            ENABLEDCHANNELS6: u1,
    -            ///  Enable status for DMA channels. Each bit represents one channel: 0 - DMA channel is disabled. 1 - DMA channel is enabled.
    -            ENABLEDCHANNELS7: u1,
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u24,
    -        }),
    -        ///  DMA Software Burst Request Register
    -        SOFTBREQ: mmio.Mmio(packed struct(u32) {
    -            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    -            SOFTBREQ0: u1,
    -            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    -            SOFTBREQ1: u1,
    -            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    -            SOFTBREQ2: u1,
    -            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    -            SOFTBREQ3: u1,
    -            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    -            SOFTBREQ4: u1,
    -            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    -            SOFTBREQ5: u1,
    -            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    -            SOFTBREQ6: u1,
    -            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    -            SOFTBREQ7: u1,
    -            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    -            SOFTBREQ8: u1,
    -            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    -            SOFTBREQ9: u1,
    -            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    -            SOFTBREQ10: u1,
    -            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    -            SOFTBREQ11: u1,
    -            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    -            SOFTBREQ12: u1,
    -            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    -            SOFTBREQ13: u1,
    -            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    -            SOFTBREQ14: u1,
    -            ///  Software burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral Description (refer to Table 672 for peripheral hardware connections to the DMA controller): 0 - writing 0 has no effect. 1 - writing 1 generates a DMA burst request for the corresponding request line.
    -            SOFTBREQ15: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u16,
    -        }),
    -        ///  DMA Software Single Request Register
    -        SOFTSREQ: mmio.Mmio(packed struct(u32) {
    -            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    -            SOFTSREQ0: u1,
    -            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    -            SOFTSREQ1: u1,
    -            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    -            SOFTSREQ2: u1,
    -            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    -            SOFTSREQ3: u1,
    -            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    -            SOFTSREQ4: u1,
    -            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    -            SOFTSREQ5: u1,
    -            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    -            SOFTSREQ6: u1,
    -            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    -            SOFTSREQ7: u1,
    -            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    -            SOFTSREQ8: u1,
    -            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    -            SOFTSREQ9: u1,
    -            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    -            SOFTSREQ10: u1,
    -            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    -            SOFTSREQ11: u1,
    -            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    -            SOFTSREQ12: u1,
    -            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    -            SOFTSREQ13: u1,
    -            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    -            SOFTSREQ14: u1,
    -            ///  Software single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA single transfer request for the corresponding request line.
    -            SOFTSREQ15: u1,
    -            ///  Reserved. Read undefined. Write reserved bits as zero.
    -            RESERVED: u16,
    -        }),
    -        ///  DMA Software Last Burst Request Register
    -        SOFTLBREQ: mmio.Mmio(packed struct(u32) {
    -            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    -            SOFTLBREQ0: u1,
    -            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    -            SOFTLBREQ1: u1,
    -            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    -            SOFTLBREQ2: u1,
    -            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    -            SOFTLBREQ3: u1,
    -            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    -            SOFTLBREQ4: u1,
    -            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    -            SOFTLBREQ5: u1,
    -            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    -            SOFTLBREQ6: u1,
    -            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    -            SOFTLBREQ7: u1,
    -            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    -            SOFTLBREQ8: u1,
    -            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    -            SOFTLBREQ9: u1,
    -            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    -            SOFTLBREQ10: u1,
    -            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    -            SOFTLBREQ11: u1,
    -            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    -            SOFTLBREQ12: u1,
    -            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    -            SOFTLBREQ13: u1,
    -            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    -            SOFTLBREQ14: u1,
    -            ///  Software last burst request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last burst request for the corresponding request line.
    -            SOFTLBREQ15: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u16,
    -        }),
    -        ///  DMA Software Last Single Request Register
    -        SOFTLSREQ: mmio.Mmio(packed struct(u32) {
    -            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    -            SOFTLSREQ0: u1,
    -            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    -            SOFTLSREQ1: u1,
    -            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    -            SOFTLSREQ2: u1,
    -            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    -            SOFTLSREQ3: u1,
    -            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    -            SOFTLSREQ4: u1,
    -            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    -            SOFTLSREQ5: u1,
    -            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    -            SOFTLSREQ6: u1,
    -            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    -            SOFTLSREQ7: u1,
    -            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    -            SOFTLSREQ8: u1,
    -            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    -            SOFTLSREQ9: u1,
    -            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    -            SOFTLSREQ10: u1,
    -            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    -            SOFTLSREQ11: u1,
    -            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    -            SOFTLSREQ12: u1,
    -            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    -            SOFTLSREQ13: u1,
    -            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    -            SOFTLSREQ14: u1,
    -            ///  Software last single transfer request flags for each of 16 possible sources. Each bit represents one DMA request line or peripheral function: 0 - writing 0 has no effect. 1 - writing 1 generates a DMA last single transfer request for the corresponding request line.
    -            SOFTLSREQ15: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u16,
    -        }),
    -        ///  DMA Configuration Register
    -        CONFIG: mmio.Mmio(packed struct(u32) {
    -            ///  DMA Controller enable: 0 = disabled (default). Disabling the DMA Controller reduces power consumption. 1 = enabled.
    -            E: u1,
    -            ///  AHB Master endianness configuration: 0 = little-endian mode (default). 1 = big-endian mode.
    -            M: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u30,
    -        }),
    -        ///  DMA Synchronization Register
    -        SYNC: mmio.Mmio(packed struct(u32) {
    -            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    -            DMACSYNC0: u1,
    -            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    -            DMACSYNC1: u1,
    -            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    -            DMACSYNC2: u1,
    -            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    -            DMACSYNC3: u1,
    -            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    -            DMACSYNC4: u1,
    -            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    -            DMACSYNC5: u1,
    -            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    -            DMACSYNC6: u1,
    -            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    -            DMACSYNC7: u1,
    -            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    -            DMACSYNC8: u1,
    -            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    -            DMACSYNC9: u1,
    -            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    -            DMACSYNC10: u1,
    -            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    -            DMACSYNC11: u1,
    -            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    -            DMACSYNC12: u1,
    -            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    -            DMACSYNC13: u1,
    -            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    -            DMACSYNC14: u1,
    -            ///  Controls the synchronization logic for DMA request signals. Each bit represents one set of DMA request lines as described in the preceding text: 0 - synchronization logic for the corresponding DMA request signals are enabled. 1 - synchronization logic for the corresponding DMA request signals are disabled.
    -            DMACSYNC15: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u16,
    -        }),
    -    };
    -
    -    ///  Ethernet
    -    pub const EMAC = extern struct {
    -        ///  MAC configuration register 1.
    -        MAC1: mmio.Mmio(packed struct(u32) {
    -            ///  RECEIVE ENABLE. Set this to allow receive frames to be received. Internally the MAC synchronizes this control bit to the incoming receive stream.
    -            RXENABLE: u1,
    -            ///  PASS ALL RECEIVE FRAMES. When enabled (set to 1), the MAC will pass all frames regardless of type (normal vs. Control). When disabled, the MAC does not pass valid Control frames.
    -            PARF: u1,
    -            ///  RX FLOW CONTROL. When enabled (set to 1), the MAC acts upon received PAUSE Flow Control frames. When disabled, received PAUSE Flow Control frames are ignored.
    -            RXFLOWCTRL: u1,
    -            ///  TX FLOW CONTROL. When enabled (set to 1), PAUSE Flow Control frames are allowed to be transmitted. When disabled, Flow Control frames are blocked.
    -            TXFLOWCTRL: u1,
    -            ///  Setting this bit will cause the MAC Transmit interface to be looped back to the MAC Receive interface. Clearing this bit results in normal operation.
    -            LOOPBACK: u1,
    -            ///  Unused
    -            RESERVED: u3,
    -            ///  Setting this bit will put the Transmit Function logic in reset.
    -            RESETTX: u1,
    -            ///  Setting this bit resets the MAC Control Sublayer / Transmit logic. The MCS logic implements flow control.
    -            RESETMCSTX: u1,
    -            ///  Setting this bit will put the Ethernet receive logic in reset.
    -            RESETRX: u1,
    -            ///  Setting this bit resets the MAC Control Sublayer / Receive logic. The MCS logic implements flow control.
    -            RESETMCSRX: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u2,
    -            ///  SIMULATION RESET. Setting this bit will cause a reset to the random number generator within the Transmit Function.
    -            SIMRESET: u1,
    -            ///  SOFT RESET. Setting this bit will put all modules within the MAC in reset except the Host Interface.
    -            SOFTRESET: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u16,
    -        }),
    -        ///  MAC configuration register 2.
    -        MAC2: mmio.Mmio(packed struct(u32) {
    -            ///  When enabled (set to 1), the MAC operates in Full-Duplex mode. When disabled, the MAC operates in Half-Duplex mode.
    -            FULLDUPLEX: u1,
    -            ///  FRAMELENGTH CHECKING. When enabled (set to 1), both transmit and receive frame lengths are compared to the Length/Type field. If the Length/Type field represents a length then the check is performed. Mismatches are reported in the StatusInfo word for each received frame.
    -            FLC: u1,
    -            ///  HUGE FRAME ENABLEWhen enabled (set to 1), frames of any length are transmitted and received.
    -            HFEN: u1,
    -            ///  DELAYED CRC. This bit determines the number of bytes, if any, of proprietary header information that exist on the front of IEEE 802.3 frames. When 1, four bytes of header (ignored by the CRC function) are added. When 0, there is no proprietary header.
    -            DELAYEDCRC: u1,
    -            ///  CRC ENABLESet this bit to append a CRC to every frame whether padding was required or not. Must be set if PAD/CRC ENABLE is set. Clear this bit if frames presented to the MAC contain a CRC.
    -            CRCEN: u1,
    -            ///  PAD CRC ENABLE. Set this bit to have the MAC pad all short frames. Clear this bit if frames presented to the MAC have a valid length. This bit is used in conjunction with AUTO PAD ENABLE and VLAN PAD ENABLE. See Table 153 - Pad Operation for details on the pad function.
    -            PADCRCEN: u1,
    -            ///  VLAN PAD ENABLE. Set this bit to cause the MAC to pad all short frames to 64 bytes and append a valid CRC. Consult Table 153 - Pad Operation for more information on the various padding features. Note: This bit is ignored if PAD / CRC ENABLE is cleared.
    -            VLANPADEN: u1,
    -            ///  AUTODETECTPAD ENABLE. Set this bit to cause the MAC to automatically detect the type of frame, either tagged or un-tagged, by comparing the two octets following the source address with 0x8100 (VLAN Protocol ID) and pad accordingly. Table 153 - Pad Operation provides a description of the pad function based on the configuration of this register. Note: This bit is ignored if PAD / CRC ENABLE is cleared.
    -            AUTODETPADEN: u1,
    -            ///  PURE PREAMBLE ENFORCEMEN. When enabled (set to 1), the MAC will verify the content of the preamble to ensure it contains 0x55 and is error-free. A packet with an incorrect preamble is discarded. When disabled, no preamble checking is performed.
    -            PPENF: u1,
    -            ///  LONG PREAMBLE ENFORCEMENT. When enabled (set to 1), the MAC only allows receive packets which contain preamble fields less than 12 bytes in length. When disabled, the MAC allows any length preamble as per the Standard.
    -            LPENF: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u2,
    -            ///  When enabled (set to 1), the MAC will immediately retransmit following a collision rather than using the Binary Exponential Backoff algorithm as specified in the Standard.
    -            NOBACKOFF: u1,
    -            ///  BACK PRESSURE / NO BACKOFF. When enabled (set to 1), after the MAC incidentally causes a collision during back pressure, it will immediately retransmit without backoff, reducing the chance of further collisions and ensuring transmit packets get sent.
    -            BP_NOBACKOFF: u1,
    -            ///  When enabled (set to 1) the MAC will defer to carrier indefinitely as per the Standard. When disabled, the MAC will abort when the excessive deferral limit is reached.
    -            EXCESSDEFER: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u17,
    -        }),
    -        ///  Back-to-Back Inter-Packet-Gap register.
    -        IPGT: mmio.Mmio(packed struct(u32) {
    -            ///  BACK-TO-BACK INTER-PACKET-GAP.This is a programmable field representing the nibble time offset of the minimum possible period between the end of any transmitted packet to the beginning of the next. In Full-Duplex mode, the register value should be the desired period in nibble times minus 3. In Half-Duplex mode, the register value should be the desired period in nibble times minus 6. In Full-Duplex the recommended setting is 0x15 (21d), which represents the minimum IPG of 960 ns (in 100 Mbps mode) or 9.6 us (in 10 Mbps mode). In Half-Duplex the recommended setting is 0x12 (18d), which also represents the minimum IPG of 960 ns (in 100 Mbps mode) or 9.6 us (in 10 Mbps mode).
    -            BTOBINTEGAP: u7,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u25,
    -        }),
    -        ///  Non Back-to-Back Inter-Packet-Gap register.
    -        IPGR: mmio.Mmio(packed struct(u32) {
    -            ///  NON-BACK-TO-BACK INTER-PACKET-GAP PART2. This is a programmable field representing the Non-Back-to-Back Inter-Packet-Gap. The recommended value is 0x12 (18d), which represents the minimum IPG of 960 ns (in 100 Mbps mode) or 9.6 us (in 10 Mbps mode).
    -            NBTOBINTEGAP2: u7,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u1,
    -            ///  NON-BACK-TO-BACK INTER-PACKET-GAP PART1. This is a programmable field representing the optional carrierSense window referenced in IEEE 802.3/4.2.3.2.1 'Carrier Deference'. If carrier is detected during the timing of IPGR1, the MAC defers to carrier. If, however, carrier becomes active after IPGR1, the MAC continues timing IPGR2 and transmits, knowingly causing a collision, thus ensuring fair access to medium. Its range of values is 0x0 to IPGR2. The recommended value is 0xC (12d)
    -            NBTOBINTEGAP1: u7,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u17,
    -        }),
    -        ///  Collision window / Retry register.
    -        CLRT: mmio.Mmio(packed struct(u32) {
    -            ///  RETRANSMISSION MAXIMUM.This is a programmable field specifying the number of retransmission attempts following a collision before aborting the packet due to excessive collisions. The Standard specifies the attemptLimit to be 0xF (15d). See IEEE 802.3/4.2.3.2.5.
    -            RETRANSMAX: u4,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u4,
    -            ///  COLLISION WINDOW. This is a programmable field representing the slot time or collision window during which collisions occur in properly configured networks. The default value of 0x37 (55d) represents a 56 byte window following the preamble and SFD.
    -            COLLWIN: u6,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u18,
    -        }),
    -        ///  Maximum Frame register.
    -        MAXF: mmio.Mmio(packed struct(u32) {
    -            ///  MAXIMUM FRAME LENGTH. This field resets to the value 0x0600, which represents a maximum receive frame of 1536 octets. An untagged maximum size Ethernet frame is 1518 octets. A tagged frame adds four octets for a total of 1522 octets. If a shorter maximum length restriction is desired, program this 16-bit field.
    -            MAXFLEN: u16,
    -            ///  Unused
    -            RESERVED: u16,
    -        }),
    -        ///  PHY Support register.
    -        SUPP: mmio.Mmio(packed struct(u32) {
    -            ///  Unused
    -            RESERVED: u8,
    -            ///  This bit configures the Reduced MII logic for the current operating speed. When set, 100 Mbps mode is selected. When cleared, 10 Mbps mode is selected.
    -            SPEED: u1,
    -            ///  Unused
    -            RESERVED: u23,
    -        }),
    -        ///  Test register.
    -        TEST: mmio.Mmio(packed struct(u32) {
    -            ///  SHORTCUT PAUSE QUANTA. This bit reduces the effective PAUSE quanta from 64 byte-times to 1 byte-time.
    -            SCPQ: u1,
    -            ///  This bit causes the MAC Control sublayer to inhibit transmissions, just as if a PAUSE Receive Control frame with a nonzero pause time parameter was received.
    -            TESTPAUSE: u1,
    -            ///  TEST BACKPRESSURE. Setting this bit will cause the MAC to assert backpressure on the link. Backpressure causes preamble to be transmitted, raising carrier sense. A transmit packet from the system will be sent during backpressure.
    -            TESTBP: u1,
    -            ///  Unused
    -            RESERVED: u29,
    -        }),
    -        ///  MII Mgmt Configuration register.
    -        MCFG: mmio.Mmio(packed struct(u32) {
    -            ///  SCAN INCREMENT. Set this bit to cause the MII Management hardware to perform read cycles across a range of PHYs. When set, the MII Management hardware will perform read cycles from address 1 through the value set in PHY ADDRESS[4:0]. Clear this bit to allow continuous reads of the same PHY.
    -            SCANINC: u1,
    -            ///  SUPPRESS PREAMBLE. Set this bit to cause the MII Management hardware to perform read/write cycles without the 32-bit preamble field. Clear this bit to cause normal cycles to be performed. Some PHYs support suppressed preamble.
    -            SUPPPREAMBLE: u1,
    -            ///  CLOCK SELECT. This field is used by the clock divide logic in creating the MII Management Clock (MDC) which IEEE 802.3u defines to be no faster than 2.5 MHz. Some PHYs support clock rates up to 12.5 MHz, however. The AHB bus clock (HCLK) is divided by the specified amount. Refer to Table 160 below for the definition of values for this field.
    -            CLOCKSEL: u4,
    -            ///  Unused
    -            RESERVED: u9,
    -            ///  RESET MII MGMT. This bit resets the MII Management hardware.
    -            RESETMIIMGMT: u1,
    -            ///  Unused
    -            RESERVED: u16,
    -        }),
    -        ///  MII Mgmt Command register.
    -        MCMD: mmio.Mmio(packed struct(u32) {
    -            ///  This bit causes the MII Management hardware to perform a single Read cycle. The Read data is returned in Register MRDD (MII Mgmt Read Data).
    -            READ: u1,
    -            ///  This bit causes the MII Management hardware to perform Read cycles continuously. This is useful for monitoring Link Fail for example.
    -            SCAN: u1,
    -            ///  Unused
    -            RESERVED: u30,
    -        }),
    -        ///  MII Mgmt Address register.
    -        MADR: mmio.Mmio(packed struct(u32) {
    -            ///  REGISTER ADDRESS. This field represents the 5-bit Register Address field of Mgmt cycles. Up to 32 registers can be accessed.
    -            REGADDR: u5,
    -            ///  Unused
    -            RESERVED: u3,
    -            ///  PHY ADDRESS. This field represents the 5-bit PHY Address field of Mgmt cycles. Up to 31 PHYs can be addressed (0 is reserved).
    -            PHYADDR: u5,
    -            ///  Unused
    -            RESERVED: u19,
    -        }),
    -        ///  MII Mgmt Write Data register.
    -        MWTD: mmio.Mmio(packed struct(u32) {
    -            ///  WRITE DATA. When written, an MII Mgmt write cycle is performed using the 16-bit data and the pre-configured PHY and Register addresses from the MII Mgmt Address register (MADR).
    -            WRITEDATA: u16,
    -            ///  Unused
    -            RESERVED: u16,
    -        }),
    -        ///  MII Mgmt Read Data register.
    -        MRDD: mmio.Mmio(packed struct(u32) {
    -            ///  READ DATA. Following an MII Mgmt Read Cycle, the 16-bit data can be read from this location.
    -            READDATA: u16,
    -            ///  Unused
    -            RESERVED: u16,
    -        }),
    -        ///  MII Mgmt Indicators register.
    -        MIND: mmio.Mmio(packed struct(u32) {
    -            ///  When 1 is returned - indicates MII Mgmt is currently performing an MII Mgmt Read or Write cycle.
    -            BUSY: u1,
    -            ///  When 1 is returned - indicates a scan operation (continuous MII Mgmt Read cycles) is in progress.
    -            SCANNING: u1,
    -            ///  When 1 is returned - indicates MII Mgmt Read cycle has not completed and the Read Data is not yet valid.
    -            NOTVALID: u1,
    -            ///  When 1 is returned - indicates that an MII Mgmt link fail has occurred.
    -            MIILINKFAIL: u1,
    -            ///  Unused
    -            RESERVED: u28,
    -        }),
    -        reserved64: [8]u8,
    -        ///  Station Address 0 register.
    -        SA0: mmio.Mmio(packed struct(u32) {
    -            ///  STATION ADDRESS, 2nd octet. This field holds the second octet of the station address.
    -            SADDR2: u8,
    -            ///  STATION ADDRESS, 1st octet. This field holds the first octet of the station address.
    -            SADDR1: u8,
    -            ///  Unused
    -            RESERVED: u16,
    -        }),
    -        ///  Station Address 1 register.
    -        SA1: mmio.Mmio(packed struct(u32) {
    -            ///  STATION ADDRESS, 4th octet. This field holds the fourth octet of the station address.
    -            SADDR4: u8,
    -            ///  STATION ADDRESS, 3rd octet. This field holds the third octet of the station address.
    -            SADDR3: u8,
    -            ///  Unused
    -            RESERVED: u16,
    -        }),
    -        ///  Station Address 2 register.
    -        SA2: mmio.Mmio(packed struct(u32) {
    -            ///  STATION ADDRESS, 6th octet. This field holds the sixth octet of the station address.
    -            SADDR6: u8,
    -            ///  STATION ADDRESS, 5th octet. This field holds the fifth octet of the station address.
    -            SADDR5: u8,
    -            ///  Unused
    -            RESERVED: u16,
    -        }),
    -        reserved256: [180]u8,
    -        ///  Command register.
    -        COMMAND: mmio.Mmio(packed struct(u32) {
    -            ///  Enable receive.
    -            RXENABLE: u1,
    -            ///  Enable transmit.
    -            TXENABLE: u1,
    -            ///  Unused
    -            RESERVED: u1,
    -            ///  When a 1 is written, all datapaths and the host registers are reset. The MAC needs to be reset separately.
    -            REGRESET: u1,
    -            ///  When a 1 is written, the transmit datapath is reset.
    -            TXRESET: u1,
    -            ///  When a 1 is written, the receive datapath is reset.
    -            RXRESET: u1,
    -            ///  When set to 1 , passes runt frames s1maller than 64 bytes to memory unless they have a CRC error. If 0 runt frames are filtered out.
    -            PASSRUNTFRAME: u1,
    -            ///  When set to 1 , disables receive filtering i.e. all frames received are written to memory.
    -            PASSRXFILTER: u1,
    -            ///  Enable IEEE 802.3 / clause 31 flow control sending pause frames in full duplex and continuous preamble in half duplex.
    -            TXFLOWCONTROL: u1,
    -            ///  When set to 1 , RMII mode is selected; if 0, MII mode is selected.
    -            RMII: u1,
    -            ///  When set to 1 , indicates full duplex operation.
    -            FULLDUPLEX: u1,
    -            ///  Unused
    -            RESERVED: u21,
    -        }),
    -        ///  Status register.
    -        STATUS: mmio.Mmio(packed struct(u32) {
    -            ///  If 1, the receive channel is active. If 0, the receive channel is inactive.
    -            RXSTATUS: u1,
    -            ///  If 1, the transmit channel is active. If 0, the transmit channel is inactive.
    -            TXSTATUS: u1,
    -            ///  Unused
    -            RESERVED: u30,
    -        }),
    -        ///  Receive descriptor base address register.
    -        RXDESCRIPTOR: mmio.Mmio(packed struct(u32) {
    -            ///  Fixed to 00
    -            RESERVED: u2,
    -            ///  MSBs of receive descriptor base address.
    -            RXDESCRIPTOR: u30,
    -        }),
    -        ///  Receive status base address register.
    -        RXSTATUS: mmio.Mmio(packed struct(u32) {
    -            ///  Fixed to 000
    -            RESERVED: u3,
    -            ///  MSBs of receive status base address.
    -            RXSTATUS: u29,
    -        }),
    -        ///  Receive number of descriptors register.
    -        RXDESCRIPTORNUMBER: mmio.Mmio(packed struct(u32) {
    -            ///  RxDescriptorNumber. Number of descriptors in the descriptor array for which RxDescriptor is the base address. The number of descriptors is minus one encoded.
    -            RXDESCRIPTORN: u16,
    -            ///  Unused
    -            RESERVED: u16,
    -        }),
    -        ///  Receive produce index register.
    -        RXPRODUCEINDEX: mmio.Mmio(packed struct(u32) {
    -            ///  Index of the descriptor that is going to be filled next by the receive datapath.
    -            RXPRODUCEIX: u16,
    -            ///  Unused
    -            RESERVED: u16,
    -        }),
    -        ///  Receive consume index register.
    -        RXCONSUMEINDEX: mmio.Mmio(packed struct(u32) {
    -            ///  Index of the descriptor that is going to be processed next by the receive
    -            RXCONSUMEIX: u16,
    -            ///  Unused
    -            RESERVED: u16,
    -        }),
    -        ///  Transmit descriptor base address register.
    -        TXDESCRIPTOR: mmio.Mmio(packed struct(u32) {
    -            ///  Fixed to 00
    -            RESERVED: u2,
    -            ///  TxDescriptor. MSBs of transmit descriptor base address.
    -            TXD: u30,
    -        }),
    -        ///  Transmit status base address register.
    -        TXSTATUS: mmio.Mmio(packed struct(u32) {
    -            ///  Fixed to 00
    -            RESERVED: u2,
    -            ///  TxStatus. MSBs of transmit status base address.
    -            TXSTAT: u30,
    -        }),
    -        ///  Transmit number of descriptors register.
    -        TXDESCRIPTORNUMBER: mmio.Mmio(packed struct(u32) {
    -            ///  TxDescriptorNumber. Number of descriptors in the descriptor array for which TxDescriptor is the base address. The register is minus one encoded.
    -            TXDN: u16,
    -            ///  Unused
    -            RESERVED: u16,
    -        }),
    -        ///  Transmit produce index register.
    -        TXPRODUCEINDEX: mmio.Mmio(packed struct(u32) {
    -            ///  TxProduceIndex. Index of the descriptor that is going to be filled next by the transmit software driver.
    -            TXPI: u16,
    -            ///  Unused
    -            RESERVED: u16,
    -        }),
    -        ///  Transmit consume index register.
    -        TXCONSUMEINDEX: mmio.Mmio(packed struct(u32) {
    -            ///  TxConsumeIndex. Index of the descriptor that is going to be transmitted next by the transmit datapath.
    -            TXCI: u16,
    -            ///  Unused
    -            RESERVED: u16,
    -        }),
    -        reserved344: [40]u8,
    -        ///  Transmit status vector 0 register.
    -        TSV0: mmio.Mmio(packed struct(u32) {
    -            ///  CRC error. The attached CRC in the packet did not match the internally generated CRC.
    -            CRCERR: u1,
    -            ///  Length check error. Indicates the frame length field does not match the actual number of data items and is not a type field.
    -            LCE: u1,
    -            ///  Length out of range. Indicates that frame type/length field was larger than 1500 bytes. The EMAC doesn't distinguish the frame type and frame length, so, e.g. when the IP(0x8000) or ARP(0x0806) packets are received, it compares the frame type with the max length and gives the "Length out of range" error. In fact, this bit is not an error indication, but simply a statement by the chip regarding the status of the received frame.
    -            LOR: u1,
    -            ///  Transmission of packet was completed.
    -            DONE: u1,
    -            ///  Packet's destination was a multicast address.
    -            MULTICAST: u1,
    -            ///  Packet's destination was a broadcast address.
    -            BROADCAST: u1,
    -            ///  Packet was deferred for at least one attempt, but less than an excessive defer.
    -            PACKETDEFER: u1,
    -            ///  Excessive Defer. Packet was deferred in excess of 6071 nibble times in 100 Mbps or 24287 bit times in 10 Mbps mode.
    -            EXDF: u1,
    -            ///  Excessive Collision. Packet was aborted due to exceeding of maximum allowed number of collisions.
    -            EXCOL: u1,
    -            ///  Late Collision. Collision occurred beyond collision window, 512 bit times.
    -            LCOL: u1,
    -            ///  Byte count in frame was greater than can be represented in the transmit byte count field in TSV1.
    -            GIANT: u1,
    -            ///  Host side caused buffer underrun.
    -            UNDERRUN: u1,
    -            ///  The total number of bytes transferred including collided attempts.
    -            TOTALBYTES: u16,
    -            ///  The frame was a control frame.
    -            CONTROLFRAME: u1,
    -            ///  The frame was a control frame with a valid PAUSE opcode.
    -            PAUSE: u1,
    -            ///  Carrier-sense method backpressure was previously applied.
    -            BACKPRESSURE: u1,
    -            ///  Frame's length/type field contained 0x8100 which is the VLAN protocol identifier.
    -            VLAN: u1,
    -        }),
    -        ///  Transmit status vector 1 register.
    -        TSV1: mmio.Mmio(packed struct(u32) {
    -            ///  Transmit byte count. The total number of bytes in the frame, not counting the collided bytes.
    -            TBC: u16,
    -            ///  Transmit collision count. Number of collisions the current packet incurred during transmission attempts. The maximum number of collisions (16) cannot be represented.
    -            TCC: u4,
    -            ///  Unused
    -            RESERVED: u12,
    -        }),
    -        ///  Receive status vector register.
    -        RSV: mmio.Mmio(packed struct(u32) {
    -            ///  Received byte count. Indicates length of received frame.
    -            RBC: u16,
    -            ///  Packet previously ignored. Indicates that a packet was dropped.
    -            PPI: u1,
    -            ///  RXDV event previously seen. Indicates that the last receive event seen was not long enough to be a valid packet.
    -            RXDVSEEN: u1,
    -            ///  Carrier event previously seen. Indicates that at some time since the last receive statistics, a carrier event was detected.
    -            CESEEN: u1,
    -            ///  Receive code violation. Indicates that received PHY data does not represent a valid receive code.
    -            RCV: u1,
    -            ///  CRC error. The attached CRC in the packet did not match the internally generated CRC.
    -            CRCERR: u1,
    -            ///  Length check error. Indicates the frame length field does not match the actual number of data items and is not a type field.
    -            LCERR: u1,
    -            ///  Length out of range. Indicates that frame type/length field was larger than 1518 bytes. The EMAC doesn't distinguish the frame type and frame length, so, e.g. when the IP(0x8000) or ARP(0x0806) packets are received, it compares the frame type with the max length and gives the "Length out of range" error. In fact, this bit is not an error indication, but simply a statement by the chip regarding the status of the received frame.
    -            LOR: u1,
    -            ///  Receive OK. The packet had valid CRC and no symbol errors.
    -            ROK: u1,
    -            ///  The packet destination was a multicast address.
    -            MULTICAST: u1,
    -            ///  The packet destination was a broadcast address.
    -            BROADCAST: u1,
    -            ///  Indicates that after the end of packet another 1-7 bits were received. A single nibble, called dribble nibble, is formed but not sent out.
    -            DRIBBLENIBBLE: u1,
    -            ///  The frame was a control frame.
    -            CONTROLFRAME: u1,
    -            ///  The frame was a control frame with a valid PAUSE opcode.
    -            PAUSE: u1,
    -            ///  Unsupported Opcode. The current frame was recognized as a Control Frame but contains an unknown opcode.
    -            UO: u1,
    -            ///  Frame's length/type field contained 0x8100 which is the VLAN protocol identifier.
    -            VLAN: u1,
    -            ///  Unused
    -            RESERVED: u1,
    -        }),
    -        reserved368: [12]u8,
    -        ///  Flow control counter register.
    -        FLOWCONTROLCOUNTER: mmio.Mmio(packed struct(u32) {
    -            ///  MirrorCounter. In full duplex mode the MirrorCounter specifies the number of cycles before re-issuing the Pause control frame.
    -            MC: u16,
    -            ///  PauseTimer. In full-duplex mode the PauseTimer specifies the value that is inserted into the pause timer field of a pause flow control frame. In half duplex mode the PauseTimer specifies the number of backpressure cycles.
    -            PT: u16,
    -        }),
    -        ///  Flow control status register.
    -        FLOWCONTROLSTATUS: mmio.Mmio(packed struct(u32) {
    -            ///  MirrorCounterCurrent. In full duplex mode this register represents the current value of the datapath's mirror counter which counts up to the value specified by the MirrorCounter field in the FlowControlCounter register. In half duplex mode the register counts until it reaches the value of the PauseTimer bits in the FlowControlCounter register.
    -            MCC: u16,
    -            ///  Unused
    -            RESERVED: u16,
    -        }),
    -        reserved512: [136]u8,
    -        ///  Receive filter control register.
    -        RXFILTERCTRL: mmio.Mmio(packed struct(u32) {
    -            ///  AcceptUnicastEn. When set to 1, all unicast frames are accepted.
    -            AUE: u1,
    -            ///  AcceptBroadcastEn. When set to 1, all broadcast frames are accepted.
    -            ABE: u1,
    -            ///  AcceptMulticastEn. When set to 1, all multicast frames are accepted.
    -            AME: u1,
    -            ///  AcceptUnicastHashEn. When set to 1, unicast frames that pass the imperfect hash filter are accepted.
    -            AUHE: u1,
    -            ///  AcceptMulticastHashEn. When set to 1, multicast frames that pass the imperfect hash filter are accepted.
    -            AMHE: u1,
    -            ///  AcceptPerfectEn. When set to 1, the frames with a destination address identical to the station address are accepted.
    -            APE: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u6,
    -            ///  MagicPacketEnWoL. When set to 1, the result of the magic packet filter will generate a WoL interrupt when there is a match.
    -            MPEW: u1,
    -            ///  RxFilterEnWoL. When set to 1, the result of the perfect address matching filter and the imperfect hash filter will generate a WoL interrupt when there is a match.
    -            RFEW: u1,
    -            ///  Unused
    -            RESERVED: u18,
    -        }),
    -        ///  Receive filter WoL status register.
    -        RXFILTERWOLSTATUS: mmio.Mmio(packed struct(u32) {
    -            ///  AcceptUnicastWoL. When the value is 1, a unicast frames caused WoL.
    -            AUW: u1,
    -            ///  AcceptBroadcastWoL. When the value is 1, a broadcast frame caused WoL.
    -            ABW: u1,
    -            ///  AcceptMulticastWoL. When the value is 1, a multicast frame caused WoL.
    -            AMW: u1,
    -            ///  AcceptUnicastHashWoL. When the value is 1, a unicast frame that passes the imperfect hash filter caused WoL.
    -            AUHW: u1,
    -            ///  AcceptMulticastHashWoL. When the value is 1, a multicast frame that passes the imperfect hash filter caused WoL.
    -            AMHW: u1,
    -            ///  AcceptPerfectWoL. When the value is 1, the perfect address matching filter caused WoL.
    -            APW: u1,
    -            ///  Unused
    -            RESERVED: u1,
    -            ///  RxFilterWoL. When the value is 1, the receive filter caused WoL.
    -            RFW: u1,
    -            ///  MagicPacketWoL. When the value is 1, the magic packet filter caused WoL.
    -            MPW: u1,
    -            ///  Unused
    -            RESERVED: u23,
    -        }),
    -        ///  Receive filter WoL clear register.
    -        RXFILTERWOLCLEAR: mmio.Mmio(packed struct(u32) {
    -            ///  AcceptUnicastWoLClr. When a 1 is written, the corresponding status bit in the RxFilterWoLStatus register is cleared.
    -            AUWCLR: u1,
    -            ///  AcceptBroadcastWoLClr. When a 1 is written, the corresponding status bit in the RxFilterWoLStatus register is cleared.
    -            ABWCLR: u1,
    -            ///  AcceptMulticastWoLClr. When a 1 is written, the corresponding status bit in the RxFilterWoLStatus register is cleared.
    -            AMWCLR: u1,
    -            ///  AcceptUnicastHashWoLClr. When a 1 is written, the corresponding status bit in the RxFilterWoLStatus register is cleared.
    -            AUHWCLR: u1,
    -            ///  AcceptMulticastHashWoLClr. When a 1 is written, the corresponding status bit in the RxFilterWoLStatus register is cleared.
    -            AMHWCLR: u1,
    -            ///  AcceptPerfectWoLClr. When a 1 is written, the corresponding status bit in the RxFilterWoLStatus register is cleared.
    -            APWCLR: u1,
    -            ///  Unused
    -            RESERVED: u1,
    -            ///  RxFilterWoLClr. When a 1 is written, the corresponding status bit in the RxFilterWoLStatus register is cleared.
    -            RFWCLR: u1,
    -            ///  MagicPacketWoLClr. When a 1 is written, the corresponding status bit in the RxFilterWoLStatus register is cleared.
    -            MPWCLR: u1,
    -            ///  Unused
    -            RESERVED: u23,
    -        }),
    -        reserved528: [4]u8,
    -        ///  Hash filter table LSBs register.
    -        HASHFILTERL: mmio.Mmio(packed struct(u32) {
    -            ///  HashFilterL. Bits 31:0 of the imperfect filter hash table for receive filtering.
    -            HFL: u32,
    -        }),
    -        ///  Hash filter table MSBs register.
    -        HASHFILTERH: mmio.Mmio(packed struct(u32) {
    -            ///  Bits 63:32 of the imperfect filter hash table for receive filtering.
    -            HFH: u32,
    -        }),
    -        reserved4064: [3528]u8,
    -        ///  Interrupt status register.
    -        INTSTATUS: mmio.Mmio(packed struct(u32) {
    -            ///  Interrupt set on a fatal overrun error in the receive queue. The fatal interrupt should be resolved by a Rx soft-reset. The bit is not set when there is a nonfatal overrun error.
    -            RXOVERRUNINT: u1,
    -            ///  Interrupt trigger on receive errors: AlignmentError, RangeError, LengthError, SymbolError, CRCError or NoDescriptor or Overrun.
    -            RXERRORINT: u1,
    -            ///  Interrupt triggered when all receive descriptors have been processed i.e. on the transition to the situation where ProduceIndex == ConsumeIndex.
    -            RXFINISHEDINT: u1,
    -            ///  Interrupt triggered when a receive descriptor has been processed while the Interrupt bit in the Control field of the descriptor was set.
    -            RXDONEINT: u1,
    -            ///  Interrupt set on a fatal underrun error in the transmit queue. The fatal interrupt should be resolved by a Tx soft-reset. The bit is not set when there is a nonfatal underrun error.
    -            TXUNDERRUNINT: u1,
    -            ///  Interrupt trigger on transmit errors: LateCollision, ExcessiveCollision and ExcessiveDefer, NoDescriptor or Underrun.
    -            TXERRORINT: u1,
    -            ///  Interrupt triggered when all transmit descriptors have been processed i.e. on the transition to the situation where ProduceIndex == ConsumeIndex.
    -            TXFINISHEDINT: u1,
    -            ///  Interrupt triggered when a descriptor has been transmitted while the Interrupt bit in the Control field of the descriptor was set.
    -            TXDONEINT: u1,
    -            ///  Unused
    -            RESERVED: u4,
    -            ///  Interrupt triggered by software writing a 1 to the SoftIntSet bit in the IntSet register.
    -            SOFTINT: u1,
    -            ///  Interrupt triggered by a Wake-up event detected by the receive filter.
    -            WAKEUPINT: u1,
    -            ///  Unused
    -            RESERVED: u18,
    -        }),
    -        ///  Interrupt enable register.
    -        INTENABLE: mmio.Mmio(packed struct(u32) {
    -            ///  Enable for interrupt trigger on receive buffer overrun or descriptor underrun situations.
    -            RXOVERRUNINTEN: u1,
    -            ///  Enable for interrupt trigger on receive errors.
    -            RXERRORINTEN: u1,
    -            ///  Enable for interrupt triggered when all receive descriptors have been processed i.e. on the transition to the situation where ProduceIndex == ConsumeIndex.
    -            RXFINISHEDINTEN: u1,
    -            ///  Enable for interrupt triggered when a receive descriptor has been processed while the Interrupt bit in the Control field of the descriptor was set.
    -            RXDONEINTEN: u1,
    -            ///  Enable for interrupt trigger on transmit buffer or descriptor underrun situations.
    -            TXUNDERRUNINTEN: u1,
    -            ///  Enable for interrupt trigger on transmit errors.
    -            TXERRORINTEN: u1,
    -            ///  Enable for interrupt triggered when all transmit descriptors have been processed i.e. on the transition to the situation where ProduceIndex == ConsumeIndex.
    -            TXFINISHEDINTEN: u1,
    -            ///  Enable for interrupt triggered when a descriptor has been transmitted while the Interrupt bit in the Control field of the descriptor was set.
    -            TXDONEINTEN: u1,
    -            ///  Unused
    -            RESERVED: u4,
    -            ///  Enable for interrupt triggered by the SoftInt bit in the IntStatus register, caused by software writing a 1 to the SoftIntSet bit in the IntSet register.
    -            SOFTINTEN: u1,
    -            ///  Enable for interrupt triggered by a Wake-up event detected by the receive filter.
    -            WAKEUPINTEN: u1,
    -            ///  Unused
    -            RESERVED: u18,
    -        }),
    -        ///  Interrupt clear register.
    -        INTCLEAR: mmio.Mmio(packed struct(u32) {
    -            ///  Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.
    -            RXOVERRUNINTCLR: u1,
    -            ///  Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.
    -            RXERRORINTCLR: u1,
    -            ///  Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.
    -            RXFINISHEDINTCLR: u1,
    -            ///  Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.
    -            RXDONEINTCLR: u1,
    -            ///  Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.
    -            TXUNDERRUNINTCLR: u1,
    -            ///  Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.
    -            TXERRORINTCLR: u1,
    -            ///  Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.
    -            TXFINISHEDINTCLR: u1,
    -            ///  Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.
    -            TXDONEINTCLR: u1,
    -            ///  Unused
    -            RESERVED: u4,
    -            ///  Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.
    -            SOFTINTCLR: u1,
    -            ///  Writing a 1 clears the corresponding status bit in interrupt status register IntStatus.
    -            WAKEUPINTCLR: u1,
    -            ///  Unused
    -            RESERVED: u18,
    -        }),
    -        ///  Interrupt set register.
    -        INTSET: mmio.Mmio(packed struct(u32) {
    -            ///  Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.
    -            RXOVERRUNINTSET: u1,
    -            ///  Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.
    -            RXERRORINTSET: u1,
    -            ///  Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.
    -            RXFINISHEDINTSET: u1,
    -            ///  Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.
    -            RXDONEINTSET: u1,
    -            ///  Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.
    -            TXUNDERRUNINTSET: u1,
    -            ///  Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.
    -            TXERRORINTSET: u1,
    -            ///  Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.
    -            TXFINISHEDINTSET: u1,
    -            ///  Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.
    -            TXDONEINTSET: u1,
    -            ///  Unused
    -            RESERVED: u4,
    -            ///  Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.
    -            SOFTINTSET: u1,
    -            ///  Writing a 1 to one sets the corresponding status bit in interrupt status register IntStatus.
    -            WAKEUPINTSET: u1,
    -            ///  Unused
    -            RESERVED: u18,
    -        }),
    -        reserved4084: [4]u8,
    -        ///  Power-down register.
    -        POWERDOWN: mmio.Mmio(packed struct(u32) {
    -            ///  Unused
    -            RESERVED: u31,
    -            ///  PowerDownMACAHB. If true, all AHB accesses will return a read/write error, except accesses to the Power-Down register.
    -            PD: u1,
    -        }),
    -    };
    -
    -    ///  Digital-to-Analog Converter (DAC)
    -    pub const DAC = extern struct {
    -        ///  D/A Converter Register. This register contains the digital value to be converted to analog and a power control bit.
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u6,
    -            ///  After the selected settling time after this field is written with a new VALUE, the voltage on the DAC_OUT pin (with respect to VSSA) is VALUE x ((VREFP - V REFN)/1024) + VREFN.
    -            VALUE: u10,
    -            ///  Settling time The settling times noted in the description of the BIAS bit are valid for a capacitance load on the DAC_OUT pin not exceeding 100 pF. A load impedance value greater than that value will cause settling time longer than the specified time. One or more graphs of load impedance vs. settling time will be included in the final data sheet.
    -            BIAS: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  The settling time of the DAC is 1 us max, and the maximum current is 700 uA. This allows a maximum update rate of 1 MHz.
    -                    FAST = 0x0,
    -                    ///  The settling time of the DAC is 2.5 us and the maximum current is 350 uA. This allows a maximum update rate of 400 kHz.
    -                    SLOW = 0x1,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u15,
    -        }),
    -        ///  DAC Control register. This register controls DMA and timer operation.
    -        CTRL: mmio.Mmio(packed struct(u32) {
    -            ///  DMA interrupt request
    -            INT_DMA_REQ: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Clear on any write to the DACR register.
    -                    CLEAR_ON_ANY_WRITE_T = 0x0,
    -                    ///  Set by hardware when the timer times out.
    -                    SET_BY_HARDWARE_WHEN = 0x1,
    -                },
    -            },
    -            ///  Double buffering
    -            DBLBUF_ENA: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disable
    -                    DISABLE = 0x0,
    -                    ///  Enable. When this bit and the CNT_ENA bit are both set, the double-buffering feature in the DACR register will be enabled. Writes to the DACR register are written to a pre-buffer and then transferred to the DACR on the next time-out of the counter.
    -                    ENABLE_WHEN_THIS_BI = 0x1,
    -                },
    -            },
    -            ///  Time-out counter operation
    -            CNT_ENA: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disable
    -                    DISABLE = 0x0,
    -                    ///  Enable
    -                    ENABLE = 0x1,
    -                },
    -            },
    -            ///  DMA access
    -            DMA_ENA: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disable
    -                    DISABLE = 0x0,
    -                    ///  Enable. DMA Burst Request Input 7 is enabled for the DAC (see Table 672).
    -                    ENABLE_DMA_BURST_RE = 0x1,
    -                },
    -            },
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u28,
    -        }),
    -        ///  DAC Counter Value register. This register contains the reload value for the DAC DMA/Interrupt timer.
    -        CNTVAL: mmio.Mmio(packed struct(u32) {
    -            ///  16-bit reload value for the DAC interrupt/DMA timer.
    -            VALUE: u16,
    -            ///  Reserved
    -            RESERVED: u16,
    -        }),
    -    };
    -
    -    ///  System and clock control
    -    pub const SYSCON = extern struct {
    -        ///  Flash Accelerator Configuration Register. Controls flash access timing.
    -        FLASHCFG: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved, user software should not change these bits from the reset value.
    -            RESERVED: u12,
    -            ///  Flash access time. The value of this field plus 1 gives the number of CPU clocks used for a flash access. Warning: improper setting of this value may result in incorrect operation of the device. Other values are reserved.
    -            FLASHTIM: packed union {
    -                raw: u4,
    -                value: enum(u4) {
    -                    ///  Flash accesses use 1 CPU clock. Use for up to 20 MHz CPU clock.
    -                    @"1CLK" = 0x0,
    -                    ///  Flash accesses use 2 CPU clocks. Use for up to 40 MHz CPU clock.
    -                    @"2CLK" = 0x1,
    -                    ///  Flash accesses use 3 CPU clocks. Use for up to 60 MHz CPU clock.
    -                    @"3CLK" = 0x2,
    -                    ///  Flash accesses use 4 CPU clocks. Use for up to 80 MHz CPU clock.
    -                    @"4CLK" = 0x3,
    -                    ///  Flash accesses use 5 CPU clocks. Use for up to 100 MHz CPU clock. Use for up to 120 Mhz for LPC1759 and LPC1769 only.
    -                    @"5CLK" = 0x4,
    -                    ///  Flash accesses use 6 CPU clocks. This safe setting will work under any conditions.
    -                    @"6CLK" = 0x5,
    -                    _,
    -                },
    -            },
    -            ///  Reserved. The value read from a reserved bit is not defined.
    -            RESERVED: u16,
    -        }),
    -        reserved128: [124]u8,
    -        ///  PLL0 Control Register
    -        PLL0CON: mmio.Mmio(packed struct(u32) {
    -            ///  PLL0 Enable. When one, and after a valid PLL0 feed, this bit will activate PLL0 and allow it to lock to the requested frequency. See PLL0STAT register.
    -            PLLE0: u1,
    -            ///  PLL0 Connect. Setting PLLC0 to one after PLL0 has been enabled and locked, then followed by a valid PLL0 feed sequence causes PLL0 to become the clock source for the CPU, AHB peripherals, and used to derive the clocks for APB peripherals. The PLL0 output may potentially be used to clock the USB subsystem if the frequency is 48 MHz. See PLL0STAT register.
    -            PLLC0: u1,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u30,
    -        }),
    -        ///  PLL0 Configuration Register
    -        PLL0CFG: mmio.Mmio(packed struct(u32) {
    -            ///  PLL0 Multiplier value. Supplies the value M in PLL0 frequency calculations. The value stored here is M - 1. Note: Not all values of M are needed, and therefore some are not supported by hardware.
    -            MSEL0: u15,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u1,
    -            ///  PLL0 Pre-Divider value. Supplies the value N in PLL0 frequency calculations. The value stored here is N - 1. Supported values for N are 1 through 32.
    -            NSEL0: u8,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u8,
    -        }),
    -        ///  PLL0 Status Register
    -        PLL0STAT: mmio.Mmio(packed struct(u32) {
    -            ///  Read-back for the PLL0 Multiplier value. This is the value currently used by PLL0, and is one less than the actual multiplier.
    -            MSEL0: u15,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u1,
    -            ///  Read-back for the PLL0 Pre-Divider value. This is the value currently used by PLL0, and is one less than the actual divider.
    -            NSEL0: u8,
    -            ///  Read-back for the PLL0 Enable bit. This bit reflects the state of the PLEC0 bit in PLL0CON after a valid PLL0 feed. When one, PLL0 is currently enabled. When zero, PLL0 is turned off. This bit is automatically cleared when Power-down mode is entered.
    -            PLLE0_STAT: u1,
    -            ///  Read-back for the PLL0 Connect bit. This bit reflects the state of the PLLC0 bit in PLL0CON after a valid PLL0 feed. When PLLC0 and PLLE0 are both one, PLL0 is connected as the clock source for the CPU. When either PLLC0 or PLLE0 is zero, PLL0 is bypassed. This bit is automatically cleared when Power-down mode is entered.
    -            PLLC0_STAT: u1,
    -            ///  Reflects the PLL0 Lock status. When zero, PLL0 is not locked. When one, PLL0 is locked onto the requested frequency. See text for details.
    -            PLOCK0: u1,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u5,
    -        }),
    -        ///  PLL0 Feed Register
    -        PLL0FEED: mmio.Mmio(packed struct(u32) {
    -            ///  The PLL0 feed sequence must be written to this register in order for PLL0 configuration and control register changes to take effect.
    -            PLL0FEED: u8,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u24,
    -        }),
    -        reserved160: [16]u8,
    -        ///  PLL1 Control Register
    -        PLL1CON: mmio.Mmio(packed struct(u32) {
    -            ///  PLL1 Enable. When one, and after a valid PLL1 feed, this bit will activate PLL1 and allow it to lock to the requested frequency.
    -            PLLE1: u1,
    -            ///  PLL1 Connect. Setting PLLC to one after PLL1 has been enabled and locked, then followed by a valid PLL1 feed sequence causes PLL1 to become the clock source for the USB subsystem via the USB clock divider. See PLL1STAT register.
    -            PLLC1: u1,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u30,
    -        }),
    -        ///  PLL1 Configuration Register
    -        PLL1CFG: mmio.Mmio(packed struct(u32) {
    -            ///  PLL1 Multiplier value. Supplies the value M in the PLL1 frequency calculations.
    -            MSEL1: u5,
    -            ///  PLL1 Divider value. Supplies the value P in the PLL1 frequency calculations.
    -            PSEL1: u2,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u25,
    -        }),
    -        ///  PLL1 Status Register
    -        PLL1STAT: mmio.Mmio(packed struct(u32) {
    -            ///  Read-back for the PLL1 Multiplier value. This is the value currently used by PLL1.
    -            MSEL1: u5,
    -            ///  Read-back for the PLL1 Divider value. This is the value currently used by PLL1.
    -            PSEL1: u2,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u1,
    -            ///  Read-back for the PLL1 Enable bit. When one, PLL1 is currently activated. When zero, PLL1 is turned off. This bit is automatically cleared when Power-down mode is activated.
    -            PLLE1_STAT: u1,
    -            ///  Read-back for the PLL1 Connect bit. When PLLC and PLLE are both one, PLL1 is connected as the clock source for the microcontroller. When either PLLC or PLLE is zero, PLL1 is bypassed and the oscillator clock is used directly by the microcontroller. This bit is automatically cleared when Power-down mode is activated.
    -            PLLC1_STAT: u1,
    -            ///  Reflects the PLL1 Lock status. When zero, PLL1 is not locked. When one, PLL1 is locked onto the requested frequency.
    -            PLOCK1: u1,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u21,
    -        }),
    -        ///  PLL1 Feed Register
    -        PLL1FEED: mmio.Mmio(packed struct(u32) {
    -            ///  The PLL1 feed sequence must be written to this register in order for PLL1 configuration and control register changes to take effect.
    -            PLL1FEED: u8,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u24,
    -        }),
    -        reserved192: [16]u8,
    -        ///  Power Control Register
    -        PCON: mmio.Mmio(packed struct(u32) {
    -            ///  Power mode control bit 0. This bit controls entry to the Power-down mode.
    -            PM0: u1,
    -            ///  Power mode control bit 1. This bit controls entry to the Deep Power-down mode.
    -            PM1: u1,
    -            ///  Brown-Out Reduced Power Mode. When BODRPM is 1, the Brown-Out Detect circuitry will be turned off when chip Power-down mode or Deep Sleep mode is entered, resulting in a further reduction in power usage. However, the possibility of using Brown-Out Detect as a wake-up source from the reduced power mode will be lost. When 0, the Brown-Out Detect function remains active during Power-down and Deep Sleep modes. See the System Control Block chapter for details of Brown-Out detection.
    -            BODRPM: u1,
    -            ///  Brown-Out Global Disable. When BOGD is 1, the Brown-Out Detect circuitry is fully disabled at all times, and does not consume power. When 0, the Brown-Out Detect circuitry is enabled. See the System Control Block chapter for details of Brown-Out detection. Note: the Brown-Out Reset Disable (BORD, in this register) and the Brown-Out Interrupt (xx) must be disabled when software changes the value of this bit.
    -            BOGD: u1,
    -            ///  Brown-Out Reset Disable. When BORD is 1, the BOD will not reset the device when the VDD(REG)(3V3) voltage dips goes below the BOD reset trip level. The Brown-Out interrupt is not affected. When BORD is 0, the BOD reset is enabled.
    -            BORD: u1,
    -            reserved8: u3,
    -            ///  Sleep Mode entry flag. Set when the Sleep mode is successfully entered. Cleared by software writing a one to this bit.
    -            SMFLAG: u1,
    -            ///  Deep Sleep entry flag. Set when the Deep Sleep mode is successfully entered. Cleared by software writing a one to this bit.
    -            DSFLAG: u1,
    -            ///  Power-down entry flag. Set when the Power-down mode is successfully entered. Cleared by software writing a one to this bit.
    -            PDFLAG: u1,
    -            ///  Deep Power-down entry flag. Set when the Deep Power-down mode is successfully entered. Cleared by software writing a one to this bit.
    -            DPDFLAG: u1,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u20,
    -        }),
    -        ///  Power Control for Peripherals Register
    -        PCONP: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved.
    -            RESERVED: u1,
    -            ///  Timer/Counter 0 power/clock control bit.
    -            PCTIM0: u1,
    -            ///  Timer/Counter 1 power/clock control bit.
    -            PCTIM1: u1,
    -            ///  UART0 power/clock control bit.
    -            PCUART0: u1,
    -            ///  UART1 power/clock control bit.
    -            PCUART1: u1,
    -            ///  Reserved.
    -            RESERVED: u1,
    -            ///  PWM1 power/clock control bit.
    -            PCPWM1: u1,
    -            ///  The I2C0 interface power/clock control bit.
    -            PCI2C0: u1,
    -            ///  The SPI interface power/clock control bit.
    -            PCSPI: u1,
    -            ///  The RTC power/clock control bit.
    -            PCRTC: u1,
    -            ///  The SSP 1 interface power/clock control bit.
    -            PCSSP1: u1,
    -            ///  Reserved.
    -            RESERVED: u1,
    -            ///  A/D converter (ADC) power/clock control bit. Note: Clear the PDN bit in the AD0CR before clearing this bit, and set this bit before setting PDN.
    -            PCADC: u1,
    -            ///  CAN Controller 1 power/clock control bit.
    -            PCCAN1: u1,
    -            ///  CAN Controller 2 power/clock control bit.
    -            PCCAN2: u1,
    -            ///  Power/clock control bit for IOCON, GPIO, and GPIO interrupts.
    -            PCGPIO: u1,
    -            ///  Repetitive Interrupt Timer power/clock control bit.
    -            PCRIT: u1,
    -            ///  Motor Control PWM
    -            PCMCPWM: u1,
    -            ///  Quadrature Encoder Interface power/clock control bit.
    -            PCQEI: u1,
    -            ///  The I2C1 interface power/clock control bit.
    -            PCI2C1: u1,
    -            ///  Reserved.
    -            RESERVED: u1,
    -            ///  The SSP0 interface power/clock control bit.
    -            PCSSP0: u1,
    -            ///  Timer 2 power/clock control bit.
    -            PCTIM2: u1,
    -            ///  Timer 3 power/clock control bit.
    -            PCTIM3: u1,
    -            ///  UART 2 power/clock control bit.
    -            PCUART2: u1,
    -            ///  UART 3 power/clock control bit.
    -            PCUART3: u1,
    -            ///  I2C interface 2 power/clock control bit.
    -            PCI2C2: u1,
    -            ///  I2S interface power/clock control bit.
    -            PCI2S: u1,
    -            ///  Reserved.
    -            RESERVED: u1,
    -            ///  GPDMA function power/clock control bit.
    -            PCGPDMA: u1,
    -            ///  Ethernet block power/clock control bit.
    -            PCENET: u1,
    -            ///  USB interface power/clock control bit.
    -            PCUSB: u1,
    -        }),
    -        reserved260: [60]u8,
    -        ///  CPU Clock Configuration Register
    -        CCLKCFG: mmio.Mmio(packed struct(u32) {
    -            ///  Selects the divide value for creating the CPU clock (CCLK) from the PLL0 output. 0 = pllclk is divided by 1 to produce the CPU clock. This setting is not allowed when the PLL0 is connected, because the rate would always be greater than the maximum allowed CPU clock. 1 = pllclk is divided by 2 to produce the CPU clock. This setting is not allowed when the PLL0 is connected, because the rate would always be greater than the maximum allowed CPU clock. 2 = pllclk is divided by 3 to produce the CPU clock. 3 = pllclk is divided by 4 to produce the CPU clock. ... 255 = pllclk is divided by 256 to produce the CPU clock.
    -            CCLKSEL: u8,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u24,
    -        }),
    -        ///  USB Clock Configuration Register
    -        USBCLKCFG: mmio.Mmio(packed struct(u32) {
    -            ///  Selects the divide value for creating the USB clock from the PLL0 output. Only the values shown below can produce even number multiples of 48 MHz from the PLL0 output. Warning: Improper setting of this value will result in incorrect operation of the USB interface. 5 = PLL0 output is divided by 6. PLL0 output must be 288 MHz. 7 = PLL0 output is divided by 8. PLL0 output must be 384 MHz. 9 = PLL0 output is divided by 10. PLL0 output must be 480 MHz.
    -            USBSEL: u4,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u28,
    -        }),
    -        ///  Clock Source Select Register
    -        CLKSRCSEL: mmio.Mmio(packed struct(u32) {
    -            ///  Selects the clock source for PLL0 as follows. Warning: Improper setting of this value, or an incorrect sequence of changing this value may result in incorrect operation of the device.
    -            CLKSRC: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Selects the Internal RC oscillator as the PLL0 clock source (default).
    -                    SELECTS_THE_INTERNAL = 0x0,
    -                    ///  Selects the main oscillator as the PLL0 clock source. Select the main oscillator as PLL0 clock source if the PLL0 clock output is used for USB or for CAN with baudrates > 100 kBit/s.
    -                    SELECTS_THE_MAIN_OSC = 0x1,
    -                    ///  Selects the RTC oscillator as the PLL0 clock source.
    -                    SELECTS_THE_RTC_OSCI = 0x2,
    -                    ///  Reserved, do not use this setting.
    -                    RESERVED = 0x3,
    -                },
    -            },
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u30,
    -        }),
    -        ///  Allows clearing the current CAN channel sleep state as well as reading that state.
    -        CANSLEEPCLR: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u1,
    -            ///  Sleep status and control for CAN channel 1. Read: when 1, indicates that CAN channel 1 is in the sleep mode. Write: writing a 1 causes clocks to be restored to CAN channel 1.
    -            CAN1SLEEP: u1,
    -            ///  Sleep status and control for CAN channel 2. Read: when 1, indicates that CAN channel 2 is in the sleep mode. Write: writing a 1 causes clocks to be restored to CAN channel 2.
    -            CAN2SLEEP: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u29,
    -        }),
    -        ///  Allows reading the wake-up state of the CAN channels.
    -        CANWAKEFLAGS: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u1,
    -            ///  Wake-up status for CAN channel 1. Read: when 1, indicates that a falling edge has occurred on the receive data line of CAN channel 1. Write: writing a 1 clears this bit.
    -            CAN1WAKE: u1,
    -            ///  Wake-up status for CAN channel 2. Read: when 1, indicates that a falling edge has occurred on the receive data line of CAN channel 2. Write: writing a 1 clears this bit.
    -            CAN2WAKE: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u29,
    -        }),
    -        reserved320: [40]u8,
    -        ///  External Interrupt Flag Register
    -        EXTINT: mmio.Mmio(packed struct(u32) {
    -            ///  In level-sensitive mode, this bit is set if the EINT0 function is selected for its pin, and the pin is in its active state. In edge-sensitive mode, this bit is set if the EINT0 function is selected for its pin, and the selected edge occurs on the pin. This bit is cleared by writing a one to it, except in level sensitive mode when the pin is in its active state.
    -            EINT0: u1,
    -            ///  In level-sensitive mode, this bit is set if the EINT1 function is selected for its pin, and the pin is in its active state. In edge-sensitive mode, this bit is set if the EINT1 function is selected for its pin, and the selected edge occurs on the pin. This bit is cleared by writing a one to it, except in level sensitive mode when the pin is in its active state.
    -            EINT1: u1,
    -            ///  In level-sensitive mode, this bit is set if the EINT2 function is selected for its pin, and the pin is in its active state. In edge-sensitive mode, this bit is set if the EINT2 function is selected for its pin, and the selected edge occurs on the pin. This bit is cleared by writing a one to it, except in level sensitive mode when the pin is in its active state.
    -            EINT2: u1,
    -            ///  In level-sensitive mode, this bit is set if the EINT3 function is selected for its pin, and the pin is in its active state. In edge-sensitive mode, this bit is set if the EINT3 function is selected for its pin, and the selected edge occurs on the pin. This bit is cleared by writing a one to it, except in level sensitive mode when the pin is in its active state.
    -            EINT3: u1,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u28,
    -        }),
    -        reserved328: [4]u8,
    -        ///  External Interrupt Mode register
    -        EXTMODE: mmio.Mmio(packed struct(u32) {
    -            ///  External interrupt 0 EINT0 mode.
    -            EXTMODE0: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Level-sensitive. Level-sensitivity is selected for EINT0.
    -                    LEVEL_SENSITIVE = 0x0,
    -                    ///  Edge-sensitive. EINT0 is edge sensitive.
    -                    EDGE_SENSITIVE = 0x1,
    -                },
    -            },
    -            ///  External interrupt 1 EINT1 mode.
    -            EXTMODE1: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Level-sensitive. Level-sensitivity is selected for EINT1.
    -                    LEVEL_SENSITIVE = 0x0,
    -                    ///  Edge-sensitive. EINT1 is edge sensitive.
    -                    EDGE_SENSITIVE = 0x1,
    -                },
    -            },
    -            ///  External interrupt 2 EINT2 mode.
    -            EXTMODE2: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Level-sensitive. Level-sensitivity is selected for EINT2.
    -                    LEVEL_SENSITIVE = 0x0,
    -                    ///  Edge-sensitive. EINT2 is edge sensitive.
    -                    EDGE_SENSITIVE = 0x1,
    -                },
    -            },
    -            ///  External interrupt 3 EINT3 mode.
    -            EXTMODE3: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Level-sensitive. Level-sensitivity is selected for EINT3.
    -                    LEVEL_SENSITIVE = 0x0,
    -                    ///  Edge-sensitive. EINT3 is edge sensitive.
    -                    EDGE_SENSITIVE = 0x1,
    -                },
    -            },
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u28,
    -        }),
    -        ///  External Interrupt Polarity Register
    -        EXTPOLAR: mmio.Mmio(packed struct(u32) {
    -            ///  External interrupt 0 EINT0 polarity.
    -            EXTPOLAR0: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Falling edge. EINT0 is low-active or falling-edge sensitive (depending on EXTMODE0).
    -                    FALLING_EDGE = 0x0,
    -                    ///  Rising edge. EINT0 is high-active or rising-edge sensitive (depending on EXTMODE0).
    -                    RISING_EDGE = 0x1,
    -                },
    -            },
    -            ///  External interrupt 1 EINT1 polarity.
    -            EXTPOLAR1: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Falling edge. EINT1 is low-active or falling-edge sensitive (depending on EXTMODE1).
    -                    FALLING_EDGE = 0x0,
    -                    ///  Rising edge. EINT1 is high-active or rising-edge sensitive (depending on EXTMODE1).
    -                    RISING_EDGE = 0x1,
    -                },
    -            },
    -            ///  External interrupt 2 EINT2 polarity.
    -            EXTPOLAR2: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Falling edge. EINT2 is low-active or falling-edge sensitive (depending on EXTMODE2).
    -                    FALLING_EDGE = 0x0,
    -                    ///  Rising edge. EINT2 is high-active or rising-edge sensitive (depending on EXTMODE2).
    -                    RISING_EDGE = 0x1,
    -                },
    -            },
    -            ///  External interrupt 3 EINT3 polarity.
    -            EXTPOLAR3: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Falling edge. EINT3 is low-active or falling-edge sensitive (depending on EXTMODE3).
    -                    FALLING_EDGE = 0x0,
    -                    ///  Rising edge. EINT3 is high-active or rising-edge sensitive (depending on EXTMODE3).
    -                    RISING_EDGE = 0x1,
    -                },
    -            },
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u28,
    -        }),
    -        reserved384: [48]u8,
    -        ///  Reset Source Identification Register
    -        RSID: mmio.Mmio(packed struct(u32) {
    -            ///  Assertion of the POR signal sets this bit, and clears all of the other bits in this register. But if another Reset signal (e.g., External Reset) remains asserted after the POR signal is negated, then its bit is set. This bit is not affected by any of the other sources of Reset.
    -            POR: u1,
    -            ///  Assertion of the RESET signal sets this bit. This bit is cleared only by software or POR.
    -            EXTR: u1,
    -            ///  This bit is set when the Watchdog Timer times out and the WDTRESET bit in the Watchdog Mode Register is 1. This bit is cleared only by software or POR.
    -            WDTR: u1,
    -            ///  This bit is set when the VDD(REG)(3V3) voltage reaches a level below the BOD reset trip level (typically 1.85 V under nominal room temperature conditions). If the VDD(REG)(3V3) voltage dips from the normal operating range to below the BOD reset trip level and recovers, the BODR bit will be set to 1. If the VDD(REG)(3V3) voltage dips from the normal operating range to below the BOD reset trip level and continues to decline to the level at which POR is asserted (nominally 1 V), the BODR bit is cleared. If the VDD(REG)(3V3) voltage rises continuously from below 1 V to a level above the BOD reset trip level, the BODR will be set to 1. This bit is cleared only by software or POR. Note: Only in the case where a reset occurs and the POR = 0, the BODR bit indicates if the VDD(REG)(3V3) voltage was below the BOD reset trip level or not.
    -            BODR: u1,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u28,
    -        }),
    -        reserved416: [28]u8,
    -        ///  System control and status
    -        SCS: mmio.Mmio(packed struct(u32) {
    -            ///  Reserved. User software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u4,
    -            ///  Main oscillator range select.
    -            OSCRANGE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Low. The frequency range of the main oscillator is 1 MHz to 20 MHz.
    -                    LOW = 0x0,
    -                    ///  High. The frequency range of the main oscillator is 15 MHz to 25 MHz.
    -                    HIGH = 0x1,
    -                },
    -            },
    -            ///  Main oscillator enable.
    -            OSCEN: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Disabled. The main oscillator is disabled.
    -                    DISABLED = 0x0,
    -                    ///  Enabled.The main oscillator is enabled, and will start up if the correct external circuitry is connected to the XTAL1 and XTAL2 pins.
    -                    ENABLED = 0x1,
    -                },
    -            },
    -            ///  Main oscillator status.
    -            OSCSTAT: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Not ready. The main oscillator is not ready to be used as a clock source.
    -                    NOT_READY = 0x0,
    -                    ///  Ready. The main oscillator is ready to be used as a clock source. The main oscillator must be enabled via the OSCEN bit.
    -                    READY = 0x1,
    -                },
    -            },
    -            ///  Reserved. User software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u25,
    -        }),
    -        reserved424: [4]u8,
    -        ///  Peripheral Clock Selection register 0.
    -        PCLKSEL0: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral clock selection for WDT.
    -            PCLK_WDT: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    -                    CCLK_DIV_8 = 0x3,
    -                },
    -            },
    -            ///  Peripheral clock selection for TIMER0.
    -            PCLK_TIMER0: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    -                    CCLK_DIV_8 = 0x3,
    -                },
    -            },
    -            ///  Peripheral clock selection for TIMER1.
    -            PCLK_TIMER1: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    -                    CCLK_DIV_8 = 0x3,
    -                },
    -            },
    -            ///  Peripheral clock selection for UART0.
    -            PCLK_UART0: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    -                    CCLK_DIV_8 = 0x3,
    -                },
    -            },
    -            ///  Peripheral clock selection for UART1.
    -            PCLK_UART1: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    -                    CCLK_DIV_8 = 0x3,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u2,
    -            ///  Peripheral clock selection for PWM1.
    -            PCLK_PWM1: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    -                    CCLK_DIV_8 = 0x3,
    -                },
    -            },
    -            ///  Peripheral clock selection for I2C0.
    -            PCLK_I2C0: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    -                    CCLK_DIV_8 = 0x3,
    -                },
    -            },
    -            ///  Peripheral clock selection for SPI.
    -            PCLK_SPI: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    -                    CCLK_DIV_8 = 0x3,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u2,
    -            ///  Peripheral clock selection for SSP1.
    -            PCLK_SSP1: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    -                    CCLK_DIV_8 = 0x3,
    -                },
    -            },
    -            ///  Peripheral clock selection for DAC.
    -            PCLK_DAC: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    -                    CCLK_DIV_8 = 0x3,
    -                },
    -            },
    -            ///  Peripheral clock selection for ADC.
    -            PCLK_ADC: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    -                    CCLK_DIV_8 = 0x3,
    -                },
    -            },
    -            ///  Peripheral clock selection for CAN1.PCLK_CAN1 and PCLK_CAN2 must have the same PCLK divide value when the CAN function is used.
    -            PCLK_CAN1: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 6. PCLK_peripheral = CCLK/6.
    -                    CCLK_DIV_6 = 0x3,
    -                },
    -            },
    -            ///  Peripheral clock selection for CAN2.PCLK_CAN1 and PCLK_CAN2 must have the same PCLK divide value when the CAN function is used.
    -            PCLK_CAN2: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 6. PCLK_peripheral = CCLK/6,
    -                    CCLK_DIV_6 = 0x3,
    -                },
    -            },
    -            ///  Peripheral clock selection for CAN acceptance filtering.PCLK_CAN1 and PCLK_CAN2 must have the same PCLK divide value when the CAN function is used.
    -            PCLK_ACF: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 6. PCLK_peripheral = CCLK/6
    -                    CCLK_DIV_6 = 0x3,
    -                },
    -            },
    -        }),
    -        ///  Peripheral Clock Selection register 1.
    -        PCLKSEL1: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral clock selection for the Quadrature Encoder Interface.
    -            PCLK_QEI: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    -                    CCLK_DIV_8 = 0x3,
    -                },
    -            },
    -            ///  Peripheral clock selection for GPIO interrupts.
    -            PCLK_GPIOINT: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    -                    CCLK_DIV_8 = 0x3,
    -                },
    -            },
    -            ///  Peripheral clock selection for the Pin Connect block.
    -            PCLK_PCB: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    -                    CCLK_DIV_8 = 0x3,
    -                },
    -            },
    -            ///  Peripheral clock selection for I2C1.
    -            PCLK_I2C1: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    -                    CCLK_DIV_8 = 0x3,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u2,
    -            ///  Peripheral clock selection for SSP0.
    -            PCLK_SSP0: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    -                    CCLK_DIV_8 = 0x3,
    -                },
    -            },
    -            ///  Peripheral clock selection for TIMER2.
    -            PCLK_TIMER2: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    -                    CCLK_DIV_8 = 0x3,
    -                },
    -            },
    -            ///  Peripheral clock selection for TIMER3.
    -            PCLK_TIMER3: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    -                    CCLK_DIV_8 = 0x3,
    -                },
    -            },
    -            ///  Peripheral clock selection for UART2.
    -            PCLK_UART2: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    -                    CCLK_DIV_8 = 0x3,
    -                },
    -            },
    -            ///  Peripheral clock selection for UART3.
    -            PCLK_UART3: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    -                    CCLK_DIV_8 = 0x3,
    -                },
    -            },
    -            ///  Peripheral clock selection for I2C2.
    -            PCLK_I2C2: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    -                    CCLK_DIV_8 = 0x3,
    -                },
    -            },
    -            ///  Peripheral clock selection for I2S.
    -            PCLK_I2S: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    -                    CCLK_DIV_8 = 0x3,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u2,
    -            ///  Peripheral clock selection for Repetitive Interrupt Timer.
    -            PCLK_RIT: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    -                    CCLK_DIV_8 = 0x3,
    -                },
    -            },
    -            ///  Peripheral clock selection for the System Control block.
    -            PCLK_SYSCON: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    -                    CCLK_DIV_8 = 0x3,
    -                },
    -            },
    -            ///  Peripheral clock selection for the Motor Control PWM.
    -            PCLK_MC: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  CCLK div 4. PCLK_peripheral = CCLK/4
    -                    CCLK_DIV_4 = 0x0,
    -                    ///  CCLK. PCLK_peripheral = CCLK
    -                    CCLK = 0x1,
    -                    ///  CCLK div 2. PCLK_peripheral = CCLK/2
    -                    CCLK_DIV_2 = 0x2,
    -                    ///  CCLK div 8. PCLK_peripheral = CCLK/8
    -                    CCLK_DIV_8 = 0x3,
    -                },
    -            },
    -        }),
    -        reserved448: [16]u8,
    -        ///  USB Interrupt Status
    -        USBINTST: mmio.Mmio(packed struct(u32) {
    -            ///  Low priority interrupt line status. This bit is read-only.
    -            USB_INT_REQ_LP: u1,
    -            ///  High priority interrupt line status. This bit is read-only.
    -            USB_INT_REQ_HP: u1,
    -            ///  DMA interrupt line status. This bit is read-only.
    -            USB_INT_REQ_DMA: u1,
    -            ///  USB host interrupt line status. This bit is read-only.
    -            USB_HOST_INT: u1,
    -            ///  External ATX interrupt line status. This bit is read-only.
    -            USB_ATX_INT: u1,
    -            ///  OTG interrupt line status. This bit is read-only.
    -            USB_OTG_INT: u1,
    -            ///  I2C module interrupt line status. This bit is read-only.
    -            USB_I2C_INT: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u1,
    -            ///  USB need clock indicator. This bit is read-only. This bit is set to 1 when USB activity or a change of state on the USB data pins is detected, and it indicates that a PLL supplied clock of 48 MHz is needed. Once USB_NEED_CLK becomes one, it resets to zero 5 ms after the last packet has been received/sent, or 2 ms after the Suspend Change (SUS_CH) interrupt has occurred. A change of this bit from 0 to 1 can wake up the microcontroller if activity on the USB bus is selected to wake up the part from the Power-down mode (see Section 4.7.9 Wake-up from Reduced Power Modes for details). Also see Section 4.5.8 PLLs and Power-down mode and Section 4.7.10 Power Control for Peripherals register (PCONP - 0x400F C0C4) for considerations about the PLL and invoking the Power-down mode. This bit is read-only.
    -            USB_NEED_CLK: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u22,
    -            ///  Enable all USB interrupts. When this bit is cleared, the NVIC does not see the ORed output of the USB interrupt lines.
    -            EN_USB_INTS: u1,
    -        }),
    -        ///  Selects between alternative requests on DMA channels 0 through 7 and 10 through 15
    -        DMACREQSEL: mmio.Mmio(packed struct(u32) {
    -            ///  Selects the DMA request for GPDMA input 8: 0 - uart0 tx 1 - Timer 0 match 0 is selected.
    -            DMASEL08: u1,
    -            ///  Selects the DMA request for GPDMA input 9: 0 - uart0 rx 1 - Timer 0 match 1 is selected.
    -            DMASEL09: u1,
    -            ///  Selects the DMA request for GPDMA input 10: 0 - uart1 tx is selected. 1 - Timer 1 match 0 is selected.
    -            DMASEL10: u1,
    -            ///  Selects the DMA request for GPDMA input 11: 0 - uart1 rx is selected. 1 - Timer 1 match 1 is selected.
    -            DMASEL11: u1,
    -            ///  Selects the DMA request for GPDMA input 12: 0 - uart2 tx is selected. 1 - Timer 2 match 0 is selected.
    -            DMASEL12: u1,
    -            ///  Selects the DMA request for GPDMA input 13: 0 - uart2 rx is selected. 1 - Timer 2 match 1 is selected.
    -            DMASEL13: u1,
    -            ///  Selects the DMA request for GPDMA input 14: 0 - uart3 tx is selected. 1 - I2S channel 0 is selected.
    -            DMASEL14: u1,
    -            ///  Selects the DMA request for GPDMA input 15: 0 - uart3 rx is selected. 1 - I2S channel 1 is selected.
    -            DMASEL15: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u24,
    -        }),
    -        ///  Clock Output Configuration Register
    -        CLKOUTCFG: mmio.Mmio(packed struct(u32) {
    -            ///  Selects the clock source for the CLKOUT function. Other values are reserved. Do not use.
    -            CLKOUTSEL: packed union {
    -                raw: u4,
    -                value: enum(u4) {
    -                    ///  Selects the CPU clock as the CLKOUT source.
    -                    SELECTS_THE_CPU_CLOC = 0x0,
    -                    ///  Selects the main oscillator as the CLKOUT source.
    -                    SELECTS_THE_MAIN_OSC = 0x1,
    -                    ///  Selects the Internal RC oscillator as the CLKOUT source.
    -                    SELECTS_THE_INTERNAL = 0x2,
    -                    ///  Selects the USB clock as the CLKOUT source.
    -                    SELECTS_THE_USB_CLOC = 0x3,
    -                    ///  Selects the RTC oscillator as the CLKOUT source.
    -                    SELECTS_THE_RTC_OSCI = 0x4,
    -                    _,
    -                },
    -            },
    -            ///  Integer value to divide the output clock by, minus one. 0 = Clock is divided by 1 1 = Clock is divided by 2. 2 = Clock is divided by 3. ... 15 = Clock is divided by 16.
    -            CLKOUTDIV: u4,
    -            ///  CLKOUT enable control, allows switching the CLKOUT source without glitches. Clear to stop CLKOUT on the next falling edge. Set to enable CLKOUT.
    -            CLKOUT_EN: u1,
    -            ///  CLKOUT activity indication. Reads as 1 when CLKOUT is enabled. Read as 0 when CLKOUT has been disabled via the CLKOUT_EN bit and the clock has completed being stopped.
    -            CLKOUT_ACT: u1,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u22,
    -        }),
    -    };
    -
    -    ///  Quadrature Encoder Interface (QEI)
    -    pub const QEI = extern struct {
    -        ///  Control register
    -        CON: mmio.Mmio(packed struct(u32) {
    -            ///  Reset position counter. When set = 1, resets the position counter to all zeros. Autoclears when the position counter is cleared.
    -            RESP: u1,
    -            ///  Reset position counter on index. When set = 1, resets the position counter to all zeros once only the first time an index pulse occurs. Autoclears when the position counter is cleared.
    -            RESPI: u1,
    -            ///  Reset velocity. When set = 1, resets the velocity counter to all zeros, reloads the velocity timer, and presets the velocity compare register. Autoclears when the velocity counter is cleared.
    -            RESV: u1,
    -            ///  Reset index counter. When set = 1, resets the index counter to all zeros. Autoclears when the index counter is cleared.
    -            RESI: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u28,
    -        }),
    -        ///  Status register
    -        STAT: mmio.Mmio(packed struct(u32) {
    -            ///  Direction bit. In combination with DIRINV bit indicates forward or reverse direction. See Table 597.
    -            DIR: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u31,
    -        }),
    -        ///  Configuration register
    -        CONF: mmio.Mmio(packed struct(u32) {
    -            ///  Direction invert. When 1, complements the DIR bit.
    -            DIRINV: u1,
    -            ///  Signal Mode. When 0, PhA and PhB function as quadrature encoder inputs. When 1, PhA functions as the direction signal and PhB functions as the clock signal.
    -            SIGMODE: u1,
    -            ///  Capture Mode. When 0, only PhA edges are counted (2X). When 1, BOTH PhA and PhB edges are counted (4X), increasing resolution but decreasing range.
    -            CAPMODE: u1,
    -            ///  Invert Index. When 1, inverts the sense of the index input.
    -            INVINX: u1,
    -            ///  Continuously reset the position counter on index. When 1, resets the position counter to all zeros whenever an index pulse occurs after the next position increase (recalibration).
    -            CRESPI: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u11,
    -            ///  Index gating configuration: When INXGATE[16] = 1, pass the index when PHA = 1 and PHB = 0, otherwise block index. When INXGATE[17] = 1, pass the index when PHA = 1 and PHB = 1, otherwise block index. When INXGATE[18] = 1, pass the index when PHA = 0 and PHB = 1, otherwise block index. When INXGATE[19] = 1, pass the index when PHA = 0 and PHB = 0, otherwise block index.
    -            INXGATE: u4,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u12,
    -        }),
    -        ///  Position register
    -        POS: mmio.Mmio(packed struct(u32) {
    -            ///  Current position value.
    -            POS: u32,
    -        }),
    -        ///  Maximum position register
    -        MAXPOS: mmio.Mmio(packed struct(u32) {
    -            ///  Current maximum position value.
    -            MAXPOS: u32,
    -        }),
    -        ///  Position compare register 0
    -        CMPOS0: mmio.Mmio(packed struct(u32) {
    -            ///  Position compare value 0.
    -            PCMP0: u32,
    -        }),
    -        ///  Position compare register 1
    -        CMPOS1: mmio.Mmio(packed struct(u32) {
    -            ///  Position compare value 1.
    -            PCMP1: u32,
    -        }),
    -        ///  Position compare register 2
    -        CMPOS2: mmio.Mmio(packed struct(u32) {
    -            ///  Position compare value 2.
    -            PCMP2: u32,
    -        }),
    -        ///  Index count register 0
    -        INXCNT: mmio.Mmio(packed struct(u32) {
    -            ///  Current index counter value.
    -            ENCPOS: u32,
    -        }),
    -        ///  Index compare register 0
    -        INXCMP0: mmio.Mmio(packed struct(u32) {
    -            ///  Index compare value 0.
    -            ICMP0: u32,
    -        }),
    -        ///  Velocity timer reload register
    -        LOAD: mmio.Mmio(packed struct(u32) {
    -            ///  Current velocity timer load value.
    -            VELLOAD: u32,
    -        }),
    -        ///  Velocity timer register
    -        TIME: mmio.Mmio(packed struct(u32) {
    -            ///  Current velocity timer value.
    -            VELVAL: u32,
    -        }),
    -        ///  Velocity counter register
    -        VEL: mmio.Mmio(packed struct(u32) {
    -            ///  Current velocity pulse count.
    -            VELPC: u32,
    -        }),
    -        ///  Velocity capture register
    -        CAP: mmio.Mmio(packed struct(u32) {
    -            ///  Last velocity capture.
    -            VELCAP: u32,
    -        }),
    -        ///  Velocity compare register
    -        VELCOMP: mmio.Mmio(packed struct(u32) {
    -            ///  Compare velocity pulse count.
    -            VELPC: u32,
    -        }),
    -        ///  Digital filter register
    -        FILTER: mmio.Mmio(packed struct(u32) {
    -            ///  Digital filter sampling delay.
    -            FILTA: u32,
    -        }),
    -        reserved4056: [3992]u8,
    -        ///  Interrupt enable clear register
    -        IEC: mmio.Mmio(packed struct(u32) {
    -            ///  Writing a 1 disables the INX_Int interrupt in the QEIIE register.
    -            INX_INT: u1,
    -            ///  Writing a 1 disables the TIN_Int interrupt in the QEIIE register.
    -            TIM_INT: u1,
    -            ///  Writing a 1 disables the VELC_Int interrupt in the QEIIE register.
    -            VELC_INT: u1,
    -            ///  Writing a 1 disables the DIR_Int interrupt in the QEIIE register.
    -            DIR_INT: u1,
    -            ///  Writing a 1 disables the ERR_Int interrupt in the QEIIE register.
    -            ERR_INT: u1,
    -            ///  Writing a 1 disables the ENCLK_Int interrupt in the QEIIE register.
    -            ENCLK_INT: u1,
    -            ///  Writing a 1 disables the POS0_Int interrupt in the QEIIE register.
    -            POS0_INT: u1,
    -            ///  Writing a 1 disables the POS1_Int interrupt in the QEIIE register.
    -            POS1_INT: u1,
    -            ///  Writing a 1 disables the POS2_Int interrupt in the QEIIE register.
    -            POS2_INT: u1,
    -            ///  Writing a 1 disables the REV0_Int interrupt in the QEIIE register.
    -            REV0_INT: u1,
    -            ///  Writing a 1 disables the POS0REV_Int interrupt in the QEIIE register.
    -            POS0REV_INT: u1,
    -            ///  Writing a 1 disables the POS1REV_Int interrupt in the QEIIE register.
    -            POS1REV_INT: u1,
    -            ///  Writing a 1 disables the POS2REV_Int interrupt in the QEIIE register.
    -            POS2REV_INT: u1,
    -            ///  Writing a 1 disables the REV1_Int interrupt in the QEIIE register.
    -            REV1_INT: u1,
    -            ///  Writing a 1 disables the REV2_Int interrupt in the QEIIE register.
    -            REV2_INT: u1,
    -            ///  Writing a 1 disables the MAXPOS_Int interrupt in the QEIIE register.
    -            MAXPOS_INT: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u16,
    -        }),
    -        ///  Interrupt enable set register
    -        IES: mmio.Mmio(packed struct(u32) {
    -            ///  Writing a 1 enables the INX_Int interrupt in the QEIIE register.
    -            INX_INT: u1,
    -            ///  Writing a 1 enables the TIN_Int interrupt in the QEIIE register.
    -            TIM_INT: u1,
    -            ///  Writing a 1 enables the VELC_Int interrupt in the QEIIE register.
    -            VELC_INT: u1,
    -            ///  Writing a 1 enables the DIR_Int interrupt in the QEIIE register.
    -            DIR_INT: u1,
    -            ///  Writing a 1 enables the ERR_Int interrupt in the QEIIE register.
    -            ERR_INT: u1,
    -            ///  Writing a 1 enables the ENCLK_Int interrupt in the QEIIE register.
    -            ENCLK_INT: u1,
    -            ///  Writing a 1 enables the POS0_Int interrupt in the QEIIE register.
    -            POS0_INT: u1,
    -            ///  Writing a 1 enables the POS1_Int interrupt in the QEIIE register.
    -            POS1_INT: u1,
    -            ///  Writing a 1 enables the POS2_Int interrupt in the QEIIE register.
    -            POS2_INT: u1,
    -            ///  Writing a 1 enables the REV0_Int interrupt in the QEIIE register.
    -            REV0_INT: u1,
    -            ///  Writing a 1 enables the POS0REV_Int interrupt in the QEIIE register.
    -            POS0REV_INT: u1,
    -            ///  Writing a 1 enables the POS1REV_Int interrupt in the QEIIE register.
    -            POS1REV_INT: u1,
    -            ///  Writing a 1 enables the POS2REV_Int interrupt in the QEIIE register.
    -            POS2REV_INT: u1,
    -            ///  Writing a 1 enables the REV1_Int interrupt in the QEIIE register.
    -            REV1_INT: u1,
    -            ///  Writing a 1 enables the REV2_Int interrupt in the QEIIE register.
    -            REV2_INT: u1,
    -            ///  Writing a 1 enables the MAXPOS_Int interrupt in the QEIIE register.
    -            MAXPOS_INT: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u16,
    -        }),
    -        ///  Interrupt status register
    -        INTSTAT: mmio.Mmio(packed struct(u32) {
    -            ///  Indicates that an index pulse was detected.
    -            INX_INT: u1,
    -            ///  Indicates that a velocity timer overflow occurred
    -            TIM_INT: u1,
    -            ///  Indicates that captured velocity is less than compare velocity.
    -            VELC_INT: u1,
    -            ///  Indicates that a change of direction was detected.
    -            DIR_INT: u1,
    -            ///  Indicates that an encoder phase error was detected.
    -            ERR_INT: u1,
    -            ///  Indicates that and encoder clock pulse was detected.
    -            ENCLK_INT: u1,
    -            ///  Indicates that the position 0 compare value is equal to the current position.
    -            POS0_INT: u1,
    -            ///  Indicates that the position 1compare value is equal to the current position.
    -            POS1_INT: u1,
    -            ///  Indicates that the position 2 compare value is equal to the current position.
    -            POS2_INT: u1,
    -            ///  Indicates that the index compare 0 value is equal to the current index count.
    -            REV0_INT: u1,
    -            ///  Combined position 0 and revolution count interrupt. Set when both the POS0_Int bit is set and the REV0_Int is set.
    -            POS0REV_INT: u1,
    -            ///  Combined position 1 and revolution count interrupt. Set when both the POS1_Int bit is set and the REV1_Int is set.
    -            POS1REV_INT: u1,
    -            ///  Combined position 2 and revolution count interrupt. Set when both the POS2_Int bit is set and the REV2_Int is set.
    -            POS2REV_INT: u1,
    -            ///  Indicates that the index compare 1value is equal to the current index count.
    -            REV1_INT: u1,
    -            ///  Indicates that the index compare 2 value is equal to the current index count.
    -            REV2_INT: u1,
    -            ///  Indicates that the current position count goes through the MAXPOS value to zero in the forward direction, or through zero to MAXPOS in the reverse direction.
    -            MAXPOS_INT: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u16,
    -        }),
    -        ///  Interrupt enable register
    -        IE: mmio.Mmio(packed struct(u32) {
    -            ///  When 1, the INX_Int interrupt is enabled.
    -            INX_INT: u1,
    -            ///  When 1, the TIN_Int interrupt is enabled.
    -            TIM_INT: u1,
    -            ///  When 1, the VELC_Int interrupt is enabled.
    -            VELC_INT: u1,
    -            ///  When 1, the DIR_Int interrupt is enabled.
    -            DIR_INT: u1,
    -            ///  When 1, the ERR_Int interrupt is enabled.
    -            ERR_INT: u1,
    -            ///  When 1, the ENCLK_Int interrupt is enabled.
    -            ENCLK_INT: u1,
    -            ///  When 1, the POS0_Int interrupt is enabled.
    -            POS0_INT: u1,
    -            ///  When 1, the POS1_Int interrupt is enabled.
    -            POS1_INT: u1,
    -            ///  When 1, the POS2_Int interrupt is enabled.
    -            POS2_INT: u1,
    -            ///  When 1, the REV0_Int interrupt is enabled.
    -            REV0_INT: u1,
    -            ///  When 1, the POS0REV_Int interrupt is enabled.
    -            POS0REV_INT: u1,
    -            ///  When 1, the POS1REV_Int interrupt is enabled.
    -            POS1REV_INT: u1,
    -            ///  When 1, the POS2REV_Int interrupt is enabled.
    -            POS2REV_INT: u1,
    -            ///  When 1, the REV1_Int interrupt is enabled.
    -            REV1_INT: u1,
    -            ///  When 1, the REV2_Int interrupt is enabled.
    -            REV2_INT: u1,
    -            ///  When 1, the MAXPOS_Int interrupt is enabled.
    -            MAXPOS_INT: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u16,
    -        }),
    -        ///  Interrupt status clear register
    -        CLR: mmio.Mmio(packed struct(u32) {
    -            ///  Writing a 1 clears the INX_Int bit in QEIINTSTAT.
    -            INX_INT: u1,
    -            ///  Writing a 1 clears the TIN_Int bit in QEIINTSTAT.
    -            TIM_INT: u1,
    -            ///  Writing a 1 clears the VELC_Int bit in QEIINTSTAT.
    -            VELC_INT: u1,
    -            ///  Writing a 1 clears the DIR_Int bit in QEIINTSTAT.
    -            DIR_INT: u1,
    -            ///  Writing a 1 clears the ERR_Int bit in QEIINTSTAT.
    -            ERR_INT: u1,
    -            ///  Writing a 1 clears the ENCLK_Int bit in QEIINTSTAT.
    -            ENCLK_INT: u1,
    -            ///  Writing a 1 clears the POS0_Int bit in QEIINTSTAT.
    -            POS0_INT: u1,
    -            ///  Writing a 1 clears the POS1_Int bit in QEIINTSTAT.
    -            POS1_INT: u1,
    -            ///  Writing a 1 clears the POS2_Int bit in QEIINTSTAT.
    -            POS2_INT: u1,
    -            ///  Writing a 1 clears the REV0_Int bit in QEIINTSTAT.
    -            REV0_INT: u1,
    -            ///  Writing a 1 clears the POS0REV_Int bit in QEIINTSTAT.
    -            POS0REV_INT: u1,
    -            ///  Writing a 1 clears the POS1REV_Int bit in QEIINTSTAT.
    -            POS1REV_INT: u1,
    -            ///  Writing a 1 clears the POS2REV_Int bit in QEIINTSTAT.
    -            POS2REV_INT: u1,
    -            ///  Writing a 1 clears the REV1_Int bit in QEIINTSTAT.
    -            REV1_INT: u1,
    -            ///  Writing a 1 clears the REV2_Int bit in QEIINTSTAT.
    -            REV2_INT: u1,
    -            ///  Writing a 1 clears the MAXPOS_Int bit in QEIINTSTAT.
    -            MAXPOS_INT: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u16,
    -        }),
    -        ///  Interrupt status set register
    -        SET: mmio.Mmio(packed struct(u32) {
    -            ///  Writing a 1 sets the INX_Int bit in QEIINTSTAT.
    -            INX_INT: u1,
    -            ///  Writing a 1 sets the TIN_Int bit in QEIINTSTAT.
    -            TIM_INT: u1,
    -            ///  Writing a 1 sets the VELC_Int bit in QEIINTSTAT.
    -            VELC_INT: u1,
    -            ///  Writing a 1 sets the DIR_Int bit in QEIINTSTAT.
    -            DIR_INT: u1,
    -            ///  Writing a 1 sets the ERR_Int bit in QEIINTSTAT.
    -            ERR_INT: u1,
    -            ///  Writing a 1 sets the ENCLK_Int bit in QEIINTSTAT.
    -            ENCLK_INT: u1,
    -            ///  Writing a 1 sets the POS0_Int bit in QEIINTSTAT.
    -            POS0_INT: u1,
    -            ///  Writing a 1 sets the POS1_Int bit in QEIINTSTAT.
    -            POS1_INT: u1,
    -            ///  Writing a 1 sets the POS2_Int bit in QEIINTSTAT.
    -            POS2_INT: u1,
    -            ///  Writing a 1 sets the REV0_Int bit in QEIINTSTAT.
    -            REV0_INT: u1,
    -            ///  Writing a 1 sets the POS0REV_Int bit in QEIINTSTAT.
    -            POS0REV_INT: u1,
    -            ///  Writing a 1 sets the POS1REV_Int bit in QEIINTSTAT.
    -            POS1REV_INT: u1,
    -            ///  Writing a 1 sets the POS2REV_Int bit in QEIINTSTAT.
    -            POS2REV_INT: u1,
    -            ///  Writing a 1 sets the REV1_Int bit in QEIINTSTAT.
    -            REV1_INT: u1,
    -            ///  Writing a 1 sets the REV2_Int bit in QEIINTSTAT.
    -            REV2_INT: u1,
    -            ///  Writing a 1 sets the MAXPOS_Int bit in QEIINTSTAT.
    -            MAXPOS_INT: u1,
    -            ///  Reserved. Read value is undefined, only zero should be written.
    -            RESERVED: u16,
    -        }),
    -    };
    -
    -    ///  Motor Control PWM
    -    pub const MCPWM = extern struct {
    -        ///  PWM Control read address
    -        CON: mmio.Mmio(packed struct(u32) {
    -            ///  Stops/starts timer channel 0.
    -            RUN0: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Stop.
    -                    STOP_ = 0x0,
    -                    ///  Run.
    -                    RUN_ = 0x1,
    -                },
    -            },
    -            ///  Edge/center aligned operation for channel 0.
    -            CENTER0: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Edge-aligned.
    -                    EDGE_ALIGNED_ = 0x0,
    -                    ///  Center-aligned.
    -                    CENTER_ALIGNED_ = 0x1,
    -                },
    -            },
    -            ///  Selects polarity of the MCOA0 and MCOB0 pins.
    -            POLA0: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Passive state is LOW, active state is HIGH.
    -                    PASSIVE_STATE_IS_LOW = 0x0,
    -                    ///  Passive state is HIGH, active state is LOW.
    -                    PASSIVE_STATE_IS_HIG = 0x1,
    -                },
    -            },
    -            ///  Controls the dead-time feature for channel 0.
    -            DTE0: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Dead-time disabled.
    -                    DEAD_TIME_DISABLED_ = 0x0,
    -                    ///  Dead-time enabled.
    -                    DEAD_TIME_ENABLED_ = 0x1,
    -                },
    -            },
    -            ///  Enable/disable updates of functional registers for channel 0 (see Section 24.8.2).
    -            DISUP0: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Functional registers are updated from the write registers at the end of each PWM cycle.
    -                    UPDATE = 0x0,
    -                    ///  Functional registers remain the same as long as the timer is running.
    -                    NOUPDATE = 0x1,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u3,
    -            ///  Stops/starts timer channel 1.
    -            RUN1: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Stop.
    -                    STOP_ = 0x0,
    -                    ///  Run.
    -                    RUN_ = 0x1,
    -                },
    -            },
    -            ///  Edge/center aligned operation for channel 1.
    -            CENTER1: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Edge-aligned.
    -                    EDGE_ALIGNED_ = 0x0,
    -                    ///  Center-aligned.
    -                    CENTER_ALIGNED_ = 0x1,
    -                },
    -            },
    -            ///  Selects polarity of the MCOA1 and MCOB1 pins.
    -            POLA1: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Passive state is LOW, active state is HIGH.
    -                    PASSIVE_STATE_IS_LOW = 0x0,
    -                    ///  Passive state is HIGH, active state is LOW.
    -                    PASSIVE_STATE_IS_HIG = 0x1,
    -                },
    -            },
    -            ///  Controls the dead-time feature for channel 1.
    -            DTE1: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Dead-time disabled.
    -                    DEAD_TIME_DISABLED_ = 0x0,
    -                    ///  Dead-time enabled.
    -                    DEAD_TIME_ENABLED_ = 0x1,
    -                },
    -            },
    -            ///  Enable/disable updates of functional registers for channel 1 (see Section 24.8.2).
    -            DISUP1: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Functional registers are updated from the write registers at the end of each PWM cycle.
    -                    UPDATE = 0x0,
    -                    ///  Functional registers remain the same as long as the timer is running.
    -                    NOUPDATE = 0x1,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u3,
    -            ///  Stops/starts timer channel 2.
    -            RUN2: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Stop.
    -                    STOP_ = 0x0,
    -                    ///  Run.
    -                    RUN_ = 0x1,
    -                },
    -            },
    -            ///  Edge/center aligned operation for channel 2.
    -            CENTER2: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Edge-aligned.
    -                    EDGE_ALIGNED_ = 0x0,
    -                    ///  Center-aligned.
    -                    CENTER_ALIGNED_ = 0x1,
    -                },
    -            },
    -            ///  Selects polarity of the MCOA2 and MCOB2 pins.
    -            POLA2: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Passive state is LOW, active state is HIGH.
    -                    PASSIVE_STATE_IS_LOW = 0x0,
    -                    ///  Passive state is HIGH, active state is LOW.
    -                    PASSIVE_STATE_IS_HIG = 0x1,
    -                },
    -            },
    -            ///  Controls the dead-time feature for channel 1.
    -            DTE2: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Dead-time disabled.
    -                    DEAD_TIME_DISABLED_ = 0x0,
    -                    ///  Dead-time enabled.
    -                    DEAD_TIME_ENABLED_ = 0x1,
    -                },
    -            },
    -            ///  Enable/disable updates of functional registers for channel 2 (see Section 24.8.2).
    -            DISUP2: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Functional registers are updated from the write registers at the end of each PWM cycle.
    -                    UPDATE = 0x0,
    -                    ///  Functional registers remain the same as long as the timer is running.
    -                    NOUPDATE = 0x1,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u8,
    -            ///  Controls the polarity of the MCOB outputs for all 3 channels. This bit is typically set to 1 only in 3-phase DC mode.
    -            INVBDC: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  The MCOB outputs have opposite polarity from the MCOA outputs (aside from dead time).
    -                    OPPOSITE = 0x0,
    -                    ///  The MCOB outputs have the same basic polarity as the MCOA outputs. (see Section 24.8.6)
    -                    SAME = 0x1,
    -                },
    -            },
    -            ///  3-phase AC mode select (see Section 24.8.7).
    -            ACMODE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  3-phase AC-mode off: Each PWM channel uses its own timer-counter and period register.
    -                    @"3_PHASE_AC_MODE_OFF" = 0x0,
    -                    ///  3-phase AC-mode on: All PWM channels use the timer-counter and period register of channel 0.
    -                    @"3_PHASE_AC_MODE_ON_" = 0x1,
    -                },
    -            },
    -            ///  3-phase DC mode select (see Section 24.8.6).
    -            DCMODE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  3-phase DC mode off: PWM channels are independent (unless bit ACMODE = 1)
    -                    @"3_PHASE_DC_MODE_OFF" = 0x0,
    -                    ///  3-phase DC mode on: The internal MCOA0 output is routed through the CP register (i.e. a mask) register to all six PWM outputs.
    -                    @"3_PHASE_DC_MODE_ON_" = 0x1,
    -                },
    -            },
    -        }),
    -        ///  PWM Control set address
    -        CON_SET: mmio.Mmio(packed struct(u32) {
    -            ///  Writing a one sets the corresponding bit in the CON register.
    -            RUN0_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CON register.
    -            CENTER0_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CON register.
    -            POLA0_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CON register.
    -            DTE0_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CON register.
    -            DISUP0_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CON register.
    -            RESERVED: u3,
    -            ///  Writing a one sets the corresponding bit in the CON register.
    -            RUN1_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CON register.
    -            CENTER1_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CON register.
    -            POLA1_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CON register.
    -            DTE1_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CON register.
    -            DISUP1_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CON register.
    -            RESERVED: u3,
    -            ///  Writing a one sets the corresponding bit in the CON register.
    -            RUN2_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CON register.
    -            CENTER2_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CON register.
    -            POLA2_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CON register.
    -            DTE2_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CON register.
    -            DISUP2_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CON register.
    -            RESERVED: u8,
    -            ///  Writing a one sets the corresponding bit in the CON register.
    -            INVBDC_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CON register.
    -            ACMODE_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CON register.
    -            DCMODE_SET: u1,
    -        }),
    -        ///  PWM Control clear address
    -        CON_CLR: mmio.Mmio(packed struct(u32) {
    -            ///  Writing a one clears the corresponding bit in the CON register.
    -            RUN0_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CON register.
    -            CENTER0_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CON register.
    -            POLA0_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CON register.
    -            DTE0_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CON register.
    -            DISUP0_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CON register.
    -            RESERVED: u3,
    -            ///  Writing a one clears the corresponding bit in the CON register.
    -            RUN1_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CON register.
    -            CENTER1_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CON register.
    -            POLA1_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CON register.
    -            DTE1_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CON register.
    -            DISUP1_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CON register.
    -            RESERVED: u3,
    -            ///  Writing a one clears the corresponding bit in the CON register.
    -            RUN2_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CON register.
    -            CENTER2_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CON register.
    -            POLA2_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CON register.
    -            DTE2_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CON register.
    -            DISUP2_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CON register.
    -            RESERVED: u8,
    -            ///  Writing a one clears the corresponding bit in the CON register.
    -            INVBDC_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CON register.
    -            ACMOD_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CON register.
    -            DCMODE_CLR: u1,
    -        }),
    -        ///  Capture Control read address
    -        CAPCON: mmio.Mmio(packed struct(u32) {
    -            ///  A 1 in this bit enables a channel 0 capture event on a rising edge on MCI0.
    -            CAP0MCI0_RE: u1,
    -            ///  A 1 in this bit enables a channel 0 capture event on a falling edge on MCI0.
    -            CAP0MCI0_FE: u1,
    -            ///  A 1 in this bit enables a channel 0 capture event on a rising edge on MCI1.
    -            CAP0MCI1_RE: u1,
    -            ///  A 1 in this bit enables a channel 0 capture event on a falling edge on MCI1.
    -            CAP0MCI1_FE: u1,
    -            ///  A 1 in this bit enables a channel 0 capture event on a rising edge on MCI2.
    -            CAP0MCI2_RE: u1,
    -            ///  A 1 in this bit enables a channel 0 capture event on a falling edge on MCI2.
    -            CAP0MCI2_FE: u1,
    -            ///  A 1 in this bit enables a channel 1 capture event on a rising edge on MCI0.
    -            CAP1MCI0_RE: u1,
    -            ///  A 1 in this bit enables a channel 1 capture event on a falling edge on MCI0.
    -            CAP1MCI0_FE: u1,
    -            ///  A 1 in this bit enables a channel 1 capture event on a rising edge on MCI1.
    -            CAP1MCI1_RE: u1,
    -            ///  A 1 in this bit enables a channel 1 capture event on a falling edge on MCI1.
    -            CAP1MCI1_FE: u1,
    -            ///  A 1 in this bit enables a channel 1 capture event on a rising edge on MCI2.
    -            CAP1MCI2_RE: u1,
    -            ///  A 1 in this bit enables a channel 1 capture event on a falling edge on MCI2.
    -            CAP1MCI2_FE: u1,
    -            ///  A 1 in this bit enables a channel 2 capture event on a rising edge on MCI0.
    -            CAP2MCI0_RE: u1,
    -            ///  A 1 in this bit enables a channel 2 capture event on a falling edge on MCI0.
    -            CAP2MCI0_FE: u1,
    -            ///  A 1 in this bit enables a channel 2 capture event on a rising edge on MCI1.
    -            CAP2MCI1_RE: u1,
    -            ///  A 1 in this bit enables a channel 2 capture event on a falling edge on MCI1.
    -            CAP2MCI1_FE: u1,
    -            ///  A 1 in this bit enables a channel 2 capture event on a rising edge on MCI2.
    -            CAP2MCI2_RE: u1,
    -            ///  A 1 in this bit enables a channel 2 capture event on a falling edge on MCI2.
    -            CAP2MCI2_FE: u1,
    -            ///  If this bit is 1, TC0 is reset by a channel 0 capture event.
    -            RT0: u1,
    -            ///  If this bit is 1, TC1 is reset by a channel 1 capture event.
    -            RT1: u1,
    -            ///  If this bit is 1, TC2 is reset by a channel 2 capture event.
    -            RT2: u1,
    -            ///  Reserved.
    -            RESERVED: u11,
    -        }),
    -        ///  Capture Control set address
    -        CAPCON_SET: mmio.Mmio(packed struct(u32) {
    -            ///  Writing a one sets the corresponding bits in the CAPCON register.
    -            CAP0MCI0_RE_SET: u1,
    -            ///  Writing a one sets the corresponding bits in the CAPCON register.
    -            CAP0MCI0_FE_SET: u1,
    -            ///  Writing a one sets the corresponding bits in the CAPCON register.
    -            CAP0MCI1_RE_SET: u1,
    -            ///  Writing a one sets the corresponding bits in the CAPCON register.
    -            CAP0MCI1_FE_SET: u1,
    -            ///  Writing a one sets the corresponding bits in the CAPCON register.
    -            CAP0MCI2_RE_SET: u1,
    -            ///  Writing a one sets the corresponding bits in the CAPCON register.
    -            CAP0MCI2_FE_SET: u1,
    -            ///  Writing a one sets the corresponding bits in the CAPCON register.
    -            CAP1MCI0_RE_SET: u1,
    -            ///  Writing a one sets the corresponding bits in the CAPCON register.
    -            CAP1MCI0_FE_SET: u1,
    -            ///  Writing a one sets the corresponding bits in the CAPCON register.
    -            CAP1MCI1_RE_SET: u1,
    -            ///  Writing a one sets the corresponding bits in the CAPCON register.
    -            CAP1MCI1_FE_SET: u1,
    -            ///  Writing a one sets the corresponding bits in the CAPCON register.
    -            CAP1MCI2_RE_SET: u1,
    -            ///  Writing a one sets the corresponding bits in the CAPCON register.
    -            CAP1MCI2_FE_SET: u1,
    -            ///  Writing a one sets the corresponding bits in the CAPCON register.
    -            CAP2MCI0_RE_SET: u1,
    -            ///  Writing a one sets the corresponding bits in the CAPCON register.
    -            CAP2MCI0_FE_SET: u1,
    -            ///  Writing a one sets the corresponding bits in the CAPCON register.
    -            CAP2MCI1_RE_SET: u1,
    -            ///  Writing a one sets the corresponding bits in the CAPCON register.
    -            CAP2MCI1_FE_SET: u1,
    -            ///  Writing a one sets the corresponding bits in the CAPCON register.
    -            CAP2MCI2_RE_SET: u1,
    -            ///  Writing a one sets the corresponding bits in the CAPCON register.
    -            CAP2MCI2_FE_SET: u1,
    -            ///  Writing a one sets the corresponding bits in the CAPCON register.
    -            RT0_SET: u1,
    -            ///  Writing a one sets the corresponding bits in the CAPCON register.
    -            RT1_SET: u1,
    -            ///  Writing a one sets the corresponding bits in the CAPCON register.
    -            RT2_SET: u1,
    -            ///  Reserved.
    -            RESERVED: u11,
    -        }),
    -        ///  Event Control clear address
    -        CAPCON_CLR: mmio.Mmio(packed struct(u32) {
    -            ///  Writing a one clears the corresponding bits in the CAPCON register.
    -            CAP0MCI0_RE_CLR: u1,
    -            ///  Writing a one clears the corresponding bits in the CAPCON register.
    -            CAP0MCI0_FE_CLR: u1,
    -            ///  Writing a one clears the corresponding bits in the CAPCON register.
    -            CAP0MCI1_RE_CLR: u1,
    -            ///  Writing a one clears the corresponding bits in the CAPCON register.
    -            CAP0MCI1_FE_CLR: u1,
    -            ///  Writing a one clears the corresponding bits in the CAPCON register.
    -            CAP0MCI2_RE_CLR: u1,
    -            ///  Writing a one clears the corresponding bits in the CAPCON register.
    -            CAP0MCI2_FE_CLR: u1,
    -            ///  Writing a one clears the corresponding bits in the CAPCON register.
    -            CAP1MCI0_RE_CLR: u1,
    -            ///  Writing a one clears the corresponding bits in the CAPCON register.
    -            CAP1MCI0_FE_CLR: u1,
    -            ///  Writing a one clears the corresponding bits in the CAPCON register.
    -            CAP1MCI1_RE_CLR: u1,
    -            ///  Writing a one clears the corresponding bits in the CAPCON register.
    -            CAP1MCI1_FE_CLR: u1,
    -            ///  Writing a one clears the corresponding bits in the CAPCON register.
    -            CAP1MCI2_RE_CLR: u1,
    -            ///  Writing a one clears the corresponding bits in the CAPCON register.
    -            CAP1MCI2_FE_CLR: u1,
    -            ///  Writing a one clears the corresponding bits in the CAPCON register.
    -            CAP2MCI0_RE_CLR: u1,
    -            ///  Writing a one clears the corresponding bits in the CAPCON register.
    -            CAP2MCI0_FE_CLR: u1,
    -            ///  Writing a one clears the corresponding bits in the CAPCON register.
    -            CAP2MCI1_RE_CLR: u1,
    -            ///  Writing a one clears the corresponding bits in the CAPCON register.
    -            CAP2MCI1_FE_CLR: u1,
    -            ///  Writing a one clears the corresponding bits in the CAPCON register.
    -            CAP2MCI2_RE_CLR: u1,
    -            ///  Writing a one clears the corresponding bits in the CAPCON register.
    -            CAP2MCI2_FE_CLR: u1,
    -            ///  Writing a one clears the corresponding bits in the CAPCON register.
    -            RT0_CLR: u1,
    -            ///  Writing a one clears the corresponding bits in the CAPCON register.
    -            RT1_CLR: u1,
    -            ///  Writing a one clears the corresponding bits in the CAPCON register.
    -            RT2_CLR: u1,
    -            ///  Reserved.
    -            RESERVED: u11,
    -        }),
    -        reserved60: [36]u8,
    -        ///  Dead time register
    -        DT: mmio.Mmio(packed struct(u32) {
    -            ///  Dead time for channel 0.[1]
    -            DT0: u10,
    -            ///  Dead time for channel 1.[2]
    -            DT1: u10,
    -            ///  Dead time for channel 2.[2]
    -            DT2: u10,
    -            ///  reserved
    -            RESERVED: u2,
    -        }),
    -        ///  Communication Pattern register
    -        CP: mmio.Mmio(packed struct(u32) {
    -            ///  Communication pattern output A, channel 0.
    -            CCPA0: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  MCOA0 passive.
    -                    MCOA0_PASSIVE_ = 0x0,
    -                    ///  internal MCOA0.
    -                    INTERNAL_MCOA0_ = 0x1,
    -                },
    -            },
    -            ///  Communication pattern output B, channel 0.
    -            CCPB0: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  MCOB0 passive.
    -                    MCOB0_PASSIVE_ = 0x0,
    -                    ///  MCOB0 tracks internal MCOA0.
    -                    MCOB0_TRACKS_INTERNA = 0x1,
    -                },
    -            },
    -            ///  Communication pattern output A, channel 1.
    -            CCPA1: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  MCOA1 passive.
    -                    MCOA1_PASSIVE_ = 0x0,
    -                    ///  MCOA1 tracks internal MCOA0.
    -                    MCOA1_TRACKS_INTERNA = 0x1,
    -                },
    -            },
    -            ///  Communication pattern output B, channel 1.
    -            CCPB1: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  MCOB1 passive.
    -                    MCOB1_PASSIVE_ = 0x0,
    -                    ///  MCOB1 tracks internal MCOA0.
    -                    MCOB1_TRACKS_INTERNA = 0x1,
    -                },
    -            },
    -            ///  Communication pattern output A, channel 2.
    -            CCPA2: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  MCOA2 passive.
    -                    MCOA2_PASSIVE_ = 0x0,
    -                    ///  MCOA2 tracks internal MCOA0.
    -                    MCOA2_TRACKS_INTERNA = 0x1,
    -                },
    -            },
    -            ///  Communication pattern output B, channel 2.
    -            CCPB2: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  MCOB2 passive.
    -                    MCOB2_PASSIVE_ = 0x0,
    -                    ///  MCOB2 tracks internal MCOA0.
    -                    MCOB2_TRACKS_INTERNA = 0x1,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u26,
    -        }),
    -        reserved80: [12]u8,
    -        ///  Interrupt Enable read address
    -        INTEN: mmio.Mmio(packed struct(u32) {
    -            ///  Limit interrupt for channel 0.
    -            ILIM0: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Interrupt disabled.
    -                    INTERRUPT_DISABLED_ = 0x0,
    -                    ///  Interrupt enabled.
    -                    INTERRUPT_ENABLED_ = 0x1,
    -                },
    -            },
    -            ///  Match interrupt for channel 0.
    -            IMAT0: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Interrupt disabled.
    -                    INTERRUPT_DISABLED_ = 0x0,
    -                    ///  Interrupt enabled.
    -                    INTERRUPT_ENABLED_ = 0x1,
    -                },
    -            },
    -            ///  Capture interrupt for channel 0.
    -            ICAP0: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Interrupt disabled.
    -                    INTERRUPT_DISABLED_ = 0x0,
    -                    ///  Interrupt enabled.
    -                    INTERRUPT_ENABLED_ = 0x1,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u1,
    -            ///  Limit interrupt for channel 1.
    -            ILIM1: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Interrupt disabled.
    -                    INTERRUPT_DISABLED_ = 0x0,
    -                    ///  Interrupt enabled.
    -                    INTERRUPT_ENABLED_ = 0x1,
    -                },
    -            },
    -            ///  Match interrupt for channel 1.
    -            IMAT1: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Interrupt disabled.
    -                    INTERRUPT_DISABLED_ = 0x0,
    -                    ///  Interrupt enabled.
    -                    INTERRUPT_ENABLED_ = 0x1,
    -                },
    -            },
    -            ///  Capture interrupt for channel 1.
    -            ICAP1: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Interrupt disabled.
    -                    INTERRUPT_DISABLED_ = 0x0,
    -                    ///  Interrupt enabled.
    -                    INTERRUPT_ENABLED_ = 0x1,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u1,
    -            ///  Limit interrupt for channel 2.
    -            ILIM2: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Interrupt disabled.
    -                    INTERRUPT_DISABLED_ = 0x0,
    -                    ///  Interrupt enabled.
    -                    INTERRUPT_ENABLED_ = 0x1,
    -                },
    -            },
    -            ///  Match interrupt for channel 2.
    -            IMAT2: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Interrupt disabled.
    -                    INTERRUPT_DISABLED_ = 0x0,
    -                    ///  Interrupt enabled.
    -                    INTERRUPT_ENABLED_ = 0x1,
    -                },
    -            },
    -            ///  Capture interrupt for channel 2.
    -            ICAP2: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Interrupt disabled.
    -                    INTERRUPT_DISABLED_ = 0x0,
    -                    ///  Interrupt enabled.
    -                    INTERRUPT_ENABLED_ = 0x1,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u4,
    -            ///  Fast abort interrupt.
    -            ABORT: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Interrupt disabled.
    -                    INTERRUPT_DISABLED_ = 0x0,
    -                    ///  Interrupt enabled.
    -                    INTERRUPT_ENABLED_ = 0x1,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u16,
    -        }),
    -        ///  Interrupt Enable set address
    -        INTEN_SET: mmio.Mmio(packed struct(u32) {
    -            ///  Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.
    -            ILIM0_SET: u1,
    -            ///  Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.
    -            IMAT0_SET: u1,
    -            ///  Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.
    -            ICAP0_SET: u1,
    -            ///  Reserved.
    -            RESERVED: u1,
    -            ///  Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.
    -            ILIM1_SET: u1,
    -            ///  Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.
    -            IMAT1_SET: u1,
    -            ///  Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.
    -            ICAP1_SET: u1,
    -            ///  Reserved.
    -            RESERVED: u1,
    -            reserved9: u1,
    -            ///  Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.
    -            ILIM2_SET: u1,
    -            ///  Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.
    -            IMAT2_SET: u1,
    -            ///  Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.
    -            ICAP2_SET: u1,
    -            ///  Reserved.
    -            RESERVED: u3,
    -            ///  Writing a one sets the corresponding bit in INTEN, thus enabling the interrupt.
    -            ABORT_SET: u1,
    -            ///  Reserved.
    -            RESERVED: u16,
    -        }),
    -        ///  Interrupt Enable clear address
    -        INTEN_CLR: mmio.Mmio(packed struct(u32) {
    -            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    -            ILIM0_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    -            IMAT0_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    -            ICAP0_CLR: u1,
    -            ///  Reserved.
    -            RESERVED: u1,
    -            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    -            ILIM1_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    -            IMAT1_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    -            ICAP1_CLR: u1,
    -            ///  Reserved.
    -            RESERVED: u1,
    -            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    -            ILIM2_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    -            IMAT2_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    -            ICAP2_CLR: u1,
    -            ///  Reserved.
    -            RESERVED: u4,
    -            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    -            ABORT_CLR: u1,
    -            ///  Reserved.
    -            RESERVED: u16,
    -        }),
    -        ///  Count Control read address
    -        CNTCON: mmio.Mmio(packed struct(u32) {
    -            ///  Counter 0 rising edge mode, channel 0.
    -            TC0MCI0_RE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  A rising edge on MCI0 does not affect counter 0.
    -                    A_RISING_EDGE_ON_MCI = 0x0,
    -                    ///  If MODE0 is 1, counter 0 advances on a rising edge on MCI0.
    -                    RISING = 0x1,
    -                },
    -            },
    -            ///  Counter 0 falling edge mode, channel 0.
    -            TC0MCI0_FE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  A falling edge on MCI0 does not affect counter 0.
    -                    A_FALLING_EDGE_ON_MC = 0x0,
    -                    ///  If MODE0 is 1, counter 0 advances on a falling edge on MCI0.
    -                    FALLING = 0x1,
    -                },
    -            },
    -            ///  Counter 0 rising edge mode, channel 1.
    -            TC0MCI1_RE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  A rising edge on MCI1 does not affect counter 0.
    -                    A_RISING_EDGE_ON_MCI = 0x0,
    -                    ///  If MODE0 is 1, counter 0 advances on a rising edge on MCI1.
    -                    RISING = 0x1,
    -                },
    -            },
    -            ///  Counter 0 falling edge mode, channel 1.
    -            TC0MCI1_FE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  A falling edge on MCI1 does not affect counter 0.
    -                    A_FALLING_EDGE_ON_MC = 0x0,
    -                    ///  If MODE0 is 1, counter 0 advances on a falling edge on MCI1.
    -                    FALLING = 0x1,
    -                },
    -            },
    -            ///  Counter 0 rising edge mode, channel 2.
    -            TC0MCI2_RE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  A rising edge on MCI0 does not affect counter 0.
    -                    A_RISING_EDGE_ON_MCI = 0x0,
    -                    ///  If MODE0 is 1, counter 0 advances on a rising edge on MCI2.
    -                    RISING = 0x1,
    -                },
    -            },
    -            ///  Counter 0 falling edge mode, channel 2.
    -            TC0MCI2_FE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  A falling edge on MCI0 does not affect counter 0.
    -                    A_FALLING_EDGE_ON_MC = 0x0,
    -                    ///  If MODE0 is 1, counter 0 advances on a falling edge on MCI2.
    -                    FALLLING = 0x1,
    -                },
    -            },
    -            ///  Counter 1 rising edge mode, channel 0.
    -            TC1MCI0_RE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  A rising edge on MCI0 does not affect counter 1.
    -                    A_RISING_EDGE_ON_MCI = 0x0,
    -                    ///  If MODE1 is 1, counter 1 advances on a rising edge on MCI0.
    -                    RISING = 0x1,
    -                },
    -            },
    -            ///  Counter 1 falling edge mode, channel 0.
    -            TC1MCI0_FE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  A falling edge on MCI0 does not affect counter 1.
    -                    A_FALLING_EDGE_ON_MC = 0x0,
    -                    ///  If MODE1 is 1, counter 1 advances on a falling edge on MCI0.
    -                    FALLING = 0x1,
    -                },
    -            },
    -            ///  Counter 1 rising edge mode, channel 1.
    -            TC1MCI1_RE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  A rising edge on MCI1 does not affect counter 1.
    -                    A_RISING_EDGE_ON_MCI = 0x0,
    -                    ///  If MODE1 is 1, counter 1 advances on a rising edge on MCI1.
    -                    RISING = 0x1,
    -                },
    -            },
    -            ///  Counter 1 falling edge mode, channel 1.
    -            TC1MCI1_FE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  A falling edge on MCI0 does not affect counter 1.
    -                    A_FALLING_EDGE_ON_MC = 0x0,
    -                    ///  If MODE1 is 1, counter 1 advances on a falling edge on MCI1.
    -                    FALLING = 0x1,
    -                },
    -            },
    -            ///  Counter 1 rising edge mode, channel 2.
    -            TC1MCI2_RE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  A rising edge on MCI2 does not affect counter 1.
    -                    A_RISING_EDGE_ON_MCI = 0x0,
    -                    ///  If MODE1 is 1, counter 1 advances on a rising edge on MCI2.
    -                    RISING = 0x1,
    -                },
    -            },
    -            ///  Counter 1 falling edge mode, channel 2.
    -            TC1MCI2_FE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  A falling edge on MCI2 does not affect counter 1.
    -                    A_FALLING_EDGE_ON_MC = 0x0,
    -                    ///  If MODE1 is 1, counter 1 advances on a falling edge on MCI2.
    -                    FALLING = 0x1,
    -                },
    -            },
    -            ///  Counter 2 rising edge mode, channel 0.
    -            TC2MCI0_RE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  A rising edge on MCI0 does not affect counter 2.
    -                    A_RISING_EDGE_ON_MCI = 0x0,
    -                    ///  If MODE2 is 1, counter 2 advances on a rising edge on MCI0.
    -                    RISING = 0x1,
    -                },
    -            },
    -            ///  Counter 2 falling edge mode, channel 0.
    -            TC2MCI0_FE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  A falling edge on MCI0 does not affect counter 2.
    -                    A_FALLING_EDGE_ON_MC = 0x0,
    -                    ///  If MODE2 is 1, counter 2 advances on a falling edge on MCI0.
    -                    FALLING = 0x1,
    -                },
    -            },
    -            ///  Counter 2 rising edge mode, channel 1.
    -            TC2MCI1_RE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  A rising edge on MCI1 does not affect counter 2.
    -                    A_RISING_EDGE_ON_MCI = 0x0,
    -                    ///  If MODE2 is 1, counter 2 advances on a rising edge on MCI1.
    -                    RISING = 0x1,
    -                },
    -            },
    -            ///  Counter 2 falling edge mode, channel 1.
    -            TC2MCI1_FE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  A falling edge on MCI1 does not affect counter 2.
    -                    A_FALLING_EDGE_ON_MC = 0x0,
    -                    ///  If MODE2 is 1, counter 2 advances on a falling edge on MCI1.
    -                    FALLING = 0x1,
    -                },
    -            },
    -            ///  Counter 2 rising edge mode, channel 2.
    -            TC2MCI2_RE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  A rising edge on MCI2 does not affect counter 2.
    -                    A_RISING_EDGE_ON_MCI = 0x0,
    -                    ///  If MODE2 is 1, counter 2 advances on a rising edge on MCI2.
    -                    RISIING = 0x1,
    -                },
    -            },
    -            ///  Counter 2 falling edge mode, channel 2.
    -            TC2MCI2_FE: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  A falling edge on MCI2 does not affect counter 2.
    -                    A_FALLING_EDGE_ON_MC = 0x0,
    -                    ///  If MODE2 is 1, counter 2 advances on a falling edge on MCI2.
    -                    FALLING = 0x1,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u11,
    -            ///  Channel 0 counter/timer mode.
    -            CNTR0: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Channel 0 is in timer mode.
    -                    CHANNEL_0_IS_IN_TIME = 0x0,
    -                    ///  Channel 0 is in counter mode.
    -                    CHANNEL_0_IS_IN_COUN = 0x1,
    -                },
    -            },
    -            ///  Channel 1 counter/timer mode.
    -            CNTR1: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Channel 1 is in timer mode.
    -                    CHANNEL_1_IS_IN_TIME = 0x0,
    -                    ///  Channel 1 is in counter mode.
    -                    CHANNEL_1_IS_IN_COUN = 0x1,
    -                },
    -            },
    -            ///  Channel 2 counter/timer mode.
    -            CNTR2: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Channel 2 is in timer mode.
    -                    CHANNEL_2_IS_IN_TIME = 0x0,
    -                    ///  Channel 2 is in counter mode.
    -                    CHANNEL_2_IS_IN_COUN = 0x1,
    -                },
    -            },
    -        }),
    -        ///  Count Control set address
    -        CNTCON_SET: mmio.Mmio(packed struct(u32) {
    -            ///  Writing a one sets the corresponding bit in the CNTCON register.
    -            TC0MCI0_RE_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CNTCON register.
    -            TC0MCI0_FE_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CNTCON register.
    -            TC0MCI1_RE_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CNTCON register.
    -            TC0MCI1_FE_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CNTCON register.
    -            TC0MCI2_RE_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CNTCON register.
    -            TC0MCI2_FE_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CNTCON register.
    -            TC1MCI0_RE_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CNTCON register.
    -            TC1MCI0_FE_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CNTCON register.
    -            TC1MCI1_RE_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CNTCON register.
    -            TC1MCI1_FE_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CNTCON register.
    -            TC1MCI2_RE_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CNTCON register.
    -            TC1MCI2_FE_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CNTCON register.
    -            TC2MCI0_RE_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CNTCON register.
    -            TC2MCI0_FE_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CNTCON register.
    -            TC2MCI1_RE_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CNTCON register.
    -            TC2MCI1_FE_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CNTCON register.
    -            TC2MCI2_RE_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CNTCON register.
    -            TC2MCI2_FE_SET: u1,
    -            ///  Reserved.
    -            RESERVED: u11,
    -            ///  Writing a one sets the corresponding bit in the CNTCON register.
    -            CNTR0_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CNTCON register.
    -            CNTR1_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the CNTCON register.
    -            CNTR2_SET: u1,
    -        }),
    -        ///  Count Control clear address
    -        CNTCON_CLR: mmio.Mmio(packed struct(u32) {
    -            ///  Writing a one clears the corresponding bit in the CNTCON register.
    -            TC0MCI0_RE_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CNTCON register.
    -            TC0MCI0_FE_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CNTCON register.
    -            TC0MCI1_RE_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CNTCON register.
    -            TC0MCI1_FE_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CNTCON register.
    -            TC0MCI2_RE: u1,
    -            ///  Writing a one clears the corresponding bit in the CNTCON register.
    -            TC0MCI2_FE_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CNTCON register.
    -            TC1MCI0_RE_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CNTCON register.
    -            TC1MCI0_FE_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CNTCON register.
    -            TC1MCI1_RE_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CNTCON register.
    -            TC1MCI1_FE_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CNTCON register.
    -            TC1MCI2_RE_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CNTCON register.
    -            TC1MCI2_FE_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CNTCON register.
    -            TC2MCI0_RE_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CNTCON register.
    -            TC2MCI0_FE_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CNTCON register.
    -            TC2MCI1_RE_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CNTCON register.
    -            TC2MCI1_FE_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CNTCON register.
    -            TC2MCI2_RE_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CNTCON register.
    -            TC2MCI2_FE_CLR: u1,
    -            ///  Reserved.
    -            RESERVED: u11,
    -            ///  Writing a one clears the corresponding bit in the CNTCON register.
    -            CNTR0_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CNTCON register.
    -            CNTR1_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in the CNTCON register.
    -            CNTR2_CLR: u1,
    -        }),
    -        ///  Interrupt flags read address
    -        INTF: mmio.Mmio(packed struct(u32) {
    -            ///  Limit interrupt flag for channel 0.
    -            ILIM0_F: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  This interrupt source is not contributing to the MCPWM interrupt request.
    -                    THIS_INTERRUPT_SOURC = 0x0,
    -                    ///  If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.
    -                    IF_THE_CORRESPONDING = 0x1,
    -                },
    -            },
    -            ///  Match interrupt flag for channel 0.
    -            IMAT0_F: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  This interrupt source is not contributing to the MCPWM interrupt request.
    -                    THIS_INTERRUPT_SOURC = 0x0,
    -                    ///  If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.
    -                    IF_THE_CORRESPONDING = 0x1,
    -                },
    -            },
    -            ///  Capture interrupt flag for channel 0.
    -            ICAP0_F: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  This interrupt source is not contributing to the MCPWM interrupt request.
    -                    THIS_INTERRUPT_SOURC = 0x0,
    -                    ///  If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.
    -                    IF_THE_CORRESPONDING = 0x1,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u1,
    -            ///  Limit interrupt flag for channel 1.
    -            ILIM1_F: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  This interrupt source is not contributing to the MCPWM interrupt request.
    -                    THIS_INTERRUPT_SOURC = 0x0,
    -                    ///  If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.
    -                    IF_THE_CORRESPONDING = 0x1,
    -                },
    -            },
    -            ///  Match interrupt flag for channel 1.
    -            IMAT1_F: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  This interrupt source is not contributing to the MCPWM interrupt request.
    -                    THIS_INTERRUPT_SOURC = 0x0,
    -                    ///  If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.
    -                    IF_THE_CORRESPONDING = 0x1,
    -                },
    -            },
    -            ///  Capture interrupt flag for channel 1.
    -            ICAP1_F: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  This interrupt source is not contributing to the MCPWM interrupt request.
    -                    THIS_INTERRUPT_SOURC = 0x0,
    -                    ///  If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.
    -                    IF_THE_CORRESPONDING = 0x1,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u1,
    -            ///  Limit interrupt flag for channel 2.
    -            ILIM2_F: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  This interrupt source is not contributing to the MCPWM interrupt request.
    -                    THIS_INTERRUPT_SOURC = 0x0,
    -                    ///  If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.
    -                    IF_THE_CORRESPONDING = 0x1,
    -                },
    -            },
    -            ///  Match interrupt flag for channel 2.
    -            IMAT2_F: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  This interrupt source is not contributing to the MCPWM interrupt request.
    -                    THIS_INTERRUPT_SOURC = 0x0,
    -                    ///  If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.
    -                    IF_THE_CORRESPONDING = 0x1,
    -                },
    -            },
    -            ///  Capture interrupt flag for channel 2.
    -            ICAP2_F: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  This interrupt source is not contributing to the MCPWM interrupt request.
    -                    THIS_INTERRUPT_SOURC = 0x0,
    -                    ///  If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.
    -                    IF_THE_CORRESPONDING = 0x1,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u4,
    -            ///  Fast abort interrupt flag.
    -            ABORT_F: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  This interrupt source is not contributing to the MCPWM interrupt request.
    -                    THIS_INTERRUPT_SOURC = 0x0,
    -                    ///  If the corresponding bit in INTEN is 1, the MCPWM module is asserting its interrupt request to the Interrupt Controller.
    -                    IF_THE_CORRESPONDING = 0x1,
    -                },
    -            },
    -            ///  Reserved.
    -            RESERVED: u16,
    -        }),
    -        ///  Interrupt flags set address
    -        INTF_SET: mmio.Mmio(packed struct(u32) {
    -            ///  Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.
    -            ILIM0_F_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.
    -            IMAT0_F_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.
    -            ICAP0_F_SET: u1,
    -            ///  Reserved.
    -            RESERVED: u1,
    -            ///  Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.
    -            ILIM1_F_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.
    -            IMAT1_F_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.
    -            ICAP1_F_SET: u1,
    -            ///  Reserved.
    -            RESERVED: u1,
    -            ///  Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.
    -            ILIM2_F_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.
    -            IMAT2_F_SET: u1,
    -            ///  Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.
    -            ICAP2_F_SET: u1,
    -            ///  Reserved.
    -            RESERVED: u4,
    -            ///  Writing a one sets the corresponding bit in the INTF register, thus possibly simulating hardware interrupt.
    -            ABORT_F_SET: u1,
    -            ///  Reserved.
    -            RESERVED: u16,
    -        }),
    -        ///  Interrupt flags clear address
    -        INTF_CLR: mmio.Mmio(packed struct(u32) {
    -            ///  Writing a one clears the corresponding bit in the INTF register, thus clearing the corresponding interrupt request.
    -            ILIM0_F_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    -            IMAT0_F_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    -            ICAP0_F_CLR: u1,
    -            ///  Reserved.
    -            RESERVED: u1,
    -            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    -            ILIM1_F_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    -            IMAT1_F_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    -            ICAP1_F_CLR: u1,
    -            ///  Reserved.
    -            RESERVED: u1,
    -            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    -            ILIM2_F_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    -            IMAT2_F_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    -            ICAP2_F_CLR: u1,
    -            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    -            RESERVED: u4,
    -            ///  Writing a one clears the corresponding bit in INTEN, thus disabling the interrupt.
    -            ABORT_F_CLR: u1,
    -            ///  Reserved.
    -            RESERVED: u16,
    -        }),
    -        ///  Capture clear address
    -        CAP_CLR: mmio.Mmio(packed struct(u32) {
    -            ///  Writing a 1 to this bit clears the CAP0 register.
    -            CAP_CLR0: u1,
    -            ///  Writing a 1 to this bit clears the CAP1 register.
    -            CAP_CLR1: u1,
    -            ///  Writing a 1 to this bit clears the CAP2 register.
    -            CAP_CLR2: u1,
    -            ///  Reserved
    -            RESERVED: u29,
    -        }),
    -    };
    -
    -    ///  Repetitive Interrupt Timer (RIT)
    -    pub const RITIMER = extern struct {
    -        ///  Compare register
    -        COMPVAL: mmio.Mmio(packed struct(u32) {
    -            ///  Compare register. Holds the compare value which is compared to the counter.
    -            RICOMP: u32,
    -        }),
    -        ///  Mask register. This register holds the 32-bit mask value. A 1 written to any bit will force a compare on the corresponding bit of the counter and compare register.
    -        MASK: mmio.Mmio(packed struct(u32) {
    -            ///  Mask register. This register holds the 32-bit mask value. A one written to any bit overrides the result of the comparison for the corresponding bit of the counter and compare register (causes the comparison of the register bits to be always true).
    -            RIMASK: u32,
    -        }),
    -        ///  Control register.
    -        CTRL: mmio.Mmio(packed struct(u32) {
    -            ///  Interrupt flag
    -            RITINT: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  This bit is set to 1 by hardware whenever the counter value equals the masked compare value specified by the contents of RICOMPVAL and RIMASK registers. Writing a 1 to this bit will clear it to 0. Writing a 0 has no effect.
    -                    THIS_BIT_IS_SET_TO_1 = 0x1,
    -                    ///  The counter value does not equal the masked compare value.
    -                    THE_COUNTER_VALUE_DO = 0x0,
    -                },
    -            },
    -            ///  Timer enable clear
    -            RITENCLR: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  The timer will be cleared to 0 whenever the counter value equals the masked compare value specified by the contents of RICOMPVAL and RIMASK registers. This will occur on the same clock that sets the interrupt flag.
    -                    THE_TIMER_WILL_BE_CL = 0x1,
    -                    ///  The timer will not be cleared to 0.
    -                    THE_TIMER_WILL_NOT_B = 0x0,
    -                },
    -            },
    -            ///  Timer enable for debug
    -            RITENBR: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  The timer is halted when the processor is halted for debugging.
    -                    THE_TIMER_IS_HALTED_ = 0x1,
    -                    ///  Debug has no effect on the timer operation.
    -                    DEBUG_HAS_NO_EFFECT_ = 0x0,
    -                },
    -            },
    -            ///  Timer enable.
    -            RITEN: packed union {
    -                raw: u1,
    -                value: enum(u1) {
    -                    ///  Timer enabled. This can be overruled by a debug halt if enabled in bit 2.
    -                    TIMER_ENABLED_THIS_ = 0x1,
    -                    ///  Timer disabled.
    -                    TIMER_DISABLED_ = 0x0,
    -                },
    -            },
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u28,
    -        }),
    -        ///  32-bit counter
    -        COUNTER: mmio.Mmio(packed struct(u32) {
    -            ///  32-bit up counter. Counts continuously unless RITEN bit in RICTRL register is cleared or debug mode is entered (if enabled by the RITNEBR bit in RICTRL). Can be loaded to any value in software.
    -            RICOUNTER: u32,
    -        }),
    -    };
    -
    -    ///  I2S interface
    -    pub const I2S = extern struct {
    -        ///  I2S Digital Audio Output Register. Contains control bits for the I2S transmit channel.
    -        DAO: mmio.Mmio(packed struct(u32) {
    -            ///  Selects the number of bytes in data as follows:
    -            WORDWIDTH: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  8-bit data
    -                    @"8_BIT_DATA" = 0x0,
    -                    ///  16-bit data
    -                    @"16_BIT_DATA" = 0x1,
    -                    ///  32-bit data
    -                    @"32_BIT_DATA" = 0x3,
    -                    _,
    -                },
    -            },
    -            ///  When 1, data is of monaural format. When 0, the data is in stereo format.
    -            MONO: u1,
    -            ///  When 1, disables accesses on FIFOs, places the transmit channel in mute mode.
    -            STOP: u1,
    -            ///  When 1, asynchronously resets the transmit channel and FIFO.
    -            RESET: u1,
    -            ///  When 0, the interface is in master mode. When 1, the interface is in slave mode. See Section 34.7.2 for a summary of useful combinations for this bit with TXMODE.
    -            WS_SEL: u1,
    -            ///  Word select half period minus 1, i.e. WS 64clk period -> ws_halfperiod = 31.
    -            WS_HALFPERIOD: u9,
    -            ///  When 1, the transmit channel sends only zeroes.
    -            MUTE: u1,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u16,
    -        }),
    -        ///  I2S Digital Audio Input Register. Contains control bits for the I2S receive channel.
    -        DAI: mmio.Mmio(packed struct(u32) {
    -            ///  Selects the number of bytes in data as follows:
    -            WORDWIDTH: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  8-bit data
    -                    @"8_BIT_DATA" = 0x0,
    -                    ///  16-bit data
    -                    @"16_BIT_DATA" = 0x1,
    -                    ///  32-bit data
    -                    @"32_BIT_DATA" = 0x3,
    -                    _,
    -                },
    -            },
    -            ///  When 1, data is of monaural format. When 0, the data is in stereo format.
    -            MONO: u1,
    -            ///  When 1, disables accesses on FIFOs, places the transmit channel in mute mode.
    -            STOP: u1,
    -            ///  When 1, asynchronously reset the transmit channel and FIFO.
    -            RESET: u1,
    -            ///  When 0, the interface is in master mode. When 1, the interface is in slave mode. See Section 34.7.2 for a summary of useful combinations for this bit with RXMODE.
    -            WS_SEL: u1,
    -            ///  Word select half period minus 1, i.e. WS 64clk period -> ws_halfperiod = 31.
    -            WS_HALFPERIOD: u9,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u17,
    -        }),
    -        ///  I2S Transmit FIFO. Access register for the 8 x 32-bit transmitter FIFO.
    -        TXFIFO: mmio.Mmio(packed struct(u32) {
    -            ///  8 x 32-bit transmit FIFO.
    -            I2STXFIFO: u32,
    -        }),
    -        ///  I2S Receive FIFO. Access register for the 8 x 32-bit receiver FIFO.
    -        RXFIFO: mmio.Mmio(packed struct(u32) {
    -            ///  8 x 32-bit transmit FIFO.
    -            I2SRXFIFO: u32,
    -        }),
    -        ///  I2S Status Feedback Register. Contains status information about the I2S interface.
    -        STATE: mmio.Mmio(packed struct(u32) {
    -            ///  This bit reflects the presence of Receive Interrupt or Transmit Interrupt. This is determined by comparing the current FIFO levels to the rx_depth_irq and tx_depth_irq fields in the IRQ register.
    -            IRQ: u1,
    -            ///  This bit reflects the presence of Receive or Transmit DMA Request 1. This is determined by comparing the current FIFO levels to the rx_depth_dma1 and tx_depth_dma1 fields in the DMA1 register.
    -            DMAREQ1: u1,
    -            ///  This bit reflects the presence of Receive or Transmit DMA Request 2. This is determined by comparing the current FIFO levels to the rx_depth_dma2 and tx_depth_dma2 fields in the DMA2 register.
    -            DMAREQ2: u1,
    -            ///  Reserved.
    -            RESERVED: u5,
    -            ///  Reflects the current level of the Receive FIFO.
    -            RX_LEVEL: u4,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u4,
    -            ///  Reflects the current level of the Transmit FIFO.
    -            TX_LEVEL: u4,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u12,
    -        }),
    -        ///  I2S DMA Configuration Register 1. Contains control information for DMA request 1.
    -        DMA1: mmio.Mmio(packed struct(u32) {
    -            ///  When 1, enables DMA1 for I2S receive.
    -            RX_DMA1_ENABLE: u1,
    -            ///  When 1, enables DMA1 for I2S transmit.
    -            TX_DMA1_ENABLE: u1,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u6,
    -            ///  Set the FIFO level that triggers a receive DMA request on DMA1.
    -            RX_DEPTH_DMA1: u4,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u4,
    -            ///  Set the FIFO level that triggers a transmit DMA request on DMA1.
    -            TX_DEPTH_DMA1: u4,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u12,
    -        }),
    -        ///  I2S DMA Configuration Register 2. Contains control information for DMA request 2.
    -        DMA2: mmio.Mmio(packed struct(u32) {
    -            ///  When 1, enables DMA1 for I2S receive.
    -            RX_DMA2_ENABLE: u1,
    -            ///  When 1, enables DMA1 for I2S transmit.
    -            TX_DMA2_ENABLE: u1,
    -            ///  Reserved.
    -            RESERVED: u6,
    -            ///  Set the FIFO level that triggers a receive DMA request on DMA2.
    -            RX_DEPTH_DMA2: u4,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u4,
    -            ///  Set the FIFO level that triggers a transmit DMA request on DMA2.
    -            TX_DEPTH_DMA2: u4,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u12,
    -        }),
    -        ///  I2S Interrupt Request Control Register. Contains bits that control how the I2S interrupt request is generated.
    -        IRQ: mmio.Mmio(packed struct(u32) {
    -            ///  When 1, enables I2S receive interrupt.
    -            RX_IRQ_ENABLE: u1,
    -            ///  When 1, enables I2S transmit interrupt.
    -            TX_IRQ_ENABLE: u1,
    -            ///  Reserved.
    -            RESERVED: u6,
    -            ///  Set the FIFO level on which to create an irq request.
    -            RX_DEPTH_IRQ: u4,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u4,
    -            ///  Set the FIFO level on which to create an irq request.
    -            TX_DEPTH_IRQ: u4,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u12,
    -        }),
    -        ///  I2S Transmit MCLK divider. This register determines the I2S TX MCLK rate by specifying the value to divide PCLK by in order to produce MCLK.
    -        TXRATE: mmio.Mmio(packed struct(u32) {
    -            ///  I2S transmit MCLK rate denominator. This value is used to divide PCLK to produce the transmit MCLK. Eight bits of fractional divide supports a wide range of possibilities. A value of 0 stops the clock.
    -            Y_DIVIDER: u8,
    -            ///  I2S transmit MCLK rate numerator. This value is used to multiply PCLK by to produce the transmit MCLK. A value of 0 stops the clock. Eight bits of fractional divide supports a wide range of possibilities. Note: the resulting ratio X/Y is divided by 2.
    -            X_DIVIDER: u8,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u16,
    -        }),
    -        ///  I2S Receive MCLK divider. This register determines the I2S RX MCLK rate by specifying the value to divide PCLK by in order to produce MCLK.
    -        RXRATE: mmio.Mmio(packed struct(u32) {
    -            ///  I2S receive MCLK rate denominator. This value is used to divide PCLK to produce the receive MCLK. Eight bits of fractional divide supports a wide range of possibilities. A value of 0 stops the clock.
    -            Y_DIVIDER: u8,
    -            ///  I2S receive MCLK rate numerator. This value is used to multiply PCLK by to produce the receive MCLK. A value of 0 stops the clock. Eight bits of fractional divide supports a wide range of possibilities. Note: the resulting ratio X/Y is divided by 2.
    -            X_DIVIDER: u8,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u16,
    -        }),
    -        ///  I2S Transmit bit rate divider. This register determines the I2S transmit bit rate by specifying the value to divide TX_MCLK by in order to produce the transmit bit clock.
    -        TXBITRATE: mmio.Mmio(packed struct(u32) {
    -            ///  I2S transmit bit rate. This value plus one is used to divide TX_MCLK to produce the transmit bit clock.
    -            TX_BITRATE: u6,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u26,
    -        }),
    -        ///  I2S Receive bit rate divider. This register determines the I2S receive bit rate by specifying the value to divide RX_MCLK by in order to produce the receive bit clock.
    -        RXBITRATE: mmio.Mmio(packed struct(u32) {
    -            ///  I2S receive bit rate. This value plus one is used to divide RX_MCLK to produce the receive bit clock.
    -            RX_BITRATE: u6,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u26,
    -        }),
    -        ///  I2S Transmit mode control.
    -        TXMODE: mmio.Mmio(packed struct(u32) {
    -            ///  Clock source selection for the transmit bit clock divider.
    -            TXCLKSEL: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Select the TX fractional rate divider clock output as the source
    -                    SELECT_THE_TX_FRACTI = 0x0,
    -                    ///  Select the RX_MCLK signal as the TX_MCLK clock source
    -                    SELECT_THE_RX_MCLK_S = 0x2,
    -                    _,
    -                },
    -            },
    -            ///  Transmit 4-pin mode selection. When 1, enables 4-pin mode.
    -            TX4PIN: u1,
    -            ///  Enable for the TX_MCLK output. When 0, output of TX_MCLK is not enabled. When 1, output of TX_MCLK is enabled.
    -            TXMCENA: u1,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u28,
    -        }),
    -        ///  I2S Receive mode control.
    -        RXMODE: mmio.Mmio(packed struct(u32) {
    -            ///  Clock source selection for the receive bit clock divider.
    -            RXCLKSEL: packed union {
    -                raw: u2,
    -                value: enum(u2) {
    -                    ///  Select the RX fractional rate divider clock output as the source
    -                    SELECT_THE_RX_FRACTI = 0x0,
    -                    ///  Select the TX_MCLK signal as the RX_MCLK clock source
    -                    SELECT_THE_TX_MCLK_S = 0x2,
    -                    _,
    -                },
    -            },
    -            ///  Receive 4-pin mode selection. When 1, enables 4-pin mode.
    -            RX4PIN: u1,
    -            ///  Enable for the RX_MCLK output. When 0, output of RX_MCLK is not enabled. When 1, output of RX_MCLK is enabled.
    -            RXMCENA: u1,
    -            ///  Reserved, user software should not write ones to reserved bits. The value read from a reserved bit is not defined.
    -            RESERVED: u28,
    -        }),
    -    };
    -};
    diff --git a/src/hals/LPC176x5x.zig b/src/hals/LPC176x5x.zig
    index 8202d52ba..823545fdf 100644
    --- a/src/hals/LPC176x5x.zig
    +++ b/src/hals/LPC176x5x.zig
    @@ -63,7 +63,7 @@ pub fn parse_pin(comptime spec: []const u8) type {
     
     pub fn route_pin(comptime pin: type, function: PinTarget) void {
         var val = pin.regs.pinsel_reg.read();
    -    @field(val, pin.regs.pinsel_field) = @enumToInt(function);
    +    @field(val, pin.regs.pinsel_field) = @intFromEnum(function);
         pin.regs.pinsel_reg.write(val);
     }
     
    @@ -138,19 +138,19 @@ pub fn Uart(comptime index: usize, comptime pins: micro.uart.Pins) type {
                 switch (index) {
                     0 => {
                         SYSCON.PCONP.modify(.{ .PCUART0 = 1 });
    -                    SYSCON.PCLKSEL0.modify(.{ .PCLK_UART0 = @enumToInt(uart.CClkDiv.four) });
    +                    SYSCON.PCLKSEL0.modify(.{ .PCLK_UART0 = @intFromEnum(uart.CClkDiv.four) });
                     },
                     1 => {
                         SYSCON.PCONP.modify(.{ .PCUART1 = 1 });
    -                    SYSCON.PCLKSEL0.modify(.{ .PCLK_UART1 = @enumToInt(uart.CClkDiv.four) });
    +                    SYSCON.PCLKSEL0.modify(.{ .PCLK_UART1 = @intFromEnum(uart.CClkDiv.four) });
                     },
                     2 => {
                         SYSCON.PCONP.modify(.{ .PCUART2 = 1 });
    -                    SYSCON.PCLKSEL1.modify(.{ .PCLK_UART2 = @enumToInt(uart.CClkDiv.four) });
    +                    SYSCON.PCLKSEL1.modify(.{ .PCLK_UART2 = @intFromEnum(uart.CClkDiv.four) });
                     },
                     3 => {
                         SYSCON.PCONP.modify(.{ .PCUART3 = 1 });
    -                    SYSCON.PCLKSEL1.modify(.{ .PCLK_UART3 = @enumToInt(uart.CClkDiv.four) });
    +                    SYSCON.PCLKSEL1.modify(.{ .PCLK_UART3 = @intFromEnum(uart.CClkDiv.four) });
                     },
                     else => unreachable,
                 }
    @@ -158,10 +158,10 @@ pub fn Uart(comptime index: usize, comptime pins: micro.uart.Pins) type {
     
                 UARTn.LCR.modify(.{
                     // 8N1
    -                .WLS = @enumToInt(config.data_bits),
    -                .SBS = @enumToInt(config.stop_bits),
    +                .WLS = @intFromEnum(config.data_bits),
    +                .SBS = @intFromEnum(config.stop_bits),
                     .PE = if (config.parity != null) @as(u1, 1) else @as(u1, 0),
    -                .PS = if (config.parity) |p| @enumToInt(p) else @enumToInt(uart.Parity.odd),
    +                .PS = if (config.parity) |p| @intFromEnum(p) else @intFromEnum(uart.Parity.odd),
                     .BC = 0,
                     .DLAB = 1,
                 });
    @@ -180,8 +180,8 @@ pub fn Uart(comptime index: usize, comptime pins: micro.uart.Pins) type {
     
                 const regval = std.math.cast(u16, divider) orelse return error.UnsupportedBaudRate;
     
    -            UARTn.DLL.modify(.{ .DLLSB = @truncate(u8, regval >> 0x00) });
    -            UARTn.DLM.modify(.{ .DLMSB = @truncate(u8, regval >> 0x08) });
    +            UARTn.DLL.modify(.{ .DLLSB = @as(u8, @truncate(regval >> 0x00)) });
    +            UARTn.DLM.modify(.{ .DLMSB = @as(u8, @truncate(regval >> 0x08)) });
     
                 UARTn.LCR.modify(.{ .DLAB = 0 });
     
    diff --git a/src/tools/patchelf.zig b/src/tools/patchelf.zig
    new file mode 100644
    index 000000000..8961bf8b6
    --- /dev/null
    +++ b/src/tools/patchelf.zig
    @@ -0,0 +1,66 @@
    +const std = @import("std");
    +
    +pub fn main() !u8 {
    +    const argv = try std.process.argsAlloc(std.heap.page_allocator);
    +    defer std.process.argsFree(std.heap.page_allocator, argv);
    +
    +    if (argv.len != 3) {
    +        std.log.err("usage: lpc-patchelf  ", .{});
    +        return 1;
    +    }
    +
    +    const input_file_name = argv[1];
    +    const output_file_name = argv[2];
    +
    +    try std.fs.Dir.copyFile(
    +        std.fs.cwd(),
    +        input_file_name,
    +        std.fs.cwd(),
    +        output_file_name,
    +        .{},
    +    );
    +
    +    var file = try std.fs.cwd().openFile(output_file_name, .{ .mode = .read_write });
    +    defer file.close();
    +
    +    const header = try std.elf.Header.read(file);
    +
    +    var iter = header.program_header_iterator(file);
    +    while (try iter.next()) |phdr| {
    +        if (phdr.p_type != std.elf.PT_LOAD) {
    +            continue;
    +        }
    +
    +        if (phdr.p_paddr != 0) {
    +            // std.log.warn("LOAD program header is not located at address 0x00000000!", .{});
    +            break;
    +        }
    +
    +        const boot_sector_items = 8;
    +        const boot_sector_size = @sizeOf([boot_sector_items]u32);
    +
    +        if (phdr.p_filesz < boot_sector_size) {
    +            std.log.warn("boot header is too small! Expected {} bytes, but sector only has {} bytes!", .{
    +                boot_sector_size,
    +                phdr.p_filesz,
    +            });
    +            continue;
    +        }
    +
    +        try file.seekTo(phdr.p_offset);
    +        var reader = file.reader();
    +        var writer = file.writer();
    +
    +        var checksum: u32 = 0;
    +
    +        var i: usize = 0;
    +        while (i < boot_sector_items - 1) : (i += 1) {
    +            const item = try reader.readIntLittle(u32);
    +            checksum -%= item;
    +        }
    +
    +        try writer.writeIntLittle(u32, checksum);
    +    }
    +
    +    return 0;
    +}
    
    From 7b528f927119682e50d2501e2178169f6bde64f3 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20Quei=C3=9Fner?= 
    Date: Fri, 22 Sep 2023 09:03:54 +0200
    Subject: [PATCH 209/286] Update to MicroZig Gen 2 build interface. (#21)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Co-authored-by: Felix "xq" Queißner 
    ---
     .gitmodules             |     3 -
     build.zig               |   120 +-
     deps/microzig           |     1 -
     src/boards.zig          |    13 -
     src/chips.zig           |    26 -
     src/chips/GD32VF103.zig | 12849 --------------------------------------
     6 files changed, 88 insertions(+), 12924 deletions(-)
     delete mode 160000 deps/microzig
     delete mode 100644 src/boards.zig
     delete mode 100644 src/chips.zig
     delete mode 100644 src/chips/GD32VF103.zig
    
    diff --git a/.gitmodules b/.gitmodules
    index 32e895ccb..e69de29bb 100644
    --- a/.gitmodules
    +++ b/.gitmodules
    @@ -1,3 +0,0 @@
    -[submodule "deps/microzig"]
    -	path = deps/microzig
    -	url = https://github.com/ZigEmbeddedGroup/microzig.git
    diff --git a/build.zig b/build.zig
    index 56ed4e58a..61f41a4ca 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -1,38 +1,94 @@
     const std = @import("std");
    -const microzig = @import("deps/microzig/build.zig");
     
    -pub const boards = @import("src/boards.zig");
    -pub const chips = @import("src/chips.zig");
    +fn path(comptime suffix: []const u8) std.Build.LazyPath {
    +    return .{
    +        .cwd_relative = comptime ((std.fs.path.dirname(@src().file) orelse ".") ++ suffix),
    +    };
    +}
     
    -pub fn build(b: *std.build.Builder) void {
    -    const optimize = b.standardOptimizeOption(.{});
    -    inline for (@typeInfo(boards).Struct.decls) |decl| {
    -        if (!decl.is_pub)
    -            continue;
    -
    -        const exe = microzig.addEmbeddedExecutable(b, .{
    -            .name = @field(boards, decl.name).name ++ ".minimal",
    -            .source_file = .{
    -                .path = "test/programs/minimal.zig",
    +const hal = .{
    +    .source_file = path("/src/hals/GD32VF103.zig"),
    +};
    +
    +pub const chips = struct {
    +    pub const gd32vf103xb = .{
    +        .preferred_format = .elf,
    +        .chip = .{
    +            .name = "GD32VF103",
    +            .cpu = .riscv32_imac,
    +            .memory_regions = &.{
    +                .{ .offset = 0x08000000, .length = 128 * 1024, .kind = .flash },
    +                .{ .offset = 0x20000000, .length = 32 * 1024, .kind = .ram },
                 },
    -            .backing = .{ .board = @field(boards, decl.name) },
    -            .optimize = optimize,
    -        });
    -        exe.installArtifact(b);
    -    }
    -
    -    inline for (@typeInfo(chips).Struct.decls) |decl| {
    -        if (!decl.is_pub)
    -            continue;
    -
    -        const exe = microzig.addEmbeddedExecutable(b, .{
    -            .name = @field(chips, decl.name).name ++ ".minimal",
    -            .source_file = .{
    -                .path = "test/programs/minimal.zig",
    +            .register_definition = .{
    +                .json = path("/src/chips/GD32VF103.json"),
                 },
    -            .backing = .{ .chip = @field(chips, decl.name) },
    -            .optimize = optimize,
    -        });
    -        exe.installArtifact(b);
    -    }
    +        },
    +        .hal = hal,
    +    };
    +
    +    pub const gd32vf103x8 = .{
    +        .preferred_format = .elf,
    +        .chip = .{
    +            .name = "GD32VF103",
    +            .cpu = .riscv32_imac,
    +            .memory_regions = &.{
    +                .{ .offset = 0x08000000, .length = 64 * 1024, .kind = .flash },
    +                .{ .offset = 0x20000000, .length = 20 * 1024, .kind = .ram },
    +            },
    +            .register_definition = .{
    +                .json = path("/src/chips/GD32VF103.json"),
    +            },
    +        },
    +        .hal = hal,
    +    };
    +};
    +
    +pub const boards = struct {
    +    pub const sipeed = struct {
    +        pub const longan_nano = .{
    +            .preferred_format = .elf,
    +            .chip = chips.gd32vf103xb.chip,
    +            .hal = hal,
    +            .board = .{
    +                .name = "Longan Nano",
    +                .url = "https://longan.sipeed.com/en/",
    +                .source_file = path("/src/boards/longan_nano.zig"),
    +            },
    +        };
    +    };
    +};
    +
    +pub fn build(b: *std.build.Builder) void {
    +    _ = b;
    +    // const optimize = b.standardOptimizeOption(.{});
    +    // inline for (@typeInfo(boards).Struct.decls) |decl| {
    +    //     if (!decl.is_pub)
    +    //         continue;
    +
    +    //     const exe = microzig.addEmbeddedExecutable(b, .{
    +    //         .name = @field(boards, decl.name).name ++ ".minimal",
    +    //         .source_file = .{
    +    //             .path = "test/programs/minimal.zig",
    +    //         },
    +    //         .backing = .{ .board = @field(boards, decl.name) },
    +    //         .optimize = optimize,
    +    //     });
    +    //     exe.installArtifact(b);
    +    // }
    +
    +    // inline for (@typeInfo(chips).Struct.decls) |decl| {
    +    //     if (!decl.is_pub)
    +    //         continue;
    +
    +    //     const exe = microzig.addEmbeddedExecutable(b, .{
    +    //         .name = @field(chips, decl.name).name ++ ".minimal",
    +    //         .source_file = .{
    +    //             .path = "test/programs/minimal.zig",
    +    //         },
    +    //         .backing = .{ .chip = @field(chips, decl.name) },
    +    //         .optimize = optimize,
    +    //     });
    +    //     exe.installArtifact(b);
    +    // }
     }
    diff --git a/deps/microzig b/deps/microzig
    deleted file mode 160000
    index 9392fe0f7..000000000
    --- a/deps/microzig
    +++ /dev/null
    @@ -1 +0,0 @@
    -Subproject commit 9392fe0f7bddde26155c181ab80b70097b49c791
    diff --git a/src/boards.zig b/src/boards.zig
    deleted file mode 100644
    index 264bfeef9..000000000
    --- a/src/boards.zig
    +++ /dev/null
    @@ -1,13 +0,0 @@
    -const std = @import("std");
    -const micro = @import("../deps/microzig/build.zig");
    -const chips = @import("chips.zig");
    -
    -fn root_dir() []const u8 {
    -    return std.fs.path.dirname(@src().file) orelse ".";
    -}
    -
    -pub const longan_nano = micro.Board{
    -    .name = "Longan Nano",
    -    .source = .{ .path = root_dir() ++ "/boards/longan_nano.zig" },
    -    .chip = chips.gd32vf103xb,
    -};
    diff --git a/src/chips.zig b/src/chips.zig
    deleted file mode 100644
    index 2822bd7cd..000000000
    --- a/src/chips.zig
    +++ /dev/null
    @@ -1,26 +0,0 @@
    -const std = @import("std");
    -const micro = @import("../deps/microzig/build.zig");
    -const Chip = micro.Chip;
    -const MemoryRegion = micro.MemoryRegion;
    -
    -fn root_dir() []const u8 {
    -    return std.fs.path.dirname(@src().file) orelse unreachable;
    -}
    -
    -pub const gd32vf103xb = Chip.from_standard_paths(root_dir(), .{
    -    .name = "GD32VF103",
    -    .cpu = micro.cpus.riscv32_imac,
    -    .memory_regions = &.{
    -        MemoryRegion{ .offset = 0x08000000, .length = 128 * 1024, .kind = .flash },
    -        MemoryRegion{ .offset = 0x20000000, .length = 32 * 1024, .kind = .ram },
    -    },
    -});
    -
    -pub const gd32vf103x8 = Chip.from_standard_paths(root_dir(), .{
    -    .name = "GD32VF103",
    -    .cpu = micro.cpus.riscv32_imac,
    -    .memory_regions = &.{
    -        MemoryRegion{ .offset = 0x08000000, .length = 64 * 1024, .kind = .flash },
    -        MemoryRegion{ .offset = 0x20000000, .length = 20 * 1024, .kind = .ram },
    -    },
    -});
    diff --git a/src/chips/GD32VF103.zig b/src/chips/GD32VF103.zig
    deleted file mode 100644
    index 77618b43e..000000000
    --- a/src/chips/GD32VF103.zig
    +++ /dev/null
    @@ -1,12849 +0,0 @@
    -const micro = @import("microzig");
    -const mmio = micro.mmio;
    -
    -pub const devices = struct {
    -    ///  GD32VF103 RISC-V Microcontroller based device
    -    pub const GD32VF103 = struct {
    -        pub const properties = struct {
    -            pub const @"cpu.nvic_prio_bits" = "4";
    -            pub const @"cpu.mpu" = "0";
    -            pub const @"cpu.fpu" = "0";
    -            pub const @"cpu.revision" = "r2p1";
    -            pub const @"cpu.vendor_systick_config" = "0";
    -            pub const license =
    -                \\
    -                \\    Copyright 2019 Sipeed Co.,Ltd.
    -                \\  
    -                \\    Licensed under the Apache License, Version 2.0 (the "License");
    -                \\    you may not use this file except in compliance with the License.
    -                \\    You may obtain a copy of the License at
    -                \\
    -                \\        http://www.apache.org/licenses/LICENSE-2.0
    -                \\
    -                \\    Unless required by applicable law or agreed to in writing, software
    -                \\    distributed under the License is distributed on an "AS IS" BASIS,
    -                \\    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -                \\    See the License for the specific language governing permissions and
    -                \\    limitations under the License.
    -                \\
    -            ;
    -            pub const @"cpu.name" = "CM3";
    -            pub const @"cpu.endian" = "little";
    -        };
    -
    -        pub const VectorTable = extern struct {
    -            const Handler = micro.interrupt.Handler;
    -            const unhandled = micro.interrupt.unhandled;
    -
    -            initial_stack_pointer: u32,
    -            Reset: Handler = unhandled,
    -            NMI: Handler = unhandled,
    -            HardFault: Handler = unhandled,
    -            MemManageFault: Handler = unhandled,
    -            BusFault: Handler = unhandled,
    -            UsageFault: Handler = unhandled,
    -            reserved5: [4]u32 = undefined,
    -            SVCall: Handler = unhandled,
    -            DebugMonitor: Handler = unhandled,
    -            reserved11: [1]u32 = undefined,
    -            PendSV: Handler = unhandled,
    -            SysTick: Handler = unhandled,
    -            WWDGT: Handler = unhandled,
    -            reserved15: [20]u32 = undefined,
    -            Tamper: Handler = unhandled,
    -            RTC: Handler = unhandled,
    -            FMC: Handler = unhandled,
    -            RCU: Handler = unhandled,
    -            EXTI_Line0: Handler = unhandled,
    -            EXTI_Line1: Handler = unhandled,
    -            EXTI_Line2: Handler = unhandled,
    -            EXTI_Line3: Handler = unhandled,
    -            EXTI_Line4: Handler = unhandled,
    -            DMA0_Channel0: Handler = unhandled,
    -            DMA0_Channel1: Handler = unhandled,
    -            DMA0_Channel2: Handler = unhandled,
    -            DMA0_Channel3: Handler = unhandled,
    -            DMA0_Channel4: Handler = unhandled,
    -            DMA0_Channel5: Handler = unhandled,
    -            DMA0_Channel6: Handler = unhandled,
    -            ADC0_1: Handler = unhandled,
    -            CAN0_TX: Handler = unhandled,
    -            CAN0_RX0: Handler = unhandled,
    -            CAN0_RX1: Handler = unhandled,
    -            CAN0_EWMC: Handler = unhandled,
    -            EXTI_line9_5: Handler = unhandled,
    -            TIMER0_BRK: Handler = unhandled,
    -            TIMER0_UP: Handler = unhandled,
    -            TIMER0_TRG_CMT: Handler = unhandled,
    -            TIMER0_Channel: Handler = unhandled,
    -            TIMER1: Handler = unhandled,
    -            TIMER2: Handler = unhandled,
    -            TIMER3: Handler = unhandled,
    -            I2C0_EV: Handler = unhandled,
    -            I2C0_ER: Handler = unhandled,
    -            I2C1_EV: Handler = unhandled,
    -            I2C1_ER: Handler = unhandled,
    -            SPI0: Handler = unhandled,
    -            SPI1: Handler = unhandled,
    -            USART0: Handler = unhandled,
    -            USART1: Handler = unhandled,
    -            USART2: Handler = unhandled,
    -            EXTI_line15_10: Handler = unhandled,
    -            RTC_Alarm: Handler = unhandled,
    -            USBFS_WKUP: Handler = unhandled,
    -            reserved76: [7]u32 = undefined,
    -            TIMER4: Handler = unhandled,
    -            SPI2: Handler = unhandled,
    -            UART3: Handler = unhandled,
    -            UART4: Handler = unhandled,
    -            TIMER5: Handler = unhandled,
    -            TIMER6: Handler = unhandled,
    -            DMA1_Channel0: Handler = unhandled,
    -            DMA1_Channel1: Handler = unhandled,
    -            DMA1_Channel2: Handler = unhandled,
    -            DMA1_Channel3: Handler = unhandled,
    -            DMA1_Channel4: Handler = unhandled,
    -            reserved94: [2]u32 = undefined,
    -            CAN1_TX: Handler = unhandled,
    -            CAN1_RX0: Handler = unhandled,
    -            CAN1_RX1: Handler = unhandled,
    -            CAN1_EWMC: Handler = unhandled,
    -            USBFS: Handler = unhandled,
    -        };
    -
    -        pub const peripherals = struct {
    -            ///  General-purpose-timers
    -            pub const TIMER1 = @intToPtr(*volatile types.peripherals.TIMER1, 0x40000000);
    -            ///  General-purpose-timers
    -            pub const TIMER2 = @intToPtr(*volatile types.peripherals.TIMER1, 0x40000400);
    -            ///  General-purpose-timers
    -            pub const TIMER3 = @intToPtr(*volatile types.peripherals.TIMER1, 0x40000800);
    -            ///  General-purpose-timers
    -            pub const TIMER4 = @intToPtr(*volatile types.peripherals.TIMER1, 0x40000c00);
    -            ///  Basic-timers
    -            pub const TIMER5 = @intToPtr(*volatile types.peripherals.TIMER5, 0x40001000);
    -            ///  Basic-timers
    -            pub const TIMER6 = @intToPtr(*volatile types.peripherals.TIMER5, 0x40001400);
    -            ///  Real-time clock
    -            pub const RTC = @intToPtr(*volatile types.peripherals.RTC, 0x40002800);
    -            ///  Window watchdog timer
    -            pub const WWDGT = @intToPtr(*volatile types.peripherals.WWDGT, 0x40002c00);
    -            ///  free watchdog timer
    -            pub const FWDGT = @intToPtr(*volatile types.peripherals.FWDGT, 0x40003000);
    -            ///  Serial peripheral interface
    -            pub const SPI1 = @intToPtr(*volatile types.peripherals.SPI0, 0x40003800);
    -            ///  Serial peripheral interface
    -            pub const SPI2 = @intToPtr(*volatile types.peripherals.SPI0, 0x40003c00);
    -            ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART1 = @intToPtr(*volatile types.peripherals.USART0, 0x40004400);
    -            ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART2 = @intToPtr(*volatile types.peripherals.USART0, 0x40004800);
    -            ///  Universal asynchronous receiver transmitter
    -            pub const UART3 = @intToPtr(*volatile types.peripherals.UART3, 0x40004c00);
    -            ///  Universal asynchronous receiver transmitter
    -            pub const UART4 = @intToPtr(*volatile types.peripherals.UART3, 0x40005000);
    -            ///  Inter integrated circuit
    -            pub const I2C0 = @intToPtr(*volatile types.peripherals.I2C0, 0x40005400);
    -            ///  Inter integrated circuit
    -            pub const I2C1 = @intToPtr(*volatile types.peripherals.I2C0, 0x40005800);
    -            ///  Controller area network
    -            pub const CAN0 = @intToPtr(*volatile types.peripherals.CAN0, 0x40006400);
    -            ///  Controller area network
    -            pub const CAN1 = @intToPtr(*volatile types.peripherals.CAN0, 0x40006800);
    -            ///  Backup registers
    -            pub const BKP = @intToPtr(*volatile types.peripherals.BKP, 0x40006c00);
    -            ///  Power management unit
    -            pub const PMU = @intToPtr(*volatile types.peripherals.PMU, 0x40007000);
    -            ///  Digital-to-analog converter
    -            pub const DAC = @intToPtr(*volatile types.peripherals.DAC, 0x40007400);
    -            ///  Alternate-function I/Os
    -            pub const AFIO = @intToPtr(*volatile types.peripherals.AFIO, 0x40010000);
    -            ///  External interrupt/event controller
    -            pub const EXTI = @intToPtr(*volatile types.peripherals.EXTI, 0x40010400);
    -            ///  General-purpose I/Os
    -            pub const GPIOA = @intToPtr(*volatile types.peripherals.GPIOA, 0x40010800);
    -            ///  General-purpose I/Os
    -            pub const GPIOB = @intToPtr(*volatile types.peripherals.GPIOA, 0x40010c00);
    -            ///  General-purpose I/Os
    -            pub const GPIOC = @intToPtr(*volatile types.peripherals.GPIOA, 0x40011000);
    -            ///  General-purpose I/Os
    -            pub const GPIOD = @intToPtr(*volatile types.peripherals.GPIOA, 0x40011400);
    -            ///  General-purpose I/Os
    -            pub const GPIOE = @intToPtr(*volatile types.peripherals.GPIOA, 0x40011800);
    -            ///  Analog to digital converter
    -            pub const ADC0 = @intToPtr(*volatile types.peripherals.ADC0, 0x40012400);
    -            ///  Analog to digital converter
    -            pub const ADC1 = @intToPtr(*volatile types.peripherals.ADC1, 0x40012800);
    -            ///  Advanced-timers
    -            pub const TIMER0 = @intToPtr(*volatile types.peripherals.TIMER0, 0x40012c00);
    -            ///  Serial peripheral interface
    -            pub const SPI0 = @intToPtr(*volatile types.peripherals.SPI0, 0x40013000);
    -            ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART0 = @intToPtr(*volatile types.peripherals.USART0, 0x40013800);
    -            ///  DMA controller
    -            pub const DMA0 = @intToPtr(*volatile types.peripherals.DMA0, 0x40020000);
    -            ///  Direct memory access controller
    -            pub const DMA1 = @intToPtr(*volatile types.peripherals.DMA1, 0x40020000);
    -            ///  Reset and clock unit
    -            pub const RCU = @intToPtr(*volatile types.peripherals.RCU, 0x40021000);
    -            ///  FMC
    -            pub const FMC = @intToPtr(*volatile types.peripherals.FMC, 0x40022000);
    -            ///  cyclic redundancy check calculation unit
    -            pub const CRC = @intToPtr(*volatile types.peripherals.CRC, 0x40023000);
    -            ///  USB full speed global registers
    -            pub const USBFS_GLOBAL = @intToPtr(*volatile types.peripherals.USBFS_GLOBAL, 0x50000000);
    -            ///  USB on the go full speed host
    -            pub const USBFS_HOST = @intToPtr(*volatile types.peripherals.USBFS_HOST, 0x50000400);
    -            ///  USB on the go full speed device
    -            pub const USBFS_DEVICE = @intToPtr(*volatile types.peripherals.USBFS_DEVICE, 0x50000800);
    -            ///  USB on the go full speed
    -            pub const USBFS_PWRCLK = @intToPtr(*volatile types.peripherals.USBFS_PWRCLK, 0x50000e00);
    -            ///  External memory controller
    -            pub const EXMC = @intToPtr(*volatile types.peripherals.EXMC, 0xa0000000);
    -            ///  Enhanced Core Local Interrupt Controller
    -            pub const ECLIC = @intToPtr(*volatile types.peripherals.ECLIC, 0xd2000000);
    -            ///  System Tick Timer
    -            pub const SysTick = @intToPtr(*volatile types.peripherals.SCS.SysTick, 0xe000e010);
    -            ///  Debug support
    -            pub const DBG = @intToPtr(*volatile types.peripherals.DBG, 0xe0042000);
    -        };
    -    };
    -};
    -
    -pub const types = struct {
    -    pub const peripherals = struct {
    -        ///  System Control Space
    -        pub const SCS = struct {
    -            ///  System Tick Timer
    -            pub const SysTick = extern struct {
    -                ///  SysTick Control and Status Register
    -                CTRL: mmio.Mmio(packed struct(u32) {
    -                    ENABLE: u1,
    -                    TICKINT: u1,
    -                    CLKSOURCE: u1,
    -                    reserved16: u13,
    -                    COUNTFLAG: u1,
    -                    padding: u15,
    -                }),
    -                ///  SysTick Reload Value Register
    -                LOAD: mmio.Mmio(packed struct(u32) {
    -                    RELOAD: u24,
    -                    padding: u8,
    -                }),
    -                ///  SysTick Current Value Register
    -                VAL: mmio.Mmio(packed struct(u32) {
    -                    CURRENT: u24,
    -                    padding: u8,
    -                }),
    -                ///  SysTick Calibration Register
    -                CALIB: mmio.Mmio(packed struct(u32) {
    -                    TENMS: u24,
    -                    reserved30: u6,
    -                    SKEW: u1,
    -                    NOREF: u1,
    -                }),
    -            };
    -        };
    -
    -        ///  Analog to digital converter
    -        pub const ADC0 = extern struct {
    -            ///  status register
    -            STAT: mmio.Mmio(packed struct(u32) {
    -                ///  Analog watchdog event flag
    -                WDE: u1,
    -                ///  End of group conversion flag
    -                EOC: u1,
    -                ///  End of inserted group conversion flag
    -                EOIC: u1,
    -                ///  Start flag of inserted channel group
    -                STIC: u1,
    -                ///  Start flag of regular channel group
    -                STRC: u1,
    -                padding: u27,
    -            }),
    -            ///  control register 0
    -            CTL0: mmio.Mmio(packed struct(u32) {
    -                ///  Analog watchdog channel select
    -                WDCHSEL: u5,
    -                ///  Interrupt enable for EOC
    -                EOCIE: u1,
    -                ///  Interrupt enable for WDE
    -                WDEIE: u1,
    -                ///  Interrupt enable for EOIC
    -                EOICIE: u1,
    -                ///  Scan mode
    -                SM: u1,
    -                ///  When in scan mode, analog watchdog is effective on a single channel
    -                WDSC: u1,
    -                ///  Inserted channel group convert automatically
    -                ICA: u1,
    -                ///  Discontinuous mode on regular channels
    -                DISRC: u1,
    -                ///  Discontinuous mode on inserted channels
    -                DISIC: u1,
    -                ///  Number of conversions in discontinuous mode
    -                DISNUM: u3,
    -                ///  sync mode selection
    -                SYNCM: u4,
    -                reserved22: u2,
    -                ///  Inserted channel analog watchdog enable
    -                IWDEN: u1,
    -                ///  Regular channel analog watchdog enable
    -                RWDEN: u1,
    -                padding: u8,
    -            }),
    -            ///  control register 1
    -            CTL1: mmio.Mmio(packed struct(u32) {
    -                ///  ADC on
    -                ADCON: u1,
    -                ///  Continuous mode
    -                CTN: u1,
    -                ///  ADC calibration
    -                CLB: u1,
    -                ///  Reset calibration
    -                RSTCLB: u1,
    -                reserved8: u4,
    -                ///  DMA request enable
    -                DMA: u1,
    -                reserved11: u2,
    -                ///  Data alignment
    -                DAL: u1,
    -                ///  External trigger select for inserted channel
    -                ETSIC: u3,
    -                ///  External trigger select for inserted channel
    -                ETEIC: u1,
    -                reserved17: u1,
    -                ///  External trigger select for regular channel
    -                ETSRC: u3,
    -                ///  External trigger enable for regular channel
    -                ETERC: u1,
    -                ///  Start on inserted channel
    -                SWICST: u1,
    -                ///  Start on regular channel
    -                SWRCST: u1,
    -                ///  Channel 16 and 17 enable of ADC0
    -                TSVREN: u1,
    -                padding: u8,
    -            }),
    -            ///  Sample time register 0
    -            SAMPT0: mmio.Mmio(packed struct(u32) {
    -                ///  Channel 10 sample time selection
    -                SPT10: u3,
    -                ///  Channel 11 sample time selection
    -                SPT11: u3,
    -                ///  Channel 12 sample time selection
    -                SPT12: u3,
    -                ///  Channel 13 sample time selection
    -                SPT13: u3,
    -                ///  Channel 14 sample time selection
    -                SPT14: u3,
    -                ///  Channel 15 sample time selection
    -                SPT15: u3,
    -                ///  Channel 16 sample time selection
    -                SPT16: u3,
    -                ///  Channel 17 sample time selection
    -                SPT17: u3,
    -                padding: u8,
    -            }),
    -            ///  Sample time register 1
    -            SAMPT1: mmio.Mmio(packed struct(u32) {
    -                ///  Channel 0 sample time selection
    -                SPT0: u3,
    -                ///  Channel 1 sample time selection
    -                SPT1: u3,
    -                ///  Channel 2 sample time selection
    -                SPT2: u3,
    -                ///  Channel 3 sample time selection
    -                SPT3: u3,
    -                ///  Channel 4 sample time selection
    -                SPT4: u3,
    -                ///  Channel 5 sample time selection
    -                SPT5: u3,
    -                ///  Channel 6 sample time selection
    -                SPT6: u3,
    -                ///  Channel 7 sample time selection
    -                SPT7: u3,
    -                ///  Channel 8 sample time selection
    -                SPT8: u3,
    -                ///  Channel 9 sample time selection
    -                SPT9: u3,
    -                padding: u2,
    -            }),
    -            ///  Inserted channel data offset register 0
    -            IOFF0: mmio.Mmio(packed struct(u32) {
    -                ///  Data offset for inserted channel 0
    -                IOFF: u12,
    -                padding: u20,
    -            }),
    -            ///  Inserted channel data offset register 1
    -            IOFF1: mmio.Mmio(packed struct(u32) {
    -                ///  Data offset for inserted channel 1
    -                IOFF: u12,
    -                padding: u20,
    -            }),
    -            ///  Inserted channel data offset register 2
    -            IOFF2: mmio.Mmio(packed struct(u32) {
    -                ///  Data offset for inserted channel 2
    -                IOFF: u12,
    -                padding: u20,
    -            }),
    -            ///  Inserted channel data offset register 3
    -            IOFF3: mmio.Mmio(packed struct(u32) {
    -                ///  Data offset for inserted channel 3
    -                IOFF: u12,
    -                padding: u20,
    -            }),
    -            ///  watchdog higher threshold register
    -            WDHT: mmio.Mmio(packed struct(u32) {
    -                ///  Analog watchdog higher threshold
    -                WDHT: u12,
    -                padding: u20,
    -            }),
    -            ///  watchdog lower threshold register
    -            WDLT: mmio.Mmio(packed struct(u32) {
    -                ///  Analog watchdog lower threshold
    -                WDLT: u12,
    -                padding: u20,
    -            }),
    -            ///  regular sequence register 0
    -            RSQ0: mmio.Mmio(packed struct(u32) {
    -                ///  13th conversion in regular sequence
    -                RSQ12: u5,
    -                ///  14th conversion in regular sequence
    -                RSQ13: u5,
    -                ///  15th conversion in regular sequence
    -                RSQ14: u5,
    -                ///  16th conversion in regular sequence
    -                RSQ15: u5,
    -                ///  Regular channel group length
    -                RL: u4,
    -                padding: u8,
    -            }),
    -            ///  regular sequence register 1
    -            RSQ1: mmio.Mmio(packed struct(u32) {
    -                ///  7th conversion in regular sequence
    -                RSQ6: u5,
    -                ///  8th conversion in regular sequence
    -                RSQ7: u5,
    -                ///  9th conversion in regular sequence
    -                RSQ8: u5,
    -                ///  10th conversion in regular sequence
    -                RSQ9: u5,
    -                ///  11th conversion in regular sequence
    -                RSQ10: u5,
    -                ///  12th conversion in regular sequence
    -                RSQ11: u5,
    -                padding: u2,
    -            }),
    -            ///  regular sequence register 2
    -            RSQ2: mmio.Mmio(packed struct(u32) {
    -                ///  1st conversion in regular sequence
    -                RSQ0: u5,
    -                ///  2nd conversion in regular sequence
    -                RSQ1: u5,
    -                ///  3rd conversion in regular sequence
    -                RSQ2: u5,
    -                ///  4th conversion in regular sequence
    -                RSQ3: u5,
    -                ///  5th conversion in regular sequence
    -                RSQ4: u5,
    -                ///  6th conversion in regular sequence
    -                RSQ5: u5,
    -                padding: u2,
    -            }),
    -            ///  Inserted sequence register
    -            ISQ: mmio.Mmio(packed struct(u32) {
    -                ///  1st conversion in inserted sequence
    -                ISQ0: u5,
    -                ///  2nd conversion in inserted sequence
    -                ISQ1: u5,
    -                ///  3rd conversion in inserted sequence
    -                ISQ2: u5,
    -                ///  4th conversion in inserted sequence
    -                ISQ3: u5,
    -                ///  Inserted channel group length
    -                IL: u2,
    -                padding: u10,
    -            }),
    -            ///  Inserted data register 0
    -            IDATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Inserted number n conversion data
    -                IDATAn: u16,
    -                padding: u16,
    -            }),
    -            ///  Inserted data register 1
    -            IDATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Inserted number n conversion data
    -                IDATAn: u16,
    -                padding: u16,
    -            }),
    -            ///  Inserted data register 2
    -            IDATA2: mmio.Mmio(packed struct(u32) {
    -                ///  Inserted number n conversion data
    -                IDATAn: u16,
    -                padding: u16,
    -            }),
    -            ///  Inserted data register 3
    -            IDATA3: mmio.Mmio(packed struct(u32) {
    -                ///  Inserted number n conversion data
    -                IDATAn: u16,
    -                padding: u16,
    -            }),
    -            ///  regular data register
    -            RDATA: mmio.Mmio(packed struct(u32) {
    -                ///  Regular channel data
    -                RDATA: u16,
    -                ///  ADC regular channel data
    -                ADC1RDTR: u16,
    -            }),
    -            reserved128: [48]u8,
    -            ///  Oversample control register
    -            OVSAMPCTL: mmio.Mmio(packed struct(u32) {
    -                ///  Oversampler Enable
    -                OVSEN: u1,
    -                reserved2: u1,
    -                ///  Oversampling ratio
    -                OVSR: u3,
    -                ///  Oversampling shift
    -                OVSS: u4,
    -                ///  Triggered Oversampling
    -                TOVS: u1,
    -                reserved12: u2,
    -                ///  ADC resolution
    -                DRES: u2,
    -                padding: u18,
    -            }),
    -        };
    -
    -        ///  Analog to digital converter
    -        pub const ADC1 = extern struct {
    -            ///  status register
    -            STAT: mmio.Mmio(packed struct(u32) {
    -                ///  Analog watchdog event flag
    -                WDE: u1,
    -                ///  End of group conversion flag
    -                EOC: u1,
    -                ///  End of inserted group conversion flag
    -                EOIC: u1,
    -                ///  Start flag of inserted channel group
    -                STIC: u1,
    -                ///  Start flag of regular channel group
    -                STRC: u1,
    -                padding: u27,
    -            }),
    -            ///  control register 0
    -            CTL0: mmio.Mmio(packed struct(u32) {
    -                ///  Analog watchdog channel select
    -                WDCHSEL: u5,
    -                ///  Interrupt enable for EOC
    -                EOCIE: u1,
    -                ///  Interrupt enable for WDE
    -                WDEIE: u1,
    -                ///  Interrupt enable for EOIC
    -                EOICIE: u1,
    -                ///  Scan mode
    -                SM: u1,
    -                ///  When in scan mode, analog watchdog is effective on a single channel
    -                WDSC: u1,
    -                ///  Inserted channel group convert automatically
    -                ICA: u1,
    -                ///  Discontinuous mode on regular channels
    -                DISRC: u1,
    -                ///  Discontinuous mode on inserted channels
    -                DISIC: u1,
    -                ///  Number of conversions in discontinuous mode
    -                DISNUM: u3,
    -                reserved22: u6,
    -                ///  Inserted channel analog watchdog enable
    -                IWDEN: u1,
    -                ///  Regular channel analog watchdog enable
    -                RWDEN: u1,
    -                padding: u8,
    -            }),
    -            ///  control register 1
    -            CTL1: mmio.Mmio(packed struct(u32) {
    -                ///  ADC on
    -                ADCON: u1,
    -                ///  Continuous mode
    -                CTN: u1,
    -                ///  ADC calibration
    -                CLB: u1,
    -                ///  Reset calibration
    -                RSTCLB: u1,
    -                reserved8: u4,
    -                ///  DMA request enable
    -                DMA: u1,
    -                reserved11: u2,
    -                ///  Data alignment
    -                DAL: u1,
    -                ///  External trigger select for inserted channel
    -                ETSIC: u3,
    -                ///  External trigger enable for inserted channel
    -                ETEIC: u1,
    -                reserved17: u1,
    -                ///  External trigger select for regular channel
    -                ETSRC: u3,
    -                ///  External trigger enable for regular channel
    -                ETERC: u1,
    -                ///  Start on inserted channel
    -                SWICST: u1,
    -                ///  Start on regular channel
    -                SWRCST: u1,
    -                padding: u9,
    -            }),
    -            ///  Sample time register 0
    -            SAMPT0: mmio.Mmio(packed struct(u32) {
    -                ///  Channel 10 sample time selection
    -                SPT10: u3,
    -                ///  Channel 11 sample time selection
    -                SPT11: u3,
    -                ///  Channel 12 sample time selection
    -                SPT12: u3,
    -                ///  Channel 13 sample time selection
    -                SPT13: u3,
    -                ///  Channel 14 sample time selection
    -                SPT14: u3,
    -                ///  Channel 15 sample time selection
    -                SPT15: u3,
    -                ///  Channel 16 sample time selection
    -                SPT16: u3,
    -                ///  Channel 17 sample time selection
    -                SPT17: u3,
    -                padding: u8,
    -            }),
    -            ///  Sample time register 1
    -            SAMPT1: mmio.Mmio(packed struct(u32) {
    -                ///  Channel 0 sample time selection
    -                SPT0: u3,
    -                ///  Channel 1 sample time selection
    -                SPT1: u3,
    -                ///  Channel 2 sample time selection
    -                SPT2: u3,
    -                ///  Channel 3 sample time selection
    -                SPT3: u3,
    -                ///  Channel 4 sample time selection
    -                SPT4: u3,
    -                ///  Channel 5 sample time selection
    -                SPT5: u3,
    -                ///  Channel 6 sample time selection
    -                SPT6: u3,
    -                ///  Channel 7 sample time selection
    -                SPT7: u3,
    -                ///  Channel 8 sample time selection
    -                SPT8: u3,
    -                ///  Channel 9 sample time selection
    -                SPT9: u3,
    -                padding: u2,
    -            }),
    -            ///  Inserted channel data offset register 0
    -            IOFF0: mmio.Mmio(packed struct(u32) {
    -                ///  Data offset for inserted channel 0
    -                IOFF: u12,
    -                padding: u20,
    -            }),
    -            ///  Inserted channel data offset register 1
    -            IOFF1: mmio.Mmio(packed struct(u32) {
    -                ///  Data offset for inserted channel 1
    -                IOFF: u12,
    -                padding: u20,
    -            }),
    -            ///  Inserted channel data offset register 2
    -            IOFF2: mmio.Mmio(packed struct(u32) {
    -                ///  Data offset for inserted channel 2
    -                IOFF: u12,
    -                padding: u20,
    -            }),
    -            ///  Inserted channel data offset register 3
    -            IOFF3: mmio.Mmio(packed struct(u32) {
    -                ///  Data offset for inserted channel 3
    -                IOFF: u12,
    -                padding: u20,
    -            }),
    -            ///  watchdog higher threshold register
    -            WDHT: mmio.Mmio(packed struct(u32) {
    -                ///  Analog watchdog higher threshold
    -                WDHT: u12,
    -                padding: u20,
    -            }),
    -            ///  watchdog lower threshold register
    -            WDLT: mmio.Mmio(packed struct(u32) {
    -                ///  Analog watchdog lower threshold
    -                WDLT: u12,
    -                padding: u20,
    -            }),
    -            ///  regular sequence register 0
    -            RSQ0: mmio.Mmio(packed struct(u32) {
    -                ///  13th conversion in regular sequence
    -                RSQ12: u5,
    -                ///  14th conversion in regular sequence
    -                RSQ13: u5,
    -                ///  15th conversion in regular sequence
    -                RSQ14: u5,
    -                ///  16th conversion in regular sequence
    -                RSQ15: u5,
    -                ///  Regular channel group length
    -                RL: u4,
    -                padding: u8,
    -            }),
    -            ///  regular sequence register 1
    -            RSQ1: mmio.Mmio(packed struct(u32) {
    -                ///  7th conversion in regular sequence
    -                RSQ6: u5,
    -                ///  8th conversion in regular sequence
    -                RSQ7: u5,
    -                ///  9th conversion in regular sequence
    -                RSQ8: u5,
    -                ///  10th conversion in regular sequence
    -                RSQ9: u5,
    -                ///  11th conversion in regular sequence
    -                RSQ10: u5,
    -                ///  12th conversion in regular sequence
    -                RSQ11: u5,
    -                padding: u2,
    -            }),
    -            ///  regular sequence register 2
    -            RSQ2: mmio.Mmio(packed struct(u32) {
    -                ///  1st conversion in regular sequence
    -                RSQ0: u5,
    -                ///  2nd conversion in regular sequence
    -                RSQ1: u5,
    -                ///  3rd conversion in regular sequence
    -                RSQ2: u5,
    -                ///  4th conversion in regular sequence
    -                RSQ3: u5,
    -                ///  5th conversion in regular sequence
    -                RSQ4: u5,
    -                ///  6th conversion in regular sequence
    -                RSQ5: u5,
    -                padding: u2,
    -            }),
    -            ///  Inserted sequence register
    -            ISQ: mmio.Mmio(packed struct(u32) {
    -                ///  1st conversion in inserted sequence
    -                ISQ0: u5,
    -                ///  2nd conversion in inserted sequence
    -                ISQ1: u5,
    -                ///  3rd conversion in inserted sequence
    -                ISQ2: u5,
    -                ///  4th conversion in inserted sequence
    -                ISQ3: u5,
    -                ///  Inserted channel group length
    -                IL: u2,
    -                padding: u10,
    -            }),
    -            ///  Inserted data register 0
    -            IDATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Inserted number n conversion data
    -                IDATAn: u16,
    -                padding: u16,
    -            }),
    -            ///  Inserted data register 1
    -            IDATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Inserted number n conversion data
    -                IDATAn: u16,
    -                padding: u16,
    -            }),
    -            ///  Inserted data register 2
    -            IDATA2: mmio.Mmio(packed struct(u32) {
    -                ///  Inserted number n conversion data
    -                IDATAn: u16,
    -                padding: u16,
    -            }),
    -            ///  Inserted data register 3
    -            IDATA3: mmio.Mmio(packed struct(u32) {
    -                ///  Inserted number n conversion data
    -                IDATAn: u16,
    -                padding: u16,
    -            }),
    -            ///  regular data register
    -            RDATA: mmio.Mmio(packed struct(u32) {
    -                ///  Regular channel data
    -                RDATA: u16,
    -                padding: u16,
    -            }),
    -        };
    -
    -        ///  Alternate-function I/Os
    -        pub const AFIO = extern struct {
    -            ///  Event control register
    -            EC: mmio.Mmio(packed struct(u32) {
    -                ///  Event output pin selection
    -                PIN: u4,
    -                ///  Event output port selection
    -                PORT: u3,
    -                ///  Event output enable
    -                EOE: u1,
    -                padding: u24,
    -            }),
    -            ///  AFIO port configuration register 0
    -            PCF0: mmio.Mmio(packed struct(u32) {
    -                ///  SPI0 remapping
    -                SPI0_REMAP: u1,
    -                ///  I2C0 remapping
    -                I2C0_REMAP: u1,
    -                ///  USART0 remapping
    -                USART0_REMAP: u1,
    -                ///  USART1 remapping
    -                USART1_REMAP: u1,
    -                ///  USART2 remapping
    -                USART2_REMAP: u2,
    -                ///  TIMER0 remapping
    -                TIMER0_REMAP: u2,
    -                ///  TIMER1 remapping
    -                TIMER1_REMAP: u2,
    -                ///  TIMER2 remapping
    -                TIMER2_REMAP: u2,
    -                ///  TIMER3 remapping
    -                TIMER3_REMAP: u1,
    -                ///  CAN0 alternate interface remapping
    -                CAN0_REMAP: u2,
    -                ///  Port D0/Port D1 mapping on OSC_IN/OSC_OUT
    -                PD01_REMAP: u1,
    -                ///  TIMER4 channel3 internal remapping
    -                TIMER4CH3_IREMAP: u1,
    -                reserved22: u5,
    -                ///  CAN1 I/O remapping
    -                CAN1_REMAP: u1,
    -                reserved24: u1,
    -                ///  Serial wire JTAG configuration
    -                SWJ_CFG: u3,
    -                reserved28: u1,
    -                ///  SPI2/I2S2 remapping
    -                SPI2_REMAP: u1,
    -                ///  TIMER1 internal trigger 1 remapping
    -                TIMER1ITI1_REMAP: u1,
    -                padding: u2,
    -            }),
    -            ///  EXTI sources selection register 0
    -            EXTISS0: mmio.Mmio(packed struct(u32) {
    -                ///  EXTI 0 sources selection
    -                EXTI0_SS: u4,
    -                ///  EXTI 1 sources selection
    -                EXTI1_SS: u4,
    -                ///  EXTI 2 sources selection
    -                EXTI2_SS: u4,
    -                ///  EXTI 3 sources selection
    -                EXTI3_SS: u4,
    -                padding: u16,
    -            }),
    -            ///  EXTI sources selection register 1
    -            EXTISS1: mmio.Mmio(packed struct(u32) {
    -                ///  EXTI 4 sources selection
    -                EXTI4_SS: u4,
    -                ///  EXTI 5 sources selection
    -                EXTI5_SS: u4,
    -                ///  EXTI 6 sources selection
    -                EXTI6_SS: u4,
    -                ///  EXTI 7 sources selection
    -                EXTI7_SS: u4,
    -                padding: u16,
    -            }),
    -            ///  EXTI sources selection register 2
    -            EXTISS2: mmio.Mmio(packed struct(u32) {
    -                ///  EXTI 8 sources selection
    -                EXTI8_SS: u4,
    -                ///  EXTI 9 sources selection
    -                EXTI9_SS: u4,
    -                ///  EXTI 10 sources selection
    -                EXTI10_SS: u4,
    -                ///  EXTI 11 sources selection
    -                EXTI11_SS: u4,
    -                padding: u16,
    -            }),
    -            ///  EXTI sources selection register 3
    -            EXTISS3: mmio.Mmio(packed struct(u32) {
    -                ///  EXTI 12 sources selection
    -                EXTI12_SS: u4,
    -                ///  EXTI 13 sources selection
    -                EXTI13_SS: u4,
    -                ///  EXTI 14 sources selection
    -                EXTI14_SS: u4,
    -                ///  EXTI 15 sources selection
    -                EXTI15_SS: u4,
    -                padding: u16,
    -            }),
    -            reserved28: [4]u8,
    -            ///  AFIO port configuration register 1
    -            PCF1: mmio.Mmio(packed struct(u32) {
    -                reserved10: u10,
    -                ///  EXMC_NADV connect/disconnect
    -                EXMC_NADV: u1,
    -                padding: u21,
    -            }),
    -        };
    -
    -        ///  Backup registers
    -        pub const BKP = extern struct {
    -            reserved4: [4]u8,
    -            ///  Backup data register 0
    -            DATA0: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved8: [2]u8,
    -            ///  Backup data register 1
    -            DATA1: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved12: [2]u8,
    -            ///  Backup data register 2
    -            DATA2: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved16: [2]u8,
    -            ///  Backup data register 3
    -            DATA3: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved20: [2]u8,
    -            ///  Backup data register 4
    -            DATA4: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved24: [2]u8,
    -            ///  Backup data register 5
    -            DATA5: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved28: [2]u8,
    -            ///  Backup data register 6
    -            DATA6: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved32: [2]u8,
    -            ///  Backup data register 7
    -            DATA7: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved36: [2]u8,
    -            ///  Backup data register 8
    -            DATA8: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved40: [2]u8,
    -            ///  Backup data register 9
    -            DATA9: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved44: [2]u8,
    -            ///  RTC signal output control register
    -            OCTL: mmio.Mmio(packed struct(u16) {
    -                ///  RTC clock calibration value
    -                RCCV: u7,
    -                ///  RTC clock calibration output enable
    -                COEN: u1,
    -                ///  RTC alarm or second signal output enable
    -                ASOEN: u1,
    -                ///  RTC output selection
    -                ROSEL: u1,
    -                padding: u6,
    -            }),
    -            reserved48: [2]u8,
    -            ///  Tamper pin control register
    -            TPCTL: mmio.Mmio(packed struct(u16) {
    -                ///  TAMPER detection enable
    -                TPEN: u1,
    -                ///  TAMPER pin active level
    -                TPAL: u1,
    -                padding: u14,
    -            }),
    -            reserved52: [2]u8,
    -            ///  Tamper control and status register
    -            TPCS: mmio.Mmio(packed struct(u16) {
    -                ///  Tamper event reset
    -                TER: u1,
    -                ///  Tamper interrupt reset
    -                TIR: u1,
    -                ///  Tamper interrupt enable
    -                TPIE: u1,
    -                reserved8: u5,
    -                ///  Tamper event flag
    -                TEF: u1,
    -                ///  Tamper interrupt flag
    -                TIF: u1,
    -                padding: u6,
    -            }),
    -            reserved64: [10]u8,
    -            ///  Backup data register 10
    -            DATA10: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved68: [2]u8,
    -            ///  Backup data register 11
    -            DATA11: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved72: [2]u8,
    -            ///  Backup data register 12
    -            DATA12: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved76: [2]u8,
    -            ///  Backup data register 13
    -            DATA13: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved80: [2]u8,
    -            ///  Backup data register 14
    -            DATA14: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved84: [2]u8,
    -            ///  Backup data register 15
    -            DATA15: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved88: [2]u8,
    -            ///  Backup data register 16
    -            DATA16: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved92: [2]u8,
    -            ///  Backup data register 17
    -            DATA17: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved96: [2]u8,
    -            ///  Backup data register 18
    -            DATA18: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved100: [2]u8,
    -            ///  Backup data register 19
    -            DATA19: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved104: [2]u8,
    -            ///  Backup data register 20
    -            DATA20: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved108: [2]u8,
    -            ///  Backup data register 21
    -            DATA21: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved112: [2]u8,
    -            ///  Backup data register 22
    -            DATA22: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved116: [2]u8,
    -            ///  Backup data register 23
    -            DATA23: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved120: [2]u8,
    -            ///  Backup data register 24
    -            DATA24: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved124: [2]u8,
    -            ///  Backup data register 25
    -            DATA25: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved128: [2]u8,
    -            ///  Backup data register 26
    -            DATA26: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved132: [2]u8,
    -            ///  Backup data register 27
    -            DATA27: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved136: [2]u8,
    -            ///  Backup data register 28
    -            DATA28: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved140: [2]u8,
    -            ///  Backup data register 29
    -            DATA29: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved144: [2]u8,
    -            ///  Backup data register 30
    -            DATA30: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved148: [2]u8,
    -            ///  Backup data register 31
    -            DATA31: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved152: [2]u8,
    -            ///  Backup data register 32
    -            DATA32: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved156: [2]u8,
    -            ///  Backup data register 33
    -            DATA33: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved160: [2]u8,
    -            ///  Backup data register 34
    -            DATA34: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved164: [2]u8,
    -            ///  Backup data register 35
    -            DATA35: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved168: [2]u8,
    -            ///  Backup data register 36
    -            DATA36: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved172: [2]u8,
    -            ///  Backup data register 37
    -            DATA37: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved176: [2]u8,
    -            ///  Backup data register 38
    -            DATA38: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved180: [2]u8,
    -            ///  Backup data register 39
    -            DATA39: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved184: [2]u8,
    -            ///  Backup data register 40
    -            DATA40: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -            reserved188: [2]u8,
    -            ///  Backup data register 41
    -            DATA41: mmio.Mmio(packed struct(u16) {
    -                ///  Backup data
    -                DATA: u16,
    -            }),
    -        };
    -
    -        ///  Controller area network
    -        pub const CAN0 = extern struct {
    -            ///  Control register
    -            CTL: mmio.Mmio(packed struct(u32) {
    -                ///  Initial working mode
    -                IWMOD: u1,
    -                ///  Sleep working mode
    -                SLPWMOD: u1,
    -                ///  Transmit FIFO order
    -                TFO: u1,
    -                ///  Receive FIFO overwrite disable
    -                RFOD: u1,
    -                ///  Automatic retransmission disable
    -                ARD: u1,
    -                ///  Automatic wakeup
    -                AWU: u1,
    -                ///  Automatic bus-off recovery
    -                ABOR: u1,
    -                ///  Time-triggered communication
    -                TTC: u1,
    -                reserved15: u7,
    -                ///  Software reset
    -                SWRST: u1,
    -                ///  Debug freeze
    -                DFZ: u1,
    -                padding: u15,
    -            }),
    -            ///  Status register
    -            STAT: mmio.Mmio(packed struct(u32) {
    -                ///  Initial working state
    -                IWS: u1,
    -                ///  Sleep working state
    -                SLPWS: u1,
    -                ///  Error interrupt flag
    -                ERRIF: u1,
    -                ///  Status change interrupt flag of wakeup from sleep working mode
    -                WUIF: u1,
    -                ///  Status change interrupt flag of sleep working mode entering
    -                SLPIF: u1,
    -                reserved8: u3,
    -                ///  Transmitting state
    -                TS: u1,
    -                ///  Receiving state
    -                RS: u1,
    -                ///  Last sample value of RX pin
    -                LASTRX: u1,
    -                ///  RX level
    -                RXL: u1,
    -                padding: u20,
    -            }),
    -            ///  Transmit status register
    -            TSTAT: mmio.Mmio(packed struct(u32) {
    -                ///  Mailbox 0 transmit finished
    -                MTF0: u1,
    -                ///  Mailbox 0 transmit finished and no error
    -                MTFNERR0: u1,
    -                ///  Mailbox 0 arbitration lost
    -                MAL0: u1,
    -                ///  Mailbox 0 transmit error
    -                MTE0: u1,
    -                reserved7: u3,
    -                ///  Mailbox 0 stop transmitting
    -                MST0: u1,
    -                ///  Mailbox 1 transmit finished
    -                MTF1: u1,
    -                ///  Mailbox 1 transmit finished and no error
    -                MTFNERR1: u1,
    -                ///  Mailbox 1 arbitration lost
    -                MAL1: u1,
    -                ///  Mailbox 1 transmit error
    -                MTE1: u1,
    -                reserved15: u3,
    -                ///  Mailbox 1 stop transmitting
    -                MST1: u1,
    -                ///  Mailbox 2 transmit finished
    -                MTF2: u1,
    -                ///  Mailbox 2 transmit finished and no error
    -                MTFNERR2: u1,
    -                ///  Mailbox 2 arbitration lost
    -                MAL2: u1,
    -                ///  Mailbox 2 transmit error
    -                MTE2: u1,
    -                reserved23: u3,
    -                ///  Mailbox 2 stop transmitting
    -                MST2: u1,
    -                ///  number of the transmit FIFO mailbox in which the frame will be transmitted if at least one mailbox is empty
    -                NUM: u2,
    -                ///  Transmit mailbox 0 empty
    -                TME0: u1,
    -                ///  Transmit mailbox 1 empty
    -                TME1: u1,
    -                ///  Transmit mailbox 2 empty
    -                TME2: u1,
    -                ///  Transmit mailbox 0 last sending in transmit FIFO
    -                TMLS0: u1,
    -                ///  Transmit mailbox 1 last sending in transmit FIFO
    -                TMLS1: u1,
    -                ///  Transmit mailbox 2 last sending in transmit FIFO
    -                TMLS2: u1,
    -            }),
    -            ///  Receive message FIFO0 register
    -            RFIFO0: mmio.Mmio(packed struct(u32) {
    -                ///  Receive FIFO0 length
    -                RFL0: u2,
    -                reserved3: u1,
    -                ///  Receive FIFO0 full
    -                RFF0: u1,
    -                ///  Receive FIFO0 overfull
    -                RFO0: u1,
    -                ///  Receive FIFO0 dequeue
    -                RFD0: u1,
    -                padding: u26,
    -            }),
    -            ///  Receive message FIFO1 register
    -            RFIFO1: mmio.Mmio(packed struct(u32) {
    -                ///  Receive FIFO1 length
    -                RFL1: u2,
    -                reserved3: u1,
    -                ///  Receive FIFO1 full
    -                RFF1: u1,
    -                ///  Receive FIFO1 overfull
    -                RFO1: u1,
    -                ///  Receive FIFO1 dequeue
    -                RFD1: u1,
    -                padding: u26,
    -            }),
    -            ///  Interrupt enable register
    -            INTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Transmit mailbox empty interrupt enable
    -                TMEIE: u1,
    -                ///  Receive FIFO0 not empty interrupt enable
    -                RFNEIE0: u1,
    -                ///  Receive FIFO0 full interrupt enable
    -                RFFIE0: u1,
    -                ///  Receive FIFO0 overfull interrupt enable
    -                RFOIE0: u1,
    -                ///  Receive FIFO1 not empty interrupt enable
    -                RFNEIE1: u1,
    -                ///  Receive FIFO1 full interrupt enable
    -                RFFIE1: u1,
    -                ///  Receive FIFO1 overfull interrupt enable
    -                RFOIE1: u1,
    -                reserved8: u1,
    -                ///  Warning error interrupt enable
    -                WERRIE: u1,
    -                ///  Passive error interrupt enable
    -                PERRIE: u1,
    -                ///  Bus-off interrupt enable
    -                BOIE: u1,
    -                ///  Error number interrupt enable
    -                ERRNIE: u1,
    -                reserved15: u3,
    -                ///  Error interrupt enable
    -                ERRIE: u1,
    -                ///  Wakeup interrupt enable
    -                WIE: u1,
    -                ///  Sleep working interrupt enable
    -                SLPWIE: u1,
    -                padding: u14,
    -            }),
    -            ///  Error register
    -            ERR: mmio.Mmio(packed struct(u32) {
    -                ///  Warning error
    -                WERR: u1,
    -                ///  Passive error
    -                PERR: u1,
    -                ///  Bus-off error
    -                BOERR: u1,
    -                reserved4: u1,
    -                ///  Error number
    -                ERRN: u3,
    -                reserved16: u9,
    -                ///  Transmit Error Count defined by the CAN standard
    -                TECNT: u8,
    -                ///  Receive Error Count defined by the CAN standard
    -                RECNT: u8,
    -            }),
    -            ///  Bit timing register
    -            BT: mmio.Mmio(packed struct(u32) {
    -                ///  Baud rate prescaler
    -                BAUDPSC: u10,
    -                reserved16: u6,
    -                ///  Bit segment 1
    -                BS1: u4,
    -                ///  Bit segment 2
    -                BS2: u3,
    -                reserved24: u1,
    -                ///  Resynchronization jump width
    -                SJW: u2,
    -                reserved30: u4,
    -                ///  Loopback communication mode
    -                LCMOD: u1,
    -                ///  Silent communication mode
    -                SCMOD: u1,
    -            }),
    -            reserved384: [352]u8,
    -            ///  Transmit mailbox identifier register 0
    -            TMI0: mmio.Mmio(packed struct(u32) {
    -                ///  Transmit enable
    -                TEN: u1,
    -                ///  Frame type
    -                FT: u1,
    -                ///  Frame format
    -                FF: u1,
    -                ///  The frame identifier
    -                EFID: u18,
    -                ///  The frame identifier
    -                SFID_EFID: u11,
    -            }),
    -            ///  Transmit mailbox property register 0
    -            TMP0: mmio.Mmio(packed struct(u32) {
    -                ///  Data length code
    -                DLENC: u4,
    -                reserved8: u4,
    -                ///  Time stamp enable
    -                TSEN: u1,
    -                reserved16: u7,
    -                ///  Time stamp
    -                TS: u16,
    -            }),
    -            ///  Transmit mailbox data0 register
    -            TMDATA00: mmio.Mmio(packed struct(u32) {
    -                ///  Data byte 0
    -                DB0: u8,
    -                ///  Data byte 1
    -                DB1: u8,
    -                ///  Data byte 2
    -                DB2: u8,
    -                ///  Data byte 3
    -                DB3: u8,
    -            }),
    -            ///  Transmit mailbox data1 register
    -            TMDATA10: mmio.Mmio(packed struct(u32) {
    -                ///  Data byte 4
    -                DB4: u8,
    -                ///  Data byte 5
    -                DB5: u8,
    -                ///  Data byte 6
    -                DB6: u8,
    -                ///  Data byte 7
    -                DB7: u8,
    -            }),
    -            ///  Transmit mailbox identifier register 1
    -            TMI1: mmio.Mmio(packed struct(u32) {
    -                ///  Transmit enable
    -                TEN: u1,
    -                ///  Frame type
    -                FT: u1,
    -                ///  Frame format
    -                FF: u1,
    -                ///  The frame identifier
    -                EFID: u18,
    -                ///  The frame identifier
    -                SFID_EFID: u11,
    -            }),
    -            ///  Transmit mailbox property register 1
    -            TMP1: mmio.Mmio(packed struct(u32) {
    -                ///  Data length code
    -                DLENC: u4,
    -                reserved8: u4,
    -                ///  Time stamp enable
    -                TSEN: u1,
    -                reserved16: u7,
    -                ///  Time stamp
    -                TS: u16,
    -            }),
    -            ///  Transmit mailbox data0 register
    -            TMDATA01: mmio.Mmio(packed struct(u32) {
    -                ///  Data byte 0
    -                DB0: u8,
    -                ///  Data byte 1
    -                DB1: u8,
    -                ///  Data byte 2
    -                DB2: u8,
    -                ///  Data byte 3
    -                DB3: u8,
    -            }),
    -            ///  Transmit mailbox data1 register
    -            TMDATA11: mmio.Mmio(packed struct(u32) {
    -                ///  Data byte 4
    -                DB4: u8,
    -                ///  Data byte 5
    -                DB5: u8,
    -                ///  Data byte 6
    -                DB6: u8,
    -                ///  Data byte 7
    -                DB7: u8,
    -            }),
    -            ///  Transmit mailbox identifier register 2
    -            TMI2: mmio.Mmio(packed struct(u32) {
    -                ///  Transmit enable
    -                TEN: u1,
    -                ///  Frame type
    -                FT: u1,
    -                ///  Frame format
    -                FF: u1,
    -                ///  The frame identifier
    -                EFID: u18,
    -                ///  The frame identifier
    -                SFID_EFID: u11,
    -            }),
    -            ///  Transmit mailbox property register 2
    -            TMP2: mmio.Mmio(packed struct(u32) {
    -                ///  Data length code
    -                DLENC: u4,
    -                reserved8: u4,
    -                ///  Time stamp enable
    -                TSEN: u1,
    -                reserved16: u7,
    -                ///  Time stamp
    -                TS: u16,
    -            }),
    -            ///  Transmit mailbox data0 register
    -            TMDATA02: mmio.Mmio(packed struct(u32) {
    -                ///  Data byte 0
    -                DB0: u8,
    -                ///  Data byte 1
    -                DB1: u8,
    -                ///  Data byte 2
    -                DB2: u8,
    -                ///  Data byte 3
    -                DB3: u8,
    -            }),
    -            ///  Transmit mailbox data1 register
    -            TMDATA12: mmio.Mmio(packed struct(u32) {
    -                ///  Data byte 4
    -                DB4: u8,
    -                ///  Data byte 5
    -                DB5: u8,
    -                ///  Data byte 6
    -                DB6: u8,
    -                ///  Data byte 7
    -                DB7: u8,
    -            }),
    -            ///  Receive FIFO mailbox identifier register
    -            RFIFOMI0: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Frame type
    -                FT: u1,
    -                ///  Frame format
    -                FF: u1,
    -                ///  The frame identifier
    -                EFID: u18,
    -                ///  The frame identifier
    -                SFID_EFID: u11,
    -            }),
    -            ///  Receive FIFO0 mailbox property register
    -            RFIFOMP0: mmio.Mmio(packed struct(u32) {
    -                ///  Data length code
    -                DLENC: u4,
    -                reserved8: u4,
    -                ///  Filtering index
    -                FI: u8,
    -                ///  Time stamp
    -                TS: u16,
    -            }),
    -            ///  Receive FIFO0 mailbox data0 register
    -            RFIFOMDATA00: mmio.Mmio(packed struct(u32) {
    -                ///  Data byte 0
    -                DB0: u8,
    -                ///  Data byte 1
    -                DB1: u8,
    -                ///  Data byte 2
    -                DB2: u8,
    -                ///  Data byte 3
    -                DB3: u8,
    -            }),
    -            ///  Receive FIFO0 mailbox data1 register
    -            RFIFOMDATA10: mmio.Mmio(packed struct(u32) {
    -                ///  Data byte 4
    -                DB4: u8,
    -                ///  Data byte 5
    -                DB5: u8,
    -                ///  Data byte 6
    -                DB6: u8,
    -                ///  Data byte 7
    -                DB7: u8,
    -            }),
    -            ///  Receive FIFO1 mailbox identifier register
    -            RFIFOMI1: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Frame type
    -                FT: u1,
    -                ///  Frame format
    -                FF: u1,
    -                ///  The frame identifier
    -                EFID: u18,
    -                ///  The frame identifier
    -                SFID_EFID: u11,
    -            }),
    -            ///  Receive FIFO1 mailbox property register
    -            RFIFOMP1: mmio.Mmio(packed struct(u32) {
    -                ///  Data length code
    -                DLENC: u4,
    -                reserved8: u4,
    -                ///  Filtering index
    -                FI: u8,
    -                ///  Time stamp
    -                TS: u16,
    -            }),
    -            ///  Receive FIFO1 mailbox data0 register
    -            RFIFOMDATA01: mmio.Mmio(packed struct(u32) {
    -                ///  Data byte 0
    -                DB0: u8,
    -                ///  Data byte 1
    -                DB1: u8,
    -                ///  Data byte 2
    -                DB2: u8,
    -                ///  Data byte 3
    -                DB3: u8,
    -            }),
    -            ///  Receive FIFO1 mailbox data1 register
    -            RFIFOMDATA11: mmio.Mmio(packed struct(u32) {
    -                ///  Data byte 4
    -                DB4: u8,
    -                ///  Data byte 5
    -                DB5: u8,
    -                ///  Data byte 6
    -                DB6: u8,
    -                ///  Data byte 7
    -                DB7: u8,
    -            }),
    -            reserved512: [48]u8,
    -            ///  Filter control register
    -            FCTL: mmio.Mmio(packed struct(u32) {
    -                ///  Filter lock disable
    -                FLD: u1,
    -                reserved8: u7,
    -                ///  Header bank of CAN1 filter
    -                HBC1F: u6,
    -                padding: u18,
    -            }),
    -            ///  Filter mode configuration register
    -            FMCFG: mmio.Mmio(packed struct(u32) {
    -                ///  Filter mode
    -                FMOD0: u1,
    -                ///  Filter mode
    -                FMOD1: u1,
    -                ///  Filter mode
    -                FMOD2: u1,
    -                ///  Filter mode
    -                FMOD3: u1,
    -                ///  Filter mode
    -                FMOD4: u1,
    -                ///  Filter mode
    -                FMOD5: u1,
    -                ///  Filter mode
    -                FMOD6: u1,
    -                ///  Filter mode
    -                FMOD7: u1,
    -                ///  Filter mode
    -                FMOD8: u1,
    -                ///  Filter mode
    -                FMOD9: u1,
    -                ///  Filter mode
    -                FMOD10: u1,
    -                ///  Filter mode
    -                FMOD11: u1,
    -                ///  Filter mode
    -                FMOD12: u1,
    -                ///  Filter mode
    -                FMOD13: u1,
    -                ///  Filter mode
    -                FMOD14: u1,
    -                ///  Filter mode
    -                FMOD15: u1,
    -                ///  Filter mode
    -                FMOD16: u1,
    -                ///  Filter mode
    -                FMOD17: u1,
    -                ///  Filter mode
    -                FMOD18: u1,
    -                ///  Filter mode
    -                FMOD19: u1,
    -                ///  Filter mode
    -                FMOD20: u1,
    -                ///  Filter mode
    -                FMOD21: u1,
    -                ///  Filter mode
    -                FMOD22: u1,
    -                ///  Filter mode
    -                FMOD23: u1,
    -                ///  Filter mode
    -                FMOD24: u1,
    -                ///  Filter mode
    -                FMOD25: u1,
    -                ///  Filter mode
    -                FMOD26: u1,
    -                ///  Filter mode
    -                FMOD27: u1,
    -                padding: u4,
    -            }),
    -            reserved524: [4]u8,
    -            ///  Filter scale configuration register
    -            FSCFG: mmio.Mmio(packed struct(u32) {
    -                ///  Filter scale configuration
    -                FS0: u1,
    -                ///  Filter scale configuration
    -                FS1: u1,
    -                ///  Filter scale configuration
    -                FS2: u1,
    -                ///  Filter scale configuration
    -                FS3: u1,
    -                ///  Filter scale configuration
    -                FS4: u1,
    -                ///  Filter scale configuration
    -                FS5: u1,
    -                ///  Filter scale configuration
    -                FS6: u1,
    -                ///  Filter scale configuration
    -                FS7: u1,
    -                ///  Filter scale configuration
    -                FS8: u1,
    -                ///  Filter scale configuration
    -                FS9: u1,
    -                ///  Filter scale configuration
    -                FS10: u1,
    -                ///  Filter scale configuration
    -                FS11: u1,
    -                ///  Filter scale configuration
    -                FS12: u1,
    -                ///  Filter scale configuration
    -                FS13: u1,
    -                ///  Filter scale configuration
    -                FS14: u1,
    -                ///  Filter scale configuration
    -                FS15: u1,
    -                ///  Filter scale configuration
    -                FS16: u1,
    -                ///  Filter scale configuration
    -                FS17: u1,
    -                ///  Filter scale configuration
    -                FS18: u1,
    -                ///  Filter scale configuration
    -                FS19: u1,
    -                ///  Filter scale configuration
    -                FS20: u1,
    -                ///  Filter scale configuration
    -                FS21: u1,
    -                ///  Filter scale configuration
    -                FS22: u1,
    -                ///  Filter scale configuration
    -                FS23: u1,
    -                ///  Filter scale configuration
    -                FS24: u1,
    -                ///  Filter scale configuration
    -                FS25: u1,
    -                ///  Filter scale configuration
    -                FS26: u1,
    -                ///  Filter scale configuration
    -                FS27: u1,
    -                padding: u4,
    -            }),
    -            reserved532: [4]u8,
    -            ///  Filter associated FIFO register
    -            FAFIFO: mmio.Mmio(packed struct(u32) {
    -                ///  Filter 0 associated with FIFO
    -                FAF0: u1,
    -                ///  Filter 1 associated with FIFO
    -                FAF1: u1,
    -                ///  Filter 2 associated with FIFO
    -                FAF2: u1,
    -                ///  Filter 3 associated with FIFO
    -                FAF3: u1,
    -                ///  Filter 4 associated with FIFO
    -                FAF4: u1,
    -                ///  Filter 5 associated with FIFO
    -                FAF5: u1,
    -                ///  Filter 6 associated with FIFO
    -                FAF6: u1,
    -                ///  Filter 7 associated with FIFO
    -                FAF7: u1,
    -                ///  Filter 8 associated with FIFO
    -                FAF8: u1,
    -                ///  Filter 9 associated with FIFO
    -                FAF9: u1,
    -                ///  Filter 10 associated with FIFO
    -                FAF10: u1,
    -                ///  Filter 11 associated with FIFO
    -                FAF11: u1,
    -                ///  Filter 12 associated with FIFO
    -                FAF12: u1,
    -                ///  Filter 13 associated with FIFO
    -                FAF13: u1,
    -                ///  Filter 14 associated with FIFO
    -                FAF14: u1,
    -                ///  Filter 15 associated with FIFO
    -                FAF15: u1,
    -                ///  Filter 16 associated with FIFO
    -                FAF16: u1,
    -                ///  Filter 17 associated with FIFO
    -                FAF17: u1,
    -                ///  Filter 18 associated with FIFO
    -                FAF18: u1,
    -                ///  Filter 19 associated with FIFO
    -                FAF19: u1,
    -                ///  Filter 20 associated with FIFO
    -                FAF20: u1,
    -                ///  Filter 21 associated with FIFO
    -                FAF21: u1,
    -                ///  Filter 22 associated with FIFO
    -                FAF22: u1,
    -                ///  Filter 23 associated with FIFO
    -                FAF23: u1,
    -                ///  Filter 24 associated with FIFO
    -                FAF24: u1,
    -                ///  Filter 25 associated with FIFO
    -                FAF25: u1,
    -                ///  Filter 26 associated with FIFO
    -                FAF26: u1,
    -                ///  Filter 27 associated with FIFO
    -                FAF27: u1,
    -                padding: u4,
    -            }),
    -            reserved540: [4]u8,
    -            ///  Filter working register
    -            FW: mmio.Mmio(packed struct(u32) {
    -                ///  Filter working
    -                FW0: u1,
    -                ///  Filter working
    -                FW1: u1,
    -                ///  Filter working
    -                FW2: u1,
    -                ///  Filter working
    -                FW3: u1,
    -                ///  Filter working
    -                FW4: u1,
    -                ///  Filter working
    -                FW5: u1,
    -                ///  Filter working
    -                FW6: u1,
    -                ///  Filter working
    -                FW7: u1,
    -                ///  Filter working
    -                FW8: u1,
    -                ///  Filter working
    -                FW9: u1,
    -                ///  Filter working
    -                FW10: u1,
    -                ///  Filter working
    -                FW11: u1,
    -                ///  Filter working
    -                FW12: u1,
    -                ///  Filter working
    -                FW13: u1,
    -                ///  Filter working
    -                FW14: u1,
    -                ///  Filter working
    -                FW15: u1,
    -                ///  Filter working
    -                FW16: u1,
    -                ///  Filter working
    -                FW17: u1,
    -                ///  Filter working
    -                FW18: u1,
    -                ///  Filter working
    -                FW19: u1,
    -                ///  Filter working
    -                FW20: u1,
    -                ///  Filter working
    -                FW21: u1,
    -                ///  Filter working
    -                FW22: u1,
    -                ///  Filter working
    -                FW23: u1,
    -                ///  Filter working
    -                FW24: u1,
    -                ///  Filter working
    -                FW25: u1,
    -                ///  Filter working
    -                FW26: u1,
    -                ///  Filter working
    -                FW27: u1,
    -                padding: u4,
    -            }),
    -            reserved576: [32]u8,
    -            ///  Filter 0 data 0 register
    -            F0DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 0 data 1 register
    -            F0DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 1 data 0 register
    -            F1DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 1 data 1 register
    -            F1DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 2 data 0 register
    -            F2DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 2 data 1 register
    -            F2DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 3 data 0 register
    -            F3DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 3 data 1 register
    -            F3DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 4 data 0 register
    -            F4DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 4 data 1 register
    -            F4DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 5 data 0 register
    -            F5DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 5 data 1 register
    -            F5DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 6 data 0 register
    -            F6DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 6 data 1 register
    -            F6DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 7 data 0 register
    -            F7DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 7 data 1 register
    -            F7DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 8 data 0 register
    -            F8DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 8 data 1 register
    -            F8DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 9 data 0 register
    -            F9DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 9 data 1 register
    -            F9DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 10 data 0 register
    -            F10DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 10 data 1 register
    -            F10DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 11 data 0 register
    -            F11DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 11 data 1 register
    -            F11DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 12 data 0 register
    -            F12DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 12 data 1 register
    -            F12DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 13 data 0 register
    -            F13DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 13 data 1 register
    -            F13DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 14 data 0 register
    -            F14DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 14 data 1 register
    -            F14DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 15 data 0 register
    -            F15DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 15 data 1 register
    -            F15DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 16 data 0 register
    -            F16DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 16 data 1 register
    -            F16DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 17 data 0 register
    -            F17DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 17 data 1 register
    -            F17DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 18 data 0 register
    -            F18DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 18 data 1 register
    -            F18DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 19 data 0 register
    -            F19DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 19 data 1 register
    -            F19DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 20 data 0 register
    -            F20DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 20 data 1 register
    -            F20DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 21 data 0 register
    -            F21DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 21 data 1 register
    -            F21DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 22 data 0 register
    -            F22DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 22 data 1 register
    -            F22DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 23 data 0 register
    -            F23DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 23 data 1 register
    -            F23DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 24 data 0 register
    -            F24DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 24 data 1 register
    -            F24DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 25 data 0 register
    -            F25DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 25 data 1 register
    -            F25DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 26 data 0 register
    -            F26DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 26 data 1 register
    -            F26DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 27 data 0 register
    -            F27DATA0: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -            ///  Filter 27 data 1 register
    -            F27DATA1: mmio.Mmio(packed struct(u32) {
    -                ///  Filter bits
    -                FD0: u1,
    -                ///  Filter bits
    -                FD1: u1,
    -                ///  Filter bits
    -                FD2: u1,
    -                ///  Filter bits
    -                FD3: u1,
    -                ///  Filter bits
    -                FD4: u1,
    -                ///  Filter bits
    -                FD5: u1,
    -                ///  Filter bits
    -                FD6: u1,
    -                ///  Filter bits
    -                FD7: u1,
    -                ///  Filter bits
    -                FD8: u1,
    -                ///  Filter bits
    -                FD9: u1,
    -                ///  Filter bits
    -                FD10: u1,
    -                ///  Filter bits
    -                FD11: u1,
    -                ///  Filter bits
    -                FD12: u1,
    -                ///  Filter bits
    -                FD13: u1,
    -                ///  Filter bits
    -                FD14: u1,
    -                ///  Filter bits
    -                FD15: u1,
    -                ///  Filter bits
    -                FD16: u1,
    -                ///  Filter bits
    -                FD17: u1,
    -                ///  Filter bits
    -                FD18: u1,
    -                ///  Filter bits
    -                FD19: u1,
    -                ///  Filter bits
    -                FD20: u1,
    -                ///  Filter bits
    -                FD21: u1,
    -                ///  Filter bits
    -                FD22: u1,
    -                ///  Filter bits
    -                FD23: u1,
    -                ///  Filter bits
    -                FD24: u1,
    -                ///  Filter bits
    -                FD25: u1,
    -                ///  Filter bits
    -                FD26: u1,
    -                ///  Filter bits
    -                FD27: u1,
    -                ///  Filter bits
    -                FD28: u1,
    -                ///  Filter bits
    -                FD29: u1,
    -                ///  Filter bits
    -                FD30: u1,
    -                ///  Filter bits
    -                FD31: u1,
    -            }),
    -        };
    -
    -        ///  Window watchdog timer
    -        pub const WWDGT = extern struct {
    -            ///  Control register
    -            CTL: mmio.Mmio(packed struct(u32) {
    -                ///  7-bit counter
    -                CNT: u7,
    -                ///  Activation bit
    -                WDGTEN: u1,
    -                padding: u24,
    -            }),
    -            ///  Configuration register
    -            CFG: mmio.Mmio(packed struct(u32) {
    -                ///  7-bit window value
    -                WIN: u7,
    -                ///  Prescaler
    -                PSC: u2,
    -                ///  Early wakeup interrupt
    -                EWIE: u1,
    -                padding: u22,
    -            }),
    -            ///  Status register
    -            STAT: mmio.Mmio(packed struct(u32) {
    -                ///  Early wakeup interrupt flag
    -                EWIF: u1,
    -                padding: u31,
    -            }),
    -        };
    -
    -        ///  cyclic redundancy check calculation unit
    -        pub const CRC = extern struct {
    -            ///  Data register
    -            DATA: mmio.Mmio(packed struct(u32) {
    -                ///  CRC calculation result bits
    -                DATA: u32,
    -            }),
    -            ///  Free data register
    -            FDATA: mmio.Mmio(packed struct(u32) {
    -                ///  Free Data Register bits
    -                FDATA: u8,
    -                padding: u24,
    -            }),
    -            ///  Control register
    -            CTL: mmio.Mmio(packed struct(u32) {
    -                ///  reset bit
    -                RST: u1,
    -                padding: u31,
    -            }),
    -        };
    -
    -        ///  Digital-to-analog converter
    -        pub const DAC = extern struct {
    -            ///  control register
    -            CTL: mmio.Mmio(packed struct(u32) {
    -                ///  DAC0 enable
    -                DEN0: u1,
    -                ///  DAC0 output buffer turn off
    -                DBOFF0: u1,
    -                ///  DAC0 trigger enable
    -                DTEN0: u1,
    -                ///  DAC0 trigger selection
    -                DTSEL0: u3,
    -                ///  DAC0 noise wave mode
    -                DWM0: u2,
    -                ///  DAC0 noise wave bit width
    -                DWBW0: u4,
    -                ///  DAC0 DMA enable
    -                DDMAEN0: u1,
    -                reserved16: u3,
    -                ///  DAC1 enable
    -                DEN1: u1,
    -                ///  DAC1 output buffer turn off
    -                DBOFF1: u1,
    -                ///  DAC1 trigger enable
    -                DTEN1: u1,
    -                ///  DAC1 trigger selection
    -                DTSEL1: u3,
    -                ///  DAC1 noise wave mode
    -                DWM1: u2,
    -                ///  DAC1 noise wave bit width
    -                DWBW1: u4,
    -                ///  DAC1 DMA enable
    -                DDMAEN1: u1,
    -                padding: u3,
    -            }),
    -            ///  software trigger register
    -            SWT: mmio.Mmio(packed struct(u32) {
    -                ///  DAC0 software trigger
    -                SWTR0: u1,
    -                ///  DAC1 software trigger
    -                SWTR1: u1,
    -                padding: u30,
    -            }),
    -            ///  DAC0 12-bit right-aligned data holding register
    -            DAC0_R12DH: mmio.Mmio(packed struct(u32) {
    -                ///  DAC0 12-bit right-aligned data
    -                DAC0_DH: u12,
    -                padding: u20,
    -            }),
    -            ///  DAC0 12-bit left-aligned data holding register
    -            DAC0_L12DH: mmio.Mmio(packed struct(u32) {
    -                reserved4: u4,
    -                ///  DAC0 12-bit left-aligned data
    -                DAC0_DH: u12,
    -                padding: u16,
    -            }),
    -            ///  DAC0 8-bit right aligned data holding register
    -            DAC0_R8DH: mmio.Mmio(packed struct(u32) {
    -                ///  DAC0 8-bit right-aligned data
    -                DAC0_DH: u8,
    -                padding: u24,
    -            }),
    -            ///  DAC1 12-bit right-aligned data holding register
    -            DAC1_R12DH: mmio.Mmio(packed struct(u32) {
    -                ///  DAC1 12-bit right-aligned data
    -                DAC1_DH: u12,
    -                padding: u20,
    -            }),
    -            ///  DAC1 12-bit left aligned data holding register
    -            DAC1_L12DH: mmio.Mmio(packed struct(u32) {
    -                reserved4: u4,
    -                ///  DAC1 12-bit left-aligned data
    -                DAC1_DH: u12,
    -                padding: u16,
    -            }),
    -            ///  DAC1 8-bit right aligned data holding register
    -            DAC1_R8DH: mmio.Mmio(packed struct(u32) {
    -                ///  DAC1 8-bit right-aligned data
    -                DAC1_DH: u8,
    -                padding: u24,
    -            }),
    -            ///  DAC concurrent mode 12-bit right-aligned data holding register
    -            DACC_R12DH: mmio.Mmio(packed struct(u32) {
    -                ///  DAC0 12-bit right-aligned data
    -                DAC0_DH: u12,
    -                reserved16: u4,
    -                ///  DAC1 12-bit right-aligned data
    -                DAC1_DH: u12,
    -                padding: u4,
    -            }),
    -            ///  DAC concurrent mode 12-bit left aligned data holding register
    -            DACC_L12DH: mmio.Mmio(packed struct(u32) {
    -                reserved4: u4,
    -                ///  DAC0 12-bit left-aligned data
    -                DAC0_DH: u12,
    -                reserved20: u4,
    -                ///  DAC1 12-bit left-aligned data
    -                DAC1_DH: u12,
    -            }),
    -            ///  DAC concurrent mode 8-bit right aligned data holding register
    -            DACC_R8DH: mmio.Mmio(packed struct(u32) {
    -                ///  DAC0 8-bit right-aligned data
    -                DAC0_DH: u8,
    -                ///  DAC1 8-bit right-aligned data
    -                DAC1_DH: u8,
    -                padding: u16,
    -            }),
    -            ///  DAC0 data output register
    -            DAC0_DO: mmio.Mmio(packed struct(u32) {
    -                ///  DAC0 data output
    -                DAC0_DO: u12,
    -                padding: u20,
    -            }),
    -            ///  DAC1 data output register
    -            DAC1_DO: mmio.Mmio(packed struct(u32) {
    -                ///  DAC1 data output
    -                DAC1_DO: u12,
    -                padding: u20,
    -            }),
    -        };
    -
    -        ///  Debug support
    -        pub const DBG = extern struct {
    -            ///  ID code register
    -            ID: mmio.Mmio(packed struct(u32) {
    -                ///  DBG ID code register
    -                ID_CODE: u32,
    -            }),
    -            ///  Control register 0
    -            CTL: mmio.Mmio(packed struct(u32) {
    -                ///  Sleep mode hold register
    -                SLP_HOLD: u1,
    -                ///  Deep-sleep mode hold register
    -                DSLP_HOLD: u1,
    -                ///  Standby mode hold register
    -                STB_HOLD: u1,
    -                reserved8: u5,
    -                ///  FWDGT hold bit
    -                FWDGT_HOLD: u1,
    -                ///  WWDGT hold bit
    -                WWDGT_HOLD: u1,
    -                ///  TIMER 0 hold bit
    -                TIMER0_HOLD: u1,
    -                ///  TIMER 1 hold bit
    -                TIMER1_HOLD: u1,
    -                ///  TIMER 2 hold bit
    -                TIMER2_HOLD: u1,
    -                ///  TIMER 23 hold bit
    -                TIMER3_HOLD: u1,
    -                ///  CAN0 hold bit
    -                CAN0_HOLD: u1,
    -                ///  I2C0 hold bit
    -                I2C0_HOLD: u1,
    -                ///  I2C1 hold bit
    -                I2C1_HOLD: u1,
    -                reserved18: u1,
    -                ///  TIMER4_HOLD
    -                TIMER4_HOLD: u1,
    -                ///  TIMER 5 hold bit
    -                TIMER5_HOLD: u1,
    -                ///  TIMER 6 hold bit
    -                TIMER6_HOLD: u1,
    -                ///  CAN1 hold bit
    -                CAN1_HOLD: u1,
    -                padding: u10,
    -            }),
    -        };
    -
    -        ///  DMA controller
    -        pub const DMA0 = extern struct {
    -            ///  Interrupt flag register
    -            INTF: mmio.Mmio(packed struct(u32) {
    -                ///  Global interrupt flag of channel 0
    -                GIF0: u1,
    -                ///  Full Transfer finish flag of channe 0
    -                FTFIF0: u1,
    -                ///  Half transfer finish flag of channel 0
    -                HTFIF0: u1,
    -                ///  Error flag of channel 0
    -                ERRIF0: u1,
    -                ///  Global interrupt flag of channel 1
    -                GIF1: u1,
    -                ///  Full Transfer finish flag of channe 1
    -                FTFIF1: u1,
    -                ///  Half transfer finish flag of channel 1
    -                HTFIF1: u1,
    -                ///  Error flag of channel 1
    -                ERRIF1: u1,
    -                ///  Global interrupt flag of channel 2
    -                GIF2: u1,
    -                ///  Full Transfer finish flag of channe 2
    -                FTFIF2: u1,
    -                ///  Half transfer finish flag of channel 2
    -                HTFIF2: u1,
    -                ///  Error flag of channel 2
    -                ERRIF2: u1,
    -                ///  Global interrupt flag of channel 3
    -                GIF3: u1,
    -                ///  Full Transfer finish flag of channe 3
    -                FTFIF3: u1,
    -                ///  Half transfer finish flag of channel 3
    -                HTFIF3: u1,
    -                ///  Error flag of channel 3
    -                ERRIF3: u1,
    -                ///  Global interrupt flag of channel 4
    -                GIF4: u1,
    -                ///  Full Transfer finish flag of channe 4
    -                FTFIF4: u1,
    -                ///  Half transfer finish flag of channel 4
    -                HTFIF4: u1,
    -                ///  Error flag of channel 4
    -                ERRIF4: u1,
    -                ///  Global interrupt flag of channel 5
    -                GIF5: u1,
    -                ///  Full Transfer finish flag of channe 5
    -                FTFIF5: u1,
    -                ///  Half transfer finish flag of channel 5
    -                HTFIF5: u1,
    -                ///  Error flag of channel 5
    -                ERRIF5: u1,
    -                ///  Global interrupt flag of channel 6
    -                GIF6: u1,
    -                ///  Full Transfer finish flag of channe 6
    -                FTFIF6: u1,
    -                ///  Half transfer finish flag of channel 6
    -                HTFIF6: u1,
    -                ///  Error flag of channel 6
    -                ERRIF6: u1,
    -                padding: u4,
    -            }),
    -            ///  Interrupt flag clear register
    -            INTC: mmio.Mmio(packed struct(u32) {
    -                ///  Clear global interrupt flag of channel 0
    -                GIFC0: u1,
    -                ///  Clear bit for full transfer finish flag of channel 0
    -                FTFIFC0: u1,
    -                ///  Clear bit for half transfer finish flag of channel 0
    -                HTFIFC0: u1,
    -                ///  Clear bit for error flag of channel 0
    -                ERRIFC0: u1,
    -                ///  Clear global interrupt flag of channel 1
    -                GIFC1: u1,
    -                ///  Clear bit for full transfer finish flag of channel 1
    -                FTFIFC1: u1,
    -                ///  Clear bit for half transfer finish flag of channel 1
    -                HTFIFC1: u1,
    -                ///  Clear bit for error flag of channel 1
    -                ERRIFC1: u1,
    -                ///  Clear global interrupt flag of channel 2
    -                GIFC2: u1,
    -                ///  Clear bit for full transfer finish flag of channel 2
    -                FTFIFC2: u1,
    -                ///  Clear bit for half transfer finish flag of channel 2
    -                HTFIFC2: u1,
    -                ///  Clear bit for error flag of channel 2
    -                ERRIFC2: u1,
    -                ///  Clear global interrupt flag of channel 3
    -                GIFC3: u1,
    -                ///  Clear bit for full transfer finish flag of channel 3
    -                FTFIFC3: u1,
    -                ///  Clear bit for half transfer finish flag of channel 3
    -                HTFIFC3: u1,
    -                ///  Clear bit for error flag of channel 3
    -                ERRIFC3: u1,
    -                ///  Clear global interrupt flag of channel 4
    -                GIFC4: u1,
    -                ///  Clear bit for full transfer finish flag of channel 4
    -                FTFIFC4: u1,
    -                ///  Clear bit for half transfer finish flag of channel 4
    -                HTFIFC4: u1,
    -                ///  Clear bit for error flag of channel 4
    -                ERRIFC4: u1,
    -                ///  Clear global interrupt flag of channel 5
    -                GIFC5: u1,
    -                ///  Clear bit for full transfer finish flag of channel 5
    -                FTFIFC5: u1,
    -                ///  Clear bit for half transfer finish flag of channel 5
    -                HTFIFC5: u1,
    -                ///  Clear bit for error flag of channel 5
    -                ERRIFC5: u1,
    -                ///  Clear global interrupt flag of channel 6
    -                GIFC6: u1,
    -                ///  Clear bit for full transfer finish flag of channel 6
    -                FTFIFC6: u1,
    -                ///  Clear bit for half transfer finish flag of channel 6
    -                HTFIFC6: u1,
    -                ///  Clear bit for error flag of channel 6
    -                ERRIFC6: u1,
    -                padding: u4,
    -            }),
    -            ///  Channel 0 control register
    -            CH0CTL: mmio.Mmio(packed struct(u32) {
    -                ///  Channel enable
    -                CHEN: u1,
    -                ///  Enable bit for channel full transfer finish interrupt
    -                FTFIE: u1,
    -                ///  Enable bit for channel half transfer finish interrupt
    -                HTFIE: u1,
    -                ///  Enable bit for channel error interrupt
    -                ERRIE: u1,
    -                ///  Transfer direction
    -                DIR: u1,
    -                ///  Circular mode enable
    -                CMEN: u1,
    -                ///  Next address generation algorithm of peripheral
    -                PNAGA: u1,
    -                ///  Next address generation algorithm of memory
    -                MNAGA: u1,
    -                ///  Transfer data size of peripheral
    -                PWIDTH: u2,
    -                ///  Transfer data size of memory
    -                MWIDTH: u2,
    -                ///  Priority level
    -                PRIO: u2,
    -                ///  Memory to Memory Mode
    -                M2M: u1,
    -                padding: u17,
    -            }),
    -            ///  Channel 0 counter register
    -            CH0CNT: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer counter
    -                CNT: u16,
    -                padding: u16,
    -            }),
    -            ///  Channel 0 peripheral base address register
    -            CH0PADDR: mmio.Mmio(packed struct(u32) {
    -                ///  Peripheral base address
    -                PADDR: u32,
    -            }),
    -            ///  Channel 0 memory base address register
    -            CH0MADDR: mmio.Mmio(packed struct(u32) {
    -                ///  Memory base address
    -                MADDR: u32,
    -            }),
    -            reserved28: [4]u8,
    -            ///  Channel 1 control register
    -            CH1CTL: mmio.Mmio(packed struct(u32) {
    -                ///  Channel enable
    -                CHEN: u1,
    -                ///  Enable bit for channel full transfer finish interrupt
    -                FTFIE: u1,
    -                ///  Enable bit for channel half transfer finish interrupt
    -                HTFIE: u1,
    -                ///  Enable bit for channel error interrupt
    -                ERRIE: u1,
    -                ///  Transfer direction
    -                DIR: u1,
    -                ///  Circular mode enable
    -                CMEN: u1,
    -                ///  Next address generation algorithm of peripheral
    -                PNAGA: u1,
    -                ///  Next address generation algorithm of memory
    -                MNAGA: u1,
    -                ///  Transfer data size of peripheral
    -                PWIDTH: u2,
    -                ///  Transfer data size of memory
    -                MWIDTH: u2,
    -                ///  Priority level
    -                PRIO: u2,
    -                ///  Memory to Memory Mode
    -                M2M: u1,
    -                padding: u17,
    -            }),
    -            ///  Channel 1 counter register
    -            CH1CNT: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer counter
    -                CNT: u16,
    -                padding: u16,
    -            }),
    -            ///  Channel 1 peripheral base address register
    -            CH1PADDR: mmio.Mmio(packed struct(u32) {
    -                ///  Peripheral base address
    -                PADDR: u32,
    -            }),
    -            ///  Channel 1 memory base address register
    -            CH1MADDR: mmio.Mmio(packed struct(u32) {
    -                ///  Memory base address
    -                MADDR: u32,
    -            }),
    -            reserved48: [4]u8,
    -            ///  Channel 2 control register
    -            CH2CTL: mmio.Mmio(packed struct(u32) {
    -                ///  Channel enable
    -                CHEN: u1,
    -                ///  Enable bit for channel full transfer finish interrupt
    -                FTFIE: u1,
    -                ///  Enable bit for channel half transfer finish interrupt
    -                HTFIE: u1,
    -                ///  Enable bit for channel error interrupt
    -                ERRIE: u1,
    -                ///  Transfer direction
    -                DIR: u1,
    -                ///  Circular mode enable
    -                CMEN: u1,
    -                ///  Next address generation algorithm of peripheral
    -                PNAGA: u1,
    -                ///  Next address generation algorithm of memory
    -                MNAGA: u1,
    -                ///  Transfer data size of peripheral
    -                PWIDTH: u2,
    -                ///  Transfer data size of memory
    -                MWIDTH: u2,
    -                ///  Priority level
    -                PRIO: u2,
    -                ///  Memory to Memory Mode
    -                M2M: u1,
    -                padding: u17,
    -            }),
    -            ///  Channel 2 counter register
    -            CH2CNT: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer counter
    -                CNT: u16,
    -                padding: u16,
    -            }),
    -            ///  Channel 2 peripheral base address register
    -            CH2PADDR: mmio.Mmio(packed struct(u32) {
    -                ///  Peripheral base address
    -                PADDR: u32,
    -            }),
    -            ///  Channel 2 memory base address register
    -            CH2MADDR: mmio.Mmio(packed struct(u32) {
    -                ///  Memory base address
    -                MADDR: u32,
    -            }),
    -            reserved68: [4]u8,
    -            ///  Channel 3 control register
    -            CH3CTL: mmio.Mmio(packed struct(u32) {
    -                ///  Channel enable
    -                CHEN: u1,
    -                ///  Enable bit for channel full transfer finish interrupt
    -                FTFIE: u1,
    -                ///  Enable bit for channel half transfer finish interrupt
    -                HTFIE: u1,
    -                ///  Enable bit for channel error interrupt
    -                ERRIE: u1,
    -                ///  Transfer direction
    -                DIR: u1,
    -                ///  Circular mode enable
    -                CMEN: u1,
    -                ///  Next address generation algorithm of peripheral
    -                PNAGA: u1,
    -                ///  Next address generation algorithm of memory
    -                MNAGA: u1,
    -                ///  Transfer data size of peripheral
    -                PWIDTH: u2,
    -                ///  Transfer data size of memory
    -                MWIDTH: u2,
    -                ///  Priority level
    -                PRIO: u2,
    -                ///  Memory to Memory Mode
    -                M2M: u1,
    -                padding: u17,
    -            }),
    -            ///  Channel 3 counter register
    -            CH3CNT: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer counter
    -                CNT: u16,
    -                padding: u16,
    -            }),
    -            ///  Channel 3 peripheral base address register
    -            CH3PADDR: mmio.Mmio(packed struct(u32) {
    -                ///  Peripheral base address
    -                PADDR: u32,
    -            }),
    -            ///  Channel 3 memory base address register
    -            CH3MADDR: mmio.Mmio(packed struct(u32) {
    -                ///  Memory base address
    -                MADDR: u32,
    -            }),
    -            reserved88: [4]u8,
    -            ///  Channel 4 control register
    -            CH4CTL: mmio.Mmio(packed struct(u32) {
    -                ///  Channel enable
    -                CHEN: u1,
    -                ///  Enable bit for channel full transfer finish interrupt
    -                FTFIE: u1,
    -                ///  Enable bit for channel half transfer finish interrupt
    -                HTFIE: u1,
    -                ///  Enable bit for channel error interrupt
    -                ERRIE: u1,
    -                ///  Transfer direction
    -                DIR: u1,
    -                ///  Circular mode enable
    -                CMEN: u1,
    -                ///  Next address generation algorithm of peripheral
    -                PNAGA: u1,
    -                ///  Next address generation algorithm of memory
    -                MNAGA: u1,
    -                ///  Transfer data size of peripheral
    -                PWIDTH: u2,
    -                ///  Transfer data size of memory
    -                MWIDTH: u2,
    -                ///  Priority level
    -                PRIO: u2,
    -                ///  Memory to Memory Mode
    -                M2M: u1,
    -                padding: u17,
    -            }),
    -            ///  Channel 4 counter register
    -            CH4CNT: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer counter
    -                CNT: u16,
    -                padding: u16,
    -            }),
    -            ///  Channel 4 peripheral base address register
    -            CH4PADDR: mmio.Mmio(packed struct(u32) {
    -                ///  Peripheral base address
    -                PADDR: u32,
    -            }),
    -            ///  Channel 4 memory base address register
    -            CH4MADDR: mmio.Mmio(packed struct(u32) {
    -                ///  Memory base address
    -                MADDR: u32,
    -            }),
    -            reserved108: [4]u8,
    -            ///  Channel 5 control register
    -            CH5CTL: mmio.Mmio(packed struct(u32) {
    -                ///  Channel enable
    -                CHEN: u1,
    -                ///  Enable bit for channel full transfer finish interrupt
    -                FTFIE: u1,
    -                ///  Enable bit for channel half transfer finish interrupt
    -                HTFIE: u1,
    -                ///  Enable bit for channel error interrupt
    -                ERRIE: u1,
    -                ///  Transfer direction
    -                DIR: u1,
    -                ///  Circular mode enable
    -                CMEN: u1,
    -                ///  Next address generation algorithm of peripheral
    -                PNAGA: u1,
    -                ///  Next address generation algorithm of memory
    -                MNAGA: u1,
    -                ///  Transfer data size of peripheral
    -                PWIDTH: u2,
    -                ///  Transfer data size of memory
    -                MWIDTH: u2,
    -                ///  Priority level
    -                PRIO: u2,
    -                ///  Memory to Memory Mode
    -                M2M: u1,
    -                padding: u17,
    -            }),
    -            ///  Channel 5 counter register
    -            CH5CNT: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer counter
    -                CNT: u16,
    -                padding: u16,
    -            }),
    -            ///  Channel 5 peripheral base address register
    -            CH5PADDR: mmio.Mmio(packed struct(u32) {
    -                ///  Peripheral base address
    -                PADDR: u32,
    -            }),
    -            ///  Channel 5 memory base address register
    -            CH5MADDR: mmio.Mmio(packed struct(u32) {
    -                ///  Memory base address
    -                MADDR: u32,
    -            }),
    -            reserved128: [4]u8,
    -            ///  Channel 6 control register
    -            CH6CTL: mmio.Mmio(packed struct(u32) {
    -                ///  Channel enable
    -                CHEN: u1,
    -                ///  Enable bit for channel full transfer finish interrupt
    -                FTFIE: u1,
    -                ///  Enable bit for channel half transfer finish interrupt
    -                HTFIE: u1,
    -                ///  Enable bit for channel error interrupt
    -                ERRIE: u1,
    -                ///  Transfer direction
    -                DIR: u1,
    -                ///  Circular mode enable
    -                CMEN: u1,
    -                ///  Next address generation algorithm of peripheral
    -                PNAGA: u1,
    -                ///  Next address generation algorithm of memory
    -                MNAGA: u1,
    -                ///  Transfer data size of peripheral
    -                PWIDTH: u2,
    -                ///  Transfer data size of memory
    -                MWIDTH: u2,
    -                ///  Priority level
    -                PRIO: u2,
    -                ///  Memory to Memory Mode
    -                M2M: u1,
    -                padding: u17,
    -            }),
    -            ///  Channel 6 counter register
    -            CH6CNT: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer counter
    -                CNT: u16,
    -                padding: u16,
    -            }),
    -            ///  Channel 6 peripheral base address register
    -            CH6PADDR: mmio.Mmio(packed struct(u32) {
    -                ///  Peripheral base address
    -                PADDR: u32,
    -            }),
    -            ///  Channel 6 memory base address register
    -            CH6MADDR: mmio.Mmio(packed struct(u32) {
    -                ///  Memory base address
    -                MADDR: u32,
    -            }),
    -        };
    -
    -        ///  Direct memory access controller
    -        pub const DMA1 = extern struct {
    -            ///  Interrupt flag register
    -            INTF: mmio.Mmio(packed struct(u32) {
    -                ///  Global interrupt flag of channel 0
    -                GIF0: u1,
    -                ///  Full Transfer finish flag of channe 0
    -                FTFIF0: u1,
    -                ///  Half transfer finish flag of channel 0
    -                HTFIF0: u1,
    -                ///  Error flag of channel 0
    -                ERRIF0: u1,
    -                ///  Global interrupt flag of channel 1
    -                GIF1: u1,
    -                ///  Full Transfer finish flag of channe 1
    -                FTFIF1: u1,
    -                ///  Half transfer finish flag of channel 1
    -                HTFIF1: u1,
    -                ///  Error flag of channel 1
    -                ERRIF1: u1,
    -                ///  Global interrupt flag of channel 2
    -                GIF2: u1,
    -                ///  Full Transfer finish flag of channe 2
    -                FTFIF2: u1,
    -                ///  Half transfer finish flag of channel 2
    -                HTFIF2: u1,
    -                ///  Error flag of channel 2
    -                ERRIF2: u1,
    -                ///  Global interrupt flag of channel 3
    -                GIF3: u1,
    -                ///  Full Transfer finish flag of channe 3
    -                FTFIF3: u1,
    -                ///  Half transfer finish flag of channel 3
    -                HTFIF3: u1,
    -                ///  Error flag of channel 3
    -                ERRIF3: u1,
    -                ///  Global interrupt flag of channel 4
    -                GIF4: u1,
    -                ///  Full Transfer finish flag of channe 4
    -                FTFIF4: u1,
    -                ///  Half transfer finish flag of channel 4
    -                HTFIF4: u1,
    -                ///  Error flag of channel 4
    -                ERRIF4: u1,
    -                padding: u12,
    -            }),
    -            ///  Interrupt flag clear register
    -            INTC: mmio.Mmio(packed struct(u32) {
    -                ///  Clear global interrupt flag of channel 0
    -                GIFC0: u1,
    -                ///  Clear bit for full transfer finish flag of channel 0
    -                FTFIFC0: u1,
    -                ///  Clear bit for half transfer finish flag of channel 0
    -                HTFIFC0: u1,
    -                ///  Clear bit for error flag of channel 0
    -                ERRIFC0: u1,
    -                ///  Clear global interrupt flag of channel 1
    -                GIFC1: u1,
    -                ///  Clear bit for full transfer finish flag of channel 1
    -                FTFIFC1: u1,
    -                ///  Clear bit for half transfer finish flag of channel 1
    -                HTFIFC1: u1,
    -                ///  Clear bit for error flag of channel 1
    -                ERRIFC1: u1,
    -                ///  Clear global interrupt flag of channel 2
    -                GIFC2: u1,
    -                ///  Clear bit for full transfer finish flag of channel 2
    -                FTFIFC2: u1,
    -                ///  Clear bit for half transfer finish flag of channel 2
    -                HTFIFC2: u1,
    -                ///  Clear bit for error flag of channel 2
    -                ERRIFC2: u1,
    -                ///  Clear global interrupt flag of channel 3
    -                GIFC3: u1,
    -                ///  Clear bit for full transfer finish flag of channel 3
    -                FTFIFC3: u1,
    -                ///  Clear bit for half transfer finish flag of channel 3
    -                HTFIFC3: u1,
    -                ///  Clear bit for error flag of channel 3
    -                ERRIFC3: u1,
    -                ///  Clear global interrupt flag of channel 4
    -                GIFC4: u1,
    -                ///  Clear bit for full transfer finish flag of channel 4
    -                FTFIFC4: u1,
    -                ///  Clear bit for half transfer finish flag of channel 4
    -                HTFIFC4: u1,
    -                ///  Clear bit for error flag of channel 4
    -                ERRIFC4: u1,
    -                padding: u12,
    -            }),
    -            ///  Channel 0 control register
    -            CH0CTL: mmio.Mmio(packed struct(u32) {
    -                ///  Channel enable
    -                CHEN: u1,
    -                ///  Enable bit for channel full transfer finish interrupt
    -                FTFIE: u1,
    -                ///  Enable bit for channel half transfer finish interrupt
    -                HTFIE: u1,
    -                ///  Enable bit for channel error interrupt
    -                ERRIE: u1,
    -                ///  Transfer direction
    -                DIR: u1,
    -                ///  Circular mode enable
    -                CMEN: u1,
    -                ///  Next address generation algorithm of peripheral
    -                PNAGA: u1,
    -                ///  Next address generation algorithm of memory
    -                MNAGA: u1,
    -                ///  Transfer data size of peripheral
    -                PWIDTH: u2,
    -                ///  Transfer data size of memory
    -                MWIDTH: u2,
    -                ///  Priority level
    -                PRIO: u2,
    -                ///  Memory to Memory Mode
    -                M2M: u1,
    -                padding: u17,
    -            }),
    -            ///  Channel 0 counter register
    -            CH0CNT: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer counter
    -                CNT: u16,
    -                padding: u16,
    -            }),
    -            ///  Channel 0 peripheral base address register
    -            CH0PADDR: mmio.Mmio(packed struct(u32) {
    -                ///  Peripheral base address
    -                PADDR: u32,
    -            }),
    -            ///  Channel 0 memory base address register
    -            CH0MADDR: mmio.Mmio(packed struct(u32) {
    -                ///  Memory base address
    -                MADDR: u32,
    -            }),
    -            reserved28: [4]u8,
    -            ///  Channel 1 control register
    -            CH1CTL: mmio.Mmio(packed struct(u32) {
    -                ///  Channel enable
    -                CHEN: u1,
    -                ///  Enable bit for channel full transfer finish interrupt
    -                FTFIE: u1,
    -                ///  Enable bit for channel half transfer finish interrupt
    -                HTFIE: u1,
    -                ///  Enable bit for channel error interrupt
    -                ERRIE: u1,
    -                ///  Transfer direction
    -                DIR: u1,
    -                ///  Circular mode enable
    -                CMEN: u1,
    -                ///  Next address generation algorithm of peripheral
    -                PNAGA: u1,
    -                ///  Next address generation algorithm of memory
    -                MNAGA: u1,
    -                ///  Transfer data size of peripheral
    -                PWIDTH: u2,
    -                ///  Transfer data size of memory
    -                MWIDTH: u2,
    -                ///  Priority level
    -                PRIO: u2,
    -                ///  Memory to Memory Mode
    -                M2M: u1,
    -                padding: u17,
    -            }),
    -            ///  Channel 1 counter register
    -            CH1CNT: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer counter
    -                CNT: u16,
    -                padding: u16,
    -            }),
    -            ///  Channel 1 peripheral base address register
    -            CH1PADDR: mmio.Mmio(packed struct(u32) {
    -                ///  Peripheral base address
    -                PADDR: u32,
    -            }),
    -            ///  Channel 1 memory base address register
    -            CH1MADDR: mmio.Mmio(packed struct(u32) {
    -                ///  Memory base address
    -                MADDR: u32,
    -            }),
    -            reserved48: [4]u8,
    -            ///  Channel 2 control register
    -            CH2CTL: mmio.Mmio(packed struct(u32) {
    -                ///  Channel enable
    -                CHEN: u1,
    -                ///  Enable bit for channel full transfer finish interrupt
    -                FTFIE: u1,
    -                ///  Enable bit for channel half transfer finish interrupt
    -                HTFIE: u1,
    -                ///  Enable bit for channel error interrupt
    -                ERRIE: u1,
    -                ///  Transfer direction
    -                DIR: u1,
    -                ///  Circular mode enable
    -                CMEN: u1,
    -                ///  Next address generation algorithm of peripheral
    -                PNAGA: u1,
    -                ///  Next address generation algorithm of memory
    -                MNAGA: u1,
    -                ///  Transfer data size of peripheral
    -                PWIDTH: u2,
    -                ///  Transfer data size of memory
    -                MWIDTH: u2,
    -                ///  Priority level
    -                PRIO: u2,
    -                ///  Memory to Memory Mode
    -                M2M: u1,
    -                padding: u17,
    -            }),
    -            ///  Channel 2 counter register
    -            CH2CNT: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer counter
    -                CNT: u16,
    -                padding: u16,
    -            }),
    -            ///  Channel 2 peripheral base address register
    -            CH2PADDR: mmio.Mmio(packed struct(u32) {
    -                ///  Peripheral base address
    -                PADDR: u32,
    -            }),
    -            ///  Channel 2 memory base address register
    -            CH2MADDR: mmio.Mmio(packed struct(u32) {
    -                ///  Memory base address
    -                MADDR: u32,
    -            }),
    -            reserved68: [4]u8,
    -            ///  Channel 3 control register
    -            CH3CTL: mmio.Mmio(packed struct(u32) {
    -                ///  Channel enable
    -                CHEN: u1,
    -                ///  Enable bit for channel full transfer finish interrupt
    -                FTFIE: u1,
    -                ///  Enable bit for channel half transfer finish interrupt
    -                HTFIE: u1,
    -                ///  Enable bit for channel error interrupt
    -                ERRIE: u1,
    -                ///  Transfer direction
    -                DIR: u1,
    -                ///  Circular mode enable
    -                CMEN: u1,
    -                ///  Next address generation algorithm of peripheral
    -                PNAGA: u1,
    -                ///  Next address generation algorithm of memory
    -                MNAGA: u1,
    -                ///  Transfer data size of peripheral
    -                PWIDTH: u2,
    -                ///  Transfer data size of memory
    -                MWIDTH: u2,
    -                ///  Priority level
    -                PRIO: u2,
    -                ///  Memory to Memory Mode
    -                M2M: u1,
    -                padding: u17,
    -            }),
    -            ///  Channel 3 counter register
    -            CH3CNT: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer counter
    -                CNT: u16,
    -                padding: u16,
    -            }),
    -            ///  Channel 3 peripheral base address register
    -            CH3PADDR: mmio.Mmio(packed struct(u32) {
    -                ///  Peripheral base address
    -                PADDR: u32,
    -            }),
    -            ///  Channel 3 memory base address register
    -            CH3MADDR: mmio.Mmio(packed struct(u32) {
    -                ///  Memory base address
    -                MADDR: u32,
    -            }),
    -            reserved88: [4]u8,
    -            ///  Channel 4 control register
    -            CH4CTL: mmio.Mmio(packed struct(u32) {
    -                ///  Channel enable
    -                CHEN: u1,
    -                ///  Enable bit for channel full transfer finish interrupt
    -                FTFIE: u1,
    -                ///  Enable bit for channel half transfer finish interrupt
    -                HTFIE: u1,
    -                ///  Enable bit for channel error interrupt
    -                ERRIE: u1,
    -                ///  Transfer direction
    -                DIR: u1,
    -                ///  Circular mode enable
    -                CMEN: u1,
    -                ///  Next address generation algorithm of peripheral
    -                PNAGA: u1,
    -                ///  Next address generation algorithm of memory
    -                MNAGA: u1,
    -                ///  Transfer data size of peripheral
    -                PWIDTH: u2,
    -                ///  Transfer data size of memory
    -                MWIDTH: u2,
    -                ///  Priority level
    -                PRIO: u2,
    -                ///  Memory to Memory Mode
    -                M2M: u1,
    -                padding: u17,
    -            }),
    -            ///  Channel 4 counter register
    -            CH4CNT: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer counter
    -                CNT: u16,
    -                padding: u16,
    -            }),
    -            ///  Channel 4 peripheral base address register
    -            CH4PADDR: mmio.Mmio(packed struct(u32) {
    -                ///  Peripheral base address
    -                PADDR: u32,
    -            }),
    -            ///  Channel 4 memory base address register
    -            CH4MADDR: mmio.Mmio(packed struct(u32) {
    -                ///  Memory base address
    -                MADDR: u32,
    -            }),
    -        };
    -
    -        ///  External memory controller
    -        pub const EXMC = extern struct {
    -            ///  SRAM/NOR flash control register 0
    -            SNCTL0: mmio.Mmio(packed struct(u32) {
    -                ///  NOR bank enable
    -                NRBKEN: u1,
    -                ///  NOR bank memory address/data multiplexing
    -                NRMUX: u1,
    -                ///  NOR bank memory type
    -                NRTP: u2,
    -                ///  NOR bank memory data bus width
    -                NRW: u2,
    -                ///  NOR Flash access enable
    -                NREN: u1,
    -                reserved9: u2,
    -                ///  NWAIT signal polarity
    -                NRWTPOL: u1,
    -                reserved12: u2,
    -                ///  Write enable
    -                WREN: u1,
    -                ///  NWAIT signal enable
    -                NRWTEN: u1,
    -                reserved15: u1,
    -                ///  Asynchronous wait
    -                ASYNCWAIT: u1,
    -                padding: u16,
    -            }),
    -            ///  SRAM/NOR flash timing configuration register 0
    -            SNTCFG0: mmio.Mmio(packed struct(u32) {
    -                ///  Address setup time
    -                ASET: u4,
    -                ///  Address hold time
    -                AHLD: u4,
    -                ///  Data setup time
    -                DSET: u8,
    -                ///  Bus latency
    -                BUSLAT: u4,
    -                padding: u12,
    -            }),
    -            ///  SRAM/NOR flash control register 1
    -            SNCTL1: mmio.Mmio(packed struct(u32) {
    -                ///  NOR bank enable
    -                NRBKEN: u1,
    -                ///  NOR bank memory address/data multiplexing
    -                NRMUX: u1,
    -                ///  NOR bank memory type
    -                NRTP: u2,
    -                ///  NOR bank memory data bus width
    -                NRW: u2,
    -                ///  NOR Flash access enable
    -                NREN: u1,
    -                reserved9: u2,
    -                ///  NWAIT signal polarity
    -                NRWTPOL: u1,
    -                reserved12: u2,
    -                ///  Write enable
    -                WREN: u1,
    -                ///  NWAIT signal enable
    -                NRWTEN: u1,
    -                reserved15: u1,
    -                ///  Asynchronous wait
    -                ASYNCWAIT: u1,
    -                padding: u16,
    -            }),
    -        };
    -
    -        ///  External interrupt/event controller
    -        pub const EXTI = extern struct {
    -            ///  Interrupt enable register (EXTI_INTEN)
    -            INTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable Interrupt on line 0
    -                INTEN0: u1,
    -                ///  Enable Interrupt on line 1
    -                INTEN1: u1,
    -                ///  Enable Interrupt on line 2
    -                INTEN2: u1,
    -                ///  Enable Interrupt on line 3
    -                INTEN3: u1,
    -                ///  Enable Interrupt on line 4
    -                INTEN4: u1,
    -                ///  Enable Interrupt on line 5
    -                INTEN5: u1,
    -                ///  Enable Interrupt on line 6
    -                INTEN6: u1,
    -                ///  Enable Interrupt on line 7
    -                INTEN7: u1,
    -                ///  Enable Interrupt on line 8
    -                INTEN8: u1,
    -                ///  Enable Interrupt on line 9
    -                INTEN9: u1,
    -                ///  Enable Interrupt on line 10
    -                INTEN10: u1,
    -                ///  Enable Interrupt on line 11
    -                INTEN11: u1,
    -                ///  Enable Interrupt on line 12
    -                INTEN12: u1,
    -                ///  Enable Interrupt on line 13
    -                INTEN13: u1,
    -                ///  Enable Interrupt on line 14
    -                INTEN14: u1,
    -                ///  Enable Interrupt on line 15
    -                INTEN15: u1,
    -                ///  Enable Interrupt on line 16
    -                INTEN16: u1,
    -                ///  Enable Interrupt on line 17
    -                INTEN17: u1,
    -                ///  Enable Interrupt on line 18
    -                INTEN18: u1,
    -                padding: u13,
    -            }),
    -            ///  Event enable register (EXTI_EVEN)
    -            EVEN: mmio.Mmio(packed struct(u32) {
    -                ///  Enable Event on line 0
    -                EVEN0: u1,
    -                ///  Enable Event on line 1
    -                EVEN1: u1,
    -                ///  Enable Event on line 2
    -                EVEN2: u1,
    -                ///  Enable Event on line 3
    -                EVEN3: u1,
    -                ///  Enable Event on line 4
    -                EVEN4: u1,
    -                ///  Enable Event on line 5
    -                EVEN5: u1,
    -                ///  Enable Event on line 6
    -                EVEN6: u1,
    -                ///  Enable Event on line 7
    -                EVEN7: u1,
    -                ///  Enable Event on line 8
    -                EVEN8: u1,
    -                ///  Enable Event on line 9
    -                EVEN9: u1,
    -                ///  Enable Event on line 10
    -                EVEN10: u1,
    -                ///  Enable Event on line 11
    -                EVEN11: u1,
    -                ///  Enable Event on line 12
    -                EVEN12: u1,
    -                ///  Enable Event on line 13
    -                EVEN13: u1,
    -                ///  Enable Event on line 14
    -                EVEN14: u1,
    -                ///  Enable Event on line 15
    -                EVEN15: u1,
    -                ///  Enable Event on line 16
    -                EVEN16: u1,
    -                ///  Enable Event on line 17
    -                EVEN17: u1,
    -                ///  Enable Event on line 18
    -                EVEN18: u1,
    -                padding: u13,
    -            }),
    -            ///  Rising Edge Trigger Enable register (EXTI_RTEN)
    -            RTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Rising edge trigger enable of line 0
    -                RTEN0: u1,
    -                ///  Rising edge trigger enable of line 1
    -                RTEN1: u1,
    -                ///  Rising edge trigger enable of line 2
    -                RTEN2: u1,
    -                ///  Rising edge trigger enable of line 3
    -                RTEN3: u1,
    -                ///  Rising edge trigger enable of line 4
    -                RTEN4: u1,
    -                ///  Rising edge trigger enable of line 5
    -                RTEN5: u1,
    -                ///  Rising edge trigger enable of line 6
    -                RTEN6: u1,
    -                ///  Rising edge trigger enable of line 7
    -                RTEN7: u1,
    -                ///  Rising edge trigger enable of line 8
    -                RTEN8: u1,
    -                ///  Rising edge trigger enable of line 9
    -                RTEN9: u1,
    -                ///  Rising edge trigger enable of line 10
    -                RTEN10: u1,
    -                ///  Rising edge trigger enable of line 11
    -                RTEN11: u1,
    -                ///  Rising edge trigger enable of line 12
    -                RTEN12: u1,
    -                ///  Rising edge trigger enable of line 13
    -                RTEN13: u1,
    -                ///  Rising edge trigger enable of line 14
    -                RTEN14: u1,
    -                ///  Rising edge trigger enable of line 15
    -                RTEN15: u1,
    -                ///  Rising edge trigger enable of line 16
    -                RTEN16: u1,
    -                ///  Rising edge trigger enable of line 17
    -                RTEN17: u1,
    -                ///  Rising edge trigger enable of line 18
    -                RTEN18: u1,
    -                padding: u13,
    -            }),
    -            ///  Falling Egde Trigger Enable register (EXTI_FTEN)
    -            FTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Falling edge trigger enable of line 0
    -                FTEN0: u1,
    -                ///  Falling edge trigger enable of line 1
    -                FTEN1: u1,
    -                ///  Falling edge trigger enable of line 2
    -                FTEN2: u1,
    -                ///  Falling edge trigger enable of line 3
    -                FTEN3: u1,
    -                ///  Falling edge trigger enable of line 4
    -                FTEN4: u1,
    -                ///  Falling edge trigger enable of line 5
    -                FTEN5: u1,
    -                ///  Falling edge trigger enable of line 6
    -                FTEN6: u1,
    -                ///  Falling edge trigger enable of line 7
    -                FTEN7: u1,
    -                ///  Falling edge trigger enable of line 8
    -                FTEN8: u1,
    -                ///  Falling edge trigger enable of line 9
    -                FTEN9: u1,
    -                ///  Falling edge trigger enable of line 10
    -                FTEN10: u1,
    -                ///  Falling edge trigger enable of line 11
    -                FTEN11: u1,
    -                ///  Falling edge trigger enable of line 12
    -                FTEN12: u1,
    -                ///  Falling edge trigger enable of line 13
    -                FTEN13: u1,
    -                ///  Falling edge trigger enable of line 14
    -                FTEN14: u1,
    -                ///  Falling edge trigger enable of line 15
    -                FTEN15: u1,
    -                ///  Falling edge trigger enable of line 16
    -                FTEN16: u1,
    -                ///  Falling edge trigger enable of line 17
    -                FTEN17: u1,
    -                ///  Falling edge trigger enable of line 18
    -                FTEN18: u1,
    -                padding: u13,
    -            }),
    -            ///  Software interrupt event register (EXTI_SWIEV)
    -            SWIEV: mmio.Mmio(packed struct(u32) {
    -                ///  Interrupt/Event software trigger on line 0
    -                SWIEV0: u1,
    -                ///  Interrupt/Event software trigger on line 1
    -                SWIEV1: u1,
    -                ///  Interrupt/Event software trigger on line 2
    -                SWIEV2: u1,
    -                ///  Interrupt/Event software trigger on line 3
    -                SWIEV3: u1,
    -                ///  Interrupt/Event software trigger on line 4
    -                SWIEV4: u1,
    -                ///  Interrupt/Event software trigger on line 5
    -                SWIEV5: u1,
    -                ///  Interrupt/Event software trigger on line 6
    -                SWIEV6: u1,
    -                ///  Interrupt/Event software trigger on line 7
    -                SWIEV7: u1,
    -                ///  Interrupt/Event software trigger on line 8
    -                SWIEV8: u1,
    -                ///  Interrupt/Event software trigger on line 9
    -                SWIEV9: u1,
    -                ///  Interrupt/Event software trigger on line 10
    -                SWIEV10: u1,
    -                ///  Interrupt/Event software trigger on line 11
    -                SWIEV11: u1,
    -                ///  Interrupt/Event software trigger on line 12
    -                SWIEV12: u1,
    -                ///  Interrupt/Event software trigger on line 13
    -                SWIEV13: u1,
    -                ///  Interrupt/Event software trigger on line 14
    -                SWIEV14: u1,
    -                ///  Interrupt/Event software trigger on line 15
    -                SWIEV15: u1,
    -                ///  Interrupt/Event software trigger on line 16
    -                SWIEV16: u1,
    -                ///  Interrupt/Event software trigger on line 17
    -                SWIEV17: u1,
    -                ///  Interrupt/Event software trigger on line 18
    -                SWIEV18: u1,
    -                padding: u13,
    -            }),
    -            ///  Pending register (EXTI_PD)
    -            PD: mmio.Mmio(packed struct(u32) {
    -                ///  Interrupt pending status of line 0
    -                PD0: u1,
    -                ///  Interrupt pending status of line 1
    -                PD1: u1,
    -                ///  Interrupt pending status of line 2
    -                PD2: u1,
    -                ///  Interrupt pending status of line 3
    -                PD3: u1,
    -                ///  Interrupt pending status of line 4
    -                PD4: u1,
    -                ///  Interrupt pending status of line 5
    -                PD5: u1,
    -                ///  Interrupt pending status of line 6
    -                PD6: u1,
    -                ///  Interrupt pending status of line 7
    -                PD7: u1,
    -                ///  Interrupt pending status of line 8
    -                PD8: u1,
    -                ///  Interrupt pending status of line 9
    -                PD9: u1,
    -                ///  Interrupt pending status of line 10
    -                PD10: u1,
    -                ///  Interrupt pending status of line 11
    -                PD11: u1,
    -                ///  Interrupt pending status of line 12
    -                PD12: u1,
    -                ///  Interrupt pending status of line 13
    -                PD13: u1,
    -                ///  Interrupt pending status of line 14
    -                PD14: u1,
    -                ///  Interrupt pending status of line 15
    -                PD15: u1,
    -                ///  Interrupt pending status of line 16
    -                PD16: u1,
    -                ///  Interrupt pending status of line 17
    -                PD17: u1,
    -                ///  Interrupt pending status of line 18
    -                PD18: u1,
    -                padding: u13,
    -            }),
    -        };
    -
    -        ///  FMC
    -        pub const FMC = extern struct {
    -            ///  wait state counter register
    -            WS: mmio.Mmio(packed struct(u32) {
    -                ///  wait state counter register
    -                WSCNT: u3,
    -                padding: u29,
    -            }),
    -            ///  Unlock key register 0
    -            KEY0: mmio.Mmio(packed struct(u32) {
    -                ///  FMC_CTL0 unlock key
    -                KEY: u32,
    -            }),
    -            ///  Option byte unlock key register
    -            OBKEY: mmio.Mmio(packed struct(u32) {
    -                ///  FMC_ CTL0 option byte operation unlock register
    -                OBKEY: u32,
    -            }),
    -            ///  Status register 0
    -            STAT0: mmio.Mmio(packed struct(u32) {
    -                ///  The flash is busy bit
    -                BUSY: u1,
    -                reserved2: u1,
    -                ///  Program error flag bit
    -                PGERR: u1,
    -                reserved4: u1,
    -                ///  Erase/Program protection error flag bit
    -                WPERR: u1,
    -                ///  End of operation flag bit
    -                ENDF: u1,
    -                padding: u26,
    -            }),
    -            ///  Control register 0
    -            CTL0: mmio.Mmio(packed struct(u32) {
    -                ///  Main flash program for bank0 command bit
    -                PG: u1,
    -                ///  Main flash page erase for bank0 command bit
    -                PER: u1,
    -                ///  Main flash mass erase for bank0 command bit
    -                MER: u1,
    -                reserved4: u1,
    -                ///  Option bytes program command bit
    -                OBPG: u1,
    -                ///  Option bytes erase command bit
    -                OBER: u1,
    -                ///  Send erase command to FMC bit
    -                START: u1,
    -                ///  FMC_CTL0 lock bit
    -                LK: u1,
    -                reserved9: u1,
    -                ///  Option byte erase/program enable bit
    -                OBWEN: u1,
    -                ///  Error interrupt enable bit
    -                ERRIE: u1,
    -                reserved12: u1,
    -                ///  End of operation interrupt enable bit
    -                ENDIE: u1,
    -                padding: u19,
    -            }),
    -            ///  Address register 0
    -            ADDR0: mmio.Mmio(packed struct(u32) {
    -                ///  Flash erase/program command address bits
    -                ADDR: u32,
    -            }),
    -            reserved28: [4]u8,
    -            ///  Option byte status register
    -            OBSTAT: mmio.Mmio(packed struct(u32) {
    -                ///  Option bytes read error bit
    -                OBERR: u1,
    -                ///  Option bytes security protection code
    -                SPC: u1,
    -                ///  Store USER of option bytes block after system reset
    -                USER: u8,
    -                ///  Store DATA[15:0] of option bytes block after system reset
    -                DATA: u16,
    -                padding: u6,
    -            }),
    -            ///  Erase/Program Protection register
    -            WP: mmio.Mmio(packed struct(u32) {
    -                ///  Store WP[31:0] of option bytes block after system reset
    -                WP: u32,
    -            }),
    -            reserved256: [220]u8,
    -            ///  Product ID register
    -            PID: mmio.Mmio(packed struct(u32) {
    -                ///  Product reserved ID code register
    -                PID: u32,
    -            }),
    -        };
    -
    -        ///  free watchdog timer
    -        pub const FWDGT = extern struct {
    -            ///  Control register
    -            CTL: mmio.Mmio(packed struct(u32) {
    -                ///  Key value
    -                CMD: u16,
    -                padding: u16,
    -            }),
    -            ///  Prescaler register
    -            PSC: mmio.Mmio(packed struct(u32) {
    -                ///  Free watchdog timer prescaler selection
    -                PSC: u3,
    -                padding: u29,
    -            }),
    -            ///  Reload register
    -            RLD: mmio.Mmio(packed struct(u32) {
    -                ///  Free watchdog timer counter reload value
    -                RLD: u12,
    -                padding: u20,
    -            }),
    -            ///  Status register
    -            STAT: mmio.Mmio(packed struct(u32) {
    -                ///  Free watchdog timer prescaler value update
    -                PUD: u1,
    -                ///  Free watchdog timer counter reload value update
    -                RUD: u1,
    -                padding: u30,
    -            }),
    -        };
    -
    -        ///  General-purpose I/Os
    -        pub const GPIOA = extern struct {
    -            ///  port control register 0
    -            CTL0: mmio.Mmio(packed struct(u32) {
    -                ///  Port x mode bits (x = 0)
    -                MD0: u2,
    -                ///  Port x configuration bits (x = 0)
    -                CTL0: u2,
    -                ///  Port x mode bits (x = 1)
    -                MD1: u2,
    -                ///  Port x configuration bits (x = 1)
    -                CTL1: u2,
    -                ///  Port x mode bits (x = 2 )
    -                MD2: u2,
    -                ///  Port x configuration bits (x = 2)
    -                CTL2: u2,
    -                ///  Port x mode bits (x = 3 )
    -                MD3: u2,
    -                ///  Port x configuration bits (x = 3)
    -                CTL3: u2,
    -                ///  Port x mode bits (x = 4)
    -                MD4: u2,
    -                ///  Port x configuration bits (x = 4)
    -                CTL4: u2,
    -                ///  Port x mode bits (x = 5)
    -                MD5: u2,
    -                ///  Port x configuration bits (x = 5)
    -                CTL5: u2,
    -                ///  Port x mode bits (x = 6)
    -                MD6: u2,
    -                ///  Port x configuration bits (x = 6)
    -                CTL6: u2,
    -                ///  Port x mode bits (x = 7)
    -                MD7: u2,
    -                ///  Port x configuration bits (x = 7)
    -                CTL7: u2,
    -            }),
    -            ///  port control register 1
    -            CTL1: mmio.Mmio(packed struct(u32) {
    -                ///  Port x mode bits (x = 8)
    -                MD8: u2,
    -                ///  Port x configuration bits (x = 8)
    -                CTL8: u2,
    -                ///  Port x mode bits (x = 9)
    -                MD9: u2,
    -                ///  Port x configuration bits (x = 9)
    -                CTL9: u2,
    -                ///  Port x mode bits (x = 10 )
    -                MD10: u2,
    -                ///  Port x configuration bits (x = 10)
    -                CTL10: u2,
    -                ///  Port x mode bits (x = 11 )
    -                MD11: u2,
    -                ///  Port x configuration bits (x = 11)
    -                CTL11: u2,
    -                ///  Port x mode bits (x = 12)
    -                MD12: u2,
    -                ///  Port x configuration bits (x = 12)
    -                CTL12: u2,
    -                ///  Port x mode bits (x = 13)
    -                MD13: u2,
    -                ///  Port x configuration bits (x = 13)
    -                CTL13: u2,
    -                ///  Port x mode bits (x = 14)
    -                MD14: u2,
    -                ///  Port x configuration bits (x = 14)
    -                CTL14: u2,
    -                ///  Port x mode bits (x = 15)
    -                MD15: u2,
    -                ///  Port x configuration bits (x = 15)
    -                CTL15: u2,
    -            }),
    -            ///  Port input status register
    -            ISTAT: mmio.Mmio(packed struct(u32) {
    -                ///  Port input status
    -                ISTAT0: u1,
    -                ///  Port input status
    -                ISTAT1: u1,
    -                ///  Port input status
    -                ISTAT2: u1,
    -                ///  Port input status
    -                ISTAT3: u1,
    -                ///  Port input status
    -                ISTAT4: u1,
    -                ///  Port input status
    -                ISTAT5: u1,
    -                ///  Port input status
    -                ISTAT6: u1,
    -                ///  Port input status
    -                ISTAT7: u1,
    -                ///  Port input status
    -                ISTAT8: u1,
    -                ///  Port input status
    -                ISTAT9: u1,
    -                ///  Port input status
    -                ISTAT10: u1,
    -                ///  Port input status
    -                ISTAT11: u1,
    -                ///  Port input status
    -                ISTAT12: u1,
    -                ///  Port input status
    -                ISTAT13: u1,
    -                ///  Port input status
    -                ISTAT14: u1,
    -                ///  Port input status
    -                ISTAT15: u1,
    -                padding: u16,
    -            }),
    -            ///  Port output control register
    -            OCTL: mmio.Mmio(packed struct(u32) {
    -                ///  Port output control
    -                OCTL0: u1,
    -                ///  Port output control
    -                OCTL1: u1,
    -                ///  Port output control
    -                OCTL2: u1,
    -                ///  Port output control
    -                OCTL3: u1,
    -                ///  Port output control
    -                OCTL4: u1,
    -                ///  Port output control
    -                OCTL5: u1,
    -                ///  Port output control
    -                OCTL6: u1,
    -                ///  Port output control
    -                OCTL7: u1,
    -                ///  Port output control
    -                OCTL8: u1,
    -                ///  Port output control
    -                OCTL9: u1,
    -                ///  Port output control
    -                OCTL10: u1,
    -                ///  Port output control
    -                OCTL11: u1,
    -                ///  Port output control
    -                OCTL12: u1,
    -                ///  Port output control
    -                OCTL13: u1,
    -                ///  Port output control
    -                OCTL14: u1,
    -                ///  Port output control
    -                OCTL15: u1,
    -                padding: u16,
    -            }),
    -            ///  Port bit operate register
    -            BOP: mmio.Mmio(packed struct(u32) {
    -                ///  Port 0 Set bit
    -                BOP0: u1,
    -                ///  Port 1 Set bit
    -                BOP1: u1,
    -                ///  Port 2 Set bit
    -                BOP2: u1,
    -                ///  Port 3 Set bit
    -                BOP3: u1,
    -                ///  Port 4 Set bit
    -                BOP4: u1,
    -                ///  Port 5 Set bit
    -                BOP5: u1,
    -                ///  Port 6 Set bit
    -                BOP6: u1,
    -                ///  Port 7 Set bit
    -                BOP7: u1,
    -                ///  Port 8 Set bit
    -                BOP8: u1,
    -                ///  Port 9 Set bit
    -                BOP9: u1,
    -                ///  Port 10 Set bit
    -                BOP10: u1,
    -                ///  Port 11 Set bit
    -                BOP11: u1,
    -                ///  Port 12 Set bit
    -                BOP12: u1,
    -                ///  Port 13 Set bit
    -                BOP13: u1,
    -                ///  Port 14 Set bit
    -                BOP14: u1,
    -                ///  Port 15 Set bit
    -                BOP15: u1,
    -                ///  Port 0 Clear bit
    -                CR0: u1,
    -                ///  Port 1 Clear bit
    -                CR1: u1,
    -                ///  Port 2 Clear bit
    -                CR2: u1,
    -                ///  Port 3 Clear bit
    -                CR3: u1,
    -                ///  Port 4 Clear bit
    -                CR4: u1,
    -                ///  Port 5 Clear bit
    -                CR5: u1,
    -                ///  Port 6 Clear bit
    -                CR6: u1,
    -                ///  Port 7 Clear bit
    -                CR7: u1,
    -                ///  Port 8 Clear bit
    -                CR8: u1,
    -                ///  Port 9 Clear bit
    -                CR9: u1,
    -                ///  Port 10 Clear bit
    -                CR10: u1,
    -                ///  Port 11 Clear bit
    -                CR11: u1,
    -                ///  Port 12 Clear bit
    -                CR12: u1,
    -                ///  Port 13 Clear bit
    -                CR13: u1,
    -                ///  Port 14 Clear bit
    -                CR14: u1,
    -                ///  Port 15 Clear bit
    -                CR15: u1,
    -            }),
    -            ///  Port bit clear register
    -            BC: mmio.Mmio(packed struct(u32) {
    -                ///  Port 0 Clear bit
    -                CR0: u1,
    -                ///  Port 1 Clear bit
    -                CR1: u1,
    -                ///  Port 2 Clear bit
    -                CR2: u1,
    -                ///  Port 3 Clear bit
    -                CR3: u1,
    -                ///  Port 4 Clear bit
    -                CR4: u1,
    -                ///  Port 5 Clear bit
    -                CR5: u1,
    -                ///  Port 6 Clear bit
    -                CR6: u1,
    -                ///  Port 7 Clear bit
    -                CR7: u1,
    -                ///  Port 8 Clear bit
    -                CR8: u1,
    -                ///  Port 9 Clear bit
    -                CR9: u1,
    -                ///  Port 10 Clear bit
    -                CR10: u1,
    -                ///  Port 11 Clear bit
    -                CR11: u1,
    -                ///  Port 12 Clear bit
    -                CR12: u1,
    -                ///  Port 13 Clear bit
    -                CR13: u1,
    -                ///  Port 14 Clear bit
    -                CR14: u1,
    -                ///  Port 15 Clear bit
    -                CR15: u1,
    -                padding: u16,
    -            }),
    -            ///  GPIO port configuration lock register
    -            LOCK: mmio.Mmio(packed struct(u32) {
    -                ///  Port Lock bit 0
    -                LK0: u1,
    -                ///  Port Lock bit 1
    -                LK1: u1,
    -                ///  Port Lock bit 2
    -                LK2: u1,
    -                ///  Port Lock bit 3
    -                LK3: u1,
    -                ///  Port Lock bit 4
    -                LK4: u1,
    -                ///  Port Lock bit 5
    -                LK5: u1,
    -                ///  Port Lock bit 6
    -                LK6: u1,
    -                ///  Port Lock bit 7
    -                LK7: u1,
    -                ///  Port Lock bit 8
    -                LK8: u1,
    -                ///  Port Lock bit 9
    -                LK9: u1,
    -                ///  Port Lock bit 10
    -                LK10: u1,
    -                ///  Port Lock bit 11
    -                LK11: u1,
    -                ///  Port Lock bit 12
    -                LK12: u1,
    -                ///  Port Lock bit 13
    -                LK13: u1,
    -                ///  Port Lock bit 14
    -                LK14: u1,
    -                ///  Port Lock bit 15
    -                LK15: u1,
    -                ///  Lock sequence key
    -                LKK: u1,
    -                padding: u15,
    -            }),
    -        };
    -
    -        ///  USB on the go full speed
    -        pub const USBFS_PWRCLK = extern struct {
    -            ///  power and clock gating control register (PWRCLKCTL)
    -            PWRCLKCTL: mmio.Mmio(packed struct(u32) {
    -                ///  Stop the USB clock
    -                SUCLK: u1,
    -                ///  Stop HCLK
    -                SHCLK: u1,
    -                padding: u30,
    -            }),
    -        };
    -
    -        ///  USB on the go full speed device
    -        pub const USBFS_DEVICE = extern struct {
    -            ///  device configuration register (DCFG)
    -            DCFG: mmio.Mmio(packed struct(u32) {
    -                ///  Device speed
    -                DS: u2,
    -                ///  Non-zero-length status OUT handshake
    -                NZLSOH: u1,
    -                reserved4: u1,
    -                ///  Device address
    -                DAR: u7,
    -                ///  end of periodic frame time
    -                EOPFT: u2,
    -                padding: u19,
    -            }),
    -            ///  device control register (DCTL)
    -            DCTL: mmio.Mmio(packed struct(u32) {
    -                ///  Remote wakeup
    -                RWKUP: u1,
    -                ///  Soft disconnect
    -                SD: u1,
    -                ///  Global IN NAK status
    -                GINS: u1,
    -                ///  Global OUT NAK status
    -                GONS: u1,
    -                reserved7: u3,
    -                ///  Set global IN NAK
    -                SGINAK: u1,
    -                ///  Clear global IN NAK
    -                CGINAK: u1,
    -                ///  Set global OUT NAK
    -                SGONAK: u1,
    -                ///  Clear global OUT NAK
    -                CGONAK: u1,
    -                ///  Power-on initialization flag
    -                POIF: u1,
    -                padding: u20,
    -            }),
    -            ///  device status register (DSTAT)
    -            DSTAT: mmio.Mmio(packed struct(u32) {
    -                ///  Suspend status
    -                SPST: u1,
    -                ///  Enumerated speed
    -                ES: u2,
    -                reserved8: u5,
    -                ///  Frame number of the received SOF
    -                FNRSOF: u14,
    -                padding: u10,
    -            }),
    -            reserved16: [4]u8,
    -            ///  device IN endpoint common interrupt mask register (DIEPINTEN)
    -            DIEPINTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer finished interrupt enable
    -                TFEN: u1,
    -                ///  Endpoint disabled interrupt enable
    -                EPDISEN: u1,
    -                reserved3: u1,
    -                ///  Control IN timeout condition interrupt enable (Non-isochronous endpoints)
    -                CITOEN: u1,
    -                ///  Endpoint Tx FIFO underrun interrupt enable bit
    -                EPTXFUDEN: u1,
    -                reserved6: u1,
    -                ///  IN endpoint NAK effective interrupt enable
    -                IEPNEEN: u1,
    -                padding: u25,
    -            }),
    -            ///  device OUT endpoint common interrupt enable register (DOEPINTEN)
    -            DOEPINTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer finished interrupt enable
    -                TFEN: u1,
    -                ///  Endpoint disabled interrupt enable
    -                EPDISEN: u1,
    -                reserved3: u1,
    -                ///  SETUP phase finished interrupt enable
    -                STPFEN: u1,
    -                ///  Endpoint Rx FIFO overrun interrupt enable
    -                EPRXFOVREN: u1,
    -                reserved6: u1,
    -                ///  Back-to-back SETUP packets interrupt enable
    -                BTBSTPEN: u1,
    -                padding: u25,
    -            }),
    -            ///  device all endpoints interrupt register (DAEPINT)
    -            DAEPINT: mmio.Mmio(packed struct(u32) {
    -                ///  Device all IN endpoint interrupt bits
    -                IEPITB: u4,
    -                reserved16: u12,
    -                ///  Device all OUT endpoint interrupt bits
    -                OEPITB: u4,
    -                padding: u12,
    -            }),
    -            ///  Device all endpoints interrupt enable register (DAEPINTEN)
    -            DAEPINTEN: mmio.Mmio(packed struct(u32) {
    -                ///  IN EP interrupt interrupt enable bits
    -                IEPIE: u4,
    -                reserved16: u12,
    -                ///  OUT endpoint interrupt enable bits
    -                OEPIE: u4,
    -                padding: u12,
    -            }),
    -            reserved40: [8]u8,
    -            ///  device VBUS discharge time register
    -            DVBUSDT: mmio.Mmio(packed struct(u32) {
    -                ///  Device VBUS discharge time
    -                DVBUSDT: u16,
    -                padding: u16,
    -            }),
    -            ///  device VBUS pulsing time register
    -            DVBUSPT: mmio.Mmio(packed struct(u32) {
    -                ///  Device VBUS pulsing time
    -                DVBUSPT: u12,
    -                padding: u20,
    -            }),
    -            reserved52: [4]u8,
    -            ///  device IN endpoint FIFO empty interrupt enable register
    -            DIEPFEINTEN: mmio.Mmio(packed struct(u32) {
    -                ///  IN EP Tx FIFO empty interrupt enable bits
    -                IEPTXFEIE: u4,
    -                padding: u28,
    -            }),
    -            reserved256: [200]u8,
    -            ///  device IN endpoint 0 control register (DIEP0CTL)
    -            DIEP0CTL: mmio.Mmio(packed struct(u32) {
    -                ///  Maximum packet length
    -                MPL: u2,
    -                reserved15: u13,
    -                ///  endpoint active
    -                EPACT: u1,
    -                reserved17: u1,
    -                ///  NAK status
    -                NAKS: u1,
    -                ///  Endpoint type
    -                EPTYPE: u2,
    -                reserved21: u1,
    -                ///  STALL handshake
    -                STALL: u1,
    -                ///  TxFIFO number
    -                TXFNUM: u4,
    -                ///  Clear NAK
    -                CNAK: u1,
    -                ///  Set NAK
    -                SNAK: u1,
    -                reserved30: u2,
    -                ///  Endpoint disable
    -                EPD: u1,
    -                ///  Endpoint enable
    -                EPEN: u1,
    -            }),
    -            reserved264: [4]u8,
    -            ///  device endpoint-0 interrupt register
    -            DIEP0INTF: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer finished
    -                TF: u1,
    -                ///  Endpoint finished
    -                EPDIS: u1,
    -                reserved3: u1,
    -                ///  Control in timeout interrupt
    -                CITO: u1,
    -                ///  Endpoint Tx FIFO underrun
    -                EPTXFUD: u1,
    -                reserved6: u1,
    -                ///  IN endpoint NAK effective
    -                IEPNE: u1,
    -                ///  Transmit FIFO empty
    -                TXFE: u1,
    -                padding: u24,
    -            }),
    -            reserved272: [4]u8,
    -            ///  device IN endpoint-0 transfer length register
    -            DIEP0LEN: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer length
    -                TLEN: u7,
    -                reserved19: u12,
    -                ///  Packet count
    -                PCNT: u2,
    -                padding: u11,
    -            }),
    -            reserved280: [4]u8,
    -            ///  device IN endpoint 0 transmit FIFO status register
    -            DIEP0TFSTAT: mmio.Mmio(packed struct(u32) {
    -                ///  IN endpoint TxFIFO space remaining
    -                IEPTFS: u16,
    -                padding: u16,
    -            }),
    -            reserved288: [4]u8,
    -            ///  device in endpoint-1 control register
    -            DIEP1CTL: mmio.Mmio(packed struct(u32) {
    -                ///  maximum packet length
    -                MPL: u11,
    -                reserved15: u4,
    -                ///  Endpoint active
    -                EPACT: u1,
    -                ///  EOFRM/DPID
    -                EOFRM_DPID: u1,
    -                ///  NAK status
    -                NAKS: u1,
    -                ///  Endpoint type
    -                EPTYPE: u2,
    -                reserved21: u1,
    -                ///  STALL handshake
    -                STALL: u1,
    -                ///  Tx FIFO number
    -                TXFNUM: u4,
    -                ///  Clear NAK
    -                CNAK: u1,
    -                ///  Set NAK
    -                SNAK: u1,
    -                ///  SD0PID/SEVNFRM
    -                SD0PID_SEVENFRM: u1,
    -                ///  Set DATA1 PID/Set odd frame
    -                SD1PID_SODDFRM: u1,
    -                ///  Endpoint disable
    -                EPD: u1,
    -                ///  Endpoint enable
    -                EPEN: u1,
    -            }),
    -            reserved296: [4]u8,
    -            ///  device endpoint-1 interrupt register
    -            DIEP1INTF: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer finished
    -                TF: u1,
    -                ///  Endpoint finished
    -                EPDIS: u1,
    -                reserved3: u1,
    -                ///  Control in timeout interrupt
    -                CITO: u1,
    -                ///  Endpoint Tx FIFO underrun
    -                EPTXFUD: u1,
    -                reserved6: u1,
    -                ///  IN endpoint NAK effective
    -                IEPNE: u1,
    -                ///  Transmit FIFO empty
    -                TXFE: u1,
    -                padding: u24,
    -            }),
    -            reserved304: [4]u8,
    -            ///  device IN endpoint-1 transfer length register
    -            DIEP1LEN: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer length
    -                TLEN: u19,
    -                ///  Packet count
    -                PCNT: u10,
    -                ///  Multi packet count per frame
    -                MCPF: u2,
    -                padding: u1,
    -            }),
    -            reserved312: [4]u8,
    -            ///  device IN endpoint 1 transmit FIFO status register
    -            DIEP1TFSTAT: mmio.Mmio(packed struct(u32) {
    -                ///  IN endpoint TxFIFO space remaining
    -                IEPTFS: u16,
    -                padding: u16,
    -            }),
    -            reserved320: [4]u8,
    -            ///  device endpoint-2 control register
    -            DIEP2CTL: mmio.Mmio(packed struct(u32) {
    -                ///  maximum packet length
    -                MPL: u11,
    -                reserved15: u4,
    -                ///  Endpoint active
    -                EPACT: u1,
    -                ///  EOFRM/DPID
    -                EOFRM_DPID: u1,
    -                ///  NAK status
    -                NAKS: u1,
    -                ///  Endpoint type
    -                EPTYPE: u2,
    -                reserved21: u1,
    -                ///  STALL handshake
    -                STALL: u1,
    -                ///  Tx FIFO number
    -                TXFNUM: u4,
    -                ///  Clear NAK
    -                CNAK: u1,
    -                ///  Set NAK
    -                SNAK: u1,
    -                ///  SD0PID/SEVNFRM
    -                SD0PID_SEVENFRM: u1,
    -                ///  Set DATA1 PID/Set odd frame
    -                SD1PID_SODDFRM: u1,
    -                ///  Endpoint disable
    -                EPD: u1,
    -                ///  Endpoint enable
    -                EPEN: u1,
    -            }),
    -            reserved328: [4]u8,
    -            ///  device endpoint-2 interrupt register
    -            DIEP2INTF: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer finished
    -                TF: u1,
    -                ///  Endpoint finished
    -                EPDIS: u1,
    -                reserved3: u1,
    -                ///  Control in timeout interrupt
    -                CITO: u1,
    -                ///  Endpoint Tx FIFO underrun
    -                EPTXFUD: u1,
    -                reserved6: u1,
    -                ///  IN endpoint NAK effective
    -                IEPNE: u1,
    -                ///  Transmit FIFO empty
    -                TXFE: u1,
    -                padding: u24,
    -            }),
    -            reserved336: [4]u8,
    -            ///  device IN endpoint-2 transfer length register
    -            DIEP2LEN: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer length
    -                TLEN: u19,
    -                ///  Packet count
    -                PCNT: u10,
    -                ///  Multi packet count per frame
    -                MCPF: u2,
    -                padding: u1,
    -            }),
    -            reserved344: [4]u8,
    -            ///  device IN endpoint 2 transmit FIFO status register
    -            DIEP2TFSTAT: mmio.Mmio(packed struct(u32) {
    -                ///  IN endpoint TxFIFO space remaining
    -                IEPTFS: u16,
    -                padding: u16,
    -            }),
    -            reserved352: [4]u8,
    -            ///  device endpoint-3 control register
    -            DIEP3CTL: mmio.Mmio(packed struct(u32) {
    -                ///  maximum packet length
    -                MPL: u11,
    -                reserved15: u4,
    -                ///  Endpoint active
    -                EPACT: u1,
    -                ///  EOFRM/DPID
    -                EOFRM_DPID: u1,
    -                ///  NAK status
    -                NAKS: u1,
    -                ///  Endpoint type
    -                EPTYPE: u2,
    -                reserved21: u1,
    -                ///  STALL handshake
    -                STALL: u1,
    -                ///  Tx FIFO number
    -                TXFNUM: u4,
    -                ///  Clear NAK
    -                CNAK: u1,
    -                ///  Set NAK
    -                SNAK: u1,
    -                ///  SD0PID/SEVNFRM
    -                SD0PID_SEVENFRM: u1,
    -                ///  Set DATA1 PID/Set odd frame
    -                SD1PID_SODDFRM: u1,
    -                ///  Endpoint disable
    -                EPD: u1,
    -                ///  Endpoint enable
    -                EPEN: u1,
    -            }),
    -            reserved360: [4]u8,
    -            ///  device endpoint-3 interrupt register
    -            DIEP3INTF: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer finished
    -                TF: u1,
    -                ///  Endpoint finished
    -                EPDIS: u1,
    -                reserved3: u1,
    -                ///  Control in timeout interrupt
    -                CITO: u1,
    -                ///  Endpoint Tx FIFO underrun
    -                EPTXFUD: u1,
    -                reserved6: u1,
    -                ///  IN endpoint NAK effective
    -                IEPNE: u1,
    -                ///  Transmit FIFO empty
    -                TXFE: u1,
    -                padding: u24,
    -            }),
    -            reserved368: [4]u8,
    -            ///  device IN endpoint-3 transfer length register
    -            DIEP3LEN: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer length
    -                TLEN: u19,
    -                ///  Packet count
    -                PCNT: u10,
    -                ///  Multi packet count per frame
    -                MCPF: u2,
    -                padding: u1,
    -            }),
    -            reserved376: [4]u8,
    -            ///  device IN endpoint 3 transmit FIFO status register
    -            DIEP3TFSTAT: mmio.Mmio(packed struct(u32) {
    -                ///  IN endpoint TxFIFO space remaining
    -                IEPTFS: u16,
    -                padding: u16,
    -            }),
    -            reserved768: [388]u8,
    -            ///  device endpoint-0 control register
    -            DOEP0CTL: mmio.Mmio(packed struct(u32) {
    -                ///  Maximum packet length
    -                MPL: u2,
    -                reserved15: u13,
    -                ///  Endpoint active
    -                EPACT: u1,
    -                reserved17: u1,
    -                ///  NAK status
    -                NAKS: u1,
    -                ///  Endpoint type
    -                EPTYPE: u2,
    -                ///  Snoop mode
    -                SNOOP: u1,
    -                ///  STALL handshake
    -                STALL: u1,
    -                reserved26: u4,
    -                ///  Clear NAK
    -                CNAK: u1,
    -                ///  Set NAK
    -                SNAK: u1,
    -                reserved30: u2,
    -                ///  Endpoint disable
    -                EPD: u1,
    -                ///  Endpoint enable
    -                EPEN: u1,
    -            }),
    -            reserved776: [4]u8,
    -            ///  device out endpoint-0 interrupt flag register
    -            DOEP0INTF: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer finished
    -                TF: u1,
    -                ///  Endpoint disabled
    -                EPDIS: u1,
    -                reserved3: u1,
    -                ///  Setup phase finished
    -                STPF: u1,
    -                ///  Endpoint Rx FIFO overrun
    -                EPRXFOVR: u1,
    -                reserved6: u1,
    -                ///  Back-to-back SETUP packets
    -                BTBSTP: u1,
    -                padding: u25,
    -            }),
    -            reserved784: [4]u8,
    -            ///  device OUT endpoint-0 transfer length register
    -            DOEP0LEN: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer length
    -                TLEN: u7,
    -                reserved19: u12,
    -                ///  Packet count
    -                PCNT: u1,
    -                reserved29: u9,
    -                ///  SETUP packet count
    -                STPCNT: u2,
    -                padding: u1,
    -            }),
    -            reserved800: [12]u8,
    -            ///  device endpoint-1 control register
    -            DOEP1CTL: mmio.Mmio(packed struct(u32) {
    -                ///  maximum packet length
    -                MPL: u11,
    -                reserved15: u4,
    -                ///  Endpoint active
    -                EPACT: u1,
    -                ///  EOFRM/DPID
    -                EOFRM_DPID: u1,
    -                ///  NAK status
    -                NAKS: u1,
    -                ///  Endpoint type
    -                EPTYPE: u2,
    -                ///  Snoop mode
    -                SNOOP: u1,
    -                ///  STALL handshake
    -                STALL: u1,
    -                reserved26: u4,
    -                ///  Clear NAK
    -                CNAK: u1,
    -                ///  Set NAK
    -                SNAK: u1,
    -                ///  SD0PID/SEVENFRM
    -                SD0PID_SEVENFRM: u1,
    -                ///  SD1PID/SODDFRM
    -                SD1PID_SODDFRM: u1,
    -                ///  Endpoint disable
    -                EPD: u1,
    -                ///  Endpoint enable
    -                EPEN: u1,
    -            }),
    -            reserved808: [4]u8,
    -            ///  device out endpoint-1 interrupt flag register
    -            DOEP1INTF: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer finished
    -                TF: u1,
    -                ///  Endpoint disabled
    -                EPDIS: u1,
    -                reserved3: u1,
    -                ///  Setup phase finished
    -                STPF: u1,
    -                ///  Endpoint Rx FIFO overrun
    -                EPRXFOVR: u1,
    -                reserved6: u1,
    -                ///  Back-to-back SETUP packets
    -                BTBSTP: u1,
    -                padding: u25,
    -            }),
    -            reserved816: [4]u8,
    -            ///  device OUT endpoint-1 transfer length register
    -            DOEP1LEN: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer length
    -                TLEN: u19,
    -                ///  Packet count
    -                PCNT: u10,
    -                ///  SETUP packet count/Received data PID
    -                STPCNT_RXDPID: u2,
    -                padding: u1,
    -            }),
    -            reserved832: [12]u8,
    -            ///  device endpoint-2 control register
    -            DOEP2CTL: mmio.Mmio(packed struct(u32) {
    -                ///  maximum packet length
    -                MPL: u11,
    -                reserved15: u4,
    -                ///  Endpoint active
    -                EPACT: u1,
    -                ///  EOFRM/DPID
    -                EOFRM_DPID: u1,
    -                ///  NAK status
    -                NAKS: u1,
    -                ///  Endpoint type
    -                EPTYPE: u2,
    -                ///  Snoop mode
    -                SNOOP: u1,
    -                ///  STALL handshake
    -                STALL: u1,
    -                reserved26: u4,
    -                ///  Clear NAK
    -                CNAK: u1,
    -                ///  Set NAK
    -                SNAK: u1,
    -                ///  SD0PID/SEVENFRM
    -                SD0PID_SEVENFRM: u1,
    -                ///  SD1PID/SODDFRM
    -                SD1PID_SODDFRM: u1,
    -                ///  Endpoint disable
    -                EPD: u1,
    -                ///  Endpoint enable
    -                EPEN: u1,
    -            }),
    -            reserved840: [4]u8,
    -            ///  device out endpoint-2 interrupt flag register
    -            DOEP2INTF: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer finished
    -                TF: u1,
    -                ///  Endpoint disabled
    -                EPDIS: u1,
    -                reserved3: u1,
    -                ///  Setup phase finished
    -                STPF: u1,
    -                ///  Endpoint Rx FIFO overrun
    -                EPRXFOVR: u1,
    -                reserved6: u1,
    -                ///  Back-to-back SETUP packets
    -                BTBSTP: u1,
    -                padding: u25,
    -            }),
    -            reserved848: [4]u8,
    -            ///  device OUT endpoint-2 transfer length register
    -            DOEP2LEN: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer length
    -                TLEN: u19,
    -                ///  Packet count
    -                PCNT: u10,
    -                ///  SETUP packet count/Received data PID
    -                STPCNT_RXDPID: u2,
    -                padding: u1,
    -            }),
    -            reserved864: [12]u8,
    -            ///  device endpoint-3 control register
    -            DOEP3CTL: mmio.Mmio(packed struct(u32) {
    -                ///  maximum packet length
    -                MPL: u11,
    -                reserved15: u4,
    -                ///  Endpoint active
    -                EPACT: u1,
    -                ///  EOFRM/DPID
    -                EOFRM_DPID: u1,
    -                ///  NAK status
    -                NAKS: u1,
    -                ///  Endpoint type
    -                EPTYPE: u2,
    -                ///  Snoop mode
    -                SNOOP: u1,
    -                ///  STALL handshake
    -                STALL: u1,
    -                reserved26: u4,
    -                ///  Clear NAK
    -                CNAK: u1,
    -                ///  Set NAK
    -                SNAK: u1,
    -                ///  SD0PID/SEVENFRM
    -                SD0PID_SEVENFRM: u1,
    -                ///  SD1PID/SODDFRM
    -                SD1PID_SODDFRM: u1,
    -                ///  Endpoint disable
    -                EPD: u1,
    -                ///  Endpoint enable
    -                EPEN: u1,
    -            }),
    -            reserved872: [4]u8,
    -            ///  device out endpoint-3 interrupt flag register
    -            DOEP3INTF: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer finished
    -                TF: u1,
    -                ///  Endpoint disabled
    -                EPDIS: u1,
    -                reserved3: u1,
    -                ///  Setup phase finished
    -                STPF: u1,
    -                ///  Endpoint Rx FIFO overrun
    -                EPRXFOVR: u1,
    -                reserved6: u1,
    -                ///  Back-to-back SETUP packets
    -                BTBSTP: u1,
    -                padding: u25,
    -            }),
    -            reserved880: [4]u8,
    -            ///  device OUT endpoint-3 transfer length register
    -            DOEP3LEN: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer length
    -                TLEN: u19,
    -                ///  Packet count
    -                PCNT: u10,
    -                ///  SETUP packet count/Received data PID
    -                STPCNT_RXDPID: u2,
    -                padding: u1,
    -            }),
    -        };
    -
    -        ///  USB on the go full speed host
    -        pub const USBFS_HOST = extern struct {
    -            ///  host configuration register (HCTL)
    -            HCTL: mmio.Mmio(packed struct(u32) {
    -                ///  clock select for USB clock
    -                CLKSEL: u2,
    -                padding: u30,
    -            }),
    -            ///  Host frame interval register
    -            HFT: mmio.Mmio(packed struct(u32) {
    -                ///  Frame interval
    -                FRI: u16,
    -                padding: u16,
    -            }),
    -            ///  FS host frame number/frame time remaining register (HFINFR)
    -            HFINFR: mmio.Mmio(packed struct(u32) {
    -                ///  Frame number
    -                FRNUM: u16,
    -                ///  Frame remaining time
    -                FRT: u16,
    -            }),
    -            reserved16: [4]u8,
    -            ///  Host periodic transmit FIFO/queue status register (HPTFQSTAT)
    -            HPTFQSTAT: mmio.Mmio(packed struct(u32) {
    -                ///  Periodic transmit data FIFO space available
    -                PTXFS: u16,
    -                ///  Periodic transmit request queue space available
    -                PTXREQS: u8,
    -                ///  Top of the periodic transmit request queue
    -                PTXREQT: u8,
    -            }),
    -            ///  Host all channels interrupt register
    -            HACHINT: mmio.Mmio(packed struct(u32) {
    -                ///  Host all channel interrupts
    -                HACHINT: u8,
    -                padding: u24,
    -            }),
    -            ///  host all channels interrupt mask register
    -            HACHINTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Channel interrupt enable
    -                CINTEN: u8,
    -                padding: u24,
    -            }),
    -            reserved64: [36]u8,
    -            ///  Host port control and status register (USBFS_HPCS)
    -            HPCS: mmio.Mmio(packed struct(u32) {
    -                ///  Port connect status
    -                PCST: u1,
    -                ///  Port connect detected
    -                PCD: u1,
    -                ///  Port enable
    -                PE: u1,
    -                ///  Port enable/disable change
    -                PEDC: u1,
    -                reserved6: u2,
    -                ///  Port resume
    -                PREM: u1,
    -                ///  Port suspend
    -                PSP: u1,
    -                ///  Port reset
    -                PRST: u1,
    -                reserved10: u1,
    -                ///  Port line status
    -                PLST: u2,
    -                ///  Port power
    -                PP: u1,
    -                reserved17: u4,
    -                ///  Port speed
    -                PS: u2,
    -                padding: u13,
    -            }),
    -            reserved256: [188]u8,
    -            ///  host channel-0 characteristics register (HCH0CTL)
    -            HCH0CTL: mmio.Mmio(packed struct(u32) {
    -                ///  Maximum packet size
    -                MPL: u11,
    -                ///  Endpoint number
    -                EPNUM: u4,
    -                ///  Endpoint direction
    -                EPDIR: u1,
    -                reserved17: u1,
    -                ///  Low-speed device
    -                LSD: u1,
    -                ///  Endpoint type
    -                EPTYPE: u2,
    -                reserved22: u2,
    -                ///  Device address
    -                DAR: u7,
    -                ///  Odd frame
    -                ODDFRM: u1,
    -                ///  Channel disable
    -                CDIS: u1,
    -                ///  Channel enable
    -                CEN: u1,
    -            }),
    -            reserved264: [4]u8,
    -            ///  host channel-0 interrupt register (USBFS_HCHxINTF)
    -            HCH0INTF: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer finished
    -                TF: u1,
    -                ///  Channel halted
    -                CH: u1,
    -                reserved3: u1,
    -                ///  STALL response received interrupt
    -                STALL: u1,
    -                ///  NAK response received interrupt
    -                NAK: u1,
    -                ///  ACK response received/transmitted interrupt
    -                ACK: u1,
    -                reserved7: u1,
    -                ///  USB bus error
    -                USBER: u1,
    -                ///  Babble error
    -                BBER: u1,
    -                ///  Request queue overrun
    -                REQOVR: u1,
    -                ///  Data toggle error
    -                DTER: u1,
    -                padding: u21,
    -            }),
    -            ///  host channel-0 interrupt enable register (HCH0INTEN)
    -            HCH0INTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer completed interrupt enable
    -                TFIE: u1,
    -                ///  Channel halted interrupt enable
    -                CHIE: u1,
    -                reserved3: u1,
    -                ///  STALL interrupt enable
    -                STALLIE: u1,
    -                ///  NAK interrupt enable
    -                NAKIE: u1,
    -                ///  ACK interrupt enable
    -                ACKIE: u1,
    -                reserved7: u1,
    -                ///  USB bus error interrupt enable
    -                USBERIE: u1,
    -                ///  Babble error interrupt enable
    -                BBERIE: u1,
    -                ///  request queue overrun interrupt enable
    -                REQOVRIE: u1,
    -                ///  Data toggle error interrupt enable
    -                DTERIE: u1,
    -                padding: u21,
    -            }),
    -            ///  host channel-0 transfer length register
    -            HCH0LEN: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer length
    -                TLEN: u19,
    -                ///  Packet count
    -                PCNT: u10,
    -                ///  Data PID
    -                DPID: u2,
    -                padding: u1,
    -            }),
    -            reserved288: [12]u8,
    -            ///  host channel-1 characteristics register (HCH1CTL)
    -            HCH1CTL: mmio.Mmio(packed struct(u32) {
    -                ///  Maximum packet size
    -                MPL: u11,
    -                ///  Endpoint number
    -                EPNUM: u4,
    -                ///  Endpoint direction
    -                EPDIR: u1,
    -                reserved17: u1,
    -                ///  Low-speed device
    -                LSD: u1,
    -                ///  Endpoint type
    -                EPTYPE: u2,
    -                reserved22: u2,
    -                ///  Device address
    -                DAR: u7,
    -                ///  Odd frame
    -                ODDFRM: u1,
    -                ///  Channel disable
    -                CDIS: u1,
    -                ///  Channel enable
    -                CEN: u1,
    -            }),
    -            reserved296: [4]u8,
    -            ///  host channel-1 interrupt register (HCH1INTF)
    -            HCH1INTF: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer finished
    -                TF: u1,
    -                ///  Channel halted
    -                CH: u1,
    -                reserved3: u1,
    -                ///  STALL response received interrupt
    -                STALL: u1,
    -                ///  NAK response received interrupt
    -                NAK: u1,
    -                ///  ACK response received/transmitted interrupt
    -                ACK: u1,
    -                reserved7: u1,
    -                ///  USB bus error
    -                USBER: u1,
    -                ///  Babble error
    -                BBER: u1,
    -                ///  Request queue overrun
    -                REQOVR: u1,
    -                ///  Data toggle error
    -                DTER: u1,
    -                padding: u21,
    -            }),
    -            ///  host channel-1 interrupt enable register (HCH1INTEN)
    -            HCH1INTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer completed interrupt enable
    -                TFIE: u1,
    -                ///  Channel halted interrupt enable
    -                CHIE: u1,
    -                reserved3: u1,
    -                ///  STALL interrupt enable
    -                STALLIE: u1,
    -                ///  NAK interrupt enable
    -                NAKIE: u1,
    -                ///  ACK interrupt enable
    -                ACKIE: u1,
    -                reserved7: u1,
    -                ///  USB bus error interrupt enable
    -                USBERIE: u1,
    -                ///  Babble error interrupt enable
    -                BBERIE: u1,
    -                ///  request queue overrun interrupt enable
    -                REQOVRIE: u1,
    -                ///  Data toggle error interrupt enable
    -                DTERIE: u1,
    -                padding: u21,
    -            }),
    -            ///  host channel-1 transfer length register
    -            HCH1LEN: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer length
    -                TLEN: u19,
    -                ///  Packet count
    -                PCNT: u10,
    -                ///  Data PID
    -                DPID: u2,
    -                padding: u1,
    -            }),
    -            reserved320: [12]u8,
    -            ///  host channel-2 characteristics register (HCH2CTL)
    -            HCH2CTL: mmio.Mmio(packed struct(u32) {
    -                ///  Maximum packet size
    -                MPL: u11,
    -                ///  Endpoint number
    -                EPNUM: u4,
    -                ///  Endpoint direction
    -                EPDIR: u1,
    -                reserved17: u1,
    -                ///  Low-speed device
    -                LSD: u1,
    -                ///  Endpoint type
    -                EPTYPE: u2,
    -                reserved22: u2,
    -                ///  Device address
    -                DAR: u7,
    -                ///  Odd frame
    -                ODDFRM: u1,
    -                ///  Channel disable
    -                CDIS: u1,
    -                ///  Channel enable
    -                CEN: u1,
    -            }),
    -            reserved328: [4]u8,
    -            ///  host channel-2 interrupt register (HCH2INTF)
    -            HCH2INTF: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer finished
    -                TF: u1,
    -                ///  Channel halted
    -                CH: u1,
    -                reserved3: u1,
    -                ///  STALL response received interrupt
    -                STALL: u1,
    -                ///  NAK response received interrupt
    -                NAK: u1,
    -                ///  ACK response received/transmitted interrupt
    -                ACK: u1,
    -                reserved7: u1,
    -                ///  USB bus error
    -                USBER: u1,
    -                ///  Babble error
    -                BBER: u1,
    -                ///  Request queue overrun
    -                REQOVR: u1,
    -                ///  Data toggle error
    -                DTER: u1,
    -                padding: u21,
    -            }),
    -            ///  host channel-2 interrupt enable register (HCH2INTEN)
    -            HCH2INTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer completed interrupt enable
    -                TFIE: u1,
    -                ///  Channel halted interrupt enable
    -                CHIE: u1,
    -                reserved3: u1,
    -                ///  STALL interrupt enable
    -                STALLIE: u1,
    -                ///  NAK interrupt enable
    -                NAKIE: u1,
    -                ///  ACK interrupt enable
    -                ACKIE: u1,
    -                reserved7: u1,
    -                ///  USB bus error interrupt enable
    -                USBERIE: u1,
    -                ///  Babble error interrupt enable
    -                BBERIE: u1,
    -                ///  request queue overrun interrupt enable
    -                REQOVRIE: u1,
    -                ///  Data toggle error interrupt enable
    -                DTERIE: u1,
    -                padding: u21,
    -            }),
    -            ///  host channel-2 transfer length register
    -            HCH2LEN: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer length
    -                TLEN: u19,
    -                ///  Packet count
    -                PCNT: u10,
    -                ///  Data PID
    -                DPID: u2,
    -                padding: u1,
    -            }),
    -            reserved352: [12]u8,
    -            ///  host channel-3 characteristics register (HCH3CTL)
    -            HCH3CTL: mmio.Mmio(packed struct(u32) {
    -                ///  Maximum packet size
    -                MPL: u11,
    -                ///  Endpoint number
    -                EPNUM: u4,
    -                ///  Endpoint direction
    -                EPDIR: u1,
    -                reserved17: u1,
    -                ///  Low-speed device
    -                LSD: u1,
    -                ///  Endpoint type
    -                EPTYPE: u2,
    -                reserved22: u2,
    -                ///  Device address
    -                DAR: u7,
    -                ///  Odd frame
    -                ODDFRM: u1,
    -                ///  Channel disable
    -                CDIS: u1,
    -                ///  Channel enable
    -                CEN: u1,
    -            }),
    -            reserved360: [4]u8,
    -            ///  host channel-3 interrupt register (HCH3INTF)
    -            HCH3INTF: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer finished
    -                TF: u1,
    -                ///  Channel halted
    -                CH: u1,
    -                reserved3: u1,
    -                ///  STALL response received interrupt
    -                STALL: u1,
    -                ///  NAK response received interrupt
    -                NAK: u1,
    -                ///  ACK response received/transmitted interrupt
    -                ACK: u1,
    -                reserved7: u1,
    -                ///  USB bus error
    -                USBER: u1,
    -                ///  Babble error
    -                BBER: u1,
    -                ///  Request queue overrun
    -                REQOVR: u1,
    -                ///  Data toggle error
    -                DTER: u1,
    -                padding: u21,
    -            }),
    -            ///  host channel-3 interrupt enable register (HCH3INTEN)
    -            HCH3INTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer completed interrupt enable
    -                TFIE: u1,
    -                ///  Channel halted interrupt enable
    -                CHIE: u1,
    -                reserved3: u1,
    -                ///  STALL interrupt enable
    -                STALLIE: u1,
    -                ///  NAK interrupt enable
    -                NAKIE: u1,
    -                ///  ACK interrupt enable
    -                ACKIE: u1,
    -                reserved7: u1,
    -                ///  USB bus error interrupt enable
    -                USBERIE: u1,
    -                ///  Babble error interrupt enable
    -                BBERIE: u1,
    -                ///  request queue overrun interrupt enable
    -                REQOVRIE: u1,
    -                ///  Data toggle error interrupt enable
    -                DTERIE: u1,
    -                padding: u21,
    -            }),
    -            ///  host channel-3 transfer length register
    -            HCH3LEN: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer length
    -                TLEN: u19,
    -                ///  Packet count
    -                PCNT: u10,
    -                ///  Data PID
    -                DPID: u2,
    -                padding: u1,
    -            }),
    -            reserved384: [12]u8,
    -            ///  host channel-4 characteristics register (HCH4CTL)
    -            HCH4CTL: mmio.Mmio(packed struct(u32) {
    -                ///  Maximum packet size
    -                MPL: u11,
    -                ///  Endpoint number
    -                EPNUM: u4,
    -                ///  Endpoint direction
    -                EPDIR: u1,
    -                reserved17: u1,
    -                ///  Low-speed device
    -                LSD: u1,
    -                ///  Endpoint type
    -                EPTYPE: u2,
    -                reserved22: u2,
    -                ///  Device address
    -                DAR: u7,
    -                ///  Odd frame
    -                ODDFRM: u1,
    -                ///  Channel disable
    -                CDIS: u1,
    -                ///  Channel enable
    -                CEN: u1,
    -            }),
    -            reserved392: [4]u8,
    -            ///  host channel-4 interrupt register (HCH4INTF)
    -            HCH4INTF: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer finished
    -                TF: u1,
    -                ///  Channel halted
    -                CH: u1,
    -                reserved3: u1,
    -                ///  STALL response received interrupt
    -                STALL: u1,
    -                ///  NAK response received interrupt
    -                NAK: u1,
    -                ///  ACK response received/transmitted interrupt
    -                ACK: u1,
    -                reserved7: u1,
    -                ///  USB bus error
    -                USBER: u1,
    -                ///  Babble error
    -                BBER: u1,
    -                ///  Request queue overrun
    -                REQOVR: u1,
    -                ///  Data toggle error
    -                DTER: u1,
    -                padding: u21,
    -            }),
    -            ///  host channel-4 interrupt enable register (HCH4INTEN)
    -            HCH4INTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer completed interrupt enable
    -                TFIE: u1,
    -                ///  Channel halted interrupt enable
    -                CHIE: u1,
    -                reserved3: u1,
    -                ///  STALL interrupt enable
    -                STALLIE: u1,
    -                ///  NAK interrupt enable
    -                NAKIE: u1,
    -                ///  ACK interrupt enable
    -                ACKIE: u1,
    -                reserved7: u1,
    -                ///  USB bus error interrupt enable
    -                USBERIE: u1,
    -                ///  Babble error interrupt enable
    -                BBERIE: u1,
    -                ///  request queue overrun interrupt enable
    -                REQOVRIE: u1,
    -                ///  Data toggle error interrupt enable
    -                DTERIE: u1,
    -                padding: u21,
    -            }),
    -            ///  host channel-4 transfer length register
    -            HCH4LEN: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer length
    -                TLEN: u19,
    -                ///  Packet count
    -                PCNT: u10,
    -                ///  Data PID
    -                DPID: u2,
    -                padding: u1,
    -            }),
    -            reserved416: [12]u8,
    -            ///  host channel-5 characteristics register (HCH5CTL)
    -            HCH5CTL: mmio.Mmio(packed struct(u32) {
    -                ///  Maximum packet size
    -                MPL: u11,
    -                ///  Endpoint number
    -                EPNUM: u4,
    -                ///  Endpoint direction
    -                EPDIR: u1,
    -                reserved17: u1,
    -                ///  Low-speed device
    -                LSD: u1,
    -                ///  Endpoint type
    -                EPTYPE: u2,
    -                reserved22: u2,
    -                ///  Device address
    -                DAR: u7,
    -                ///  Odd frame
    -                ODDFRM: u1,
    -                ///  Channel disable
    -                CDIS: u1,
    -                ///  Channel enable
    -                CEN: u1,
    -            }),
    -            reserved424: [4]u8,
    -            ///  host channel-5 interrupt register (HCH5INTF)
    -            HCH5INTF: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer finished
    -                TF: u1,
    -                ///  Channel halted
    -                CH: u1,
    -                reserved3: u1,
    -                ///  STALL response received interrupt
    -                STALL: u1,
    -                ///  NAK response received interrupt
    -                NAK: u1,
    -                ///  ACK response received/transmitted interrupt
    -                ACK: u1,
    -                reserved7: u1,
    -                ///  USB bus error
    -                USBER: u1,
    -                ///  Babble error
    -                BBER: u1,
    -                ///  Request queue overrun
    -                REQOVR: u1,
    -                ///  Data toggle error
    -                DTER: u1,
    -                padding: u21,
    -            }),
    -            ///  host channel-5 interrupt enable register (HCH5INTEN)
    -            HCH5INTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer completed interrupt enable
    -                TFIE: u1,
    -                ///  Channel halted interrupt enable
    -                CHIE: u1,
    -                reserved3: u1,
    -                ///  STALL interrupt enable
    -                STALLIE: u1,
    -                ///  NAK interrupt enable
    -                NAKIE: u1,
    -                ///  ACK interrupt enable
    -                ACKIE: u1,
    -                reserved7: u1,
    -                ///  USB bus error interrupt enable
    -                USBERIE: u1,
    -                ///  Babble error interrupt enable
    -                BBERIE: u1,
    -                ///  request queue overrun interrupt enable
    -                REQOVRIE: u1,
    -                ///  Data toggle error interrupt enable
    -                DTERIE: u1,
    -                padding: u21,
    -            }),
    -            ///  host channel-5 transfer length register
    -            HCH5LEN: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer length
    -                TLEN: u19,
    -                ///  Packet count
    -                PCNT: u10,
    -                ///  Data PID
    -                DPID: u2,
    -                padding: u1,
    -            }),
    -            reserved448: [12]u8,
    -            ///  host channel-6 characteristics register (HCH6CTL)
    -            HCH6CTL: mmio.Mmio(packed struct(u32) {
    -                ///  Maximum packet size
    -                MPL: u11,
    -                ///  Endpoint number
    -                EPNUM: u4,
    -                ///  Endpoint direction
    -                EPDIR: u1,
    -                reserved17: u1,
    -                ///  Low-speed device
    -                LSD: u1,
    -                ///  Endpoint type
    -                EPTYPE: u2,
    -                reserved22: u2,
    -                ///  Device address
    -                DAR: u7,
    -                ///  Odd frame
    -                ODDFRM: u1,
    -                ///  Channel disable
    -                CDIS: u1,
    -                ///  Channel enable
    -                CEN: u1,
    -            }),
    -            reserved456: [4]u8,
    -            ///  host channel-6 interrupt register (HCH6INTF)
    -            HCH6INTF: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer finished
    -                TF: u1,
    -                ///  Channel halted
    -                CH: u1,
    -                reserved3: u1,
    -                ///  STALL response received interrupt
    -                STALL: u1,
    -                ///  NAK response received interrupt
    -                NAK: u1,
    -                ///  ACK response received/transmitted interrupt
    -                ACK: u1,
    -                reserved7: u1,
    -                ///  USB bus error
    -                USBER: u1,
    -                ///  Babble error
    -                BBER: u1,
    -                ///  Request queue overrun
    -                REQOVR: u1,
    -                ///  Data toggle error
    -                DTER: u1,
    -                padding: u21,
    -            }),
    -            ///  host channel-6 interrupt enable register (HCH6INTEN)
    -            HCH6INTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer completed interrupt enable
    -                TFIE: u1,
    -                ///  Channel halted interrupt enable
    -                CHIE: u1,
    -                reserved3: u1,
    -                ///  STALL interrupt enable
    -                STALLIE: u1,
    -                ///  NAK interrupt enable
    -                NAKIE: u1,
    -                ///  ACK interrupt enable
    -                ACKIE: u1,
    -                reserved7: u1,
    -                ///  USB bus error interrupt enable
    -                USBERIE: u1,
    -                ///  Babble error interrupt enable
    -                BBERIE: u1,
    -                ///  request queue overrun interrupt enable
    -                REQOVRIE: u1,
    -                ///  Data toggle error interrupt enable
    -                DTERIE: u1,
    -                padding: u21,
    -            }),
    -            ///  host channel-6 transfer length register
    -            HCH6LEN: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer length
    -                TLEN: u19,
    -                ///  Packet count
    -                PCNT: u10,
    -                ///  Data PID
    -                DPID: u2,
    -                padding: u1,
    -            }),
    -            reserved480: [12]u8,
    -            ///  host channel-7 characteristics register (HCH7CTL)
    -            HCH7CTL: mmio.Mmio(packed struct(u32) {
    -                ///  Maximum packet size
    -                MPL: u11,
    -                ///  Endpoint number
    -                EPNUM: u4,
    -                ///  Endpoint direction
    -                EPDIR: u1,
    -                reserved17: u1,
    -                ///  Low-speed device
    -                LSD: u1,
    -                ///  Endpoint type
    -                EPTYPE: u2,
    -                reserved22: u2,
    -                ///  Device address
    -                DAR: u7,
    -                ///  Odd frame
    -                ODDFRM: u1,
    -                ///  Channel disable
    -                CDIS: u1,
    -                ///  Channel enable
    -                CEN: u1,
    -            }),
    -            reserved488: [4]u8,
    -            ///  host channel-7 interrupt register (HCH7INTF)
    -            HCH7INTF: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer finished
    -                TF: u1,
    -                ///  Channel halted
    -                CH: u1,
    -                reserved3: u1,
    -                ///  STALL response received interrupt
    -                STALL: u1,
    -                ///  NAK response received interrupt
    -                NAK: u1,
    -                ///  ACK response received/transmitted interrupt
    -                ACK: u1,
    -                reserved7: u1,
    -                ///  USB bus error
    -                USBER: u1,
    -                ///  Babble error
    -                BBER: u1,
    -                ///  Request queue overrun
    -                REQOVR: u1,
    -                ///  Data toggle error
    -                DTER: u1,
    -                padding: u21,
    -            }),
    -            ///  host channel-7 interrupt enable register (HCH7INTEN)
    -            HCH7INTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer completed interrupt enable
    -                TFIE: u1,
    -                ///  Channel halted interrupt enable
    -                CHIE: u1,
    -                reserved3: u1,
    -                ///  STALL interrupt enable
    -                STALLIE: u1,
    -                ///  NAK interrupt enable
    -                NAKIE: u1,
    -                ///  ACK interrupt enable
    -                ACKIE: u1,
    -                reserved7: u1,
    -                ///  USB bus error interrupt enable
    -                USBERIE: u1,
    -                ///  Babble error interrupt enable
    -                BBERIE: u1,
    -                ///  request queue overrun interrupt enable
    -                REQOVRIE: u1,
    -                ///  Data toggle error interrupt enable
    -                DTERIE: u1,
    -                padding: u21,
    -            }),
    -            ///  host channel-7 transfer length register
    -            HCH7LEN: mmio.Mmio(packed struct(u32) {
    -                ///  Transfer length
    -                TLEN: u19,
    -                ///  Packet count
    -                PCNT: u10,
    -                ///  Data PID
    -                DPID: u2,
    -                padding: u1,
    -            }),
    -        };
    -
    -        ///  USB full speed global registers
    -        pub const USBFS_GLOBAL = extern struct {
    -            ///  Global OTG control and status register (USBFS_GOTGCS)
    -            GOTGCS: mmio.Mmio(packed struct(u32) {
    -                ///  SRP success
    -                SRPS: u1,
    -                ///  SRP request
    -                SRPREQ: u1,
    -                reserved8: u6,
    -                ///  Host success
    -                HNPS: u1,
    -                ///  HNP request
    -                HNPREQ: u1,
    -                ///  Host HNP enable
    -                HHNPEN: u1,
    -                ///  Device HNP enabled
    -                DHNPEN: u1,
    -                reserved16: u4,
    -                ///  ID pin status
    -                IDPS: u1,
    -                ///  Debounce interval
    -                DI: u1,
    -                ///  A-session valid
    -                ASV: u1,
    -                ///  B-session valid
    -                BSV: u1,
    -                padding: u12,
    -            }),
    -            ///  Global OTG interrupt flag register (USBFS_GOTGINTF)
    -            GOTGINTF: mmio.Mmio(packed struct(u32) {
    -                reserved2: u2,
    -                ///  Session end
    -                SESEND: u1,
    -                reserved8: u5,
    -                ///  Session request success status change
    -                SRPEND: u1,
    -                ///  HNP end
    -                HNPEND: u1,
    -                reserved17: u7,
    -                ///  Host negotiation request detected
    -                HNPDET: u1,
    -                ///  A-device timeout
    -                ADTO: u1,
    -                ///  Debounce finish
    -                DF: u1,
    -                padding: u12,
    -            }),
    -            ///  Global AHB control and status register (USBFS_GAHBCS)
    -            GAHBCS: mmio.Mmio(packed struct(u32) {
    -                ///  Global interrupt enable
    -                GINTEN: u1,
    -                reserved7: u6,
    -                ///  Tx FIFO threshold
    -                TXFTH: u1,
    -                ///  Periodic Tx FIFO threshold
    -                PTXFTH: u1,
    -                padding: u23,
    -            }),
    -            ///  Global USB control and status register (USBFS_GUSBCSR)
    -            GUSBCS: mmio.Mmio(packed struct(u32) {
    -                ///  Timeout calibration
    -                TOC: u3,
    -                reserved8: u5,
    -                ///  SRP capability enable
    -                SRPCEN: u1,
    -                ///  HNP capability enable
    -                HNPCEN: u1,
    -                ///  USB turnaround time
    -                UTT: u4,
    -                reserved29: u15,
    -                ///  Force host mode
    -                FHM: u1,
    -                ///  Force device mode
    -                FDM: u1,
    -                padding: u1,
    -            }),
    -            ///  Global reset control register (USBFS_GRSTCTL)
    -            GRSTCTL: mmio.Mmio(packed struct(u32) {
    -                ///  Core soft reset
    -                CSRST: u1,
    -                ///  HCLK soft reset
    -                HCSRST: u1,
    -                ///  Host frame counter reset
    -                HFCRST: u1,
    -                reserved4: u1,
    -                ///  RxFIFO flush
    -                RXFF: u1,
    -                ///  TxFIFO flush
    -                TXFF: u1,
    -                ///  TxFIFO number
    -                TXFNUM: u5,
    -                padding: u21,
    -            }),
    -            ///  Global interrupt flag register (USBFS_GINTF)
    -            GINTF: mmio.Mmio(packed struct(u32) {
    -                ///  Current operation mode
    -                COPM: u1,
    -                ///  Mode fault interrupt flag
    -                MFIF: u1,
    -                ///  OTG interrupt flag
    -                OTGIF: u1,
    -                ///  Start of frame
    -                SOF: u1,
    -                ///  RxFIFO non-empty interrupt flag
    -                RXFNEIF: u1,
    -                ///  Non-periodic TxFIFO empty interrupt flag
    -                NPTXFEIF: u1,
    -                ///  Global Non-Periodic IN NAK effective
    -                GNPINAK: u1,
    -                ///  Global OUT NAK effective
    -                GONAK: u1,
    -                reserved10: u2,
    -                ///  Early suspend
    -                ESP: u1,
    -                ///  USB suspend
    -                SP: u1,
    -                ///  USB reset
    -                RST: u1,
    -                ///  Enumeration finished
    -                ENUMF: u1,
    -                ///  Isochronous OUT packet dropped interrupt
    -                ISOOPDIF: u1,
    -                ///  End of periodic frame interrupt flag
    -                EOPFIF: u1,
    -                reserved18: u2,
    -                ///  IN endpoint interrupt flag
    -                IEPIF: u1,
    -                ///  OUT endpoint interrupt flag
    -                OEPIF: u1,
    -                ///  Isochronous IN transfer Not Complete Interrupt Flag
    -                ISOINCIF: u1,
    -                ///  periodic transfer not complete interrupt flag(Host mode)/isochronous OUT transfer not complete interrupt flag(Device mode)
    -                PXNCIF_ISOONCIF: u1,
    -                reserved24: u2,
    -                ///  Host port interrupt flag
    -                HPIF: u1,
    -                ///  Host channels interrupt flag
    -                HCIF: u1,
    -                ///  Periodic TxFIFO empty interrupt flag
    -                PTXFEIF: u1,
    -                reserved28: u1,
    -                ///  ID pin status change
    -                IDPSC: u1,
    -                ///  Disconnect interrupt flag
    -                DISCIF: u1,
    -                ///  Session interrupt flag
    -                SESIF: u1,
    -                ///  Wakeup interrupt flag
    -                WKUPIF: u1,
    -            }),
    -            ///  Global interrupt enable register (USBFS_GINTEN)
    -            GINTEN: mmio.Mmio(packed struct(u32) {
    -                reserved1: u1,
    -                ///  Mode fault interrupt enable
    -                MFIE: u1,
    -                ///  OTG interrupt enable
    -                OTGIE: u1,
    -                ///  Start of frame interrupt enable
    -                SOFIE: u1,
    -                ///  Receive FIFO non-empty interrupt enable
    -                RXFNEIE: u1,
    -                ///  Non-periodic TxFIFO empty interrupt enable
    -                NPTXFEIE: u1,
    -                ///  Global non-periodic IN NAK effective interrupt enable
    -                GNPINAKIE: u1,
    -                ///  Global OUT NAK effective interrupt enable
    -                GONAKIE: u1,
    -                reserved10: u2,
    -                ///  Early suspend interrupt enable
    -                ESPIE: u1,
    -                ///  USB suspend interrupt enable
    -                SPIE: u1,
    -                ///  USB reset interrupt enable
    -                RSTIE: u1,
    -                ///  Enumeration finish interrupt enable
    -                ENUMFIE: u1,
    -                ///  Isochronous OUT packet dropped interrupt enable
    -                ISOOPDIE: u1,
    -                ///  End of periodic frame interrupt enable
    -                EOPFIE: u1,
    -                reserved18: u2,
    -                ///  IN endpoints interrupt enable
    -                IEPIE: u1,
    -                ///  OUT endpoints interrupt enable
    -                OEPIE: u1,
    -                ///  isochronous IN transfer not complete interrupt enable
    -                ISOINCIE: u1,
    -                ///  periodic transfer not compelete Interrupt enable(Host mode)/isochronous OUT transfer not complete interrupt enable(Device mode)
    -                PXNCIE_ISOONCIE: u1,
    -                reserved24: u2,
    -                ///  Host port interrupt enable
    -                HPIE: u1,
    -                ///  Host channels interrupt enable
    -                HCIE: u1,
    -                ///  Periodic TxFIFO empty interrupt enable
    -                PTXFEIE: u1,
    -                reserved28: u1,
    -                ///  ID pin status change interrupt enable
    -                IDPSCIE: u1,
    -                ///  Disconnect interrupt enable
    -                DISCIE: u1,
    -                ///  Session interrupt enable
    -                SESIE: u1,
    -                ///  Wakeup interrupt enable
    -                WKUPIE: u1,
    -            }),
    -            ///  Global Receive status read(Device mode)
    -            GRSTATR_Device: mmio.Mmio(packed struct(u32) {
    -                ///  Endpoint number
    -                EPNUM: u4,
    -                ///  Byte count
    -                BCOUNT: u11,
    -                ///  Data PID
    -                DPID: u2,
    -                ///  Recieve packet status
    -                RPCKST: u4,
    -                padding: u11,
    -            }),
    -            ///  Global Receive status pop(Device mode)
    -            GRSTATP_Device: mmio.Mmio(packed struct(u32) {
    -                ///  Endpoint number
    -                EPNUM: u4,
    -                ///  Byte count
    -                BCOUNT: u11,
    -                ///  Data PID
    -                DPID: u2,
    -                ///  Recieve packet status
    -                RPCKST: u4,
    -                padding: u11,
    -            }),
    -            ///  Global Receive FIFO size register (USBFS_GRFLEN)
    -            GRFLEN: mmio.Mmio(packed struct(u32) {
    -                ///  Rx FIFO depth
    -                RXFD: u16,
    -                padding: u16,
    -            }),
    -            ///  Host non-periodic transmit FIFO length register (Host mode)
    -            HNPTFLEN: mmio.Mmio(packed struct(u32) {
    -                ///  host non-periodic transmit Tx RAM start address
    -                HNPTXRSAR: u16,
    -                ///  host non-periodic TxFIFO depth
    -                HNPTXFD: u16,
    -            }),
    -            ///  Host non-periodic transmit FIFO/queue status register (HNPTFQSTAT)
    -            HNPTFQSTAT: mmio.Mmio(packed struct(u32) {
    -                ///  Non-periodic TxFIFO space
    -                NPTXFS: u16,
    -                ///  Non-periodic transmit request queue space
    -                NPTXRQS: u8,
    -                ///  Top of the non-periodic transmit request queue
    -                NPTXRQTOP: u7,
    -                padding: u1,
    -            }),
    -            reserved56: [8]u8,
    -            ///  Global core configuration register (USBFS_GCCFG)
    -            GCCFG: mmio.Mmio(packed struct(u32) {
    -                reserved16: u16,
    -                ///  Power on
    -                PWRON: u1,
    -                reserved18: u1,
    -                ///  The VBUS A-device Comparer enable
    -                VBUSACEN: u1,
    -                ///  The VBUS B-device Comparer enable
    -                VBUSBCEN: u1,
    -                ///  SOF output enable
    -                SOFOEN: u1,
    -                ///  VBUS ignored
    -                VBUSIG: u1,
    -                padding: u10,
    -            }),
    -            ///  core ID register
    -            CID: mmio.Mmio(packed struct(u32) {
    -                ///  Core ID
    -                CID: u32,
    -            }),
    -            reserved256: [192]u8,
    -            ///  Host periodic transmit FIFO length register (HPTFLEN)
    -            HPTFLEN: mmio.Mmio(packed struct(u32) {
    -                ///  Host periodic TxFIFO start address
    -                HPTXFSAR: u16,
    -                ///  Host periodic TxFIFO depth
    -                HPTXFD: u16,
    -            }),
    -            ///  device IN endpoint transmit FIFO size register (DIEP1TFLEN)
    -            DIEP1TFLEN: mmio.Mmio(packed struct(u32) {
    -                ///  IN endpoint FIFO transmit RAM start address
    -                IEPTXRSAR: u16,
    -                ///  IN endpoint TxFIFO depth
    -                IEPTXFD: u16,
    -            }),
    -            ///  device IN endpoint transmit FIFO size register (DIEP2TFLEN)
    -            DIEP2TFLEN: mmio.Mmio(packed struct(u32) {
    -                ///  IN endpoint FIFO transmit RAM start address
    -                IEPTXRSAR: u16,
    -                ///  IN endpoint TxFIFO depth
    -                IEPTXFD: u16,
    -            }),
    -            ///  device IN endpoint transmit FIFO size register (FS_DIEP3TXFLEN)
    -            DIEP3TFLEN: mmio.Mmio(packed struct(u32) {
    -                ///  IN endpoint FIFO4 transmit RAM start address
    -                IEPTXRSAR: u16,
    -                ///  IN endpoint TxFIFO depth
    -                IEPTXFD: u16,
    -            }),
    -        };
    -
    -        ///  Inter integrated circuit
    -        pub const I2C0 = extern struct {
    -            ///  Control register 0
    -            CTL0: mmio.Mmio(packed struct(u16) {
    -                ///  I2C peripheral enable
    -                I2CEN: u1,
    -                ///  SMBus/I2C mode switch
    -                SMBEN: u1,
    -                reserved3: u1,
    -                ///  SMBusType Selection
    -                SMBSEL: u1,
    -                ///  ARP protocol in SMBus switch
    -                ARPEN: u1,
    -                ///  PEC Calculation Switch
    -                PECEN: u1,
    -                ///  Whether or not to response to a General Call (0x00)
    -                GCEN: u1,
    -                ///  Whether to stretch SCL low when data is not ready in slave mode
    -                SS: u1,
    -                ///  Generate a START condition on I2C bus
    -                START: u1,
    -                ///  Generate a STOP condition on I2C bus
    -                STOP: u1,
    -                ///  Whether or not to send an ACK
    -                ACKEN: u1,
    -                ///  Position of ACK and PEC when receiving
    -                POAP: u1,
    -                ///  PEC Transfer
    -                PECTRANS: u1,
    -                ///  SMBus alert
    -                SALT: u1,
    -                reserved15: u1,
    -                ///  Software reset
    -                SRESET: u1,
    -            }),
    -            reserved4: [2]u8,
    -            ///  Control register 1
    -            CTL1: mmio.Mmio(packed struct(u16) {
    -                ///  I2C Peripheral clock frequency
    -                I2CCLK: u6,
    -                reserved8: u2,
    -                ///  Error interrupt enable
    -                ERRIE: u1,
    -                ///  Event interrupt enable
    -                EVIE: u1,
    -                ///  Buffer interrupt enable
    -                BUFIE: u1,
    -                ///  DMA mode switch
    -                DMAON: u1,
    -                ///  Flag indicating DMA last transfer
    -                DMALST: u1,
    -                padding: u3,
    -            }),
    -            reserved8: [2]u8,
    -            ///  Slave address register 0
    -            SADDR0: mmio.Mmio(packed struct(u16) {
    -                ///  Bit 0 of a 10-bit address
    -                ADDRESS0: u1,
    -                ///  7-bit address or bits 7:1 of a 10-bit address
    -                ADDRESS7_1: u7,
    -                ///  Highest two bits of a 10-bit address
    -                ADDRESS9_8: u2,
    -                reserved15: u5,
    -                ///  Address mode for the I2C slave
    -                ADDFORMAT: u1,
    -            }),
    -            reserved12: [2]u8,
    -            ///  Slave address register 1
    -            SADDR1: mmio.Mmio(packed struct(u16) {
    -                ///  Dual-Address mode switch
    -                DUADEN: u1,
    -                ///  Second I2C address for the slave in Dual-Address mode
    -                ADDRESS2: u7,
    -                padding: u8,
    -            }),
    -            reserved16: [2]u8,
    -            ///  Transfer buffer register
    -            DATA: mmio.Mmio(packed struct(u16) {
    -                ///  Transmission or reception data buffer register
    -                TRB: u8,
    -                padding: u8,
    -            }),
    -            reserved20: [2]u8,
    -            ///  Transfer status register 0
    -            STAT0: mmio.Mmio(packed struct(u16) {
    -                ///  START condition sent out in master mode
    -                SBSEND: u1,
    -                ///  Address is sent in master mode or received and matches in slave mode
    -                ADDSEND: u1,
    -                ///  Byte transmission completed
    -                BTC: u1,
    -                ///  Header of 10-bit address is sent in master mode
    -                ADD10SEND: u1,
    -                ///  STOP condition detected in slave mode
    -                STPDET: u1,
    -                reserved6: u1,
    -                ///  I2C_DATA is not Empty during receiving
    -                RBNE: u1,
    -                ///  I2C_DATA is Empty during transmitting
    -                TBE: u1,
    -                ///  A bus error occurs indication a unexpected START or STOP condition on I2C bus
    -                BERR: u1,
    -                ///  Arbitration Lost in master mode
    -                LOSTARB: u1,
    -                ///  Acknowledge error
    -                AERR: u1,
    -                ///  Over-run or under-run situation occurs in slave mode
    -                OUERR: u1,
    -                ///  PEC error when receiving data
    -                PECERR: u1,
    -                reserved14: u1,
    -                ///  Timeout signal in SMBus mode
    -                SMBTO: u1,
    -                ///  SMBus Alert status
    -                SMBALT: u1,
    -            }),
    -            reserved24: [2]u8,
    -            ///  Transfer status register 1
    -            STAT1: mmio.Mmio(packed struct(u16) {
    -                ///  A flag indicating whether I2C block is in master or slave mode
    -                MASTER: u1,
    -                ///  Busy flag
    -                I2CBSY: u1,
    -                ///  Whether the I2C is a transmitter or a receiver
    -                TR: u1,
    -                reserved4: u1,
    -                ///  General call address (00h) received
    -                RXGC: u1,
    -                ///  Default address of SMBusDevice
    -                DEFSMB: u1,
    -                ///  SMBus Host Header detected in slave mode
    -                HSTSMB: u1,
    -                ///  Dual Flag in slave mode
    -                DUMODF: u1,
    -                ///  Packet Error Checking Value that calculated by hardware when PEC is enabled
    -                PECV: u8,
    -            }),
    -            reserved28: [2]u8,
    -            ///  Clock configure register
    -            CKCFG: mmio.Mmio(packed struct(u16) {
    -                ///  I2C Clock control in master mode
    -                CLKC: u12,
    -                reserved14: u2,
    -                ///  Duty cycle in fast mode
    -                DTCY: u1,
    -                ///  I2C speed selection in master mode
    -                FAST: u1,
    -            }),
    -            reserved32: [2]u8,
    -            ///  Rise time register
    -            RT: mmio.Mmio(packed struct(u16) {
    -                ///  Maximum rise time in master mode
    -                RISETIME: u6,
    -                padding: u10,
    -            }),
    -        };
    -
    -        ///  Basic-timers
    -        pub const TIMER5 = extern struct {
    -            ///  control register 0
    -            CTL0: mmio.Mmio(packed struct(u16) {
    -                ///  Counter enable
    -                CEN: u1,
    -                ///  Update disable
    -                UPDIS: u1,
    -                ///  Update source
    -                UPS: u1,
    -                ///  Single pulse mode
    -                SPM: u1,
    -                reserved7: u3,
    -                ///  Auto-reload shadow enable
    -                ARSE: u1,
    -                padding: u8,
    -            }),
    -            reserved4: [2]u8,
    -            ///  control register 1
    -            CTL1: mmio.Mmio(packed struct(u16) {
    -                reserved4: u4,
    -                ///  Master mode control
    -                MMC: u3,
    -                padding: u9,
    -            }),
    -            reserved12: [6]u8,
    -            ///  DMA/Interrupt enable register
    -            DMAINTEN: mmio.Mmio(packed struct(u16) {
    -                ///  Update interrupt enable
    -                UPIE: u1,
    -                reserved8: u7,
    -                ///  Update DMA request enable
    -                UPDEN: u1,
    -                padding: u7,
    -            }),
    -            reserved16: [2]u8,
    -            ///  Interrupt flag register
    -            INTF: mmio.Mmio(packed struct(u16) {
    -                ///  Update interrupt flag
    -                UPIF: u1,
    -                padding: u15,
    -            }),
    -            reserved20: [2]u8,
    -            ///  event generation register
    -            SWEVG: mmio.Mmio(packed struct(u16) {
    -                ///  Update generation
    -                UPG: u1,
    -                padding: u15,
    -            }),
    -            reserved36: [14]u8,
    -            ///  Counter register
    -            CNT: mmio.Mmio(packed struct(u16) {
    -                ///  Low counter value
    -                CNT: u16,
    -            }),
    -            reserved40: [2]u8,
    -            ///  Prescaler register
    -            PSC: mmio.Mmio(packed struct(u16) {
    -                ///  Prescaler value of the counter clock
    -                PSC: u16,
    -            }),
    -            reserved44: [2]u8,
    -            ///  Counter auto reload register
    -            CAR: mmio.Mmio(packed struct(u16) {
    -                ///  Counter auto reload value
    -                CARL: u16,
    -            }),
    -        };
    -
    -        ///  Enhanced Core Local Interrupt Controller
    -        pub const ECLIC = extern struct {
    -            ///  cliccfg Register
    -            CLICCFG: mmio.Mmio(packed struct(u8) {
    -                reserved1: u1,
    -                ///  NLBITS
    -                NLBITS: u4,
    -                padding: u3,
    -            }),
    -            reserved4: [3]u8,
    -            ///  clicinfo Register
    -            CLICINFO: mmio.Mmio(packed struct(u32) {
    -                ///  NUM_INTERRUPT
    -                NUM_INTERRUPT: u13,
    -                ///  VERSION
    -                VERSION: u8,
    -                ///  CLICINTCTLBITS
    -                CLICINTCTLBITS: u4,
    -                padding: u7,
    -            }),
    -            reserved11: [3]u8,
    -            ///  MTH Register
    -            MTH: mmio.Mmio(packed struct(u8) {
    -                ///  MTH
    -                MTH: u8,
    -            }),
    -            reserved4096: [4084]u8,
    -            ///  clicintip Register
    -            CLICINTIP_0: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_0: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_0: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_0: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_1: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_1: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_1: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_1: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_2: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_2: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_2: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_2: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_3: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_3: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_3: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_3: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_4: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_4: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_4: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_4: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_5: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_5: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_5: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_5: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_6: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_6: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_6: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_6: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_7: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_7: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_7: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_7: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_8: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_8: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_8: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_8: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_9: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_9: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_9: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_9: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_10: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_10: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_10: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_10: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_11: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_11: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_11: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_11: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_12: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_12: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_12: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_12: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_13: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_13: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_13: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_13: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_14: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_14: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_14: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_14: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_15: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_15: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_15: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_15: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_16: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_16: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_16: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_16: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_17: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_17: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_17: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_17: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_18: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_18: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_18: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_18: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_19: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_19: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_19: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_19: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_20: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_20: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_20: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_20: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_21: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_21: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_21: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_21: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_22: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_22: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_22: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_22: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_23: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_23: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_23: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_23: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_24: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_24: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_24: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_24: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_25: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_25: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_25: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_25: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_26: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_26: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_26: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_26: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_27: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_27: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_27: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_27: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_28: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_28: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_28: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_28: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_29: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_29: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_29: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_29: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_30: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_30: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_30: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_30: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_31: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_31: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_31: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_31: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_32: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_32: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_32: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_32: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_33: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_33: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_33: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_33: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_34: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_34: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_34: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_34: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_35: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_35: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_35: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_35: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_36: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_36: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_36: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_36: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_37: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_37: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_37: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_37: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_38: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_38: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_38: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_38: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_39: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_39: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_39: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_39: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_40: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_40: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_40: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_40: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_41: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_41: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_41: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_41: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_42: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_42: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_42: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_42: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_43: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_43: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_43: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_43: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_44: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_44: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_44: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_44: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_45: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_45: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_45: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_45: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_46: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_46: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_46: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_46: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_47: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_47: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_47: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_47: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_48: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_48: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_48: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_48: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_49: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_49: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_49: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_49: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_50: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_50: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_50: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_50: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_51: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_51: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_51: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_51: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_52: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_52: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_52: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_52: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_53: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_53: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_53: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_53: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_54: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_54: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_54: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_54: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_55: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_55: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_55: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_55: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_56: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_56: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_56: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_56: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_57: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_57: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_57: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_57: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_58: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_58: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_58: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_58: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_59: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_59: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_59: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_59: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_60: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_60: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_60: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_60: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_61: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_61: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_61: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_61: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_62: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_62: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_62: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_62: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_63: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_63: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_63: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_63: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_64: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_64: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_64: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_64: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_65: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_65: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_65: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_65: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_66: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_66: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_66: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_66: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_67: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_67: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_67: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_67: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_68: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_68: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_68: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_68: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_69: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_69: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_69: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_69: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_70: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_70: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_70: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_70: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_71: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_71: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_71: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_71: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_72: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_72: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_72: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_72: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_73: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_73: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_73: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_73: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_74: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_74: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_74: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_74: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_75: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_75: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_75: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_75: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_76: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_76: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_76: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_76: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_77: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_77: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_77: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_77: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_78: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_78: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_78: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_78: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_79: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_79: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_79: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_79: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_80: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_80: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_80: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_80: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_81: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_81: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_81: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_81: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_82: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_82: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_82: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_82: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_83: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_83: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_83: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_83: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_84: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_84: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_84: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_84: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            reserved4437: [1]u8,
    -            ///  clicintie Register
    -            CLICINTIE_85: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_85: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_85: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_85: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintie Register
    -            CLICINTIE_86: mmio.Mmio(packed struct(u8) {
    -                ///  IE
    -                IE: u1,
    -                padding: u7,
    -            }),
    -            ///  clicintattr Register
    -            CLICINTATTR_86: mmio.Mmio(packed struct(u8) {
    -                ///  SHV
    -                SHV: u1,
    -                ///  TRIG
    -                TRIG: u2,
    -                padding: u5,
    -            }),
    -            ///  clicintctl Register
    -            CLICINTCTL_86: mmio.Mmio(packed struct(u8) {
    -                ///  LEVEL_PRIORITY
    -                LEVEL_PRIORITY: u8,
    -            }),
    -            ///  clicintip Register
    -            CLICINTIP_86: mmio.Mmio(packed struct(u8) {
    -                ///  IP
    -                IP: u1,
    -                padding: u7,
    -            }),
    -        };
    -
    -        ///  Power management unit
    -        pub const PMU = extern struct {
    -            ///  power control register
    -            CTL: mmio.Mmio(packed struct(u32) {
    -                ///  LDO Low Power Mode
    -                LDOLP: u1,
    -                ///  Standby Mode
    -                STBMOD: u1,
    -                ///  Wakeup Flag Reset
    -                WURST: u1,
    -                ///  Standby Flag Reset
    -                STBRST: u1,
    -                ///  Low Voltage Detector Enable
    -                LVDEN: u1,
    -                ///  Low Voltage Detector Threshold
    -                LVDT: u3,
    -                ///  Backup Domain Write Enable
    -                BKPWEN: u1,
    -                padding: u23,
    -            }),
    -            ///  power control/status register
    -            CS: mmio.Mmio(packed struct(u32) {
    -                ///  Wakeup flag
    -                WUF: u1,
    -                ///  Standby flag
    -                STBF: u1,
    -                ///  Low Voltage Detector Status Flag
    -                LVDF: u1,
    -                reserved8: u5,
    -                ///  Enable WKUP pin
    -                WUPEN: u1,
    -                padding: u23,
    -            }),
    -        };
    -
    -        ///  Reset and clock unit
    -        pub const RCU = extern struct {
    -            ///  Control register
    -            CTL: mmio.Mmio(packed struct(u32) {
    -                ///  Internal 8MHz RC oscillator Enable
    -                IRC8MEN: u1,
    -                ///  IRC8M Internal 8MHz RC Oscillator stabilization Flag
    -                IRC8MSTB: u1,
    -                reserved3: u1,
    -                ///  Internal 8MHz RC Oscillator clock trim adjust value
    -                IRC8MADJ: u5,
    -                ///  Internal 8MHz RC Oscillator calibration value register
    -                IRC8MCALIB: u8,
    -                ///  External High Speed oscillator Enable
    -                HXTALEN: u1,
    -                ///  External crystal oscillator (HXTAL) clock stabilization flag
    -                HXTALSTB: u1,
    -                ///  External crystal oscillator (HXTAL) clock bypass mode enable
    -                HXTALBPS: u1,
    -                ///  HXTAL Clock Monitor Enable
    -                CKMEN: u1,
    -                reserved24: u4,
    -                ///  PLL enable
    -                PLLEN: u1,
    -                ///  PLL Clock Stabilization Flag
    -                PLLSTB: u1,
    -                ///  PLL1 enable
    -                PLL1EN: u1,
    -                ///  PLL1 Clock Stabilization Flag
    -                PLL1STB: u1,
    -                ///  PLL2 enable
    -                PLL2EN: u1,
    -                ///  PLL2 Clock Stabilization Flag
    -                PLL2STB: u1,
    -                padding: u2,
    -            }),
    -            ///  Clock configuration register 0 (RCU_CFG0)
    -            CFG0: mmio.Mmio(packed struct(u32) {
    -                ///  System clock switch
    -                SCS: u2,
    -                ///  System clock switch status
    -                SCSS: u2,
    -                ///  AHB prescaler selection
    -                AHBPSC: u4,
    -                ///  APB1 prescaler selection
    -                APB1PSC: u3,
    -                ///  APB2 prescaler selection
    -                APB2PSC: u3,
    -                ///  ADC clock prescaler selection
    -                ADCPSC_1_0: u2,
    -                ///  PLL Clock Source Selection
    -                PLLSEL: u1,
    -                ///  The LSB of PREDV0 division factor
    -                PREDV0_LSB: u1,
    -                ///  The PLL clock multiplication factor
    -                PLLMF_3_0: u4,
    -                ///  USBFS clock prescaler selection
    -                USBFSPSC: u2,
    -                ///  CKOUT0 Clock Source Selection
    -                CKOUT0SEL: u4,
    -                ///  Bit 2 of ADCPSC
    -                ADCPSC_2: u1,
    -                ///  Bit 4 of PLLMF
    -                PLLMF_4: u1,
    -                padding: u2,
    -            }),
    -            ///  Clock interrupt register (RCU_INT)
    -            INT: mmio.Mmio(packed struct(u32) {
    -                ///  IRC40K stabilization interrupt flag
    -                IRC40KSTBIF: u1,
    -                ///  LXTAL stabilization interrupt flag
    -                LXTALSTBIF: u1,
    -                ///  IRC8M stabilization interrupt flag
    -                IRC8MSTBIF: u1,
    -                ///  HXTAL stabilization interrupt flag
    -                HXTALSTBIF: u1,
    -                ///  PLL stabilization interrupt flag
    -                PLLSTBIF: u1,
    -                ///  PLL1 stabilization interrupt flag
    -                PLL1STBIF: u1,
    -                ///  PLL2 stabilization interrupt flag
    -                PLL2STBIF: u1,
    -                ///  HXTAL Clock Stuck Interrupt Flag
    -                CKMIF: u1,
    -                ///  IRC40K Stabilization interrupt enable
    -                IRC40KSTBIE: u1,
    -                ///  LXTAL Stabilization Interrupt Enable
    -                LXTALSTBIE: u1,
    -                ///  IRC8M Stabilization Interrupt Enable
    -                IRC8MSTBIE: u1,
    -                ///  HXTAL Stabilization Interrupt Enable
    -                HXTALSTBIE: u1,
    -                ///  PLL Stabilization Interrupt Enable
    -                PLLSTBIE: u1,
    -                ///  PLL1 Stabilization Interrupt Enable
    -                PLL1STBIE: u1,
    -                ///  PLL2 Stabilization Interrupt Enable
    -                PLL2STBIE: u1,
    -                reserved16: u1,
    -                ///  IRC40K Stabilization Interrupt Clear
    -                IRC40KSTBIC: u1,
    -                ///  LXTAL Stabilization Interrupt Clear
    -                LXTALSTBIC: u1,
    -                ///  IRC8M Stabilization Interrupt Clear
    -                IRC8MSTBIC: u1,
    -                ///  HXTAL Stabilization Interrupt Clear
    -                HXTALSTBIC: u1,
    -                ///  PLL stabilization Interrupt Clear
    -                PLLSTBIC: u1,
    -                ///  PLL1 stabilization Interrupt Clear
    -                PLL1STBIC: u1,
    -                ///  PLL2 stabilization Interrupt Clear
    -                PLL2STBIC: u1,
    -                ///  HXTAL Clock Stuck Interrupt Clear
    -                CKMIC: u1,
    -                padding: u8,
    -            }),
    -            ///  APB2 reset register (RCU_APB2RST)
    -            APB2RST: mmio.Mmio(packed struct(u32) {
    -                ///  Alternate function I/O reset
    -                AFRST: u1,
    -                reserved2: u1,
    -                ///  GPIO port A reset
    -                PARST: u1,
    -                ///  GPIO port B reset
    -                PBRST: u1,
    -                ///  GPIO port C reset
    -                PCRST: u1,
    -                ///  GPIO port D reset
    -                PDRST: u1,
    -                ///  GPIO port E reset
    -                PERST: u1,
    -                reserved9: u2,
    -                ///  ADC0 reset
    -                ADC0RST: u1,
    -                ///  ADC1 reset
    -                ADC1RST: u1,
    -                ///  Timer 0 reset
    -                TIMER0RST: u1,
    -                ///  SPI0 reset
    -                SPI0RST: u1,
    -                reserved14: u1,
    -                ///  USART0 Reset
    -                USART0RST: u1,
    -                padding: u17,
    -            }),
    -            ///  APB1 reset register (RCU_APB1RST)
    -            APB1RST: mmio.Mmio(packed struct(u32) {
    -                ///  TIMER1 timer reset
    -                TIMER1RST: u1,
    -                ///  TIMER2 timer reset
    -                TIMER2RST: u1,
    -                ///  TIMER3 timer reset
    -                TIMER3RST: u1,
    -                ///  TIMER4 timer reset
    -                TIMER4RST: u1,
    -                ///  TIMER5 timer reset
    -                TIMER5RST: u1,
    -                ///  TIMER6 timer reset
    -                TIMER6RST: u1,
    -                reserved11: u5,
    -                ///  Window watchdog timer reset
    -                WWDGTRST: u1,
    -                reserved14: u2,
    -                ///  SPI1 reset
    -                SPI1RST: u1,
    -                ///  SPI2 reset
    -                SPI2RST: u1,
    -                reserved17: u1,
    -                ///  USART1 reset
    -                USART1RST: u1,
    -                ///  USART2 reset
    -                USART2RST: u1,
    -                ///  UART3 reset
    -                UART3RST: u1,
    -                ///  UART4 reset
    -                UART4RST: u1,
    -                ///  I2C0 reset
    -                I2C0RST: u1,
    -                ///  I2C1 reset
    -                I2C1RST: u1,
    -                reserved25: u2,
    -                ///  CAN0 reset
    -                CAN0RST: u1,
    -                ///  CAN1 reset
    -                CAN1RST: u1,
    -                ///  Backup interface reset
    -                BKPIRST: u1,
    -                ///  Power control reset
    -                PMURST: u1,
    -                ///  DAC reset
    -                DACRST: u1,
    -                padding: u2,
    -            }),
    -            ///  AHB enable register
    -            AHBEN: mmio.Mmio(packed struct(u32) {
    -                ///  DMA0 clock enable
    -                DMA0EN: u1,
    -                ///  DMA1 clock enable
    -                DMA1EN: u1,
    -                ///  SRAM interface clock enable when sleep mode
    -                SRAMSPEN: u1,
    -                reserved4: u1,
    -                ///  FMC clock enable when sleep mode
    -                FMCSPEN: u1,
    -                reserved6: u1,
    -                ///  CRC clock enable
    -                CRCEN: u1,
    -                reserved8: u1,
    -                ///  EXMC clock enable
    -                EXMCEN: u1,
    -                reserved12: u3,
    -                ///  USBFS clock enable
    -                USBFSEN: u1,
    -                padding: u19,
    -            }),
    -            ///  APB2 clock enable register (RCU_APB2EN)
    -            APB2EN: mmio.Mmio(packed struct(u32) {
    -                ///  Alternate function IO clock enable
    -                AFEN: u1,
    -                reserved2: u1,
    -                ///  GPIO port A clock enable
    -                PAEN: u1,
    -                ///  GPIO port B clock enable
    -                PBEN: u1,
    -                ///  GPIO port C clock enable
    -                PCEN: u1,
    -                ///  GPIO port D clock enable
    -                PDEN: u1,
    -                ///  GPIO port E clock enable
    -                PEEN: u1,
    -                reserved9: u2,
    -                ///  ADC0 clock enable
    -                ADC0EN: u1,
    -                ///  ADC1 clock enable
    -                ADC1EN: u1,
    -                ///  TIMER0 clock enable
    -                TIMER0EN: u1,
    -                ///  SPI0 clock enable
    -                SPI0EN: u1,
    -                reserved14: u1,
    -                ///  USART0 clock enable
    -                USART0EN: u1,
    -                padding: u17,
    -            }),
    -            ///  APB1 clock enable register (RCU_APB1EN)
    -            APB1EN: mmio.Mmio(packed struct(u32) {
    -                ///  TIMER1 timer clock enable
    -                TIMER1EN: u1,
    -                ///  TIMER2 timer clock enable
    -                TIMER2EN: u1,
    -                ///  TIMER3 timer clock enable
    -                TIMER3EN: u1,
    -                ///  TIMER4 timer clock enable
    -                TIMER4EN: u1,
    -                ///  TIMER5 timer clock enable
    -                TIMER5EN: u1,
    -                ///  TIMER6 timer clock enable
    -                TIMER6EN: u1,
    -                reserved11: u5,
    -                ///  Window watchdog timer clock enable
    -                WWDGTEN: u1,
    -                reserved14: u2,
    -                ///  SPI1 clock enable
    -                SPI1EN: u1,
    -                ///  SPI2 clock enable
    -                SPI2EN: u1,
    -                reserved17: u1,
    -                ///  USART1 clock enable
    -                USART1EN: u1,
    -                ///  USART2 clock enable
    -                USART2EN: u1,
    -                ///  UART3 clock enable
    -                UART3EN: u1,
    -                ///  UART4 clock enable
    -                UART4EN: u1,
    -                ///  I2C0 clock enable
    -                I2C0EN: u1,
    -                ///  I2C1 clock enable
    -                I2C1EN: u1,
    -                reserved25: u2,
    -                ///  CAN0 clock enable
    -                CAN0EN: u1,
    -                ///  CAN1 clock enable
    -                CAN1EN: u1,
    -                ///  Backup interface clock enable
    -                BKPIEN: u1,
    -                ///  Power control clock enable
    -                PMUEN: u1,
    -                ///  DAC clock enable
    -                DACEN: u1,
    -                padding: u2,
    -            }),
    -            ///  Backup domain control register (RCU_BDCTL)
    -            BDCTL: mmio.Mmio(packed struct(u32) {
    -                ///  LXTAL enable
    -                LXTALEN: u1,
    -                ///  External low-speed oscillator stabilization
    -                LXTALSTB: u1,
    -                ///  LXTAL bypass mode enable
    -                LXTALBPS: u1,
    -                reserved8: u5,
    -                ///  RTC clock entry selection
    -                RTCSRC: u2,
    -                reserved15: u5,
    -                ///  RTC clock enable
    -                RTCEN: u1,
    -                ///  Backup domain reset
    -                BKPRST: u1,
    -                padding: u15,
    -            }),
    -            ///  Reset source /clock register (RCU_RSTSCK)
    -            RSTSCK: mmio.Mmio(packed struct(u32) {
    -                ///  IRC40K enable
    -                IRC40KEN: u1,
    -                ///  IRC40K stabilization
    -                IRC40KSTB: u1,
    -                reserved24: u22,
    -                ///  Reset flag clear
    -                RSTFC: u1,
    -                reserved26: u1,
    -                ///  External PIN reset flag
    -                EPRSTF: u1,
    -                ///  Power reset flag
    -                PORRSTF: u1,
    -                ///  Software reset flag
    -                SWRSTF: u1,
    -                ///  Free Watchdog timer reset flag
    -                FWDGTRSTF: u1,
    -                ///  Window watchdog timer reset flag
    -                WWDGTRSTF: u1,
    -                ///  Low-power reset flag
    -                LPRSTF: u1,
    -            }),
    -            ///  AHB reset register
    -            AHBRST: mmio.Mmio(packed struct(u32) {
    -                reserved12: u12,
    -                ///  USBFS reset
    -                USBFSRST: u1,
    -                padding: u19,
    -            }),
    -            ///  Clock Configuration register 1
    -            CFG1: mmio.Mmio(packed struct(u32) {
    -                ///  PREDV0 division factor
    -                PREDV0: u4,
    -                ///  PREDV1 division factor
    -                PREDV1: u4,
    -                ///  The PLL1 clock multiplication factor
    -                PLL1MF: u4,
    -                ///  The PLL2 clock multiplication factor
    -                PLL2MF: u4,
    -                ///  PREDV0 input Clock Source Selection
    -                PREDV0SEL: u1,
    -                ///  I2S1 Clock Source Selection
    -                I2S1SEL: u1,
    -                ///  I2S2 Clock Source Selection
    -                I2S2SEL: u1,
    -                padding: u13,
    -            }),
    -            reserved52: [4]u8,
    -            ///  Deep sleep mode Voltage register
    -            DSV: mmio.Mmio(packed struct(u32) {
    -                ///  Deep-sleep mode voltage select
    -                DSLPVS: u2,
    -                padding: u30,
    -            }),
    -        };
    -
    -        ///  Real-time clock
    -        pub const RTC = extern struct {
    -            ///  RTC interrupt enable register
    -            INTEN: mmio.Mmio(packed struct(u32) {
    -                ///  Second interrupt
    -                SCIE: u1,
    -                ///  Alarm interrupt enable
    -                ALRMIE: u1,
    -                ///  Overflow interrupt enable
    -                OVIE: u1,
    -                padding: u29,
    -            }),
    -            ///  control register
    -            CTL: mmio.Mmio(packed struct(u32) {
    -                ///  Sencond interrupt flag
    -                SCIF: u1,
    -                ///  Alarm interrupt flag
    -                ALRMIF: u1,
    -                ///  Overflow interrupt flag
    -                OVIF: u1,
    -                ///  Registers synchronized flag
    -                RSYNF: u1,
    -                ///  Configuration mode flag
    -                CMF: u1,
    -                ///  Last write operation finished flag
    -                LWOFF: u1,
    -                padding: u26,
    -            }),
    -            ///  RTC prescaler high register
    -            PSCH: mmio.Mmio(packed struct(u32) {
    -                padding: u32,
    -            }),
    -            ///  RTC prescaler low register
    -            PSCL: mmio.Mmio(packed struct(u32) {
    -                padding: u32,
    -            }),
    -            ///  RTC divider high register
    -            DIVH: mmio.Mmio(packed struct(u32) {
    -                ///  RTC divider value high
    -                DIV: u4,
    -                padding: u28,
    -            }),
    -            ///  RTC divider low register
    -            DIVL: mmio.Mmio(packed struct(u32) {
    -                ///  RTC divider value low
    -                DIV: u16,
    -                padding: u16,
    -            }),
    -            ///  RTC counter high register
    -            CNTH: mmio.Mmio(packed struct(u32) {
    -                ///  RTC counter value high
    -                CNT: u16,
    -                padding: u16,
    -            }),
    -            ///  RTC counter low register
    -            CNTL: mmio.Mmio(packed struct(u32) {
    -                ///  RTC counter value low
    -                CNT: u16,
    -                padding: u16,
    -            }),
    -        };
    -
    -        ///  Serial peripheral interface
    -        pub const SPI0 = extern struct {
    -            ///  control register 0
    -            CTL0: mmio.Mmio(packed struct(u16) {
    -                ///  Clock Phase Selection
    -                CKPH: u1,
    -                ///  Clock polarity Selection
    -                CKPL: u1,
    -                ///  Master Mode Enable
    -                MSTMOD: u1,
    -                ///  Master Clock Prescaler Selection
    -                PSC: u3,
    -                ///  SPI enable
    -                SPIEN: u1,
    -                ///  LSB First Mode
    -                LF: u1,
    -                ///  NSS Pin Selection In NSS Software Mode
    -                SWNSS: u1,
    -                ///  NSS Software Mode Selection
    -                SWNSSEN: u1,
    -                ///  Receive only
    -                RO: u1,
    -                ///  Data frame format
    -                FF16: u1,
    -                ///  CRC Next Transfer
    -                CRCNT: u1,
    -                ///  CRC Calculation Enable
    -                CRCEN: u1,
    -                ///  Bidirectional Transmit output enable
    -                BDOEN: u1,
    -                ///  Bidirectional enable
    -                BDEN: u1,
    -            }),
    -            reserved4: [2]u8,
    -            ///  control register 1
    -            CTL1: mmio.Mmio(packed struct(u16) {
    -                ///  Rx buffer DMA enable
    -                DMAREN: u1,
    -                ///  Transmit Buffer DMA Enable
    -                DMATEN: u1,
    -                ///  Drive NSS Output
    -                NSSDRV: u1,
    -                ///  SPI NSS pulse mode enable
    -                NSSP: u1,
    -                ///  SPI TI mode enable
    -                TMOD: u1,
    -                ///  Error interrupt enable
    -                ERRIE: u1,
    -                ///  RX buffer not empty interrupt enable
    -                RBNEIE: u1,
    -                ///  Tx buffer empty interrupt enable
    -                TBEIE: u1,
    -                padding: u8,
    -            }),
    -            reserved8: [2]u8,
    -            ///  status register
    -            STAT: mmio.Mmio(packed struct(u16) {
    -                ///  Receive Buffer Not Empty
    -                RBNE: u1,
    -                ///  Transmit Buffer Empty
    -                TBE: u1,
    -                ///  I2S channel side
    -                I2SCH: u1,
    -                ///  Transmission underrun error bit
    -                TXURERR: u1,
    -                ///  SPI CRC Error Bit
    -                CRCERR: u1,
    -                ///  SPI Configuration error
    -                CONFERR: u1,
    -                ///  Reception Overrun Error Bit
    -                RXORERR: u1,
    -                ///  Transmitting On-going Bit
    -                TRANS: u1,
    -                ///  Format error
    -                FERR: u1,
    -                padding: u7,
    -            }),
    -            reserved12: [2]u8,
    -            ///  data register
    -            DATA: mmio.Mmio(packed struct(u16) {
    -                ///  Data transfer register
    -                SPI_DATA: u16,
    -            }),
    -            reserved16: [2]u8,
    -            ///  CRC polynomial register
    -            CRCPOLY: mmio.Mmio(packed struct(u16) {
    -                ///  CRC polynomial value
    -                CRCPOLY: u16,
    -            }),
    -            reserved20: [2]u8,
    -            ///  RX CRC register
    -            RCRC: mmio.Mmio(packed struct(u16) {
    -                ///  RX CRC value
    -                RCRC: u16,
    -            }),
    -            reserved24: [2]u8,
    -            ///  TX CRC register
    -            TCRC: mmio.Mmio(packed struct(u16) {
    -                ///  Tx CRC value
    -                TCRC: u16,
    -            }),
    -            reserved28: [2]u8,
    -            ///  I2S control register
    -            I2SCTL: mmio.Mmio(packed struct(u16) {
    -                ///  Channel length (number of bits per audio channel)
    -                CHLEN: u1,
    -                ///  Data length
    -                DTLEN: u2,
    -                ///  Idle state clock polarity
    -                CKPL: u1,
    -                ///  I2S standard selection
    -                I2SSTD: u2,
    -                reserved7: u1,
    -                ///  PCM frame synchronization mode
    -                PCMSMOD: u1,
    -                ///  I2S operation mode
    -                I2SOPMOD: u2,
    -                ///  I2S Enable
    -                I2SEN: u1,
    -                ///  I2S mode selection
    -                I2SSEL: u1,
    -                padding: u4,
    -            }),
    -            reserved32: [2]u8,
    -            ///  I2S prescaler register
    -            I2SPSC: mmio.Mmio(packed struct(u16) {
    -                ///  Dividing factor for the prescaler
    -                DIV: u8,
    -                ///  Odd factor for the prescaler
    -                OF: u1,
    -                ///  I2S_MCK output enable
    -                MCKOEN: u1,
    -                padding: u6,
    -            }),
    -        };
    -
    -        ///  Universal asynchronous receiver transmitter
    -        pub const UART3 = extern struct {
    -            ///  Status register
    -            STAT: mmio.Mmio(packed struct(u32) {
    -                ///  Parity error flag
    -                PERR: u1,
    -                ///  Frame error flag
    -                FERR: u1,
    -                ///  Noise error flag
    -                NERR: u1,
    -                ///  Overrun error
    -                ORERR: u1,
    -                ///  IDLE frame detected flag
    -                IDLEF: u1,
    -                ///  Read data buffer not empty
    -                RBNE: u1,
    -                ///  Transmission complete
    -                TC: u1,
    -                ///  Transmit data buffer empty
    -                TBE: u1,
    -                ///  LIN break detection flag
    -                LBDF: u1,
    -                padding: u23,
    -            }),
    -            ///  Data register
    -            DATA: mmio.Mmio(packed struct(u32) {
    -                ///  Transmit or read data value
    -                DATA: u9,
    -                padding: u23,
    -            }),
    -            ///  Baud rate register
    -            BAUD: mmio.Mmio(packed struct(u32) {
    -                ///  Fraction part of baud-rate divider
    -                FRADIV: u4,
    -                ///  Integer part of baud-rate divider
    -                INTDIV: u12,
    -                padding: u16,
    -            }),
    -            ///  Control register 0
    -            CTL0: mmio.Mmio(packed struct(u32) {
    -                ///  Send break command
    -                SBKCMD: u1,
    -                ///  Receiver wakeup from mute mode
    -                RWU: u1,
    -                ///  Receiver enable
    -                REN: u1,
    -                ///  Transmitter enable
    -                TEN: u1,
    -                ///  IDLE line detected interrupt enable
    -                IDLEIE: u1,
    -                ///  Read data buffer not empty interrupt and overrun error interrupt enable
    -                RBNEIE: u1,
    -                ///  Transmission complete interrupt enable
    -                TCIE: u1,
    -                ///  Transmitter buffer empty interrupt enable
    -                TBEIE: u1,
    -                ///  Parity error interrupt enable
    -                PERRIE: u1,
    -                ///  Parity mode
    -                PM: u1,
    -                ///  Parity check function enable
    -                PCEN: u1,
    -                ///  Wakeup method in mute mode
    -                WM: u1,
    -                ///  Word length
    -                WL: u1,
    -                ///  USART enable
    -                UEN: u1,
    -                padding: u18,
    -            }),
    -            ///  Control register 1
    -            CTL1: mmio.Mmio(packed struct(u32) {
    -                ///  Address of the USART
    -                ADDR: u4,
    -                reserved5: u1,
    -                ///  LIN break frame length
    -                LBLEN: u1,
    -                ///  LIN break detection interrupt enable
    -                LBDIE: u1,
    -                reserved12: u5,
    -                ///  STOP bits length
    -                STB: u2,
    -                ///  LIN mode enable
    -                LMEN: u1,
    -                padding: u17,
    -            }),
    -            ///  Control register 2
    -            CTL2: mmio.Mmio(packed struct(u32) {
    -                ///  Error interrupt enable
    -                ERRIE: u1,
    -                ///  IrDA mode enable
    -                IREN: u1,
    -                ///  IrDA low-power
    -                IRLP: u1,
    -                ///  Half-duplex selection
    -                HDEN: u1,
    -                reserved6: u2,
    -                ///  DMA request enable for reception
    -                DENR: u1,
    -                ///  DMA request enable for transmission
    -                DENT: u1,
    -                padding: u24,
    -            }),
    -            ///  Guard time and prescaler register
    -            GP: mmio.Mmio(packed struct(u32) {
    -                ///  Prescaler value
    -                PSC: u8,
    -                padding: u24,
    -            }),
    -        };
    -
    -        ///  Universal synchronous asynchronous receiver transmitter
    -        pub const USART0 = extern struct {
    -            ///  Status register
    -            STAT: mmio.Mmio(packed struct(u32) {
    -                ///  Parity error flag
    -                PERR: u1,
    -                ///  Frame error flag
    -                FERR: u1,
    -                ///  Noise error flag
    -                NERR: u1,
    -                ///  Overrun error
    -                ORERR: u1,
    -                ///  IDLE frame detected flag
    -                IDLEF: u1,
    -                ///  Read data buffer not empty
    -                RBNE: u1,
    -                ///  Transmission complete
    -                TC: u1,
    -                ///  Transmit data buffer empty
    -                TBE: u1,
    -                ///  LIN break detection flag
    -                LBDF: u1,
    -                ///  CTS change flag
    -                CTSF: u1,
    -                padding: u22,
    -            }),
    -            ///  Data register
    -            DATA: mmio.Mmio(packed struct(u32) {
    -                ///  Transmit or read data value
    -                DATA: u9,
    -                padding: u23,
    -            }),
    -            ///  Baud rate register
    -            BAUD: mmio.Mmio(packed struct(u32) {
    -                ///  Fraction part of baud-rate divider
    -                FRADIV: u4,
    -                ///  Integer part of baud-rate divider
    -                INTDIV: u12,
    -                padding: u16,
    -            }),
    -            ///  Control register 0
    -            CTL0: mmio.Mmio(packed struct(u32) {
    -                ///  Send break command
    -                SBKCMD: u1,
    -                ///  Receiver wakeup from mute mode
    -                RWU: u1,
    -                ///  Receiver enable
    -                REN: u1,
    -                ///  Transmitter enable
    -                TEN: u1,
    -                ///  IDLE line detected interrupt enable
    -                IDLEIE: u1,
    -                ///  Read data buffer not empty interrupt and overrun error interrupt enable
    -                RBNEIE: u1,
    -                ///  Transmission complete interrupt enable
    -                TCIE: u1,
    -                ///  Transmitter buffer empty interrupt enable
    -                TBEIE: u1,
    -                ///  Parity error interrupt enable
    -                PERRIE: u1,
    -                ///  Parity mode
    -                PM: u1,
    -                ///  Parity check function enable
    -                PCEN: u1,
    -                ///  Wakeup method in mute mode
    -                WM: u1,
    -                ///  Word length
    -                WL: u1,
    -                ///  USART enable
    -                UEN: u1,
    -                padding: u18,
    -            }),
    -            ///  Control register 1
    -            CTL1: mmio.Mmio(packed struct(u32) {
    -                ///  Address of the USART
    -                ADDR: u4,
    -                reserved5: u1,
    -                ///  LIN break frame length
    -                LBLEN: u1,
    -                ///  LIN break detection interrupt enable
    -                LBDIE: u1,
    -                reserved8: u1,
    -                ///  CK Length
    -                CLEN: u1,
    -                ///  Clock phase
    -                CPH: u1,
    -                ///  Clock polarity
    -                CPL: u1,
    -                ///  CK pin enable
    -                CKEN: u1,
    -                ///  STOP bits length
    -                STB: u2,
    -                ///  LIN mode enable
    -                LMEN: u1,
    -                padding: u17,
    -            }),
    -            ///  Control register 2
    -            CTL2: mmio.Mmio(packed struct(u32) {
    -                ///  Error interrupt enable
    -                ERRIE: u1,
    -                ///  IrDA mode enable
    -                IREN: u1,
    -                ///  IrDA low-power
    -                IRLP: u1,
    -                ///  Half-duplex selection
    -                HDEN: u1,
    -                ///  Smartcard NACK enable
    -                NKEN: u1,
    -                ///  Smartcard mode enable
    -                SCEN: u1,
    -                ///  DMA request enable for reception
    -                DENR: u1,
    -                ///  DMA request enable for transmission
    -                DENT: u1,
    -                ///  RTS enable
    -                RTSEN: u1,
    -                ///  CTS enable
    -                CTSEN: u1,
    -                ///  CTS interrupt enable
    -                CTSIE: u1,
    -                padding: u21,
    -            }),
    -            ///  Guard time and prescaler register
    -            GP: mmio.Mmio(packed struct(u32) {
    -                ///  Prescaler value
    -                PSC: u8,
    -                ///  Guard time value in Smartcard mode
    -                GUAT: u8,
    -                padding: u16,
    -            }),
    -        };
    -
    -        ///  Advanced-timers
    -        pub const TIMER0 = extern struct {
    -            ///  control register 0
    -            CTL0: mmio.Mmio(packed struct(u16) {
    -                ///  Counter enable
    -                CEN: u1,
    -                ///  Update disable
    -                UPDIS: u1,
    -                ///  Update source
    -                UPS: u1,
    -                ///  Single pulse mode
    -                SPM: u1,
    -                ///  Direction
    -                DIR: u1,
    -                ///  Counter aligns mode selection
    -                CAM: u2,
    -                ///  Auto-reload shadow enable
    -                ARSE: u1,
    -                ///  Clock division
    -                CKDIV: u2,
    -                padding: u6,
    -            }),
    -            reserved4: [2]u8,
    -            ///  control register 1
    -            CTL1: mmio.Mmio(packed struct(u16) {
    -                ///  Commutation control shadow enable
    -                CCSE: u1,
    -                reserved2: u1,
    -                ///  Commutation control shadow register update control
    -                CCUC: u1,
    -                ///  DMA request source selection
    -                DMAS: u1,
    -                ///  Master mode control
    -                MMC: u3,
    -                ///  Channel 0 trigger input selection
    -                TI0S: u1,
    -                ///  Idle state of channel 0 output
    -                ISO0: u1,
    -                ///  Idle state of channel 0 complementary output
    -                ISO0N: u1,
    -                ///  Idle state of channel 1 output
    -                ISO1: u1,
    -                ///  Idle state of channel 1 complementary output
    -                ISO1N: u1,
    -                ///  Idle state of channel 2 output
    -                ISO2: u1,
    -                ///  Idle state of channel 2 complementary output
    -                ISO2N: u1,
    -                ///  Idle state of channel 3 output
    -                ISO3: u1,
    -                padding: u1,
    -            }),
    -            reserved8: [2]u8,
    -            ///  slave mode configuration register
    -            SMCFG: mmio.Mmio(packed struct(u16) {
    -                ///  Slave mode selection
    -                SMC: u3,
    -                reserved4: u1,
    -                ///  Trigger selection
    -                TRGS: u3,
    -                ///  Master/Slave mode
    -                MSM: u1,
    -                ///  External trigger filter control
    -                ETFC: u4,
    -                ///  External trigger prescaler
    -                ETPSC: u2,
    -                ///  Part of SMC for enable External clock mode1
    -                SMC1: u1,
    -                ///  External trigger polarity
    -                ETP: u1,
    -            }),
    -            reserved12: [2]u8,
    -            ///  DMA/Interrupt enable register
    -            DMAINTEN: mmio.Mmio(packed struct(u16) {
    -                ///  Update interrupt enable
    -                UPIE: u1,
    -                ///  Channel 0 capture/compare interrupt enable
    -                CH0IE: u1,
    -                ///  Channel 1 capture/compare interrupt enable
    -                CH1IE: u1,
    -                ///  Channel 2 capture/compare interrupt enable
    -                CH2IE: u1,
    -                ///  Channel 3 capture/compare interrupt enable
    -                CH3IE: u1,
    -                ///  commutation interrupt enable
    -                CMTIE: u1,
    -                ///  Trigger interrupt enable
    -                TRGIE: u1,
    -                ///  Break interrupt enable
    -                BRKIE: u1,
    -                ///  Update DMA request enable
    -                UPDEN: u1,
    -                ///  Channel 0 capture/compare DMA request enable
    -                CH0DEN: u1,
    -                ///  Channel 1 capture/compare DMA request enable
    -                CH1DEN: u1,
    -                ///  Channel 2 capture/compare DMA request enable
    -                CH2DEN: u1,
    -                ///  Channel 3 capture/compare DMA request enable
    -                CH3DEN: u1,
    -                ///  Commutation DMA request enable
    -                CMTDEN: u1,
    -                ///  Trigger DMA request enable
    -                TRGDEN: u1,
    -                padding: u1,
    -            }),
    -            reserved16: [2]u8,
    -            ///  Interrupt flag register
    -            INTF: mmio.Mmio(packed struct(u16) {
    -                ///  Update interrupt flag
    -                UPIF: u1,
    -                ///  Channel 0 capture/compare interrupt flag
    -                CH0IF: u1,
    -                ///  Channel 1 capture/compare interrupt flag
    -                CH1IF: u1,
    -                ///  Channel 2 capture/compare interrupt flag
    -                CH2IF: u1,
    -                ///  Channel 3 capture/compare interrupt flag
    -                CH3IF: u1,
    -                ///  Channel commutation interrupt flag
    -                CMTIF: u1,
    -                ///  Trigger interrupt flag
    -                TRGIF: u1,
    -                ///  Break interrupt flag
    -                BRKIF: u1,
    -                reserved9: u1,
    -                ///  Channel 0 over capture flag
    -                CH0OF: u1,
    -                ///  Channel 1 over capture flag
    -                CH1OF: u1,
    -                ///  Channel 2 over capture flag
    -                CH2OF: u1,
    -                ///  Channel 3 over capture flag
    -                CH3OF: u1,
    -                padding: u3,
    -            }),
    -            reserved20: [2]u8,
    -            ///  Software event generation register
    -            SWEVG: mmio.Mmio(packed struct(u16) {
    -                ///  Update event generation
    -                UPG: u1,
    -                ///  Channel 0 capture or compare event generation
    -                CH0G: u1,
    -                ///  Channel 1 capture or compare event generation
    -                CH1G: u1,
    -                ///  Channel 2 capture or compare event generation
    -                CH2G: u1,
    -                ///  Channel 3 capture or compare event generation
    -                CH3G: u1,
    -                ///  Channel commutation event generation
    -                CMTG: u1,
    -                ///  Trigger event generation
    -                TRGG: u1,
    -                ///  Break event generation
    -                BRKG: u1,
    -                padding: u8,
    -            }),
    -            reserved24: [2]u8,
    -            ///  Channel control register 0 (output mode)
    -            CHCTL0_Output: mmio.Mmio(packed struct(u16) {
    -                ///  Channel 0 I/O mode selection
    -                CH0MS: u2,
    -                ///  Channel 0 output compare fast enable
    -                CH0COMFEN: u1,
    -                ///  Channel 0 compare output shadow enable
    -                CH0COMSEN: u1,
    -                ///  Channel 0 compare output control
    -                CH0COMCTL: u3,
    -                ///  Channel 0 output compare clear enable
    -                CH0COMCEN: u1,
    -                ///  Channel 1 mode selection
    -                CH1MS: u2,
    -                ///  Channel 1 output compare fast enable
    -                CH1COMFEN: u1,
    -                ///  Channel 1 output compare shadow enable
    -                CH1COMSEN: u1,
    -                ///  Channel 1 compare output control
    -                CH1COMCTL: u3,
    -                ///  Channel 1 output compare clear enable
    -                CH1COMCEN: u1,
    -            }),
    -            reserved28: [2]u8,
    -            ///  Channel control register 1 (output mode)
    -            CHCTL1_Output: mmio.Mmio(packed struct(u16) {
    -                ///  Channel 2 I/O mode selection
    -                CH2MS: u2,
    -                ///  Channel 2 output compare fast enable
    -                CH2COMFEN: u1,
    -                ///  Channel 2 compare output shadow enable
    -                CH2COMSEN: u1,
    -                ///  Channel 2 compare output control
    -                CH2COMCTL: u3,
    -                ///  Channel 2 output compare clear enable
    -                CH2COMCEN: u1,
    -                ///  Channel 3 mode selection
    -                CH3MS: u2,
    -                ///  Channel 3 output compare fast enable
    -                CH3COMFEN: u1,
    -                ///  Channel 3 output compare shadow enable
    -                CH3COMSEN: u1,
    -                ///  Channel 3 compare output control
    -                CH3COMCTL: u3,
    -                ///  Channel 3 output compare clear enable
    -                CH3COMCEN: u1,
    -            }),
    -            reserved32: [2]u8,
    -            ///  Channel control register 2
    -            CHCTL2: mmio.Mmio(packed struct(u16) {
    -                ///  Channel 0 capture/compare function enable
    -                CH0EN: u1,
    -                ///  Channel 0 capture/compare function polarity
    -                CH0P: u1,
    -                ///  Channel 0 complementary output enable
    -                CH0NEN: u1,
    -                ///  Channel 0 complementary output polarity
    -                CH0NP: u1,
    -                ///  Channel 1 capture/compare function enable
    -                CH1EN: u1,
    -                ///  Channel 1 capture/compare function polarity
    -                CH1P: u1,
    -                ///  Channel 1 complementary output enable
    -                CH1NEN: u1,
    -                ///  Channel 1 complementary output polarity
    -                CH1NP: u1,
    -                ///  Channel 2 capture/compare function enable
    -                CH2EN: u1,
    -                ///  Channel 2 capture/compare function polarity
    -                CH2P: u1,
    -                ///  Channel 2 complementary output enable
    -                CH2NEN: u1,
    -                ///  Channel 2 complementary output polarity
    -                CH2NP: u1,
    -                ///  Channel 3 capture/compare function enable
    -                CH3EN: u1,
    -                ///  Channel 3 capture/compare function polarity
    -                CH3P: u1,
    -                padding: u2,
    -            }),
    -            reserved36: [2]u8,
    -            ///  counter
    -            CNT: mmio.Mmio(packed struct(u16) {
    -                ///  current counter value
    -                CNT: u16,
    -            }),
    -            reserved40: [2]u8,
    -            ///  prescaler
    -            PSC: mmio.Mmio(packed struct(u16) {
    -                ///  Prescaler value of the counter clock
    -                PSC: u16,
    -            }),
    -            reserved44: [2]u8,
    -            ///  Counter auto reload register
    -            CAR: mmio.Mmio(packed struct(u16) {
    -                ///  Counter auto reload value
    -                CARL: u16,
    -            }),
    -            reserved48: [2]u8,
    -            ///  Counter repetition register
    -            CREP: mmio.Mmio(packed struct(u16) {
    -                ///  Counter repetition value
    -                CREP: u8,
    -                padding: u8,
    -            }),
    -            reserved52: [2]u8,
    -            ///  Channel 0 capture/compare value register
    -            CH0CV: mmio.Mmio(packed struct(u16) {
    -                ///  Capture or compare value of channel0
    -                CH0VAL: u16,
    -            }),
    -            reserved56: [2]u8,
    -            ///  Channel 1 capture/compare value register
    -            CH1CV: mmio.Mmio(packed struct(u16) {
    -                ///  Capture or compare value of channel1
    -                CH1VAL: u16,
    -            }),
    -            reserved60: [2]u8,
    -            ///  Channel 2 capture/compare value register
    -            CH2CV: mmio.Mmio(packed struct(u16) {
    -                ///  Capture or compare value of channel 2
    -                CH2VAL: u16,
    -            }),
    -            reserved64: [2]u8,
    -            ///  Channel 3 capture/compare value register
    -            CH3CV: mmio.Mmio(packed struct(u16) {
    -                ///  Capture or compare value of channel 3
    -                CH3VAL: u16,
    -            }),
    -            reserved68: [2]u8,
    -            ///  channel complementary protection register
    -            CCHP: mmio.Mmio(packed struct(u16) {
    -                ///  Dead time configure
    -                DTCFG: u8,
    -                ///  Complementary register protect control
    -                PROT: u2,
    -                ///  Idle mode off-state configure
    -                IOS: u1,
    -                ///  Run mode off-state configure
    -                ROS: u1,
    -                ///  Break enable
    -                BRKEN: u1,
    -                ///  Break polarity
    -                BRKP: u1,
    -                ///  Output automatic enable
    -                OAEN: u1,
    -                ///  Primary output enable
    -                POEN: u1,
    -            }),
    -            reserved72: [2]u8,
    -            ///  DMA configuration register
    -            DMACFG: mmio.Mmio(packed struct(u16) {
    -                ///  DMA transfer access start address
    -                DMATA: u5,
    -                reserved8: u3,
    -                ///  DMA transfer count
    -                DMATC: u5,
    -                padding: u3,
    -            }),
    -            reserved76: [2]u8,
    -            ///  DMA transfer buffer register
    -            DMATB: mmio.Mmio(packed struct(u16) {
    -                ///  DMA transfer buffer
    -                DMATB: u16,
    -            }),
    -        };
    -
    -        ///  General-purpose-timers
    -        pub const TIMER1 = extern struct {
    -            ///  control register 0
    -            CTL0: mmio.Mmio(packed struct(u16) {
    -                ///  Counter enable
    -                CEN: u1,
    -                ///  Update disable
    -                UPDIS: u1,
    -                ///  Update source
    -                UPS: u1,
    -                ///  Single pulse mode
    -                SPM: u1,
    -                ///  Direction
    -                DIR: u1,
    -                ///  Counter aligns mode selection
    -                CAM: u2,
    -                ///  Auto-reload shadow enable
    -                ARSE: u1,
    -                ///  Clock division
    -                CKDIV: u2,
    -                padding: u6,
    -            }),
    -            reserved4: [2]u8,
    -            ///  control register 1
    -            CTL1: mmio.Mmio(packed struct(u16) {
    -                reserved3: u3,
    -                ///  DMA request source selection
    -                DMAS: u1,
    -                ///  Master mode control
    -                MMC: u3,
    -                ///  Channel 0 trigger input selection
    -                TI0S: u1,
    -                padding: u8,
    -            }),
    -            reserved8: [2]u8,
    -            ///  slave mode control register
    -            SMCFG: mmio.Mmio(packed struct(u16) {
    -                ///  Slave mode control
    -                SMC: u3,
    -                reserved4: u1,
    -                ///  Trigger selection
    -                TRGS: u3,
    -                ///  Master-slave mode
    -                MSM: u1,
    -                ///  External trigger filter control
    -                ETFC: u4,
    -                ///  External trigger prescaler
    -                ETPSC: u2,
    -                ///  Part of SMC for enable External clock mode1
    -                SMC1: u1,
    -                ///  External trigger polarity
    -                ETP: u1,
    -            }),
    -            reserved12: [2]u8,
    -            ///  DMA/Interrupt enable register
    -            DMAINTEN: mmio.Mmio(packed struct(u16) {
    -                ///  Update interrupt enable
    -                UPIE: u1,
    -                ///  Channel 0 capture/compare interrupt enable
    -                CH0IE: u1,
    -                ///  Channel 1 capture/compare interrupt enable
    -                CH1IE: u1,
    -                ///  Channel 2 capture/compare interrupt enable
    -                CH2IE: u1,
    -                ///  Channel 3 capture/compare interrupt enable
    -                CH3IE: u1,
    -                reserved6: u1,
    -                ///  Trigger interrupt enable
    -                TRGIE: u1,
    -                reserved8: u1,
    -                ///  Update DMA request enable
    -                UPDEN: u1,
    -                ///  Channel 0 capture/compare DMA request enable
    -                CH0DEN: u1,
    -                ///  Channel 1 capture/compare DMA request enable
    -                CH1DEN: u1,
    -                ///  Channel 2 capture/compare DMA request enable
    -                CH2DEN: u1,
    -                ///  Channel 3 capture/compare DMA request enable
    -                CH3DEN: u1,
    -                reserved14: u1,
    -                ///  Trigger DMA request enable
    -                TRGDEN: u1,
    -                padding: u1,
    -            }),
    -            reserved16: [2]u8,
    -            ///  interrupt flag register
    -            INTF: mmio.Mmio(packed struct(u16) {
    -                ///  Update interrupt flag
    -                UPIF: u1,
    -                ///  Channel 0 capture/compare interrupt flag
    -                CH0IF: u1,
    -                ///  Channel 1 capture/compare interrupt flag
    -                CH1IF: u1,
    -                ///  Channel 2 capture/compare interrupt enable
    -                CH2IF: u1,
    -                ///  Channel 3 capture/compare interrupt enable
    -                CH3IF: u1,
    -                reserved6: u1,
    -                ///  Trigger interrupt flag
    -                TRGIF: u1,
    -                reserved9: u2,
    -                ///  Channel 0 over capture flag
    -                CH0OF: u1,
    -                ///  Channel 1 over capture flag
    -                CH1OF: u1,
    -                ///  Channel 2 over capture flag
    -                CH2OF: u1,
    -                ///  Channel 3 over capture flag
    -                CH3OF: u1,
    -                padding: u3,
    -            }),
    -            reserved20: [2]u8,
    -            ///  event generation register
    -            SWEVG: mmio.Mmio(packed struct(u16) {
    -                ///  Update generation
    -                UPG: u1,
    -                ///  Channel 0 capture or compare event generation
    -                CH0G: u1,
    -                ///  Channel 1 capture or compare event generation
    -                CH1G: u1,
    -                ///  Channel 2 capture or compare event generation
    -                CH2G: u1,
    -                ///  Channel 3 capture or compare event generation
    -                CH3G: u1,
    -                reserved6: u1,
    -                ///  Trigger event generation
    -                TRGG: u1,
    -                padding: u9,
    -            }),
    -            reserved24: [2]u8,
    -            ///  Channel control register 0 (output mode)
    -            CHCTL0_Output: mmio.Mmio(packed struct(u16) {
    -                ///  Channel 0 I/O mode selection
    -                CH0MS: u2,
    -                ///  Channel 0 output compare fast enable
    -                CH0COMFEN: u1,
    -                ///  Channel 0 compare output shadow enable
    -                CH0COMSEN: u1,
    -                ///  Channel 0 compare output control
    -                CH0COMCTL: u3,
    -                ///  Channel 0 output compare clear enable
    -                CH0COMCEN: u1,
    -                ///  Channel 1 mode selection
    -                CH1MS: u2,
    -                ///  Channel 1 output compare fast enable
    -                CH1COMFEN: u1,
    -                ///  Channel 1 output compare shadow enable
    -                CH1COMSEN: u1,
    -                ///  Channel 1 compare output control
    -                CH1COMCTL: u3,
    -                ///  Channel 1 output compare clear enable
    -                CH1COMCEN: u1,
    -            }),
    -            reserved28: [2]u8,
    -            ///  Channel control register 1 (output mode)
    -            CHCTL1_Output: mmio.Mmio(packed struct(u16) {
    -                ///  Channel 2 I/O mode selection
    -                CH2MS: u2,
    -                ///  Channel 2 output compare fast enable
    -                CH2COMFEN: u1,
    -                ///  Channel 2 compare output shadow enable
    -                CH2COMSEN: u1,
    -                ///  Channel 2 compare output control
    -                CH2COMCTL: u3,
    -                ///  Channel 2 output compare clear enable
    -                CH2COMCEN: u1,
    -                ///  Channel 3 mode selection
    -                CH3MS: u2,
    -                ///  Channel 3 output compare fast enable
    -                CH3COMFEN: u1,
    -                ///  Channel 3 output compare shadow enable
    -                CH3COMSEN: u1,
    -                ///  Channel 3 compare output control
    -                CH3COMCTL: u3,
    -                ///  Channel 3 output compare clear enable
    -                CH3COMCEN: u1,
    -            }),
    -            reserved32: [2]u8,
    -            ///  Channel control register 2
    -            CHCTL2: mmio.Mmio(packed struct(u16) {
    -                ///  Channel 0 capture/compare function enable
    -                CH0EN: u1,
    -                ///  Channel 0 capture/compare function polarity
    -                CH0P: u1,
    -                reserved4: u2,
    -                ///  Channel 1 capture/compare function enable
    -                CH1EN: u1,
    -                ///  Channel 1 capture/compare function polarity
    -                CH1P: u1,
    -                reserved8: u2,
    -                ///  Channel 2 capture/compare function enable
    -                CH2EN: u1,
    -                ///  Channel 2 capture/compare function polarity
    -                CH2P: u1,
    -                reserved12: u2,
    -                ///  Channel 3 capture/compare function enable
    -                CH3EN: u1,
    -                ///  Channel 3 capture/compare function polarity
    -                CH3P: u1,
    -                padding: u2,
    -            }),
    -            reserved36: [2]u8,
    -            ///  Counter register
    -            CNT: mmio.Mmio(packed struct(u16) {
    -                ///  counter value
    -                CNT: u16,
    -            }),
    -            reserved40: [2]u8,
    -            ///  Prescaler register
    -            PSC: mmio.Mmio(packed struct(u16) {
    -                ///  Prescaler value of the counter clock
    -                PSC: u16,
    -            }),
    -            reserved44: [2]u8,
    -            ///  Counter auto reload register
    -            CAR: mmio.Mmio(packed struct(u16) {
    -                ///  Counter auto reload value
    -                CARL: u16,
    -            }),
    -            reserved52: [6]u8,
    -            ///  Channel 0 capture/compare value register
    -            CH0CV: mmio.Mmio(packed struct(u32) {
    -                ///  Capture or compare value of channel 0
    -                CH0VAL: u16,
    -                padding: u16,
    -            }),
    -            ///  Channel 1 capture/compare value register
    -            CH1CV: mmio.Mmio(packed struct(u32) {
    -                ///  Capture or compare value of channel1
    -                CH1VAL: u16,
    -                padding: u16,
    -            }),
    -            ///  Channel 2 capture/compare value register
    -            CH2CV: mmio.Mmio(packed struct(u32) {
    -                ///  Capture or compare value of channel 2
    -                CH2VAL: u16,
    -                padding: u16,
    -            }),
    -            ///  Channel 3 capture/compare value register
    -            CH3CV: mmio.Mmio(packed struct(u32) {
    -                ///  Capture or compare value of channel 3
    -                CH3VAL: u16,
    -                padding: u16,
    -            }),
    -            reserved72: [4]u8,
    -            ///  DMA configuration register
    -            DMACFG: mmio.Mmio(packed struct(u16) {
    -                ///  DMA transfer access start address
    -                DMATA: u5,
    -                reserved8: u3,
    -                ///  DMA transfer count
    -                DMATC: u5,
    -                padding: u3,
    -            }),
    -            reserved76: [2]u8,
    -            ///  DMA transfer buffer register
    -            DMATB: mmio.Mmio(packed struct(u32) {
    -                ///  DMA transfer buffer
    -                DMATB: u16,
    -                padding: u16,
    -            }),
    -        };
    -    };
    -};
    
    From 0eb570d9693d85e894f69a10e3bc915368cba004 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20Quei=C3=9Fner?= 
    Date: Fri, 22 Sep 2023 09:04:10 +0200
    Subject: [PATCH 210/286] Rework for MicroZig Gen 2 (#26)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Co-authored-by: Felix "xq" Queißner 
    ---
     build.zig               |   186 +-
     src/boards.zig          |    35 -
     src/chips.zig           |    48 -
     src/chips/STM32F103.zig | 10854 --------------------
     src/chips/STM32F303.zig | 13076 ------------------------
     src/chips/STM32F407.zig | 20004 -------------------------------------
     src/chips/STM32F429.zig | 20419 --------------------------------------
     7 files changed, 150 insertions(+), 64472 deletions(-)
     delete mode 100644 src/boards.zig
     delete mode 100644 src/chips.zig
     delete mode 100644 src/chips/STM32F103.zig
     delete mode 100644 src/chips/STM32F303.zig
     delete mode 100644 src/chips/STM32F407.zig
     delete mode 100644 src/chips/STM32F429.zig
    
    diff --git a/build.zig b/build.zig
    index 56ed4e58a..cea2a1682 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -1,38 +1,152 @@
     const std = @import("std");
    -const microzig = @import("deps/microzig/build.zig");
    -
    -pub const boards = @import("src/boards.zig");
    -pub const chips = @import("src/chips.zig");
    -
    -pub fn build(b: *std.build.Builder) void {
    -    const optimize = b.standardOptimizeOption(.{});
    -    inline for (@typeInfo(boards).Struct.decls) |decl| {
    -        if (!decl.is_pub)
    -            continue;
    -
    -        const exe = microzig.addEmbeddedExecutable(b, .{
    -            .name = @field(boards, decl.name).name ++ ".minimal",
    -            .source_file = .{
    -                .path = "test/programs/minimal.zig",
    -            },
    -            .backing = .{ .board = @field(boards, decl.name) },
    -            .optimize = optimize,
    -        });
    -        exe.installArtifact(b);
    -    }
    -
    -    inline for (@typeInfo(chips).Struct.decls) |decl| {
    -        if (!decl.is_pub)
    -            continue;
    -
    -        const exe = microzig.addEmbeddedExecutable(b, .{
    -            .name = @field(chips, decl.name).name ++ ".minimal",
    -            .source_file = .{
    -                .path = "test/programs/minimal.zig",
    -            },
    -            .backing = .{ .chip = @field(chips, decl.name) },
    -            .optimize = optimize,
    -        });
    -        exe.installArtifact(b);
    -    }
    +const microzig = @import("root").dependencies.imports.microzig; // HACK: Please import MicroZig always under the name `microzig`. Otherwise the RP2040 module will fail to be properly imported.
    +
    +fn root() []const u8 {
    +    return comptime (std.fs.path.dirname(@src().file) orelse ".");
    +}
    +const build_root = root();
    +
    +////////////////////////////////////////
    +//      MicroZig Gen 2 Interface      //
    +////////////////////////////////////////
    +
    +pub fn build(b: *std.Build) !void {
    +    _ = b;
    +    //  Dummy func to make package manager happy
     }
    +
    +pub const chips = struct {
    +    pub const stm32f103x8 = .{
    +        .preferred_format = .elf,
    +        .chip = .{
    +            .name = "STM32F103",
    +            .cpu = .cortex_m3,
    +            .memory_regions = &.{
    +                .{ .offset = 0x08000000, .length = 64 * 1024, .kind = .flash },
    +                .{ .offset = 0x20000000, .length = 20 * 1024, .kind = .ram },
    +            },
    +            .register_definition = .{
    +                .json = .{ .cwd_relative = build_root ++ "/src/chips/STM32F103.json" },
    +            },
    +        },
    +    };
    +
    +    pub const stm32f303vc = .{
    +        .preferred_format = .elf,
    +        .chip = .{
    +            .name = "STM32F303",
    +            .cpu = .cortex_m4,
    +            .memory_regions = &.{
    +                .{ .offset = 0x08000000, .length = 256 * 1024, .kind = .flash },
    +                .{ .offset = 0x20000000, .length = 40 * 1024, .kind = .ram },
    +            },
    +            .register_definition = .{
    +                .json = .{ .cwd_relative = build_root ++ "/src/chips/STM32F303.json" },
    +            },
    +        },
    +    };
    +
    +    pub const stm32f407vg = .{
    +        .preferred_format = .elf,
    +        .chip = .{
    +            .name = "STM32F407",
    +            .cpu = .cortex_m4,
    +            .memory_regions = &.{
    +                .{ .offset = 0x08000000, .length = 1024 * 1024, .kind = .flash },
    +                .{ .offset = 0x20000000, .length = 128 * 1024, .kind = .ram },
    +                .{ .offset = 0x10000000, .length = 64 * 1024, .kind = .ram }, // CCM RAM
    +            },
    +            .register_definition = .{
    +                .json = .{ .cwd_relative = build_root ++ "/src/chips/STM32F407.json" },
    +            },
    +        },
    +    };
    +
    +    pub const stm32f429zit6u = .{
    +        .preferred_format = .elf,
    +        .chip = .{
    +            .name = "STM32F429",
    +            .cpu = .cortex_m4,
    +            .memory_regions = &.{
    +                .{ .offset = 0x08000000, .length = 2048 * 1024, .kind = .flash },
    +                .{ .offset = 0x20000000, .length = 192 * 1024, .kind = .ram },
    +                .{ .offset = 0x10000000, .length = 64 * 1024, .kind = .ram }, // CCM RAM
    +            },
    +            .register_definition = .{
    +                .json = .{ .cwd_relative = build_root ++ "/src/chips/STM32F429.json" },
    +            },
    +        },
    +    };
    +};
    +
    +pub const boards = struct {
    +    pub const stm32f3discovery = .{
    +        .preferred_format = .elf,
    +        .chip = chips.stm32f303vc.chip,
    +        .board = .{
    +            .name = "STM32F3DISCOVERY",
    +            .source_file = .{ .path = build_root ++ "/src/boards/STM32F3DISCOVERY.zig" },
    +        },
    +    };
    +
    +    pub const stm32f4discovery = .{
    +        .preferred_format = .elf,
    +        .chip = chips.stm32f407vg.chip,
    +        .board = .{
    +            .name = "STM32F4DISCOVERY",
    +            .source_file = .{ .path = build_root ++ "/src/boards/STM32F4DISCOVERY.zig" },
    +        },
    +    };
    +
    +    pub const stm3240geval = .{
    +        .preferred_format = .elf,
    +        .chip = chips.stm32f407vg.chip,
    +        .board = .{
    +            .name = "STM3240G_EVAL",
    +            .source_file = .{ .path = build_root ++ "/src/boards/STM3240G_EVAL.zig" },
    +        },
    +    };
    +
    +    pub const stm32f429idiscovery = .{
    +        .preferred_format = .elf,
    +        .chip = chips.stm32f429zit6u.chip,
    +        .board = .{
    +            .name = "STM32F429IDISCOVERY",
    +            .source_file = .{ .path = build_root ++ "/src/boards/STM32F429IDISCOVERY.zig" },
    +        },
    +    };
    +};
    +
    +// pub fn build(b: *std.build.Builder) void {
    +//     _ = b;
    +// const optimize = b.standardOptimizeOption(.{});
    +// inline for (@typeInfo(boards).Struct.decls) |decl| {
    +//     if (!decl.is_pub)
    +//         continue;
    +
    +//     const exe = microzig.addEmbeddedExecutable(b, .{
    +//         .name = @field(boards, decl.name).name ++ ".minimal",
    +//         .source_file = .{
    +//             .path = "test/programs/minimal.zig",
    +//         },
    +//         .backing = .{ .board = @field(boards, decl.name) },
    +//         .optimize = optimize,
    +//     });
    +//     exe.installArtifact(b);
    +// }
    +
    +// inline for (@typeInfo(chips).Struct.decls) |decl| {
    +//     if (!decl.is_pub)
    +//         continue;
    +
    +//     const exe = microzig.addEmbeddedExecutable(b, .{
    +//         .name = @field(chips, decl.name).name ++ ".minimal",
    +//         .source_file = .{
    +//             .path = "test/programs/minimal.zig",
    +//         },
    +//         .backing = .{ .chip = @field(chips, decl.name) },
    +//         .optimize = optimize,
    +//     });
    +//     exe.installArtifact(b);
    +// }
    +// }
    diff --git a/src/boards.zig b/src/boards.zig
    deleted file mode 100644
    index 9f9c3fa5d..000000000
    --- a/src/boards.zig
    +++ /dev/null
    @@ -1,35 +0,0 @@
    -const std = @import("std");
    -const microzig = @import("../deps/microzig/build.zig");
    -const Board = microzig.Board;
    -
    -const chips = @import("chips.zig");
    -
    -fn root() []const u8 {
    -    return std.fs.path.dirname(@src().file) orelse unreachable;
    -}
    -
    -const root_path = root() ++ "/";
    -
    -pub const stm32f3discovery = Board{
    -    .name = "STM32F3DISCOVERY",
    -    .source = .{ .path = root_path ++ "boards/STM32F3DISCOVERY.zig" },
    -    .chip = chips.stm32f303vc,
    -};
    -
    -pub const stm32f4discovery = Board{
    -    .name = "STM32F4DISCOVERY",
    -    .source = .{ .path = root_path ++ "boards/STM32F4DISCOVERY.zig" },
    -    .chip = chips.stm32f407vg,
    -};
    -
    -pub const stm3240geval = Board{
    -    .name = "STM3240G_EVAL",
    -    .source = .{ .path = root_path ++ "boards/STM3240G_EVAL.zig" },
    -    .chip = chips.stm32f407vg,
    -};
    -
    -pub const stm32f429idiscovery = Board{
    -    .name = "STM32F429IDISCOVERY",
    -    .source = .{ .path = root_path ++ "boards/STM32F429IDISCOVERY.zig" },
    -    .chip = chips.stm32f429zit6u,
    -};
    diff --git a/src/chips.zig b/src/chips.zig
    deleted file mode 100644
    index c7a2eda64..000000000
    --- a/src/chips.zig
    +++ /dev/null
    @@ -1,48 +0,0 @@
    -const std = @import("std");
    -const microzig = @import("../deps/microzig/build.zig");
    -const Chip = microzig.Chip;
    -const MemoryRegion = microzig.MemoryRegion;
    -
    -fn root_dir() []const u8 {
    -    return std.fs.path.dirname(@src().file) orelse ".";
    -}
    -
    -pub const stm32f103x8 = Chip.from_standard_paths(root_dir(), .{
    -    .name = "STM32F103",
    -    .cpu = microzig.cpus.cortex_m3,
    -    .memory_regions = &.{
    -        MemoryRegion{ .offset = 0x08000000, .length = 64 * 1024, .kind = .flash },
    -        MemoryRegion{ .offset = 0x20000000, .length = 20 * 1024, .kind = .ram },
    -    },
    -});
    -
    -pub const stm32f303vc = Chip.from_standard_paths(root_dir(), .{
    -    .name = "STM32F303",
    -    .cpu = microzig.cpus.cortex_m4,
    -    .memory_regions = &.{
    -        MemoryRegion{ .offset = 0x08000000, .length = 256 * 1024, .kind = .flash },
    -        MemoryRegion{ .offset = 0x20000000, .length = 40 * 1024, .kind = .ram },
    -    },
    -});
    -
    -pub const stm32f407vg = Chip.from_standard_paths(root_dir(), .{
    -    .name = "STM32F407",
    -    .cpu = microzig.cpus.cortex_m4,
    -    .memory_regions = &.{
    -        MemoryRegion{ .offset = 0x08000000, .length = 1024 * 1024, .kind = .flash },
    -        MemoryRegion{ .offset = 0x20000000, .length = 128 * 1024, .kind = .ram },
    -        // CCM RAM
    -        MemoryRegion{ .offset = 0x10000000, .length = 64 * 1024, .kind = .ram },
    -    },
    -});
    -
    -pub const stm32f429zit6u = Chip.from_standard_paths(root_dir(), .{
    -    .name = "STM32F429",
    -    .cpu = microzig.cpus.cortex_m4,
    -    .memory_regions = &.{
    -        MemoryRegion{ .offset = 0x08000000, .length = 2048 * 1024, .kind = .flash },
    -        MemoryRegion{ .offset = 0x20000000, .length = 192 * 1024, .kind = .ram },
    -        // CCM RAM
    -        MemoryRegion{ .offset = 0x10000000, .length = 64 * 1024, .kind = .ram },
    -    },
    -});
    diff --git a/src/chips/STM32F103.zig b/src/chips/STM32F103.zig
    deleted file mode 100644
    index 5a174116b..000000000
    --- a/src/chips/STM32F103.zig
    +++ /dev/null
    @@ -1,10854 +0,0 @@
    -const micro = @import("microzig");
    -const mmio = micro.mmio;
    -
    -pub const devices = struct {
    -    ///  STM32F103
    -    pub const STM32F103 = struct {
    -        pub const properties = struct {
    -            pub const @"cpu.nvic_prio_bits" = "4";
    -            pub const @"cpu.mpu" = "false";
    -            pub const @"cpu.fpu" = "false";
    -            pub const @"cpu.revision" = "r1p1";
    -            pub const @"cpu.vendor_systick_config" = "false";
    -            pub const @"cpu.endian" = "little";
    -            pub const @"cpu.name" = "CM3";
    -        };
    -
    -        pub const VectorTable = extern struct {
    -            const Handler = micro.interrupt.Handler;
    -            const unhandled = micro.interrupt.unhandled;
    -
    -            initial_stack_pointer: u32,
    -            Reset: Handler = unhandled,
    -            NMI: Handler = unhandled,
    -            HardFault: Handler = unhandled,
    -            MemManageFault: Handler = unhandled,
    -            BusFault: Handler = unhandled,
    -            UsageFault: Handler = unhandled,
    -            reserved5: [4]u32 = undefined,
    -            SVCall: Handler = unhandled,
    -            DebugMonitor: Handler = unhandled,
    -            reserved11: [1]u32 = undefined,
    -            PendSV: Handler = unhandled,
    -            SysTick: Handler = unhandled,
    -            ///  Window Watchdog interrupt
    -            WWDG: Handler = unhandled,
    -            ///  PVD through EXTI line detection interrupt
    -            PVD: Handler = unhandled,
    -            ///  Tamper interrupt
    -            TAMPER: Handler = unhandled,
    -            ///  RTC global interrupt
    -            RTC: Handler = unhandled,
    -            ///  Flash global interrupt
    -            FLASH: Handler = unhandled,
    -            ///  RCC global interrupt
    -            RCC: Handler = unhandled,
    -            reserved20: [5]u32 = undefined,
    -            ///  DMA1 Channel1 global interrupt
    -            DMA1_Channel1: Handler = unhandled,
    -            reserved26: [6]u32 = undefined,
    -            ///  ADC1 and ADC2 global interrupt
    -            ADC1_2: Handler = unhandled,
    -            ///  USB High Priority or CAN TX interrupts
    -            USB_HP_CAN_TX: Handler = unhandled,
    -            reserved34: [1]u32 = undefined,
    -            ///  CAN RX1 interrupt
    -            CAN_RX1: Handler = unhandled,
    -            reserved36: [2]u32 = undefined,
    -            ///  TIM1 Break interrupt
    -            TIM1_BRK: Handler = unhandled,
    -            ///  TIM1 Update interrupt
    -            TIM1_UP: Handler = unhandled,
    -            ///  TIM1 Trigger and Commutation interrupts
    -            TIM1_TRG_COM: Handler = unhandled,
    -            reserved41: [1]u32 = undefined,
    -            ///  TIM2 global interrupt
    -            TIM2: Handler = unhandled,
    -            ///  TIM3 global interrupt
    -            TIM3: Handler = unhandled,
    -            ///  TIM4 global interrupt
    -            TIM4: Handler = unhandled,
    -            ///  I2C1 event interrupt
    -            I2C1_EV: Handler = unhandled,
    -            reserved46: [1]u32 = undefined,
    -            ///  I2C2 event interrupt
    -            I2C2_EV: Handler = unhandled,
    -            reserved48: [1]u32 = undefined,
    -            ///  SPI1 global interrupt
    -            SPI1: Handler = unhandled,
    -            ///  SPI2 global interrupt
    -            SPI2: Handler = unhandled,
    -            ///  USART1 global interrupt
    -            USART1: Handler = unhandled,
    -            ///  USART2 global interrupt
    -            USART2: Handler = unhandled,
    -            ///  USART3 global interrupt
    -            USART3: Handler = unhandled,
    -            reserved54: [3]u32 = undefined,
    -            ///  TIM8 Break interrupt
    -            TIM8_BRK: Handler = unhandled,
    -            reserved58: [3]u32 = undefined,
    -            ///  ADC3 global interrupt
    -            ADC3: Handler = unhandled,
    -            ///  FSMC global interrupt
    -            FSMC: Handler = unhandled,
    -            ///  SDIO global interrupt
    -            SDIO: Handler = unhandled,
    -            ///  TIM5 global interrupt
    -            TIM5: Handler = unhandled,
    -            ///  SPI3 global interrupt
    -            SPI3: Handler = unhandled,
    -            ///  UART4 global interrupt
    -            UART4: Handler = unhandled,
    -            ///  UART5 global interrupt
    -            UART5: Handler = unhandled,
    -            ///  TIM6 global interrupt
    -            TIM6: Handler = unhandled,
    -            ///  TIM7 global interrupt
    -            TIM7: Handler = unhandled,
    -            ///  DMA2 Channel1 global interrupt
    -            DMA2_Channel1: Handler = unhandled,
    -        };
    -
    -        pub const peripherals = struct {
    -            ///  General purpose timer
    -            pub const TIM2 = @as(*volatile types.TIM2, @ptrFromInt(0x40000000));
    -            ///  General purpose timer
    -            pub const TIM3 = @as(*volatile types.TIM2, @ptrFromInt(0x40000400));
    -            ///  General purpose timer
    -            pub const TIM4 = @as(*volatile types.TIM2, @ptrFromInt(0x40000800));
    -            ///  General purpose timer
    -            pub const TIM5 = @as(*volatile types.TIM2, @ptrFromInt(0x40000c00));
    -            ///  Basic timer
    -            pub const TIM6 = @as(*volatile types.TIM6, @ptrFromInt(0x40001000));
    -            ///  Basic timer
    -            pub const TIM7 = @as(*volatile types.TIM6, @ptrFromInt(0x40001400));
    -            ///  General purpose timer
    -            pub const TIM12 = @as(*volatile types.TIM9, @ptrFromInt(0x40001800));
    -            ///  General purpose timer
    -            pub const TIM13 = @as(*volatile types.TIM10, @ptrFromInt(0x40001c00));
    -            ///  General purpose timer
    -            pub const TIM14 = @as(*volatile types.TIM10, @ptrFromInt(0x40002000));
    -            ///  Real time clock
    -            pub const RTC = @as(*volatile types.RTC, @ptrFromInt(0x40002800));
    -            ///  Window watchdog
    -            pub const WWDG = @as(*volatile types.WWDG, @ptrFromInt(0x40002c00));
    -            ///  Independent watchdog
    -            pub const IWDG = @as(*volatile types.IWDG, @ptrFromInt(0x40003000));
    -            ///  Serial peripheral interface
    -            pub const SPI2 = @as(*volatile types.SPI1, @ptrFromInt(0x40003800));
    -            ///  Serial peripheral interface
    -            pub const SPI3 = @as(*volatile types.SPI1, @ptrFromInt(0x40003c00));
    -            ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART2 = @as(*volatile types.USART1, @ptrFromInt(0x40004400));
    -            ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART3 = @as(*volatile types.USART1, @ptrFromInt(0x40004800));
    -            ///  Universal asynchronous receiver transmitter
    -            pub const UART4 = @as(*volatile types.UART4, @ptrFromInt(0x40004c00));
    -            ///  Universal asynchronous receiver transmitter
    -            pub const UART5 = @as(*volatile types.UART5, @ptrFromInt(0x40005000));
    -            ///  Inter integrated circuit
    -            pub const I2C1 = @as(*volatile types.I2C1, @ptrFromInt(0x40005400));
    -            ///  Inter integrated circuit
    -            pub const I2C2 = @as(*volatile types.I2C1, @ptrFromInt(0x40005800));
    -            ///  Universal serial bus full-speed device interface
    -            pub const USB = @as(*volatile types.USB, @ptrFromInt(0x40005c00));
    -            ///  Controller area network
    -            pub const CAN1 = @as(*volatile types.CAN1, @ptrFromInt(0x40006400));
    -            ///  Controller area network
    -            pub const CAN2 = @as(*volatile types.CAN1, @ptrFromInt(0x40006800));
    -            ///  Backup registers
    -            pub const BKP = @as(*volatile types.BKP, @ptrFromInt(0x40006c00));
    -            ///  Power control
    -            pub const PWR = @as(*volatile types.PWR, @ptrFromInt(0x40007000));
    -            ///  Digital to analog converter
    -            pub const DAC = @as(*volatile types.DAC, @ptrFromInt(0x40007400));
    -            ///  Alternate function I/O
    -            pub const AFIO = @as(*volatile types.AFIO, @ptrFromInt(0x40010000));
    -            ///  EXTI
    -            pub const EXTI = @as(*volatile types.EXTI, @ptrFromInt(0x40010400));
    -            ///  General purpose I/O
    -            pub const GPIOA = @as(*volatile types.GPIOA, @ptrFromInt(0x40010800));
    -            ///  General purpose I/O
    -            pub const GPIOB = @as(*volatile types.GPIOA, @ptrFromInt(0x40010c00));
    -            ///  General purpose I/O
    -            pub const GPIOC = @as(*volatile types.GPIOA, @ptrFromInt(0x40011000));
    -            ///  General purpose I/O
    -            pub const GPIOD = @as(*volatile types.GPIOA, @ptrFromInt(0x40011400));
    -            ///  General purpose I/O
    -            pub const GPIOE = @as(*volatile types.GPIOA, @ptrFromInt(0x40011800));
    -            ///  General purpose I/O
    -            pub const GPIOF = @as(*volatile types.GPIOA, @ptrFromInt(0x40011c00));
    -            ///  General purpose I/O
    -            pub const GPIOG = @as(*volatile types.GPIOA, @ptrFromInt(0x40012000));
    -            ///  Analog to digital converter
    -            pub const ADC1 = @as(*volatile types.ADC1, @ptrFromInt(0x40012400));
    -            ///  Analog to digital converter
    -            pub const ADC2 = @as(*volatile types.ADC2, @ptrFromInt(0x40012800));
    -            ///  Advanced timer
    -            pub const TIM1 = @as(*volatile types.TIM1, @ptrFromInt(0x40012c00));
    -            ///  Serial peripheral interface
    -            pub const SPI1 = @as(*volatile types.SPI1, @ptrFromInt(0x40013000));
    -            ///  Advanced timer
    -            pub const TIM8 = @as(*volatile types.TIM1, @ptrFromInt(0x40013400));
    -            ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART1 = @as(*volatile types.USART1, @ptrFromInt(0x40013800));
    -            ///  Analog to digital converter
    -            pub const ADC3 = @as(*volatile types.ADC2, @ptrFromInt(0x40013c00));
    -            ///  General purpose timer
    -            pub const TIM9 = @as(*volatile types.TIM9, @ptrFromInt(0x40014c00));
    -            ///  General purpose timer
    -            pub const TIM10 = @as(*volatile types.TIM10, @ptrFromInt(0x40015000));
    -            ///  General purpose timer
    -            pub const TIM11 = @as(*volatile types.TIM10, @ptrFromInt(0x40015400));
    -            ///  Secure digital input/output interface
    -            pub const SDIO = @as(*volatile types.SDIO, @ptrFromInt(0x40018000));
    -            ///  DMA controller
    -            pub const DMA1 = @as(*volatile types.DMA1, @ptrFromInt(0x40020000));
    -            ///  DMA controller
    -            pub const DMA2 = @as(*volatile types.DMA1, @ptrFromInt(0x40020400));
    -            ///  Reset and clock control
    -            pub const RCC = @as(*volatile types.RCC, @ptrFromInt(0x40021000));
    -            ///  FLASH
    -            pub const FLASH = @as(*volatile types.FLASH, @ptrFromInt(0x40022000));
    -            ///  CRC calculation unit
    -            pub const CRC = @as(*volatile types.CRC, @ptrFromInt(0x40023000));
    -            ///  Ethernet: media access control
    -            pub const ETHERNET_MAC = @as(*volatile types.ETHERNET_MAC, @ptrFromInt(0x40028000));
    -            ///  Ethernet: MAC management counters
    -            pub const ETHERNET_MMC = @as(*volatile types.ETHERNET_MMC, @ptrFromInt(0x40028100));
    -            ///  Ethernet: Precision time protocol
    -            pub const ETHERNET_PTP = @as(*volatile types.ETHERNET_PTP, @ptrFromInt(0x40028700));
    -            ///  Ethernet: DMA controller operation
    -            pub const ETHERNET_DMA = @as(*volatile types.ETHERNET_DMA, @ptrFromInt(0x40029000));
    -            ///  USB on the go full speed
    -            pub const OTG_FS_GLOBAL = @as(*volatile types.OTG_FS_GLOBAL, @ptrFromInt(0x50000000));
    -            ///  USB on the go full speed
    -            pub const OTG_FS_HOST = @as(*volatile types.OTG_FS_HOST, @ptrFromInt(0x50000400));
    -            ///  USB on the go full speed
    -            pub const OTG_FS_DEVICE = @as(*volatile types.OTG_FS_DEVICE, @ptrFromInt(0x50000800));
    -            ///  USB on the go full speed
    -            pub const OTG_FS_PWRCLK = @as(*volatile types.OTG_FS_PWRCLK, @ptrFromInt(0x50000e00));
    -            ///  Flexible static memory controller
    -            pub const FSMC = @as(*volatile types.FSMC, @ptrFromInt(0xa0000000));
    -            ///  System control block ACTLR
    -            pub const SCB_ACTRL = @as(*volatile types.SCB_ACTRL, @ptrFromInt(0xe000e008));
    -            ///  SysTick timer
    -            pub const STK = @as(*volatile types.STK, @ptrFromInt(0xe000e010));
    -            ///  Nested Vectored Interrupt Controller
    -            pub const NVIC = @as(*volatile types.NVIC, @ptrFromInt(0xe000e100));
    -            ///  System control block
    -            pub const SCB = @as(*volatile types.SCB, @ptrFromInt(0xe000ed00));
    -            ///  Memory protection unit
    -            pub const MPU = @as(*volatile types.MPU, @ptrFromInt(0xe000ed90));
    -            ///  Nested vectored interrupt controller
    -            pub const NVIC_STIR = @as(*volatile types.NVIC_STIR, @ptrFromInt(0xe000ef00));
    -            ///  Debug support
    -            pub const DBG = @as(*volatile types.DBG, @ptrFromInt(0xe0042000));
    -        };
    -    };
    -};
    -
    -pub const types = struct {
    -    ///  Flexible static memory controller
    -    pub const FSMC = extern struct {
    -        ///  SRAM/NOR-Flash chip-select control register 1
    -        BCR1: mmio.Mmio(packed struct(u32) {
    -            ///  MBKEN
    -            MBKEN: u1,
    -            ///  MUXEN
    -            MUXEN: u1,
    -            ///  MTYP
    -            MTYP: u2,
    -            ///  MWID
    -            MWID: u2,
    -            ///  FACCEN
    -            FACCEN: u1,
    -            reserved8: u1,
    -            ///  BURSTEN
    -            BURSTEN: u1,
    -            ///  WAITPOL
    -            WAITPOL: u1,
    -            reserved11: u1,
    -            ///  WAITCFG
    -            WAITCFG: u1,
    -            ///  WREN
    -            WREN: u1,
    -            ///  WAITEN
    -            WAITEN: u1,
    -            ///  EXTMOD
    -            EXTMOD: u1,
    -            ///  ASYNCWAIT
    -            ASYNCWAIT: u1,
    -            reserved19: u3,
    -            ///  CBURSTRW
    -            CBURSTRW: u1,
    -            padding: u12,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select timing register 1
    -        BTR1: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            ///  BUSTURN
    -            BUSTURN: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select control register 2
    -        BCR2: mmio.Mmio(packed struct(u32) {
    -            ///  MBKEN
    -            MBKEN: u1,
    -            ///  MUXEN
    -            MUXEN: u1,
    -            ///  MTYP
    -            MTYP: u2,
    -            ///  MWID
    -            MWID: u2,
    -            ///  FACCEN
    -            FACCEN: u1,
    -            reserved8: u1,
    -            ///  BURSTEN
    -            BURSTEN: u1,
    -            ///  WAITPOL
    -            WAITPOL: u1,
    -            ///  WRAPMOD
    -            WRAPMOD: u1,
    -            ///  WAITCFG
    -            WAITCFG: u1,
    -            ///  WREN
    -            WREN: u1,
    -            ///  WAITEN
    -            WAITEN: u1,
    -            ///  EXTMOD
    -            EXTMOD: u1,
    -            ///  ASYNCWAIT
    -            ASYNCWAIT: u1,
    -            reserved19: u3,
    -            ///  CBURSTRW
    -            CBURSTRW: u1,
    -            padding: u12,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select timing register 2
    -        BTR2: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            ///  BUSTURN
    -            BUSTURN: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select control register 3
    -        BCR3: mmio.Mmio(packed struct(u32) {
    -            ///  MBKEN
    -            MBKEN: u1,
    -            ///  MUXEN
    -            MUXEN: u1,
    -            ///  MTYP
    -            MTYP: u2,
    -            ///  MWID
    -            MWID: u2,
    -            ///  FACCEN
    -            FACCEN: u1,
    -            reserved8: u1,
    -            ///  BURSTEN
    -            BURSTEN: u1,
    -            ///  WAITPOL
    -            WAITPOL: u1,
    -            ///  WRAPMOD
    -            WRAPMOD: u1,
    -            ///  WAITCFG
    -            WAITCFG: u1,
    -            ///  WREN
    -            WREN: u1,
    -            ///  WAITEN
    -            WAITEN: u1,
    -            ///  EXTMOD
    -            EXTMOD: u1,
    -            ///  ASYNCWAIT
    -            ASYNCWAIT: u1,
    -            reserved19: u3,
    -            ///  CBURSTRW
    -            CBURSTRW: u1,
    -            padding: u12,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select timing register 3
    -        BTR3: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            ///  BUSTURN
    -            BUSTURN: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select control register 4
    -        BCR4: mmio.Mmio(packed struct(u32) {
    -            ///  MBKEN
    -            MBKEN: u1,
    -            ///  MUXEN
    -            MUXEN: u1,
    -            ///  MTYP
    -            MTYP: u2,
    -            ///  MWID
    -            MWID: u2,
    -            ///  FACCEN
    -            FACCEN: u1,
    -            reserved8: u1,
    -            ///  BURSTEN
    -            BURSTEN: u1,
    -            ///  WAITPOL
    -            WAITPOL: u1,
    -            ///  WRAPMOD
    -            WRAPMOD: u1,
    -            ///  WAITCFG
    -            WAITCFG: u1,
    -            ///  WREN
    -            WREN: u1,
    -            ///  WAITEN
    -            WAITEN: u1,
    -            ///  EXTMOD
    -            EXTMOD: u1,
    -            ///  ASYNCWAIT
    -            ASYNCWAIT: u1,
    -            reserved19: u3,
    -            ///  CBURSTRW
    -            CBURSTRW: u1,
    -            padding: u12,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select timing register 4
    -        BTR4: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            ///  BUSTURN
    -            BUSTURN: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -        reserved96: [64]u8,
    -        ///  PC Card/NAND Flash control register 2
    -        PCR2: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  PWAITEN
    -            PWAITEN: u1,
    -            ///  PBKEN
    -            PBKEN: u1,
    -            ///  PTYP
    -            PTYP: u1,
    -            ///  PWID
    -            PWID: u2,
    -            ///  ECCEN
    -            ECCEN: u1,
    -            reserved9: u2,
    -            ///  TCLR
    -            TCLR: u4,
    -            ///  TAR
    -            TAR: u4,
    -            ///  ECCPS
    -            ECCPS: u3,
    -            padding: u12,
    -        }),
    -        ///  FIFO status and interrupt register 2
    -        SR2: mmio.Mmio(packed struct(u32) {
    -            ///  IRS
    -            IRS: u1,
    -            ///  ILS
    -            ILS: u1,
    -            ///  IFS
    -            IFS: u1,
    -            ///  IREN
    -            IREN: u1,
    -            ///  ILEN
    -            ILEN: u1,
    -            ///  IFEN
    -            IFEN: u1,
    -            ///  FEMPT
    -            FEMPT: u1,
    -            padding: u25,
    -        }),
    -        ///  Common memory space timing register 2
    -        PMEM2: mmio.Mmio(packed struct(u32) {
    -            ///  MEMSETx
    -            MEMSETx: u8,
    -            ///  MEMWAITx
    -            MEMWAITx: u8,
    -            ///  MEMHOLDx
    -            MEMHOLDx: u8,
    -            ///  MEMHIZx
    -            MEMHIZx: u8,
    -        }),
    -        ///  Attribute memory space timing register 2
    -        PATT2: mmio.Mmio(packed struct(u32) {
    -            ///  Attribute memory x setup time
    -            ATTSETx: u8,
    -            ///  Attribute memory x wait time
    -            ATTWAITx: u8,
    -            ///  Attribute memory x hold time
    -            ATTHOLDx: u8,
    -            ///  Attribute memory x databus HiZ time
    -            ATTHIZx: u8,
    -        }),
    -        reserved116: [4]u8,
    -        ///  ECC result register 2
    -        ECCR2: mmio.Mmio(packed struct(u32) {
    -            ///  ECC result
    -            ECCx: u32,
    -        }),
    -        reserved128: [8]u8,
    -        ///  PC Card/NAND Flash control register 3
    -        PCR3: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  PWAITEN
    -            PWAITEN: u1,
    -            ///  PBKEN
    -            PBKEN: u1,
    -            ///  PTYP
    -            PTYP: u1,
    -            ///  PWID
    -            PWID: u2,
    -            ///  ECCEN
    -            ECCEN: u1,
    -            reserved9: u2,
    -            ///  TCLR
    -            TCLR: u4,
    -            ///  TAR
    -            TAR: u4,
    -            ///  ECCPS
    -            ECCPS: u3,
    -            padding: u12,
    -        }),
    -        ///  FIFO status and interrupt register 3
    -        SR3: mmio.Mmio(packed struct(u32) {
    -            ///  IRS
    -            IRS: u1,
    -            ///  ILS
    -            ILS: u1,
    -            ///  IFS
    -            IFS: u1,
    -            ///  IREN
    -            IREN: u1,
    -            ///  ILEN
    -            ILEN: u1,
    -            ///  IFEN
    -            IFEN: u1,
    -            ///  FEMPT
    -            FEMPT: u1,
    -            padding: u25,
    -        }),
    -        ///  Common memory space timing register 3
    -        PMEM3: mmio.Mmio(packed struct(u32) {
    -            ///  MEMSETx
    -            MEMSETx: u8,
    -            ///  MEMWAITx
    -            MEMWAITx: u8,
    -            ///  MEMHOLDx
    -            MEMHOLDx: u8,
    -            ///  MEMHIZx
    -            MEMHIZx: u8,
    -        }),
    -        ///  Attribute memory space timing register 3
    -        PATT3: mmio.Mmio(packed struct(u32) {
    -            ///  ATTSETx
    -            ATTSETx: u8,
    -            ///  ATTWAITx
    -            ATTWAITx: u8,
    -            ///  ATTHOLDx
    -            ATTHOLDx: u8,
    -            ///  ATTHIZx
    -            ATTHIZx: u8,
    -        }),
    -        reserved148: [4]u8,
    -        ///  ECC result register 3
    -        ECCR3: mmio.Mmio(packed struct(u32) {
    -            ///  ECCx
    -            ECCx: u32,
    -        }),
    -        reserved160: [8]u8,
    -        ///  PC Card/NAND Flash control register 4
    -        PCR4: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  PWAITEN
    -            PWAITEN: u1,
    -            ///  PBKEN
    -            PBKEN: u1,
    -            ///  PTYP
    -            PTYP: u1,
    -            ///  PWID
    -            PWID: u2,
    -            ///  ECCEN
    -            ECCEN: u1,
    -            reserved9: u2,
    -            ///  TCLR
    -            TCLR: u4,
    -            ///  TAR
    -            TAR: u4,
    -            ///  ECCPS
    -            ECCPS: u3,
    -            padding: u12,
    -        }),
    -        ///  FIFO status and interrupt register 4
    -        SR4: mmio.Mmio(packed struct(u32) {
    -            ///  IRS
    -            IRS: u1,
    -            ///  ILS
    -            ILS: u1,
    -            ///  IFS
    -            IFS: u1,
    -            ///  IREN
    -            IREN: u1,
    -            ///  ILEN
    -            ILEN: u1,
    -            ///  IFEN
    -            IFEN: u1,
    -            ///  FEMPT
    -            FEMPT: u1,
    -            padding: u25,
    -        }),
    -        ///  Common memory space timing register 4
    -        PMEM4: mmio.Mmio(packed struct(u32) {
    -            ///  MEMSETx
    -            MEMSETx: u8,
    -            ///  MEMWAITx
    -            MEMWAITx: u8,
    -            ///  MEMHOLDx
    -            MEMHOLDx: u8,
    -            ///  MEMHIZx
    -            MEMHIZx: u8,
    -        }),
    -        ///  Attribute memory space timing register 4
    -        PATT4: mmio.Mmio(packed struct(u32) {
    -            ///  ATTSETx
    -            ATTSETx: u8,
    -            ///  ATTWAITx
    -            ATTWAITx: u8,
    -            ///  ATTHOLDx
    -            ATTHOLDx: u8,
    -            ///  ATTHIZx
    -            ATTHIZx: u8,
    -        }),
    -        ///  I/O space timing register 4
    -        PIO4: mmio.Mmio(packed struct(u32) {
    -            ///  IOSETx
    -            IOSETx: u8,
    -            ///  IOWAITx
    -            IOWAITx: u8,
    -            ///  IOHOLDx
    -            IOHOLDx: u8,
    -            ///  IOHIZx
    -            IOHIZx: u8,
    -        }),
    -        reserved260: [80]u8,
    -        ///  SRAM/NOR-Flash write timing registers 1
    -        BWTR1: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            reserved20: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -        reserved268: [4]u8,
    -        ///  SRAM/NOR-Flash write timing registers 2
    -        BWTR2: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            reserved20: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -        reserved276: [4]u8,
    -        ///  SRAM/NOR-Flash write timing registers 3
    -        BWTR3: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            reserved20: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -        reserved284: [4]u8,
    -        ///  SRAM/NOR-Flash write timing registers 4
    -        BWTR4: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            reserved20: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -    };
    -
    -    ///  Power control
    -    pub const PWR = extern struct {
    -        ///  Power control register (PWR_CR)
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  Low Power Deep Sleep
    -            LPDS: u1,
    -            ///  Power Down Deep Sleep
    -            PDDS: u1,
    -            ///  Clear Wake-up Flag
    -            CWUF: u1,
    -            ///  Clear STANDBY Flag
    -            CSBF: u1,
    -            ///  Power Voltage Detector Enable
    -            PVDE: u1,
    -            ///  PVD Level Selection
    -            PLS: u3,
    -            ///  Disable Backup Domain write protection
    -            DBP: u1,
    -            padding: u23,
    -        }),
    -        ///  Power control register (PWR_CR)
    -        CSR: mmio.Mmio(packed struct(u32) {
    -            ///  Wake-Up Flag
    -            WUF: u1,
    -            ///  STANDBY Flag
    -            SBF: u1,
    -            ///  PVD Output
    -            PVDO: u1,
    -            reserved8: u5,
    -            ///  Enable WKUP pin
    -            EWUP: u1,
    -            padding: u23,
    -        }),
    -    };
    -
    -    ///  Reset and clock control
    -    pub const RCC = extern struct {
    -        ///  Clock control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  Internal High Speed clock enable
    -            HSION: u1,
    -            ///  Internal High Speed clock ready flag
    -            HSIRDY: u1,
    -            reserved3: u1,
    -            ///  Internal High Speed clock trimming
    -            HSITRIM: u5,
    -            ///  Internal High Speed clock Calibration
    -            HSICAL: u8,
    -            ///  External High Speed clock enable
    -            HSEON: u1,
    -            ///  External High Speed clock ready flag
    -            HSERDY: u1,
    -            ///  External High Speed clock Bypass
    -            HSEBYP: u1,
    -            ///  Clock Security System enable
    -            CSSON: u1,
    -            reserved24: u4,
    -            ///  PLL enable
    -            PLLON: u1,
    -            ///  PLL clock ready flag
    -            PLLRDY: u1,
    -            padding: u6,
    -        }),
    -        ///  Clock configuration register (RCC_CFGR)
    -        CFGR: mmio.Mmio(packed struct(u32) {
    -            ///  System clock Switch
    -            SW: u2,
    -            ///  System Clock Switch Status
    -            SWS: u2,
    -            ///  AHB prescaler
    -            HPRE: u4,
    -            ///  APB Low speed prescaler (APB1)
    -            PPRE1: u3,
    -            ///  APB High speed prescaler (APB2)
    -            PPRE2: u3,
    -            ///  ADC prescaler
    -            ADCPRE: u2,
    -            ///  PLL entry clock source
    -            PLLSRC: u1,
    -            ///  HSE divider for PLL entry
    -            PLLXTPRE: u1,
    -            ///  PLL Multiplication Factor
    -            PLLMUL: u4,
    -            ///  USB OTG FS prescaler
    -            OTGFSPRE: u1,
    -            reserved24: u1,
    -            ///  Microcontroller clock output
    -            MCO: u3,
    -            padding: u5,
    -        }),
    -        ///  Clock interrupt register (RCC_CIR)
    -        CIR: mmio.Mmio(packed struct(u32) {
    -            ///  LSI Ready Interrupt flag
    -            LSIRDYF: u1,
    -            ///  LSE Ready Interrupt flag
    -            LSERDYF: u1,
    -            ///  HSI Ready Interrupt flag
    -            HSIRDYF: u1,
    -            ///  HSE Ready Interrupt flag
    -            HSERDYF: u1,
    -            ///  PLL Ready Interrupt flag
    -            PLLRDYF: u1,
    -            reserved7: u2,
    -            ///  Clock Security System Interrupt flag
    -            CSSF: u1,
    -            ///  LSI Ready Interrupt Enable
    -            LSIRDYIE: u1,
    -            ///  LSE Ready Interrupt Enable
    -            LSERDYIE: u1,
    -            ///  HSI Ready Interrupt Enable
    -            HSIRDYIE: u1,
    -            ///  HSE Ready Interrupt Enable
    -            HSERDYIE: u1,
    -            ///  PLL Ready Interrupt Enable
    -            PLLRDYIE: u1,
    -            reserved16: u3,
    -            ///  LSI Ready Interrupt Clear
    -            LSIRDYC: u1,
    -            ///  LSE Ready Interrupt Clear
    -            LSERDYC: u1,
    -            ///  HSI Ready Interrupt Clear
    -            HSIRDYC: u1,
    -            ///  HSE Ready Interrupt Clear
    -            HSERDYC: u1,
    -            ///  PLL Ready Interrupt Clear
    -            PLLRDYC: u1,
    -            reserved23: u2,
    -            ///  Clock security system interrupt clear
    -            CSSC: u1,
    -            padding: u8,
    -        }),
    -        ///  APB2 peripheral reset register (RCC_APB2RSTR)
    -        APB2RSTR: mmio.Mmio(packed struct(u32) {
    -            ///  Alternate function I/O reset
    -            AFIORST: u1,
    -            reserved2: u1,
    -            ///  IO port A reset
    -            IOPARST: u1,
    -            ///  IO port B reset
    -            IOPBRST: u1,
    -            ///  IO port C reset
    -            IOPCRST: u1,
    -            ///  IO port D reset
    -            IOPDRST: u1,
    -            ///  IO port E reset
    -            IOPERST: u1,
    -            ///  IO port F reset
    -            IOPFRST: u1,
    -            ///  IO port G reset
    -            IOPGRST: u1,
    -            ///  ADC 1 interface reset
    -            ADC1RST: u1,
    -            ///  ADC 2 interface reset
    -            ADC2RST: u1,
    -            ///  TIM1 timer reset
    -            TIM1RST: u1,
    -            ///  SPI 1 reset
    -            SPI1RST: u1,
    -            ///  TIM8 timer reset
    -            TIM8RST: u1,
    -            ///  USART1 reset
    -            USART1RST: u1,
    -            ///  ADC 3 interface reset
    -            ADC3RST: u1,
    -            reserved19: u3,
    -            ///  TIM9 timer reset
    -            TIM9RST: u1,
    -            ///  TIM10 timer reset
    -            TIM10RST: u1,
    -            ///  TIM11 timer reset
    -            TIM11RST: u1,
    -            padding: u10,
    -        }),
    -        ///  APB1 peripheral reset register (RCC_APB1RSTR)
    -        APB1RSTR: mmio.Mmio(packed struct(u32) {
    -            ///  Timer 2 reset
    -            TIM2RST: u1,
    -            ///  Timer 3 reset
    -            TIM3RST: u1,
    -            ///  Timer 4 reset
    -            TIM4RST: u1,
    -            ///  Timer 5 reset
    -            TIM5RST: u1,
    -            ///  Timer 6 reset
    -            TIM6RST: u1,
    -            ///  Timer 7 reset
    -            TIM7RST: u1,
    -            ///  Timer 12 reset
    -            TIM12RST: u1,
    -            ///  Timer 13 reset
    -            TIM13RST: u1,
    -            ///  Timer 14 reset
    -            TIM14RST: u1,
    -            reserved11: u2,
    -            ///  Window watchdog reset
    -            WWDGRST: u1,
    -            reserved14: u2,
    -            ///  SPI2 reset
    -            SPI2RST: u1,
    -            ///  SPI3 reset
    -            SPI3RST: u1,
    -            reserved17: u1,
    -            ///  USART 2 reset
    -            USART2RST: u1,
    -            ///  USART 3 reset
    -            USART3RST: u1,
    -            ///  UART 4 reset
    -            UART4RST: u1,
    -            ///  UART 5 reset
    -            UART5RST: u1,
    -            ///  I2C1 reset
    -            I2C1RST: u1,
    -            ///  I2C2 reset
    -            I2C2RST: u1,
    -            ///  USB reset
    -            USBRST: u1,
    -            reserved25: u1,
    -            ///  CAN reset
    -            CANRST: u1,
    -            reserved27: u1,
    -            ///  Backup interface reset
    -            BKPRST: u1,
    -            ///  Power interface reset
    -            PWRRST: u1,
    -            ///  DAC interface reset
    -            DACRST: u1,
    -            padding: u2,
    -        }),
    -        ///  AHB Peripheral Clock enable register (RCC_AHBENR)
    -        AHBENR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA1 clock enable
    -            DMA1EN: u1,
    -            ///  DMA2 clock enable
    -            DMA2EN: u1,
    -            ///  SRAM interface clock enable
    -            SRAMEN: u1,
    -            reserved4: u1,
    -            ///  FLITF clock enable
    -            FLITFEN: u1,
    -            reserved6: u1,
    -            ///  CRC clock enable
    -            CRCEN: u1,
    -            reserved8: u1,
    -            ///  FSMC clock enable
    -            FSMCEN: u1,
    -            reserved10: u1,
    -            ///  SDIO clock enable
    -            SDIOEN: u1,
    -            padding: u21,
    -        }),
    -        ///  APB2 peripheral clock enable register (RCC_APB2ENR)
    -        APB2ENR: mmio.Mmio(packed struct(u32) {
    -            ///  Alternate function I/O clock enable
    -            AFIOEN: u1,
    -            reserved2: u1,
    -            ///  I/O port A clock enable
    -            IOPAEN: u1,
    -            ///  I/O port B clock enable
    -            IOPBEN: u1,
    -            ///  I/O port C clock enable
    -            IOPCEN: u1,
    -            ///  I/O port D clock enable
    -            IOPDEN: u1,
    -            ///  I/O port E clock enable
    -            IOPEEN: u1,
    -            ///  I/O port F clock enable
    -            IOPFEN: u1,
    -            ///  I/O port G clock enable
    -            IOPGEN: u1,
    -            ///  ADC 1 interface clock enable
    -            ADC1EN: u1,
    -            ///  ADC 2 interface clock enable
    -            ADC2EN: u1,
    -            ///  TIM1 Timer clock enable
    -            TIM1EN: u1,
    -            ///  SPI 1 clock enable
    -            SPI1EN: u1,
    -            ///  TIM8 Timer clock enable
    -            TIM8EN: u1,
    -            ///  USART1 clock enable
    -            USART1EN: u1,
    -            ///  ADC3 interface clock enable
    -            ADC3EN: u1,
    -            reserved19: u3,
    -            ///  TIM9 Timer clock enable
    -            TIM9EN: u1,
    -            ///  TIM10 Timer clock enable
    -            TIM10EN: u1,
    -            ///  TIM11 Timer clock enable
    -            TIM11EN: u1,
    -            padding: u10,
    -        }),
    -        ///  APB1 peripheral clock enable register (RCC_APB1ENR)
    -        APB1ENR: mmio.Mmio(packed struct(u32) {
    -            ///  Timer 2 clock enable
    -            TIM2EN: u1,
    -            ///  Timer 3 clock enable
    -            TIM3EN: u1,
    -            ///  Timer 4 clock enable
    -            TIM4EN: u1,
    -            ///  Timer 5 clock enable
    -            TIM5EN: u1,
    -            ///  Timer 6 clock enable
    -            TIM6EN: u1,
    -            ///  Timer 7 clock enable
    -            TIM7EN: u1,
    -            ///  Timer 12 clock enable
    -            TIM12EN: u1,
    -            ///  Timer 13 clock enable
    -            TIM13EN: u1,
    -            ///  Timer 14 clock enable
    -            TIM14EN: u1,
    -            reserved11: u2,
    -            ///  Window watchdog clock enable
    -            WWDGEN: u1,
    -            reserved14: u2,
    -            ///  SPI 2 clock enable
    -            SPI2EN: u1,
    -            ///  SPI 3 clock enable
    -            SPI3EN: u1,
    -            reserved17: u1,
    -            ///  USART 2 clock enable
    -            USART2EN: u1,
    -            ///  USART 3 clock enable
    -            USART3EN: u1,
    -            ///  UART 4 clock enable
    -            UART4EN: u1,
    -            ///  UART 5 clock enable
    -            UART5EN: u1,
    -            ///  I2C 1 clock enable
    -            I2C1EN: u1,
    -            ///  I2C 2 clock enable
    -            I2C2EN: u1,
    -            ///  USB clock enable
    -            USBEN: u1,
    -            reserved25: u1,
    -            ///  CAN clock enable
    -            CANEN: u1,
    -            reserved27: u1,
    -            ///  Backup interface clock enable
    -            BKPEN: u1,
    -            ///  Power interface clock enable
    -            PWREN: u1,
    -            ///  DAC interface clock enable
    -            DACEN: u1,
    -            padding: u2,
    -        }),
    -        ///  Backup domain control register (RCC_BDCR)
    -        BDCR: mmio.Mmio(packed struct(u32) {
    -            ///  External Low Speed oscillator enable
    -            LSEON: u1,
    -            ///  External Low Speed oscillator ready
    -            LSERDY: u1,
    -            ///  External Low Speed oscillator bypass
    -            LSEBYP: u1,
    -            reserved8: u5,
    -            ///  RTC clock source selection
    -            RTCSEL: u2,
    -            reserved15: u5,
    -            ///  RTC clock enable
    -            RTCEN: u1,
    -            ///  Backup domain software reset
    -            BDRST: u1,
    -            padding: u15,
    -        }),
    -        ///  Control/status register (RCC_CSR)
    -        CSR: mmio.Mmio(packed struct(u32) {
    -            ///  Internal low speed oscillator enable
    -            LSION: u1,
    -            ///  Internal low speed oscillator ready
    -            LSIRDY: u1,
    -            reserved24: u22,
    -            ///  Remove reset flag
    -            RMVF: u1,
    -            reserved26: u1,
    -            ///  PIN reset flag
    -            PINRSTF: u1,
    -            ///  POR/PDR reset flag
    -            PORRSTF: u1,
    -            ///  Software reset flag
    -            SFTRSTF: u1,
    -            ///  Independent watchdog reset flag
    -            IWDGRSTF: u1,
    -            ///  Window watchdog reset flag
    -            WWDGRSTF: u1,
    -            ///  Low-power reset flag
    -            LPWRRSTF: u1,
    -        }),
    -    };
    -
    -    ///  General purpose I/O
    -    pub const GPIOA = extern struct {
    -        ///  Port configuration register low (GPIOn_CRL)
    -        CRL: mmio.Mmio(packed struct(u32) {
    -            ///  Port n.0 mode bits
    -            MODE0: u2,
    -            ///  Port n.0 configuration bits
    -            CNF0: u2,
    -            ///  Port n.1 mode bits
    -            MODE1: u2,
    -            ///  Port n.1 configuration bits
    -            CNF1: u2,
    -            ///  Port n.2 mode bits
    -            MODE2: u2,
    -            ///  Port n.2 configuration bits
    -            CNF2: u2,
    -            ///  Port n.3 mode bits
    -            MODE3: u2,
    -            ///  Port n.3 configuration bits
    -            CNF3: u2,
    -            ///  Port n.4 mode bits
    -            MODE4: u2,
    -            ///  Port n.4 configuration bits
    -            CNF4: u2,
    -            ///  Port n.5 mode bits
    -            MODE5: u2,
    -            ///  Port n.5 configuration bits
    -            CNF5: u2,
    -            ///  Port n.6 mode bits
    -            MODE6: u2,
    -            ///  Port n.6 configuration bits
    -            CNF6: u2,
    -            ///  Port n.7 mode bits
    -            MODE7: u2,
    -            ///  Port n.7 configuration bits
    -            CNF7: u2,
    -        }),
    -        ///  Port configuration register high (GPIOn_CRL)
    -        CRH: mmio.Mmio(packed struct(u32) {
    -            ///  Port n.8 mode bits
    -            MODE8: u2,
    -            ///  Port n.8 configuration bits
    -            CNF8: u2,
    -            ///  Port n.9 mode bits
    -            MODE9: u2,
    -            ///  Port n.9 configuration bits
    -            CNF9: u2,
    -            ///  Port n.10 mode bits
    -            MODE10: u2,
    -            ///  Port n.10 configuration bits
    -            CNF10: u2,
    -            ///  Port n.11 mode bits
    -            MODE11: u2,
    -            ///  Port n.11 configuration bits
    -            CNF11: u2,
    -            ///  Port n.12 mode bits
    -            MODE12: u2,
    -            ///  Port n.12 configuration bits
    -            CNF12: u2,
    -            ///  Port n.13 mode bits
    -            MODE13: u2,
    -            ///  Port n.13 configuration bits
    -            CNF13: u2,
    -            ///  Port n.14 mode bits
    -            MODE14: u2,
    -            ///  Port n.14 configuration bits
    -            CNF14: u2,
    -            ///  Port n.15 mode bits
    -            MODE15: u2,
    -            ///  Port n.15 configuration bits
    -            CNF15: u2,
    -        }),
    -        ///  Port input data register (GPIOn_IDR)
    -        IDR: mmio.Mmio(packed struct(u32) {
    -            ///  Port input data
    -            IDR0: u1,
    -            ///  Port input data
    -            IDR1: u1,
    -            ///  Port input data
    -            IDR2: u1,
    -            ///  Port input data
    -            IDR3: u1,
    -            ///  Port input data
    -            IDR4: u1,
    -            ///  Port input data
    -            IDR5: u1,
    -            ///  Port input data
    -            IDR6: u1,
    -            ///  Port input data
    -            IDR7: u1,
    -            ///  Port input data
    -            IDR8: u1,
    -            ///  Port input data
    -            IDR9: u1,
    -            ///  Port input data
    -            IDR10: u1,
    -            ///  Port input data
    -            IDR11: u1,
    -            ///  Port input data
    -            IDR12: u1,
    -            ///  Port input data
    -            IDR13: u1,
    -            ///  Port input data
    -            IDR14: u1,
    -            ///  Port input data
    -            IDR15: u1,
    -            padding: u16,
    -        }),
    -        ///  Port output data register (GPIOn_ODR)
    -        ODR: mmio.Mmio(packed struct(u32) {
    -            ///  Port output data
    -            ODR0: u1,
    -            ///  Port output data
    -            ODR1: u1,
    -            ///  Port output data
    -            ODR2: u1,
    -            ///  Port output data
    -            ODR3: u1,
    -            ///  Port output data
    -            ODR4: u1,
    -            ///  Port output data
    -            ODR5: u1,
    -            ///  Port output data
    -            ODR6: u1,
    -            ///  Port output data
    -            ODR7: u1,
    -            ///  Port output data
    -            ODR8: u1,
    -            ///  Port output data
    -            ODR9: u1,
    -            ///  Port output data
    -            ODR10: u1,
    -            ///  Port output data
    -            ODR11: u1,
    -            ///  Port output data
    -            ODR12: u1,
    -            ///  Port output data
    -            ODR13: u1,
    -            ///  Port output data
    -            ODR14: u1,
    -            ///  Port output data
    -            ODR15: u1,
    -            padding: u16,
    -        }),
    -        ///  Port bit set/reset register (GPIOn_BSRR)
    -        BSRR: mmio.Mmio(packed struct(u32) {
    -            ///  Set bit 0
    -            BS0: u1,
    -            ///  Set bit 1
    -            BS1: u1,
    -            ///  Set bit 1
    -            BS2: u1,
    -            ///  Set bit 3
    -            BS3: u1,
    -            ///  Set bit 4
    -            BS4: u1,
    -            ///  Set bit 5
    -            BS5: u1,
    -            ///  Set bit 6
    -            BS6: u1,
    -            ///  Set bit 7
    -            BS7: u1,
    -            ///  Set bit 8
    -            BS8: u1,
    -            ///  Set bit 9
    -            BS9: u1,
    -            ///  Set bit 10
    -            BS10: u1,
    -            ///  Set bit 11
    -            BS11: u1,
    -            ///  Set bit 12
    -            BS12: u1,
    -            ///  Set bit 13
    -            BS13: u1,
    -            ///  Set bit 14
    -            BS14: u1,
    -            ///  Set bit 15
    -            BS15: u1,
    -            ///  Reset bit 0
    -            BR0: u1,
    -            ///  Reset bit 1
    -            BR1: u1,
    -            ///  Reset bit 2
    -            BR2: u1,
    -            ///  Reset bit 3
    -            BR3: u1,
    -            ///  Reset bit 4
    -            BR4: u1,
    -            ///  Reset bit 5
    -            BR5: u1,
    -            ///  Reset bit 6
    -            BR6: u1,
    -            ///  Reset bit 7
    -            BR7: u1,
    -            ///  Reset bit 8
    -            BR8: u1,
    -            ///  Reset bit 9
    -            BR9: u1,
    -            ///  Reset bit 10
    -            BR10: u1,
    -            ///  Reset bit 11
    -            BR11: u1,
    -            ///  Reset bit 12
    -            BR12: u1,
    -            ///  Reset bit 13
    -            BR13: u1,
    -            ///  Reset bit 14
    -            BR14: u1,
    -            ///  Reset bit 15
    -            BR15: u1,
    -        }),
    -        ///  Port bit reset register (GPIOn_BRR)
    -        BRR: mmio.Mmio(packed struct(u32) {
    -            ///  Reset bit 0
    -            BR0: u1,
    -            ///  Reset bit 1
    -            BR1: u1,
    -            ///  Reset bit 1
    -            BR2: u1,
    -            ///  Reset bit 3
    -            BR3: u1,
    -            ///  Reset bit 4
    -            BR4: u1,
    -            ///  Reset bit 5
    -            BR5: u1,
    -            ///  Reset bit 6
    -            BR6: u1,
    -            ///  Reset bit 7
    -            BR7: u1,
    -            ///  Reset bit 8
    -            BR8: u1,
    -            ///  Reset bit 9
    -            BR9: u1,
    -            ///  Reset bit 10
    -            BR10: u1,
    -            ///  Reset bit 11
    -            BR11: u1,
    -            ///  Reset bit 12
    -            BR12: u1,
    -            ///  Reset bit 13
    -            BR13: u1,
    -            ///  Reset bit 14
    -            BR14: u1,
    -            ///  Reset bit 15
    -            BR15: u1,
    -            padding: u16,
    -        }),
    -        ///  Port configuration lock register
    -        LCKR: mmio.Mmio(packed struct(u32) {
    -            ///  Port A Lock bit 0
    -            LCK0: u1,
    -            ///  Port A Lock bit 1
    -            LCK1: u1,
    -            ///  Port A Lock bit 2
    -            LCK2: u1,
    -            ///  Port A Lock bit 3
    -            LCK3: u1,
    -            ///  Port A Lock bit 4
    -            LCK4: u1,
    -            ///  Port A Lock bit 5
    -            LCK5: u1,
    -            ///  Port A Lock bit 6
    -            LCK6: u1,
    -            ///  Port A Lock bit 7
    -            LCK7: u1,
    -            ///  Port A Lock bit 8
    -            LCK8: u1,
    -            ///  Port A Lock bit 9
    -            LCK9: u1,
    -            ///  Port A Lock bit 10
    -            LCK10: u1,
    -            ///  Port A Lock bit 11
    -            LCK11: u1,
    -            ///  Port A Lock bit 12
    -            LCK12: u1,
    -            ///  Port A Lock bit 13
    -            LCK13: u1,
    -            ///  Port A Lock bit 14
    -            LCK14: u1,
    -            ///  Port A Lock bit 15
    -            LCK15: u1,
    -            ///  Lock key
    -            LCKK: u1,
    -            padding: u15,
    -        }),
    -    };
    -
    -    ///  SysTick timer
    -    pub const STK = extern struct {
    -        ///  SysTick control and status register
    -        CTRL: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            ENABLE: u1,
    -            ///  SysTick exception request enable
    -            TICKINT: u1,
    -            ///  Clock source selection
    -            CLKSOURCE: u1,
    -            reserved16: u13,
    -            ///  COUNTFLAG
    -            COUNTFLAG: u1,
    -            padding: u15,
    -        }),
    -        ///  SysTick reload value register
    -        LOAD_: mmio.Mmio(packed struct(u32) {
    -            ///  RELOAD value
    -            RELOAD: u24,
    -            padding: u8,
    -        }),
    -        ///  SysTick current value register
    -        VAL: mmio.Mmio(packed struct(u32) {
    -            ///  Current counter value
    -            CURRENT: u24,
    -            padding: u8,
    -        }),
    -        ///  SysTick calibration value register
    -        CALIB: mmio.Mmio(packed struct(u32) {
    -            ///  Calibration value
    -            TENMS: u24,
    -            padding: u8,
    -        }),
    -    };
    -
    -    ///  System control block
    -    pub const SCB = extern struct {
    -        ///  CPUID base register
    -        CPUID: mmio.Mmio(packed struct(u32) {
    -            ///  Revision number
    -            Revision: u4,
    -            ///  Part number of the processor
    -            PartNo: u12,
    -            ///  Reads as 0xF
    -            Constant: u4,
    -            ///  Variant number
    -            Variant: u4,
    -            ///  Implementer code
    -            Implementer: u8,
    -        }),
    -        ///  Interrupt control and state register
    -        ICSR: mmio.Mmio(packed struct(u32) {
    -            ///  Active vector
    -            VECTACTIVE: u9,
    -            reserved11: u2,
    -            ///  Return to base level
    -            RETTOBASE: u1,
    -            ///  Pending vector
    -            VECTPENDING: u7,
    -            reserved22: u3,
    -            ///  Interrupt pending flag
    -            ISRPENDING: u1,
    -            reserved25: u2,
    -            ///  SysTick exception clear-pending bit
    -            PENDSTCLR: u1,
    -            ///  SysTick exception set-pending bit
    -            PENDSTSET: u1,
    -            ///  PendSV clear-pending bit
    -            PENDSVCLR: u1,
    -            ///  PendSV set-pending bit
    -            PENDSVSET: u1,
    -            reserved31: u2,
    -            ///  NMI set-pending bit.
    -            NMIPENDSET: u1,
    -        }),
    -        ///  Vector table offset register
    -        VTOR: mmio.Mmio(packed struct(u32) {
    -            reserved9: u9,
    -            ///  Vector table base offset field
    -            TBLOFF: u21,
    -            padding: u2,
    -        }),
    -        ///  Application interrupt and reset control register
    -        AIRCR: mmio.Mmio(packed struct(u32) {
    -            ///  VECTRESET
    -            VECTRESET: u1,
    -            ///  VECTCLRACTIVE
    -            VECTCLRACTIVE: u1,
    -            ///  SYSRESETREQ
    -            SYSRESETREQ: u1,
    -            reserved8: u5,
    -            ///  PRIGROUP
    -            PRIGROUP: u3,
    -            reserved15: u4,
    -            ///  ENDIANESS
    -            ENDIANESS: u1,
    -            ///  Register key
    -            VECTKEYSTAT: u16,
    -        }),
    -        ///  System control register
    -        SCR: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  SLEEPONEXIT
    -            SLEEPONEXIT: u1,
    -            ///  SLEEPDEEP
    -            SLEEPDEEP: u1,
    -            reserved4: u1,
    -            ///  Send Event on Pending bit
    -            SEVEONPEND: u1,
    -            padding: u27,
    -        }),
    -        ///  Configuration and control register
    -        CCR: mmio.Mmio(packed struct(u32) {
    -            ///  Configures how the processor enters Thread mode
    -            NONBASETHRDENA: u1,
    -            ///  USERSETMPEND
    -            USERSETMPEND: u1,
    -            reserved3: u1,
    -            ///  UNALIGN_ TRP
    -            UNALIGN__TRP: u1,
    -            ///  DIV_0_TRP
    -            DIV_0_TRP: u1,
    -            reserved8: u3,
    -            ///  BFHFNMIGN
    -            BFHFNMIGN: u1,
    -            ///  STKALIGN
    -            STKALIGN: u1,
    -            padding: u22,
    -        }),
    -        ///  System handler priority registers
    -        SHPR1: mmio.Mmio(packed struct(u32) {
    -            ///  Priority of system handler 4
    -            PRI_4: u8,
    -            ///  Priority of system handler 5
    -            PRI_5: u8,
    -            ///  Priority of system handler 6
    -            PRI_6: u8,
    -            padding: u8,
    -        }),
    -        ///  System handler priority registers
    -        SHPR2: mmio.Mmio(packed struct(u32) {
    -            reserved24: u24,
    -            ///  Priority of system handler 11
    -            PRI_11: u8,
    -        }),
    -        ///  System handler priority registers
    -        SHPR3: mmio.Mmio(packed struct(u32) {
    -            reserved16: u16,
    -            ///  Priority of system handler 14
    -            PRI_14: u8,
    -            ///  Priority of system handler 15
    -            PRI_15: u8,
    -        }),
    -        ///  System handler control and state register
    -        SHCRS: mmio.Mmio(packed struct(u32) {
    -            ///  Memory management fault exception active bit
    -            MEMFAULTACT: u1,
    -            ///  Bus fault exception active bit
    -            BUSFAULTACT: u1,
    -            reserved3: u1,
    -            ///  Usage fault exception active bit
    -            USGFAULTACT: u1,
    -            reserved7: u3,
    -            ///  SVC call active bit
    -            SVCALLACT: u1,
    -            ///  Debug monitor active bit
    -            MONITORACT: u1,
    -            reserved10: u1,
    -            ///  PendSV exception active bit
    -            PENDSVACT: u1,
    -            ///  SysTick exception active bit
    -            SYSTICKACT: u1,
    -            ///  Usage fault exception pending bit
    -            USGFAULTPENDED: u1,
    -            ///  Memory management fault exception pending bit
    -            MEMFAULTPENDED: u1,
    -            ///  Bus fault exception pending bit
    -            BUSFAULTPENDED: u1,
    -            ///  SVC call pending bit
    -            SVCALLPENDED: u1,
    -            ///  Memory management fault enable bit
    -            MEMFAULTENA: u1,
    -            ///  Bus fault enable bit
    -            BUSFAULTENA: u1,
    -            ///  Usage fault enable bit
    -            USGFAULTENA: u1,
    -            padding: u13,
    -        }),
    -        ///  Configurable fault status register
    -        CFSR_UFSR_BFSR_MMFSR: mmio.Mmio(packed struct(u32) {
    -            ///  IACCVIOL
    -            IACCVIOL: u1,
    -            ///  DACCVIOL
    -            DACCVIOL: u1,
    -            reserved3: u1,
    -            ///  MUNSTKERR
    -            MUNSTKERR: u1,
    -            ///  MSTKERR
    -            MSTKERR: u1,
    -            ///  MLSPERR
    -            MLSPERR: u1,
    -            reserved7: u1,
    -            ///  MMARVALID
    -            MMARVALID: u1,
    -            ///  Instruction bus error
    -            IBUSERR: u1,
    -            ///  Precise data bus error
    -            PRECISERR: u1,
    -            ///  Imprecise data bus error
    -            IMPRECISERR: u1,
    -            ///  Bus fault on unstacking for a return from exception
    -            UNSTKERR: u1,
    -            ///  Bus fault on stacking for exception entry
    -            STKERR: u1,
    -            ///  Bus fault on floating-point lazy state preservation
    -            LSPERR: u1,
    -            reserved15: u1,
    -            ///  Bus Fault Address Register (BFAR) valid flag
    -            BFARVALID: u1,
    -            ///  Undefined instruction usage fault
    -            UNDEFINSTR: u1,
    -            ///  Invalid state usage fault
    -            INVSTATE: u1,
    -            ///  Invalid PC load usage fault
    -            INVPC: u1,
    -            ///  No coprocessor usage fault.
    -            NOCP: u1,
    -            reserved24: u4,
    -            ///  Unaligned access usage fault
    -            UNALIGNED: u1,
    -            ///  Divide by zero usage fault
    -            DIVBYZERO: u1,
    -            padding: u6,
    -        }),
    -        ///  Hard fault status register
    -        HFSR: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  Vector table hard fault
    -            VECTTBL: u1,
    -            reserved30: u28,
    -            ///  Forced hard fault
    -            FORCED: u1,
    -            ///  Reserved for Debug use
    -            DEBUG_VT: u1,
    -        }),
    -        reserved52: [4]u8,
    -        ///  Memory management fault address register
    -        MMFAR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory management fault address
    -            MMFAR: u32,
    -        }),
    -        ///  Bus fault address register
    -        BFAR: mmio.Mmio(packed struct(u32) {
    -            ///  Bus fault address
    -            BFAR: u32,
    -        }),
    -    };
    -
    -    ///  Nested vectored interrupt controller
    -    pub const NVIC_STIR = extern struct {
    -        ///  Software trigger interrupt register
    -        STIR: mmio.Mmio(packed struct(u32) {
    -            ///  Software generated interrupt ID
    -            INTID: u9,
    -            padding: u23,
    -        }),
    -    };
    -
    -    ///  System control block ACTLR
    -    pub const SCB_ACTRL = extern struct {
    -        ///  Auxiliary control register
    -        ACTRL: mmio.Mmio(packed struct(u32) {
    -            reserved2: u2,
    -            ///  DISFOLD
    -            DISFOLD: u1,
    -            reserved10: u7,
    -            ///  FPEXCODIS
    -            FPEXCODIS: u1,
    -            ///  DISRAMODE
    -            DISRAMODE: u1,
    -            ///  DISITMATBFLUSH
    -            DISITMATBFLUSH: u1,
    -            padding: u19,
    -        }),
    -    };
    -
    -    ///  Memory protection unit
    -    pub const MPU = extern struct {
    -        ///  MPU type register
    -        MPU_TYPER: mmio.Mmio(packed struct(u32) {
    -            ///  Separate flag
    -            SEPARATE: u1,
    -            reserved8: u7,
    -            ///  Number of MPU data regions
    -            DREGION: u8,
    -            ///  Number of MPU instruction regions
    -            IREGION: u8,
    -            padding: u8,
    -        }),
    -        ///  MPU control register
    -        MPU_CTRL: mmio.Mmio(packed struct(u32) {
    -            ///  Enables the MPU
    -            ENABLE: u1,
    -            ///  Enables the operation of MPU during hard fault
    -            HFNMIENA: u1,
    -            ///  Enable priviliged software access to default memory map
    -            PRIVDEFENA: u1,
    -            padding: u29,
    -        }),
    -        ///  MPU region number register
    -        MPU_RNR: mmio.Mmio(packed struct(u32) {
    -            ///  MPU region
    -            REGION: u8,
    -            padding: u24,
    -        }),
    -        ///  MPU region base address register
    -        MPU_RBAR: mmio.Mmio(packed struct(u32) {
    -            ///  MPU region field
    -            REGION: u4,
    -            ///  MPU region number valid
    -            VALID: u1,
    -            ///  Region base address field
    -            ADDR: u27,
    -        }),
    -        ///  MPU region attribute and size register
    -        MPU_RASR: mmio.Mmio(packed struct(u32) {
    -            ///  Region enable bit.
    -            ENABLE: u1,
    -            ///  Size of the MPU protection region
    -            SIZE: u5,
    -            reserved8: u2,
    -            ///  Subregion disable bits
    -            SRD: u8,
    -            ///  memory attribute
    -            B: u1,
    -            ///  memory attribute
    -            C: u1,
    -            ///  Shareable memory attribute
    -            S: u1,
    -            ///  memory attribute
    -            TEX: u3,
    -            reserved24: u2,
    -            ///  Access permission
    -            AP: u3,
    -            reserved28: u1,
    -            ///  Instruction access disable bit
    -            XN: u1,
    -            padding: u3,
    -        }),
    -    };
    -
    -    ///  Nested Vectored Interrupt Controller
    -    pub const NVIC = extern struct {
    -        ///  Interrupt Set-Enable Register
    -        ISER0: mmio.Mmio(packed struct(u32) {
    -            ///  SETENA
    -            SETENA: u32,
    -        }),
    -        ///  Interrupt Set-Enable Register
    -        ISER1: mmio.Mmio(packed struct(u32) {
    -            ///  SETENA
    -            SETENA: u32,
    -        }),
    -        reserved128: [120]u8,
    -        ///  Interrupt Clear-Enable Register
    -        ICER0: mmio.Mmio(packed struct(u32) {
    -            ///  CLRENA
    -            CLRENA: u32,
    -        }),
    -        ///  Interrupt Clear-Enable Register
    -        ICER1: mmio.Mmio(packed struct(u32) {
    -            ///  CLRENA
    -            CLRENA: u32,
    -        }),
    -        reserved256: [120]u8,
    -        ///  Interrupt Set-Pending Register
    -        ISPR0: mmio.Mmio(packed struct(u32) {
    -            ///  SETPEND
    -            SETPEND: u32,
    -        }),
    -        ///  Interrupt Set-Pending Register
    -        ISPR1: mmio.Mmio(packed struct(u32) {
    -            ///  SETPEND
    -            SETPEND: u32,
    -        }),
    -        reserved384: [120]u8,
    -        ///  Interrupt Clear-Pending Register
    -        ICPR0: mmio.Mmio(packed struct(u32) {
    -            ///  CLRPEND
    -            CLRPEND: u32,
    -        }),
    -        ///  Interrupt Clear-Pending Register
    -        ICPR1: mmio.Mmio(packed struct(u32) {
    -            ///  CLRPEND
    -            CLRPEND: u32,
    -        }),
    -        reserved512: [120]u8,
    -        ///  Interrupt Active Bit Register
    -        IABR0: mmio.Mmio(packed struct(u32) {
    -            ///  ACTIVE
    -            ACTIVE: u32,
    -        }),
    -        ///  Interrupt Active Bit Register
    -        IABR1: mmio.Mmio(packed struct(u32) {
    -            ///  ACTIVE
    -            ACTIVE: u32,
    -        }),
    -        reserved768: [248]u8,
    -        ///  Interrupt Priority Register
    -        IPR0: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR1: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR2: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR3: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR4: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR5: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR6: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR7: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR8: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR9: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR10: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR11: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR12: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR13: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR14: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -    };
    -
    -    ///  Alternate function I/O
    -    pub const AFIO = extern struct {
    -        ///  Event Control Register (AFIO_EVCR)
    -        EVCR: mmio.Mmio(packed struct(u32) {
    -            ///  Pin selection
    -            PIN: u4,
    -            ///  Port selection
    -            PORT: u3,
    -            ///  Event Output Enable
    -            EVOE: u1,
    -            padding: u24,
    -        }),
    -        ///  AF remap and debug I/O configuration register (AFIO_MAPR)
    -        MAPR: mmio.Mmio(packed struct(u32) {
    -            ///  SPI1 remapping
    -            SPI1_REMAP: u1,
    -            ///  I2C1 remapping
    -            I2C1_REMAP: u1,
    -            ///  USART1 remapping
    -            USART1_REMAP: u1,
    -            ///  USART2 remapping
    -            USART2_REMAP: u1,
    -            ///  USART3 remapping
    -            USART3_REMAP: u2,
    -            ///  TIM1 remapping
    -            TIM1_REMAP: u2,
    -            ///  TIM2 remapping
    -            TIM2_REMAP: u2,
    -            ///  TIM3 remapping
    -            TIM3_REMAP: u2,
    -            ///  TIM4 remapping
    -            TIM4_REMAP: u1,
    -            ///  CAN1 remapping
    -            CAN_REMAP: u2,
    -            ///  Port D0/Port D1 mapping on OSCIN/OSCOUT
    -            PD01_REMAP: u1,
    -            ///  Set and cleared by software
    -            TIM5CH4_IREMAP: u1,
    -            ///  ADC 1 External trigger injected conversion remapping
    -            ADC1_ETRGINJ_REMAP: u1,
    -            ///  ADC 1 external trigger regular conversion remapping
    -            ADC1_ETRGREG_REMAP: u1,
    -            ///  ADC 2 external trigger injected conversion remapping
    -            ADC2_ETRGINJ_REMAP: u1,
    -            ///  ADC 2 external trigger regular conversion remapping
    -            ADC2_ETRGREG_REMAP: u1,
    -            reserved24: u3,
    -            ///  Serial wire JTAG configuration
    -            SWJ_CFG: u3,
    -            padding: u5,
    -        }),
    -        ///  External interrupt configuration register 1 (AFIO_EXTICR1)
    -        EXTICR1: mmio.Mmio(packed struct(u32) {
    -            ///  EXTI0 configuration
    -            EXTI0: u4,
    -            ///  EXTI1 configuration
    -            EXTI1: u4,
    -            ///  EXTI2 configuration
    -            EXTI2: u4,
    -            ///  EXTI3 configuration
    -            EXTI3: u4,
    -            padding: u16,
    -        }),
    -        ///  External interrupt configuration register 2 (AFIO_EXTICR2)
    -        EXTICR2: mmio.Mmio(packed struct(u32) {
    -            ///  EXTI4 configuration
    -            EXTI4: u4,
    -            ///  EXTI5 configuration
    -            EXTI5: u4,
    -            ///  EXTI6 configuration
    -            EXTI6: u4,
    -            ///  EXTI7 configuration
    -            EXTI7: u4,
    -            padding: u16,
    -        }),
    -        ///  External interrupt configuration register 3 (AFIO_EXTICR3)
    -        EXTICR3: mmio.Mmio(packed struct(u32) {
    -            ///  EXTI8 configuration
    -            EXTI8: u4,
    -            ///  EXTI9 configuration
    -            EXTI9: u4,
    -            ///  EXTI10 configuration
    -            EXTI10: u4,
    -            ///  EXTI11 configuration
    -            EXTI11: u4,
    -            padding: u16,
    -        }),
    -        ///  External interrupt configuration register 4 (AFIO_EXTICR4)
    -        EXTICR4: mmio.Mmio(packed struct(u32) {
    -            ///  EXTI12 configuration
    -            EXTI12: u4,
    -            ///  EXTI13 configuration
    -            EXTI13: u4,
    -            ///  EXTI14 configuration
    -            EXTI14: u4,
    -            ///  EXTI15 configuration
    -            EXTI15: u4,
    -            padding: u16,
    -        }),
    -        reserved28: [4]u8,
    -        ///  AF remap and debug I/O configuration register
    -        MAPR2: mmio.Mmio(packed struct(u32) {
    -            reserved5: u5,
    -            ///  TIM9 remapping
    -            TIM9_REMAP: u1,
    -            ///  TIM10 remapping
    -            TIM10_REMAP: u1,
    -            ///  TIM11 remapping
    -            TIM11_REMAP: u1,
    -            ///  TIM13 remapping
    -            TIM13_REMAP: u1,
    -            ///  TIM14 remapping
    -            TIM14_REMAP: u1,
    -            ///  NADV connect/disconnect
    -            FSMC_NADV: u1,
    -            padding: u21,
    -        }),
    -    };
    -
    -    ///  EXTI
    -    pub const EXTI = extern struct {
    -        ///  Interrupt mask register (EXTI_IMR)
    -        IMR: mmio.Mmio(packed struct(u32) {
    -            ///  Interrupt Mask on line 0
    -            MR0: u1,
    -            ///  Interrupt Mask on line 1
    -            MR1: u1,
    -            ///  Interrupt Mask on line 2
    -            MR2: u1,
    -            ///  Interrupt Mask on line 3
    -            MR3: u1,
    -            ///  Interrupt Mask on line 4
    -            MR4: u1,
    -            ///  Interrupt Mask on line 5
    -            MR5: u1,
    -            ///  Interrupt Mask on line 6
    -            MR6: u1,
    -            ///  Interrupt Mask on line 7
    -            MR7: u1,
    -            ///  Interrupt Mask on line 8
    -            MR8: u1,
    -            ///  Interrupt Mask on line 9
    -            MR9: u1,
    -            ///  Interrupt Mask on line 10
    -            MR10: u1,
    -            ///  Interrupt Mask on line 11
    -            MR11: u1,
    -            ///  Interrupt Mask on line 12
    -            MR12: u1,
    -            ///  Interrupt Mask on line 13
    -            MR13: u1,
    -            ///  Interrupt Mask on line 14
    -            MR14: u1,
    -            ///  Interrupt Mask on line 15
    -            MR15: u1,
    -            ///  Interrupt Mask on line 16
    -            MR16: u1,
    -            ///  Interrupt Mask on line 17
    -            MR17: u1,
    -            ///  Interrupt Mask on line 18
    -            MR18: u1,
    -            padding: u13,
    -        }),
    -        ///  Event mask register (EXTI_EMR)
    -        EMR: mmio.Mmio(packed struct(u32) {
    -            ///  Event Mask on line 0
    -            MR0: u1,
    -            ///  Event Mask on line 1
    -            MR1: u1,
    -            ///  Event Mask on line 2
    -            MR2: u1,
    -            ///  Event Mask on line 3
    -            MR3: u1,
    -            ///  Event Mask on line 4
    -            MR4: u1,
    -            ///  Event Mask on line 5
    -            MR5: u1,
    -            ///  Event Mask on line 6
    -            MR6: u1,
    -            ///  Event Mask on line 7
    -            MR7: u1,
    -            ///  Event Mask on line 8
    -            MR8: u1,
    -            ///  Event Mask on line 9
    -            MR9: u1,
    -            ///  Event Mask on line 10
    -            MR10: u1,
    -            ///  Event Mask on line 11
    -            MR11: u1,
    -            ///  Event Mask on line 12
    -            MR12: u1,
    -            ///  Event Mask on line 13
    -            MR13: u1,
    -            ///  Event Mask on line 14
    -            MR14: u1,
    -            ///  Event Mask on line 15
    -            MR15: u1,
    -            ///  Event Mask on line 16
    -            MR16: u1,
    -            ///  Event Mask on line 17
    -            MR17: u1,
    -            ///  Event Mask on line 18
    -            MR18: u1,
    -            padding: u13,
    -        }),
    -        ///  Rising Trigger selection register (EXTI_RTSR)
    -        RTSR: mmio.Mmio(packed struct(u32) {
    -            ///  Rising trigger event configuration of line 0
    -            TR0: u1,
    -            ///  Rising trigger event configuration of line 1
    -            TR1: u1,
    -            ///  Rising trigger event configuration of line 2
    -            TR2: u1,
    -            ///  Rising trigger event configuration of line 3
    -            TR3: u1,
    -            ///  Rising trigger event configuration of line 4
    -            TR4: u1,
    -            ///  Rising trigger event configuration of line 5
    -            TR5: u1,
    -            ///  Rising trigger event configuration of line 6
    -            TR6: u1,
    -            ///  Rising trigger event configuration of line 7
    -            TR7: u1,
    -            ///  Rising trigger event configuration of line 8
    -            TR8: u1,
    -            ///  Rising trigger event configuration of line 9
    -            TR9: u1,
    -            ///  Rising trigger event configuration of line 10
    -            TR10: u1,
    -            ///  Rising trigger event configuration of line 11
    -            TR11: u1,
    -            ///  Rising trigger event configuration of line 12
    -            TR12: u1,
    -            ///  Rising trigger event configuration of line 13
    -            TR13: u1,
    -            ///  Rising trigger event configuration of line 14
    -            TR14: u1,
    -            ///  Rising trigger event configuration of line 15
    -            TR15: u1,
    -            ///  Rising trigger event configuration of line 16
    -            TR16: u1,
    -            ///  Rising trigger event configuration of line 17
    -            TR17: u1,
    -            ///  Rising trigger event configuration of line 18
    -            TR18: u1,
    -            padding: u13,
    -        }),
    -        ///  Falling Trigger selection register (EXTI_FTSR)
    -        FTSR: mmio.Mmio(packed struct(u32) {
    -            ///  Falling trigger event configuration of line 0
    -            TR0: u1,
    -            ///  Falling trigger event configuration of line 1
    -            TR1: u1,
    -            ///  Falling trigger event configuration of line 2
    -            TR2: u1,
    -            ///  Falling trigger event configuration of line 3
    -            TR3: u1,
    -            ///  Falling trigger event configuration of line 4
    -            TR4: u1,
    -            ///  Falling trigger event configuration of line 5
    -            TR5: u1,
    -            ///  Falling trigger event configuration of line 6
    -            TR6: u1,
    -            ///  Falling trigger event configuration of line 7
    -            TR7: u1,
    -            ///  Falling trigger event configuration of line 8
    -            TR8: u1,
    -            ///  Falling trigger event configuration of line 9
    -            TR9: u1,
    -            ///  Falling trigger event configuration of line 10
    -            TR10: u1,
    -            ///  Falling trigger event configuration of line 11
    -            TR11: u1,
    -            ///  Falling trigger event configuration of line 12
    -            TR12: u1,
    -            ///  Falling trigger event configuration of line 13
    -            TR13: u1,
    -            ///  Falling trigger event configuration of line 14
    -            TR14: u1,
    -            ///  Falling trigger event configuration of line 15
    -            TR15: u1,
    -            ///  Falling trigger event configuration of line 16
    -            TR16: u1,
    -            ///  Falling trigger event configuration of line 17
    -            TR17: u1,
    -            ///  Falling trigger event configuration of line 18
    -            TR18: u1,
    -            padding: u13,
    -        }),
    -        ///  Software interrupt event register (EXTI_SWIER)
    -        SWIER: mmio.Mmio(packed struct(u32) {
    -            ///  Software Interrupt on line 0
    -            SWIER0: u1,
    -            ///  Software Interrupt on line 1
    -            SWIER1: u1,
    -            ///  Software Interrupt on line 2
    -            SWIER2: u1,
    -            ///  Software Interrupt on line 3
    -            SWIER3: u1,
    -            ///  Software Interrupt on line 4
    -            SWIER4: u1,
    -            ///  Software Interrupt on line 5
    -            SWIER5: u1,
    -            ///  Software Interrupt on line 6
    -            SWIER6: u1,
    -            ///  Software Interrupt on line 7
    -            SWIER7: u1,
    -            ///  Software Interrupt on line 8
    -            SWIER8: u1,
    -            ///  Software Interrupt on line 9
    -            SWIER9: u1,
    -            ///  Software Interrupt on line 10
    -            SWIER10: u1,
    -            ///  Software Interrupt on line 11
    -            SWIER11: u1,
    -            ///  Software Interrupt on line 12
    -            SWIER12: u1,
    -            ///  Software Interrupt on line 13
    -            SWIER13: u1,
    -            ///  Software Interrupt on line 14
    -            SWIER14: u1,
    -            ///  Software Interrupt on line 15
    -            SWIER15: u1,
    -            ///  Software Interrupt on line 16
    -            SWIER16: u1,
    -            ///  Software Interrupt on line 17
    -            SWIER17: u1,
    -            ///  Software Interrupt on line 18
    -            SWIER18: u1,
    -            padding: u13,
    -        }),
    -        ///  Pending register (EXTI_PR)
    -        PR: mmio.Mmio(packed struct(u32) {
    -            ///  Pending bit 0
    -            PR0: u1,
    -            ///  Pending bit 1
    -            PR1: u1,
    -            ///  Pending bit 2
    -            PR2: u1,
    -            ///  Pending bit 3
    -            PR3: u1,
    -            ///  Pending bit 4
    -            PR4: u1,
    -            ///  Pending bit 5
    -            PR5: u1,
    -            ///  Pending bit 6
    -            PR6: u1,
    -            ///  Pending bit 7
    -            PR7: u1,
    -            ///  Pending bit 8
    -            PR8: u1,
    -            ///  Pending bit 9
    -            PR9: u1,
    -            ///  Pending bit 10
    -            PR10: u1,
    -            ///  Pending bit 11
    -            PR11: u1,
    -            ///  Pending bit 12
    -            PR12: u1,
    -            ///  Pending bit 13
    -            PR13: u1,
    -            ///  Pending bit 14
    -            PR14: u1,
    -            ///  Pending bit 15
    -            PR15: u1,
    -            ///  Pending bit 16
    -            PR16: u1,
    -            ///  Pending bit 17
    -            PR17: u1,
    -            ///  Pending bit 18
    -            PR18: u1,
    -            padding: u13,
    -        }),
    -    };
    -
    -    ///  DMA controller
    -    pub const DMA1 = extern struct {
    -        ///  DMA interrupt status register (DMA_ISR)
    -        ISR: mmio.Mmio(packed struct(u32) {
    -            ///  Channel 1 Global interrupt flag
    -            GIF1: u1,
    -            ///  Channel 1 Transfer Complete flag
    -            TCIF1: u1,
    -            ///  Channel 1 Half Transfer Complete flag
    -            HTIF1: u1,
    -            ///  Channel 1 Transfer Error flag
    -            TEIF1: u1,
    -            ///  Channel 2 Global interrupt flag
    -            GIF2: u1,
    -            ///  Channel 2 Transfer Complete flag
    -            TCIF2: u1,
    -            ///  Channel 2 Half Transfer Complete flag
    -            HTIF2: u1,
    -            ///  Channel 2 Transfer Error flag
    -            TEIF2: u1,
    -            ///  Channel 3 Global interrupt flag
    -            GIF3: u1,
    -            ///  Channel 3 Transfer Complete flag
    -            TCIF3: u1,
    -            ///  Channel 3 Half Transfer Complete flag
    -            HTIF3: u1,
    -            ///  Channel 3 Transfer Error flag
    -            TEIF3: u1,
    -            ///  Channel 4 Global interrupt flag
    -            GIF4: u1,
    -            ///  Channel 4 Transfer Complete flag
    -            TCIF4: u1,
    -            ///  Channel 4 Half Transfer Complete flag
    -            HTIF4: u1,
    -            ///  Channel 4 Transfer Error flag
    -            TEIF4: u1,
    -            ///  Channel 5 Global interrupt flag
    -            GIF5: u1,
    -            ///  Channel 5 Transfer Complete flag
    -            TCIF5: u1,
    -            ///  Channel 5 Half Transfer Complete flag
    -            HTIF5: u1,
    -            ///  Channel 5 Transfer Error flag
    -            TEIF5: u1,
    -            ///  Channel 6 Global interrupt flag
    -            GIF6: u1,
    -            ///  Channel 6 Transfer Complete flag
    -            TCIF6: u1,
    -            ///  Channel 6 Half Transfer Complete flag
    -            HTIF6: u1,
    -            ///  Channel 6 Transfer Error flag
    -            TEIF6: u1,
    -            ///  Channel 7 Global interrupt flag
    -            GIF7: u1,
    -            ///  Channel 7 Transfer Complete flag
    -            TCIF7: u1,
    -            ///  Channel 7 Half Transfer Complete flag
    -            HTIF7: u1,
    -            ///  Channel 7 Transfer Error flag
    -            TEIF7: u1,
    -            padding: u4,
    -        }),
    -        ///  DMA interrupt flag clear register (DMA_IFCR)
    -        IFCR: mmio.Mmio(packed struct(u32) {
    -            ///  Channel 1 Global interrupt clear
    -            CGIF1: u1,
    -            ///  Channel 1 Transfer Complete clear
    -            CTCIF1: u1,
    -            ///  Channel 1 Half Transfer clear
    -            CHTIF1: u1,
    -            ///  Channel 1 Transfer Error clear
    -            CTEIF1: u1,
    -            ///  Channel 2 Global interrupt clear
    -            CGIF2: u1,
    -            ///  Channel 2 Transfer Complete clear
    -            CTCIF2: u1,
    -            ///  Channel 2 Half Transfer clear
    -            CHTIF2: u1,
    -            ///  Channel 2 Transfer Error clear
    -            CTEIF2: u1,
    -            ///  Channel 3 Global interrupt clear
    -            CGIF3: u1,
    -            ///  Channel 3 Transfer Complete clear
    -            CTCIF3: u1,
    -            ///  Channel 3 Half Transfer clear
    -            CHTIF3: u1,
    -            ///  Channel 3 Transfer Error clear
    -            CTEIF3: u1,
    -            ///  Channel 4 Global interrupt clear
    -            CGIF4: u1,
    -            ///  Channel 4 Transfer Complete clear
    -            CTCIF4: u1,
    -            ///  Channel 4 Half Transfer clear
    -            CHTIF4: u1,
    -            ///  Channel 4 Transfer Error clear
    -            CTEIF4: u1,
    -            ///  Channel 5 Global interrupt clear
    -            CGIF5: u1,
    -            ///  Channel 5 Transfer Complete clear
    -            CTCIF5: u1,
    -            ///  Channel 5 Half Transfer clear
    -            CHTIF5: u1,
    -            ///  Channel 5 Transfer Error clear
    -            CTEIF5: u1,
    -            ///  Channel 6 Global interrupt clear
    -            CGIF6: u1,
    -            ///  Channel 6 Transfer Complete clear
    -            CTCIF6: u1,
    -            ///  Channel 6 Half Transfer clear
    -            CHTIF6: u1,
    -            ///  Channel 6 Transfer Error clear
    -            CTEIF6: u1,
    -            ///  Channel 7 Global interrupt clear
    -            CGIF7: u1,
    -            ///  Channel 7 Transfer Complete clear
    -            CTCIF7: u1,
    -            ///  Channel 7 Half Transfer clear
    -            CHTIF7: u1,
    -            ///  Channel 7 Transfer Error clear
    -            CTEIF7: u1,
    -            padding: u4,
    -        }),
    -        ///  DMA channel configuration register (DMA_CCR)
    -        CCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Channel enable
    -            EN: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Half Transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Data transfer direction
    -            DIR: u1,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral size
    -            PSIZE: u2,
    -            ///  Memory size
    -            MSIZE: u2,
    -            ///  Channel Priority level
    -            PL: u2,
    -            ///  Memory to memory mode
    -            MEM2MEM: u1,
    -            padding: u17,
    -        }),
    -        ///  DMA channel 1 number of data register
    -        CNDTR1: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  DMA channel 1 peripheral address register
    -        CPAR1: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  DMA channel 1 memory address register
    -        CMAR1: mmio.Mmio(packed struct(u32) {
    -            ///  Memory address
    -            MA: u32,
    -        }),
    -        reserved28: [4]u8,
    -        ///  DMA channel configuration register (DMA_CCR)
    -        CCR2: mmio.Mmio(packed struct(u32) {
    -            ///  Channel enable
    -            EN: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Half Transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Data transfer direction
    -            DIR: u1,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral size
    -            PSIZE: u2,
    -            ///  Memory size
    -            MSIZE: u2,
    -            ///  Channel Priority level
    -            PL: u2,
    -            ///  Memory to memory mode
    -            MEM2MEM: u1,
    -            padding: u17,
    -        }),
    -        ///  DMA channel 2 number of data register
    -        CNDTR2: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  DMA channel 2 peripheral address register
    -        CPAR2: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  DMA channel 2 memory address register
    -        CMAR2: mmio.Mmio(packed struct(u32) {
    -            ///  Memory address
    -            MA: u32,
    -        }),
    -        reserved48: [4]u8,
    -        ///  DMA channel configuration register (DMA_CCR)
    -        CCR3: mmio.Mmio(packed struct(u32) {
    -            ///  Channel enable
    -            EN: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Half Transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Data transfer direction
    -            DIR: u1,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral size
    -            PSIZE: u2,
    -            ///  Memory size
    -            MSIZE: u2,
    -            ///  Channel Priority level
    -            PL: u2,
    -            ///  Memory to memory mode
    -            MEM2MEM: u1,
    -            padding: u17,
    -        }),
    -        ///  DMA channel 3 number of data register
    -        CNDTR3: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  DMA channel 3 peripheral address register
    -        CPAR3: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  DMA channel 3 memory address register
    -        CMAR3: mmio.Mmio(packed struct(u32) {
    -            ///  Memory address
    -            MA: u32,
    -        }),
    -        reserved68: [4]u8,
    -        ///  DMA channel configuration register (DMA_CCR)
    -        CCR4: mmio.Mmio(packed struct(u32) {
    -            ///  Channel enable
    -            EN: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Half Transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Data transfer direction
    -            DIR: u1,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral size
    -            PSIZE: u2,
    -            ///  Memory size
    -            MSIZE: u2,
    -            ///  Channel Priority level
    -            PL: u2,
    -            ///  Memory to memory mode
    -            MEM2MEM: u1,
    -            padding: u17,
    -        }),
    -        ///  DMA channel 4 number of data register
    -        CNDTR4: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  DMA channel 4 peripheral address register
    -        CPAR4: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  DMA channel 4 memory address register
    -        CMAR4: mmio.Mmio(packed struct(u32) {
    -            ///  Memory address
    -            MA: u32,
    -        }),
    -        reserved88: [4]u8,
    -        ///  DMA channel configuration register (DMA_CCR)
    -        CCR5: mmio.Mmio(packed struct(u32) {
    -            ///  Channel enable
    -            EN: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Half Transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Data transfer direction
    -            DIR: u1,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral size
    -            PSIZE: u2,
    -            ///  Memory size
    -            MSIZE: u2,
    -            ///  Channel Priority level
    -            PL: u2,
    -            ///  Memory to memory mode
    -            MEM2MEM: u1,
    -            padding: u17,
    -        }),
    -        ///  DMA channel 5 number of data register
    -        CNDTR5: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  DMA channel 5 peripheral address register
    -        CPAR5: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  DMA channel 5 memory address register
    -        CMAR5: mmio.Mmio(packed struct(u32) {
    -            ///  Memory address
    -            MA: u32,
    -        }),
    -        reserved108: [4]u8,
    -        ///  DMA channel configuration register (DMA_CCR)
    -        CCR6: mmio.Mmio(packed struct(u32) {
    -            ///  Channel enable
    -            EN: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Half Transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Data transfer direction
    -            DIR: u1,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral size
    -            PSIZE: u2,
    -            ///  Memory size
    -            MSIZE: u2,
    -            ///  Channel Priority level
    -            PL: u2,
    -            ///  Memory to memory mode
    -            MEM2MEM: u1,
    -            padding: u17,
    -        }),
    -        ///  DMA channel 6 number of data register
    -        CNDTR6: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  DMA channel 6 peripheral address register
    -        CPAR6: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  DMA channel 6 memory address register
    -        CMAR6: mmio.Mmio(packed struct(u32) {
    -            ///  Memory address
    -            MA: u32,
    -        }),
    -        reserved128: [4]u8,
    -        ///  DMA channel configuration register (DMA_CCR)
    -        CCR7: mmio.Mmio(packed struct(u32) {
    -            ///  Channel enable
    -            EN: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Half Transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Data transfer direction
    -            DIR: u1,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral size
    -            PSIZE: u2,
    -            ///  Memory size
    -            MSIZE: u2,
    -            ///  Channel Priority level
    -            PL: u2,
    -            ///  Memory to memory mode
    -            MEM2MEM: u1,
    -            padding: u17,
    -        }),
    -        ///  DMA channel 7 number of data register
    -        CNDTR7: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  DMA channel 7 peripheral address register
    -        CPAR7: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  DMA channel 7 memory address register
    -        CMAR7: mmio.Mmio(packed struct(u32) {
    -            ///  Memory address
    -            MA: u32,
    -        }),
    -    };
    -
    -    ///  Ethernet: DMA controller operation
    -    pub const ETHERNET_DMA = extern struct {
    -        ///  Ethernet DMA bus mode register
    -        DMABMR: mmio.Mmio(packed struct(u32) {
    -            ///  Software reset
    -            SR: u1,
    -            ///  DMA Arbitration
    -            DA: u1,
    -            ///  Descriptor skip length
    -            DSL: u5,
    -            reserved8: u1,
    -            ///  Programmable burst length
    -            PBL: u6,
    -            ///  Rx Tx priority ratio
    -            RTPR: u2,
    -            ///  Fixed burst
    -            FB: u1,
    -            ///  Rx DMA PBL
    -            RDP: u6,
    -            ///  Use separate PBL
    -            USP: u1,
    -            ///  4xPBL mode
    -            FPM: u1,
    -            ///  Address-aligned beats
    -            AAB: u1,
    -            padding: u6,
    -        }),
    -        ///  Ethernet DMA transmit poll demand register
    -        DMATPDR: mmio.Mmio(packed struct(u32) {
    -            ///  Transmit poll demand
    -            TPD: u32,
    -        }),
    -        ///  EHERNET DMA receive poll demand register
    -        DMARPDR: mmio.Mmio(packed struct(u32) {
    -            ///  Receive poll demand
    -            RPD: u32,
    -        }),
    -        ///  Ethernet DMA receive descriptor list address register
    -        DMARDLAR: mmio.Mmio(packed struct(u32) {
    -            ///  Start of receive list
    -            SRL: u32,
    -        }),
    -        ///  Ethernet DMA transmit descriptor list address register
    -        DMATDLAR: mmio.Mmio(packed struct(u32) {
    -            ///  Start of transmit list
    -            STL: u32,
    -        }),
    -        ///  Ethernet DMA status register
    -        DMASR: mmio.Mmio(packed struct(u32) {
    -            ///  Transmit status
    -            TS: u1,
    -            ///  Transmit process stopped status
    -            TPSS: u1,
    -            ///  Transmit buffer unavailable status
    -            TBUS: u1,
    -            ///  Transmit jabber timeout status
    -            TJTS: u1,
    -            ///  Receive overflow status
    -            ROS: u1,
    -            ///  Transmit underflow status
    -            TUS: u1,
    -            ///  Receive status
    -            RS: u1,
    -            ///  Receive buffer unavailable status
    -            RBUS: u1,
    -            ///  Receive process stopped status
    -            RPSS: u1,
    -            ///  Receive watchdog timeout status
    -            PWTS: u1,
    -            ///  Early transmit status
    -            ETS: u1,
    -            reserved13: u2,
    -            ///  Fatal bus error status
    -            FBES: u1,
    -            ///  Early receive status
    -            ERS: u1,
    -            ///  Abnormal interrupt summary
    -            AIS: u1,
    -            ///  Normal interrupt summary
    -            NIS: u1,
    -            ///  Receive process state
    -            RPS: u3,
    -            ///  Transmit process state
    -            TPS: u3,
    -            ///  Error bits status
    -            EBS: u3,
    -            reserved27: u1,
    -            ///  MMC status
    -            MMCS: u1,
    -            ///  PMT status
    -            PMTS: u1,
    -            ///  Time stamp trigger status
    -            TSTS: u1,
    -            padding: u2,
    -        }),
    -        ///  Ethernet DMA operation mode register
    -        DMAOMR: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  SR
    -            SR: u1,
    -            ///  OSF
    -            OSF: u1,
    -            ///  RTC
    -            RTC: u2,
    -            reserved6: u1,
    -            ///  FUGF
    -            FUGF: u1,
    -            ///  FEF
    -            FEF: u1,
    -            reserved13: u5,
    -            ///  ST
    -            ST: u1,
    -            ///  TTC
    -            TTC: u3,
    -            reserved20: u3,
    -            ///  FTF
    -            FTF: u1,
    -            ///  TSF
    -            TSF: u1,
    -            reserved24: u2,
    -            ///  DFRF
    -            DFRF: u1,
    -            ///  RSF
    -            RSF: u1,
    -            ///  DTCEFD
    -            DTCEFD: u1,
    -            padding: u5,
    -        }),
    -        ///  Ethernet DMA interrupt enable register
    -        DMAIER: mmio.Mmio(packed struct(u32) {
    -            ///  Transmit interrupt enable
    -            TIE: u1,
    -            ///  Transmit process stopped interrupt enable
    -            TPSIE: u1,
    -            ///  Transmit buffer unavailable interrupt enable
    -            TBUIE: u1,
    -            ///  Transmit jabber timeout interrupt enable
    -            TJTIE: u1,
    -            ///  Overflow interrupt enable
    -            ROIE: u1,
    -            ///  Underflow interrupt enable
    -            TUIE: u1,
    -            ///  Receive interrupt enable
    -            RIE: u1,
    -            ///  Receive buffer unavailable interrupt enable
    -            RBUIE: u1,
    -            ///  Receive process stopped interrupt enable
    -            RPSIE: u1,
    -            ///  receive watchdog timeout interrupt enable
    -            RWTIE: u1,
    -            ///  Early transmit interrupt enable
    -            ETIE: u1,
    -            reserved13: u2,
    -            ///  Fatal bus error interrupt enable
    -            FBEIE: u1,
    -            ///  Early receive interrupt enable
    -            ERIE: u1,
    -            ///  Abnormal interrupt summary enable
    -            AISE: u1,
    -            ///  Normal interrupt summary enable
    -            NISE: u1,
    -            padding: u15,
    -        }),
    -        ///  Ethernet DMA missed frame and buffer overflow counter register
    -        DMAMFBOCR: mmio.Mmio(packed struct(u32) {
    -            ///  Missed frames by the controller
    -            MFC: u16,
    -            ///  Overflow bit for missed frame counter
    -            OMFC: u1,
    -            ///  Missed frames by the application
    -            MFA: u11,
    -            ///  Overflow bit for FIFO overflow counter
    -            OFOC: u1,
    -            padding: u3,
    -        }),
    -        reserved72: [36]u8,
    -        ///  Ethernet DMA current host transmit descriptor register
    -        DMACHTDR: mmio.Mmio(packed struct(u32) {
    -            ///  Host transmit descriptor address pointer
    -            HTDAP: u32,
    -        }),
    -        ///  Ethernet DMA current host receive descriptor register
    -        DMACHRDR: mmio.Mmio(packed struct(u32) {
    -            ///  Host receive descriptor address pointer
    -            HRDAP: u32,
    -        }),
    -        ///  Ethernet DMA current host transmit buffer address register
    -        DMACHTBAR: mmio.Mmio(packed struct(u32) {
    -            ///  Host transmit buffer address pointer
    -            HTBAP: u32,
    -        }),
    -        ///  Ethernet DMA current host receive buffer address register
    -        DMACHRBAR: mmio.Mmio(packed struct(u32) {
    -            ///  Host receive buffer address pointer
    -            HRBAP: u32,
    -        }),
    -    };
    -
    -    ///  Secure digital input/output interface
    -    pub const SDIO = extern struct {
    -        ///  Bits 1:0 = PWRCTRL: Power supply control bits
    -        POWER: mmio.Mmio(packed struct(u32) {
    -            ///  PWRCTRL
    -            PWRCTRL: u2,
    -            padding: u30,
    -        }),
    -        ///  SDI clock control register (SDIO_CLKCR)
    -        CLKCR: mmio.Mmio(packed struct(u32) {
    -            ///  Clock divide factor
    -            CLKDIV: u8,
    -            ///  Clock enable bit
    -            CLKEN: u1,
    -            ///  Power saving configuration bit
    -            PWRSAV: u1,
    -            ///  Clock divider bypass enable bit
    -            BYPASS: u1,
    -            ///  Wide bus mode enable bit
    -            WIDBUS: u2,
    -            ///  SDIO_CK dephasing selection bit
    -            NEGEDGE: u1,
    -            ///  HW Flow Control enable
    -            HWFC_EN: u1,
    -            padding: u17,
    -        }),
    -        ///  Bits 31:0 = : Command argument
    -        ARG: mmio.Mmio(packed struct(u32) {
    -            ///  Command argument
    -            CMDARG: u32,
    -        }),
    -        ///  SDIO command register (SDIO_CMD)
    -        CMD: mmio.Mmio(packed struct(u32) {
    -            ///  CMDINDEX
    -            CMDINDEX: u6,
    -            ///  WAITRESP
    -            WAITRESP: u2,
    -            ///  WAITINT
    -            WAITINT: u1,
    -            ///  WAITPEND
    -            WAITPEND: u1,
    -            ///  CPSMEN
    -            CPSMEN: u1,
    -            ///  SDIOSuspend
    -            SDIOSuspend: u1,
    -            ///  ENCMDcompl
    -            ENCMDcompl: u1,
    -            ///  nIEN
    -            nIEN: u1,
    -            ///  CE_ATACMD
    -            CE_ATACMD: u1,
    -            padding: u17,
    -        }),
    -        ///  SDIO command register
    -        RESPCMD: mmio.Mmio(packed struct(u32) {
    -            ///  RESPCMD
    -            RESPCMD: u6,
    -            padding: u26,
    -        }),
    -        ///  Bits 31:0 = CARDSTATUS1
    -        RESPI1: mmio.Mmio(packed struct(u32) {
    -            ///  CARDSTATUS1
    -            CARDSTATUS1: u32,
    -        }),
    -        ///  Bits 31:0 = CARDSTATUS2
    -        RESP2: mmio.Mmio(packed struct(u32) {
    -            ///  CARDSTATUS2
    -            CARDSTATUS2: u32,
    -        }),
    -        ///  Bits 31:0 = CARDSTATUS3
    -        RESP3: mmio.Mmio(packed struct(u32) {
    -            ///  CARDSTATUS3
    -            CARDSTATUS3: u32,
    -        }),
    -        ///  Bits 31:0 = CARDSTATUS4
    -        RESP4: mmio.Mmio(packed struct(u32) {
    -            ///  CARDSTATUS4
    -            CARDSTATUS4: u32,
    -        }),
    -        ///  Bits 31:0 = DATATIME: Data timeout period
    -        DTIMER: mmio.Mmio(packed struct(u32) {
    -            ///  Data timeout period
    -            DATATIME: u32,
    -        }),
    -        ///  Bits 24:0 = DATALENGTH: Data length value
    -        DLEN: mmio.Mmio(packed struct(u32) {
    -            ///  Data length value
    -            DATALENGTH: u25,
    -            padding: u7,
    -        }),
    -        ///  SDIO data control register (SDIO_DCTRL)
    -        DCTRL: mmio.Mmio(packed struct(u32) {
    -            ///  DTEN
    -            DTEN: u1,
    -            ///  DTDIR
    -            DTDIR: u1,
    -            ///  DTMODE
    -            DTMODE: u1,
    -            ///  DMAEN
    -            DMAEN: u1,
    -            ///  DBLOCKSIZE
    -            DBLOCKSIZE: u4,
    -            ///  PWSTART
    -            PWSTART: u1,
    -            ///  PWSTOP
    -            PWSTOP: u1,
    -            ///  RWMOD
    -            RWMOD: u1,
    -            ///  SDIOEN
    -            SDIOEN: u1,
    -            padding: u20,
    -        }),
    -        ///  Bits 24:0 = DATACOUNT: Data count value
    -        DCOUNT: mmio.Mmio(packed struct(u32) {
    -            ///  Data count value
    -            DATACOUNT: u25,
    -            padding: u7,
    -        }),
    -        ///  SDIO status register (SDIO_STA)
    -        STA: mmio.Mmio(packed struct(u32) {
    -            ///  CCRCFAIL
    -            CCRCFAIL: u1,
    -            ///  DCRCFAIL
    -            DCRCFAIL: u1,
    -            ///  CTIMEOUT
    -            CTIMEOUT: u1,
    -            ///  DTIMEOUT
    -            DTIMEOUT: u1,
    -            ///  TXUNDERR
    -            TXUNDERR: u1,
    -            ///  RXOVERR
    -            RXOVERR: u1,
    -            ///  CMDREND
    -            CMDREND: u1,
    -            ///  CMDSENT
    -            CMDSENT: u1,
    -            ///  DATAEND
    -            DATAEND: u1,
    -            ///  STBITERR
    -            STBITERR: u1,
    -            ///  DBCKEND
    -            DBCKEND: u1,
    -            ///  CMDACT
    -            CMDACT: u1,
    -            ///  TXACT
    -            TXACT: u1,
    -            ///  RXACT
    -            RXACT: u1,
    -            ///  TXFIFOHE
    -            TXFIFOHE: u1,
    -            ///  RXFIFOHF
    -            RXFIFOHF: u1,
    -            ///  TXFIFOF
    -            TXFIFOF: u1,
    -            ///  RXFIFOF
    -            RXFIFOF: u1,
    -            ///  TXFIFOE
    -            TXFIFOE: u1,
    -            ///  RXFIFOE
    -            RXFIFOE: u1,
    -            ///  TXDAVL
    -            TXDAVL: u1,
    -            ///  RXDAVL
    -            RXDAVL: u1,
    -            ///  SDIOIT
    -            SDIOIT: u1,
    -            ///  CEATAEND
    -            CEATAEND: u1,
    -            padding: u8,
    -        }),
    -        ///  SDIO interrupt clear register (SDIO_ICR)
    -        ICR: mmio.Mmio(packed struct(u32) {
    -            ///  CCRCFAILC
    -            CCRCFAILC: u1,
    -            ///  DCRCFAILC
    -            DCRCFAILC: u1,
    -            ///  CTIMEOUTC
    -            CTIMEOUTC: u1,
    -            ///  DTIMEOUTC
    -            DTIMEOUTC: u1,
    -            ///  TXUNDERRC
    -            TXUNDERRC: u1,
    -            ///  RXOVERRC
    -            RXOVERRC: u1,
    -            ///  CMDRENDC
    -            CMDRENDC: u1,
    -            ///  CMDSENTC
    -            CMDSENTC: u1,
    -            ///  DATAENDC
    -            DATAENDC: u1,
    -            ///  STBITERRC
    -            STBITERRC: u1,
    -            ///  DBCKENDC
    -            DBCKENDC: u1,
    -            reserved22: u11,
    -            ///  SDIOITC
    -            SDIOITC: u1,
    -            ///  CEATAENDC
    -            CEATAENDC: u1,
    -            padding: u8,
    -        }),
    -        ///  SDIO mask register (SDIO_MASK)
    -        MASK: mmio.Mmio(packed struct(u32) {
    -            ///  CCRCFAILIE
    -            CCRCFAILIE: u1,
    -            ///  DCRCFAILIE
    -            DCRCFAILIE: u1,
    -            ///  CTIMEOUTIE
    -            CTIMEOUTIE: u1,
    -            ///  DTIMEOUTIE
    -            DTIMEOUTIE: u1,
    -            ///  TXUNDERRIE
    -            TXUNDERRIE: u1,
    -            ///  RXOVERRIE
    -            RXOVERRIE: u1,
    -            ///  CMDRENDIE
    -            CMDRENDIE: u1,
    -            ///  CMDSENTIE
    -            CMDSENTIE: u1,
    -            ///  DATAENDIE
    -            DATAENDIE: u1,
    -            ///  STBITERRIE
    -            STBITERRIE: u1,
    -            ///  DBACKENDIE
    -            DBACKENDIE: u1,
    -            ///  CMDACTIE
    -            CMDACTIE: u1,
    -            ///  TXACTIE
    -            TXACTIE: u1,
    -            ///  RXACTIE
    -            RXACTIE: u1,
    -            ///  TXFIFOHEIE
    -            TXFIFOHEIE: u1,
    -            ///  RXFIFOHFIE
    -            RXFIFOHFIE: u1,
    -            ///  TXFIFOFIE
    -            TXFIFOFIE: u1,
    -            ///  RXFIFOFIE
    -            RXFIFOFIE: u1,
    -            ///  TXFIFOEIE
    -            TXFIFOEIE: u1,
    -            ///  RXFIFOEIE
    -            RXFIFOEIE: u1,
    -            ///  TXDAVLIE
    -            TXDAVLIE: u1,
    -            ///  RXDAVLIE
    -            RXDAVLIE: u1,
    -            ///  SDIOITIE
    -            SDIOITIE: u1,
    -            ///  CEATENDIE
    -            CEATENDIE: u1,
    -            padding: u8,
    -        }),
    -        reserved72: [8]u8,
    -        ///  Bits 23:0 = FIFOCOUNT: Remaining number of words to be written to or read from the FIFO
    -        FIFOCNT: mmio.Mmio(packed struct(u32) {
    -            ///  FIF0COUNT
    -            FIF0COUNT: u24,
    -            padding: u8,
    -        }),
    -        reserved128: [52]u8,
    -        ///  bits 31:0 = FIFOData: Receive and transmit FIFO data
    -        FIFO: mmio.Mmio(packed struct(u32) {
    -            ///  FIFOData
    -            FIFOData: u32,
    -        }),
    -    };
    -
    -    ///  Real time clock
    -    pub const RTC = extern struct {
    -        ///  RTC Control Register High
    -        CRH: mmio.Mmio(packed struct(u32) {
    -            ///  Second interrupt Enable
    -            SECIE: u1,
    -            ///  Alarm interrupt Enable
    -            ALRIE: u1,
    -            ///  Overflow interrupt Enable
    -            OWIE: u1,
    -            padding: u29,
    -        }),
    -        ///  RTC Control Register Low
    -        CRL: mmio.Mmio(packed struct(u32) {
    -            ///  Second Flag
    -            SECF: u1,
    -            ///  Alarm Flag
    -            ALRF: u1,
    -            ///  Overflow Flag
    -            OWF: u1,
    -            ///  Registers Synchronized Flag
    -            RSF: u1,
    -            ///  Configuration Flag
    -            CNF: u1,
    -            ///  RTC operation OFF
    -            RTOFF: u1,
    -            padding: u26,
    -        }),
    -        ///  RTC Prescaler Load Register High
    -        PRLH: mmio.Mmio(packed struct(u32) {
    -            ///  RTC Prescaler Load Register High
    -            PRLH: u4,
    -            padding: u28,
    -        }),
    -        ///  RTC Prescaler Load Register Low
    -        PRLL: mmio.Mmio(packed struct(u32) {
    -            ///  RTC Prescaler Divider Register Low
    -            PRLL: u16,
    -            padding: u16,
    -        }),
    -        ///  RTC Prescaler Divider Register High
    -        DIVH: mmio.Mmio(packed struct(u32) {
    -            ///  RTC prescaler divider register high
    -            DIVH: u4,
    -            padding: u28,
    -        }),
    -        ///  RTC Prescaler Divider Register Low
    -        DIVL: mmio.Mmio(packed struct(u32) {
    -            ///  RTC prescaler divider register Low
    -            DIVL: u16,
    -            padding: u16,
    -        }),
    -        ///  RTC Counter Register High
    -        CNTH: mmio.Mmio(packed struct(u32) {
    -            ///  RTC counter register high
    -            CNTH: u16,
    -            padding: u16,
    -        }),
    -        ///  RTC Counter Register Low
    -        CNTL: mmio.Mmio(packed struct(u32) {
    -            ///  RTC counter register Low
    -            CNTL: u16,
    -            padding: u16,
    -        }),
    -        ///  RTC Alarm Register High
    -        ALRH: mmio.Mmio(packed struct(u32) {
    -            ///  RTC alarm register high
    -            ALRH: u16,
    -            padding: u16,
    -        }),
    -        ///  RTC Alarm Register Low
    -        ALRL: mmio.Mmio(packed struct(u32) {
    -            ///  RTC alarm register low
    -            ALRL: u16,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  Backup registers
    -    pub const BKP = extern struct {
    -        ///  Backup data register (BKP_DR)
    -        DR1: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D1: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR2: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D2: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR3: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D3: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR4: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D4: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR5: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D5: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR6: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D6: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR7: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D7: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR8: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D8: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR9: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D9: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR10: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D10: u16,
    -            padding: u16,
    -        }),
    -        ///  RTC clock calibration register (BKP_RTCCR)
    -        RTCCR: mmio.Mmio(packed struct(u32) {
    -            ///  Calibration value
    -            CAL: u7,
    -            ///  Calibration Clock Output
    -            CCO: u1,
    -            ///  Alarm or second output enable
    -            ASOE: u1,
    -            ///  Alarm or second output selection
    -            ASOS: u1,
    -            padding: u22,
    -        }),
    -        ///  Backup control register (BKP_CR)
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  Tamper pin enable
    -            TPE: u1,
    -            ///  Tamper pin active level
    -            TPAL: u1,
    -            padding: u30,
    -        }),
    -        ///  BKP_CSR control/status register (BKP_CSR)
    -        CSR: mmio.Mmio(packed struct(u32) {
    -            ///  Clear Tamper event
    -            CTE: u1,
    -            ///  Clear Tamper Interrupt
    -            CTI: u1,
    -            ///  Tamper Pin interrupt enable
    -            TPIE: u1,
    -            reserved8: u5,
    -            ///  Tamper Event Flag
    -            TEF: u1,
    -            ///  Tamper Interrupt Flag
    -            TIF: u1,
    -            padding: u22,
    -        }),
    -        reserved60: [8]u8,
    -        ///  Backup data register (BKP_DR)
    -        DR11: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            DR11: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR12: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            DR12: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR13: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            DR13: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR14: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D14: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR15: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D15: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR16: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D16: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR17: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D17: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR18: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D18: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR19: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D19: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR20: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D20: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR21: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D21: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR22: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D22: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR23: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D23: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR24: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D24: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR25: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D25: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR26: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D26: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR27: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D27: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR28: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D28: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR29: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D29: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR30: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D30: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR31: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D31: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR32: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D32: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR33: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D33: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR34: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D34: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR35: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D35: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR36: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D36: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR37: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D37: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR38: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D38: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR39: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D39: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR40: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D40: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR41: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D41: u16,
    -            padding: u16,
    -        }),
    -        ///  Backup data register (BKP_DR)
    -        DR42: mmio.Mmio(packed struct(u32) {
    -            ///  Backup data
    -            D42: u16,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  Independent watchdog
    -    pub const IWDG = extern struct {
    -        ///  Key register (IWDG_KR)
    -        KR: mmio.Mmio(packed struct(u32) {
    -            ///  Key value
    -            KEY: u16,
    -            padding: u16,
    -        }),
    -        ///  Prescaler register (IWDG_PR)
    -        PR: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler divider
    -            PR: u3,
    -            padding: u29,
    -        }),
    -        ///  Reload register (IWDG_RLR)
    -        RLR: mmio.Mmio(packed struct(u32) {
    -            ///  Watchdog counter reload value
    -            RL: u12,
    -            padding: u20,
    -        }),
    -        ///  Status register (IWDG_SR)
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Watchdog prescaler value update
    -            PVU: u1,
    -            ///  Watchdog counter reload value update
    -            RVU: u1,
    -            padding: u30,
    -        }),
    -    };
    -
    -    ///  Window watchdog
    -    pub const WWDG = extern struct {
    -        ///  Control register (WWDG_CR)
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  7-bit counter (MSB to LSB)
    -            T: u7,
    -            ///  Activation bit
    -            WDGA: u1,
    -            padding: u24,
    -        }),
    -        ///  Configuration register (WWDG_CFR)
    -        CFR: mmio.Mmio(packed struct(u32) {
    -            ///  7-bit window value
    -            W: u7,
    -            ///  Timer Base
    -            WDGTB: u2,
    -            ///  Early Wakeup Interrupt
    -            EWI: u1,
    -            padding: u22,
    -        }),
    -        ///  Status register (WWDG_SR)
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Early Wakeup Interrupt
    -            EWI: u1,
    -            padding: u31,
    -        }),
    -    };
    -
    -    ///  Advanced timer
    -    pub const TIM1 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            ///  One-pulse mode
    -            OPM: u1,
    -            ///  Direction
    -            DIR: u1,
    -            ///  Center-aligned mode selection
    -            CMS: u2,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            ///  Clock division
    -            CKD: u2,
    -            padding: u22,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/compare preloaded control
    -            CCPC: u1,
    -            reserved2: u1,
    -            ///  Capture/compare control update selection
    -            CCUS: u1,
    -            ///  Capture/compare DMA selection
    -            CCDS: u1,
    -            ///  Master mode selection
    -            MMS: u3,
    -            ///  TI1 selection
    -            TI1S: u1,
    -            ///  Output Idle state 1
    -            OIS1: u1,
    -            ///  Output Idle state 1
    -            OIS1N: u1,
    -            ///  Output Idle state 2
    -            OIS2: u1,
    -            ///  Output Idle state 2
    -            OIS2N: u1,
    -            ///  Output Idle state 3
    -            OIS3: u1,
    -            ///  Output Idle state 3
    -            OIS3N: u1,
    -            ///  Output Idle state 4
    -            OIS4: u1,
    -            padding: u17,
    -        }),
    -        ///  slave mode control register
    -        SMCR: mmio.Mmio(packed struct(u32) {
    -            ///  Slave mode selection
    -            SMS: u3,
    -            reserved4: u1,
    -            ///  Trigger selection
    -            TS: u3,
    -            ///  Master/Slave mode
    -            MSM: u1,
    -            ///  External trigger filter
    -            ETF: u4,
    -            ///  External trigger prescaler
    -            ETPS: u2,
    -            ///  External clock enable
    -            ECE: u1,
    -            ///  External trigger polarity
    -            ETP: u1,
    -            padding: u16,
    -        }),
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            ///  Capture/Compare 1 interrupt enable
    -            CC1IE: u1,
    -            ///  Capture/Compare 2 interrupt enable
    -            CC2IE: u1,
    -            ///  Capture/Compare 3 interrupt enable
    -            CC3IE: u1,
    -            ///  Capture/Compare 4 interrupt enable
    -            CC4IE: u1,
    -            ///  COM interrupt enable
    -            COMIE: u1,
    -            ///  Trigger interrupt enable
    -            TIE: u1,
    -            ///  Break interrupt enable
    -            BIE: u1,
    -            ///  Update DMA request enable
    -            UDE: u1,
    -            ///  Capture/Compare 1 DMA request enable
    -            CC1DE: u1,
    -            ///  Capture/Compare 2 DMA request enable
    -            CC2DE: u1,
    -            ///  Capture/Compare 3 DMA request enable
    -            CC3DE: u1,
    -            ///  Capture/Compare 4 DMA request enable
    -            CC4DE: u1,
    -            ///  COM DMA request enable
    -            COMDE: u1,
    -            ///  Trigger DMA request enable
    -            TDE: u1,
    -            padding: u17,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            ///  Capture/compare 1 interrupt flag
    -            CC1IF: u1,
    -            ///  Capture/Compare 2 interrupt flag
    -            CC2IF: u1,
    -            ///  Capture/Compare 3 interrupt flag
    -            CC3IF: u1,
    -            ///  Capture/Compare 4 interrupt flag
    -            CC4IF: u1,
    -            ///  COM interrupt flag
    -            COMIF: u1,
    -            ///  Trigger interrupt flag
    -            TIF: u1,
    -            ///  Break interrupt flag
    -            BIF: u1,
    -            reserved9: u1,
    -            ///  Capture/Compare 1 overcapture flag
    -            CC1OF: u1,
    -            ///  Capture/compare 2 overcapture flag
    -            CC2OF: u1,
    -            ///  Capture/Compare 3 overcapture flag
    -            CC3OF: u1,
    -            ///  Capture/Compare 4 overcapture flag
    -            CC4OF: u1,
    -            padding: u19,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            ///  Capture/compare 1 generation
    -            CC1G: u1,
    -            ///  Capture/compare 2 generation
    -            CC2G: u1,
    -            ///  Capture/compare 3 generation
    -            CC3G: u1,
    -            ///  Capture/compare 4 generation
    -            CC4G: u1,
    -            ///  Capture/Compare control update generation
    -            COMG: u1,
    -            ///  Trigger generation
    -            TG: u1,
    -            ///  Break generation
    -            BG: u1,
    -            padding: u24,
    -        }),
    -        ///  capture/compare mode register (output mode)
    -        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 selection
    -            CC1S: u2,
    -            ///  Output Compare 1 fast enable
    -            OC1FE: u1,
    -            ///  Output Compare 1 preload enable
    -            OC1PE: u1,
    -            ///  Output Compare 1 mode
    -            OC1M: u3,
    -            ///  Output Compare 1 clear enable
    -            OC1CE: u1,
    -            ///  Capture/Compare 2 selection
    -            CC2S: u2,
    -            ///  Output Compare 2 fast enable
    -            OC2FE: u1,
    -            ///  Output Compare 2 preload enable
    -            OC2PE: u1,
    -            ///  Output Compare 2 mode
    -            OC2M: u3,
    -            ///  Output Compare 2 clear enable
    -            OC2CE: u1,
    -            padding: u16,
    -        }),
    -        ///  capture/compare mode register (output mode)
    -        CCMR2_Output: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 3 selection
    -            CC3S: u2,
    -            ///  Output compare 3 fast enable
    -            OC3FE: u1,
    -            ///  Output compare 3 preload enable
    -            OC3PE: u1,
    -            ///  Output compare 3 mode
    -            OC3M: u3,
    -            ///  Output compare 3 clear enable
    -            OC3CE: u1,
    -            ///  Capture/Compare 4 selection
    -            CC4S: u2,
    -            ///  Output compare 4 fast enable
    -            OC4FE: u1,
    -            ///  Output compare 4 preload enable
    -            OC4PE: u1,
    -            ///  Output compare 4 mode
    -            OC4M: u3,
    -            ///  Output compare 4 clear enable
    -            OC4CE: u1,
    -            padding: u16,
    -        }),
    -        ///  capture/compare enable register
    -        CCER: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 output enable
    -            CC1E: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1P: u1,
    -            ///  Capture/Compare 1 complementary output enable
    -            CC1NE: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1NP: u1,
    -            ///  Capture/Compare 2 output enable
    -            CC2E: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2P: u1,
    -            ///  Capture/Compare 2 complementary output enable
    -            CC2NE: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2NP: u1,
    -            ///  Capture/Compare 3 output enable
    -            CC3E: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC3P: u1,
    -            ///  Capture/Compare 3 complementary output enable
    -            CC3NE: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC3NP: u1,
    -            ///  Capture/Compare 4 output enable
    -            CC4E: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC4P: u1,
    -            padding: u18,
    -        }),
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  counter value
    -            CNT: u16,
    -            padding: u16,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Auto-reload value
    -            ARR: u16,
    -            padding: u16,
    -        }),
    -        ///  repetition counter register
    -        RCR: mmio.Mmio(packed struct(u32) {
    -            ///  Repetition counter value
    -            REP: u8,
    -            padding: u24,
    -        }),
    -        ///  capture/compare register 1
    -        CCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 value
    -            CCR1: u16,
    -            padding: u16,
    -        }),
    -        ///  capture/compare register 2
    -        CCR2: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 2 value
    -            CCR2: u16,
    -            padding: u16,
    -        }),
    -        ///  capture/compare register 3
    -        CCR3: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare value
    -            CCR3: u16,
    -            padding: u16,
    -        }),
    -        ///  capture/compare register 4
    -        CCR4: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare value
    -            CCR4: u16,
    -            padding: u16,
    -        }),
    -        ///  break and dead-time register
    -        BDTR: mmio.Mmio(packed struct(u32) {
    -            ///  Dead-time generator setup
    -            DTG: u8,
    -            ///  Lock configuration
    -            LOCK: u2,
    -            ///  Off-state selection for Idle mode
    -            OSSI: u1,
    -            ///  Off-state selection for Run mode
    -            OSSR: u1,
    -            ///  Break enable
    -            BKE: u1,
    -            ///  Break polarity
    -            BKP: u1,
    -            ///  Automatic output enable
    -            AOE: u1,
    -            ///  Main output enable
    -            MOE: u1,
    -            padding: u16,
    -        }),
    -        ///  DMA control register
    -        DCR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA base address
    -            DBA: u5,
    -            reserved8: u3,
    -            ///  DMA burst length
    -            DBL: u5,
    -            padding: u19,
    -        }),
    -        ///  DMA address for full transfer
    -        DMAR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA register for burst accesses
    -            DMAB: u16,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  Ethernet: Precision time protocol
    -    pub const ETHERNET_PTP = extern struct {
    -        ///  Ethernet PTP time stamp control register (ETH_PTPTSCR)
    -        PTPTSCR: mmio.Mmio(packed struct(u32) {
    -            ///  Time stamp enable
    -            TSE: u1,
    -            ///  Time stamp fine or coarse update
    -            TSFCU: u1,
    -            ///  Time stamp system time initialize
    -            TSSTI: u1,
    -            ///  Time stamp system time update
    -            TSSTU: u1,
    -            ///  Time stamp interrupt trigger enable
    -            TSITE: u1,
    -            ///  Time stamp addend register update
    -            TSARU: u1,
    -            padding: u26,
    -        }),
    -        ///  Ethernet PTP subsecond increment register
    -        PTPSSIR: mmio.Mmio(packed struct(u32) {
    -            ///  System time subsecond increment
    -            STSSI: u8,
    -            padding: u24,
    -        }),
    -        ///  Ethernet PTP time stamp high register
    -        PTPTSHR: mmio.Mmio(packed struct(u32) {
    -            ///  System time second
    -            STS: u32,
    -        }),
    -        ///  Ethernet PTP time stamp low register (ETH_PTPTSLR)
    -        PTPTSLR: mmio.Mmio(packed struct(u32) {
    -            ///  System time subseconds
    -            STSS: u31,
    -            ///  System time positive or negative sign
    -            STPNS: u1,
    -        }),
    -        ///  Ethernet PTP time stamp high update register
    -        PTPTSHUR: mmio.Mmio(packed struct(u32) {
    -            ///  Time stamp update second
    -            TSUS: u32,
    -        }),
    -        ///  Ethernet PTP time stamp low update register (ETH_PTPTSLUR)
    -        PTPTSLUR: mmio.Mmio(packed struct(u32) {
    -            ///  Time stamp update subseconds
    -            TSUSS: u31,
    -            ///  Time stamp update positive or negative sign
    -            TSUPNS: u1,
    -        }),
    -        ///  Ethernet PTP time stamp addend register
    -        PTPTSAR: mmio.Mmio(packed struct(u32) {
    -            ///  Time stamp addend
    -            TSA: u32,
    -        }),
    -        ///  Ethernet PTP target time high register
    -        PTPTTHR: mmio.Mmio(packed struct(u32) {
    -            ///  Target time stamp high
    -            TTSH: u32,
    -        }),
    -        ///  Ethernet PTP target time low register
    -        PTPTTLR: mmio.Mmio(packed struct(u32) {
    -            ///  Target time stamp low
    -            TTSL: u32,
    -        }),
    -    };
    -
    -    ///  General purpose timer
    -    pub const TIM2 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            ///  One-pulse mode
    -            OPM: u1,
    -            ///  Direction
    -            DIR: u1,
    -            ///  Center-aligned mode selection
    -            CMS: u2,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            ///  Clock division
    -            CKD: u2,
    -            padding: u22,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            reserved3: u3,
    -            ///  Capture/compare DMA selection
    -            CCDS: u1,
    -            ///  Master mode selection
    -            MMS: u3,
    -            ///  TI1 selection
    -            TI1S: u1,
    -            padding: u24,
    -        }),
    -        ///  slave mode control register
    -        SMCR: mmio.Mmio(packed struct(u32) {
    -            ///  Slave mode selection
    -            SMS: u3,
    -            reserved4: u1,
    -            ///  Trigger selection
    -            TS: u3,
    -            ///  Master/Slave mode
    -            MSM: u1,
    -            ///  External trigger filter
    -            ETF: u4,
    -            ///  External trigger prescaler
    -            ETPS: u2,
    -            ///  External clock enable
    -            ECE: u1,
    -            ///  External trigger polarity
    -            ETP: u1,
    -            padding: u16,
    -        }),
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            ///  Capture/Compare 1 interrupt enable
    -            CC1IE: u1,
    -            ///  Capture/Compare 2 interrupt enable
    -            CC2IE: u1,
    -            ///  Capture/Compare 3 interrupt enable
    -            CC3IE: u1,
    -            ///  Capture/Compare 4 interrupt enable
    -            CC4IE: u1,
    -            reserved6: u1,
    -            ///  Trigger interrupt enable
    -            TIE: u1,
    -            reserved8: u1,
    -            ///  Update DMA request enable
    -            UDE: u1,
    -            ///  Capture/Compare 1 DMA request enable
    -            CC1DE: u1,
    -            ///  Capture/Compare 2 DMA request enable
    -            CC2DE: u1,
    -            ///  Capture/Compare 3 DMA request enable
    -            CC3DE: u1,
    -            ///  Capture/Compare 4 DMA request enable
    -            CC4DE: u1,
    -            reserved14: u1,
    -            ///  Trigger DMA request enable
    -            TDE: u1,
    -            padding: u17,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            ///  Capture/compare 1 interrupt flag
    -            CC1IF: u1,
    -            ///  Capture/Compare 2 interrupt flag
    -            CC2IF: u1,
    -            ///  Capture/Compare 3 interrupt flag
    -            CC3IF: u1,
    -            ///  Capture/Compare 4 interrupt flag
    -            CC4IF: u1,
    -            reserved6: u1,
    -            ///  Trigger interrupt flag
    -            TIF: u1,
    -            reserved9: u2,
    -            ///  Capture/Compare 1 overcapture flag
    -            CC1OF: u1,
    -            ///  Capture/compare 2 overcapture flag
    -            CC2OF: u1,
    -            ///  Capture/Compare 3 overcapture flag
    -            CC3OF: u1,
    -            ///  Capture/Compare 4 overcapture flag
    -            CC4OF: u1,
    -            padding: u19,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            ///  Capture/compare 1 generation
    -            CC1G: u1,
    -            ///  Capture/compare 2 generation
    -            CC2G: u1,
    -            ///  Capture/compare 3 generation
    -            CC3G: u1,
    -            ///  Capture/compare 4 generation
    -            CC4G: u1,
    -            reserved6: u1,
    -            ///  Trigger generation
    -            TG: u1,
    -            padding: u25,
    -        }),
    -        ///  capture/compare mode register 1 (output mode)
    -        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 selection
    -            CC1S: u2,
    -            ///  Output compare 1 fast enable
    -            OC1FE: u1,
    -            ///  Output compare 1 preload enable
    -            OC1PE: u1,
    -            ///  Output compare 1 mode
    -            OC1M: u3,
    -            ///  Output compare 1 clear enable
    -            OC1CE: u1,
    -            ///  Capture/Compare 2 selection
    -            CC2S: u2,
    -            ///  Output compare 2 fast enable
    -            OC2FE: u1,
    -            ///  Output compare 2 preload enable
    -            OC2PE: u1,
    -            ///  Output compare 2 mode
    -            OC2M: u3,
    -            ///  Output compare 2 clear enable
    -            OC2CE: u1,
    -            padding: u16,
    -        }),
    -        ///  capture/compare mode register 2 (output mode)
    -        CCMR2_Output: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 3 selection
    -            CC3S: u2,
    -            ///  Output compare 3 fast enable
    -            OC3FE: u1,
    -            ///  Output compare 3 preload enable
    -            OC3PE: u1,
    -            ///  Output compare 3 mode
    -            OC3M: u3,
    -            ///  Output compare 3 clear enable
    -            OC3CE: u1,
    -            ///  Capture/Compare 4 selection
    -            CC4S: u2,
    -            ///  Output compare 4 fast enable
    -            OC4FE: u1,
    -            ///  Output compare 4 preload enable
    -            OC4PE: u1,
    -            ///  Output compare 4 mode
    -            OC4M: u3,
    -            ///  Output compare 4 clear enable
    -            O24CE: u1,
    -            padding: u16,
    -        }),
    -        ///  capture/compare enable register
    -        CCER: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 output enable
    -            CC1E: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1P: u1,
    -            reserved4: u2,
    -            ///  Capture/Compare 2 output enable
    -            CC2E: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2P: u1,
    -            reserved8: u2,
    -            ///  Capture/Compare 3 output enable
    -            CC3E: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC3P: u1,
    -            reserved12: u2,
    -            ///  Capture/Compare 4 output enable
    -            CC4E: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC4P: u1,
    -            padding: u18,
    -        }),
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  counter value
    -            CNT: u16,
    -            padding: u16,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Auto-reload value
    -            ARR: u16,
    -            padding: u16,
    -        }),
    -        reserved52: [4]u8,
    -        ///  capture/compare register 1
    -        CCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 value
    -            CCR1: u16,
    -            padding: u16,
    -        }),
    -        ///  capture/compare register 2
    -        CCR2: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 2 value
    -            CCR2: u16,
    -            padding: u16,
    -        }),
    -        ///  capture/compare register 3
    -        CCR3: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare value
    -            CCR3: u16,
    -            padding: u16,
    -        }),
    -        ///  capture/compare register 4
    -        CCR4: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare value
    -            CCR4: u16,
    -            padding: u16,
    -        }),
    -        reserved72: [4]u8,
    -        ///  DMA control register
    -        DCR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA base address
    -            DBA: u5,
    -            reserved8: u3,
    -            ///  DMA burst length
    -            DBL: u5,
    -            padding: u19,
    -        }),
    -        ///  DMA address for full transfer
    -        DMAR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA register for burst accesses
    -            DMAB: u16,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  Ethernet: media access control
    -    pub const ETHERNET_MAC = extern struct {
    -        ///  Ethernet MAC configuration register (ETH_MACCR)
    -        MACCR: mmio.Mmio(packed struct(u32) {
    -            reserved2: u2,
    -            ///  Receiver enable
    -            RE: u1,
    -            ///  Transmitter enable
    -            TE: u1,
    -            ///  Deferral check
    -            DC: u1,
    -            ///  Back-off limit
    -            BL: u2,
    -            ///  Automatic pad/CRC stripping
    -            APCS: u1,
    -            reserved9: u1,
    -            ///  Retry disable
    -            RD: u1,
    -            ///  IPv4 checksum offload
    -            IPCO: u1,
    -            ///  Duplex mode
    -            DM: u1,
    -            ///  Loopback mode
    -            LM: u1,
    -            ///  Receive own disable
    -            ROD: u1,
    -            ///  Fast Ethernet speed
    -            FES: u1,
    -            reserved16: u1,
    -            ///  Carrier sense disable
    -            CSD: u1,
    -            ///  Interframe gap
    -            IFG: u3,
    -            reserved22: u2,
    -            ///  Jabber disable
    -            JD: u1,
    -            ///  Watchdog disable
    -            WD: u1,
    -            padding: u8,
    -        }),
    -        ///  Ethernet MAC frame filter register (ETH_MACCFFR)
    -        MACFFR: mmio.Mmio(packed struct(u32) {
    -            ///  Promiscuous mode
    -            PM: u1,
    -            ///  Hash unicast
    -            HU: u1,
    -            ///  Hash multicast
    -            HM: u1,
    -            ///  Destination address inverse filtering
    -            DAIF: u1,
    -            ///  Pass all multicast
    -            PAM: u1,
    -            ///  Broadcast frames disable
    -            BFD: u1,
    -            ///  Pass control frames
    -            PCF: u2,
    -            ///  Source address inverse filtering
    -            SAIF: u1,
    -            ///  Source address filter
    -            SAF: u1,
    -            ///  Hash or perfect filter
    -            HPF: u1,
    -            reserved31: u20,
    -            ///  Receive all
    -            RA: u1,
    -        }),
    -        ///  Ethernet MAC hash table high register
    -        MACHTHR: mmio.Mmio(packed struct(u32) {
    -            ///  Hash table high
    -            HTH: u32,
    -        }),
    -        ///  Ethernet MAC hash table low register
    -        MACHTLR: mmio.Mmio(packed struct(u32) {
    -            ///  Hash table low
    -            HTL: u32,
    -        }),
    -        ///  Ethernet MAC MII address register (ETH_MACMIIAR)
    -        MACMIIAR: mmio.Mmio(packed struct(u32) {
    -            ///  MII busy
    -            MB: u1,
    -            ///  MII write
    -            MW: u1,
    -            ///  Clock range
    -            CR: u3,
    -            reserved6: u1,
    -            ///  MII register
    -            MR: u5,
    -            ///  PHY address
    -            PA: u5,
    -            padding: u16,
    -        }),
    -        ///  Ethernet MAC MII data register (ETH_MACMIIDR)
    -        MACMIIDR: mmio.Mmio(packed struct(u32) {
    -            ///  MII data
    -            MD: u16,
    -            padding: u16,
    -        }),
    -        ///  Ethernet MAC flow control register (ETH_MACFCR)
    -        MACFCR: mmio.Mmio(packed struct(u32) {
    -            ///  Flow control busy/back pressure activate
    -            FCB_BPA: u1,
    -            ///  Transmit flow control enable
    -            TFCE: u1,
    -            ///  Receive flow control enable
    -            RFCE: u1,
    -            ///  Unicast pause frame detect
    -            UPFD: u1,
    -            ///  Pause low threshold
    -            PLT: u2,
    -            reserved7: u1,
    -            ///  Zero-quanta pause disable
    -            ZQPD: u1,
    -            reserved16: u8,
    -            ///  Pass control frames
    -            PT: u16,
    -        }),
    -        ///  Ethernet MAC VLAN tag register (ETH_MACVLANTR)
    -        MACVLANTR: mmio.Mmio(packed struct(u32) {
    -            ///  VLAN tag identifier (for receive frames)
    -            VLANTI: u16,
    -            ///  12-bit VLAN tag comparison
    -            VLANTC: u1,
    -            padding: u15,
    -        }),
    -        reserved40: [8]u8,
    -        ///  Ethernet MAC remote wakeup frame filter register (ETH_MACRWUFFR)
    -        MACRWUFFR: u32,
    -        ///  Ethernet MAC PMT control and status register (ETH_MACPMTCSR)
    -        MACPMTCSR: mmio.Mmio(packed struct(u32) {
    -            ///  Power down
    -            PD: u1,
    -            ///  Magic Packet enable
    -            MPE: u1,
    -            ///  Wakeup frame enable
    -            WFE: u1,
    -            reserved5: u2,
    -            ///  Magic packet received
    -            MPR: u1,
    -            ///  Wakeup frame received
    -            WFR: u1,
    -            reserved9: u2,
    -            ///  Global unicast
    -            GU: u1,
    -            reserved31: u21,
    -            ///  Wakeup frame filter register pointer reset
    -            WFFRPR: u1,
    -        }),
    -        reserved56: [8]u8,
    -        ///  Ethernet MAC interrupt status register (ETH_MACSR)
    -        MACSR: mmio.Mmio(packed struct(u32) {
    -            reserved3: u3,
    -            ///  PMT status
    -            PMTS: u1,
    -            ///  MMC status
    -            MMCS: u1,
    -            ///  MMC receive status
    -            MMCRS: u1,
    -            ///  MMC transmit status
    -            MMCTS: u1,
    -            reserved9: u2,
    -            ///  Time stamp trigger status
    -            TSTS: u1,
    -            padding: u22,
    -        }),
    -        ///  Ethernet MAC interrupt mask register (ETH_MACIMR)
    -        MACIMR: mmio.Mmio(packed struct(u32) {
    -            reserved3: u3,
    -            ///  PMT interrupt mask
    -            PMTIM: u1,
    -            reserved9: u5,
    -            ///  Time stamp trigger interrupt mask
    -            TSTIM: u1,
    -            padding: u22,
    -        }),
    -        ///  Ethernet MAC address 0 high register (ETH_MACA0HR)
    -        MACA0HR: mmio.Mmio(packed struct(u32) {
    -            ///  MAC address0 high
    -            MACA0H: u16,
    -            reserved31: u15,
    -            ///  Always 1
    -            MO: u1,
    -        }),
    -        ///  Ethernet MAC address 0 low register
    -        MACA0LR: mmio.Mmio(packed struct(u32) {
    -            ///  MAC address0 low
    -            MACA0L: u32,
    -        }),
    -        ///  Ethernet MAC address 1 high register (ETH_MACA1HR)
    -        MACA1HR: mmio.Mmio(packed struct(u32) {
    -            ///  MAC address1 high
    -            MACA1H: u16,
    -            reserved24: u8,
    -            ///  Mask byte control
    -            MBC: u6,
    -            ///  Source address
    -            SA: u1,
    -            ///  Address enable
    -            AE: u1,
    -        }),
    -        ///  Ethernet MAC address1 low register
    -        MACA1LR: mmio.Mmio(packed struct(u32) {
    -            ///  MAC address1 low
    -            MACA1L: u32,
    -        }),
    -        ///  Ethernet MAC address 2 high register (ETH_MACA2HR)
    -        MACA2HR: mmio.Mmio(packed struct(u32) {
    -            ///  Ethernet MAC address 2 high register
    -            ETH_MACA2HR: u16,
    -            reserved24: u8,
    -            ///  Mask byte control
    -            MBC: u6,
    -            ///  Source address
    -            SA: u1,
    -            ///  Address enable
    -            AE: u1,
    -        }),
    -        ///  Ethernet MAC address 2 low register
    -        MACA2LR: mmio.Mmio(packed struct(u32) {
    -            ///  MAC address2 low
    -            MACA2L: u31,
    -            padding: u1,
    -        }),
    -        ///  Ethernet MAC address 3 high register (ETH_MACA3HR)
    -        MACA3HR: mmio.Mmio(packed struct(u32) {
    -            ///  MAC address3 high
    -            MACA3H: u16,
    -            reserved24: u8,
    -            ///  Mask byte control
    -            MBC: u6,
    -            ///  Source address
    -            SA: u1,
    -            ///  Address enable
    -            AE: u1,
    -        }),
    -        ///  Ethernet MAC address 3 low register
    -        MACA3LR: mmio.Mmio(packed struct(u32) {
    -            ///  MAC address3 low
    -            MBCA3L: u32,
    -        }),
    -    };
    -
    -    ///  Ethernet: MAC management counters
    -    pub const ETHERNET_MMC = extern struct {
    -        ///  Ethernet MMC control register (ETH_MMCCR)
    -        MMCCR: mmio.Mmio(packed struct(u32) {
    -            ///  Counter reset
    -            CR: u1,
    -            ///  Counter stop rollover
    -            CSR: u1,
    -            ///  Reset on read
    -            ROR: u1,
    -            reserved31: u28,
    -            ///  MMC counter freeze
    -            MCF: u1,
    -        }),
    -        ///  Ethernet MMC receive interrupt register (ETH_MMCRIR)
    -        MMCRIR: mmio.Mmio(packed struct(u32) {
    -            reserved5: u5,
    -            ///  Received frames CRC error status
    -            RFCES: u1,
    -            ///  Received frames alignment error status
    -            RFAES: u1,
    -            reserved17: u10,
    -            ///  Received Good Unicast Frames Status
    -            RGUFS: u1,
    -            padding: u14,
    -        }),
    -        ///  Ethernet MMC transmit interrupt register (ETH_MMCTIR)
    -        MMCTIR: mmio.Mmio(packed struct(u32) {
    -            reserved14: u14,
    -            ///  Transmitted good frames single collision status
    -            TGFSCS: u1,
    -            ///  Transmitted good frames more single collision status
    -            TGFMSCS: u1,
    -            reserved21: u5,
    -            ///  Transmitted good frames status
    -            TGFS: u1,
    -            padding: u10,
    -        }),
    -        ///  Ethernet MMC receive interrupt mask register (ETH_MMCRIMR)
    -        MMCRIMR: mmio.Mmio(packed struct(u32) {
    -            reserved5: u5,
    -            ///  Received frame CRC error mask
    -            RFCEM: u1,
    -            ///  Received frames alignment error mask
    -            RFAEM: u1,
    -            reserved17: u10,
    -            ///  Received good unicast frames mask
    -            RGUFM: u1,
    -            padding: u14,
    -        }),
    -        ///  Ethernet MMC transmit interrupt mask register (ETH_MMCTIMR)
    -        MMCTIMR: mmio.Mmio(packed struct(u32) {
    -            reserved14: u14,
    -            ///  Transmitted good frames single collision mask
    -            TGFSCM: u1,
    -            ///  Transmitted good frames more single collision mask
    -            TGFMSCM: u1,
    -            reserved21: u5,
    -            ///  Transmitted good frames mask
    -            TGFM: u1,
    -            padding: u10,
    -        }),
    -        reserved76: [56]u8,
    -        ///  Ethernet MMC transmitted good frames after a single collision counter
    -        MMCTGFSCCR: mmio.Mmio(packed struct(u32) {
    -            ///  Transmitted good frames after a single collision counter
    -            TGFSCC: u32,
    -        }),
    -        ///  Ethernet MMC transmitted good frames after more than a single collision
    -        MMCTGFMSCCR: mmio.Mmio(packed struct(u32) {
    -            ///  Transmitted good frames after more than a single collision counter
    -            TGFMSCC: u32,
    -        }),
    -        reserved104: [20]u8,
    -        ///  Ethernet MMC transmitted good frames counter register
    -        MMCTGFCR: mmio.Mmio(packed struct(u32) {
    -            ///  Transmitted good frames counter
    -            TGFC: u32,
    -        }),
    -        reserved148: [40]u8,
    -        ///  Ethernet MMC received frames with CRC error counter register
    -        MMCRFCECR: mmio.Mmio(packed struct(u32) {
    -            ///  Received frames with CRC error counter
    -            RFCFC: u32,
    -        }),
    -        ///  Ethernet MMC received frames with alignment error counter register
    -        MMCRFAECR: mmio.Mmio(packed struct(u32) {
    -            ///  Received frames with alignment error counter
    -            RFAEC: u32,
    -        }),
    -        reserved196: [40]u8,
    -        ///  MMC received good unicast frames counter register
    -        MMCRGUFCR: mmio.Mmio(packed struct(u32) {
    -            ///  Received good unicast frames counter
    -            RGUFC: u32,
    -        }),
    -    };
    -
    -    ///  USB on the go full speed
    -    pub const OTG_FS_PWRCLK = extern struct {
    -        ///  OTG_FS power and clock gating control register
    -        FS_PCGCCTL: mmio.Mmio(packed struct(u32) {
    -            ///  Stop PHY clock
    -            STPPCLK: u1,
    -            ///  Gate HCLK
    -            GATEHCLK: u1,
    -            reserved4: u2,
    -            ///  PHY Suspended
    -            PHYSUSP: u1,
    -            padding: u27,
    -        }),
    -    };
    -
    -    ///  General purpose timer
    -    pub const TIM9 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            ///  One-pulse mode
    -            OPM: u1,
    -            reserved7: u3,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            ///  Clock division
    -            CKD: u2,
    -            padding: u22,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            reserved4: u4,
    -            ///  Master mode selection
    -            MMS: u3,
    -            padding: u25,
    -        }),
    -        ///  slave mode control register
    -        SMCR: mmio.Mmio(packed struct(u32) {
    -            ///  Slave mode selection
    -            SMS: u3,
    -            reserved4: u1,
    -            ///  Trigger selection
    -            TS: u3,
    -            ///  Master/Slave mode
    -            MSM: u1,
    -            padding: u24,
    -        }),
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            ///  Capture/Compare 1 interrupt enable
    -            CC1IE: u1,
    -            ///  Capture/Compare 2 interrupt enable
    -            CC2IE: u1,
    -            reserved6: u3,
    -            ///  Trigger interrupt enable
    -            TIE: u1,
    -            padding: u25,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            ///  Capture/compare 1 interrupt flag
    -            CC1IF: u1,
    -            ///  Capture/Compare 2 interrupt flag
    -            CC2IF: u1,
    -            reserved6: u3,
    -            ///  Trigger interrupt flag
    -            TIF: u1,
    -            reserved9: u2,
    -            ///  Capture/Compare 1 overcapture flag
    -            CC1OF: u1,
    -            ///  Capture/compare 2 overcapture flag
    -            CC2OF: u1,
    -            padding: u21,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            ///  Capture/compare 1 generation
    -            CC1G: u1,
    -            ///  Capture/compare 2 generation
    -            CC2G: u1,
    -            reserved6: u3,
    -            ///  Trigger generation
    -            TG: u1,
    -            padding: u25,
    -        }),
    -        ///  capture/compare mode register 1 (output mode)
    -        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 selection
    -            CC1S: u2,
    -            ///  Output Compare 1 fast enable
    -            OC1FE: u1,
    -            ///  Output Compare 1 preload enable
    -            OC1PE: u1,
    -            ///  Output Compare 1 mode
    -            OC1M: u3,
    -            reserved8: u1,
    -            ///  Capture/Compare 2 selection
    -            CC2S: u2,
    -            ///  Output Compare 2 fast enable
    -            OC2FE: u1,
    -            ///  Output Compare 2 preload enable
    -            OC2PE: u1,
    -            ///  Output Compare 2 mode
    -            OC2M: u3,
    -            padding: u17,
    -        }),
    -        reserved32: [4]u8,
    -        ///  capture/compare enable register
    -        CCER: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 output enable
    -            CC1E: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1P: u1,
    -            reserved3: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1NP: u1,
    -            ///  Capture/Compare 2 output enable
    -            CC2E: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2P: u1,
    -            reserved7: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2NP: u1,
    -            padding: u24,
    -        }),
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  counter value
    -            CNT: u16,
    -            padding: u16,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Auto-reload value
    -            ARR: u16,
    -            padding: u16,
    -        }),
    -        reserved52: [4]u8,
    -        ///  capture/compare register 1
    -        CCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 value
    -            CCR1: u16,
    -            padding: u16,
    -        }),
    -        ///  capture/compare register 2
    -        CCR2: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 2 value
    -            CCR2: u16,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  USB on the go full speed
    -    pub const OTG_FS_HOST = extern struct {
    -        ///  OTG_FS host configuration register (OTG_FS_HCFG)
    -        FS_HCFG: mmio.Mmio(packed struct(u32) {
    -            ///  FS/LS PHY clock select
    -            FSLSPCS: u2,
    -            ///  FS- and LS-only support
    -            FSLSS: u1,
    -            padding: u29,
    -        }),
    -        ///  OTG_FS Host frame interval register
    -        HFIR: mmio.Mmio(packed struct(u32) {
    -            ///  Frame interval
    -            FRIVL: u16,
    -            padding: u16,
    -        }),
    -        ///  OTG_FS host frame number/frame time remaining register (OTG_FS_HFNUM)
    -        FS_HFNUM: mmio.Mmio(packed struct(u32) {
    -            ///  Frame number
    -            FRNUM: u16,
    -            ///  Frame time remaining
    -            FTREM: u16,
    -        }),
    -        reserved16: [4]u8,
    -        ///  OTG_FS_Host periodic transmit FIFO/queue status register (OTG_FS_HPTXSTS)
    -        FS_HPTXSTS: mmio.Mmio(packed struct(u32) {
    -            ///  Periodic transmit data FIFO space available
    -            PTXFSAVL: u16,
    -            ///  Periodic transmit request queue space available
    -            PTXQSAV: u8,
    -            ///  Top of the periodic transmit request queue
    -            PTXQTOP: u8,
    -        }),
    -        ///  OTG_FS Host all channels interrupt register
    -        HAINT: mmio.Mmio(packed struct(u32) {
    -            ///  Channel interrupts
    -            HAINT: u16,
    -            padding: u16,
    -        }),
    -        ///  OTG_FS host all channels interrupt mask register
    -        HAINTMSK: mmio.Mmio(packed struct(u32) {
    -            ///  Channel interrupt mask
    -            HAINTM: u16,
    -            padding: u16,
    -        }),
    -        reserved64: [36]u8,
    -        ///  OTG_FS host port control and status register (OTG_FS_HPRT)
    -        FS_HPRT: mmio.Mmio(packed struct(u32) {
    -            ///  Port connect status
    -            PCSTS: u1,
    -            ///  Port connect detected
    -            PCDET: u1,
    -            ///  Port enable
    -            PENA: u1,
    -            ///  Port enable/disable change
    -            PENCHNG: u1,
    -            ///  Port overcurrent active
    -            POCA: u1,
    -            ///  Port overcurrent change
    -            POCCHNG: u1,
    -            ///  Port resume
    -            PRES: u1,
    -            ///  Port suspend
    -            PSUSP: u1,
    -            ///  Port reset
    -            PRST: u1,
    -            reserved10: u1,
    -            ///  Port line status
    -            PLSTS: u2,
    -            ///  Port power
    -            PPWR: u1,
    -            ///  Port test control
    -            PTCTL: u4,
    -            ///  Port speed
    -            PSPD: u2,
    -            padding: u13,
    -        }),
    -        reserved256: [188]u8,
    -        ///  OTG_FS host channel-0 characteristics register (OTG_FS_HCCHAR0)
    -        FS_HCCHAR0: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multicount
    -            MCNT: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        reserved264: [4]u8,
    -        ///  OTG_FS host channel-0 interrupt register (OTG_FS_HCINT0)
    -        FS_HCINT0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            reserved7: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-0 mask register (OTG_FS_HCINTMSK0)
    -        FS_HCINTMSK0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-0 transfer size register
    -        FS_HCTSIZ0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        reserved288: [12]u8,
    -        ///  OTG_FS host channel-1 characteristics register (OTG_FS_HCCHAR1)
    -        FS_HCCHAR1: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multicount
    -            MCNT: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        reserved296: [4]u8,
    -        ///  OTG_FS host channel-1 interrupt register (OTG_FS_HCINT1)
    -        FS_HCINT1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            reserved7: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-1 mask register (OTG_FS_HCINTMSK1)
    -        FS_HCINTMSK1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-1 transfer size register
    -        FS_HCTSIZ1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        reserved320: [12]u8,
    -        ///  OTG_FS host channel-2 characteristics register (OTG_FS_HCCHAR2)
    -        FS_HCCHAR2: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multicount
    -            MCNT: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        reserved328: [4]u8,
    -        ///  OTG_FS host channel-2 interrupt register (OTG_FS_HCINT2)
    -        FS_HCINT2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            reserved7: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-2 mask register (OTG_FS_HCINTMSK2)
    -        FS_HCINTMSK2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-2 transfer size register
    -        FS_HCTSIZ2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        reserved352: [12]u8,
    -        ///  OTG_FS host channel-3 characteristics register (OTG_FS_HCCHAR3)
    -        FS_HCCHAR3: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multicount
    -            MCNT: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        reserved360: [4]u8,
    -        ///  OTG_FS host channel-3 interrupt register (OTG_FS_HCINT3)
    -        FS_HCINT3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            reserved7: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-3 mask register (OTG_FS_HCINTMSK3)
    -        FS_HCINTMSK3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-3 transfer size register
    -        FS_HCTSIZ3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        reserved384: [12]u8,
    -        ///  OTG_FS host channel-4 characteristics register (OTG_FS_HCCHAR4)
    -        FS_HCCHAR4: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multicount
    -            MCNT: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        reserved392: [4]u8,
    -        ///  OTG_FS host channel-4 interrupt register (OTG_FS_HCINT4)
    -        FS_HCINT4: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            reserved7: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-4 mask register (OTG_FS_HCINTMSK4)
    -        FS_HCINTMSK4: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-x transfer size register
    -        FS_HCTSIZ4: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        reserved416: [12]u8,
    -        ///  OTG_FS host channel-5 characteristics register (OTG_FS_HCCHAR5)
    -        FS_HCCHAR5: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multicount
    -            MCNT: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        reserved424: [4]u8,
    -        ///  OTG_FS host channel-5 interrupt register (OTG_FS_HCINT5)
    -        FS_HCINT5: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            reserved7: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-5 mask register (OTG_FS_HCINTMSK5)
    -        FS_HCINTMSK5: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-5 transfer size register
    -        FS_HCTSIZ5: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        reserved448: [12]u8,
    -        ///  OTG_FS host channel-6 characteristics register (OTG_FS_HCCHAR6)
    -        FS_HCCHAR6: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multicount
    -            MCNT: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        reserved456: [4]u8,
    -        ///  OTG_FS host channel-6 interrupt register (OTG_FS_HCINT6)
    -        FS_HCINT6: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            reserved7: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-6 mask register (OTG_FS_HCINTMSK6)
    -        FS_HCINTMSK6: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-6 transfer size register
    -        FS_HCTSIZ6: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        reserved480: [12]u8,
    -        ///  OTG_FS host channel-7 characteristics register (OTG_FS_HCCHAR7)
    -        FS_HCCHAR7: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multicount
    -            MCNT: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        reserved488: [4]u8,
    -        ///  OTG_FS host channel-7 interrupt register (OTG_FS_HCINT7)
    -        FS_HCINT7: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            reserved7: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-7 mask register (OTG_FS_HCINTMSK7)
    -        FS_HCINTMSK7: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-7 transfer size register
    -        FS_HCTSIZ7: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -    };
    -
    -    ///  General purpose timer
    -    pub const TIM10 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            reserved7: u4,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            ///  Clock division
    -            CKD: u2,
    -            padding: u22,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            reserved4: u4,
    -            ///  Master mode selection
    -            MMS: u3,
    -            padding: u25,
    -        }),
    -        reserved12: [4]u8,
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            ///  Capture/Compare 1 interrupt enable
    -            CC1IE: u1,
    -            padding: u30,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            ///  Capture/compare 1 interrupt flag
    -            CC1IF: u1,
    -            reserved9: u7,
    -            ///  Capture/Compare 1 overcapture flag
    -            CC1OF: u1,
    -            padding: u22,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            ///  Capture/compare 1 generation
    -            CC1G: u1,
    -            padding: u30,
    -        }),
    -        ///  capture/compare mode register (output mode)
    -        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 selection
    -            CC1S: u2,
    -            reserved3: u1,
    -            ///  Output Compare 1 preload enable
    -            OC1PE: u1,
    -            ///  Output Compare 1 mode
    -            OC1M: u3,
    -            padding: u25,
    -        }),
    -        reserved32: [4]u8,
    -        ///  capture/compare enable register
    -        CCER: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 output enable
    -            CC1E: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1P: u1,
    -            reserved3: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1NP: u1,
    -            padding: u28,
    -        }),
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  counter value
    -            CNT: u16,
    -            padding: u16,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Auto-reload value
    -            ARR: u16,
    -            padding: u16,
    -        }),
    -        reserved52: [4]u8,
    -        ///  capture/compare register 1
    -        CCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 value
    -            CCR1: u16,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  USB on the go full speed
    -    pub const OTG_FS_GLOBAL = extern struct {
    -        ///  OTG_FS control and status register (OTG_FS_GOTGCTL)
    -        FS_GOTGCTL: mmio.Mmio(packed struct(u32) {
    -            ///  Session request success
    -            SRQSCS: u1,
    -            ///  Session request
    -            SRQ: u1,
    -            reserved8: u6,
    -            ///  Host negotiation success
    -            HNGSCS: u1,
    -            ///  HNP request
    -            HNPRQ: u1,
    -            ///  Host set HNP enable
    -            HSHNPEN: u1,
    -            ///  Device HNP enabled
    -            DHNPEN: u1,
    -            reserved16: u4,
    -            ///  Connector ID status
    -            CIDSTS: u1,
    -            ///  Long/short debounce time
    -            DBCT: u1,
    -            ///  A-session valid
    -            ASVLD: u1,
    -            ///  B-session valid
    -            BSVLD: u1,
    -            padding: u12,
    -        }),
    -        ///  OTG_FS interrupt register (OTG_FS_GOTGINT)
    -        FS_GOTGINT: mmio.Mmio(packed struct(u32) {
    -            reserved2: u2,
    -            ///  Session end detected
    -            SEDET: u1,
    -            reserved8: u5,
    -            ///  Session request success status change
    -            SRSSCHG: u1,
    -            ///  Host negotiation success status change
    -            HNSSCHG: u1,
    -            reserved17: u7,
    -            ///  Host negotiation detected
    -            HNGDET: u1,
    -            ///  A-device timeout change
    -            ADTOCHG: u1,
    -            ///  Debounce done
    -            DBCDNE: u1,
    -            padding: u12,
    -        }),
    -        ///  OTG_FS AHB configuration register (OTG_FS_GAHBCFG)
    -        FS_GAHBCFG: mmio.Mmio(packed struct(u32) {
    -            ///  Global interrupt mask
    -            GINT: u1,
    -            reserved7: u6,
    -            ///  TxFIFO empty level
    -            TXFELVL: u1,
    -            ///  Periodic TxFIFO empty level
    -            PTXFELVL: u1,
    -            padding: u23,
    -        }),
    -        ///  OTG_FS USB configuration register (OTG_FS_GUSBCFG)
    -        FS_GUSBCFG: mmio.Mmio(packed struct(u32) {
    -            ///  FS timeout calibration
    -            TOCAL: u3,
    -            reserved6: u3,
    -            ///  Full Speed serial transceiver select
    -            PHYSEL: u1,
    -            reserved8: u1,
    -            ///  SRP-capable
    -            SRPCAP: u1,
    -            ///  HNP-capable
    -            HNPCAP: u1,
    -            ///  USB turnaround time
    -            TRDT: u4,
    -            reserved29: u15,
    -            ///  Force host mode
    -            FHMOD: u1,
    -            ///  Force device mode
    -            FDMOD: u1,
    -            ///  Corrupt Tx packet
    -            CTXPKT: u1,
    -        }),
    -        ///  OTG_FS reset register (OTG_FS_GRSTCTL)
    -        FS_GRSTCTL: mmio.Mmio(packed struct(u32) {
    -            ///  Core soft reset
    -            CSRST: u1,
    -            ///  HCLK soft reset
    -            HSRST: u1,
    -            ///  Host frame counter reset
    -            FCRST: u1,
    -            reserved4: u1,
    -            ///  RxFIFO flush
    -            RXFFLSH: u1,
    -            ///  TxFIFO flush
    -            TXFFLSH: u1,
    -            ///  TxFIFO number
    -            TXFNUM: u5,
    -            reserved31: u20,
    -            ///  AHB master idle
    -            AHBIDL: u1,
    -        }),
    -        ///  OTG_FS core interrupt register (OTG_FS_GINTSTS)
    -        FS_GINTSTS: mmio.Mmio(packed struct(u32) {
    -            ///  Current mode of operation
    -            CMOD: u1,
    -            ///  Mode mismatch interrupt
    -            MMIS: u1,
    -            ///  OTG interrupt
    -            OTGINT: u1,
    -            ///  Start of frame
    -            SOF: u1,
    -            ///  RxFIFO non-empty
    -            RXFLVL: u1,
    -            ///  Non-periodic TxFIFO empty
    -            NPTXFE: u1,
    -            ///  Global IN non-periodic NAK effective
    -            GINAKEFF: u1,
    -            ///  Global OUT NAK effective
    -            GOUTNAKEFF: u1,
    -            reserved10: u2,
    -            ///  Early suspend
    -            ESUSP: u1,
    -            ///  USB suspend
    -            USBSUSP: u1,
    -            ///  USB reset
    -            USBRST: u1,
    -            ///  Enumeration done
    -            ENUMDNE: u1,
    -            ///  Isochronous OUT packet dropped interrupt
    -            ISOODRP: u1,
    -            ///  End of periodic frame interrupt
    -            EOPF: u1,
    -            reserved18: u2,
    -            ///  IN endpoint interrupt
    -            IEPINT: u1,
    -            ///  OUT endpoint interrupt
    -            OEPINT: u1,
    -            ///  Incomplete isochronous IN transfer
    -            IISOIXFR: u1,
    -            ///  Incomplete periodic transfer(Host mode)/Incomplete isochronous OUT transfer(Device mode)
    -            IPXFR_INCOMPISOOUT: u1,
    -            reserved24: u2,
    -            ///  Host port interrupt
    -            HPRTINT: u1,
    -            ///  Host channels interrupt
    -            HCINT: u1,
    -            ///  Periodic TxFIFO empty
    -            PTXFE: u1,
    -            reserved28: u1,
    -            ///  Connector ID status change
    -            CIDSCHG: u1,
    -            ///  Disconnect detected interrupt
    -            DISCINT: u1,
    -            ///  Session request/new session detected interrupt
    -            SRQINT: u1,
    -            ///  Resume/remote wakeup detected interrupt
    -            WKUPINT: u1,
    -        }),
    -        ///  OTG_FS interrupt mask register (OTG_FS_GINTMSK)
    -        FS_GINTMSK: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  Mode mismatch interrupt mask
    -            MMISM: u1,
    -            ///  OTG interrupt mask
    -            OTGINT: u1,
    -            ///  Start of frame mask
    -            SOFM: u1,
    -            ///  Receive FIFO non-empty mask
    -            RXFLVLM: u1,
    -            ///  Non-periodic TxFIFO empty mask
    -            NPTXFEM: u1,
    -            ///  Global non-periodic IN NAK effective mask
    -            GINAKEFFM: u1,
    -            ///  Global OUT NAK effective mask
    -            GONAKEFFM: u1,
    -            reserved10: u2,
    -            ///  Early suspend mask
    -            ESUSPM: u1,
    -            ///  USB suspend mask
    -            USBSUSPM: u1,
    -            ///  USB reset mask
    -            USBRST: u1,
    -            ///  Enumeration done mask
    -            ENUMDNEM: u1,
    -            ///  Isochronous OUT packet dropped interrupt mask
    -            ISOODRPM: u1,
    -            ///  End of periodic frame interrupt mask
    -            EOPFM: u1,
    -            reserved17: u1,
    -            ///  Endpoint mismatch interrupt mask
    -            EPMISM: u1,
    -            ///  IN endpoints interrupt mask
    -            IEPINT: u1,
    -            ///  OUT endpoints interrupt mask
    -            OEPINT: u1,
    -            ///  Incomplete isochronous IN transfer mask
    -            IISOIXFRM: u1,
    -            ///  Incomplete periodic transfer mask(Host mode)/Incomplete isochronous OUT transfer mask(Device mode)
    -            IPXFRM_IISOOXFRM: u1,
    -            reserved24: u2,
    -            ///  Host port interrupt mask
    -            PRTIM: u1,
    -            ///  Host channels interrupt mask
    -            HCIM: u1,
    -            ///  Periodic TxFIFO empty mask
    -            PTXFEM: u1,
    -            reserved28: u1,
    -            ///  Connector ID status change mask
    -            CIDSCHGM: u1,
    -            ///  Disconnect detected interrupt mask
    -            DISCINT: u1,
    -            ///  Session request/new session detected interrupt mask
    -            SRQIM: u1,
    -            ///  Resume/remote wakeup detected interrupt mask
    -            WUIM: u1,
    -        }),
    -        ///  OTG_FS Receive status debug read(Device mode)
    -        FS_GRXSTSR_Device: mmio.Mmio(packed struct(u32) {
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Byte count
    -            BCNT: u11,
    -            ///  Data PID
    -            DPID: u2,
    -            ///  Packet status
    -            PKTSTS: u4,
    -            ///  Frame number
    -            FRMNUM: u4,
    -            padding: u7,
    -        }),
    -        reserved36: [4]u8,
    -        ///  OTG_FS Receive FIFO size register (OTG_FS_GRXFSIZ)
    -        FS_GRXFSIZ: mmio.Mmio(packed struct(u32) {
    -            ///  RxFIFO depth
    -            RXFD: u16,
    -            padding: u16,
    -        }),
    -        ///  OTG_FS non-periodic transmit FIFO size register (Device mode)
    -        FS_GNPTXFSIZ_Device: mmio.Mmio(packed struct(u32) {
    -            ///  Endpoint 0 transmit RAM start address
    -            TX0FSA: u16,
    -            ///  Endpoint 0 TxFIFO depth
    -            TX0FD: u16,
    -        }),
    -        ///  OTG_FS non-periodic transmit FIFO/queue status register (OTG_FS_GNPTXSTS)
    -        FS_GNPTXSTS: mmio.Mmio(packed struct(u32) {
    -            ///  Non-periodic TxFIFO space available
    -            NPTXFSAV: u16,
    -            ///  Non-periodic transmit request queue space available
    -            NPTQXSAV: u8,
    -            ///  Top of the non-periodic transmit request queue
    -            NPTXQTOP: u7,
    -            padding: u1,
    -        }),
    -        reserved56: [8]u8,
    -        ///  OTG_FS general core configuration register (OTG_FS_GCCFG)
    -        FS_GCCFG: mmio.Mmio(packed struct(u32) {
    -            reserved16: u16,
    -            ///  Power down
    -            PWRDWN: u1,
    -            reserved18: u1,
    -            ///  Enable the VBUS sensing device
    -            VBUSASEN: u1,
    -            ///  Enable the VBUS sensing device
    -            VBUSBSEN: u1,
    -            ///  SOF output enable
    -            SOFOUTEN: u1,
    -            padding: u11,
    -        }),
    -        ///  core ID register
    -        FS_CID: mmio.Mmio(packed struct(u32) {
    -            ///  Product ID field
    -            PRODUCT_ID: u32,
    -        }),
    -        reserved256: [192]u8,
    -        ///  OTG_FS Host periodic transmit FIFO size register (OTG_FS_HPTXFSIZ)
    -        FS_HPTXFSIZ: mmio.Mmio(packed struct(u32) {
    -            ///  Host periodic TxFIFO start address
    -            PTXSA: u16,
    -            ///  Host periodic TxFIFO depth
    -            PTXFSIZ: u16,
    -        }),
    -        ///  OTG_FS device IN endpoint transmit FIFO size register (OTG_FS_DIEPTXF2)
    -        FS_DIEPTXF1: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint FIFO2 transmit RAM start address
    -            INEPTXSA: u16,
    -            ///  IN endpoint TxFIFO depth
    -            INEPTXFD: u16,
    -        }),
    -        ///  OTG_FS device IN endpoint transmit FIFO size register (OTG_FS_DIEPTXF3)
    -        FS_DIEPTXF2: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint FIFO3 transmit RAM start address
    -            INEPTXSA: u16,
    -            ///  IN endpoint TxFIFO depth
    -            INEPTXFD: u16,
    -        }),
    -        ///  OTG_FS device IN endpoint transmit FIFO size register (OTG_FS_DIEPTXF4)
    -        FS_DIEPTXF3: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint FIFO4 transmit RAM start address
    -            INEPTXSA: u16,
    -            ///  IN endpoint TxFIFO depth
    -            INEPTXFD: u16,
    -        }),
    -    };
    -
    -    ///  USB on the go full speed
    -    pub const OTG_FS_DEVICE = extern struct {
    -        ///  OTG_FS device configuration register (OTG_FS_DCFG)
    -        FS_DCFG: mmio.Mmio(packed struct(u32) {
    -            ///  Device speed
    -            DSPD: u2,
    -            ///  Non-zero-length status OUT handshake
    -            NZLSOHSK: u1,
    -            reserved4: u1,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Periodic frame interval
    -            PFIVL: u2,
    -            padding: u19,
    -        }),
    -        ///  OTG_FS device control register (OTG_FS_DCTL)
    -        FS_DCTL: mmio.Mmio(packed struct(u32) {
    -            ///  Remote wakeup signaling
    -            RWUSIG: u1,
    -            ///  Soft disconnect
    -            SDIS: u1,
    -            ///  Global IN NAK status
    -            GINSTS: u1,
    -            ///  Global OUT NAK status
    -            GONSTS: u1,
    -            ///  Test control
    -            TCTL: u3,
    -            ///  Set global IN NAK
    -            SGINAK: u1,
    -            ///  Clear global IN NAK
    -            CGINAK: u1,
    -            ///  Set global OUT NAK
    -            SGONAK: u1,
    -            ///  Clear global OUT NAK
    -            CGONAK: u1,
    -            ///  Power-on programming done
    -            POPRGDNE: u1,
    -            padding: u20,
    -        }),
    -        ///  OTG_FS device status register (OTG_FS_DSTS)
    -        FS_DSTS: mmio.Mmio(packed struct(u32) {
    -            ///  Suspend status
    -            SUSPSTS: u1,
    -            ///  Enumerated speed
    -            ENUMSPD: u2,
    -            ///  Erratic error
    -            EERR: u1,
    -            reserved8: u4,
    -            ///  Frame number of the received SOF
    -            FNSOF: u14,
    -            padding: u10,
    -        }),
    -        reserved16: [4]u8,
    -        ///  OTG_FS device IN endpoint common interrupt mask register (OTG_FS_DIEPMSK)
    -        FS_DIEPMSK: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt mask
    -            XFRCM: u1,
    -            ///  Endpoint disabled interrupt mask
    -            EPDM: u1,
    -            reserved3: u1,
    -            ///  Timeout condition mask (Non-isochronous endpoints)
    -            TOM: u1,
    -            ///  IN token received when TxFIFO empty mask
    -            ITTXFEMSK: u1,
    -            ///  IN token received with EP mismatch mask
    -            INEPNMM: u1,
    -            ///  IN endpoint NAK effective mask
    -            INEPNEM: u1,
    -            padding: u25,
    -        }),
    -        ///  OTG_FS device OUT endpoint common interrupt mask register (OTG_FS_DOEPMSK)
    -        FS_DOEPMSK: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt mask
    -            XFRCM: u1,
    -            ///  Endpoint disabled interrupt mask
    -            EPDM: u1,
    -            reserved3: u1,
    -            ///  SETUP phase done mask
    -            STUPM: u1,
    -            ///  OUT token received when endpoint disabled mask
    -            OTEPDM: u1,
    -            padding: u27,
    -        }),
    -        ///  OTG_FS device all endpoints interrupt register (OTG_FS_DAINT)
    -        FS_DAINT: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint interrupt bits
    -            IEPINT: u16,
    -            ///  OUT endpoint interrupt bits
    -            OEPINT: u16,
    -        }),
    -        ///  OTG_FS all endpoints interrupt mask register (OTG_FS_DAINTMSK)
    -        FS_DAINTMSK: mmio.Mmio(packed struct(u32) {
    -            ///  IN EP interrupt mask bits
    -            IEPM: u16,
    -            ///  OUT endpoint interrupt bits
    -            OEPINT: u16,
    -        }),
    -        reserved40: [8]u8,
    -        ///  OTG_FS device VBUS discharge time register
    -        DVBUSDIS: mmio.Mmio(packed struct(u32) {
    -            ///  Device VBUS discharge time
    -            VBUSDT: u16,
    -            padding: u16,
    -        }),
    -        ///  OTG_FS device VBUS pulsing time register
    -        DVBUSPULSE: mmio.Mmio(packed struct(u32) {
    -            ///  Device VBUS pulsing time
    -            DVBUSP: u12,
    -            padding: u20,
    -        }),
    -        reserved52: [4]u8,
    -        ///  OTG_FS device IN endpoint FIFO empty interrupt mask register
    -        DIEPEMPMSK: mmio.Mmio(packed struct(u32) {
    -            ///  IN EP Tx FIFO empty interrupt mask bits
    -            INEPTXFEM: u16,
    -            padding: u16,
    -        }),
    -        reserved256: [200]u8,
    -        ///  OTG_FS device control IN endpoint 0 control register (OTG_FS_DIEPCTL0)
    -        FS_DIEPCTL0: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u2,
    -            reserved15: u13,
    -            ///  USB active endpoint
    -            USBAEP: u1,
    -            reserved17: u1,
    -            ///  NAK status
    -            NAKSTS: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  STALL handshake
    -            STALL: u1,
    -            ///  TxFIFO number
    -            TXFNUM: u4,
    -            ///  Clear NAK
    -            CNAK: u1,
    -            ///  Set NAK
    -            SNAK: u1,
    -            reserved30: u2,
    -            ///  Endpoint disable
    -            EPDIS: u1,
    -            ///  Endpoint enable
    -            EPENA: u1,
    -        }),
    -        reserved264: [4]u8,
    -        ///  device endpoint-x interrupt register
    -        DIEPINT0: mmio.Mmio(packed struct(u32) {
    -            ///  XFRC
    -            XFRC: u1,
    -            ///  EPDISD
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  TOC
    -            TOC: u1,
    -            ///  ITTXFE
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  INEPNE
    -            INEPNE: u1,
    -            ///  TXFE
    -            TXFE: u1,
    -            padding: u24,
    -        }),
    -        reserved272: [4]u8,
    -        ///  device endpoint-0 transfer size register
    -        DIEPTSIZ0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u7,
    -            reserved19: u12,
    -            ///  Packet count
    -            PKTCNT: u2,
    -            padding: u11,
    -        }),
    -        reserved280: [4]u8,
    -        ///  OTG_FS device IN endpoint transmit FIFO status register
    -        DTXFSTS0: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint TxFIFO space available
    -            INEPTFSAV: u16,
    -            padding: u16,
    -        }),
    -        reserved288: [4]u8,
    -        ///  OTG device endpoint-1 control register
    -        DIEPCTL1: mmio.Mmio(packed struct(u32) {
    -            ///  MPSIZ
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USBAEP
    -            USBAEP: u1,
    -            ///  EONUM/DPID
    -            EONUM_DPID: u1,
    -            ///  NAKSTS
    -            NAKSTS: u1,
    -            ///  EPTYP
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  Stall
    -            Stall: u1,
    -            ///  TXFNUM
    -            TXFNUM: u4,
    -            ///  CNAK
    -            CNAK: u1,
    -            ///  SNAK
    -            SNAK: u1,
    -            ///  SD0PID/SEVNFRM
    -            SD0PID_SEVNFRM: u1,
    -            ///  SODDFRM/SD1PID
    -            SODDFRM_SD1PID: u1,
    -            ///  EPDIS
    -            EPDIS: u1,
    -            ///  EPENA
    -            EPENA: u1,
    -        }),
    -        reserved296: [4]u8,
    -        ///  device endpoint-1 interrupt register
    -        DIEPINT1: mmio.Mmio(packed struct(u32) {
    -            ///  XFRC
    -            XFRC: u1,
    -            ///  EPDISD
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  TOC
    -            TOC: u1,
    -            ///  ITTXFE
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  INEPNE
    -            INEPNE: u1,
    -            ///  TXFE
    -            TXFE: u1,
    -            padding: u24,
    -        }),
    -        reserved304: [4]u8,
    -        ///  device endpoint-1 transfer size register
    -        DIEPTSIZ1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Multi count
    -            MCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved312: [4]u8,
    -        ///  OTG_FS device IN endpoint transmit FIFO status register
    -        DTXFSTS1: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint TxFIFO space available
    -            INEPTFSAV: u16,
    -            padding: u16,
    -        }),
    -        reserved320: [4]u8,
    -        ///  OTG device endpoint-2 control register
    -        DIEPCTL2: mmio.Mmio(packed struct(u32) {
    -            ///  MPSIZ
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USBAEP
    -            USBAEP: u1,
    -            ///  EONUM/DPID
    -            EONUM_DPID: u1,
    -            ///  NAKSTS
    -            NAKSTS: u1,
    -            ///  EPTYP
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  Stall
    -            Stall: u1,
    -            ///  TXFNUM
    -            TXFNUM: u4,
    -            ///  CNAK
    -            CNAK: u1,
    -            ///  SNAK
    -            SNAK: u1,
    -            ///  SD0PID/SEVNFRM
    -            SD0PID_SEVNFRM: u1,
    -            ///  SODDFRM
    -            SODDFRM: u1,
    -            ///  EPDIS
    -            EPDIS: u1,
    -            ///  EPENA
    -            EPENA: u1,
    -        }),
    -        reserved328: [4]u8,
    -        ///  device endpoint-2 interrupt register
    -        DIEPINT2: mmio.Mmio(packed struct(u32) {
    -            ///  XFRC
    -            XFRC: u1,
    -            ///  EPDISD
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  TOC
    -            TOC: u1,
    -            ///  ITTXFE
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  INEPNE
    -            INEPNE: u1,
    -            ///  TXFE
    -            TXFE: u1,
    -            padding: u24,
    -        }),
    -        reserved336: [4]u8,
    -        ///  device endpoint-2 transfer size register
    -        DIEPTSIZ2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Multi count
    -            MCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved344: [4]u8,
    -        ///  OTG_FS device IN endpoint transmit FIFO status register
    -        DTXFSTS2: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint TxFIFO space available
    -            INEPTFSAV: u16,
    -            padding: u16,
    -        }),
    -        reserved352: [4]u8,
    -        ///  OTG device endpoint-3 control register
    -        DIEPCTL3: mmio.Mmio(packed struct(u32) {
    -            ///  MPSIZ
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USBAEP
    -            USBAEP: u1,
    -            ///  EONUM/DPID
    -            EONUM_DPID: u1,
    -            ///  NAKSTS
    -            NAKSTS: u1,
    -            ///  EPTYP
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  Stall
    -            Stall: u1,
    -            ///  TXFNUM
    -            TXFNUM: u4,
    -            ///  CNAK
    -            CNAK: u1,
    -            ///  SNAK
    -            SNAK: u1,
    -            ///  SD0PID/SEVNFRM
    -            SD0PID_SEVNFRM: u1,
    -            ///  SODDFRM
    -            SODDFRM: u1,
    -            ///  EPDIS
    -            EPDIS: u1,
    -            ///  EPENA
    -            EPENA: u1,
    -        }),
    -        reserved360: [4]u8,
    -        ///  device endpoint-3 interrupt register
    -        DIEPINT3: mmio.Mmio(packed struct(u32) {
    -            ///  XFRC
    -            XFRC: u1,
    -            ///  EPDISD
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  TOC
    -            TOC: u1,
    -            ///  ITTXFE
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  INEPNE
    -            INEPNE: u1,
    -            ///  TXFE
    -            TXFE: u1,
    -            padding: u24,
    -        }),
    -        reserved368: [4]u8,
    -        ///  device endpoint-3 transfer size register
    -        DIEPTSIZ3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Multi count
    -            MCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved376: [4]u8,
    -        ///  OTG_FS device IN endpoint transmit FIFO status register
    -        DTXFSTS3: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint TxFIFO space available
    -            INEPTFSAV: u16,
    -            padding: u16,
    -        }),
    -        reserved768: [388]u8,
    -        ///  device endpoint-0 control register
    -        DOEPCTL0: mmio.Mmio(packed struct(u32) {
    -            ///  MPSIZ
    -            MPSIZ: u2,
    -            reserved15: u13,
    -            ///  USBAEP
    -            USBAEP: u1,
    -            reserved17: u1,
    -            ///  NAKSTS
    -            NAKSTS: u1,
    -            ///  EPTYP
    -            EPTYP: u2,
    -            ///  SNPM
    -            SNPM: u1,
    -            ///  Stall
    -            Stall: u1,
    -            reserved26: u4,
    -            ///  CNAK
    -            CNAK: u1,
    -            ///  SNAK
    -            SNAK: u1,
    -            reserved30: u2,
    -            ///  EPDIS
    -            EPDIS: u1,
    -            ///  EPENA
    -            EPENA: u1,
    -        }),
    -        reserved776: [4]u8,
    -        ///  device endpoint-0 interrupt register
    -        DOEPINT0: mmio.Mmio(packed struct(u32) {
    -            ///  XFRC
    -            XFRC: u1,
    -            ///  EPDISD
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  STUP
    -            STUP: u1,
    -            ///  OTEPDIS
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  B2BSTUP
    -            B2BSTUP: u1,
    -            padding: u25,
    -        }),
    -        reserved784: [4]u8,
    -        ///  device OUT endpoint-0 transfer size register
    -        DOEPTSIZ0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u7,
    -            reserved19: u12,
    -            ///  Packet count
    -            PKTCNT: u1,
    -            reserved29: u9,
    -            ///  SETUP packet count
    -            STUPCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved800: [12]u8,
    -        ///  device endpoint-1 control register
    -        DOEPCTL1: mmio.Mmio(packed struct(u32) {
    -            ///  MPSIZ
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USBAEP
    -            USBAEP: u1,
    -            ///  EONUM/DPID
    -            EONUM_DPID: u1,
    -            ///  NAKSTS
    -            NAKSTS: u1,
    -            ///  EPTYP
    -            EPTYP: u2,
    -            ///  SNPM
    -            SNPM: u1,
    -            ///  Stall
    -            Stall: u1,
    -            reserved26: u4,
    -            ///  CNAK
    -            CNAK: u1,
    -            ///  SNAK
    -            SNAK: u1,
    -            ///  SD0PID/SEVNFRM
    -            SD0PID_SEVNFRM: u1,
    -            ///  SODDFRM
    -            SODDFRM: u1,
    -            ///  EPDIS
    -            EPDIS: u1,
    -            ///  EPENA
    -            EPENA: u1,
    -        }),
    -        reserved808: [4]u8,
    -        ///  device endpoint-1 interrupt register
    -        DOEPINT1: mmio.Mmio(packed struct(u32) {
    -            ///  XFRC
    -            XFRC: u1,
    -            ///  EPDISD
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  STUP
    -            STUP: u1,
    -            ///  OTEPDIS
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  B2BSTUP
    -            B2BSTUP: u1,
    -            padding: u25,
    -        }),
    -        reserved816: [4]u8,
    -        ///  device OUT endpoint-1 transfer size register
    -        DOEPTSIZ1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Received data PID/SETUP packet count
    -            RXDPID_STUPCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved832: [12]u8,
    -        ///  device endpoint-2 control register
    -        DOEPCTL2: mmio.Mmio(packed struct(u32) {
    -            ///  MPSIZ
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USBAEP
    -            USBAEP: u1,
    -            ///  EONUM/DPID
    -            EONUM_DPID: u1,
    -            ///  NAKSTS
    -            NAKSTS: u1,
    -            ///  EPTYP
    -            EPTYP: u2,
    -            ///  SNPM
    -            SNPM: u1,
    -            ///  Stall
    -            Stall: u1,
    -            reserved26: u4,
    -            ///  CNAK
    -            CNAK: u1,
    -            ///  SNAK
    -            SNAK: u1,
    -            ///  SD0PID/SEVNFRM
    -            SD0PID_SEVNFRM: u1,
    -            ///  SODDFRM
    -            SODDFRM: u1,
    -            ///  EPDIS
    -            EPDIS: u1,
    -            ///  EPENA
    -            EPENA: u1,
    -        }),
    -        reserved840: [4]u8,
    -        ///  device endpoint-2 interrupt register
    -        DOEPINT2: mmio.Mmio(packed struct(u32) {
    -            ///  XFRC
    -            XFRC: u1,
    -            ///  EPDISD
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  STUP
    -            STUP: u1,
    -            ///  OTEPDIS
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  B2BSTUP
    -            B2BSTUP: u1,
    -            padding: u25,
    -        }),
    -        reserved848: [4]u8,
    -        ///  device OUT endpoint-2 transfer size register
    -        DOEPTSIZ2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Received data PID/SETUP packet count
    -            RXDPID_STUPCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved864: [12]u8,
    -        ///  device endpoint-3 control register
    -        DOEPCTL3: mmio.Mmio(packed struct(u32) {
    -            ///  MPSIZ
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USBAEP
    -            USBAEP: u1,
    -            ///  EONUM/DPID
    -            EONUM_DPID: u1,
    -            ///  NAKSTS
    -            NAKSTS: u1,
    -            ///  EPTYP
    -            EPTYP: u2,
    -            ///  SNPM
    -            SNPM: u1,
    -            ///  Stall
    -            Stall: u1,
    -            reserved26: u4,
    -            ///  CNAK
    -            CNAK: u1,
    -            ///  SNAK
    -            SNAK: u1,
    -            ///  SD0PID/SEVNFRM
    -            SD0PID_SEVNFRM: u1,
    -            ///  SODDFRM
    -            SODDFRM: u1,
    -            ///  EPDIS
    -            EPDIS: u1,
    -            ///  EPENA
    -            EPENA: u1,
    -        }),
    -        reserved872: [4]u8,
    -        ///  device endpoint-3 interrupt register
    -        DOEPINT3: mmio.Mmio(packed struct(u32) {
    -            ///  XFRC
    -            XFRC: u1,
    -            ///  EPDISD
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  STUP
    -            STUP: u1,
    -            ///  OTEPDIS
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  B2BSTUP
    -            B2BSTUP: u1,
    -            padding: u25,
    -        }),
    -        reserved880: [4]u8,
    -        ///  device OUT endpoint-3 transfer size register
    -        DOEPTSIZ3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Received data PID/SETUP packet count
    -            RXDPID_STUPCNT: u2,
    -            padding: u1,
    -        }),
    -    };
    -
    -    ///  Universal serial bus full-speed device interface
    -    pub const USB = extern struct {
    -        ///  endpoint 0 register
    -        EP0R: mmio.Mmio(packed struct(u32) {
    -            ///  Endpoint address
    -            EA: u4,
    -            ///  Status bits, for transmission transfers
    -            STAT_TX: u2,
    -            ///  Data Toggle, for transmission transfers
    -            DTOG_TX: u1,
    -            ///  Correct Transfer for transmission
    -            CTR_TX: u1,
    -            ///  Endpoint kind
    -            EP_KIND: u1,
    -            ///  Endpoint type
    -            EP_TYPE: u2,
    -            ///  Setup transaction completed
    -            SETUP: u1,
    -            ///  Status bits, for reception transfers
    -            STAT_RX: u2,
    -            ///  Data Toggle, for reception transfers
    -            DTOG_RX: u1,
    -            ///  Correct transfer for reception
    -            CTR_RX: u1,
    -            padding: u16,
    -        }),
    -        ///  endpoint 1 register
    -        EP1R: mmio.Mmio(packed struct(u32) {
    -            ///  Endpoint address
    -            EA: u4,
    -            ///  Status bits, for transmission transfers
    -            STAT_TX: u2,
    -            ///  Data Toggle, for transmission transfers
    -            DTOG_TX: u1,
    -            ///  Correct Transfer for transmission
    -            CTR_TX: u1,
    -            ///  Endpoint kind
    -            EP_KIND: u1,
    -            ///  Endpoint type
    -            EP_TYPE: u2,
    -            ///  Setup transaction completed
    -            SETUP: u1,
    -            ///  Status bits, for reception transfers
    -            STAT_RX: u2,
    -            ///  Data Toggle, for reception transfers
    -            DTOG_RX: u1,
    -            ///  Correct transfer for reception
    -            CTR_RX: u1,
    -            padding: u16,
    -        }),
    -        ///  endpoint 2 register
    -        EP2R: mmio.Mmio(packed struct(u32) {
    -            ///  Endpoint address
    -            EA: u4,
    -            ///  Status bits, for transmission transfers
    -            STAT_TX: u2,
    -            ///  Data Toggle, for transmission transfers
    -            DTOG_TX: u1,
    -            ///  Correct Transfer for transmission
    -            CTR_TX: u1,
    -            ///  Endpoint kind
    -            EP_KIND: u1,
    -            ///  Endpoint type
    -            EP_TYPE: u2,
    -            ///  Setup transaction completed
    -            SETUP: u1,
    -            ///  Status bits, for reception transfers
    -            STAT_RX: u2,
    -            ///  Data Toggle, for reception transfers
    -            DTOG_RX: u1,
    -            ///  Correct transfer for reception
    -            CTR_RX: u1,
    -            padding: u16,
    -        }),
    -        ///  endpoint 3 register
    -        EP3R: mmio.Mmio(packed struct(u32) {
    -            ///  Endpoint address
    -            EA: u4,
    -            ///  Status bits, for transmission transfers
    -            STAT_TX: u2,
    -            ///  Data Toggle, for transmission transfers
    -            DTOG_TX: u1,
    -            ///  Correct Transfer for transmission
    -            CTR_TX: u1,
    -            ///  Endpoint kind
    -            EP_KIND: u1,
    -            ///  Endpoint type
    -            EP_TYPE: u2,
    -            ///  Setup transaction completed
    -            SETUP: u1,
    -            ///  Status bits, for reception transfers
    -            STAT_RX: u2,
    -            ///  Data Toggle, for reception transfers
    -            DTOG_RX: u1,
    -            ///  Correct transfer for reception
    -            CTR_RX: u1,
    -            padding: u16,
    -        }),
    -        ///  endpoint 4 register
    -        EP4R: mmio.Mmio(packed struct(u32) {
    -            ///  Endpoint address
    -            EA: u4,
    -            ///  Status bits, for transmission transfers
    -            STAT_TX: u2,
    -            ///  Data Toggle, for transmission transfers
    -            DTOG_TX: u1,
    -            ///  Correct Transfer for transmission
    -            CTR_TX: u1,
    -            ///  Endpoint kind
    -            EP_KIND: u1,
    -            ///  Endpoint type
    -            EP_TYPE: u2,
    -            ///  Setup transaction completed
    -            SETUP: u1,
    -            ///  Status bits, for reception transfers
    -            STAT_RX: u2,
    -            ///  Data Toggle, for reception transfers
    -            DTOG_RX: u1,
    -            ///  Correct transfer for reception
    -            CTR_RX: u1,
    -            padding: u16,
    -        }),
    -        ///  endpoint 5 register
    -        EP5R: mmio.Mmio(packed struct(u32) {
    -            ///  Endpoint address
    -            EA: u4,
    -            ///  Status bits, for transmission transfers
    -            STAT_TX: u2,
    -            ///  Data Toggle, for transmission transfers
    -            DTOG_TX: u1,
    -            ///  Correct Transfer for transmission
    -            CTR_TX: u1,
    -            ///  Endpoint kind
    -            EP_KIND: u1,
    -            ///  Endpoint type
    -            EP_TYPE: u2,
    -            ///  Setup transaction completed
    -            SETUP: u1,
    -            ///  Status bits, for reception transfers
    -            STAT_RX: u2,
    -            ///  Data Toggle, for reception transfers
    -            DTOG_RX: u1,
    -            ///  Correct transfer for reception
    -            CTR_RX: u1,
    -            padding: u16,
    -        }),
    -        ///  endpoint 6 register
    -        EP6R: mmio.Mmio(packed struct(u32) {
    -            ///  Endpoint address
    -            EA: u4,
    -            ///  Status bits, for transmission transfers
    -            STAT_TX: u2,
    -            ///  Data Toggle, for transmission transfers
    -            DTOG_TX: u1,
    -            ///  Correct Transfer for transmission
    -            CTR_TX: u1,
    -            ///  Endpoint kind
    -            EP_KIND: u1,
    -            ///  Endpoint type
    -            EP_TYPE: u2,
    -            ///  Setup transaction completed
    -            SETUP: u1,
    -            ///  Status bits, for reception transfers
    -            STAT_RX: u2,
    -            ///  Data Toggle, for reception transfers
    -            DTOG_RX: u1,
    -            ///  Correct transfer for reception
    -            CTR_RX: u1,
    -            padding: u16,
    -        }),
    -        ///  endpoint 7 register
    -        EP7R: mmio.Mmio(packed struct(u32) {
    -            ///  Endpoint address
    -            EA: u4,
    -            ///  Status bits, for transmission transfers
    -            STAT_TX: u2,
    -            ///  Data Toggle, for transmission transfers
    -            DTOG_TX: u1,
    -            ///  Correct Transfer for transmission
    -            CTR_TX: u1,
    -            ///  Endpoint kind
    -            EP_KIND: u1,
    -            ///  Endpoint type
    -            EP_TYPE: u2,
    -            ///  Setup transaction completed
    -            SETUP: u1,
    -            ///  Status bits, for reception transfers
    -            STAT_RX: u2,
    -            ///  Data Toggle, for reception transfers
    -            DTOG_RX: u1,
    -            ///  Correct transfer for reception
    -            CTR_RX: u1,
    -            padding: u16,
    -        }),
    -        reserved64: [32]u8,
    -        ///  control register
    -        CNTR: mmio.Mmio(packed struct(u32) {
    -            ///  Force USB Reset
    -            FRES: u1,
    -            ///  Power down
    -            PDWN: u1,
    -            ///  Low-power mode
    -            LPMODE: u1,
    -            ///  Force suspend
    -            FSUSP: u1,
    -            ///  Resume request
    -            RESUME: u1,
    -            reserved8: u3,
    -            ///  Expected start of frame interrupt mask
    -            ESOFM: u1,
    -            ///  Start of frame interrupt mask
    -            SOFM: u1,
    -            ///  USB reset interrupt mask
    -            RESETM: u1,
    -            ///  Suspend mode interrupt mask
    -            SUSPM: u1,
    -            ///  Wakeup interrupt mask
    -            WKUPM: u1,
    -            ///  Error interrupt mask
    -            ERRM: u1,
    -            ///  Packet memory area over / underrun interrupt mask
    -            PMAOVRM: u1,
    -            ///  Correct transfer interrupt mask
    -            CTRM: u1,
    -            padding: u16,
    -        }),
    -        ///  interrupt status register
    -        ISTR: mmio.Mmio(packed struct(u32) {
    -            ///  Endpoint Identifier
    -            EP_ID: u4,
    -            ///  Direction of transaction
    -            DIR: u1,
    -            reserved8: u3,
    -            ///  Expected start frame
    -            ESOF: u1,
    -            ///  start of frame
    -            SOF: u1,
    -            ///  reset request
    -            RESET: u1,
    -            ///  Suspend mode request
    -            SUSP: u1,
    -            ///  Wakeup
    -            WKUP: u1,
    -            ///  Error
    -            ERR: u1,
    -            ///  Packet memory area over / underrun
    -            PMAOVR: u1,
    -            ///  Correct transfer
    -            CTR: u1,
    -            padding: u16,
    -        }),
    -        ///  frame number register
    -        FNR: mmio.Mmio(packed struct(u32) {
    -            ///  Frame number
    -            FN: u11,
    -            ///  Lost SOF
    -            LSOF: u2,
    -            ///  Locked
    -            LCK: u1,
    -            ///  Receive data - line status
    -            RXDM: u1,
    -            ///  Receive data + line status
    -            RXDP: u1,
    -            padding: u16,
    -        }),
    -        ///  device address
    -        DADDR: mmio.Mmio(packed struct(u32) {
    -            ///  Device address
    -            ADD: u7,
    -            ///  Enable function
    -            EF: u1,
    -            padding: u24,
    -        }),
    -        ///  Buffer table address
    -        BTABLE: mmio.Mmio(packed struct(u32) {
    -            reserved3: u3,
    -            ///  Buffer table
    -            BTABLE: u13,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  Basic timer
    -    pub const TIM6 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            ///  One-pulse mode
    -            OPM: u1,
    -            reserved7: u3,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            padding: u24,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            reserved4: u4,
    -            ///  Master mode selection
    -            MMS: u3,
    -            padding: u25,
    -        }),
    -        reserved12: [4]u8,
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            reserved8: u7,
    -            ///  Update DMA request enable
    -            UDE: u1,
    -            padding: u23,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            padding: u31,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            padding: u31,
    -        }),
    -        reserved36: [12]u8,
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  Low counter value
    -            CNT: u16,
    -            padding: u16,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Low Auto-reload value
    -            ARR: u16,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  FLASH
    -    pub const FLASH = extern struct {
    -        ///  Flash access control register
    -        ACR: mmio.Mmio(packed struct(u32) {
    -            ///  Latency
    -            LATENCY: u3,
    -            ///  Flash half cycle access enable
    -            HLFCYA: u1,
    -            ///  Prefetch buffer enable
    -            PRFTBE: u1,
    -            ///  Prefetch buffer status
    -            PRFTBS: u1,
    -            padding: u26,
    -        }),
    -        ///  Flash key register
    -        KEYR: mmio.Mmio(packed struct(u32) {
    -            ///  FPEC key
    -            KEY: u32,
    -        }),
    -        ///  Flash option key register
    -        OPTKEYR: mmio.Mmio(packed struct(u32) {
    -            ///  Option byte key
    -            OPTKEY: u32,
    -        }),
    -        ///  Status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Busy
    -            BSY: u1,
    -            reserved2: u1,
    -            ///  Programming error
    -            PGERR: u1,
    -            reserved4: u1,
    -            ///  Write protection error
    -            WRPRTERR: u1,
    -            ///  End of operation
    -            EOP: u1,
    -            padding: u26,
    -        }),
    -        ///  Control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  Programming
    -            PG: u1,
    -            ///  Page Erase
    -            PER: u1,
    -            ///  Mass Erase
    -            MER: u1,
    -            reserved4: u1,
    -            ///  Option byte programming
    -            OPTPG: u1,
    -            ///  Option byte erase
    -            OPTER: u1,
    -            ///  Start
    -            STRT: u1,
    -            ///  Lock
    -            LOCK: u1,
    -            reserved9: u1,
    -            ///  Option bytes write enable
    -            OPTWRE: u1,
    -            ///  Error interrupt enable
    -            ERRIE: u1,
    -            reserved12: u1,
    -            ///  End of operation interrupt enable
    -            EOPIE: u1,
    -            padding: u19,
    -        }),
    -        ///  Flash address register
    -        AR: mmio.Mmio(packed struct(u32) {
    -            ///  Flash Address
    -            FAR: u32,
    -        }),
    -        reserved28: [4]u8,
    -        ///  Option byte register
    -        OBR: mmio.Mmio(packed struct(u32) {
    -            ///  Option byte error
    -            OPTERR: u1,
    -            ///  Read protection
    -            RDPRT: u1,
    -            ///  WDG_SW
    -            WDG_SW: u1,
    -            ///  nRST_STOP
    -            nRST_STOP: u1,
    -            ///  nRST_STDBY
    -            nRST_STDBY: u1,
    -            reserved10: u5,
    -            ///  Data0
    -            Data0: u8,
    -            ///  Data1
    -            Data1: u8,
    -            padding: u6,
    -        }),
    -        ///  Write protection register
    -        WRPR: mmio.Mmio(packed struct(u32) {
    -            ///  Write protect
    -            WRP: u32,
    -        }),
    -    };
    -
    -    ///  Inter integrated circuit
    -    pub const I2C1 = extern struct {
    -        ///  Control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral enable
    -            PE: u1,
    -            ///  SMBus mode
    -            SMBUS: u1,
    -            reserved3: u1,
    -            ///  SMBus type
    -            SMBTYPE: u1,
    -            ///  ARP enable
    -            ENARP: u1,
    -            ///  PEC enable
    -            ENPEC: u1,
    -            ///  General call enable
    -            ENGC: u1,
    -            ///  Clock stretching disable (Slave mode)
    -            NOSTRETCH: u1,
    -            ///  Start generation
    -            START: u1,
    -            ///  Stop generation
    -            STOP: u1,
    -            ///  Acknowledge enable
    -            ACK: u1,
    -            ///  Acknowledge/PEC Position (for data reception)
    -            POS: u1,
    -            ///  Packet error checking
    -            PEC: u1,
    -            ///  SMBus alert
    -            ALERT: u1,
    -            reserved15: u1,
    -            ///  Software reset
    -            SWRST: u1,
    -            padding: u16,
    -        }),
    -        ///  Control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral clock frequency
    -            FREQ: u6,
    -            reserved8: u2,
    -            ///  Error interrupt enable
    -            ITERREN: u1,
    -            ///  Event interrupt enable
    -            ITEVTEN: u1,
    -            ///  Buffer interrupt enable
    -            ITBUFEN: u1,
    -            ///  DMA requests enable
    -            DMAEN: u1,
    -            ///  DMA last transfer
    -            LAST: u1,
    -            padding: u19,
    -        }),
    -        ///  Own address register 1
    -        OAR1: mmio.Mmio(packed struct(u32) {
    -            ///  Interface address
    -            ADD0: u1,
    -            ///  Interface address
    -            ADD7: u7,
    -            ///  Interface address
    -            ADD10: u2,
    -            reserved15: u5,
    -            ///  Addressing mode (slave mode)
    -            ADDMODE: u1,
    -            padding: u16,
    -        }),
    -        ///  Own address register 2
    -        OAR2: mmio.Mmio(packed struct(u32) {
    -            ///  Dual addressing mode enable
    -            ENDUAL: u1,
    -            ///  Interface address
    -            ADD2: u7,
    -            padding: u24,
    -        }),
    -        ///  Data register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  8-bit data register
    -            DR: u8,
    -            padding: u24,
    -        }),
    -        ///  Status register 1
    -        SR1: mmio.Mmio(packed struct(u32) {
    -            ///  Start bit (Master mode)
    -            SB: u1,
    -            ///  Address sent (master mode)/matched (slave mode)
    -            ADDR: u1,
    -            ///  Byte transfer finished
    -            BTF: u1,
    -            ///  10-bit header sent (Master mode)
    -            ADD10: u1,
    -            ///  Stop detection (slave mode)
    -            STOPF: u1,
    -            reserved6: u1,
    -            ///  Data register not empty (receivers)
    -            RxNE: u1,
    -            ///  Data register empty (transmitters)
    -            TxE: u1,
    -            ///  Bus error
    -            BERR: u1,
    -            ///  Arbitration lost (master mode)
    -            ARLO: u1,
    -            ///  Acknowledge failure
    -            AF: u1,
    -            ///  Overrun/Underrun
    -            OVR: u1,
    -            ///  PEC Error in reception
    -            PECERR: u1,
    -            reserved14: u1,
    -            ///  Timeout or Tlow error
    -            TIMEOUT: u1,
    -            ///  SMBus alert
    -            SMBALERT: u1,
    -            padding: u16,
    -        }),
    -        ///  Status register 2
    -        SR2: mmio.Mmio(packed struct(u32) {
    -            ///  Master/slave
    -            MSL: u1,
    -            ///  Bus busy
    -            BUSY: u1,
    -            ///  Transmitter/receiver
    -            TRA: u1,
    -            reserved4: u1,
    -            ///  General call address (Slave mode)
    -            GENCALL: u1,
    -            ///  SMBus device default address (Slave mode)
    -            SMBDEFAULT: u1,
    -            ///  SMBus host header (Slave mode)
    -            SMBHOST: u1,
    -            ///  Dual flag (Slave mode)
    -            DUALF: u1,
    -            ///  acket error checking register
    -            PEC: u8,
    -            padding: u16,
    -        }),
    -        ///  Clock control register
    -        CCR: mmio.Mmio(packed struct(u32) {
    -            ///  Clock control register in Fast/Standard mode (Master mode)
    -            CCR: u12,
    -            reserved14: u2,
    -            ///  Fast mode duty cycle
    -            DUTY: u1,
    -            ///  I2C master mode selection
    -            F_S: u1,
    -            padding: u16,
    -        }),
    -        ///  TRISE register
    -        TRISE: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum rise time in Fast/Standard mode (Master mode)
    -            TRISE: u6,
    -            padding: u26,
    -        }),
    -    };
    -
    -    ///  CRC calculation unit
    -    pub const CRC = extern struct {
    -        ///  Data register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  Data Register
    -            DR: u32,
    -        }),
    -        ///  Independent Data register
    -        IDR: mmio.Mmio(packed struct(u32) {
    -            ///  Independent Data register
    -            IDR: u8,
    -            padding: u24,
    -        }),
    -        ///  Control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  Reset bit
    -            RESET: u1,
    -            padding: u31,
    -        }),
    -    };
    -
    -    ///  Serial peripheral interface
    -    pub const SPI1 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Clock phase
    -            CPHA: u1,
    -            ///  Clock polarity
    -            CPOL: u1,
    -            ///  Master selection
    -            MSTR: u1,
    -            ///  Baud rate control
    -            BR: u3,
    -            ///  SPI enable
    -            SPE: u1,
    -            ///  Frame format
    -            LSBFIRST: u1,
    -            ///  Internal slave select
    -            SSI: u1,
    -            ///  Software slave management
    -            SSM: u1,
    -            ///  Receive only
    -            RXONLY: u1,
    -            ///  Data frame format
    -            DFF: u1,
    -            ///  CRC transfer next
    -            CRCNEXT: u1,
    -            ///  Hardware CRC calculation enable
    -            CRCEN: u1,
    -            ///  Output enable in bidirectional mode
    -            BIDIOE: u1,
    -            ///  Bidirectional data mode enable
    -            BIDIMODE: u1,
    -            padding: u16,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            ///  Rx buffer DMA enable
    -            RXDMAEN: u1,
    -            ///  Tx buffer DMA enable
    -            TXDMAEN: u1,
    -            ///  SS output enable
    -            SSOE: u1,
    -            reserved5: u2,
    -            ///  Error interrupt enable
    -            ERRIE: u1,
    -            ///  RX buffer not empty interrupt enable
    -            RXNEIE: u1,
    -            ///  Tx buffer empty interrupt enable
    -            TXEIE: u1,
    -            padding: u24,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Receive buffer not empty
    -            RXNE: u1,
    -            ///  Transmit buffer empty
    -            TXE: u1,
    -            ///  Channel side
    -            CHSIDE: u1,
    -            ///  Underrun flag
    -            UDR: u1,
    -            ///  CRC error flag
    -            CRCERR: u1,
    -            ///  Mode fault
    -            MODF: u1,
    -            ///  Overrun flag
    -            OVR: u1,
    -            ///  Busy flag
    -            BSY: u1,
    -            padding: u24,
    -        }),
    -        ///  data register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  Data register
    -            DR: u16,
    -            padding: u16,
    -        }),
    -        ///  CRC polynomial register
    -        CRCPR: mmio.Mmio(packed struct(u32) {
    -            ///  CRC polynomial register
    -            CRCPOLY: u16,
    -            padding: u16,
    -        }),
    -        ///  RX CRC register
    -        RXCRCR: mmio.Mmio(packed struct(u32) {
    -            ///  Rx CRC register
    -            RxCRC: u16,
    -            padding: u16,
    -        }),
    -        ///  TX CRC register
    -        TXCRCR: mmio.Mmio(packed struct(u32) {
    -            ///  Tx CRC register
    -            TxCRC: u16,
    -            padding: u16,
    -        }),
    -        ///  I2S configuration register
    -        I2SCFGR: mmio.Mmio(packed struct(u32) {
    -            ///  Channel length (number of bits per audio channel)
    -            CHLEN: u1,
    -            ///  Data length to be transferred
    -            DATLEN: u2,
    -            ///  Steady state clock polarity
    -            CKPOL: u1,
    -            ///  I2S standard selection
    -            I2SSTD: u2,
    -            reserved7: u1,
    -            ///  PCM frame synchronization
    -            PCMSYNC: u1,
    -            ///  I2S configuration mode
    -            I2SCFG: u2,
    -            ///  I2S Enable
    -            I2SE: u1,
    -            ///  I2S mode selection
    -            I2SMOD: u1,
    -            padding: u20,
    -        }),
    -        ///  I2S prescaler register
    -        I2SPR: mmio.Mmio(packed struct(u32) {
    -            ///  I2S Linear prescaler
    -            I2SDIV: u8,
    -            ///  Odd factor for the prescaler
    -            ODD: u1,
    -            ///  Master clock output enable
    -            MCKOE: u1,
    -            padding: u22,
    -        }),
    -    };
    -
    -    ///  Universal asynchronous receiver transmitter
    -    pub const UART5 = extern struct {
    -        ///  UART4_SR
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  PE
    -            PE: u1,
    -            ///  FE
    -            FE: u1,
    -            ///  NE
    -            NE: u1,
    -            ///  ORE
    -            ORE: u1,
    -            ///  IDLE
    -            IDLE: u1,
    -            ///  RXNE
    -            RXNE: u1,
    -            ///  TC
    -            TC: u1,
    -            ///  TXE
    -            TXE: u1,
    -            ///  LBD
    -            LBD: u1,
    -            padding: u23,
    -        }),
    -        ///  UART4_DR
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  DR
    -            DR: u9,
    -            padding: u23,
    -        }),
    -        ///  UART4_BRR
    -        BRR: mmio.Mmio(packed struct(u32) {
    -            ///  DIV_Fraction
    -            DIV_Fraction: u4,
    -            ///  DIV_Mantissa
    -            DIV_Mantissa: u12,
    -            padding: u16,
    -        }),
    -        ///  UART4_CR1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  SBK
    -            SBK: u1,
    -            ///  RWU
    -            RWU: u1,
    -            ///  RE
    -            RE: u1,
    -            ///  TE
    -            TE: u1,
    -            ///  IDLEIE
    -            IDLEIE: u1,
    -            ///  RXNEIE
    -            RXNEIE: u1,
    -            ///  TCIE
    -            TCIE: u1,
    -            ///  TXEIE
    -            TXEIE: u1,
    -            ///  PEIE
    -            PEIE: u1,
    -            ///  PS
    -            PS: u1,
    -            ///  PCE
    -            PCE: u1,
    -            ///  WAKE
    -            WAKE: u1,
    -            ///  M
    -            M: u1,
    -            ///  UE
    -            UE: u1,
    -            padding: u18,
    -        }),
    -        ///  UART4_CR2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            ///  ADD
    -            ADD: u4,
    -            reserved5: u1,
    -            ///  LBDL
    -            LBDL: u1,
    -            ///  LBDIE
    -            LBDIE: u1,
    -            reserved12: u5,
    -            ///  STOP
    -            STOP: u2,
    -            ///  LINEN
    -            LINEN: u1,
    -            padding: u17,
    -        }),
    -        ///  UART4_CR3
    -        CR3: mmio.Mmio(packed struct(u32) {
    -            ///  Error interrupt enable
    -            EIE: u1,
    -            ///  IrDA mode enable
    -            IREN: u1,
    -            ///  IrDA low-power
    -            IRLP: u1,
    -            ///  Half-duplex selection
    -            HDSEL: u1,
    -            reserved7: u3,
    -            ///  DMA enable transmitter
    -            DMAT: u1,
    -            padding: u24,
    -        }),
    -    };
    -
    -    ///  Universal asynchronous receiver transmitter
    -    pub const UART4 = extern struct {
    -        ///  UART4_SR
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Parity error
    -            PE: u1,
    -            ///  Framing error
    -            FE: u1,
    -            ///  Noise error flag
    -            NE: u1,
    -            ///  Overrun error
    -            ORE: u1,
    -            ///  IDLE line detected
    -            IDLE: u1,
    -            ///  Read data register not empty
    -            RXNE: u1,
    -            ///  Transmission complete
    -            TC: u1,
    -            ///  Transmit data register empty
    -            TXE: u1,
    -            ///  LIN break detection flag
    -            LBD: u1,
    -            padding: u23,
    -        }),
    -        ///  UART4_DR
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  DR
    -            DR: u9,
    -            padding: u23,
    -        }),
    -        ///  UART4_BRR
    -        BRR: mmio.Mmio(packed struct(u32) {
    -            ///  DIV_Fraction
    -            DIV_Fraction: u4,
    -            ///  DIV_Mantissa
    -            DIV_Mantissa: u12,
    -            padding: u16,
    -        }),
    -        ///  UART4_CR1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Send break
    -            SBK: u1,
    -            ///  Receiver wakeup
    -            RWU: u1,
    -            ///  Receiver enable
    -            RE: u1,
    -            ///  Transmitter enable
    -            TE: u1,
    -            ///  IDLE interrupt enable
    -            IDLEIE: u1,
    -            ///  RXNE interrupt enable
    -            RXNEIE: u1,
    -            ///  Transmission complete interrupt enable
    -            TCIE: u1,
    -            ///  TXE interrupt enable
    -            TXEIE: u1,
    -            ///  PE interrupt enable
    -            PEIE: u1,
    -            ///  Parity selection
    -            PS: u1,
    -            ///  Parity control enable
    -            PCE: u1,
    -            ///  Wakeup method
    -            WAKE: u1,
    -            ///  Word length
    -            M: u1,
    -            ///  USART enable
    -            UE: u1,
    -            padding: u18,
    -        }),
    -        ///  UART4_CR2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            ///  Address of the USART node
    -            ADD: u4,
    -            reserved5: u1,
    -            ///  lin break detection length
    -            LBDL: u1,
    -            ///  LIN break detection interrupt enable
    -            LBDIE: u1,
    -            reserved12: u5,
    -            ///  STOP bits
    -            STOP: u2,
    -            ///  LIN mode enable
    -            LINEN: u1,
    -            padding: u17,
    -        }),
    -        ///  UART4_CR3
    -        CR3: mmio.Mmio(packed struct(u32) {
    -            ///  Error interrupt enable
    -            EIE: u1,
    -            ///  IrDA mode enable
    -            IREN: u1,
    -            ///  IrDA low-power
    -            IRLP: u1,
    -            ///  Half-duplex selection
    -            HDSEL: u1,
    -            reserved6: u2,
    -            ///  DMA enable receiver
    -            DMAR: u1,
    -            ///  DMA enable transmitter
    -            DMAT: u1,
    -            padding: u24,
    -        }),
    -    };
    -
    -    ///  Universal synchronous asynchronous receiver transmitter
    -    pub const USART1 = extern struct {
    -        ///  Status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Parity error
    -            PE: u1,
    -            ///  Framing error
    -            FE: u1,
    -            ///  Noise error flag
    -            NE: u1,
    -            ///  Overrun error
    -            ORE: u1,
    -            ///  IDLE line detected
    -            IDLE: u1,
    -            ///  Read data register not empty
    -            RXNE: u1,
    -            ///  Transmission complete
    -            TC: u1,
    -            ///  Transmit data register empty
    -            TXE: u1,
    -            ///  LIN break detection flag
    -            LBD: u1,
    -            ///  CTS flag
    -            CTS: u1,
    -            padding: u22,
    -        }),
    -        ///  Data register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  Data value
    -            DR: u9,
    -            padding: u23,
    -        }),
    -        ///  Baud rate register
    -        BRR: mmio.Mmio(packed struct(u32) {
    -            ///  fraction of USARTDIV
    -            DIV_Fraction: u4,
    -            ///  mantissa of USARTDIV
    -            DIV_Mantissa: u12,
    -            padding: u16,
    -        }),
    -        ///  Control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Send break
    -            SBK: u1,
    -            ///  Receiver wakeup
    -            RWU: u1,
    -            ///  Receiver enable
    -            RE: u1,
    -            ///  Transmitter enable
    -            TE: u1,
    -            ///  IDLE interrupt enable
    -            IDLEIE: u1,
    -            ///  RXNE interrupt enable
    -            RXNEIE: u1,
    -            ///  Transmission complete interrupt enable
    -            TCIE: u1,
    -            ///  TXE interrupt enable
    -            TXEIE: u1,
    -            ///  PE interrupt enable
    -            PEIE: u1,
    -            ///  Parity selection
    -            PS: u1,
    -            ///  Parity control enable
    -            PCE: u1,
    -            ///  Wakeup method
    -            WAKE: u1,
    -            ///  Word length
    -            M: u1,
    -            ///  USART enable
    -            UE: u1,
    -            padding: u18,
    -        }),
    -        ///  Control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            ///  Address of the USART node
    -            ADD: u4,
    -            reserved5: u1,
    -            ///  lin break detection length
    -            LBDL: u1,
    -            ///  LIN break detection interrupt enable
    -            LBDIE: u1,
    -            reserved8: u1,
    -            ///  Last bit clock pulse
    -            LBCL: u1,
    -            ///  Clock phase
    -            CPHA: u1,
    -            ///  Clock polarity
    -            CPOL: u1,
    -            ///  Clock enable
    -            CLKEN: u1,
    -            ///  STOP bits
    -            STOP: u2,
    -            ///  LIN mode enable
    -            LINEN: u1,
    -            padding: u17,
    -        }),
    -        ///  Control register 3
    -        CR3: mmio.Mmio(packed struct(u32) {
    -            ///  Error interrupt enable
    -            EIE: u1,
    -            ///  IrDA mode enable
    -            IREN: u1,
    -            ///  IrDA low-power
    -            IRLP: u1,
    -            ///  Half-duplex selection
    -            HDSEL: u1,
    -            ///  Smartcard NACK enable
    -            NACK: u1,
    -            ///  Smartcard mode enable
    -            SCEN: u1,
    -            ///  DMA enable receiver
    -            DMAR: u1,
    -            ///  DMA enable transmitter
    -            DMAT: u1,
    -            ///  RTS enable
    -            RTSE: u1,
    -            ///  CTS enable
    -            CTSE: u1,
    -            ///  CTS interrupt enable
    -            CTSIE: u1,
    -            padding: u21,
    -        }),
    -        ///  Guard time and prescaler register
    -        GTPR: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u8,
    -            ///  Guard time value
    -            GT: u8,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  Debug support
    -    pub const DBG = extern struct {
    -        ///  DBGMCU_IDCODE
    -        IDCODE: mmio.Mmio(packed struct(u32) {
    -            ///  DEV_ID
    -            DEV_ID: u12,
    -            reserved16: u4,
    -            ///  REV_ID
    -            REV_ID: u16,
    -        }),
    -        ///  DBGMCU_CR
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  DBG_SLEEP
    -            DBG_SLEEP: u1,
    -            ///  DBG_STOP
    -            DBG_STOP: u1,
    -            ///  DBG_STANDBY
    -            DBG_STANDBY: u1,
    -            reserved5: u2,
    -            ///  TRACE_IOEN
    -            TRACE_IOEN: u1,
    -            ///  TRACE_MODE
    -            TRACE_MODE: u2,
    -            ///  DBG_IWDG_STOP
    -            DBG_IWDG_STOP: u1,
    -            ///  DBG_WWDG_STOP
    -            DBG_WWDG_STOP: u1,
    -            ///  DBG_TIM1_STOP
    -            DBG_TIM1_STOP: u1,
    -            ///  DBG_TIM2_STOP
    -            DBG_TIM2_STOP: u1,
    -            ///  DBG_TIM3_STOP
    -            DBG_TIM3_STOP: u1,
    -            ///  DBG_TIM4_STOP
    -            DBG_TIM4_STOP: u1,
    -            ///  DBG_CAN1_STOP
    -            DBG_CAN1_STOP: u1,
    -            ///  DBG_I2C1_SMBUS_TIMEOUT
    -            DBG_I2C1_SMBUS_TIMEOUT: u1,
    -            ///  DBG_I2C2_SMBUS_TIMEOUT
    -            DBG_I2C2_SMBUS_TIMEOUT: u1,
    -            ///  DBG_TIM8_STOP
    -            DBG_TIM8_STOP: u1,
    -            ///  DBG_TIM5_STOP
    -            DBG_TIM5_STOP: u1,
    -            ///  DBG_TIM6_STOP
    -            DBG_TIM6_STOP: u1,
    -            ///  DBG_TIM7_STOP
    -            DBG_TIM7_STOP: u1,
    -            ///  DBG_CAN2_STOP
    -            DBG_CAN2_STOP: u1,
    -            padding: u10,
    -        }),
    -    };
    -
    -    ///  Digital to analog converter
    -    pub const DAC = extern struct {
    -        ///  Control register (DAC_CR)
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 enable
    -            EN1: u1,
    -            ///  DAC channel1 output buffer disable
    -            BOFF1: u1,
    -            ///  DAC channel1 trigger enable
    -            TEN1: u1,
    -            ///  DAC channel1 trigger selection
    -            TSEL1: u3,
    -            ///  DAC channel1 noise/triangle wave generation enable
    -            WAVE1: u2,
    -            ///  DAC channel1 mask/amplitude selector
    -            MAMP1: u4,
    -            ///  DAC channel1 DMA enable
    -            DMAEN1: u1,
    -            reserved16: u3,
    -            ///  DAC channel2 enable
    -            EN2: u1,
    -            ///  DAC channel2 output buffer disable
    -            BOFF2: u1,
    -            ///  DAC channel2 trigger enable
    -            TEN2: u1,
    -            ///  DAC channel2 trigger selection
    -            TSEL2: u3,
    -            ///  DAC channel2 noise/triangle wave generation enable
    -            WAVE2: u2,
    -            ///  DAC channel2 mask/amplitude selector
    -            MAMP2: u4,
    -            ///  DAC channel2 DMA enable
    -            DMAEN2: u1,
    -            padding: u3,
    -        }),
    -        ///  DAC software trigger register (DAC_SWTRIGR)
    -        SWTRIGR: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 software trigger
    -            SWTRIG1: u1,
    -            ///  DAC channel2 software trigger
    -            SWTRIG2: u1,
    -            padding: u30,
    -        }),
    -        ///  DAC channel1 12-bit right-aligned data holding register(DAC_DHR12R1)
    -        DHR12R1: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 12-bit right-aligned data
    -            DACC1DHR: u12,
    -            padding: u20,
    -        }),
    -        ///  DAC channel1 12-bit left aligned data holding register (DAC_DHR12L1)
    -        DHR12L1: mmio.Mmio(packed struct(u32) {
    -            reserved4: u4,
    -            ///  DAC channel1 12-bit left-aligned data
    -            DACC1DHR: u12,
    -            padding: u16,
    -        }),
    -        ///  DAC channel1 8-bit right aligned data holding register (DAC_DHR8R1)
    -        DHR8R1: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 8-bit right-aligned data
    -            DACC1DHR: u8,
    -            padding: u24,
    -        }),
    -        ///  DAC channel2 12-bit right aligned data holding register (DAC_DHR12R2)
    -        DHR12R2: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel2 12-bit right-aligned data
    -            DACC2DHR: u12,
    -            padding: u20,
    -        }),
    -        ///  DAC channel2 12-bit left aligned data holding register (DAC_DHR12L2)
    -        DHR12L2: mmio.Mmio(packed struct(u32) {
    -            reserved4: u4,
    -            ///  DAC channel2 12-bit left-aligned data
    -            DACC2DHR: u12,
    -            padding: u16,
    -        }),
    -        ///  DAC channel2 8-bit right-aligned data holding register (DAC_DHR8R2)
    -        DHR8R2: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel2 8-bit right-aligned data
    -            DACC2DHR: u8,
    -            padding: u24,
    -        }),
    -        ///  Dual DAC 12-bit right-aligned data holding register (DAC_DHR12RD), Bits 31:28 Reserved, Bits 15:12 Reserved
    -        DHR12RD: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 12-bit right-aligned data
    -            DACC1DHR: u12,
    -            reserved16: u4,
    -            ///  DAC channel2 12-bit right-aligned data
    -            DACC2DHR: u12,
    -            padding: u4,
    -        }),
    -        ///  DUAL DAC 12-bit left aligned data holding register (DAC_DHR12LD), Bits 19:16 Reserved, Bits 3:0 Reserved
    -        DHR12LD: mmio.Mmio(packed struct(u32) {
    -            reserved4: u4,
    -            ///  DAC channel1 12-bit left-aligned data
    -            DACC1DHR: u12,
    -            reserved20: u4,
    -            ///  DAC channel2 12-bit right-aligned data
    -            DACC2DHR: u12,
    -        }),
    -        ///  DUAL DAC 8-bit right aligned data holding register (DAC_DHR8RD), Bits 31:16 Reserved
    -        DHR8RD: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 8-bit right-aligned data
    -            DACC1DHR: u8,
    -            ///  DAC channel2 8-bit right-aligned data
    -            DACC2DHR: u8,
    -            padding: u16,
    -        }),
    -        ///  DAC channel1 data output register (DAC_DOR1)
    -        DOR1: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 data output
    -            DACC1DOR: u12,
    -            padding: u20,
    -        }),
    -        ///  DAC channel2 data output register (DAC_DOR2)
    -        DOR2: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel2 data output
    -            DACC2DOR: u12,
    -            padding: u20,
    -        }),
    -    };
    -
    -    ///  Analog to digital converter
    -    pub const ADC1 = extern struct {
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Analog watchdog flag
    -            AWD: u1,
    -            ///  Regular channel end of conversion
    -            EOC: u1,
    -            ///  Injected channel end of conversion
    -            JEOC: u1,
    -            ///  Injected channel start flag
    -            JSTRT: u1,
    -            ///  Regular channel start flag
    -            STRT: u1,
    -            padding: u27,
    -        }),
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Analog watchdog channel select bits
    -            AWDCH: u5,
    -            ///  Interrupt enable for EOC
    -            EOCIE: u1,
    -            ///  Analog watchdog interrupt enable
    -            AWDIE: u1,
    -            ///  Interrupt enable for injected channels
    -            JEOCIE: u1,
    -            ///  Scan mode
    -            SCAN: u1,
    -            ///  Enable the watchdog on a single channel in scan mode
    -            AWDSGL: u1,
    -            ///  Automatic injected group conversion
    -            JAUTO: u1,
    -            ///  Discontinuous mode on regular channels
    -            DISCEN: u1,
    -            ///  Discontinuous mode on injected channels
    -            JDISCEN: u1,
    -            ///  Discontinuous mode channel count
    -            DISCNUM: u3,
    -            ///  Dual mode selection
    -            DUALMOD: u4,
    -            reserved22: u2,
    -            ///  Analog watchdog enable on injected channels
    -            JAWDEN: u1,
    -            ///  Analog watchdog enable on regular channels
    -            AWDEN: u1,
    -            padding: u8,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            ///  A/D converter ON / OFF
    -            ADON: u1,
    -            ///  Continuous conversion
    -            CONT: u1,
    -            ///  A/D calibration
    -            CAL: u1,
    -            ///  Reset calibration
    -            RSTCAL: u1,
    -            reserved8: u4,
    -            ///  Direct memory access mode
    -            DMA: u1,
    -            reserved11: u2,
    -            ///  Data alignment
    -            ALIGN: u1,
    -            ///  External event select for injected group
    -            JEXTSEL: u3,
    -            ///  External trigger conversion mode for injected channels
    -            JEXTTRIG: u1,
    -            reserved17: u1,
    -            ///  External event select for regular group
    -            EXTSEL: u3,
    -            ///  External trigger conversion mode for regular channels
    -            EXTTRIG: u1,
    -            ///  Start conversion of injected channels
    -            JSWSTART: u1,
    -            ///  Start conversion of regular channels
    -            SWSTART: u1,
    -            ///  Temperature sensor and VREFINT enable
    -            TSVREFE: u1,
    -            padding: u8,
    -        }),
    -        ///  sample time register 1
    -        SMPR1: mmio.Mmio(packed struct(u32) {
    -            ///  Channel 10 sample time selection
    -            SMP10: u3,
    -            ///  Channel 11 sample time selection
    -            SMP11: u3,
    -            ///  Channel 12 sample time selection
    -            SMP12: u3,
    -            ///  Channel 13 sample time selection
    -            SMP13: u3,
    -            ///  Channel 14 sample time selection
    -            SMP14: u3,
    -            ///  Channel 15 sample time selection
    -            SMP15: u3,
    -            ///  Channel 16 sample time selection
    -            SMP16: u3,
    -            ///  Channel 17 sample time selection
    -            SMP17: u3,
    -            padding: u8,
    -        }),
    -        ///  sample time register 2
    -        SMPR2: mmio.Mmio(packed struct(u32) {
    -            ///  Channel 0 sample time selection
    -            SMP0: u3,
    -            ///  Channel 1 sample time selection
    -            SMP1: u3,
    -            ///  Channel 2 sample time selection
    -            SMP2: u3,
    -            ///  Channel 3 sample time selection
    -            SMP3: u3,
    -            ///  Channel 4 sample time selection
    -            SMP4: u3,
    -            ///  Channel 5 sample time selection
    -            SMP5: u3,
    -            ///  Channel 6 sample time selection
    -            SMP6: u3,
    -            ///  Channel 7 sample time selection
    -            SMP7: u3,
    -            ///  Channel 8 sample time selection
    -            SMP8: u3,
    -            ///  Channel 9 sample time selection
    -            SMP9: u3,
    -            padding: u2,
    -        }),
    -        ///  injected channel data offset register x
    -        JOFR1: mmio.Mmio(packed struct(u32) {
    -            ///  Data offset for injected channel x
    -            JOFFSET1: u12,
    -            padding: u20,
    -        }),
    -        ///  injected channel data offset register x
    -        JOFR2: mmio.Mmio(packed struct(u32) {
    -            ///  Data offset for injected channel x
    -            JOFFSET2: u12,
    -            padding: u20,
    -        }),
    -        ///  injected channel data offset register x
    -        JOFR3: mmio.Mmio(packed struct(u32) {
    -            ///  Data offset for injected channel x
    -            JOFFSET3: u12,
    -            padding: u20,
    -        }),
    -        ///  injected channel data offset register x
    -        JOFR4: mmio.Mmio(packed struct(u32) {
    -            ///  Data offset for injected channel x
    -            JOFFSET4: u12,
    -            padding: u20,
    -        }),
    -        ///  watchdog higher threshold register
    -        HTR: mmio.Mmio(packed struct(u32) {
    -            ///  Analog watchdog higher threshold
    -            HT: u12,
    -            padding: u20,
    -        }),
    -        ///  watchdog lower threshold register
    -        LTR: mmio.Mmio(packed struct(u32) {
    -            ///  Analog watchdog lower threshold
    -            LT: u12,
    -            padding: u20,
    -        }),
    -        ///  regular sequence register 1
    -        SQR1: mmio.Mmio(packed struct(u32) {
    -            ///  13th conversion in regular sequence
    -            SQ13: u5,
    -            ///  14th conversion in regular sequence
    -            SQ14: u5,
    -            ///  15th conversion in regular sequence
    -            SQ15: u5,
    -            ///  16th conversion in regular sequence
    -            SQ16: u5,
    -            ///  Regular channel sequence length
    -            L: u4,
    -            padding: u8,
    -        }),
    -        ///  regular sequence register 2
    -        SQR2: mmio.Mmio(packed struct(u32) {
    -            ///  7th conversion in regular sequence
    -            SQ7: u5,
    -            ///  8th conversion in regular sequence
    -            SQ8: u5,
    -            ///  9th conversion in regular sequence
    -            SQ9: u5,
    -            ///  10th conversion in regular sequence
    -            SQ10: u5,
    -            ///  11th conversion in regular sequence
    -            SQ11: u5,
    -            ///  12th conversion in regular sequence
    -            SQ12: u5,
    -            padding: u2,
    -        }),
    -        ///  regular sequence register 3
    -        SQR3: mmio.Mmio(packed struct(u32) {
    -            ///  1st conversion in regular sequence
    -            SQ1: u5,
    -            ///  2nd conversion in regular sequence
    -            SQ2: u5,
    -            ///  3rd conversion in regular sequence
    -            SQ3: u5,
    -            ///  4th conversion in regular sequence
    -            SQ4: u5,
    -            ///  5th conversion in regular sequence
    -            SQ5: u5,
    -            ///  6th conversion in regular sequence
    -            SQ6: u5,
    -            padding: u2,
    -        }),
    -        ///  injected sequence register
    -        JSQR: mmio.Mmio(packed struct(u32) {
    -            ///  1st conversion in injected sequence
    -            JSQ1: u5,
    -            ///  2nd conversion in injected sequence
    -            JSQ2: u5,
    -            ///  3rd conversion in injected sequence
    -            JSQ3: u5,
    -            ///  4th conversion in injected sequence
    -            JSQ4: u5,
    -            ///  Injected sequence length
    -            JL: u2,
    -            padding: u10,
    -        }),
    -        ///  injected data register x
    -        JDR1: mmio.Mmio(packed struct(u32) {
    -            ///  Injected data
    -            JDATA: u16,
    -            padding: u16,
    -        }),
    -        ///  injected data register x
    -        JDR2: mmio.Mmio(packed struct(u32) {
    -            ///  Injected data
    -            JDATA: u16,
    -            padding: u16,
    -        }),
    -        ///  injected data register x
    -        JDR3: mmio.Mmio(packed struct(u32) {
    -            ///  Injected data
    -            JDATA: u16,
    -            padding: u16,
    -        }),
    -        ///  injected data register x
    -        JDR4: mmio.Mmio(packed struct(u32) {
    -            ///  Injected data
    -            JDATA: u16,
    -            padding: u16,
    -        }),
    -        ///  regular data register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  Regular data
    -            DATA: u16,
    -            ///  ADC2 data
    -            ADC2DATA: u16,
    -        }),
    -    };
    -
    -    ///  Analog to digital converter
    -    pub const ADC2 = extern struct {
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Analog watchdog flag
    -            AWD: u1,
    -            ///  Regular channel end of conversion
    -            EOC: u1,
    -            ///  Injected channel end of conversion
    -            JEOC: u1,
    -            ///  Injected channel start flag
    -            JSTRT: u1,
    -            ///  Regular channel start flag
    -            STRT: u1,
    -            padding: u27,
    -        }),
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Analog watchdog channel select bits
    -            AWDCH: u5,
    -            ///  Interrupt enable for EOC
    -            EOCIE: u1,
    -            ///  Analog watchdog interrupt enable
    -            AWDIE: u1,
    -            ///  Interrupt enable for injected channels
    -            JEOCIE: u1,
    -            ///  Scan mode
    -            SCAN: u1,
    -            ///  Enable the watchdog on a single channel in scan mode
    -            AWDSGL: u1,
    -            ///  Automatic injected group conversion
    -            JAUTO: u1,
    -            ///  Discontinuous mode on regular channels
    -            DISCEN: u1,
    -            ///  Discontinuous mode on injected channels
    -            JDISCEN: u1,
    -            ///  Discontinuous mode channel count
    -            DISCNUM: u3,
    -            reserved22: u6,
    -            ///  Analog watchdog enable on injected channels
    -            JAWDEN: u1,
    -            ///  Analog watchdog enable on regular channels
    -            AWDEN: u1,
    -            padding: u8,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            ///  A/D converter ON / OFF
    -            ADON: u1,
    -            ///  Continuous conversion
    -            CONT: u1,
    -            ///  A/D calibration
    -            CAL: u1,
    -            ///  Reset calibration
    -            RSTCAL: u1,
    -            reserved8: u4,
    -            ///  Direct memory access mode
    -            DMA: u1,
    -            reserved11: u2,
    -            ///  Data alignment
    -            ALIGN: u1,
    -            ///  External event select for injected group
    -            JEXTSEL: u3,
    -            ///  External trigger conversion mode for injected channels
    -            JEXTTRIG: u1,
    -            reserved17: u1,
    -            ///  External event select for regular group
    -            EXTSEL: u3,
    -            ///  External trigger conversion mode for regular channels
    -            EXTTRIG: u1,
    -            ///  Start conversion of injected channels
    -            JSWSTART: u1,
    -            ///  Start conversion of regular channels
    -            SWSTART: u1,
    -            ///  Temperature sensor and VREFINT enable
    -            TSVREFE: u1,
    -            padding: u8,
    -        }),
    -        ///  sample time register 1
    -        SMPR1: mmio.Mmio(packed struct(u32) {
    -            ///  Channel 10 sample time selection
    -            SMP10: u3,
    -            ///  Channel 11 sample time selection
    -            SMP11: u3,
    -            ///  Channel 12 sample time selection
    -            SMP12: u3,
    -            ///  Channel 13 sample time selection
    -            SMP13: u3,
    -            ///  Channel 14 sample time selection
    -            SMP14: u3,
    -            ///  Channel 15 sample time selection
    -            SMP15: u3,
    -            ///  Channel 16 sample time selection
    -            SMP16: u3,
    -            ///  Channel 17 sample time selection
    -            SMP17: u3,
    -            padding: u8,
    -        }),
    -        ///  sample time register 2
    -        SMPR2: mmio.Mmio(packed struct(u32) {
    -            ///  Channel 0 sample time selection
    -            SMP0: u3,
    -            ///  Channel 1 sample time selection
    -            SMP1: u3,
    -            ///  Channel 2 sample time selection
    -            SMP2: u3,
    -            ///  Channel 3 sample time selection
    -            SMP3: u3,
    -            ///  Channel 4 sample time selection
    -            SMP4: u3,
    -            ///  Channel 5 sample time selection
    -            SMP5: u3,
    -            ///  Channel 6 sample time selection
    -            SMP6: u3,
    -            ///  Channel 7 sample time selection
    -            SMP7: u3,
    -            ///  Channel 8 sample time selection
    -            SMP8: u3,
    -            ///  Channel 9 sample time selection
    -            SMP9: u3,
    -            padding: u2,
    -        }),
    -        ///  injected channel data offset register x
    -        JOFR1: mmio.Mmio(packed struct(u32) {
    -            ///  Data offset for injected channel x
    -            JOFFSET1: u12,
    -            padding: u20,
    -        }),
    -        ///  injected channel data offset register x
    -        JOFR2: mmio.Mmio(packed struct(u32) {
    -            ///  Data offset for injected channel x
    -            JOFFSET2: u12,
    -            padding: u20,
    -        }),
    -        ///  injected channel data offset register x
    -        JOFR3: mmio.Mmio(packed struct(u32) {
    -            ///  Data offset for injected channel x
    -            JOFFSET3: u12,
    -            padding: u20,
    -        }),
    -        ///  injected channel data offset register x
    -        JOFR4: mmio.Mmio(packed struct(u32) {
    -            ///  Data offset for injected channel x
    -            JOFFSET4: u12,
    -            padding: u20,
    -        }),
    -        ///  watchdog higher threshold register
    -        HTR: mmio.Mmio(packed struct(u32) {
    -            ///  Analog watchdog higher threshold
    -            HT: u12,
    -            padding: u20,
    -        }),
    -        ///  watchdog lower threshold register
    -        LTR: mmio.Mmio(packed struct(u32) {
    -            ///  Analog watchdog lower threshold
    -            LT: u12,
    -            padding: u20,
    -        }),
    -        ///  regular sequence register 1
    -        SQR1: mmio.Mmio(packed struct(u32) {
    -            ///  13th conversion in regular sequence
    -            SQ13: u5,
    -            ///  14th conversion in regular sequence
    -            SQ14: u5,
    -            ///  15th conversion in regular sequence
    -            SQ15: u5,
    -            ///  16th conversion in regular sequence
    -            SQ16: u5,
    -            ///  Regular channel sequence length
    -            L: u4,
    -            padding: u8,
    -        }),
    -        ///  regular sequence register 2
    -        SQR2: mmio.Mmio(packed struct(u32) {
    -            ///  7th conversion in regular sequence
    -            SQ7: u5,
    -            ///  8th conversion in regular sequence
    -            SQ8: u5,
    -            ///  9th conversion in regular sequence
    -            SQ9: u5,
    -            ///  10th conversion in regular sequence
    -            SQ10: u5,
    -            ///  11th conversion in regular sequence
    -            SQ11: u5,
    -            ///  12th conversion in regular sequence
    -            SQ12: u5,
    -            padding: u2,
    -        }),
    -        ///  regular sequence register 3
    -        SQR3: mmio.Mmio(packed struct(u32) {
    -            ///  1st conversion in regular sequence
    -            SQ1: u5,
    -            ///  2nd conversion in regular sequence
    -            SQ2: u5,
    -            ///  3rd conversion in regular sequence
    -            SQ3: u5,
    -            ///  4th conversion in regular sequence
    -            SQ4: u5,
    -            ///  5th conversion in regular sequence
    -            SQ5: u5,
    -            ///  6th conversion in regular sequence
    -            SQ6: u5,
    -            padding: u2,
    -        }),
    -        ///  injected sequence register
    -        JSQR: mmio.Mmio(packed struct(u32) {
    -            ///  1st conversion in injected sequence
    -            JSQ1: u5,
    -            ///  2nd conversion in injected sequence
    -            JSQ2: u5,
    -            ///  3rd conversion in injected sequence
    -            JSQ3: u5,
    -            ///  4th conversion in injected sequence
    -            JSQ4: u5,
    -            ///  Injected sequence length
    -            JL: u2,
    -            padding: u10,
    -        }),
    -        ///  injected data register x
    -        JDR1: mmio.Mmio(packed struct(u32) {
    -            ///  Injected data
    -            JDATA: u16,
    -            padding: u16,
    -        }),
    -        ///  injected data register x
    -        JDR2: mmio.Mmio(packed struct(u32) {
    -            ///  Injected data
    -            JDATA: u16,
    -            padding: u16,
    -        }),
    -        ///  injected data register x
    -        JDR3: mmio.Mmio(packed struct(u32) {
    -            ///  Injected data
    -            JDATA: u16,
    -            padding: u16,
    -        }),
    -        ///  injected data register x
    -        JDR4: mmio.Mmio(packed struct(u32) {
    -            ///  Injected data
    -            JDATA: u16,
    -            padding: u16,
    -        }),
    -        ///  regular data register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  Regular data
    -            DATA: u16,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  Controller area network
    -    pub const CAN1 = extern struct {
    -        ///  CAN_MCR
    -        CAN_MCR: mmio.Mmio(packed struct(u32) {
    -            ///  INRQ
    -            INRQ: u1,
    -            ///  SLEEP
    -            SLEEP: u1,
    -            ///  TXFP
    -            TXFP: u1,
    -            ///  RFLM
    -            RFLM: u1,
    -            ///  NART
    -            NART: u1,
    -            ///  AWUM
    -            AWUM: u1,
    -            ///  ABOM
    -            ABOM: u1,
    -            ///  TTCM
    -            TTCM: u1,
    -            reserved15: u7,
    -            ///  RESET
    -            RESET: u1,
    -            ///  DBF
    -            DBF: u1,
    -            padding: u15,
    -        }),
    -        ///  CAN_MSR
    -        CAN_MSR: mmio.Mmio(packed struct(u32) {
    -            ///  INAK
    -            INAK: u1,
    -            ///  SLAK
    -            SLAK: u1,
    -            ///  ERRI
    -            ERRI: u1,
    -            ///  WKUI
    -            WKUI: u1,
    -            ///  SLAKI
    -            SLAKI: u1,
    -            reserved8: u3,
    -            ///  TXM
    -            TXM: u1,
    -            ///  RXM
    -            RXM: u1,
    -            ///  SAMP
    -            SAMP: u1,
    -            ///  RX
    -            RX: u1,
    -            padding: u20,
    -        }),
    -        ///  CAN_TSR
    -        CAN_TSR: mmio.Mmio(packed struct(u32) {
    -            ///  RQCP0
    -            RQCP0: u1,
    -            ///  TXOK0
    -            TXOK0: u1,
    -            ///  ALST0
    -            ALST0: u1,
    -            ///  TERR0
    -            TERR0: u1,
    -            reserved7: u3,
    -            ///  ABRQ0
    -            ABRQ0: u1,
    -            ///  RQCP1
    -            RQCP1: u1,
    -            ///  TXOK1
    -            TXOK1: u1,
    -            ///  ALST1
    -            ALST1: u1,
    -            ///  TERR1
    -            TERR1: u1,
    -            reserved15: u3,
    -            ///  ABRQ1
    -            ABRQ1: u1,
    -            ///  RQCP2
    -            RQCP2: u1,
    -            ///  TXOK2
    -            TXOK2: u1,
    -            ///  ALST2
    -            ALST2: u1,
    -            ///  TERR2
    -            TERR2: u1,
    -            reserved23: u3,
    -            ///  ABRQ2
    -            ABRQ2: u1,
    -            ///  CODE
    -            CODE: u2,
    -            ///  Lowest priority flag for mailbox 0
    -            TME0: u1,
    -            ///  Lowest priority flag for mailbox 1
    -            TME1: u1,
    -            ///  Lowest priority flag for mailbox 2
    -            TME2: u1,
    -            ///  Lowest priority flag for mailbox 0
    -            LOW0: u1,
    -            ///  Lowest priority flag for mailbox 1
    -            LOW1: u1,
    -            ///  Lowest priority flag for mailbox 2
    -            LOW2: u1,
    -        }),
    -        ///  CAN_RF0R
    -        CAN_RF0R: mmio.Mmio(packed struct(u32) {
    -            ///  FMP0
    -            FMP0: u2,
    -            reserved3: u1,
    -            ///  FULL0
    -            FULL0: u1,
    -            ///  FOVR0
    -            FOVR0: u1,
    -            ///  RFOM0
    -            RFOM0: u1,
    -            padding: u26,
    -        }),
    -        ///  CAN_RF1R
    -        CAN_RF1R: mmio.Mmio(packed struct(u32) {
    -            ///  FMP1
    -            FMP1: u2,
    -            reserved3: u1,
    -            ///  FULL1
    -            FULL1: u1,
    -            ///  FOVR1
    -            FOVR1: u1,
    -            ///  RFOM1
    -            RFOM1: u1,
    -            padding: u26,
    -        }),
    -        ///  CAN_IER
    -        CAN_IER: mmio.Mmio(packed struct(u32) {
    -            ///  TMEIE
    -            TMEIE: u1,
    -            ///  FMPIE0
    -            FMPIE0: u1,
    -            ///  FFIE0
    -            FFIE0: u1,
    -            ///  FOVIE0
    -            FOVIE0: u1,
    -            ///  FMPIE1
    -            FMPIE1: u1,
    -            ///  FFIE1
    -            FFIE1: u1,
    -            ///  FOVIE1
    -            FOVIE1: u1,
    -            reserved8: u1,
    -            ///  EWGIE
    -            EWGIE: u1,
    -            ///  EPVIE
    -            EPVIE: u1,
    -            ///  BOFIE
    -            BOFIE: u1,
    -            ///  LECIE
    -            LECIE: u1,
    -            reserved15: u3,
    -            ///  ERRIE
    -            ERRIE: u1,
    -            ///  WKUIE
    -            WKUIE: u1,
    -            ///  SLKIE
    -            SLKIE: u1,
    -            padding: u14,
    -        }),
    -        ///  CAN_ESR
    -        CAN_ESR: mmio.Mmio(packed struct(u32) {
    -            ///  EWGF
    -            EWGF: u1,
    -            ///  EPVF
    -            EPVF: u1,
    -            ///  BOFF
    -            BOFF: u1,
    -            reserved4: u1,
    -            ///  LEC
    -            LEC: u3,
    -            reserved16: u9,
    -            ///  TEC
    -            TEC: u8,
    -            ///  REC
    -            REC: u8,
    -        }),
    -        ///  CAN_BTR
    -        CAN_BTR: mmio.Mmio(packed struct(u32) {
    -            ///  BRP
    -            BRP: u10,
    -            reserved16: u6,
    -            ///  TS1
    -            TS1: u4,
    -            ///  TS2
    -            TS2: u3,
    -            reserved24: u1,
    -            ///  SJW
    -            SJW: u2,
    -            reserved30: u4,
    -            ///  LBKM
    -            LBKM: u1,
    -            ///  SILM
    -            SILM: u1,
    -        }),
    -        reserved384: [352]u8,
    -        ///  CAN_TI0R
    -        CAN_TI0R: mmio.Mmio(packed struct(u32) {
    -            ///  TXRQ
    -            TXRQ: u1,
    -            ///  RTR
    -            RTR: u1,
    -            ///  IDE
    -            IDE: u1,
    -            ///  EXID
    -            EXID: u18,
    -            ///  STID
    -            STID: u11,
    -        }),
    -        ///  CAN_TDT0R
    -        CAN_TDT0R: mmio.Mmio(packed struct(u32) {
    -            ///  DLC
    -            DLC: u4,
    -            reserved8: u4,
    -            ///  TGT
    -            TGT: u1,
    -            reserved16: u7,
    -            ///  TIME
    -            TIME: u16,
    -        }),
    -        ///  CAN_TDL0R
    -        CAN_TDL0R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA0
    -            DATA0: u8,
    -            ///  DATA1
    -            DATA1: u8,
    -            ///  DATA2
    -            DATA2: u8,
    -            ///  DATA3
    -            DATA3: u8,
    -        }),
    -        ///  CAN_TDH0R
    -        CAN_TDH0R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA4
    -            DATA4: u8,
    -            ///  DATA5
    -            DATA5: u8,
    -            ///  DATA6
    -            DATA6: u8,
    -            ///  DATA7
    -            DATA7: u8,
    -        }),
    -        ///  CAN_TI1R
    -        CAN_TI1R: mmio.Mmio(packed struct(u32) {
    -            ///  TXRQ
    -            TXRQ: u1,
    -            ///  RTR
    -            RTR: u1,
    -            ///  IDE
    -            IDE: u1,
    -            ///  EXID
    -            EXID: u18,
    -            ///  STID
    -            STID: u11,
    -        }),
    -        ///  CAN_TDT1R
    -        CAN_TDT1R: mmio.Mmio(packed struct(u32) {
    -            ///  DLC
    -            DLC: u4,
    -            reserved8: u4,
    -            ///  TGT
    -            TGT: u1,
    -            reserved16: u7,
    -            ///  TIME
    -            TIME: u16,
    -        }),
    -        ///  CAN_TDL1R
    -        CAN_TDL1R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA0
    -            DATA0: u8,
    -            ///  DATA1
    -            DATA1: u8,
    -            ///  DATA2
    -            DATA2: u8,
    -            ///  DATA3
    -            DATA3: u8,
    -        }),
    -        ///  CAN_TDH1R
    -        CAN_TDH1R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA4
    -            DATA4: u8,
    -            ///  DATA5
    -            DATA5: u8,
    -            ///  DATA6
    -            DATA6: u8,
    -            ///  DATA7
    -            DATA7: u8,
    -        }),
    -        ///  CAN_TI2R
    -        CAN_TI2R: mmio.Mmio(packed struct(u32) {
    -            ///  TXRQ
    -            TXRQ: u1,
    -            ///  RTR
    -            RTR: u1,
    -            ///  IDE
    -            IDE: u1,
    -            ///  EXID
    -            EXID: u18,
    -            ///  STID
    -            STID: u11,
    -        }),
    -        ///  CAN_TDT2R
    -        CAN_TDT2R: mmio.Mmio(packed struct(u32) {
    -            ///  DLC
    -            DLC: u4,
    -            reserved8: u4,
    -            ///  TGT
    -            TGT: u1,
    -            reserved16: u7,
    -            ///  TIME
    -            TIME: u16,
    -        }),
    -        ///  CAN_TDL2R
    -        CAN_TDL2R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA0
    -            DATA0: u8,
    -            ///  DATA1
    -            DATA1: u8,
    -            ///  DATA2
    -            DATA2: u8,
    -            ///  DATA3
    -            DATA3: u8,
    -        }),
    -        ///  CAN_TDH2R
    -        CAN_TDH2R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA4
    -            DATA4: u8,
    -            ///  DATA5
    -            DATA5: u8,
    -            ///  DATA6
    -            DATA6: u8,
    -            ///  DATA7
    -            DATA7: u8,
    -        }),
    -        ///  CAN_RI0R
    -        CAN_RI0R: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  RTR
    -            RTR: u1,
    -            ///  IDE
    -            IDE: u1,
    -            ///  EXID
    -            EXID: u18,
    -            ///  STID
    -            STID: u11,
    -        }),
    -        ///  CAN_RDT0R
    -        CAN_RDT0R: mmio.Mmio(packed struct(u32) {
    -            ///  DLC
    -            DLC: u4,
    -            reserved8: u4,
    -            ///  FMI
    -            FMI: u8,
    -            ///  TIME
    -            TIME: u16,
    -        }),
    -        ///  CAN_RDL0R
    -        CAN_RDL0R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA0
    -            DATA0: u8,
    -            ///  DATA1
    -            DATA1: u8,
    -            ///  DATA2
    -            DATA2: u8,
    -            ///  DATA3
    -            DATA3: u8,
    -        }),
    -        ///  CAN_RDH0R
    -        CAN_RDH0R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA4
    -            DATA4: u8,
    -            ///  DATA5
    -            DATA5: u8,
    -            ///  DATA6
    -            DATA6: u8,
    -            ///  DATA7
    -            DATA7: u8,
    -        }),
    -        ///  CAN_RI1R
    -        CAN_RI1R: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  RTR
    -            RTR: u1,
    -            ///  IDE
    -            IDE: u1,
    -            ///  EXID
    -            EXID: u18,
    -            ///  STID
    -            STID: u11,
    -        }),
    -        ///  CAN_RDT1R
    -        CAN_RDT1R: mmio.Mmio(packed struct(u32) {
    -            ///  DLC
    -            DLC: u4,
    -            reserved8: u4,
    -            ///  FMI
    -            FMI: u8,
    -            ///  TIME
    -            TIME: u16,
    -        }),
    -        ///  CAN_RDL1R
    -        CAN_RDL1R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA0
    -            DATA0: u8,
    -            ///  DATA1
    -            DATA1: u8,
    -            ///  DATA2
    -            DATA2: u8,
    -            ///  DATA3
    -            DATA3: u8,
    -        }),
    -        ///  CAN_RDH1R
    -        CAN_RDH1R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA4
    -            DATA4: u8,
    -            ///  DATA5
    -            DATA5: u8,
    -            ///  DATA6
    -            DATA6: u8,
    -            ///  DATA7
    -            DATA7: u8,
    -        }),
    -        reserved512: [48]u8,
    -        ///  CAN_FMR
    -        CAN_FMR: mmio.Mmio(packed struct(u32) {
    -            ///  FINIT
    -            FINIT: u1,
    -            padding: u31,
    -        }),
    -        ///  CAN_FM1R
    -        CAN_FM1R: mmio.Mmio(packed struct(u32) {
    -            ///  Filter mode
    -            FBM0: u1,
    -            ///  Filter mode
    -            FBM1: u1,
    -            ///  Filter mode
    -            FBM2: u1,
    -            ///  Filter mode
    -            FBM3: u1,
    -            ///  Filter mode
    -            FBM4: u1,
    -            ///  Filter mode
    -            FBM5: u1,
    -            ///  Filter mode
    -            FBM6: u1,
    -            ///  Filter mode
    -            FBM7: u1,
    -            ///  Filter mode
    -            FBM8: u1,
    -            ///  Filter mode
    -            FBM9: u1,
    -            ///  Filter mode
    -            FBM10: u1,
    -            ///  Filter mode
    -            FBM11: u1,
    -            ///  Filter mode
    -            FBM12: u1,
    -            ///  Filter mode
    -            FBM13: u1,
    -            padding: u18,
    -        }),
    -        reserved524: [4]u8,
    -        ///  CAN_FS1R
    -        CAN_FS1R: mmio.Mmio(packed struct(u32) {
    -            ///  Filter scale configuration
    -            FSC0: u1,
    -            ///  Filter scale configuration
    -            FSC1: u1,
    -            ///  Filter scale configuration
    -            FSC2: u1,
    -            ///  Filter scale configuration
    -            FSC3: u1,
    -            ///  Filter scale configuration
    -            FSC4: u1,
    -            ///  Filter scale configuration
    -            FSC5: u1,
    -            ///  Filter scale configuration
    -            FSC6: u1,
    -            ///  Filter scale configuration
    -            FSC7: u1,
    -            ///  Filter scale configuration
    -            FSC8: u1,
    -            ///  Filter scale configuration
    -            FSC9: u1,
    -            ///  Filter scale configuration
    -            FSC10: u1,
    -            ///  Filter scale configuration
    -            FSC11: u1,
    -            ///  Filter scale configuration
    -            FSC12: u1,
    -            ///  Filter scale configuration
    -            FSC13: u1,
    -            padding: u18,
    -        }),
    -        reserved532: [4]u8,
    -        ///  CAN_FFA1R
    -        CAN_FFA1R: mmio.Mmio(packed struct(u32) {
    -            ///  Filter FIFO assignment for filter 0
    -            FFA0: u1,
    -            ///  Filter FIFO assignment for filter 1
    -            FFA1: u1,
    -            ///  Filter FIFO assignment for filter 2
    -            FFA2: u1,
    -            ///  Filter FIFO assignment for filter 3
    -            FFA3: u1,
    -            ///  Filter FIFO assignment for filter 4
    -            FFA4: u1,
    -            ///  Filter FIFO assignment for filter 5
    -            FFA5: u1,
    -            ///  Filter FIFO assignment for filter 6
    -            FFA6: u1,
    -            ///  Filter FIFO assignment for filter 7
    -            FFA7: u1,
    -            ///  Filter FIFO assignment for filter 8
    -            FFA8: u1,
    -            ///  Filter FIFO assignment for filter 9
    -            FFA9: u1,
    -            ///  Filter FIFO assignment for filter 10
    -            FFA10: u1,
    -            ///  Filter FIFO assignment for filter 11
    -            FFA11: u1,
    -            ///  Filter FIFO assignment for filter 12
    -            FFA12: u1,
    -            ///  Filter FIFO assignment for filter 13
    -            FFA13: u1,
    -            padding: u18,
    -        }),
    -        reserved540: [4]u8,
    -        ///  CAN_FA1R
    -        CAN_FA1R: mmio.Mmio(packed struct(u32) {
    -            ///  Filter active
    -            FACT0: u1,
    -            ///  Filter active
    -            FACT1: u1,
    -            ///  Filter active
    -            FACT2: u1,
    -            ///  Filter active
    -            FACT3: u1,
    -            ///  Filter active
    -            FACT4: u1,
    -            ///  Filter active
    -            FACT5: u1,
    -            ///  Filter active
    -            FACT6: u1,
    -            ///  Filter active
    -            FACT7: u1,
    -            ///  Filter active
    -            FACT8: u1,
    -            ///  Filter active
    -            FACT9: u1,
    -            ///  Filter active
    -            FACT10: u1,
    -            ///  Filter active
    -            FACT11: u1,
    -            ///  Filter active
    -            FACT12: u1,
    -            ///  Filter active
    -            FACT13: u1,
    -            padding: u18,
    -        }),
    -        reserved576: [32]u8,
    -        ///  Filter bank 0 register 1
    -        F0R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 0 register 2
    -        F0R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 1 register 1
    -        F1R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 1 register 2
    -        F1R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 2 register 1
    -        F2R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 2 register 2
    -        F2R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 3 register 1
    -        F3R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 3 register 2
    -        F3R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 4 register 1
    -        F4R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 4 register 2
    -        F4R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 5 register 1
    -        F5R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 5 register 2
    -        F5R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 6 register 1
    -        F6R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 6 register 2
    -        F6R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 7 register 1
    -        F7R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 7 register 2
    -        F7R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 8 register 1
    -        F8R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 8 register 2
    -        F8R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 9 register 1
    -        F9R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 9 register 2
    -        F9R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 10 register 1
    -        F10R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 10 register 2
    -        F10R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 11 register 1
    -        F11R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 11 register 2
    -        F11R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 4 register 1
    -        F12R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 12 register 2
    -        F12R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 13 register 1
    -        F13R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 13 register 2
    -        F13R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -    };
    -};
    diff --git a/src/chips/STM32F303.zig b/src/chips/STM32F303.zig
    deleted file mode 100644
    index f897dc632..000000000
    --- a/src/chips/STM32F303.zig
    +++ /dev/null
    @@ -1,13076 +0,0 @@
    -const micro = @import("microzig");
    -const mmio = micro.mmio;
    -
    -pub const devices = struct {
    -    ///  STM32F303
    -    pub const STM32F303 = struct {
    -        pub const properties = struct {
    -            pub const @"cpu.nvic_prio_bits" = "3";
    -            pub const @"cpu.mpu" = "false";
    -            pub const @"cpu.fpu" = "false";
    -            pub const @"cpu.revision" = "r1p0";
    -            pub const @"cpu.vendor_systick_config" = "false";
    -            pub const @"cpu.endian" = "little";
    -            pub const @"cpu.name" = "CM4";
    -        };
    -
    -        pub const VectorTable = extern struct {
    -            const Handler = micro.interrupt.Handler;
    -            const unhandled = micro.interrupt.unhandled;
    -
    -            initial_stack_pointer: u32,
    -            Reset: Handler = unhandled,
    -            NMI: Handler = unhandled,
    -            HardFault: Handler = unhandled,
    -            MemManageFault: Handler = unhandled,
    -            BusFault: Handler = unhandled,
    -            UsageFault: Handler = unhandled,
    -            reserved5: [4]u32 = undefined,
    -            SVCall: Handler = unhandled,
    -            DebugMonitor: Handler = unhandled,
    -            reserved11: [1]u32 = undefined,
    -            PendSV: Handler = unhandled,
    -            SysTick: Handler = unhandled,
    -            ///  Window Watchdog interrupt
    -            WWDG: Handler = unhandled,
    -            ///  PVD through EXTI line detection interrupt
    -            PVD: Handler = unhandled,
    -            ///  Tamper and TimeStamp interrupts
    -            TAMP_STAMP: Handler = unhandled,
    -            ///  RTC Wakeup interrupt through the EXTI line
    -            RTC_WKUP: Handler = unhandled,
    -            ///  Flash global interrupt
    -            FLASH: Handler = unhandled,
    -            ///  RCC global interrupt
    -            RCC: Handler = unhandled,
    -            reserved20: [2]u32 = undefined,
    -            ///  EXTI Line2 and Touch sensing interrupts
    -            EXTI2_TSC: Handler = unhandled,
    -            reserved23: [2]u32 = undefined,
    -            ///  DMA1 channel 1 interrupt
    -            DMA1_CH1: Handler = unhandled,
    -            reserved26: [6]u32 = undefined,
    -            ///  ADC1 and ADC2 global interrupt
    -            ADC1_2: Handler = unhandled,
    -            ///  USB High Priority/CAN_TX interrupts
    -            USB_HP_CAN_TX: Handler = unhandled,
    -            reserved34: [4]u32 = undefined,
    -            ///  TIM1 Break/TIM15 global interruts
    -            TIM1_BRK_TIM15: Handler = unhandled,
    -            ///  TIM1 Update/TIM16 global interrupts
    -            TIM1_UP_TIM16: Handler = unhandled,
    -            ///  TIM1 trigger and commutation/TIM17 interrupts
    -            TIM1_TRG_COM_TIM17: Handler = unhandled,
    -            ///  TIM1 capture compare interrupt
    -            TIM1_CC: Handler = unhandled,
    -            ///  TIM2 global interrupt
    -            TIM2: Handler = unhandled,
    -            ///  TIM3 global interrupt
    -            TIM3: Handler = unhandled,
    -            ///  TIM4 global interrupt
    -            TIM4: Handler = unhandled,
    -            ///  I2C1 event interrupt and EXTI Line23 interrupt
    -            I2C1_EV_EXTI23: Handler = unhandled,
    -            reserved46: [1]u32 = undefined,
    -            ///  I2C2 event interrupt & EXTI Line24 interrupt
    -            I2C2_EV_EXTI24: Handler = unhandled,
    -            reserved48: [1]u32 = undefined,
    -            ///  SPI1 global interrupt
    -            SPI1: Handler = unhandled,
    -            ///  SPI2 global interrupt
    -            SPI2: Handler = unhandled,
    -            ///  USART1 global interrupt and EXTI Line 25 interrupt
    -            USART1_EXTI25: Handler = unhandled,
    -            ///  USART2 global interrupt and EXTI Line 26 interrupt
    -            USART2_EXTI26: Handler = unhandled,
    -            ///  USART3 global interrupt and EXTI Line 28 interrupt
    -            USART3_EXTI28: Handler = unhandled,
    -            reserved54: [2]u32 = undefined,
    -            ///  USB wakeup from Suspend
    -            USB_WKUP: Handler = unhandled,
    -            ///  TIM8 break interrupt
    -            TIM8_BRK: Handler = unhandled,
    -            reserved58: [3]u32 = undefined,
    -            ///  ADC3 global interrupt
    -            ADC3: Handler = unhandled,
    -            ///  FSMC global interrupt
    -            FMC: Handler = unhandled,
    -            reserved63: [2]u32 = undefined,
    -            ///  SPI3 global interrupt
    -            SPI3: Handler = unhandled,
    -            ///  UART4 global and EXTI Line 34 interrupts
    -            UART4_EXTI34: Handler = unhandled,
    -            ///  UART5 global and EXTI Line 35 interrupts
    -            UART5_EXTI35: Handler = unhandled,
    -            ///  TIM6 global and DAC12 underrun interrupts
    -            TIM6_DACUNDER: Handler = unhandled,
    -            ///  TIM7 global interrupt
    -            TIM7: Handler = unhandled,
    -            ///  DMA2 channel1 global interrupt
    -            DMA2_CH1: Handler = unhandled,
    -            reserved71: [4]u32 = undefined,
    -            ///  ADC4 global interrupt
    -            ADC4: Handler = unhandled,
    -            reserved76: [2]u32 = undefined,
    -            ///  COMP1 & COMP2 & COMP3 interrupts combined with EXTI Lines 21, 22 and 29 interrupts
    -            COMP123: Handler = unhandled,
    -            reserved79: [16]u32 = undefined,
    -            ///  Floating point unit interrupt
    -            FPU: Handler = unhandled,
    -        };
    -
    -        pub const peripherals = struct {
    -            ///  General purpose timer
    -            pub const TIM2 = @as(*volatile types.TIM2, @ptrFromInt(0x40000000));
    -            ///  General purpose timer
    -            pub const TIM3 = @as(*volatile types.TIM2, @ptrFromInt(0x40000400));
    -            ///  General purpose timer
    -            pub const TIM4 = @as(*volatile types.TIM2, @ptrFromInt(0x40000800));
    -            ///  Basic timers
    -            pub const TIM6 = @as(*volatile types.TIM6, @ptrFromInt(0x40001000));
    -            ///  Basic timers
    -            pub const TIM7 = @as(*volatile types.TIM6, @ptrFromInt(0x40001400));
    -            ///  Real-time clock
    -            pub const RTC = @as(*volatile types.RTC, @ptrFromInt(0x40002800));
    -            ///  Window watchdog
    -            pub const WWDG = @as(*volatile types.WWDG, @ptrFromInt(0x40002c00));
    -            ///  Independent watchdog
    -            pub const IWDG = @as(*volatile types.IWDG, @ptrFromInt(0x40003000));
    -            ///  Serial peripheral interface/Inter-IC sound
    -            pub const I2S2ext = @as(*volatile types.SPI1, @ptrFromInt(0x40003400));
    -            ///  Serial peripheral interface/Inter-IC sound
    -            pub const SPI2 = @as(*volatile types.SPI1, @ptrFromInt(0x40003800));
    -            ///  Serial peripheral interface/Inter-IC sound
    -            pub const SPI3 = @as(*volatile types.SPI1, @ptrFromInt(0x40003c00));
    -            ///  Serial peripheral interface/Inter-IC sound
    -            pub const I2S3ext = @as(*volatile types.SPI1, @ptrFromInt(0x40004000));
    -            ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART2 = @as(*volatile types.USART1, @ptrFromInt(0x40004400));
    -            ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART3 = @as(*volatile types.USART1, @ptrFromInt(0x40004800));
    -            ///  Universal synchronous asynchronous receiver transmitter
    -            pub const UART4 = @as(*volatile types.USART1, @ptrFromInt(0x40004c00));
    -            ///  Universal synchronous asynchronous receiver transmitter
    -            pub const UART5 = @as(*volatile types.USART1, @ptrFromInt(0x40005000));
    -            ///  Inter-integrated circuit
    -            pub const I2C1 = @as(*volatile types.I2C1, @ptrFromInt(0x40005400));
    -            ///  Inter-integrated circuit
    -            pub const I2C2 = @as(*volatile types.I2C1, @ptrFromInt(0x40005800));
    -            ///  Universal serial bus full-speed device interface
    -            pub const USB_FS = @as(*volatile types.USB_FS, @ptrFromInt(0x40005c00));
    -            ///  Controller area network
    -            pub const CAN = @as(*volatile types.CAN, @ptrFromInt(0x40006400));
    -            ///  Power control
    -            pub const PWR = @as(*volatile types.PWR, @ptrFromInt(0x40007000));
    -            ///  Digital-to-analog converter
    -            pub const DAC = @as(*volatile types.DAC, @ptrFromInt(0x40007400));
    -            ///  Inter-integrated circuit
    -            pub const I2C3 = @as(*volatile types.I2C1, @ptrFromInt(0x40007800));
    -            ///  System configuration controller _Comparator and Operational amplifier
    -            pub const SYSCFG_COMP_OPAMP = @as(*volatile types.SYSCFG_COMP_OPAMP, @ptrFromInt(0x40010000));
    -            ///  External interrupt/event controller
    -            pub const EXTI = @as(*volatile types.EXTI, @ptrFromInt(0x40010400));
    -            ///  Advanced timer
    -            pub const TIM1 = @as(*volatile types.TIM1, @ptrFromInt(0x40012c00));
    -            ///  Serial peripheral interface/Inter-IC sound
    -            pub const SPI1 = @as(*volatile types.SPI1, @ptrFromInt(0x40013000));
    -            ///  Advanced-timers
    -            pub const TIM8 = @as(*volatile types.TIM8, @ptrFromInt(0x40013400));
    -            ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART1 = @as(*volatile types.USART1, @ptrFromInt(0x40013800));
    -            ///  Serial peripheral interface/Inter-IC sound
    -            pub const SPI4 = @as(*volatile types.SPI1, @ptrFromInt(0x40013c00));
    -            ///  General purpose timers
    -            pub const TIM15 = @as(*volatile types.TIM15, @ptrFromInt(0x40014000));
    -            ///  General-purpose-timers
    -            pub const TIM16 = @as(*volatile types.TIM16, @ptrFromInt(0x40014400));
    -            ///  General purpose timer
    -            pub const TIM17 = @as(*volatile types.TIM17, @ptrFromInt(0x40014800));
    -            ///  Advanced timer
    -            pub const TIM20 = @as(*volatile types.TIM1, @ptrFromInt(0x40015000));
    -            ///  DMA controller 1
    -            pub const DMA1 = @as(*volatile types.DMA1, @ptrFromInt(0x40020000));
    -            ///  DMA controller 1
    -            pub const DMA2 = @as(*volatile types.DMA1, @ptrFromInt(0x40020400));
    -            ///  Reset and clock control
    -            pub const RCC = @as(*volatile types.RCC, @ptrFromInt(0x40021000));
    -            ///  Flash
    -            pub const Flash = @as(*volatile types.Flash, @ptrFromInt(0x40022000));
    -            ///  cyclic redundancy check calculation unit
    -            pub const CRC = @as(*volatile types.CRC, @ptrFromInt(0x40023000));
    -            ///  Touch sensing controller
    -            pub const TSC = @as(*volatile types.TSC, @ptrFromInt(0x40024000));
    -            ///  General-purpose I/Os
    -            pub const GPIOA = @as(*volatile types.GPIOA, @ptrFromInt(0x48000000));
    -            ///  General-purpose I/Os
    -            pub const GPIOB = @as(*volatile types.GPIOB, @ptrFromInt(0x48000400));
    -            ///  General-purpose I/Os
    -            pub const GPIOC = @as(*volatile types.GPIOB, @ptrFromInt(0x48000800));
    -            ///  General-purpose I/Os
    -            pub const GPIOD = @as(*volatile types.GPIOB, @ptrFromInt(0x48000c00));
    -            ///  General-purpose I/Os
    -            pub const GPIOE = @as(*volatile types.GPIOB, @ptrFromInt(0x48001000));
    -            ///  General-purpose I/Os
    -            pub const GPIOF = @as(*volatile types.GPIOB, @ptrFromInt(0x48001400));
    -            ///  General-purpose I/Os
    -            pub const GPIOG = @as(*volatile types.GPIOB, @ptrFromInt(0x48001800));
    -            ///  General-purpose I/Os
    -            pub const GPIOH = @as(*volatile types.GPIOB, @ptrFromInt(0x48001c00));
    -            ///  Analog-to-Digital Converter
    -            pub const ADC1 = @as(*volatile types.ADC1, @ptrFromInt(0x50000000));
    -            ///  Analog-to-Digital Converter
    -            pub const ADC2 = @as(*volatile types.ADC1, @ptrFromInt(0x50000100));
    -            ///  Analog-to-Digital Converter
    -            pub const ADC1_2 = @as(*volatile types.ADC1_2, @ptrFromInt(0x50000300));
    -            ///  Analog-to-Digital Converter
    -            pub const ADC3 = @as(*volatile types.ADC1, @ptrFromInt(0x50000400));
    -            ///  Analog-to-Digital Converter
    -            pub const ADC4 = @as(*volatile types.ADC1, @ptrFromInt(0x50000500));
    -            ///  Analog-to-Digital Converter
    -            pub const ADC3_4 = @as(*volatile types.ADC1_2, @ptrFromInt(0x50000700));
    -            ///  Flexible memory controller
    -            pub const FMC = @as(*volatile types.FMC, @ptrFromInt(0xa0000400));
    -            ///  System control block ACTLR
    -            pub const SCB_ACTRL = @as(*volatile types.SCB_ACTRL, @ptrFromInt(0xe000e008));
    -            ///  SysTick timer
    -            pub const STK = @as(*volatile types.STK, @ptrFromInt(0xe000e010));
    -            ///  Nested Vectored Interrupt Controller
    -            pub const NVIC = @as(*volatile types.NVIC, @ptrFromInt(0xe000e100));
    -            ///  System control block
    -            pub const SCB = @as(*volatile types.SCB, @ptrFromInt(0xe000ed00));
    -            ///  Floating point unit CPACR
    -            pub const FPU_CPACR = @as(*volatile types.FPU_CPACR, @ptrFromInt(0xe000ed88));
    -            ///  Memory protection unit
    -            pub const MPU = @as(*volatile types.MPU, @ptrFromInt(0xe000ed90));
    -            ///  Nested vectored interrupt controller
    -            pub const NVIC_STIR = @as(*volatile types.NVIC_STIR, @ptrFromInt(0xe000ef00));
    -            ///  Floting point unit
    -            pub const FPU = @as(*volatile types.FPU, @ptrFromInt(0xe000ef34));
    -            ///  Debug support
    -            pub const DBGMCU = @as(*volatile types.DBGMCU, @ptrFromInt(0xe0042000));
    -        };
    -    };
    -};
    -
    -pub const types = struct {
    -    ///  General-purpose I/Os
    -    pub const GPIOA = extern struct {
    -        ///  GPIO port mode register
    -        MODER: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER0: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER1: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER2: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER3: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER4: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER5: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER6: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER7: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER8: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER9: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER10: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER11: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER12: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER13: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER14: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER15: u2,
    -        }),
    -        ///  GPIO port output type register
    -        OTYPER: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            OT0: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT1: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT2: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT3: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT4: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT5: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT6: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT7: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT8: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT9: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT10: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT11: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT12: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT13: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT14: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT15: u1,
    -            padding: u16,
    -        }),
    -        ///  GPIO port output speed register
    -        OSPEEDR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR0: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR1: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR2: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR3: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR4: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR5: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR6: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR7: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR8: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR9: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR10: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR11: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR12: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR13: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR14: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR15: u2,
    -        }),
    -        ///  GPIO port pull-up/pull-down register
    -        PUPDR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR0: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR1: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR2: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR3: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR4: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR5: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR6: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR7: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR8: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR9: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR10: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR11: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR12: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR13: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR14: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR15: u2,
    -        }),
    -        ///  GPIO port input data register
    -        IDR: mmio.Mmio(packed struct(u32) {
    -            ///  Port input data (y = 0..15)
    -            IDR0: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR1: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR2: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR3: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR4: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR5: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR6: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR7: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR8: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR9: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR10: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR11: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR12: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR13: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR14: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR15: u1,
    -            padding: u16,
    -        }),
    -        ///  GPIO port output data register
    -        ODR: mmio.Mmio(packed struct(u32) {
    -            ///  Port output data (y = 0..15)
    -            ODR0: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR1: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR2: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR3: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR4: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR5: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR6: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR7: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR8: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR9: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR10: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR11: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR12: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR13: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR14: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR15: u1,
    -            padding: u16,
    -        }),
    -        ///  GPIO port bit set/reset register
    -        BSRR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x set bit y (y= 0..15)
    -            BS0: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS1: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS2: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS3: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS4: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS5: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS6: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS7: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS8: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS9: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS10: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS11: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS12: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS13: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS14: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS15: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BR0: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR1: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR2: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR3: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR4: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR5: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR6: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR7: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR8: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR9: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR10: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR11: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR12: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR13: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR14: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR15: u1,
    -        }),
    -        ///  GPIO port configuration lock register
    -        LCKR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK0: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK1: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK2: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK3: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK4: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK5: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK6: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK7: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK8: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK9: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK10: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK11: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK12: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK13: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK14: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK15: u1,
    -            ///  Lok Key
    -            LCKK: u1,
    -            padding: u15,
    -        }),
    -        ///  GPIO alternate function low register
    -        AFRL: mmio.Mmio(packed struct(u32) {
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL0: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL1: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL2: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL3: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL4: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL5: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL6: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL7: u4,
    -        }),
    -        ///  GPIO alternate function high register
    -        AFRH: mmio.Mmio(packed struct(u32) {
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH8: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH9: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH10: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH11: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH12: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH13: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH14: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH15: u4,
    -        }),
    -        ///  Port bit reset register
    -        BRR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x Reset bit y
    -            BR0: u1,
    -            ///  Port x Reset bit y
    -            BR1: u1,
    -            ///  Port x Reset bit y
    -            BR2: u1,
    -            ///  Port x Reset bit y
    -            BR3: u1,
    -            ///  Port x Reset bit y
    -            BR4: u1,
    -            ///  Port x Reset bit y
    -            BR5: u1,
    -            ///  Port x Reset bit y
    -            BR6: u1,
    -            ///  Port x Reset bit y
    -            BR7: u1,
    -            ///  Port x Reset bit y
    -            BR8: u1,
    -            ///  Port x Reset bit y
    -            BR9: u1,
    -            ///  Port x Reset bit y
    -            BR10: u1,
    -            ///  Port x Reset bit y
    -            BR11: u1,
    -            ///  Port x Reset bit y
    -            BR12: u1,
    -            ///  Port x Reset bit y
    -            BR13: u1,
    -            ///  Port x Reset bit y
    -            BR14: u1,
    -            ///  Port x Reset bit y
    -            BR15: u1,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  General-purpose I/Os
    -    pub const GPIOB = extern struct {
    -        ///  GPIO port mode register
    -        MODER: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER0: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER1: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER2: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER3: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER4: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER5: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER6: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER7: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER8: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER9: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER10: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER11: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER12: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER13: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER14: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER15: u2,
    -        }),
    -        ///  GPIO port output type register
    -        OTYPER: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bit 0
    -            OT0: u1,
    -            ///  Port x configuration bit 1
    -            OT1: u1,
    -            ///  Port x configuration bit 2
    -            OT2: u1,
    -            ///  Port x configuration bit 3
    -            OT3: u1,
    -            ///  Port x configuration bit 4
    -            OT4: u1,
    -            ///  Port x configuration bit 5
    -            OT5: u1,
    -            ///  Port x configuration bit 6
    -            OT6: u1,
    -            ///  Port x configuration bit 7
    -            OT7: u1,
    -            ///  Port x configuration bit 8
    -            OT8: u1,
    -            ///  Port x configuration bit 9
    -            OT9: u1,
    -            ///  Port x configuration bit 10
    -            OT10: u1,
    -            ///  Port x configuration bit 11
    -            OT11: u1,
    -            ///  Port x configuration bit 12
    -            OT12: u1,
    -            ///  Port x configuration bit 13
    -            OT13: u1,
    -            ///  Port x configuration bit 14
    -            OT14: u1,
    -            ///  Port x configuration bit 15
    -            OT15: u1,
    -            padding: u16,
    -        }),
    -        ///  GPIO port output speed register
    -        OSPEEDR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR0: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR1: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR2: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR3: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR4: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR5: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR6: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR7: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR8: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR9: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR10: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR11: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR12: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR13: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR14: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR15: u2,
    -        }),
    -        ///  GPIO port pull-up/pull-down register
    -        PUPDR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR0: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR1: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR2: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR3: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR4: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR5: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR6: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR7: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR8: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR9: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR10: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR11: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR12: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR13: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR14: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR15: u2,
    -        }),
    -        ///  GPIO port input data register
    -        IDR: mmio.Mmio(packed struct(u32) {
    -            ///  Port input data (y = 0..15)
    -            IDR0: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR1: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR2: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR3: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR4: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR5: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR6: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR7: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR8: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR9: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR10: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR11: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR12: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR13: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR14: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR15: u1,
    -            padding: u16,
    -        }),
    -        ///  GPIO port output data register
    -        ODR: mmio.Mmio(packed struct(u32) {
    -            ///  Port output data (y = 0..15)
    -            ODR0: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR1: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR2: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR3: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR4: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR5: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR6: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR7: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR8: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR9: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR10: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR11: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR12: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR13: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR14: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR15: u1,
    -            padding: u16,
    -        }),
    -        ///  GPIO port bit set/reset register
    -        BSRR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x set bit y (y= 0..15)
    -            BS0: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS1: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS2: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS3: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS4: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS5: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS6: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS7: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS8: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS9: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS10: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS11: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS12: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS13: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS14: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS15: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BR0: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR1: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR2: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR3: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR4: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR5: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR6: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR7: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR8: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR9: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR10: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR11: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR12: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR13: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR14: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR15: u1,
    -        }),
    -        ///  GPIO port configuration lock register
    -        LCKR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK0: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK1: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK2: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK3: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK4: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK5: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK6: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK7: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK8: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK9: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK10: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK11: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK12: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK13: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK14: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK15: u1,
    -            ///  Lok Key
    -            LCKK: u1,
    -            padding: u15,
    -        }),
    -        ///  GPIO alternate function low register
    -        AFRL: mmio.Mmio(packed struct(u32) {
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL0: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL1: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL2: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL3: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL4: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL5: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL6: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL7: u4,
    -        }),
    -        ///  GPIO alternate function high register
    -        AFRH: mmio.Mmio(packed struct(u32) {
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH8: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH9: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH10: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH11: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH12: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH13: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH14: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH15: u4,
    -        }),
    -        ///  Port bit reset register
    -        BRR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x Reset bit y
    -            BR0: u1,
    -            ///  Port x Reset bit y
    -            BR1: u1,
    -            ///  Port x Reset bit y
    -            BR2: u1,
    -            ///  Port x Reset bit y
    -            BR3: u1,
    -            ///  Port x Reset bit y
    -            BR4: u1,
    -            ///  Port x Reset bit y
    -            BR5: u1,
    -            ///  Port x Reset bit y
    -            BR6: u1,
    -            ///  Port x Reset bit y
    -            BR7: u1,
    -            ///  Port x Reset bit y
    -            BR8: u1,
    -            ///  Port x Reset bit y
    -            BR9: u1,
    -            ///  Port x Reset bit y
    -            BR10: u1,
    -            ///  Port x Reset bit y
    -            BR11: u1,
    -            ///  Port x Reset bit y
    -            BR12: u1,
    -            ///  Port x Reset bit y
    -            BR13: u1,
    -            ///  Port x Reset bit y
    -            BR14: u1,
    -            ///  Port x Reset bit y
    -            BR15: u1,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  System control block ACTLR
    -    pub const SCB_ACTRL = extern struct {
    -        ///  Auxiliary control register
    -        ACTRL: mmio.Mmio(packed struct(u32) {
    -            ///  DISMCYCINT
    -            DISMCYCINT: u1,
    -            ///  DISDEFWBUF
    -            DISDEFWBUF: u1,
    -            ///  DISFOLD
    -            DISFOLD: u1,
    -            reserved8: u5,
    -            ///  DISFPCA
    -            DISFPCA: u1,
    -            ///  DISOOFP
    -            DISOOFP: u1,
    -            padding: u22,
    -        }),
    -    };
    -
    -    ///  Floating point unit CPACR
    -    pub const FPU_CPACR = extern struct {
    -        ///  Coprocessor access control register
    -        CPACR: mmio.Mmio(packed struct(u32) {
    -            reserved20: u20,
    -            ///  CP
    -            CP: u4,
    -            padding: u8,
    -        }),
    -    };
    -
    -    ///  Nested vectored interrupt controller
    -    pub const NVIC_STIR = extern struct {
    -        ///  Software trigger interrupt register
    -        STIR: mmio.Mmio(packed struct(u32) {
    -            ///  Software generated interrupt ID
    -            INTID: u9,
    -            padding: u23,
    -        }),
    -    };
    -
    -    ///  System control block
    -    pub const SCB = extern struct {
    -        ///  CPUID base register
    -        CPUID: mmio.Mmio(packed struct(u32) {
    -            ///  Revision number
    -            Revision: u4,
    -            ///  Part number of the processor
    -            PartNo: u12,
    -            ///  Reads as 0xF
    -            Constant: u4,
    -            ///  Variant number
    -            Variant: u4,
    -            ///  Implementer code
    -            Implementer: u8,
    -        }),
    -        ///  Interrupt control and state register
    -        ICSR: mmio.Mmio(packed struct(u32) {
    -            ///  Active vector
    -            VECTACTIVE: u9,
    -            reserved11: u2,
    -            ///  Return to base level
    -            RETTOBASE: u1,
    -            ///  Pending vector
    -            VECTPENDING: u7,
    -            reserved22: u3,
    -            ///  Interrupt pending flag
    -            ISRPENDING: u1,
    -            reserved25: u2,
    -            ///  SysTick exception clear-pending bit
    -            PENDSTCLR: u1,
    -            ///  SysTick exception set-pending bit
    -            PENDSTSET: u1,
    -            ///  PendSV clear-pending bit
    -            PENDSVCLR: u1,
    -            ///  PendSV set-pending bit
    -            PENDSVSET: u1,
    -            reserved31: u2,
    -            ///  NMI set-pending bit.
    -            NMIPENDSET: u1,
    -        }),
    -        ///  Vector table offset register
    -        VTOR: mmio.Mmio(packed struct(u32) {
    -            reserved9: u9,
    -            ///  Vector table base offset field
    -            TBLOFF: u21,
    -            padding: u2,
    -        }),
    -        ///  Application interrupt and reset control register
    -        AIRCR: mmio.Mmio(packed struct(u32) {
    -            ///  VECTRESET
    -            VECTRESET: u1,
    -            ///  VECTCLRACTIVE
    -            VECTCLRACTIVE: u1,
    -            ///  SYSRESETREQ
    -            SYSRESETREQ: u1,
    -            reserved8: u5,
    -            ///  PRIGROUP
    -            PRIGROUP: u3,
    -            reserved15: u4,
    -            ///  ENDIANESS
    -            ENDIANESS: u1,
    -            ///  Register key
    -            VECTKEYSTAT: u16,
    -        }),
    -        ///  System control register
    -        SCR: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  SLEEPONEXIT
    -            SLEEPONEXIT: u1,
    -            ///  SLEEPDEEP
    -            SLEEPDEEP: u1,
    -            reserved4: u1,
    -            ///  Send Event on Pending bit
    -            SEVEONPEND: u1,
    -            padding: u27,
    -        }),
    -        ///  Configuration and control register
    -        CCR: mmio.Mmio(packed struct(u32) {
    -            ///  Configures how the processor enters Thread mode
    -            NONBASETHRDENA: u1,
    -            ///  USERSETMPEND
    -            USERSETMPEND: u1,
    -            reserved3: u1,
    -            ///  UNALIGN_ TRP
    -            UNALIGN__TRP: u1,
    -            ///  DIV_0_TRP
    -            DIV_0_TRP: u1,
    -            reserved8: u3,
    -            ///  BFHFNMIGN
    -            BFHFNMIGN: u1,
    -            ///  STKALIGN
    -            STKALIGN: u1,
    -            padding: u22,
    -        }),
    -        ///  System handler priority registers
    -        SHPR1: mmio.Mmio(packed struct(u32) {
    -            ///  Priority of system handler 4
    -            PRI_4: u8,
    -            ///  Priority of system handler 5
    -            PRI_5: u8,
    -            ///  Priority of system handler 6
    -            PRI_6: u8,
    -            padding: u8,
    -        }),
    -        ///  System handler priority registers
    -        SHPR2: mmio.Mmio(packed struct(u32) {
    -            reserved24: u24,
    -            ///  Priority of system handler 11
    -            PRI_11: u8,
    -        }),
    -        ///  System handler priority registers
    -        SHPR3: mmio.Mmio(packed struct(u32) {
    -            reserved16: u16,
    -            ///  Priority of system handler 14
    -            PRI_14: u8,
    -            ///  Priority of system handler 15
    -            PRI_15: u8,
    -        }),
    -        ///  System handler control and state register
    -        SHCRS: mmio.Mmio(packed struct(u32) {
    -            ///  Memory management fault exception active bit
    -            MEMFAULTACT: u1,
    -            ///  Bus fault exception active bit
    -            BUSFAULTACT: u1,
    -            reserved3: u1,
    -            ///  Usage fault exception active bit
    -            USGFAULTACT: u1,
    -            reserved7: u3,
    -            ///  SVC call active bit
    -            SVCALLACT: u1,
    -            ///  Debug monitor active bit
    -            MONITORACT: u1,
    -            reserved10: u1,
    -            ///  PendSV exception active bit
    -            PENDSVACT: u1,
    -            ///  SysTick exception active bit
    -            SYSTICKACT: u1,
    -            ///  Usage fault exception pending bit
    -            USGFAULTPENDED: u1,
    -            ///  Memory management fault exception pending bit
    -            MEMFAULTPENDED: u1,
    -            ///  Bus fault exception pending bit
    -            BUSFAULTPENDED: u1,
    -            ///  SVC call pending bit
    -            SVCALLPENDED: u1,
    -            ///  Memory management fault enable bit
    -            MEMFAULTENA: u1,
    -            ///  Bus fault enable bit
    -            BUSFAULTENA: u1,
    -            ///  Usage fault enable bit
    -            USGFAULTENA: u1,
    -            padding: u13,
    -        }),
    -        ///  Configurable fault status register
    -        CFSR_UFSR_BFSR_MMFSR: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  Instruction access violation flag
    -            IACCVIOL: u1,
    -            reserved3: u1,
    -            ///  Memory manager fault on unstacking for a return from exception
    -            MUNSTKERR: u1,
    -            ///  Memory manager fault on stacking for exception entry.
    -            MSTKERR: u1,
    -            ///  MLSPERR
    -            MLSPERR: u1,
    -            reserved7: u1,
    -            ///  Memory Management Fault Address Register (MMAR) valid flag
    -            MMARVALID: u1,
    -            ///  Instruction bus error
    -            IBUSERR: u1,
    -            ///  Precise data bus error
    -            PRECISERR: u1,
    -            ///  Imprecise data bus error
    -            IMPRECISERR: u1,
    -            ///  Bus fault on unstacking for a return from exception
    -            UNSTKERR: u1,
    -            ///  Bus fault on stacking for exception entry
    -            STKERR: u1,
    -            ///  Bus fault on floating-point lazy state preservation
    -            LSPERR: u1,
    -            reserved15: u1,
    -            ///  Bus Fault Address Register (BFAR) valid flag
    -            BFARVALID: u1,
    -            ///  Undefined instruction usage fault
    -            UNDEFINSTR: u1,
    -            ///  Invalid state usage fault
    -            INVSTATE: u1,
    -            ///  Invalid PC load usage fault
    -            INVPC: u1,
    -            ///  No coprocessor usage fault.
    -            NOCP: u1,
    -            reserved24: u4,
    -            ///  Unaligned access usage fault
    -            UNALIGNED: u1,
    -            ///  Divide by zero usage fault
    -            DIVBYZERO: u1,
    -            padding: u6,
    -        }),
    -        ///  Hard fault status register
    -        HFSR: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  Vector table hard fault
    -            VECTTBL: u1,
    -            reserved30: u28,
    -            ///  Forced hard fault
    -            FORCED: u1,
    -            ///  Reserved for Debug use
    -            DEBUG_VT: u1,
    -        }),
    -        reserved52: [4]u8,
    -        ///  Memory management fault address register
    -        MMFAR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory management fault address
    -            MMFAR: u32,
    -        }),
    -        ///  Bus fault address register
    -        BFAR: mmio.Mmio(packed struct(u32) {
    -            ///  Bus fault address
    -            BFAR: u32,
    -        }),
    -        ///  Auxiliary fault status register
    -        AFSR: mmio.Mmio(packed struct(u32) {
    -            ///  Implementation defined
    -            IMPDEF: u32,
    -        }),
    -    };
    -
    -    ///  SysTick timer
    -    pub const STK = extern struct {
    -        ///  SysTick control and status register
    -        CTRL: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            ENABLE: u1,
    -            ///  SysTick exception request enable
    -            TICKINT: u1,
    -            ///  Clock source selection
    -            CLKSOURCE: u1,
    -            reserved16: u13,
    -            ///  COUNTFLAG
    -            COUNTFLAG: u1,
    -            padding: u15,
    -        }),
    -        ///  SysTick reload value register
    -        LOAD: mmio.Mmio(packed struct(u32) {
    -            ///  RELOAD value
    -            RELOAD: u24,
    -            padding: u8,
    -        }),
    -        ///  SysTick current value register
    -        VAL: mmio.Mmio(packed struct(u32) {
    -            ///  Current counter value
    -            CURRENT: u24,
    -            padding: u8,
    -        }),
    -        ///  SysTick calibration value register
    -        CALIB: mmio.Mmio(packed struct(u32) {
    -            ///  Calibration value
    -            TENMS: u24,
    -            reserved30: u6,
    -            ///  SKEW flag: Indicates whether the TENMS value is exact
    -            SKEW: u1,
    -            ///  NOREF flag. Reads as zero
    -            NOREF: u1,
    -        }),
    -    };
    -
    -    ///  Memory protection unit
    -    pub const MPU = extern struct {
    -        ///  MPU type register
    -        MPU_TYPER: mmio.Mmio(packed struct(u32) {
    -            ///  Separate flag
    -            SEPARATE: u1,
    -            reserved8: u7,
    -            ///  Number of MPU data regions
    -            DREGION: u8,
    -            ///  Number of MPU instruction regions
    -            IREGION: u8,
    -            padding: u8,
    -        }),
    -        ///  MPU control register
    -        MPU_CTRL: mmio.Mmio(packed struct(u32) {
    -            ///  Enables the MPU
    -            ENABLE: u1,
    -            ///  Enables the operation of MPU during hard fault
    -            HFNMIENA: u1,
    -            ///  Enable priviliged software access to default memory map
    -            PRIVDEFENA: u1,
    -            padding: u29,
    -        }),
    -        ///  MPU region number register
    -        MPU_RNR: mmio.Mmio(packed struct(u32) {
    -            ///  MPU region
    -            REGION: u8,
    -            padding: u24,
    -        }),
    -        ///  MPU region base address register
    -        MPU_RBAR: mmio.Mmio(packed struct(u32) {
    -            ///  MPU region field
    -            REGION: u4,
    -            ///  MPU region number valid
    -            VALID: u1,
    -            ///  Region base address field
    -            ADDR: u27,
    -        }),
    -        ///  MPU region attribute and size register
    -        MPU_RASR: mmio.Mmio(packed struct(u32) {
    -            ///  Region enable bit.
    -            ENABLE: u1,
    -            ///  Size of the MPU protection region
    -            SIZE: u5,
    -            reserved8: u2,
    -            ///  Subregion disable bits
    -            SRD: u8,
    -            ///  memory attribute
    -            B: u1,
    -            ///  memory attribute
    -            C: u1,
    -            ///  Shareable memory attribute
    -            S: u1,
    -            ///  memory attribute
    -            TEX: u3,
    -            reserved24: u2,
    -            ///  Access permission
    -            AP: u3,
    -            reserved28: u1,
    -            ///  Instruction access disable bit
    -            XN: u1,
    -            padding: u3,
    -        }),
    -    };
    -
    -    ///  Touch sensing controller
    -    pub const TSC = extern struct {
    -        ///  control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  Touch sensing controller enable
    -            TSCE: u1,
    -            ///  Start a new acquisition
    -            START: u1,
    -            ///  Acquisition mode
    -            AM: u1,
    -            ///  Synchronization pin polarity
    -            SYNCPOL: u1,
    -            ///  I/O Default mode
    -            IODEF: u1,
    -            ///  Max count value
    -            MCV: u3,
    -            reserved12: u4,
    -            ///  pulse generator prescaler
    -            PGPSC: u3,
    -            ///  Spread spectrum prescaler
    -            SSPSC: u1,
    -            ///  Spread spectrum enable
    -            SSE: u1,
    -            ///  Spread spectrum deviation
    -            SSD: u7,
    -            ///  Charge transfer pulse low
    -            CTPL: u4,
    -            ///  Charge transfer pulse high
    -            CTPH: u4,
    -        }),
    -        ///  interrupt enable register
    -        IER: mmio.Mmio(packed struct(u32) {
    -            ///  End of acquisition interrupt enable
    -            EOAIE: u1,
    -            ///  Max count error interrupt enable
    -            MCEIE: u1,
    -            padding: u30,
    -        }),
    -        ///  interrupt clear register
    -        ICR: mmio.Mmio(packed struct(u32) {
    -            ///  End of acquisition interrupt clear
    -            EOAIC: u1,
    -            ///  Max count error interrupt clear
    -            MCEIC: u1,
    -            padding: u30,
    -        }),
    -        ///  interrupt status register
    -        ISR: mmio.Mmio(packed struct(u32) {
    -            ///  End of acquisition flag
    -            EOAF: u1,
    -            ///  Max count error flag
    -            MCEF: u1,
    -            padding: u30,
    -        }),
    -        ///  I/O hysteresis control register
    -        IOHCR: mmio.Mmio(packed struct(u32) {
    -            ///  G1_IO1 Schmitt trigger hysteresis mode
    -            G1_IO1: u1,
    -            ///  G1_IO2 Schmitt trigger hysteresis mode
    -            G1_IO2: u1,
    -            ///  G1_IO3 Schmitt trigger hysteresis mode
    -            G1_IO3: u1,
    -            ///  G1_IO4 Schmitt trigger hysteresis mode
    -            G1_IO4: u1,
    -            ///  G2_IO1 Schmitt trigger hysteresis mode
    -            G2_IO1: u1,
    -            ///  G2_IO2 Schmitt trigger hysteresis mode
    -            G2_IO2: u1,
    -            ///  G2_IO3 Schmitt trigger hysteresis mode
    -            G2_IO3: u1,
    -            ///  G2_IO4 Schmitt trigger hysteresis mode
    -            G2_IO4: u1,
    -            ///  G3_IO1 Schmitt trigger hysteresis mode
    -            G3_IO1: u1,
    -            ///  G3_IO2 Schmitt trigger hysteresis mode
    -            G3_IO2: u1,
    -            ///  G3_IO3 Schmitt trigger hysteresis mode
    -            G3_IO3: u1,
    -            ///  G3_IO4 Schmitt trigger hysteresis mode
    -            G3_IO4: u1,
    -            ///  G4_IO1 Schmitt trigger hysteresis mode
    -            G4_IO1: u1,
    -            ///  G4_IO2 Schmitt trigger hysteresis mode
    -            G4_IO2: u1,
    -            ///  G4_IO3 Schmitt trigger hysteresis mode
    -            G4_IO3: u1,
    -            ///  G4_IO4 Schmitt trigger hysteresis mode
    -            G4_IO4: u1,
    -            ///  G5_IO1 Schmitt trigger hysteresis mode
    -            G5_IO1: u1,
    -            ///  G5_IO2 Schmitt trigger hysteresis mode
    -            G5_IO2: u1,
    -            ///  G5_IO3 Schmitt trigger hysteresis mode
    -            G5_IO3: u1,
    -            ///  G5_IO4 Schmitt trigger hysteresis mode
    -            G5_IO4: u1,
    -            ///  G6_IO1 Schmitt trigger hysteresis mode
    -            G6_IO1: u1,
    -            ///  G6_IO2 Schmitt trigger hysteresis mode
    -            G6_IO2: u1,
    -            ///  G6_IO3 Schmitt trigger hysteresis mode
    -            G6_IO3: u1,
    -            ///  G6_IO4 Schmitt trigger hysteresis mode
    -            G6_IO4: u1,
    -            ///  G7_IO1 Schmitt trigger hysteresis mode
    -            G7_IO1: u1,
    -            ///  G7_IO2 Schmitt trigger hysteresis mode
    -            G7_IO2: u1,
    -            ///  G7_IO3 Schmitt trigger hysteresis mode
    -            G7_IO3: u1,
    -            ///  G7_IO4 Schmitt trigger hysteresis mode
    -            G7_IO4: u1,
    -            ///  G8_IO1 Schmitt trigger hysteresis mode
    -            G8_IO1: u1,
    -            ///  G8_IO2 Schmitt trigger hysteresis mode
    -            G8_IO2: u1,
    -            ///  G8_IO3 Schmitt trigger hysteresis mode
    -            G8_IO3: u1,
    -            ///  G8_IO4 Schmitt trigger hysteresis mode
    -            G8_IO4: u1,
    -        }),
    -        reserved24: [4]u8,
    -        ///  I/O analog switch control register
    -        IOASCR: mmio.Mmio(packed struct(u32) {
    -            ///  G1_IO1 analog switch enable
    -            G1_IO1: u1,
    -            ///  G1_IO2 analog switch enable
    -            G1_IO2: u1,
    -            ///  G1_IO3 analog switch enable
    -            G1_IO3: u1,
    -            ///  G1_IO4 analog switch enable
    -            G1_IO4: u1,
    -            ///  G2_IO1 analog switch enable
    -            G2_IO1: u1,
    -            ///  G2_IO2 analog switch enable
    -            G2_IO2: u1,
    -            ///  G2_IO3 analog switch enable
    -            G2_IO3: u1,
    -            ///  G2_IO4 analog switch enable
    -            G2_IO4: u1,
    -            ///  G3_IO1 analog switch enable
    -            G3_IO1: u1,
    -            ///  G3_IO2 analog switch enable
    -            G3_IO2: u1,
    -            ///  G3_IO3 analog switch enable
    -            G3_IO3: u1,
    -            ///  G3_IO4 analog switch enable
    -            G3_IO4: u1,
    -            ///  G4_IO1 analog switch enable
    -            G4_IO1: u1,
    -            ///  G4_IO2 analog switch enable
    -            G4_IO2: u1,
    -            ///  G4_IO3 analog switch enable
    -            G4_IO3: u1,
    -            ///  G4_IO4 analog switch enable
    -            G4_IO4: u1,
    -            ///  G5_IO1 analog switch enable
    -            G5_IO1: u1,
    -            ///  G5_IO2 analog switch enable
    -            G5_IO2: u1,
    -            ///  G5_IO3 analog switch enable
    -            G5_IO3: u1,
    -            ///  G5_IO4 analog switch enable
    -            G5_IO4: u1,
    -            ///  G6_IO1 analog switch enable
    -            G6_IO1: u1,
    -            ///  G6_IO2 analog switch enable
    -            G6_IO2: u1,
    -            ///  G6_IO3 analog switch enable
    -            G6_IO3: u1,
    -            ///  G6_IO4 analog switch enable
    -            G6_IO4: u1,
    -            ///  G7_IO1 analog switch enable
    -            G7_IO1: u1,
    -            ///  G7_IO2 analog switch enable
    -            G7_IO2: u1,
    -            ///  G7_IO3 analog switch enable
    -            G7_IO3: u1,
    -            ///  G7_IO4 analog switch enable
    -            G7_IO4: u1,
    -            ///  G8_IO1 analog switch enable
    -            G8_IO1: u1,
    -            ///  G8_IO2 analog switch enable
    -            G8_IO2: u1,
    -            ///  G8_IO3 analog switch enable
    -            G8_IO3: u1,
    -            ///  G8_IO4 analog switch enable
    -            G8_IO4: u1,
    -        }),
    -        reserved32: [4]u8,
    -        ///  I/O sampling control register
    -        IOSCR: mmio.Mmio(packed struct(u32) {
    -            ///  G1_IO1 sampling mode
    -            G1_IO1: u1,
    -            ///  G1_IO2 sampling mode
    -            G1_IO2: u1,
    -            ///  G1_IO3 sampling mode
    -            G1_IO3: u1,
    -            ///  G1_IO4 sampling mode
    -            G1_IO4: u1,
    -            ///  G2_IO1 sampling mode
    -            G2_IO1: u1,
    -            ///  G2_IO2 sampling mode
    -            G2_IO2: u1,
    -            ///  G2_IO3 sampling mode
    -            G2_IO3: u1,
    -            ///  G2_IO4 sampling mode
    -            G2_IO4: u1,
    -            ///  G3_IO1 sampling mode
    -            G3_IO1: u1,
    -            ///  G3_IO2 sampling mode
    -            G3_IO2: u1,
    -            ///  G3_IO3 sampling mode
    -            G3_IO3: u1,
    -            ///  G3_IO4 sampling mode
    -            G3_IO4: u1,
    -            ///  G4_IO1 sampling mode
    -            G4_IO1: u1,
    -            ///  G4_IO2 sampling mode
    -            G4_IO2: u1,
    -            ///  G4_IO3 sampling mode
    -            G4_IO3: u1,
    -            ///  G4_IO4 sampling mode
    -            G4_IO4: u1,
    -            ///  G5_IO1 sampling mode
    -            G5_IO1: u1,
    -            ///  G5_IO2 sampling mode
    -            G5_IO2: u1,
    -            ///  G5_IO3 sampling mode
    -            G5_IO3: u1,
    -            ///  G5_IO4 sampling mode
    -            G5_IO4: u1,
    -            ///  G6_IO1 sampling mode
    -            G6_IO1: u1,
    -            ///  G6_IO2 sampling mode
    -            G6_IO2: u1,
    -            ///  G6_IO3 sampling mode
    -            G6_IO3: u1,
    -            ///  G6_IO4 sampling mode
    -            G6_IO4: u1,
    -            ///  G7_IO1 sampling mode
    -            G7_IO1: u1,
    -            ///  G7_IO2 sampling mode
    -            G7_IO2: u1,
    -            ///  G7_IO3 sampling mode
    -            G7_IO3: u1,
    -            ///  G7_IO4 sampling mode
    -            G7_IO4: u1,
    -            ///  G8_IO1 sampling mode
    -            G8_IO1: u1,
    -            ///  G8_IO2 sampling mode
    -            G8_IO2: u1,
    -            ///  G8_IO3 sampling mode
    -            G8_IO3: u1,
    -            ///  G8_IO4 sampling mode
    -            G8_IO4: u1,
    -        }),
    -        reserved40: [4]u8,
    -        ///  I/O channel control register
    -        IOCCR: mmio.Mmio(packed struct(u32) {
    -            ///  G1_IO1 channel mode
    -            G1_IO1: u1,
    -            ///  G1_IO2 channel mode
    -            G1_IO2: u1,
    -            ///  G1_IO3 channel mode
    -            G1_IO3: u1,
    -            ///  G1_IO4 channel mode
    -            G1_IO4: u1,
    -            ///  G2_IO1 channel mode
    -            G2_IO1: u1,
    -            ///  G2_IO2 channel mode
    -            G2_IO2: u1,
    -            ///  G2_IO3 channel mode
    -            G2_IO3: u1,
    -            ///  G2_IO4 channel mode
    -            G2_IO4: u1,
    -            ///  G3_IO1 channel mode
    -            G3_IO1: u1,
    -            ///  G3_IO2 channel mode
    -            G3_IO2: u1,
    -            ///  G3_IO3 channel mode
    -            G3_IO3: u1,
    -            ///  G3_IO4 channel mode
    -            G3_IO4: u1,
    -            ///  G4_IO1 channel mode
    -            G4_IO1: u1,
    -            ///  G4_IO2 channel mode
    -            G4_IO2: u1,
    -            ///  G4_IO3 channel mode
    -            G4_IO3: u1,
    -            ///  G4_IO4 channel mode
    -            G4_IO4: u1,
    -            ///  G5_IO1 channel mode
    -            G5_IO1: u1,
    -            ///  G5_IO2 channel mode
    -            G5_IO2: u1,
    -            ///  G5_IO3 channel mode
    -            G5_IO3: u1,
    -            ///  G5_IO4 channel mode
    -            G5_IO4: u1,
    -            ///  G6_IO1 channel mode
    -            G6_IO1: u1,
    -            ///  G6_IO2 channel mode
    -            G6_IO2: u1,
    -            ///  G6_IO3 channel mode
    -            G6_IO3: u1,
    -            ///  G6_IO4 channel mode
    -            G6_IO4: u1,
    -            ///  G7_IO1 channel mode
    -            G7_IO1: u1,
    -            ///  G7_IO2 channel mode
    -            G7_IO2: u1,
    -            ///  G7_IO3 channel mode
    -            G7_IO3: u1,
    -            ///  G7_IO4 channel mode
    -            G7_IO4: u1,
    -            ///  G8_IO1 channel mode
    -            G8_IO1: u1,
    -            ///  G8_IO2 channel mode
    -            G8_IO2: u1,
    -            ///  G8_IO3 channel mode
    -            G8_IO3: u1,
    -            ///  G8_IO4 channel mode
    -            G8_IO4: u1,
    -        }),
    -        reserved48: [4]u8,
    -        ///  I/O group control status register
    -        IOGCSR: mmio.Mmio(packed struct(u32) {
    -            ///  Analog I/O group x enable
    -            G1E: u1,
    -            ///  Analog I/O group x enable
    -            G2E: u1,
    -            ///  Analog I/O group x enable
    -            G3E: u1,
    -            ///  Analog I/O group x enable
    -            G4E: u1,
    -            ///  Analog I/O group x enable
    -            G5E: u1,
    -            ///  Analog I/O group x enable
    -            G6E: u1,
    -            ///  Analog I/O group x enable
    -            G7E: u1,
    -            ///  Analog I/O group x enable
    -            G8E: u1,
    -            reserved16: u8,
    -            ///  Analog I/O group x status
    -            G1S: u1,
    -            ///  Analog I/O group x status
    -            G2S: u1,
    -            ///  Analog I/O group x status
    -            G3S: u1,
    -            ///  Analog I/O group x status
    -            G4S: u1,
    -            ///  Analog I/O group x status
    -            G5S: u1,
    -            ///  Analog I/O group x status
    -            G6S: u1,
    -            ///  Analog I/O group x status
    -            G7S: u1,
    -            ///  Analog I/O group x status
    -            G8S: u1,
    -            padding: u8,
    -        }),
    -        ///  I/O group x counter register
    -        IOG1CR: mmio.Mmio(packed struct(u32) {
    -            ///  Counter value
    -            CNT: u14,
    -            padding: u18,
    -        }),
    -        ///  I/O group x counter register
    -        IOG2CR: mmio.Mmio(packed struct(u32) {
    -            ///  Counter value
    -            CNT: u14,
    -            padding: u18,
    -        }),
    -        ///  I/O group x counter register
    -        IOG3CR: mmio.Mmio(packed struct(u32) {
    -            ///  Counter value
    -            CNT: u14,
    -            padding: u18,
    -        }),
    -        ///  I/O group x counter register
    -        IOG4CR: mmio.Mmio(packed struct(u32) {
    -            ///  Counter value
    -            CNT: u14,
    -            padding: u18,
    -        }),
    -        ///  I/O group x counter register
    -        IOG5CR: mmio.Mmio(packed struct(u32) {
    -            ///  Counter value
    -            CNT: u14,
    -            padding: u18,
    -        }),
    -        ///  I/O group x counter register
    -        IOG6CR: mmio.Mmio(packed struct(u32) {
    -            ///  Counter value
    -            CNT: u14,
    -            padding: u18,
    -        }),
    -        ///  I/O group x counter register
    -        IOG7CR: mmio.Mmio(packed struct(u32) {
    -            ///  Counter value
    -            CNT: u14,
    -            padding: u18,
    -        }),
    -        ///  I/O group x counter register
    -        IOG8CR: mmio.Mmio(packed struct(u32) {
    -            ///  Counter value
    -            CNT: u14,
    -            padding: u18,
    -        }),
    -    };
    -
    -    ///  cyclic redundancy check calculation unit
    -    pub const CRC = extern struct {
    -        ///  Data register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  Data register bits
    -            DR: u32,
    -        }),
    -        ///  Independent data register
    -        IDR: mmio.Mmio(packed struct(u32) {
    -            ///  General-purpose 8-bit data register bits
    -            IDR: u8,
    -            padding: u24,
    -        }),
    -        ///  Control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  reset bit
    -            RESET: u1,
    -            reserved3: u2,
    -            ///  Polynomial size
    -            POLYSIZE: u2,
    -            ///  Reverse input data
    -            REV_IN: u2,
    -            ///  Reverse output data
    -            REV_OUT: u1,
    -            padding: u24,
    -        }),
    -        reserved16: [4]u8,
    -        ///  Initial CRC value
    -        INIT: mmio.Mmio(packed struct(u32) {
    -            ///  Programmable initial CRC value
    -            INIT: u32,
    -        }),
    -        ///  CRC polynomial
    -        POL: mmio.Mmio(packed struct(u32) {
    -            ///  Programmable polynomial
    -            POL: u32,
    -        }),
    -    };
    -
    -    ///  Flash
    -    pub const Flash = extern struct {
    -        ///  Flash access control register
    -        ACR: mmio.Mmio(packed struct(u32) {
    -            ///  LATENCY
    -            LATENCY: u3,
    -            reserved4: u1,
    -            ///  PRFTBE
    -            PRFTBE: u1,
    -            ///  PRFTBS
    -            PRFTBS: u1,
    -            padding: u26,
    -        }),
    -        ///  Flash key register
    -        KEYR: mmio.Mmio(packed struct(u32) {
    -            ///  Flash Key
    -            FKEYR: u32,
    -        }),
    -        ///  Flash option key register
    -        OPTKEYR: mmio.Mmio(packed struct(u32) {
    -            ///  Option byte key
    -            OPTKEYR: u32,
    -        }),
    -        ///  Flash status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Busy
    -            BSY: u1,
    -            reserved2: u1,
    -            ///  Programming error
    -            PGERR: u1,
    -            reserved4: u1,
    -            ///  Write protection error
    -            WRPRT: u1,
    -            ///  End of operation
    -            EOP: u1,
    -            padding: u26,
    -        }),
    -        ///  Flash control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  Programming
    -            PG: u1,
    -            ///  Page erase
    -            PER: u1,
    -            ///  Mass erase
    -            MER: u1,
    -            reserved4: u1,
    -            ///  Option byte programming
    -            OPTPG: u1,
    -            ///  Option byte erase
    -            OPTER: u1,
    -            ///  Start
    -            STRT: u1,
    -            ///  Lock
    -            LOCK: u1,
    -            reserved9: u1,
    -            ///  Option bytes write enable
    -            OPTWRE: u1,
    -            ///  Error interrupt enable
    -            ERRIE: u1,
    -            reserved12: u1,
    -            ///  End of operation interrupt enable
    -            EOPIE: u1,
    -            ///  Force option byte loading
    -            FORCE_OPTLOAD: u1,
    -            padding: u18,
    -        }),
    -        ///  Flash address register
    -        AR: mmio.Mmio(packed struct(u32) {
    -            ///  Flash address
    -            FAR: u32,
    -        }),
    -        reserved28: [4]u8,
    -        ///  Option byte register
    -        OBR: mmio.Mmio(packed struct(u32) {
    -            ///  Option byte error
    -            OPTERR: u1,
    -            ///  Level 1 protection status
    -            LEVEL1_PROT: u1,
    -            ///  Level 2 protection status
    -            LEVEL2_PROT: u1,
    -            reserved8: u5,
    -            ///  WDG_SW
    -            WDG_SW: u1,
    -            ///  nRST_STOP
    -            nRST_STOP: u1,
    -            ///  nRST_STDBY
    -            nRST_STDBY: u1,
    -            reserved12: u1,
    -            ///  BOOT1
    -            BOOT1: u1,
    -            ///  VDDA_MONITOR
    -            VDDA_MONITOR: u1,
    -            ///  SRAM_PARITY_CHECK
    -            SRAM_PARITY_CHECK: u1,
    -            reserved16: u1,
    -            ///  Data0
    -            Data0: u8,
    -            ///  Data1
    -            Data1: u8,
    -        }),
    -        ///  Write protection register
    -        WRPR: mmio.Mmio(packed struct(u32) {
    -            ///  Write protect
    -            WRP: u32,
    -        }),
    -    };
    -
    -    ///  Reset and clock control
    -    pub const RCC = extern struct {
    -        ///  Clock control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  Internal High Speed clock enable
    -            HSION: u1,
    -            ///  Internal High Speed clock ready flag
    -            HSIRDY: u1,
    -            reserved3: u1,
    -            ///  Internal High Speed clock trimming
    -            HSITRIM: u5,
    -            ///  Internal High Speed clock Calibration
    -            HSICAL: u8,
    -            ///  External High Speed clock enable
    -            HSEON: u1,
    -            ///  External High Speed clock ready flag
    -            HSERDY: u1,
    -            ///  External High Speed clock Bypass
    -            HSEBYP: u1,
    -            ///  Clock Security System enable
    -            CSSON: u1,
    -            reserved24: u4,
    -            ///  PLL enable
    -            PLLON: u1,
    -            ///  PLL clock ready flag
    -            PLLRDY: u1,
    -            padding: u6,
    -        }),
    -        ///  Clock configuration register (RCC_CFGR)
    -        CFGR: mmio.Mmio(packed struct(u32) {
    -            ///  System clock Switch
    -            SW: u2,
    -            ///  System Clock Switch Status
    -            SWS: u2,
    -            ///  AHB prescaler
    -            HPRE: u4,
    -            ///  APB Low speed prescaler (APB1)
    -            PPRE1: u3,
    -            ///  APB high speed prescaler (APB2)
    -            PPRE2: u3,
    -            reserved15: u1,
    -            ///  PLL entry clock source
    -            PLLSRC: u2,
    -            ///  HSE divider for PLL entry
    -            PLLXTPRE: u1,
    -            ///  PLL Multiplication Factor
    -            PLLMUL: u4,
    -            ///  USB prescaler
    -            USBPRES: u1,
    -            ///  I2S external clock source selection
    -            I2SSRC: u1,
    -            ///  Microcontroller clock output
    -            MCO: u3,
    -            reserved28: u1,
    -            ///  Microcontroller Clock Output Flag
    -            MCOF: u1,
    -            padding: u3,
    -        }),
    -        ///  Clock interrupt register (RCC_CIR)
    -        CIR: mmio.Mmio(packed struct(u32) {
    -            ///  LSI Ready Interrupt flag
    -            LSIRDYF: u1,
    -            ///  LSE Ready Interrupt flag
    -            LSERDYF: u1,
    -            ///  HSI Ready Interrupt flag
    -            HSIRDYF: u1,
    -            ///  HSE Ready Interrupt flag
    -            HSERDYF: u1,
    -            ///  PLL Ready Interrupt flag
    -            PLLRDYF: u1,
    -            reserved7: u2,
    -            ///  Clock Security System Interrupt flag
    -            CSSF: u1,
    -            ///  LSI Ready Interrupt Enable
    -            LSIRDYIE: u1,
    -            ///  LSE Ready Interrupt Enable
    -            LSERDYIE: u1,
    -            ///  HSI Ready Interrupt Enable
    -            HSIRDYIE: u1,
    -            ///  HSE Ready Interrupt Enable
    -            HSERDYIE: u1,
    -            ///  PLL Ready Interrupt Enable
    -            PLLRDYIE: u1,
    -            reserved16: u3,
    -            ///  LSI Ready Interrupt Clear
    -            LSIRDYC: u1,
    -            ///  LSE Ready Interrupt Clear
    -            LSERDYC: u1,
    -            ///  HSI Ready Interrupt Clear
    -            HSIRDYC: u1,
    -            ///  HSE Ready Interrupt Clear
    -            HSERDYC: u1,
    -            ///  PLL Ready Interrupt Clear
    -            PLLRDYC: u1,
    -            reserved23: u2,
    -            ///  Clock security system interrupt clear
    -            CSSC: u1,
    -            padding: u8,
    -        }),
    -        ///  APB2 peripheral reset register (RCC_APB2RSTR)
    -        APB2RSTR: mmio.Mmio(packed struct(u32) {
    -            ///  SYSCFG and COMP reset
    -            SYSCFGRST: u1,
    -            reserved11: u10,
    -            ///  TIM1 timer reset
    -            TIM1RST: u1,
    -            ///  SPI 1 reset
    -            SPI1RST: u1,
    -            ///  TIM8 timer reset
    -            TIM8RST: u1,
    -            ///  USART1 reset
    -            USART1RST: u1,
    -            reserved16: u1,
    -            ///  TIM15 timer reset
    -            TIM15RST: u1,
    -            ///  TIM16 timer reset
    -            TIM16RST: u1,
    -            ///  TIM17 timer reset
    -            TIM17RST: u1,
    -            padding: u13,
    -        }),
    -        ///  APB1 peripheral reset register (RCC_APB1RSTR)
    -        APB1RSTR: mmio.Mmio(packed struct(u32) {
    -            ///  Timer 2 reset
    -            TIM2RST: u1,
    -            ///  Timer 3 reset
    -            TIM3RST: u1,
    -            ///  Timer 14 reset
    -            TIM4RST: u1,
    -            reserved4: u1,
    -            ///  Timer 6 reset
    -            TIM6RST: u1,
    -            ///  Timer 7 reset
    -            TIM7RST: u1,
    -            reserved11: u5,
    -            ///  Window watchdog reset
    -            WWDGRST: u1,
    -            reserved14: u2,
    -            ///  SPI2 reset
    -            SPI2RST: u1,
    -            ///  SPI3 reset
    -            SPI3RST: u1,
    -            reserved17: u1,
    -            ///  USART 2 reset
    -            USART2RST: u1,
    -            ///  USART3 reset
    -            USART3RST: u1,
    -            ///  UART 4 reset
    -            UART4RST: u1,
    -            ///  UART 5 reset
    -            UART5RST: u1,
    -            ///  I2C1 reset
    -            I2C1RST: u1,
    -            ///  I2C2 reset
    -            I2C2RST: u1,
    -            ///  USB reset
    -            USBRST: u1,
    -            reserved25: u1,
    -            ///  CAN reset
    -            CANRST: u1,
    -            reserved28: u2,
    -            ///  Power interface reset
    -            PWRRST: u1,
    -            ///  DAC interface reset
    -            DACRST: u1,
    -            ///  I2C3 reset
    -            I2C3RST: u1,
    -            padding: u1,
    -        }),
    -        ///  AHB Peripheral Clock enable register (RCC_AHBENR)
    -        AHBENR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA1 clock enable
    -            DMAEN: u1,
    -            ///  DMA2 clock enable
    -            DMA2EN: u1,
    -            ///  SRAM interface clock enable
    -            SRAMEN: u1,
    -            reserved4: u1,
    -            ///  FLITF clock enable
    -            FLITFEN: u1,
    -            ///  FMC clock enable
    -            FMCEN: u1,
    -            ///  CRC clock enable
    -            CRCEN: u1,
    -            reserved16: u9,
    -            ///  IO port H clock enable
    -            IOPHEN: u1,
    -            ///  I/O port A clock enable
    -            IOPAEN: u1,
    -            ///  I/O port B clock enable
    -            IOPBEN: u1,
    -            ///  I/O port C clock enable
    -            IOPCEN: u1,
    -            ///  I/O port D clock enable
    -            IOPDEN: u1,
    -            ///  I/O port E clock enable
    -            IOPEEN: u1,
    -            ///  I/O port F clock enable
    -            IOPFEN: u1,
    -            ///  I/O port G clock enable
    -            IOPGEN: u1,
    -            ///  Touch sensing controller clock enable
    -            TSCEN: u1,
    -            reserved28: u3,
    -            ///  ADC1 and ADC2 clock enable
    -            ADC12EN: u1,
    -            ///  ADC3 and ADC4 clock enable
    -            ADC34EN: u1,
    -            padding: u2,
    -        }),
    -        ///  APB2 peripheral clock enable register (RCC_APB2ENR)
    -        APB2ENR: mmio.Mmio(packed struct(u32) {
    -            ///  SYSCFG clock enable
    -            SYSCFGEN: u1,
    -            reserved11: u10,
    -            ///  TIM1 Timer clock enable
    -            TIM1EN: u1,
    -            ///  SPI 1 clock enable
    -            SPI1EN: u1,
    -            ///  TIM8 Timer clock enable
    -            TIM8EN: u1,
    -            ///  USART1 clock enable
    -            USART1EN: u1,
    -            reserved16: u1,
    -            ///  TIM15 timer clock enable
    -            TIM15EN: u1,
    -            ///  TIM16 timer clock enable
    -            TIM16EN: u1,
    -            ///  TIM17 timer clock enable
    -            TIM17EN: u1,
    -            padding: u13,
    -        }),
    -        ///  APB1 peripheral clock enable register (RCC_APB1ENR)
    -        APB1ENR: mmio.Mmio(packed struct(u32) {
    -            ///  Timer 2 clock enable
    -            TIM2EN: u1,
    -            ///  Timer 3 clock enable
    -            TIM3EN: u1,
    -            ///  Timer 4 clock enable
    -            TIM4EN: u1,
    -            reserved4: u1,
    -            ///  Timer 6 clock enable
    -            TIM6EN: u1,
    -            ///  Timer 7 clock enable
    -            TIM7EN: u1,
    -            reserved11: u5,
    -            ///  Window watchdog clock enable
    -            WWDGEN: u1,
    -            reserved14: u2,
    -            ///  SPI 2 clock enable
    -            SPI2EN: u1,
    -            ///  SPI 3 clock enable
    -            SPI3EN: u1,
    -            reserved17: u1,
    -            ///  USART 2 clock enable
    -            USART2EN: u1,
    -            ///  USART 3 clock enable
    -            USART3EN: u1,
    -            ///  USART 4 clock enable
    -            USART4EN: u1,
    -            ///  USART 5 clock enable
    -            USART5EN: u1,
    -            ///  I2C 1 clock enable
    -            I2C1EN: u1,
    -            ///  I2C 2 clock enable
    -            I2C2EN: u1,
    -            ///  USB clock enable
    -            USBEN: u1,
    -            reserved25: u1,
    -            ///  CAN clock enable
    -            CANEN: u1,
    -            ///  DAC2 interface clock enable
    -            DAC2EN: u1,
    -            reserved28: u1,
    -            ///  Power interface clock enable
    -            PWREN: u1,
    -            ///  DAC interface clock enable
    -            DACEN: u1,
    -            ///  I2C3 clock enable
    -            I2C3EN: u1,
    -            padding: u1,
    -        }),
    -        ///  Backup domain control register (RCC_BDCR)
    -        BDCR: mmio.Mmio(packed struct(u32) {
    -            ///  External Low Speed oscillator enable
    -            LSEON: u1,
    -            ///  External Low Speed oscillator ready
    -            LSERDY: u1,
    -            ///  External Low Speed oscillator bypass
    -            LSEBYP: u1,
    -            ///  LSE oscillator drive capability
    -            LSEDRV: u2,
    -            reserved8: u3,
    -            ///  RTC clock source selection
    -            RTCSEL: u2,
    -            reserved15: u5,
    -            ///  RTC clock enable
    -            RTCEN: u1,
    -            ///  Backup domain software reset
    -            BDRST: u1,
    -            padding: u15,
    -        }),
    -        ///  Control/status register (RCC_CSR)
    -        CSR: mmio.Mmio(packed struct(u32) {
    -            ///  Internal low speed oscillator enable
    -            LSION: u1,
    -            ///  Internal low speed oscillator ready
    -            LSIRDY: u1,
    -            reserved24: u22,
    -            ///  Remove reset flag
    -            RMVF: u1,
    -            ///  Option byte loader reset flag
    -            OBLRSTF: u1,
    -            ///  PIN reset flag
    -            PINRSTF: u1,
    -            ///  POR/PDR reset flag
    -            PORRSTF: u1,
    -            ///  Software reset flag
    -            SFTRSTF: u1,
    -            ///  Independent watchdog reset flag
    -            IWDGRSTF: u1,
    -            ///  Window watchdog reset flag
    -            WWDGRSTF: u1,
    -            ///  Low-power reset flag
    -            LPWRRSTF: u1,
    -        }),
    -        ///  AHB peripheral reset register
    -        AHBRSTR: mmio.Mmio(packed struct(u32) {
    -            reserved5: u5,
    -            ///  FMC reset
    -            FMCRST: u1,
    -            reserved16: u10,
    -            ///  I/O port H reset
    -            IOPHRST: u1,
    -            ///  I/O port A reset
    -            IOPARST: u1,
    -            ///  I/O port B reset
    -            IOPBRST: u1,
    -            ///  I/O port C reset
    -            IOPCRST: u1,
    -            ///  I/O port D reset
    -            IOPDRST: u1,
    -            ///  I/O port E reset
    -            IOPERST: u1,
    -            ///  I/O port F reset
    -            IOPFRST: u1,
    -            ///  Touch sensing controller reset
    -            IOPGRST: u1,
    -            ///  Touch sensing controller reset
    -            TSCRST: u1,
    -            reserved28: u3,
    -            ///  ADC1 and ADC2 reset
    -            ADC12RST: u1,
    -            ///  ADC3 and ADC4 reset
    -            ADC34RST: u1,
    -            padding: u2,
    -        }),
    -        ///  Clock configuration register 2
    -        CFGR2: mmio.Mmio(packed struct(u32) {
    -            ///  PREDIV division factor
    -            PREDIV: u4,
    -            ///  ADC1 and ADC2 prescaler
    -            ADC12PRES: u5,
    -            ///  ADC3 and ADC4 prescaler
    -            ADC34PRES: u5,
    -            padding: u18,
    -        }),
    -        ///  Clock configuration register 3
    -        CFGR3: mmio.Mmio(packed struct(u32) {
    -            ///  USART1 clock source selection
    -            USART1SW: u2,
    -            reserved4: u2,
    -            ///  I2C1 clock source selection
    -            I2C1SW: u1,
    -            ///  I2C2 clock source selection
    -            I2C2SW: u1,
    -            ///  I2C3 clock source selection
    -            I2C3SW: u1,
    -            reserved8: u1,
    -            ///  Timer1 clock source selection
    -            TIM1SW: u1,
    -            ///  Timer8 clock source selection
    -            TIM8SW: u1,
    -            reserved16: u6,
    -            ///  USART2 clock source selection
    -            USART2SW: u2,
    -            ///  USART3 clock source selection
    -            USART3SW: u2,
    -            ///  UART4 clock source selection
    -            UART4SW: u2,
    -            ///  UART5 clock source selection
    -            UART5SW: u2,
    -            padding: u8,
    -        }),
    -    };
    -
    -    ///  DMA controller 1
    -    pub const DMA1 = extern struct {
    -        ///  DMA interrupt status register (DMA_ISR)
    -        ISR: mmio.Mmio(packed struct(u32) {
    -            ///  Channel 1 Global interrupt flag
    -            GIF1: u1,
    -            ///  Channel 1 Transfer Complete flag
    -            TCIF1: u1,
    -            ///  Channel 1 Half Transfer Complete flag
    -            HTIF1: u1,
    -            ///  Channel 1 Transfer Error flag
    -            TEIF1: u1,
    -            ///  Channel 2 Global interrupt flag
    -            GIF2: u1,
    -            ///  Channel 2 Transfer Complete flag
    -            TCIF2: u1,
    -            ///  Channel 2 Half Transfer Complete flag
    -            HTIF2: u1,
    -            ///  Channel 2 Transfer Error flag
    -            TEIF2: u1,
    -            ///  Channel 3 Global interrupt flag
    -            GIF3: u1,
    -            ///  Channel 3 Transfer Complete flag
    -            TCIF3: u1,
    -            ///  Channel 3 Half Transfer Complete flag
    -            HTIF3: u1,
    -            ///  Channel 3 Transfer Error flag
    -            TEIF3: u1,
    -            ///  Channel 4 Global interrupt flag
    -            GIF4: u1,
    -            ///  Channel 4 Transfer Complete flag
    -            TCIF4: u1,
    -            ///  Channel 4 Half Transfer Complete flag
    -            HTIF4: u1,
    -            ///  Channel 4 Transfer Error flag
    -            TEIF4: u1,
    -            ///  Channel 5 Global interrupt flag
    -            GIF5: u1,
    -            ///  Channel 5 Transfer Complete flag
    -            TCIF5: u1,
    -            ///  Channel 5 Half Transfer Complete flag
    -            HTIF5: u1,
    -            ///  Channel 5 Transfer Error flag
    -            TEIF5: u1,
    -            ///  Channel 6 Global interrupt flag
    -            GIF6: u1,
    -            ///  Channel 6 Transfer Complete flag
    -            TCIF6: u1,
    -            ///  Channel 6 Half Transfer Complete flag
    -            HTIF6: u1,
    -            ///  Channel 6 Transfer Error flag
    -            TEIF6: u1,
    -            ///  Channel 7 Global interrupt flag
    -            GIF7: u1,
    -            ///  Channel 7 Transfer Complete flag
    -            TCIF7: u1,
    -            ///  Channel 7 Half Transfer Complete flag
    -            HTIF7: u1,
    -            ///  Channel 7 Transfer Error flag
    -            TEIF7: u1,
    -            padding: u4,
    -        }),
    -        ///  DMA interrupt flag clear register (DMA_IFCR)
    -        IFCR: mmio.Mmio(packed struct(u32) {
    -            ///  Channel 1 Global interrupt clear
    -            CGIF1: u1,
    -            ///  Channel 1 Transfer Complete clear
    -            CTCIF1: u1,
    -            ///  Channel 1 Half Transfer clear
    -            CHTIF1: u1,
    -            ///  Channel 1 Transfer Error clear
    -            CTEIF1: u1,
    -            ///  Channel 2 Global interrupt clear
    -            CGIF2: u1,
    -            ///  Channel 2 Transfer Complete clear
    -            CTCIF2: u1,
    -            ///  Channel 2 Half Transfer clear
    -            CHTIF2: u1,
    -            ///  Channel 2 Transfer Error clear
    -            CTEIF2: u1,
    -            ///  Channel 3 Global interrupt clear
    -            CGIF3: u1,
    -            ///  Channel 3 Transfer Complete clear
    -            CTCIF3: u1,
    -            ///  Channel 3 Half Transfer clear
    -            CHTIF3: u1,
    -            ///  Channel 3 Transfer Error clear
    -            CTEIF3: u1,
    -            ///  Channel 4 Global interrupt clear
    -            CGIF4: u1,
    -            ///  Channel 4 Transfer Complete clear
    -            CTCIF4: u1,
    -            ///  Channel 4 Half Transfer clear
    -            CHTIF4: u1,
    -            ///  Channel 4 Transfer Error clear
    -            CTEIF4: u1,
    -            ///  Channel 5 Global interrupt clear
    -            CGIF5: u1,
    -            ///  Channel 5 Transfer Complete clear
    -            CTCIF5: u1,
    -            ///  Channel 5 Half Transfer clear
    -            CHTIF5: u1,
    -            ///  Channel 5 Transfer Error clear
    -            CTEIF5: u1,
    -            ///  Channel 6 Global interrupt clear
    -            CGIF6: u1,
    -            ///  Channel 6 Transfer Complete clear
    -            CTCIF6: u1,
    -            ///  Channel 6 Half Transfer clear
    -            CHTIF6: u1,
    -            ///  Channel 6 Transfer Error clear
    -            CTEIF6: u1,
    -            ///  Channel 7 Global interrupt clear
    -            CGIF7: u1,
    -            ///  Channel 7 Transfer Complete clear
    -            CTCIF7: u1,
    -            ///  Channel 7 Half Transfer clear
    -            CHTIF7: u1,
    -            ///  Channel 7 Transfer Error clear
    -            CTEIF7: u1,
    -            padding: u4,
    -        }),
    -        ///  DMA channel configuration register (DMA_CCR)
    -        CCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Channel enable
    -            EN: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Half Transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Data transfer direction
    -            DIR: u1,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral size
    -            PSIZE: u2,
    -            ///  Memory size
    -            MSIZE: u2,
    -            ///  Channel Priority level
    -            PL: u2,
    -            ///  Memory to memory mode
    -            MEM2MEM: u1,
    -            padding: u17,
    -        }),
    -        ///  DMA channel 1 number of data register
    -        CNDTR1: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  DMA channel 1 peripheral address register
    -        CPAR1: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  DMA channel 1 memory address register
    -        CMAR1: mmio.Mmio(packed struct(u32) {
    -            ///  Memory address
    -            MA: u32,
    -        }),
    -        reserved28: [4]u8,
    -        ///  DMA channel configuration register (DMA_CCR)
    -        CCR2: mmio.Mmio(packed struct(u32) {
    -            ///  Channel enable
    -            EN: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Half Transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Data transfer direction
    -            DIR: u1,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral size
    -            PSIZE: u2,
    -            ///  Memory size
    -            MSIZE: u2,
    -            ///  Channel Priority level
    -            PL: u2,
    -            ///  Memory to memory mode
    -            MEM2MEM: u1,
    -            padding: u17,
    -        }),
    -        ///  DMA channel 2 number of data register
    -        CNDTR2: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  DMA channel 2 peripheral address register
    -        CPAR2: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  DMA channel 2 memory address register
    -        CMAR2: mmio.Mmio(packed struct(u32) {
    -            ///  Memory address
    -            MA: u32,
    -        }),
    -        reserved48: [4]u8,
    -        ///  DMA channel configuration register (DMA_CCR)
    -        CCR3: mmio.Mmio(packed struct(u32) {
    -            ///  Channel enable
    -            EN: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Half Transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Data transfer direction
    -            DIR: u1,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral size
    -            PSIZE: u2,
    -            ///  Memory size
    -            MSIZE: u2,
    -            ///  Channel Priority level
    -            PL: u2,
    -            ///  Memory to memory mode
    -            MEM2MEM: u1,
    -            padding: u17,
    -        }),
    -        ///  DMA channel 3 number of data register
    -        CNDTR3: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  DMA channel 3 peripheral address register
    -        CPAR3: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  DMA channel 3 memory address register
    -        CMAR3: mmio.Mmio(packed struct(u32) {
    -            ///  Memory address
    -            MA: u32,
    -        }),
    -        reserved68: [4]u8,
    -        ///  DMA channel configuration register (DMA_CCR)
    -        CCR4: mmio.Mmio(packed struct(u32) {
    -            ///  Channel enable
    -            EN: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Half Transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Data transfer direction
    -            DIR: u1,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral size
    -            PSIZE: u2,
    -            ///  Memory size
    -            MSIZE: u2,
    -            ///  Channel Priority level
    -            PL: u2,
    -            ///  Memory to memory mode
    -            MEM2MEM: u1,
    -            padding: u17,
    -        }),
    -        ///  DMA channel 4 number of data register
    -        CNDTR4: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  DMA channel 4 peripheral address register
    -        CPAR4: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  DMA channel 4 memory address register
    -        CMAR4: mmio.Mmio(packed struct(u32) {
    -            ///  Memory address
    -            MA: u32,
    -        }),
    -        reserved88: [4]u8,
    -        ///  DMA channel configuration register (DMA_CCR)
    -        CCR5: mmio.Mmio(packed struct(u32) {
    -            ///  Channel enable
    -            EN: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Half Transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Data transfer direction
    -            DIR: u1,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral size
    -            PSIZE: u2,
    -            ///  Memory size
    -            MSIZE: u2,
    -            ///  Channel Priority level
    -            PL: u2,
    -            ///  Memory to memory mode
    -            MEM2MEM: u1,
    -            padding: u17,
    -        }),
    -        ///  DMA channel 5 number of data register
    -        CNDTR5: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  DMA channel 5 peripheral address register
    -        CPAR5: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  DMA channel 5 memory address register
    -        CMAR5: mmio.Mmio(packed struct(u32) {
    -            ///  Memory address
    -            MA: u32,
    -        }),
    -        reserved108: [4]u8,
    -        ///  DMA channel configuration register (DMA_CCR)
    -        CCR6: mmio.Mmio(packed struct(u32) {
    -            ///  Channel enable
    -            EN: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Half Transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Data transfer direction
    -            DIR: u1,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral size
    -            PSIZE: u2,
    -            ///  Memory size
    -            MSIZE: u2,
    -            ///  Channel Priority level
    -            PL: u2,
    -            ///  Memory to memory mode
    -            MEM2MEM: u1,
    -            padding: u17,
    -        }),
    -        ///  DMA channel 6 number of data register
    -        CNDTR6: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  DMA channel 6 peripheral address register
    -        CPAR6: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  DMA channel 6 memory address register
    -        CMAR6: mmio.Mmio(packed struct(u32) {
    -            ///  Memory address
    -            MA: u32,
    -        }),
    -        reserved128: [4]u8,
    -        ///  DMA channel configuration register (DMA_CCR)
    -        CCR7: mmio.Mmio(packed struct(u32) {
    -            ///  Channel enable
    -            EN: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Half Transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Data transfer direction
    -            DIR: u1,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral size
    -            PSIZE: u2,
    -            ///  Memory size
    -            MSIZE: u2,
    -            ///  Channel Priority level
    -            PL: u2,
    -            ///  Memory to memory mode
    -            MEM2MEM: u1,
    -            padding: u17,
    -        }),
    -        ///  DMA channel 7 number of data register
    -        CNDTR7: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  DMA channel 7 peripheral address register
    -        CPAR7: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  DMA channel 7 memory address register
    -        CMAR7: mmio.Mmio(packed struct(u32) {
    -            ///  Memory address
    -            MA: u32,
    -        }),
    -    };
    -
    -    ///  Floting point unit
    -    pub const FPU = extern struct {
    -        ///  Floating-point context control register
    -        FPCCR: mmio.Mmio(packed struct(u32) {
    -            ///  LSPACT
    -            LSPACT: u1,
    -            ///  USER
    -            USER: u1,
    -            reserved3: u1,
    -            ///  THREAD
    -            THREAD: u1,
    -            ///  HFRDY
    -            HFRDY: u1,
    -            ///  MMRDY
    -            MMRDY: u1,
    -            ///  BFRDY
    -            BFRDY: u1,
    -            reserved8: u1,
    -            ///  MONRDY
    -            MONRDY: u1,
    -            reserved30: u21,
    -            ///  LSPEN
    -            LSPEN: u1,
    -            ///  ASPEN
    -            ASPEN: u1,
    -        }),
    -        ///  Floating-point context address register
    -        FPCAR: mmio.Mmio(packed struct(u32) {
    -            reserved3: u3,
    -            ///  Location of unpopulated floating-point
    -            ADDRESS: u29,
    -        }),
    -        ///  Floating-point status control register
    -        FPSCR: mmio.Mmio(packed struct(u32) {
    -            ///  Invalid operation cumulative exception bit
    -            IOC: u1,
    -            ///  Division by zero cumulative exception bit.
    -            DZC: u1,
    -            ///  Overflow cumulative exception bit
    -            OFC: u1,
    -            ///  Underflow cumulative exception bit
    -            UFC: u1,
    -            ///  Inexact cumulative exception bit
    -            IXC: u1,
    -            reserved7: u2,
    -            ///  Input denormal cumulative exception bit.
    -            IDC: u1,
    -            reserved22: u14,
    -            ///  Rounding Mode control field
    -            RMode: u2,
    -            ///  Flush-to-zero mode control bit:
    -            FZ: u1,
    -            ///  Default NaN mode control bit
    -            DN: u1,
    -            ///  Alternative half-precision control bit
    -            AHP: u1,
    -            reserved28: u1,
    -            ///  Overflow condition code flag
    -            V: u1,
    -            ///  Carry condition code flag
    -            C: u1,
    -            ///  Zero condition code flag
    -            Z: u1,
    -            ///  Negative condition code flag
    -            N: u1,
    -        }),
    -    };
    -
    -    ///  General purpose timer
    -    pub const TIM2 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            ///  One-pulse mode
    -            OPM: u1,
    -            ///  Direction
    -            DIR: u1,
    -            ///  Center-aligned mode selection
    -            CMS: u2,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            ///  Clock division
    -            CKD: u2,
    -            reserved11: u1,
    -            ///  UIF status bit remapping
    -            UIFREMAP: u1,
    -            padding: u20,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            reserved3: u3,
    -            ///  Capture/compare DMA selection
    -            CCDS: u1,
    -            ///  Master mode selection
    -            MMS: u3,
    -            ///  TI1 selection
    -            TI1S: u1,
    -            padding: u24,
    -        }),
    -        ///  slave mode control register
    -        SMCR: mmio.Mmio(packed struct(u32) {
    -            ///  Slave mode selection
    -            SMS: u3,
    -            ///  OCREF clear selection
    -            OCCS: u1,
    -            ///  Trigger selection
    -            TS: u3,
    -            ///  Master/Slave mode
    -            MSM: u1,
    -            ///  External trigger filter
    -            ETF: u4,
    -            ///  External trigger prescaler
    -            ETPS: u2,
    -            ///  External clock enable
    -            ECE: u1,
    -            ///  External trigger polarity
    -            ETP: u1,
    -            ///  Slave mode selection bit3
    -            SMS_3: u1,
    -            padding: u15,
    -        }),
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            ///  Capture/Compare 1 interrupt enable
    -            CC1IE: u1,
    -            ///  Capture/Compare 2 interrupt enable
    -            CC2IE: u1,
    -            ///  Capture/Compare 3 interrupt enable
    -            CC3IE: u1,
    -            ///  Capture/Compare 4 interrupt enable
    -            CC4IE: u1,
    -            reserved6: u1,
    -            ///  Trigger interrupt enable
    -            TIE: u1,
    -            reserved8: u1,
    -            ///  Update DMA request enable
    -            UDE: u1,
    -            ///  Capture/Compare 1 DMA request enable
    -            CC1DE: u1,
    -            ///  Capture/Compare 2 DMA request enable
    -            CC2DE: u1,
    -            ///  Capture/Compare 3 DMA request enable
    -            CC3DE: u1,
    -            ///  Capture/Compare 4 DMA request enable
    -            CC4DE: u1,
    -            reserved14: u1,
    -            ///  Trigger DMA request enable
    -            TDE: u1,
    -            padding: u17,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            ///  Capture/compare 1 interrupt flag
    -            CC1IF: u1,
    -            ///  Capture/Compare 2 interrupt flag
    -            CC2IF: u1,
    -            ///  Capture/Compare 3 interrupt flag
    -            CC3IF: u1,
    -            ///  Capture/Compare 4 interrupt flag
    -            CC4IF: u1,
    -            reserved6: u1,
    -            ///  Trigger interrupt flag
    -            TIF: u1,
    -            reserved9: u2,
    -            ///  Capture/Compare 1 overcapture flag
    -            CC1OF: u1,
    -            ///  Capture/compare 2 overcapture flag
    -            CC2OF: u1,
    -            ///  Capture/Compare 3 overcapture flag
    -            CC3OF: u1,
    -            ///  Capture/Compare 4 overcapture flag
    -            CC4OF: u1,
    -            padding: u19,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            ///  Capture/compare 1 generation
    -            CC1G: u1,
    -            ///  Capture/compare 2 generation
    -            CC2G: u1,
    -            ///  Capture/compare 3 generation
    -            CC3G: u1,
    -            ///  Capture/compare 4 generation
    -            CC4G: u1,
    -            reserved6: u1,
    -            ///  Trigger generation
    -            TG: u1,
    -            padding: u25,
    -        }),
    -        ///  capture/compare mode register 1 (output mode)
    -        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 selection
    -            CC1S: u2,
    -            ///  Output compare 1 fast enable
    -            OC1FE: u1,
    -            ///  Output compare 1 preload enable
    -            OC1PE: u1,
    -            ///  Output compare 1 mode
    -            OC1M: u3,
    -            ///  Output compare 1 clear enable
    -            OC1CE: u1,
    -            ///  Capture/Compare 2 selection
    -            CC2S: u2,
    -            ///  Output compare 2 fast enable
    -            OC2FE: u1,
    -            ///  Output compare 2 preload enable
    -            OC2PE: u1,
    -            ///  Output compare 2 mode
    -            OC2M: u3,
    -            ///  Output compare 2 clear enable
    -            OC2CE: u1,
    -            ///  Output compare 1 mode bit 3
    -            OC1M_3: u1,
    -            reserved24: u7,
    -            ///  Output compare 2 mode bit 3
    -            OC2M_3: u1,
    -            padding: u7,
    -        }),
    -        ///  capture/compare mode register 2 (output mode)
    -        CCMR2_Output: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 3 selection
    -            CC3S: u2,
    -            ///  Output compare 3 fast enable
    -            OC3FE: u1,
    -            ///  Output compare 3 preload enable
    -            OC3PE: u1,
    -            ///  Output compare 3 mode
    -            OC3M: u3,
    -            ///  Output compare 3 clear enable
    -            OC3CE: u1,
    -            ///  Capture/Compare 4 selection
    -            CC4S: u2,
    -            ///  Output compare 4 fast enable
    -            OC4FE: u1,
    -            ///  Output compare 4 preload enable
    -            OC4PE: u1,
    -            ///  Output compare 4 mode
    -            OC4M: u3,
    -            ///  Output compare 4 clear enable
    -            O24CE: u1,
    -            ///  Output compare 3 mode bit3
    -            OC3M_3: u1,
    -            reserved24: u7,
    -            ///  Output compare 4 mode bit3
    -            OC4M_3: u1,
    -            padding: u7,
    -        }),
    -        ///  capture/compare enable register
    -        CCER: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 output enable
    -            CC1E: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1P: u1,
    -            reserved3: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1NP: u1,
    -            ///  Capture/Compare 2 output enable
    -            CC2E: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2P: u1,
    -            reserved7: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2NP: u1,
    -            ///  Capture/Compare 3 output enable
    -            CC3E: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC3P: u1,
    -            reserved11: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC3NP: u1,
    -            ///  Capture/Compare 4 output enable
    -            CC4E: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC4P: u1,
    -            reserved15: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC4NP: u1,
    -            padding: u16,
    -        }),
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  Low counter value
    -            CNTL: u16,
    -            ///  High counter value
    -            CNTH: u15,
    -            ///  if IUFREMAP=0 than CNT with read write access else UIFCPY with read only access
    -            CNT_or_UIFCPY: u1,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Low Auto-reload value
    -            ARRL: u16,
    -            ///  High Auto-reload value
    -            ARRH: u16,
    -        }),
    -        reserved52: [4]u8,
    -        ///  capture/compare register 1
    -        CCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare 1 value
    -            CCR1L: u16,
    -            ///  High Capture/Compare 1 value (on TIM2)
    -            CCR1H: u16,
    -        }),
    -        ///  capture/compare register 2
    -        CCR2: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare 2 value
    -            CCR2L: u16,
    -            ///  High Capture/Compare 2 value (on TIM2)
    -            CCR2H: u16,
    -        }),
    -        ///  capture/compare register 3
    -        CCR3: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare value
    -            CCR3L: u16,
    -            ///  High Capture/Compare value (on TIM2)
    -            CCR3H: u16,
    -        }),
    -        ///  capture/compare register 4
    -        CCR4: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare value
    -            CCR4L: u16,
    -            ///  High Capture/Compare value (on TIM2)
    -            CCR4H: u16,
    -        }),
    -        reserved72: [4]u8,
    -        ///  DMA control register
    -        DCR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA base address
    -            DBA: u5,
    -            reserved8: u3,
    -            ///  DMA burst length
    -            DBL: u5,
    -            padding: u19,
    -        }),
    -        ///  DMA address for full transfer
    -        DMAR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA register for burst accesses
    -            DMAB: u16,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  Nested Vectored Interrupt Controller
    -    pub const NVIC = extern struct {
    -        ///  Interrupt Set-Enable Register
    -        ISER0: mmio.Mmio(packed struct(u32) {
    -            ///  SETENA
    -            SETENA: u32,
    -        }),
    -        ///  Interrupt Set-Enable Register
    -        ISER1: mmio.Mmio(packed struct(u32) {
    -            ///  SETENA
    -            SETENA: u32,
    -        }),
    -        ///  Interrupt Set-Enable Register
    -        ISER2: mmio.Mmio(packed struct(u32) {
    -            ///  SETENA
    -            SETENA: u32,
    -        }),
    -        reserved128: [116]u8,
    -        ///  Interrupt Clear-Enable Register
    -        ICER0: mmio.Mmio(packed struct(u32) {
    -            ///  CLRENA
    -            CLRENA: u32,
    -        }),
    -        ///  Interrupt Clear-Enable Register
    -        ICER1: mmio.Mmio(packed struct(u32) {
    -            ///  CLRENA
    -            CLRENA: u32,
    -        }),
    -        ///  Interrupt Clear-Enable Register
    -        ICER2: mmio.Mmio(packed struct(u32) {
    -            ///  CLRENA
    -            CLRENA: u32,
    -        }),
    -        reserved256: [116]u8,
    -        ///  Interrupt Set-Pending Register
    -        ISPR0: mmio.Mmio(packed struct(u32) {
    -            ///  SETPEND
    -            SETPEND: u32,
    -        }),
    -        ///  Interrupt Set-Pending Register
    -        ISPR1: mmio.Mmio(packed struct(u32) {
    -            ///  SETPEND
    -            SETPEND: u32,
    -        }),
    -        ///  Interrupt Set-Pending Register
    -        ISPR2: mmio.Mmio(packed struct(u32) {
    -            ///  SETPEND
    -            SETPEND: u32,
    -        }),
    -        reserved384: [116]u8,
    -        ///  Interrupt Clear-Pending Register
    -        ICPR0: mmio.Mmio(packed struct(u32) {
    -            ///  CLRPEND
    -            CLRPEND: u32,
    -        }),
    -        ///  Interrupt Clear-Pending Register
    -        ICPR1: mmio.Mmio(packed struct(u32) {
    -            ///  CLRPEND
    -            CLRPEND: u32,
    -        }),
    -        ///  Interrupt Clear-Pending Register
    -        ICPR2: mmio.Mmio(packed struct(u32) {
    -            ///  CLRPEND
    -            CLRPEND: u32,
    -        }),
    -        reserved512: [116]u8,
    -        ///  Interrupt Active Bit Register
    -        IABR0: mmio.Mmio(packed struct(u32) {
    -            ///  ACTIVE
    -            ACTIVE: u32,
    -        }),
    -        ///  Interrupt Active Bit Register
    -        IABR1: mmio.Mmio(packed struct(u32) {
    -            ///  ACTIVE
    -            ACTIVE: u32,
    -        }),
    -        ///  Interrupt Active Bit Register
    -        IABR2: mmio.Mmio(packed struct(u32) {
    -            ///  ACTIVE
    -            ACTIVE: u32,
    -        }),
    -        reserved768: [244]u8,
    -        ///  Interrupt Priority Register
    -        IPR0: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR1: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR2: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR3: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR4: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR5: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR6: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR7: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR8: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR9: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR10: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR11: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR12: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR13: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR14: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR15: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR16: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR17: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR18: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR19: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR20: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -    };
    -
    -    ///  Flexible memory controller
    -    pub const FMC = extern struct {
    -        ///  SRAM/NOR-Flash chip-select control register 1
    -        BCR1: mmio.Mmio(packed struct(u32) {
    -            ///  MBKEN
    -            MBKEN: u1,
    -            ///  MUXEN
    -            MUXEN: u1,
    -            ///  MTYP
    -            MTYP: u2,
    -            ///  MWID
    -            MWID: u2,
    -            ///  FACCEN
    -            FACCEN: u1,
    -            reserved8: u1,
    -            ///  BURSTEN
    -            BURSTEN: u1,
    -            ///  WAITPOL
    -            WAITPOL: u1,
    -            reserved11: u1,
    -            ///  WAITCFG
    -            WAITCFG: u1,
    -            ///  WREN
    -            WREN: u1,
    -            ///  WAITEN
    -            WAITEN: u1,
    -            ///  EXTMOD
    -            EXTMOD: u1,
    -            ///  ASYNCWAIT
    -            ASYNCWAIT: u1,
    -            reserved19: u3,
    -            ///  CBURSTRW
    -            CBURSTRW: u1,
    -            ///  CCLKEN
    -            CCLKEN: u1,
    -            padding: u11,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select timing register 1
    -        BTR1: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            ///  BUSTURN
    -            BUSTURN: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select control register 2
    -        BCR2: mmio.Mmio(packed struct(u32) {
    -            ///  MBKEN
    -            MBKEN: u1,
    -            ///  MUXEN
    -            MUXEN: u1,
    -            ///  MTYP
    -            MTYP: u2,
    -            ///  MWID
    -            MWID: u2,
    -            ///  FACCEN
    -            FACCEN: u1,
    -            reserved8: u1,
    -            ///  BURSTEN
    -            BURSTEN: u1,
    -            ///  WAITPOL
    -            WAITPOL: u1,
    -            ///  WRAPMOD
    -            WRAPMOD: u1,
    -            ///  WAITCFG
    -            WAITCFG: u1,
    -            ///  WREN
    -            WREN: u1,
    -            ///  WAITEN
    -            WAITEN: u1,
    -            ///  EXTMOD
    -            EXTMOD: u1,
    -            ///  ASYNCWAIT
    -            ASYNCWAIT: u1,
    -            reserved19: u3,
    -            ///  CBURSTRW
    -            CBURSTRW: u1,
    -            padding: u12,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select timing register 2
    -        BTR2: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            ///  BUSTURN
    -            BUSTURN: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select control register 3
    -        BCR3: mmio.Mmio(packed struct(u32) {
    -            ///  MBKEN
    -            MBKEN: u1,
    -            ///  MUXEN
    -            MUXEN: u1,
    -            ///  MTYP
    -            MTYP: u2,
    -            ///  MWID
    -            MWID: u2,
    -            ///  FACCEN
    -            FACCEN: u1,
    -            reserved8: u1,
    -            ///  BURSTEN
    -            BURSTEN: u1,
    -            ///  WAITPOL
    -            WAITPOL: u1,
    -            ///  WRAPMOD
    -            WRAPMOD: u1,
    -            ///  WAITCFG
    -            WAITCFG: u1,
    -            ///  WREN
    -            WREN: u1,
    -            ///  WAITEN
    -            WAITEN: u1,
    -            ///  EXTMOD
    -            EXTMOD: u1,
    -            ///  ASYNCWAIT
    -            ASYNCWAIT: u1,
    -            reserved19: u3,
    -            ///  CBURSTRW
    -            CBURSTRW: u1,
    -            padding: u12,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select timing register 3
    -        BTR3: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            ///  BUSTURN
    -            BUSTURN: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select control register 4
    -        BCR4: mmio.Mmio(packed struct(u32) {
    -            ///  MBKEN
    -            MBKEN: u1,
    -            ///  MUXEN
    -            MUXEN: u1,
    -            ///  MTYP
    -            MTYP: u2,
    -            ///  MWID
    -            MWID: u2,
    -            ///  FACCEN
    -            FACCEN: u1,
    -            reserved8: u1,
    -            ///  BURSTEN
    -            BURSTEN: u1,
    -            ///  WAITPOL
    -            WAITPOL: u1,
    -            ///  WRAPMOD
    -            WRAPMOD: u1,
    -            ///  WAITCFG
    -            WAITCFG: u1,
    -            ///  WREN
    -            WREN: u1,
    -            ///  WAITEN
    -            WAITEN: u1,
    -            ///  EXTMOD
    -            EXTMOD: u1,
    -            ///  ASYNCWAIT
    -            ASYNCWAIT: u1,
    -            reserved19: u3,
    -            ///  CBURSTRW
    -            CBURSTRW: u1,
    -            padding: u12,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select timing register 4
    -        BTR4: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            ///  BUSTURN
    -            BUSTURN: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -        reserved96: [64]u8,
    -        ///  PC Card/NAND Flash control register 2
    -        PCR2: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  PWAITEN
    -            PWAITEN: u1,
    -            ///  PBKEN
    -            PBKEN: u1,
    -            ///  PTYP
    -            PTYP: u1,
    -            ///  PWID
    -            PWID: u2,
    -            ///  ECCEN
    -            ECCEN: u1,
    -            reserved9: u2,
    -            ///  TCLR
    -            TCLR: u4,
    -            ///  TAR
    -            TAR: u4,
    -            ///  ECCPS
    -            ECCPS: u3,
    -            padding: u12,
    -        }),
    -        ///  FIFO status and interrupt register 2
    -        SR2: mmio.Mmio(packed struct(u32) {
    -            ///  IRS
    -            IRS: u1,
    -            ///  ILS
    -            ILS: u1,
    -            ///  IFS
    -            IFS: u1,
    -            ///  IREN
    -            IREN: u1,
    -            ///  ILEN
    -            ILEN: u1,
    -            ///  IFEN
    -            IFEN: u1,
    -            ///  FEMPT
    -            FEMPT: u1,
    -            padding: u25,
    -        }),
    -        ///  Common memory space timing register 2
    -        PMEM2: mmio.Mmio(packed struct(u32) {
    -            ///  MEMSETx
    -            MEMSETx: u8,
    -            ///  MEMWAITx
    -            MEMWAITx: u8,
    -            ///  MEMHOLDx
    -            MEMHOLDx: u8,
    -            ///  MEMHIZx
    -            MEMHIZx: u8,
    -        }),
    -        ///  Attribute memory space timing register 2
    -        PATT2: mmio.Mmio(packed struct(u32) {
    -            ///  ATTSETx
    -            ATTSETx: u8,
    -            ///  ATTWAITx
    -            ATTWAITx: u8,
    -            ///  ATTHOLDx
    -            ATTHOLDx: u8,
    -            ///  ATTHIZx
    -            ATTHIZx: u8,
    -        }),
    -        reserved116: [4]u8,
    -        ///  ECC result register 2
    -        ECCR2: mmio.Mmio(packed struct(u32) {
    -            ///  ECCx
    -            ECCx: u32,
    -        }),
    -        reserved128: [8]u8,
    -        ///  PC Card/NAND Flash control register 3
    -        PCR3: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  PWAITEN
    -            PWAITEN: u1,
    -            ///  PBKEN
    -            PBKEN: u1,
    -            ///  PTYP
    -            PTYP: u1,
    -            ///  PWID
    -            PWID: u2,
    -            ///  ECCEN
    -            ECCEN: u1,
    -            reserved9: u2,
    -            ///  TCLR
    -            TCLR: u4,
    -            ///  TAR
    -            TAR: u4,
    -            ///  ECCPS
    -            ECCPS: u3,
    -            padding: u12,
    -        }),
    -        ///  FIFO status and interrupt register 3
    -        SR3: mmio.Mmio(packed struct(u32) {
    -            ///  IRS
    -            IRS: u1,
    -            ///  ILS
    -            ILS: u1,
    -            ///  IFS
    -            IFS: u1,
    -            ///  IREN
    -            IREN: u1,
    -            ///  ILEN
    -            ILEN: u1,
    -            ///  IFEN
    -            IFEN: u1,
    -            ///  FEMPT
    -            FEMPT: u1,
    -            padding: u25,
    -        }),
    -        ///  Common memory space timing register 3
    -        PMEM3: mmio.Mmio(packed struct(u32) {
    -            ///  MEMSETx
    -            MEMSETx: u8,
    -            ///  MEMWAITx
    -            MEMWAITx: u8,
    -            ///  MEMHOLDx
    -            MEMHOLDx: u8,
    -            ///  MEMHIZx
    -            MEMHIZx: u8,
    -        }),
    -        ///  Attribute memory space timing register 3
    -        PATT3: mmio.Mmio(packed struct(u32) {
    -            ///  ATTSETx
    -            ATTSETx: u8,
    -            ///  ATTWAITx
    -            ATTWAITx: u8,
    -            ///  ATTHOLDx
    -            ATTHOLDx: u8,
    -            ///  ATTHIZx
    -            ATTHIZx: u8,
    -        }),
    -        reserved148: [4]u8,
    -        ///  ECC result register 3
    -        ECCR3: mmio.Mmio(packed struct(u32) {
    -            ///  ECCx
    -            ECCx: u32,
    -        }),
    -        reserved160: [8]u8,
    -        ///  PC Card/NAND Flash control register 4
    -        PCR4: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  PWAITEN
    -            PWAITEN: u1,
    -            ///  PBKEN
    -            PBKEN: u1,
    -            ///  PTYP
    -            PTYP: u1,
    -            ///  PWID
    -            PWID: u2,
    -            ///  ECCEN
    -            ECCEN: u1,
    -            reserved9: u2,
    -            ///  TCLR
    -            TCLR: u4,
    -            ///  TAR
    -            TAR: u4,
    -            ///  ECCPS
    -            ECCPS: u3,
    -            padding: u12,
    -        }),
    -        ///  FIFO status and interrupt register 4
    -        SR4: mmio.Mmio(packed struct(u32) {
    -            ///  IRS
    -            IRS: u1,
    -            ///  ILS
    -            ILS: u1,
    -            ///  IFS
    -            IFS: u1,
    -            ///  IREN
    -            IREN: u1,
    -            ///  ILEN
    -            ILEN: u1,
    -            ///  IFEN
    -            IFEN: u1,
    -            ///  FEMPT
    -            FEMPT: u1,
    -            padding: u25,
    -        }),
    -        ///  Common memory space timing register 4
    -        PMEM4: mmio.Mmio(packed struct(u32) {
    -            ///  MEMSETx
    -            MEMSETx: u8,
    -            ///  MEMWAITx
    -            MEMWAITx: u8,
    -            ///  MEMHOLDx
    -            MEMHOLDx: u8,
    -            ///  MEMHIZx
    -            MEMHIZx: u8,
    -        }),
    -        ///  Attribute memory space timing register 4
    -        PATT4: mmio.Mmio(packed struct(u32) {
    -            ///  ATTSETx
    -            ATTSETx: u8,
    -            ///  ATTWAITx
    -            ATTWAITx: u8,
    -            ///  ATTHOLDx
    -            ATTHOLDx: u8,
    -            ///  ATTHIZx
    -            ATTHIZx: u8,
    -        }),
    -        ///  I/O space timing register 4
    -        PIO4: mmio.Mmio(packed struct(u32) {
    -            ///  IOSETx
    -            IOSETx: u8,
    -            ///  IOWAITx
    -            IOWAITx: u8,
    -            ///  IOHOLDx
    -            IOHOLDx: u8,
    -            ///  IOHIZx
    -            IOHIZx: u8,
    -        }),
    -        reserved260: [80]u8,
    -        ///  SRAM/NOR-Flash write timing registers 1
    -        BWTR1: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            ///  Bus turnaround phase duration
    -            BUSTURN: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -        reserved268: [4]u8,
    -        ///  SRAM/NOR-Flash write timing registers 2
    -        BWTR2: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            ///  Bus turnaround phase duration
    -            BUSTURN: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -        reserved276: [4]u8,
    -        ///  SRAM/NOR-Flash write timing registers 3
    -        BWTR3: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            ///  Bus turnaround phase duration
    -            BUSTURN: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -        reserved284: [4]u8,
    -        ///  SRAM/NOR-Flash write timing registers 4
    -        BWTR4: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            ///  Bus turnaround phase duration
    -            BUSTURN: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -    };
    -
    -    ///  General purpose timers
    -    pub const TIM15 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            ///  One-pulse mode
    -            OPM: u1,
    -            reserved7: u3,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            ///  Clock division
    -            CKD: u2,
    -            reserved11: u1,
    -            ///  UIF status bit remapping
    -            UIFREMAP: u1,
    -            padding: u20,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/compare preloaded control
    -            CCPC: u1,
    -            reserved2: u1,
    -            ///  Capture/compare control update selection
    -            CCUS: u1,
    -            ///  Capture/compare DMA selection
    -            CCDS: u1,
    -            ///  Master mode selection
    -            MMS: u3,
    -            ///  TI1 selection
    -            TI1S: u1,
    -            ///  Output Idle state 1
    -            OIS1: u1,
    -            ///  Output Idle state 1
    -            OIS1N: u1,
    -            ///  Output Idle state 2
    -            OIS2: u1,
    -            padding: u21,
    -        }),
    -        ///  slave mode control register
    -        SMCR: mmio.Mmio(packed struct(u32) {
    -            ///  Slave mode selection
    -            SMS: u3,
    -            reserved4: u1,
    -            ///  Trigger selection
    -            TS: u3,
    -            ///  Master/Slave mode
    -            MSM: u1,
    -            reserved16: u8,
    -            ///  Slave mode selection bit 3
    -            SMS_3: u1,
    -            padding: u15,
    -        }),
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            ///  Capture/Compare 1 interrupt enable
    -            CC1IE: u1,
    -            ///  Capture/Compare 2 interrupt enable
    -            CC2IE: u1,
    -            reserved5: u2,
    -            ///  COM interrupt enable
    -            COMIE: u1,
    -            ///  Trigger interrupt enable
    -            TIE: u1,
    -            ///  Break interrupt enable
    -            BIE: u1,
    -            ///  Update DMA request enable
    -            UDE: u1,
    -            ///  Capture/Compare 1 DMA request enable
    -            CC1DE: u1,
    -            ///  Capture/Compare 2 DMA request enable
    -            CC2DE: u1,
    -            reserved13: u2,
    -            ///  COM DMA request enable
    -            COMDE: u1,
    -            ///  Trigger DMA request enable
    -            TDE: u1,
    -            padding: u17,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            ///  Capture/compare 1 interrupt flag
    -            CC1IF: u1,
    -            ///  Capture/Compare 2 interrupt flag
    -            CC2IF: u1,
    -            reserved5: u2,
    -            ///  COM interrupt flag
    -            COMIF: u1,
    -            ///  Trigger interrupt flag
    -            TIF: u1,
    -            ///  Break interrupt flag
    -            BIF: u1,
    -            reserved9: u1,
    -            ///  Capture/Compare 1 overcapture flag
    -            CC1OF: u1,
    -            ///  Capture/compare 2 overcapture flag
    -            CC2OF: u1,
    -            padding: u21,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            ///  Capture/compare 1 generation
    -            CC1G: u1,
    -            ///  Capture/compare 2 generation
    -            CC2G: u1,
    -            reserved5: u2,
    -            ///  Capture/Compare control update generation
    -            COMG: u1,
    -            ///  Trigger generation
    -            TG: u1,
    -            ///  Break generation
    -            BG: u1,
    -            padding: u24,
    -        }),
    -        ///  capture/compare mode register (output mode)
    -        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 selection
    -            CC1S: u2,
    -            ///  Output Compare 1 fast enable
    -            OC1FE: u1,
    -            ///  Output Compare 1 preload enable
    -            OC1PE: u1,
    -            ///  Output Compare 1 mode
    -            OC1M: u3,
    -            reserved8: u1,
    -            ///  Capture/Compare 2 selection
    -            CC2S: u2,
    -            ///  Output Compare 2 fast enable
    -            OC2FE: u1,
    -            ///  Output Compare 2 preload enable
    -            OC2PE: u1,
    -            ///  Output Compare 2 mode
    -            OC2M: u3,
    -            reserved16: u1,
    -            ///  Output Compare 1 mode bit 3
    -            OC1M_3: u1,
    -            reserved24: u7,
    -            ///  Output Compare 2 mode bit 3
    -            OC2M_3: u1,
    -            padding: u7,
    -        }),
    -        reserved32: [4]u8,
    -        ///  capture/compare enable register
    -        CCER: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 output enable
    -            CC1E: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1P: u1,
    -            ///  Capture/Compare 1 complementary output enable
    -            CC1NE: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1NP: u1,
    -            ///  Capture/Compare 2 output enable
    -            CC2E: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2P: u1,
    -            reserved7: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2NP: u1,
    -            padding: u24,
    -        }),
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  counter value
    -            CNT: u16,
    -            reserved31: u15,
    -            ///  UIF copy
    -            UIFCPY: u1,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Auto-reload value
    -            ARR: u16,
    -            padding: u16,
    -        }),
    -        ///  repetition counter register
    -        RCR: mmio.Mmio(packed struct(u32) {
    -            ///  Repetition counter value
    -            REP: u8,
    -            padding: u24,
    -        }),
    -        ///  capture/compare register 1
    -        CCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 value
    -            CCR1: u16,
    -            padding: u16,
    -        }),
    -        ///  capture/compare register 2
    -        CCR2: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 2 value
    -            CCR2: u16,
    -            padding: u16,
    -        }),
    -        reserved68: [8]u8,
    -        ///  break and dead-time register
    -        BDTR: mmio.Mmio(packed struct(u32) {
    -            ///  Dead-time generator setup
    -            DTG: u8,
    -            ///  Lock configuration
    -            LOCK: u2,
    -            ///  Off-state selection for Idle mode
    -            OSSI: u1,
    -            ///  Off-state selection for Run mode
    -            OSSR: u1,
    -            ///  Break enable
    -            BKE: u1,
    -            ///  Break polarity
    -            BKP: u1,
    -            ///  Automatic output enable
    -            AOE: u1,
    -            ///  Main output enable
    -            MOE: u1,
    -            ///  Break filter
    -            BKF: u4,
    -            padding: u12,
    -        }),
    -        ///  DMA control register
    -        DCR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA base address
    -            DBA: u5,
    -            reserved8: u3,
    -            ///  DMA burst length
    -            DBL: u5,
    -            padding: u19,
    -        }),
    -        ///  DMA address for full transfer
    -        DMAR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA register for burst accesses
    -            DMAB: u16,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  General-purpose-timers
    -    pub const TIM16 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            ///  One-pulse mode
    -            OPM: u1,
    -            reserved7: u3,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            ///  Clock division
    -            CKD: u2,
    -            reserved11: u1,
    -            ///  UIF status bit remapping
    -            UIFREMAP: u1,
    -            padding: u20,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/compare preloaded control
    -            CCPC: u1,
    -            reserved2: u1,
    -            ///  Capture/compare control update selection
    -            CCUS: u1,
    -            ///  Capture/compare DMA selection
    -            CCDS: u1,
    -            reserved8: u4,
    -            ///  Output Idle state 1
    -            OIS1: u1,
    -            ///  Output Idle state 1
    -            OIS1N: u1,
    -            padding: u22,
    -        }),
    -        reserved12: [4]u8,
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            ///  Capture/Compare 1 interrupt enable
    -            CC1IE: u1,
    -            reserved5: u3,
    -            ///  COM interrupt enable
    -            COMIE: u1,
    -            ///  Trigger interrupt enable
    -            TIE: u1,
    -            ///  Break interrupt enable
    -            BIE: u1,
    -            ///  Update DMA request enable
    -            UDE: u1,
    -            ///  Capture/Compare 1 DMA request enable
    -            CC1DE: u1,
    -            reserved13: u3,
    -            ///  COM DMA request enable
    -            COMDE: u1,
    -            ///  Trigger DMA request enable
    -            TDE: u1,
    -            padding: u17,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            ///  Capture/compare 1 interrupt flag
    -            CC1IF: u1,
    -            reserved5: u3,
    -            ///  COM interrupt flag
    -            COMIF: u1,
    -            ///  Trigger interrupt flag
    -            TIF: u1,
    -            ///  Break interrupt flag
    -            BIF: u1,
    -            reserved9: u1,
    -            ///  Capture/Compare 1 overcapture flag
    -            CC1OF: u1,
    -            padding: u22,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            ///  Capture/compare 1 generation
    -            CC1G: u1,
    -            reserved5: u3,
    -            ///  Capture/Compare control update generation
    -            COMG: u1,
    -            ///  Trigger generation
    -            TG: u1,
    -            ///  Break generation
    -            BG: u1,
    -            padding: u24,
    -        }),
    -        ///  capture/compare mode register (output mode)
    -        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 selection
    -            CC1S: u2,
    -            ///  Output Compare 1 fast enable
    -            OC1FE: u1,
    -            ///  Output Compare 1 preload enable
    -            OC1PE: u1,
    -            ///  Output Compare 1 mode
    -            OC1M: u3,
    -            reserved16: u9,
    -            ///  Output Compare 1 mode
    -            OC1M_3: u1,
    -            padding: u15,
    -        }),
    -        reserved32: [4]u8,
    -        ///  capture/compare enable register
    -        CCER: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 output enable
    -            CC1E: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1P: u1,
    -            ///  Capture/Compare 1 complementary output enable
    -            CC1NE: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1NP: u1,
    -            padding: u28,
    -        }),
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  counter value
    -            CNT: u16,
    -            reserved31: u15,
    -            ///  UIF Copy
    -            UIFCPY: u1,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Auto-reload value
    -            ARR: u16,
    -            padding: u16,
    -        }),
    -        ///  repetition counter register
    -        RCR: mmio.Mmio(packed struct(u32) {
    -            ///  Repetition counter value
    -            REP: u8,
    -            padding: u24,
    -        }),
    -        ///  capture/compare register 1
    -        CCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 value
    -            CCR1: u16,
    -            padding: u16,
    -        }),
    -        reserved68: [12]u8,
    -        ///  break and dead-time register
    -        BDTR: mmio.Mmio(packed struct(u32) {
    -            ///  Dead-time generator setup
    -            DTG: u8,
    -            ///  Lock configuration
    -            LOCK: u2,
    -            ///  Off-state selection for Idle mode
    -            OSSI: u1,
    -            ///  Off-state selection for Run mode
    -            OSSR: u1,
    -            ///  Break enable
    -            BKE: u1,
    -            ///  Break polarity
    -            BKP: u1,
    -            ///  Automatic output enable
    -            AOE: u1,
    -            ///  Main output enable
    -            MOE: u1,
    -            ///  Break filter
    -            BKF: u4,
    -            padding: u12,
    -        }),
    -        ///  DMA control register
    -        DCR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA base address
    -            DBA: u5,
    -            reserved8: u3,
    -            ///  DMA burst length
    -            DBL: u5,
    -            padding: u19,
    -        }),
    -        ///  DMA address for full transfer
    -        DMAR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA register for burst accesses
    -            DMAB: u16,
    -            padding: u16,
    -        }),
    -        ///  option register
    -        OR: u32,
    -    };
    -
    -    ///  General purpose timer
    -    pub const TIM17 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            ///  One-pulse mode
    -            OPM: u1,
    -            reserved7: u3,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            ///  Clock division
    -            CKD: u2,
    -            reserved11: u1,
    -            ///  UIF status bit remapping
    -            UIFREMAP: u1,
    -            padding: u20,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/compare preloaded control
    -            CCPC: u1,
    -            reserved2: u1,
    -            ///  Capture/compare control update selection
    -            CCUS: u1,
    -            ///  Capture/compare DMA selection
    -            CCDS: u1,
    -            reserved8: u4,
    -            ///  Output Idle state 1
    -            OIS1: u1,
    -            ///  Output Idle state 1
    -            OIS1N: u1,
    -            padding: u22,
    -        }),
    -        reserved12: [4]u8,
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            ///  Capture/Compare 1 interrupt enable
    -            CC1IE: u1,
    -            reserved5: u3,
    -            ///  COM interrupt enable
    -            COMIE: u1,
    -            ///  Trigger interrupt enable
    -            TIE: u1,
    -            ///  Break interrupt enable
    -            BIE: u1,
    -            ///  Update DMA request enable
    -            UDE: u1,
    -            ///  Capture/Compare 1 DMA request enable
    -            CC1DE: u1,
    -            reserved13: u3,
    -            ///  COM DMA request enable
    -            COMDE: u1,
    -            ///  Trigger DMA request enable
    -            TDE: u1,
    -            padding: u17,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            ///  Capture/compare 1 interrupt flag
    -            CC1IF: u1,
    -            reserved5: u3,
    -            ///  COM interrupt flag
    -            COMIF: u1,
    -            ///  Trigger interrupt flag
    -            TIF: u1,
    -            ///  Break interrupt flag
    -            BIF: u1,
    -            reserved9: u1,
    -            ///  Capture/Compare 1 overcapture flag
    -            CC1OF: u1,
    -            padding: u22,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            ///  Capture/compare 1 generation
    -            CC1G: u1,
    -            reserved5: u3,
    -            ///  Capture/Compare control update generation
    -            COMG: u1,
    -            ///  Trigger generation
    -            TG: u1,
    -            ///  Break generation
    -            BG: u1,
    -            padding: u24,
    -        }),
    -        ///  capture/compare mode register (output mode)
    -        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 selection
    -            CC1S: u2,
    -            ///  Output Compare 1 fast enable
    -            OC1FE: u1,
    -            ///  Output Compare 1 preload enable
    -            OC1PE: u1,
    -            ///  Output Compare 1 mode
    -            OC1M: u3,
    -            reserved16: u9,
    -            ///  Output Compare 1 mode
    -            OC1M_3: u1,
    -            padding: u15,
    -        }),
    -        reserved32: [4]u8,
    -        ///  capture/compare enable register
    -        CCER: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 output enable
    -            CC1E: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1P: u1,
    -            ///  Capture/Compare 1 complementary output enable
    -            CC1NE: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1NP: u1,
    -            padding: u28,
    -        }),
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  counter value
    -            CNT: u16,
    -            reserved31: u15,
    -            ///  UIF Copy
    -            UIFCPY: u1,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Auto-reload value
    -            ARR: u16,
    -            padding: u16,
    -        }),
    -        ///  repetition counter register
    -        RCR: mmio.Mmio(packed struct(u32) {
    -            ///  Repetition counter value
    -            REP: u8,
    -            padding: u24,
    -        }),
    -        ///  capture/compare register 1
    -        CCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 value
    -            CCR1: u16,
    -            padding: u16,
    -        }),
    -        reserved68: [12]u8,
    -        ///  break and dead-time register
    -        BDTR: mmio.Mmio(packed struct(u32) {
    -            ///  Dead-time generator setup
    -            DTG: u8,
    -            ///  Lock configuration
    -            LOCK: u2,
    -            ///  Off-state selection for Idle mode
    -            OSSI: u1,
    -            ///  Off-state selection for Run mode
    -            OSSR: u1,
    -            ///  Break enable
    -            BKE: u1,
    -            ///  Break polarity
    -            BKP: u1,
    -            ///  Automatic output enable
    -            AOE: u1,
    -            ///  Main output enable
    -            MOE: u1,
    -            ///  Break filter
    -            BKF: u4,
    -            padding: u12,
    -        }),
    -        ///  DMA control register
    -        DCR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA base address
    -            DBA: u5,
    -            reserved8: u3,
    -            ///  DMA burst length
    -            DBL: u5,
    -            padding: u19,
    -        }),
    -        ///  DMA address for full transfer
    -        DMAR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA register for burst accesses
    -            DMAB: u16,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  Universal synchronous asynchronous receiver transmitter
    -    pub const USART1 = extern struct {
    -        ///  Control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  USART enable
    -            UE: u1,
    -            ///  USART enable in Stop mode
    -            UESM: u1,
    -            ///  Receiver enable
    -            RE: u1,
    -            ///  Transmitter enable
    -            TE: u1,
    -            ///  IDLE interrupt enable
    -            IDLEIE: u1,
    -            ///  RXNE interrupt enable
    -            RXNEIE: u1,
    -            ///  Transmission complete interrupt enable
    -            TCIE: u1,
    -            ///  interrupt enable
    -            TXEIE: u1,
    -            ///  PE interrupt enable
    -            PEIE: u1,
    -            ///  Parity selection
    -            PS: u1,
    -            ///  Parity control enable
    -            PCE: u1,
    -            ///  Receiver wakeup method
    -            WAKE: u1,
    -            ///  Word length
    -            M: u1,
    -            ///  Mute mode enable
    -            MME: u1,
    -            ///  Character match interrupt enable
    -            CMIE: u1,
    -            ///  Oversampling mode
    -            OVER8: u1,
    -            ///  Driver Enable deassertion time
    -            DEDT: u5,
    -            ///  Driver Enable assertion time
    -            DEAT: u5,
    -            ///  Receiver timeout interrupt enable
    -            RTOIE: u1,
    -            ///  End of Block interrupt enable
    -            EOBIE: u1,
    -            padding: u4,
    -        }),
    -        ///  Control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            reserved4: u4,
    -            ///  7-bit Address Detection/4-bit Address Detection
    -            ADDM7: u1,
    -            ///  LIN break detection length
    -            LBDL: u1,
    -            ///  LIN break detection interrupt enable
    -            LBDIE: u1,
    -            reserved8: u1,
    -            ///  Last bit clock pulse
    -            LBCL: u1,
    -            ///  Clock phase
    -            CPHA: u1,
    -            ///  Clock polarity
    -            CPOL: u1,
    -            ///  Clock enable
    -            CLKEN: u1,
    -            ///  STOP bits
    -            STOP: u2,
    -            ///  LIN mode enable
    -            LINEN: u1,
    -            ///  Swap TX/RX pins
    -            SWAP: u1,
    -            ///  RX pin active level inversion
    -            RXINV: u1,
    -            ///  TX pin active level inversion
    -            TXINV: u1,
    -            ///  Binary data inversion
    -            DATAINV: u1,
    -            ///  Most significant bit first
    -            MSBFIRST: u1,
    -            ///  Auto baud rate enable
    -            ABREN: u1,
    -            ///  Auto baud rate mode
    -            ABRMOD: u2,
    -            ///  Receiver timeout enable
    -            RTOEN: u1,
    -            ///  Address of the USART node
    -            ADD0: u4,
    -            ///  Address of the USART node
    -            ADD4: u4,
    -        }),
    -        ///  Control register 3
    -        CR3: mmio.Mmio(packed struct(u32) {
    -            ///  Error interrupt enable
    -            EIE: u1,
    -            ///  IrDA mode enable
    -            IREN: u1,
    -            ///  IrDA low-power
    -            IRLP: u1,
    -            ///  Half-duplex selection
    -            HDSEL: u1,
    -            ///  Smartcard NACK enable
    -            NACK: u1,
    -            ///  Smartcard mode enable
    -            SCEN: u1,
    -            ///  DMA enable receiver
    -            DMAR: u1,
    -            ///  DMA enable transmitter
    -            DMAT: u1,
    -            ///  RTS enable
    -            RTSE: u1,
    -            ///  CTS enable
    -            CTSE: u1,
    -            ///  CTS interrupt enable
    -            CTSIE: u1,
    -            ///  One sample bit method enable
    -            ONEBIT: u1,
    -            ///  Overrun Disable
    -            OVRDIS: u1,
    -            ///  DMA Disable on Reception Error
    -            DDRE: u1,
    -            ///  Driver enable mode
    -            DEM: u1,
    -            ///  Driver enable polarity selection
    -            DEP: u1,
    -            reserved17: u1,
    -            ///  Smartcard auto-retry count
    -            SCARCNT: u3,
    -            ///  Wakeup from Stop mode interrupt flag selection
    -            WUS: u2,
    -            ///  Wakeup from Stop mode interrupt enable
    -            WUFIE: u1,
    -            padding: u9,
    -        }),
    -        ///  Baud rate register
    -        BRR: mmio.Mmio(packed struct(u32) {
    -            ///  fraction of USARTDIV
    -            DIV_Fraction: u4,
    -            ///  mantissa of USARTDIV
    -            DIV_Mantissa: u12,
    -            padding: u16,
    -        }),
    -        ///  Guard time and prescaler register
    -        GTPR: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u8,
    -            ///  Guard time value
    -            GT: u8,
    -            padding: u16,
    -        }),
    -        ///  Receiver timeout register
    -        RTOR: mmio.Mmio(packed struct(u32) {
    -            ///  Receiver timeout value
    -            RTO: u24,
    -            ///  Block Length
    -            BLEN: u8,
    -        }),
    -        ///  Request register
    -        RQR: mmio.Mmio(packed struct(u32) {
    -            ///  Auto baud rate request
    -            ABRRQ: u1,
    -            ///  Send break request
    -            SBKRQ: u1,
    -            ///  Mute mode request
    -            MMRQ: u1,
    -            ///  Receive data flush request
    -            RXFRQ: u1,
    -            ///  Transmit data flush request
    -            TXFRQ: u1,
    -            padding: u27,
    -        }),
    -        ///  Interrupt & status register
    -        ISR: mmio.Mmio(packed struct(u32) {
    -            ///  Parity error
    -            PE: u1,
    -            ///  Framing error
    -            FE: u1,
    -            ///  Noise detected flag
    -            NF: u1,
    -            ///  Overrun error
    -            ORE: u1,
    -            ///  Idle line detected
    -            IDLE: u1,
    -            ///  Read data register not empty
    -            RXNE: u1,
    -            ///  Transmission complete
    -            TC: u1,
    -            ///  Transmit data register empty
    -            TXE: u1,
    -            ///  LIN break detection flag
    -            LBDF: u1,
    -            ///  CTS interrupt flag
    -            CTSIF: u1,
    -            ///  CTS flag
    -            CTS: u1,
    -            ///  Receiver timeout
    -            RTOF: u1,
    -            ///  End of block flag
    -            EOBF: u1,
    -            reserved14: u1,
    -            ///  Auto baud rate error
    -            ABRE: u1,
    -            ///  Auto baud rate flag
    -            ABRF: u1,
    -            ///  Busy flag
    -            BUSY: u1,
    -            ///  character match flag
    -            CMF: u1,
    -            ///  Send break flag
    -            SBKF: u1,
    -            ///  Receiver wakeup from Mute mode
    -            RWU: u1,
    -            ///  Wakeup from Stop mode flag
    -            WUF: u1,
    -            ///  Transmit enable acknowledge flag
    -            TEACK: u1,
    -            ///  Receive enable acknowledge flag
    -            REACK: u1,
    -            padding: u9,
    -        }),
    -        ///  Interrupt flag clear register
    -        ICR: mmio.Mmio(packed struct(u32) {
    -            ///  Parity error clear flag
    -            PECF: u1,
    -            ///  Framing error clear flag
    -            FECF: u1,
    -            ///  Noise detected clear flag
    -            NCF: u1,
    -            ///  Overrun error clear flag
    -            ORECF: u1,
    -            ///  Idle line detected clear flag
    -            IDLECF: u1,
    -            reserved6: u1,
    -            ///  Transmission complete clear flag
    -            TCCF: u1,
    -            reserved8: u1,
    -            ///  LIN break detection clear flag
    -            LBDCF: u1,
    -            ///  CTS clear flag
    -            CTSCF: u1,
    -            reserved11: u1,
    -            ///  Receiver timeout clear flag
    -            RTOCF: u1,
    -            ///  End of timeout clear flag
    -            EOBCF: u1,
    -            reserved17: u4,
    -            ///  Character match clear flag
    -            CMCF: u1,
    -            reserved20: u2,
    -            ///  Wakeup from Stop mode clear flag
    -            WUCF: u1,
    -            padding: u11,
    -        }),
    -        ///  Receive data register
    -        RDR: mmio.Mmio(packed struct(u32) {
    -            ///  Receive data value
    -            RDR: u9,
    -            padding: u23,
    -        }),
    -        ///  Transmit data register
    -        TDR: mmio.Mmio(packed struct(u32) {
    -            ///  Transmit data value
    -            TDR: u9,
    -            padding: u23,
    -        }),
    -    };
    -
    -    ///  System configuration controller _Comparator and Operational amplifier
    -    pub const SYSCFG_COMP_OPAMP = extern struct {
    -        ///  configuration register 1
    -        SYSCFG_CFGR1: mmio.Mmio(packed struct(u32) {
    -            ///  Memory mapping selection bits
    -            MEM_MODE: u2,
    -            reserved5: u3,
    -            ///  USB interrupt remap
    -            USB_IT_RMP: u1,
    -            ///  Timer 1 ITR3 selection
    -            TIM1_ITR_RMP: u1,
    -            ///  DAC trigger remap (when TSEL = 001)
    -            DAC_TRIG_RMP: u1,
    -            ///  ADC24 DMA remapping bit
    -            ADC24_DMA_RMP: u1,
    -            reserved11: u2,
    -            ///  TIM16 DMA request remapping bit
    -            TIM16_DMA_RMP: u1,
    -            ///  TIM17 DMA request remapping bit
    -            TIM17_DMA_RMP: u1,
    -            ///  TIM6 and DAC1 DMA request remapping bit
    -            TIM6_DAC1_DMA_RMP: u1,
    -            ///  TIM7 and DAC2 DMA request remapping bit
    -            TIM7_DAC2_DMA_RMP: u1,
    -            reserved16: u1,
    -            ///  Fast Mode Plus (FM+) driving capability activation bits.
    -            I2C_PB6_FM: u1,
    -            ///  Fast Mode Plus (FM+) driving capability activation bits.
    -            I2C_PB7_FM: u1,
    -            ///  Fast Mode Plus (FM+) driving capability activation bits.
    -            I2C_PB8_FM: u1,
    -            ///  Fast Mode Plus (FM+) driving capability activation bits.
    -            I2C_PB9_FM: u1,
    -            ///  I2C1 Fast Mode Plus
    -            I2C1_FM: u1,
    -            ///  I2C2 Fast Mode Plus
    -            I2C2_FM: u1,
    -            ///  Encoder mode
    -            ENCODER_MODE: u2,
    -            reserved26: u2,
    -            ///  Interrupt enable bits from FPU
    -            FPU_IT: u6,
    -        }),
    -        ///  CCM SRAM protection register
    -        SYSCFG_RCR: mmio.Mmio(packed struct(u32) {
    -            ///  CCM SRAM page write protection bit
    -            PAGE0_WP: u1,
    -            ///  CCM SRAM page write protection bit
    -            PAGE1_WP: u1,
    -            ///  CCM SRAM page write protection bit
    -            PAGE2_WP: u1,
    -            ///  CCM SRAM page write protection bit
    -            PAGE3_WP: u1,
    -            ///  CCM SRAM page write protection bit
    -            PAGE4_WP: u1,
    -            ///  CCM SRAM page write protection bit
    -            PAGE5_WP: u1,
    -            ///  CCM SRAM page write protection bit
    -            PAGE6_WP: u1,
    -            ///  CCM SRAM page write protection bit
    -            PAGE7_WP: u1,
    -            padding: u24,
    -        }),
    -        ///  external interrupt configuration register 1
    -        SYSCFG_EXTICR1: mmio.Mmio(packed struct(u32) {
    -            ///  EXTI 0 configuration bits
    -            EXTI0: u4,
    -            ///  EXTI 1 configuration bits
    -            EXTI1: u4,
    -            ///  EXTI 2 configuration bits
    -            EXTI2: u4,
    -            ///  EXTI 3 configuration bits
    -            EXTI3: u4,
    -            padding: u16,
    -        }),
    -        ///  external interrupt configuration register 2
    -        SYSCFG_EXTICR2: mmio.Mmio(packed struct(u32) {
    -            ///  EXTI 4 configuration bits
    -            EXTI4: u4,
    -            ///  EXTI 5 configuration bits
    -            EXTI5: u4,
    -            ///  EXTI 6 configuration bits
    -            EXTI6: u4,
    -            ///  EXTI 7 configuration bits
    -            EXTI7: u4,
    -            padding: u16,
    -        }),
    -        ///  external interrupt configuration register 3
    -        SYSCFG_EXTICR3: mmio.Mmio(packed struct(u32) {
    -            ///  EXTI 8 configuration bits
    -            EXTI8: u4,
    -            ///  EXTI 9 configuration bits
    -            EXTI9: u4,
    -            ///  EXTI 10 configuration bits
    -            EXTI10: u4,
    -            ///  EXTI 11 configuration bits
    -            EXTI11: u4,
    -            padding: u16,
    -        }),
    -        ///  external interrupt configuration register 4
    -        SYSCFG_EXTICR4: mmio.Mmio(packed struct(u32) {
    -            ///  EXTI 12 configuration bits
    -            EXTI12: u4,
    -            ///  EXTI 13 configuration bits
    -            EXTI13: u4,
    -            ///  EXTI 14 configuration bits
    -            EXTI14: u4,
    -            ///  EXTI 15 configuration bits
    -            EXTI15: u4,
    -            padding: u16,
    -        }),
    -        ///  configuration register 2
    -        SYSCFG_CFGR2: mmio.Mmio(packed struct(u32) {
    -            ///  Cortex-M0 LOCKUP bit enable bit
    -            LOCUP_LOCK: u1,
    -            ///  SRAM parity lock bit
    -            SRAM_PARITY_LOCK: u1,
    -            ///  PVD lock enable bit
    -            PVD_LOCK: u1,
    -            reserved4: u1,
    -            ///  Bypass address bit 29 in parity calculation
    -            BYP_ADD_PAR: u1,
    -            reserved8: u3,
    -            ///  SRAM parity flag
    -            SRAM_PEF: u1,
    -            padding: u23,
    -        }),
    -        ///  control and status register
    -        COMP1_CSR: mmio.Mmio(packed struct(u32) {
    -            ///  Comparator 1 enable
    -            COMP1EN: u1,
    -            ///  COMP1_INP_DAC
    -            COMP1_INP_DAC: u1,
    -            ///  Comparator 1 mode
    -            COMP1MODE: u2,
    -            ///  Comparator 1 inverting input selection
    -            COMP1INSEL: u3,
    -            reserved10: u3,
    -            ///  Comparator 1 output selection
    -            COMP1_OUT_SEL: u4,
    -            reserved15: u1,
    -            ///  Comparator 1 output polarity
    -            COMP1POL: u1,
    -            ///  Comparator 1 hysteresis
    -            COMP1HYST: u2,
    -            ///  Comparator 1 blanking source
    -            COMP1_BLANKING: u3,
    -            reserved30: u9,
    -            ///  Comparator 1 output
    -            COMP1OUT: u1,
    -            ///  Comparator 1 lock
    -            COMP1LOCK: u1,
    -        }),
    -        ///  control and status register
    -        COMP2_CSR: mmio.Mmio(packed struct(u32) {
    -            ///  Comparator 2 enable
    -            COMP2EN: u1,
    -            reserved2: u1,
    -            ///  Comparator 2 mode
    -            COMP2MODE: u2,
    -            ///  Comparator 2 inverting input selection
    -            COMP2INSEL: u3,
    -            ///  Comparator 2 non inverted input selection
    -            COMP2INPSEL: u1,
    -            reserved9: u1,
    -            ///  Comparator 1inverting input selection
    -            COMP2INMSEL: u1,
    -            ///  Comparator 2 output selection
    -            COMP2_OUT_SEL: u4,
    -            reserved15: u1,
    -            ///  Comparator 2 output polarity
    -            COMP2POL: u1,
    -            ///  Comparator 2 hysteresis
    -            COMP2HYST: u2,
    -            ///  Comparator 2 blanking source
    -            COMP2_BLANKING: u3,
    -            reserved31: u10,
    -            ///  Comparator 2 lock
    -            COMP2LOCK: u1,
    -        }),
    -        ///  control and status register
    -        COMP3_CSR: mmio.Mmio(packed struct(u32) {
    -            ///  Comparator 3 enable
    -            COMP3EN: u1,
    -            reserved2: u1,
    -            ///  Comparator 3 mode
    -            COMP3MODE: u2,
    -            ///  Comparator 3 inverting input selection
    -            COMP3INSEL: u3,
    -            ///  Comparator 3 non inverted input selection
    -            COMP3INPSEL: u1,
    -            reserved10: u2,
    -            ///  Comparator 3 output selection
    -            COMP3_OUT_SEL: u4,
    -            reserved15: u1,
    -            ///  Comparator 3 output polarity
    -            COMP3POL: u1,
    -            ///  Comparator 3 hysteresis
    -            COMP3HYST: u2,
    -            ///  Comparator 3 blanking source
    -            COMP3_BLANKING: u3,
    -            reserved30: u9,
    -            ///  Comparator 3 output
    -            COMP3OUT: u1,
    -            ///  Comparator 3 lock
    -            COMP3LOCK: u1,
    -        }),
    -        ///  control and status register
    -        COMP4_CSR: mmio.Mmio(packed struct(u32) {
    -            ///  Comparator 4 enable
    -            COMP4EN: u1,
    -            reserved2: u1,
    -            ///  Comparator 4 mode
    -            COMP4MODE: u2,
    -            ///  Comparator 4 inverting input selection
    -            COMP4INSEL: u3,
    -            ///  Comparator 4 non inverted input selection
    -            COMP4INPSEL: u1,
    -            reserved9: u1,
    -            ///  Comparator 4 window mode
    -            COM4WINMODE: u1,
    -            ///  Comparator 4 output selection
    -            COMP4_OUT_SEL: u4,
    -            reserved15: u1,
    -            ///  Comparator 4 output polarity
    -            COMP4POL: u1,
    -            ///  Comparator 4 hysteresis
    -            COMP4HYST: u2,
    -            ///  Comparator 4 blanking source
    -            COMP4_BLANKING: u3,
    -            reserved30: u9,
    -            ///  Comparator 4 output
    -            COMP4OUT: u1,
    -            ///  Comparator 4 lock
    -            COMP4LOCK: u1,
    -        }),
    -        ///  control and status register
    -        COMP5_CSR: mmio.Mmio(packed struct(u32) {
    -            ///  Comparator 5 enable
    -            COMP5EN: u1,
    -            reserved2: u1,
    -            ///  Comparator 5 mode
    -            COMP5MODE: u2,
    -            ///  Comparator 5 inverting input selection
    -            COMP5INSEL: u3,
    -            ///  Comparator 5 non inverted input selection
    -            COMP5INPSEL: u1,
    -            reserved10: u2,
    -            ///  Comparator 5 output selection
    -            COMP5_OUT_SEL: u4,
    -            reserved15: u1,
    -            ///  Comparator 5 output polarity
    -            COMP5POL: u1,
    -            ///  Comparator 5 hysteresis
    -            COMP5HYST: u2,
    -            ///  Comparator 5 blanking source
    -            COMP5_BLANKING: u3,
    -            reserved30: u9,
    -            ///  Comparator51 output
    -            COMP5OUT: u1,
    -            ///  Comparator 5 lock
    -            COMP5LOCK: u1,
    -        }),
    -        ///  control and status register
    -        COMP6_CSR: mmio.Mmio(packed struct(u32) {
    -            ///  Comparator 6 enable
    -            COMP6EN: u1,
    -            reserved2: u1,
    -            ///  Comparator 6 mode
    -            COMP6MODE: u2,
    -            ///  Comparator 6 inverting input selection
    -            COMP6INSEL: u3,
    -            ///  Comparator 6 non inverted input selection
    -            COMP6INPSEL: u1,
    -            reserved9: u1,
    -            ///  Comparator 6 window mode
    -            COM6WINMODE: u1,
    -            ///  Comparator 6 output selection
    -            COMP6_OUT_SEL: u4,
    -            reserved15: u1,
    -            ///  Comparator 6 output polarity
    -            COMP6POL: u1,
    -            ///  Comparator 6 hysteresis
    -            COMP6HYST: u2,
    -            ///  Comparator 6 blanking source
    -            COMP6_BLANKING: u3,
    -            reserved30: u9,
    -            ///  Comparator 6 output
    -            COMP6OUT: u1,
    -            ///  Comparator 6 lock
    -            COMP6LOCK: u1,
    -        }),
    -        ///  control and status register
    -        COMP7_CSR: mmio.Mmio(packed struct(u32) {
    -            ///  Comparator 7 enable
    -            COMP7EN: u1,
    -            reserved2: u1,
    -            ///  Comparator 7 mode
    -            COMP7MODE: u2,
    -            ///  Comparator 7 inverting input selection
    -            COMP7INSEL: u3,
    -            ///  Comparator 7 non inverted input selection
    -            COMP7INPSEL: u1,
    -            reserved10: u2,
    -            ///  Comparator 7 output selection
    -            COMP7_OUT_SEL: u4,
    -            reserved15: u1,
    -            ///  Comparator 7 output polarity
    -            COMP7POL: u1,
    -            ///  Comparator 7 hysteresis
    -            COMP7HYST: u2,
    -            ///  Comparator 7 blanking source
    -            COMP7_BLANKING: u3,
    -            reserved30: u9,
    -            ///  Comparator 7 output
    -            COMP7OUT: u1,
    -            ///  Comparator 7 lock
    -            COMP7LOCK: u1,
    -        }),
    -        ///  control register
    -        OPAMP1_CSR: mmio.Mmio(packed struct(u32) {
    -            ///  OPAMP1 enable
    -            OPAMP1_EN: u1,
    -            ///  FORCE_VP
    -            FORCE_VP: u1,
    -            ///  OPAMP1 Non inverting input selection
    -            VP_SEL: u2,
    -            reserved5: u1,
    -            ///  OPAMP1 inverting input selection
    -            VM_SEL: u2,
    -            ///  Timer controlled Mux mode enable
    -            TCM_EN: u1,
    -            ///  OPAMP1 inverting input secondary selection
    -            VMS_SEL: u1,
    -            ///  OPAMP1 Non inverting input secondary selection
    -            VPS_SEL: u2,
    -            ///  Calibration mode enable
    -            CALON: u1,
    -            ///  Calibration selection
    -            CALSEL: u2,
    -            ///  Gain in PGA mode
    -            PGA_GAIN: u4,
    -            ///  User trimming enable
    -            USER_TRIM: u1,
    -            ///  Offset trimming value (PMOS)
    -            TRIMOFFSETP: u5,
    -            ///  Offset trimming value (NMOS)
    -            TRIMOFFSETN: u5,
    -            ///  TSTREF
    -            TSTREF: u1,
    -            ///  OPAMP 1 ouput status flag
    -            OUTCAL: u1,
    -            ///  OPAMP 1 lock
    -            LOCK: u1,
    -        }),
    -        ///  control register
    -        OPAMP2_CSR: mmio.Mmio(packed struct(u32) {
    -            ///  OPAMP2 enable
    -            OPAMP2EN: u1,
    -            ///  FORCE_VP
    -            FORCE_VP: u1,
    -            ///  OPAMP2 Non inverting input selection
    -            VP_SEL: u2,
    -            reserved5: u1,
    -            ///  OPAMP2 inverting input selection
    -            VM_SEL: u2,
    -            ///  Timer controlled Mux mode enable
    -            TCM_EN: u1,
    -            ///  OPAMP2 inverting input secondary selection
    -            VMS_SEL: u1,
    -            ///  OPAMP2 Non inverting input secondary selection
    -            VPS_SEL: u2,
    -            ///  Calibration mode enable
    -            CALON: u1,
    -            ///  Calibration selection
    -            CAL_SEL: u2,
    -            ///  Gain in PGA mode
    -            PGA_GAIN: u4,
    -            ///  User trimming enable
    -            USER_TRIM: u1,
    -            ///  Offset trimming value (PMOS)
    -            TRIMOFFSETP: u5,
    -            ///  Offset trimming value (NMOS)
    -            TRIMOFFSETN: u5,
    -            ///  TSTREF
    -            TSTREF: u1,
    -            ///  OPAMP 2 ouput status flag
    -            OUTCAL: u1,
    -            ///  OPAMP 2 lock
    -            LOCK: u1,
    -        }),
    -        ///  control register
    -        OPAMP3_CSR: mmio.Mmio(packed struct(u32) {
    -            ///  OPAMP3 enable
    -            OPAMP3EN: u1,
    -            ///  FORCE_VP
    -            FORCE_VP: u1,
    -            ///  OPAMP3 Non inverting input selection
    -            VP_SEL: u2,
    -            reserved5: u1,
    -            ///  OPAMP3 inverting input selection
    -            VM_SEL: u2,
    -            ///  Timer controlled Mux mode enable
    -            TCM_EN: u1,
    -            ///  OPAMP3 inverting input secondary selection
    -            VMS_SEL: u1,
    -            ///  OPAMP3 Non inverting input secondary selection
    -            VPS_SEL: u2,
    -            ///  Calibration mode enable
    -            CALON: u1,
    -            ///  Calibration selection
    -            CALSEL: u2,
    -            ///  Gain in PGA mode
    -            PGA_GAIN: u4,
    -            ///  User trimming enable
    -            USER_TRIM: u1,
    -            ///  Offset trimming value (PMOS)
    -            TRIMOFFSETP: u5,
    -            ///  Offset trimming value (NMOS)
    -            TRIMOFFSETN: u5,
    -            ///  TSTREF
    -            TSTREF: u1,
    -            ///  OPAMP 3 ouput status flag
    -            OUTCAL: u1,
    -            ///  OPAMP 3 lock
    -            LOCK: u1,
    -        }),
    -        ///  control register
    -        OPAMP4_CSR: mmio.Mmio(packed struct(u32) {
    -            ///  OPAMP4 enable
    -            OPAMP4EN: u1,
    -            ///  FORCE_VP
    -            FORCE_VP: u1,
    -            ///  OPAMP4 Non inverting input selection
    -            VP_SEL: u2,
    -            reserved5: u1,
    -            ///  OPAMP4 inverting input selection
    -            VM_SEL: u2,
    -            ///  Timer controlled Mux mode enable
    -            TCM_EN: u1,
    -            ///  OPAMP4 inverting input secondary selection
    -            VMS_SEL: u1,
    -            ///  OPAMP4 Non inverting input secondary selection
    -            VPS_SEL: u2,
    -            ///  Calibration mode enable
    -            CALON: u1,
    -            ///  Calibration selection
    -            CALSEL: u2,
    -            ///  Gain in PGA mode
    -            PGA_GAIN: u4,
    -            ///  User trimming enable
    -            USER_TRIM: u1,
    -            ///  Offset trimming value (PMOS)
    -            TRIMOFFSETP: u5,
    -            ///  Offset trimming value (NMOS)
    -            TRIMOFFSETN: u5,
    -            ///  TSTREF
    -            TSTREF: u1,
    -            ///  OPAMP 4 ouput status flag
    -            OUTCAL: u1,
    -            ///  OPAMP 4 lock
    -            LOCK: u1,
    -        }),
    -    };
    -
    -    ///  Independent watchdog
    -    pub const IWDG = extern struct {
    -        ///  Key register
    -        KR: mmio.Mmio(packed struct(u32) {
    -            ///  Key value
    -            KEY: u16,
    -            padding: u16,
    -        }),
    -        ///  Prescaler register
    -        PR: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler divider
    -            PR: u3,
    -            padding: u29,
    -        }),
    -        ///  Reload register
    -        RLR: mmio.Mmio(packed struct(u32) {
    -            ///  Watchdog counter reload value
    -            RL: u12,
    -            padding: u20,
    -        }),
    -        ///  Status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Watchdog prescaler value update
    -            PVU: u1,
    -            ///  Watchdog counter reload value update
    -            RVU: u1,
    -            ///  Watchdog counter window value update
    -            WVU: u1,
    -            padding: u29,
    -        }),
    -        ///  Window register
    -        WINR: mmio.Mmio(packed struct(u32) {
    -            ///  Watchdog counter window value
    -            WIN: u12,
    -            padding: u20,
    -        }),
    -    };
    -
    -    ///  Analog-to-Digital Converter
    -    pub const ADC1_2 = extern struct {
    -        ///  ADC Common status register
    -        CSR: mmio.Mmio(packed struct(u32) {
    -            ///  ADDRDY_MST
    -            ADDRDY_MST: u1,
    -            ///  EOSMP_MST
    -            EOSMP_MST: u1,
    -            ///  EOC_MST
    -            EOC_MST: u1,
    -            ///  EOS_MST
    -            EOS_MST: u1,
    -            ///  OVR_MST
    -            OVR_MST: u1,
    -            ///  JEOC_MST
    -            JEOC_MST: u1,
    -            ///  JEOS_MST
    -            JEOS_MST: u1,
    -            ///  AWD1_MST
    -            AWD1_MST: u1,
    -            ///  AWD2_MST
    -            AWD2_MST: u1,
    -            ///  AWD3_MST
    -            AWD3_MST: u1,
    -            ///  JQOVF_MST
    -            JQOVF_MST: u1,
    -            reserved16: u5,
    -            ///  ADRDY_SLV
    -            ADRDY_SLV: u1,
    -            ///  EOSMP_SLV
    -            EOSMP_SLV: u1,
    -            ///  End of regular conversion of the slave ADC
    -            EOC_SLV: u1,
    -            ///  End of regular sequence flag of the slave ADC
    -            EOS_SLV: u1,
    -            ///  Overrun flag of the slave ADC
    -            OVR_SLV: u1,
    -            ///  End of injected conversion flag of the slave ADC
    -            JEOC_SLV: u1,
    -            ///  End of injected sequence flag of the slave ADC
    -            JEOS_SLV: u1,
    -            ///  Analog watchdog 1 flag of the slave ADC
    -            AWD1_SLV: u1,
    -            ///  Analog watchdog 2 flag of the slave ADC
    -            AWD2_SLV: u1,
    -            ///  Analog watchdog 3 flag of the slave ADC
    -            AWD3_SLV: u1,
    -            ///  Injected Context Queue Overflow flag of the slave ADC
    -            JQOVF_SLV: u1,
    -            padding: u5,
    -        }),
    -        reserved8: [4]u8,
    -        ///  ADC common control register
    -        CCR: mmio.Mmio(packed struct(u32) {
    -            ///  Multi ADC mode selection
    -            MULT: u5,
    -            reserved8: u3,
    -            ///  Delay between 2 sampling phases
    -            DELAY: u4,
    -            reserved13: u1,
    -            ///  DMA configuration (for multi-ADC mode)
    -            DMACFG: u1,
    -            ///  Direct memory access mode for multi ADC mode
    -            MDMA: u2,
    -            ///  ADC clock mode
    -            CKMODE: u2,
    -            reserved22: u4,
    -            ///  VREFINT enable
    -            VREFEN: u1,
    -            ///  Temperature sensor enable
    -            TSEN: u1,
    -            ///  VBAT enable
    -            VBATEN: u1,
    -            padding: u7,
    -        }),
    -        ///  ADC common regular data register for dual and triple modes
    -        CDR: mmio.Mmio(packed struct(u32) {
    -            ///  Regular data of the master ADC
    -            RDATA_MST: u16,
    -            ///  Regular data of the slave ADC
    -            RDATA_SLV: u16,
    -        }),
    -    };
    -
    -    ///  Window watchdog
    -    pub const WWDG = extern struct {
    -        ///  Control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  7-bit counter
    -            T: u7,
    -            ///  Activation bit
    -            WDGA: u1,
    -            padding: u24,
    -        }),
    -        ///  Configuration register
    -        CFR: mmio.Mmio(packed struct(u32) {
    -            ///  7-bit window value
    -            W: u7,
    -            ///  Timer base
    -            WDGTB: u2,
    -            ///  Early wakeup interrupt
    -            EWI: u1,
    -            padding: u22,
    -        }),
    -        ///  Status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Early wakeup interrupt flag
    -            EWIF: u1,
    -            padding: u31,
    -        }),
    -    };
    -
    -    ///  Serial peripheral interface/Inter-IC sound
    -    pub const SPI1 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Clock phase
    -            CPHA: u1,
    -            ///  Clock polarity
    -            CPOL: u1,
    -            ///  Master selection
    -            MSTR: u1,
    -            ///  Baud rate control
    -            BR: u3,
    -            ///  SPI enable
    -            SPE: u1,
    -            ///  Frame format
    -            LSBFIRST: u1,
    -            ///  Internal slave select
    -            SSI: u1,
    -            ///  Software slave management
    -            SSM: u1,
    -            ///  Receive only
    -            RXONLY: u1,
    -            ///  CRC length
    -            CRCL: u1,
    -            ///  CRC transfer next
    -            CRCNEXT: u1,
    -            ///  Hardware CRC calculation enable
    -            CRCEN: u1,
    -            ///  Output enable in bidirectional mode
    -            BIDIOE: u1,
    -            ///  Bidirectional data mode enable
    -            BIDIMODE: u1,
    -            padding: u16,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            ///  Rx buffer DMA enable
    -            RXDMAEN: u1,
    -            ///  Tx buffer DMA enable
    -            TXDMAEN: u1,
    -            ///  SS output enable
    -            SSOE: u1,
    -            ///  NSS pulse management
    -            NSSP: u1,
    -            ///  Frame format
    -            FRF: u1,
    -            ///  Error interrupt enable
    -            ERRIE: u1,
    -            ///  RX buffer not empty interrupt enable
    -            RXNEIE: u1,
    -            ///  Tx buffer empty interrupt enable
    -            TXEIE: u1,
    -            ///  Data size
    -            DS: u4,
    -            ///  FIFO reception threshold
    -            FRXTH: u1,
    -            ///  Last DMA transfer for reception
    -            LDMA_RX: u1,
    -            ///  Last DMA transfer for transmission
    -            LDMA_TX: u1,
    -            padding: u17,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Receive buffer not empty
    -            RXNE: u1,
    -            ///  Transmit buffer empty
    -            TXE: u1,
    -            ///  Channel side
    -            CHSIDE: u1,
    -            ///  Underrun flag
    -            UDR: u1,
    -            ///  CRC error flag
    -            CRCERR: u1,
    -            ///  Mode fault
    -            MODF: u1,
    -            ///  Overrun flag
    -            OVR: u1,
    -            ///  Busy flag
    -            BSY: u1,
    -            ///  TI frame format error
    -            TIFRFE: u1,
    -            ///  FIFO reception level
    -            FRLVL: u2,
    -            ///  FIFO transmission level
    -            FTLVL: u2,
    -            padding: u19,
    -        }),
    -        ///  data register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  Data register
    -            DR: u16,
    -            padding: u16,
    -        }),
    -        ///  CRC polynomial register
    -        CRCPR: mmio.Mmio(packed struct(u32) {
    -            ///  CRC polynomial register
    -            CRCPOLY: u16,
    -            padding: u16,
    -        }),
    -        ///  RX CRC register
    -        RXCRCR: mmio.Mmio(packed struct(u32) {
    -            ///  Rx CRC register
    -            RxCRC: u16,
    -            padding: u16,
    -        }),
    -        ///  TX CRC register
    -        TXCRCR: mmio.Mmio(packed struct(u32) {
    -            ///  Tx CRC register
    -            TxCRC: u16,
    -            padding: u16,
    -        }),
    -        ///  I2S configuration register
    -        I2SCFGR: mmio.Mmio(packed struct(u32) {
    -            ///  Channel length (number of bits per audio channel)
    -            CHLEN: u1,
    -            ///  Data length to be transferred
    -            DATLEN: u2,
    -            ///  Steady state clock polarity
    -            CKPOL: u1,
    -            ///  I2S standard selection
    -            I2SSTD: u2,
    -            reserved7: u1,
    -            ///  PCM frame synchronization
    -            PCMSYNC: u1,
    -            ///  I2S configuration mode
    -            I2SCFG: u2,
    -            ///  I2S Enable
    -            I2SE: u1,
    -            ///  I2S mode selection
    -            I2SMOD: u1,
    -            padding: u20,
    -        }),
    -        ///  I2S prescaler register
    -        I2SPR: mmio.Mmio(packed struct(u32) {
    -            ///  I2S Linear prescaler
    -            I2SDIV: u8,
    -            ///  Odd factor for the prescaler
    -            ODD: u1,
    -            ///  Master clock output enable
    -            MCKOE: u1,
    -            padding: u22,
    -        }),
    -    };
    -
    -    ///  Real-time clock
    -    pub const RTC = extern struct {
    -        ///  time register
    -        TR: mmio.Mmio(packed struct(u32) {
    -            ///  Second units in BCD format
    -            SU: u4,
    -            ///  Second tens in BCD format
    -            ST: u3,
    -            reserved8: u1,
    -            ///  Minute units in BCD format
    -            MNU: u4,
    -            ///  Minute tens in BCD format
    -            MNT: u3,
    -            reserved16: u1,
    -            ///  Hour units in BCD format
    -            HU: u4,
    -            ///  Hour tens in BCD format
    -            HT: u2,
    -            ///  AM/PM notation
    -            PM: u1,
    -            padding: u9,
    -        }),
    -        ///  date register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  Date units in BCD format
    -            DU: u4,
    -            ///  Date tens in BCD format
    -            DT: u2,
    -            reserved8: u2,
    -            ///  Month units in BCD format
    -            MU: u4,
    -            ///  Month tens in BCD format
    -            MT: u1,
    -            ///  Week day units
    -            WDU: u3,
    -            ///  Year units in BCD format
    -            YU: u4,
    -            ///  Year tens in BCD format
    -            YT: u4,
    -            padding: u8,
    -        }),
    -        ///  control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  Wakeup clock selection
    -            WCKSEL: u3,
    -            ///  Time-stamp event active edge
    -            TSEDGE: u1,
    -            ///  Reference clock detection enable (50 or 60 Hz)
    -            REFCKON: u1,
    -            ///  Bypass the shadow registers
    -            BYPSHAD: u1,
    -            ///  Hour format
    -            FMT: u1,
    -            reserved8: u1,
    -            ///  Alarm A enable
    -            ALRAE: u1,
    -            ///  Alarm B enable
    -            ALRBE: u1,
    -            ///  Wakeup timer enable
    -            WUTE: u1,
    -            ///  Time stamp enable
    -            TSE: u1,
    -            ///  Alarm A interrupt enable
    -            ALRAIE: u1,
    -            ///  Alarm B interrupt enable
    -            ALRBIE: u1,
    -            ///  Wakeup timer interrupt enable
    -            WUTIE: u1,
    -            ///  Time-stamp interrupt enable
    -            TSIE: u1,
    -            ///  Add 1 hour (summer time change)
    -            ADD1H: u1,
    -            ///  Subtract 1 hour (winter time change)
    -            SUB1H: u1,
    -            ///  Backup
    -            BKP: u1,
    -            ///  Calibration output selection
    -            COSEL: u1,
    -            ///  Output polarity
    -            POL: u1,
    -            ///  Output selection
    -            OSEL: u2,
    -            ///  Calibration output enable
    -            COE: u1,
    -            padding: u8,
    -        }),
    -        ///  initialization and status register
    -        ISR: mmio.Mmio(packed struct(u32) {
    -            ///  Alarm A write flag
    -            ALRAWF: u1,
    -            ///  Alarm B write flag
    -            ALRBWF: u1,
    -            ///  Wakeup timer write flag
    -            WUTWF: u1,
    -            ///  Shift operation pending
    -            SHPF: u1,
    -            ///  Initialization status flag
    -            INITS: u1,
    -            ///  Registers synchronization flag
    -            RSF: u1,
    -            ///  Initialization flag
    -            INITF: u1,
    -            ///  Initialization mode
    -            INIT: u1,
    -            ///  Alarm A flag
    -            ALRAF: u1,
    -            ///  Alarm B flag
    -            ALRBF: u1,
    -            ///  Wakeup timer flag
    -            WUTF: u1,
    -            ///  Time-stamp flag
    -            TSF: u1,
    -            ///  Time-stamp overflow flag
    -            TSOVF: u1,
    -            ///  Tamper detection flag
    -            TAMP1F: u1,
    -            ///  RTC_TAMP2 detection flag
    -            TAMP2F: u1,
    -            ///  RTC_TAMP3 detection flag
    -            TAMP3F: u1,
    -            ///  Recalibration pending Flag
    -            RECALPF: u1,
    -            padding: u15,
    -        }),
    -        ///  prescaler register
    -        PRER: mmio.Mmio(packed struct(u32) {
    -            ///  Synchronous prescaler factor
    -            PREDIV_S: u15,
    -            reserved16: u1,
    -            ///  Asynchronous prescaler factor
    -            PREDIV_A: u7,
    -            padding: u9,
    -        }),
    -        ///  wakeup timer register
    -        WUTR: mmio.Mmio(packed struct(u32) {
    -            ///  Wakeup auto-reload value bits
    -            WUT: u16,
    -            padding: u16,
    -        }),
    -        reserved28: [4]u8,
    -        ///  alarm A register
    -        ALRMAR: mmio.Mmio(packed struct(u32) {
    -            ///  Second units in BCD format
    -            SU: u4,
    -            ///  Second tens in BCD format
    -            ST: u3,
    -            ///  Alarm A seconds mask
    -            MSK1: u1,
    -            ///  Minute units in BCD format
    -            MNU: u4,
    -            ///  Minute tens in BCD format
    -            MNT: u3,
    -            ///  Alarm A minutes mask
    -            MSK2: u1,
    -            ///  Hour units in BCD format
    -            HU: u4,
    -            ///  Hour tens in BCD format
    -            HT: u2,
    -            ///  AM/PM notation
    -            PM: u1,
    -            ///  Alarm A hours mask
    -            MSK3: u1,
    -            ///  Date units or day in BCD format
    -            DU: u4,
    -            ///  Date tens in BCD format
    -            DT: u2,
    -            ///  Week day selection
    -            WDSEL: u1,
    -            ///  Alarm A date mask
    -            MSK4: u1,
    -        }),
    -        ///  alarm B register
    -        ALRMBR: mmio.Mmio(packed struct(u32) {
    -            ///  Second units in BCD format
    -            SU: u4,
    -            ///  Second tens in BCD format
    -            ST: u3,
    -            ///  Alarm B seconds mask
    -            MSK1: u1,
    -            ///  Minute units in BCD format
    -            MNU: u4,
    -            ///  Minute tens in BCD format
    -            MNT: u3,
    -            ///  Alarm B minutes mask
    -            MSK2: u1,
    -            ///  Hour units in BCD format
    -            HU: u4,
    -            ///  Hour tens in BCD format
    -            HT: u2,
    -            ///  AM/PM notation
    -            PM: u1,
    -            ///  Alarm B hours mask
    -            MSK3: u1,
    -            ///  Date units or day in BCD format
    -            DU: u4,
    -            ///  Date tens in BCD format
    -            DT: u2,
    -            ///  Week day selection
    -            WDSEL: u1,
    -            ///  Alarm B date mask
    -            MSK4: u1,
    -        }),
    -        ///  write protection register
    -        WPR: mmio.Mmio(packed struct(u32) {
    -            ///  Write protection key
    -            KEY: u8,
    -            padding: u24,
    -        }),
    -        ///  sub second register
    -        SSR: mmio.Mmio(packed struct(u32) {
    -            ///  Sub second value
    -            SS: u16,
    -            padding: u16,
    -        }),
    -        ///  shift control register
    -        SHIFTR: mmio.Mmio(packed struct(u32) {
    -            ///  Subtract a fraction of a second
    -            SUBFS: u15,
    -            reserved31: u16,
    -            ///  Add one second
    -            ADD1S: u1,
    -        }),
    -        ///  time stamp time register
    -        TSTR: mmio.Mmio(packed struct(u32) {
    -            ///  Second units in BCD format
    -            SU: u4,
    -            ///  Second tens in BCD format
    -            ST: u3,
    -            reserved8: u1,
    -            ///  Minute units in BCD format
    -            MNU: u4,
    -            ///  Minute tens in BCD format
    -            MNT: u3,
    -            reserved16: u1,
    -            ///  Hour units in BCD format
    -            HU: u4,
    -            ///  Hour tens in BCD format
    -            HT: u2,
    -            ///  AM/PM notation
    -            PM: u1,
    -            padding: u9,
    -        }),
    -        ///  time stamp date register
    -        TSDR: mmio.Mmio(packed struct(u32) {
    -            ///  Date units in BCD format
    -            DU: u4,
    -            ///  Date tens in BCD format
    -            DT: u2,
    -            reserved8: u2,
    -            ///  Month units in BCD format
    -            MU: u4,
    -            ///  Month tens in BCD format
    -            MT: u1,
    -            ///  Week day units
    -            WDU: u3,
    -            padding: u16,
    -        }),
    -        ///  timestamp sub second register
    -        TSSSR: mmio.Mmio(packed struct(u32) {
    -            ///  Sub second value
    -            SS: u16,
    -            padding: u16,
    -        }),
    -        ///  calibration register
    -        CALR: mmio.Mmio(packed struct(u32) {
    -            ///  Calibration minus
    -            CALM: u9,
    -            reserved13: u4,
    -            ///  Use a 16-second calibration cycle period
    -            CALW16: u1,
    -            ///  Use an 8-second calibration cycle period
    -            CALW8: u1,
    -            ///  Increase frequency of RTC by 488.5 ppm
    -            CALP: u1,
    -            padding: u16,
    -        }),
    -        ///  tamper and alternate function configuration register
    -        TAFCR: mmio.Mmio(packed struct(u32) {
    -            ///  Tamper 1 detection enable
    -            TAMP1E: u1,
    -            ///  Active level for tamper 1
    -            TAMP1TRG: u1,
    -            ///  Tamper interrupt enable
    -            TAMPIE: u1,
    -            ///  Tamper 2 detection enable
    -            TAMP2E: u1,
    -            ///  Active level for tamper 2
    -            TAMP2TRG: u1,
    -            ///  Tamper 3 detection enable
    -            TAMP3E: u1,
    -            ///  Active level for tamper 3
    -            TAMP3TRG: u1,
    -            ///  Activate timestamp on tamper detection event
    -            TAMPTS: u1,
    -            ///  Tamper sampling frequency
    -            TAMPFREQ: u3,
    -            ///  Tamper filter count
    -            TAMPFLT: u2,
    -            ///  Tamper precharge duration
    -            TAMPPRCH: u2,
    -            ///  TAMPER pull-up disable
    -            TAMPPUDIS: u1,
    -            reserved18: u2,
    -            ///  PC13 value
    -            PC13VALUE: u1,
    -            ///  PC13 mode
    -            PC13MODE: u1,
    -            ///  PC14 value
    -            PC14VALUE: u1,
    -            ///  PC 14 mode
    -            PC14MODE: u1,
    -            ///  PC15 value
    -            PC15VALUE: u1,
    -            ///  PC15 mode
    -            PC15MODE: u1,
    -            padding: u8,
    -        }),
    -        ///  alarm A sub second register
    -        ALRMASSR: mmio.Mmio(packed struct(u32) {
    -            ///  Sub seconds value
    -            SS: u15,
    -            reserved24: u9,
    -            ///  Mask the most-significant bits starting at this bit
    -            MASKSS: u4,
    -            padding: u4,
    -        }),
    -        ///  alarm B sub second register
    -        ALRMBSSR: mmio.Mmio(packed struct(u32) {
    -            ///  Sub seconds value
    -            SS: u15,
    -            reserved24: u9,
    -            ///  Mask the most-significant bits starting at this bit
    -            MASKSS: u4,
    -            padding: u4,
    -        }),
    -        reserved80: [4]u8,
    -        ///  backup register
    -        BKP0R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP1R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP2R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP3R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP4R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP5R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP6R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP7R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP8R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP9R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP10R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP11R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP12R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP13R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP14R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP15R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP16R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP17R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP18R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP19R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP20R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP21R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP22R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP23R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP24R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP25R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP26R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP27R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP28R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP29R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP30R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP31R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -    };
    -
    -    ///  Basic timers
    -    pub const TIM6 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            ///  One-pulse mode
    -            OPM: u1,
    -            reserved7: u3,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            reserved11: u3,
    -            ///  UIF status bit remapping
    -            UIFREMAP: u1,
    -            padding: u20,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            reserved4: u4,
    -            ///  Master mode selection
    -            MMS: u3,
    -            padding: u25,
    -        }),
    -        reserved12: [4]u8,
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            reserved8: u7,
    -            ///  Update DMA request enable
    -            UDE: u1,
    -            padding: u23,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            padding: u31,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            padding: u31,
    -        }),
    -        reserved36: [12]u8,
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  Low counter value
    -            CNT: u16,
    -            reserved31: u15,
    -            ///  UIF Copy
    -            UIFCPY: u1,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Low Auto-reload value
    -            ARR: u16,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  Analog-to-Digital Converter
    -    pub const ADC1 = extern struct {
    -        ///  interrupt and status register
    -        ISR: mmio.Mmio(packed struct(u32) {
    -            ///  ADRDY
    -            ADRDY: u1,
    -            ///  EOSMP
    -            EOSMP: u1,
    -            ///  EOC
    -            EOC: u1,
    -            ///  EOS
    -            EOS: u1,
    -            ///  OVR
    -            OVR: u1,
    -            ///  JEOC
    -            JEOC: u1,
    -            ///  JEOS
    -            JEOS: u1,
    -            ///  AWD1
    -            AWD1: u1,
    -            ///  AWD2
    -            AWD2: u1,
    -            ///  AWD3
    -            AWD3: u1,
    -            ///  JQOVF
    -            JQOVF: u1,
    -            padding: u21,
    -        }),
    -        ///  interrupt enable register
    -        IER: mmio.Mmio(packed struct(u32) {
    -            ///  ADRDYIE
    -            ADRDYIE: u1,
    -            ///  EOSMPIE
    -            EOSMPIE: u1,
    -            ///  EOCIE
    -            EOCIE: u1,
    -            ///  EOSIE
    -            EOSIE: u1,
    -            ///  OVRIE
    -            OVRIE: u1,
    -            ///  JEOCIE
    -            JEOCIE: u1,
    -            ///  JEOSIE
    -            JEOSIE: u1,
    -            ///  AWD1IE
    -            AWD1IE: u1,
    -            ///  AWD2IE
    -            AWD2IE: u1,
    -            ///  AWD3IE
    -            AWD3IE: u1,
    -            ///  JQOVFIE
    -            JQOVFIE: u1,
    -            padding: u21,
    -        }),
    -        ///  control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  ADEN
    -            ADEN: u1,
    -            ///  ADDIS
    -            ADDIS: u1,
    -            ///  ADSTART
    -            ADSTART: u1,
    -            ///  JADSTART
    -            JADSTART: u1,
    -            ///  ADSTP
    -            ADSTP: u1,
    -            ///  JADSTP
    -            JADSTP: u1,
    -            reserved28: u22,
    -            ///  ADVREGEN
    -            ADVREGEN: u1,
    -            ///  DEEPPWD
    -            DEEPPWD: u1,
    -            ///  ADCALDIF
    -            ADCALDIF: u1,
    -            ///  ADCAL
    -            ADCAL: u1,
    -        }),
    -        ///  configuration register
    -        CFGR: mmio.Mmio(packed struct(u32) {
    -            ///  DMAEN
    -            DMAEN: u1,
    -            ///  DMACFG
    -            DMACFG: u1,
    -            reserved3: u1,
    -            ///  RES
    -            RES: u2,
    -            ///  ALIGN
    -            ALIGN: u1,
    -            ///  EXTSEL
    -            EXTSEL: u4,
    -            ///  EXTEN
    -            EXTEN: u2,
    -            ///  OVRMOD
    -            OVRMOD: u1,
    -            ///  CONT
    -            CONT: u1,
    -            ///  AUTDLY
    -            AUTDLY: u1,
    -            ///  AUTOFF
    -            AUTOFF: u1,
    -            ///  DISCEN
    -            DISCEN: u1,
    -            ///  DISCNUM
    -            DISCNUM: u3,
    -            ///  JDISCEN
    -            JDISCEN: u1,
    -            ///  JQM
    -            JQM: u1,
    -            ///  AWD1SGL
    -            AWD1SGL: u1,
    -            ///  AWD1EN
    -            AWD1EN: u1,
    -            ///  JAWD1EN
    -            JAWD1EN: u1,
    -            ///  JAUTO
    -            JAUTO: u1,
    -            ///  AWDCH1CH
    -            AWDCH1CH: u5,
    -            padding: u1,
    -        }),
    -        reserved20: [4]u8,
    -        ///  sample time register 1
    -        SMPR1: mmio.Mmio(packed struct(u32) {
    -            reserved3: u3,
    -            ///  SMP1
    -            SMP1: u3,
    -            ///  SMP2
    -            SMP2: u3,
    -            ///  SMP3
    -            SMP3: u3,
    -            ///  SMP4
    -            SMP4: u3,
    -            ///  SMP5
    -            SMP5: u3,
    -            ///  SMP6
    -            SMP6: u3,
    -            ///  SMP7
    -            SMP7: u3,
    -            ///  SMP8
    -            SMP8: u3,
    -            ///  SMP9
    -            SMP9: u3,
    -            padding: u2,
    -        }),
    -        ///  sample time register 2
    -        SMPR2: mmio.Mmio(packed struct(u32) {
    -            ///  SMP10
    -            SMP10: u3,
    -            ///  SMP11
    -            SMP11: u3,
    -            ///  SMP12
    -            SMP12: u3,
    -            ///  SMP13
    -            SMP13: u3,
    -            ///  SMP14
    -            SMP14: u3,
    -            ///  SMP15
    -            SMP15: u3,
    -            ///  SMP16
    -            SMP16: u3,
    -            ///  SMP17
    -            SMP17: u3,
    -            ///  SMP18
    -            SMP18: u3,
    -            padding: u5,
    -        }),
    -        reserved32: [4]u8,
    -        ///  watchdog threshold register 1
    -        TR1: mmio.Mmio(packed struct(u32) {
    -            ///  LT1
    -            LT1: u12,
    -            reserved16: u4,
    -            ///  HT1
    -            HT1: u12,
    -            padding: u4,
    -        }),
    -        ///  watchdog threshold register
    -        TR2: mmio.Mmio(packed struct(u32) {
    -            ///  LT2
    -            LT2: u8,
    -            reserved16: u8,
    -            ///  HT2
    -            HT2: u8,
    -            padding: u8,
    -        }),
    -        ///  watchdog threshold register 3
    -        TR3: mmio.Mmio(packed struct(u32) {
    -            ///  LT3
    -            LT3: u8,
    -            reserved16: u8,
    -            ///  HT3
    -            HT3: u8,
    -            padding: u8,
    -        }),
    -        reserved48: [4]u8,
    -        ///  regular sequence register 1
    -        SQR1: mmio.Mmio(packed struct(u32) {
    -            ///  L3
    -            L3: u4,
    -            reserved6: u2,
    -            ///  SQ1
    -            SQ1: u5,
    -            reserved12: u1,
    -            ///  SQ2
    -            SQ2: u5,
    -            reserved18: u1,
    -            ///  SQ3
    -            SQ3: u5,
    -            reserved24: u1,
    -            ///  SQ4
    -            SQ4: u5,
    -            padding: u3,
    -        }),
    -        ///  regular sequence register 2
    -        SQR2: mmio.Mmio(packed struct(u32) {
    -            ///  SQ5
    -            SQ5: u5,
    -            reserved6: u1,
    -            ///  SQ6
    -            SQ6: u5,
    -            reserved12: u1,
    -            ///  SQ7
    -            SQ7: u5,
    -            reserved18: u1,
    -            ///  SQ8
    -            SQ8: u5,
    -            reserved24: u1,
    -            ///  SQ9
    -            SQ9: u5,
    -            padding: u3,
    -        }),
    -        ///  regular sequence register 3
    -        SQR3: mmio.Mmio(packed struct(u32) {
    -            ///  SQ10
    -            SQ10: u5,
    -            reserved6: u1,
    -            ///  SQ11
    -            SQ11: u5,
    -            reserved12: u1,
    -            ///  SQ12
    -            SQ12: u5,
    -            reserved18: u1,
    -            ///  SQ13
    -            SQ13: u5,
    -            reserved24: u1,
    -            ///  SQ14
    -            SQ14: u5,
    -            padding: u3,
    -        }),
    -        ///  regular sequence register 4
    -        SQR4: mmio.Mmio(packed struct(u32) {
    -            ///  SQ15
    -            SQ15: u5,
    -            reserved6: u1,
    -            ///  SQ16
    -            SQ16: u5,
    -            padding: u21,
    -        }),
    -        ///  regular Data Register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  regularDATA
    -            regularDATA: u16,
    -            padding: u16,
    -        }),
    -        reserved76: [8]u8,
    -        ///  injected sequence register
    -        JSQR: mmio.Mmio(packed struct(u32) {
    -            ///  JL
    -            JL: u2,
    -            ///  JEXTSEL
    -            JEXTSEL: u4,
    -            ///  JEXTEN
    -            JEXTEN: u2,
    -            ///  JSQ1
    -            JSQ1: u5,
    -            reserved14: u1,
    -            ///  JSQ2
    -            JSQ2: u5,
    -            reserved20: u1,
    -            ///  JSQ3
    -            JSQ3: u5,
    -            reserved26: u1,
    -            ///  JSQ4
    -            JSQ4: u5,
    -            padding: u1,
    -        }),
    -        reserved96: [16]u8,
    -        ///  offset register 1
    -        OFR1: mmio.Mmio(packed struct(u32) {
    -            ///  OFFSET1
    -            OFFSET1: u12,
    -            reserved26: u14,
    -            ///  OFFSET1_CH
    -            OFFSET1_CH: u5,
    -            ///  OFFSET1_EN
    -            OFFSET1_EN: u1,
    -        }),
    -        ///  offset register 2
    -        OFR2: mmio.Mmio(packed struct(u32) {
    -            ///  OFFSET2
    -            OFFSET2: u12,
    -            reserved26: u14,
    -            ///  OFFSET2_CH
    -            OFFSET2_CH: u5,
    -            ///  OFFSET2_EN
    -            OFFSET2_EN: u1,
    -        }),
    -        ///  offset register 3
    -        OFR3: mmio.Mmio(packed struct(u32) {
    -            ///  OFFSET3
    -            OFFSET3: u12,
    -            reserved26: u14,
    -            ///  OFFSET3_CH
    -            OFFSET3_CH: u5,
    -            ///  OFFSET3_EN
    -            OFFSET3_EN: u1,
    -        }),
    -        ///  offset register 4
    -        OFR4: mmio.Mmio(packed struct(u32) {
    -            ///  OFFSET4
    -            OFFSET4: u12,
    -            reserved26: u14,
    -            ///  OFFSET4_CH
    -            OFFSET4_CH: u5,
    -            ///  OFFSET4_EN
    -            OFFSET4_EN: u1,
    -        }),
    -        reserved128: [16]u8,
    -        ///  injected data register 1
    -        JDR1: mmio.Mmio(packed struct(u32) {
    -            ///  JDATA1
    -            JDATA1: u16,
    -            padding: u16,
    -        }),
    -        ///  injected data register 2
    -        JDR2: mmio.Mmio(packed struct(u32) {
    -            ///  JDATA2
    -            JDATA2: u16,
    -            padding: u16,
    -        }),
    -        ///  injected data register 3
    -        JDR3: mmio.Mmio(packed struct(u32) {
    -            ///  JDATA3
    -            JDATA3: u16,
    -            padding: u16,
    -        }),
    -        ///  injected data register 4
    -        JDR4: mmio.Mmio(packed struct(u32) {
    -            ///  JDATA4
    -            JDATA4: u16,
    -            padding: u16,
    -        }),
    -        reserved160: [16]u8,
    -        ///  Analog Watchdog 2 Configuration Register
    -        AWD2CR: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  AWD2CH
    -            AWD2CH: u18,
    -            padding: u13,
    -        }),
    -        ///  Analog Watchdog 3 Configuration Register
    -        AWD3CR: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  AWD3CH
    -            AWD3CH: u18,
    -            padding: u13,
    -        }),
    -        reserved176: [8]u8,
    -        ///  Differential Mode Selection Register 2
    -        DIFSEL: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  Differential mode for channels 15 to 1
    -            DIFSEL_1_15: u15,
    -            ///  Differential mode for channels 18 to 16
    -            DIFSEL_16_18: u3,
    -            padding: u13,
    -        }),
    -        ///  Calibration Factors
    -        CALFACT: mmio.Mmio(packed struct(u32) {
    -            ///  CALFACT_S
    -            CALFACT_S: u7,
    -            reserved16: u9,
    -            ///  CALFACT_D
    -            CALFACT_D: u7,
    -            padding: u9,
    -        }),
    -    };
    -
    -    ///  Advanced-timers
    -    pub const TIM8 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            ///  One-pulse mode
    -            OPM: u1,
    -            ///  Direction
    -            DIR: u1,
    -            ///  Center-aligned mode selection
    -            CMS: u2,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            ///  Clock division
    -            CKD: u2,
    -            reserved11: u1,
    -            ///  UIF status bit remapping
    -            UIFREMAP: u1,
    -            padding: u20,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/compare preloaded control
    -            CCPC: u1,
    -            reserved2: u1,
    -            ///  Capture/compare control update selection
    -            CCUS: u1,
    -            ///  Capture/compare DMA selection
    -            CCDS: u1,
    -            ///  Master mode selection
    -            MMS: u3,
    -            ///  TI1 selection
    -            TI1S: u1,
    -            ///  Output Idle state 1
    -            OIS1: u1,
    -            ///  Output Idle state 1
    -            OIS1N: u1,
    -            ///  Output Idle state 2
    -            OIS2: u1,
    -            ///  Output Idle state 2
    -            OIS2N: u1,
    -            ///  Output Idle state 3
    -            OIS3: u1,
    -            ///  Output Idle state 3
    -            OIS3N: u1,
    -            ///  Output Idle state 4
    -            OIS4: u1,
    -            reserved16: u1,
    -            ///  Output Idle state 5
    -            OIS5: u1,
    -            reserved18: u1,
    -            ///  Output Idle state 6
    -            OIS6: u1,
    -            reserved20: u1,
    -            ///  Master mode selection 2
    -            MMS2: u4,
    -            padding: u8,
    -        }),
    -        ///  slave mode control register
    -        SMCR: mmio.Mmio(packed struct(u32) {
    -            ///  Slave mode selection
    -            SMS: u3,
    -            ///  OCREF clear selection
    -            OCCS: u1,
    -            ///  Trigger selection
    -            TS: u3,
    -            ///  Master/Slave mode
    -            MSM: u1,
    -            ///  External trigger filter
    -            ETF: u4,
    -            ///  External trigger prescaler
    -            ETPS: u2,
    -            ///  External clock enable
    -            ECE: u1,
    -            ///  External trigger polarity
    -            ETP: u1,
    -            ///  Slave mode selection bit 3
    -            SMS3: u1,
    -            padding: u15,
    -        }),
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            ///  Capture/Compare 1 interrupt enable
    -            CC1IE: u1,
    -            ///  Capture/Compare 2 interrupt enable
    -            CC2IE: u1,
    -            ///  Capture/Compare 3 interrupt enable
    -            CC3IE: u1,
    -            ///  Capture/Compare 4 interrupt enable
    -            CC4IE: u1,
    -            ///  COM interrupt enable
    -            COMIE: u1,
    -            ///  Trigger interrupt enable
    -            TIE: u1,
    -            ///  Break interrupt enable
    -            BIE: u1,
    -            ///  Update DMA request enable
    -            UDE: u1,
    -            ///  Capture/Compare 1 DMA request enable
    -            CC1DE: u1,
    -            ///  Capture/Compare 2 DMA request enable
    -            CC2DE: u1,
    -            ///  Capture/Compare 3 DMA request enable
    -            CC3DE: u1,
    -            ///  Capture/Compare 4 DMA request enable
    -            CC4DE: u1,
    -            ///  COM DMA request enable
    -            COMDE: u1,
    -            ///  Trigger DMA request enable
    -            TDE: u1,
    -            padding: u17,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            ///  Capture/compare 1 interrupt flag
    -            CC1IF: u1,
    -            ///  Capture/Compare 2 interrupt flag
    -            CC2IF: u1,
    -            ///  Capture/Compare 3 interrupt flag
    -            CC3IF: u1,
    -            ///  Capture/Compare 4 interrupt flag
    -            CC4IF: u1,
    -            ///  COM interrupt flag
    -            COMIF: u1,
    -            ///  Trigger interrupt flag
    -            TIF: u1,
    -            ///  Break interrupt flag
    -            BIF: u1,
    -            ///  Break 2 interrupt flag
    -            B2IF: u1,
    -            ///  Capture/Compare 1 overcapture flag
    -            CC1OF: u1,
    -            ///  Capture/compare 2 overcapture flag
    -            CC2OF: u1,
    -            ///  Capture/Compare 3 overcapture flag
    -            CC3OF: u1,
    -            ///  Capture/Compare 4 overcapture flag
    -            CC4OF: u1,
    -            reserved16: u3,
    -            ///  Capture/Compare 5 interrupt flag
    -            C5IF: u1,
    -            ///  Capture/Compare 6 interrupt flag
    -            C6IF: u1,
    -            padding: u14,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            ///  Capture/compare 1 generation
    -            CC1G: u1,
    -            ///  Capture/compare 2 generation
    -            CC2G: u1,
    -            ///  Capture/compare 3 generation
    -            CC3G: u1,
    -            ///  Capture/compare 4 generation
    -            CC4G: u1,
    -            ///  Capture/Compare control update generation
    -            COMG: u1,
    -            ///  Trigger generation
    -            TG: u1,
    -            ///  Break generation
    -            BG: u1,
    -            ///  Break 2 generation
    -            B2G: u1,
    -            padding: u23,
    -        }),
    -        ///  capture/compare mode register (output mode)
    -        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 selection
    -            CC1S: u2,
    -            ///  Output Compare 1 fast enable
    -            OC1FE: u1,
    -            ///  Output Compare 1 preload enable
    -            OC1PE: u1,
    -            ///  Output Compare 1 mode
    -            OC1M: u3,
    -            ///  Output Compare 1 clear enable
    -            OC1CE: u1,
    -            ///  Capture/Compare 2 selection
    -            CC2S: u2,
    -            ///  Output Compare 2 fast enable
    -            OC2FE: u1,
    -            ///  Output Compare 2 preload enable
    -            OC2PE: u1,
    -            ///  Output Compare 2 mode
    -            OC2M: u3,
    -            ///  Output Compare 2 clear enable
    -            OC2CE: u1,
    -            ///  Output Compare 1 mode bit 3
    -            OC1M_3: u1,
    -            reserved24: u7,
    -            ///  Output Compare 2 mode bit 3
    -            OC2M_3: u1,
    -            padding: u7,
    -        }),
    -        ///  capture/compare mode register (output mode)
    -        CCMR2_Output: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 3 selection
    -            CC3S: u2,
    -            ///  Output compare 3 fast enable
    -            OC3FE: u1,
    -            ///  Output compare 3 preload enable
    -            OC3PE: u1,
    -            ///  Output compare 3 mode
    -            OC3M: u3,
    -            ///  Output compare 3 clear enable
    -            OC3CE: u1,
    -            ///  Capture/Compare 4 selection
    -            CC4S: u2,
    -            ///  Output compare 4 fast enable
    -            OC4FE: u1,
    -            ///  Output compare 4 preload enable
    -            OC4PE: u1,
    -            ///  Output compare 4 mode
    -            OC4M: u3,
    -            ///  Output compare 4 clear enable
    -            OC4CE: u1,
    -            ///  Output Compare 3 mode bit 3
    -            OC3M_3: u1,
    -            reserved24: u7,
    -            ///  Output Compare 4 mode bit 3
    -            OC4M_3: u1,
    -            padding: u7,
    -        }),
    -        ///  capture/compare enable register
    -        CCER: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 output enable
    -            CC1E: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1P: u1,
    -            ///  Capture/Compare 1 complementary output enable
    -            CC1NE: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1NP: u1,
    -            ///  Capture/Compare 2 output enable
    -            CC2E: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2P: u1,
    -            ///  Capture/Compare 2 complementary output enable
    -            CC2NE: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2NP: u1,
    -            ///  Capture/Compare 3 output enable
    -            CC3E: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC3P: u1,
    -            ///  Capture/Compare 3 complementary output enable
    -            CC3NE: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC3NP: u1,
    -            ///  Capture/Compare 4 output enable
    -            CC4E: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC4P: u1,
    -            reserved15: u1,
    -            ///  Capture/Compare 4 output Polarity
    -            CC4NP: u1,
    -            ///  Capture/Compare 5 output enable
    -            CC5E: u1,
    -            ///  Capture/Compare 5 output Polarity
    -            CC5P: u1,
    -            reserved20: u2,
    -            ///  Capture/Compare 6 output enable
    -            CC6E: u1,
    -            ///  Capture/Compare 6 output Polarity
    -            CC6P: u1,
    -            padding: u10,
    -        }),
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  counter value
    -            CNT: u16,
    -            reserved31: u15,
    -            ///  UIF copy
    -            UIFCPY: u1,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Auto-reload value
    -            ARR: u16,
    -            padding: u16,
    -        }),
    -        ///  repetition counter register
    -        RCR: mmio.Mmio(packed struct(u32) {
    -            ///  Repetition counter value
    -            REP: u16,
    -            padding: u16,
    -        }),
    -        ///  capture/compare register 1
    -        CCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 value
    -            CCR1: u16,
    -            padding: u16,
    -        }),
    -        ///  capture/compare register 2
    -        CCR2: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 2 value
    -            CCR2: u16,
    -            padding: u16,
    -        }),
    -        ///  capture/compare register 3
    -        CCR3: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 3 value
    -            CCR3: u16,
    -            padding: u16,
    -        }),
    -        ///  capture/compare register 4
    -        CCR4: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 3 value
    -            CCR4: u16,
    -            padding: u16,
    -        }),
    -        ///  break and dead-time register
    -        BDTR: mmio.Mmio(packed struct(u32) {
    -            ///  Dead-time generator setup
    -            DTG: u8,
    -            ///  Lock configuration
    -            LOCK: u2,
    -            ///  Off-state selection for Idle mode
    -            OSSI: u1,
    -            ///  Off-state selection for Run mode
    -            OSSR: u1,
    -            ///  Break enable
    -            BKE: u1,
    -            ///  Break polarity
    -            BKP: u1,
    -            ///  Automatic output enable
    -            AOE: u1,
    -            ///  Main output enable
    -            MOE: u1,
    -            ///  Break filter
    -            BKF: u4,
    -            ///  Break 2 filter
    -            BK2F: u4,
    -            ///  Break 2 enable
    -            BK2E: u1,
    -            ///  Break 2 polarity
    -            BK2P: u1,
    -            padding: u6,
    -        }),
    -        ///  DMA control register
    -        DCR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA base address
    -            DBA: u5,
    -            reserved8: u3,
    -            ///  DMA burst length
    -            DBL: u5,
    -            padding: u19,
    -        }),
    -        ///  DMA address for full transfer
    -        DMAR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA register for burst accesses
    -            DMAB: u16,
    -            padding: u16,
    -        }),
    -        reserved84: [4]u8,
    -        ///  capture/compare mode register 3 (output mode)
    -        CCMR3_Output: mmio.Mmio(packed struct(u32) {
    -            reserved2: u2,
    -            ///  Output compare 5 fast enable
    -            OC5FE: u1,
    -            ///  Output compare 5 preload enable
    -            OC5PE: u1,
    -            ///  Output compare 5 mode
    -            OC5M: u3,
    -            ///  Output compare 5 clear enable
    -            OC5CE: u1,
    -            reserved10: u2,
    -            ///  Output compare 6 fast enable
    -            OC6FE: u1,
    -            ///  Output compare 6 preload enable
    -            OC6PE: u1,
    -            ///  Output compare 6 mode
    -            OC6M: u3,
    -            ///  Output compare 6 clear enable
    -            OC6CE: u1,
    -            ///  Outout Compare 5 mode bit 3
    -            OC5M_3: u1,
    -            reserved24: u7,
    -            ///  Outout Compare 6 mode bit 3
    -            OC6M_3: u1,
    -            padding: u7,
    -        }),
    -        ///  capture/compare register 5
    -        CCR5: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 5 value
    -            CCR5: u16,
    -            reserved29: u13,
    -            ///  Group Channel 5 and Channel 1
    -            GC5C1: u1,
    -            ///  Group Channel 5 and Channel 2
    -            GC5C2: u1,
    -            ///  Group Channel 5 and Channel 3
    -            GC5C3: u1,
    -        }),
    -        ///  capture/compare register 6
    -        CCR6: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 6 value
    -            CCR6: u16,
    -            padding: u16,
    -        }),
    -        ///  option registers
    -        OR: mmio.Mmio(packed struct(u32) {
    -            ///  TIM8_ETR_ADC2 remapping capability
    -            TIM8_ETR_ADC2_RMP: u2,
    -            ///  TIM8_ETR_ADC3 remapping capability
    -            TIM8_ETR_ADC3_RMP: u2,
    -            padding: u28,
    -        }),
    -    };
    -
    -    ///  Digital-to-analog converter
    -    pub const DAC = extern struct {
    -        ///  control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 enable
    -            EN1: u1,
    -            ///  DAC channel1 output buffer disable
    -            BOFF1: u1,
    -            ///  DAC channel1 trigger enable
    -            TEN1: u1,
    -            ///  DAC channel1 trigger selection
    -            TSEL1: u3,
    -            ///  DAC channel1 noise/triangle wave generation enable
    -            WAVE1: u2,
    -            ///  DAC channel1 mask/amplitude selector
    -            MAMP1: u4,
    -            ///  DAC channel1 DMA enable
    -            DMAEN1: u1,
    -            ///  DAC channel1 DMA Underrun Interrupt enable
    -            DMAUDRIE1: u1,
    -            reserved16: u2,
    -            ///  DAC channel2 enable
    -            EN2: u1,
    -            ///  DAC channel2 output buffer disable
    -            BOFF2: u1,
    -            ///  DAC channel2 trigger enable
    -            TEN2: u1,
    -            ///  DAC channel2 trigger selection
    -            TSEL2: u3,
    -            ///  DAC channel2 noise/triangle wave generation enable
    -            WAVE2: u2,
    -            ///  DAC channel2 mask/amplitude selector
    -            MAMP2: u4,
    -            ///  DAC channel2 DMA enable
    -            DMAEN2: u1,
    -            ///  DAC channel2 DMA underrun interrupt enable
    -            DMAUDRIE2: u1,
    -            padding: u2,
    -        }),
    -        ///  software trigger register
    -        SWTRIGR: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 software trigger
    -            SWTRIG1: u1,
    -            ///  DAC channel2 software trigger
    -            SWTRIG2: u1,
    -            padding: u30,
    -        }),
    -        ///  channel1 12-bit right-aligned data holding register
    -        DHR12R1: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 12-bit right-aligned data
    -            DACC1DHR: u12,
    -            padding: u20,
    -        }),
    -        ///  channel1 12-bit left aligned data holding register
    -        DHR12L1: mmio.Mmio(packed struct(u32) {
    -            reserved4: u4,
    -            ///  DAC channel1 12-bit left-aligned data
    -            DACC1DHR: u12,
    -            padding: u16,
    -        }),
    -        ///  channel1 8-bit right aligned data holding register
    -        DHR8R1: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 8-bit right-aligned data
    -            DACC1DHR: u8,
    -            padding: u24,
    -        }),
    -        ///  channel2 12-bit right aligned data holding register
    -        DHR12R2: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel2 12-bit right-aligned data
    -            DACC2DHR: u12,
    -            padding: u20,
    -        }),
    -        ///  channel2 12-bit left aligned data holding register
    -        DHR12L2: mmio.Mmio(packed struct(u32) {
    -            reserved4: u4,
    -            ///  DAC channel2 12-bit left-aligned data
    -            DACC2DHR: u12,
    -            padding: u16,
    -        }),
    -        ///  channel2 8-bit right-aligned data holding register
    -        DHR8R2: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel2 8-bit right-aligned data
    -            DACC2DHR: u8,
    -            padding: u24,
    -        }),
    -        ///  Dual DAC 12-bit right-aligned data holding register
    -        DHR12RD: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 12-bit right-aligned data
    -            DACC1DHR: u12,
    -            reserved16: u4,
    -            ///  DAC channel2 12-bit right-aligned data
    -            DACC2DHR: u12,
    -            padding: u4,
    -        }),
    -        ///  DUAL DAC 12-bit left aligned data holding register
    -        DHR12LD: mmio.Mmio(packed struct(u32) {
    -            reserved4: u4,
    -            ///  DAC channel1 12-bit left-aligned data
    -            DACC1DHR: u12,
    -            reserved20: u4,
    -            ///  DAC channel2 12-bit left-aligned data
    -            DACC2DHR: u12,
    -        }),
    -        ///  DUAL DAC 8-bit right aligned data holding register
    -        DHR8RD: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 8-bit right-aligned data
    -            DACC1DHR: u8,
    -            ///  DAC channel2 8-bit right-aligned data
    -            DACC2DHR: u8,
    -            padding: u16,
    -        }),
    -        ///  channel1 data output register
    -        DOR1: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 data output
    -            DACC1DOR: u12,
    -            padding: u20,
    -        }),
    -        ///  channel2 data output register
    -        DOR2: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel2 data output
    -            DACC2DOR: u12,
    -            padding: u20,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            reserved13: u13,
    -            ///  DAC channel1 DMA underrun flag
    -            DMAUDR1: u1,
    -            reserved29: u15,
    -            ///  DAC channel2 DMA underrun flag
    -            DMAUDR2: u1,
    -            padding: u2,
    -        }),
    -    };
    -
    -    ///  External interrupt/event controller
    -    pub const EXTI = extern struct {
    -        ///  Interrupt mask register
    -        IMR1: mmio.Mmio(packed struct(u32) {
    -            ///  Interrupt Mask on line 0
    -            MR0: u1,
    -            ///  Interrupt Mask on line 1
    -            MR1: u1,
    -            ///  Interrupt Mask on line 2
    -            MR2: u1,
    -            ///  Interrupt Mask on line 3
    -            MR3: u1,
    -            ///  Interrupt Mask on line 4
    -            MR4: u1,
    -            ///  Interrupt Mask on line 5
    -            MR5: u1,
    -            ///  Interrupt Mask on line 6
    -            MR6: u1,
    -            ///  Interrupt Mask on line 7
    -            MR7: u1,
    -            ///  Interrupt Mask on line 8
    -            MR8: u1,
    -            ///  Interrupt Mask on line 9
    -            MR9: u1,
    -            ///  Interrupt Mask on line 10
    -            MR10: u1,
    -            ///  Interrupt Mask on line 11
    -            MR11: u1,
    -            ///  Interrupt Mask on line 12
    -            MR12: u1,
    -            ///  Interrupt Mask on line 13
    -            MR13: u1,
    -            ///  Interrupt Mask on line 14
    -            MR14: u1,
    -            ///  Interrupt Mask on line 15
    -            MR15: u1,
    -            ///  Interrupt Mask on line 16
    -            MR16: u1,
    -            ///  Interrupt Mask on line 17
    -            MR17: u1,
    -            ///  Interrupt Mask on line 18
    -            MR18: u1,
    -            ///  Interrupt Mask on line 19
    -            MR19: u1,
    -            ///  Interrupt Mask on line 20
    -            MR20: u1,
    -            ///  Interrupt Mask on line 21
    -            MR21: u1,
    -            ///  Interrupt Mask on line 22
    -            MR22: u1,
    -            ///  Interrupt Mask on line 23
    -            MR23: u1,
    -            ///  Interrupt Mask on line 24
    -            MR24: u1,
    -            ///  Interrupt Mask on line 25
    -            MR25: u1,
    -            ///  Interrupt Mask on line 26
    -            MR26: u1,
    -            ///  Interrupt Mask on line 27
    -            MR27: u1,
    -            ///  Interrupt Mask on line 28
    -            MR28: u1,
    -            ///  Interrupt Mask on line 29
    -            MR29: u1,
    -            ///  Interrupt Mask on line 30
    -            MR30: u1,
    -            ///  Interrupt Mask on line 31
    -            MR31: u1,
    -        }),
    -        ///  Event mask register
    -        EMR1: mmio.Mmio(packed struct(u32) {
    -            ///  Event Mask on line 0
    -            MR0: u1,
    -            ///  Event Mask on line 1
    -            MR1: u1,
    -            ///  Event Mask on line 2
    -            MR2: u1,
    -            ///  Event Mask on line 3
    -            MR3: u1,
    -            ///  Event Mask on line 4
    -            MR4: u1,
    -            ///  Event Mask on line 5
    -            MR5: u1,
    -            ///  Event Mask on line 6
    -            MR6: u1,
    -            ///  Event Mask on line 7
    -            MR7: u1,
    -            ///  Event Mask on line 8
    -            MR8: u1,
    -            ///  Event Mask on line 9
    -            MR9: u1,
    -            ///  Event Mask on line 10
    -            MR10: u1,
    -            ///  Event Mask on line 11
    -            MR11: u1,
    -            ///  Event Mask on line 12
    -            MR12: u1,
    -            ///  Event Mask on line 13
    -            MR13: u1,
    -            ///  Event Mask on line 14
    -            MR14: u1,
    -            ///  Event Mask on line 15
    -            MR15: u1,
    -            ///  Event Mask on line 16
    -            MR16: u1,
    -            ///  Event Mask on line 17
    -            MR17: u1,
    -            ///  Event Mask on line 18
    -            MR18: u1,
    -            ///  Event Mask on line 19
    -            MR19: u1,
    -            ///  Event Mask on line 20
    -            MR20: u1,
    -            ///  Event Mask on line 21
    -            MR21: u1,
    -            ///  Event Mask on line 22
    -            MR22: u1,
    -            ///  Event Mask on line 23
    -            MR23: u1,
    -            ///  Event Mask on line 24
    -            MR24: u1,
    -            ///  Event Mask on line 25
    -            MR25: u1,
    -            ///  Event Mask on line 26
    -            MR26: u1,
    -            ///  Event Mask on line 27
    -            MR27: u1,
    -            ///  Event Mask on line 28
    -            MR28: u1,
    -            ///  Event Mask on line 29
    -            MR29: u1,
    -            ///  Event Mask on line 30
    -            MR30: u1,
    -            ///  Event Mask on line 31
    -            MR31: u1,
    -        }),
    -        ///  Rising Trigger selection register
    -        RTSR1: mmio.Mmio(packed struct(u32) {
    -            ///  Rising trigger event configuration of line 0
    -            TR0: u1,
    -            ///  Rising trigger event configuration of line 1
    -            TR1: u1,
    -            ///  Rising trigger event configuration of line 2
    -            TR2: u1,
    -            ///  Rising trigger event configuration of line 3
    -            TR3: u1,
    -            ///  Rising trigger event configuration of line 4
    -            TR4: u1,
    -            ///  Rising trigger event configuration of line 5
    -            TR5: u1,
    -            ///  Rising trigger event configuration of line 6
    -            TR6: u1,
    -            ///  Rising trigger event configuration of line 7
    -            TR7: u1,
    -            ///  Rising trigger event configuration of line 8
    -            TR8: u1,
    -            ///  Rising trigger event configuration of line 9
    -            TR9: u1,
    -            ///  Rising trigger event configuration of line 10
    -            TR10: u1,
    -            ///  Rising trigger event configuration of line 11
    -            TR11: u1,
    -            ///  Rising trigger event configuration of line 12
    -            TR12: u1,
    -            ///  Rising trigger event configuration of line 13
    -            TR13: u1,
    -            ///  Rising trigger event configuration of line 14
    -            TR14: u1,
    -            ///  Rising trigger event configuration of line 15
    -            TR15: u1,
    -            ///  Rising trigger event configuration of line 16
    -            TR16: u1,
    -            ///  Rising trigger event configuration of line 17
    -            TR17: u1,
    -            ///  Rising trigger event configuration of line 18
    -            TR18: u1,
    -            ///  Rising trigger event configuration of line 19
    -            TR19: u1,
    -            ///  Rising trigger event configuration of line 20
    -            TR20: u1,
    -            ///  Rising trigger event configuration of line 21
    -            TR21: u1,
    -            ///  Rising trigger event configuration of line 22
    -            TR22: u1,
    -            reserved29: u6,
    -            ///  Rising trigger event configuration of line 29
    -            TR29: u1,
    -            ///  Rising trigger event configuration of line 30
    -            TR30: u1,
    -            ///  Rising trigger event configuration of line 31
    -            TR31: u1,
    -        }),
    -        ///  Falling Trigger selection register
    -        FTSR1: mmio.Mmio(packed struct(u32) {
    -            ///  Falling trigger event configuration of line 0
    -            TR0: u1,
    -            ///  Falling trigger event configuration of line 1
    -            TR1: u1,
    -            ///  Falling trigger event configuration of line 2
    -            TR2: u1,
    -            ///  Falling trigger event configuration of line 3
    -            TR3: u1,
    -            ///  Falling trigger event configuration of line 4
    -            TR4: u1,
    -            ///  Falling trigger event configuration of line 5
    -            TR5: u1,
    -            ///  Falling trigger event configuration of line 6
    -            TR6: u1,
    -            ///  Falling trigger event configuration of line 7
    -            TR7: u1,
    -            ///  Falling trigger event configuration of line 8
    -            TR8: u1,
    -            ///  Falling trigger event configuration of line 9
    -            TR9: u1,
    -            ///  Falling trigger event configuration of line 10
    -            TR10: u1,
    -            ///  Falling trigger event configuration of line 11
    -            TR11: u1,
    -            ///  Falling trigger event configuration of line 12
    -            TR12: u1,
    -            ///  Falling trigger event configuration of line 13
    -            TR13: u1,
    -            ///  Falling trigger event configuration of line 14
    -            TR14: u1,
    -            ///  Falling trigger event configuration of line 15
    -            TR15: u1,
    -            ///  Falling trigger event configuration of line 16
    -            TR16: u1,
    -            ///  Falling trigger event configuration of line 17
    -            TR17: u1,
    -            ///  Falling trigger event configuration of line 18
    -            TR18: u1,
    -            ///  Falling trigger event configuration of line 19
    -            TR19: u1,
    -            ///  Falling trigger event configuration of line 20
    -            TR20: u1,
    -            ///  Falling trigger event configuration of line 21
    -            TR21: u1,
    -            ///  Falling trigger event configuration of line 22
    -            TR22: u1,
    -            reserved29: u6,
    -            ///  Falling trigger event configuration of line 29
    -            TR29: u1,
    -            ///  Falling trigger event configuration of line 30.
    -            TR30: u1,
    -            ///  Falling trigger event configuration of line 31
    -            TR31: u1,
    -        }),
    -        ///  Software interrupt event register
    -        SWIER1: mmio.Mmio(packed struct(u32) {
    -            ///  Software Interrupt on line 0
    -            SWIER0: u1,
    -            ///  Software Interrupt on line 1
    -            SWIER1: u1,
    -            ///  Software Interrupt on line 2
    -            SWIER2: u1,
    -            ///  Software Interrupt on line 3
    -            SWIER3: u1,
    -            ///  Software Interrupt on line 4
    -            SWIER4: u1,
    -            ///  Software Interrupt on line 5
    -            SWIER5: u1,
    -            ///  Software Interrupt on line 6
    -            SWIER6: u1,
    -            ///  Software Interrupt on line 7
    -            SWIER7: u1,
    -            ///  Software Interrupt on line 8
    -            SWIER8: u1,
    -            ///  Software Interrupt on line 9
    -            SWIER9: u1,
    -            ///  Software Interrupt on line 10
    -            SWIER10: u1,
    -            ///  Software Interrupt on line 11
    -            SWIER11: u1,
    -            ///  Software Interrupt on line 12
    -            SWIER12: u1,
    -            ///  Software Interrupt on line 13
    -            SWIER13: u1,
    -            ///  Software Interrupt on line 14
    -            SWIER14: u1,
    -            ///  Software Interrupt on line 15
    -            SWIER15: u1,
    -            ///  Software Interrupt on line 16
    -            SWIER16: u1,
    -            ///  Software Interrupt on line 17
    -            SWIER17: u1,
    -            ///  Software Interrupt on line 18
    -            SWIER18: u1,
    -            ///  Software Interrupt on line 19
    -            SWIER19: u1,
    -            ///  Software Interrupt on line 20
    -            SWIER20: u1,
    -            ///  Software Interrupt on line 21
    -            SWIER21: u1,
    -            ///  Software Interrupt on line 22
    -            SWIER22: u1,
    -            reserved29: u6,
    -            ///  Software Interrupt on line 29
    -            SWIER29: u1,
    -            ///  Software Interrupt on line 309
    -            SWIER30: u1,
    -            ///  Software Interrupt on line 319
    -            SWIER31: u1,
    -        }),
    -        ///  Pending register
    -        PR1: mmio.Mmio(packed struct(u32) {
    -            ///  Pending bit 0
    -            PR0: u1,
    -            ///  Pending bit 1
    -            PR1: u1,
    -            ///  Pending bit 2
    -            PR2: u1,
    -            ///  Pending bit 3
    -            PR3: u1,
    -            ///  Pending bit 4
    -            PR4: u1,
    -            ///  Pending bit 5
    -            PR5: u1,
    -            ///  Pending bit 6
    -            PR6: u1,
    -            ///  Pending bit 7
    -            PR7: u1,
    -            ///  Pending bit 8
    -            PR8: u1,
    -            ///  Pending bit 9
    -            PR9: u1,
    -            ///  Pending bit 10
    -            PR10: u1,
    -            ///  Pending bit 11
    -            PR11: u1,
    -            ///  Pending bit 12
    -            PR12: u1,
    -            ///  Pending bit 13
    -            PR13: u1,
    -            ///  Pending bit 14
    -            PR14: u1,
    -            ///  Pending bit 15
    -            PR15: u1,
    -            ///  Pending bit 16
    -            PR16: u1,
    -            ///  Pending bit 17
    -            PR17: u1,
    -            ///  Pending bit 18
    -            PR18: u1,
    -            ///  Pending bit 19
    -            PR19: u1,
    -            ///  Pending bit 20
    -            PR20: u1,
    -            ///  Pending bit 21
    -            PR21: u1,
    -            ///  Pending bit 22
    -            PR22: u1,
    -            reserved29: u6,
    -            ///  Pending bit 29
    -            PR29: u1,
    -            ///  Pending bit 30
    -            PR30: u1,
    -            ///  Pending bit 31
    -            PR31: u1,
    -        }),
    -        ///  Interrupt mask register
    -        IMR2: mmio.Mmio(packed struct(u32) {
    -            ///  Interrupt Mask on external/internal line 32
    -            MR32: u1,
    -            ///  Interrupt Mask on external/internal line 33
    -            MR33: u1,
    -            ///  Interrupt Mask on external/internal line 34
    -            MR34: u1,
    -            ///  Interrupt Mask on external/internal line 35
    -            MR35: u1,
    -            padding: u28,
    -        }),
    -        ///  Event mask register
    -        EMR2: mmio.Mmio(packed struct(u32) {
    -            ///  Event mask on external/internal line 32
    -            MR32: u1,
    -            ///  Event mask on external/internal line 33
    -            MR33: u1,
    -            ///  Event mask on external/internal line 34
    -            MR34: u1,
    -            ///  Event mask on external/internal line 35
    -            MR35: u1,
    -            padding: u28,
    -        }),
    -        ///  Rising Trigger selection register
    -        RTSR2: mmio.Mmio(packed struct(u32) {
    -            ///  Rising trigger event configuration bit of line 32
    -            TR32: u1,
    -            ///  Rising trigger event configuration bit of line 33
    -            TR33: u1,
    -            padding: u30,
    -        }),
    -        ///  Falling Trigger selection register
    -        FTSR2: mmio.Mmio(packed struct(u32) {
    -            ///  Falling trigger event configuration bit of line 32
    -            TR32: u1,
    -            ///  Falling trigger event configuration bit of line 33
    -            TR33: u1,
    -            padding: u30,
    -        }),
    -        ///  Software interrupt event register
    -        SWIER2: mmio.Mmio(packed struct(u32) {
    -            ///  Software interrupt on line 32
    -            SWIER32: u1,
    -            ///  Software interrupt on line 33
    -            SWIER33: u1,
    -            padding: u30,
    -        }),
    -        ///  Pending register
    -        PR2: mmio.Mmio(packed struct(u32) {
    -            ///  Pending bit on line 32
    -            PR32: u1,
    -            ///  Pending bit on line 33
    -            PR33: u1,
    -            padding: u30,
    -        }),
    -    };
    -
    -    ///  Power control
    -    pub const PWR = extern struct {
    -        ///  power control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  Low-power deep sleep
    -            LPDS: u1,
    -            ///  Power down deepsleep
    -            PDDS: u1,
    -            ///  Clear wakeup flag
    -            CWUF: u1,
    -            ///  Clear standby flag
    -            CSBF: u1,
    -            ///  Power voltage detector enable
    -            PVDE: u1,
    -            ///  PVD level selection
    -            PLS: u3,
    -            ///  Disable backup domain write protection
    -            DBP: u1,
    -            padding: u23,
    -        }),
    -        ///  power control/status register
    -        CSR: mmio.Mmio(packed struct(u32) {
    -            ///  Wakeup flag
    -            WUF: u1,
    -            ///  Standby flag
    -            SBF: u1,
    -            ///  PVD output
    -            PVDO: u1,
    -            reserved8: u5,
    -            ///  Enable WKUP1 pin
    -            EWUP1: u1,
    -            ///  Enable WKUP2 pin
    -            EWUP2: u1,
    -            padding: u22,
    -        }),
    -    };
    -
    -    ///  Controller area network
    -    pub const CAN = extern struct {
    -        ///  master control register
    -        MCR: mmio.Mmio(packed struct(u32) {
    -            ///  INRQ
    -            INRQ: u1,
    -            ///  SLEEP
    -            SLEEP: u1,
    -            ///  TXFP
    -            TXFP: u1,
    -            ///  RFLM
    -            RFLM: u1,
    -            ///  NART
    -            NART: u1,
    -            ///  AWUM
    -            AWUM: u1,
    -            ///  ABOM
    -            ABOM: u1,
    -            ///  TTCM
    -            TTCM: u1,
    -            reserved15: u7,
    -            ///  RESET
    -            RESET: u1,
    -            ///  DBF
    -            DBF: u1,
    -            padding: u15,
    -        }),
    -        ///  master status register
    -        MSR: mmio.Mmio(packed struct(u32) {
    -            ///  INAK
    -            INAK: u1,
    -            ///  SLAK
    -            SLAK: u1,
    -            ///  ERRI
    -            ERRI: u1,
    -            ///  WKUI
    -            WKUI: u1,
    -            ///  SLAKI
    -            SLAKI: u1,
    -            reserved8: u3,
    -            ///  TXM
    -            TXM: u1,
    -            ///  RXM
    -            RXM: u1,
    -            ///  SAMP
    -            SAMP: u1,
    -            ///  RX
    -            RX: u1,
    -            padding: u20,
    -        }),
    -        ///  transmit status register
    -        TSR: mmio.Mmio(packed struct(u32) {
    -            ///  RQCP0
    -            RQCP0: u1,
    -            ///  TXOK0
    -            TXOK0: u1,
    -            ///  ALST0
    -            ALST0: u1,
    -            ///  TERR0
    -            TERR0: u1,
    -            reserved7: u3,
    -            ///  ABRQ0
    -            ABRQ0: u1,
    -            ///  RQCP1
    -            RQCP1: u1,
    -            ///  TXOK1
    -            TXOK1: u1,
    -            ///  ALST1
    -            ALST1: u1,
    -            ///  TERR1
    -            TERR1: u1,
    -            reserved15: u3,
    -            ///  ABRQ1
    -            ABRQ1: u1,
    -            ///  RQCP2
    -            RQCP2: u1,
    -            ///  TXOK2
    -            TXOK2: u1,
    -            ///  ALST2
    -            ALST2: u1,
    -            ///  TERR2
    -            TERR2: u1,
    -            reserved23: u3,
    -            ///  ABRQ2
    -            ABRQ2: u1,
    -            ///  CODE
    -            CODE: u2,
    -            ///  Lowest priority flag for mailbox 0
    -            TME0: u1,
    -            ///  Lowest priority flag for mailbox 1
    -            TME1: u1,
    -            ///  Lowest priority flag for mailbox 2
    -            TME2: u1,
    -            ///  Lowest priority flag for mailbox 0
    -            LOW0: u1,
    -            ///  Lowest priority flag for mailbox 1
    -            LOW1: u1,
    -            ///  Lowest priority flag for mailbox 2
    -            LOW2: u1,
    -        }),
    -        ///  receive FIFO 0 register
    -        RF0R: mmio.Mmio(packed struct(u32) {
    -            ///  FMP0
    -            FMP0: u2,
    -            reserved3: u1,
    -            ///  FULL0
    -            FULL0: u1,
    -            ///  FOVR0
    -            FOVR0: u1,
    -            ///  RFOM0
    -            RFOM0: u1,
    -            padding: u26,
    -        }),
    -        ///  receive FIFO 1 register
    -        RF1R: mmio.Mmio(packed struct(u32) {
    -            ///  FMP1
    -            FMP1: u2,
    -            reserved3: u1,
    -            ///  FULL1
    -            FULL1: u1,
    -            ///  FOVR1
    -            FOVR1: u1,
    -            ///  RFOM1
    -            RFOM1: u1,
    -            padding: u26,
    -        }),
    -        ///  interrupt enable register
    -        IER: mmio.Mmio(packed struct(u32) {
    -            ///  TMEIE
    -            TMEIE: u1,
    -            ///  FMPIE0
    -            FMPIE0: u1,
    -            ///  FFIE0
    -            FFIE0: u1,
    -            ///  FOVIE0
    -            FOVIE0: u1,
    -            ///  FMPIE1
    -            FMPIE1: u1,
    -            ///  FFIE1
    -            FFIE1: u1,
    -            ///  FOVIE1
    -            FOVIE1: u1,
    -            reserved8: u1,
    -            ///  EWGIE
    -            EWGIE: u1,
    -            ///  EPVIE
    -            EPVIE: u1,
    -            ///  BOFIE
    -            BOFIE: u1,
    -            ///  LECIE
    -            LECIE: u1,
    -            reserved15: u3,
    -            ///  ERRIE
    -            ERRIE: u1,
    -            ///  WKUIE
    -            WKUIE: u1,
    -            ///  SLKIE
    -            SLKIE: u1,
    -            padding: u14,
    -        }),
    -        ///  error status register
    -        ESR: mmio.Mmio(packed struct(u32) {
    -            ///  EWGF
    -            EWGF: u1,
    -            ///  EPVF
    -            EPVF: u1,
    -            ///  BOFF
    -            BOFF: u1,
    -            reserved4: u1,
    -            ///  LEC
    -            LEC: u3,
    -            reserved16: u9,
    -            ///  TEC
    -            TEC: u8,
    -            ///  REC
    -            REC: u8,
    -        }),
    -        ///  bit timing register
    -        BTR: mmio.Mmio(packed struct(u32) {
    -            ///  BRP
    -            BRP: u10,
    -            reserved16: u6,
    -            ///  TS1
    -            TS1: u4,
    -            ///  TS2
    -            TS2: u3,
    -            reserved24: u1,
    -            ///  SJW
    -            SJW: u2,
    -            reserved30: u4,
    -            ///  LBKM
    -            LBKM: u1,
    -            ///  SILM
    -            SILM: u1,
    -        }),
    -        reserved384: [352]u8,
    -        ///  TX mailbox identifier register
    -        TI0R: mmio.Mmio(packed struct(u32) {
    -            ///  TXRQ
    -            TXRQ: u1,
    -            ///  RTR
    -            RTR: u1,
    -            ///  IDE
    -            IDE: u1,
    -            ///  EXID
    -            EXID: u18,
    -            ///  STID
    -            STID: u11,
    -        }),
    -        ///  mailbox data length control and time stamp register
    -        TDT0R: mmio.Mmio(packed struct(u32) {
    -            ///  DLC
    -            DLC: u4,
    -            reserved8: u4,
    -            ///  TGT
    -            TGT: u1,
    -            reserved16: u7,
    -            ///  TIME
    -            TIME: u16,
    -        }),
    -        ///  mailbox data low register
    -        TDL0R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA0
    -            DATA0: u8,
    -            ///  DATA1
    -            DATA1: u8,
    -            ///  DATA2
    -            DATA2: u8,
    -            ///  DATA3
    -            DATA3: u8,
    -        }),
    -        ///  mailbox data high register
    -        TDH0R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA4
    -            DATA4: u8,
    -            ///  DATA5
    -            DATA5: u8,
    -            ///  DATA6
    -            DATA6: u8,
    -            ///  DATA7
    -            DATA7: u8,
    -        }),
    -        ///  TX mailbox identifier register
    -        TI1R: mmio.Mmio(packed struct(u32) {
    -            ///  TXRQ
    -            TXRQ: u1,
    -            ///  RTR
    -            RTR: u1,
    -            ///  IDE
    -            IDE: u1,
    -            ///  EXID
    -            EXID: u18,
    -            ///  STID
    -            STID: u11,
    -        }),
    -        ///  mailbox data length control and time stamp register
    -        TDT1R: mmio.Mmio(packed struct(u32) {
    -            ///  DLC
    -            DLC: u4,
    -            reserved8: u4,
    -            ///  TGT
    -            TGT: u1,
    -            reserved16: u7,
    -            ///  TIME
    -            TIME: u16,
    -        }),
    -        ///  mailbox data low register
    -        TDL1R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA0
    -            DATA0: u8,
    -            ///  DATA1
    -            DATA1: u8,
    -            ///  DATA2
    -            DATA2: u8,
    -            ///  DATA3
    -            DATA3: u8,
    -        }),
    -        ///  mailbox data high register
    -        TDH1R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA4
    -            DATA4: u8,
    -            ///  DATA5
    -            DATA5: u8,
    -            ///  DATA6
    -            DATA6: u8,
    -            ///  DATA7
    -            DATA7: u8,
    -        }),
    -        ///  TX mailbox identifier register
    -        TI2R: mmio.Mmio(packed struct(u32) {
    -            ///  TXRQ
    -            TXRQ: u1,
    -            ///  RTR
    -            RTR: u1,
    -            ///  IDE
    -            IDE: u1,
    -            ///  EXID
    -            EXID: u18,
    -            ///  STID
    -            STID: u11,
    -        }),
    -        ///  mailbox data length control and time stamp register
    -        TDT2R: mmio.Mmio(packed struct(u32) {
    -            ///  DLC
    -            DLC: u4,
    -            reserved8: u4,
    -            ///  TGT
    -            TGT: u1,
    -            reserved16: u7,
    -            ///  TIME
    -            TIME: u16,
    -        }),
    -        ///  mailbox data low register
    -        TDL2R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA0
    -            DATA0: u8,
    -            ///  DATA1
    -            DATA1: u8,
    -            ///  DATA2
    -            DATA2: u8,
    -            ///  DATA3
    -            DATA3: u8,
    -        }),
    -        ///  mailbox data high register
    -        TDH2R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA4
    -            DATA4: u8,
    -            ///  DATA5
    -            DATA5: u8,
    -            ///  DATA6
    -            DATA6: u8,
    -            ///  DATA7
    -            DATA7: u8,
    -        }),
    -        ///  receive FIFO mailbox identifier register
    -        RI0R: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  RTR
    -            RTR: u1,
    -            ///  IDE
    -            IDE: u1,
    -            ///  EXID
    -            EXID: u18,
    -            ///  STID
    -            STID: u11,
    -        }),
    -        ///  receive FIFO mailbox data length control and time stamp register
    -        RDT0R: mmio.Mmio(packed struct(u32) {
    -            ///  DLC
    -            DLC: u4,
    -            reserved8: u4,
    -            ///  FMI
    -            FMI: u8,
    -            ///  TIME
    -            TIME: u16,
    -        }),
    -        ///  receive FIFO mailbox data low register
    -        RDL0R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA0
    -            DATA0: u8,
    -            ///  DATA1
    -            DATA1: u8,
    -            ///  DATA2
    -            DATA2: u8,
    -            ///  DATA3
    -            DATA3: u8,
    -        }),
    -        ///  receive FIFO mailbox data high register
    -        RDH0R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA4
    -            DATA4: u8,
    -            ///  DATA5
    -            DATA5: u8,
    -            ///  DATA6
    -            DATA6: u8,
    -            ///  DATA7
    -            DATA7: u8,
    -        }),
    -        ///  receive FIFO mailbox identifier register
    -        RI1R: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  RTR
    -            RTR: u1,
    -            ///  IDE
    -            IDE: u1,
    -            ///  EXID
    -            EXID: u18,
    -            ///  STID
    -            STID: u11,
    -        }),
    -        ///  receive FIFO mailbox data length control and time stamp register
    -        RDT1R: mmio.Mmio(packed struct(u32) {
    -            ///  DLC
    -            DLC: u4,
    -            reserved8: u4,
    -            ///  FMI
    -            FMI: u8,
    -            ///  TIME
    -            TIME: u16,
    -        }),
    -        ///  receive FIFO mailbox data low register
    -        RDL1R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA0
    -            DATA0: u8,
    -            ///  DATA1
    -            DATA1: u8,
    -            ///  DATA2
    -            DATA2: u8,
    -            ///  DATA3
    -            DATA3: u8,
    -        }),
    -        ///  receive FIFO mailbox data high register
    -        RDH1R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA4
    -            DATA4: u8,
    -            ///  DATA5
    -            DATA5: u8,
    -            ///  DATA6
    -            DATA6: u8,
    -            ///  DATA7
    -            DATA7: u8,
    -        }),
    -        reserved512: [48]u8,
    -        ///  filter master register
    -        FMR: mmio.Mmio(packed struct(u32) {
    -            ///  Filter init mode
    -            FINIT: u1,
    -            reserved8: u7,
    -            ///  CAN2 start bank
    -            CAN2SB: u6,
    -            padding: u18,
    -        }),
    -        ///  filter mode register
    -        FM1R: mmio.Mmio(packed struct(u32) {
    -            ///  Filter mode
    -            FBM0: u1,
    -            ///  Filter mode
    -            FBM1: u1,
    -            ///  Filter mode
    -            FBM2: u1,
    -            ///  Filter mode
    -            FBM3: u1,
    -            ///  Filter mode
    -            FBM4: u1,
    -            ///  Filter mode
    -            FBM5: u1,
    -            ///  Filter mode
    -            FBM6: u1,
    -            ///  Filter mode
    -            FBM7: u1,
    -            ///  Filter mode
    -            FBM8: u1,
    -            ///  Filter mode
    -            FBM9: u1,
    -            ///  Filter mode
    -            FBM10: u1,
    -            ///  Filter mode
    -            FBM11: u1,
    -            ///  Filter mode
    -            FBM12: u1,
    -            ///  Filter mode
    -            FBM13: u1,
    -            ///  Filter mode
    -            FBM14: u1,
    -            ///  Filter mode
    -            FBM15: u1,
    -            ///  Filter mode
    -            FBM16: u1,
    -            ///  Filter mode
    -            FBM17: u1,
    -            ///  Filter mode
    -            FBM18: u1,
    -            ///  Filter mode
    -            FBM19: u1,
    -            ///  Filter mode
    -            FBM20: u1,
    -            ///  Filter mode
    -            FBM21: u1,
    -            ///  Filter mode
    -            FBM22: u1,
    -            ///  Filter mode
    -            FBM23: u1,
    -            ///  Filter mode
    -            FBM24: u1,
    -            ///  Filter mode
    -            FBM25: u1,
    -            ///  Filter mode
    -            FBM26: u1,
    -            ///  Filter mode
    -            FBM27: u1,
    -            padding: u4,
    -        }),
    -        reserved524: [4]u8,
    -        ///  filter scale register
    -        FS1R: mmio.Mmio(packed struct(u32) {
    -            ///  Filter scale configuration
    -            FSC0: u1,
    -            ///  Filter scale configuration
    -            FSC1: u1,
    -            ///  Filter scale configuration
    -            FSC2: u1,
    -            ///  Filter scale configuration
    -            FSC3: u1,
    -            ///  Filter scale configuration
    -            FSC4: u1,
    -            ///  Filter scale configuration
    -            FSC5: u1,
    -            ///  Filter scale configuration
    -            FSC6: u1,
    -            ///  Filter scale configuration
    -            FSC7: u1,
    -            ///  Filter scale configuration
    -            FSC8: u1,
    -            ///  Filter scale configuration
    -            FSC9: u1,
    -            ///  Filter scale configuration
    -            FSC10: u1,
    -            ///  Filter scale configuration
    -            FSC11: u1,
    -            ///  Filter scale configuration
    -            FSC12: u1,
    -            ///  Filter scale configuration
    -            FSC13: u1,
    -            ///  Filter scale configuration
    -            FSC14: u1,
    -            ///  Filter scale configuration
    -            FSC15: u1,
    -            ///  Filter scale configuration
    -            FSC16: u1,
    -            ///  Filter scale configuration
    -            FSC17: u1,
    -            ///  Filter scale configuration
    -            FSC18: u1,
    -            ///  Filter scale configuration
    -            FSC19: u1,
    -            ///  Filter scale configuration
    -            FSC20: u1,
    -            ///  Filter scale configuration
    -            FSC21: u1,
    -            ///  Filter scale configuration
    -            FSC22: u1,
    -            ///  Filter scale configuration
    -            FSC23: u1,
    -            ///  Filter scale configuration
    -            FSC24: u1,
    -            ///  Filter scale configuration
    -            FSC25: u1,
    -            ///  Filter scale configuration
    -            FSC26: u1,
    -            ///  Filter scale configuration
    -            FSC27: u1,
    -            padding: u4,
    -        }),
    -        reserved532: [4]u8,
    -        ///  filter FIFO assignment register
    -        FFA1R: mmio.Mmio(packed struct(u32) {
    -            ///  Filter FIFO assignment for filter 0
    -            FFA0: u1,
    -            ///  Filter FIFO assignment for filter 1
    -            FFA1: u1,
    -            ///  Filter FIFO assignment for filter 2
    -            FFA2: u1,
    -            ///  Filter FIFO assignment for filter 3
    -            FFA3: u1,
    -            ///  Filter FIFO assignment for filter 4
    -            FFA4: u1,
    -            ///  Filter FIFO assignment for filter 5
    -            FFA5: u1,
    -            ///  Filter FIFO assignment for filter 6
    -            FFA6: u1,
    -            ///  Filter FIFO assignment for filter 7
    -            FFA7: u1,
    -            ///  Filter FIFO assignment for filter 8
    -            FFA8: u1,
    -            ///  Filter FIFO assignment for filter 9
    -            FFA9: u1,
    -            ///  Filter FIFO assignment for filter 10
    -            FFA10: u1,
    -            ///  Filter FIFO assignment for filter 11
    -            FFA11: u1,
    -            ///  Filter FIFO assignment for filter 12
    -            FFA12: u1,
    -            ///  Filter FIFO assignment for filter 13
    -            FFA13: u1,
    -            ///  Filter FIFO assignment for filter 14
    -            FFA14: u1,
    -            ///  Filter FIFO assignment for filter 15
    -            FFA15: u1,
    -            ///  Filter FIFO assignment for filter 16
    -            FFA16: u1,
    -            ///  Filter FIFO assignment for filter 17
    -            FFA17: u1,
    -            ///  Filter FIFO assignment for filter 18
    -            FFA18: u1,
    -            ///  Filter FIFO assignment for filter 19
    -            FFA19: u1,
    -            ///  Filter FIFO assignment for filter 20
    -            FFA20: u1,
    -            ///  Filter FIFO assignment for filter 21
    -            FFA21: u1,
    -            ///  Filter FIFO assignment for filter 22
    -            FFA22: u1,
    -            ///  Filter FIFO assignment for filter 23
    -            FFA23: u1,
    -            ///  Filter FIFO assignment for filter 24
    -            FFA24: u1,
    -            ///  Filter FIFO assignment for filter 25
    -            FFA25: u1,
    -            ///  Filter FIFO assignment for filter 26
    -            FFA26: u1,
    -            ///  Filter FIFO assignment for filter 27
    -            FFA27: u1,
    -            padding: u4,
    -        }),
    -        reserved540: [4]u8,
    -        ///  CAN filter activation register
    -        FA1R: mmio.Mmio(packed struct(u32) {
    -            ///  Filter active
    -            FACT0: u1,
    -            ///  Filter active
    -            FACT1: u1,
    -            ///  Filter active
    -            FACT2: u1,
    -            ///  Filter active
    -            FACT3: u1,
    -            ///  Filter active
    -            FACT4: u1,
    -            ///  Filter active
    -            FACT5: u1,
    -            ///  Filter active
    -            FACT6: u1,
    -            ///  Filter active
    -            FACT7: u1,
    -            ///  Filter active
    -            FACT8: u1,
    -            ///  Filter active
    -            FACT9: u1,
    -            ///  Filter active
    -            FACT10: u1,
    -            ///  Filter active
    -            FACT11: u1,
    -            ///  Filter active
    -            FACT12: u1,
    -            ///  Filter active
    -            FACT13: u1,
    -            ///  Filter active
    -            FACT14: u1,
    -            ///  Filter active
    -            FACT15: u1,
    -            ///  Filter active
    -            FACT16: u1,
    -            ///  Filter active
    -            FACT17: u1,
    -            ///  Filter active
    -            FACT18: u1,
    -            ///  Filter active
    -            FACT19: u1,
    -            ///  Filter active
    -            FACT20: u1,
    -            ///  Filter active
    -            FACT21: u1,
    -            ///  Filter active
    -            FACT22: u1,
    -            ///  Filter active
    -            FACT23: u1,
    -            ///  Filter active
    -            FACT24: u1,
    -            ///  Filter active
    -            FACT25: u1,
    -            ///  Filter active
    -            FACT26: u1,
    -            ///  Filter active
    -            FACT27: u1,
    -            padding: u4,
    -        }),
    -        reserved576: [32]u8,
    -        ///  Filter bank 0 register 1
    -        F0R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 0 register 2
    -        F0R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 1 register 1
    -        F1R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 1 register 2
    -        F1R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 2 register 1
    -        F2R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 2 register 2
    -        F2R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 3 register 1
    -        F3R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 3 register 2
    -        F3R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 4 register 1
    -        F4R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 4 register 2
    -        F4R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 5 register 1
    -        F5R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 5 register 2
    -        F5R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 6 register 1
    -        F6R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 6 register 2
    -        F6R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 7 register 1
    -        F7R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 7 register 2
    -        F7R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 8 register 1
    -        F8R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 8 register 2
    -        F8R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 9 register 1
    -        F9R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 9 register 2
    -        F9R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 10 register 1
    -        F10R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 10 register 2
    -        F10R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 11 register 1
    -        F11R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 11 register 2
    -        F11R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 4 register 1
    -        F12R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 12 register 2
    -        F12R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 13 register 1
    -        F13R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 13 register 2
    -        F13R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 14 register 1
    -        F14R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 14 register 2
    -        F14R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 15 register 1
    -        F15R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 15 register 2
    -        F15R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 16 register 1
    -        F16R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 16 register 2
    -        F16R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 17 register 1
    -        F17R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 17 register 2
    -        F17R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 18 register 1
    -        F18R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 18 register 2
    -        F18R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 19 register 1
    -        F19R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 19 register 2
    -        F19R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 20 register 1
    -        F20R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 20 register 2
    -        F20R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 21 register 1
    -        F21R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 21 register 2
    -        F21R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 22 register 1
    -        F22R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 22 register 2
    -        F22R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 23 register 1
    -        F23R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 23 register 2
    -        F23R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 24 register 1
    -        F24R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 24 register 2
    -        F24R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 25 register 1
    -        F25R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 25 register 2
    -        F25R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 26 register 1
    -        F26R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 26 register 2
    -        F26R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 27 register 1
    -        F27R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 27 register 2
    -        F27R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -    };
    -
    -    ///  Universal serial bus full-speed device interface
    -    pub const USB_FS = extern struct {
    -        ///  endpoint 0 register
    -        USB_EP0R: mmio.Mmio(packed struct(u32) {
    -            ///  Endpoint address
    -            EA: u4,
    -            ///  Status bits, for transmission transfers
    -            STAT_TX: u2,
    -            ///  Data Toggle, for transmission transfers
    -            DTOG_TX: u1,
    -            ///  Correct Transfer for transmission
    -            CTR_TX: u1,
    -            ///  Endpoint kind
    -            EP_KIND: u1,
    -            ///  Endpoint type
    -            EP_TYPE: u2,
    -            ///  Setup transaction completed
    -            SETUP: u1,
    -            ///  Status bits, for reception transfers
    -            STAT_RX: u2,
    -            ///  Data Toggle, for reception transfers
    -            DTOG_RX: u1,
    -            ///  Correct transfer for reception
    -            CTR_RX: u1,
    -            padding: u16,
    -        }),
    -        ///  endpoint 1 register
    -        USB_EP1R: mmio.Mmio(packed struct(u32) {
    -            ///  Endpoint address
    -            EA: u4,
    -            ///  Status bits, for transmission transfers
    -            STAT_TX: u2,
    -            ///  Data Toggle, for transmission transfers
    -            DTOG_TX: u1,
    -            ///  Correct Transfer for transmission
    -            CTR_TX: u1,
    -            ///  Endpoint kind
    -            EP_KIND: u1,
    -            ///  Endpoint type
    -            EP_TYPE: u2,
    -            ///  Setup transaction completed
    -            SETUP: u1,
    -            ///  Status bits, for reception transfers
    -            STAT_RX: u2,
    -            ///  Data Toggle, for reception transfers
    -            DTOG_RX: u1,
    -            ///  Correct transfer for reception
    -            CTR_RX: u1,
    -            padding: u16,
    -        }),
    -        ///  endpoint 2 register
    -        USB_EP2R: mmio.Mmio(packed struct(u32) {
    -            ///  Endpoint address
    -            EA: u4,
    -            ///  Status bits, for transmission transfers
    -            STAT_TX: u2,
    -            ///  Data Toggle, for transmission transfers
    -            DTOG_TX: u1,
    -            ///  Correct Transfer for transmission
    -            CTR_TX: u1,
    -            ///  Endpoint kind
    -            EP_KIND: u1,
    -            ///  Endpoint type
    -            EP_TYPE: u2,
    -            ///  Setup transaction completed
    -            SETUP: u1,
    -            ///  Status bits, for reception transfers
    -            STAT_RX: u2,
    -            ///  Data Toggle, for reception transfers
    -            DTOG_RX: u1,
    -            ///  Correct transfer for reception
    -            CTR_RX: u1,
    -            padding: u16,
    -        }),
    -        ///  endpoint 3 register
    -        USB_EP3R: mmio.Mmio(packed struct(u32) {
    -            ///  Endpoint address
    -            EA: u4,
    -            ///  Status bits, for transmission transfers
    -            STAT_TX: u2,
    -            ///  Data Toggle, for transmission transfers
    -            DTOG_TX: u1,
    -            ///  Correct Transfer for transmission
    -            CTR_TX: u1,
    -            ///  Endpoint kind
    -            EP_KIND: u1,
    -            ///  Endpoint type
    -            EP_TYPE: u2,
    -            ///  Setup transaction completed
    -            SETUP: u1,
    -            ///  Status bits, for reception transfers
    -            STAT_RX: u2,
    -            ///  Data Toggle, for reception transfers
    -            DTOG_RX: u1,
    -            ///  Correct transfer for reception
    -            CTR_RX: u1,
    -            padding: u16,
    -        }),
    -        ///  endpoint 4 register
    -        USB_EP4R: mmio.Mmio(packed struct(u32) {
    -            ///  Endpoint address
    -            EA: u4,
    -            ///  Status bits, for transmission transfers
    -            STAT_TX: u2,
    -            ///  Data Toggle, for transmission transfers
    -            DTOG_TX: u1,
    -            ///  Correct Transfer for transmission
    -            CTR_TX: u1,
    -            ///  Endpoint kind
    -            EP_KIND: u1,
    -            ///  Endpoint type
    -            EP_TYPE: u2,
    -            ///  Setup transaction completed
    -            SETUP: u1,
    -            ///  Status bits, for reception transfers
    -            STAT_RX: u2,
    -            ///  Data Toggle, for reception transfers
    -            DTOG_RX: u1,
    -            ///  Correct transfer for reception
    -            CTR_RX: u1,
    -            padding: u16,
    -        }),
    -        ///  endpoint 5 register
    -        USB_EP5R: mmio.Mmio(packed struct(u32) {
    -            ///  Endpoint address
    -            EA: u4,
    -            ///  Status bits, for transmission transfers
    -            STAT_TX: u2,
    -            ///  Data Toggle, for transmission transfers
    -            DTOG_TX: u1,
    -            ///  Correct Transfer for transmission
    -            CTR_TX: u1,
    -            ///  Endpoint kind
    -            EP_KIND: u1,
    -            ///  Endpoint type
    -            EP_TYPE: u2,
    -            ///  Setup transaction completed
    -            SETUP: u1,
    -            ///  Status bits, for reception transfers
    -            STAT_RX: u2,
    -            ///  Data Toggle, for reception transfers
    -            DTOG_RX: u1,
    -            ///  Correct transfer for reception
    -            CTR_RX: u1,
    -            padding: u16,
    -        }),
    -        ///  endpoint 6 register
    -        USB_EP6R: mmio.Mmio(packed struct(u32) {
    -            ///  Endpoint address
    -            EA: u4,
    -            ///  Status bits, for transmission transfers
    -            STAT_TX: u2,
    -            ///  Data Toggle, for transmission transfers
    -            DTOG_TX: u1,
    -            ///  Correct Transfer for transmission
    -            CTR_TX: u1,
    -            ///  Endpoint kind
    -            EP_KIND: u1,
    -            ///  Endpoint type
    -            EP_TYPE: u2,
    -            ///  Setup transaction completed
    -            SETUP: u1,
    -            ///  Status bits, for reception transfers
    -            STAT_RX: u2,
    -            ///  Data Toggle, for reception transfers
    -            DTOG_RX: u1,
    -            ///  Correct transfer for reception
    -            CTR_RX: u1,
    -            padding: u16,
    -        }),
    -        ///  endpoint 7 register
    -        USB_EP7R: mmio.Mmio(packed struct(u32) {
    -            ///  Endpoint address
    -            EA: u4,
    -            ///  Status bits, for transmission transfers
    -            STAT_TX: u2,
    -            ///  Data Toggle, for transmission transfers
    -            DTOG_TX: u1,
    -            ///  Correct Transfer for transmission
    -            CTR_TX: u1,
    -            ///  Endpoint kind
    -            EP_KIND: u1,
    -            ///  Endpoint type
    -            EP_TYPE: u2,
    -            ///  Setup transaction completed
    -            SETUP: u1,
    -            ///  Status bits, for reception transfers
    -            STAT_RX: u2,
    -            ///  Data Toggle, for reception transfers
    -            DTOG_RX: u1,
    -            ///  Correct transfer for reception
    -            CTR_RX: u1,
    -            padding: u16,
    -        }),
    -        reserved64: [32]u8,
    -        ///  control register
    -        USB_CNTR: mmio.Mmio(packed struct(u32) {
    -            ///  Force USB Reset
    -            FRES: u1,
    -            ///  Power down
    -            PDWN: u1,
    -            ///  Low-power mode
    -            LPMODE: u1,
    -            ///  Force suspend
    -            FSUSP: u1,
    -            ///  Resume request
    -            RESUME: u1,
    -            reserved8: u3,
    -            ///  Expected start of frame interrupt mask
    -            ESOFM: u1,
    -            ///  Start of frame interrupt mask
    -            SOFM: u1,
    -            ///  USB reset interrupt mask
    -            RESETM: u1,
    -            ///  Suspend mode interrupt mask
    -            SUSPM: u1,
    -            ///  Wakeup interrupt mask
    -            WKUPM: u1,
    -            ///  Error interrupt mask
    -            ERRM: u1,
    -            ///  Packet memory area over / underrun interrupt mask
    -            PMAOVRM: u1,
    -            ///  Correct transfer interrupt mask
    -            CTRM: u1,
    -            padding: u16,
    -        }),
    -        ///  interrupt status register
    -        ISTR: mmio.Mmio(packed struct(u32) {
    -            ///  Endpoint Identifier
    -            EP_ID: u4,
    -            ///  Direction of transaction
    -            DIR: u1,
    -            reserved8: u3,
    -            ///  Expected start frame
    -            ESOF: u1,
    -            ///  start of frame
    -            SOF: u1,
    -            ///  reset request
    -            RESET: u1,
    -            ///  Suspend mode request
    -            SUSP: u1,
    -            ///  Wakeup
    -            WKUP: u1,
    -            ///  Error
    -            ERR: u1,
    -            ///  Packet memory area over / underrun
    -            PMAOVR: u1,
    -            ///  Correct transfer
    -            CTR: u1,
    -            padding: u16,
    -        }),
    -        ///  frame number register
    -        FNR: mmio.Mmio(packed struct(u32) {
    -            ///  Frame number
    -            FN: u11,
    -            ///  Lost SOF
    -            LSOF: u2,
    -            ///  Locked
    -            LCK: u1,
    -            ///  Receive data - line status
    -            RXDM: u1,
    -            ///  Receive data + line status
    -            RXDP: u1,
    -            padding: u16,
    -        }),
    -        ///  device address
    -        DADDR: mmio.Mmio(packed struct(u32) {
    -            ///  Device address
    -            ADD: u1,
    -            ///  Device address
    -            ADD1: u1,
    -            ///  Device address
    -            ADD2: u1,
    -            ///  Device address
    -            ADD3: u1,
    -            ///  Device address
    -            ADD4: u1,
    -            ///  Device address
    -            ADD5: u1,
    -            ///  Device address
    -            ADD6: u1,
    -            ///  Enable function
    -            EF: u1,
    -            padding: u24,
    -        }),
    -        ///  Buffer table address
    -        BTABLE: mmio.Mmio(packed struct(u32) {
    -            reserved3: u3,
    -            ///  Buffer table
    -            BTABLE: u13,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  Inter-integrated circuit
    -    pub const I2C1 = extern struct {
    -        ///  Control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral enable
    -            PE: u1,
    -            ///  TX Interrupt enable
    -            TXIE: u1,
    -            ///  RX Interrupt enable
    -            RXIE: u1,
    -            ///  Address match interrupt enable (slave only)
    -            ADDRIE: u1,
    -            ///  Not acknowledge received interrupt enable
    -            NACKIE: u1,
    -            ///  STOP detection Interrupt enable
    -            STOPIE: u1,
    -            ///  Transfer Complete interrupt enable
    -            TCIE: u1,
    -            ///  Error interrupts enable
    -            ERRIE: u1,
    -            ///  Digital noise filter
    -            DNF: u4,
    -            ///  Analog noise filter OFF
    -            ANFOFF: u1,
    -            ///  Software reset
    -            SWRST: u1,
    -            ///  DMA transmission requests enable
    -            TXDMAEN: u1,
    -            ///  DMA reception requests enable
    -            RXDMAEN: u1,
    -            ///  Slave byte control
    -            SBC: u1,
    -            ///  Clock stretching disable
    -            NOSTRETCH: u1,
    -            ///  Wakeup from STOP enable
    -            WUPEN: u1,
    -            ///  General call enable
    -            GCEN: u1,
    -            ///  SMBus Host address enable
    -            SMBHEN: u1,
    -            ///  SMBus Device Default address enable
    -            SMBDEN: u1,
    -            ///  SMBUS alert enable
    -            ALERTEN: u1,
    -            ///  PEC enable
    -            PECEN: u1,
    -            padding: u8,
    -        }),
    -        ///  Control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            ///  Slave address bit 0 (master mode)
    -            SADD0: u1,
    -            ///  Slave address bit 7:1 (master mode)
    -            SADD1: u7,
    -            ///  Slave address bit 9:8 (master mode)
    -            SADD8: u2,
    -            ///  Transfer direction (master mode)
    -            RD_WRN: u1,
    -            ///  10-bit addressing mode (master mode)
    -            ADD10: u1,
    -            ///  10-bit address header only read direction (master receiver mode)
    -            HEAD10R: u1,
    -            ///  Start generation
    -            START: u1,
    -            ///  Stop generation (master mode)
    -            STOP: u1,
    -            ///  NACK generation (slave mode)
    -            NACK: u1,
    -            ///  Number of bytes
    -            NBYTES: u8,
    -            ///  NBYTES reload mode
    -            RELOAD: u1,
    -            ///  Automatic end mode (master mode)
    -            AUTOEND: u1,
    -            ///  Packet error checking byte
    -            PECBYTE: u1,
    -            padding: u5,
    -        }),
    -        ///  Own address register 1
    -        OAR1: mmio.Mmio(packed struct(u32) {
    -            ///  Interface address
    -            OA1_0: u1,
    -            ///  Interface address
    -            OA1_1: u7,
    -            ///  Interface address
    -            OA1_8: u2,
    -            ///  Own Address 1 10-bit mode
    -            OA1MODE: u1,
    -            reserved15: u4,
    -            ///  Own Address 1 enable
    -            OA1EN: u1,
    -            padding: u16,
    -        }),
    -        ///  Own address register 2
    -        OAR2: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  Interface address
    -            OA2: u7,
    -            ///  Own Address 2 masks
    -            OA2MSK: u3,
    -            reserved15: u4,
    -            ///  Own Address 2 enable
    -            OA2EN: u1,
    -            padding: u16,
    -        }),
    -        ///  Timing register
    -        TIMINGR: mmio.Mmio(packed struct(u32) {
    -            ///  SCL low period (master mode)
    -            SCLL: u8,
    -            ///  SCL high period (master mode)
    -            SCLH: u8,
    -            ///  Data hold time
    -            SDADEL: u4,
    -            ///  Data setup time
    -            SCLDEL: u4,
    -            reserved28: u4,
    -            ///  Timing prescaler
    -            PRESC: u4,
    -        }),
    -        ///  Status register 1
    -        TIMEOUTR: mmio.Mmio(packed struct(u32) {
    -            ///  Bus timeout A
    -            TIMEOUTA: u12,
    -            ///  Idle clock timeout detection
    -            TIDLE: u1,
    -            reserved15: u2,
    -            ///  Clock timeout enable
    -            TIMOUTEN: u1,
    -            ///  Bus timeout B
    -            TIMEOUTB: u12,
    -            reserved31: u3,
    -            ///  Extended clock timeout enable
    -            TEXTEN: u1,
    -        }),
    -        ///  Interrupt and Status register
    -        ISR: mmio.Mmio(packed struct(u32) {
    -            ///  Transmit data register empty (transmitters)
    -            TXE: u1,
    -            ///  Transmit interrupt status (transmitters)
    -            TXIS: u1,
    -            ///  Receive data register not empty (receivers)
    -            RXNE: u1,
    -            ///  Address matched (slave mode)
    -            ADDR: u1,
    -            ///  Not acknowledge received flag
    -            NACKF: u1,
    -            ///  Stop detection flag
    -            STOPF: u1,
    -            ///  Transfer Complete (master mode)
    -            TC: u1,
    -            ///  Transfer Complete Reload
    -            TCR: u1,
    -            ///  Bus error
    -            BERR: u1,
    -            ///  Arbitration lost
    -            ARLO: u1,
    -            ///  Overrun/Underrun (slave mode)
    -            OVR: u1,
    -            ///  PEC Error in reception
    -            PECERR: u1,
    -            ///  Timeout or t_low detection flag
    -            TIMEOUT: u1,
    -            ///  SMBus alert
    -            ALERT: u1,
    -            reserved15: u1,
    -            ///  Bus busy
    -            BUSY: u1,
    -            ///  Transfer direction (Slave mode)
    -            DIR: u1,
    -            ///  Address match code (Slave mode)
    -            ADDCODE: u7,
    -            padding: u8,
    -        }),
    -        ///  Interrupt clear register
    -        ICR: mmio.Mmio(packed struct(u32) {
    -            reserved3: u3,
    -            ///  Address Matched flag clear
    -            ADDRCF: u1,
    -            ///  Not Acknowledge flag clear
    -            NACKCF: u1,
    -            ///  Stop detection flag clear
    -            STOPCF: u1,
    -            reserved8: u2,
    -            ///  Bus error flag clear
    -            BERRCF: u1,
    -            ///  Arbitration lost flag clear
    -            ARLOCF: u1,
    -            ///  Overrun/Underrun flag clear
    -            OVRCF: u1,
    -            ///  PEC Error flag clear
    -            PECCF: u1,
    -            ///  Timeout detection flag clear
    -            TIMOUTCF: u1,
    -            ///  Alert flag clear
    -            ALERTCF: u1,
    -            padding: u18,
    -        }),
    -        ///  PEC register
    -        PECR: mmio.Mmio(packed struct(u32) {
    -            ///  Packet error checking register
    -            PEC: u8,
    -            padding: u24,
    -        }),
    -        ///  Receive data register
    -        RXDR: mmio.Mmio(packed struct(u32) {
    -            ///  8-bit receive data
    -            RXDATA: u8,
    -            padding: u24,
    -        }),
    -        ///  Transmit data register
    -        TXDR: mmio.Mmio(packed struct(u32) {
    -            ///  8-bit transmit data
    -            TXDATA: u8,
    -            padding: u24,
    -        }),
    -    };
    -
    -    ///  Advanced timer
    -    pub const TIM1 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            ///  One-pulse mode
    -            OPM: u1,
    -            ///  Direction
    -            DIR: u1,
    -            ///  Center-aligned mode selection
    -            CMS: u2,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            ///  Clock division
    -            CKD: u2,
    -            reserved11: u1,
    -            ///  UIF status bit remapping
    -            UIFREMAP: u1,
    -            padding: u20,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/compare preloaded control
    -            CCPC: u1,
    -            reserved2: u1,
    -            ///  Capture/compare control update selection
    -            CCUS: u1,
    -            ///  Capture/compare DMA selection
    -            CCDS: u1,
    -            ///  Master mode selection
    -            MMS: u3,
    -            ///  TI1 selection
    -            TI1S: u1,
    -            ///  Output Idle state 1
    -            OIS1: u1,
    -            ///  Output Idle state 1
    -            OIS1N: u1,
    -            ///  Output Idle state 2
    -            OIS2: u1,
    -            ///  Output Idle state 2
    -            OIS2N: u1,
    -            ///  Output Idle state 3
    -            OIS3: u1,
    -            ///  Output Idle state 3
    -            OIS3N: u1,
    -            ///  Output Idle state 4
    -            OIS4: u1,
    -            reserved16: u1,
    -            ///  Output Idle state 5
    -            OIS5: u1,
    -            reserved18: u1,
    -            ///  Output Idle state 6
    -            OIS6: u1,
    -            reserved20: u1,
    -            ///  Master mode selection 2
    -            MMS2: u4,
    -            padding: u8,
    -        }),
    -        ///  slave mode control register
    -        SMCR: mmio.Mmio(packed struct(u32) {
    -            ///  Slave mode selection
    -            SMS: u3,
    -            ///  OCREF clear selection
    -            OCCS: u1,
    -            ///  Trigger selection
    -            TS: u3,
    -            ///  Master/Slave mode
    -            MSM: u1,
    -            ///  External trigger filter
    -            ETF: u4,
    -            ///  External trigger prescaler
    -            ETPS: u2,
    -            ///  External clock enable
    -            ECE: u1,
    -            ///  External trigger polarity
    -            ETP: u1,
    -            ///  Slave mode selection bit 3
    -            SMS3: u1,
    -            padding: u15,
    -        }),
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            ///  Capture/Compare 1 interrupt enable
    -            CC1IE: u1,
    -            ///  Capture/Compare 2 interrupt enable
    -            CC2IE: u1,
    -            ///  Capture/Compare 3 interrupt enable
    -            CC3IE: u1,
    -            ///  Capture/Compare 4 interrupt enable
    -            CC4IE: u1,
    -            ///  COM interrupt enable
    -            COMIE: u1,
    -            ///  Trigger interrupt enable
    -            TIE: u1,
    -            ///  Break interrupt enable
    -            BIE: u1,
    -            ///  Update DMA request enable
    -            UDE: u1,
    -            ///  Capture/Compare 1 DMA request enable
    -            CC1DE: u1,
    -            ///  Capture/Compare 2 DMA request enable
    -            CC2DE: u1,
    -            ///  Capture/Compare 3 DMA request enable
    -            CC3DE: u1,
    -            ///  Capture/Compare 4 DMA request enable
    -            CC4DE: u1,
    -            ///  COM DMA request enable
    -            COMDE: u1,
    -            ///  Trigger DMA request enable
    -            TDE: u1,
    -            padding: u17,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            ///  Capture/compare 1 interrupt flag
    -            CC1IF: u1,
    -            ///  Capture/Compare 2 interrupt flag
    -            CC2IF: u1,
    -            ///  Capture/Compare 3 interrupt flag
    -            CC3IF: u1,
    -            ///  Capture/Compare 4 interrupt flag
    -            CC4IF: u1,
    -            ///  COM interrupt flag
    -            COMIF: u1,
    -            ///  Trigger interrupt flag
    -            TIF: u1,
    -            ///  Break interrupt flag
    -            BIF: u1,
    -            ///  Break 2 interrupt flag
    -            B2IF: u1,
    -            ///  Capture/Compare 1 overcapture flag
    -            CC1OF: u1,
    -            ///  Capture/compare 2 overcapture flag
    -            CC2OF: u1,
    -            ///  Capture/Compare 3 overcapture flag
    -            CC3OF: u1,
    -            ///  Capture/Compare 4 overcapture flag
    -            CC4OF: u1,
    -            reserved16: u3,
    -            ///  Capture/Compare 5 interrupt flag
    -            C5IF: u1,
    -            ///  Capture/Compare 6 interrupt flag
    -            C6IF: u1,
    -            padding: u14,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            ///  Capture/compare 1 generation
    -            CC1G: u1,
    -            ///  Capture/compare 2 generation
    -            CC2G: u1,
    -            ///  Capture/compare 3 generation
    -            CC3G: u1,
    -            ///  Capture/compare 4 generation
    -            CC4G: u1,
    -            ///  Capture/Compare control update generation
    -            COMG: u1,
    -            ///  Trigger generation
    -            TG: u1,
    -            ///  Break generation
    -            BG: u1,
    -            ///  Break 2 generation
    -            B2G: u1,
    -            padding: u23,
    -        }),
    -        ///  capture/compare mode register (output mode)
    -        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 selection
    -            CC1S: u2,
    -            ///  Output Compare 1 fast enable
    -            OC1FE: u1,
    -            ///  Output Compare 1 preload enable
    -            OC1PE: u1,
    -            ///  Output Compare 1 mode
    -            OC1M: u3,
    -            ///  Output Compare 1 clear enable
    -            OC1CE: u1,
    -            ///  Capture/Compare 2 selection
    -            CC2S: u2,
    -            ///  Output Compare 2 fast enable
    -            OC2FE: u1,
    -            ///  Output Compare 2 preload enable
    -            OC2PE: u1,
    -            ///  Output Compare 2 mode
    -            OC2M: u3,
    -            ///  Output Compare 2 clear enable
    -            OC2CE: u1,
    -            ///  Output Compare 1 mode bit 3
    -            OC1M_3: u1,
    -            reserved24: u7,
    -            ///  Output Compare 2 mode bit 3
    -            OC2M_3: u1,
    -            padding: u7,
    -        }),
    -        ///  capture/compare mode register (output mode)
    -        CCMR2_Output: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 3 selection
    -            CC3S: u2,
    -            ///  Output compare 3 fast enable
    -            OC3FE: u1,
    -            ///  Output compare 3 preload enable
    -            OC3PE: u1,
    -            ///  Output compare 3 mode
    -            OC3M: u3,
    -            ///  Output compare 3 clear enable
    -            OC3CE: u1,
    -            ///  Capture/Compare 4 selection
    -            CC4S: u2,
    -            ///  Output compare 4 fast enable
    -            OC4FE: u1,
    -            ///  Output compare 4 preload enable
    -            OC4PE: u1,
    -            ///  Output compare 4 mode
    -            OC4M: u3,
    -            ///  Output compare 4 clear enable
    -            OC4CE: u1,
    -            ///  Output Compare 3 mode bit 3
    -            OC3M_3: u1,
    -            reserved24: u7,
    -            ///  Output Compare 4 mode bit 3
    -            OC4M_3: u1,
    -            padding: u7,
    -        }),
    -        ///  capture/compare enable register
    -        CCER: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 output enable
    -            CC1E: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1P: u1,
    -            ///  Capture/Compare 1 complementary output enable
    -            CC1NE: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1NP: u1,
    -            ///  Capture/Compare 2 output enable
    -            CC2E: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2P: u1,
    -            ///  Capture/Compare 2 complementary output enable
    -            CC2NE: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2NP: u1,
    -            ///  Capture/Compare 3 output enable
    -            CC3E: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC3P: u1,
    -            ///  Capture/Compare 3 complementary output enable
    -            CC3NE: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC3NP: u1,
    -            ///  Capture/Compare 4 output enable
    -            CC4E: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC4P: u1,
    -            reserved15: u1,
    -            ///  Capture/Compare 4 output Polarity
    -            CC4NP: u1,
    -            ///  Capture/Compare 5 output enable
    -            CC5E: u1,
    -            ///  Capture/Compare 5 output Polarity
    -            CC5P: u1,
    -            reserved20: u2,
    -            ///  Capture/Compare 6 output enable
    -            CC6E: u1,
    -            ///  Capture/Compare 6 output Polarity
    -            CC6P: u1,
    -            padding: u10,
    -        }),
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  counter value
    -            CNT: u16,
    -            reserved31: u15,
    -            ///  UIF copy
    -            UIFCPY: u1,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Auto-reload value
    -            ARR: u16,
    -            padding: u16,
    -        }),
    -        ///  repetition counter register
    -        RCR: mmio.Mmio(packed struct(u32) {
    -            ///  Repetition counter value
    -            REP: u16,
    -            padding: u16,
    -        }),
    -        ///  capture/compare register 1
    -        CCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 value
    -            CCR1: u16,
    -            padding: u16,
    -        }),
    -        ///  capture/compare register 2
    -        CCR2: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 2 value
    -            CCR2: u16,
    -            padding: u16,
    -        }),
    -        ///  capture/compare register 3
    -        CCR3: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 3 value
    -            CCR3: u16,
    -            padding: u16,
    -        }),
    -        ///  capture/compare register 4
    -        CCR4: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 3 value
    -            CCR4: u16,
    -            padding: u16,
    -        }),
    -        ///  break and dead-time register
    -        BDTR: mmio.Mmio(packed struct(u32) {
    -            ///  Dead-time generator setup
    -            DTG: u8,
    -            ///  Lock configuration
    -            LOCK: u2,
    -            ///  Off-state selection for Idle mode
    -            OSSI: u1,
    -            ///  Off-state selection for Run mode
    -            OSSR: u1,
    -            ///  Break enable
    -            BKE: u1,
    -            ///  Break polarity
    -            BKP: u1,
    -            ///  Automatic output enable
    -            AOE: u1,
    -            ///  Main output enable
    -            MOE: u1,
    -            ///  Break filter
    -            BKF: u4,
    -            ///  Break 2 filter
    -            BK2F: u4,
    -            ///  Break 2 enable
    -            BK2E: u1,
    -            ///  Break 2 polarity
    -            BK2P: u1,
    -            padding: u6,
    -        }),
    -        ///  DMA control register
    -        DCR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA base address
    -            DBA: u5,
    -            reserved8: u3,
    -            ///  DMA burst length
    -            DBL: u5,
    -            padding: u19,
    -        }),
    -        ///  DMA address for full transfer
    -        DMAR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA register for burst accesses
    -            DMAB: u16,
    -            padding: u16,
    -        }),
    -        reserved84: [4]u8,
    -        ///  capture/compare mode register 3 (output mode)
    -        CCMR3_Output: mmio.Mmio(packed struct(u32) {
    -            reserved2: u2,
    -            ///  Output compare 5 fast enable
    -            OC5FE: u1,
    -            ///  Output compare 5 preload enable
    -            OC5PE: u1,
    -            ///  Output compare 5 mode
    -            OC5M: u3,
    -            ///  Output compare 5 clear enable
    -            OC5CE: u1,
    -            reserved10: u2,
    -            ///  Output compare 6 fast enable
    -            OC6FE: u1,
    -            ///  Output compare 6 preload enable
    -            OC6PE: u1,
    -            ///  Output compare 6 mode
    -            OC6M: u3,
    -            ///  Output compare 6 clear enable
    -            OC6CE: u1,
    -            ///  Outout Compare 5 mode bit 3
    -            OC5M_3: u1,
    -            reserved24: u7,
    -            ///  Outout Compare 6 mode bit 3
    -            OC6M_3: u1,
    -            padding: u7,
    -        }),
    -        ///  capture/compare register 5
    -        CCR5: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 5 value
    -            CCR5: u16,
    -            reserved29: u13,
    -            ///  Group Channel 5 and Channel 1
    -            GC5C1: u1,
    -            ///  Group Channel 5 and Channel 2
    -            GC5C2: u1,
    -            ///  Group Channel 5 and Channel 3
    -            GC5C3: u1,
    -        }),
    -        ///  capture/compare register 6
    -        CCR6: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 6 value
    -            CCR6: u16,
    -            padding: u16,
    -        }),
    -        ///  option registers
    -        OR: mmio.Mmio(packed struct(u32) {
    -            ///  TIM1_ETR_ADC1 remapping capability
    -            TIM1_ETR_ADC1_RMP: u2,
    -            ///  TIM1_ETR_ADC4 remapping capability
    -            TIM1_ETR_ADC4_RMP: u2,
    -            padding: u28,
    -        }),
    -    };
    -
    -    ///  Debug support
    -    pub const DBGMCU = extern struct {
    -        ///  MCU Device ID Code Register
    -        IDCODE: mmio.Mmio(packed struct(u32) {
    -            ///  Device Identifier
    -            DEV_ID: u12,
    -            reserved16: u4,
    -            ///  Revision Identifier
    -            REV_ID: u16,
    -        }),
    -        ///  Debug MCU Configuration Register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  Debug Sleep mode
    -            DBG_SLEEP: u1,
    -            ///  Debug Stop Mode
    -            DBG_STOP: u1,
    -            ///  Debug Standby Mode
    -            DBG_STANDBY: u1,
    -            reserved5: u2,
    -            ///  Trace pin assignment control
    -            TRACE_IOEN: u1,
    -            ///  Trace pin assignment control
    -            TRACE_MODE: u2,
    -            padding: u24,
    -        }),
    -        ///  APB Low Freeze Register
    -        APB1FZ: mmio.Mmio(packed struct(u32) {
    -            ///  Debug Timer 2 stopped when Core is halted
    -            DBG_TIM2_STOP: u1,
    -            ///  Debug Timer 3 stopped when Core is halted
    -            DBG_TIM3_STOP: u1,
    -            ///  Debug Timer 4 stopped when Core is halted
    -            DBG_TIM4_STOP: u1,
    -            ///  Debug Timer 5 stopped when Core is halted
    -            DBG_TIM5_STOP: u1,
    -            ///  Debug Timer 6 stopped when Core is halted
    -            DBG_TIM6_STOP: u1,
    -            ///  Debug Timer 7 stopped when Core is halted
    -            DBG_TIM7_STOP: u1,
    -            ///  Debug Timer 12 stopped when Core is halted
    -            DBG_TIM12_STOP: u1,
    -            ///  Debug Timer 13 stopped when Core is halted
    -            DBG_TIM13_STOP: u1,
    -            ///  Debug Timer 14 stopped when Core is halted
    -            DBG_TIMER14_STOP: u1,
    -            ///  Debug Timer 18 stopped when Core is halted
    -            DBG_TIM18_STOP: u1,
    -            ///  Debug RTC stopped when Core is halted
    -            DBG_RTC_STOP: u1,
    -            ///  Debug Window Wachdog stopped when Core is halted
    -            DBG_WWDG_STOP: u1,
    -            ///  Debug Independent Wachdog stopped when Core is halted
    -            DBG_IWDG_STOP: u1,
    -            reserved21: u8,
    -            ///  SMBUS timeout mode stopped when Core is halted
    -            I2C1_SMBUS_TIMEOUT: u1,
    -            ///  SMBUS timeout mode stopped when Core is halted
    -            I2C2_SMBUS_TIMEOUT: u1,
    -            reserved25: u2,
    -            ///  Debug CAN stopped when core is halted
    -            DBG_CAN_STOP: u1,
    -            padding: u6,
    -        }),
    -        ///  APB High Freeze Register
    -        APB2FZ: mmio.Mmio(packed struct(u32) {
    -            reserved2: u2,
    -            ///  Debug Timer 15 stopped when Core is halted
    -            DBG_TIM15_STOP: u1,
    -            ///  Debug Timer 16 stopped when Core is halted
    -            DBG_TIM16_STOP: u1,
    -            ///  Debug Timer 17 stopped when Core is halted
    -            DBG_TIM17_STO: u1,
    -            ///  Debug Timer 19 stopped when Core is halted
    -            DBG_TIM19_STOP: u1,
    -            padding: u26,
    -        }),
    -    };
    -};
    diff --git a/src/chips/STM32F407.zig b/src/chips/STM32F407.zig
    deleted file mode 100644
    index c0d311a27..000000000
    --- a/src/chips/STM32F407.zig
    +++ /dev/null
    @@ -1,20004 +0,0 @@
    -const micro = @import("microzig");
    -const mmio = micro.mmio;
    -
    -pub const devices = struct {
    -    ///  STM32F407
    -    pub const STM32F407 = struct {
    -        pub const properties = struct {
    -            pub const @"cpu.nvic_prio_bits" = "3";
    -            pub const @"cpu.mpu" = "false";
    -            pub const @"cpu.fpu" = "false";
    -            pub const @"cpu.revision" = "r1p0";
    -            pub const @"cpu.vendor_systick_config" = "false";
    -            pub const @"cpu.endian" = "little";
    -            pub const @"cpu.name" = "CM4";
    -        };
    -
    -        pub const VectorTable = extern struct {
    -            const Handler = micro.interrupt.Handler;
    -            const unhandled = micro.interrupt.unhandled;
    -
    -            initial_stack_pointer: u32,
    -            Reset: Handler = unhandled,
    -            NMI: Handler = unhandled,
    -            HardFault: Handler = unhandled,
    -            MemManageFault: Handler = unhandled,
    -            BusFault: Handler = unhandled,
    -            UsageFault: Handler = unhandled,
    -            reserved5: [4]u32 = undefined,
    -            SVCall: Handler = unhandled,
    -            DebugMonitor: Handler = unhandled,
    -            reserved11: [1]u32 = undefined,
    -            PendSV: Handler = unhandled,
    -            SysTick: Handler = unhandled,
    -            ///  Window Watchdog interrupt
    -            WWDG: Handler = unhandled,
    -            ///  PVD through EXTI line detection interrupt
    -            PVD: Handler = unhandled,
    -            ///  Tamper and TimeStamp interrupts through the EXTI line
    -            TAMP_STAMP: Handler = unhandled,
    -            ///  RTC Wakeup interrupt through the EXTI line
    -            RTC_WKUP: Handler = unhandled,
    -            reserved18: [1]u32 = undefined,
    -            ///  RCC global interrupt
    -            RCC: Handler = unhandled,
    -            reserved20: [5]u32 = undefined,
    -            ///  DMA1 Stream0 global interrupt
    -            DMA1_Stream0: Handler = unhandled,
    -            reserved26: [6]u32 = undefined,
    -            ///  ADC1 global interrupt
    -            ADC: Handler = unhandled,
    -            ///  CAN1 TX interrupts
    -            CAN1_TX: Handler = unhandled,
    -            reserved34: [4]u32 = undefined,
    -            ///  TIM1 Break interrupt and TIM9 global interrupt
    -            TIM1_BRK_TIM9: Handler = unhandled,
    -            ///  TIM1 Update interrupt and TIM10 global interrupt
    -            TIM1_UP_TIM10: Handler = unhandled,
    -            ///  TIM1 Trigger and Commutation interrupts and TIM11 global interrupt
    -            TIM1_TRG_COM_TIM11: Handler = unhandled,
    -            reserved41: [1]u32 = undefined,
    -            ///  TIM2 global interrupt
    -            TIM2: Handler = unhandled,
    -            ///  TIM3 global interrupt
    -            TIM3: Handler = unhandled,
    -            ///  TIM4 global interrupt
    -            TIM4: Handler = unhandled,
    -            ///  I2C1 event interrupt
    -            I2C1_EV: Handler = unhandled,
    -            reserved46: [1]u32 = undefined,
    -            ///  I2C2 event interrupt
    -            I2C2_EV: Handler = unhandled,
    -            reserved48: [1]u32 = undefined,
    -            ///  SPI1 global interrupt
    -            SPI1: Handler = unhandled,
    -            ///  SPI2 global interrupt
    -            SPI2: Handler = unhandled,
    -            ///  USART1 global interrupt
    -            USART1: Handler = unhandled,
    -            ///  USART2 global interrupt
    -            USART2: Handler = unhandled,
    -            ///  USART3 global interrupt
    -            USART3: Handler = unhandled,
    -            reserved54: [2]u32 = undefined,
    -            ///  USB On-The-Go FS Wakeup through EXTI line interrupt
    -            OTG_FS_WKUP: Handler = unhandled,
    -            ///  TIM8 Break interrupt and TIM12 global interrupt
    -            TIM8_BRK_TIM12: Handler = unhandled,
    -            ///  TIM8 Update interrupt and TIM13 global interrupt
    -            TIM8_UP_TIM13: Handler = unhandled,
    -            ///  TIM8 Trigger and Commutation interrupts and TIM14 global interrupt
    -            TIM8_TRG_COM_TIM14: Handler = unhandled,
    -            reserved60: [2]u32 = undefined,
    -            ///  FSMC global interrupt
    -            FSMC: Handler = unhandled,
    -            ///  SDIO global interrupt
    -            SDIO: Handler = unhandled,
    -            ///  TIM5 global interrupt
    -            TIM5: Handler = unhandled,
    -            ///  SPI3 global interrupt
    -            SPI3: Handler = unhandled,
    -            ///  UART4 global interrupt
    -            UART4: Handler = unhandled,
    -            ///  UART5 global interrupt
    -            UART5: Handler = unhandled,
    -            ///  TIM6 global interrupt, DAC1 and DAC2 underrun error interrupt
    -            TIM6_DAC: Handler = unhandled,
    -            ///  TIM7 global interrupt
    -            TIM7: Handler = unhandled,
    -            ///  DMA2 Stream0 global interrupt
    -            DMA2_Stream0: Handler = unhandled,
    -            reserved71: [4]u32 = undefined,
    -            ///  Ethernet global interrupt
    -            ETH: Handler = unhandled,
    -            reserved76: [1]u32 = undefined,
    -            ///  CAN2 TX interrupts
    -            CAN2_TX: Handler = unhandled,
    -            reserved78: [7]u32 = undefined,
    -            ///  USART6 global interrupt
    -            USART6: Handler = unhandled,
    -            ///  I2C3 event interrupt
    -            I2C3_EV: Handler = unhandled,
    -            reserved87: [1]u32 = undefined,
    -            ///  USB On The Go HS End Point 1 Out global interrupt
    -            OTG_HS_EP1_OUT: Handler = unhandled,
    -            reserved89: [3]u32 = undefined,
    -            ///  DCMI global interrupt
    -            DCMI: Handler = unhandled,
    -            ///  CRYP crypto global interrupt
    -            CRYP: Handler = unhandled,
    -            ///  Hash and Rng global interrupt
    -            HASH_RNG: Handler = unhandled,
    -            ///  FPU interrupt
    -            FPU: Handler = unhandled,
    -            reserved96: [6]u32 = undefined,
    -            ///  LTDC global interrupt
    -            LCD_TFT: Handler = unhandled,
    -        };
    -
    -        pub const peripherals = struct {
    -            ///  General purpose timers
    -            pub const TIM2 = @as(*volatile types.TIM2, @ptrFromInt(0x40000000));
    -            ///  General purpose timers
    -            pub const TIM3 = @as(*volatile types.TIM3, @ptrFromInt(0x40000400));
    -            ///  General purpose timers
    -            pub const TIM4 = @as(*volatile types.TIM3, @ptrFromInt(0x40000800));
    -            ///  General-purpose-timers
    -            pub const TIM5 = @as(*volatile types.TIM5, @ptrFromInt(0x40000c00));
    -            ///  Basic timers
    -            pub const TIM6 = @as(*volatile types.TIM6, @ptrFromInt(0x40001000));
    -            ///  Basic timers
    -            pub const TIM7 = @as(*volatile types.TIM6, @ptrFromInt(0x40001400));
    -            ///  General purpose timers
    -            pub const TIM12 = @as(*volatile types.TIM9, @ptrFromInt(0x40001800));
    -            ///  General-purpose-timers
    -            pub const TIM13 = @as(*volatile types.TIM10, @ptrFromInt(0x40001c00));
    -            ///  General-purpose-timers
    -            pub const TIM14 = @as(*volatile types.TIM10, @ptrFromInt(0x40002000));
    -            ///  Real-time clock
    -            pub const RTC = @as(*volatile types.RTC, @ptrFromInt(0x40002800));
    -            ///  Window watchdog
    -            pub const WWDG = @as(*volatile types.WWDG, @ptrFromInt(0x40002c00));
    -            ///  Independent watchdog
    -            pub const IWDG = @as(*volatile types.IWDG, @ptrFromInt(0x40003000));
    -            ///  Serial peripheral interface
    -            pub const I2S2ext = @as(*volatile types.SPI1, @ptrFromInt(0x40003400));
    -            ///  Serial peripheral interface
    -            pub const SPI2 = @as(*volatile types.SPI1, @ptrFromInt(0x40003800));
    -            ///  Serial peripheral interface
    -            pub const SPI3 = @as(*volatile types.SPI1, @ptrFromInt(0x40003c00));
    -            ///  Serial peripheral interface
    -            pub const I2S3ext = @as(*volatile types.SPI1, @ptrFromInt(0x40004000));
    -            ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART2 = @as(*volatile types.USART6, @ptrFromInt(0x40004400));
    -            ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART3 = @as(*volatile types.USART6, @ptrFromInt(0x40004800));
    -            ///  Universal synchronous asynchronous receiver transmitter
    -            pub const UART4 = @as(*volatile types.UART4, @ptrFromInt(0x40004c00));
    -            ///  Universal synchronous asynchronous receiver transmitter
    -            pub const UART5 = @as(*volatile types.UART4, @ptrFromInt(0x40005000));
    -            ///  Inter-integrated circuit
    -            pub const I2C1 = @as(*volatile types.I2C3, @ptrFromInt(0x40005400));
    -            ///  Inter-integrated circuit
    -            pub const I2C2 = @as(*volatile types.I2C3, @ptrFromInt(0x40005800));
    -            ///  Inter-integrated circuit
    -            pub const I2C3 = @as(*volatile types.I2C3, @ptrFromInt(0x40005c00));
    -            ///  Controller area network
    -            pub const CAN1 = @as(*volatile types.CAN1, @ptrFromInt(0x40006400));
    -            ///  Controller area network
    -            pub const CAN2 = @as(*volatile types.CAN1, @ptrFromInt(0x40006800));
    -            ///  Power control
    -            pub const PWR = @as(*volatile types.PWR, @ptrFromInt(0x40007000));
    -            ///  Digital-to-analog converter
    -            pub const DAC = @as(*volatile types.DAC, @ptrFromInt(0x40007400));
    -            ///  Universal synchronous asynchronous receiver transmitter
    -            pub const UART7 = @as(*volatile types.UART4, @ptrFromInt(0x40007800));
    -            ///  Universal synchronous asynchronous receiver transmitter
    -            pub const UART8 = @as(*volatile types.UART4, @ptrFromInt(0x40007c00));
    -            ///  Advanced-timers
    -            pub const TIM1 = @as(*volatile types.TIM1, @ptrFromInt(0x40010000));
    -            ///  Advanced-timers
    -            pub const TIM8 = @as(*volatile types.TIM1, @ptrFromInt(0x40010400));
    -            ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART1 = @as(*volatile types.USART6, @ptrFromInt(0x40011000));
    -            ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART6 = @as(*volatile types.USART6, @ptrFromInt(0x40011400));
    -            ///  Analog-to-digital converter
    -            pub const ADC1 = @as(*volatile types.ADC1, @ptrFromInt(0x40012000));
    -            ///  Analog-to-digital converter
    -            pub const ADC2 = @as(*volatile types.ADC1, @ptrFromInt(0x40012100));
    -            ///  Analog-to-digital converter
    -            pub const ADC3 = @as(*volatile types.ADC1, @ptrFromInt(0x40012200));
    -            ///  Common ADC registers
    -            pub const C_ADC = @as(*volatile types.C_ADC, @ptrFromInt(0x40012300));
    -            ///  Secure digital input/output interface
    -            pub const SDIO = @as(*volatile types.SDIO, @ptrFromInt(0x40012c00));
    -            ///  Serial peripheral interface
    -            pub const SPI1 = @as(*volatile types.SPI1, @ptrFromInt(0x40013000));
    -            ///  Serial peripheral interface
    -            pub const SPI4 = @as(*volatile types.SPI1, @ptrFromInt(0x40013400));
    -            ///  System configuration controller
    -            pub const SYSCFG = @as(*volatile types.SYSCFG, @ptrFromInt(0x40013800));
    -            ///  External interrupt/event controller
    -            pub const EXTI = @as(*volatile types.EXTI, @ptrFromInt(0x40013c00));
    -            ///  General purpose timers
    -            pub const TIM9 = @as(*volatile types.TIM9, @ptrFromInt(0x40014000));
    -            ///  General-purpose-timers
    -            pub const TIM10 = @as(*volatile types.TIM10, @ptrFromInt(0x40014400));
    -            ///  General-purpose-timers
    -            pub const TIM11 = @as(*volatile types.TIM11, @ptrFromInt(0x40014800));
    -            ///  Serial peripheral interface
    -            pub const SPI5 = @as(*volatile types.SPI1, @ptrFromInt(0x40015000));
    -            ///  Serial peripheral interface
    -            pub const SPI6 = @as(*volatile types.SPI1, @ptrFromInt(0x40015400));
    -            ///  Serial audio interface
    -            pub const SAI1 = @as(*volatile types.SAI1, @ptrFromInt(0x40015800));
    -            ///  LCD-TFT Controller
    -            pub const LTDC = @as(*volatile types.LTDC, @ptrFromInt(0x40016800));
    -            ///  General-purpose I/Os
    -            pub const GPIOA = @as(*volatile types.GPIOA, @ptrFromInt(0x40020000));
    -            ///  General-purpose I/Os
    -            pub const GPIOB = @as(*volatile types.GPIOB, @ptrFromInt(0x40020400));
    -            ///  General-purpose I/Os
    -            pub const GPIOC = @as(*volatile types.GPIOI, @ptrFromInt(0x40020800));
    -            ///  General-purpose I/Os
    -            pub const GPIOD = @as(*volatile types.GPIOI, @ptrFromInt(0x40020c00));
    -            ///  General-purpose I/Os
    -            pub const GPIOE = @as(*volatile types.GPIOI, @ptrFromInt(0x40021000));
    -            ///  General-purpose I/Os
    -            pub const GPIOF = @as(*volatile types.GPIOI, @ptrFromInt(0x40021400));
    -            ///  General-purpose I/Os
    -            pub const GPIOG = @as(*volatile types.GPIOI, @ptrFromInt(0x40021800));
    -            ///  General-purpose I/Os
    -            pub const GPIOH = @as(*volatile types.GPIOI, @ptrFromInt(0x40021c00));
    -            ///  General-purpose I/Os
    -            pub const GPIOI = @as(*volatile types.GPIOI, @ptrFromInt(0x40022000));
    -            ///  General-purpose I/Os
    -            pub const GPIOJ = @as(*volatile types.GPIOI, @ptrFromInt(0x40022400));
    -            ///  General-purpose I/Os
    -            pub const GPIOK = @as(*volatile types.GPIOI, @ptrFromInt(0x40022800));
    -            ///  Cryptographic processor
    -            pub const CRC = @as(*volatile types.CRC, @ptrFromInt(0x40023000));
    -            ///  Reset and clock control
    -            pub const RCC = @as(*volatile types.RCC, @ptrFromInt(0x40023800));
    -            ///  FLASH
    -            pub const FLASH = @as(*volatile types.FLASH, @ptrFromInt(0x40023c00));
    -            ///  DMA controller
    -            pub const DMA1 = @as(*volatile types.DMA2, @ptrFromInt(0x40026000));
    -            ///  DMA controller
    -            pub const DMA2 = @as(*volatile types.DMA2, @ptrFromInt(0x40026400));
    -            ///  Ethernet: media access control (MAC)
    -            pub const Ethernet_MAC = @as(*volatile types.Ethernet_MAC, @ptrFromInt(0x40028000));
    -            ///  Ethernet: MAC management counters
    -            pub const Ethernet_MMC = @as(*volatile types.Ethernet_MMC, @ptrFromInt(0x40028100));
    -            ///  Ethernet: Precision time protocol
    -            pub const Ethernet_PTP = @as(*volatile types.Ethernet_PTP, @ptrFromInt(0x40028700));
    -            ///  Ethernet: DMA controller operation
    -            pub const Ethernet_DMA = @as(*volatile types.Ethernet_DMA, @ptrFromInt(0x40029000));
    -            ///  USB on the go high speed
    -            pub const OTG_HS_GLOBAL = @as(*volatile types.OTG_HS_GLOBAL, @ptrFromInt(0x40040000));
    -            ///  USB on the go high speed
    -            pub const OTG_HS_HOST = @as(*volatile types.OTG_HS_HOST, @ptrFromInt(0x40040400));
    -            ///  USB on the go high speed
    -            pub const OTG_HS_DEVICE = @as(*volatile types.OTG_HS_DEVICE, @ptrFromInt(0x40040800));
    -            ///  USB on the go high speed
    -            pub const OTG_HS_PWRCLK = @as(*volatile types.OTG_HS_PWRCLK, @ptrFromInt(0x40040e00));
    -            ///  USB on the go full speed
    -            pub const OTG_FS_GLOBAL = @as(*volatile types.OTG_FS_GLOBAL, @ptrFromInt(0x50000000));
    -            ///  USB on the go full speed
    -            pub const OTG_FS_HOST = @as(*volatile types.OTG_FS_HOST, @ptrFromInt(0x50000400));
    -            ///  USB on the go full speed
    -            pub const OTG_FS_DEVICE = @as(*volatile types.OTG_FS_DEVICE, @ptrFromInt(0x50000800));
    -            ///  USB on the go full speed
    -            pub const OTG_FS_PWRCLK = @as(*volatile types.OTG_FS_PWRCLK, @ptrFromInt(0x50000e00));
    -            ///  Digital camera interface
    -            pub const DCMI = @as(*volatile types.DCMI, @ptrFromInt(0x50050000));
    -            ///  Cryptographic processor
    -            pub const CRYP = @as(*volatile types.CRYP, @ptrFromInt(0x50060000));
    -            ///  Hash processor
    -            pub const HASH = @as(*volatile types.HASH, @ptrFromInt(0x50060400));
    -            ///  Random number generator
    -            pub const RNG = @as(*volatile types.RNG, @ptrFromInt(0x50060800));
    -            ///  Flexible static memory controller
    -            pub const FSMC = @as(*volatile types.FSMC, @ptrFromInt(0xa0000000));
    -            ///  System control block ACTLR
    -            pub const SCB_ACTRL = @as(*volatile types.SCB_ACTRL, @ptrFromInt(0xe000e008));
    -            ///  SysTick timer
    -            pub const STK = @as(*volatile types.STK, @ptrFromInt(0xe000e010));
    -            ///  Nested Vectored Interrupt Controller
    -            pub const NVIC = @as(*volatile types.NVIC, @ptrFromInt(0xe000e100));
    -            ///  System control block
    -            pub const SCB = @as(*volatile types.SCB, @ptrFromInt(0xe000ed00));
    -            ///  Floating point unit CPACR
    -            pub const FPU_CPACR = @as(*volatile types.FPU_CPACR, @ptrFromInt(0xe000ed88));
    -            ///  Memory protection unit
    -            pub const MPU = @as(*volatile types.MPU, @ptrFromInt(0xe000ed90));
    -            ///  Nested vectored interrupt controller
    -            pub const NVIC_STIR = @as(*volatile types.NVIC_STIR, @ptrFromInt(0xe000ef00));
    -            ///  Floting point unit
    -            pub const FPU = @as(*volatile types.FPU, @ptrFromInt(0xe000ef34));
    -            ///  Debug support
    -            pub const DBG = @as(*volatile types.DBG, @ptrFromInt(0xe0042000));
    -        };
    -    };
    -};
    -
    -pub const types = struct {
    -    ///  Random number generator
    -    pub const RNG = extern struct {
    -        ///  control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            reserved2: u2,
    -            ///  Random number generator enable
    -            RNGEN: u1,
    -            ///  Interrupt enable
    -            IE: u1,
    -            padding: u28,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Data ready
    -            DRDY: u1,
    -            ///  Clock error current status
    -            CECS: u1,
    -            ///  Seed error current status
    -            SECS: u1,
    -            reserved5: u2,
    -            ///  Clock error interrupt status
    -            CEIS: u1,
    -            ///  Seed error interrupt status
    -            SEIS: u1,
    -            padding: u25,
    -        }),
    -        ///  data register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  Random data
    -            RNDATA: u32,
    -        }),
    -    };
    -
    -    ///  Digital camera interface
    -    pub const DCMI = extern struct {
    -        ///  control register 1
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  Capture enable
    -            CAPTURE: u1,
    -            ///  Capture mode
    -            CM: u1,
    -            ///  Crop feature
    -            CROP: u1,
    -            ///  JPEG format
    -            JPEG: u1,
    -            ///  Embedded synchronization select
    -            ESS: u1,
    -            ///  Pixel clock polarity
    -            PCKPOL: u1,
    -            ///  Horizontal synchronization polarity
    -            HSPOL: u1,
    -            ///  Vertical synchronization polarity
    -            VSPOL: u1,
    -            ///  Frame capture rate control
    -            FCRC: u2,
    -            ///  Extended data mode
    -            EDM: u2,
    -            reserved14: u2,
    -            ///  DCMI enable
    -            ENABLE: u1,
    -            padding: u17,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  HSYNC
    -            HSYNC: u1,
    -            ///  VSYNC
    -            VSYNC: u1,
    -            ///  FIFO not empty
    -            FNE: u1,
    -            padding: u29,
    -        }),
    -        ///  raw interrupt status register
    -        RIS: mmio.Mmio(packed struct(u32) {
    -            ///  Capture complete raw interrupt status
    -            FRAME_RIS: u1,
    -            ///  Overrun raw interrupt status
    -            OVR_RIS: u1,
    -            ///  Synchronization error raw interrupt status
    -            ERR_RIS: u1,
    -            ///  VSYNC raw interrupt status
    -            VSYNC_RIS: u1,
    -            ///  Line raw interrupt status
    -            LINE_RIS: u1,
    -            padding: u27,
    -        }),
    -        ///  interrupt enable register
    -        IER: mmio.Mmio(packed struct(u32) {
    -            ///  Capture complete interrupt enable
    -            FRAME_IE: u1,
    -            ///  Overrun interrupt enable
    -            OVR_IE: u1,
    -            ///  Synchronization error interrupt enable
    -            ERR_IE: u1,
    -            ///  VSYNC interrupt enable
    -            VSYNC_IE: u1,
    -            ///  Line interrupt enable
    -            LINE_IE: u1,
    -            padding: u27,
    -        }),
    -        ///  masked interrupt status register
    -        MIS: mmio.Mmio(packed struct(u32) {
    -            ///  Capture complete masked interrupt status
    -            FRAME_MIS: u1,
    -            ///  Overrun masked interrupt status
    -            OVR_MIS: u1,
    -            ///  Synchronization error masked interrupt status
    -            ERR_MIS: u1,
    -            ///  VSYNC masked interrupt status
    -            VSYNC_MIS: u1,
    -            ///  Line masked interrupt status
    -            LINE_MIS: u1,
    -            padding: u27,
    -        }),
    -        ///  interrupt clear register
    -        ICR: mmio.Mmio(packed struct(u32) {
    -            ///  Capture complete interrupt status clear
    -            FRAME_ISC: u1,
    -            ///  Overrun interrupt status clear
    -            OVR_ISC: u1,
    -            ///  Synchronization error interrupt status clear
    -            ERR_ISC: u1,
    -            ///  Vertical synch interrupt status clear
    -            VSYNC_ISC: u1,
    -            ///  line interrupt status clear
    -            LINE_ISC: u1,
    -            padding: u27,
    -        }),
    -        ///  embedded synchronization code register
    -        ESCR: mmio.Mmio(packed struct(u32) {
    -            ///  Frame start delimiter code
    -            FSC: u8,
    -            ///  Line start delimiter code
    -            LSC: u8,
    -            ///  Line end delimiter code
    -            LEC: u8,
    -            ///  Frame end delimiter code
    -            FEC: u8,
    -        }),
    -        ///  embedded synchronization unmask register
    -        ESUR: mmio.Mmio(packed struct(u32) {
    -            ///  Frame start delimiter unmask
    -            FSU: u8,
    -            ///  Line start delimiter unmask
    -            LSU: u8,
    -            ///  Line end delimiter unmask
    -            LEU: u8,
    -            ///  Frame end delimiter unmask
    -            FEU: u8,
    -        }),
    -        ///  crop window start
    -        CWSTRT: mmio.Mmio(packed struct(u32) {
    -            ///  Horizontal offset count
    -            HOFFCNT: u14,
    -            reserved16: u2,
    -            ///  Vertical start line count
    -            VST: u13,
    -            padding: u3,
    -        }),
    -        ///  crop window size
    -        CWSIZE: mmio.Mmio(packed struct(u32) {
    -            ///  Capture count
    -            CAPCNT: u14,
    -            reserved16: u2,
    -            ///  Vertical line count
    -            VLINE: u14,
    -            padding: u2,
    -        }),
    -        ///  data register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  Data byte 0
    -            Byte0: u8,
    -            ///  Data byte 1
    -            Byte1: u8,
    -            ///  Data byte 2
    -            Byte2: u8,
    -            ///  Data byte 3
    -            Byte3: u8,
    -        }),
    -    };
    -
    -    ///  Flexible static memory controller
    -    pub const FSMC = extern struct {
    -        ///  SRAM/NOR-Flash chip-select control register 1
    -        BCR1: mmio.Mmio(packed struct(u32) {
    -            ///  MBKEN
    -            MBKEN: u1,
    -            ///  MUXEN
    -            MUXEN: u1,
    -            ///  MTYP
    -            MTYP: u2,
    -            ///  MWID
    -            MWID: u2,
    -            ///  FACCEN
    -            FACCEN: u1,
    -            reserved8: u1,
    -            ///  BURSTEN
    -            BURSTEN: u1,
    -            ///  WAITPOL
    -            WAITPOL: u1,
    -            reserved11: u1,
    -            ///  WAITCFG
    -            WAITCFG: u1,
    -            ///  WREN
    -            WREN: u1,
    -            ///  WAITEN
    -            WAITEN: u1,
    -            ///  EXTMOD
    -            EXTMOD: u1,
    -            ///  ASYNCWAIT
    -            ASYNCWAIT: u1,
    -            reserved19: u3,
    -            ///  CBURSTRW
    -            CBURSTRW: u1,
    -            padding: u12,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select timing register 1
    -        BTR1: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            ///  BUSTURN
    -            BUSTURN: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select control register 2
    -        BCR2: mmio.Mmio(packed struct(u32) {
    -            ///  MBKEN
    -            MBKEN: u1,
    -            ///  MUXEN
    -            MUXEN: u1,
    -            ///  MTYP
    -            MTYP: u2,
    -            ///  MWID
    -            MWID: u2,
    -            ///  FACCEN
    -            FACCEN: u1,
    -            reserved8: u1,
    -            ///  BURSTEN
    -            BURSTEN: u1,
    -            ///  WAITPOL
    -            WAITPOL: u1,
    -            ///  WRAPMOD
    -            WRAPMOD: u1,
    -            ///  WAITCFG
    -            WAITCFG: u1,
    -            ///  WREN
    -            WREN: u1,
    -            ///  WAITEN
    -            WAITEN: u1,
    -            ///  EXTMOD
    -            EXTMOD: u1,
    -            ///  ASYNCWAIT
    -            ASYNCWAIT: u1,
    -            reserved19: u3,
    -            ///  CBURSTRW
    -            CBURSTRW: u1,
    -            padding: u12,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select timing register 2
    -        BTR2: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            ///  BUSTURN
    -            BUSTURN: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select control register 3
    -        BCR3: mmio.Mmio(packed struct(u32) {
    -            ///  MBKEN
    -            MBKEN: u1,
    -            ///  MUXEN
    -            MUXEN: u1,
    -            ///  MTYP
    -            MTYP: u2,
    -            ///  MWID
    -            MWID: u2,
    -            ///  FACCEN
    -            FACCEN: u1,
    -            reserved8: u1,
    -            ///  BURSTEN
    -            BURSTEN: u1,
    -            ///  WAITPOL
    -            WAITPOL: u1,
    -            ///  WRAPMOD
    -            WRAPMOD: u1,
    -            ///  WAITCFG
    -            WAITCFG: u1,
    -            ///  WREN
    -            WREN: u1,
    -            ///  WAITEN
    -            WAITEN: u1,
    -            ///  EXTMOD
    -            EXTMOD: u1,
    -            ///  ASYNCWAIT
    -            ASYNCWAIT: u1,
    -            reserved19: u3,
    -            ///  CBURSTRW
    -            CBURSTRW: u1,
    -            padding: u12,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select timing register 3
    -        BTR3: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            ///  BUSTURN
    -            BUSTURN: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select control register 4
    -        BCR4: mmio.Mmio(packed struct(u32) {
    -            ///  MBKEN
    -            MBKEN: u1,
    -            ///  MUXEN
    -            MUXEN: u1,
    -            ///  MTYP
    -            MTYP: u2,
    -            ///  MWID
    -            MWID: u2,
    -            ///  FACCEN
    -            FACCEN: u1,
    -            reserved8: u1,
    -            ///  BURSTEN
    -            BURSTEN: u1,
    -            ///  WAITPOL
    -            WAITPOL: u1,
    -            ///  WRAPMOD
    -            WRAPMOD: u1,
    -            ///  WAITCFG
    -            WAITCFG: u1,
    -            ///  WREN
    -            WREN: u1,
    -            ///  WAITEN
    -            WAITEN: u1,
    -            ///  EXTMOD
    -            EXTMOD: u1,
    -            ///  ASYNCWAIT
    -            ASYNCWAIT: u1,
    -            reserved19: u3,
    -            ///  CBURSTRW
    -            CBURSTRW: u1,
    -            padding: u12,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select timing register 4
    -        BTR4: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            ///  BUSTURN
    -            BUSTURN: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -        reserved96: [64]u8,
    -        ///  PC Card/NAND Flash control register 2
    -        PCR2: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  PWAITEN
    -            PWAITEN: u1,
    -            ///  PBKEN
    -            PBKEN: u1,
    -            ///  PTYP
    -            PTYP: u1,
    -            ///  PWID
    -            PWID: u2,
    -            ///  ECCEN
    -            ECCEN: u1,
    -            reserved9: u2,
    -            ///  TCLR
    -            TCLR: u4,
    -            ///  TAR
    -            TAR: u4,
    -            ///  ECCPS
    -            ECCPS: u3,
    -            padding: u12,
    -        }),
    -        ///  FIFO status and interrupt register 2
    -        SR2: mmio.Mmio(packed struct(u32) {
    -            ///  IRS
    -            IRS: u1,
    -            ///  ILS
    -            ILS: u1,
    -            ///  IFS
    -            IFS: u1,
    -            ///  IREN
    -            IREN: u1,
    -            ///  ILEN
    -            ILEN: u1,
    -            ///  IFEN
    -            IFEN: u1,
    -            ///  FEMPT
    -            FEMPT: u1,
    -            padding: u25,
    -        }),
    -        ///  Common memory space timing register 2
    -        PMEM2: mmio.Mmio(packed struct(u32) {
    -            ///  MEMSETx
    -            MEMSETx: u8,
    -            ///  MEMWAITx
    -            MEMWAITx: u8,
    -            ///  MEMHOLDx
    -            MEMHOLDx: u8,
    -            ///  MEMHIZx
    -            MEMHIZx: u8,
    -        }),
    -        ///  Attribute memory space timing register 2
    -        PATT2: mmio.Mmio(packed struct(u32) {
    -            ///  ATTSETx
    -            ATTSETx: u8,
    -            ///  ATTWAITx
    -            ATTWAITx: u8,
    -            ///  ATTHOLDx
    -            ATTHOLDx: u8,
    -            ///  ATTHIZx
    -            ATTHIZx: u8,
    -        }),
    -        reserved116: [4]u8,
    -        ///  ECC result register 2
    -        ECCR2: mmio.Mmio(packed struct(u32) {
    -            ///  ECCx
    -            ECCx: u32,
    -        }),
    -        reserved128: [8]u8,
    -        ///  PC Card/NAND Flash control register 3
    -        PCR3: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  PWAITEN
    -            PWAITEN: u1,
    -            ///  PBKEN
    -            PBKEN: u1,
    -            ///  PTYP
    -            PTYP: u1,
    -            ///  PWID
    -            PWID: u2,
    -            ///  ECCEN
    -            ECCEN: u1,
    -            reserved9: u2,
    -            ///  TCLR
    -            TCLR: u4,
    -            ///  TAR
    -            TAR: u4,
    -            ///  ECCPS
    -            ECCPS: u3,
    -            padding: u12,
    -        }),
    -        ///  FIFO status and interrupt register 3
    -        SR3: mmio.Mmio(packed struct(u32) {
    -            ///  IRS
    -            IRS: u1,
    -            ///  ILS
    -            ILS: u1,
    -            ///  IFS
    -            IFS: u1,
    -            ///  IREN
    -            IREN: u1,
    -            ///  ILEN
    -            ILEN: u1,
    -            ///  IFEN
    -            IFEN: u1,
    -            ///  FEMPT
    -            FEMPT: u1,
    -            padding: u25,
    -        }),
    -        ///  Common memory space timing register 3
    -        PMEM3: mmio.Mmio(packed struct(u32) {
    -            ///  MEMSETx
    -            MEMSETx: u8,
    -            ///  MEMWAITx
    -            MEMWAITx: u8,
    -            ///  MEMHOLDx
    -            MEMHOLDx: u8,
    -            ///  MEMHIZx
    -            MEMHIZx: u8,
    -        }),
    -        ///  Attribute memory space timing register 3
    -        PATT3: mmio.Mmio(packed struct(u32) {
    -            ///  ATTSETx
    -            ATTSETx: u8,
    -            ///  ATTWAITx
    -            ATTWAITx: u8,
    -            ///  ATTHOLDx
    -            ATTHOLDx: u8,
    -            ///  ATTHIZx
    -            ATTHIZx: u8,
    -        }),
    -        reserved148: [4]u8,
    -        ///  ECC result register 3
    -        ECCR3: mmio.Mmio(packed struct(u32) {
    -            ///  ECCx
    -            ECCx: u32,
    -        }),
    -        reserved160: [8]u8,
    -        ///  PC Card/NAND Flash control register 4
    -        PCR4: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  PWAITEN
    -            PWAITEN: u1,
    -            ///  PBKEN
    -            PBKEN: u1,
    -            ///  PTYP
    -            PTYP: u1,
    -            ///  PWID
    -            PWID: u2,
    -            ///  ECCEN
    -            ECCEN: u1,
    -            reserved9: u2,
    -            ///  TCLR
    -            TCLR: u4,
    -            ///  TAR
    -            TAR: u4,
    -            ///  ECCPS
    -            ECCPS: u3,
    -            padding: u12,
    -        }),
    -        ///  FIFO status and interrupt register 4
    -        SR4: mmio.Mmio(packed struct(u32) {
    -            ///  IRS
    -            IRS: u1,
    -            ///  ILS
    -            ILS: u1,
    -            ///  IFS
    -            IFS: u1,
    -            ///  IREN
    -            IREN: u1,
    -            ///  ILEN
    -            ILEN: u1,
    -            ///  IFEN
    -            IFEN: u1,
    -            ///  FEMPT
    -            FEMPT: u1,
    -            padding: u25,
    -        }),
    -        ///  Common memory space timing register 4
    -        PMEM4: mmio.Mmio(packed struct(u32) {
    -            ///  MEMSETx
    -            MEMSETx: u8,
    -            ///  MEMWAITx
    -            MEMWAITx: u8,
    -            ///  MEMHOLDx
    -            MEMHOLDx: u8,
    -            ///  MEMHIZx
    -            MEMHIZx: u8,
    -        }),
    -        ///  Attribute memory space timing register 4
    -        PATT4: mmio.Mmio(packed struct(u32) {
    -            ///  ATTSETx
    -            ATTSETx: u8,
    -            ///  ATTWAITx
    -            ATTWAITx: u8,
    -            ///  ATTHOLDx
    -            ATTHOLDx: u8,
    -            ///  ATTHIZx
    -            ATTHIZx: u8,
    -        }),
    -        ///  I/O space timing register 4
    -        PIO4: mmio.Mmio(packed struct(u32) {
    -            ///  IOSETx
    -            IOSETx: u8,
    -            ///  IOWAITx
    -            IOWAITx: u8,
    -            ///  IOHOLDx
    -            IOHOLDx: u8,
    -            ///  IOHIZx
    -            IOHIZx: u8,
    -        }),
    -        reserved260: [80]u8,
    -        ///  SRAM/NOR-Flash write timing registers 1
    -        BWTR1: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            reserved20: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -        reserved268: [4]u8,
    -        ///  SRAM/NOR-Flash write timing registers 2
    -        BWTR2: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            reserved20: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -        reserved276: [4]u8,
    -        ///  SRAM/NOR-Flash write timing registers 3
    -        BWTR3: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            reserved20: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -        reserved284: [4]u8,
    -        ///  SRAM/NOR-Flash write timing registers 4
    -        BWTR4: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            reserved20: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -    };
    -
    -    ///  Debug support
    -    pub const DBG = extern struct {
    -        ///  IDCODE
    -        DBGMCU_IDCODE: mmio.Mmio(packed struct(u32) {
    -            ///  DEV_ID
    -            DEV_ID: u12,
    -            reserved16: u4,
    -            ///  REV_ID
    -            REV_ID: u16,
    -        }),
    -        ///  Control Register
    -        DBGMCU_CR: mmio.Mmio(packed struct(u32) {
    -            ///  DBG_SLEEP
    -            DBG_SLEEP: u1,
    -            ///  DBG_STOP
    -            DBG_STOP: u1,
    -            ///  DBG_STANDBY
    -            DBG_STANDBY: u1,
    -            reserved5: u2,
    -            ///  TRACE_IOEN
    -            TRACE_IOEN: u1,
    -            ///  TRACE_MODE
    -            TRACE_MODE: u2,
    -            reserved16: u8,
    -            ///  DBG_I2C2_SMBUS_TIMEOUT
    -            DBG_I2C2_SMBUS_TIMEOUT: u1,
    -            ///  DBG_TIM8_STOP
    -            DBG_TIM8_STOP: u1,
    -            ///  DBG_TIM5_STOP
    -            DBG_TIM5_STOP: u1,
    -            ///  DBG_TIM6_STOP
    -            DBG_TIM6_STOP: u1,
    -            ///  DBG_TIM7_STOP
    -            DBG_TIM7_STOP: u1,
    -            padding: u11,
    -        }),
    -        ///  Debug MCU APB1 Freeze registe
    -        DBGMCU_APB1_FZ: mmio.Mmio(packed struct(u32) {
    -            ///  DBG_TIM2_STOP
    -            DBG_TIM2_STOP: u1,
    -            ///  DBG_TIM3 _STOP
    -            DBG_TIM3_STOP: u1,
    -            ///  DBG_TIM4_STOP
    -            DBG_TIM4_STOP: u1,
    -            ///  DBG_TIM5_STOP
    -            DBG_TIM5_STOP: u1,
    -            ///  DBG_TIM6_STOP
    -            DBG_TIM6_STOP: u1,
    -            ///  DBG_TIM7_STOP
    -            DBG_TIM7_STOP: u1,
    -            ///  DBG_TIM12_STOP
    -            DBG_TIM12_STOP: u1,
    -            ///  DBG_TIM13_STOP
    -            DBG_TIM13_STOP: u1,
    -            ///  DBG_TIM14_STOP
    -            DBG_TIM14_STOP: u1,
    -            reserved11: u2,
    -            ///  DBG_WWDG_STOP
    -            DBG_WWDG_STOP: u1,
    -            ///  DBG_IWDEG_STOP
    -            DBG_IWDEG_STOP: u1,
    -            reserved21: u8,
    -            ///  DBG_J2C1_SMBUS_TIMEOUT
    -            DBG_J2C1_SMBUS_TIMEOUT: u1,
    -            ///  DBG_J2C2_SMBUS_TIMEOUT
    -            DBG_J2C2_SMBUS_TIMEOUT: u1,
    -            ///  DBG_J2C3SMBUS_TIMEOUT
    -            DBG_J2C3SMBUS_TIMEOUT: u1,
    -            reserved25: u1,
    -            ///  DBG_CAN1_STOP
    -            DBG_CAN1_STOP: u1,
    -            ///  DBG_CAN2_STOP
    -            DBG_CAN2_STOP: u1,
    -            padding: u5,
    -        }),
    -        ///  Debug MCU APB2 Freeze registe
    -        DBGMCU_APB2_FZ: mmio.Mmio(packed struct(u32) {
    -            ///  TIM1 counter stopped when core is halted
    -            DBG_TIM1_STOP: u1,
    -            ///  TIM8 counter stopped when core is halted
    -            DBG_TIM8_STOP: u1,
    -            reserved16: u14,
    -            ///  TIM9 counter stopped when core is halted
    -            DBG_TIM9_STOP: u1,
    -            ///  TIM10 counter stopped when core is halted
    -            DBG_TIM10_STOP: u1,
    -            ///  TIM11 counter stopped when core is halted
    -            DBG_TIM11_STOP: u1,
    -            padding: u13,
    -        }),
    -    };
    -
    -    ///  DMA controller
    -    pub const DMA2 = extern struct {
    -        ///  low interrupt status register
    -        LISR: mmio.Mmio(packed struct(u32) {
    -            ///  Stream x FIFO error interrupt flag (x=3..0)
    -            FEIF0: u1,
    -            reserved2: u1,
    -            ///  Stream x direct mode error interrupt flag (x=3..0)
    -            DMEIF0: u1,
    -            ///  Stream x transfer error interrupt flag (x=3..0)
    -            TEIF0: u1,
    -            ///  Stream x half transfer interrupt flag (x=3..0)
    -            HTIF0: u1,
    -            ///  Stream x transfer complete interrupt flag (x = 3..0)
    -            TCIF0: u1,
    -            ///  Stream x FIFO error interrupt flag (x=3..0)
    -            FEIF1: u1,
    -            reserved8: u1,
    -            ///  Stream x direct mode error interrupt flag (x=3..0)
    -            DMEIF1: u1,
    -            ///  Stream x transfer error interrupt flag (x=3..0)
    -            TEIF1: u1,
    -            ///  Stream x half transfer interrupt flag (x=3..0)
    -            HTIF1: u1,
    -            ///  Stream x transfer complete interrupt flag (x = 3..0)
    -            TCIF1: u1,
    -            reserved16: u4,
    -            ///  Stream x FIFO error interrupt flag (x=3..0)
    -            FEIF2: u1,
    -            reserved18: u1,
    -            ///  Stream x direct mode error interrupt flag (x=3..0)
    -            DMEIF2: u1,
    -            ///  Stream x transfer error interrupt flag (x=3..0)
    -            TEIF2: u1,
    -            ///  Stream x half transfer interrupt flag (x=3..0)
    -            HTIF2: u1,
    -            ///  Stream x transfer complete interrupt flag (x = 3..0)
    -            TCIF2: u1,
    -            ///  Stream x FIFO error interrupt flag (x=3..0)
    -            FEIF3: u1,
    -            reserved24: u1,
    -            ///  Stream x direct mode error interrupt flag (x=3..0)
    -            DMEIF3: u1,
    -            ///  Stream x transfer error interrupt flag (x=3..0)
    -            TEIF3: u1,
    -            ///  Stream x half transfer interrupt flag (x=3..0)
    -            HTIF3: u1,
    -            ///  Stream x transfer complete interrupt flag (x = 3..0)
    -            TCIF3: u1,
    -            padding: u4,
    -        }),
    -        ///  high interrupt status register
    -        HISR: mmio.Mmio(packed struct(u32) {
    -            ///  Stream x FIFO error interrupt flag (x=7..4)
    -            FEIF4: u1,
    -            reserved2: u1,
    -            ///  Stream x direct mode error interrupt flag (x=7..4)
    -            DMEIF4: u1,
    -            ///  Stream x transfer error interrupt flag (x=7..4)
    -            TEIF4: u1,
    -            ///  Stream x half transfer interrupt flag (x=7..4)
    -            HTIF4: u1,
    -            ///  Stream x transfer complete interrupt flag (x=7..4)
    -            TCIF4: u1,
    -            ///  Stream x FIFO error interrupt flag (x=7..4)
    -            FEIF5: u1,
    -            reserved8: u1,
    -            ///  Stream x direct mode error interrupt flag (x=7..4)
    -            DMEIF5: u1,
    -            ///  Stream x transfer error interrupt flag (x=7..4)
    -            TEIF5: u1,
    -            ///  Stream x half transfer interrupt flag (x=7..4)
    -            HTIF5: u1,
    -            ///  Stream x transfer complete interrupt flag (x=7..4)
    -            TCIF5: u1,
    -            reserved16: u4,
    -            ///  Stream x FIFO error interrupt flag (x=7..4)
    -            FEIF6: u1,
    -            reserved18: u1,
    -            ///  Stream x direct mode error interrupt flag (x=7..4)
    -            DMEIF6: u1,
    -            ///  Stream x transfer error interrupt flag (x=7..4)
    -            TEIF6: u1,
    -            ///  Stream x half transfer interrupt flag (x=7..4)
    -            HTIF6: u1,
    -            ///  Stream x transfer complete interrupt flag (x=7..4)
    -            TCIF6: u1,
    -            ///  Stream x FIFO error interrupt flag (x=7..4)
    -            FEIF7: u1,
    -            reserved24: u1,
    -            ///  Stream x direct mode error interrupt flag (x=7..4)
    -            DMEIF7: u1,
    -            ///  Stream x transfer error interrupt flag (x=7..4)
    -            TEIF7: u1,
    -            ///  Stream x half transfer interrupt flag (x=7..4)
    -            HTIF7: u1,
    -            ///  Stream x transfer complete interrupt flag (x=7..4)
    -            TCIF7: u1,
    -            padding: u4,
    -        }),
    -        ///  low interrupt flag clear register
    -        LIFCR: mmio.Mmio(packed struct(u32) {
    -            ///  Stream x clear FIFO error interrupt flag (x = 3..0)
    -            CFEIF0: u1,
    -            reserved2: u1,
    -            ///  Stream x clear direct mode error interrupt flag (x = 3..0)
    -            CDMEIF0: u1,
    -            ///  Stream x clear transfer error interrupt flag (x = 3..0)
    -            CTEIF0: u1,
    -            ///  Stream x clear half transfer interrupt flag (x = 3..0)
    -            CHTIF0: u1,
    -            ///  Stream x clear transfer complete interrupt flag (x = 3..0)
    -            CTCIF0: u1,
    -            ///  Stream x clear FIFO error interrupt flag (x = 3..0)
    -            CFEIF1: u1,
    -            reserved8: u1,
    -            ///  Stream x clear direct mode error interrupt flag (x = 3..0)
    -            CDMEIF1: u1,
    -            ///  Stream x clear transfer error interrupt flag (x = 3..0)
    -            CTEIF1: u1,
    -            ///  Stream x clear half transfer interrupt flag (x = 3..0)
    -            CHTIF1: u1,
    -            ///  Stream x clear transfer complete interrupt flag (x = 3..0)
    -            CTCIF1: u1,
    -            reserved16: u4,
    -            ///  Stream x clear FIFO error interrupt flag (x = 3..0)
    -            CFEIF2: u1,
    -            reserved18: u1,
    -            ///  Stream x clear direct mode error interrupt flag (x = 3..0)
    -            CDMEIF2: u1,
    -            ///  Stream x clear transfer error interrupt flag (x = 3..0)
    -            CTEIF2: u1,
    -            ///  Stream x clear half transfer interrupt flag (x = 3..0)
    -            CHTIF2: u1,
    -            ///  Stream x clear transfer complete interrupt flag (x = 3..0)
    -            CTCIF2: u1,
    -            ///  Stream x clear FIFO error interrupt flag (x = 3..0)
    -            CFEIF3: u1,
    -            reserved24: u1,
    -            ///  Stream x clear direct mode error interrupt flag (x = 3..0)
    -            CDMEIF3: u1,
    -            ///  Stream x clear transfer error interrupt flag (x = 3..0)
    -            CTEIF3: u1,
    -            ///  Stream x clear half transfer interrupt flag (x = 3..0)
    -            CHTIF3: u1,
    -            ///  Stream x clear transfer complete interrupt flag (x = 3..0)
    -            CTCIF3: u1,
    -            padding: u4,
    -        }),
    -        ///  high interrupt flag clear register
    -        HIFCR: mmio.Mmio(packed struct(u32) {
    -            ///  Stream x clear FIFO error interrupt flag (x = 7..4)
    -            CFEIF4: u1,
    -            reserved2: u1,
    -            ///  Stream x clear direct mode error interrupt flag (x = 7..4)
    -            CDMEIF4: u1,
    -            ///  Stream x clear transfer error interrupt flag (x = 7..4)
    -            CTEIF4: u1,
    -            ///  Stream x clear half transfer interrupt flag (x = 7..4)
    -            CHTIF4: u1,
    -            ///  Stream x clear transfer complete interrupt flag (x = 7..4)
    -            CTCIF4: u1,
    -            ///  Stream x clear FIFO error interrupt flag (x = 7..4)
    -            CFEIF5: u1,
    -            reserved8: u1,
    -            ///  Stream x clear direct mode error interrupt flag (x = 7..4)
    -            CDMEIF5: u1,
    -            ///  Stream x clear transfer error interrupt flag (x = 7..4)
    -            CTEIF5: u1,
    -            ///  Stream x clear half transfer interrupt flag (x = 7..4)
    -            CHTIF5: u1,
    -            ///  Stream x clear transfer complete interrupt flag (x = 7..4)
    -            CTCIF5: u1,
    -            reserved16: u4,
    -            ///  Stream x clear FIFO error interrupt flag (x = 7..4)
    -            CFEIF6: u1,
    -            reserved18: u1,
    -            ///  Stream x clear direct mode error interrupt flag (x = 7..4)
    -            CDMEIF6: u1,
    -            ///  Stream x clear transfer error interrupt flag (x = 7..4)
    -            CTEIF6: u1,
    -            ///  Stream x clear half transfer interrupt flag (x = 7..4)
    -            CHTIF6: u1,
    -            ///  Stream x clear transfer complete interrupt flag (x = 7..4)
    -            CTCIF6: u1,
    -            ///  Stream x clear FIFO error interrupt flag (x = 7..4)
    -            CFEIF7: u1,
    -            reserved24: u1,
    -            ///  Stream x clear direct mode error interrupt flag (x = 7..4)
    -            CDMEIF7: u1,
    -            ///  Stream x clear transfer error interrupt flag (x = 7..4)
    -            CTEIF7: u1,
    -            ///  Stream x clear half transfer interrupt flag (x = 7..4)
    -            CHTIF7: u1,
    -            ///  Stream x clear transfer complete interrupt flag (x = 7..4)
    -            CTCIF7: u1,
    -            padding: u4,
    -        }),
    -        ///  stream x configuration register
    -        S0CR: mmio.Mmio(packed struct(u32) {
    -            ///  Stream enable / flag stream ready when read low
    -            EN: u1,
    -            ///  Direct mode error interrupt enable
    -            DMEIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Half transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Peripheral flow controller
    -            PFCTRL: u1,
    -            ///  Data transfer direction
    -            DIR: u2,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral data size
    -            PSIZE: u2,
    -            ///  Memory data size
    -            MSIZE: u2,
    -            ///  Peripheral increment offset size
    -            PINCOS: u1,
    -            ///  Priority level
    -            PL: u2,
    -            ///  Double buffer mode
    -            DBM: u1,
    -            ///  Current target (only in double buffer mode)
    -            CT: u1,
    -            reserved21: u1,
    -            ///  Peripheral burst transfer configuration
    -            PBURST: u2,
    -            ///  Memory burst transfer configuration
    -            MBURST: u2,
    -            ///  Channel selection
    -            CHSEL: u3,
    -            padding: u4,
    -        }),
    -        ///  stream x number of data register
    -        S0NDTR: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data items to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  stream x peripheral address register
    -        S0PAR: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  stream x memory 0 address register
    -        S0M0AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 0 address
    -            M0A: u32,
    -        }),
    -        ///  stream x memory 1 address register
    -        S0M1AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 1 address (used in case of Double buffer mode)
    -            M1A: u32,
    -        }),
    -        ///  stream x FIFO control register
    -        S0FCR: mmio.Mmio(packed struct(u32) {
    -            ///  FIFO threshold selection
    -            FTH: u2,
    -            ///  Direct mode disable
    -            DMDIS: u1,
    -            ///  FIFO status
    -            FS: u3,
    -            reserved7: u1,
    -            ///  FIFO error interrupt enable
    -            FEIE: u1,
    -            padding: u24,
    -        }),
    -        ///  stream x configuration register
    -        S1CR: mmio.Mmio(packed struct(u32) {
    -            ///  Stream enable / flag stream ready when read low
    -            EN: u1,
    -            ///  Direct mode error interrupt enable
    -            DMEIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Half transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Peripheral flow controller
    -            PFCTRL: u1,
    -            ///  Data transfer direction
    -            DIR: u2,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral data size
    -            PSIZE: u2,
    -            ///  Memory data size
    -            MSIZE: u2,
    -            ///  Peripheral increment offset size
    -            PINCOS: u1,
    -            ///  Priority level
    -            PL: u2,
    -            ///  Double buffer mode
    -            DBM: u1,
    -            ///  Current target (only in double buffer mode)
    -            CT: u1,
    -            ///  ACK
    -            ACK: u1,
    -            ///  Peripheral burst transfer configuration
    -            PBURST: u2,
    -            ///  Memory burst transfer configuration
    -            MBURST: u2,
    -            ///  Channel selection
    -            CHSEL: u3,
    -            padding: u4,
    -        }),
    -        ///  stream x number of data register
    -        S1NDTR: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data items to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  stream x peripheral address register
    -        S1PAR: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  stream x memory 0 address register
    -        S1M0AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 0 address
    -            M0A: u32,
    -        }),
    -        ///  stream x memory 1 address register
    -        S1M1AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 1 address (used in case of Double buffer mode)
    -            M1A: u32,
    -        }),
    -        ///  stream x FIFO control register
    -        S1FCR: mmio.Mmio(packed struct(u32) {
    -            ///  FIFO threshold selection
    -            FTH: u2,
    -            ///  Direct mode disable
    -            DMDIS: u1,
    -            ///  FIFO status
    -            FS: u3,
    -            reserved7: u1,
    -            ///  FIFO error interrupt enable
    -            FEIE: u1,
    -            padding: u24,
    -        }),
    -        ///  stream x configuration register
    -        S2CR: mmio.Mmio(packed struct(u32) {
    -            ///  Stream enable / flag stream ready when read low
    -            EN: u1,
    -            ///  Direct mode error interrupt enable
    -            DMEIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Half transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Peripheral flow controller
    -            PFCTRL: u1,
    -            ///  Data transfer direction
    -            DIR: u2,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral data size
    -            PSIZE: u2,
    -            ///  Memory data size
    -            MSIZE: u2,
    -            ///  Peripheral increment offset size
    -            PINCOS: u1,
    -            ///  Priority level
    -            PL: u2,
    -            ///  Double buffer mode
    -            DBM: u1,
    -            ///  Current target (only in double buffer mode)
    -            CT: u1,
    -            ///  ACK
    -            ACK: u1,
    -            ///  Peripheral burst transfer configuration
    -            PBURST: u2,
    -            ///  Memory burst transfer configuration
    -            MBURST: u2,
    -            ///  Channel selection
    -            CHSEL: u3,
    -            padding: u4,
    -        }),
    -        ///  stream x number of data register
    -        S2NDTR: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data items to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  stream x peripheral address register
    -        S2PAR: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  stream x memory 0 address register
    -        S2M0AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 0 address
    -            M0A: u32,
    -        }),
    -        ///  stream x memory 1 address register
    -        S2M1AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 1 address (used in case of Double buffer mode)
    -            M1A: u32,
    -        }),
    -        ///  stream x FIFO control register
    -        S2FCR: mmio.Mmio(packed struct(u32) {
    -            ///  FIFO threshold selection
    -            FTH: u2,
    -            ///  Direct mode disable
    -            DMDIS: u1,
    -            ///  FIFO status
    -            FS: u3,
    -            reserved7: u1,
    -            ///  FIFO error interrupt enable
    -            FEIE: u1,
    -            padding: u24,
    -        }),
    -        ///  stream x configuration register
    -        S3CR: mmio.Mmio(packed struct(u32) {
    -            ///  Stream enable / flag stream ready when read low
    -            EN: u1,
    -            ///  Direct mode error interrupt enable
    -            DMEIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Half transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Peripheral flow controller
    -            PFCTRL: u1,
    -            ///  Data transfer direction
    -            DIR: u2,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral data size
    -            PSIZE: u2,
    -            ///  Memory data size
    -            MSIZE: u2,
    -            ///  Peripheral increment offset size
    -            PINCOS: u1,
    -            ///  Priority level
    -            PL: u2,
    -            ///  Double buffer mode
    -            DBM: u1,
    -            ///  Current target (only in double buffer mode)
    -            CT: u1,
    -            ///  ACK
    -            ACK: u1,
    -            ///  Peripheral burst transfer configuration
    -            PBURST: u2,
    -            ///  Memory burst transfer configuration
    -            MBURST: u2,
    -            ///  Channel selection
    -            CHSEL: u3,
    -            padding: u4,
    -        }),
    -        ///  stream x number of data register
    -        S3NDTR: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data items to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  stream x peripheral address register
    -        S3PAR: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  stream x memory 0 address register
    -        S3M0AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 0 address
    -            M0A: u32,
    -        }),
    -        ///  stream x memory 1 address register
    -        S3M1AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 1 address (used in case of Double buffer mode)
    -            M1A: u32,
    -        }),
    -        ///  stream x FIFO control register
    -        S3FCR: mmio.Mmio(packed struct(u32) {
    -            ///  FIFO threshold selection
    -            FTH: u2,
    -            ///  Direct mode disable
    -            DMDIS: u1,
    -            ///  FIFO status
    -            FS: u3,
    -            reserved7: u1,
    -            ///  FIFO error interrupt enable
    -            FEIE: u1,
    -            padding: u24,
    -        }),
    -        ///  stream x configuration register
    -        S4CR: mmio.Mmio(packed struct(u32) {
    -            ///  Stream enable / flag stream ready when read low
    -            EN: u1,
    -            ///  Direct mode error interrupt enable
    -            DMEIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Half transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Peripheral flow controller
    -            PFCTRL: u1,
    -            ///  Data transfer direction
    -            DIR: u2,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral data size
    -            PSIZE: u2,
    -            ///  Memory data size
    -            MSIZE: u2,
    -            ///  Peripheral increment offset size
    -            PINCOS: u1,
    -            ///  Priority level
    -            PL: u2,
    -            ///  Double buffer mode
    -            DBM: u1,
    -            ///  Current target (only in double buffer mode)
    -            CT: u1,
    -            ///  ACK
    -            ACK: u1,
    -            ///  Peripheral burst transfer configuration
    -            PBURST: u2,
    -            ///  Memory burst transfer configuration
    -            MBURST: u2,
    -            ///  Channel selection
    -            CHSEL: u3,
    -            padding: u4,
    -        }),
    -        ///  stream x number of data register
    -        S4NDTR: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data items to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  stream x peripheral address register
    -        S4PAR: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  stream x memory 0 address register
    -        S4M0AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 0 address
    -            M0A: u32,
    -        }),
    -        ///  stream x memory 1 address register
    -        S4M1AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 1 address (used in case of Double buffer mode)
    -            M1A: u32,
    -        }),
    -        ///  stream x FIFO control register
    -        S4FCR: mmio.Mmio(packed struct(u32) {
    -            ///  FIFO threshold selection
    -            FTH: u2,
    -            ///  Direct mode disable
    -            DMDIS: u1,
    -            ///  FIFO status
    -            FS: u3,
    -            reserved7: u1,
    -            ///  FIFO error interrupt enable
    -            FEIE: u1,
    -            padding: u24,
    -        }),
    -        ///  stream x configuration register
    -        S5CR: mmio.Mmio(packed struct(u32) {
    -            ///  Stream enable / flag stream ready when read low
    -            EN: u1,
    -            ///  Direct mode error interrupt enable
    -            DMEIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Half transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Peripheral flow controller
    -            PFCTRL: u1,
    -            ///  Data transfer direction
    -            DIR: u2,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral data size
    -            PSIZE: u2,
    -            ///  Memory data size
    -            MSIZE: u2,
    -            ///  Peripheral increment offset size
    -            PINCOS: u1,
    -            ///  Priority level
    -            PL: u2,
    -            ///  Double buffer mode
    -            DBM: u1,
    -            ///  Current target (only in double buffer mode)
    -            CT: u1,
    -            ///  ACK
    -            ACK: u1,
    -            ///  Peripheral burst transfer configuration
    -            PBURST: u2,
    -            ///  Memory burst transfer configuration
    -            MBURST: u2,
    -            ///  Channel selection
    -            CHSEL: u3,
    -            padding: u4,
    -        }),
    -        ///  stream x number of data register
    -        S5NDTR: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data items to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  stream x peripheral address register
    -        S5PAR: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  stream x memory 0 address register
    -        S5M0AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 0 address
    -            M0A: u32,
    -        }),
    -        ///  stream x memory 1 address register
    -        S5M1AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 1 address (used in case of Double buffer mode)
    -            M1A: u32,
    -        }),
    -        ///  stream x FIFO control register
    -        S5FCR: mmio.Mmio(packed struct(u32) {
    -            ///  FIFO threshold selection
    -            FTH: u2,
    -            ///  Direct mode disable
    -            DMDIS: u1,
    -            ///  FIFO status
    -            FS: u3,
    -            reserved7: u1,
    -            ///  FIFO error interrupt enable
    -            FEIE: u1,
    -            padding: u24,
    -        }),
    -        ///  stream x configuration register
    -        S6CR: mmio.Mmio(packed struct(u32) {
    -            ///  Stream enable / flag stream ready when read low
    -            EN: u1,
    -            ///  Direct mode error interrupt enable
    -            DMEIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Half transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Peripheral flow controller
    -            PFCTRL: u1,
    -            ///  Data transfer direction
    -            DIR: u2,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral data size
    -            PSIZE: u2,
    -            ///  Memory data size
    -            MSIZE: u2,
    -            ///  Peripheral increment offset size
    -            PINCOS: u1,
    -            ///  Priority level
    -            PL: u2,
    -            ///  Double buffer mode
    -            DBM: u1,
    -            ///  Current target (only in double buffer mode)
    -            CT: u1,
    -            ///  ACK
    -            ACK: u1,
    -            ///  Peripheral burst transfer configuration
    -            PBURST: u2,
    -            ///  Memory burst transfer configuration
    -            MBURST: u2,
    -            ///  Channel selection
    -            CHSEL: u3,
    -            padding: u4,
    -        }),
    -        ///  stream x number of data register
    -        S6NDTR: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data items to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  stream x peripheral address register
    -        S6PAR: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  stream x memory 0 address register
    -        S6M0AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 0 address
    -            M0A: u32,
    -        }),
    -        ///  stream x memory 1 address register
    -        S6M1AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 1 address (used in case of Double buffer mode)
    -            M1A: u32,
    -        }),
    -        ///  stream x FIFO control register
    -        S6FCR: mmio.Mmio(packed struct(u32) {
    -            ///  FIFO threshold selection
    -            FTH: u2,
    -            ///  Direct mode disable
    -            DMDIS: u1,
    -            ///  FIFO status
    -            FS: u3,
    -            reserved7: u1,
    -            ///  FIFO error interrupt enable
    -            FEIE: u1,
    -            padding: u24,
    -        }),
    -        ///  stream x configuration register
    -        S7CR: mmio.Mmio(packed struct(u32) {
    -            ///  Stream enable / flag stream ready when read low
    -            EN: u1,
    -            ///  Direct mode error interrupt enable
    -            DMEIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Half transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Peripheral flow controller
    -            PFCTRL: u1,
    -            ///  Data transfer direction
    -            DIR: u2,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral data size
    -            PSIZE: u2,
    -            ///  Memory data size
    -            MSIZE: u2,
    -            ///  Peripheral increment offset size
    -            PINCOS: u1,
    -            ///  Priority level
    -            PL: u2,
    -            ///  Double buffer mode
    -            DBM: u1,
    -            ///  Current target (only in double buffer mode)
    -            CT: u1,
    -            ///  ACK
    -            ACK: u1,
    -            ///  Peripheral burst transfer configuration
    -            PBURST: u2,
    -            ///  Memory burst transfer configuration
    -            MBURST: u2,
    -            ///  Channel selection
    -            CHSEL: u3,
    -            padding: u4,
    -        }),
    -        ///  stream x number of data register
    -        S7NDTR: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data items to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  stream x peripheral address register
    -        S7PAR: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  stream x memory 0 address register
    -        S7M0AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 0 address
    -            M0A: u32,
    -        }),
    -        ///  stream x memory 1 address register
    -        S7M1AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 1 address (used in case of Double buffer mode)
    -            M1A: u32,
    -        }),
    -        ///  stream x FIFO control register
    -        S7FCR: mmio.Mmio(packed struct(u32) {
    -            ///  FIFO threshold selection
    -            FTH: u2,
    -            ///  Direct mode disable
    -            DMDIS: u1,
    -            ///  FIFO status
    -            FS: u3,
    -            reserved7: u1,
    -            ///  FIFO error interrupt enable
    -            FEIE: u1,
    -            padding: u24,
    -        }),
    -    };
    -
    -    ///  System control block ACTLR
    -    pub const SCB_ACTRL = extern struct {
    -        ///  Auxiliary control register
    -        ACTRL: mmio.Mmio(packed struct(u32) {
    -            ///  DISMCYCINT
    -            DISMCYCINT: u1,
    -            ///  DISDEFWBUF
    -            DISDEFWBUF: u1,
    -            ///  DISFOLD
    -            DISFOLD: u1,
    -            reserved8: u5,
    -            ///  DISFPCA
    -            DISFPCA: u1,
    -            ///  DISOOFP
    -            DISOOFP: u1,
    -            padding: u22,
    -        }),
    -    };
    -
    -    ///  Reset and clock control
    -    pub const RCC = extern struct {
    -        ///  clock control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  Internal high-speed clock enable
    -            HSION: u1,
    -            ///  Internal high-speed clock ready flag
    -            HSIRDY: u1,
    -            reserved3: u1,
    -            ///  Internal high-speed clock trimming
    -            HSITRIM: u5,
    -            ///  Internal high-speed clock calibration
    -            HSICAL: u8,
    -            ///  HSE clock enable
    -            HSEON: u1,
    -            ///  HSE clock ready flag
    -            HSERDY: u1,
    -            ///  HSE clock bypass
    -            HSEBYP: u1,
    -            ///  Clock security system enable
    -            CSSON: u1,
    -            reserved24: u4,
    -            ///  Main PLL (PLL) enable
    -            PLLON: u1,
    -            ///  Main PLL (PLL) clock ready flag
    -            PLLRDY: u1,
    -            ///  PLLI2S enable
    -            PLLI2SON: u1,
    -            ///  PLLI2S clock ready flag
    -            PLLI2SRDY: u1,
    -            padding: u4,
    -        }),
    -        ///  PLL configuration register
    -        PLLCFGR: mmio.Mmio(packed struct(u32) {
    -            ///  Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock
    -            PLLM0: u1,
    -            ///  Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock
    -            PLLM1: u1,
    -            ///  Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock
    -            PLLM2: u1,
    -            ///  Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock
    -            PLLM3: u1,
    -            ///  Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock
    -            PLLM4: u1,
    -            ///  Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock
    -            PLLM5: u1,
    -            ///  Main PLL (PLL) multiplication factor for VCO
    -            PLLN0: u1,
    -            ///  Main PLL (PLL) multiplication factor for VCO
    -            PLLN1: u1,
    -            ///  Main PLL (PLL) multiplication factor for VCO
    -            PLLN2: u1,
    -            ///  Main PLL (PLL) multiplication factor for VCO
    -            PLLN3: u1,
    -            ///  Main PLL (PLL) multiplication factor for VCO
    -            PLLN4: u1,
    -            ///  Main PLL (PLL) multiplication factor for VCO
    -            PLLN5: u1,
    -            ///  Main PLL (PLL) multiplication factor for VCO
    -            PLLN6: u1,
    -            ///  Main PLL (PLL) multiplication factor for VCO
    -            PLLN7: u1,
    -            ///  Main PLL (PLL) multiplication factor for VCO
    -            PLLN8: u1,
    -            reserved16: u1,
    -            ///  Main PLL (PLL) division factor for main system clock
    -            PLLP0: u1,
    -            ///  Main PLL (PLL) division factor for main system clock
    -            PLLP1: u1,
    -            reserved22: u4,
    -            ///  Main PLL(PLL) and audio PLL (PLLI2S) entry clock source
    -            PLLSRC: u1,
    -            reserved24: u1,
    -            ///  Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks
    -            PLLQ0: u1,
    -            ///  Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks
    -            PLLQ1: u1,
    -            ///  Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks
    -            PLLQ2: u1,
    -            ///  Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks
    -            PLLQ3: u1,
    -            padding: u4,
    -        }),
    -        ///  clock configuration register
    -        CFGR: mmio.Mmio(packed struct(u32) {
    -            ///  System clock switch
    -            SW0: u1,
    -            ///  System clock switch
    -            SW1: u1,
    -            ///  System clock switch status
    -            SWS0: u1,
    -            ///  System clock switch status
    -            SWS1: u1,
    -            ///  AHB prescaler
    -            HPRE: u4,
    -            reserved10: u2,
    -            ///  APB Low speed prescaler (APB1)
    -            PPRE1: u3,
    -            ///  APB high-speed prescaler (APB2)
    -            PPRE2: u3,
    -            ///  HSE division factor for RTC clock
    -            RTCPRE: u5,
    -            ///  Microcontroller clock output 1
    -            MCO1: u2,
    -            ///  I2S clock selection
    -            I2SSRC: u1,
    -            ///  MCO1 prescaler
    -            MCO1PRE: u3,
    -            ///  MCO2 prescaler
    -            MCO2PRE: u3,
    -            ///  Microcontroller clock output 2
    -            MCO2: u2,
    -        }),
    -        ///  clock interrupt register
    -        CIR: mmio.Mmio(packed struct(u32) {
    -            ///  LSI ready interrupt flag
    -            LSIRDYF: u1,
    -            ///  LSE ready interrupt flag
    -            LSERDYF: u1,
    -            ///  HSI ready interrupt flag
    -            HSIRDYF: u1,
    -            ///  HSE ready interrupt flag
    -            HSERDYF: u1,
    -            ///  Main PLL (PLL) ready interrupt flag
    -            PLLRDYF: u1,
    -            ///  PLLI2S ready interrupt flag
    -            PLLI2SRDYF: u1,
    -            reserved7: u1,
    -            ///  Clock security system interrupt flag
    -            CSSF: u1,
    -            ///  LSI ready interrupt enable
    -            LSIRDYIE: u1,
    -            ///  LSE ready interrupt enable
    -            LSERDYIE: u1,
    -            ///  HSI ready interrupt enable
    -            HSIRDYIE: u1,
    -            ///  HSE ready interrupt enable
    -            HSERDYIE: u1,
    -            ///  Main PLL (PLL) ready interrupt enable
    -            PLLRDYIE: u1,
    -            ///  PLLI2S ready interrupt enable
    -            PLLI2SRDYIE: u1,
    -            reserved16: u2,
    -            ///  LSI ready interrupt clear
    -            LSIRDYC: u1,
    -            ///  LSE ready interrupt clear
    -            LSERDYC: u1,
    -            ///  HSI ready interrupt clear
    -            HSIRDYC: u1,
    -            ///  HSE ready interrupt clear
    -            HSERDYC: u1,
    -            ///  Main PLL(PLL) ready interrupt clear
    -            PLLRDYC: u1,
    -            ///  PLLI2S ready interrupt clear
    -            PLLI2SRDYC: u1,
    -            reserved23: u1,
    -            ///  Clock security system interrupt clear
    -            CSSC: u1,
    -            padding: u8,
    -        }),
    -        ///  AHB1 peripheral reset register
    -        AHB1RSTR: mmio.Mmio(packed struct(u32) {
    -            ///  IO port A reset
    -            GPIOARST: u1,
    -            ///  IO port B reset
    -            GPIOBRST: u1,
    -            ///  IO port C reset
    -            GPIOCRST: u1,
    -            ///  IO port D reset
    -            GPIODRST: u1,
    -            ///  IO port E reset
    -            GPIOERST: u1,
    -            ///  IO port F reset
    -            GPIOFRST: u1,
    -            ///  IO port G reset
    -            GPIOGRST: u1,
    -            ///  IO port H reset
    -            GPIOHRST: u1,
    -            ///  IO port I reset
    -            GPIOIRST: u1,
    -            reserved12: u3,
    -            ///  CRC reset
    -            CRCRST: u1,
    -            reserved21: u8,
    -            ///  DMA2 reset
    -            DMA1RST: u1,
    -            ///  DMA2 reset
    -            DMA2RST: u1,
    -            reserved25: u2,
    -            ///  Ethernet MAC reset
    -            ETHMACRST: u1,
    -            reserved29: u3,
    -            ///  USB OTG HS module reset
    -            OTGHSRST: u1,
    -            padding: u2,
    -        }),
    -        ///  AHB2 peripheral reset register
    -        AHB2RSTR: mmio.Mmio(packed struct(u32) {
    -            ///  Camera interface reset
    -            DCMIRST: u1,
    -            reserved6: u5,
    -            ///  Random number generator module reset
    -            RNGRST: u1,
    -            ///  USB OTG FS module reset
    -            OTGFSRST: u1,
    -            padding: u24,
    -        }),
    -        ///  AHB3 peripheral reset register
    -        AHB3RSTR: mmio.Mmio(packed struct(u32) {
    -            ///  Flexible static memory controller module reset
    -            FSMCRST: u1,
    -            padding: u31,
    -        }),
    -        reserved32: [4]u8,
    -        ///  APB1 peripheral reset register
    -        APB1RSTR: mmio.Mmio(packed struct(u32) {
    -            ///  TIM2 reset
    -            TIM2RST: u1,
    -            ///  TIM3 reset
    -            TIM3RST: u1,
    -            ///  TIM4 reset
    -            TIM4RST: u1,
    -            ///  TIM5 reset
    -            TIM5RST: u1,
    -            ///  TIM6 reset
    -            TIM6RST: u1,
    -            ///  TIM7 reset
    -            TIM7RST: u1,
    -            ///  TIM12 reset
    -            TIM12RST: u1,
    -            ///  TIM13 reset
    -            TIM13RST: u1,
    -            ///  TIM14 reset
    -            TIM14RST: u1,
    -            reserved11: u2,
    -            ///  Window watchdog reset
    -            WWDGRST: u1,
    -            reserved14: u2,
    -            ///  SPI 2 reset
    -            SPI2RST: u1,
    -            ///  SPI 3 reset
    -            SPI3RST: u1,
    -            reserved17: u1,
    -            ///  USART 2 reset
    -            UART2RST: u1,
    -            ///  USART 3 reset
    -            UART3RST: u1,
    -            ///  USART 4 reset
    -            UART4RST: u1,
    -            ///  USART 5 reset
    -            UART5RST: u1,
    -            ///  I2C 1 reset
    -            I2C1RST: u1,
    -            ///  I2C 2 reset
    -            I2C2RST: u1,
    -            ///  I2C3 reset
    -            I2C3RST: u1,
    -            reserved25: u1,
    -            ///  CAN1 reset
    -            CAN1RST: u1,
    -            ///  CAN2 reset
    -            CAN2RST: u1,
    -            reserved28: u1,
    -            ///  Power interface reset
    -            PWRRST: u1,
    -            ///  DAC reset
    -            DACRST: u1,
    -            padding: u2,
    -        }),
    -        ///  APB2 peripheral reset register
    -        APB2RSTR: mmio.Mmio(packed struct(u32) {
    -            ///  TIM1 reset
    -            TIM1RST: u1,
    -            ///  TIM8 reset
    -            TIM8RST: u1,
    -            reserved4: u2,
    -            ///  USART1 reset
    -            USART1RST: u1,
    -            ///  USART6 reset
    -            USART6RST: u1,
    -            reserved8: u2,
    -            ///  ADC interface reset (common to all ADCs)
    -            ADCRST: u1,
    -            reserved11: u2,
    -            ///  SDIO reset
    -            SDIORST: u1,
    -            ///  SPI 1 reset
    -            SPI1RST: u1,
    -            reserved14: u1,
    -            ///  System configuration controller reset
    -            SYSCFGRST: u1,
    -            reserved16: u1,
    -            ///  TIM9 reset
    -            TIM9RST: u1,
    -            ///  TIM10 reset
    -            TIM10RST: u1,
    -            ///  TIM11 reset
    -            TIM11RST: u1,
    -            padding: u13,
    -        }),
    -        reserved48: [8]u8,
    -        ///  AHB1 peripheral clock register
    -        AHB1ENR: mmio.Mmio(packed struct(u32) {
    -            ///  IO port A clock enable
    -            GPIOAEN: u1,
    -            ///  IO port B clock enable
    -            GPIOBEN: u1,
    -            ///  IO port C clock enable
    -            GPIOCEN: u1,
    -            ///  IO port D clock enable
    -            GPIODEN: u1,
    -            ///  IO port E clock enable
    -            GPIOEEN: u1,
    -            ///  IO port F clock enable
    -            GPIOFEN: u1,
    -            ///  IO port G clock enable
    -            GPIOGEN: u1,
    -            ///  IO port H clock enable
    -            GPIOHEN: u1,
    -            ///  IO port I clock enable
    -            GPIOIEN: u1,
    -            reserved12: u3,
    -            ///  CRC clock enable
    -            CRCEN: u1,
    -            reserved18: u5,
    -            ///  Backup SRAM interface clock enable
    -            BKPSRAMEN: u1,
    -            reserved21: u2,
    -            ///  DMA1 clock enable
    -            DMA1EN: u1,
    -            ///  DMA2 clock enable
    -            DMA2EN: u1,
    -            reserved25: u2,
    -            ///  Ethernet MAC clock enable
    -            ETHMACEN: u1,
    -            ///  Ethernet Transmission clock enable
    -            ETHMACTXEN: u1,
    -            ///  Ethernet Reception clock enable
    -            ETHMACRXEN: u1,
    -            ///  Ethernet PTP clock enable
    -            ETHMACPTPEN: u1,
    -            ///  USB OTG HS clock enable
    -            OTGHSEN: u1,
    -            ///  USB OTG HSULPI clock enable
    -            OTGHSULPIEN: u1,
    -            padding: u1,
    -        }),
    -        ///  AHB2 peripheral clock enable register
    -        AHB2ENR: mmio.Mmio(packed struct(u32) {
    -            ///  Camera interface enable
    -            DCMIEN: u1,
    -            reserved6: u5,
    -            ///  Random number generator clock enable
    -            RNGEN: u1,
    -            ///  USB OTG FS clock enable
    -            OTGFSEN: u1,
    -            padding: u24,
    -        }),
    -        ///  AHB3 peripheral clock enable register
    -        AHB3ENR: mmio.Mmio(packed struct(u32) {
    -            ///  Flexible static memory controller module clock enable
    -            FSMCEN: u1,
    -            padding: u31,
    -        }),
    -        reserved64: [4]u8,
    -        ///  APB1 peripheral clock enable register
    -        APB1ENR: mmio.Mmio(packed struct(u32) {
    -            ///  TIM2 clock enable
    -            TIM2EN: u1,
    -            ///  TIM3 clock enable
    -            TIM3EN: u1,
    -            ///  TIM4 clock enable
    -            TIM4EN: u1,
    -            ///  TIM5 clock enable
    -            TIM5EN: u1,
    -            ///  TIM6 clock enable
    -            TIM6EN: u1,
    -            ///  TIM7 clock enable
    -            TIM7EN: u1,
    -            ///  TIM12 clock enable
    -            TIM12EN: u1,
    -            ///  TIM13 clock enable
    -            TIM13EN: u1,
    -            ///  TIM14 clock enable
    -            TIM14EN: u1,
    -            reserved11: u2,
    -            ///  Window watchdog clock enable
    -            WWDGEN: u1,
    -            reserved14: u2,
    -            ///  SPI2 clock enable
    -            SPI2EN: u1,
    -            ///  SPI3 clock enable
    -            SPI3EN: u1,
    -            reserved17: u1,
    -            ///  USART 2 clock enable
    -            USART2EN: u1,
    -            ///  USART3 clock enable
    -            USART3EN: u1,
    -            ///  UART4 clock enable
    -            UART4EN: u1,
    -            ///  UART5 clock enable
    -            UART5EN: u1,
    -            ///  I2C1 clock enable
    -            I2C1EN: u1,
    -            ///  I2C2 clock enable
    -            I2C2EN: u1,
    -            ///  I2C3 clock enable
    -            I2C3EN: u1,
    -            reserved25: u1,
    -            ///  CAN 1 clock enable
    -            CAN1EN: u1,
    -            ///  CAN 2 clock enable
    -            CAN2EN: u1,
    -            reserved28: u1,
    -            ///  Power interface clock enable
    -            PWREN: u1,
    -            ///  DAC interface clock enable
    -            DACEN: u1,
    -            padding: u2,
    -        }),
    -        ///  APB2 peripheral clock enable register
    -        APB2ENR: mmio.Mmio(packed struct(u32) {
    -            ///  TIM1 clock enable
    -            TIM1EN: u1,
    -            ///  TIM8 clock enable
    -            TIM8EN: u1,
    -            reserved4: u2,
    -            ///  USART1 clock enable
    -            USART1EN: u1,
    -            ///  USART6 clock enable
    -            USART6EN: u1,
    -            reserved8: u2,
    -            ///  ADC1 clock enable
    -            ADC1EN: u1,
    -            ///  ADC2 clock enable
    -            ADC2EN: u1,
    -            ///  ADC3 clock enable
    -            ADC3EN: u1,
    -            ///  SDIO clock enable
    -            SDIOEN: u1,
    -            ///  SPI1 clock enable
    -            SPI1EN: u1,
    -            reserved14: u1,
    -            ///  System configuration controller clock enable
    -            SYSCFGEN: u1,
    -            reserved16: u1,
    -            ///  TIM9 clock enable
    -            TIM9EN: u1,
    -            ///  TIM10 clock enable
    -            TIM10EN: u1,
    -            ///  TIM11 clock enable
    -            TIM11EN: u1,
    -            padding: u13,
    -        }),
    -        reserved80: [8]u8,
    -        ///  AHB1 peripheral clock enable in low power mode register
    -        AHB1LPENR: mmio.Mmio(packed struct(u32) {
    -            ///  IO port A clock enable during sleep mode
    -            GPIOALPEN: u1,
    -            ///  IO port B clock enable during Sleep mode
    -            GPIOBLPEN: u1,
    -            ///  IO port C clock enable during Sleep mode
    -            GPIOCLPEN: u1,
    -            ///  IO port D clock enable during Sleep mode
    -            GPIODLPEN: u1,
    -            ///  IO port E clock enable during Sleep mode
    -            GPIOELPEN: u1,
    -            ///  IO port F clock enable during Sleep mode
    -            GPIOFLPEN: u1,
    -            ///  IO port G clock enable during Sleep mode
    -            GPIOGLPEN: u1,
    -            ///  IO port H clock enable during Sleep mode
    -            GPIOHLPEN: u1,
    -            ///  IO port I clock enable during Sleep mode
    -            GPIOILPEN: u1,
    -            reserved12: u3,
    -            ///  CRC clock enable during Sleep mode
    -            CRCLPEN: u1,
    -            reserved15: u2,
    -            ///  Flash interface clock enable during Sleep mode
    -            FLITFLPEN: u1,
    -            ///  SRAM 1interface clock enable during Sleep mode
    -            SRAM1LPEN: u1,
    -            ///  SRAM 2 interface clock enable during Sleep mode
    -            SRAM2LPEN: u1,
    -            ///  Backup SRAM interface clock enable during Sleep mode
    -            BKPSRAMLPEN: u1,
    -            reserved21: u2,
    -            ///  DMA1 clock enable during Sleep mode
    -            DMA1LPEN: u1,
    -            ///  DMA2 clock enable during Sleep mode
    -            DMA2LPEN: u1,
    -            reserved25: u2,
    -            ///  Ethernet MAC clock enable during Sleep mode
    -            ETHMACLPEN: u1,
    -            ///  Ethernet transmission clock enable during Sleep mode
    -            ETHMACTXLPEN: u1,
    -            ///  Ethernet reception clock enable during Sleep mode
    -            ETHMACRXLPEN: u1,
    -            ///  Ethernet PTP clock enable during Sleep mode
    -            ETHMACPTPLPEN: u1,
    -            ///  USB OTG HS clock enable during Sleep mode
    -            OTGHSLPEN: u1,
    -            ///  USB OTG HS ULPI clock enable during Sleep mode
    -            OTGHSULPILPEN: u1,
    -            padding: u1,
    -        }),
    -        ///  AHB2 peripheral clock enable in low power mode register
    -        AHB2LPENR: mmio.Mmio(packed struct(u32) {
    -            ///  Camera interface enable during Sleep mode
    -            DCMILPEN: u1,
    -            reserved6: u5,
    -            ///  Random number generator clock enable during Sleep mode
    -            RNGLPEN: u1,
    -            ///  USB OTG FS clock enable during Sleep mode
    -            OTGFSLPEN: u1,
    -            padding: u24,
    -        }),
    -        ///  AHB3 peripheral clock enable in low power mode register
    -        AHB3LPENR: mmio.Mmio(packed struct(u32) {
    -            ///  Flexible static memory controller module clock enable during Sleep mode
    -            FSMCLPEN: u1,
    -            padding: u31,
    -        }),
    -        reserved96: [4]u8,
    -        ///  APB1 peripheral clock enable in low power mode register
    -        APB1LPENR: mmio.Mmio(packed struct(u32) {
    -            ///  TIM2 clock enable during Sleep mode
    -            TIM2LPEN: u1,
    -            ///  TIM3 clock enable during Sleep mode
    -            TIM3LPEN: u1,
    -            ///  TIM4 clock enable during Sleep mode
    -            TIM4LPEN: u1,
    -            ///  TIM5 clock enable during Sleep mode
    -            TIM5LPEN: u1,
    -            ///  TIM6 clock enable during Sleep mode
    -            TIM6LPEN: u1,
    -            ///  TIM7 clock enable during Sleep mode
    -            TIM7LPEN: u1,
    -            ///  TIM12 clock enable during Sleep mode
    -            TIM12LPEN: u1,
    -            ///  TIM13 clock enable during Sleep mode
    -            TIM13LPEN: u1,
    -            ///  TIM14 clock enable during Sleep mode
    -            TIM14LPEN: u1,
    -            reserved11: u2,
    -            ///  Window watchdog clock enable during Sleep mode
    -            WWDGLPEN: u1,
    -            reserved14: u2,
    -            ///  SPI2 clock enable during Sleep mode
    -            SPI2LPEN: u1,
    -            ///  SPI3 clock enable during Sleep mode
    -            SPI3LPEN: u1,
    -            reserved17: u1,
    -            ///  USART2 clock enable during Sleep mode
    -            USART2LPEN: u1,
    -            ///  USART3 clock enable during Sleep mode
    -            USART3LPEN: u1,
    -            ///  UART4 clock enable during Sleep mode
    -            UART4LPEN: u1,
    -            ///  UART5 clock enable during Sleep mode
    -            UART5LPEN: u1,
    -            ///  I2C1 clock enable during Sleep mode
    -            I2C1LPEN: u1,
    -            ///  I2C2 clock enable during Sleep mode
    -            I2C2LPEN: u1,
    -            ///  I2C3 clock enable during Sleep mode
    -            I2C3LPEN: u1,
    -            reserved25: u1,
    -            ///  CAN 1 clock enable during Sleep mode
    -            CAN1LPEN: u1,
    -            ///  CAN 2 clock enable during Sleep mode
    -            CAN2LPEN: u1,
    -            reserved28: u1,
    -            ///  Power interface clock enable during Sleep mode
    -            PWRLPEN: u1,
    -            ///  DAC interface clock enable during Sleep mode
    -            DACLPEN: u1,
    -            padding: u2,
    -        }),
    -        ///  APB2 peripheral clock enabled in low power mode register
    -        APB2LPENR: mmio.Mmio(packed struct(u32) {
    -            ///  TIM1 clock enable during Sleep mode
    -            TIM1LPEN: u1,
    -            ///  TIM8 clock enable during Sleep mode
    -            TIM8LPEN: u1,
    -            reserved4: u2,
    -            ///  USART1 clock enable during Sleep mode
    -            USART1LPEN: u1,
    -            ///  USART6 clock enable during Sleep mode
    -            USART6LPEN: u1,
    -            reserved8: u2,
    -            ///  ADC1 clock enable during Sleep mode
    -            ADC1LPEN: u1,
    -            ///  ADC2 clock enable during Sleep mode
    -            ADC2LPEN: u1,
    -            ///  ADC 3 clock enable during Sleep mode
    -            ADC3LPEN: u1,
    -            ///  SDIO clock enable during Sleep mode
    -            SDIOLPEN: u1,
    -            ///  SPI 1 clock enable during Sleep mode
    -            SPI1LPEN: u1,
    -            reserved14: u1,
    -            ///  System configuration controller clock enable during Sleep mode
    -            SYSCFGLPEN: u1,
    -            reserved16: u1,
    -            ///  TIM9 clock enable during sleep mode
    -            TIM9LPEN: u1,
    -            ///  TIM10 clock enable during Sleep mode
    -            TIM10LPEN: u1,
    -            ///  TIM11 clock enable during Sleep mode
    -            TIM11LPEN: u1,
    -            padding: u13,
    -        }),
    -        reserved112: [8]u8,
    -        ///  Backup domain control register
    -        BDCR: mmio.Mmio(packed struct(u32) {
    -            ///  External low-speed oscillator enable
    -            LSEON: u1,
    -            ///  External low-speed oscillator ready
    -            LSERDY: u1,
    -            ///  External low-speed oscillator bypass
    -            LSEBYP: u1,
    -            reserved8: u5,
    -            ///  RTC clock source selection
    -            RTCSEL0: u1,
    -            ///  RTC clock source selection
    -            RTCSEL1: u1,
    -            reserved15: u5,
    -            ///  RTC clock enable
    -            RTCEN: u1,
    -            ///  Backup domain software reset
    -            BDRST: u1,
    -            padding: u15,
    -        }),
    -        ///  clock control & status register
    -        CSR: mmio.Mmio(packed struct(u32) {
    -            ///  Internal low-speed oscillator enable
    -            LSION: u1,
    -            ///  Internal low-speed oscillator ready
    -            LSIRDY: u1,
    -            reserved24: u22,
    -            ///  Remove reset flag
    -            RMVF: u1,
    -            ///  BOR reset flag
    -            BORRSTF: u1,
    -            ///  PIN reset flag
    -            PADRSTF: u1,
    -            ///  POR/PDR reset flag
    -            PORRSTF: u1,
    -            ///  Software reset flag
    -            SFTRSTF: u1,
    -            ///  Independent watchdog reset flag
    -            WDGRSTF: u1,
    -            ///  Window watchdog reset flag
    -            WWDGRSTF: u1,
    -            ///  Low-power reset flag
    -            LPWRRSTF: u1,
    -        }),
    -        reserved128: [8]u8,
    -        ///  spread spectrum clock generation register
    -        SSCGR: mmio.Mmio(packed struct(u32) {
    -            ///  Modulation period
    -            MODPER: u13,
    -            ///  Incrementation step
    -            INCSTEP: u15,
    -            reserved30: u2,
    -            ///  Spread Select
    -            SPREADSEL: u1,
    -            ///  Spread spectrum modulation enable
    -            SSCGEN: u1,
    -        }),
    -        ///  PLLI2S configuration register
    -        PLLI2SCFGR: mmio.Mmio(packed struct(u32) {
    -            reserved6: u6,
    -            ///  PLLI2S multiplication factor for VCO
    -            PLLI2SNx: u9,
    -            reserved28: u13,
    -            ///  PLLI2S division factor for I2S clocks
    -            PLLI2SRx: u3,
    -            padding: u1,
    -        }),
    -    };
    -
    -    ///  General-purpose I/Os
    -    pub const GPIOI = extern struct {
    -        ///  GPIO port mode register
    -        MODER: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER0: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER1: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER2: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER3: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER4: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER5: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER6: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER7: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER8: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER9: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER10: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER11: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER12: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER13: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER14: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER15: u2,
    -        }),
    -        ///  GPIO port output type register
    -        OTYPER: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            OT0: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT1: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT2: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT3: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT4: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT5: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT6: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT7: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT8: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT9: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT10: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT11: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT12: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT13: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT14: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT15: u1,
    -            padding: u16,
    -        }),
    -        ///  GPIO port output speed register
    -        OSPEEDR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR0: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR1: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR2: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR3: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR4: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR5: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR6: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR7: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR8: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR9: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR10: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR11: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR12: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR13: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR14: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR15: u2,
    -        }),
    -        ///  GPIO port pull-up/pull-down register
    -        PUPDR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR0: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR1: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR2: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR3: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR4: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR5: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR6: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR7: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR8: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR9: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR10: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR11: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR12: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR13: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR14: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR15: u2,
    -        }),
    -        ///  GPIO port input data register
    -        IDR: mmio.Mmio(packed struct(u32) {
    -            ///  Port input data (y = 0..15)
    -            IDR0: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR1: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR2: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR3: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR4: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR5: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR6: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR7: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR8: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR9: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR10: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR11: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR12: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR13: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR14: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR15: u1,
    -            padding: u16,
    -        }),
    -        ///  GPIO port output data register
    -        ODR: mmio.Mmio(packed struct(u32) {
    -            ///  Port output data (y = 0..15)
    -            ODR0: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR1: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR2: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR3: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR4: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR5: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR6: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR7: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR8: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR9: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR10: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR11: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR12: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR13: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR14: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR15: u1,
    -            padding: u16,
    -        }),
    -        ///  GPIO port bit set/reset register
    -        BSRR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x set bit y (y= 0..15)
    -            BS0: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS1: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS2: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS3: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS4: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS5: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS6: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS7: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS8: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS9: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS10: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS11: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS12: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS13: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS14: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS15: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BR0: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR1: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR2: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR3: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR4: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR5: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR6: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR7: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR8: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR9: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR10: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR11: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR12: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR13: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR14: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR15: u1,
    -        }),
    -        ///  GPIO port configuration lock register
    -        LCKR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK0: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK1: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK2: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK3: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK4: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK5: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK6: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK7: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK8: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK9: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK10: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK11: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK12: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK13: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK14: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK15: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCKK: u1,
    -            padding: u15,
    -        }),
    -        ///  GPIO alternate function low register
    -        AFRL: mmio.Mmio(packed struct(u32) {
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL0: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL1: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL2: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL3: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL4: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL5: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL6: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL7: u4,
    -        }),
    -        ///  GPIO alternate function high register
    -        AFRH: mmio.Mmio(packed struct(u32) {
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH8: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH9: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH10: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH11: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH12: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH13: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH14: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH15: u4,
    -        }),
    -    };
    -
    -    ///  Floating point unit CPACR
    -    pub const FPU_CPACR = extern struct {
    -        ///  Coprocessor access control register
    -        CPACR: mmio.Mmio(packed struct(u32) {
    -            reserved20: u20,
    -            ///  CP
    -            CP: u4,
    -            padding: u8,
    -        }),
    -    };
    -
    -    ///  Nested vectored interrupt controller
    -    pub const NVIC_STIR = extern struct {
    -        ///  Software trigger interrupt register
    -        STIR: mmio.Mmio(packed struct(u32) {
    -            ///  Software generated interrupt ID
    -            INTID: u9,
    -            padding: u23,
    -        }),
    -    };
    -
    -    ///  System control block
    -    pub const SCB = extern struct {
    -        ///  CPUID base register
    -        CPUID: mmio.Mmio(packed struct(u32) {
    -            ///  Revision number
    -            Revision: u4,
    -            ///  Part number of the processor
    -            PartNo: u12,
    -            ///  Reads as 0xF
    -            Constant: u4,
    -            ///  Variant number
    -            Variant: u4,
    -            ///  Implementer code
    -            Implementer: u8,
    -        }),
    -        ///  Interrupt control and state register
    -        ICSR: mmio.Mmio(packed struct(u32) {
    -            ///  Active vector
    -            VECTACTIVE: u9,
    -            reserved11: u2,
    -            ///  Return to base level
    -            RETTOBASE: u1,
    -            ///  Pending vector
    -            VECTPENDING: u7,
    -            reserved22: u3,
    -            ///  Interrupt pending flag
    -            ISRPENDING: u1,
    -            reserved25: u2,
    -            ///  SysTick exception clear-pending bit
    -            PENDSTCLR: u1,
    -            ///  SysTick exception set-pending bit
    -            PENDSTSET: u1,
    -            ///  PendSV clear-pending bit
    -            PENDSVCLR: u1,
    -            ///  PendSV set-pending bit
    -            PENDSVSET: u1,
    -            reserved31: u2,
    -            ///  NMI set-pending bit.
    -            NMIPENDSET: u1,
    -        }),
    -        ///  Vector table offset register
    -        VTOR: mmio.Mmio(packed struct(u32) {
    -            reserved9: u9,
    -            ///  Vector table base offset field
    -            TBLOFF: u21,
    -            padding: u2,
    -        }),
    -        ///  Application interrupt and reset control register
    -        AIRCR: mmio.Mmio(packed struct(u32) {
    -            ///  VECTRESET
    -            VECTRESET: u1,
    -            ///  VECTCLRACTIVE
    -            VECTCLRACTIVE: u1,
    -            ///  SYSRESETREQ
    -            SYSRESETREQ: u1,
    -            reserved8: u5,
    -            ///  PRIGROUP
    -            PRIGROUP: u3,
    -            reserved15: u4,
    -            ///  ENDIANESS
    -            ENDIANESS: u1,
    -            ///  Register key
    -            VECTKEYSTAT: u16,
    -        }),
    -        ///  System control register
    -        SCR: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  SLEEPONEXIT
    -            SLEEPONEXIT: u1,
    -            ///  SLEEPDEEP
    -            SLEEPDEEP: u1,
    -            reserved4: u1,
    -            ///  Send Event on Pending bit
    -            SEVEONPEND: u1,
    -            padding: u27,
    -        }),
    -        ///  Configuration and control register
    -        CCR: mmio.Mmio(packed struct(u32) {
    -            ///  Configures how the processor enters Thread mode
    -            NONBASETHRDENA: u1,
    -            ///  USERSETMPEND
    -            USERSETMPEND: u1,
    -            reserved3: u1,
    -            ///  UNALIGN_ TRP
    -            UNALIGN__TRP: u1,
    -            ///  DIV_0_TRP
    -            DIV_0_TRP: u1,
    -            reserved8: u3,
    -            ///  BFHFNMIGN
    -            BFHFNMIGN: u1,
    -            ///  STKALIGN
    -            STKALIGN: u1,
    -            padding: u22,
    -        }),
    -        ///  System handler priority registers
    -        SHPR1: mmio.Mmio(packed struct(u32) {
    -            ///  Priority of system handler 4
    -            PRI_4: u8,
    -            ///  Priority of system handler 5
    -            PRI_5: u8,
    -            ///  Priority of system handler 6
    -            PRI_6: u8,
    -            padding: u8,
    -        }),
    -        ///  System handler priority registers
    -        SHPR2: mmio.Mmio(packed struct(u32) {
    -            reserved24: u24,
    -            ///  Priority of system handler 11
    -            PRI_11: u8,
    -        }),
    -        ///  System handler priority registers
    -        SHPR3: mmio.Mmio(packed struct(u32) {
    -            reserved16: u16,
    -            ///  Priority of system handler 14
    -            PRI_14: u8,
    -            ///  Priority of system handler 15
    -            PRI_15: u8,
    -        }),
    -        ///  System handler control and state register
    -        SHCRS: mmio.Mmio(packed struct(u32) {
    -            ///  Memory management fault exception active bit
    -            MEMFAULTACT: u1,
    -            ///  Bus fault exception active bit
    -            BUSFAULTACT: u1,
    -            reserved3: u1,
    -            ///  Usage fault exception active bit
    -            USGFAULTACT: u1,
    -            reserved7: u3,
    -            ///  SVC call active bit
    -            SVCALLACT: u1,
    -            ///  Debug monitor active bit
    -            MONITORACT: u1,
    -            reserved10: u1,
    -            ///  PendSV exception active bit
    -            PENDSVACT: u1,
    -            ///  SysTick exception active bit
    -            SYSTICKACT: u1,
    -            ///  Usage fault exception pending bit
    -            USGFAULTPENDED: u1,
    -            ///  Memory management fault exception pending bit
    -            MEMFAULTPENDED: u1,
    -            ///  Bus fault exception pending bit
    -            BUSFAULTPENDED: u1,
    -            ///  SVC call pending bit
    -            SVCALLPENDED: u1,
    -            ///  Memory management fault enable bit
    -            MEMFAULTENA: u1,
    -            ///  Bus fault enable bit
    -            BUSFAULTENA: u1,
    -            ///  Usage fault enable bit
    -            USGFAULTENA: u1,
    -            padding: u13,
    -        }),
    -        ///  Configurable fault status register
    -        CFSR_UFSR_BFSR_MMFSR: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  Instruction access violation flag
    -            IACCVIOL: u1,
    -            reserved3: u1,
    -            ///  Memory manager fault on unstacking for a return from exception
    -            MUNSTKERR: u1,
    -            ///  Memory manager fault on stacking for exception entry.
    -            MSTKERR: u1,
    -            ///  MLSPERR
    -            MLSPERR: u1,
    -            reserved7: u1,
    -            ///  Memory Management Fault Address Register (MMAR) valid flag
    -            MMARVALID: u1,
    -            ///  Instruction bus error
    -            IBUSERR: u1,
    -            ///  Precise data bus error
    -            PRECISERR: u1,
    -            ///  Imprecise data bus error
    -            IMPRECISERR: u1,
    -            ///  Bus fault on unstacking for a return from exception
    -            UNSTKERR: u1,
    -            ///  Bus fault on stacking for exception entry
    -            STKERR: u1,
    -            ///  Bus fault on floating-point lazy state preservation
    -            LSPERR: u1,
    -            reserved15: u1,
    -            ///  Bus Fault Address Register (BFAR) valid flag
    -            BFARVALID: u1,
    -            ///  Undefined instruction usage fault
    -            UNDEFINSTR: u1,
    -            ///  Invalid state usage fault
    -            INVSTATE: u1,
    -            ///  Invalid PC load usage fault
    -            INVPC: u1,
    -            ///  No coprocessor usage fault.
    -            NOCP: u1,
    -            reserved24: u4,
    -            ///  Unaligned access usage fault
    -            UNALIGNED: u1,
    -            ///  Divide by zero usage fault
    -            DIVBYZERO: u1,
    -            padding: u6,
    -        }),
    -        ///  Hard fault status register
    -        HFSR: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  Vector table hard fault
    -            VECTTBL: u1,
    -            reserved30: u28,
    -            ///  Forced hard fault
    -            FORCED: u1,
    -            ///  Reserved for Debug use
    -            DEBUG_VT: u1,
    -        }),
    -        reserved52: [4]u8,
    -        ///  Memory management fault address register
    -        MMFAR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory management fault address
    -            MMFAR: u32,
    -        }),
    -        ///  Bus fault address register
    -        BFAR: mmio.Mmio(packed struct(u32) {
    -            ///  Bus fault address
    -            BFAR: u32,
    -        }),
    -        ///  Auxiliary fault status register
    -        AFSR: mmio.Mmio(packed struct(u32) {
    -            ///  Implementation defined
    -            IMPDEF: u32,
    -        }),
    -    };
    -
    -    ///  SysTick timer
    -    pub const STK = extern struct {
    -        ///  SysTick control and status register
    -        CTRL: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            ENABLE: u1,
    -            ///  SysTick exception request enable
    -            TICKINT: u1,
    -            ///  Clock source selection
    -            CLKSOURCE: u1,
    -            reserved16: u13,
    -            ///  COUNTFLAG
    -            COUNTFLAG: u1,
    -            padding: u15,
    -        }),
    -        ///  SysTick reload value register
    -        LOAD: mmio.Mmio(packed struct(u32) {
    -            ///  RELOAD value
    -            RELOAD: u24,
    -            padding: u8,
    -        }),
    -        ///  SysTick current value register
    -        VAL: mmio.Mmio(packed struct(u32) {
    -            ///  Current counter value
    -            CURRENT: u24,
    -            padding: u8,
    -        }),
    -        ///  SysTick calibration value register
    -        CALIB: mmio.Mmio(packed struct(u32) {
    -            ///  Calibration value
    -            TENMS: u24,
    -            reserved30: u6,
    -            ///  SKEW flag: Indicates whether the TENMS value is exact
    -            SKEW: u1,
    -            ///  NOREF flag. Reads as zero
    -            NOREF: u1,
    -        }),
    -    };
    -
    -    ///  Memory protection unit
    -    pub const MPU = extern struct {
    -        ///  MPU type register
    -        MPU_TYPER: mmio.Mmio(packed struct(u32) {
    -            ///  Separate flag
    -            SEPARATE: u1,
    -            reserved8: u7,
    -            ///  Number of MPU data regions
    -            DREGION: u8,
    -            ///  Number of MPU instruction regions
    -            IREGION: u8,
    -            padding: u8,
    -        }),
    -        ///  MPU control register
    -        MPU_CTRL: mmio.Mmio(packed struct(u32) {
    -            ///  Enables the MPU
    -            ENABLE: u1,
    -            ///  Enables the operation of MPU during hard fault
    -            HFNMIENA: u1,
    -            ///  Enable priviliged software access to default memory map
    -            PRIVDEFENA: u1,
    -            padding: u29,
    -        }),
    -        ///  MPU region number register
    -        MPU_RNR: mmio.Mmio(packed struct(u32) {
    -            ///  MPU region
    -            REGION: u8,
    -            padding: u24,
    -        }),
    -        ///  MPU region base address register
    -        MPU_RBAR: mmio.Mmio(packed struct(u32) {
    -            ///  MPU region field
    -            REGION: u4,
    -            ///  MPU region number valid
    -            VALID: u1,
    -            ///  Region base address field
    -            ADDR: u27,
    -        }),
    -        ///  MPU region attribute and size register
    -        MPU_RASR: mmio.Mmio(packed struct(u32) {
    -            ///  Region enable bit.
    -            ENABLE: u1,
    -            ///  Size of the MPU protection region
    -            SIZE: u5,
    -            reserved8: u2,
    -            ///  Subregion disable bits
    -            SRD: u8,
    -            ///  memory attribute
    -            B: u1,
    -            ///  memory attribute
    -            C: u1,
    -            ///  Shareable memory attribute
    -            S: u1,
    -            ///  memory attribute
    -            TEX: u3,
    -            reserved24: u2,
    -            ///  Access permission
    -            AP: u3,
    -            reserved28: u1,
    -            ///  Instruction access disable bit
    -            XN: u1,
    -            padding: u3,
    -        }),
    -    };
    -
    -    ///  Floting point unit
    -    pub const FPU = extern struct {
    -        ///  Floating-point context control register
    -        FPCCR: mmio.Mmio(packed struct(u32) {
    -            ///  LSPACT
    -            LSPACT: u1,
    -            ///  USER
    -            USER: u1,
    -            reserved3: u1,
    -            ///  THREAD
    -            THREAD: u1,
    -            ///  HFRDY
    -            HFRDY: u1,
    -            ///  MMRDY
    -            MMRDY: u1,
    -            ///  BFRDY
    -            BFRDY: u1,
    -            reserved8: u1,
    -            ///  MONRDY
    -            MONRDY: u1,
    -            reserved30: u21,
    -            ///  LSPEN
    -            LSPEN: u1,
    -            ///  ASPEN
    -            ASPEN: u1,
    -        }),
    -        ///  Floating-point context address register
    -        FPCAR: mmio.Mmio(packed struct(u32) {
    -            reserved3: u3,
    -            ///  Location of unpopulated floating-point
    -            ADDRESS: u29,
    -        }),
    -        ///  Floating-point status control register
    -        FPSCR: mmio.Mmio(packed struct(u32) {
    -            ///  Invalid operation cumulative exception bit
    -            IOC: u1,
    -            ///  Division by zero cumulative exception bit.
    -            DZC: u1,
    -            ///  Overflow cumulative exception bit
    -            OFC: u1,
    -            ///  Underflow cumulative exception bit
    -            UFC: u1,
    -            ///  Inexact cumulative exception bit
    -            IXC: u1,
    -            reserved7: u2,
    -            ///  Input denormal cumulative exception bit.
    -            IDC: u1,
    -            reserved22: u14,
    -            ///  Rounding Mode control field
    -            RMode: u2,
    -            ///  Flush-to-zero mode control bit:
    -            FZ: u1,
    -            ///  Default NaN mode control bit
    -            DN: u1,
    -            ///  Alternative half-precision control bit
    -            AHP: u1,
    -            reserved28: u1,
    -            ///  Overflow condition code flag
    -            V: u1,
    -            ///  Carry condition code flag
    -            C: u1,
    -            ///  Zero condition code flag
    -            Z: u1,
    -            ///  Negative condition code flag
    -            N: u1,
    -        }),
    -    };
    -
    -    ///  Cryptographic processor
    -    pub const CRYP = extern struct {
    -        ///  control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            reserved2: u2,
    -            ///  Algorithm direction
    -            ALGODIR: u1,
    -            ///  Algorithm mode
    -            ALGOMODE0: u3,
    -            ///  Data type selection
    -            DATATYPE: u2,
    -            ///  Key size selection (AES mode only)
    -            KEYSIZE: u2,
    -            reserved14: u4,
    -            ///  FIFO flush
    -            FFLUSH: u1,
    -            ///  Cryptographic processor enable
    -            CRYPEN: u1,
    -            ///  GCM_CCMPH
    -            GCM_CCMPH: u2,
    -            reserved19: u1,
    -            ///  ALGOMODE
    -            ALGOMODE3: u1,
    -            padding: u12,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Input FIFO empty
    -            IFEM: u1,
    -            ///  Input FIFO not full
    -            IFNF: u1,
    -            ///  Output FIFO not empty
    -            OFNE: u1,
    -            ///  Output FIFO full
    -            OFFU: u1,
    -            ///  Busy bit
    -            BUSY: u1,
    -            padding: u27,
    -        }),
    -        ///  data input register
    -        DIN: mmio.Mmio(packed struct(u32) {
    -            ///  Data input
    -            DATAIN: u32,
    -        }),
    -        ///  data output register
    -        DOUT: mmio.Mmio(packed struct(u32) {
    -            ///  Data output
    -            DATAOUT: u32,
    -        }),
    -        ///  DMA control register
    -        DMACR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA input enable
    -            DIEN: u1,
    -            ///  DMA output enable
    -            DOEN: u1,
    -            padding: u30,
    -        }),
    -        ///  interrupt mask set/clear register
    -        IMSCR: mmio.Mmio(packed struct(u32) {
    -            ///  Input FIFO service interrupt mask
    -            INIM: u1,
    -            ///  Output FIFO service interrupt mask
    -            OUTIM: u1,
    -            padding: u30,
    -        }),
    -        ///  raw interrupt status register
    -        RISR: mmio.Mmio(packed struct(u32) {
    -            ///  Input FIFO service raw interrupt status
    -            INRIS: u1,
    -            ///  Output FIFO service raw interrupt status
    -            OUTRIS: u1,
    -            padding: u30,
    -        }),
    -        ///  masked interrupt status register
    -        MISR: mmio.Mmio(packed struct(u32) {
    -            ///  Input FIFO service masked interrupt status
    -            INMIS: u1,
    -            ///  Output FIFO service masked interrupt status
    -            OUTMIS: u1,
    -            padding: u30,
    -        }),
    -        ///  key registers
    -        K0LR: mmio.Mmio(packed struct(u32) {
    -            ///  b224
    -            b224: u1,
    -            ///  b225
    -            b225: u1,
    -            ///  b226
    -            b226: u1,
    -            ///  b227
    -            b227: u1,
    -            ///  b228
    -            b228: u1,
    -            ///  b229
    -            b229: u1,
    -            ///  b230
    -            b230: u1,
    -            ///  b231
    -            b231: u1,
    -            ///  b232
    -            b232: u1,
    -            ///  b233
    -            b233: u1,
    -            ///  b234
    -            b234: u1,
    -            ///  b235
    -            b235: u1,
    -            ///  b236
    -            b236: u1,
    -            ///  b237
    -            b237: u1,
    -            ///  b238
    -            b238: u1,
    -            ///  b239
    -            b239: u1,
    -            ///  b240
    -            b240: u1,
    -            ///  b241
    -            b241: u1,
    -            ///  b242
    -            b242: u1,
    -            ///  b243
    -            b243: u1,
    -            ///  b244
    -            b244: u1,
    -            ///  b245
    -            b245: u1,
    -            ///  b246
    -            b246: u1,
    -            ///  b247
    -            b247: u1,
    -            ///  b248
    -            b248: u1,
    -            ///  b249
    -            b249: u1,
    -            ///  b250
    -            b250: u1,
    -            ///  b251
    -            b251: u1,
    -            ///  b252
    -            b252: u1,
    -            ///  b253
    -            b253: u1,
    -            ///  b254
    -            b254: u1,
    -            ///  b255
    -            b255: u1,
    -        }),
    -        ///  key registers
    -        K0RR: mmio.Mmio(packed struct(u32) {
    -            ///  b192
    -            b192: u1,
    -            ///  b193
    -            b193: u1,
    -            ///  b194
    -            b194: u1,
    -            ///  b195
    -            b195: u1,
    -            ///  b196
    -            b196: u1,
    -            ///  b197
    -            b197: u1,
    -            ///  b198
    -            b198: u1,
    -            ///  b199
    -            b199: u1,
    -            ///  b200
    -            b200: u1,
    -            ///  b201
    -            b201: u1,
    -            ///  b202
    -            b202: u1,
    -            ///  b203
    -            b203: u1,
    -            ///  b204
    -            b204: u1,
    -            ///  b205
    -            b205: u1,
    -            ///  b206
    -            b206: u1,
    -            ///  b207
    -            b207: u1,
    -            ///  b208
    -            b208: u1,
    -            ///  b209
    -            b209: u1,
    -            ///  b210
    -            b210: u1,
    -            ///  b211
    -            b211: u1,
    -            ///  b212
    -            b212: u1,
    -            ///  b213
    -            b213: u1,
    -            ///  b214
    -            b214: u1,
    -            ///  b215
    -            b215: u1,
    -            ///  b216
    -            b216: u1,
    -            ///  b217
    -            b217: u1,
    -            ///  b218
    -            b218: u1,
    -            ///  b219
    -            b219: u1,
    -            ///  b220
    -            b220: u1,
    -            ///  b221
    -            b221: u1,
    -            ///  b222
    -            b222: u1,
    -            ///  b223
    -            b223: u1,
    -        }),
    -        ///  key registers
    -        K1LR: mmio.Mmio(packed struct(u32) {
    -            ///  b160
    -            b160: u1,
    -            ///  b161
    -            b161: u1,
    -            ///  b162
    -            b162: u1,
    -            ///  b163
    -            b163: u1,
    -            ///  b164
    -            b164: u1,
    -            ///  b165
    -            b165: u1,
    -            ///  b166
    -            b166: u1,
    -            ///  b167
    -            b167: u1,
    -            ///  b168
    -            b168: u1,
    -            ///  b169
    -            b169: u1,
    -            ///  b170
    -            b170: u1,
    -            ///  b171
    -            b171: u1,
    -            ///  b172
    -            b172: u1,
    -            ///  b173
    -            b173: u1,
    -            ///  b174
    -            b174: u1,
    -            ///  b175
    -            b175: u1,
    -            ///  b176
    -            b176: u1,
    -            ///  b177
    -            b177: u1,
    -            ///  b178
    -            b178: u1,
    -            ///  b179
    -            b179: u1,
    -            ///  b180
    -            b180: u1,
    -            ///  b181
    -            b181: u1,
    -            ///  b182
    -            b182: u1,
    -            ///  b183
    -            b183: u1,
    -            ///  b184
    -            b184: u1,
    -            ///  b185
    -            b185: u1,
    -            ///  b186
    -            b186: u1,
    -            ///  b187
    -            b187: u1,
    -            ///  b188
    -            b188: u1,
    -            ///  b189
    -            b189: u1,
    -            ///  b190
    -            b190: u1,
    -            ///  b191
    -            b191: u1,
    -        }),
    -        ///  key registers
    -        K1RR: mmio.Mmio(packed struct(u32) {
    -            ///  b128
    -            b128: u1,
    -            ///  b129
    -            b129: u1,
    -            ///  b130
    -            b130: u1,
    -            ///  b131
    -            b131: u1,
    -            ///  b132
    -            b132: u1,
    -            ///  b133
    -            b133: u1,
    -            ///  b134
    -            b134: u1,
    -            ///  b135
    -            b135: u1,
    -            ///  b136
    -            b136: u1,
    -            ///  b137
    -            b137: u1,
    -            ///  b138
    -            b138: u1,
    -            ///  b139
    -            b139: u1,
    -            ///  b140
    -            b140: u1,
    -            ///  b141
    -            b141: u1,
    -            ///  b142
    -            b142: u1,
    -            ///  b143
    -            b143: u1,
    -            ///  b144
    -            b144: u1,
    -            ///  b145
    -            b145: u1,
    -            ///  b146
    -            b146: u1,
    -            ///  b147
    -            b147: u1,
    -            ///  b148
    -            b148: u1,
    -            ///  b149
    -            b149: u1,
    -            ///  b150
    -            b150: u1,
    -            ///  b151
    -            b151: u1,
    -            ///  b152
    -            b152: u1,
    -            ///  b153
    -            b153: u1,
    -            ///  b154
    -            b154: u1,
    -            ///  b155
    -            b155: u1,
    -            ///  b156
    -            b156: u1,
    -            ///  b157
    -            b157: u1,
    -            ///  b158
    -            b158: u1,
    -            ///  b159
    -            b159: u1,
    -        }),
    -        ///  key registers
    -        K2LR: mmio.Mmio(packed struct(u32) {
    -            ///  b96
    -            b96: u1,
    -            ///  b97
    -            b97: u1,
    -            ///  b98
    -            b98: u1,
    -            ///  b99
    -            b99: u1,
    -            ///  b100
    -            b100: u1,
    -            ///  b101
    -            b101: u1,
    -            ///  b102
    -            b102: u1,
    -            ///  b103
    -            b103: u1,
    -            ///  b104
    -            b104: u1,
    -            ///  b105
    -            b105: u1,
    -            ///  b106
    -            b106: u1,
    -            ///  b107
    -            b107: u1,
    -            ///  b108
    -            b108: u1,
    -            ///  b109
    -            b109: u1,
    -            ///  b110
    -            b110: u1,
    -            ///  b111
    -            b111: u1,
    -            ///  b112
    -            b112: u1,
    -            ///  b113
    -            b113: u1,
    -            ///  b114
    -            b114: u1,
    -            ///  b115
    -            b115: u1,
    -            ///  b116
    -            b116: u1,
    -            ///  b117
    -            b117: u1,
    -            ///  b118
    -            b118: u1,
    -            ///  b119
    -            b119: u1,
    -            ///  b120
    -            b120: u1,
    -            ///  b121
    -            b121: u1,
    -            ///  b122
    -            b122: u1,
    -            ///  b123
    -            b123: u1,
    -            ///  b124
    -            b124: u1,
    -            ///  b125
    -            b125: u1,
    -            ///  b126
    -            b126: u1,
    -            ///  b127
    -            b127: u1,
    -        }),
    -        ///  key registers
    -        K2RR: mmio.Mmio(packed struct(u32) {
    -            ///  b64
    -            b64: u1,
    -            ///  b65
    -            b65: u1,
    -            ///  b66
    -            b66: u1,
    -            ///  b67
    -            b67: u1,
    -            ///  b68
    -            b68: u1,
    -            ///  b69
    -            b69: u1,
    -            ///  b70
    -            b70: u1,
    -            ///  b71
    -            b71: u1,
    -            ///  b72
    -            b72: u1,
    -            ///  b73
    -            b73: u1,
    -            ///  b74
    -            b74: u1,
    -            ///  b75
    -            b75: u1,
    -            ///  b76
    -            b76: u1,
    -            ///  b77
    -            b77: u1,
    -            ///  b78
    -            b78: u1,
    -            ///  b79
    -            b79: u1,
    -            ///  b80
    -            b80: u1,
    -            ///  b81
    -            b81: u1,
    -            ///  b82
    -            b82: u1,
    -            ///  b83
    -            b83: u1,
    -            ///  b84
    -            b84: u1,
    -            ///  b85
    -            b85: u1,
    -            ///  b86
    -            b86: u1,
    -            ///  b87
    -            b87: u1,
    -            ///  b88
    -            b88: u1,
    -            ///  b89
    -            b89: u1,
    -            ///  b90
    -            b90: u1,
    -            ///  b91
    -            b91: u1,
    -            ///  b92
    -            b92: u1,
    -            ///  b93
    -            b93: u1,
    -            ///  b94
    -            b94: u1,
    -            ///  b95
    -            b95: u1,
    -        }),
    -        ///  key registers
    -        K3LR: mmio.Mmio(packed struct(u32) {
    -            ///  b32
    -            b32: u1,
    -            ///  b33
    -            b33: u1,
    -            ///  b34
    -            b34: u1,
    -            ///  b35
    -            b35: u1,
    -            ///  b36
    -            b36: u1,
    -            ///  b37
    -            b37: u1,
    -            ///  b38
    -            b38: u1,
    -            ///  b39
    -            b39: u1,
    -            ///  b40
    -            b40: u1,
    -            ///  b41
    -            b41: u1,
    -            ///  b42
    -            b42: u1,
    -            ///  b43
    -            b43: u1,
    -            ///  b44
    -            b44: u1,
    -            ///  b45
    -            b45: u1,
    -            ///  b46
    -            b46: u1,
    -            ///  b47
    -            b47: u1,
    -            ///  b48
    -            b48: u1,
    -            ///  b49
    -            b49: u1,
    -            ///  b50
    -            b50: u1,
    -            ///  b51
    -            b51: u1,
    -            ///  b52
    -            b52: u1,
    -            ///  b53
    -            b53: u1,
    -            ///  b54
    -            b54: u1,
    -            ///  b55
    -            b55: u1,
    -            ///  b56
    -            b56: u1,
    -            ///  b57
    -            b57: u1,
    -            ///  b58
    -            b58: u1,
    -            ///  b59
    -            b59: u1,
    -            ///  b60
    -            b60: u1,
    -            ///  b61
    -            b61: u1,
    -            ///  b62
    -            b62: u1,
    -            ///  b63
    -            b63: u1,
    -        }),
    -        ///  key registers
    -        K3RR: mmio.Mmio(packed struct(u32) {
    -            ///  b0
    -            b0: u1,
    -            ///  b1
    -            b1: u1,
    -            ///  b2
    -            b2: u1,
    -            ///  b3
    -            b3: u1,
    -            ///  b4
    -            b4: u1,
    -            ///  b5
    -            b5: u1,
    -            ///  b6
    -            b6: u1,
    -            ///  b7
    -            b7: u1,
    -            ///  b8
    -            b8: u1,
    -            ///  b9
    -            b9: u1,
    -            ///  b10
    -            b10: u1,
    -            ///  b11
    -            b11: u1,
    -            ///  b12
    -            b12: u1,
    -            ///  b13
    -            b13: u1,
    -            ///  b14
    -            b14: u1,
    -            ///  b15
    -            b15: u1,
    -            ///  b16
    -            b16: u1,
    -            ///  b17
    -            b17: u1,
    -            ///  b18
    -            b18: u1,
    -            ///  b19
    -            b19: u1,
    -            ///  b20
    -            b20: u1,
    -            ///  b21
    -            b21: u1,
    -            ///  b22
    -            b22: u1,
    -            ///  b23
    -            b23: u1,
    -            ///  b24
    -            b24: u1,
    -            ///  b25
    -            b25: u1,
    -            ///  b26
    -            b26: u1,
    -            ///  b27
    -            b27: u1,
    -            ///  b28
    -            b28: u1,
    -            ///  b29
    -            b29: u1,
    -            ///  b30
    -            b30: u1,
    -            ///  b31
    -            b31: u1,
    -        }),
    -        ///  initialization vector registers
    -        IV0LR: mmio.Mmio(packed struct(u32) {
    -            ///  IV31
    -            IV31: u1,
    -            ///  IV30
    -            IV30: u1,
    -            ///  IV29
    -            IV29: u1,
    -            ///  IV28
    -            IV28: u1,
    -            ///  IV27
    -            IV27: u1,
    -            ///  IV26
    -            IV26: u1,
    -            ///  IV25
    -            IV25: u1,
    -            ///  IV24
    -            IV24: u1,
    -            ///  IV23
    -            IV23: u1,
    -            ///  IV22
    -            IV22: u1,
    -            ///  IV21
    -            IV21: u1,
    -            ///  IV20
    -            IV20: u1,
    -            ///  IV19
    -            IV19: u1,
    -            ///  IV18
    -            IV18: u1,
    -            ///  IV17
    -            IV17: u1,
    -            ///  IV16
    -            IV16: u1,
    -            ///  IV15
    -            IV15: u1,
    -            ///  IV14
    -            IV14: u1,
    -            ///  IV13
    -            IV13: u1,
    -            ///  IV12
    -            IV12: u1,
    -            ///  IV11
    -            IV11: u1,
    -            ///  IV10
    -            IV10: u1,
    -            ///  IV9
    -            IV9: u1,
    -            ///  IV8
    -            IV8: u1,
    -            ///  IV7
    -            IV7: u1,
    -            ///  IV6
    -            IV6: u1,
    -            ///  IV5
    -            IV5: u1,
    -            ///  IV4
    -            IV4: u1,
    -            ///  IV3
    -            IV3: u1,
    -            ///  IV2
    -            IV2: u1,
    -            ///  IV1
    -            IV1: u1,
    -            ///  IV0
    -            IV0: u1,
    -        }),
    -        ///  initialization vector registers
    -        IV0RR: mmio.Mmio(packed struct(u32) {
    -            ///  IV63
    -            IV63: u1,
    -            ///  IV62
    -            IV62: u1,
    -            ///  IV61
    -            IV61: u1,
    -            ///  IV60
    -            IV60: u1,
    -            ///  IV59
    -            IV59: u1,
    -            ///  IV58
    -            IV58: u1,
    -            ///  IV57
    -            IV57: u1,
    -            ///  IV56
    -            IV56: u1,
    -            ///  IV55
    -            IV55: u1,
    -            ///  IV54
    -            IV54: u1,
    -            ///  IV53
    -            IV53: u1,
    -            ///  IV52
    -            IV52: u1,
    -            ///  IV51
    -            IV51: u1,
    -            ///  IV50
    -            IV50: u1,
    -            ///  IV49
    -            IV49: u1,
    -            ///  IV48
    -            IV48: u1,
    -            ///  IV47
    -            IV47: u1,
    -            ///  IV46
    -            IV46: u1,
    -            ///  IV45
    -            IV45: u1,
    -            ///  IV44
    -            IV44: u1,
    -            ///  IV43
    -            IV43: u1,
    -            ///  IV42
    -            IV42: u1,
    -            ///  IV41
    -            IV41: u1,
    -            ///  IV40
    -            IV40: u1,
    -            ///  IV39
    -            IV39: u1,
    -            ///  IV38
    -            IV38: u1,
    -            ///  IV37
    -            IV37: u1,
    -            ///  IV36
    -            IV36: u1,
    -            ///  IV35
    -            IV35: u1,
    -            ///  IV34
    -            IV34: u1,
    -            ///  IV33
    -            IV33: u1,
    -            ///  IV32
    -            IV32: u1,
    -        }),
    -        ///  initialization vector registers
    -        IV1LR: mmio.Mmio(packed struct(u32) {
    -            ///  IV95
    -            IV95: u1,
    -            ///  IV94
    -            IV94: u1,
    -            ///  IV93
    -            IV93: u1,
    -            ///  IV92
    -            IV92: u1,
    -            ///  IV91
    -            IV91: u1,
    -            ///  IV90
    -            IV90: u1,
    -            ///  IV89
    -            IV89: u1,
    -            ///  IV88
    -            IV88: u1,
    -            ///  IV87
    -            IV87: u1,
    -            ///  IV86
    -            IV86: u1,
    -            ///  IV85
    -            IV85: u1,
    -            ///  IV84
    -            IV84: u1,
    -            ///  IV83
    -            IV83: u1,
    -            ///  IV82
    -            IV82: u1,
    -            ///  IV81
    -            IV81: u1,
    -            ///  IV80
    -            IV80: u1,
    -            ///  IV79
    -            IV79: u1,
    -            ///  IV78
    -            IV78: u1,
    -            ///  IV77
    -            IV77: u1,
    -            ///  IV76
    -            IV76: u1,
    -            ///  IV75
    -            IV75: u1,
    -            ///  IV74
    -            IV74: u1,
    -            ///  IV73
    -            IV73: u1,
    -            ///  IV72
    -            IV72: u1,
    -            ///  IV71
    -            IV71: u1,
    -            ///  IV70
    -            IV70: u1,
    -            ///  IV69
    -            IV69: u1,
    -            ///  IV68
    -            IV68: u1,
    -            ///  IV67
    -            IV67: u1,
    -            ///  IV66
    -            IV66: u1,
    -            ///  IV65
    -            IV65: u1,
    -            ///  IV64
    -            IV64: u1,
    -        }),
    -        ///  initialization vector registers
    -        IV1RR: mmio.Mmio(packed struct(u32) {
    -            ///  IV127
    -            IV127: u1,
    -            ///  IV126
    -            IV126: u1,
    -            ///  IV125
    -            IV125: u1,
    -            ///  IV124
    -            IV124: u1,
    -            ///  IV123
    -            IV123: u1,
    -            ///  IV122
    -            IV122: u1,
    -            ///  IV121
    -            IV121: u1,
    -            ///  IV120
    -            IV120: u1,
    -            ///  IV119
    -            IV119: u1,
    -            ///  IV118
    -            IV118: u1,
    -            ///  IV117
    -            IV117: u1,
    -            ///  IV116
    -            IV116: u1,
    -            ///  IV115
    -            IV115: u1,
    -            ///  IV114
    -            IV114: u1,
    -            ///  IV113
    -            IV113: u1,
    -            ///  IV112
    -            IV112: u1,
    -            ///  IV111
    -            IV111: u1,
    -            ///  IV110
    -            IV110: u1,
    -            ///  IV109
    -            IV109: u1,
    -            ///  IV108
    -            IV108: u1,
    -            ///  IV107
    -            IV107: u1,
    -            ///  IV106
    -            IV106: u1,
    -            ///  IV105
    -            IV105: u1,
    -            ///  IV104
    -            IV104: u1,
    -            ///  IV103
    -            IV103: u1,
    -            ///  IV102
    -            IV102: u1,
    -            ///  IV101
    -            IV101: u1,
    -            ///  IV100
    -            IV100: u1,
    -            ///  IV99
    -            IV99: u1,
    -            ///  IV98
    -            IV98: u1,
    -            ///  IV97
    -            IV97: u1,
    -            ///  IV96
    -            IV96: u1,
    -        }),
    -        ///  context swap register
    -        CSGCMCCM0R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCMCCM0R
    -            CSGCMCCM0R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCMCCM1R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCMCCM1R
    -            CSGCMCCM1R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCMCCM2R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCMCCM2R
    -            CSGCMCCM2R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCMCCM3R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCMCCM3R
    -            CSGCMCCM3R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCMCCM4R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCMCCM4R
    -            CSGCMCCM4R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCMCCM5R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCMCCM5R
    -            CSGCMCCM5R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCMCCM6R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCMCCM6R
    -            CSGCMCCM6R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCMCCM7R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCMCCM7R
    -            CSGCMCCM7R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCM0R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCM0R
    -            CSGCM0R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCM1R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCM1R
    -            CSGCM1R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCM2R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCM2R
    -            CSGCM2R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCM3R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCM3R
    -            CSGCM3R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCM4R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCM4R
    -            CSGCM4R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCM5R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCM5R
    -            CSGCM5R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCM6R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCM6R
    -            CSGCM6R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCM7R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCM7R
    -            CSGCM7R: u32,
    -        }),
    -    };
    -
    -    ///  Hash processor
    -    pub const HASH = extern struct {
    -        ///  control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            reserved2: u2,
    -            ///  Initialize message digest calculation
    -            INIT: u1,
    -            ///  DMA enable
    -            DMAE: u1,
    -            ///  Data type selection
    -            DATATYPE: u2,
    -            ///  Mode selection
    -            MODE: u1,
    -            ///  Algorithm selection
    -            ALGO0: u1,
    -            ///  Number of words already pushed
    -            NBW: u4,
    -            ///  DIN not empty
    -            DINNE: u1,
    -            ///  Multiple DMA Transfers
    -            MDMAT: u1,
    -            reserved16: u2,
    -            ///  Long key selection
    -            LKEY: u1,
    -            reserved18: u1,
    -            ///  ALGO
    -            ALGO1: u1,
    -            padding: u13,
    -        }),
    -        ///  data input register
    -        DIN: mmio.Mmio(packed struct(u32) {
    -            ///  Data input
    -            DATAIN: u32,
    -        }),
    -        ///  start register
    -        STR: mmio.Mmio(packed struct(u32) {
    -            ///  Number of valid bits in the last word of the message
    -            NBLW: u5,
    -            reserved8: u3,
    -            ///  Digest calculation
    -            DCAL: u1,
    -            padding: u23,
    -        }),
    -        ///  digest registers
    -        HR0: mmio.Mmio(packed struct(u32) {
    -            ///  H0
    -            H0: u32,
    -        }),
    -        ///  digest registers
    -        HR1: mmio.Mmio(packed struct(u32) {
    -            ///  H1
    -            H1: u32,
    -        }),
    -        ///  digest registers
    -        HR2: mmio.Mmio(packed struct(u32) {
    -            ///  H2
    -            H2: u32,
    -        }),
    -        ///  digest registers
    -        HR3: mmio.Mmio(packed struct(u32) {
    -            ///  H3
    -            H3: u32,
    -        }),
    -        ///  digest registers
    -        HR4: mmio.Mmio(packed struct(u32) {
    -            ///  H4
    -            H4: u32,
    -        }),
    -        ///  interrupt enable register
    -        IMR: mmio.Mmio(packed struct(u32) {
    -            ///  Data input interrupt enable
    -            DINIE: u1,
    -            ///  Digest calculation completion interrupt enable
    -            DCIE: u1,
    -            padding: u30,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Data input interrupt status
    -            DINIS: u1,
    -            ///  Digest calculation completion interrupt status
    -            DCIS: u1,
    -            ///  DMA Status
    -            DMAS: u1,
    -            ///  Busy bit
    -            BUSY: u1,
    -            padding: u28,
    -        }),
    -        reserved248: [208]u8,
    -        ///  context swap registers
    -        CSR0: mmio.Mmio(packed struct(u32) {
    -            ///  CSR0
    -            CSR0: u32,
    -        }),
    -        ///  context swap registers
    -        CSR1: mmio.Mmio(packed struct(u32) {
    -            ///  CSR1
    -            CSR1: u32,
    -        }),
    -        ///  context swap registers
    -        CSR2: mmio.Mmio(packed struct(u32) {
    -            ///  CSR2
    -            CSR2: u32,
    -        }),
    -        ///  context swap registers
    -        CSR3: mmio.Mmio(packed struct(u32) {
    -            ///  CSR3
    -            CSR3: u32,
    -        }),
    -        ///  context swap registers
    -        CSR4: mmio.Mmio(packed struct(u32) {
    -            ///  CSR4
    -            CSR4: u32,
    -        }),
    -        ///  context swap registers
    -        CSR5: mmio.Mmio(packed struct(u32) {
    -            ///  CSR5
    -            CSR5: u32,
    -        }),
    -        ///  context swap registers
    -        CSR6: mmio.Mmio(packed struct(u32) {
    -            ///  CSR6
    -            CSR6: u32,
    -        }),
    -        ///  context swap registers
    -        CSR7: mmio.Mmio(packed struct(u32) {
    -            ///  CSR7
    -            CSR7: u32,
    -        }),
    -        ///  context swap registers
    -        CSR8: mmio.Mmio(packed struct(u32) {
    -            ///  CSR8
    -            CSR8: u32,
    -        }),
    -        ///  context swap registers
    -        CSR9: mmio.Mmio(packed struct(u32) {
    -            ///  CSR9
    -            CSR9: u32,
    -        }),
    -        ///  context swap registers
    -        CSR10: mmio.Mmio(packed struct(u32) {
    -            ///  CSR10
    -            CSR10: u32,
    -        }),
    -        ///  context swap registers
    -        CSR11: mmio.Mmio(packed struct(u32) {
    -            ///  CSR11
    -            CSR11: u32,
    -        }),
    -        ///  context swap registers
    -        CSR12: mmio.Mmio(packed struct(u32) {
    -            ///  CSR12
    -            CSR12: u32,
    -        }),
    -        ///  context swap registers
    -        CSR13: mmio.Mmio(packed struct(u32) {
    -            ///  CSR13
    -            CSR13: u32,
    -        }),
    -        ///  context swap registers
    -        CSR14: mmio.Mmio(packed struct(u32) {
    -            ///  CSR14
    -            CSR14: u32,
    -        }),
    -        ///  context swap registers
    -        CSR15: mmio.Mmio(packed struct(u32) {
    -            ///  CSR15
    -            CSR15: u32,
    -        }),
    -        ///  context swap registers
    -        CSR16: mmio.Mmio(packed struct(u32) {
    -            ///  CSR16
    -            CSR16: u32,
    -        }),
    -        ///  context swap registers
    -        CSR17: mmio.Mmio(packed struct(u32) {
    -            ///  CSR17
    -            CSR17: u32,
    -        }),
    -        ///  context swap registers
    -        CSR18: mmio.Mmio(packed struct(u32) {
    -            ///  CSR18
    -            CSR18: u32,
    -        }),
    -        ///  context swap registers
    -        CSR19: mmio.Mmio(packed struct(u32) {
    -            ///  CSR19
    -            CSR19: u32,
    -        }),
    -        ///  context swap registers
    -        CSR20: mmio.Mmio(packed struct(u32) {
    -            ///  CSR20
    -            CSR20: u32,
    -        }),
    -        ///  context swap registers
    -        CSR21: mmio.Mmio(packed struct(u32) {
    -            ///  CSR21
    -            CSR21: u32,
    -        }),
    -        ///  context swap registers
    -        CSR22: mmio.Mmio(packed struct(u32) {
    -            ///  CSR22
    -            CSR22: u32,
    -        }),
    -        ///  context swap registers
    -        CSR23: mmio.Mmio(packed struct(u32) {
    -            ///  CSR23
    -            CSR23: u32,
    -        }),
    -        ///  context swap registers
    -        CSR24: mmio.Mmio(packed struct(u32) {
    -            ///  CSR24
    -            CSR24: u32,
    -        }),
    -        ///  context swap registers
    -        CSR25: mmio.Mmio(packed struct(u32) {
    -            ///  CSR25
    -            CSR25: u32,
    -        }),
    -        ///  context swap registers
    -        CSR26: mmio.Mmio(packed struct(u32) {
    -            ///  CSR26
    -            CSR26: u32,
    -        }),
    -        ///  context swap registers
    -        CSR27: mmio.Mmio(packed struct(u32) {
    -            ///  CSR27
    -            CSR27: u32,
    -        }),
    -        ///  context swap registers
    -        CSR28: mmio.Mmio(packed struct(u32) {
    -            ///  CSR28
    -            CSR28: u32,
    -        }),
    -        ///  context swap registers
    -        CSR29: mmio.Mmio(packed struct(u32) {
    -            ///  CSR29
    -            CSR29: u32,
    -        }),
    -        ///  context swap registers
    -        CSR30: mmio.Mmio(packed struct(u32) {
    -            ///  CSR30
    -            CSR30: u32,
    -        }),
    -        ///  context swap registers
    -        CSR31: mmio.Mmio(packed struct(u32) {
    -            ///  CSR31
    -            CSR31: u32,
    -        }),
    -        ///  context swap registers
    -        CSR32: mmio.Mmio(packed struct(u32) {
    -            ///  CSR32
    -            CSR32: u32,
    -        }),
    -        ///  context swap registers
    -        CSR33: mmio.Mmio(packed struct(u32) {
    -            ///  CSR33
    -            CSR33: u32,
    -        }),
    -        ///  context swap registers
    -        CSR34: mmio.Mmio(packed struct(u32) {
    -            ///  CSR34
    -            CSR34: u32,
    -        }),
    -        ///  context swap registers
    -        CSR35: mmio.Mmio(packed struct(u32) {
    -            ///  CSR35
    -            CSR35: u32,
    -        }),
    -        ///  context swap registers
    -        CSR36: mmio.Mmio(packed struct(u32) {
    -            ///  CSR36
    -            CSR36: u32,
    -        }),
    -        ///  context swap registers
    -        CSR37: mmio.Mmio(packed struct(u32) {
    -            ///  CSR37
    -            CSR37: u32,
    -        }),
    -        ///  context swap registers
    -        CSR38: mmio.Mmio(packed struct(u32) {
    -            ///  CSR38
    -            CSR38: u32,
    -        }),
    -        ///  context swap registers
    -        CSR39: mmio.Mmio(packed struct(u32) {
    -            ///  CSR39
    -            CSR39: u32,
    -        }),
    -        ///  context swap registers
    -        CSR40: mmio.Mmio(packed struct(u32) {
    -            ///  CSR40
    -            CSR40: u32,
    -        }),
    -        ///  context swap registers
    -        CSR41: mmio.Mmio(packed struct(u32) {
    -            ///  CSR41
    -            CSR41: u32,
    -        }),
    -        ///  context swap registers
    -        CSR42: mmio.Mmio(packed struct(u32) {
    -            ///  CSR42
    -            CSR42: u32,
    -        }),
    -        ///  context swap registers
    -        CSR43: mmio.Mmio(packed struct(u32) {
    -            ///  CSR43
    -            CSR43: u32,
    -        }),
    -        ///  context swap registers
    -        CSR44: mmio.Mmio(packed struct(u32) {
    -            ///  CSR44
    -            CSR44: u32,
    -        }),
    -        ///  context swap registers
    -        CSR45: mmio.Mmio(packed struct(u32) {
    -            ///  CSR45
    -            CSR45: u32,
    -        }),
    -        ///  context swap registers
    -        CSR46: mmio.Mmio(packed struct(u32) {
    -            ///  CSR46
    -            CSR46: u32,
    -        }),
    -        ///  context swap registers
    -        CSR47: mmio.Mmio(packed struct(u32) {
    -            ///  CSR47
    -            CSR47: u32,
    -        }),
    -        ///  context swap registers
    -        CSR48: mmio.Mmio(packed struct(u32) {
    -            ///  CSR48
    -            CSR48: u32,
    -        }),
    -        ///  context swap registers
    -        CSR49: mmio.Mmio(packed struct(u32) {
    -            ///  CSR49
    -            CSR49: u32,
    -        }),
    -        ///  context swap registers
    -        CSR50: mmio.Mmio(packed struct(u32) {
    -            ///  CSR50
    -            CSR50: u32,
    -        }),
    -        ///  context swap registers
    -        CSR51: mmio.Mmio(packed struct(u32) {
    -            ///  CSR51
    -            CSR51: u32,
    -        }),
    -        ///  context swap registers
    -        CSR52: mmio.Mmio(packed struct(u32) {
    -            ///  CSR52
    -            CSR52: u32,
    -        }),
    -        ///  context swap registers
    -        CSR53: mmio.Mmio(packed struct(u32) {
    -            ///  CSR53
    -            CSR53: u32,
    -        }),
    -        reserved784: [320]u8,
    -        ///  HASH digest register
    -        HASH_HR0: mmio.Mmio(packed struct(u32) {
    -            ///  H0
    -            H0: u32,
    -        }),
    -        ///  read-only
    -        HASH_HR1: mmio.Mmio(packed struct(u32) {
    -            ///  H1
    -            H1: u32,
    -        }),
    -        ///  read-only
    -        HASH_HR2: mmio.Mmio(packed struct(u32) {
    -            ///  H2
    -            H2: u32,
    -        }),
    -        ///  read-only
    -        HASH_HR3: mmio.Mmio(packed struct(u32) {
    -            ///  H3
    -            H3: u32,
    -        }),
    -        ///  read-only
    -        HASH_HR4: mmio.Mmio(packed struct(u32) {
    -            ///  H4
    -            H4: u32,
    -        }),
    -        ///  read-only
    -        HASH_HR5: mmio.Mmio(packed struct(u32) {
    -            ///  H5
    -            H5: u32,
    -        }),
    -        ///  read-only
    -        HASH_HR6: mmio.Mmio(packed struct(u32) {
    -            ///  H6
    -            H6: u32,
    -        }),
    -        ///  read-only
    -        HASH_HR7: mmio.Mmio(packed struct(u32) {
    -            ///  H7
    -            H7: u32,
    -        }),
    -    };
    -
    -    ///  General-purpose I/Os
    -    pub const GPIOB = extern struct {
    -        ///  GPIO port mode register
    -        MODER: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER0: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER1: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER2: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER3: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER4: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER5: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER6: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER7: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER8: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER9: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER10: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER11: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER12: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER13: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER14: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER15: u2,
    -        }),
    -        ///  GPIO port output type register
    -        OTYPER: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            OT0: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT1: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT2: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT3: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT4: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT5: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT6: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT7: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT8: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT9: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT10: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT11: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT12: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT13: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT14: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT15: u1,
    -            padding: u16,
    -        }),
    -        ///  GPIO port output speed register
    -        OSPEEDR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR0: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR1: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR2: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR3: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR4: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR5: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR6: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR7: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR8: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR9: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR10: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR11: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR12: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR13: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR14: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR15: u2,
    -        }),
    -        ///  GPIO port pull-up/pull-down register
    -        PUPDR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR0: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR1: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR2: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR3: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR4: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR5: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR6: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR7: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR8: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR9: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR10: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR11: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR12: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR13: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR14: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR15: u2,
    -        }),
    -        ///  GPIO port input data register
    -        IDR: mmio.Mmio(packed struct(u32) {
    -            ///  Port input data (y = 0..15)
    -            IDR0: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR1: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR2: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR3: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR4: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR5: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR6: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR7: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR8: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR9: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR10: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR11: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR12: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR13: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR14: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR15: u1,
    -            padding: u16,
    -        }),
    -        ///  GPIO port output data register
    -        ODR: mmio.Mmio(packed struct(u32) {
    -            ///  Port output data (y = 0..15)
    -            ODR0: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR1: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR2: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR3: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR4: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR5: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR6: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR7: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR8: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR9: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR10: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR11: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR12: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR13: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR14: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR15: u1,
    -            padding: u16,
    -        }),
    -        ///  GPIO port bit set/reset register
    -        BSRR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x set bit y (y= 0..15)
    -            BS0: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS1: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS2: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS3: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS4: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS5: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS6: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS7: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS8: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS9: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS10: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS11: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS12: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS13: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS14: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS15: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BR0: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR1: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR2: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR3: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR4: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR5: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR6: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR7: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR8: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR9: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR10: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR11: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR12: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR13: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR14: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR15: u1,
    -        }),
    -        ///  GPIO port configuration lock register
    -        LCKR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK0: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK1: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK2: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK3: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK4: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK5: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK6: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK7: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK8: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK9: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK10: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK11: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK12: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK13: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK14: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK15: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCKK: u1,
    -            padding: u15,
    -        }),
    -        ///  GPIO alternate function low register
    -        AFRL: mmio.Mmio(packed struct(u32) {
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL0: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL1: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL2: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL3: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL4: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL5: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL6: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL7: u4,
    -        }),
    -        ///  GPIO alternate function high register
    -        AFRH: mmio.Mmio(packed struct(u32) {
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH8: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH9: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH10: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH11: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH12: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH13: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH14: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH15: u4,
    -        }),
    -    };
    -
    -    ///  General-purpose I/Os
    -    pub const GPIOA = extern struct {
    -        ///  GPIO port mode register
    -        MODER: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER0: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER1: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER2: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER3: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER4: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER5: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER6: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER7: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER8: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER9: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER10: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER11: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER12: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER13: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER14: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER15: u2,
    -        }),
    -        ///  GPIO port output type register
    -        OTYPER: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            OT0: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT1: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT2: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT3: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT4: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT5: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT6: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT7: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT8: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT9: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT10: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT11: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT12: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT13: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT14: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT15: u1,
    -            padding: u16,
    -        }),
    -        ///  GPIO port output speed register
    -        OSPEEDR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR0: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR1: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR2: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR3: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR4: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR5: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR6: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR7: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR8: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR9: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR10: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR11: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR12: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR13: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR14: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR15: u2,
    -        }),
    -        ///  GPIO port pull-up/pull-down register
    -        PUPDR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR0: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR1: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR2: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR3: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR4: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR5: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR6: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR7: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR8: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR9: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR10: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR11: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR12: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR13: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR14: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR15: u2,
    -        }),
    -        ///  GPIO port input data register
    -        IDR: mmio.Mmio(packed struct(u32) {
    -            ///  Port input data (y = 0..15)
    -            IDR0: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR1: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR2: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR3: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR4: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR5: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR6: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR7: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR8: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR9: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR10: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR11: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR12: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR13: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR14: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR15: u1,
    -            padding: u16,
    -        }),
    -        ///  GPIO port output data register
    -        ODR: mmio.Mmio(packed struct(u32) {
    -            ///  Port output data (y = 0..15)
    -            ODR0: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR1: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR2: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR3: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR4: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR5: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR6: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR7: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR8: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR9: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR10: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR11: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR12: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR13: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR14: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR15: u1,
    -            padding: u16,
    -        }),
    -        ///  GPIO port bit set/reset register
    -        BSRR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x set bit y (y= 0..15)
    -            BS0: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS1: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS2: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS3: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS4: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS5: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS6: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS7: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS8: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS9: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS10: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS11: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS12: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS13: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS14: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS15: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BR0: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR1: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR2: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR3: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR4: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR5: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR6: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR7: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR8: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR9: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR10: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR11: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR12: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR13: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR14: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR15: u1,
    -        }),
    -        ///  GPIO port configuration lock register
    -        LCKR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK0: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK1: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK2: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK3: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK4: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK5: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK6: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK7: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK8: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK9: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK10: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK11: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK12: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK13: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK14: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK15: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCKK: u1,
    -            padding: u15,
    -        }),
    -        ///  GPIO alternate function low register
    -        AFRL: mmio.Mmio(packed struct(u32) {
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL0: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL1: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL2: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL3: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL4: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL5: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL6: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL7: u4,
    -        }),
    -        ///  GPIO alternate function high register
    -        AFRH: mmio.Mmio(packed struct(u32) {
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH8: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH9: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH10: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH11: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH12: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH13: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH14: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH15: u4,
    -        }),
    -    };
    -
    -    ///  System configuration controller
    -    pub const SYSCFG = extern struct {
    -        ///  memory remap register
    -        MEMRM: mmio.Mmio(packed struct(u32) {
    -            ///  MEM_MODE
    -            MEM_MODE: u2,
    -            padding: u30,
    -        }),
    -        ///  peripheral mode configuration register
    -        PMC: mmio.Mmio(packed struct(u32) {
    -            reserved23: u23,
    -            ///  Ethernet PHY interface selection
    -            MII_RMII_SEL: u1,
    -            padding: u8,
    -        }),
    -        ///  external interrupt configuration register 1
    -        EXTICR1: mmio.Mmio(packed struct(u32) {
    -            ///  EXTI x configuration (x = 0 to 3)
    -            EXTI0: u4,
    -            ///  EXTI x configuration (x = 0 to 3)
    -            EXTI1: u4,
    -            ///  EXTI x configuration (x = 0 to 3)
    -            EXTI2: u4,
    -            ///  EXTI x configuration (x = 0 to 3)
    -            EXTI3: u4,
    -            padding: u16,
    -        }),
    -        ///  external interrupt configuration register 2
    -        EXTICR2: mmio.Mmio(packed struct(u32) {
    -            ///  EXTI x configuration (x = 4 to 7)
    -            EXTI4: u4,
    -            ///  EXTI x configuration (x = 4 to 7)
    -            EXTI5: u4,
    -            ///  EXTI x configuration (x = 4 to 7)
    -            EXTI6: u4,
    -            ///  EXTI x configuration (x = 4 to 7)
    -            EXTI7: u4,
    -            padding: u16,
    -        }),
    -        ///  external interrupt configuration register 3
    -        EXTICR3: mmio.Mmio(packed struct(u32) {
    -            ///  EXTI x configuration (x = 8 to 11)
    -            EXTI8: u4,
    -            ///  EXTI x configuration (x = 8 to 11)
    -            EXTI9: u4,
    -            ///  EXTI10
    -            EXTI10: u4,
    -            ///  EXTI x configuration (x = 8 to 11)
    -            EXTI11: u4,
    -            padding: u16,
    -        }),
    -        ///  external interrupt configuration register 4
    -        EXTICR4: mmio.Mmio(packed struct(u32) {
    -            ///  EXTI x configuration (x = 12 to 15)
    -            EXTI12: u4,
    -            ///  EXTI x configuration (x = 12 to 15)
    -            EXTI13: u4,
    -            ///  EXTI x configuration (x = 12 to 15)
    -            EXTI14: u4,
    -            ///  EXTI x configuration (x = 12 to 15)
    -            EXTI15: u4,
    -            padding: u16,
    -        }),
    -        reserved32: [8]u8,
    -        ///  Compensation cell control register
    -        CMPCR: mmio.Mmio(packed struct(u32) {
    -            ///  Compensation cell power-down
    -            CMP_PD: u1,
    -            reserved8: u7,
    -            ///  READY
    -            READY: u1,
    -            padding: u23,
    -        }),
    -    };
    -
    -    ///  Serial peripheral interface
    -    pub const SPI1 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Clock phase
    -            CPHA: u1,
    -            ///  Clock polarity
    -            CPOL: u1,
    -            ///  Master selection
    -            MSTR: u1,
    -            ///  Baud rate control
    -            BR: u3,
    -            ///  SPI enable
    -            SPE: u1,
    -            ///  Frame format
    -            LSBFIRST: u1,
    -            ///  Internal slave select
    -            SSI: u1,
    -            ///  Software slave management
    -            SSM: u1,
    -            ///  Receive only
    -            RXONLY: u1,
    -            ///  Data frame format
    -            DFF: u1,
    -            ///  CRC transfer next
    -            CRCNEXT: u1,
    -            ///  Hardware CRC calculation enable
    -            CRCEN: u1,
    -            ///  Output enable in bidirectional mode
    -            BIDIOE: u1,
    -            ///  Bidirectional data mode enable
    -            BIDIMODE: u1,
    -            padding: u16,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            ///  Rx buffer DMA enable
    -            RXDMAEN: u1,
    -            ///  Tx buffer DMA enable
    -            TXDMAEN: u1,
    -            ///  SS output enable
    -            SSOE: u1,
    -            reserved4: u1,
    -            ///  Frame format
    -            FRF: u1,
    -            ///  Error interrupt enable
    -            ERRIE: u1,
    -            ///  RX buffer not empty interrupt enable
    -            RXNEIE: u1,
    -            ///  Tx buffer empty interrupt enable
    -            TXEIE: u1,
    -            padding: u24,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Receive buffer not empty
    -            RXNE: u1,
    -            ///  Transmit buffer empty
    -            TXE: u1,
    -            ///  Channel side
    -            CHSIDE: u1,
    -            ///  Underrun flag
    -            UDR: u1,
    -            ///  CRC error flag
    -            CRCERR: u1,
    -            ///  Mode fault
    -            MODF: u1,
    -            ///  Overrun flag
    -            OVR: u1,
    -            ///  Busy flag
    -            BSY: u1,
    -            ///  TI frame format error
    -            TIFRFE: u1,
    -            padding: u23,
    -        }),
    -        ///  data register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  Data register
    -            DR: u16,
    -            padding: u16,
    -        }),
    -        ///  CRC polynomial register
    -        CRCPR: mmio.Mmio(packed struct(u32) {
    -            ///  CRC polynomial register
    -            CRCPOLY: u16,
    -            padding: u16,
    -        }),
    -        ///  RX CRC register
    -        RXCRCR: mmio.Mmio(packed struct(u32) {
    -            ///  Rx CRC register
    -            RxCRC: u16,
    -            padding: u16,
    -        }),
    -        ///  TX CRC register
    -        TXCRCR: mmio.Mmio(packed struct(u32) {
    -            ///  Tx CRC register
    -            TxCRC: u16,
    -            padding: u16,
    -        }),
    -        ///  I2S configuration register
    -        I2SCFGR: mmio.Mmio(packed struct(u32) {
    -            ///  Channel length (number of bits per audio channel)
    -            CHLEN: u1,
    -            ///  Data length to be transferred
    -            DATLEN: u2,
    -            ///  Steady state clock polarity
    -            CKPOL: u1,
    -            ///  I2S standard selection
    -            I2SSTD: u2,
    -            reserved7: u1,
    -            ///  PCM frame synchronization
    -            PCMSYNC: u1,
    -            ///  I2S configuration mode
    -            I2SCFG: u2,
    -            ///  I2S Enable
    -            I2SE: u1,
    -            ///  I2S mode selection
    -            I2SMOD: u1,
    -            padding: u20,
    -        }),
    -        ///  I2S prescaler register
    -        I2SPR: mmio.Mmio(packed struct(u32) {
    -            ///  I2S Linear prescaler
    -            I2SDIV: u8,
    -            ///  Odd factor for the prescaler
    -            ODD: u1,
    -            ///  Master clock output enable
    -            MCKOE: u1,
    -            padding: u22,
    -        }),
    -    };
    -
    -    ///  LCD-TFT Controller
    -    pub const LTDC = extern struct {
    -        reserved8: [8]u8,
    -        ///  Synchronization Size Configuration Register
    -        SSCR: mmio.Mmio(packed struct(u32) {
    -            ///  Vertical Synchronization Height (in units of horizontal scan line)
    -            VSH: u11,
    -            reserved16: u5,
    -            ///  Horizontal Synchronization Width (in units of pixel clock period)
    -            HSW: u10,
    -            padding: u6,
    -        }),
    -        ///  Back Porch Configuration Register
    -        BPCR: mmio.Mmio(packed struct(u32) {
    -            ///  Accumulated Vertical back porch (in units of horizontal scan line)
    -            AVBP: u11,
    -            reserved16: u5,
    -            ///  Accumulated Horizontal back porch (in units of pixel clock period)
    -            AHBP: u10,
    -            padding: u6,
    -        }),
    -        ///  Active Width Configuration Register
    -        AWCR: mmio.Mmio(packed struct(u32) {
    -            ///  Accumulated Active Height (in units of horizontal scan line)
    -            AAH: u11,
    -            reserved16: u5,
    -            ///  AAV
    -            AAV: u10,
    -            padding: u6,
    -        }),
    -        ///  Total Width Configuration Register
    -        TWCR: mmio.Mmio(packed struct(u32) {
    -            ///  Total Height (in units of horizontal scan line)
    -            TOTALH: u11,
    -            reserved16: u5,
    -            ///  Total Width (in units of pixel clock period)
    -            TOTALW: u10,
    -            padding: u6,
    -        }),
    -        ///  Global Control Register
    -        GCR: mmio.Mmio(packed struct(u32) {
    -            ///  LCD-TFT controller enable bit
    -            LTDCEN: u1,
    -            reserved4: u3,
    -            ///  Dither Blue Width
    -            DBW: u3,
    -            reserved8: u1,
    -            ///  Dither Green Width
    -            DGW: u3,
    -            reserved12: u1,
    -            ///  Dither Red Width
    -            DRW: u3,
    -            reserved16: u1,
    -            ///  Dither Enable
    -            DEN: u1,
    -            reserved28: u11,
    -            ///  Pixel Clock Polarity
    -            PCPOL: u1,
    -            ///  Data Enable Polarity
    -            DEPOL: u1,
    -            ///  Vertical Synchronization Polarity
    -            VSPOL: u1,
    -            ///  Horizontal Synchronization Polarity
    -            HSPOL: u1,
    -        }),
    -        reserved36: [8]u8,
    -        ///  Shadow Reload Configuration Register
    -        SRCR: mmio.Mmio(packed struct(u32) {
    -            ///  Immediate Reload
    -            IMR: u1,
    -            ///  Vertical Blanking Reload
    -            VBR: u1,
    -            padding: u30,
    -        }),
    -        reserved44: [4]u8,
    -        ///  Background Color Configuration Register
    -        BCCR: mmio.Mmio(packed struct(u32) {
    -            ///  Background Color Red value
    -            BC: u24,
    -            padding: u8,
    -        }),
    -        reserved52: [4]u8,
    -        ///  Interrupt Enable Register
    -        IER: mmio.Mmio(packed struct(u32) {
    -            ///  Line Interrupt Enable
    -            LIE: u1,
    -            ///  FIFO Underrun Interrupt Enable
    -            FUIE: u1,
    -            ///  Transfer Error Interrupt Enable
    -            TERRIE: u1,
    -            ///  Register Reload interrupt enable
    -            RRIE: u1,
    -            padding: u28,
    -        }),
    -        ///  Interrupt Status Register
    -        ISR: mmio.Mmio(packed struct(u32) {
    -            ///  Line Interrupt flag
    -            LIF: u1,
    -            ///  FIFO Underrun Interrupt flag
    -            FUIF: u1,
    -            ///  Transfer Error interrupt flag
    -            TERRIF: u1,
    -            ///  Register Reload Interrupt Flag
    -            RRIF: u1,
    -            padding: u28,
    -        }),
    -        ///  Interrupt Clear Register
    -        ICR: mmio.Mmio(packed struct(u32) {
    -            ///  Clears the Line Interrupt Flag
    -            CLIF: u1,
    -            ///  Clears the FIFO Underrun Interrupt flag
    -            CFUIF: u1,
    -            ///  Clears the Transfer Error Interrupt Flag
    -            CTERRIF: u1,
    -            ///  Clears Register Reload Interrupt Flag
    -            CRRIF: u1,
    -            padding: u28,
    -        }),
    -        ///  Line Interrupt Position Configuration Register
    -        LIPCR: mmio.Mmio(packed struct(u32) {
    -            ///  Line Interrupt Position
    -            LIPOS: u11,
    -            padding: u21,
    -        }),
    -        ///  Current Position Status Register
    -        CPSR: mmio.Mmio(packed struct(u32) {
    -            ///  Current Y Position
    -            CYPOS: u16,
    -            ///  Current X Position
    -            CXPOS: u16,
    -        }),
    -        ///  Current Display Status Register
    -        CDSR: mmio.Mmio(packed struct(u32) {
    -            ///  Vertical Data Enable display Status
    -            VDES: u1,
    -            ///  Horizontal Data Enable display Status
    -            HDES: u1,
    -            ///  Vertical Synchronization display Status
    -            VSYNCS: u1,
    -            ///  Horizontal Synchronization display Status
    -            HSYNCS: u1,
    -            padding: u28,
    -        }),
    -        reserved132: [56]u8,
    -        ///  Layerx Control Register
    -        L1CR: mmio.Mmio(packed struct(u32) {
    -            ///  Layer Enable
    -            LEN: u1,
    -            ///  Color Keying Enable
    -            COLKEN: u1,
    -            reserved4: u2,
    -            ///  Color Look-Up Table Enable
    -            CLUTEN: u1,
    -            padding: u27,
    -        }),
    -        ///  Layerx Window Horizontal Position Configuration Register
    -        L1WHPCR: mmio.Mmio(packed struct(u32) {
    -            ///  Window Horizontal Start Position
    -            WHSTPOS: u12,
    -            reserved16: u4,
    -            ///  Window Horizontal Stop Position
    -            WHSPPOS: u12,
    -            padding: u4,
    -        }),
    -        ///  Layerx Window Vertical Position Configuration Register
    -        L1WVPCR: mmio.Mmio(packed struct(u32) {
    -            ///  Window Vertical Start Position
    -            WVSTPOS: u11,
    -            reserved16: u5,
    -            ///  Window Vertical Stop Position
    -            WVSPPOS: u11,
    -            padding: u5,
    -        }),
    -        ///  Layerx Color Keying Configuration Register
    -        L1CKCR: mmio.Mmio(packed struct(u32) {
    -            ///  Color Key Blue value
    -            CKBLUE: u8,
    -            ///  Color Key Green value
    -            CKGREEN: u8,
    -            ///  Color Key Red value
    -            CKRED: u8,
    -            padding: u8,
    -        }),
    -        ///  Layerx Pixel Format Configuration Register
    -        L1PFCR: mmio.Mmio(packed struct(u32) {
    -            ///  Pixel Format
    -            PF: u3,
    -            padding: u29,
    -        }),
    -        ///  Layerx Constant Alpha Configuration Register
    -        L1CACR: mmio.Mmio(packed struct(u32) {
    -            ///  Constant Alpha
    -            CONSTA: u8,
    -            padding: u24,
    -        }),
    -        ///  Layerx Default Color Configuration Register
    -        L1DCCR: mmio.Mmio(packed struct(u32) {
    -            ///  Default Color Blue
    -            DCBLUE: u8,
    -            ///  Default Color Green
    -            DCGREEN: u8,
    -            ///  Default Color Red
    -            DCRED: u8,
    -            ///  Default Color Alpha
    -            DCALPHA: u8,
    -        }),
    -        ///  Layerx Blending Factors Configuration Register
    -        L1BFCR: mmio.Mmio(packed struct(u32) {
    -            ///  Blending Factor 2
    -            BF2: u3,
    -            reserved8: u5,
    -            ///  Blending Factor 1
    -            BF1: u3,
    -            padding: u21,
    -        }),
    -        reserved172: [8]u8,
    -        ///  Layerx Color Frame Buffer Address Register
    -        L1CFBAR: mmio.Mmio(packed struct(u32) {
    -            ///  Color Frame Buffer Start Address
    -            CFBADD: u32,
    -        }),
    -        ///  Layerx Color Frame Buffer Length Register
    -        L1CFBLR: mmio.Mmio(packed struct(u32) {
    -            ///  Color Frame Buffer Line Length
    -            CFBLL: u13,
    -            reserved16: u3,
    -            ///  Color Frame Buffer Pitch in bytes
    -            CFBP: u13,
    -            padding: u3,
    -        }),
    -        ///  Layerx ColorFrame Buffer Line Number Register
    -        L1CFBLNR: mmio.Mmio(packed struct(u32) {
    -            ///  Frame Buffer Line Number
    -            CFBLNBR: u11,
    -            padding: u21,
    -        }),
    -        reserved196: [12]u8,
    -        ///  Layerx CLUT Write Register
    -        L1CLUTWR: mmio.Mmio(packed struct(u32) {
    -            ///  Blue value
    -            BLUE: u8,
    -            ///  Green value
    -            GREEN: u8,
    -            ///  Red value
    -            RED: u8,
    -            ///  CLUT Address
    -            CLUTADD: u8,
    -        }),
    -        reserved260: [60]u8,
    -        ///  Layerx Control Register
    -        L2CR: mmio.Mmio(packed struct(u32) {
    -            ///  Layer Enable
    -            LEN: u1,
    -            ///  Color Keying Enable
    -            COLKEN: u1,
    -            reserved4: u2,
    -            ///  Color Look-Up Table Enable
    -            CLUTEN: u1,
    -            padding: u27,
    -        }),
    -        ///  Layerx Window Horizontal Position Configuration Register
    -        L2WHPCR: mmio.Mmio(packed struct(u32) {
    -            ///  Window Horizontal Start Position
    -            WHSTPOS: u12,
    -            reserved16: u4,
    -            ///  Window Horizontal Stop Position
    -            WHSPPOS: u12,
    -            padding: u4,
    -        }),
    -        ///  Layerx Window Vertical Position Configuration Register
    -        L2WVPCR: mmio.Mmio(packed struct(u32) {
    -            ///  Window Vertical Start Position
    -            WVSTPOS: u11,
    -            reserved16: u5,
    -            ///  Window Vertical Stop Position
    -            WVSPPOS: u11,
    -            padding: u5,
    -        }),
    -        ///  Layerx Color Keying Configuration Register
    -        L2CKCR: mmio.Mmio(packed struct(u32) {
    -            ///  Color Key Blue value
    -            CKBLUE: u8,
    -            ///  Color Key Green value
    -            CKGREEN: u7,
    -            ///  Color Key Red value
    -            CKRED: u9,
    -            padding: u8,
    -        }),
    -        ///  Layerx Pixel Format Configuration Register
    -        L2PFCR: mmio.Mmio(packed struct(u32) {
    -            ///  Pixel Format
    -            PF: u3,
    -            padding: u29,
    -        }),
    -        ///  Layerx Constant Alpha Configuration Register
    -        L2CACR: mmio.Mmio(packed struct(u32) {
    -            ///  Constant Alpha
    -            CONSTA: u8,
    -            padding: u24,
    -        }),
    -        ///  Layerx Default Color Configuration Register
    -        L2DCCR: mmio.Mmio(packed struct(u32) {
    -            ///  Default Color Blue
    -            DCBLUE: u8,
    -            ///  Default Color Green
    -            DCGREEN: u8,
    -            ///  Default Color Red
    -            DCRED: u8,
    -            ///  Default Color Alpha
    -            DCALPHA: u8,
    -        }),
    -        ///  Layerx Blending Factors Configuration Register
    -        L2BFCR: mmio.Mmio(packed struct(u32) {
    -            ///  Blending Factor 2
    -            BF2: u3,
    -            reserved8: u5,
    -            ///  Blending Factor 1
    -            BF1: u3,
    -            padding: u21,
    -        }),
    -        reserved300: [8]u8,
    -        ///  Layerx Color Frame Buffer Address Register
    -        L2CFBAR: mmio.Mmio(packed struct(u32) {
    -            ///  Color Frame Buffer Start Address
    -            CFBADD: u32,
    -        }),
    -        ///  Layerx Color Frame Buffer Length Register
    -        L2CFBLR: mmio.Mmio(packed struct(u32) {
    -            ///  Color Frame Buffer Line Length
    -            CFBLL: u13,
    -            reserved16: u3,
    -            ///  Color Frame Buffer Pitch in bytes
    -            CFBP: u13,
    -            padding: u3,
    -        }),
    -        ///  Layerx ColorFrame Buffer Line Number Register
    -        L2CFBLNR: mmio.Mmio(packed struct(u32) {
    -            ///  Frame Buffer Line Number
    -            CFBLNBR: u11,
    -            padding: u21,
    -        }),
    -        reserved324: [12]u8,
    -        ///  Layerx CLUT Write Register
    -        L2CLUTWR: mmio.Mmio(packed struct(u32) {
    -            ///  Blue value
    -            BLUE: u8,
    -            ///  Green value
    -            GREEN: u8,
    -            ///  Red value
    -            RED: u8,
    -            ///  CLUT Address
    -            CLUTADD: u8,
    -        }),
    -    };
    -
    -    ///  Serial audio interface
    -    pub const SAI1 = extern struct {
    -        reserved4: [4]u8,
    -        ///  SAI AConfiguration register 1
    -        SAI_ACR1: mmio.Mmio(packed struct(u32) {
    -            ///  Audio block mode
    -            MODE: u2,
    -            ///  Protocol configuration
    -            PRTCFG: u2,
    -            reserved5: u1,
    -            ///  Data size
    -            DS: u3,
    -            ///  Least significant bit first
    -            LSBFIRST: u1,
    -            ///  Clock strobing edge
    -            CKSTR: u1,
    -            ///  Synchronization enable
    -            SYNCEN: u2,
    -            ///  Mono mode
    -            MONO: u1,
    -            ///  Output drive
    -            OUTDRIV: u1,
    -            reserved16: u2,
    -            ///  Audio block enable
    -            SAIAEN: u1,
    -            ///  DMA enable
    -            DMAEN: u1,
    -            reserved19: u1,
    -            ///  No divider
    -            NODIV: u1,
    -            ///  Master clock divider
    -            MCKDIV: u4,
    -            padding: u8,
    -        }),
    -        ///  SAI AConfiguration register 2
    -        SAI_ACR2: mmio.Mmio(packed struct(u32) {
    -            ///  FIFO threshold
    -            FTH: u3,
    -            ///  FIFO flush
    -            FFLUSH: u1,
    -            ///  Tristate management on data line
    -            TRIS: u1,
    -            ///  Mute
    -            MUTE: u1,
    -            ///  Mute value
    -            MUTEVAL: u1,
    -            ///  Mute counter
    -            MUTECNT: u6,
    -            ///  Complement bit
    -            CPL: u1,
    -            ///  Companding mode
    -            COMP: u2,
    -            padding: u16,
    -        }),
    -        ///  SAI AFrame configuration register
    -        SAI_AFRCR: mmio.Mmio(packed struct(u32) {
    -            ///  Frame length
    -            FRL: u8,
    -            ///  Frame synchronization active level length
    -            FSALL: u7,
    -            reserved16: u1,
    -            ///  Frame synchronization definition
    -            FSDEF: u1,
    -            ///  Frame synchronization polarity
    -            FSPOL: u1,
    -            ///  Frame synchronization offset
    -            FSOFF: u1,
    -            padding: u13,
    -        }),
    -        ///  SAI ASlot register
    -        SAI_ASLOTR: mmio.Mmio(packed struct(u32) {
    -            ///  First bit offset
    -            FBOFF: u5,
    -            reserved6: u1,
    -            ///  Slot size
    -            SLOTSZ: u2,
    -            ///  Number of slots in an audio frame
    -            NBSLOT: u4,
    -            reserved16: u4,
    -            ///  Slot enable
    -            SLOTEN: u16,
    -        }),
    -        ///  SAI AInterrupt mask register2
    -        SAI_AIM: mmio.Mmio(packed struct(u32) {
    -            ///  Overrun/underrun interrupt enable
    -            OVRUDRIE: u1,
    -            ///  Mute detection interrupt enable
    -            MUTEDETIE: u1,
    -            ///  Wrong clock configuration interrupt enable
    -            WCKCFGIE: u1,
    -            ///  FIFO request interrupt enable
    -            FREQIE: u1,
    -            ///  Codec not ready interrupt enable
    -            CNRDYIE: u1,
    -            ///  Anticipated frame synchronization detection interrupt enable
    -            AFSDETIE: u1,
    -            ///  Late frame synchronization detection interrupt enable
    -            LFSDETIE: u1,
    -            padding: u25,
    -        }),
    -        ///  SAI AStatus register
    -        SAI_ASR: mmio.Mmio(packed struct(u32) {
    -            ///  Overrun / underrun
    -            OVRUDR: u1,
    -            ///  Mute detection
    -            MUTEDET: u1,
    -            ///  Wrong clock configuration flag
    -            WCKCFG: u1,
    -            ///  FIFO request
    -            FREQ: u1,
    -            ///  Codec not ready
    -            CNRDY: u1,
    -            ///  Anticipated frame synchronization detection
    -            AFSDET: u1,
    -            ///  Late frame synchronization detection
    -            LFSDET: u1,
    -            reserved16: u9,
    -            ///  FIFO level threshold
    -            FLTH: u3,
    -            padding: u13,
    -        }),
    -        ///  SAI AClear flag register
    -        SAI_ACLRFR: mmio.Mmio(packed struct(u32) {
    -            ///  Clear overrun / underrun
    -            COVRUDR: u1,
    -            ///  Mute detection flag
    -            CMUTEDET: u1,
    -            ///  Clear wrong clock configuration flag
    -            CWCKCFG: u1,
    -            reserved4: u1,
    -            ///  Clear codec not ready flag
    -            CCNRDY: u1,
    -            ///  Clear anticipated frame synchronization detection flag
    -            CAFSDET: u1,
    -            ///  Clear late frame synchronization detection flag
    -            CLFSDET: u1,
    -            padding: u25,
    -        }),
    -        ///  SAI AData register
    -        SAI_ADR: mmio.Mmio(packed struct(u32) {
    -            ///  Data
    -            DATA: u32,
    -        }),
    -        ///  SAI BConfiguration register 1
    -        SAI_BCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Audio block mode
    -            MODE: u2,
    -            ///  Protocol configuration
    -            PRTCFG: u2,
    -            reserved5: u1,
    -            ///  Data size
    -            DS: u3,
    -            ///  Least significant bit first
    -            LSBFIRST: u1,
    -            ///  Clock strobing edge
    -            CKSTR: u1,
    -            ///  Synchronization enable
    -            SYNCEN: u2,
    -            ///  Mono mode
    -            MONO: u1,
    -            ///  Output drive
    -            OUTDRIV: u1,
    -            reserved16: u2,
    -            ///  Audio block enable
    -            SAIBEN: u1,
    -            ///  DMA enable
    -            DMAEN: u1,
    -            reserved19: u1,
    -            ///  No divider
    -            NODIV: u1,
    -            ///  Master clock divider
    -            MCKDIV: u4,
    -            padding: u8,
    -        }),
    -        ///  SAI BConfiguration register 2
    -        SAI_BCR2: mmio.Mmio(packed struct(u32) {
    -            ///  FIFO threshold
    -            FTH: u3,
    -            ///  FIFO flush
    -            FFLUSH: u1,
    -            ///  Tristate management on data line
    -            TRIS: u1,
    -            ///  Mute
    -            MUTE: u1,
    -            ///  Mute value
    -            MUTEVAL: u1,
    -            ///  Mute counter
    -            MUTECNT: u6,
    -            ///  Complement bit
    -            CPL: u1,
    -            ///  Companding mode
    -            COMP: u2,
    -            padding: u16,
    -        }),
    -        ///  SAI BFrame configuration register
    -        SAI_BFRCR: mmio.Mmio(packed struct(u32) {
    -            ///  Frame length
    -            FRL: u8,
    -            ///  Frame synchronization active level length
    -            FSALL: u7,
    -            reserved16: u1,
    -            ///  Frame synchronization definition
    -            FSDEF: u1,
    -            ///  Frame synchronization polarity
    -            FSPOL: u1,
    -            ///  Frame synchronization offset
    -            FSOFF: u1,
    -            padding: u13,
    -        }),
    -        ///  SAI BSlot register
    -        SAI_BSLOTR: mmio.Mmio(packed struct(u32) {
    -            ///  First bit offset
    -            FBOFF: u5,
    -            reserved6: u1,
    -            ///  Slot size
    -            SLOTSZ: u2,
    -            ///  Number of slots in an audio frame
    -            NBSLOT: u4,
    -            reserved16: u4,
    -            ///  Slot enable
    -            SLOTEN: u16,
    -        }),
    -        ///  SAI BInterrupt mask register2
    -        SAI_BIM: mmio.Mmio(packed struct(u32) {
    -            ///  Overrun/underrun interrupt enable
    -            OVRUDRIE: u1,
    -            ///  Mute detection interrupt enable
    -            MUTEDETIE: u1,
    -            ///  Wrong clock configuration interrupt enable
    -            WCKCFGIE: u1,
    -            ///  FIFO request interrupt enable
    -            FREQIE: u1,
    -            ///  Codec not ready interrupt enable
    -            CNRDYIE: u1,
    -            ///  Anticipated frame synchronization detection interrupt enable
    -            AFSDETIE: u1,
    -            ///  Late frame synchronization detection interrupt enable
    -            LFSDETIE: u1,
    -            padding: u25,
    -        }),
    -        ///  SAI BStatus register
    -        SAI_BSR: mmio.Mmio(packed struct(u32) {
    -            ///  Overrun / underrun
    -            OVRUDR: u1,
    -            ///  Mute detection
    -            MUTEDET: u1,
    -            ///  Wrong clock configuration flag
    -            WCKCFG: u1,
    -            ///  FIFO request
    -            FREQ: u1,
    -            ///  Codec not ready
    -            CNRDY: u1,
    -            ///  Anticipated frame synchronization detection
    -            AFSDET: u1,
    -            ///  Late frame synchronization detection
    -            LFSDET: u1,
    -            reserved16: u9,
    -            ///  FIFO level threshold
    -            FLTH: u3,
    -            padding: u13,
    -        }),
    -        ///  SAI BClear flag register
    -        SAI_BCLRFR: mmio.Mmio(packed struct(u32) {
    -            ///  Clear overrun / underrun
    -            COVRUDR: u1,
    -            ///  Mute detection flag
    -            CMUTEDET: u1,
    -            ///  Clear wrong clock configuration flag
    -            CWCKCFG: u1,
    -            reserved4: u1,
    -            ///  Clear codec not ready flag
    -            CCNRDY: u1,
    -            ///  Clear anticipated frame synchronization detection flag
    -            CAFSDET: u1,
    -            ///  Clear late frame synchronization detection flag
    -            CLFSDET: u1,
    -            padding: u25,
    -        }),
    -        ///  SAI BData register
    -        SAI_BDR: mmio.Mmio(packed struct(u32) {
    -            ///  Data
    -            DATA: u32,
    -        }),
    -    };
    -
    -    ///  Nested Vectored Interrupt Controller
    -    pub const NVIC = extern struct {
    -        ///  Interrupt Set-Enable Register
    -        ISER0: mmio.Mmio(packed struct(u32) {
    -            ///  SETENA
    -            SETENA: u32,
    -        }),
    -        ///  Interrupt Set-Enable Register
    -        ISER1: mmio.Mmio(packed struct(u32) {
    -            ///  SETENA
    -            SETENA: u32,
    -        }),
    -        ///  Interrupt Set-Enable Register
    -        ISER2: mmio.Mmio(packed struct(u32) {
    -            ///  SETENA
    -            SETENA: u32,
    -        }),
    -        reserved128: [116]u8,
    -        ///  Interrupt Clear-Enable Register
    -        ICER0: mmio.Mmio(packed struct(u32) {
    -            ///  CLRENA
    -            CLRENA: u32,
    -        }),
    -        ///  Interrupt Clear-Enable Register
    -        ICER1: mmio.Mmio(packed struct(u32) {
    -            ///  CLRENA
    -            CLRENA: u32,
    -        }),
    -        ///  Interrupt Clear-Enable Register
    -        ICER2: mmio.Mmio(packed struct(u32) {
    -            ///  CLRENA
    -            CLRENA: u32,
    -        }),
    -        reserved256: [116]u8,
    -        ///  Interrupt Set-Pending Register
    -        ISPR0: mmio.Mmio(packed struct(u32) {
    -            ///  SETPEND
    -            SETPEND: u32,
    -        }),
    -        ///  Interrupt Set-Pending Register
    -        ISPR1: mmio.Mmio(packed struct(u32) {
    -            ///  SETPEND
    -            SETPEND: u32,
    -        }),
    -        ///  Interrupt Set-Pending Register
    -        ISPR2: mmio.Mmio(packed struct(u32) {
    -            ///  SETPEND
    -            SETPEND: u32,
    -        }),
    -        reserved384: [116]u8,
    -        ///  Interrupt Clear-Pending Register
    -        ICPR0: mmio.Mmio(packed struct(u32) {
    -            ///  CLRPEND
    -            CLRPEND: u32,
    -        }),
    -        ///  Interrupt Clear-Pending Register
    -        ICPR1: mmio.Mmio(packed struct(u32) {
    -            ///  CLRPEND
    -            CLRPEND: u32,
    -        }),
    -        ///  Interrupt Clear-Pending Register
    -        ICPR2: mmio.Mmio(packed struct(u32) {
    -            ///  CLRPEND
    -            CLRPEND: u32,
    -        }),
    -        reserved512: [116]u8,
    -        ///  Interrupt Active Bit Register
    -        IABR0: mmio.Mmio(packed struct(u32) {
    -            ///  ACTIVE
    -            ACTIVE: u32,
    -        }),
    -        ///  Interrupt Active Bit Register
    -        IABR1: mmio.Mmio(packed struct(u32) {
    -            ///  ACTIVE
    -            ACTIVE: u32,
    -        }),
    -        ///  Interrupt Active Bit Register
    -        IABR2: mmio.Mmio(packed struct(u32) {
    -            ///  ACTIVE
    -            ACTIVE: u32,
    -        }),
    -        reserved768: [244]u8,
    -        ///  Interrupt Priority Register
    -        IPR0: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR1: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR2: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR3: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR4: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR5: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR6: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR7: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR8: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR9: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR10: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR11: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR12: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR13: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR14: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR15: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR16: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR17: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR18: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR19: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -    };
    -
    -    ///  USB on the go high speed
    -    pub const OTG_HS_PWRCLK = extern struct {
    -        ///  Power and clock gating control register
    -        OTG_HS_PCGCR: mmio.Mmio(packed struct(u32) {
    -            ///  Stop PHY clock
    -            STPPCLK: u1,
    -            ///  Gate HCLK
    -            GATEHCLK: u1,
    -            reserved4: u2,
    -            ///  PHY suspended
    -            PHYSUSP: u1,
    -            padding: u27,
    -        }),
    -    };
    -
    -    ///  USB on the go high speed
    -    pub const OTG_HS_DEVICE = extern struct {
    -        ///  OTG_HS device configuration register
    -        OTG_HS_DCFG: mmio.Mmio(packed struct(u32) {
    -            ///  Device speed
    -            DSPD: u2,
    -            ///  Nonzero-length status OUT handshake
    -            NZLSOHSK: u1,
    -            reserved4: u1,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Periodic (micro)frame interval
    -            PFIVL: u2,
    -            reserved24: u11,
    -            ///  Periodic scheduling interval
    -            PERSCHIVL: u2,
    -            padding: u6,
    -        }),
    -        ///  OTG_HS device control register
    -        OTG_HS_DCTL: mmio.Mmio(packed struct(u32) {
    -            ///  Remote wakeup signaling
    -            RWUSIG: u1,
    -            ///  Soft disconnect
    -            SDIS: u1,
    -            ///  Global IN NAK status
    -            GINSTS: u1,
    -            ///  Global OUT NAK status
    -            GONSTS: u1,
    -            ///  Test control
    -            TCTL: u3,
    -            ///  Set global IN NAK
    -            SGINAK: u1,
    -            ///  Clear global IN NAK
    -            CGINAK: u1,
    -            ///  Set global OUT NAK
    -            SGONAK: u1,
    -            ///  Clear global OUT NAK
    -            CGONAK: u1,
    -            ///  Power-on programming done
    -            POPRGDNE: u1,
    -            padding: u20,
    -        }),
    -        ///  OTG_HS device status register
    -        OTG_HS_DSTS: mmio.Mmio(packed struct(u32) {
    -            ///  Suspend status
    -            SUSPSTS: u1,
    -            ///  Enumerated speed
    -            ENUMSPD: u2,
    -            ///  Erratic error
    -            EERR: u1,
    -            reserved8: u4,
    -            ///  Frame number of the received SOF
    -            FNSOF: u14,
    -            padding: u10,
    -        }),
    -        reserved16: [4]u8,
    -        ///  OTG_HS device IN endpoint common interrupt mask register
    -        OTG_HS_DIEPMSK: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt mask
    -            XFRCM: u1,
    -            ///  Endpoint disabled interrupt mask
    -            EPDM: u1,
    -            reserved3: u1,
    -            ///  Timeout condition mask (nonisochronous endpoints)
    -            TOM: u1,
    -            ///  IN token received when TxFIFO empty mask
    -            ITTXFEMSK: u1,
    -            ///  IN token received with EP mismatch mask
    -            INEPNMM: u1,
    -            ///  IN endpoint NAK effective mask
    -            INEPNEM: u1,
    -            reserved8: u1,
    -            ///  FIFO underrun mask
    -            TXFURM: u1,
    -            ///  BNA interrupt mask
    -            BIM: u1,
    -            padding: u22,
    -        }),
    -        ///  OTG_HS device OUT endpoint common interrupt mask register
    -        OTG_HS_DOEPMSK: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt mask
    -            XFRCM: u1,
    -            ///  Endpoint disabled interrupt mask
    -            EPDM: u1,
    -            reserved3: u1,
    -            ///  SETUP phase done mask
    -            STUPM: u1,
    -            ///  OUT token received when endpoint disabled mask
    -            OTEPDM: u1,
    -            reserved6: u1,
    -            ///  Back-to-back SETUP packets received mask
    -            B2BSTUP: u1,
    -            reserved8: u1,
    -            ///  OUT packet error mask
    -            OPEM: u1,
    -            ///  BNA interrupt mask
    -            BOIM: u1,
    -            padding: u22,
    -        }),
    -        ///  OTG_HS device all endpoints interrupt register
    -        OTG_HS_DAINT: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint interrupt bits
    -            IEPINT: u16,
    -            ///  OUT endpoint interrupt bits
    -            OEPINT: u16,
    -        }),
    -        ///  OTG_HS all endpoints interrupt mask register
    -        OTG_HS_DAINTMSK: mmio.Mmio(packed struct(u32) {
    -            ///  IN EP interrupt mask bits
    -            IEPM: u16,
    -            ///  OUT EP interrupt mask bits
    -            OEPM: u16,
    -        }),
    -        reserved40: [8]u8,
    -        ///  OTG_HS device VBUS discharge time register
    -        OTG_HS_DVBUSDIS: mmio.Mmio(packed struct(u32) {
    -            ///  Device VBUS discharge time
    -            VBUSDT: u16,
    -            padding: u16,
    -        }),
    -        ///  OTG_HS device VBUS pulsing time register
    -        OTG_HS_DVBUSPULSE: mmio.Mmio(packed struct(u32) {
    -            ///  Device VBUS pulsing time
    -            DVBUSP: u12,
    -            padding: u20,
    -        }),
    -        ///  OTG_HS Device threshold control register
    -        OTG_HS_DTHRCTL: mmio.Mmio(packed struct(u32) {
    -            ///  Nonisochronous IN endpoints threshold enable
    -            NONISOTHREN: u1,
    -            ///  ISO IN endpoint threshold enable
    -            ISOTHREN: u1,
    -            ///  Transmit threshold length
    -            TXTHRLEN: u9,
    -            reserved16: u5,
    -            ///  Receive threshold enable
    -            RXTHREN: u1,
    -            ///  Receive threshold length
    -            RXTHRLEN: u9,
    -            reserved27: u1,
    -            ///  Arbiter parking enable
    -            ARPEN: u1,
    -            padding: u4,
    -        }),
    -        ///  OTG_HS device IN endpoint FIFO empty interrupt mask register
    -        OTG_HS_DIEPEMPMSK: mmio.Mmio(packed struct(u32) {
    -            ///  IN EP Tx FIFO empty interrupt mask bits
    -            INEPTXFEM: u16,
    -            padding: u16,
    -        }),
    -        ///  OTG_HS device each endpoint interrupt register
    -        OTG_HS_DEACHINT: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  IN endpoint 1interrupt bit
    -            IEP1INT: u1,
    -            reserved17: u15,
    -            ///  OUT endpoint 1 interrupt bit
    -            OEP1INT: u1,
    -            padding: u14,
    -        }),
    -        ///  OTG_HS device each endpoint interrupt register mask
    -        OTG_HS_DEACHINTMSK: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  IN Endpoint 1 interrupt mask bit
    -            IEP1INTM: u1,
    -            reserved17: u15,
    -            ///  OUT Endpoint 1 interrupt mask bit
    -            OEP1INTM: u1,
    -            padding: u14,
    -        }),
    -        ///  OTG_HS device each in endpoint-1 interrupt register
    -        OTG_HS_DIEPEACHMSK1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt mask
    -            XFRCM: u1,
    -            ///  Endpoint disabled interrupt mask
    -            EPDM: u1,
    -            reserved3: u1,
    -            ///  Timeout condition mask (nonisochronous endpoints)
    -            TOM: u1,
    -            ///  IN token received when TxFIFO empty mask
    -            ITTXFEMSK: u1,
    -            ///  IN token received with EP mismatch mask
    -            INEPNMM: u1,
    -            ///  IN endpoint NAK effective mask
    -            INEPNEM: u1,
    -            reserved8: u1,
    -            ///  FIFO underrun mask
    -            TXFURM: u1,
    -            ///  BNA interrupt mask
    -            BIM: u1,
    -            reserved13: u3,
    -            ///  NAK interrupt mask
    -            NAKM: u1,
    -            padding: u18,
    -        }),
    -        reserved128: [60]u8,
    -        ///  OTG_HS device each OUT endpoint-1 interrupt register
    -        OTG_HS_DOEPEACHMSK1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt mask
    -            XFRCM: u1,
    -            ///  Endpoint disabled interrupt mask
    -            EPDM: u1,
    -            reserved3: u1,
    -            ///  Timeout condition mask
    -            TOM: u1,
    -            ///  IN token received when TxFIFO empty mask
    -            ITTXFEMSK: u1,
    -            ///  IN token received with EP mismatch mask
    -            INEPNMM: u1,
    -            ///  IN endpoint NAK effective mask
    -            INEPNEM: u1,
    -            reserved8: u1,
    -            ///  OUT packet error mask
    -            TXFURM: u1,
    -            ///  BNA interrupt mask
    -            BIM: u1,
    -            reserved12: u2,
    -            ///  Bubble error interrupt mask
    -            BERRM: u1,
    -            ///  NAK interrupt mask
    -            NAKM: u1,
    -            ///  NYET interrupt mask
    -            NYETM: u1,
    -            padding: u17,
    -        }),
    -        reserved256: [124]u8,
    -        ///  OTG device endpoint-0 control register
    -        OTG_HS_DIEPCTL0: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USB active endpoint
    -            USBAEP: u1,
    -            ///  Even/odd frame
    -            EONUM_DPID: u1,
    -            ///  NAK status
    -            NAKSTS: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  STALL handshake
    -            Stall: u1,
    -            ///  TxFIFO number
    -            TXFNUM: u4,
    -            ///  Clear NAK
    -            CNAK: u1,
    -            ///  Set NAK
    -            SNAK: u1,
    -            ///  Set DATA0 PID
    -            SD0PID_SEVNFRM: u1,
    -            ///  Set odd frame
    -            SODDFRM: u1,
    -            ///  Endpoint disable
    -            EPDIS: u1,
    -            ///  Endpoint enable
    -            EPENA: u1,
    -        }),
    -        reserved264: [4]u8,
    -        ///  OTG device endpoint-0 interrupt register
    -        OTG_HS_DIEPINT0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  Timeout condition
    -            TOC: u1,
    -            ///  IN token received when TxFIFO is empty
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  IN endpoint NAK effective
    -            INEPNE: u1,
    -            ///  Transmit FIFO empty
    -            TXFE: u1,
    -            ///  Transmit Fifo Underrun
    -            TXFIFOUDRN: u1,
    -            ///  Buffer not available interrupt
    -            BNA: u1,
    -            reserved11: u1,
    -            ///  Packet dropped status
    -            PKTDRPSTS: u1,
    -            ///  Babble error interrupt
    -            BERR: u1,
    -            ///  NAK interrupt
    -            NAK: u1,
    -            padding: u18,
    -        }),
    -        reserved272: [4]u8,
    -        ///  OTG_HS device IN endpoint 0 transfer size register
    -        OTG_HS_DIEPTSIZ0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u7,
    -            reserved19: u12,
    -            ///  Packet count
    -            PKTCNT: u2,
    -            padding: u11,
    -        }),
    -        ///  OTG_HS device endpoint-1 DMA address register
    -        OTG_HS_DIEPDMA1: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        ///  OTG_HS device IN endpoint transmit FIFO status register
    -        OTG_HS_DTXFSTS0: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint TxFIFO space avail
    -            INEPTFSAV: u16,
    -            padding: u16,
    -        }),
    -        reserved288: [4]u8,
    -        ///  OTG device endpoint-1 control register
    -        OTG_HS_DIEPCTL1: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USB active endpoint
    -            USBAEP: u1,
    -            ///  Even/odd frame
    -            EONUM_DPID: u1,
    -            ///  NAK status
    -            NAKSTS: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  STALL handshake
    -            Stall: u1,
    -            ///  TxFIFO number
    -            TXFNUM: u4,
    -            ///  Clear NAK
    -            CNAK: u1,
    -            ///  Set NAK
    -            SNAK: u1,
    -            ///  Set DATA0 PID
    -            SD0PID_SEVNFRM: u1,
    -            ///  Set odd frame
    -            SODDFRM: u1,
    -            ///  Endpoint disable
    -            EPDIS: u1,
    -            ///  Endpoint enable
    -            EPENA: u1,
    -        }),
    -        reserved296: [4]u8,
    -        ///  OTG device endpoint-1 interrupt register
    -        OTG_HS_DIEPINT1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  Timeout condition
    -            TOC: u1,
    -            ///  IN token received when TxFIFO is empty
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  IN endpoint NAK effective
    -            INEPNE: u1,
    -            ///  Transmit FIFO empty
    -            TXFE: u1,
    -            ///  Transmit Fifo Underrun
    -            TXFIFOUDRN: u1,
    -            ///  Buffer not available interrupt
    -            BNA: u1,
    -            reserved11: u1,
    -            ///  Packet dropped status
    -            PKTDRPSTS: u1,
    -            ///  Babble error interrupt
    -            BERR: u1,
    -            ///  NAK interrupt
    -            NAK: u1,
    -            padding: u18,
    -        }),
    -        reserved304: [4]u8,
    -        ///  OTG_HS device endpoint transfer size register
    -        OTG_HS_DIEPTSIZ1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Multi count
    -            MCNT: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS device endpoint-2 DMA address register
    -        OTG_HS_DIEPDMA2: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        ///  OTG_HS device IN endpoint transmit FIFO status register
    -        OTG_HS_DTXFSTS1: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint TxFIFO space avail
    -            INEPTFSAV: u16,
    -            padding: u16,
    -        }),
    -        reserved320: [4]u8,
    -        ///  OTG device endpoint-2 control register
    -        OTG_HS_DIEPCTL2: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USB active endpoint
    -            USBAEP: u1,
    -            ///  Even/odd frame
    -            EONUM_DPID: u1,
    -            ///  NAK status
    -            NAKSTS: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  STALL handshake
    -            Stall: u1,
    -            ///  TxFIFO number
    -            TXFNUM: u4,
    -            ///  Clear NAK
    -            CNAK: u1,
    -            ///  Set NAK
    -            SNAK: u1,
    -            ///  Set DATA0 PID
    -            SD0PID_SEVNFRM: u1,
    -            ///  Set odd frame
    -            SODDFRM: u1,
    -            ///  Endpoint disable
    -            EPDIS: u1,
    -            ///  Endpoint enable
    -            EPENA: u1,
    -        }),
    -        reserved328: [4]u8,
    -        ///  OTG device endpoint-2 interrupt register
    -        OTG_HS_DIEPINT2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  Timeout condition
    -            TOC: u1,
    -            ///  IN token received when TxFIFO is empty
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  IN endpoint NAK effective
    -            INEPNE: u1,
    -            ///  Transmit FIFO empty
    -            TXFE: u1,
    -            ///  Transmit Fifo Underrun
    -            TXFIFOUDRN: u1,
    -            ///  Buffer not available interrupt
    -            BNA: u1,
    -            reserved11: u1,
    -            ///  Packet dropped status
    -            PKTDRPSTS: u1,
    -            ///  Babble error interrupt
    -            BERR: u1,
    -            ///  NAK interrupt
    -            NAK: u1,
    -            padding: u18,
    -        }),
    -        reserved336: [4]u8,
    -        ///  OTG_HS device endpoint transfer size register
    -        OTG_HS_DIEPTSIZ2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Multi count
    -            MCNT: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS device endpoint-3 DMA address register
    -        OTG_HS_DIEPDMA3: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        ///  OTG_HS device IN endpoint transmit FIFO status register
    -        OTG_HS_DTXFSTS2: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint TxFIFO space avail
    -            INEPTFSAV: u16,
    -            padding: u16,
    -        }),
    -        reserved352: [4]u8,
    -        ///  OTG device endpoint-3 control register
    -        OTG_HS_DIEPCTL3: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USB active endpoint
    -            USBAEP: u1,
    -            ///  Even/odd frame
    -            EONUM_DPID: u1,
    -            ///  NAK status
    -            NAKSTS: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  STALL handshake
    -            Stall: u1,
    -            ///  TxFIFO number
    -            TXFNUM: u4,
    -            ///  Clear NAK
    -            CNAK: u1,
    -            ///  Set NAK
    -            SNAK: u1,
    -            ///  Set DATA0 PID
    -            SD0PID_SEVNFRM: u1,
    -            ///  Set odd frame
    -            SODDFRM: u1,
    -            ///  Endpoint disable
    -            EPDIS: u1,
    -            ///  Endpoint enable
    -            EPENA: u1,
    -        }),
    -        reserved360: [4]u8,
    -        ///  OTG device endpoint-3 interrupt register
    -        OTG_HS_DIEPINT3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  Timeout condition
    -            TOC: u1,
    -            ///  IN token received when TxFIFO is empty
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  IN endpoint NAK effective
    -            INEPNE: u1,
    -            ///  Transmit FIFO empty
    -            TXFE: u1,
    -            ///  Transmit Fifo Underrun
    -            TXFIFOUDRN: u1,
    -            ///  Buffer not available interrupt
    -            BNA: u1,
    -            reserved11: u1,
    -            ///  Packet dropped status
    -            PKTDRPSTS: u1,
    -            ///  Babble error interrupt
    -            BERR: u1,
    -            ///  NAK interrupt
    -            NAK: u1,
    -            padding: u18,
    -        }),
    -        reserved368: [4]u8,
    -        ///  OTG_HS device endpoint transfer size register
    -        OTG_HS_DIEPTSIZ3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Multi count
    -            MCNT: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS device endpoint-4 DMA address register
    -        OTG_HS_DIEPDMA4: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        ///  OTG_HS device IN endpoint transmit FIFO status register
    -        OTG_HS_DTXFSTS3: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint TxFIFO space avail
    -            INEPTFSAV: u16,
    -            padding: u16,
    -        }),
    -        reserved384: [4]u8,
    -        ///  OTG device endpoint-4 control register
    -        OTG_HS_DIEPCTL4: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USB active endpoint
    -            USBAEP: u1,
    -            ///  Even/odd frame
    -            EONUM_DPID: u1,
    -            ///  NAK status
    -            NAKSTS: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  STALL handshake
    -            Stall: u1,
    -            ///  TxFIFO number
    -            TXFNUM: u4,
    -            ///  Clear NAK
    -            CNAK: u1,
    -            ///  Set NAK
    -            SNAK: u1,
    -            ///  Set DATA0 PID
    -            SD0PID_SEVNFRM: u1,
    -            ///  Set odd frame
    -            SODDFRM: u1,
    -            ///  Endpoint disable
    -            EPDIS: u1,
    -            ///  Endpoint enable
    -            EPENA: u1,
    -        }),
    -        reserved392: [4]u8,
    -        ///  OTG device endpoint-4 interrupt register
    -        OTG_HS_DIEPINT4: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  Timeout condition
    -            TOC: u1,
    -            ///  IN token received when TxFIFO is empty
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  IN endpoint NAK effective
    -            INEPNE: u1,
    -            ///  Transmit FIFO empty
    -            TXFE: u1,
    -            ///  Transmit Fifo Underrun
    -            TXFIFOUDRN: u1,
    -            ///  Buffer not available interrupt
    -            BNA: u1,
    -            reserved11: u1,
    -            ///  Packet dropped status
    -            PKTDRPSTS: u1,
    -            ///  Babble error interrupt
    -            BERR: u1,
    -            ///  NAK interrupt
    -            NAK: u1,
    -            padding: u18,
    -        }),
    -        reserved400: [4]u8,
    -        ///  OTG_HS device endpoint transfer size register
    -        OTG_HS_DIEPTSIZ4: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Multi count
    -            MCNT: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS device endpoint-5 DMA address register
    -        OTG_HS_DIEPDMA5: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        ///  OTG_HS device IN endpoint transmit FIFO status register
    -        OTG_HS_DTXFSTS4: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint TxFIFO space avail
    -            INEPTFSAV: u16,
    -            padding: u16,
    -        }),
    -        reserved416: [4]u8,
    -        ///  OTG device endpoint-5 control register
    -        OTG_HS_DIEPCTL5: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USB active endpoint
    -            USBAEP: u1,
    -            ///  Even/odd frame
    -            EONUM_DPID: u1,
    -            ///  NAK status
    -            NAKSTS: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  STALL handshake
    -            Stall: u1,
    -            ///  TxFIFO number
    -            TXFNUM: u4,
    -            ///  Clear NAK
    -            CNAK: u1,
    -            ///  Set NAK
    -            SNAK: u1,
    -            ///  Set DATA0 PID
    -            SD0PID_SEVNFRM: u1,
    -            ///  Set odd frame
    -            SODDFRM: u1,
    -            ///  Endpoint disable
    -            EPDIS: u1,
    -            ///  Endpoint enable
    -            EPENA: u1,
    -        }),
    -        reserved424: [4]u8,
    -        ///  OTG device endpoint-5 interrupt register
    -        OTG_HS_DIEPINT5: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  Timeout condition
    -            TOC: u1,
    -            ///  IN token received when TxFIFO is empty
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  IN endpoint NAK effective
    -            INEPNE: u1,
    -            ///  Transmit FIFO empty
    -            TXFE: u1,
    -            ///  Transmit Fifo Underrun
    -            TXFIFOUDRN: u1,
    -            ///  Buffer not available interrupt
    -            BNA: u1,
    -            reserved11: u1,
    -            ///  Packet dropped status
    -            PKTDRPSTS: u1,
    -            ///  Babble error interrupt
    -            BERR: u1,
    -            ///  NAK interrupt
    -            NAK: u1,
    -            padding: u18,
    -        }),
    -        reserved432: [4]u8,
    -        ///  OTG_HS device endpoint transfer size register
    -        OTG_HS_DIEPTSIZ5: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Multi count
    -            MCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved440: [4]u8,
    -        ///  OTG_HS device IN endpoint transmit FIFO status register
    -        OTG_HS_DTXFSTS5: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint TxFIFO space avail
    -            INEPTFSAV: u16,
    -            padding: u16,
    -        }),
    -        reserved448: [4]u8,
    -        ///  OTG device endpoint-6 control register
    -        OTG_HS_DIEPCTL6: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USB active endpoint
    -            USBAEP: u1,
    -            ///  Even/odd frame
    -            EONUM_DPID: u1,
    -            ///  NAK status
    -            NAKSTS: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  STALL handshake
    -            Stall: u1,
    -            ///  TxFIFO number
    -            TXFNUM: u4,
    -            ///  Clear NAK
    -            CNAK: u1,
    -            ///  Set NAK
    -            SNAK: u1,
    -            ///  Set DATA0 PID
    -            SD0PID_SEVNFRM: u1,
    -            ///  Set odd frame
    -            SODDFRM: u1,
    -            ///  Endpoint disable
    -            EPDIS: u1,
    -            ///  Endpoint enable
    -            EPENA: u1,
    -        }),
    -        reserved456: [4]u8,
    -        ///  OTG device endpoint-6 interrupt register
    -        OTG_HS_DIEPINT6: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  Timeout condition
    -            TOC: u1,
    -            ///  IN token received when TxFIFO is empty
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  IN endpoint NAK effective
    -            INEPNE: u1,
    -            ///  Transmit FIFO empty
    -            TXFE: u1,
    -            ///  Transmit Fifo Underrun
    -            TXFIFOUDRN: u1,
    -            ///  Buffer not available interrupt
    -            BNA: u1,
    -            reserved11: u1,
    -            ///  Packet dropped status
    -            PKTDRPSTS: u1,
    -            ///  Babble error interrupt
    -            BERR: u1,
    -            ///  NAK interrupt
    -            NAK: u1,
    -            padding: u18,
    -        }),
    -        reserved480: [20]u8,
    -        ///  OTG device endpoint-7 control register
    -        OTG_HS_DIEPCTL7: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USB active endpoint
    -            USBAEP: u1,
    -            ///  Even/odd frame
    -            EONUM_DPID: u1,
    -            ///  NAK status
    -            NAKSTS: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  STALL handshake
    -            Stall: u1,
    -            ///  TxFIFO number
    -            TXFNUM: u4,
    -            ///  Clear NAK
    -            CNAK: u1,
    -            ///  Set NAK
    -            SNAK: u1,
    -            ///  Set DATA0 PID
    -            SD0PID_SEVNFRM: u1,
    -            ///  Set odd frame
    -            SODDFRM: u1,
    -            ///  Endpoint disable
    -            EPDIS: u1,
    -            ///  Endpoint enable
    -            EPENA: u1,
    -        }),
    -        reserved488: [4]u8,
    -        ///  OTG device endpoint-7 interrupt register
    -        OTG_HS_DIEPINT7: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  Timeout condition
    -            TOC: u1,
    -            ///  IN token received when TxFIFO is empty
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  IN endpoint NAK effective
    -            INEPNE: u1,
    -            ///  Transmit FIFO empty
    -            TXFE: u1,
    -            ///  Transmit Fifo Underrun
    -            TXFIFOUDRN: u1,
    -            ///  Buffer not available interrupt
    -            BNA: u1,
    -            reserved11: u1,
    -            ///  Packet dropped status
    -            PKTDRPSTS: u1,
    -            ///  Babble error interrupt
    -            BERR: u1,
    -            ///  NAK interrupt
    -            NAK: u1,
    -            padding: u18,
    -        }),
    -        reserved768: [276]u8,
    -        ///  OTG_HS device control OUT endpoint 0 control register
    -        OTG_HS_DOEPCTL0: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u2,
    -            reserved15: u13,
    -            ///  USB active endpoint
    -            USBAEP: u1,
    -            reserved17: u1,
    -            ///  NAK status
    -            NAKSTS: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Snoop mode
    -            SNPM: u1,
    -            ///  STALL handshake
    -            Stall: u1,
    -            reserved26: u4,
    -            ///  Clear NAK
    -            CNAK: u1,
    -            ///  Set NAK
    -            SNAK: u1,
    -            reserved30: u2,
    -            ///  Endpoint disable
    -            EPDIS: u1,
    -            ///  Endpoint enable
    -            EPENA: u1,
    -        }),
    -        reserved776: [4]u8,
    -        ///  OTG_HS device endpoint-0 interrupt register
    -        OTG_HS_DOEPINT0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  SETUP phase done
    -            STUP: u1,
    -            ///  OUT token received when endpoint disabled
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  Back-to-back SETUP packets received
    -            B2BSTUP: u1,
    -            reserved14: u7,
    -            ///  NYET interrupt
    -            NYET: u1,
    -            padding: u17,
    -        }),
    -        reserved784: [4]u8,
    -        ///  OTG_HS device endpoint-1 transfer size register
    -        OTG_HS_DOEPTSIZ0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u7,
    -            reserved19: u12,
    -            ///  Packet count
    -            PKTCNT: u1,
    -            reserved29: u9,
    -            ///  SETUP packet count
    -            STUPCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved800: [12]u8,
    -        ///  OTG device endpoint-1 control register
    -        OTG_HS_DOEPCTL1: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USB active endpoint
    -            USBAEP: u1,
    -            ///  Even odd frame/Endpoint data PID
    -            EONUM_DPID: u1,
    -            ///  NAK status
    -            NAKSTS: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Snoop mode
    -            SNPM: u1,
    -            ///  STALL handshake
    -            Stall: u1,
    -            reserved26: u4,
    -            ///  Clear NAK
    -            CNAK: u1,
    -            ///  Set NAK
    -            SNAK: u1,
    -            ///  Set DATA0 PID/Set even frame
    -            SD0PID_SEVNFRM: u1,
    -            ///  Set odd frame
    -            SODDFRM: u1,
    -            ///  Endpoint disable
    -            EPDIS: u1,
    -            ///  Endpoint enable
    -            EPENA: u1,
    -        }),
    -        reserved808: [4]u8,
    -        ///  OTG_HS device endpoint-1 interrupt register
    -        OTG_HS_DOEPINT1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  SETUP phase done
    -            STUP: u1,
    -            ///  OUT token received when endpoint disabled
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  Back-to-back SETUP packets received
    -            B2BSTUP: u1,
    -            reserved14: u7,
    -            ///  NYET interrupt
    -            NYET: u1,
    -            padding: u17,
    -        }),
    -        reserved816: [4]u8,
    -        ///  OTG_HS device endpoint-2 transfer size register
    -        OTG_HS_DOEPTSIZ1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Received data PID/SETUP packet count
    -            RXDPID_STUPCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved832: [12]u8,
    -        ///  OTG device endpoint-2 control register
    -        OTG_HS_DOEPCTL2: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USB active endpoint
    -            USBAEP: u1,
    -            ///  Even odd frame/Endpoint data PID
    -            EONUM_DPID: u1,
    -            ///  NAK status
    -            NAKSTS: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Snoop mode
    -            SNPM: u1,
    -            ///  STALL handshake
    -            Stall: u1,
    -            reserved26: u4,
    -            ///  Clear NAK
    -            CNAK: u1,
    -            ///  Set NAK
    -            SNAK: u1,
    -            ///  Set DATA0 PID/Set even frame
    -            SD0PID_SEVNFRM: u1,
    -            ///  Set odd frame
    -            SODDFRM: u1,
    -            ///  Endpoint disable
    -            EPDIS: u1,
    -            ///  Endpoint enable
    -            EPENA: u1,
    -        }),
    -        reserved840: [4]u8,
    -        ///  OTG_HS device endpoint-2 interrupt register
    -        OTG_HS_DOEPINT2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  SETUP phase done
    -            STUP: u1,
    -            ///  OUT token received when endpoint disabled
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  Back-to-back SETUP packets received
    -            B2BSTUP: u1,
    -            reserved14: u7,
    -            ///  NYET interrupt
    -            NYET: u1,
    -            padding: u17,
    -        }),
    -        reserved848: [4]u8,
    -        ///  OTG_HS device endpoint-3 transfer size register
    -        OTG_HS_DOEPTSIZ2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Received data PID/SETUP packet count
    -            RXDPID_STUPCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved864: [12]u8,
    -        ///  OTG device endpoint-3 control register
    -        OTG_HS_DOEPCTL3: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USB active endpoint
    -            USBAEP: u1,
    -            ///  Even odd frame/Endpoint data PID
    -            EONUM_DPID: u1,
    -            ///  NAK status
    -            NAKSTS: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Snoop mode
    -            SNPM: u1,
    -            ///  STALL handshake
    -            Stall: u1,
    -            reserved26: u4,
    -            ///  Clear NAK
    -            CNAK: u1,
    -            ///  Set NAK
    -            SNAK: u1,
    -            ///  Set DATA0 PID/Set even frame
    -            SD0PID_SEVNFRM: u1,
    -            ///  Set odd frame
    -            SODDFRM: u1,
    -            ///  Endpoint disable
    -            EPDIS: u1,
    -            ///  Endpoint enable
    -            EPENA: u1,
    -        }),
    -        reserved872: [4]u8,
    -        ///  OTG_HS device endpoint-3 interrupt register
    -        OTG_HS_DOEPINT3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  SETUP phase done
    -            STUP: u1,
    -            ///  OUT token received when endpoint disabled
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  Back-to-back SETUP packets received
    -            B2BSTUP: u1,
    -            reserved14: u7,
    -            ///  NYET interrupt
    -            NYET: u1,
    -            padding: u17,
    -        }),
    -        reserved880: [4]u8,
    -        ///  OTG_HS device endpoint-4 transfer size register
    -        OTG_HS_DOEPTSIZ3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Received data PID/SETUP packet count
    -            RXDPID_STUPCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved904: [20]u8,
    -        ///  OTG_HS device endpoint-4 interrupt register
    -        OTG_HS_DOEPINT4: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  SETUP phase done
    -            STUP: u1,
    -            ///  OUT token received when endpoint disabled
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  Back-to-back SETUP packets received
    -            B2BSTUP: u1,
    -            reserved14: u7,
    -            ///  NYET interrupt
    -            NYET: u1,
    -            padding: u17,
    -        }),
    -        reserved912: [4]u8,
    -        ///  OTG_HS device endpoint-5 transfer size register
    -        OTG_HS_DOEPTSIZ4: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Received data PID/SETUP packet count
    -            RXDPID_STUPCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved936: [20]u8,
    -        ///  OTG_HS device endpoint-5 interrupt register
    -        OTG_HS_DOEPINT5: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  SETUP phase done
    -            STUP: u1,
    -            ///  OUT token received when endpoint disabled
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  Back-to-back SETUP packets received
    -            B2BSTUP: u1,
    -            reserved14: u7,
    -            ///  NYET interrupt
    -            NYET: u1,
    -            padding: u17,
    -        }),
    -        reserved968: [28]u8,
    -        ///  OTG_HS device endpoint-6 interrupt register
    -        OTG_HS_DOEPINT6: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  SETUP phase done
    -            STUP: u1,
    -            ///  OUT token received when endpoint disabled
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  Back-to-back SETUP packets received
    -            B2BSTUP: u1,
    -            reserved14: u7,
    -            ///  NYET interrupt
    -            NYET: u1,
    -            padding: u17,
    -        }),
    -        reserved1000: [28]u8,
    -        ///  OTG_HS device endpoint-7 interrupt register
    -        OTG_HS_DOEPINT7: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  SETUP phase done
    -            STUP: u1,
    -            ///  OUT token received when endpoint disabled
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  Back-to-back SETUP packets received
    -            B2BSTUP: u1,
    -            reserved14: u7,
    -            ///  NYET interrupt
    -            NYET: u1,
    -            padding: u17,
    -        }),
    -    };
    -
    -    ///  USB on the go high speed
    -    pub const OTG_HS_HOST = extern struct {
    -        ///  OTG_HS host configuration register
    -        OTG_HS_HCFG: mmio.Mmio(packed struct(u32) {
    -            ///  FS/LS PHY clock select
    -            FSLSPCS: u2,
    -            ///  FS- and LS-only support
    -            FSLSS: u1,
    -            padding: u29,
    -        }),
    -        ///  OTG_HS Host frame interval register
    -        OTG_HS_HFIR: mmio.Mmio(packed struct(u32) {
    -            ///  Frame interval
    -            FRIVL: u16,
    -            padding: u16,
    -        }),
    -        ///  OTG_HS host frame number/frame time remaining register
    -        OTG_HS_HFNUM: mmio.Mmio(packed struct(u32) {
    -            ///  Frame number
    -            FRNUM: u16,
    -            ///  Frame time remaining
    -            FTREM: u16,
    -        }),
    -        reserved16: [4]u8,
    -        ///  OTG_HS_Host periodic transmit FIFO/queue status register
    -        OTG_HS_HPTXSTS: mmio.Mmio(packed struct(u32) {
    -            ///  Periodic transmit data FIFO space available
    -            PTXFSAVL: u16,
    -            ///  Periodic transmit request queue space available
    -            PTXQSAV: u8,
    -            ///  Top of the periodic transmit request queue
    -            PTXQTOP: u8,
    -        }),
    -        ///  OTG_HS Host all channels interrupt register
    -        OTG_HS_HAINT: mmio.Mmio(packed struct(u32) {
    -            ///  Channel interrupts
    -            HAINT: u16,
    -            padding: u16,
    -        }),
    -        ///  OTG_HS host all channels interrupt mask register
    -        OTG_HS_HAINTMSK: mmio.Mmio(packed struct(u32) {
    -            ///  Channel interrupt mask
    -            HAINTM: u16,
    -            padding: u16,
    -        }),
    -        reserved64: [36]u8,
    -        ///  OTG_HS host port control and status register
    -        OTG_HS_HPRT: mmio.Mmio(packed struct(u32) {
    -            ///  Port connect status
    -            PCSTS: u1,
    -            ///  Port connect detected
    -            PCDET: u1,
    -            ///  Port enable
    -            PENA: u1,
    -            ///  Port enable/disable change
    -            PENCHNG: u1,
    -            ///  Port overcurrent active
    -            POCA: u1,
    -            ///  Port overcurrent change
    -            POCCHNG: u1,
    -            ///  Port resume
    -            PRES: u1,
    -            ///  Port suspend
    -            PSUSP: u1,
    -            ///  Port reset
    -            PRST: u1,
    -            reserved10: u1,
    -            ///  Port line status
    -            PLSTS: u2,
    -            ///  Port power
    -            PPWR: u1,
    -            ///  Port test control
    -            PTCTL: u4,
    -            ///  Port speed
    -            PSPD: u2,
    -            padding: u13,
    -        }),
    -        reserved256: [188]u8,
    -        ///  OTG_HS host channel-0 characteristics register
    -        OTG_HS_HCCHAR0: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multi Count (MC) / Error Count (EC)
    -            MC: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        ///  OTG_HS host channel-0 split control register
    -        OTG_HS_HCSPLT0: mmio.Mmio(packed struct(u32) {
    -            ///  Port address
    -            PRTADDR: u7,
    -            ///  Hub address
    -            HUBADDR: u7,
    -            ///  XACTPOS
    -            XACTPOS: u2,
    -            ///  Do complete split
    -            COMPLSPLT: u1,
    -            reserved31: u14,
    -            ///  Split enable
    -            SPLITEN: u1,
    -        }),
    -        ///  OTG_HS host channel-11 interrupt register
    -        OTG_HS_HCINT0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            ///  Response received interrupt
    -            NYET: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-11 interrupt mask register
    -        OTG_HS_HCINTMSK0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-11 transfer size register
    -        OTG_HS_HCTSIZ0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS host channel-0 DMA address register
    -        OTG_HS_HCDMA0: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        reserved288: [8]u8,
    -        ///  OTG_HS host channel-1 characteristics register
    -        OTG_HS_HCCHAR1: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multi Count (MC) / Error Count (EC)
    -            MC: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        ///  OTG_HS host channel-1 split control register
    -        OTG_HS_HCSPLT1: mmio.Mmio(packed struct(u32) {
    -            ///  Port address
    -            PRTADDR: u7,
    -            ///  Hub address
    -            HUBADDR: u7,
    -            ///  XACTPOS
    -            XACTPOS: u2,
    -            ///  Do complete split
    -            COMPLSPLT: u1,
    -            reserved31: u14,
    -            ///  Split enable
    -            SPLITEN: u1,
    -        }),
    -        ///  OTG_HS host channel-1 interrupt register
    -        OTG_HS_HCINT1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            ///  Response received interrupt
    -            NYET: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-1 interrupt mask register
    -        OTG_HS_HCINTMSK1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-1 transfer size register
    -        OTG_HS_HCTSIZ1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS host channel-1 DMA address register
    -        OTG_HS_HCDMA1: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        reserved320: [8]u8,
    -        ///  OTG_HS host channel-2 characteristics register
    -        OTG_HS_HCCHAR2: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multi Count (MC) / Error Count (EC)
    -            MC: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        ///  OTG_HS host channel-2 split control register
    -        OTG_HS_HCSPLT2: mmio.Mmio(packed struct(u32) {
    -            ///  Port address
    -            PRTADDR: u7,
    -            ///  Hub address
    -            HUBADDR: u7,
    -            ///  XACTPOS
    -            XACTPOS: u2,
    -            ///  Do complete split
    -            COMPLSPLT: u1,
    -            reserved31: u14,
    -            ///  Split enable
    -            SPLITEN: u1,
    -        }),
    -        ///  OTG_HS host channel-2 interrupt register
    -        OTG_HS_HCINT2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            ///  Response received interrupt
    -            NYET: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-2 interrupt mask register
    -        OTG_HS_HCINTMSK2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-2 transfer size register
    -        OTG_HS_HCTSIZ2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS host channel-2 DMA address register
    -        OTG_HS_HCDMA2: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        reserved352: [8]u8,
    -        ///  OTG_HS host channel-3 characteristics register
    -        OTG_HS_HCCHAR3: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multi Count (MC) / Error Count (EC)
    -            MC: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        ///  OTG_HS host channel-3 split control register
    -        OTG_HS_HCSPLT3: mmio.Mmio(packed struct(u32) {
    -            ///  Port address
    -            PRTADDR: u7,
    -            ///  Hub address
    -            HUBADDR: u7,
    -            ///  XACTPOS
    -            XACTPOS: u2,
    -            ///  Do complete split
    -            COMPLSPLT: u1,
    -            reserved31: u14,
    -            ///  Split enable
    -            SPLITEN: u1,
    -        }),
    -        ///  OTG_HS host channel-3 interrupt register
    -        OTG_HS_HCINT3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            ///  Response received interrupt
    -            NYET: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-3 interrupt mask register
    -        OTG_HS_HCINTMSK3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-3 transfer size register
    -        OTG_HS_HCTSIZ3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS host channel-3 DMA address register
    -        OTG_HS_HCDMA3: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        reserved384: [8]u8,
    -        ///  OTG_HS host channel-4 characteristics register
    -        OTG_HS_HCCHAR4: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multi Count (MC) / Error Count (EC)
    -            MC: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        ///  OTG_HS host channel-4 split control register
    -        OTG_HS_HCSPLT4: mmio.Mmio(packed struct(u32) {
    -            ///  Port address
    -            PRTADDR: u7,
    -            ///  Hub address
    -            HUBADDR: u7,
    -            ///  XACTPOS
    -            XACTPOS: u2,
    -            ///  Do complete split
    -            COMPLSPLT: u1,
    -            reserved31: u14,
    -            ///  Split enable
    -            SPLITEN: u1,
    -        }),
    -        ///  OTG_HS host channel-4 interrupt register
    -        OTG_HS_HCINT4: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            ///  Response received interrupt
    -            NYET: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-4 interrupt mask register
    -        OTG_HS_HCINTMSK4: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-4 transfer size register
    -        OTG_HS_HCTSIZ4: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS host channel-4 DMA address register
    -        OTG_HS_HCDMA4: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        reserved416: [8]u8,
    -        ///  OTG_HS host channel-5 characteristics register
    -        OTG_HS_HCCHAR5: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multi Count (MC) / Error Count (EC)
    -            MC: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        ///  OTG_HS host channel-5 split control register
    -        OTG_HS_HCSPLT5: mmio.Mmio(packed struct(u32) {
    -            ///  Port address
    -            PRTADDR: u7,
    -            ///  Hub address
    -            HUBADDR: u7,
    -            ///  XACTPOS
    -            XACTPOS: u2,
    -            ///  Do complete split
    -            COMPLSPLT: u1,
    -            reserved31: u14,
    -            ///  Split enable
    -            SPLITEN: u1,
    -        }),
    -        ///  OTG_HS host channel-5 interrupt register
    -        OTG_HS_HCINT5: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            ///  Response received interrupt
    -            NYET: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-5 interrupt mask register
    -        OTG_HS_HCINTMSK5: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-5 transfer size register
    -        OTG_HS_HCTSIZ5: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS host channel-5 DMA address register
    -        OTG_HS_HCDMA5: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        reserved448: [8]u8,
    -        ///  OTG_HS host channel-6 characteristics register
    -        OTG_HS_HCCHAR6: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multi Count (MC) / Error Count (EC)
    -            MC: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        ///  OTG_HS host channel-6 split control register
    -        OTG_HS_HCSPLT6: mmio.Mmio(packed struct(u32) {
    -            ///  Port address
    -            PRTADDR: u7,
    -            ///  Hub address
    -            HUBADDR: u7,
    -            ///  XACTPOS
    -            XACTPOS: u2,
    -            ///  Do complete split
    -            COMPLSPLT: u1,
    -            reserved31: u14,
    -            ///  Split enable
    -            SPLITEN: u1,
    -        }),
    -        ///  OTG_HS host channel-6 interrupt register
    -        OTG_HS_HCINT6: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            ///  Response received interrupt
    -            NYET: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-6 interrupt mask register
    -        OTG_HS_HCINTMSK6: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-6 transfer size register
    -        OTG_HS_HCTSIZ6: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS host channel-6 DMA address register
    -        OTG_HS_HCDMA6: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        reserved480: [8]u8,
    -        ///  OTG_HS host channel-7 characteristics register
    -        OTG_HS_HCCHAR7: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multi Count (MC) / Error Count (EC)
    -            MC: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        ///  OTG_HS host channel-7 split control register
    -        OTG_HS_HCSPLT7: mmio.Mmio(packed struct(u32) {
    -            ///  Port address
    -            PRTADDR: u7,
    -            ///  Hub address
    -            HUBADDR: u7,
    -            ///  XACTPOS
    -            XACTPOS: u2,
    -            ///  Do complete split
    -            COMPLSPLT: u1,
    -            reserved31: u14,
    -            ///  Split enable
    -            SPLITEN: u1,
    -        }),
    -        ///  OTG_HS host channel-7 interrupt register
    -        OTG_HS_HCINT7: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            ///  Response received interrupt
    -            NYET: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-7 interrupt mask register
    -        OTG_HS_HCINTMSK7: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-7 transfer size register
    -        OTG_HS_HCTSIZ7: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS host channel-7 DMA address register
    -        OTG_HS_HCDMA7: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        reserved512: [8]u8,
    -        ///  OTG_HS host channel-8 characteristics register
    -        OTG_HS_HCCHAR8: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multi Count (MC) / Error Count (EC)
    -            MC: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        ///  OTG_HS host channel-8 split control register
    -        OTG_HS_HCSPLT8: mmio.Mmio(packed struct(u32) {
    -            ///  Port address
    -            PRTADDR: u7,
    -            ///  Hub address
    -            HUBADDR: u7,
    -            ///  XACTPOS
    -            XACTPOS: u2,
    -            ///  Do complete split
    -            COMPLSPLT: u1,
    -            reserved31: u14,
    -            ///  Split enable
    -            SPLITEN: u1,
    -        }),
    -        ///  OTG_HS host channel-8 interrupt register
    -        OTG_HS_HCINT8: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            ///  Response received interrupt
    -            NYET: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-8 interrupt mask register
    -        OTG_HS_HCINTMSK8: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-8 transfer size register
    -        OTG_HS_HCTSIZ8: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS host channel-8 DMA address register
    -        OTG_HS_HCDMA8: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        reserved544: [8]u8,
    -        ///  OTG_HS host channel-9 characteristics register
    -        OTG_HS_HCCHAR9: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multi Count (MC) / Error Count (EC)
    -            MC: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        ///  OTG_HS host channel-9 split control register
    -        OTG_HS_HCSPLT9: mmio.Mmio(packed struct(u32) {
    -            ///  Port address
    -            PRTADDR: u7,
    -            ///  Hub address
    -            HUBADDR: u7,
    -            ///  XACTPOS
    -            XACTPOS: u2,
    -            ///  Do complete split
    -            COMPLSPLT: u1,
    -            reserved31: u14,
    -            ///  Split enable
    -            SPLITEN: u1,
    -        }),
    -        ///  OTG_HS host channel-9 interrupt register
    -        OTG_HS_HCINT9: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            ///  Response received interrupt
    -            NYET: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-9 interrupt mask register
    -        OTG_HS_HCINTMSK9: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-9 transfer size register
    -        OTG_HS_HCTSIZ9: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS host channel-9 DMA address register
    -        OTG_HS_HCDMA9: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        reserved576: [8]u8,
    -        ///  OTG_HS host channel-10 characteristics register
    -        OTG_HS_HCCHAR10: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multi Count (MC) / Error Count (EC)
    -            MC: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        ///  OTG_HS host channel-10 split control register
    -        OTG_HS_HCSPLT10: mmio.Mmio(packed struct(u32) {
    -            ///  Port address
    -            PRTADDR: u7,
    -            ///  Hub address
    -            HUBADDR: u7,
    -            ///  XACTPOS
    -            XACTPOS: u2,
    -            ///  Do complete split
    -            COMPLSPLT: u1,
    -            reserved31: u14,
    -            ///  Split enable
    -            SPLITEN: u1,
    -        }),
    -        ///  OTG_HS host channel-10 interrupt register
    -        OTG_HS_HCINT10: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            ///  Response received interrupt
    -            NYET: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-10 interrupt mask register
    -        OTG_HS_HCINTMSK10: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-10 transfer size register
    -        OTG_HS_HCTSIZ10: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS host channel-10 DMA address register
    -        OTG_HS_HCDMA10: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        reserved608: [8]u8,
    -        ///  OTG_HS host channel-11 characteristics register
    -        OTG_HS_HCCHAR11: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multi Count (MC) / Error Count (EC)
    -            MC: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        ///  OTG_HS host channel-11 split control register
    -        OTG_HS_HCSPLT11: mmio.Mmio(packed struct(u32) {
    -            ///  Port address
    -            PRTADDR: u7,
    -            ///  Hub address
    -            HUBADDR: u7,
    -            ///  XACTPOS
    -            XACTPOS: u2,
    -            ///  Do complete split
    -            COMPLSPLT: u1,
    -            reserved31: u14,
    -            ///  Split enable
    -            SPLITEN: u1,
    -        }),
    -        ///  OTG_HS host channel-11 interrupt register
    -        OTG_HS_HCINT11: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            ///  Response received interrupt
    -            NYET: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-11 interrupt mask register
    -        OTG_HS_HCINTMSK11: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-11 transfer size register
    -        OTG_HS_HCTSIZ11: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS host channel-11 DMA address register
    -        OTG_HS_HCDMA11: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -    };
    -
    -    ///  USB on the go high speed
    -    pub const OTG_HS_GLOBAL = extern struct {
    -        ///  OTG_HS control and status register
    -        OTG_HS_GOTGCTL: mmio.Mmio(packed struct(u32) {
    -            ///  Session request success
    -            SRQSCS: u1,
    -            ///  Session request
    -            SRQ: u1,
    -            reserved8: u6,
    -            ///  Host negotiation success
    -            HNGSCS: u1,
    -            ///  HNP request
    -            HNPRQ: u1,
    -            ///  Host set HNP enable
    -            HSHNPEN: u1,
    -            ///  Device HNP enabled
    -            DHNPEN: u1,
    -            reserved16: u4,
    -            ///  Connector ID status
    -            CIDSTS: u1,
    -            ///  Long/short debounce time
    -            DBCT: u1,
    -            ///  A-session valid
    -            ASVLD: u1,
    -            ///  B-session valid
    -            BSVLD: u1,
    -            padding: u12,
    -        }),
    -        ///  OTG_HS interrupt register
    -        OTG_HS_GOTGINT: mmio.Mmio(packed struct(u32) {
    -            reserved2: u2,
    -            ///  Session end detected
    -            SEDET: u1,
    -            reserved8: u5,
    -            ///  Session request success status change
    -            SRSSCHG: u1,
    -            ///  Host negotiation success status change
    -            HNSSCHG: u1,
    -            reserved17: u7,
    -            ///  Host negotiation detected
    -            HNGDET: u1,
    -            ///  A-device timeout change
    -            ADTOCHG: u1,
    -            ///  Debounce done
    -            DBCDNE: u1,
    -            padding: u12,
    -        }),
    -        ///  OTG_HS AHB configuration register
    -        OTG_HS_GAHBCFG: mmio.Mmio(packed struct(u32) {
    -            ///  Global interrupt mask
    -            GINT: u1,
    -            ///  Burst length/type
    -            HBSTLEN: u4,
    -            ///  DMA enable
    -            DMAEN: u1,
    -            reserved7: u1,
    -            ///  TxFIFO empty level
    -            TXFELVL: u1,
    -            ///  Periodic TxFIFO empty level
    -            PTXFELVL: u1,
    -            padding: u23,
    -        }),
    -        ///  OTG_HS USB configuration register
    -        OTG_HS_GUSBCFG: mmio.Mmio(packed struct(u32) {
    -            ///  FS timeout calibration
    -            TOCAL: u3,
    -            reserved6: u3,
    -            ///  USB 2.0 high-speed ULPI PHY or USB 1.1 full-speed serial transceiver select
    -            PHYSEL: u1,
    -            reserved8: u1,
    -            ///  SRP-capable
    -            SRPCAP: u1,
    -            ///  HNP-capable
    -            HNPCAP: u1,
    -            ///  USB turnaround time
    -            TRDT: u4,
    -            reserved15: u1,
    -            ///  PHY Low-power clock select
    -            PHYLPCS: u1,
    -            reserved17: u1,
    -            ///  ULPI FS/LS select
    -            ULPIFSLS: u1,
    -            ///  ULPI Auto-resume
    -            ULPIAR: u1,
    -            ///  ULPI Clock SuspendM
    -            ULPICSM: u1,
    -            ///  ULPI External VBUS Drive
    -            ULPIEVBUSD: u1,
    -            ///  ULPI external VBUS indicator
    -            ULPIEVBUSI: u1,
    -            ///  TermSel DLine pulsing selection
    -            TSDPS: u1,
    -            ///  Indicator complement
    -            PCCI: u1,
    -            ///  Indicator pass through
    -            PTCI: u1,
    -            ///  ULPI interface protect disable
    -            ULPIIPD: u1,
    -            reserved29: u3,
    -            ///  Forced host mode
    -            FHMOD: u1,
    -            ///  Forced peripheral mode
    -            FDMOD: u1,
    -            ///  Corrupt Tx packet
    -            CTXPKT: u1,
    -        }),
    -        ///  OTG_HS reset register
    -        OTG_HS_GRSTCTL: mmio.Mmio(packed struct(u32) {
    -            ///  Core soft reset
    -            CSRST: u1,
    -            ///  HCLK soft reset
    -            HSRST: u1,
    -            ///  Host frame counter reset
    -            FCRST: u1,
    -            reserved4: u1,
    -            ///  RxFIFO flush
    -            RXFFLSH: u1,
    -            ///  TxFIFO flush
    -            TXFFLSH: u1,
    -            ///  TxFIFO number
    -            TXFNUM: u5,
    -            reserved30: u19,
    -            ///  DMA request signal
    -            DMAREQ: u1,
    -            ///  AHB master idle
    -            AHBIDL: u1,
    -        }),
    -        ///  OTG_HS core interrupt register
    -        OTG_HS_GINTSTS: mmio.Mmio(packed struct(u32) {
    -            ///  Current mode of operation
    -            CMOD: u1,
    -            ///  Mode mismatch interrupt
    -            MMIS: u1,
    -            ///  OTG interrupt
    -            OTGINT: u1,
    -            ///  Start of frame
    -            SOF: u1,
    -            ///  RxFIFO nonempty
    -            RXFLVL: u1,
    -            ///  Nonperiodic TxFIFO empty
    -            NPTXFE: u1,
    -            ///  Global IN nonperiodic NAK effective
    -            GINAKEFF: u1,
    -            ///  Global OUT NAK effective
    -            BOUTNAKEFF: u1,
    -            reserved10: u2,
    -            ///  Early suspend
    -            ESUSP: u1,
    -            ///  USB suspend
    -            USBSUSP: u1,
    -            ///  USB reset
    -            USBRST: u1,
    -            ///  Enumeration done
    -            ENUMDNE: u1,
    -            ///  Isochronous OUT packet dropped interrupt
    -            ISOODRP: u1,
    -            ///  End of periodic frame interrupt
    -            EOPF: u1,
    -            reserved18: u2,
    -            ///  IN endpoint interrupt
    -            IEPINT: u1,
    -            ///  OUT endpoint interrupt
    -            OEPINT: u1,
    -            ///  Incomplete isochronous IN transfer
    -            IISOIXFR: u1,
    -            ///  Incomplete periodic transfer
    -            PXFR_INCOMPISOOUT: u1,
    -            ///  Data fetch suspended
    -            DATAFSUSP: u1,
    -            reserved24: u1,
    -            ///  Host port interrupt
    -            HPRTINT: u1,
    -            ///  Host channels interrupt
    -            HCINT: u1,
    -            ///  Periodic TxFIFO empty
    -            PTXFE: u1,
    -            reserved28: u1,
    -            ///  Connector ID status change
    -            CIDSCHG: u1,
    -            ///  Disconnect detected interrupt
    -            DISCINT: u1,
    -            ///  Session request/new session detected interrupt
    -            SRQINT: u1,
    -            ///  Resume/remote wakeup detected interrupt
    -            WKUINT: u1,
    -        }),
    -        ///  OTG_HS interrupt mask register
    -        OTG_HS_GINTMSK: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  Mode mismatch interrupt mask
    -            MMISM: u1,
    -            ///  OTG interrupt mask
    -            OTGINT: u1,
    -            ///  Start of frame mask
    -            SOFM: u1,
    -            ///  Receive FIFO nonempty mask
    -            RXFLVLM: u1,
    -            ///  Nonperiodic TxFIFO empty mask
    -            NPTXFEM: u1,
    -            ///  Global nonperiodic IN NAK effective mask
    -            GINAKEFFM: u1,
    -            ///  Global OUT NAK effective mask
    -            GONAKEFFM: u1,
    -            reserved10: u2,
    -            ///  Early suspend mask
    -            ESUSPM: u1,
    -            ///  USB suspend mask
    -            USBSUSPM: u1,
    -            ///  USB reset mask
    -            USBRST: u1,
    -            ///  Enumeration done mask
    -            ENUMDNEM: u1,
    -            ///  Isochronous OUT packet dropped interrupt mask
    -            ISOODRPM: u1,
    -            ///  End of periodic frame interrupt mask
    -            EOPFM: u1,
    -            reserved17: u1,
    -            ///  Endpoint mismatch interrupt mask
    -            EPMISM: u1,
    -            ///  IN endpoints interrupt mask
    -            IEPINT: u1,
    -            ///  OUT endpoints interrupt mask
    -            OEPINT: u1,
    -            ///  Incomplete isochronous IN transfer mask
    -            IISOIXFRM: u1,
    -            ///  Incomplete periodic transfer mask
    -            PXFRM_IISOOXFRM: u1,
    -            ///  Data fetch suspended mask
    -            FSUSPM: u1,
    -            reserved24: u1,
    -            ///  Host port interrupt mask
    -            PRTIM: u1,
    -            ///  Host channels interrupt mask
    -            HCIM: u1,
    -            ///  Periodic TxFIFO empty mask
    -            PTXFEM: u1,
    -            reserved28: u1,
    -            ///  Connector ID status change mask
    -            CIDSCHGM: u1,
    -            ///  Disconnect detected interrupt mask
    -            DISCINT: u1,
    -            ///  Session request/new session detected interrupt mask
    -            SRQIM: u1,
    -            ///  Resume/remote wakeup detected interrupt mask
    -            WUIM: u1,
    -        }),
    -        ///  OTG_HS Receive status debug read register (host mode)
    -        OTG_HS_GRXSTSR_Host: mmio.Mmio(packed struct(u32) {
    -            ///  Channel number
    -            CHNUM: u4,
    -            ///  Byte count
    -            BCNT: u11,
    -            ///  Data PID
    -            DPID: u2,
    -            ///  Packet status
    -            PKTSTS: u4,
    -            padding: u11,
    -        }),
    -        ///  OTG_HS status read and pop register (host mode)
    -        OTG_HS_GRXSTSP_Host: mmio.Mmio(packed struct(u32) {
    -            ///  Channel number
    -            CHNUM: u4,
    -            ///  Byte count
    -            BCNT: u11,
    -            ///  Data PID
    -            DPID: u2,
    -            ///  Packet status
    -            PKTSTS: u4,
    -            padding: u11,
    -        }),
    -        ///  OTG_HS Receive FIFO size register
    -        OTG_HS_GRXFSIZ: mmio.Mmio(packed struct(u32) {
    -            ///  RxFIFO depth
    -            RXFD: u16,
    -            padding: u16,
    -        }),
    -        ///  OTG_HS nonperiodic transmit FIFO size register (host mode)
    -        OTG_HS_GNPTXFSIZ_Host: mmio.Mmio(packed struct(u32) {
    -            ///  Nonperiodic transmit RAM start address
    -            NPTXFSA: u16,
    -            ///  Nonperiodic TxFIFO depth
    -            NPTXFD: u16,
    -        }),
    -        ///  OTG_HS nonperiodic transmit FIFO/queue status register
    -        OTG_HS_GNPTXSTS: mmio.Mmio(packed struct(u32) {
    -            ///  Nonperiodic TxFIFO space available
    -            NPTXFSAV: u16,
    -            ///  Nonperiodic transmit request queue space available
    -            NPTQXSAV: u8,
    -            ///  Top of the nonperiodic transmit request queue
    -            NPTXQTOP: u7,
    -            padding: u1,
    -        }),
    -        reserved56: [8]u8,
    -        ///  OTG_HS general core configuration register
    -        OTG_HS_GCCFG: mmio.Mmio(packed struct(u32) {
    -            reserved16: u16,
    -            ///  Power down
    -            PWRDWN: u1,
    -            ///  Enable I2C bus connection for the external I2C PHY interface
    -            I2CPADEN: u1,
    -            ///  Enable the VBUS sensing device
    -            VBUSASEN: u1,
    -            ///  Enable the VBUS sensing device
    -            VBUSBSEN: u1,
    -            ///  SOF output enable
    -            SOFOUTEN: u1,
    -            ///  VBUS sensing disable option
    -            NOVBUSSENS: u1,
    -            padding: u10,
    -        }),
    -        ///  OTG_HS core ID register
    -        OTG_HS_CID: mmio.Mmio(packed struct(u32) {
    -            ///  Product ID field
    -            PRODUCT_ID: u32,
    -        }),
    -        reserved256: [192]u8,
    -        ///  OTG_HS Host periodic transmit FIFO size register
    -        OTG_HS_HPTXFSIZ: mmio.Mmio(packed struct(u32) {
    -            ///  Host periodic TxFIFO start address
    -            PTXSA: u16,
    -            ///  Host periodic TxFIFO depth
    -            PTXFD: u16,
    -        }),
    -        ///  OTG_HS device IN endpoint transmit FIFO size register
    -        OTG_HS_DIEPTXF1: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint FIFOx transmit RAM start address
    -            INEPTXSA: u16,
    -            ///  IN endpoint TxFIFO depth
    -            INEPTXFD: u16,
    -        }),
    -        ///  OTG_HS device IN endpoint transmit FIFO size register
    -        OTG_HS_DIEPTXF2: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint FIFOx transmit RAM start address
    -            INEPTXSA: u16,
    -            ///  IN endpoint TxFIFO depth
    -            INEPTXFD: u16,
    -        }),
    -        reserved284: [16]u8,
    -        ///  OTG_HS device IN endpoint transmit FIFO size register
    -        OTG_HS_DIEPTXF3: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint FIFOx transmit RAM start address
    -            INEPTXSA: u16,
    -            ///  IN endpoint TxFIFO depth
    -            INEPTXFD: u16,
    -        }),
    -        ///  OTG_HS device IN endpoint transmit FIFO size register
    -        OTG_HS_DIEPTXF4: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint FIFOx transmit RAM start address
    -            INEPTXSA: u16,
    -            ///  IN endpoint TxFIFO depth
    -            INEPTXFD: u16,
    -        }),
    -        ///  OTG_HS device IN endpoint transmit FIFO size register
    -        OTG_HS_DIEPTXF5: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint FIFOx transmit RAM start address
    -            INEPTXSA: u16,
    -            ///  IN endpoint TxFIFO depth
    -            INEPTXFD: u16,
    -        }),
    -        ///  OTG_HS device IN endpoint transmit FIFO size register
    -        OTG_HS_DIEPTXF6: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint FIFOx transmit RAM start address
    -            INEPTXSA: u16,
    -            ///  IN endpoint TxFIFO depth
    -            INEPTXFD: u16,
    -        }),
    -        ///  OTG_HS device IN endpoint transmit FIFO size register
    -        OTG_HS_DIEPTXF7: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint FIFOx transmit RAM start address
    -            INEPTXSA: u16,
    -            ///  IN endpoint TxFIFO depth
    -            INEPTXFD: u16,
    -        }),
    -    };
    -
    -    ///  Secure digital input/output interface
    -    pub const SDIO = extern struct {
    -        ///  power control register
    -        POWER: mmio.Mmio(packed struct(u32) {
    -            ///  PWRCTRL
    -            PWRCTRL: u2,
    -            padding: u30,
    -        }),
    -        ///  SDI clock control register
    -        CLKCR: mmio.Mmio(packed struct(u32) {
    -            ///  Clock divide factor
    -            CLKDIV: u8,
    -            ///  Clock enable bit
    -            CLKEN: u1,
    -            ///  Power saving configuration bit
    -            PWRSAV: u1,
    -            ///  Clock divider bypass enable bit
    -            BYPASS: u1,
    -            ///  Wide bus mode enable bit
    -            WIDBUS: u2,
    -            ///  SDIO_CK dephasing selection bit
    -            NEGEDGE: u1,
    -            ///  HW Flow Control enable
    -            HWFC_EN: u1,
    -            padding: u17,
    -        }),
    -        ///  argument register
    -        ARG: mmio.Mmio(packed struct(u32) {
    -            ///  Command argument
    -            CMDARG: u32,
    -        }),
    -        ///  command register
    -        CMD: mmio.Mmio(packed struct(u32) {
    -            ///  Command index
    -            CMDINDEX: u6,
    -            ///  Wait for response bits
    -            WAITRESP: u2,
    -            ///  CPSM waits for interrupt request
    -            WAITINT: u1,
    -            ///  CPSM Waits for ends of data transfer (CmdPend internal signal).
    -            WAITPEND: u1,
    -            ///  Command path state machine (CPSM) Enable bit
    -            CPSMEN: u1,
    -            ///  SD I/O suspend command
    -            SDIOSuspend: u1,
    -            ///  Enable CMD completion
    -            ENCMDcompl: u1,
    -            ///  not Interrupt Enable
    -            nIEN: u1,
    -            ///  CE-ATA command
    -            CE_ATACMD: u1,
    -            padding: u17,
    -        }),
    -        ///  command response register
    -        RESPCMD: mmio.Mmio(packed struct(u32) {
    -            ///  Response command index
    -            RESPCMD: u6,
    -            padding: u26,
    -        }),
    -        ///  response 1..4 register
    -        RESP1: mmio.Mmio(packed struct(u32) {
    -            ///  see Table 132.
    -            CARDSTATUS1: u32,
    -        }),
    -        ///  response 1..4 register
    -        RESP2: mmio.Mmio(packed struct(u32) {
    -            ///  see Table 132.
    -            CARDSTATUS2: u32,
    -        }),
    -        ///  response 1..4 register
    -        RESP3: mmio.Mmio(packed struct(u32) {
    -            ///  see Table 132.
    -            CARDSTATUS3: u32,
    -        }),
    -        ///  response 1..4 register
    -        RESP4: mmio.Mmio(packed struct(u32) {
    -            ///  see Table 132.
    -            CARDSTATUS4: u32,
    -        }),
    -        ///  data timer register
    -        DTIMER: mmio.Mmio(packed struct(u32) {
    -            ///  Data timeout period
    -            DATATIME: u32,
    -        }),
    -        ///  data length register
    -        DLEN: mmio.Mmio(packed struct(u32) {
    -            ///  Data length value
    -            DATALENGTH: u25,
    -            padding: u7,
    -        }),
    -        ///  data control register
    -        DCTRL: mmio.Mmio(packed struct(u32) {
    -            ///  DTEN
    -            DTEN: u1,
    -            ///  Data transfer direction selection
    -            DTDIR: u1,
    -            ///  Data transfer mode selection 1: Stream or SDIO multibyte data transfer.
    -            DTMODE: u1,
    -            ///  DMA enable bit
    -            DMAEN: u1,
    -            ///  Data block size
    -            DBLOCKSIZE: u4,
    -            ///  Read wait start
    -            RWSTART: u1,
    -            ///  Read wait stop
    -            RWSTOP: u1,
    -            ///  Read wait mode
    -            RWMOD: u1,
    -            ///  SD I/O enable functions
    -            SDIOEN: u1,
    -            padding: u20,
    -        }),
    -        ///  data counter register
    -        DCOUNT: mmio.Mmio(packed struct(u32) {
    -            ///  Data count value
    -            DATACOUNT: u25,
    -            padding: u7,
    -        }),
    -        ///  status register
    -        STA: mmio.Mmio(packed struct(u32) {
    -            ///  Command response received (CRC check failed)
    -            CCRCFAIL: u1,
    -            ///  Data block sent/received (CRC check failed)
    -            DCRCFAIL: u1,
    -            ///  Command response timeout
    -            CTIMEOUT: u1,
    -            ///  Data timeout
    -            DTIMEOUT: u1,
    -            ///  Transmit FIFO underrun error
    -            TXUNDERR: u1,
    -            ///  Received FIFO overrun error
    -            RXOVERR: u1,
    -            ///  Command response received (CRC check passed)
    -            CMDREND: u1,
    -            ///  Command sent (no response required)
    -            CMDSENT: u1,
    -            ///  Data end (data counter, SDIDCOUNT, is zero)
    -            DATAEND: u1,
    -            ///  Start bit not detected on all data signals in wide bus mode
    -            STBITERR: u1,
    -            ///  Data block sent/received (CRC check passed)
    -            DBCKEND: u1,
    -            ///  Command transfer in progress
    -            CMDACT: u1,
    -            ///  Data transmit in progress
    -            TXACT: u1,
    -            ///  Data receive in progress
    -            RXACT: u1,
    -            ///  Transmit FIFO half empty: at least 8 words can be written into the FIFO
    -            TXFIFOHE: u1,
    -            ///  Receive FIFO half full: there are at least 8 words in the FIFO
    -            RXFIFOHF: u1,
    -            ///  Transmit FIFO full
    -            TXFIFOF: u1,
    -            ///  Receive FIFO full
    -            RXFIFOF: u1,
    -            ///  Transmit FIFO empty
    -            TXFIFOE: u1,
    -            ///  Receive FIFO empty
    -            RXFIFOE: u1,
    -            ///  Data available in transmit FIFO
    -            TXDAVL: u1,
    -            ///  Data available in receive FIFO
    -            RXDAVL: u1,
    -            ///  SDIO interrupt received
    -            SDIOIT: u1,
    -            ///  CE-ATA command completion signal received for CMD61
    -            CEATAEND: u1,
    -            padding: u8,
    -        }),
    -        ///  interrupt clear register
    -        ICR: mmio.Mmio(packed struct(u32) {
    -            ///  CCRCFAIL flag clear bit
    -            CCRCFAILC: u1,
    -            ///  DCRCFAIL flag clear bit
    -            DCRCFAILC: u1,
    -            ///  CTIMEOUT flag clear bit
    -            CTIMEOUTC: u1,
    -            ///  DTIMEOUT flag clear bit
    -            DTIMEOUTC: u1,
    -            ///  TXUNDERR flag clear bit
    -            TXUNDERRC: u1,
    -            ///  RXOVERR flag clear bit
    -            RXOVERRC: u1,
    -            ///  CMDREND flag clear bit
    -            CMDRENDC: u1,
    -            ///  CMDSENT flag clear bit
    -            CMDSENTC: u1,
    -            ///  DATAEND flag clear bit
    -            DATAENDC: u1,
    -            ///  STBITERR flag clear bit
    -            STBITERRC: u1,
    -            ///  DBCKEND flag clear bit
    -            DBCKENDC: u1,
    -            reserved22: u11,
    -            ///  SDIOIT flag clear bit
    -            SDIOITC: u1,
    -            ///  CEATAEND flag clear bit
    -            CEATAENDC: u1,
    -            padding: u8,
    -        }),
    -        ///  mask register
    -        MASK: mmio.Mmio(packed struct(u32) {
    -            ///  Command CRC fail interrupt enable
    -            CCRCFAILIE: u1,
    -            ///  Data CRC fail interrupt enable
    -            DCRCFAILIE: u1,
    -            ///  Command timeout interrupt enable
    -            CTIMEOUTIE: u1,
    -            ///  Data timeout interrupt enable
    -            DTIMEOUTIE: u1,
    -            ///  Tx FIFO underrun error interrupt enable
    -            TXUNDERRIE: u1,
    -            ///  Rx FIFO overrun error interrupt enable
    -            RXOVERRIE: u1,
    -            ///  Command response received interrupt enable
    -            CMDRENDIE: u1,
    -            ///  Command sent interrupt enable
    -            CMDSENTIE: u1,
    -            ///  Data end interrupt enable
    -            DATAENDIE: u1,
    -            ///  Start bit error interrupt enable
    -            STBITERRIE: u1,
    -            ///  Data block end interrupt enable
    -            DBCKENDIE: u1,
    -            ///  Command acting interrupt enable
    -            CMDACTIE: u1,
    -            ///  Data transmit acting interrupt enable
    -            TXACTIE: u1,
    -            ///  Data receive acting interrupt enable
    -            RXACTIE: u1,
    -            ///  Tx FIFO half empty interrupt enable
    -            TXFIFOHEIE: u1,
    -            ///  Rx FIFO half full interrupt enable
    -            RXFIFOHFIE: u1,
    -            ///  Tx FIFO full interrupt enable
    -            TXFIFOFIE: u1,
    -            ///  Rx FIFO full interrupt enable
    -            RXFIFOFIE: u1,
    -            ///  Tx FIFO empty interrupt enable
    -            TXFIFOEIE: u1,
    -            ///  Rx FIFO empty interrupt enable
    -            RXFIFOEIE: u1,
    -            ///  Data available in Tx FIFO interrupt enable
    -            TXDAVLIE: u1,
    -            ///  Data available in Rx FIFO interrupt enable
    -            RXDAVLIE: u1,
    -            ///  SDIO mode interrupt received interrupt enable
    -            SDIOITIE: u1,
    -            ///  CE-ATA command completion signal received interrupt enable
    -            CEATAENDIE: u1,
    -            padding: u8,
    -        }),
    -        reserved72: [8]u8,
    -        ///  FIFO counter register
    -        FIFOCNT: mmio.Mmio(packed struct(u32) {
    -            ///  Remaining number of words to be written to or read from the FIFO.
    -            FIFOCOUNT: u24,
    -            padding: u8,
    -        }),
    -        reserved128: [52]u8,
    -        ///  data FIFO register
    -        FIFO: mmio.Mmio(packed struct(u32) {
    -            ///  Receive and transmit FIFO data
    -            FIFOData: u32,
    -        }),
    -    };
    -
    -    ///  Analog-to-digital converter
    -    pub const ADC1 = extern struct {
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Analog watchdog flag
    -            AWD: u1,
    -            ///  Regular channel end of conversion
    -            EOC: u1,
    -            ///  Injected channel end of conversion
    -            JEOC: u1,
    -            ///  Injected channel start flag
    -            JSTRT: u1,
    -            ///  Regular channel start flag
    -            STRT: u1,
    -            ///  Overrun
    -            OVR: u1,
    -            padding: u26,
    -        }),
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Analog watchdog channel select bits
    -            AWDCH: u5,
    -            ///  Interrupt enable for EOC
    -            EOCIE: u1,
    -            ///  Analog watchdog interrupt enable
    -            AWDIE: u1,
    -            ///  Interrupt enable for injected channels
    -            JEOCIE: u1,
    -            ///  Scan mode
    -            SCAN: u1,
    -            ///  Enable the watchdog on a single channel in scan mode
    -            AWDSGL: u1,
    -            ///  Automatic injected group conversion
    -            JAUTO: u1,
    -            ///  Discontinuous mode on regular channels
    -            DISCEN: u1,
    -            ///  Discontinuous mode on injected channels
    -            JDISCEN: u1,
    -            ///  Discontinuous mode channel count
    -            DISCNUM: u3,
    -            reserved22: u6,
    -            ///  Analog watchdog enable on injected channels
    -            JAWDEN: u1,
    -            ///  Analog watchdog enable on regular channels
    -            AWDEN: u1,
    -            ///  Resolution
    -            RES: u2,
    -            ///  Overrun interrupt enable
    -            OVRIE: u1,
    -            padding: u5,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            ///  A/D Converter ON / OFF
    -            ADON: u1,
    -            ///  Continuous conversion
    -            CONT: u1,
    -            reserved8: u6,
    -            ///  Direct memory access mode (for single ADC mode)
    -            DMA: u1,
    -            ///  DMA disable selection (for single ADC mode)
    -            DDS: u1,
    -            ///  End of conversion selection
    -            EOCS: u1,
    -            ///  Data alignment
    -            ALIGN: u1,
    -            reserved16: u4,
    -            ///  External event select for injected group
    -            JEXTSEL: u4,
    -            ///  External trigger enable for injected channels
    -            JEXTEN: u2,
    -            ///  Start conversion of injected channels
    -            JSWSTART: u1,
    -            reserved24: u1,
    -            ///  External event select for regular group
    -            EXTSEL: u4,
    -            ///  External trigger enable for regular channels
    -            EXTEN: u2,
    -            ///  Start conversion of regular channels
    -            SWSTART: u1,
    -            padding: u1,
    -        }),
    -        ///  sample time register 1
    -        SMPR1: mmio.Mmio(packed struct(u32) {
    -            ///  Sample time bits
    -            SMPx_x: u32,
    -        }),
    -        ///  sample time register 2
    -        SMPR2: mmio.Mmio(packed struct(u32) {
    -            ///  Sample time bits
    -            SMPx_x: u32,
    -        }),
    -        ///  injected channel data offset register x
    -        JOFR1: mmio.Mmio(packed struct(u32) {
    -            ///  Data offset for injected channel x
    -            JOFFSET1: u12,
    -            padding: u20,
    -        }),
    -        ///  injected channel data offset register x
    -        JOFR2: mmio.Mmio(packed struct(u32) {
    -            ///  Data offset for injected channel x
    -            JOFFSET2: u12,
    -            padding: u20,
    -        }),
    -        ///  injected channel data offset register x
    -        JOFR3: mmio.Mmio(packed struct(u32) {
    -            ///  Data offset for injected channel x
    -            JOFFSET3: u12,
    -            padding: u20,
    -        }),
    -        ///  injected channel data offset register x
    -        JOFR4: mmio.Mmio(packed struct(u32) {
    -            ///  Data offset for injected channel x
    -            JOFFSET4: u12,
    -            padding: u20,
    -        }),
    -        ///  watchdog higher threshold register
    -        HTR: mmio.Mmio(packed struct(u32) {
    -            ///  Analog watchdog higher threshold
    -            HT: u12,
    -            padding: u20,
    -        }),
    -        ///  watchdog lower threshold register
    -        LTR: mmio.Mmio(packed struct(u32) {
    -            ///  Analog watchdog lower threshold
    -            LT: u12,
    -            padding: u20,
    -        }),
    -        ///  regular sequence register 1
    -        SQR1: mmio.Mmio(packed struct(u32) {
    -            ///  13th conversion in regular sequence
    -            SQ13: u5,
    -            ///  14th conversion in regular sequence
    -            SQ14: u5,
    -            ///  15th conversion in regular sequence
    -            SQ15: u5,
    -            ///  16th conversion in regular sequence
    -            SQ16: u5,
    -            ///  Regular channel sequence length
    -            L: u4,
    -            padding: u8,
    -        }),
    -        ///  regular sequence register 2
    -        SQR2: mmio.Mmio(packed struct(u32) {
    -            ///  7th conversion in regular sequence
    -            SQ7: u5,
    -            ///  8th conversion in regular sequence
    -            SQ8: u5,
    -            ///  9th conversion in regular sequence
    -            SQ9: u5,
    -            ///  10th conversion in regular sequence
    -            SQ10: u5,
    -            ///  11th conversion in regular sequence
    -            SQ11: u5,
    -            ///  12th conversion in regular sequence
    -            SQ12: u5,
    -            padding: u2,
    -        }),
    -        ///  regular sequence register 3
    -        SQR3: mmio.Mmio(packed struct(u32) {
    -            ///  1st conversion in regular sequence
    -            SQ1: u5,
    -            ///  2nd conversion in regular sequence
    -            SQ2: u5,
    -            ///  3rd conversion in regular sequence
    -            SQ3: u5,
    -            ///  4th conversion in regular sequence
    -            SQ4: u5,
    -            ///  5th conversion in regular sequence
    -            SQ5: u5,
    -            ///  6th conversion in regular sequence
    -            SQ6: u5,
    -            padding: u2,
    -        }),
    -        ///  injected sequence register
    -        JSQR: mmio.Mmio(packed struct(u32) {
    -            ///  1st conversion in injected sequence
    -            JSQ1: u5,
    -            ///  2nd conversion in injected sequence
    -            JSQ2: u5,
    -            ///  3rd conversion in injected sequence
    -            JSQ3: u5,
    -            ///  4th conversion in injected sequence
    -            JSQ4: u5,
    -            ///  Injected sequence length
    -            JL: u2,
    -            padding: u10,
    -        }),
    -        ///  injected data register x
    -        JDR1: mmio.Mmio(packed struct(u32) {
    -            ///  Injected data
    -            JDATA: u16,
    -            padding: u16,
    -        }),
    -        ///  injected data register x
    -        JDR2: mmio.Mmio(packed struct(u32) {
    -            ///  Injected data
    -            JDATA: u16,
    -            padding: u16,
    -        }),
    -        ///  injected data register x
    -        JDR3: mmio.Mmio(packed struct(u32) {
    -            ///  Injected data
    -            JDATA: u16,
    -            padding: u16,
    -        }),
    -        ///  injected data register x
    -        JDR4: mmio.Mmio(packed struct(u32) {
    -            ///  Injected data
    -            JDATA: u16,
    -            padding: u16,
    -        }),
    -        ///  regular data register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  Regular data
    -            DATA: u16,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  External interrupt/event controller
    -    pub const EXTI = extern struct {
    -        ///  Interrupt mask register (EXTI_IMR)
    -        IMR: mmio.Mmio(packed struct(u32) {
    -            ///  Interrupt Mask on line 0
    -            MR0: u1,
    -            ///  Interrupt Mask on line 1
    -            MR1: u1,
    -            ///  Interrupt Mask on line 2
    -            MR2: u1,
    -            ///  Interrupt Mask on line 3
    -            MR3: u1,
    -            ///  Interrupt Mask on line 4
    -            MR4: u1,
    -            ///  Interrupt Mask on line 5
    -            MR5: u1,
    -            ///  Interrupt Mask on line 6
    -            MR6: u1,
    -            ///  Interrupt Mask on line 7
    -            MR7: u1,
    -            ///  Interrupt Mask on line 8
    -            MR8: u1,
    -            ///  Interrupt Mask on line 9
    -            MR9: u1,
    -            ///  Interrupt Mask on line 10
    -            MR10: u1,
    -            ///  Interrupt Mask on line 11
    -            MR11: u1,
    -            ///  Interrupt Mask on line 12
    -            MR12: u1,
    -            ///  Interrupt Mask on line 13
    -            MR13: u1,
    -            ///  Interrupt Mask on line 14
    -            MR14: u1,
    -            ///  Interrupt Mask on line 15
    -            MR15: u1,
    -            ///  Interrupt Mask on line 16
    -            MR16: u1,
    -            ///  Interrupt Mask on line 17
    -            MR17: u1,
    -            ///  Interrupt Mask on line 18
    -            MR18: u1,
    -            ///  Interrupt Mask on line 19
    -            MR19: u1,
    -            ///  Interrupt Mask on line 20
    -            MR20: u1,
    -            ///  Interrupt Mask on line 21
    -            MR21: u1,
    -            ///  Interrupt Mask on line 22
    -            MR22: u1,
    -            padding: u9,
    -        }),
    -        ///  Event mask register (EXTI_EMR)
    -        EMR: mmio.Mmio(packed struct(u32) {
    -            ///  Event Mask on line 0
    -            MR0: u1,
    -            ///  Event Mask on line 1
    -            MR1: u1,
    -            ///  Event Mask on line 2
    -            MR2: u1,
    -            ///  Event Mask on line 3
    -            MR3: u1,
    -            ///  Event Mask on line 4
    -            MR4: u1,
    -            ///  Event Mask on line 5
    -            MR5: u1,
    -            ///  Event Mask on line 6
    -            MR6: u1,
    -            ///  Event Mask on line 7
    -            MR7: u1,
    -            ///  Event Mask on line 8
    -            MR8: u1,
    -            ///  Event Mask on line 9
    -            MR9: u1,
    -            ///  Event Mask on line 10
    -            MR10: u1,
    -            ///  Event Mask on line 11
    -            MR11: u1,
    -            ///  Event Mask on line 12
    -            MR12: u1,
    -            ///  Event Mask on line 13
    -            MR13: u1,
    -            ///  Event Mask on line 14
    -            MR14: u1,
    -            ///  Event Mask on line 15
    -            MR15: u1,
    -            ///  Event Mask on line 16
    -            MR16: u1,
    -            ///  Event Mask on line 17
    -            MR17: u1,
    -            ///  Event Mask on line 18
    -            MR18: u1,
    -            ///  Event Mask on line 19
    -            MR19: u1,
    -            ///  Event Mask on line 20
    -            MR20: u1,
    -            ///  Event Mask on line 21
    -            MR21: u1,
    -            ///  Event Mask on line 22
    -            MR22: u1,
    -            padding: u9,
    -        }),
    -        ///  Rising Trigger selection register (EXTI_RTSR)
    -        RTSR: mmio.Mmio(packed struct(u32) {
    -            ///  Rising trigger event configuration of line 0
    -            TR0: u1,
    -            ///  Rising trigger event configuration of line 1
    -            TR1: u1,
    -            ///  Rising trigger event configuration of line 2
    -            TR2: u1,
    -            ///  Rising trigger event configuration of line 3
    -            TR3: u1,
    -            ///  Rising trigger event configuration of line 4
    -            TR4: u1,
    -            ///  Rising trigger event configuration of line 5
    -            TR5: u1,
    -            ///  Rising trigger event configuration of line 6
    -            TR6: u1,
    -            ///  Rising trigger event configuration of line 7
    -            TR7: u1,
    -            ///  Rising trigger event configuration of line 8
    -            TR8: u1,
    -            ///  Rising trigger event configuration of line 9
    -            TR9: u1,
    -            ///  Rising trigger event configuration of line 10
    -            TR10: u1,
    -            ///  Rising trigger event configuration of line 11
    -            TR11: u1,
    -            ///  Rising trigger event configuration of line 12
    -            TR12: u1,
    -            ///  Rising trigger event configuration of line 13
    -            TR13: u1,
    -            ///  Rising trigger event configuration of line 14
    -            TR14: u1,
    -            ///  Rising trigger event configuration of line 15
    -            TR15: u1,
    -            ///  Rising trigger event configuration of line 16
    -            TR16: u1,
    -            ///  Rising trigger event configuration of line 17
    -            TR17: u1,
    -            ///  Rising trigger event configuration of line 18
    -            TR18: u1,
    -            ///  Rising trigger event configuration of line 19
    -            TR19: u1,
    -            ///  Rising trigger event configuration of line 20
    -            TR20: u1,
    -            ///  Rising trigger event configuration of line 21
    -            TR21: u1,
    -            ///  Rising trigger event configuration of line 22
    -            TR22: u1,
    -            padding: u9,
    -        }),
    -        ///  Falling Trigger selection register (EXTI_FTSR)
    -        FTSR: mmio.Mmio(packed struct(u32) {
    -            ///  Falling trigger event configuration of line 0
    -            TR0: u1,
    -            ///  Falling trigger event configuration of line 1
    -            TR1: u1,
    -            ///  Falling trigger event configuration of line 2
    -            TR2: u1,
    -            ///  Falling trigger event configuration of line 3
    -            TR3: u1,
    -            ///  Falling trigger event configuration of line 4
    -            TR4: u1,
    -            ///  Falling trigger event configuration of line 5
    -            TR5: u1,
    -            ///  Falling trigger event configuration of line 6
    -            TR6: u1,
    -            ///  Falling trigger event configuration of line 7
    -            TR7: u1,
    -            ///  Falling trigger event configuration of line 8
    -            TR8: u1,
    -            ///  Falling trigger event configuration of line 9
    -            TR9: u1,
    -            ///  Falling trigger event configuration of line 10
    -            TR10: u1,
    -            ///  Falling trigger event configuration of line 11
    -            TR11: u1,
    -            ///  Falling trigger event configuration of line 12
    -            TR12: u1,
    -            ///  Falling trigger event configuration of line 13
    -            TR13: u1,
    -            ///  Falling trigger event configuration of line 14
    -            TR14: u1,
    -            ///  Falling trigger event configuration of line 15
    -            TR15: u1,
    -            ///  Falling trigger event configuration of line 16
    -            TR16: u1,
    -            ///  Falling trigger event configuration of line 17
    -            TR17: u1,
    -            ///  Falling trigger event configuration of line 18
    -            TR18: u1,
    -            ///  Falling trigger event configuration of line 19
    -            TR19: u1,
    -            ///  Falling trigger event configuration of line 20
    -            TR20: u1,
    -            ///  Falling trigger event configuration of line 21
    -            TR21: u1,
    -            ///  Falling trigger event configuration of line 22
    -            TR22: u1,
    -            padding: u9,
    -        }),
    -        ///  Software interrupt event register (EXTI_SWIER)
    -        SWIER: mmio.Mmio(packed struct(u32) {
    -            ///  Software Interrupt on line 0
    -            SWIER0: u1,
    -            ///  Software Interrupt on line 1
    -            SWIER1: u1,
    -            ///  Software Interrupt on line 2
    -            SWIER2: u1,
    -            ///  Software Interrupt on line 3
    -            SWIER3: u1,
    -            ///  Software Interrupt on line 4
    -            SWIER4: u1,
    -            ///  Software Interrupt on line 5
    -            SWIER5: u1,
    -            ///  Software Interrupt on line 6
    -            SWIER6: u1,
    -            ///  Software Interrupt on line 7
    -            SWIER7: u1,
    -            ///  Software Interrupt on line 8
    -            SWIER8: u1,
    -            ///  Software Interrupt on line 9
    -            SWIER9: u1,
    -            ///  Software Interrupt on line 10
    -            SWIER10: u1,
    -            ///  Software Interrupt on line 11
    -            SWIER11: u1,
    -            ///  Software Interrupt on line 12
    -            SWIER12: u1,
    -            ///  Software Interrupt on line 13
    -            SWIER13: u1,
    -            ///  Software Interrupt on line 14
    -            SWIER14: u1,
    -            ///  Software Interrupt on line 15
    -            SWIER15: u1,
    -            ///  Software Interrupt on line 16
    -            SWIER16: u1,
    -            ///  Software Interrupt on line 17
    -            SWIER17: u1,
    -            ///  Software Interrupt on line 18
    -            SWIER18: u1,
    -            ///  Software Interrupt on line 19
    -            SWIER19: u1,
    -            ///  Software Interrupt on line 20
    -            SWIER20: u1,
    -            ///  Software Interrupt on line 21
    -            SWIER21: u1,
    -            ///  Software Interrupt on line 22
    -            SWIER22: u1,
    -            padding: u9,
    -        }),
    -        ///  Pending register (EXTI_PR)
    -        PR: mmio.Mmio(packed struct(u32) {
    -            ///  Pending bit 0
    -            PR0: u1,
    -            ///  Pending bit 1
    -            PR1: u1,
    -            ///  Pending bit 2
    -            PR2: u1,
    -            ///  Pending bit 3
    -            PR3: u1,
    -            ///  Pending bit 4
    -            PR4: u1,
    -            ///  Pending bit 5
    -            PR5: u1,
    -            ///  Pending bit 6
    -            PR6: u1,
    -            ///  Pending bit 7
    -            PR7: u1,
    -            ///  Pending bit 8
    -            PR8: u1,
    -            ///  Pending bit 9
    -            PR9: u1,
    -            ///  Pending bit 10
    -            PR10: u1,
    -            ///  Pending bit 11
    -            PR11: u1,
    -            ///  Pending bit 12
    -            PR12: u1,
    -            ///  Pending bit 13
    -            PR13: u1,
    -            ///  Pending bit 14
    -            PR14: u1,
    -            ///  Pending bit 15
    -            PR15: u1,
    -            ///  Pending bit 16
    -            PR16: u1,
    -            ///  Pending bit 17
    -            PR17: u1,
    -            ///  Pending bit 18
    -            PR18: u1,
    -            ///  Pending bit 19
    -            PR19: u1,
    -            ///  Pending bit 20
    -            PR20: u1,
    -            ///  Pending bit 21
    -            PR21: u1,
    -            ///  Pending bit 22
    -            PR22: u1,
    -            padding: u9,
    -        }),
    -    };
    -
    -    ///  FLASH
    -    pub const FLASH = extern struct {
    -        ///  Flash access control register
    -        ACR: mmio.Mmio(packed struct(u32) {
    -            ///  Latency
    -            LATENCY: u3,
    -            reserved8: u5,
    -            ///  Prefetch enable
    -            PRFTEN: u1,
    -            ///  Instruction cache enable
    -            ICEN: u1,
    -            ///  Data cache enable
    -            DCEN: u1,
    -            ///  Instruction cache reset
    -            ICRST: u1,
    -            ///  Data cache reset
    -            DCRST: u1,
    -            padding: u19,
    -        }),
    -        ///  Flash key register
    -        KEYR: mmio.Mmio(packed struct(u32) {
    -            ///  FPEC key
    -            KEY: u32,
    -        }),
    -        ///  Flash option key register
    -        OPTKEYR: mmio.Mmio(packed struct(u32) {
    -            ///  Option byte key
    -            OPTKEY: u32,
    -        }),
    -        ///  Status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  End of operation
    -            EOP: u1,
    -            ///  Operation error
    -            OPERR: u1,
    -            reserved4: u2,
    -            ///  Write protection error
    -            WRPERR: u1,
    -            ///  Programming alignment error
    -            PGAERR: u1,
    -            ///  Programming parallelism error
    -            PGPERR: u1,
    -            ///  Programming sequence error
    -            PGSERR: u1,
    -            reserved16: u8,
    -            ///  Busy
    -            BSY: u1,
    -            padding: u15,
    -        }),
    -        ///  Control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  Programming
    -            PG: u1,
    -            ///  Sector Erase
    -            SER: u1,
    -            ///  Mass Erase
    -            MER: u1,
    -            ///  Sector number
    -            SNB: u4,
    -            reserved8: u1,
    -            ///  Program size
    -            PSIZE: u2,
    -            reserved16: u6,
    -            ///  Start
    -            STRT: u1,
    -            reserved24: u7,
    -            ///  End of operation interrupt enable
    -            EOPIE: u1,
    -            ///  Error interrupt enable
    -            ERRIE: u1,
    -            reserved31: u5,
    -            ///  Lock
    -            LOCK: u1,
    -        }),
    -        ///  Flash option control register
    -        OPTCR: mmio.Mmio(packed struct(u32) {
    -            ///  Option lock
    -            OPTLOCK: u1,
    -            ///  Option start
    -            OPTSTRT: u1,
    -            ///  BOR reset Level
    -            BOR_LEV: u2,
    -            reserved5: u1,
    -            ///  WDG_SW User option bytes
    -            WDG_SW: u1,
    -            ///  nRST_STOP User option bytes
    -            nRST_STOP: u1,
    -            ///  nRST_STDBY User option bytes
    -            nRST_STDBY: u1,
    -            ///  Read protect
    -            RDP: u8,
    -            ///  Not write protect
    -            nWRP: u12,
    -            padding: u4,
    -        }),
    -    };
    -
    -    ///  Universal synchronous asynchronous receiver transmitter
    -    pub const USART6 = extern struct {
    -        ///  Status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Parity error
    -            PE: u1,
    -            ///  Framing error
    -            FE: u1,
    -            ///  Noise detected flag
    -            NF: u1,
    -            ///  Overrun error
    -            ORE: u1,
    -            ///  IDLE line detected
    -            IDLE: u1,
    -            ///  Read data register not empty
    -            RXNE: u1,
    -            ///  Transmission complete
    -            TC: u1,
    -            ///  Transmit data register empty
    -            TXE: u1,
    -            ///  LIN break detection flag
    -            LBD: u1,
    -            ///  CTS flag
    -            CTS: u1,
    -            padding: u22,
    -        }),
    -        ///  Data register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  Data value
    -            DR: u9,
    -            padding: u23,
    -        }),
    -        ///  Baud rate register
    -        BRR: mmio.Mmio(packed struct(u32) {
    -            ///  fraction of USARTDIV
    -            DIV_Fraction: u4,
    -            ///  mantissa of USARTDIV
    -            DIV_Mantissa: u12,
    -            padding: u16,
    -        }),
    -        ///  Control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Send break
    -            SBK: u1,
    -            ///  Receiver wakeup
    -            RWU: u1,
    -            ///  Receiver enable
    -            RE: u1,
    -            ///  Transmitter enable
    -            TE: u1,
    -            ///  IDLE interrupt enable
    -            IDLEIE: u1,
    -            ///  RXNE interrupt enable
    -            RXNEIE: u1,
    -            ///  Transmission complete interrupt enable
    -            TCIE: u1,
    -            ///  TXE interrupt enable
    -            TXEIE: u1,
    -            ///  PE interrupt enable
    -            PEIE: u1,
    -            ///  Parity selection
    -            PS: u1,
    -            ///  Parity control enable
    -            PCE: u1,
    -            ///  Wakeup method
    -            WAKE: u1,
    -            ///  Word length
    -            M: u1,
    -            ///  USART enable
    -            UE: u1,
    -            reserved15: u1,
    -            ///  Oversampling mode
    -            OVER8: u1,
    -            padding: u16,
    -        }),
    -        ///  Control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            ///  Address of the USART node
    -            ADD: u4,
    -            reserved5: u1,
    -            ///  lin break detection length
    -            LBDL: u1,
    -            ///  LIN break detection interrupt enable
    -            LBDIE: u1,
    -            reserved8: u1,
    -            ///  Last bit clock pulse
    -            LBCL: u1,
    -            ///  Clock phase
    -            CPHA: u1,
    -            ///  Clock polarity
    -            CPOL: u1,
    -            ///  Clock enable
    -            CLKEN: u1,
    -            ///  STOP bits
    -            STOP: u2,
    -            ///  LIN mode enable
    -            LINEN: u1,
    -            padding: u17,
    -        }),
    -        ///  Control register 3
    -        CR3: mmio.Mmio(packed struct(u32) {
    -            ///  Error interrupt enable
    -            EIE: u1,
    -            ///  IrDA mode enable
    -            IREN: u1,
    -            ///  IrDA low-power
    -            IRLP: u1,
    -            ///  Half-duplex selection
    -            HDSEL: u1,
    -            ///  Smartcard NACK enable
    -            NACK: u1,
    -            ///  Smartcard mode enable
    -            SCEN: u1,
    -            ///  DMA enable receiver
    -            DMAR: u1,
    -            ///  DMA enable transmitter
    -            DMAT: u1,
    -            ///  RTS enable
    -            RTSE: u1,
    -            ///  CTS enable
    -            CTSE: u1,
    -            ///  CTS interrupt enable
    -            CTSIE: u1,
    -            ///  One sample bit method enable
    -            ONEBIT: u1,
    -            padding: u20,
    -        }),
    -        ///  Guard time and prescaler register
    -        GTPR: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u8,
    -            ///  Guard time value
    -            GT: u8,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  Basic timers
    -    pub const TIM6 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            ///  One-pulse mode
    -            OPM: u1,
    -            reserved7: u3,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            padding: u24,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            reserved4: u4,
    -            ///  Master mode selection
    -            MMS: u3,
    -            padding: u25,
    -        }),
    -        reserved12: [4]u8,
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            reserved8: u7,
    -            ///  Update DMA request enable
    -            UDE: u1,
    -            padding: u23,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            padding: u31,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            padding: u31,
    -        }),
    -        reserved36: [12]u8,
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  Low counter value
    -            CNT: u16,
    -            padding: u16,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Low Auto-reload value
    -            ARR: u16,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  Controller area network
    -    pub const CAN1 = extern struct {
    -        ///  master control register
    -        MCR: mmio.Mmio(packed struct(u32) {
    -            ///  INRQ
    -            INRQ: u1,
    -            ///  SLEEP
    -            SLEEP: u1,
    -            ///  TXFP
    -            TXFP: u1,
    -            ///  RFLM
    -            RFLM: u1,
    -            ///  NART
    -            NART: u1,
    -            ///  AWUM
    -            AWUM: u1,
    -            ///  ABOM
    -            ABOM: u1,
    -            ///  TTCM
    -            TTCM: u1,
    -            reserved15: u7,
    -            ///  RESET
    -            RESET: u1,
    -            ///  DBF
    -            DBF: u1,
    -            padding: u15,
    -        }),
    -        ///  master status register
    -        MSR: mmio.Mmio(packed struct(u32) {
    -            ///  INAK
    -            INAK: u1,
    -            ///  SLAK
    -            SLAK: u1,
    -            ///  ERRI
    -            ERRI: u1,
    -            ///  WKUI
    -            WKUI: u1,
    -            ///  SLAKI
    -            SLAKI: u1,
    -            reserved8: u3,
    -            ///  TXM
    -            TXM: u1,
    -            ///  RXM
    -            RXM: u1,
    -            ///  SAMP
    -            SAMP: u1,
    -            ///  RX
    -            RX: u1,
    -            padding: u20,
    -        }),
    -        ///  transmit status register
    -        TSR: mmio.Mmio(packed struct(u32) {
    -            ///  RQCP0
    -            RQCP0: u1,
    -            ///  TXOK0
    -            TXOK0: u1,
    -            ///  ALST0
    -            ALST0: u1,
    -            ///  TERR0
    -            TERR0: u1,
    -            reserved7: u3,
    -            ///  ABRQ0
    -            ABRQ0: u1,
    -            ///  RQCP1
    -            RQCP1: u1,
    -            ///  TXOK1
    -            TXOK1: u1,
    -            ///  ALST1
    -            ALST1: u1,
    -            ///  TERR1
    -            TERR1: u1,
    -            reserved15: u3,
    -            ///  ABRQ1
    -            ABRQ1: u1,
    -            ///  RQCP2
    -            RQCP2: u1,
    -            ///  TXOK2
    -            TXOK2: u1,
    -            ///  ALST2
    -            ALST2: u1,
    -            ///  TERR2
    -            TERR2: u1,
    -            reserved23: u3,
    -            ///  ABRQ2
    -            ABRQ2: u1,
    -            ///  CODE
    -            CODE: u2,
    -            ///  Lowest priority flag for mailbox 0
    -            TME0: u1,
    -            ///  Lowest priority flag for mailbox 1
    -            TME1: u1,
    -            ///  Lowest priority flag for mailbox 2
    -            TME2: u1,
    -            ///  Lowest priority flag for mailbox 0
    -            LOW0: u1,
    -            ///  Lowest priority flag for mailbox 1
    -            LOW1: u1,
    -            ///  Lowest priority flag for mailbox 2
    -            LOW2: u1,
    -        }),
    -        ///  receive FIFO 0 register
    -        RF0R: mmio.Mmio(packed struct(u32) {
    -            ///  FMP0
    -            FMP0: u2,
    -            reserved3: u1,
    -            ///  FULL0
    -            FULL0: u1,
    -            ///  FOVR0
    -            FOVR0: u1,
    -            ///  RFOM0
    -            RFOM0: u1,
    -            padding: u26,
    -        }),
    -        ///  receive FIFO 1 register
    -        RF1R: mmio.Mmio(packed struct(u32) {
    -            ///  FMP1
    -            FMP1: u2,
    -            reserved3: u1,
    -            ///  FULL1
    -            FULL1: u1,
    -            ///  FOVR1
    -            FOVR1: u1,
    -            ///  RFOM1
    -            RFOM1: u1,
    -            padding: u26,
    -        }),
    -        ///  interrupt enable register
    -        IER: mmio.Mmio(packed struct(u32) {
    -            ///  TMEIE
    -            TMEIE: u1,
    -            ///  FMPIE0
    -            FMPIE0: u1,
    -            ///  FFIE0
    -            FFIE0: u1,
    -            ///  FOVIE0
    -            FOVIE0: u1,
    -            ///  FMPIE1
    -            FMPIE1: u1,
    -            ///  FFIE1
    -            FFIE1: u1,
    -            ///  FOVIE1
    -            FOVIE1: u1,
    -            reserved8: u1,
    -            ///  EWGIE
    -            EWGIE: u1,
    -            ///  EPVIE
    -            EPVIE: u1,
    -            ///  BOFIE
    -            BOFIE: u1,
    -            ///  LECIE
    -            LECIE: u1,
    -            reserved15: u3,
    -            ///  ERRIE
    -            ERRIE: u1,
    -            ///  WKUIE
    -            WKUIE: u1,
    -            ///  SLKIE
    -            SLKIE: u1,
    -            padding: u14,
    -        }),
    -        ///  interrupt enable register
    -        ESR: mmio.Mmio(packed struct(u32) {
    -            ///  EWGF
    -            EWGF: u1,
    -            ///  EPVF
    -            EPVF: u1,
    -            ///  BOFF
    -            BOFF: u1,
    -            reserved4: u1,
    -            ///  LEC
    -            LEC: u3,
    -            reserved16: u9,
    -            ///  TEC
    -            TEC: u8,
    -            ///  REC
    -            REC: u8,
    -        }),
    -        ///  bit timing register
    -        BTR: mmio.Mmio(packed struct(u32) {
    -            ///  BRP
    -            BRP: u10,
    -            reserved16: u6,
    -            ///  TS1
    -            TS1: u4,
    -            ///  TS2
    -            TS2: u3,
    -            reserved24: u1,
    -            ///  SJW
    -            SJW: u2,
    -            reserved30: u4,
    -            ///  LBKM
    -            LBKM: u1,
    -            ///  SILM
    -            SILM: u1,
    -        }),
    -        reserved384: [352]u8,
    -        ///  TX mailbox identifier register
    -        TI0R: mmio.Mmio(packed struct(u32) {
    -            ///  TXRQ
    -            TXRQ: u1,
    -            ///  RTR
    -            RTR: u1,
    -            ///  IDE
    -            IDE: u1,
    -            ///  EXID
    -            EXID: u18,
    -            ///  STID
    -            STID: u11,
    -        }),
    -        ///  mailbox data length control and time stamp register
    -        TDT0R: mmio.Mmio(packed struct(u32) {
    -            ///  DLC
    -            DLC: u4,
    -            reserved8: u4,
    -            ///  TGT
    -            TGT: u1,
    -            reserved16: u7,
    -            ///  TIME
    -            TIME: u16,
    -        }),
    -        ///  mailbox data low register
    -        TDL0R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA0
    -            DATA0: u8,
    -            ///  DATA1
    -            DATA1: u8,
    -            ///  DATA2
    -            DATA2: u8,
    -            ///  DATA3
    -            DATA3: u8,
    -        }),
    -        ///  mailbox data high register
    -        TDH0R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA4
    -            DATA4: u8,
    -            ///  DATA5
    -            DATA5: u8,
    -            ///  DATA6
    -            DATA6: u8,
    -            ///  DATA7
    -            DATA7: u8,
    -        }),
    -        ///  mailbox identifier register
    -        TI1R: mmio.Mmio(packed struct(u32) {
    -            ///  TXRQ
    -            TXRQ: u1,
    -            ///  RTR
    -            RTR: u1,
    -            ///  IDE
    -            IDE: u1,
    -            ///  EXID
    -            EXID: u18,
    -            ///  STID
    -            STID: u11,
    -        }),
    -        ///  mailbox data length control and time stamp register
    -        TDT1R: mmio.Mmio(packed struct(u32) {
    -            ///  DLC
    -            DLC: u4,
    -            reserved8: u4,
    -            ///  TGT
    -            TGT: u1,
    -            reserved16: u7,
    -            ///  TIME
    -            TIME: u16,
    -        }),
    -        ///  mailbox data low register
    -        TDL1R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA0
    -            DATA0: u8,
    -            ///  DATA1
    -            DATA1: u8,
    -            ///  DATA2
    -            DATA2: u8,
    -            ///  DATA3
    -            DATA3: u8,
    -        }),
    -        ///  mailbox data high register
    -        TDH1R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA4
    -            DATA4: u8,
    -            ///  DATA5
    -            DATA5: u8,
    -            ///  DATA6
    -            DATA6: u8,
    -            ///  DATA7
    -            DATA7: u8,
    -        }),
    -        ///  mailbox identifier register
    -        TI2R: mmio.Mmio(packed struct(u32) {
    -            ///  TXRQ
    -            TXRQ: u1,
    -            ///  RTR
    -            RTR: u1,
    -            ///  IDE
    -            IDE: u1,
    -            ///  EXID
    -            EXID: u18,
    -            ///  STID
    -            STID: u11,
    -        }),
    -        ///  mailbox data length control and time stamp register
    -        TDT2R: mmio.Mmio(packed struct(u32) {
    -            ///  DLC
    -            DLC: u4,
    -            reserved8: u4,
    -            ///  TGT
    -            TGT: u1,
    -            reserved16: u7,
    -            ///  TIME
    -            TIME: u16,
    -        }),
    -        ///  mailbox data low register
    -        TDL2R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA0
    -            DATA0: u8,
    -            ///  DATA1
    -            DATA1: u8,
    -            ///  DATA2
    -            DATA2: u8,
    -            ///  DATA3
    -            DATA3: u8,
    -        }),
    -        ///  mailbox data high register
    -        TDH2R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA4
    -            DATA4: u8,
    -            ///  DATA5
    -            DATA5: u8,
    -            ///  DATA6
    -            DATA6: u8,
    -            ///  DATA7
    -            DATA7: u8,
    -        }),
    -        ///  receive FIFO mailbox identifier register
    -        RI0R: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  RTR
    -            RTR: u1,
    -            ///  IDE
    -            IDE: u1,
    -            ///  EXID
    -            EXID: u18,
    -            ///  STID
    -            STID: u11,
    -        }),
    -        ///  mailbox data high register
    -        RDT0R: mmio.Mmio(packed struct(u32) {
    -            ///  DLC
    -            DLC: u4,
    -            reserved8: u4,
    -            ///  FMI
    -            FMI: u8,
    -            ///  TIME
    -            TIME: u16,
    -        }),
    -        ///  mailbox data high register
    -        RDL0R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA0
    -            DATA0: u8,
    -            ///  DATA1
    -            DATA1: u8,
    -            ///  DATA2
    -            DATA2: u8,
    -            ///  DATA3
    -            DATA3: u8,
    -        }),
    -        ///  receive FIFO mailbox data high register
    -        RDH0R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA4
    -            DATA4: u8,
    -            ///  DATA5
    -            DATA5: u8,
    -            ///  DATA6
    -            DATA6: u8,
    -            ///  DATA7
    -            DATA7: u8,
    -        }),
    -        ///  mailbox data high register
    -        RI1R: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  RTR
    -            RTR: u1,
    -            ///  IDE
    -            IDE: u1,
    -            ///  EXID
    -            EXID: u18,
    -            ///  STID
    -            STID: u11,
    -        }),
    -        ///  mailbox data high register
    -        RDT1R: mmio.Mmio(packed struct(u32) {
    -            ///  DLC
    -            DLC: u4,
    -            reserved8: u4,
    -            ///  FMI
    -            FMI: u8,
    -            ///  TIME
    -            TIME: u16,
    -        }),
    -        ///  mailbox data high register
    -        RDL1R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA0
    -            DATA0: u8,
    -            ///  DATA1
    -            DATA1: u8,
    -            ///  DATA2
    -            DATA2: u8,
    -            ///  DATA3
    -            DATA3: u8,
    -        }),
    -        ///  mailbox data high register
    -        RDH1R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA4
    -            DATA4: u8,
    -            ///  DATA5
    -            DATA5: u8,
    -            ///  DATA6
    -            DATA6: u8,
    -            ///  DATA7
    -            DATA7: u8,
    -        }),
    -        reserved512: [48]u8,
    -        ///  filter master register
    -        FMR: mmio.Mmio(packed struct(u32) {
    -            ///  FINIT
    -            FINIT: u1,
    -            reserved8: u7,
    -            ///  CAN2SB
    -            CAN2SB: u6,
    -            padding: u18,
    -        }),
    -        ///  filter mode register
    -        FM1R: mmio.Mmio(packed struct(u32) {
    -            ///  Filter mode
    -            FBM0: u1,
    -            ///  Filter mode
    -            FBM1: u1,
    -            ///  Filter mode
    -            FBM2: u1,
    -            ///  Filter mode
    -            FBM3: u1,
    -            ///  Filter mode
    -            FBM4: u1,
    -            ///  Filter mode
    -            FBM5: u1,
    -            ///  Filter mode
    -            FBM6: u1,
    -            ///  Filter mode
    -            FBM7: u1,
    -            ///  Filter mode
    -            FBM8: u1,
    -            ///  Filter mode
    -            FBM9: u1,
    -            ///  Filter mode
    -            FBM10: u1,
    -            ///  Filter mode
    -            FBM11: u1,
    -            ///  Filter mode
    -            FBM12: u1,
    -            ///  Filter mode
    -            FBM13: u1,
    -            ///  Filter mode
    -            FBM14: u1,
    -            ///  Filter mode
    -            FBM15: u1,
    -            ///  Filter mode
    -            FBM16: u1,
    -            ///  Filter mode
    -            FBM17: u1,
    -            ///  Filter mode
    -            FBM18: u1,
    -            ///  Filter mode
    -            FBM19: u1,
    -            ///  Filter mode
    -            FBM20: u1,
    -            ///  Filter mode
    -            FBM21: u1,
    -            ///  Filter mode
    -            FBM22: u1,
    -            ///  Filter mode
    -            FBM23: u1,
    -            ///  Filter mode
    -            FBM24: u1,
    -            ///  Filter mode
    -            FBM25: u1,
    -            ///  Filter mode
    -            FBM26: u1,
    -            ///  Filter mode
    -            FBM27: u1,
    -            padding: u4,
    -        }),
    -        reserved524: [4]u8,
    -        ///  filter scale register
    -        FS1R: mmio.Mmio(packed struct(u32) {
    -            ///  Filter scale configuration
    -            FSC0: u1,
    -            ///  Filter scale configuration
    -            FSC1: u1,
    -            ///  Filter scale configuration
    -            FSC2: u1,
    -            ///  Filter scale configuration
    -            FSC3: u1,
    -            ///  Filter scale configuration
    -            FSC4: u1,
    -            ///  Filter scale configuration
    -            FSC5: u1,
    -            ///  Filter scale configuration
    -            FSC6: u1,
    -            ///  Filter scale configuration
    -            FSC7: u1,
    -            ///  Filter scale configuration
    -            FSC8: u1,
    -            ///  Filter scale configuration
    -            FSC9: u1,
    -            ///  Filter scale configuration
    -            FSC10: u1,
    -            ///  Filter scale configuration
    -            FSC11: u1,
    -            ///  Filter scale configuration
    -            FSC12: u1,
    -            ///  Filter scale configuration
    -            FSC13: u1,
    -            ///  Filter scale configuration
    -            FSC14: u1,
    -            ///  Filter scale configuration
    -            FSC15: u1,
    -            ///  Filter scale configuration
    -            FSC16: u1,
    -            ///  Filter scale configuration
    -            FSC17: u1,
    -            ///  Filter scale configuration
    -            FSC18: u1,
    -            ///  Filter scale configuration
    -            FSC19: u1,
    -            ///  Filter scale configuration
    -            FSC20: u1,
    -            ///  Filter scale configuration
    -            FSC21: u1,
    -            ///  Filter scale configuration
    -            FSC22: u1,
    -            ///  Filter scale configuration
    -            FSC23: u1,
    -            ///  Filter scale configuration
    -            FSC24: u1,
    -            ///  Filter scale configuration
    -            FSC25: u1,
    -            ///  Filter scale configuration
    -            FSC26: u1,
    -            ///  Filter scale configuration
    -            FSC27: u1,
    -            padding: u4,
    -        }),
    -        reserved532: [4]u8,
    -        ///  filter FIFO assignment register
    -        FFA1R: mmio.Mmio(packed struct(u32) {
    -            ///  Filter FIFO assignment for filter 0
    -            FFA0: u1,
    -            ///  Filter FIFO assignment for filter 1
    -            FFA1: u1,
    -            ///  Filter FIFO assignment for filter 2
    -            FFA2: u1,
    -            ///  Filter FIFO assignment for filter 3
    -            FFA3: u1,
    -            ///  Filter FIFO assignment for filter 4
    -            FFA4: u1,
    -            ///  Filter FIFO assignment for filter 5
    -            FFA5: u1,
    -            ///  Filter FIFO assignment for filter 6
    -            FFA6: u1,
    -            ///  Filter FIFO assignment for filter 7
    -            FFA7: u1,
    -            ///  Filter FIFO assignment for filter 8
    -            FFA8: u1,
    -            ///  Filter FIFO assignment for filter 9
    -            FFA9: u1,
    -            ///  Filter FIFO assignment for filter 10
    -            FFA10: u1,
    -            ///  Filter FIFO assignment for filter 11
    -            FFA11: u1,
    -            ///  Filter FIFO assignment for filter 12
    -            FFA12: u1,
    -            ///  Filter FIFO assignment for filter 13
    -            FFA13: u1,
    -            ///  Filter FIFO assignment for filter 14
    -            FFA14: u1,
    -            ///  Filter FIFO assignment for filter 15
    -            FFA15: u1,
    -            ///  Filter FIFO assignment for filter 16
    -            FFA16: u1,
    -            ///  Filter FIFO assignment for filter 17
    -            FFA17: u1,
    -            ///  Filter FIFO assignment for filter 18
    -            FFA18: u1,
    -            ///  Filter FIFO assignment for filter 19
    -            FFA19: u1,
    -            ///  Filter FIFO assignment for filter 20
    -            FFA20: u1,
    -            ///  Filter FIFO assignment for filter 21
    -            FFA21: u1,
    -            ///  Filter FIFO assignment for filter 22
    -            FFA22: u1,
    -            ///  Filter FIFO assignment for filter 23
    -            FFA23: u1,
    -            ///  Filter FIFO assignment for filter 24
    -            FFA24: u1,
    -            ///  Filter FIFO assignment for filter 25
    -            FFA25: u1,
    -            ///  Filter FIFO assignment for filter 26
    -            FFA26: u1,
    -            ///  Filter FIFO assignment for filter 27
    -            FFA27: u1,
    -            padding: u4,
    -        }),
    -        reserved540: [4]u8,
    -        ///  filter activation register
    -        FA1R: mmio.Mmio(packed struct(u32) {
    -            ///  Filter active
    -            FACT0: u1,
    -            ///  Filter active
    -            FACT1: u1,
    -            ///  Filter active
    -            FACT2: u1,
    -            ///  Filter active
    -            FACT3: u1,
    -            ///  Filter active
    -            FACT4: u1,
    -            ///  Filter active
    -            FACT5: u1,
    -            ///  Filter active
    -            FACT6: u1,
    -            ///  Filter active
    -            FACT7: u1,
    -            ///  Filter active
    -            FACT8: u1,
    -            ///  Filter active
    -            FACT9: u1,
    -            ///  Filter active
    -            FACT10: u1,
    -            ///  Filter active
    -            FACT11: u1,
    -            ///  Filter active
    -            FACT12: u1,
    -            ///  Filter active
    -            FACT13: u1,
    -            ///  Filter active
    -            FACT14: u1,
    -            ///  Filter active
    -            FACT15: u1,
    -            ///  Filter active
    -            FACT16: u1,
    -            ///  Filter active
    -            FACT17: u1,
    -            ///  Filter active
    -            FACT18: u1,
    -            ///  Filter active
    -            FACT19: u1,
    -            ///  Filter active
    -            FACT20: u1,
    -            ///  Filter active
    -            FACT21: u1,
    -            ///  Filter active
    -            FACT22: u1,
    -            ///  Filter active
    -            FACT23: u1,
    -            ///  Filter active
    -            FACT24: u1,
    -            ///  Filter active
    -            FACT25: u1,
    -            ///  Filter active
    -            FACT26: u1,
    -            ///  Filter active
    -            FACT27: u1,
    -            padding: u4,
    -        }),
    -        reserved576: [32]u8,
    -        ///  Filter bank 0 register 1
    -        F0R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 0 register 2
    -        F0R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 1 register 1
    -        F1R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 1 register 2
    -        F1R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 2 register 1
    -        F2R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 2 register 2
    -        F2R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 3 register 1
    -        F3R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 3 register 2
    -        F3R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 4 register 1
    -        F4R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 4 register 2
    -        F4R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 5 register 1
    -        F5R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 5 register 2
    -        F5R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 6 register 1
    -        F6R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 6 register 2
    -        F6R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 7 register 1
    -        F7R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 7 register 2
    -        F7R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 8 register 1
    -        F8R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 8 register 2
    -        F8R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 9 register 1
    -        F9R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 9 register 2
    -        F9R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 10 register 1
    -        F10R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 10 register 2
    -        F10R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 11 register 1
    -        F11R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 11 register 2
    -        F11R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 4 register 1
    -        F12R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 12 register 2
    -        F12R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 13 register 1
    -        F13R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 13 register 2
    -        F13R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 14 register 1
    -        F14R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 14 register 2
    -        F14R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 15 register 1
    -        F15R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 15 register 2
    -        F15R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 16 register 1
    -        F16R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 16 register 2
    -        F16R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 17 register 1
    -        F17R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 17 register 2
    -        F17R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 18 register 1
    -        F18R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 18 register 2
    -        F18R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 19 register 1
    -        F19R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 19 register 2
    -        F19R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 20 register 1
    -        F20R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 20 register 2
    -        F20R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 21 register 1
    -        F21R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 21 register 2
    -        F21R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 22 register 1
    -        F22R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 22 register 2
    -        F22R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 23 register 1
    -        F23R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 23 register 2
    -        F23R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 24 register 1
    -        F24R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 24 register 2
    -        F24R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 25 register 1
    -        F25R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 25 register 2
    -        F25R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 26 register 1
    -        F26R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 26 register 2
    -        F26R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 27 register 1
    -        F27R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 27 register 2
    -        F27R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -    };
    -
    -    ///  USB on the go full speed
    -    pub const OTG_FS_PWRCLK = extern struct {
    -        ///  OTG_FS power and clock gating control register
    -        FS_PCGCCTL: mmio.Mmio(packed struct(u32) {
    -            ///  Stop PHY clock
    -            STPPCLK: u1,
    -            ///  Gate HCLK
    -            GATEHCLK: u1,
    -            reserved4: u2,
    -            ///  PHY Suspended
    -            PHYSUSP: u1,
    -            padding: u27,
    -        }),
    -    };
    -
    -    ///  Digital-to-analog converter
    -    pub const DAC = extern struct {
    -        ///  control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 enable
    -            EN1: u1,
    -            ///  DAC channel1 output buffer disable
    -            BOFF1: u1,
    -            ///  DAC channel1 trigger enable
    -            TEN1: u1,
    -            ///  DAC channel1 trigger selection
    -            TSEL1: u3,
    -            ///  DAC channel1 noise/triangle wave generation enable
    -            WAVE1: u2,
    -            ///  DAC channel1 mask/amplitude selector
    -            MAMP1: u4,
    -            ///  DAC channel1 DMA enable
    -            DMAEN1: u1,
    -            ///  DAC channel1 DMA Underrun Interrupt enable
    -            DMAUDRIE1: u1,
    -            reserved16: u2,
    -            ///  DAC channel2 enable
    -            EN2: u1,
    -            ///  DAC channel2 output buffer disable
    -            BOFF2: u1,
    -            ///  DAC channel2 trigger enable
    -            TEN2: u1,
    -            ///  DAC channel2 trigger selection
    -            TSEL2: u3,
    -            ///  DAC channel2 noise/triangle wave generation enable
    -            WAVE2: u2,
    -            ///  DAC channel2 mask/amplitude selector
    -            MAMP2: u4,
    -            ///  DAC channel2 DMA enable
    -            DMAEN2: u1,
    -            ///  DAC channel2 DMA underrun interrupt enable
    -            DMAUDRIE2: u1,
    -            padding: u2,
    -        }),
    -        ///  software trigger register
    -        SWTRIGR: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 software trigger
    -            SWTRIG1: u1,
    -            ///  DAC channel2 software trigger
    -            SWTRIG2: u1,
    -            padding: u30,
    -        }),
    -        ///  channel1 12-bit right-aligned data holding register
    -        DHR12R1: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 12-bit right-aligned data
    -            DACC1DHR: u12,
    -            padding: u20,
    -        }),
    -        ///  channel1 12-bit left aligned data holding register
    -        DHR12L1: mmio.Mmio(packed struct(u32) {
    -            reserved4: u4,
    -            ///  DAC channel1 12-bit left-aligned data
    -            DACC1DHR: u12,
    -            padding: u16,
    -        }),
    -        ///  channel1 8-bit right aligned data holding register
    -        DHR8R1: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 8-bit right-aligned data
    -            DACC1DHR: u8,
    -            padding: u24,
    -        }),
    -        ///  channel2 12-bit right aligned data holding register
    -        DHR12R2: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel2 12-bit right-aligned data
    -            DACC2DHR: u12,
    -            padding: u20,
    -        }),
    -        ///  channel2 12-bit left aligned data holding register
    -        DHR12L2: mmio.Mmio(packed struct(u32) {
    -            reserved4: u4,
    -            ///  DAC channel2 12-bit left-aligned data
    -            DACC2DHR: u12,
    -            padding: u16,
    -        }),
    -        ///  channel2 8-bit right-aligned data holding register
    -        DHR8R2: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel2 8-bit right-aligned data
    -            DACC2DHR: u8,
    -            padding: u24,
    -        }),
    -        ///  Dual DAC 12-bit right-aligned data holding register
    -        DHR12RD: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 12-bit right-aligned data
    -            DACC1DHR: u12,
    -            reserved16: u4,
    -            ///  DAC channel2 12-bit right-aligned data
    -            DACC2DHR: u12,
    -            padding: u4,
    -        }),
    -        ///  DUAL DAC 12-bit left aligned data holding register
    -        DHR12LD: mmio.Mmio(packed struct(u32) {
    -            reserved4: u4,
    -            ///  DAC channel1 12-bit left-aligned data
    -            DACC1DHR: u12,
    -            reserved20: u4,
    -            ///  DAC channel2 12-bit left-aligned data
    -            DACC2DHR: u12,
    -        }),
    -        ///  DUAL DAC 8-bit right aligned data holding register
    -        DHR8RD: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 8-bit right-aligned data
    -            DACC1DHR: u8,
    -            ///  DAC channel2 8-bit right-aligned data
    -            DACC2DHR: u8,
    -            padding: u16,
    -        }),
    -        ///  channel1 data output register
    -        DOR1: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 data output
    -            DACC1DOR: u12,
    -            padding: u20,
    -        }),
    -        ///  channel2 data output register
    -        DOR2: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel2 data output
    -            DACC2DOR: u12,
    -            padding: u20,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            reserved13: u13,
    -            ///  DAC channel1 DMA underrun flag
    -            DMAUDR1: u1,
    -            reserved29: u15,
    -            ///  DAC channel2 DMA underrun flag
    -            DMAUDR2: u1,
    -            padding: u2,
    -        }),
    -    };
    -
    -    ///  Power control
    -    pub const PWR = extern struct {
    -        ///  power control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  Low-power deep sleep
    -            LPDS: u1,
    -            ///  Power down deepsleep
    -            PDDS: u1,
    -            ///  Clear wakeup flag
    -            CWUF: u1,
    -            ///  Clear standby flag
    -            CSBF: u1,
    -            ///  Power voltage detector enable
    -            PVDE: u1,
    -            ///  PVD level selection
    -            PLS: u3,
    -            ///  Disable backup domain write protection
    -            DBP: u1,
    -            ///  Flash power down in Stop mode
    -            FPDS: u1,
    -            padding: u22,
    -        }),
    -        ///  power control/status register
    -        CSR: mmio.Mmio(packed struct(u32) {
    -            ///  Wakeup flag
    -            WUF: u1,
    -            ///  Standby flag
    -            SBF: u1,
    -            ///  PVD output
    -            PVDO: u1,
    -            ///  Backup regulator ready
    -            BRR: u1,
    -            reserved8: u4,
    -            ///  Enable WKUP pin
    -            EWUP: u1,
    -            ///  Backup regulator enable
    -            BRE: u1,
    -            reserved14: u4,
    -            ///  Regulator voltage scaling output selection ready bit
    -            VOSRDY: u1,
    -            padding: u17,
    -        }),
    -    };
    -
    -    ///  Inter-integrated circuit
    -    pub const I2C3 = extern struct {
    -        ///  Control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral enable
    -            PE: u1,
    -            ///  SMBus mode
    -            SMBUS: u1,
    -            reserved3: u1,
    -            ///  SMBus type
    -            SMBTYPE: u1,
    -            ///  ARP enable
    -            ENARP: u1,
    -            ///  PEC enable
    -            ENPEC: u1,
    -            ///  General call enable
    -            ENGC: u1,
    -            ///  Clock stretching disable (Slave mode)
    -            NOSTRETCH: u1,
    -            ///  Start generation
    -            START: u1,
    -            ///  Stop generation
    -            STOP: u1,
    -            ///  Acknowledge enable
    -            ACK: u1,
    -            ///  Acknowledge/PEC Position (for data reception)
    -            POS: u1,
    -            ///  Packet error checking
    -            PEC: u1,
    -            ///  SMBus alert
    -            ALERT: u1,
    -            reserved15: u1,
    -            ///  Software reset
    -            SWRST: u1,
    -            padding: u16,
    -        }),
    -        ///  Control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral clock frequency
    -            FREQ: u6,
    -            reserved8: u2,
    -            ///  Error interrupt enable
    -            ITERREN: u1,
    -            ///  Event interrupt enable
    -            ITEVTEN: u1,
    -            ///  Buffer interrupt enable
    -            ITBUFEN: u1,
    -            ///  DMA requests enable
    -            DMAEN: u1,
    -            ///  DMA last transfer
    -            LAST: u1,
    -            padding: u19,
    -        }),
    -        ///  Own address register 1
    -        OAR1: mmio.Mmio(packed struct(u32) {
    -            ///  Interface address
    -            ADD0: u1,
    -            ///  Interface address
    -            ADD7: u7,
    -            ///  Interface address
    -            ADD10: u2,
    -            reserved15: u5,
    -            ///  Addressing mode (slave mode)
    -            ADDMODE: u1,
    -            padding: u16,
    -        }),
    -        ///  Own address register 2
    -        OAR2: mmio.Mmio(packed struct(u32) {
    -            ///  Dual addressing mode enable
    -            ENDUAL: u1,
    -            ///  Interface address
    -            ADD2: u7,
    -            padding: u24,
    -        }),
    -        ///  Data register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  8-bit data register
    -            DR: u8,
    -            padding: u24,
    -        }),
    -        ///  Status register 1
    -        SR1: mmio.Mmio(packed struct(u32) {
    -            ///  Start bit (Master mode)
    -            SB: u1,
    -            ///  Address sent (master mode)/matched (slave mode)
    -            ADDR: u1,
    -            ///  Byte transfer finished
    -            BTF: u1,
    -            ///  10-bit header sent (Master mode)
    -            ADD10: u1,
    -            ///  Stop detection (slave mode)
    -            STOPF: u1,
    -            reserved6: u1,
    -            ///  Data register not empty (receivers)
    -            RxNE: u1,
    -            ///  Data register empty (transmitters)
    -            TxE: u1,
    -            ///  Bus error
    -            BERR: u1,
    -            ///  Arbitration lost (master mode)
    -            ARLO: u1,
    -            ///  Acknowledge failure
    -            AF: u1,
    -            ///  Overrun/Underrun
    -            OVR: u1,
    -            ///  PEC Error in reception
    -            PECERR: u1,
    -            reserved14: u1,
    -            ///  Timeout or Tlow error
    -            TIMEOUT: u1,
    -            ///  SMBus alert
    -            SMBALERT: u1,
    -            padding: u16,
    -        }),
    -        ///  Status register 2
    -        SR2: mmio.Mmio(packed struct(u32) {
    -            ///  Master/slave
    -            MSL: u1,
    -            ///  Bus busy
    -            BUSY: u1,
    -            ///  Transmitter/receiver
    -            TRA: u1,
    -            reserved4: u1,
    -            ///  General call address (Slave mode)
    -            GENCALL: u1,
    -            ///  SMBus device default address (Slave mode)
    -            SMBDEFAULT: u1,
    -            ///  SMBus host header (Slave mode)
    -            SMBHOST: u1,
    -            ///  Dual flag (Slave mode)
    -            DUALF: u1,
    -            ///  acket error checking register
    -            PEC: u8,
    -            padding: u16,
    -        }),
    -        ///  Clock control register
    -        CCR: mmio.Mmio(packed struct(u32) {
    -            ///  Clock control register in Fast/Standard mode (Master mode)
    -            CCR: u12,
    -            reserved14: u2,
    -            ///  Fast mode duty cycle
    -            DUTY: u1,
    -            ///  I2C master mode selection
    -            F_S: u1,
    -            padding: u16,
    -        }),
    -        ///  TRISE register
    -        TRISE: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum rise time in Fast/Standard mode (Master mode)
    -            TRISE: u6,
    -            padding: u26,
    -        }),
    -    };
    -
    -    ///  USB on the go full speed
    -    pub const OTG_FS_DEVICE = extern struct {
    -        ///  OTG_FS device configuration register (OTG_FS_DCFG)
    -        FS_DCFG: mmio.Mmio(packed struct(u32) {
    -            ///  Device speed
    -            DSPD: u2,
    -            ///  Non-zero-length status OUT handshake
    -            NZLSOHSK: u1,
    -            reserved4: u1,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Periodic frame interval
    -            PFIVL: u2,
    -            padding: u19,
    -        }),
    -        ///  OTG_FS device control register (OTG_FS_DCTL)
    -        FS_DCTL: mmio.Mmio(packed struct(u32) {
    -            ///  Remote wakeup signaling
    -            RWUSIG: u1,
    -            ///  Soft disconnect
    -            SDIS: u1,
    -            ///  Global IN NAK status
    -            GINSTS: u1,
    -            ///  Global OUT NAK status
    -            GONSTS: u1,
    -            ///  Test control
    -            TCTL: u3,
    -            ///  Set global IN NAK
    -            SGINAK: u1,
    -            ///  Clear global IN NAK
    -            CGINAK: u1,
    -            ///  Set global OUT NAK
    -            SGONAK: u1,
    -            ///  Clear global OUT NAK
    -            CGONAK: u1,
    -            ///  Power-on programming done
    -            POPRGDNE: u1,
    -            padding: u20,
    -        }),
    -        ///  OTG_FS device status register (OTG_FS_DSTS)
    -        FS_DSTS: mmio.Mmio(packed struct(u32) {
    -            ///  Suspend status
    -            SUSPSTS: u1,
    -            ///  Enumerated speed
    -            ENUMSPD: u2,
    -            ///  Erratic error
    -            EERR: u1,
    -            reserved8: u4,
    -            ///  Frame number of the received SOF
    -            FNSOF: u14,
    -            padding: u10,
    -        }),
    -        reserved16: [4]u8,
    -        ///  OTG_FS device IN endpoint common interrupt mask register (OTG_FS_DIEPMSK)
    -        FS_DIEPMSK: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt mask
    -            XFRCM: u1,
    -            ///  Endpoint disabled interrupt mask
    -            EPDM: u1,
    -            reserved3: u1,
    -            ///  Timeout condition mask (Non-isochronous endpoints)
    -            TOM: u1,
    -            ///  IN token received when TxFIFO empty mask
    -            ITTXFEMSK: u1,
    -            ///  IN token received with EP mismatch mask
    -            INEPNMM: u1,
    -            ///  IN endpoint NAK effective mask
    -            INEPNEM: u1,
    -            padding: u25,
    -        }),
    -        ///  OTG_FS device OUT endpoint common interrupt mask register (OTG_FS_DOEPMSK)
    -        FS_DOEPMSK: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt mask
    -            XFRCM: u1,
    -            ///  Endpoint disabled interrupt mask
    -            EPDM: u1,
    -            reserved3: u1,
    -            ///  SETUP phase done mask
    -            STUPM: u1,
    -            ///  OUT token received when endpoint disabled mask
    -            OTEPDM: u1,
    -            padding: u27,
    -        }),
    -        ///  OTG_FS device all endpoints interrupt register (OTG_FS_DAINT)
    -        FS_DAINT: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint interrupt bits
    -            IEPINT: u16,
    -            ///  OUT endpoint interrupt bits
    -            OEPINT: u16,
    -        }),
    -        ///  OTG_FS all endpoints interrupt mask register (OTG_FS_DAINTMSK)
    -        FS_DAINTMSK: mmio.Mmio(packed struct(u32) {
    -            ///  IN EP interrupt mask bits
    -            IEPM: u16,
    -            ///  OUT endpoint interrupt bits
    -            OEPINT: u16,
    -        }),
    -        reserved40: [8]u8,
    -        ///  OTG_FS device VBUS discharge time register
    -        DVBUSDIS: mmio.Mmio(packed struct(u32) {
    -            ///  Device VBUS discharge time
    -            VBUSDT: u16,
    -            padding: u16,
    -        }),
    -        ///  OTG_FS device VBUS pulsing time register
    -        DVBUSPULSE: mmio.Mmio(packed struct(u32) {
    -            ///  Device VBUS pulsing time
    -            DVBUSP: u12,
    -            padding: u20,
    -        }),
    -        reserved52: [4]u8,
    -        ///  OTG_FS device IN endpoint FIFO empty interrupt mask register
    -        DIEPEMPMSK: mmio.Mmio(packed struct(u32) {
    -            ///  IN EP Tx FIFO empty interrupt mask bits
    -            INEPTXFEM: u16,
    -            padding: u16,
    -        }),
    -        reserved256: [200]u8,
    -        ///  OTG_FS device control IN endpoint 0 control register (OTG_FS_DIEPCTL0)
    -        FS_DIEPCTL0: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u2,
    -            reserved15: u13,
    -            ///  USB active endpoint
    -            USBAEP: u1,
    -            reserved17: u1,
    -            ///  NAK status
    -            NAKSTS: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  STALL handshake
    -            STALL: u1,
    -            ///  TxFIFO number
    -            TXFNUM: u4,
    -            ///  Clear NAK
    -            CNAK: u1,
    -            ///  Set NAK
    -            SNAK: u1,
    -            reserved30: u2,
    -            ///  Endpoint disable
    -            EPDIS: u1,
    -            ///  Endpoint enable
    -            EPENA: u1,
    -        }),
    -        reserved264: [4]u8,
    -        ///  device endpoint-x interrupt register
    -        DIEPINT0: mmio.Mmio(packed struct(u32) {
    -            ///  XFRC
    -            XFRC: u1,
    -            ///  EPDISD
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  TOC
    -            TOC: u1,
    -            ///  ITTXFE
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  INEPNE
    -            INEPNE: u1,
    -            ///  TXFE
    -            TXFE: u1,
    -            padding: u24,
    -        }),
    -        reserved272: [4]u8,
    -        ///  device endpoint-0 transfer size register
    -        DIEPTSIZ0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u7,
    -            reserved19: u12,
    -            ///  Packet count
    -            PKTCNT: u2,
    -            padding: u11,
    -        }),
    -        reserved280: [4]u8,
    -        ///  OTG_FS device IN endpoint transmit FIFO status register
    -        DTXFSTS0: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint TxFIFO space available
    -            INEPTFSAV: u16,
    -            padding: u16,
    -        }),
    -        reserved288: [4]u8,
    -        ///  OTG device endpoint-1 control register
    -        DIEPCTL1: mmio.Mmio(packed struct(u32) {
    -            ///  MPSIZ
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USBAEP
    -            USBAEP: u1,
    -            ///  EONUM/DPID
    -            EONUM_DPID: u1,
    -            ///  NAKSTS
    -            NAKSTS: u1,
    -            ///  EPTYP
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  Stall
    -            Stall: u1,
    -            ///  TXFNUM
    -            TXFNUM: u4,
    -            ///  CNAK
    -            CNAK: u1,
    -            ///  SNAK
    -            SNAK: u1,
    -            ///  SD0PID/SEVNFRM
    -            SD0PID_SEVNFRM: u1,
    -            ///  SODDFRM/SD1PID
    -            SODDFRM_SD1PID: u1,
    -            ///  EPDIS
    -            EPDIS: u1,
    -            ///  EPENA
    -            EPENA: u1,
    -        }),
    -        reserved296: [4]u8,
    -        ///  device endpoint-1 interrupt register
    -        DIEPINT1: mmio.Mmio(packed struct(u32) {
    -            ///  XFRC
    -            XFRC: u1,
    -            ///  EPDISD
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  TOC
    -            TOC: u1,
    -            ///  ITTXFE
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  INEPNE
    -            INEPNE: u1,
    -            ///  TXFE
    -            TXFE: u1,
    -            padding: u24,
    -        }),
    -        reserved304: [4]u8,
    -        ///  device endpoint-1 transfer size register
    -        DIEPTSIZ1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Multi count
    -            MCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved312: [4]u8,
    -        ///  OTG_FS device IN endpoint transmit FIFO status register
    -        DTXFSTS1: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint TxFIFO space available
    -            INEPTFSAV: u16,
    -            padding: u16,
    -        }),
    -        reserved320: [4]u8,
    -        ///  OTG device endpoint-2 control register
    -        DIEPCTL2: mmio.Mmio(packed struct(u32) {
    -            ///  MPSIZ
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USBAEP
    -            USBAEP: u1,
    -            ///  EONUM/DPID
    -            EONUM_DPID: u1,
    -            ///  NAKSTS
    -            NAKSTS: u1,
    -            ///  EPTYP
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  Stall
    -            Stall: u1,
    -            ///  TXFNUM
    -            TXFNUM: u4,
    -            ///  CNAK
    -            CNAK: u1,
    -            ///  SNAK
    -            SNAK: u1,
    -            ///  SD0PID/SEVNFRM
    -            SD0PID_SEVNFRM: u1,
    -            ///  SODDFRM
    -            SODDFRM: u1,
    -            ///  EPDIS
    -            EPDIS: u1,
    -            ///  EPENA
    -            EPENA: u1,
    -        }),
    -        reserved328: [4]u8,
    -        ///  device endpoint-2 interrupt register
    -        DIEPINT2: mmio.Mmio(packed struct(u32) {
    -            ///  XFRC
    -            XFRC: u1,
    -            ///  EPDISD
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  TOC
    -            TOC: u1,
    -            ///  ITTXFE
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  INEPNE
    -            INEPNE: u1,
    -            ///  TXFE
    -            TXFE: u1,
    -            padding: u24,
    -        }),
    -        reserved336: [4]u8,
    -        ///  device endpoint-2 transfer size register
    -        DIEPTSIZ2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Multi count
    -            MCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved344: [4]u8,
    -        ///  OTG_FS device IN endpoint transmit FIFO status register
    -        DTXFSTS2: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint TxFIFO space available
    -            INEPTFSAV: u16,
    -            padding: u16,
    -        }),
    -        reserved352: [4]u8,
    -        ///  OTG device endpoint-3 control register
    -        DIEPCTL3: mmio.Mmio(packed struct(u32) {
    -            ///  MPSIZ
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USBAEP
    -            USBAEP: u1,
    -            ///  EONUM/DPID
    -            EONUM_DPID: u1,
    -            ///  NAKSTS
    -            NAKSTS: u1,
    -            ///  EPTYP
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  Stall
    -            Stall: u1,
    -            ///  TXFNUM
    -            TXFNUM: u4,
    -            ///  CNAK
    -            CNAK: u1,
    -            ///  SNAK
    -            SNAK: u1,
    -            ///  SD0PID/SEVNFRM
    -            SD0PID_SEVNFRM: u1,
    -            ///  SODDFRM
    -            SODDFRM: u1,
    -            ///  EPDIS
    -            EPDIS: u1,
    -            ///  EPENA
    -            EPENA: u1,
    -        }),
    -        reserved360: [4]u8,
    -        ///  device endpoint-3 interrupt register
    -        DIEPINT3: mmio.Mmio(packed struct(u32) {
    -            ///  XFRC
    -            XFRC: u1,
    -            ///  EPDISD
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  TOC
    -            TOC: u1,
    -            ///  ITTXFE
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  INEPNE
    -            INEPNE: u1,
    -            ///  TXFE
    -            TXFE: u1,
    -            padding: u24,
    -        }),
    -        reserved368: [4]u8,
    -        ///  device endpoint-3 transfer size register
    -        DIEPTSIZ3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Multi count
    -            MCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved376: [4]u8,
    -        ///  OTG_FS device IN endpoint transmit FIFO status register
    -        DTXFSTS3: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint TxFIFO space available
    -            INEPTFSAV: u16,
    -            padding: u16,
    -        }),
    -        reserved768: [388]u8,
    -        ///  device endpoint-0 control register
    -        DOEPCTL0: mmio.Mmio(packed struct(u32) {
    -            ///  MPSIZ
    -            MPSIZ: u2,
    -            reserved15: u13,
    -            ///  USBAEP
    -            USBAEP: u1,
    -            reserved17: u1,
    -            ///  NAKSTS
    -            NAKSTS: u1,
    -            ///  EPTYP
    -            EPTYP: u2,
    -            ///  SNPM
    -            SNPM: u1,
    -            ///  Stall
    -            Stall: u1,
    -            reserved26: u4,
    -            ///  CNAK
    -            CNAK: u1,
    -            ///  SNAK
    -            SNAK: u1,
    -            reserved30: u2,
    -            ///  EPDIS
    -            EPDIS: u1,
    -            ///  EPENA
    -            EPENA: u1,
    -        }),
    -        reserved776: [4]u8,
    -        ///  device endpoint-0 interrupt register
    -        DOEPINT0: mmio.Mmio(packed struct(u32) {
    -            ///  XFRC
    -            XFRC: u1,
    -            ///  EPDISD
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  STUP
    -            STUP: u1,
    -            ///  OTEPDIS
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  B2BSTUP
    -            B2BSTUP: u1,
    -            padding: u25,
    -        }),
    -        reserved784: [4]u8,
    -        ///  device OUT endpoint-0 transfer size register
    -        DOEPTSIZ0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u7,
    -            reserved19: u12,
    -            ///  Packet count
    -            PKTCNT: u1,
    -            reserved29: u9,
    -            ///  SETUP packet count
    -            STUPCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved800: [12]u8,
    -        ///  device endpoint-1 control register
    -        DOEPCTL1: mmio.Mmio(packed struct(u32) {
    -            ///  MPSIZ
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USBAEP
    -            USBAEP: u1,
    -            ///  EONUM/DPID
    -            EONUM_DPID: u1,
    -            ///  NAKSTS
    -            NAKSTS: u1,
    -            ///  EPTYP
    -            EPTYP: u2,
    -            ///  SNPM
    -            SNPM: u1,
    -            ///  Stall
    -            Stall: u1,
    -            reserved26: u4,
    -            ///  CNAK
    -            CNAK: u1,
    -            ///  SNAK
    -            SNAK: u1,
    -            ///  SD0PID/SEVNFRM
    -            SD0PID_SEVNFRM: u1,
    -            ///  SODDFRM
    -            SODDFRM: u1,
    -            ///  EPDIS
    -            EPDIS: u1,
    -            ///  EPENA
    -            EPENA: u1,
    -        }),
    -        reserved808: [4]u8,
    -        ///  device endpoint-1 interrupt register
    -        DOEPINT1: mmio.Mmio(packed struct(u32) {
    -            ///  XFRC
    -            XFRC: u1,
    -            ///  EPDISD
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  STUP
    -            STUP: u1,
    -            ///  OTEPDIS
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  B2BSTUP
    -            B2BSTUP: u1,
    -            padding: u25,
    -        }),
    -        reserved816: [4]u8,
    -        ///  device OUT endpoint-1 transfer size register
    -        DOEPTSIZ1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Received data PID/SETUP packet count
    -            RXDPID_STUPCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved832: [12]u8,
    -        ///  device endpoint-2 control register
    -        DOEPCTL2: mmio.Mmio(packed struct(u32) {
    -            ///  MPSIZ
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USBAEP
    -            USBAEP: u1,
    -            ///  EONUM/DPID
    -            EONUM_DPID: u1,
    -            ///  NAKSTS
    -            NAKSTS: u1,
    -            ///  EPTYP
    -            EPTYP: u2,
    -            ///  SNPM
    -            SNPM: u1,
    -            ///  Stall
    -            Stall: u1,
    -            reserved26: u4,
    -            ///  CNAK
    -            CNAK: u1,
    -            ///  SNAK
    -            SNAK: u1,
    -            ///  SD0PID/SEVNFRM
    -            SD0PID_SEVNFRM: u1,
    -            ///  SODDFRM
    -            SODDFRM: u1,
    -            ///  EPDIS
    -            EPDIS: u1,
    -            ///  EPENA
    -            EPENA: u1,
    -        }),
    -        reserved840: [4]u8,
    -        ///  device endpoint-2 interrupt register
    -        DOEPINT2: mmio.Mmio(packed struct(u32) {
    -            ///  XFRC
    -            XFRC: u1,
    -            ///  EPDISD
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  STUP
    -            STUP: u1,
    -            ///  OTEPDIS
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  B2BSTUP
    -            B2BSTUP: u1,
    -            padding: u25,
    -        }),
    -        reserved848: [4]u8,
    -        ///  device OUT endpoint-2 transfer size register
    -        DOEPTSIZ2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Received data PID/SETUP packet count
    -            RXDPID_STUPCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved864: [12]u8,
    -        ///  device endpoint-3 control register
    -        DOEPCTL3: mmio.Mmio(packed struct(u32) {
    -            ///  MPSIZ
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USBAEP
    -            USBAEP: u1,
    -            ///  EONUM/DPID
    -            EONUM_DPID: u1,
    -            ///  NAKSTS
    -            NAKSTS: u1,
    -            ///  EPTYP
    -            EPTYP: u2,
    -            ///  SNPM
    -            SNPM: u1,
    -            ///  Stall
    -            Stall: u1,
    -            reserved26: u4,
    -            ///  CNAK
    -            CNAK: u1,
    -            ///  SNAK
    -            SNAK: u1,
    -            ///  SD0PID/SEVNFRM
    -            SD0PID_SEVNFRM: u1,
    -            ///  SODDFRM
    -            SODDFRM: u1,
    -            ///  EPDIS
    -            EPDIS: u1,
    -            ///  EPENA
    -            EPENA: u1,
    -        }),
    -        reserved872: [4]u8,
    -        ///  device endpoint-3 interrupt register
    -        DOEPINT3: mmio.Mmio(packed struct(u32) {
    -            ///  XFRC
    -            XFRC: u1,
    -            ///  EPDISD
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  STUP
    -            STUP: u1,
    -            ///  OTEPDIS
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  B2BSTUP
    -            B2BSTUP: u1,
    -            padding: u25,
    -        }),
    -        reserved880: [4]u8,
    -        ///  device OUT endpoint-3 transfer size register
    -        DOEPTSIZ3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Received data PID/SETUP packet count
    -            RXDPID_STUPCNT: u2,
    -            padding: u1,
    -        }),
    -    };
    -
    -    ///  USB on the go full speed
    -    pub const OTG_FS_HOST = extern struct {
    -        ///  OTG_FS host configuration register (OTG_FS_HCFG)
    -        FS_HCFG: mmio.Mmio(packed struct(u32) {
    -            ///  FS/LS PHY clock select
    -            FSLSPCS: u2,
    -            ///  FS- and LS-only support
    -            FSLSS: u1,
    -            padding: u29,
    -        }),
    -        ///  OTG_FS Host frame interval register
    -        HFIR: mmio.Mmio(packed struct(u32) {
    -            ///  Frame interval
    -            FRIVL: u16,
    -            padding: u16,
    -        }),
    -        ///  OTG_FS host frame number/frame time remaining register (OTG_FS_HFNUM)
    -        FS_HFNUM: mmio.Mmio(packed struct(u32) {
    -            ///  Frame number
    -            FRNUM: u16,
    -            ///  Frame time remaining
    -            FTREM: u16,
    -        }),
    -        reserved16: [4]u8,
    -        ///  OTG_FS_Host periodic transmit FIFO/queue status register (OTG_FS_HPTXSTS)
    -        FS_HPTXSTS: mmio.Mmio(packed struct(u32) {
    -            ///  Periodic transmit data FIFO space available
    -            PTXFSAVL: u16,
    -            ///  Periodic transmit request queue space available
    -            PTXQSAV: u8,
    -            ///  Top of the periodic transmit request queue
    -            PTXQTOP: u8,
    -        }),
    -        ///  OTG_FS Host all channels interrupt register
    -        HAINT: mmio.Mmio(packed struct(u32) {
    -            ///  Channel interrupts
    -            HAINT: u16,
    -            padding: u16,
    -        }),
    -        ///  OTG_FS host all channels interrupt mask register
    -        HAINTMSK: mmio.Mmio(packed struct(u32) {
    -            ///  Channel interrupt mask
    -            HAINTM: u16,
    -            padding: u16,
    -        }),
    -        reserved64: [36]u8,
    -        ///  OTG_FS host port control and status register (OTG_FS_HPRT)
    -        FS_HPRT: mmio.Mmio(packed struct(u32) {
    -            ///  Port connect status
    -            PCSTS: u1,
    -            ///  Port connect detected
    -            PCDET: u1,
    -            ///  Port enable
    -            PENA: u1,
    -            ///  Port enable/disable change
    -            PENCHNG: u1,
    -            ///  Port overcurrent active
    -            POCA: u1,
    -            ///  Port overcurrent change
    -            POCCHNG: u1,
    -            ///  Port resume
    -            PRES: u1,
    -            ///  Port suspend
    -            PSUSP: u1,
    -            ///  Port reset
    -            PRST: u1,
    -            reserved10: u1,
    -            ///  Port line status
    -            PLSTS: u2,
    -            ///  Port power
    -            PPWR: u1,
    -            ///  Port test control
    -            PTCTL: u4,
    -            ///  Port speed
    -            PSPD: u2,
    -            padding: u13,
    -        }),
    -        reserved256: [188]u8,
    -        ///  OTG_FS host channel-0 characteristics register (OTG_FS_HCCHAR0)
    -        FS_HCCHAR0: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multicount
    -            MCNT: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        reserved264: [4]u8,
    -        ///  OTG_FS host channel-0 interrupt register (OTG_FS_HCINT0)
    -        FS_HCINT0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            reserved7: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-0 mask register (OTG_FS_HCINTMSK0)
    -        FS_HCINTMSK0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-0 transfer size register
    -        FS_HCTSIZ0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        reserved288: [12]u8,
    -        ///  OTG_FS host channel-1 characteristics register (OTG_FS_HCCHAR1)
    -        FS_HCCHAR1: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multicount
    -            MCNT: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        reserved296: [4]u8,
    -        ///  OTG_FS host channel-1 interrupt register (OTG_FS_HCINT1)
    -        FS_HCINT1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            reserved7: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-1 mask register (OTG_FS_HCINTMSK1)
    -        FS_HCINTMSK1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-1 transfer size register
    -        FS_HCTSIZ1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        reserved320: [12]u8,
    -        ///  OTG_FS host channel-2 characteristics register (OTG_FS_HCCHAR2)
    -        FS_HCCHAR2: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multicount
    -            MCNT: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        reserved328: [4]u8,
    -        ///  OTG_FS host channel-2 interrupt register (OTG_FS_HCINT2)
    -        FS_HCINT2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            reserved7: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-2 mask register (OTG_FS_HCINTMSK2)
    -        FS_HCINTMSK2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-2 transfer size register
    -        FS_HCTSIZ2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        reserved352: [12]u8,
    -        ///  OTG_FS host channel-3 characteristics register (OTG_FS_HCCHAR3)
    -        FS_HCCHAR3: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multicount
    -            MCNT: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        reserved360: [4]u8,
    -        ///  OTG_FS host channel-3 interrupt register (OTG_FS_HCINT3)
    -        FS_HCINT3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            reserved7: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-3 mask register (OTG_FS_HCINTMSK3)
    -        FS_HCINTMSK3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-3 transfer size register
    -        FS_HCTSIZ3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        reserved384: [12]u8,
    -        ///  OTG_FS host channel-4 characteristics register (OTG_FS_HCCHAR4)
    -        FS_HCCHAR4: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multicount
    -            MCNT: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        reserved392: [4]u8,
    -        ///  OTG_FS host channel-4 interrupt register (OTG_FS_HCINT4)
    -        FS_HCINT4: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            reserved7: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-4 mask register (OTG_FS_HCINTMSK4)
    -        FS_HCINTMSK4: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-x transfer size register
    -        FS_HCTSIZ4: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        reserved416: [12]u8,
    -        ///  OTG_FS host channel-5 characteristics register (OTG_FS_HCCHAR5)
    -        FS_HCCHAR5: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multicount
    -            MCNT: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        reserved424: [4]u8,
    -        ///  OTG_FS host channel-5 interrupt register (OTG_FS_HCINT5)
    -        FS_HCINT5: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            reserved7: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-5 mask register (OTG_FS_HCINTMSK5)
    -        FS_HCINTMSK5: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-5 transfer size register
    -        FS_HCTSIZ5: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        reserved448: [12]u8,
    -        ///  OTG_FS host channel-6 characteristics register (OTG_FS_HCCHAR6)
    -        FS_HCCHAR6: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multicount
    -            MCNT: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        reserved456: [4]u8,
    -        ///  OTG_FS host channel-6 interrupt register (OTG_FS_HCINT6)
    -        FS_HCINT6: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            reserved7: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-6 mask register (OTG_FS_HCINTMSK6)
    -        FS_HCINTMSK6: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-6 transfer size register
    -        FS_HCTSIZ6: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        reserved480: [12]u8,
    -        ///  OTG_FS host channel-7 characteristics register (OTG_FS_HCCHAR7)
    -        FS_HCCHAR7: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multicount
    -            MCNT: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        reserved488: [4]u8,
    -        ///  OTG_FS host channel-7 interrupt register (OTG_FS_HCINT7)
    -        FS_HCINT7: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            reserved7: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-7 mask register (OTG_FS_HCINTMSK7)
    -        FS_HCINTMSK7: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-7 transfer size register
    -        FS_HCTSIZ7: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -    };
    -
    -    ///  Independent watchdog
    -    pub const IWDG = extern struct {
    -        ///  Key register
    -        KR: mmio.Mmio(packed struct(u32) {
    -            ///  Key value (write only, read 0000h)
    -            KEY: u16,
    -            padding: u16,
    -        }),
    -        ///  Prescaler register
    -        PR: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler divider
    -            PR: u3,
    -            padding: u29,
    -        }),
    -        ///  Reload register
    -        RLR: mmio.Mmio(packed struct(u32) {
    -            ///  Watchdog counter reload value
    -            RL: u12,
    -            padding: u20,
    -        }),
    -        ///  Status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Watchdog prescaler value update
    -            PVU: u1,
    -            ///  Watchdog counter reload value update
    -            RVU: u1,
    -            padding: u30,
    -        }),
    -    };
    -
    -    ///  Window watchdog
    -    pub const WWDG = extern struct {
    -        ///  Control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  7-bit counter (MSB to LSB)
    -            T: u7,
    -            ///  Activation bit
    -            WDGA: u1,
    -            padding: u24,
    -        }),
    -        ///  Configuration register
    -        CFR: mmio.Mmio(packed struct(u32) {
    -            ///  7-bit window value
    -            W: u7,
    -            ///  Timer base
    -            WDGTB0: u1,
    -            ///  Timer base
    -            WDGTB1: u1,
    -            ///  Early wakeup interrupt
    -            EWI: u1,
    -            padding: u22,
    -        }),
    -        ///  Status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Early wakeup interrupt flag
    -            EWIF: u1,
    -            padding: u31,
    -        }),
    -    };
    -
    -    ///  Real-time clock
    -    pub const RTC = extern struct {
    -        ///  time register
    -        TR: mmio.Mmio(packed struct(u32) {
    -            ///  Second units in BCD format
    -            SU: u4,
    -            ///  Second tens in BCD format
    -            ST: u3,
    -            reserved8: u1,
    -            ///  Minute units in BCD format
    -            MNU: u4,
    -            ///  Minute tens in BCD format
    -            MNT: u3,
    -            reserved16: u1,
    -            ///  Hour units in BCD format
    -            HU: u4,
    -            ///  Hour tens in BCD format
    -            HT: u2,
    -            ///  AM/PM notation
    -            PM: u1,
    -            padding: u9,
    -        }),
    -        ///  date register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  Date units in BCD format
    -            DU: u4,
    -            ///  Date tens in BCD format
    -            DT: u2,
    -            reserved8: u2,
    -            ///  Month units in BCD format
    -            MU: u4,
    -            ///  Month tens in BCD format
    -            MT: u1,
    -            ///  Week day units
    -            WDU: u3,
    -            ///  Year units in BCD format
    -            YU: u4,
    -            ///  Year tens in BCD format
    -            YT: u4,
    -            padding: u8,
    -        }),
    -        ///  control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  Wakeup clock selection
    -            WCKSEL: u3,
    -            ///  Time-stamp event active edge
    -            TSEDGE: u1,
    -            ///  Reference clock detection enable (50 or 60 Hz)
    -            REFCKON: u1,
    -            reserved6: u1,
    -            ///  Hour format
    -            FMT: u1,
    -            ///  Coarse digital calibration enable
    -            DCE: u1,
    -            ///  Alarm A enable
    -            ALRAE: u1,
    -            ///  Alarm B enable
    -            ALRBE: u1,
    -            ///  Wakeup timer enable
    -            WUTE: u1,
    -            ///  Time stamp enable
    -            TSE: u1,
    -            ///  Alarm A interrupt enable
    -            ALRAIE: u1,
    -            ///  Alarm B interrupt enable
    -            ALRBIE: u1,
    -            ///  Wakeup timer interrupt enable
    -            WUTIE: u1,
    -            ///  Time-stamp interrupt enable
    -            TSIE: u1,
    -            ///  Add 1 hour (summer time change)
    -            ADD1H: u1,
    -            ///  Subtract 1 hour (winter time change)
    -            SUB1H: u1,
    -            ///  Backup
    -            BKP: u1,
    -            reserved20: u1,
    -            ///  Output polarity
    -            POL: u1,
    -            ///  Output selection
    -            OSEL: u2,
    -            ///  Calibration output enable
    -            COE: u1,
    -            padding: u8,
    -        }),
    -        ///  initialization and status register
    -        ISR: mmio.Mmio(packed struct(u32) {
    -            ///  Alarm A write flag
    -            ALRAWF: u1,
    -            ///  Alarm B write flag
    -            ALRBWF: u1,
    -            ///  Wakeup timer write flag
    -            WUTWF: u1,
    -            ///  Shift operation pending
    -            SHPF: u1,
    -            ///  Initialization status flag
    -            INITS: u1,
    -            ///  Registers synchronization flag
    -            RSF: u1,
    -            ///  Initialization flag
    -            INITF: u1,
    -            ///  Initialization mode
    -            INIT: u1,
    -            ///  Alarm A flag
    -            ALRAF: u1,
    -            ///  Alarm B flag
    -            ALRBF: u1,
    -            ///  Wakeup timer flag
    -            WUTF: u1,
    -            ///  Time-stamp flag
    -            TSF: u1,
    -            ///  Time-stamp overflow flag
    -            TSOVF: u1,
    -            ///  Tamper detection flag
    -            TAMP1F: u1,
    -            ///  TAMPER2 detection flag
    -            TAMP2F: u1,
    -            reserved16: u1,
    -            ///  Recalibration pending Flag
    -            RECALPF: u1,
    -            padding: u15,
    -        }),
    -        ///  prescaler register
    -        PRER: mmio.Mmio(packed struct(u32) {
    -            ///  Synchronous prescaler factor
    -            PREDIV_S: u15,
    -            reserved16: u1,
    -            ///  Asynchronous prescaler factor
    -            PREDIV_A: u7,
    -            padding: u9,
    -        }),
    -        ///  wakeup timer register
    -        WUTR: mmio.Mmio(packed struct(u32) {
    -            ///  Wakeup auto-reload value bits
    -            WUT: u16,
    -            padding: u16,
    -        }),
    -        ///  calibration register
    -        CALIBR: mmio.Mmio(packed struct(u32) {
    -            ///  Digital calibration
    -            DC: u5,
    -            reserved7: u2,
    -            ///  Digital calibration sign
    -            DCS: u1,
    -            padding: u24,
    -        }),
    -        ///  alarm A register
    -        ALRMAR: mmio.Mmio(packed struct(u32) {
    -            ///  Second units in BCD format
    -            SU: u4,
    -            ///  Second tens in BCD format
    -            ST: u3,
    -            ///  Alarm A seconds mask
    -            MSK1: u1,
    -            ///  Minute units in BCD format
    -            MNU: u4,
    -            ///  Minute tens in BCD format
    -            MNT: u3,
    -            ///  Alarm A minutes mask
    -            MSK2: u1,
    -            ///  Hour units in BCD format
    -            HU: u4,
    -            ///  Hour tens in BCD format
    -            HT: u2,
    -            ///  AM/PM notation
    -            PM: u1,
    -            ///  Alarm A hours mask
    -            MSK3: u1,
    -            ///  Date units or day in BCD format
    -            DU: u4,
    -            ///  Date tens in BCD format
    -            DT: u2,
    -            ///  Week day selection
    -            WDSEL: u1,
    -            ///  Alarm A date mask
    -            MSK4: u1,
    -        }),
    -        ///  alarm B register
    -        ALRMBR: mmio.Mmio(packed struct(u32) {
    -            ///  Second units in BCD format
    -            SU: u4,
    -            ///  Second tens in BCD format
    -            ST: u3,
    -            ///  Alarm B seconds mask
    -            MSK1: u1,
    -            ///  Minute units in BCD format
    -            MNU: u4,
    -            ///  Minute tens in BCD format
    -            MNT: u3,
    -            ///  Alarm B minutes mask
    -            MSK2: u1,
    -            ///  Hour units in BCD format
    -            HU: u4,
    -            ///  Hour tens in BCD format
    -            HT: u2,
    -            ///  AM/PM notation
    -            PM: u1,
    -            ///  Alarm B hours mask
    -            MSK3: u1,
    -            ///  Date units or day in BCD format
    -            DU: u4,
    -            ///  Date tens in BCD format
    -            DT: u2,
    -            ///  Week day selection
    -            WDSEL: u1,
    -            ///  Alarm B date mask
    -            MSK4: u1,
    -        }),
    -        ///  write protection register
    -        WPR: mmio.Mmio(packed struct(u32) {
    -            ///  Write protection key
    -            KEY: u8,
    -            padding: u24,
    -        }),
    -        ///  sub second register
    -        SSR: mmio.Mmio(packed struct(u32) {
    -            ///  Sub second value
    -            SS: u16,
    -            padding: u16,
    -        }),
    -        ///  shift control register
    -        SHIFTR: mmio.Mmio(packed struct(u32) {
    -            ///  Subtract a fraction of a second
    -            SUBFS: u15,
    -            reserved31: u16,
    -            ///  Add one second
    -            ADD1S: u1,
    -        }),
    -        ///  time stamp time register
    -        TSTR: mmio.Mmio(packed struct(u32) {
    -            ///  Tamper 1 detection enable
    -            TAMP1E: u1,
    -            ///  Active level for tamper 1
    -            TAMP1TRG: u1,
    -            ///  Tamper interrupt enable
    -            TAMPIE: u1,
    -            reserved16: u13,
    -            ///  TAMPER1 mapping
    -            TAMP1INSEL: u1,
    -            ///  TIMESTAMP mapping
    -            TSINSEL: u1,
    -            ///  AFO_ALARM output type
    -            ALARMOUTTYPE: u1,
    -            padding: u13,
    -        }),
    -        ///  time stamp date register
    -        TSDR: mmio.Mmio(packed struct(u32) {
    -            ///  Date units in BCD format
    -            DU: u4,
    -            ///  Date tens in BCD format
    -            DT: u2,
    -            reserved8: u2,
    -            ///  Month units in BCD format
    -            MU: u4,
    -            ///  Month tens in BCD format
    -            MT: u1,
    -            ///  Week day units
    -            WDU: u3,
    -            padding: u16,
    -        }),
    -        ///  timestamp sub second register
    -        TSSSR: mmio.Mmio(packed struct(u32) {
    -            ///  Sub second value
    -            SS: u16,
    -            padding: u16,
    -        }),
    -        ///  calibration register
    -        CALR: mmio.Mmio(packed struct(u32) {
    -            ///  Calibration minus
    -            CALM: u9,
    -            reserved13: u4,
    -            ///  Use a 16-second calibration cycle period
    -            CALW16: u1,
    -            ///  Use an 8-second calibration cycle period
    -            CALW8: u1,
    -            ///  Increase frequency of RTC by 488.5 ppm
    -            CALP: u1,
    -            padding: u16,
    -        }),
    -        ///  tamper and alternate function configuration register
    -        TAFCR: mmio.Mmio(packed struct(u32) {
    -            ///  Tamper 1 detection enable
    -            TAMP1E: u1,
    -            ///  Active level for tamper 1
    -            TAMP1TRG: u1,
    -            ///  Tamper interrupt enable
    -            TAMPIE: u1,
    -            ///  Tamper 2 detection enable
    -            TAMP2E: u1,
    -            ///  Active level for tamper 2
    -            TAMP2TRG: u1,
    -            reserved7: u2,
    -            ///  Activate timestamp on tamper detection event
    -            TAMPTS: u1,
    -            ///  Tamper sampling frequency
    -            TAMPFREQ: u3,
    -            ///  Tamper filter count
    -            TAMPFLT: u2,
    -            ///  Tamper precharge duration
    -            TAMPPRCH: u2,
    -            ///  TAMPER pull-up disable
    -            TAMPPUDIS: u1,
    -            ///  TAMPER1 mapping
    -            TAMP1INSEL: u1,
    -            ///  TIMESTAMP mapping
    -            TSINSEL: u1,
    -            ///  AFO_ALARM output type
    -            ALARMOUTTYPE: u1,
    -            padding: u13,
    -        }),
    -        ///  alarm A sub second register
    -        ALRMASSR: mmio.Mmio(packed struct(u32) {
    -            ///  Sub seconds value
    -            SS: u15,
    -            reserved24: u9,
    -            ///  Mask the most-significant bits starting at this bit
    -            MASKSS: u4,
    -            padding: u4,
    -        }),
    -        ///  alarm B sub second register
    -        ALRMBSSR: mmio.Mmio(packed struct(u32) {
    -            ///  Sub seconds value
    -            SS: u15,
    -            reserved24: u9,
    -            ///  Mask the most-significant bits starting at this bit
    -            MASKSS: u4,
    -            padding: u4,
    -        }),
    -        reserved80: [4]u8,
    -        ///  backup register
    -        BKP0R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP1R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP2R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP3R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP4R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP5R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP6R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP7R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP8R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP9R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP10R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP11R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP12R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP13R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP14R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP15R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP16R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP17R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP18R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP19R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -    };
    -
    -    ///  Universal synchronous asynchronous receiver transmitter
    -    pub const UART4 = extern struct {
    -        ///  Status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Parity error
    -            PE: u1,
    -            ///  Framing error
    -            FE: u1,
    -            ///  Noise detected flag
    -            NF: u1,
    -            ///  Overrun error
    -            ORE: u1,
    -            ///  IDLE line detected
    -            IDLE: u1,
    -            ///  Read data register not empty
    -            RXNE: u1,
    -            ///  Transmission complete
    -            TC: u1,
    -            ///  Transmit data register empty
    -            TXE: u1,
    -            ///  LIN break detection flag
    -            LBD: u1,
    -            padding: u23,
    -        }),
    -        ///  Data register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  Data value
    -            DR: u9,
    -            padding: u23,
    -        }),
    -        ///  Baud rate register
    -        BRR: mmio.Mmio(packed struct(u32) {
    -            ///  fraction of USARTDIV
    -            DIV_Fraction: u4,
    -            ///  mantissa of USARTDIV
    -            DIV_Mantissa: u12,
    -            padding: u16,
    -        }),
    -        ///  Control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Send break
    -            SBK: u1,
    -            ///  Receiver wakeup
    -            RWU: u1,
    -            ///  Receiver enable
    -            RE: u1,
    -            ///  Transmitter enable
    -            TE: u1,
    -            ///  IDLE interrupt enable
    -            IDLEIE: u1,
    -            ///  RXNE interrupt enable
    -            RXNEIE: u1,
    -            ///  Transmission complete interrupt enable
    -            TCIE: u1,
    -            ///  TXE interrupt enable
    -            TXEIE: u1,
    -            ///  PE interrupt enable
    -            PEIE: u1,
    -            ///  Parity selection
    -            PS: u1,
    -            ///  Parity control enable
    -            PCE: u1,
    -            ///  Wakeup method
    -            WAKE: u1,
    -            ///  Word length
    -            M: u1,
    -            ///  USART enable
    -            UE: u1,
    -            reserved15: u1,
    -            ///  Oversampling mode
    -            OVER8: u1,
    -            padding: u16,
    -        }),
    -        ///  Control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            ///  Address of the USART node
    -            ADD: u4,
    -            reserved5: u1,
    -            ///  lin break detection length
    -            LBDL: u1,
    -            ///  LIN break detection interrupt enable
    -            LBDIE: u1,
    -            reserved12: u5,
    -            ///  STOP bits
    -            STOP: u2,
    -            ///  LIN mode enable
    -            LINEN: u1,
    -            padding: u17,
    -        }),
    -        ///  Control register 3
    -        CR3: mmio.Mmio(packed struct(u32) {
    -            ///  Error interrupt enable
    -            EIE: u1,
    -            ///  IrDA mode enable
    -            IREN: u1,
    -            ///  IrDA low-power
    -            IRLP: u1,
    -            ///  Half-duplex selection
    -            HDSEL: u1,
    -            reserved6: u2,
    -            ///  DMA enable receiver
    -            DMAR: u1,
    -            ///  DMA enable transmitter
    -            DMAT: u1,
    -            reserved11: u3,
    -            ///  One sample bit method enable
    -            ONEBIT: u1,
    -            padding: u20,
    -        }),
    -    };
    -
    -    ///  USB on the go full speed
    -    pub const OTG_FS_GLOBAL = extern struct {
    -        ///  OTG_FS control and status register (OTG_FS_GOTGCTL)
    -        FS_GOTGCTL: mmio.Mmio(packed struct(u32) {
    -            ///  Session request success
    -            SRQSCS: u1,
    -            ///  Session request
    -            SRQ: u1,
    -            reserved8: u6,
    -            ///  Host negotiation success
    -            HNGSCS: u1,
    -            ///  HNP request
    -            HNPRQ: u1,
    -            ///  Host set HNP enable
    -            HSHNPEN: u1,
    -            ///  Device HNP enabled
    -            DHNPEN: u1,
    -            reserved16: u4,
    -            ///  Connector ID status
    -            CIDSTS: u1,
    -            ///  Long/short debounce time
    -            DBCT: u1,
    -            ///  A-session valid
    -            ASVLD: u1,
    -            ///  B-session valid
    -            BSVLD: u1,
    -            padding: u12,
    -        }),
    -        ///  OTG_FS interrupt register (OTG_FS_GOTGINT)
    -        FS_GOTGINT: mmio.Mmio(packed struct(u32) {
    -            reserved2: u2,
    -            ///  Session end detected
    -            SEDET: u1,
    -            reserved8: u5,
    -            ///  Session request success status change
    -            SRSSCHG: u1,
    -            ///  Host negotiation success status change
    -            HNSSCHG: u1,
    -            reserved17: u7,
    -            ///  Host negotiation detected
    -            HNGDET: u1,
    -            ///  A-device timeout change
    -            ADTOCHG: u1,
    -            ///  Debounce done
    -            DBCDNE: u1,
    -            padding: u12,
    -        }),
    -        ///  OTG_FS AHB configuration register (OTG_FS_GAHBCFG)
    -        FS_GAHBCFG: mmio.Mmio(packed struct(u32) {
    -            ///  Global interrupt mask
    -            GINT: u1,
    -            reserved7: u6,
    -            ///  TxFIFO empty level
    -            TXFELVL: u1,
    -            ///  Periodic TxFIFO empty level
    -            PTXFELVL: u1,
    -            padding: u23,
    -        }),
    -        ///  OTG_FS USB configuration register (OTG_FS_GUSBCFG)
    -        FS_GUSBCFG: mmio.Mmio(packed struct(u32) {
    -            ///  FS timeout calibration
    -            TOCAL: u3,
    -            reserved6: u3,
    -            ///  Full Speed serial transceiver select
    -            PHYSEL: u1,
    -            reserved8: u1,
    -            ///  SRP-capable
    -            SRPCAP: u1,
    -            ///  HNP-capable
    -            HNPCAP: u1,
    -            ///  USB turnaround time
    -            TRDT: u4,
    -            reserved29: u15,
    -            ///  Force host mode
    -            FHMOD: u1,
    -            ///  Force device mode
    -            FDMOD: u1,
    -            ///  Corrupt Tx packet
    -            CTXPKT: u1,
    -        }),
    -        ///  OTG_FS reset register (OTG_FS_GRSTCTL)
    -        FS_GRSTCTL: mmio.Mmio(packed struct(u32) {
    -            ///  Core soft reset
    -            CSRST: u1,
    -            ///  HCLK soft reset
    -            HSRST: u1,
    -            ///  Host frame counter reset
    -            FCRST: u1,
    -            reserved4: u1,
    -            ///  RxFIFO flush
    -            RXFFLSH: u1,
    -            ///  TxFIFO flush
    -            TXFFLSH: u1,
    -            ///  TxFIFO number
    -            TXFNUM: u5,
    -            reserved31: u20,
    -            ///  AHB master idle
    -            AHBIDL: u1,
    -        }),
    -        ///  OTG_FS core interrupt register (OTG_FS_GINTSTS)
    -        FS_GINTSTS: mmio.Mmio(packed struct(u32) {
    -            ///  Current mode of operation
    -            CMOD: u1,
    -            ///  Mode mismatch interrupt
    -            MMIS: u1,
    -            ///  OTG interrupt
    -            OTGINT: u1,
    -            ///  Start of frame
    -            SOF: u1,
    -            ///  RxFIFO non-empty
    -            RXFLVL: u1,
    -            ///  Non-periodic TxFIFO empty
    -            NPTXFE: u1,
    -            ///  Global IN non-periodic NAK effective
    -            GINAKEFF: u1,
    -            ///  Global OUT NAK effective
    -            GOUTNAKEFF: u1,
    -            reserved10: u2,
    -            ///  Early suspend
    -            ESUSP: u1,
    -            ///  USB suspend
    -            USBSUSP: u1,
    -            ///  USB reset
    -            USBRST: u1,
    -            ///  Enumeration done
    -            ENUMDNE: u1,
    -            ///  Isochronous OUT packet dropped interrupt
    -            ISOODRP: u1,
    -            ///  End of periodic frame interrupt
    -            EOPF: u1,
    -            reserved18: u2,
    -            ///  IN endpoint interrupt
    -            IEPINT: u1,
    -            ///  OUT endpoint interrupt
    -            OEPINT: u1,
    -            ///  Incomplete isochronous IN transfer
    -            IISOIXFR: u1,
    -            ///  Incomplete periodic transfer(Host mode)/Incomplete isochronous OUT transfer(Device mode)
    -            IPXFR_INCOMPISOOUT: u1,
    -            reserved24: u2,
    -            ///  Host port interrupt
    -            HPRTINT: u1,
    -            ///  Host channels interrupt
    -            HCINT: u1,
    -            ///  Periodic TxFIFO empty
    -            PTXFE: u1,
    -            reserved28: u1,
    -            ///  Connector ID status change
    -            CIDSCHG: u1,
    -            ///  Disconnect detected interrupt
    -            DISCINT: u1,
    -            ///  Session request/new session detected interrupt
    -            SRQINT: u1,
    -            ///  Resume/remote wakeup detected interrupt
    -            WKUPINT: u1,
    -        }),
    -        ///  OTG_FS interrupt mask register (OTG_FS_GINTMSK)
    -        FS_GINTMSK: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  Mode mismatch interrupt mask
    -            MMISM: u1,
    -            ///  OTG interrupt mask
    -            OTGINT: u1,
    -            ///  Start of frame mask
    -            SOFM: u1,
    -            ///  Receive FIFO non-empty mask
    -            RXFLVLM: u1,
    -            ///  Non-periodic TxFIFO empty mask
    -            NPTXFEM: u1,
    -            ///  Global non-periodic IN NAK effective mask
    -            GINAKEFFM: u1,
    -            ///  Global OUT NAK effective mask
    -            GONAKEFFM: u1,
    -            reserved10: u2,
    -            ///  Early suspend mask
    -            ESUSPM: u1,
    -            ///  USB suspend mask
    -            USBSUSPM: u1,
    -            ///  USB reset mask
    -            USBRST: u1,
    -            ///  Enumeration done mask
    -            ENUMDNEM: u1,
    -            ///  Isochronous OUT packet dropped interrupt mask
    -            ISOODRPM: u1,
    -            ///  End of periodic frame interrupt mask
    -            EOPFM: u1,
    -            reserved17: u1,
    -            ///  Endpoint mismatch interrupt mask
    -            EPMISM: u1,
    -            ///  IN endpoints interrupt mask
    -            IEPINT: u1,
    -            ///  OUT endpoints interrupt mask
    -            OEPINT: u1,
    -            ///  Incomplete isochronous IN transfer mask
    -            IISOIXFRM: u1,
    -            ///  Incomplete periodic transfer mask(Host mode)/Incomplete isochronous OUT transfer mask(Device mode)
    -            IPXFRM_IISOOXFRM: u1,
    -            reserved24: u2,
    -            ///  Host port interrupt mask
    -            PRTIM: u1,
    -            ///  Host channels interrupt mask
    -            HCIM: u1,
    -            ///  Periodic TxFIFO empty mask
    -            PTXFEM: u1,
    -            reserved28: u1,
    -            ///  Connector ID status change mask
    -            CIDSCHGM: u1,
    -            ///  Disconnect detected interrupt mask
    -            DISCINT: u1,
    -            ///  Session request/new session detected interrupt mask
    -            SRQIM: u1,
    -            ///  Resume/remote wakeup detected interrupt mask
    -            WUIM: u1,
    -        }),
    -        ///  OTG_FS Receive status debug read(Device mode)
    -        FS_GRXSTSR_Device: mmio.Mmio(packed struct(u32) {
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Byte count
    -            BCNT: u11,
    -            ///  Data PID
    -            DPID: u2,
    -            ///  Packet status
    -            PKTSTS: u4,
    -            ///  Frame number
    -            FRMNUM: u4,
    -            padding: u7,
    -        }),
    -        reserved36: [4]u8,
    -        ///  OTG_FS Receive FIFO size register (OTG_FS_GRXFSIZ)
    -        FS_GRXFSIZ: mmio.Mmio(packed struct(u32) {
    -            ///  RxFIFO depth
    -            RXFD: u16,
    -            padding: u16,
    -        }),
    -        ///  OTG_FS non-periodic transmit FIFO size register (Device mode)
    -        FS_GNPTXFSIZ_Device: mmio.Mmio(packed struct(u32) {
    -            ///  Endpoint 0 transmit RAM start address
    -            TX0FSA: u16,
    -            ///  Endpoint 0 TxFIFO depth
    -            TX0FD: u16,
    -        }),
    -        ///  OTG_FS non-periodic transmit FIFO/queue status register (OTG_FS_GNPTXSTS)
    -        FS_GNPTXSTS: mmio.Mmio(packed struct(u32) {
    -            ///  Non-periodic TxFIFO space available
    -            NPTXFSAV: u16,
    -            ///  Non-periodic transmit request queue space available
    -            NPTQXSAV: u8,
    -            ///  Top of the non-periodic transmit request queue
    -            NPTXQTOP: u7,
    -            padding: u1,
    -        }),
    -        reserved56: [8]u8,
    -        ///  OTG_FS general core configuration register (OTG_FS_GCCFG)
    -        FS_GCCFG: mmio.Mmio(packed struct(u32) {
    -            reserved16: u16,
    -            ///  Power down
    -            PWRDWN: u1,
    -            reserved18: u1,
    -            ///  Enable the VBUS sensing device
    -            VBUSASEN: u1,
    -            ///  Enable the VBUS sensing device
    -            VBUSBSEN: u1,
    -            ///  SOF output enable
    -            SOFOUTEN: u1,
    -            padding: u11,
    -        }),
    -        ///  core ID register
    -        FS_CID: mmio.Mmio(packed struct(u32) {
    -            ///  Product ID field
    -            PRODUCT_ID: u32,
    -        }),
    -        reserved256: [192]u8,
    -        ///  OTG_FS Host periodic transmit FIFO size register (OTG_FS_HPTXFSIZ)
    -        FS_HPTXFSIZ: mmio.Mmio(packed struct(u32) {
    -            ///  Host periodic TxFIFO start address
    -            PTXSA: u16,
    -            ///  Host periodic TxFIFO depth
    -            PTXFSIZ: u16,
    -        }),
    -        ///  OTG_FS device IN endpoint transmit FIFO size register (OTG_FS_DIEPTXF2)
    -        FS_DIEPTXF1: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint FIFO2 transmit RAM start address
    -            INEPTXSA: u16,
    -            ///  IN endpoint TxFIFO depth
    -            INEPTXFD: u16,
    -        }),
    -        ///  OTG_FS device IN endpoint transmit FIFO size register (OTG_FS_DIEPTXF3)
    -        FS_DIEPTXF2: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint FIFO3 transmit RAM start address
    -            INEPTXSA: u16,
    -            ///  IN endpoint TxFIFO depth
    -            INEPTXFD: u16,
    -        }),
    -        ///  OTG_FS device IN endpoint transmit FIFO size register (OTG_FS_DIEPTXF4)
    -        FS_DIEPTXF3: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint FIFO4 transmit RAM start address
    -            INEPTXSA: u16,
    -            ///  IN endpoint TxFIFO depth
    -            INEPTXFD: u16,
    -        }),
    -    };
    -
    -    ///  Cryptographic processor
    -    pub const CRC = extern struct {
    -        ///  Data register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  Data Register
    -            DR: u32,
    -        }),
    -        ///  Independent Data register
    -        IDR: mmio.Mmio(packed struct(u32) {
    -            ///  Independent Data register
    -            IDR: u8,
    -            padding: u24,
    -        }),
    -        ///  Control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  Control regidter
    -            CR: u1,
    -            padding: u31,
    -        }),
    -    };
    -
    -    ///  Ethernet: DMA controller operation
    -    pub const Ethernet_DMA = extern struct {
    -        ///  Ethernet DMA bus mode register
    -        DMABMR: mmio.Mmio(packed struct(u32) {
    -            ///  SR
    -            SR: u1,
    -            ///  DA
    -            DA: u1,
    -            ///  DSL
    -            DSL: u5,
    -            ///  EDFE
    -            EDFE: u1,
    -            ///  PBL
    -            PBL: u6,
    -            ///  RTPR
    -            RTPR: u2,
    -            ///  FB
    -            FB: u1,
    -            ///  RDP
    -            RDP: u6,
    -            ///  USP
    -            USP: u1,
    -            ///  FPM
    -            FPM: u1,
    -            ///  AAB
    -            AAB: u1,
    -            ///  MB
    -            MB: u1,
    -            padding: u5,
    -        }),
    -        ///  Ethernet DMA transmit poll demand register
    -        DMATPDR: mmio.Mmio(packed struct(u32) {
    -            ///  TPD
    -            TPD: u32,
    -        }),
    -        ///  EHERNET DMA receive poll demand register
    -        DMARPDR: mmio.Mmio(packed struct(u32) {
    -            ///  RPD
    -            RPD: u32,
    -        }),
    -        ///  Ethernet DMA receive descriptor list address register
    -        DMARDLAR: mmio.Mmio(packed struct(u32) {
    -            ///  SRL
    -            SRL: u32,
    -        }),
    -        ///  Ethernet DMA transmit descriptor list address register
    -        DMATDLAR: mmio.Mmio(packed struct(u32) {
    -            ///  STL
    -            STL: u32,
    -        }),
    -        ///  Ethernet DMA status register
    -        DMASR: mmio.Mmio(packed struct(u32) {
    -            ///  TS
    -            TS: u1,
    -            ///  TPSS
    -            TPSS: u1,
    -            ///  TBUS
    -            TBUS: u1,
    -            ///  TJTS
    -            TJTS: u1,
    -            ///  ROS
    -            ROS: u1,
    -            ///  TUS
    -            TUS: u1,
    -            ///  RS
    -            RS: u1,
    -            ///  RBUS
    -            RBUS: u1,
    -            ///  RPSS
    -            RPSS: u1,
    -            ///  PWTS
    -            PWTS: u1,
    -            ///  ETS
    -            ETS: u1,
    -            reserved13: u2,
    -            ///  FBES
    -            FBES: u1,
    -            ///  ERS
    -            ERS: u1,
    -            ///  AIS
    -            AIS: u1,
    -            ///  NIS
    -            NIS: u1,
    -            ///  RPS
    -            RPS: u3,
    -            ///  TPS
    -            TPS: u3,
    -            ///  EBS
    -            EBS: u3,
    -            reserved27: u1,
    -            ///  MMCS
    -            MMCS: u1,
    -            ///  PMTS
    -            PMTS: u1,
    -            ///  TSTS
    -            TSTS: u1,
    -            padding: u2,
    -        }),
    -        ///  Ethernet DMA operation mode register
    -        DMAOMR: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  SR
    -            SR: u1,
    -            ///  OSF
    -            OSF: u1,
    -            ///  RTC
    -            RTC: u2,
    -            reserved6: u1,
    -            ///  FUGF
    -            FUGF: u1,
    -            ///  FEF
    -            FEF: u1,
    -            reserved13: u5,
    -            ///  ST
    -            ST: u1,
    -            ///  TTC
    -            TTC: u3,
    -            reserved20: u3,
    -            ///  FTF
    -            FTF: u1,
    -            ///  TSF
    -            TSF: u1,
    -            reserved24: u2,
    -            ///  DFRF
    -            DFRF: u1,
    -            ///  RSF
    -            RSF: u1,
    -            ///  DTCEFD
    -            DTCEFD: u1,
    -            padding: u5,
    -        }),
    -        ///  Ethernet DMA interrupt enable register
    -        DMAIER: mmio.Mmio(packed struct(u32) {
    -            ///  TIE
    -            TIE: u1,
    -            ///  TPSIE
    -            TPSIE: u1,
    -            ///  TBUIE
    -            TBUIE: u1,
    -            ///  TJTIE
    -            TJTIE: u1,
    -            ///  ROIE
    -            ROIE: u1,
    -            ///  TUIE
    -            TUIE: u1,
    -            ///  RIE
    -            RIE: u1,
    -            ///  RBUIE
    -            RBUIE: u1,
    -            ///  RPSIE
    -            RPSIE: u1,
    -            ///  RWTIE
    -            RWTIE: u1,
    -            ///  ETIE
    -            ETIE: u1,
    -            reserved13: u2,
    -            ///  FBEIE
    -            FBEIE: u1,
    -            ///  ERIE
    -            ERIE: u1,
    -            ///  AISE
    -            AISE: u1,
    -            ///  NISE
    -            NISE: u1,
    -            padding: u15,
    -        }),
    -        ///  Ethernet DMA missed frame and buffer overflow counter register
    -        DMAMFBOCR: mmio.Mmio(packed struct(u32) {
    -            ///  MFC
    -            MFC: u16,
    -            ///  OMFC
    -            OMFC: u1,
    -            ///  MFA
    -            MFA: u11,
    -            ///  OFOC
    -            OFOC: u1,
    -            padding: u3,
    -        }),
    -        ///  Ethernet DMA receive status watchdog timer register
    -        DMARSWTR: mmio.Mmio(packed struct(u32) {
    -            ///  RSWTC
    -            RSWTC: u8,
    -            padding: u24,
    -        }),
    -        reserved72: [32]u8,
    -        ///  Ethernet DMA current host transmit descriptor register
    -        DMACHTDR: mmio.Mmio(packed struct(u32) {
    -            ///  HTDAP
    -            HTDAP: u32,
    -        }),
    -        ///  Ethernet DMA current host receive descriptor register
    -        DMACHRDR: mmio.Mmio(packed struct(u32) {
    -            ///  HRDAP
    -            HRDAP: u32,
    -        }),
    -        ///  Ethernet DMA current host transmit buffer address register
    -        DMACHTBAR: mmio.Mmio(packed struct(u32) {
    -            ///  HTBAP
    -            HTBAP: u32,
    -        }),
    -        ///  Ethernet DMA current host receive buffer address register
    -        DMACHRBAR: mmio.Mmio(packed struct(u32) {
    -            ///  HRBAP
    -            HRBAP: u32,
    -        }),
    -    };
    -
    -    ///  Common ADC registers
    -    pub const C_ADC = extern struct {
    -        ///  ADC Common status register
    -        CSR: mmio.Mmio(packed struct(u32) {
    -            ///  Analog watchdog flag of ADC 1
    -            AWD1: u1,
    -            ///  End of conversion of ADC 1
    -            EOC1: u1,
    -            ///  Injected channel end of conversion of ADC 1
    -            JEOC1: u1,
    -            ///  Injected channel Start flag of ADC 1
    -            JSTRT1: u1,
    -            ///  Regular channel Start flag of ADC 1
    -            STRT1: u1,
    -            ///  Overrun flag of ADC 1
    -            OVR1: u1,
    -            reserved8: u2,
    -            ///  Analog watchdog flag of ADC 2
    -            AWD2: u1,
    -            ///  End of conversion of ADC 2
    -            EOC2: u1,
    -            ///  Injected channel end of conversion of ADC 2
    -            JEOC2: u1,
    -            ///  Injected channel Start flag of ADC 2
    -            JSTRT2: u1,
    -            ///  Regular channel Start flag of ADC 2
    -            STRT2: u1,
    -            ///  Overrun flag of ADC 2
    -            OVR2: u1,
    -            reserved16: u2,
    -            ///  Analog watchdog flag of ADC 3
    -            AWD3: u1,
    -            ///  End of conversion of ADC 3
    -            EOC3: u1,
    -            ///  Injected channel end of conversion of ADC 3
    -            JEOC3: u1,
    -            ///  Injected channel Start flag of ADC 3
    -            JSTRT3: u1,
    -            ///  Regular channel Start flag of ADC 3
    -            STRT3: u1,
    -            ///  Overrun flag of ADC3
    -            OVR3: u1,
    -            padding: u10,
    -        }),
    -        ///  ADC common control register
    -        CCR: mmio.Mmio(packed struct(u32) {
    -            ///  Multi ADC mode selection
    -            MULT: u5,
    -            reserved8: u3,
    -            ///  Delay between 2 sampling phases
    -            DELAY: u4,
    -            reserved13: u1,
    -            ///  DMA disable selection for multi-ADC mode
    -            DDS: u1,
    -            ///  Direct memory access mode for multi ADC mode
    -            DMA: u2,
    -            ///  ADC prescaler
    -            ADCPRE: u2,
    -            reserved22: u4,
    -            ///  VBAT enable
    -            VBATE: u1,
    -            ///  Temperature sensor and VREFINT enable
    -            TSVREFE: u1,
    -            padding: u8,
    -        }),
    -        ///  ADC common regular data register for dual and triple modes
    -        CDR: mmio.Mmio(packed struct(u32) {
    -            ///  1st data item of a pair of regular conversions
    -            DATA1: u16,
    -            ///  2nd data item of a pair of regular conversions
    -            DATA2: u16,
    -        }),
    -    };
    -
    -    ///  Advanced-timers
    -    pub const TIM1 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            ///  One-pulse mode
    -            OPM: u1,
    -            ///  Direction
    -            DIR: u1,
    -            ///  Center-aligned mode selection
    -            CMS: u2,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            ///  Clock division
    -            CKD: u2,
    -            padding: u22,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/compare preloaded control
    -            CCPC: u1,
    -            reserved2: u1,
    -            ///  Capture/compare control update selection
    -            CCUS: u1,
    -            ///  Capture/compare DMA selection
    -            CCDS: u1,
    -            ///  Master mode selection
    -            MMS: u3,
    -            ///  TI1 selection
    -            TI1S: u1,
    -            ///  Output Idle state 1
    -            OIS1: u1,
    -            ///  Output Idle state 1
    -            OIS1N: u1,
    -            ///  Output Idle state 2
    -            OIS2: u1,
    -            ///  Output Idle state 2
    -            OIS2N: u1,
    -            ///  Output Idle state 3
    -            OIS3: u1,
    -            ///  Output Idle state 3
    -            OIS3N: u1,
    -            ///  Output Idle state 4
    -            OIS4: u1,
    -            padding: u17,
    -        }),
    -        ///  slave mode control register
    -        SMCR: mmio.Mmio(packed struct(u32) {
    -            ///  Slave mode selection
    -            SMS: u3,
    -            reserved4: u1,
    -            ///  Trigger selection
    -            TS: u3,
    -            ///  Master/Slave mode
    -            MSM: u1,
    -            ///  External trigger filter
    -            ETF: u4,
    -            ///  External trigger prescaler
    -            ETPS: u2,
    -            ///  External clock enable
    -            ECE: u1,
    -            ///  External trigger polarity
    -            ETP: u1,
    -            padding: u16,
    -        }),
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            ///  Capture/Compare 1 interrupt enable
    -            CC1IE: u1,
    -            ///  Capture/Compare 2 interrupt enable
    -            CC2IE: u1,
    -            ///  Capture/Compare 3 interrupt enable
    -            CC3IE: u1,
    -            ///  Capture/Compare 4 interrupt enable
    -            CC4IE: u1,
    -            ///  COM interrupt enable
    -            COMIE: u1,
    -            ///  Trigger interrupt enable
    -            TIE: u1,
    -            ///  Break interrupt enable
    -            BIE: u1,
    -            ///  Update DMA request enable
    -            UDE: u1,
    -            ///  Capture/Compare 1 DMA request enable
    -            CC1DE: u1,
    -            ///  Capture/Compare 2 DMA request enable
    -            CC2DE: u1,
    -            ///  Capture/Compare 3 DMA request enable
    -            CC3DE: u1,
    -            ///  Capture/Compare 4 DMA request enable
    -            CC4DE: u1,
    -            ///  COM DMA request enable
    -            COMDE: u1,
    -            ///  Trigger DMA request enable
    -            TDE: u1,
    -            padding: u17,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            ///  Capture/compare 1 interrupt flag
    -            CC1IF: u1,
    -            ///  Capture/Compare 2 interrupt flag
    -            CC2IF: u1,
    -            ///  Capture/Compare 3 interrupt flag
    -            CC3IF: u1,
    -            ///  Capture/Compare 4 interrupt flag
    -            CC4IF: u1,
    -            ///  COM interrupt flag
    -            COMIF: u1,
    -            ///  Trigger interrupt flag
    -            TIF: u1,
    -            ///  Break interrupt flag
    -            BIF: u1,
    -            reserved9: u1,
    -            ///  Capture/Compare 1 overcapture flag
    -            CC1OF: u1,
    -            ///  Capture/compare 2 overcapture flag
    -            CC2OF: u1,
    -            ///  Capture/Compare 3 overcapture flag
    -            CC3OF: u1,
    -            ///  Capture/Compare 4 overcapture flag
    -            CC4OF: u1,
    -            padding: u19,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            ///  Capture/compare 1 generation
    -            CC1G: u1,
    -            ///  Capture/compare 2 generation
    -            CC2G: u1,
    -            ///  Capture/compare 3 generation
    -            CC3G: u1,
    -            ///  Capture/compare 4 generation
    -            CC4G: u1,
    -            ///  Capture/Compare control update generation
    -            COMG: u1,
    -            ///  Trigger generation
    -            TG: u1,
    -            ///  Break generation
    -            BG: u1,
    -            padding: u24,
    -        }),
    -        ///  capture/compare mode register 1 (output mode)
    -        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 selection
    -            CC1S: u2,
    -            ///  Output Compare 1 fast enable
    -            OC1FE: u1,
    -            ///  Output Compare 1 preload enable
    -            OC1PE: u1,
    -            ///  Output Compare 1 mode
    -            OC1M: u3,
    -            ///  Output Compare 1 clear enable
    -            OC1CE: u1,
    -            ///  Capture/Compare 2 selection
    -            CC2S: u2,
    -            ///  Output Compare 2 fast enable
    -            OC2FE: u1,
    -            ///  Output Compare 2 preload enable
    -            OC2PE: u1,
    -            ///  Output Compare 2 mode
    -            OC2M: u3,
    -            ///  Output Compare 2 clear enable
    -            OC2CE: u1,
    -            padding: u16,
    -        }),
    -        ///  capture/compare mode register 2 (output mode)
    -        CCMR2_Output: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 3 selection
    -            CC3S: u2,
    -            ///  Output compare 3 fast enable
    -            OC3FE: u1,
    -            ///  Output compare 3 preload enable
    -            OC3PE: u1,
    -            ///  Output compare 3 mode
    -            OC3M: u3,
    -            ///  Output compare 3 clear enable
    -            OC3CE: u1,
    -            ///  Capture/Compare 4 selection
    -            CC4S: u2,
    -            ///  Output compare 4 fast enable
    -            OC4FE: u1,
    -            ///  Output compare 4 preload enable
    -            OC4PE: u1,
    -            ///  Output compare 4 mode
    -            OC4M: u3,
    -            ///  Output compare 4 clear enable
    -            OC4CE: u1,
    -            padding: u16,
    -        }),
    -        ///  capture/compare enable register
    -        CCER: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 output enable
    -            CC1E: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1P: u1,
    -            ///  Capture/Compare 1 complementary output enable
    -            CC1NE: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1NP: u1,
    -            ///  Capture/Compare 2 output enable
    -            CC2E: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2P: u1,
    -            ///  Capture/Compare 2 complementary output enable
    -            CC2NE: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2NP: u1,
    -            ///  Capture/Compare 3 output enable
    -            CC3E: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC3P: u1,
    -            ///  Capture/Compare 3 complementary output enable
    -            CC3NE: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC3NP: u1,
    -            ///  Capture/Compare 4 output enable
    -            CC4E: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC4P: u1,
    -            padding: u18,
    -        }),
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  counter value
    -            CNT: u16,
    -            padding: u16,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Auto-reload value
    -            ARR: u16,
    -            padding: u16,
    -        }),
    -        ///  repetition counter register
    -        RCR: mmio.Mmio(packed struct(u32) {
    -            ///  Repetition counter value
    -            REP: u8,
    -            padding: u24,
    -        }),
    -        ///  capture/compare register 1
    -        CCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 value
    -            CCR1: u16,
    -            padding: u16,
    -        }),
    -        ///  capture/compare register 2
    -        CCR2: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 2 value
    -            CCR2: u16,
    -            padding: u16,
    -        }),
    -        ///  capture/compare register 3
    -        CCR3: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare value
    -            CCR3: u16,
    -            padding: u16,
    -        }),
    -        ///  capture/compare register 4
    -        CCR4: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare value
    -            CCR4: u16,
    -            padding: u16,
    -        }),
    -        ///  break and dead-time register
    -        BDTR: mmio.Mmio(packed struct(u32) {
    -            ///  Dead-time generator setup
    -            DTG: u8,
    -            ///  Lock configuration
    -            LOCK: u2,
    -            ///  Off-state selection for Idle mode
    -            OSSI: u1,
    -            ///  Off-state selection for Run mode
    -            OSSR: u1,
    -            ///  Break enable
    -            BKE: u1,
    -            ///  Break polarity
    -            BKP: u1,
    -            ///  Automatic output enable
    -            AOE: u1,
    -            ///  Main output enable
    -            MOE: u1,
    -            padding: u16,
    -        }),
    -        ///  DMA control register
    -        DCR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA base address
    -            DBA: u5,
    -            reserved8: u3,
    -            ///  DMA burst length
    -            DBL: u5,
    -            padding: u19,
    -        }),
    -        ///  DMA address for full transfer
    -        DMAR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA register for burst accesses
    -            DMAB: u16,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  Ethernet: Precision time protocol
    -    pub const Ethernet_PTP = extern struct {
    -        ///  Ethernet PTP time stamp control register
    -        PTPTSCR: mmio.Mmio(packed struct(u32) {
    -            ///  TSE
    -            TSE: u1,
    -            ///  TSFCU
    -            TSFCU: u1,
    -            ///  TSSTI
    -            TSSTI: u1,
    -            ///  TSSTU
    -            TSSTU: u1,
    -            ///  TSITE
    -            TSITE: u1,
    -            ///  TTSARU
    -            TTSARU: u1,
    -            reserved8: u2,
    -            ///  TSSARFE
    -            TSSARFE: u1,
    -            ///  TSSSR
    -            TSSSR: u1,
    -            ///  TSPTPPSV2E
    -            TSPTPPSV2E: u1,
    -            ///  TSSPTPOEFE
    -            TSSPTPOEFE: u1,
    -            ///  TSSIPV6FE
    -            TSSIPV6FE: u1,
    -            ///  TSSIPV4FE
    -            TSSIPV4FE: u1,
    -            ///  TSSEME
    -            TSSEME: u1,
    -            ///  TSSMRME
    -            TSSMRME: u1,
    -            ///  TSCNT
    -            TSCNT: u2,
    -            ///  TSPFFMAE
    -            TSPFFMAE: u1,
    -            padding: u13,
    -        }),
    -        ///  Ethernet PTP subsecond increment register
    -        PTPSSIR: mmio.Mmio(packed struct(u32) {
    -            ///  STSSI
    -            STSSI: u8,
    -            padding: u24,
    -        }),
    -        ///  Ethernet PTP time stamp high register
    -        PTPTSHR: mmio.Mmio(packed struct(u32) {
    -            ///  STS
    -            STS: u32,
    -        }),
    -        ///  Ethernet PTP time stamp low register
    -        PTPTSLR: mmio.Mmio(packed struct(u32) {
    -            ///  STSS
    -            STSS: u31,
    -            ///  STPNS
    -            STPNS: u1,
    -        }),
    -        ///  Ethernet PTP time stamp high update register
    -        PTPTSHUR: mmio.Mmio(packed struct(u32) {
    -            ///  TSUS
    -            TSUS: u32,
    -        }),
    -        ///  Ethernet PTP time stamp low update register
    -        PTPTSLUR: mmio.Mmio(packed struct(u32) {
    -            ///  TSUSS
    -            TSUSS: u31,
    -            ///  TSUPNS
    -            TSUPNS: u1,
    -        }),
    -        ///  Ethernet PTP time stamp addend register
    -        PTPTSAR: mmio.Mmio(packed struct(u32) {
    -            ///  TSA
    -            TSA: u32,
    -        }),
    -        ///  Ethernet PTP target time high register
    -        PTPTTHR: mmio.Mmio(packed struct(u32) {
    -            ///  0
    -            TTSH: u32,
    -        }),
    -        ///  Ethernet PTP target time low register
    -        PTPTTLR: mmio.Mmio(packed struct(u32) {
    -            ///  TTSL
    -            TTSL: u32,
    -        }),
    -        reserved40: [4]u8,
    -        ///  Ethernet PTP time stamp status register
    -        PTPTSSR: mmio.Mmio(packed struct(u32) {
    -            ///  TSSO
    -            TSSO: u1,
    -            ///  TSTTR
    -            TSTTR: u1,
    -            padding: u30,
    -        }),
    -        ///  Ethernet PTP PPS control register
    -        PTPPPSCR: mmio.Mmio(packed struct(u32) {
    -            ///  TSSO
    -            TSSO: u1,
    -            ///  TSTTR
    -            TSTTR: u1,
    -            padding: u30,
    -        }),
    -    };
    -
    -    ///  General purpose timers
    -    pub const TIM2 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            ///  One-pulse mode
    -            OPM: u1,
    -            ///  Direction
    -            DIR: u1,
    -            ///  Center-aligned mode selection
    -            CMS: u2,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            ///  Clock division
    -            CKD: u2,
    -            padding: u22,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            reserved3: u3,
    -            ///  Capture/compare DMA selection
    -            CCDS: u1,
    -            ///  Master mode selection
    -            MMS: u3,
    -            ///  TI1 selection
    -            TI1S: u1,
    -            padding: u24,
    -        }),
    -        ///  slave mode control register
    -        SMCR: mmio.Mmio(packed struct(u32) {
    -            ///  Slave mode selection
    -            SMS: u3,
    -            reserved4: u1,
    -            ///  Trigger selection
    -            TS: u3,
    -            ///  Master/Slave mode
    -            MSM: u1,
    -            ///  External trigger filter
    -            ETF: u4,
    -            ///  External trigger prescaler
    -            ETPS: u2,
    -            ///  External clock enable
    -            ECE: u1,
    -            ///  External trigger polarity
    -            ETP: u1,
    -            padding: u16,
    -        }),
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            ///  Capture/Compare 1 interrupt enable
    -            CC1IE: u1,
    -            ///  Capture/Compare 2 interrupt enable
    -            CC2IE: u1,
    -            ///  Capture/Compare 3 interrupt enable
    -            CC3IE: u1,
    -            ///  Capture/Compare 4 interrupt enable
    -            CC4IE: u1,
    -            reserved6: u1,
    -            ///  Trigger interrupt enable
    -            TIE: u1,
    -            reserved8: u1,
    -            ///  Update DMA request enable
    -            UDE: u1,
    -            ///  Capture/Compare 1 DMA request enable
    -            CC1DE: u1,
    -            ///  Capture/Compare 2 DMA request enable
    -            CC2DE: u1,
    -            ///  Capture/Compare 3 DMA request enable
    -            CC3DE: u1,
    -            ///  Capture/Compare 4 DMA request enable
    -            CC4DE: u1,
    -            reserved14: u1,
    -            ///  Trigger DMA request enable
    -            TDE: u1,
    -            padding: u17,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            ///  Capture/compare 1 interrupt flag
    -            CC1IF: u1,
    -            ///  Capture/Compare 2 interrupt flag
    -            CC2IF: u1,
    -            ///  Capture/Compare 3 interrupt flag
    -            CC3IF: u1,
    -            ///  Capture/Compare 4 interrupt flag
    -            CC4IF: u1,
    -            reserved6: u1,
    -            ///  Trigger interrupt flag
    -            TIF: u1,
    -            reserved9: u2,
    -            ///  Capture/Compare 1 overcapture flag
    -            CC1OF: u1,
    -            ///  Capture/compare 2 overcapture flag
    -            CC2OF: u1,
    -            ///  Capture/Compare 3 overcapture flag
    -            CC3OF: u1,
    -            ///  Capture/Compare 4 overcapture flag
    -            CC4OF: u1,
    -            padding: u19,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            ///  Capture/compare 1 generation
    -            CC1G: u1,
    -            ///  Capture/compare 2 generation
    -            CC2G: u1,
    -            ///  Capture/compare 3 generation
    -            CC3G: u1,
    -            ///  Capture/compare 4 generation
    -            CC4G: u1,
    -            reserved6: u1,
    -            ///  Trigger generation
    -            TG: u1,
    -            padding: u25,
    -        }),
    -        ///  capture/compare mode register 1 (output mode)
    -        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    -            ///  CC1S
    -            CC1S: u2,
    -            ///  OC1FE
    -            OC1FE: u1,
    -            ///  OC1PE
    -            OC1PE: u1,
    -            ///  OC1M
    -            OC1M: u3,
    -            ///  OC1CE
    -            OC1CE: u1,
    -            ///  CC2S
    -            CC2S: u2,
    -            ///  OC2FE
    -            OC2FE: u1,
    -            ///  OC2PE
    -            OC2PE: u1,
    -            ///  OC2M
    -            OC2M: u3,
    -            ///  OC2CE
    -            OC2CE: u1,
    -            padding: u16,
    -        }),
    -        ///  capture/compare mode register 2 (output mode)
    -        CCMR2_Output: mmio.Mmio(packed struct(u32) {
    -            ///  CC3S
    -            CC3S: u2,
    -            ///  OC3FE
    -            OC3FE: u1,
    -            ///  OC3PE
    -            OC3PE: u1,
    -            ///  OC3M
    -            OC3M: u3,
    -            ///  OC3CE
    -            OC3CE: u1,
    -            ///  CC4S
    -            CC4S: u2,
    -            ///  OC4FE
    -            OC4FE: u1,
    -            ///  OC4PE
    -            OC4PE: u1,
    -            ///  OC4M
    -            OC4M: u3,
    -            ///  O24CE
    -            O24CE: u1,
    -            padding: u16,
    -        }),
    -        ///  capture/compare enable register
    -        CCER: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 output enable
    -            CC1E: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1P: u1,
    -            reserved3: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1NP: u1,
    -            ///  Capture/Compare 2 output enable
    -            CC2E: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2P: u1,
    -            reserved7: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2NP: u1,
    -            ///  Capture/Compare 3 output enable
    -            CC3E: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC3P: u1,
    -            reserved11: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC3NP: u1,
    -            ///  Capture/Compare 4 output enable
    -            CC4E: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC4P: u1,
    -            reserved15: u1,
    -            ///  Capture/Compare 4 output Polarity
    -            CC4NP: u1,
    -            padding: u16,
    -        }),
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  Low counter value
    -            CNT_L: u16,
    -            ///  High counter value
    -            CNT_H: u16,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Low Auto-reload value
    -            ARR_L: u16,
    -            ///  High Auto-reload value
    -            ARR_H: u16,
    -        }),
    -        reserved52: [4]u8,
    -        ///  capture/compare register 1
    -        CCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare 1 value
    -            CCR1_L: u16,
    -            ///  High Capture/Compare 1 value
    -            CCR1_H: u16,
    -        }),
    -        ///  capture/compare register 2
    -        CCR2: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare 2 value
    -            CCR2_L: u16,
    -            ///  High Capture/Compare 2 value
    -            CCR2_H: u16,
    -        }),
    -        ///  capture/compare register 3
    -        CCR3: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare value
    -            CCR3_L: u16,
    -            ///  High Capture/Compare value
    -            CCR3_H: u16,
    -        }),
    -        ///  capture/compare register 4
    -        CCR4: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare value
    -            CCR4_L: u16,
    -            ///  High Capture/Compare value
    -            CCR4_H: u16,
    -        }),
    -        reserved72: [4]u8,
    -        ///  DMA control register
    -        DCR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA base address
    -            DBA: u5,
    -            reserved8: u3,
    -            ///  DMA burst length
    -            DBL: u5,
    -            padding: u19,
    -        }),
    -        ///  DMA address for full transfer
    -        DMAR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA register for burst accesses
    -            DMAB: u16,
    -            padding: u16,
    -        }),
    -        ///  TIM5 option register
    -        OR: mmio.Mmio(packed struct(u32) {
    -            reserved10: u10,
    -            ///  Timer Input 4 remap
    -            ITR1_RMP: u2,
    -            padding: u20,
    -        }),
    -    };
    -
    -    ///  General purpose timers
    -    pub const TIM3 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            ///  One-pulse mode
    -            OPM: u1,
    -            ///  Direction
    -            DIR: u1,
    -            ///  Center-aligned mode selection
    -            CMS: u2,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            ///  Clock division
    -            CKD: u2,
    -            padding: u22,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            reserved3: u3,
    -            ///  Capture/compare DMA selection
    -            CCDS: u1,
    -            ///  Master mode selection
    -            MMS: u3,
    -            ///  TI1 selection
    -            TI1S: u1,
    -            padding: u24,
    -        }),
    -        ///  slave mode control register
    -        SMCR: mmio.Mmio(packed struct(u32) {
    -            ///  Slave mode selection
    -            SMS: u3,
    -            reserved4: u1,
    -            ///  Trigger selection
    -            TS: u3,
    -            ///  Master/Slave mode
    -            MSM: u1,
    -            ///  External trigger filter
    -            ETF: u4,
    -            ///  External trigger prescaler
    -            ETPS: u2,
    -            ///  External clock enable
    -            ECE: u1,
    -            ///  External trigger polarity
    -            ETP: u1,
    -            padding: u16,
    -        }),
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            ///  Capture/Compare 1 interrupt enable
    -            CC1IE: u1,
    -            ///  Capture/Compare 2 interrupt enable
    -            CC2IE: u1,
    -            ///  Capture/Compare 3 interrupt enable
    -            CC3IE: u1,
    -            ///  Capture/Compare 4 interrupt enable
    -            CC4IE: u1,
    -            reserved6: u1,
    -            ///  Trigger interrupt enable
    -            TIE: u1,
    -            reserved8: u1,
    -            ///  Update DMA request enable
    -            UDE: u1,
    -            ///  Capture/Compare 1 DMA request enable
    -            CC1DE: u1,
    -            ///  Capture/Compare 2 DMA request enable
    -            CC2DE: u1,
    -            ///  Capture/Compare 3 DMA request enable
    -            CC3DE: u1,
    -            ///  Capture/Compare 4 DMA request enable
    -            CC4DE: u1,
    -            reserved14: u1,
    -            ///  Trigger DMA request enable
    -            TDE: u1,
    -            padding: u17,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            ///  Capture/compare 1 interrupt flag
    -            CC1IF: u1,
    -            ///  Capture/Compare 2 interrupt flag
    -            CC2IF: u1,
    -            ///  Capture/Compare 3 interrupt flag
    -            CC3IF: u1,
    -            ///  Capture/Compare 4 interrupt flag
    -            CC4IF: u1,
    -            reserved6: u1,
    -            ///  Trigger interrupt flag
    -            TIF: u1,
    -            reserved9: u2,
    -            ///  Capture/Compare 1 overcapture flag
    -            CC1OF: u1,
    -            ///  Capture/compare 2 overcapture flag
    -            CC2OF: u1,
    -            ///  Capture/Compare 3 overcapture flag
    -            CC3OF: u1,
    -            ///  Capture/Compare 4 overcapture flag
    -            CC4OF: u1,
    -            padding: u19,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            ///  Capture/compare 1 generation
    -            CC1G: u1,
    -            ///  Capture/compare 2 generation
    -            CC2G: u1,
    -            ///  Capture/compare 3 generation
    -            CC3G: u1,
    -            ///  Capture/compare 4 generation
    -            CC4G: u1,
    -            reserved6: u1,
    -            ///  Trigger generation
    -            TG: u1,
    -            padding: u25,
    -        }),
    -        ///  capture/compare mode register 1 (output mode)
    -        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    -            ///  CC1S
    -            CC1S: u2,
    -            ///  OC1FE
    -            OC1FE: u1,
    -            ///  OC1PE
    -            OC1PE: u1,
    -            ///  OC1M
    -            OC1M: u3,
    -            ///  OC1CE
    -            OC1CE: u1,
    -            ///  CC2S
    -            CC2S: u2,
    -            ///  OC2FE
    -            OC2FE: u1,
    -            ///  OC2PE
    -            OC2PE: u1,
    -            ///  OC2M
    -            OC2M: u3,
    -            ///  OC2CE
    -            OC2CE: u1,
    -            padding: u16,
    -        }),
    -        ///  capture/compare mode register 2 (output mode)
    -        CCMR2_Output: mmio.Mmio(packed struct(u32) {
    -            ///  CC3S
    -            CC3S: u2,
    -            ///  OC3FE
    -            OC3FE: u1,
    -            ///  OC3PE
    -            OC3PE: u1,
    -            ///  OC3M
    -            OC3M: u3,
    -            ///  OC3CE
    -            OC3CE: u1,
    -            ///  CC4S
    -            CC4S: u2,
    -            ///  OC4FE
    -            OC4FE: u1,
    -            ///  OC4PE
    -            OC4PE: u1,
    -            ///  OC4M
    -            OC4M: u3,
    -            ///  O24CE
    -            O24CE: u1,
    -            padding: u16,
    -        }),
    -        ///  capture/compare enable register
    -        CCER: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 output enable
    -            CC1E: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1P: u1,
    -            reserved3: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1NP: u1,
    -            ///  Capture/Compare 2 output enable
    -            CC2E: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2P: u1,
    -            reserved7: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2NP: u1,
    -            ///  Capture/Compare 3 output enable
    -            CC3E: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC3P: u1,
    -            reserved11: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC3NP: u1,
    -            ///  Capture/Compare 4 output enable
    -            CC4E: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC4P: u1,
    -            reserved15: u1,
    -            ///  Capture/Compare 4 output Polarity
    -            CC4NP: u1,
    -            padding: u16,
    -        }),
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  Low counter value
    -            CNT_L: u16,
    -            ///  High counter value
    -            CNT_H: u16,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Low Auto-reload value
    -            ARR_L: u16,
    -            ///  High Auto-reload value
    -            ARR_H: u16,
    -        }),
    -        reserved52: [4]u8,
    -        ///  capture/compare register 1
    -        CCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare 1 value
    -            CCR1_L: u16,
    -            ///  High Capture/Compare 1 value
    -            CCR1_H: u16,
    -        }),
    -        ///  capture/compare register 2
    -        CCR2: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare 2 value
    -            CCR2_L: u16,
    -            ///  High Capture/Compare 2 value
    -            CCR2_H: u16,
    -        }),
    -        ///  capture/compare register 3
    -        CCR3: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare value
    -            CCR3_L: u16,
    -            ///  High Capture/Compare value
    -            CCR3_H: u16,
    -        }),
    -        ///  capture/compare register 4
    -        CCR4: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare value
    -            CCR4_L: u16,
    -            ///  High Capture/Compare value
    -            CCR4_H: u16,
    -        }),
    -        reserved72: [4]u8,
    -        ///  DMA control register
    -        DCR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA base address
    -            DBA: u5,
    -            reserved8: u3,
    -            ///  DMA burst length
    -            DBL: u5,
    -            padding: u19,
    -        }),
    -        ///  DMA address for full transfer
    -        DMAR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA register for burst accesses
    -            DMAB: u16,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  Ethernet: MAC management counters
    -    pub const Ethernet_MMC = extern struct {
    -        ///  Ethernet MMC control register
    -        MMCCR: mmio.Mmio(packed struct(u32) {
    -            ///  CR
    -            CR: u1,
    -            ///  CSR
    -            CSR: u1,
    -            ///  ROR
    -            ROR: u1,
    -            ///  MCF
    -            MCF: u1,
    -            ///  MCP
    -            MCP: u1,
    -            ///  MCFHP
    -            MCFHP: u1,
    -            padding: u26,
    -        }),
    -        ///  Ethernet MMC receive interrupt register
    -        MMCRIR: mmio.Mmio(packed struct(u32) {
    -            reserved5: u5,
    -            ///  RFCES
    -            RFCES: u1,
    -            ///  RFAES
    -            RFAES: u1,
    -            reserved17: u10,
    -            ///  RGUFS
    -            RGUFS: u1,
    -            padding: u14,
    -        }),
    -        ///  Ethernet MMC transmit interrupt register
    -        MMCTIR: mmio.Mmio(packed struct(u32) {
    -            reserved14: u14,
    -            ///  TGFSCS
    -            TGFSCS: u1,
    -            ///  TGFMSCS
    -            TGFMSCS: u1,
    -            reserved21: u5,
    -            ///  TGFS
    -            TGFS: u1,
    -            padding: u10,
    -        }),
    -        ///  Ethernet MMC receive interrupt mask register
    -        MMCRIMR: mmio.Mmio(packed struct(u32) {
    -            reserved5: u5,
    -            ///  RFCEM
    -            RFCEM: u1,
    -            ///  RFAEM
    -            RFAEM: u1,
    -            reserved17: u10,
    -            ///  RGUFM
    -            RGUFM: u1,
    -            padding: u14,
    -        }),
    -        ///  Ethernet MMC transmit interrupt mask register
    -        MMCTIMR: mmio.Mmio(packed struct(u32) {
    -            reserved14: u14,
    -            ///  TGFSCM
    -            TGFSCM: u1,
    -            ///  TGFMSCM
    -            TGFMSCM: u1,
    -            ///  TGFM
    -            TGFM: u1,
    -            padding: u15,
    -        }),
    -        reserved76: [56]u8,
    -        ///  Ethernet MMC transmitted good frames after a single collision counter
    -        MMCTGFSCCR: mmio.Mmio(packed struct(u32) {
    -            ///  TGFSCC
    -            TGFSCC: u32,
    -        }),
    -        ///  Ethernet MMC transmitted good frames after more than a single collision
    -        MMCTGFMSCCR: mmio.Mmio(packed struct(u32) {
    -            ///  TGFMSCC
    -            TGFMSCC: u32,
    -        }),
    -        reserved104: [20]u8,
    -        ///  Ethernet MMC transmitted good frames counter register
    -        MMCTGFCR: mmio.Mmio(packed struct(u32) {
    -            ///  HTL
    -            TGFC: u32,
    -        }),
    -        reserved148: [40]u8,
    -        ///  Ethernet MMC received frames with CRC error counter register
    -        MMCRFCECR: mmio.Mmio(packed struct(u32) {
    -            ///  RFCFC
    -            RFCFC: u32,
    -        }),
    -        ///  Ethernet MMC received frames with alignment error counter register
    -        MMCRFAECR: mmio.Mmio(packed struct(u32) {
    -            ///  RFAEC
    -            RFAEC: u32,
    -        }),
    -        reserved196: [40]u8,
    -        ///  MMC received good unicast frames counter register
    -        MMCRGUFCR: mmio.Mmio(packed struct(u32) {
    -            ///  RGUFC
    -            RGUFC: u32,
    -        }),
    -    };
    -
    -    ///  General-purpose-timers
    -    pub const TIM5 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            ///  One-pulse mode
    -            OPM: u1,
    -            ///  Direction
    -            DIR: u1,
    -            ///  Center-aligned mode selection
    -            CMS: u2,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            ///  Clock division
    -            CKD: u2,
    -            padding: u22,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            reserved3: u3,
    -            ///  Capture/compare DMA selection
    -            CCDS: u1,
    -            ///  Master mode selection
    -            MMS: u3,
    -            ///  TI1 selection
    -            TI1S: u1,
    -            padding: u24,
    -        }),
    -        ///  slave mode control register
    -        SMCR: mmio.Mmio(packed struct(u32) {
    -            ///  Slave mode selection
    -            SMS: u3,
    -            reserved4: u1,
    -            ///  Trigger selection
    -            TS: u3,
    -            ///  Master/Slave mode
    -            MSM: u1,
    -            ///  External trigger filter
    -            ETF: u4,
    -            ///  External trigger prescaler
    -            ETPS: u2,
    -            ///  External clock enable
    -            ECE: u1,
    -            ///  External trigger polarity
    -            ETP: u1,
    -            padding: u16,
    -        }),
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            ///  Capture/Compare 1 interrupt enable
    -            CC1IE: u1,
    -            ///  Capture/Compare 2 interrupt enable
    -            CC2IE: u1,
    -            ///  Capture/Compare 3 interrupt enable
    -            CC3IE: u1,
    -            ///  Capture/Compare 4 interrupt enable
    -            CC4IE: u1,
    -            reserved6: u1,
    -            ///  Trigger interrupt enable
    -            TIE: u1,
    -            reserved8: u1,
    -            ///  Update DMA request enable
    -            UDE: u1,
    -            ///  Capture/Compare 1 DMA request enable
    -            CC1DE: u1,
    -            ///  Capture/Compare 2 DMA request enable
    -            CC2DE: u1,
    -            ///  Capture/Compare 3 DMA request enable
    -            CC3DE: u1,
    -            ///  Capture/Compare 4 DMA request enable
    -            CC4DE: u1,
    -            reserved14: u1,
    -            ///  Trigger DMA request enable
    -            TDE: u1,
    -            padding: u17,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            ///  Capture/compare 1 interrupt flag
    -            CC1IF: u1,
    -            ///  Capture/Compare 2 interrupt flag
    -            CC2IF: u1,
    -            ///  Capture/Compare 3 interrupt flag
    -            CC3IF: u1,
    -            ///  Capture/Compare 4 interrupt flag
    -            CC4IF: u1,
    -            reserved6: u1,
    -            ///  Trigger interrupt flag
    -            TIF: u1,
    -            reserved9: u2,
    -            ///  Capture/Compare 1 overcapture flag
    -            CC1OF: u1,
    -            ///  Capture/compare 2 overcapture flag
    -            CC2OF: u1,
    -            ///  Capture/Compare 3 overcapture flag
    -            CC3OF: u1,
    -            ///  Capture/Compare 4 overcapture flag
    -            CC4OF: u1,
    -            padding: u19,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            ///  Capture/compare 1 generation
    -            CC1G: u1,
    -            ///  Capture/compare 2 generation
    -            CC2G: u1,
    -            ///  Capture/compare 3 generation
    -            CC3G: u1,
    -            ///  Capture/compare 4 generation
    -            CC4G: u1,
    -            reserved6: u1,
    -            ///  Trigger generation
    -            TG: u1,
    -            padding: u25,
    -        }),
    -        ///  capture/compare mode register 1 (output mode)
    -        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    -            ///  CC1S
    -            CC1S: u2,
    -            ///  OC1FE
    -            OC1FE: u1,
    -            ///  OC1PE
    -            OC1PE: u1,
    -            ///  OC1M
    -            OC1M: u3,
    -            ///  OC1CE
    -            OC1CE: u1,
    -            ///  CC2S
    -            CC2S: u2,
    -            ///  OC2FE
    -            OC2FE: u1,
    -            ///  OC2PE
    -            OC2PE: u1,
    -            ///  OC2M
    -            OC2M: u3,
    -            ///  OC2CE
    -            OC2CE: u1,
    -            padding: u16,
    -        }),
    -        ///  capture/compare mode register 2 (output mode)
    -        CCMR2_Output: mmio.Mmio(packed struct(u32) {
    -            ///  CC3S
    -            CC3S: u2,
    -            ///  OC3FE
    -            OC3FE: u1,
    -            ///  OC3PE
    -            OC3PE: u1,
    -            ///  OC3M
    -            OC3M: u3,
    -            ///  OC3CE
    -            OC3CE: u1,
    -            ///  CC4S
    -            CC4S: u2,
    -            ///  OC4FE
    -            OC4FE: u1,
    -            ///  OC4PE
    -            OC4PE: u1,
    -            ///  OC4M
    -            OC4M: u3,
    -            ///  O24CE
    -            O24CE: u1,
    -            padding: u16,
    -        }),
    -        ///  capture/compare enable register
    -        CCER: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 output enable
    -            CC1E: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1P: u1,
    -            reserved3: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1NP: u1,
    -            ///  Capture/Compare 2 output enable
    -            CC2E: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2P: u1,
    -            reserved7: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2NP: u1,
    -            ///  Capture/Compare 3 output enable
    -            CC3E: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC3P: u1,
    -            reserved11: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC3NP: u1,
    -            ///  Capture/Compare 4 output enable
    -            CC4E: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC4P: u1,
    -            reserved15: u1,
    -            ///  Capture/Compare 4 output Polarity
    -            CC4NP: u1,
    -            padding: u16,
    -        }),
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  Low counter value
    -            CNT_L: u16,
    -            ///  High counter value
    -            CNT_H: u16,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Low Auto-reload value
    -            ARR_L: u16,
    -            ///  High Auto-reload value
    -            ARR_H: u16,
    -        }),
    -        reserved52: [4]u8,
    -        ///  capture/compare register 1
    -        CCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare 1 value
    -            CCR1_L: u16,
    -            ///  High Capture/Compare 1 value
    -            CCR1_H: u16,
    -        }),
    -        ///  capture/compare register 2
    -        CCR2: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare 2 value
    -            CCR2_L: u16,
    -            ///  High Capture/Compare 2 value
    -            CCR2_H: u16,
    -        }),
    -        ///  capture/compare register 3
    -        CCR3: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare value
    -            CCR3_L: u16,
    -            ///  High Capture/Compare value
    -            CCR3_H: u16,
    -        }),
    -        ///  capture/compare register 4
    -        CCR4: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare value
    -            CCR4_L: u16,
    -            ///  High Capture/Compare value
    -            CCR4_H: u16,
    -        }),
    -        reserved72: [4]u8,
    -        ///  DMA control register
    -        DCR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA base address
    -            DBA: u5,
    -            reserved8: u3,
    -            ///  DMA burst length
    -            DBL: u5,
    -            padding: u19,
    -        }),
    -        ///  DMA address for full transfer
    -        DMAR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA register for burst accesses
    -            DMAB: u16,
    -            padding: u16,
    -        }),
    -        ///  TIM5 option register
    -        OR: mmio.Mmio(packed struct(u32) {
    -            reserved6: u6,
    -            ///  Timer Input 4 remap
    -            IT4_RMP: u2,
    -            padding: u24,
    -        }),
    -    };
    -
    -    ///  General purpose timers
    -    pub const TIM9 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            ///  One-pulse mode
    -            OPM: u1,
    -            reserved7: u3,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            ///  Clock division
    -            CKD: u2,
    -            padding: u22,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            reserved4: u4,
    -            ///  Master mode selection
    -            MMS: u3,
    -            padding: u25,
    -        }),
    -        ///  slave mode control register
    -        SMCR: mmio.Mmio(packed struct(u32) {
    -            ///  Slave mode selection
    -            SMS: u3,
    -            reserved4: u1,
    -            ///  Trigger selection
    -            TS: u3,
    -            ///  Master/Slave mode
    -            MSM: u1,
    -            padding: u24,
    -        }),
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            ///  Capture/Compare 1 interrupt enable
    -            CC1IE: u1,
    -            ///  Capture/Compare 2 interrupt enable
    -            CC2IE: u1,
    -            reserved6: u3,
    -            ///  Trigger interrupt enable
    -            TIE: u1,
    -            padding: u25,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            ///  Capture/compare 1 interrupt flag
    -            CC1IF: u1,
    -            ///  Capture/Compare 2 interrupt flag
    -            CC2IF: u1,
    -            reserved6: u3,
    -            ///  Trigger interrupt flag
    -            TIF: u1,
    -            reserved9: u2,
    -            ///  Capture/Compare 1 overcapture flag
    -            CC1OF: u1,
    -            ///  Capture/compare 2 overcapture flag
    -            CC2OF: u1,
    -            padding: u21,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            ///  Capture/compare 1 generation
    -            CC1G: u1,
    -            ///  Capture/compare 2 generation
    -            CC2G: u1,
    -            reserved6: u3,
    -            ///  Trigger generation
    -            TG: u1,
    -            padding: u25,
    -        }),
    -        ///  capture/compare mode register 1 (output mode)
    -        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 selection
    -            CC1S: u2,
    -            ///  Output Compare 1 fast enable
    -            OC1FE: u1,
    -            ///  Output Compare 1 preload enable
    -            OC1PE: u1,
    -            ///  Output Compare 1 mode
    -            OC1M: u3,
    -            reserved8: u1,
    -            ///  Capture/Compare 2 selection
    -            CC2S: u2,
    -            ///  Output Compare 2 fast enable
    -            OC2FE: u1,
    -            ///  Output Compare 2 preload enable
    -            OC2PE: u1,
    -            ///  Output Compare 2 mode
    -            OC2M: u3,
    -            padding: u17,
    -        }),
    -        reserved32: [4]u8,
    -        ///  capture/compare enable register
    -        CCER: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 output enable
    -            CC1E: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1P: u1,
    -            reserved3: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1NP: u1,
    -            ///  Capture/Compare 2 output enable
    -            CC2E: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2P: u1,
    -            reserved7: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2NP: u1,
    -            padding: u24,
    -        }),
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  counter value
    -            CNT: u16,
    -            padding: u16,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Auto-reload value
    -            ARR: u16,
    -            padding: u16,
    -        }),
    -        reserved52: [4]u8,
    -        ///  capture/compare register 1
    -        CCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 value
    -            CCR1: u16,
    -            padding: u16,
    -        }),
    -        ///  capture/compare register 2
    -        CCR2: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 2 value
    -            CCR2: u16,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  Ethernet: media access control (MAC)
    -    pub const Ethernet_MAC = extern struct {
    -        ///  Ethernet MAC configuration register
    -        MACCR: mmio.Mmio(packed struct(u32) {
    -            reserved2: u2,
    -            ///  RE
    -            RE: u1,
    -            ///  TE
    -            TE: u1,
    -            ///  DC
    -            DC: u1,
    -            ///  BL
    -            BL: u2,
    -            ///  APCS
    -            APCS: u1,
    -            reserved9: u1,
    -            ///  RD
    -            RD: u1,
    -            ///  IPCO
    -            IPCO: u1,
    -            ///  DM
    -            DM: u1,
    -            ///  LM
    -            LM: u1,
    -            ///  ROD
    -            ROD: u1,
    -            ///  FES
    -            FES: u1,
    -            reserved16: u1,
    -            ///  CSD
    -            CSD: u1,
    -            ///  IFG
    -            IFG: u3,
    -            reserved22: u2,
    -            ///  JD
    -            JD: u1,
    -            ///  WD
    -            WD: u1,
    -            reserved25: u1,
    -            ///  CSTF
    -            CSTF: u1,
    -            padding: u6,
    -        }),
    -        ///  Ethernet MAC frame filter register
    -        MACFFR: mmio.Mmio(packed struct(u32) {
    -            ///  PM
    -            PM: u1,
    -            ///  HU
    -            HU: u1,
    -            ///  HM
    -            HM: u1,
    -            ///  DAIF
    -            DAIF: u1,
    -            ///  RAM
    -            RAM: u1,
    -            ///  BFD
    -            BFD: u1,
    -            ///  PCF
    -            PCF: u1,
    -            ///  SAIF
    -            SAIF: u1,
    -            ///  SAF
    -            SAF: u1,
    -            ///  HPF
    -            HPF: u1,
    -            reserved31: u21,
    -            ///  RA
    -            RA: u1,
    -        }),
    -        ///  Ethernet MAC hash table high register
    -        MACHTHR: mmio.Mmio(packed struct(u32) {
    -            ///  HTH
    -            HTH: u32,
    -        }),
    -        ///  Ethernet MAC hash table low register
    -        MACHTLR: mmio.Mmio(packed struct(u32) {
    -            ///  HTL
    -            HTL: u32,
    -        }),
    -        ///  Ethernet MAC MII address register
    -        MACMIIAR: mmio.Mmio(packed struct(u32) {
    -            ///  MB
    -            MB: u1,
    -            ///  MW
    -            MW: u1,
    -            ///  CR
    -            CR: u3,
    -            reserved6: u1,
    -            ///  MR
    -            MR: u5,
    -            ///  PA
    -            PA: u5,
    -            padding: u16,
    -        }),
    -        ///  Ethernet MAC MII data register
    -        MACMIIDR: mmio.Mmio(packed struct(u32) {
    -            ///  TD
    -            TD: u16,
    -            padding: u16,
    -        }),
    -        ///  Ethernet MAC flow control register
    -        MACFCR: mmio.Mmio(packed struct(u32) {
    -            ///  FCB
    -            FCB: u1,
    -            ///  TFCE
    -            TFCE: u1,
    -            ///  RFCE
    -            RFCE: u1,
    -            ///  UPFD
    -            UPFD: u1,
    -            ///  PLT
    -            PLT: u2,
    -            reserved7: u1,
    -            ///  ZQPD
    -            ZQPD: u1,
    -            reserved16: u8,
    -            ///  PT
    -            PT: u16,
    -        }),
    -        ///  Ethernet MAC VLAN tag register
    -        MACVLANTR: mmio.Mmio(packed struct(u32) {
    -            ///  VLANTI
    -            VLANTI: u16,
    -            ///  VLANTC
    -            VLANTC: u1,
    -            padding: u15,
    -        }),
    -        reserved44: [12]u8,
    -        ///  Ethernet MAC PMT control and status register
    -        MACPMTCSR: mmio.Mmio(packed struct(u32) {
    -            ///  PD
    -            PD: u1,
    -            ///  MPE
    -            MPE: u1,
    -            ///  WFE
    -            WFE: u1,
    -            reserved5: u2,
    -            ///  MPR
    -            MPR: u1,
    -            ///  WFR
    -            WFR: u1,
    -            reserved9: u2,
    -            ///  GU
    -            GU: u1,
    -            reserved31: u21,
    -            ///  WFFRPR
    -            WFFRPR: u1,
    -        }),
    -        reserved52: [4]u8,
    -        ///  Ethernet MAC debug register
    -        MACDBGR: mmio.Mmio(packed struct(u32) {
    -            ///  CR
    -            CR: u1,
    -            ///  CSR
    -            CSR: u1,
    -            ///  ROR
    -            ROR: u1,
    -            ///  MCF
    -            MCF: u1,
    -            ///  MCP
    -            MCP: u1,
    -            ///  MCFHP
    -            MCFHP: u1,
    -            padding: u26,
    -        }),
    -        ///  Ethernet MAC interrupt status register
    -        MACSR: mmio.Mmio(packed struct(u32) {
    -            reserved3: u3,
    -            ///  PMTS
    -            PMTS: u1,
    -            ///  MMCS
    -            MMCS: u1,
    -            ///  MMCRS
    -            MMCRS: u1,
    -            ///  MMCTS
    -            MMCTS: u1,
    -            reserved9: u2,
    -            ///  TSTS
    -            TSTS: u1,
    -            padding: u22,
    -        }),
    -        ///  Ethernet MAC interrupt mask register
    -        MACIMR: mmio.Mmio(packed struct(u32) {
    -            reserved3: u3,
    -            ///  PMTIM
    -            PMTIM: u1,
    -            reserved9: u5,
    -            ///  TSTIM
    -            TSTIM: u1,
    -            padding: u22,
    -        }),
    -        ///  Ethernet MAC address 0 high register
    -        MACA0HR: mmio.Mmio(packed struct(u32) {
    -            ///  MAC address0 high
    -            MACA0H: u16,
    -            reserved31: u15,
    -            ///  Always 1
    -            MO: u1,
    -        }),
    -        ///  Ethernet MAC address 0 low register
    -        MACA0LR: mmio.Mmio(packed struct(u32) {
    -            ///  0
    -            MACA0L: u32,
    -        }),
    -        ///  Ethernet MAC address 1 high register
    -        MACA1HR: mmio.Mmio(packed struct(u32) {
    -            ///  MACA1H
    -            MACA1H: u16,
    -            reserved24: u8,
    -            ///  MBC
    -            MBC: u6,
    -            ///  SA
    -            SA: u1,
    -            ///  AE
    -            AE: u1,
    -        }),
    -        ///  Ethernet MAC address1 low register
    -        MACA1LR: mmio.Mmio(packed struct(u32) {
    -            ///  MACA1LR
    -            MACA1LR: u32,
    -        }),
    -        ///  Ethernet MAC address 2 high register
    -        MACA2HR: mmio.Mmio(packed struct(u32) {
    -            ///  MAC2AH
    -            MAC2AH: u16,
    -            reserved24: u8,
    -            ///  MBC
    -            MBC: u6,
    -            ///  SA
    -            SA: u1,
    -            ///  AE
    -            AE: u1,
    -        }),
    -        ///  Ethernet MAC address 2 low register
    -        MACA2LR: mmio.Mmio(packed struct(u32) {
    -            ///  MACA2L
    -            MACA2L: u31,
    -            padding: u1,
    -        }),
    -        ///  Ethernet MAC address 3 high register
    -        MACA3HR: mmio.Mmio(packed struct(u32) {
    -            ///  MACA3H
    -            MACA3H: u16,
    -            reserved24: u8,
    -            ///  MBC
    -            MBC: u6,
    -            ///  SA
    -            SA: u1,
    -            ///  AE
    -            AE: u1,
    -        }),
    -        ///  Ethernet MAC address 3 low register
    -        MACA3LR: mmio.Mmio(packed struct(u32) {
    -            ///  MBCA3L
    -            MBCA3L: u32,
    -        }),
    -    };
    -
    -    ///  General-purpose-timers
    -    pub const TIM10 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            reserved7: u4,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            ///  Clock division
    -            CKD: u2,
    -            padding: u22,
    -        }),
    -        reserved12: [8]u8,
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            ///  Capture/Compare 1 interrupt enable
    -            CC1IE: u1,
    -            padding: u30,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            ///  Capture/compare 1 interrupt flag
    -            CC1IF: u1,
    -            reserved9: u7,
    -            ///  Capture/Compare 1 overcapture flag
    -            CC1OF: u1,
    -            padding: u22,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            ///  Capture/compare 1 generation
    -            CC1G: u1,
    -            padding: u30,
    -        }),
    -        ///  capture/compare mode register 1 (output mode)
    -        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 selection
    -            CC1S: u2,
    -            ///  Output Compare 1 fast enable
    -            OC1FE: u1,
    -            ///  Output Compare 1 preload enable
    -            OC1PE: u1,
    -            ///  Output Compare 1 mode
    -            OC1M: u3,
    -            padding: u25,
    -        }),
    -        reserved32: [4]u8,
    -        ///  capture/compare enable register
    -        CCER: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 output enable
    -            CC1E: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1P: u1,
    -            reserved3: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1NP: u1,
    -            padding: u28,
    -        }),
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  counter value
    -            CNT: u16,
    -            padding: u16,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Auto-reload value
    -            ARR: u16,
    -            padding: u16,
    -        }),
    -        reserved52: [4]u8,
    -        ///  capture/compare register 1
    -        CCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 value
    -            CCR1: u16,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  General-purpose-timers
    -    pub const TIM11 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            reserved7: u4,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            ///  Clock division
    -            CKD: u2,
    -            padding: u22,
    -        }),
    -        reserved12: [8]u8,
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            ///  Capture/Compare 1 interrupt enable
    -            CC1IE: u1,
    -            padding: u30,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            ///  Capture/compare 1 interrupt flag
    -            CC1IF: u1,
    -            reserved9: u7,
    -            ///  Capture/Compare 1 overcapture flag
    -            CC1OF: u1,
    -            padding: u22,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            ///  Capture/compare 1 generation
    -            CC1G: u1,
    -            padding: u30,
    -        }),
    -        ///  capture/compare mode register 1 (output mode)
    -        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 selection
    -            CC1S: u2,
    -            ///  Output Compare 1 fast enable
    -            OC1FE: u1,
    -            ///  Output Compare 1 preload enable
    -            OC1PE: u1,
    -            ///  Output Compare 1 mode
    -            OC1M: u3,
    -            padding: u25,
    -        }),
    -        reserved32: [4]u8,
    -        ///  capture/compare enable register
    -        CCER: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 output enable
    -            CC1E: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1P: u1,
    -            reserved3: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1NP: u1,
    -            padding: u28,
    -        }),
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  counter value
    -            CNT: u16,
    -            padding: u16,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Auto-reload value
    -            ARR: u16,
    -            padding: u16,
    -        }),
    -        reserved52: [4]u8,
    -        ///  capture/compare register 1
    -        CCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 value
    -            CCR1: u16,
    -            padding: u16,
    -        }),
    -        reserved80: [24]u8,
    -        ///  option register
    -        OR: mmio.Mmio(packed struct(u32) {
    -            ///  Input 1 remapping capability
    -            RMP: u2,
    -            padding: u30,
    -        }),
    -    };
    -};
    diff --git a/src/chips/STM32F429.zig b/src/chips/STM32F429.zig
    deleted file mode 100644
    index 8638044a2..000000000
    --- a/src/chips/STM32F429.zig
    +++ /dev/null
    @@ -1,20419 +0,0 @@
    -const micro = @import("microzig");
    -const mmio = micro.mmio;
    -
    -pub const devices = struct {
    -    ///  STM32F429
    -    pub const STM32F429 = struct {
    -        pub const properties = struct {
    -            pub const @"cpu.nvic_prio_bits" = "3";
    -            pub const @"cpu.mpu" = "false";
    -            pub const @"cpu.fpu" = "false";
    -            pub const @"cpu.revision" = "r1p0";
    -            pub const @"cpu.vendor_systick_config" = "false";
    -            pub const @"cpu.endian" = "little";
    -            pub const @"cpu.name" = "CM4";
    -        };
    -
    -        pub const VectorTable = extern struct {
    -            const Handler = micro.interrupt.Handler;
    -            const unhandled = micro.interrupt.unhandled;
    -
    -            initial_stack_pointer: u32,
    -            Reset: Handler = unhandled,
    -            NMI: Handler = unhandled,
    -            HardFault: Handler = unhandled,
    -            MemManageFault: Handler = unhandled,
    -            BusFault: Handler = unhandled,
    -            UsageFault: Handler = unhandled,
    -            reserved5: [4]u32 = undefined,
    -            SVCall: Handler = unhandled,
    -            DebugMonitor: Handler = unhandled,
    -            reserved11: [1]u32 = undefined,
    -            PendSV: Handler = unhandled,
    -            SysTick: Handler = unhandled,
    -            ///  Window Watchdog interrupt
    -            WWDG: Handler = unhandled,
    -            ///  PVD through EXTI line detection interrupt
    -            PVD: Handler = unhandled,
    -            ///  Tamper and TimeStamp interrupts through the EXTI line
    -            TAMP_STAMP: Handler = unhandled,
    -            ///  RTC Wakeup interrupt through the EXTI line
    -            RTC_WKUP: Handler = unhandled,
    -            ///  Flash global interrupt
    -            FLASH: Handler = unhandled,
    -            ///  RCC global interrupt
    -            RCC: Handler = unhandled,
    -            reserved20: [5]u32 = undefined,
    -            ///  DMA1 Stream0 global interrupt
    -            DMA1_Stream0: Handler = unhandled,
    -            reserved26: [6]u32 = undefined,
    -            ///  ADC2 global interrupts
    -            ADC: Handler = unhandled,
    -            ///  CAN1 TX interrupts
    -            CAN1_TX: Handler = unhandled,
    -            reserved34: [4]u32 = undefined,
    -            ///  TIM1 Break interrupt and TIM9 global interrupt
    -            TIM1_BRK_TIM9: Handler = unhandled,
    -            reserved39: [3]u32 = undefined,
    -            ///  TIM2 global interrupt
    -            TIM2: Handler = unhandled,
    -            ///  TIM3 global interrupt
    -            TIM3: Handler = unhandled,
    -            ///  TIM4 global interrupt
    -            TIM4: Handler = unhandled,
    -            ///  I2C1 event interrupt
    -            I2C1_EV: Handler = unhandled,
    -            reserved46: [1]u32 = undefined,
    -            ///  I2C2 event interrupt
    -            I2C2_EV: Handler = unhandled,
    -            reserved48: [1]u32 = undefined,
    -            ///  SPI1 global interrupt
    -            SPI1: Handler = unhandled,
    -            ///  SPI2 global interrupt
    -            SPI2: Handler = unhandled,
    -            ///  USART1 global interrupt
    -            USART1: Handler = unhandled,
    -            ///  USART2 global interrupt
    -            USART2: Handler = unhandled,
    -            ///  USART3 global interrupt
    -            USART3: Handler = unhandled,
    -            reserved54: [2]u32 = undefined,
    -            ///  USB On-The-Go FS Wakeup through EXTI line interrupt
    -            OTG_FS_WKUP: Handler = unhandled,
    -            ///  TIM8 Break interrupt and TIM12 global interrupt
    -            TIM8_BRK_TIM12: Handler = unhandled,
    -            ///  TIM8 Update interrupt and TIM13 global interrupt
    -            TIM8_UP_TIM13: Handler = unhandled,
    -            ///  TIM8 Trigger and Commutation interrupts and TIM14 global interrupt
    -            TIM8_TRG_COM_TIM14: Handler = unhandled,
    -            reserved60: [2]u32 = undefined,
    -            ///  FMC global interrupt
    -            FMC: Handler = unhandled,
    -            ///  SDIO global interrupt
    -            SDIO: Handler = unhandled,
    -            ///  TIM5 global interrupt
    -            TIM5: Handler = unhandled,
    -            ///  SPI3 global interrupt
    -            SPI3: Handler = unhandled,
    -            ///  UART4 global interrupt
    -            UART4: Handler = unhandled,
    -            ///  UART5 global interrupt
    -            UART5: Handler = unhandled,
    -            ///  TIM6 global interrupt, DAC1 and DAC2 underrun error interrupt
    -            TIM6_DAC: Handler = unhandled,
    -            ///  TIM7 global interrupt
    -            TIM7: Handler = unhandled,
    -            ///  DMA2 Stream0 global interrupt
    -            DMA2_Stream0: Handler = unhandled,
    -            reserved71: [4]u32 = undefined,
    -            ///  Ethernet global interrupt
    -            ETH: Handler = unhandled,
    -            reserved76: [1]u32 = undefined,
    -            ///  CAN2 TX interrupts
    -            CAN2_TX: Handler = unhandled,
    -            reserved78: [7]u32 = undefined,
    -            ///  USART6 global interrupt
    -            USART6: Handler = unhandled,
    -            ///  I2C3 event interrupt
    -            I2C3_EV: Handler = unhandled,
    -            reserved87: [1]u32 = undefined,
    -            ///  USB On The Go HS End Point 1 Out global interrupt
    -            OTG_HS_EP1_OUT: Handler = unhandled,
    -            reserved89: [3]u32 = undefined,
    -            ///  DCMI global interrupt
    -            DCMI: Handler = unhandled,
    -            ///  CRYP crypto global interrupt
    -            CRYP: Handler = unhandled,
    -            ///  Hash and Rng global interrupt
    -            HASH_RNG: Handler = unhandled,
    -            ///  FPU interrupt
    -            FPU: Handler = unhandled,
    -            ///  UART 7 global interrupt
    -            UART7: Handler = unhandled,
    -            ///  UART 8 global interrupt
    -            UART8: Handler = unhandled,
    -            ///  SPI 4 global interrupt
    -            SPI4: Handler = unhandled,
    -            ///  SPI 5 global interrupt
    -            SPI5: Handler = unhandled,
    -            ///  SPI 6 global interrupt
    -            SPI6: Handler = unhandled,
    -            ///  SAI1 global interrupt
    -            SAI1: Handler = unhandled,
    -            ///  LTDC global interrupt
    -            LCD_TFT: Handler = unhandled,
    -            reserved103: [1]u32 = undefined,
    -            ///  DMA2D global interrupt
    -            DMA2D: Handler = unhandled,
    -        };
    -
    -        pub const peripherals = struct {
    -            ///  General purpose timers
    -            pub const TIM2 = @as(*volatile types.TIM2, @ptrFromInt(0x40000000));
    -            ///  General purpose timers
    -            pub const TIM3 = @as(*volatile types.TIM3, @ptrFromInt(0x40000400));
    -            ///  General purpose timers
    -            pub const TIM4 = @as(*volatile types.TIM3, @ptrFromInt(0x40000800));
    -            ///  General-purpose-timers
    -            pub const TIM5 = @as(*volatile types.TIM5, @ptrFromInt(0x40000c00));
    -            ///  Basic timers
    -            pub const TIM6 = @as(*volatile types.TIM6, @ptrFromInt(0x40001000));
    -            ///  Basic timers
    -            pub const TIM7 = @as(*volatile types.TIM6, @ptrFromInt(0x40001400));
    -            ///  General purpose timers
    -            pub const TIM12 = @as(*volatile types.TIM9, @ptrFromInt(0x40001800));
    -            ///  General-purpose-timers
    -            pub const TIM13 = @as(*volatile types.TIM10, @ptrFromInt(0x40001c00));
    -            ///  General-purpose-timers
    -            pub const TIM14 = @as(*volatile types.TIM10, @ptrFromInt(0x40002000));
    -            ///  Real-time clock
    -            pub const RTC = @as(*volatile types.RTC, @ptrFromInt(0x40002800));
    -            ///  Window watchdog
    -            pub const WWDG = @as(*volatile types.WWDG, @ptrFromInt(0x40002c00));
    -            ///  Independent watchdog
    -            pub const IWDG = @as(*volatile types.IWDG, @ptrFromInt(0x40003000));
    -            ///  Serial peripheral interface
    -            pub const I2S2ext = @as(*volatile types.SPI1, @ptrFromInt(0x40003400));
    -            ///  Serial peripheral interface
    -            pub const SPI2 = @as(*volatile types.SPI1, @ptrFromInt(0x40003800));
    -            ///  Serial peripheral interface
    -            pub const SPI3 = @as(*volatile types.SPI1, @ptrFromInt(0x40003c00));
    -            ///  Serial peripheral interface
    -            pub const I2S3ext = @as(*volatile types.SPI1, @ptrFromInt(0x40004000));
    -            ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART2 = @as(*volatile types.USART6, @ptrFromInt(0x40004400));
    -            ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART3 = @as(*volatile types.USART6, @ptrFromInt(0x40004800));
    -            ///  Universal synchronous asynchronous receiver transmitter
    -            pub const UART4 = @as(*volatile types.UART4, @ptrFromInt(0x40004c00));
    -            ///  Universal synchronous asynchronous receiver transmitter
    -            pub const UART5 = @as(*volatile types.UART4, @ptrFromInt(0x40005000));
    -            ///  Inter-integrated circuit
    -            pub const I2C1 = @as(*volatile types.I2C3, @ptrFromInt(0x40005400));
    -            ///  Inter-integrated circuit
    -            pub const I2C2 = @as(*volatile types.I2C3, @ptrFromInt(0x40005800));
    -            ///  Inter-integrated circuit
    -            pub const I2C3 = @as(*volatile types.I2C3, @ptrFromInt(0x40005c00));
    -            ///  Controller area network
    -            pub const CAN1 = @as(*volatile types.CAN1, @ptrFromInt(0x40006400));
    -            ///  Controller area network
    -            pub const CAN2 = @as(*volatile types.CAN1, @ptrFromInt(0x40006800));
    -            ///  Power control
    -            pub const PWR = @as(*volatile types.PWR, @ptrFromInt(0x40007000));
    -            ///  Digital-to-analog converter
    -            pub const DAC = @as(*volatile types.DAC, @ptrFromInt(0x40007400));
    -            ///  Universal synchronous asynchronous receiver transmitter
    -            pub const UART7 = @as(*volatile types.USART6, @ptrFromInt(0x40007800));
    -            ///  Universal synchronous asynchronous receiver transmitter
    -            pub const UART8 = @as(*volatile types.USART6, @ptrFromInt(0x40007c00));
    -            ///  Advanced-timers
    -            pub const TIM1 = @as(*volatile types.TIM1, @ptrFromInt(0x40010000));
    -            ///  Advanced-timers
    -            pub const TIM8 = @as(*volatile types.TIM1, @ptrFromInt(0x40010400));
    -            ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART1 = @as(*volatile types.USART6, @ptrFromInt(0x40011000));
    -            ///  Universal synchronous asynchronous receiver transmitter
    -            pub const USART6 = @as(*volatile types.USART6, @ptrFromInt(0x40011400));
    -            ///  Analog-to-digital converter
    -            pub const ADC1 = @as(*volatile types.ADC1, @ptrFromInt(0x40012000));
    -            ///  Analog-to-digital converter
    -            pub const ADC2 = @as(*volatile types.ADC1, @ptrFromInt(0x40012100));
    -            ///  Analog-to-digital converter
    -            pub const ADC3 = @as(*volatile types.ADC1, @ptrFromInt(0x40012200));
    -            ///  Common ADC registers
    -            pub const C_ADC = @as(*volatile types.C_ADC, @ptrFromInt(0x40012300));
    -            ///  Secure digital input/output interface
    -            pub const SDIO = @as(*volatile types.SDIO, @ptrFromInt(0x40012c00));
    -            ///  Serial peripheral interface
    -            pub const SPI1 = @as(*volatile types.SPI1, @ptrFromInt(0x40013000));
    -            ///  Serial peripheral interface
    -            pub const SPI4 = @as(*volatile types.SPI1, @ptrFromInt(0x40013400));
    -            ///  System configuration controller
    -            pub const SYSCFG = @as(*volatile types.SYSCFG, @ptrFromInt(0x40013800));
    -            ///  External interrupt/event controller
    -            pub const EXTI = @as(*volatile types.EXTI, @ptrFromInt(0x40013c00));
    -            ///  General purpose timers
    -            pub const TIM9 = @as(*volatile types.TIM9, @ptrFromInt(0x40014000));
    -            ///  General-purpose-timers
    -            pub const TIM10 = @as(*volatile types.TIM10, @ptrFromInt(0x40014400));
    -            ///  General-purpose-timers
    -            pub const TIM11 = @as(*volatile types.TIM11, @ptrFromInt(0x40014800));
    -            ///  Serial peripheral interface
    -            pub const SPI5 = @as(*volatile types.SPI1, @ptrFromInt(0x40015000));
    -            ///  Serial peripheral interface
    -            pub const SPI6 = @as(*volatile types.SPI1, @ptrFromInt(0x40015400));
    -            ///  Serial audio interface
    -            pub const SAI = @as(*volatile types.SAI, @ptrFromInt(0x40015800));
    -            ///  LCD-TFT Controller
    -            pub const LTDC = @as(*volatile types.LTDC, @ptrFromInt(0x40016800));
    -            ///  General-purpose I/Os
    -            pub const GPIOA = @as(*volatile types.GPIOA, @ptrFromInt(0x40020000));
    -            ///  General-purpose I/Os
    -            pub const GPIOB = @as(*volatile types.GPIOB, @ptrFromInt(0x40020400));
    -            ///  General-purpose I/Os
    -            pub const GPIOC = @as(*volatile types.GPIOK, @ptrFromInt(0x40020800));
    -            ///  General-purpose I/Os
    -            pub const GPIOD = @as(*volatile types.GPIOK, @ptrFromInt(0x40020c00));
    -            ///  General-purpose I/Os
    -            pub const GPIOE = @as(*volatile types.GPIOK, @ptrFromInt(0x40021000));
    -            ///  General-purpose I/Os
    -            pub const GPIOF = @as(*volatile types.GPIOK, @ptrFromInt(0x40021400));
    -            ///  General-purpose I/Os
    -            pub const GPIOG = @as(*volatile types.GPIOK, @ptrFromInt(0x40021800));
    -            ///  General-purpose I/Os
    -            pub const GPIOH = @as(*volatile types.GPIOK, @ptrFromInt(0x40021c00));
    -            ///  General-purpose I/Os
    -            pub const GPIOI = @as(*volatile types.GPIOK, @ptrFromInt(0x40022000));
    -            ///  General-purpose I/Os
    -            pub const GPIOJ = @as(*volatile types.GPIOK, @ptrFromInt(0x40022400));
    -            ///  General-purpose I/Os
    -            pub const GPIOK = @as(*volatile types.GPIOK, @ptrFromInt(0x40022800));
    -            ///  Cryptographic processor
    -            pub const CRC = @as(*volatile types.CRC, @ptrFromInt(0x40023000));
    -            ///  Reset and clock control
    -            pub const RCC = @as(*volatile types.RCC, @ptrFromInt(0x40023800));
    -            ///  FLASH
    -            pub const FLASH = @as(*volatile types.FLASH, @ptrFromInt(0x40023c00));
    -            ///  DMA controller
    -            pub const DMA1 = @as(*volatile types.DMA2, @ptrFromInt(0x40026000));
    -            ///  DMA controller
    -            pub const DMA2 = @as(*volatile types.DMA2, @ptrFromInt(0x40026400));
    -            ///  Ethernet: media access control (MAC)
    -            pub const Ethernet_MAC = @as(*volatile types.Ethernet_MAC, @ptrFromInt(0x40028000));
    -            ///  Ethernet: MAC management counters
    -            pub const Ethernet_MMC = @as(*volatile types.Ethernet_MMC, @ptrFromInt(0x40028100));
    -            ///  Ethernet: Precision time protocol
    -            pub const Ethernet_PTP = @as(*volatile types.Ethernet_PTP, @ptrFromInt(0x40028700));
    -            ///  Ethernet: DMA controller operation
    -            pub const Ethernet_DMA = @as(*volatile types.Ethernet_DMA, @ptrFromInt(0x40029000));
    -            ///  DMA2D controller
    -            pub const DMA2D = @as(*volatile types.DMA2D, @ptrFromInt(0x4002b000));
    -            ///  USB on the go high speed
    -            pub const OTG_HS_GLOBAL = @as(*volatile types.OTG_HS_GLOBAL, @ptrFromInt(0x40040000));
    -            ///  USB on the go high speed
    -            pub const OTG_HS_HOST = @as(*volatile types.OTG_HS_HOST, @ptrFromInt(0x40040400));
    -            ///  USB on the go high speed
    -            pub const OTG_HS_DEVICE = @as(*volatile types.OTG_HS_DEVICE, @ptrFromInt(0x40040800));
    -            ///  USB on the go high speed
    -            pub const OTG_HS_PWRCLK = @as(*volatile types.OTG_HS_PWRCLK, @ptrFromInt(0x40040e00));
    -            ///  USB on the go full speed
    -            pub const OTG_FS_GLOBAL = @as(*volatile types.OTG_FS_GLOBAL, @ptrFromInt(0x50000000));
    -            ///  USB on the go full speed
    -            pub const OTG_FS_HOST = @as(*volatile types.OTG_FS_HOST, @ptrFromInt(0x50000400));
    -            ///  USB on the go full speed
    -            pub const OTG_FS_DEVICE = @as(*volatile types.OTG_FS_DEVICE, @ptrFromInt(0x50000800));
    -            ///  USB on the go full speed
    -            pub const OTG_FS_PWRCLK = @as(*volatile types.OTG_FS_PWRCLK, @ptrFromInt(0x50000e00));
    -            ///  Digital camera interface
    -            pub const DCMI = @as(*volatile types.DCMI, @ptrFromInt(0x50050000));
    -            ///  Cryptographic processor
    -            pub const CRYP = @as(*volatile types.CRYP, @ptrFromInt(0x50060000));
    -            ///  Hash processor
    -            pub const HASH = @as(*volatile types.HASH, @ptrFromInt(0x50060400));
    -            ///  Random number generator
    -            pub const RNG = @as(*volatile types.RNG, @ptrFromInt(0x50060800));
    -            ///  Flexible memory controller
    -            pub const FMC = @as(*volatile types.FMC, @ptrFromInt(0xa0000000));
    -            ///  System control block ACTLR
    -            pub const SCB_ACTRL = @as(*volatile types.SCB_ACTRL, @ptrFromInt(0xe000e008));
    -            ///  SysTick timer
    -            pub const STK = @as(*volatile types.STK, @ptrFromInt(0xe000e010));
    -            ///  Nested Vectored Interrupt Controller
    -            pub const NVIC = @as(*volatile types.NVIC, @ptrFromInt(0xe000e100));
    -            ///  System control block
    -            pub const SCB = @as(*volatile types.SCB, @ptrFromInt(0xe000ed00));
    -            ///  Floating point unit CPACR
    -            pub const FPU_CPACR = @as(*volatile types.FPU_CPACR, @ptrFromInt(0xe000ed88));
    -            ///  Memory protection unit
    -            pub const MPU = @as(*volatile types.MPU, @ptrFromInt(0xe000ed90));
    -            ///  Nested vectored interrupt controller
    -            pub const NVIC_STIR = @as(*volatile types.NVIC_STIR, @ptrFromInt(0xe000ef00));
    -            ///  Floting point unit
    -            pub const FPU = @as(*volatile types.FPU, @ptrFromInt(0xe000ef34));
    -            ///  Debug support
    -            pub const DBG = @as(*volatile types.DBG, @ptrFromInt(0xe0042000));
    -        };
    -    };
    -};
    -
    -pub const types = struct {
    -    ///  Random number generator
    -    pub const RNG = extern struct {
    -        ///  control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            reserved2: u2,
    -            ///  Random number generator enable
    -            RNGEN: u1,
    -            ///  Interrupt enable
    -            IE: u1,
    -            padding: u28,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Data ready
    -            DRDY: u1,
    -            ///  Clock error current status
    -            CECS: u1,
    -            ///  Seed error current status
    -            SECS: u1,
    -            reserved5: u2,
    -            ///  Clock error interrupt status
    -            CEIS: u1,
    -            ///  Seed error interrupt status
    -            SEIS: u1,
    -            padding: u25,
    -        }),
    -        ///  data register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  Random data
    -            RNDATA: u32,
    -        }),
    -    };
    -
    -    ///  Hash processor
    -    pub const HASH = extern struct {
    -        ///  control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            reserved2: u2,
    -            ///  Initialize message digest calculation
    -            INIT: u1,
    -            ///  DMA enable
    -            DMAE: u1,
    -            ///  Data type selection
    -            DATATYPE: u2,
    -            ///  Mode selection
    -            MODE: u1,
    -            ///  Algorithm selection
    -            ALGO0: u1,
    -            ///  Number of words already pushed
    -            NBW: u4,
    -            ///  DIN not empty
    -            DINNE: u1,
    -            ///  Multiple DMA Transfers
    -            MDMAT: u1,
    -            reserved16: u2,
    -            ///  Long key selection
    -            LKEY: u1,
    -            reserved18: u1,
    -            ///  ALGO
    -            ALGO1: u1,
    -            padding: u13,
    -        }),
    -        ///  data input register
    -        DIN: mmio.Mmio(packed struct(u32) {
    -            ///  Data input
    -            DATAIN: u32,
    -        }),
    -        ///  start register
    -        STR: mmio.Mmio(packed struct(u32) {
    -            ///  Number of valid bits in the last word of the message
    -            NBLW: u5,
    -            reserved8: u3,
    -            ///  Digest calculation
    -            DCAL: u1,
    -            padding: u23,
    -        }),
    -        ///  digest registers
    -        HR0: mmio.Mmio(packed struct(u32) {
    -            ///  H0
    -            H0: u32,
    -        }),
    -        ///  digest registers
    -        HR1: mmio.Mmio(packed struct(u32) {
    -            ///  H1
    -            H1: u32,
    -        }),
    -        ///  digest registers
    -        HR2: mmio.Mmio(packed struct(u32) {
    -            ///  H2
    -            H2: u32,
    -        }),
    -        ///  digest registers
    -        HR3: mmio.Mmio(packed struct(u32) {
    -            ///  H3
    -            H3: u32,
    -        }),
    -        ///  digest registers
    -        HR4: mmio.Mmio(packed struct(u32) {
    -            ///  H4
    -            H4: u32,
    -        }),
    -        ///  interrupt enable register
    -        IMR: mmio.Mmio(packed struct(u32) {
    -            ///  Data input interrupt enable
    -            DINIE: u1,
    -            ///  Digest calculation completion interrupt enable
    -            DCIE: u1,
    -            padding: u30,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Data input interrupt status
    -            DINIS: u1,
    -            ///  Digest calculation completion interrupt status
    -            DCIS: u1,
    -            ///  DMA Status
    -            DMAS: u1,
    -            ///  Busy bit
    -            BUSY: u1,
    -            padding: u28,
    -        }),
    -        reserved248: [208]u8,
    -        ///  context swap registers
    -        CSR0: mmio.Mmio(packed struct(u32) {
    -            ///  CSR0
    -            CSR0: u32,
    -        }),
    -        ///  context swap registers
    -        CSR1: mmio.Mmio(packed struct(u32) {
    -            ///  CSR1
    -            CSR1: u32,
    -        }),
    -        ///  context swap registers
    -        CSR2: mmio.Mmio(packed struct(u32) {
    -            ///  CSR2
    -            CSR2: u32,
    -        }),
    -        ///  context swap registers
    -        CSR3: mmio.Mmio(packed struct(u32) {
    -            ///  CSR3
    -            CSR3: u32,
    -        }),
    -        ///  context swap registers
    -        CSR4: mmio.Mmio(packed struct(u32) {
    -            ///  CSR4
    -            CSR4: u32,
    -        }),
    -        ///  context swap registers
    -        CSR5: mmio.Mmio(packed struct(u32) {
    -            ///  CSR5
    -            CSR5: u32,
    -        }),
    -        ///  context swap registers
    -        CSR6: mmio.Mmio(packed struct(u32) {
    -            ///  CSR6
    -            CSR6: u32,
    -        }),
    -        ///  context swap registers
    -        CSR7: mmio.Mmio(packed struct(u32) {
    -            ///  CSR7
    -            CSR7: u32,
    -        }),
    -        ///  context swap registers
    -        CSR8: mmio.Mmio(packed struct(u32) {
    -            ///  CSR8
    -            CSR8: u32,
    -        }),
    -        ///  context swap registers
    -        CSR9: mmio.Mmio(packed struct(u32) {
    -            ///  CSR9
    -            CSR9: u32,
    -        }),
    -        ///  context swap registers
    -        CSR10: mmio.Mmio(packed struct(u32) {
    -            ///  CSR10
    -            CSR10: u32,
    -        }),
    -        ///  context swap registers
    -        CSR11: mmio.Mmio(packed struct(u32) {
    -            ///  CSR11
    -            CSR11: u32,
    -        }),
    -        ///  context swap registers
    -        CSR12: mmio.Mmio(packed struct(u32) {
    -            ///  CSR12
    -            CSR12: u32,
    -        }),
    -        ///  context swap registers
    -        CSR13: mmio.Mmio(packed struct(u32) {
    -            ///  CSR13
    -            CSR13: u32,
    -        }),
    -        ///  context swap registers
    -        CSR14: mmio.Mmio(packed struct(u32) {
    -            ///  CSR14
    -            CSR14: u32,
    -        }),
    -        ///  context swap registers
    -        CSR15: mmio.Mmio(packed struct(u32) {
    -            ///  CSR15
    -            CSR15: u32,
    -        }),
    -        ///  context swap registers
    -        CSR16: mmio.Mmio(packed struct(u32) {
    -            ///  CSR16
    -            CSR16: u32,
    -        }),
    -        ///  context swap registers
    -        CSR17: mmio.Mmio(packed struct(u32) {
    -            ///  CSR17
    -            CSR17: u32,
    -        }),
    -        ///  context swap registers
    -        CSR18: mmio.Mmio(packed struct(u32) {
    -            ///  CSR18
    -            CSR18: u32,
    -        }),
    -        ///  context swap registers
    -        CSR19: mmio.Mmio(packed struct(u32) {
    -            ///  CSR19
    -            CSR19: u32,
    -        }),
    -        ///  context swap registers
    -        CSR20: mmio.Mmio(packed struct(u32) {
    -            ///  CSR20
    -            CSR20: u32,
    -        }),
    -        ///  context swap registers
    -        CSR21: mmio.Mmio(packed struct(u32) {
    -            ///  CSR21
    -            CSR21: u32,
    -        }),
    -        ///  context swap registers
    -        CSR22: mmio.Mmio(packed struct(u32) {
    -            ///  CSR22
    -            CSR22: u32,
    -        }),
    -        ///  context swap registers
    -        CSR23: mmio.Mmio(packed struct(u32) {
    -            ///  CSR23
    -            CSR23: u32,
    -        }),
    -        ///  context swap registers
    -        CSR24: mmio.Mmio(packed struct(u32) {
    -            ///  CSR24
    -            CSR24: u32,
    -        }),
    -        ///  context swap registers
    -        CSR25: mmio.Mmio(packed struct(u32) {
    -            ///  CSR25
    -            CSR25: u32,
    -        }),
    -        ///  context swap registers
    -        CSR26: mmio.Mmio(packed struct(u32) {
    -            ///  CSR26
    -            CSR26: u32,
    -        }),
    -        ///  context swap registers
    -        CSR27: mmio.Mmio(packed struct(u32) {
    -            ///  CSR27
    -            CSR27: u32,
    -        }),
    -        ///  context swap registers
    -        CSR28: mmio.Mmio(packed struct(u32) {
    -            ///  CSR28
    -            CSR28: u32,
    -        }),
    -        ///  context swap registers
    -        CSR29: mmio.Mmio(packed struct(u32) {
    -            ///  CSR29
    -            CSR29: u32,
    -        }),
    -        ///  context swap registers
    -        CSR30: mmio.Mmio(packed struct(u32) {
    -            ///  CSR30
    -            CSR30: u32,
    -        }),
    -        ///  context swap registers
    -        CSR31: mmio.Mmio(packed struct(u32) {
    -            ///  CSR31
    -            CSR31: u32,
    -        }),
    -        ///  context swap registers
    -        CSR32: mmio.Mmio(packed struct(u32) {
    -            ///  CSR32
    -            CSR32: u32,
    -        }),
    -        ///  context swap registers
    -        CSR33: mmio.Mmio(packed struct(u32) {
    -            ///  CSR33
    -            CSR33: u32,
    -        }),
    -        ///  context swap registers
    -        CSR34: mmio.Mmio(packed struct(u32) {
    -            ///  CSR34
    -            CSR34: u32,
    -        }),
    -        ///  context swap registers
    -        CSR35: mmio.Mmio(packed struct(u32) {
    -            ///  CSR35
    -            CSR35: u32,
    -        }),
    -        ///  context swap registers
    -        CSR36: mmio.Mmio(packed struct(u32) {
    -            ///  CSR36
    -            CSR36: u32,
    -        }),
    -        ///  context swap registers
    -        CSR37: mmio.Mmio(packed struct(u32) {
    -            ///  CSR37
    -            CSR37: u32,
    -        }),
    -        ///  context swap registers
    -        CSR38: mmio.Mmio(packed struct(u32) {
    -            ///  CSR38
    -            CSR38: u32,
    -        }),
    -        ///  context swap registers
    -        CSR39: mmio.Mmio(packed struct(u32) {
    -            ///  CSR39
    -            CSR39: u32,
    -        }),
    -        ///  context swap registers
    -        CSR40: mmio.Mmio(packed struct(u32) {
    -            ///  CSR40
    -            CSR40: u32,
    -        }),
    -        ///  context swap registers
    -        CSR41: mmio.Mmio(packed struct(u32) {
    -            ///  CSR41
    -            CSR41: u32,
    -        }),
    -        ///  context swap registers
    -        CSR42: mmio.Mmio(packed struct(u32) {
    -            ///  CSR42
    -            CSR42: u32,
    -        }),
    -        ///  context swap registers
    -        CSR43: mmio.Mmio(packed struct(u32) {
    -            ///  CSR43
    -            CSR43: u32,
    -        }),
    -        ///  context swap registers
    -        CSR44: mmio.Mmio(packed struct(u32) {
    -            ///  CSR44
    -            CSR44: u32,
    -        }),
    -        ///  context swap registers
    -        CSR45: mmio.Mmio(packed struct(u32) {
    -            ///  CSR45
    -            CSR45: u32,
    -        }),
    -        ///  context swap registers
    -        CSR46: mmio.Mmio(packed struct(u32) {
    -            ///  CSR46
    -            CSR46: u32,
    -        }),
    -        ///  context swap registers
    -        CSR47: mmio.Mmio(packed struct(u32) {
    -            ///  CSR47
    -            CSR47: u32,
    -        }),
    -        ///  context swap registers
    -        CSR48: mmio.Mmio(packed struct(u32) {
    -            ///  CSR48
    -            CSR48: u32,
    -        }),
    -        ///  context swap registers
    -        CSR49: mmio.Mmio(packed struct(u32) {
    -            ///  CSR49
    -            CSR49: u32,
    -        }),
    -        ///  context swap registers
    -        CSR50: mmio.Mmio(packed struct(u32) {
    -            ///  CSR50
    -            CSR50: u32,
    -        }),
    -        ///  context swap registers
    -        CSR51: mmio.Mmio(packed struct(u32) {
    -            ///  CSR51
    -            CSR51: u32,
    -        }),
    -        ///  context swap registers
    -        CSR52: mmio.Mmio(packed struct(u32) {
    -            ///  CSR52
    -            CSR52: u32,
    -        }),
    -        ///  context swap registers
    -        CSR53: mmio.Mmio(packed struct(u32) {
    -            ///  CSR53
    -            CSR53: u32,
    -        }),
    -        reserved784: [320]u8,
    -        ///  HASH digest register
    -        HASH_HR0: mmio.Mmio(packed struct(u32) {
    -            ///  H0
    -            H0: u32,
    -        }),
    -        ///  read-only
    -        HASH_HR1: mmio.Mmio(packed struct(u32) {
    -            ///  H1
    -            H1: u32,
    -        }),
    -        ///  read-only
    -        HASH_HR2: mmio.Mmio(packed struct(u32) {
    -            ///  H2
    -            H2: u32,
    -        }),
    -        ///  read-only
    -        HASH_HR3: mmio.Mmio(packed struct(u32) {
    -            ///  H3
    -            H3: u32,
    -        }),
    -        ///  read-only
    -        HASH_HR4: mmio.Mmio(packed struct(u32) {
    -            ///  H4
    -            H4: u32,
    -        }),
    -        ///  read-only
    -        HASH_HR5: mmio.Mmio(packed struct(u32) {
    -            ///  H5
    -            H5: u32,
    -        }),
    -        ///  read-only
    -        HASH_HR6: mmio.Mmio(packed struct(u32) {
    -            ///  H6
    -            H6: u32,
    -        }),
    -        ///  read-only
    -        HASH_HR7: mmio.Mmio(packed struct(u32) {
    -            ///  H7
    -            H7: u32,
    -        }),
    -    };
    -
    -    ///  Cryptographic processor
    -    pub const CRYP = extern struct {
    -        ///  control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            reserved2: u2,
    -            ///  Algorithm direction
    -            ALGODIR: u1,
    -            ///  Algorithm mode
    -            ALGOMODE0: u3,
    -            ///  Data type selection
    -            DATATYPE: u2,
    -            ///  Key size selection (AES mode only)
    -            KEYSIZE: u2,
    -            reserved14: u4,
    -            ///  FIFO flush
    -            FFLUSH: u1,
    -            ///  Cryptographic processor enable
    -            CRYPEN: u1,
    -            ///  GCM_CCMPH
    -            GCM_CCMPH: u2,
    -            reserved19: u1,
    -            ///  ALGOMODE
    -            ALGOMODE3: u1,
    -            padding: u12,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Input FIFO empty
    -            IFEM: u1,
    -            ///  Input FIFO not full
    -            IFNF: u1,
    -            ///  Output FIFO not empty
    -            OFNE: u1,
    -            ///  Output FIFO full
    -            OFFU: u1,
    -            ///  Busy bit
    -            BUSY: u1,
    -            padding: u27,
    -        }),
    -        ///  data input register
    -        DIN: mmio.Mmio(packed struct(u32) {
    -            ///  Data input
    -            DATAIN: u32,
    -        }),
    -        ///  data output register
    -        DOUT: mmio.Mmio(packed struct(u32) {
    -            ///  Data output
    -            DATAOUT: u32,
    -        }),
    -        ///  DMA control register
    -        DMACR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA input enable
    -            DIEN: u1,
    -            ///  DMA output enable
    -            DOEN: u1,
    -            padding: u30,
    -        }),
    -        ///  interrupt mask set/clear register
    -        IMSCR: mmio.Mmio(packed struct(u32) {
    -            ///  Input FIFO service interrupt mask
    -            INIM: u1,
    -            ///  Output FIFO service interrupt mask
    -            OUTIM: u1,
    -            padding: u30,
    -        }),
    -        ///  raw interrupt status register
    -        RISR: mmio.Mmio(packed struct(u32) {
    -            ///  Input FIFO service raw interrupt status
    -            INRIS: u1,
    -            ///  Output FIFO service raw interrupt status
    -            OUTRIS: u1,
    -            padding: u30,
    -        }),
    -        ///  masked interrupt status register
    -        MISR: mmio.Mmio(packed struct(u32) {
    -            ///  Input FIFO service masked interrupt status
    -            INMIS: u1,
    -            ///  Output FIFO service masked interrupt status
    -            OUTMIS: u1,
    -            padding: u30,
    -        }),
    -        ///  key registers
    -        K0LR: mmio.Mmio(packed struct(u32) {
    -            ///  b224
    -            b224: u1,
    -            ///  b225
    -            b225: u1,
    -            ///  b226
    -            b226: u1,
    -            ///  b227
    -            b227: u1,
    -            ///  b228
    -            b228: u1,
    -            ///  b229
    -            b229: u1,
    -            ///  b230
    -            b230: u1,
    -            ///  b231
    -            b231: u1,
    -            ///  b232
    -            b232: u1,
    -            ///  b233
    -            b233: u1,
    -            ///  b234
    -            b234: u1,
    -            ///  b235
    -            b235: u1,
    -            ///  b236
    -            b236: u1,
    -            ///  b237
    -            b237: u1,
    -            ///  b238
    -            b238: u1,
    -            ///  b239
    -            b239: u1,
    -            ///  b240
    -            b240: u1,
    -            ///  b241
    -            b241: u1,
    -            ///  b242
    -            b242: u1,
    -            ///  b243
    -            b243: u1,
    -            ///  b244
    -            b244: u1,
    -            ///  b245
    -            b245: u1,
    -            ///  b246
    -            b246: u1,
    -            ///  b247
    -            b247: u1,
    -            ///  b248
    -            b248: u1,
    -            ///  b249
    -            b249: u1,
    -            ///  b250
    -            b250: u1,
    -            ///  b251
    -            b251: u1,
    -            ///  b252
    -            b252: u1,
    -            ///  b253
    -            b253: u1,
    -            ///  b254
    -            b254: u1,
    -            ///  b255
    -            b255: u1,
    -        }),
    -        ///  key registers
    -        K0RR: mmio.Mmio(packed struct(u32) {
    -            ///  b192
    -            b192: u1,
    -            ///  b193
    -            b193: u1,
    -            ///  b194
    -            b194: u1,
    -            ///  b195
    -            b195: u1,
    -            ///  b196
    -            b196: u1,
    -            ///  b197
    -            b197: u1,
    -            ///  b198
    -            b198: u1,
    -            ///  b199
    -            b199: u1,
    -            ///  b200
    -            b200: u1,
    -            ///  b201
    -            b201: u1,
    -            ///  b202
    -            b202: u1,
    -            ///  b203
    -            b203: u1,
    -            ///  b204
    -            b204: u1,
    -            ///  b205
    -            b205: u1,
    -            ///  b206
    -            b206: u1,
    -            ///  b207
    -            b207: u1,
    -            ///  b208
    -            b208: u1,
    -            ///  b209
    -            b209: u1,
    -            ///  b210
    -            b210: u1,
    -            ///  b211
    -            b211: u1,
    -            ///  b212
    -            b212: u1,
    -            ///  b213
    -            b213: u1,
    -            ///  b214
    -            b214: u1,
    -            ///  b215
    -            b215: u1,
    -            ///  b216
    -            b216: u1,
    -            ///  b217
    -            b217: u1,
    -            ///  b218
    -            b218: u1,
    -            ///  b219
    -            b219: u1,
    -            ///  b220
    -            b220: u1,
    -            ///  b221
    -            b221: u1,
    -            ///  b222
    -            b222: u1,
    -            ///  b223
    -            b223: u1,
    -        }),
    -        ///  key registers
    -        K1LR: mmio.Mmio(packed struct(u32) {
    -            ///  b160
    -            b160: u1,
    -            ///  b161
    -            b161: u1,
    -            ///  b162
    -            b162: u1,
    -            ///  b163
    -            b163: u1,
    -            ///  b164
    -            b164: u1,
    -            ///  b165
    -            b165: u1,
    -            ///  b166
    -            b166: u1,
    -            ///  b167
    -            b167: u1,
    -            ///  b168
    -            b168: u1,
    -            ///  b169
    -            b169: u1,
    -            ///  b170
    -            b170: u1,
    -            ///  b171
    -            b171: u1,
    -            ///  b172
    -            b172: u1,
    -            ///  b173
    -            b173: u1,
    -            ///  b174
    -            b174: u1,
    -            ///  b175
    -            b175: u1,
    -            ///  b176
    -            b176: u1,
    -            ///  b177
    -            b177: u1,
    -            ///  b178
    -            b178: u1,
    -            ///  b179
    -            b179: u1,
    -            ///  b180
    -            b180: u1,
    -            ///  b181
    -            b181: u1,
    -            ///  b182
    -            b182: u1,
    -            ///  b183
    -            b183: u1,
    -            ///  b184
    -            b184: u1,
    -            ///  b185
    -            b185: u1,
    -            ///  b186
    -            b186: u1,
    -            ///  b187
    -            b187: u1,
    -            ///  b188
    -            b188: u1,
    -            ///  b189
    -            b189: u1,
    -            ///  b190
    -            b190: u1,
    -            ///  b191
    -            b191: u1,
    -        }),
    -        ///  key registers
    -        K1RR: mmio.Mmio(packed struct(u32) {
    -            ///  b128
    -            b128: u1,
    -            ///  b129
    -            b129: u1,
    -            ///  b130
    -            b130: u1,
    -            ///  b131
    -            b131: u1,
    -            ///  b132
    -            b132: u1,
    -            ///  b133
    -            b133: u1,
    -            ///  b134
    -            b134: u1,
    -            ///  b135
    -            b135: u1,
    -            ///  b136
    -            b136: u1,
    -            ///  b137
    -            b137: u1,
    -            ///  b138
    -            b138: u1,
    -            ///  b139
    -            b139: u1,
    -            ///  b140
    -            b140: u1,
    -            ///  b141
    -            b141: u1,
    -            ///  b142
    -            b142: u1,
    -            ///  b143
    -            b143: u1,
    -            ///  b144
    -            b144: u1,
    -            ///  b145
    -            b145: u1,
    -            ///  b146
    -            b146: u1,
    -            ///  b147
    -            b147: u1,
    -            ///  b148
    -            b148: u1,
    -            ///  b149
    -            b149: u1,
    -            ///  b150
    -            b150: u1,
    -            ///  b151
    -            b151: u1,
    -            ///  b152
    -            b152: u1,
    -            ///  b153
    -            b153: u1,
    -            ///  b154
    -            b154: u1,
    -            ///  b155
    -            b155: u1,
    -            ///  b156
    -            b156: u1,
    -            ///  b157
    -            b157: u1,
    -            ///  b158
    -            b158: u1,
    -            ///  b159
    -            b159: u1,
    -        }),
    -        ///  key registers
    -        K2LR: mmio.Mmio(packed struct(u32) {
    -            ///  b96
    -            b96: u1,
    -            ///  b97
    -            b97: u1,
    -            ///  b98
    -            b98: u1,
    -            ///  b99
    -            b99: u1,
    -            ///  b100
    -            b100: u1,
    -            ///  b101
    -            b101: u1,
    -            ///  b102
    -            b102: u1,
    -            ///  b103
    -            b103: u1,
    -            ///  b104
    -            b104: u1,
    -            ///  b105
    -            b105: u1,
    -            ///  b106
    -            b106: u1,
    -            ///  b107
    -            b107: u1,
    -            ///  b108
    -            b108: u1,
    -            ///  b109
    -            b109: u1,
    -            ///  b110
    -            b110: u1,
    -            ///  b111
    -            b111: u1,
    -            ///  b112
    -            b112: u1,
    -            ///  b113
    -            b113: u1,
    -            ///  b114
    -            b114: u1,
    -            ///  b115
    -            b115: u1,
    -            ///  b116
    -            b116: u1,
    -            ///  b117
    -            b117: u1,
    -            ///  b118
    -            b118: u1,
    -            ///  b119
    -            b119: u1,
    -            ///  b120
    -            b120: u1,
    -            ///  b121
    -            b121: u1,
    -            ///  b122
    -            b122: u1,
    -            ///  b123
    -            b123: u1,
    -            ///  b124
    -            b124: u1,
    -            ///  b125
    -            b125: u1,
    -            ///  b126
    -            b126: u1,
    -            ///  b127
    -            b127: u1,
    -        }),
    -        ///  key registers
    -        K2RR: mmio.Mmio(packed struct(u32) {
    -            ///  b64
    -            b64: u1,
    -            ///  b65
    -            b65: u1,
    -            ///  b66
    -            b66: u1,
    -            ///  b67
    -            b67: u1,
    -            ///  b68
    -            b68: u1,
    -            ///  b69
    -            b69: u1,
    -            ///  b70
    -            b70: u1,
    -            ///  b71
    -            b71: u1,
    -            ///  b72
    -            b72: u1,
    -            ///  b73
    -            b73: u1,
    -            ///  b74
    -            b74: u1,
    -            ///  b75
    -            b75: u1,
    -            ///  b76
    -            b76: u1,
    -            ///  b77
    -            b77: u1,
    -            ///  b78
    -            b78: u1,
    -            ///  b79
    -            b79: u1,
    -            ///  b80
    -            b80: u1,
    -            ///  b81
    -            b81: u1,
    -            ///  b82
    -            b82: u1,
    -            ///  b83
    -            b83: u1,
    -            ///  b84
    -            b84: u1,
    -            ///  b85
    -            b85: u1,
    -            ///  b86
    -            b86: u1,
    -            ///  b87
    -            b87: u1,
    -            ///  b88
    -            b88: u1,
    -            ///  b89
    -            b89: u1,
    -            ///  b90
    -            b90: u1,
    -            ///  b91
    -            b91: u1,
    -            ///  b92
    -            b92: u1,
    -            ///  b93
    -            b93: u1,
    -            ///  b94
    -            b94: u1,
    -            ///  b95
    -            b95: u1,
    -        }),
    -        ///  key registers
    -        K3LR: mmio.Mmio(packed struct(u32) {
    -            ///  b32
    -            b32: u1,
    -            ///  b33
    -            b33: u1,
    -            ///  b34
    -            b34: u1,
    -            ///  b35
    -            b35: u1,
    -            ///  b36
    -            b36: u1,
    -            ///  b37
    -            b37: u1,
    -            ///  b38
    -            b38: u1,
    -            ///  b39
    -            b39: u1,
    -            ///  b40
    -            b40: u1,
    -            ///  b41
    -            b41: u1,
    -            ///  b42
    -            b42: u1,
    -            ///  b43
    -            b43: u1,
    -            ///  b44
    -            b44: u1,
    -            ///  b45
    -            b45: u1,
    -            ///  b46
    -            b46: u1,
    -            ///  b47
    -            b47: u1,
    -            ///  b48
    -            b48: u1,
    -            ///  b49
    -            b49: u1,
    -            ///  b50
    -            b50: u1,
    -            ///  b51
    -            b51: u1,
    -            ///  b52
    -            b52: u1,
    -            ///  b53
    -            b53: u1,
    -            ///  b54
    -            b54: u1,
    -            ///  b55
    -            b55: u1,
    -            ///  b56
    -            b56: u1,
    -            ///  b57
    -            b57: u1,
    -            ///  b58
    -            b58: u1,
    -            ///  b59
    -            b59: u1,
    -            ///  b60
    -            b60: u1,
    -            ///  b61
    -            b61: u1,
    -            ///  b62
    -            b62: u1,
    -            ///  b63
    -            b63: u1,
    -        }),
    -        ///  key registers
    -        K3RR: mmio.Mmio(packed struct(u32) {
    -            ///  b0
    -            b0: u1,
    -            ///  b1
    -            b1: u1,
    -            ///  b2
    -            b2: u1,
    -            ///  b3
    -            b3: u1,
    -            ///  b4
    -            b4: u1,
    -            ///  b5
    -            b5: u1,
    -            ///  b6
    -            b6: u1,
    -            ///  b7
    -            b7: u1,
    -            ///  b8
    -            b8: u1,
    -            ///  b9
    -            b9: u1,
    -            ///  b10
    -            b10: u1,
    -            ///  b11
    -            b11: u1,
    -            ///  b12
    -            b12: u1,
    -            ///  b13
    -            b13: u1,
    -            ///  b14
    -            b14: u1,
    -            ///  b15
    -            b15: u1,
    -            ///  b16
    -            b16: u1,
    -            ///  b17
    -            b17: u1,
    -            ///  b18
    -            b18: u1,
    -            ///  b19
    -            b19: u1,
    -            ///  b20
    -            b20: u1,
    -            ///  b21
    -            b21: u1,
    -            ///  b22
    -            b22: u1,
    -            ///  b23
    -            b23: u1,
    -            ///  b24
    -            b24: u1,
    -            ///  b25
    -            b25: u1,
    -            ///  b26
    -            b26: u1,
    -            ///  b27
    -            b27: u1,
    -            ///  b28
    -            b28: u1,
    -            ///  b29
    -            b29: u1,
    -            ///  b30
    -            b30: u1,
    -            ///  b31
    -            b31: u1,
    -        }),
    -        ///  initialization vector registers
    -        IV0LR: mmio.Mmio(packed struct(u32) {
    -            ///  IV31
    -            IV31: u1,
    -            ///  IV30
    -            IV30: u1,
    -            ///  IV29
    -            IV29: u1,
    -            ///  IV28
    -            IV28: u1,
    -            ///  IV27
    -            IV27: u1,
    -            ///  IV26
    -            IV26: u1,
    -            ///  IV25
    -            IV25: u1,
    -            ///  IV24
    -            IV24: u1,
    -            ///  IV23
    -            IV23: u1,
    -            ///  IV22
    -            IV22: u1,
    -            ///  IV21
    -            IV21: u1,
    -            ///  IV20
    -            IV20: u1,
    -            ///  IV19
    -            IV19: u1,
    -            ///  IV18
    -            IV18: u1,
    -            ///  IV17
    -            IV17: u1,
    -            ///  IV16
    -            IV16: u1,
    -            ///  IV15
    -            IV15: u1,
    -            ///  IV14
    -            IV14: u1,
    -            ///  IV13
    -            IV13: u1,
    -            ///  IV12
    -            IV12: u1,
    -            ///  IV11
    -            IV11: u1,
    -            ///  IV10
    -            IV10: u1,
    -            ///  IV9
    -            IV9: u1,
    -            ///  IV8
    -            IV8: u1,
    -            ///  IV7
    -            IV7: u1,
    -            ///  IV6
    -            IV6: u1,
    -            ///  IV5
    -            IV5: u1,
    -            ///  IV4
    -            IV4: u1,
    -            ///  IV3
    -            IV3: u1,
    -            ///  IV2
    -            IV2: u1,
    -            ///  IV1
    -            IV1: u1,
    -            ///  IV0
    -            IV0: u1,
    -        }),
    -        ///  initialization vector registers
    -        IV0RR: mmio.Mmio(packed struct(u32) {
    -            ///  IV63
    -            IV63: u1,
    -            ///  IV62
    -            IV62: u1,
    -            ///  IV61
    -            IV61: u1,
    -            ///  IV60
    -            IV60: u1,
    -            ///  IV59
    -            IV59: u1,
    -            ///  IV58
    -            IV58: u1,
    -            ///  IV57
    -            IV57: u1,
    -            ///  IV56
    -            IV56: u1,
    -            ///  IV55
    -            IV55: u1,
    -            ///  IV54
    -            IV54: u1,
    -            ///  IV53
    -            IV53: u1,
    -            ///  IV52
    -            IV52: u1,
    -            ///  IV51
    -            IV51: u1,
    -            ///  IV50
    -            IV50: u1,
    -            ///  IV49
    -            IV49: u1,
    -            ///  IV48
    -            IV48: u1,
    -            ///  IV47
    -            IV47: u1,
    -            ///  IV46
    -            IV46: u1,
    -            ///  IV45
    -            IV45: u1,
    -            ///  IV44
    -            IV44: u1,
    -            ///  IV43
    -            IV43: u1,
    -            ///  IV42
    -            IV42: u1,
    -            ///  IV41
    -            IV41: u1,
    -            ///  IV40
    -            IV40: u1,
    -            ///  IV39
    -            IV39: u1,
    -            ///  IV38
    -            IV38: u1,
    -            ///  IV37
    -            IV37: u1,
    -            ///  IV36
    -            IV36: u1,
    -            ///  IV35
    -            IV35: u1,
    -            ///  IV34
    -            IV34: u1,
    -            ///  IV33
    -            IV33: u1,
    -            ///  IV32
    -            IV32: u1,
    -        }),
    -        ///  initialization vector registers
    -        IV1LR: mmio.Mmio(packed struct(u32) {
    -            ///  IV95
    -            IV95: u1,
    -            ///  IV94
    -            IV94: u1,
    -            ///  IV93
    -            IV93: u1,
    -            ///  IV92
    -            IV92: u1,
    -            ///  IV91
    -            IV91: u1,
    -            ///  IV90
    -            IV90: u1,
    -            ///  IV89
    -            IV89: u1,
    -            ///  IV88
    -            IV88: u1,
    -            ///  IV87
    -            IV87: u1,
    -            ///  IV86
    -            IV86: u1,
    -            ///  IV85
    -            IV85: u1,
    -            ///  IV84
    -            IV84: u1,
    -            ///  IV83
    -            IV83: u1,
    -            ///  IV82
    -            IV82: u1,
    -            ///  IV81
    -            IV81: u1,
    -            ///  IV80
    -            IV80: u1,
    -            ///  IV79
    -            IV79: u1,
    -            ///  IV78
    -            IV78: u1,
    -            ///  IV77
    -            IV77: u1,
    -            ///  IV76
    -            IV76: u1,
    -            ///  IV75
    -            IV75: u1,
    -            ///  IV74
    -            IV74: u1,
    -            ///  IV73
    -            IV73: u1,
    -            ///  IV72
    -            IV72: u1,
    -            ///  IV71
    -            IV71: u1,
    -            ///  IV70
    -            IV70: u1,
    -            ///  IV69
    -            IV69: u1,
    -            ///  IV68
    -            IV68: u1,
    -            ///  IV67
    -            IV67: u1,
    -            ///  IV66
    -            IV66: u1,
    -            ///  IV65
    -            IV65: u1,
    -            ///  IV64
    -            IV64: u1,
    -        }),
    -        ///  initialization vector registers
    -        IV1RR: mmio.Mmio(packed struct(u32) {
    -            ///  IV127
    -            IV127: u1,
    -            ///  IV126
    -            IV126: u1,
    -            ///  IV125
    -            IV125: u1,
    -            ///  IV124
    -            IV124: u1,
    -            ///  IV123
    -            IV123: u1,
    -            ///  IV122
    -            IV122: u1,
    -            ///  IV121
    -            IV121: u1,
    -            ///  IV120
    -            IV120: u1,
    -            ///  IV119
    -            IV119: u1,
    -            ///  IV118
    -            IV118: u1,
    -            ///  IV117
    -            IV117: u1,
    -            ///  IV116
    -            IV116: u1,
    -            ///  IV115
    -            IV115: u1,
    -            ///  IV114
    -            IV114: u1,
    -            ///  IV113
    -            IV113: u1,
    -            ///  IV112
    -            IV112: u1,
    -            ///  IV111
    -            IV111: u1,
    -            ///  IV110
    -            IV110: u1,
    -            ///  IV109
    -            IV109: u1,
    -            ///  IV108
    -            IV108: u1,
    -            ///  IV107
    -            IV107: u1,
    -            ///  IV106
    -            IV106: u1,
    -            ///  IV105
    -            IV105: u1,
    -            ///  IV104
    -            IV104: u1,
    -            ///  IV103
    -            IV103: u1,
    -            ///  IV102
    -            IV102: u1,
    -            ///  IV101
    -            IV101: u1,
    -            ///  IV100
    -            IV100: u1,
    -            ///  IV99
    -            IV99: u1,
    -            ///  IV98
    -            IV98: u1,
    -            ///  IV97
    -            IV97: u1,
    -            ///  IV96
    -            IV96: u1,
    -        }),
    -        ///  context swap register
    -        CSGCMCCM0R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCMCCM0R
    -            CSGCMCCM0R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCMCCM1R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCMCCM1R
    -            CSGCMCCM1R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCMCCM2R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCMCCM2R
    -            CSGCMCCM2R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCMCCM3R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCMCCM3R
    -            CSGCMCCM3R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCMCCM4R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCMCCM4R
    -            CSGCMCCM4R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCMCCM5R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCMCCM5R
    -            CSGCMCCM5R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCMCCM6R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCMCCM6R
    -            CSGCMCCM6R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCMCCM7R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCMCCM7R
    -            CSGCMCCM7R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCM0R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCM0R
    -            CSGCM0R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCM1R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCM1R
    -            CSGCM1R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCM2R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCM2R
    -            CSGCM2R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCM3R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCM3R
    -            CSGCM3R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCM4R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCM4R
    -            CSGCM4R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCM5R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCM5R
    -            CSGCM5R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCM6R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCM6R
    -            CSGCM6R: u32,
    -        }),
    -        ///  context swap register
    -        CSGCM7R: mmio.Mmio(packed struct(u32) {
    -            ///  CSGCM7R
    -            CSGCM7R: u32,
    -        }),
    -    };
    -
    -    ///  Digital camera interface
    -    pub const DCMI = extern struct {
    -        ///  control register 1
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  Capture enable
    -            CAPTURE: u1,
    -            ///  Capture mode
    -            CM: u1,
    -            ///  Crop feature
    -            CROP: u1,
    -            ///  JPEG format
    -            JPEG: u1,
    -            ///  Embedded synchronization select
    -            ESS: u1,
    -            ///  Pixel clock polarity
    -            PCKPOL: u1,
    -            ///  Horizontal synchronization polarity
    -            HSPOL: u1,
    -            ///  Vertical synchronization polarity
    -            VSPOL: u1,
    -            ///  Frame capture rate control
    -            FCRC: u2,
    -            ///  Extended data mode
    -            EDM: u2,
    -            reserved14: u2,
    -            ///  DCMI enable
    -            ENABLE: u1,
    -            padding: u17,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  HSYNC
    -            HSYNC: u1,
    -            ///  VSYNC
    -            VSYNC: u1,
    -            ///  FIFO not empty
    -            FNE: u1,
    -            padding: u29,
    -        }),
    -        ///  raw interrupt status register
    -        RIS: mmio.Mmio(packed struct(u32) {
    -            ///  Capture complete raw interrupt status
    -            FRAME_RIS: u1,
    -            ///  Overrun raw interrupt status
    -            OVR_RIS: u1,
    -            ///  Synchronization error raw interrupt status
    -            ERR_RIS: u1,
    -            ///  VSYNC raw interrupt status
    -            VSYNC_RIS: u1,
    -            ///  Line raw interrupt status
    -            LINE_RIS: u1,
    -            padding: u27,
    -        }),
    -        ///  interrupt enable register
    -        IER: mmio.Mmio(packed struct(u32) {
    -            ///  Capture complete interrupt enable
    -            FRAME_IE: u1,
    -            ///  Overrun interrupt enable
    -            OVR_IE: u1,
    -            ///  Synchronization error interrupt enable
    -            ERR_IE: u1,
    -            ///  VSYNC interrupt enable
    -            VSYNC_IE: u1,
    -            ///  Line interrupt enable
    -            LINE_IE: u1,
    -            padding: u27,
    -        }),
    -        ///  masked interrupt status register
    -        MIS: mmio.Mmio(packed struct(u32) {
    -            ///  Capture complete masked interrupt status
    -            FRAME_MIS: u1,
    -            ///  Overrun masked interrupt status
    -            OVR_MIS: u1,
    -            ///  Synchronization error masked interrupt status
    -            ERR_MIS: u1,
    -            ///  VSYNC masked interrupt status
    -            VSYNC_MIS: u1,
    -            ///  Line masked interrupt status
    -            LINE_MIS: u1,
    -            padding: u27,
    -        }),
    -        ///  interrupt clear register
    -        ICR: mmio.Mmio(packed struct(u32) {
    -            ///  Capture complete interrupt status clear
    -            FRAME_ISC: u1,
    -            ///  Overrun interrupt status clear
    -            OVR_ISC: u1,
    -            ///  Synchronization error interrupt status clear
    -            ERR_ISC: u1,
    -            ///  Vertical synch interrupt status clear
    -            VSYNC_ISC: u1,
    -            ///  line interrupt status clear
    -            LINE_ISC: u1,
    -            padding: u27,
    -        }),
    -        ///  embedded synchronization code register
    -        ESCR: mmio.Mmio(packed struct(u32) {
    -            ///  Frame start delimiter code
    -            FSC: u8,
    -            ///  Line start delimiter code
    -            LSC: u8,
    -            ///  Line end delimiter code
    -            LEC: u8,
    -            ///  Frame end delimiter code
    -            FEC: u8,
    -        }),
    -        ///  embedded synchronization unmask register
    -        ESUR: mmio.Mmio(packed struct(u32) {
    -            ///  Frame start delimiter unmask
    -            FSU: u8,
    -            ///  Line start delimiter unmask
    -            LSU: u8,
    -            ///  Line end delimiter unmask
    -            LEU: u8,
    -            ///  Frame end delimiter unmask
    -            FEU: u8,
    -        }),
    -        ///  crop window start
    -        CWSTRT: mmio.Mmio(packed struct(u32) {
    -            ///  Horizontal offset count
    -            HOFFCNT: u14,
    -            reserved16: u2,
    -            ///  Vertical start line count
    -            VST: u13,
    -            padding: u3,
    -        }),
    -        ///  crop window size
    -        CWSIZE: mmio.Mmio(packed struct(u32) {
    -            ///  Capture count
    -            CAPCNT: u14,
    -            reserved16: u2,
    -            ///  Vertical line count
    -            VLINE: u14,
    -            padding: u2,
    -        }),
    -        ///  data register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  Data byte 0
    -            Byte0: u8,
    -            ///  Data byte 1
    -            Byte1: u8,
    -            ///  Data byte 2
    -            Byte2: u8,
    -            ///  Data byte 3
    -            Byte3: u8,
    -        }),
    -    };
    -
    -    ///  Flexible memory controller
    -    pub const FMC = extern struct {
    -        ///  SRAM/NOR-Flash chip-select control register 1
    -        BCR1: mmio.Mmio(packed struct(u32) {
    -            ///  MBKEN
    -            MBKEN: u1,
    -            ///  MUXEN
    -            MUXEN: u1,
    -            ///  MTYP
    -            MTYP: u2,
    -            ///  MWID
    -            MWID: u2,
    -            ///  FACCEN
    -            FACCEN: u1,
    -            reserved8: u1,
    -            ///  BURSTEN
    -            BURSTEN: u1,
    -            ///  WAITPOL
    -            WAITPOL: u1,
    -            reserved11: u1,
    -            ///  WAITCFG
    -            WAITCFG: u1,
    -            ///  WREN
    -            WREN: u1,
    -            ///  WAITEN
    -            WAITEN: u1,
    -            ///  EXTMOD
    -            EXTMOD: u1,
    -            ///  ASYNCWAIT
    -            ASYNCWAIT: u1,
    -            reserved19: u3,
    -            ///  CBURSTRW
    -            CBURSTRW: u1,
    -            ///  CCLKEN
    -            CCLKEN: u1,
    -            padding: u11,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select timing register 1
    -        BTR1: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            ///  BUSTURN
    -            BUSTURN: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select control register 2
    -        BCR2: mmio.Mmio(packed struct(u32) {
    -            ///  MBKEN
    -            MBKEN: u1,
    -            ///  MUXEN
    -            MUXEN: u1,
    -            ///  MTYP
    -            MTYP: u2,
    -            ///  MWID
    -            MWID: u2,
    -            ///  FACCEN
    -            FACCEN: u1,
    -            reserved8: u1,
    -            ///  BURSTEN
    -            BURSTEN: u1,
    -            ///  WAITPOL
    -            WAITPOL: u1,
    -            ///  WRAPMOD
    -            WRAPMOD: u1,
    -            ///  WAITCFG
    -            WAITCFG: u1,
    -            ///  WREN
    -            WREN: u1,
    -            ///  WAITEN
    -            WAITEN: u1,
    -            ///  EXTMOD
    -            EXTMOD: u1,
    -            ///  ASYNCWAIT
    -            ASYNCWAIT: u1,
    -            reserved19: u3,
    -            ///  CBURSTRW
    -            CBURSTRW: u1,
    -            padding: u12,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select timing register 2
    -        BTR2: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            ///  BUSTURN
    -            BUSTURN: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select control register 3
    -        BCR3: mmio.Mmio(packed struct(u32) {
    -            ///  MBKEN
    -            MBKEN: u1,
    -            ///  MUXEN
    -            MUXEN: u1,
    -            ///  MTYP
    -            MTYP: u2,
    -            ///  MWID
    -            MWID: u2,
    -            ///  FACCEN
    -            FACCEN: u1,
    -            reserved8: u1,
    -            ///  BURSTEN
    -            BURSTEN: u1,
    -            ///  WAITPOL
    -            WAITPOL: u1,
    -            ///  WRAPMOD
    -            WRAPMOD: u1,
    -            ///  WAITCFG
    -            WAITCFG: u1,
    -            ///  WREN
    -            WREN: u1,
    -            ///  WAITEN
    -            WAITEN: u1,
    -            ///  EXTMOD
    -            EXTMOD: u1,
    -            ///  ASYNCWAIT
    -            ASYNCWAIT: u1,
    -            reserved19: u3,
    -            ///  CBURSTRW
    -            CBURSTRW: u1,
    -            padding: u12,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select timing register 3
    -        BTR3: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            ///  BUSTURN
    -            BUSTURN: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select control register 4
    -        BCR4: mmio.Mmio(packed struct(u32) {
    -            ///  MBKEN
    -            MBKEN: u1,
    -            ///  MUXEN
    -            MUXEN: u1,
    -            ///  MTYP
    -            MTYP: u2,
    -            ///  MWID
    -            MWID: u2,
    -            ///  FACCEN
    -            FACCEN: u1,
    -            reserved8: u1,
    -            ///  BURSTEN
    -            BURSTEN: u1,
    -            ///  WAITPOL
    -            WAITPOL: u1,
    -            ///  WRAPMOD
    -            WRAPMOD: u1,
    -            ///  WAITCFG
    -            WAITCFG: u1,
    -            ///  WREN
    -            WREN: u1,
    -            ///  WAITEN
    -            WAITEN: u1,
    -            ///  EXTMOD
    -            EXTMOD: u1,
    -            ///  ASYNCWAIT
    -            ASYNCWAIT: u1,
    -            reserved19: u3,
    -            ///  CBURSTRW
    -            CBURSTRW: u1,
    -            padding: u12,
    -        }),
    -        ///  SRAM/NOR-Flash chip-select timing register 4
    -        BTR4: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            ///  BUSTURN
    -            BUSTURN: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -        reserved96: [64]u8,
    -        ///  PC Card/NAND Flash control register 2
    -        PCR2: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  PWAITEN
    -            PWAITEN: u1,
    -            ///  PBKEN
    -            PBKEN: u1,
    -            ///  PTYP
    -            PTYP: u1,
    -            ///  PWID
    -            PWID: u2,
    -            ///  ECCEN
    -            ECCEN: u1,
    -            reserved9: u2,
    -            ///  TCLR
    -            TCLR: u4,
    -            ///  TAR
    -            TAR: u4,
    -            ///  ECCPS
    -            ECCPS: u3,
    -            padding: u12,
    -        }),
    -        ///  FIFO status and interrupt register 2
    -        SR2: mmio.Mmio(packed struct(u32) {
    -            ///  IRS
    -            IRS: u1,
    -            ///  ILS
    -            ILS: u1,
    -            ///  IFS
    -            IFS: u1,
    -            ///  IREN
    -            IREN: u1,
    -            ///  ILEN
    -            ILEN: u1,
    -            ///  IFEN
    -            IFEN: u1,
    -            ///  FEMPT
    -            FEMPT: u1,
    -            padding: u25,
    -        }),
    -        ///  Common memory space timing register 2
    -        PMEM2: mmio.Mmio(packed struct(u32) {
    -            ///  MEMSETx
    -            MEMSETx: u8,
    -            ///  MEMWAITx
    -            MEMWAITx: u8,
    -            ///  MEMHOLDx
    -            MEMHOLDx: u8,
    -            ///  MEMHIZx
    -            MEMHIZx: u8,
    -        }),
    -        ///  Attribute memory space timing register 2
    -        PATT2: mmio.Mmio(packed struct(u32) {
    -            ///  ATTSETx
    -            ATTSETx: u8,
    -            ///  ATTWAITx
    -            ATTWAITx: u8,
    -            ///  ATTHOLDx
    -            ATTHOLDx: u8,
    -            ///  ATTHIZx
    -            ATTHIZx: u8,
    -        }),
    -        reserved116: [4]u8,
    -        ///  ECC result register 2
    -        ECCR2: mmio.Mmio(packed struct(u32) {
    -            ///  ECCx
    -            ECCx: u32,
    -        }),
    -        reserved128: [8]u8,
    -        ///  PC Card/NAND Flash control register 3
    -        PCR3: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  PWAITEN
    -            PWAITEN: u1,
    -            ///  PBKEN
    -            PBKEN: u1,
    -            ///  PTYP
    -            PTYP: u1,
    -            ///  PWID
    -            PWID: u2,
    -            ///  ECCEN
    -            ECCEN: u1,
    -            reserved9: u2,
    -            ///  TCLR
    -            TCLR: u4,
    -            ///  TAR
    -            TAR: u4,
    -            ///  ECCPS
    -            ECCPS: u3,
    -            padding: u12,
    -        }),
    -        ///  FIFO status and interrupt register 3
    -        SR3: mmio.Mmio(packed struct(u32) {
    -            ///  IRS
    -            IRS: u1,
    -            ///  ILS
    -            ILS: u1,
    -            ///  IFS
    -            IFS: u1,
    -            ///  IREN
    -            IREN: u1,
    -            ///  ILEN
    -            ILEN: u1,
    -            ///  IFEN
    -            IFEN: u1,
    -            ///  FEMPT
    -            FEMPT: u1,
    -            padding: u25,
    -        }),
    -        ///  Common memory space timing register 3
    -        PMEM3: mmio.Mmio(packed struct(u32) {
    -            ///  MEMSETx
    -            MEMSETx: u8,
    -            ///  MEMWAITx
    -            MEMWAITx: u8,
    -            ///  MEMHOLDx
    -            MEMHOLDx: u8,
    -            ///  MEMHIZx
    -            MEMHIZx: u8,
    -        }),
    -        ///  Attribute memory space timing register 3
    -        PATT3: mmio.Mmio(packed struct(u32) {
    -            ///  ATTSETx
    -            ATTSETx: u8,
    -            ///  ATTWAITx
    -            ATTWAITx: u8,
    -            ///  ATTHOLDx
    -            ATTHOLDx: u8,
    -            ///  ATTHIZx
    -            ATTHIZx: u8,
    -        }),
    -        reserved148: [4]u8,
    -        ///  ECC result register 3
    -        ECCR3: mmio.Mmio(packed struct(u32) {
    -            ///  ECCx
    -            ECCx: u32,
    -        }),
    -        reserved160: [8]u8,
    -        ///  PC Card/NAND Flash control register 4
    -        PCR4: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  PWAITEN
    -            PWAITEN: u1,
    -            ///  PBKEN
    -            PBKEN: u1,
    -            ///  PTYP
    -            PTYP: u1,
    -            ///  PWID
    -            PWID: u2,
    -            ///  ECCEN
    -            ECCEN: u1,
    -            reserved9: u2,
    -            ///  TCLR
    -            TCLR: u4,
    -            ///  TAR
    -            TAR: u4,
    -            ///  ECCPS
    -            ECCPS: u3,
    -            padding: u12,
    -        }),
    -        ///  FIFO status and interrupt register 4
    -        SR4: mmio.Mmio(packed struct(u32) {
    -            ///  IRS
    -            IRS: u1,
    -            ///  ILS
    -            ILS: u1,
    -            ///  IFS
    -            IFS: u1,
    -            ///  IREN
    -            IREN: u1,
    -            ///  ILEN
    -            ILEN: u1,
    -            ///  IFEN
    -            IFEN: u1,
    -            ///  FEMPT
    -            FEMPT: u1,
    -            padding: u25,
    -        }),
    -        ///  Common memory space timing register 4
    -        PMEM4: mmio.Mmio(packed struct(u32) {
    -            ///  MEMSETx
    -            MEMSETx: u8,
    -            ///  MEMWAITx
    -            MEMWAITx: u8,
    -            ///  MEMHOLDx
    -            MEMHOLDx: u8,
    -            ///  MEMHIZx
    -            MEMHIZx: u8,
    -        }),
    -        ///  Attribute memory space timing register 4
    -        PATT4: mmio.Mmio(packed struct(u32) {
    -            ///  ATTSETx
    -            ATTSETx: u8,
    -            ///  ATTWAITx
    -            ATTWAITx: u8,
    -            ///  ATTHOLDx
    -            ATTHOLDx: u8,
    -            ///  ATTHIZx
    -            ATTHIZx: u8,
    -        }),
    -        ///  I/O space timing register 4
    -        PIO4: mmio.Mmio(packed struct(u32) {
    -            ///  IOSETx
    -            IOSETx: u8,
    -            ///  IOWAITx
    -            IOWAITx: u8,
    -            ///  IOHOLDx
    -            IOHOLDx: u8,
    -            ///  IOHIZx
    -            IOHIZx: u8,
    -        }),
    -        reserved260: [80]u8,
    -        ///  SRAM/NOR-Flash write timing registers 1
    -        BWTR1: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            reserved20: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -        reserved268: [4]u8,
    -        ///  SRAM/NOR-Flash write timing registers 2
    -        BWTR2: mmio.Mmio(packed struct(u32) {
    -            ///  ADDSET
    -            ADDSET: u4,
    -            ///  ADDHLD
    -            ADDHLD: u4,
    -            ///  DATAST
    -            DATAST: u8,
    -            reserved20: u4,
    -            ///  CLKDIV
    -            CLKDIV: u4,
    -            ///  DATLAT
    -            DATLAT: u4,
    -            ///  ACCMOD
    -            ACCMOD: u2,
    -            padding: u2,
    -        }),
    -        reserved320: [48]u8,
    -        ///  SDRAM Control Register 1
    -        SDCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Number of column address bits
    -            NC: u2,
    -            ///  Number of row address bits
    -            NR: u2,
    -            ///  Memory data bus width
    -            MWID: u2,
    -            ///  Number of internal banks
    -            NB: u1,
    -            ///  CAS latency
    -            CAS: u2,
    -            ///  Write protection
    -            WP: u1,
    -            ///  SDRAM clock configuration
    -            SDCLK: u2,
    -            ///  Burst read
    -            RBURST: u1,
    -            ///  Read pipe
    -            RPIPE: u2,
    -            padding: u17,
    -        }),
    -        ///  SDRAM Control Register 2
    -        SDCR2: mmio.Mmio(packed struct(u32) {
    -            ///  Number of column address bits
    -            NC: u2,
    -            ///  Number of row address bits
    -            NR: u2,
    -            ///  Memory data bus width
    -            MWID: u2,
    -            ///  Number of internal banks
    -            NB: u1,
    -            ///  CAS latency
    -            CAS: u2,
    -            ///  Write protection
    -            WP: u1,
    -            ///  SDRAM clock configuration
    -            SDCLK: u2,
    -            ///  Burst read
    -            RBURST: u1,
    -            ///  Read pipe
    -            RPIPE: u2,
    -            padding: u17,
    -        }),
    -        ///  SDRAM Timing register 1
    -        SDTR1: mmio.Mmio(packed struct(u32) {
    -            ///  Load Mode Register to Active
    -            TMRD: u4,
    -            ///  Exit self-refresh delay
    -            TXSR: u4,
    -            ///  Self refresh time
    -            TRAS: u4,
    -            ///  Row cycle delay
    -            TRC: u4,
    -            ///  Recovery delay
    -            TWR: u4,
    -            ///  Row precharge delay
    -            TRP: u4,
    -            ///  Row to column delay
    -            TRCD: u4,
    -            padding: u4,
    -        }),
    -        ///  SDRAM Timing register 2
    -        SDTR2: mmio.Mmio(packed struct(u32) {
    -            ///  Load Mode Register to Active
    -            TMRD: u4,
    -            ///  Exit self-refresh delay
    -            TXSR: u4,
    -            ///  Self refresh time
    -            TRAS: u4,
    -            ///  Row cycle delay
    -            TRC: u4,
    -            ///  Recovery delay
    -            TWR: u4,
    -            ///  Row precharge delay
    -            TRP: u4,
    -            ///  Row to column delay
    -            TRCD: u4,
    -            padding: u4,
    -        }),
    -        ///  SDRAM Command Mode register
    -        SDCMR: mmio.Mmio(packed struct(u32) {
    -            ///  Command mode
    -            MODE: u3,
    -            ///  Command target bank 2
    -            CTB2: u1,
    -            ///  Command target bank 1
    -            CTB1: u1,
    -            ///  Number of Auto-refresh
    -            NRFS: u4,
    -            ///  Mode Register definition
    -            MRD: u13,
    -            padding: u10,
    -        }),
    -        ///  SDRAM Refresh Timer register
    -        SDRTR: mmio.Mmio(packed struct(u32) {
    -            ///  Clear Refresh error flag
    -            CRE: u1,
    -            ///  Refresh Timer Count
    -            COUNT: u13,
    -            ///  RES Interrupt Enable
    -            REIE: u1,
    -            padding: u17,
    -        }),
    -        ///  SDRAM Status register
    -        SDSR: mmio.Mmio(packed struct(u32) {
    -            ///  Refresh error flag
    -            RE: u1,
    -            ///  Status Mode for Bank 1
    -            MODES1: u2,
    -            ///  Status Mode for Bank 2
    -            MODES2: u2,
    -            ///  Busy status
    -            BUSY: u1,
    -            padding: u26,
    -        }),
    -    };
    -
    -    ///  Debug support
    -    pub const DBG = extern struct {
    -        ///  IDCODE
    -        DBGMCU_IDCODE: mmio.Mmio(packed struct(u32) {
    -            ///  DEV_ID
    -            DEV_ID: u12,
    -            reserved16: u4,
    -            ///  REV_ID
    -            REV_ID: u16,
    -        }),
    -        ///  Control Register
    -        DBGMCU_CR: mmio.Mmio(packed struct(u32) {
    -            ///  DBG_SLEEP
    -            DBG_SLEEP: u1,
    -            ///  DBG_STOP
    -            DBG_STOP: u1,
    -            ///  DBG_STANDBY
    -            DBG_STANDBY: u1,
    -            reserved5: u2,
    -            ///  TRACE_IOEN
    -            TRACE_IOEN: u1,
    -            ///  TRACE_MODE
    -            TRACE_MODE: u2,
    -            padding: u24,
    -        }),
    -        ///  Debug MCU APB1 Freeze registe
    -        DBGMCU_APB1_FZ: mmio.Mmio(packed struct(u32) {
    -            ///  DBG_TIM2_STOP
    -            DBG_TIM2_STOP: u1,
    -            ///  DBG_TIM3 _STOP
    -            DBG_TIM3_STOP: u1,
    -            ///  DBG_TIM4_STOP
    -            DBG_TIM4_STOP: u1,
    -            ///  DBG_TIM5_STOP
    -            DBG_TIM5_STOP: u1,
    -            ///  DBG_TIM6_STOP
    -            DBG_TIM6_STOP: u1,
    -            ///  DBG_TIM7_STOP
    -            DBG_TIM7_STOP: u1,
    -            ///  DBG_TIM12_STOP
    -            DBG_TIM12_STOP: u1,
    -            ///  DBG_TIM13_STOP
    -            DBG_TIM13_STOP: u1,
    -            ///  DBG_TIM14_STOP
    -            DBG_TIM14_STOP: u1,
    -            reserved11: u2,
    -            ///  DBG_WWDG_STOP
    -            DBG_WWDG_STOP: u1,
    -            ///  DBG_IWDEG_STOP
    -            DBG_IWDEG_STOP: u1,
    -            reserved21: u8,
    -            ///  DBG_J2C1_SMBUS_TIMEOUT
    -            DBG_J2C1_SMBUS_TIMEOUT: u1,
    -            ///  DBG_J2C2_SMBUS_TIMEOUT
    -            DBG_J2C2_SMBUS_TIMEOUT: u1,
    -            ///  DBG_J2C3SMBUS_TIMEOUT
    -            DBG_J2C3SMBUS_TIMEOUT: u1,
    -            reserved25: u1,
    -            ///  DBG_CAN1_STOP
    -            DBG_CAN1_STOP: u1,
    -            ///  DBG_CAN2_STOP
    -            DBG_CAN2_STOP: u1,
    -            padding: u5,
    -        }),
    -        ///  Debug MCU APB2 Freeze registe
    -        DBGMCU_APB2_FZ: mmio.Mmio(packed struct(u32) {
    -            ///  TIM1 counter stopped when core is halted
    -            DBG_TIM1_STOP: u1,
    -            ///  TIM8 counter stopped when core is halted
    -            DBG_TIM8_STOP: u1,
    -            reserved16: u14,
    -            ///  TIM9 counter stopped when core is halted
    -            DBG_TIM9_STOP: u1,
    -            ///  TIM10 counter stopped when core is halted
    -            DBG_TIM10_STOP: u1,
    -            ///  TIM11 counter stopped when core is halted
    -            DBG_TIM11_STOP: u1,
    -            padding: u13,
    -        }),
    -    };
    -
    -    ///  DMA controller
    -    pub const DMA2 = extern struct {
    -        ///  low interrupt status register
    -        LISR: mmio.Mmio(packed struct(u32) {
    -            ///  Stream x FIFO error interrupt flag (x=3..0)
    -            FEIF0: u1,
    -            reserved2: u1,
    -            ///  Stream x direct mode error interrupt flag (x=3..0)
    -            DMEIF0: u1,
    -            ///  Stream x transfer error interrupt flag (x=3..0)
    -            TEIF0: u1,
    -            ///  Stream x half transfer interrupt flag (x=3..0)
    -            HTIF0: u1,
    -            ///  Stream x transfer complete interrupt flag (x = 3..0)
    -            TCIF0: u1,
    -            ///  Stream x FIFO error interrupt flag (x=3..0)
    -            FEIF1: u1,
    -            reserved8: u1,
    -            ///  Stream x direct mode error interrupt flag (x=3..0)
    -            DMEIF1: u1,
    -            ///  Stream x transfer error interrupt flag (x=3..0)
    -            TEIF1: u1,
    -            ///  Stream x half transfer interrupt flag (x=3..0)
    -            HTIF1: u1,
    -            ///  Stream x transfer complete interrupt flag (x = 3..0)
    -            TCIF1: u1,
    -            reserved16: u4,
    -            ///  Stream x FIFO error interrupt flag (x=3..0)
    -            FEIF2: u1,
    -            reserved18: u1,
    -            ///  Stream x direct mode error interrupt flag (x=3..0)
    -            DMEIF2: u1,
    -            ///  Stream x transfer error interrupt flag (x=3..0)
    -            TEIF2: u1,
    -            ///  Stream x half transfer interrupt flag (x=3..0)
    -            HTIF2: u1,
    -            ///  Stream x transfer complete interrupt flag (x = 3..0)
    -            TCIF2: u1,
    -            ///  Stream x FIFO error interrupt flag (x=3..0)
    -            FEIF3: u1,
    -            reserved24: u1,
    -            ///  Stream x direct mode error interrupt flag (x=3..0)
    -            DMEIF3: u1,
    -            ///  Stream x transfer error interrupt flag (x=3..0)
    -            TEIF3: u1,
    -            ///  Stream x half transfer interrupt flag (x=3..0)
    -            HTIF3: u1,
    -            ///  Stream x transfer complete interrupt flag (x = 3..0)
    -            TCIF3: u1,
    -            padding: u4,
    -        }),
    -        ///  high interrupt status register
    -        HISR: mmio.Mmio(packed struct(u32) {
    -            ///  Stream x FIFO error interrupt flag (x=7..4)
    -            FEIF4: u1,
    -            reserved2: u1,
    -            ///  Stream x direct mode error interrupt flag (x=7..4)
    -            DMEIF4: u1,
    -            ///  Stream x transfer error interrupt flag (x=7..4)
    -            TEIF4: u1,
    -            ///  Stream x half transfer interrupt flag (x=7..4)
    -            HTIF4: u1,
    -            ///  Stream x transfer complete interrupt flag (x=7..4)
    -            TCIF4: u1,
    -            ///  Stream x FIFO error interrupt flag (x=7..4)
    -            FEIF5: u1,
    -            reserved8: u1,
    -            ///  Stream x direct mode error interrupt flag (x=7..4)
    -            DMEIF5: u1,
    -            ///  Stream x transfer error interrupt flag (x=7..4)
    -            TEIF5: u1,
    -            ///  Stream x half transfer interrupt flag (x=7..4)
    -            HTIF5: u1,
    -            ///  Stream x transfer complete interrupt flag (x=7..4)
    -            TCIF5: u1,
    -            reserved16: u4,
    -            ///  Stream x FIFO error interrupt flag (x=7..4)
    -            FEIF6: u1,
    -            reserved18: u1,
    -            ///  Stream x direct mode error interrupt flag (x=7..4)
    -            DMEIF6: u1,
    -            ///  Stream x transfer error interrupt flag (x=7..4)
    -            TEIF6: u1,
    -            ///  Stream x half transfer interrupt flag (x=7..4)
    -            HTIF6: u1,
    -            ///  Stream x transfer complete interrupt flag (x=7..4)
    -            TCIF6: u1,
    -            ///  Stream x FIFO error interrupt flag (x=7..4)
    -            FEIF7: u1,
    -            reserved24: u1,
    -            ///  Stream x direct mode error interrupt flag (x=7..4)
    -            DMEIF7: u1,
    -            ///  Stream x transfer error interrupt flag (x=7..4)
    -            TEIF7: u1,
    -            ///  Stream x half transfer interrupt flag (x=7..4)
    -            HTIF7: u1,
    -            ///  Stream x transfer complete interrupt flag (x=7..4)
    -            TCIF7: u1,
    -            padding: u4,
    -        }),
    -        ///  low interrupt flag clear register
    -        LIFCR: mmio.Mmio(packed struct(u32) {
    -            ///  Stream x clear FIFO error interrupt flag (x = 3..0)
    -            CFEIF0: u1,
    -            reserved2: u1,
    -            ///  Stream x clear direct mode error interrupt flag (x = 3..0)
    -            CDMEIF0: u1,
    -            ///  Stream x clear transfer error interrupt flag (x = 3..0)
    -            CTEIF0: u1,
    -            ///  Stream x clear half transfer interrupt flag (x = 3..0)
    -            CHTIF0: u1,
    -            ///  Stream x clear transfer complete interrupt flag (x = 3..0)
    -            CTCIF0: u1,
    -            ///  Stream x clear FIFO error interrupt flag (x = 3..0)
    -            CFEIF1: u1,
    -            reserved8: u1,
    -            ///  Stream x clear direct mode error interrupt flag (x = 3..0)
    -            CDMEIF1: u1,
    -            ///  Stream x clear transfer error interrupt flag (x = 3..0)
    -            CTEIF1: u1,
    -            ///  Stream x clear half transfer interrupt flag (x = 3..0)
    -            CHTIF1: u1,
    -            ///  Stream x clear transfer complete interrupt flag (x = 3..0)
    -            CTCIF1: u1,
    -            reserved16: u4,
    -            ///  Stream x clear FIFO error interrupt flag (x = 3..0)
    -            CFEIF2: u1,
    -            reserved18: u1,
    -            ///  Stream x clear direct mode error interrupt flag (x = 3..0)
    -            CDMEIF2: u1,
    -            ///  Stream x clear transfer error interrupt flag (x = 3..0)
    -            CTEIF2: u1,
    -            ///  Stream x clear half transfer interrupt flag (x = 3..0)
    -            CHTIF2: u1,
    -            ///  Stream x clear transfer complete interrupt flag (x = 3..0)
    -            CTCIF2: u1,
    -            ///  Stream x clear FIFO error interrupt flag (x = 3..0)
    -            CFEIF3: u1,
    -            reserved24: u1,
    -            ///  Stream x clear direct mode error interrupt flag (x = 3..0)
    -            CDMEIF3: u1,
    -            ///  Stream x clear transfer error interrupt flag (x = 3..0)
    -            CTEIF3: u1,
    -            ///  Stream x clear half transfer interrupt flag (x = 3..0)
    -            CHTIF3: u1,
    -            ///  Stream x clear transfer complete interrupt flag (x = 3..0)
    -            CTCIF3: u1,
    -            padding: u4,
    -        }),
    -        ///  high interrupt flag clear register
    -        HIFCR: mmio.Mmio(packed struct(u32) {
    -            ///  Stream x clear FIFO error interrupt flag (x = 7..4)
    -            CFEIF4: u1,
    -            reserved2: u1,
    -            ///  Stream x clear direct mode error interrupt flag (x = 7..4)
    -            CDMEIF4: u1,
    -            ///  Stream x clear transfer error interrupt flag (x = 7..4)
    -            CTEIF4: u1,
    -            ///  Stream x clear half transfer interrupt flag (x = 7..4)
    -            CHTIF4: u1,
    -            ///  Stream x clear transfer complete interrupt flag (x = 7..4)
    -            CTCIF4: u1,
    -            ///  Stream x clear FIFO error interrupt flag (x = 7..4)
    -            CFEIF5: u1,
    -            reserved8: u1,
    -            ///  Stream x clear direct mode error interrupt flag (x = 7..4)
    -            CDMEIF5: u1,
    -            ///  Stream x clear transfer error interrupt flag (x = 7..4)
    -            CTEIF5: u1,
    -            ///  Stream x clear half transfer interrupt flag (x = 7..4)
    -            CHTIF5: u1,
    -            ///  Stream x clear transfer complete interrupt flag (x = 7..4)
    -            CTCIF5: u1,
    -            reserved16: u4,
    -            ///  Stream x clear FIFO error interrupt flag (x = 7..4)
    -            CFEIF6: u1,
    -            reserved18: u1,
    -            ///  Stream x clear direct mode error interrupt flag (x = 7..4)
    -            CDMEIF6: u1,
    -            ///  Stream x clear transfer error interrupt flag (x = 7..4)
    -            CTEIF6: u1,
    -            ///  Stream x clear half transfer interrupt flag (x = 7..4)
    -            CHTIF6: u1,
    -            ///  Stream x clear transfer complete interrupt flag (x = 7..4)
    -            CTCIF6: u1,
    -            ///  Stream x clear FIFO error interrupt flag (x = 7..4)
    -            CFEIF7: u1,
    -            reserved24: u1,
    -            ///  Stream x clear direct mode error interrupt flag (x = 7..4)
    -            CDMEIF7: u1,
    -            ///  Stream x clear transfer error interrupt flag (x = 7..4)
    -            CTEIF7: u1,
    -            ///  Stream x clear half transfer interrupt flag (x = 7..4)
    -            CHTIF7: u1,
    -            ///  Stream x clear transfer complete interrupt flag (x = 7..4)
    -            CTCIF7: u1,
    -            padding: u4,
    -        }),
    -        ///  stream x configuration register
    -        S0CR: mmio.Mmio(packed struct(u32) {
    -            ///  Stream enable / flag stream ready when read low
    -            EN: u1,
    -            ///  Direct mode error interrupt enable
    -            DMEIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Half transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Peripheral flow controller
    -            PFCTRL: u1,
    -            ///  Data transfer direction
    -            DIR: u2,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral data size
    -            PSIZE: u2,
    -            ///  Memory data size
    -            MSIZE: u2,
    -            ///  Peripheral increment offset size
    -            PINCOS: u1,
    -            ///  Priority level
    -            PL: u2,
    -            ///  Double buffer mode
    -            DBM: u1,
    -            ///  Current target (only in double buffer mode)
    -            CT: u1,
    -            reserved21: u1,
    -            ///  Peripheral burst transfer configuration
    -            PBURST: u2,
    -            ///  Memory burst transfer configuration
    -            MBURST: u2,
    -            ///  Channel selection
    -            CHSEL: u3,
    -            padding: u4,
    -        }),
    -        ///  stream x number of data register
    -        S0NDTR: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data items to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  stream x peripheral address register
    -        S0PAR: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  stream x memory 0 address register
    -        S0M0AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 0 address
    -            M0A: u32,
    -        }),
    -        ///  stream x memory 1 address register
    -        S0M1AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 1 address (used in case of Double buffer mode)
    -            M1A: u32,
    -        }),
    -        ///  stream x FIFO control register
    -        S0FCR: mmio.Mmio(packed struct(u32) {
    -            ///  FIFO threshold selection
    -            FTH: u2,
    -            ///  Direct mode disable
    -            DMDIS: u1,
    -            ///  FIFO status
    -            FS: u3,
    -            reserved7: u1,
    -            ///  FIFO error interrupt enable
    -            FEIE: u1,
    -            padding: u24,
    -        }),
    -        ///  stream x configuration register
    -        S1CR: mmio.Mmio(packed struct(u32) {
    -            ///  Stream enable / flag stream ready when read low
    -            EN: u1,
    -            ///  Direct mode error interrupt enable
    -            DMEIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Half transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Peripheral flow controller
    -            PFCTRL: u1,
    -            ///  Data transfer direction
    -            DIR: u2,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral data size
    -            PSIZE: u2,
    -            ///  Memory data size
    -            MSIZE: u2,
    -            ///  Peripheral increment offset size
    -            PINCOS: u1,
    -            ///  Priority level
    -            PL: u2,
    -            ///  Double buffer mode
    -            DBM: u1,
    -            ///  Current target (only in double buffer mode)
    -            CT: u1,
    -            ///  ACK
    -            ACK: u1,
    -            ///  Peripheral burst transfer configuration
    -            PBURST: u2,
    -            ///  Memory burst transfer configuration
    -            MBURST: u2,
    -            ///  Channel selection
    -            CHSEL: u3,
    -            padding: u4,
    -        }),
    -        ///  stream x number of data register
    -        S1NDTR: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data items to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  stream x peripheral address register
    -        S1PAR: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  stream x memory 0 address register
    -        S1M0AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 0 address
    -            M0A: u32,
    -        }),
    -        ///  stream x memory 1 address register
    -        S1M1AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 1 address (used in case of Double buffer mode)
    -            M1A: u32,
    -        }),
    -        ///  stream x FIFO control register
    -        S1FCR: mmio.Mmio(packed struct(u32) {
    -            ///  FIFO threshold selection
    -            FTH: u2,
    -            ///  Direct mode disable
    -            DMDIS: u1,
    -            ///  FIFO status
    -            FS: u3,
    -            reserved7: u1,
    -            ///  FIFO error interrupt enable
    -            FEIE: u1,
    -            padding: u24,
    -        }),
    -        ///  stream x configuration register
    -        S2CR: mmio.Mmio(packed struct(u32) {
    -            ///  Stream enable / flag stream ready when read low
    -            EN: u1,
    -            ///  Direct mode error interrupt enable
    -            DMEIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Half transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Peripheral flow controller
    -            PFCTRL: u1,
    -            ///  Data transfer direction
    -            DIR: u2,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral data size
    -            PSIZE: u2,
    -            ///  Memory data size
    -            MSIZE: u2,
    -            ///  Peripheral increment offset size
    -            PINCOS: u1,
    -            ///  Priority level
    -            PL: u2,
    -            ///  Double buffer mode
    -            DBM: u1,
    -            ///  Current target (only in double buffer mode)
    -            CT: u1,
    -            ///  ACK
    -            ACK: u1,
    -            ///  Peripheral burst transfer configuration
    -            PBURST: u2,
    -            ///  Memory burst transfer configuration
    -            MBURST: u2,
    -            ///  Channel selection
    -            CHSEL: u3,
    -            padding: u4,
    -        }),
    -        ///  stream x number of data register
    -        S2NDTR: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data items to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  stream x peripheral address register
    -        S2PAR: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  stream x memory 0 address register
    -        S2M0AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 0 address
    -            M0A: u32,
    -        }),
    -        ///  stream x memory 1 address register
    -        S2M1AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 1 address (used in case of Double buffer mode)
    -            M1A: u32,
    -        }),
    -        ///  stream x FIFO control register
    -        S2FCR: mmio.Mmio(packed struct(u32) {
    -            ///  FIFO threshold selection
    -            FTH: u2,
    -            ///  Direct mode disable
    -            DMDIS: u1,
    -            ///  FIFO status
    -            FS: u3,
    -            reserved7: u1,
    -            ///  FIFO error interrupt enable
    -            FEIE: u1,
    -            padding: u24,
    -        }),
    -        ///  stream x configuration register
    -        S3CR: mmio.Mmio(packed struct(u32) {
    -            ///  Stream enable / flag stream ready when read low
    -            EN: u1,
    -            ///  Direct mode error interrupt enable
    -            DMEIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Half transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Peripheral flow controller
    -            PFCTRL: u1,
    -            ///  Data transfer direction
    -            DIR: u2,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral data size
    -            PSIZE: u2,
    -            ///  Memory data size
    -            MSIZE: u2,
    -            ///  Peripheral increment offset size
    -            PINCOS: u1,
    -            ///  Priority level
    -            PL: u2,
    -            ///  Double buffer mode
    -            DBM: u1,
    -            ///  Current target (only in double buffer mode)
    -            CT: u1,
    -            ///  ACK
    -            ACK: u1,
    -            ///  Peripheral burst transfer configuration
    -            PBURST: u2,
    -            ///  Memory burst transfer configuration
    -            MBURST: u2,
    -            ///  Channel selection
    -            CHSEL: u3,
    -            padding: u4,
    -        }),
    -        ///  stream x number of data register
    -        S3NDTR: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data items to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  stream x peripheral address register
    -        S3PAR: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  stream x memory 0 address register
    -        S3M0AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 0 address
    -            M0A: u32,
    -        }),
    -        ///  stream x memory 1 address register
    -        S3M1AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 1 address (used in case of Double buffer mode)
    -            M1A: u32,
    -        }),
    -        ///  stream x FIFO control register
    -        S3FCR: mmio.Mmio(packed struct(u32) {
    -            ///  FIFO threshold selection
    -            FTH: u2,
    -            ///  Direct mode disable
    -            DMDIS: u1,
    -            ///  FIFO status
    -            FS: u3,
    -            reserved7: u1,
    -            ///  FIFO error interrupt enable
    -            FEIE: u1,
    -            padding: u24,
    -        }),
    -        ///  stream x configuration register
    -        S4CR: mmio.Mmio(packed struct(u32) {
    -            ///  Stream enable / flag stream ready when read low
    -            EN: u1,
    -            ///  Direct mode error interrupt enable
    -            DMEIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Half transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Peripheral flow controller
    -            PFCTRL: u1,
    -            ///  Data transfer direction
    -            DIR: u2,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral data size
    -            PSIZE: u2,
    -            ///  Memory data size
    -            MSIZE: u2,
    -            ///  Peripheral increment offset size
    -            PINCOS: u1,
    -            ///  Priority level
    -            PL: u2,
    -            ///  Double buffer mode
    -            DBM: u1,
    -            ///  Current target (only in double buffer mode)
    -            CT: u1,
    -            ///  ACK
    -            ACK: u1,
    -            ///  Peripheral burst transfer configuration
    -            PBURST: u2,
    -            ///  Memory burst transfer configuration
    -            MBURST: u2,
    -            ///  Channel selection
    -            CHSEL: u3,
    -            padding: u4,
    -        }),
    -        ///  stream x number of data register
    -        S4NDTR: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data items to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  stream x peripheral address register
    -        S4PAR: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  stream x memory 0 address register
    -        S4M0AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 0 address
    -            M0A: u32,
    -        }),
    -        ///  stream x memory 1 address register
    -        S4M1AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 1 address (used in case of Double buffer mode)
    -            M1A: u32,
    -        }),
    -        ///  stream x FIFO control register
    -        S4FCR: mmio.Mmio(packed struct(u32) {
    -            ///  FIFO threshold selection
    -            FTH: u2,
    -            ///  Direct mode disable
    -            DMDIS: u1,
    -            ///  FIFO status
    -            FS: u3,
    -            reserved7: u1,
    -            ///  FIFO error interrupt enable
    -            FEIE: u1,
    -            padding: u24,
    -        }),
    -        ///  stream x configuration register
    -        S5CR: mmio.Mmio(packed struct(u32) {
    -            ///  Stream enable / flag stream ready when read low
    -            EN: u1,
    -            ///  Direct mode error interrupt enable
    -            DMEIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Half transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Peripheral flow controller
    -            PFCTRL: u1,
    -            ///  Data transfer direction
    -            DIR: u2,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral data size
    -            PSIZE: u2,
    -            ///  Memory data size
    -            MSIZE: u2,
    -            ///  Peripheral increment offset size
    -            PINCOS: u1,
    -            ///  Priority level
    -            PL: u2,
    -            ///  Double buffer mode
    -            DBM: u1,
    -            ///  Current target (only in double buffer mode)
    -            CT: u1,
    -            ///  ACK
    -            ACK: u1,
    -            ///  Peripheral burst transfer configuration
    -            PBURST: u2,
    -            ///  Memory burst transfer configuration
    -            MBURST: u2,
    -            ///  Channel selection
    -            CHSEL: u3,
    -            padding: u4,
    -        }),
    -        ///  stream x number of data register
    -        S5NDTR: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data items to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  stream x peripheral address register
    -        S5PAR: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  stream x memory 0 address register
    -        S5M0AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 0 address
    -            M0A: u32,
    -        }),
    -        ///  stream x memory 1 address register
    -        S5M1AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 1 address (used in case of Double buffer mode)
    -            M1A: u32,
    -        }),
    -        ///  stream x FIFO control register
    -        S5FCR: mmio.Mmio(packed struct(u32) {
    -            ///  FIFO threshold selection
    -            FTH: u2,
    -            ///  Direct mode disable
    -            DMDIS: u1,
    -            ///  FIFO status
    -            FS: u3,
    -            reserved7: u1,
    -            ///  FIFO error interrupt enable
    -            FEIE: u1,
    -            padding: u24,
    -        }),
    -        ///  stream x configuration register
    -        S6CR: mmio.Mmio(packed struct(u32) {
    -            ///  Stream enable / flag stream ready when read low
    -            EN: u1,
    -            ///  Direct mode error interrupt enable
    -            DMEIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Half transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Peripheral flow controller
    -            PFCTRL: u1,
    -            ///  Data transfer direction
    -            DIR: u2,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral data size
    -            PSIZE: u2,
    -            ///  Memory data size
    -            MSIZE: u2,
    -            ///  Peripheral increment offset size
    -            PINCOS: u1,
    -            ///  Priority level
    -            PL: u2,
    -            ///  Double buffer mode
    -            DBM: u1,
    -            ///  Current target (only in double buffer mode)
    -            CT: u1,
    -            ///  ACK
    -            ACK: u1,
    -            ///  Peripheral burst transfer configuration
    -            PBURST: u2,
    -            ///  Memory burst transfer configuration
    -            MBURST: u2,
    -            ///  Channel selection
    -            CHSEL: u3,
    -            padding: u4,
    -        }),
    -        ///  stream x number of data register
    -        S6NDTR: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data items to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  stream x peripheral address register
    -        S6PAR: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  stream x memory 0 address register
    -        S6M0AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 0 address
    -            M0A: u32,
    -        }),
    -        ///  stream x memory 1 address register
    -        S6M1AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 1 address (used in case of Double buffer mode)
    -            M1A: u32,
    -        }),
    -        ///  stream x FIFO control register
    -        S6FCR: mmio.Mmio(packed struct(u32) {
    -            ///  FIFO threshold selection
    -            FTH: u2,
    -            ///  Direct mode disable
    -            DMDIS: u1,
    -            ///  FIFO status
    -            FS: u3,
    -            reserved7: u1,
    -            ///  FIFO error interrupt enable
    -            FEIE: u1,
    -            padding: u24,
    -        }),
    -        ///  stream x configuration register
    -        S7CR: mmio.Mmio(packed struct(u32) {
    -            ///  Stream enable / flag stream ready when read low
    -            EN: u1,
    -            ///  Direct mode error interrupt enable
    -            DMEIE: u1,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Half transfer interrupt enable
    -            HTIE: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Peripheral flow controller
    -            PFCTRL: u1,
    -            ///  Data transfer direction
    -            DIR: u2,
    -            ///  Circular mode
    -            CIRC: u1,
    -            ///  Peripheral increment mode
    -            PINC: u1,
    -            ///  Memory increment mode
    -            MINC: u1,
    -            ///  Peripheral data size
    -            PSIZE: u2,
    -            ///  Memory data size
    -            MSIZE: u2,
    -            ///  Peripheral increment offset size
    -            PINCOS: u1,
    -            ///  Priority level
    -            PL: u2,
    -            ///  Double buffer mode
    -            DBM: u1,
    -            ///  Current target (only in double buffer mode)
    -            CT: u1,
    -            ///  ACK
    -            ACK: u1,
    -            ///  Peripheral burst transfer configuration
    -            PBURST: u2,
    -            ///  Memory burst transfer configuration
    -            MBURST: u2,
    -            ///  Channel selection
    -            CHSEL: u3,
    -            padding: u4,
    -        }),
    -        ///  stream x number of data register
    -        S7NDTR: mmio.Mmio(packed struct(u32) {
    -            ///  Number of data items to transfer
    -            NDT: u16,
    -            padding: u16,
    -        }),
    -        ///  stream x peripheral address register
    -        S7PAR: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral address
    -            PA: u32,
    -        }),
    -        ///  stream x memory 0 address register
    -        S7M0AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 0 address
    -            M0A: u32,
    -        }),
    -        ///  stream x memory 1 address register
    -        S7M1AR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory 1 address (used in case of Double buffer mode)
    -            M1A: u32,
    -        }),
    -        ///  stream x FIFO control register
    -        S7FCR: mmio.Mmio(packed struct(u32) {
    -            ///  FIFO threshold selection
    -            FTH: u2,
    -            ///  Direct mode disable
    -            DMDIS: u1,
    -            ///  FIFO status
    -            FS: u3,
    -            reserved7: u1,
    -            ///  FIFO error interrupt enable
    -            FEIE: u1,
    -            padding: u24,
    -        }),
    -    };
    -
    -    ///  System control block ACTLR
    -    pub const SCB_ACTRL = extern struct {
    -        ///  Auxiliary control register
    -        ACTRL: mmio.Mmio(packed struct(u32) {
    -            ///  DISMCYCINT
    -            DISMCYCINT: u1,
    -            ///  DISDEFWBUF
    -            DISDEFWBUF: u1,
    -            ///  DISFOLD
    -            DISFOLD: u1,
    -            reserved8: u5,
    -            ///  DISFPCA
    -            DISFPCA: u1,
    -            ///  DISOOFP
    -            DISOOFP: u1,
    -            padding: u22,
    -        }),
    -    };
    -
    -    ///  Reset and clock control
    -    pub const RCC = extern struct {
    -        ///  clock control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  Internal high-speed clock enable
    -            HSION: u1,
    -            ///  Internal high-speed clock ready flag
    -            HSIRDY: u1,
    -            reserved3: u1,
    -            ///  Internal high-speed clock trimming
    -            HSITRIM: u5,
    -            ///  Internal high-speed clock calibration
    -            HSICAL: u8,
    -            ///  HSE clock enable
    -            HSEON: u1,
    -            ///  HSE clock ready flag
    -            HSERDY: u1,
    -            ///  HSE clock bypass
    -            HSEBYP: u1,
    -            ///  Clock security system enable
    -            CSSON: u1,
    -            reserved24: u4,
    -            ///  Main PLL (PLL) enable
    -            PLLON: u1,
    -            ///  Main PLL (PLL) clock ready flag
    -            PLLRDY: u1,
    -            ///  PLLI2S enable
    -            PLLI2SON: u1,
    -            ///  PLLI2S clock ready flag
    -            PLLI2SRDY: u1,
    -            padding: u4,
    -        }),
    -        ///  PLL configuration register
    -        PLLCFGR: mmio.Mmio(packed struct(u32) {
    -            ///  Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock
    -            PLLM0: u1,
    -            ///  Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock
    -            PLLM1: u1,
    -            ///  Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock
    -            PLLM2: u1,
    -            ///  Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock
    -            PLLM3: u1,
    -            ///  Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock
    -            PLLM4: u1,
    -            ///  Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock
    -            PLLM5: u1,
    -            ///  Main PLL (PLL) multiplication factor for VCO
    -            PLLN0: u1,
    -            ///  Main PLL (PLL) multiplication factor for VCO
    -            PLLN1: u1,
    -            ///  Main PLL (PLL) multiplication factor for VCO
    -            PLLN2: u1,
    -            ///  Main PLL (PLL) multiplication factor for VCO
    -            PLLN3: u1,
    -            ///  Main PLL (PLL) multiplication factor for VCO
    -            PLLN4: u1,
    -            ///  Main PLL (PLL) multiplication factor for VCO
    -            PLLN5: u1,
    -            ///  Main PLL (PLL) multiplication factor for VCO
    -            PLLN6: u1,
    -            ///  Main PLL (PLL) multiplication factor for VCO
    -            PLLN7: u1,
    -            ///  Main PLL (PLL) multiplication factor for VCO
    -            PLLN8: u1,
    -            reserved16: u1,
    -            ///  Main PLL (PLL) division factor for main system clock
    -            PLLP0: u1,
    -            ///  Main PLL (PLL) division factor for main system clock
    -            PLLP1: u1,
    -            reserved22: u4,
    -            ///  Main PLL(PLL) and audio PLL (PLLI2S) entry clock source
    -            PLLSRC: u1,
    -            reserved24: u1,
    -            ///  Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks
    -            PLLQ0: u1,
    -            ///  Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks
    -            PLLQ1: u1,
    -            ///  Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks
    -            PLLQ2: u1,
    -            ///  Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks
    -            PLLQ3: u1,
    -            padding: u4,
    -        }),
    -        ///  clock configuration register
    -        CFGR: mmio.Mmio(packed struct(u32) {
    -            ///  System clock switch
    -            SW0: u1,
    -            ///  System clock switch
    -            SW1: u1,
    -            ///  System clock switch status
    -            SWS0: u1,
    -            ///  System clock switch status
    -            SWS1: u1,
    -            ///  AHB prescaler
    -            HPRE: u4,
    -            reserved10: u2,
    -            ///  APB Low speed prescaler (APB1)
    -            PPRE1: u3,
    -            ///  APB high-speed prescaler (APB2)
    -            PPRE2: u3,
    -            ///  HSE division factor for RTC clock
    -            RTCPRE: u5,
    -            ///  Microcontroller clock output 1
    -            MCO1: u2,
    -            ///  I2S clock selection
    -            I2SSRC: u1,
    -            ///  MCO1 prescaler
    -            MCO1PRE: u3,
    -            ///  MCO2 prescaler
    -            MCO2PRE: u3,
    -            ///  Microcontroller clock output 2
    -            MCO2: u2,
    -        }),
    -        ///  clock interrupt register
    -        CIR: mmio.Mmio(packed struct(u32) {
    -            ///  LSI ready interrupt flag
    -            LSIRDYF: u1,
    -            ///  LSE ready interrupt flag
    -            LSERDYF: u1,
    -            ///  HSI ready interrupt flag
    -            HSIRDYF: u1,
    -            ///  HSE ready interrupt flag
    -            HSERDYF: u1,
    -            ///  Main PLL (PLL) ready interrupt flag
    -            PLLRDYF: u1,
    -            ///  PLLI2S ready interrupt flag
    -            PLLI2SRDYF: u1,
    -            reserved7: u1,
    -            ///  Clock security system interrupt flag
    -            CSSF: u1,
    -            ///  LSI ready interrupt enable
    -            LSIRDYIE: u1,
    -            ///  LSE ready interrupt enable
    -            LSERDYIE: u1,
    -            ///  HSI ready interrupt enable
    -            HSIRDYIE: u1,
    -            ///  HSE ready interrupt enable
    -            HSERDYIE: u1,
    -            ///  Main PLL (PLL) ready interrupt enable
    -            PLLRDYIE: u1,
    -            ///  PLLI2S ready interrupt enable
    -            PLLI2SRDYIE: u1,
    -            reserved16: u2,
    -            ///  LSI ready interrupt clear
    -            LSIRDYC: u1,
    -            ///  LSE ready interrupt clear
    -            LSERDYC: u1,
    -            ///  HSI ready interrupt clear
    -            HSIRDYC: u1,
    -            ///  HSE ready interrupt clear
    -            HSERDYC: u1,
    -            ///  Main PLL(PLL) ready interrupt clear
    -            PLLRDYC: u1,
    -            ///  PLLI2S ready interrupt clear
    -            PLLI2SRDYC: u1,
    -            reserved23: u1,
    -            ///  Clock security system interrupt clear
    -            CSSC: u1,
    -            padding: u8,
    -        }),
    -        ///  AHB1 peripheral reset register
    -        AHB1RSTR: mmio.Mmio(packed struct(u32) {
    -            ///  IO port A reset
    -            GPIOARST: u1,
    -            ///  IO port B reset
    -            GPIOBRST: u1,
    -            ///  IO port C reset
    -            GPIOCRST: u1,
    -            ///  IO port D reset
    -            GPIODRST: u1,
    -            ///  IO port E reset
    -            GPIOERST: u1,
    -            ///  IO port F reset
    -            GPIOFRST: u1,
    -            ///  IO port G reset
    -            GPIOGRST: u1,
    -            ///  IO port H reset
    -            GPIOHRST: u1,
    -            ///  IO port I reset
    -            GPIOIRST: u1,
    -            reserved12: u3,
    -            ///  CRC reset
    -            CRCRST: u1,
    -            reserved21: u8,
    -            ///  DMA2 reset
    -            DMA1RST: u1,
    -            ///  DMA2 reset
    -            DMA2RST: u1,
    -            reserved25: u2,
    -            ///  Ethernet MAC reset
    -            ETHMACRST: u1,
    -            reserved29: u3,
    -            ///  USB OTG HS module reset
    -            OTGHSRST: u1,
    -            padding: u2,
    -        }),
    -        ///  AHB2 peripheral reset register
    -        AHB2RSTR: mmio.Mmio(packed struct(u32) {
    -            ///  Camera interface reset
    -            DCMIRST: u1,
    -            reserved4: u3,
    -            ///  Cryptographic module reset
    -            CRYPRST: u1,
    -            ///  Hash module reset
    -            HSAHRST: u1,
    -            ///  Random number generator module reset
    -            RNGRST: u1,
    -            ///  USB OTG FS module reset
    -            OTGFSRST: u1,
    -            padding: u24,
    -        }),
    -        ///  AHB3 peripheral reset register
    -        AHB3RSTR: mmio.Mmio(packed struct(u32) {
    -            ///  Flexible memory controller module reset
    -            FMCRST: u1,
    -            padding: u31,
    -        }),
    -        reserved32: [4]u8,
    -        ///  APB1 peripheral reset register
    -        APB1RSTR: mmio.Mmio(packed struct(u32) {
    -            ///  TIM2 reset
    -            TIM2RST: u1,
    -            ///  TIM3 reset
    -            TIM3RST: u1,
    -            ///  TIM4 reset
    -            TIM4RST: u1,
    -            ///  TIM5 reset
    -            TIM5RST: u1,
    -            ///  TIM6 reset
    -            TIM6RST: u1,
    -            ///  TIM7 reset
    -            TIM7RST: u1,
    -            ///  TIM12 reset
    -            TIM12RST: u1,
    -            ///  TIM13 reset
    -            TIM13RST: u1,
    -            ///  TIM14 reset
    -            TIM14RST: u1,
    -            reserved11: u2,
    -            ///  Window watchdog reset
    -            WWDGRST: u1,
    -            reserved14: u2,
    -            ///  SPI 2 reset
    -            SPI2RST: u1,
    -            ///  SPI 3 reset
    -            SPI3RST: u1,
    -            reserved17: u1,
    -            ///  USART 2 reset
    -            UART2RST: u1,
    -            ///  USART 3 reset
    -            UART3RST: u1,
    -            ///  USART 4 reset
    -            UART4RST: u1,
    -            ///  USART 5 reset
    -            UART5RST: u1,
    -            ///  I2C 1 reset
    -            I2C1RST: u1,
    -            ///  I2C 2 reset
    -            I2C2RST: u1,
    -            ///  I2C3 reset
    -            I2C3RST: u1,
    -            reserved25: u1,
    -            ///  CAN1 reset
    -            CAN1RST: u1,
    -            ///  CAN2 reset
    -            CAN2RST: u1,
    -            reserved28: u1,
    -            ///  Power interface reset
    -            PWRRST: u1,
    -            ///  DAC reset
    -            DACRST: u1,
    -            padding: u2,
    -        }),
    -        ///  APB2 peripheral reset register
    -        APB2RSTR: mmio.Mmio(packed struct(u32) {
    -            ///  TIM1 reset
    -            TIM1RST: u1,
    -            ///  TIM8 reset
    -            TIM8RST: u1,
    -            reserved4: u2,
    -            ///  USART1 reset
    -            USART1RST: u1,
    -            ///  USART6 reset
    -            USART6RST: u1,
    -            reserved8: u2,
    -            ///  ADC interface reset (common to all ADCs)
    -            ADCRST: u1,
    -            reserved11: u2,
    -            ///  SDIO reset
    -            SDIORST: u1,
    -            ///  SPI 1 reset
    -            SPI1RST: u1,
    -            reserved14: u1,
    -            ///  System configuration controller reset
    -            SYSCFGRST: u1,
    -            reserved16: u1,
    -            ///  TIM9 reset
    -            TIM9RST: u1,
    -            ///  TIM10 reset
    -            TIM10RST: u1,
    -            ///  TIM11 reset
    -            TIM11RST: u1,
    -            padding: u13,
    -        }),
    -        reserved48: [8]u8,
    -        ///  AHB1 peripheral clock register
    -        AHB1ENR: mmio.Mmio(packed struct(u32) {
    -            ///  IO port A clock enable
    -            GPIOAEN: u1,
    -            ///  IO port B clock enable
    -            GPIOBEN: u1,
    -            ///  IO port C clock enable
    -            GPIOCEN: u1,
    -            ///  IO port D clock enable
    -            GPIODEN: u1,
    -            ///  IO port E clock enable
    -            GPIOEEN: u1,
    -            ///  IO port F clock enable
    -            GPIOFEN: u1,
    -            ///  IO port G clock enable
    -            GPIOGEN: u1,
    -            ///  IO port H clock enable
    -            GPIOHEN: u1,
    -            ///  IO port I clock enable
    -            GPIOIEN: u1,
    -            reserved12: u3,
    -            ///  CRC clock enable
    -            CRCEN: u1,
    -            reserved18: u5,
    -            ///  Backup SRAM interface clock enable
    -            BKPSRAMEN: u1,
    -            reserved20: u1,
    -            ///  CCM data RAM clock enable
    -            CCMDATARAMEN: u1,
    -            ///  DMA1 clock enable
    -            DMA1EN: u1,
    -            ///  DMA2 clock enable
    -            DMA2EN: u1,
    -            reserved25: u2,
    -            ///  Ethernet MAC clock enable
    -            ETHMACEN: u1,
    -            ///  Ethernet Transmission clock enable
    -            ETHMACTXEN: u1,
    -            ///  Ethernet Reception clock enable
    -            ETHMACRXEN: u1,
    -            ///  Ethernet PTP clock enable
    -            ETHMACPTPEN: u1,
    -            ///  USB OTG HS clock enable
    -            OTGHSEN: u1,
    -            ///  USB OTG HSULPI clock enable
    -            OTGHSULPIEN: u1,
    -            padding: u1,
    -        }),
    -        ///  AHB2 peripheral clock enable register
    -        AHB2ENR: mmio.Mmio(packed struct(u32) {
    -            ///  Camera interface enable
    -            DCMIEN: u1,
    -            reserved4: u3,
    -            ///  Cryptographic modules clock enable
    -            CRYPEN: u1,
    -            ///  Hash modules clock enable
    -            HASHEN: u1,
    -            ///  Random number generator clock enable
    -            RNGEN: u1,
    -            ///  USB OTG FS clock enable
    -            OTGFSEN: u1,
    -            padding: u24,
    -        }),
    -        ///  AHB3 peripheral clock enable register
    -        AHB3ENR: mmio.Mmio(packed struct(u32) {
    -            ///  Flexible memory controller module clock enable
    -            FMCEN: u1,
    -            padding: u31,
    -        }),
    -        reserved64: [4]u8,
    -        ///  APB1 peripheral clock enable register
    -        APB1ENR: mmio.Mmio(packed struct(u32) {
    -            ///  TIM2 clock enable
    -            TIM2EN: u1,
    -            ///  TIM3 clock enable
    -            TIM3EN: u1,
    -            ///  TIM4 clock enable
    -            TIM4EN: u1,
    -            ///  TIM5 clock enable
    -            TIM5EN: u1,
    -            ///  TIM6 clock enable
    -            TIM6EN: u1,
    -            ///  TIM7 clock enable
    -            TIM7EN: u1,
    -            ///  TIM12 clock enable
    -            TIM12EN: u1,
    -            ///  TIM13 clock enable
    -            TIM13EN: u1,
    -            ///  TIM14 clock enable
    -            TIM14EN: u1,
    -            reserved11: u2,
    -            ///  Window watchdog clock enable
    -            WWDGEN: u1,
    -            reserved14: u2,
    -            ///  SPI2 clock enable
    -            SPI2EN: u1,
    -            ///  SPI3 clock enable
    -            SPI3EN: u1,
    -            reserved17: u1,
    -            ///  USART 2 clock enable
    -            USART2EN: u1,
    -            ///  USART3 clock enable
    -            USART3EN: u1,
    -            ///  UART4 clock enable
    -            UART4EN: u1,
    -            ///  UART5 clock enable
    -            UART5EN: u1,
    -            ///  I2C1 clock enable
    -            I2C1EN: u1,
    -            ///  I2C2 clock enable
    -            I2C2EN: u1,
    -            ///  I2C3 clock enable
    -            I2C3EN: u1,
    -            reserved25: u1,
    -            ///  CAN 1 clock enable
    -            CAN1EN: u1,
    -            ///  CAN 2 clock enable
    -            CAN2EN: u1,
    -            reserved28: u1,
    -            ///  Power interface clock enable
    -            PWREN: u1,
    -            ///  DAC interface clock enable
    -            DACEN: u1,
    -            padding: u2,
    -        }),
    -        ///  APB2 peripheral clock enable register
    -        APB2ENR: mmio.Mmio(packed struct(u32) {
    -            ///  TIM1 clock enable
    -            TIM1EN: u1,
    -            ///  TIM8 clock enable
    -            TIM8EN: u1,
    -            reserved4: u2,
    -            ///  USART1 clock enable
    -            USART1EN: u1,
    -            ///  USART6 clock enable
    -            USART6EN: u1,
    -            reserved8: u2,
    -            ///  ADC1 clock enable
    -            ADC1EN: u1,
    -            ///  ADC2 clock enable
    -            ADC2EN: u1,
    -            ///  ADC3 clock enable
    -            ADC3EN: u1,
    -            ///  SDIO clock enable
    -            SDIOEN: u1,
    -            ///  SPI1 clock enable
    -            SPI1EN: u1,
    -            reserved14: u1,
    -            ///  System configuration controller clock enable
    -            SYSCFGEN: u1,
    -            reserved16: u1,
    -            ///  TIM9 clock enable
    -            TIM9EN: u1,
    -            ///  TIM10 clock enable
    -            TIM10EN: u1,
    -            ///  TIM11 clock enable
    -            TIM11EN: u1,
    -            padding: u13,
    -        }),
    -        reserved80: [8]u8,
    -        ///  AHB1 peripheral clock enable in low power mode register
    -        AHB1LPENR: mmio.Mmio(packed struct(u32) {
    -            ///  IO port A clock enable during sleep mode
    -            GPIOALPEN: u1,
    -            ///  IO port B clock enable during Sleep mode
    -            GPIOBLPEN: u1,
    -            ///  IO port C clock enable during Sleep mode
    -            GPIOCLPEN: u1,
    -            ///  IO port D clock enable during Sleep mode
    -            GPIODLPEN: u1,
    -            ///  IO port E clock enable during Sleep mode
    -            GPIOELPEN: u1,
    -            ///  IO port F clock enable during Sleep mode
    -            GPIOFLPEN: u1,
    -            ///  IO port G clock enable during Sleep mode
    -            GPIOGLPEN: u1,
    -            ///  IO port H clock enable during Sleep mode
    -            GPIOHLPEN: u1,
    -            ///  IO port I clock enable during Sleep mode
    -            GPIOILPEN: u1,
    -            reserved12: u3,
    -            ///  CRC clock enable during Sleep mode
    -            CRCLPEN: u1,
    -            reserved15: u2,
    -            ///  Flash interface clock enable during Sleep mode
    -            FLITFLPEN: u1,
    -            ///  SRAM 1interface clock enable during Sleep mode
    -            SRAM1LPEN: u1,
    -            ///  SRAM 2 interface clock enable during Sleep mode
    -            SRAM2LPEN: u1,
    -            ///  Backup SRAM interface clock enable during Sleep mode
    -            BKPSRAMLPEN: u1,
    -            reserved21: u2,
    -            ///  DMA1 clock enable during Sleep mode
    -            DMA1LPEN: u1,
    -            ///  DMA2 clock enable during Sleep mode
    -            DMA2LPEN: u1,
    -            reserved25: u2,
    -            ///  Ethernet MAC clock enable during Sleep mode
    -            ETHMACLPEN: u1,
    -            ///  Ethernet transmission clock enable during Sleep mode
    -            ETHMACTXLPEN: u1,
    -            ///  Ethernet reception clock enable during Sleep mode
    -            ETHMACRXLPEN: u1,
    -            ///  Ethernet PTP clock enable during Sleep mode
    -            ETHMACPTPLPEN: u1,
    -            ///  USB OTG HS clock enable during Sleep mode
    -            OTGHSLPEN: u1,
    -            ///  USB OTG HS ULPI clock enable during Sleep mode
    -            OTGHSULPILPEN: u1,
    -            padding: u1,
    -        }),
    -        ///  AHB2 peripheral clock enable in low power mode register
    -        AHB2LPENR: mmio.Mmio(packed struct(u32) {
    -            ///  Camera interface enable during Sleep mode
    -            DCMILPEN: u1,
    -            reserved4: u3,
    -            ///  Cryptography modules clock enable during Sleep mode
    -            CRYPLPEN: u1,
    -            ///  Hash modules clock enable during Sleep mode
    -            HASHLPEN: u1,
    -            ///  Random number generator clock enable during Sleep mode
    -            RNGLPEN: u1,
    -            ///  USB OTG FS clock enable during Sleep mode
    -            OTGFSLPEN: u1,
    -            padding: u24,
    -        }),
    -        ///  AHB3 peripheral clock enable in low power mode register
    -        AHB3LPENR: mmio.Mmio(packed struct(u32) {
    -            ///  Flexible memory controller module clock enable during Sleep mode
    -            FMCLPEN: u1,
    -            padding: u31,
    -        }),
    -        reserved96: [4]u8,
    -        ///  APB1 peripheral clock enable in low power mode register
    -        APB1LPENR: mmio.Mmio(packed struct(u32) {
    -            ///  TIM2 clock enable during Sleep mode
    -            TIM2LPEN: u1,
    -            ///  TIM3 clock enable during Sleep mode
    -            TIM3LPEN: u1,
    -            ///  TIM4 clock enable during Sleep mode
    -            TIM4LPEN: u1,
    -            ///  TIM5 clock enable during Sleep mode
    -            TIM5LPEN: u1,
    -            ///  TIM6 clock enable during Sleep mode
    -            TIM6LPEN: u1,
    -            ///  TIM7 clock enable during Sleep mode
    -            TIM7LPEN: u1,
    -            ///  TIM12 clock enable during Sleep mode
    -            TIM12LPEN: u1,
    -            ///  TIM13 clock enable during Sleep mode
    -            TIM13LPEN: u1,
    -            ///  TIM14 clock enable during Sleep mode
    -            TIM14LPEN: u1,
    -            reserved11: u2,
    -            ///  Window watchdog clock enable during Sleep mode
    -            WWDGLPEN: u1,
    -            reserved14: u2,
    -            ///  SPI2 clock enable during Sleep mode
    -            SPI2LPEN: u1,
    -            ///  SPI3 clock enable during Sleep mode
    -            SPI3LPEN: u1,
    -            reserved17: u1,
    -            ///  USART2 clock enable during Sleep mode
    -            USART2LPEN: u1,
    -            ///  USART3 clock enable during Sleep mode
    -            USART3LPEN: u1,
    -            ///  UART4 clock enable during Sleep mode
    -            UART4LPEN: u1,
    -            ///  UART5 clock enable during Sleep mode
    -            UART5LPEN: u1,
    -            ///  I2C1 clock enable during Sleep mode
    -            I2C1LPEN: u1,
    -            ///  I2C2 clock enable during Sleep mode
    -            I2C2LPEN: u1,
    -            ///  I2C3 clock enable during Sleep mode
    -            I2C3LPEN: u1,
    -            reserved25: u1,
    -            ///  CAN 1 clock enable during Sleep mode
    -            CAN1LPEN: u1,
    -            ///  CAN 2 clock enable during Sleep mode
    -            CAN2LPEN: u1,
    -            reserved28: u1,
    -            ///  Power interface clock enable during Sleep mode
    -            PWRLPEN: u1,
    -            ///  DAC interface clock enable during Sleep mode
    -            DACLPEN: u1,
    -            padding: u2,
    -        }),
    -        ///  APB2 peripheral clock enabled in low power mode register
    -        APB2LPENR: mmio.Mmio(packed struct(u32) {
    -            ///  TIM1 clock enable during Sleep mode
    -            TIM1LPEN: u1,
    -            ///  TIM8 clock enable during Sleep mode
    -            TIM8LPEN: u1,
    -            reserved4: u2,
    -            ///  USART1 clock enable during Sleep mode
    -            USART1LPEN: u1,
    -            ///  USART6 clock enable during Sleep mode
    -            USART6LPEN: u1,
    -            reserved8: u2,
    -            ///  ADC1 clock enable during Sleep mode
    -            ADC1LPEN: u1,
    -            ///  ADC2 clock enable during Sleep mode
    -            ADC2LPEN: u1,
    -            ///  ADC 3 clock enable during Sleep mode
    -            ADC3LPEN: u1,
    -            ///  SDIO clock enable during Sleep mode
    -            SDIOLPEN: u1,
    -            ///  SPI 1 clock enable during Sleep mode
    -            SPI1LPEN: u1,
    -            reserved14: u1,
    -            ///  System configuration controller clock enable during Sleep mode
    -            SYSCFGLPEN: u1,
    -            reserved16: u1,
    -            ///  TIM9 clock enable during sleep mode
    -            TIM9LPEN: u1,
    -            ///  TIM10 clock enable during Sleep mode
    -            TIM10LPEN: u1,
    -            ///  TIM11 clock enable during Sleep mode
    -            TIM11LPEN: u1,
    -            padding: u13,
    -        }),
    -        reserved112: [8]u8,
    -        ///  Backup domain control register
    -        BDCR: mmio.Mmio(packed struct(u32) {
    -            ///  External low-speed oscillator enable
    -            LSEON: u1,
    -            ///  External low-speed oscillator ready
    -            LSERDY: u1,
    -            ///  External low-speed oscillator bypass
    -            LSEBYP: u1,
    -            reserved8: u5,
    -            ///  RTC clock source selection
    -            RTCSEL0: u1,
    -            ///  RTC clock source selection
    -            RTCSEL1: u1,
    -            reserved15: u5,
    -            ///  RTC clock enable
    -            RTCEN: u1,
    -            ///  Backup domain software reset
    -            BDRST: u1,
    -            padding: u15,
    -        }),
    -        ///  clock control & status register
    -        CSR: mmio.Mmio(packed struct(u32) {
    -            ///  Internal low-speed oscillator enable
    -            LSION: u1,
    -            ///  Internal low-speed oscillator ready
    -            LSIRDY: u1,
    -            reserved24: u22,
    -            ///  Remove reset flag
    -            RMVF: u1,
    -            ///  BOR reset flag
    -            BORRSTF: u1,
    -            ///  PIN reset flag
    -            PADRSTF: u1,
    -            ///  POR/PDR reset flag
    -            PORRSTF: u1,
    -            ///  Software reset flag
    -            SFTRSTF: u1,
    -            ///  Independent watchdog reset flag
    -            WDGRSTF: u1,
    -            ///  Window watchdog reset flag
    -            WWDGRSTF: u1,
    -            ///  Low-power reset flag
    -            LPWRRSTF: u1,
    -        }),
    -        reserved128: [8]u8,
    -        ///  spread spectrum clock generation register
    -        SSCGR: mmio.Mmio(packed struct(u32) {
    -            ///  Modulation period
    -            MODPER: u13,
    -            ///  Incrementation step
    -            INCSTEP: u15,
    -            reserved30: u2,
    -            ///  Spread Select
    -            SPREADSEL: u1,
    -            ///  Spread spectrum modulation enable
    -            SSCGEN: u1,
    -        }),
    -        ///  PLLI2S configuration register
    -        PLLI2SCFGR: mmio.Mmio(packed struct(u32) {
    -            reserved6: u6,
    -            ///  PLLI2S multiplication factor for VCO
    -            PLLI2SN: u9,
    -            reserved24: u9,
    -            ///  PLLI2S division factor for SAI1 clock
    -            PLLI2SQ: u4,
    -            ///  PLLI2S division factor for I2S clocks
    -            PLLI2SR: u3,
    -            padding: u1,
    -        }),
    -        ///  RCC PLL configuration register
    -        PLLSAICFGR: mmio.Mmio(packed struct(u32) {
    -            reserved6: u6,
    -            ///  PLLSAI division factor for VCO
    -            PLLSAIN: u9,
    -            reserved24: u9,
    -            ///  PLLSAI division factor for SAI1 clock
    -            PLLSAIQ: u4,
    -            ///  PLLSAI division factor for LCD clock
    -            PLLSAIR: u3,
    -            padding: u1,
    -        }),
    -        ///  RCC Dedicated Clock Configuration Register
    -        DCKCFGR: mmio.Mmio(packed struct(u32) {
    -            ///  PLLI2S division factor for SAI1 clock
    -            PLLI2SDIVQ: u5,
    -            reserved8: u3,
    -            ///  PLLSAI division factor for SAI1 clock
    -            PLLSAIDIVQ: u5,
    -            reserved16: u3,
    -            ///  division factor for LCD_CLK
    -            PLLSAIDIVR: u2,
    -            reserved20: u2,
    -            ///  SAI1-A clock source selection
    -            SAI1ASRC: u2,
    -            ///  SAI1-B clock source selection
    -            SAI1BSRC: u2,
    -            ///  Timers clocks prescalers selection
    -            TIMPRE: u1,
    -            padding: u7,
    -        }),
    -    };
    -
    -    ///  General-purpose I/Os
    -    pub const GPIOK = extern struct {
    -        ///  GPIO port mode register
    -        MODER: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER0: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER1: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER2: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER3: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER4: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER5: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER6: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER7: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER8: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER9: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER10: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER11: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER12: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER13: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER14: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER15: u2,
    -        }),
    -        ///  GPIO port output type register
    -        OTYPER: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            OT0: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT1: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT2: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT3: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT4: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT5: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT6: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT7: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT8: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT9: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT10: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT11: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT12: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT13: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT14: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT15: u1,
    -            padding: u16,
    -        }),
    -        ///  GPIO port output speed register
    -        OSPEEDR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR0: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR1: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR2: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR3: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR4: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR5: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR6: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR7: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR8: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR9: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR10: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR11: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR12: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR13: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR14: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR15: u2,
    -        }),
    -        ///  GPIO port pull-up/pull-down register
    -        PUPDR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR0: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR1: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR2: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR3: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR4: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR5: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR6: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR7: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR8: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR9: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR10: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR11: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR12: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR13: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR14: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR15: u2,
    -        }),
    -        ///  GPIO port input data register
    -        IDR: mmio.Mmio(packed struct(u32) {
    -            ///  Port input data (y = 0..15)
    -            IDR0: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR1: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR2: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR3: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR4: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR5: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR6: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR7: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR8: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR9: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR10: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR11: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR12: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR13: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR14: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR15: u1,
    -            padding: u16,
    -        }),
    -        ///  GPIO port output data register
    -        ODR: mmio.Mmio(packed struct(u32) {
    -            ///  Port output data (y = 0..15)
    -            ODR0: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR1: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR2: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR3: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR4: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR5: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR6: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR7: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR8: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR9: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR10: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR11: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR12: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR13: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR14: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR15: u1,
    -            padding: u16,
    -        }),
    -        ///  GPIO port bit set/reset register
    -        BSRR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x set bit y (y= 0..15)
    -            BS0: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS1: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS2: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS3: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS4: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS5: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS6: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS7: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS8: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS9: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS10: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS11: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS12: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS13: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS14: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS15: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BR0: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR1: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR2: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR3: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR4: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR5: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR6: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR7: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR8: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR9: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR10: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR11: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR12: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR13: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR14: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR15: u1,
    -        }),
    -        ///  GPIO port configuration lock register
    -        LCKR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK0: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK1: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK2: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK3: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK4: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK5: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK6: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK7: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK8: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK9: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK10: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK11: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK12: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK13: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK14: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK15: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCKK: u1,
    -            padding: u15,
    -        }),
    -        ///  GPIO alternate function low register
    -        AFRL: mmio.Mmio(packed struct(u32) {
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL0: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL1: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL2: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL3: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL4: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL5: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL6: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL7: u4,
    -        }),
    -        ///  GPIO alternate function high register
    -        AFRH: mmio.Mmio(packed struct(u32) {
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH8: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH9: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH10: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH11: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH12: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH13: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH14: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH15: u4,
    -        }),
    -    };
    -
    -    ///  Floating point unit CPACR
    -    pub const FPU_CPACR = extern struct {
    -        ///  Coprocessor access control register
    -        CPACR: mmio.Mmio(packed struct(u32) {
    -            reserved20: u20,
    -            ///  CP
    -            CP: u4,
    -            padding: u8,
    -        }),
    -    };
    -
    -    ///  Nested vectored interrupt controller
    -    pub const NVIC_STIR = extern struct {
    -        ///  Software trigger interrupt register
    -        STIR: mmio.Mmio(packed struct(u32) {
    -            ///  Software generated interrupt ID
    -            INTID: u9,
    -            padding: u23,
    -        }),
    -    };
    -
    -    ///  System control block
    -    pub const SCB = extern struct {
    -        ///  CPUID base register
    -        CPUID: mmio.Mmio(packed struct(u32) {
    -            ///  Revision number
    -            Revision: u4,
    -            ///  Part number of the processor
    -            PartNo: u12,
    -            ///  Reads as 0xF
    -            Constant: u4,
    -            ///  Variant number
    -            Variant: u4,
    -            ///  Implementer code
    -            Implementer: u8,
    -        }),
    -        ///  Interrupt control and state register
    -        ICSR: mmio.Mmio(packed struct(u32) {
    -            ///  Active vector
    -            VECTACTIVE: u9,
    -            reserved11: u2,
    -            ///  Return to base level
    -            RETTOBASE: u1,
    -            ///  Pending vector
    -            VECTPENDING: u7,
    -            reserved22: u3,
    -            ///  Interrupt pending flag
    -            ISRPENDING: u1,
    -            reserved25: u2,
    -            ///  SysTick exception clear-pending bit
    -            PENDSTCLR: u1,
    -            ///  SysTick exception set-pending bit
    -            PENDSTSET: u1,
    -            ///  PendSV clear-pending bit
    -            PENDSVCLR: u1,
    -            ///  PendSV set-pending bit
    -            PENDSVSET: u1,
    -            reserved31: u2,
    -            ///  NMI set-pending bit.
    -            NMIPENDSET: u1,
    -        }),
    -        ///  Vector table offset register
    -        VTOR: mmio.Mmio(packed struct(u32) {
    -            reserved9: u9,
    -            ///  Vector table base offset field
    -            TBLOFF: u21,
    -            padding: u2,
    -        }),
    -        ///  Application interrupt and reset control register
    -        AIRCR: mmio.Mmio(packed struct(u32) {
    -            ///  VECTRESET
    -            VECTRESET: u1,
    -            ///  VECTCLRACTIVE
    -            VECTCLRACTIVE: u1,
    -            ///  SYSRESETREQ
    -            SYSRESETREQ: u1,
    -            reserved8: u5,
    -            ///  PRIGROUP
    -            PRIGROUP: u3,
    -            reserved15: u4,
    -            ///  ENDIANESS
    -            ENDIANESS: u1,
    -            ///  Register key
    -            VECTKEYSTAT: u16,
    -        }),
    -        ///  System control register
    -        SCR: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  SLEEPONEXIT
    -            SLEEPONEXIT: u1,
    -            ///  SLEEPDEEP
    -            SLEEPDEEP: u1,
    -            reserved4: u1,
    -            ///  Send Event on Pending bit
    -            SEVEONPEND: u1,
    -            padding: u27,
    -        }),
    -        ///  Configuration and control register
    -        CCR: mmio.Mmio(packed struct(u32) {
    -            ///  Configures how the processor enters Thread mode
    -            NONBASETHRDENA: u1,
    -            ///  USERSETMPEND
    -            USERSETMPEND: u1,
    -            reserved3: u1,
    -            ///  UNALIGN_ TRP
    -            UNALIGN__TRP: u1,
    -            ///  DIV_0_TRP
    -            DIV_0_TRP: u1,
    -            reserved8: u3,
    -            ///  BFHFNMIGN
    -            BFHFNMIGN: u1,
    -            ///  STKALIGN
    -            STKALIGN: u1,
    -            padding: u22,
    -        }),
    -        ///  System handler priority registers
    -        SHPR1: mmio.Mmio(packed struct(u32) {
    -            ///  Priority of system handler 4
    -            PRI_4: u8,
    -            ///  Priority of system handler 5
    -            PRI_5: u8,
    -            ///  Priority of system handler 6
    -            PRI_6: u8,
    -            padding: u8,
    -        }),
    -        ///  System handler priority registers
    -        SHPR2: mmio.Mmio(packed struct(u32) {
    -            reserved24: u24,
    -            ///  Priority of system handler 11
    -            PRI_11: u8,
    -        }),
    -        ///  System handler priority registers
    -        SHPR3: mmio.Mmio(packed struct(u32) {
    -            reserved16: u16,
    -            ///  Priority of system handler 14
    -            PRI_14: u8,
    -            ///  Priority of system handler 15
    -            PRI_15: u8,
    -        }),
    -        ///  System handler control and state register
    -        SHCRS: mmio.Mmio(packed struct(u32) {
    -            ///  Memory management fault exception active bit
    -            MEMFAULTACT: u1,
    -            ///  Bus fault exception active bit
    -            BUSFAULTACT: u1,
    -            reserved3: u1,
    -            ///  Usage fault exception active bit
    -            USGFAULTACT: u1,
    -            reserved7: u3,
    -            ///  SVC call active bit
    -            SVCALLACT: u1,
    -            ///  Debug monitor active bit
    -            MONITORACT: u1,
    -            reserved10: u1,
    -            ///  PendSV exception active bit
    -            PENDSVACT: u1,
    -            ///  SysTick exception active bit
    -            SYSTICKACT: u1,
    -            ///  Usage fault exception pending bit
    -            USGFAULTPENDED: u1,
    -            ///  Memory management fault exception pending bit
    -            MEMFAULTPENDED: u1,
    -            ///  Bus fault exception pending bit
    -            BUSFAULTPENDED: u1,
    -            ///  SVC call pending bit
    -            SVCALLPENDED: u1,
    -            ///  Memory management fault enable bit
    -            MEMFAULTENA: u1,
    -            ///  Bus fault enable bit
    -            BUSFAULTENA: u1,
    -            ///  Usage fault enable bit
    -            USGFAULTENA: u1,
    -            padding: u13,
    -        }),
    -        ///  Configurable fault status register
    -        CFSR_UFSR_BFSR_MMFSR: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  Instruction access violation flag
    -            IACCVIOL: u1,
    -            reserved3: u1,
    -            ///  Memory manager fault on unstacking for a return from exception
    -            MUNSTKERR: u1,
    -            ///  Memory manager fault on stacking for exception entry.
    -            MSTKERR: u1,
    -            ///  MLSPERR
    -            MLSPERR: u1,
    -            reserved7: u1,
    -            ///  Memory Management Fault Address Register (MMAR) valid flag
    -            MMARVALID: u1,
    -            ///  Instruction bus error
    -            IBUSERR: u1,
    -            ///  Precise data bus error
    -            PRECISERR: u1,
    -            ///  Imprecise data bus error
    -            IMPRECISERR: u1,
    -            ///  Bus fault on unstacking for a return from exception
    -            UNSTKERR: u1,
    -            ///  Bus fault on stacking for exception entry
    -            STKERR: u1,
    -            ///  Bus fault on floating-point lazy state preservation
    -            LSPERR: u1,
    -            reserved15: u1,
    -            ///  Bus Fault Address Register (BFAR) valid flag
    -            BFARVALID: u1,
    -            ///  Undefined instruction usage fault
    -            UNDEFINSTR: u1,
    -            ///  Invalid state usage fault
    -            INVSTATE: u1,
    -            ///  Invalid PC load usage fault
    -            INVPC: u1,
    -            ///  No coprocessor usage fault.
    -            NOCP: u1,
    -            reserved24: u4,
    -            ///  Unaligned access usage fault
    -            UNALIGNED: u1,
    -            ///  Divide by zero usage fault
    -            DIVBYZERO: u1,
    -            padding: u6,
    -        }),
    -        ///  Hard fault status register
    -        HFSR: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  Vector table hard fault
    -            VECTTBL: u1,
    -            reserved30: u28,
    -            ///  Forced hard fault
    -            FORCED: u1,
    -            ///  Reserved for Debug use
    -            DEBUG_VT: u1,
    -        }),
    -        reserved52: [4]u8,
    -        ///  Memory management fault address register
    -        MMFAR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory management fault address
    -            MMFAR: u32,
    -        }),
    -        ///  Bus fault address register
    -        BFAR: mmio.Mmio(packed struct(u32) {
    -            ///  Bus fault address
    -            BFAR: u32,
    -        }),
    -        ///  Auxiliary fault status register
    -        AFSR: mmio.Mmio(packed struct(u32) {
    -            ///  Implementation defined
    -            IMPDEF: u32,
    -        }),
    -    };
    -
    -    ///  SysTick timer
    -    pub const STK = extern struct {
    -        ///  SysTick control and status register
    -        CTRL: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            ENABLE: u1,
    -            ///  SysTick exception request enable
    -            TICKINT: u1,
    -            ///  Clock source selection
    -            CLKSOURCE: u1,
    -            reserved16: u13,
    -            ///  COUNTFLAG
    -            COUNTFLAG: u1,
    -            padding: u15,
    -        }),
    -        ///  SysTick reload value register
    -        LOAD: mmio.Mmio(packed struct(u32) {
    -            ///  RELOAD value
    -            RELOAD: u24,
    -            padding: u8,
    -        }),
    -        ///  SysTick current value register
    -        VAL: mmio.Mmio(packed struct(u32) {
    -            ///  Current counter value
    -            CURRENT: u24,
    -            padding: u8,
    -        }),
    -        ///  SysTick calibration value register
    -        CALIB: mmio.Mmio(packed struct(u32) {
    -            ///  Calibration value
    -            TENMS: u24,
    -            reserved30: u6,
    -            ///  SKEW flag: Indicates whether the TENMS value is exact
    -            SKEW: u1,
    -            ///  NOREF flag. Reads as zero
    -            NOREF: u1,
    -        }),
    -    };
    -
    -    ///  Memory protection unit
    -    pub const MPU = extern struct {
    -        ///  MPU type register
    -        MPU_TYPER: mmio.Mmio(packed struct(u32) {
    -            ///  Separate flag
    -            SEPARATE: u1,
    -            reserved8: u7,
    -            ///  Number of MPU data regions
    -            DREGION: u8,
    -            ///  Number of MPU instruction regions
    -            IREGION: u8,
    -            padding: u8,
    -        }),
    -        ///  MPU control register
    -        MPU_CTRL: mmio.Mmio(packed struct(u32) {
    -            ///  Enables the MPU
    -            ENABLE: u1,
    -            ///  Enables the operation of MPU during hard fault
    -            HFNMIENA: u1,
    -            ///  Enable priviliged software access to default memory map
    -            PRIVDEFENA: u1,
    -            padding: u29,
    -        }),
    -        ///  MPU region number register
    -        MPU_RNR: mmio.Mmio(packed struct(u32) {
    -            ///  MPU region
    -            REGION: u8,
    -            padding: u24,
    -        }),
    -        ///  MPU region base address register
    -        MPU_RBAR: mmio.Mmio(packed struct(u32) {
    -            ///  MPU region field
    -            REGION: u4,
    -            ///  MPU region number valid
    -            VALID: u1,
    -            ///  Region base address field
    -            ADDR: u27,
    -        }),
    -        ///  MPU region attribute and size register
    -        MPU_RASR: mmio.Mmio(packed struct(u32) {
    -            ///  Region enable bit.
    -            ENABLE: u1,
    -            ///  Size of the MPU protection region
    -            SIZE: u5,
    -            reserved8: u2,
    -            ///  Subregion disable bits
    -            SRD: u8,
    -            ///  memory attribute
    -            B: u1,
    -            ///  memory attribute
    -            C: u1,
    -            ///  Shareable memory attribute
    -            S: u1,
    -            ///  memory attribute
    -            TEX: u3,
    -            reserved24: u2,
    -            ///  Access permission
    -            AP: u3,
    -            reserved28: u1,
    -            ///  Instruction access disable bit
    -            XN: u1,
    -            padding: u3,
    -        }),
    -    };
    -
    -    ///  Floting point unit
    -    pub const FPU = extern struct {
    -        ///  Floating-point context control register
    -        FPCCR: mmio.Mmio(packed struct(u32) {
    -            ///  LSPACT
    -            LSPACT: u1,
    -            ///  USER
    -            USER: u1,
    -            reserved3: u1,
    -            ///  THREAD
    -            THREAD: u1,
    -            ///  HFRDY
    -            HFRDY: u1,
    -            ///  MMRDY
    -            MMRDY: u1,
    -            ///  BFRDY
    -            BFRDY: u1,
    -            reserved8: u1,
    -            ///  MONRDY
    -            MONRDY: u1,
    -            reserved30: u21,
    -            ///  LSPEN
    -            LSPEN: u1,
    -            ///  ASPEN
    -            ASPEN: u1,
    -        }),
    -        ///  Floating-point context address register
    -        FPCAR: mmio.Mmio(packed struct(u32) {
    -            reserved3: u3,
    -            ///  Location of unpopulated floating-point
    -            ADDRESS: u29,
    -        }),
    -        ///  Floating-point status control register
    -        FPSCR: mmio.Mmio(packed struct(u32) {
    -            ///  Invalid operation cumulative exception bit
    -            IOC: u1,
    -            ///  Division by zero cumulative exception bit.
    -            DZC: u1,
    -            ///  Overflow cumulative exception bit
    -            OFC: u1,
    -            ///  Underflow cumulative exception bit
    -            UFC: u1,
    -            ///  Inexact cumulative exception bit
    -            IXC: u1,
    -            reserved7: u2,
    -            ///  Input denormal cumulative exception bit.
    -            IDC: u1,
    -            reserved22: u14,
    -            ///  Rounding Mode control field
    -            RMode: u2,
    -            ///  Flush-to-zero mode control bit:
    -            FZ: u1,
    -            ///  Default NaN mode control bit
    -            DN: u1,
    -            ///  Alternative half-precision control bit
    -            AHP: u1,
    -            reserved28: u1,
    -            ///  Overflow condition code flag
    -            V: u1,
    -            ///  Carry condition code flag
    -            C: u1,
    -            ///  Zero condition code flag
    -            Z: u1,
    -            ///  Negative condition code flag
    -            N: u1,
    -        }),
    -    };
    -
    -    ///  Basic timers
    -    pub const TIM6 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            ///  One-pulse mode
    -            OPM: u1,
    -            reserved7: u3,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            padding: u24,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            reserved4: u4,
    -            ///  Master mode selection
    -            MMS: u3,
    -            padding: u25,
    -        }),
    -        reserved12: [4]u8,
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            reserved8: u7,
    -            ///  Update DMA request enable
    -            UDE: u1,
    -            padding: u23,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            padding: u31,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            padding: u31,
    -        }),
    -        reserved36: [12]u8,
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  Low counter value
    -            CNT: u16,
    -            padding: u16,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Low Auto-reload value
    -            ARR: u16,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  Ethernet: MAC management counters
    -    pub const Ethernet_MMC = extern struct {
    -        ///  Ethernet MMC control register
    -        MMCCR: mmio.Mmio(packed struct(u32) {
    -            ///  CR
    -            CR: u1,
    -            ///  CSR
    -            CSR: u1,
    -            ///  ROR
    -            ROR: u1,
    -            ///  MCF
    -            MCF: u1,
    -            ///  MCP
    -            MCP: u1,
    -            ///  MCFHP
    -            MCFHP: u1,
    -            padding: u26,
    -        }),
    -        ///  Ethernet MMC receive interrupt register
    -        MMCRIR: mmio.Mmio(packed struct(u32) {
    -            reserved5: u5,
    -            ///  RFCES
    -            RFCES: u1,
    -            ///  RFAES
    -            RFAES: u1,
    -            reserved17: u10,
    -            ///  RGUFS
    -            RGUFS: u1,
    -            padding: u14,
    -        }),
    -        ///  Ethernet MMC transmit interrupt register
    -        MMCTIR: mmio.Mmio(packed struct(u32) {
    -            reserved14: u14,
    -            ///  TGFSCS
    -            TGFSCS: u1,
    -            ///  TGFMSCS
    -            TGFMSCS: u1,
    -            reserved21: u5,
    -            ///  TGFS
    -            TGFS: u1,
    -            padding: u10,
    -        }),
    -        ///  Ethernet MMC receive interrupt mask register
    -        MMCRIMR: mmio.Mmio(packed struct(u32) {
    -            reserved5: u5,
    -            ///  RFCEM
    -            RFCEM: u1,
    -            ///  RFAEM
    -            RFAEM: u1,
    -            reserved17: u10,
    -            ///  RGUFM
    -            RGUFM: u1,
    -            padding: u14,
    -        }),
    -        ///  Ethernet MMC transmit interrupt mask register
    -        MMCTIMR: mmio.Mmio(packed struct(u32) {
    -            reserved14: u14,
    -            ///  TGFSCM
    -            TGFSCM: u1,
    -            ///  TGFMSCM
    -            TGFMSCM: u1,
    -            ///  TGFM
    -            TGFM: u1,
    -            padding: u15,
    -        }),
    -        reserved76: [56]u8,
    -        ///  Ethernet MMC transmitted good frames after a single collision counter
    -        MMCTGFSCCR: mmio.Mmio(packed struct(u32) {
    -            ///  TGFSCC
    -            TGFSCC: u32,
    -        }),
    -        ///  Ethernet MMC transmitted good frames after more than a single collision
    -        MMCTGFMSCCR: mmio.Mmio(packed struct(u32) {
    -            ///  TGFMSCC
    -            TGFMSCC: u32,
    -        }),
    -        reserved104: [20]u8,
    -        ///  Ethernet MMC transmitted good frames counter register
    -        MMCTGFCR: mmio.Mmio(packed struct(u32) {
    -            ///  HTL
    -            TGFC: u32,
    -        }),
    -        reserved148: [40]u8,
    -        ///  Ethernet MMC received frames with CRC error counter register
    -        MMCRFCECR: mmio.Mmio(packed struct(u32) {
    -            ///  RFCFC
    -            RFCFC: u32,
    -        }),
    -        ///  Ethernet MMC received frames with alignment error counter register
    -        MMCRFAECR: mmio.Mmio(packed struct(u32) {
    -            ///  RFAEC
    -            RFAEC: u32,
    -        }),
    -        reserved196: [40]u8,
    -        ///  MMC received good unicast frames counter register
    -        MMCRGUFCR: mmio.Mmio(packed struct(u32) {
    -            ///  RGUFC
    -            RGUFC: u32,
    -        }),
    -    };
    -
    -    ///  General-purpose I/Os
    -    pub const GPIOB = extern struct {
    -        ///  GPIO port mode register
    -        MODER: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER0: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER1: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER2: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER3: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER4: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER5: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER6: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER7: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER8: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER9: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER10: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER11: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER12: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER13: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER14: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER15: u2,
    -        }),
    -        ///  GPIO port output type register
    -        OTYPER: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            OT0: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT1: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT2: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT3: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT4: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT5: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT6: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT7: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT8: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT9: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT10: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT11: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT12: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT13: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT14: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT15: u1,
    -            padding: u16,
    -        }),
    -        ///  GPIO port output speed register
    -        OSPEEDR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR0: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR1: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR2: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR3: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR4: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR5: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR6: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR7: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR8: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR9: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR10: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR11: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR12: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR13: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR14: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR15: u2,
    -        }),
    -        ///  GPIO port pull-up/pull-down register
    -        PUPDR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR0: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR1: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR2: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR3: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR4: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR5: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR6: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR7: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR8: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR9: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR10: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR11: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR12: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR13: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR14: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR15: u2,
    -        }),
    -        ///  GPIO port input data register
    -        IDR: mmio.Mmio(packed struct(u32) {
    -            ///  Port input data (y = 0..15)
    -            IDR0: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR1: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR2: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR3: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR4: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR5: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR6: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR7: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR8: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR9: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR10: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR11: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR12: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR13: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR14: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR15: u1,
    -            padding: u16,
    -        }),
    -        ///  GPIO port output data register
    -        ODR: mmio.Mmio(packed struct(u32) {
    -            ///  Port output data (y = 0..15)
    -            ODR0: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR1: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR2: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR3: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR4: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR5: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR6: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR7: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR8: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR9: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR10: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR11: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR12: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR13: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR14: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR15: u1,
    -            padding: u16,
    -        }),
    -        ///  GPIO port bit set/reset register
    -        BSRR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x set bit y (y= 0..15)
    -            BS0: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS1: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS2: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS3: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS4: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS5: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS6: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS7: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS8: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS9: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS10: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS11: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS12: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS13: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS14: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS15: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BR0: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR1: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR2: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR3: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR4: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR5: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR6: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR7: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR8: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR9: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR10: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR11: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR12: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR13: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR14: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR15: u1,
    -        }),
    -        ///  GPIO port configuration lock register
    -        LCKR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK0: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK1: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK2: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK3: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK4: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK5: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK6: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK7: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK8: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK9: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK10: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK11: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK12: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK13: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK14: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK15: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCKK: u1,
    -            padding: u15,
    -        }),
    -        ///  GPIO alternate function low register
    -        AFRL: mmio.Mmio(packed struct(u32) {
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL0: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL1: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL2: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL3: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL4: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL5: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL6: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL7: u4,
    -        }),
    -        ///  GPIO alternate function high register
    -        AFRH: mmio.Mmio(packed struct(u32) {
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH8: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH9: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH10: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH11: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH12: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH13: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH14: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH15: u4,
    -        }),
    -    };
    -
    -    ///  General-purpose I/Os
    -    pub const GPIOA = extern struct {
    -        ///  GPIO port mode register
    -        MODER: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER0: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER1: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER2: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER3: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER4: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER5: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER6: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER7: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER8: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER9: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER10: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER11: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER12: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER13: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER14: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            MODER15: u2,
    -        }),
    -        ///  GPIO port output type register
    -        OTYPER: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            OT0: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT1: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT2: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT3: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT4: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT5: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT6: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT7: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT8: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT9: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT10: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT11: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT12: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT13: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT14: u1,
    -            ///  Port x configuration bits (y = 0..15)
    -            OT15: u1,
    -            padding: u16,
    -        }),
    -        ///  GPIO port output speed register
    -        OSPEEDR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR0: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR1: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR2: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR3: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR4: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR5: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR6: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR7: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR8: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR9: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR10: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR11: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR12: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR13: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR14: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            OSPEEDR15: u2,
    -        }),
    -        ///  GPIO port pull-up/pull-down register
    -        PUPDR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR0: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR1: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR2: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR3: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR4: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR5: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR6: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR7: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR8: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR9: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR10: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR11: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR12: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR13: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR14: u2,
    -            ///  Port x configuration bits (y = 0..15)
    -            PUPDR15: u2,
    -        }),
    -        ///  GPIO port input data register
    -        IDR: mmio.Mmio(packed struct(u32) {
    -            ///  Port input data (y = 0..15)
    -            IDR0: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR1: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR2: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR3: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR4: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR5: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR6: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR7: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR8: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR9: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR10: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR11: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR12: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR13: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR14: u1,
    -            ///  Port input data (y = 0..15)
    -            IDR15: u1,
    -            padding: u16,
    -        }),
    -        ///  GPIO port output data register
    -        ODR: mmio.Mmio(packed struct(u32) {
    -            ///  Port output data (y = 0..15)
    -            ODR0: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR1: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR2: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR3: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR4: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR5: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR6: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR7: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR8: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR9: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR10: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR11: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR12: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR13: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR14: u1,
    -            ///  Port output data (y = 0..15)
    -            ODR15: u1,
    -            padding: u16,
    -        }),
    -        ///  GPIO port bit set/reset register
    -        BSRR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x set bit y (y= 0..15)
    -            BS0: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS1: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS2: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS3: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS4: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS5: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS6: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS7: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS8: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS9: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS10: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS11: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS12: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS13: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS14: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BS15: u1,
    -            ///  Port x set bit y (y= 0..15)
    -            BR0: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR1: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR2: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR3: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR4: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR5: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR6: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR7: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR8: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR9: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR10: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR11: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR12: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR13: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR14: u1,
    -            ///  Port x reset bit y (y = 0..15)
    -            BR15: u1,
    -        }),
    -        ///  GPIO port configuration lock register
    -        LCKR: mmio.Mmio(packed struct(u32) {
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK0: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK1: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK2: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK3: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK4: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK5: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK6: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK7: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK8: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK9: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK10: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK11: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK12: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK13: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK14: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCK15: u1,
    -            ///  Port x lock bit y (y= 0..15)
    -            LCKK: u1,
    -            padding: u15,
    -        }),
    -        ///  GPIO alternate function low register
    -        AFRL: mmio.Mmio(packed struct(u32) {
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL0: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL1: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL2: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL3: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL4: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL5: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL6: u4,
    -            ///  Alternate function selection for port x bit y (y = 0..7)
    -            AFRL7: u4,
    -        }),
    -        ///  GPIO alternate function high register
    -        AFRH: mmio.Mmio(packed struct(u32) {
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH8: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH9: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH10: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH11: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH12: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH13: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH14: u4,
    -            ///  Alternate function selection for port x bit y (y = 8..15)
    -            AFRH15: u4,
    -        }),
    -    };
    -
    -    ///  System configuration controller
    -    pub const SYSCFG = extern struct {
    -        ///  memory remap register
    -        MEMRM: mmio.Mmio(packed struct(u32) {
    -            ///  Memory mapping selection
    -            MEM_MODE: u3,
    -            reserved8: u5,
    -            ///  Flash bank mode selection
    -            FB_MODE: u1,
    -            reserved10: u1,
    -            ///  FMC memory mapping swap
    -            SWP_FMC: u2,
    -            padding: u20,
    -        }),
    -        ///  peripheral mode configuration register
    -        PMC: mmio.Mmio(packed struct(u32) {
    -            reserved16: u16,
    -            ///  ADC1DC2
    -            ADC1DC2: u1,
    -            ///  ADC2DC2
    -            ADC2DC2: u1,
    -            ///  ADC3DC2
    -            ADC3DC2: u1,
    -            reserved23: u4,
    -            ///  Ethernet PHY interface selection
    -            MII_RMII_SEL: u1,
    -            padding: u8,
    -        }),
    -        ///  external interrupt configuration register 1
    -        EXTICR1: mmio.Mmio(packed struct(u32) {
    -            ///  EXTI x configuration (x = 0 to 3)
    -            EXTI0: u4,
    -            ///  EXTI x configuration (x = 0 to 3)
    -            EXTI1: u4,
    -            ///  EXTI x configuration (x = 0 to 3)
    -            EXTI2: u4,
    -            ///  EXTI x configuration (x = 0 to 3)
    -            EXTI3: u4,
    -            padding: u16,
    -        }),
    -        ///  external interrupt configuration register 2
    -        EXTICR2: mmio.Mmio(packed struct(u32) {
    -            ///  EXTI x configuration (x = 4 to 7)
    -            EXTI4: u4,
    -            ///  EXTI x configuration (x = 4 to 7)
    -            EXTI5: u4,
    -            ///  EXTI x configuration (x = 4 to 7)
    -            EXTI6: u4,
    -            ///  EXTI x configuration (x = 4 to 7)
    -            EXTI7: u4,
    -            padding: u16,
    -        }),
    -        ///  external interrupt configuration register 3
    -        EXTICR3: mmio.Mmio(packed struct(u32) {
    -            ///  EXTI x configuration (x = 8 to 11)
    -            EXTI8: u4,
    -            ///  EXTI x configuration (x = 8 to 11)
    -            EXTI9: u4,
    -            ///  EXTI10
    -            EXTI10: u4,
    -            ///  EXTI x configuration (x = 8 to 11)
    -            EXTI11: u4,
    -            padding: u16,
    -        }),
    -        ///  external interrupt configuration register 4
    -        EXTICR4: mmio.Mmio(packed struct(u32) {
    -            ///  EXTI x configuration (x = 12 to 15)
    -            EXTI12: u4,
    -            ///  EXTI x configuration (x = 12 to 15)
    -            EXTI13: u4,
    -            ///  EXTI x configuration (x = 12 to 15)
    -            EXTI14: u4,
    -            ///  EXTI x configuration (x = 12 to 15)
    -            EXTI15: u4,
    -            padding: u16,
    -        }),
    -        reserved32: [8]u8,
    -        ///  Compensation cell control register
    -        CMPCR: mmio.Mmio(packed struct(u32) {
    -            ///  Compensation cell power-down
    -            CMP_PD: u1,
    -            reserved8: u7,
    -            ///  READY
    -            READY: u1,
    -            padding: u23,
    -        }),
    -    };
    -
    -    ///  Serial peripheral interface
    -    pub const SPI1 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Clock phase
    -            CPHA: u1,
    -            ///  Clock polarity
    -            CPOL: u1,
    -            ///  Master selection
    -            MSTR: u1,
    -            ///  Baud rate control
    -            BR: u3,
    -            ///  SPI enable
    -            SPE: u1,
    -            ///  Frame format
    -            LSBFIRST: u1,
    -            ///  Internal slave select
    -            SSI: u1,
    -            ///  Software slave management
    -            SSM: u1,
    -            ///  Receive only
    -            RXONLY: u1,
    -            ///  Data frame format
    -            DFF: u1,
    -            ///  CRC transfer next
    -            CRCNEXT: u1,
    -            ///  Hardware CRC calculation enable
    -            CRCEN: u1,
    -            ///  Output enable in bidirectional mode
    -            BIDIOE: u1,
    -            ///  Bidirectional data mode enable
    -            BIDIMODE: u1,
    -            padding: u16,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            ///  Rx buffer DMA enable
    -            RXDMAEN: u1,
    -            ///  Tx buffer DMA enable
    -            TXDMAEN: u1,
    -            ///  SS output enable
    -            SSOE: u1,
    -            reserved4: u1,
    -            ///  Frame format
    -            FRF: u1,
    -            ///  Error interrupt enable
    -            ERRIE: u1,
    -            ///  RX buffer not empty interrupt enable
    -            RXNEIE: u1,
    -            ///  Tx buffer empty interrupt enable
    -            TXEIE: u1,
    -            padding: u24,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Receive buffer not empty
    -            RXNE: u1,
    -            ///  Transmit buffer empty
    -            TXE: u1,
    -            ///  Channel side
    -            CHSIDE: u1,
    -            ///  Underrun flag
    -            UDR: u1,
    -            ///  CRC error flag
    -            CRCERR: u1,
    -            ///  Mode fault
    -            MODF: u1,
    -            ///  Overrun flag
    -            OVR: u1,
    -            ///  Busy flag
    -            BSY: u1,
    -            ///  TI frame format error
    -            TIFRFE: u1,
    -            padding: u23,
    -        }),
    -        ///  data register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  Data register
    -            DR: u16,
    -            padding: u16,
    -        }),
    -        ///  CRC polynomial register
    -        CRCPR: mmio.Mmio(packed struct(u32) {
    -            ///  CRC polynomial register
    -            CRCPOLY: u16,
    -            padding: u16,
    -        }),
    -        ///  RX CRC register
    -        RXCRCR: mmio.Mmio(packed struct(u32) {
    -            ///  Rx CRC register
    -            RxCRC: u16,
    -            padding: u16,
    -        }),
    -        ///  TX CRC register
    -        TXCRCR: mmio.Mmio(packed struct(u32) {
    -            ///  Tx CRC register
    -            TxCRC: u16,
    -            padding: u16,
    -        }),
    -        ///  I2S configuration register
    -        I2SCFGR: mmio.Mmio(packed struct(u32) {
    -            ///  Channel length (number of bits per audio channel)
    -            CHLEN: u1,
    -            ///  Data length to be transferred
    -            DATLEN: u2,
    -            ///  Steady state clock polarity
    -            CKPOL: u1,
    -            ///  I2S standard selection
    -            I2SSTD: u2,
    -            reserved7: u1,
    -            ///  PCM frame synchronization
    -            PCMSYNC: u1,
    -            ///  I2S configuration mode
    -            I2SCFG: u2,
    -            ///  I2S Enable
    -            I2SE: u1,
    -            ///  I2S mode selection
    -            I2SMOD: u1,
    -            padding: u20,
    -        }),
    -        ///  I2S prescaler register
    -        I2SPR: mmio.Mmio(packed struct(u32) {
    -            ///  I2S Linear prescaler
    -            I2SDIV: u8,
    -            ///  Odd factor for the prescaler
    -            ODD: u1,
    -            ///  Master clock output enable
    -            MCKOE: u1,
    -            padding: u22,
    -        }),
    -    };
    -
    -    ///  Inter-integrated circuit
    -    pub const I2C3 = extern struct {
    -        ///  Control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral enable
    -            PE: u1,
    -            ///  SMBus mode
    -            SMBUS: u1,
    -            reserved3: u1,
    -            ///  SMBus type
    -            SMBTYPE: u1,
    -            ///  ARP enable
    -            ENARP: u1,
    -            ///  PEC enable
    -            ENPEC: u1,
    -            ///  General call enable
    -            ENGC: u1,
    -            ///  Clock stretching disable (Slave mode)
    -            NOSTRETCH: u1,
    -            ///  Start generation
    -            START: u1,
    -            ///  Stop generation
    -            STOP: u1,
    -            ///  Acknowledge enable
    -            ACK: u1,
    -            ///  Acknowledge/PEC Position (for data reception)
    -            POS: u1,
    -            ///  Packet error checking
    -            PEC: u1,
    -            ///  SMBus alert
    -            ALERT: u1,
    -            reserved15: u1,
    -            ///  Software reset
    -            SWRST: u1,
    -            padding: u16,
    -        }),
    -        ///  Control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            ///  Peripheral clock frequency
    -            FREQ: u6,
    -            reserved8: u2,
    -            ///  Error interrupt enable
    -            ITERREN: u1,
    -            ///  Event interrupt enable
    -            ITEVTEN: u1,
    -            ///  Buffer interrupt enable
    -            ITBUFEN: u1,
    -            ///  DMA requests enable
    -            DMAEN: u1,
    -            ///  DMA last transfer
    -            LAST: u1,
    -            padding: u19,
    -        }),
    -        ///  Own address register 1
    -        OAR1: mmio.Mmio(packed struct(u32) {
    -            ///  Interface address
    -            ADD0: u1,
    -            ///  Interface address
    -            ADD7: u7,
    -            ///  Interface address
    -            ADD10: u2,
    -            reserved15: u5,
    -            ///  Addressing mode (slave mode)
    -            ADDMODE: u1,
    -            padding: u16,
    -        }),
    -        ///  Own address register 2
    -        OAR2: mmio.Mmio(packed struct(u32) {
    -            ///  Dual addressing mode enable
    -            ENDUAL: u1,
    -            ///  Interface address
    -            ADD2: u7,
    -            padding: u24,
    -        }),
    -        ///  Data register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  8-bit data register
    -            DR: u8,
    -            padding: u24,
    -        }),
    -        ///  Status register 1
    -        SR1: mmio.Mmio(packed struct(u32) {
    -            ///  Start bit (Master mode)
    -            SB: u1,
    -            ///  Address sent (master mode)/matched (slave mode)
    -            ADDR: u1,
    -            ///  Byte transfer finished
    -            BTF: u1,
    -            ///  10-bit header sent (Master mode)
    -            ADD10: u1,
    -            ///  Stop detection (slave mode)
    -            STOPF: u1,
    -            reserved6: u1,
    -            ///  Data register not empty (receivers)
    -            RxNE: u1,
    -            ///  Data register empty (transmitters)
    -            TxE: u1,
    -            ///  Bus error
    -            BERR: u1,
    -            ///  Arbitration lost (master mode)
    -            ARLO: u1,
    -            ///  Acknowledge failure
    -            AF: u1,
    -            ///  Overrun/Underrun
    -            OVR: u1,
    -            ///  PEC Error in reception
    -            PECERR: u1,
    -            reserved14: u1,
    -            ///  Timeout or Tlow error
    -            TIMEOUT: u1,
    -            ///  SMBus alert
    -            SMBALERT: u1,
    -            padding: u16,
    -        }),
    -        ///  Status register 2
    -        SR2: mmio.Mmio(packed struct(u32) {
    -            ///  Master/slave
    -            MSL: u1,
    -            ///  Bus busy
    -            BUSY: u1,
    -            ///  Transmitter/receiver
    -            TRA: u1,
    -            reserved4: u1,
    -            ///  General call address (Slave mode)
    -            GENCALL: u1,
    -            ///  SMBus device default address (Slave mode)
    -            SMBDEFAULT: u1,
    -            ///  SMBus host header (Slave mode)
    -            SMBHOST: u1,
    -            ///  Dual flag (Slave mode)
    -            DUALF: u1,
    -            ///  acket error checking register
    -            PEC: u8,
    -            padding: u16,
    -        }),
    -        ///  Clock control register
    -        CCR: mmio.Mmio(packed struct(u32) {
    -            ///  Clock control register in Fast/Standard mode (Master mode)
    -            CCR: u12,
    -            reserved14: u2,
    -            ///  Fast mode duty cycle
    -            DUTY: u1,
    -            ///  I2C master mode selection
    -            F_S: u1,
    -            padding: u16,
    -        }),
    -        ///  TRISE register
    -        TRISE: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum rise time in Fast/Standard mode (Master mode)
    -            TRISE: u6,
    -            padding: u26,
    -        }),
    -        ///  I2C FLTR register
    -        FLTR: mmio.Mmio(packed struct(u32) {
    -            ///  Digital noise filter
    -            DNF: u4,
    -            ///  Analog noise filter OFF
    -            ANOFF: u1,
    -            padding: u27,
    -        }),
    -    };
    -
    -    ///  DMA2D controller
    -    pub const DMA2D = extern struct {
    -        ///  control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  Start
    -            START: u1,
    -            ///  Suspend
    -            SUSP: u1,
    -            ///  Abort
    -            ABORT: u1,
    -            reserved8: u5,
    -            ///  Transfer error interrupt enable
    -            TEIE: u1,
    -            ///  Transfer complete interrupt enable
    -            TCIE: u1,
    -            ///  Transfer watermark interrupt enable
    -            TWIE: u1,
    -            ///  CLUT access error interrupt enable
    -            CAEIE: u1,
    -            ///  CLUT transfer complete interrupt enable
    -            CTCIE: u1,
    -            ///  Configuration Error Interrupt Enable
    -            CEIE: u1,
    -            reserved16: u2,
    -            ///  DMA2D mode
    -            MODE: u2,
    -            padding: u14,
    -        }),
    -        ///  Interrupt Status Register
    -        ISR: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer error interrupt flag
    -            TEIF: u1,
    -            ///  Transfer complete interrupt flag
    -            TCIF: u1,
    -            ///  Transfer watermark interrupt flag
    -            TWIF: u1,
    -            ///  CLUT access error interrupt flag
    -            CAEIF: u1,
    -            ///  CLUT transfer complete interrupt flag
    -            CTCIF: u1,
    -            ///  Configuration error interrupt flag
    -            CEIF: u1,
    -            padding: u26,
    -        }),
    -        ///  interrupt flag clear register
    -        IFCR: mmio.Mmio(packed struct(u32) {
    -            ///  Clear Transfer error interrupt flag
    -            CTEIF: u1,
    -            ///  Clear transfer complete interrupt flag
    -            CTCIF: u1,
    -            ///  Clear transfer watermark interrupt flag
    -            CTWIF: u1,
    -            ///  Clear CLUT access error interrupt flag
    -            CAECIF: u1,
    -            ///  Clear CLUT transfer complete interrupt flag
    -            CCTCIF: u1,
    -            ///  Clear configuration error interrupt flag
    -            CCEIF: u1,
    -            padding: u26,
    -        }),
    -        ///  foreground memory address register
    -        FGMAR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory address
    -            MA: u32,
    -        }),
    -        ///  foreground offset register
    -        FGOR: mmio.Mmio(packed struct(u32) {
    -            ///  Line offset
    -            LO: u14,
    -            padding: u18,
    -        }),
    -        ///  background memory address register
    -        BGMAR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory address
    -            MA: u32,
    -        }),
    -        ///  background offset register
    -        BGOR: mmio.Mmio(packed struct(u32) {
    -            ///  Line offset
    -            LO: u14,
    -            padding: u18,
    -        }),
    -        ///  foreground PFC control register
    -        FGPFCCR: mmio.Mmio(packed struct(u32) {
    -            ///  Color mode
    -            CM: u4,
    -            ///  CLUT color mode
    -            CCM: u1,
    -            ///  Start
    -            START: u1,
    -            reserved8: u2,
    -            ///  CLUT size
    -            CS: u8,
    -            ///  Alpha mode
    -            AM: u2,
    -            reserved24: u6,
    -            ///  Alpha value
    -            ALPHA: u8,
    -        }),
    -        ///  foreground color register
    -        FGCOLR: mmio.Mmio(packed struct(u32) {
    -            ///  Blue Value
    -            BLUE: u8,
    -            ///  Green Value
    -            GREEN: u8,
    -            ///  Red Value
    -            RED: u8,
    -            padding: u8,
    -        }),
    -        ///  background PFC control register
    -        BGPFCCR: mmio.Mmio(packed struct(u32) {
    -            ///  Color mode
    -            CM: u4,
    -            ///  CLUT Color mode
    -            CCM: u1,
    -            ///  Start
    -            START: u1,
    -            reserved8: u2,
    -            ///  CLUT size
    -            CS: u8,
    -            ///  Alpha mode
    -            AM: u2,
    -            reserved24: u6,
    -            ///  Alpha value
    -            ALPHA: u8,
    -        }),
    -        ///  background color register
    -        BGCOLR: mmio.Mmio(packed struct(u32) {
    -            ///  Blue Value
    -            BLUE: u8,
    -            ///  Green Value
    -            GREEN: u8,
    -            ///  Red Value
    -            RED: u8,
    -            padding: u8,
    -        }),
    -        ///  foreground CLUT memory address register
    -        FGCMAR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory Address
    -            MA: u32,
    -        }),
    -        ///  background CLUT memory address register
    -        BGCMAR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory address
    -            MA: u32,
    -        }),
    -        ///  output PFC control register
    -        OPFCCR: mmio.Mmio(packed struct(u32) {
    -            ///  Color mode
    -            CM: u3,
    -            padding: u29,
    -        }),
    -        ///  output color register
    -        OCOLR: mmio.Mmio(packed struct(u32) {
    -            ///  Blue Value
    -            BLUE: u8,
    -            ///  Green Value
    -            GREEN: u8,
    -            ///  Red Value
    -            RED: u8,
    -            ///  Alpha Channel Value
    -            APLHA: u8,
    -        }),
    -        ///  output memory address register
    -        OMAR: mmio.Mmio(packed struct(u32) {
    -            ///  Memory Address
    -            MA: u32,
    -        }),
    -        ///  output offset register
    -        OOR: mmio.Mmio(packed struct(u32) {
    -            ///  Line Offset
    -            LO: u14,
    -            padding: u18,
    -        }),
    -        ///  number of line register
    -        NLR: mmio.Mmio(packed struct(u32) {
    -            ///  Number of lines
    -            NL: u16,
    -            ///  Pixel per lines
    -            PL: u14,
    -            padding: u2,
    -        }),
    -        ///  line watermark register
    -        LWR: mmio.Mmio(packed struct(u32) {
    -            ///  Line watermark
    -            LW: u16,
    -            padding: u16,
    -        }),
    -        ///  AHB master timer configuration register
    -        AMTCR: mmio.Mmio(packed struct(u32) {
    -            ///  Enable
    -            EN: u1,
    -            reserved8: u7,
    -            ///  Dead Time
    -            DT: u8,
    -            padding: u16,
    -        }),
    -        reserved1024: [944]u8,
    -        ///  FGCLUT
    -        FGCLUT: mmio.Mmio(packed struct(u32) {
    -            ///  BLUE
    -            BLUE: u8,
    -            ///  GREEN
    -            GREEN: u8,
    -            ///  RED
    -            RED: u8,
    -            ///  APLHA
    -            APLHA: u8,
    -        }),
    -        reserved2048: [1020]u8,
    -        ///  BGCLUT
    -        BGCLUT: mmio.Mmio(packed struct(u32) {
    -            ///  BLUE
    -            BLUE: u8,
    -            ///  GREEN
    -            GREEN: u8,
    -            ///  RED
    -            RED: u8,
    -            ///  APLHA
    -            APLHA: u8,
    -        }),
    -    };
    -
    -    ///  Serial audio interface
    -    pub const SAI = extern struct {
    -        reserved4: [4]u8,
    -        ///  AConfiguration register 1
    -        ACR1: mmio.Mmio(packed struct(u32) {
    -            ///  Audio block mode
    -            MODE: u2,
    -            ///  Protocol configuration
    -            PRTCFG: u2,
    -            reserved5: u1,
    -            ///  Data size
    -            DS: u3,
    -            ///  Least significant bit first
    -            LSBFIRST: u1,
    -            ///  Clock strobing edge
    -            CKSTR: u1,
    -            ///  Synchronization enable
    -            SYNCEN: u2,
    -            ///  Mono mode
    -            MONO: u1,
    -            ///  Output drive
    -            OutDri: u1,
    -            reserved16: u2,
    -            ///  Audio block A enable
    -            SAIAEN: u1,
    -            ///  DMA enable
    -            DMAEN: u1,
    -            reserved19: u1,
    -            ///  No divider
    -            NODIV: u1,
    -            ///  Master clock divider
    -            MCJDIV: u4,
    -            padding: u8,
    -        }),
    -        ///  AConfiguration register 2
    -        ACR2: mmio.Mmio(packed struct(u32) {
    -            ///  FIFO threshold
    -            FTH: u3,
    -            ///  FIFO flush
    -            FFLUS: u1,
    -            ///  Tristate management on data line
    -            TRIS: u1,
    -            ///  Mute
    -            MUTE: u1,
    -            ///  Mute value
    -            MUTEVAL: u1,
    -            ///  Mute counter
    -            MUTECN: u6,
    -            ///  Complement bit
    -            CPL: u1,
    -            ///  Companding mode
    -            COMP: u2,
    -            padding: u16,
    -        }),
    -        ///  AFRCR
    -        AFRCR: mmio.Mmio(packed struct(u32) {
    -            ///  Frame length
    -            FRL: u8,
    -            ///  Frame synchronization active level length
    -            FSALL: u7,
    -            reserved16: u1,
    -            ///  Frame synchronization definition
    -            FSDEF: u1,
    -            ///  Frame synchronization polarity
    -            FSPOL: u1,
    -            ///  Frame synchronization offset
    -            FSOFF: u1,
    -            padding: u13,
    -        }),
    -        ///  ASlot register
    -        ASLOTR: mmio.Mmio(packed struct(u32) {
    -            ///  First bit offset
    -            FBOFF: u5,
    -            reserved6: u1,
    -            ///  Slot size
    -            SLOTSZ: u2,
    -            ///  Number of slots in an audio frame
    -            NBSLOT: u4,
    -            reserved16: u4,
    -            ///  Slot enable
    -            SLOTEN: u16,
    -        }),
    -        ///  AInterrupt mask register2
    -        AIM: mmio.Mmio(packed struct(u32) {
    -            ///  Overrun/underrun interrupt enable
    -            OVRUDRIE: u1,
    -            ///  Mute detection interrupt enable
    -            MUTEDET: u1,
    -            ///  Wrong clock configuration interrupt enable
    -            WCKCFG: u1,
    -            ///  FIFO request interrupt enable
    -            FREQIE: u1,
    -            ///  Codec not ready interrupt enable
    -            CNRDYIE: u1,
    -            ///  Anticipated frame synchronization detection interrupt enable
    -            AFSDETIE: u1,
    -            ///  Late frame synchronization detection interrupt enable
    -            LFSDET: u1,
    -            padding: u25,
    -        }),
    -        ///  AStatus register
    -        ASR: mmio.Mmio(packed struct(u32) {
    -            ///  Overrun / underrun
    -            OVRUDR: u1,
    -            ///  Mute detection
    -            MUTEDET: u1,
    -            ///  Wrong clock configuration flag. This bit is read only.
    -            WCKCFG: u1,
    -            ///  FIFO request
    -            FREQ: u1,
    -            ///  Codec not ready
    -            CNRDY: u1,
    -            ///  Anticipated frame synchronization detection
    -            AFSDET: u1,
    -            ///  Late frame synchronization detection
    -            LFSDET: u1,
    -            reserved16: u9,
    -            ///  FIFO level threshold
    -            FLVL: u3,
    -            padding: u13,
    -        }),
    -        ///  AClear flag register
    -        ACLRFR: mmio.Mmio(packed struct(u32) {
    -            ///  Clear overrun / underrun
    -            OVRUDR: u1,
    -            ///  Mute detection flag
    -            MUTEDET: u1,
    -            ///  Clear wrong clock configuration flag
    -            WCKCFG: u1,
    -            reserved4: u1,
    -            ///  Clear codec not ready flag
    -            CNRDY: u1,
    -            ///  Clear anticipated frame synchronization detection flag.
    -            CAFSDET: u1,
    -            ///  Clear late frame synchronization detection flag
    -            LFSDET: u1,
    -            padding: u25,
    -        }),
    -        ///  AData register
    -        ADR: mmio.Mmio(packed struct(u32) {
    -            ///  Data
    -            DATA: u32,
    -        }),
    -        ///  BConfiguration register 1
    -        BCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Audio block mode
    -            MODE: u2,
    -            ///  Protocol configuration
    -            PRTCFG: u2,
    -            reserved5: u1,
    -            ///  Data size
    -            DS: u3,
    -            ///  Least significant bit first
    -            LSBFIRST: u1,
    -            ///  Clock strobing edge
    -            CKSTR: u1,
    -            ///  Synchronization enable
    -            SYNCEN: u2,
    -            ///  Mono mode
    -            MONO: u1,
    -            ///  Output drive
    -            OutDri: u1,
    -            reserved16: u2,
    -            ///  Audio block B enable
    -            SAIBEN: u1,
    -            ///  DMA enable
    -            DMAEN: u1,
    -            reserved19: u1,
    -            ///  No divider
    -            NODIV: u1,
    -            ///  Master clock divider
    -            MCJDIV: u4,
    -            padding: u8,
    -        }),
    -        ///  BConfiguration register 2
    -        BCR2: mmio.Mmio(packed struct(u32) {
    -            ///  FIFO threshold
    -            FTH: u3,
    -            ///  FIFO flush
    -            FFLUS: u1,
    -            ///  Tristate management on data line
    -            TRIS: u1,
    -            ///  Mute
    -            MUTE: u1,
    -            ///  Mute value
    -            MUTEVAL: u1,
    -            ///  Mute counter
    -            MUTECN: u6,
    -            ///  Complement bit
    -            CPL: u1,
    -            ///  Companding mode
    -            COMP: u2,
    -            padding: u16,
    -        }),
    -        ///  BFRCR
    -        BFRCR: mmio.Mmio(packed struct(u32) {
    -            ///  Frame length
    -            FRL: u8,
    -            ///  Frame synchronization active level length
    -            FSALL: u7,
    -            reserved16: u1,
    -            ///  Frame synchronization definition
    -            FSDEF: u1,
    -            ///  Frame synchronization polarity
    -            FSPOL: u1,
    -            ///  Frame synchronization offset
    -            FSOFF: u1,
    -            padding: u13,
    -        }),
    -        ///  BSlot register
    -        BSLOTR: mmio.Mmio(packed struct(u32) {
    -            ///  First bit offset
    -            FBOFF: u5,
    -            reserved6: u1,
    -            ///  Slot size
    -            SLOTSZ: u2,
    -            ///  Number of slots in an audio frame
    -            NBSLOT: u4,
    -            reserved16: u4,
    -            ///  Slot enable
    -            SLOTEN: u16,
    -        }),
    -        ///  BInterrupt mask register2
    -        BIM: mmio.Mmio(packed struct(u32) {
    -            ///  Overrun/underrun interrupt enable
    -            OVRUDRIE: u1,
    -            ///  Mute detection interrupt enable
    -            MUTEDET: u1,
    -            ///  Wrong clock configuration interrupt enable
    -            WCKCFG: u1,
    -            ///  FIFO request interrupt enable
    -            FREQIE: u1,
    -            ///  Codec not ready interrupt enable
    -            CNRDYIE: u1,
    -            ///  Anticipated frame synchronization detection interrupt enable
    -            AFSDETIE: u1,
    -            ///  Late frame synchronization detection interrupt enable
    -            LFSDETIE: u1,
    -            padding: u25,
    -        }),
    -        ///  BStatus register
    -        BSR: mmio.Mmio(packed struct(u32) {
    -            ///  Overrun / underrun
    -            OVRUDR: u1,
    -            ///  Mute detection
    -            MUTEDET: u1,
    -            ///  Wrong clock configuration flag
    -            WCKCFG: u1,
    -            ///  FIFO request
    -            FREQ: u1,
    -            ///  Codec not ready
    -            CNRDY: u1,
    -            ///  Anticipated frame synchronization detection
    -            AFSDET: u1,
    -            ///  Late frame synchronization detection
    -            LFSDET: u1,
    -            reserved16: u9,
    -            ///  FIFO level threshold
    -            FLVL: u3,
    -            padding: u13,
    -        }),
    -        ///  BClear flag register
    -        BCLRFR: mmio.Mmio(packed struct(u32) {
    -            ///  Clear overrun / underrun
    -            OVRUDR: u1,
    -            ///  Mute detection flag
    -            MUTEDET: u1,
    -            ///  Clear wrong clock configuration flag
    -            WCKCFG: u1,
    -            reserved4: u1,
    -            ///  Clear codec not ready flag
    -            CNRDY: u1,
    -            ///  Clear anticipated frame synchronization detection flag
    -            CAFSDET: u1,
    -            ///  Clear late frame synchronization detection flag
    -            LFSDET: u1,
    -            padding: u25,
    -        }),
    -        ///  BData register
    -        BDR: mmio.Mmio(packed struct(u32) {
    -            ///  Data
    -            DATA: u32,
    -        }),
    -    };
    -
    -    ///  LCD-TFT Controller
    -    pub const LTDC = extern struct {
    -        reserved8: [8]u8,
    -        ///  Synchronization Size Configuration Register
    -        SSCR: mmio.Mmio(packed struct(u32) {
    -            ///  Vertical Synchronization Height (in units of horizontal scan line)
    -            VSH: u11,
    -            reserved16: u5,
    -            ///  Horizontal Synchronization Width (in units of pixel clock period)
    -            HSW: u10,
    -            padding: u6,
    -        }),
    -        ///  Back Porch Configuration Register
    -        BPCR: mmio.Mmio(packed struct(u32) {
    -            ///  Accumulated Vertical back porch (in units of horizontal scan line)
    -            AVBP: u11,
    -            reserved16: u5,
    -            ///  Accumulated Horizontal back porch (in units of pixel clock period)
    -            AHBP: u10,
    -            padding: u6,
    -        }),
    -        ///  Active Width Configuration Register
    -        AWCR: mmio.Mmio(packed struct(u32) {
    -            ///  Accumulated Active Height (in units of horizontal scan line)
    -            AAH: u11,
    -            reserved16: u5,
    -            ///  AAV
    -            AAV: u10,
    -            padding: u6,
    -        }),
    -        ///  Total Width Configuration Register
    -        TWCR: mmio.Mmio(packed struct(u32) {
    -            ///  Total Height (in units of horizontal scan line)
    -            TOTALH: u11,
    -            reserved16: u5,
    -            ///  Total Width (in units of pixel clock period)
    -            TOTALW: u10,
    -            padding: u6,
    -        }),
    -        ///  Global Control Register
    -        GCR: mmio.Mmio(packed struct(u32) {
    -            ///  LCD-TFT controller enable bit
    -            LTDCEN: u1,
    -            reserved4: u3,
    -            ///  Dither Blue Width
    -            DBW: u3,
    -            reserved8: u1,
    -            ///  Dither Green Width
    -            DGW: u3,
    -            reserved12: u1,
    -            ///  Dither Red Width
    -            DRW: u3,
    -            reserved16: u1,
    -            ///  Dither Enable
    -            DEN: u1,
    -            reserved28: u11,
    -            ///  Pixel Clock Polarity
    -            PCPOL: u1,
    -            ///  Data Enable Polarity
    -            DEPOL: u1,
    -            ///  Vertical Synchronization Polarity
    -            VSPOL: u1,
    -            ///  Horizontal Synchronization Polarity
    -            HSPOL: u1,
    -        }),
    -        reserved36: [8]u8,
    -        ///  Shadow Reload Configuration Register
    -        SRCR: mmio.Mmio(packed struct(u32) {
    -            ///  Immediate Reload
    -            IMR: u1,
    -            ///  Vertical Blanking Reload
    -            VBR: u1,
    -            padding: u30,
    -        }),
    -        reserved44: [4]u8,
    -        ///  Background Color Configuration Register
    -        BCCR: mmio.Mmio(packed struct(u32) {
    -            ///  Background Color Red value
    -            BC: u24,
    -            padding: u8,
    -        }),
    -        reserved52: [4]u8,
    -        ///  Interrupt Enable Register
    -        IER: mmio.Mmio(packed struct(u32) {
    -            ///  Line Interrupt Enable
    -            LIE: u1,
    -            ///  FIFO Underrun Interrupt Enable
    -            FUIE: u1,
    -            ///  Transfer Error Interrupt Enable
    -            TERRIE: u1,
    -            ///  Register Reload interrupt enable
    -            RRIE: u1,
    -            padding: u28,
    -        }),
    -        ///  Interrupt Status Register
    -        ISR: mmio.Mmio(packed struct(u32) {
    -            ///  Line Interrupt flag
    -            LIF: u1,
    -            ///  FIFO Underrun Interrupt flag
    -            FUIF: u1,
    -            ///  Transfer Error interrupt flag
    -            TERRIF: u1,
    -            ///  Register Reload Interrupt Flag
    -            RRIF: u1,
    -            padding: u28,
    -        }),
    -        ///  Interrupt Clear Register
    -        ICR: mmio.Mmio(packed struct(u32) {
    -            ///  Clears the Line Interrupt Flag
    -            CLIF: u1,
    -            ///  Clears the FIFO Underrun Interrupt flag
    -            CFUIF: u1,
    -            ///  Clears the Transfer Error Interrupt Flag
    -            CTERRIF: u1,
    -            ///  Clears Register Reload Interrupt Flag
    -            CRRIF: u1,
    -            padding: u28,
    -        }),
    -        ///  Line Interrupt Position Configuration Register
    -        LIPCR: mmio.Mmio(packed struct(u32) {
    -            ///  Line Interrupt Position
    -            LIPOS: u11,
    -            padding: u21,
    -        }),
    -        ///  Current Position Status Register
    -        CPSR: mmio.Mmio(packed struct(u32) {
    -            ///  Current Y Position
    -            CYPOS: u16,
    -            ///  Current X Position
    -            CXPOS: u16,
    -        }),
    -        ///  Current Display Status Register
    -        CDSR: mmio.Mmio(packed struct(u32) {
    -            ///  Vertical Data Enable display Status
    -            VDES: u1,
    -            ///  Horizontal Data Enable display Status
    -            HDES: u1,
    -            ///  Vertical Synchronization display Status
    -            VSYNCS: u1,
    -            ///  Horizontal Synchronization display Status
    -            HSYNCS: u1,
    -            padding: u28,
    -        }),
    -        reserved132: [56]u8,
    -        ///  Layerx Control Register
    -        L1CR: mmio.Mmio(packed struct(u32) {
    -            ///  Layer Enable
    -            LEN: u1,
    -            ///  Color Keying Enable
    -            COLKEN: u1,
    -            reserved4: u2,
    -            ///  Color Look-Up Table Enable
    -            CLUTEN: u1,
    -            padding: u27,
    -        }),
    -        ///  Layerx Window Horizontal Position Configuration Register
    -        L1WHPCR: mmio.Mmio(packed struct(u32) {
    -            ///  Window Horizontal Start Position
    -            WHSTPOS: u12,
    -            reserved16: u4,
    -            ///  Window Horizontal Stop Position
    -            WHSPPOS: u12,
    -            padding: u4,
    -        }),
    -        ///  Layerx Window Vertical Position Configuration Register
    -        L1WVPCR: mmio.Mmio(packed struct(u32) {
    -            ///  Window Vertical Start Position
    -            WVSTPOS: u11,
    -            reserved16: u5,
    -            ///  Window Vertical Stop Position
    -            WVSPPOS: u11,
    -            padding: u5,
    -        }),
    -        ///  Layerx Color Keying Configuration Register
    -        L1CKCR: mmio.Mmio(packed struct(u32) {
    -            ///  Color Key Blue value
    -            CKBLUE: u8,
    -            ///  Color Key Green value
    -            CKGREEN: u8,
    -            ///  Color Key Red value
    -            CKRED: u8,
    -            padding: u8,
    -        }),
    -        ///  Layerx Pixel Format Configuration Register
    -        L1PFCR: mmio.Mmio(packed struct(u32) {
    -            ///  Pixel Format
    -            PF: u3,
    -            padding: u29,
    -        }),
    -        ///  Layerx Constant Alpha Configuration Register
    -        L1CACR: mmio.Mmio(packed struct(u32) {
    -            ///  Constant Alpha
    -            CONSTA: u8,
    -            padding: u24,
    -        }),
    -        ///  Layerx Default Color Configuration Register
    -        L1DCCR: mmio.Mmio(packed struct(u32) {
    -            ///  Default Color Blue
    -            DCBLUE: u8,
    -            ///  Default Color Green
    -            DCGREEN: u8,
    -            ///  Default Color Red
    -            DCRED: u8,
    -            ///  Default Color Alpha
    -            DCALPHA: u8,
    -        }),
    -        ///  Layerx Blending Factors Configuration Register
    -        L1BFCR: mmio.Mmio(packed struct(u32) {
    -            ///  Blending Factor 2
    -            BF2: u3,
    -            reserved8: u5,
    -            ///  Blending Factor 1
    -            BF1: u3,
    -            padding: u21,
    -        }),
    -        reserved172: [8]u8,
    -        ///  Layerx Color Frame Buffer Address Register
    -        L1CFBAR: mmio.Mmio(packed struct(u32) {
    -            ///  Color Frame Buffer Start Address
    -            CFBADD: u32,
    -        }),
    -        ///  Layerx Color Frame Buffer Length Register
    -        L1CFBLR: mmio.Mmio(packed struct(u32) {
    -            ///  Color Frame Buffer Line Length
    -            CFBLL: u13,
    -            reserved16: u3,
    -            ///  Color Frame Buffer Pitch in bytes
    -            CFBP: u13,
    -            padding: u3,
    -        }),
    -        ///  Layerx ColorFrame Buffer Line Number Register
    -        L1CFBLNR: mmio.Mmio(packed struct(u32) {
    -            ///  Frame Buffer Line Number
    -            CFBLNBR: u11,
    -            padding: u21,
    -        }),
    -        reserved196: [12]u8,
    -        ///  Layerx CLUT Write Register
    -        L1CLUTWR: mmio.Mmio(packed struct(u32) {
    -            ///  Blue value
    -            BLUE: u8,
    -            ///  Green value
    -            GREEN: u8,
    -            ///  Red value
    -            RED: u8,
    -            ///  CLUT Address
    -            CLUTADD: u8,
    -        }),
    -        reserved260: [60]u8,
    -        ///  Layerx Control Register
    -        L2CR: mmio.Mmio(packed struct(u32) {
    -            ///  Layer Enable
    -            LEN: u1,
    -            ///  Color Keying Enable
    -            COLKEN: u1,
    -            reserved4: u2,
    -            ///  Color Look-Up Table Enable
    -            CLUTEN: u1,
    -            padding: u27,
    -        }),
    -        ///  Layerx Window Horizontal Position Configuration Register
    -        L2WHPCR: mmio.Mmio(packed struct(u32) {
    -            ///  Window Horizontal Start Position
    -            WHSTPOS: u12,
    -            reserved16: u4,
    -            ///  Window Horizontal Stop Position
    -            WHSPPOS: u12,
    -            padding: u4,
    -        }),
    -        ///  Layerx Window Vertical Position Configuration Register
    -        L2WVPCR: mmio.Mmio(packed struct(u32) {
    -            ///  Window Vertical Start Position
    -            WVSTPOS: u11,
    -            reserved16: u5,
    -            ///  Window Vertical Stop Position
    -            WVSPPOS: u11,
    -            padding: u5,
    -        }),
    -        ///  Layerx Color Keying Configuration Register
    -        L2CKCR: mmio.Mmio(packed struct(u32) {
    -            ///  Color Key Blue value
    -            CKBLUE: u8,
    -            ///  Color Key Green value
    -            CKGREEN: u7,
    -            ///  Color Key Red value
    -            CKRED: u9,
    -            padding: u8,
    -        }),
    -        ///  Layerx Pixel Format Configuration Register
    -        L2PFCR: mmio.Mmio(packed struct(u32) {
    -            ///  Pixel Format
    -            PF: u3,
    -            padding: u29,
    -        }),
    -        ///  Layerx Constant Alpha Configuration Register
    -        L2CACR: mmio.Mmio(packed struct(u32) {
    -            ///  Constant Alpha
    -            CONSTA: u8,
    -            padding: u24,
    -        }),
    -        ///  Layerx Default Color Configuration Register
    -        L2DCCR: mmio.Mmio(packed struct(u32) {
    -            ///  Default Color Blue
    -            DCBLUE: u8,
    -            ///  Default Color Green
    -            DCGREEN: u8,
    -            ///  Default Color Red
    -            DCRED: u8,
    -            ///  Default Color Alpha
    -            DCALPHA: u8,
    -        }),
    -        ///  Layerx Blending Factors Configuration Register
    -        L2BFCR: mmio.Mmio(packed struct(u32) {
    -            ///  Blending Factor 2
    -            BF2: u3,
    -            reserved8: u5,
    -            ///  Blending Factor 1
    -            BF1: u3,
    -            padding: u21,
    -        }),
    -        reserved300: [8]u8,
    -        ///  Layerx Color Frame Buffer Address Register
    -        L2CFBAR: mmio.Mmio(packed struct(u32) {
    -            ///  Color Frame Buffer Start Address
    -            CFBADD: u32,
    -        }),
    -        ///  Layerx Color Frame Buffer Length Register
    -        L2CFBLR: mmio.Mmio(packed struct(u32) {
    -            ///  Color Frame Buffer Line Length
    -            CFBLL: u13,
    -            reserved16: u3,
    -            ///  Color Frame Buffer Pitch in bytes
    -            CFBP: u13,
    -            padding: u3,
    -        }),
    -        ///  Layerx ColorFrame Buffer Line Number Register
    -        L2CFBLNR: mmio.Mmio(packed struct(u32) {
    -            ///  Frame Buffer Line Number
    -            CFBLNBR: u11,
    -            padding: u21,
    -        }),
    -        reserved324: [12]u8,
    -        ///  Layerx CLUT Write Register
    -        L2CLUTWR: mmio.Mmio(packed struct(u32) {
    -            ///  Blue value
    -            BLUE: u8,
    -            ///  Green value
    -            GREEN: u8,
    -            ///  Red value
    -            RED: u8,
    -            ///  CLUT Address
    -            CLUTADD: u8,
    -        }),
    -    };
    -
    -    ///  USB on the go high speed
    -    pub const OTG_HS_PWRCLK = extern struct {
    -        ///  Power and clock gating control register
    -        OTG_HS_PCGCR: mmio.Mmio(packed struct(u32) {
    -            ///  Stop PHY clock
    -            STPPCLK: u1,
    -            ///  Gate HCLK
    -            GATEHCLK: u1,
    -            reserved4: u2,
    -            ///  PHY suspended
    -            PHYSUSP: u1,
    -            padding: u27,
    -        }),
    -    };
    -
    -    ///  USB on the go high speed
    -    pub const OTG_HS_DEVICE = extern struct {
    -        ///  OTG_HS device configuration register
    -        OTG_HS_DCFG: mmio.Mmio(packed struct(u32) {
    -            ///  Device speed
    -            DSPD: u2,
    -            ///  Nonzero-length status OUT handshake
    -            NZLSOHSK: u1,
    -            reserved4: u1,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Periodic (micro)frame interval
    -            PFIVL: u2,
    -            reserved24: u11,
    -            ///  Periodic scheduling interval
    -            PERSCHIVL: u2,
    -            padding: u6,
    -        }),
    -        ///  OTG_HS device control register
    -        OTG_HS_DCTL: mmio.Mmio(packed struct(u32) {
    -            ///  Remote wakeup signaling
    -            RWUSIG: u1,
    -            ///  Soft disconnect
    -            SDIS: u1,
    -            ///  Global IN NAK status
    -            GINSTS: u1,
    -            ///  Global OUT NAK status
    -            GONSTS: u1,
    -            ///  Test control
    -            TCTL: u3,
    -            ///  Set global IN NAK
    -            SGINAK: u1,
    -            ///  Clear global IN NAK
    -            CGINAK: u1,
    -            ///  Set global OUT NAK
    -            SGONAK: u1,
    -            ///  Clear global OUT NAK
    -            CGONAK: u1,
    -            ///  Power-on programming done
    -            POPRGDNE: u1,
    -            padding: u20,
    -        }),
    -        ///  OTG_HS device status register
    -        OTG_HS_DSTS: mmio.Mmio(packed struct(u32) {
    -            ///  Suspend status
    -            SUSPSTS: u1,
    -            ///  Enumerated speed
    -            ENUMSPD: u2,
    -            ///  Erratic error
    -            EERR: u1,
    -            reserved8: u4,
    -            ///  Frame number of the received SOF
    -            FNSOF: u14,
    -            padding: u10,
    -        }),
    -        reserved16: [4]u8,
    -        ///  OTG_HS device IN endpoint common interrupt mask register
    -        OTG_HS_DIEPMSK: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt mask
    -            XFRCM: u1,
    -            ///  Endpoint disabled interrupt mask
    -            EPDM: u1,
    -            reserved3: u1,
    -            ///  Timeout condition mask (nonisochronous endpoints)
    -            TOM: u1,
    -            ///  IN token received when TxFIFO empty mask
    -            ITTXFEMSK: u1,
    -            ///  IN token received with EP mismatch mask
    -            INEPNMM: u1,
    -            ///  IN endpoint NAK effective mask
    -            INEPNEM: u1,
    -            reserved8: u1,
    -            ///  FIFO underrun mask
    -            TXFURM: u1,
    -            ///  BNA interrupt mask
    -            BIM: u1,
    -            padding: u22,
    -        }),
    -        ///  OTG_HS device OUT endpoint common interrupt mask register
    -        OTG_HS_DOEPMSK: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt mask
    -            XFRCM: u1,
    -            ///  Endpoint disabled interrupt mask
    -            EPDM: u1,
    -            reserved3: u1,
    -            ///  SETUP phase done mask
    -            STUPM: u1,
    -            ///  OUT token received when endpoint disabled mask
    -            OTEPDM: u1,
    -            reserved6: u1,
    -            ///  Back-to-back SETUP packets received mask
    -            B2BSTUP: u1,
    -            reserved8: u1,
    -            ///  OUT packet error mask
    -            OPEM: u1,
    -            ///  BNA interrupt mask
    -            BOIM: u1,
    -            padding: u22,
    -        }),
    -        ///  OTG_HS device all endpoints interrupt register
    -        OTG_HS_DAINT: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint interrupt bits
    -            IEPINT: u16,
    -            ///  OUT endpoint interrupt bits
    -            OEPINT: u16,
    -        }),
    -        ///  OTG_HS all endpoints interrupt mask register
    -        OTG_HS_DAINTMSK: mmio.Mmio(packed struct(u32) {
    -            ///  IN EP interrupt mask bits
    -            IEPM: u16,
    -            ///  OUT EP interrupt mask bits
    -            OEPM: u16,
    -        }),
    -        reserved40: [8]u8,
    -        ///  OTG_HS device VBUS discharge time register
    -        OTG_HS_DVBUSDIS: mmio.Mmio(packed struct(u32) {
    -            ///  Device VBUS discharge time
    -            VBUSDT: u16,
    -            padding: u16,
    -        }),
    -        ///  OTG_HS device VBUS pulsing time register
    -        OTG_HS_DVBUSPULSE: mmio.Mmio(packed struct(u32) {
    -            ///  Device VBUS pulsing time
    -            DVBUSP: u12,
    -            padding: u20,
    -        }),
    -        ///  OTG_HS Device threshold control register
    -        OTG_HS_DTHRCTL: mmio.Mmio(packed struct(u32) {
    -            ///  Nonisochronous IN endpoints threshold enable
    -            NONISOTHREN: u1,
    -            ///  ISO IN endpoint threshold enable
    -            ISOTHREN: u1,
    -            ///  Transmit threshold length
    -            TXTHRLEN: u9,
    -            reserved16: u5,
    -            ///  Receive threshold enable
    -            RXTHREN: u1,
    -            ///  Receive threshold length
    -            RXTHRLEN: u9,
    -            reserved27: u1,
    -            ///  Arbiter parking enable
    -            ARPEN: u1,
    -            padding: u4,
    -        }),
    -        ///  OTG_HS device IN endpoint FIFO empty interrupt mask register
    -        OTG_HS_DIEPEMPMSK: mmio.Mmio(packed struct(u32) {
    -            ///  IN EP Tx FIFO empty interrupt mask bits
    -            INEPTXFEM: u16,
    -            padding: u16,
    -        }),
    -        ///  OTG_HS device each endpoint interrupt register
    -        OTG_HS_DEACHINT: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  IN endpoint 1interrupt bit
    -            IEP1INT: u1,
    -            reserved17: u15,
    -            ///  OUT endpoint 1 interrupt bit
    -            OEP1INT: u1,
    -            padding: u14,
    -        }),
    -        ///  OTG_HS device each endpoint interrupt register mask
    -        OTG_HS_DEACHINTMSK: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  IN Endpoint 1 interrupt mask bit
    -            IEP1INTM: u1,
    -            reserved17: u15,
    -            ///  OUT Endpoint 1 interrupt mask bit
    -            OEP1INTM: u1,
    -            padding: u14,
    -        }),
    -        ///  OTG_HS device each in endpoint-1 interrupt register
    -        OTG_HS_DIEPEACHMSK1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt mask
    -            XFRCM: u1,
    -            ///  Endpoint disabled interrupt mask
    -            EPDM: u1,
    -            reserved3: u1,
    -            ///  Timeout condition mask (nonisochronous endpoints)
    -            TOM: u1,
    -            ///  IN token received when TxFIFO empty mask
    -            ITTXFEMSK: u1,
    -            ///  IN token received with EP mismatch mask
    -            INEPNMM: u1,
    -            ///  IN endpoint NAK effective mask
    -            INEPNEM: u1,
    -            reserved8: u1,
    -            ///  FIFO underrun mask
    -            TXFURM: u1,
    -            ///  BNA interrupt mask
    -            BIM: u1,
    -            reserved13: u3,
    -            ///  NAK interrupt mask
    -            NAKM: u1,
    -            padding: u18,
    -        }),
    -        reserved128: [60]u8,
    -        ///  OTG_HS device each OUT endpoint-1 interrupt register
    -        OTG_HS_DOEPEACHMSK1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt mask
    -            XFRCM: u1,
    -            ///  Endpoint disabled interrupt mask
    -            EPDM: u1,
    -            reserved3: u1,
    -            ///  Timeout condition mask
    -            TOM: u1,
    -            ///  IN token received when TxFIFO empty mask
    -            ITTXFEMSK: u1,
    -            ///  IN token received with EP mismatch mask
    -            INEPNMM: u1,
    -            ///  IN endpoint NAK effective mask
    -            INEPNEM: u1,
    -            reserved8: u1,
    -            ///  OUT packet error mask
    -            TXFURM: u1,
    -            ///  BNA interrupt mask
    -            BIM: u1,
    -            reserved12: u2,
    -            ///  Bubble error interrupt mask
    -            BERRM: u1,
    -            ///  NAK interrupt mask
    -            NAKM: u1,
    -            ///  NYET interrupt mask
    -            NYETM: u1,
    -            padding: u17,
    -        }),
    -        reserved256: [124]u8,
    -        ///  OTG device endpoint-0 control register
    -        OTG_HS_DIEPCTL0: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USB active endpoint
    -            USBAEP: u1,
    -            ///  Even/odd frame
    -            EONUM_DPID: u1,
    -            ///  NAK status
    -            NAKSTS: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  STALL handshake
    -            Stall: u1,
    -            ///  TxFIFO number
    -            TXFNUM: u4,
    -            ///  Clear NAK
    -            CNAK: u1,
    -            ///  Set NAK
    -            SNAK: u1,
    -            ///  Set DATA0 PID
    -            SD0PID_SEVNFRM: u1,
    -            ///  Set odd frame
    -            SODDFRM: u1,
    -            ///  Endpoint disable
    -            EPDIS: u1,
    -            ///  Endpoint enable
    -            EPENA: u1,
    -        }),
    -        reserved264: [4]u8,
    -        ///  OTG device endpoint-0 interrupt register
    -        OTG_HS_DIEPINT0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  Timeout condition
    -            TOC: u1,
    -            ///  IN token received when TxFIFO is empty
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  IN endpoint NAK effective
    -            INEPNE: u1,
    -            ///  Transmit FIFO empty
    -            TXFE: u1,
    -            ///  Transmit Fifo Underrun
    -            TXFIFOUDRN: u1,
    -            ///  Buffer not available interrupt
    -            BNA: u1,
    -            reserved11: u1,
    -            ///  Packet dropped status
    -            PKTDRPSTS: u1,
    -            ///  Babble error interrupt
    -            BERR: u1,
    -            ///  NAK interrupt
    -            NAK: u1,
    -            padding: u18,
    -        }),
    -        reserved272: [4]u8,
    -        ///  OTG_HS device IN endpoint 0 transfer size register
    -        OTG_HS_DIEPTSIZ0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u7,
    -            reserved19: u12,
    -            ///  Packet count
    -            PKTCNT: u2,
    -            padding: u11,
    -        }),
    -        ///  OTG_HS device endpoint-1 DMA address register
    -        OTG_HS_DIEPDMA1: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        ///  OTG_HS device IN endpoint transmit FIFO status register
    -        OTG_HS_DTXFSTS0: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint TxFIFO space avail
    -            INEPTFSAV: u16,
    -            padding: u16,
    -        }),
    -        reserved288: [4]u8,
    -        ///  OTG device endpoint-1 control register
    -        OTG_HS_DIEPCTL1: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USB active endpoint
    -            USBAEP: u1,
    -            ///  Even/odd frame
    -            EONUM_DPID: u1,
    -            ///  NAK status
    -            NAKSTS: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  STALL handshake
    -            Stall: u1,
    -            ///  TxFIFO number
    -            TXFNUM: u4,
    -            ///  Clear NAK
    -            CNAK: u1,
    -            ///  Set NAK
    -            SNAK: u1,
    -            ///  Set DATA0 PID
    -            SD0PID_SEVNFRM: u1,
    -            ///  Set odd frame
    -            SODDFRM: u1,
    -            ///  Endpoint disable
    -            EPDIS: u1,
    -            ///  Endpoint enable
    -            EPENA: u1,
    -        }),
    -        reserved296: [4]u8,
    -        ///  OTG device endpoint-1 interrupt register
    -        OTG_HS_DIEPINT1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  Timeout condition
    -            TOC: u1,
    -            ///  IN token received when TxFIFO is empty
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  IN endpoint NAK effective
    -            INEPNE: u1,
    -            ///  Transmit FIFO empty
    -            TXFE: u1,
    -            ///  Transmit Fifo Underrun
    -            TXFIFOUDRN: u1,
    -            ///  Buffer not available interrupt
    -            BNA: u1,
    -            reserved11: u1,
    -            ///  Packet dropped status
    -            PKTDRPSTS: u1,
    -            ///  Babble error interrupt
    -            BERR: u1,
    -            ///  NAK interrupt
    -            NAK: u1,
    -            padding: u18,
    -        }),
    -        reserved304: [4]u8,
    -        ///  OTG_HS device endpoint transfer size register
    -        OTG_HS_DIEPTSIZ1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Multi count
    -            MCNT: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS device endpoint-2 DMA address register
    -        OTG_HS_DIEPDMA2: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        ///  OTG_HS device IN endpoint transmit FIFO status register
    -        OTG_HS_DTXFSTS1: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint TxFIFO space avail
    -            INEPTFSAV: u16,
    -            padding: u16,
    -        }),
    -        reserved320: [4]u8,
    -        ///  OTG device endpoint-2 control register
    -        OTG_HS_DIEPCTL2: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USB active endpoint
    -            USBAEP: u1,
    -            ///  Even/odd frame
    -            EONUM_DPID: u1,
    -            ///  NAK status
    -            NAKSTS: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  STALL handshake
    -            Stall: u1,
    -            ///  TxFIFO number
    -            TXFNUM: u4,
    -            ///  Clear NAK
    -            CNAK: u1,
    -            ///  Set NAK
    -            SNAK: u1,
    -            ///  Set DATA0 PID
    -            SD0PID_SEVNFRM: u1,
    -            ///  Set odd frame
    -            SODDFRM: u1,
    -            ///  Endpoint disable
    -            EPDIS: u1,
    -            ///  Endpoint enable
    -            EPENA: u1,
    -        }),
    -        reserved328: [4]u8,
    -        ///  OTG device endpoint-2 interrupt register
    -        OTG_HS_DIEPINT2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  Timeout condition
    -            TOC: u1,
    -            ///  IN token received when TxFIFO is empty
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  IN endpoint NAK effective
    -            INEPNE: u1,
    -            ///  Transmit FIFO empty
    -            TXFE: u1,
    -            ///  Transmit Fifo Underrun
    -            TXFIFOUDRN: u1,
    -            ///  Buffer not available interrupt
    -            BNA: u1,
    -            reserved11: u1,
    -            ///  Packet dropped status
    -            PKTDRPSTS: u1,
    -            ///  Babble error interrupt
    -            BERR: u1,
    -            ///  NAK interrupt
    -            NAK: u1,
    -            padding: u18,
    -        }),
    -        reserved336: [4]u8,
    -        ///  OTG_HS device endpoint transfer size register
    -        OTG_HS_DIEPTSIZ2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Multi count
    -            MCNT: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS device endpoint-3 DMA address register
    -        OTG_HS_DIEPDMA3: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        ///  OTG_HS device IN endpoint transmit FIFO status register
    -        OTG_HS_DTXFSTS2: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint TxFIFO space avail
    -            INEPTFSAV: u16,
    -            padding: u16,
    -        }),
    -        reserved352: [4]u8,
    -        ///  OTG device endpoint-3 control register
    -        OTG_HS_DIEPCTL3: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USB active endpoint
    -            USBAEP: u1,
    -            ///  Even/odd frame
    -            EONUM_DPID: u1,
    -            ///  NAK status
    -            NAKSTS: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  STALL handshake
    -            Stall: u1,
    -            ///  TxFIFO number
    -            TXFNUM: u4,
    -            ///  Clear NAK
    -            CNAK: u1,
    -            ///  Set NAK
    -            SNAK: u1,
    -            ///  Set DATA0 PID
    -            SD0PID_SEVNFRM: u1,
    -            ///  Set odd frame
    -            SODDFRM: u1,
    -            ///  Endpoint disable
    -            EPDIS: u1,
    -            ///  Endpoint enable
    -            EPENA: u1,
    -        }),
    -        reserved360: [4]u8,
    -        ///  OTG device endpoint-3 interrupt register
    -        OTG_HS_DIEPINT3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  Timeout condition
    -            TOC: u1,
    -            ///  IN token received when TxFIFO is empty
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  IN endpoint NAK effective
    -            INEPNE: u1,
    -            ///  Transmit FIFO empty
    -            TXFE: u1,
    -            ///  Transmit Fifo Underrun
    -            TXFIFOUDRN: u1,
    -            ///  Buffer not available interrupt
    -            BNA: u1,
    -            reserved11: u1,
    -            ///  Packet dropped status
    -            PKTDRPSTS: u1,
    -            ///  Babble error interrupt
    -            BERR: u1,
    -            ///  NAK interrupt
    -            NAK: u1,
    -            padding: u18,
    -        }),
    -        reserved368: [4]u8,
    -        ///  OTG_HS device endpoint transfer size register
    -        OTG_HS_DIEPTSIZ3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Multi count
    -            MCNT: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS device endpoint-4 DMA address register
    -        OTG_HS_DIEPDMA4: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        ///  OTG_HS device IN endpoint transmit FIFO status register
    -        OTG_HS_DTXFSTS3: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint TxFIFO space avail
    -            INEPTFSAV: u16,
    -            padding: u16,
    -        }),
    -        reserved384: [4]u8,
    -        ///  OTG device endpoint-4 control register
    -        OTG_HS_DIEPCTL4: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USB active endpoint
    -            USBAEP: u1,
    -            ///  Even/odd frame
    -            EONUM_DPID: u1,
    -            ///  NAK status
    -            NAKSTS: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  STALL handshake
    -            Stall: u1,
    -            ///  TxFIFO number
    -            TXFNUM: u4,
    -            ///  Clear NAK
    -            CNAK: u1,
    -            ///  Set NAK
    -            SNAK: u1,
    -            ///  Set DATA0 PID
    -            SD0PID_SEVNFRM: u1,
    -            ///  Set odd frame
    -            SODDFRM: u1,
    -            ///  Endpoint disable
    -            EPDIS: u1,
    -            ///  Endpoint enable
    -            EPENA: u1,
    -        }),
    -        reserved392: [4]u8,
    -        ///  OTG device endpoint-4 interrupt register
    -        OTG_HS_DIEPINT4: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  Timeout condition
    -            TOC: u1,
    -            ///  IN token received when TxFIFO is empty
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  IN endpoint NAK effective
    -            INEPNE: u1,
    -            ///  Transmit FIFO empty
    -            TXFE: u1,
    -            ///  Transmit Fifo Underrun
    -            TXFIFOUDRN: u1,
    -            ///  Buffer not available interrupt
    -            BNA: u1,
    -            reserved11: u1,
    -            ///  Packet dropped status
    -            PKTDRPSTS: u1,
    -            ///  Babble error interrupt
    -            BERR: u1,
    -            ///  NAK interrupt
    -            NAK: u1,
    -            padding: u18,
    -        }),
    -        reserved400: [4]u8,
    -        ///  OTG_HS device endpoint transfer size register
    -        OTG_HS_DIEPTSIZ4: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Multi count
    -            MCNT: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS device endpoint-5 DMA address register
    -        OTG_HS_DIEPDMA5: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        ///  OTG_HS device IN endpoint transmit FIFO status register
    -        OTG_HS_DTXFSTS4: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint TxFIFO space avail
    -            INEPTFSAV: u16,
    -            padding: u16,
    -        }),
    -        reserved416: [4]u8,
    -        ///  OTG device endpoint-5 control register
    -        OTG_HS_DIEPCTL5: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USB active endpoint
    -            USBAEP: u1,
    -            ///  Even/odd frame
    -            EONUM_DPID: u1,
    -            ///  NAK status
    -            NAKSTS: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  STALL handshake
    -            Stall: u1,
    -            ///  TxFIFO number
    -            TXFNUM: u4,
    -            ///  Clear NAK
    -            CNAK: u1,
    -            ///  Set NAK
    -            SNAK: u1,
    -            ///  Set DATA0 PID
    -            SD0PID_SEVNFRM: u1,
    -            ///  Set odd frame
    -            SODDFRM: u1,
    -            ///  Endpoint disable
    -            EPDIS: u1,
    -            ///  Endpoint enable
    -            EPENA: u1,
    -        }),
    -        reserved424: [4]u8,
    -        ///  OTG device endpoint-5 interrupt register
    -        OTG_HS_DIEPINT5: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  Timeout condition
    -            TOC: u1,
    -            ///  IN token received when TxFIFO is empty
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  IN endpoint NAK effective
    -            INEPNE: u1,
    -            ///  Transmit FIFO empty
    -            TXFE: u1,
    -            ///  Transmit Fifo Underrun
    -            TXFIFOUDRN: u1,
    -            ///  Buffer not available interrupt
    -            BNA: u1,
    -            reserved11: u1,
    -            ///  Packet dropped status
    -            PKTDRPSTS: u1,
    -            ///  Babble error interrupt
    -            BERR: u1,
    -            ///  NAK interrupt
    -            NAK: u1,
    -            padding: u18,
    -        }),
    -        reserved432: [4]u8,
    -        ///  OTG_HS device endpoint transfer size register
    -        OTG_HS_DIEPTSIZ5: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Multi count
    -            MCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved440: [4]u8,
    -        ///  OTG_HS device IN endpoint transmit FIFO status register
    -        OTG_HS_DTXFSTS5: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint TxFIFO space avail
    -            INEPTFSAV: u16,
    -            padding: u16,
    -        }),
    -        reserved448: [4]u8,
    -        ///  OTG device endpoint-6 control register
    -        OTG_HS_DIEPCTL6: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USB active endpoint
    -            USBAEP: u1,
    -            ///  Even/odd frame
    -            EONUM_DPID: u1,
    -            ///  NAK status
    -            NAKSTS: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  STALL handshake
    -            Stall: u1,
    -            ///  TxFIFO number
    -            TXFNUM: u4,
    -            ///  Clear NAK
    -            CNAK: u1,
    -            ///  Set NAK
    -            SNAK: u1,
    -            ///  Set DATA0 PID
    -            SD0PID_SEVNFRM: u1,
    -            ///  Set odd frame
    -            SODDFRM: u1,
    -            ///  Endpoint disable
    -            EPDIS: u1,
    -            ///  Endpoint enable
    -            EPENA: u1,
    -        }),
    -        reserved456: [4]u8,
    -        ///  OTG device endpoint-6 interrupt register
    -        OTG_HS_DIEPINT6: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  Timeout condition
    -            TOC: u1,
    -            ///  IN token received when TxFIFO is empty
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  IN endpoint NAK effective
    -            INEPNE: u1,
    -            ///  Transmit FIFO empty
    -            TXFE: u1,
    -            ///  Transmit Fifo Underrun
    -            TXFIFOUDRN: u1,
    -            ///  Buffer not available interrupt
    -            BNA: u1,
    -            reserved11: u1,
    -            ///  Packet dropped status
    -            PKTDRPSTS: u1,
    -            ///  Babble error interrupt
    -            BERR: u1,
    -            ///  NAK interrupt
    -            NAK: u1,
    -            padding: u18,
    -        }),
    -        reserved480: [20]u8,
    -        ///  OTG device endpoint-7 control register
    -        OTG_HS_DIEPCTL7: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USB active endpoint
    -            USBAEP: u1,
    -            ///  Even/odd frame
    -            EONUM_DPID: u1,
    -            ///  NAK status
    -            NAKSTS: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  STALL handshake
    -            Stall: u1,
    -            ///  TxFIFO number
    -            TXFNUM: u4,
    -            ///  Clear NAK
    -            CNAK: u1,
    -            ///  Set NAK
    -            SNAK: u1,
    -            ///  Set DATA0 PID
    -            SD0PID_SEVNFRM: u1,
    -            ///  Set odd frame
    -            SODDFRM: u1,
    -            ///  Endpoint disable
    -            EPDIS: u1,
    -            ///  Endpoint enable
    -            EPENA: u1,
    -        }),
    -        reserved488: [4]u8,
    -        ///  OTG device endpoint-7 interrupt register
    -        OTG_HS_DIEPINT7: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  Timeout condition
    -            TOC: u1,
    -            ///  IN token received when TxFIFO is empty
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  IN endpoint NAK effective
    -            INEPNE: u1,
    -            ///  Transmit FIFO empty
    -            TXFE: u1,
    -            ///  Transmit Fifo Underrun
    -            TXFIFOUDRN: u1,
    -            ///  Buffer not available interrupt
    -            BNA: u1,
    -            reserved11: u1,
    -            ///  Packet dropped status
    -            PKTDRPSTS: u1,
    -            ///  Babble error interrupt
    -            BERR: u1,
    -            ///  NAK interrupt
    -            NAK: u1,
    -            padding: u18,
    -        }),
    -        reserved768: [276]u8,
    -        ///  OTG_HS device control OUT endpoint 0 control register
    -        OTG_HS_DOEPCTL0: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u2,
    -            reserved15: u13,
    -            ///  USB active endpoint
    -            USBAEP: u1,
    -            reserved17: u1,
    -            ///  NAK status
    -            NAKSTS: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Snoop mode
    -            SNPM: u1,
    -            ///  STALL handshake
    -            Stall: u1,
    -            reserved26: u4,
    -            ///  Clear NAK
    -            CNAK: u1,
    -            ///  Set NAK
    -            SNAK: u1,
    -            reserved30: u2,
    -            ///  Endpoint disable
    -            EPDIS: u1,
    -            ///  Endpoint enable
    -            EPENA: u1,
    -        }),
    -        reserved776: [4]u8,
    -        ///  OTG_HS device endpoint-0 interrupt register
    -        OTG_HS_DOEPINT0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  SETUP phase done
    -            STUP: u1,
    -            ///  OUT token received when endpoint disabled
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  Back-to-back SETUP packets received
    -            B2BSTUP: u1,
    -            reserved14: u7,
    -            ///  NYET interrupt
    -            NYET: u1,
    -            padding: u17,
    -        }),
    -        reserved784: [4]u8,
    -        ///  OTG_HS device endpoint-1 transfer size register
    -        OTG_HS_DOEPTSIZ0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u7,
    -            reserved19: u12,
    -            ///  Packet count
    -            PKTCNT: u1,
    -            reserved29: u9,
    -            ///  SETUP packet count
    -            STUPCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved800: [12]u8,
    -        ///  OTG device endpoint-1 control register
    -        OTG_HS_DOEPCTL1: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USB active endpoint
    -            USBAEP: u1,
    -            ///  Even odd frame/Endpoint data PID
    -            EONUM_DPID: u1,
    -            ///  NAK status
    -            NAKSTS: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Snoop mode
    -            SNPM: u1,
    -            ///  STALL handshake
    -            Stall: u1,
    -            reserved26: u4,
    -            ///  Clear NAK
    -            CNAK: u1,
    -            ///  Set NAK
    -            SNAK: u1,
    -            ///  Set DATA0 PID/Set even frame
    -            SD0PID_SEVNFRM: u1,
    -            ///  Set odd frame
    -            SODDFRM: u1,
    -            ///  Endpoint disable
    -            EPDIS: u1,
    -            ///  Endpoint enable
    -            EPENA: u1,
    -        }),
    -        reserved808: [4]u8,
    -        ///  OTG_HS device endpoint-1 interrupt register
    -        OTG_HS_DOEPINT1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  SETUP phase done
    -            STUP: u1,
    -            ///  OUT token received when endpoint disabled
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  Back-to-back SETUP packets received
    -            B2BSTUP: u1,
    -            reserved14: u7,
    -            ///  NYET interrupt
    -            NYET: u1,
    -            padding: u17,
    -        }),
    -        reserved816: [4]u8,
    -        ///  OTG_HS device endpoint-2 transfer size register
    -        OTG_HS_DOEPTSIZ1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Received data PID/SETUP packet count
    -            RXDPID_STUPCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved832: [12]u8,
    -        ///  OTG device endpoint-2 control register
    -        OTG_HS_DOEPCTL2: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USB active endpoint
    -            USBAEP: u1,
    -            ///  Even odd frame/Endpoint data PID
    -            EONUM_DPID: u1,
    -            ///  NAK status
    -            NAKSTS: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Snoop mode
    -            SNPM: u1,
    -            ///  STALL handshake
    -            Stall: u1,
    -            reserved26: u4,
    -            ///  Clear NAK
    -            CNAK: u1,
    -            ///  Set NAK
    -            SNAK: u1,
    -            ///  Set DATA0 PID/Set even frame
    -            SD0PID_SEVNFRM: u1,
    -            ///  Set odd frame
    -            SODDFRM: u1,
    -            ///  Endpoint disable
    -            EPDIS: u1,
    -            ///  Endpoint enable
    -            EPENA: u1,
    -        }),
    -        reserved840: [4]u8,
    -        ///  OTG_HS device endpoint-2 interrupt register
    -        OTG_HS_DOEPINT2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  SETUP phase done
    -            STUP: u1,
    -            ///  OUT token received when endpoint disabled
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  Back-to-back SETUP packets received
    -            B2BSTUP: u1,
    -            reserved14: u7,
    -            ///  NYET interrupt
    -            NYET: u1,
    -            padding: u17,
    -        }),
    -        reserved848: [4]u8,
    -        ///  OTG_HS device endpoint-3 transfer size register
    -        OTG_HS_DOEPTSIZ2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Received data PID/SETUP packet count
    -            RXDPID_STUPCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved864: [12]u8,
    -        ///  OTG device endpoint-3 control register
    -        OTG_HS_DOEPCTL3: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USB active endpoint
    -            USBAEP: u1,
    -            ///  Even odd frame/Endpoint data PID
    -            EONUM_DPID: u1,
    -            ///  NAK status
    -            NAKSTS: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Snoop mode
    -            SNPM: u1,
    -            ///  STALL handshake
    -            Stall: u1,
    -            reserved26: u4,
    -            ///  Clear NAK
    -            CNAK: u1,
    -            ///  Set NAK
    -            SNAK: u1,
    -            ///  Set DATA0 PID/Set even frame
    -            SD0PID_SEVNFRM: u1,
    -            ///  Set odd frame
    -            SODDFRM: u1,
    -            ///  Endpoint disable
    -            EPDIS: u1,
    -            ///  Endpoint enable
    -            EPENA: u1,
    -        }),
    -        reserved872: [4]u8,
    -        ///  OTG_HS device endpoint-3 interrupt register
    -        OTG_HS_DOEPINT3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  SETUP phase done
    -            STUP: u1,
    -            ///  OUT token received when endpoint disabled
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  Back-to-back SETUP packets received
    -            B2BSTUP: u1,
    -            reserved14: u7,
    -            ///  NYET interrupt
    -            NYET: u1,
    -            padding: u17,
    -        }),
    -        reserved880: [4]u8,
    -        ///  OTG_HS device endpoint-4 transfer size register
    -        OTG_HS_DOEPTSIZ3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Received data PID/SETUP packet count
    -            RXDPID_STUPCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved904: [20]u8,
    -        ///  OTG_HS device endpoint-4 interrupt register
    -        OTG_HS_DOEPINT4: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  SETUP phase done
    -            STUP: u1,
    -            ///  OUT token received when endpoint disabled
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  Back-to-back SETUP packets received
    -            B2BSTUP: u1,
    -            reserved14: u7,
    -            ///  NYET interrupt
    -            NYET: u1,
    -            padding: u17,
    -        }),
    -        reserved912: [4]u8,
    -        ///  OTG_HS device endpoint-5 transfer size register
    -        OTG_HS_DOEPTSIZ4: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Received data PID/SETUP packet count
    -            RXDPID_STUPCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved936: [20]u8,
    -        ///  OTG_HS device endpoint-5 interrupt register
    -        OTG_HS_DOEPINT5: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  SETUP phase done
    -            STUP: u1,
    -            ///  OUT token received when endpoint disabled
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  Back-to-back SETUP packets received
    -            B2BSTUP: u1,
    -            reserved14: u7,
    -            ///  NYET interrupt
    -            NYET: u1,
    -            padding: u17,
    -        }),
    -        reserved968: [28]u8,
    -        ///  OTG_HS device endpoint-6 interrupt register
    -        OTG_HS_DOEPINT6: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  SETUP phase done
    -            STUP: u1,
    -            ///  OUT token received when endpoint disabled
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  Back-to-back SETUP packets received
    -            B2BSTUP: u1,
    -            reserved14: u7,
    -            ///  NYET interrupt
    -            NYET: u1,
    -            padding: u17,
    -        }),
    -        reserved1000: [28]u8,
    -        ///  OTG_HS device endpoint-7 interrupt register
    -        OTG_HS_DOEPINT7: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt
    -            XFRC: u1,
    -            ///  Endpoint disabled interrupt
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  SETUP phase done
    -            STUP: u1,
    -            ///  OUT token received when endpoint disabled
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  Back-to-back SETUP packets received
    -            B2BSTUP: u1,
    -            reserved14: u7,
    -            ///  NYET interrupt
    -            NYET: u1,
    -            padding: u17,
    -        }),
    -    };
    -
    -    ///  USB on the go high speed
    -    pub const OTG_HS_HOST = extern struct {
    -        ///  OTG_HS host configuration register
    -        OTG_HS_HCFG: mmio.Mmio(packed struct(u32) {
    -            ///  FS/LS PHY clock select
    -            FSLSPCS: u2,
    -            ///  FS- and LS-only support
    -            FSLSS: u1,
    -            padding: u29,
    -        }),
    -        ///  OTG_HS Host frame interval register
    -        OTG_HS_HFIR: mmio.Mmio(packed struct(u32) {
    -            ///  Frame interval
    -            FRIVL: u16,
    -            padding: u16,
    -        }),
    -        ///  OTG_HS host frame number/frame time remaining register
    -        OTG_HS_HFNUM: mmio.Mmio(packed struct(u32) {
    -            ///  Frame number
    -            FRNUM: u16,
    -            ///  Frame time remaining
    -            FTREM: u16,
    -        }),
    -        reserved16: [4]u8,
    -        ///  OTG_HS_Host periodic transmit FIFO/queue status register
    -        OTG_HS_HPTXSTS: mmio.Mmio(packed struct(u32) {
    -            ///  Periodic transmit data FIFO space available
    -            PTXFSAVL: u16,
    -            ///  Periodic transmit request queue space available
    -            PTXQSAV: u8,
    -            ///  Top of the periodic transmit request queue
    -            PTXQTOP: u8,
    -        }),
    -        ///  OTG_HS Host all channels interrupt register
    -        OTG_HS_HAINT: mmio.Mmio(packed struct(u32) {
    -            ///  Channel interrupts
    -            HAINT: u16,
    -            padding: u16,
    -        }),
    -        ///  OTG_HS host all channels interrupt mask register
    -        OTG_HS_HAINTMSK: mmio.Mmio(packed struct(u32) {
    -            ///  Channel interrupt mask
    -            HAINTM: u16,
    -            padding: u16,
    -        }),
    -        reserved64: [36]u8,
    -        ///  OTG_HS host port control and status register
    -        OTG_HS_HPRT: mmio.Mmio(packed struct(u32) {
    -            ///  Port connect status
    -            PCSTS: u1,
    -            ///  Port connect detected
    -            PCDET: u1,
    -            ///  Port enable
    -            PENA: u1,
    -            ///  Port enable/disable change
    -            PENCHNG: u1,
    -            ///  Port overcurrent active
    -            POCA: u1,
    -            ///  Port overcurrent change
    -            POCCHNG: u1,
    -            ///  Port resume
    -            PRES: u1,
    -            ///  Port suspend
    -            PSUSP: u1,
    -            ///  Port reset
    -            PRST: u1,
    -            reserved10: u1,
    -            ///  Port line status
    -            PLSTS: u2,
    -            ///  Port power
    -            PPWR: u1,
    -            ///  Port test control
    -            PTCTL: u4,
    -            ///  Port speed
    -            PSPD: u2,
    -            padding: u13,
    -        }),
    -        reserved256: [188]u8,
    -        ///  OTG_HS host channel-0 characteristics register
    -        OTG_HS_HCCHAR0: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multi Count (MC) / Error Count (EC)
    -            MC: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        ///  OTG_HS host channel-0 split control register
    -        OTG_HS_HCSPLT0: mmio.Mmio(packed struct(u32) {
    -            ///  Port address
    -            PRTADDR: u7,
    -            ///  Hub address
    -            HUBADDR: u7,
    -            ///  XACTPOS
    -            XACTPOS: u2,
    -            ///  Do complete split
    -            COMPLSPLT: u1,
    -            reserved31: u14,
    -            ///  Split enable
    -            SPLITEN: u1,
    -        }),
    -        ///  OTG_HS host channel-11 interrupt register
    -        OTG_HS_HCINT0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            ///  Response received interrupt
    -            NYET: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-11 interrupt mask register
    -        OTG_HS_HCINTMSK0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-11 transfer size register
    -        OTG_HS_HCTSIZ0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS host channel-0 DMA address register
    -        OTG_HS_HCDMA0: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        reserved288: [8]u8,
    -        ///  OTG_HS host channel-1 characteristics register
    -        OTG_HS_HCCHAR1: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multi Count (MC) / Error Count (EC)
    -            MC: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        ///  OTG_HS host channel-1 split control register
    -        OTG_HS_HCSPLT1: mmio.Mmio(packed struct(u32) {
    -            ///  Port address
    -            PRTADDR: u7,
    -            ///  Hub address
    -            HUBADDR: u7,
    -            ///  XACTPOS
    -            XACTPOS: u2,
    -            ///  Do complete split
    -            COMPLSPLT: u1,
    -            reserved31: u14,
    -            ///  Split enable
    -            SPLITEN: u1,
    -        }),
    -        ///  OTG_HS host channel-1 interrupt register
    -        OTG_HS_HCINT1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            ///  Response received interrupt
    -            NYET: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-1 interrupt mask register
    -        OTG_HS_HCINTMSK1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-1 transfer size register
    -        OTG_HS_HCTSIZ1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS host channel-1 DMA address register
    -        OTG_HS_HCDMA1: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        reserved320: [8]u8,
    -        ///  OTG_HS host channel-2 characteristics register
    -        OTG_HS_HCCHAR2: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multi Count (MC) / Error Count (EC)
    -            MC: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        ///  OTG_HS host channel-2 split control register
    -        OTG_HS_HCSPLT2: mmio.Mmio(packed struct(u32) {
    -            ///  Port address
    -            PRTADDR: u7,
    -            ///  Hub address
    -            HUBADDR: u7,
    -            ///  XACTPOS
    -            XACTPOS: u2,
    -            ///  Do complete split
    -            COMPLSPLT: u1,
    -            reserved31: u14,
    -            ///  Split enable
    -            SPLITEN: u1,
    -        }),
    -        ///  OTG_HS host channel-2 interrupt register
    -        OTG_HS_HCINT2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            ///  Response received interrupt
    -            NYET: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-2 interrupt mask register
    -        OTG_HS_HCINTMSK2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-2 transfer size register
    -        OTG_HS_HCTSIZ2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS host channel-2 DMA address register
    -        OTG_HS_HCDMA2: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        reserved352: [8]u8,
    -        ///  OTG_HS host channel-3 characteristics register
    -        OTG_HS_HCCHAR3: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multi Count (MC) / Error Count (EC)
    -            MC: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        ///  OTG_HS host channel-3 split control register
    -        OTG_HS_HCSPLT3: mmio.Mmio(packed struct(u32) {
    -            ///  Port address
    -            PRTADDR: u7,
    -            ///  Hub address
    -            HUBADDR: u7,
    -            ///  XACTPOS
    -            XACTPOS: u2,
    -            ///  Do complete split
    -            COMPLSPLT: u1,
    -            reserved31: u14,
    -            ///  Split enable
    -            SPLITEN: u1,
    -        }),
    -        ///  OTG_HS host channel-3 interrupt register
    -        OTG_HS_HCINT3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            ///  Response received interrupt
    -            NYET: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-3 interrupt mask register
    -        OTG_HS_HCINTMSK3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-3 transfer size register
    -        OTG_HS_HCTSIZ3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS host channel-3 DMA address register
    -        OTG_HS_HCDMA3: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        reserved384: [8]u8,
    -        ///  OTG_HS host channel-4 characteristics register
    -        OTG_HS_HCCHAR4: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multi Count (MC) / Error Count (EC)
    -            MC: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        ///  OTG_HS host channel-4 split control register
    -        OTG_HS_HCSPLT4: mmio.Mmio(packed struct(u32) {
    -            ///  Port address
    -            PRTADDR: u7,
    -            ///  Hub address
    -            HUBADDR: u7,
    -            ///  XACTPOS
    -            XACTPOS: u2,
    -            ///  Do complete split
    -            COMPLSPLT: u1,
    -            reserved31: u14,
    -            ///  Split enable
    -            SPLITEN: u1,
    -        }),
    -        ///  OTG_HS host channel-4 interrupt register
    -        OTG_HS_HCINT4: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            ///  Response received interrupt
    -            NYET: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-4 interrupt mask register
    -        OTG_HS_HCINTMSK4: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-4 transfer size register
    -        OTG_HS_HCTSIZ4: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS host channel-4 DMA address register
    -        OTG_HS_HCDMA4: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        reserved416: [8]u8,
    -        ///  OTG_HS host channel-5 characteristics register
    -        OTG_HS_HCCHAR5: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multi Count (MC) / Error Count (EC)
    -            MC: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        ///  OTG_HS host channel-5 split control register
    -        OTG_HS_HCSPLT5: mmio.Mmio(packed struct(u32) {
    -            ///  Port address
    -            PRTADDR: u7,
    -            ///  Hub address
    -            HUBADDR: u7,
    -            ///  XACTPOS
    -            XACTPOS: u2,
    -            ///  Do complete split
    -            COMPLSPLT: u1,
    -            reserved31: u14,
    -            ///  Split enable
    -            SPLITEN: u1,
    -        }),
    -        ///  OTG_HS host channel-5 interrupt register
    -        OTG_HS_HCINT5: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            ///  Response received interrupt
    -            NYET: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-5 interrupt mask register
    -        OTG_HS_HCINTMSK5: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-5 transfer size register
    -        OTG_HS_HCTSIZ5: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS host channel-5 DMA address register
    -        OTG_HS_HCDMA5: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        reserved448: [8]u8,
    -        ///  OTG_HS host channel-6 characteristics register
    -        OTG_HS_HCCHAR6: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multi Count (MC) / Error Count (EC)
    -            MC: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        ///  OTG_HS host channel-6 split control register
    -        OTG_HS_HCSPLT6: mmio.Mmio(packed struct(u32) {
    -            ///  Port address
    -            PRTADDR: u7,
    -            ///  Hub address
    -            HUBADDR: u7,
    -            ///  XACTPOS
    -            XACTPOS: u2,
    -            ///  Do complete split
    -            COMPLSPLT: u1,
    -            reserved31: u14,
    -            ///  Split enable
    -            SPLITEN: u1,
    -        }),
    -        ///  OTG_HS host channel-6 interrupt register
    -        OTG_HS_HCINT6: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            ///  Response received interrupt
    -            NYET: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-6 interrupt mask register
    -        OTG_HS_HCINTMSK6: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-6 transfer size register
    -        OTG_HS_HCTSIZ6: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS host channel-6 DMA address register
    -        OTG_HS_HCDMA6: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        reserved480: [8]u8,
    -        ///  OTG_HS host channel-7 characteristics register
    -        OTG_HS_HCCHAR7: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multi Count (MC) / Error Count (EC)
    -            MC: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        ///  OTG_HS host channel-7 split control register
    -        OTG_HS_HCSPLT7: mmio.Mmio(packed struct(u32) {
    -            ///  Port address
    -            PRTADDR: u7,
    -            ///  Hub address
    -            HUBADDR: u7,
    -            ///  XACTPOS
    -            XACTPOS: u2,
    -            ///  Do complete split
    -            COMPLSPLT: u1,
    -            reserved31: u14,
    -            ///  Split enable
    -            SPLITEN: u1,
    -        }),
    -        ///  OTG_HS host channel-7 interrupt register
    -        OTG_HS_HCINT7: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            ///  Response received interrupt
    -            NYET: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-7 interrupt mask register
    -        OTG_HS_HCINTMSK7: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-7 transfer size register
    -        OTG_HS_HCTSIZ7: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS host channel-7 DMA address register
    -        OTG_HS_HCDMA7: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        reserved512: [8]u8,
    -        ///  OTG_HS host channel-8 characteristics register
    -        OTG_HS_HCCHAR8: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multi Count (MC) / Error Count (EC)
    -            MC: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        ///  OTG_HS host channel-8 split control register
    -        OTG_HS_HCSPLT8: mmio.Mmio(packed struct(u32) {
    -            ///  Port address
    -            PRTADDR: u7,
    -            ///  Hub address
    -            HUBADDR: u7,
    -            ///  XACTPOS
    -            XACTPOS: u2,
    -            ///  Do complete split
    -            COMPLSPLT: u1,
    -            reserved31: u14,
    -            ///  Split enable
    -            SPLITEN: u1,
    -        }),
    -        ///  OTG_HS host channel-8 interrupt register
    -        OTG_HS_HCINT8: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            ///  Response received interrupt
    -            NYET: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-8 interrupt mask register
    -        OTG_HS_HCINTMSK8: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-8 transfer size register
    -        OTG_HS_HCTSIZ8: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS host channel-8 DMA address register
    -        OTG_HS_HCDMA8: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        reserved544: [8]u8,
    -        ///  OTG_HS host channel-9 characteristics register
    -        OTG_HS_HCCHAR9: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multi Count (MC) / Error Count (EC)
    -            MC: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        ///  OTG_HS host channel-9 split control register
    -        OTG_HS_HCSPLT9: mmio.Mmio(packed struct(u32) {
    -            ///  Port address
    -            PRTADDR: u7,
    -            ///  Hub address
    -            HUBADDR: u7,
    -            ///  XACTPOS
    -            XACTPOS: u2,
    -            ///  Do complete split
    -            COMPLSPLT: u1,
    -            reserved31: u14,
    -            ///  Split enable
    -            SPLITEN: u1,
    -        }),
    -        ///  OTG_HS host channel-9 interrupt register
    -        OTG_HS_HCINT9: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            ///  Response received interrupt
    -            NYET: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-9 interrupt mask register
    -        OTG_HS_HCINTMSK9: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-9 transfer size register
    -        OTG_HS_HCTSIZ9: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS host channel-9 DMA address register
    -        OTG_HS_HCDMA9: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        reserved576: [8]u8,
    -        ///  OTG_HS host channel-10 characteristics register
    -        OTG_HS_HCCHAR10: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multi Count (MC) / Error Count (EC)
    -            MC: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        ///  OTG_HS host channel-10 split control register
    -        OTG_HS_HCSPLT10: mmio.Mmio(packed struct(u32) {
    -            ///  Port address
    -            PRTADDR: u7,
    -            ///  Hub address
    -            HUBADDR: u7,
    -            ///  XACTPOS
    -            XACTPOS: u2,
    -            ///  Do complete split
    -            COMPLSPLT: u1,
    -            reserved31: u14,
    -            ///  Split enable
    -            SPLITEN: u1,
    -        }),
    -        ///  OTG_HS host channel-10 interrupt register
    -        OTG_HS_HCINT10: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            ///  Response received interrupt
    -            NYET: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-10 interrupt mask register
    -        OTG_HS_HCINTMSK10: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-10 transfer size register
    -        OTG_HS_HCTSIZ10: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS host channel-10 DMA address register
    -        OTG_HS_HCDMA10: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -        reserved608: [8]u8,
    -        ///  OTG_HS host channel-11 characteristics register
    -        OTG_HS_HCCHAR11: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multi Count (MC) / Error Count (EC)
    -            MC: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        ///  OTG_HS host channel-11 split control register
    -        OTG_HS_HCSPLT11: mmio.Mmio(packed struct(u32) {
    -            ///  Port address
    -            PRTADDR: u7,
    -            ///  Hub address
    -            HUBADDR: u7,
    -            ///  XACTPOS
    -            XACTPOS: u2,
    -            ///  Do complete split
    -            COMPLSPLT: u1,
    -            reserved31: u14,
    -            ///  Split enable
    -            SPLITEN: u1,
    -        }),
    -        ///  OTG_HS host channel-11 interrupt register
    -        OTG_HS_HCINT11: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            ///  Response received interrupt
    -            NYET: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-11 interrupt mask register
    -        OTG_HS_HCINTMSK11: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            ///  AHB error
    -            AHBERR: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_HS host channel-11 transfer size register
    -        OTG_HS_HCTSIZ11: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        ///  OTG_HS host channel-11 DMA address register
    -        OTG_HS_HCDMA11: mmio.Mmio(packed struct(u32) {
    -            ///  DMA address
    -            DMAADDR: u32,
    -        }),
    -    };
    -
    -    ///  Secure digital input/output interface
    -    pub const SDIO = extern struct {
    -        ///  power control register
    -        POWER: mmio.Mmio(packed struct(u32) {
    -            ///  PWRCTRL
    -            PWRCTRL: u2,
    -            padding: u30,
    -        }),
    -        ///  SDI clock control register
    -        CLKCR: mmio.Mmio(packed struct(u32) {
    -            ///  Clock divide factor
    -            CLKDIV: u8,
    -            ///  Clock enable bit
    -            CLKEN: u1,
    -            ///  Power saving configuration bit
    -            PWRSAV: u1,
    -            ///  Clock divider bypass enable bit
    -            BYPASS: u1,
    -            ///  Wide bus mode enable bit
    -            WIDBUS: u2,
    -            ///  SDIO_CK dephasing selection bit
    -            NEGEDGE: u1,
    -            ///  HW Flow Control enable
    -            HWFC_EN: u1,
    -            padding: u17,
    -        }),
    -        ///  argument register
    -        ARG: mmio.Mmio(packed struct(u32) {
    -            ///  Command argument
    -            CMDARG: u32,
    -        }),
    -        ///  command register
    -        CMD: mmio.Mmio(packed struct(u32) {
    -            ///  Command index
    -            CMDINDEX: u6,
    -            ///  Wait for response bits
    -            WAITRESP: u2,
    -            ///  CPSM waits for interrupt request
    -            WAITINT: u1,
    -            ///  CPSM Waits for ends of data transfer (CmdPend internal signal).
    -            WAITPEND: u1,
    -            ///  Command path state machine (CPSM) Enable bit
    -            CPSMEN: u1,
    -            ///  SD I/O suspend command
    -            SDIOSuspend: u1,
    -            ///  Enable CMD completion
    -            ENCMDcompl: u1,
    -            ///  not Interrupt Enable
    -            nIEN: u1,
    -            ///  CE-ATA command
    -            CE_ATACMD: u1,
    -            padding: u17,
    -        }),
    -        ///  command response register
    -        RESPCMD: mmio.Mmio(packed struct(u32) {
    -            ///  Response command index
    -            RESPCMD: u6,
    -            padding: u26,
    -        }),
    -        ///  response 1..4 register
    -        RESP1: mmio.Mmio(packed struct(u32) {
    -            ///  see Table 132.
    -            CARDSTATUS1: u32,
    -        }),
    -        ///  response 1..4 register
    -        RESP2: mmio.Mmio(packed struct(u32) {
    -            ///  see Table 132.
    -            CARDSTATUS2: u32,
    -        }),
    -        ///  response 1..4 register
    -        RESP3: mmio.Mmio(packed struct(u32) {
    -            ///  see Table 132.
    -            CARDSTATUS3: u32,
    -        }),
    -        ///  response 1..4 register
    -        RESP4: mmio.Mmio(packed struct(u32) {
    -            ///  see Table 132.
    -            CARDSTATUS4: u32,
    -        }),
    -        ///  data timer register
    -        DTIMER: mmio.Mmio(packed struct(u32) {
    -            ///  Data timeout period
    -            DATATIME: u32,
    -        }),
    -        ///  data length register
    -        DLEN: mmio.Mmio(packed struct(u32) {
    -            ///  Data length value
    -            DATALENGTH: u25,
    -            padding: u7,
    -        }),
    -        ///  data control register
    -        DCTRL: mmio.Mmio(packed struct(u32) {
    -            ///  DTEN
    -            DTEN: u1,
    -            ///  Data transfer direction selection
    -            DTDIR: u1,
    -            ///  Data transfer mode selection 1: Stream or SDIO multibyte data transfer.
    -            DTMODE: u1,
    -            ///  DMA enable bit
    -            DMAEN: u1,
    -            ///  Data block size
    -            DBLOCKSIZE: u4,
    -            ///  Read wait start
    -            RWSTART: u1,
    -            ///  Read wait stop
    -            RWSTOP: u1,
    -            ///  Read wait mode
    -            RWMOD: u1,
    -            ///  SD I/O enable functions
    -            SDIOEN: u1,
    -            padding: u20,
    -        }),
    -        ///  data counter register
    -        DCOUNT: mmio.Mmio(packed struct(u32) {
    -            ///  Data count value
    -            DATACOUNT: u25,
    -            padding: u7,
    -        }),
    -        ///  status register
    -        STA: mmio.Mmio(packed struct(u32) {
    -            ///  Command response received (CRC check failed)
    -            CCRCFAIL: u1,
    -            ///  Data block sent/received (CRC check failed)
    -            DCRCFAIL: u1,
    -            ///  Command response timeout
    -            CTIMEOUT: u1,
    -            ///  Data timeout
    -            DTIMEOUT: u1,
    -            ///  Transmit FIFO underrun error
    -            TXUNDERR: u1,
    -            ///  Received FIFO overrun error
    -            RXOVERR: u1,
    -            ///  Command response received (CRC check passed)
    -            CMDREND: u1,
    -            ///  Command sent (no response required)
    -            CMDSENT: u1,
    -            ///  Data end (data counter, SDIDCOUNT, is zero)
    -            DATAEND: u1,
    -            ///  Start bit not detected on all data signals in wide bus mode
    -            STBITERR: u1,
    -            ///  Data block sent/received (CRC check passed)
    -            DBCKEND: u1,
    -            ///  Command transfer in progress
    -            CMDACT: u1,
    -            ///  Data transmit in progress
    -            TXACT: u1,
    -            ///  Data receive in progress
    -            RXACT: u1,
    -            ///  Transmit FIFO half empty: at least 8 words can be written into the FIFO
    -            TXFIFOHE: u1,
    -            ///  Receive FIFO half full: there are at least 8 words in the FIFO
    -            RXFIFOHF: u1,
    -            ///  Transmit FIFO full
    -            TXFIFOF: u1,
    -            ///  Receive FIFO full
    -            RXFIFOF: u1,
    -            ///  Transmit FIFO empty
    -            TXFIFOE: u1,
    -            ///  Receive FIFO empty
    -            RXFIFOE: u1,
    -            ///  Data available in transmit FIFO
    -            TXDAVL: u1,
    -            ///  Data available in receive FIFO
    -            RXDAVL: u1,
    -            ///  SDIO interrupt received
    -            SDIOIT: u1,
    -            ///  CE-ATA command completion signal received for CMD61
    -            CEATAEND: u1,
    -            padding: u8,
    -        }),
    -        ///  interrupt clear register
    -        ICR: mmio.Mmio(packed struct(u32) {
    -            ///  CCRCFAIL flag clear bit
    -            CCRCFAILC: u1,
    -            ///  DCRCFAIL flag clear bit
    -            DCRCFAILC: u1,
    -            ///  CTIMEOUT flag clear bit
    -            CTIMEOUTC: u1,
    -            ///  DTIMEOUT flag clear bit
    -            DTIMEOUTC: u1,
    -            ///  TXUNDERR flag clear bit
    -            TXUNDERRC: u1,
    -            ///  RXOVERR flag clear bit
    -            RXOVERRC: u1,
    -            ///  CMDREND flag clear bit
    -            CMDRENDC: u1,
    -            ///  CMDSENT flag clear bit
    -            CMDSENTC: u1,
    -            ///  DATAEND flag clear bit
    -            DATAENDC: u1,
    -            ///  STBITERR flag clear bit
    -            STBITERRC: u1,
    -            ///  DBCKEND flag clear bit
    -            DBCKENDC: u1,
    -            reserved22: u11,
    -            ///  SDIOIT flag clear bit
    -            SDIOITC: u1,
    -            ///  CEATAEND flag clear bit
    -            CEATAENDC: u1,
    -            padding: u8,
    -        }),
    -        ///  mask register
    -        MASK: mmio.Mmio(packed struct(u32) {
    -            ///  Command CRC fail interrupt enable
    -            CCRCFAILIE: u1,
    -            ///  Data CRC fail interrupt enable
    -            DCRCFAILIE: u1,
    -            ///  Command timeout interrupt enable
    -            CTIMEOUTIE: u1,
    -            ///  Data timeout interrupt enable
    -            DTIMEOUTIE: u1,
    -            ///  Tx FIFO underrun error interrupt enable
    -            TXUNDERRIE: u1,
    -            ///  Rx FIFO overrun error interrupt enable
    -            RXOVERRIE: u1,
    -            ///  Command response received interrupt enable
    -            CMDRENDIE: u1,
    -            ///  Command sent interrupt enable
    -            CMDSENTIE: u1,
    -            ///  Data end interrupt enable
    -            DATAENDIE: u1,
    -            ///  Start bit error interrupt enable
    -            STBITERRIE: u1,
    -            ///  Data block end interrupt enable
    -            DBCKENDIE: u1,
    -            ///  Command acting interrupt enable
    -            CMDACTIE: u1,
    -            ///  Data transmit acting interrupt enable
    -            TXACTIE: u1,
    -            ///  Data receive acting interrupt enable
    -            RXACTIE: u1,
    -            ///  Tx FIFO half empty interrupt enable
    -            TXFIFOHEIE: u1,
    -            ///  Rx FIFO half full interrupt enable
    -            RXFIFOHFIE: u1,
    -            ///  Tx FIFO full interrupt enable
    -            TXFIFOFIE: u1,
    -            ///  Rx FIFO full interrupt enable
    -            RXFIFOFIE: u1,
    -            ///  Tx FIFO empty interrupt enable
    -            TXFIFOEIE: u1,
    -            ///  Rx FIFO empty interrupt enable
    -            RXFIFOEIE: u1,
    -            ///  Data available in Tx FIFO interrupt enable
    -            TXDAVLIE: u1,
    -            ///  Data available in Rx FIFO interrupt enable
    -            RXDAVLIE: u1,
    -            ///  SDIO mode interrupt received interrupt enable
    -            SDIOITIE: u1,
    -            ///  CE-ATA command completion signal received interrupt enable
    -            CEATAENDIE: u1,
    -            padding: u8,
    -        }),
    -        reserved72: [8]u8,
    -        ///  FIFO counter register
    -        FIFOCNT: mmio.Mmio(packed struct(u32) {
    -            ///  Remaining number of words to be written to or read from the FIFO.
    -            FIFOCOUNT: u24,
    -            padding: u8,
    -        }),
    -        reserved128: [52]u8,
    -        ///  data FIFO register
    -        FIFO: mmio.Mmio(packed struct(u32) {
    -            ///  Receive and transmit FIFO data
    -            FIFOData: u32,
    -        }),
    -    };
    -
    -    ///  Analog-to-digital converter
    -    pub const ADC1 = extern struct {
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Analog watchdog flag
    -            AWD: u1,
    -            ///  Regular channel end of conversion
    -            EOC: u1,
    -            ///  Injected channel end of conversion
    -            JEOC: u1,
    -            ///  Injected channel start flag
    -            JSTRT: u1,
    -            ///  Regular channel start flag
    -            STRT: u1,
    -            ///  Overrun
    -            OVR: u1,
    -            padding: u26,
    -        }),
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Analog watchdog channel select bits
    -            AWDCH: u5,
    -            ///  Interrupt enable for EOC
    -            EOCIE: u1,
    -            ///  Analog watchdog interrupt enable
    -            AWDIE: u1,
    -            ///  Interrupt enable for injected channels
    -            JEOCIE: u1,
    -            ///  Scan mode
    -            SCAN: u1,
    -            ///  Enable the watchdog on a single channel in scan mode
    -            AWDSGL: u1,
    -            ///  Automatic injected group conversion
    -            JAUTO: u1,
    -            ///  Discontinuous mode on regular channels
    -            DISCEN: u1,
    -            ///  Discontinuous mode on injected channels
    -            JDISCEN: u1,
    -            ///  Discontinuous mode channel count
    -            DISCNUM: u3,
    -            reserved22: u6,
    -            ///  Analog watchdog enable on injected channels
    -            JAWDEN: u1,
    -            ///  Analog watchdog enable on regular channels
    -            AWDEN: u1,
    -            ///  Resolution
    -            RES: u2,
    -            ///  Overrun interrupt enable
    -            OVRIE: u1,
    -            padding: u5,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            ///  A/D Converter ON / OFF
    -            ADON: u1,
    -            ///  Continuous conversion
    -            CONT: u1,
    -            reserved8: u6,
    -            ///  Direct memory access mode (for single ADC mode)
    -            DMA: u1,
    -            ///  DMA disable selection (for single ADC mode)
    -            DDS: u1,
    -            ///  End of conversion selection
    -            EOCS: u1,
    -            ///  Data alignment
    -            ALIGN: u1,
    -            reserved16: u4,
    -            ///  External event select for injected group
    -            JEXTSEL: u4,
    -            ///  External trigger enable for injected channels
    -            JEXTEN: u2,
    -            ///  Start conversion of injected channels
    -            JSWSTART: u1,
    -            reserved24: u1,
    -            ///  External event select for regular group
    -            EXTSEL: u4,
    -            ///  External trigger enable for regular channels
    -            EXTEN: u2,
    -            ///  Start conversion of regular channels
    -            SWSTART: u1,
    -            padding: u1,
    -        }),
    -        ///  sample time register 1
    -        SMPR1: mmio.Mmio(packed struct(u32) {
    -            ///  Sample time bits
    -            SMPx_x: u32,
    -        }),
    -        ///  sample time register 2
    -        SMPR2: mmio.Mmio(packed struct(u32) {
    -            ///  Sample time bits
    -            SMPx_x: u32,
    -        }),
    -        ///  injected channel data offset register x
    -        JOFR1: mmio.Mmio(packed struct(u32) {
    -            ///  Data offset for injected channel x
    -            JOFFSET1: u12,
    -            padding: u20,
    -        }),
    -        ///  injected channel data offset register x
    -        JOFR2: mmio.Mmio(packed struct(u32) {
    -            ///  Data offset for injected channel x
    -            JOFFSET2: u12,
    -            padding: u20,
    -        }),
    -        ///  injected channel data offset register x
    -        JOFR3: mmio.Mmio(packed struct(u32) {
    -            ///  Data offset for injected channel x
    -            JOFFSET3: u12,
    -            padding: u20,
    -        }),
    -        ///  injected channel data offset register x
    -        JOFR4: mmio.Mmio(packed struct(u32) {
    -            ///  Data offset for injected channel x
    -            JOFFSET4: u12,
    -            padding: u20,
    -        }),
    -        ///  watchdog higher threshold register
    -        HTR: mmio.Mmio(packed struct(u32) {
    -            ///  Analog watchdog higher threshold
    -            HT: u12,
    -            padding: u20,
    -        }),
    -        ///  watchdog lower threshold register
    -        LTR: mmio.Mmio(packed struct(u32) {
    -            ///  Analog watchdog lower threshold
    -            LT: u12,
    -            padding: u20,
    -        }),
    -        ///  regular sequence register 1
    -        SQR1: mmio.Mmio(packed struct(u32) {
    -            ///  13th conversion in regular sequence
    -            SQ13: u5,
    -            ///  14th conversion in regular sequence
    -            SQ14: u5,
    -            ///  15th conversion in regular sequence
    -            SQ15: u5,
    -            ///  16th conversion in regular sequence
    -            SQ16: u5,
    -            ///  Regular channel sequence length
    -            L: u4,
    -            padding: u8,
    -        }),
    -        ///  regular sequence register 2
    -        SQR2: mmio.Mmio(packed struct(u32) {
    -            ///  7th conversion in regular sequence
    -            SQ7: u5,
    -            ///  8th conversion in regular sequence
    -            SQ8: u5,
    -            ///  9th conversion in regular sequence
    -            SQ9: u5,
    -            ///  10th conversion in regular sequence
    -            SQ10: u5,
    -            ///  11th conversion in regular sequence
    -            SQ11: u5,
    -            ///  12th conversion in regular sequence
    -            SQ12: u5,
    -            padding: u2,
    -        }),
    -        ///  regular sequence register 3
    -        SQR3: mmio.Mmio(packed struct(u32) {
    -            ///  1st conversion in regular sequence
    -            SQ1: u5,
    -            ///  2nd conversion in regular sequence
    -            SQ2: u5,
    -            ///  3rd conversion in regular sequence
    -            SQ3: u5,
    -            ///  4th conversion in regular sequence
    -            SQ4: u5,
    -            ///  5th conversion in regular sequence
    -            SQ5: u5,
    -            ///  6th conversion in regular sequence
    -            SQ6: u5,
    -            padding: u2,
    -        }),
    -        ///  injected sequence register
    -        JSQR: mmio.Mmio(packed struct(u32) {
    -            ///  1st conversion in injected sequence
    -            JSQ1: u5,
    -            ///  2nd conversion in injected sequence
    -            JSQ2: u5,
    -            ///  3rd conversion in injected sequence
    -            JSQ3: u5,
    -            ///  4th conversion in injected sequence
    -            JSQ4: u5,
    -            ///  Injected sequence length
    -            JL: u2,
    -            padding: u10,
    -        }),
    -        ///  injected data register x
    -        JDR1: mmio.Mmio(packed struct(u32) {
    -            ///  Injected data
    -            JDATA: u16,
    -            padding: u16,
    -        }),
    -        ///  injected data register x
    -        JDR2: mmio.Mmio(packed struct(u32) {
    -            ///  Injected data
    -            JDATA: u16,
    -            padding: u16,
    -        }),
    -        ///  injected data register x
    -        JDR3: mmio.Mmio(packed struct(u32) {
    -            ///  Injected data
    -            JDATA: u16,
    -            padding: u16,
    -        }),
    -        ///  injected data register x
    -        JDR4: mmio.Mmio(packed struct(u32) {
    -            ///  Injected data
    -            JDATA: u16,
    -            padding: u16,
    -        }),
    -        ///  regular data register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  Regular data
    -            DATA: u16,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  USB on the go high speed
    -    pub const OTG_HS_GLOBAL = extern struct {
    -        ///  OTG_HS control and status register
    -        OTG_HS_GOTGCTL: mmio.Mmio(packed struct(u32) {
    -            ///  Session request success
    -            SRQSCS: u1,
    -            ///  Session request
    -            SRQ: u1,
    -            reserved8: u6,
    -            ///  Host negotiation success
    -            HNGSCS: u1,
    -            ///  HNP request
    -            HNPRQ: u1,
    -            ///  Host set HNP enable
    -            HSHNPEN: u1,
    -            ///  Device HNP enabled
    -            DHNPEN: u1,
    -            reserved16: u4,
    -            ///  Connector ID status
    -            CIDSTS: u1,
    -            ///  Long/short debounce time
    -            DBCT: u1,
    -            ///  A-session valid
    -            ASVLD: u1,
    -            ///  B-session valid
    -            BSVLD: u1,
    -            padding: u12,
    -        }),
    -        ///  OTG_HS interrupt register
    -        OTG_HS_GOTGINT: mmio.Mmio(packed struct(u32) {
    -            reserved2: u2,
    -            ///  Session end detected
    -            SEDET: u1,
    -            reserved8: u5,
    -            ///  Session request success status change
    -            SRSSCHG: u1,
    -            ///  Host negotiation success status change
    -            HNSSCHG: u1,
    -            reserved17: u7,
    -            ///  Host negotiation detected
    -            HNGDET: u1,
    -            ///  A-device timeout change
    -            ADTOCHG: u1,
    -            ///  Debounce done
    -            DBCDNE: u1,
    -            padding: u12,
    -        }),
    -        ///  OTG_HS AHB configuration register
    -        OTG_HS_GAHBCFG: mmio.Mmio(packed struct(u32) {
    -            ///  Global interrupt mask
    -            GINT: u1,
    -            ///  Burst length/type
    -            HBSTLEN: u4,
    -            ///  DMA enable
    -            DMAEN: u1,
    -            reserved7: u1,
    -            ///  TxFIFO empty level
    -            TXFELVL: u1,
    -            ///  Periodic TxFIFO empty level
    -            PTXFELVL: u1,
    -            padding: u23,
    -        }),
    -        ///  OTG_HS USB configuration register
    -        OTG_HS_GUSBCFG: mmio.Mmio(packed struct(u32) {
    -            ///  FS timeout calibration
    -            TOCAL: u3,
    -            reserved6: u3,
    -            ///  USB 2.0 high-speed ULPI PHY or USB 1.1 full-speed serial transceiver select
    -            PHYSEL: u1,
    -            reserved8: u1,
    -            ///  SRP-capable
    -            SRPCAP: u1,
    -            ///  HNP-capable
    -            HNPCAP: u1,
    -            ///  USB turnaround time
    -            TRDT: u4,
    -            reserved15: u1,
    -            ///  PHY Low-power clock select
    -            PHYLPCS: u1,
    -            reserved17: u1,
    -            ///  ULPI FS/LS select
    -            ULPIFSLS: u1,
    -            ///  ULPI Auto-resume
    -            ULPIAR: u1,
    -            ///  ULPI Clock SuspendM
    -            ULPICSM: u1,
    -            ///  ULPI External VBUS Drive
    -            ULPIEVBUSD: u1,
    -            ///  ULPI external VBUS indicator
    -            ULPIEVBUSI: u1,
    -            ///  TermSel DLine pulsing selection
    -            TSDPS: u1,
    -            ///  Indicator complement
    -            PCCI: u1,
    -            ///  Indicator pass through
    -            PTCI: u1,
    -            ///  ULPI interface protect disable
    -            ULPIIPD: u1,
    -            reserved29: u3,
    -            ///  Forced host mode
    -            FHMOD: u1,
    -            ///  Forced peripheral mode
    -            FDMOD: u1,
    -            ///  Corrupt Tx packet
    -            CTXPKT: u1,
    -        }),
    -        ///  OTG_HS reset register
    -        OTG_HS_GRSTCTL: mmio.Mmio(packed struct(u32) {
    -            ///  Core soft reset
    -            CSRST: u1,
    -            ///  HCLK soft reset
    -            HSRST: u1,
    -            ///  Host frame counter reset
    -            FCRST: u1,
    -            reserved4: u1,
    -            ///  RxFIFO flush
    -            RXFFLSH: u1,
    -            ///  TxFIFO flush
    -            TXFFLSH: u1,
    -            ///  TxFIFO number
    -            TXFNUM: u5,
    -            reserved30: u19,
    -            ///  DMA request signal
    -            DMAREQ: u1,
    -            ///  AHB master idle
    -            AHBIDL: u1,
    -        }),
    -        ///  OTG_HS core interrupt register
    -        OTG_HS_GINTSTS: mmio.Mmio(packed struct(u32) {
    -            ///  Current mode of operation
    -            CMOD: u1,
    -            ///  Mode mismatch interrupt
    -            MMIS: u1,
    -            ///  OTG interrupt
    -            OTGINT: u1,
    -            ///  Start of frame
    -            SOF: u1,
    -            ///  RxFIFO nonempty
    -            RXFLVL: u1,
    -            ///  Nonperiodic TxFIFO empty
    -            NPTXFE: u1,
    -            ///  Global IN nonperiodic NAK effective
    -            GINAKEFF: u1,
    -            ///  Global OUT NAK effective
    -            BOUTNAKEFF: u1,
    -            reserved10: u2,
    -            ///  Early suspend
    -            ESUSP: u1,
    -            ///  USB suspend
    -            USBSUSP: u1,
    -            ///  USB reset
    -            USBRST: u1,
    -            ///  Enumeration done
    -            ENUMDNE: u1,
    -            ///  Isochronous OUT packet dropped interrupt
    -            ISOODRP: u1,
    -            ///  End of periodic frame interrupt
    -            EOPF: u1,
    -            reserved18: u2,
    -            ///  IN endpoint interrupt
    -            IEPINT: u1,
    -            ///  OUT endpoint interrupt
    -            OEPINT: u1,
    -            ///  Incomplete isochronous IN transfer
    -            IISOIXFR: u1,
    -            ///  Incomplete periodic transfer
    -            PXFR_INCOMPISOOUT: u1,
    -            ///  Data fetch suspended
    -            DATAFSUSP: u1,
    -            reserved24: u1,
    -            ///  Host port interrupt
    -            HPRTINT: u1,
    -            ///  Host channels interrupt
    -            HCINT: u1,
    -            ///  Periodic TxFIFO empty
    -            PTXFE: u1,
    -            reserved28: u1,
    -            ///  Connector ID status change
    -            CIDSCHG: u1,
    -            ///  Disconnect detected interrupt
    -            DISCINT: u1,
    -            ///  Session request/new session detected interrupt
    -            SRQINT: u1,
    -            ///  Resume/remote wakeup detected interrupt
    -            WKUINT: u1,
    -        }),
    -        ///  OTG_HS interrupt mask register
    -        OTG_HS_GINTMSK: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  Mode mismatch interrupt mask
    -            MMISM: u1,
    -            ///  OTG interrupt mask
    -            OTGINT: u1,
    -            ///  Start of frame mask
    -            SOFM: u1,
    -            ///  Receive FIFO nonempty mask
    -            RXFLVLM: u1,
    -            ///  Nonperiodic TxFIFO empty mask
    -            NPTXFEM: u1,
    -            ///  Global nonperiodic IN NAK effective mask
    -            GINAKEFFM: u1,
    -            ///  Global OUT NAK effective mask
    -            GONAKEFFM: u1,
    -            reserved10: u2,
    -            ///  Early suspend mask
    -            ESUSPM: u1,
    -            ///  USB suspend mask
    -            USBSUSPM: u1,
    -            ///  USB reset mask
    -            USBRST: u1,
    -            ///  Enumeration done mask
    -            ENUMDNEM: u1,
    -            ///  Isochronous OUT packet dropped interrupt mask
    -            ISOODRPM: u1,
    -            ///  End of periodic frame interrupt mask
    -            EOPFM: u1,
    -            reserved17: u1,
    -            ///  Endpoint mismatch interrupt mask
    -            EPMISM: u1,
    -            ///  IN endpoints interrupt mask
    -            IEPINT: u1,
    -            ///  OUT endpoints interrupt mask
    -            OEPINT: u1,
    -            ///  Incomplete isochronous IN transfer mask
    -            IISOIXFRM: u1,
    -            ///  Incomplete periodic transfer mask
    -            PXFRM_IISOOXFRM: u1,
    -            ///  Data fetch suspended mask
    -            FSUSPM: u1,
    -            reserved24: u1,
    -            ///  Host port interrupt mask
    -            PRTIM: u1,
    -            ///  Host channels interrupt mask
    -            HCIM: u1,
    -            ///  Periodic TxFIFO empty mask
    -            PTXFEM: u1,
    -            reserved28: u1,
    -            ///  Connector ID status change mask
    -            CIDSCHGM: u1,
    -            ///  Disconnect detected interrupt mask
    -            DISCINT: u1,
    -            ///  Session request/new session detected interrupt mask
    -            SRQIM: u1,
    -            ///  Resume/remote wakeup detected interrupt mask
    -            WUIM: u1,
    -        }),
    -        ///  OTG_HS Receive status debug read register (host mode)
    -        OTG_HS_GRXSTSR_Host: mmio.Mmio(packed struct(u32) {
    -            ///  Channel number
    -            CHNUM: u4,
    -            ///  Byte count
    -            BCNT: u11,
    -            ///  Data PID
    -            DPID: u2,
    -            ///  Packet status
    -            PKTSTS: u4,
    -            padding: u11,
    -        }),
    -        ///  OTG_HS status read and pop register (host mode)
    -        OTG_HS_GRXSTSP_Host: mmio.Mmio(packed struct(u32) {
    -            ///  Channel number
    -            CHNUM: u4,
    -            ///  Byte count
    -            BCNT: u11,
    -            ///  Data PID
    -            DPID: u2,
    -            ///  Packet status
    -            PKTSTS: u4,
    -            padding: u11,
    -        }),
    -        ///  OTG_HS Receive FIFO size register
    -        OTG_HS_GRXFSIZ: mmio.Mmio(packed struct(u32) {
    -            ///  RxFIFO depth
    -            RXFD: u16,
    -            padding: u16,
    -        }),
    -        ///  OTG_HS nonperiodic transmit FIFO size register (host mode)
    -        OTG_HS_GNPTXFSIZ_Host: mmio.Mmio(packed struct(u32) {
    -            ///  Nonperiodic transmit RAM start address
    -            NPTXFSA: u16,
    -            ///  Nonperiodic TxFIFO depth
    -            NPTXFD: u16,
    -        }),
    -        ///  OTG_HS nonperiodic transmit FIFO/queue status register
    -        OTG_HS_GNPTXSTS: mmio.Mmio(packed struct(u32) {
    -            ///  Nonperiodic TxFIFO space available
    -            NPTXFSAV: u16,
    -            ///  Nonperiodic transmit request queue space available
    -            NPTQXSAV: u8,
    -            ///  Top of the nonperiodic transmit request queue
    -            NPTXQTOP: u7,
    -            padding: u1,
    -        }),
    -        reserved56: [8]u8,
    -        ///  OTG_HS general core configuration register
    -        OTG_HS_GCCFG: mmio.Mmio(packed struct(u32) {
    -            reserved16: u16,
    -            ///  Power down
    -            PWRDWN: u1,
    -            ///  Enable I2C bus connection for the external I2C PHY interface
    -            I2CPADEN: u1,
    -            ///  Enable the VBUS sensing device
    -            VBUSASEN: u1,
    -            ///  Enable the VBUS sensing device
    -            VBUSBSEN: u1,
    -            ///  SOF output enable
    -            SOFOUTEN: u1,
    -            ///  VBUS sensing disable option
    -            NOVBUSSENS: u1,
    -            padding: u10,
    -        }),
    -        ///  OTG_HS core ID register
    -        OTG_HS_CID: mmio.Mmio(packed struct(u32) {
    -            ///  Product ID field
    -            PRODUCT_ID: u32,
    -        }),
    -        reserved256: [192]u8,
    -        ///  OTG_HS Host periodic transmit FIFO size register
    -        OTG_HS_HPTXFSIZ: mmio.Mmio(packed struct(u32) {
    -            ///  Host periodic TxFIFO start address
    -            PTXSA: u16,
    -            ///  Host periodic TxFIFO depth
    -            PTXFD: u16,
    -        }),
    -        ///  OTG_HS device IN endpoint transmit FIFO size register
    -        OTG_HS_DIEPTXF1: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint FIFOx transmit RAM start address
    -            INEPTXSA: u16,
    -            ///  IN endpoint TxFIFO depth
    -            INEPTXFD: u16,
    -        }),
    -        ///  OTG_HS device IN endpoint transmit FIFO size register
    -        OTG_HS_DIEPTXF2: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint FIFOx transmit RAM start address
    -            INEPTXSA: u16,
    -            ///  IN endpoint TxFIFO depth
    -            INEPTXFD: u16,
    -        }),
    -        reserved284: [16]u8,
    -        ///  OTG_HS device IN endpoint transmit FIFO size register
    -        OTG_HS_DIEPTXF3: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint FIFOx transmit RAM start address
    -            INEPTXSA: u16,
    -            ///  IN endpoint TxFIFO depth
    -            INEPTXFD: u16,
    -        }),
    -        ///  OTG_HS device IN endpoint transmit FIFO size register
    -        OTG_HS_DIEPTXF4: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint FIFOx transmit RAM start address
    -            INEPTXSA: u16,
    -            ///  IN endpoint TxFIFO depth
    -            INEPTXFD: u16,
    -        }),
    -        ///  OTG_HS device IN endpoint transmit FIFO size register
    -        OTG_HS_DIEPTXF5: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint FIFOx transmit RAM start address
    -            INEPTXSA: u16,
    -            ///  IN endpoint TxFIFO depth
    -            INEPTXFD: u16,
    -        }),
    -        ///  OTG_HS device IN endpoint transmit FIFO size register
    -        OTG_HS_DIEPTXF6: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint FIFOx transmit RAM start address
    -            INEPTXSA: u16,
    -            ///  IN endpoint TxFIFO depth
    -            INEPTXFD: u16,
    -        }),
    -        ///  OTG_HS device IN endpoint transmit FIFO size register
    -        OTG_HS_DIEPTXF7: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint FIFOx transmit RAM start address
    -            INEPTXSA: u16,
    -            ///  IN endpoint TxFIFO depth
    -            INEPTXFD: u16,
    -        }),
    -    };
    -
    -    ///  External interrupt/event controller
    -    pub const EXTI = extern struct {
    -        ///  Interrupt mask register (EXTI_IMR)
    -        IMR: mmio.Mmio(packed struct(u32) {
    -            ///  Interrupt Mask on line 0
    -            MR0: u1,
    -            ///  Interrupt Mask on line 1
    -            MR1: u1,
    -            ///  Interrupt Mask on line 2
    -            MR2: u1,
    -            ///  Interrupt Mask on line 3
    -            MR3: u1,
    -            ///  Interrupt Mask on line 4
    -            MR4: u1,
    -            ///  Interrupt Mask on line 5
    -            MR5: u1,
    -            ///  Interrupt Mask on line 6
    -            MR6: u1,
    -            ///  Interrupt Mask on line 7
    -            MR7: u1,
    -            ///  Interrupt Mask on line 8
    -            MR8: u1,
    -            ///  Interrupt Mask on line 9
    -            MR9: u1,
    -            ///  Interrupt Mask on line 10
    -            MR10: u1,
    -            ///  Interrupt Mask on line 11
    -            MR11: u1,
    -            ///  Interrupt Mask on line 12
    -            MR12: u1,
    -            ///  Interrupt Mask on line 13
    -            MR13: u1,
    -            ///  Interrupt Mask on line 14
    -            MR14: u1,
    -            ///  Interrupt Mask on line 15
    -            MR15: u1,
    -            ///  Interrupt Mask on line 16
    -            MR16: u1,
    -            ///  Interrupt Mask on line 17
    -            MR17: u1,
    -            ///  Interrupt Mask on line 18
    -            MR18: u1,
    -            ///  Interrupt Mask on line 19
    -            MR19: u1,
    -            ///  Interrupt Mask on line 20
    -            MR20: u1,
    -            ///  Interrupt Mask on line 21
    -            MR21: u1,
    -            ///  Interrupt Mask on line 22
    -            MR22: u1,
    -            padding: u9,
    -        }),
    -        ///  Event mask register (EXTI_EMR)
    -        EMR: mmio.Mmio(packed struct(u32) {
    -            ///  Event Mask on line 0
    -            MR0: u1,
    -            ///  Event Mask on line 1
    -            MR1: u1,
    -            ///  Event Mask on line 2
    -            MR2: u1,
    -            ///  Event Mask on line 3
    -            MR3: u1,
    -            ///  Event Mask on line 4
    -            MR4: u1,
    -            ///  Event Mask on line 5
    -            MR5: u1,
    -            ///  Event Mask on line 6
    -            MR6: u1,
    -            ///  Event Mask on line 7
    -            MR7: u1,
    -            ///  Event Mask on line 8
    -            MR8: u1,
    -            ///  Event Mask on line 9
    -            MR9: u1,
    -            ///  Event Mask on line 10
    -            MR10: u1,
    -            ///  Event Mask on line 11
    -            MR11: u1,
    -            ///  Event Mask on line 12
    -            MR12: u1,
    -            ///  Event Mask on line 13
    -            MR13: u1,
    -            ///  Event Mask on line 14
    -            MR14: u1,
    -            ///  Event Mask on line 15
    -            MR15: u1,
    -            ///  Event Mask on line 16
    -            MR16: u1,
    -            ///  Event Mask on line 17
    -            MR17: u1,
    -            ///  Event Mask on line 18
    -            MR18: u1,
    -            ///  Event Mask on line 19
    -            MR19: u1,
    -            ///  Event Mask on line 20
    -            MR20: u1,
    -            ///  Event Mask on line 21
    -            MR21: u1,
    -            ///  Event Mask on line 22
    -            MR22: u1,
    -            padding: u9,
    -        }),
    -        ///  Rising Trigger selection register (EXTI_RTSR)
    -        RTSR: mmio.Mmio(packed struct(u32) {
    -            ///  Rising trigger event configuration of line 0
    -            TR0: u1,
    -            ///  Rising trigger event configuration of line 1
    -            TR1: u1,
    -            ///  Rising trigger event configuration of line 2
    -            TR2: u1,
    -            ///  Rising trigger event configuration of line 3
    -            TR3: u1,
    -            ///  Rising trigger event configuration of line 4
    -            TR4: u1,
    -            ///  Rising trigger event configuration of line 5
    -            TR5: u1,
    -            ///  Rising trigger event configuration of line 6
    -            TR6: u1,
    -            ///  Rising trigger event configuration of line 7
    -            TR7: u1,
    -            ///  Rising trigger event configuration of line 8
    -            TR8: u1,
    -            ///  Rising trigger event configuration of line 9
    -            TR9: u1,
    -            ///  Rising trigger event configuration of line 10
    -            TR10: u1,
    -            ///  Rising trigger event configuration of line 11
    -            TR11: u1,
    -            ///  Rising trigger event configuration of line 12
    -            TR12: u1,
    -            ///  Rising trigger event configuration of line 13
    -            TR13: u1,
    -            ///  Rising trigger event configuration of line 14
    -            TR14: u1,
    -            ///  Rising trigger event configuration of line 15
    -            TR15: u1,
    -            ///  Rising trigger event configuration of line 16
    -            TR16: u1,
    -            ///  Rising trigger event configuration of line 17
    -            TR17: u1,
    -            ///  Rising trigger event configuration of line 18
    -            TR18: u1,
    -            ///  Rising trigger event configuration of line 19
    -            TR19: u1,
    -            ///  Rising trigger event configuration of line 20
    -            TR20: u1,
    -            ///  Rising trigger event configuration of line 21
    -            TR21: u1,
    -            ///  Rising trigger event configuration of line 22
    -            TR22: u1,
    -            padding: u9,
    -        }),
    -        ///  Falling Trigger selection register (EXTI_FTSR)
    -        FTSR: mmio.Mmio(packed struct(u32) {
    -            ///  Falling trigger event configuration of line 0
    -            TR0: u1,
    -            ///  Falling trigger event configuration of line 1
    -            TR1: u1,
    -            ///  Falling trigger event configuration of line 2
    -            TR2: u1,
    -            ///  Falling trigger event configuration of line 3
    -            TR3: u1,
    -            ///  Falling trigger event configuration of line 4
    -            TR4: u1,
    -            ///  Falling trigger event configuration of line 5
    -            TR5: u1,
    -            ///  Falling trigger event configuration of line 6
    -            TR6: u1,
    -            ///  Falling trigger event configuration of line 7
    -            TR7: u1,
    -            ///  Falling trigger event configuration of line 8
    -            TR8: u1,
    -            ///  Falling trigger event configuration of line 9
    -            TR9: u1,
    -            ///  Falling trigger event configuration of line 10
    -            TR10: u1,
    -            ///  Falling trigger event configuration of line 11
    -            TR11: u1,
    -            ///  Falling trigger event configuration of line 12
    -            TR12: u1,
    -            ///  Falling trigger event configuration of line 13
    -            TR13: u1,
    -            ///  Falling trigger event configuration of line 14
    -            TR14: u1,
    -            ///  Falling trigger event configuration of line 15
    -            TR15: u1,
    -            ///  Falling trigger event configuration of line 16
    -            TR16: u1,
    -            ///  Falling trigger event configuration of line 17
    -            TR17: u1,
    -            ///  Falling trigger event configuration of line 18
    -            TR18: u1,
    -            ///  Falling trigger event configuration of line 19
    -            TR19: u1,
    -            ///  Falling trigger event configuration of line 20
    -            TR20: u1,
    -            ///  Falling trigger event configuration of line 21
    -            TR21: u1,
    -            ///  Falling trigger event configuration of line 22
    -            TR22: u1,
    -            padding: u9,
    -        }),
    -        ///  Software interrupt event register (EXTI_SWIER)
    -        SWIER: mmio.Mmio(packed struct(u32) {
    -            ///  Software Interrupt on line 0
    -            SWIER0: u1,
    -            ///  Software Interrupt on line 1
    -            SWIER1: u1,
    -            ///  Software Interrupt on line 2
    -            SWIER2: u1,
    -            ///  Software Interrupt on line 3
    -            SWIER3: u1,
    -            ///  Software Interrupt on line 4
    -            SWIER4: u1,
    -            ///  Software Interrupt on line 5
    -            SWIER5: u1,
    -            ///  Software Interrupt on line 6
    -            SWIER6: u1,
    -            ///  Software Interrupt on line 7
    -            SWIER7: u1,
    -            ///  Software Interrupt on line 8
    -            SWIER8: u1,
    -            ///  Software Interrupt on line 9
    -            SWIER9: u1,
    -            ///  Software Interrupt on line 10
    -            SWIER10: u1,
    -            ///  Software Interrupt on line 11
    -            SWIER11: u1,
    -            ///  Software Interrupt on line 12
    -            SWIER12: u1,
    -            ///  Software Interrupt on line 13
    -            SWIER13: u1,
    -            ///  Software Interrupt on line 14
    -            SWIER14: u1,
    -            ///  Software Interrupt on line 15
    -            SWIER15: u1,
    -            ///  Software Interrupt on line 16
    -            SWIER16: u1,
    -            ///  Software Interrupt on line 17
    -            SWIER17: u1,
    -            ///  Software Interrupt on line 18
    -            SWIER18: u1,
    -            ///  Software Interrupt on line 19
    -            SWIER19: u1,
    -            ///  Software Interrupt on line 20
    -            SWIER20: u1,
    -            ///  Software Interrupt on line 21
    -            SWIER21: u1,
    -            ///  Software Interrupt on line 22
    -            SWIER22: u1,
    -            padding: u9,
    -        }),
    -        ///  Pending register (EXTI_PR)
    -        PR: mmio.Mmio(packed struct(u32) {
    -            ///  Pending bit 0
    -            PR0: u1,
    -            ///  Pending bit 1
    -            PR1: u1,
    -            ///  Pending bit 2
    -            PR2: u1,
    -            ///  Pending bit 3
    -            PR3: u1,
    -            ///  Pending bit 4
    -            PR4: u1,
    -            ///  Pending bit 5
    -            PR5: u1,
    -            ///  Pending bit 6
    -            PR6: u1,
    -            ///  Pending bit 7
    -            PR7: u1,
    -            ///  Pending bit 8
    -            PR8: u1,
    -            ///  Pending bit 9
    -            PR9: u1,
    -            ///  Pending bit 10
    -            PR10: u1,
    -            ///  Pending bit 11
    -            PR11: u1,
    -            ///  Pending bit 12
    -            PR12: u1,
    -            ///  Pending bit 13
    -            PR13: u1,
    -            ///  Pending bit 14
    -            PR14: u1,
    -            ///  Pending bit 15
    -            PR15: u1,
    -            ///  Pending bit 16
    -            PR16: u1,
    -            ///  Pending bit 17
    -            PR17: u1,
    -            ///  Pending bit 18
    -            PR18: u1,
    -            ///  Pending bit 19
    -            PR19: u1,
    -            ///  Pending bit 20
    -            PR20: u1,
    -            ///  Pending bit 21
    -            PR21: u1,
    -            ///  Pending bit 22
    -            PR22: u1,
    -            padding: u9,
    -        }),
    -    };
    -
    -    ///  Universal synchronous asynchronous receiver transmitter
    -    pub const USART6 = extern struct {
    -        ///  Status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Parity error
    -            PE: u1,
    -            ///  Framing error
    -            FE: u1,
    -            ///  Noise detected flag
    -            NF: u1,
    -            ///  Overrun error
    -            ORE: u1,
    -            ///  IDLE line detected
    -            IDLE: u1,
    -            ///  Read data register not empty
    -            RXNE: u1,
    -            ///  Transmission complete
    -            TC: u1,
    -            ///  Transmit data register empty
    -            TXE: u1,
    -            ///  LIN break detection flag
    -            LBD: u1,
    -            ///  CTS flag
    -            CTS: u1,
    -            padding: u22,
    -        }),
    -        ///  Data register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  Data value
    -            DR: u9,
    -            padding: u23,
    -        }),
    -        ///  Baud rate register
    -        BRR: mmio.Mmio(packed struct(u32) {
    -            ///  fraction of USARTDIV
    -            DIV_Fraction: u4,
    -            ///  mantissa of USARTDIV
    -            DIV_Mantissa: u12,
    -            padding: u16,
    -        }),
    -        ///  Control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Send break
    -            SBK: u1,
    -            ///  Receiver wakeup
    -            RWU: u1,
    -            ///  Receiver enable
    -            RE: u1,
    -            ///  Transmitter enable
    -            TE: u1,
    -            ///  IDLE interrupt enable
    -            IDLEIE: u1,
    -            ///  RXNE interrupt enable
    -            RXNEIE: u1,
    -            ///  Transmission complete interrupt enable
    -            TCIE: u1,
    -            ///  TXE interrupt enable
    -            TXEIE: u1,
    -            ///  PE interrupt enable
    -            PEIE: u1,
    -            ///  Parity selection
    -            PS: u1,
    -            ///  Parity control enable
    -            PCE: u1,
    -            ///  Wakeup method
    -            WAKE: u1,
    -            ///  Word length
    -            M: u1,
    -            ///  USART enable
    -            UE: u1,
    -            reserved15: u1,
    -            ///  Oversampling mode
    -            OVER8: u1,
    -            padding: u16,
    -        }),
    -        ///  Control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            ///  Address of the USART node
    -            ADD: u4,
    -            reserved5: u1,
    -            ///  lin break detection length
    -            LBDL: u1,
    -            ///  LIN break detection interrupt enable
    -            LBDIE: u1,
    -            reserved8: u1,
    -            ///  Last bit clock pulse
    -            LBCL: u1,
    -            ///  Clock phase
    -            CPHA: u1,
    -            ///  Clock polarity
    -            CPOL: u1,
    -            ///  Clock enable
    -            CLKEN: u1,
    -            ///  STOP bits
    -            STOP: u2,
    -            ///  LIN mode enable
    -            LINEN: u1,
    -            padding: u17,
    -        }),
    -        ///  Control register 3
    -        CR3: mmio.Mmio(packed struct(u32) {
    -            ///  Error interrupt enable
    -            EIE: u1,
    -            ///  IrDA mode enable
    -            IREN: u1,
    -            ///  IrDA low-power
    -            IRLP: u1,
    -            ///  Half-duplex selection
    -            HDSEL: u1,
    -            ///  Smartcard NACK enable
    -            NACK: u1,
    -            ///  Smartcard mode enable
    -            SCEN: u1,
    -            ///  DMA enable receiver
    -            DMAR: u1,
    -            ///  DMA enable transmitter
    -            DMAT: u1,
    -            ///  RTS enable
    -            RTSE: u1,
    -            ///  CTS enable
    -            CTSE: u1,
    -            ///  CTS interrupt enable
    -            CTSIE: u1,
    -            ///  One sample bit method enable
    -            ONEBIT: u1,
    -            padding: u20,
    -        }),
    -        ///  Guard time and prescaler register
    -        GTPR: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u8,
    -            ///  Guard time value
    -            GT: u8,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  FLASH
    -    pub const FLASH = extern struct {
    -        ///  Flash access control register
    -        ACR: mmio.Mmio(packed struct(u32) {
    -            ///  Latency
    -            LATENCY: u3,
    -            reserved8: u5,
    -            ///  Prefetch enable
    -            PRFTEN: u1,
    -            ///  Instruction cache enable
    -            ICEN: u1,
    -            ///  Data cache enable
    -            DCEN: u1,
    -            ///  Instruction cache reset
    -            ICRST: u1,
    -            ///  Data cache reset
    -            DCRST: u1,
    -            padding: u19,
    -        }),
    -        ///  Flash key register
    -        KEYR: mmio.Mmio(packed struct(u32) {
    -            ///  FPEC key
    -            KEY: u32,
    -        }),
    -        ///  Flash option key register
    -        OPTKEYR: mmio.Mmio(packed struct(u32) {
    -            ///  Option byte key
    -            OPTKEY: u32,
    -        }),
    -        ///  Status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  End of operation
    -            EOP: u1,
    -            ///  Operation error
    -            OPERR: u1,
    -            reserved4: u2,
    -            ///  Write protection error
    -            WRPERR: u1,
    -            ///  Programming alignment error
    -            PGAERR: u1,
    -            ///  Programming parallelism error
    -            PGPERR: u1,
    -            ///  Programming sequence error
    -            PGSERR: u1,
    -            reserved16: u8,
    -            ///  Busy
    -            BSY: u1,
    -            padding: u15,
    -        }),
    -        ///  Control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  Programming
    -            PG: u1,
    -            ///  Sector Erase
    -            SER: u1,
    -            ///  Mass Erase of sectors 0 to 11
    -            MER: u1,
    -            ///  Sector number
    -            SNB: u5,
    -            ///  Program size
    -            PSIZE: u2,
    -            reserved15: u5,
    -            ///  Mass Erase of sectors 12 to 23
    -            MER1: u1,
    -            ///  Start
    -            STRT: u1,
    -            reserved24: u7,
    -            ///  End of operation interrupt enable
    -            EOPIE: u1,
    -            ///  Error interrupt enable
    -            ERRIE: u1,
    -            reserved31: u5,
    -            ///  Lock
    -            LOCK: u1,
    -        }),
    -        ///  Flash option control register
    -        OPTCR: mmio.Mmio(packed struct(u32) {
    -            ///  Option lock
    -            OPTLOCK: u1,
    -            ///  Option start
    -            OPTSTRT: u1,
    -            ///  BOR reset Level
    -            BOR_LEV: u2,
    -            reserved5: u1,
    -            ///  WDG_SW User option bytes
    -            WDG_SW: u1,
    -            ///  nRST_STOP User option bytes
    -            nRST_STOP: u1,
    -            ///  nRST_STDBY User option bytes
    -            nRST_STDBY: u1,
    -            ///  Read protect
    -            RDP: u8,
    -            ///  Not write protect
    -            nWRP: u12,
    -            padding: u4,
    -        }),
    -        ///  Flash option control register 1
    -        OPTCR1: mmio.Mmio(packed struct(u32) {
    -            reserved16: u16,
    -            ///  Not write protect
    -            nWRP: u12,
    -            padding: u4,
    -        }),
    -    };
    -
    -    ///  Nested Vectored Interrupt Controller
    -    pub const NVIC = extern struct {
    -        ///  Interrupt Set-Enable Register
    -        ISER0: mmio.Mmio(packed struct(u32) {
    -            ///  SETENA
    -            SETENA: u32,
    -        }),
    -        ///  Interrupt Set-Enable Register
    -        ISER1: mmio.Mmio(packed struct(u32) {
    -            ///  SETENA
    -            SETENA: u32,
    -        }),
    -        ///  Interrupt Set-Enable Register
    -        ISER2: mmio.Mmio(packed struct(u32) {
    -            ///  SETENA
    -            SETENA: u32,
    -        }),
    -        reserved128: [116]u8,
    -        ///  Interrupt Clear-Enable Register
    -        ICER0: mmio.Mmio(packed struct(u32) {
    -            ///  CLRENA
    -            CLRENA: u32,
    -        }),
    -        ///  Interrupt Clear-Enable Register
    -        ICER1: mmio.Mmio(packed struct(u32) {
    -            ///  CLRENA
    -            CLRENA: u32,
    -        }),
    -        ///  Interrupt Clear-Enable Register
    -        ICER2: mmio.Mmio(packed struct(u32) {
    -            ///  CLRENA
    -            CLRENA: u32,
    -        }),
    -        reserved256: [116]u8,
    -        ///  Interrupt Set-Pending Register
    -        ISPR0: mmio.Mmio(packed struct(u32) {
    -            ///  SETPEND
    -            SETPEND: u32,
    -        }),
    -        ///  Interrupt Set-Pending Register
    -        ISPR1: mmio.Mmio(packed struct(u32) {
    -            ///  SETPEND
    -            SETPEND: u32,
    -        }),
    -        ///  Interrupt Set-Pending Register
    -        ISPR2: mmio.Mmio(packed struct(u32) {
    -            ///  SETPEND
    -            SETPEND: u32,
    -        }),
    -        reserved384: [116]u8,
    -        ///  Interrupt Clear-Pending Register
    -        ICPR0: mmio.Mmio(packed struct(u32) {
    -            ///  CLRPEND
    -            CLRPEND: u32,
    -        }),
    -        ///  Interrupt Clear-Pending Register
    -        ICPR1: mmio.Mmio(packed struct(u32) {
    -            ///  CLRPEND
    -            CLRPEND: u32,
    -        }),
    -        ///  Interrupt Clear-Pending Register
    -        ICPR2: mmio.Mmio(packed struct(u32) {
    -            ///  CLRPEND
    -            CLRPEND: u32,
    -        }),
    -        reserved512: [116]u8,
    -        ///  Interrupt Active Bit Register
    -        IABR0: mmio.Mmio(packed struct(u32) {
    -            ///  ACTIVE
    -            ACTIVE: u32,
    -        }),
    -        ///  Interrupt Active Bit Register
    -        IABR1: mmio.Mmio(packed struct(u32) {
    -            ///  ACTIVE
    -            ACTIVE: u32,
    -        }),
    -        ///  Interrupt Active Bit Register
    -        IABR2: mmio.Mmio(packed struct(u32) {
    -            ///  ACTIVE
    -            ACTIVE: u32,
    -        }),
    -        reserved768: [244]u8,
    -        ///  Interrupt Priority Register
    -        IPR0: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR1: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR2: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR3: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR4: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR5: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR6: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR7: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR8: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR9: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR10: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR11: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR12: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR13: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR14: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR15: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR16: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR17: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR18: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR19: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -        ///  Interrupt Priority Register
    -        IPR20: mmio.Mmio(packed struct(u32) {
    -            ///  IPR_N0
    -            IPR_N0: u8,
    -            ///  IPR_N1
    -            IPR_N1: u8,
    -            ///  IPR_N2
    -            IPR_N2: u8,
    -            ///  IPR_N3
    -            IPR_N3: u8,
    -        }),
    -    };
    -
    -    ///  Ethernet: media access control (MAC)
    -    pub const Ethernet_MAC = extern struct {
    -        ///  Ethernet MAC configuration register
    -        MACCR: mmio.Mmio(packed struct(u32) {
    -            reserved2: u2,
    -            ///  RE
    -            RE: u1,
    -            ///  TE
    -            TE: u1,
    -            ///  DC
    -            DC: u1,
    -            ///  BL
    -            BL: u2,
    -            ///  APCS
    -            APCS: u1,
    -            reserved9: u1,
    -            ///  RD
    -            RD: u1,
    -            ///  IPCO
    -            IPCO: u1,
    -            ///  DM
    -            DM: u1,
    -            ///  LM
    -            LM: u1,
    -            ///  ROD
    -            ROD: u1,
    -            ///  FES
    -            FES: u1,
    -            reserved16: u1,
    -            ///  CSD
    -            CSD: u1,
    -            ///  IFG
    -            IFG: u3,
    -            reserved22: u2,
    -            ///  JD
    -            JD: u1,
    -            ///  WD
    -            WD: u1,
    -            reserved25: u1,
    -            ///  CSTF
    -            CSTF: u1,
    -            padding: u6,
    -        }),
    -        ///  Ethernet MAC frame filter register
    -        MACFFR: mmio.Mmio(packed struct(u32) {
    -            ///  PM
    -            PM: u1,
    -            ///  HU
    -            HU: u1,
    -            ///  HM
    -            HM: u1,
    -            ///  DAIF
    -            DAIF: u1,
    -            ///  RAM
    -            RAM: u1,
    -            ///  BFD
    -            BFD: u1,
    -            ///  PCF
    -            PCF: u1,
    -            ///  SAIF
    -            SAIF: u1,
    -            ///  SAF
    -            SAF: u1,
    -            ///  HPF
    -            HPF: u1,
    -            reserved31: u21,
    -            ///  RA
    -            RA: u1,
    -        }),
    -        ///  Ethernet MAC hash table high register
    -        MACHTHR: mmio.Mmio(packed struct(u32) {
    -            ///  HTH
    -            HTH: u32,
    -        }),
    -        ///  Ethernet MAC hash table low register
    -        MACHTLR: mmio.Mmio(packed struct(u32) {
    -            ///  HTL
    -            HTL: u32,
    -        }),
    -        ///  Ethernet MAC MII address register
    -        MACMIIAR: mmio.Mmio(packed struct(u32) {
    -            ///  MB
    -            MB: u1,
    -            ///  MW
    -            MW: u1,
    -            ///  CR
    -            CR: u3,
    -            reserved6: u1,
    -            ///  MR
    -            MR: u5,
    -            ///  PA
    -            PA: u5,
    -            padding: u16,
    -        }),
    -        ///  Ethernet MAC MII data register
    -        MACMIIDR: mmio.Mmio(packed struct(u32) {
    -            ///  TD
    -            TD: u16,
    -            padding: u16,
    -        }),
    -        ///  Ethernet MAC flow control register
    -        MACFCR: mmio.Mmio(packed struct(u32) {
    -            ///  FCB
    -            FCB: u1,
    -            ///  TFCE
    -            TFCE: u1,
    -            ///  RFCE
    -            RFCE: u1,
    -            ///  UPFD
    -            UPFD: u1,
    -            ///  PLT
    -            PLT: u2,
    -            reserved7: u1,
    -            ///  ZQPD
    -            ZQPD: u1,
    -            reserved16: u8,
    -            ///  PT
    -            PT: u16,
    -        }),
    -        ///  Ethernet MAC VLAN tag register
    -        MACVLANTR: mmio.Mmio(packed struct(u32) {
    -            ///  VLANTI
    -            VLANTI: u16,
    -            ///  VLANTC
    -            VLANTC: u1,
    -            padding: u15,
    -        }),
    -        reserved44: [12]u8,
    -        ///  Ethernet MAC PMT control and status register
    -        MACPMTCSR: mmio.Mmio(packed struct(u32) {
    -            ///  PD
    -            PD: u1,
    -            ///  MPE
    -            MPE: u1,
    -            ///  WFE
    -            WFE: u1,
    -            reserved5: u2,
    -            ///  MPR
    -            MPR: u1,
    -            ///  WFR
    -            WFR: u1,
    -            reserved9: u2,
    -            ///  GU
    -            GU: u1,
    -            reserved31: u21,
    -            ///  WFFRPR
    -            WFFRPR: u1,
    -        }),
    -        reserved52: [4]u8,
    -        ///  Ethernet MAC debug register
    -        MACDBGR: mmio.Mmio(packed struct(u32) {
    -            ///  CR
    -            CR: u1,
    -            ///  CSR
    -            CSR: u1,
    -            ///  ROR
    -            ROR: u1,
    -            ///  MCF
    -            MCF: u1,
    -            ///  MCP
    -            MCP: u1,
    -            ///  MCFHP
    -            MCFHP: u1,
    -            padding: u26,
    -        }),
    -        ///  Ethernet MAC interrupt status register
    -        MACSR: mmio.Mmio(packed struct(u32) {
    -            reserved3: u3,
    -            ///  PMTS
    -            PMTS: u1,
    -            ///  MMCS
    -            MMCS: u1,
    -            ///  MMCRS
    -            MMCRS: u1,
    -            ///  MMCTS
    -            MMCTS: u1,
    -            reserved9: u2,
    -            ///  TSTS
    -            TSTS: u1,
    -            padding: u22,
    -        }),
    -        ///  Ethernet MAC interrupt mask register
    -        MACIMR: mmio.Mmio(packed struct(u32) {
    -            reserved3: u3,
    -            ///  PMTIM
    -            PMTIM: u1,
    -            reserved9: u5,
    -            ///  TSTIM
    -            TSTIM: u1,
    -            padding: u22,
    -        }),
    -        ///  Ethernet MAC address 0 high register
    -        MACA0HR: mmio.Mmio(packed struct(u32) {
    -            ///  MAC address0 high
    -            MACA0H: u16,
    -            reserved31: u15,
    -            ///  Always 1
    -            MO: u1,
    -        }),
    -        ///  Ethernet MAC address 0 low register
    -        MACA0LR: mmio.Mmio(packed struct(u32) {
    -            ///  0
    -            MACA0L: u32,
    -        }),
    -        ///  Ethernet MAC address 1 high register
    -        MACA1HR: mmio.Mmio(packed struct(u32) {
    -            ///  MACA1H
    -            MACA1H: u16,
    -            reserved24: u8,
    -            ///  MBC
    -            MBC: u6,
    -            ///  SA
    -            SA: u1,
    -            ///  AE
    -            AE: u1,
    -        }),
    -        ///  Ethernet MAC address1 low register
    -        MACA1LR: mmio.Mmio(packed struct(u32) {
    -            ///  MACA1LR
    -            MACA1LR: u32,
    -        }),
    -        ///  Ethernet MAC address 2 high register
    -        MACA2HR: mmio.Mmio(packed struct(u32) {
    -            ///  MAC2AH
    -            MAC2AH: u16,
    -            reserved24: u8,
    -            ///  MBC
    -            MBC: u6,
    -            ///  SA
    -            SA: u1,
    -            ///  AE
    -            AE: u1,
    -        }),
    -        ///  Ethernet MAC address 2 low register
    -        MACA2LR: mmio.Mmio(packed struct(u32) {
    -            ///  MACA2L
    -            MACA2L: u31,
    -            padding: u1,
    -        }),
    -        ///  Ethernet MAC address 3 high register
    -        MACA3HR: mmio.Mmio(packed struct(u32) {
    -            ///  MACA3H
    -            MACA3H: u16,
    -            reserved24: u8,
    -            ///  MBC
    -            MBC: u6,
    -            ///  SA
    -            SA: u1,
    -            ///  AE
    -            AE: u1,
    -        }),
    -        ///  Ethernet MAC address 3 low register
    -        MACA3LR: mmio.Mmio(packed struct(u32) {
    -            ///  MBCA3L
    -            MBCA3L: u32,
    -        }),
    -    };
    -
    -    ///  Controller area network
    -    pub const CAN1 = extern struct {
    -        ///  master control register
    -        MCR: mmio.Mmio(packed struct(u32) {
    -            ///  INRQ
    -            INRQ: u1,
    -            ///  SLEEP
    -            SLEEP: u1,
    -            ///  TXFP
    -            TXFP: u1,
    -            ///  RFLM
    -            RFLM: u1,
    -            ///  NART
    -            NART: u1,
    -            ///  AWUM
    -            AWUM: u1,
    -            ///  ABOM
    -            ABOM: u1,
    -            ///  TTCM
    -            TTCM: u1,
    -            reserved15: u7,
    -            ///  RESET
    -            RESET: u1,
    -            ///  DBF
    -            DBF: u1,
    -            padding: u15,
    -        }),
    -        ///  master status register
    -        MSR: mmio.Mmio(packed struct(u32) {
    -            ///  INAK
    -            INAK: u1,
    -            ///  SLAK
    -            SLAK: u1,
    -            ///  ERRI
    -            ERRI: u1,
    -            ///  WKUI
    -            WKUI: u1,
    -            ///  SLAKI
    -            SLAKI: u1,
    -            reserved8: u3,
    -            ///  TXM
    -            TXM: u1,
    -            ///  RXM
    -            RXM: u1,
    -            ///  SAMP
    -            SAMP: u1,
    -            ///  RX
    -            RX: u1,
    -            padding: u20,
    -        }),
    -        ///  transmit status register
    -        TSR: mmio.Mmio(packed struct(u32) {
    -            ///  RQCP0
    -            RQCP0: u1,
    -            ///  TXOK0
    -            TXOK0: u1,
    -            ///  ALST0
    -            ALST0: u1,
    -            ///  TERR0
    -            TERR0: u1,
    -            reserved7: u3,
    -            ///  ABRQ0
    -            ABRQ0: u1,
    -            ///  RQCP1
    -            RQCP1: u1,
    -            ///  TXOK1
    -            TXOK1: u1,
    -            ///  ALST1
    -            ALST1: u1,
    -            ///  TERR1
    -            TERR1: u1,
    -            reserved15: u3,
    -            ///  ABRQ1
    -            ABRQ1: u1,
    -            ///  RQCP2
    -            RQCP2: u1,
    -            ///  TXOK2
    -            TXOK2: u1,
    -            ///  ALST2
    -            ALST2: u1,
    -            ///  TERR2
    -            TERR2: u1,
    -            reserved23: u3,
    -            ///  ABRQ2
    -            ABRQ2: u1,
    -            ///  CODE
    -            CODE: u2,
    -            ///  Lowest priority flag for mailbox 0
    -            TME0: u1,
    -            ///  Lowest priority flag for mailbox 1
    -            TME1: u1,
    -            ///  Lowest priority flag for mailbox 2
    -            TME2: u1,
    -            ///  Lowest priority flag for mailbox 0
    -            LOW0: u1,
    -            ///  Lowest priority flag for mailbox 1
    -            LOW1: u1,
    -            ///  Lowest priority flag for mailbox 2
    -            LOW2: u1,
    -        }),
    -        ///  receive FIFO 0 register
    -        RF0R: mmio.Mmio(packed struct(u32) {
    -            ///  FMP0
    -            FMP0: u2,
    -            reserved3: u1,
    -            ///  FULL0
    -            FULL0: u1,
    -            ///  FOVR0
    -            FOVR0: u1,
    -            ///  RFOM0
    -            RFOM0: u1,
    -            padding: u26,
    -        }),
    -        ///  receive FIFO 1 register
    -        RF1R: mmio.Mmio(packed struct(u32) {
    -            ///  FMP1
    -            FMP1: u2,
    -            reserved3: u1,
    -            ///  FULL1
    -            FULL1: u1,
    -            ///  FOVR1
    -            FOVR1: u1,
    -            ///  RFOM1
    -            RFOM1: u1,
    -            padding: u26,
    -        }),
    -        ///  interrupt enable register
    -        IER: mmio.Mmio(packed struct(u32) {
    -            ///  TMEIE
    -            TMEIE: u1,
    -            ///  FMPIE0
    -            FMPIE0: u1,
    -            ///  FFIE0
    -            FFIE0: u1,
    -            ///  FOVIE0
    -            FOVIE0: u1,
    -            ///  FMPIE1
    -            FMPIE1: u1,
    -            ///  FFIE1
    -            FFIE1: u1,
    -            ///  FOVIE1
    -            FOVIE1: u1,
    -            reserved8: u1,
    -            ///  EWGIE
    -            EWGIE: u1,
    -            ///  EPVIE
    -            EPVIE: u1,
    -            ///  BOFIE
    -            BOFIE: u1,
    -            ///  LECIE
    -            LECIE: u1,
    -            reserved15: u3,
    -            ///  ERRIE
    -            ERRIE: u1,
    -            ///  WKUIE
    -            WKUIE: u1,
    -            ///  SLKIE
    -            SLKIE: u1,
    -            padding: u14,
    -        }),
    -        ///  interrupt enable register
    -        ESR: mmio.Mmio(packed struct(u32) {
    -            ///  EWGF
    -            EWGF: u1,
    -            ///  EPVF
    -            EPVF: u1,
    -            ///  BOFF
    -            BOFF: u1,
    -            reserved4: u1,
    -            ///  LEC
    -            LEC: u3,
    -            reserved16: u9,
    -            ///  TEC
    -            TEC: u8,
    -            ///  REC
    -            REC: u8,
    -        }),
    -        ///  bit timing register
    -        BTR: mmio.Mmio(packed struct(u32) {
    -            ///  BRP
    -            BRP: u10,
    -            reserved16: u6,
    -            ///  TS1
    -            TS1: u4,
    -            ///  TS2
    -            TS2: u3,
    -            reserved24: u1,
    -            ///  SJW
    -            SJW: u2,
    -            reserved30: u4,
    -            ///  LBKM
    -            LBKM: u1,
    -            ///  SILM
    -            SILM: u1,
    -        }),
    -        reserved384: [352]u8,
    -        ///  TX mailbox identifier register
    -        TI0R: mmio.Mmio(packed struct(u32) {
    -            ///  TXRQ
    -            TXRQ: u1,
    -            ///  RTR
    -            RTR: u1,
    -            ///  IDE
    -            IDE: u1,
    -            ///  EXID
    -            EXID: u18,
    -            ///  STID
    -            STID: u11,
    -        }),
    -        ///  mailbox data length control and time stamp register
    -        TDT0R: mmio.Mmio(packed struct(u32) {
    -            ///  DLC
    -            DLC: u4,
    -            reserved8: u4,
    -            ///  TGT
    -            TGT: u1,
    -            reserved16: u7,
    -            ///  TIME
    -            TIME: u16,
    -        }),
    -        ///  mailbox data low register
    -        TDL0R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA0
    -            DATA0: u8,
    -            ///  DATA1
    -            DATA1: u8,
    -            ///  DATA2
    -            DATA2: u8,
    -            ///  DATA3
    -            DATA3: u8,
    -        }),
    -        ///  mailbox data high register
    -        TDH0R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA4
    -            DATA4: u8,
    -            ///  DATA5
    -            DATA5: u8,
    -            ///  DATA6
    -            DATA6: u8,
    -            ///  DATA7
    -            DATA7: u8,
    -        }),
    -        ///  mailbox identifier register
    -        TI1R: mmio.Mmio(packed struct(u32) {
    -            ///  TXRQ
    -            TXRQ: u1,
    -            ///  RTR
    -            RTR: u1,
    -            ///  IDE
    -            IDE: u1,
    -            ///  EXID
    -            EXID: u18,
    -            ///  STID
    -            STID: u11,
    -        }),
    -        ///  mailbox data length control and time stamp register
    -        TDT1R: mmio.Mmio(packed struct(u32) {
    -            ///  DLC
    -            DLC: u4,
    -            reserved8: u4,
    -            ///  TGT
    -            TGT: u1,
    -            reserved16: u7,
    -            ///  TIME
    -            TIME: u16,
    -        }),
    -        ///  mailbox data low register
    -        TDL1R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA0
    -            DATA0: u8,
    -            ///  DATA1
    -            DATA1: u8,
    -            ///  DATA2
    -            DATA2: u8,
    -            ///  DATA3
    -            DATA3: u8,
    -        }),
    -        ///  mailbox data high register
    -        TDH1R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA4
    -            DATA4: u8,
    -            ///  DATA5
    -            DATA5: u8,
    -            ///  DATA6
    -            DATA6: u8,
    -            ///  DATA7
    -            DATA7: u8,
    -        }),
    -        ///  mailbox identifier register
    -        TI2R: mmio.Mmio(packed struct(u32) {
    -            ///  TXRQ
    -            TXRQ: u1,
    -            ///  RTR
    -            RTR: u1,
    -            ///  IDE
    -            IDE: u1,
    -            ///  EXID
    -            EXID: u18,
    -            ///  STID
    -            STID: u11,
    -        }),
    -        ///  mailbox data length control and time stamp register
    -        TDT2R: mmio.Mmio(packed struct(u32) {
    -            ///  DLC
    -            DLC: u4,
    -            reserved8: u4,
    -            ///  TGT
    -            TGT: u1,
    -            reserved16: u7,
    -            ///  TIME
    -            TIME: u16,
    -        }),
    -        ///  mailbox data low register
    -        TDL2R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA0
    -            DATA0: u8,
    -            ///  DATA1
    -            DATA1: u8,
    -            ///  DATA2
    -            DATA2: u8,
    -            ///  DATA3
    -            DATA3: u8,
    -        }),
    -        ///  mailbox data high register
    -        TDH2R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA4
    -            DATA4: u8,
    -            ///  DATA5
    -            DATA5: u8,
    -            ///  DATA6
    -            DATA6: u8,
    -            ///  DATA7
    -            DATA7: u8,
    -        }),
    -        ///  receive FIFO mailbox identifier register
    -        RI0R: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  RTR
    -            RTR: u1,
    -            ///  IDE
    -            IDE: u1,
    -            ///  EXID
    -            EXID: u18,
    -            ///  STID
    -            STID: u11,
    -        }),
    -        ///  mailbox data high register
    -        RDT0R: mmio.Mmio(packed struct(u32) {
    -            ///  DLC
    -            DLC: u4,
    -            reserved8: u4,
    -            ///  FMI
    -            FMI: u8,
    -            ///  TIME
    -            TIME: u16,
    -        }),
    -        ///  mailbox data high register
    -        RDL0R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA0
    -            DATA0: u8,
    -            ///  DATA1
    -            DATA1: u8,
    -            ///  DATA2
    -            DATA2: u8,
    -            ///  DATA3
    -            DATA3: u8,
    -        }),
    -        ///  receive FIFO mailbox data high register
    -        RDH0R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA4
    -            DATA4: u8,
    -            ///  DATA5
    -            DATA5: u8,
    -            ///  DATA6
    -            DATA6: u8,
    -            ///  DATA7
    -            DATA7: u8,
    -        }),
    -        ///  mailbox data high register
    -        RI1R: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  RTR
    -            RTR: u1,
    -            ///  IDE
    -            IDE: u1,
    -            ///  EXID
    -            EXID: u18,
    -            ///  STID
    -            STID: u11,
    -        }),
    -        ///  mailbox data high register
    -        RDT1R: mmio.Mmio(packed struct(u32) {
    -            ///  DLC
    -            DLC: u4,
    -            reserved8: u4,
    -            ///  FMI
    -            FMI: u8,
    -            ///  TIME
    -            TIME: u16,
    -        }),
    -        ///  mailbox data high register
    -        RDL1R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA0
    -            DATA0: u8,
    -            ///  DATA1
    -            DATA1: u8,
    -            ///  DATA2
    -            DATA2: u8,
    -            ///  DATA3
    -            DATA3: u8,
    -        }),
    -        ///  mailbox data high register
    -        RDH1R: mmio.Mmio(packed struct(u32) {
    -            ///  DATA4
    -            DATA4: u8,
    -            ///  DATA5
    -            DATA5: u8,
    -            ///  DATA6
    -            DATA6: u8,
    -            ///  DATA7
    -            DATA7: u8,
    -        }),
    -        reserved512: [48]u8,
    -        ///  filter master register
    -        FMR: mmio.Mmio(packed struct(u32) {
    -            ///  FINIT
    -            FINIT: u1,
    -            reserved8: u7,
    -            ///  CAN2SB
    -            CAN2SB: u6,
    -            padding: u18,
    -        }),
    -        ///  filter mode register
    -        FM1R: mmio.Mmio(packed struct(u32) {
    -            ///  Filter mode
    -            FBM0: u1,
    -            ///  Filter mode
    -            FBM1: u1,
    -            ///  Filter mode
    -            FBM2: u1,
    -            ///  Filter mode
    -            FBM3: u1,
    -            ///  Filter mode
    -            FBM4: u1,
    -            ///  Filter mode
    -            FBM5: u1,
    -            ///  Filter mode
    -            FBM6: u1,
    -            ///  Filter mode
    -            FBM7: u1,
    -            ///  Filter mode
    -            FBM8: u1,
    -            ///  Filter mode
    -            FBM9: u1,
    -            ///  Filter mode
    -            FBM10: u1,
    -            ///  Filter mode
    -            FBM11: u1,
    -            ///  Filter mode
    -            FBM12: u1,
    -            ///  Filter mode
    -            FBM13: u1,
    -            ///  Filter mode
    -            FBM14: u1,
    -            ///  Filter mode
    -            FBM15: u1,
    -            ///  Filter mode
    -            FBM16: u1,
    -            ///  Filter mode
    -            FBM17: u1,
    -            ///  Filter mode
    -            FBM18: u1,
    -            ///  Filter mode
    -            FBM19: u1,
    -            ///  Filter mode
    -            FBM20: u1,
    -            ///  Filter mode
    -            FBM21: u1,
    -            ///  Filter mode
    -            FBM22: u1,
    -            ///  Filter mode
    -            FBM23: u1,
    -            ///  Filter mode
    -            FBM24: u1,
    -            ///  Filter mode
    -            FBM25: u1,
    -            ///  Filter mode
    -            FBM26: u1,
    -            ///  Filter mode
    -            FBM27: u1,
    -            padding: u4,
    -        }),
    -        reserved524: [4]u8,
    -        ///  filter scale register
    -        FS1R: mmio.Mmio(packed struct(u32) {
    -            ///  Filter scale configuration
    -            FSC0: u1,
    -            ///  Filter scale configuration
    -            FSC1: u1,
    -            ///  Filter scale configuration
    -            FSC2: u1,
    -            ///  Filter scale configuration
    -            FSC3: u1,
    -            ///  Filter scale configuration
    -            FSC4: u1,
    -            ///  Filter scale configuration
    -            FSC5: u1,
    -            ///  Filter scale configuration
    -            FSC6: u1,
    -            ///  Filter scale configuration
    -            FSC7: u1,
    -            ///  Filter scale configuration
    -            FSC8: u1,
    -            ///  Filter scale configuration
    -            FSC9: u1,
    -            ///  Filter scale configuration
    -            FSC10: u1,
    -            ///  Filter scale configuration
    -            FSC11: u1,
    -            ///  Filter scale configuration
    -            FSC12: u1,
    -            ///  Filter scale configuration
    -            FSC13: u1,
    -            ///  Filter scale configuration
    -            FSC14: u1,
    -            ///  Filter scale configuration
    -            FSC15: u1,
    -            ///  Filter scale configuration
    -            FSC16: u1,
    -            ///  Filter scale configuration
    -            FSC17: u1,
    -            ///  Filter scale configuration
    -            FSC18: u1,
    -            ///  Filter scale configuration
    -            FSC19: u1,
    -            ///  Filter scale configuration
    -            FSC20: u1,
    -            ///  Filter scale configuration
    -            FSC21: u1,
    -            ///  Filter scale configuration
    -            FSC22: u1,
    -            ///  Filter scale configuration
    -            FSC23: u1,
    -            ///  Filter scale configuration
    -            FSC24: u1,
    -            ///  Filter scale configuration
    -            FSC25: u1,
    -            ///  Filter scale configuration
    -            FSC26: u1,
    -            ///  Filter scale configuration
    -            FSC27: u1,
    -            padding: u4,
    -        }),
    -        reserved532: [4]u8,
    -        ///  filter FIFO assignment register
    -        FFA1R: mmio.Mmio(packed struct(u32) {
    -            ///  Filter FIFO assignment for filter 0
    -            FFA0: u1,
    -            ///  Filter FIFO assignment for filter 1
    -            FFA1: u1,
    -            ///  Filter FIFO assignment for filter 2
    -            FFA2: u1,
    -            ///  Filter FIFO assignment for filter 3
    -            FFA3: u1,
    -            ///  Filter FIFO assignment for filter 4
    -            FFA4: u1,
    -            ///  Filter FIFO assignment for filter 5
    -            FFA5: u1,
    -            ///  Filter FIFO assignment for filter 6
    -            FFA6: u1,
    -            ///  Filter FIFO assignment for filter 7
    -            FFA7: u1,
    -            ///  Filter FIFO assignment for filter 8
    -            FFA8: u1,
    -            ///  Filter FIFO assignment for filter 9
    -            FFA9: u1,
    -            ///  Filter FIFO assignment for filter 10
    -            FFA10: u1,
    -            ///  Filter FIFO assignment for filter 11
    -            FFA11: u1,
    -            ///  Filter FIFO assignment for filter 12
    -            FFA12: u1,
    -            ///  Filter FIFO assignment for filter 13
    -            FFA13: u1,
    -            ///  Filter FIFO assignment for filter 14
    -            FFA14: u1,
    -            ///  Filter FIFO assignment for filter 15
    -            FFA15: u1,
    -            ///  Filter FIFO assignment for filter 16
    -            FFA16: u1,
    -            ///  Filter FIFO assignment for filter 17
    -            FFA17: u1,
    -            ///  Filter FIFO assignment for filter 18
    -            FFA18: u1,
    -            ///  Filter FIFO assignment for filter 19
    -            FFA19: u1,
    -            ///  Filter FIFO assignment for filter 20
    -            FFA20: u1,
    -            ///  Filter FIFO assignment for filter 21
    -            FFA21: u1,
    -            ///  Filter FIFO assignment for filter 22
    -            FFA22: u1,
    -            ///  Filter FIFO assignment for filter 23
    -            FFA23: u1,
    -            ///  Filter FIFO assignment for filter 24
    -            FFA24: u1,
    -            ///  Filter FIFO assignment for filter 25
    -            FFA25: u1,
    -            ///  Filter FIFO assignment for filter 26
    -            FFA26: u1,
    -            ///  Filter FIFO assignment for filter 27
    -            FFA27: u1,
    -            padding: u4,
    -        }),
    -        reserved540: [4]u8,
    -        ///  filter activation register
    -        FA1R: mmio.Mmio(packed struct(u32) {
    -            ///  Filter active
    -            FACT0: u1,
    -            ///  Filter active
    -            FACT1: u1,
    -            ///  Filter active
    -            FACT2: u1,
    -            ///  Filter active
    -            FACT3: u1,
    -            ///  Filter active
    -            FACT4: u1,
    -            ///  Filter active
    -            FACT5: u1,
    -            ///  Filter active
    -            FACT6: u1,
    -            ///  Filter active
    -            FACT7: u1,
    -            ///  Filter active
    -            FACT8: u1,
    -            ///  Filter active
    -            FACT9: u1,
    -            ///  Filter active
    -            FACT10: u1,
    -            ///  Filter active
    -            FACT11: u1,
    -            ///  Filter active
    -            FACT12: u1,
    -            ///  Filter active
    -            FACT13: u1,
    -            ///  Filter active
    -            FACT14: u1,
    -            ///  Filter active
    -            FACT15: u1,
    -            ///  Filter active
    -            FACT16: u1,
    -            ///  Filter active
    -            FACT17: u1,
    -            ///  Filter active
    -            FACT18: u1,
    -            ///  Filter active
    -            FACT19: u1,
    -            ///  Filter active
    -            FACT20: u1,
    -            ///  Filter active
    -            FACT21: u1,
    -            ///  Filter active
    -            FACT22: u1,
    -            ///  Filter active
    -            FACT23: u1,
    -            ///  Filter active
    -            FACT24: u1,
    -            ///  Filter active
    -            FACT25: u1,
    -            ///  Filter active
    -            FACT26: u1,
    -            ///  Filter active
    -            FACT27: u1,
    -            padding: u4,
    -        }),
    -        reserved576: [32]u8,
    -        ///  Filter bank 0 register 1
    -        F0R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 0 register 2
    -        F0R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 1 register 1
    -        F1R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 1 register 2
    -        F1R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 2 register 1
    -        F2R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 2 register 2
    -        F2R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 3 register 1
    -        F3R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 3 register 2
    -        F3R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 4 register 1
    -        F4R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 4 register 2
    -        F4R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 5 register 1
    -        F5R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 5 register 2
    -        F5R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 6 register 1
    -        F6R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 6 register 2
    -        F6R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 7 register 1
    -        F7R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 7 register 2
    -        F7R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 8 register 1
    -        F8R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 8 register 2
    -        F8R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 9 register 1
    -        F9R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 9 register 2
    -        F9R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 10 register 1
    -        F10R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 10 register 2
    -        F10R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 11 register 1
    -        F11R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 11 register 2
    -        F11R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 4 register 1
    -        F12R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 12 register 2
    -        F12R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 13 register 1
    -        F13R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 13 register 2
    -        F13R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 14 register 1
    -        F14R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 14 register 2
    -        F14R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 15 register 1
    -        F15R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 15 register 2
    -        F15R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 16 register 1
    -        F16R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 16 register 2
    -        F16R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 17 register 1
    -        F17R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 17 register 2
    -        F17R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 18 register 1
    -        F18R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 18 register 2
    -        F18R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 19 register 1
    -        F19R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 19 register 2
    -        F19R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 20 register 1
    -        F20R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 20 register 2
    -        F20R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 21 register 1
    -        F21R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 21 register 2
    -        F21R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 22 register 1
    -        F22R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 22 register 2
    -        F22R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 23 register 1
    -        F23R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 23 register 2
    -        F23R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 24 register 1
    -        F24R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 24 register 2
    -        F24R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 25 register 1
    -        F25R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 25 register 2
    -        F25R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 26 register 1
    -        F26R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 26 register 2
    -        F26R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 27 register 1
    -        F27R1: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -        ///  Filter bank 27 register 2
    -        F27R2: mmio.Mmio(packed struct(u32) {
    -            ///  Filter bits
    -            FB0: u1,
    -            ///  Filter bits
    -            FB1: u1,
    -            ///  Filter bits
    -            FB2: u1,
    -            ///  Filter bits
    -            FB3: u1,
    -            ///  Filter bits
    -            FB4: u1,
    -            ///  Filter bits
    -            FB5: u1,
    -            ///  Filter bits
    -            FB6: u1,
    -            ///  Filter bits
    -            FB7: u1,
    -            ///  Filter bits
    -            FB8: u1,
    -            ///  Filter bits
    -            FB9: u1,
    -            ///  Filter bits
    -            FB10: u1,
    -            ///  Filter bits
    -            FB11: u1,
    -            ///  Filter bits
    -            FB12: u1,
    -            ///  Filter bits
    -            FB13: u1,
    -            ///  Filter bits
    -            FB14: u1,
    -            ///  Filter bits
    -            FB15: u1,
    -            ///  Filter bits
    -            FB16: u1,
    -            ///  Filter bits
    -            FB17: u1,
    -            ///  Filter bits
    -            FB18: u1,
    -            ///  Filter bits
    -            FB19: u1,
    -            ///  Filter bits
    -            FB20: u1,
    -            ///  Filter bits
    -            FB21: u1,
    -            ///  Filter bits
    -            FB22: u1,
    -            ///  Filter bits
    -            FB23: u1,
    -            ///  Filter bits
    -            FB24: u1,
    -            ///  Filter bits
    -            FB25: u1,
    -            ///  Filter bits
    -            FB26: u1,
    -            ///  Filter bits
    -            FB27: u1,
    -            ///  Filter bits
    -            FB28: u1,
    -            ///  Filter bits
    -            FB29: u1,
    -            ///  Filter bits
    -            FB30: u1,
    -            ///  Filter bits
    -            FB31: u1,
    -        }),
    -    };
    -
    -    ///  USB on the go full speed
    -    pub const OTG_FS_PWRCLK = extern struct {
    -        ///  OTG_FS power and clock gating control register (OTG_FS_PCGCCTL)
    -        FS_PCGCCTL: mmio.Mmio(packed struct(u32) {
    -            ///  Stop PHY clock
    -            STPPCLK: u1,
    -            ///  Gate HCLK
    -            GATEHCLK: u1,
    -            reserved4: u2,
    -            ///  PHY Suspended
    -            PHYSUSP: u1,
    -            padding: u27,
    -        }),
    -    };
    -
    -    ///  Digital-to-analog converter
    -    pub const DAC = extern struct {
    -        ///  control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 enable
    -            EN1: u1,
    -            ///  DAC channel1 output buffer disable
    -            BOFF1: u1,
    -            ///  DAC channel1 trigger enable
    -            TEN1: u1,
    -            ///  DAC channel1 trigger selection
    -            TSEL1: u3,
    -            ///  DAC channel1 noise/triangle wave generation enable
    -            WAVE1: u2,
    -            ///  DAC channel1 mask/amplitude selector
    -            MAMP1: u4,
    -            ///  DAC channel1 DMA enable
    -            DMAEN1: u1,
    -            ///  DAC channel1 DMA Underrun Interrupt enable
    -            DMAUDRIE1: u1,
    -            reserved16: u2,
    -            ///  DAC channel2 enable
    -            EN2: u1,
    -            ///  DAC channel2 output buffer disable
    -            BOFF2: u1,
    -            ///  DAC channel2 trigger enable
    -            TEN2: u1,
    -            ///  DAC channel2 trigger selection
    -            TSEL2: u3,
    -            ///  DAC channel2 noise/triangle wave generation enable
    -            WAVE2: u2,
    -            ///  DAC channel2 mask/amplitude selector
    -            MAMP2: u4,
    -            ///  DAC channel2 DMA enable
    -            DMAEN2: u1,
    -            ///  DAC channel2 DMA underrun interrupt enable
    -            DMAUDRIE2: u1,
    -            padding: u2,
    -        }),
    -        ///  software trigger register
    -        SWTRIGR: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 software trigger
    -            SWTRIG1: u1,
    -            ///  DAC channel2 software trigger
    -            SWTRIG2: u1,
    -            padding: u30,
    -        }),
    -        ///  channel1 12-bit right-aligned data holding register
    -        DHR12R1: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 12-bit right-aligned data
    -            DACC1DHR: u12,
    -            padding: u20,
    -        }),
    -        ///  channel1 12-bit left aligned data holding register
    -        DHR12L1: mmio.Mmio(packed struct(u32) {
    -            reserved4: u4,
    -            ///  DAC channel1 12-bit left-aligned data
    -            DACC1DHR: u12,
    -            padding: u16,
    -        }),
    -        ///  channel1 8-bit right aligned data holding register
    -        DHR8R1: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 8-bit right-aligned data
    -            DACC1DHR: u8,
    -            padding: u24,
    -        }),
    -        ///  channel2 12-bit right aligned data holding register
    -        DHR12R2: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel2 12-bit right-aligned data
    -            DACC2DHR: u12,
    -            padding: u20,
    -        }),
    -        ///  channel2 12-bit left aligned data holding register
    -        DHR12L2: mmio.Mmio(packed struct(u32) {
    -            reserved4: u4,
    -            ///  DAC channel2 12-bit left-aligned data
    -            DACC2DHR: u12,
    -            padding: u16,
    -        }),
    -        ///  channel2 8-bit right-aligned data holding register
    -        DHR8R2: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel2 8-bit right-aligned data
    -            DACC2DHR: u8,
    -            padding: u24,
    -        }),
    -        ///  Dual DAC 12-bit right-aligned data holding register
    -        DHR12RD: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 12-bit right-aligned data
    -            DACC1DHR: u12,
    -            reserved16: u4,
    -            ///  DAC channel2 12-bit right-aligned data
    -            DACC2DHR: u12,
    -            padding: u4,
    -        }),
    -        ///  DUAL DAC 12-bit left aligned data holding register
    -        DHR12LD: mmio.Mmio(packed struct(u32) {
    -            reserved4: u4,
    -            ///  DAC channel1 12-bit left-aligned data
    -            DACC1DHR: u12,
    -            reserved20: u4,
    -            ///  DAC channel2 12-bit left-aligned data
    -            DACC2DHR: u12,
    -        }),
    -        ///  DUAL DAC 8-bit right aligned data holding register
    -        DHR8RD: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 8-bit right-aligned data
    -            DACC1DHR: u8,
    -            ///  DAC channel2 8-bit right-aligned data
    -            DACC2DHR: u8,
    -            padding: u16,
    -        }),
    -        ///  channel1 data output register
    -        DOR1: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel1 data output
    -            DACC1DOR: u12,
    -            padding: u20,
    -        }),
    -        ///  channel2 data output register
    -        DOR2: mmio.Mmio(packed struct(u32) {
    -            ///  DAC channel2 data output
    -            DACC2DOR: u12,
    -            padding: u20,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            reserved13: u13,
    -            ///  DAC channel1 DMA underrun flag
    -            DMAUDR1: u1,
    -            reserved29: u15,
    -            ///  DAC channel2 DMA underrun flag
    -            DMAUDR2: u1,
    -            padding: u2,
    -        }),
    -    };
    -
    -    ///  Power control
    -    pub const PWR = extern struct {
    -        ///  power control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  Low-power deep sleep
    -            LPDS: u1,
    -            ///  Power down deepsleep
    -            PDDS: u1,
    -            ///  Clear wakeup flag
    -            CWUF: u1,
    -            ///  Clear standby flag
    -            CSBF: u1,
    -            ///  Power voltage detector enable
    -            PVDE: u1,
    -            ///  PVD level selection
    -            PLS: u3,
    -            ///  Disable backup domain write protection
    -            DBP: u1,
    -            ///  Flash power down in Stop mode
    -            FPDS: u1,
    -            ///  Low-Power Regulator Low Voltage in deepsleep
    -            LPLVDS: u1,
    -            ///  Main regulator low voltage in deepsleep mode
    -            MRLVDS: u1,
    -            reserved14: u2,
    -            ///  Regulator voltage scaling output selection
    -            VOS: u2,
    -            ///  Over-drive enable
    -            ODEN: u1,
    -            ///  Over-drive switching enabled
    -            ODSWEN: u1,
    -            ///  Under-drive enable in stop mode
    -            UDEN: u2,
    -            padding: u12,
    -        }),
    -        ///  power control/status register
    -        CSR: mmio.Mmio(packed struct(u32) {
    -            ///  Wakeup flag
    -            WUF: u1,
    -            ///  Standby flag
    -            SBF: u1,
    -            ///  PVD output
    -            PVDO: u1,
    -            ///  Backup regulator ready
    -            BRR: u1,
    -            reserved8: u4,
    -            ///  Enable WKUP pin
    -            EWUP: u1,
    -            ///  Backup regulator enable
    -            BRE: u1,
    -            reserved14: u4,
    -            ///  Regulator voltage scaling output selection ready bit
    -            VOSRDY: u1,
    -            reserved16: u1,
    -            ///  Over-drive mode ready
    -            ODRDY: u1,
    -            ///  Over-drive mode switching ready
    -            ODSWRDY: u1,
    -            ///  Under-drive ready flag
    -            UDRDY: u2,
    -            padding: u12,
    -        }),
    -    };
    -
    -    ///  Independent watchdog
    -    pub const IWDG = extern struct {
    -        ///  Key register
    -        KR: mmio.Mmio(packed struct(u32) {
    -            ///  Key value (write only, read 0000h)
    -            KEY: u16,
    -            padding: u16,
    -        }),
    -        ///  Prescaler register
    -        PR: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler divider
    -            PR: u3,
    -            padding: u29,
    -        }),
    -        ///  Reload register
    -        RLR: mmio.Mmio(packed struct(u32) {
    -            ///  Watchdog counter reload value
    -            RL: u12,
    -            padding: u20,
    -        }),
    -        ///  Status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Watchdog prescaler value update
    -            PVU: u1,
    -            ///  Watchdog counter reload value update
    -            RVU: u1,
    -            padding: u30,
    -        }),
    -    };
    -
    -    ///  Window watchdog
    -    pub const WWDG = extern struct {
    -        ///  Control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  7-bit counter (MSB to LSB)
    -            T: u7,
    -            ///  Activation bit
    -            WDGA: u1,
    -            padding: u24,
    -        }),
    -        ///  Configuration register
    -        CFR: mmio.Mmio(packed struct(u32) {
    -            ///  7-bit window value
    -            W: u7,
    -            ///  Timer base
    -            WDGTB0: u1,
    -            ///  Timer base
    -            WDGTB1: u1,
    -            ///  Early wakeup interrupt
    -            EWI: u1,
    -            padding: u22,
    -        }),
    -        ///  Status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Early wakeup interrupt flag
    -            EWIF: u1,
    -            padding: u31,
    -        }),
    -    };
    -
    -    ///  Real-time clock
    -    pub const RTC = extern struct {
    -        ///  time register
    -        TR: mmio.Mmio(packed struct(u32) {
    -            ///  Second units in BCD format
    -            SU: u4,
    -            ///  Second tens in BCD format
    -            ST: u3,
    -            reserved8: u1,
    -            ///  Minute units in BCD format
    -            MNU: u4,
    -            ///  Minute tens in BCD format
    -            MNT: u3,
    -            reserved16: u1,
    -            ///  Hour units in BCD format
    -            HU: u4,
    -            ///  Hour tens in BCD format
    -            HT: u2,
    -            ///  AM/PM notation
    -            PM: u1,
    -            padding: u9,
    -        }),
    -        ///  date register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  Date units in BCD format
    -            DU: u4,
    -            ///  Date tens in BCD format
    -            DT: u2,
    -            reserved8: u2,
    -            ///  Month units in BCD format
    -            MU: u4,
    -            ///  Month tens in BCD format
    -            MT: u1,
    -            ///  Week day units
    -            WDU: u3,
    -            ///  Year units in BCD format
    -            YU: u4,
    -            ///  Year tens in BCD format
    -            YT: u4,
    -            padding: u8,
    -        }),
    -        ///  control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  Wakeup clock selection
    -            WCKSEL: u3,
    -            ///  Time-stamp event active edge
    -            TSEDGE: u1,
    -            ///  Reference clock detection enable (50 or 60 Hz)
    -            REFCKON: u1,
    -            reserved6: u1,
    -            ///  Hour format
    -            FMT: u1,
    -            ///  Coarse digital calibration enable
    -            DCE: u1,
    -            ///  Alarm A enable
    -            ALRAE: u1,
    -            ///  Alarm B enable
    -            ALRBE: u1,
    -            ///  Wakeup timer enable
    -            WUTE: u1,
    -            ///  Time stamp enable
    -            TSE: u1,
    -            ///  Alarm A interrupt enable
    -            ALRAIE: u1,
    -            ///  Alarm B interrupt enable
    -            ALRBIE: u1,
    -            ///  Wakeup timer interrupt enable
    -            WUTIE: u1,
    -            ///  Time-stamp interrupt enable
    -            TSIE: u1,
    -            ///  Add 1 hour (summer time change)
    -            ADD1H: u1,
    -            ///  Subtract 1 hour (winter time change)
    -            SUB1H: u1,
    -            ///  Backup
    -            BKP: u1,
    -            reserved20: u1,
    -            ///  Output polarity
    -            POL: u1,
    -            ///  Output selection
    -            OSEL: u2,
    -            ///  Calibration output enable
    -            COE: u1,
    -            padding: u8,
    -        }),
    -        ///  initialization and status register
    -        ISR: mmio.Mmio(packed struct(u32) {
    -            ///  Alarm A write flag
    -            ALRAWF: u1,
    -            ///  Alarm B write flag
    -            ALRBWF: u1,
    -            ///  Wakeup timer write flag
    -            WUTWF: u1,
    -            ///  Shift operation pending
    -            SHPF: u1,
    -            ///  Initialization status flag
    -            INITS: u1,
    -            ///  Registers synchronization flag
    -            RSF: u1,
    -            ///  Initialization flag
    -            INITF: u1,
    -            ///  Initialization mode
    -            INIT: u1,
    -            ///  Alarm A flag
    -            ALRAF: u1,
    -            ///  Alarm B flag
    -            ALRBF: u1,
    -            ///  Wakeup timer flag
    -            WUTF: u1,
    -            ///  Time-stamp flag
    -            TSF: u1,
    -            ///  Time-stamp overflow flag
    -            TSOVF: u1,
    -            ///  Tamper detection flag
    -            TAMP1F: u1,
    -            ///  TAMPER2 detection flag
    -            TAMP2F: u1,
    -            reserved16: u1,
    -            ///  Recalibration pending Flag
    -            RECALPF: u1,
    -            padding: u15,
    -        }),
    -        ///  prescaler register
    -        PRER: mmio.Mmio(packed struct(u32) {
    -            ///  Synchronous prescaler factor
    -            PREDIV_S: u15,
    -            reserved16: u1,
    -            ///  Asynchronous prescaler factor
    -            PREDIV_A: u7,
    -            padding: u9,
    -        }),
    -        ///  wakeup timer register
    -        WUTR: mmio.Mmio(packed struct(u32) {
    -            ///  Wakeup auto-reload value bits
    -            WUT: u16,
    -            padding: u16,
    -        }),
    -        ///  calibration register
    -        CALIBR: mmio.Mmio(packed struct(u32) {
    -            ///  Digital calibration
    -            DC: u5,
    -            reserved7: u2,
    -            ///  Digital calibration sign
    -            DCS: u1,
    -            padding: u24,
    -        }),
    -        ///  alarm A register
    -        ALRMAR: mmio.Mmio(packed struct(u32) {
    -            ///  Second units in BCD format
    -            SU: u4,
    -            ///  Second tens in BCD format
    -            ST: u3,
    -            ///  Alarm A seconds mask
    -            MSK1: u1,
    -            ///  Minute units in BCD format
    -            MNU: u4,
    -            ///  Minute tens in BCD format
    -            MNT: u3,
    -            ///  Alarm A minutes mask
    -            MSK2: u1,
    -            ///  Hour units in BCD format
    -            HU: u4,
    -            ///  Hour tens in BCD format
    -            HT: u2,
    -            ///  AM/PM notation
    -            PM: u1,
    -            ///  Alarm A hours mask
    -            MSK3: u1,
    -            ///  Date units or day in BCD format
    -            DU: u4,
    -            ///  Date tens in BCD format
    -            DT: u2,
    -            ///  Week day selection
    -            WDSEL: u1,
    -            ///  Alarm A date mask
    -            MSK4: u1,
    -        }),
    -        ///  alarm B register
    -        ALRMBR: mmio.Mmio(packed struct(u32) {
    -            ///  Second units in BCD format
    -            SU: u4,
    -            ///  Second tens in BCD format
    -            ST: u3,
    -            ///  Alarm B seconds mask
    -            MSK1: u1,
    -            ///  Minute units in BCD format
    -            MNU: u4,
    -            ///  Minute tens in BCD format
    -            MNT: u3,
    -            ///  Alarm B minutes mask
    -            MSK2: u1,
    -            ///  Hour units in BCD format
    -            HU: u4,
    -            ///  Hour tens in BCD format
    -            HT: u2,
    -            ///  AM/PM notation
    -            PM: u1,
    -            ///  Alarm B hours mask
    -            MSK3: u1,
    -            ///  Date units or day in BCD format
    -            DU: u4,
    -            ///  Date tens in BCD format
    -            DT: u2,
    -            ///  Week day selection
    -            WDSEL: u1,
    -            ///  Alarm B date mask
    -            MSK4: u1,
    -        }),
    -        ///  write protection register
    -        WPR: mmio.Mmio(packed struct(u32) {
    -            ///  Write protection key
    -            KEY: u8,
    -            padding: u24,
    -        }),
    -        ///  sub second register
    -        SSR: mmio.Mmio(packed struct(u32) {
    -            ///  Sub second value
    -            SS: u16,
    -            padding: u16,
    -        }),
    -        ///  shift control register
    -        SHIFTR: mmio.Mmio(packed struct(u32) {
    -            ///  Subtract a fraction of a second
    -            SUBFS: u15,
    -            reserved31: u16,
    -            ///  Add one second
    -            ADD1S: u1,
    -        }),
    -        ///  time stamp time register
    -        TSTR: mmio.Mmio(packed struct(u32) {
    -            ///  Tamper 1 detection enable
    -            TAMP1E: u1,
    -            ///  Active level for tamper 1
    -            TAMP1TRG: u1,
    -            ///  Tamper interrupt enable
    -            TAMPIE: u1,
    -            reserved16: u13,
    -            ///  TAMPER1 mapping
    -            TAMP1INSEL: u1,
    -            ///  TIMESTAMP mapping
    -            TSINSEL: u1,
    -            ///  AFO_ALARM output type
    -            ALARMOUTTYPE: u1,
    -            padding: u13,
    -        }),
    -        ///  time stamp date register
    -        TSDR: mmio.Mmio(packed struct(u32) {
    -            ///  Date units in BCD format
    -            DU: u4,
    -            ///  Date tens in BCD format
    -            DT: u2,
    -            reserved8: u2,
    -            ///  Month units in BCD format
    -            MU: u4,
    -            ///  Month tens in BCD format
    -            MT: u1,
    -            ///  Week day units
    -            WDU: u3,
    -            padding: u16,
    -        }),
    -        ///  timestamp sub second register
    -        TSSSR: mmio.Mmio(packed struct(u32) {
    -            ///  Sub second value
    -            SS: u16,
    -            padding: u16,
    -        }),
    -        ///  calibration register
    -        CALR: mmio.Mmio(packed struct(u32) {
    -            ///  Calibration minus
    -            CALM: u9,
    -            reserved13: u4,
    -            ///  Use a 16-second calibration cycle period
    -            CALW16: u1,
    -            ///  Use an 8-second calibration cycle period
    -            CALW8: u1,
    -            ///  Increase frequency of RTC by 488.5 ppm
    -            CALP: u1,
    -            padding: u16,
    -        }),
    -        ///  tamper and alternate function configuration register
    -        TAFCR: mmio.Mmio(packed struct(u32) {
    -            ///  Tamper 1 detection enable
    -            TAMP1E: u1,
    -            ///  Active level for tamper 1
    -            TAMP1TRG: u1,
    -            ///  Tamper interrupt enable
    -            TAMPIE: u1,
    -            ///  Tamper 2 detection enable
    -            TAMP2E: u1,
    -            ///  Active level for tamper 2
    -            TAMP2TRG: u1,
    -            reserved7: u2,
    -            ///  Activate timestamp on tamper detection event
    -            TAMPTS: u1,
    -            ///  Tamper sampling frequency
    -            TAMPFREQ: u3,
    -            ///  Tamper filter count
    -            TAMPFLT: u2,
    -            ///  Tamper precharge duration
    -            TAMPPRCH: u2,
    -            ///  TAMPER pull-up disable
    -            TAMPPUDIS: u1,
    -            ///  TAMPER1 mapping
    -            TAMP1INSEL: u1,
    -            ///  TIMESTAMP mapping
    -            TSINSEL: u1,
    -            ///  AFO_ALARM output type
    -            ALARMOUTTYPE: u1,
    -            padding: u13,
    -        }),
    -        ///  alarm A sub second register
    -        ALRMASSR: mmio.Mmio(packed struct(u32) {
    -            ///  Sub seconds value
    -            SS: u15,
    -            reserved24: u9,
    -            ///  Mask the most-significant bits starting at this bit
    -            MASKSS: u4,
    -            padding: u4,
    -        }),
    -        ///  alarm B sub second register
    -        ALRMBSSR: mmio.Mmio(packed struct(u32) {
    -            ///  Sub seconds value
    -            SS: u15,
    -            reserved24: u9,
    -            ///  Mask the most-significant bits starting at this bit
    -            MASKSS: u4,
    -            padding: u4,
    -        }),
    -        reserved80: [4]u8,
    -        ///  backup register
    -        BKP0R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP1R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP2R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP3R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP4R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP5R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP6R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP7R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP8R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP9R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP10R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP11R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP12R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP13R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP14R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP15R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP16R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP17R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP18R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -        ///  backup register
    -        BKP19R: mmio.Mmio(packed struct(u32) {
    -            ///  BKP
    -            BKP: u32,
    -        }),
    -    };
    -
    -    ///  Universal synchronous asynchronous receiver transmitter
    -    pub const UART4 = extern struct {
    -        ///  Status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Parity error
    -            PE: u1,
    -            ///  Framing error
    -            FE: u1,
    -            ///  Noise detected flag
    -            NF: u1,
    -            ///  Overrun error
    -            ORE: u1,
    -            ///  IDLE line detected
    -            IDLE: u1,
    -            ///  Read data register not empty
    -            RXNE: u1,
    -            ///  Transmission complete
    -            TC: u1,
    -            ///  Transmit data register empty
    -            TXE: u1,
    -            ///  LIN break detection flag
    -            LBD: u1,
    -            padding: u23,
    -        }),
    -        ///  Data register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  Data value
    -            DR: u9,
    -            padding: u23,
    -        }),
    -        ///  Baud rate register
    -        BRR: mmio.Mmio(packed struct(u32) {
    -            ///  fraction of USARTDIV
    -            DIV_Fraction: u4,
    -            ///  mantissa of USARTDIV
    -            DIV_Mantissa: u12,
    -            padding: u16,
    -        }),
    -        ///  Control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Send break
    -            SBK: u1,
    -            ///  Receiver wakeup
    -            RWU: u1,
    -            ///  Receiver enable
    -            RE: u1,
    -            ///  Transmitter enable
    -            TE: u1,
    -            ///  IDLE interrupt enable
    -            IDLEIE: u1,
    -            ///  RXNE interrupt enable
    -            RXNEIE: u1,
    -            ///  Transmission complete interrupt enable
    -            TCIE: u1,
    -            ///  TXE interrupt enable
    -            TXEIE: u1,
    -            ///  PE interrupt enable
    -            PEIE: u1,
    -            ///  Parity selection
    -            PS: u1,
    -            ///  Parity control enable
    -            PCE: u1,
    -            ///  Wakeup method
    -            WAKE: u1,
    -            ///  Word length
    -            M: u1,
    -            ///  USART enable
    -            UE: u1,
    -            reserved15: u1,
    -            ///  Oversampling mode
    -            OVER8: u1,
    -            padding: u16,
    -        }),
    -        ///  Control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            ///  Address of the USART node
    -            ADD: u4,
    -            reserved5: u1,
    -            ///  lin break detection length
    -            LBDL: u1,
    -            ///  LIN break detection interrupt enable
    -            LBDIE: u1,
    -            reserved12: u5,
    -            ///  STOP bits
    -            STOP: u2,
    -            ///  LIN mode enable
    -            LINEN: u1,
    -            padding: u17,
    -        }),
    -        ///  Control register 3
    -        CR3: mmio.Mmio(packed struct(u32) {
    -            ///  Error interrupt enable
    -            EIE: u1,
    -            ///  IrDA mode enable
    -            IREN: u1,
    -            ///  IrDA low-power
    -            IRLP: u1,
    -            ///  Half-duplex selection
    -            HDSEL: u1,
    -            reserved6: u2,
    -            ///  DMA enable receiver
    -            DMAR: u1,
    -            ///  DMA enable transmitter
    -            DMAT: u1,
    -            reserved11: u3,
    -            ///  One sample bit method enable
    -            ONEBIT: u1,
    -            padding: u20,
    -        }),
    -    };
    -
    -    ///  USB on the go full speed
    -    pub const OTG_FS_DEVICE = extern struct {
    -        ///  OTG_FS device configuration register (OTG_FS_DCFG)
    -        FS_DCFG: mmio.Mmio(packed struct(u32) {
    -            ///  Device speed
    -            DSPD: u2,
    -            ///  Non-zero-length status OUT handshake
    -            NZLSOHSK: u1,
    -            reserved4: u1,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Periodic frame interval
    -            PFIVL: u2,
    -            padding: u19,
    -        }),
    -        ///  OTG_FS device control register (OTG_FS_DCTL)
    -        FS_DCTL: mmio.Mmio(packed struct(u32) {
    -            ///  Remote wakeup signaling
    -            RWUSIG: u1,
    -            ///  Soft disconnect
    -            SDIS: u1,
    -            ///  Global IN NAK status
    -            GINSTS: u1,
    -            ///  Global OUT NAK status
    -            GONSTS: u1,
    -            ///  Test control
    -            TCTL: u3,
    -            ///  Set global IN NAK
    -            SGINAK: u1,
    -            ///  Clear global IN NAK
    -            CGINAK: u1,
    -            ///  Set global OUT NAK
    -            SGONAK: u1,
    -            ///  Clear global OUT NAK
    -            CGONAK: u1,
    -            ///  Power-on programming done
    -            POPRGDNE: u1,
    -            padding: u20,
    -        }),
    -        ///  OTG_FS device status register (OTG_FS_DSTS)
    -        FS_DSTS: mmio.Mmio(packed struct(u32) {
    -            ///  Suspend status
    -            SUSPSTS: u1,
    -            ///  Enumerated speed
    -            ENUMSPD: u2,
    -            ///  Erratic error
    -            EERR: u1,
    -            reserved8: u4,
    -            ///  Frame number of the received SOF
    -            FNSOF: u14,
    -            padding: u10,
    -        }),
    -        reserved16: [4]u8,
    -        ///  OTG_FS device IN endpoint common interrupt mask register (OTG_FS_DIEPMSK)
    -        FS_DIEPMSK: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt mask
    -            XFRCM: u1,
    -            ///  Endpoint disabled interrupt mask
    -            EPDM: u1,
    -            reserved3: u1,
    -            ///  Timeout condition mask (Non-isochronous endpoints)
    -            TOM: u1,
    -            ///  IN token received when TxFIFO empty mask
    -            ITTXFEMSK: u1,
    -            ///  IN token received with EP mismatch mask
    -            INEPNMM: u1,
    -            ///  IN endpoint NAK effective mask
    -            INEPNEM: u1,
    -            padding: u25,
    -        }),
    -        ///  OTG_FS device OUT endpoint common interrupt mask register (OTG_FS_DOEPMSK)
    -        FS_DOEPMSK: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed interrupt mask
    -            XFRCM: u1,
    -            ///  Endpoint disabled interrupt mask
    -            EPDM: u1,
    -            reserved3: u1,
    -            ///  SETUP phase done mask
    -            STUPM: u1,
    -            ///  OUT token received when endpoint disabled mask
    -            OTEPDM: u1,
    -            padding: u27,
    -        }),
    -        ///  OTG_FS device all endpoints interrupt register (OTG_FS_DAINT)
    -        FS_DAINT: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint interrupt bits
    -            IEPINT: u16,
    -            ///  OUT endpoint interrupt bits
    -            OEPINT: u16,
    -        }),
    -        ///  OTG_FS all endpoints interrupt mask register (OTG_FS_DAINTMSK)
    -        FS_DAINTMSK: mmio.Mmio(packed struct(u32) {
    -            ///  IN EP interrupt mask bits
    -            IEPM: u16,
    -            ///  OUT endpoint interrupt bits
    -            OEPINT: u16,
    -        }),
    -        reserved40: [8]u8,
    -        ///  OTG_FS device VBUS discharge time register
    -        DVBUSDIS: mmio.Mmio(packed struct(u32) {
    -            ///  Device VBUS discharge time
    -            VBUSDT: u16,
    -            padding: u16,
    -        }),
    -        ///  OTG_FS device VBUS pulsing time register
    -        DVBUSPULSE: mmio.Mmio(packed struct(u32) {
    -            ///  Device VBUS pulsing time
    -            DVBUSP: u12,
    -            padding: u20,
    -        }),
    -        reserved52: [4]u8,
    -        ///  OTG_FS device IN endpoint FIFO empty interrupt mask register
    -        DIEPEMPMSK: mmio.Mmio(packed struct(u32) {
    -            ///  IN EP Tx FIFO empty interrupt mask bits
    -            INEPTXFEM: u16,
    -            padding: u16,
    -        }),
    -        reserved256: [200]u8,
    -        ///  OTG_FS device control IN endpoint 0 control register (OTG_FS_DIEPCTL0)
    -        FS_DIEPCTL0: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u2,
    -            reserved15: u13,
    -            ///  USB active endpoint
    -            USBAEP: u1,
    -            reserved17: u1,
    -            ///  NAK status
    -            NAKSTS: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  STALL handshake
    -            STALL: u1,
    -            ///  TxFIFO number
    -            TXFNUM: u4,
    -            ///  Clear NAK
    -            CNAK: u1,
    -            ///  Set NAK
    -            SNAK: u1,
    -            reserved30: u2,
    -            ///  Endpoint disable
    -            EPDIS: u1,
    -            ///  Endpoint enable
    -            EPENA: u1,
    -        }),
    -        reserved264: [4]u8,
    -        ///  device endpoint-x interrupt register
    -        DIEPINT0: mmio.Mmio(packed struct(u32) {
    -            ///  XFRC
    -            XFRC: u1,
    -            ///  EPDISD
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  TOC
    -            TOC: u1,
    -            ///  ITTXFE
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  INEPNE
    -            INEPNE: u1,
    -            ///  TXFE
    -            TXFE: u1,
    -            padding: u24,
    -        }),
    -        reserved272: [4]u8,
    -        ///  device endpoint-0 transfer size register
    -        DIEPTSIZ0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u7,
    -            reserved19: u12,
    -            ///  Packet count
    -            PKTCNT: u2,
    -            padding: u11,
    -        }),
    -        reserved280: [4]u8,
    -        ///  OTG_FS device IN endpoint transmit FIFO status register
    -        DTXFSTS0: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint TxFIFO space available
    -            INEPTFSAV: u16,
    -            padding: u16,
    -        }),
    -        reserved288: [4]u8,
    -        ///  OTG device endpoint-1 control register
    -        DIEPCTL1: mmio.Mmio(packed struct(u32) {
    -            ///  MPSIZ
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USBAEP
    -            USBAEP: u1,
    -            ///  EONUM/DPID
    -            EONUM_DPID: u1,
    -            ///  NAKSTS
    -            NAKSTS: u1,
    -            ///  EPTYP
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  Stall
    -            Stall: u1,
    -            ///  TXFNUM
    -            TXFNUM: u4,
    -            ///  CNAK
    -            CNAK: u1,
    -            ///  SNAK
    -            SNAK: u1,
    -            ///  SD0PID/SEVNFRM
    -            SD0PID_SEVNFRM: u1,
    -            ///  SODDFRM/SD1PID
    -            SODDFRM_SD1PID: u1,
    -            ///  EPDIS
    -            EPDIS: u1,
    -            ///  EPENA
    -            EPENA: u1,
    -        }),
    -        reserved296: [4]u8,
    -        ///  device endpoint-1 interrupt register
    -        DIEPINT1: mmio.Mmio(packed struct(u32) {
    -            ///  XFRC
    -            XFRC: u1,
    -            ///  EPDISD
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  TOC
    -            TOC: u1,
    -            ///  ITTXFE
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  INEPNE
    -            INEPNE: u1,
    -            ///  TXFE
    -            TXFE: u1,
    -            padding: u24,
    -        }),
    -        reserved304: [4]u8,
    -        ///  device endpoint-1 transfer size register
    -        DIEPTSIZ1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Multi count
    -            MCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved312: [4]u8,
    -        ///  OTG_FS device IN endpoint transmit FIFO status register
    -        DTXFSTS1: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint TxFIFO space available
    -            INEPTFSAV: u16,
    -            padding: u16,
    -        }),
    -        reserved320: [4]u8,
    -        ///  OTG device endpoint-2 control register
    -        DIEPCTL2: mmio.Mmio(packed struct(u32) {
    -            ///  MPSIZ
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USBAEP
    -            USBAEP: u1,
    -            ///  EONUM/DPID
    -            EONUM_DPID: u1,
    -            ///  NAKSTS
    -            NAKSTS: u1,
    -            ///  EPTYP
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  Stall
    -            Stall: u1,
    -            ///  TXFNUM
    -            TXFNUM: u4,
    -            ///  CNAK
    -            CNAK: u1,
    -            ///  SNAK
    -            SNAK: u1,
    -            ///  SD0PID/SEVNFRM
    -            SD0PID_SEVNFRM: u1,
    -            ///  SODDFRM
    -            SODDFRM: u1,
    -            ///  EPDIS
    -            EPDIS: u1,
    -            ///  EPENA
    -            EPENA: u1,
    -        }),
    -        reserved328: [4]u8,
    -        ///  device endpoint-2 interrupt register
    -        DIEPINT2: mmio.Mmio(packed struct(u32) {
    -            ///  XFRC
    -            XFRC: u1,
    -            ///  EPDISD
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  TOC
    -            TOC: u1,
    -            ///  ITTXFE
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  INEPNE
    -            INEPNE: u1,
    -            ///  TXFE
    -            TXFE: u1,
    -            padding: u24,
    -        }),
    -        reserved336: [4]u8,
    -        ///  device endpoint-2 transfer size register
    -        DIEPTSIZ2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Multi count
    -            MCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved344: [4]u8,
    -        ///  OTG_FS device IN endpoint transmit FIFO status register
    -        DTXFSTS2: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint TxFIFO space available
    -            INEPTFSAV: u16,
    -            padding: u16,
    -        }),
    -        reserved352: [4]u8,
    -        ///  OTG device endpoint-3 control register
    -        DIEPCTL3: mmio.Mmio(packed struct(u32) {
    -            ///  MPSIZ
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USBAEP
    -            USBAEP: u1,
    -            ///  EONUM/DPID
    -            EONUM_DPID: u1,
    -            ///  NAKSTS
    -            NAKSTS: u1,
    -            ///  EPTYP
    -            EPTYP: u2,
    -            reserved21: u1,
    -            ///  Stall
    -            Stall: u1,
    -            ///  TXFNUM
    -            TXFNUM: u4,
    -            ///  CNAK
    -            CNAK: u1,
    -            ///  SNAK
    -            SNAK: u1,
    -            ///  SD0PID/SEVNFRM
    -            SD0PID_SEVNFRM: u1,
    -            ///  SODDFRM
    -            SODDFRM: u1,
    -            ///  EPDIS
    -            EPDIS: u1,
    -            ///  EPENA
    -            EPENA: u1,
    -        }),
    -        reserved360: [4]u8,
    -        ///  device endpoint-3 interrupt register
    -        DIEPINT3: mmio.Mmio(packed struct(u32) {
    -            ///  XFRC
    -            XFRC: u1,
    -            ///  EPDISD
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  TOC
    -            TOC: u1,
    -            ///  ITTXFE
    -            ITTXFE: u1,
    -            reserved6: u1,
    -            ///  INEPNE
    -            INEPNE: u1,
    -            ///  TXFE
    -            TXFE: u1,
    -            padding: u24,
    -        }),
    -        reserved368: [4]u8,
    -        ///  device endpoint-3 transfer size register
    -        DIEPTSIZ3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Multi count
    -            MCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved376: [4]u8,
    -        ///  OTG_FS device IN endpoint transmit FIFO status register
    -        DTXFSTS3: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint TxFIFO space available
    -            INEPTFSAV: u16,
    -            padding: u16,
    -        }),
    -        reserved768: [388]u8,
    -        ///  device endpoint-0 control register
    -        DOEPCTL0: mmio.Mmio(packed struct(u32) {
    -            ///  MPSIZ
    -            MPSIZ: u2,
    -            reserved15: u13,
    -            ///  USBAEP
    -            USBAEP: u1,
    -            reserved17: u1,
    -            ///  NAKSTS
    -            NAKSTS: u1,
    -            ///  EPTYP
    -            EPTYP: u2,
    -            ///  SNPM
    -            SNPM: u1,
    -            ///  Stall
    -            Stall: u1,
    -            reserved26: u4,
    -            ///  CNAK
    -            CNAK: u1,
    -            ///  SNAK
    -            SNAK: u1,
    -            reserved30: u2,
    -            ///  EPDIS
    -            EPDIS: u1,
    -            ///  EPENA
    -            EPENA: u1,
    -        }),
    -        reserved776: [4]u8,
    -        ///  device endpoint-0 interrupt register
    -        DOEPINT0: mmio.Mmio(packed struct(u32) {
    -            ///  XFRC
    -            XFRC: u1,
    -            ///  EPDISD
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  STUP
    -            STUP: u1,
    -            ///  OTEPDIS
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  B2BSTUP
    -            B2BSTUP: u1,
    -            padding: u25,
    -        }),
    -        reserved784: [4]u8,
    -        ///  device OUT endpoint-0 transfer size register
    -        DOEPTSIZ0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u7,
    -            reserved19: u12,
    -            ///  Packet count
    -            PKTCNT: u1,
    -            reserved29: u9,
    -            ///  SETUP packet count
    -            STUPCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved800: [12]u8,
    -        ///  device endpoint-1 control register
    -        DOEPCTL1: mmio.Mmio(packed struct(u32) {
    -            ///  MPSIZ
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USBAEP
    -            USBAEP: u1,
    -            ///  EONUM/DPID
    -            EONUM_DPID: u1,
    -            ///  NAKSTS
    -            NAKSTS: u1,
    -            ///  EPTYP
    -            EPTYP: u2,
    -            ///  SNPM
    -            SNPM: u1,
    -            ///  Stall
    -            Stall: u1,
    -            reserved26: u4,
    -            ///  CNAK
    -            CNAK: u1,
    -            ///  SNAK
    -            SNAK: u1,
    -            ///  SD0PID/SEVNFRM
    -            SD0PID_SEVNFRM: u1,
    -            ///  SODDFRM
    -            SODDFRM: u1,
    -            ///  EPDIS
    -            EPDIS: u1,
    -            ///  EPENA
    -            EPENA: u1,
    -        }),
    -        reserved808: [4]u8,
    -        ///  device endpoint-1 interrupt register
    -        DOEPINT1: mmio.Mmio(packed struct(u32) {
    -            ///  XFRC
    -            XFRC: u1,
    -            ///  EPDISD
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  STUP
    -            STUP: u1,
    -            ///  OTEPDIS
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  B2BSTUP
    -            B2BSTUP: u1,
    -            padding: u25,
    -        }),
    -        reserved816: [4]u8,
    -        ///  device OUT endpoint-1 transfer size register
    -        DOEPTSIZ1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Received data PID/SETUP packet count
    -            RXDPID_STUPCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved832: [12]u8,
    -        ///  device endpoint-2 control register
    -        DOEPCTL2: mmio.Mmio(packed struct(u32) {
    -            ///  MPSIZ
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USBAEP
    -            USBAEP: u1,
    -            ///  EONUM/DPID
    -            EONUM_DPID: u1,
    -            ///  NAKSTS
    -            NAKSTS: u1,
    -            ///  EPTYP
    -            EPTYP: u2,
    -            ///  SNPM
    -            SNPM: u1,
    -            ///  Stall
    -            Stall: u1,
    -            reserved26: u4,
    -            ///  CNAK
    -            CNAK: u1,
    -            ///  SNAK
    -            SNAK: u1,
    -            ///  SD0PID/SEVNFRM
    -            SD0PID_SEVNFRM: u1,
    -            ///  SODDFRM
    -            SODDFRM: u1,
    -            ///  EPDIS
    -            EPDIS: u1,
    -            ///  EPENA
    -            EPENA: u1,
    -        }),
    -        reserved840: [4]u8,
    -        ///  device endpoint-2 interrupt register
    -        DOEPINT2: mmio.Mmio(packed struct(u32) {
    -            ///  XFRC
    -            XFRC: u1,
    -            ///  EPDISD
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  STUP
    -            STUP: u1,
    -            ///  OTEPDIS
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  B2BSTUP
    -            B2BSTUP: u1,
    -            padding: u25,
    -        }),
    -        reserved848: [4]u8,
    -        ///  device OUT endpoint-2 transfer size register
    -        DOEPTSIZ2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Received data PID/SETUP packet count
    -            RXDPID_STUPCNT: u2,
    -            padding: u1,
    -        }),
    -        reserved864: [12]u8,
    -        ///  device endpoint-3 control register
    -        DOEPCTL3: mmio.Mmio(packed struct(u32) {
    -            ///  MPSIZ
    -            MPSIZ: u11,
    -            reserved15: u4,
    -            ///  USBAEP
    -            USBAEP: u1,
    -            ///  EONUM/DPID
    -            EONUM_DPID: u1,
    -            ///  NAKSTS
    -            NAKSTS: u1,
    -            ///  EPTYP
    -            EPTYP: u2,
    -            ///  SNPM
    -            SNPM: u1,
    -            ///  Stall
    -            Stall: u1,
    -            reserved26: u4,
    -            ///  CNAK
    -            CNAK: u1,
    -            ///  SNAK
    -            SNAK: u1,
    -            ///  SD0PID/SEVNFRM
    -            SD0PID_SEVNFRM: u1,
    -            ///  SODDFRM
    -            SODDFRM: u1,
    -            ///  EPDIS
    -            EPDIS: u1,
    -            ///  EPENA
    -            EPENA: u1,
    -        }),
    -        reserved872: [4]u8,
    -        ///  device endpoint-3 interrupt register
    -        DOEPINT3: mmio.Mmio(packed struct(u32) {
    -            ///  XFRC
    -            XFRC: u1,
    -            ///  EPDISD
    -            EPDISD: u1,
    -            reserved3: u1,
    -            ///  STUP
    -            STUP: u1,
    -            ///  OTEPDIS
    -            OTEPDIS: u1,
    -            reserved6: u1,
    -            ///  B2BSTUP
    -            B2BSTUP: u1,
    -            padding: u25,
    -        }),
    -        reserved880: [4]u8,
    -        ///  device OUT endpoint-3 transfer size register
    -        DOEPTSIZ3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Received data PID/SETUP packet count
    -            RXDPID_STUPCNT: u2,
    -            padding: u1,
    -        }),
    -    };
    -
    -    ///  Common ADC registers
    -    pub const C_ADC = extern struct {
    -        ///  ADC Common status register
    -        CSR: mmio.Mmio(packed struct(u32) {
    -            ///  Analog watchdog flag of ADC 1
    -            AWD1: u1,
    -            ///  End of conversion of ADC 1
    -            EOC1: u1,
    -            ///  Injected channel end of conversion of ADC 1
    -            JEOC1: u1,
    -            ///  Injected channel Start flag of ADC 1
    -            JSTRT1: u1,
    -            ///  Regular channel Start flag of ADC 1
    -            STRT1: u1,
    -            ///  Overrun flag of ADC 1
    -            OVR1: u1,
    -            reserved8: u2,
    -            ///  Analog watchdog flag of ADC 2
    -            AWD2: u1,
    -            ///  End of conversion of ADC 2
    -            EOC2: u1,
    -            ///  Injected channel end of conversion of ADC 2
    -            JEOC2: u1,
    -            ///  Injected channel Start flag of ADC 2
    -            JSTRT2: u1,
    -            ///  Regular channel Start flag of ADC 2
    -            STRT2: u1,
    -            ///  Overrun flag of ADC 2
    -            OVR2: u1,
    -            reserved16: u2,
    -            ///  Analog watchdog flag of ADC 3
    -            AWD3: u1,
    -            ///  End of conversion of ADC 3
    -            EOC3: u1,
    -            ///  Injected channel end of conversion of ADC 3
    -            JEOC3: u1,
    -            ///  Injected channel Start flag of ADC 3
    -            JSTRT3: u1,
    -            ///  Regular channel Start flag of ADC 3
    -            STRT3: u1,
    -            ///  Overrun flag of ADC3
    -            OVR3: u1,
    -            padding: u10,
    -        }),
    -        ///  ADC common control register
    -        CCR: mmio.Mmio(packed struct(u32) {
    -            ///  Multi ADC mode selection
    -            MULT: u5,
    -            reserved8: u3,
    -            ///  Delay between 2 sampling phases
    -            DELAY: u4,
    -            reserved13: u1,
    -            ///  DMA disable selection for multi-ADC mode
    -            DDS: u1,
    -            ///  Direct memory access mode for multi ADC mode
    -            DMA: u2,
    -            ///  ADC prescaler
    -            ADCPRE: u2,
    -            reserved22: u4,
    -            ///  VBAT enable
    -            VBATE: u1,
    -            ///  Temperature sensor and VREFINT enable
    -            TSVREFE: u1,
    -            padding: u8,
    -        }),
    -        ///  ADC common regular data register for dual and triple modes
    -        CDR: mmio.Mmio(packed struct(u32) {
    -            ///  1st data item of a pair of regular conversions
    -            DATA1: u16,
    -            ///  2nd data item of a pair of regular conversions
    -            DATA2: u16,
    -        }),
    -    };
    -
    -    ///  Advanced-timers
    -    pub const TIM1 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            ///  One-pulse mode
    -            OPM: u1,
    -            ///  Direction
    -            DIR: u1,
    -            ///  Center-aligned mode selection
    -            CMS: u2,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            ///  Clock division
    -            CKD: u2,
    -            padding: u22,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/compare preloaded control
    -            CCPC: u1,
    -            reserved2: u1,
    -            ///  Capture/compare control update selection
    -            CCUS: u1,
    -            ///  Capture/compare DMA selection
    -            CCDS: u1,
    -            ///  Master mode selection
    -            MMS: u3,
    -            ///  TI1 selection
    -            TI1S: u1,
    -            ///  Output Idle state 1
    -            OIS1: u1,
    -            ///  Output Idle state 1
    -            OIS1N: u1,
    -            ///  Output Idle state 2
    -            OIS2: u1,
    -            ///  Output Idle state 2
    -            OIS2N: u1,
    -            ///  Output Idle state 3
    -            OIS3: u1,
    -            ///  Output Idle state 3
    -            OIS3N: u1,
    -            ///  Output Idle state 4
    -            OIS4: u1,
    -            padding: u17,
    -        }),
    -        ///  slave mode control register
    -        SMCR: mmio.Mmio(packed struct(u32) {
    -            ///  Slave mode selection
    -            SMS: u3,
    -            reserved4: u1,
    -            ///  Trigger selection
    -            TS: u3,
    -            ///  Master/Slave mode
    -            MSM: u1,
    -            ///  External trigger filter
    -            ETF: u4,
    -            ///  External trigger prescaler
    -            ETPS: u2,
    -            ///  External clock enable
    -            ECE: u1,
    -            ///  External trigger polarity
    -            ETP: u1,
    -            padding: u16,
    -        }),
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            ///  Capture/Compare 1 interrupt enable
    -            CC1IE: u1,
    -            ///  Capture/Compare 2 interrupt enable
    -            CC2IE: u1,
    -            ///  Capture/Compare 3 interrupt enable
    -            CC3IE: u1,
    -            ///  Capture/Compare 4 interrupt enable
    -            CC4IE: u1,
    -            ///  COM interrupt enable
    -            COMIE: u1,
    -            ///  Trigger interrupt enable
    -            TIE: u1,
    -            ///  Break interrupt enable
    -            BIE: u1,
    -            ///  Update DMA request enable
    -            UDE: u1,
    -            ///  Capture/Compare 1 DMA request enable
    -            CC1DE: u1,
    -            ///  Capture/Compare 2 DMA request enable
    -            CC2DE: u1,
    -            ///  Capture/Compare 3 DMA request enable
    -            CC3DE: u1,
    -            ///  Capture/Compare 4 DMA request enable
    -            CC4DE: u1,
    -            ///  COM DMA request enable
    -            COMDE: u1,
    -            ///  Trigger DMA request enable
    -            TDE: u1,
    -            padding: u17,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            ///  Capture/compare 1 interrupt flag
    -            CC1IF: u1,
    -            ///  Capture/Compare 2 interrupt flag
    -            CC2IF: u1,
    -            ///  Capture/Compare 3 interrupt flag
    -            CC3IF: u1,
    -            ///  Capture/Compare 4 interrupt flag
    -            CC4IF: u1,
    -            ///  COM interrupt flag
    -            COMIF: u1,
    -            ///  Trigger interrupt flag
    -            TIF: u1,
    -            ///  Break interrupt flag
    -            BIF: u1,
    -            reserved9: u1,
    -            ///  Capture/Compare 1 overcapture flag
    -            CC1OF: u1,
    -            ///  Capture/compare 2 overcapture flag
    -            CC2OF: u1,
    -            ///  Capture/Compare 3 overcapture flag
    -            CC3OF: u1,
    -            ///  Capture/Compare 4 overcapture flag
    -            CC4OF: u1,
    -            padding: u19,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            ///  Capture/compare 1 generation
    -            CC1G: u1,
    -            ///  Capture/compare 2 generation
    -            CC2G: u1,
    -            ///  Capture/compare 3 generation
    -            CC3G: u1,
    -            ///  Capture/compare 4 generation
    -            CC4G: u1,
    -            ///  Capture/Compare control update generation
    -            COMG: u1,
    -            ///  Trigger generation
    -            TG: u1,
    -            ///  Break generation
    -            BG: u1,
    -            padding: u24,
    -        }),
    -        ///  capture/compare mode register 1 (output mode)
    -        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 selection
    -            CC1S: u2,
    -            ///  Output Compare 1 fast enable
    -            OC1FE: u1,
    -            ///  Output Compare 1 preload enable
    -            OC1PE: u1,
    -            ///  Output Compare 1 mode
    -            OC1M: u3,
    -            ///  Output Compare 1 clear enable
    -            OC1CE: u1,
    -            ///  Capture/Compare 2 selection
    -            CC2S: u2,
    -            ///  Output Compare 2 fast enable
    -            OC2FE: u1,
    -            ///  Output Compare 2 preload enable
    -            OC2PE: u1,
    -            ///  Output Compare 2 mode
    -            OC2M: u3,
    -            ///  Output Compare 2 clear enable
    -            OC2CE: u1,
    -            padding: u16,
    -        }),
    -        ///  capture/compare mode register 2 (output mode)
    -        CCMR2_Output: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 3 selection
    -            CC3S: u2,
    -            ///  Output compare 3 fast enable
    -            OC3FE: u1,
    -            ///  Output compare 3 preload enable
    -            OC3PE: u1,
    -            ///  Output compare 3 mode
    -            OC3M: u3,
    -            ///  Output compare 3 clear enable
    -            OC3CE: u1,
    -            ///  Capture/Compare 4 selection
    -            CC4S: u2,
    -            ///  Output compare 4 fast enable
    -            OC4FE: u1,
    -            ///  Output compare 4 preload enable
    -            OC4PE: u1,
    -            ///  Output compare 4 mode
    -            OC4M: u3,
    -            ///  Output compare 4 clear enable
    -            OC4CE: u1,
    -            padding: u16,
    -        }),
    -        ///  capture/compare enable register
    -        CCER: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 output enable
    -            CC1E: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1P: u1,
    -            ///  Capture/Compare 1 complementary output enable
    -            CC1NE: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1NP: u1,
    -            ///  Capture/Compare 2 output enable
    -            CC2E: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2P: u1,
    -            ///  Capture/Compare 2 complementary output enable
    -            CC2NE: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2NP: u1,
    -            ///  Capture/Compare 3 output enable
    -            CC3E: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC3P: u1,
    -            ///  Capture/Compare 3 complementary output enable
    -            CC3NE: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC3NP: u1,
    -            ///  Capture/Compare 4 output enable
    -            CC4E: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC4P: u1,
    -            padding: u18,
    -        }),
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  counter value
    -            CNT: u16,
    -            padding: u16,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Auto-reload value
    -            ARR: u16,
    -            padding: u16,
    -        }),
    -        ///  repetition counter register
    -        RCR: mmio.Mmio(packed struct(u32) {
    -            ///  Repetition counter value
    -            REP: u8,
    -            padding: u24,
    -        }),
    -        ///  capture/compare register 1
    -        CCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 value
    -            CCR1: u16,
    -            padding: u16,
    -        }),
    -        ///  capture/compare register 2
    -        CCR2: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 2 value
    -            CCR2: u16,
    -            padding: u16,
    -        }),
    -        ///  capture/compare register 3
    -        CCR3: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare value
    -            CCR3: u16,
    -            padding: u16,
    -        }),
    -        ///  capture/compare register 4
    -        CCR4: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare value
    -            CCR4: u16,
    -            padding: u16,
    -        }),
    -        ///  break and dead-time register
    -        BDTR: mmio.Mmio(packed struct(u32) {
    -            ///  Dead-time generator setup
    -            DTG: u8,
    -            ///  Lock configuration
    -            LOCK: u2,
    -            ///  Off-state selection for Idle mode
    -            OSSI: u1,
    -            ///  Off-state selection for Run mode
    -            OSSR: u1,
    -            ///  Break enable
    -            BKE: u1,
    -            ///  Break polarity
    -            BKP: u1,
    -            ///  Automatic output enable
    -            AOE: u1,
    -            ///  Main output enable
    -            MOE: u1,
    -            padding: u16,
    -        }),
    -        ///  DMA control register
    -        DCR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA base address
    -            DBA: u5,
    -            reserved8: u3,
    -            ///  DMA burst length
    -            DBL: u5,
    -            padding: u19,
    -        }),
    -        ///  DMA address for full transfer
    -        DMAR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA register for burst accesses
    -            DMAB: u16,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  USB on the go full speed
    -    pub const OTG_FS_HOST = extern struct {
    -        ///  OTG_FS host configuration register (OTG_FS_HCFG)
    -        FS_HCFG: mmio.Mmio(packed struct(u32) {
    -            ///  FS/LS PHY clock select
    -            FSLSPCS: u2,
    -            ///  FS- and LS-only support
    -            FSLSS: u1,
    -            padding: u29,
    -        }),
    -        ///  OTG_FS Host frame interval register
    -        HFIR: mmio.Mmio(packed struct(u32) {
    -            ///  Frame interval
    -            FRIVL: u16,
    -            padding: u16,
    -        }),
    -        ///  OTG_FS host frame number/frame time remaining register (OTG_FS_HFNUM)
    -        FS_HFNUM: mmio.Mmio(packed struct(u32) {
    -            ///  Frame number
    -            FRNUM: u16,
    -            ///  Frame time remaining
    -            FTREM: u16,
    -        }),
    -        reserved16: [4]u8,
    -        ///  OTG_FS_Host periodic transmit FIFO/queue status register (OTG_FS_HPTXSTS)
    -        FS_HPTXSTS: mmio.Mmio(packed struct(u32) {
    -            ///  Periodic transmit data FIFO space available
    -            PTXFSAVL: u16,
    -            ///  Periodic transmit request queue space available
    -            PTXQSAV: u8,
    -            ///  Top of the periodic transmit request queue
    -            PTXQTOP: u8,
    -        }),
    -        ///  OTG_FS Host all channels interrupt register
    -        HAINT: mmio.Mmio(packed struct(u32) {
    -            ///  Channel interrupts
    -            HAINT: u16,
    -            padding: u16,
    -        }),
    -        ///  OTG_FS host all channels interrupt mask register
    -        HAINTMSK: mmio.Mmio(packed struct(u32) {
    -            ///  Channel interrupt mask
    -            HAINTM: u16,
    -            padding: u16,
    -        }),
    -        reserved64: [36]u8,
    -        ///  OTG_FS host port control and status register (OTG_FS_HPRT)
    -        FS_HPRT: mmio.Mmio(packed struct(u32) {
    -            ///  Port connect status
    -            PCSTS: u1,
    -            ///  Port connect detected
    -            PCDET: u1,
    -            ///  Port enable
    -            PENA: u1,
    -            ///  Port enable/disable change
    -            PENCHNG: u1,
    -            ///  Port overcurrent active
    -            POCA: u1,
    -            ///  Port overcurrent change
    -            POCCHNG: u1,
    -            ///  Port resume
    -            PRES: u1,
    -            ///  Port suspend
    -            PSUSP: u1,
    -            ///  Port reset
    -            PRST: u1,
    -            reserved10: u1,
    -            ///  Port line status
    -            PLSTS: u2,
    -            ///  Port power
    -            PPWR: u1,
    -            ///  Port test control
    -            PTCTL: u4,
    -            ///  Port speed
    -            PSPD: u2,
    -            padding: u13,
    -        }),
    -        reserved256: [188]u8,
    -        ///  OTG_FS host channel-0 characteristics register (OTG_FS_HCCHAR0)
    -        FS_HCCHAR0: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multicount
    -            MCNT: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        reserved264: [4]u8,
    -        ///  OTG_FS host channel-0 interrupt register (OTG_FS_HCINT0)
    -        FS_HCINT0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            reserved7: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-0 mask register (OTG_FS_HCINTMSK0)
    -        FS_HCINTMSK0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-0 transfer size register
    -        FS_HCTSIZ0: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        reserved288: [12]u8,
    -        ///  OTG_FS host channel-1 characteristics register (OTG_FS_HCCHAR1)
    -        FS_HCCHAR1: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multicount
    -            MCNT: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        reserved296: [4]u8,
    -        ///  OTG_FS host channel-1 interrupt register (OTG_FS_HCINT1)
    -        FS_HCINT1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            reserved7: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-1 mask register (OTG_FS_HCINTMSK1)
    -        FS_HCINTMSK1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-1 transfer size register
    -        FS_HCTSIZ1: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        reserved320: [12]u8,
    -        ///  OTG_FS host channel-2 characteristics register (OTG_FS_HCCHAR2)
    -        FS_HCCHAR2: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multicount
    -            MCNT: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        reserved328: [4]u8,
    -        ///  OTG_FS host channel-2 interrupt register (OTG_FS_HCINT2)
    -        FS_HCINT2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            reserved7: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-2 mask register (OTG_FS_HCINTMSK2)
    -        FS_HCINTMSK2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-2 transfer size register
    -        FS_HCTSIZ2: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        reserved352: [12]u8,
    -        ///  OTG_FS host channel-3 characteristics register (OTG_FS_HCCHAR3)
    -        FS_HCCHAR3: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multicount
    -            MCNT: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        reserved360: [4]u8,
    -        ///  OTG_FS host channel-3 interrupt register (OTG_FS_HCINT3)
    -        FS_HCINT3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            reserved7: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-3 mask register (OTG_FS_HCINTMSK3)
    -        FS_HCINTMSK3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-3 transfer size register
    -        FS_HCTSIZ3: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        reserved384: [12]u8,
    -        ///  OTG_FS host channel-4 characteristics register (OTG_FS_HCCHAR4)
    -        FS_HCCHAR4: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multicount
    -            MCNT: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        reserved392: [4]u8,
    -        ///  OTG_FS host channel-4 interrupt register (OTG_FS_HCINT4)
    -        FS_HCINT4: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            reserved7: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-4 mask register (OTG_FS_HCINTMSK4)
    -        FS_HCINTMSK4: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-x transfer size register
    -        FS_HCTSIZ4: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        reserved416: [12]u8,
    -        ///  OTG_FS host channel-5 characteristics register (OTG_FS_HCCHAR5)
    -        FS_HCCHAR5: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multicount
    -            MCNT: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        reserved424: [4]u8,
    -        ///  OTG_FS host channel-5 interrupt register (OTG_FS_HCINT5)
    -        FS_HCINT5: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            reserved7: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-5 mask register (OTG_FS_HCINTMSK5)
    -        FS_HCINTMSK5: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-5 transfer size register
    -        FS_HCTSIZ5: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        reserved448: [12]u8,
    -        ///  OTG_FS host channel-6 characteristics register (OTG_FS_HCCHAR6)
    -        FS_HCCHAR6: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multicount
    -            MCNT: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        reserved456: [4]u8,
    -        ///  OTG_FS host channel-6 interrupt register (OTG_FS_HCINT6)
    -        FS_HCINT6: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            reserved7: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-6 mask register (OTG_FS_HCINTMSK6)
    -        FS_HCINTMSK6: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-6 transfer size register
    -        FS_HCTSIZ6: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -        reserved480: [12]u8,
    -        ///  OTG_FS host channel-7 characteristics register (OTG_FS_HCCHAR7)
    -        FS_HCCHAR7: mmio.Mmio(packed struct(u32) {
    -            ///  Maximum packet size
    -            MPSIZ: u11,
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Endpoint direction
    -            EPDIR: u1,
    -            reserved17: u1,
    -            ///  Low-speed device
    -            LSDEV: u1,
    -            ///  Endpoint type
    -            EPTYP: u2,
    -            ///  Multicount
    -            MCNT: u2,
    -            ///  Device address
    -            DAD: u7,
    -            ///  Odd frame
    -            ODDFRM: u1,
    -            ///  Channel disable
    -            CHDIS: u1,
    -            ///  Channel enable
    -            CHENA: u1,
    -        }),
    -        reserved488: [4]u8,
    -        ///  OTG_FS host channel-7 interrupt register (OTG_FS_HCINT7)
    -        FS_HCINT7: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed
    -            XFRC: u1,
    -            ///  Channel halted
    -            CHH: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt
    -            STALL: u1,
    -            ///  NAK response received interrupt
    -            NAK: u1,
    -            ///  ACK response received/transmitted interrupt
    -            ACK: u1,
    -            reserved7: u1,
    -            ///  Transaction error
    -            TXERR: u1,
    -            ///  Babble error
    -            BBERR: u1,
    -            ///  Frame overrun
    -            FRMOR: u1,
    -            ///  Data toggle error
    -            DTERR: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-7 mask register (OTG_FS_HCINTMSK7)
    -        FS_HCINTMSK7: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer completed mask
    -            XFRCM: u1,
    -            ///  Channel halted mask
    -            CHHM: u1,
    -            reserved3: u1,
    -            ///  STALL response received interrupt mask
    -            STALLM: u1,
    -            ///  NAK response received interrupt mask
    -            NAKM: u1,
    -            ///  ACK response received/transmitted interrupt mask
    -            ACKM: u1,
    -            ///  response received interrupt mask
    -            NYET: u1,
    -            ///  Transaction error mask
    -            TXERRM: u1,
    -            ///  Babble error mask
    -            BBERRM: u1,
    -            ///  Frame overrun mask
    -            FRMORM: u1,
    -            ///  Data toggle error mask
    -            DTERRM: u1,
    -            padding: u21,
    -        }),
    -        ///  OTG_FS host channel-7 transfer size register
    -        FS_HCTSIZ7: mmio.Mmio(packed struct(u32) {
    -            ///  Transfer size
    -            XFRSIZ: u19,
    -            ///  Packet count
    -            PKTCNT: u10,
    -            ///  Data PID
    -            DPID: u2,
    -            padding: u1,
    -        }),
    -    };
    -
    -    ///  General purpose timers
    -    pub const TIM2 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            ///  One-pulse mode
    -            OPM: u1,
    -            ///  Direction
    -            DIR: u1,
    -            ///  Center-aligned mode selection
    -            CMS: u2,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            ///  Clock division
    -            CKD: u2,
    -            padding: u22,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            reserved3: u3,
    -            ///  Capture/compare DMA selection
    -            CCDS: u1,
    -            ///  Master mode selection
    -            MMS: u3,
    -            ///  TI1 selection
    -            TI1S: u1,
    -            padding: u24,
    -        }),
    -        ///  slave mode control register
    -        SMCR: mmio.Mmio(packed struct(u32) {
    -            ///  Slave mode selection
    -            SMS: u3,
    -            reserved4: u1,
    -            ///  Trigger selection
    -            TS: u3,
    -            ///  Master/Slave mode
    -            MSM: u1,
    -            ///  External trigger filter
    -            ETF: u4,
    -            ///  External trigger prescaler
    -            ETPS: u2,
    -            ///  External clock enable
    -            ECE: u1,
    -            ///  External trigger polarity
    -            ETP: u1,
    -            padding: u16,
    -        }),
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            ///  Capture/Compare 1 interrupt enable
    -            CC1IE: u1,
    -            ///  Capture/Compare 2 interrupt enable
    -            CC2IE: u1,
    -            ///  Capture/Compare 3 interrupt enable
    -            CC3IE: u1,
    -            ///  Capture/Compare 4 interrupt enable
    -            CC4IE: u1,
    -            reserved6: u1,
    -            ///  Trigger interrupt enable
    -            TIE: u1,
    -            reserved8: u1,
    -            ///  Update DMA request enable
    -            UDE: u1,
    -            ///  Capture/Compare 1 DMA request enable
    -            CC1DE: u1,
    -            ///  Capture/Compare 2 DMA request enable
    -            CC2DE: u1,
    -            ///  Capture/Compare 3 DMA request enable
    -            CC3DE: u1,
    -            ///  Capture/Compare 4 DMA request enable
    -            CC4DE: u1,
    -            reserved14: u1,
    -            ///  Trigger DMA request enable
    -            TDE: u1,
    -            padding: u17,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            ///  Capture/compare 1 interrupt flag
    -            CC1IF: u1,
    -            ///  Capture/Compare 2 interrupt flag
    -            CC2IF: u1,
    -            ///  Capture/Compare 3 interrupt flag
    -            CC3IF: u1,
    -            ///  Capture/Compare 4 interrupt flag
    -            CC4IF: u1,
    -            reserved6: u1,
    -            ///  Trigger interrupt flag
    -            TIF: u1,
    -            reserved9: u2,
    -            ///  Capture/Compare 1 overcapture flag
    -            CC1OF: u1,
    -            ///  Capture/compare 2 overcapture flag
    -            CC2OF: u1,
    -            ///  Capture/Compare 3 overcapture flag
    -            CC3OF: u1,
    -            ///  Capture/Compare 4 overcapture flag
    -            CC4OF: u1,
    -            padding: u19,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            ///  Capture/compare 1 generation
    -            CC1G: u1,
    -            ///  Capture/compare 2 generation
    -            CC2G: u1,
    -            ///  Capture/compare 3 generation
    -            CC3G: u1,
    -            ///  Capture/compare 4 generation
    -            CC4G: u1,
    -            reserved6: u1,
    -            ///  Trigger generation
    -            TG: u1,
    -            padding: u25,
    -        }),
    -        ///  capture/compare mode register 1 (output mode)
    -        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    -            ///  CC1S
    -            CC1S: u2,
    -            ///  OC1FE
    -            OC1FE: u1,
    -            ///  OC1PE
    -            OC1PE: u1,
    -            ///  OC1M
    -            OC1M: u3,
    -            ///  OC1CE
    -            OC1CE: u1,
    -            ///  CC2S
    -            CC2S: u2,
    -            ///  OC2FE
    -            OC2FE: u1,
    -            ///  OC2PE
    -            OC2PE: u1,
    -            ///  OC2M
    -            OC2M: u3,
    -            ///  OC2CE
    -            OC2CE: u1,
    -            padding: u16,
    -        }),
    -        ///  capture/compare mode register 2 (output mode)
    -        CCMR2_Output: mmio.Mmio(packed struct(u32) {
    -            ///  CC3S
    -            CC3S: u2,
    -            ///  OC3FE
    -            OC3FE: u1,
    -            ///  OC3PE
    -            OC3PE: u1,
    -            ///  OC3M
    -            OC3M: u3,
    -            ///  OC3CE
    -            OC3CE: u1,
    -            ///  CC4S
    -            CC4S: u2,
    -            ///  OC4FE
    -            OC4FE: u1,
    -            ///  OC4PE
    -            OC4PE: u1,
    -            ///  OC4M
    -            OC4M: u3,
    -            ///  O24CE
    -            O24CE: u1,
    -            padding: u16,
    -        }),
    -        ///  capture/compare enable register
    -        CCER: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 output enable
    -            CC1E: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1P: u1,
    -            reserved3: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1NP: u1,
    -            ///  Capture/Compare 2 output enable
    -            CC2E: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2P: u1,
    -            reserved7: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2NP: u1,
    -            ///  Capture/Compare 3 output enable
    -            CC3E: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC3P: u1,
    -            reserved11: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC3NP: u1,
    -            ///  Capture/Compare 4 output enable
    -            CC4E: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC4P: u1,
    -            reserved15: u1,
    -            ///  Capture/Compare 4 output Polarity
    -            CC4NP: u1,
    -            padding: u16,
    -        }),
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  Low counter value
    -            CNT_L: u16,
    -            ///  High counter value
    -            CNT_H: u16,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Low Auto-reload value
    -            ARR_L: u16,
    -            ///  High Auto-reload value
    -            ARR_H: u16,
    -        }),
    -        reserved52: [4]u8,
    -        ///  capture/compare register 1
    -        CCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare 1 value
    -            CCR1_L: u16,
    -            ///  High Capture/Compare 1 value
    -            CCR1_H: u16,
    -        }),
    -        ///  capture/compare register 2
    -        CCR2: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare 2 value
    -            CCR2_L: u16,
    -            ///  High Capture/Compare 2 value
    -            CCR2_H: u16,
    -        }),
    -        ///  capture/compare register 3
    -        CCR3: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare value
    -            CCR3_L: u16,
    -            ///  High Capture/Compare value
    -            CCR3_H: u16,
    -        }),
    -        ///  capture/compare register 4
    -        CCR4: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare value
    -            CCR4_L: u16,
    -            ///  High Capture/Compare value
    -            CCR4_H: u16,
    -        }),
    -        reserved72: [4]u8,
    -        ///  DMA control register
    -        DCR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA base address
    -            DBA: u5,
    -            reserved8: u3,
    -            ///  DMA burst length
    -            DBL: u5,
    -            padding: u19,
    -        }),
    -        ///  DMA address for full transfer
    -        DMAR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA register for burst accesses
    -            DMAB: u16,
    -            padding: u16,
    -        }),
    -        ///  TIM5 option register
    -        OR: mmio.Mmio(packed struct(u32) {
    -            reserved10: u10,
    -            ///  Timer Input 4 remap
    -            ITR1_RMP: u2,
    -            padding: u20,
    -        }),
    -    };
    -
    -    ///  General purpose timers
    -    pub const TIM3 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            ///  One-pulse mode
    -            OPM: u1,
    -            ///  Direction
    -            DIR: u1,
    -            ///  Center-aligned mode selection
    -            CMS: u2,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            ///  Clock division
    -            CKD: u2,
    -            padding: u22,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            reserved3: u3,
    -            ///  Capture/compare DMA selection
    -            CCDS: u1,
    -            ///  Master mode selection
    -            MMS: u3,
    -            ///  TI1 selection
    -            TI1S: u1,
    -            padding: u24,
    -        }),
    -        ///  slave mode control register
    -        SMCR: mmio.Mmio(packed struct(u32) {
    -            ///  Slave mode selection
    -            SMS: u3,
    -            reserved4: u1,
    -            ///  Trigger selection
    -            TS: u3,
    -            ///  Master/Slave mode
    -            MSM: u1,
    -            ///  External trigger filter
    -            ETF: u4,
    -            ///  External trigger prescaler
    -            ETPS: u2,
    -            ///  External clock enable
    -            ECE: u1,
    -            ///  External trigger polarity
    -            ETP: u1,
    -            padding: u16,
    -        }),
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            ///  Capture/Compare 1 interrupt enable
    -            CC1IE: u1,
    -            ///  Capture/Compare 2 interrupt enable
    -            CC2IE: u1,
    -            ///  Capture/Compare 3 interrupt enable
    -            CC3IE: u1,
    -            ///  Capture/Compare 4 interrupt enable
    -            CC4IE: u1,
    -            reserved6: u1,
    -            ///  Trigger interrupt enable
    -            TIE: u1,
    -            reserved8: u1,
    -            ///  Update DMA request enable
    -            UDE: u1,
    -            ///  Capture/Compare 1 DMA request enable
    -            CC1DE: u1,
    -            ///  Capture/Compare 2 DMA request enable
    -            CC2DE: u1,
    -            ///  Capture/Compare 3 DMA request enable
    -            CC3DE: u1,
    -            ///  Capture/Compare 4 DMA request enable
    -            CC4DE: u1,
    -            reserved14: u1,
    -            ///  Trigger DMA request enable
    -            TDE: u1,
    -            padding: u17,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            ///  Capture/compare 1 interrupt flag
    -            CC1IF: u1,
    -            ///  Capture/Compare 2 interrupt flag
    -            CC2IF: u1,
    -            ///  Capture/Compare 3 interrupt flag
    -            CC3IF: u1,
    -            ///  Capture/Compare 4 interrupt flag
    -            CC4IF: u1,
    -            reserved6: u1,
    -            ///  Trigger interrupt flag
    -            TIF: u1,
    -            reserved9: u2,
    -            ///  Capture/Compare 1 overcapture flag
    -            CC1OF: u1,
    -            ///  Capture/compare 2 overcapture flag
    -            CC2OF: u1,
    -            ///  Capture/Compare 3 overcapture flag
    -            CC3OF: u1,
    -            ///  Capture/Compare 4 overcapture flag
    -            CC4OF: u1,
    -            padding: u19,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            ///  Capture/compare 1 generation
    -            CC1G: u1,
    -            ///  Capture/compare 2 generation
    -            CC2G: u1,
    -            ///  Capture/compare 3 generation
    -            CC3G: u1,
    -            ///  Capture/compare 4 generation
    -            CC4G: u1,
    -            reserved6: u1,
    -            ///  Trigger generation
    -            TG: u1,
    -            padding: u25,
    -        }),
    -        ///  capture/compare mode register 1 (output mode)
    -        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    -            ///  CC1S
    -            CC1S: u2,
    -            ///  OC1FE
    -            OC1FE: u1,
    -            ///  OC1PE
    -            OC1PE: u1,
    -            ///  OC1M
    -            OC1M: u3,
    -            ///  OC1CE
    -            OC1CE: u1,
    -            ///  CC2S
    -            CC2S: u2,
    -            ///  OC2FE
    -            OC2FE: u1,
    -            ///  OC2PE
    -            OC2PE: u1,
    -            ///  OC2M
    -            OC2M: u3,
    -            ///  OC2CE
    -            OC2CE: u1,
    -            padding: u16,
    -        }),
    -        ///  capture/compare mode register 2 (output mode)
    -        CCMR2_Output: mmio.Mmio(packed struct(u32) {
    -            ///  CC3S
    -            CC3S: u2,
    -            ///  OC3FE
    -            OC3FE: u1,
    -            ///  OC3PE
    -            OC3PE: u1,
    -            ///  OC3M
    -            OC3M: u3,
    -            ///  OC3CE
    -            OC3CE: u1,
    -            ///  CC4S
    -            CC4S: u2,
    -            ///  OC4FE
    -            OC4FE: u1,
    -            ///  OC4PE
    -            OC4PE: u1,
    -            ///  OC4M
    -            OC4M: u3,
    -            ///  O24CE
    -            O24CE: u1,
    -            padding: u16,
    -        }),
    -        ///  capture/compare enable register
    -        CCER: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 output enable
    -            CC1E: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1P: u1,
    -            reserved3: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1NP: u1,
    -            ///  Capture/Compare 2 output enable
    -            CC2E: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2P: u1,
    -            reserved7: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2NP: u1,
    -            ///  Capture/Compare 3 output enable
    -            CC3E: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC3P: u1,
    -            reserved11: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC3NP: u1,
    -            ///  Capture/Compare 4 output enable
    -            CC4E: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC4P: u1,
    -            reserved15: u1,
    -            ///  Capture/Compare 4 output Polarity
    -            CC4NP: u1,
    -            padding: u16,
    -        }),
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  Low counter value
    -            CNT_L: u16,
    -            ///  High counter value
    -            CNT_H: u16,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Low Auto-reload value
    -            ARR_L: u16,
    -            ///  High Auto-reload value
    -            ARR_H: u16,
    -        }),
    -        reserved52: [4]u8,
    -        ///  capture/compare register 1
    -        CCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare 1 value
    -            CCR1_L: u16,
    -            ///  High Capture/Compare 1 value
    -            CCR1_H: u16,
    -        }),
    -        ///  capture/compare register 2
    -        CCR2: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare 2 value
    -            CCR2_L: u16,
    -            ///  High Capture/Compare 2 value
    -            CCR2_H: u16,
    -        }),
    -        ///  capture/compare register 3
    -        CCR3: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare value
    -            CCR3_L: u16,
    -            ///  High Capture/Compare value
    -            CCR3_H: u16,
    -        }),
    -        ///  capture/compare register 4
    -        CCR4: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare value
    -            CCR4_L: u16,
    -            ///  High Capture/Compare value
    -            CCR4_H: u16,
    -        }),
    -        reserved72: [4]u8,
    -        ///  DMA control register
    -        DCR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA base address
    -            DBA: u5,
    -            reserved8: u3,
    -            ///  DMA burst length
    -            DBL: u5,
    -            padding: u19,
    -        }),
    -        ///  DMA address for full transfer
    -        DMAR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA register for burst accesses
    -            DMAB: u16,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  USB on the go full speed
    -    pub const OTG_FS_GLOBAL = extern struct {
    -        ///  OTG_FS control and status register (OTG_FS_GOTGCTL)
    -        FS_GOTGCTL: mmio.Mmio(packed struct(u32) {
    -            ///  Session request success
    -            SRQSCS: u1,
    -            ///  Session request
    -            SRQ: u1,
    -            reserved8: u6,
    -            ///  Host negotiation success
    -            HNGSCS: u1,
    -            ///  HNP request
    -            HNPRQ: u1,
    -            ///  Host set HNP enable
    -            HSHNPEN: u1,
    -            ///  Device HNP enabled
    -            DHNPEN: u1,
    -            reserved16: u4,
    -            ///  Connector ID status
    -            CIDSTS: u1,
    -            ///  Long/short debounce time
    -            DBCT: u1,
    -            ///  A-session valid
    -            ASVLD: u1,
    -            ///  B-session valid
    -            BSVLD: u1,
    -            padding: u12,
    -        }),
    -        ///  OTG_FS interrupt register (OTG_FS_GOTGINT)
    -        FS_GOTGINT: mmio.Mmio(packed struct(u32) {
    -            reserved2: u2,
    -            ///  Session end detected
    -            SEDET: u1,
    -            reserved8: u5,
    -            ///  Session request success status change
    -            SRSSCHG: u1,
    -            ///  Host negotiation success status change
    -            HNSSCHG: u1,
    -            reserved17: u7,
    -            ///  Host negotiation detected
    -            HNGDET: u1,
    -            ///  A-device timeout change
    -            ADTOCHG: u1,
    -            ///  Debounce done
    -            DBCDNE: u1,
    -            padding: u12,
    -        }),
    -        ///  OTG_FS AHB configuration register (OTG_FS_GAHBCFG)
    -        FS_GAHBCFG: mmio.Mmio(packed struct(u32) {
    -            ///  Global interrupt mask
    -            GINT: u1,
    -            reserved7: u6,
    -            ///  TxFIFO empty level
    -            TXFELVL: u1,
    -            ///  Periodic TxFIFO empty level
    -            PTXFELVL: u1,
    -            padding: u23,
    -        }),
    -        ///  OTG_FS USB configuration register (OTG_FS_GUSBCFG)
    -        FS_GUSBCFG: mmio.Mmio(packed struct(u32) {
    -            ///  FS timeout calibration
    -            TOCAL: u3,
    -            reserved6: u3,
    -            ///  Full Speed serial transceiver select
    -            PHYSEL: u1,
    -            reserved8: u1,
    -            ///  SRP-capable
    -            SRPCAP: u1,
    -            ///  HNP-capable
    -            HNPCAP: u1,
    -            ///  USB turnaround time
    -            TRDT: u4,
    -            reserved29: u15,
    -            ///  Force host mode
    -            FHMOD: u1,
    -            ///  Force device mode
    -            FDMOD: u1,
    -            ///  Corrupt Tx packet
    -            CTXPKT: u1,
    -        }),
    -        ///  OTG_FS reset register (OTG_FS_GRSTCTL)
    -        FS_GRSTCTL: mmio.Mmio(packed struct(u32) {
    -            ///  Core soft reset
    -            CSRST: u1,
    -            ///  HCLK soft reset
    -            HSRST: u1,
    -            ///  Host frame counter reset
    -            FCRST: u1,
    -            reserved4: u1,
    -            ///  RxFIFO flush
    -            RXFFLSH: u1,
    -            ///  TxFIFO flush
    -            TXFFLSH: u1,
    -            ///  TxFIFO number
    -            TXFNUM: u5,
    -            reserved31: u20,
    -            ///  AHB master idle
    -            AHBIDL: u1,
    -        }),
    -        ///  OTG_FS core interrupt register (OTG_FS_GINTSTS)
    -        FS_GINTSTS: mmio.Mmio(packed struct(u32) {
    -            ///  Current mode of operation
    -            CMOD: u1,
    -            ///  Mode mismatch interrupt
    -            MMIS: u1,
    -            ///  OTG interrupt
    -            OTGINT: u1,
    -            ///  Start of frame
    -            SOF: u1,
    -            ///  RxFIFO non-empty
    -            RXFLVL: u1,
    -            ///  Non-periodic TxFIFO empty
    -            NPTXFE: u1,
    -            ///  Global IN non-periodic NAK effective
    -            GINAKEFF: u1,
    -            ///  Global OUT NAK effective
    -            GOUTNAKEFF: u1,
    -            reserved10: u2,
    -            ///  Early suspend
    -            ESUSP: u1,
    -            ///  USB suspend
    -            USBSUSP: u1,
    -            ///  USB reset
    -            USBRST: u1,
    -            ///  Enumeration done
    -            ENUMDNE: u1,
    -            ///  Isochronous OUT packet dropped interrupt
    -            ISOODRP: u1,
    -            ///  End of periodic frame interrupt
    -            EOPF: u1,
    -            reserved18: u2,
    -            ///  IN endpoint interrupt
    -            IEPINT: u1,
    -            ///  OUT endpoint interrupt
    -            OEPINT: u1,
    -            ///  Incomplete isochronous IN transfer
    -            IISOIXFR: u1,
    -            ///  Incomplete periodic transfer(Host mode)/Incomplete isochronous OUT transfer(Device mode)
    -            IPXFR_INCOMPISOOUT: u1,
    -            reserved24: u2,
    -            ///  Host port interrupt
    -            HPRTINT: u1,
    -            ///  Host channels interrupt
    -            HCINT: u1,
    -            ///  Periodic TxFIFO empty
    -            PTXFE: u1,
    -            reserved28: u1,
    -            ///  Connector ID status change
    -            CIDSCHG: u1,
    -            ///  Disconnect detected interrupt
    -            DISCINT: u1,
    -            ///  Session request/new session detected interrupt
    -            SRQINT: u1,
    -            ///  Resume/remote wakeup detected interrupt
    -            WKUPINT: u1,
    -        }),
    -        ///  OTG_FS interrupt mask register (OTG_FS_GINTMSK)
    -        FS_GINTMSK: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  Mode mismatch interrupt mask
    -            MMISM: u1,
    -            ///  OTG interrupt mask
    -            OTGINT: u1,
    -            ///  Start of frame mask
    -            SOFM: u1,
    -            ///  Receive FIFO non-empty mask
    -            RXFLVLM: u1,
    -            ///  Non-periodic TxFIFO empty mask
    -            NPTXFEM: u1,
    -            ///  Global non-periodic IN NAK effective mask
    -            GINAKEFFM: u1,
    -            ///  Global OUT NAK effective mask
    -            GONAKEFFM: u1,
    -            reserved10: u2,
    -            ///  Early suspend mask
    -            ESUSPM: u1,
    -            ///  USB suspend mask
    -            USBSUSPM: u1,
    -            ///  USB reset mask
    -            USBRST: u1,
    -            ///  Enumeration done mask
    -            ENUMDNEM: u1,
    -            ///  Isochronous OUT packet dropped interrupt mask
    -            ISOODRPM: u1,
    -            ///  End of periodic frame interrupt mask
    -            EOPFM: u1,
    -            reserved17: u1,
    -            ///  Endpoint mismatch interrupt mask
    -            EPMISM: u1,
    -            ///  IN endpoints interrupt mask
    -            IEPINT: u1,
    -            ///  OUT endpoints interrupt mask
    -            OEPINT: u1,
    -            ///  Incomplete isochronous IN transfer mask
    -            IISOIXFRM: u1,
    -            ///  Incomplete periodic transfer mask(Host mode)/Incomplete isochronous OUT transfer mask(Device mode)
    -            IPXFRM_IISOOXFRM: u1,
    -            reserved24: u2,
    -            ///  Host port interrupt mask
    -            PRTIM: u1,
    -            ///  Host channels interrupt mask
    -            HCIM: u1,
    -            ///  Periodic TxFIFO empty mask
    -            PTXFEM: u1,
    -            reserved28: u1,
    -            ///  Connector ID status change mask
    -            CIDSCHGM: u1,
    -            ///  Disconnect detected interrupt mask
    -            DISCINT: u1,
    -            ///  Session request/new session detected interrupt mask
    -            SRQIM: u1,
    -            ///  Resume/remote wakeup detected interrupt mask
    -            WUIM: u1,
    -        }),
    -        ///  OTG_FS Receive status debug read(Device mode)
    -        FS_GRXSTSR_Device: mmio.Mmio(packed struct(u32) {
    -            ///  Endpoint number
    -            EPNUM: u4,
    -            ///  Byte count
    -            BCNT: u11,
    -            ///  Data PID
    -            DPID: u2,
    -            ///  Packet status
    -            PKTSTS: u4,
    -            ///  Frame number
    -            FRMNUM: u4,
    -            padding: u7,
    -        }),
    -        reserved36: [4]u8,
    -        ///  OTG_FS Receive FIFO size register (OTG_FS_GRXFSIZ)
    -        FS_GRXFSIZ: mmio.Mmio(packed struct(u32) {
    -            ///  RxFIFO depth
    -            RXFD: u16,
    -            padding: u16,
    -        }),
    -        ///  OTG_FS non-periodic transmit FIFO size register (Device mode)
    -        FS_GNPTXFSIZ_Device: mmio.Mmio(packed struct(u32) {
    -            ///  Endpoint 0 transmit RAM start address
    -            TX0FSA: u16,
    -            ///  Endpoint 0 TxFIFO depth
    -            TX0FD: u16,
    -        }),
    -        ///  OTG_FS non-periodic transmit FIFO/queue status register (OTG_FS_GNPTXSTS)
    -        FS_GNPTXSTS: mmio.Mmio(packed struct(u32) {
    -            ///  Non-periodic TxFIFO space available
    -            NPTXFSAV: u16,
    -            ///  Non-periodic transmit request queue space available
    -            NPTQXSAV: u8,
    -            ///  Top of the non-periodic transmit request queue
    -            NPTXQTOP: u7,
    -            padding: u1,
    -        }),
    -        reserved56: [8]u8,
    -        ///  OTG_FS general core configuration register (OTG_FS_GCCFG)
    -        FS_GCCFG: mmio.Mmio(packed struct(u32) {
    -            reserved16: u16,
    -            ///  Power down
    -            PWRDWN: u1,
    -            reserved18: u1,
    -            ///  Enable the VBUS sensing device
    -            VBUSASEN: u1,
    -            ///  Enable the VBUS sensing device
    -            VBUSBSEN: u1,
    -            ///  SOF output enable
    -            SOFOUTEN: u1,
    -            padding: u11,
    -        }),
    -        ///  core ID register
    -        FS_CID: mmio.Mmio(packed struct(u32) {
    -            ///  Product ID field
    -            PRODUCT_ID: u32,
    -        }),
    -        reserved256: [192]u8,
    -        ///  OTG_FS Host periodic transmit FIFO size register (OTG_FS_HPTXFSIZ)
    -        FS_HPTXFSIZ: mmio.Mmio(packed struct(u32) {
    -            ///  Host periodic TxFIFO start address
    -            PTXSA: u16,
    -            ///  Host periodic TxFIFO depth
    -            PTXFSIZ: u16,
    -        }),
    -        ///  OTG_FS device IN endpoint transmit FIFO size register (OTG_FS_DIEPTXF2)
    -        FS_DIEPTXF1: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint FIFO2 transmit RAM start address
    -            INEPTXSA: u16,
    -            ///  IN endpoint TxFIFO depth
    -            INEPTXFD: u16,
    -        }),
    -        ///  OTG_FS device IN endpoint transmit FIFO size register (OTG_FS_DIEPTXF3)
    -        FS_DIEPTXF2: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint FIFO3 transmit RAM start address
    -            INEPTXSA: u16,
    -            ///  IN endpoint TxFIFO depth
    -            INEPTXFD: u16,
    -        }),
    -        ///  OTG_FS device IN endpoint transmit FIFO size register (OTG_FS_DIEPTXF4)
    -        FS_DIEPTXF3: mmio.Mmio(packed struct(u32) {
    -            ///  IN endpoint FIFO4 transmit RAM start address
    -            INEPTXSA: u16,
    -            ///  IN endpoint TxFIFO depth
    -            INEPTXFD: u16,
    -        }),
    -    };
    -
    -    ///  General-purpose-timers
    -    pub const TIM5 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            ///  One-pulse mode
    -            OPM: u1,
    -            ///  Direction
    -            DIR: u1,
    -            ///  Center-aligned mode selection
    -            CMS: u2,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            ///  Clock division
    -            CKD: u2,
    -            padding: u22,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            reserved3: u3,
    -            ///  Capture/compare DMA selection
    -            CCDS: u1,
    -            ///  Master mode selection
    -            MMS: u3,
    -            ///  TI1 selection
    -            TI1S: u1,
    -            padding: u24,
    -        }),
    -        ///  slave mode control register
    -        SMCR: mmio.Mmio(packed struct(u32) {
    -            ///  Slave mode selection
    -            SMS: u3,
    -            reserved4: u1,
    -            ///  Trigger selection
    -            TS: u3,
    -            ///  Master/Slave mode
    -            MSM: u1,
    -            ///  External trigger filter
    -            ETF: u4,
    -            ///  External trigger prescaler
    -            ETPS: u2,
    -            ///  External clock enable
    -            ECE: u1,
    -            ///  External trigger polarity
    -            ETP: u1,
    -            padding: u16,
    -        }),
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            ///  Capture/Compare 1 interrupt enable
    -            CC1IE: u1,
    -            ///  Capture/Compare 2 interrupt enable
    -            CC2IE: u1,
    -            ///  Capture/Compare 3 interrupt enable
    -            CC3IE: u1,
    -            ///  Capture/Compare 4 interrupt enable
    -            CC4IE: u1,
    -            reserved6: u1,
    -            ///  Trigger interrupt enable
    -            TIE: u1,
    -            reserved8: u1,
    -            ///  Update DMA request enable
    -            UDE: u1,
    -            ///  Capture/Compare 1 DMA request enable
    -            CC1DE: u1,
    -            ///  Capture/Compare 2 DMA request enable
    -            CC2DE: u1,
    -            ///  Capture/Compare 3 DMA request enable
    -            CC3DE: u1,
    -            ///  Capture/Compare 4 DMA request enable
    -            CC4DE: u1,
    -            reserved14: u1,
    -            ///  Trigger DMA request enable
    -            TDE: u1,
    -            padding: u17,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            ///  Capture/compare 1 interrupt flag
    -            CC1IF: u1,
    -            ///  Capture/Compare 2 interrupt flag
    -            CC2IF: u1,
    -            ///  Capture/Compare 3 interrupt flag
    -            CC3IF: u1,
    -            ///  Capture/Compare 4 interrupt flag
    -            CC4IF: u1,
    -            reserved6: u1,
    -            ///  Trigger interrupt flag
    -            TIF: u1,
    -            reserved9: u2,
    -            ///  Capture/Compare 1 overcapture flag
    -            CC1OF: u1,
    -            ///  Capture/compare 2 overcapture flag
    -            CC2OF: u1,
    -            ///  Capture/Compare 3 overcapture flag
    -            CC3OF: u1,
    -            ///  Capture/Compare 4 overcapture flag
    -            CC4OF: u1,
    -            padding: u19,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            ///  Capture/compare 1 generation
    -            CC1G: u1,
    -            ///  Capture/compare 2 generation
    -            CC2G: u1,
    -            ///  Capture/compare 3 generation
    -            CC3G: u1,
    -            ///  Capture/compare 4 generation
    -            CC4G: u1,
    -            reserved6: u1,
    -            ///  Trigger generation
    -            TG: u1,
    -            padding: u25,
    -        }),
    -        ///  capture/compare mode register 1 (output mode)
    -        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    -            ///  CC1S
    -            CC1S: u2,
    -            ///  OC1FE
    -            OC1FE: u1,
    -            ///  OC1PE
    -            OC1PE: u1,
    -            ///  OC1M
    -            OC1M: u3,
    -            ///  OC1CE
    -            OC1CE: u1,
    -            ///  CC2S
    -            CC2S: u2,
    -            ///  OC2FE
    -            OC2FE: u1,
    -            ///  OC2PE
    -            OC2PE: u1,
    -            ///  OC2M
    -            OC2M: u3,
    -            ///  OC2CE
    -            OC2CE: u1,
    -            padding: u16,
    -        }),
    -        ///  capture/compare mode register 2 (output mode)
    -        CCMR2_Output: mmio.Mmio(packed struct(u32) {
    -            ///  CC3S
    -            CC3S: u2,
    -            ///  OC3FE
    -            OC3FE: u1,
    -            ///  OC3PE
    -            OC3PE: u1,
    -            ///  OC3M
    -            OC3M: u3,
    -            ///  OC3CE
    -            OC3CE: u1,
    -            ///  CC4S
    -            CC4S: u2,
    -            ///  OC4FE
    -            OC4FE: u1,
    -            ///  OC4PE
    -            OC4PE: u1,
    -            ///  OC4M
    -            OC4M: u3,
    -            ///  O24CE
    -            O24CE: u1,
    -            padding: u16,
    -        }),
    -        ///  capture/compare enable register
    -        CCER: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 output enable
    -            CC1E: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1P: u1,
    -            reserved3: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1NP: u1,
    -            ///  Capture/Compare 2 output enable
    -            CC2E: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2P: u1,
    -            reserved7: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2NP: u1,
    -            ///  Capture/Compare 3 output enable
    -            CC3E: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC3P: u1,
    -            reserved11: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC3NP: u1,
    -            ///  Capture/Compare 4 output enable
    -            CC4E: u1,
    -            ///  Capture/Compare 3 output Polarity
    -            CC4P: u1,
    -            reserved15: u1,
    -            ///  Capture/Compare 4 output Polarity
    -            CC4NP: u1,
    -            padding: u16,
    -        }),
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  Low counter value
    -            CNT_L: u16,
    -            ///  High counter value
    -            CNT_H: u16,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Low Auto-reload value
    -            ARR_L: u16,
    -            ///  High Auto-reload value
    -            ARR_H: u16,
    -        }),
    -        reserved52: [4]u8,
    -        ///  capture/compare register 1
    -        CCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare 1 value
    -            CCR1_L: u16,
    -            ///  High Capture/Compare 1 value
    -            CCR1_H: u16,
    -        }),
    -        ///  capture/compare register 2
    -        CCR2: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare 2 value
    -            CCR2_L: u16,
    -            ///  High Capture/Compare 2 value
    -            CCR2_H: u16,
    -        }),
    -        ///  capture/compare register 3
    -        CCR3: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare value
    -            CCR3_L: u16,
    -            ///  High Capture/Compare value
    -            CCR3_H: u16,
    -        }),
    -        ///  capture/compare register 4
    -        CCR4: mmio.Mmio(packed struct(u32) {
    -            ///  Low Capture/Compare value
    -            CCR4_L: u16,
    -            ///  High Capture/Compare value
    -            CCR4_H: u16,
    -        }),
    -        reserved72: [4]u8,
    -        ///  DMA control register
    -        DCR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA base address
    -            DBA: u5,
    -            reserved8: u3,
    -            ///  DMA burst length
    -            DBL: u5,
    -            padding: u19,
    -        }),
    -        ///  DMA address for full transfer
    -        DMAR: mmio.Mmio(packed struct(u32) {
    -            ///  DMA register for burst accesses
    -            DMAB: u16,
    -            padding: u16,
    -        }),
    -        ///  TIM5 option register
    -        OR: mmio.Mmio(packed struct(u32) {
    -            reserved6: u6,
    -            ///  Timer Input 4 remap
    -            IT4_RMP: u2,
    -            padding: u24,
    -        }),
    -    };
    -
    -    ///  General purpose timers
    -    pub const TIM9 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            ///  One-pulse mode
    -            OPM: u1,
    -            reserved7: u3,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            ///  Clock division
    -            CKD: u2,
    -            padding: u22,
    -        }),
    -        ///  control register 2
    -        CR2: mmio.Mmio(packed struct(u32) {
    -            reserved4: u4,
    -            ///  Master mode selection
    -            MMS: u3,
    -            padding: u25,
    -        }),
    -        ///  slave mode control register
    -        SMCR: mmio.Mmio(packed struct(u32) {
    -            ///  Slave mode selection
    -            SMS: u3,
    -            reserved4: u1,
    -            ///  Trigger selection
    -            TS: u3,
    -            ///  Master/Slave mode
    -            MSM: u1,
    -            padding: u24,
    -        }),
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            ///  Capture/Compare 1 interrupt enable
    -            CC1IE: u1,
    -            ///  Capture/Compare 2 interrupt enable
    -            CC2IE: u1,
    -            reserved6: u3,
    -            ///  Trigger interrupt enable
    -            TIE: u1,
    -            padding: u25,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            ///  Capture/compare 1 interrupt flag
    -            CC1IF: u1,
    -            ///  Capture/Compare 2 interrupt flag
    -            CC2IF: u1,
    -            reserved6: u3,
    -            ///  Trigger interrupt flag
    -            TIF: u1,
    -            reserved9: u2,
    -            ///  Capture/Compare 1 overcapture flag
    -            CC1OF: u1,
    -            ///  Capture/compare 2 overcapture flag
    -            CC2OF: u1,
    -            padding: u21,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            ///  Capture/compare 1 generation
    -            CC1G: u1,
    -            ///  Capture/compare 2 generation
    -            CC2G: u1,
    -            reserved6: u3,
    -            ///  Trigger generation
    -            TG: u1,
    -            padding: u25,
    -        }),
    -        ///  capture/compare mode register 1 (output mode)
    -        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 selection
    -            CC1S: u2,
    -            ///  Output Compare 1 fast enable
    -            OC1FE: u1,
    -            ///  Output Compare 1 preload enable
    -            OC1PE: u1,
    -            ///  Output Compare 1 mode
    -            OC1M: u3,
    -            reserved8: u1,
    -            ///  Capture/Compare 2 selection
    -            CC2S: u2,
    -            ///  Output Compare 2 fast enable
    -            OC2FE: u1,
    -            ///  Output Compare 2 preload enable
    -            OC2PE: u1,
    -            ///  Output Compare 2 mode
    -            OC2M: u3,
    -            padding: u17,
    -        }),
    -        reserved32: [4]u8,
    -        ///  capture/compare enable register
    -        CCER: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 output enable
    -            CC1E: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1P: u1,
    -            reserved3: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1NP: u1,
    -            ///  Capture/Compare 2 output enable
    -            CC2E: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2P: u1,
    -            reserved7: u1,
    -            ///  Capture/Compare 2 output Polarity
    -            CC2NP: u1,
    -            padding: u24,
    -        }),
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  counter value
    -            CNT: u16,
    -            padding: u16,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Auto-reload value
    -            ARR: u16,
    -            padding: u16,
    -        }),
    -        reserved52: [4]u8,
    -        ///  capture/compare register 1
    -        CCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 value
    -            CCR1: u16,
    -            padding: u16,
    -        }),
    -        ///  capture/compare register 2
    -        CCR2: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 2 value
    -            CCR2: u16,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  Cryptographic processor
    -    pub const CRC = extern struct {
    -        ///  Data register
    -        DR: mmio.Mmio(packed struct(u32) {
    -            ///  Data Register
    -            DR: u32,
    -        }),
    -        ///  Independent Data register
    -        IDR: mmio.Mmio(packed struct(u32) {
    -            ///  Independent Data register
    -            IDR: u8,
    -            padding: u24,
    -        }),
    -        ///  Control register
    -        CR: mmio.Mmio(packed struct(u32) {
    -            ///  Control regidter
    -            CR: u1,
    -            padding: u31,
    -        }),
    -    };
    -
    -    ///  General-purpose-timers
    -    pub const TIM10 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            reserved7: u4,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            ///  Clock division
    -            CKD: u2,
    -            padding: u22,
    -        }),
    -        reserved12: [8]u8,
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            ///  Capture/Compare 1 interrupt enable
    -            CC1IE: u1,
    -            padding: u30,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            ///  Capture/compare 1 interrupt flag
    -            CC1IF: u1,
    -            reserved9: u7,
    -            ///  Capture/Compare 1 overcapture flag
    -            CC1OF: u1,
    -            padding: u22,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            ///  Capture/compare 1 generation
    -            CC1G: u1,
    -            padding: u30,
    -        }),
    -        ///  capture/compare mode register 1 (output mode)
    -        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 selection
    -            CC1S: u2,
    -            ///  Output Compare 1 fast enable
    -            OC1FE: u1,
    -            ///  Output Compare 1 preload enable
    -            OC1PE: u1,
    -            ///  Output Compare 1 mode
    -            OC1M: u3,
    -            padding: u25,
    -        }),
    -        reserved32: [4]u8,
    -        ///  capture/compare enable register
    -        CCER: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 output enable
    -            CC1E: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1P: u1,
    -            reserved3: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1NP: u1,
    -            padding: u28,
    -        }),
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  counter value
    -            CNT: u16,
    -            padding: u16,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Auto-reload value
    -            ARR: u16,
    -            padding: u16,
    -        }),
    -        reserved52: [4]u8,
    -        ///  capture/compare register 1
    -        CCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 value
    -            CCR1: u16,
    -            padding: u16,
    -        }),
    -    };
    -
    -    ///  Ethernet: DMA controller operation
    -    pub const Ethernet_DMA = extern struct {
    -        ///  Ethernet DMA bus mode register
    -        DMABMR: mmio.Mmio(packed struct(u32) {
    -            ///  SR
    -            SR: u1,
    -            ///  DA
    -            DA: u1,
    -            ///  DSL
    -            DSL: u5,
    -            ///  EDFE
    -            EDFE: u1,
    -            ///  PBL
    -            PBL: u6,
    -            ///  RTPR
    -            RTPR: u2,
    -            ///  FB
    -            FB: u1,
    -            ///  RDP
    -            RDP: u6,
    -            ///  USP
    -            USP: u1,
    -            ///  FPM
    -            FPM: u1,
    -            ///  AAB
    -            AAB: u1,
    -            ///  MB
    -            MB: u1,
    -            padding: u5,
    -        }),
    -        ///  Ethernet DMA transmit poll demand register
    -        DMATPDR: mmio.Mmio(packed struct(u32) {
    -            ///  TPD
    -            TPD: u32,
    -        }),
    -        ///  EHERNET DMA receive poll demand register
    -        DMARPDR: mmio.Mmio(packed struct(u32) {
    -            ///  RPD
    -            RPD: u32,
    -        }),
    -        ///  Ethernet DMA receive descriptor list address register
    -        DMARDLAR: mmio.Mmio(packed struct(u32) {
    -            ///  SRL
    -            SRL: u32,
    -        }),
    -        ///  Ethernet DMA transmit descriptor list address register
    -        DMATDLAR: mmio.Mmio(packed struct(u32) {
    -            ///  STL
    -            STL: u32,
    -        }),
    -        ///  Ethernet DMA status register
    -        DMASR: mmio.Mmio(packed struct(u32) {
    -            ///  TS
    -            TS: u1,
    -            ///  TPSS
    -            TPSS: u1,
    -            ///  TBUS
    -            TBUS: u1,
    -            ///  TJTS
    -            TJTS: u1,
    -            ///  ROS
    -            ROS: u1,
    -            ///  TUS
    -            TUS: u1,
    -            ///  RS
    -            RS: u1,
    -            ///  RBUS
    -            RBUS: u1,
    -            ///  RPSS
    -            RPSS: u1,
    -            ///  PWTS
    -            PWTS: u1,
    -            ///  ETS
    -            ETS: u1,
    -            reserved13: u2,
    -            ///  FBES
    -            FBES: u1,
    -            ///  ERS
    -            ERS: u1,
    -            ///  AIS
    -            AIS: u1,
    -            ///  NIS
    -            NIS: u1,
    -            ///  RPS
    -            RPS: u3,
    -            ///  TPS
    -            TPS: u3,
    -            ///  EBS
    -            EBS: u3,
    -            reserved27: u1,
    -            ///  MMCS
    -            MMCS: u1,
    -            ///  PMTS
    -            PMTS: u1,
    -            ///  TSTS
    -            TSTS: u1,
    -            padding: u2,
    -        }),
    -        ///  Ethernet DMA operation mode register
    -        DMAOMR: mmio.Mmio(packed struct(u32) {
    -            reserved1: u1,
    -            ///  SR
    -            SR: u1,
    -            ///  OSF
    -            OSF: u1,
    -            ///  RTC
    -            RTC: u2,
    -            reserved6: u1,
    -            ///  FUGF
    -            FUGF: u1,
    -            ///  FEF
    -            FEF: u1,
    -            reserved13: u5,
    -            ///  ST
    -            ST: u1,
    -            ///  TTC
    -            TTC: u3,
    -            reserved20: u3,
    -            ///  FTF
    -            FTF: u1,
    -            ///  TSF
    -            TSF: u1,
    -            reserved24: u2,
    -            ///  DFRF
    -            DFRF: u1,
    -            ///  RSF
    -            RSF: u1,
    -            ///  DTCEFD
    -            DTCEFD: u1,
    -            padding: u5,
    -        }),
    -        ///  Ethernet DMA interrupt enable register
    -        DMAIER: mmio.Mmio(packed struct(u32) {
    -            ///  TIE
    -            TIE: u1,
    -            ///  TPSIE
    -            TPSIE: u1,
    -            ///  TBUIE
    -            TBUIE: u1,
    -            ///  TJTIE
    -            TJTIE: u1,
    -            ///  ROIE
    -            ROIE: u1,
    -            ///  TUIE
    -            TUIE: u1,
    -            ///  RIE
    -            RIE: u1,
    -            ///  RBUIE
    -            RBUIE: u1,
    -            ///  RPSIE
    -            RPSIE: u1,
    -            ///  RWTIE
    -            RWTIE: u1,
    -            ///  ETIE
    -            ETIE: u1,
    -            reserved13: u2,
    -            ///  FBEIE
    -            FBEIE: u1,
    -            ///  ERIE
    -            ERIE: u1,
    -            ///  AISE
    -            AISE: u1,
    -            ///  NISE
    -            NISE: u1,
    -            padding: u15,
    -        }),
    -        ///  Ethernet DMA missed frame and buffer overflow counter register
    -        DMAMFBOCR: mmio.Mmio(packed struct(u32) {
    -            ///  MFC
    -            MFC: u16,
    -            ///  OMFC
    -            OMFC: u1,
    -            ///  MFA
    -            MFA: u11,
    -            ///  OFOC
    -            OFOC: u1,
    -            padding: u3,
    -        }),
    -        ///  Ethernet DMA receive status watchdog timer register
    -        DMARSWTR: mmio.Mmio(packed struct(u32) {
    -            ///  RSWTC
    -            RSWTC: u8,
    -            padding: u24,
    -        }),
    -        reserved72: [32]u8,
    -        ///  Ethernet DMA current host transmit descriptor register
    -        DMACHTDR: mmio.Mmio(packed struct(u32) {
    -            ///  HTDAP
    -            HTDAP: u32,
    -        }),
    -        ///  Ethernet DMA current host receive descriptor register
    -        DMACHRDR: mmio.Mmio(packed struct(u32) {
    -            ///  HRDAP
    -            HRDAP: u32,
    -        }),
    -        ///  Ethernet DMA current host transmit buffer address register
    -        DMACHTBAR: mmio.Mmio(packed struct(u32) {
    -            ///  HTBAP
    -            HTBAP: u32,
    -        }),
    -        ///  Ethernet DMA current host receive buffer address register
    -        DMACHRBAR: mmio.Mmio(packed struct(u32) {
    -            ///  HRBAP
    -            HRBAP: u32,
    -        }),
    -    };
    -
    -    ///  Ethernet: Precision time protocol
    -    pub const Ethernet_PTP = extern struct {
    -        ///  Ethernet PTP time stamp control register
    -        PTPTSCR: mmio.Mmio(packed struct(u32) {
    -            ///  TSE
    -            TSE: u1,
    -            ///  TSFCU
    -            TSFCU: u1,
    -            ///  TSSTI
    -            TSSTI: u1,
    -            ///  TSSTU
    -            TSSTU: u1,
    -            ///  TSITE
    -            TSITE: u1,
    -            ///  TTSARU
    -            TTSARU: u1,
    -            reserved8: u2,
    -            ///  TSSARFE
    -            TSSARFE: u1,
    -            ///  TSSSR
    -            TSSSR: u1,
    -            ///  TSPTPPSV2E
    -            TSPTPPSV2E: u1,
    -            ///  TSSPTPOEFE
    -            TSSPTPOEFE: u1,
    -            ///  TSSIPV6FE
    -            TSSIPV6FE: u1,
    -            ///  TSSIPV4FE
    -            TSSIPV4FE: u1,
    -            ///  TSSEME
    -            TSSEME: u1,
    -            ///  TSSMRME
    -            TSSMRME: u1,
    -            ///  TSCNT
    -            TSCNT: u2,
    -            ///  TSPFFMAE
    -            TSPFFMAE: u1,
    -            padding: u13,
    -        }),
    -        ///  Ethernet PTP subsecond increment register
    -        PTPSSIR: mmio.Mmio(packed struct(u32) {
    -            ///  STSSI
    -            STSSI: u8,
    -            padding: u24,
    -        }),
    -        ///  Ethernet PTP time stamp high register
    -        PTPTSHR: mmio.Mmio(packed struct(u32) {
    -            ///  STS
    -            STS: u32,
    -        }),
    -        ///  Ethernet PTP time stamp low register
    -        PTPTSLR: mmio.Mmio(packed struct(u32) {
    -            ///  STSS
    -            STSS: u31,
    -            ///  STPNS
    -            STPNS: u1,
    -        }),
    -        ///  Ethernet PTP time stamp high update register
    -        PTPTSHUR: mmio.Mmio(packed struct(u32) {
    -            ///  TSUS
    -            TSUS: u32,
    -        }),
    -        ///  Ethernet PTP time stamp low update register
    -        PTPTSLUR: mmio.Mmio(packed struct(u32) {
    -            ///  TSUSS
    -            TSUSS: u31,
    -            ///  TSUSS
    -            TSUPNS: u1,
    -        }),
    -        ///  Ethernet PTP time stamp addend register
    -        PTPTSAR: mmio.Mmio(packed struct(u32) {
    -            ///  TSA
    -            TSA: u32,
    -        }),
    -        ///  Ethernet PTP target time high register
    -        PTPTTHR: mmio.Mmio(packed struct(u32) {
    -            ///  0
    -            TTSH: u32,
    -        }),
    -        ///  Ethernet PTP target time low register
    -        PTPTTLR: mmio.Mmio(packed struct(u32) {
    -            ///  TTSL
    -            TTSL: u32,
    -        }),
    -        reserved40: [4]u8,
    -        ///  Ethernet PTP time stamp status register
    -        PTPTSSR: mmio.Mmio(packed struct(u32) {
    -            ///  TSSO
    -            TSSO: u1,
    -            ///  TSTTR
    -            TSTTR: u1,
    -            padding: u30,
    -        }),
    -        ///  Ethernet PTP PPS control register
    -        PTPPPSCR: mmio.Mmio(packed struct(u32) {
    -            ///  TSSO
    -            TSSO: u1,
    -            ///  TSTTR
    -            TSTTR: u1,
    -            padding: u30,
    -        }),
    -    };
    -
    -    ///  General-purpose-timers
    -    pub const TIM11 = extern struct {
    -        ///  control register 1
    -        CR1: mmio.Mmio(packed struct(u32) {
    -            ///  Counter enable
    -            CEN: u1,
    -            ///  Update disable
    -            UDIS: u1,
    -            ///  Update request source
    -            URS: u1,
    -            reserved7: u4,
    -            ///  Auto-reload preload enable
    -            ARPE: u1,
    -            ///  Clock division
    -            CKD: u2,
    -            padding: u22,
    -        }),
    -        reserved12: [8]u8,
    -        ///  DMA/Interrupt enable register
    -        DIER: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt enable
    -            UIE: u1,
    -            ///  Capture/Compare 1 interrupt enable
    -            CC1IE: u1,
    -            padding: u30,
    -        }),
    -        ///  status register
    -        SR: mmio.Mmio(packed struct(u32) {
    -            ///  Update interrupt flag
    -            UIF: u1,
    -            ///  Capture/compare 1 interrupt flag
    -            CC1IF: u1,
    -            reserved9: u7,
    -            ///  Capture/Compare 1 overcapture flag
    -            CC1OF: u1,
    -            padding: u22,
    -        }),
    -        ///  event generation register
    -        EGR: mmio.Mmio(packed struct(u32) {
    -            ///  Update generation
    -            UG: u1,
    -            ///  Capture/compare 1 generation
    -            CC1G: u1,
    -            padding: u30,
    -        }),
    -        ///  capture/compare mode register 1 (output mode)
    -        CCMR1_Output: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 selection
    -            CC1S: u2,
    -            ///  Output Compare 1 fast enable
    -            OC1FE: u1,
    -            ///  Output Compare 1 preload enable
    -            OC1PE: u1,
    -            ///  Output Compare 1 mode
    -            OC1M: u3,
    -            padding: u25,
    -        }),
    -        reserved32: [4]u8,
    -        ///  capture/compare enable register
    -        CCER: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 output enable
    -            CC1E: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1P: u1,
    -            reserved3: u1,
    -            ///  Capture/Compare 1 output Polarity
    -            CC1NP: u1,
    -            padding: u28,
    -        }),
    -        ///  counter
    -        CNT: mmio.Mmio(packed struct(u32) {
    -            ///  counter value
    -            CNT: u16,
    -            padding: u16,
    -        }),
    -        ///  prescaler
    -        PSC: mmio.Mmio(packed struct(u32) {
    -            ///  Prescaler value
    -            PSC: u16,
    -            padding: u16,
    -        }),
    -        ///  auto-reload register
    -        ARR: mmio.Mmio(packed struct(u32) {
    -            ///  Auto-reload value
    -            ARR: u16,
    -            padding: u16,
    -        }),
    -        reserved52: [4]u8,
    -        ///  capture/compare register 1
    -        CCR1: mmio.Mmio(packed struct(u32) {
    -            ///  Capture/Compare 1 value
    -            CCR1: u16,
    -            padding: u16,
    -        }),
    -        reserved80: [24]u8,
    -        ///  option register
    -        OR: mmio.Mmio(packed struct(u32) {
    -            ///  Input 1 remapping capability
    -            RMP: u2,
    -            padding: u30,
    -        }),
    -    };
    -};
    
    From 2fb0b5eeca59b381bfea1c536a1564b1a3d7fa0b Mon Sep 17 00:00:00 2001
    From: Yerlan 
    Date: Sat, 23 Sep 2023 13:55:50 +0200
    Subject: [PATCH 211/286] Update README.adoc for Zig 0.11 release (#29)
    
    Zig 0.11 was released.
    I guess it makes sense to update the readme.
    Looking at microzig, it looks like 0.11 is the supported version.
    ---
     README.adoc | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/README.adoc b/README.adoc
    index 4123f3c9a..d1a8bf801 100644
    --- a/README.adoc
    +++ b/README.adoc
    @@ -6,4 +6,4 @@ SVD is copied from https://github.com/esp-rs/esp-pacs
     
     == What version of Zig to use
     
    -Right now we are following https://ziglang.org/download/[master], but once 0.11.0 is released, we will be switching to the latest stable version of Zig.
    +0.11.0
    
    From 366e58f65c15736ddd7789ef7eed653922b39f1c Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Ardelean=20C=C4=83lin?=
     <9417983+Ardelean-Calin@users.noreply.github.com>
    Date: Sat, 23 Sep 2023 18:01:42 +0300
    Subject: [PATCH 212/286] Added support for STM32L0 series (#27)
    
    * Added support for STM32L0 series
    
    * Switched from JSON to SVD.
    ---
     build.zig               |   123 +-
     src/chips/STM32L0x1.svd | 16671 ++++++++++++++++++++++++++++
     src/chips/STM32L0x2.svd | 20698 +++++++++++++++++++++++++++++++++++
     src/chips/STM32L0x3.svd | 22518 ++++++++++++++++++++++++++++++++++++++
     4 files changed, 60000 insertions(+), 10 deletions(-)
     create mode 100644 src/chips/STM32L0x1.svd
     create mode 100644 src/chips/STM32L0x2.svd
     create mode 100644 src/chips/STM32L0x3.svd
    
    diff --git a/build.zig b/build.zig
    index cea2a1682..7a0aac02c 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -5,6 +5,7 @@ fn root() []const u8 {
         return comptime (std.fs.path.dirname(@src().file) orelse ".");
     }
     const build_root = root();
    +const KiB = 1024;
     
     ////////////////////////////////////////
     //      MicroZig Gen 2 Interface      //
    @@ -22,8 +23,8 @@ pub const chips = struct {
                 .name = "STM32F103",
                 .cpu = .cortex_m3,
                 .memory_regions = &.{
    -                .{ .offset = 0x08000000, .length = 64 * 1024, .kind = .flash },
    -                .{ .offset = 0x20000000, .length = 20 * 1024, .kind = .ram },
    +                .{ .offset = 0x08000000, .length = 64 * KiB, .kind = .flash },
    +                .{ .offset = 0x20000000, .length = 20 * KiB, .kind = .ram },
                 },
                 .register_definition = .{
                     .json = .{ .cwd_relative = build_root ++ "/src/chips/STM32F103.json" },
    @@ -37,8 +38,8 @@ pub const chips = struct {
                 .name = "STM32F303",
                 .cpu = .cortex_m4,
                 .memory_regions = &.{
    -                .{ .offset = 0x08000000, .length = 256 * 1024, .kind = .flash },
    -                .{ .offset = 0x20000000, .length = 40 * 1024, .kind = .ram },
    +                .{ .offset = 0x08000000, .length = 256 * KiB, .kind = .flash },
    +                .{ .offset = 0x20000000, .length = 40 * KiB, .kind = .ram },
                 },
                 .register_definition = .{
                     .json = .{ .cwd_relative = build_root ++ "/src/chips/STM32F303.json" },
    @@ -52,9 +53,9 @@ pub const chips = struct {
                 .name = "STM32F407",
                 .cpu = .cortex_m4,
                 .memory_regions = &.{
    -                .{ .offset = 0x08000000, .length = 1024 * 1024, .kind = .flash },
    -                .{ .offset = 0x20000000, .length = 128 * 1024, .kind = .ram },
    -                .{ .offset = 0x10000000, .length = 64 * 1024, .kind = .ram }, // CCM RAM
    +                .{ .offset = 0x08000000, .length = 1024 * KiB, .kind = .flash },
    +                .{ .offset = 0x20000000, .length = 128 * KiB, .kind = .ram },
    +                .{ .offset = 0x10000000, .length = 64 * KiB, .kind = .ram }, // CCM RAM
                 },
                 .register_definition = .{
                     .json = .{ .cwd_relative = build_root ++ "/src/chips/STM32F407.json" },
    @@ -68,15 +69,117 @@ pub const chips = struct {
                 .name = "STM32F429",
                 .cpu = .cortex_m4,
                 .memory_regions = &.{
    -                .{ .offset = 0x08000000, .length = 2048 * 1024, .kind = .flash },
    -                .{ .offset = 0x20000000, .length = 192 * 1024, .kind = .ram },
    -                .{ .offset = 0x10000000, .length = 64 * 1024, .kind = .ram }, // CCM RAM
    +                .{ .offset = 0x08000000, .length = 2048 * KiB, .kind = .flash },
    +                .{ .offset = 0x20000000, .length = 192 * KiB, .kind = .ram },
    +                .{ .offset = 0x10000000, .length = 64 * KiB, .kind = .ram }, // CCM RAM
                 },
                 .register_definition = .{
                     .json = .{ .cwd_relative = build_root ++ "/src/chips/STM32F429.json" },
                 },
             },
         };
    +
    +    // All STM32L0x1 series MCUs differ only in memory size. So we create a comptime function
    +    // to generate all MCU variants as per https://www.st.com/en/microcontrollers-microprocessors/stm32l0x1.html
    +    fn stm32l0x1(comptime rom_size: u64, comptime ram_size: u64) microzig.Target {
    +        return microzig.Target{
    +            .preferred_format = .elf,
    +            .chip = .{
    +                .name = "STM32L0x1",
    +                .cpu = .cortex_m0plus,
    +                .memory_regions = &.{
    +                    .{ .offset = 0x08000000, .length = rom_size, .kind = .flash },
    +                    .{ .offset = 0x20000000, .length = ram_size, .kind = .ram },
    +                },
    +                .register_definition = .{
    +                    .svd = .{ .cwd_relative = build_root ++ "/src/chips/STM32L0x1.svd" },
    +                },
    +            },
    +        };
    +    }
    +
    +    pub const stm32l011x3 = stm32l0x1(8 * KiB, 2 * KiB);
    +
    +    pub const stm32l011x4 = stm32l0x1(16 * KiB, 2 * KiB);
    +    pub const stm32l021x4 = stm32l0x1(16 * KiB, 2 * KiB);
    +    pub const stm32l031x4 = stm32l0x1(16 * KiB, 8 * KiB);
    +
    +    pub const stm32l031x6 = stm32l0x1(32 * KiB, 8 * KiB);
    +    pub const stm32l041x6 = stm32l0x1(32 * KiB, 8 * KiB);
    +    pub const stm32l051x6 = stm32l0x1(32 * KiB, 8 * KiB);
    +
    +    pub const stm32l051x8 = stm32l0x1(64 * KiB, 8 * KiB);
    +    pub const stm32l071x8 = stm32l0x1(64 * KiB, 20 * KiB);
    +
    +    pub const stm32l071xb = stm32l0x1(128 * KiB, 20 * KiB);
    +    pub const stm32l081cb = stm32l0x1(128 * KiB, 20 * KiB);
    +
    +    pub const stm32l071xz = stm32l0x1(192 * KiB, 20 * KiB);
    +    pub const stm32l081xz = stm32l0x1(192 * KiB, 20 * KiB);
    +
    +    // All STM32L0x2 series MCUs differ only in memory size. So we create a comptime function
    +    // to generate all MCU variants as per https://www.st.com/en/microcontrollers-microprocessors/stm32l0x2.html
    +    fn stm32l0x2(comptime rom_size: u64, comptime ram_size: u64) microzig.Target {
    +        return microzig.Target{
    +            .preferred_format = .elf,
    +            .chip = .{
    +                .name = "STM32L0x2",
    +                .cpu = .cortex_m0plus,
    +                .memory_regions = &.{
    +                    .{ .offset = 0x08000000, .length = rom_size, .kind = .flash },
    +                    .{ .offset = 0x20000000, .length = ram_size, .kind = .ram },
    +                },
    +                .register_definition = .{
    +                    .svd = .{ .cwd_relative = build_root ++ "/src/chips/STM32L0x2.svd" },
    +                },
    +            },
    +        };
    +    }
    +
    +    pub const stm32l052x6 = stm32l0x2(32 * KiB, 8 * KiB);
    +
    +    pub const stm32l052x8 = stm32l0x2(64 * KiB, 8 * KiB);
    +    pub const stm32l062x8 = stm32l0x2(64 * KiB, 8 * KiB);
    +    pub const stm32l072v8 = stm32l0x2(64 * KiB, 20 * KiB);
    +
    +    pub const stm32l072xb = stm32l0x2(128 * KiB, 20 * KiB);
    +    pub const stm32l082xb = stm32l0x2(128 * KiB, 20 * KiB);
    +
    +    pub const stm32l072xz = stm32l0x2(192 * KiB, 20 * KiB);
    +    pub const stm32l082xz = stm32l0x2(192 * KiB, 20 * KiB);
    +
    +    // All STM32L0x2 series MCUs differ only in memory size. So we create a comptime function
    +    // to generate all MCU variants as per https://www.st.com/en/microcontrollers-microprocessors/stm32l0x3.html
    +    fn stm32l0x3(comptime rom_size: u64, comptime ram_size: u64) microzig.Target {
    +        return microzig.Target{
    +            .preferred_format = .elf,
    +            .chip = .{
    +                .name = "STM32L0x3",
    +                .cpu = .cortex_m0plus,
    +                .memory_regions = &.{
    +                    .{ .offset = 0x08000000, .length = rom_size, .kind = .flash },
    +                    .{ .offset = 0x20000000, .length = ram_size, .kind = .ram },
    +                },
    +                .register_definition = .{
    +                    .svd = .{ .cwd_relative = build_root ++ "/src/chips/STM32L0x3.svd" },
    +                },
    +            },
    +        };
    +    }
    +
    +    pub const stm32l053x6 = stm32l0x2(32 * KiB, 8 * KiB);
    +
    +    pub const stm32l053x8 = stm32l0x2(64 * KiB, 8 * KiB);
    +    pub const stm32l063x8 = stm32l0x2(64 * KiB, 8 * KiB);
    +
    +    pub const stm32l073v8 = stm32l0x2(64 * KiB, 20 * KiB);
    +    pub const stm32l083v8 = stm32l0x2(64 * KiB, 20 * KiB);
    +
    +    pub const stm32l073xb = stm32l0x2(128 * KiB, 20 * KiB);
    +    pub const stm32l083xb = stm32l0x2(128 * KiB, 20 * KiB);
    +
    +    pub const stm32l073xz = stm32l0x2(192 * KiB, 20 * KiB);
    +    pub const stm32l083xz = stm32l0x2(192 * KiB, 20 * KiB);
     };
     
     pub const boards = struct {
    diff --git a/src/chips/STM32L0x1.svd b/src/chips/STM32L0x1.svd
    new file mode 100644
    index 000000000..360fdb22c
    --- /dev/null
    +++ b/src/chips/STM32L0x1.svd
    @@ -0,0 +1,16671 @@
    +
    +
    +  STM32L0x1
    +  1.3
    +  STM32L0x1
    +  
    +  
    +    CM0+
    +    r0p0
    +    little
    +    false
    +    false
    +    3
    +    false
    +  
    +  
    +  
    +  8
    +  
    +  32
    +  
    +  0x20
    +  0x0
    +  0xFFFFFFFF
    +  
    +    
    +      AES
    +      Advanced encryption standard hardware
    +      accelerator
    +      AES
    +      0x40026000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        AES_RNG_LPUART1
    +        AES global interrupt RNG global interrupt and
    +        LPUART1 global interrupt through
    +        29
    +      
    +      
    +        
    +          CR
    +          CR
    +          control register
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DMAOUTEN
    +              Enable DMA management of data output
    +              phase
    +              12
    +              1
    +            
    +            
    +              DMAINEN
    +              Enable DMA management of data input
    +              phase
    +              11
    +              1
    +            
    +            
    +              ERRIE
    +              Error interrupt enable
    +              10
    +              1
    +            
    +            
    +              CCFIE
    +              CCF flag interrupt enable
    +              9
    +              1
    +            
    +            
    +              ERRC
    +              Error clear
    +              8
    +              1
    +            
    +            
    +              CCFC
    +              Computation Complete Flag
    +              Clear
    +              7
    +              1
    +            
    +            
    +              CHMOD
    +              AES chaining mode
    +              5
    +              2
    +            
    +            
    +              MODE
    +              AES operating mode
    +              3
    +              2
    +            
    +            
    +              DATATYPE
    +              Data type selection (for data in and
    +              data out to/from the cryptographic
    +              block)
    +              1
    +              2
    +            
    +            
    +              EN
    +              AES enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          status register
    +          0x4
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              WRERR
    +              Write error flag
    +              2
    +              1
    +            
    +            
    +              RDERR
    +              Read error flag
    +              1
    +              1
    +            
    +            
    +              CCF
    +              Computation complete flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          DINR
    +          DINR
    +          data input register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AES_DINR
    +              Data Input Register.
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          DOUTR
    +          DOUTR
    +          data output register
    +          0xC
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              AES_DOUTR
    +              Data output register
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          KEYR0
    +          KEYR0
    +          key register 0
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AES_KEYR0
    +              Data Output Register (LSB key
    +              [31:0])
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          KEYR1
    +          KEYR1
    +          key register 1
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AES_KEYR1
    +              AES key register (key
    +              [63:32])
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          KEYR2
    +          KEYR2
    +          key register 2
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AES_KEYR2
    +              AES key register (key
    +              [95:64])
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          KEYR3
    +          KEYR3
    +          key register 3
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AES_KEYR3
    +              AES key register (MSB key
    +              [127:96])
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          IVR0
    +          IVR0
    +          initialization vector register
    +          0
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AES_IVR0
    +              initialization vector register (LSB IVR
    +              [31:0])
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          IVR1
    +          IVR1
    +          initialization vector register
    +          1
    +          0x24
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AES_IVR1
    +              Initialization Vector Register (IVR
    +              [63:32])
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          IVR2
    +          IVR2
    +          initialization vector register
    +          2
    +          0x28
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AES_IVR2
    +              Initialization Vector Register (IVR
    +              [95:64])
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          IVR3
    +          IVR3
    +          initialization vector register
    +          3
    +          0x2C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AES_IVR3
    +              Initialization Vector Register (MSB IVR
    +              [127:96])
    +              0
    +              32
    +            
    +          
    +        
    +      
    +    
    +    
    +      DMA1
    +      Direct memory access controller
    +      DMA
    +      0x40020000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        DMA1_Channel1
    +        DMA1 Channel1 global interrupt
    +        9
    +      
    +      
    +        DMA1_Channel2_3
    +        DMA1 Channel2 and 3 interrupts
    +        10
    +      
    +      
    +        DMA1_Channel4_7
    +        DMA1 Channel4 to 7 interrupts
    +        11
    +      
    +      
    +        
    +          ISR
    +          ISR
    +          interrupt status register
    +          0x0
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              TEIF7
    +              Channel x transfer error flag (x = 1
    +              ..7)
    +              27
    +              1
    +            
    +            
    +              HTIF7
    +              Channel x half transfer flag (x = 1
    +              ..7)
    +              26
    +              1
    +            
    +            
    +              TCIF7
    +              Channel x transfer complete flag (x = 1
    +              ..7)
    +              25
    +              1
    +            
    +            
    +              GIF7
    +              Channel x global interrupt flag (x = 1
    +              ..7)
    +              24
    +              1
    +            
    +            
    +              TEIF6
    +              Channel x transfer error flag (x = 1
    +              ..7)
    +              23
    +              1
    +            
    +            
    +              HTIF6
    +              Channel x half transfer flag (x = 1
    +              ..7)
    +              22
    +              1
    +            
    +            
    +              TCIF6
    +              Channel x transfer complete flag (x = 1
    +              ..7)
    +              21
    +              1
    +            
    +            
    +              GIF6
    +              Channel x global interrupt flag (x = 1
    +              ..7)
    +              20
    +              1
    +            
    +            
    +              TEIF5
    +              Channel x transfer error flag (x = 1
    +              ..7)
    +              19
    +              1
    +            
    +            
    +              HTIF5
    +              Channel x half transfer flag (x = 1
    +              ..7)
    +              18
    +              1
    +            
    +            
    +              TCIF5
    +              Channel x transfer complete flag (x = 1
    +              ..7)
    +              17
    +              1
    +            
    +            
    +              GIF5
    +              Channel x global interrupt flag (x = 1
    +              ..7)
    +              16
    +              1
    +            
    +            
    +              TEIF4
    +              Channel x transfer error flag (x = 1
    +              ..7)
    +              15
    +              1
    +            
    +            
    +              HTIF4
    +              Channel x half transfer flag (x = 1
    +              ..7)
    +              14
    +              1
    +            
    +            
    +              TCIF4
    +              Channel x transfer complete flag (x = 1
    +              ..7)
    +              13
    +              1
    +            
    +            
    +              GIF4
    +              Channel x global interrupt flag (x = 1
    +              ..7)
    +              12
    +              1
    +            
    +            
    +              TEIF3
    +              Channel x transfer error flag (x = 1
    +              ..7)
    +              11
    +              1
    +            
    +            
    +              HTIF3
    +              Channel x half transfer flag (x = 1
    +              ..7)
    +              10
    +              1
    +            
    +            
    +              TCIF3
    +              Channel x transfer complete flag (x = 1
    +              ..7)
    +              9
    +              1
    +            
    +            
    +              GIF3
    +              Channel x global interrupt flag (x = 1
    +              ..7)
    +              8
    +              1
    +            
    +            
    +              TEIF2
    +              Channel x transfer error flag (x = 1
    +              ..7)
    +              7
    +              1
    +            
    +            
    +              HTIF2
    +              Channel x half transfer flag (x = 1
    +              ..7)
    +              6
    +              1
    +            
    +            
    +              TCIF2
    +              Channel x transfer complete flag (x = 1
    +              ..7)
    +              5
    +              1
    +            
    +            
    +              GIF2
    +              Channel x global interrupt flag (x = 1
    +              ..7)
    +              4
    +              1
    +            
    +            
    +              TEIF1
    +              Channel x transfer error flag (x = 1
    +              ..7)
    +              3
    +              1
    +            
    +            
    +              HTIF1
    +              Channel x half transfer flag (x = 1
    +              ..7)
    +              2
    +              1
    +            
    +            
    +              TCIF1
    +              Channel x transfer complete flag (x = 1
    +              ..7)
    +              1
    +              1
    +            
    +            
    +              GIF1
    +              Channel x global interrupt flag (x = 1
    +              ..7)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          IFCR
    +          IFCR
    +          interrupt flag clear register
    +          0x4
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              CTEIF7
    +              Channel x transfer error clear (x = 1
    +              ..7)
    +              27
    +              1
    +            
    +            
    +              CHTIF7
    +              Channel x half transfer clear (x = 1
    +              ..7)
    +              26
    +              1
    +            
    +            
    +              CTCIF7
    +              Channel x transfer complete clear (x = 1
    +              ..7)
    +              25
    +              1
    +            
    +            
    +              CGIF7
    +              Channel x global interrupt clear (x = 1
    +              ..7)
    +              24
    +              1
    +            
    +            
    +              CTEIF6
    +              Channel x transfer error clear (x = 1
    +              ..7)
    +              23
    +              1
    +            
    +            
    +              CHTIF6
    +              Channel x half transfer clear (x = 1
    +              ..7)
    +              22
    +              1
    +            
    +            
    +              CTCIF6
    +              Channel x transfer complete clear (x = 1
    +              ..7)
    +              21
    +              1
    +            
    +            
    +              CGIF6
    +              Channel x global interrupt clear (x = 1
    +              ..7)
    +              20
    +              1
    +            
    +            
    +              CTEIF5
    +              Channel x transfer error clear (x = 1
    +              ..7)
    +              19
    +              1
    +            
    +            
    +              CHTIF5
    +              Channel x half transfer clear (x = 1
    +              ..7)
    +              18
    +              1
    +            
    +            
    +              CTCIF5
    +              Channel x transfer complete clear (x = 1
    +              ..7)
    +              17
    +              1
    +            
    +            
    +              CGIF5
    +              Channel x global interrupt clear (x = 1
    +              ..7)
    +              16
    +              1
    +            
    +            
    +              CTEIF4
    +              Channel x transfer error clear (x = 1
    +              ..7)
    +              15
    +              1
    +            
    +            
    +              CHTIF4
    +              Channel x half transfer clear (x = 1
    +              ..7)
    +              14
    +              1
    +            
    +            
    +              CTCIF4
    +              Channel x transfer complete clear (x = 1
    +              ..7)
    +              13
    +              1
    +            
    +            
    +              CGIF4
    +              Channel x global interrupt clear (x = 1
    +              ..7)
    +              12
    +              1
    +            
    +            
    +              CTEIF3
    +              Channel x transfer error clear (x = 1
    +              ..7)
    +              11
    +              1
    +            
    +            
    +              CHTIF3
    +              Channel x half transfer clear (x = 1
    +              ..7)
    +              10
    +              1
    +            
    +            
    +              CTCIF3
    +              Channel x transfer complete clear (x = 1
    +              ..7)
    +              9
    +              1
    +            
    +            
    +              CGIF3
    +              Channel x global interrupt clear (x = 1
    +              ..7)
    +              8
    +              1
    +            
    +            
    +              CTEIF2
    +              Channel x transfer error clear (x = 1
    +              ..7)
    +              7
    +              1
    +            
    +            
    +              CHTIF2
    +              Channel x half transfer clear (x = 1
    +              ..7)
    +              6
    +              1
    +            
    +            
    +              CTCIF2
    +              Channel x transfer complete clear (x = 1
    +              ..7)
    +              5
    +              1
    +            
    +            
    +              CGIF2
    +              Channel x global interrupt clear (x = 1
    +              ..7)
    +              4
    +              1
    +            
    +            
    +              CTEIF1
    +              Channel x transfer error clear (x = 1
    +              ..7)
    +              3
    +              1
    +            
    +            
    +              CHTIF1
    +              Channel x half transfer clear (x = 1
    +              ..7)
    +              2
    +              1
    +            
    +            
    +              CTCIF1
    +              Channel x transfer complete clear (x = 1
    +              ..7)
    +              1
    +              1
    +            
    +            
    +              CGIF1
    +              Channel x global interrupt clear (x = 1
    +              ..7)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CCR1
    +          CCR1
    +          channel x configuration
    +          register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MEM2MEM
    +              Memory to memory mode
    +              14
    +              1
    +            
    +            
    +              PL
    +              Channel priority level
    +              12
    +              2
    +            
    +            
    +              MSIZE
    +              Memory size
    +              10
    +              2
    +            
    +            
    +              PSIZE
    +              Peripheral size
    +              8
    +              2
    +            
    +            
    +              MINC
    +              Memory increment mode
    +              7
    +              1
    +            
    +            
    +              PINC
    +              Peripheral increment mode
    +              6
    +              1
    +            
    +            
    +              CIRC
    +              Circular mode
    +              5
    +              1
    +            
    +            
    +              DIR
    +              Data transfer direction
    +              4
    +              1
    +            
    +            
    +              TEIE
    +              Transfer error interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              HTIE
    +              Half transfer interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              TCIE
    +              Transfer complete interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              EN
    +              Channel enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNDTR1
    +          CNDTR1
    +          channel x number of data
    +          register
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              NDT
    +              Number of data to transfer
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CPAR1
    +          CPAR1
    +          channel x peripheral address
    +          register
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PA
    +              Peripheral address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CMAR1
    +          CMAR1
    +          channel x memory address
    +          register
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MA
    +              Memory address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CCR2
    +          CCR2
    +          channel x configuration
    +          register
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MEM2MEM
    +              Memory to memory mode
    +              14
    +              1
    +            
    +            
    +              PL
    +              Channel priority level
    +              12
    +              2
    +            
    +            
    +              MSIZE
    +              Memory size
    +              10
    +              2
    +            
    +            
    +              PSIZE
    +              Peripheral size
    +              8
    +              2
    +            
    +            
    +              MINC
    +              Memory increment mode
    +              7
    +              1
    +            
    +            
    +              PINC
    +              Peripheral increment mode
    +              6
    +              1
    +            
    +            
    +              CIRC
    +              Circular mode
    +              5
    +              1
    +            
    +            
    +              DIR
    +              Data transfer direction
    +              4
    +              1
    +            
    +            
    +              TEIE
    +              Transfer error interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              HTIE
    +              Half transfer interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              TCIE
    +              Transfer complete interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              EN
    +              Channel enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNDTR2
    +          CNDTR2
    +          channel x number of data
    +          register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              NDT
    +              Number of data to transfer
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CPAR2
    +          CPAR2
    +          channel x peripheral address
    +          register
    +          0x24
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PA
    +              Peripheral address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CMAR2
    +          CMAR2
    +          channel x memory address
    +          register
    +          0x28
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MA
    +              Memory address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CCR3
    +          CCR3
    +          channel x configuration
    +          register
    +          0x30
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MEM2MEM
    +              Memory to memory mode
    +              14
    +              1
    +            
    +            
    +              PL
    +              Channel priority level
    +              12
    +              2
    +            
    +            
    +              MSIZE
    +              Memory size
    +              10
    +              2
    +            
    +            
    +              PSIZE
    +              Peripheral size
    +              8
    +              2
    +            
    +            
    +              MINC
    +              Memory increment mode
    +              7
    +              1
    +            
    +            
    +              PINC
    +              Peripheral increment mode
    +              6
    +              1
    +            
    +            
    +              CIRC
    +              Circular mode
    +              5
    +              1
    +            
    +            
    +              DIR
    +              Data transfer direction
    +              4
    +              1
    +            
    +            
    +              TEIE
    +              Transfer error interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              HTIE
    +              Half transfer interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              TCIE
    +              Transfer complete interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              EN
    +              Channel enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNDTR3
    +          CNDTR3
    +          channel x number of data
    +          register
    +          0x34
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              NDT
    +              Number of data to transfer
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CPAR3
    +          CPAR3
    +          channel x peripheral address
    +          register
    +          0x38
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PA
    +              Peripheral address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CMAR3
    +          CMAR3
    +          channel x memory address
    +          register
    +          0x3C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MA
    +              Memory address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CCR4
    +          CCR4
    +          channel x configuration
    +          register
    +          0x44
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MEM2MEM
    +              Memory to memory mode
    +              14
    +              1
    +            
    +            
    +              PL
    +              Channel priority level
    +              12
    +              2
    +            
    +            
    +              MSIZE
    +              Memory size
    +              10
    +              2
    +            
    +            
    +              PSIZE
    +              Peripheral size
    +              8
    +              2
    +            
    +            
    +              MINC
    +              Memory increment mode
    +              7
    +              1
    +            
    +            
    +              PINC
    +              Peripheral increment mode
    +              6
    +              1
    +            
    +            
    +              CIRC
    +              Circular mode
    +              5
    +              1
    +            
    +            
    +              DIR
    +              Data transfer direction
    +              4
    +              1
    +            
    +            
    +              TEIE
    +              Transfer error interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              HTIE
    +              Half transfer interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              TCIE
    +              Transfer complete interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              EN
    +              Channel enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNDTR4
    +          CNDTR4
    +          channel x number of data
    +          register
    +          0x48
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              NDT
    +              Number of data to transfer
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CPAR4
    +          CPAR4
    +          channel x peripheral address
    +          register
    +          0x4C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PA
    +              Peripheral address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CMAR4
    +          CMAR4
    +          channel x memory address
    +          register
    +          0x50
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MA
    +              Memory address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CCR5
    +          CCR5
    +          channel x configuration
    +          register
    +          0x58
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MEM2MEM
    +              Memory to memory mode
    +              14
    +              1
    +            
    +            
    +              PL
    +              Channel priority level
    +              12
    +              2
    +            
    +            
    +              MSIZE
    +              Memory size
    +              10
    +              2
    +            
    +            
    +              PSIZE
    +              Peripheral size
    +              8
    +              2
    +            
    +            
    +              MINC
    +              Memory increment mode
    +              7
    +              1
    +            
    +            
    +              PINC
    +              Peripheral increment mode
    +              6
    +              1
    +            
    +            
    +              CIRC
    +              Circular mode
    +              5
    +              1
    +            
    +            
    +              DIR
    +              Data transfer direction
    +              4
    +              1
    +            
    +            
    +              TEIE
    +              Transfer error interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              HTIE
    +              Half transfer interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              TCIE
    +              Transfer complete interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              EN
    +              Channel enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNDTR5
    +          CNDTR5
    +          channel x number of data
    +          register
    +          0x5C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              NDT
    +              Number of data to transfer
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CPAR5
    +          CPAR5
    +          channel x peripheral address
    +          register
    +          0x60
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PA
    +              Peripheral address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CMAR5
    +          CMAR5
    +          channel x memory address
    +          register
    +          0x64
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MA
    +              Memory address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CCR6
    +          CCR6
    +          channel x configuration
    +          register
    +          0x6C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MEM2MEM
    +              Memory to memory mode
    +              14
    +              1
    +            
    +            
    +              PL
    +              Channel priority level
    +              12
    +              2
    +            
    +            
    +              MSIZE
    +              Memory size
    +              10
    +              2
    +            
    +            
    +              PSIZE
    +              Peripheral size
    +              8
    +              2
    +            
    +            
    +              MINC
    +              Memory increment mode
    +              7
    +              1
    +            
    +            
    +              PINC
    +              Peripheral increment mode
    +              6
    +              1
    +            
    +            
    +              CIRC
    +              Circular mode
    +              5
    +              1
    +            
    +            
    +              DIR
    +              Data transfer direction
    +              4
    +              1
    +            
    +            
    +              TEIE
    +              Transfer error interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              HTIE
    +              Half transfer interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              TCIE
    +              Transfer complete interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              EN
    +              Channel enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNDTR6
    +          CNDTR6
    +          channel x number of data
    +          register
    +          0x70
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              NDT
    +              Number of data to transfer
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CPAR6
    +          CPAR6
    +          channel x peripheral address
    +          register
    +          0x74
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PA
    +              Peripheral address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CMAR6
    +          CMAR6
    +          channel x memory address
    +          register
    +          0x78
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MA
    +              Memory address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CCR7
    +          CCR7
    +          channel x configuration
    +          register
    +          0x80
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MEM2MEM
    +              Memory to memory mode
    +              14
    +              1
    +            
    +            
    +              PL
    +              Channel priority level
    +              12
    +              2
    +            
    +            
    +              MSIZE
    +              Memory size
    +              10
    +              2
    +            
    +            
    +              PSIZE
    +              Peripheral size
    +              8
    +              2
    +            
    +            
    +              MINC
    +              Memory increment mode
    +              7
    +              1
    +            
    +            
    +              PINC
    +              Peripheral increment mode
    +              6
    +              1
    +            
    +            
    +              CIRC
    +              Circular mode
    +              5
    +              1
    +            
    +            
    +              DIR
    +              Data transfer direction
    +              4
    +              1
    +            
    +            
    +              TEIE
    +              Transfer error interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              HTIE
    +              Half transfer interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              TCIE
    +              Transfer complete interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              EN
    +              Channel enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNDTR7
    +          CNDTR7
    +          channel x number of data
    +          register
    +          0x84
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              NDT
    +              Number of data to transfer
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CPAR7
    +          CPAR7
    +          channel x peripheral address
    +          register
    +          0x88
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PA
    +              Peripheral address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CMAR7
    +          CMAR7
    +          channel x memory address
    +          register
    +          0x8C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MA
    +              Memory address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CSELR
    +          CSELR
    +          channel selection register
    +          0xA8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              C7S
    +              DMA channel 7 selection
    +              24
    +              4
    +            
    +            
    +              C6S
    +              DMA channel 6 selection
    +              20
    +              4
    +            
    +            
    +              C5S
    +              DMA channel 5 selection
    +              16
    +              4
    +            
    +            
    +              C4S
    +              DMA channel 4 selection
    +              12
    +              4
    +            
    +            
    +              C3S
    +              DMA channel 3 selection
    +              8
    +              4
    +            
    +            
    +              C2S
    +              DMA channel 2 selection
    +              4
    +              4
    +            
    +            
    +              C1S
    +              DMA channel 1 selection
    +              0
    +              4
    +            
    +          
    +        
    +      
    +    
    +    
    +      CRC
    +      Cyclic redundancy check calculation
    +      unit
    +      CRC
    +      0x40023000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          DR
    +          DR
    +          Data register
    +          0x0
    +          0x20
    +          read-write
    +          0xFFFFFFFF
    +          
    +            
    +              DR
    +              Data register bits
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          IDR
    +          IDR
    +          Independent data register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              IDR
    +              General-purpose 8-bit data register
    +              bits
    +              0
    +              8
    +            
    +          
    +        
    +        
    +          CR
    +          CR
    +          Control register
    +          0x8
    +          0x20
    +          0x00000000
    +          
    +            
    +              REV_OUT
    +              Reverse output data
    +              7
    +              1
    +              read-write
    +            
    +            
    +              REV_IN
    +              Reverse input data
    +              5
    +              2
    +              read-write
    +            
    +            
    +              POLYSIZE
    +              Polynomial size
    +              3
    +              2
    +              read-write
    +            
    +            
    +              RESET
    +              RESET bit
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          INIT
    +          INIT
    +          Initial CRC value
    +          0x10
    +          0x20
    +          read-write
    +          0xFFFFFFFF
    +          
    +            
    +              CRC_INIT
    +              Programmable initial CRC
    +              value
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          POL
    +          POL
    +          polynomial
    +          0x14
    +          0x20
    +          read-write
    +          0x04C11DB7
    +          
    +            
    +              Polynomialcoefficients
    +              Programmable polynomial
    +              0
    +              32
    +            
    +          
    +        
    +      
    +    
    +    
    +      GPIOA
    +      General-purpose I/Os
    +      GPIO
    +      0x50000000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          MODER
    +          MODER
    +          GPIO port mode register
    +          0x0
    +          0x20
    +          read-write
    +          0xEBFFFCFF
    +          
    +            
    +              MODE0
    +              Port x configuration bits (y =
    +              0..15)
    +              0
    +              2
    +            
    +            
    +              MODE1
    +              Port x configuration bits (y =
    +              0..15)
    +              2
    +              2
    +            
    +            
    +              MODE2
    +              Port x configuration bits (y =
    +              0..15)
    +              4
    +              2
    +            
    +            
    +              MODE3
    +              Port x configuration bits (y =
    +              0..15)
    +              6
    +              2
    +            
    +            
    +              MODE4
    +              Port x configuration bits (y =
    +              0..15)
    +              8
    +              2
    +            
    +            
    +              MODE5
    +              Port x configuration bits (y =
    +              0..15)
    +              10
    +              2
    +            
    +            
    +              MODE6
    +              Port x configuration bits (y =
    +              0..15)
    +              12
    +              2
    +            
    +            
    +              MODE7
    +              Port x configuration bits (y =
    +              0..15)
    +              14
    +              2
    +            
    +            
    +              MODE8
    +              Port x configuration bits (y =
    +              0..15)
    +              16
    +              2
    +            
    +            
    +              MODE9
    +              Port x configuration bits (y =
    +              0..15)
    +              18
    +              2
    +            
    +            
    +              MODE10
    +              Port x configuration bits (y =
    +              0..15)
    +              20
    +              2
    +            
    +            
    +              MODE11
    +              Port x configuration bits (y =
    +              0..15)
    +              22
    +              2
    +            
    +            
    +              MODE12
    +              Port x configuration bits (y =
    +              0..15)
    +              24
    +              2
    +            
    +            
    +              MODE13
    +              Port x configuration bits (y =
    +              0..15)
    +              26
    +              2
    +            
    +            
    +              MODE14
    +              Port x configuration bits (y =
    +              0..15)
    +              28
    +              2
    +            
    +            
    +              MODE15
    +              Port x configuration bits (y =
    +              0..15)
    +              30
    +              2
    +            
    +          
    +        
    +        
    +          OTYPER
    +          OTYPER
    +          GPIO port output type register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OT15
    +              Port x configuration bits (y =
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              OT14
    +              Port x configuration bits (y =
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              OT13
    +              Port x configuration bits (y =
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              OT12
    +              Port x configuration bits (y =
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              OT11
    +              Port x configuration bits (y =
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              OT10
    +              Port x configuration bits (y =
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              OT9
    +              Port x configuration bits (y =
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              OT8
    +              Port x configuration bits (y =
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              OT7
    +              Port x configuration bits (y =
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              OT6
    +              Port x configuration bits (y =
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              OT5
    +              Port x configuration bits (y =
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              OT4
    +              Port x configuration bits (y =
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              OT3
    +              Port x configuration bits (y =
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              OT2
    +              Port x configuration bits (y =
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              OT1
    +              Port x configuration bits (y =
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              OT0
    +              Port x configuration bits (y =
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          OSPEEDR
    +          OSPEEDR
    +          GPIO port output speed
    +          register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OSPEED15
    +              Port x configuration bits (y =
    +              0..15)
    +              30
    +              2
    +            
    +            
    +              OSPEED14
    +              Port x configuration bits (y =
    +              0..15)
    +              28
    +              2
    +            
    +            
    +              OSPEED13
    +              Port x configuration bits (y =
    +              0..15)
    +              26
    +              2
    +            
    +            
    +              OSPEED12
    +              Port x configuration bits (y =
    +              0..15)
    +              24
    +              2
    +            
    +            
    +              OSPEED11
    +              Port x configuration bits (y =
    +              0..15)
    +              22
    +              2
    +            
    +            
    +              OSPEED10
    +              Port x configuration bits (y =
    +              0..15)
    +              20
    +              2
    +            
    +            
    +              OSPEED9
    +              Port x configuration bits (y =
    +              0..15)
    +              18
    +              2
    +            
    +            
    +              OSPEED8
    +              Port x configuration bits (y =
    +              0..15)
    +              16
    +              2
    +            
    +            
    +              OSPEED7
    +              Port x configuration bits (y =
    +              0..15)
    +              14
    +              2
    +            
    +            
    +              OSPEED6
    +              Port x configuration bits (y =
    +              0..15)
    +              12
    +              2
    +            
    +            
    +              OSPEED5
    +              Port x configuration bits (y =
    +              0..15)
    +              10
    +              2
    +            
    +            
    +              OSPEED4
    +              Port x configuration bits (y =
    +              0..15)
    +              8
    +              2
    +            
    +            
    +              OSPEED3
    +              Port x configuration bits (y =
    +              0..15)
    +              6
    +              2
    +            
    +            
    +              OSPEED2
    +              Port x configuration bits (y =
    +              0..15)
    +              4
    +              2
    +            
    +            
    +              OSPEED1
    +              Port x configuration bits (y =
    +              0..15)
    +              2
    +              2
    +            
    +            
    +              OSPEED0
    +              Port x configuration bits (y =
    +              0..15)
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          PUPDR
    +          PUPDR
    +          GPIO port pull-up/pull-down
    +          register
    +          0xC
    +          0x20
    +          read-write
    +          0x24000000
    +          
    +            
    +              PUPD15
    +              Port x configuration bits (y =
    +              0..15)
    +              30
    +              2
    +            
    +            
    +              PUPD14
    +              Port x configuration bits (y =
    +              0..15)
    +              28
    +              2
    +            
    +            
    +              PUPD13
    +              Port x configuration bits (y =
    +              0..15)
    +              26
    +              2
    +            
    +            
    +              PUPD12
    +              Port x configuration bits (y =
    +              0..15)
    +              24
    +              2
    +            
    +            
    +              PUPD11
    +              Port x configuration bits (y =
    +              0..15)
    +              22
    +              2
    +            
    +            
    +              PUPD10
    +              Port x configuration bits (y =
    +              0..15)
    +              20
    +              2
    +            
    +            
    +              PUPD9
    +              Port x configuration bits (y =
    +              0..15)
    +              18
    +              2
    +            
    +            
    +              PUPD8
    +              Port x configuration bits (y =
    +              0..15)
    +              16
    +              2
    +            
    +            
    +              PUPD7
    +              Port x configuration bits (y =
    +              0..15)
    +              14
    +              2
    +            
    +            
    +              PUPD6
    +              Port x configuration bits (y =
    +              0..15)
    +              12
    +              2
    +            
    +            
    +              PUPD5
    +              Port x configuration bits (y =
    +              0..15)
    +              10
    +              2
    +            
    +            
    +              PUPD4
    +              Port x configuration bits (y =
    +              0..15)
    +              8
    +              2
    +            
    +            
    +              PUPD3
    +              Port x configuration bits (y =
    +              0..15)
    +              6
    +              2
    +            
    +            
    +              PUPD2
    +              Port x configuration bits (y =
    +              0..15)
    +              4
    +              2
    +            
    +            
    +              PUPD1
    +              Port x configuration bits (y =
    +              0..15)
    +              2
    +              2
    +            
    +            
    +              PUPD0
    +              Port x configuration bits (y =
    +              0..15)
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          IDR
    +          IDR
    +          GPIO port input data register
    +          0x10
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              ID15
    +              Port input data bit (y =
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              ID14
    +              Port input data bit (y =
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              ID13
    +              Port input data bit (y =
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              ID12
    +              Port input data bit (y =
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              ID11
    +              Port input data bit (y =
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              ID10
    +              Port input data bit (y =
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              ID9
    +              Port input data bit (y =
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              ID8
    +              Port input data bit (y =
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              ID7
    +              Port input data bit (y =
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              ID6
    +              Port input data bit (y =
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              ID5
    +              Port input data bit (y =
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              ID4
    +              Port input data bit (y =
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              ID3
    +              Port input data bit (y =
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              ID2
    +              Port input data bit (y =
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              ID1
    +              Port input data bit (y =
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              ID0
    +              Port input data bit (y =
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ODR
    +          ODR
    +          GPIO port output data register
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OD15
    +              Port output data bit (y =
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              OD14
    +              Port output data bit (y =
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              OD13
    +              Port output data bit (y =
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              OD12
    +              Port output data bit (y =
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              OD11
    +              Port output data bit (y =
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              OD10
    +              Port output data bit (y =
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              OD9
    +              Port output data bit (y =
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              OD8
    +              Port output data bit (y =
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              OD7
    +              Port output data bit (y =
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              OD6
    +              Port output data bit (y =
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              OD5
    +              Port output data bit (y =
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              OD4
    +              Port output data bit (y =
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              OD3
    +              Port output data bit (y =
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              OD2
    +              Port output data bit (y =
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              OD1
    +              Port output data bit (y =
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              OD0
    +              Port output data bit (y =
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          BSRR
    +          BSRR
    +          GPIO port bit set/reset
    +          register
    +          0x18
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              BR15
    +              Port x reset bit y (y =
    +              0..15)
    +              31
    +              1
    +            
    +            
    +              BR14
    +              Port x reset bit y (y =
    +              0..15)
    +              30
    +              1
    +            
    +            
    +              BR13
    +              Port x reset bit y (y =
    +              0..15)
    +              29
    +              1
    +            
    +            
    +              BR12
    +              Port x reset bit y (y =
    +              0..15)
    +              28
    +              1
    +            
    +            
    +              BR11
    +              Port x reset bit y (y =
    +              0..15)
    +              27
    +              1
    +            
    +            
    +              BR10
    +              Port x reset bit y (y =
    +              0..15)
    +              26
    +              1
    +            
    +            
    +              BR9
    +              Port x reset bit y (y =
    +              0..15)
    +              25
    +              1
    +            
    +            
    +              BR8
    +              Port x reset bit y (y =
    +              0..15)
    +              24
    +              1
    +            
    +            
    +              BR7
    +              Port x reset bit y (y =
    +              0..15)
    +              23
    +              1
    +            
    +            
    +              BR6
    +              Port x reset bit y (y =
    +              0..15)
    +              22
    +              1
    +            
    +            
    +              BR5
    +              Port x reset bit y (y =
    +              0..15)
    +              21
    +              1
    +            
    +            
    +              BR4
    +              Port x reset bit y (y =
    +              0..15)
    +              20
    +              1
    +            
    +            
    +              BR3
    +              Port x reset bit y (y =
    +              0..15)
    +              19
    +              1
    +            
    +            
    +              BR2
    +              Port x reset bit y (y =
    +              0..15)
    +              18
    +              1
    +            
    +            
    +              BR1
    +              Port x reset bit y (y =
    +              0..15)
    +              17
    +              1
    +            
    +            
    +              BR0
    +              Port x reset bit y (y =
    +              0..15)
    +              16
    +              1
    +            
    +            
    +              BS15
    +              Port x set bit y (y=
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              BS14
    +              Port x set bit y (y=
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              BS13
    +              Port x set bit y (y=
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              BS12
    +              Port x set bit y (y=
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              BS11
    +              Port x set bit y (y=
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              BS10
    +              Port x set bit y (y=
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              BS9
    +              Port x set bit y (y=
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              BS8
    +              Port x set bit y (y=
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              BS7
    +              Port x set bit y (y=
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              BS6
    +              Port x set bit y (y=
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              BS5
    +              Port x set bit y (y=
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              BS4
    +              Port x set bit y (y=
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              BS3
    +              Port x set bit y (y=
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              BS2
    +              Port x set bit y (y=
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              BS1
    +              Port x set bit y (y=
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              BS0
    +              Port x set bit y (y=
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          LCKR
    +          LCKR
    +          GPIO port configuration lock
    +          register
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              LCKK
    +              Port x lock bit y (y=
    +              0..15)
    +              16
    +              1
    +            
    +            
    +              LCK15
    +              Port x lock bit y (y=
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              LCK14
    +              Port x lock bit y (y=
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              LCK13
    +              Port x lock bit y (y=
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              LCK12
    +              Port x lock bit y (y=
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              LCK11
    +              Port x lock bit y (y=
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              LCK10
    +              Port x lock bit y (y=
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              LCK9
    +              Port x lock bit y (y=
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              LCK8
    +              Port x lock bit y (y=
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              LCK7
    +              Port x lock bit y (y=
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              LCK6
    +              Port x lock bit y (y=
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              LCK5
    +              Port x lock bit y (y=
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              LCK4
    +              Port x lock bit y (y=
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              LCK3
    +              Port x lock bit y (y=
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              LCK2
    +              Port x lock bit y (y=
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              LCK1
    +              Port x lock bit y (y=
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              LCK0
    +              Port x lock bit y (y=
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          AFRL
    +          AFRL
    +          GPIO alternate function low
    +          register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AFSEL7
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              28
    +              4
    +            
    +            
    +              AFSEL6
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              24
    +              4
    +            
    +            
    +              AFSEL5
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              20
    +              4
    +            
    +            
    +              AFSEL4
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              16
    +              4
    +            
    +            
    +              AFSEL3
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              12
    +              4
    +            
    +            
    +              AFSEL2
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              8
    +              4
    +            
    +            
    +              AFSEL1
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              4
    +              4
    +            
    +            
    +              AFSEL0
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          AFRH
    +          AFRH
    +          GPIO alternate function high
    +          register
    +          0x24
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AFSEL15
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              28
    +              4
    +            
    +            
    +              AFSEL14
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              24
    +              4
    +            
    +            
    +              AFSEL13
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              20
    +              4
    +            
    +            
    +              AFSEL12
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              16
    +              4
    +            
    +            
    +              AFSEL11
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              12
    +              4
    +            
    +            
    +              AFSEL10
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              8
    +              4
    +            
    +            
    +              AFSEL9
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              4
    +              4
    +            
    +            
    +              AFSEL8
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          BRR
    +          BRR
    +          GPIO port bit reset register
    +          0x28
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              BR15
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              15
    +              1
    +            
    +            
    +              BR14
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              14
    +              1
    +            
    +            
    +              BR13
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              13
    +              1
    +            
    +            
    +              BR12
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              12
    +              1
    +            
    +            
    +              BR11
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              11
    +              1
    +            
    +            
    +              BR10
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              10
    +              1
    +            
    +            
    +              BR9
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              9
    +              1
    +            
    +            
    +              BR8
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              8
    +              1
    +            
    +            
    +              BR7
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              7
    +              1
    +            
    +            
    +              BR6
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              6
    +              1
    +            
    +            
    +              BR5
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              5
    +              1
    +            
    +            
    +              BR4
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              4
    +              1
    +            
    +            
    +              BR3
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              3
    +              1
    +            
    +            
    +              BR2
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              2
    +              1
    +            
    +            
    +              BR1
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              1
    +              1
    +            
    +            
    +              BR0
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              0
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      GPIOB
    +      General-purpose I/Os
    +      GPIO
    +      0x50000400
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          MODER
    +          MODER
    +          GPIO port mode register
    +          0x0
    +          0x20
    +          read-write
    +          0xFFFFFFFF
    +          
    +            
    +              MODE15
    +              Port x configuration bits (y =
    +              0..15)
    +              30
    +              2
    +            
    +            
    +              MODE14
    +              Port x configuration bits (y =
    +              0..15)
    +              28
    +              2
    +            
    +            
    +              MODE13
    +              Port x configuration bits (y =
    +              0..15)
    +              26
    +              2
    +            
    +            
    +              MODE12
    +              Port x configuration bits (y =
    +              0..15)
    +              24
    +              2
    +            
    +            
    +              MODE11
    +              Port x configuration bits (y =
    +              0..15)
    +              22
    +              2
    +            
    +            
    +              MODE10
    +              Port x configuration bits (y =
    +              0..15)
    +              20
    +              2
    +            
    +            
    +              MODE9
    +              Port x configuration bits (y =
    +              0..15)
    +              18
    +              2
    +            
    +            
    +              MODE8
    +              Port x configuration bits (y =
    +              0..15)
    +              16
    +              2
    +            
    +            
    +              MODE7
    +              Port x configuration bits (y =
    +              0..15)
    +              14
    +              2
    +            
    +            
    +              MODE6
    +              Port x configuration bits (y =
    +              0..15)
    +              12
    +              2
    +            
    +            
    +              MODE5
    +              Port x configuration bits (y =
    +              0..15)
    +              10
    +              2
    +            
    +            
    +              MODE4
    +              Port x configuration bits (y =
    +              0..15)
    +              8
    +              2
    +            
    +            
    +              MODE3
    +              Port x configuration bits (y =
    +              0..15)
    +              6
    +              2
    +            
    +            
    +              MODE2
    +              Port x configuration bits (y =
    +              0..15)
    +              4
    +              2
    +            
    +            
    +              MODE1
    +              Port x configuration bits (y =
    +              0..15)
    +              2
    +              2
    +            
    +            
    +              MODE0
    +              Port x configuration bits (y =
    +              0..15)
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          OTYPER
    +          OTYPER
    +          GPIO port output type register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OT15
    +              Port x configuration bits (y =
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              OT14
    +              Port x configuration bits (y =
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              OT13
    +              Port x configuration bits (y =
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              OT12
    +              Port x configuration bits (y =
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              OT11
    +              Port x configuration bits (y =
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              OT10
    +              Port x configuration bits (y =
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              OT9
    +              Port x configuration bits (y =
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              OT8
    +              Port x configuration bits (y =
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              OT7
    +              Port x configuration bits (y =
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              OT6
    +              Port x configuration bits (y =
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              OT5
    +              Port x configuration bits (y =
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              OT4
    +              Port x configuration bits (y =
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              OT3
    +              Port x configuration bits (y =
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              OT2
    +              Port x configuration bits (y =
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              OT1
    +              Port x configuration bits (y =
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              OT0
    +              Port x configuration bits (y =
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          OSPEEDR
    +          OSPEEDR
    +          GPIO port output speed
    +          register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OSPEED15
    +              Port x configuration bits (y =
    +              0..15)
    +              30
    +              2
    +            
    +            
    +              OSPEED14
    +              Port x configuration bits (y =
    +              0..15)
    +              28
    +              2
    +            
    +            
    +              OSPEED13
    +              Port x configuration bits (y =
    +              0..15)
    +              26
    +              2
    +            
    +            
    +              OSPEED12
    +              Port x configuration bits (y =
    +              0..15)
    +              24
    +              2
    +            
    +            
    +              OSPEED11
    +              Port x configuration bits (y =
    +              0..15)
    +              22
    +              2
    +            
    +            
    +              OSPEED10
    +              Port x configuration bits (y =
    +              0..15)
    +              20
    +              2
    +            
    +            
    +              OSPEED9
    +              Port x configuration bits (y =
    +              0..15)
    +              18
    +              2
    +            
    +            
    +              OSPEED8
    +              Port x configuration bits (y =
    +              0..15)
    +              16
    +              2
    +            
    +            
    +              OSPEED7
    +              Port x configuration bits (y =
    +              0..15)
    +              14
    +              2
    +            
    +            
    +              OSPEED6
    +              Port x configuration bits (y =
    +              0..15)
    +              12
    +              2
    +            
    +            
    +              OSPEED5
    +              Port x configuration bits (y =
    +              0..15)
    +              10
    +              2
    +            
    +            
    +              OSPEED4
    +              Port x configuration bits (y =
    +              0..15)
    +              8
    +              2
    +            
    +            
    +              OSPEED3
    +              Port x configuration bits (y =
    +              0..15)
    +              6
    +              2
    +            
    +            
    +              OSPEED2
    +              Port x configuration bits (y =
    +              0..15)
    +              4
    +              2
    +            
    +            
    +              OSPEED1
    +              Port x configuration bits (y =
    +              0..15)
    +              2
    +              2
    +            
    +            
    +              OSPEED0
    +              Port x configuration bits (y =
    +              0..15)
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          PUPDR
    +          PUPDR
    +          GPIO port pull-up/pull-down
    +          register
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PUPD15
    +              Port x configuration bits (y =
    +              0..15)
    +              30
    +              2
    +            
    +            
    +              PUPD14
    +              Port x configuration bits (y =
    +              0..15)
    +              28
    +              2
    +            
    +            
    +              PUPD13
    +              Port x configuration bits (y =
    +              0..15)
    +              26
    +              2
    +            
    +            
    +              PUPD12
    +              Port x configuration bits (y =
    +              0..15)
    +              24
    +              2
    +            
    +            
    +              PUPD11
    +              Port x configuration bits (y =
    +              0..15)
    +              22
    +              2
    +            
    +            
    +              PUPD10
    +              Port x configuration bits (y =
    +              0..15)
    +              20
    +              2
    +            
    +            
    +              PUPD9
    +              Port x configuration bits (y =
    +              0..15)
    +              18
    +              2
    +            
    +            
    +              PUPD8
    +              Port x configuration bits (y =
    +              0..15)
    +              16
    +              2
    +            
    +            
    +              PUPD7
    +              Port x configuration bits (y =
    +              0..15)
    +              14
    +              2
    +            
    +            
    +              PUPD6
    +              Port x configuration bits (y =
    +              0..15)
    +              12
    +              2
    +            
    +            
    +              PUPD5
    +              Port x configuration bits (y =
    +              0..15)
    +              10
    +              2
    +            
    +            
    +              PUPD4
    +              Port x configuration bits (y =
    +              0..15)
    +              8
    +              2
    +            
    +            
    +              PUPD3
    +              Port x configuration bits (y =
    +              0..15)
    +              6
    +              2
    +            
    +            
    +              PUPD2
    +              Port x configuration bits (y =
    +              0..15)
    +              4
    +              2
    +            
    +            
    +              PUPD1
    +              Port x configuration bits (y =
    +              0..15)
    +              2
    +              2
    +            
    +            
    +              PUPD0
    +              Port x configuration bits (y =
    +              0..15)
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          IDR
    +          IDR
    +          GPIO port input data register
    +          0x10
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              ID15
    +              Port input data bit (y =
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              ID14
    +              Port input data bit (y =
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              ID13
    +              Port input data bit (y =
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              ID12
    +              Port input data bit (y =
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              ID11
    +              Port input data bit (y =
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              ID10
    +              Port input data bit (y =
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              ID9
    +              Port input data bit (y =
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              ID8
    +              Port input data bit (y =
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              ID7
    +              Port input data bit (y =
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              ID6
    +              Port input data bit (y =
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              ID5
    +              Port input data bit (y =
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              ID4
    +              Port input data bit (y =
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              ID3
    +              Port input data bit (y =
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              ID2
    +              Port input data bit (y =
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              ID1
    +              Port input data bit (y =
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              ID0
    +              Port input data bit (y =
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ODR
    +          ODR
    +          GPIO port output data register
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OD15
    +              Port output data bit (y =
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              OD14
    +              Port output data bit (y =
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              OD13
    +              Port output data bit (y =
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              OD12
    +              Port output data bit (y =
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              OD11
    +              Port output data bit (y =
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              OD10
    +              Port output data bit (y =
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              OD9
    +              Port output data bit (y =
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              OD8
    +              Port output data bit (y =
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              OD7
    +              Port output data bit (y =
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              OD6
    +              Port output data bit (y =
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              OD5
    +              Port output data bit (y =
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              OD4
    +              Port output data bit (y =
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              OD3
    +              Port output data bit (y =
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              OD2
    +              Port output data bit (y =
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              OD1
    +              Port output data bit (y =
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              OD0
    +              Port output data bit (y =
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          BSRR
    +          BSRR
    +          GPIO port bit set/reset
    +          register
    +          0x18
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              BR15
    +              Port x reset bit y (y =
    +              0..15)
    +              31
    +              1
    +            
    +            
    +              BR14
    +              Port x reset bit y (y =
    +              0..15)
    +              30
    +              1
    +            
    +            
    +              BR13
    +              Port x reset bit y (y =
    +              0..15)
    +              29
    +              1
    +            
    +            
    +              BR12
    +              Port x reset bit y (y =
    +              0..15)
    +              28
    +              1
    +            
    +            
    +              BR11
    +              Port x reset bit y (y =
    +              0..15)
    +              27
    +              1
    +            
    +            
    +              BR10
    +              Port x reset bit y (y =
    +              0..15)
    +              26
    +              1
    +            
    +            
    +              BR9
    +              Port x reset bit y (y =
    +              0..15)
    +              25
    +              1
    +            
    +            
    +              BR8
    +              Port x reset bit y (y =
    +              0..15)
    +              24
    +              1
    +            
    +            
    +              BR7
    +              Port x reset bit y (y =
    +              0..15)
    +              23
    +              1
    +            
    +            
    +              BR6
    +              Port x reset bit y (y =
    +              0..15)
    +              22
    +              1
    +            
    +            
    +              BR5
    +              Port x reset bit y (y =
    +              0..15)
    +              21
    +              1
    +            
    +            
    +              BR4
    +              Port x reset bit y (y =
    +              0..15)
    +              20
    +              1
    +            
    +            
    +              BR3
    +              Port x reset bit y (y =
    +              0..15)
    +              19
    +              1
    +            
    +            
    +              BR2
    +              Port x reset bit y (y =
    +              0..15)
    +              18
    +              1
    +            
    +            
    +              BR1
    +              Port x reset bit y (y =
    +              0..15)
    +              17
    +              1
    +            
    +            
    +              BR0
    +              Port x reset bit y (y =
    +              0..15)
    +              16
    +              1
    +            
    +            
    +              BS15
    +              Port x set bit y (y=
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              BS14
    +              Port x set bit y (y=
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              BS13
    +              Port x set bit y (y=
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              BS12
    +              Port x set bit y (y=
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              BS11
    +              Port x set bit y (y=
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              BS10
    +              Port x set bit y (y=
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              BS9
    +              Port x set bit y (y=
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              BS8
    +              Port x set bit y (y=
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              BS7
    +              Port x set bit y (y=
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              BS6
    +              Port x set bit y (y=
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              BS5
    +              Port x set bit y (y=
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              BS4
    +              Port x set bit y (y=
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              BS3
    +              Port x set bit y (y=
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              BS2
    +              Port x set bit y (y=
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              BS1
    +              Port x set bit y (y=
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              BS0
    +              Port x set bit y (y=
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          LCKR
    +          LCKR
    +          GPIO port configuration lock
    +          register
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              LCKK
    +              Port x lock bit y (y=
    +              0..15)
    +              16
    +              1
    +            
    +            
    +              LCK15
    +              Port x lock bit y (y=
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              LCK14
    +              Port x lock bit y (y=
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              LCK13
    +              Port x lock bit y (y=
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              LCK12
    +              Port x lock bit y (y=
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              LCK11
    +              Port x lock bit y (y=
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              LCK10
    +              Port x lock bit y (y=
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              LCK9
    +              Port x lock bit y (y=
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              LCK8
    +              Port x lock bit y (y=
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              LCK7
    +              Port x lock bit y (y=
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              LCK6
    +              Port x lock bit y (y=
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              LCK5
    +              Port x lock bit y (y=
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              LCK4
    +              Port x lock bit y (y=
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              LCK3
    +              Port x lock bit y (y=
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              LCK2
    +              Port x lock bit y (y=
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              LCK1
    +              Port x lock bit y (y=
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              LCK0
    +              Port x lock bit y (y=
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          AFRL
    +          AFRL
    +          GPIO alternate function low
    +          register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AFSEL7
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              28
    +              4
    +            
    +            
    +              AFSEL6
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              24
    +              4
    +            
    +            
    +              AFSEL5
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              20
    +              4
    +            
    +            
    +              AFSEL4
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              16
    +              4
    +            
    +            
    +              AFSEL3
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              12
    +              4
    +            
    +            
    +              AFSEL2
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              8
    +              4
    +            
    +            
    +              AFSEL1
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              4
    +              4
    +            
    +            
    +              AFSEL0
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          AFRH
    +          AFRH
    +          GPIO alternate function high
    +          register
    +          0x24
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AFSEL15
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              28
    +              4
    +            
    +            
    +              AFSEL14
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              24
    +              4
    +            
    +            
    +              AFSEL13
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              20
    +              4
    +            
    +            
    +              AFSEL12
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              16
    +              4
    +            
    +            
    +              AFSEL11
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              12
    +              4
    +            
    +            
    +              AFSEL10
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              8
    +              4
    +            
    +            
    +              AFSEL9
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              4
    +              4
    +            
    +            
    +              AFSEL8
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          BRR
    +          BRR
    +          GPIO port bit reset register
    +          0x28
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              BR15
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              15
    +              1
    +            
    +            
    +              BR14
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              14
    +              1
    +            
    +            
    +              BR13
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              13
    +              1
    +            
    +            
    +              BR12
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              12
    +              1
    +            
    +            
    +              BR11
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              11
    +              1
    +            
    +            
    +              BR10
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              10
    +              1
    +            
    +            
    +              BR9
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              9
    +              1
    +            
    +            
    +              BR8
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              8
    +              1
    +            
    +            
    +              BR7
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              7
    +              1
    +            
    +            
    +              BR6
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              6
    +              1
    +            
    +            
    +              BR5
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              5
    +              1
    +            
    +            
    +              BR4
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              4
    +              1
    +            
    +            
    +              BR3
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              3
    +              1
    +            
    +            
    +              BR2
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              2
    +              1
    +            
    +            
    +              BR1
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              1
    +              1
    +            
    +            
    +              BR0
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              0
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      GPIOC
    +      0x50000800
    +    
    +    
    +      GPIOD
    +      0x50000C00
    +    
    +    
    +      GPIOH
    +      0x50001C00
    +    
    +    
    +      GPIOE
    +      0x50001000
    +    
    +    
    +      LPTIM
    +      Low power timer
    +      LPTIM
    +      0x40007C00
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        LPTIM1
    +        LPTIMER1 interrupt through
    +        EXTI29
    +        13
    +      
    +      
    +        
    +          ISR
    +          ISR
    +          Interrupt and Status Register
    +          0x0
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              DOWN
    +              Counter direction change up to
    +              down
    +              6
    +              1
    +            
    +            
    +              UP
    +              Counter direction change down to
    +              up
    +              5
    +              1
    +            
    +            
    +              ARROK
    +              Autoreload register update
    +              OK
    +              4
    +              1
    +            
    +            
    +              CMPOK
    +              Compare register update OK
    +              3
    +              1
    +            
    +            
    +              EXTTRIG
    +              External trigger edge
    +              event
    +              2
    +              1
    +            
    +            
    +              ARRM
    +              Autoreload match
    +              1
    +              1
    +            
    +            
    +              CMPM
    +              Compare match
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ICR
    +          ICR
    +          Interrupt Clear Register
    +          0x4
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              DOWNCF
    +              Direction change to down Clear
    +              Flag
    +              6
    +              1
    +            
    +            
    +              UPCF
    +              Direction change to UP Clear
    +              Flag
    +              5
    +              1
    +            
    +            
    +              ARROKCF
    +              Autoreload register update OK Clear
    +              Flag
    +              4
    +              1
    +            
    +            
    +              CMPOKCF
    +              Compare register update OK Clear
    +              Flag
    +              3
    +              1
    +            
    +            
    +              EXTTRIGCF
    +              External trigger valid edge Clear
    +              Flag
    +              2
    +              1
    +            
    +            
    +              ARRMCF
    +              Autoreload match Clear
    +              Flag
    +              1
    +              1
    +            
    +            
    +              CMPMCF
    +              compare match Clear Flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          IER
    +          IER
    +          Interrupt Enable Register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DOWNIE
    +              Direction change to down Interrupt
    +              Enable
    +              6
    +              1
    +            
    +            
    +              UPIE
    +              Direction change to UP Interrupt
    +              Enable
    +              5
    +              1
    +            
    +            
    +              ARROKIE
    +              Autoreload register update OK Interrupt
    +              Enable
    +              4
    +              1
    +            
    +            
    +              CMPOKIE
    +              Compare register update OK Interrupt
    +              Enable
    +              3
    +              1
    +            
    +            
    +              EXTTRIGIE
    +              External trigger valid edge Interrupt
    +              Enable
    +              2
    +              1
    +            
    +            
    +              ARRMIE
    +              Autoreload match Interrupt
    +              Enable
    +              1
    +              1
    +            
    +            
    +              CMPMIE
    +              Compare match Interrupt
    +              Enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CFGR
    +          CFGR
    +          Configuration Register
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ENC
    +              Encoder mode enable
    +              24
    +              1
    +            
    +            
    +              COUNTMODE
    +              counter mode enabled
    +              23
    +              1
    +            
    +            
    +              PRELOAD
    +              Registers update mode
    +              22
    +              1
    +            
    +            
    +              WAVPOL
    +              Waveform shape polarity
    +              21
    +              1
    +            
    +            
    +              WAVE
    +              Waveform shape
    +              20
    +              1
    +            
    +            
    +              TIMOUT
    +              Timeout enable
    +              19
    +              1
    +            
    +            
    +              TRIGEN
    +              Trigger enable and
    +              polarity
    +              17
    +              2
    +            
    +            
    +              TRIGSEL
    +              Trigger selector
    +              13
    +              3
    +            
    +            
    +              PRESC
    +              Clock prescaler
    +              9
    +              3
    +            
    +            
    +              TRGFLT
    +              Configurable digital filter for
    +              trigger
    +              6
    +              2
    +            
    +            
    +              CKFLT
    +              Configurable digital filter for external
    +              clock
    +              3
    +              2
    +            
    +            
    +              CKPOL
    +              Clock Polarity
    +              1
    +              2
    +            
    +            
    +              CKSEL
    +              Clock selector
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CR
    +          CR
    +          Control Register
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CNTSTRT
    +              Timer start in continuous
    +              mode
    +              2
    +              1
    +            
    +            
    +              SNGSTRT
    +              LPTIM start in single mode
    +              1
    +              1
    +            
    +            
    +              ENABLE
    +              LPTIM Enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CMP
    +          CMP
    +          Compare Register
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CMP
    +              Compare value.
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          ARR
    +          ARR
    +          Autoreload Register
    +          0x18
    +          0x20
    +          read-write
    +          0x00000001
    +          
    +            
    +              ARR
    +              Auto reload value.
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CNT
    +          CNT
    +          Counter Register
    +          0x1C
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CNT
    +              Counter value.
    +              0
    +              16
    +            
    +          
    +        
    +      
    +    
    +    
    +      RTC
    +      Real-time clock
    +      RTC
    +      0x40002800
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        RTC
    +        RTC global interrupt
    +        2
    +      
    +      
    +        
    +          TR
    +          TR
    +          RTC time register
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PM
    +              AM/PM notation
    +              22
    +              1
    +            
    +            
    +              HT
    +              Hour tens in BCD format
    +              20
    +              2
    +            
    +            
    +              HU
    +              Hour units in BCD format
    +              16
    +              4
    +            
    +            
    +              MNT
    +              Minute tens in BCD format
    +              12
    +              3
    +            
    +            
    +              MNU
    +              Minute units in BCD format
    +              8
    +              4
    +            
    +            
    +              ST
    +              Second tens in BCD format
    +              4
    +              3
    +            
    +            
    +              SU
    +              Second units in BCD format
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          DR
    +          DR
    +          RTC date register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              YT
    +              Year tens in BCD format
    +              20
    +              4
    +            
    +            
    +              YU
    +              Year units in BCD format
    +              16
    +              4
    +            
    +            
    +              WDU
    +              Week day units
    +              13
    +              3
    +            
    +            
    +              MT
    +              Month tens in BCD format
    +              12
    +              1
    +            
    +            
    +              MU
    +              Month units in BCD format
    +              8
    +              4
    +            
    +            
    +              DT
    +              Date tens in BCD format
    +              4
    +              2
    +            
    +            
    +              DU
    +              Date units in BCD format
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          CR
    +          CR
    +          RTC control register
    +          0x8
    +          0x20
    +          0x00000000
    +          
    +            
    +              COE
    +              Calibration output enable
    +              23
    +              1
    +              read-write
    +            
    +            
    +              OSEL
    +              Output selection
    +              21
    +              2
    +              read-write
    +            
    +            
    +              POL
    +              Output polarity
    +              20
    +              1
    +              read-write
    +            
    +            
    +              COSEL
    +              Calibration output
    +              selection
    +              19
    +              1
    +              read-write
    +            
    +            
    +              BKP
    +              Backup
    +              18
    +              1
    +              read-write
    +            
    +            
    +              SUB1H
    +              Subtract 1 hour (winter time
    +              change)
    +              17
    +              1
    +              write-only
    +            
    +            
    +              ADD1H
    +              Add 1 hour (summer time
    +              change)
    +              16
    +              1
    +              write-only
    +            
    +            
    +              TSIE
    +              Time-stamp interrupt
    +              enable
    +              15
    +              1
    +              read-write
    +            
    +            
    +              WUTIE
    +              Wakeup timer interrupt
    +              enable
    +              14
    +              1
    +              read-write
    +            
    +            
    +              ALRBIE
    +              Alarm B interrupt enable
    +              13
    +              1
    +              read-write
    +            
    +            
    +              ALRAIE
    +              Alarm A interrupt enable
    +              12
    +              1
    +              read-write
    +            
    +            
    +              TSE
    +              timestamp enable
    +              11
    +              1
    +              read-write
    +            
    +            
    +              WUTE
    +              Wakeup timer enable
    +              10
    +              1
    +              read-write
    +            
    +            
    +              ALRBE
    +              Alarm B enable
    +              9
    +              1
    +              read-write
    +            
    +            
    +              ALRAE
    +              Alarm A enable
    +              8
    +              1
    +              read-write
    +            
    +            
    +              FMT
    +              Hour format
    +              6
    +              1
    +              read-write
    +            
    +            
    +              BYPSHAD
    +              Bypass the shadow
    +              registers
    +              5
    +              1
    +              read-write
    +            
    +            
    +              REFCKON
    +              RTC_REFIN reference clock detection
    +              enable (50 or 60 Hz)
    +              4
    +              1
    +              read-write
    +            
    +            
    +              TSEDGE
    +              Time-stamp event active
    +              edge
    +              3
    +              1
    +              read-write
    +            
    +            
    +              WUCKSEL
    +              Wakeup clock selection
    +              0
    +              3
    +              read-write
    +            
    +          
    +        
    +        
    +          ISR
    +          ISR
    +          RTC initialization and status
    +          register
    +          0xC
    +          0x20
    +          0x00000000
    +          
    +            
    +              TAMP2F
    +              RTC_TAMP2 detection flag
    +              14
    +              1
    +              read-write
    +            
    +            
    +              TAMP1F
    +              RTC_TAMP1 detection flag
    +              13
    +              1
    +              read-write
    +            
    +            
    +              TSOVF
    +              Time-stamp overflow flag
    +              12
    +              1
    +              read-write
    +            
    +            
    +              TSF
    +              Time-stamp flag
    +              11
    +              1
    +              read-write
    +            
    +            
    +              WUTF
    +              Wakeup timer flag
    +              10
    +              1
    +              read-write
    +            
    +            
    +              ALRBF
    +              Alarm B flag
    +              9
    +              1
    +              read-write
    +            
    +            
    +              ALRAF
    +              Alarm A flag
    +              8
    +              1
    +              read-write
    +            
    +            
    +              INIT
    +              Initialization mode
    +              7
    +              1
    +              read-write
    +            
    +            
    +              INITF
    +              Initialization flag
    +              6
    +              1
    +              read-only
    +            
    +            
    +              RSF
    +              Registers synchronization
    +              flag
    +              5
    +              1
    +              read-write
    +            
    +            
    +              INITS
    +              Initialization status flag
    +              4
    +              1
    +              read-only
    +            
    +            
    +              SHPF
    +              Shift operation pending
    +              3
    +              1
    +              read-only
    +            
    +            
    +              WUTWF
    +              Wakeup timer write flag
    +              2
    +              1
    +              read-only
    +            
    +            
    +              ALRBWF
    +              Alarm B write flag
    +              1
    +              1
    +              read-only
    +            
    +            
    +              ALRAWF
    +              Alarm A write flag
    +              0
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          PRER
    +          PRER
    +          RTC prescaler register
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PREDIV_A
    +              Asynchronous prescaler
    +              factor
    +              16
    +              7
    +            
    +            
    +              PREDIV_S
    +              Synchronous prescaler
    +              factor
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          WUTR
    +          WUTR
    +          RTC wakeup timer register
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              WUT
    +              Wakeup auto-reload value
    +              bits
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          ALRMAR
    +          ALRMAR
    +          RTC alarm A register
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MSK4
    +              Alarm A date mask
    +              31
    +              1
    +            
    +            
    +              WDSEL
    +              Week day selection
    +              30
    +              1
    +            
    +            
    +              DT
    +              Date tens in BCD format.
    +              28
    +              2
    +            
    +            
    +              DU
    +              Date units or day in BCD
    +              format.
    +              24
    +              4
    +            
    +            
    +              MSK3
    +              Alarm A hours mask
    +              23
    +              1
    +            
    +            
    +              PM
    +              AM/PM notation
    +              22
    +              1
    +            
    +            
    +              HT
    +              Hour tens in BCD format.
    +              20
    +              2
    +            
    +            
    +              HU
    +              Hour units in BCD format.
    +              16
    +              4
    +            
    +            
    +              MSK2
    +              Alarm A minutes mask
    +              15
    +              1
    +            
    +            
    +              MNT
    +              Minute tens in BCD format.
    +              12
    +              3
    +            
    +            
    +              MNU
    +              Minute units in BCD
    +              format.
    +              8
    +              4
    +            
    +            
    +              MSK1
    +              Alarm A seconds mask
    +              7
    +              1
    +            
    +            
    +              ST
    +              Second tens in BCD format.
    +              4
    +              3
    +            
    +            
    +              SU
    +              Second units in BCD
    +              format.
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          ALRMBR
    +          ALRMBR
    +          RTC alarm B register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MSK4
    +              Alarm B date mask
    +              31
    +              1
    +            
    +            
    +              WDSEL
    +              Week day selection
    +              30
    +              1
    +            
    +            
    +              DT
    +              Date tens in BCD format
    +              28
    +              2
    +            
    +            
    +              DU
    +              Date units or day in BCD
    +              format
    +              24
    +              4
    +            
    +            
    +              MSK3
    +              Alarm B hours mask
    +              23
    +              1
    +            
    +            
    +              PM
    +              AM/PM notation
    +              22
    +              1
    +            
    +            
    +              HT
    +              Hour tens in BCD format
    +              20
    +              2
    +            
    +            
    +              HU
    +              Hour units in BCD format
    +              16
    +              4
    +            
    +            
    +              MSK2
    +              Alarm B minutes mask
    +              15
    +              1
    +            
    +            
    +              MNT
    +              Minute tens in BCD format
    +              12
    +              3
    +            
    +            
    +              MNU
    +              Minute units in BCD format
    +              8
    +              4
    +            
    +            
    +              MSK1
    +              Alarm B seconds mask
    +              7
    +              1
    +            
    +            
    +              ST
    +              Second tens in BCD format
    +              4
    +              3
    +            
    +            
    +              SU
    +              Second units in BCD format
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          WPR
    +          WPR
    +          write protection register
    +          0x24
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              KEY
    +              Write protection key
    +              0
    +              8
    +            
    +          
    +        
    +        
    +          SSR
    +          SSR
    +          RTC sub second register
    +          0x28
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              SS
    +              Sub second value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          SHIFTR
    +          SHIFTR
    +          RTC shift control register
    +          0x2C
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              ADD1S
    +              Add one second
    +              31
    +              1
    +            
    +            
    +              SUBFS
    +              Subtract a fraction of a
    +              second
    +              0
    +              15
    +            
    +          
    +        
    +        
    +          TSTR
    +          TSTR
    +          RTC timestamp time register
    +          0x30
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              PM
    +              AM/PM notation
    +              22
    +              1
    +            
    +            
    +              HT
    +              Hour tens in BCD format.
    +              20
    +              2
    +            
    +            
    +              HU
    +              Hour units in BCD format.
    +              16
    +              4
    +            
    +            
    +              MNT
    +              Minute tens in BCD format.
    +              12
    +              3
    +            
    +            
    +              MNU
    +              Minute units in BCD
    +              format.
    +              8
    +              4
    +            
    +            
    +              ST
    +              Second tens in BCD format.
    +              4
    +              3
    +            
    +            
    +              SU
    +              Second units in BCD
    +              format.
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          TSDR
    +          TSDR
    +          RTC timestamp date register
    +          0x34
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              WDU
    +              Week day units
    +              13
    +              3
    +            
    +            
    +              MT
    +              Month tens in BCD format
    +              12
    +              1
    +            
    +            
    +              MU
    +              Month units in BCD format
    +              8
    +              4
    +            
    +            
    +              DT
    +              Date tens in BCD format
    +              4
    +              2
    +            
    +            
    +              DU
    +              Date units in BCD format
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          TSSSR
    +          TSSSR
    +          RTC time-stamp sub second
    +          register
    +          0x38
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              SS
    +              Sub second value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CALR
    +          CALR
    +          RTC calibration register
    +          0x3C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CALP
    +              Increase frequency of RTC by 488.5
    +              ppm
    +              15
    +              1
    +            
    +            
    +              CALW8
    +              Use an 8-second calibration cycle
    +              period
    +              14
    +              1
    +            
    +            
    +              CALW16
    +              Use a 16-second calibration cycle
    +              period
    +              13
    +              1
    +            
    +            
    +              CALM
    +              Calibration minus
    +              0
    +              9
    +            
    +          
    +        
    +        
    +          TAMPCR
    +          TAMPCR
    +          RTC tamper configuration
    +          register
    +          0x40
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              TAMP2MF
    +              Tamper 2 mask flag
    +              21
    +              1
    +            
    +            
    +              TAMP2NOERASE
    +              Tamper 2 no erase
    +              20
    +              1
    +            
    +            
    +              TAMP2IE
    +              Tamper 2 interrupt enable
    +              19
    +              1
    +            
    +            
    +              TAMP1MF
    +              Tamper 1 mask flag
    +              18
    +              1
    +            
    +            
    +              TAMP1NOERASE
    +              Tamper 1 no erase
    +              17
    +              1
    +            
    +            
    +              TAMP1IE
    +              Tamper 1 interrupt enable
    +              16
    +              1
    +            
    +            
    +              TAMPPUDIS
    +              RTC_TAMPx pull-up disable
    +              15
    +              1
    +            
    +            
    +              TAMPPRCH
    +              RTC_TAMPx precharge
    +              duration
    +              13
    +              2
    +            
    +            
    +              TAMPFLT
    +              RTC_TAMPx filter count
    +              11
    +              2
    +            
    +            
    +              TAMPFREQ
    +              Tamper sampling frequency
    +              8
    +              3
    +            
    +            
    +              TAMPTS
    +              Activate timestamp on tamper detection
    +              event
    +              7
    +              1
    +            
    +            
    +              TAMP2_TRG
    +              Active level for RTC_TAMP2
    +              input
    +              4
    +              1
    +            
    +            
    +              TAMP2E
    +              RTC_TAMP2 input detection
    +              enable
    +              3
    +              1
    +            
    +            
    +              TAMPIE
    +              Tamper interrupt enable
    +              2
    +              1
    +            
    +            
    +              TAMP1TRG
    +              Active level for RTC_TAMP1
    +              input
    +              1
    +              1
    +            
    +            
    +              TAMP1E
    +              RTC_TAMP1 input detection
    +              enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ALRMASSR
    +          ALRMASSR
    +          RTC alarm A sub second
    +          register
    +          0x44
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MASKSS
    +              Mask the most-significant bits starting
    +              at this bit
    +              24
    +              4
    +            
    +            
    +              SS
    +              Sub seconds value
    +              0
    +              15
    +            
    +          
    +        
    +        
    +          ALRMBSSR
    +          ALRMBSSR
    +          RTC alarm B sub second
    +          register
    +          0x48
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MASKSS
    +              Mask the most-significant bits starting
    +              at this bit
    +              24
    +              4
    +            
    +            
    +              SS
    +              Sub seconds value
    +              0
    +              15
    +            
    +          
    +        
    +        
    +          OR
    +          OR
    +          option register
    +          0x4C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              RTC_OUT_RMP
    +              RTC_ALARM on PC13 output
    +              type
    +              1
    +              1
    +            
    +            
    +              RTC_ALARM_TYPE
    +              RTC_ALARM on PC13 output
    +              type
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          BKP0R
    +          BKP0R
    +          RTC backup registers
    +          0x50
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              BKP
    +              BKP
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          BKP1R
    +          BKP1R
    +          RTC backup registers
    +          0x54
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              BKP
    +              BKP
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          BKP2R
    +          BKP2R
    +          RTC backup registers
    +          0x58
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              BKP
    +              BKP
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          BKP3R
    +          BKP3R
    +          RTC backup registers
    +          0x5C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              BKP
    +              BKP
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          BKP4R
    +          BKP4R
    +          RTC backup registers
    +          0x60
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              BKP
    +              BKP
    +              0
    +              32
    +            
    +          
    +        
    +      
    +    
    +    
    +      USART1
    +      Universal synchronous asynchronous receiver
    +      transmitter
    +      USART
    +      0x40013800
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        USART1
    +        USART1 global interrupt
    +        27
    +      
    +      
    +        
    +          CR1
    +          CR1
    +          Control register 1
    +          0x0
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              M1
    +              Word length
    +              28
    +              1
    +            
    +            
    +              EOBIE
    +              End of Block interrupt
    +              enable
    +              27
    +              1
    +            
    +            
    +              RTOIE
    +              Receiver timeout interrupt
    +              enable
    +              26
    +              1
    +            
    +            
    +              DEAT4
    +              Driver Enable assertion
    +              time
    +              25
    +              1
    +            
    +            
    +              DEAT3
    +              DEAT3
    +              24
    +              1
    +            
    +            
    +              DEAT2
    +              DEAT2
    +              23
    +              1
    +            
    +            
    +              DEAT1
    +              DEAT1
    +              22
    +              1
    +            
    +            
    +              DEAT0
    +              DEAT0
    +              21
    +              1
    +            
    +            
    +              DEDT4
    +              Driver Enable de-assertion
    +              time
    +              20
    +              1
    +            
    +            
    +              DEDT3
    +              DEDT3
    +              19
    +              1
    +            
    +            
    +              DEDT2
    +              DEDT2
    +              18
    +              1
    +            
    +            
    +              DEDT1
    +              DEDT1
    +              17
    +              1
    +            
    +            
    +              DEDT0
    +              DEDT0
    +              16
    +              1
    +            
    +            
    +              OVER8
    +              Oversampling mode
    +              15
    +              1
    +            
    +            
    +              CMIE
    +              Character match interrupt
    +              enable
    +              14
    +              1
    +            
    +            
    +              MME
    +              Mute mode enable
    +              13
    +              1
    +            
    +            
    +              M0
    +              Word length
    +              12
    +              1
    +            
    +            
    +              WAKE
    +              Receiver wakeup method
    +              11
    +              1
    +            
    +            
    +              PCE
    +              Parity control enable
    +              10
    +              1
    +            
    +            
    +              PS
    +              Parity selection
    +              9
    +              1
    +            
    +            
    +              PEIE
    +              PE interrupt enable
    +              8
    +              1
    +            
    +            
    +              TXEIE
    +              interrupt enable
    +              7
    +              1
    +            
    +            
    +              TCIE
    +              Transmission complete interrupt
    +              enable
    +              6
    +              1
    +            
    +            
    +              RXNEIE
    +              RXNE interrupt enable
    +              5
    +              1
    +            
    +            
    +              IDLEIE
    +              IDLE interrupt enable
    +              4
    +              1
    +            
    +            
    +              TE
    +              Transmitter enable
    +              3
    +              1
    +            
    +            
    +              RE
    +              Receiver enable
    +              2
    +              1
    +            
    +            
    +              UESM
    +              USART enable in Stop mode
    +              1
    +              1
    +            
    +            
    +              UE
    +              USART enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CR2
    +          CR2
    +          Control register 2
    +          0x4
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              ADD4_7
    +              Address of the USART node
    +              28
    +              4
    +            
    +            
    +              ADD0_3
    +              Address of the USART node
    +              24
    +              4
    +            
    +            
    +              RTOEN
    +              Receiver timeout enable
    +              23
    +              1
    +            
    +            
    +              ABRMOD1
    +              Auto baud rate mode
    +              22
    +              1
    +            
    +            
    +              ABRMOD0
    +              ABRMOD0
    +              21
    +              1
    +            
    +            
    +              ABREN
    +              Auto baud rate enable
    +              20
    +              1
    +            
    +            
    +              MSBFIRST
    +              Most significant bit first
    +              19
    +              1
    +            
    +            
    +              TAINV
    +              Binary data inversion
    +              18
    +              1
    +            
    +            
    +              TXINV
    +              TX pin active level
    +              inversion
    +              17
    +              1
    +            
    +            
    +              RXINV
    +              RX pin active level
    +              inversion
    +              16
    +              1
    +            
    +            
    +              SWAP
    +              Swap TX/RX pins
    +              15
    +              1
    +            
    +            
    +              LINEN
    +              LIN mode enable
    +              14
    +              1
    +            
    +            
    +              STOP
    +              STOP bits
    +              12
    +              2
    +            
    +            
    +              CLKEN
    +              Clock enable
    +              11
    +              1
    +            
    +            
    +              CPOL
    +              Clock polarity
    +              10
    +              1
    +            
    +            
    +              CPHA
    +              Clock phase
    +              9
    +              1
    +            
    +            
    +              LBCL
    +              Last bit clock pulse
    +              8
    +              1
    +            
    +            
    +              LBDIE
    +              LIN break detection interrupt
    +              enable
    +              6
    +              1
    +            
    +            
    +              LBDL
    +              LIN break detection length
    +              5
    +              1
    +            
    +            
    +              ADDM7
    +              7-bit Address Detection/4-bit Address
    +              Detection
    +              4
    +              1
    +            
    +          
    +        
    +        
    +          CR3
    +          CR3
    +          Control register 3
    +          0x8
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              WUFIE
    +              Wakeup from Stop mode interrupt
    +              enable
    +              22
    +              1
    +            
    +            
    +              WUS
    +              Wakeup from Stop mode interrupt flag
    +              selection
    +              20
    +              2
    +            
    +            
    +              SCARCNT
    +              Smartcard auto-retry count
    +              17
    +              3
    +            
    +            
    +              DEP
    +              Driver enable polarity
    +              selection
    +              15
    +              1
    +            
    +            
    +              DEM
    +              Driver enable mode
    +              14
    +              1
    +            
    +            
    +              DDRE
    +              DMA Disable on Reception
    +              Error
    +              13
    +              1
    +            
    +            
    +              OVRDIS
    +              Overrun Disable
    +              12
    +              1
    +            
    +            
    +              ONEBIT
    +              One sample bit method
    +              enable
    +              11
    +              1
    +            
    +            
    +              CTSIE
    +              CTS interrupt enable
    +              10
    +              1
    +            
    +            
    +              CTSE
    +              CTS enable
    +              9
    +              1
    +            
    +            
    +              RTSE
    +              RTS enable
    +              8
    +              1
    +            
    +            
    +              DMAT
    +              DMA enable transmitter
    +              7
    +              1
    +            
    +            
    +              DMAR
    +              DMA enable receiver
    +              6
    +              1
    +            
    +            
    +              SCEN
    +              Smartcard mode enable
    +              5
    +              1
    +            
    +            
    +              NACK
    +              Smartcard NACK enable
    +              4
    +              1
    +            
    +            
    +              HDSEL
    +              Half-duplex selection
    +              3
    +              1
    +            
    +            
    +              IRLP
    +              Ir low-power
    +              2
    +              1
    +            
    +            
    +              IREN
    +              Ir mode enable
    +              1
    +              1
    +            
    +            
    +              EIE
    +              Error interrupt enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          BRR
    +          BRR
    +          Baud rate register
    +          0xC
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              DIV_Mantissa
    +              DIV_Mantissa
    +              4
    +              12
    +            
    +            
    +              DIV_Fraction
    +              DIV_Fraction
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          GTPR
    +          GTPR
    +          Guard time and prescaler
    +          register
    +          0x10
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              GT
    +              Guard time value
    +              8
    +              8
    +            
    +            
    +              PSC
    +              Prescaler value
    +              0
    +              8
    +            
    +          
    +        
    +        
    +          RTOR
    +          RTOR
    +          Receiver timeout register
    +          0x14
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              BLEN
    +              Block Length
    +              24
    +              8
    +            
    +            
    +              RTO
    +              Receiver timeout value
    +              0
    +              24
    +            
    +          
    +        
    +        
    +          RQR
    +          RQR
    +          Request register
    +          0x18
    +          0x20
    +          write-only
    +          0x0000
    +          
    +            
    +              TXFRQ
    +              Transmit data flush
    +              request
    +              4
    +              1
    +            
    +            
    +              RXFRQ
    +              Receive data flush request
    +              3
    +              1
    +            
    +            
    +              MMRQ
    +              Mute mode request
    +              2
    +              1
    +            
    +            
    +              SBKRQ
    +              Send break request
    +              1
    +              1
    +            
    +            
    +              ABRRQ
    +              Auto baud rate request
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ISR
    +          ISR
    +          Interrupt & status
    +          register
    +          0x1C
    +          0x20
    +          read-only
    +          0x00C0
    +          
    +            
    +              REACK
    +              REACK
    +              22
    +              1
    +            
    +            
    +              TEACK
    +              TEACK
    +              21
    +              1
    +            
    +            
    +              WUF
    +              WUF
    +              20
    +              1
    +            
    +            
    +              RWU
    +              RWU
    +              19
    +              1
    +            
    +            
    +              SBKF
    +              SBKF
    +              18
    +              1
    +            
    +            
    +              CMF
    +              CMF
    +              17
    +              1
    +            
    +            
    +              BUSY
    +              BUSY
    +              16
    +              1
    +            
    +            
    +              ABRF
    +              ABRF
    +              15
    +              1
    +            
    +            
    +              ABRE
    +              ABRE
    +              14
    +              1
    +            
    +            
    +              EOBF
    +              EOBF
    +              12
    +              1
    +            
    +            
    +              RTOF
    +              RTOF
    +              11
    +              1
    +            
    +            
    +              CTS
    +              CTS
    +              10
    +              1
    +            
    +            
    +              CTSIF
    +              CTSIF
    +              9
    +              1
    +            
    +            
    +              LBDF
    +              LBDF
    +              8
    +              1
    +            
    +            
    +              TXE
    +              TXE
    +              7
    +              1
    +            
    +            
    +              TC
    +              TC
    +              6
    +              1
    +            
    +            
    +              RXNE
    +              RXNE
    +              5
    +              1
    +            
    +            
    +              IDLE
    +              IDLE
    +              4
    +              1
    +            
    +            
    +              ORE
    +              ORE
    +              3
    +              1
    +            
    +            
    +              NF
    +              NF
    +              2
    +              1
    +            
    +            
    +              FE
    +              FE
    +              1
    +              1
    +            
    +            
    +              PE
    +              PE
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ICR
    +          ICR
    +          Interrupt flag clear register
    +          0x20
    +          0x20
    +          write-only
    +          0x0000
    +          
    +            
    +              WUCF
    +              Wakeup from Stop mode clear
    +              flag
    +              20
    +              1
    +            
    +            
    +              CMCF
    +              Character match clear flag
    +              17
    +              1
    +            
    +            
    +              EOBCF
    +              End of block clear flag
    +              12
    +              1
    +            
    +            
    +              RTOCF
    +              Receiver timeout clear
    +              flag
    +              11
    +              1
    +            
    +            
    +              CTSCF
    +              CTS clear flag
    +              9
    +              1
    +            
    +            
    +              LBDCF
    +              LIN break detection clear
    +              flag
    +              8
    +              1
    +            
    +            
    +              TCCF
    +              Transmission complete clear
    +              flag
    +              6
    +              1
    +            
    +            
    +              IDLECF
    +              Idle line detected clear
    +              flag
    +              4
    +              1
    +            
    +            
    +              ORECF
    +              Overrun error clear flag
    +              3
    +              1
    +            
    +            
    +              NCF
    +              Noise detected clear flag
    +              2
    +              1
    +            
    +            
    +              FECF
    +              Framing error clear flag
    +              1
    +              1
    +            
    +            
    +              PECF
    +              Parity error clear flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          RDR
    +          RDR
    +          Receive data register
    +          0x24
    +          0x20
    +          read-only
    +          0x0000
    +          
    +            
    +              RDR
    +              Receive data value
    +              0
    +              9
    +            
    +          
    +        
    +        
    +          TDR
    +          TDR
    +          Transmit data register
    +          0x28
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              TDR
    +              Transmit data value
    +              0
    +              9
    +            
    +          
    +        
    +      
    +    
    +    
    +      USART2
    +      0x40004400
    +    
    +    
    +      USART4
    +      0x40004C00
    +      
    +        USART4_USART5
    +        USART4/USART5 global interrupt
    +        14
    +      
    +    
    +    
    +      USART5
    +      0x40005000
    +      
    +        USART2
    +        USART2 global interrupt
    +        28
    +      
    +    
    +    
    +      IWDG
    +      Independent watchdog
    +      IWDG
    +      0x40003000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          KR
    +          KR
    +          Key register
    +          0x0
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              KEY
    +              Key value (write only, read
    +              0x0000)
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          PR
    +          PR
    +          Prescaler register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PR
    +              Prescaler divider
    +              0
    +              3
    +            
    +          
    +        
    +        
    +          RLR
    +          RLR
    +          Reload register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000FFF
    +          
    +            
    +              RL
    +              Watchdog counter reload
    +              value
    +              0
    +              12
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          Status register
    +          0xC
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              WVU
    +              Watchdog counter window value
    +              update
    +              2
    +              1
    +            
    +            
    +              RVU
    +              Watchdog counter reload value
    +              update
    +              1
    +              1
    +            
    +            
    +              PVU
    +              Watchdog prescaler value
    +              update
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          WINR
    +          WINR
    +          Window register
    +          0x10
    +          0x20
    +          read-write
    +          0x00000FFF
    +          
    +            
    +              WIN
    +              Watchdog counter window
    +              value
    +              0
    +              12
    +            
    +          
    +        
    +      
    +    
    +    
    +      WWDG
    +      System window watchdog
    +      WWDG
    +      0x40002C00
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        WWDG
    +        Window Watchdog interrupt
    +        0
    +      
    +      
    +        
    +          CR
    +          CR
    +          Control register
    +          0x0
    +          0x20
    +          read-write
    +          0x0000007F
    +          
    +            
    +              WDGA
    +              Activation bit
    +              7
    +              1
    +            
    +            
    +              T
    +              7-bit counter (MSB to LSB)
    +              0
    +              7
    +            
    +          
    +        
    +        
    +          CFR
    +          CFR
    +          Configuration register
    +          0x4
    +          0x20
    +          read-write
    +          0x0000007F
    +          
    +            
    +              EWI
    +              Early wakeup interrupt
    +              9
    +              1
    +            
    +            
    +              WDGTB1
    +              Timer base
    +              8
    +              1
    +            
    +            
    +              WDGTB0
    +              WDGTB0
    +              7
    +              1
    +            
    +            
    +              W
    +              7-bit window value
    +              0
    +              7
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          Status register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              EWIF
    +              Early wakeup interrupt
    +              flag
    +              0
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      Firewall
    +      Firewall
    +      Firewall
    +      0x40011C00
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          FIREWALL_CSSA
    +          FIREWALL_CSSA
    +          Code segment start address
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ADD
    +              code segment start address
    +              8
    +              16
    +            
    +          
    +        
    +        
    +          FIREWALL_CSL
    +          FIREWALL_CSL
    +          Code segment length
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              LENG
    +              code segment length
    +              8
    +              14
    +            
    +          
    +        
    +        
    +          FIREWALL_NVDSSA
    +          FIREWALL_NVDSSA
    +          Non-volatile data segment start
    +          address
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ADD
    +              Non-volatile data segment start
    +              address
    +              8
    +              16
    +            
    +          
    +        
    +        
    +          FIREWALL_NVDSL
    +          FIREWALL_NVDSL
    +          Non-volatile data segment
    +          length
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              LENG
    +              Non-volatile data segment
    +              length
    +              8
    +              14
    +            
    +          
    +        
    +        
    +          FIREWALL_VDSSA
    +          FIREWALL_VDSSA
    +          Volatile data segment start
    +          address
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ADD
    +              Volatile data segment start
    +              address
    +              6
    +              10
    +            
    +          
    +        
    +        
    +          FIREWALL_VDSL
    +          FIREWALL_VDSL
    +          Volatile data segment length
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              LENG
    +              Non-volatile data segment
    +              length
    +              6
    +              10
    +            
    +          
    +        
    +        
    +          FIREWALL_CR
    +          FIREWALL_CR
    +          Configuration register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              VDE
    +              Volatile data execution
    +              2
    +              1
    +            
    +            
    +              VDS
    +              Volatile data shared
    +              1
    +              1
    +            
    +            
    +              FPA
    +              Firewall pre alarm
    +              0
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      RCC
    +      Reset and clock control
    +      RCC
    +      0x40021000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        RCC
    +        RCC global interrupt
    +        4
    +      
    +      
    +        
    +          CR
    +          CR
    +          Clock control register
    +          0x0
    +          0x20
    +          0x00000300
    +          
    +            
    +              PLLRDY
    +              PLL clock ready flag
    +              25
    +              1
    +              read-only
    +            
    +            
    +              PLLON
    +              PLL enable bit
    +              24
    +              1
    +              read-write
    +            
    +            
    +              RTCPRE
    +              TC/LCD prescaler
    +              20
    +              2
    +              read-write
    +            
    +            
    +              CSSLSEON
    +              Clock security system on HSE enable
    +              bit
    +              19
    +              1
    +              read-write
    +            
    +            
    +              HSEBYP
    +              HSE clock bypass bit
    +              18
    +              1
    +              read-write
    +            
    +            
    +              HSERDY
    +              HSE clock ready flag
    +              17
    +              1
    +              read-only
    +            
    +            
    +              HSEON
    +              HSE clock enable bit
    +              16
    +              1
    +              read-write
    +            
    +            
    +              MSIRDY
    +              MSI clock ready flag
    +              9
    +              1
    +              read-only
    +            
    +            
    +              MSION
    +              MSI clock enable bit
    +              8
    +              1
    +              read-write
    +            
    +            
    +              HSI16DIVF
    +              HSI16DIVF
    +              4
    +              1
    +              read-only
    +            
    +            
    +              HSI16DIVEN
    +              HSI16DIVEN
    +              3
    +              1
    +              read-write
    +            
    +            
    +              HSI16RDYF
    +              Internal high-speed clock ready
    +              flag
    +              2
    +              1
    +              read-write
    +            
    +            
    +              HSI16KERON
    +              High-speed internal clock enable bit for
    +              some IP kernels
    +              1
    +              1
    +              read-only
    +            
    +            
    +              HSI16ON
    +              16 MHz high-speed internal clock
    +              enable
    +              0
    +              1
    +              read-write
    +            
    +            
    +              HSI16OUTEN
    +              16 MHz high-speed internal clock output
    +              enable
    +              5
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          ICSCR
    +          ICSCR
    +          Internal clock sources calibration
    +          register
    +          0x4
    +          0x20
    +          0x0000B000
    +          
    +            
    +              MSITRIM
    +              MSI clock trimming
    +              24
    +              8
    +              read-write
    +            
    +            
    +              MSICAL
    +              MSI clock calibration
    +              16
    +              8
    +              read-only
    +            
    +            
    +              MSIRANGE
    +              MSI clock ranges
    +              13
    +              3
    +              read-write
    +            
    +            
    +              HSI16TRIM
    +              High speed internal clock
    +              trimming
    +              8
    +              5
    +              read-write
    +            
    +            
    +              HSI16CAL
    +              nternal high speed clock
    +              calibration
    +              0
    +              8
    +              read-only
    +            
    +          
    +        
    +        
    +          CFGR
    +          CFGR
    +          Clock configuration register
    +          0xC
    +          0x20
    +          0x00000000
    +          
    +            
    +              MCOPRE
    +              Microcontroller clock output
    +              prescaler
    +              28
    +              3
    +              read-write
    +            
    +            
    +              MCOSEL
    +              Microcontroller clock output
    +              selection
    +              24
    +              3
    +              read-write
    +            
    +            
    +              PLLDIV
    +              PLL output division
    +              22
    +              2
    +              read-write
    +            
    +            
    +              PLLMUL
    +              PLL multiplication factor
    +              18
    +              4
    +              read-write
    +            
    +            
    +              PLLSRC
    +              PLL entry clock source
    +              16
    +              1
    +              read-write
    +            
    +            
    +              STOPWUCK
    +              Wake-up from stop clock
    +              selection
    +              15
    +              1
    +              read-write
    +            
    +            
    +              PPRE2
    +              APB high-speed prescaler
    +              (APB2)
    +              11
    +              3
    +              read-write
    +            
    +            
    +              PPRE1
    +              APB low-speed prescaler
    +              (APB1)
    +              8
    +              3
    +              read-write
    +            
    +            
    +              HPRE
    +              AHB prescaler
    +              4
    +              4
    +              read-write
    +            
    +            
    +              SWS
    +              System clock switch status
    +              2
    +              2
    +              read-only
    +            
    +            
    +              SW
    +              System clock switch
    +              0
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          CIER
    +          CIER
    +          Clock interrupt enable
    +          register
    +          0x10
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CSSLSE
    +              LSE CSS interrupt flag
    +              7
    +              1
    +            
    +            
    +              MSIRDYIE
    +              MSI ready interrupt flag
    +              5
    +              1
    +            
    +            
    +              PLLRDYIE
    +              PLL ready interrupt flag
    +              4
    +              1
    +            
    +            
    +              HSERDYIE
    +              HSE ready interrupt flag
    +              3
    +              1
    +            
    +            
    +              HSI16RDYIE
    +              HSI16 ready interrupt flag
    +              2
    +              1
    +            
    +            
    +              LSERDYIE
    +              LSE ready interrupt flag
    +              1
    +              1
    +            
    +            
    +              LSIRDYIE
    +              LSI ready interrupt flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CIFR
    +          CIFR
    +          Clock interrupt flag register
    +          0x14
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CSSHSEF
    +              Clock Security System Interrupt
    +              flag
    +              8
    +              1
    +            
    +            
    +              CSSLSEF
    +              LSE Clock Security System Interrupt
    +              flag
    +              7
    +              1
    +            
    +            
    +              MSIRDYF
    +              MSI ready interrupt flag
    +              5
    +              1
    +            
    +            
    +              PLLRDYF
    +              PLL ready interrupt flag
    +              4
    +              1
    +            
    +            
    +              HSERDYF
    +              HSE ready interrupt flag
    +              3
    +              1
    +            
    +            
    +              HSI16RDYF
    +              HSI16 ready interrupt flag
    +              2
    +              1
    +            
    +            
    +              LSERDYF
    +              LSE ready interrupt flag
    +              1
    +              1
    +            
    +            
    +              LSIRDYF
    +              LSI ready interrupt flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CICR
    +          CICR
    +          Clock interrupt clear register
    +          0x18
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CSSHSEC
    +              Clock Security System Interrupt
    +              clear
    +              8
    +              1
    +            
    +            
    +              CSSLSEC
    +              LSE Clock Security System Interrupt
    +              clear
    +              7
    +              1
    +            
    +            
    +              MSIRDYC
    +              MSI ready Interrupt clear
    +              5
    +              1
    +            
    +            
    +              PLLRDYC
    +              PLL ready Interrupt clear
    +              4
    +              1
    +            
    +            
    +              HSERDYC
    +              HSE ready Interrupt clear
    +              3
    +              1
    +            
    +            
    +              HSI16RDYC
    +              HSI16 ready Interrupt
    +              clear
    +              2
    +              1
    +            
    +            
    +              LSERDYC
    +              LSE ready Interrupt clear
    +              1
    +              1
    +            
    +            
    +              LSIRDYC
    +              LSI ready Interrupt clear
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          IOPRSTR
    +          IOPRSTR
    +          GPIO reset register
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              IOPHRST
    +              I/O port H reset
    +              7
    +              1
    +            
    +            
    +              IOPDRST
    +              I/O port D reset
    +              3
    +              1
    +            
    +            
    +              IOPCRST
    +              I/O port A reset
    +              2
    +              1
    +            
    +            
    +              IOPBRST
    +              I/O port B reset
    +              1
    +              1
    +            
    +            
    +              IOPARST
    +              I/O port A reset
    +              0
    +              1
    +            
    +            
    +              IOPERST
    +              I/O port E reset
    +              4
    +              1
    +            
    +          
    +        
    +        
    +          AHBRSTR
    +          AHBRSTR
    +          AHB peripheral reset register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CRYPRST
    +              Crypto module reset
    +              24
    +              1
    +            
    +            
    +              CRCRST
    +              Test integration module
    +              reset
    +              12
    +              1
    +            
    +            
    +              MIFRST
    +              Memory interface reset
    +              8
    +              1
    +            
    +            
    +              DMARST
    +              DMA reset
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          APB2RSTR
    +          APB2RSTR
    +          APB2 peripheral reset register
    +          0x24
    +          0x20
    +          read-write
    +          0x000000000
    +          
    +            
    +              DBGRST
    +              DBG reset
    +              22
    +              1
    +            
    +            
    +              USART1RST
    +              USART1 reset
    +              14
    +              1
    +            
    +            
    +              SPI1RST
    +              SPI 1 reset
    +              12
    +              1
    +            
    +            
    +              ADCRST
    +              ADC interface reset
    +              9
    +              1
    +            
    +            
    +              TIM22RST
    +              TIM22 timer reset
    +              5
    +              1
    +            
    +            
    +              TIM21RST
    +              TIM21 timer reset
    +              2
    +              1
    +            
    +            
    +              SYSCFGRST
    +              System configuration controller
    +              reset
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          APB1RSTR
    +          APB1RSTR
    +          APB1 peripheral reset register
    +          0x28
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              LPTIM1RST
    +              Low power timer reset
    +              31
    +              1
    +            
    +            
    +              PWRRST
    +              Power interface reset
    +              28
    +              1
    +            
    +            
    +              I2C2RST
    +              I2C2 reset
    +              22
    +              1
    +            
    +            
    +              I2C1RST
    +              I2C1 reset
    +              21
    +              1
    +            
    +            
    +              LPUART1RST
    +              LPUART1 reset
    +              18
    +              1
    +            
    +            
    +              USART2RST
    +              USART2 reset
    +              17
    +              1
    +            
    +            
    +              SPI2RST
    +              SPI2 reset
    +              14
    +              1
    +            
    +            
    +              WWDGRST
    +              Window watchdog reset
    +              11
    +              1
    +            
    +            
    +              TIM6RST
    +              Timer 6 reset
    +              4
    +              1
    +            
    +            
    +              TIM2RST
    +              Timer 2 reset
    +              0
    +              1
    +            
    +            
    +              TIM3RST
    +              Timer 3 reset
    +              1
    +              1
    +            
    +            
    +              TIM7RST
    +              Timer 7 reset
    +              5
    +              1
    +            
    +            
    +              USART4RST
    +              USART4 reset
    +              19
    +              1
    +            
    +            
    +              USART5RST
    +              USART5 reset
    +              20
    +              1
    +            
    +            
    +              CRCRST
    +              CRC reset
    +              27
    +              1
    +            
    +            
    +              I2C3
    +              I2C3 reset
    +              30
    +              1
    +            
    +          
    +        
    +        
    +          IOPENR
    +          IOPENR
    +          GPIO clock enable register
    +          0x2C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              IOPHEN
    +              I/O port H clock enable
    +              bit
    +              7
    +              1
    +            
    +            
    +              IOPDEN
    +              I/O port D clock enable
    +              bit
    +              3
    +              1
    +            
    +            
    +              IOPCEN
    +              IO port A clock enable bit
    +              2
    +              1
    +            
    +            
    +              IOPBEN
    +              IO port B clock enable bit
    +              1
    +              1
    +            
    +            
    +              IOPAEN
    +              IO port A clock enable bit
    +              0
    +              1
    +            
    +            
    +              IOPEEN
    +              IO port E clock enable bit
    +              4
    +              1
    +            
    +          
    +        
    +        
    +          AHBENR
    +          AHBENR
    +          AHB peripheral clock enable
    +          register
    +          0x30
    +          0x20
    +          read-write
    +          0x00000100
    +          
    +            
    +              CRYPEN
    +              Crypto clock enable bit
    +              24
    +              1
    +            
    +            
    +              CRCEN
    +              CRC clock enable bit
    +              12
    +              1
    +            
    +            
    +              MIFEN
    +              NVM interface clock enable
    +              bit
    +              8
    +              1
    +            
    +            
    +              DMAEN
    +              DMA clock enable bit
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          APB2ENR
    +          APB2ENR
    +          APB2 peripheral clock enable
    +          register
    +          0x34
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DBGEN
    +              DBG clock enable bit
    +              22
    +              1
    +            
    +            
    +              USART1EN
    +              USART1 clock enable bit
    +              14
    +              1
    +            
    +            
    +              SPI1EN
    +              SPI1 clock enable bit
    +              12
    +              1
    +            
    +            
    +              ADCEN
    +              ADC clock enable bit
    +              9
    +              1
    +            
    +            
    +              FWEN
    +              Firewall clock enable bit
    +              7
    +              1
    +            
    +            
    +              TIM22EN
    +              TIM22 timer clock enable
    +              bit
    +              5
    +              1
    +            
    +            
    +              TIM21EN
    +              TIM21 timer clock enable
    +              bit
    +              2
    +              1
    +            
    +            
    +              SYSCFGEN
    +              System configuration controller clock
    +              enable bit
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          APB1ENR
    +          APB1ENR
    +          APB1 peripheral clock enable
    +          register
    +          0x38
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              LPTIM1EN
    +              Low power timer clock enable
    +              bit
    +              31
    +              1
    +            
    +            
    +              PWREN
    +              Power interface clock enable
    +              bit
    +              28
    +              1
    +            
    +            
    +              I2C2EN
    +              I2C2 clock enable bit
    +              22
    +              1
    +            
    +            
    +              I2C1EN
    +              I2C1 clock enable bit
    +              21
    +              1
    +            
    +            
    +              LPUART1EN
    +              LPUART1 clock enable bit
    +              18
    +              1
    +            
    +            
    +              USART2EN
    +              UART2 clock enable bit
    +              17
    +              1
    +            
    +            
    +              SPI2EN
    +              SPI2 clock enable bit
    +              14
    +              1
    +            
    +            
    +              WWDGEN
    +              Window watchdog clock enable
    +              bit
    +              11
    +              1
    +            
    +            
    +              TIM6EN
    +              Timer 6 clock enable bit
    +              4
    +              1
    +            
    +            
    +              TIM2EN
    +              Timer2 clock enable bit
    +              0
    +              1
    +            
    +            
    +              TIM3EN
    +              Timer 3 clock enbale bit
    +              2
    +              1
    +            
    +            
    +              TIM7EN
    +              Timer 7 clock enable bit
    +              5
    +              1
    +            
    +            
    +              USART4EN
    +              USART4 clock enable bit
    +              19
    +              1
    +            
    +            
    +              USART5EN
    +              USART5 clock enable bit
    +              20
    +              1
    +            
    +            
    +              I2C3EN
    +              I2C3 clock enable bit
    +              30
    +              1
    +            
    +          
    +        
    +        
    +          IOPSMEN
    +          IOPSMEN
    +          GPIO clock enable in sleep mode
    +          register
    +          0x3C
    +          0x20
    +          read-write
    +          0x0000008F
    +          
    +            
    +              IOPHSMEN
    +              Port H clock enable during Sleep mode
    +              bit
    +              7
    +              1
    +            
    +            
    +              IOPDSMEN
    +              Port D clock enable during Sleep mode
    +              bit
    +              3
    +              1
    +            
    +            
    +              IOPCSMEN
    +              Port C clock enable during Sleep mode
    +              bit
    +              2
    +              1
    +            
    +            
    +              IOPBSMEN
    +              Port B clock enable during Sleep mode
    +              bit
    +              1
    +              1
    +            
    +            
    +              IOPASMEN
    +              Port A clock enable during Sleep mode
    +              bit
    +              0
    +              1
    +            
    +            
    +              IOPESMEN
    +              Port E clock enable during Sleep mode
    +              bit
    +              4
    +              1
    +            
    +          
    +        
    +        
    +          AHBSMENR
    +          AHBSMENR
    +          AHB peripheral clock enable in sleep mode
    +          register
    +          0x40
    +          0x20
    +          read-write
    +          0x01111301
    +          
    +            
    +              CRYPTSMEN
    +              Crypto clock enable during sleep mode
    +              bit
    +              24
    +              1
    +            
    +            
    +              CRCSMEN
    +              CRC clock enable during sleep mode
    +              bit
    +              12
    +              1
    +            
    +            
    +              SRAMSMEN
    +              SRAM interface clock enable during sleep
    +              mode bit
    +              9
    +              1
    +            
    +            
    +              MIFSMEN
    +              NVM interface clock enable during sleep
    +              mode bit
    +              8
    +              1
    +            
    +            
    +              DMASMEN
    +              DMA clock enable during sleep mode
    +              bit
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          APB2SMENR
    +          APB2SMENR
    +          APB2 peripheral clock enable in sleep mode
    +          register
    +          0x44
    +          0x20
    +          read-write
    +          0x00405225
    +          
    +            
    +              DBGSMEN
    +              DBG clock enable during sleep mode
    +              bit
    +              22
    +              1
    +            
    +            
    +              USART1SMEN
    +              USART1 clock enable during sleep mode
    +              bit
    +              14
    +              1
    +            
    +            
    +              SPI1SMEN
    +              SPI1 clock enable during sleep mode
    +              bit
    +              12
    +              1
    +            
    +            
    +              ADCSMEN
    +              ADC clock enable during sleep mode
    +              bit
    +              9
    +              1
    +            
    +            
    +              TIM22SMEN
    +              TIM22 timer clock enable during sleep
    +              mode bit
    +              5
    +              1
    +            
    +            
    +              TIM21SMEN
    +              TIM21 timer clock enable during sleep
    +              mode bit
    +              2
    +              1
    +            
    +            
    +              SYSCFGSMEN
    +              System configuration controller clock
    +              enable during sleep mode bit
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          APB1SMENR
    +          APB1SMENR
    +          APB1 peripheral clock enable in sleep mode
    +          register
    +          0x48
    +          0x20
    +          read-write
    +          0xB8E64A11
    +          
    +            
    +              LPTIM1SMEN
    +              Low power timer clock enable during
    +              sleep mode bit
    +              31
    +              1
    +            
    +            
    +              PWRSMEN
    +              Power interface clock enable during
    +              sleep mode bit
    +              28
    +              1
    +            
    +            
    +              CRSSMEN
    +              Clock recovery system clock enable
    +              during sleep mode bit
    +              27
    +              1
    +            
    +            
    +              I2C2SMEN
    +              I2C2 clock enable during sleep mode
    +              bit
    +              22
    +              1
    +            
    +            
    +              I2C1SMEN
    +              I2C1 clock enable during sleep mode
    +              bit
    +              21
    +              1
    +            
    +            
    +              LPUART1SMEN
    +              LPUART1 clock enable during sleep mode
    +              bit
    +              18
    +              1
    +            
    +            
    +              USART2SMEN
    +              UART2 clock enable during sleep mode
    +              bit
    +              17
    +              1
    +            
    +            
    +              SPI2SMEN
    +              SPI2 clock enable during sleep mode
    +              bit
    +              14
    +              1
    +            
    +            
    +              WWDGSMEN
    +              Window watchdog clock enable during
    +              sleep mode bit
    +              11
    +              1
    +            
    +            
    +              TIM6SMEN
    +              Timer 6 clock enable during sleep mode
    +              bit
    +              4
    +              1
    +            
    +            
    +              TIM2SMEN
    +              Timer2 clock enable during sleep mode
    +              bit
    +              0
    +              1
    +            
    +            
    +              TIM3SMEN
    +              Timer 3 clock enable during sleep mode
    +              bit
    +              1
    +              1
    +            
    +            
    +              TIM7SMEN
    +              Timer 7 clock enable during sleep mode
    +              bit
    +              5
    +              1
    +            
    +            
    +              USART4SMEN
    +              USART4 clock enabe during sleep mode
    +              bit
    +              19
    +              1
    +            
    +            
    +              USART5SMEN
    +              USART5 clock enable during sleep mode
    +              bit
    +              20
    +              1
    +            
    +            
    +              I2C3SMEN
    +              I2C3 clock enable during sleep mode
    +              bit
    +              30
    +              1
    +            
    +          
    +        
    +        
    +          CCIPR
    +          CCIPR
    +          Clock configuration register
    +          0x4C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              LPTIM1SEL1
    +              Low Power Timer clock source selection
    +              bits
    +              19
    +              1
    +            
    +            
    +              LPTIM1SEL0
    +              LPTIM1SEL0
    +              18
    +              1
    +            
    +            
    +              I2C1SEL1
    +              I2C1 clock source selection
    +              bits
    +              13
    +              1
    +            
    +            
    +              I2C1SEL0
    +              I2C1SEL0
    +              12
    +              1
    +            
    +            
    +              LPUART1SEL1
    +              LPUART1 clock source selection
    +              bits
    +              11
    +              1
    +            
    +            
    +              LPUART1SEL0
    +              LPUART1SEL0
    +              10
    +              1
    +            
    +            
    +              USART2SEL1
    +              USART2 clock source selection
    +              bits
    +              3
    +              1
    +            
    +            
    +              USART2SEL0
    +              USART2SEL0
    +              2
    +              1
    +            
    +            
    +              USART1SEL1
    +              USART1 clock source selection
    +              bits
    +              1
    +              1
    +            
    +            
    +              USART1SEL0
    +              USART1SEL0
    +              0
    +              1
    +            
    +            
    +              I2C3SEL0
    +              I2C3 clock source selection
    +              bits
    +              16
    +              1
    +            
    +            
    +              I2C3SEL1
    +              I2C3 clock source selection
    +              bits
    +              17
    +              1
    +            
    +          
    +        
    +        
    +          CSR
    +          CSR
    +          Control and status register
    +          0x50
    +          0x20
    +          0x0C000000
    +          
    +            
    +              LPWRSTF
    +              Low-power reset flag
    +              31
    +              1
    +              read-write
    +            
    +            
    +              WWDGRSTF
    +              Window watchdog reset flag
    +              30
    +              1
    +              read-write
    +            
    +            
    +              IWDGRSTF
    +              Independent watchdog reset
    +              flag
    +              29
    +              1
    +              read-write
    +            
    +            
    +              SFTRSTF
    +              Software reset flag
    +              28
    +              1
    +              read-write
    +            
    +            
    +              PORRSTF
    +              POR/PDR reset flag
    +              27
    +              1
    +              read-write
    +            
    +            
    +              PINRSTF
    +              PIN reset flag
    +              26
    +              1
    +              read-write
    +            
    +            
    +              OBLRSTF
    +              OBLRSTF
    +              25
    +              1
    +              read-write
    +            
    +            
    +              FWRSTF
    +              Firewall reset flag
    +              24
    +              1
    +              read-write
    +            
    +            
    +              RTCRST
    +              RTC software reset bit
    +              19
    +              1
    +              read-write
    +            
    +            
    +              RTCEN
    +              RTC clock enable bit
    +              18
    +              1
    +              read-write
    +            
    +            
    +              RTCSEL
    +              RTC and LCD clock source selection
    +              bits
    +              16
    +              2
    +              read-write
    +            
    +            
    +              CSSLSED
    +              CSS on LSE failure detection
    +              flag
    +              14
    +              1
    +              read-write
    +            
    +            
    +              CSSLSEON
    +              CSSLSEON
    +              13
    +              1
    +              read-write
    +            
    +            
    +              LSEDRV
    +              LSEDRV
    +              11
    +              2
    +              read-write
    +            
    +            
    +              LSEBYP
    +              External low-speed oscillator bypass
    +              bit
    +              10
    +              1
    +              read-write
    +            
    +            
    +              LSERDY
    +              External low-speed oscillator ready
    +              bit
    +              9
    +              1
    +              read-only
    +            
    +            
    +              LSEON
    +              External low-speed oscillator enable
    +              bit
    +              8
    +              1
    +              read-write
    +            
    +            
    +              LSIRDY
    +              Internal low-speed oscillator ready
    +              bit
    +              1
    +              1
    +              read-only
    +            
    +            
    +              LSION
    +              Internal low-speed oscillator
    +              enable
    +              0
    +              1
    +              read-write
    +            
    +            
    +              LSIIWDGLP
    +              LSI clock input to IWDG in
    +              Ultra-low-power mode (Stop and Standby) enable
    +              bit
    +              2
    +              1
    +              read-write
    +            
    +            
    +              RMVF
    +              Remove reset flag
    +              23
    +              1
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      SYSCFG_COMP
    +      System configuration controller and COMP
    +      register
    +      SYSCFG
    +      0x40010000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          CFGR1
    +          CFGR1
    +          SYSCFG configuration register
    +          1
    +          0x0
    +          0x20
    +          0x00000000
    +          
    +            
    +              BOOT_MODE
    +              Boot mode selected by the boot pins
    +              status bits
    +              8
    +              2
    +              read-only
    +            
    +            
    +              MEM_MODE
    +              Memory mapping selection
    +              bits
    +              0
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          CFGR2
    +          CFGR2
    +          SYSCFG configuration register
    +          2
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              I2C2_FMP
    +              I2C2 Fm+ drive capability enable
    +              bit
    +              13
    +              1
    +            
    +            
    +              I2C1_FMP
    +              I2C1 Fm+ drive capability enable
    +              bit
    +              12
    +              1
    +            
    +            
    +              I2C_PB9_FMP
    +              Fm+ drive capability on PB9 enable
    +              bit
    +              11
    +              1
    +            
    +            
    +              I2C_PB8_FMP
    +              Fm+ drive capability on PB8 enable
    +              bit
    +              10
    +              1
    +            
    +            
    +              I2C_PB7_FMP
    +              Fm+ drive capability on PB7 enable
    +              bit
    +              9
    +              1
    +            
    +            
    +              I2C_PB6_FMP
    +              Fm+ drive capability on PB6 enable
    +              bit
    +              8
    +              1
    +            
    +            
    +              CAPA
    +              Configuration of internal VLCD rail
    +              connection to optional external
    +              capacitor
    +              1
    +              3
    +            
    +            
    +              FWDISEN
    +              Firewall disable bit
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          EXTICR1
    +          EXTICR1
    +          external interrupt configuration register
    +          1
    +          0x8
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              EXTI3
    +              EXTI x configuration (x = 0 to
    +              3)
    +              12
    +              4
    +            
    +            
    +              EXTI2
    +              EXTI x configuration (x = 0 to
    +              3)
    +              8
    +              4
    +            
    +            
    +              EXTI1
    +              EXTI x configuration (x = 0 to
    +              3)
    +              4
    +              4
    +            
    +            
    +              EXTI0
    +              EXTI x configuration (x = 0 to
    +              3)
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          EXTICR2
    +          EXTICR2
    +          external interrupt configuration register
    +          2
    +          0xC
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              EXTI7
    +              EXTI x configuration (x = 4 to
    +              7)
    +              12
    +              4
    +            
    +            
    +              EXTI6
    +              EXTI x configuration (x = 4 to
    +              7)
    +              8
    +              4
    +            
    +            
    +              EXTI5
    +              EXTI x configuration (x = 4 to
    +              7)
    +              4
    +              4
    +            
    +            
    +              EXTI4
    +              EXTI x configuration (x = 4 to
    +              7)
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          EXTICR3
    +          EXTICR3
    +          external interrupt configuration register
    +          3
    +          0x10
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              EXTI11
    +              EXTI x configuration (x = 8 to
    +              11)
    +              12
    +              4
    +            
    +            
    +              EXTI10
    +              EXTI10
    +              8
    +              4
    +            
    +            
    +              EXTI9
    +              EXTI x configuration (x = 8 to
    +              11)
    +              4
    +              4
    +            
    +            
    +              EXTI8
    +              EXTI x configuration (x = 8 to
    +              11)
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          EXTICR4
    +          EXTICR4
    +          external interrupt configuration register
    +          4
    +          0x14
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              EXTI15
    +              EXTI x configuration (x = 12 to
    +              15)
    +              12
    +              4
    +            
    +            
    +              EXTI14
    +              EXTI14
    +              8
    +              4
    +            
    +            
    +              EXTI13
    +              EXTI13
    +              4
    +              4
    +            
    +            
    +              EXTI12
    +              EXTI12
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          CFGR3
    +          CFGR3
    +          SYSCFG configuration register
    +          3
    +          0x20
    +          0x20
    +          0x00000000
    +          
    +            
    +              REF_LOCK
    +              REF_CTRL lock bit
    +              31
    +              1
    +              write-only
    +            
    +            
    +              VREFINT_RDYF
    +              VREFINT ready flag
    +              30
    +              1
    +              read-only
    +            
    +            
    +              VREFINT_COMP_RDYF
    +              VREFINT for comparator ready
    +              flag
    +              29
    +              1
    +              read-only
    +            
    +            
    +              VREFINT_ADC_RDYF
    +              VREFINT for ADC ready flag
    +              28
    +              1
    +              read-only
    +            
    +            
    +              SENSOR_ADC_RDYF
    +              Sensor for ADC ready flag
    +              27
    +              1
    +              read-only
    +            
    +            
    +              REF_RC48MHz_RDYF
    +              VREFINT for 48 MHz RC oscillator ready
    +              flag
    +              26
    +              1
    +              read-only
    +            
    +            
    +              ENREF_RC48MHz
    +              VREFINT reference for 48 MHz RC
    +              oscillator enable bit
    +              13
    +              1
    +              read-write
    +            
    +            
    +              ENBUF_VREFINT_COMP
    +              VREFINT reference for comparator 2
    +              enable bit
    +              12
    +              1
    +              read-write
    +            
    +            
    +              ENBUF_SENSOR_ADC
    +              Sensor reference for ADC enable
    +              bit
    +              9
    +              1
    +              read-write
    +            
    +            
    +              ENBUF_BGAP_ADC
    +              VREFINT reference for ADC enable
    +              bit
    +              8
    +              1
    +              read-write
    +            
    +            
    +              SEL_VREF_OUT
    +              BGAP_ADC connection bit
    +              4
    +              2
    +              read-write
    +            
    +            
    +              EN_BGAP
    +              Vref Enable bit
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          COMP1_CTRL
    +          COMP1_CTRL
    +          Comparator 1 control and status
    +          register
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              COMP1EN
    +              Comparator 1 enable bit
    +              0
    +              1
    +            
    +            
    +              COMP1INNSEL
    +              Comparator 1 Input Minus connection
    +              configuration bit
    +              4
    +              2
    +            
    +            
    +              COMP1WM
    +              Comparator 1 window mode selection
    +              bit
    +              8
    +              1
    +            
    +            
    +              COMP1LPTIMIN1
    +              Comparator 1 LPTIM input propagation
    +              bit
    +              12
    +              1
    +            
    +            
    +              COMP1POLARITY
    +              Comparator 1 polarity selection
    +              bit
    +              15
    +              1
    +            
    +            
    +              COMP1VALUE
    +              Comparator 1 output status
    +              bit
    +              30
    +              1
    +            
    +            
    +              COMP1LOCK
    +              COMP1_CSR register lock
    +              bit
    +              31
    +              1
    +            
    +          
    +        
    +        
    +          COMP2_CTRL
    +          COMP2_CTRL
    +          Comparator 2 control and status
    +          register
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              COMP2EN
    +              Comparator 2 enable bit
    +              0
    +              1
    +            
    +            
    +              COMP2SPEED
    +              Comparator 2 power mode selection
    +              bit
    +              3
    +              1
    +            
    +            
    +              COMP2INNSEL
    +              Comparator 2 Input Minus connection
    +              configuration bit
    +              4
    +              3
    +            
    +            
    +              COMP2INPSEL
    +              Comparator 2 Input Plus connection
    +              configuration bit
    +              8
    +              3
    +            
    +            
    +              COMP2LPTIMIN2
    +              Comparator 2 LPTIM input 2 propagation
    +              bit
    +              12
    +              1
    +            
    +            
    +              COMP2LPTIMIN1
    +              Comparator 2 LPTIM input 1 propagation
    +              bit
    +              13
    +              1
    +            
    +            
    +              COMP2POLARITY
    +              Comparator 2 polarity selection
    +              bit
    +              15
    +              1
    +            
    +            
    +              COMP2VALUE
    +              Comparator 2 output status
    +              bit
    +              30
    +              1
    +            
    +            
    +              COMP2LOCK
    +              COMP2_CSR register lock
    +              bit
    +              31
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      SPI1
    +      Serial peripheral interface
    +      SPI
    +      0x40013000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        SPI1
    +        SPI1_global_interrupt
    +        25
    +      
    +      
    +        
    +          CR1
    +          CR1
    +          control register 1
    +          0x0
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              BIDIMODE
    +              Bidirectional data mode
    +              enable
    +              15
    +              1
    +            
    +            
    +              BIDIOE
    +              Output enable in bidirectional
    +              mode
    +              14
    +              1
    +            
    +            
    +              CRCEN
    +              Hardware CRC calculation
    +              enable
    +              13
    +              1
    +            
    +            
    +              CRCNEXT
    +              CRC transfer next
    +              12
    +              1
    +            
    +            
    +              DFF
    +              Data frame format
    +              11
    +              1
    +            
    +            
    +              RXONLY
    +              Receive only
    +              10
    +              1
    +            
    +            
    +              SSM
    +              Software slave management
    +              9
    +              1
    +            
    +            
    +              SSI
    +              Internal slave select
    +              8
    +              1
    +            
    +            
    +              LSBFIRST
    +              Frame format
    +              7
    +              1
    +            
    +            
    +              SPE
    +              SPI enable
    +              6
    +              1
    +            
    +            
    +              BR
    +              Baud rate control
    +              3
    +              3
    +            
    +            
    +              MSTR
    +              Master selection
    +              2
    +              1
    +            
    +            
    +              CPOL
    +              Clock polarity
    +              1
    +              1
    +            
    +            
    +              CPHA
    +              Clock phase
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CR2
    +          CR2
    +          control register 2
    +          0x4
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              RXDMAEN
    +              Rx buffer DMA enable
    +              0
    +              1
    +            
    +            
    +              TXDMAEN
    +              Tx buffer DMA enable
    +              1
    +              1
    +            
    +            
    +              SSOE
    +              SS output enable
    +              2
    +              1
    +            
    +            
    +              FRF
    +              Frame format
    +              4
    +              1
    +            
    +            
    +              ERRIE
    +              Error interrupt enable
    +              5
    +              1
    +            
    +            
    +              RXNEIE
    +              RX buffer not empty interrupt
    +              enable
    +              6
    +              1
    +            
    +            
    +              TXEIE
    +              Tx buffer empty interrupt
    +              enable
    +              7
    +              1
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          status register
    +          0x8
    +          0x20
    +          0x0002
    +          
    +            
    +              RXNE
    +              Receive buffer not empty
    +              0
    +              1
    +              read-only
    +            
    +            
    +              TXE
    +              Transmit buffer empty
    +              1
    +              1
    +              read-only
    +            
    +            
    +              CHSIDE
    +              Channel side
    +              2
    +              1
    +              read-only
    +            
    +            
    +              UDR
    +              Underrun flag
    +              3
    +              1
    +              read-only
    +            
    +            
    +              CRCERR
    +              CRC error flag
    +              4
    +              1
    +              read-write
    +            
    +            
    +              MODF
    +              Mode fault
    +              5
    +              1
    +              read-only
    +            
    +            
    +              OVR
    +              Overrun flag
    +              6
    +              1
    +              read-only
    +            
    +            
    +              BSY
    +              Busy flag
    +              7
    +              1
    +              read-only
    +            
    +            
    +              TIFRFE
    +              TI frame format error
    +              8
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          DR
    +          DR
    +          data register
    +          0xC
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              DR
    +              Data register
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CRCPR
    +          CRCPR
    +          CRC polynomial register
    +          0x10
    +          0x20
    +          read-write
    +          0x0007
    +          
    +            
    +              CRCPOLY
    +              CRC polynomial register
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          RXCRCR
    +          RXCRCR
    +          RX CRC register
    +          0x14
    +          0x20
    +          read-only
    +          0x0000
    +          
    +            
    +              RxCRC
    +              Rx CRC register
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          TXCRCR
    +          TXCRCR
    +          TX CRC register
    +          0x18
    +          0x20
    +          read-only
    +          0x0000
    +          
    +            
    +              TxCRC
    +              Tx CRC register
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          I2SCFGR
    +          I2SCFGR
    +          I2S configuration register
    +          0x1C
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              I2SMOD
    +              I2S mode selection
    +              11
    +              1
    +            
    +            
    +              I2SE
    +              I2S Enable
    +              10
    +              1
    +            
    +            
    +              I2SCFG
    +              I2S configuration mode
    +              8
    +              2
    +            
    +            
    +              PCMSYNC
    +              PCM frame synchronization
    +              7
    +              1
    +            
    +            
    +              I2SSTD
    +              I2S standard selection
    +              4
    +              2
    +            
    +            
    +              CKPOL
    +              Steady state clock
    +              polarity
    +              3
    +              1
    +            
    +            
    +              DATLEN
    +              Data length to be
    +              transferred
    +              1
    +              2
    +            
    +            
    +              CHLEN
    +              Channel length (number of bits per audio
    +              channel)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          I2SPR
    +          I2SPR
    +          I2S prescaler register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000010
    +          
    +            
    +              MCKOE
    +              Master clock output enable
    +              9
    +              1
    +            
    +            
    +              ODD
    +              Odd factor for the
    +              prescaler
    +              8
    +              1
    +            
    +            
    +              I2SDIV
    +              I2S Linear prescaler
    +              0
    +              8
    +            
    +          
    +        
    +      
    +    
    +    
    +      SPI2
    +      0x40003800
    +      
    +        SPI2
    +        SPI2 global interrupt
    +        26
    +      
    +    
    +    
    +      I2C1
    +      Inter-integrated circuit
    +      I2C
    +      0x40005400
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        I2C1
    +        I2C1 global interrupt
    +        23
    +      
    +      
    +        
    +          CR1
    +          CR1
    +          Control register 1
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PE
    +              Peripheral enable
    +              0
    +              1
    +            
    +            
    +              TXIE
    +              TX Interrupt enable
    +              1
    +              1
    +            
    +            
    +              RXIE
    +              RX Interrupt enable
    +              2
    +              1
    +            
    +            
    +              ADDRIE
    +              Address match interrupt enable (slave
    +              only)
    +              3
    +              1
    +            
    +            
    +              NACKIE
    +              Not acknowledge received interrupt
    +              enable
    +              4
    +              1
    +            
    +            
    +              STOPIE
    +              STOP detection Interrupt
    +              enable
    +              5
    +              1
    +            
    +            
    +              TCIE
    +              Transfer Complete interrupt
    +              enable
    +              6
    +              1
    +            
    +            
    +              ERRIE
    +              Error interrupts enable
    +              7
    +              1
    +            
    +            
    +              DNF
    +              Digital noise filter
    +              8
    +              4
    +            
    +            
    +              ANFOFF
    +              Analog noise filter OFF
    +              12
    +              1
    +            
    +            
    +              TXDMAEN
    +              DMA transmission requests
    +              enable
    +              14
    +              1
    +            
    +            
    +              RXDMAEN
    +              DMA reception requests
    +              enable
    +              15
    +              1
    +            
    +            
    +              SBC
    +              Slave byte control
    +              16
    +              1
    +            
    +            
    +              NOSTRETCH
    +              Clock stretching disable
    +              17
    +              1
    +            
    +            
    +              WUPEN
    +              Wakeup from STOP enable
    +              18
    +              1
    +            
    +            
    +              GCEN
    +              General call enable
    +              19
    +              1
    +            
    +            
    +              SMBHEN
    +              SMBus Host address enable
    +              20
    +              1
    +            
    +            
    +              SMBDEN
    +              SMBus Device Default address
    +              enable
    +              21
    +              1
    +            
    +            
    +              ALERTEN
    +              SMBUS alert enable
    +              22
    +              1
    +            
    +            
    +              PECEN
    +              PEC enable
    +              23
    +              1
    +            
    +          
    +        
    +        
    +          CR2
    +          CR2
    +          Control register 2
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PECBYTE
    +              Packet error checking byte
    +              26
    +              1
    +            
    +            
    +              AUTOEND
    +              Automatic end mode (master
    +              mode)
    +              25
    +              1
    +            
    +            
    +              RELOAD
    +              NBYTES reload mode
    +              24
    +              1
    +            
    +            
    +              NBYTES
    +              Number of bytes
    +              16
    +              8
    +            
    +            
    +              NACK
    +              NACK generation (slave
    +              mode)
    +              15
    +              1
    +            
    +            
    +              STOP
    +              Stop generation (master
    +              mode)
    +              14
    +              1
    +            
    +            
    +              START
    +              Start generation
    +              13
    +              1
    +            
    +            
    +              HEAD10R
    +              10-bit address header only read
    +              direction (master receiver mode)
    +              12
    +              1
    +            
    +            
    +              ADD10
    +              10-bit addressing mode (master
    +              mode)
    +              11
    +              1
    +            
    +            
    +              RD_WRN
    +              Transfer direction (master
    +              mode)
    +              10
    +              1
    +            
    +            
    +              SADD
    +              Slave address bit (master
    +              mode)
    +              0
    +              10
    +            
    +          
    +        
    +        
    +          OAR1
    +          OAR1
    +          Own address register 1
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OA1
    +              Interface address
    +              0
    +              10
    +            
    +            
    +              OA1MODE
    +              Own Address 1 10-bit mode
    +              10
    +              1
    +            
    +            
    +              OA1EN
    +              Own Address 1 enable
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          OAR2
    +          OAR2
    +          Own address register 2
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OA2
    +              Interface address
    +              1
    +              7
    +            
    +            
    +              OA2MSK
    +              Own Address 2 masks
    +              8
    +              3
    +            
    +            
    +              OA2EN
    +              Own Address 2 enable
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          TIMINGR
    +          TIMINGR
    +          Timing register
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              SCLL
    +              SCL low period (master
    +              mode)
    +              0
    +              8
    +            
    +            
    +              SCLH
    +              SCL high period (master
    +              mode)
    +              8
    +              8
    +            
    +            
    +              SDADEL
    +              Data hold time
    +              16
    +              4
    +            
    +            
    +              SCLDEL
    +              Data setup time
    +              20
    +              4
    +            
    +            
    +              PRESC
    +              Timing prescaler
    +              28
    +              4
    +            
    +          
    +        
    +        
    +          TIMEOUTR
    +          TIMEOUTR
    +          Status register 1
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              TIMEOUTA
    +              Bus timeout A
    +              0
    +              12
    +            
    +            
    +              TIDLE
    +              Idle clock timeout
    +              detection
    +              12
    +              1
    +            
    +            
    +              TIMOUTEN
    +              Clock timeout enable
    +              15
    +              1
    +            
    +            
    +              TIMEOUTB
    +              Bus timeout B
    +              16
    +              12
    +            
    +            
    +              TEXTEN
    +              Extended clock timeout
    +              enable
    +              31
    +              1
    +            
    +          
    +        
    +        
    +          ISR
    +          ISR
    +          Interrupt and Status register
    +          0x18
    +          0x20
    +          0x00000001
    +          
    +            
    +              ADDCODE
    +              Address match code (Slave
    +              mode)
    +              17
    +              7
    +              read-only
    +            
    +            
    +              DIR
    +              Transfer direction (Slave
    +              mode)
    +              16
    +              1
    +              read-only
    +            
    +            
    +              BUSY
    +              Bus busy
    +              15
    +              1
    +              read-only
    +            
    +            
    +              ALERT
    +              SMBus alert
    +              13
    +              1
    +              read-only
    +            
    +            
    +              TIMEOUT
    +              Timeout or t_low detection
    +              flag
    +              12
    +              1
    +              read-only
    +            
    +            
    +              PECERR
    +              PEC Error in reception
    +              11
    +              1
    +              read-only
    +            
    +            
    +              OVR
    +              Overrun/Underrun (slave
    +              mode)
    +              10
    +              1
    +              read-only
    +            
    +            
    +              ARLO
    +              Arbitration lost
    +              9
    +              1
    +              read-only
    +            
    +            
    +              BERR
    +              Bus error
    +              8
    +              1
    +              read-only
    +            
    +            
    +              TCR
    +              Transfer Complete Reload
    +              7
    +              1
    +              read-only
    +            
    +            
    +              TC
    +              Transfer Complete (master
    +              mode)
    +              6
    +              1
    +              read-only
    +            
    +            
    +              STOPF
    +              Stop detection flag
    +              5
    +              1
    +              read-only
    +            
    +            
    +              NACKF
    +              Not acknowledge received
    +              flag
    +              4
    +              1
    +              read-only
    +            
    +            
    +              ADDR
    +              Address matched (slave
    +              mode)
    +              3
    +              1
    +              read-only
    +            
    +            
    +              RXNE
    +              Receive data register not empty
    +              (receivers)
    +              2
    +              1
    +              read-only
    +            
    +            
    +              TXIS
    +              Transmit interrupt status
    +              (transmitters)
    +              1
    +              1
    +              read-write
    +            
    +            
    +              TXE
    +              Transmit data register empty
    +              (transmitters)
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          ICR
    +          ICR
    +          Interrupt clear register
    +          0x1C
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              ALERTCF
    +              Alert flag clear
    +              13
    +              1
    +            
    +            
    +              TIMOUTCF
    +              Timeout detection flag
    +              clear
    +              12
    +              1
    +            
    +            
    +              PECCF
    +              PEC Error flag clear
    +              11
    +              1
    +            
    +            
    +              OVRCF
    +              Overrun/Underrun flag
    +              clear
    +              10
    +              1
    +            
    +            
    +              ARLOCF
    +              Arbitration lost flag
    +              clear
    +              9
    +              1
    +            
    +            
    +              BERRCF
    +              Bus error flag clear
    +              8
    +              1
    +            
    +            
    +              STOPCF
    +              Stop detection flag clear
    +              5
    +              1
    +            
    +            
    +              NACKCF
    +              Not Acknowledge flag clear
    +              4
    +              1
    +            
    +            
    +              ADDRCF
    +              Address Matched flag clear
    +              3
    +              1
    +            
    +          
    +        
    +        
    +          PECR
    +          PECR
    +          PEC register
    +          0x20
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              PEC
    +              Packet error checking
    +              register
    +              0
    +              8
    +            
    +          
    +        
    +        
    +          RXDR
    +          RXDR
    +          Receive data register
    +          0x24
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              RXDATA
    +              8-bit receive data
    +              0
    +              8
    +            
    +          
    +        
    +        
    +          TXDR
    +          TXDR
    +          Transmit data register
    +          0x28
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              TXDATA
    +              8-bit transmit data
    +              0
    +              8
    +            
    +          
    +        
    +      
    +    
    +    
    +      I2C2
    +      0x40005800
    +      
    +        I2C2
    +        I2C2 global interrupt
    +        24
    +      
    +    
    +    
    +      I2C3
    +      0x40007800
    +      
    +        I2C3
    +        I2C3 global interrupt
    +        21
    +      
    +    
    +    
    +      PWR
    +      Power control
    +      PWR
    +      0x40007000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          CR
    +          CR
    +          power control register
    +          0x0
    +          0x20
    +          read-write
    +          0x00001000
    +          
    +            
    +              LPDS
    +              Low-power deep sleep
    +              0
    +              1
    +            
    +            
    +              PDDS
    +              Power down deepsleep
    +              1
    +              1
    +            
    +            
    +              CWUF
    +              Clear wakeup flag
    +              2
    +              1
    +            
    +            
    +              CSBF
    +              Clear standby flag
    +              3
    +              1
    +            
    +            
    +              PVDE
    +              Power voltage detector
    +              enable
    +              4
    +              1
    +            
    +            
    +              PLS
    +              PVD level selection
    +              5
    +              3
    +            
    +            
    +              DBP
    +              Disable backup domain write
    +              protection
    +              8
    +              1
    +            
    +            
    +              ULP
    +              Ultra-low-power mode
    +              9
    +              1
    +            
    +            
    +              FWU
    +              Fast wakeup
    +              10
    +              1
    +            
    +            
    +              VOS
    +              Voltage scaling range
    +              selection
    +              11
    +              2
    +            
    +            
    +              DS_EE_KOFF
    +              Deep sleep mode with Flash memory kept
    +              off
    +              13
    +              1
    +            
    +            
    +              LPRUN
    +              Low power run mode
    +              14
    +              1
    +            
    +          
    +        
    +        
    +          CSR
    +          CSR
    +          power control/status register
    +          0x4
    +          0x20
    +          0x00000000
    +          
    +            
    +              BRE
    +              Backup regulator enable
    +              9
    +              1
    +              read-write
    +            
    +            
    +              EWUP
    +              Enable WKUP pin
    +              8
    +              1
    +              read-write
    +            
    +            
    +              BRR
    +              Backup regulator ready
    +              3
    +              1
    +              read-only
    +            
    +            
    +              PVDO
    +              PVD output
    +              2
    +              1
    +              read-only
    +            
    +            
    +              SBF
    +              Standby flag
    +              1
    +              1
    +              read-only
    +            
    +            
    +              WUF
    +              Wakeup flag
    +              0
    +              1
    +              read-only
    +            
    +            
    +              VOSF
    +              Voltage Scaling select
    +              flag
    +              4
    +              1
    +              read-only
    +            
    +            
    +              REGLPF
    +              Regulator LP flag
    +              5
    +              1
    +              read-only
    +            
    +          
    +        
    +      
    +    
    +    
    +      Flash
    +      Flash
    +      Flash
    +      0x40022000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        FLASH
    +        Flash global interrupt
    +        3
    +      
    +      
    +        
    +          ACR
    +          ACR
    +          Access control register
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              LATENCY
    +              Latency
    +              0
    +              1
    +            
    +            
    +              PRFTEN
    +              Prefetch enable
    +              1
    +              1
    +            
    +            
    +              SLEEP_PD
    +              Flash mode during Sleep
    +              3
    +              1
    +            
    +            
    +              RUN_PD
    +              Flash mode during Run
    +              4
    +              1
    +            
    +            
    +              DESAB_BUF
    +              Disable Buffer
    +              5
    +              1
    +            
    +            
    +              PRE_READ
    +              Pre-read data address
    +              6
    +              1
    +            
    +          
    +        
    +        
    +          PECR
    +          PECR
    +          Program/erase control register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000007
    +          
    +            
    +              PELOCK
    +              FLASH_PECR and data EEPROM
    +              lock
    +              0
    +              1
    +            
    +            
    +              PRGLOCK
    +              Program memory lock
    +              1
    +              1
    +            
    +            
    +              OPTLOCK
    +              Option bytes block lock
    +              2
    +              1
    +            
    +            
    +              PROG
    +              Program memory selection
    +              3
    +              1
    +            
    +            
    +              DATA
    +              Data EEPROM selection
    +              4
    +              1
    +            
    +            
    +              FTDW
    +              Fixed time data write for Byte, Half
    +              Word and Word programming
    +              8
    +              1
    +            
    +            
    +              ERASE
    +              Page or Double Word erase
    +              mode
    +              9
    +              1
    +            
    +            
    +              FPRG
    +              Half Page/Double Word programming
    +              mode
    +              10
    +              1
    +            
    +            
    +              PARALLELBANK
    +              Parallel bank mode
    +              15
    +              1
    +            
    +            
    +              EOPIE
    +              End of programming interrupt
    +              enable
    +              16
    +              1
    +            
    +            
    +              ERRIE
    +              Error interrupt enable
    +              17
    +              1
    +            
    +            
    +              OBL_LAUNCH
    +              Launch the option byte
    +              loading
    +              18
    +              1
    +            
    +          
    +        
    +        
    +          PDKEYR
    +          PDKEYR
    +          Power down key register
    +          0x8
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              PDKEYR
    +              RUN_PD in FLASH_ACR key
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          PEKEYR
    +          PEKEYR
    +          Program/erase key register
    +          0xC
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              PEKEYR
    +              FLASH_PEC and data EEPROM
    +              key
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          PRGKEYR
    +          PRGKEYR
    +          Program memory key register
    +          0x10
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              PRGKEYR
    +              Program memory key
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          OPTKEYR
    +          OPTKEYR
    +          Option byte key register
    +          0x14
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              OPTKEYR
    +              Option byte key
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          Status register
    +          0x18
    +          0x20
    +          0x00000004
    +          
    +            
    +              BSY
    +              Write/erase operations in
    +              progress
    +              0
    +              1
    +              read-only
    +            
    +            
    +              EOP
    +              End of operation
    +              1
    +              1
    +              read-only
    +            
    +            
    +              ENDHV
    +              End of high voltage
    +              2
    +              1
    +              read-only
    +            
    +            
    +              READY
    +              Flash memory module ready after low
    +              power mode
    +              3
    +              1
    +              read-only
    +            
    +            
    +              WRPERR
    +              Write protected error
    +              8
    +              1
    +              read-write
    +            
    +            
    +              PGAERR
    +              Programming alignment
    +              error
    +              9
    +              1
    +              read-write
    +            
    +            
    +              SIZERR
    +              Size error
    +              10
    +              1
    +              read-write
    +            
    +            
    +              OPTVERR
    +              Option validity error
    +              11
    +              1
    +              read-write
    +            
    +            
    +              RDERR
    +              RDERR
    +              14
    +              1
    +              read-write
    +            
    +            
    +              NOTZEROERR
    +              NOTZEROERR
    +              16
    +              1
    +              read-write
    +            
    +            
    +              FWWERR
    +              FWWERR
    +              17
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          OBR
    +          OBR
    +          Option byte register
    +          0x1C
    +          0x20
    +          read-only
    +          0x00F80000
    +          
    +            
    +              RDPRT
    +              Read protection
    +              0
    +              8
    +            
    +            
    +              BOR_LEV
    +              BOR_LEV
    +              16
    +              4
    +            
    +            
    +              SPRMOD
    +              Selection of protection mode of WPR
    +              bits
    +              8
    +              1
    +            
    +          
    +        
    +        
    +          WRPR
    +          WRPR
    +          Write protection register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              WRP
    +              Write protection
    +              0
    +              16
    +            
    +          
    +        
    +      
    +    
    +    
    +      EXTI
    +      External interrupt/event
    +      controller
    +      EXTI
    +      0x40010400
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        PVD
    +        PVD through EXTI line detection
    +        1
    +      
    +      
    +        EXTI0_1
    +        EXTI Line[1:0] interrupts
    +        5
    +      
    +      
    +        EXTI2_3
    +        EXTI Line[3:2] interrupts
    +        6
    +      
    +      
    +        EXTI4_15
    +        EXTI Line15 and EXTI4 interrupts
    +        7
    +      
    +      
    +        
    +          IMR
    +          IMR
    +          Interrupt mask register
    +          (EXTI_IMR)
    +          0x0
    +          0x20
    +          read-write
    +          0xFF840000
    +          
    +            
    +              IM0
    +              Interrupt Mask on line 0
    +              0
    +              1
    +            
    +            
    +              IM1
    +              Interrupt Mask on line 1
    +              1
    +              1
    +            
    +            
    +              IM2
    +              Interrupt Mask on line 2
    +              2
    +              1
    +            
    +            
    +              IM3
    +              Interrupt Mask on line 3
    +              3
    +              1
    +            
    +            
    +              IM4
    +              Interrupt Mask on line 4
    +              4
    +              1
    +            
    +            
    +              IM5
    +              Interrupt Mask on line 5
    +              5
    +              1
    +            
    +            
    +              IM6
    +              Interrupt Mask on line 6
    +              6
    +              1
    +            
    +            
    +              IM7
    +              Interrupt Mask on line 7
    +              7
    +              1
    +            
    +            
    +              IM8
    +              Interrupt Mask on line 8
    +              8
    +              1
    +            
    +            
    +              IM9
    +              Interrupt Mask on line 9
    +              9
    +              1
    +            
    +            
    +              IM10
    +              Interrupt Mask on line 10
    +              10
    +              1
    +            
    +            
    +              IM11
    +              Interrupt Mask on line 11
    +              11
    +              1
    +            
    +            
    +              IM12
    +              Interrupt Mask on line 12
    +              12
    +              1
    +            
    +            
    +              IM13
    +              Interrupt Mask on line 13
    +              13
    +              1
    +            
    +            
    +              IM14
    +              Interrupt Mask on line 14
    +              14
    +              1
    +            
    +            
    +              IM15
    +              Interrupt Mask on line 15
    +              15
    +              1
    +            
    +            
    +              IM16
    +              Interrupt Mask on line 16
    +              16
    +              1
    +            
    +            
    +              IM17
    +              Interrupt Mask on line 17
    +              17
    +              1
    +            
    +            
    +              IM18
    +              Interrupt Mask on line 18
    +              18
    +              1
    +            
    +            
    +              IM19
    +              Interrupt Mask on line 19
    +              19
    +              1
    +            
    +            
    +              IM20
    +              Interrupt Mask on line 20
    +              20
    +              1
    +            
    +            
    +              IM21
    +              Interrupt Mask on line 21
    +              21
    +              1
    +            
    +            
    +              IM22
    +              Interrupt Mask on line 22
    +              22
    +              1
    +            
    +            
    +              IM23
    +              Interrupt Mask on line 23
    +              23
    +              1
    +            
    +            
    +              IM24
    +              Interrupt Mask on line 24
    +              24
    +              1
    +            
    +            
    +              IM25
    +              Interrupt Mask on line 25
    +              25
    +              1
    +            
    +            
    +              IM26
    +              Interrupt Mask on line 27
    +              26
    +              1
    +            
    +            
    +              IM28
    +              Interrupt Mask on line 27
    +              28
    +              1
    +            
    +            
    +              IM29
    +              Interrupt Mask on line 27
    +              29
    +              1
    +            
    +          
    +        
    +        
    +          EMR
    +          EMR
    +          Event mask register (EXTI_EMR)
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              EM0
    +              Event Mask on line 0
    +              0
    +              1
    +            
    +            
    +              EM1
    +              Event Mask on line 1
    +              1
    +              1
    +            
    +            
    +              EM2
    +              Event Mask on line 2
    +              2
    +              1
    +            
    +            
    +              EM3
    +              Event Mask on line 3
    +              3
    +              1
    +            
    +            
    +              EM4
    +              Event Mask on line 4
    +              4
    +              1
    +            
    +            
    +              EM5
    +              Event Mask on line 5
    +              5
    +              1
    +            
    +            
    +              EM6
    +              Event Mask on line 6
    +              6
    +              1
    +            
    +            
    +              EM7
    +              Event Mask on line 7
    +              7
    +              1
    +            
    +            
    +              EM8
    +              Event Mask on line 8
    +              8
    +              1
    +            
    +            
    +              EM9
    +              Event Mask on line 9
    +              9
    +              1
    +            
    +            
    +              EM10
    +              Event Mask on line 10
    +              10
    +              1
    +            
    +            
    +              EM11
    +              Event Mask on line 11
    +              11
    +              1
    +            
    +            
    +              EM12
    +              Event Mask on line 12
    +              12
    +              1
    +            
    +            
    +              EM13
    +              Event Mask on line 13
    +              13
    +              1
    +            
    +            
    +              EM14
    +              Event Mask on line 14
    +              14
    +              1
    +            
    +            
    +              EM15
    +              Event Mask on line 15
    +              15
    +              1
    +            
    +            
    +              EM16
    +              Event Mask on line 16
    +              16
    +              1
    +            
    +            
    +              EM17
    +              Event Mask on line 17
    +              17
    +              1
    +            
    +            
    +              EM18
    +              Event Mask on line 18
    +              18
    +              1
    +            
    +            
    +              EM19
    +              Event Mask on line 19
    +              19
    +              1
    +            
    +            
    +              EM20
    +              Event Mask on line 20
    +              20
    +              1
    +            
    +            
    +              EM21
    +              Event Mask on line 21
    +              21
    +              1
    +            
    +            
    +              EM22
    +              Event Mask on line 22
    +              22
    +              1
    +            
    +            
    +              EM23
    +              Event Mask on line 23
    +              23
    +              1
    +            
    +            
    +              EM24
    +              Event Mask on line 24
    +              24
    +              1
    +            
    +            
    +              EM25
    +              Event Mask on line 25
    +              25
    +              1
    +            
    +            
    +              EM26
    +              Event Mask on line 26
    +              26
    +              1
    +            
    +            
    +              EM28
    +              Event Mask on line 28
    +              28
    +              1
    +            
    +            
    +              EM29
    +              Event Mask on line 29
    +              29
    +              1
    +            
    +          
    +        
    +        
    +          RTSR
    +          RTSR
    +          Rising Trigger selection register
    +          (EXTI_RTSR)
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              RT0
    +              Rising trigger event configuration of
    +              line 0
    +              0
    +              1
    +            
    +            
    +              RT1
    +              Rising trigger event configuration of
    +              line 1
    +              1
    +              1
    +            
    +            
    +              RT2
    +              Rising trigger event configuration of
    +              line 2
    +              2
    +              1
    +            
    +            
    +              RT3
    +              Rising trigger event configuration of
    +              line 3
    +              3
    +              1
    +            
    +            
    +              RT4
    +              Rising trigger event configuration of
    +              line 4
    +              4
    +              1
    +            
    +            
    +              RT5
    +              Rising trigger event configuration of
    +              line 5
    +              5
    +              1
    +            
    +            
    +              RT6
    +              Rising trigger event configuration of
    +              line 6
    +              6
    +              1
    +            
    +            
    +              RT7
    +              Rising trigger event configuration of
    +              line 7
    +              7
    +              1
    +            
    +            
    +              RT8
    +              Rising trigger event configuration of
    +              line 8
    +              8
    +              1
    +            
    +            
    +              RT9
    +              Rising trigger event configuration of
    +              line 9
    +              9
    +              1
    +            
    +            
    +              RT10
    +              Rising trigger event configuration of
    +              line 10
    +              10
    +              1
    +            
    +            
    +              RT11
    +              Rising trigger event configuration of
    +              line 11
    +              11
    +              1
    +            
    +            
    +              RT12
    +              Rising trigger event configuration of
    +              line 12
    +              12
    +              1
    +            
    +            
    +              RT13
    +              Rising trigger event configuration of
    +              line 13
    +              13
    +              1
    +            
    +            
    +              RT14
    +              Rising trigger event configuration of
    +              line 14
    +              14
    +              1
    +            
    +            
    +              RT15
    +              Rising trigger event configuration of
    +              line 15
    +              15
    +              1
    +            
    +            
    +              RT16
    +              Rising trigger event configuration of
    +              line 16
    +              16
    +              1
    +            
    +            
    +              RT17
    +              Rising trigger event configuration of
    +              line 17
    +              17
    +              1
    +            
    +            
    +              RT19
    +              Rising trigger event configuration of
    +              line 19
    +              19
    +              1
    +            
    +            
    +              RT20
    +              Rising trigger event configuration of
    +              line 20
    +              20
    +              1
    +            
    +            
    +              RT21
    +              Rising trigger event configuration of
    +              line 21
    +              21
    +              1
    +            
    +            
    +              RT22
    +              Rising trigger event configuration of
    +              line 22
    +              22
    +              1
    +            
    +          
    +        
    +        
    +          FTSR
    +          FTSR
    +          Falling Trigger selection register
    +          (EXTI_FTSR)
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              FT0
    +              Falling trigger event configuration of
    +              line 0
    +              0
    +              1
    +            
    +            
    +              FT1
    +              Falling trigger event configuration of
    +              line 1
    +              1
    +              1
    +            
    +            
    +              FT2
    +              Falling trigger event configuration of
    +              line 2
    +              2
    +              1
    +            
    +            
    +              FT3
    +              Falling trigger event configuration of
    +              line 3
    +              3
    +              1
    +            
    +            
    +              FT4
    +              Falling trigger event configuration of
    +              line 4
    +              4
    +              1
    +            
    +            
    +              FT5
    +              Falling trigger event configuration of
    +              line 5
    +              5
    +              1
    +            
    +            
    +              FT6
    +              Falling trigger event configuration of
    +              line 6
    +              6
    +              1
    +            
    +            
    +              FT7
    +              Falling trigger event configuration of
    +              line 7
    +              7
    +              1
    +            
    +            
    +              FT8
    +              Falling trigger event configuration of
    +              line 8
    +              8
    +              1
    +            
    +            
    +              FT9
    +              Falling trigger event configuration of
    +              line 9
    +              9
    +              1
    +            
    +            
    +              FT10
    +              Falling trigger event configuration of
    +              line 10
    +              10
    +              1
    +            
    +            
    +              FT11
    +              Falling trigger event configuration of
    +              line 11
    +              11
    +              1
    +            
    +            
    +              FT12
    +              Falling trigger event configuration of
    +              line 12
    +              12
    +              1
    +            
    +            
    +              FT13
    +              Falling trigger event configuration of
    +              line 13
    +              13
    +              1
    +            
    +            
    +              FT14
    +              Falling trigger event configuration of
    +              line 14
    +              14
    +              1
    +            
    +            
    +              FT15
    +              Falling trigger event configuration of
    +              line 15
    +              15
    +              1
    +            
    +            
    +              FT16
    +              Falling trigger event configuration of
    +              line 16
    +              16
    +              1
    +            
    +            
    +              FT17
    +              Falling trigger event configuration of
    +              line 17
    +              17
    +              1
    +            
    +            
    +              FT19
    +              Falling trigger event configuration of
    +              line 19
    +              19
    +              1
    +            
    +            
    +              FT20
    +              Falling trigger event configuration of
    +              line 20
    +              20
    +              1
    +            
    +            
    +              FT21
    +              Falling trigger event configuration of
    +              line 21
    +              21
    +              1
    +            
    +            
    +              FT22
    +              Falling trigger event configuration of
    +              line 22
    +              22
    +              1
    +            
    +          
    +        
    +        
    +          SWIER
    +          SWIER
    +          Software interrupt event register
    +          (EXTI_SWIER)
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              SWI0
    +              Software Interrupt on line
    +              0
    +              0
    +              1
    +            
    +            
    +              SWI1
    +              Software Interrupt on line
    +              1
    +              1
    +              1
    +            
    +            
    +              SWI2
    +              Software Interrupt on line
    +              2
    +              2
    +              1
    +            
    +            
    +              SWI3
    +              Software Interrupt on line
    +              3
    +              3
    +              1
    +            
    +            
    +              SWI4
    +              Software Interrupt on line
    +              4
    +              4
    +              1
    +            
    +            
    +              SWI5
    +              Software Interrupt on line
    +              5
    +              5
    +              1
    +            
    +            
    +              SWI6
    +              Software Interrupt on line
    +              6
    +              6
    +              1
    +            
    +            
    +              SWI7
    +              Software Interrupt on line
    +              7
    +              7
    +              1
    +            
    +            
    +              SWI8
    +              Software Interrupt on line
    +              8
    +              8
    +              1
    +            
    +            
    +              SWI9
    +              Software Interrupt on line
    +              9
    +              9
    +              1
    +            
    +            
    +              SWI10
    +              Software Interrupt on line
    +              10
    +              10
    +              1
    +            
    +            
    +              SWI11
    +              Software Interrupt on line
    +              11
    +              11
    +              1
    +            
    +            
    +              SWI12
    +              Software Interrupt on line
    +              12
    +              12
    +              1
    +            
    +            
    +              SWI13
    +              Software Interrupt on line
    +              13
    +              13
    +              1
    +            
    +            
    +              SWI14
    +              Software Interrupt on line
    +              14
    +              14
    +              1
    +            
    +            
    +              SWI15
    +              Software Interrupt on line
    +              15
    +              15
    +              1
    +            
    +            
    +              SWI16
    +              Software Interrupt on line
    +              16
    +              16
    +              1
    +            
    +            
    +              SWI17
    +              Software Interrupt on line
    +              17
    +              17
    +              1
    +            
    +            
    +              SWI19
    +              Software Interrupt on line
    +              19
    +              19
    +              1
    +            
    +            
    +              SWI20
    +              Software Interrupt on line
    +              20
    +              20
    +              1
    +            
    +            
    +              SWI21
    +              Software Interrupt on line
    +              21
    +              21
    +              1
    +            
    +            
    +              SWI22
    +              Software Interrupt on line
    +              22
    +              22
    +              1
    +            
    +          
    +        
    +        
    +          PR
    +          PR
    +          Pending register (EXTI_PR)
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PIF0
    +              Pending bit 0
    +              0
    +              1
    +            
    +            
    +              PIF1
    +              Pending bit 1
    +              1
    +              1
    +            
    +            
    +              PIF2
    +              Pending bit 2
    +              2
    +              1
    +            
    +            
    +              PIF3
    +              Pending bit 3
    +              3
    +              1
    +            
    +            
    +              PIF4
    +              Pending bit 4
    +              4
    +              1
    +            
    +            
    +              PIF5
    +              Pending bit 5
    +              5
    +              1
    +            
    +            
    +              PIF6
    +              Pending bit 6
    +              6
    +              1
    +            
    +            
    +              PIF7
    +              Pending bit 7
    +              7
    +              1
    +            
    +            
    +              PIF8
    +              Pending bit 8
    +              8
    +              1
    +            
    +            
    +              PIF9
    +              Pending bit 9
    +              9
    +              1
    +            
    +            
    +              PIF10
    +              Pending bit 10
    +              10
    +              1
    +            
    +            
    +              PIF11
    +              Pending bit 11
    +              11
    +              1
    +            
    +            
    +              PIF12
    +              Pending bit 12
    +              12
    +              1
    +            
    +            
    +              PIF13
    +              Pending bit 13
    +              13
    +              1
    +            
    +            
    +              PIF14
    +              Pending bit 14
    +              14
    +              1
    +            
    +            
    +              PIF15
    +              Pending bit 15
    +              15
    +              1
    +            
    +            
    +              PIF16
    +              Pending bit 16
    +              16
    +              1
    +            
    +            
    +              PIF17
    +              Pending bit 17
    +              17
    +              1
    +            
    +            
    +              PIF19
    +              Pending bit 19
    +              19
    +              1
    +            
    +            
    +              PIF20
    +              Pending bit 20
    +              20
    +              1
    +            
    +            
    +              PIF21
    +              Pending bit 21
    +              21
    +              1
    +            
    +            
    +              PIF22
    +              Pending bit 22
    +              22
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      ADC
    +      Analog-to-digital converter
    +      ADC
    +      0x40012400
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        ADC_COMP
    +        ADC and comparator 1 and 2
    +        12
    +      
    +      
    +        
    +          ISR
    +          ISR
    +          interrupt and status register
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ADRDY
    +              ADC ready
    +              0
    +              1
    +            
    +            
    +              EOSMP
    +              End of sampling flag
    +              1
    +              1
    +            
    +            
    +              EOC
    +              End of conversion flag
    +              2
    +              1
    +            
    +            
    +              EOS
    +              End of sequence flag
    +              3
    +              1
    +            
    +            
    +              OVR
    +              ADC overrun
    +              4
    +              1
    +            
    +            
    +              AWD
    +              Analog watchdog flag
    +              7
    +              1
    +            
    +            
    +              EOCAL
    +              End Of Calibration flag
    +              11
    +              1
    +            
    +          
    +        
    +        
    +          IER
    +          IER
    +          interrupt enable register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ADRDYIE
    +              ADC ready interrupt enable
    +              0
    +              1
    +            
    +            
    +              EOSMPIE
    +              End of sampling flag interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              EOCIE
    +              End of conversion interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              EOSIE
    +              End of conversion sequence interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              OVRIE
    +              Overrun interrupt enable
    +              4
    +              1
    +            
    +            
    +              AWDIE
    +              Analog watchdog interrupt
    +              enable
    +              7
    +              1
    +            
    +            
    +              EOCALIE
    +              End of calibration interrupt
    +              enable
    +              11
    +              1
    +            
    +          
    +        
    +        
    +          CR
    +          CR
    +          control register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ADEN
    +              ADC enable command
    +              0
    +              1
    +            
    +            
    +              ADDIS
    +              ADC disable command
    +              1
    +              1
    +            
    +            
    +              ADSTART
    +              ADC start conversion
    +              command
    +              2
    +              1
    +            
    +            
    +              ADSTP
    +              ADC stop conversion
    +              command
    +              4
    +              1
    +            
    +            
    +              ADVREGEN
    +              ADC Voltage Regulator
    +              Enable
    +              28
    +              1
    +            
    +            
    +              ADCAL
    +              ADC calibration
    +              31
    +              1
    +            
    +          
    +        
    +        
    +          CFGR1
    +          CFGR1
    +          configuration register 1
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AWDCH
    +              Analog watchdog channel
    +              selection
    +              26
    +              5
    +            
    +            
    +              AWDEN
    +              Analog watchdog enable
    +              23
    +              1
    +            
    +            
    +              AWDSGL
    +              Enable the watchdog on a single channel
    +              or on all channels
    +              22
    +              1
    +            
    +            
    +              DISCEN
    +              Discontinuous mode
    +              16
    +              1
    +            
    +            
    +              AUTOFF
    +              Auto-off mode
    +              15
    +              1
    +            
    +            
    +              AUTDLY
    +              Auto-delayed conversion
    +              mode
    +              14
    +              1
    +            
    +            
    +              CONT
    +              Single / continuous conversion
    +              mode
    +              13
    +              1
    +            
    +            
    +              OVRMOD
    +              Overrun management mode
    +              12
    +              1
    +            
    +            
    +              EXTEN
    +              External trigger enable and polarity
    +              selection
    +              10
    +              2
    +            
    +            
    +              EXTSEL
    +              External trigger selection
    +              6
    +              3
    +            
    +            
    +              ALIGN
    +              Data alignment
    +              5
    +              1
    +            
    +            
    +              RES
    +              Data resolution
    +              3
    +              2
    +            
    +            
    +              SCANDIR
    +              Scan sequence direction
    +              2
    +              1
    +            
    +            
    +              DMACFG
    +              Direct memery access
    +              configuration
    +              1
    +              1
    +            
    +            
    +              DMAEN
    +              Direct memory access
    +              enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CFGR2
    +          CFGR2
    +          configuration register 2
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OVSE
    +              Oversampler Enable
    +              0
    +              1
    +            
    +            
    +              OVSR
    +              Oversampling ratio
    +              2
    +              3
    +            
    +            
    +              OVSS
    +              Oversampling shift
    +              5
    +              4
    +            
    +            
    +              TOVS
    +              Triggered Oversampling
    +              9
    +              1
    +            
    +            
    +              CKMODE
    +              ADC clock mode
    +              30
    +              2
    +            
    +          
    +        
    +        
    +          SMPR
    +          SMPR
    +          sampling time register
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              SMPR
    +              Sampling time selection
    +              0
    +              3
    +            
    +          
    +        
    +        
    +          TR
    +          TR
    +          watchdog threshold register
    +          0x20
    +          0x20
    +          read-write
    +          0x0FFF0000
    +          
    +            
    +              HT
    +              Analog watchdog higher
    +              threshold
    +              16
    +              12
    +            
    +            
    +              LT
    +              Analog watchdog lower
    +              threshold
    +              0
    +              12
    +            
    +          
    +        
    +        
    +          CHSELR
    +          CHSELR
    +          channel selection register
    +          0x28
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CHSEL18
    +              Channel-x selection
    +              18
    +              1
    +            
    +            
    +              CHSEL17
    +              Channel-x selection
    +              17
    +              1
    +            
    +            
    +              CHSEL16
    +              Channel-x selection
    +              16
    +              1
    +            
    +            
    +              CHSEL15
    +              Channel-x selection
    +              15
    +              1
    +            
    +            
    +              CHSEL14
    +              Channel-x selection
    +              14
    +              1
    +            
    +            
    +              CHSEL13
    +              Channel-x selection
    +              13
    +              1
    +            
    +            
    +              CHSEL12
    +              Channel-x selection
    +              12
    +              1
    +            
    +            
    +              CHSEL11
    +              Channel-x selection
    +              11
    +              1
    +            
    +            
    +              CHSEL10
    +              Channel-x selection
    +              10
    +              1
    +            
    +            
    +              CHSEL9
    +              Channel-x selection
    +              9
    +              1
    +            
    +            
    +              CHSEL8
    +              Channel-x selection
    +              8
    +              1
    +            
    +            
    +              CHSEL7
    +              Channel-x selection
    +              7
    +              1
    +            
    +            
    +              CHSEL6
    +              Channel-x selection
    +              6
    +              1
    +            
    +            
    +              CHSEL5
    +              Channel-x selection
    +              5
    +              1
    +            
    +            
    +              CHSEL4
    +              Channel-x selection
    +              4
    +              1
    +            
    +            
    +              CHSEL3
    +              Channel-x selection
    +              3
    +              1
    +            
    +            
    +              CHSEL2
    +              Channel-x selection
    +              2
    +              1
    +            
    +            
    +              CHSEL1
    +              Channel-x selection
    +              1
    +              1
    +            
    +            
    +              CHSEL0
    +              Channel-x selection
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          DR
    +          DR
    +          data register
    +          0x40
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              DATA
    +              Converted data
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CALFACT
    +          CALFACT
    +          ADC Calibration factor
    +          0xB4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CALFACT
    +              Calibration factor
    +              0
    +              7
    +            
    +          
    +        
    +        
    +          CCR
    +          CCR
    +          ADC common configuration
    +          register
    +          0x308
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRESC
    +              ADC prescaler
    +              18
    +              4
    +            
    +            
    +              VREFEN
    +              VREFINT enable
    +              22
    +              1
    +            
    +            
    +              TSEN
    +              Temperature sensor enable
    +              23
    +              1
    +            
    +            
    +              VLCDEN
    +              VLCD enable
    +              24
    +              1
    +            
    +            
    +              LFMEN
    +              Low Frequency Mode enable
    +              25
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      DBG
    +      Debug support
    +      DBGMCU
    +      0x40015800
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          IDCODE
    +          IDCODE
    +          MCU Device ID Code Register
    +          0x0
    +          0x20
    +          read-only
    +          0x0
    +          
    +            
    +              DEV_ID
    +              Device Identifier
    +              0
    +              12
    +            
    +            
    +              REV_ID
    +              Revision Identifier
    +              16
    +              16
    +            
    +          
    +        
    +        
    +          CR
    +          CR
    +          Debug MCU Configuration
    +          Register
    +          0x4
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              DBG_STOP
    +              Debug Stop Mode
    +              1
    +              1
    +            
    +            
    +              DBG_STANDBY
    +              Debug Standby Mode
    +              2
    +              1
    +            
    +            
    +              DBG_SLEEP
    +              Debug Sleep Mode
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          APB1_FZ
    +          APB1_FZ
    +          APB Low Freeze Register
    +          0x8
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              DBG_TIMER2_STOP
    +              Debug Timer 2 stopped when Core is
    +              halted
    +              0
    +              1
    +            
    +            
    +              DBG_TIMER6_STOP
    +              Debug Timer 6 stopped when Core is
    +              halted
    +              4
    +              1
    +            
    +            
    +              DBG_RTC_STOP
    +              Debug RTC stopped when Core is
    +              halted
    +              10
    +              1
    +            
    +            
    +              DBG_WWDG_STOP
    +              Debug Window Wachdog stopped when Core
    +              is halted
    +              11
    +              1
    +            
    +            
    +              DBG_IWDG_STOP
    +              Debug Independent Wachdog stopped when
    +              Core is halted
    +              12
    +              1
    +            
    +            
    +              DBG_I2C1_STOP
    +              I2C1 SMBUS timeout mode stopped when
    +              core is halted
    +              21
    +              1
    +            
    +            
    +              DBG_I2C2_STOP
    +              I2C2 SMBUS timeout mode stopped when
    +              core is halted
    +              22
    +              1
    +            
    +            
    +              DBG_LPTIMER_STOP
    +              LPTIM1 counter stopped when core is
    +              halted
    +              31
    +              1
    +            
    +          
    +        
    +        
    +          APB2_FZ
    +          APB2_FZ
    +          APB High Freeze Register
    +          0xC
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              DBG_TIMER21_STOP
    +              Debug Timer 21 stopped when Core is
    +              halted
    +              2
    +              1
    +            
    +            
    +              DBG_TIMER22_STO
    +              Debug Timer 22 stopped when Core is
    +              halted
    +              6
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      TIM2
    +      General-purpose-timers
    +      TIM
    +      0x40000000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        TIM2
    +        TIM2 global interrupt
    +        15
    +      
    +      
    +        
    +          CR1
    +          CR1
    +          control register 1
    +          0x0
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              CKD
    +              Clock division
    +              8
    +              2
    +            
    +            
    +              ARPE
    +              Auto-reload preload enable
    +              7
    +              1
    +            
    +            
    +              CMS
    +              Center-aligned mode
    +              selection
    +              5
    +              2
    +            
    +            
    +              DIR
    +              Direction
    +              4
    +              1
    +            
    +            
    +              OPM
    +              One-pulse mode
    +              3
    +              1
    +            
    +            
    +              URS
    +              Update request source
    +              2
    +              1
    +            
    +            
    +              UDIS
    +              Update disable
    +              1
    +              1
    +            
    +            
    +              CEN
    +              Counter enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CR2
    +          CR2
    +          control register 2
    +          0x4
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              TI1S
    +              TI1 selection
    +              7
    +              1
    +            
    +            
    +              MMS
    +              Master mode selection
    +              4
    +              3
    +            
    +            
    +              CCDS
    +              Capture/compare DMA
    +              selection
    +              3
    +              1
    +            
    +          
    +        
    +        
    +          SMCR
    +          SMCR
    +          slave mode control register
    +          0x8
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              ETP
    +              External trigger polarity
    +              15
    +              1
    +            
    +            
    +              ECE
    +              External clock enable
    +              14
    +              1
    +            
    +            
    +              ETPS
    +              External trigger prescaler
    +              12
    +              2
    +            
    +            
    +              ETF
    +              External trigger filter
    +              8
    +              4
    +            
    +            
    +              MSM
    +              Master/Slave mode
    +              7
    +              1
    +            
    +            
    +              TS
    +              Trigger selection
    +              4
    +              3
    +            
    +            
    +              SMS
    +              Slave mode selection
    +              0
    +              3
    +            
    +          
    +        
    +        
    +          DIER
    +          DIER
    +          DMA/Interrupt enable register
    +          0xC
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              TDE
    +              Trigger DMA request enable
    +              14
    +              1
    +            
    +            
    +              CC4DE
    +              Capture/Compare 4 DMA request
    +              enable
    +              12
    +              1
    +            
    +            
    +              CC3DE
    +              Capture/Compare 3 DMA request
    +              enable
    +              11
    +              1
    +            
    +            
    +              CC2DE
    +              Capture/Compare 2 DMA request
    +              enable
    +              10
    +              1
    +            
    +            
    +              CC1DE
    +              Capture/Compare 1 DMA request
    +              enable
    +              9
    +              1
    +            
    +            
    +              UDE
    +              Update DMA request enable
    +              8
    +              1
    +            
    +            
    +              TIE
    +              Trigger interrupt enable
    +              6
    +              1
    +            
    +            
    +              CC4IE
    +              Capture/Compare 4 interrupt
    +              enable
    +              4
    +              1
    +            
    +            
    +              CC3IE
    +              Capture/Compare 3 interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              CC2IE
    +              Capture/Compare 2 interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              CC1IE
    +              Capture/Compare 1 interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              UIE
    +              Update interrupt enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          status register
    +          0x10
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              CC4OF
    +              Capture/Compare 4 overcapture
    +              flag
    +              12
    +              1
    +            
    +            
    +              CC3OF
    +              Capture/Compare 3 overcapture
    +              flag
    +              11
    +              1
    +            
    +            
    +              CC2OF
    +              Capture/compare 2 overcapture
    +              flag
    +              10
    +              1
    +            
    +            
    +              CC1OF
    +              Capture/Compare 1 overcapture
    +              flag
    +              9
    +              1
    +            
    +            
    +              TIF
    +              Trigger interrupt flag
    +              6
    +              1
    +            
    +            
    +              CC4IF
    +              Capture/Compare 4 interrupt
    +              flag
    +              4
    +              1
    +            
    +            
    +              CC3IF
    +              Capture/Compare 3 interrupt
    +              flag
    +              3
    +              1
    +            
    +            
    +              CC2IF
    +              Capture/Compare 2 interrupt
    +              flag
    +              2
    +              1
    +            
    +            
    +              CC1IF
    +              Capture/compare 1 interrupt
    +              flag
    +              1
    +              1
    +            
    +            
    +              UIF
    +              Update interrupt flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          EGR
    +          EGR
    +          event generation register
    +          0x14
    +          0x20
    +          write-only
    +          0x0000
    +          
    +            
    +              TG
    +              Trigger generation
    +              6
    +              1
    +            
    +            
    +              CC4G
    +              Capture/compare 4
    +              generation
    +              4
    +              1
    +            
    +            
    +              CC3G
    +              Capture/compare 3
    +              generation
    +              3
    +              1
    +            
    +            
    +              CC2G
    +              Capture/compare 2
    +              generation
    +              2
    +              1
    +            
    +            
    +              CC1G
    +              Capture/compare 1
    +              generation
    +              1
    +              1
    +            
    +            
    +              UG
    +              Update generation
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CCMR1_Output
    +          CCMR1_Output
    +          capture/compare mode register 1 (output
    +          mode)
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OC2CE
    +              Output compare 2 clear
    +              enable
    +              15
    +              1
    +            
    +            
    +              OC2M
    +              Output compare 2 mode
    +              12
    +              3
    +            
    +            
    +              OC2PE
    +              Output compare 2 preload
    +              enable
    +              11
    +              1
    +            
    +            
    +              OC2FE
    +              Output compare 2 fast
    +              enable
    +              10
    +              1
    +            
    +            
    +              CC2S
    +              Capture/Compare 2
    +              selection
    +              8
    +              2
    +            
    +            
    +              OC1CE
    +              Output compare 1 clear
    +              enable
    +              7
    +              1
    +            
    +            
    +              OC1M
    +              Output compare 1 mode
    +              4
    +              3
    +            
    +            
    +              OC1PE
    +              Output compare 1 preload
    +              enable
    +              3
    +              1
    +            
    +            
    +              OC1FE
    +              Output compare 1 fast
    +              enable
    +              2
    +              1
    +            
    +            
    +              CC1S
    +              Capture/Compare 1
    +              selection
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          CCMR1_Input
    +          CCMR1_Input
    +          capture/compare mode register 1 (input
    +          mode)
    +          CCMR1_Output
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              IC2F
    +              Input capture 2 filter
    +              12
    +              4
    +            
    +            
    +              IC2PSC
    +              Input capture 2 prescaler
    +              10
    +              2
    +            
    +            
    +              CC2S
    +              Capture/compare 2
    +              selection
    +              8
    +              2
    +            
    +            
    +              IC1F
    +              Input capture 1 filter
    +              4
    +              4
    +            
    +            
    +              IC1PSC
    +              Input capture 1 prescaler
    +              2
    +              2
    +            
    +            
    +              CC1S
    +              Capture/Compare 1
    +              selection
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          CCMR2_Output
    +          CCMR2_Output
    +          capture/compare mode register 2 (output
    +          mode)
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OC4CE
    +              Output compare 4 clear
    +              enable
    +              15
    +              1
    +            
    +            
    +              OC4M
    +              Output compare 4 mode
    +              12
    +              3
    +            
    +            
    +              OC4PE
    +              Output compare 4 preload
    +              enable
    +              11
    +              1
    +            
    +            
    +              OC4FE
    +              Output compare 4 fast
    +              enable
    +              10
    +              1
    +            
    +            
    +              CC4S
    +              Capture/Compare 4
    +              selection
    +              8
    +              2
    +            
    +            
    +              OC3CE
    +              Output compare 3 clear
    +              enable
    +              7
    +              1
    +            
    +            
    +              OC3M
    +              Output compare 3 mode
    +              4
    +              3
    +            
    +            
    +              OC3PE
    +              Output compare 3 preload
    +              enable
    +              3
    +              1
    +            
    +            
    +              OC3FE
    +              Output compare 3 fast
    +              enable
    +              2
    +              1
    +            
    +            
    +              CC3S
    +              Capture/Compare 3
    +              selection
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          CCMR2_Input
    +          CCMR2_Input
    +          capture/compare mode register 2 (input
    +          mode)
    +          CCMR2_Output
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              IC4F
    +              Input capture 4 filter
    +              12
    +              4
    +            
    +            
    +              IC4PSC
    +              Input capture 4 prescaler
    +              10
    +              2
    +            
    +            
    +              CC4S
    +              Capture/Compare 4
    +              selection
    +              8
    +              2
    +            
    +            
    +              IC3F
    +              Input capture 3 filter
    +              4
    +              4
    +            
    +            
    +              IC3PSC
    +              Input capture 3 prescaler
    +              2
    +              2
    +            
    +            
    +              CC3S
    +              Capture/Compare 3
    +              selection
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          CCER
    +          CCER
    +          capture/compare enable
    +          register
    +          0x20
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              CC4NP
    +              Capture/Compare 4 output
    +              Polarity
    +              15
    +              1
    +            
    +            
    +              CC4P
    +              Capture/Compare 3 output
    +              Polarity
    +              13
    +              1
    +            
    +            
    +              CC4E
    +              Capture/Compare 4 output
    +              enable
    +              12
    +              1
    +            
    +            
    +              CC3NP
    +              Capture/Compare 3 output
    +              Polarity
    +              11
    +              1
    +            
    +            
    +              CC3P
    +              Capture/Compare 3 output
    +              Polarity
    +              9
    +              1
    +            
    +            
    +              CC3E
    +              Capture/Compare 3 output
    +              enable
    +              8
    +              1
    +            
    +            
    +              CC2NP
    +              Capture/Compare 2 output
    +              Polarity
    +              7
    +              1
    +            
    +            
    +              CC2P
    +              Capture/Compare 2 output
    +              Polarity
    +              5
    +              1
    +            
    +            
    +              CC2E
    +              Capture/Compare 2 output
    +              enable
    +              4
    +              1
    +            
    +            
    +              CC1NP
    +              Capture/Compare 1 output
    +              Polarity
    +              3
    +              1
    +            
    +            
    +              CC1P
    +              Capture/Compare 1 output
    +              Polarity
    +              1
    +              1
    +            
    +            
    +              CC1E
    +              Capture/Compare 1 output
    +              enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNT
    +          CNT
    +          counter
    +          0x24
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CNT_H
    +              High counter value (TIM2
    +              only)
    +              16
    +              16
    +            
    +            
    +              CNT_L
    +              Low counter value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          PSC
    +          PSC
    +          prescaler
    +          0x28
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              PSC
    +              Prescaler value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          ARR
    +          ARR
    +          auto-reload register
    +          0x2C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ARR_H
    +              High Auto-reload value (TIM2
    +              only)
    +              16
    +              16
    +            
    +            
    +              ARR_L
    +              Low Auto-reload value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CCR1
    +          CCR1
    +          capture/compare register 1
    +          0x34
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CCR1_H
    +              High Capture/Compare 1 value (TIM2
    +              only)
    +              16
    +              16
    +            
    +            
    +              CCR1_L
    +              Low Capture/Compare 1
    +              value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CCR2
    +          CCR2
    +          capture/compare register 2
    +          0x38
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CCR2_H
    +              High Capture/Compare 2 value (TIM2
    +              only)
    +              16
    +              16
    +            
    +            
    +              CCR2_L
    +              Low Capture/Compare 2
    +              value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CCR3
    +          CCR3
    +          capture/compare register 3
    +          0x3C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CCR3_H
    +              High Capture/Compare value (TIM2
    +              only)
    +              16
    +              16
    +            
    +            
    +              CCR3_L
    +              Low Capture/Compare value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CCR4
    +          CCR4
    +          capture/compare register 4
    +          0x40
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CCR4_H
    +              High Capture/Compare value (TIM2
    +              only)
    +              16
    +              16
    +            
    +            
    +              CCR4_L
    +              Low Capture/Compare value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          DCR
    +          DCR
    +          DMA control register
    +          0x48
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              DBL
    +              DMA burst length
    +              8
    +              5
    +            
    +            
    +              DBA
    +              DMA base address
    +              0
    +              5
    +            
    +          
    +        
    +        
    +          DMAR
    +          DMAR
    +          DMA address for full transfer
    +          0x4C
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              DMAB
    +              DMA register for burst
    +              accesses
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          OR
    +          OR
    +          TIM2 option register
    +          0x50
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              ETR_RMP
    +              Timer2 ETR remap
    +              0
    +              3
    +            
    +            
    +              TI4_RMP
    +              Internal trigger
    +              3
    +              2
    +            
    +          
    +        
    +      
    +    
    +    
    +      TIM3
    +      0x40000400
    +      
    +        TIM3
    +        TIM3 global interrupt
    +        16
    +      
    +    
    +    
    +      TIM6
    +      Basic-timers
    +      TIM
    +      0x40001000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        TIM6
    +        TIM6 global interrupt and DAC
    +        17
    +      
    +      
    +        
    +          CR1
    +          CR1
    +          control register 1
    +          0x0
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              ARPE
    +              Auto-reload preload enable
    +              7
    +              1
    +            
    +            
    +              OPM
    +              One-pulse mode
    +              3
    +              1
    +            
    +            
    +              URS
    +              Update request source
    +              2
    +              1
    +            
    +            
    +              UDIS
    +              Update disable
    +              1
    +              1
    +            
    +            
    +              CEN
    +              Counter enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CR2
    +          CR2
    +          control register 2
    +          0x4
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              MMS
    +              Master mode selection
    +              4
    +              3
    +            
    +          
    +        
    +        
    +          DIER
    +          DIER
    +          DMA/Interrupt enable register
    +          0xC
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              UDE
    +              Update DMA request enable
    +              8
    +              1
    +            
    +            
    +              UIE
    +              Update interrupt enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          status register
    +          0x10
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              UIF
    +              Update interrupt flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          EGR
    +          EGR
    +          event generation register
    +          0x14
    +          0x20
    +          write-only
    +          0x0000
    +          
    +            
    +              UG
    +              Update generation
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNT
    +          CNT
    +          counter
    +          0x24
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CNT
    +              Low counter value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          PSC
    +          PSC
    +          prescaler
    +          0x28
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              PSC
    +              Prescaler value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          ARR
    +          ARR
    +          auto-reload register
    +          0x2C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ARR
    +              Low Auto-reload value
    +              0
    +              16
    +            
    +          
    +        
    +      
    +    
    +    
    +      TIM7
    +      0x40001400
    +      
    +        TIM7
    +        TIM7 global interrupt and DAC
    +        18
    +      
    +    
    +    
    +      TIM21
    +      General-purpose-timers
    +      TIM
    +      0x40010800
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        TIM21
    +        TIMER21 global interrupt
    +        20
    +      
    +      
    +        
    +          CR1
    +          CR1
    +          control register 1
    +          0x0
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              CEN
    +              Counter enable
    +              0
    +              1
    +            
    +            
    +              UDIS
    +              Update disable
    +              1
    +              1
    +            
    +            
    +              URS
    +              Update request source
    +              2
    +              1
    +            
    +            
    +              OPM
    +              One-pulse mode
    +              3
    +              1
    +            
    +            
    +              DIR
    +              Direction
    +              4
    +              1
    +            
    +            
    +              CMS
    +              Center-aligned mode
    +              selection
    +              5
    +              2
    +            
    +            
    +              ARPE
    +              Auto-reload preload enable
    +              7
    +              1
    +            
    +            
    +              CKD
    +              Clock division
    +              8
    +              2
    +            
    +          
    +        
    +        
    +          CR2
    +          CR2
    +          control register 2
    +          0x4
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              MMS
    +              Master mode selection
    +              4
    +              3
    +            
    +          
    +        
    +        
    +          SMCR
    +          SMCR
    +          slave mode control register
    +          0x8
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              SMS
    +              Slave mode selection
    +              0
    +              3
    +            
    +            
    +              TS
    +              Trigger selection
    +              4
    +              3
    +            
    +            
    +              MSM
    +              Master/Slave mode
    +              7
    +              1
    +            
    +            
    +              ETF
    +              External trigger filter
    +              8
    +              4
    +            
    +            
    +              ETPS
    +              External trigger prescaler
    +              12
    +              2
    +            
    +            
    +              ECE
    +              External clock enable
    +              14
    +              1
    +            
    +            
    +              ETP
    +              External trigger polarity
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          DIER
    +          DIER
    +          DMA/Interrupt enable register
    +          0xC
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              TIE
    +              Trigger interrupt enable
    +              6
    +              1
    +            
    +            
    +              CC2IE
    +              Capture/Compare 2 interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              CC1IE
    +              Capture/Compare 1 interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              UIE
    +              Update interrupt enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          status register
    +          0x10
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              CC2OF
    +              Capture/compare 2 overcapture
    +              flag
    +              10
    +              1
    +            
    +            
    +              CC1OF
    +              Capture/Compare 1 overcapture
    +              flag
    +              9
    +              1
    +            
    +            
    +              TIF
    +              Trigger interrupt flag
    +              6
    +              1
    +            
    +            
    +              CC2IF
    +              Capture/Compare 2 interrupt
    +              flag
    +              2
    +              1
    +            
    +            
    +              CC1IF
    +              Capture/compare 1 interrupt
    +              flag
    +              1
    +              1
    +            
    +            
    +              UIF
    +              Update interrupt flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          EGR
    +          EGR
    +          event generation register
    +          0x14
    +          0x20
    +          write-only
    +          0x0000
    +          
    +            
    +              TG
    +              Trigger generation
    +              6
    +              1
    +            
    +            
    +              CC2G
    +              Capture/compare 2
    +              generation
    +              2
    +              1
    +            
    +            
    +              CC1G
    +              Capture/compare 1
    +              generation
    +              1
    +              1
    +            
    +            
    +              UG
    +              Update generation
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CCMR1_Output
    +          CCMR1_Output
    +          capture/compare mode register (output
    +          mode)
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OC2M
    +              Output Compare 2 mode
    +              12
    +              3
    +            
    +            
    +              OC2PE
    +              Output Compare 2 preload
    +              enable
    +              11
    +              1
    +            
    +            
    +              OC2FE
    +              Output Compare 2 fast
    +              enable
    +              10
    +              1
    +            
    +            
    +              CC2S
    +              Capture/Compare 2
    +              selection
    +              8
    +              2
    +            
    +            
    +              OC1M
    +              Output Compare 1 mode
    +              4
    +              3
    +            
    +            
    +              OC1PE
    +              Output Compare 1 preload
    +              enable
    +              3
    +              1
    +            
    +            
    +              OC1FE
    +              Output Compare 1 fast
    +              enable
    +              2
    +              1
    +            
    +            
    +              CC1S
    +              Capture/Compare 1
    +              selection
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          CCMR1_Input
    +          CCMR1_Input
    +          capture/compare mode register 1 (input
    +          mode)
    +          CCMR1_Output
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              IC2F
    +              Input capture 2 filter
    +              12
    +              4
    +            
    +            
    +              IC2PSC
    +              Input capture 2 prescaler
    +              10
    +              2
    +            
    +            
    +              CC2S
    +              Capture/Compare 2
    +              selection
    +              8
    +              2
    +            
    +            
    +              IC1F
    +              Input capture 1 filter
    +              4
    +              4
    +            
    +            
    +              IC1PSC
    +              Input capture 1 prescaler
    +              2
    +              2
    +            
    +            
    +              CC1S
    +              Capture/Compare 1
    +              selection
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          CCER
    +          CCER
    +          capture/compare enable
    +          register
    +          0x20
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              CC2NP
    +              Capture/Compare 2 output
    +              Polarity
    +              7
    +              1
    +            
    +            
    +              CC2P
    +              Capture/Compare 2 output
    +              Polarity
    +              5
    +              1
    +            
    +            
    +              CC2E
    +              Capture/Compare 2 output
    +              enable
    +              4
    +              1
    +            
    +            
    +              CC1NP
    +              Capture/Compare 1 output
    +              Polarity
    +              3
    +              1
    +            
    +            
    +              CC1P
    +              Capture/Compare 1 output
    +              Polarity
    +              1
    +              1
    +            
    +            
    +              CC1E
    +              Capture/Compare 1 output
    +              enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNT
    +          CNT
    +          counter
    +          0x24
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CNT
    +              counter value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          PSC
    +          PSC
    +          prescaler
    +          0x28
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              PSC
    +              Prescaler value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          ARR
    +          ARR
    +          auto-reload register
    +          0x2C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ARR
    +              Auto-reload value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CCR1
    +          CCR1
    +          capture/compare register 1
    +          0x34
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CCR1
    +              Capture/Compare 1 value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CCR2
    +          CCR2
    +          capture/compare register 2
    +          0x38
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CCR2
    +              Capture/Compare 2 value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          OR
    +          OR
    +          TIM21 option register
    +          0x50
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ETR_RMP
    +              Timer21 ETR remap
    +              0
    +              2
    +            
    +            
    +              TI1_RMP
    +              Timer21 TI1
    +              2
    +              3
    +            
    +            
    +              TI2_RMP
    +              Timer21 TI2
    +              5
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      TIM22
    +      General-purpose-timers
    +      TIM
    +      0x40011400
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        TIM22
    +        TIMER22 global interrupt
    +        22
    +      
    +      
    +        
    +          CR1
    +          CR1
    +          control register 1
    +          0x0
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              CEN
    +              Counter enable
    +              0
    +              1
    +            
    +            
    +              UDIS
    +              Update disable
    +              1
    +              1
    +            
    +            
    +              URS
    +              Update request source
    +              2
    +              1
    +            
    +            
    +              OPM
    +              One-pulse mode
    +              3
    +              1
    +            
    +            
    +              DIR
    +              Direction
    +              4
    +              1
    +            
    +            
    +              CMS
    +              Center-aligned mode
    +              selection
    +              5
    +              2
    +            
    +            
    +              ARPE
    +              Auto-reload preload enable
    +              7
    +              1
    +            
    +            
    +              CKD
    +              Clock division
    +              8
    +              2
    +            
    +          
    +        
    +        
    +          CR2
    +          CR2
    +          control register 2
    +          0x4
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              MMS
    +              Master mode selection
    +              4
    +              3
    +            
    +          
    +        
    +        
    +          SMCR
    +          SMCR
    +          slave mode control register
    +          0x8
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              SMS
    +              Slave mode selection
    +              0
    +              3
    +            
    +            
    +              TS
    +              Trigger selection
    +              4
    +              3
    +            
    +            
    +              MSM
    +              Master/Slave mode
    +              7
    +              1
    +            
    +            
    +              ETF
    +              External trigger filter
    +              8
    +              4
    +            
    +            
    +              ETPS
    +              External trigger prescaler
    +              12
    +              2
    +            
    +            
    +              ECE
    +              External clock enable
    +              14
    +              1
    +            
    +            
    +              ETP
    +              External trigger polarity
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          DIER
    +          DIER
    +          DMA/Interrupt enable register
    +          0xC
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              TIE
    +              Trigger interrupt enable
    +              6
    +              1
    +            
    +            
    +              CC2IE
    +              Capture/Compare 2 interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              CC1IE
    +              Capture/Compare 1 interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              UIE
    +              Update interrupt enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          status register
    +          0x10
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              CC2OF
    +              Capture/compare 2 overcapture
    +              flag
    +              10
    +              1
    +            
    +            
    +              CC1OF
    +              Capture/Compare 1 overcapture
    +              flag
    +              9
    +              1
    +            
    +            
    +              TIF
    +              Trigger interrupt flag
    +              6
    +              1
    +            
    +            
    +              CC2IF
    +              Capture/Compare 2 interrupt
    +              flag
    +              2
    +              1
    +            
    +            
    +              CC1IF
    +              Capture/compare 1 interrupt
    +              flag
    +              1
    +              1
    +            
    +            
    +              UIF
    +              Update interrupt flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          EGR
    +          EGR
    +          event generation register
    +          0x14
    +          0x20
    +          write-only
    +          0x0000
    +          
    +            
    +              TG
    +              Trigger generation
    +              6
    +              1
    +            
    +            
    +              CC2G
    +              Capture/compare 2
    +              generation
    +              2
    +              1
    +            
    +            
    +              CC1G
    +              Capture/compare 1
    +              generation
    +              1
    +              1
    +            
    +            
    +              UG
    +              Update generation
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CCMR1_Output
    +          CCMR1_Output
    +          capture/compare mode register (output
    +          mode)
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OC2M
    +              Output Compare 2 mode
    +              12
    +              3
    +            
    +            
    +              OC2PE
    +              Output Compare 2 preload
    +              enable
    +              11
    +              1
    +            
    +            
    +              OC2FE
    +              Output Compare 2 fast
    +              enable
    +              10
    +              1
    +            
    +            
    +              CC2S
    +              Capture/Compare 2
    +              selection
    +              8
    +              2
    +            
    +            
    +              OC1M
    +              Output Compare 1 mode
    +              4
    +              3
    +            
    +            
    +              OC1PE
    +              Output Compare 1 preload
    +              enable
    +              3
    +              1
    +            
    +            
    +              OC1FE
    +              Output Compare 1 fast
    +              enable
    +              2
    +              1
    +            
    +            
    +              CC1S
    +              Capture/Compare 1
    +              selection
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          CCMR1_Input
    +          CCMR1_Input
    +          capture/compare mode register 1 (input
    +          mode)
    +          CCMR1_Output
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              IC2F
    +              Input capture 2 filter
    +              12
    +              4
    +            
    +            
    +              IC2PSC
    +              Input capture 2 prescaler
    +              10
    +              2
    +            
    +            
    +              CC2S
    +              Capture/Compare 2
    +              selection
    +              8
    +              2
    +            
    +            
    +              IC1F
    +              Input capture 1 filter
    +              4
    +              4
    +            
    +            
    +              IC1PSC
    +              Input capture 1 prescaler
    +              2
    +              2
    +            
    +            
    +              CC1S
    +              Capture/Compare 1
    +              selection
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          CCER
    +          CCER
    +          capture/compare enable
    +          register
    +          0x20
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              CC2NP
    +              Capture/Compare 2 output
    +              Polarity
    +              7
    +              1
    +            
    +            
    +              CC2P
    +              Capture/Compare 2 output
    +              Polarity
    +              5
    +              1
    +            
    +            
    +              CC2E
    +              Capture/Compare 2 output
    +              enable
    +              4
    +              1
    +            
    +            
    +              CC1NP
    +              Capture/Compare 1 output
    +              Polarity
    +              3
    +              1
    +            
    +            
    +              CC1P
    +              Capture/Compare 1 output
    +              Polarity
    +              1
    +              1
    +            
    +            
    +              CC1E
    +              Capture/Compare 1 output
    +              enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNT
    +          CNT
    +          counter
    +          0x24
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CNT
    +              counter value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          PSC
    +          PSC
    +          prescaler
    +          0x28
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              PSC
    +              Prescaler value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          ARR
    +          ARR
    +          auto-reload register
    +          0x2C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ARR
    +              Auto-reload value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CCR1
    +          CCR1
    +          capture/compare register 1
    +          0x34
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CCR1
    +              Capture/Compare 1 value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CCR2
    +          CCR2
    +          capture/compare register 2
    +          0x38
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CCR2
    +              Capture/Compare 2 value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          OR
    +          OR
    +          TIM22 option register
    +          0x50
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ETR_RMP
    +              Timer22 ETR remap
    +              0
    +              2
    +            
    +            
    +              TI1_RMP
    +              Timer22 TI1
    +              2
    +              2
    +            
    +          
    +        
    +      
    +    
    +    
    +      LPUART1
    +      Lower power Universal asynchronous receiver
    +      transmitter
    +      USART
    +      0x40004800
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          CR1
    +          CR1
    +          Control register 1
    +          0x0
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              M1
    +              Word length
    +              28
    +              1
    +            
    +            
    +              DEAT4
    +              Driver Enable assertion
    +              time
    +              25
    +              1
    +            
    +            
    +              DEAT3
    +              DEAT3
    +              24
    +              1
    +            
    +            
    +              DEAT2
    +              DEAT2
    +              23
    +              1
    +            
    +            
    +              DEAT1
    +              DEAT1
    +              22
    +              1
    +            
    +            
    +              DEAT0
    +              DEAT0
    +              21
    +              1
    +            
    +            
    +              DEDT4
    +              Driver Enable de-assertion
    +              time
    +              20
    +              1
    +            
    +            
    +              DEDT3
    +              DEDT3
    +              19
    +              1
    +            
    +            
    +              DEDT2
    +              DEDT2
    +              18
    +              1
    +            
    +            
    +              DEDT1
    +              DEDT1
    +              17
    +              1
    +            
    +            
    +              DEDT0
    +              DEDT0
    +              16
    +              1
    +            
    +            
    +              CMIE
    +              Character match interrupt
    +              enable
    +              14
    +              1
    +            
    +            
    +              MME
    +              Mute mode enable
    +              13
    +              1
    +            
    +            
    +              M0
    +              Word length
    +              12
    +              1
    +            
    +            
    +              WAKE
    +              Receiver wakeup method
    +              11
    +              1
    +            
    +            
    +              PCE
    +              Parity control enable
    +              10
    +              1
    +            
    +            
    +              PS
    +              Parity selection
    +              9
    +              1
    +            
    +            
    +              PEIE
    +              PE interrupt enable
    +              8
    +              1
    +            
    +            
    +              TXEIE
    +              interrupt enable
    +              7
    +              1
    +            
    +            
    +              TCIE
    +              Transmission complete interrupt
    +              enable
    +              6
    +              1
    +            
    +            
    +              RXNEIE
    +              RXNE interrupt enable
    +              5
    +              1
    +            
    +            
    +              IDLEIE
    +              IDLE interrupt enable
    +              4
    +              1
    +            
    +            
    +              TE
    +              Transmitter enable
    +              3
    +              1
    +            
    +            
    +              RE
    +              Receiver enable
    +              2
    +              1
    +            
    +            
    +              UESM
    +              USART enable in Stop mode
    +              1
    +              1
    +            
    +            
    +              UE
    +              USART enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CR2
    +          CR2
    +          Control register 2
    +          0x4
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              ADD4_7
    +              Address of the USART node
    +              28
    +              4
    +            
    +            
    +              ADD0_3
    +              Address of the USART node
    +              24
    +              4
    +            
    +            
    +              MSBFIRST
    +              Most significant bit first
    +              19
    +              1
    +            
    +            
    +              TAINV
    +              Binary data inversion
    +              18
    +              1
    +            
    +            
    +              TXINV
    +              TX pin active level
    +              inversion
    +              17
    +              1
    +            
    +            
    +              RXINV
    +              RX pin active level
    +              inversion
    +              16
    +              1
    +            
    +            
    +              SWAP
    +              Swap TX/RX pins
    +              15
    +              1
    +            
    +            
    +              STOP
    +              STOP bits
    +              12
    +              2
    +            
    +            
    +              CLKEN
    +              Clock enable
    +              11
    +              1
    +            
    +            
    +              ADDM7
    +              7-bit Address Detection/4-bit Address
    +              Detection
    +              4
    +              1
    +            
    +          
    +        
    +        
    +          CR3
    +          CR3
    +          Control register 3
    +          0x8
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              WUFIE
    +              Wakeup from Stop mode interrupt
    +              enable
    +              22
    +              1
    +            
    +            
    +              WUS
    +              Wakeup from Stop mode interrupt flag
    +              selection
    +              20
    +              2
    +            
    +            
    +              DEP
    +              Driver enable polarity
    +              selection
    +              15
    +              1
    +            
    +            
    +              DEM
    +              Driver enable mode
    +              14
    +              1
    +            
    +            
    +              DDRE
    +              DMA Disable on Reception
    +              Error
    +              13
    +              1
    +            
    +            
    +              OVRDIS
    +              Overrun Disable
    +              12
    +              1
    +            
    +            
    +              CTSIE
    +              CTS interrupt enable
    +              10
    +              1
    +            
    +            
    +              CTSE
    +              CTS enable
    +              9
    +              1
    +            
    +            
    +              RTSE
    +              RTS enable
    +              8
    +              1
    +            
    +            
    +              DMAT
    +              DMA enable transmitter
    +              7
    +              1
    +            
    +            
    +              DMAR
    +              DMA enable receiver
    +              6
    +              1
    +            
    +            
    +              HDSEL
    +              Half-duplex selection
    +              3
    +              1
    +            
    +            
    +              EIE
    +              Error interrupt enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          BRR
    +          BRR
    +          Baud rate register
    +          0xC
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              BRR
    +              BRR
    +              0
    +              20
    +            
    +          
    +        
    +        
    +          RQR
    +          RQR
    +          Request register
    +          0x18
    +          0x20
    +          write-only
    +          0x0000
    +          
    +            
    +              RXFRQ
    +              Receive data flush request
    +              3
    +              1
    +            
    +            
    +              MMRQ
    +              Mute mode request
    +              2
    +              1
    +            
    +            
    +              SBKRQ
    +              Send break request
    +              1
    +              1
    +            
    +          
    +        
    +        
    +          ISR
    +          ISR
    +          Interrupt & status
    +          register
    +          0x1C
    +          0x20
    +          read-only
    +          0x00C0
    +          
    +            
    +              REACK
    +              REACK
    +              22
    +              1
    +            
    +            
    +              TEACK
    +              TEACK
    +              21
    +              1
    +            
    +            
    +              WUF
    +              WUF
    +              20
    +              1
    +            
    +            
    +              RWU
    +              RWU
    +              19
    +              1
    +            
    +            
    +              SBKF
    +              SBKF
    +              18
    +              1
    +            
    +            
    +              CMF
    +              CMF
    +              17
    +              1
    +            
    +            
    +              BUSY
    +              BUSY
    +              16
    +              1
    +            
    +            
    +              CTS
    +              CTS
    +              10
    +              1
    +            
    +            
    +              CTSIF
    +              CTSIF
    +              9
    +              1
    +            
    +            
    +              TXE
    +              TXE
    +              7
    +              1
    +            
    +            
    +              TC
    +              TC
    +              6
    +              1
    +            
    +            
    +              RXNE
    +              RXNE
    +              5
    +              1
    +            
    +            
    +              IDLE
    +              IDLE
    +              4
    +              1
    +            
    +            
    +              ORE
    +              ORE
    +              3
    +              1
    +            
    +            
    +              NF
    +              NF
    +              2
    +              1
    +            
    +            
    +              FE
    +              FE
    +              1
    +              1
    +            
    +            
    +              PE
    +              PE
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ICR
    +          ICR
    +          Interrupt flag clear register
    +          0x20
    +          0x20
    +          write-only
    +          0x0000
    +          
    +            
    +              WUCF
    +              Wakeup from Stop mode clear
    +              flag
    +              20
    +              1
    +            
    +            
    +              CMCF
    +              Character match clear flag
    +              17
    +              1
    +            
    +            
    +              CTSCF
    +              CTS clear flag
    +              9
    +              1
    +            
    +            
    +              TCCF
    +              Transmission complete clear
    +              flag
    +              6
    +              1
    +            
    +            
    +              IDLECF
    +              Idle line detected clear
    +              flag
    +              4
    +              1
    +            
    +            
    +              ORECF
    +              Overrun error clear flag
    +              3
    +              1
    +            
    +            
    +              NCF
    +              Noise detected clear flag
    +              2
    +              1
    +            
    +            
    +              FECF
    +              Framing error clear flag
    +              1
    +              1
    +            
    +            
    +              PECF
    +              Parity error clear flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          RDR
    +          RDR
    +          Receive data register
    +          0x24
    +          0x20
    +          read-only
    +          0x0000
    +          
    +            
    +              RDR
    +              Receive data value
    +              0
    +              9
    +            
    +          
    +        
    +        
    +          TDR
    +          TDR
    +          Transmit data register
    +          0x28
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              TDR
    +              Transmit data value
    +              0
    +              9
    +            
    +          
    +        
    +      
    +    
    +    
    +      NVIC
    +      Nested Vectored Interrupt
    +      Controller
    +      NVIC
    +      0xE000E100
    +      
    +        0x0
    +        0x33D
    +        registers
    +      
    +      
    +        
    +          ISER
    +          ISER
    +          Interrupt Set Enable Register
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              SETENA
    +              SETENA
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          ICER
    +          ICER
    +          Interrupt Clear Enable
    +          Register
    +          0x80
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CLRENA
    +              CLRENA
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          ISPR
    +          ISPR
    +          Interrupt Set-Pending Register
    +          0x100
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              SETPEND
    +              SETPEND
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          ICPR
    +          ICPR
    +          Interrupt Clear-Pending
    +          Register
    +          0x180
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CLRPEND
    +              CLRPEND
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          IPR0
    +          IPR0
    +          Interrupt Priority Register 0
    +          0x300
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_0
    +              priority for interrupt 0
    +              0
    +              8
    +            
    +            
    +              PRI_1
    +              priority for interrupt 1
    +              8
    +              8
    +            
    +            
    +              PRI_2
    +              priority for interrupt 2
    +              16
    +              8
    +            
    +            
    +              PRI_3
    +              priority for interrupt 3
    +              24
    +              8
    +            
    +          
    +        
    +        
    +          IPR1
    +          IPR1
    +          Interrupt Priority Register 1
    +          0x304
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_4
    +              priority for interrupt n
    +              0
    +              8
    +            
    +            
    +              PRI_5
    +              priority for interrupt n
    +              8
    +              8
    +            
    +            
    +              PRI_6
    +              priority for interrupt n
    +              16
    +              8
    +            
    +            
    +              PRI_7
    +              priority for interrupt n
    +              24
    +              8
    +            
    +          
    +        
    +        
    +          IPR2
    +          IPR2
    +          Interrupt Priority Register 2
    +          0x308
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_8
    +              priority for interrupt n
    +              0
    +              8
    +            
    +            
    +              PRI_9
    +              priority for interrupt n
    +              8
    +              8
    +            
    +            
    +              PRI_10
    +              priority for interrupt n
    +              16
    +              8
    +            
    +            
    +              PRI_11
    +              priority for interrupt n
    +              24
    +              8
    +            
    +          
    +        
    +        
    +          IPR3
    +          IPR3
    +          Interrupt Priority Register 3
    +          0x30C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_12
    +              priority for interrupt n
    +              0
    +              8
    +            
    +            
    +              PRI_13
    +              priority for interrupt n
    +              8
    +              8
    +            
    +            
    +              PRI_14
    +              priority for interrupt n
    +              16
    +              8
    +            
    +            
    +              PRI_15
    +              priority for interrupt n
    +              24
    +              8
    +            
    +          
    +        
    +        
    +          IPR4
    +          IPR4
    +          Interrupt Priority Register 4
    +          0x310
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_16
    +              priority for interrupt n
    +              0
    +              8
    +            
    +            
    +              PRI_17
    +              priority for interrupt n
    +              8
    +              8
    +            
    +            
    +              PRI_18
    +              priority for interrupt n
    +              16
    +              8
    +            
    +            
    +              PRI_19
    +              priority for interrupt n
    +              24
    +              8
    +            
    +          
    +        
    +        
    +          IPR5
    +          IPR5
    +          Interrupt Priority Register 5
    +          0x314
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_20
    +              priority for interrupt n
    +              0
    +              8
    +            
    +            
    +              PRI_21
    +              priority for interrupt n
    +              8
    +              8
    +            
    +            
    +              PRI_22
    +              priority for interrupt n
    +              16
    +              8
    +            
    +            
    +              PRI_23
    +              priority for interrupt n
    +              24
    +              8
    +            
    +          
    +        
    +        
    +          IPR6
    +          IPR6
    +          Interrupt Priority Register 6
    +          0x318
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_24
    +              priority for interrupt n
    +              0
    +              8
    +            
    +            
    +              PRI_25
    +              priority for interrupt n
    +              8
    +              8
    +            
    +            
    +              PRI_26
    +              priority for interrupt n
    +              16
    +              8
    +            
    +            
    +              PRI_27
    +              priority for interrupt n
    +              24
    +              8
    +            
    +          
    +        
    +        
    +          IPR7
    +          IPR7
    +          Interrupt Priority Register 7
    +          0x31C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_28
    +              priority for interrupt n
    +              0
    +              8
    +            
    +            
    +              PRI_29
    +              priority for interrupt n
    +              8
    +              8
    +            
    +            
    +              PRI_30
    +              priority for interrupt n
    +              16
    +              8
    +            
    +            
    +              PRI_31
    +              priority for interrupt n
    +              24
    +              8
    +            
    +          
    +        
    +      
    +    
    +    
    +      MPU
    +      Memory protection unit
    +      MPU
    +      0xE000ED90
    +      
    +        0x0
    +        0x15
    +        registers
    +      
    +      
    +        
    +          MPU_TYPER
    +          MPU_TYPER
    +          MPU type register
    +          0x0
    +          0x20
    +          read-only
    +          0X00000800
    +          
    +            
    +              SEPARATE
    +              Separate flag
    +              0
    +              1
    +            
    +            
    +              DREGION
    +              Number of MPU data regions
    +              8
    +              8
    +            
    +            
    +              IREGION
    +              Number of MPU instruction
    +              regions
    +              16
    +              8
    +            
    +          
    +        
    +        
    +          MPU_CTRL
    +          MPU_CTRL
    +          MPU control register
    +          0x4
    +          0x20
    +          read-only
    +          0X00000000
    +          
    +            
    +              ENABLE
    +              Enables the MPU
    +              0
    +              1
    +            
    +            
    +              HFNMIENA
    +              Enables the operation of MPU during hard
    +              fault
    +              1
    +              1
    +            
    +            
    +              PRIVDEFENA
    +              Enable priviliged software access to
    +              default memory map
    +              2
    +              1
    +            
    +          
    +        
    +        
    +          MPU_RNR
    +          MPU_RNR
    +          MPU region number register
    +          0x8
    +          0x20
    +          read-write
    +          0X00000000
    +          
    +            
    +              REGION
    +              MPU region
    +              0
    +              8
    +            
    +          
    +        
    +        
    +          MPU_RBAR
    +          MPU_RBAR
    +          MPU region base address
    +          register
    +          0xC
    +          0x20
    +          read-write
    +          0X00000000
    +          
    +            
    +              REGION
    +              MPU region field
    +              0
    +              4
    +            
    +            
    +              VALID
    +              MPU region number valid
    +              4
    +              1
    +            
    +            
    +              ADDR
    +              Region base address field
    +              5
    +              27
    +            
    +          
    +        
    +        
    +          MPU_RASR
    +          MPU_RASR
    +          MPU region attribute and size
    +          register
    +          0x10
    +          0x20
    +          read-write
    +          0X00000000
    +          
    +            
    +              ENABLE
    +              Region enable bit.
    +              0
    +              1
    +            
    +            
    +              SIZE
    +              Size of the MPU protection
    +              region
    +              1
    +              5
    +            
    +            
    +              SRD
    +              Subregion disable bits
    +              8
    +              8
    +            
    +            
    +              B
    +              memory attribute
    +              16
    +              1
    +            
    +            
    +              C
    +              memory attribute
    +              17
    +              1
    +            
    +            
    +              S
    +              Shareable memory attribute
    +              18
    +              1
    +            
    +            
    +              TEX
    +              memory attribute
    +              19
    +              3
    +            
    +            
    +              AP
    +              Access permission
    +              24
    +              3
    +            
    +            
    +              XN
    +              Instruction access disable
    +              bit
    +              28
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      STK
    +      SysTick timer
    +      STK
    +      0xE000E010
    +      
    +        0x0
    +        0x11
    +        registers
    +      
    +      
    +        
    +          CSR
    +          CSR
    +          SysTick control and status
    +          register
    +          0x0
    +          0x20
    +          read-write
    +          0X00000000
    +          
    +            
    +              ENABLE
    +              Counter enable
    +              0
    +              1
    +            
    +            
    +              TICKINT
    +              SysTick exception request
    +              enable
    +              1
    +              1
    +            
    +            
    +              CLKSOURCE
    +              Clock source selection
    +              2
    +              1
    +            
    +            
    +              COUNTFLAG
    +              COUNTFLAG
    +              16
    +              1
    +            
    +          
    +        
    +        
    +          RVR
    +          RVR
    +          SysTick reload value register
    +          0x4
    +          0x20
    +          read-write
    +          0X00000000
    +          
    +            
    +              RELOAD
    +              RELOAD value
    +              0
    +              24
    +            
    +          
    +        
    +        
    +          CVR
    +          CVR
    +          SysTick current value register
    +          0x8
    +          0x20
    +          read-write
    +          0X00000000
    +          
    +            
    +              CURRENT
    +              Current counter value
    +              0
    +              24
    +            
    +          
    +        
    +        
    +          CALIB
    +          CALIB
    +          SysTick calibration value
    +          register
    +          0xC
    +          0x20
    +          read-write
    +          0X00000000
    +          
    +            
    +              TENMS
    +              Calibration value
    +              0
    +              24
    +            
    +            
    +              SKEW
    +              SKEW flag: Indicates whether the TENMS
    +              value is exact
    +              30
    +              1
    +            
    +            
    +              NOREF
    +              NOREF flag. Reads as zero
    +              31
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      SCB
    +      System control block
    +      SCB
    +      0xE000ED00
    +      
    +        0x0
    +        0x41
    +        registers
    +      
    +      
    +        
    +          CPUID
    +          CPUID
    +          CPUID base register
    +          0x0
    +          0x20
    +          read-only
    +          0x410FC241
    +          
    +            
    +              Revision
    +              Revision number
    +              0
    +              4
    +            
    +            
    +              PartNo
    +              Part number of the
    +              processor
    +              4
    +              12
    +            
    +            
    +              Architecture
    +              Reads as 0xF
    +              16
    +              4
    +            
    +            
    +              Variant
    +              Variant number
    +              20
    +              4
    +            
    +            
    +              Implementer
    +              Implementer code
    +              24
    +              8
    +            
    +          
    +        
    +        
    +          ICSR
    +          ICSR
    +          Interrupt control and state
    +          register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              VECTACTIVE
    +              Active vector
    +              0
    +              9
    +            
    +            
    +              RETTOBASE
    +              Return to base level
    +              11
    +              1
    +            
    +            
    +              VECTPENDING
    +              Pending vector
    +              12
    +              7
    +            
    +            
    +              ISRPENDING
    +              Interrupt pending flag
    +              22
    +              1
    +            
    +            
    +              PENDSTCLR
    +              SysTick exception clear-pending
    +              bit
    +              25
    +              1
    +            
    +            
    +              PENDSTSET
    +              SysTick exception set-pending
    +              bit
    +              26
    +              1
    +            
    +            
    +              PENDSVCLR
    +              PendSV clear-pending bit
    +              27
    +              1
    +            
    +            
    +              PENDSVSET
    +              PendSV set-pending bit
    +              28
    +              1
    +            
    +            
    +              NMIPENDSET
    +              NMI set-pending bit.
    +              31
    +              1
    +            
    +          
    +        
    +        
    +          VTOR
    +          VTOR
    +          Vector table offset register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              TBLOFF
    +              Vector table base offset
    +              field
    +              7
    +              25
    +            
    +          
    +        
    +        
    +          AIRCR
    +          AIRCR
    +          Application interrupt and reset control
    +          register
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              VECTCLRACTIVE
    +              VECTCLRACTIVE
    +              1
    +              1
    +            
    +            
    +              SYSRESETREQ
    +              SYSRESETREQ
    +              2
    +              1
    +            
    +            
    +              ENDIANESS
    +              ENDIANESS
    +              15
    +              1
    +            
    +            
    +              VECTKEYSTAT
    +              Register key
    +              16
    +              16
    +            
    +          
    +        
    +        
    +          SCR
    +          SCR
    +          System control register
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              SLEEPONEXIT
    +              SLEEPONEXIT
    +              1
    +              1
    +            
    +            
    +              SLEEPDEEP
    +              SLEEPDEEP
    +              2
    +              1
    +            
    +            
    +              SEVEONPEND
    +              Send Event on Pending bit
    +              4
    +              1
    +            
    +          
    +        
    +        
    +          CCR
    +          CCR
    +          Configuration and control
    +          register
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              NONBASETHRDENA
    +              Configures how the processor enters
    +              Thread mode
    +              0
    +              1
    +            
    +            
    +              USERSETMPEND
    +              USERSETMPEND
    +              1
    +              1
    +            
    +            
    +              UNALIGN__TRP
    +              UNALIGN_ TRP
    +              3
    +              1
    +            
    +            
    +              DIV_0_TRP
    +              DIV_0_TRP
    +              4
    +              1
    +            
    +            
    +              BFHFNMIGN
    +              BFHFNMIGN
    +              8
    +              1
    +            
    +            
    +              STKALIGN
    +              STKALIGN
    +              9
    +              1
    +            
    +          
    +        
    +        
    +          SHPR2
    +          SHPR2
    +          System handler priority
    +          registers
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_11
    +              Priority of system handler
    +              11
    +              24
    +              8
    +            
    +          
    +        
    +        
    +          SHPR3
    +          SHPR3
    +          System handler priority
    +          registers
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_14
    +              Priority of system handler
    +              14
    +              16
    +              8
    +            
    +            
    +              PRI_15
    +              Priority of system handler
    +              15
    +              24
    +              8
    +            
    +          
    +        
    +      
    +    
    +  
    +
    diff --git a/src/chips/STM32L0x2.svd b/src/chips/STM32L0x2.svd
    new file mode 100644
    index 000000000..bc19e6f77
    --- /dev/null
    +++ b/src/chips/STM32L0x2.svd
    @@ -0,0 +1,20698 @@
    +
    +
    +  STM32L0x2
    +  1.3
    +  STM32L0x2
    +  
    +  
    +    CM0+
    +    r0p0
    +    little
    +    false
    +    false
    +    3
    +    false
    +  
    +  
    +  
    +  8
    +  
    +  32
    +  
    +  0x20
    +  0x0
    +  0xFFFFFFFF
    +  
    +    
    +      AES
    +      Advanced encryption standard hardware
    +      accelerator
    +      AES
    +      0x40026000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        AES_RNG_LPUART1
    +        AES global interrupt RNG global interrupt and
    +        LPUART1 global interrupt through
    +        29
    +      
    +      
    +        
    +          CR
    +          CR
    +          control register
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DMAOUTEN
    +              Enable DMA management of data output
    +              phase
    +              12
    +              1
    +            
    +            
    +              DMAINEN
    +              Enable DMA management of data input
    +              phase
    +              11
    +              1
    +            
    +            
    +              ERRIE
    +              Error interrupt enable
    +              10
    +              1
    +            
    +            
    +              CCFIE
    +              CCF flag interrupt enable
    +              9
    +              1
    +            
    +            
    +              ERRC
    +              Error clear
    +              8
    +              1
    +            
    +            
    +              CCFC
    +              Computation Complete Flag
    +              Clear
    +              7
    +              1
    +            
    +            
    +              CHMOD
    +              AES chaining mode
    +              5
    +              2
    +            
    +            
    +              MODE
    +              AES operating mode
    +              3
    +              2
    +            
    +            
    +              DATATYPE
    +              Data type selection (for data in and
    +              data out to/from the cryptographic
    +              block)
    +              1
    +              2
    +            
    +            
    +              EN
    +              AES enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          status register
    +          0x4
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              WRERR
    +              Write error flag
    +              2
    +              1
    +            
    +            
    +              RDERR
    +              Read error flag
    +              1
    +              1
    +            
    +            
    +              CCF
    +              Computation complete flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          DINR
    +          DINR
    +          data input register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AES_DINR
    +              Data Input Register.
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          DOUTR
    +          DOUTR
    +          data output register
    +          0xC
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              AES_DOUTR
    +              Data output register
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          KEYR0
    +          KEYR0
    +          key register 0
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AES_KEYR0
    +              Data Output Register (LSB key
    +              [31:0])
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          KEYR1
    +          KEYR1
    +          key register 1
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AES_KEYR1
    +              AES key register (key
    +              [63:32])
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          KEYR2
    +          KEYR2
    +          key register 2
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AES_KEYR2
    +              AES key register (key
    +              [95:64])
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          KEYR3
    +          KEYR3
    +          key register 3
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AES_KEYR3
    +              AES key register (MSB key
    +              [127:96])
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          IVR0
    +          IVR0
    +          initialization vector register
    +          0
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AES_IVR0
    +              initialization vector register (LSB IVR
    +              [31:0])
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          IVR1
    +          IVR1
    +          initialization vector register
    +          1
    +          0x24
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AES_IVR1
    +              Initialization Vector Register (IVR
    +              [63:32])
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          IVR2
    +          IVR2
    +          initialization vector register
    +          2
    +          0x28
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AES_IVR2
    +              Initialization Vector Register (IVR
    +              [95:64])
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          IVR3
    +          IVR3
    +          initialization vector register
    +          3
    +          0x2C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AES_IVR3
    +              Initialization Vector Register (MSB IVR
    +              [127:96])
    +              0
    +              32
    +            
    +          
    +        
    +      
    +    
    +    
    +      DAC
    +      Digital-to-analog converter
    +      DAC
    +      0x40007400
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          CR
    +          CR
    +          control register
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DMAUDRIE1
    +              DAC channel1 DMA Underrun Interrupt
    +              enable
    +              13
    +              1
    +            
    +            
    +              DMAEN1
    +              DAC channel1 DMA enable
    +              12
    +              1
    +            
    +            
    +              MAMP1
    +              DAC channel1 mask/amplitude
    +              selector
    +              8
    +              4
    +            
    +            
    +              WAVE1
    +              DAC channel1 noise/triangle wave
    +              generation enable
    +              6
    +              2
    +            
    +            
    +              TSEL1
    +              DAC channel1 trigger
    +              selection
    +              3
    +              3
    +            
    +            
    +              TEN1
    +              DAC channel1 trigger
    +              enable
    +              2
    +              1
    +            
    +            
    +              BOFF1
    +              DAC channel1 output buffer
    +              disable
    +              1
    +              1
    +            
    +            
    +              EN1
    +              DAC channel1 enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          SWTRIGR
    +          SWTRIGR
    +          software trigger register
    +          0x4
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              SWTRIG1
    +              DAC channel1 software
    +              trigger
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          DHR12R1
    +          DHR12R1
    +          channel1 12-bit right-aligned data holding
    +          register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DACC1DHR
    +              DAC channel1 12-bit right-aligned
    +              data
    +              0
    +              12
    +            
    +          
    +        
    +        
    +          DHR12L1
    +          DHR12L1
    +          channel1 12-bit left-aligned data holding
    +          register
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DACC1DHR
    +              DAC channel1 12-bit left-aligned
    +              data
    +              4
    +              12
    +            
    +          
    +        
    +        
    +          DHR8R1
    +          DHR8R1
    +          channel1 8-bit right-aligned data holding
    +          register
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DACC1DHR
    +              DAC channel1 8-bit right-aligned
    +              data
    +              0
    +              8
    +            
    +          
    +        
    +        
    +          DOR1
    +          DOR1
    +          channel1 data output register
    +          0x2C
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              DACC1DOR
    +              DAC channel1 data output
    +              0
    +              12
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          status register
    +          0x34
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DMAUDR1
    +              DAC channel1 DMA underrun
    +              flag
    +              13
    +              1
    +            
    +          
    +        
    +        
    +          DHR12R2
    +          DHR12R2
    +          channel2 12-bit right-aligned data holding
    +          register
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DACC2DHR
    +              DAC channel2 12-bit right-aligned
    +              data
    +              0
    +              12
    +            
    +          
    +        
    +        
    +          DHR12L2
    +          DHR12L2
    +          channel2 12-bit left-aligned data holding
    +          register
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DACC2DHR
    +              DAC channel2 12-bit left-aligned
    +              data
    +              4
    +              12
    +            
    +          
    +        
    +        
    +          DHR8R2
    +          DHR8R2
    +          channel2 8-bit right-aligned data holding
    +          register
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DACC2DHR
    +              DAC channel2 8-bit right-aligned
    +              data
    +              0
    +              8
    +            
    +          
    +        
    +        
    +          DHR12RD
    +          DHR12RD
    +          Dual DAC 12-bit right-aligned data holding
    +          register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DACC1DHR
    +              DAC channel1 12-bit right-aligned
    +              data
    +              0
    +              12
    +            
    +            
    +              DACC2DHR
    +              DAC channel2 12-bit right-aligned
    +              data
    +              16
    +              12
    +            
    +          
    +        
    +        
    +          DHR12LD
    +          DHR12LD
    +          Dual DAC 12-bit left-aligned data holding
    +          register
    +          0x24
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DACC1DHR
    +              DAC channel1 12-bit left-aligned
    +              data
    +              4
    +              12
    +            
    +            
    +              DACC2DHR
    +              DAC channel2 12-bit left-aligned
    +              data
    +              20
    +              12
    +            
    +          
    +        
    +        
    +          DHR8RD
    +          DHR8RD
    +          Dual DAC 8-bit right-aligned data holding
    +          register
    +          0x28
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DACC1DHR
    +              DAC channel1 8-bit right-aligned
    +              data
    +              0
    +              8
    +            
    +            
    +              DACC2DHR
    +              DAC channel2 8-bit right-aligned
    +              data
    +              8
    +              8
    +            
    +          
    +        
    +        
    +          DOR2
    +          DOR2
    +          channel2 data output register
    +          0x30
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              DACC2DOR
    +              DAC channel2 data output
    +              0
    +              12
    +            
    +          
    +        
    +      
    +    
    +    
    +      DMA1
    +      Direct memory access controller
    +      DMA
    +      0x40020000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        DMA1_Channel1
    +        DMA1 Channel1 global interrupt
    +        9
    +      
    +      
    +        DMA1_Channel2_3
    +        DMA1 Channel2 and 3 interrupts
    +        10
    +      
    +      
    +        DMA1_Channel4_7
    +        DMA1 Channel4 to 7 interrupts
    +        11
    +      
    +      
    +        
    +          ISR
    +          ISR
    +          interrupt status register
    +          0x0
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              TEIF7
    +              Channel x transfer error flag (x = 1
    +              ..7)
    +              27
    +              1
    +            
    +            
    +              HTIF7
    +              Channel x half transfer flag (x = 1
    +              ..7)
    +              26
    +              1
    +            
    +            
    +              TCIF7
    +              Channel x transfer complete flag (x = 1
    +              ..7)
    +              25
    +              1
    +            
    +            
    +              GIF7
    +              Channel x global interrupt flag (x = 1
    +              ..7)
    +              24
    +              1
    +            
    +            
    +              TEIF6
    +              Channel x transfer error flag (x = 1
    +              ..7)
    +              23
    +              1
    +            
    +            
    +              HTIF6
    +              Channel x half transfer flag (x = 1
    +              ..7)
    +              22
    +              1
    +            
    +            
    +              TCIF6
    +              Channel x transfer complete flag (x = 1
    +              ..7)
    +              21
    +              1
    +            
    +            
    +              GIF6
    +              Channel x global interrupt flag (x = 1
    +              ..7)
    +              20
    +              1
    +            
    +            
    +              TEIF5
    +              Channel x transfer error flag (x = 1
    +              ..7)
    +              19
    +              1
    +            
    +            
    +              HTIF5
    +              Channel x half transfer flag (x = 1
    +              ..7)
    +              18
    +              1
    +            
    +            
    +              TCIF5
    +              Channel x transfer complete flag (x = 1
    +              ..7)
    +              17
    +              1
    +            
    +            
    +              GIF5
    +              Channel x global interrupt flag (x = 1
    +              ..7)
    +              16
    +              1
    +            
    +            
    +              TEIF4
    +              Channel x transfer error flag (x = 1
    +              ..7)
    +              15
    +              1
    +            
    +            
    +              HTIF4
    +              Channel x half transfer flag (x = 1
    +              ..7)
    +              14
    +              1
    +            
    +            
    +              TCIF4
    +              Channel x transfer complete flag (x = 1
    +              ..7)
    +              13
    +              1
    +            
    +            
    +              GIF4
    +              Channel x global interrupt flag (x = 1
    +              ..7)
    +              12
    +              1
    +            
    +            
    +              TEIF3
    +              Channel x transfer error flag (x = 1
    +              ..7)
    +              11
    +              1
    +            
    +            
    +              HTIF3
    +              Channel x half transfer flag (x = 1
    +              ..7)
    +              10
    +              1
    +            
    +            
    +              TCIF3
    +              Channel x transfer complete flag (x = 1
    +              ..7)
    +              9
    +              1
    +            
    +            
    +              GIF3
    +              Channel x global interrupt flag (x = 1
    +              ..7)
    +              8
    +              1
    +            
    +            
    +              TEIF2
    +              Channel x transfer error flag (x = 1
    +              ..7)
    +              7
    +              1
    +            
    +            
    +              HTIF2
    +              Channel x half transfer flag (x = 1
    +              ..7)
    +              6
    +              1
    +            
    +            
    +              TCIF2
    +              Channel x transfer complete flag (x = 1
    +              ..7)
    +              5
    +              1
    +            
    +            
    +              GIF2
    +              Channel x global interrupt flag (x = 1
    +              ..7)
    +              4
    +              1
    +            
    +            
    +              TEIF1
    +              Channel x transfer error flag (x = 1
    +              ..7)
    +              3
    +              1
    +            
    +            
    +              HTIF1
    +              Channel x half transfer flag (x = 1
    +              ..7)
    +              2
    +              1
    +            
    +            
    +              TCIF1
    +              Channel x transfer complete flag (x = 1
    +              ..7)
    +              1
    +              1
    +            
    +            
    +              GIF1
    +              Channel x global interrupt flag (x = 1
    +              ..7)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          IFCR
    +          IFCR
    +          interrupt flag clear register
    +          0x4
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              CTEIF7
    +              Channel x transfer error clear (x = 1
    +              ..7)
    +              27
    +              1
    +            
    +            
    +              CHTIF7
    +              Channel x half transfer clear (x = 1
    +              ..7)
    +              26
    +              1
    +            
    +            
    +              CTCIF7
    +              Channel x transfer complete clear (x = 1
    +              ..7)
    +              25
    +              1
    +            
    +            
    +              CGIF7
    +              Channel x global interrupt clear (x = 1
    +              ..7)
    +              24
    +              1
    +            
    +            
    +              CTEIF6
    +              Channel x transfer error clear (x = 1
    +              ..7)
    +              23
    +              1
    +            
    +            
    +              CHTIF6
    +              Channel x half transfer clear (x = 1
    +              ..7)
    +              22
    +              1
    +            
    +            
    +              CTCIF6
    +              Channel x transfer complete clear (x = 1
    +              ..7)
    +              21
    +              1
    +            
    +            
    +              CGIF6
    +              Channel x global interrupt clear (x = 1
    +              ..7)
    +              20
    +              1
    +            
    +            
    +              CTEIF5
    +              Channel x transfer error clear (x = 1
    +              ..7)
    +              19
    +              1
    +            
    +            
    +              CHTIF5
    +              Channel x half transfer clear (x = 1
    +              ..7)
    +              18
    +              1
    +            
    +            
    +              CTCIF5
    +              Channel x transfer complete clear (x = 1
    +              ..7)
    +              17
    +              1
    +            
    +            
    +              CGIF5
    +              Channel x global interrupt clear (x = 1
    +              ..7)
    +              16
    +              1
    +            
    +            
    +              CTEIF4
    +              Channel x transfer error clear (x = 1
    +              ..7)
    +              15
    +              1
    +            
    +            
    +              CHTIF4
    +              Channel x half transfer clear (x = 1
    +              ..7)
    +              14
    +              1
    +            
    +            
    +              CTCIF4
    +              Channel x transfer complete clear (x = 1
    +              ..7)
    +              13
    +              1
    +            
    +            
    +              CGIF4
    +              Channel x global interrupt clear (x = 1
    +              ..7)
    +              12
    +              1
    +            
    +            
    +              CTEIF3
    +              Channel x transfer error clear (x = 1
    +              ..7)
    +              11
    +              1
    +            
    +            
    +              CHTIF3
    +              Channel x half transfer clear (x = 1
    +              ..7)
    +              10
    +              1
    +            
    +            
    +              CTCIF3
    +              Channel x transfer complete clear (x = 1
    +              ..7)
    +              9
    +              1
    +            
    +            
    +              CGIF3
    +              Channel x global interrupt clear (x = 1
    +              ..7)
    +              8
    +              1
    +            
    +            
    +              CTEIF2
    +              Channel x transfer error clear (x = 1
    +              ..7)
    +              7
    +              1
    +            
    +            
    +              CHTIF2
    +              Channel x half transfer clear (x = 1
    +              ..7)
    +              6
    +              1
    +            
    +            
    +              CTCIF2
    +              Channel x transfer complete clear (x = 1
    +              ..7)
    +              5
    +              1
    +            
    +            
    +              CGIF2
    +              Channel x global interrupt clear (x = 1
    +              ..7)
    +              4
    +              1
    +            
    +            
    +              CTEIF1
    +              Channel x transfer error clear (x = 1
    +              ..7)
    +              3
    +              1
    +            
    +            
    +              CHTIF1
    +              Channel x half transfer clear (x = 1
    +              ..7)
    +              2
    +              1
    +            
    +            
    +              CTCIF1
    +              Channel x transfer complete clear (x = 1
    +              ..7)
    +              1
    +              1
    +            
    +            
    +              CGIF1
    +              Channel x global interrupt clear (x = 1
    +              ..7)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CCR1
    +          CCR1
    +          channel x configuration
    +          register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MEM2MEM
    +              Memory to memory mode
    +              14
    +              1
    +            
    +            
    +              PL
    +              Channel priority level
    +              12
    +              2
    +            
    +            
    +              MSIZE
    +              Memory size
    +              10
    +              2
    +            
    +            
    +              PSIZE
    +              Peripheral size
    +              8
    +              2
    +            
    +            
    +              MINC
    +              Memory increment mode
    +              7
    +              1
    +            
    +            
    +              PINC
    +              Peripheral increment mode
    +              6
    +              1
    +            
    +            
    +              CIRC
    +              Circular mode
    +              5
    +              1
    +            
    +            
    +              DIR
    +              Data transfer direction
    +              4
    +              1
    +            
    +            
    +              TEIE
    +              Transfer error interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              HTIE
    +              Half transfer interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              TCIE
    +              Transfer complete interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              EN
    +              Channel enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNDTR1
    +          CNDTR1
    +          channel x number of data
    +          register
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              NDT
    +              Number of data to transfer
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CPAR1
    +          CPAR1
    +          channel x peripheral address
    +          register
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PA
    +              Peripheral address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CMAR1
    +          CMAR1
    +          channel x memory address
    +          register
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MA
    +              Memory address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CCR2
    +          CCR2
    +          channel x configuration
    +          register
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MEM2MEM
    +              Memory to memory mode
    +              14
    +              1
    +            
    +            
    +              PL
    +              Channel priority level
    +              12
    +              2
    +            
    +            
    +              MSIZE
    +              Memory size
    +              10
    +              2
    +            
    +            
    +              PSIZE
    +              Peripheral size
    +              8
    +              2
    +            
    +            
    +              MINC
    +              Memory increment mode
    +              7
    +              1
    +            
    +            
    +              PINC
    +              Peripheral increment mode
    +              6
    +              1
    +            
    +            
    +              CIRC
    +              Circular mode
    +              5
    +              1
    +            
    +            
    +              DIR
    +              Data transfer direction
    +              4
    +              1
    +            
    +            
    +              TEIE
    +              Transfer error interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              HTIE
    +              Half transfer interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              TCIE
    +              Transfer complete interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              EN
    +              Channel enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNDTR2
    +          CNDTR2
    +          channel x number of data
    +          register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              NDT
    +              Number of data to transfer
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CPAR2
    +          CPAR2
    +          channel x peripheral address
    +          register
    +          0x24
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PA
    +              Peripheral address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CMAR2
    +          CMAR2
    +          channel x memory address
    +          register
    +          0x28
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MA
    +              Memory address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CCR3
    +          CCR3
    +          channel x configuration
    +          register
    +          0x30
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MEM2MEM
    +              Memory to memory mode
    +              14
    +              1
    +            
    +            
    +              PL
    +              Channel priority level
    +              12
    +              2
    +            
    +            
    +              MSIZE
    +              Memory size
    +              10
    +              2
    +            
    +            
    +              PSIZE
    +              Peripheral size
    +              8
    +              2
    +            
    +            
    +              MINC
    +              Memory increment mode
    +              7
    +              1
    +            
    +            
    +              PINC
    +              Peripheral increment mode
    +              6
    +              1
    +            
    +            
    +              CIRC
    +              Circular mode
    +              5
    +              1
    +            
    +            
    +              DIR
    +              Data transfer direction
    +              4
    +              1
    +            
    +            
    +              TEIE
    +              Transfer error interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              HTIE
    +              Half transfer interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              TCIE
    +              Transfer complete interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              EN
    +              Channel enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNDTR3
    +          CNDTR3
    +          channel x number of data
    +          register
    +          0x34
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              NDT
    +              Number of data to transfer
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CPAR3
    +          CPAR3
    +          channel x peripheral address
    +          register
    +          0x38
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PA
    +              Peripheral address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CMAR3
    +          CMAR3
    +          channel x memory address
    +          register
    +          0x3C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MA
    +              Memory address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CCR4
    +          CCR4
    +          channel x configuration
    +          register
    +          0x44
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MEM2MEM
    +              Memory to memory mode
    +              14
    +              1
    +            
    +            
    +              PL
    +              Channel priority level
    +              12
    +              2
    +            
    +            
    +              MSIZE
    +              Memory size
    +              10
    +              2
    +            
    +            
    +              PSIZE
    +              Peripheral size
    +              8
    +              2
    +            
    +            
    +              MINC
    +              Memory increment mode
    +              7
    +              1
    +            
    +            
    +              PINC
    +              Peripheral increment mode
    +              6
    +              1
    +            
    +            
    +              CIRC
    +              Circular mode
    +              5
    +              1
    +            
    +            
    +              DIR
    +              Data transfer direction
    +              4
    +              1
    +            
    +            
    +              TEIE
    +              Transfer error interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              HTIE
    +              Half transfer interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              TCIE
    +              Transfer complete interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              EN
    +              Channel enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNDTR4
    +          CNDTR4
    +          channel x number of data
    +          register
    +          0x48
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              NDT
    +              Number of data to transfer
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CPAR4
    +          CPAR4
    +          channel x peripheral address
    +          register
    +          0x4C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PA
    +              Peripheral address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CMAR4
    +          CMAR4
    +          channel x memory address
    +          register
    +          0x50
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MA
    +              Memory address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CCR5
    +          CCR5
    +          channel x configuration
    +          register
    +          0x58
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MEM2MEM
    +              Memory to memory mode
    +              14
    +              1
    +            
    +            
    +              PL
    +              Channel priority level
    +              12
    +              2
    +            
    +            
    +              MSIZE
    +              Memory size
    +              10
    +              2
    +            
    +            
    +              PSIZE
    +              Peripheral size
    +              8
    +              2
    +            
    +            
    +              MINC
    +              Memory increment mode
    +              7
    +              1
    +            
    +            
    +              PINC
    +              Peripheral increment mode
    +              6
    +              1
    +            
    +            
    +              CIRC
    +              Circular mode
    +              5
    +              1
    +            
    +            
    +              DIR
    +              Data transfer direction
    +              4
    +              1
    +            
    +            
    +              TEIE
    +              Transfer error interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              HTIE
    +              Half transfer interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              TCIE
    +              Transfer complete interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              EN
    +              Channel enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNDTR5
    +          CNDTR5
    +          channel x number of data
    +          register
    +          0x5C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              NDT
    +              Number of data to transfer
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CPAR5
    +          CPAR5
    +          channel x peripheral address
    +          register
    +          0x60
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PA
    +              Peripheral address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CMAR5
    +          CMAR5
    +          channel x memory address
    +          register
    +          0x64
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MA
    +              Memory address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CCR6
    +          CCR6
    +          channel x configuration
    +          register
    +          0x6C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MEM2MEM
    +              Memory to memory mode
    +              14
    +              1
    +            
    +            
    +              PL
    +              Channel priority level
    +              12
    +              2
    +            
    +            
    +              MSIZE
    +              Memory size
    +              10
    +              2
    +            
    +            
    +              PSIZE
    +              Peripheral size
    +              8
    +              2
    +            
    +            
    +              MINC
    +              Memory increment mode
    +              7
    +              1
    +            
    +            
    +              PINC
    +              Peripheral increment mode
    +              6
    +              1
    +            
    +            
    +              CIRC
    +              Circular mode
    +              5
    +              1
    +            
    +            
    +              DIR
    +              Data transfer direction
    +              4
    +              1
    +            
    +            
    +              TEIE
    +              Transfer error interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              HTIE
    +              Half transfer interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              TCIE
    +              Transfer complete interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              EN
    +              Channel enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNDTR6
    +          CNDTR6
    +          channel x number of data
    +          register
    +          0x70
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              NDT
    +              Number of data to transfer
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CPAR6
    +          CPAR6
    +          channel x peripheral address
    +          register
    +          0x74
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PA
    +              Peripheral address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CMAR6
    +          CMAR6
    +          channel x memory address
    +          register
    +          0x78
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MA
    +              Memory address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CCR7
    +          CCR7
    +          channel x configuration
    +          register
    +          0x80
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MEM2MEM
    +              Memory to memory mode
    +              14
    +              1
    +            
    +            
    +              PL
    +              Channel priority level
    +              12
    +              2
    +            
    +            
    +              MSIZE
    +              Memory size
    +              10
    +              2
    +            
    +            
    +              PSIZE
    +              Peripheral size
    +              8
    +              2
    +            
    +            
    +              MINC
    +              Memory increment mode
    +              7
    +              1
    +            
    +            
    +              PINC
    +              Peripheral increment mode
    +              6
    +              1
    +            
    +            
    +              CIRC
    +              Circular mode
    +              5
    +              1
    +            
    +            
    +              DIR
    +              Data transfer direction
    +              4
    +              1
    +            
    +            
    +              TEIE
    +              Transfer error interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              HTIE
    +              Half transfer interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              TCIE
    +              Transfer complete interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              EN
    +              Channel enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNDTR7
    +          CNDTR7
    +          channel x number of data
    +          register
    +          0x84
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              NDT
    +              Number of data to transfer
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CPAR7
    +          CPAR7
    +          channel x peripheral address
    +          register
    +          0x88
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PA
    +              Peripheral address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CMAR7
    +          CMAR7
    +          channel x memory address
    +          register
    +          0x8C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MA
    +              Memory address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CSELR
    +          CSELR
    +          channel selection register
    +          0xA8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              C7S
    +              DMA channel 7 selection
    +              24
    +              4
    +            
    +            
    +              C6S
    +              DMA channel 6 selection
    +              20
    +              4
    +            
    +            
    +              C5S
    +              DMA channel 5 selection
    +              16
    +              4
    +            
    +            
    +              C4S
    +              DMA channel 4 selection
    +              12
    +              4
    +            
    +            
    +              C3S
    +              DMA channel 3 selection
    +              8
    +              4
    +            
    +            
    +              C2S
    +              DMA channel 2 selection
    +              4
    +              4
    +            
    +            
    +              C1S
    +              DMA channel 1 selection
    +              0
    +              4
    +            
    +          
    +        
    +      
    +    
    +    
    +      CRC
    +      Cyclic redundancy check calculation
    +      unit
    +      CRC
    +      0x40023000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          DR
    +          DR
    +          Data register
    +          0x0
    +          0x20
    +          read-write
    +          0xFFFFFFFF
    +          
    +            
    +              DR
    +              Data register bits
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          IDR
    +          IDR
    +          Independent data register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              IDR
    +              General-purpose 8-bit data register
    +              bits
    +              0
    +              8
    +            
    +          
    +        
    +        
    +          CR
    +          CR
    +          Control register
    +          0x8
    +          0x20
    +          0x00000000
    +          
    +            
    +              REV_OUT
    +              Reverse output data
    +              7
    +              1
    +              read-write
    +            
    +            
    +              REV_IN
    +              Reverse input data
    +              5
    +              2
    +              read-write
    +            
    +            
    +              POLYSIZE
    +              Polynomial size
    +              3
    +              2
    +              read-write
    +            
    +            
    +              RESET
    +              RESET bit
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          INIT
    +          INIT
    +          Initial CRC value
    +          0x10
    +          0x20
    +          read-write
    +          0xFFFFFFFF
    +          
    +            
    +              CRC_INIT
    +              Programmable initial CRC
    +              value
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          POL
    +          POL
    +          polynomial
    +          0x14
    +          0x20
    +          read-write
    +          0x04C11DB7
    +          
    +            
    +              Polynomialcoefficients
    +              Programmable polynomial
    +              0
    +              32
    +            
    +          
    +        
    +      
    +    
    +    
    +      GPIOA
    +      General-purpose I/Os
    +      GPIO
    +      0x50000000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          MODER
    +          MODER
    +          GPIO port mode register
    +          0x0
    +          0x20
    +          read-write
    +          0xEBFFFCFF
    +          
    +            
    +              MODE0
    +              Port x configuration bits (y =
    +              0..15)
    +              0
    +              2
    +            
    +            
    +              MODE1
    +              Port x configuration bits (y =
    +              0..15)
    +              2
    +              2
    +            
    +            
    +              MODE2
    +              Port x configuration bits (y =
    +              0..15)
    +              4
    +              2
    +            
    +            
    +              MODE3
    +              Port x configuration bits (y =
    +              0..15)
    +              6
    +              2
    +            
    +            
    +              MODE4
    +              Port x configuration bits (y =
    +              0..15)
    +              8
    +              2
    +            
    +            
    +              MODE5
    +              Port x configuration bits (y =
    +              0..15)
    +              10
    +              2
    +            
    +            
    +              MODE6
    +              Port x configuration bits (y =
    +              0..15)
    +              12
    +              2
    +            
    +            
    +              MODE7
    +              Port x configuration bits (y =
    +              0..15)
    +              14
    +              2
    +            
    +            
    +              MODE8
    +              Port x configuration bits (y =
    +              0..15)
    +              16
    +              2
    +            
    +            
    +              MODE9
    +              Port x configuration bits (y =
    +              0..15)
    +              18
    +              2
    +            
    +            
    +              MODE10
    +              Port x configuration bits (y =
    +              0..15)
    +              20
    +              2
    +            
    +            
    +              MODE11
    +              Port x configuration bits (y =
    +              0..15)
    +              22
    +              2
    +            
    +            
    +              MODE12
    +              Port x configuration bits (y =
    +              0..15)
    +              24
    +              2
    +            
    +            
    +              MODE13
    +              Port x configuration bits (y =
    +              0..15)
    +              26
    +              2
    +            
    +            
    +              MODE14
    +              Port x configuration bits (y =
    +              0..15)
    +              28
    +              2
    +            
    +            
    +              MODE15
    +              Port x configuration bits (y =
    +              0..15)
    +              30
    +              2
    +            
    +          
    +        
    +        
    +          OTYPER
    +          OTYPER
    +          GPIO port output type register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OT15
    +              Port x configuration bits (y =
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              OT14
    +              Port x configuration bits (y =
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              OT13
    +              Port x configuration bits (y =
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              OT12
    +              Port x configuration bits (y =
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              OT11
    +              Port x configuration bits (y =
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              OT10
    +              Port x configuration bits (y =
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              OT9
    +              Port x configuration bits (y =
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              OT8
    +              Port x configuration bits (y =
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              OT7
    +              Port x configuration bits (y =
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              OT6
    +              Port x configuration bits (y =
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              OT5
    +              Port x configuration bits (y =
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              OT4
    +              Port x configuration bits (y =
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              OT3
    +              Port x configuration bits (y =
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              OT2
    +              Port x configuration bits (y =
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              OT1
    +              Port x configuration bits (y =
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              OT0
    +              Port x configuration bits (y =
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          OSPEEDR
    +          OSPEEDR
    +          GPIO port output speed
    +          register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OSPEED15
    +              Port x configuration bits (y =
    +              0..15)
    +              30
    +              2
    +            
    +            
    +              OSPEED14
    +              Port x configuration bits (y =
    +              0..15)
    +              28
    +              2
    +            
    +            
    +              OSPEED13
    +              Port x configuration bits (y =
    +              0..15)
    +              26
    +              2
    +            
    +            
    +              OSPEED12
    +              Port x configuration bits (y =
    +              0..15)
    +              24
    +              2
    +            
    +            
    +              OSPEED11
    +              Port x configuration bits (y =
    +              0..15)
    +              22
    +              2
    +            
    +            
    +              OSPEED10
    +              Port x configuration bits (y =
    +              0..15)
    +              20
    +              2
    +            
    +            
    +              OSPEED9
    +              Port x configuration bits (y =
    +              0..15)
    +              18
    +              2
    +            
    +            
    +              OSPEED8
    +              Port x configuration bits (y =
    +              0..15)
    +              16
    +              2
    +            
    +            
    +              OSPEED7
    +              Port x configuration bits (y =
    +              0..15)
    +              14
    +              2
    +            
    +            
    +              OSPEED6
    +              Port x configuration bits (y =
    +              0..15)
    +              12
    +              2
    +            
    +            
    +              OSPEED5
    +              Port x configuration bits (y =
    +              0..15)
    +              10
    +              2
    +            
    +            
    +              OSPEED4
    +              Port x configuration bits (y =
    +              0..15)
    +              8
    +              2
    +            
    +            
    +              OSPEED3
    +              Port x configuration bits (y =
    +              0..15)
    +              6
    +              2
    +            
    +            
    +              OSPEED2
    +              Port x configuration bits (y =
    +              0..15)
    +              4
    +              2
    +            
    +            
    +              OSPEED1
    +              Port x configuration bits (y =
    +              0..15)
    +              2
    +              2
    +            
    +            
    +              OSPEED0
    +              Port x configuration bits (y =
    +              0..15)
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          PUPDR
    +          PUPDR
    +          GPIO port pull-up/pull-down
    +          register
    +          0xC
    +          0x20
    +          read-write
    +          0x24000000
    +          
    +            
    +              PUPD15
    +              Port x configuration bits (y =
    +              0..15)
    +              30
    +              2
    +            
    +            
    +              PUPD14
    +              Port x configuration bits (y =
    +              0..15)
    +              28
    +              2
    +            
    +            
    +              PUPD13
    +              Port x configuration bits (y =
    +              0..15)
    +              26
    +              2
    +            
    +            
    +              PUPD12
    +              Port x configuration bits (y =
    +              0..15)
    +              24
    +              2
    +            
    +            
    +              PUPD11
    +              Port x configuration bits (y =
    +              0..15)
    +              22
    +              2
    +            
    +            
    +              PUPD10
    +              Port x configuration bits (y =
    +              0..15)
    +              20
    +              2
    +            
    +            
    +              PUPD9
    +              Port x configuration bits (y =
    +              0..15)
    +              18
    +              2
    +            
    +            
    +              PUPD8
    +              Port x configuration bits (y =
    +              0..15)
    +              16
    +              2
    +            
    +            
    +              PUPD7
    +              Port x configuration bits (y =
    +              0..15)
    +              14
    +              2
    +            
    +            
    +              PUPD6
    +              Port x configuration bits (y =
    +              0..15)
    +              12
    +              2
    +            
    +            
    +              PUPD5
    +              Port x configuration bits (y =
    +              0..15)
    +              10
    +              2
    +            
    +            
    +              PUPD4
    +              Port x configuration bits (y =
    +              0..15)
    +              8
    +              2
    +            
    +            
    +              PUPD3
    +              Port x configuration bits (y =
    +              0..15)
    +              6
    +              2
    +            
    +            
    +              PUPD2
    +              Port x configuration bits (y =
    +              0..15)
    +              4
    +              2
    +            
    +            
    +              PUPD1
    +              Port x configuration bits (y =
    +              0..15)
    +              2
    +              2
    +            
    +            
    +              PUPD0
    +              Port x configuration bits (y =
    +              0..15)
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          IDR
    +          IDR
    +          GPIO port input data register
    +          0x10
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              ID15
    +              Port input data bit (y =
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              ID14
    +              Port input data bit (y =
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              ID13
    +              Port input data bit (y =
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              ID12
    +              Port input data bit (y =
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              ID11
    +              Port input data bit (y =
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              ID10
    +              Port input data bit (y =
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              ID9
    +              Port input data bit (y =
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              ID8
    +              Port input data bit (y =
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              ID7
    +              Port input data bit (y =
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              ID6
    +              Port input data bit (y =
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              ID5
    +              Port input data bit (y =
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              ID4
    +              Port input data bit (y =
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              ID3
    +              Port input data bit (y =
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              ID2
    +              Port input data bit (y =
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              ID1
    +              Port input data bit (y =
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              ID0
    +              Port input data bit (y =
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ODR
    +          ODR
    +          GPIO port output data register
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OD15
    +              Port output data bit (y =
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              OD14
    +              Port output data bit (y =
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              OD13
    +              Port output data bit (y =
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              OD12
    +              Port output data bit (y =
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              OD11
    +              Port output data bit (y =
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              OD10
    +              Port output data bit (y =
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              OD9
    +              Port output data bit (y =
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              OD8
    +              Port output data bit (y =
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              OD7
    +              Port output data bit (y =
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              OD6
    +              Port output data bit (y =
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              OD5
    +              Port output data bit (y =
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              OD4
    +              Port output data bit (y =
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              OD3
    +              Port output data bit (y =
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              OD2
    +              Port output data bit (y =
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              OD1
    +              Port output data bit (y =
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              OD0
    +              Port output data bit (y =
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          BSRR
    +          BSRR
    +          GPIO port bit set/reset
    +          register
    +          0x18
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              BR15
    +              Port x reset bit y (y =
    +              0..15)
    +              31
    +              1
    +            
    +            
    +              BR14
    +              Port x reset bit y (y =
    +              0..15)
    +              30
    +              1
    +            
    +            
    +              BR13
    +              Port x reset bit y (y =
    +              0..15)
    +              29
    +              1
    +            
    +            
    +              BR12
    +              Port x reset bit y (y =
    +              0..15)
    +              28
    +              1
    +            
    +            
    +              BR11
    +              Port x reset bit y (y =
    +              0..15)
    +              27
    +              1
    +            
    +            
    +              BR10
    +              Port x reset bit y (y =
    +              0..15)
    +              26
    +              1
    +            
    +            
    +              BR9
    +              Port x reset bit y (y =
    +              0..15)
    +              25
    +              1
    +            
    +            
    +              BR8
    +              Port x reset bit y (y =
    +              0..15)
    +              24
    +              1
    +            
    +            
    +              BR7
    +              Port x reset bit y (y =
    +              0..15)
    +              23
    +              1
    +            
    +            
    +              BR6
    +              Port x reset bit y (y =
    +              0..15)
    +              22
    +              1
    +            
    +            
    +              BR5
    +              Port x reset bit y (y =
    +              0..15)
    +              21
    +              1
    +            
    +            
    +              BR4
    +              Port x reset bit y (y =
    +              0..15)
    +              20
    +              1
    +            
    +            
    +              BR3
    +              Port x reset bit y (y =
    +              0..15)
    +              19
    +              1
    +            
    +            
    +              BR2
    +              Port x reset bit y (y =
    +              0..15)
    +              18
    +              1
    +            
    +            
    +              BR1
    +              Port x reset bit y (y =
    +              0..15)
    +              17
    +              1
    +            
    +            
    +              BR0
    +              Port x reset bit y (y =
    +              0..15)
    +              16
    +              1
    +            
    +            
    +              BS15
    +              Port x set bit y (y=
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              BS14
    +              Port x set bit y (y=
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              BS13
    +              Port x set bit y (y=
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              BS12
    +              Port x set bit y (y=
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              BS11
    +              Port x set bit y (y=
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              BS10
    +              Port x set bit y (y=
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              BS9
    +              Port x set bit y (y=
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              BS8
    +              Port x set bit y (y=
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              BS7
    +              Port x set bit y (y=
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              BS6
    +              Port x set bit y (y=
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              BS5
    +              Port x set bit y (y=
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              BS4
    +              Port x set bit y (y=
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              BS3
    +              Port x set bit y (y=
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              BS2
    +              Port x set bit y (y=
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              BS1
    +              Port x set bit y (y=
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              BS0
    +              Port x set bit y (y=
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          LCKR
    +          LCKR
    +          GPIO port configuration lock
    +          register
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              LCKK
    +              Port x lock bit y (y=
    +              0..15)
    +              16
    +              1
    +            
    +            
    +              LCK15
    +              Port x lock bit y (y=
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              LCK14
    +              Port x lock bit y (y=
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              LCK13
    +              Port x lock bit y (y=
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              LCK12
    +              Port x lock bit y (y=
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              LCK11
    +              Port x lock bit y (y=
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              LCK10
    +              Port x lock bit y (y=
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              LCK9
    +              Port x lock bit y (y=
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              LCK8
    +              Port x lock bit y (y=
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              LCK7
    +              Port x lock bit y (y=
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              LCK6
    +              Port x lock bit y (y=
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              LCK5
    +              Port x lock bit y (y=
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              LCK4
    +              Port x lock bit y (y=
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              LCK3
    +              Port x lock bit y (y=
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              LCK2
    +              Port x lock bit y (y=
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              LCK1
    +              Port x lock bit y (y=
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              LCK0
    +              Port x lock bit y (y=
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          AFRL
    +          AFRL
    +          GPIO alternate function low
    +          register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AFSEL7
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              28
    +              4
    +            
    +            
    +              AFSEL6
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              24
    +              4
    +            
    +            
    +              AFSEL5
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              20
    +              4
    +            
    +            
    +              AFSEL4
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              16
    +              4
    +            
    +            
    +              AFSEL3
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              12
    +              4
    +            
    +            
    +              AFSEL2
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              8
    +              4
    +            
    +            
    +              AFSEL1
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              4
    +              4
    +            
    +            
    +              AFSEL0
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          AFRH
    +          AFRH
    +          GPIO alternate function high
    +          register
    +          0x24
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AFSEL15
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              28
    +              4
    +            
    +            
    +              AFSEL14
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              24
    +              4
    +            
    +            
    +              AFSEL13
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              20
    +              4
    +            
    +            
    +              AFSEL12
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              16
    +              4
    +            
    +            
    +              AFSEL11
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              12
    +              4
    +            
    +            
    +              AFSEL10
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              8
    +              4
    +            
    +            
    +              AFSEL9
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              4
    +              4
    +            
    +            
    +              AFSEL8
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          BRR
    +          BRR
    +          GPIO port bit reset register
    +          0x28
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              BR15
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              15
    +              1
    +            
    +            
    +              BR14
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              14
    +              1
    +            
    +            
    +              BR13
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              13
    +              1
    +            
    +            
    +              BR12
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              12
    +              1
    +            
    +            
    +              BR11
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              11
    +              1
    +            
    +            
    +              BR10
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              10
    +              1
    +            
    +            
    +              BR9
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              9
    +              1
    +            
    +            
    +              BR8
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              8
    +              1
    +            
    +            
    +              BR7
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              7
    +              1
    +            
    +            
    +              BR6
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              6
    +              1
    +            
    +            
    +              BR5
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              5
    +              1
    +            
    +            
    +              BR4
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              4
    +              1
    +            
    +            
    +              BR3
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              3
    +              1
    +            
    +            
    +              BR2
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              2
    +              1
    +            
    +            
    +              BR1
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              1
    +              1
    +            
    +            
    +              BR0
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              0
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      GPIOB
    +      General-purpose I/Os
    +      GPIO
    +      0x50000400
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          MODER
    +          MODER
    +          GPIO port mode register
    +          0x0
    +          0x20
    +          read-write
    +          0xFFFFFFFF
    +          
    +            
    +              MODE15
    +              Port x configuration bits (y =
    +              0..15)
    +              30
    +              2
    +            
    +            
    +              MODE14
    +              Port x configuration bits (y =
    +              0..15)
    +              28
    +              2
    +            
    +            
    +              MODE13
    +              Port x configuration bits (y =
    +              0..15)
    +              26
    +              2
    +            
    +            
    +              MODE12
    +              Port x configuration bits (y =
    +              0..15)
    +              24
    +              2
    +            
    +            
    +              MODE11
    +              Port x configuration bits (y =
    +              0..15)
    +              22
    +              2
    +            
    +            
    +              MODE10
    +              Port x configuration bits (y =
    +              0..15)
    +              20
    +              2
    +            
    +            
    +              MODE9
    +              Port x configuration bits (y =
    +              0..15)
    +              18
    +              2
    +            
    +            
    +              MODE8
    +              Port x configuration bits (y =
    +              0..15)
    +              16
    +              2
    +            
    +            
    +              MODE7
    +              Port x configuration bits (y =
    +              0..15)
    +              14
    +              2
    +            
    +            
    +              MODE6
    +              Port x configuration bits (y =
    +              0..15)
    +              12
    +              2
    +            
    +            
    +              MODE5
    +              Port x configuration bits (y =
    +              0..15)
    +              10
    +              2
    +            
    +            
    +              MODE4
    +              Port x configuration bits (y =
    +              0..15)
    +              8
    +              2
    +            
    +            
    +              MODE3
    +              Port x configuration bits (y =
    +              0..15)
    +              6
    +              2
    +            
    +            
    +              MODE2
    +              Port x configuration bits (y =
    +              0..15)
    +              4
    +              2
    +            
    +            
    +              MODE1
    +              Port x configuration bits (y =
    +              0..15)
    +              2
    +              2
    +            
    +            
    +              MODE0
    +              Port x configuration bits (y =
    +              0..15)
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          OTYPER
    +          OTYPER
    +          GPIO port output type register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OT15
    +              Port x configuration bits (y =
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              OT14
    +              Port x configuration bits (y =
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              OT13
    +              Port x configuration bits (y =
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              OT12
    +              Port x configuration bits (y =
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              OT11
    +              Port x configuration bits (y =
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              OT10
    +              Port x configuration bits (y =
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              OT9
    +              Port x configuration bits (y =
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              OT8
    +              Port x configuration bits (y =
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              OT7
    +              Port x configuration bits (y =
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              OT6
    +              Port x configuration bits (y =
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              OT5
    +              Port x configuration bits (y =
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              OT4
    +              Port x configuration bits (y =
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              OT3
    +              Port x configuration bits (y =
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              OT2
    +              Port x configuration bits (y =
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              OT1
    +              Port x configuration bits (y =
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              OT0
    +              Port x configuration bits (y =
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          OSPEEDR
    +          OSPEEDR
    +          GPIO port output speed
    +          register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OSPEED15
    +              Port x configuration bits (y =
    +              0..15)
    +              30
    +              2
    +            
    +            
    +              OSPEED14
    +              Port x configuration bits (y =
    +              0..15)
    +              28
    +              2
    +            
    +            
    +              OSPEED13
    +              Port x configuration bits (y =
    +              0..15)
    +              26
    +              2
    +            
    +            
    +              OSPEED12
    +              Port x configuration bits (y =
    +              0..15)
    +              24
    +              2
    +            
    +            
    +              OSPEED11
    +              Port x configuration bits (y =
    +              0..15)
    +              22
    +              2
    +            
    +            
    +              OSPEED10
    +              Port x configuration bits (y =
    +              0..15)
    +              20
    +              2
    +            
    +            
    +              OSPEED9
    +              Port x configuration bits (y =
    +              0..15)
    +              18
    +              2
    +            
    +            
    +              OSPEED8
    +              Port x configuration bits (y =
    +              0..15)
    +              16
    +              2
    +            
    +            
    +              OSPEED7
    +              Port x configuration bits (y =
    +              0..15)
    +              14
    +              2
    +            
    +            
    +              OSPEED6
    +              Port x configuration bits (y =
    +              0..15)
    +              12
    +              2
    +            
    +            
    +              OSPEED5
    +              Port x configuration bits (y =
    +              0..15)
    +              10
    +              2
    +            
    +            
    +              OSPEED4
    +              Port x configuration bits (y =
    +              0..15)
    +              8
    +              2
    +            
    +            
    +              OSPEED3
    +              Port x configuration bits (y =
    +              0..15)
    +              6
    +              2
    +            
    +            
    +              OSPEED2
    +              Port x configuration bits (y =
    +              0..15)
    +              4
    +              2
    +            
    +            
    +              OSPEED1
    +              Port x configuration bits (y =
    +              0..15)
    +              2
    +              2
    +            
    +            
    +              OSPEED0
    +              Port x configuration bits (y =
    +              0..15)
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          PUPDR
    +          PUPDR
    +          GPIO port pull-up/pull-down
    +          register
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PUPD15
    +              Port x configuration bits (y =
    +              0..15)
    +              30
    +              2
    +            
    +            
    +              PUPD14
    +              Port x configuration bits (y =
    +              0..15)
    +              28
    +              2
    +            
    +            
    +              PUPD13
    +              Port x configuration bits (y =
    +              0..15)
    +              26
    +              2
    +            
    +            
    +              PUPD12
    +              Port x configuration bits (y =
    +              0..15)
    +              24
    +              2
    +            
    +            
    +              PUPD11
    +              Port x configuration bits (y =
    +              0..15)
    +              22
    +              2
    +            
    +            
    +              PUPD10
    +              Port x configuration bits (y =
    +              0..15)
    +              20
    +              2
    +            
    +            
    +              PUPD9
    +              Port x configuration bits (y =
    +              0..15)
    +              18
    +              2
    +            
    +            
    +              PUPD8
    +              Port x configuration bits (y =
    +              0..15)
    +              16
    +              2
    +            
    +            
    +              PUPD7
    +              Port x configuration bits (y =
    +              0..15)
    +              14
    +              2
    +            
    +            
    +              PUPD6
    +              Port x configuration bits (y =
    +              0..15)
    +              12
    +              2
    +            
    +            
    +              PUPD5
    +              Port x configuration bits (y =
    +              0..15)
    +              10
    +              2
    +            
    +            
    +              PUPD4
    +              Port x configuration bits (y =
    +              0..15)
    +              8
    +              2
    +            
    +            
    +              PUPD3
    +              Port x configuration bits (y =
    +              0..15)
    +              6
    +              2
    +            
    +            
    +              PUPD2
    +              Port x configuration bits (y =
    +              0..15)
    +              4
    +              2
    +            
    +            
    +              PUPD1
    +              Port x configuration bits (y =
    +              0..15)
    +              2
    +              2
    +            
    +            
    +              PUPD0
    +              Port x configuration bits (y =
    +              0..15)
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          IDR
    +          IDR
    +          GPIO port input data register
    +          0x10
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              ID15
    +              Port input data bit (y =
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              ID14
    +              Port input data bit (y =
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              ID13
    +              Port input data bit (y =
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              ID12
    +              Port input data bit (y =
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              ID11
    +              Port input data bit (y =
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              ID10
    +              Port input data bit (y =
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              ID9
    +              Port input data bit (y =
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              ID8
    +              Port input data bit (y =
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              ID7
    +              Port input data bit (y =
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              ID6
    +              Port input data bit (y =
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              ID5
    +              Port input data bit (y =
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              ID4
    +              Port input data bit (y =
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              ID3
    +              Port input data bit (y =
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              ID2
    +              Port input data bit (y =
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              ID1
    +              Port input data bit (y =
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              ID0
    +              Port input data bit (y =
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ODR
    +          ODR
    +          GPIO port output data register
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OD15
    +              Port output data bit (y =
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              OD14
    +              Port output data bit (y =
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              OD13
    +              Port output data bit (y =
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              OD12
    +              Port output data bit (y =
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              OD11
    +              Port output data bit (y =
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              OD10
    +              Port output data bit (y =
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              OD9
    +              Port output data bit (y =
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              OD8
    +              Port output data bit (y =
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              OD7
    +              Port output data bit (y =
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              OD6
    +              Port output data bit (y =
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              OD5
    +              Port output data bit (y =
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              OD4
    +              Port output data bit (y =
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              OD3
    +              Port output data bit (y =
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              OD2
    +              Port output data bit (y =
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              OD1
    +              Port output data bit (y =
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              OD0
    +              Port output data bit (y =
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          BSRR
    +          BSRR
    +          GPIO port bit set/reset
    +          register
    +          0x18
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              BR15
    +              Port x reset bit y (y =
    +              0..15)
    +              31
    +              1
    +            
    +            
    +              BR14
    +              Port x reset bit y (y =
    +              0..15)
    +              30
    +              1
    +            
    +            
    +              BR13
    +              Port x reset bit y (y =
    +              0..15)
    +              29
    +              1
    +            
    +            
    +              BR12
    +              Port x reset bit y (y =
    +              0..15)
    +              28
    +              1
    +            
    +            
    +              BR11
    +              Port x reset bit y (y =
    +              0..15)
    +              27
    +              1
    +            
    +            
    +              BR10
    +              Port x reset bit y (y =
    +              0..15)
    +              26
    +              1
    +            
    +            
    +              BR9
    +              Port x reset bit y (y =
    +              0..15)
    +              25
    +              1
    +            
    +            
    +              BR8
    +              Port x reset bit y (y =
    +              0..15)
    +              24
    +              1
    +            
    +            
    +              BR7
    +              Port x reset bit y (y =
    +              0..15)
    +              23
    +              1
    +            
    +            
    +              BR6
    +              Port x reset bit y (y =
    +              0..15)
    +              22
    +              1
    +            
    +            
    +              BR5
    +              Port x reset bit y (y =
    +              0..15)
    +              21
    +              1
    +            
    +            
    +              BR4
    +              Port x reset bit y (y =
    +              0..15)
    +              20
    +              1
    +            
    +            
    +              BR3
    +              Port x reset bit y (y =
    +              0..15)
    +              19
    +              1
    +            
    +            
    +              BR2
    +              Port x reset bit y (y =
    +              0..15)
    +              18
    +              1
    +            
    +            
    +              BR1
    +              Port x reset bit y (y =
    +              0..15)
    +              17
    +              1
    +            
    +            
    +              BR0
    +              Port x reset bit y (y =
    +              0..15)
    +              16
    +              1
    +            
    +            
    +              BS15
    +              Port x set bit y (y=
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              BS14
    +              Port x set bit y (y=
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              BS13
    +              Port x set bit y (y=
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              BS12
    +              Port x set bit y (y=
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              BS11
    +              Port x set bit y (y=
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              BS10
    +              Port x set bit y (y=
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              BS9
    +              Port x set bit y (y=
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              BS8
    +              Port x set bit y (y=
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              BS7
    +              Port x set bit y (y=
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              BS6
    +              Port x set bit y (y=
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              BS5
    +              Port x set bit y (y=
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              BS4
    +              Port x set bit y (y=
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              BS3
    +              Port x set bit y (y=
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              BS2
    +              Port x set bit y (y=
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              BS1
    +              Port x set bit y (y=
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              BS0
    +              Port x set bit y (y=
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          LCKR
    +          LCKR
    +          GPIO port configuration lock
    +          register
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              LCKK
    +              Port x lock bit y (y=
    +              0..15)
    +              16
    +              1
    +            
    +            
    +              LCK15
    +              Port x lock bit y (y=
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              LCK14
    +              Port x lock bit y (y=
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              LCK13
    +              Port x lock bit y (y=
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              LCK12
    +              Port x lock bit y (y=
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              LCK11
    +              Port x lock bit y (y=
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              LCK10
    +              Port x lock bit y (y=
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              LCK9
    +              Port x lock bit y (y=
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              LCK8
    +              Port x lock bit y (y=
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              LCK7
    +              Port x lock bit y (y=
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              LCK6
    +              Port x lock bit y (y=
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              LCK5
    +              Port x lock bit y (y=
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              LCK4
    +              Port x lock bit y (y=
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              LCK3
    +              Port x lock bit y (y=
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              LCK2
    +              Port x lock bit y (y=
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              LCK1
    +              Port x lock bit y (y=
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              LCK0
    +              Port x lock bit y (y=
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          AFRL
    +          AFRL
    +          GPIO alternate function low
    +          register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AFSEL7
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              28
    +              4
    +            
    +            
    +              AFSEL6
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              24
    +              4
    +            
    +            
    +              AFSEL5
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              20
    +              4
    +            
    +            
    +              AFSEL4
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              16
    +              4
    +            
    +            
    +              AFSEL3
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              12
    +              4
    +            
    +            
    +              AFSEL2
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              8
    +              4
    +            
    +            
    +              AFSEL1
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              4
    +              4
    +            
    +            
    +              AFSEL0
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          AFRH
    +          AFRH
    +          GPIO alternate function high
    +          register
    +          0x24
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AFSEL15
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              28
    +              4
    +            
    +            
    +              AFSEL14
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              24
    +              4
    +            
    +            
    +              AFSEL13
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              20
    +              4
    +            
    +            
    +              AFSEL12
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              16
    +              4
    +            
    +            
    +              AFSEL11
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              12
    +              4
    +            
    +            
    +              AFSEL10
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              8
    +              4
    +            
    +            
    +              AFSEL9
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              4
    +              4
    +            
    +            
    +              AFSEL8
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          BRR
    +          BRR
    +          GPIO port bit reset register
    +          0x28
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              BR15
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              15
    +              1
    +            
    +            
    +              BR14
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              14
    +              1
    +            
    +            
    +              BR13
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              13
    +              1
    +            
    +            
    +              BR12
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              12
    +              1
    +            
    +            
    +              BR11
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              11
    +              1
    +            
    +            
    +              BR10
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              10
    +              1
    +            
    +            
    +              BR9
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              9
    +              1
    +            
    +            
    +              BR8
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              8
    +              1
    +            
    +            
    +              BR7
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              7
    +              1
    +            
    +            
    +              BR6
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              6
    +              1
    +            
    +            
    +              BR5
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              5
    +              1
    +            
    +            
    +              BR4
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              4
    +              1
    +            
    +            
    +              BR3
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              3
    +              1
    +            
    +            
    +              BR2
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              2
    +              1
    +            
    +            
    +              BR1
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              1
    +              1
    +            
    +            
    +              BR0
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              0
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      GPIOC
    +      0x50000800
    +    
    +    
    +      GPIOD
    +      0x50000C00
    +    
    +    
    +      GPIOH
    +      0x50001C00
    +    
    +    
    +      GPIOE
    +      0x50001000
    +    
    +    
    +      LPTIM
    +      Low power timer
    +      LPTIM
    +      0x40007C00
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        LPTIM1
    +        LPTIMER1 interrupt through
    +        EXTI29
    +        13
    +      
    +      
    +        
    +          ISR
    +          ISR
    +          Interrupt and Status Register
    +          0x0
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              DOWN
    +              Counter direction change up to
    +              down
    +              6
    +              1
    +            
    +            
    +              UP
    +              Counter direction change down to
    +              up
    +              5
    +              1
    +            
    +            
    +              ARROK
    +              Autoreload register update
    +              OK
    +              4
    +              1
    +            
    +            
    +              CMPOK
    +              Compare register update OK
    +              3
    +              1
    +            
    +            
    +              EXTTRIG
    +              External trigger edge
    +              event
    +              2
    +              1
    +            
    +            
    +              ARRM
    +              Autoreload match
    +              1
    +              1
    +            
    +            
    +              CMPM
    +              Compare match
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ICR
    +          ICR
    +          Interrupt Clear Register
    +          0x4
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              DOWNCF
    +              Direction change to down Clear
    +              Flag
    +              6
    +              1
    +            
    +            
    +              UPCF
    +              Direction change to UP Clear
    +              Flag
    +              5
    +              1
    +            
    +            
    +              ARROKCF
    +              Autoreload register update OK Clear
    +              Flag
    +              4
    +              1
    +            
    +            
    +              CMPOKCF
    +              Compare register update OK Clear
    +              Flag
    +              3
    +              1
    +            
    +            
    +              EXTTRIGCF
    +              External trigger valid edge Clear
    +              Flag
    +              2
    +              1
    +            
    +            
    +              ARRMCF
    +              Autoreload match Clear
    +              Flag
    +              1
    +              1
    +            
    +            
    +              CMPMCF
    +              compare match Clear Flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          IER
    +          IER
    +          Interrupt Enable Register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DOWNIE
    +              Direction change to down Interrupt
    +              Enable
    +              6
    +              1
    +            
    +            
    +              UPIE
    +              Direction change to UP Interrupt
    +              Enable
    +              5
    +              1
    +            
    +            
    +              ARROKIE
    +              Autoreload register update OK Interrupt
    +              Enable
    +              4
    +              1
    +            
    +            
    +              CMPOKIE
    +              Compare register update OK Interrupt
    +              Enable
    +              3
    +              1
    +            
    +            
    +              EXTTRIGIE
    +              External trigger valid edge Interrupt
    +              Enable
    +              2
    +              1
    +            
    +            
    +              ARRMIE
    +              Autoreload match Interrupt
    +              Enable
    +              1
    +              1
    +            
    +            
    +              CMPMIE
    +              Compare match Interrupt
    +              Enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CFGR
    +          CFGR
    +          Configuration Register
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ENC
    +              Encoder mode enable
    +              24
    +              1
    +            
    +            
    +              COUNTMODE
    +              counter mode enabled
    +              23
    +              1
    +            
    +            
    +              PRELOAD
    +              Registers update mode
    +              22
    +              1
    +            
    +            
    +              WAVPOL
    +              Waveform shape polarity
    +              21
    +              1
    +            
    +            
    +              WAVE
    +              Waveform shape
    +              20
    +              1
    +            
    +            
    +              TIMOUT
    +              Timeout enable
    +              19
    +              1
    +            
    +            
    +              TRIGEN
    +              Trigger enable and
    +              polarity
    +              17
    +              2
    +            
    +            
    +              TRIGSEL
    +              Trigger selector
    +              13
    +              3
    +            
    +            
    +              PRESC
    +              Clock prescaler
    +              9
    +              3
    +            
    +            
    +              TRGFLT
    +              Configurable digital filter for
    +              trigger
    +              6
    +              2
    +            
    +            
    +              CKFLT
    +              Configurable digital filter for external
    +              clock
    +              3
    +              2
    +            
    +            
    +              CKPOL
    +              Clock Polarity
    +              1
    +              2
    +            
    +            
    +              CKSEL
    +              Clock selector
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CR
    +          CR
    +          Control Register
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CNTSTRT
    +              Timer start in continuous
    +              mode
    +              2
    +              1
    +            
    +            
    +              SNGSTRT
    +              LPTIM start in single mode
    +              1
    +              1
    +            
    +            
    +              ENABLE
    +              LPTIM Enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CMP
    +          CMP
    +          Compare Register
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CMP
    +              Compare value.
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          ARR
    +          ARR
    +          Autoreload Register
    +          0x18
    +          0x20
    +          read-write
    +          0x00000001
    +          
    +            
    +              ARR
    +              Auto reload value.
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CNT
    +          CNT
    +          Counter Register
    +          0x1C
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CNT
    +              Counter value.
    +              0
    +              16
    +            
    +          
    +        
    +      
    +    
    +    
    +      RNG
    +      Random number generator
    +      RNG
    +      0x40025000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          CR
    +          CR
    +          control register
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              IE
    +              Interrupt enable
    +              3
    +              1
    +            
    +            
    +              RNGEN
    +              Random number generator
    +              enable
    +              2
    +              1
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          status register
    +          0x4
    +          0x20
    +          0x00000000
    +          
    +            
    +              SEIS
    +              Seed error interrupt
    +              status
    +              6
    +              1
    +              read-write
    +            
    +            
    +              CEIS
    +              Clock error interrupt
    +              status
    +              5
    +              1
    +              read-write
    +            
    +            
    +              SECS
    +              Seed error current status
    +              2
    +              1
    +              read-only
    +            
    +            
    +              CECS
    +              Clock error current status
    +              1
    +              1
    +              read-only
    +            
    +            
    +              DRDY
    +              Data ready
    +              0
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          DR
    +          DR
    +          data register
    +          0x8
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              RNDATA
    +              Random data
    +              0
    +              32
    +            
    +          
    +        
    +      
    +    
    +    
    +      RTC
    +      Real-time clock
    +      RTC
    +      0x40002800
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        RTC
    +        RTC global interrupt
    +        2
    +      
    +      
    +        
    +          TR
    +          TR
    +          RTC time register
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PM
    +              AM/PM notation
    +              22
    +              1
    +            
    +            
    +              HT
    +              Hour tens in BCD format
    +              20
    +              2
    +            
    +            
    +              HU
    +              Hour units in BCD format
    +              16
    +              4
    +            
    +            
    +              MNT
    +              Minute tens in BCD format
    +              12
    +              3
    +            
    +            
    +              MNU
    +              Minute units in BCD format
    +              8
    +              4
    +            
    +            
    +              ST
    +              Second tens in BCD format
    +              4
    +              3
    +            
    +            
    +              SU
    +              Second units in BCD format
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          DR
    +          DR
    +          RTC date register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              YT
    +              Year tens in BCD format
    +              20
    +              4
    +            
    +            
    +              YU
    +              Year units in BCD format
    +              16
    +              4
    +            
    +            
    +              WDU
    +              Week day units
    +              13
    +              3
    +            
    +            
    +              MT
    +              Month tens in BCD format
    +              12
    +              1
    +            
    +            
    +              MU
    +              Month units in BCD format
    +              8
    +              4
    +            
    +            
    +              DT
    +              Date tens in BCD format
    +              4
    +              2
    +            
    +            
    +              DU
    +              Date units in BCD format
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          CR
    +          CR
    +          RTC control register
    +          0x8
    +          0x20
    +          0x00000000
    +          
    +            
    +              COE
    +              Calibration output enable
    +              23
    +              1
    +              read-write
    +            
    +            
    +              OSEL
    +              Output selection
    +              21
    +              2
    +              read-write
    +            
    +            
    +              POL
    +              Output polarity
    +              20
    +              1
    +              read-write
    +            
    +            
    +              COSEL
    +              Calibration output
    +              selection
    +              19
    +              1
    +              read-write
    +            
    +            
    +              BKP
    +              Backup
    +              18
    +              1
    +              read-write
    +            
    +            
    +              SUB1H
    +              Subtract 1 hour (winter time
    +              change)
    +              17
    +              1
    +              write-only
    +            
    +            
    +              ADD1H
    +              Add 1 hour (summer time
    +              change)
    +              16
    +              1
    +              write-only
    +            
    +            
    +              TSIE
    +              Time-stamp interrupt
    +              enable
    +              15
    +              1
    +              read-write
    +            
    +            
    +              WUTIE
    +              Wakeup timer interrupt
    +              enable
    +              14
    +              1
    +              read-write
    +            
    +            
    +              ALRBIE
    +              Alarm B interrupt enable
    +              13
    +              1
    +              read-write
    +            
    +            
    +              ALRAIE
    +              Alarm A interrupt enable
    +              12
    +              1
    +              read-write
    +            
    +            
    +              TSE
    +              timestamp enable
    +              11
    +              1
    +              read-write
    +            
    +            
    +              WUTE
    +              Wakeup timer enable
    +              10
    +              1
    +              read-write
    +            
    +            
    +              ALRBE
    +              Alarm B enable
    +              9
    +              1
    +              read-write
    +            
    +            
    +              ALRAE
    +              Alarm A enable
    +              8
    +              1
    +              read-write
    +            
    +            
    +              FMT
    +              Hour format
    +              6
    +              1
    +              read-write
    +            
    +            
    +              BYPSHAD
    +              Bypass the shadow
    +              registers
    +              5
    +              1
    +              read-write
    +            
    +            
    +              REFCKON
    +              RTC_REFIN reference clock detection
    +              enable (50 or 60 Hz)
    +              4
    +              1
    +              read-write
    +            
    +            
    +              TSEDGE
    +              Time-stamp event active
    +              edge
    +              3
    +              1
    +              read-write
    +            
    +            
    +              WUCKSEL
    +              Wakeup clock selection
    +              0
    +              3
    +              read-write
    +            
    +          
    +        
    +        
    +          ISR
    +          ISR
    +          RTC initialization and status
    +          register
    +          0xC
    +          0x20
    +          0x00000000
    +          
    +            
    +              TAMP2F
    +              RTC_TAMP2 detection flag
    +              14
    +              1
    +              read-write
    +            
    +            
    +              TAMP1F
    +              RTC_TAMP1 detection flag
    +              13
    +              1
    +              read-write
    +            
    +            
    +              TSOVF
    +              Time-stamp overflow flag
    +              12
    +              1
    +              read-write
    +            
    +            
    +              TSF
    +              Time-stamp flag
    +              11
    +              1
    +              read-write
    +            
    +            
    +              WUTF
    +              Wakeup timer flag
    +              10
    +              1
    +              read-write
    +            
    +            
    +              ALRBF
    +              Alarm B flag
    +              9
    +              1
    +              read-write
    +            
    +            
    +              ALRAF
    +              Alarm A flag
    +              8
    +              1
    +              read-write
    +            
    +            
    +              INIT
    +              Initialization mode
    +              7
    +              1
    +              read-write
    +            
    +            
    +              INITF
    +              Initialization flag
    +              6
    +              1
    +              read-only
    +            
    +            
    +              RSF
    +              Registers synchronization
    +              flag
    +              5
    +              1
    +              read-write
    +            
    +            
    +              INITS
    +              Initialization status flag
    +              4
    +              1
    +              read-only
    +            
    +            
    +              SHPF
    +              Shift operation pending
    +              3
    +              1
    +              read-only
    +            
    +            
    +              WUTWF
    +              Wakeup timer write flag
    +              2
    +              1
    +              read-only
    +            
    +            
    +              ALRBWF
    +              Alarm B write flag
    +              1
    +              1
    +              read-only
    +            
    +            
    +              ALRAWF
    +              Alarm A write flag
    +              0
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          PRER
    +          PRER
    +          RTC prescaler register
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PREDIV_A
    +              Asynchronous prescaler
    +              factor
    +              16
    +              7
    +            
    +            
    +              PREDIV_S
    +              Synchronous prescaler
    +              factor
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          WUTR
    +          WUTR
    +          RTC wakeup timer register
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              WUT
    +              Wakeup auto-reload value
    +              bits
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          ALRMAR
    +          ALRMAR
    +          RTC alarm A register
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MSK4
    +              Alarm A date mask
    +              31
    +              1
    +            
    +            
    +              WDSEL
    +              Week day selection
    +              30
    +              1
    +            
    +            
    +              DT
    +              Date tens in BCD format.
    +              28
    +              2
    +            
    +            
    +              DU
    +              Date units or day in BCD
    +              format.
    +              24
    +              4
    +            
    +            
    +              MSK3
    +              Alarm A hours mask
    +              23
    +              1
    +            
    +            
    +              PM
    +              AM/PM notation
    +              22
    +              1
    +            
    +            
    +              HT
    +              Hour tens in BCD format.
    +              20
    +              2
    +            
    +            
    +              HU
    +              Hour units in BCD format.
    +              16
    +              4
    +            
    +            
    +              MSK2
    +              Alarm A minutes mask
    +              15
    +              1
    +            
    +            
    +              MNT
    +              Minute tens in BCD format.
    +              12
    +              3
    +            
    +            
    +              MNU
    +              Minute units in BCD
    +              format.
    +              8
    +              4
    +            
    +            
    +              MSK1
    +              Alarm A seconds mask
    +              7
    +              1
    +            
    +            
    +              ST
    +              Second tens in BCD format.
    +              4
    +              3
    +            
    +            
    +              SU
    +              Second units in BCD
    +              format.
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          ALRMBR
    +          ALRMBR
    +          RTC alarm B register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MSK4
    +              Alarm B date mask
    +              31
    +              1
    +            
    +            
    +              WDSEL
    +              Week day selection
    +              30
    +              1
    +            
    +            
    +              DT
    +              Date tens in BCD format
    +              28
    +              2
    +            
    +            
    +              DU
    +              Date units or day in BCD
    +              format
    +              24
    +              4
    +            
    +            
    +              MSK3
    +              Alarm B hours mask
    +              23
    +              1
    +            
    +            
    +              PM
    +              AM/PM notation
    +              22
    +              1
    +            
    +            
    +              HT
    +              Hour tens in BCD format
    +              20
    +              2
    +            
    +            
    +              HU
    +              Hour units in BCD format
    +              16
    +              4
    +            
    +            
    +              MSK2
    +              Alarm B minutes mask
    +              15
    +              1
    +            
    +            
    +              MNT
    +              Minute tens in BCD format
    +              12
    +              3
    +            
    +            
    +              MNU
    +              Minute units in BCD format
    +              8
    +              4
    +            
    +            
    +              MSK1
    +              Alarm B seconds mask
    +              7
    +              1
    +            
    +            
    +              ST
    +              Second tens in BCD format
    +              4
    +              3
    +            
    +            
    +              SU
    +              Second units in BCD format
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          WPR
    +          WPR
    +          write protection register
    +          0x24
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              KEY
    +              Write protection key
    +              0
    +              8
    +            
    +          
    +        
    +        
    +          SSR
    +          SSR
    +          RTC sub second register
    +          0x28
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              SS
    +              Sub second value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          SHIFTR
    +          SHIFTR
    +          RTC shift control register
    +          0x2C
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              ADD1S
    +              Add one second
    +              31
    +              1
    +            
    +            
    +              SUBFS
    +              Subtract a fraction of a
    +              second
    +              0
    +              15
    +            
    +          
    +        
    +        
    +          TSTR
    +          TSTR
    +          RTC timestamp time register
    +          0x30
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              PM
    +              AM/PM notation
    +              22
    +              1
    +            
    +            
    +              HT
    +              Hour tens in BCD format.
    +              20
    +              2
    +            
    +            
    +              HU
    +              Hour units in BCD format.
    +              16
    +              4
    +            
    +            
    +              MNT
    +              Minute tens in BCD format.
    +              12
    +              3
    +            
    +            
    +              MNU
    +              Minute units in BCD
    +              format.
    +              8
    +              4
    +            
    +            
    +              ST
    +              Second tens in BCD format.
    +              4
    +              3
    +            
    +            
    +              SU
    +              Second units in BCD
    +              format.
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          TSDR
    +          TSDR
    +          RTC timestamp date register
    +          0x34
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              WDU
    +              Week day units
    +              13
    +              3
    +            
    +            
    +              MT
    +              Month tens in BCD format
    +              12
    +              1
    +            
    +            
    +              MU
    +              Month units in BCD format
    +              8
    +              4
    +            
    +            
    +              DT
    +              Date tens in BCD format
    +              4
    +              2
    +            
    +            
    +              DU
    +              Date units in BCD format
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          TSSSR
    +          TSSSR
    +          RTC time-stamp sub second
    +          register
    +          0x38
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              SS
    +              Sub second value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CALR
    +          CALR
    +          RTC calibration register
    +          0x3C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CALP
    +              Increase frequency of RTC by 488.5
    +              ppm
    +              15
    +              1
    +            
    +            
    +              CALW8
    +              Use a 8-second calibration cycle
    +              period
    +              14
    +              1
    +            
    +            
    +              CALW16
    +              Use a 16-second calibration cycle
    +              period
    +              13
    +              1
    +            
    +            
    +              CALM
    +              Calibration minus
    +              0
    +              9
    +            
    +          
    +        
    +        
    +          TAMPCR
    +          TAMPCR
    +          RTC tamper configuration
    +          register
    +          0x40
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              TAMP2MF
    +              Tamper 2 mask flag
    +              21
    +              1
    +            
    +            
    +              TAMP2NOERASE
    +              Tamper 2 no erase
    +              20
    +              1
    +            
    +            
    +              TAMP2IE
    +              Tamper 2 interrupt enable
    +              19
    +              1
    +            
    +            
    +              TAMP1MF
    +              Tamper 1 mask flag
    +              18
    +              1
    +            
    +            
    +              TAMP1NOERASE
    +              Tamper 1 no erase
    +              17
    +              1
    +            
    +            
    +              TAMP1IE
    +              Tamper 1 interrupt enable
    +              16
    +              1
    +            
    +            
    +              TAMPPUDIS
    +              RTC_TAMPx pull-up disable
    +              15
    +              1
    +            
    +            
    +              TAMPPRCH
    +              RTC_TAMPx precharge
    +              duration
    +              13
    +              2
    +            
    +            
    +              TAMPFLT
    +              RTC_TAMPx filter count
    +              11
    +              2
    +            
    +            
    +              TAMPFREQ
    +              Tamper sampling frequency
    +              8
    +              3
    +            
    +            
    +              TAMPTS
    +              Activate timestamp on tamper detection
    +              event
    +              7
    +              1
    +            
    +            
    +              TAMP2_TRG
    +              Active level for RTC_TAMP2
    +              input
    +              4
    +              1
    +            
    +            
    +              TAMP2E
    +              RTC_TAMP2 input detection
    +              enable
    +              3
    +              1
    +            
    +            
    +              TAMPIE
    +              Tamper interrupt enable
    +              2
    +              1
    +            
    +            
    +              TAMP1TRG
    +              Active level for RTC_TAMP1
    +              input
    +              1
    +              1
    +            
    +            
    +              TAMP1E
    +              RTC_TAMP1 input detection
    +              enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ALRMASSR
    +          ALRMASSR
    +          RTC alarm A sub second
    +          register
    +          0x44
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MASKSS
    +              Mask the most-significant bits starting
    +              at this bit
    +              24
    +              4
    +            
    +            
    +              SS
    +              Sub seconds value
    +              0
    +              15
    +            
    +          
    +        
    +        
    +          ALRMBSSR
    +          ALRMBSSR
    +          RTC alarm B sub second
    +          register
    +          0x48
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MASKSS
    +              Mask the most-significant bits starting
    +              at this bit
    +              24
    +              4
    +            
    +            
    +              SS
    +              Sub seconds value
    +              0
    +              15
    +            
    +          
    +        
    +        
    +          OR
    +          OR
    +          option register
    +          0x4C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              RTC_OUT_RMP
    +              RTC_ALARM on PC13 output
    +              type
    +              1
    +              1
    +            
    +            
    +              RTC_ALARM_TYPE
    +              RTC_ALARM on PC13 output
    +              type
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          BKP0R
    +          BKP0R
    +          RTC backup registers
    +          0x50
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              BKP
    +              BKP
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          BKP1R
    +          BKP1R
    +          RTC backup registers
    +          0x54
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              BKP
    +              BKP
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          BKP2R
    +          BKP2R
    +          RTC backup registers
    +          0x58
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              BKP
    +              BKP
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          BKP3R
    +          BKP3R
    +          RTC backup registers
    +          0x5C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              BKP
    +              BKP
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          BKP4R
    +          BKP4R
    +          RTC backup registers
    +          0x60
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              BKP
    +              BKP
    +              0
    +              32
    +            
    +          
    +        
    +      
    +    
    +    
    +      USART1
    +      Universal synchronous asynchronous receiver
    +      transmitter
    +      USART
    +      0x40013800
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          CR1
    +          CR1
    +          Control register 1
    +          0x0
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              M1
    +              Word length
    +              28
    +              1
    +            
    +            
    +              EOBIE
    +              End of Block interrupt
    +              enable
    +              27
    +              1
    +            
    +            
    +              RTOIE
    +              Receiver timeout interrupt
    +              enable
    +              26
    +              1
    +            
    +            
    +              DEAT4
    +              Driver Enable assertion
    +              time
    +              25
    +              1
    +            
    +            
    +              DEAT3
    +              DEAT3
    +              24
    +              1
    +            
    +            
    +              DEAT2
    +              DEAT2
    +              23
    +              1
    +            
    +            
    +              DEAT1
    +              DEAT1
    +              22
    +              1
    +            
    +            
    +              DEAT0
    +              DEAT0
    +              21
    +              1
    +            
    +            
    +              DEDT4
    +              Driver Enable de-assertion
    +              time
    +              20
    +              1
    +            
    +            
    +              DEDT3
    +              DEDT3
    +              19
    +              1
    +            
    +            
    +              DEDT2
    +              DEDT2
    +              18
    +              1
    +            
    +            
    +              DEDT1
    +              DEDT1
    +              17
    +              1
    +            
    +            
    +              DEDT0
    +              DEDT0
    +              16
    +              1
    +            
    +            
    +              OVER8
    +              Oversampling mode
    +              15
    +              1
    +            
    +            
    +              CMIE
    +              Character match interrupt
    +              enable
    +              14
    +              1
    +            
    +            
    +              MME
    +              Mute mode enable
    +              13
    +              1
    +            
    +            
    +              M0
    +              Word length
    +              12
    +              1
    +            
    +            
    +              WAKE
    +              Receiver wakeup method
    +              11
    +              1
    +            
    +            
    +              PCE
    +              Parity control enable
    +              10
    +              1
    +            
    +            
    +              PS
    +              Parity selection
    +              9
    +              1
    +            
    +            
    +              PEIE
    +              PE interrupt enable
    +              8
    +              1
    +            
    +            
    +              TXEIE
    +              interrupt enable
    +              7
    +              1
    +            
    +            
    +              TCIE
    +              Transmission complete interrupt
    +              enable
    +              6
    +              1
    +            
    +            
    +              RXNEIE
    +              RXNE interrupt enable
    +              5
    +              1
    +            
    +            
    +              IDLEIE
    +              IDLE interrupt enable
    +              4
    +              1
    +            
    +            
    +              TE
    +              Transmitter enable
    +              3
    +              1
    +            
    +            
    +              RE
    +              Receiver enable
    +              2
    +              1
    +            
    +            
    +              UESM
    +              USART enable in Stop mode
    +              1
    +              1
    +            
    +            
    +              UE
    +              USART enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CR2
    +          CR2
    +          Control register 2
    +          0x4
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              ADD4_7
    +              Address of the USART node
    +              28
    +              4
    +            
    +            
    +              ADD0_3
    +              Address of the USART node
    +              24
    +              4
    +            
    +            
    +              RTOEN
    +              Receiver timeout enable
    +              23
    +              1
    +            
    +            
    +              ABRMOD1
    +              Auto baud rate mode
    +              22
    +              1
    +            
    +            
    +              ABRMOD0
    +              ABRMOD0
    +              21
    +              1
    +            
    +            
    +              ABREN
    +              Auto baud rate enable
    +              20
    +              1
    +            
    +            
    +              MSBFIRST
    +              Most significant bit first
    +              19
    +              1
    +            
    +            
    +              TAINV
    +              Binary data inversion
    +              18
    +              1
    +            
    +            
    +              TXINV
    +              TX pin active level
    +              inversion
    +              17
    +              1
    +            
    +            
    +              RXINV
    +              RX pin active level
    +              inversion
    +              16
    +              1
    +            
    +            
    +              SWAP
    +              Swap TX/RX pins
    +              15
    +              1
    +            
    +            
    +              LINEN
    +              LIN mode enable
    +              14
    +              1
    +            
    +            
    +              STOP
    +              STOP bits
    +              12
    +              2
    +            
    +            
    +              CLKEN
    +              Clock enable
    +              11
    +              1
    +            
    +            
    +              CPOL
    +              Clock polarity
    +              10
    +              1
    +            
    +            
    +              CPHA
    +              Clock phase
    +              9
    +              1
    +            
    +            
    +              LBCL
    +              Last bit clock pulse
    +              8
    +              1
    +            
    +            
    +              LBDIE
    +              LIN break detection interrupt
    +              enable
    +              6
    +              1
    +            
    +            
    +              LBDL
    +              LIN break detection length
    +              5
    +              1
    +            
    +            
    +              ADDM7
    +              7-bit Address Detection/4-bit Address
    +              Detection
    +              4
    +              1
    +            
    +          
    +        
    +        
    +          CR3
    +          CR3
    +          Control register 3
    +          0x8
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              WUFIE
    +              Wakeup from Stop mode interrupt
    +              enable
    +              22
    +              1
    +            
    +            
    +              WUS
    +              Wakeup from Stop mode interrupt flag
    +              selection
    +              20
    +              2
    +            
    +            
    +              SCARCNT
    +              Smartcard auto-retry count
    +              17
    +              3
    +            
    +            
    +              DEP
    +              Driver enable polarity
    +              selection
    +              15
    +              1
    +            
    +            
    +              DEM
    +              Driver enable mode
    +              14
    +              1
    +            
    +            
    +              DDRE
    +              DMA Disable on Reception
    +              Error
    +              13
    +              1
    +            
    +            
    +              OVRDIS
    +              Overrun Disable
    +              12
    +              1
    +            
    +            
    +              ONEBIT
    +              One sample bit method
    +              enable
    +              11
    +              1
    +            
    +            
    +              CTSIE
    +              CTS interrupt enable
    +              10
    +              1
    +            
    +            
    +              CTSE
    +              CTS enable
    +              9
    +              1
    +            
    +            
    +              RTSE
    +              RTS enable
    +              8
    +              1
    +            
    +            
    +              DMAT
    +              DMA enable transmitter
    +              7
    +              1
    +            
    +            
    +              DMAR
    +              DMA enable receiver
    +              6
    +              1
    +            
    +            
    +              SCEN
    +              Smartcard mode enable
    +              5
    +              1
    +            
    +            
    +              NACK
    +              Smartcard NACK enable
    +              4
    +              1
    +            
    +            
    +              HDSEL
    +              Half-duplex selection
    +              3
    +              1
    +            
    +            
    +              IRLP
    +              Ir low-power
    +              2
    +              1
    +            
    +            
    +              IREN
    +              Ir mode enable
    +              1
    +              1
    +            
    +            
    +              EIE
    +              Error interrupt enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          BRR
    +          BRR
    +          Baud rate register
    +          0xC
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              DIV_Mantissa
    +              DIV_Mantissa
    +              4
    +              12
    +            
    +            
    +              DIV_Fraction
    +              DIV_Fraction
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          GTPR
    +          GTPR
    +          Guard time and prescaler
    +          register
    +          0x10
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              GT
    +              Guard time value
    +              8
    +              8
    +            
    +            
    +              PSC
    +              Prescaler value
    +              0
    +              8
    +            
    +          
    +        
    +        
    +          RTOR
    +          RTOR
    +          Receiver timeout register
    +          0x14
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              BLEN
    +              Block Length
    +              24
    +              8
    +            
    +            
    +              RTO
    +              Receiver timeout value
    +              0
    +              24
    +            
    +          
    +        
    +        
    +          RQR
    +          RQR
    +          Request register
    +          0x18
    +          0x20
    +          write-only
    +          0x0000
    +          
    +            
    +              TXFRQ
    +              Transmit data flush
    +              request
    +              4
    +              1
    +            
    +            
    +              RXFRQ
    +              Receive data flush request
    +              3
    +              1
    +            
    +            
    +              MMRQ
    +              Mute mode request
    +              2
    +              1
    +            
    +            
    +              SBKRQ
    +              Send break request
    +              1
    +              1
    +            
    +            
    +              ABRRQ
    +              Auto baud rate request
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ISR
    +          ISR
    +          Interrupt & status
    +          register
    +          0x1C
    +          0x20
    +          read-only
    +          0x00C0
    +          
    +            
    +              REACK
    +              REACK
    +              22
    +              1
    +            
    +            
    +              TEACK
    +              TEACK
    +              21
    +              1
    +            
    +            
    +              WUF
    +              WUF
    +              20
    +              1
    +            
    +            
    +              RWU
    +              RWU
    +              19
    +              1
    +            
    +            
    +              SBKF
    +              SBKF
    +              18
    +              1
    +            
    +            
    +              CMF
    +              CMF
    +              17
    +              1
    +            
    +            
    +              BUSY
    +              BUSY
    +              16
    +              1
    +            
    +            
    +              ABRF
    +              ABRF
    +              15
    +              1
    +            
    +            
    +              ABRE
    +              ABRE
    +              14
    +              1
    +            
    +            
    +              EOBF
    +              EOBF
    +              12
    +              1
    +            
    +            
    +              RTOF
    +              RTOF
    +              11
    +              1
    +            
    +            
    +              CTS
    +              CTS
    +              10
    +              1
    +            
    +            
    +              CTSIF
    +              CTSIF
    +              9
    +              1
    +            
    +            
    +              LBDF
    +              LBDF
    +              8
    +              1
    +            
    +            
    +              TXE
    +              TXE
    +              7
    +              1
    +            
    +            
    +              TC
    +              TC
    +              6
    +              1
    +            
    +            
    +              RXNE
    +              RXNE
    +              5
    +              1
    +            
    +            
    +              IDLE
    +              IDLE
    +              4
    +              1
    +            
    +            
    +              ORE
    +              ORE
    +              3
    +              1
    +            
    +            
    +              NF
    +              NF
    +              2
    +              1
    +            
    +            
    +              FE
    +              FE
    +              1
    +              1
    +            
    +            
    +              PE
    +              PE
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ICR
    +          ICR
    +          Interrupt flag clear register
    +          0x20
    +          0x20
    +          write-only
    +          0x0000
    +          
    +            
    +              WUCF
    +              Wakeup from Stop mode clear
    +              flag
    +              20
    +              1
    +            
    +            
    +              CMCF
    +              Character match clear flag
    +              17
    +              1
    +            
    +            
    +              EOBCF
    +              End of block clear flag
    +              12
    +              1
    +            
    +            
    +              RTOCF
    +              Receiver timeout clear
    +              flag
    +              11
    +              1
    +            
    +            
    +              CTSCF
    +              CTS clear flag
    +              9
    +              1
    +            
    +            
    +              LBDCF
    +              LIN break detection clear
    +              flag
    +              8
    +              1
    +            
    +            
    +              TCCF
    +              Transmission complete clear
    +              flag
    +              6
    +              1
    +            
    +            
    +              IDLECF
    +              Idle line detected clear
    +              flag
    +              4
    +              1
    +            
    +            
    +              ORECF
    +              Overrun error clear flag
    +              3
    +              1
    +            
    +            
    +              NCF
    +              Noise detected clear flag
    +              2
    +              1
    +            
    +            
    +              FECF
    +              Framing error clear flag
    +              1
    +              1
    +            
    +            
    +              PECF
    +              Parity error clear flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          RDR
    +          RDR
    +          Receive data register
    +          0x24
    +          0x20
    +          read-only
    +          0x0000
    +          
    +            
    +              RDR
    +              Receive data value
    +              0
    +              9
    +            
    +          
    +        
    +        
    +          TDR
    +          TDR
    +          Transmit data register
    +          0x28
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              TDR
    +              Transmit data value
    +              0
    +              9
    +            
    +          
    +        
    +      
    +    
    +    
    +      USART2
    +      0x40004400
    +    
    +    
    +      USART4
    +      0x40004C00
    +      
    +        USART4_USART5
    +        USART4/USART5 global interrupt
    +        14
    +      
    +      
    +        USART1
    +        USART1 global interrupt
    +        27
    +      
    +    
    +    
    +      USART5
    +      0x40005000
    +      
    +        USART2
    +        USART2 global interrupt
    +        28
    +      
    +    
    +    
    +      TSC
    +      Touch sensing controller
    +      TSC
    +      0x40024000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        TSC
    +        Touch sensing interrupt
    +        8
    +      
    +      
    +        
    +          CR
    +          CR
    +          control register
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CTPH
    +              Charge transfer pulse high
    +              28
    +              4
    +            
    +            
    +              CTPL
    +              Charge transfer pulse low
    +              24
    +              4
    +            
    +            
    +              SSD
    +              Spread spectrum deviation
    +              17
    +              7
    +            
    +            
    +              SSE
    +              Spread spectrum enable
    +              16
    +              1
    +            
    +            
    +              SSPSC
    +              Spread spectrum prescaler
    +              15
    +              1
    +            
    +            
    +              PGPSC
    +              pulse generator prescaler
    +              12
    +              3
    +            
    +            
    +              MCV
    +              Max count value
    +              5
    +              3
    +            
    +            
    +              IODEF
    +              I/O Default mode
    +              4
    +              1
    +            
    +            
    +              SYNCPOL
    +              Synchronization pin
    +              polarity
    +              3
    +              1
    +            
    +            
    +              AM
    +              Acquisition mode
    +              2
    +              1
    +            
    +            
    +              START
    +              Start a new acquisition
    +              1
    +              1
    +            
    +            
    +              TSCE
    +              Touch sensing controller
    +              enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          IER
    +          IER
    +          interrupt enable register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MCEIE
    +              Max count error interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              EOAIE
    +              End of acquisition interrupt
    +              enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ICR
    +          ICR
    +          interrupt clear register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MCEIC
    +              Max count error interrupt
    +              clear
    +              1
    +              1
    +            
    +            
    +              EOAIC
    +              End of acquisition interrupt
    +              clear
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ISR
    +          ISR
    +          interrupt status register
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MCEF
    +              Max count error flag
    +              1
    +              1
    +            
    +            
    +              EOAF
    +              End of acquisition flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          IOHCR
    +          IOHCR
    +          I/O hysteresis control
    +          register
    +          0x10
    +          0x20
    +          read-write
    +          0xFFFFFFFF
    +          
    +            
    +              G8_IO4
    +              G8_IO4
    +              31
    +              1
    +            
    +            
    +              G8_IO3
    +              G8_IO3
    +              30
    +              1
    +            
    +            
    +              G8_IO2
    +              G8_IO2
    +              29
    +              1
    +            
    +            
    +              G8_IO1
    +              G8_IO1
    +              28
    +              1
    +            
    +            
    +              G7_IO4
    +              G7_IO4
    +              27
    +              1
    +            
    +            
    +              G7_IO3
    +              G7_IO3
    +              26
    +              1
    +            
    +            
    +              G7_IO2
    +              G7_IO2
    +              25
    +              1
    +            
    +            
    +              G7_IO1
    +              G7_IO1
    +              24
    +              1
    +            
    +            
    +              G6_IO4
    +              G6_IO4
    +              23
    +              1
    +            
    +            
    +              G6_IO3
    +              G6_IO3
    +              22
    +              1
    +            
    +            
    +              G6_IO2
    +              G6_IO2
    +              21
    +              1
    +            
    +            
    +              G6_IO1
    +              G6_IO1
    +              20
    +              1
    +            
    +            
    +              G5_IO4
    +              G5_IO4
    +              19
    +              1
    +            
    +            
    +              G5_IO3
    +              G5_IO3
    +              18
    +              1
    +            
    +            
    +              G5_IO2
    +              G5_IO2
    +              17
    +              1
    +            
    +            
    +              G5_IO1
    +              G5_IO1
    +              16
    +              1
    +            
    +            
    +              G4_IO4
    +              G4_IO4
    +              15
    +              1
    +            
    +            
    +              G4_IO3
    +              G4_IO3
    +              14
    +              1
    +            
    +            
    +              G4_IO2
    +              G4_IO2
    +              13
    +              1
    +            
    +            
    +              G4_IO1
    +              G4_IO1
    +              12
    +              1
    +            
    +            
    +              G3_IO4
    +              G3_IO4
    +              11
    +              1
    +            
    +            
    +              G3_IO3
    +              G3_IO3
    +              10
    +              1
    +            
    +            
    +              G3_IO2
    +              G3_IO2
    +              9
    +              1
    +            
    +            
    +              G3_IO1
    +              G3_IO1
    +              8
    +              1
    +            
    +            
    +              G2_IO4
    +              G2_IO4
    +              7
    +              1
    +            
    +            
    +              G2_IO3
    +              G2_IO3
    +              6
    +              1
    +            
    +            
    +              G2_IO2
    +              G2_IO2
    +              5
    +              1
    +            
    +            
    +              G2_IO1
    +              G2_IO1
    +              4
    +              1
    +            
    +            
    +              G1_IO4
    +              G1_IO4
    +              3
    +              1
    +            
    +            
    +              G1_IO3
    +              G1_IO3
    +              2
    +              1
    +            
    +            
    +              G1_IO2
    +              G1_IO2
    +              1
    +              1
    +            
    +            
    +              G1_IO1
    +              G1_IO1
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          IOASCR
    +          IOASCR
    +          I/O analog switch control
    +          register
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              G8_IO4
    +              G8_IO4
    +              31
    +              1
    +            
    +            
    +              G8_IO3
    +              G8_IO3
    +              30
    +              1
    +            
    +            
    +              G8_IO2
    +              G8_IO2
    +              29
    +              1
    +            
    +            
    +              G8_IO1
    +              G8_IO1
    +              28
    +              1
    +            
    +            
    +              G7_IO4
    +              G7_IO4
    +              27
    +              1
    +            
    +            
    +              G7_IO3
    +              G7_IO3
    +              26
    +              1
    +            
    +            
    +              G7_IO2
    +              G7_IO2
    +              25
    +              1
    +            
    +            
    +              G7_IO1
    +              G7_IO1
    +              24
    +              1
    +            
    +            
    +              G6_IO4
    +              G6_IO4
    +              23
    +              1
    +            
    +            
    +              G6_IO3
    +              G6_IO3
    +              22
    +              1
    +            
    +            
    +              G6_IO2
    +              G6_IO2
    +              21
    +              1
    +            
    +            
    +              G6_IO1
    +              G6_IO1
    +              20
    +              1
    +            
    +            
    +              G5_IO4
    +              G5_IO4
    +              19
    +              1
    +            
    +            
    +              G5_IO3
    +              G5_IO3
    +              18
    +              1
    +            
    +            
    +              G5_IO2
    +              G5_IO2
    +              17
    +              1
    +            
    +            
    +              G5_IO1
    +              G5_IO1
    +              16
    +              1
    +            
    +            
    +              G4_IO4
    +              G4_IO4
    +              15
    +              1
    +            
    +            
    +              G4_IO3
    +              G4_IO3
    +              14
    +              1
    +            
    +            
    +              G4_IO2
    +              G4_IO2
    +              13
    +              1
    +            
    +            
    +              G4_IO1
    +              G4_IO1
    +              12
    +              1
    +            
    +            
    +              G3_IO4
    +              G3_IO4
    +              11
    +              1
    +            
    +            
    +              G3_IO3
    +              G3_IO3
    +              10
    +              1
    +            
    +            
    +              G3_IO2
    +              G3_IO2
    +              9
    +              1
    +            
    +            
    +              G3_IO1
    +              G3_IO1
    +              8
    +              1
    +            
    +            
    +              G2_IO4
    +              G2_IO4
    +              7
    +              1
    +            
    +            
    +              G2_IO3
    +              G2_IO3
    +              6
    +              1
    +            
    +            
    +              G2_IO2
    +              G2_IO2
    +              5
    +              1
    +            
    +            
    +              G2_IO1
    +              G2_IO1
    +              4
    +              1
    +            
    +            
    +              G1_IO4
    +              G1_IO4
    +              3
    +              1
    +            
    +            
    +              G1_IO3
    +              G1_IO3
    +              2
    +              1
    +            
    +            
    +              G1_IO2
    +              G1_IO2
    +              1
    +              1
    +            
    +            
    +              G1_IO1
    +              G1_IO1
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          IOSCR
    +          IOSCR
    +          I/O sampling control register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              G8_IO4
    +              G8_IO4
    +              31
    +              1
    +            
    +            
    +              G8_IO3
    +              G8_IO3
    +              30
    +              1
    +            
    +            
    +              G8_IO2
    +              G8_IO2
    +              29
    +              1
    +            
    +            
    +              G8_IO1
    +              G8_IO1
    +              28
    +              1
    +            
    +            
    +              G7_IO4
    +              G7_IO4
    +              27
    +              1
    +            
    +            
    +              G7_IO3
    +              G7_IO3
    +              26
    +              1
    +            
    +            
    +              G7_IO2
    +              G7_IO2
    +              25
    +              1
    +            
    +            
    +              G7_IO1
    +              G7_IO1
    +              24
    +              1
    +            
    +            
    +              G6_IO4
    +              G6_IO4
    +              23
    +              1
    +            
    +            
    +              G6_IO3
    +              G6_IO3
    +              22
    +              1
    +            
    +            
    +              G6_IO2
    +              G6_IO2
    +              21
    +              1
    +            
    +            
    +              G6_IO1
    +              G6_IO1
    +              20
    +              1
    +            
    +            
    +              G5_IO4
    +              G5_IO4
    +              19
    +              1
    +            
    +            
    +              G5_IO3
    +              G5_IO3
    +              18
    +              1
    +            
    +            
    +              G5_IO2
    +              G5_IO2
    +              17
    +              1
    +            
    +            
    +              G5_IO1
    +              G5_IO1
    +              16
    +              1
    +            
    +            
    +              G4_IO4
    +              G4_IO4
    +              15
    +              1
    +            
    +            
    +              G4_IO3
    +              G4_IO3
    +              14
    +              1
    +            
    +            
    +              G4_IO2
    +              G4_IO2
    +              13
    +              1
    +            
    +            
    +              G4_IO1
    +              G4_IO1
    +              12
    +              1
    +            
    +            
    +              G3_IO4
    +              G3_IO4
    +              11
    +              1
    +            
    +            
    +              G3_IO3
    +              G3_IO3
    +              10
    +              1
    +            
    +            
    +              G3_IO2
    +              G3_IO2
    +              9
    +              1
    +            
    +            
    +              G3_IO1
    +              G3_IO1
    +              8
    +              1
    +            
    +            
    +              G2_IO4
    +              G2_IO4
    +              7
    +              1
    +            
    +            
    +              G2_IO3
    +              G2_IO3
    +              6
    +              1
    +            
    +            
    +              G2_IO2
    +              G2_IO2
    +              5
    +              1
    +            
    +            
    +              G2_IO1
    +              G2_IO1
    +              4
    +              1
    +            
    +            
    +              G1_IO4
    +              G1_IO4
    +              3
    +              1
    +            
    +            
    +              G1_IO3
    +              G1_IO3
    +              2
    +              1
    +            
    +            
    +              G1_IO2
    +              G1_IO2
    +              1
    +              1
    +            
    +            
    +              G1_IO1
    +              G1_IO1
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          IOCCR
    +          IOCCR
    +          I/O channel control register
    +          0x28
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              G8_IO4
    +              G8_IO4
    +              31
    +              1
    +            
    +            
    +              G8_IO3
    +              G8_IO3
    +              30
    +              1
    +            
    +            
    +              G8_IO2
    +              G8_IO2
    +              29
    +              1
    +            
    +            
    +              G8_IO1
    +              G8_IO1
    +              28
    +              1
    +            
    +            
    +              G7_IO4
    +              G7_IO4
    +              27
    +              1
    +            
    +            
    +              G7_IO3
    +              G7_IO3
    +              26
    +              1
    +            
    +            
    +              G7_IO2
    +              G7_IO2
    +              25
    +              1
    +            
    +            
    +              G7_IO1
    +              G7_IO1
    +              24
    +              1
    +            
    +            
    +              G6_IO4
    +              G6_IO4
    +              23
    +              1
    +            
    +            
    +              G6_IO3
    +              G6_IO3
    +              22
    +              1
    +            
    +            
    +              G6_IO2
    +              G6_IO2
    +              21
    +              1
    +            
    +            
    +              G6_IO1
    +              G6_IO1
    +              20
    +              1
    +            
    +            
    +              G5_IO4
    +              G5_IO4
    +              19
    +              1
    +            
    +            
    +              G5_IO3
    +              G5_IO3
    +              18
    +              1
    +            
    +            
    +              G5_IO2
    +              G5_IO2
    +              17
    +              1
    +            
    +            
    +              G5_IO1
    +              G5_IO1
    +              16
    +              1
    +            
    +            
    +              G4_IO4
    +              G4_IO4
    +              15
    +              1
    +            
    +            
    +              G4_IO3
    +              G4_IO3
    +              14
    +              1
    +            
    +            
    +              G4_IO2
    +              G4_IO2
    +              13
    +              1
    +            
    +            
    +              G4_IO1
    +              G4_IO1
    +              12
    +              1
    +            
    +            
    +              G3_IO4
    +              G3_IO4
    +              11
    +              1
    +            
    +            
    +              G3_IO3
    +              G3_IO3
    +              10
    +              1
    +            
    +            
    +              G3_IO2
    +              G3_IO2
    +              9
    +              1
    +            
    +            
    +              G3_IO1
    +              G3_IO1
    +              8
    +              1
    +            
    +            
    +              G2_IO4
    +              G2_IO4
    +              7
    +              1
    +            
    +            
    +              G2_IO3
    +              G2_IO3
    +              6
    +              1
    +            
    +            
    +              G2_IO2
    +              G2_IO2
    +              5
    +              1
    +            
    +            
    +              G2_IO1
    +              G2_IO1
    +              4
    +              1
    +            
    +            
    +              G1_IO4
    +              G1_IO4
    +              3
    +              1
    +            
    +            
    +              G1_IO3
    +              G1_IO3
    +              2
    +              1
    +            
    +            
    +              G1_IO2
    +              G1_IO2
    +              1
    +              1
    +            
    +            
    +              G1_IO1
    +              G1_IO1
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          IOGCSR
    +          IOGCSR
    +          I/O group control status
    +          register
    +          0x30
    +          0x20
    +          0x00000000
    +          
    +            
    +              G8S
    +              Analog I/O group x status
    +              23
    +              1
    +              read-only
    +            
    +            
    +              G7S
    +              Analog I/O group x status
    +              22
    +              1
    +              read-only
    +            
    +            
    +              G6S
    +              Analog I/O group x status
    +              21
    +              1
    +              read-only
    +            
    +            
    +              G5S
    +              Analog I/O group x status
    +              20
    +              1
    +              read-only
    +            
    +            
    +              G4S
    +              Analog I/O group x status
    +              19
    +              1
    +              read-only
    +            
    +            
    +              G3S
    +              Analog I/O group x status
    +              18
    +              1
    +              read-only
    +            
    +            
    +              G2S
    +              Analog I/O group x status
    +              17
    +              1
    +              read-only
    +            
    +            
    +              G1S
    +              Analog I/O group x status
    +              16
    +              1
    +              read-only
    +            
    +            
    +              G8E
    +              Analog I/O group x enable
    +              7
    +              1
    +              read-write
    +            
    +            
    +              G7E
    +              Analog I/O group x enable
    +              6
    +              1
    +              read-write
    +            
    +            
    +              G6E
    +              Analog I/O group x enable
    +              5
    +              1
    +              read-write
    +            
    +            
    +              G5E
    +              Analog I/O group x enable
    +              4
    +              1
    +              read-write
    +            
    +            
    +              G4E
    +              Analog I/O group x enable
    +              3
    +              1
    +              read-write
    +            
    +            
    +              G3E
    +              Analog I/O group x enable
    +              2
    +              1
    +              read-write
    +            
    +            
    +              G2E
    +              Analog I/O group x enable
    +              1
    +              1
    +              read-write
    +            
    +            
    +              G1E
    +              Analog I/O group x enable
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          IOG1CR
    +          IOG1CR
    +          I/O group x counter register
    +          0x34
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CNT
    +              Counter value
    +              0
    +              14
    +            
    +          
    +        
    +        
    +          IOG2CR
    +          IOG2CR
    +          I/O group x counter register
    +          0x38
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CNT
    +              Counter value
    +              0
    +              14
    +            
    +          
    +        
    +        
    +          IOG3CR
    +          IOG3CR
    +          I/O group x counter register
    +          0x3C
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CNT
    +              Counter value
    +              0
    +              14
    +            
    +          
    +        
    +        
    +          IOG4CR
    +          IOG4CR
    +          I/O group x counter register
    +          0x40
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CNT
    +              Counter value
    +              0
    +              14
    +            
    +          
    +        
    +        
    +          IOG5CR
    +          IOG5CR
    +          I/O group x counter register
    +          0x44
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CNT
    +              Counter value
    +              0
    +              14
    +            
    +          
    +        
    +        
    +          IOG6CR
    +          IOG6CR
    +          I/O group x counter register
    +          0x48
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CNT
    +              Counter value
    +              0
    +              14
    +            
    +          
    +        
    +        
    +          IOG7CR
    +          IOG7CR
    +          I/O group x counter register
    +          0x4C
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CNT
    +              Counter value
    +              0
    +              14
    +            
    +          
    +        
    +        
    +          IOG8CR
    +          IOG8CR
    +          I/O group x counter register
    +          0x50
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CNT
    +              Counter value
    +              0
    +              14
    +            
    +          
    +        
    +      
    +    
    +    
    +      IWDG
    +      Independent watchdog
    +      IWDG
    +      0x40003000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          KR
    +          KR
    +          Key register
    +          0x0
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              KEY
    +              Key value (write only, read
    +              0x0000)
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          PR
    +          PR
    +          Prescaler register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PR
    +              Prescaler divider
    +              0
    +              3
    +            
    +          
    +        
    +        
    +          RLR
    +          RLR
    +          Reload register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000FFF
    +          
    +            
    +              RL
    +              Watchdog counter reload
    +              value
    +              0
    +              12
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          Status register
    +          0xC
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              WVU
    +              Watchdog counter window value
    +              update
    +              2
    +              1
    +            
    +            
    +              RVU
    +              Watchdog counter reload value
    +              update
    +              1
    +              1
    +            
    +            
    +              PVU
    +              Watchdog prescaler value
    +              update
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          WINR
    +          WINR
    +          Window register
    +          0x10
    +          0x20
    +          read-write
    +          0x00000FFF
    +          
    +            
    +              WIN
    +              Watchdog counter window
    +              value
    +              0
    +              12
    +            
    +          
    +        
    +      
    +    
    +    
    +      WWDG
    +      System window watchdog
    +      WWDG
    +      0x40002C00
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        WWDG
    +        Window Watchdog interrupt
    +        0
    +      
    +      
    +        
    +          CR
    +          CR
    +          Control register
    +          0x0
    +          0x20
    +          read-write
    +          0x0000007F
    +          
    +            
    +              WDGA
    +              Activation bit
    +              7
    +              1
    +            
    +            
    +              T
    +              7-bit counter (MSB to LSB)
    +              0
    +              7
    +            
    +          
    +        
    +        
    +          CFR
    +          CFR
    +          Configuration register
    +          0x4
    +          0x20
    +          read-write
    +          0x0000007F
    +          
    +            
    +              EWI
    +              Early wakeup interrupt
    +              9
    +              1
    +            
    +            
    +              WDGTB1
    +              Timer base
    +              8
    +              1
    +            
    +            
    +              WDGTB0
    +              WDGTB0
    +              7
    +              1
    +            
    +            
    +              W
    +              7-bit window value
    +              0
    +              7
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          Status register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              EWIF
    +              Early wakeup interrupt
    +              flag
    +              0
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      USB_FS
    +      Universal serial bus full-speed device
    +      interface
    +      USB
    +      0x40005C00
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        USB
    +        USB event interrupt through
    +        EXTI18
    +        31
    +      
    +      
    +        
    +          EP0R
    +          EP0R
    +          endpoint register
    +          0x0
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              CTR_RX
    +              CTR_RX
    +              15
    +              1
    +            
    +            
    +              DTOG_RX
    +              DTOG_RX
    +              14
    +              1
    +            
    +            
    +              STAT_RX
    +              STAT_RX
    +              12
    +              2
    +            
    +            
    +              SETUP
    +              SETUP
    +              11
    +              1
    +            
    +            
    +              EPTYPE
    +              EPTYPE
    +              9
    +              2
    +            
    +            
    +              EP_KIND
    +              EP_KIND
    +              8
    +              1
    +            
    +            
    +              CTR_TX
    +              CTR_TX
    +              7
    +              1
    +            
    +            
    +              DTOG_TX
    +              DTOG_TX
    +              6
    +              1
    +            
    +            
    +              STAT_TX
    +              STAT_TX
    +              4
    +              2
    +            
    +            
    +              EA
    +              EA
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          EP1R
    +          EP1R
    +          endpoint register
    +          0x4
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              CTR_RX
    +              CTR_RX
    +              15
    +              1
    +            
    +            
    +              DTOG_RX
    +              DTOG_RX
    +              14
    +              1
    +            
    +            
    +              STAT_RX
    +              STAT_RX
    +              12
    +              2
    +            
    +            
    +              SETUP
    +              SETUP
    +              11
    +              1
    +            
    +            
    +              EPTYPE
    +              EPTYPE
    +              9
    +              2
    +            
    +            
    +              EP_KIND
    +              EP_KIND
    +              8
    +              1
    +            
    +            
    +              CTR_TX
    +              CTR_TX
    +              7
    +              1
    +            
    +            
    +              DTOG_TX
    +              DTOG_TX
    +              6
    +              1
    +            
    +            
    +              STAT_TX
    +              STAT_TX
    +              4
    +              2
    +            
    +            
    +              EA
    +              EA
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          EP2R
    +          EP2R
    +          endpoint register
    +          0x8
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              CTR_RX
    +              CTR_RX
    +              15
    +              1
    +            
    +            
    +              DTOG_RX
    +              DTOG_RX
    +              14
    +              1
    +            
    +            
    +              STAT_RX
    +              STAT_RX
    +              12
    +              2
    +            
    +            
    +              SETUP
    +              SETUP
    +              11
    +              1
    +            
    +            
    +              EPTYPE
    +              EPTYPE
    +              9
    +              2
    +            
    +            
    +              EP_KIND
    +              EP_KIND
    +              8
    +              1
    +            
    +            
    +              CTR_TX
    +              CTR_TX
    +              7
    +              1
    +            
    +            
    +              DTOG_TX
    +              DTOG_TX
    +              6
    +              1
    +            
    +            
    +              STAT_TX
    +              STAT_TX
    +              4
    +              2
    +            
    +            
    +              EA
    +              EA
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          EP3R
    +          EP3R
    +          endpoint register
    +          0xC
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              CTR_RX
    +              CTR_RX
    +              15
    +              1
    +            
    +            
    +              DTOG_RX
    +              DTOG_RX
    +              14
    +              1
    +            
    +            
    +              STAT_RX
    +              STAT_RX
    +              12
    +              2
    +            
    +            
    +              SETUP
    +              SETUP
    +              11
    +              1
    +            
    +            
    +              EPTYPE
    +              EPTYPE
    +              9
    +              2
    +            
    +            
    +              EP_KIND
    +              EP_KIND
    +              8
    +              1
    +            
    +            
    +              CTR_TX
    +              CTR_TX
    +              7
    +              1
    +            
    +            
    +              DTOG_TX
    +              DTOG_TX
    +              6
    +              1
    +            
    +            
    +              STAT_TX
    +              STAT_TX
    +              4
    +              2
    +            
    +            
    +              EA
    +              EA
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          EP4R
    +          EP4R
    +          endpoint register
    +          0x10
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              CTR_RX
    +              CTR_RX
    +              15
    +              1
    +            
    +            
    +              DTOG_RX
    +              DTOG_RX
    +              14
    +              1
    +            
    +            
    +              STAT_RX
    +              STAT_RX
    +              12
    +              2
    +            
    +            
    +              SETUP
    +              SETUP
    +              11
    +              1
    +            
    +            
    +              EPTYPE
    +              EPTYPE
    +              9
    +              2
    +            
    +            
    +              EP_KIND
    +              EP_KIND
    +              8
    +              1
    +            
    +            
    +              CTR_TX
    +              CTR_TX
    +              7
    +              1
    +            
    +            
    +              DTOG_TX
    +              DTOG_TX
    +              6
    +              1
    +            
    +            
    +              STAT_TX
    +              STAT_TX
    +              4
    +              2
    +            
    +            
    +              EA
    +              EA
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          EP5R
    +          EP5R
    +          endpoint register
    +          0x14
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              CTR_RX
    +              CTR_RX
    +              15
    +              1
    +            
    +            
    +              DTOG_RX
    +              DTOG_RX
    +              14
    +              1
    +            
    +            
    +              STAT_RX
    +              STAT_RX
    +              12
    +              2
    +            
    +            
    +              SETUP
    +              SETUP
    +              11
    +              1
    +            
    +            
    +              EPTYPE
    +              EPTYPE
    +              9
    +              2
    +            
    +            
    +              EP_KIND
    +              EP_KIND
    +              8
    +              1
    +            
    +            
    +              CTR_TX
    +              CTR_TX
    +              7
    +              1
    +            
    +            
    +              DTOG_TX
    +              DTOG_TX
    +              6
    +              1
    +            
    +            
    +              STAT_TX
    +              STAT_TX
    +              4
    +              2
    +            
    +            
    +              EA
    +              EA
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          EP6R
    +          EP6R
    +          endpoint register
    +          0x18
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              CTR_RX
    +              CTR_RX
    +              15
    +              1
    +            
    +            
    +              DTOG_RX
    +              DTOG_RX
    +              14
    +              1
    +            
    +            
    +              STAT_RX
    +              STAT_RX
    +              12
    +              2
    +            
    +            
    +              SETUP
    +              SETUP
    +              11
    +              1
    +            
    +            
    +              EPTYPE
    +              EPTYPE
    +              9
    +              2
    +            
    +            
    +              EP_KIND
    +              EP_KIND
    +              8
    +              1
    +            
    +            
    +              CTR_TX
    +              CTR_TX
    +              7
    +              1
    +            
    +            
    +              DTOG_TX
    +              DTOG_TX
    +              6
    +              1
    +            
    +            
    +              STAT_TX
    +              STAT_TX
    +              4
    +              2
    +            
    +            
    +              EA
    +              EA
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          EP7R
    +          EP7R
    +          endpoint register
    +          0x1C
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              CTR_RX
    +              CTR_RX
    +              15
    +              1
    +            
    +            
    +              DTOG_RX
    +              DTOG_RX
    +              14
    +              1
    +            
    +            
    +              STAT_RX
    +              STAT_RX
    +              12
    +              2
    +            
    +            
    +              SETUP
    +              SETUP
    +              11
    +              1
    +            
    +            
    +              EPTYPE
    +              EPTYPE
    +              9
    +              2
    +            
    +            
    +              EP_KIND
    +              EP_KIND
    +              8
    +              1
    +            
    +            
    +              CTR_TX
    +              CTR_TX
    +              7
    +              1
    +            
    +            
    +              DTOG_TX
    +              DTOG_TX
    +              6
    +              1
    +            
    +            
    +              STAT_TX
    +              STAT_TX
    +              4
    +              2
    +            
    +            
    +              EA
    +              EA
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          CNTR
    +          CNTR
    +          control register
    +          0x40
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              CTRM
    +              CTRM
    +              15
    +              1
    +            
    +            
    +              PMAOVRM
    +              PMAOVRM
    +              14
    +              1
    +            
    +            
    +              ERRM
    +              ERRM
    +              13
    +              1
    +            
    +            
    +              WKUPM
    +              WKUPM
    +              12
    +              1
    +            
    +            
    +              SUSPM
    +              SUSPM
    +              11
    +              1
    +            
    +            
    +              RESETM
    +              RESETM
    +              10
    +              1
    +            
    +            
    +              SOFM
    +              SOFM
    +              9
    +              1
    +            
    +            
    +              ESOFM
    +              ESOFM
    +              8
    +              1
    +            
    +            
    +              L1REQM
    +              L1REQM
    +              7
    +              1
    +            
    +            
    +              L1RESUME
    +              L1RESUME
    +              5
    +              1
    +            
    +            
    +              RESUME
    +              RESUME
    +              4
    +              1
    +            
    +            
    +              FSUSP
    +              FSUSP
    +              3
    +              1
    +            
    +            
    +              LPMODE
    +              LPMODE
    +              2
    +              1
    +            
    +            
    +              PDWN
    +              PDWN
    +              1
    +              1
    +            
    +            
    +              FRES
    +              FRES
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ISTR
    +          ISTR
    +          interrupt status register
    +          0x44
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              CTR
    +              CTR
    +              15
    +              1
    +            
    +            
    +              PMAOVR
    +              PMAOVR
    +              14
    +              1
    +            
    +            
    +              ERR
    +              ERR
    +              13
    +              1
    +            
    +            
    +              WKUP
    +              WKUP
    +              12
    +              1
    +            
    +            
    +              SUSP
    +              SUSP
    +              11
    +              1
    +            
    +            
    +              RESET
    +              RESET
    +              10
    +              1
    +            
    +            
    +              SOF
    +              SOF
    +              9
    +              1
    +            
    +            
    +              ESOF
    +              ESOF
    +              8
    +              1
    +            
    +            
    +              L1REQ
    +              L1REQ
    +              7
    +              1
    +            
    +            
    +              DIR
    +              DIR
    +              4
    +              1
    +            
    +            
    +              EP_ID
    +              EP_ID
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          FNR
    +          FNR
    +          frame number register
    +          0x48
    +          0x20
    +          read-only
    +          0x0
    +          
    +            
    +              RXDP
    +              RXDP
    +              15
    +              1
    +            
    +            
    +              RXDM
    +              RXDM
    +              14
    +              1
    +            
    +            
    +              LCK
    +              LCK
    +              13
    +              1
    +            
    +            
    +              LSOF
    +              LSOF
    +              11
    +              2
    +            
    +            
    +              FN
    +              FN
    +              0
    +              11
    +            
    +          
    +        
    +        
    +          DADDR
    +          DADDR
    +          device address
    +          0x4C
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              EF
    +              EF
    +              7
    +              1
    +            
    +            
    +              ADD
    +              ADD
    +              0
    +              7
    +            
    +          
    +        
    +        
    +          BTABLE
    +          BTABLE
    +          Buffer table address
    +          0x50
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              BTABLE
    +              BTABLE
    +              3
    +              13
    +            
    +          
    +        
    +        
    +          LPMCSR
    +          LPMCSR
    +          LPM control and status
    +          register
    +          0x54
    +          0x20
    +          0x0
    +          
    +            
    +              BESL
    +              BESL
    +              4
    +              4
    +              read-only
    +            
    +            
    +              REMWAKE
    +              REMWAKE
    +              3
    +              1
    +              read-only
    +            
    +            
    +              LPMACK
    +              LPMACK
    +              1
    +              1
    +              read-write
    +            
    +            
    +              LPMEN
    +              LPMEN
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          BCDR
    +          BCDR
    +          Battery charging detector
    +          0x58
    +          0x20
    +          0x0
    +          
    +            
    +              DPPU
    +              DPPU
    +              15
    +              1
    +              read-write
    +            
    +            
    +              PS2DET
    +              PS2DET
    +              7
    +              1
    +              read-only
    +            
    +            
    +              SDET
    +              SDET
    +              6
    +              1
    +              read-only
    +            
    +            
    +              PDET
    +              PDET
    +              5
    +              1
    +              read-only
    +            
    +            
    +              DCDET
    +              DCDET
    +              4
    +              1
    +              read-only
    +            
    +            
    +              SDEN
    +              SDEN
    +              3
    +              1
    +              read-write
    +            
    +            
    +              PDEN
    +              PDEN
    +              2
    +              1
    +              read-write
    +            
    +            
    +              DCDEN
    +              DCDEN
    +              1
    +              1
    +              read-write
    +            
    +            
    +              BCDEN
    +              BCDEN
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      CRS
    +      Clock recovery system
    +      CRS
    +      0x40006C00
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          CR
    +          CR
    +          control register
    +          0x0
    +          0x20
    +          read-write
    +          0x00002000
    +          
    +            
    +              TRIM
    +              HSI48 oscillator smooth
    +              trimming
    +              8
    +              6
    +            
    +            
    +              SWSYNC
    +              Generate software SYNC
    +              event
    +              7
    +              1
    +            
    +            
    +              AUTOTRIMEN
    +              Automatic trimming enable
    +              6
    +              1
    +            
    +            
    +              CEN
    +              Frequency error counter
    +              enable
    +              5
    +              1
    +            
    +            
    +              ESYNCIE
    +              Expected SYNC interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              ERRIE
    +              Synchronization or trimming error
    +              interrupt enable
    +              2
    +              1
    +            
    +            
    +              SYNCWARNIE
    +              SYNC warning interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              SYNCOKIE
    +              SYNC event OK interrupt
    +              enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CFGR
    +          CFGR
    +          configuration register
    +          0x4
    +          0x20
    +          read-write
    +          0x2022BB7F
    +          
    +            
    +              SYNCPOL
    +              SYNC polarity selection
    +              31
    +              1
    +            
    +            
    +              SYNCSRC
    +              SYNC signal source
    +              selection
    +              28
    +              2
    +            
    +            
    +              SYNCDIV
    +              SYNC divider
    +              24
    +              3
    +            
    +            
    +              FELIM
    +              Frequency error limit
    +              16
    +              8
    +            
    +            
    +              RELOAD
    +              Counter reload value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          ISR
    +          ISR
    +          interrupt and status register
    +          0x8
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              FECAP
    +              Frequency error capture
    +              16
    +              16
    +            
    +            
    +              FEDIR
    +              Frequency error direction
    +              15
    +              1
    +            
    +            
    +              TRIMOVF
    +              Trimming overflow or
    +              underflow
    +              10
    +              1
    +            
    +            
    +              SYNCMISS
    +              SYNC missed
    +              9
    +              1
    +            
    +            
    +              SYNCERR
    +              SYNC error
    +              8
    +              1
    +            
    +            
    +              ESYNCF
    +              Expected SYNC flag
    +              3
    +              1
    +            
    +            
    +              ERRF
    +              Error flag
    +              2
    +              1
    +            
    +            
    +              SYNCWARNF
    +              SYNC warning flag
    +              1
    +              1
    +            
    +            
    +              SYNCOKF
    +              SYNC event OK flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ICR
    +          ICR
    +          interrupt flag clear register
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ESYNCC
    +              Expected SYNC clear flag
    +              3
    +              1
    +            
    +            
    +              ERRC
    +              Error clear flag
    +              2
    +              1
    +            
    +            
    +              SYNCWARNC
    +              SYNC warning clear flag
    +              1
    +              1
    +            
    +            
    +              SYNCOKC
    +              SYNC event OK clear flag
    +              0
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      Firewall
    +      Firewall
    +      Firewall
    +      0x40011C00
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          FIREWALL_CSSA
    +          FIREWALL_CSSA
    +          Code segment start address
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ADD
    +              code segment start address
    +              8
    +              16
    +            
    +          
    +        
    +        
    +          FIREWALL_CSL
    +          FIREWALL_CSL
    +          Code segment length
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              LENG
    +              code segment length
    +              8
    +              14
    +            
    +          
    +        
    +        
    +          FIREWALL_NVDSSA
    +          FIREWALL_NVDSSA
    +          Non-volatile data segment start
    +          address
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ADD
    +              Non-volatile data segment start
    +              address
    +              8
    +              16
    +            
    +          
    +        
    +        
    +          FIREWALL_NVDSL
    +          FIREWALL_NVDSL
    +          Non-volatile data segment
    +          length
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              LENG
    +              Non-volatile data segment
    +              length
    +              8
    +              14
    +            
    +          
    +        
    +        
    +          FIREWALL_VDSSA
    +          FIREWALL_VDSSA
    +          Volatile data segment start
    +          address
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ADD
    +              Volatile data segment start
    +              address
    +              6
    +              10
    +            
    +          
    +        
    +        
    +          FIREWALL_VDSL
    +          FIREWALL_VDSL
    +          Volatile data segment length
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              LENG
    +              Non-volatile data segment
    +              length
    +              6
    +              10
    +            
    +          
    +        
    +        
    +          FIREWALL_CR
    +          FIREWALL_CR
    +          Configuration register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              VDE
    +              Volatile data execution
    +              2
    +              1
    +            
    +            
    +              VDS
    +              Volatile data shared
    +              1
    +              1
    +            
    +            
    +              FPA
    +              Firewall pre alarm
    +              0
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      RCC
    +      Reset and clock control
    +      RCC
    +      0x40021000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        RCC
    +        RCC global interrupt
    +        4
    +      
    +      
    +        
    +          CR
    +          CR
    +          Clock control register
    +          0x0
    +          0x20
    +          0x00000300
    +          
    +            
    +              PLLRDY
    +              PLL clock ready flag
    +              25
    +              1
    +              read-only
    +            
    +            
    +              PLLON
    +              PLL enable bit
    +              24
    +              1
    +              read-write
    +            
    +            
    +              RTCPRE
    +              TC/LCD prescaler
    +              20
    +              2
    +              read-write
    +            
    +            
    +              CSSLSEON
    +              Clock security system on HSE enable
    +              bit
    +              19
    +              1
    +              read-write
    +            
    +            
    +              HSEBYP
    +              HSE clock bypass bit
    +              18
    +              1
    +              read-write
    +            
    +            
    +              HSERDY
    +              HSE clock ready flag
    +              17
    +              1
    +              read-only
    +            
    +            
    +              HSEON
    +              HSE clock enable bit
    +              16
    +              1
    +              read-write
    +            
    +            
    +              MSIRDY
    +              MSI clock ready flag
    +              9
    +              1
    +              read-only
    +            
    +            
    +              MSION
    +              MSI clock enable bit
    +              8
    +              1
    +              read-write
    +            
    +            
    +              HSI16DIVF
    +              HSI16DIVF
    +              4
    +              1
    +              read-only
    +            
    +            
    +              HSI16DIVEN
    +              HSI16DIVEN
    +              3
    +              1
    +              read-write
    +            
    +            
    +              HSI16RDYF
    +              Internal high-speed clock ready
    +              flag
    +              2
    +              1
    +              read-write
    +            
    +            
    +              HSI16KERON
    +              High-speed internal clock enable bit for
    +              some IP kernels
    +              1
    +              1
    +              read-only
    +            
    +            
    +              HSI16ON
    +              16 MHz high-speed internal clock
    +              enable
    +              0
    +              1
    +              read-write
    +            
    +            
    +              HSI16OUTEN
    +              16 MHz high-speed internal clock output
    +              enable
    +              5
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          ICSCR
    +          ICSCR
    +          Internal clock sources calibration
    +          register
    +          0x4
    +          0x20
    +          0x0000B000
    +          
    +            
    +              MSITRIM
    +              MSI clock trimming
    +              24
    +              8
    +              read-write
    +            
    +            
    +              MSICAL
    +              MSI clock calibration
    +              16
    +              8
    +              read-only
    +            
    +            
    +              MSIRANGE
    +              MSI clock ranges
    +              13
    +              3
    +              read-write
    +            
    +            
    +              HSI16TRIM
    +              High speed internal clock
    +              trimming
    +              8
    +              5
    +              read-write
    +            
    +            
    +              HSI16CAL
    +              nternal high speed clock
    +              calibration
    +              0
    +              8
    +              read-only
    +            
    +          
    +        
    +        
    +          CRRCR
    +          CRRCR
    +          Clock recovery RC register
    +          0x8
    +          0x20
    +          0x00000000
    +          
    +            
    +              HSI48CAL
    +              48 MHz HSI clock
    +              calibration
    +              8
    +              8
    +              read-only
    +            
    +            
    +              HSI48RDY
    +              48MHz HSI clock ready flag
    +              1
    +              1
    +              read-only
    +            
    +            
    +              HSI48ON
    +              48MHz HSI clock enable bit
    +              0
    +              1
    +              read-write
    +            
    +            
    +              HSI48DIV6EN
    +              48 MHz HSI clock divided by 6 output
    +              enable
    +              2
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CFGR
    +          CFGR
    +          Clock configuration register
    +          0xC
    +          0x20
    +          0x00000000
    +          
    +            
    +              MCOPRE
    +              Microcontroller clock output
    +              prescaler
    +              28
    +              3
    +              read-write
    +            
    +            
    +              MCOSEL
    +              Microcontroller clock output
    +              selection
    +              24
    +              4
    +              read-write
    +            
    +            
    +              PLLDIV
    +              PLL output division
    +              22
    +              2
    +              read-write
    +            
    +            
    +              PLLMUL
    +              PLL multiplication factor
    +              18
    +              4
    +              read-write
    +            
    +            
    +              PLLSRC
    +              PLL entry clock source
    +              16
    +              1
    +              read-write
    +            
    +            
    +              STOPWUCK
    +              Wake-up from stop clock
    +              selection
    +              15
    +              1
    +              read-write
    +            
    +            
    +              PPRE2
    +              APB high-speed prescaler
    +              (APB2)
    +              11
    +              3
    +              read-write
    +            
    +            
    +              PPRE1
    +              APB low-speed prescaler
    +              (APB1)
    +              8
    +              3
    +              read-write
    +            
    +            
    +              HPRE
    +              AHB prescaler
    +              4
    +              4
    +              read-write
    +            
    +            
    +              SWS
    +              System clock switch status
    +              2
    +              2
    +              read-only
    +            
    +            
    +              SW
    +              System clock switch
    +              0
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          CIER
    +          CIER
    +          Clock interrupt enable
    +          register
    +          0x10
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CSSLSE
    +              LSE CSS interrupt flag
    +              7
    +              1
    +            
    +            
    +              HSI48RDYIE
    +              HSI48 ready interrupt flag
    +              6
    +              1
    +            
    +            
    +              MSIRDYIE
    +              MSI ready interrupt flag
    +              5
    +              1
    +            
    +            
    +              PLLRDYIE
    +              PLL ready interrupt flag
    +              4
    +              1
    +            
    +            
    +              HSERDYIE
    +              HSE ready interrupt flag
    +              3
    +              1
    +            
    +            
    +              HSI16RDYIE
    +              HSI16 ready interrupt flag
    +              2
    +              1
    +            
    +            
    +              LSERDYIE
    +              LSE ready interrupt flag
    +              1
    +              1
    +            
    +            
    +              LSIRDYIE
    +              LSI ready interrupt flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CIFR
    +          CIFR
    +          Clock interrupt flag register
    +          0x14
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CSSHSEF
    +              Clock Security System Interrupt
    +              flag
    +              8
    +              1
    +            
    +            
    +              CSSLSEF
    +              LSE Clock Security System Interrupt
    +              flag
    +              7
    +              1
    +            
    +            
    +              HSI48RDYF
    +              HSI48 ready interrupt flag
    +              6
    +              1
    +            
    +            
    +              MSIRDYF
    +              MSI ready interrupt flag
    +              5
    +              1
    +            
    +            
    +              PLLRDYF
    +              PLL ready interrupt flag
    +              4
    +              1
    +            
    +            
    +              HSERDYF
    +              HSE ready interrupt flag
    +              3
    +              1
    +            
    +            
    +              HSI16RDYF
    +              HSI16 ready interrupt flag
    +              2
    +              1
    +            
    +            
    +              LSERDYF
    +              LSE ready interrupt flag
    +              1
    +              1
    +            
    +            
    +              LSIRDYF
    +              LSI ready interrupt flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CICR
    +          CICR
    +          Clock interrupt clear register
    +          0x18
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CSSHSEC
    +              Clock Security System Interrupt
    +              clear
    +              8
    +              1
    +            
    +            
    +              CSSLSEC
    +              LSE Clock Security System Interrupt
    +              clear
    +              7
    +              1
    +            
    +            
    +              HSI48RDYC
    +              HSI48 ready Interrupt
    +              clear
    +              6
    +              1
    +            
    +            
    +              MSIRDYC
    +              MSI ready Interrupt clear
    +              5
    +              1
    +            
    +            
    +              PLLRDYC
    +              PLL ready Interrupt clear
    +              4
    +              1
    +            
    +            
    +              HSERDYC
    +              HSE ready Interrupt clear
    +              3
    +              1
    +            
    +            
    +              HSI16RDYC
    +              HSI16 ready Interrupt
    +              clear
    +              2
    +              1
    +            
    +            
    +              LSERDYC
    +              LSE ready Interrupt clear
    +              1
    +              1
    +            
    +            
    +              LSIRDYC
    +              LSI ready Interrupt clear
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          IOPRSTR
    +          IOPRSTR
    +          GPIO reset register
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              IOPHRST
    +              I/O port H reset
    +              7
    +              1
    +            
    +            
    +              IOPDRST
    +              I/O port D reset
    +              3
    +              1
    +            
    +            
    +              IOPCRST
    +              I/O port A reset
    +              2
    +              1
    +            
    +            
    +              IOPBRST
    +              I/O port B reset
    +              1
    +              1
    +            
    +            
    +              IOPARST
    +              I/O port A reset
    +              0
    +              1
    +            
    +            
    +              IOPERST
    +              I/O port E reset
    +              4
    +              1
    +            
    +          
    +        
    +        
    +          AHBRSTR
    +          AHBRSTR
    +          AHB peripheral reset register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CRYPRST
    +              Crypto module reset
    +              24
    +              1
    +            
    +            
    +              RNGRST
    +              Random Number Generator module
    +              reset
    +              20
    +              1
    +            
    +            
    +              TOUCHRST
    +              Touch Sensing reset
    +              16
    +              1
    +            
    +            
    +              CRCRST
    +              Test integration module
    +              reset
    +              12
    +              1
    +            
    +            
    +              MIFRST
    +              Memory interface reset
    +              8
    +              1
    +            
    +            
    +              DMARST
    +              DMA reset
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          APB2RSTR
    +          APB2RSTR
    +          APB2 peripheral reset register
    +          0x24
    +          0x20
    +          read-write
    +          0x000000000
    +          
    +            
    +              DBGRST
    +              DBG reset
    +              22
    +              1
    +            
    +            
    +              USART1RST
    +              USART1 reset
    +              14
    +              1
    +            
    +            
    +              SPI1RST
    +              SPI 1 reset
    +              12
    +              1
    +            
    +            
    +              ADCRST
    +              ADC interface reset
    +              9
    +              1
    +            
    +            
    +              TM12RST
    +              TIM22 timer reset
    +              5
    +              1
    +            
    +            
    +              TIM21RST
    +              TIM21 timer reset
    +              2
    +              1
    +            
    +            
    +              SYSCFGRST
    +              System configuration controller
    +              reset
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          APB1RSTR
    +          APB1RSTR
    +          APB1 peripheral reset register
    +          0x28
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              LPTIM1RST
    +              Low power timer reset
    +              31
    +              1
    +            
    +            
    +              DACRST
    +              DAC interface reset
    +              29
    +              1
    +            
    +            
    +              PWRRST
    +              Power interface reset
    +              28
    +              1
    +            
    +            
    +              CRSRST
    +              Clock recovery system
    +              reset
    +              27
    +              1
    +            
    +            
    +              USBRST
    +              USB reset
    +              23
    +              1
    +            
    +            
    +              I2C2RST
    +              I2C2 reset
    +              22
    +              1
    +            
    +            
    +              I2C1RST
    +              I2C1 reset
    +              21
    +              1
    +            
    +            
    +              LPUART1RST
    +              LPUART1 reset
    +              18
    +              1
    +            
    +            
    +              LPUART12RST
    +              UART2 reset
    +              17
    +              1
    +            
    +            
    +              SPI2RST
    +              SPI2 reset
    +              14
    +              1
    +            
    +            
    +              WWDRST
    +              Window watchdog reset
    +              11
    +              1
    +            
    +            
    +              TIM6RST
    +              Timer 6 reset
    +              4
    +              1
    +            
    +            
    +              TIM2RST
    +              Timer2 reset
    +              0
    +              1
    +            
    +            
    +              TIM3RST
    +              Timer3 reset
    +              1
    +              1
    +            
    +            
    +              TIM7RST
    +              Timer 7 reset
    +              5
    +              1
    +            
    +            
    +              USART4RST
    +              USART4 reset
    +              19
    +              1
    +            
    +            
    +              USART5RST
    +              USART5 reset
    +              20
    +              1
    +            
    +            
    +              I2C3RST
    +              I2C3 reset
    +              30
    +              1
    +            
    +          
    +        
    +        
    +          IOPENR
    +          IOPENR
    +          GPIO clock enable register
    +          0x2C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              IOPHEN
    +              I/O port H clock enable
    +              bit
    +              7
    +              1
    +            
    +            
    +              IOPDEN
    +              I/O port D clock enable
    +              bit
    +              3
    +              1
    +            
    +            
    +              IOPCEN
    +              IO port A clock enable bit
    +              2
    +              1
    +            
    +            
    +              IOPBEN
    +              IO port B clock enable bit
    +              1
    +              1
    +            
    +            
    +              IOPAEN
    +              IO port A clock enable bit
    +              0
    +              1
    +            
    +            
    +              IOPEEN
    +              I/O port E clock enable
    +              bit
    +              4
    +              1
    +            
    +          
    +        
    +        
    +          AHBENR
    +          AHBENR
    +          AHB peripheral clock enable
    +          register
    +          0x30
    +          0x20
    +          read-write
    +          0x00000100
    +          
    +            
    +              CRYPEN
    +              Crypto clock enable bit
    +              24
    +              1
    +            
    +            
    +              RNGEN
    +              Random Number Generator clock enable
    +              bit
    +              20
    +              1
    +            
    +            
    +              TOUCHEN
    +              Touch Sensing clock enable
    +              bit
    +              16
    +              1
    +            
    +            
    +              CRCEN
    +              CRC clock enable bit
    +              12
    +              1
    +            
    +            
    +              MIFEN
    +              NVM interface clock enable
    +              bit
    +              8
    +              1
    +            
    +            
    +              DMAEN
    +              DMA clock enable bit
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          APB2ENR
    +          APB2ENR
    +          APB2 peripheral clock enable
    +          register
    +          0x34
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DBGEN
    +              DBG clock enable bit
    +              22
    +              1
    +            
    +            
    +              USART1EN
    +              USART1 clock enable bit
    +              14
    +              1
    +            
    +            
    +              SPI1EN
    +              SPI1 clock enable bit
    +              12
    +              1
    +            
    +            
    +              ADCEN
    +              ADC clock enable bit
    +              9
    +              1
    +            
    +            
    +              MIFIEN
    +              MiFaRe Firewall clock enable
    +              bit
    +              7
    +              1
    +            
    +            
    +              TIM22EN
    +              TIM22 timer clock enable
    +              bit
    +              5
    +              1
    +            
    +            
    +              TIM21EN
    +              TIM21 timer clock enable
    +              bit
    +              2
    +              1
    +            
    +            
    +              SYSCFGEN
    +              System configuration controller clock
    +              enable bit
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          APB1ENR
    +          APB1ENR
    +          APB1 peripheral clock enable
    +          register
    +          0x38
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              LPTIM1EN
    +              Low power timer clock enable
    +              bit
    +              31
    +              1
    +            
    +            
    +              DACEN
    +              DAC interface clock enable
    +              bit
    +              29
    +              1
    +            
    +            
    +              PWREN
    +              Power interface clock enable
    +              bit
    +              28
    +              1
    +            
    +            
    +              CRSEN
    +              Clock recovery system clock enable
    +              bit
    +              27
    +              1
    +            
    +            
    +              USBEN
    +              USB clock enable bit
    +              23
    +              1
    +            
    +            
    +              I2C2EN
    +              I2C2 clock enable bit
    +              22
    +              1
    +            
    +            
    +              I2C1EN
    +              I2C1 clock enable bit
    +              21
    +              1
    +            
    +            
    +              LPUART1EN
    +              LPUART1 clock enable bit
    +              18
    +              1
    +            
    +            
    +              USART2EN
    +              UART2 clock enable bit
    +              17
    +              1
    +            
    +            
    +              SPI2EN
    +              SPI2 clock enable bit
    +              14
    +              1
    +            
    +            
    +              WWDGEN
    +              Window watchdog clock enable
    +              bit
    +              11
    +              1
    +            
    +            
    +              TIM6EN
    +              Timer 6 clock enable bit
    +              4
    +              1
    +            
    +            
    +              TIM2EN
    +              Timer2 clock enable bit
    +              0
    +              1
    +            
    +            
    +              TIM3EN
    +              Timer3 clock enable bit
    +              1
    +              1
    +            
    +            
    +              TIM7EN
    +              Timer 7 clock enable bit
    +              5
    +              1
    +            
    +            
    +              USART4EN
    +              USART4 clock enable bit
    +              19
    +              1
    +            
    +            
    +              USART5EN
    +              USART5 clock enable bit
    +              20
    +              1
    +            
    +            
    +              I2C3EN
    +              I2C3 clock enable bit
    +              30
    +              1
    +            
    +          
    +        
    +        
    +          IOPSMEN
    +          IOPSMEN
    +          GPIO clock enable in sleep mode
    +          register
    +          0x3C
    +          0x20
    +          read-write
    +          0x0000008F
    +          
    +            
    +              IOPHSMEN
    +              IOPHSMEN
    +              7
    +              1
    +            
    +            
    +              IOPDSMEN
    +              IOPDSMEN
    +              3
    +              1
    +            
    +            
    +              IOPCSMEN
    +              IOPCSMEN
    +              2
    +              1
    +            
    +            
    +              IOPBSMEN
    +              IOPBSMEN
    +              1
    +              1
    +            
    +            
    +              IOPASMEN
    +              IOPASMEN
    +              0
    +              1
    +            
    +            
    +              IOPESMEN
    +              Port E clock enable during Sleep mode
    +              bit
    +              4
    +              1
    +            
    +          
    +        
    +        
    +          AHBSMENR
    +          AHBSMENR
    +          AHB peripheral clock enable in sleep mode
    +          register
    +          0x40
    +          0x20
    +          read-write
    +          0x01111301
    +          
    +            
    +              CRYPSMEN
    +              Crypto clock enable during sleep mode
    +              bit
    +              24
    +              1
    +            
    +            
    +              RNGSMEN
    +              Random Number Generator clock enable
    +              during sleep mode bit
    +              20
    +              1
    +            
    +            
    +              TOUCHSMEN
    +              Touch Sensing clock enable during sleep
    +              mode bit
    +              16
    +              1
    +            
    +            
    +              CRCSMEN
    +              CRC clock enable during sleep mode
    +              bit
    +              12
    +              1
    +            
    +            
    +              SRAMSMEN
    +              SRAM interface clock enable during sleep
    +              mode bit
    +              9
    +              1
    +            
    +            
    +              MIFSMEN
    +              NVM interface clock enable during sleep
    +              mode bit
    +              8
    +              1
    +            
    +            
    +              DMASMEN
    +              DMA clock enable during sleep mode
    +              bit
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          APB2SMENR
    +          APB2SMENR
    +          APB2 peripheral clock enable in sleep mode
    +          register
    +          0x44
    +          0x20
    +          read-write
    +          0x00405225
    +          
    +            
    +              DBGSMEN
    +              DBG clock enable during sleep mode
    +              bit
    +              22
    +              1
    +            
    +            
    +              USART1SMEN
    +              USART1 clock enable during sleep mode
    +              bit
    +              14
    +              1
    +            
    +            
    +              SPI1SMEN
    +              SPI1 clock enable during sleep mode
    +              bit
    +              12
    +              1
    +            
    +            
    +              ADCSMEN
    +              ADC clock enable during sleep mode
    +              bit
    +              9
    +              1
    +            
    +            
    +              TIM22SMEN
    +              TIM22 timer clock enable during sleep
    +              mode bit
    +              5
    +              1
    +            
    +            
    +              TIM21SMEN
    +              TIM21 timer clock enable during sleep
    +              mode bit
    +              2
    +              1
    +            
    +            
    +              SYSCFGSMEN
    +              System configuration controller clock
    +              enable during sleep mode bit
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          APB1SMENR
    +          APB1SMENR
    +          APB1 peripheral clock enable in sleep mode
    +          register
    +          0x48
    +          0x20
    +          read-write
    +          0xB8E64A11
    +          
    +            
    +              LPTIM1SMEN
    +              Low power timer clock enable during
    +              sleep mode bit
    +              31
    +              1
    +            
    +            
    +              DACSMEN
    +              DAC interface clock enable during sleep
    +              mode bit
    +              29
    +              1
    +            
    +            
    +              PWRSMEN
    +              Power interface clock enable during
    +              sleep mode bit
    +              28
    +              1
    +            
    +            
    +              CRSSMEN
    +              Clock recovery system clock enable
    +              during sleep mode bit
    +              27
    +              1
    +            
    +            
    +              USBSMEN
    +              USB clock enable during sleep mode
    +              bit
    +              23
    +              1
    +            
    +            
    +              I2C2SMEN
    +              I2C2 clock enable during sleep mode
    +              bit
    +              22
    +              1
    +            
    +            
    +              I2C1SMEN
    +              I2C1 clock enable during sleep mode
    +              bit
    +              21
    +              1
    +            
    +            
    +              LPUART1SMEN
    +              LPUART1 clock enable during sleep mode
    +              bit
    +              18
    +              1
    +            
    +            
    +              USART2SMEN
    +              UART2 clock enable during sleep mode
    +              bit
    +              17
    +              1
    +            
    +            
    +              SPI2SMEN
    +              SPI2 clock enable during sleep mode
    +              bit
    +              14
    +              1
    +            
    +            
    +              WWDGSMEN
    +              Window watchdog clock enable during
    +              sleep mode bit
    +              11
    +              1
    +            
    +            
    +              TIM6SMEN
    +              Timer 6 clock enable during sleep mode
    +              bit
    +              4
    +              1
    +            
    +            
    +              TIM2SMEN
    +              Timer2 clock enable during sleep mode
    +              bit
    +              0
    +              1
    +            
    +            
    +              TIM3SMEN
    +              Timer3 clock enable during Sleep mode
    +              bit
    +              1
    +              1
    +            
    +            
    +              TIM7SMEN
    +              Timer 7 clock enable during Sleep mode
    +              bit
    +              5
    +              1
    +            
    +            
    +              USART4SMEN
    +              USART4 clock enable during Sleep mode
    +              bit
    +              19
    +              1
    +            
    +            
    +              USART5SMEN
    +              USART5 clock enable during Sleep mode
    +              bit
    +              20
    +              1
    +            
    +            
    +              I2C3SMEN
    +              2C3 clock enable during Sleep mode
    +              bit
    +              30
    +              1
    +            
    +          
    +        
    +        
    +          CCIPR
    +          CCIPR
    +          Clock configuration register
    +          0x4C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              HSI48MSEL
    +              48 MHz HSI48 clock source selection
    +              bit
    +              26
    +              1
    +            
    +            
    +              LPTIM1SEL1
    +              Low Power Timer clock source selection
    +              bits
    +              19
    +              1
    +            
    +            
    +              LPTIM1SEL0
    +              LPTIM1SEL0
    +              18
    +              1
    +            
    +            
    +              I2C1SEL1
    +              I2C1 clock source selection
    +              bits
    +              13
    +              1
    +            
    +            
    +              I2C1SEL0
    +              I2C1SEL0
    +              12
    +              1
    +            
    +            
    +              LPUART1SEL1
    +              LPUART1 clock source selection
    +              bits
    +              11
    +              1
    +            
    +            
    +              LPUART1SEL0
    +              LPUART1SEL0
    +              10
    +              1
    +            
    +            
    +              USART2SEL1
    +              USART2 clock source selection
    +              bits
    +              3
    +              1
    +            
    +            
    +              USART2SEL0
    +              USART2SEL0
    +              2
    +              1
    +            
    +            
    +              USART1SEL1
    +              USART1 clock source selection
    +              bits
    +              1
    +              1
    +            
    +            
    +              USART1SEL0
    +              USART1SEL0
    +              0
    +              1
    +            
    +            
    +              I2C3SEL
    +              I2C3 clock source selection
    +              bits
    +              16
    +              2
    +            
    +          
    +        
    +        
    +          CSR
    +          CSR
    +          Control and status register
    +          0x50
    +          0x20
    +          0x0C000000
    +          
    +            
    +              LPWRSTF
    +              Low-power reset flag
    +              31
    +              1
    +              read-write
    +            
    +            
    +              WWDGRSTF
    +              Window watchdog reset flag
    +              30
    +              1
    +              read-write
    +            
    +            
    +              IWDGRSTF
    +              Independent watchdog reset
    +              flag
    +              29
    +              1
    +              read-write
    +            
    +            
    +              SFTRSTF
    +              Software reset flag
    +              28
    +              1
    +              read-write
    +            
    +            
    +              PORRSTF
    +              POR/PDR reset flag
    +              27
    +              1
    +              read-write
    +            
    +            
    +              PINRSTF
    +              PIN reset flag
    +              26
    +              1
    +              read-write
    +            
    +            
    +              OBLRSTF
    +              OBLRSTF
    +              25
    +              1
    +              read-write
    +            
    +            
    +              RMVF
    +              Remove reset flag
    +              24
    +              1
    +              read-write
    +            
    +            
    +              RTCRST
    +              RTC software reset bit
    +              19
    +              1
    +              read-write
    +            
    +            
    +              RTCEN
    +              RTC clock enable bit
    +              18
    +              1
    +              read-write
    +            
    +            
    +              RTCSEL
    +              RTC and LCD clock source selection
    +              bits
    +              16
    +              2
    +              read-write
    +            
    +            
    +              CSSLSED
    +              CSS on LSE failure detection
    +              flag
    +              14
    +              1
    +              read-write
    +            
    +            
    +              CSSLSEON
    +              CSSLSEON
    +              13
    +              1
    +              read-write
    +            
    +            
    +              LSEDRV
    +              LSEDRV
    +              11
    +              2
    +              read-write
    +            
    +            
    +              LSEBYP
    +              External low-speed oscillator bypass
    +              bit
    +              10
    +              1
    +              read-write
    +            
    +            
    +              LSERDY
    +              External low-speed oscillator ready
    +              bit
    +              9
    +              1
    +              read-only
    +            
    +            
    +              LSEON
    +              External low-speed oscillator enable
    +              bit
    +              8
    +              1
    +              read-write
    +            
    +            
    +              LSIRDY
    +              Internal low-speed oscillator ready
    +              bit
    +              1
    +              1
    +              read-write
    +            
    +            
    +              LSION
    +              Internal low-speed oscillator
    +              enable
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      SYSCFG_COMP
    +      System configuration controller and
    +      Comparator
    +      SYSCFG
    +      0x40010000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          CFGR1
    +          CFGR1
    +          SYSCFG configuration register
    +          1
    +          0x0
    +          0x20
    +          0x00000000
    +          
    +            
    +              BOOT_MODE
    +              Boot mode selected by the boot pins
    +              status bits
    +              8
    +              2
    +              read-only
    +            
    +            
    +              MEM_MODE
    +              Memory mapping selection
    +              bits
    +              0
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          CFGR2
    +          CFGR2
    +          SYSCFG configuration register
    +          2
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              I2C2_FMP
    +              I2C2 Fm+ drive capability enable
    +              bit
    +              13
    +              1
    +            
    +            
    +              I2C1_FMP
    +              I2C1 Fm+ drive capability enable
    +              bit
    +              12
    +              1
    +            
    +            
    +              I2C_PB9_FMP
    +              Fm+ drive capability on PB9 enable
    +              bit
    +              11
    +              1
    +            
    +            
    +              I2C_PB8_FMP
    +              Fm+ drive capability on PB8 enable
    +              bit
    +              10
    +              1
    +            
    +            
    +              I2C_PB7_FMP
    +              Fm+ drive capability on PB7 enable
    +              bit
    +              9
    +              1
    +            
    +            
    +              I2C_PB6_FMP
    +              Fm+ drive capability on PB6 enable
    +              bit
    +              8
    +              1
    +            
    +            
    +              FWDISEN
    +              Firewall disable bit
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          EXTICR1
    +          EXTICR1
    +          external interrupt configuration register
    +          1
    +          0x8
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              EXTI3
    +              EXTI x configuration (x = 0 to
    +              3)
    +              12
    +              4
    +            
    +            
    +              EXTI2
    +              EXTI x configuration (x = 0 to
    +              3)
    +              8
    +              4
    +            
    +            
    +              EXTI1
    +              EXTI x configuration (x = 0 to
    +              3)
    +              4
    +              4
    +            
    +            
    +              EXTI0
    +              EXTI x configuration (x = 0 to
    +              3)
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          EXTICR2
    +          EXTICR2
    +          external interrupt configuration register
    +          2
    +          0xC
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              EXTI7
    +              EXTI x configuration (x = 4 to
    +              7)
    +              12
    +              4
    +            
    +            
    +              EXTI6
    +              EXTI x configuration (x = 4 to
    +              7)
    +              8
    +              4
    +            
    +            
    +              EXTI5
    +              EXTI x configuration (x = 4 to
    +              7)
    +              4
    +              4
    +            
    +            
    +              EXTI4
    +              EXTI x configuration (x = 4 to
    +              7)
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          EXTICR3
    +          EXTICR3
    +          external interrupt configuration register
    +          3
    +          0x10
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              EXTI11
    +              EXTI x configuration (x = 8 to
    +              11)
    +              12
    +              4
    +            
    +            
    +              EXTI10
    +              EXTI10
    +              8
    +              4
    +            
    +            
    +              EXTI9
    +              EXTI x configuration (x = 8 to
    +              11)
    +              4
    +              4
    +            
    +            
    +              EXTI8
    +              EXTI x configuration (x = 8 to
    +              11)
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          EXTICR4
    +          EXTICR4
    +          external interrupt configuration register
    +          4
    +          0x14
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              EXTI15
    +              EXTI x configuration (x = 12 to
    +              15)
    +              12
    +              4
    +            
    +            
    +              EXTI14
    +              EXTI14
    +              8
    +              4
    +            
    +            
    +              EXTI13
    +              EXTI13
    +              4
    +              4
    +            
    +            
    +              EXTI12
    +              EXTI12
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          CFGR3
    +          CFGR3
    +          SYSCFG configuration register
    +          3
    +          0x20
    +          0x20
    +          0x00000000
    +          
    +            
    +              REF_LOCK
    +              REF_CTRL lock bit
    +              31
    +              1
    +              write-only
    +            
    +            
    +              VREFINT_RDYF
    +              VREFINT ready flag
    +              30
    +              1
    +              read-only
    +            
    +            
    +              VREFINT_COMP_RDYF
    +              VREFINT for comparator ready
    +              flag
    +              29
    +              1
    +              read-only
    +            
    +            
    +              VREFINT_ADC_RDYF
    +              VREFINT for ADC ready flag
    +              28
    +              1
    +              read-only
    +            
    +            
    +              SENSOR_ADC_RDYF
    +              Sensor for ADC ready flag
    +              27
    +              1
    +              read-only
    +            
    +            
    +              REF_RC48MHz_RDYF
    +              VREFINT for 48 MHz RC oscillator ready
    +              flag
    +              26
    +              1
    +              read-only
    +            
    +            
    +              ENREF_RC48MHz
    +              VREFINT reference for 48 MHz RC
    +              oscillator enable bit
    +              13
    +              1
    +              read-write
    +            
    +            
    +              ENBUF_VREFINT_COMP
    +              VREFINT reference for comparator 2
    +              enable bit
    +              12
    +              1
    +              read-write
    +            
    +            
    +              ENBUF_SENSOR_ADC
    +              Sensor reference for ADC enable
    +              bit
    +              9
    +              1
    +              read-write
    +            
    +            
    +              ENBUF_BGAP_ADC
    +              VREFINT reference for ADC enable
    +              bit
    +              8
    +              1
    +              read-write
    +            
    +            
    +              SEL_VREF_OUT
    +              BGAP_ADC connection bit
    +              4
    +              2
    +              read-write
    +            
    +            
    +              EN_BGAP
    +              Vref Enable bit
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          COMP1_CSR
    +          COMP1_CSR
    +          Comparator 1 control and status
    +          register
    +          0x18
    +          0x20
    +          0x00000000
    +          
    +            
    +              COMP1LOCK
    +              COMP1_CSR register lock
    +              bit
    +              31
    +              1
    +              read-only
    +            
    +            
    +              COMP1VALUE
    +              Comparator 1 output status
    +              bit
    +              30
    +              1
    +              read-only
    +            
    +            
    +              COMP1POLARITY
    +              Comparator 1 polarity selection
    +              bit
    +              15
    +              1
    +              read-write
    +            
    +            
    +              COMP1LPTIMIN1
    +              Comparator 1 LPTIM input propagation
    +              bit
    +              12
    +              1
    +              read-write
    +            
    +            
    +              COMP1WM
    +              Comparator 1 window mode selection
    +              bit
    +              8
    +              1
    +              read-write
    +            
    +            
    +              COMP1INNSEL
    +              Comparator 1 Input Minus connection
    +              configuration bit
    +              4
    +              2
    +              read-write
    +            
    +            
    +              COMP1EN
    +              Comparator 1 enable bit
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          COMP2_CSR
    +          COMP2_CSR
    +          Comparator 2 control and status
    +          register
    +          0x1C
    +          0x20
    +          0x00000000
    +          
    +            
    +              COMP2LOCK
    +              COMP2_CSR register lock
    +              bit
    +              31
    +              1
    +              read-only
    +            
    +            
    +              COMP2VALUE
    +              Comparator 2 output status
    +              bit
    +              20
    +              1
    +              read-only
    +            
    +            
    +              COMP2POLARITY
    +              Comparator 2 polarity selection
    +              bit
    +              15
    +              1
    +              read-write
    +            
    +            
    +              COMP2LPTIMIN1
    +              Comparator 2 LPTIM input 1 propagation
    +              bit
    +              13
    +              1
    +              read-write
    +            
    +            
    +              COMP2LPTIMIN2
    +              Comparator 2 LPTIM input 2 propagation
    +              bit
    +              12
    +              1
    +              read-write
    +            
    +            
    +              COMP2INPSEL
    +              Comparator 2 Input Plus connection
    +              configuration bit
    +              8
    +              3
    +              read-write
    +            
    +            
    +              COMP2INNSEL
    +              Comparator 2 Input Minus connection
    +              configuration bit
    +              4
    +              3
    +              read-write
    +            
    +            
    +              COMP2SPEED
    +              Comparator 2 power mode selection
    +              bit
    +              3
    +              1
    +              read-write
    +            
    +            
    +              COMP2EN
    +              Comparator 2 enable bit
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      SPI1
    +      Serial peripheral interface
    +      SPI
    +      0x40013000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          CR1
    +          CR1
    +          control register 1
    +          0x0
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              BIDIMODE
    +              Bidirectional data mode
    +              enable
    +              15
    +              1
    +            
    +            
    +              BIDIOE
    +              Output enable in bidirectional
    +              mode
    +              14
    +              1
    +            
    +            
    +              CRCEN
    +              Hardware CRC calculation
    +              enable
    +              13
    +              1
    +            
    +            
    +              CRCNEXT
    +              CRC transfer next
    +              12
    +              1
    +            
    +            
    +              DFF
    +              Data frame format
    +              11
    +              1
    +            
    +            
    +              RXONLY
    +              Receive only
    +              10
    +              1
    +            
    +            
    +              SSM
    +              Software slave management
    +              9
    +              1
    +            
    +            
    +              SSI
    +              Internal slave select
    +              8
    +              1
    +            
    +            
    +              LSBFIRST
    +              Frame format
    +              7
    +              1
    +            
    +            
    +              SPE
    +              SPI enable
    +              6
    +              1
    +            
    +            
    +              BR
    +              Baud rate control
    +              3
    +              3
    +            
    +            
    +              MSTR
    +              Master selection
    +              2
    +              1
    +            
    +            
    +              CPOL
    +              Clock polarity
    +              1
    +              1
    +            
    +            
    +              CPHA
    +              Clock phase
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CR2
    +          CR2
    +          control register 2
    +          0x4
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              RXDMAEN
    +              Rx buffer DMA enable
    +              0
    +              1
    +            
    +            
    +              TXDMAEN
    +              Tx buffer DMA enable
    +              1
    +              1
    +            
    +            
    +              SSOE
    +              SS output enable
    +              2
    +              1
    +            
    +            
    +              FRF
    +              Frame format
    +              4
    +              1
    +            
    +            
    +              ERRIE
    +              Error interrupt enable
    +              5
    +              1
    +            
    +            
    +              RXNEIE
    +              RX buffer not empty interrupt
    +              enable
    +              6
    +              1
    +            
    +            
    +              TXEIE
    +              Tx buffer empty interrupt
    +              enable
    +              7
    +              1
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          status register
    +          0x8
    +          0x20
    +          0x0002
    +          
    +            
    +              RXNE
    +              Receive buffer not empty
    +              0
    +              1
    +              read-only
    +            
    +            
    +              TXE
    +              Transmit buffer empty
    +              1
    +              1
    +              read-only
    +            
    +            
    +              CHSIDE
    +              Channel side
    +              2
    +              1
    +              read-only
    +            
    +            
    +              UDR
    +              Underrun flag
    +              3
    +              1
    +              read-only
    +            
    +            
    +              CRCERR
    +              CRC error flag
    +              4
    +              1
    +              read-write
    +            
    +            
    +              MODF
    +              Mode fault
    +              5
    +              1
    +              read-only
    +            
    +            
    +              OVR
    +              Overrun flag
    +              6
    +              1
    +              read-only
    +            
    +            
    +              BSY
    +              Busy flag
    +              7
    +              1
    +              read-only
    +            
    +            
    +              TIFRFE
    +              TI frame format error
    +              8
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          DR
    +          DR
    +          data register
    +          0xC
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              DR
    +              Data register
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CRCPR
    +          CRCPR
    +          CRC polynomial register
    +          0x10
    +          0x20
    +          read-write
    +          0x0007
    +          
    +            
    +              CRCPOLY
    +              CRC polynomial register
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          RXCRCR
    +          RXCRCR
    +          RX CRC register
    +          0x14
    +          0x20
    +          read-only
    +          0x0000
    +          
    +            
    +              RxCRC
    +              Rx CRC register
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          TXCRCR
    +          TXCRCR
    +          TX CRC register
    +          0x18
    +          0x20
    +          read-only
    +          0x0000
    +          
    +            
    +              TxCRC
    +              Tx CRC register
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          I2SCFGR
    +          I2SCFGR
    +          I2S configuration register
    +          0x1C
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              I2SMOD
    +              I2S mode selection
    +              11
    +              1
    +            
    +            
    +              I2SE
    +              I2S Enable
    +              10
    +              1
    +            
    +            
    +              I2SCFG
    +              I2S configuration mode
    +              8
    +              2
    +            
    +            
    +              PCMSYNC
    +              PCM frame synchronization
    +              7
    +              1
    +            
    +            
    +              I2SSTD
    +              I2S standard selection
    +              4
    +              2
    +            
    +            
    +              CKPOL
    +              Steady state clock
    +              polarity
    +              3
    +              1
    +            
    +            
    +              DATLEN
    +              Data length to be
    +              transferred
    +              1
    +              2
    +            
    +            
    +              CHLEN
    +              Channel length (number of bits per audio
    +              channel)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          I2SPR
    +          I2SPR
    +          I2S prescaler register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000010
    +          
    +            
    +              MCKOE
    +              Master clock output enable
    +              9
    +              1
    +            
    +            
    +              ODD
    +              Odd factor for the
    +              prescaler
    +              8
    +              1
    +            
    +            
    +              I2SDIV
    +              I2S Linear prescaler
    +              0
    +              8
    +            
    +          
    +        
    +      
    +    
    +    
    +      SPI2
    +      0x40003800
    +      
    +        SPI1
    +        SPI1_global_interrupt
    +        25
    +      
    +    
    +    
    +      I2C1
    +      Inter-integrated circuit
    +      I2C
    +      0x40005400
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        SPI2
    +        SPI2 global interrupt
    +        26
    +      
    +      
    +        
    +          CR1
    +          CR1
    +          Control register 1
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PE
    +              Peripheral enable
    +              0
    +              1
    +            
    +            
    +              TXIE
    +              TX Interrupt enable
    +              1
    +              1
    +            
    +            
    +              RXIE
    +              RX Interrupt enable
    +              2
    +              1
    +            
    +            
    +              ADDRIE
    +              Address match interrupt enable (slave
    +              only)
    +              3
    +              1
    +            
    +            
    +              NACKIE
    +              Not acknowledge received interrupt
    +              enable
    +              4
    +              1
    +            
    +            
    +              STOPIE
    +              STOP detection Interrupt
    +              enable
    +              5
    +              1
    +            
    +            
    +              TCIE
    +              Transfer Complete interrupt
    +              enable
    +              6
    +              1
    +            
    +            
    +              ERRIE
    +              Error interrupts enable
    +              7
    +              1
    +            
    +            
    +              DNF
    +              Digital noise filter
    +              8
    +              4
    +            
    +            
    +              ANFOFF
    +              Analog noise filter OFF
    +              12
    +              1
    +            
    +            
    +              TXDMAEN
    +              DMA transmission requests
    +              enable
    +              14
    +              1
    +            
    +            
    +              RXDMAEN
    +              DMA reception requests
    +              enable
    +              15
    +              1
    +            
    +            
    +              SBC
    +              Slave byte control
    +              16
    +              1
    +            
    +            
    +              NOSTRETCH
    +              Clock stretching disable
    +              17
    +              1
    +            
    +            
    +              WUPEN
    +              Wakeup from STOP enable
    +              18
    +              1
    +            
    +            
    +              GCEN
    +              General call enable
    +              19
    +              1
    +            
    +            
    +              SMBHEN
    +              SMBus Host address enable
    +              20
    +              1
    +            
    +            
    +              SMBDEN
    +              SMBus Device Default address
    +              enable
    +              21
    +              1
    +            
    +            
    +              ALERTEN
    +              SMBUS alert enable
    +              22
    +              1
    +            
    +            
    +              PECEN
    +              PEC enable
    +              23
    +              1
    +            
    +          
    +        
    +        
    +          CR2
    +          CR2
    +          Control register 2
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PECBYTE
    +              Packet error checking byte
    +              26
    +              1
    +            
    +            
    +              AUTOEND
    +              Automatic end mode (master
    +              mode)
    +              25
    +              1
    +            
    +            
    +              RELOAD
    +              NBYTES reload mode
    +              24
    +              1
    +            
    +            
    +              NBYTES
    +              Number of bytes
    +              16
    +              8
    +            
    +            
    +              NACK
    +              NACK generation (slave
    +              mode)
    +              15
    +              1
    +            
    +            
    +              STOP
    +              Stop generation (master
    +              mode)
    +              14
    +              1
    +            
    +            
    +              START
    +              Start generation
    +              13
    +              1
    +            
    +            
    +              HEAD10R
    +              10-bit address header only read
    +              direction (master receiver mode)
    +              12
    +              1
    +            
    +            
    +              ADD10
    +              10-bit addressing mode (master
    +              mode)
    +              11
    +              1
    +            
    +            
    +              RD_WRN
    +              Transfer direction (master
    +              mode)
    +              10
    +              1
    +            
    +            
    +              SADD
    +              Slave address bit (master
    +              mode)
    +              0
    +              10
    +            
    +          
    +        
    +        
    +          OAR1
    +          OAR1
    +          Own address register 1
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OA1
    +              Interface address
    +              0
    +              10
    +            
    +            
    +              OA1MODE
    +              Own Address 1 10-bit mode
    +              10
    +              1
    +            
    +            
    +              OA1EN
    +              Own Address 1 enable
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          OAR2
    +          OAR2
    +          Own address register 2
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OA2
    +              Interface address
    +              1
    +              7
    +            
    +            
    +              OA2MSK
    +              Own Address 2 masks
    +              8
    +              3
    +            
    +            
    +              OA2EN
    +              Own Address 2 enable
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          TIMINGR
    +          TIMINGR
    +          Timing register
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              SCLL
    +              SCL low period (master
    +              mode)
    +              0
    +              8
    +            
    +            
    +              SCLH
    +              SCL high period (master
    +              mode)
    +              8
    +              8
    +            
    +            
    +              SDADEL
    +              Data hold time
    +              16
    +              4
    +            
    +            
    +              SCLDEL
    +              Data setup time
    +              20
    +              4
    +            
    +            
    +              PRESC
    +              Timing prescaler
    +              28
    +              4
    +            
    +          
    +        
    +        
    +          TIMEOUTR
    +          TIMEOUTR
    +          Status register 1
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              TIMEOUTA
    +              Bus timeout A
    +              0
    +              12
    +            
    +            
    +              TIDLE
    +              Idle clock timeout
    +              detection
    +              12
    +              1
    +            
    +            
    +              TIMOUTEN
    +              Clock timeout enable
    +              15
    +              1
    +            
    +            
    +              TIMEOUTB
    +              Bus timeout B
    +              16
    +              12
    +            
    +            
    +              TEXTEN
    +              Extended clock timeout
    +              enable
    +              31
    +              1
    +            
    +          
    +        
    +        
    +          ISR
    +          ISR
    +          Interrupt and Status register
    +          0x18
    +          0x20
    +          0x00000001
    +          
    +            
    +              ADDCODE
    +              Address match code (Slave
    +              mode)
    +              17
    +              7
    +              read-only
    +            
    +            
    +              DIR
    +              Transfer direction (Slave
    +              mode)
    +              16
    +              1
    +              read-only
    +            
    +            
    +              BUSY
    +              Bus busy
    +              15
    +              1
    +              read-only
    +            
    +            
    +              ALERT
    +              SMBus alert
    +              13
    +              1
    +              read-only
    +            
    +            
    +              TIMEOUT
    +              Timeout or t_low detection
    +              flag
    +              12
    +              1
    +              read-only
    +            
    +            
    +              PECERR
    +              PEC Error in reception
    +              11
    +              1
    +              read-only
    +            
    +            
    +              OVR
    +              Overrun/Underrun (slave
    +              mode)
    +              10
    +              1
    +              read-only
    +            
    +            
    +              ARLO
    +              Arbitration lost
    +              9
    +              1
    +              read-only
    +            
    +            
    +              BERR
    +              Bus error
    +              8
    +              1
    +              read-only
    +            
    +            
    +              TCR
    +              Transfer Complete Reload
    +              7
    +              1
    +              read-only
    +            
    +            
    +              TC
    +              Transfer Complete (master
    +              mode)
    +              6
    +              1
    +              read-only
    +            
    +            
    +              STOPF
    +              Stop detection flag
    +              5
    +              1
    +              read-only
    +            
    +            
    +              NACKF
    +              Not acknowledge received
    +              flag
    +              4
    +              1
    +              read-only
    +            
    +            
    +              ADDR
    +              Address matched (slave
    +              mode)
    +              3
    +              1
    +              read-only
    +            
    +            
    +              RXNE
    +              Receive data register not empty
    +              (receivers)
    +              2
    +              1
    +              read-only
    +            
    +            
    +              TXIS
    +              Transmit interrupt status
    +              (transmitters)
    +              1
    +              1
    +              read-write
    +            
    +            
    +              TXE
    +              Transmit data register empty
    +              (transmitters)
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          ICR
    +          ICR
    +          Interrupt clear register
    +          0x1C
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              ALERTCF
    +              Alert flag clear
    +              13
    +              1
    +            
    +            
    +              TIMOUTCF
    +              Timeout detection flag
    +              clear
    +              12
    +              1
    +            
    +            
    +              PECCF
    +              PEC Error flag clear
    +              11
    +              1
    +            
    +            
    +              OVRCF
    +              Overrun/Underrun flag
    +              clear
    +              10
    +              1
    +            
    +            
    +              ARLOCF
    +              Arbitration lost flag
    +              clear
    +              9
    +              1
    +            
    +            
    +              BERRCF
    +              Bus error flag clear
    +              8
    +              1
    +            
    +            
    +              STOPCF
    +              Stop detection flag clear
    +              5
    +              1
    +            
    +            
    +              NACKCF
    +              Not Acknowledge flag clear
    +              4
    +              1
    +            
    +            
    +              ADDRCF
    +              Address Matched flag clear
    +              3
    +              1
    +            
    +          
    +        
    +        
    +          PECR
    +          PECR
    +          PEC register
    +          0x20
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              PEC
    +              Packet error checking
    +              register
    +              0
    +              8
    +            
    +          
    +        
    +        
    +          RXDR
    +          RXDR
    +          Receive data register
    +          0x24
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              RXDATA
    +              8-bit receive data
    +              0
    +              8
    +            
    +          
    +        
    +        
    +          TXDR
    +          TXDR
    +          Transmit data register
    +          0x28
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              TXDATA
    +              8-bit transmit data
    +              0
    +              8
    +            
    +          
    +        
    +      
    +    
    +    
    +      I2C2
    +      0x40005800
    +      
    +        I2C1
    +        I2C1 global interrupt
    +        23
    +      
    +      
    +        I2C2
    +        I2C2 global interrupt
    +        24
    +      
    +    
    +    
    +      I2C3
    +      0x40007800
    +    
    +    
    +      PWR
    +      Power control
    +      PWR
    +      0x40007000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        I2C3
    +        I2C3 global interrupt
    +        21
    +      
    +      
    +        
    +          CR
    +          CR
    +          power control register
    +          0x0
    +          0x20
    +          read-write
    +          0x00001000
    +          
    +            
    +              LPDS
    +              Low-power deep sleep
    +              0
    +              1
    +            
    +            
    +              PDDS
    +              Power down deepsleep
    +              1
    +              1
    +            
    +            
    +              CWUF
    +              Clear wakeup flag
    +              2
    +              1
    +            
    +            
    +              CSBF
    +              Clear standby flag
    +              3
    +              1
    +            
    +            
    +              PVDE
    +              Power voltage detector
    +              enable
    +              4
    +              1
    +            
    +            
    +              PLS
    +              PVD level selection
    +              5
    +              3
    +            
    +            
    +              DBP
    +              Disable backup domain write
    +              protection
    +              8
    +              1
    +            
    +            
    +              ULP
    +              Ultra-low-power mode
    +              9
    +              1
    +            
    +            
    +              FWU
    +              Fast wakeup
    +              10
    +              1
    +            
    +            
    +              VOS
    +              Voltage scaling range
    +              selection
    +              11
    +              2
    +            
    +            
    +              DS_EE_KOFF
    +              Deep sleep mode with Flash memory kept
    +              off
    +              13
    +              1
    +            
    +            
    +              LPRUN
    +              Low power run mode
    +              14
    +              1
    +            
    +          
    +        
    +        
    +          CSR
    +          CSR
    +          power control/status register
    +          0x4
    +          0x20
    +          0x00000000
    +          
    +            
    +              BRE
    +              Backup regulator enable
    +              9
    +              1
    +              read-write
    +            
    +            
    +              EWUP
    +              Enable WKUP pin
    +              8
    +              1
    +              read-write
    +            
    +            
    +              BRR
    +              Backup regulator ready
    +              3
    +              1
    +              read-only
    +            
    +            
    +              PVDO
    +              PVD output
    +              2
    +              1
    +              read-only
    +            
    +            
    +              SBF
    +              Standby flag
    +              1
    +              1
    +              read-only
    +            
    +            
    +              WUF
    +              Wakeup flag
    +              0
    +              1
    +              read-only
    +            
    +            
    +              VOSF
    +              Voltage Scaling select
    +              flag
    +              4
    +              1
    +              read-only
    +            
    +            
    +              REGLPF
    +              Regulator LP flag
    +              5
    +              1
    +              read-only
    +            
    +          
    +        
    +      
    +    
    +    
    +      Flash
    +      Flash
    +      Flash
    +      0x40022000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          ACR
    +          ACR
    +          Access control register
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              LATENCY
    +              Latency
    +              0
    +              1
    +            
    +            
    +              PRFTEN
    +              Prefetch enable
    +              1
    +              1
    +            
    +            
    +              SLEEP_PD
    +              Flash mode during Sleep
    +              3
    +              1
    +            
    +            
    +              RUN_PD
    +              Flash mode during Run
    +              4
    +              1
    +            
    +            
    +              DESAB_BUF
    +              Disable Buffer
    +              5
    +              1
    +            
    +            
    +              PRE_READ
    +              Pre-read data address
    +              6
    +              1
    +            
    +          
    +        
    +        
    +          PECR
    +          PECR
    +          Program/erase control register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000007
    +          
    +            
    +              PELOCK
    +              FLASH_PECR and data EEPROM
    +              lock
    +              0
    +              1
    +            
    +            
    +              PRGLOCK
    +              Program memory lock
    +              1
    +              1
    +            
    +            
    +              OPTLOCK
    +              Option bytes block lock
    +              2
    +              1
    +            
    +            
    +              PROG
    +              Program memory selection
    +              3
    +              1
    +            
    +            
    +              DATA
    +              Data EEPROM selection
    +              4
    +              1
    +            
    +            
    +              FTDW
    +              Fixed time data write for Byte, Half
    +              Word and Word programming
    +              8
    +              1
    +            
    +            
    +              ERASE
    +              Page or Double Word erase
    +              mode
    +              9
    +              1
    +            
    +            
    +              FPRG
    +              Half Page/Double Word programming
    +              mode
    +              10
    +              1
    +            
    +            
    +              PARALLELBANK
    +              Parallel bank mode
    +              15
    +              1
    +            
    +            
    +              EOPIE
    +              End of programming interrupt
    +              enable
    +              16
    +              1
    +            
    +            
    +              ERRIE
    +              Error interrupt enable
    +              17
    +              1
    +            
    +            
    +              OBL_LAUNCH
    +              Launch the option byte
    +              loading
    +              18
    +              1
    +            
    +          
    +        
    +        
    +          PDKEYR
    +          PDKEYR
    +          Power down key register
    +          0x8
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              PDKEYR
    +              RUN_PD in FLASH_ACR key
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          PEKEYR
    +          PEKEYR
    +          Program/erase key register
    +          0xC
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              PEKEYR
    +              FLASH_PEC and data EEPROM
    +              key
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          PRGKEYR
    +          PRGKEYR
    +          Program memory key register
    +          0x10
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              PRGKEYR
    +              Program memory key
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          OPTKEYR
    +          OPTKEYR
    +          Option byte key register
    +          0x14
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              OPTKEYR
    +              Option byte key
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          Status register
    +          0x18
    +          0x20
    +          0x00000004
    +          
    +            
    +              BSY
    +              Write/erase operations in
    +              progress
    +              0
    +              1
    +              read-only
    +            
    +            
    +              EOP
    +              End of operation
    +              1
    +              1
    +              read-only
    +            
    +            
    +              ENDHV
    +              End of high voltage
    +              2
    +              1
    +              read-only
    +            
    +            
    +              READY
    +              Flash memory module ready after low
    +              power mode
    +              3
    +              1
    +              read-only
    +            
    +            
    +              WRPERR
    +              Write protected error
    +              8
    +              1
    +              read-write
    +            
    +            
    +              PGAERR
    +              Programming alignment
    +              error
    +              9
    +              1
    +              read-write
    +            
    +            
    +              SIZERR
    +              Size error
    +              10
    +              1
    +              read-write
    +            
    +            
    +              OPTVERR
    +              Option validity error
    +              11
    +              1
    +              read-write
    +            
    +            
    +              RDERR
    +              RDERR
    +              14
    +              1
    +              read-write
    +            
    +            
    +              NOTZEROERR
    +              NOTZEROERR
    +              16
    +              1
    +              read-write
    +            
    +            
    +              FWWERR
    +              FWWERR
    +              17
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          OBR
    +          OBR
    +          Option byte register
    +          0x1C
    +          0x20
    +          read-only
    +          0x00F80000
    +          
    +            
    +              RDPRT
    +              Read protection
    +              0
    +              8
    +            
    +            
    +              BOR_LEV
    +              BOR_LEV
    +              16
    +              4
    +            
    +            
    +              SPRMOD
    +              Selection of protection mode of WPR
    +              bits
    +              8
    +              1
    +            
    +          
    +        
    +        
    +          WRPR
    +          WRPR
    +          Write protection register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              WRP
    +              Write protection
    +              0
    +              16
    +            
    +          
    +        
    +      
    +    
    +    
    +      EXTI
    +      External interrupt/event
    +      controller
    +      EXTI
    +      0x40010400
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        PVD
    +        PVD through EXTI line detection
    +        1
    +      
    +      
    +        EXTI0_1
    +        EXTI Line[1:0] interrupts
    +        5
    +      
    +      
    +        EXTI2_3
    +        EXTI Line[3:2] interrupts
    +        6
    +      
    +      
    +        EXTI4_15
    +        EXTI Line15 and EXTI4 interrupts
    +        7
    +      
    +      
    +        
    +          IMR
    +          IMR
    +          Interrupt mask register
    +          (EXTI_IMR)
    +          0x0
    +          0x20
    +          read-write
    +          0xFF840000
    +          
    +            
    +              IM0
    +              Interrupt Mask on line 0
    +              0
    +              1
    +            
    +            
    +              IM1
    +              Interrupt Mask on line 1
    +              1
    +              1
    +            
    +            
    +              IM2
    +              Interrupt Mask on line 2
    +              2
    +              1
    +            
    +            
    +              IM3
    +              Interrupt Mask on line 3
    +              3
    +              1
    +            
    +            
    +              IM4
    +              Interrupt Mask on line 4
    +              4
    +              1
    +            
    +            
    +              IM5
    +              Interrupt Mask on line 5
    +              5
    +              1
    +            
    +            
    +              IM6
    +              Interrupt Mask on line 6
    +              6
    +              1
    +            
    +            
    +              IM7
    +              Interrupt Mask on line 7
    +              7
    +              1
    +            
    +            
    +              IM8
    +              Interrupt Mask on line 8
    +              8
    +              1
    +            
    +            
    +              IM9
    +              Interrupt Mask on line 9
    +              9
    +              1
    +            
    +            
    +              IM10
    +              Interrupt Mask on line 10
    +              10
    +              1
    +            
    +            
    +              IM11
    +              Interrupt Mask on line 11
    +              11
    +              1
    +            
    +            
    +              IM12
    +              Interrupt Mask on line 12
    +              12
    +              1
    +            
    +            
    +              IM13
    +              Interrupt Mask on line 13
    +              13
    +              1
    +            
    +            
    +              IM14
    +              Interrupt Mask on line 14
    +              14
    +              1
    +            
    +            
    +              IM15
    +              Interrupt Mask on line 15
    +              15
    +              1
    +            
    +            
    +              IM16
    +              Interrupt Mask on line 16
    +              16
    +              1
    +            
    +            
    +              IM17
    +              Interrupt Mask on line 17
    +              17
    +              1
    +            
    +            
    +              IM18
    +              Interrupt Mask on line 18
    +              18
    +              1
    +            
    +            
    +              IM19
    +              Interrupt Mask on line 19
    +              19
    +              1
    +            
    +            
    +              IM20
    +              Interrupt Mask on line 20
    +              20
    +              1
    +            
    +            
    +              IM21
    +              Interrupt Mask on line 21
    +              21
    +              1
    +            
    +            
    +              IM22
    +              Interrupt Mask on line 22
    +              22
    +              1
    +            
    +            
    +              IM23
    +              Interrupt Mask on line 23
    +              23
    +              1
    +            
    +            
    +              IM24
    +              Interrupt Mask on line 24
    +              24
    +              1
    +            
    +            
    +              IM25
    +              Interrupt Mask on line 25
    +              25
    +              1
    +            
    +            
    +              IM26
    +              Interrupt Mask on line 27
    +              26
    +              1
    +            
    +            
    +              IM28
    +              Interrupt Mask on line 27
    +              28
    +              1
    +            
    +            
    +              IM29
    +              Interrupt Mask on line 27
    +              29
    +              1
    +            
    +          
    +        
    +        
    +          EMR
    +          EMR
    +          Event mask register (EXTI_EMR)
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              EM0
    +              Event Mask on line 0
    +              0
    +              1
    +            
    +            
    +              EM1
    +              Event Mask on line 1
    +              1
    +              1
    +            
    +            
    +              EM2
    +              Event Mask on line 2
    +              2
    +              1
    +            
    +            
    +              EM3
    +              Event Mask on line 3
    +              3
    +              1
    +            
    +            
    +              EM4
    +              Event Mask on line 4
    +              4
    +              1
    +            
    +            
    +              EM5
    +              Event Mask on line 5
    +              5
    +              1
    +            
    +            
    +              EM6
    +              Event Mask on line 6
    +              6
    +              1
    +            
    +            
    +              EM7
    +              Event Mask on line 7
    +              7
    +              1
    +            
    +            
    +              EM8
    +              Event Mask on line 8
    +              8
    +              1
    +            
    +            
    +              EM9
    +              Event Mask on line 9
    +              9
    +              1
    +            
    +            
    +              EM10
    +              Event Mask on line 10
    +              10
    +              1
    +            
    +            
    +              EM11
    +              Event Mask on line 11
    +              11
    +              1
    +            
    +            
    +              EM12
    +              Event Mask on line 12
    +              12
    +              1
    +            
    +            
    +              EM13
    +              Event Mask on line 13
    +              13
    +              1
    +            
    +            
    +              EM14
    +              Event Mask on line 14
    +              14
    +              1
    +            
    +            
    +              EM15
    +              Event Mask on line 15
    +              15
    +              1
    +            
    +            
    +              EM16
    +              Event Mask on line 16
    +              16
    +              1
    +            
    +            
    +              EM17
    +              Event Mask on line 17
    +              17
    +              1
    +            
    +            
    +              EM18
    +              Event Mask on line 18
    +              18
    +              1
    +            
    +            
    +              EM19
    +              Event Mask on line 19
    +              19
    +              1
    +            
    +            
    +              EM20
    +              Event Mask on line 20
    +              20
    +              1
    +            
    +            
    +              EM21
    +              Event Mask on line 21
    +              21
    +              1
    +            
    +            
    +              EM22
    +              Event Mask on line 22
    +              22
    +              1
    +            
    +            
    +              EM23
    +              Event Mask on line 23
    +              23
    +              1
    +            
    +            
    +              EM24
    +              Event Mask on line 24
    +              24
    +              1
    +            
    +            
    +              EM25
    +              Event Mask on line 25
    +              25
    +              1
    +            
    +            
    +              EM26
    +              Event Mask on line 26
    +              26
    +              1
    +            
    +            
    +              EM28
    +              Event Mask on line 28
    +              28
    +              1
    +            
    +            
    +              EM29
    +              Event Mask on line 29
    +              29
    +              1
    +            
    +          
    +        
    +        
    +          RTSR
    +          RTSR
    +          Rising Trigger selection register
    +          (EXTI_RTSR)
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              RT0
    +              Rising trigger event configuration of
    +              line 0
    +              0
    +              1
    +            
    +            
    +              RT1
    +              Rising trigger event configuration of
    +              line 1
    +              1
    +              1
    +            
    +            
    +              RT2
    +              Rising trigger event configuration of
    +              line 2
    +              2
    +              1
    +            
    +            
    +              RT3
    +              Rising trigger event configuration of
    +              line 3
    +              3
    +              1
    +            
    +            
    +              RT4
    +              Rising trigger event configuration of
    +              line 4
    +              4
    +              1
    +            
    +            
    +              RT5
    +              Rising trigger event configuration of
    +              line 5
    +              5
    +              1
    +            
    +            
    +              RT6
    +              Rising trigger event configuration of
    +              line 6
    +              6
    +              1
    +            
    +            
    +              RT7
    +              Rising trigger event configuration of
    +              line 7
    +              7
    +              1
    +            
    +            
    +              RT8
    +              Rising trigger event configuration of
    +              line 8
    +              8
    +              1
    +            
    +            
    +              RT9
    +              Rising trigger event configuration of
    +              line 9
    +              9
    +              1
    +            
    +            
    +              RT10
    +              Rising trigger event configuration of
    +              line 10
    +              10
    +              1
    +            
    +            
    +              RT11
    +              Rising trigger event configuration of
    +              line 11
    +              11
    +              1
    +            
    +            
    +              RT12
    +              Rising trigger event configuration of
    +              line 12
    +              12
    +              1
    +            
    +            
    +              RT13
    +              Rising trigger event configuration of
    +              line 13
    +              13
    +              1
    +            
    +            
    +              RT14
    +              Rising trigger event configuration of
    +              line 14
    +              14
    +              1
    +            
    +            
    +              RT15
    +              Rising trigger event configuration of
    +              line 15
    +              15
    +              1
    +            
    +            
    +              RT16
    +              Rising trigger event configuration of
    +              line 16
    +              16
    +              1
    +            
    +            
    +              RT17
    +              Rising trigger event configuration of
    +              line 17
    +              17
    +              1
    +            
    +            
    +              RT19
    +              Rising trigger event configuration of
    +              line 19
    +              19
    +              1
    +            
    +            
    +              RT20
    +              Rising trigger event configuration of
    +              line 20
    +              20
    +              1
    +            
    +            
    +              RT21
    +              Rising trigger event configuration of
    +              line 21
    +              21
    +              1
    +            
    +            
    +              RT22
    +              Rising trigger event configuration of
    +              line 22
    +              22
    +              1
    +            
    +          
    +        
    +        
    +          FTSR
    +          FTSR
    +          Falling Trigger selection register
    +          (EXTI_FTSR)
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              FT0
    +              Falling trigger event configuration of
    +              line 0
    +              0
    +              1
    +            
    +            
    +              FT1
    +              Falling trigger event configuration of
    +              line 1
    +              1
    +              1
    +            
    +            
    +              FT2
    +              Falling trigger event configuration of
    +              line 2
    +              2
    +              1
    +            
    +            
    +              FT3
    +              Falling trigger event configuration of
    +              line 3
    +              3
    +              1
    +            
    +            
    +              FT4
    +              Falling trigger event configuration of
    +              line 4
    +              4
    +              1
    +            
    +            
    +              FT5
    +              Falling trigger event configuration of
    +              line 5
    +              5
    +              1
    +            
    +            
    +              FT6
    +              Falling trigger event configuration of
    +              line 6
    +              6
    +              1
    +            
    +            
    +              FT7
    +              Falling trigger event configuration of
    +              line 7
    +              7
    +              1
    +            
    +            
    +              FT8
    +              Falling trigger event configuration of
    +              line 8
    +              8
    +              1
    +            
    +            
    +              FT9
    +              Falling trigger event configuration of
    +              line 9
    +              9
    +              1
    +            
    +            
    +              FT10
    +              Falling trigger event configuration of
    +              line 10
    +              10
    +              1
    +            
    +            
    +              FT11
    +              Falling trigger event configuration of
    +              line 11
    +              11
    +              1
    +            
    +            
    +              FT12
    +              Falling trigger event configuration of
    +              line 12
    +              12
    +              1
    +            
    +            
    +              FT13
    +              Falling trigger event configuration of
    +              line 13
    +              13
    +              1
    +            
    +            
    +              FT14
    +              Falling trigger event configuration of
    +              line 14
    +              14
    +              1
    +            
    +            
    +              FT15
    +              Falling trigger event configuration of
    +              line 15
    +              15
    +              1
    +            
    +            
    +              FT16
    +              Falling trigger event configuration of
    +              line 16
    +              16
    +              1
    +            
    +            
    +              FT17
    +              Falling trigger event configuration of
    +              line 17
    +              17
    +              1
    +            
    +            
    +              FT19
    +              Falling trigger event configuration of
    +              line 19
    +              19
    +              1
    +            
    +            
    +              FT20
    +              Falling trigger event configuration of
    +              line 20
    +              20
    +              1
    +            
    +            
    +              FT21
    +              Falling trigger event configuration of
    +              line 21
    +              21
    +              1
    +            
    +            
    +              FT22
    +              Falling trigger event configuration of
    +              line 22
    +              22
    +              1
    +            
    +          
    +        
    +        
    +          SWIER
    +          SWIER
    +          Software interrupt event register
    +          (EXTI_SWIER)
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              SWI0
    +              Software Interrupt on line
    +              0
    +              0
    +              1
    +            
    +            
    +              SWI1
    +              Software Interrupt on line
    +              1
    +              1
    +              1
    +            
    +            
    +              SWI2
    +              Software Interrupt on line
    +              2
    +              2
    +              1
    +            
    +            
    +              SWI3
    +              Software Interrupt on line
    +              3
    +              3
    +              1
    +            
    +            
    +              SWI4
    +              Software Interrupt on line
    +              4
    +              4
    +              1
    +            
    +            
    +              SWI5
    +              Software Interrupt on line
    +              5
    +              5
    +              1
    +            
    +            
    +              SWI6
    +              Software Interrupt on line
    +              6
    +              6
    +              1
    +            
    +            
    +              SWI7
    +              Software Interrupt on line
    +              7
    +              7
    +              1
    +            
    +            
    +              SWI8
    +              Software Interrupt on line
    +              8
    +              8
    +              1
    +            
    +            
    +              SWI9
    +              Software Interrupt on line
    +              9
    +              9
    +              1
    +            
    +            
    +              SWI10
    +              Software Interrupt on line
    +              10
    +              10
    +              1
    +            
    +            
    +              SWI11
    +              Software Interrupt on line
    +              11
    +              11
    +              1
    +            
    +            
    +              SWI12
    +              Software Interrupt on line
    +              12
    +              12
    +              1
    +            
    +            
    +              SWI13
    +              Software Interrupt on line
    +              13
    +              13
    +              1
    +            
    +            
    +              SWI14
    +              Software Interrupt on line
    +              14
    +              14
    +              1
    +            
    +            
    +              SWI15
    +              Software Interrupt on line
    +              15
    +              15
    +              1
    +            
    +            
    +              SWI16
    +              Software Interrupt on line
    +              16
    +              16
    +              1
    +            
    +            
    +              SWI17
    +              Software Interrupt on line
    +              17
    +              17
    +              1
    +            
    +            
    +              SWI19
    +              Software Interrupt on line
    +              19
    +              19
    +              1
    +            
    +            
    +              SWI20
    +              Software Interrupt on line
    +              20
    +              20
    +              1
    +            
    +            
    +              SWI21
    +              Software Interrupt on line
    +              21
    +              21
    +              1
    +            
    +            
    +              SWI22
    +              Software Interrupt on line
    +              22
    +              22
    +              1
    +            
    +          
    +        
    +        
    +          PR
    +          PR
    +          Pending register (EXTI_PR)
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PIF0
    +              Pending bit 0
    +              0
    +              1
    +            
    +            
    +              PIF1
    +              Pending bit 1
    +              1
    +              1
    +            
    +            
    +              PIF2
    +              Pending bit 2
    +              2
    +              1
    +            
    +            
    +              PIF3
    +              Pending bit 3
    +              3
    +              1
    +            
    +            
    +              PIF4
    +              Pending bit 4
    +              4
    +              1
    +            
    +            
    +              PIF5
    +              Pending bit 5
    +              5
    +              1
    +            
    +            
    +              PIF6
    +              Pending bit 6
    +              6
    +              1
    +            
    +            
    +              PIF7
    +              Pending bit 7
    +              7
    +              1
    +            
    +            
    +              PIF8
    +              Pending bit 8
    +              8
    +              1
    +            
    +            
    +              PIF9
    +              Pending bit 9
    +              9
    +              1
    +            
    +            
    +              PIF10
    +              Pending bit 10
    +              10
    +              1
    +            
    +            
    +              PIF11
    +              Pending bit 11
    +              11
    +              1
    +            
    +            
    +              PIF12
    +              Pending bit 12
    +              12
    +              1
    +            
    +            
    +              PIF13
    +              Pending bit 13
    +              13
    +              1
    +            
    +            
    +              PIF14
    +              Pending bit 14
    +              14
    +              1
    +            
    +            
    +              PIF15
    +              Pending bit 15
    +              15
    +              1
    +            
    +            
    +              PIF16
    +              Pending bit 16
    +              16
    +              1
    +            
    +            
    +              PIF17
    +              Pending bit 17
    +              17
    +              1
    +            
    +            
    +              PIF19
    +              Pending bit 19
    +              19
    +              1
    +            
    +            
    +              PIF20
    +              Pending bit 20
    +              20
    +              1
    +            
    +            
    +              PIF21
    +              Pending bit 21
    +              21
    +              1
    +            
    +            
    +              PIF22
    +              Pending bit 22
    +              22
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      ADC
    +      Analog-to-digital converter
    +      ADC
    +      0x40012400
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        EXTI2_3
    +        EXTI Line[3:2] interrupts
    +        6
    +      
    +      
    +        
    +          ISR
    +          ISR
    +          interrupt and status register
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ADRDY
    +              ADC ready
    +              0
    +              1
    +            
    +            
    +              EOSMP
    +              End of sampling flag
    +              1
    +              1
    +            
    +            
    +              EOC
    +              End of conversion flag
    +              2
    +              1
    +            
    +            
    +              EOS
    +              End of sequence flag
    +              3
    +              1
    +            
    +            
    +              OVR
    +              ADC overrun
    +              4
    +              1
    +            
    +            
    +              AWD
    +              Analog watchdog flag
    +              7
    +              1
    +            
    +            
    +              EOCAL
    +              End Of Calibration flag
    +              11
    +              1
    +            
    +          
    +        
    +        
    +          IER
    +          IER
    +          interrupt enable register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ADRDYIE
    +              ADC ready interrupt enable
    +              0
    +              1
    +            
    +            
    +              EOSMPIE
    +              End of sampling flag interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              EOCIE
    +              End of conversion interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              EOSIE
    +              End of conversion sequence interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              OVRIE
    +              Overrun interrupt enable
    +              4
    +              1
    +            
    +            
    +              AWDIE
    +              Analog watchdog interrupt
    +              enable
    +              7
    +              1
    +            
    +            
    +              EOCALIE
    +              End of calibration interrupt
    +              enable
    +              11
    +              1
    +            
    +          
    +        
    +        
    +          CR
    +          CR
    +          control register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ADEN
    +              ADC enable command
    +              0
    +              1
    +            
    +            
    +              ADDIS
    +              ADC disable command
    +              1
    +              1
    +            
    +            
    +              ADSTART
    +              ADC start conversion
    +              command
    +              2
    +              1
    +            
    +            
    +              ADSTP
    +              ADC stop conversion
    +              command
    +              4
    +              1
    +            
    +            
    +              ADVREGEN
    +              ADC Voltage Regulator
    +              Enable
    +              28
    +              1
    +            
    +            
    +              ADCAL
    +              ADC calibration
    +              31
    +              1
    +            
    +          
    +        
    +        
    +          CFGR1
    +          CFGR1
    +          configuration register 1
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AWDCH
    +              Analog watchdog channel
    +              selection
    +              26
    +              5
    +            
    +            
    +              AWDEN
    +              Analog watchdog enable
    +              23
    +              1
    +            
    +            
    +              AWDSGL
    +              Enable the watchdog on a single channel
    +              or on all channels
    +              22
    +              1
    +            
    +            
    +              DISCEN
    +              Discontinuous mode
    +              16
    +              1
    +            
    +            
    +              AUTOFF
    +              Auto-off mode
    +              15
    +              1
    +            
    +            
    +              AUTDLY
    +              Auto-delayed conversion
    +              mode
    +              14
    +              1
    +            
    +            
    +              CONT
    +              Single / continuous conversion
    +              mode
    +              13
    +              1
    +            
    +            
    +              OVRMOD
    +              Overrun management mode
    +              12
    +              1
    +            
    +            
    +              EXTEN
    +              External trigger enable and polarity
    +              selection
    +              10
    +              2
    +            
    +            
    +              EXTSEL
    +              External trigger selection
    +              6
    +              3
    +            
    +            
    +              ALIGN
    +              Data alignment
    +              5
    +              1
    +            
    +            
    +              RES
    +              Data resolution
    +              3
    +              2
    +            
    +            
    +              SCANDIR
    +              Scan sequence direction
    +              2
    +              1
    +            
    +            
    +              DMACFG
    +              Direct memery access
    +              configuration
    +              1
    +              1
    +            
    +            
    +              DMAEN
    +              Direct memory access
    +              enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CFGR2
    +          CFGR2
    +          configuration register 2
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OVSE
    +              Oversampler Enable
    +              0
    +              1
    +            
    +            
    +              OVSR
    +              Oversampling ratio
    +              2
    +              3
    +            
    +            
    +              OVSS
    +              Oversampling shift
    +              5
    +              4
    +            
    +            
    +              TOVS
    +              Triggered Oversampling
    +              9
    +              1
    +            
    +            
    +              CKMODE
    +              ADC clock mode
    +              30
    +              2
    +            
    +          
    +        
    +        
    +          SMPR
    +          SMPR
    +          sampling time register
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              SMPR
    +              Sampling time selection
    +              0
    +              3
    +            
    +          
    +        
    +        
    +          TR
    +          TR
    +          watchdog threshold register
    +          0x20
    +          0x20
    +          read-write
    +          0x0FFF0000
    +          
    +            
    +              HT
    +              Analog watchdog higher
    +              threshold
    +              16
    +              12
    +            
    +            
    +              LT
    +              Analog watchdog lower
    +              threshold
    +              0
    +              12
    +            
    +          
    +        
    +        
    +          CHSELR
    +          CHSELR
    +          channel selection register
    +          0x28
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CHSEL18
    +              Channel-x selection
    +              18
    +              1
    +            
    +            
    +              CHSEL17
    +              Channel-x selection
    +              17
    +              1
    +            
    +            
    +              CHSEL16
    +              Channel-x selection
    +              16
    +              1
    +            
    +            
    +              CHSEL15
    +              Channel-x selection
    +              15
    +              1
    +            
    +            
    +              CHSEL14
    +              Channel-x selection
    +              14
    +              1
    +            
    +            
    +              CHSEL13
    +              Channel-x selection
    +              13
    +              1
    +            
    +            
    +              CHSEL12
    +              Channel-x selection
    +              12
    +              1
    +            
    +            
    +              CHSEL11
    +              Channel-x selection
    +              11
    +              1
    +            
    +            
    +              CHSEL10
    +              Channel-x selection
    +              10
    +              1
    +            
    +            
    +              CHSEL9
    +              Channel-x selection
    +              9
    +              1
    +            
    +            
    +              CHSEL8
    +              Channel-x selection
    +              8
    +              1
    +            
    +            
    +              CHSEL7
    +              Channel-x selection
    +              7
    +              1
    +            
    +            
    +              CHSEL6
    +              Channel-x selection
    +              6
    +              1
    +            
    +            
    +              CHSEL5
    +              Channel-x selection
    +              5
    +              1
    +            
    +            
    +              CHSEL4
    +              Channel-x selection
    +              4
    +              1
    +            
    +            
    +              CHSEL3
    +              Channel-x selection
    +              3
    +              1
    +            
    +            
    +              CHSEL2
    +              Channel-x selection
    +              2
    +              1
    +            
    +            
    +              CHSEL1
    +              Channel-x selection
    +              1
    +              1
    +            
    +            
    +              CHSEL0
    +              Channel-x selection
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          DR
    +          DR
    +          data register
    +          0x40
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              DATA
    +              Converted data
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CALFACT
    +          CALFACT
    +          ADC Calibration factor
    +          0xB4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CALFACT
    +              Calibration factor
    +              0
    +              7
    +            
    +          
    +        
    +        
    +          CCR
    +          CCR
    +          ADC common configuration
    +          register
    +          0x308
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRESC
    +              ADC prescaler
    +              18
    +              4
    +            
    +            
    +              VREFEN
    +              VREFINT enable
    +              22
    +              1
    +            
    +            
    +              TSEN
    +              Temperature sensor enable
    +              23
    +              1
    +            
    +            
    +              LFMEN
    +              Low Frequency Mode enable
    +              25
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      DBGMCU
    +      Debug support
    +      DBGMCU
    +      0x40015800
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        ADC_COMP
    +        ADC and comparator 1 and 2
    +        12
    +      
    +      
    +        
    +          IDCODE
    +          IDCODE
    +          MCU Device ID Code Register
    +          0x0
    +          0x20
    +          read-only
    +          0x0
    +          
    +            
    +              DEV_ID
    +              Device Identifier
    +              0
    +              12
    +            
    +            
    +              REV_ID
    +              Revision Identifier
    +              16
    +              16
    +            
    +          
    +        
    +        
    +          CR
    +          CR
    +          Debug MCU Configuration
    +          Register
    +          0x4
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              DBG_STOP
    +              Debug Stop Mode
    +              1
    +              1
    +            
    +            
    +              DBG_STANDBY
    +              Debug Standby Mode
    +              2
    +              1
    +            
    +            
    +              DBG_SLEEP
    +              Debug Sleep Mode
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          APB1_FZ
    +          APB1_FZ
    +          APB Low Freeze Register
    +          0x8
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              DBG_TIMER2_STOP
    +              Debug Timer 2 stopped when Core is
    +              halted
    +              0
    +              1
    +            
    +            
    +              DBG_TIMER6_STOP
    +              Debug Timer 6 stopped when Core is
    +              halted
    +              4
    +              1
    +            
    +            
    +              DBG_RTC_STOP
    +              Debug RTC stopped when Core is
    +              halted
    +              10
    +              1
    +            
    +            
    +              DBG_WWDG_STOP
    +              Debug Window Wachdog stopped when Core
    +              is halted
    +              11
    +              1
    +            
    +            
    +              DBG_IWDG_STOP
    +              Debug Independent Wachdog stopped when
    +              Core is halted
    +              12
    +              1
    +            
    +            
    +              DBG_I2C1_STOP
    +              I2C1 SMBUS timeout mode stopped when
    +              core is halted
    +              21
    +              1
    +            
    +            
    +              DBG_I2C2_STOP
    +              I2C2 SMBUS timeout mode stopped when
    +              core is halted
    +              22
    +              1
    +            
    +            
    +              DBG_LPTIMER_STOP
    +              LPTIM1 counter stopped when core is
    +              halted
    +              31
    +              1
    +            
    +          
    +        
    +        
    +          APB2_FZ
    +          APB2_FZ
    +          APB High Freeze Register
    +          0xC
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              DBG_TIMER21_STOP
    +              Debug Timer 21 stopped when Core is
    +              halted
    +              2
    +              1
    +            
    +            
    +              DBG_TIMER22_STO
    +              Debug Timer 22 stopped when Core is
    +              halted
    +              6
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      TIM2
    +      General-purpose-timers
    +      TIM
    +      0x40000000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          CR1
    +          CR1
    +          control register 1
    +          0x0
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              CKD
    +              Clock division
    +              8
    +              2
    +            
    +            
    +              ARPE
    +              Auto-reload preload enable
    +              7
    +              1
    +            
    +            
    +              CMS
    +              Center-aligned mode
    +              selection
    +              5
    +              2
    +            
    +            
    +              DIR
    +              Direction
    +              4
    +              1
    +            
    +            
    +              OPM
    +              One-pulse mode
    +              3
    +              1
    +            
    +            
    +              URS
    +              Update request source
    +              2
    +              1
    +            
    +            
    +              UDIS
    +              Update disable
    +              1
    +              1
    +            
    +            
    +              CEN
    +              Counter enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CR2
    +          CR2
    +          control register 2
    +          0x4
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              TI1S
    +              TI1 selection
    +              7
    +              1
    +            
    +            
    +              MMS
    +              Master mode selection
    +              4
    +              3
    +            
    +            
    +              CCDS
    +              Capture/compare DMA
    +              selection
    +              3
    +              1
    +            
    +          
    +        
    +        
    +          SMCR
    +          SMCR
    +          slave mode control register
    +          0x8
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              ETP
    +              External trigger polarity
    +              15
    +              1
    +            
    +            
    +              ECE
    +              External clock enable
    +              14
    +              1
    +            
    +            
    +              ETPS
    +              External trigger prescaler
    +              12
    +              2
    +            
    +            
    +              ETF
    +              External trigger filter
    +              8
    +              4
    +            
    +            
    +              MSM
    +              Master/Slave mode
    +              7
    +              1
    +            
    +            
    +              TS
    +              Trigger selection
    +              4
    +              3
    +            
    +            
    +              SMS
    +              Slave mode selection
    +              0
    +              3
    +            
    +          
    +        
    +        
    +          DIER
    +          DIER
    +          DMA/Interrupt enable register
    +          0xC
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              TDE
    +              Trigger DMA request enable
    +              14
    +              1
    +            
    +            
    +              CC4DE
    +              Capture/Compare 4 DMA request
    +              enable
    +              12
    +              1
    +            
    +            
    +              CC3DE
    +              Capture/Compare 3 DMA request
    +              enable
    +              11
    +              1
    +            
    +            
    +              CC2DE
    +              Capture/Compare 2 DMA request
    +              enable
    +              10
    +              1
    +            
    +            
    +              CC1DE
    +              Capture/Compare 1 DMA request
    +              enable
    +              9
    +              1
    +            
    +            
    +              UDE
    +              Update DMA request enable
    +              8
    +              1
    +            
    +            
    +              TIE
    +              Trigger interrupt enable
    +              6
    +              1
    +            
    +            
    +              CC4IE
    +              Capture/Compare 4 interrupt
    +              enable
    +              4
    +              1
    +            
    +            
    +              CC3IE
    +              Capture/Compare 3 interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              CC2IE
    +              Capture/Compare 2 interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              CC1IE
    +              Capture/Compare 1 interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              UIE
    +              Update interrupt enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          status register
    +          0x10
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              CC4OF
    +              Capture/Compare 4 overcapture
    +              flag
    +              12
    +              1
    +            
    +            
    +              CC3OF
    +              Capture/Compare 3 overcapture
    +              flag
    +              11
    +              1
    +            
    +            
    +              CC2OF
    +              Capture/compare 2 overcapture
    +              flag
    +              10
    +              1
    +            
    +            
    +              CC1OF
    +              Capture/Compare 1 overcapture
    +              flag
    +              9
    +              1
    +            
    +            
    +              TIF
    +              Trigger interrupt flag
    +              6
    +              1
    +            
    +            
    +              CC4IF
    +              Capture/Compare 4 interrupt
    +              flag
    +              4
    +              1
    +            
    +            
    +              CC3IF
    +              Capture/Compare 3 interrupt
    +              flag
    +              3
    +              1
    +            
    +            
    +              CC2IF
    +              Capture/Compare 2 interrupt
    +              flag
    +              2
    +              1
    +            
    +            
    +              CC1IF
    +              Capture/compare 1 interrupt
    +              flag
    +              1
    +              1
    +            
    +            
    +              UIF
    +              Update interrupt flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          EGR
    +          EGR
    +          event generation register
    +          0x14
    +          0x20
    +          write-only
    +          0x0000
    +          
    +            
    +              TG
    +              Trigger generation
    +              6
    +              1
    +            
    +            
    +              CC4G
    +              Capture/compare 4
    +              generation
    +              4
    +              1
    +            
    +            
    +              CC3G
    +              Capture/compare 3
    +              generation
    +              3
    +              1
    +            
    +            
    +              CC2G
    +              Capture/compare 2
    +              generation
    +              2
    +              1
    +            
    +            
    +              CC1G
    +              Capture/compare 1
    +              generation
    +              1
    +              1
    +            
    +            
    +              UG
    +              Update generation
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CCMR1_Output
    +          CCMR1_Output
    +          capture/compare mode register 1 (output
    +          mode)
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OC2CE
    +              Output compare 2 clear
    +              enable
    +              15
    +              1
    +            
    +            
    +              OC2M
    +              Output compare 2 mode
    +              12
    +              3
    +            
    +            
    +              OC2PE
    +              Output compare 2 preload
    +              enable
    +              11
    +              1
    +            
    +            
    +              OC2FE
    +              Output compare 2 fast
    +              enable
    +              10
    +              1
    +            
    +            
    +              CC2S
    +              Capture/Compare 2
    +              selection
    +              8
    +              2
    +            
    +            
    +              OC1CE
    +              Output compare 1 clear
    +              enable
    +              7
    +              1
    +            
    +            
    +              OC1M
    +              Output compare 1 mode
    +              4
    +              3
    +            
    +            
    +              OC1PE
    +              Output compare 1 preload
    +              enable
    +              3
    +              1
    +            
    +            
    +              OC1FE
    +              Output compare 1 fast
    +              enable
    +              2
    +              1
    +            
    +            
    +              CC1S
    +              Capture/Compare 1
    +              selection
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          CCMR1_Input
    +          CCMR1_Input
    +          capture/compare mode register 1 (input
    +          mode)
    +          CCMR1_Output
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              IC2F
    +              Input capture 2 filter
    +              12
    +              4
    +            
    +            
    +              IC2PSC
    +              Input capture 2 prescaler
    +              10
    +              2
    +            
    +            
    +              CC2S
    +              Capture/compare 2
    +              selection
    +              8
    +              2
    +            
    +            
    +              IC1F
    +              Input capture 1 filter
    +              4
    +              4
    +            
    +            
    +              IC1PSC
    +              Input capture 1 prescaler
    +              2
    +              2
    +            
    +            
    +              CC1S
    +              Capture/Compare 1
    +              selection
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          CCMR2_Output
    +          CCMR2_Output
    +          capture/compare mode register 2 (output
    +          mode)
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OC4CE
    +              Output compare 4 clear
    +              enable
    +              15
    +              1
    +            
    +            
    +              OC4M
    +              Output compare 4 mode
    +              12
    +              3
    +            
    +            
    +              OC4PE
    +              Output compare 4 preload
    +              enable
    +              11
    +              1
    +            
    +            
    +              OC4FE
    +              Output compare 4 fast
    +              enable
    +              10
    +              1
    +            
    +            
    +              CC4S
    +              Capture/Compare 4
    +              selection
    +              8
    +              2
    +            
    +            
    +              OC3CE
    +              Output compare 3 clear
    +              enable
    +              7
    +              1
    +            
    +            
    +              OC3M
    +              Output compare 3 mode
    +              4
    +              3
    +            
    +            
    +              OC3PE
    +              Output compare 3 preload
    +              enable
    +              3
    +              1
    +            
    +            
    +              OC3FE
    +              Output compare 3 fast
    +              enable
    +              2
    +              1
    +            
    +            
    +              CC3S
    +              Capture/Compare 3
    +              selection
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          CCMR2_Input
    +          CCMR2_Input
    +          capture/compare mode register 2 (input
    +          mode)
    +          CCMR2_Output
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              IC4F
    +              Input capture 4 filter
    +              12
    +              4
    +            
    +            
    +              IC4PSC
    +              Input capture 4 prescaler
    +              10
    +              2
    +            
    +            
    +              CC4S
    +              Capture/Compare 4
    +              selection
    +              8
    +              2
    +            
    +            
    +              IC3F
    +              Input capture 3 filter
    +              4
    +              4
    +            
    +            
    +              IC3PSC
    +              Input capture 3 prescaler
    +              2
    +              2
    +            
    +            
    +              CC3S
    +              Capture/Compare 3
    +              selection
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          CCER
    +          CCER
    +          capture/compare enable
    +          register
    +          0x20
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              CC4NP
    +              Capture/Compare 4 output
    +              Polarity
    +              15
    +              1
    +            
    +            
    +              CC4P
    +              Capture/Compare 3 output
    +              Polarity
    +              13
    +              1
    +            
    +            
    +              CC4E
    +              Capture/Compare 4 output
    +              enable
    +              12
    +              1
    +            
    +            
    +              CC3NP
    +              Capture/Compare 3 output
    +              Polarity
    +              11
    +              1
    +            
    +            
    +              CC3P
    +              Capture/Compare 3 output
    +              Polarity
    +              9
    +              1
    +            
    +            
    +              CC3E
    +              Capture/Compare 3 output
    +              enable
    +              8
    +              1
    +            
    +            
    +              CC2NP
    +              Capture/Compare 2 output
    +              Polarity
    +              7
    +              1
    +            
    +            
    +              CC2P
    +              Capture/Compare 2 output
    +              Polarity
    +              5
    +              1
    +            
    +            
    +              CC2E
    +              Capture/Compare 2 output
    +              enable
    +              4
    +              1
    +            
    +            
    +              CC1NP
    +              Capture/Compare 1 output
    +              Polarity
    +              3
    +              1
    +            
    +            
    +              CC1P
    +              Capture/Compare 1 output
    +              Polarity
    +              1
    +              1
    +            
    +            
    +              CC1E
    +              Capture/Compare 1 output
    +              enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNT
    +          CNT
    +          counter
    +          0x24
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CNT_H
    +              High counter value (TIM2
    +              only)
    +              16
    +              16
    +            
    +            
    +              CNT_L
    +              Low counter value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          PSC
    +          PSC
    +          prescaler
    +          0x28
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              PSC
    +              Prescaler value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          ARR
    +          ARR
    +          auto-reload register
    +          0x2C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ARR_H
    +              High Auto-reload value (TIM2
    +              only)
    +              16
    +              16
    +            
    +            
    +              ARR_L
    +              Low Auto-reload value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CCR1
    +          CCR1
    +          capture/compare register 1
    +          0x34
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CCR1_H
    +              High Capture/Compare 1 value (TIM2
    +              only)
    +              16
    +              16
    +            
    +            
    +              CCR1_L
    +              Low Capture/Compare 1
    +              value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CCR2
    +          CCR2
    +          capture/compare register 2
    +          0x38
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CCR2_H
    +              High Capture/Compare 2 value (TIM2
    +              only)
    +              16
    +              16
    +            
    +            
    +              CCR2_L
    +              Low Capture/Compare 2
    +              value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CCR3
    +          CCR3
    +          capture/compare register 3
    +          0x3C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CCR3_H
    +              High Capture/Compare value (TIM2
    +              only)
    +              16
    +              16
    +            
    +            
    +              CCR3_L
    +              Low Capture/Compare value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CCR4
    +          CCR4
    +          capture/compare register 4
    +          0x40
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CCR4_H
    +              High Capture/Compare value (TIM2
    +              only)
    +              16
    +              16
    +            
    +            
    +              CCR4_L
    +              Low Capture/Compare value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          DCR
    +          DCR
    +          DMA control register
    +          0x48
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              DBL
    +              DMA burst length
    +              8
    +              5
    +            
    +            
    +              DBA
    +              DMA base address
    +              0
    +              5
    +            
    +          
    +        
    +        
    +          DMAR
    +          DMAR
    +          DMA address for full transfer
    +          0x4C
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              DMAB
    +              DMA register for burst
    +              accesses
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          OR
    +          OR
    +          TIM2 option register
    +          0x50
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              ETR_RMP
    +              Timer2 ETR remap
    +              0
    +              3
    +            
    +            
    +              TI4_RMP
    +              Internal trigger
    +              3
    +              2
    +            
    +          
    +        
    +      
    +    
    +    
    +      TIM3
    +      0x40000400
    +      
    +        TIM2
    +        TIM2 global interrupt
    +        15
    +      
    +    
    +    
    +      TIM6
    +      Basic-timers
    +      TIM
    +      0x40001000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        TIM3
    +        TIM3 global interrupt
    +        16
    +      
    +      
    +        
    +          CR1
    +          CR1
    +          control register 1
    +          0x0
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              ARPE
    +              Auto-reload preload enable
    +              7
    +              1
    +            
    +            
    +              OPM
    +              One-pulse mode
    +              3
    +              1
    +            
    +            
    +              URS
    +              Update request source
    +              2
    +              1
    +            
    +            
    +              UDIS
    +              Update disable
    +              1
    +              1
    +            
    +            
    +              CEN
    +              Counter enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CR2
    +          CR2
    +          control register 2
    +          0x4
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              MMS
    +              Master mode selection
    +              4
    +              3
    +            
    +          
    +        
    +        
    +          DIER
    +          DIER
    +          DMA/Interrupt enable register
    +          0xC
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              UDE
    +              Update DMA request enable
    +              8
    +              1
    +            
    +            
    +              UIE
    +              Update interrupt enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          status register
    +          0x10
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              UIF
    +              Update interrupt flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          EGR
    +          EGR
    +          event generation register
    +          0x14
    +          0x20
    +          write-only
    +          0x0000
    +          
    +            
    +              UG
    +              Update generation
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNT
    +          CNT
    +          counter
    +          0x24
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CNT
    +              Low counter value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          PSC
    +          PSC
    +          prescaler
    +          0x28
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              PSC
    +              Prescaler value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          ARR
    +          ARR
    +          auto-reload register
    +          0x2C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ARR
    +              Low Auto-reload value
    +              0
    +              16
    +            
    +          
    +        
    +      
    +    
    +    
    +      TIM7
    +      0x40001400
    +      
    +        TIM6_DAC
    +        TIM6 global interrupt and DAC
    +        17
    +      
    +    
    +    
    +      TIM21
    +      General-purpose-timers
    +      TIM
    +      0x40010800
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        TIM7
    +        TIM7 global interrupt and DAC
    +        18
    +      
    +      
    +        
    +          CR1
    +          CR1
    +          control register 1
    +          0x0
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              CEN
    +              Counter enable
    +              0
    +              1
    +            
    +            
    +              UDIS
    +              Update disable
    +              1
    +              1
    +            
    +            
    +              URS
    +              Update request source
    +              2
    +              1
    +            
    +            
    +              OPM
    +              One-pulse mode
    +              3
    +              1
    +            
    +            
    +              DIR
    +              Direction
    +              4
    +              1
    +            
    +            
    +              CMS
    +              Center-aligned mode
    +              selection
    +              5
    +              2
    +            
    +            
    +              ARPE
    +              Auto-reload preload enable
    +              7
    +              1
    +            
    +            
    +              CKD
    +              Clock division
    +              8
    +              2
    +            
    +          
    +        
    +        
    +          CR2
    +          CR2
    +          control register 2
    +          0x4
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              MMS
    +              Master mode selection
    +              4
    +              3
    +            
    +          
    +        
    +        
    +          SMCR
    +          SMCR
    +          slave mode control register
    +          0x8
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              SMS
    +              Slave mode selection
    +              0
    +              3
    +            
    +            
    +              TS
    +              Trigger selection
    +              4
    +              3
    +            
    +            
    +              MSM
    +              Master/Slave mode
    +              7
    +              1
    +            
    +            
    +              ETF
    +              External trigger filter
    +              8
    +              4
    +            
    +            
    +              ETPS
    +              External trigger prescaler
    +              12
    +              2
    +            
    +            
    +              ECE
    +              External clock enable
    +              14
    +              1
    +            
    +            
    +              ETP
    +              External trigger polarity
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          DIER
    +          DIER
    +          DMA/Interrupt enable register
    +          0xC
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              TIE
    +              Trigger interrupt enable
    +              6
    +              1
    +            
    +            
    +              CC2IE
    +              Capture/Compare 2 interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              CC1IE
    +              Capture/Compare 1 interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              UIE
    +              Update interrupt enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          status register
    +          0x10
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              CC2OF
    +              Capture/compare 2 overcapture
    +              flag
    +              10
    +              1
    +            
    +            
    +              CC1OF
    +              Capture/Compare 1 overcapture
    +              flag
    +              9
    +              1
    +            
    +            
    +              TIF
    +              Trigger interrupt flag
    +              6
    +              1
    +            
    +            
    +              CC2IF
    +              Capture/Compare 2 interrupt
    +              flag
    +              2
    +              1
    +            
    +            
    +              CC1IF
    +              Capture/compare 1 interrupt
    +              flag
    +              1
    +              1
    +            
    +            
    +              UIF
    +              Update interrupt flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          EGR
    +          EGR
    +          event generation register
    +          0x14
    +          0x20
    +          write-only
    +          0x0000
    +          
    +            
    +              TG
    +              Trigger generation
    +              6
    +              1
    +            
    +            
    +              CC2G
    +              Capture/compare 2
    +              generation
    +              2
    +              1
    +            
    +            
    +              CC1G
    +              Capture/compare 1
    +              generation
    +              1
    +              1
    +            
    +            
    +              UG
    +              Update generation
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CCMR1_Output
    +          CCMR1_Output
    +          capture/compare mode register (output
    +          mode)
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OC2M
    +              Output Compare 2 mode
    +              12
    +              3
    +            
    +            
    +              OC2PE
    +              Output Compare 2 preload
    +              enable
    +              11
    +              1
    +            
    +            
    +              OC2FE
    +              Output Compare 2 fast
    +              enable
    +              10
    +              1
    +            
    +            
    +              CC2S
    +              Capture/Compare 2
    +              selection
    +              8
    +              2
    +            
    +            
    +              OC1M
    +              Output Compare 1 mode
    +              4
    +              3
    +            
    +            
    +              OC1PE
    +              Output Compare 1 preload
    +              enable
    +              3
    +              1
    +            
    +            
    +              OC1FE
    +              Output Compare 1 fast
    +              enable
    +              2
    +              1
    +            
    +            
    +              CC1S
    +              Capture/Compare 1
    +              selection
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          CCMR1_Input
    +          CCMR1_Input
    +          capture/compare mode register 1 (input
    +          mode)
    +          CCMR1_Output
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              IC2F
    +              Input capture 2 filter
    +              12
    +              4
    +            
    +            
    +              IC2PSC
    +              Input capture 2 prescaler
    +              10
    +              2
    +            
    +            
    +              CC2S
    +              Capture/Compare 2
    +              selection
    +              8
    +              2
    +            
    +            
    +              IC1F
    +              Input capture 1 filter
    +              4
    +              4
    +            
    +            
    +              IC1PSC
    +              Input capture 1 prescaler
    +              2
    +              2
    +            
    +            
    +              CC1S
    +              Capture/Compare 1
    +              selection
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          CCER
    +          CCER
    +          capture/compare enable
    +          register
    +          0x20
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              CC2NP
    +              Capture/Compare 2 output
    +              Polarity
    +              7
    +              1
    +            
    +            
    +              CC2P
    +              Capture/Compare 2 output
    +              Polarity
    +              5
    +              1
    +            
    +            
    +              CC2E
    +              Capture/Compare 2 output
    +              enable
    +              4
    +              1
    +            
    +            
    +              CC1NP
    +              Capture/Compare 1 output
    +              Polarity
    +              3
    +              1
    +            
    +            
    +              CC1P
    +              Capture/Compare 1 output
    +              Polarity
    +              1
    +              1
    +            
    +            
    +              CC1E
    +              Capture/Compare 1 output
    +              enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNT
    +          CNT
    +          counter
    +          0x24
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CNT
    +              counter value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          PSC
    +          PSC
    +          prescaler
    +          0x28
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              PSC
    +              Prescaler value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          ARR
    +          ARR
    +          auto-reload register
    +          0x2C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ARR
    +              Auto-reload value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CCR1
    +          CCR1
    +          capture/compare register 1
    +          0x34
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CCR1
    +              Capture/Compare 1 value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CCR2
    +          CCR2
    +          capture/compare register 2
    +          0x38
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CCR2
    +              Capture/Compare 2 value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          OR
    +          OR
    +          TIM21 option register
    +          0x50
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ETR_RMP
    +              Timer21 ETR remap
    +              0
    +              2
    +            
    +            
    +              TI1_RMP
    +              Timer21 TI1
    +              2
    +              3
    +            
    +            
    +              TI2_RMP
    +              Timer21 TI2
    +              5
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      TIM22
    +      General-purpose-timers
    +      TIM
    +      0x40011400
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        TIM21
    +        TIMER21 global interrupt
    +        20
    +      
    +      
    +        
    +          CR1
    +          CR1
    +          control register 1
    +          0x0
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              CEN
    +              Counter enable
    +              0
    +              1
    +            
    +            
    +              UDIS
    +              Update disable
    +              1
    +              1
    +            
    +            
    +              URS
    +              Update request source
    +              2
    +              1
    +            
    +            
    +              OPM
    +              One-pulse mode
    +              3
    +              1
    +            
    +            
    +              DIR
    +              Direction
    +              4
    +              1
    +            
    +            
    +              CMS
    +              Center-aligned mode
    +              selection
    +              5
    +              2
    +            
    +            
    +              ARPE
    +              Auto-reload preload enable
    +              7
    +              1
    +            
    +            
    +              CKD
    +              Clock division
    +              8
    +              2
    +            
    +          
    +        
    +        
    +          CR2
    +          CR2
    +          control register 2
    +          0x4
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              MMS
    +              Master mode selection
    +              4
    +              3
    +            
    +          
    +        
    +        
    +          SMCR
    +          SMCR
    +          slave mode control register
    +          0x8
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              SMS
    +              Slave mode selection
    +              0
    +              3
    +            
    +            
    +              TS
    +              Trigger selection
    +              4
    +              3
    +            
    +            
    +              MSM
    +              Master/Slave mode
    +              7
    +              1
    +            
    +            
    +              ETF
    +              External trigger filter
    +              8
    +              4
    +            
    +            
    +              ETPS
    +              External trigger prescaler
    +              12
    +              2
    +            
    +            
    +              ECE
    +              External clock enable
    +              14
    +              1
    +            
    +            
    +              ETP
    +              External trigger polarity
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          DIER
    +          DIER
    +          DMA/Interrupt enable register
    +          0xC
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              TIE
    +              Trigger interrupt enable
    +              6
    +              1
    +            
    +            
    +              CC2IE
    +              Capture/Compare 2 interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              CC1IE
    +              Capture/Compare 1 interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              UIE
    +              Update interrupt enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          status register
    +          0x10
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              CC2OF
    +              Capture/compare 2 overcapture
    +              flag
    +              10
    +              1
    +            
    +            
    +              CC1OF
    +              Capture/Compare 1 overcapture
    +              flag
    +              9
    +              1
    +            
    +            
    +              TIF
    +              Trigger interrupt flag
    +              6
    +              1
    +            
    +            
    +              CC2IF
    +              Capture/Compare 2 interrupt
    +              flag
    +              2
    +              1
    +            
    +            
    +              CC1IF
    +              Capture/compare 1 interrupt
    +              flag
    +              1
    +              1
    +            
    +            
    +              UIF
    +              Update interrupt flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          EGR
    +          EGR
    +          event generation register
    +          0x14
    +          0x20
    +          write-only
    +          0x0000
    +          
    +            
    +              TG
    +              Trigger generation
    +              6
    +              1
    +            
    +            
    +              CC2G
    +              Capture/compare 2
    +              generation
    +              2
    +              1
    +            
    +            
    +              CC1G
    +              Capture/compare 1
    +              generation
    +              1
    +              1
    +            
    +            
    +              UG
    +              Update generation
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CCMR1_Output
    +          CCMR1_Output
    +          capture/compare mode register (output
    +          mode)
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OC2M
    +              Output Compare 2 mode
    +              12
    +              3
    +            
    +            
    +              OC2PE
    +              Output Compare 2 preload
    +              enable
    +              11
    +              1
    +            
    +            
    +              OC2FE
    +              Output Compare 2 fast
    +              enable
    +              10
    +              1
    +            
    +            
    +              CC2S
    +              Capture/Compare 2
    +              selection
    +              8
    +              2
    +            
    +            
    +              OC1M
    +              Output Compare 1 mode
    +              4
    +              3
    +            
    +            
    +              OC1PE
    +              Output Compare 1 preload
    +              enable
    +              3
    +              1
    +            
    +            
    +              OC1FE
    +              Output Compare 1 fast
    +              enable
    +              2
    +              1
    +            
    +            
    +              CC1S
    +              Capture/Compare 1
    +              selection
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          CCMR1_Input
    +          CCMR1_Input
    +          capture/compare mode register 1 (input
    +          mode)
    +          CCMR1_Output
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              IC2F
    +              Input capture 2 filter
    +              12
    +              4
    +            
    +            
    +              IC2PSC
    +              Input capture 2 prescaler
    +              10
    +              2
    +            
    +            
    +              CC2S
    +              Capture/Compare 2
    +              selection
    +              8
    +              2
    +            
    +            
    +              IC1F
    +              Input capture 1 filter
    +              4
    +              4
    +            
    +            
    +              IC1PSC
    +              Input capture 1 prescaler
    +              2
    +              2
    +            
    +            
    +              CC1S
    +              Capture/Compare 1
    +              selection
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          CCER
    +          CCER
    +          capture/compare enable
    +          register
    +          0x20
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              CC2NP
    +              Capture/Compare 2 output
    +              Polarity
    +              7
    +              1
    +            
    +            
    +              CC2P
    +              Capture/Compare 2 output
    +              Polarity
    +              5
    +              1
    +            
    +            
    +              CC2E
    +              Capture/Compare 2 output
    +              enable
    +              4
    +              1
    +            
    +            
    +              CC1NP
    +              Capture/Compare 1 output
    +              Polarity
    +              3
    +              1
    +            
    +            
    +              CC1P
    +              Capture/Compare 1 output
    +              Polarity
    +              1
    +              1
    +            
    +            
    +              CC1E
    +              Capture/Compare 1 output
    +              enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNT
    +          CNT
    +          counter
    +          0x24
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CNT
    +              counter value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          PSC
    +          PSC
    +          prescaler
    +          0x28
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              PSC
    +              Prescaler value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          ARR
    +          ARR
    +          auto-reload register
    +          0x2C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ARR
    +              Auto-reload value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CCR1
    +          CCR1
    +          capture/compare register 1
    +          0x34
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CCR1
    +              Capture/Compare 1 value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CCR2
    +          CCR2
    +          capture/compare register 2
    +          0x38
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CCR2
    +              Capture/Compare 2 value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          OR
    +          OR
    +          TIM22 option register
    +          0x50
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ETR_RMP
    +              Timer22 ETR remap
    +              0
    +              2
    +            
    +            
    +              TI1_RMP
    +              Timer22 TI1
    +              2
    +              2
    +            
    +          
    +        
    +      
    +    
    +    
    +      LPUSART1
    +      Universal synchronous asynchronous receiver
    +      transmitter
    +      USART
    +      0x40004800
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        TIM22
    +        TIMER22 global interrupt
    +        22
    +      
    +      
    +        
    +          CR1
    +          CR1
    +          Control register 1
    +          0x0
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              M1
    +              Word length
    +              28
    +              1
    +            
    +            
    +              DEAT4
    +              Driver Enable assertion
    +              time
    +              25
    +              1
    +            
    +            
    +              DEAT3
    +              DEAT3
    +              24
    +              1
    +            
    +            
    +              DEAT2
    +              DEAT2
    +              23
    +              1
    +            
    +            
    +              DEAT1
    +              DEAT1
    +              22
    +              1
    +            
    +            
    +              DEAT0
    +              DEAT0
    +              21
    +              1
    +            
    +            
    +              DEDT4
    +              Driver Enable de-assertion
    +              time
    +              20
    +              1
    +            
    +            
    +              DEDT3
    +              DEDT3
    +              19
    +              1
    +            
    +            
    +              DEDT2
    +              DEDT2
    +              18
    +              1
    +            
    +            
    +              DEDT1
    +              DEDT1
    +              17
    +              1
    +            
    +            
    +              DEDT0
    +              DEDT0
    +              16
    +              1
    +            
    +            
    +              CMIE
    +              Character match interrupt
    +              enable
    +              14
    +              1
    +            
    +            
    +              MME
    +              Mute mode enable
    +              13
    +              1
    +            
    +            
    +              M0
    +              Word length
    +              12
    +              1
    +            
    +            
    +              WAKE
    +              Receiver wakeup method
    +              11
    +              1
    +            
    +            
    +              PCE
    +              Parity control enable
    +              10
    +              1
    +            
    +            
    +              PS
    +              Parity selection
    +              9
    +              1
    +            
    +            
    +              PEIE
    +              PE interrupt enable
    +              8
    +              1
    +            
    +            
    +              TXEIE
    +              interrupt enable
    +              7
    +              1
    +            
    +            
    +              TCIE
    +              Transmission complete interrupt
    +              enable
    +              6
    +              1
    +            
    +            
    +              RXNEIE
    +              RXNE interrupt enable
    +              5
    +              1
    +            
    +            
    +              IDLEIE
    +              IDLE interrupt enable
    +              4
    +              1
    +            
    +            
    +              TE
    +              Transmitter enable
    +              3
    +              1
    +            
    +            
    +              RE
    +              Receiver enable
    +              2
    +              1
    +            
    +            
    +              UESM
    +              USART enable in Stop mode
    +              1
    +              1
    +            
    +            
    +              UE
    +              USART enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CR2
    +          CR2
    +          Control register 2
    +          0x4
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              ADD4_7
    +              Address of the USART node
    +              28
    +              4
    +            
    +            
    +              ADD0_3
    +              Address of the USART node
    +              24
    +              4
    +            
    +            
    +              MSBFIRST
    +              Most significant bit first
    +              19
    +              1
    +            
    +            
    +              TAINV
    +              Binary data inversion
    +              18
    +              1
    +            
    +            
    +              TXINV
    +              TX pin active level
    +              inversion
    +              17
    +              1
    +            
    +            
    +              RXINV
    +              RX pin active level
    +              inversion
    +              16
    +              1
    +            
    +            
    +              SWAP
    +              Swap TX/RX pins
    +              15
    +              1
    +            
    +            
    +              STOP
    +              STOP bits
    +              12
    +              2
    +            
    +            
    +              CLKEN
    +              Clock enable
    +              11
    +              1
    +            
    +            
    +              ADDM7
    +              7-bit Address Detection/4-bit Address
    +              Detection
    +              4
    +              1
    +            
    +          
    +        
    +        
    +          CR3
    +          CR3
    +          Control register 3
    +          0x8
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              WUFIE
    +              Wakeup from Stop mode interrupt
    +              enable
    +              22
    +              1
    +            
    +            
    +              WUS
    +              Wakeup from Stop mode interrupt flag
    +              selection
    +              20
    +              2
    +            
    +            
    +              DEP
    +              Driver enable polarity
    +              selection
    +              15
    +              1
    +            
    +            
    +              DEM
    +              Driver enable mode
    +              14
    +              1
    +            
    +            
    +              DDRE
    +              DMA Disable on Reception
    +              Error
    +              13
    +              1
    +            
    +            
    +              OVRDIS
    +              Overrun Disable
    +              12
    +              1
    +            
    +            
    +              CTSIE
    +              CTS interrupt enable
    +              10
    +              1
    +            
    +            
    +              CTSE
    +              CTS enable
    +              9
    +              1
    +            
    +            
    +              RTSE
    +              RTS enable
    +              8
    +              1
    +            
    +            
    +              DMAT
    +              DMA enable transmitter
    +              7
    +              1
    +            
    +            
    +              DMAR
    +              DMA enable receiver
    +              6
    +              1
    +            
    +            
    +              HDSEL
    +              Half-duplex selection
    +              3
    +              1
    +            
    +            
    +              EIE
    +              Error interrupt enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          BRR
    +          BRR
    +          Baud rate register
    +          0xC
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              BRR
    +              BRR
    +              0
    +              20
    +            
    +          
    +        
    +        
    +          RQR
    +          RQR
    +          Request register
    +          0x18
    +          0x20
    +          write-only
    +          0x0000
    +          
    +            
    +              RXFRQ
    +              Receive data flush request
    +              3
    +              1
    +            
    +            
    +              MMRQ
    +              Mute mode request
    +              2
    +              1
    +            
    +            
    +              SBKRQ
    +              Send break request
    +              1
    +              1
    +            
    +          
    +        
    +        
    +          ISR
    +          ISR
    +          Interrupt & status
    +          register
    +          0x1C
    +          0x20
    +          read-only
    +          0x00C0
    +          
    +            
    +              REACK
    +              REACK
    +              22
    +              1
    +            
    +            
    +              TEACK
    +              TEACK
    +              21
    +              1
    +            
    +            
    +              WUF
    +              WUF
    +              20
    +              1
    +            
    +            
    +              RWU
    +              RWU
    +              19
    +              1
    +            
    +            
    +              SBKF
    +              SBKF
    +              18
    +              1
    +            
    +            
    +              CMF
    +              CMF
    +              17
    +              1
    +            
    +            
    +              BUSY
    +              BUSY
    +              16
    +              1
    +            
    +            
    +              CTS
    +              CTS
    +              10
    +              1
    +            
    +            
    +              CTSIF
    +              CTSIF
    +              9
    +              1
    +            
    +            
    +              TXE
    +              TXE
    +              7
    +              1
    +            
    +            
    +              TC
    +              TC
    +              6
    +              1
    +            
    +            
    +              RXNE
    +              RXNE
    +              5
    +              1
    +            
    +            
    +              IDLE
    +              IDLE
    +              4
    +              1
    +            
    +            
    +              ORE
    +              ORE
    +              3
    +              1
    +            
    +            
    +              NF
    +              NF
    +              2
    +              1
    +            
    +            
    +              FE
    +              FE
    +              1
    +              1
    +            
    +            
    +              PE
    +              PE
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ICR
    +          ICR
    +          Interrupt flag clear register
    +          0x20
    +          0x20
    +          write-only
    +          0x0000
    +          
    +            
    +              WUCF
    +              Wakeup from Stop mode clear
    +              flag
    +              20
    +              1
    +            
    +            
    +              CMCF
    +              Character match clear flag
    +              17
    +              1
    +            
    +            
    +              CTSCF
    +              CTS clear flag
    +              9
    +              1
    +            
    +            
    +              TCCF
    +              Transmission complete clear
    +              flag
    +              6
    +              1
    +            
    +            
    +              IDLECF
    +              Idle line detected clear
    +              flag
    +              4
    +              1
    +            
    +            
    +              ORECF
    +              Overrun error clear flag
    +              3
    +              1
    +            
    +            
    +              NCF
    +              Noise detected clear flag
    +              2
    +              1
    +            
    +            
    +              FECF
    +              Framing error clear flag
    +              1
    +              1
    +            
    +            
    +              PECF
    +              Parity error clear flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          RDR
    +          RDR
    +          Receive data register
    +          0x24
    +          0x20
    +          read-only
    +          0x0000
    +          
    +            
    +              RDR
    +              Receive data value
    +              0
    +              9
    +            
    +          
    +        
    +        
    +          TDR
    +          TDR
    +          Transmit data register
    +          0x28
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              TDR
    +              Transmit data value
    +              0
    +              9
    +            
    +          
    +        
    +      
    +    
    +    
    +      NVIC
    +      Nested Vectored Interrupt
    +      Controller
    +      NVIC
    +      0xE000E100
    +      
    +        0x0
    +        0x33D
    +        registers
    +      
    +      
    +        
    +          ISER
    +          ISER
    +          Interrupt Set Enable Register
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              SETENA
    +              SETENA
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          ICER
    +          ICER
    +          Interrupt Clear Enable
    +          Register
    +          0x80
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CLRENA
    +              CLRENA
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          ISPR
    +          ISPR
    +          Interrupt Set-Pending Register
    +          0x100
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              SETPEND
    +              SETPEND
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          ICPR
    +          ICPR
    +          Interrupt Clear-Pending
    +          Register
    +          0x180
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CLRPEND
    +              CLRPEND
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          IPR0
    +          IPR0
    +          Interrupt Priority Register 0
    +          0x300
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_0
    +              priority for interrupt 0
    +              0
    +              8
    +            
    +            
    +              PRI_1
    +              priority for interrupt 1
    +              8
    +              8
    +            
    +            
    +              PRI_2
    +              priority for interrupt 2
    +              16
    +              8
    +            
    +            
    +              PRI_3
    +              priority for interrupt 3
    +              24
    +              8
    +            
    +          
    +        
    +        
    +          IPR1
    +          IPR1
    +          Interrupt Priority Register 1
    +          0x304
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_4
    +              priority for interrupt n
    +              0
    +              8
    +            
    +            
    +              PRI_5
    +              priority for interrupt n
    +              8
    +              8
    +            
    +            
    +              PRI_6
    +              priority for interrupt n
    +              16
    +              8
    +            
    +            
    +              PRI_7
    +              priority for interrupt n
    +              24
    +              8
    +            
    +          
    +        
    +        
    +          IPR2
    +          IPR2
    +          Interrupt Priority Register 2
    +          0x308
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_8
    +              priority for interrupt n
    +              0
    +              8
    +            
    +            
    +              PRI_9
    +              priority for interrupt n
    +              8
    +              8
    +            
    +            
    +              PRI_10
    +              priority for interrupt n
    +              16
    +              8
    +            
    +            
    +              PRI_11
    +              priority for interrupt n
    +              24
    +              8
    +            
    +          
    +        
    +        
    +          IPR3
    +          IPR3
    +          Interrupt Priority Register 3
    +          0x30C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_12
    +              priority for interrupt n
    +              0
    +              8
    +            
    +            
    +              PRI_13
    +              priority for interrupt n
    +              8
    +              8
    +            
    +            
    +              PRI_14
    +              priority for interrupt n
    +              16
    +              8
    +            
    +            
    +              PRI_15
    +              priority for interrupt n
    +              24
    +              8
    +            
    +          
    +        
    +        
    +          IPR4
    +          IPR4
    +          Interrupt Priority Register 4
    +          0x310
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_16
    +              priority for interrupt n
    +              0
    +              8
    +            
    +            
    +              PRI_17
    +              priority for interrupt n
    +              8
    +              8
    +            
    +            
    +              PRI_18
    +              priority for interrupt n
    +              16
    +              8
    +            
    +            
    +              PRI_19
    +              priority for interrupt n
    +              24
    +              8
    +            
    +          
    +        
    +        
    +          IPR5
    +          IPR5
    +          Interrupt Priority Register 5
    +          0x314
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_20
    +              priority for interrupt n
    +              0
    +              8
    +            
    +            
    +              PRI_21
    +              priority for interrupt n
    +              8
    +              8
    +            
    +            
    +              PRI_22
    +              priority for interrupt n
    +              16
    +              8
    +            
    +            
    +              PRI_23
    +              priority for interrupt n
    +              24
    +              8
    +            
    +          
    +        
    +        
    +          IPR6
    +          IPR6
    +          Interrupt Priority Register 6
    +          0x318
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_24
    +              priority for interrupt n
    +              0
    +              8
    +            
    +            
    +              PRI_25
    +              priority for interrupt n
    +              8
    +              8
    +            
    +            
    +              PRI_26
    +              priority for interrupt n
    +              16
    +              8
    +            
    +            
    +              PRI_27
    +              priority for interrupt n
    +              24
    +              8
    +            
    +          
    +        
    +        
    +          IPR7
    +          IPR7
    +          Interrupt Priority Register 7
    +          0x31C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_28
    +              priority for interrupt n
    +              0
    +              8
    +            
    +            
    +              PRI_29
    +              priority for interrupt n
    +              8
    +              8
    +            
    +            
    +              PRI_30
    +              priority for interrupt n
    +              16
    +              8
    +            
    +            
    +              PRI_31
    +              priority for interrupt n
    +              24
    +              8
    +            
    +          
    +        
    +      
    +    
    +    
    +      USB_SRAM
    +      Universal serial bus full-speed device
    +      interface
    +      USB
    +      0x40006000
    +      
    +        0x0
    +        0x800
    +        registers
    +      
    +      
    +        
    +          EP0R
    +          EP0R
    +          endpoint 0 register
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              EA
    +              Endpoint address
    +              0
    +              4
    +            
    +            
    +              STAT_TX
    +              Status bits, for transmission
    +              transfers
    +              4
    +              2
    +            
    +            
    +              DTOG_TX
    +              Data Toggle, for transmission
    +              transfers
    +              6
    +              1
    +            
    +            
    +              CTR_TX
    +              Correct Transfer for
    +              transmission
    +              7
    +              1
    +            
    +            
    +              EP_KIND
    +              Endpoint kind
    +              8
    +              1
    +            
    +            
    +              EP_TYPE
    +              Endpoint type
    +              9
    +              2
    +            
    +            
    +              SETUP
    +              Setup transaction
    +              completed
    +              11
    +              1
    +            
    +            
    +              STAT_RX
    +              Status bits, for reception
    +              transfers
    +              12
    +              2
    +            
    +            
    +              DTOG_RX
    +              Data Toggle, for reception
    +              transfers
    +              14
    +              1
    +            
    +            
    +              CTR_RX
    +              Correct transfer for
    +              reception
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          EP1R
    +          EP1R
    +          endpoint 1 register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              EA
    +              Endpoint address
    +              0
    +              4
    +            
    +            
    +              STAT_TX
    +              Status bits, for transmission
    +              transfers
    +              4
    +              2
    +            
    +            
    +              DTOG_TX
    +              Data Toggle, for transmission
    +              transfers
    +              6
    +              1
    +            
    +            
    +              CTR_TX
    +              Correct Transfer for
    +              transmission
    +              7
    +              1
    +            
    +            
    +              EP_KIND
    +              Endpoint kind
    +              8
    +              1
    +            
    +            
    +              EP_TYPE
    +              Endpoint type
    +              9
    +              2
    +            
    +            
    +              SETUP
    +              Setup transaction
    +              completed
    +              11
    +              1
    +            
    +            
    +              STAT_RX
    +              Status bits, for reception
    +              transfers
    +              12
    +              2
    +            
    +            
    +              DTOG_RX
    +              Data Toggle, for reception
    +              transfers
    +              14
    +              1
    +            
    +            
    +              CTR_RX
    +              Correct transfer for
    +              reception
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          EP2R
    +          EP2R
    +          endpoint 2 register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              EA
    +              Endpoint address
    +              0
    +              4
    +            
    +            
    +              STAT_TX
    +              Status bits, for transmission
    +              transfers
    +              4
    +              2
    +            
    +            
    +              DTOG_TX
    +              Data Toggle, for transmission
    +              transfers
    +              6
    +              1
    +            
    +            
    +              CTR_TX
    +              Correct Transfer for
    +              transmission
    +              7
    +              1
    +            
    +            
    +              EP_KIND
    +              Endpoint kind
    +              8
    +              1
    +            
    +            
    +              EP_TYPE
    +              Endpoint type
    +              9
    +              2
    +            
    +            
    +              SETUP
    +              Setup transaction
    +              completed
    +              11
    +              1
    +            
    +            
    +              STAT_RX
    +              Status bits, for reception
    +              transfers
    +              12
    +              2
    +            
    +            
    +              DTOG_RX
    +              Data Toggle, for reception
    +              transfers
    +              14
    +              1
    +            
    +            
    +              CTR_RX
    +              Correct transfer for
    +              reception
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          EP3R
    +          EP3R
    +          endpoint 3 register
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              EA
    +              Endpoint address
    +              0
    +              4
    +            
    +            
    +              STAT_TX
    +              Status bits, for transmission
    +              transfers
    +              4
    +              2
    +            
    +            
    +              DTOG_TX
    +              Data Toggle, for transmission
    +              transfers
    +              6
    +              1
    +            
    +            
    +              CTR_TX
    +              Correct Transfer for
    +              transmission
    +              7
    +              1
    +            
    +            
    +              EP_KIND
    +              Endpoint kind
    +              8
    +              1
    +            
    +            
    +              EP_TYPE
    +              Endpoint type
    +              9
    +              2
    +            
    +            
    +              SETUP
    +              Setup transaction
    +              completed
    +              11
    +              1
    +            
    +            
    +              STAT_RX
    +              Status bits, for reception
    +              transfers
    +              12
    +              2
    +            
    +            
    +              DTOG_RX
    +              Data Toggle, for reception
    +              transfers
    +              14
    +              1
    +            
    +            
    +              CTR_RX
    +              Correct transfer for
    +              reception
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          EP4R
    +          EP4R
    +          endpoint 4 register
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              EA
    +              Endpoint address
    +              0
    +              4
    +            
    +            
    +              STAT_TX
    +              Status bits, for transmission
    +              transfers
    +              4
    +              2
    +            
    +            
    +              DTOG_TX
    +              Data Toggle, for transmission
    +              transfers
    +              6
    +              1
    +            
    +            
    +              CTR_TX
    +              Correct Transfer for
    +              transmission
    +              7
    +              1
    +            
    +            
    +              EP_KIND
    +              Endpoint kind
    +              8
    +              1
    +            
    +            
    +              EP_TYPE
    +              Endpoint type
    +              9
    +              2
    +            
    +            
    +              SETUP
    +              Setup transaction
    +              completed
    +              11
    +              1
    +            
    +            
    +              STAT_RX
    +              Status bits, for reception
    +              transfers
    +              12
    +              2
    +            
    +            
    +              DTOG_RX
    +              Data Toggle, for reception
    +              transfers
    +              14
    +              1
    +            
    +            
    +              CTR_RX
    +              Correct transfer for
    +              reception
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          EP5R
    +          EP5R
    +          endpoint 5 register
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              EA
    +              Endpoint address
    +              0
    +              4
    +            
    +            
    +              STAT_TX
    +              Status bits, for transmission
    +              transfers
    +              4
    +              2
    +            
    +            
    +              DTOG_TX
    +              Data Toggle, for transmission
    +              transfers
    +              6
    +              1
    +            
    +            
    +              CTR_TX
    +              Correct Transfer for
    +              transmission
    +              7
    +              1
    +            
    +            
    +              EP_KIND
    +              Endpoint kind
    +              8
    +              1
    +            
    +            
    +              EP_TYPE
    +              Endpoint type
    +              9
    +              2
    +            
    +            
    +              SETUP
    +              Setup transaction
    +              completed
    +              11
    +              1
    +            
    +            
    +              STAT_RX
    +              Status bits, for reception
    +              transfers
    +              12
    +              2
    +            
    +            
    +              DTOG_RX
    +              Data Toggle, for reception
    +              transfers
    +              14
    +              1
    +            
    +            
    +              CTR_RX
    +              Correct transfer for
    +              reception
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          EP6R
    +          EP6R
    +          endpoint 6 register
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              EA
    +              Endpoint address
    +              0
    +              4
    +            
    +            
    +              STAT_TX
    +              Status bits, for transmission
    +              transfers
    +              4
    +              2
    +            
    +            
    +              DTOG_TX
    +              Data Toggle, for transmission
    +              transfers
    +              6
    +              1
    +            
    +            
    +              CTR_TX
    +              Correct Transfer for
    +              transmission
    +              7
    +              1
    +            
    +            
    +              EP_KIND
    +              Endpoint kind
    +              8
    +              1
    +            
    +            
    +              EP_TYPE
    +              Endpoint type
    +              9
    +              2
    +            
    +            
    +              SETUP
    +              Setup transaction
    +              completed
    +              11
    +              1
    +            
    +            
    +              STAT_RX
    +              Status bits, for reception
    +              transfers
    +              12
    +              2
    +            
    +            
    +              DTOG_RX
    +              Data Toggle, for reception
    +              transfers
    +              14
    +              1
    +            
    +            
    +              CTR_RX
    +              Correct transfer for
    +              reception
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          EP7R
    +          EP7R
    +          endpoint 7 register
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              EA
    +              Endpoint address
    +              0
    +              4
    +            
    +            
    +              STAT_TX
    +              Status bits, for transmission
    +              transfers
    +              4
    +              2
    +            
    +            
    +              DTOG_TX
    +              Data Toggle, for transmission
    +              transfers
    +              6
    +              1
    +            
    +            
    +              CTR_TX
    +              Correct Transfer for
    +              transmission
    +              7
    +              1
    +            
    +            
    +              EP_KIND
    +              Endpoint kind
    +              8
    +              1
    +            
    +            
    +              EP_TYPE
    +              Endpoint type
    +              9
    +              2
    +            
    +            
    +              SETUP
    +              Setup transaction
    +              completed
    +              11
    +              1
    +            
    +            
    +              STAT_RX
    +              Status bits, for reception
    +              transfers
    +              12
    +              2
    +            
    +            
    +              DTOG_RX
    +              Data Toggle, for reception
    +              transfers
    +              14
    +              1
    +            
    +            
    +              CTR_RX
    +              Correct transfer for
    +              reception
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          CNTR
    +          CNTR
    +          control register
    +          0x40
    +          0x20
    +          read-write
    +          0x00000003
    +          
    +            
    +              FRES
    +              Force USB Reset
    +              0
    +              1
    +            
    +            
    +              PDWN
    +              Power down
    +              1
    +              1
    +            
    +            
    +              LPMODE
    +              Low-power mode
    +              2
    +              1
    +            
    +            
    +              FSUSP
    +              Force suspend
    +              3
    +              1
    +            
    +            
    +              RESUME
    +              Resume request
    +              4
    +              1
    +            
    +            
    +              L1RESUME
    +              LPM L1 Resume request
    +              5
    +              1
    +            
    +            
    +              L1REQM
    +              LPM L1 state request interrupt
    +              mask
    +              7
    +              1
    +            
    +            
    +              ESOFM
    +              Expected start of frame interrupt
    +              mask
    +              8
    +              1
    +            
    +            
    +              SOFM
    +              Start of frame interrupt
    +              mask
    +              9
    +              1
    +            
    +            
    +              RESETM
    +              USB reset interrupt mask
    +              10
    +              1
    +            
    +            
    +              SUSPM
    +              Suspend mode interrupt
    +              mask
    +              11
    +              1
    +            
    +            
    +              WKUPM
    +              Wakeup interrupt mask
    +              12
    +              1
    +            
    +            
    +              ERRM
    +              Error interrupt mask
    +              13
    +              1
    +            
    +            
    +              PMAOVRM
    +              Packet memory area over / underrun
    +              interrupt mask
    +              14
    +              1
    +            
    +            
    +              CTRM
    +              Correct transfer interrupt
    +              mask
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          ISTR
    +          ISTR
    +          interrupt status register
    +          0x44
    +          0x20
    +          0x00000000
    +          
    +            
    +              EP_ID
    +              Endpoint Identifier
    +              0
    +              4
    +              read-only
    +            
    +            
    +              DIR
    +              Direction of transaction
    +              4
    +              1
    +              read-only
    +            
    +            
    +              L1REQ
    +              LPM L1 state request
    +              7
    +              1
    +              read-write
    +            
    +            
    +              ESOF
    +              Expected start frame
    +              8
    +              1
    +              read-write
    +            
    +            
    +              SOF
    +              start of frame
    +              9
    +              1
    +              read-write
    +            
    +            
    +              RESET
    +              reset request
    +              10
    +              1
    +              read-write
    +            
    +            
    +              SUSP
    +              Suspend mode request
    +              11
    +              1
    +              read-write
    +            
    +            
    +              WKUP
    +              Wakeup
    +              12
    +              1
    +              read-write
    +            
    +            
    +              ERR
    +              Error
    +              13
    +              1
    +              read-write
    +            
    +            
    +              PMAOVR
    +              Packet memory area over /
    +              underrun
    +              14
    +              1
    +              read-write
    +            
    +            
    +              CTR
    +              Correct transfer
    +              15
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          FNR
    +          FNR
    +          frame number register
    +          0x48
    +          0x20
    +          read-only
    +          0x0000
    +          
    +            
    +              FN
    +              Frame number
    +              0
    +              11
    +            
    +            
    +              LSOF
    +              Lost SOF
    +              11
    +              2
    +            
    +            
    +              LCK
    +              Locked
    +              13
    +              1
    +            
    +            
    +              RXDM
    +              Receive data - line status
    +              14
    +              1
    +            
    +            
    +              RXDP
    +              Receive data + line status
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          DADDR
    +          DADDR
    +          device address
    +          0x4C
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              ADD
    +              Device address
    +              0
    +              7
    +            
    +            
    +              EF
    +              Enable function
    +              7
    +              1
    +            
    +          
    +        
    +        
    +          BTABLE
    +          BTABLE
    +          Buffer table address
    +          0x50
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              BTABLE
    +              Buffer table
    +              3
    +              13
    +            
    +          
    +        
    +        
    +          LPMCSR
    +          LPMCSR
    +          LPM control and status
    +          register
    +          0x54
    +          0x20
    +          0x0000
    +          
    +            
    +              LPMEN
    +              LPM support enable
    +              0
    +              1
    +              read-write
    +            
    +            
    +              LPMACK
    +              LPM Token acknowledge
    +              enable
    +              1
    +              1
    +              read-write
    +            
    +            
    +              REMWAKE
    +              bRemoteWake value
    +              3
    +              1
    +              read-only
    +            
    +            
    +              BESL
    +              BESL value
    +              4
    +              4
    +              read-only
    +            
    +          
    +        
    +        
    +          BCDR
    +          BCDR
    +          Battery charging detector
    +          0x58
    +          0x20
    +          0x0000
    +          
    +            
    +              BCDEN
    +              Battery charging detector
    +              0
    +              1
    +              read-write
    +            
    +            
    +              DCDEN
    +              Data contact detection
    +              1
    +              1
    +              read-write
    +            
    +            
    +              PDEN
    +              Primary detection
    +              2
    +              1
    +              read-write
    +            
    +            
    +              SDEN
    +              Secondary detection
    +              3
    +              1
    +              read-write
    +            
    +            
    +              DCDET
    +              Data contact detection
    +              4
    +              1
    +              read-only
    +            
    +            
    +              PDET
    +              Primary detection
    +              5
    +              1
    +              read-only
    +            
    +            
    +              SDET
    +              Secondary detection
    +              6
    +              1
    +              read-only
    +            
    +            
    +              PS2DET
    +              DM pull-up detection
    +              status
    +              7
    +              1
    +              read-only
    +            
    +            
    +              DPPU
    +              DP pull-up control
    +              15
    +              1
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      MPU
    +      Memory protection unit
    +      MPU
    +      0xE000ED90
    +      
    +        0x0
    +        0x15
    +        registers
    +      
    +      
    +        
    +          MPU_TYPER
    +          MPU_TYPER
    +          MPU type register
    +          0x0
    +          0x20
    +          read-only
    +          0X00000800
    +          
    +            
    +              SEPARATE
    +              Separate flag
    +              0
    +              1
    +            
    +            
    +              DREGION
    +              Number of MPU data regions
    +              8
    +              8
    +            
    +            
    +              IREGION
    +              Number of MPU instruction
    +              regions
    +              16
    +              8
    +            
    +          
    +        
    +        
    +          MPU_CTRL
    +          MPU_CTRL
    +          MPU control register
    +          0x4
    +          0x20
    +          read-only
    +          0X00000000
    +          
    +            
    +              ENABLE
    +              Enables the MPU
    +              0
    +              1
    +            
    +            
    +              HFNMIENA
    +              Enables the operation of MPU during hard
    +              fault
    +              1
    +              1
    +            
    +            
    +              PRIVDEFENA
    +              Enable priviliged software access to
    +              default memory map
    +              2
    +              1
    +            
    +          
    +        
    +        
    +          MPU_RNR
    +          MPU_RNR
    +          MPU region number register
    +          0x8
    +          0x20
    +          read-write
    +          0X00000000
    +          
    +            
    +              REGION
    +              MPU region
    +              0
    +              8
    +            
    +          
    +        
    +        
    +          MPU_RBAR
    +          MPU_RBAR
    +          MPU region base address
    +          register
    +          0xC
    +          0x20
    +          read-write
    +          0X00000000
    +          
    +            
    +              REGION
    +              MPU region field
    +              0
    +              4
    +            
    +            
    +              VALID
    +              MPU region number valid
    +              4
    +              1
    +            
    +            
    +              ADDR
    +              Region base address field
    +              5
    +              27
    +            
    +          
    +        
    +        
    +          MPU_RASR
    +          MPU_RASR
    +          MPU region attribute and size
    +          register
    +          0x10
    +          0x20
    +          read-write
    +          0X00000000
    +          
    +            
    +              ENABLE
    +              Region enable bit.
    +              0
    +              1
    +            
    +            
    +              SIZE
    +              Size of the MPU protection
    +              region
    +              1
    +              5
    +            
    +            
    +              SRD
    +              Subregion disable bits
    +              8
    +              8
    +            
    +            
    +              B
    +              memory attribute
    +              16
    +              1
    +            
    +            
    +              C
    +              memory attribute
    +              17
    +              1
    +            
    +            
    +              S
    +              Shareable memory attribute
    +              18
    +              1
    +            
    +            
    +              TEX
    +              memory attribute
    +              19
    +              3
    +            
    +            
    +              AP
    +              Access permission
    +              24
    +              3
    +            
    +            
    +              XN
    +              Instruction access disable
    +              bit
    +              28
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      STK
    +      SysTick timer
    +      STK
    +      0xE000E010
    +      
    +        0x0
    +        0x11
    +        registers
    +      
    +      
    +        
    +          CSR
    +          CSR
    +          SysTick control and status
    +          register
    +          0x0
    +          0x20
    +          read-write
    +          0X00000000
    +          
    +            
    +              ENABLE
    +              Counter enable
    +              0
    +              1
    +            
    +            
    +              TICKINT
    +              SysTick exception request
    +              enable
    +              1
    +              1
    +            
    +            
    +              CLKSOURCE
    +              Clock source selection
    +              2
    +              1
    +            
    +            
    +              COUNTFLAG
    +              COUNTFLAG
    +              16
    +              1
    +            
    +          
    +        
    +        
    +          RVR
    +          RVR
    +          SysTick reload value register
    +          0x4
    +          0x20
    +          read-write
    +          0X00000000
    +          
    +            
    +              RELOAD
    +              RELOAD value
    +              0
    +              24
    +            
    +          
    +        
    +        
    +          CVR
    +          CVR
    +          SysTick current value register
    +          0x8
    +          0x20
    +          read-write
    +          0X00000000
    +          
    +            
    +              CURRENT
    +              Current counter value
    +              0
    +              24
    +            
    +          
    +        
    +        
    +          CALIB
    +          CALIB
    +          SysTick calibration value
    +          register
    +          0xC
    +          0x20
    +          read-write
    +          0X00000000
    +          
    +            
    +              TENMS
    +              Calibration value
    +              0
    +              24
    +            
    +            
    +              SKEW
    +              SKEW flag: Indicates whether the TENMS
    +              value is exact
    +              30
    +              1
    +            
    +            
    +              NOREF
    +              NOREF flag. Reads as zero
    +              31
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      SCB
    +      System control block
    +      SCB
    +      0xE000ED00
    +      
    +        0x0
    +        0x41
    +        registers
    +      
    +      
    +        
    +          CPUID
    +          CPUID
    +          CPUID base register
    +          0x0
    +          0x20
    +          read-only
    +          0x410FC241
    +          
    +            
    +              Revision
    +              Revision number
    +              0
    +              4
    +            
    +            
    +              PartNo
    +              Part number of the
    +              processor
    +              4
    +              12
    +            
    +            
    +              Architecture
    +              Reads as 0xF
    +              16
    +              4
    +            
    +            
    +              Variant
    +              Variant number
    +              20
    +              4
    +            
    +            
    +              Implementer
    +              Implementer code
    +              24
    +              8
    +            
    +          
    +        
    +        
    +          ICSR
    +          ICSR
    +          Interrupt control and state
    +          register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              VECTACTIVE
    +              Active vector
    +              0
    +              9
    +            
    +            
    +              RETTOBASE
    +              Return to base level
    +              11
    +              1
    +            
    +            
    +              VECTPENDING
    +              Pending vector
    +              12
    +              7
    +            
    +            
    +              ISRPENDING
    +              Interrupt pending flag
    +              22
    +              1
    +            
    +            
    +              PENDSTCLR
    +              SysTick exception clear-pending
    +              bit
    +              25
    +              1
    +            
    +            
    +              PENDSTSET
    +              SysTick exception set-pending
    +              bit
    +              26
    +              1
    +            
    +            
    +              PENDSVCLR
    +              PendSV clear-pending bit
    +              27
    +              1
    +            
    +            
    +              PENDSVSET
    +              PendSV set-pending bit
    +              28
    +              1
    +            
    +            
    +              NMIPENDSET
    +              NMI set-pending bit.
    +              31
    +              1
    +            
    +          
    +        
    +        
    +          VTOR
    +          VTOR
    +          Vector table offset register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              TBLOFF
    +              Vector table base offset
    +              field
    +              7
    +              25
    +            
    +          
    +        
    +        
    +          AIRCR
    +          AIRCR
    +          Application interrupt and reset control
    +          register
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              VECTCLRACTIVE
    +              VECTCLRACTIVE
    +              1
    +              1
    +            
    +            
    +              SYSRESETREQ
    +              SYSRESETREQ
    +              2
    +              1
    +            
    +            
    +              ENDIANESS
    +              ENDIANESS
    +              15
    +              1
    +            
    +            
    +              VECTKEYSTAT
    +              Register key
    +              16
    +              16
    +            
    +          
    +        
    +        
    +          SCR
    +          SCR
    +          System control register
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              SLEEPONEXIT
    +              SLEEPONEXIT
    +              1
    +              1
    +            
    +            
    +              SLEEPDEEP
    +              SLEEPDEEP
    +              2
    +              1
    +            
    +            
    +              SEVEONPEND
    +              Send Event on Pending bit
    +              4
    +              1
    +            
    +          
    +        
    +        
    +          CCR
    +          CCR
    +          Configuration and control
    +          register
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              NONBASETHRDENA
    +              Configures how the processor enters
    +              Thread mode
    +              0
    +              1
    +            
    +            
    +              USERSETMPEND
    +              USERSETMPEND
    +              1
    +              1
    +            
    +            
    +              UNALIGN__TRP
    +              UNALIGN_ TRP
    +              3
    +              1
    +            
    +            
    +              DIV_0_TRP
    +              DIV_0_TRP
    +              4
    +              1
    +            
    +            
    +              BFHFNMIGN
    +              BFHFNMIGN
    +              8
    +              1
    +            
    +            
    +              STKALIGN
    +              STKALIGN
    +              9
    +              1
    +            
    +          
    +        
    +        
    +          SHPR2
    +          SHPR2
    +          System handler priority
    +          registers
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_11
    +              Priority of system handler
    +              11
    +              24
    +              8
    +            
    +          
    +        
    +        
    +          SHPR3
    +          SHPR3
    +          System handler priority
    +          registers
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_14
    +              Priority of system handler
    +              14
    +              16
    +              8
    +            
    +            
    +              PRI_15
    +              Priority of system handler
    +              15
    +              24
    +              8
    +            
    +          
    +        
    +      
    +    
    +  
    +
    diff --git a/src/chips/STM32L0x3.svd b/src/chips/STM32L0x3.svd
    new file mode 100644
    index 000000000..f1282791c
    --- /dev/null
    +++ b/src/chips/STM32L0x3.svd
    @@ -0,0 +1,22518 @@
    +
    +
    +  STM32L0x3
    +  1.3
    +  STM32L0x3
    +  
    +  
    +    CM0+
    +    r0p0
    +    little
    +    false
    +    false
    +    3
    +    false
    +  
    +  
    +  
    +  8
    +  
    +  32
    +  
    +  0x20
    +  0x0
    +  0xFFFFFFFF
    +  
    +    
    +      AES
    +      Advanced encryption standard hardware
    +      accelerator
    +      AES
    +      0x40026000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        AES_RNG_LPUART1
    +        AES global interrupt RNG global interrupt and
    +        LPUART1 global interrupt through
    +        29
    +      
    +      
    +        
    +          CR
    +          CR
    +          control register
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DMAOUTEN
    +              Enable DMA management of data output
    +              phase
    +              12
    +              1
    +            
    +            
    +              DMAINEN
    +              Enable DMA management of data input
    +              phase
    +              11
    +              1
    +            
    +            
    +              ERRIE
    +              Error interrupt enable
    +              10
    +              1
    +            
    +            
    +              CCFIE
    +              CCF flag interrupt enable
    +              9
    +              1
    +            
    +            
    +              ERRC
    +              Error clear
    +              8
    +              1
    +            
    +            
    +              CCFC
    +              Computation Complete Flag
    +              Clear
    +              7
    +              1
    +            
    +            
    +              CHMOD
    +              AES chaining mode
    +              5
    +              2
    +            
    +            
    +              MODE
    +              AES operating mode
    +              3
    +              2
    +            
    +            
    +              DATATYPE
    +              Data type selection (for data in and
    +              data out to/from the cryptographic
    +              block)
    +              1
    +              2
    +            
    +            
    +              EN
    +              AES enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          status register
    +          0x4
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              WRERR
    +              Write error flag
    +              2
    +              1
    +            
    +            
    +              RDERR
    +              Read error flag
    +              1
    +              1
    +            
    +            
    +              CCF
    +              Computation complete flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          DINR
    +          DINR
    +          data input register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AES_DINR
    +              Data Input Register.
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          DOUTR
    +          DOUTR
    +          data output register
    +          0xC
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              AES_DOUTR
    +              Data output register
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          KEYR0
    +          KEYR0
    +          key register 0
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AES_KEYR0
    +              Data Output Register (LSB key
    +              [31:0])
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          KEYR1
    +          KEYR1
    +          key register 1
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AES_KEYR1
    +              AES key register (key
    +              [63:32])
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          KEYR2
    +          KEYR2
    +          key register 2
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AES_KEYR2
    +              AES key register (key
    +              [95:64])
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          KEYR3
    +          KEYR3
    +          key register 3
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AES_KEYR3
    +              AES key register (MSB key
    +              [127:96])
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          IVR0
    +          IVR0
    +          initialization vector register
    +          0
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AES_IVR0
    +              initialization vector register (LSB IVR
    +              [31:0])
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          IVR1
    +          IVR1
    +          initialization vector register
    +          1
    +          0x24
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AES_IVR1
    +              Initialization Vector Register (IVR
    +              [63:32])
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          IVR2
    +          IVR2
    +          initialization vector register
    +          2
    +          0x28
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AES_IVR2
    +              Initialization Vector Register (IVR
    +              [95:64])
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          IVR3
    +          IVR3
    +          initialization vector register
    +          3
    +          0x2C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AES_IVR3
    +              Initialization Vector Register (MSB IVR
    +              [127:96])
    +              0
    +              32
    +            
    +          
    +        
    +      
    +    
    +    
    +      DAC
    +      Digital-to-analog converter
    +      DAC
    +      0x40007400
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          CR
    +          CR
    +          control register
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DMAUDRIE1
    +              DAC channel1 DMA Underrun Interrupt
    +              enable
    +              13
    +              1
    +            
    +            
    +              DMAEN1
    +              DAC channel1 DMA enable
    +              12
    +              1
    +            
    +            
    +              MAMP1
    +              DAC channel1 mask/amplitude
    +              selector
    +              8
    +              4
    +            
    +            
    +              WAVE1
    +              DAC channel1 noise/triangle wave
    +              generation enable
    +              6
    +              2
    +            
    +            
    +              TSEL1
    +              DAC channel1 trigger
    +              selection
    +              3
    +              3
    +            
    +            
    +              TEN1
    +              DAC channel1 trigger
    +              enable
    +              2
    +              1
    +            
    +            
    +              BOFF1
    +              DAC channel1 output buffer
    +              disable
    +              1
    +              1
    +            
    +            
    +              EN1
    +              DAC channel1 enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          SWTRIGR
    +          SWTRIGR
    +          software trigger register
    +          0x4
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              SWTRIG1
    +              DAC channel1 software
    +              trigger
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          DHR12R1
    +          DHR12R1
    +          channel1 12-bit right-aligned data holding
    +          register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DACC1DHR
    +              DAC channel1 12-bit right-aligned
    +              data
    +              0
    +              12
    +            
    +          
    +        
    +        
    +          DHR12L1
    +          DHR12L1
    +          channel1 12-bit left-aligned data holding
    +          register
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DACC1DHR
    +              DAC channel1 12-bit left-aligned
    +              data
    +              4
    +              12
    +            
    +          
    +        
    +        
    +          DHR8R1
    +          DHR8R1
    +          channel1 8-bit right-aligned data holding
    +          register
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DACC1DHR
    +              DAC channel1 8-bit right-aligned
    +              data
    +              0
    +              8
    +            
    +          
    +        
    +        
    +          DOR1
    +          DOR1
    +          channel1 data output register
    +          0x2C
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              DACC1DOR
    +              DAC channel1 data output
    +              0
    +              12
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          status register
    +          0x34
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DMAUDR1
    +              DAC channel1 DMA underrun
    +              flag
    +              13
    +              1
    +            
    +          
    +        
    +        
    +          DHR12R2
    +          DHR12R2
    +          channel2 12-bit right-aligned data holding
    +          register
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DACC2DHR
    +              DAC channel2 12-bit right-aligned
    +              data
    +              0
    +              12
    +            
    +          
    +        
    +        
    +          DHR12L2
    +          DHR12L2
    +          channel2 12-bit left-aligned data holding
    +          register
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DACC2DHR
    +              DAC channel2 12-bit left-aligned
    +              data
    +              4
    +              12
    +            
    +          
    +        
    +        
    +          DHR8R2
    +          DHR8R2
    +          channel2 8-bit right-aligned data holding
    +          register
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DACC2DHR
    +              DAC channel2 8-bit right-aligned
    +              data
    +              0
    +              8
    +            
    +          
    +        
    +        
    +          DHR12RD
    +          DHR12RD
    +          Dual DAC 12-bit right-aligned data holding
    +          register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DACC1DHR
    +              DAC channel1 12-bit right-aligned
    +              data
    +              0
    +              12
    +            
    +            
    +              DACC2DHR
    +              DAC channel2 12-bit right-aligned
    +              data
    +              16
    +              12
    +            
    +          
    +        
    +        
    +          DHR12LD
    +          DHR12LD
    +          Dual DAC 12-bit left-aligned data holding
    +          register
    +          0x24
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DACC1DHR
    +              DAC channel1 12-bit left-aligned
    +              data
    +              4
    +              12
    +            
    +            
    +              DACC2DHR
    +              DAC channel2 12-bit left-aligned
    +              data
    +              20
    +              12
    +            
    +          
    +        
    +        
    +          DHR8RD
    +          DHR8RD
    +          Dual DAC 8-bit right-aligned data holding
    +          register
    +          0x28
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DACC1DHR
    +              DAC channel1 8-bit right-aligned
    +              data
    +              0
    +              8
    +            
    +            
    +              DACC2DHR
    +              DAC channel2 8-bit right-aligned
    +              data
    +              8
    +              8
    +            
    +          
    +        
    +        
    +          DOR2
    +          DOR2
    +          channel2 data output register
    +          0x30
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              DACC2DOR
    +              DAC channel2 data output
    +              0
    +              12
    +            
    +          
    +        
    +      
    +    
    +    
    +      DMA1
    +      Direct memory access controller
    +      DMA
    +      0x40020000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        DMA1_Channel1
    +        DMA1 Channel1 global interrupt
    +        9
    +      
    +      
    +        DMA1_Channel2_3
    +        DMA1 Channel2 and 3 interrupts
    +        10
    +      
    +      
    +        DMA1_Channel4_7
    +        DMA1 Channel4 to 7 interrupts
    +        11
    +      
    +      
    +        
    +          ISR
    +          ISR
    +          interrupt status register
    +          0x0
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              TEIF7
    +              Channel x transfer error flag (x = 1
    +              ..7)
    +              27
    +              1
    +            
    +            
    +              HTIF7
    +              Channel x half transfer flag (x = 1
    +              ..7)
    +              26
    +              1
    +            
    +            
    +              TCIF7
    +              Channel x transfer complete flag (x = 1
    +              ..7)
    +              25
    +              1
    +            
    +            
    +              GIF7
    +              Channel x global interrupt flag (x = 1
    +              ..7)
    +              24
    +              1
    +            
    +            
    +              TEIF6
    +              Channel x transfer error flag (x = 1
    +              ..7)
    +              23
    +              1
    +            
    +            
    +              HTIF6
    +              Channel x half transfer flag (x = 1
    +              ..7)
    +              22
    +              1
    +            
    +            
    +              TCIF6
    +              Channel x transfer complete flag (x = 1
    +              ..7)
    +              21
    +              1
    +            
    +            
    +              GIF6
    +              Channel x global interrupt flag (x = 1
    +              ..7)
    +              20
    +              1
    +            
    +            
    +              TEIF5
    +              Channel x transfer error flag (x = 1
    +              ..7)
    +              19
    +              1
    +            
    +            
    +              HTIF5
    +              Channel x half transfer flag (x = 1
    +              ..7)
    +              18
    +              1
    +            
    +            
    +              TCIF5
    +              Channel x transfer complete flag (x = 1
    +              ..7)
    +              17
    +              1
    +            
    +            
    +              GIF5
    +              Channel x global interrupt flag (x = 1
    +              ..7)
    +              16
    +              1
    +            
    +            
    +              TEIF4
    +              Channel x transfer error flag (x = 1
    +              ..7)
    +              15
    +              1
    +            
    +            
    +              HTIF4
    +              Channel x half transfer flag (x = 1
    +              ..7)
    +              14
    +              1
    +            
    +            
    +              TCIF4
    +              Channel x transfer complete flag (x = 1
    +              ..7)
    +              13
    +              1
    +            
    +            
    +              GIF4
    +              Channel x global interrupt flag (x = 1
    +              ..7)
    +              12
    +              1
    +            
    +            
    +              TEIF3
    +              Channel x transfer error flag (x = 1
    +              ..7)
    +              11
    +              1
    +            
    +            
    +              HTIF3
    +              Channel x half transfer flag (x = 1
    +              ..7)
    +              10
    +              1
    +            
    +            
    +              TCIF3
    +              Channel x transfer complete flag (x = 1
    +              ..7)
    +              9
    +              1
    +            
    +            
    +              GIF3
    +              Channel x global interrupt flag (x = 1
    +              ..7)
    +              8
    +              1
    +            
    +            
    +              TEIF2
    +              Channel x transfer error flag (x = 1
    +              ..7)
    +              7
    +              1
    +            
    +            
    +              HTIF2
    +              Channel x half transfer flag (x = 1
    +              ..7)
    +              6
    +              1
    +            
    +            
    +              TCIF2
    +              Channel x transfer complete flag (x = 1
    +              ..7)
    +              5
    +              1
    +            
    +            
    +              GIF2
    +              Channel x global interrupt flag (x = 1
    +              ..7)
    +              4
    +              1
    +            
    +            
    +              TEIF1
    +              Channel x transfer error flag (x = 1
    +              ..7)
    +              3
    +              1
    +            
    +            
    +              HTIF1
    +              Channel x half transfer flag (x = 1
    +              ..7)
    +              2
    +              1
    +            
    +            
    +              TCIF1
    +              Channel x transfer complete flag (x = 1
    +              ..7)
    +              1
    +              1
    +            
    +            
    +              GIF1
    +              Channel x global interrupt flag (x = 1
    +              ..7)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          IFCR
    +          IFCR
    +          interrupt flag clear register
    +          0x4
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              CTEIF7
    +              Channel x transfer error clear (x = 1
    +              ..7)
    +              27
    +              1
    +            
    +            
    +              CHTIF7
    +              Channel x half transfer clear (x = 1
    +              ..7)
    +              26
    +              1
    +            
    +            
    +              CTCIF7
    +              Channel x transfer complete clear (x = 1
    +              ..7)
    +              25
    +              1
    +            
    +            
    +              CGIF7
    +              Channel x global interrupt clear (x = 1
    +              ..7)
    +              24
    +              1
    +            
    +            
    +              CTEIF6
    +              Channel x transfer error clear (x = 1
    +              ..7)
    +              23
    +              1
    +            
    +            
    +              CHTIF6
    +              Channel x half transfer clear (x = 1
    +              ..7)
    +              22
    +              1
    +            
    +            
    +              CTCIF6
    +              Channel x transfer complete clear (x = 1
    +              ..7)
    +              21
    +              1
    +            
    +            
    +              CGIF6
    +              Channel x global interrupt clear (x = 1
    +              ..7)
    +              20
    +              1
    +            
    +            
    +              CTEIF5
    +              Channel x transfer error clear (x = 1
    +              ..7)
    +              19
    +              1
    +            
    +            
    +              CHTIF5
    +              Channel x half transfer clear (x = 1
    +              ..7)
    +              18
    +              1
    +            
    +            
    +              CTCIF5
    +              Channel x transfer complete clear (x = 1
    +              ..7)
    +              17
    +              1
    +            
    +            
    +              CGIF5
    +              Channel x global interrupt clear (x = 1
    +              ..7)
    +              16
    +              1
    +            
    +            
    +              CTEIF4
    +              Channel x transfer error clear (x = 1
    +              ..7)
    +              15
    +              1
    +            
    +            
    +              CHTIF4
    +              Channel x half transfer clear (x = 1
    +              ..7)
    +              14
    +              1
    +            
    +            
    +              CTCIF4
    +              Channel x transfer complete clear (x = 1
    +              ..7)
    +              13
    +              1
    +            
    +            
    +              CGIF4
    +              Channel x global interrupt clear (x = 1
    +              ..7)
    +              12
    +              1
    +            
    +            
    +              CTEIF3
    +              Channel x transfer error clear (x = 1
    +              ..7)
    +              11
    +              1
    +            
    +            
    +              CHTIF3
    +              Channel x half transfer clear (x = 1
    +              ..7)
    +              10
    +              1
    +            
    +            
    +              CTCIF3
    +              Channel x transfer complete clear (x = 1
    +              ..7)
    +              9
    +              1
    +            
    +            
    +              CGIF3
    +              Channel x global interrupt clear (x = 1
    +              ..7)
    +              8
    +              1
    +            
    +            
    +              CTEIF2
    +              Channel x transfer error clear (x = 1
    +              ..7)
    +              7
    +              1
    +            
    +            
    +              CHTIF2
    +              Channel x half transfer clear (x = 1
    +              ..7)
    +              6
    +              1
    +            
    +            
    +              CTCIF2
    +              Channel x transfer complete clear (x = 1
    +              ..7)
    +              5
    +              1
    +            
    +            
    +              CGIF2
    +              Channel x global interrupt clear (x = 1
    +              ..7)
    +              4
    +              1
    +            
    +            
    +              CTEIF1
    +              Channel x transfer error clear (x = 1
    +              ..7)
    +              3
    +              1
    +            
    +            
    +              CHTIF1
    +              Channel x half transfer clear (x = 1
    +              ..7)
    +              2
    +              1
    +            
    +            
    +              CTCIF1
    +              Channel x transfer complete clear (x = 1
    +              ..7)
    +              1
    +              1
    +            
    +            
    +              CGIF1
    +              Channel x global interrupt clear (x = 1
    +              ..7)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CCR1
    +          CCR1
    +          channel x configuration
    +          register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MEM2MEM
    +              Memory to memory mode
    +              14
    +              1
    +            
    +            
    +              PL
    +              Channel priority level
    +              12
    +              2
    +            
    +            
    +              MSIZE
    +              Memory size
    +              10
    +              2
    +            
    +            
    +              PSIZE
    +              Peripheral size
    +              8
    +              2
    +            
    +            
    +              MINC
    +              Memory increment mode
    +              7
    +              1
    +            
    +            
    +              PINC
    +              Peripheral increment mode
    +              6
    +              1
    +            
    +            
    +              CIRC
    +              Circular mode
    +              5
    +              1
    +            
    +            
    +              DIR
    +              Data transfer direction
    +              4
    +              1
    +            
    +            
    +              TEIE
    +              Transfer error interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              HTIE
    +              Half transfer interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              TCIE
    +              Transfer complete interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              EN
    +              Channel enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNDTR1
    +          CNDTR1
    +          channel x number of data
    +          register
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              NDT
    +              Number of data to transfer
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CPAR1
    +          CPAR1
    +          channel x peripheral address
    +          register
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PA
    +              Peripheral address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CMAR1
    +          CMAR1
    +          channel x memory address
    +          register
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MA
    +              Memory address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CCR2
    +          CCR2
    +          channel x configuration
    +          register
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MEM2MEM
    +              Memory to memory mode
    +              14
    +              1
    +            
    +            
    +              PL
    +              Channel priority level
    +              12
    +              2
    +            
    +            
    +              MSIZE
    +              Memory size
    +              10
    +              2
    +            
    +            
    +              PSIZE
    +              Peripheral size
    +              8
    +              2
    +            
    +            
    +              MINC
    +              Memory increment mode
    +              7
    +              1
    +            
    +            
    +              PINC
    +              Peripheral increment mode
    +              6
    +              1
    +            
    +            
    +              CIRC
    +              Circular mode
    +              5
    +              1
    +            
    +            
    +              DIR
    +              Data transfer direction
    +              4
    +              1
    +            
    +            
    +              TEIE
    +              Transfer error interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              HTIE
    +              Half transfer interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              TCIE
    +              Transfer complete interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              EN
    +              Channel enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNDTR2
    +          CNDTR2
    +          channel x number of data
    +          register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              NDT
    +              Number of data to transfer
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CPAR2
    +          CPAR2
    +          channel x peripheral address
    +          register
    +          0x24
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PA
    +              Peripheral address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CMAR2
    +          CMAR2
    +          channel x memory address
    +          register
    +          0x28
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MA
    +              Memory address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CCR3
    +          CCR3
    +          channel x configuration
    +          register
    +          0x30
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MEM2MEM
    +              Memory to memory mode
    +              14
    +              1
    +            
    +            
    +              PL
    +              Channel priority level
    +              12
    +              2
    +            
    +            
    +              MSIZE
    +              Memory size
    +              10
    +              2
    +            
    +            
    +              PSIZE
    +              Peripheral size
    +              8
    +              2
    +            
    +            
    +              MINC
    +              Memory increment mode
    +              7
    +              1
    +            
    +            
    +              PINC
    +              Peripheral increment mode
    +              6
    +              1
    +            
    +            
    +              CIRC
    +              Circular mode
    +              5
    +              1
    +            
    +            
    +              DIR
    +              Data transfer direction
    +              4
    +              1
    +            
    +            
    +              TEIE
    +              Transfer error interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              HTIE
    +              Half transfer interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              TCIE
    +              Transfer complete interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              EN
    +              Channel enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNDTR3
    +          CNDTR3
    +          channel x number of data
    +          register
    +          0x34
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              NDT
    +              Number of data to transfer
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CPAR3
    +          CPAR3
    +          channel x peripheral address
    +          register
    +          0x38
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PA
    +              Peripheral address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CMAR3
    +          CMAR3
    +          channel x memory address
    +          register
    +          0x3C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MA
    +              Memory address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CCR4
    +          CCR4
    +          channel x configuration
    +          register
    +          0x44
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MEM2MEM
    +              Memory to memory mode
    +              14
    +              1
    +            
    +            
    +              PL
    +              Channel priority level
    +              12
    +              2
    +            
    +            
    +              MSIZE
    +              Memory size
    +              10
    +              2
    +            
    +            
    +              PSIZE
    +              Peripheral size
    +              8
    +              2
    +            
    +            
    +              MINC
    +              Memory increment mode
    +              7
    +              1
    +            
    +            
    +              PINC
    +              Peripheral increment mode
    +              6
    +              1
    +            
    +            
    +              CIRC
    +              Circular mode
    +              5
    +              1
    +            
    +            
    +              DIR
    +              Data transfer direction
    +              4
    +              1
    +            
    +            
    +              TEIE
    +              Transfer error interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              HTIE
    +              Half transfer interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              TCIE
    +              Transfer complete interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              EN
    +              Channel enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNDTR4
    +          CNDTR4
    +          channel x number of data
    +          register
    +          0x48
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              NDT
    +              Number of data to transfer
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CPAR4
    +          CPAR4
    +          channel x peripheral address
    +          register
    +          0x4C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PA
    +              Peripheral address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CMAR4
    +          CMAR4
    +          channel x memory address
    +          register
    +          0x50
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MA
    +              Memory address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CCR5
    +          CCR5
    +          channel x configuration
    +          register
    +          0x58
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MEM2MEM
    +              Memory to memory mode
    +              14
    +              1
    +            
    +            
    +              PL
    +              Channel priority level
    +              12
    +              2
    +            
    +            
    +              MSIZE
    +              Memory size
    +              10
    +              2
    +            
    +            
    +              PSIZE
    +              Peripheral size
    +              8
    +              2
    +            
    +            
    +              MINC
    +              Memory increment mode
    +              7
    +              1
    +            
    +            
    +              PINC
    +              Peripheral increment mode
    +              6
    +              1
    +            
    +            
    +              CIRC
    +              Circular mode
    +              5
    +              1
    +            
    +            
    +              DIR
    +              Data transfer direction
    +              4
    +              1
    +            
    +            
    +              TEIE
    +              Transfer error interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              HTIE
    +              Half transfer interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              TCIE
    +              Transfer complete interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              EN
    +              Channel enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNDTR5
    +          CNDTR5
    +          channel x number of data
    +          register
    +          0x5C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              NDT
    +              Number of data to transfer
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CPAR5
    +          CPAR5
    +          channel x peripheral address
    +          register
    +          0x60
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PA
    +              Peripheral address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CMAR5
    +          CMAR5
    +          channel x memory address
    +          register
    +          0x64
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MA
    +              Memory address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CCR6
    +          CCR6
    +          channel x configuration
    +          register
    +          0x6C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MEM2MEM
    +              Memory to memory mode
    +              14
    +              1
    +            
    +            
    +              PL
    +              Channel priority level
    +              12
    +              2
    +            
    +            
    +              MSIZE
    +              Memory size
    +              10
    +              2
    +            
    +            
    +              PSIZE
    +              Peripheral size
    +              8
    +              2
    +            
    +            
    +              MINC
    +              Memory increment mode
    +              7
    +              1
    +            
    +            
    +              PINC
    +              Peripheral increment mode
    +              6
    +              1
    +            
    +            
    +              CIRC
    +              Circular mode
    +              5
    +              1
    +            
    +            
    +              DIR
    +              Data transfer direction
    +              4
    +              1
    +            
    +            
    +              TEIE
    +              Transfer error interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              HTIE
    +              Half transfer interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              TCIE
    +              Transfer complete interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              EN
    +              Channel enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNDTR6
    +          CNDTR6
    +          channel x number of data
    +          register
    +          0x70
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              NDT
    +              Number of data to transfer
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CPAR6
    +          CPAR6
    +          channel x peripheral address
    +          register
    +          0x74
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PA
    +              Peripheral address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CMAR6
    +          CMAR6
    +          channel x memory address
    +          register
    +          0x78
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MA
    +              Memory address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CCR7
    +          CCR7
    +          channel x configuration
    +          register
    +          0x80
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MEM2MEM
    +              Memory to memory mode
    +              14
    +              1
    +            
    +            
    +              PL
    +              Channel priority level
    +              12
    +              2
    +            
    +            
    +              MSIZE
    +              Memory size
    +              10
    +              2
    +            
    +            
    +              PSIZE
    +              Peripheral size
    +              8
    +              2
    +            
    +            
    +              MINC
    +              Memory increment mode
    +              7
    +              1
    +            
    +            
    +              PINC
    +              Peripheral increment mode
    +              6
    +              1
    +            
    +            
    +              CIRC
    +              Circular mode
    +              5
    +              1
    +            
    +            
    +              DIR
    +              Data transfer direction
    +              4
    +              1
    +            
    +            
    +              TEIE
    +              Transfer error interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              HTIE
    +              Half transfer interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              TCIE
    +              Transfer complete interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              EN
    +              Channel enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNDTR7
    +          CNDTR7
    +          channel x number of data
    +          register
    +          0x84
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              NDT
    +              Number of data to transfer
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CPAR7
    +          CPAR7
    +          channel x peripheral address
    +          register
    +          0x88
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PA
    +              Peripheral address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CMAR7
    +          CMAR7
    +          channel x memory address
    +          register
    +          0x8C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MA
    +              Memory address
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          CSELR
    +          CSELR
    +          channel selection register
    +          0xA8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              C7S
    +              DMA channel 7 selection
    +              24
    +              4
    +            
    +            
    +              C6S
    +              DMA channel 6 selection
    +              20
    +              4
    +            
    +            
    +              C5S
    +              DMA channel 5 selection
    +              16
    +              4
    +            
    +            
    +              C4S
    +              DMA channel 4 selection
    +              12
    +              4
    +            
    +            
    +              C3S
    +              DMA channel 3 selection
    +              8
    +              4
    +            
    +            
    +              C2S
    +              DMA channel 2 selection
    +              4
    +              4
    +            
    +            
    +              C1S
    +              DMA channel 1 selection
    +              0
    +              4
    +            
    +          
    +        
    +      
    +    
    +    
    +      CRC
    +      Cyclic redundancy check calculation
    +      unit
    +      CRC
    +      0x40023000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          DR
    +          DR
    +          Data register
    +          0x0
    +          0x20
    +          read-write
    +          0xFFFFFFFF
    +          
    +            
    +              DR
    +              Data register bits
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          IDR
    +          IDR
    +          Independent data register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              IDR
    +              General-purpose 8-bit data register
    +              bits
    +              0
    +              8
    +            
    +          
    +        
    +        
    +          CR
    +          CR
    +          Control register
    +          0x8
    +          0x20
    +          0x00000000
    +          
    +            
    +              REV_OUT
    +              Reverse output data
    +              7
    +              1
    +              read-write
    +            
    +            
    +              REV_IN
    +              Reverse input data
    +              5
    +              2
    +              read-write
    +            
    +            
    +              POLYSIZE
    +              Polynomial size
    +              3
    +              2
    +              read-write
    +            
    +            
    +              RESET
    +              RESET bit
    +              0
    +              1
    +              write-only
    +            
    +          
    +        
    +        
    +          INIT
    +          INIT
    +          Initial CRC value
    +          0x10
    +          0x20
    +          read-write
    +          0xFFFFFFFF
    +          
    +            
    +              CRC_INIT
    +              Programmable initial CRC
    +              value
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          POL
    +          POL
    +          polynomial
    +          0x14
    +          0x20
    +          read-write
    +          0x04C11DB7
    +          
    +            
    +              Polynomialcoefficients
    +              Programmable polynomial
    +              0
    +              32
    +            
    +          
    +        
    +      
    +    
    +    
    +      GPIOA
    +      General-purpose I/Os
    +      GPIO
    +      0x50000000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          MODER
    +          MODER
    +          GPIO port mode register
    +          0x0
    +          0x20
    +          read-write
    +          0xEBFFFCFF
    +          
    +            
    +              MODE0
    +              Port x configuration bits (y =
    +              0..15)
    +              0
    +              2
    +            
    +            
    +              MODE1
    +              Port x configuration bits (y =
    +              0..15)
    +              2
    +              2
    +            
    +            
    +              MODE2
    +              Port x configuration bits (y =
    +              0..15)
    +              4
    +              2
    +            
    +            
    +              MODE3
    +              Port x configuration bits (y =
    +              0..15)
    +              6
    +              2
    +            
    +            
    +              MODE4
    +              Port x configuration bits (y =
    +              0..15)
    +              8
    +              2
    +            
    +            
    +              MODE5
    +              Port x configuration bits (y =
    +              0..15)
    +              10
    +              2
    +            
    +            
    +              MODE6
    +              Port x configuration bits (y =
    +              0..15)
    +              12
    +              2
    +            
    +            
    +              MODE7
    +              Port x configuration bits (y =
    +              0..15)
    +              14
    +              2
    +            
    +            
    +              MODE8
    +              Port x configuration bits (y =
    +              0..15)
    +              16
    +              2
    +            
    +            
    +              MODE9
    +              Port x configuration bits (y =
    +              0..15)
    +              18
    +              2
    +            
    +            
    +              MODE10
    +              Port x configuration bits (y =
    +              0..15)
    +              20
    +              2
    +            
    +            
    +              MODE11
    +              Port x configuration bits (y =
    +              0..15)
    +              22
    +              2
    +            
    +            
    +              MODE12
    +              Port x configuration bits (y =
    +              0..15)
    +              24
    +              2
    +            
    +            
    +              MODE13
    +              Port x configuration bits (y =
    +              0..15)
    +              26
    +              2
    +            
    +            
    +              MODE14
    +              Port x configuration bits (y =
    +              0..15)
    +              28
    +              2
    +            
    +            
    +              MODE15
    +              Port x configuration bits (y =
    +              0..15)
    +              30
    +              2
    +            
    +          
    +        
    +        
    +          OTYPER
    +          OTYPER
    +          GPIO port output type register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OT15
    +              Port x configuration bits (y =
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              OT14
    +              Port x configuration bits (y =
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              OT13
    +              Port x configuration bits (y =
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              OT12
    +              Port x configuration bits (y =
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              OT11
    +              Port x configuration bits (y =
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              OT10
    +              Port x configuration bits (y =
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              OT9
    +              Port x configuration bits (y =
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              OT8
    +              Port x configuration bits (y =
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              OT7
    +              Port x configuration bits (y =
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              OT6
    +              Port x configuration bits (y =
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              OT5
    +              Port x configuration bits (y =
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              OT4
    +              Port x configuration bits (y =
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              OT3
    +              Port x configuration bits (y =
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              OT2
    +              Port x configuration bits (y =
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              OT1
    +              Port x configuration bits (y =
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              OT0
    +              Port x configuration bits (y =
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          OSPEEDR
    +          OSPEEDR
    +          GPIO port output speed
    +          register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OSPEED15
    +              Port x configuration bits (y =
    +              0..15)
    +              30
    +              2
    +            
    +            
    +              OSPEED14
    +              Port x configuration bits (y =
    +              0..15)
    +              28
    +              2
    +            
    +            
    +              OSPEED13
    +              Port x configuration bits (y =
    +              0..15)
    +              26
    +              2
    +            
    +            
    +              OSPEED12
    +              Port x configuration bits (y =
    +              0..15)
    +              24
    +              2
    +            
    +            
    +              OSPEED11
    +              Port x configuration bits (y =
    +              0..15)
    +              22
    +              2
    +            
    +            
    +              OSPEED10
    +              Port x configuration bits (y =
    +              0..15)
    +              20
    +              2
    +            
    +            
    +              OSPEED9
    +              Port x configuration bits (y =
    +              0..15)
    +              18
    +              2
    +            
    +            
    +              OSPEED8
    +              Port x configuration bits (y =
    +              0..15)
    +              16
    +              2
    +            
    +            
    +              OSPEED7
    +              Port x configuration bits (y =
    +              0..15)
    +              14
    +              2
    +            
    +            
    +              OSPEED6
    +              Port x configuration bits (y =
    +              0..15)
    +              12
    +              2
    +            
    +            
    +              OSPEED5
    +              Port x configuration bits (y =
    +              0..15)
    +              10
    +              2
    +            
    +            
    +              OSPEED4
    +              Port x configuration bits (y =
    +              0..15)
    +              8
    +              2
    +            
    +            
    +              OSPEED3
    +              Port x configuration bits (y =
    +              0..15)
    +              6
    +              2
    +            
    +            
    +              OSPEED2
    +              Port x configuration bits (y =
    +              0..15)
    +              4
    +              2
    +            
    +            
    +              OSPEED1
    +              Port x configuration bits (y =
    +              0..15)
    +              2
    +              2
    +            
    +            
    +              OSPEED0
    +              Port x configuration bits (y =
    +              0..15)
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          PUPDR
    +          PUPDR
    +          GPIO port pull-up/pull-down
    +          register
    +          0xC
    +          0x20
    +          read-write
    +          0x24000000
    +          
    +            
    +              PUPD15
    +              Port x configuration bits (y =
    +              0..15)
    +              30
    +              2
    +            
    +            
    +              PUPD14
    +              Port x configuration bits (y =
    +              0..15)
    +              28
    +              2
    +            
    +            
    +              PUPD13
    +              Port x configuration bits (y =
    +              0..15)
    +              26
    +              2
    +            
    +            
    +              PUPD12
    +              Port x configuration bits (y =
    +              0..15)
    +              24
    +              2
    +            
    +            
    +              PUPD11
    +              Port x configuration bits (y =
    +              0..15)
    +              22
    +              2
    +            
    +            
    +              PUPD10
    +              Port x configuration bits (y =
    +              0..15)
    +              20
    +              2
    +            
    +            
    +              PUPD9
    +              Port x configuration bits (y =
    +              0..15)
    +              18
    +              2
    +            
    +            
    +              PUPD8
    +              Port x configuration bits (y =
    +              0..15)
    +              16
    +              2
    +            
    +            
    +              PUPD7
    +              Port x configuration bits (y =
    +              0..15)
    +              14
    +              2
    +            
    +            
    +              PUPD6
    +              Port x configuration bits (y =
    +              0..15)
    +              12
    +              2
    +            
    +            
    +              PUPD5
    +              Port x configuration bits (y =
    +              0..15)
    +              10
    +              2
    +            
    +            
    +              PUPD4
    +              Port x configuration bits (y =
    +              0..15)
    +              8
    +              2
    +            
    +            
    +              PUPD3
    +              Port x configuration bits (y =
    +              0..15)
    +              6
    +              2
    +            
    +            
    +              PUPD2
    +              Port x configuration bits (y =
    +              0..15)
    +              4
    +              2
    +            
    +            
    +              PUPD1
    +              Port x configuration bits (y =
    +              0..15)
    +              2
    +              2
    +            
    +            
    +              PUPD0
    +              Port x configuration bits (y =
    +              0..15)
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          IDR
    +          IDR
    +          GPIO port input data register
    +          0x10
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              ID15
    +              Port input data bit (y =
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              ID14
    +              Port input data bit (y =
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              ID13
    +              Port input data bit (y =
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              ID12
    +              Port input data bit (y =
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              ID11
    +              Port input data bit (y =
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              ID10
    +              Port input data bit (y =
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              ID9
    +              Port input data bit (y =
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              ID8
    +              Port input data bit (y =
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              ID7
    +              Port input data bit (y =
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              ID6
    +              Port input data bit (y =
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              ID5
    +              Port input data bit (y =
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              ID4
    +              Port input data bit (y =
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              ID3
    +              Port input data bit (y =
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              ID2
    +              Port input data bit (y =
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              ID1
    +              Port input data bit (y =
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              ID0
    +              Port input data bit (y =
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ODR
    +          ODR
    +          GPIO port output data register
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OD15
    +              Port output data bit (y =
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              OD14
    +              Port output data bit (y =
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              OD13
    +              Port output data bit (y =
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              OD12
    +              Port output data bit (y =
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              OD11
    +              Port output data bit (y =
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              OD10
    +              Port output data bit (y =
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              OD9
    +              Port output data bit (y =
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              OD8
    +              Port output data bit (y =
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              OD7
    +              Port output data bit (y =
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              OD6
    +              Port output data bit (y =
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              OD5
    +              Port output data bit (y =
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              OD4
    +              Port output data bit (y =
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              OD3
    +              Port output data bit (y =
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              OD2
    +              Port output data bit (y =
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              OD1
    +              Port output data bit (y =
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              OD0
    +              Port output data bit (y =
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          BSRR
    +          BSRR
    +          GPIO port bit set/reset
    +          register
    +          0x18
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              BR15
    +              Port x reset bit y (y =
    +              0..15)
    +              31
    +              1
    +            
    +            
    +              BR14
    +              Port x reset bit y (y =
    +              0..15)
    +              30
    +              1
    +            
    +            
    +              BR13
    +              Port x reset bit y (y =
    +              0..15)
    +              29
    +              1
    +            
    +            
    +              BR12
    +              Port x reset bit y (y =
    +              0..15)
    +              28
    +              1
    +            
    +            
    +              BR11
    +              Port x reset bit y (y =
    +              0..15)
    +              27
    +              1
    +            
    +            
    +              BR10
    +              Port x reset bit y (y =
    +              0..15)
    +              26
    +              1
    +            
    +            
    +              BR9
    +              Port x reset bit y (y =
    +              0..15)
    +              25
    +              1
    +            
    +            
    +              BR8
    +              Port x reset bit y (y =
    +              0..15)
    +              24
    +              1
    +            
    +            
    +              BR7
    +              Port x reset bit y (y =
    +              0..15)
    +              23
    +              1
    +            
    +            
    +              BR6
    +              Port x reset bit y (y =
    +              0..15)
    +              22
    +              1
    +            
    +            
    +              BR5
    +              Port x reset bit y (y =
    +              0..15)
    +              21
    +              1
    +            
    +            
    +              BR4
    +              Port x reset bit y (y =
    +              0..15)
    +              20
    +              1
    +            
    +            
    +              BR3
    +              Port x reset bit y (y =
    +              0..15)
    +              19
    +              1
    +            
    +            
    +              BR2
    +              Port x reset bit y (y =
    +              0..15)
    +              18
    +              1
    +            
    +            
    +              BR1
    +              Port x reset bit y (y =
    +              0..15)
    +              17
    +              1
    +            
    +            
    +              BR0
    +              Port x reset bit y (y =
    +              0..15)
    +              16
    +              1
    +            
    +            
    +              BS15
    +              Port x set bit y (y=
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              BS14
    +              Port x set bit y (y=
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              BS13
    +              Port x set bit y (y=
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              BS12
    +              Port x set bit y (y=
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              BS11
    +              Port x set bit y (y=
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              BS10
    +              Port x set bit y (y=
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              BS9
    +              Port x set bit y (y=
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              BS8
    +              Port x set bit y (y=
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              BS7
    +              Port x set bit y (y=
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              BS6
    +              Port x set bit y (y=
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              BS5
    +              Port x set bit y (y=
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              BS4
    +              Port x set bit y (y=
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              BS3
    +              Port x set bit y (y=
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              BS2
    +              Port x set bit y (y=
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              BS1
    +              Port x set bit y (y=
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              BS0
    +              Port x set bit y (y=
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          LCKR
    +          LCKR
    +          GPIO port configuration lock
    +          register
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              LCKK
    +              Port x lock bit y (y=
    +              0..15)
    +              16
    +              1
    +            
    +            
    +              LCK15
    +              Port x lock bit y (y=
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              LCK14
    +              Port x lock bit y (y=
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              LCK13
    +              Port x lock bit y (y=
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              LCK12
    +              Port x lock bit y (y=
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              LCK11
    +              Port x lock bit y (y=
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              LCK10
    +              Port x lock bit y (y=
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              LCK9
    +              Port x lock bit y (y=
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              LCK8
    +              Port x lock bit y (y=
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              LCK7
    +              Port x lock bit y (y=
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              LCK6
    +              Port x lock bit y (y=
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              LCK5
    +              Port x lock bit y (y=
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              LCK4
    +              Port x lock bit y (y=
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              LCK3
    +              Port x lock bit y (y=
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              LCK2
    +              Port x lock bit y (y=
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              LCK1
    +              Port x lock bit y (y=
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              LCK0
    +              Port x lock bit y (y=
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          AFRL
    +          AFRL
    +          GPIO alternate function low
    +          register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AFSEL7
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              28
    +              4
    +            
    +            
    +              AFSEL6
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              24
    +              4
    +            
    +            
    +              AFSEL5
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              20
    +              4
    +            
    +            
    +              AFSEL4
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              16
    +              4
    +            
    +            
    +              AFSEL3
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              12
    +              4
    +            
    +            
    +              AFSEL2
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              8
    +              4
    +            
    +            
    +              AFSEL1
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              4
    +              4
    +            
    +            
    +              AFSEL0
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          AFRH
    +          AFRH
    +          GPIO alternate function high
    +          register
    +          0x24
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AFSEL15
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              28
    +              4
    +            
    +            
    +              AFSEL14
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              24
    +              4
    +            
    +            
    +              AFSEL13
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              20
    +              4
    +            
    +            
    +              AFSEL12
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              16
    +              4
    +            
    +            
    +              AFSEL11
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              12
    +              4
    +            
    +            
    +              AFSEL10
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              8
    +              4
    +            
    +            
    +              AFSEL9
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              4
    +              4
    +            
    +            
    +              AFSEL8
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          BRR
    +          BRR
    +          GPIO port bit reset register
    +          0x28
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              BR15
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              15
    +              1
    +            
    +            
    +              BR14
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              14
    +              1
    +            
    +            
    +              BR13
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              13
    +              1
    +            
    +            
    +              BR12
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              12
    +              1
    +            
    +            
    +              BR11
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              11
    +              1
    +            
    +            
    +              BR10
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              10
    +              1
    +            
    +            
    +              BR9
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              9
    +              1
    +            
    +            
    +              BR8
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              8
    +              1
    +            
    +            
    +              BR7
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              7
    +              1
    +            
    +            
    +              BR6
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              6
    +              1
    +            
    +            
    +              BR5
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              5
    +              1
    +            
    +            
    +              BR4
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              4
    +              1
    +            
    +            
    +              BR3
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              3
    +              1
    +            
    +            
    +              BR2
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              2
    +              1
    +            
    +            
    +              BR1
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              1
    +              1
    +            
    +            
    +              BR0
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              0
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      GPIOB
    +      General-purpose I/Os
    +      GPIO
    +      0x50000400
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          MODER
    +          MODER
    +          GPIO port mode register
    +          0x0
    +          0x20
    +          read-write
    +          0xFFFFFFFF
    +          
    +            
    +              MODE15
    +              Port x configuration bits (y =
    +              0..15)
    +              30
    +              2
    +            
    +            
    +              MODE14
    +              Port x configuration bits (y =
    +              0..15)
    +              28
    +              2
    +            
    +            
    +              MODE13
    +              Port x configuration bits (y =
    +              0..15)
    +              26
    +              2
    +            
    +            
    +              MODE12
    +              Port x configuration bits (y =
    +              0..15)
    +              24
    +              2
    +            
    +            
    +              MODE11
    +              Port x configuration bits (y =
    +              0..15)
    +              22
    +              2
    +            
    +            
    +              MODE10
    +              Port x configuration bits (y =
    +              0..15)
    +              20
    +              2
    +            
    +            
    +              MODE9
    +              Port x configuration bits (y =
    +              0..15)
    +              18
    +              2
    +            
    +            
    +              MODE8
    +              Port x configuration bits (y =
    +              0..15)
    +              16
    +              2
    +            
    +            
    +              MODE7
    +              Port x configuration bits (y =
    +              0..15)
    +              14
    +              2
    +            
    +            
    +              MODE6
    +              Port x configuration bits (y =
    +              0..15)
    +              12
    +              2
    +            
    +            
    +              MODE5
    +              Port x configuration bits (y =
    +              0..15)
    +              10
    +              2
    +            
    +            
    +              MODE4
    +              Port x configuration bits (y =
    +              0..15)
    +              8
    +              2
    +            
    +            
    +              MODE3
    +              Port x configuration bits (y =
    +              0..15)
    +              6
    +              2
    +            
    +            
    +              MODE2
    +              Port x configuration bits (y =
    +              0..15)
    +              4
    +              2
    +            
    +            
    +              MODE1
    +              Port x configuration bits (y =
    +              0..15)
    +              2
    +              2
    +            
    +            
    +              MODE0
    +              Port x configuration bits (y =
    +              0..15)
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          OTYPER
    +          OTYPER
    +          GPIO port output type register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OT15
    +              Port x configuration bits (y =
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              OT14
    +              Port x configuration bits (y =
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              OT13
    +              Port x configuration bits (y =
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              OT12
    +              Port x configuration bits (y =
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              OT11
    +              Port x configuration bits (y =
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              OT10
    +              Port x configuration bits (y =
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              OT9
    +              Port x configuration bits (y =
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              OT8
    +              Port x configuration bits (y =
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              OT7
    +              Port x configuration bits (y =
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              OT6
    +              Port x configuration bits (y =
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              OT5
    +              Port x configuration bits (y =
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              OT4
    +              Port x configuration bits (y =
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              OT3
    +              Port x configuration bits (y =
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              OT2
    +              Port x configuration bits (y =
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              OT1
    +              Port x configuration bits (y =
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              OT0
    +              Port x configuration bits (y =
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          OSPEEDR
    +          OSPEEDR
    +          GPIO port output speed
    +          register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OSPEED15
    +              Port x configuration bits (y =
    +              0..15)
    +              30
    +              2
    +            
    +            
    +              OSPEED14
    +              Port x configuration bits (y =
    +              0..15)
    +              28
    +              2
    +            
    +            
    +              OSPEED13
    +              Port x configuration bits (y =
    +              0..15)
    +              26
    +              2
    +            
    +            
    +              OSPEED12
    +              Port x configuration bits (y =
    +              0..15)
    +              24
    +              2
    +            
    +            
    +              OSPEED11
    +              Port x configuration bits (y =
    +              0..15)
    +              22
    +              2
    +            
    +            
    +              OSPEED10
    +              Port x configuration bits (y =
    +              0..15)
    +              20
    +              2
    +            
    +            
    +              OSPEED9
    +              Port x configuration bits (y =
    +              0..15)
    +              18
    +              2
    +            
    +            
    +              OSPEED8
    +              Port x configuration bits (y =
    +              0..15)
    +              16
    +              2
    +            
    +            
    +              OSPEED7
    +              Port x configuration bits (y =
    +              0..15)
    +              14
    +              2
    +            
    +            
    +              OSPEED6
    +              Port x configuration bits (y =
    +              0..15)
    +              12
    +              2
    +            
    +            
    +              OSPEED5
    +              Port x configuration bits (y =
    +              0..15)
    +              10
    +              2
    +            
    +            
    +              OSPEED4
    +              Port x configuration bits (y =
    +              0..15)
    +              8
    +              2
    +            
    +            
    +              OSPEED3
    +              Port x configuration bits (y =
    +              0..15)
    +              6
    +              2
    +            
    +            
    +              OSPEED2
    +              Port x configuration bits (y =
    +              0..15)
    +              4
    +              2
    +            
    +            
    +              OSPEED1
    +              Port x configuration bits (y =
    +              0..15)
    +              2
    +              2
    +            
    +            
    +              OSPEED0
    +              Port x configuration bits (y =
    +              0..15)
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          PUPDR
    +          PUPDR
    +          GPIO port pull-up/pull-down
    +          register
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PUPD15
    +              Port x configuration bits (y =
    +              0..15)
    +              30
    +              2
    +            
    +            
    +              PUPD14
    +              Port x configuration bits (y =
    +              0..15)
    +              28
    +              2
    +            
    +            
    +              PUPD13
    +              Port x configuration bits (y =
    +              0..15)
    +              26
    +              2
    +            
    +            
    +              PUPD12
    +              Port x configuration bits (y =
    +              0..15)
    +              24
    +              2
    +            
    +            
    +              PUPD11
    +              Port x configuration bits (y =
    +              0..15)
    +              22
    +              2
    +            
    +            
    +              PUPD10
    +              Port x configuration bits (y =
    +              0..15)
    +              20
    +              2
    +            
    +            
    +              PUPD9
    +              Port x configuration bits (y =
    +              0..15)
    +              18
    +              2
    +            
    +            
    +              PUPD8
    +              Port x configuration bits (y =
    +              0..15)
    +              16
    +              2
    +            
    +            
    +              PUPD7
    +              Port x configuration bits (y =
    +              0..15)
    +              14
    +              2
    +            
    +            
    +              PUPD6
    +              Port x configuration bits (y =
    +              0..15)
    +              12
    +              2
    +            
    +            
    +              PUPD5
    +              Port x configuration bits (y =
    +              0..15)
    +              10
    +              2
    +            
    +            
    +              PUPD4
    +              Port x configuration bits (y =
    +              0..15)
    +              8
    +              2
    +            
    +            
    +              PUPD3
    +              Port x configuration bits (y =
    +              0..15)
    +              6
    +              2
    +            
    +            
    +              PUPD2
    +              Port x configuration bits (y =
    +              0..15)
    +              4
    +              2
    +            
    +            
    +              PUPD1
    +              Port x configuration bits (y =
    +              0..15)
    +              2
    +              2
    +            
    +            
    +              PUPD0
    +              Port x configuration bits (y =
    +              0..15)
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          IDR
    +          IDR
    +          GPIO port input data register
    +          0x10
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              ID15
    +              Port input data bit (y =
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              ID14
    +              Port input data bit (y =
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              ID13
    +              Port input data bit (y =
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              ID12
    +              Port input data bit (y =
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              ID11
    +              Port input data bit (y =
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              ID10
    +              Port input data bit (y =
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              ID9
    +              Port input data bit (y =
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              ID8
    +              Port input data bit (y =
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              ID7
    +              Port input data bit (y =
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              ID6
    +              Port input data bit (y =
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              ID5
    +              Port input data bit (y =
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              ID4
    +              Port input data bit (y =
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              ID3
    +              Port input data bit (y =
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              ID2
    +              Port input data bit (y =
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              ID1
    +              Port input data bit (y =
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              ID0
    +              Port input data bit (y =
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ODR
    +          ODR
    +          GPIO port output data register
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OD15
    +              Port output data bit (y =
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              OD14
    +              Port output data bit (y =
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              OD13
    +              Port output data bit (y =
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              OD12
    +              Port output data bit (y =
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              OD11
    +              Port output data bit (y =
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              OD10
    +              Port output data bit (y =
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              OD9
    +              Port output data bit (y =
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              OD8
    +              Port output data bit (y =
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              OD7
    +              Port output data bit (y =
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              OD6
    +              Port output data bit (y =
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              OD5
    +              Port output data bit (y =
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              OD4
    +              Port output data bit (y =
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              OD3
    +              Port output data bit (y =
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              OD2
    +              Port output data bit (y =
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              OD1
    +              Port output data bit (y =
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              OD0
    +              Port output data bit (y =
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          BSRR
    +          BSRR
    +          GPIO port bit set/reset
    +          register
    +          0x18
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              BR15
    +              Port x reset bit y (y =
    +              0..15)
    +              31
    +              1
    +            
    +            
    +              BR14
    +              Port x reset bit y (y =
    +              0..15)
    +              30
    +              1
    +            
    +            
    +              BR13
    +              Port x reset bit y (y =
    +              0..15)
    +              29
    +              1
    +            
    +            
    +              BR12
    +              Port x reset bit y (y =
    +              0..15)
    +              28
    +              1
    +            
    +            
    +              BR11
    +              Port x reset bit y (y =
    +              0..15)
    +              27
    +              1
    +            
    +            
    +              BR10
    +              Port x reset bit y (y =
    +              0..15)
    +              26
    +              1
    +            
    +            
    +              BR9
    +              Port x reset bit y (y =
    +              0..15)
    +              25
    +              1
    +            
    +            
    +              BR8
    +              Port x reset bit y (y =
    +              0..15)
    +              24
    +              1
    +            
    +            
    +              BR7
    +              Port x reset bit y (y =
    +              0..15)
    +              23
    +              1
    +            
    +            
    +              BR6
    +              Port x reset bit y (y =
    +              0..15)
    +              22
    +              1
    +            
    +            
    +              BR5
    +              Port x reset bit y (y =
    +              0..15)
    +              21
    +              1
    +            
    +            
    +              BR4
    +              Port x reset bit y (y =
    +              0..15)
    +              20
    +              1
    +            
    +            
    +              BR3
    +              Port x reset bit y (y =
    +              0..15)
    +              19
    +              1
    +            
    +            
    +              BR2
    +              Port x reset bit y (y =
    +              0..15)
    +              18
    +              1
    +            
    +            
    +              BR1
    +              Port x reset bit y (y =
    +              0..15)
    +              17
    +              1
    +            
    +            
    +              BR0
    +              Port x reset bit y (y =
    +              0..15)
    +              16
    +              1
    +            
    +            
    +              BS15
    +              Port x set bit y (y=
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              BS14
    +              Port x set bit y (y=
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              BS13
    +              Port x set bit y (y=
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              BS12
    +              Port x set bit y (y=
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              BS11
    +              Port x set bit y (y=
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              BS10
    +              Port x set bit y (y=
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              BS9
    +              Port x set bit y (y=
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              BS8
    +              Port x set bit y (y=
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              BS7
    +              Port x set bit y (y=
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              BS6
    +              Port x set bit y (y=
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              BS5
    +              Port x set bit y (y=
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              BS4
    +              Port x set bit y (y=
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              BS3
    +              Port x set bit y (y=
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              BS2
    +              Port x set bit y (y=
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              BS1
    +              Port x set bit y (y=
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              BS0
    +              Port x set bit y (y=
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          LCKR
    +          LCKR
    +          GPIO port configuration lock
    +          register
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              LCKK
    +              Port x lock bit y (y=
    +              0..15)
    +              16
    +              1
    +            
    +            
    +              LCK15
    +              Port x lock bit y (y=
    +              0..15)
    +              15
    +              1
    +            
    +            
    +              LCK14
    +              Port x lock bit y (y=
    +              0..15)
    +              14
    +              1
    +            
    +            
    +              LCK13
    +              Port x lock bit y (y=
    +              0..15)
    +              13
    +              1
    +            
    +            
    +              LCK12
    +              Port x lock bit y (y=
    +              0..15)
    +              12
    +              1
    +            
    +            
    +              LCK11
    +              Port x lock bit y (y=
    +              0..15)
    +              11
    +              1
    +            
    +            
    +              LCK10
    +              Port x lock bit y (y=
    +              0..15)
    +              10
    +              1
    +            
    +            
    +              LCK9
    +              Port x lock bit y (y=
    +              0..15)
    +              9
    +              1
    +            
    +            
    +              LCK8
    +              Port x lock bit y (y=
    +              0..15)
    +              8
    +              1
    +            
    +            
    +              LCK7
    +              Port x lock bit y (y=
    +              0..15)
    +              7
    +              1
    +            
    +            
    +              LCK6
    +              Port x lock bit y (y=
    +              0..15)
    +              6
    +              1
    +            
    +            
    +              LCK5
    +              Port x lock bit y (y=
    +              0..15)
    +              5
    +              1
    +            
    +            
    +              LCK4
    +              Port x lock bit y (y=
    +              0..15)
    +              4
    +              1
    +            
    +            
    +              LCK3
    +              Port x lock bit y (y=
    +              0..15)
    +              3
    +              1
    +            
    +            
    +              LCK2
    +              Port x lock bit y (y=
    +              0..15)
    +              2
    +              1
    +            
    +            
    +              LCK1
    +              Port x lock bit y (y=
    +              0..15)
    +              1
    +              1
    +            
    +            
    +              LCK0
    +              Port x lock bit y (y=
    +              0..15)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          AFRL
    +          AFRL
    +          GPIO alternate function low
    +          register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AFSEL7
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              28
    +              4
    +            
    +            
    +              AFSEL6
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              24
    +              4
    +            
    +            
    +              AFSEL5
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              20
    +              4
    +            
    +            
    +              AFSEL4
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              16
    +              4
    +            
    +            
    +              AFSEL3
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              12
    +              4
    +            
    +            
    +              AFSEL2
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              8
    +              4
    +            
    +            
    +              AFSEL1
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              4
    +              4
    +            
    +            
    +              AFSEL0
    +              Alternate function selection for port x
    +              pin y (y = 0..7)
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          AFRH
    +          AFRH
    +          GPIO alternate function high
    +          register
    +          0x24
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AFSEL15
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              28
    +              4
    +            
    +            
    +              AFSEL14
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              24
    +              4
    +            
    +            
    +              AFSEL13
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              20
    +              4
    +            
    +            
    +              AFSEL12
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              16
    +              4
    +            
    +            
    +              AFSEL11
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              12
    +              4
    +            
    +            
    +              AFSEL10
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              8
    +              4
    +            
    +            
    +              AFSEL9
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              4
    +              4
    +            
    +            
    +              AFSEL8
    +              Alternate function selection for port x
    +              pin y (y = 8..15)
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          BRR
    +          BRR
    +          GPIO port bit reset register
    +          0x28
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              BR15
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              15
    +              1
    +            
    +            
    +              BR14
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              14
    +              1
    +            
    +            
    +              BR13
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              13
    +              1
    +            
    +            
    +              BR12
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              12
    +              1
    +            
    +            
    +              BR11
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              11
    +              1
    +            
    +            
    +              BR10
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              10
    +              1
    +            
    +            
    +              BR9
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              9
    +              1
    +            
    +            
    +              BR8
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              8
    +              1
    +            
    +            
    +              BR7
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              7
    +              1
    +            
    +            
    +              BR6
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              6
    +              1
    +            
    +            
    +              BR5
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              5
    +              1
    +            
    +            
    +              BR4
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              4
    +              1
    +            
    +            
    +              BR3
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              3
    +              1
    +            
    +            
    +              BR2
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              2
    +              1
    +            
    +            
    +              BR1
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              1
    +              1
    +            
    +            
    +              BR0
    +              Port x Reset bit y (y= 0 ..
    +              15)
    +              0
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      GPIOC
    +      0x50000800
    +    
    +    
    +      GPIOD
    +      0x50000C00
    +    
    +    
    +      GPIOH
    +      0x50001C00
    +    
    +    
    +      GPIOE
    +      0x50001000
    +    
    +    
    +      LPTIM
    +      Low power timer
    +      LPTIM
    +      0x40007C00
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        LPTIM1
    +        LPTIMER1 interrupt through
    +        EXTI29
    +        13
    +      
    +      
    +        
    +          ISR
    +          ISR
    +          Interrupt and Status Register
    +          0x0
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              DOWN
    +              Counter direction change up to
    +              down
    +              6
    +              1
    +            
    +            
    +              UP
    +              Counter direction change down to
    +              up
    +              5
    +              1
    +            
    +            
    +              ARROK
    +              Autoreload register update
    +              OK
    +              4
    +              1
    +            
    +            
    +              CMPOK
    +              Compare register update OK
    +              3
    +              1
    +            
    +            
    +              EXTTRIG
    +              External trigger edge
    +              event
    +              2
    +              1
    +            
    +            
    +              ARRM
    +              Autoreload match
    +              1
    +              1
    +            
    +            
    +              CMPM
    +              Compare match
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ICR
    +          ICR
    +          Interrupt Clear Register
    +          0x4
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              DOWNCF
    +              Direction change to down Clear
    +              Flag
    +              6
    +              1
    +            
    +            
    +              UPCF
    +              Direction change to UP Clear
    +              Flag
    +              5
    +              1
    +            
    +            
    +              ARROKCF
    +              Autoreload register update OK Clear
    +              Flag
    +              4
    +              1
    +            
    +            
    +              CMPOKCF
    +              Compare register update OK Clear
    +              Flag
    +              3
    +              1
    +            
    +            
    +              EXTTRIGCF
    +              External trigger valid edge Clear
    +              Flag
    +              2
    +              1
    +            
    +            
    +              ARRMCF
    +              Autoreload match Clear
    +              Flag
    +              1
    +              1
    +            
    +            
    +              CMPMCF
    +              compare match Clear Flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          IER
    +          IER
    +          Interrupt Enable Register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DOWNIE
    +              Direction change to down Interrupt
    +              Enable
    +              6
    +              1
    +            
    +            
    +              UPIE
    +              Direction change to UP Interrupt
    +              Enable
    +              5
    +              1
    +            
    +            
    +              ARROKIE
    +              Autoreload register update OK Interrupt
    +              Enable
    +              4
    +              1
    +            
    +            
    +              CMPOKIE
    +              Compare register update OK Interrupt
    +              Enable
    +              3
    +              1
    +            
    +            
    +              EXTTRIGIE
    +              External trigger valid edge Interrupt
    +              Enable
    +              2
    +              1
    +            
    +            
    +              ARRMIE
    +              Autoreload match Interrupt
    +              Enable
    +              1
    +              1
    +            
    +            
    +              CMPMIE
    +              Compare match Interrupt
    +              Enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CFGR
    +          CFGR
    +          Configuration Register
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ENC
    +              Encoder mode enable
    +              24
    +              1
    +            
    +            
    +              COUNTMODE
    +              counter mode enabled
    +              23
    +              1
    +            
    +            
    +              PRELOAD
    +              Registers update mode
    +              22
    +              1
    +            
    +            
    +              WAVPOL
    +              Waveform shape polarity
    +              21
    +              1
    +            
    +            
    +              WAVE
    +              Waveform shape
    +              20
    +              1
    +            
    +            
    +              TIMOUT
    +              Timeout enable
    +              19
    +              1
    +            
    +            
    +              TRIGEN
    +              Trigger enable and
    +              polarity
    +              17
    +              2
    +            
    +            
    +              TRIGSEL
    +              Trigger selector
    +              13
    +              3
    +            
    +            
    +              PRESC
    +              Clock prescaler
    +              9
    +              3
    +            
    +            
    +              TRGFLT
    +              Configurable digital filter for
    +              trigger
    +              6
    +              2
    +            
    +            
    +              CKFLT
    +              Configurable digital filter for external
    +              clock
    +              3
    +              2
    +            
    +            
    +              CKPOL
    +              Clock Polarity
    +              1
    +              2
    +            
    +            
    +              CKSEL
    +              Clock selector
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CR
    +          CR
    +          Control Register
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CNTSTRT
    +              Timer start in continuous
    +              mode
    +              2
    +              1
    +            
    +            
    +              SNGSTRT
    +              LPTIM start in single mode
    +              1
    +              1
    +            
    +            
    +              ENABLE
    +              LPTIM Enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CMP
    +          CMP
    +          Compare Register
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CMP
    +              Compare value.
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          ARR
    +          ARR
    +          Autoreload Register
    +          0x18
    +          0x20
    +          read-write
    +          0x00000001
    +          
    +            
    +              ARR
    +              Auto reload value.
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CNT
    +          CNT
    +          Counter Register
    +          0x1C
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CNT
    +              Counter value.
    +              0
    +              16
    +            
    +          
    +        
    +      
    +    
    +    
    +      RNG
    +      Random number generator
    +      RNG
    +      0x40025000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          CR
    +          CR
    +          control register
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              IE
    +              Interrupt enable
    +              3
    +              1
    +            
    +            
    +              RNGEN
    +              Random number generator
    +              enable
    +              2
    +              1
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          status register
    +          0x4
    +          0x20
    +          0x00000000
    +          
    +            
    +              SEIS
    +              Seed error interrupt
    +              status
    +              6
    +              1
    +              read-write
    +            
    +            
    +              CEIS
    +              Clock error interrupt
    +              status
    +              5
    +              1
    +              read-write
    +            
    +            
    +              SECS
    +              Seed error current status
    +              2
    +              1
    +              read-only
    +            
    +            
    +              CECS
    +              Clock error current status
    +              1
    +              1
    +              read-only
    +            
    +            
    +              DRDY
    +              Data ready
    +              0
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          DR
    +          DR
    +          data register
    +          0x8
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              RNDATA
    +              Random data
    +              0
    +              32
    +            
    +          
    +        
    +      
    +    
    +    
    +      RTC
    +      Real-time clock
    +      RTC
    +      0x40002800
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        RTC
    +        RTC global interrupt
    +        2
    +      
    +      
    +        
    +          TR
    +          TR
    +          RTC time register
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PM
    +              AM/PM notation
    +              22
    +              1
    +            
    +            
    +              HT
    +              Hour tens in BCD format
    +              20
    +              2
    +            
    +            
    +              HU
    +              Hour units in BCD format
    +              16
    +              4
    +            
    +            
    +              MNT
    +              Minute tens in BCD format
    +              12
    +              3
    +            
    +            
    +              MNU
    +              Minute units in BCD format
    +              8
    +              4
    +            
    +            
    +              ST
    +              Second tens in BCD format
    +              4
    +              3
    +            
    +            
    +              SU
    +              Second units in BCD format
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          DR
    +          DR
    +          RTC date register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              YT
    +              Year tens in BCD format
    +              20
    +              4
    +            
    +            
    +              YU
    +              Year units in BCD format
    +              16
    +              4
    +            
    +            
    +              WDU
    +              Week day units
    +              13
    +              3
    +            
    +            
    +              MT
    +              Month tens in BCD format
    +              12
    +              1
    +            
    +            
    +              MU
    +              Month units in BCD format
    +              8
    +              4
    +            
    +            
    +              DT
    +              Date tens in BCD format
    +              4
    +              2
    +            
    +            
    +              DU
    +              Date units in BCD format
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          CR
    +          CR
    +          RTC control register
    +          0x8
    +          0x20
    +          0x00000000
    +          
    +            
    +              COE
    +              Calibration output enable
    +              23
    +              1
    +              read-write
    +            
    +            
    +              OSEL
    +              Output selection
    +              21
    +              2
    +              read-write
    +            
    +            
    +              POL
    +              Output polarity
    +              20
    +              1
    +              read-write
    +            
    +            
    +              COSEL
    +              Calibration output
    +              selection
    +              19
    +              1
    +              read-write
    +            
    +            
    +              BKP
    +              Backup
    +              18
    +              1
    +              read-write
    +            
    +            
    +              SUB1H
    +              Subtract 1 hour (winter time
    +              change)
    +              17
    +              1
    +              write-only
    +            
    +            
    +              ADD1H
    +              Add 1 hour (summer time
    +              change)
    +              16
    +              1
    +              write-only
    +            
    +            
    +              TSIE
    +              Time-stamp interrupt
    +              enable
    +              15
    +              1
    +              read-write
    +            
    +            
    +              WUTIE
    +              Wakeup timer interrupt
    +              enable
    +              14
    +              1
    +              read-write
    +            
    +            
    +              ALRBIE
    +              Alarm B interrupt enable
    +              13
    +              1
    +              read-write
    +            
    +            
    +              ALRAIE
    +              Alarm A interrupt enable
    +              12
    +              1
    +              read-write
    +            
    +            
    +              TSE
    +              timestamp enable
    +              11
    +              1
    +              read-write
    +            
    +            
    +              WUTE
    +              Wakeup timer enable
    +              10
    +              1
    +              read-write
    +            
    +            
    +              ALRBE
    +              Alarm B enable
    +              9
    +              1
    +              read-write
    +            
    +            
    +              ALRAE
    +              Alarm A enable
    +              8
    +              1
    +              read-write
    +            
    +            
    +              FMT
    +              Hour format
    +              6
    +              1
    +              read-write
    +            
    +            
    +              BYPSHAD
    +              Bypass the shadow
    +              registers
    +              5
    +              1
    +              read-write
    +            
    +            
    +              REFCKON
    +              RTC_REFIN reference clock detection
    +              enable (50 or 60 Hz)
    +              4
    +              1
    +              read-write
    +            
    +            
    +              TSEDGE
    +              Time-stamp event active
    +              edge
    +              3
    +              1
    +              read-write
    +            
    +            
    +              WUCKSEL
    +              Wakeup clock selection
    +              0
    +              3
    +              read-write
    +            
    +          
    +        
    +        
    +          ISR
    +          ISR
    +          RTC initialization and status
    +          register
    +          0xC
    +          0x20
    +          0x00000000
    +          
    +            
    +              TAMP2F
    +              RTC_TAMP2 detection flag
    +              14
    +              1
    +              read-write
    +            
    +            
    +              TAMP1F
    +              RTC_TAMP1 detection flag
    +              13
    +              1
    +              read-write
    +            
    +            
    +              TSOVF
    +              Time-stamp overflow flag
    +              12
    +              1
    +              read-write
    +            
    +            
    +              TSF
    +              Time-stamp flag
    +              11
    +              1
    +              read-write
    +            
    +            
    +              WUTF
    +              Wakeup timer flag
    +              10
    +              1
    +              read-write
    +            
    +            
    +              ALRBF
    +              Alarm B flag
    +              9
    +              1
    +              read-write
    +            
    +            
    +              ALRAF
    +              Alarm A flag
    +              8
    +              1
    +              read-write
    +            
    +            
    +              INIT
    +              Initialization mode
    +              7
    +              1
    +              read-write
    +            
    +            
    +              INITF
    +              Initialization flag
    +              6
    +              1
    +              read-only
    +            
    +            
    +              RSF
    +              Registers synchronization
    +              flag
    +              5
    +              1
    +              read-write
    +            
    +            
    +              INITS
    +              Initialization status flag
    +              4
    +              1
    +              read-only
    +            
    +            
    +              SHPF
    +              Shift operation pending
    +              3
    +              1
    +              read-only
    +            
    +            
    +              WUTWF
    +              Wakeup timer write flag
    +              2
    +              1
    +              read-only
    +            
    +            
    +              ALRBWF
    +              Alarm B write flag
    +              1
    +              1
    +              read-only
    +            
    +            
    +              ALRAWF
    +              Alarm A write flag
    +              0
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          PRER
    +          PRER
    +          RTC prescaler register
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PREDIV_A
    +              Asynchronous prescaler
    +              factor
    +              16
    +              7
    +            
    +            
    +              PREDIV_S
    +              Synchronous prescaler
    +              factor
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          WUTR
    +          WUTR
    +          RTC wakeup timer register
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              WUT
    +              Wakeup auto-reload value
    +              bits
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          ALRMAR
    +          ALRMAR
    +          RTC alarm A register
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MSK4
    +              Alarm A date mask
    +              31
    +              1
    +            
    +            
    +              WDSEL
    +              Week day selection
    +              30
    +              1
    +            
    +            
    +              DT
    +              Date tens in BCD format.
    +              28
    +              2
    +            
    +            
    +              DU
    +              Date units or day in BCD
    +              format.
    +              24
    +              4
    +            
    +            
    +              MSK3
    +              Alarm A hours mask
    +              23
    +              1
    +            
    +            
    +              PM
    +              AM/PM notation
    +              22
    +              1
    +            
    +            
    +              HT
    +              Hour tens in BCD format.
    +              20
    +              2
    +            
    +            
    +              HU
    +              Hour units in BCD format.
    +              16
    +              4
    +            
    +            
    +              MSK2
    +              Alarm A minutes mask
    +              15
    +              1
    +            
    +            
    +              MNT
    +              Minute tens in BCD format.
    +              12
    +              3
    +            
    +            
    +              MNU
    +              Minute units in BCD
    +              format.
    +              8
    +              4
    +            
    +            
    +              MSK1
    +              Alarm A seconds mask
    +              7
    +              1
    +            
    +            
    +              ST
    +              Second tens in BCD format.
    +              4
    +              3
    +            
    +            
    +              SU
    +              Second units in BCD
    +              format.
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          ALRMBR
    +          ALRMBR
    +          RTC alarm B register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MSK4
    +              Alarm B date mask
    +              31
    +              1
    +            
    +            
    +              WDSEL
    +              Week day selection
    +              30
    +              1
    +            
    +            
    +              DT
    +              Date tens in BCD format
    +              28
    +              2
    +            
    +            
    +              DU
    +              Date units or day in BCD
    +              format
    +              24
    +              4
    +            
    +            
    +              MSK3
    +              Alarm B hours mask
    +              23
    +              1
    +            
    +            
    +              PM
    +              AM/PM notation
    +              22
    +              1
    +            
    +            
    +              HT
    +              Hour tens in BCD format
    +              20
    +              2
    +            
    +            
    +              HU
    +              Hour units in BCD format
    +              16
    +              4
    +            
    +            
    +              MSK2
    +              Alarm B minutes mask
    +              15
    +              1
    +            
    +            
    +              MNT
    +              Minute tens in BCD format
    +              12
    +              3
    +            
    +            
    +              MNU
    +              Minute units in BCD format
    +              8
    +              4
    +            
    +            
    +              MSK1
    +              Alarm B seconds mask
    +              7
    +              1
    +            
    +            
    +              ST
    +              Second tens in BCD format
    +              4
    +              3
    +            
    +            
    +              SU
    +              Second units in BCD format
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          WPR
    +          WPR
    +          write protection register
    +          0x24
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              KEY
    +              Write protection key
    +              0
    +              8
    +            
    +          
    +        
    +        
    +          SSR
    +          SSR
    +          RTC sub second register
    +          0x28
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              SS
    +              Sub second value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          SHIFTR
    +          SHIFTR
    +          RTC shift control register
    +          0x2C
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              ADD1S
    +              Add one second
    +              31
    +              1
    +            
    +            
    +              SUBFS
    +              Subtract a fraction of a
    +              second
    +              0
    +              15
    +            
    +          
    +        
    +        
    +          TSTR
    +          TSTR
    +          RTC timestamp time register
    +          0x30
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              PM
    +              AM/PM notation
    +              22
    +              1
    +            
    +            
    +              HT
    +              Hour tens in BCD format.
    +              20
    +              2
    +            
    +            
    +              HU
    +              Hour units in BCD format.
    +              16
    +              4
    +            
    +            
    +              MNT
    +              Minute tens in BCD format.
    +              12
    +              3
    +            
    +            
    +              MNU
    +              Minute units in BCD
    +              format.
    +              8
    +              4
    +            
    +            
    +              ST
    +              Second tens in BCD format.
    +              4
    +              3
    +            
    +            
    +              SU
    +              Second units in BCD
    +              format.
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          TSDR
    +          TSDR
    +          RTC timestamp date register
    +          0x34
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              WDU
    +              Week day units
    +              13
    +              3
    +            
    +            
    +              MT
    +              Month tens in BCD format
    +              12
    +              1
    +            
    +            
    +              MU
    +              Month units in BCD format
    +              8
    +              4
    +            
    +            
    +              DT
    +              Date tens in BCD format
    +              4
    +              2
    +            
    +            
    +              DU
    +              Date units in BCD format
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          TSSSR
    +          TSSSR
    +          RTC time-stamp sub second
    +          register
    +          0x38
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              SS
    +              Sub second value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CALR
    +          CALR
    +          RTC calibration register
    +          0x3C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CALP
    +              Increase frequency of RTC by 488.5
    +              ppm
    +              15
    +              1
    +            
    +            
    +              CALW8
    +              Use a 8-second calibration cycle
    +              period
    +              14
    +              1
    +            
    +            
    +              CALW16
    +              Use a 16-second calibration cycle
    +              period
    +              13
    +              1
    +            
    +            
    +              CALM
    +              Calibration minus
    +              0
    +              9
    +            
    +          
    +        
    +        
    +          TAMPCR
    +          TAMPCR
    +          RTC tamper configuration
    +          register
    +          0x40
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              TAMP2MF
    +              Tamper 2 mask flag
    +              21
    +              1
    +            
    +            
    +              TAMP2NOERASE
    +              Tamper 2 no erase
    +              20
    +              1
    +            
    +            
    +              TAMP2IE
    +              Tamper 2 interrupt enable
    +              19
    +              1
    +            
    +            
    +              TAMP1MF
    +              Tamper 1 mask flag
    +              18
    +              1
    +            
    +            
    +              TAMP1NOERASE
    +              Tamper 1 no erase
    +              17
    +              1
    +            
    +            
    +              TAMP1IE
    +              Tamper 1 interrupt enable
    +              16
    +              1
    +            
    +            
    +              TAMPPUDIS
    +              RTC_TAMPx pull-up disable
    +              15
    +              1
    +            
    +            
    +              TAMPPRCH
    +              RTC_TAMPx precharge
    +              duration
    +              13
    +              2
    +            
    +            
    +              TAMPFLT
    +              RTC_TAMPx filter count
    +              11
    +              2
    +            
    +            
    +              TAMPFREQ
    +              Tamper sampling frequency
    +              8
    +              3
    +            
    +            
    +              TAMPTS
    +              Activate timestamp on tamper detection
    +              event
    +              7
    +              1
    +            
    +            
    +              TAMP2_TRG
    +              Active level for RTC_TAMP2
    +              input
    +              4
    +              1
    +            
    +            
    +              TAMP2E
    +              RTC_TAMP2 input detection
    +              enable
    +              3
    +              1
    +            
    +            
    +              TAMPIE
    +              Tamper interrupt enable
    +              2
    +              1
    +            
    +            
    +              TAMP1TRG
    +              Active level for RTC_TAMP1
    +              input
    +              1
    +              1
    +            
    +            
    +              TAMP1E
    +              RTC_TAMP1 input detection
    +              enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ALRMASSR
    +          ALRMASSR
    +          RTC alarm A sub second
    +          register
    +          0x44
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MASKSS
    +              Mask the most-significant bits starting
    +              at this bit
    +              24
    +              4
    +            
    +            
    +              SS
    +              Sub seconds value
    +              0
    +              15
    +            
    +          
    +        
    +        
    +          ALRMBSSR
    +          ALRMBSSR
    +          RTC alarm B sub second
    +          register
    +          0x48
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MASKSS
    +              Mask the most-significant bits starting
    +              at this bit
    +              24
    +              4
    +            
    +            
    +              SS
    +              Sub seconds value
    +              0
    +              15
    +            
    +          
    +        
    +        
    +          OR
    +          OR
    +          option register
    +          0x4C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              RTC_OUT_RMP
    +              RTC_ALARM on PC13 output
    +              type
    +              1
    +              1
    +            
    +            
    +              RTC_ALARM_TYPE
    +              RTC_ALARM on PC13 output
    +              type
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          BKP0R
    +          BKP0R
    +          RTC backup registers
    +          0x50
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              BKP
    +              BKP
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          BKP1R
    +          BKP1R
    +          RTC backup registers
    +          0x54
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              BKP
    +              BKP
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          BKP2R
    +          BKP2R
    +          RTC backup registers
    +          0x58
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              BKP
    +              BKP
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          BKP3R
    +          BKP3R
    +          RTC backup registers
    +          0x5C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              BKP
    +              BKP
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          BKP4R
    +          BKP4R
    +          RTC backup registers
    +          0x60
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              BKP
    +              BKP
    +              0
    +              32
    +            
    +          
    +        
    +      
    +    
    +    
    +      USART1
    +      Universal synchronous asynchronous receiver
    +      transmitter
    +      USART
    +      0x40013800
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          CR1
    +          CR1
    +          Control register 1
    +          0x0
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              M1
    +              Word length
    +              28
    +              1
    +            
    +            
    +              EOBIE
    +              End of Block interrupt
    +              enable
    +              27
    +              1
    +            
    +            
    +              RTOIE
    +              Receiver timeout interrupt
    +              enable
    +              26
    +              1
    +            
    +            
    +              DEAT4
    +              Driver Enable assertion
    +              time
    +              25
    +              1
    +            
    +            
    +              DEAT3
    +              DEAT3
    +              24
    +              1
    +            
    +            
    +              DEAT2
    +              DEAT2
    +              23
    +              1
    +            
    +            
    +              DEAT1
    +              DEAT1
    +              22
    +              1
    +            
    +            
    +              DEAT0
    +              DEAT0
    +              21
    +              1
    +            
    +            
    +              DEDT4
    +              Driver Enable de-assertion
    +              time
    +              20
    +              1
    +            
    +            
    +              DEDT3
    +              DEDT3
    +              19
    +              1
    +            
    +            
    +              DEDT2
    +              DEDT2
    +              18
    +              1
    +            
    +            
    +              DEDT1
    +              DEDT1
    +              17
    +              1
    +            
    +            
    +              DEDT0
    +              DEDT0
    +              16
    +              1
    +            
    +            
    +              OVER8
    +              Oversampling mode
    +              15
    +              1
    +            
    +            
    +              CMIE
    +              Character match interrupt
    +              enable
    +              14
    +              1
    +            
    +            
    +              MME
    +              Mute mode enable
    +              13
    +              1
    +            
    +            
    +              M0
    +              Word length
    +              12
    +              1
    +            
    +            
    +              WAKE
    +              Receiver wakeup method
    +              11
    +              1
    +            
    +            
    +              PCE
    +              Parity control enable
    +              10
    +              1
    +            
    +            
    +              PS
    +              Parity selection
    +              9
    +              1
    +            
    +            
    +              PEIE
    +              PE interrupt enable
    +              8
    +              1
    +            
    +            
    +              TXEIE
    +              interrupt enable
    +              7
    +              1
    +            
    +            
    +              TCIE
    +              Transmission complete interrupt
    +              enable
    +              6
    +              1
    +            
    +            
    +              RXNEIE
    +              RXNE interrupt enable
    +              5
    +              1
    +            
    +            
    +              IDLEIE
    +              IDLE interrupt enable
    +              4
    +              1
    +            
    +            
    +              TE
    +              Transmitter enable
    +              3
    +              1
    +            
    +            
    +              RE
    +              Receiver enable
    +              2
    +              1
    +            
    +            
    +              UESM
    +              USART enable in Stop mode
    +              1
    +              1
    +            
    +            
    +              UE
    +              USART enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CR2
    +          CR2
    +          Control register 2
    +          0x4
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              ADD4_7
    +              Address of the USART node
    +              28
    +              4
    +            
    +            
    +              ADD0_3
    +              Address of the USART node
    +              24
    +              4
    +            
    +            
    +              RTOEN
    +              Receiver timeout enable
    +              23
    +              1
    +            
    +            
    +              ABRMOD1
    +              Auto baud rate mode
    +              22
    +              1
    +            
    +            
    +              ABRMOD0
    +              ABRMOD0
    +              21
    +              1
    +            
    +            
    +              ABREN
    +              Auto baud rate enable
    +              20
    +              1
    +            
    +            
    +              MSBFIRST
    +              Most significant bit first
    +              19
    +              1
    +            
    +            
    +              TAINV
    +              Binary data inversion
    +              18
    +              1
    +            
    +            
    +              TXINV
    +              TX pin active level
    +              inversion
    +              17
    +              1
    +            
    +            
    +              RXINV
    +              RX pin active level
    +              inversion
    +              16
    +              1
    +            
    +            
    +              SWAP
    +              Swap TX/RX pins
    +              15
    +              1
    +            
    +            
    +              LINEN
    +              LIN mode enable
    +              14
    +              1
    +            
    +            
    +              STOP
    +              STOP bits
    +              12
    +              2
    +            
    +            
    +              CLKEN
    +              Clock enable
    +              11
    +              1
    +            
    +            
    +              CPOL
    +              Clock polarity
    +              10
    +              1
    +            
    +            
    +              CPHA
    +              Clock phase
    +              9
    +              1
    +            
    +            
    +              LBCL
    +              Last bit clock pulse
    +              8
    +              1
    +            
    +            
    +              LBDIE
    +              LIN break detection interrupt
    +              enable
    +              6
    +              1
    +            
    +            
    +              LBDL
    +              LIN break detection length
    +              5
    +              1
    +            
    +            
    +              ADDM7
    +              7-bit Address Detection/4-bit Address
    +              Detection
    +              4
    +              1
    +            
    +          
    +        
    +        
    +          CR3
    +          CR3
    +          Control register 3
    +          0x8
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              WUFIE
    +              Wakeup from Stop mode interrupt
    +              enable
    +              22
    +              1
    +            
    +            
    +              WUS
    +              Wakeup from Stop mode interrupt flag
    +              selection
    +              20
    +              2
    +            
    +            
    +              SCARCNT
    +              Smartcard auto-retry count
    +              17
    +              3
    +            
    +            
    +              DEP
    +              Driver enable polarity
    +              selection
    +              15
    +              1
    +            
    +            
    +              DEM
    +              Driver enable mode
    +              14
    +              1
    +            
    +            
    +              DDRE
    +              DMA Disable on Reception
    +              Error
    +              13
    +              1
    +            
    +            
    +              OVRDIS
    +              Overrun Disable
    +              12
    +              1
    +            
    +            
    +              ONEBIT
    +              One sample bit method
    +              enable
    +              11
    +              1
    +            
    +            
    +              CTSIE
    +              CTS interrupt enable
    +              10
    +              1
    +            
    +            
    +              CTSE
    +              CTS enable
    +              9
    +              1
    +            
    +            
    +              RTSE
    +              RTS enable
    +              8
    +              1
    +            
    +            
    +              DMAT
    +              DMA enable transmitter
    +              7
    +              1
    +            
    +            
    +              DMAR
    +              DMA enable receiver
    +              6
    +              1
    +            
    +            
    +              SCEN
    +              Smartcard mode enable
    +              5
    +              1
    +            
    +            
    +              NACK
    +              Smartcard NACK enable
    +              4
    +              1
    +            
    +            
    +              HDSEL
    +              Half-duplex selection
    +              3
    +              1
    +            
    +            
    +              IRLP
    +              Ir low-power
    +              2
    +              1
    +            
    +            
    +              IREN
    +              Ir mode enable
    +              1
    +              1
    +            
    +            
    +              EIE
    +              Error interrupt enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          BRR
    +          BRR
    +          Baud rate register
    +          0xC
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              DIV_Mantissa
    +              DIV_Mantissa
    +              4
    +              12
    +            
    +            
    +              DIV_Fraction
    +              DIV_Fraction
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          GTPR
    +          GTPR
    +          Guard time and prescaler
    +          register
    +          0x10
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              GT
    +              Guard time value
    +              8
    +              8
    +            
    +            
    +              PSC
    +              Prescaler value
    +              0
    +              8
    +            
    +          
    +        
    +        
    +          RTOR
    +          RTOR
    +          Receiver timeout register
    +          0x14
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              BLEN
    +              Block Length
    +              24
    +              8
    +            
    +            
    +              RTO
    +              Receiver timeout value
    +              0
    +              24
    +            
    +          
    +        
    +        
    +          RQR
    +          RQR
    +          Request register
    +          0x18
    +          0x20
    +          write-only
    +          0x0000
    +          
    +            
    +              TXFRQ
    +              Transmit data flush
    +              request
    +              4
    +              1
    +            
    +            
    +              RXFRQ
    +              Receive data flush request
    +              3
    +              1
    +            
    +            
    +              MMRQ
    +              Mute mode request
    +              2
    +              1
    +            
    +            
    +              SBKRQ
    +              Send break request
    +              1
    +              1
    +            
    +            
    +              ABRRQ
    +              Auto baud rate request
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ISR
    +          ISR
    +          Interrupt & status
    +          register
    +          0x1C
    +          0x20
    +          read-only
    +          0x00C0
    +          
    +            
    +              REACK
    +              REACK
    +              22
    +              1
    +            
    +            
    +              TEACK
    +              TEACK
    +              21
    +              1
    +            
    +            
    +              WUF
    +              WUF
    +              20
    +              1
    +            
    +            
    +              RWU
    +              RWU
    +              19
    +              1
    +            
    +            
    +              SBKF
    +              SBKF
    +              18
    +              1
    +            
    +            
    +              CMF
    +              CMF
    +              17
    +              1
    +            
    +            
    +              BUSY
    +              BUSY
    +              16
    +              1
    +            
    +            
    +              ABRF
    +              ABRF
    +              15
    +              1
    +            
    +            
    +              ABRE
    +              ABRE
    +              14
    +              1
    +            
    +            
    +              EOBF
    +              EOBF
    +              12
    +              1
    +            
    +            
    +              RTOF
    +              RTOF
    +              11
    +              1
    +            
    +            
    +              CTS
    +              CTS
    +              10
    +              1
    +            
    +            
    +              CTSIF
    +              CTSIF
    +              9
    +              1
    +            
    +            
    +              LBDF
    +              LBDF
    +              8
    +              1
    +            
    +            
    +              TXE
    +              TXE
    +              7
    +              1
    +            
    +            
    +              TC
    +              TC
    +              6
    +              1
    +            
    +            
    +              RXNE
    +              RXNE
    +              5
    +              1
    +            
    +            
    +              IDLE
    +              IDLE
    +              4
    +              1
    +            
    +            
    +              ORE
    +              ORE
    +              3
    +              1
    +            
    +            
    +              NF
    +              NF
    +              2
    +              1
    +            
    +            
    +              FE
    +              FE
    +              1
    +              1
    +            
    +            
    +              PE
    +              PE
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ICR
    +          ICR
    +          Interrupt flag clear register
    +          0x20
    +          0x20
    +          write-only
    +          0x0000
    +          
    +            
    +              WUCF
    +              Wakeup from Stop mode clear
    +              flag
    +              20
    +              1
    +            
    +            
    +              CMCF
    +              Character match clear flag
    +              17
    +              1
    +            
    +            
    +              EOBCF
    +              End of block clear flag
    +              12
    +              1
    +            
    +            
    +              RTOCF
    +              Receiver timeout clear
    +              flag
    +              11
    +              1
    +            
    +            
    +              CTSCF
    +              CTS clear flag
    +              9
    +              1
    +            
    +            
    +              LBDCF
    +              LIN break detection clear
    +              flag
    +              8
    +              1
    +            
    +            
    +              TCCF
    +              Transmission complete clear
    +              flag
    +              6
    +              1
    +            
    +            
    +              IDLECF
    +              Idle line detected clear
    +              flag
    +              4
    +              1
    +            
    +            
    +              ORECF
    +              Overrun error clear flag
    +              3
    +              1
    +            
    +            
    +              NCF
    +              Noise detected clear flag
    +              2
    +              1
    +            
    +            
    +              FECF
    +              Framing error clear flag
    +              1
    +              1
    +            
    +            
    +              PECF
    +              Parity error clear flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          RDR
    +          RDR
    +          Receive data register
    +          0x24
    +          0x20
    +          read-only
    +          0x0000
    +          
    +            
    +              RDR
    +              Receive data value
    +              0
    +              9
    +            
    +          
    +        
    +        
    +          TDR
    +          TDR
    +          Transmit data register
    +          0x28
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              TDR
    +              Transmit data value
    +              0
    +              9
    +            
    +          
    +        
    +      
    +    
    +    
    +      USART2
    +      0x40004400
    +    
    +    
    +      USART4
    +      0x40004C00
    +      
    +        USART4_USART5
    +        USART4/USART5 global interrupt
    +        14
    +      
    +      
    +        USART1
    +        USART1 global interrupt
    +        27
    +      
    +    
    +    
    +      USART5
    +      0x40005000
    +      
    +        USART2
    +        USART2 global interrupt
    +        28
    +      
    +    
    +    
    +      TSC
    +      Touch sensing controller
    +      TSC
    +      0x40024000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        TSC
    +        Touch sensing interrupt
    +        8
    +      
    +      
    +        
    +          CR
    +          CR
    +          control register
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CTPH
    +              Charge transfer pulse high
    +              28
    +              4
    +            
    +            
    +              CTPL
    +              Charge transfer pulse low
    +              24
    +              4
    +            
    +            
    +              SSD
    +              Spread spectrum deviation
    +              17
    +              7
    +            
    +            
    +              SSE
    +              Spread spectrum enable
    +              16
    +              1
    +            
    +            
    +              SSPSC
    +              Spread spectrum prescaler
    +              15
    +              1
    +            
    +            
    +              PGPSC
    +              pulse generator prescaler
    +              12
    +              3
    +            
    +            
    +              MCV
    +              Max count value
    +              5
    +              3
    +            
    +            
    +              IODEF
    +              I/O Default mode
    +              4
    +              1
    +            
    +            
    +              SYNCPOL
    +              Synchronization pin
    +              polarity
    +              3
    +              1
    +            
    +            
    +              AM
    +              Acquisition mode
    +              2
    +              1
    +            
    +            
    +              START
    +              Start a new acquisition
    +              1
    +              1
    +            
    +            
    +              TSCE
    +              Touch sensing controller
    +              enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          IER
    +          IER
    +          interrupt enable register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MCEIE
    +              Max count error interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              EOAIE
    +              End of acquisition interrupt
    +              enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ICR
    +          ICR
    +          interrupt clear register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MCEIC
    +              Max count error interrupt
    +              clear
    +              1
    +              1
    +            
    +            
    +              EOAIC
    +              End of acquisition interrupt
    +              clear
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ISR
    +          ISR
    +          interrupt status register
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              MCEF
    +              Max count error flag
    +              1
    +              1
    +            
    +            
    +              EOAF
    +              End of acquisition flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          IOHCR
    +          IOHCR
    +          I/O hysteresis control
    +          register
    +          0x10
    +          0x20
    +          read-write
    +          0xFFFFFFFF
    +          
    +            
    +              G8_IO4
    +              G8_IO4
    +              31
    +              1
    +            
    +            
    +              G8_IO3
    +              G8_IO3
    +              30
    +              1
    +            
    +            
    +              G8_IO2
    +              G8_IO2
    +              29
    +              1
    +            
    +            
    +              G8_IO1
    +              G8_IO1
    +              28
    +              1
    +            
    +            
    +              G7_IO4
    +              G7_IO4
    +              27
    +              1
    +            
    +            
    +              G7_IO3
    +              G7_IO3
    +              26
    +              1
    +            
    +            
    +              G7_IO2
    +              G7_IO2
    +              25
    +              1
    +            
    +            
    +              G7_IO1
    +              G7_IO1
    +              24
    +              1
    +            
    +            
    +              G6_IO4
    +              G6_IO4
    +              23
    +              1
    +            
    +            
    +              G6_IO3
    +              G6_IO3
    +              22
    +              1
    +            
    +            
    +              G6_IO2
    +              G6_IO2
    +              21
    +              1
    +            
    +            
    +              G6_IO1
    +              G6_IO1
    +              20
    +              1
    +            
    +            
    +              G5_IO4
    +              G5_IO4
    +              19
    +              1
    +            
    +            
    +              G5_IO3
    +              G5_IO3
    +              18
    +              1
    +            
    +            
    +              G5_IO2
    +              G5_IO2
    +              17
    +              1
    +            
    +            
    +              G5_IO1
    +              G5_IO1
    +              16
    +              1
    +            
    +            
    +              G4_IO4
    +              G4_IO4
    +              15
    +              1
    +            
    +            
    +              G4_IO3
    +              G4_IO3
    +              14
    +              1
    +            
    +            
    +              G4_IO2
    +              G4_IO2
    +              13
    +              1
    +            
    +            
    +              G4_IO1
    +              G4_IO1
    +              12
    +              1
    +            
    +            
    +              G3_IO4
    +              G3_IO4
    +              11
    +              1
    +            
    +            
    +              G3_IO3
    +              G3_IO3
    +              10
    +              1
    +            
    +            
    +              G3_IO2
    +              G3_IO2
    +              9
    +              1
    +            
    +            
    +              G3_IO1
    +              G3_IO1
    +              8
    +              1
    +            
    +            
    +              G2_IO4
    +              G2_IO4
    +              7
    +              1
    +            
    +            
    +              G2_IO3
    +              G2_IO3
    +              6
    +              1
    +            
    +            
    +              G2_IO2
    +              G2_IO2
    +              5
    +              1
    +            
    +            
    +              G2_IO1
    +              G2_IO1
    +              4
    +              1
    +            
    +            
    +              G1_IO4
    +              G1_IO4
    +              3
    +              1
    +            
    +            
    +              G1_IO3
    +              G1_IO3
    +              2
    +              1
    +            
    +            
    +              G1_IO2
    +              G1_IO2
    +              1
    +              1
    +            
    +            
    +              G1_IO1
    +              G1_IO1
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          IOASCR
    +          IOASCR
    +          I/O analog switch control
    +          register
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              G8_IO4
    +              G8_IO4
    +              31
    +              1
    +            
    +            
    +              G8_IO3
    +              G8_IO3
    +              30
    +              1
    +            
    +            
    +              G8_IO2
    +              G8_IO2
    +              29
    +              1
    +            
    +            
    +              G8_IO1
    +              G8_IO1
    +              28
    +              1
    +            
    +            
    +              G7_IO4
    +              G7_IO4
    +              27
    +              1
    +            
    +            
    +              G7_IO3
    +              G7_IO3
    +              26
    +              1
    +            
    +            
    +              G7_IO2
    +              G7_IO2
    +              25
    +              1
    +            
    +            
    +              G7_IO1
    +              G7_IO1
    +              24
    +              1
    +            
    +            
    +              G6_IO4
    +              G6_IO4
    +              23
    +              1
    +            
    +            
    +              G6_IO3
    +              G6_IO3
    +              22
    +              1
    +            
    +            
    +              G6_IO2
    +              G6_IO2
    +              21
    +              1
    +            
    +            
    +              G6_IO1
    +              G6_IO1
    +              20
    +              1
    +            
    +            
    +              G5_IO4
    +              G5_IO4
    +              19
    +              1
    +            
    +            
    +              G5_IO3
    +              G5_IO3
    +              18
    +              1
    +            
    +            
    +              G5_IO2
    +              G5_IO2
    +              17
    +              1
    +            
    +            
    +              G5_IO1
    +              G5_IO1
    +              16
    +              1
    +            
    +            
    +              G4_IO4
    +              G4_IO4
    +              15
    +              1
    +            
    +            
    +              G4_IO3
    +              G4_IO3
    +              14
    +              1
    +            
    +            
    +              G4_IO2
    +              G4_IO2
    +              13
    +              1
    +            
    +            
    +              G4_IO1
    +              G4_IO1
    +              12
    +              1
    +            
    +            
    +              G3_IO4
    +              G3_IO4
    +              11
    +              1
    +            
    +            
    +              G3_IO3
    +              G3_IO3
    +              10
    +              1
    +            
    +            
    +              G3_IO2
    +              G3_IO2
    +              9
    +              1
    +            
    +            
    +              G3_IO1
    +              G3_IO1
    +              8
    +              1
    +            
    +            
    +              G2_IO4
    +              G2_IO4
    +              7
    +              1
    +            
    +            
    +              G2_IO3
    +              G2_IO3
    +              6
    +              1
    +            
    +            
    +              G2_IO2
    +              G2_IO2
    +              5
    +              1
    +            
    +            
    +              G2_IO1
    +              G2_IO1
    +              4
    +              1
    +            
    +            
    +              G1_IO4
    +              G1_IO4
    +              3
    +              1
    +            
    +            
    +              G1_IO3
    +              G1_IO3
    +              2
    +              1
    +            
    +            
    +              G1_IO2
    +              G1_IO2
    +              1
    +              1
    +            
    +            
    +              G1_IO1
    +              G1_IO1
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          IOSCR
    +          IOSCR
    +          I/O sampling control register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              G8_IO4
    +              G8_IO4
    +              31
    +              1
    +            
    +            
    +              G8_IO3
    +              G8_IO3
    +              30
    +              1
    +            
    +            
    +              G8_IO2
    +              G8_IO2
    +              29
    +              1
    +            
    +            
    +              G8_IO1
    +              G8_IO1
    +              28
    +              1
    +            
    +            
    +              G7_IO4
    +              G7_IO4
    +              27
    +              1
    +            
    +            
    +              G7_IO3
    +              G7_IO3
    +              26
    +              1
    +            
    +            
    +              G7_IO2
    +              G7_IO2
    +              25
    +              1
    +            
    +            
    +              G7_IO1
    +              G7_IO1
    +              24
    +              1
    +            
    +            
    +              G6_IO4
    +              G6_IO4
    +              23
    +              1
    +            
    +            
    +              G6_IO3
    +              G6_IO3
    +              22
    +              1
    +            
    +            
    +              G6_IO2
    +              G6_IO2
    +              21
    +              1
    +            
    +            
    +              G6_IO1
    +              G6_IO1
    +              20
    +              1
    +            
    +            
    +              G5_IO4
    +              G5_IO4
    +              19
    +              1
    +            
    +            
    +              G5_IO3
    +              G5_IO3
    +              18
    +              1
    +            
    +            
    +              G5_IO2
    +              G5_IO2
    +              17
    +              1
    +            
    +            
    +              G5_IO1
    +              G5_IO1
    +              16
    +              1
    +            
    +            
    +              G4_IO4
    +              G4_IO4
    +              15
    +              1
    +            
    +            
    +              G4_IO3
    +              G4_IO3
    +              14
    +              1
    +            
    +            
    +              G4_IO2
    +              G4_IO2
    +              13
    +              1
    +            
    +            
    +              G4_IO1
    +              G4_IO1
    +              12
    +              1
    +            
    +            
    +              G3_IO4
    +              G3_IO4
    +              11
    +              1
    +            
    +            
    +              G3_IO3
    +              G3_IO3
    +              10
    +              1
    +            
    +            
    +              G3_IO2
    +              G3_IO2
    +              9
    +              1
    +            
    +            
    +              G3_IO1
    +              G3_IO1
    +              8
    +              1
    +            
    +            
    +              G2_IO4
    +              G2_IO4
    +              7
    +              1
    +            
    +            
    +              G2_IO3
    +              G2_IO3
    +              6
    +              1
    +            
    +            
    +              G2_IO2
    +              G2_IO2
    +              5
    +              1
    +            
    +            
    +              G2_IO1
    +              G2_IO1
    +              4
    +              1
    +            
    +            
    +              G1_IO4
    +              G1_IO4
    +              3
    +              1
    +            
    +            
    +              G1_IO3
    +              G1_IO3
    +              2
    +              1
    +            
    +            
    +              G1_IO2
    +              G1_IO2
    +              1
    +              1
    +            
    +            
    +              G1_IO1
    +              G1_IO1
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          IOCCR
    +          IOCCR
    +          I/O channel control register
    +          0x28
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              G8_IO4
    +              G8_IO4
    +              31
    +              1
    +            
    +            
    +              G8_IO3
    +              G8_IO3
    +              30
    +              1
    +            
    +            
    +              G8_IO2
    +              G8_IO2
    +              29
    +              1
    +            
    +            
    +              G8_IO1
    +              G8_IO1
    +              28
    +              1
    +            
    +            
    +              G7_IO4
    +              G7_IO4
    +              27
    +              1
    +            
    +            
    +              G7_IO3
    +              G7_IO3
    +              26
    +              1
    +            
    +            
    +              G7_IO2
    +              G7_IO2
    +              25
    +              1
    +            
    +            
    +              G7_IO1
    +              G7_IO1
    +              24
    +              1
    +            
    +            
    +              G6_IO4
    +              G6_IO4
    +              23
    +              1
    +            
    +            
    +              G6_IO3
    +              G6_IO3
    +              22
    +              1
    +            
    +            
    +              G6_IO2
    +              G6_IO2
    +              21
    +              1
    +            
    +            
    +              G6_IO1
    +              G6_IO1
    +              20
    +              1
    +            
    +            
    +              G5_IO4
    +              G5_IO4
    +              19
    +              1
    +            
    +            
    +              G5_IO3
    +              G5_IO3
    +              18
    +              1
    +            
    +            
    +              G5_IO2
    +              G5_IO2
    +              17
    +              1
    +            
    +            
    +              G5_IO1
    +              G5_IO1
    +              16
    +              1
    +            
    +            
    +              G4_IO4
    +              G4_IO4
    +              15
    +              1
    +            
    +            
    +              G4_IO3
    +              G4_IO3
    +              14
    +              1
    +            
    +            
    +              G4_IO2
    +              G4_IO2
    +              13
    +              1
    +            
    +            
    +              G4_IO1
    +              G4_IO1
    +              12
    +              1
    +            
    +            
    +              G3_IO4
    +              G3_IO4
    +              11
    +              1
    +            
    +            
    +              G3_IO3
    +              G3_IO3
    +              10
    +              1
    +            
    +            
    +              G3_IO2
    +              G3_IO2
    +              9
    +              1
    +            
    +            
    +              G3_IO1
    +              G3_IO1
    +              8
    +              1
    +            
    +            
    +              G2_IO4
    +              G2_IO4
    +              7
    +              1
    +            
    +            
    +              G2_IO3
    +              G2_IO3
    +              6
    +              1
    +            
    +            
    +              G2_IO2
    +              G2_IO2
    +              5
    +              1
    +            
    +            
    +              G2_IO1
    +              G2_IO1
    +              4
    +              1
    +            
    +            
    +              G1_IO4
    +              G1_IO4
    +              3
    +              1
    +            
    +            
    +              G1_IO3
    +              G1_IO3
    +              2
    +              1
    +            
    +            
    +              G1_IO2
    +              G1_IO2
    +              1
    +              1
    +            
    +            
    +              G1_IO1
    +              G1_IO1
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          IOGCSR
    +          IOGCSR
    +          I/O group control status
    +          register
    +          0x30
    +          0x20
    +          0x00000000
    +          
    +            
    +              G8S
    +              Analog I/O group x status
    +              23
    +              1
    +              read-only
    +            
    +            
    +              G7S
    +              Analog I/O group x status
    +              22
    +              1
    +              read-only
    +            
    +            
    +              G6S
    +              Analog I/O group x status
    +              21
    +              1
    +              read-only
    +            
    +            
    +              G5S
    +              Analog I/O group x status
    +              20
    +              1
    +              read-only
    +            
    +            
    +              G4S
    +              Analog I/O group x status
    +              19
    +              1
    +              read-only
    +            
    +            
    +              G3S
    +              Analog I/O group x status
    +              18
    +              1
    +              read-only
    +            
    +            
    +              G2S
    +              Analog I/O group x status
    +              17
    +              1
    +              read-only
    +            
    +            
    +              G1S
    +              Analog I/O group x status
    +              16
    +              1
    +              read-only
    +            
    +            
    +              G8E
    +              Analog I/O group x enable
    +              7
    +              1
    +              read-write
    +            
    +            
    +              G7E
    +              Analog I/O group x enable
    +              6
    +              1
    +              read-write
    +            
    +            
    +              G6E
    +              Analog I/O group x enable
    +              5
    +              1
    +              read-write
    +            
    +            
    +              G5E
    +              Analog I/O group x enable
    +              4
    +              1
    +              read-write
    +            
    +            
    +              G4E
    +              Analog I/O group x enable
    +              3
    +              1
    +              read-write
    +            
    +            
    +              G3E
    +              Analog I/O group x enable
    +              2
    +              1
    +              read-write
    +            
    +            
    +              G2E
    +              Analog I/O group x enable
    +              1
    +              1
    +              read-write
    +            
    +            
    +              G1E
    +              Analog I/O group x enable
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          IOG1CR
    +          IOG1CR
    +          I/O group x counter register
    +          0x34
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CNT
    +              Counter value
    +              0
    +              14
    +            
    +          
    +        
    +        
    +          IOG2CR
    +          IOG2CR
    +          I/O group x counter register
    +          0x38
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CNT
    +              Counter value
    +              0
    +              14
    +            
    +          
    +        
    +        
    +          IOG3CR
    +          IOG3CR
    +          I/O group x counter register
    +          0x3C
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CNT
    +              Counter value
    +              0
    +              14
    +            
    +          
    +        
    +        
    +          IOG4CR
    +          IOG4CR
    +          I/O group x counter register
    +          0x40
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CNT
    +              Counter value
    +              0
    +              14
    +            
    +          
    +        
    +        
    +          IOG5CR
    +          IOG5CR
    +          I/O group x counter register
    +          0x44
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CNT
    +              Counter value
    +              0
    +              14
    +            
    +          
    +        
    +        
    +          IOG6CR
    +          IOG6CR
    +          I/O group x counter register
    +          0x48
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CNT
    +              Counter value
    +              0
    +              14
    +            
    +          
    +        
    +        
    +          IOG7CR
    +          IOG7CR
    +          I/O group x counter register
    +          0x4C
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CNT
    +              Counter value
    +              0
    +              14
    +            
    +          
    +        
    +        
    +          IOG8CR
    +          IOG8CR
    +          I/O group x counter register
    +          0x50
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CNT
    +              Counter value
    +              0
    +              14
    +            
    +          
    +        
    +      
    +    
    +    
    +      IWDG
    +      Independent watchdog
    +      IWDG
    +      0x40003000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          KR
    +          KR
    +          Key register
    +          0x0
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              KEY
    +              Key value (write only, read
    +              0x0000)
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          PR
    +          PR
    +          Prescaler register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PR
    +              Prescaler divider
    +              0
    +              3
    +            
    +          
    +        
    +        
    +          RLR
    +          RLR
    +          Reload register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000FFF
    +          
    +            
    +              RL
    +              Watchdog counter reload
    +              value
    +              0
    +              12
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          Status register
    +          0xC
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              WVU
    +              Watchdog counter window value
    +              update
    +              2
    +              1
    +            
    +            
    +              RVU
    +              Watchdog counter reload value
    +              update
    +              1
    +              1
    +            
    +            
    +              PVU
    +              Watchdog prescaler value
    +              update
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          WINR
    +          WINR
    +          Window register
    +          0x10
    +          0x20
    +          read-write
    +          0x00000FFF
    +          
    +            
    +              WIN
    +              Watchdog counter window
    +              value
    +              0
    +              12
    +            
    +          
    +        
    +      
    +    
    +    
    +      WWDG
    +      System window watchdog
    +      WWDG
    +      0x40002C00
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        WWDG
    +        Window Watchdog interrupt
    +        0
    +      
    +      
    +        
    +          CR
    +          CR
    +          Control register
    +          0x0
    +          0x20
    +          read-write
    +          0x0000007F
    +          
    +            
    +              WDGA
    +              Activation bit
    +              7
    +              1
    +            
    +            
    +              T
    +              7-bit counter (MSB to LSB)
    +              0
    +              7
    +            
    +          
    +        
    +        
    +          CFR
    +          CFR
    +          Configuration register
    +          0x4
    +          0x20
    +          read-write
    +          0x0000007F
    +          
    +            
    +              EWI
    +              Early wakeup interrupt
    +              9
    +              1
    +            
    +            
    +              WDGTB1
    +              Timer base
    +              8
    +              1
    +            
    +            
    +              WDGTB0
    +              WDGTB0
    +              7
    +              1
    +            
    +            
    +              W
    +              7-bit window value
    +              0
    +              7
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          Status register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              EWIF
    +              Early wakeup interrupt
    +              flag
    +              0
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      USB_FS
    +      Universal serial bus full-speed device
    +      interface
    +      USB
    +      0x40005C00
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        USB
    +        USB event interrupt through
    +        EXTI18
    +        31
    +      
    +      
    +        
    +          EP0R
    +          EP0R
    +          endpoint register
    +          0x0
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              CTR_RX
    +              CTR_RX
    +              15
    +              1
    +            
    +            
    +              DTOG_RX
    +              DTOG_RX
    +              14
    +              1
    +            
    +            
    +              STAT_RX
    +              STAT_RX
    +              12
    +              2
    +            
    +            
    +              SETUP
    +              SETUP
    +              11
    +              1
    +            
    +            
    +              EPTYPE
    +              EPTYPE
    +              9
    +              2
    +            
    +            
    +              EP_KIND
    +              EP_KIND
    +              8
    +              1
    +            
    +            
    +              CTR_TX
    +              CTR_TX
    +              7
    +              1
    +            
    +            
    +              DTOG_TX
    +              DTOG_TX
    +              6
    +              1
    +            
    +            
    +              STAT_TX
    +              STAT_TX
    +              4
    +              2
    +            
    +            
    +              EA
    +              EA
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          EP1R
    +          EP1R
    +          endpoint register
    +          0x4
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              CTR_RX
    +              CTR_RX
    +              15
    +              1
    +            
    +            
    +              DTOG_RX
    +              DTOG_RX
    +              14
    +              1
    +            
    +            
    +              STAT_RX
    +              STAT_RX
    +              12
    +              2
    +            
    +            
    +              SETUP
    +              SETUP
    +              11
    +              1
    +            
    +            
    +              EPTYPE
    +              EPTYPE
    +              9
    +              2
    +            
    +            
    +              EP_KIND
    +              EP_KIND
    +              8
    +              1
    +            
    +            
    +              CTR_TX
    +              CTR_TX
    +              7
    +              1
    +            
    +            
    +              DTOG_TX
    +              DTOG_TX
    +              6
    +              1
    +            
    +            
    +              STAT_TX
    +              STAT_TX
    +              4
    +              2
    +            
    +            
    +              EA
    +              EA
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          EP2R
    +          EP2R
    +          endpoint register
    +          0x8
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              CTR_RX
    +              CTR_RX
    +              15
    +              1
    +            
    +            
    +              DTOG_RX
    +              DTOG_RX
    +              14
    +              1
    +            
    +            
    +              STAT_RX
    +              STAT_RX
    +              12
    +              2
    +            
    +            
    +              SETUP
    +              SETUP
    +              11
    +              1
    +            
    +            
    +              EPTYPE
    +              EPTYPE
    +              9
    +              2
    +            
    +            
    +              EP_KIND
    +              EP_KIND
    +              8
    +              1
    +            
    +            
    +              CTR_TX
    +              CTR_TX
    +              7
    +              1
    +            
    +            
    +              DTOG_TX
    +              DTOG_TX
    +              6
    +              1
    +            
    +            
    +              STAT_TX
    +              STAT_TX
    +              4
    +              2
    +            
    +            
    +              EA
    +              EA
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          EP3R
    +          EP3R
    +          endpoint register
    +          0xC
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              CTR_RX
    +              CTR_RX
    +              15
    +              1
    +            
    +            
    +              DTOG_RX
    +              DTOG_RX
    +              14
    +              1
    +            
    +            
    +              STAT_RX
    +              STAT_RX
    +              12
    +              2
    +            
    +            
    +              SETUP
    +              SETUP
    +              11
    +              1
    +            
    +            
    +              EPTYPE
    +              EPTYPE
    +              9
    +              2
    +            
    +            
    +              EP_KIND
    +              EP_KIND
    +              8
    +              1
    +            
    +            
    +              CTR_TX
    +              CTR_TX
    +              7
    +              1
    +            
    +            
    +              DTOG_TX
    +              DTOG_TX
    +              6
    +              1
    +            
    +            
    +              STAT_TX
    +              STAT_TX
    +              4
    +              2
    +            
    +            
    +              EA
    +              EA
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          EP4R
    +          EP4R
    +          endpoint register
    +          0x10
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              CTR_RX
    +              CTR_RX
    +              15
    +              1
    +            
    +            
    +              DTOG_RX
    +              DTOG_RX
    +              14
    +              1
    +            
    +            
    +              STAT_RX
    +              STAT_RX
    +              12
    +              2
    +            
    +            
    +              SETUP
    +              SETUP
    +              11
    +              1
    +            
    +            
    +              EPTYPE
    +              EPTYPE
    +              9
    +              2
    +            
    +            
    +              EP_KIND
    +              EP_KIND
    +              8
    +              1
    +            
    +            
    +              CTR_TX
    +              CTR_TX
    +              7
    +              1
    +            
    +            
    +              DTOG_TX
    +              DTOG_TX
    +              6
    +              1
    +            
    +            
    +              STAT_TX
    +              STAT_TX
    +              4
    +              2
    +            
    +            
    +              EA
    +              EA
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          EP5R
    +          EP5R
    +          endpoint register
    +          0x14
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              CTR_RX
    +              CTR_RX
    +              15
    +              1
    +            
    +            
    +              DTOG_RX
    +              DTOG_RX
    +              14
    +              1
    +            
    +            
    +              STAT_RX
    +              STAT_RX
    +              12
    +              2
    +            
    +            
    +              SETUP
    +              SETUP
    +              11
    +              1
    +            
    +            
    +              EPTYPE
    +              EPTYPE
    +              9
    +              2
    +            
    +            
    +              EP_KIND
    +              EP_KIND
    +              8
    +              1
    +            
    +            
    +              CTR_TX
    +              CTR_TX
    +              7
    +              1
    +            
    +            
    +              DTOG_TX
    +              DTOG_TX
    +              6
    +              1
    +            
    +            
    +              STAT_TX
    +              STAT_TX
    +              4
    +              2
    +            
    +            
    +              EA
    +              EA
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          EP6R
    +          EP6R
    +          endpoint register
    +          0x18
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              CTR_RX
    +              CTR_RX
    +              15
    +              1
    +            
    +            
    +              DTOG_RX
    +              DTOG_RX
    +              14
    +              1
    +            
    +            
    +              STAT_RX
    +              STAT_RX
    +              12
    +              2
    +            
    +            
    +              SETUP
    +              SETUP
    +              11
    +              1
    +            
    +            
    +              EPTYPE
    +              EPTYPE
    +              9
    +              2
    +            
    +            
    +              EP_KIND
    +              EP_KIND
    +              8
    +              1
    +            
    +            
    +              CTR_TX
    +              CTR_TX
    +              7
    +              1
    +            
    +            
    +              DTOG_TX
    +              DTOG_TX
    +              6
    +              1
    +            
    +            
    +              STAT_TX
    +              STAT_TX
    +              4
    +              2
    +            
    +            
    +              EA
    +              EA
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          EP7R
    +          EP7R
    +          endpoint register
    +          0x1C
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              CTR_RX
    +              CTR_RX
    +              15
    +              1
    +            
    +            
    +              DTOG_RX
    +              DTOG_RX
    +              14
    +              1
    +            
    +            
    +              STAT_RX
    +              STAT_RX
    +              12
    +              2
    +            
    +            
    +              SETUP
    +              SETUP
    +              11
    +              1
    +            
    +            
    +              EPTYPE
    +              EPTYPE
    +              9
    +              2
    +            
    +            
    +              EP_KIND
    +              EP_KIND
    +              8
    +              1
    +            
    +            
    +              CTR_TX
    +              CTR_TX
    +              7
    +              1
    +            
    +            
    +              DTOG_TX
    +              DTOG_TX
    +              6
    +              1
    +            
    +            
    +              STAT_TX
    +              STAT_TX
    +              4
    +              2
    +            
    +            
    +              EA
    +              EA
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          CNTR
    +          CNTR
    +          control register
    +          0x40
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              CTRM
    +              CTRM
    +              15
    +              1
    +            
    +            
    +              PMAOVRM
    +              PMAOVRM
    +              14
    +              1
    +            
    +            
    +              ERRM
    +              ERRM
    +              13
    +              1
    +            
    +            
    +              WKUPM
    +              WKUPM
    +              12
    +              1
    +            
    +            
    +              SUSPM
    +              SUSPM
    +              11
    +              1
    +            
    +            
    +              RESETM
    +              RESETM
    +              10
    +              1
    +            
    +            
    +              SOFM
    +              SOFM
    +              9
    +              1
    +            
    +            
    +              ESOFM
    +              ESOFM
    +              8
    +              1
    +            
    +            
    +              L1REQM
    +              L1REQM
    +              7
    +              1
    +            
    +            
    +              L1RESUME
    +              L1RESUME
    +              5
    +              1
    +            
    +            
    +              RESUME
    +              RESUME
    +              4
    +              1
    +            
    +            
    +              FSUSP
    +              FSUSP
    +              3
    +              1
    +            
    +            
    +              LPMODE
    +              LPMODE
    +              2
    +              1
    +            
    +            
    +              PDWN
    +              PDWN
    +              1
    +              1
    +            
    +            
    +              FRES
    +              FRES
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ISTR
    +          ISTR
    +          interrupt status register
    +          0x44
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              CTR
    +              CTR
    +              15
    +              1
    +            
    +            
    +              PMAOVR
    +              PMAOVR
    +              14
    +              1
    +            
    +            
    +              ERR
    +              ERR
    +              13
    +              1
    +            
    +            
    +              WKUP
    +              WKUP
    +              12
    +              1
    +            
    +            
    +              SUSP
    +              SUSP
    +              11
    +              1
    +            
    +            
    +              RESET
    +              RESET
    +              10
    +              1
    +            
    +            
    +              SOF
    +              SOF
    +              9
    +              1
    +            
    +            
    +              ESOF
    +              ESOF
    +              8
    +              1
    +            
    +            
    +              L1REQ
    +              L1REQ
    +              7
    +              1
    +            
    +            
    +              DIR
    +              DIR
    +              4
    +              1
    +            
    +            
    +              EP_ID
    +              EP_ID
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          FNR
    +          FNR
    +          frame number register
    +          0x48
    +          0x20
    +          read-only
    +          0x0
    +          
    +            
    +              RXDP
    +              RXDP
    +              15
    +              1
    +            
    +            
    +              RXDM
    +              RXDM
    +              14
    +              1
    +            
    +            
    +              LCK
    +              LCK
    +              13
    +              1
    +            
    +            
    +              LSOF
    +              LSOF
    +              11
    +              2
    +            
    +            
    +              FN
    +              FN
    +              0
    +              11
    +            
    +          
    +        
    +        
    +          DADDR
    +          DADDR
    +          device address
    +          0x4C
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              EF
    +              EF
    +              7
    +              1
    +            
    +            
    +              ADD
    +              ADD
    +              0
    +              7
    +            
    +          
    +        
    +        
    +          BTABLE
    +          BTABLE
    +          Buffer table address
    +          0x50
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              BTABLE
    +              BTABLE
    +              3
    +              13
    +            
    +          
    +        
    +        
    +          LPMCSR
    +          LPMCSR
    +          LPM control and status
    +          register
    +          0x54
    +          0x20
    +          0x0
    +          
    +            
    +              BESL
    +              BESL
    +              4
    +              4
    +              read-only
    +            
    +            
    +              REMWAKE
    +              REMWAKE
    +              3
    +              1
    +              read-only
    +            
    +            
    +              LPMACK
    +              LPMACK
    +              1
    +              1
    +              read-write
    +            
    +            
    +              LPMEN
    +              LPMEN
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          BCDR
    +          BCDR
    +          Battery charging detector
    +          0x58
    +          0x20
    +          0x0
    +          
    +            
    +              DPPU
    +              DPPU
    +              15
    +              1
    +              read-write
    +            
    +            
    +              PS2DET
    +              PS2DET
    +              7
    +              1
    +              read-only
    +            
    +            
    +              SDET
    +              SDET
    +              6
    +              1
    +              read-only
    +            
    +            
    +              PDET
    +              PDET
    +              5
    +              1
    +              read-only
    +            
    +            
    +              DCDET
    +              DCDET
    +              4
    +              1
    +              read-only
    +            
    +            
    +              SDEN
    +              SDEN
    +              3
    +              1
    +              read-write
    +            
    +            
    +              PDEN
    +              PDEN
    +              2
    +              1
    +              read-write
    +            
    +            
    +              DCDEN
    +              DCDEN
    +              1
    +              1
    +              read-write
    +            
    +            
    +              BCDEN
    +              BCDEN
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      CRS
    +      Clock recovery system
    +      CRS
    +      0x40006C00
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          CR
    +          CR
    +          control register
    +          0x0
    +          0x20
    +          read-write
    +          0x00002000
    +          
    +            
    +              TRIM
    +              HSI48 oscillator smooth
    +              trimming
    +              8
    +              6
    +            
    +            
    +              SWSYNC
    +              Generate software SYNC
    +              event
    +              7
    +              1
    +            
    +            
    +              AUTOTRIMEN
    +              Automatic trimming enable
    +              6
    +              1
    +            
    +            
    +              CEN
    +              Frequency error counter
    +              enable
    +              5
    +              1
    +            
    +            
    +              ESYNCIE
    +              Expected SYNC interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              ERRIE
    +              Synchronization or trimming error
    +              interrupt enable
    +              2
    +              1
    +            
    +            
    +              SYNCWARNIE
    +              SYNC warning interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              SYNCOKIE
    +              SYNC event OK interrupt
    +              enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CFGR
    +          CFGR
    +          configuration register
    +          0x4
    +          0x20
    +          read-write
    +          0x2022BB7F
    +          
    +            
    +              SYNCPOL
    +              SYNC polarity selection
    +              31
    +              1
    +            
    +            
    +              SYNCSRC
    +              SYNC signal source
    +              selection
    +              28
    +              2
    +            
    +            
    +              SYNCDIV
    +              SYNC divider
    +              24
    +              3
    +            
    +            
    +              FELIM
    +              Frequency error limit
    +              16
    +              8
    +            
    +            
    +              RELOAD
    +              Counter reload value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          ISR
    +          ISR
    +          interrupt and status register
    +          0x8
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              FECAP
    +              Frequency error capture
    +              16
    +              16
    +            
    +            
    +              FEDIR
    +              Frequency error direction
    +              15
    +              1
    +            
    +            
    +              TRIMOVF
    +              Trimming overflow or
    +              underflow
    +              10
    +              1
    +            
    +            
    +              SYNCMISS
    +              SYNC missed
    +              9
    +              1
    +            
    +            
    +              SYNCERR
    +              SYNC error
    +              8
    +              1
    +            
    +            
    +              ESYNCF
    +              Expected SYNC flag
    +              3
    +              1
    +            
    +            
    +              ERRF
    +              Error flag
    +              2
    +              1
    +            
    +            
    +              SYNCWARNF
    +              SYNC warning flag
    +              1
    +              1
    +            
    +            
    +              SYNCOKF
    +              SYNC event OK flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ICR
    +          ICR
    +          interrupt flag clear register
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ESYNCC
    +              Expected SYNC clear flag
    +              3
    +              1
    +            
    +            
    +              ERRC
    +              Error clear flag
    +              2
    +              1
    +            
    +            
    +              SYNCWARNC
    +              SYNC warning clear flag
    +              1
    +              1
    +            
    +            
    +              SYNCOKC
    +              SYNC event OK clear flag
    +              0
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      Firewall
    +      Firewall
    +      Firewall
    +      0x40011C00
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          FIREWALL_CSSA
    +          FIREWALL_CSSA
    +          Code segment start address
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ADD
    +              code segment start address
    +              8
    +              16
    +            
    +          
    +        
    +        
    +          FIREWALL_CSL
    +          FIREWALL_CSL
    +          Code segment length
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              LENG
    +              code segment length
    +              8
    +              14
    +            
    +          
    +        
    +        
    +          FIREWALL_NVDSSA
    +          FIREWALL_NVDSSA
    +          Non-volatile data segment start
    +          address
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ADD
    +              Non-volatile data segment start
    +              address
    +              8
    +              16
    +            
    +          
    +        
    +        
    +          FIREWALL_NVDSL
    +          FIREWALL_NVDSL
    +          Non-volatile data segment
    +          length
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              LENG
    +              Non-volatile data segment
    +              length
    +              8
    +              14
    +            
    +          
    +        
    +        
    +          FIREWALL_VDSSA
    +          FIREWALL_VDSSA
    +          Volatile data segment start
    +          address
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ADD
    +              Volatile data segment start
    +              address
    +              6
    +              10
    +            
    +          
    +        
    +        
    +          FIREWALL_VDSL
    +          FIREWALL_VDSL
    +          Volatile data segment length
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              LENG
    +              Non-volatile data segment
    +              length
    +              6
    +              10
    +            
    +          
    +        
    +        
    +          FIREWALL_CR
    +          FIREWALL_CR
    +          Configuration register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              VDE
    +              Volatile data execution
    +              2
    +              1
    +            
    +            
    +              VDS
    +              Volatile data shared
    +              1
    +              1
    +            
    +            
    +              FPA
    +              Firewall pre alarm
    +              0
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      RCC
    +      Reset and clock control
    +      RCC
    +      0x40021000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        RCC
    +        RCC global interrupt
    +        4
    +      
    +      
    +        
    +          CR
    +          CR
    +          Clock control register
    +          0x0
    +          0x20
    +          0x00000300
    +          
    +            
    +              PLLRDY
    +              PLL clock ready flag
    +              25
    +              1
    +              read-only
    +            
    +            
    +              PLLON
    +              PLL enable bit
    +              24
    +              1
    +              read-write
    +            
    +            
    +              RTCPRE
    +              TC/LCD prescaler
    +              20
    +              2
    +              read-write
    +            
    +            
    +              CSSLSEON
    +              Clock security system on HSE enable
    +              bit
    +              19
    +              1
    +              read-write
    +            
    +            
    +              HSEBYP
    +              HSE clock bypass bit
    +              18
    +              1
    +              read-write
    +            
    +            
    +              HSERDY
    +              HSE clock ready flag
    +              17
    +              1
    +              read-only
    +            
    +            
    +              HSEON
    +              HSE clock enable bit
    +              16
    +              1
    +              read-write
    +            
    +            
    +              MSIRDY
    +              MSI clock ready flag
    +              9
    +              1
    +              read-only
    +            
    +            
    +              MSION
    +              MSI clock enable bit
    +              8
    +              1
    +              read-write
    +            
    +            
    +              HSI16DIVF
    +              HSI16DIVF
    +              4
    +              1
    +              read-only
    +            
    +            
    +              HSI16DIVEN
    +              HSI16DIVEN
    +              3
    +              1
    +              read-write
    +            
    +            
    +              HSI16RDYF
    +              Internal high-speed clock ready
    +              flag
    +              2
    +              1
    +              read-write
    +            
    +            
    +              HSI16KERON
    +              High-speed internal clock enable bit for
    +              some IP kernels
    +              1
    +              1
    +              read-only
    +            
    +            
    +              HSI16ON
    +              16 MHz high-speed internal clock
    +              enable
    +              0
    +              1
    +              read-write
    +            
    +            
    +              HSI16OUTEN
    +              16 MHz high-speed internal clock output
    +              enable
    +              5
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          ICSCR
    +          ICSCR
    +          Internal clock sources calibration
    +          register
    +          0x4
    +          0x20
    +          0x0000B000
    +          
    +            
    +              MSITRIM
    +              MSI clock trimming
    +              24
    +              8
    +              read-write
    +            
    +            
    +              MSICAL
    +              MSI clock calibration
    +              16
    +              8
    +              read-only
    +            
    +            
    +              MSIRANGE
    +              MSI clock ranges
    +              13
    +              3
    +              read-write
    +            
    +            
    +              HSI16TRIM
    +              High speed internal clock
    +              trimming
    +              8
    +              5
    +              read-write
    +            
    +            
    +              HSI16CAL
    +              nternal high speed clock
    +              calibration
    +              0
    +              8
    +              read-only
    +            
    +          
    +        
    +        
    +          CRRCR
    +          CRRCR
    +          Clock recovery RC register
    +          0x8
    +          0x20
    +          0x00000000
    +          
    +            
    +              HSI48CAL
    +              48 MHz HSI clock
    +              calibration
    +              8
    +              8
    +              read-only
    +            
    +            
    +              HSI48RDY
    +              48MHz HSI clock ready flag
    +              1
    +              1
    +              read-only
    +            
    +            
    +              HSI48ON
    +              48MHz HSI clock enable bit
    +              0
    +              1
    +              read-write
    +            
    +            
    +              HSI48DIV6EN
    +              48 MHz HSI clock divided by 6 output
    +              enable
    +              2
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          CFGR
    +          CFGR
    +          Clock configuration register
    +          0xC
    +          0x20
    +          0x00000000
    +          
    +            
    +              MCOPRE
    +              Microcontroller clock output
    +              prescaler
    +              28
    +              3
    +              read-write
    +            
    +            
    +              MCOSEL
    +              Microcontroller clock output
    +              selection
    +              24
    +              4
    +              read-write
    +            
    +            
    +              PLLDIV
    +              PLL output division
    +              22
    +              2
    +              read-write
    +            
    +            
    +              PLLMUL
    +              PLL multiplication factor
    +              18
    +              4
    +              read-write
    +            
    +            
    +              PLLSRC
    +              PLL entry clock source
    +              16
    +              1
    +              read-write
    +            
    +            
    +              STOPWUCK
    +              Wake-up from stop clock
    +              selection
    +              15
    +              1
    +              read-write
    +            
    +            
    +              PPRE2
    +              APB high-speed prescaler
    +              (APB2)
    +              11
    +              3
    +              read-write
    +            
    +            
    +              PPRE1
    +              APB low-speed prescaler
    +              (APB1)
    +              8
    +              3
    +              read-write
    +            
    +            
    +              HPRE
    +              AHB prescaler
    +              4
    +              4
    +              read-write
    +            
    +            
    +              SWS
    +              System clock switch status
    +              2
    +              2
    +              read-only
    +            
    +            
    +              SW
    +              System clock switch
    +              0
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          CIER
    +          CIER
    +          Clock interrupt enable
    +          register
    +          0x10
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CSSLSE
    +              LSE CSS interrupt flag
    +              7
    +              1
    +            
    +            
    +              HSI48RDYIE
    +              HSI48 ready interrupt flag
    +              6
    +              1
    +            
    +            
    +              MSIRDYIE
    +              MSI ready interrupt flag
    +              5
    +              1
    +            
    +            
    +              PLLRDYIE
    +              PLL ready interrupt flag
    +              4
    +              1
    +            
    +            
    +              HSERDYIE
    +              HSE ready interrupt flag
    +              3
    +              1
    +            
    +            
    +              HSI16RDYIE
    +              HSI16 ready interrupt flag
    +              2
    +              1
    +            
    +            
    +              LSERDYIE
    +              LSE ready interrupt flag
    +              1
    +              1
    +            
    +            
    +              LSIRDYIE
    +              LSI ready interrupt flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CIFR
    +          CIFR
    +          Clock interrupt flag register
    +          0x14
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CSSHSEF
    +              Clock Security System Interrupt
    +              flag
    +              8
    +              1
    +            
    +            
    +              CSSLSEF
    +              LSE Clock Security System Interrupt
    +              flag
    +              7
    +              1
    +            
    +            
    +              HSI48RDYF
    +              HSI48 ready interrupt flag
    +              6
    +              1
    +            
    +            
    +              MSIRDYF
    +              MSI ready interrupt flag
    +              5
    +              1
    +            
    +            
    +              PLLRDYF
    +              PLL ready interrupt flag
    +              4
    +              1
    +            
    +            
    +              HSERDYF
    +              HSE ready interrupt flag
    +              3
    +              1
    +            
    +            
    +              HSI16RDYF
    +              HSI16 ready interrupt flag
    +              2
    +              1
    +            
    +            
    +              LSERDYF
    +              LSE ready interrupt flag
    +              1
    +              1
    +            
    +            
    +              LSIRDYF
    +              LSI ready interrupt flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CICR
    +          CICR
    +          Clock interrupt clear register
    +          0x18
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              CSSHSEC
    +              Clock Security System Interrupt
    +              clear
    +              8
    +              1
    +            
    +            
    +              CSSLSEC
    +              LSE Clock Security System Interrupt
    +              clear
    +              7
    +              1
    +            
    +            
    +              HSI48RDYC
    +              HSI48 ready Interrupt
    +              clear
    +              6
    +              1
    +            
    +            
    +              MSIRDYC
    +              MSI ready Interrupt clear
    +              5
    +              1
    +            
    +            
    +              PLLRDYC
    +              PLL ready Interrupt clear
    +              4
    +              1
    +            
    +            
    +              HSERDYC
    +              HSE ready Interrupt clear
    +              3
    +              1
    +            
    +            
    +              HSI16RDYC
    +              HSI16 ready Interrupt
    +              clear
    +              2
    +              1
    +            
    +            
    +              LSERDYC
    +              LSE ready Interrupt clear
    +              1
    +              1
    +            
    +            
    +              LSIRDYC
    +              LSI ready Interrupt clear
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          IOPRSTR
    +          IOPRSTR
    +          GPIO reset register
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              IOPHRST
    +              I/O port H reset
    +              7
    +              1
    +            
    +            
    +              IOPDRST
    +              I/O port D reset
    +              3
    +              1
    +            
    +            
    +              IOPCRST
    +              I/O port A reset
    +              2
    +              1
    +            
    +            
    +              IOPBRST
    +              I/O port B reset
    +              1
    +              1
    +            
    +            
    +              IOPARST
    +              I/O port A reset
    +              0
    +              1
    +            
    +            
    +              IOPERST
    +              I/O port E reset
    +              4
    +              1
    +            
    +          
    +        
    +        
    +          AHBRSTR
    +          AHBRSTR
    +          AHB peripheral reset register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CRYPRST
    +              Crypto module reset
    +              24
    +              1
    +            
    +            
    +              RNGRST
    +              Random Number Generator module
    +              reset
    +              20
    +              1
    +            
    +            
    +              TOUCHRST
    +              Touch Sensing reset
    +              16
    +              1
    +            
    +            
    +              CRCRST
    +              Test integration module
    +              reset
    +              12
    +              1
    +            
    +            
    +              MIFRST
    +              Memory interface reset
    +              8
    +              1
    +            
    +            
    +              DMARST
    +              DMA reset
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          APB2RSTR
    +          APB2RSTR
    +          APB2 peripheral reset register
    +          0x24
    +          0x20
    +          read-write
    +          0x000000000
    +          
    +            
    +              DBGRST
    +              DBG reset
    +              22
    +              1
    +            
    +            
    +              USART1RST
    +              USART1 reset
    +              14
    +              1
    +            
    +            
    +              SPI1RST
    +              SPI 1 reset
    +              12
    +              1
    +            
    +            
    +              ADCRST
    +              ADC interface reset
    +              9
    +              1
    +            
    +            
    +              TM12RST
    +              TIM22 timer reset
    +              5
    +              1
    +            
    +            
    +              TIM21RST
    +              TIM21 timer reset
    +              2
    +              1
    +            
    +            
    +              SYSCFGRST
    +              System configuration controller
    +              reset
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          APB1RSTR
    +          APB1RSTR
    +          APB1 peripheral reset register
    +          0x28
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              LPTIM1RST
    +              Low power timer reset
    +              31
    +              1
    +            
    +            
    +              DACRST
    +              DAC interface reset
    +              29
    +              1
    +            
    +            
    +              PWRRST
    +              Power interface reset
    +              28
    +              1
    +            
    +            
    +              CRSRST
    +              Clock recovery system
    +              reset
    +              27
    +              1
    +            
    +            
    +              USBRST
    +              USB reset
    +              23
    +              1
    +            
    +            
    +              I2C2RST
    +              I2C2 reset
    +              22
    +              1
    +            
    +            
    +              I2C1RST
    +              I2C1 reset
    +              21
    +              1
    +            
    +            
    +              LPUART1RST
    +              LPUART1 reset
    +              18
    +              1
    +            
    +            
    +              LPUART12RST
    +              UART2 reset
    +              17
    +              1
    +            
    +            
    +              SPI2RST
    +              SPI2 reset
    +              14
    +              1
    +            
    +            
    +              WWDRST
    +              Window watchdog reset
    +              11
    +              1
    +            
    +            
    +              TIM6RST
    +              Timer 6 reset
    +              4
    +              1
    +            
    +            
    +              TIM2RST
    +              Timer2 reset
    +              0
    +              1
    +            
    +            
    +              TIM3RST
    +              Timer3 reset
    +              1
    +              1
    +            
    +            
    +              TIM7RST
    +              Timer 7 reset
    +              5
    +              1
    +            
    +            
    +              USART4RST
    +              USART4 reset
    +              19
    +              1
    +            
    +            
    +              USART5RST
    +              USART5 reset
    +              20
    +              1
    +            
    +            
    +              I2C3RST
    +              I2C3 reset
    +              30
    +              1
    +            
    +          
    +        
    +        
    +          IOPENR
    +          IOPENR
    +          GPIO clock enable register
    +          0x2C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              IOPHEN
    +              I/O port H clock enable
    +              bit
    +              7
    +              1
    +            
    +            
    +              IOPDEN
    +              I/O port D clock enable
    +              bit
    +              3
    +              1
    +            
    +            
    +              IOPCEN
    +              IO port A clock enable bit
    +              2
    +              1
    +            
    +            
    +              IOPBEN
    +              IO port B clock enable bit
    +              1
    +              1
    +            
    +            
    +              IOPAEN
    +              IO port A clock enable bit
    +              0
    +              1
    +            
    +            
    +              IOPEEN
    +              I/O port E clock enable
    +              bit
    +              4
    +              1
    +            
    +          
    +        
    +        
    +          AHBENR
    +          AHBENR
    +          AHB peripheral clock enable
    +          register
    +          0x30
    +          0x20
    +          read-write
    +          0x00000100
    +          
    +            
    +              CRYPEN
    +              Crypto clock enable bit
    +              24
    +              1
    +            
    +            
    +              RNGEN
    +              Random Number Generator clock enable
    +              bit
    +              20
    +              1
    +            
    +            
    +              TOUCHEN
    +              Touch Sensing clock enable
    +              bit
    +              16
    +              1
    +            
    +            
    +              CRCEN
    +              CRC clock enable bit
    +              12
    +              1
    +            
    +            
    +              MIFEN
    +              NVM interface clock enable
    +              bit
    +              8
    +              1
    +            
    +            
    +              DMAEN
    +              DMA clock enable bit
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          APB2ENR
    +          APB2ENR
    +          APB2 peripheral clock enable
    +          register
    +          0x34
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              DBGEN
    +              DBG clock enable bit
    +              22
    +              1
    +            
    +            
    +              USART1EN
    +              USART1 clock enable bit
    +              14
    +              1
    +            
    +            
    +              SPI1EN
    +              SPI1 clock enable bit
    +              12
    +              1
    +            
    +            
    +              ADCEN
    +              ADC clock enable bit
    +              9
    +              1
    +            
    +            
    +              MIFIEN
    +              MiFaRe Firewall clock enable
    +              bit
    +              7
    +              1
    +            
    +            
    +              TIM22EN
    +              TIM22 timer clock enable
    +              bit
    +              5
    +              1
    +            
    +            
    +              TIM21EN
    +              TIM21 timer clock enable
    +              bit
    +              2
    +              1
    +            
    +            
    +              SYSCFGEN
    +              System configuration controller clock
    +              enable bit
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          APB1ENR
    +          APB1ENR
    +          APB1 peripheral clock enable
    +          register
    +          0x38
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              LPTIM1EN
    +              Low power timer clock enable
    +              bit
    +              31
    +              1
    +            
    +            
    +              DACEN
    +              DAC interface clock enable
    +              bit
    +              29
    +              1
    +            
    +            
    +              PWREN
    +              Power interface clock enable
    +              bit
    +              28
    +              1
    +            
    +            
    +              CRSEN
    +              Clock recovery system clock enable
    +              bit
    +              27
    +              1
    +            
    +            
    +              USBEN
    +              USB clock enable bit
    +              23
    +              1
    +            
    +            
    +              I2C2EN
    +              I2C2 clock enable bit
    +              22
    +              1
    +            
    +            
    +              I2C1EN
    +              I2C1 clock enable bit
    +              21
    +              1
    +            
    +            
    +              LPUART1EN
    +              LPUART1 clock enable bit
    +              18
    +              1
    +            
    +            
    +              USART2EN
    +              UART2 clock enable bit
    +              17
    +              1
    +            
    +            
    +              SPI2EN
    +              SPI2 clock enable bit
    +              14
    +              1
    +            
    +            
    +              WWDGEN
    +              Window watchdog clock enable
    +              bit
    +              11
    +              1
    +            
    +            
    +              TIM6EN
    +              Timer 6 clock enable bit
    +              4
    +              1
    +            
    +            
    +              TIM2EN
    +              Timer2 clock enable bit
    +              0
    +              1
    +            
    +            
    +              TIM3EN
    +              Timer3 clock enable bit
    +              1
    +              1
    +            
    +            
    +              TIM7EN
    +              Timer 7 clock enable bit
    +              5
    +              1
    +            
    +            
    +              USART4EN
    +              USART4 clock enable bit
    +              19
    +              1
    +            
    +            
    +              USART5EN
    +              USART5 clock enable bit
    +              20
    +              1
    +            
    +            
    +              I2C3EN
    +              I2C3 clock enable bit
    +              30
    +              1
    +            
    +          
    +        
    +        
    +          IOPSMEN
    +          IOPSMEN
    +          GPIO clock enable in sleep mode
    +          register
    +          0x3C
    +          0x20
    +          read-write
    +          0x0000008F
    +          
    +            
    +              IOPHSMEN
    +              IOPHSMEN
    +              7
    +              1
    +            
    +            
    +              IOPDSMEN
    +              IOPDSMEN
    +              3
    +              1
    +            
    +            
    +              IOPCSMEN
    +              IOPCSMEN
    +              2
    +              1
    +            
    +            
    +              IOPBSMEN
    +              IOPBSMEN
    +              1
    +              1
    +            
    +            
    +              IOPASMEN
    +              IOPASMEN
    +              0
    +              1
    +            
    +            
    +              IOPESMEN
    +              Port E clock enable during Sleep mode
    +              bit
    +              4
    +              1
    +            
    +          
    +        
    +        
    +          AHBSMENR
    +          AHBSMENR
    +          AHB peripheral clock enable in sleep mode
    +          register
    +          0x40
    +          0x20
    +          read-write
    +          0x01111301
    +          
    +            
    +              CRYPSMEN
    +              Crypto clock enable during sleep mode
    +              bit
    +              24
    +              1
    +            
    +            
    +              RNGSMEN
    +              Random Number Generator clock enable
    +              during sleep mode bit
    +              20
    +              1
    +            
    +            
    +              TOUCHSMEN
    +              Touch Sensing clock enable during sleep
    +              mode bit
    +              16
    +              1
    +            
    +            
    +              CRCSMEN
    +              CRC clock enable during sleep mode
    +              bit
    +              12
    +              1
    +            
    +            
    +              SRAMSMEN
    +              SRAM interface clock enable during sleep
    +              mode bit
    +              9
    +              1
    +            
    +            
    +              MIFSMEN
    +              NVM interface clock enable during sleep
    +              mode bit
    +              8
    +              1
    +            
    +            
    +              DMASMEN
    +              DMA clock enable during sleep mode
    +              bit
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          APB2SMENR
    +          APB2SMENR
    +          APB2 peripheral clock enable in sleep mode
    +          register
    +          0x44
    +          0x20
    +          read-write
    +          0x00405225
    +          
    +            
    +              DBGSMEN
    +              DBG clock enable during sleep mode
    +              bit
    +              22
    +              1
    +            
    +            
    +              USART1SMEN
    +              USART1 clock enable during sleep mode
    +              bit
    +              14
    +              1
    +            
    +            
    +              SPI1SMEN
    +              SPI1 clock enable during sleep mode
    +              bit
    +              12
    +              1
    +            
    +            
    +              ADCSMEN
    +              ADC clock enable during sleep mode
    +              bit
    +              9
    +              1
    +            
    +            
    +              TIM22SMEN
    +              TIM22 timer clock enable during sleep
    +              mode bit
    +              5
    +              1
    +            
    +            
    +              TIM21SMEN
    +              TIM21 timer clock enable during sleep
    +              mode bit
    +              2
    +              1
    +            
    +            
    +              SYSCFGSMEN
    +              System configuration controller clock
    +              enable during sleep mode bit
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          APB1SMENR
    +          APB1SMENR
    +          APB1 peripheral clock enable in sleep mode
    +          register
    +          0x48
    +          0x20
    +          read-write
    +          0xB8E64A11
    +          
    +            
    +              LPTIM1SMEN
    +              Low power timer clock enable during
    +              sleep mode bit
    +              31
    +              1
    +            
    +            
    +              DACSMEN
    +              DAC interface clock enable during sleep
    +              mode bit
    +              29
    +              1
    +            
    +            
    +              PWRSMEN
    +              Power interface clock enable during
    +              sleep mode bit
    +              28
    +              1
    +            
    +            
    +              CRSSMEN
    +              Clock recovery system clock enable
    +              during sleep mode bit
    +              27
    +              1
    +            
    +            
    +              USBSMEN
    +              USB clock enable during sleep mode
    +              bit
    +              23
    +              1
    +            
    +            
    +              I2C2SMEN
    +              I2C2 clock enable during sleep mode
    +              bit
    +              22
    +              1
    +            
    +            
    +              I2C1SMEN
    +              I2C1 clock enable during sleep mode
    +              bit
    +              21
    +              1
    +            
    +            
    +              LPUART1SMEN
    +              LPUART1 clock enable during sleep mode
    +              bit
    +              18
    +              1
    +            
    +            
    +              USART2SMEN
    +              UART2 clock enable during sleep mode
    +              bit
    +              17
    +              1
    +            
    +            
    +              SPI2SMEN
    +              SPI2 clock enable during sleep mode
    +              bit
    +              14
    +              1
    +            
    +            
    +              WWDGSMEN
    +              Window watchdog clock enable during
    +              sleep mode bit
    +              11
    +              1
    +            
    +            
    +              TIM6SMEN
    +              Timer 6 clock enable during sleep mode
    +              bit
    +              4
    +              1
    +            
    +            
    +              TIM2SMEN
    +              Timer2 clock enable during sleep mode
    +              bit
    +              0
    +              1
    +            
    +            
    +              TIM3SMEN
    +              Timer3 clock enable during Sleep mode
    +              bit
    +              1
    +              1
    +            
    +            
    +              TIM7SMEN
    +              Timer 7 clock enable during Sleep mode
    +              bit
    +              5
    +              1
    +            
    +            
    +              USART4SMEN
    +              USART4 clock enable during Sleep mode
    +              bit
    +              19
    +              1
    +            
    +            
    +              USART5SMEN
    +              USART5 clock enable during Sleep mode
    +              bit
    +              20
    +              1
    +            
    +            
    +              I2C3SMEN
    +              2C3 clock enable during Sleep mode
    +              bit
    +              30
    +              1
    +            
    +          
    +        
    +        
    +          CCIPR
    +          CCIPR
    +          Clock configuration register
    +          0x4C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              HSI48MSEL
    +              48 MHz HSI48 clock source selection
    +              bit
    +              26
    +              1
    +            
    +            
    +              LPTIM1SEL1
    +              Low Power Timer clock source selection
    +              bits
    +              19
    +              1
    +            
    +            
    +              LPTIM1SEL0
    +              LPTIM1SEL0
    +              18
    +              1
    +            
    +            
    +              I2C1SEL1
    +              I2C1 clock source selection
    +              bits
    +              13
    +              1
    +            
    +            
    +              I2C1SEL0
    +              I2C1SEL0
    +              12
    +              1
    +            
    +            
    +              LPUART1SEL1
    +              LPUART1 clock source selection
    +              bits
    +              11
    +              1
    +            
    +            
    +              LPUART1SEL0
    +              LPUART1SEL0
    +              10
    +              1
    +            
    +            
    +              USART2SEL1
    +              USART2 clock source selection
    +              bits
    +              3
    +              1
    +            
    +            
    +              USART2SEL0
    +              USART2SEL0
    +              2
    +              1
    +            
    +            
    +              USART1SEL1
    +              USART1 clock source selection
    +              bits
    +              1
    +              1
    +            
    +            
    +              USART1SEL0
    +              USART1SEL0
    +              0
    +              1
    +            
    +            
    +              I2C3SEL
    +              I2C3 clock source selection
    +              bits
    +              16
    +              2
    +            
    +          
    +        
    +        
    +          CSR
    +          CSR
    +          Control and status register
    +          0x50
    +          0x20
    +          0x0C000000
    +          
    +            
    +              LPWRSTF
    +              Low-power reset flag
    +              31
    +              1
    +              read-write
    +            
    +            
    +              WWDGRSTF
    +              Window watchdog reset flag
    +              30
    +              1
    +              read-write
    +            
    +            
    +              IWDGRSTF
    +              Independent watchdog reset
    +              flag
    +              29
    +              1
    +              read-write
    +            
    +            
    +              SFTRSTF
    +              Software reset flag
    +              28
    +              1
    +              read-write
    +            
    +            
    +              PORRSTF
    +              POR/PDR reset flag
    +              27
    +              1
    +              read-write
    +            
    +            
    +              PINRSTF
    +              PIN reset flag
    +              26
    +              1
    +              read-write
    +            
    +            
    +              OBLRSTF
    +              OBLRSTF
    +              25
    +              1
    +              read-write
    +            
    +            
    +              RMVF
    +              Remove reset flag
    +              24
    +              1
    +              read-write
    +            
    +            
    +              RTCRST
    +              RTC software reset bit
    +              19
    +              1
    +              read-write
    +            
    +            
    +              RTCEN
    +              RTC clock enable bit
    +              18
    +              1
    +              read-write
    +            
    +            
    +              RTCSEL
    +              RTC and LCD clock source selection
    +              bits
    +              16
    +              2
    +              read-write
    +            
    +            
    +              CSSLSED
    +              CSS on LSE failure detection
    +              flag
    +              14
    +              1
    +              read-write
    +            
    +            
    +              CSSLSEON
    +              CSSLSEON
    +              13
    +              1
    +              read-write
    +            
    +            
    +              LSEDRV
    +              LSEDRV
    +              11
    +              2
    +              read-write
    +            
    +            
    +              LSEBYP
    +              External low-speed oscillator bypass
    +              bit
    +              10
    +              1
    +              read-write
    +            
    +            
    +              LSERDY
    +              External low-speed oscillator ready
    +              bit
    +              9
    +              1
    +              read-only
    +            
    +            
    +              LSEON
    +              External low-speed oscillator enable
    +              bit
    +              8
    +              1
    +              read-write
    +            
    +            
    +              LSIRDY
    +              Internal low-speed oscillator ready
    +              bit
    +              1
    +              1
    +              read-write
    +            
    +            
    +              LSION
    +              Internal low-speed oscillator
    +              enable
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      SYSCFG_COMP
    +      System configuration controller and
    +      Comparator
    +      SYSCFG
    +      0x40010000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          CFGR1
    +          CFGR1
    +          SYSCFG configuration register
    +          1
    +          0x0
    +          0x20
    +          0x00000000
    +          
    +            
    +              BOOT_MODE
    +              Boot mode selected by the boot pins
    +              status bits
    +              8
    +              2
    +              read-only
    +            
    +            
    +              MEM_MODE
    +              Memory mapping selection
    +              bits
    +              0
    +              2
    +              read-write
    +            
    +          
    +        
    +        
    +          CFGR2
    +          CFGR2
    +          SYSCFG configuration register
    +          2
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              I2C2_FMP
    +              I2C2 Fm+ drive capability enable
    +              bit
    +              13
    +              1
    +            
    +            
    +              I2C1_FMP
    +              I2C1 Fm+ drive capability enable
    +              bit
    +              12
    +              1
    +            
    +            
    +              I2C_PB9_FMP
    +              Fm+ drive capability on PB9 enable
    +              bit
    +              11
    +              1
    +            
    +            
    +              I2C_PB8_FMP
    +              Fm+ drive capability on PB8 enable
    +              bit
    +              10
    +              1
    +            
    +            
    +              I2C_PB7_FMP
    +              Fm+ drive capability on PB7 enable
    +              bit
    +              9
    +              1
    +            
    +            
    +              I2C_PB6_FMP
    +              Fm+ drive capability on PB6 enable
    +              bit
    +              8
    +              1
    +            
    +            
    +              FWDISEN
    +              Firewall disable bit
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          EXTICR1
    +          EXTICR1
    +          external interrupt configuration register
    +          1
    +          0x8
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              EXTI3
    +              EXTI x configuration (x = 0 to
    +              3)
    +              12
    +              4
    +            
    +            
    +              EXTI2
    +              EXTI x configuration (x = 0 to
    +              3)
    +              8
    +              4
    +            
    +            
    +              EXTI1
    +              EXTI x configuration (x = 0 to
    +              3)
    +              4
    +              4
    +            
    +            
    +              EXTI0
    +              EXTI x configuration (x = 0 to
    +              3)
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          EXTICR2
    +          EXTICR2
    +          external interrupt configuration register
    +          2
    +          0xC
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              EXTI7
    +              EXTI x configuration (x = 4 to
    +              7)
    +              12
    +              4
    +            
    +            
    +              EXTI6
    +              EXTI x configuration (x = 4 to
    +              7)
    +              8
    +              4
    +            
    +            
    +              EXTI5
    +              EXTI x configuration (x = 4 to
    +              7)
    +              4
    +              4
    +            
    +            
    +              EXTI4
    +              EXTI x configuration (x = 4 to
    +              7)
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          EXTICR3
    +          EXTICR3
    +          external interrupt configuration register
    +          3
    +          0x10
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              EXTI11
    +              EXTI x configuration (x = 8 to
    +              11)
    +              12
    +              4
    +            
    +            
    +              EXTI10
    +              EXTI10
    +              8
    +              4
    +            
    +            
    +              EXTI9
    +              EXTI x configuration (x = 8 to
    +              11)
    +              4
    +              4
    +            
    +            
    +              EXTI8
    +              EXTI x configuration (x = 8 to
    +              11)
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          EXTICR4
    +          EXTICR4
    +          external interrupt configuration register
    +          4
    +          0x14
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              EXTI15
    +              EXTI x configuration (x = 12 to
    +              15)
    +              12
    +              4
    +            
    +            
    +              EXTI14
    +              EXTI14
    +              8
    +              4
    +            
    +            
    +              EXTI13
    +              EXTI13
    +              4
    +              4
    +            
    +            
    +              EXTI12
    +              EXTI12
    +              0
    +              4
    +            
    +          
    +        
    +        
    +          CFGR3
    +          CFGR3
    +          SYSCFG configuration register
    +          3
    +          0x20
    +          0x20
    +          0x00000000
    +          
    +            
    +              REF_LOCK
    +              REF_CTRL lock bit
    +              31
    +              1
    +              write-only
    +            
    +            
    +              VREFINT_RDYF
    +              VREFINT ready flag
    +              30
    +              1
    +              read-only
    +            
    +            
    +              VREFINT_COMP_RDYF
    +              VREFINT for comparator ready
    +              flag
    +              29
    +              1
    +              read-only
    +            
    +            
    +              VREFINT_ADC_RDYF
    +              VREFINT for ADC ready flag
    +              28
    +              1
    +              read-only
    +            
    +            
    +              SENSOR_ADC_RDYF
    +              Sensor for ADC ready flag
    +              27
    +              1
    +              read-only
    +            
    +            
    +              REF_RC48MHz_RDYF
    +              VREFINT for 48 MHz RC oscillator ready
    +              flag
    +              26
    +              1
    +              read-only
    +            
    +            
    +              ENREF_RC48MHz
    +              VREFINT reference for 48 MHz RC
    +              oscillator enable bit
    +              13
    +              1
    +              read-write
    +            
    +            
    +              ENBUF_VREFINT_COMP
    +              VREFINT reference for comparator 2
    +              enable bit
    +              12
    +              1
    +              read-write
    +            
    +            
    +              ENBUF_SENSOR_ADC
    +              Sensor reference for ADC enable
    +              bit
    +              9
    +              1
    +              read-write
    +            
    +            
    +              ENBUF_BGAP_ADC
    +              VREFINT reference for ADC enable
    +              bit
    +              8
    +              1
    +              read-write
    +            
    +            
    +              SEL_VREF_OUT
    +              BGAP_ADC connection bit
    +              4
    +              2
    +              read-write
    +            
    +            
    +              EN_BGAP
    +              Vref Enable bit
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          COMP1_CSR
    +          COMP1_CSR
    +          Comparator 1 control and status
    +          register
    +          0x18
    +          0x20
    +          0x00000000
    +          
    +            
    +              COMP1LOCK
    +              COMP1_CSR register lock
    +              bit
    +              31
    +              1
    +              read-only
    +            
    +            
    +              COMP1VALUE
    +              Comparator 1 output status
    +              bit
    +              30
    +              1
    +              read-only
    +            
    +            
    +              COMP1POLARITY
    +              Comparator 1 polarity selection
    +              bit
    +              15
    +              1
    +              read-write
    +            
    +            
    +              COMP1LPTIMIN1
    +              Comparator 1 LPTIM input propagation
    +              bit
    +              12
    +              1
    +              read-write
    +            
    +            
    +              COMP1WM
    +              Comparator 1 window mode selection
    +              bit
    +              8
    +              1
    +              read-write
    +            
    +            
    +              COMP1INNSEL
    +              Comparator 1 Input Minus connection
    +              configuration bit
    +              4
    +              2
    +              read-write
    +            
    +            
    +              COMP1EN
    +              Comparator 1 enable bit
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          COMP2_CSR
    +          COMP2_CSR
    +          Comparator 2 control and status
    +          register
    +          0x1C
    +          0x20
    +          0x00000000
    +          
    +            
    +              COMP2LOCK
    +              COMP2_CSR register lock
    +              bit
    +              31
    +              1
    +              read-only
    +            
    +            
    +              COMP2VALUE
    +              Comparator 2 output status
    +              bit
    +              20
    +              1
    +              read-only
    +            
    +            
    +              COMP2POLARITY
    +              Comparator 2 polarity selection
    +              bit
    +              15
    +              1
    +              read-write
    +            
    +            
    +              COMP2LPTIMIN1
    +              Comparator 2 LPTIM input 1 propagation
    +              bit
    +              13
    +              1
    +              read-write
    +            
    +            
    +              COMP2LPTIMIN2
    +              Comparator 2 LPTIM input 2 propagation
    +              bit
    +              12
    +              1
    +              read-write
    +            
    +            
    +              COMP2INPSEL
    +              Comparator 2 Input Plus connection
    +              configuration bit
    +              8
    +              3
    +              read-write
    +            
    +            
    +              COMP2INNSEL
    +              Comparator 2 Input Minus connection
    +              configuration bit
    +              4
    +              3
    +              read-write
    +            
    +            
    +              COMP2SPEED
    +              Comparator 2 power mode selection
    +              bit
    +              3
    +              1
    +              read-write
    +            
    +            
    +              COMP2EN
    +              Comparator 2 enable bit
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      SPI1
    +      Serial peripheral interface
    +      SPI
    +      0x40013000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          CR1
    +          CR1
    +          control register 1
    +          0x0
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              BIDIMODE
    +              Bidirectional data mode
    +              enable
    +              15
    +              1
    +            
    +            
    +              BIDIOE
    +              Output enable in bidirectional
    +              mode
    +              14
    +              1
    +            
    +            
    +              CRCEN
    +              Hardware CRC calculation
    +              enable
    +              13
    +              1
    +            
    +            
    +              CRCNEXT
    +              CRC transfer next
    +              12
    +              1
    +            
    +            
    +              DFF
    +              Data frame format
    +              11
    +              1
    +            
    +            
    +              RXONLY
    +              Receive only
    +              10
    +              1
    +            
    +            
    +              SSM
    +              Software slave management
    +              9
    +              1
    +            
    +            
    +              SSI
    +              Internal slave select
    +              8
    +              1
    +            
    +            
    +              LSBFIRST
    +              Frame format
    +              7
    +              1
    +            
    +            
    +              SPE
    +              SPI enable
    +              6
    +              1
    +            
    +            
    +              BR
    +              Baud rate control
    +              3
    +              3
    +            
    +            
    +              MSTR
    +              Master selection
    +              2
    +              1
    +            
    +            
    +              CPOL
    +              Clock polarity
    +              1
    +              1
    +            
    +            
    +              CPHA
    +              Clock phase
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CR2
    +          CR2
    +          control register 2
    +          0x4
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              RXDMAEN
    +              Rx buffer DMA enable
    +              0
    +              1
    +            
    +            
    +              TXDMAEN
    +              Tx buffer DMA enable
    +              1
    +              1
    +            
    +            
    +              SSOE
    +              SS output enable
    +              2
    +              1
    +            
    +            
    +              FRF
    +              Frame format
    +              4
    +              1
    +            
    +            
    +              ERRIE
    +              Error interrupt enable
    +              5
    +              1
    +            
    +            
    +              RXNEIE
    +              RX buffer not empty interrupt
    +              enable
    +              6
    +              1
    +            
    +            
    +              TXEIE
    +              Tx buffer empty interrupt
    +              enable
    +              7
    +              1
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          status register
    +          0x8
    +          0x20
    +          0x0002
    +          
    +            
    +              RXNE
    +              Receive buffer not empty
    +              0
    +              1
    +              read-only
    +            
    +            
    +              TXE
    +              Transmit buffer empty
    +              1
    +              1
    +              read-only
    +            
    +            
    +              CHSIDE
    +              Channel side
    +              2
    +              1
    +              read-only
    +            
    +            
    +              UDR
    +              Underrun flag
    +              3
    +              1
    +              read-only
    +            
    +            
    +              CRCERR
    +              CRC error flag
    +              4
    +              1
    +              read-write
    +            
    +            
    +              MODF
    +              Mode fault
    +              5
    +              1
    +              read-only
    +            
    +            
    +              OVR
    +              Overrun flag
    +              6
    +              1
    +              read-only
    +            
    +            
    +              BSY
    +              Busy flag
    +              7
    +              1
    +              read-only
    +            
    +            
    +              TIFRFE
    +              TI frame format error
    +              8
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          DR
    +          DR
    +          data register
    +          0xC
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              DR
    +              Data register
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CRCPR
    +          CRCPR
    +          CRC polynomial register
    +          0x10
    +          0x20
    +          read-write
    +          0x0007
    +          
    +            
    +              CRCPOLY
    +              CRC polynomial register
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          RXCRCR
    +          RXCRCR
    +          RX CRC register
    +          0x14
    +          0x20
    +          read-only
    +          0x0000
    +          
    +            
    +              RxCRC
    +              Rx CRC register
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          TXCRCR
    +          TXCRCR
    +          TX CRC register
    +          0x18
    +          0x20
    +          read-only
    +          0x0000
    +          
    +            
    +              TxCRC
    +              Tx CRC register
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          I2SCFGR
    +          I2SCFGR
    +          I2S configuration register
    +          0x1C
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              I2SMOD
    +              I2S mode selection
    +              11
    +              1
    +            
    +            
    +              I2SE
    +              I2S Enable
    +              10
    +              1
    +            
    +            
    +              I2SCFG
    +              I2S configuration mode
    +              8
    +              2
    +            
    +            
    +              PCMSYNC
    +              PCM frame synchronization
    +              7
    +              1
    +            
    +            
    +              I2SSTD
    +              I2S standard selection
    +              4
    +              2
    +            
    +            
    +              CKPOL
    +              Steady state clock
    +              polarity
    +              3
    +              1
    +            
    +            
    +              DATLEN
    +              Data length to be
    +              transferred
    +              1
    +              2
    +            
    +            
    +              CHLEN
    +              Channel length (number of bits per audio
    +              channel)
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          I2SPR
    +          I2SPR
    +          I2S prescaler register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000010
    +          
    +            
    +              MCKOE
    +              Master clock output enable
    +              9
    +              1
    +            
    +            
    +              ODD
    +              Odd factor for the
    +              prescaler
    +              8
    +              1
    +            
    +            
    +              I2SDIV
    +              I2S Linear prescaler
    +              0
    +              8
    +            
    +          
    +        
    +      
    +    
    +    
    +      SPI2
    +      0x40003800
    +      
    +        SPI1
    +        SPI1_global_interrupt
    +        25
    +      
    +    
    +    
    +      I2C1
    +      Inter-integrated circuit
    +      I2C
    +      0x40005400
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        SPI2
    +        SPI2 global interrupt
    +        26
    +      
    +      
    +        
    +          CR1
    +          CR1
    +          Control register 1
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PE
    +              Peripheral enable
    +              0
    +              1
    +            
    +            
    +              TXIE
    +              TX Interrupt enable
    +              1
    +              1
    +            
    +            
    +              RXIE
    +              RX Interrupt enable
    +              2
    +              1
    +            
    +            
    +              ADDRIE
    +              Address match interrupt enable (slave
    +              only)
    +              3
    +              1
    +            
    +            
    +              NACKIE
    +              Not acknowledge received interrupt
    +              enable
    +              4
    +              1
    +            
    +            
    +              STOPIE
    +              STOP detection Interrupt
    +              enable
    +              5
    +              1
    +            
    +            
    +              TCIE
    +              Transfer Complete interrupt
    +              enable
    +              6
    +              1
    +            
    +            
    +              ERRIE
    +              Error interrupts enable
    +              7
    +              1
    +            
    +            
    +              DNF
    +              Digital noise filter
    +              8
    +              4
    +            
    +            
    +              ANFOFF
    +              Analog noise filter OFF
    +              12
    +              1
    +            
    +            
    +              TXDMAEN
    +              DMA transmission requests
    +              enable
    +              14
    +              1
    +            
    +            
    +              RXDMAEN
    +              DMA reception requests
    +              enable
    +              15
    +              1
    +            
    +            
    +              SBC
    +              Slave byte control
    +              16
    +              1
    +            
    +            
    +              NOSTRETCH
    +              Clock stretching disable
    +              17
    +              1
    +            
    +            
    +              WUPEN
    +              Wakeup from STOP enable
    +              18
    +              1
    +            
    +            
    +              GCEN
    +              General call enable
    +              19
    +              1
    +            
    +            
    +              SMBHEN
    +              SMBus Host address enable
    +              20
    +              1
    +            
    +            
    +              SMBDEN
    +              SMBus Device Default address
    +              enable
    +              21
    +              1
    +            
    +            
    +              ALERTEN
    +              SMBUS alert enable
    +              22
    +              1
    +            
    +            
    +              PECEN
    +              PEC enable
    +              23
    +              1
    +            
    +          
    +        
    +        
    +          CR2
    +          CR2
    +          Control register 2
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PECBYTE
    +              Packet error checking byte
    +              26
    +              1
    +            
    +            
    +              AUTOEND
    +              Automatic end mode (master
    +              mode)
    +              25
    +              1
    +            
    +            
    +              RELOAD
    +              NBYTES reload mode
    +              24
    +              1
    +            
    +            
    +              NBYTES
    +              Number of bytes
    +              16
    +              8
    +            
    +            
    +              NACK
    +              NACK generation (slave
    +              mode)
    +              15
    +              1
    +            
    +            
    +              STOP
    +              Stop generation (master
    +              mode)
    +              14
    +              1
    +            
    +            
    +              START
    +              Start generation
    +              13
    +              1
    +            
    +            
    +              HEAD10R
    +              10-bit address header only read
    +              direction (master receiver mode)
    +              12
    +              1
    +            
    +            
    +              ADD10
    +              10-bit addressing mode (master
    +              mode)
    +              11
    +              1
    +            
    +            
    +              RD_WRN
    +              Transfer direction (master
    +              mode)
    +              10
    +              1
    +            
    +            
    +              SADD
    +              Slave address bit (master
    +              mode)
    +              0
    +              10
    +            
    +          
    +        
    +        
    +          OAR1
    +          OAR1
    +          Own address register 1
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OA1
    +              Interface address
    +              0
    +              10
    +            
    +            
    +              OA1MODE
    +              Own Address 1 10-bit mode
    +              10
    +              1
    +            
    +            
    +              OA1EN
    +              Own Address 1 enable
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          OAR2
    +          OAR2
    +          Own address register 2
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OA2
    +              Interface address
    +              1
    +              7
    +            
    +            
    +              OA2MSK
    +              Own Address 2 masks
    +              8
    +              3
    +            
    +            
    +              OA2EN
    +              Own Address 2 enable
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          TIMINGR
    +          TIMINGR
    +          Timing register
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              SCLL
    +              SCL low period (master
    +              mode)
    +              0
    +              8
    +            
    +            
    +              SCLH
    +              SCL high period (master
    +              mode)
    +              8
    +              8
    +            
    +            
    +              SDADEL
    +              Data hold time
    +              16
    +              4
    +            
    +            
    +              SCLDEL
    +              Data setup time
    +              20
    +              4
    +            
    +            
    +              PRESC
    +              Timing prescaler
    +              28
    +              4
    +            
    +          
    +        
    +        
    +          TIMEOUTR
    +          TIMEOUTR
    +          Status register 1
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              TIMEOUTA
    +              Bus timeout A
    +              0
    +              12
    +            
    +            
    +              TIDLE
    +              Idle clock timeout
    +              detection
    +              12
    +              1
    +            
    +            
    +              TIMOUTEN
    +              Clock timeout enable
    +              15
    +              1
    +            
    +            
    +              TIMEOUTB
    +              Bus timeout B
    +              16
    +              12
    +            
    +            
    +              TEXTEN
    +              Extended clock timeout
    +              enable
    +              31
    +              1
    +            
    +          
    +        
    +        
    +          ISR
    +          ISR
    +          Interrupt and Status register
    +          0x18
    +          0x20
    +          0x00000001
    +          
    +            
    +              ADDCODE
    +              Address match code (Slave
    +              mode)
    +              17
    +              7
    +              read-only
    +            
    +            
    +              DIR
    +              Transfer direction (Slave
    +              mode)
    +              16
    +              1
    +              read-only
    +            
    +            
    +              BUSY
    +              Bus busy
    +              15
    +              1
    +              read-only
    +            
    +            
    +              ALERT
    +              SMBus alert
    +              13
    +              1
    +              read-only
    +            
    +            
    +              TIMEOUT
    +              Timeout or t_low detection
    +              flag
    +              12
    +              1
    +              read-only
    +            
    +            
    +              PECERR
    +              PEC Error in reception
    +              11
    +              1
    +              read-only
    +            
    +            
    +              OVR
    +              Overrun/Underrun (slave
    +              mode)
    +              10
    +              1
    +              read-only
    +            
    +            
    +              ARLO
    +              Arbitration lost
    +              9
    +              1
    +              read-only
    +            
    +            
    +              BERR
    +              Bus error
    +              8
    +              1
    +              read-only
    +            
    +            
    +              TCR
    +              Transfer Complete Reload
    +              7
    +              1
    +              read-only
    +            
    +            
    +              TC
    +              Transfer Complete (master
    +              mode)
    +              6
    +              1
    +              read-only
    +            
    +            
    +              STOPF
    +              Stop detection flag
    +              5
    +              1
    +              read-only
    +            
    +            
    +              NACKF
    +              Not acknowledge received
    +              flag
    +              4
    +              1
    +              read-only
    +            
    +            
    +              ADDR
    +              Address matched (slave
    +              mode)
    +              3
    +              1
    +              read-only
    +            
    +            
    +              RXNE
    +              Receive data register not empty
    +              (receivers)
    +              2
    +              1
    +              read-only
    +            
    +            
    +              TXIS
    +              Transmit interrupt status
    +              (transmitters)
    +              1
    +              1
    +              read-write
    +            
    +            
    +              TXE
    +              Transmit data register empty
    +              (transmitters)
    +              0
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          ICR
    +          ICR
    +          Interrupt clear register
    +          0x1C
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              ALERTCF
    +              Alert flag clear
    +              13
    +              1
    +            
    +            
    +              TIMOUTCF
    +              Timeout detection flag
    +              clear
    +              12
    +              1
    +            
    +            
    +              PECCF
    +              PEC Error flag clear
    +              11
    +              1
    +            
    +            
    +              OVRCF
    +              Overrun/Underrun flag
    +              clear
    +              10
    +              1
    +            
    +            
    +              ARLOCF
    +              Arbitration lost flag
    +              clear
    +              9
    +              1
    +            
    +            
    +              BERRCF
    +              Bus error flag clear
    +              8
    +              1
    +            
    +            
    +              STOPCF
    +              Stop detection flag clear
    +              5
    +              1
    +            
    +            
    +              NACKCF
    +              Not Acknowledge flag clear
    +              4
    +              1
    +            
    +            
    +              ADDRCF
    +              Address Matched flag clear
    +              3
    +              1
    +            
    +          
    +        
    +        
    +          PECR
    +          PECR
    +          PEC register
    +          0x20
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              PEC
    +              Packet error checking
    +              register
    +              0
    +              8
    +            
    +          
    +        
    +        
    +          RXDR
    +          RXDR
    +          Receive data register
    +          0x24
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              RXDATA
    +              8-bit receive data
    +              0
    +              8
    +            
    +          
    +        
    +        
    +          TXDR
    +          TXDR
    +          Transmit data register
    +          0x28
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              TXDATA
    +              8-bit transmit data
    +              0
    +              8
    +            
    +          
    +        
    +      
    +    
    +    
    +      I2C2
    +      0x40005800
    +      
    +        I2C1
    +        I2C1 global interrupt
    +        23
    +      
    +      
    +        I2C2
    +        I2C2 global interrupt
    +        24
    +      
    +    
    +    
    +      I2C3
    +      0x40007800
    +    
    +    
    +      PWR
    +      Power control
    +      PWR
    +      0x40007000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        I2C3
    +        I2C3 global interrupt
    +        21
    +      
    +      
    +        
    +          CR
    +          CR
    +          power control register
    +          0x0
    +          0x20
    +          read-write
    +          0x00001000
    +          
    +            
    +              LPDS
    +              Low-power deep sleep
    +              0
    +              1
    +            
    +            
    +              PDDS
    +              Power down deepsleep
    +              1
    +              1
    +            
    +            
    +              CWUF
    +              Clear wakeup flag
    +              2
    +              1
    +            
    +            
    +              CSBF
    +              Clear standby flag
    +              3
    +              1
    +            
    +            
    +              PVDE
    +              Power voltage detector
    +              enable
    +              4
    +              1
    +            
    +            
    +              PLS
    +              PVD level selection
    +              5
    +              3
    +            
    +            
    +              DBP
    +              Disable backup domain write
    +              protection
    +              8
    +              1
    +            
    +            
    +              ULP
    +              Ultra-low-power mode
    +              9
    +              1
    +            
    +            
    +              FWU
    +              Fast wakeup
    +              10
    +              1
    +            
    +            
    +              VOS
    +              Voltage scaling range
    +              selection
    +              11
    +              2
    +            
    +            
    +              DS_EE_KOFF
    +              Deep sleep mode with Flash memory kept
    +              off
    +              13
    +              1
    +            
    +            
    +              LPRUN
    +              Low power run mode
    +              14
    +              1
    +            
    +          
    +        
    +        
    +          CSR
    +          CSR
    +          power control/status register
    +          0x4
    +          0x20
    +          0x00000000
    +          
    +            
    +              BRE
    +              Backup regulator enable
    +              9
    +              1
    +              read-write
    +            
    +            
    +              EWUP
    +              Enable WKUP pin
    +              8
    +              1
    +              read-write
    +            
    +            
    +              BRR
    +              Backup regulator ready
    +              3
    +              1
    +              read-only
    +            
    +            
    +              PVDO
    +              PVD output
    +              2
    +              1
    +              read-only
    +            
    +            
    +              SBF
    +              Standby flag
    +              1
    +              1
    +              read-only
    +            
    +            
    +              WUF
    +              Wakeup flag
    +              0
    +              1
    +              read-only
    +            
    +            
    +              VOSF
    +              Voltage Scaling select
    +              flag
    +              4
    +              1
    +              read-only
    +            
    +            
    +              REGLPF
    +              Regulator LP flag
    +              5
    +              1
    +              read-only
    +            
    +          
    +        
    +      
    +    
    +    
    +      Flash
    +      Flash
    +      Flash
    +      0x40022000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          ACR
    +          ACR
    +          Access control register
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              LATENCY
    +              Latency
    +              0
    +              1
    +            
    +            
    +              PRFTEN
    +              Prefetch enable
    +              1
    +              1
    +            
    +            
    +              SLEEP_PD
    +              Flash mode during Sleep
    +              3
    +              1
    +            
    +            
    +              RUN_PD
    +              Flash mode during Run
    +              4
    +              1
    +            
    +            
    +              DESAB_BUF
    +              Disable Buffer
    +              5
    +              1
    +            
    +            
    +              PRE_READ
    +              Pre-read data address
    +              6
    +              1
    +            
    +          
    +        
    +        
    +          PECR
    +          PECR
    +          Program/erase control register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000007
    +          
    +            
    +              PELOCK
    +              FLASH_PECR and data EEPROM
    +              lock
    +              0
    +              1
    +            
    +            
    +              PRGLOCK
    +              Program memory lock
    +              1
    +              1
    +            
    +            
    +              OPTLOCK
    +              Option bytes block lock
    +              2
    +              1
    +            
    +            
    +              PROG
    +              Program memory selection
    +              3
    +              1
    +            
    +            
    +              DATA
    +              Data EEPROM selection
    +              4
    +              1
    +            
    +            
    +              FTDW
    +              Fixed time data write for Byte, Half
    +              Word and Word programming
    +              8
    +              1
    +            
    +            
    +              ERASE
    +              Page or Double Word erase
    +              mode
    +              9
    +              1
    +            
    +            
    +              FPRG
    +              Half Page/Double Word programming
    +              mode
    +              10
    +              1
    +            
    +            
    +              PARALLELBANK
    +              Parallel bank mode
    +              15
    +              1
    +            
    +            
    +              EOPIE
    +              End of programming interrupt
    +              enable
    +              16
    +              1
    +            
    +            
    +              ERRIE
    +              Error interrupt enable
    +              17
    +              1
    +            
    +            
    +              OBL_LAUNCH
    +              Launch the option byte
    +              loading
    +              18
    +              1
    +            
    +          
    +        
    +        
    +          PDKEYR
    +          PDKEYR
    +          Power down key register
    +          0x8
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              PDKEYR
    +              RUN_PD in FLASH_ACR key
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          PEKEYR
    +          PEKEYR
    +          Program/erase key register
    +          0xC
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              PEKEYR
    +              FLASH_PEC and data EEPROM
    +              key
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          PRGKEYR
    +          PRGKEYR
    +          Program memory key register
    +          0x10
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              PRGKEYR
    +              Program memory key
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          OPTKEYR
    +          OPTKEYR
    +          Option byte key register
    +          0x14
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              OPTKEYR
    +              Option byte key
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          Status register
    +          0x18
    +          0x20
    +          0x00000004
    +          
    +            
    +              BSY
    +              Write/erase operations in
    +              progress
    +              0
    +              1
    +              read-only
    +            
    +            
    +              EOP
    +              End of operation
    +              1
    +              1
    +              read-only
    +            
    +            
    +              ENDHV
    +              End of high voltage
    +              2
    +              1
    +              read-only
    +            
    +            
    +              READY
    +              Flash memory module ready after low
    +              power mode
    +              3
    +              1
    +              read-only
    +            
    +            
    +              WRPERR
    +              Write protected error
    +              8
    +              1
    +              read-write
    +            
    +            
    +              PGAERR
    +              Programming alignment
    +              error
    +              9
    +              1
    +              read-write
    +            
    +            
    +              SIZERR
    +              Size error
    +              10
    +              1
    +              read-write
    +            
    +            
    +              OPTVERR
    +              Option validity error
    +              11
    +              1
    +              read-write
    +            
    +            
    +              RDERR
    +              RDERR
    +              14
    +              1
    +              read-write
    +            
    +            
    +              NOTZEROERR
    +              NOTZEROERR
    +              16
    +              1
    +              read-write
    +            
    +            
    +              FWWERR
    +              FWWERR
    +              17
    +              1
    +              read-write
    +            
    +          
    +        
    +        
    +          OBR
    +          OBR
    +          Option byte register
    +          0x1C
    +          0x20
    +          read-only
    +          0x00F80000
    +          
    +            
    +              RDPRT
    +              Read protection
    +              0
    +              8
    +            
    +            
    +              BOR_LEV
    +              BOR_LEV
    +              16
    +              4
    +            
    +            
    +              SPRMOD
    +              Selection of protection mode of WPR
    +              bits
    +              8
    +              1
    +            
    +          
    +        
    +        
    +          WRPR
    +          WRPR
    +          Write protection register
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              WRP
    +              Write protection
    +              0
    +              16
    +            
    +          
    +        
    +      
    +    
    +    
    +      EXTI
    +      External interrupt/event
    +      controller
    +      EXTI
    +      0x40010400
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        PVD
    +        PVD through EXTI line detection
    +        1
    +      
    +      
    +        EXTI0_1
    +        EXTI Line[1:0] interrupts
    +        5
    +      
    +      
    +        EXTI2_3
    +        EXTI Line[3:2] interrupts
    +        6
    +      
    +      
    +        EXTI4_15
    +        EXTI Line15 and EXTI4 interrupts
    +        7
    +      
    +      
    +        
    +          IMR
    +          IMR
    +          Interrupt mask register
    +          (EXTI_IMR)
    +          0x0
    +          0x20
    +          read-write
    +          0xFF840000
    +          
    +            
    +              IM0
    +              Interrupt Mask on line 0
    +              0
    +              1
    +            
    +            
    +              IM1
    +              Interrupt Mask on line 1
    +              1
    +              1
    +            
    +            
    +              IM2
    +              Interrupt Mask on line 2
    +              2
    +              1
    +            
    +            
    +              IM3
    +              Interrupt Mask on line 3
    +              3
    +              1
    +            
    +            
    +              IM4
    +              Interrupt Mask on line 4
    +              4
    +              1
    +            
    +            
    +              IM5
    +              Interrupt Mask on line 5
    +              5
    +              1
    +            
    +            
    +              IM6
    +              Interrupt Mask on line 6
    +              6
    +              1
    +            
    +            
    +              IM7
    +              Interrupt Mask on line 7
    +              7
    +              1
    +            
    +            
    +              IM8
    +              Interrupt Mask on line 8
    +              8
    +              1
    +            
    +            
    +              IM9
    +              Interrupt Mask on line 9
    +              9
    +              1
    +            
    +            
    +              IM10
    +              Interrupt Mask on line 10
    +              10
    +              1
    +            
    +            
    +              IM11
    +              Interrupt Mask on line 11
    +              11
    +              1
    +            
    +            
    +              IM12
    +              Interrupt Mask on line 12
    +              12
    +              1
    +            
    +            
    +              IM13
    +              Interrupt Mask on line 13
    +              13
    +              1
    +            
    +            
    +              IM14
    +              Interrupt Mask on line 14
    +              14
    +              1
    +            
    +            
    +              IM15
    +              Interrupt Mask on line 15
    +              15
    +              1
    +            
    +            
    +              IM16
    +              Interrupt Mask on line 16
    +              16
    +              1
    +            
    +            
    +              IM17
    +              Interrupt Mask on line 17
    +              17
    +              1
    +            
    +            
    +              IM18
    +              Interrupt Mask on line 18
    +              18
    +              1
    +            
    +            
    +              IM19
    +              Interrupt Mask on line 19
    +              19
    +              1
    +            
    +            
    +              IM20
    +              Interrupt Mask on line 20
    +              20
    +              1
    +            
    +            
    +              IM21
    +              Interrupt Mask on line 21
    +              21
    +              1
    +            
    +            
    +              IM22
    +              Interrupt Mask on line 22
    +              22
    +              1
    +            
    +            
    +              IM23
    +              Interrupt Mask on line 23
    +              23
    +              1
    +            
    +            
    +              IM24
    +              Interrupt Mask on line 24
    +              24
    +              1
    +            
    +            
    +              IM25
    +              Interrupt Mask on line 25
    +              25
    +              1
    +            
    +            
    +              IM26
    +              Interrupt Mask on line 27
    +              26
    +              1
    +            
    +            
    +              IM28
    +              Interrupt Mask on line 27
    +              28
    +              1
    +            
    +            
    +              IM29
    +              Interrupt Mask on line 27
    +              29
    +              1
    +            
    +          
    +        
    +        
    +          EMR
    +          EMR
    +          Event mask register (EXTI_EMR)
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              EM0
    +              Event Mask on line 0
    +              0
    +              1
    +            
    +            
    +              EM1
    +              Event Mask on line 1
    +              1
    +              1
    +            
    +            
    +              EM2
    +              Event Mask on line 2
    +              2
    +              1
    +            
    +            
    +              EM3
    +              Event Mask on line 3
    +              3
    +              1
    +            
    +            
    +              EM4
    +              Event Mask on line 4
    +              4
    +              1
    +            
    +            
    +              EM5
    +              Event Mask on line 5
    +              5
    +              1
    +            
    +            
    +              EM6
    +              Event Mask on line 6
    +              6
    +              1
    +            
    +            
    +              EM7
    +              Event Mask on line 7
    +              7
    +              1
    +            
    +            
    +              EM8
    +              Event Mask on line 8
    +              8
    +              1
    +            
    +            
    +              EM9
    +              Event Mask on line 9
    +              9
    +              1
    +            
    +            
    +              EM10
    +              Event Mask on line 10
    +              10
    +              1
    +            
    +            
    +              EM11
    +              Event Mask on line 11
    +              11
    +              1
    +            
    +            
    +              EM12
    +              Event Mask on line 12
    +              12
    +              1
    +            
    +            
    +              EM13
    +              Event Mask on line 13
    +              13
    +              1
    +            
    +            
    +              EM14
    +              Event Mask on line 14
    +              14
    +              1
    +            
    +            
    +              EM15
    +              Event Mask on line 15
    +              15
    +              1
    +            
    +            
    +              EM16
    +              Event Mask on line 16
    +              16
    +              1
    +            
    +            
    +              EM17
    +              Event Mask on line 17
    +              17
    +              1
    +            
    +            
    +              EM18
    +              Event Mask on line 18
    +              18
    +              1
    +            
    +            
    +              EM19
    +              Event Mask on line 19
    +              19
    +              1
    +            
    +            
    +              EM20
    +              Event Mask on line 20
    +              20
    +              1
    +            
    +            
    +              EM21
    +              Event Mask on line 21
    +              21
    +              1
    +            
    +            
    +              EM22
    +              Event Mask on line 22
    +              22
    +              1
    +            
    +            
    +              EM23
    +              Event Mask on line 23
    +              23
    +              1
    +            
    +            
    +              EM24
    +              Event Mask on line 24
    +              24
    +              1
    +            
    +            
    +              EM25
    +              Event Mask on line 25
    +              25
    +              1
    +            
    +            
    +              EM26
    +              Event Mask on line 26
    +              26
    +              1
    +            
    +            
    +              EM28
    +              Event Mask on line 28
    +              28
    +              1
    +            
    +            
    +              EM29
    +              Event Mask on line 29
    +              29
    +              1
    +            
    +          
    +        
    +        
    +          RTSR
    +          RTSR
    +          Rising Trigger selection register
    +          (EXTI_RTSR)
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              RT0
    +              Rising trigger event configuration of
    +              line 0
    +              0
    +              1
    +            
    +            
    +              RT1
    +              Rising trigger event configuration of
    +              line 1
    +              1
    +              1
    +            
    +            
    +              RT2
    +              Rising trigger event configuration of
    +              line 2
    +              2
    +              1
    +            
    +            
    +              RT3
    +              Rising trigger event configuration of
    +              line 3
    +              3
    +              1
    +            
    +            
    +              RT4
    +              Rising trigger event configuration of
    +              line 4
    +              4
    +              1
    +            
    +            
    +              RT5
    +              Rising trigger event configuration of
    +              line 5
    +              5
    +              1
    +            
    +            
    +              RT6
    +              Rising trigger event configuration of
    +              line 6
    +              6
    +              1
    +            
    +            
    +              RT7
    +              Rising trigger event configuration of
    +              line 7
    +              7
    +              1
    +            
    +            
    +              RT8
    +              Rising trigger event configuration of
    +              line 8
    +              8
    +              1
    +            
    +            
    +              RT9
    +              Rising trigger event configuration of
    +              line 9
    +              9
    +              1
    +            
    +            
    +              RT10
    +              Rising trigger event configuration of
    +              line 10
    +              10
    +              1
    +            
    +            
    +              RT11
    +              Rising trigger event configuration of
    +              line 11
    +              11
    +              1
    +            
    +            
    +              RT12
    +              Rising trigger event configuration of
    +              line 12
    +              12
    +              1
    +            
    +            
    +              RT13
    +              Rising trigger event configuration of
    +              line 13
    +              13
    +              1
    +            
    +            
    +              RT14
    +              Rising trigger event configuration of
    +              line 14
    +              14
    +              1
    +            
    +            
    +              RT15
    +              Rising trigger event configuration of
    +              line 15
    +              15
    +              1
    +            
    +            
    +              RT16
    +              Rising trigger event configuration of
    +              line 16
    +              16
    +              1
    +            
    +            
    +              RT17
    +              Rising trigger event configuration of
    +              line 17
    +              17
    +              1
    +            
    +            
    +              RT19
    +              Rising trigger event configuration of
    +              line 19
    +              19
    +              1
    +            
    +            
    +              RT20
    +              Rising trigger event configuration of
    +              line 20
    +              20
    +              1
    +            
    +            
    +              RT21
    +              Rising trigger event configuration of
    +              line 21
    +              21
    +              1
    +            
    +            
    +              RT22
    +              Rising trigger event configuration of
    +              line 22
    +              22
    +              1
    +            
    +          
    +        
    +        
    +          FTSR
    +          FTSR
    +          Falling Trigger selection register
    +          (EXTI_FTSR)
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              FT0
    +              Falling trigger event configuration of
    +              line 0
    +              0
    +              1
    +            
    +            
    +              FT1
    +              Falling trigger event configuration of
    +              line 1
    +              1
    +              1
    +            
    +            
    +              FT2
    +              Falling trigger event configuration of
    +              line 2
    +              2
    +              1
    +            
    +            
    +              FT3
    +              Falling trigger event configuration of
    +              line 3
    +              3
    +              1
    +            
    +            
    +              FT4
    +              Falling trigger event configuration of
    +              line 4
    +              4
    +              1
    +            
    +            
    +              FT5
    +              Falling trigger event configuration of
    +              line 5
    +              5
    +              1
    +            
    +            
    +              FT6
    +              Falling trigger event configuration of
    +              line 6
    +              6
    +              1
    +            
    +            
    +              FT7
    +              Falling trigger event configuration of
    +              line 7
    +              7
    +              1
    +            
    +            
    +              FT8
    +              Falling trigger event configuration of
    +              line 8
    +              8
    +              1
    +            
    +            
    +              FT9
    +              Falling trigger event configuration of
    +              line 9
    +              9
    +              1
    +            
    +            
    +              FT10
    +              Falling trigger event configuration of
    +              line 10
    +              10
    +              1
    +            
    +            
    +              FT11
    +              Falling trigger event configuration of
    +              line 11
    +              11
    +              1
    +            
    +            
    +              FT12
    +              Falling trigger event configuration of
    +              line 12
    +              12
    +              1
    +            
    +            
    +              FT13
    +              Falling trigger event configuration of
    +              line 13
    +              13
    +              1
    +            
    +            
    +              FT14
    +              Falling trigger event configuration of
    +              line 14
    +              14
    +              1
    +            
    +            
    +              FT15
    +              Falling trigger event configuration of
    +              line 15
    +              15
    +              1
    +            
    +            
    +              FT16
    +              Falling trigger event configuration of
    +              line 16
    +              16
    +              1
    +            
    +            
    +              FT17
    +              Falling trigger event configuration of
    +              line 17
    +              17
    +              1
    +            
    +            
    +              FT19
    +              Falling trigger event configuration of
    +              line 19
    +              19
    +              1
    +            
    +            
    +              FT20
    +              Falling trigger event configuration of
    +              line 20
    +              20
    +              1
    +            
    +            
    +              FT21
    +              Falling trigger event configuration of
    +              line 21
    +              21
    +              1
    +            
    +            
    +              FT22
    +              Falling trigger event configuration of
    +              line 22
    +              22
    +              1
    +            
    +          
    +        
    +        
    +          SWIER
    +          SWIER
    +          Software interrupt event register
    +          (EXTI_SWIER)
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              SWI0
    +              Software Interrupt on line
    +              0
    +              0
    +              1
    +            
    +            
    +              SWI1
    +              Software Interrupt on line
    +              1
    +              1
    +              1
    +            
    +            
    +              SWI2
    +              Software Interrupt on line
    +              2
    +              2
    +              1
    +            
    +            
    +              SWI3
    +              Software Interrupt on line
    +              3
    +              3
    +              1
    +            
    +            
    +              SWI4
    +              Software Interrupt on line
    +              4
    +              4
    +              1
    +            
    +            
    +              SWI5
    +              Software Interrupt on line
    +              5
    +              5
    +              1
    +            
    +            
    +              SWI6
    +              Software Interrupt on line
    +              6
    +              6
    +              1
    +            
    +            
    +              SWI7
    +              Software Interrupt on line
    +              7
    +              7
    +              1
    +            
    +            
    +              SWI8
    +              Software Interrupt on line
    +              8
    +              8
    +              1
    +            
    +            
    +              SWI9
    +              Software Interrupt on line
    +              9
    +              9
    +              1
    +            
    +            
    +              SWI10
    +              Software Interrupt on line
    +              10
    +              10
    +              1
    +            
    +            
    +              SWI11
    +              Software Interrupt on line
    +              11
    +              11
    +              1
    +            
    +            
    +              SWI12
    +              Software Interrupt on line
    +              12
    +              12
    +              1
    +            
    +            
    +              SWI13
    +              Software Interrupt on line
    +              13
    +              13
    +              1
    +            
    +            
    +              SWI14
    +              Software Interrupt on line
    +              14
    +              14
    +              1
    +            
    +            
    +              SWI15
    +              Software Interrupt on line
    +              15
    +              15
    +              1
    +            
    +            
    +              SWI16
    +              Software Interrupt on line
    +              16
    +              16
    +              1
    +            
    +            
    +              SWI17
    +              Software Interrupt on line
    +              17
    +              17
    +              1
    +            
    +            
    +              SWI19
    +              Software Interrupt on line
    +              19
    +              19
    +              1
    +            
    +            
    +              SWI20
    +              Software Interrupt on line
    +              20
    +              20
    +              1
    +            
    +            
    +              SWI21
    +              Software Interrupt on line
    +              21
    +              21
    +              1
    +            
    +            
    +              SWI22
    +              Software Interrupt on line
    +              22
    +              22
    +              1
    +            
    +          
    +        
    +        
    +          PR
    +          PR
    +          Pending register (EXTI_PR)
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PIF0
    +              Pending bit 0
    +              0
    +              1
    +            
    +            
    +              PIF1
    +              Pending bit 1
    +              1
    +              1
    +            
    +            
    +              PIF2
    +              Pending bit 2
    +              2
    +              1
    +            
    +            
    +              PIF3
    +              Pending bit 3
    +              3
    +              1
    +            
    +            
    +              PIF4
    +              Pending bit 4
    +              4
    +              1
    +            
    +            
    +              PIF5
    +              Pending bit 5
    +              5
    +              1
    +            
    +            
    +              PIF6
    +              Pending bit 6
    +              6
    +              1
    +            
    +            
    +              PIF7
    +              Pending bit 7
    +              7
    +              1
    +            
    +            
    +              PIF8
    +              Pending bit 8
    +              8
    +              1
    +            
    +            
    +              PIF9
    +              Pending bit 9
    +              9
    +              1
    +            
    +            
    +              PIF10
    +              Pending bit 10
    +              10
    +              1
    +            
    +            
    +              PIF11
    +              Pending bit 11
    +              11
    +              1
    +            
    +            
    +              PIF12
    +              Pending bit 12
    +              12
    +              1
    +            
    +            
    +              PIF13
    +              Pending bit 13
    +              13
    +              1
    +            
    +            
    +              PIF14
    +              Pending bit 14
    +              14
    +              1
    +            
    +            
    +              PIF15
    +              Pending bit 15
    +              15
    +              1
    +            
    +            
    +              PIF16
    +              Pending bit 16
    +              16
    +              1
    +            
    +            
    +              PIF17
    +              Pending bit 17
    +              17
    +              1
    +            
    +            
    +              PIF19
    +              Pending bit 19
    +              19
    +              1
    +            
    +            
    +              PIF20
    +              Pending bit 20
    +              20
    +              1
    +            
    +            
    +              PIF21
    +              Pending bit 21
    +              21
    +              1
    +            
    +            
    +              PIF22
    +              Pending bit 22
    +              22
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      ADC
    +      Analog-to-digital converter
    +      ADC
    +      0x40012400
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        EXTI2_3
    +        EXTI Line[3:2] interrupts
    +        6
    +      
    +      
    +        
    +          ISR
    +          ISR
    +          interrupt and status register
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ADRDY
    +              ADC ready
    +              0
    +              1
    +            
    +            
    +              EOSMP
    +              End of sampling flag
    +              1
    +              1
    +            
    +            
    +              EOC
    +              End of conversion flag
    +              2
    +              1
    +            
    +            
    +              EOS
    +              End of sequence flag
    +              3
    +              1
    +            
    +            
    +              OVR
    +              ADC overrun
    +              4
    +              1
    +            
    +            
    +              AWD
    +              Analog watchdog flag
    +              7
    +              1
    +            
    +            
    +              EOCAL
    +              End Of Calibration flag
    +              11
    +              1
    +            
    +          
    +        
    +        
    +          IER
    +          IER
    +          interrupt enable register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ADRDYIE
    +              ADC ready interrupt enable
    +              0
    +              1
    +            
    +            
    +              EOSMPIE
    +              End of sampling flag interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              EOCIE
    +              End of conversion interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              EOSIE
    +              End of conversion sequence interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              OVRIE
    +              Overrun interrupt enable
    +              4
    +              1
    +            
    +            
    +              AWDIE
    +              Analog watchdog interrupt
    +              enable
    +              7
    +              1
    +            
    +            
    +              EOCALIE
    +              End of calibration interrupt
    +              enable
    +              11
    +              1
    +            
    +          
    +        
    +        
    +          CR
    +          CR
    +          control register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ADEN
    +              ADC enable command
    +              0
    +              1
    +            
    +            
    +              ADDIS
    +              ADC disable command
    +              1
    +              1
    +            
    +            
    +              ADSTART
    +              ADC start conversion
    +              command
    +              2
    +              1
    +            
    +            
    +              ADSTP
    +              ADC stop conversion
    +              command
    +              4
    +              1
    +            
    +            
    +              ADVREGEN
    +              ADC Voltage Regulator
    +              Enable
    +              28
    +              1
    +            
    +            
    +              ADCAL
    +              ADC calibration
    +              31
    +              1
    +            
    +          
    +        
    +        
    +          CFGR1
    +          CFGR1
    +          configuration register 1
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              AWDCH
    +              Analog watchdog channel
    +              selection
    +              26
    +              5
    +            
    +            
    +              AWDEN
    +              Analog watchdog enable
    +              23
    +              1
    +            
    +            
    +              AWDSGL
    +              Enable the watchdog on a single channel
    +              or on all channels
    +              22
    +              1
    +            
    +            
    +              DISCEN
    +              Discontinuous mode
    +              16
    +              1
    +            
    +            
    +              AUTOFF
    +              Auto-off mode
    +              15
    +              1
    +            
    +            
    +              AUTDLY
    +              Auto-delayed conversion
    +              mode
    +              14
    +              1
    +            
    +            
    +              CONT
    +              Single / continuous conversion
    +              mode
    +              13
    +              1
    +            
    +            
    +              OVRMOD
    +              Overrun management mode
    +              12
    +              1
    +            
    +            
    +              EXTEN
    +              External trigger enable and polarity
    +              selection
    +              10
    +              2
    +            
    +            
    +              EXTSEL
    +              External trigger selection
    +              6
    +              3
    +            
    +            
    +              ALIGN
    +              Data alignment
    +              5
    +              1
    +            
    +            
    +              RES
    +              Data resolution
    +              3
    +              2
    +            
    +            
    +              SCANDIR
    +              Scan sequence direction
    +              2
    +              1
    +            
    +            
    +              DMACFG
    +              Direct memery access
    +              configuration
    +              1
    +              1
    +            
    +            
    +              DMAEN
    +              Direct memory access
    +              enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CFGR2
    +          CFGR2
    +          configuration register 2
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OVSE
    +              Oversampler Enable
    +              0
    +              1
    +            
    +            
    +              OVSR
    +              Oversampling ratio
    +              2
    +              3
    +            
    +            
    +              OVSS
    +              Oversampling shift
    +              5
    +              4
    +            
    +            
    +              TOVS
    +              Triggered Oversampling
    +              9
    +              1
    +            
    +            
    +              CKMODE
    +              ADC clock mode
    +              30
    +              2
    +            
    +          
    +        
    +        
    +          SMPR
    +          SMPR
    +          sampling time register
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              SMPR
    +              Sampling time selection
    +              0
    +              3
    +            
    +          
    +        
    +        
    +          TR
    +          TR
    +          watchdog threshold register
    +          0x20
    +          0x20
    +          read-write
    +          0x0FFF0000
    +          
    +            
    +              HT
    +              Analog watchdog higher
    +              threshold
    +              16
    +              12
    +            
    +            
    +              LT
    +              Analog watchdog lower
    +              threshold
    +              0
    +              12
    +            
    +          
    +        
    +        
    +          CHSELR
    +          CHSELR
    +          channel selection register
    +          0x28
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CHSEL18
    +              Channel-x selection
    +              18
    +              1
    +            
    +            
    +              CHSEL17
    +              Channel-x selection
    +              17
    +              1
    +            
    +            
    +              CHSEL16
    +              Channel-x selection
    +              16
    +              1
    +            
    +            
    +              CHSEL15
    +              Channel-x selection
    +              15
    +              1
    +            
    +            
    +              CHSEL14
    +              Channel-x selection
    +              14
    +              1
    +            
    +            
    +              CHSEL13
    +              Channel-x selection
    +              13
    +              1
    +            
    +            
    +              CHSEL12
    +              Channel-x selection
    +              12
    +              1
    +            
    +            
    +              CHSEL11
    +              Channel-x selection
    +              11
    +              1
    +            
    +            
    +              CHSEL10
    +              Channel-x selection
    +              10
    +              1
    +            
    +            
    +              CHSEL9
    +              Channel-x selection
    +              9
    +              1
    +            
    +            
    +              CHSEL8
    +              Channel-x selection
    +              8
    +              1
    +            
    +            
    +              CHSEL7
    +              Channel-x selection
    +              7
    +              1
    +            
    +            
    +              CHSEL6
    +              Channel-x selection
    +              6
    +              1
    +            
    +            
    +              CHSEL5
    +              Channel-x selection
    +              5
    +              1
    +            
    +            
    +              CHSEL4
    +              Channel-x selection
    +              4
    +              1
    +            
    +            
    +              CHSEL3
    +              Channel-x selection
    +              3
    +              1
    +            
    +            
    +              CHSEL2
    +              Channel-x selection
    +              2
    +              1
    +            
    +            
    +              CHSEL1
    +              Channel-x selection
    +              1
    +              1
    +            
    +            
    +              CHSEL0
    +              Channel-x selection
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          DR
    +          DR
    +          data register
    +          0x40
    +          0x20
    +          read-only
    +          0x00000000
    +          
    +            
    +              DATA
    +              Converted data
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CALFACT
    +          CALFACT
    +          ADC Calibration factor
    +          0xB4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CALFACT
    +              Calibration factor
    +              0
    +              7
    +            
    +          
    +        
    +        
    +          CCR
    +          CCR
    +          ADC common configuration
    +          register
    +          0x308
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRESC
    +              ADC prescaler
    +              18
    +              4
    +            
    +            
    +              VREFEN
    +              VREFINT enable
    +              22
    +              1
    +            
    +            
    +              TSEN
    +              Temperature sensor enable
    +              23
    +              1
    +            
    +            
    +              LFMEN
    +              Low Frequency Mode enable
    +              25
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      DBGMCU
    +      Debug support
    +      DBGMCU
    +      0x40015800
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        ADC_COMP
    +        ADC and comparator 1 and 2
    +        12
    +      
    +      
    +        
    +          IDCODE
    +          IDCODE
    +          MCU Device ID Code Register
    +          0x0
    +          0x20
    +          read-only
    +          0x0
    +          
    +            
    +              DEV_ID
    +              Device Identifier
    +              0
    +              12
    +            
    +            
    +              REV_ID
    +              Revision Identifier
    +              16
    +              16
    +            
    +          
    +        
    +        
    +          CR
    +          CR
    +          Debug MCU Configuration
    +          Register
    +          0x4
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              DBG_STOP
    +              Debug Stop Mode
    +              1
    +              1
    +            
    +            
    +              DBG_STANDBY
    +              Debug Standby Mode
    +              2
    +              1
    +            
    +            
    +              DBG_SLEEP
    +              Debug Sleep Mode
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          APB1_FZ
    +          APB1_FZ
    +          APB Low Freeze Register
    +          0x8
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              DBG_TIMER2_STOP
    +              Debug Timer 2 stopped when Core is
    +              halted
    +              0
    +              1
    +            
    +            
    +              DBG_TIMER6_STOP
    +              Debug Timer 6 stopped when Core is
    +              halted
    +              4
    +              1
    +            
    +            
    +              DBG_RTC_STOP
    +              Debug RTC stopped when Core is
    +              halted
    +              10
    +              1
    +            
    +            
    +              DBG_WWDG_STOP
    +              Debug Window Wachdog stopped when Core
    +              is halted
    +              11
    +              1
    +            
    +            
    +              DBG_IWDG_STOP
    +              Debug Independent Wachdog stopped when
    +              Core is halted
    +              12
    +              1
    +            
    +            
    +              DBG_I2C1_STOP
    +              I2C1 SMBUS timeout mode stopped when
    +              core is halted
    +              21
    +              1
    +            
    +            
    +              DBG_I2C2_STOP
    +              I2C2 SMBUS timeout mode stopped when
    +              core is halted
    +              22
    +              1
    +            
    +            
    +              DBG_LPTIMER_STOP
    +              LPTIM1 counter stopped when core is
    +              halted
    +              31
    +              1
    +            
    +          
    +        
    +        
    +          APB2_FZ
    +          APB2_FZ
    +          APB High Freeze Register
    +          0xC
    +          0x20
    +          read-write
    +          0x0
    +          
    +            
    +              DBG_TIMER21_STOP
    +              Debug Timer 21 stopped when Core is
    +              halted
    +              2
    +              1
    +            
    +            
    +              DBG_TIMER22_STO
    +              Debug Timer 22 stopped when Core is
    +              halted
    +              6
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      TIM2
    +      General-purpose-timers
    +      TIM
    +      0x40000000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        
    +          CR1
    +          CR1
    +          control register 1
    +          0x0
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              CKD
    +              Clock division
    +              8
    +              2
    +            
    +            
    +              ARPE
    +              Auto-reload preload enable
    +              7
    +              1
    +            
    +            
    +              CMS
    +              Center-aligned mode
    +              selection
    +              5
    +              2
    +            
    +            
    +              DIR
    +              Direction
    +              4
    +              1
    +            
    +            
    +              OPM
    +              One-pulse mode
    +              3
    +              1
    +            
    +            
    +              URS
    +              Update request source
    +              2
    +              1
    +            
    +            
    +              UDIS
    +              Update disable
    +              1
    +              1
    +            
    +            
    +              CEN
    +              Counter enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CR2
    +          CR2
    +          control register 2
    +          0x4
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              TI1S
    +              TI1 selection
    +              7
    +              1
    +            
    +            
    +              MMS
    +              Master mode selection
    +              4
    +              3
    +            
    +            
    +              CCDS
    +              Capture/compare DMA
    +              selection
    +              3
    +              1
    +            
    +          
    +        
    +        
    +          SMCR
    +          SMCR
    +          slave mode control register
    +          0x8
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              ETP
    +              External trigger polarity
    +              15
    +              1
    +            
    +            
    +              ECE
    +              External clock enable
    +              14
    +              1
    +            
    +            
    +              ETPS
    +              External trigger prescaler
    +              12
    +              2
    +            
    +            
    +              ETF
    +              External trigger filter
    +              8
    +              4
    +            
    +            
    +              MSM
    +              Master/Slave mode
    +              7
    +              1
    +            
    +            
    +              TS
    +              Trigger selection
    +              4
    +              3
    +            
    +            
    +              SMS
    +              Slave mode selection
    +              0
    +              3
    +            
    +          
    +        
    +        
    +          DIER
    +          DIER
    +          DMA/Interrupt enable register
    +          0xC
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              TDE
    +              Trigger DMA request enable
    +              14
    +              1
    +            
    +            
    +              CC4DE
    +              Capture/Compare 4 DMA request
    +              enable
    +              12
    +              1
    +            
    +            
    +              CC3DE
    +              Capture/Compare 3 DMA request
    +              enable
    +              11
    +              1
    +            
    +            
    +              CC2DE
    +              Capture/Compare 2 DMA request
    +              enable
    +              10
    +              1
    +            
    +            
    +              CC1DE
    +              Capture/Compare 1 DMA request
    +              enable
    +              9
    +              1
    +            
    +            
    +              UDE
    +              Update DMA request enable
    +              8
    +              1
    +            
    +            
    +              TIE
    +              Trigger interrupt enable
    +              6
    +              1
    +            
    +            
    +              CC4IE
    +              Capture/Compare 4 interrupt
    +              enable
    +              4
    +              1
    +            
    +            
    +              CC3IE
    +              Capture/Compare 3 interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              CC2IE
    +              Capture/Compare 2 interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              CC1IE
    +              Capture/Compare 1 interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              UIE
    +              Update interrupt enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          status register
    +          0x10
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              CC4OF
    +              Capture/Compare 4 overcapture
    +              flag
    +              12
    +              1
    +            
    +            
    +              CC3OF
    +              Capture/Compare 3 overcapture
    +              flag
    +              11
    +              1
    +            
    +            
    +              CC2OF
    +              Capture/compare 2 overcapture
    +              flag
    +              10
    +              1
    +            
    +            
    +              CC1OF
    +              Capture/Compare 1 overcapture
    +              flag
    +              9
    +              1
    +            
    +            
    +              TIF
    +              Trigger interrupt flag
    +              6
    +              1
    +            
    +            
    +              CC4IF
    +              Capture/Compare 4 interrupt
    +              flag
    +              4
    +              1
    +            
    +            
    +              CC3IF
    +              Capture/Compare 3 interrupt
    +              flag
    +              3
    +              1
    +            
    +            
    +              CC2IF
    +              Capture/Compare 2 interrupt
    +              flag
    +              2
    +              1
    +            
    +            
    +              CC1IF
    +              Capture/compare 1 interrupt
    +              flag
    +              1
    +              1
    +            
    +            
    +              UIF
    +              Update interrupt flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          EGR
    +          EGR
    +          event generation register
    +          0x14
    +          0x20
    +          write-only
    +          0x0000
    +          
    +            
    +              TG
    +              Trigger generation
    +              6
    +              1
    +            
    +            
    +              CC4G
    +              Capture/compare 4
    +              generation
    +              4
    +              1
    +            
    +            
    +              CC3G
    +              Capture/compare 3
    +              generation
    +              3
    +              1
    +            
    +            
    +              CC2G
    +              Capture/compare 2
    +              generation
    +              2
    +              1
    +            
    +            
    +              CC1G
    +              Capture/compare 1
    +              generation
    +              1
    +              1
    +            
    +            
    +              UG
    +              Update generation
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CCMR1_Output
    +          CCMR1_Output
    +          capture/compare mode register 1 (output
    +          mode)
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OC2CE
    +              Output compare 2 clear
    +              enable
    +              15
    +              1
    +            
    +            
    +              OC2M
    +              Output compare 2 mode
    +              12
    +              3
    +            
    +            
    +              OC2PE
    +              Output compare 2 preload
    +              enable
    +              11
    +              1
    +            
    +            
    +              OC2FE
    +              Output compare 2 fast
    +              enable
    +              10
    +              1
    +            
    +            
    +              CC2S
    +              Capture/Compare 2
    +              selection
    +              8
    +              2
    +            
    +            
    +              OC1CE
    +              Output compare 1 clear
    +              enable
    +              7
    +              1
    +            
    +            
    +              OC1M
    +              Output compare 1 mode
    +              4
    +              3
    +            
    +            
    +              OC1PE
    +              Output compare 1 preload
    +              enable
    +              3
    +              1
    +            
    +            
    +              OC1FE
    +              Output compare 1 fast
    +              enable
    +              2
    +              1
    +            
    +            
    +              CC1S
    +              Capture/Compare 1
    +              selection
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          CCMR1_Input
    +          CCMR1_Input
    +          capture/compare mode register 1 (input
    +          mode)
    +          CCMR1_Output
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              IC2F
    +              Input capture 2 filter
    +              12
    +              4
    +            
    +            
    +              IC2PSC
    +              Input capture 2 prescaler
    +              10
    +              2
    +            
    +            
    +              CC2S
    +              Capture/compare 2
    +              selection
    +              8
    +              2
    +            
    +            
    +              IC1F
    +              Input capture 1 filter
    +              4
    +              4
    +            
    +            
    +              IC1PSC
    +              Input capture 1 prescaler
    +              2
    +              2
    +            
    +            
    +              CC1S
    +              Capture/Compare 1
    +              selection
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          CCMR2_Output
    +          CCMR2_Output
    +          capture/compare mode register 2 (output
    +          mode)
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OC4CE
    +              Output compare 4 clear
    +              enable
    +              15
    +              1
    +            
    +            
    +              OC4M
    +              Output compare 4 mode
    +              12
    +              3
    +            
    +            
    +              OC4PE
    +              Output compare 4 preload
    +              enable
    +              11
    +              1
    +            
    +            
    +              OC4FE
    +              Output compare 4 fast
    +              enable
    +              10
    +              1
    +            
    +            
    +              CC4S
    +              Capture/Compare 4
    +              selection
    +              8
    +              2
    +            
    +            
    +              OC3CE
    +              Output compare 3 clear
    +              enable
    +              7
    +              1
    +            
    +            
    +              OC3M
    +              Output compare 3 mode
    +              4
    +              3
    +            
    +            
    +              OC3PE
    +              Output compare 3 preload
    +              enable
    +              3
    +              1
    +            
    +            
    +              OC3FE
    +              Output compare 3 fast
    +              enable
    +              2
    +              1
    +            
    +            
    +              CC3S
    +              Capture/Compare 3
    +              selection
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          CCMR2_Input
    +          CCMR2_Input
    +          capture/compare mode register 2 (input
    +          mode)
    +          CCMR2_Output
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              IC4F
    +              Input capture 4 filter
    +              12
    +              4
    +            
    +            
    +              IC4PSC
    +              Input capture 4 prescaler
    +              10
    +              2
    +            
    +            
    +              CC4S
    +              Capture/Compare 4
    +              selection
    +              8
    +              2
    +            
    +            
    +              IC3F
    +              Input capture 3 filter
    +              4
    +              4
    +            
    +            
    +              IC3PSC
    +              Input capture 3 prescaler
    +              2
    +              2
    +            
    +            
    +              CC3S
    +              Capture/Compare 3
    +              selection
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          CCER
    +          CCER
    +          capture/compare enable
    +          register
    +          0x20
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              CC4NP
    +              Capture/Compare 4 output
    +              Polarity
    +              15
    +              1
    +            
    +            
    +              CC4P
    +              Capture/Compare 3 output
    +              Polarity
    +              13
    +              1
    +            
    +            
    +              CC4E
    +              Capture/Compare 4 output
    +              enable
    +              12
    +              1
    +            
    +            
    +              CC3NP
    +              Capture/Compare 3 output
    +              Polarity
    +              11
    +              1
    +            
    +            
    +              CC3P
    +              Capture/Compare 3 output
    +              Polarity
    +              9
    +              1
    +            
    +            
    +              CC3E
    +              Capture/Compare 3 output
    +              enable
    +              8
    +              1
    +            
    +            
    +              CC2NP
    +              Capture/Compare 2 output
    +              Polarity
    +              7
    +              1
    +            
    +            
    +              CC2P
    +              Capture/Compare 2 output
    +              Polarity
    +              5
    +              1
    +            
    +            
    +              CC2E
    +              Capture/Compare 2 output
    +              enable
    +              4
    +              1
    +            
    +            
    +              CC1NP
    +              Capture/Compare 1 output
    +              Polarity
    +              3
    +              1
    +            
    +            
    +              CC1P
    +              Capture/Compare 1 output
    +              Polarity
    +              1
    +              1
    +            
    +            
    +              CC1E
    +              Capture/Compare 1 output
    +              enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNT
    +          CNT
    +          counter
    +          0x24
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CNT_H
    +              High counter value (TIM2
    +              only)
    +              16
    +              16
    +            
    +            
    +              CNT_L
    +              Low counter value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          PSC
    +          PSC
    +          prescaler
    +          0x28
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              PSC
    +              Prescaler value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          ARR
    +          ARR
    +          auto-reload register
    +          0x2C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ARR_H
    +              High Auto-reload value (TIM2
    +              only)
    +              16
    +              16
    +            
    +            
    +              ARR_L
    +              Low Auto-reload value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CCR1
    +          CCR1
    +          capture/compare register 1
    +          0x34
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CCR1_H
    +              High Capture/Compare 1 value (TIM2
    +              only)
    +              16
    +              16
    +            
    +            
    +              CCR1_L
    +              Low Capture/Compare 1
    +              value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CCR2
    +          CCR2
    +          capture/compare register 2
    +          0x38
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CCR2_H
    +              High Capture/Compare 2 value (TIM2
    +              only)
    +              16
    +              16
    +            
    +            
    +              CCR2_L
    +              Low Capture/Compare 2
    +              value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CCR3
    +          CCR3
    +          capture/compare register 3
    +          0x3C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CCR3_H
    +              High Capture/Compare value (TIM2
    +              only)
    +              16
    +              16
    +            
    +            
    +              CCR3_L
    +              Low Capture/Compare value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CCR4
    +          CCR4
    +          capture/compare register 4
    +          0x40
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CCR4_H
    +              High Capture/Compare value (TIM2
    +              only)
    +              16
    +              16
    +            
    +            
    +              CCR4_L
    +              Low Capture/Compare value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          DCR
    +          DCR
    +          DMA control register
    +          0x48
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              DBL
    +              DMA burst length
    +              8
    +              5
    +            
    +            
    +              DBA
    +              DMA base address
    +              0
    +              5
    +            
    +          
    +        
    +        
    +          DMAR
    +          DMAR
    +          DMA address for full transfer
    +          0x4C
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              DMAB
    +              DMA register for burst
    +              accesses
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          OR
    +          OR
    +          TIM2 option register
    +          0x50
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              ETR_RMP
    +              Timer2 ETR remap
    +              0
    +              3
    +            
    +            
    +              TI4_RMP
    +              Internal trigger
    +              3
    +              2
    +            
    +          
    +        
    +      
    +    
    +    
    +      TIM3
    +      0x40000400
    +      
    +        TIM2
    +        TIM2 global interrupt
    +        15
    +      
    +    
    +    
    +      TIM6
    +      Basic-timers
    +      TIM
    +      0x40001000
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        TIM3
    +        TIM3 global interrupt
    +        16
    +      
    +      
    +        
    +          CR1
    +          CR1
    +          control register 1
    +          0x0
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              ARPE
    +              Auto-reload preload enable
    +              7
    +              1
    +            
    +            
    +              OPM
    +              One-pulse mode
    +              3
    +              1
    +            
    +            
    +              URS
    +              Update request source
    +              2
    +              1
    +            
    +            
    +              UDIS
    +              Update disable
    +              1
    +              1
    +            
    +            
    +              CEN
    +              Counter enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CR2
    +          CR2
    +          control register 2
    +          0x4
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              MMS
    +              Master mode selection
    +              4
    +              3
    +            
    +          
    +        
    +        
    +          DIER
    +          DIER
    +          DMA/Interrupt enable register
    +          0xC
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              UDE
    +              Update DMA request enable
    +              8
    +              1
    +            
    +            
    +              UIE
    +              Update interrupt enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          status register
    +          0x10
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              UIF
    +              Update interrupt flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          EGR
    +          EGR
    +          event generation register
    +          0x14
    +          0x20
    +          write-only
    +          0x0000
    +          
    +            
    +              UG
    +              Update generation
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNT
    +          CNT
    +          counter
    +          0x24
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CNT
    +              Low counter value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          PSC
    +          PSC
    +          prescaler
    +          0x28
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              PSC
    +              Prescaler value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          ARR
    +          ARR
    +          auto-reload register
    +          0x2C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ARR
    +              Low Auto-reload value
    +              0
    +              16
    +            
    +          
    +        
    +      
    +    
    +    
    +      TIM7
    +      0x40001400
    +      
    +        TIM6_DAC
    +        TIM6 global interrupt and DAC
    +        17
    +      
    +    
    +    
    +      TIM21
    +      General-purpose-timers
    +      TIM
    +      0x40010800
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        TIM7
    +        TIM7 global interrupt and DAC
    +        18
    +      
    +      
    +        
    +          CR1
    +          CR1
    +          control register 1
    +          0x0
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              CEN
    +              Counter enable
    +              0
    +              1
    +            
    +            
    +              UDIS
    +              Update disable
    +              1
    +              1
    +            
    +            
    +              URS
    +              Update request source
    +              2
    +              1
    +            
    +            
    +              OPM
    +              One-pulse mode
    +              3
    +              1
    +            
    +            
    +              DIR
    +              Direction
    +              4
    +              1
    +            
    +            
    +              CMS
    +              Center-aligned mode
    +              selection
    +              5
    +              2
    +            
    +            
    +              ARPE
    +              Auto-reload preload enable
    +              7
    +              1
    +            
    +            
    +              CKD
    +              Clock division
    +              8
    +              2
    +            
    +          
    +        
    +        
    +          CR2
    +          CR2
    +          control register 2
    +          0x4
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              MMS
    +              Master mode selection
    +              4
    +              3
    +            
    +          
    +        
    +        
    +          SMCR
    +          SMCR
    +          slave mode control register
    +          0x8
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              SMS
    +              Slave mode selection
    +              0
    +              3
    +            
    +            
    +              TS
    +              Trigger selection
    +              4
    +              3
    +            
    +            
    +              MSM
    +              Master/Slave mode
    +              7
    +              1
    +            
    +            
    +              ETF
    +              External trigger filter
    +              8
    +              4
    +            
    +            
    +              ETPS
    +              External trigger prescaler
    +              12
    +              2
    +            
    +            
    +              ECE
    +              External clock enable
    +              14
    +              1
    +            
    +            
    +              ETP
    +              External trigger polarity
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          DIER
    +          DIER
    +          DMA/Interrupt enable register
    +          0xC
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              TIE
    +              Trigger interrupt enable
    +              6
    +              1
    +            
    +            
    +              CC2IE
    +              Capture/Compare 2 interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              CC1IE
    +              Capture/Compare 1 interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              UIE
    +              Update interrupt enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          status register
    +          0x10
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              CC2OF
    +              Capture/compare 2 overcapture
    +              flag
    +              10
    +              1
    +            
    +            
    +              CC1OF
    +              Capture/Compare 1 overcapture
    +              flag
    +              9
    +              1
    +            
    +            
    +              TIF
    +              Trigger interrupt flag
    +              6
    +              1
    +            
    +            
    +              CC2IF
    +              Capture/Compare 2 interrupt
    +              flag
    +              2
    +              1
    +            
    +            
    +              CC1IF
    +              Capture/compare 1 interrupt
    +              flag
    +              1
    +              1
    +            
    +            
    +              UIF
    +              Update interrupt flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          EGR
    +          EGR
    +          event generation register
    +          0x14
    +          0x20
    +          write-only
    +          0x0000
    +          
    +            
    +              TG
    +              Trigger generation
    +              6
    +              1
    +            
    +            
    +              CC2G
    +              Capture/compare 2
    +              generation
    +              2
    +              1
    +            
    +            
    +              CC1G
    +              Capture/compare 1
    +              generation
    +              1
    +              1
    +            
    +            
    +              UG
    +              Update generation
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CCMR1_Output
    +          CCMR1_Output
    +          capture/compare mode register (output
    +          mode)
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OC2M
    +              Output Compare 2 mode
    +              12
    +              3
    +            
    +            
    +              OC2PE
    +              Output Compare 2 preload
    +              enable
    +              11
    +              1
    +            
    +            
    +              OC2FE
    +              Output Compare 2 fast
    +              enable
    +              10
    +              1
    +            
    +            
    +              CC2S
    +              Capture/Compare 2
    +              selection
    +              8
    +              2
    +            
    +            
    +              OC1M
    +              Output Compare 1 mode
    +              4
    +              3
    +            
    +            
    +              OC1PE
    +              Output Compare 1 preload
    +              enable
    +              3
    +              1
    +            
    +            
    +              OC1FE
    +              Output Compare 1 fast
    +              enable
    +              2
    +              1
    +            
    +            
    +              CC1S
    +              Capture/Compare 1
    +              selection
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          CCMR1_Input
    +          CCMR1_Input
    +          capture/compare mode register 1 (input
    +          mode)
    +          CCMR1_Output
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              IC2F
    +              Input capture 2 filter
    +              12
    +              4
    +            
    +            
    +              IC2PSC
    +              Input capture 2 prescaler
    +              10
    +              2
    +            
    +            
    +              CC2S
    +              Capture/Compare 2
    +              selection
    +              8
    +              2
    +            
    +            
    +              IC1F
    +              Input capture 1 filter
    +              4
    +              4
    +            
    +            
    +              IC1PSC
    +              Input capture 1 prescaler
    +              2
    +              2
    +            
    +            
    +              CC1S
    +              Capture/Compare 1
    +              selection
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          CCER
    +          CCER
    +          capture/compare enable
    +          register
    +          0x20
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              CC2NP
    +              Capture/Compare 2 output
    +              Polarity
    +              7
    +              1
    +            
    +            
    +              CC2P
    +              Capture/Compare 2 output
    +              Polarity
    +              5
    +              1
    +            
    +            
    +              CC2E
    +              Capture/Compare 2 output
    +              enable
    +              4
    +              1
    +            
    +            
    +              CC1NP
    +              Capture/Compare 1 output
    +              Polarity
    +              3
    +              1
    +            
    +            
    +              CC1P
    +              Capture/Compare 1 output
    +              Polarity
    +              1
    +              1
    +            
    +            
    +              CC1E
    +              Capture/Compare 1 output
    +              enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNT
    +          CNT
    +          counter
    +          0x24
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CNT
    +              counter value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          PSC
    +          PSC
    +          prescaler
    +          0x28
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              PSC
    +              Prescaler value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          ARR
    +          ARR
    +          auto-reload register
    +          0x2C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ARR
    +              Auto-reload value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CCR1
    +          CCR1
    +          capture/compare register 1
    +          0x34
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CCR1
    +              Capture/Compare 1 value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CCR2
    +          CCR2
    +          capture/compare register 2
    +          0x38
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CCR2
    +              Capture/Compare 2 value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          OR
    +          OR
    +          TIM21 option register
    +          0x50
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ETR_RMP
    +              Timer21 ETR remap
    +              0
    +              2
    +            
    +            
    +              TI1_RMP
    +              Timer21 TI1
    +              2
    +              3
    +            
    +            
    +              TI2_RMP
    +              Timer21 TI2
    +              5
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      TIM22
    +      General-purpose-timers
    +      TIM
    +      0x40011400
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        TIM21
    +        TIMER21 global interrupt
    +        20
    +      
    +      
    +        
    +          CR1
    +          CR1
    +          control register 1
    +          0x0
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              CEN
    +              Counter enable
    +              0
    +              1
    +            
    +            
    +              UDIS
    +              Update disable
    +              1
    +              1
    +            
    +            
    +              URS
    +              Update request source
    +              2
    +              1
    +            
    +            
    +              OPM
    +              One-pulse mode
    +              3
    +              1
    +            
    +            
    +              DIR
    +              Direction
    +              4
    +              1
    +            
    +            
    +              CMS
    +              Center-aligned mode
    +              selection
    +              5
    +              2
    +            
    +            
    +              ARPE
    +              Auto-reload preload enable
    +              7
    +              1
    +            
    +            
    +              CKD
    +              Clock division
    +              8
    +              2
    +            
    +          
    +        
    +        
    +          CR2
    +          CR2
    +          control register 2
    +          0x4
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              MMS
    +              Master mode selection
    +              4
    +              3
    +            
    +          
    +        
    +        
    +          SMCR
    +          SMCR
    +          slave mode control register
    +          0x8
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              SMS
    +              Slave mode selection
    +              0
    +              3
    +            
    +            
    +              TS
    +              Trigger selection
    +              4
    +              3
    +            
    +            
    +              MSM
    +              Master/Slave mode
    +              7
    +              1
    +            
    +            
    +              ETF
    +              External trigger filter
    +              8
    +              4
    +            
    +            
    +              ETPS
    +              External trigger prescaler
    +              12
    +              2
    +            
    +            
    +              ECE
    +              External clock enable
    +              14
    +              1
    +            
    +            
    +              ETP
    +              External trigger polarity
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          DIER
    +          DIER
    +          DMA/Interrupt enable register
    +          0xC
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              TIE
    +              Trigger interrupt enable
    +              6
    +              1
    +            
    +            
    +              CC2IE
    +              Capture/Compare 2 interrupt
    +              enable
    +              2
    +              1
    +            
    +            
    +              CC1IE
    +              Capture/Compare 1 interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              UIE
    +              Update interrupt enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          status register
    +          0x10
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              CC2OF
    +              Capture/compare 2 overcapture
    +              flag
    +              10
    +              1
    +            
    +            
    +              CC1OF
    +              Capture/Compare 1 overcapture
    +              flag
    +              9
    +              1
    +            
    +            
    +              TIF
    +              Trigger interrupt flag
    +              6
    +              1
    +            
    +            
    +              CC2IF
    +              Capture/Compare 2 interrupt
    +              flag
    +              2
    +              1
    +            
    +            
    +              CC1IF
    +              Capture/compare 1 interrupt
    +              flag
    +              1
    +              1
    +            
    +            
    +              UIF
    +              Update interrupt flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          EGR
    +          EGR
    +          event generation register
    +          0x14
    +          0x20
    +          write-only
    +          0x0000
    +          
    +            
    +              TG
    +              Trigger generation
    +              6
    +              1
    +            
    +            
    +              CC2G
    +              Capture/compare 2
    +              generation
    +              2
    +              1
    +            
    +            
    +              CC1G
    +              Capture/compare 1
    +              generation
    +              1
    +              1
    +            
    +            
    +              UG
    +              Update generation
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CCMR1_Output
    +          CCMR1_Output
    +          capture/compare mode register (output
    +          mode)
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              OC2M
    +              Output Compare 2 mode
    +              12
    +              3
    +            
    +            
    +              OC2PE
    +              Output Compare 2 preload
    +              enable
    +              11
    +              1
    +            
    +            
    +              OC2FE
    +              Output Compare 2 fast
    +              enable
    +              10
    +              1
    +            
    +            
    +              CC2S
    +              Capture/Compare 2
    +              selection
    +              8
    +              2
    +            
    +            
    +              OC1M
    +              Output Compare 1 mode
    +              4
    +              3
    +            
    +            
    +              OC1PE
    +              Output Compare 1 preload
    +              enable
    +              3
    +              1
    +            
    +            
    +              OC1FE
    +              Output Compare 1 fast
    +              enable
    +              2
    +              1
    +            
    +            
    +              CC1S
    +              Capture/Compare 1
    +              selection
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          CCMR1_Input
    +          CCMR1_Input
    +          capture/compare mode register 1 (input
    +          mode)
    +          CCMR1_Output
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              IC2F
    +              Input capture 2 filter
    +              12
    +              4
    +            
    +            
    +              IC2PSC
    +              Input capture 2 prescaler
    +              10
    +              2
    +            
    +            
    +              CC2S
    +              Capture/Compare 2
    +              selection
    +              8
    +              2
    +            
    +            
    +              IC1F
    +              Input capture 1 filter
    +              4
    +              4
    +            
    +            
    +              IC1PSC
    +              Input capture 1 prescaler
    +              2
    +              2
    +            
    +            
    +              CC1S
    +              Capture/Compare 1
    +              selection
    +              0
    +              2
    +            
    +          
    +        
    +        
    +          CCER
    +          CCER
    +          capture/compare enable
    +          register
    +          0x20
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              CC2NP
    +              Capture/Compare 2 output
    +              Polarity
    +              7
    +              1
    +            
    +            
    +              CC2P
    +              Capture/Compare 2 output
    +              Polarity
    +              5
    +              1
    +            
    +            
    +              CC2E
    +              Capture/Compare 2 output
    +              enable
    +              4
    +              1
    +            
    +            
    +              CC1NP
    +              Capture/Compare 1 output
    +              Polarity
    +              3
    +              1
    +            
    +            
    +              CC1P
    +              Capture/Compare 1 output
    +              Polarity
    +              1
    +              1
    +            
    +            
    +              CC1E
    +              Capture/Compare 1 output
    +              enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CNT
    +          CNT
    +          counter
    +          0x24
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CNT
    +              counter value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          PSC
    +          PSC
    +          prescaler
    +          0x28
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              PSC
    +              Prescaler value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          ARR
    +          ARR
    +          auto-reload register
    +          0x2C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ARR
    +              Auto-reload value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CCR1
    +          CCR1
    +          capture/compare register 1
    +          0x34
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CCR1
    +              Capture/Compare 1 value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          CCR2
    +          CCR2
    +          capture/compare register 2
    +          0x38
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CCR2
    +              Capture/Compare 2 value
    +              0
    +              16
    +            
    +          
    +        
    +        
    +          OR
    +          OR
    +          TIM22 option register
    +          0x50
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              ETR_RMP
    +              Timer22 ETR remap
    +              0
    +              2
    +            
    +            
    +              TI1_RMP
    +              Timer22 TI1
    +              2
    +              2
    +            
    +          
    +        
    +      
    +    
    +    
    +      LPUSART1
    +      Universal synchronous asynchronous receiver
    +      transmitter
    +      USART
    +      0x40004800
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        TIM22
    +        TIMER22 global interrupt
    +        22
    +      
    +      
    +        
    +          CR1
    +          CR1
    +          Control register 1
    +          0x0
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              M1
    +              Word length
    +              28
    +              1
    +            
    +            
    +              DEAT4
    +              Driver Enable assertion
    +              time
    +              25
    +              1
    +            
    +            
    +              DEAT3
    +              DEAT3
    +              24
    +              1
    +            
    +            
    +              DEAT2
    +              DEAT2
    +              23
    +              1
    +            
    +            
    +              DEAT1
    +              DEAT1
    +              22
    +              1
    +            
    +            
    +              DEAT0
    +              DEAT0
    +              21
    +              1
    +            
    +            
    +              DEDT4
    +              Driver Enable de-assertion
    +              time
    +              20
    +              1
    +            
    +            
    +              DEDT3
    +              DEDT3
    +              19
    +              1
    +            
    +            
    +              DEDT2
    +              DEDT2
    +              18
    +              1
    +            
    +            
    +              DEDT1
    +              DEDT1
    +              17
    +              1
    +            
    +            
    +              DEDT0
    +              DEDT0
    +              16
    +              1
    +            
    +            
    +              CMIE
    +              Character match interrupt
    +              enable
    +              14
    +              1
    +            
    +            
    +              MME
    +              Mute mode enable
    +              13
    +              1
    +            
    +            
    +              M0
    +              Word length
    +              12
    +              1
    +            
    +            
    +              WAKE
    +              Receiver wakeup method
    +              11
    +              1
    +            
    +            
    +              PCE
    +              Parity control enable
    +              10
    +              1
    +            
    +            
    +              PS
    +              Parity selection
    +              9
    +              1
    +            
    +            
    +              PEIE
    +              PE interrupt enable
    +              8
    +              1
    +            
    +            
    +              TXEIE
    +              interrupt enable
    +              7
    +              1
    +            
    +            
    +              TCIE
    +              Transmission complete interrupt
    +              enable
    +              6
    +              1
    +            
    +            
    +              RXNEIE
    +              RXNE interrupt enable
    +              5
    +              1
    +            
    +            
    +              IDLEIE
    +              IDLE interrupt enable
    +              4
    +              1
    +            
    +            
    +              TE
    +              Transmitter enable
    +              3
    +              1
    +            
    +            
    +              RE
    +              Receiver enable
    +              2
    +              1
    +            
    +            
    +              UESM
    +              USART enable in Stop mode
    +              1
    +              1
    +            
    +            
    +              UE
    +              USART enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          CR2
    +          CR2
    +          Control register 2
    +          0x4
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              ADD4_7
    +              Address of the USART node
    +              28
    +              4
    +            
    +            
    +              ADD0_3
    +              Address of the USART node
    +              24
    +              4
    +            
    +            
    +              MSBFIRST
    +              Most significant bit first
    +              19
    +              1
    +            
    +            
    +              TAINV
    +              Binary data inversion
    +              18
    +              1
    +            
    +            
    +              TXINV
    +              TX pin active level
    +              inversion
    +              17
    +              1
    +            
    +            
    +              RXINV
    +              RX pin active level
    +              inversion
    +              16
    +              1
    +            
    +            
    +              SWAP
    +              Swap TX/RX pins
    +              15
    +              1
    +            
    +            
    +              STOP
    +              STOP bits
    +              12
    +              2
    +            
    +            
    +              CLKEN
    +              Clock enable
    +              11
    +              1
    +            
    +            
    +              ADDM7
    +              7-bit Address Detection/4-bit Address
    +              Detection
    +              4
    +              1
    +            
    +          
    +        
    +        
    +          CR3
    +          CR3
    +          Control register 3
    +          0x8
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              WUFIE
    +              Wakeup from Stop mode interrupt
    +              enable
    +              22
    +              1
    +            
    +            
    +              WUS
    +              Wakeup from Stop mode interrupt flag
    +              selection
    +              20
    +              2
    +            
    +            
    +              DEP
    +              Driver enable polarity
    +              selection
    +              15
    +              1
    +            
    +            
    +              DEM
    +              Driver enable mode
    +              14
    +              1
    +            
    +            
    +              DDRE
    +              DMA Disable on Reception
    +              Error
    +              13
    +              1
    +            
    +            
    +              OVRDIS
    +              Overrun Disable
    +              12
    +              1
    +            
    +            
    +              CTSIE
    +              CTS interrupt enable
    +              10
    +              1
    +            
    +            
    +              CTSE
    +              CTS enable
    +              9
    +              1
    +            
    +            
    +              RTSE
    +              RTS enable
    +              8
    +              1
    +            
    +            
    +              DMAT
    +              DMA enable transmitter
    +              7
    +              1
    +            
    +            
    +              DMAR
    +              DMA enable receiver
    +              6
    +              1
    +            
    +            
    +              HDSEL
    +              Half-duplex selection
    +              3
    +              1
    +            
    +            
    +              EIE
    +              Error interrupt enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          BRR
    +          BRR
    +          Baud rate register
    +          0xC
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              BRR
    +              BRR
    +              0
    +              20
    +            
    +          
    +        
    +        
    +          RQR
    +          RQR
    +          Request register
    +          0x18
    +          0x20
    +          write-only
    +          0x0000
    +          
    +            
    +              RXFRQ
    +              Receive data flush request
    +              3
    +              1
    +            
    +            
    +              MMRQ
    +              Mute mode request
    +              2
    +              1
    +            
    +            
    +              SBKRQ
    +              Send break request
    +              1
    +              1
    +            
    +          
    +        
    +        
    +          ISR
    +          ISR
    +          Interrupt & status
    +          register
    +          0x1C
    +          0x20
    +          read-only
    +          0x00C0
    +          
    +            
    +              REACK
    +              REACK
    +              22
    +              1
    +            
    +            
    +              TEACK
    +              TEACK
    +              21
    +              1
    +            
    +            
    +              WUF
    +              WUF
    +              20
    +              1
    +            
    +            
    +              RWU
    +              RWU
    +              19
    +              1
    +            
    +            
    +              SBKF
    +              SBKF
    +              18
    +              1
    +            
    +            
    +              CMF
    +              CMF
    +              17
    +              1
    +            
    +            
    +              BUSY
    +              BUSY
    +              16
    +              1
    +            
    +            
    +              CTS
    +              CTS
    +              10
    +              1
    +            
    +            
    +              CTSIF
    +              CTSIF
    +              9
    +              1
    +            
    +            
    +              TXE
    +              TXE
    +              7
    +              1
    +            
    +            
    +              TC
    +              TC
    +              6
    +              1
    +            
    +            
    +              RXNE
    +              RXNE
    +              5
    +              1
    +            
    +            
    +              IDLE
    +              IDLE
    +              4
    +              1
    +            
    +            
    +              ORE
    +              ORE
    +              3
    +              1
    +            
    +            
    +              NF
    +              NF
    +              2
    +              1
    +            
    +            
    +              FE
    +              FE
    +              1
    +              1
    +            
    +            
    +              PE
    +              PE
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          ICR
    +          ICR
    +          Interrupt flag clear register
    +          0x20
    +          0x20
    +          write-only
    +          0x0000
    +          
    +            
    +              WUCF
    +              Wakeup from Stop mode clear
    +              flag
    +              20
    +              1
    +            
    +            
    +              CMCF
    +              Character match clear flag
    +              17
    +              1
    +            
    +            
    +              CTSCF
    +              CTS clear flag
    +              9
    +              1
    +            
    +            
    +              TCCF
    +              Transmission complete clear
    +              flag
    +              6
    +              1
    +            
    +            
    +              IDLECF
    +              Idle line detected clear
    +              flag
    +              4
    +              1
    +            
    +            
    +              ORECF
    +              Overrun error clear flag
    +              3
    +              1
    +            
    +            
    +              NCF
    +              Noise detected clear flag
    +              2
    +              1
    +            
    +            
    +              FECF
    +              Framing error clear flag
    +              1
    +              1
    +            
    +            
    +              PECF
    +              Parity error clear flag
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          RDR
    +          RDR
    +          Receive data register
    +          0x24
    +          0x20
    +          read-only
    +          0x0000
    +          
    +            
    +              RDR
    +              Receive data value
    +              0
    +              9
    +            
    +          
    +        
    +        
    +          TDR
    +          TDR
    +          Transmit data register
    +          0x28
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              TDR
    +              Transmit data value
    +              0
    +              9
    +            
    +          
    +        
    +      
    +    
    +    
    +      NVIC
    +      Nested Vectored Interrupt
    +      Controller
    +      NVIC
    +      0xE000E100
    +      
    +        0x0
    +        0x33D
    +        registers
    +      
    +      
    +        
    +          ISER
    +          ISER
    +          Interrupt Set Enable Register
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              SETENA
    +              SETENA
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          ICER
    +          ICER
    +          Interrupt Clear Enable
    +          Register
    +          0x80
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CLRENA
    +              CLRENA
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          ISPR
    +          ISPR
    +          Interrupt Set-Pending Register
    +          0x100
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              SETPEND
    +              SETPEND
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          ICPR
    +          ICPR
    +          Interrupt Clear-Pending
    +          Register
    +          0x180
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              CLRPEND
    +              CLRPEND
    +              0
    +              32
    +            
    +          
    +        
    +        
    +          IPR0
    +          IPR0
    +          Interrupt Priority Register 0
    +          0x300
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_0
    +              priority for interrupt 0
    +              0
    +              8
    +            
    +            
    +              PRI_1
    +              priority for interrupt 1
    +              8
    +              8
    +            
    +            
    +              PRI_2
    +              priority for interrupt 2
    +              16
    +              8
    +            
    +            
    +              PRI_3
    +              priority for interrupt 3
    +              24
    +              8
    +            
    +          
    +        
    +        
    +          IPR1
    +          IPR1
    +          Interrupt Priority Register 1
    +          0x304
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_4
    +              priority for interrupt n
    +              0
    +              8
    +            
    +            
    +              PRI_5
    +              priority for interrupt n
    +              8
    +              8
    +            
    +            
    +              PRI_6
    +              priority for interrupt n
    +              16
    +              8
    +            
    +            
    +              PRI_7
    +              priority for interrupt n
    +              24
    +              8
    +            
    +          
    +        
    +        
    +          IPR2
    +          IPR2
    +          Interrupt Priority Register 2
    +          0x308
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_8
    +              priority for interrupt n
    +              0
    +              8
    +            
    +            
    +              PRI_9
    +              priority for interrupt n
    +              8
    +              8
    +            
    +            
    +              PRI_10
    +              priority for interrupt n
    +              16
    +              8
    +            
    +            
    +              PRI_11
    +              priority for interrupt n
    +              24
    +              8
    +            
    +          
    +        
    +        
    +          IPR3
    +          IPR3
    +          Interrupt Priority Register 3
    +          0x30C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_12
    +              priority for interrupt n
    +              0
    +              8
    +            
    +            
    +              PRI_13
    +              priority for interrupt n
    +              8
    +              8
    +            
    +            
    +              PRI_14
    +              priority for interrupt n
    +              16
    +              8
    +            
    +            
    +              PRI_15
    +              priority for interrupt n
    +              24
    +              8
    +            
    +          
    +        
    +        
    +          IPR4
    +          IPR4
    +          Interrupt Priority Register 4
    +          0x310
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_16
    +              priority for interrupt n
    +              0
    +              8
    +            
    +            
    +              PRI_17
    +              priority for interrupt n
    +              8
    +              8
    +            
    +            
    +              PRI_18
    +              priority for interrupt n
    +              16
    +              8
    +            
    +            
    +              PRI_19
    +              priority for interrupt n
    +              24
    +              8
    +            
    +          
    +        
    +        
    +          IPR5
    +          IPR5
    +          Interrupt Priority Register 5
    +          0x314
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_20
    +              priority for interrupt n
    +              0
    +              8
    +            
    +            
    +              PRI_21
    +              priority for interrupt n
    +              8
    +              8
    +            
    +            
    +              PRI_22
    +              priority for interrupt n
    +              16
    +              8
    +            
    +            
    +              PRI_23
    +              priority for interrupt n
    +              24
    +              8
    +            
    +          
    +        
    +        
    +          IPR6
    +          IPR6
    +          Interrupt Priority Register 6
    +          0x318
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_24
    +              priority for interrupt n
    +              0
    +              8
    +            
    +            
    +              PRI_25
    +              priority for interrupt n
    +              8
    +              8
    +            
    +            
    +              PRI_26
    +              priority for interrupt n
    +              16
    +              8
    +            
    +            
    +              PRI_27
    +              priority for interrupt n
    +              24
    +              8
    +            
    +          
    +        
    +        
    +          IPR7
    +          IPR7
    +          Interrupt Priority Register 7
    +          0x31C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_28
    +              priority for interrupt n
    +              0
    +              8
    +            
    +            
    +              PRI_29
    +              priority for interrupt n
    +              8
    +              8
    +            
    +            
    +              PRI_30
    +              priority for interrupt n
    +              16
    +              8
    +            
    +            
    +              PRI_31
    +              priority for interrupt n
    +              24
    +              8
    +            
    +          
    +        
    +      
    +    
    +    
    +      USB_SRAM
    +      Universal serial bus full-speed device
    +      interface
    +      USB
    +      0x40006000
    +      
    +        0x0
    +        0x800
    +        registers
    +      
    +      
    +        
    +          EP0R
    +          EP0R
    +          endpoint 0 register
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              EA
    +              Endpoint address
    +              0
    +              4
    +            
    +            
    +              STAT_TX
    +              Status bits, for transmission
    +              transfers
    +              4
    +              2
    +            
    +            
    +              DTOG_TX
    +              Data Toggle, for transmission
    +              transfers
    +              6
    +              1
    +            
    +            
    +              CTR_TX
    +              Correct Transfer for
    +              transmission
    +              7
    +              1
    +            
    +            
    +              EP_KIND
    +              Endpoint kind
    +              8
    +              1
    +            
    +            
    +              EP_TYPE
    +              Endpoint type
    +              9
    +              2
    +            
    +            
    +              SETUP
    +              Setup transaction
    +              completed
    +              11
    +              1
    +            
    +            
    +              STAT_RX
    +              Status bits, for reception
    +              transfers
    +              12
    +              2
    +            
    +            
    +              DTOG_RX
    +              Data Toggle, for reception
    +              transfers
    +              14
    +              1
    +            
    +            
    +              CTR_RX
    +              Correct transfer for
    +              reception
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          EP1R
    +          EP1R
    +          endpoint 1 register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              EA
    +              Endpoint address
    +              0
    +              4
    +            
    +            
    +              STAT_TX
    +              Status bits, for transmission
    +              transfers
    +              4
    +              2
    +            
    +            
    +              DTOG_TX
    +              Data Toggle, for transmission
    +              transfers
    +              6
    +              1
    +            
    +            
    +              CTR_TX
    +              Correct Transfer for
    +              transmission
    +              7
    +              1
    +            
    +            
    +              EP_KIND
    +              Endpoint kind
    +              8
    +              1
    +            
    +            
    +              EP_TYPE
    +              Endpoint type
    +              9
    +              2
    +            
    +            
    +              SETUP
    +              Setup transaction
    +              completed
    +              11
    +              1
    +            
    +            
    +              STAT_RX
    +              Status bits, for reception
    +              transfers
    +              12
    +              2
    +            
    +            
    +              DTOG_RX
    +              Data Toggle, for reception
    +              transfers
    +              14
    +              1
    +            
    +            
    +              CTR_RX
    +              Correct transfer for
    +              reception
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          EP2R
    +          EP2R
    +          endpoint 2 register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              EA
    +              Endpoint address
    +              0
    +              4
    +            
    +            
    +              STAT_TX
    +              Status bits, for transmission
    +              transfers
    +              4
    +              2
    +            
    +            
    +              DTOG_TX
    +              Data Toggle, for transmission
    +              transfers
    +              6
    +              1
    +            
    +            
    +              CTR_TX
    +              Correct Transfer for
    +              transmission
    +              7
    +              1
    +            
    +            
    +              EP_KIND
    +              Endpoint kind
    +              8
    +              1
    +            
    +            
    +              EP_TYPE
    +              Endpoint type
    +              9
    +              2
    +            
    +            
    +              SETUP
    +              Setup transaction
    +              completed
    +              11
    +              1
    +            
    +            
    +              STAT_RX
    +              Status bits, for reception
    +              transfers
    +              12
    +              2
    +            
    +            
    +              DTOG_RX
    +              Data Toggle, for reception
    +              transfers
    +              14
    +              1
    +            
    +            
    +              CTR_RX
    +              Correct transfer for
    +              reception
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          EP3R
    +          EP3R
    +          endpoint 3 register
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              EA
    +              Endpoint address
    +              0
    +              4
    +            
    +            
    +              STAT_TX
    +              Status bits, for transmission
    +              transfers
    +              4
    +              2
    +            
    +            
    +              DTOG_TX
    +              Data Toggle, for transmission
    +              transfers
    +              6
    +              1
    +            
    +            
    +              CTR_TX
    +              Correct Transfer for
    +              transmission
    +              7
    +              1
    +            
    +            
    +              EP_KIND
    +              Endpoint kind
    +              8
    +              1
    +            
    +            
    +              EP_TYPE
    +              Endpoint type
    +              9
    +              2
    +            
    +            
    +              SETUP
    +              Setup transaction
    +              completed
    +              11
    +              1
    +            
    +            
    +              STAT_RX
    +              Status bits, for reception
    +              transfers
    +              12
    +              2
    +            
    +            
    +              DTOG_RX
    +              Data Toggle, for reception
    +              transfers
    +              14
    +              1
    +            
    +            
    +              CTR_RX
    +              Correct transfer for
    +              reception
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          EP4R
    +          EP4R
    +          endpoint 4 register
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              EA
    +              Endpoint address
    +              0
    +              4
    +            
    +            
    +              STAT_TX
    +              Status bits, for transmission
    +              transfers
    +              4
    +              2
    +            
    +            
    +              DTOG_TX
    +              Data Toggle, for transmission
    +              transfers
    +              6
    +              1
    +            
    +            
    +              CTR_TX
    +              Correct Transfer for
    +              transmission
    +              7
    +              1
    +            
    +            
    +              EP_KIND
    +              Endpoint kind
    +              8
    +              1
    +            
    +            
    +              EP_TYPE
    +              Endpoint type
    +              9
    +              2
    +            
    +            
    +              SETUP
    +              Setup transaction
    +              completed
    +              11
    +              1
    +            
    +            
    +              STAT_RX
    +              Status bits, for reception
    +              transfers
    +              12
    +              2
    +            
    +            
    +              DTOG_RX
    +              Data Toggle, for reception
    +              transfers
    +              14
    +              1
    +            
    +            
    +              CTR_RX
    +              Correct transfer for
    +              reception
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          EP5R
    +          EP5R
    +          endpoint 5 register
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              EA
    +              Endpoint address
    +              0
    +              4
    +            
    +            
    +              STAT_TX
    +              Status bits, for transmission
    +              transfers
    +              4
    +              2
    +            
    +            
    +              DTOG_TX
    +              Data Toggle, for transmission
    +              transfers
    +              6
    +              1
    +            
    +            
    +              CTR_TX
    +              Correct Transfer for
    +              transmission
    +              7
    +              1
    +            
    +            
    +              EP_KIND
    +              Endpoint kind
    +              8
    +              1
    +            
    +            
    +              EP_TYPE
    +              Endpoint type
    +              9
    +              2
    +            
    +            
    +              SETUP
    +              Setup transaction
    +              completed
    +              11
    +              1
    +            
    +            
    +              STAT_RX
    +              Status bits, for reception
    +              transfers
    +              12
    +              2
    +            
    +            
    +              DTOG_RX
    +              Data Toggle, for reception
    +              transfers
    +              14
    +              1
    +            
    +            
    +              CTR_RX
    +              Correct transfer for
    +              reception
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          EP6R
    +          EP6R
    +          endpoint 6 register
    +          0x18
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              EA
    +              Endpoint address
    +              0
    +              4
    +            
    +            
    +              STAT_TX
    +              Status bits, for transmission
    +              transfers
    +              4
    +              2
    +            
    +            
    +              DTOG_TX
    +              Data Toggle, for transmission
    +              transfers
    +              6
    +              1
    +            
    +            
    +              CTR_TX
    +              Correct Transfer for
    +              transmission
    +              7
    +              1
    +            
    +            
    +              EP_KIND
    +              Endpoint kind
    +              8
    +              1
    +            
    +            
    +              EP_TYPE
    +              Endpoint type
    +              9
    +              2
    +            
    +            
    +              SETUP
    +              Setup transaction
    +              completed
    +              11
    +              1
    +            
    +            
    +              STAT_RX
    +              Status bits, for reception
    +              transfers
    +              12
    +              2
    +            
    +            
    +              DTOG_RX
    +              Data Toggle, for reception
    +              transfers
    +              14
    +              1
    +            
    +            
    +              CTR_RX
    +              Correct transfer for
    +              reception
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          EP7R
    +          EP7R
    +          endpoint 7 register
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              EA
    +              Endpoint address
    +              0
    +              4
    +            
    +            
    +              STAT_TX
    +              Status bits, for transmission
    +              transfers
    +              4
    +              2
    +            
    +            
    +              DTOG_TX
    +              Data Toggle, for transmission
    +              transfers
    +              6
    +              1
    +            
    +            
    +              CTR_TX
    +              Correct Transfer for
    +              transmission
    +              7
    +              1
    +            
    +            
    +              EP_KIND
    +              Endpoint kind
    +              8
    +              1
    +            
    +            
    +              EP_TYPE
    +              Endpoint type
    +              9
    +              2
    +            
    +            
    +              SETUP
    +              Setup transaction
    +              completed
    +              11
    +              1
    +            
    +            
    +              STAT_RX
    +              Status bits, for reception
    +              transfers
    +              12
    +              2
    +            
    +            
    +              DTOG_RX
    +              Data Toggle, for reception
    +              transfers
    +              14
    +              1
    +            
    +            
    +              CTR_RX
    +              Correct transfer for
    +              reception
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          CNTR
    +          CNTR
    +          control register
    +          0x40
    +          0x20
    +          read-write
    +          0x00000003
    +          
    +            
    +              FRES
    +              Force USB Reset
    +              0
    +              1
    +            
    +            
    +              PDWN
    +              Power down
    +              1
    +              1
    +            
    +            
    +              LPMODE
    +              Low-power mode
    +              2
    +              1
    +            
    +            
    +              FSUSP
    +              Force suspend
    +              3
    +              1
    +            
    +            
    +              RESUME
    +              Resume request
    +              4
    +              1
    +            
    +            
    +              L1RESUME
    +              LPM L1 Resume request
    +              5
    +              1
    +            
    +            
    +              L1REQM
    +              LPM L1 state request interrupt
    +              mask
    +              7
    +              1
    +            
    +            
    +              ESOFM
    +              Expected start of frame interrupt
    +              mask
    +              8
    +              1
    +            
    +            
    +              SOFM
    +              Start of frame interrupt
    +              mask
    +              9
    +              1
    +            
    +            
    +              RESETM
    +              USB reset interrupt mask
    +              10
    +              1
    +            
    +            
    +              SUSPM
    +              Suspend mode interrupt
    +              mask
    +              11
    +              1
    +            
    +            
    +              WKUPM
    +              Wakeup interrupt mask
    +              12
    +              1
    +            
    +            
    +              ERRM
    +              Error interrupt mask
    +              13
    +              1
    +            
    +            
    +              PMAOVRM
    +              Packet memory area over / underrun
    +              interrupt mask
    +              14
    +              1
    +            
    +            
    +              CTRM
    +              Correct transfer interrupt
    +              mask
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          ISTR
    +          ISTR
    +          interrupt status register
    +          0x44
    +          0x20
    +          0x00000000
    +          
    +            
    +              EP_ID
    +              Endpoint Identifier
    +              0
    +              4
    +              read-only
    +            
    +            
    +              DIR
    +              Direction of transaction
    +              4
    +              1
    +              read-only
    +            
    +            
    +              L1REQ
    +              LPM L1 state request
    +              7
    +              1
    +              read-write
    +            
    +            
    +              ESOF
    +              Expected start frame
    +              8
    +              1
    +              read-write
    +            
    +            
    +              SOF
    +              start of frame
    +              9
    +              1
    +              read-write
    +            
    +            
    +              RESET
    +              reset request
    +              10
    +              1
    +              read-write
    +            
    +            
    +              SUSP
    +              Suspend mode request
    +              11
    +              1
    +              read-write
    +            
    +            
    +              WKUP
    +              Wakeup
    +              12
    +              1
    +              read-write
    +            
    +            
    +              ERR
    +              Error
    +              13
    +              1
    +              read-write
    +            
    +            
    +              PMAOVR
    +              Packet memory area over /
    +              underrun
    +              14
    +              1
    +              read-write
    +            
    +            
    +              CTR
    +              Correct transfer
    +              15
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          FNR
    +          FNR
    +          frame number register
    +          0x48
    +          0x20
    +          read-only
    +          0x0000
    +          
    +            
    +              FN
    +              Frame number
    +              0
    +              11
    +            
    +            
    +              LSOF
    +              Lost SOF
    +              11
    +              2
    +            
    +            
    +              LCK
    +              Locked
    +              13
    +              1
    +            
    +            
    +              RXDM
    +              Receive data - line status
    +              14
    +              1
    +            
    +            
    +              RXDP
    +              Receive data + line status
    +              15
    +              1
    +            
    +          
    +        
    +        
    +          DADDR
    +          DADDR
    +          device address
    +          0x4C
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              ADD
    +              Device address
    +              0
    +              7
    +            
    +            
    +              EF
    +              Enable function
    +              7
    +              1
    +            
    +          
    +        
    +        
    +          BTABLE
    +          BTABLE
    +          Buffer table address
    +          0x50
    +          0x20
    +          read-write
    +          0x0000
    +          
    +            
    +              BTABLE
    +              Buffer table
    +              3
    +              13
    +            
    +          
    +        
    +        
    +          LPMCSR
    +          LPMCSR
    +          LPM control and status
    +          register
    +          0x54
    +          0x20
    +          0x0000
    +          
    +            
    +              LPMEN
    +              LPM support enable
    +              0
    +              1
    +              read-write
    +            
    +            
    +              LPMACK
    +              LPM Token acknowledge
    +              enable
    +              1
    +              1
    +              read-write
    +            
    +            
    +              REMWAKE
    +              bRemoteWake value
    +              3
    +              1
    +              read-only
    +            
    +            
    +              BESL
    +              BESL value
    +              4
    +              4
    +              read-only
    +            
    +          
    +        
    +        
    +          BCDR
    +          BCDR
    +          Battery charging detector
    +          0x58
    +          0x20
    +          0x0000
    +          
    +            
    +              BCDEN
    +              Battery charging detector
    +              0
    +              1
    +              read-write
    +            
    +            
    +              DCDEN
    +              Data contact detection
    +              1
    +              1
    +              read-write
    +            
    +            
    +              PDEN
    +              Primary detection
    +              2
    +              1
    +              read-write
    +            
    +            
    +              SDEN
    +              Secondary detection
    +              3
    +              1
    +              read-write
    +            
    +            
    +              DCDET
    +              Data contact detection
    +              4
    +              1
    +              read-only
    +            
    +            
    +              PDET
    +              Primary detection
    +              5
    +              1
    +              read-only
    +            
    +            
    +              SDET
    +              Secondary detection
    +              6
    +              1
    +              read-only
    +            
    +            
    +              PS2DET
    +              DM pull-up detection
    +              status
    +              7
    +              1
    +              read-only
    +            
    +            
    +              DPPU
    +              DP pull-up control
    +              15
    +              1
    +              read-write
    +            
    +          
    +        
    +      
    +    
    +    
    +      LCD
    +      Liquid crystal display controller
    +      LCD
    +      0x40002400
    +      
    +        0x0
    +        0x400
    +        registers
    +      
    +      
    +        LCD
    +        LCD global interrupt
    +        30
    +      
    +      
    +        
    +          CR
    +          CR
    +          control register
    +          0x0
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              BIAS
    +              Bias selector
    +              5
    +              2
    +            
    +            
    +              DUTY
    +              Duty selection
    +              2
    +              3
    +            
    +            
    +              VSEL
    +              Voltage source selection
    +              1
    +              1
    +            
    +            
    +              LCDEN
    +              LCD controller enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          FCR
    +          FCR
    +          frame control register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PS
    +              PS 16-bit prescaler
    +              22
    +              4
    +            
    +            
    +              DIV
    +              DIV clock divider
    +              18
    +              4
    +            
    +            
    +              BLINK
    +              Blink mode selection
    +              16
    +              2
    +            
    +            
    +              BLINKF
    +              Blink frequency selection
    +              13
    +              3
    +            
    +            
    +              CC
    +              Contrast control
    +              10
    +              3
    +            
    +            
    +              DEAD
    +              Dead time duration
    +              7
    +              3
    +            
    +            
    +              PON
    +              Pulse ON duration
    +              4
    +              3
    +            
    +            
    +              UDDIE
    +              Update display done interrupt
    +              enable
    +              3
    +              1
    +            
    +            
    +              SOFIE
    +              Start of frame interrupt
    +              enable
    +              1
    +              1
    +            
    +            
    +              HD
    +              High drive enable
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          SR
    +          SR
    +          status register
    +          0x8
    +          0x20
    +          0x00000020
    +          
    +            
    +              FCRSF
    +              LCD Frame Control Register
    +              Synchronization flag
    +              5
    +              1
    +              read-only
    +            
    +            
    +              RDY
    +              Ready flag
    +              4
    +              1
    +              read-only
    +            
    +            
    +              UDD
    +              Update Display Done
    +              3
    +              1
    +              read-only
    +            
    +            
    +              UDR
    +              Update display request
    +              2
    +              1
    +              write-only
    +            
    +            
    +              SOF
    +              Start of frame flag
    +              1
    +              1
    +              read-only
    +            
    +            
    +              ENS
    +              ENS
    +              0
    +              1
    +              read-only
    +            
    +          
    +        
    +        
    +          CLR
    +          CLR
    +          clear register
    +          0xC
    +          0x20
    +          write-only
    +          0x00000000
    +          
    +            
    +              UDDC
    +              Update display done clear
    +              3
    +              1
    +            
    +            
    +              SOFC
    +              Start of frame flag clear
    +              1
    +              1
    +            
    +          
    +        
    +        
    +          RAM_COM0
    +          RAM_COM0
    +          display memory
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              S30
    +              S30
    +              30
    +              1
    +            
    +            
    +              S29
    +              S29
    +              29
    +              1
    +            
    +            
    +              S28
    +              S28
    +              28
    +              1
    +            
    +            
    +              S27
    +              S27
    +              27
    +              1
    +            
    +            
    +              S26
    +              S26
    +              26
    +              1
    +            
    +            
    +              S25
    +              S25
    +              25
    +              1
    +            
    +            
    +              S24
    +              S24
    +              24
    +              1
    +            
    +            
    +              S23
    +              S23
    +              23
    +              1
    +            
    +            
    +              S22
    +              S22
    +              22
    +              1
    +            
    +            
    +              S21
    +              S21
    +              21
    +              1
    +            
    +            
    +              S20
    +              S20
    +              20
    +              1
    +            
    +            
    +              S19
    +              S19
    +              19
    +              1
    +            
    +            
    +              S18
    +              S18
    +              18
    +              1
    +            
    +            
    +              S17
    +              S17
    +              17
    +              1
    +            
    +            
    +              S16
    +              S16
    +              16
    +              1
    +            
    +            
    +              S15
    +              S15
    +              15
    +              1
    +            
    +            
    +              S14
    +              S14
    +              14
    +              1
    +            
    +            
    +              S13
    +              S13
    +              13
    +              1
    +            
    +            
    +              S12
    +              S12
    +              12
    +              1
    +            
    +            
    +              S11
    +              S11
    +              11
    +              1
    +            
    +            
    +              S10
    +              S10
    +              10
    +              1
    +            
    +            
    +              S09
    +              S09
    +              9
    +              1
    +            
    +            
    +              S08
    +              S08
    +              8
    +              1
    +            
    +            
    +              S07
    +              S07
    +              7
    +              1
    +            
    +            
    +              S06
    +              S06
    +              6
    +              1
    +            
    +            
    +              S05
    +              S05
    +              5
    +              1
    +            
    +            
    +              S04
    +              S04
    +              4
    +              1
    +            
    +            
    +              S03
    +              S03
    +              3
    +              1
    +            
    +            
    +              S02
    +              S02
    +              2
    +              1
    +            
    +            
    +              S01
    +              S01
    +              1
    +              1
    +            
    +            
    +              S00
    +              S00
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          RAM_COM1
    +          RAM_COM1
    +          display memory
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              S31
    +              S31
    +              31
    +              1
    +            
    +            
    +              S30
    +              S30
    +              30
    +              1
    +            
    +            
    +              S29
    +              S29
    +              29
    +              1
    +            
    +            
    +              S28
    +              S28
    +              28
    +              1
    +            
    +            
    +              S27
    +              S27
    +              27
    +              1
    +            
    +            
    +              S26
    +              S26
    +              26
    +              1
    +            
    +            
    +              S25
    +              S25
    +              25
    +              1
    +            
    +            
    +              S24
    +              S24
    +              24
    +              1
    +            
    +            
    +              S23
    +              S23
    +              23
    +              1
    +            
    +            
    +              S22
    +              S22
    +              22
    +              1
    +            
    +            
    +              S21
    +              S21
    +              21
    +              1
    +            
    +            
    +              S20
    +              S20
    +              20
    +              1
    +            
    +            
    +              S19
    +              S19
    +              19
    +              1
    +            
    +            
    +              S18
    +              S18
    +              18
    +              1
    +            
    +            
    +              S17
    +              S17
    +              17
    +              1
    +            
    +            
    +              S16
    +              S16
    +              16
    +              1
    +            
    +            
    +              S15
    +              S15
    +              15
    +              1
    +            
    +            
    +              S14
    +              S14
    +              14
    +              1
    +            
    +            
    +              S13
    +              S13
    +              13
    +              1
    +            
    +            
    +              S12
    +              S12
    +              12
    +              1
    +            
    +            
    +              S11
    +              S11
    +              11
    +              1
    +            
    +            
    +              S10
    +              S10
    +              10
    +              1
    +            
    +            
    +              S09
    +              S09
    +              9
    +              1
    +            
    +            
    +              S08
    +              S08
    +              8
    +              1
    +            
    +            
    +              S07
    +              S07
    +              7
    +              1
    +            
    +            
    +              S06
    +              S06
    +              6
    +              1
    +            
    +            
    +              S05
    +              S05
    +              5
    +              1
    +            
    +            
    +              S04
    +              S04
    +              4
    +              1
    +            
    +            
    +              S03
    +              S03
    +              3
    +              1
    +            
    +            
    +              S02
    +              S02
    +              2
    +              1
    +            
    +            
    +              S01
    +              S01
    +              1
    +              1
    +            
    +            
    +              S00
    +              S00
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          RAM_COM2
    +          RAM_COM2
    +          display memory
    +          0x24
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              S31
    +              S31
    +              31
    +              1
    +            
    +            
    +              S30
    +              S30
    +              30
    +              1
    +            
    +            
    +              S29
    +              S29
    +              29
    +              1
    +            
    +            
    +              S28
    +              S28
    +              28
    +              1
    +            
    +            
    +              S27
    +              S27
    +              27
    +              1
    +            
    +            
    +              S26
    +              S26
    +              26
    +              1
    +            
    +            
    +              S25
    +              S25
    +              25
    +              1
    +            
    +            
    +              S24
    +              S24
    +              24
    +              1
    +            
    +            
    +              S23
    +              S23
    +              23
    +              1
    +            
    +            
    +              S22
    +              S22
    +              22
    +              1
    +            
    +            
    +              S21
    +              S21
    +              21
    +              1
    +            
    +            
    +              S20
    +              S20
    +              20
    +              1
    +            
    +            
    +              S19
    +              S19
    +              19
    +              1
    +            
    +            
    +              S18
    +              S18
    +              18
    +              1
    +            
    +            
    +              S17
    +              S17
    +              17
    +              1
    +            
    +            
    +              S16
    +              S16
    +              16
    +              1
    +            
    +            
    +              S15
    +              S15
    +              15
    +              1
    +            
    +            
    +              S14
    +              S14
    +              14
    +              1
    +            
    +            
    +              S13
    +              S13
    +              13
    +              1
    +            
    +            
    +              S12
    +              S12
    +              12
    +              1
    +            
    +            
    +              S11
    +              S11
    +              11
    +              1
    +            
    +            
    +              S10
    +              S10
    +              10
    +              1
    +            
    +            
    +              S09
    +              S09
    +              9
    +              1
    +            
    +            
    +              S08
    +              S08
    +              8
    +              1
    +            
    +            
    +              S07
    +              S07
    +              7
    +              1
    +            
    +            
    +              S06
    +              S06
    +              6
    +              1
    +            
    +            
    +              S05
    +              S05
    +              5
    +              1
    +            
    +            
    +              S04
    +              S04
    +              4
    +              1
    +            
    +            
    +              S03
    +              S03
    +              3
    +              1
    +            
    +            
    +              S02
    +              S02
    +              2
    +              1
    +            
    +            
    +              S01
    +              S01
    +              1
    +              1
    +            
    +            
    +              S00
    +              S00
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          RAM_COM3
    +          RAM_COM3
    +          display memory
    +          0x2C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              S31
    +              S31
    +              31
    +              1
    +            
    +            
    +              S30
    +              S30
    +              30
    +              1
    +            
    +            
    +              S29
    +              S29
    +              29
    +              1
    +            
    +            
    +              S28
    +              S28
    +              28
    +              1
    +            
    +            
    +              S27
    +              S27
    +              27
    +              1
    +            
    +            
    +              S26
    +              S26
    +              26
    +              1
    +            
    +            
    +              S25
    +              S25
    +              25
    +              1
    +            
    +            
    +              S24
    +              S24
    +              24
    +              1
    +            
    +            
    +              S23
    +              S23
    +              23
    +              1
    +            
    +            
    +              S22
    +              S22
    +              22
    +              1
    +            
    +            
    +              S21
    +              S21
    +              21
    +              1
    +            
    +            
    +              S20
    +              S20
    +              20
    +              1
    +            
    +            
    +              S19
    +              S19
    +              19
    +              1
    +            
    +            
    +              S18
    +              S18
    +              18
    +              1
    +            
    +            
    +              S17
    +              S17
    +              17
    +              1
    +            
    +            
    +              S16
    +              S16
    +              16
    +              1
    +            
    +            
    +              S15
    +              S15
    +              15
    +              1
    +            
    +            
    +              S14
    +              S14
    +              14
    +              1
    +            
    +            
    +              S13
    +              S13
    +              13
    +              1
    +            
    +            
    +              S12
    +              S12
    +              12
    +              1
    +            
    +            
    +              S11
    +              S11
    +              11
    +              1
    +            
    +            
    +              S10
    +              S10
    +              10
    +              1
    +            
    +            
    +              S09
    +              S09
    +              9
    +              1
    +            
    +            
    +              S08
    +              S08
    +              8
    +              1
    +            
    +            
    +              S07
    +              S07
    +              7
    +              1
    +            
    +            
    +              S06
    +              S06
    +              6
    +              1
    +            
    +            
    +              S05
    +              S05
    +              5
    +              1
    +            
    +            
    +              S04
    +              S04
    +              4
    +              1
    +            
    +            
    +              S03
    +              S03
    +              3
    +              1
    +            
    +            
    +              S02
    +              S02
    +              2
    +              1
    +            
    +            
    +              S01
    +              S01
    +              1
    +              1
    +            
    +            
    +              S00
    +              S00
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          RAM_COM4
    +          RAM_COM4
    +          display memory
    +          0x34
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              S31
    +              S31
    +              31
    +              1
    +            
    +            
    +              S30
    +              S30
    +              30
    +              1
    +            
    +            
    +              S29
    +              S29
    +              29
    +              1
    +            
    +            
    +              S28
    +              S28
    +              28
    +              1
    +            
    +            
    +              S27
    +              S27
    +              27
    +              1
    +            
    +            
    +              S26
    +              S26
    +              26
    +              1
    +            
    +            
    +              S25
    +              S25
    +              25
    +              1
    +            
    +            
    +              S24
    +              S24
    +              24
    +              1
    +            
    +            
    +              S23
    +              S23
    +              23
    +              1
    +            
    +            
    +              S22
    +              S22
    +              22
    +              1
    +            
    +            
    +              S21
    +              S21
    +              21
    +              1
    +            
    +            
    +              S20
    +              S20
    +              20
    +              1
    +            
    +            
    +              S19
    +              S19
    +              19
    +              1
    +            
    +            
    +              S18
    +              S18
    +              18
    +              1
    +            
    +            
    +              S17
    +              S17
    +              17
    +              1
    +            
    +            
    +              S16
    +              S16
    +              16
    +              1
    +            
    +            
    +              S15
    +              S15
    +              15
    +              1
    +            
    +            
    +              S14
    +              S14
    +              14
    +              1
    +            
    +            
    +              S13
    +              S13
    +              13
    +              1
    +            
    +            
    +              S12
    +              S12
    +              12
    +              1
    +            
    +            
    +              S11
    +              S11
    +              11
    +              1
    +            
    +            
    +              S10
    +              S10
    +              10
    +              1
    +            
    +            
    +              S09
    +              S09
    +              9
    +              1
    +            
    +            
    +              S08
    +              S08
    +              8
    +              1
    +            
    +            
    +              S07
    +              S07
    +              7
    +              1
    +            
    +            
    +              S06
    +              S06
    +              6
    +              1
    +            
    +            
    +              S05
    +              S05
    +              5
    +              1
    +            
    +            
    +              S04
    +              S04
    +              4
    +              1
    +            
    +            
    +              S03
    +              S03
    +              3
    +              1
    +            
    +            
    +              S02
    +              S02
    +              2
    +              1
    +            
    +            
    +              S01
    +              S01
    +              1
    +              1
    +            
    +            
    +              S00
    +              S00
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          RAM_COM5
    +          RAM_COM5
    +          display memory
    +          0x3C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              S31
    +              S31
    +              31
    +              1
    +            
    +            
    +              S30
    +              S30
    +              30
    +              1
    +            
    +            
    +              S29
    +              S29
    +              29
    +              1
    +            
    +            
    +              S28
    +              S28
    +              28
    +              1
    +            
    +            
    +              S27
    +              S27
    +              27
    +              1
    +            
    +            
    +              S26
    +              S26
    +              26
    +              1
    +            
    +            
    +              S25
    +              S25
    +              25
    +              1
    +            
    +            
    +              S24
    +              S24
    +              24
    +              1
    +            
    +            
    +              S23
    +              S23
    +              23
    +              1
    +            
    +            
    +              S22
    +              S22
    +              22
    +              1
    +            
    +            
    +              S21
    +              S21
    +              21
    +              1
    +            
    +            
    +              S20
    +              S20
    +              20
    +              1
    +            
    +            
    +              S19
    +              S19
    +              19
    +              1
    +            
    +            
    +              S18
    +              S18
    +              18
    +              1
    +            
    +            
    +              S17
    +              S17
    +              17
    +              1
    +            
    +            
    +              S16
    +              S16
    +              16
    +              1
    +            
    +            
    +              S15
    +              S15
    +              15
    +              1
    +            
    +            
    +              S14
    +              S14
    +              14
    +              1
    +            
    +            
    +              S13
    +              S13
    +              13
    +              1
    +            
    +            
    +              S12
    +              S12
    +              12
    +              1
    +            
    +            
    +              S11
    +              S11
    +              11
    +              1
    +            
    +            
    +              S10
    +              S10
    +              10
    +              1
    +            
    +            
    +              S09
    +              S09
    +              9
    +              1
    +            
    +            
    +              S08
    +              S08
    +              8
    +              1
    +            
    +            
    +              S07
    +              S07
    +              7
    +              1
    +            
    +            
    +              S06
    +              S06
    +              6
    +              1
    +            
    +            
    +              S05
    +              S05
    +              5
    +              1
    +            
    +            
    +              S04
    +              S04
    +              4
    +              1
    +            
    +            
    +              S03
    +              S03
    +              3
    +              1
    +            
    +            
    +              S02
    +              S02
    +              2
    +              1
    +            
    +            
    +              S01
    +              S01
    +              1
    +              1
    +            
    +            
    +              S00
    +              S00
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          RAM_COM6
    +          RAM_COM6
    +          display memory
    +          0x44
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              S31
    +              S31
    +              31
    +              1
    +            
    +            
    +              S30
    +              S30
    +              30
    +              1
    +            
    +            
    +              S29
    +              S29
    +              29
    +              1
    +            
    +            
    +              S28
    +              S28
    +              28
    +              1
    +            
    +            
    +              S27
    +              S27
    +              27
    +              1
    +            
    +            
    +              S26
    +              S26
    +              26
    +              1
    +            
    +            
    +              S25
    +              S25
    +              25
    +              1
    +            
    +            
    +              S24
    +              S24
    +              24
    +              1
    +            
    +            
    +              S23
    +              S23
    +              23
    +              1
    +            
    +            
    +              S22
    +              S22
    +              22
    +              1
    +            
    +            
    +              S21
    +              S21
    +              21
    +              1
    +            
    +            
    +              S20
    +              S20
    +              20
    +              1
    +            
    +            
    +              S19
    +              S19
    +              19
    +              1
    +            
    +            
    +              S18
    +              S18
    +              18
    +              1
    +            
    +            
    +              S17
    +              S17
    +              17
    +              1
    +            
    +            
    +              S16
    +              S16
    +              16
    +              1
    +            
    +            
    +              S15
    +              S15
    +              15
    +              1
    +            
    +            
    +              S14
    +              S14
    +              14
    +              1
    +            
    +            
    +              S13
    +              S13
    +              13
    +              1
    +            
    +            
    +              S12
    +              S12
    +              12
    +              1
    +            
    +            
    +              S11
    +              S11
    +              11
    +              1
    +            
    +            
    +              S10
    +              S10
    +              10
    +              1
    +            
    +            
    +              S09
    +              S09
    +              9
    +              1
    +            
    +            
    +              S08
    +              S08
    +              8
    +              1
    +            
    +            
    +              S07
    +              S07
    +              7
    +              1
    +            
    +            
    +              S06
    +              S06
    +              6
    +              1
    +            
    +            
    +              S05
    +              S05
    +              5
    +              1
    +            
    +            
    +              S04
    +              S04
    +              4
    +              1
    +            
    +            
    +              S03
    +              S03
    +              3
    +              1
    +            
    +            
    +              S02
    +              S02
    +              2
    +              1
    +            
    +            
    +              S01
    +              S01
    +              1
    +              1
    +            
    +            
    +              S00
    +              S00
    +              0
    +              1
    +            
    +          
    +        
    +        
    +          RAM_COM7
    +          RAM_COM7
    +          display memory
    +          0x4C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              S31
    +              S31
    +              31
    +              1
    +            
    +            
    +              S30
    +              S30
    +              30
    +              1
    +            
    +            
    +              S29
    +              S29
    +              29
    +              1
    +            
    +            
    +              S28
    +              S28
    +              28
    +              1
    +            
    +            
    +              S27
    +              S27
    +              27
    +              1
    +            
    +            
    +              S26
    +              S26
    +              26
    +              1
    +            
    +            
    +              S25
    +              S25
    +              25
    +              1
    +            
    +            
    +              S24
    +              S24
    +              24
    +              1
    +            
    +            
    +              S23
    +              S23
    +              23
    +              1
    +            
    +            
    +              S22
    +              S22
    +              22
    +              1
    +            
    +            
    +              S21
    +              S21
    +              21
    +              1
    +            
    +            
    +              S20
    +              S20
    +              20
    +              1
    +            
    +            
    +              S19
    +              S19
    +              19
    +              1
    +            
    +            
    +              S18
    +              S18
    +              18
    +              1
    +            
    +            
    +              S17
    +              S17
    +              17
    +              1
    +            
    +            
    +              S16
    +              S16
    +              16
    +              1
    +            
    +            
    +              S15
    +              S15
    +              15
    +              1
    +            
    +            
    +              S14
    +              S14
    +              14
    +              1
    +            
    +            
    +              S13
    +              S13
    +              13
    +              1
    +            
    +            
    +              S12
    +              S12
    +              12
    +              1
    +            
    +            
    +              S11
    +              S11
    +              11
    +              1
    +            
    +            
    +              S10
    +              S10
    +              10
    +              1
    +            
    +            
    +              S09
    +              S09
    +              9
    +              1
    +            
    +            
    +              S08
    +              S08
    +              8
    +              1
    +            
    +            
    +              S07
    +              S07
    +              7
    +              1
    +            
    +            
    +              S06
    +              S06
    +              6
    +              1
    +            
    +            
    +              S05
    +              S05
    +              5
    +              1
    +            
    +            
    +              S04
    +              S04
    +              4
    +              1
    +            
    +            
    +              S03
    +              S03
    +              3
    +              1
    +            
    +            
    +              S02
    +              S02
    +              2
    +              1
    +            
    +            
    +              S01
    +              S01
    +              1
    +              1
    +            
    +            
    +              S00
    +              S00
    +              0
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      MPU
    +      Memory protection unit
    +      MPU
    +      0xE000ED90
    +      
    +        0x0
    +        0x15
    +        registers
    +      
    +      
    +        
    +          MPU_TYPER
    +          MPU_TYPER
    +          MPU type register
    +          0x0
    +          0x20
    +          read-only
    +          0X00000800
    +          
    +            
    +              SEPARATE
    +              Separate flag
    +              0
    +              1
    +            
    +            
    +              DREGION
    +              Number of MPU data regions
    +              8
    +              8
    +            
    +            
    +              IREGION
    +              Number of MPU instruction
    +              regions
    +              16
    +              8
    +            
    +          
    +        
    +        
    +          MPU_CTRL
    +          MPU_CTRL
    +          MPU control register
    +          0x4
    +          0x20
    +          read-only
    +          0X00000000
    +          
    +            
    +              ENABLE
    +              Enables the MPU
    +              0
    +              1
    +            
    +            
    +              HFNMIENA
    +              Enables the operation of MPU during hard
    +              fault
    +              1
    +              1
    +            
    +            
    +              PRIVDEFENA
    +              Enable priviliged software access to
    +              default memory map
    +              2
    +              1
    +            
    +          
    +        
    +        
    +          MPU_RNR
    +          MPU_RNR
    +          MPU region number register
    +          0x8
    +          0x20
    +          read-write
    +          0X00000000
    +          
    +            
    +              REGION
    +              MPU region
    +              0
    +              8
    +            
    +          
    +        
    +        
    +          MPU_RBAR
    +          MPU_RBAR
    +          MPU region base address
    +          register
    +          0xC
    +          0x20
    +          read-write
    +          0X00000000
    +          
    +            
    +              REGION
    +              MPU region field
    +              0
    +              4
    +            
    +            
    +              VALID
    +              MPU region number valid
    +              4
    +              1
    +            
    +            
    +              ADDR
    +              Region base address field
    +              5
    +              27
    +            
    +          
    +        
    +        
    +          MPU_RASR
    +          MPU_RASR
    +          MPU region attribute and size
    +          register
    +          0x10
    +          0x20
    +          read-write
    +          0X00000000
    +          
    +            
    +              ENABLE
    +              Region enable bit.
    +              0
    +              1
    +            
    +            
    +              SIZE
    +              Size of the MPU protection
    +              region
    +              1
    +              5
    +            
    +            
    +              SRD
    +              Subregion disable bits
    +              8
    +              8
    +            
    +            
    +              B
    +              memory attribute
    +              16
    +              1
    +            
    +            
    +              C
    +              memory attribute
    +              17
    +              1
    +            
    +            
    +              S
    +              Shareable memory attribute
    +              18
    +              1
    +            
    +            
    +              TEX
    +              memory attribute
    +              19
    +              3
    +            
    +            
    +              AP
    +              Access permission
    +              24
    +              3
    +            
    +            
    +              XN
    +              Instruction access disable
    +              bit
    +              28
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      STK
    +      SysTick timer
    +      STK
    +      0xE000E010
    +      
    +        0x0
    +        0x11
    +        registers
    +      
    +      
    +        
    +          CSR
    +          CSR
    +          SysTick control and status
    +          register
    +          0x0
    +          0x20
    +          read-write
    +          0X00000000
    +          
    +            
    +              ENABLE
    +              Counter enable
    +              0
    +              1
    +            
    +            
    +              TICKINT
    +              SysTick exception request
    +              enable
    +              1
    +              1
    +            
    +            
    +              CLKSOURCE
    +              Clock source selection
    +              2
    +              1
    +            
    +            
    +              COUNTFLAG
    +              COUNTFLAG
    +              16
    +              1
    +            
    +          
    +        
    +        
    +          RVR
    +          RVR
    +          SysTick reload value register
    +          0x4
    +          0x20
    +          read-write
    +          0X00000000
    +          
    +            
    +              RELOAD
    +              RELOAD value
    +              0
    +              24
    +            
    +          
    +        
    +        
    +          CVR
    +          CVR
    +          SysTick current value register
    +          0x8
    +          0x20
    +          read-write
    +          0X00000000
    +          
    +            
    +              CURRENT
    +              Current counter value
    +              0
    +              24
    +            
    +          
    +        
    +        
    +          CALIB
    +          CALIB
    +          SysTick calibration value
    +          register
    +          0xC
    +          0x20
    +          read-write
    +          0X00000000
    +          
    +            
    +              TENMS
    +              Calibration value
    +              0
    +              24
    +            
    +            
    +              SKEW
    +              SKEW flag: Indicates whether the TENMS
    +              value is exact
    +              30
    +              1
    +            
    +            
    +              NOREF
    +              NOREF flag. Reads as zero
    +              31
    +              1
    +            
    +          
    +        
    +      
    +    
    +    
    +      SCB
    +      System control block
    +      SCB
    +      0xE000ED00
    +      
    +        0x0
    +        0x41
    +        registers
    +      
    +      
    +        
    +          CPUID
    +          CPUID
    +          CPUID base register
    +          0x0
    +          0x20
    +          read-only
    +          0x410FC241
    +          
    +            
    +              Revision
    +              Revision number
    +              0
    +              4
    +            
    +            
    +              PartNo
    +              Part number of the
    +              processor
    +              4
    +              12
    +            
    +            
    +              Architecture
    +              Reads as 0xF
    +              16
    +              4
    +            
    +            
    +              Variant
    +              Variant number
    +              20
    +              4
    +            
    +            
    +              Implementer
    +              Implementer code
    +              24
    +              8
    +            
    +          
    +        
    +        
    +          ICSR
    +          ICSR
    +          Interrupt control and state
    +          register
    +          0x4
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              VECTACTIVE
    +              Active vector
    +              0
    +              9
    +            
    +            
    +              RETTOBASE
    +              Return to base level
    +              11
    +              1
    +            
    +            
    +              VECTPENDING
    +              Pending vector
    +              12
    +              7
    +            
    +            
    +              ISRPENDING
    +              Interrupt pending flag
    +              22
    +              1
    +            
    +            
    +              PENDSTCLR
    +              SysTick exception clear-pending
    +              bit
    +              25
    +              1
    +            
    +            
    +              PENDSTSET
    +              SysTick exception set-pending
    +              bit
    +              26
    +              1
    +            
    +            
    +              PENDSVCLR
    +              PendSV clear-pending bit
    +              27
    +              1
    +            
    +            
    +              PENDSVSET
    +              PendSV set-pending bit
    +              28
    +              1
    +            
    +            
    +              NMIPENDSET
    +              NMI set-pending bit.
    +              31
    +              1
    +            
    +          
    +        
    +        
    +          VTOR
    +          VTOR
    +          Vector table offset register
    +          0x8
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              TBLOFF
    +              Vector table base offset
    +              field
    +              7
    +              25
    +            
    +          
    +        
    +        
    +          AIRCR
    +          AIRCR
    +          Application interrupt and reset control
    +          register
    +          0xC
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              VECTCLRACTIVE
    +              VECTCLRACTIVE
    +              1
    +              1
    +            
    +            
    +              SYSRESETREQ
    +              SYSRESETREQ
    +              2
    +              1
    +            
    +            
    +              ENDIANESS
    +              ENDIANESS
    +              15
    +              1
    +            
    +            
    +              VECTKEYSTAT
    +              Register key
    +              16
    +              16
    +            
    +          
    +        
    +        
    +          SCR
    +          SCR
    +          System control register
    +          0x10
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              SLEEPONEXIT
    +              SLEEPONEXIT
    +              1
    +              1
    +            
    +            
    +              SLEEPDEEP
    +              SLEEPDEEP
    +              2
    +              1
    +            
    +            
    +              SEVEONPEND
    +              Send Event on Pending bit
    +              4
    +              1
    +            
    +          
    +        
    +        
    +          CCR
    +          CCR
    +          Configuration and control
    +          register
    +          0x14
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              NONBASETHRDENA
    +              Configures how the processor enters
    +              Thread mode
    +              0
    +              1
    +            
    +            
    +              USERSETMPEND
    +              USERSETMPEND
    +              1
    +              1
    +            
    +            
    +              UNALIGN__TRP
    +              UNALIGN_ TRP
    +              3
    +              1
    +            
    +            
    +              DIV_0_TRP
    +              DIV_0_TRP
    +              4
    +              1
    +            
    +            
    +              BFHFNMIGN
    +              BFHFNMIGN
    +              8
    +              1
    +            
    +            
    +              STKALIGN
    +              STKALIGN
    +              9
    +              1
    +            
    +          
    +        
    +        
    +          SHPR2
    +          SHPR2
    +          System handler priority
    +          registers
    +          0x1C
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_11
    +              Priority of system handler
    +              11
    +              24
    +              8
    +            
    +          
    +        
    +        
    +          SHPR3
    +          SHPR3
    +          System handler priority
    +          registers
    +          0x20
    +          0x20
    +          read-write
    +          0x00000000
    +          
    +            
    +              PRI_14
    +              Priority of system handler
    +              14
    +              16
    +              8
    +            
    +            
    +              PRI_15
    +              Priority of system handler
    +              15
    +              24
    +              8
    +            
    +          
    +        
    +      
    +    
    +  
    +
    
    From 01287dd68db70950b901c056f76453e767b0cfa0 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Sat, 23 Sep 2023 18:16:10 +0200
    Subject: [PATCH 213/286] Rough file architecture
    
    ---
     .github/workflows/build.yml            |   2 +
     .gitignore                             |   9 +-
     espressif-esp/blinky/blinky.zig        |  57 ++++++++
     build.zig => espressif-esp/build.zig   |   0
     espressif-esp/build.zig.zon            |  14 ++
     ezpkg.sh                               |  13 --
     generic/build.zig                      |  84 +++++++++++
     build.zig.zon => generic/build.zig.zon |   2 +-
     {src => generic/src}/blinky.zig        |   0
     {src => generic/src}/empty.zig         |   0
     gigadevice-gd32/build.zig              |  84 +++++++++++
     gigadevice-gd32/build.zig.zon          |  14 ++
     microchip-atmega/build.zig             |  84 +++++++++++
     microchip-atmega/build.zig.zon         |  14 ++
     nordic-nrf5x/README.adoc               |  11 ++
     nordic-nrf5x/build.zig                 |  84 +++++++++++
     nordic-nrf5x/build.zig.zon             |  14 ++
     nxp-lpc/build.zig                      |  84 +++++++++++
     nxp-lpc/build.zig.zon                  |  14 ++
     nxp-lpc/src/blinky.zig                 |   0
     rp2040/build.zig                       |  84 +++++++++++
     rp2040/build.zig.zon                   |  14 ++
     rp2040/scripts/hid_test.py             |  29 ++++
     rp2040/scripts/usb_device_loopback.py  |  48 +++++++
     rp2040/src/adc.zig                     |  40 ++++++
     rp2040/src/blinky.zig                  |  20 +++
     rp2040/src/blinky_core1.zig            |  28 ++++
     rp2040/src/flash_program.zig           |  81 +++++++++++
     rp2040/src/gpio_clk.zig                |  16 +++
     rp2040/src/i2c_bus_scan.zig            |  44 ++++++
     rp2040/src/pwm.zig                     |  23 +++
     rp2040/src/random.zig                  |  68 +++++++++
     rp2040/src/spi_master.zig              |  26 ++++
     rp2040/src/squarewave.zig              |  84 +++++++++++
     rp2040/src/uart.zig                    |  49 +++++++
     rp2040/src/usb_device.zig              | 172 +++++++++++++++++++++++
     rp2040/src/usb_hid.zig                 | 187 +++++++++++++++++++++++++
     rp2040/src/ws2812.zig                  |  94 +++++++++++++
     shell.nix                              |   9 --
     stmicro-stm32/build.zig                |  84 +++++++++++
     stmicro-stm32/build.zig.zon            |  14 ++
     41 files changed, 1773 insertions(+), 25 deletions(-)
     create mode 100644 espressif-esp/blinky/blinky.zig
     rename build.zig => espressif-esp/build.zig (100%)
     create mode 100644 espressif-esp/build.zig.zon
     delete mode 100755 ezpkg.sh
     create mode 100644 generic/build.zig
     rename build.zig.zon => generic/build.zig.zon (98%)
     rename {src => generic/src}/blinky.zig (100%)
     rename {src => generic/src}/empty.zig (100%)
     create mode 100644 gigadevice-gd32/build.zig
     create mode 100644 gigadevice-gd32/build.zig.zon
     create mode 100644 microchip-atmega/build.zig
     create mode 100644 microchip-atmega/build.zig.zon
     create mode 100644 nordic-nrf5x/README.adoc
     create mode 100644 nordic-nrf5x/build.zig
     create mode 100644 nordic-nrf5x/build.zig.zon
     create mode 100644 nxp-lpc/build.zig
     create mode 100644 nxp-lpc/build.zig.zon
     create mode 100644 nxp-lpc/src/blinky.zig
     create mode 100644 rp2040/build.zig
     create mode 100644 rp2040/build.zig.zon
     create mode 100755 rp2040/scripts/hid_test.py
     create mode 100755 rp2040/scripts/usb_device_loopback.py
     create mode 100644 rp2040/src/adc.zig
     create mode 100644 rp2040/src/blinky.zig
     create mode 100644 rp2040/src/blinky_core1.zig
     create mode 100644 rp2040/src/flash_program.zig
     create mode 100644 rp2040/src/gpio_clk.zig
     create mode 100644 rp2040/src/i2c_bus_scan.zig
     create mode 100644 rp2040/src/pwm.zig
     create mode 100644 rp2040/src/random.zig
     create mode 100644 rp2040/src/spi_master.zig
     create mode 100644 rp2040/src/squarewave.zig
     create mode 100644 rp2040/src/uart.zig
     create mode 100644 rp2040/src/usb_device.zig
     create mode 100644 rp2040/src/usb_hid.zig
     create mode 100644 rp2040/src/ws2812.zig
     delete mode 100644 shell.nix
     create mode 100644 stmicro-stm32/build.zig
     create mode 100644 stmicro-stm32/build.zig.zon
    
    diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
    index af725e66c..ee9f1bb00 100644
    --- a/.github/workflows/build.yml
    +++ b/.github/workflows/build.yml
    @@ -11,6 +11,7 @@ jobs:
         strategy:
           matrix:
             os: [windows-latest, macos-latest, ubuntu-latest]
    +        dir: espressif-esp  generic  gigadevice-gd32  microchip-atmega  nordic-nrf5x  nxp-lpc  rp2040  stmicro-stm32
         steps:
           - name: Checkout
             uses: actions/checkout@v2
    @@ -21,4 +22,5 @@ jobs:
               version: 0.11.0
     
           - name: Build examples
    +        working-directory: ${{ matrix.dir }}
             run: zig build
    diff --git a/.gitignore b/.gitignore
    index f975728be..585506141 100644
    --- a/.gitignore
    +++ b/.gitignore
    @@ -1,4 +1,9 @@
     zig-cache/
    -dev-scripts/
    -zig-out
    +zig-out/
    +
    +ezpkg.sh
    +
    +.vscode
    +
     .envrc
    +shell.nix
    diff --git a/espressif-esp/blinky/blinky.zig b/espressif-esp/blinky/blinky.zig
    new file mode 100644
    index 000000000..811b04894
    --- /dev/null
    +++ b/espressif-esp/blinky/blinky.zig
    @@ -0,0 +1,57 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +const peripherals = microzig.chip.peripherals;
    +const TIMG0 = peripherals.TIMG0;
    +const RTC_CNTL = peripherals.RTC_CNTL;
    +const INTERRUPT_CORE0 = peripherals.INTERRUPT_CORE0;
    +const GPIO = peripherals.GPIO;
    +
    +const dogfood: u32 = 0x50D83AA1;
    +const super_dogfood: u32 = 0x8F1D312A;
    +
    +pub fn main() !void {
    +    TIMG0.WDTWPROTECT.raw = dogfood;
    +    TIMG0.WDTCONFIG0.raw = 0;
    +    TIMG0.WDTWPROTECT.raw = 0;
    +
    +    RTC_CNTL.WDTWPROTECT.raw = dogfood;
    +    RTC_CNTL.WDTCONFIG0.raw = 0;
    +    RTC_CNTL.WDTWPROTECT.raw = 0;
    +
    +    RTC_CNTL.SWD_WPROTECT.raw = super_dogfood;
    +    RTC_CNTL.SWD_CONF.modify(.{ .SWD_DISABLE = 1 });
    +    RTC_CNTL.SWD_WPROTECT.raw = 0;
    +
    +    INTERRUPT_CORE0.CPU_INT_ENABLE.raw = 0;
    +
    +    microzig.hal.gpio.init(LED_R_PIN, .{
    +        .direction = .output,
    +        .direct_io = true,
    +    });
    +    microzig.hal.gpio.init(LED_G_PIN, .{
    +        .direction = .output,
    +        .direct_io = true,
    +    });
    +    microzig.hal.gpio.init(LED_B_PIN, .{
    +        .direction = .output,
    +        .direct_io = true,
    +    });
    +
    +    microzig.hal.uart.write(0, "Hello from Zig!\r\n");
    +
    +    while (true) {
    +        GPIO.OUT.modify(.{ .DATA_ORIG = (1 << LED_R_PIN) });
    +        microzig.hal.uart.write(0, "R");
    +        microzig.core.experimental.debug.busy_sleep(100_000);
    +        GPIO.OUT.modify(.{ .DATA_ORIG = (1 << LED_G_PIN) });
    +        microzig.hal.uart.write(0, "G");
    +        microzig.core.experimental.debug.busy_sleep(100_000);
    +        GPIO.OUT.modify(.{ .DATA_ORIG = (1 << LED_B_PIN) });
    +        microzig.hal.uart.write(0, "B");
    +        microzig.core.experimental.debug.busy_sleep(100_000);
    +    }
    +}
    +
    +const LED_R_PIN = 3; // GPIO
    +const LED_G_PIN = 16; // GPIO
    +const LED_B_PIN = 17; // GPIO
    diff --git a/build.zig b/espressif-esp/build.zig
    similarity index 100%
    rename from build.zig
    rename to espressif-esp/build.zig
    diff --git a/espressif-esp/build.zig.zon b/espressif-esp/build.zig.zon
    new file mode 100644
    index 000000000..a729ce616
    --- /dev/null
    +++ b/espressif-esp/build.zig.zon
    @@ -0,0 +1,14 @@
    +.{
    +    .name = "microzig-espressif-esp-examples",
    +    .version = "0.1.0",
    +    .dependencies = .{
    +        .microzig = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/c6c9ec4516f57638e751141085c9d76120990312.tar.gz",
    +            .hash = "1220af58bdaa721b8189f3a7adfda660517dd354463463388e96d69fe4ceccf80b92",
    +        },
    +        .esp = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/espressif-esp/archive/59b8ca028915c0d6224ec88dbf4db19afbb559c0.tar.gz",
    +            .hash = "1220f6e5f22416fdc63442cd8869fcaa35f9abf30d878ea3d80073176677dc6f8a65",
    +        },
    +    },
    +}
    diff --git a/ezpkg.sh b/ezpkg.sh
    deleted file mode 100755
    index caafa0365..000000000
    --- a/ezpkg.sh
    +++ /dev/null
    @@ -1,13 +0,0 @@
    -#!/bin/sh
    -
    -exec ezpkg \
    -    microzig=/home/felix/projects/zeg/microzig \
    -    microzig.uf2=/home/felix/projects/zeg/uf2 \
    -    microzig.regz=/home/felix/projects/zeg/regz \
    -    rp2040=/home/felix/projects/zeg/device-support-package/rp2040 \
    -    stm32=/home/felix/projects/zeg/device-support-package/stmicro-stm32 \
    -    lpc=/home/felix/projects/zeg/device-support-package/nxp-lpc \
    -    gd32=/home/felix/projects/zeg/device-support-package/gigadevice-gd32 \
    -    esp=/home/felix/projects/zeg/device-support-package/espressif-esp \
    -    nrf5x=/home/felix/projects/zeg/device-support-package/nordic-nrf5x \
    -    atmega=/home/felix/projects/zeg/device-support-package/microchip-atmega 
    \ No newline at end of file
    diff --git a/generic/build.zig b/generic/build.zig
    new file mode 100644
    index 000000000..406477261
    --- /dev/null
    +++ b/generic/build.zig
    @@ -0,0 +1,84 @@
    +const std = @import("std");
    +const rp2040 = @import("rp2040");
    +const stm32 = @import("stm32");
    +const lpc = @import("lpc");
    +const gd32 = @import("gd32");
    +const nrf5x = @import("nrf5x");
    +const esp = @import("esp");
    +const atmega = @import("atmega");
    +
    +pub fn build(b: *std.Build) void {
    +    const microzig = @import("microzig").init(b, "microzig");
    +    const optimize = b.standardOptimizeOption(.{});
    +
    +    const TargetDesc = struct {
    +        target: @import("microzig").Target,
    +        name: []const u8,
    +    };
    +
    +    const available_targets = [_]TargetDesc{
    +        // RP2040
    +        .{ .name = "pico", .target = rp2040.boards.raspberry_pi.pico },
    +        .{ .name = "rp2040-eth", .target = rp2040.boards.waveshare.rp2040_eth },
    +        .{ .name = "rp2040-plus-4m", .target = rp2040.boards.waveshare.rp2040_plus_4m },
    +        .{ .name = "rp2040-plus-16m", .target = rp2040.boards.waveshare.rp2040_plus_16m },
    +        .{ .name = "rp2040-matrix", .target = rp2040.boards.waveshare.rp2040_matrix },
    +
    +        // STM32
    +        .{ .name = "stm32f103x8", .target = stm32.chips.stm32f103x8 },
    +        .{ .name = "stm32f303vc", .target = stm32.chips.stm32f303vc },
    +        .{ .name = "stm32f407vg", .target = stm32.chips.stm32f407vg },
    +        .{ .name = "stm32f429zit6u", .target = stm32.chips.stm32f429zit6u },
    +        .{ .name = "stm32f3discovery", .target = stm32.boards.stm32f3discovery },
    +        .{ .name = "stm32f4discovery", .target = stm32.boards.stm32f4discovery },
    +        .{ .name = "stm3240geval", .target = stm32.boards.stm3240geval },
    +        .{ .name = "stm32f429idiscovery", .target = stm32.boards.stm32f429idiscovery },
    +
    +        // NXP LPC
    +        .{ .name = "lpc176x5x", .target = lpc.chips.lpc176x5x },
    +        .{ .name = "mbed-lpc1768", .target = lpc.boards.mbed.lpc1768 },
    +
    +        // GigaDevice GD32
    +        .{ .name = "gd32vf103xb", .target = gd32.chips.gd32vf103xb },
    +        .{ .name = "gd32vf103x8", .target = gd32.chips.gd32vf103x8 },
    +        .{ .name = "sipeed-longan_nano", .target = gd32.boards.sipeed.longan_nano },
    +
    +        // Nordic Nrf5x
    +        .{ .name = "nrf52832", .target = nrf5x.chips.nrf52832 },
    +        .{ .name = "nrf52840", .target = nrf5x.chips.nrf52840 },
    +        .{ .name = "nrf52840-dongle", .target = nrf5x.boards.nordic.nRF52840_Dongle }, // TODO: Add support for DFU files!
    +
    +        // RISC-V Espressif ESP
    +        .{ .name = "esp32-c3", .target = esp.chips.esp32_c3 }, // TODO: Add support for Espressif Update Binaries
    +
    +        // Microchip ATmega
    +        // TODO: Fix compiler bugs
    +        // - https://github.com/ziglang/zig/issues/17219
    +        // .{ .name = "atmega328p", .target = atmega.chips.atmega328p },
    +        // .{ .name = "arduino-nano", .target = atmega.boards.arduino.nano },
    +        // .{ .name = "arduino-uno-rev3", .target = atmega.boards.arduino.uno_rev3 },
    +    };
    +
    +    for (available_targets) |dest| {
    +        // `addFirmware` basically works like addExecutable, but takes a
    +        // `microzig.Target` for target instead of a `std.zig.CrossTarget`.
    +        //
    +        // The target will convey all necessary information on the chip,
    +        // cpu and potentially the board as well.
    +        const firmware = microzig.addFirmware(b, .{
    +            .name = b.fmt("empty-{s}", .{dest.name}),
    +            .target = dest.target,
    +            .optimize = optimize,
    +            .source_file = .{ .path = "src/empty.zig" },
    +        });
    +
    +        // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()`
    +        // and allows installing the firmware as a typical firmware file.
    +        //
    +        // This will also install into `$prefix/firmware` instead of `$prefix/bin`.
    +        microzig.installFirmware(b, firmware, .{});
    +
    +        // For debugging, we also always install the firmware as an ELF file
    +        microzig.installFirmware(b, firmware, .{ .format = .elf });
    +    }
    +}
    diff --git a/build.zig.zon b/generic/build.zig.zon
    similarity index 98%
    rename from build.zig.zon
    rename to generic/build.zig.zon
    index 716625979..fba280d24 100644
    --- a/build.zig.zon
    +++ b/generic/build.zig.zon
    @@ -1,5 +1,5 @@
     .{
    -    .name = "microzig-examples",
    +    .name = "microzig-generic-examples",
         .version = "0.1.0",
         .dependencies = .{
             .microzig = .{
    diff --git a/src/blinky.zig b/generic/src/blinky.zig
    similarity index 100%
    rename from src/blinky.zig
    rename to generic/src/blinky.zig
    diff --git a/src/empty.zig b/generic/src/empty.zig
    similarity index 100%
    rename from src/empty.zig
    rename to generic/src/empty.zig
    diff --git a/gigadevice-gd32/build.zig b/gigadevice-gd32/build.zig
    new file mode 100644
    index 000000000..406477261
    --- /dev/null
    +++ b/gigadevice-gd32/build.zig
    @@ -0,0 +1,84 @@
    +const std = @import("std");
    +const rp2040 = @import("rp2040");
    +const stm32 = @import("stm32");
    +const lpc = @import("lpc");
    +const gd32 = @import("gd32");
    +const nrf5x = @import("nrf5x");
    +const esp = @import("esp");
    +const atmega = @import("atmega");
    +
    +pub fn build(b: *std.Build) void {
    +    const microzig = @import("microzig").init(b, "microzig");
    +    const optimize = b.standardOptimizeOption(.{});
    +
    +    const TargetDesc = struct {
    +        target: @import("microzig").Target,
    +        name: []const u8,
    +    };
    +
    +    const available_targets = [_]TargetDesc{
    +        // RP2040
    +        .{ .name = "pico", .target = rp2040.boards.raspberry_pi.pico },
    +        .{ .name = "rp2040-eth", .target = rp2040.boards.waveshare.rp2040_eth },
    +        .{ .name = "rp2040-plus-4m", .target = rp2040.boards.waveshare.rp2040_plus_4m },
    +        .{ .name = "rp2040-plus-16m", .target = rp2040.boards.waveshare.rp2040_plus_16m },
    +        .{ .name = "rp2040-matrix", .target = rp2040.boards.waveshare.rp2040_matrix },
    +
    +        // STM32
    +        .{ .name = "stm32f103x8", .target = stm32.chips.stm32f103x8 },
    +        .{ .name = "stm32f303vc", .target = stm32.chips.stm32f303vc },
    +        .{ .name = "stm32f407vg", .target = stm32.chips.stm32f407vg },
    +        .{ .name = "stm32f429zit6u", .target = stm32.chips.stm32f429zit6u },
    +        .{ .name = "stm32f3discovery", .target = stm32.boards.stm32f3discovery },
    +        .{ .name = "stm32f4discovery", .target = stm32.boards.stm32f4discovery },
    +        .{ .name = "stm3240geval", .target = stm32.boards.stm3240geval },
    +        .{ .name = "stm32f429idiscovery", .target = stm32.boards.stm32f429idiscovery },
    +
    +        // NXP LPC
    +        .{ .name = "lpc176x5x", .target = lpc.chips.lpc176x5x },
    +        .{ .name = "mbed-lpc1768", .target = lpc.boards.mbed.lpc1768 },
    +
    +        // GigaDevice GD32
    +        .{ .name = "gd32vf103xb", .target = gd32.chips.gd32vf103xb },
    +        .{ .name = "gd32vf103x8", .target = gd32.chips.gd32vf103x8 },
    +        .{ .name = "sipeed-longan_nano", .target = gd32.boards.sipeed.longan_nano },
    +
    +        // Nordic Nrf5x
    +        .{ .name = "nrf52832", .target = nrf5x.chips.nrf52832 },
    +        .{ .name = "nrf52840", .target = nrf5x.chips.nrf52840 },
    +        .{ .name = "nrf52840-dongle", .target = nrf5x.boards.nordic.nRF52840_Dongle }, // TODO: Add support for DFU files!
    +
    +        // RISC-V Espressif ESP
    +        .{ .name = "esp32-c3", .target = esp.chips.esp32_c3 }, // TODO: Add support for Espressif Update Binaries
    +
    +        // Microchip ATmega
    +        // TODO: Fix compiler bugs
    +        // - https://github.com/ziglang/zig/issues/17219
    +        // .{ .name = "atmega328p", .target = atmega.chips.atmega328p },
    +        // .{ .name = "arduino-nano", .target = atmega.boards.arduino.nano },
    +        // .{ .name = "arduino-uno-rev3", .target = atmega.boards.arduino.uno_rev3 },
    +    };
    +
    +    for (available_targets) |dest| {
    +        // `addFirmware` basically works like addExecutable, but takes a
    +        // `microzig.Target` for target instead of a `std.zig.CrossTarget`.
    +        //
    +        // The target will convey all necessary information on the chip,
    +        // cpu and potentially the board as well.
    +        const firmware = microzig.addFirmware(b, .{
    +            .name = b.fmt("empty-{s}", .{dest.name}),
    +            .target = dest.target,
    +            .optimize = optimize,
    +            .source_file = .{ .path = "src/empty.zig" },
    +        });
    +
    +        // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()`
    +        // and allows installing the firmware as a typical firmware file.
    +        //
    +        // This will also install into `$prefix/firmware` instead of `$prefix/bin`.
    +        microzig.installFirmware(b, firmware, .{});
    +
    +        // For debugging, we also always install the firmware as an ELF file
    +        microzig.installFirmware(b, firmware, .{ .format = .elf });
    +    }
    +}
    diff --git a/gigadevice-gd32/build.zig.zon b/gigadevice-gd32/build.zig.zon
    new file mode 100644
    index 000000000..2cfeaae93
    --- /dev/null
    +++ b/gigadevice-gd32/build.zig.zon
    @@ -0,0 +1,14 @@
    +.{
    +    .name = "microzig-gigadevice-gd32-examples",
    +    .version = "0.1.0",
    +    .dependencies = .{
    +        .microzig = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/c6c9ec4516f57638e751141085c9d76120990312.tar.gz",
    +            .hash = "1220af58bdaa721b8189f3a7adfda660517dd354463463388e96d69fe4ceccf80b92",
    +        },
    +        .gd32 = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/gigadevice-gd32/archive/9324753cc3b8e7afe83fcda085bcfe76681a3be3.tar.gz",
    +            .hash = "122043ff4dcbc342f25dbb936b0d9eaa701ac3509e2cbe6764be37b90d31c7a385d0",
    +        },
    +    },
    +}
    diff --git a/microchip-atmega/build.zig b/microchip-atmega/build.zig
    new file mode 100644
    index 000000000..406477261
    --- /dev/null
    +++ b/microchip-atmega/build.zig
    @@ -0,0 +1,84 @@
    +const std = @import("std");
    +const rp2040 = @import("rp2040");
    +const stm32 = @import("stm32");
    +const lpc = @import("lpc");
    +const gd32 = @import("gd32");
    +const nrf5x = @import("nrf5x");
    +const esp = @import("esp");
    +const atmega = @import("atmega");
    +
    +pub fn build(b: *std.Build) void {
    +    const microzig = @import("microzig").init(b, "microzig");
    +    const optimize = b.standardOptimizeOption(.{});
    +
    +    const TargetDesc = struct {
    +        target: @import("microzig").Target,
    +        name: []const u8,
    +    };
    +
    +    const available_targets = [_]TargetDesc{
    +        // RP2040
    +        .{ .name = "pico", .target = rp2040.boards.raspberry_pi.pico },
    +        .{ .name = "rp2040-eth", .target = rp2040.boards.waveshare.rp2040_eth },
    +        .{ .name = "rp2040-plus-4m", .target = rp2040.boards.waveshare.rp2040_plus_4m },
    +        .{ .name = "rp2040-plus-16m", .target = rp2040.boards.waveshare.rp2040_plus_16m },
    +        .{ .name = "rp2040-matrix", .target = rp2040.boards.waveshare.rp2040_matrix },
    +
    +        // STM32
    +        .{ .name = "stm32f103x8", .target = stm32.chips.stm32f103x8 },
    +        .{ .name = "stm32f303vc", .target = stm32.chips.stm32f303vc },
    +        .{ .name = "stm32f407vg", .target = stm32.chips.stm32f407vg },
    +        .{ .name = "stm32f429zit6u", .target = stm32.chips.stm32f429zit6u },
    +        .{ .name = "stm32f3discovery", .target = stm32.boards.stm32f3discovery },
    +        .{ .name = "stm32f4discovery", .target = stm32.boards.stm32f4discovery },
    +        .{ .name = "stm3240geval", .target = stm32.boards.stm3240geval },
    +        .{ .name = "stm32f429idiscovery", .target = stm32.boards.stm32f429idiscovery },
    +
    +        // NXP LPC
    +        .{ .name = "lpc176x5x", .target = lpc.chips.lpc176x5x },
    +        .{ .name = "mbed-lpc1768", .target = lpc.boards.mbed.lpc1768 },
    +
    +        // GigaDevice GD32
    +        .{ .name = "gd32vf103xb", .target = gd32.chips.gd32vf103xb },
    +        .{ .name = "gd32vf103x8", .target = gd32.chips.gd32vf103x8 },
    +        .{ .name = "sipeed-longan_nano", .target = gd32.boards.sipeed.longan_nano },
    +
    +        // Nordic Nrf5x
    +        .{ .name = "nrf52832", .target = nrf5x.chips.nrf52832 },
    +        .{ .name = "nrf52840", .target = nrf5x.chips.nrf52840 },
    +        .{ .name = "nrf52840-dongle", .target = nrf5x.boards.nordic.nRF52840_Dongle }, // TODO: Add support for DFU files!
    +
    +        // RISC-V Espressif ESP
    +        .{ .name = "esp32-c3", .target = esp.chips.esp32_c3 }, // TODO: Add support for Espressif Update Binaries
    +
    +        // Microchip ATmega
    +        // TODO: Fix compiler bugs
    +        // - https://github.com/ziglang/zig/issues/17219
    +        // .{ .name = "atmega328p", .target = atmega.chips.atmega328p },
    +        // .{ .name = "arduino-nano", .target = atmega.boards.arduino.nano },
    +        // .{ .name = "arduino-uno-rev3", .target = atmega.boards.arduino.uno_rev3 },
    +    };
    +
    +    for (available_targets) |dest| {
    +        // `addFirmware` basically works like addExecutable, but takes a
    +        // `microzig.Target` for target instead of a `std.zig.CrossTarget`.
    +        //
    +        // The target will convey all necessary information on the chip,
    +        // cpu and potentially the board as well.
    +        const firmware = microzig.addFirmware(b, .{
    +            .name = b.fmt("empty-{s}", .{dest.name}),
    +            .target = dest.target,
    +            .optimize = optimize,
    +            .source_file = .{ .path = "src/empty.zig" },
    +        });
    +
    +        // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()`
    +        // and allows installing the firmware as a typical firmware file.
    +        //
    +        // This will also install into `$prefix/firmware` instead of `$prefix/bin`.
    +        microzig.installFirmware(b, firmware, .{});
    +
    +        // For debugging, we also always install the firmware as an ELF file
    +        microzig.installFirmware(b, firmware, .{ .format = .elf });
    +    }
    +}
    diff --git a/microchip-atmega/build.zig.zon b/microchip-atmega/build.zig.zon
    new file mode 100644
    index 000000000..f3c3bdfc1
    --- /dev/null
    +++ b/microchip-atmega/build.zig.zon
    @@ -0,0 +1,14 @@
    +.{
    +    .name = "microzig-microchip-atmega-examples",
    +    .version = "0.1.0",
    +    .dependencies = .{
    +        .microzig = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/c6c9ec4516f57638e751141085c9d76120990312.tar.gz",
    +            .hash = "1220af58bdaa721b8189f3a7adfda660517dd354463463388e96d69fe4ceccf80b92",
    +        },
    +        .atmega = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/microchip-atmega/archive/feefcb87a63c0aae31afb783d4e388e90c4d922f.tar.gz",
    +            .hash = "1220048dc5d22729ee119a496f8b8ca3556838af1f3bd32ce6acd5f76480ec942965",
    +        },
    +    },
    +}
    diff --git a/nordic-nrf5x/README.adoc b/nordic-nrf5x/README.adoc
    new file mode 100644
    index 000000000..7c2fa2fb5
    --- /dev/null
    +++ b/nordic-nrf5x/README.adoc
    @@ -0,0 +1,11 @@
    += Nordic nrf5x
    +
    +HALs and register definitions for nrf5x devices
    +
    +== What version of Zig to use
    +
    +Right now we are following https://ziglang.org/download/[master], but once 0.11.0 is released, we will be switching to the latest stable version of Zig.
    +
    +== Renode supports:
    +
    +- nrf52840 development kit
    diff --git a/nordic-nrf5x/build.zig b/nordic-nrf5x/build.zig
    new file mode 100644
    index 000000000..406477261
    --- /dev/null
    +++ b/nordic-nrf5x/build.zig
    @@ -0,0 +1,84 @@
    +const std = @import("std");
    +const rp2040 = @import("rp2040");
    +const stm32 = @import("stm32");
    +const lpc = @import("lpc");
    +const gd32 = @import("gd32");
    +const nrf5x = @import("nrf5x");
    +const esp = @import("esp");
    +const atmega = @import("atmega");
    +
    +pub fn build(b: *std.Build) void {
    +    const microzig = @import("microzig").init(b, "microzig");
    +    const optimize = b.standardOptimizeOption(.{});
    +
    +    const TargetDesc = struct {
    +        target: @import("microzig").Target,
    +        name: []const u8,
    +    };
    +
    +    const available_targets = [_]TargetDesc{
    +        // RP2040
    +        .{ .name = "pico", .target = rp2040.boards.raspberry_pi.pico },
    +        .{ .name = "rp2040-eth", .target = rp2040.boards.waveshare.rp2040_eth },
    +        .{ .name = "rp2040-plus-4m", .target = rp2040.boards.waveshare.rp2040_plus_4m },
    +        .{ .name = "rp2040-plus-16m", .target = rp2040.boards.waveshare.rp2040_plus_16m },
    +        .{ .name = "rp2040-matrix", .target = rp2040.boards.waveshare.rp2040_matrix },
    +
    +        // STM32
    +        .{ .name = "stm32f103x8", .target = stm32.chips.stm32f103x8 },
    +        .{ .name = "stm32f303vc", .target = stm32.chips.stm32f303vc },
    +        .{ .name = "stm32f407vg", .target = stm32.chips.stm32f407vg },
    +        .{ .name = "stm32f429zit6u", .target = stm32.chips.stm32f429zit6u },
    +        .{ .name = "stm32f3discovery", .target = stm32.boards.stm32f3discovery },
    +        .{ .name = "stm32f4discovery", .target = stm32.boards.stm32f4discovery },
    +        .{ .name = "stm3240geval", .target = stm32.boards.stm3240geval },
    +        .{ .name = "stm32f429idiscovery", .target = stm32.boards.stm32f429idiscovery },
    +
    +        // NXP LPC
    +        .{ .name = "lpc176x5x", .target = lpc.chips.lpc176x5x },
    +        .{ .name = "mbed-lpc1768", .target = lpc.boards.mbed.lpc1768 },
    +
    +        // GigaDevice GD32
    +        .{ .name = "gd32vf103xb", .target = gd32.chips.gd32vf103xb },
    +        .{ .name = "gd32vf103x8", .target = gd32.chips.gd32vf103x8 },
    +        .{ .name = "sipeed-longan_nano", .target = gd32.boards.sipeed.longan_nano },
    +
    +        // Nordic Nrf5x
    +        .{ .name = "nrf52832", .target = nrf5x.chips.nrf52832 },
    +        .{ .name = "nrf52840", .target = nrf5x.chips.nrf52840 },
    +        .{ .name = "nrf52840-dongle", .target = nrf5x.boards.nordic.nRF52840_Dongle }, // TODO: Add support for DFU files!
    +
    +        // RISC-V Espressif ESP
    +        .{ .name = "esp32-c3", .target = esp.chips.esp32_c3 }, // TODO: Add support for Espressif Update Binaries
    +
    +        // Microchip ATmega
    +        // TODO: Fix compiler bugs
    +        // - https://github.com/ziglang/zig/issues/17219
    +        // .{ .name = "atmega328p", .target = atmega.chips.atmega328p },
    +        // .{ .name = "arduino-nano", .target = atmega.boards.arduino.nano },
    +        // .{ .name = "arduino-uno-rev3", .target = atmega.boards.arduino.uno_rev3 },
    +    };
    +
    +    for (available_targets) |dest| {
    +        // `addFirmware` basically works like addExecutable, but takes a
    +        // `microzig.Target` for target instead of a `std.zig.CrossTarget`.
    +        //
    +        // The target will convey all necessary information on the chip,
    +        // cpu and potentially the board as well.
    +        const firmware = microzig.addFirmware(b, .{
    +            .name = b.fmt("empty-{s}", .{dest.name}),
    +            .target = dest.target,
    +            .optimize = optimize,
    +            .source_file = .{ .path = "src/empty.zig" },
    +        });
    +
    +        // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()`
    +        // and allows installing the firmware as a typical firmware file.
    +        //
    +        // This will also install into `$prefix/firmware` instead of `$prefix/bin`.
    +        microzig.installFirmware(b, firmware, .{});
    +
    +        // For debugging, we also always install the firmware as an ELF file
    +        microzig.installFirmware(b, firmware, .{ .format = .elf });
    +    }
    +}
    diff --git a/nordic-nrf5x/build.zig.zon b/nordic-nrf5x/build.zig.zon
    new file mode 100644
    index 000000000..2034409a0
    --- /dev/null
    +++ b/nordic-nrf5x/build.zig.zon
    @@ -0,0 +1,14 @@
    +.{
    +    .name = "microzig-nordic-nrf5x-examples",
    +    .version = "0.1.0",
    +    .dependencies = .{
    +        .microzig = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/c6c9ec4516f57638e751141085c9d76120990312.tar.gz",
    +            .hash = "1220af58bdaa721b8189f3a7adfda660517dd354463463388e96d69fe4ceccf80b92",
    +        },
    +        .nrf5x = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/nordic-nrf5x/archive/0ab136860ccf7eb1d07969c3ef523f3cd898e2ff.tar.gz",
    +            .hash = "1220980da06f9634dcff06afefa7aa111bd030018fea49f79e86657dab69621e1d08",
    +        },
    +    },
    +}
    diff --git a/nxp-lpc/build.zig b/nxp-lpc/build.zig
    new file mode 100644
    index 000000000..406477261
    --- /dev/null
    +++ b/nxp-lpc/build.zig
    @@ -0,0 +1,84 @@
    +const std = @import("std");
    +const rp2040 = @import("rp2040");
    +const stm32 = @import("stm32");
    +const lpc = @import("lpc");
    +const gd32 = @import("gd32");
    +const nrf5x = @import("nrf5x");
    +const esp = @import("esp");
    +const atmega = @import("atmega");
    +
    +pub fn build(b: *std.Build) void {
    +    const microzig = @import("microzig").init(b, "microzig");
    +    const optimize = b.standardOptimizeOption(.{});
    +
    +    const TargetDesc = struct {
    +        target: @import("microzig").Target,
    +        name: []const u8,
    +    };
    +
    +    const available_targets = [_]TargetDesc{
    +        // RP2040
    +        .{ .name = "pico", .target = rp2040.boards.raspberry_pi.pico },
    +        .{ .name = "rp2040-eth", .target = rp2040.boards.waveshare.rp2040_eth },
    +        .{ .name = "rp2040-plus-4m", .target = rp2040.boards.waveshare.rp2040_plus_4m },
    +        .{ .name = "rp2040-plus-16m", .target = rp2040.boards.waveshare.rp2040_plus_16m },
    +        .{ .name = "rp2040-matrix", .target = rp2040.boards.waveshare.rp2040_matrix },
    +
    +        // STM32
    +        .{ .name = "stm32f103x8", .target = stm32.chips.stm32f103x8 },
    +        .{ .name = "stm32f303vc", .target = stm32.chips.stm32f303vc },
    +        .{ .name = "stm32f407vg", .target = stm32.chips.stm32f407vg },
    +        .{ .name = "stm32f429zit6u", .target = stm32.chips.stm32f429zit6u },
    +        .{ .name = "stm32f3discovery", .target = stm32.boards.stm32f3discovery },
    +        .{ .name = "stm32f4discovery", .target = stm32.boards.stm32f4discovery },
    +        .{ .name = "stm3240geval", .target = stm32.boards.stm3240geval },
    +        .{ .name = "stm32f429idiscovery", .target = stm32.boards.stm32f429idiscovery },
    +
    +        // NXP LPC
    +        .{ .name = "lpc176x5x", .target = lpc.chips.lpc176x5x },
    +        .{ .name = "mbed-lpc1768", .target = lpc.boards.mbed.lpc1768 },
    +
    +        // GigaDevice GD32
    +        .{ .name = "gd32vf103xb", .target = gd32.chips.gd32vf103xb },
    +        .{ .name = "gd32vf103x8", .target = gd32.chips.gd32vf103x8 },
    +        .{ .name = "sipeed-longan_nano", .target = gd32.boards.sipeed.longan_nano },
    +
    +        // Nordic Nrf5x
    +        .{ .name = "nrf52832", .target = nrf5x.chips.nrf52832 },
    +        .{ .name = "nrf52840", .target = nrf5x.chips.nrf52840 },
    +        .{ .name = "nrf52840-dongle", .target = nrf5x.boards.nordic.nRF52840_Dongle }, // TODO: Add support for DFU files!
    +
    +        // RISC-V Espressif ESP
    +        .{ .name = "esp32-c3", .target = esp.chips.esp32_c3 }, // TODO: Add support for Espressif Update Binaries
    +
    +        // Microchip ATmega
    +        // TODO: Fix compiler bugs
    +        // - https://github.com/ziglang/zig/issues/17219
    +        // .{ .name = "atmega328p", .target = atmega.chips.atmega328p },
    +        // .{ .name = "arduino-nano", .target = atmega.boards.arduino.nano },
    +        // .{ .name = "arduino-uno-rev3", .target = atmega.boards.arduino.uno_rev3 },
    +    };
    +
    +    for (available_targets) |dest| {
    +        // `addFirmware` basically works like addExecutable, but takes a
    +        // `microzig.Target` for target instead of a `std.zig.CrossTarget`.
    +        //
    +        // The target will convey all necessary information on the chip,
    +        // cpu and potentially the board as well.
    +        const firmware = microzig.addFirmware(b, .{
    +            .name = b.fmt("empty-{s}", .{dest.name}),
    +            .target = dest.target,
    +            .optimize = optimize,
    +            .source_file = .{ .path = "src/empty.zig" },
    +        });
    +
    +        // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()`
    +        // and allows installing the firmware as a typical firmware file.
    +        //
    +        // This will also install into `$prefix/firmware` instead of `$prefix/bin`.
    +        microzig.installFirmware(b, firmware, .{});
    +
    +        // For debugging, we also always install the firmware as an ELF file
    +        microzig.installFirmware(b, firmware, .{ .format = .elf });
    +    }
    +}
    diff --git a/nxp-lpc/build.zig.zon b/nxp-lpc/build.zig.zon
    new file mode 100644
    index 000000000..aa5a11a05
    --- /dev/null
    +++ b/nxp-lpc/build.zig.zon
    @@ -0,0 +1,14 @@
    +.{
    +    .name = "microzig-nxp-lpc-examples",
    +    .version = "0.1.0",
    +    .dependencies = .{
    +        .microzig = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/c6c9ec4516f57638e751141085c9d76120990312.tar.gz",
    +            .hash = "1220af58bdaa721b8189f3a7adfda660517dd354463463388e96d69fe4ceccf80b92",
    +        },
    +        .lpc = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/nxp-lpc/archive/130a1316c0892415e7da958a5e9548ed87bba54d.tar.gz",
    +            .hash = "1220165879f85a1d51656d35b3963a95f3585dc665fc7414f76aa6aad4e6635536cf",
    +        },
    +    },
    +}
    diff --git a/nxp-lpc/src/blinky.zig b/nxp-lpc/src/blinky.zig
    new file mode 100644
    index 000000000..e69de29bb
    diff --git a/rp2040/build.zig b/rp2040/build.zig
    new file mode 100644
    index 000000000..406477261
    --- /dev/null
    +++ b/rp2040/build.zig
    @@ -0,0 +1,84 @@
    +const std = @import("std");
    +const rp2040 = @import("rp2040");
    +const stm32 = @import("stm32");
    +const lpc = @import("lpc");
    +const gd32 = @import("gd32");
    +const nrf5x = @import("nrf5x");
    +const esp = @import("esp");
    +const atmega = @import("atmega");
    +
    +pub fn build(b: *std.Build) void {
    +    const microzig = @import("microzig").init(b, "microzig");
    +    const optimize = b.standardOptimizeOption(.{});
    +
    +    const TargetDesc = struct {
    +        target: @import("microzig").Target,
    +        name: []const u8,
    +    };
    +
    +    const available_targets = [_]TargetDesc{
    +        // RP2040
    +        .{ .name = "pico", .target = rp2040.boards.raspberry_pi.pico },
    +        .{ .name = "rp2040-eth", .target = rp2040.boards.waveshare.rp2040_eth },
    +        .{ .name = "rp2040-plus-4m", .target = rp2040.boards.waveshare.rp2040_plus_4m },
    +        .{ .name = "rp2040-plus-16m", .target = rp2040.boards.waveshare.rp2040_plus_16m },
    +        .{ .name = "rp2040-matrix", .target = rp2040.boards.waveshare.rp2040_matrix },
    +
    +        // STM32
    +        .{ .name = "stm32f103x8", .target = stm32.chips.stm32f103x8 },
    +        .{ .name = "stm32f303vc", .target = stm32.chips.stm32f303vc },
    +        .{ .name = "stm32f407vg", .target = stm32.chips.stm32f407vg },
    +        .{ .name = "stm32f429zit6u", .target = stm32.chips.stm32f429zit6u },
    +        .{ .name = "stm32f3discovery", .target = stm32.boards.stm32f3discovery },
    +        .{ .name = "stm32f4discovery", .target = stm32.boards.stm32f4discovery },
    +        .{ .name = "stm3240geval", .target = stm32.boards.stm3240geval },
    +        .{ .name = "stm32f429idiscovery", .target = stm32.boards.stm32f429idiscovery },
    +
    +        // NXP LPC
    +        .{ .name = "lpc176x5x", .target = lpc.chips.lpc176x5x },
    +        .{ .name = "mbed-lpc1768", .target = lpc.boards.mbed.lpc1768 },
    +
    +        // GigaDevice GD32
    +        .{ .name = "gd32vf103xb", .target = gd32.chips.gd32vf103xb },
    +        .{ .name = "gd32vf103x8", .target = gd32.chips.gd32vf103x8 },
    +        .{ .name = "sipeed-longan_nano", .target = gd32.boards.sipeed.longan_nano },
    +
    +        // Nordic Nrf5x
    +        .{ .name = "nrf52832", .target = nrf5x.chips.nrf52832 },
    +        .{ .name = "nrf52840", .target = nrf5x.chips.nrf52840 },
    +        .{ .name = "nrf52840-dongle", .target = nrf5x.boards.nordic.nRF52840_Dongle }, // TODO: Add support for DFU files!
    +
    +        // RISC-V Espressif ESP
    +        .{ .name = "esp32-c3", .target = esp.chips.esp32_c3 }, // TODO: Add support for Espressif Update Binaries
    +
    +        // Microchip ATmega
    +        // TODO: Fix compiler bugs
    +        // - https://github.com/ziglang/zig/issues/17219
    +        // .{ .name = "atmega328p", .target = atmega.chips.atmega328p },
    +        // .{ .name = "arduino-nano", .target = atmega.boards.arduino.nano },
    +        // .{ .name = "arduino-uno-rev3", .target = atmega.boards.arduino.uno_rev3 },
    +    };
    +
    +    for (available_targets) |dest| {
    +        // `addFirmware` basically works like addExecutable, but takes a
    +        // `microzig.Target` for target instead of a `std.zig.CrossTarget`.
    +        //
    +        // The target will convey all necessary information on the chip,
    +        // cpu and potentially the board as well.
    +        const firmware = microzig.addFirmware(b, .{
    +            .name = b.fmt("empty-{s}", .{dest.name}),
    +            .target = dest.target,
    +            .optimize = optimize,
    +            .source_file = .{ .path = "src/empty.zig" },
    +        });
    +
    +        // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()`
    +        // and allows installing the firmware as a typical firmware file.
    +        //
    +        // This will also install into `$prefix/firmware` instead of `$prefix/bin`.
    +        microzig.installFirmware(b, firmware, .{});
    +
    +        // For debugging, we also always install the firmware as an ELF file
    +        microzig.installFirmware(b, firmware, .{ .format = .elf });
    +    }
    +}
    diff --git a/rp2040/build.zig.zon b/rp2040/build.zig.zon
    new file mode 100644
    index 000000000..255be3f0f
    --- /dev/null
    +++ b/rp2040/build.zig.zon
    @@ -0,0 +1,14 @@
    +.{
    +    .name = "microzig-raspberrypi-rp2040-examples",
    +    .version = "0.1.0",
    +    .dependencies = .{
    +        .microzig = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/c6c9ec4516f57638e751141085c9d76120990312.tar.gz",
    +            .hash = "1220af58bdaa721b8189f3a7adfda660517dd354463463388e96d69fe4ceccf80b92",
    +        },
    +        .rp2040 = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/raspberrypi-rp2040/archive/67d36eebb0fbd89633db1a51d6d2bcb049f2066a.tar.gz",
    +            .hash = "122094bf268f45b188f3916f9e5964f4257414afaafba98a455ac47d25389a456832",
    +        },
    +    },
    +}
    diff --git a/rp2040/scripts/hid_test.py b/rp2040/scripts/hid_test.py
    new file mode 100755
    index 000000000..ccc2dd093
    --- /dev/null
    +++ b/rp2040/scripts/hid_test.py
    @@ -0,0 +1,29 @@
    +#!/usr/bin/env python3
    +
    +# Install python3 HID package https://pypi.org/project/hid/
    +import hid
    +
    +# default is TinyUSB (0xcafe), Adafruit (0x239a), RaspberryPi (0x2e8a), Espressif (0x303a) VID
    +USB_VID = (0xcafe, 0x239a, 0x2e8a, 0x303a)
    +
    +print("VID list: " + ", ".join('%02x' % v for v in USB_VID))
    +
    +for vid in  USB_VID:
    +    for dict in hid.enumerate(vid):
    +        print(dict)
    +        dev = hid.Device(dict['vendor_id'], dict['product_id'])
    +        if dev:
    +            while True:
    +                inp = input("Send text to HID Device : ").encode('utf-8')
    +                dev.write(inp)
    +
    +                x = 0
    +                l = len(inp)
    +                r = b""
    +                while (x < l):
    +                    str_in = dev.read(64)
    +                    r += str_in
    +                    x += 64
    +
    +                print("Received from HID Device:\n", r)
    +                print("hex:\n", r.hex())
    diff --git a/rp2040/scripts/usb_device_loopback.py b/rp2040/scripts/usb_device_loopback.py
    new file mode 100755
    index 000000000..82bf47899
    --- /dev/null
    +++ b/rp2040/scripts/usb_device_loopback.py
    @@ -0,0 +1,48 @@
    +#!/usr/bin/env python3
    +
    +#
    +# Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    +#
    +# SPDX-License-Identifier: BSD-3-Clause
    +#
    +
    +# sudo pip3 install pyusb
    +
    +import usb.core
    +import usb.util
    +
    +# find our device
    +dev = usb.core.find(idVendor=0x0000, idProduct=0x0001)
    +
    +# was it found?
    +if dev is None:
    +    raise ValueError('Device not found')
    +
    +# get an endpoint instance
    +cfg = dev.get_active_configuration()
    +intf = cfg[(0, 0)]
    +
    +outep = usb.util.find_descriptor(
    +    intf,
    +    # match the first OUT endpoint
    +    custom_match= \
    +        lambda e: \
    +            usb.util.endpoint_direction(e.bEndpointAddress) == \
    +            usb.util.ENDPOINT_OUT)
    +
    +inep = usb.util.find_descriptor(
    +    intf,
    +    # match the first IN endpoint
    +    custom_match= \
    +        lambda e: \
    +            usb.util.endpoint_direction(e.bEndpointAddress) == \
    +            usb.util.ENDPOINT_IN)
    +
    +assert inep is not None
    +assert outep is not None
    +
    +test_string = "Hello World!"
    +outep.write(test_string)
    +from_device = inep.read(len(test_string))
    +
    +print("Device Says: {}".format(''.join([chr(x) for x in from_device])))
    diff --git a/rp2040/src/adc.zig b/rp2040/src/adc.zig
    new file mode 100644
    index 000000000..ff180dd53
    --- /dev/null
    +++ b/rp2040/src/adc.zig
    @@ -0,0 +1,40 @@
    +//! This example takes periodic samples of the temperature sensor and
    +//! prints it to the UART using the stdlib logging facility.
    +const std = @import("std");
    +const microzig = @import("microzig");
    +const rp2040 = microzig.hal;
    +const gpio = rp2040.gpio;
    +const adc = rp2040.adc;
    +const time = rp2040.time;
    +
    +const uart = rp2040.uart.num(0);
    +const baud_rate = 115200;
    +const uart_tx_pin = gpio.num(0);
    +const uart_rx_pin = gpio.num(1);
    +
    +pub const std_options = struct {
    +    pub const logFn = rp2040.uart.log;
    +};
    +
    +pub fn main() void {
    +    adc.apply(.{
    +        .temp_sensor_enabled = true,
    +    });
    +
    +    uart.apply(.{
    +        .baud_rate = baud_rate,
    +        .tx_pin = uart_tx_pin,
    +        .rx_pin = uart_rx_pin,
    +        .clock_config = rp2040.clock_config,
    +    });
    +
    +    rp2040.uart.init_logger(uart);
    +    while (true) : (time.sleep_ms(1000)) {
    +        const sample = adc.convert_one_shot_blocking(.temp_sensor) catch {
    +            std.log.err("conversion failed!", .{});
    +            continue;
    +        };
    +
    +        std.log.info("temp value: {}", .{sample});
    +    }
    +}
    diff --git a/rp2040/src/blinky.zig b/rp2040/src/blinky.zig
    new file mode 100644
    index 000000000..5632fe349
    --- /dev/null
    +++ b/rp2040/src/blinky.zig
    @@ -0,0 +1,20 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +const rp2040 = microzig.hal;
    +const time = rp2040.time;
    +
    +const pin_config = rp2040.pins.GlobalConfiguration{
    +    .GPIO25 = .{
    +        .name = "led",
    +        .direction = .out,
    +    },
    +};
    +
    +pub fn main() !void {
    +    const pins = pin_config.apply();
    +
    +    while (true) {
    +        pins.led.toggle();
    +        time.sleep_ms(250);
    +    }
    +}
    diff --git a/rp2040/src/blinky_core1.zig b/rp2040/src/blinky_core1.zig
    new file mode 100644
    index 000000000..06157295b
    --- /dev/null
    +++ b/rp2040/src/blinky_core1.zig
    @@ -0,0 +1,28 @@
    +const std = @import("std");
    +
    +const microzig = @import("microzig");
    +const rp2040 = microzig.hal;
    +const gpio = rp2040.gpio;
    +const time = rp2040.time;
    +const multicore = rp2040.multicore;
    +
    +const led = gpio.num(25);
    +
    +fn core1() void {
    +    while (true) {
    +        led.put(1);
    +        time.sleep_ms(250);
    +        led.put(0);
    +        time.sleep_ms(250);
    +    }
    +}
    +
    +pub fn main() !void {
    +    led.set_function(.sio);
    +    led.set_direction(.out);
    +    multicore.launch_core1(core1);
    +
    +    while (true) {
    +        microzig.cpu.wfi();
    +    }
    +}
    diff --git a/rp2040/src/flash_program.zig b/rp2040/src/flash_program.zig
    new file mode 100644
    index 000000000..9fd13be06
    --- /dev/null
    +++ b/rp2040/src/flash_program.zig
    @@ -0,0 +1,81 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +
    +const rp2040 = microzig.hal;
    +const flash = rp2040.flash;
    +const time = rp2040.time;
    +const gpio = rp2040.gpio;
    +const clocks = rp2040.clocks;
    +
    +const led = gpio.num(25);
    +const uart = rp2040.uart.num(0);
    +const baud_rate = 115200;
    +const uart_tx_pin = gpio.num(0);
    +const uart_rx_pin = gpio.num(1);
    +
    +const flash_target_offset: u32 = 256 * 1024;
    +const flash_target_contents = @as([*]const u8, @ptrFromInt(rp2040.flash.XIP_BASE + flash_target_offset));
    +
    +pub fn panic(message: []const u8, _: ?*std.builtin.StackTrace, _: ?usize) noreturn {
    +    std.log.err("panic: {s}", .{message});
    +    @breakpoint();
    +    while (true) {}
    +}
    +
    +pub const std_options = struct {
    +    pub const log_level = .debug;
    +    pub const logFn = rp2040.uart.log;
    +};
    +
    +pub fn main() !void {
    +    led.set_function(.sio);
    +    led.set_direction(.out);
    +    led.put(1);
    +
    +    uart.apply(.{
    +        .baud_rate = baud_rate,
    +        .tx_pin = uart_tx_pin,
    +        .rx_pin = uart_rx_pin,
    +        .clock_config = rp2040.clock_config,
    +    });
    +
    +    rp2040.uart.init_logger(uart);
    +
    +    var data: [flash.PAGE_SIZE]u8 = undefined;
    +    var i: usize = 0;
    +    var j: u8 = 0;
    +    while (i < flash.PAGE_SIZE) : (i += 1) {
    +        data[i] = j;
    +
    +        if (j == 255) j = 0;
    +        j += 1;
    +    }
    +
    +    std.log.info("Generate data", .{});
    +    std.log.info("data: {s}", .{&data});
    +
    +    // Note that a whole number of sectors (4096 bytes) must be erased at a time
    +    std.log.info("Erasing target region...", .{});
    +    flash.range_erase(flash_target_offset, flash.SECTOR_SIZE);
    +    std.log.info("Done. Read back target region:", .{});
    +    std.log.info("data: {s}", .{flash_target_contents[0..flash.PAGE_SIZE]});
    +
    +    // Note that a whole number of pages (256 bytes) must be written at a time
    +    std.log.info("Programming target region...", .{});
    +    flash.range_program(flash_target_offset, data[0..]);
    +    std.log.info("Done. Read back target region:", .{});
    +    std.log.info("data: {s}", .{flash_target_contents[0..flash.PAGE_SIZE]});
    +
    +    var mismatch: bool = false;
    +    i = 0;
    +    while (i < flash.PAGE_SIZE) : (i += 1) {
    +        if (data[i] != flash_target_contents[i])
    +            mismatch = true;
    +    }
    +
    +    if (mismatch) {
    +        std.log.info("Programming failed!", .{});
    +    } else {
    +        std.log.info("Programming successful!", .{});
    +    }
    +}
    diff --git a/rp2040/src/gpio_clk.zig b/rp2040/src/gpio_clk.zig
    new file mode 100644
    index 000000000..dd2810242
    --- /dev/null
    +++ b/rp2040/src/gpio_clk.zig
    @@ -0,0 +1,16 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +const rp2040 = microzig.hal;
    +const gpio = rp2040.gpio;
    +const clocks = rp2040.clocks;
    +
    +const gpout0_pin = gpio.num(21);
    +const clock_config = clocks.GlobalConfiguration.init(.{
    +    .sys = .{ .source = .src_xosc },
    +    .gpout0 = .{ .source = .clk_sys },
    +});
    +
    +pub fn main() !void {
    +    gpout0_pin.set_function(.gpck);
    +    while (true) {}
    +}
    diff --git a/rp2040/src/i2c_bus_scan.zig b/rp2040/src/i2c_bus_scan.zig
    new file mode 100644
    index 000000000..702bcefc3
    --- /dev/null
    +++ b/rp2040/src/i2c_bus_scan.zig
    @@ -0,0 +1,44 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +
    +const rp2040 = microzig.hal;
    +const i2c = rp2040.i2c;
    +const gpio = rp2040.gpio;
    +const peripherals = microzig.chip.peripherals;
    +
    +pub const std_options = struct {
    +    pub const log_level = .info;
    +    pub const logFn = rp2040.uart.log;
    +};
    +
    +const uart = rp2040.uart.num(0);
    +const i2c0 = i2c.num(0);
    +
    +pub fn main() !void {
    +    uart.apply(.{
    +        .baud_rate = 115200,
    +        .tx_pin = gpio.num(0),
    +        .rx_pin = gpio.num(1),
    +        .clock_config = rp2040.clock_config,
    +    });
    +    rp2040.uart.init_logger(uart);
    +
    +    _ = i2c0.apply(.{
    +        .clock_config = rp2040.clock_config,
    +        .scl_pin = gpio.num(4),
    +        .sda_pin = gpio.num(5),
    +    });
    +
    +    for (0..std.math.maxInt(u7)) |addr| {
    +        const a: i2c.Address = @enumFromInt(addr);
    +
    +        // Skip over any reserved addresses.
    +        if (a.is_reserved()) continue;
    +
    +        var rx_data: [1]u8 = undefined;
    +        _ = i2c0.read_blocking(a, &rx_data) catch continue;
    +
    +        std.log.info("I2C device found at address {X}.", .{addr});
    +    }
    +}
    +
    diff --git a/rp2040/src/pwm.zig b/rp2040/src/pwm.zig
    new file mode 100644
    index 000000000..d372ef4c2
    --- /dev/null
    +++ b/rp2040/src/pwm.zig
    @@ -0,0 +1,23 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +const rp2040 = microzig.hal;
    +const gpio = rp2040.gpio;
    +const clocks = rp2040.clocks;
    +const time = rp2040.time;
    +const regs = microzig.chip.registers;
    +const multicore = rp2040.multicore;
    +
    +const pin_config = rp2040.pins.GlobalConfiguration{
    +    .GPIO25 = .{ .name = "led", .function = .PWM4_B },
    +};
    +
    +pub fn main() !void {
    +    const pins = pin_config.apply();
    +    pins.led.slice().set_wrap(100);
    +    pins.led.set_level(10);
    +    pins.led.slice().enable();
    +
    +    while (true) {
    +        time.sleep_ms(250);
    +    }
    +}
    diff --git a/rp2040/src/random.zig b/rp2040/src/random.zig
    new file mode 100644
    index 000000000..34d03d1c7
    --- /dev/null
    +++ b/rp2040/src/random.zig
    @@ -0,0 +1,68 @@
    +//! Example that generates a 4 byte random number every second and outputs the result over UART
    +
    +const std = @import("std");
    +const microzig = @import("microzig");
    +
    +const rp2040 = microzig.hal;
    +const flash = rp2040.flash;
    +const time = rp2040.time;
    +const gpio = rp2040.gpio;
    +const clocks = rp2040.clocks;
    +const rand = rp2040.rand;
    +
    +const led = gpio.num(25);
    +const uart = rp2040.uart.num(0);
    +const baud_rate = 115200;
    +const uart_tx_pin = gpio.num(0);
    +const uart_rx_pin = gpio.num(1);
    +
    +pub fn panic(message: []const u8, _: ?*std.builtin.StackTrace, _: ?usize) noreturn {
    +    std.log.err("panic: {s}", .{message});
    +    @breakpoint();
    +    while (true) {}
    +}
    +
    +pub const std_options = struct {
    +    pub const log_level = .debug;
    +    pub const logFn = rp2040.uart.log;
    +};
    +
    +pub fn main() !void {
    +    led.set_function(.sio);
    +    led.set_direction(.out);
    +    led.put(1);
    +
    +    uart.apply(.{
    +        .baud_rate = baud_rate,
    +        .tx_pin = uart_tx_pin,
    +        .rx_pin = uart_rx_pin,
    +        .clock_config = rp2040.clock_config,
    +    });
    +
    +    var ascon = rand.Ascon.init();
    +    var rng = ascon.random();
    +
    +    rp2040.uart.init_logger(uart);
    +
    +    var buffer: [8]u8 = undefined;
    +    var dist: [256]usize = .{0} ** 256;
    +    var counter: usize = 0;
    +
    +    while (true) {
    +        rng.bytes(buffer[0..]);
    +        counter += 8;
    +        for (buffer) |byte| {
    +            dist[@as(usize, @intCast(byte))] += 1;
    +        }
    +        std.log.info("Generate random number: {any}", .{buffer});
    +
    +        if (counter % 256 == 0) {
    +            var i: usize = 0;
    +            std.log.info("Distribution:", .{});
    +            while (i < 256) : (i += 1) {
    +                std.log.info("{} -> {}, {d:2}%", .{ i, dist[i], @as(f32, @floatFromInt(dist[i])) / @as(f32, @floatFromInt(counter)) });
    +            }
    +        }
    +        time.sleep_ms(1000);
    +    }
    +}
    diff --git a/rp2040/src/spi_master.zig b/rp2040/src/spi_master.zig
    new file mode 100644
    index 000000000..c160fee96
    --- /dev/null
    +++ b/rp2040/src/spi_master.zig
    @@ -0,0 +1,26 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +
    +const rp2040 = microzig.hal;
    +const time = rp2040.time;
    +const gpio = rp2040.gpio;
    +const clocks = rp2040.clocks;
    +const peripherals = microzig.chip.peripherals;
    +
    +const BUF_LEN = 0x100;
    +const spi = rp2040.spi.num(0);
    +
    +// Communicate with another RP2040 over spi
    +// Slave implementation: https://github.com/raspberrypi/pico-examples/blob/master/spi/spi_master_slave/spi_slave/spi_slave.c
    +pub fn main() !void {
    +    spi.apply(.{
    +        .clock_config = rp2040.clock_config,
    +    });
    +    var out_buf: [BUF_LEN]u8 = .{ 0xAA, 0xBB, 0xCC, 0xDD } ** (BUF_LEN / 4);
    +    var in_buf: [BUF_LEN]u8 = undefined;
    +
    +    while (true) {
    +        _ = spi.transceive(&out_buf, &in_buf);
    +        time.sleep_ms(1 * 1000);
    +    }
    +}
    diff --git a/rp2040/src/squarewave.zig b/rp2040/src/squarewave.zig
    new file mode 100644
    index 000000000..0894d9a0c
    --- /dev/null
    +++ b/rp2040/src/squarewave.zig
    @@ -0,0 +1,84 @@
    +//! Hello world for the PIO module: generating a square wave
    +const std = @import("std");
    +const microzig = @import("microzig");
    +const rp2040 = microzig.hal;
    +const gpio = rp2040.gpio;
    +const Pio = rp2040.pio.Pio;
    +const StateMachine = rp2040.pio.StateMachine;
    +
    +const squarewave_program = blk: {
    +    @setEvalBranchQuota(2000);
    +    break :blk rp2040.pio.assemble(
    +        \\;
    +        \\; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    +        \\;
    +        \\; SPDX-License-Identifier: BSD-3-Clause
    +        \\;
    +        \\.program squarewave
    +        \\    set pindirs, 1   ; Set pin to output
    +        \\again:
    +        \\    set pins, 1 [1]  ; Drive pin high and then delay for one cycle
    +        \\    set pins, 0      ; Drive pin low
    +        \\    jmp again        ; Set PC to label `again`
    +    , .{}).get_program_by_name("squarewave");
    +};
    +
    +// Pick one PIO instance arbitrarily. We're also arbitrarily picking state
    +// machine 0 on this PIO instance (the state machines are numbered 0 to 3
    +// inclusive).
    +const pio: Pio = .pio0;
    +const sm: StateMachine = .sm0;
    +
    +pub fn main() void {
    +    pio.gpio_init(gpio.num(2));
    +    pio.sm_load_and_start_program(sm, squarewave_program, .{
    +        .clkdiv = rp2040.pio.ClkDivOptions.from_float(125),
    +        .pin_mappings = .{
    +            .set = .{
    +                .base = 2,
    +                .count = 1,
    +            },
    +        },
    +    }) catch unreachable;
    +
    +    pio.sm_set_enabled(sm, true);
    +
    +    while (true) {}
    +
    +    //// Load the assembled program directly into the PIO's instruction memory.
    +    //// Each PIO instance has a 32-slot instruction memory, which all 4 state
    +    //// machines can see. The system has write-only access.
    +    //for (squarewave_program.instructions, 0..) |insn, i|
    +    //    pio.get_instruction_memory()[i] = insn;
    +
    +    //// Configure state machine 0 to run at sysclk/2.5. The state machines can
    +    //// run as fast as one instruction per clock cycle, but we can scale their
    +    //// speed down uniformly to meet some precise frequency target, e.g. for a
    +    //// UART baud rate. This register has 16 integer divisor bits and 8
    +    //// fractional divisor bits.
    +    //pio.sm_set_clkdiv(sm, .{
    +    //    .int = 2,
    +    //    .frac = 0x80,
    +    //});
    +
    +    //// There are five pin mapping groups (out, in, set, side-set, jmp pin)
    +    //// which are used by different instructions or in different circumstances.
    +    //// Here we're just using SET instructions. Configure state machine 0 SETs
    +    //// to affect GPIO 0 only; then configure GPIO0 to be controlled by PIO0,
    +    //// as opposed to e.g. the processors.
    +    //pio.gpio_init(2);
    +    //pio.sm_set_pin_mappings(sm, .{
    +    //    .out = .{
    +    //        .base = 2,
    +    //        .count = 1,
    +    //    },
    +    //});
    +
    +    //// Set the state machine running. The PIO CTRL register is global within a
    +    //// PIO instance, so you can start/stop multiple state machines
    +    //// simultaneously. We're using the register's hardware atomic set alias to
    +    //// make one bit high without doing a read-modify-write on the register.
    +    //pio.sm_set_enabled(sm, true);
    +
    +    //while (true) {}
    +}
    diff --git a/rp2040/src/uart.zig b/rp2040/src/uart.zig
    new file mode 100644
    index 000000000..914b9ae98
    --- /dev/null
    +++ b/rp2040/src/uart.zig
    @@ -0,0 +1,49 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +
    +const rp2040 = microzig.hal;
    +const time = rp2040.time;
    +const gpio = rp2040.gpio;
    +const clocks = rp2040.clocks;
    +
    +const led = gpio.num(25);
    +const uart = rp2040.uart.num(0);
    +const baud_rate = 115200;
    +const uart_tx_pin = gpio.num(0);
    +const uart_rx_pin = gpio.num(1);
    +
    +pub fn panic(message: []const u8, _: ?*std.builtin.StackTrace, _: ?usize) noreturn {
    +    std.log.err("panic: {s}", .{message});
    +    @breakpoint();
    +    while (true) {}
    +}
    +
    +pub const std_options = struct {
    +    pub const log_level = .debug;
    +    pub const logFn = rp2040.uart.log;
    +};
    +
    +pub fn main() !void {
    +    led.set_function(.sio);
    +    led.set_direction(.out);
    +    led.put(1);
    +
    +    uart.apply(.{
    +        .baud_rate = baud_rate,
    +        .tx_pin = uart_tx_pin,
    +        .rx_pin = uart_rx_pin,
    +        .clock_config = rp2040.clock_config,
    +    });
    +
    +    rp2040.uart.init_logger(uart);
    +
    +    var i: u32 = 0;
    +    while (true) : (i += 1) {
    +        led.put(1);
    +        std.log.info("what {}", .{i});
    +        time.sleep_ms(500);
    +
    +        led.put(0);
    +        time.sleep_ms(500);
    +    }
    +}
    diff --git a/rp2040/src/usb_device.zig b/rp2040/src/usb_device.zig
    new file mode 100644
    index 000000000..8f2d74e4f
    --- /dev/null
    +++ b/rp2040/src/usb_device.zig
    @@ -0,0 +1,172 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +
    +const rp2040 = microzig.hal;
    +const flash = rp2040.flash;
    +const time = rp2040.time;
    +const gpio = rp2040.gpio;
    +const clocks = rp2040.clocks;
    +const usb = rp2040.usb;
    +
    +const led = gpio.num(25);
    +const uart = rp2040.uart.num(0);
    +const baud_rate = 115200;
    +const uart_tx_pin = gpio.num(0);
    +const uart_rx_pin = gpio.num(1);
    +
    +// First we define two callbacks that will be used by the endpoints we define next...
    +fn ep1_in_callback(dc: *usb.DeviceConfiguration, data: []const u8) void {
    +    _ = data;
    +    // The host has collected the data we repeated onto
    +    // EP1! Set up to receive more data on EP1.
    +    usb.Usb.callbacks.usb_start_rx(
    +        dc.endpoints[2], // EP1_OUT_CFG,
    +        64,
    +    );
    +}
    +
    +fn ep1_out_callback(dc: *usb.DeviceConfiguration, data: []const u8) void {
    +    // We've gotten data from the host on our custom
    +    // EP1! Set up EP1 to repeat it.
    +    usb.Usb.callbacks.usb_start_tx(
    +        dc.endpoints[3], // EP1_IN_CFG,
    +        data,
    +    );
    +}
    +
    +// The endpoints EP0_IN and EP0_OUT are already defined but you can
    +// add your own endpoints to...
    +pub var EP1_OUT_CFG: usb.EndpointConfiguration = .{
    +    .descriptor = &usb.EndpointDescriptor{
    +        .length = @as(u8, @intCast(@sizeOf(usb.EndpointDescriptor))),
    +        .descriptor_type = usb.DescType.Endpoint,
    +        .endpoint_address = usb.Dir.Out.endpoint(1),
    +        .attributes = @intFromEnum(usb.TransferType.Bulk),
    +        .max_packet_size = 64,
    +        .interval = 0,
    +    },
    +    .endpoint_control_index = 2,
    +    .buffer_control_index = 3,
    +    .data_buffer_index = 2,
    +    .next_pid_1 = false,
    +    // The callback will be executed if we got an interrupt on EP1_OUT
    +    .callback = ep1_out_callback,
    +};
    +
    +pub var EP1_IN_CFG: usb.EndpointConfiguration = .{
    +    .descriptor = &usb.EndpointDescriptor{
    +        .length = @as(u8, @intCast(@sizeOf(usb.EndpointDescriptor))),
    +        .descriptor_type = usb.DescType.Endpoint,
    +        .endpoint_address = usb.Dir.In.endpoint(1),
    +        .attributes = @intFromEnum(usb.TransferType.Bulk),
    +        .max_packet_size = 64,
    +        .interval = 0,
    +    },
    +    .endpoint_control_index = 1,
    +    .buffer_control_index = 2,
    +    .data_buffer_index = 3,
    +    .next_pid_1 = false,
    +    // The callback will be executed if we got an interrupt on EP1_IN
    +    .callback = ep1_in_callback,
    +};
    +
    +// This is our device configuration
    +pub var DEVICE_CONFIGURATION: usb.DeviceConfiguration = .{
    +    .device_descriptor = &.{
    +        .length = @as(u8, @intCast(@sizeOf(usb.DeviceDescriptor))),
    +        .descriptor_type = usb.DescType.Device,
    +        .bcd_usb = 0x0110,
    +        .device_class = 0,
    +        .device_subclass = 0,
    +        .device_protocol = 0,
    +        .max_packet_size0 = 64,
    +        .vendor = 0,
    +        .product = 1,
    +        .bcd_device = 0,
    +        .manufacturer_s = 1,
    +        .product_s = 2,
    +        .serial_s = 0,
    +        .num_configurations = 1,
    +    },
    +    .interface_descriptor = &.{
    +        .length = @as(u8, @intCast(@sizeOf(usb.InterfaceDescriptor))),
    +        .descriptor_type = usb.DescType.Interface,
    +        .interface_number = 0,
    +        .alternate_setting = 0,
    +        // We have two endpoints (EP0 IN/OUT don't count)
    +        .num_endpoints = 2,
    +        .interface_class = 0xff,
    +        .interface_subclass = 0,
    +        .interface_protocol = 0,
    +        .interface_s = 0,
    +    },
    +    .config_descriptor = &.{
    +        .length = @as(u8, @intCast(@sizeOf(usb.ConfigurationDescriptor))),
    +        .descriptor_type = usb.DescType.Config,
    +        .total_length = @as(u8, @intCast(@sizeOf(usb.ConfigurationDescriptor) + @sizeOf(usb.InterfaceDescriptor) + @sizeOf(usb.EndpointDescriptor) + @sizeOf(usb.EndpointDescriptor))),
    +        .num_interfaces = 1,
    +        .configuration_value = 1,
    +        .configuration_s = 0,
    +        .attributes = 0xc0,
    +        .max_power = 0x32,
    +    },
    +    .lang_descriptor = "\x04\x03\x09\x04", // length || string descriptor (0x03) || Engl (0x0409)
    +    .descriptor_strings = &.{
    +        // ugly unicode :|
    +        "R\x00a\x00s\x00p\x00b\x00e\x00r\x00r\x00y\x00 \x00P\x00i\x00",
    +        "P\x00i\x00c\x00o\x00 \x00T\x00e\x00s\x00t\x00 \x00D\x00e\x00v\x00i\x00c\x00e\x00",
    +    },
    +    // Here we pass all endpoints to the config
    +    // Dont forget to pass EP0_[IN|OUT] in the order seen below!
    +    .endpoints = .{
    +        &usb.EP0_OUT_CFG,
    +        &usb.EP0_IN_CFG,
    +        &EP1_OUT_CFG,
    +        &EP1_IN_CFG,
    +    },
    +};
    +
    +pub fn panic(message: []const u8, _: ?*std.builtin.StackTrace, _: ?usize) noreturn {
    +    std.log.err("panic: {s}", .{message});
    +    @breakpoint();
    +    while (true) {}
    +}
    +
    +pub const std_options = struct {
    +    pub const log_level = .debug;
    +    pub const logFn = rp2040.uart.log;
    +};
    +
    +pub fn main() !void {
    +    led.set_function(.sio);
    +    led.set_direction(.out);
    +    led.put(1);
    +
    +    uart.apply(.{
    +        .baud_rate = baud_rate,
    +        .tx_pin = uart_tx_pin,
    +        .rx_pin = uart_rx_pin,
    +        .clock_config = rp2040.clock_config,
    +    });
    +
    +    rp2040.uart.init_logger(uart);
    +
    +    // First we initialize the USB clock
    +    rp2040.usb.Usb.init_clk();
    +    // Then initialize the USB device using the configuration defined above
    +    rp2040.usb.Usb.init_device(&DEVICE_CONFIGURATION) catch unreachable;
    +    var old: u64 = time.get_time_since_boot().to_us();
    +    var new: u64 = 0;
    +    while (true) {
    +        // You can now poll for USB events
    +        rp2040.usb.Usb.task(
    +            false, // debug output over UART [Y/n]
    +        ) catch unreachable;
    +
    +        new = time.get_time_since_boot().to_us();
    +        if (new - old > 500000) {
    +            old = new;
    +            led.toggle();
    +        }
    +    }
    +}
    diff --git a/rp2040/src/usb_hid.zig b/rp2040/src/usb_hid.zig
    new file mode 100644
    index 000000000..752111ad0
    --- /dev/null
    +++ b/rp2040/src/usb_hid.zig
    @@ -0,0 +1,187 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +
    +const rp2040 = microzig.hal;
    +const flash = rp2040.flash;
    +const time = rp2040.time;
    +const gpio = rp2040.gpio;
    +const clocks = rp2040.clocks;
    +const usb = rp2040.usb;
    +
    +const led = gpio.num(25);
    +const uart = rp2040.uart.num(0);
    +const baud_rate = 115200;
    +const uart_tx_pin = gpio.num(0);
    +const uart_rx_pin = gpio.num(1);
    +
    +// First we define two callbacks that will be used by the endpoints we define next...
    +fn ep1_in_callback(dc: *usb.DeviceConfiguration, data: []const u8) void {
    +    _ = data;
    +    // The host has collected the data we repeated onto
    +    // EP1! Set up to receive more data on EP1.
    +    usb.Usb.callbacks.usb_start_rx(
    +        dc.endpoints[2], // EP1_OUT_CFG,
    +        64,
    +    );
    +}
    +
    +fn ep1_out_callback(dc: *usb.DeviceConfiguration, data: []const u8) void {
    +    // We've gotten data from the host on our custom
    +    // EP1! Set up EP1 to repeat it.
    +    usb.Usb.callbacks.usb_start_tx(
    +        dc.endpoints[3], // EP1_IN_CFG,
    +        data,
    +    );
    +}
    +
    +// The endpoints EP0_IN and EP0_OUT are already defined but you can
    +// add your own endpoints to...
    +pub var EP1_OUT_CFG: usb.EndpointConfiguration = .{
    +    .descriptor = &usb.EndpointDescriptor{
    +        .length = @as(u8, @intCast(@sizeOf(usb.EndpointDescriptor))),
    +        .descriptor_type = usb.DescType.Endpoint,
    +        .endpoint_address = usb.Dir.Out.endpoint(1),
    +        .attributes = @intFromEnum(usb.TransferType.Interrupt),
    +        .max_packet_size = 64,
    +        .interval = 0,
    +    },
    +    .endpoint_control_index = 2,
    +    .buffer_control_index = 3,
    +    .data_buffer_index = 2,
    +    .next_pid_1 = false,
    +    // The callback will be executed if we got an interrupt on EP1_OUT
    +    .callback = ep1_out_callback,
    +};
    +
    +pub var EP1_IN_CFG: usb.EndpointConfiguration = .{
    +    .descriptor = &usb.EndpointDescriptor{
    +        .length = @as(u8, @intCast(@sizeOf(usb.EndpointDescriptor))),
    +        .descriptor_type = usb.DescType.Endpoint,
    +        .endpoint_address = usb.Dir.In.endpoint(1),
    +        .attributes = @intFromEnum(usb.TransferType.Interrupt),
    +        .max_packet_size = 64,
    +        .interval = 0,
    +    },
    +    .endpoint_control_index = 1,
    +    .buffer_control_index = 2,
    +    .data_buffer_index = 3,
    +    .next_pid_1 = false,
    +    // The callback will be executed if we got an interrupt on EP1_IN
    +    .callback = ep1_in_callback,
    +};
    +
    +// This is our device configuration
    +pub var DEVICE_CONFIGURATION: usb.DeviceConfiguration = .{
    +    .device_descriptor = &.{
    +        .length = @as(u8, @intCast(@sizeOf(usb.DeviceDescriptor))),
    +        .descriptor_type = usb.DescType.Device,
    +        .bcd_usb = 0x0200,
    +        .device_class = 0,
    +        .device_subclass = 0,
    +        .device_protocol = 0,
    +        .max_packet_size0 = 64,
    +        .vendor = 0xCafe,
    +        .product = 1,
    +        .bcd_device = 0x0100,
    +        // Those are indices to the descriptor strings
    +        // Make sure to provide enough string descriptors!
    +        .manufacturer_s = 1,
    +        .product_s = 2,
    +        .serial_s = 3,
    +        .num_configurations = 1,
    +    },
    +    .interface_descriptor = &.{
    +        .length = @as(u8, @intCast(@sizeOf(usb.InterfaceDescriptor))),
    +        .descriptor_type = usb.DescType.Interface,
    +        .interface_number = 0,
    +        .alternate_setting = 0,
    +        // We have two endpoints (EP0 IN/OUT don't count)
    +        .num_endpoints = 2,
    +        .interface_class = 3,
    +        .interface_subclass = 0,
    +        .interface_protocol = 0,
    +        .interface_s = 0,
    +    },
    +    .config_descriptor = &.{
    +        .length = @as(u8, @intCast(@sizeOf(usb.ConfigurationDescriptor))),
    +        .descriptor_type = usb.DescType.Config,
    +        .total_length = @as(u8, @intCast(@sizeOf(usb.ConfigurationDescriptor) + @sizeOf(usb.InterfaceDescriptor) + @sizeOf(usb.EndpointDescriptor) + @sizeOf(usb.EndpointDescriptor))),
    +        .num_interfaces = 1,
    +        .configuration_value = 1,
    +        .configuration_s = 0,
    +        .attributes = 0xc0,
    +        .max_power = 0x32,
    +    },
    +    .lang_descriptor = "\x04\x03\x09\x04", // length || string descriptor (0x03) || Engl (0x0409)
    +    .descriptor_strings = &.{
    +        // ugly unicode :|
    +        //"R\x00a\x00s\x00p\x00b\x00e\x00r\x00r\x00y\x00 \x00P\x00i\x00",
    +        &usb.utf8ToUtf16Le("Raspberry Pi"),
    +        //"P\x00i\x00c\x00o\x00 \x00T\x00e\x00s\x00t\x00 \x00D\x00e\x00v\x00i\x00c\x00e\x00",
    +        &usb.utf8ToUtf16Le("Pico Test Device"),
    +        //"c\x00a\x00f\x00e\x00b\x00a\x00b\x00e\x00",
    +        &usb.utf8ToUtf16Le("cafebabe"),
    +    },
    +    .hid = .{
    +        .hid_descriptor = &.{
    +            .bcd_hid = 0x0111,
    +            .country_code = 0,
    +            .num_descriptors = 1,
    +            .report_length = 34,
    +        },
    +        .report_descriptor = &usb.hid.ReportDescriptorFidoU2f,
    +    },
    +    // Here we pass all endpoints to the config
    +    // Dont forget to pass EP0_[IN|OUT] in the order seen below!
    +    .endpoints = .{
    +        &usb.EP0_OUT_CFG,
    +        &usb.EP0_IN_CFG,
    +        &EP1_OUT_CFG,
    +        &EP1_IN_CFG,
    +    },
    +};
    +
    +pub fn panic(message: []const u8, _: ?*std.builtin.StackTrace, _: ?usize) noreturn {
    +    std.log.err("panic: {s}", .{message});
    +    @breakpoint();
    +    while (true) {}
    +}
    +
    +pub const std_options = struct {
    +    pub const log_level = .debug;
    +    pub const logFn = rp2040.uart.log;
    +};
    +
    +pub fn main() !void {
    +    led.set_function(.sio);
    +    led.set_direction(.out);
    +    led.put(1);
    +
    +    uart.apply(.{
    +        .baud_rate = baud_rate,
    +        .tx_pin = uart_tx_pin,
    +        .rx_pin = uart_rx_pin,
    +        .clock_config = rp2040.clock_config,
    +    });
    +
    +    rp2040.uart.init_logger(uart);
    +
    +    // First we initialize the USB clock
    +    rp2040.usb.Usb.init_clk();
    +    // Then initialize the USB device using the configuration defined above
    +    rp2040.usb.Usb.init_device(&DEVICE_CONFIGURATION) catch unreachable;
    +    var old: u64 = time.get_time_since_boot().to_us();
    +    var new: u64 = 0;
    +    while (true) {
    +        // You can now poll for USB events
    +        rp2040.usb.Usb.task(
    +            true, // debug output over UART [Y/n]
    +        ) catch unreachable;
    +
    +        new = time.get_time_since_boot().to_us();
    +        if (new - old > 500000) {
    +            old = new;
    +            led.toggle();
    +        }
    +    }
    +}
    diff --git a/rp2040/src/ws2812.zig b/rp2040/src/ws2812.zig
    new file mode 100644
    index 000000000..64fbac225
    --- /dev/null
    +++ b/rp2040/src/ws2812.zig
    @@ -0,0 +1,94 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +const rp2040 = microzig.hal;
    +const gpio = rp2040.gpio;
    +const Pio = rp2040.pio.Pio;
    +const StateMachine = rp2040.pio.StateMachine;
    +
    +const ws2812_program = blk: {
    +    @setEvalBranchQuota(5000);
    +    break :blk rp2040.pio.assemble(
    +        \\;
    +        \\; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    +        \\;
    +        \\; SPDX-License-Identifier: BSD-3-Clause
    +        \\;
    +        \\.program ws2812
    +        \\.side_set 1
    +        \\
    +        \\.define public T1 2
    +        \\.define public T2 5
    +        \\.define public T3 3
    +        \\
    +        \\.wrap_target
    +        \\bitloop:
    +        \\    out x, 1       side 0 [T3 - 1] ; Side-set still takes place when instruction stalls
    +        \\    jmp !x do_zero side 1 [T1 - 1] ; Branch on the bit we shifted out. Positive pulse
    +        \\do_one:
    +        \\    jmp  bitloop   side 1 [T2 - 1] ; Continue driving high, for a long pulse
    +        \\do_zero:
    +        \\    nop            side 0 [T2 - 1] ; Or drive low, for a short pulse
    +        \\.wrap
    +    , .{}).get_program_by_name("ws2812");
    +};
    +
    +const pio: Pio = .pio0;
    +const sm: StateMachine = .sm0;
    +const led_pin = gpio.num(23);
    +
    +pub fn main() void {
    +    pio.gpio_init(led_pin);
    +    sm_set_consecutive_pindirs(pio, sm, @intFromEnum(led_pin), 1, true);
    +
    +    const cycles_per_bit: comptime_int = ws2812_program.defines[0].value + //T1
    +        ws2812_program.defines[1].value + //T2
    +        ws2812_program.defines[2].value; //T3
    +    const div = @as(f32, @floatFromInt(rp2040.clock_config.sys.?.output_freq)) /
    +        (800_000 * cycles_per_bit);
    +
    +    pio.sm_load_and_start_program(sm, ws2812_program, .{
    +        .clkdiv = rp2040.pio.ClkDivOptions.from_float(div),
    +        .pin_mappings = .{
    +            .side_set = .{
    +                .base = @intFromEnum(led_pin),
    +                .count = 1,
    +            },
    +        },
    +        .shift = .{
    +            .out_shiftdir = .left,
    +            .autopull = true,
    +            .pull_threshold = 24,
    +            .join_tx = true,
    +        },
    +    }) catch unreachable;
    +    pio.sm_set_enabled(sm, true);
    +
    +    while (true) {
    +        pio.sm_blocking_write(sm, 0x00ff00 << 8); //red
    +        rp2040.time.sleep_ms(1000);
    +        pio.sm_blocking_write(sm, 0xff0000 << 8); //green
    +        rp2040.time.sleep_ms(1000);
    +        pio.sm_blocking_write(sm, 0x0000ff << 8); //blue
    +        rp2040.time.sleep_ms(1000);
    +    }
    +}
    +
    +fn sm_set_consecutive_pindirs(_pio: Pio, _sm: StateMachine, pin: u5, count: u3, is_out: bool) void {
    +    const sm_regs = _pio.get_sm_regs(_sm);
    +    const pinctrl_saved = sm_regs.pinctrl.raw;
    +    sm_regs.pinctrl.modify(.{
    +        .SET_BASE = pin,
    +        .SET_COUNT = count,
    +    });
    +    _pio.sm_exec(_sm, rp2040.pio.Instruction{
    +        .tag = .set,
    +        .delay_side_set = 0,
    +        .payload = .{
    +            .set = .{
    +                .data = @intFromBool(is_out),
    +                .destination = .pindirs,
    +            },
    +        },
    +    });
    +    sm_regs.pinctrl.raw = pinctrl_saved;
    +}
    diff --git a/shell.nix b/shell.nix
    deleted file mode 100644
    index b1724c483..000000000
    --- a/shell.nix
    +++ /dev/null
    @@ -1,9 +0,0 @@
    -{pkgs ? import  {}}:
    -pkgs.mkShell {
    -  nativeBuildInputs = [
    -    pkgs.zig_0_11_0
    -    pkgs.picotool
    -    pkgs.llvmPackages_16.bintools
    -  ];
    -  buildInputs = [];
    -}
    diff --git a/stmicro-stm32/build.zig b/stmicro-stm32/build.zig
    new file mode 100644
    index 000000000..406477261
    --- /dev/null
    +++ b/stmicro-stm32/build.zig
    @@ -0,0 +1,84 @@
    +const std = @import("std");
    +const rp2040 = @import("rp2040");
    +const stm32 = @import("stm32");
    +const lpc = @import("lpc");
    +const gd32 = @import("gd32");
    +const nrf5x = @import("nrf5x");
    +const esp = @import("esp");
    +const atmega = @import("atmega");
    +
    +pub fn build(b: *std.Build) void {
    +    const microzig = @import("microzig").init(b, "microzig");
    +    const optimize = b.standardOptimizeOption(.{});
    +
    +    const TargetDesc = struct {
    +        target: @import("microzig").Target,
    +        name: []const u8,
    +    };
    +
    +    const available_targets = [_]TargetDesc{
    +        // RP2040
    +        .{ .name = "pico", .target = rp2040.boards.raspberry_pi.pico },
    +        .{ .name = "rp2040-eth", .target = rp2040.boards.waveshare.rp2040_eth },
    +        .{ .name = "rp2040-plus-4m", .target = rp2040.boards.waveshare.rp2040_plus_4m },
    +        .{ .name = "rp2040-plus-16m", .target = rp2040.boards.waveshare.rp2040_plus_16m },
    +        .{ .name = "rp2040-matrix", .target = rp2040.boards.waveshare.rp2040_matrix },
    +
    +        // STM32
    +        .{ .name = "stm32f103x8", .target = stm32.chips.stm32f103x8 },
    +        .{ .name = "stm32f303vc", .target = stm32.chips.stm32f303vc },
    +        .{ .name = "stm32f407vg", .target = stm32.chips.stm32f407vg },
    +        .{ .name = "stm32f429zit6u", .target = stm32.chips.stm32f429zit6u },
    +        .{ .name = "stm32f3discovery", .target = stm32.boards.stm32f3discovery },
    +        .{ .name = "stm32f4discovery", .target = stm32.boards.stm32f4discovery },
    +        .{ .name = "stm3240geval", .target = stm32.boards.stm3240geval },
    +        .{ .name = "stm32f429idiscovery", .target = stm32.boards.stm32f429idiscovery },
    +
    +        // NXP LPC
    +        .{ .name = "lpc176x5x", .target = lpc.chips.lpc176x5x },
    +        .{ .name = "mbed-lpc1768", .target = lpc.boards.mbed.lpc1768 },
    +
    +        // GigaDevice GD32
    +        .{ .name = "gd32vf103xb", .target = gd32.chips.gd32vf103xb },
    +        .{ .name = "gd32vf103x8", .target = gd32.chips.gd32vf103x8 },
    +        .{ .name = "sipeed-longan_nano", .target = gd32.boards.sipeed.longan_nano },
    +
    +        // Nordic Nrf5x
    +        .{ .name = "nrf52832", .target = nrf5x.chips.nrf52832 },
    +        .{ .name = "nrf52840", .target = nrf5x.chips.nrf52840 },
    +        .{ .name = "nrf52840-dongle", .target = nrf5x.boards.nordic.nRF52840_Dongle }, // TODO: Add support for DFU files!
    +
    +        // RISC-V Espressif ESP
    +        .{ .name = "esp32-c3", .target = esp.chips.esp32_c3 }, // TODO: Add support for Espressif Update Binaries
    +
    +        // Microchip ATmega
    +        // TODO: Fix compiler bugs
    +        // - https://github.com/ziglang/zig/issues/17219
    +        // .{ .name = "atmega328p", .target = atmega.chips.atmega328p },
    +        // .{ .name = "arduino-nano", .target = atmega.boards.arduino.nano },
    +        // .{ .name = "arduino-uno-rev3", .target = atmega.boards.arduino.uno_rev3 },
    +    };
    +
    +    for (available_targets) |dest| {
    +        // `addFirmware` basically works like addExecutable, but takes a
    +        // `microzig.Target` for target instead of a `std.zig.CrossTarget`.
    +        //
    +        // The target will convey all necessary information on the chip,
    +        // cpu and potentially the board as well.
    +        const firmware = microzig.addFirmware(b, .{
    +            .name = b.fmt("empty-{s}", .{dest.name}),
    +            .target = dest.target,
    +            .optimize = optimize,
    +            .source_file = .{ .path = "src/empty.zig" },
    +        });
    +
    +        // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()`
    +        // and allows installing the firmware as a typical firmware file.
    +        //
    +        // This will also install into `$prefix/firmware` instead of `$prefix/bin`.
    +        microzig.installFirmware(b, firmware, .{});
    +
    +        // For debugging, we also always install the firmware as an ELF file
    +        microzig.installFirmware(b, firmware, .{ .format = .elf });
    +    }
    +}
    diff --git a/stmicro-stm32/build.zig.zon b/stmicro-stm32/build.zig.zon
    new file mode 100644
    index 000000000..e54d44fbf
    --- /dev/null
    +++ b/stmicro-stm32/build.zig.zon
    @@ -0,0 +1,14 @@
    +.{
    +    .name = "microzig-stmicro-stm32-examples",
    +    .version = "0.1.0",
    +    .dependencies = .{
    +        .microzig = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/c6c9ec4516f57638e751141085c9d76120990312.tar.gz",
    +            .hash = "1220af58bdaa721b8189f3a7adfda660517dd354463463388e96d69fe4ceccf80b92",
    +        },
    +        .stm32 = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/stmicro-stm32/archive/cb2893707efa6aa289fa72f02959ad5f2d9db2a1.tar.gz",
    +            .hash = "12208cab5f60ef97cac4165ad694f3ba0c7b28f279538c1539b74f7c152f34fe306d",
    +        },
    +    },
    +}
    
    From c1f553d20335ea1eca135a091a44678249b60210 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Sat, 23 Sep 2023 18:20:00 +0200
    Subject: [PATCH 214/286] Fixes CI
    
    ---
     .github/workflows/build.yml               | 16 ++++++++++++++--
     {generic => all-platforms}/build.zig      |  0
     {generic => all-platforms}/build.zig.zon  |  0
     {generic => all-platforms}/src/blinky.zig |  0
     {generic => all-platforms}/src/empty.zig  |  0
     espressif-esp/{blinky => src}/blinky.zig  |  0
     6 files changed, 14 insertions(+), 2 deletions(-)
     rename {generic => all-platforms}/build.zig (100%)
     rename {generic => all-platforms}/build.zig.zon (100%)
     rename {generic => all-platforms}/src/blinky.zig (100%)
     rename {generic => all-platforms}/src/empty.zig (100%)
     rename espressif-esp/{blinky => src}/blinky.zig (100%)
    
    diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
    index ee9f1bb00..ac3fd430b 100644
    --- a/.github/workflows/build.yml
    +++ b/.github/workflows/build.yml
    @@ -9,9 +9,21 @@ jobs:
       build:
         runs-on: ${{ matrix.os }}
         strategy:
    +      fail-fast: false
           matrix:
    -        os: [windows-latest, macos-latest, ubuntu-latest]
    -        dir: espressif-esp  generic  gigadevice-gd32  microchip-atmega  nordic-nrf5x  nxp-lpc  rp2040  stmicro-stm32
    +        os:
    +          - windows-latest
    +          - macos-latest
    +          - ubuntu-latest
    +        dir:
    +          - all-platforms
    +          - espressif-esp
    +          - gigadevice-gd32
    +          - microchip-atmega
    +          - nordic-nrf5x
    +          - nxp-lpc
    +          - rp2040
    +          - stmicro-stm32
         steps:
           - name: Checkout
             uses: actions/checkout@v2
    diff --git a/generic/build.zig b/all-platforms/build.zig
    similarity index 100%
    rename from generic/build.zig
    rename to all-platforms/build.zig
    diff --git a/generic/build.zig.zon b/all-platforms/build.zig.zon
    similarity index 100%
    rename from generic/build.zig.zon
    rename to all-platforms/build.zig.zon
    diff --git a/generic/src/blinky.zig b/all-platforms/src/blinky.zig
    similarity index 100%
    rename from generic/src/blinky.zig
    rename to all-platforms/src/blinky.zig
    diff --git a/generic/src/empty.zig b/all-platforms/src/empty.zig
    similarity index 100%
    rename from generic/src/empty.zig
    rename to all-platforms/src/empty.zig
    diff --git a/espressif-esp/blinky/blinky.zig b/espressif-esp/src/blinky.zig
    similarity index 100%
    rename from espressif-esp/blinky/blinky.zig
    rename to espressif-esp/src/blinky.zig
    
    From 80a16e10eb2d081beed28dfd3a83c0378100ecab Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Sat, 23 Sep 2023 18:28:32 +0200
    Subject: [PATCH 215/286] Fixes all-platforms
    
    ---
     all-platforms/build.zig.zon | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/all-platforms/build.zig.zon b/all-platforms/build.zig.zon
    index fba280d24..5513788d9 100644
    --- a/all-platforms/build.zig.zon
    +++ b/all-platforms/build.zig.zon
    @@ -1,5 +1,5 @@
     .{
    -    .name = "microzig-generic-examples",
    +    .name = "microzig-all-platforms-examples",
         .version = "0.1.0",
         .dependencies = .{
             .microzig = .{
    
    From def3a61e2839ee04dcc2c411b4eeb0da87903d55 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Sat, 23 Sep 2023 18:35:38 +0200
    Subject: [PATCH 216/286] Starts to work on raspberrypi-rp2040 examples
    
    ---
     .github/workflows/build.yml                   | 18 ++--
     all-platforms/build.zig                       | 88 +++++++++----------
     raspberrypi-rp2040/build.zig                  | 62 +++++++++++++
     {rp2040 => raspberrypi-rp2040}/build.zig.zon  |  0
     .../scripts/hid_test.py                       |  0
     .../scripts/usb_device_loopback.py            |  0
     {rp2040 => raspberrypi-rp2040}/src/adc.zig    |  0
     {rp2040 => raspberrypi-rp2040}/src/blinky.zig |  0
     .../src/blinky_core1.zig                      |  0
     .../src/flash_program.zig                     |  0
     .../src/gpio_clk.zig                          |  0
     .../src/i2c_bus_scan.zig                      |  0
     {rp2040 => raspberrypi-rp2040}/src/pwm.zig    |  0
     {rp2040 => raspberrypi-rp2040}/src/random.zig |  0
     .../src/spi_master.zig                        |  0
     .../src/squarewave.zig                        |  0
     {rp2040 => raspberrypi-rp2040}/src/uart.zig   |  0
     .../src/usb_device.zig                        |  0
     .../src/usb_hid.zig                           |  0
     {rp2040 => raspberrypi-rp2040}/src/ws2812.zig |  0
     rp2040/build.zig                              | 84 ------------------
     21 files changed, 115 insertions(+), 137 deletions(-)
     create mode 100644 raspberrypi-rp2040/build.zig
     rename {rp2040 => raspberrypi-rp2040}/build.zig.zon (100%)
     rename {rp2040 => raspberrypi-rp2040}/scripts/hid_test.py (100%)
     rename {rp2040 => raspberrypi-rp2040}/scripts/usb_device_loopback.py (100%)
     rename {rp2040 => raspberrypi-rp2040}/src/adc.zig (100%)
     rename {rp2040 => raspberrypi-rp2040}/src/blinky.zig (100%)
     rename {rp2040 => raspberrypi-rp2040}/src/blinky_core1.zig (100%)
     rename {rp2040 => raspberrypi-rp2040}/src/flash_program.zig (100%)
     rename {rp2040 => raspberrypi-rp2040}/src/gpio_clk.zig (100%)
     rename {rp2040 => raspberrypi-rp2040}/src/i2c_bus_scan.zig (100%)
     rename {rp2040 => raspberrypi-rp2040}/src/pwm.zig (100%)
     rename {rp2040 => raspberrypi-rp2040}/src/random.zig (100%)
     rename {rp2040 => raspberrypi-rp2040}/src/spi_master.zig (100%)
     rename {rp2040 => raspberrypi-rp2040}/src/squarewave.zig (100%)
     rename {rp2040 => raspberrypi-rp2040}/src/uart.zig (100%)
     rename {rp2040 => raspberrypi-rp2040}/src/usb_device.zig (100%)
     rename {rp2040 => raspberrypi-rp2040}/src/usb_hid.zig (100%)
     rename {rp2040 => raspberrypi-rp2040}/src/ws2812.zig (100%)
     delete mode 100644 rp2040/build.zig
    
    diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
    index ac3fd430b..668835968 100644
    --- a/.github/workflows/build.yml
    +++ b/.github/workflows/build.yml
    @@ -11,19 +11,19 @@ jobs:
         strategy:
           fail-fast: false
           matrix:
    +        dir:
    +          - all-platforms
    +          - raspberrypi-rp2040
    +          # TODO: - espressif-esp
    +          # TODO: - gigadevice-gd32
    +          # TODO: - microchip-atmega
    +          # TODO: - nordic-nrf5x
    +          # TODO: - nxp-lpc
    +          # TODO: - stmicro-stm32
             os:
               - windows-latest
               - macos-latest
               - ubuntu-latest
    -        dir:
    -          - all-platforms
    -          - espressif-esp
    -          - gigadevice-gd32
    -          - microchip-atmega
    -          - nordic-nrf5x
    -          - nxp-lpc
    -          - rp2040
    -          - stmicro-stm32
         steps:
           - name: Checkout
             uses: actions/checkout@v2
    diff --git a/all-platforms/build.zig b/all-platforms/build.zig
    index 406477261..6cf3b48ad 100644
    --- a/all-platforms/build.zig
    +++ b/all-platforms/build.zig
    @@ -7,57 +7,52 @@ const nrf5x = @import("nrf5x");
     const esp = @import("esp");
     const atmega = @import("atmega");
     
    -pub fn build(b: *std.Build) void {
    -    const microzig = @import("microzig").init(b, "microzig");
    -    const optimize = b.standardOptimizeOption(.{});
    -
    -    const TargetDesc = struct {
    -        target: @import("microzig").Target,
    -        name: []const u8,
    -    };
    +const available_targets = [_]TargetDesc{
    +    // RP2040
    +    .{ .name = "pico", .target = rp2040.boards.raspberry_pi.pico },
    +    .{ .name = "rp2040-eth", .target = rp2040.boards.waveshare.rp2040_eth },
    +    .{ .name = "rp2040-plus-4m", .target = rp2040.boards.waveshare.rp2040_plus_4m },
    +    .{ .name = "rp2040-plus-16m", .target = rp2040.boards.waveshare.rp2040_plus_16m },
    +    .{ .name = "rp2040-matrix", .target = rp2040.boards.waveshare.rp2040_matrix },
     
    -    const available_targets = [_]TargetDesc{
    -        // RP2040
    -        .{ .name = "pico", .target = rp2040.boards.raspberry_pi.pico },
    -        .{ .name = "rp2040-eth", .target = rp2040.boards.waveshare.rp2040_eth },
    -        .{ .name = "rp2040-plus-4m", .target = rp2040.boards.waveshare.rp2040_plus_4m },
    -        .{ .name = "rp2040-plus-16m", .target = rp2040.boards.waveshare.rp2040_plus_16m },
    -        .{ .name = "rp2040-matrix", .target = rp2040.boards.waveshare.rp2040_matrix },
    +    // STM32
    +    .{ .name = "stm32f103x8", .target = stm32.chips.stm32f103x8 },
    +    .{ .name = "stm32f303vc", .target = stm32.chips.stm32f303vc },
    +    .{ .name = "stm32f407vg", .target = stm32.chips.stm32f407vg },
    +    .{ .name = "stm32f429zit6u", .target = stm32.chips.stm32f429zit6u },
    +    .{ .name = "stm32f3discovery", .target = stm32.boards.stm32f3discovery },
    +    .{ .name = "stm32f4discovery", .target = stm32.boards.stm32f4discovery },
    +    .{ .name = "stm3240geval", .target = stm32.boards.stm3240geval },
    +    .{ .name = "stm32f429idiscovery", .target = stm32.boards.stm32f429idiscovery },
     
    -        // STM32
    -        .{ .name = "stm32f103x8", .target = stm32.chips.stm32f103x8 },
    -        .{ .name = "stm32f303vc", .target = stm32.chips.stm32f303vc },
    -        .{ .name = "stm32f407vg", .target = stm32.chips.stm32f407vg },
    -        .{ .name = "stm32f429zit6u", .target = stm32.chips.stm32f429zit6u },
    -        .{ .name = "stm32f3discovery", .target = stm32.boards.stm32f3discovery },
    -        .{ .name = "stm32f4discovery", .target = stm32.boards.stm32f4discovery },
    -        .{ .name = "stm3240geval", .target = stm32.boards.stm3240geval },
    -        .{ .name = "stm32f429idiscovery", .target = stm32.boards.stm32f429idiscovery },
    +    // NXP LPC
    +    .{ .name = "lpc176x5x", .target = lpc.chips.lpc176x5x },
    +    .{ .name = "mbed-lpc1768", .target = lpc.boards.mbed.lpc1768 },
     
    -        // NXP LPC
    -        .{ .name = "lpc176x5x", .target = lpc.chips.lpc176x5x },
    -        .{ .name = "mbed-lpc1768", .target = lpc.boards.mbed.lpc1768 },
    +    // GigaDevice GD32
    +    .{ .name = "gd32vf103xb", .target = gd32.chips.gd32vf103xb },
    +    .{ .name = "gd32vf103x8", .target = gd32.chips.gd32vf103x8 },
    +    .{ .name = "sipeed-longan_nano", .target = gd32.boards.sipeed.longan_nano },
     
    -        // GigaDevice GD32
    -        .{ .name = "gd32vf103xb", .target = gd32.chips.gd32vf103xb },
    -        .{ .name = "gd32vf103x8", .target = gd32.chips.gd32vf103x8 },
    -        .{ .name = "sipeed-longan_nano", .target = gd32.boards.sipeed.longan_nano },
    +    // Nordic Nrf5x
    +    .{ .name = "nrf52832", .target = nrf5x.chips.nrf52832 },
    +    .{ .name = "nrf52840", .target = nrf5x.chips.nrf52840 },
    +    .{ .name = "nrf52840-dongle", .target = nrf5x.boards.nordic.nRF52840_Dongle }, // TODO: Add support for DFU files!
     
    -        // Nordic Nrf5x
    -        .{ .name = "nrf52832", .target = nrf5x.chips.nrf52832 },
    -        .{ .name = "nrf52840", .target = nrf5x.chips.nrf52840 },
    -        .{ .name = "nrf52840-dongle", .target = nrf5x.boards.nordic.nRF52840_Dongle }, // TODO: Add support for DFU files!
    +    // RISC-V Espressif ESP
    +    .{ .name = "esp32-c3", .target = esp.chips.esp32_c3 }, // TODO: Add support for Espressif Update Binaries
     
    -        // RISC-V Espressif ESP
    -        .{ .name = "esp32-c3", .target = esp.chips.esp32_c3 }, // TODO: Add support for Espressif Update Binaries
    +    // Microchip ATmega
    +    // TODO: Fix compiler bugs
    +    // - https://github.com/ziglang/zig/issues/17219
    +    // .{ .name = "atmega328p", .target = atmega.chips.atmega328p },
    +    // .{ .name = "arduino-nano", .target = atmega.boards.arduino.nano },
    +    // .{ .name = "arduino-uno-rev3", .target = atmega.boards.arduino.uno_rev3 },
    +};
     
    -        // Microchip ATmega
    -        // TODO: Fix compiler bugs
    -        // - https://github.com/ziglang/zig/issues/17219
    -        // .{ .name = "atmega328p", .target = atmega.chips.atmega328p },
    -        // .{ .name = "arduino-nano", .target = atmega.boards.arduino.nano },
    -        // .{ .name = "arduino-uno-rev3", .target = atmega.boards.arduino.uno_rev3 },
    -    };
    +pub fn build(b: *std.Build) void {
    +    const microzig = @import("microzig").init(b, "microzig");
    +    const optimize = b.standardOptimizeOption(.{});
     
         for (available_targets) |dest| {
             // `addFirmware` basically works like addExecutable, but takes a
    @@ -82,3 +77,8 @@ pub fn build(b: *std.Build) void {
             microzig.installFirmware(b, firmware, .{ .format = .elf });
         }
     }
    +
    +const TargetDesc = struct {
    +    target: @import("microzig").Target,
    +    name: []const u8,
    +};
    diff --git a/raspberrypi-rp2040/build.zig b/raspberrypi-rp2040/build.zig
    new file mode 100644
    index 000000000..c5845720c
    --- /dev/null
    +++ b/raspberrypi-rp2040/build.zig
    @@ -0,0 +1,62 @@
    +const std = @import("std");
    +const rp2040 = @import("rp2040");
    +
    +const available_targets = [_]TargetDesc{
    +    .{ .name = "pico", .target = rp2040.boards.raspberry_pi.pico },
    +    .{ .name = "rp2040-eth", .target = rp2040.boards.waveshare.rp2040_eth },
    +    .{ .name = "rp2040-plus-4m", .target = rp2040.boards.waveshare.rp2040_plus_4m },
    +    .{ .name = "rp2040-plus-16m", .target = rp2040.boards.waveshare.rp2040_plus_16m },
    +    .{ .name = "rp2040-matrix", .target = rp2040.boards.waveshare.rp2040_matrix },
    +};
    +
    +const available_examples = [_][]const u8{
    +    "src/adc.zig",
    +    "src/blinky.zig",
    +    "src/blinky_core1.zig",
    +    "src/flash_program.zig",
    +    "src/gpio_clk.zig",
    +    "src/i2c_bus_scan.zig",
    +    "src/pwm.zig",
    +    "src/random.zig",
    +    "src/spi_master.zig",
    +    "src/squarewave.zig",
    +    "src/uart.zig",
    +    "src/usb_device.zig",
    +    "src/usb_hid.zig",
    +    "src/ws2812.zig",
    +};
    +
    +pub fn build(b: *std.Build) void {
    +    const microzig = @import("microzig").init(b, "microzig");
    +    const optimize = b.standardOptimizeOption(.{});
    +
    +    for (available_targets) |target| {
    +        for (available_examples) |example| {
    +            // `addFirmware` basically works like addExecutable, but takes a
    +            // `microzig.Target` for target instead of a `std.zig.CrossTarget`.
    +            //
    +            // The target will convey all necessary information on the chip,
    +            // cpu and potentially the board as well.
    +            const firmware = microzig.addFirmware(b, .{
    +                .name = b.fmt("{s}-{s}", .{ std.fs.path.stem(example), target.name }),
    +                .target = target.target,
    +                .optimize = optimize,
    +                .source_file = .{ .path = example },
    +            });
    +
    +            // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()`
    +            // and allows installing the firmware as a typical firmware file.
    +            //
    +            // This will also install into `$prefix/firmware` instead of `$prefix/bin`.
    +            microzig.installFirmware(b, firmware, .{});
    +
    +            // For debugging, we also always install the firmware as an ELF file
    +            microzig.installFirmware(b, firmware, .{ .format = .elf });
    +        }
    +    }
    +}
    +
    +const TargetDesc = struct {
    +    target: @import("microzig").Target,
    +    name: []const u8,
    +};
    diff --git a/rp2040/build.zig.zon b/raspberrypi-rp2040/build.zig.zon
    similarity index 100%
    rename from rp2040/build.zig.zon
    rename to raspberrypi-rp2040/build.zig.zon
    diff --git a/rp2040/scripts/hid_test.py b/raspberrypi-rp2040/scripts/hid_test.py
    similarity index 100%
    rename from rp2040/scripts/hid_test.py
    rename to raspberrypi-rp2040/scripts/hid_test.py
    diff --git a/rp2040/scripts/usb_device_loopback.py b/raspberrypi-rp2040/scripts/usb_device_loopback.py
    similarity index 100%
    rename from rp2040/scripts/usb_device_loopback.py
    rename to raspberrypi-rp2040/scripts/usb_device_loopback.py
    diff --git a/rp2040/src/adc.zig b/raspberrypi-rp2040/src/adc.zig
    similarity index 100%
    rename from rp2040/src/adc.zig
    rename to raspberrypi-rp2040/src/adc.zig
    diff --git a/rp2040/src/blinky.zig b/raspberrypi-rp2040/src/blinky.zig
    similarity index 100%
    rename from rp2040/src/blinky.zig
    rename to raspberrypi-rp2040/src/blinky.zig
    diff --git a/rp2040/src/blinky_core1.zig b/raspberrypi-rp2040/src/blinky_core1.zig
    similarity index 100%
    rename from rp2040/src/blinky_core1.zig
    rename to raspberrypi-rp2040/src/blinky_core1.zig
    diff --git a/rp2040/src/flash_program.zig b/raspberrypi-rp2040/src/flash_program.zig
    similarity index 100%
    rename from rp2040/src/flash_program.zig
    rename to raspberrypi-rp2040/src/flash_program.zig
    diff --git a/rp2040/src/gpio_clk.zig b/raspberrypi-rp2040/src/gpio_clk.zig
    similarity index 100%
    rename from rp2040/src/gpio_clk.zig
    rename to raspberrypi-rp2040/src/gpio_clk.zig
    diff --git a/rp2040/src/i2c_bus_scan.zig b/raspberrypi-rp2040/src/i2c_bus_scan.zig
    similarity index 100%
    rename from rp2040/src/i2c_bus_scan.zig
    rename to raspberrypi-rp2040/src/i2c_bus_scan.zig
    diff --git a/rp2040/src/pwm.zig b/raspberrypi-rp2040/src/pwm.zig
    similarity index 100%
    rename from rp2040/src/pwm.zig
    rename to raspberrypi-rp2040/src/pwm.zig
    diff --git a/rp2040/src/random.zig b/raspberrypi-rp2040/src/random.zig
    similarity index 100%
    rename from rp2040/src/random.zig
    rename to raspberrypi-rp2040/src/random.zig
    diff --git a/rp2040/src/spi_master.zig b/raspberrypi-rp2040/src/spi_master.zig
    similarity index 100%
    rename from rp2040/src/spi_master.zig
    rename to raspberrypi-rp2040/src/spi_master.zig
    diff --git a/rp2040/src/squarewave.zig b/raspberrypi-rp2040/src/squarewave.zig
    similarity index 100%
    rename from rp2040/src/squarewave.zig
    rename to raspberrypi-rp2040/src/squarewave.zig
    diff --git a/rp2040/src/uart.zig b/raspberrypi-rp2040/src/uart.zig
    similarity index 100%
    rename from rp2040/src/uart.zig
    rename to raspberrypi-rp2040/src/uart.zig
    diff --git a/rp2040/src/usb_device.zig b/raspberrypi-rp2040/src/usb_device.zig
    similarity index 100%
    rename from rp2040/src/usb_device.zig
    rename to raspberrypi-rp2040/src/usb_device.zig
    diff --git a/rp2040/src/usb_hid.zig b/raspberrypi-rp2040/src/usb_hid.zig
    similarity index 100%
    rename from rp2040/src/usb_hid.zig
    rename to raspberrypi-rp2040/src/usb_hid.zig
    diff --git a/rp2040/src/ws2812.zig b/raspberrypi-rp2040/src/ws2812.zig
    similarity index 100%
    rename from rp2040/src/ws2812.zig
    rename to raspberrypi-rp2040/src/ws2812.zig
    diff --git a/rp2040/build.zig b/rp2040/build.zig
    deleted file mode 100644
    index 406477261..000000000
    --- a/rp2040/build.zig
    +++ /dev/null
    @@ -1,84 +0,0 @@
    -const std = @import("std");
    -const rp2040 = @import("rp2040");
    -const stm32 = @import("stm32");
    -const lpc = @import("lpc");
    -const gd32 = @import("gd32");
    -const nrf5x = @import("nrf5x");
    -const esp = @import("esp");
    -const atmega = @import("atmega");
    -
    -pub fn build(b: *std.Build) void {
    -    const microzig = @import("microzig").init(b, "microzig");
    -    const optimize = b.standardOptimizeOption(.{});
    -
    -    const TargetDesc = struct {
    -        target: @import("microzig").Target,
    -        name: []const u8,
    -    };
    -
    -    const available_targets = [_]TargetDesc{
    -        // RP2040
    -        .{ .name = "pico", .target = rp2040.boards.raspberry_pi.pico },
    -        .{ .name = "rp2040-eth", .target = rp2040.boards.waveshare.rp2040_eth },
    -        .{ .name = "rp2040-plus-4m", .target = rp2040.boards.waveshare.rp2040_plus_4m },
    -        .{ .name = "rp2040-plus-16m", .target = rp2040.boards.waveshare.rp2040_plus_16m },
    -        .{ .name = "rp2040-matrix", .target = rp2040.boards.waveshare.rp2040_matrix },
    -
    -        // STM32
    -        .{ .name = "stm32f103x8", .target = stm32.chips.stm32f103x8 },
    -        .{ .name = "stm32f303vc", .target = stm32.chips.stm32f303vc },
    -        .{ .name = "stm32f407vg", .target = stm32.chips.stm32f407vg },
    -        .{ .name = "stm32f429zit6u", .target = stm32.chips.stm32f429zit6u },
    -        .{ .name = "stm32f3discovery", .target = stm32.boards.stm32f3discovery },
    -        .{ .name = "stm32f4discovery", .target = stm32.boards.stm32f4discovery },
    -        .{ .name = "stm3240geval", .target = stm32.boards.stm3240geval },
    -        .{ .name = "stm32f429idiscovery", .target = stm32.boards.stm32f429idiscovery },
    -
    -        // NXP LPC
    -        .{ .name = "lpc176x5x", .target = lpc.chips.lpc176x5x },
    -        .{ .name = "mbed-lpc1768", .target = lpc.boards.mbed.lpc1768 },
    -
    -        // GigaDevice GD32
    -        .{ .name = "gd32vf103xb", .target = gd32.chips.gd32vf103xb },
    -        .{ .name = "gd32vf103x8", .target = gd32.chips.gd32vf103x8 },
    -        .{ .name = "sipeed-longan_nano", .target = gd32.boards.sipeed.longan_nano },
    -
    -        // Nordic Nrf5x
    -        .{ .name = "nrf52832", .target = nrf5x.chips.nrf52832 },
    -        .{ .name = "nrf52840", .target = nrf5x.chips.nrf52840 },
    -        .{ .name = "nrf52840-dongle", .target = nrf5x.boards.nordic.nRF52840_Dongle }, // TODO: Add support for DFU files!
    -
    -        // RISC-V Espressif ESP
    -        .{ .name = "esp32-c3", .target = esp.chips.esp32_c3 }, // TODO: Add support for Espressif Update Binaries
    -
    -        // Microchip ATmega
    -        // TODO: Fix compiler bugs
    -        // - https://github.com/ziglang/zig/issues/17219
    -        // .{ .name = "atmega328p", .target = atmega.chips.atmega328p },
    -        // .{ .name = "arduino-nano", .target = atmega.boards.arduino.nano },
    -        // .{ .name = "arduino-uno-rev3", .target = atmega.boards.arduino.uno_rev3 },
    -    };
    -
    -    for (available_targets) |dest| {
    -        // `addFirmware` basically works like addExecutable, but takes a
    -        // `microzig.Target` for target instead of a `std.zig.CrossTarget`.
    -        //
    -        // The target will convey all necessary information on the chip,
    -        // cpu and potentially the board as well.
    -        const firmware = microzig.addFirmware(b, .{
    -            .name = b.fmt("empty-{s}", .{dest.name}),
    -            .target = dest.target,
    -            .optimize = optimize,
    -            .source_file = .{ .path = "src/empty.zig" },
    -        });
    -
    -        // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()`
    -        // and allows installing the firmware as a typical firmware file.
    -        //
    -        // This will also install into `$prefix/firmware` instead of `$prefix/bin`.
    -        microzig.installFirmware(b, firmware, .{});
    -
    -        // For debugging, we also always install the firmware as an ELF file
    -        microzig.installFirmware(b, firmware, .{ .format = .elf });
    -    }
    -}
    
    From cc2b97de4603e754686bf21c52c666bdf8916682 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Sat, 23 Sep 2023 18:36:30 +0200
    Subject: [PATCH 217/286] Disables flaky example
    
    ---
     raspberrypi-rp2040/build.zig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/raspberrypi-rp2040/build.zig b/raspberrypi-rp2040/build.zig
    index c5845720c..dea02c5e4 100644
    --- a/raspberrypi-rp2040/build.zig
    +++ b/raspberrypi-rp2040/build.zig
    @@ -12,7 +12,7 @@ const available_targets = [_]TargetDesc{
     const available_examples = [_][]const u8{
         "src/adc.zig",
         "src/blinky.zig",
    -    "src/blinky_core1.zig",
    +    // TODO: Fix multicore hal! "src/blinky_core1.zig",
         "src/flash_program.zig",
         "src/gpio_clk.zig",
         "src/i2c_bus_scan.zig",
    
    From 11b5bef01a31eff31205f7fe0e8d7e01870a55ef Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Sat, 23 Sep 2023 18:43:06 +0200
    Subject: [PATCH 218/286] enables espressif-esp examples
    
    ---
     .github/workflows/build.yml |   2 +-
     espressif-esp/build.zig     | 111 ++++++++++++------------------------
     2 files changed, 37 insertions(+), 76 deletions(-)
    
    diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
    index 668835968..9f6738efc 100644
    --- a/.github/workflows/build.yml
    +++ b/.github/workflows/build.yml
    @@ -14,7 +14,7 @@ jobs:
             dir:
               - all-platforms
               - raspberrypi-rp2040
    -          # TODO: - espressif-esp
    +          - espressif-esp
               # TODO: - gigadevice-gd32
               # TODO: - microchip-atmega
               # TODO: - nordic-nrf5x
    diff --git a/espressif-esp/build.zig b/espressif-esp/build.zig
    index 406477261..08dcceeb0 100644
    --- a/espressif-esp/build.zig
    +++ b/espressif-esp/build.zig
    @@ -1,84 +1,45 @@
     const std = @import("std");
    -const rp2040 = @import("rp2040");
    -const stm32 = @import("stm32");
    -const lpc = @import("lpc");
    -const gd32 = @import("gd32");
    -const nrf5x = @import("nrf5x");
     const esp = @import("esp");
    -const atmega = @import("atmega");
    +
    +const available_targets = [_]TargetDesc{
    +    .{ .name = "esp32-c3", .target = esp.chips.esp32_c3 },
    +};
    +
    +const available_examples = [_][]const u8{
    +    "src/blinky.zig",
    +};
     
     pub fn build(b: *std.Build) void {
         const microzig = @import("microzig").init(b, "microzig");
         const optimize = b.standardOptimizeOption(.{});
     
    -    const TargetDesc = struct {
    -        target: @import("microzig").Target,
    -        name: []const u8,
    -    };
    -
    -    const available_targets = [_]TargetDesc{
    -        // RP2040
    -        .{ .name = "pico", .target = rp2040.boards.raspberry_pi.pico },
    -        .{ .name = "rp2040-eth", .target = rp2040.boards.waveshare.rp2040_eth },
    -        .{ .name = "rp2040-plus-4m", .target = rp2040.boards.waveshare.rp2040_plus_4m },
    -        .{ .name = "rp2040-plus-16m", .target = rp2040.boards.waveshare.rp2040_plus_16m },
    -        .{ .name = "rp2040-matrix", .target = rp2040.boards.waveshare.rp2040_matrix },
    -
    -        // STM32
    -        .{ .name = "stm32f103x8", .target = stm32.chips.stm32f103x8 },
    -        .{ .name = "stm32f303vc", .target = stm32.chips.stm32f303vc },
    -        .{ .name = "stm32f407vg", .target = stm32.chips.stm32f407vg },
    -        .{ .name = "stm32f429zit6u", .target = stm32.chips.stm32f429zit6u },
    -        .{ .name = "stm32f3discovery", .target = stm32.boards.stm32f3discovery },
    -        .{ .name = "stm32f4discovery", .target = stm32.boards.stm32f4discovery },
    -        .{ .name = "stm3240geval", .target = stm32.boards.stm3240geval },
    -        .{ .name = "stm32f429idiscovery", .target = stm32.boards.stm32f429idiscovery },
    -
    -        // NXP LPC
    -        .{ .name = "lpc176x5x", .target = lpc.chips.lpc176x5x },
    -        .{ .name = "mbed-lpc1768", .target = lpc.boards.mbed.lpc1768 },
    -
    -        // GigaDevice GD32
    -        .{ .name = "gd32vf103xb", .target = gd32.chips.gd32vf103xb },
    -        .{ .name = "gd32vf103x8", .target = gd32.chips.gd32vf103x8 },
    -        .{ .name = "sipeed-longan_nano", .target = gd32.boards.sipeed.longan_nano },
    -
    -        // Nordic Nrf5x
    -        .{ .name = "nrf52832", .target = nrf5x.chips.nrf52832 },
    -        .{ .name = "nrf52840", .target = nrf5x.chips.nrf52840 },
    -        .{ .name = "nrf52840-dongle", .target = nrf5x.boards.nordic.nRF52840_Dongle }, // TODO: Add support for DFU files!
    -
    -        // RISC-V Espressif ESP
    -        .{ .name = "esp32-c3", .target = esp.chips.esp32_c3 }, // TODO: Add support for Espressif Update Binaries
    -
    -        // Microchip ATmega
    -        // TODO: Fix compiler bugs
    -        // - https://github.com/ziglang/zig/issues/17219
    -        // .{ .name = "atmega328p", .target = atmega.chips.atmega328p },
    -        // .{ .name = "arduino-nano", .target = atmega.boards.arduino.nano },
    -        // .{ .name = "arduino-uno-rev3", .target = atmega.boards.arduino.uno_rev3 },
    -    };
    -
    -    for (available_targets) |dest| {
    -        // `addFirmware` basically works like addExecutable, but takes a
    -        // `microzig.Target` for target instead of a `std.zig.CrossTarget`.
    -        //
    -        // The target will convey all necessary information on the chip,
    -        // cpu and potentially the board as well.
    -        const firmware = microzig.addFirmware(b, .{
    -            .name = b.fmt("empty-{s}", .{dest.name}),
    -            .target = dest.target,
    -            .optimize = optimize,
    -            .source_file = .{ .path = "src/empty.zig" },
    -        });
    -
    -        // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()`
    -        // and allows installing the firmware as a typical firmware file.
    -        //
    -        // This will also install into `$prefix/firmware` instead of `$prefix/bin`.
    -        microzig.installFirmware(b, firmware, .{});
    -
    -        // For debugging, we also always install the firmware as an ELF file
    -        microzig.installFirmware(b, firmware, .{ .format = .elf });
    +    for (available_targets) |target| {
    +        for (available_examples) |example| {
    +            // `addFirmware` basically works like addExecutable, but takes a
    +            // `microzig.Target` for target instead of a `std.zig.CrossTarget`.
    +            //
    +            // The target will convey all necessary information on the chip,
    +            // cpu and potentially the board as well.
    +            const firmware = microzig.addFirmware(b, .{
    +                .name = b.fmt("{s}-{s}", .{ std.fs.path.stem(example), target.name }),
    +                .target = target.target,
    +                .optimize = optimize,
    +                .source_file = .{ .path = example },
    +            });
    +
    +            // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()`
    +            // and allows installing the firmware as a typical firmware file.
    +            //
    +            // This will also install into `$prefix/firmware` instead of `$prefix/bin`.
    +            microzig.installFirmware(b, firmware, .{});
    +
    +            // For debugging, we also always install the firmware as an ELF file
    +            microzig.installFirmware(b, firmware, .{ .format = .elf });
    +        }
         }
     }
    +
    +const TargetDesc = struct {
    +    target: @import("microzig").Target,
    +    name: []const u8,
    +};
    
    From 38793077e87e97716c1807728eec190d2f1ab768 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Sat, 23 Sep 2023 20:13:15 +0200
    Subject: [PATCH 219/286] Implements blinky for mbed LPC1768
    
    ---
     .github/workflows/build.yml |  2 +-
     nxp-lpc/README.md           |  4 +++
     nxp-lpc/build.zig           | 72 ++++++++-----------------------------
     nxp-lpc/src/blinky.zig      | 56 +++++++++++++++++++++++++++++
     4 files changed, 75 insertions(+), 59 deletions(-)
     create mode 100644 nxp-lpc/README.md
    
    diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
    index 9f6738efc..2805e5313 100644
    --- a/.github/workflows/build.yml
    +++ b/.github/workflows/build.yml
    @@ -15,10 +15,10 @@ jobs:
               - all-platforms
               - raspberrypi-rp2040
               - espressif-esp
    +          - nxp-lpc
               # TODO: - gigadevice-gd32
               # TODO: - microchip-atmega
               # TODO: - nordic-nrf5x
    -          # TODO: - nxp-lpc
               # TODO: - stmicro-stm32
             os:
               - windows-latest
    diff --git a/nxp-lpc/README.md b/nxp-lpc/README.md
    new file mode 100644
    index 000000000..7bc74a7b4
    --- /dev/null
    +++ b/nxp-lpc/README.md
    @@ -0,0 +1,4 @@
    +# Examples for the BSP `nxp-lpc`
    +
    +- [Blinky](src/blinky.zig) on [mbed LPC1768](https://os.mbed.com/platforms/mbed-LPC1768/)  
    +  Performs a really basic round robin blinky on the four LEDs on the development board. Flash by copying `zig-out/firmware/mbed-lpc1768_blinky.hex` to the mass storage of the board, then press the big button in the center.
    diff --git a/nxp-lpc/build.zig b/nxp-lpc/build.zig
    index 406477261..a6f0b305f 100644
    --- a/nxp-lpc/build.zig
    +++ b/nxp-lpc/build.zig
    @@ -1,75 +1,25 @@
     const std = @import("std");
    -const rp2040 = @import("rp2040");
    -const stm32 = @import("stm32");
     const lpc = @import("lpc");
    -const gd32 = @import("gd32");
    -const nrf5x = @import("nrf5x");
    -const esp = @import("esp");
    -const atmega = @import("atmega");
    +
    +const available_examples = [_]ExampleDesc{
    +    .{ .name = "mbed-lpc1768_blinky", .target = lpc.boards.mbed.lpc1768, .file = "src/blinky.zig" },
    +};
     
     pub fn build(b: *std.Build) void {
         const microzig = @import("microzig").init(b, "microzig");
         const optimize = b.standardOptimizeOption(.{});
     
    -    const TargetDesc = struct {
    -        target: @import("microzig").Target,
    -        name: []const u8,
    -    };
    -
    -    const available_targets = [_]TargetDesc{
    -        // RP2040
    -        .{ .name = "pico", .target = rp2040.boards.raspberry_pi.pico },
    -        .{ .name = "rp2040-eth", .target = rp2040.boards.waveshare.rp2040_eth },
    -        .{ .name = "rp2040-plus-4m", .target = rp2040.boards.waveshare.rp2040_plus_4m },
    -        .{ .name = "rp2040-plus-16m", .target = rp2040.boards.waveshare.rp2040_plus_16m },
    -        .{ .name = "rp2040-matrix", .target = rp2040.boards.waveshare.rp2040_matrix },
    -
    -        // STM32
    -        .{ .name = "stm32f103x8", .target = stm32.chips.stm32f103x8 },
    -        .{ .name = "stm32f303vc", .target = stm32.chips.stm32f303vc },
    -        .{ .name = "stm32f407vg", .target = stm32.chips.stm32f407vg },
    -        .{ .name = "stm32f429zit6u", .target = stm32.chips.stm32f429zit6u },
    -        .{ .name = "stm32f3discovery", .target = stm32.boards.stm32f3discovery },
    -        .{ .name = "stm32f4discovery", .target = stm32.boards.stm32f4discovery },
    -        .{ .name = "stm3240geval", .target = stm32.boards.stm3240geval },
    -        .{ .name = "stm32f429idiscovery", .target = stm32.boards.stm32f429idiscovery },
    -
    -        // NXP LPC
    -        .{ .name = "lpc176x5x", .target = lpc.chips.lpc176x5x },
    -        .{ .name = "mbed-lpc1768", .target = lpc.boards.mbed.lpc1768 },
    -
    -        // GigaDevice GD32
    -        .{ .name = "gd32vf103xb", .target = gd32.chips.gd32vf103xb },
    -        .{ .name = "gd32vf103x8", .target = gd32.chips.gd32vf103x8 },
    -        .{ .name = "sipeed-longan_nano", .target = gd32.boards.sipeed.longan_nano },
    -
    -        // Nordic Nrf5x
    -        .{ .name = "nrf52832", .target = nrf5x.chips.nrf52832 },
    -        .{ .name = "nrf52840", .target = nrf5x.chips.nrf52840 },
    -        .{ .name = "nrf52840-dongle", .target = nrf5x.boards.nordic.nRF52840_Dongle }, // TODO: Add support for DFU files!
    -
    -        // RISC-V Espressif ESP
    -        .{ .name = "esp32-c3", .target = esp.chips.esp32_c3 }, // TODO: Add support for Espressif Update Binaries
    -
    -        // Microchip ATmega
    -        // TODO: Fix compiler bugs
    -        // - https://github.com/ziglang/zig/issues/17219
    -        // .{ .name = "atmega328p", .target = atmega.chips.atmega328p },
    -        // .{ .name = "arduino-nano", .target = atmega.boards.arduino.nano },
    -        // .{ .name = "arduino-uno-rev3", .target = atmega.boards.arduino.uno_rev3 },
    -    };
    -
    -    for (available_targets) |dest| {
    +    for (available_examples) |example| {
             // `addFirmware` basically works like addExecutable, but takes a
             // `microzig.Target` for target instead of a `std.zig.CrossTarget`.
             //
             // The target will convey all necessary information on the chip,
             // cpu and potentially the board as well.
             const firmware = microzig.addFirmware(b, .{
    -            .name = b.fmt("empty-{s}", .{dest.name}),
    -            .target = dest.target,
    +            .name = example.name,
    +            .target = example.target,
                 .optimize = optimize,
    -            .source_file = .{ .path = "src/empty.zig" },
    +            .source_file = .{ .path = example.file },
             });
     
             // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()`
    @@ -82,3 +32,9 @@ pub fn build(b: *std.Build) void {
             microzig.installFirmware(b, firmware, .{ .format = .elf });
         }
     }
    +
    +const ExampleDesc = struct {
    +    target: @import("microzig").Target,
    +    name: []const u8,
    +    file: []const u8,
    +};
    diff --git a/nxp-lpc/src/blinky.zig b/nxp-lpc/src/blinky.zig
    index e69de29bb..328d63705 100644
    --- a/nxp-lpc/src/blinky.zig
    +++ b/nxp-lpc/src/blinky.zig
    @@ -0,0 +1,56 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +
    +const chip = microzig.chip;
    +
    +// LED-1: P1.18
    +// LED-2: P1.20
    +// LED-3: P1.21
    +// LED-4: P1.23
    +
    +const conn = chip.peripherals.PINCONNECT;
    +const gpio: *volatile [5]PatchedGpio = @ptrCast(@alignCast(chip.peripherals.GPIO));
    +
    +const led_mask = [4]u32{
    +    (1 << 18),
    +    (1 << 20),
    +    (1 << 21),
    +    (1 << 23),
    +};
    +const all_mask = led_mask[0] | led_mask[1] | led_mask[2] | led_mask[3];
    +
    +pub fn main() !void {
    +    conn.PINSEL3.modify(.{
    +        .P1_18 = .{ .value = .GPIO_P1 },
    +        .P1_20 = .{ .value = .GPIO_P1 },
    +        .P1_21 = .{ .value = .GPIO_P1 },
    +        .P1_23 = .{ .value = .GPIO_P1 },
    +    });
    +
    +    const p1 = &gpio[1];
    +
    +    p1.dir = all_mask;
    +
    +    while (true) {
    +        for (led_mask) |mask| {
    +            p1.pin_clr = (all_mask & ~mask);
    +            p1.pin_set = mask;
    +            microzig.core.experimental.debug.busy_sleep(100_000);
    +        }
    +    }
    +}
    +
    +const PatchedGpio = extern struct {
    +    dir: u32, // 0x2009 C000
    +    __padding0: u32, // 0x2009 C004
    +    __padding1: u32, // 0x2009 C008
    +    __padding2: u32, // 0x2009 C00C
    +    mask: u32, // 0x2009 C010
    +    pin: u32, // 0x2009 C014
    +    pin_set: u32, // 0x2009 C018
    +    pin_clr: u32, // 0x2009 C01C
    +
    +    comptime {
    +        std.debug.assert(@sizeOf(PatchedGpio) == 0x20);
    +    }
    +};
    
    From fac4648f5c2bb3684c701737cc4830f02bc72a48 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Sat, 23 Sep 2023 20:35:14 +0200
    Subject: [PATCH 220/286] Updates raspberrypi-pico example readme.
    
    ---
     raspberrypi-rp2040/README.md   | 31 +++++++++++++
     raspberrypi-rp2040/build.zig   | 84 ++++++++++++++++------------------
     raspberrypi-rp2040/src/pwm.zig | 10 +++-
     3 files changed, 79 insertions(+), 46 deletions(-)
     create mode 100644 raspberrypi-rp2040/README.md
    
    diff --git a/raspberrypi-rp2040/README.md b/raspberrypi-rp2040/README.md
    new file mode 100644
    index 000000000..dbb4e7294
    --- /dev/null
    +++ b/raspberrypi-rp2040/README.md
    @@ -0,0 +1,31 @@
    +# Examples for the BSP `raspberrypi-rp2040`
    +
    +- [adc](src/adc.zig) on [RaspberryPi Pico](https://www.raspberrypi.com/products/raspberry-pi-pico/)  
    +  This example takes periodic samples of the temperature sensor and prints it to the UART using the stdlib logging facility.
    +- [blinky](src/blinky.zig) on [RaspberryPi Pico](https://www.raspberrypi.com/products/raspberry-pi-pico/)  
    +  Blinks the LED on the board.
    +- [blinky core1](src/blinky_core1.zig) on [RaspberryPi Pico](https://www.raspberrypi.com/products/raspberry-pi-pico/)  
    +  Blinks the LED on the board using the second CPU.
    +- [flash program](src/flash_program.zig) on [RaspberryPi Pico](https://www.raspberrypi.com/products/raspberry-pi-pico/)  
    +  Writes and reads data into the flash.
    +- [gpio clk](src/gpio_clk.zig) on [RaspberryPi Pico](https://www.raspberrypi.com/products/raspberry-pi-pico/)  
    +  Enables a `CLKOUT` mode on GPIO0.
    +- [i2c bus scan](src/i2c_bus_scan.zig) on [RaspberryPi Pico](https://www.raspberrypi.com/products/raspberry-pi-pico/)  
    +  Prints all I²C devices on UART0 (Pin 0,1) attached to I²C on SCL=GPIO4, SDA=GPIO5.
    +- [pwm](src/pwm.zig) on [RaspberryPi Pico](https://www.raspberrypi.com/products/raspberry-pi-pico/)  
    +  Slowly blinks the LED on the Pico with a smooth blinking using PWM.
    +- [random](src/random.zig) on [RaspberryPi Pico](https://www.raspberrypi.com/products/raspberry-pi-pico/)  
    +  Showcases how to use the internal random generator.
    +- [spi master](src/spi_master.zig) on [RaspberryPi Pico](https://www.raspberrypi.com/products/raspberry-pi-pico/)  
    +  Showcases how to use the SPI host controller.
    +- [squarewave](src/squarewave.zig) on [RaspberryPi Pico](https://www.raspberrypi.com/products/raspberry-pi-pico/)  
    +  Showcases how to use the PIO to emit a basic square wave.
    +- [uart](src/uart.zig) on [RaspberryPi Pico](https://www.raspberrypi.com/products/raspberry-pi-pico/)  
    +  Showcases how to use the UART together with `std.log`.
    +- [usb device](src/usb_device.zig) on [RaspberryPi Pico](https://www.raspberrypi.com/products/raspberry-pi-pico/)  
    +  A really basic example for a raw USB device. You can use the Python 3 script [`scripts/usb_device_loopback.py`](scripts/usb_device_loopback.py) to test the USB device.
    +- [usb hid](src/usb_hid.zig) on [RaspberryPi Pico](https://www.raspberrypi.com/products/raspberry-pi-pico/)  
    +  A really basic example how to implement a USB HID device. You can use the Python 3 script [`scripts/hid_test.py`](scripts/hid_test.py) to test the HID device.
    +- [ws2812](src/ws2812.zig) on [RaspberryPi Pico](https://www.raspberrypi.com/products/raspberry-pi-pico/)  
    +  Showcases how to control one WS2812 LED attached to GPIO23.
    +
    diff --git a/raspberrypi-rp2040/build.zig b/raspberrypi-rp2040/build.zig
    index dea02c5e4..1128c6990 100644
    --- a/raspberrypi-rp2040/build.zig
    +++ b/raspberrypi-rp2040/build.zig
    @@ -1,62 +1,58 @@
     const std = @import("std");
     const rp2040 = @import("rp2040");
     
    -const available_targets = [_]TargetDesc{
    -    .{ .name = "pico", .target = rp2040.boards.raspberry_pi.pico },
    -    .{ .name = "rp2040-eth", .target = rp2040.boards.waveshare.rp2040_eth },
    -    .{ .name = "rp2040-plus-4m", .target = rp2040.boards.waveshare.rp2040_plus_4m },
    -    .{ .name = "rp2040-plus-16m", .target = rp2040.boards.waveshare.rp2040_plus_16m },
    -    .{ .name = "rp2040-matrix", .target = rp2040.boards.waveshare.rp2040_matrix },
    -};
    +const available_examples = [_]Example{
    +    .{ .name = "pico_adc", .target = rp2040.boards.raspberry_pi.pico, .file = "src/adc.zig" },
    +    .{ .name = "pico_blinky", .target = rp2040.boards.raspberry_pi.pico, .file = "src/blinky.zig" },
    +    // TODO: Fix multicore hal! .{ .name = "pico", .target = rp2040.boards.raspberry_pi.pico , .file = "src/blinky_core1.zig" },
    +    .{ .name = "pico_flash-program", .target = rp2040.boards.raspberry_pi.pico, .file = "src/flash_program.zig" },
    +    .{ .name = "pico_gpio-clk", .target = rp2040.boards.raspberry_pi.pico, .file = "src/gpio_clk.zig" },
    +    .{ .name = "pico_i2c-bus-scan", .target = rp2040.boards.raspberry_pi.pico, .file = "src/i2c_bus_scan.zig" },
    +    .{ .name = "pico_pwm", .target = rp2040.boards.raspberry_pi.pico, .file = "src/pwm.zig" },
    +    .{ .name = "pico_random", .target = rp2040.boards.raspberry_pi.pico, .file = "src/random.zig" },
    +    .{ .name = "pico_spi-master", .target = rp2040.boards.raspberry_pi.pico, .file = "src/spi_master.zig" },
    +    .{ .name = "pico_squarewave", .target = rp2040.boards.raspberry_pi.pico, .file = "src/squarewave.zig" },
    +    .{ .name = "pico_uart", .target = rp2040.boards.raspberry_pi.pico, .file = "src/uart.zig" },
    +    .{ .name = "pico_usb-device", .target = rp2040.boards.raspberry_pi.pico, .file = "src/usb_device.zig" },
    +    .{ .name = "pico_usb-hid", .target = rp2040.boards.raspberry_pi.pico, .file = "src/usb_hid.zig" },
    +    .{ .name = "pico_ws2812", .target = rp2040.boards.raspberry_pi.pico, .file = "src/ws2812.zig" },
     
    -const available_examples = [_][]const u8{
    -    "src/adc.zig",
    -    "src/blinky.zig",
    -    // TODO: Fix multicore hal! "src/blinky_core1.zig",
    -    "src/flash_program.zig",
    -    "src/gpio_clk.zig",
    -    "src/i2c_bus_scan.zig",
    -    "src/pwm.zig",
    -    "src/random.zig",
    -    "src/spi_master.zig",
    -    "src/squarewave.zig",
    -    "src/uart.zig",
    -    "src/usb_device.zig",
    -    "src/usb_hid.zig",
    -    "src/ws2812.zig",
    +    //     .{ .name = "rp2040-eth", .target = rp2040.boards.waveshare.rp2040_eth },
    +    //     .{ .name = "rp2040-plus-4m", .target = rp2040.boards.waveshare.rp2040_plus_4m },
    +    //     .{ .name = "rp2040-plus-16m", .target = rp2040.boards.waveshare.rp2040_plus_16m },
    +    //     .{ .name = "rp2040-matrix", .target = rp2040.boards.waveshare.rp2040_matrix },
     };
     
     pub fn build(b: *std.Build) void {
         const microzig = @import("microzig").init(b, "microzig");
         const optimize = b.standardOptimizeOption(.{});
     
    -    for (available_targets) |target| {
    -        for (available_examples) |example| {
    -            // `addFirmware` basically works like addExecutable, but takes a
    -            // `microzig.Target` for target instead of a `std.zig.CrossTarget`.
    -            //
    -            // The target will convey all necessary information on the chip,
    -            // cpu and potentially the board as well.
    -            const firmware = microzig.addFirmware(b, .{
    -                .name = b.fmt("{s}-{s}", .{ std.fs.path.stem(example), target.name }),
    -                .target = target.target,
    -                .optimize = optimize,
    -                .source_file = .{ .path = example },
    -            });
    +    for (available_examples) |example| {
    +        // `addFirmware` basically works like addExecutable, but takes a
    +        // `microzig.Target` for target instead of a `std.zig.CrossTarget`.
    +        //
    +        // The target will convey all necessary information on the chip,
    +        // cpu and potentially the board as well.
    +        const firmware = microzig.addFirmware(b, .{
    +            .name = example.name,
    +            .target = example.target,
    +            .optimize = optimize,
    +            .source_file = .{ .path = example.file },
    +        });
     
    -            // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()`
    -            // and allows installing the firmware as a typical firmware file.
    -            //
    -            // This will also install into `$prefix/firmware` instead of `$prefix/bin`.
    -            microzig.installFirmware(b, firmware, .{});
    +        // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()`
    +        // and allows installing the firmware as a typical firmware file.
    +        //
    +        // This will also install into `$prefix/firmware` instead of `$prefix/bin`.
    +        microzig.installFirmware(b, firmware, .{});
     
    -            // For debugging, we also always install the firmware as an ELF file
    -            microzig.installFirmware(b, firmware, .{ .format = .elf });
    -        }
    +        // For debugging, we also always install the firmware as an ELF file
    +        microzig.installFirmware(b, firmware, .{ .format = .elf });
         }
     }
     
    -const TargetDesc = struct {
    +const Example = struct {
         target: @import("microzig").Target,
         name: []const u8,
    +    file: []const u8,
     };
    diff --git a/raspberrypi-rp2040/src/pwm.zig b/raspberrypi-rp2040/src/pwm.zig
    index d372ef4c2..523c91f9a 100644
    --- a/raspberrypi-rp2040/src/pwm.zig
    +++ b/raspberrypi-rp2040/src/pwm.zig
    @@ -14,10 +14,16 @@ const pin_config = rp2040.pins.GlobalConfiguration{
     pub fn main() !void {
         const pins = pin_config.apply();
         pins.led.slice().set_wrap(100);
    -    pins.led.set_level(10);
         pins.led.slice().enable();
     
         while (true) {
    -        time.sleep_ms(250);
    +        for (0..101) |level| {
    +            pins.led.set_level(@truncate(level));
    +            time.sleep_ms(10);
    +        }
    +        for (1..100) |level| {
    +            pins.led.set_level(@truncate(100 - level));
    +            time.sleep_ms(10);
    +        }
         }
     }
    
    From 71e59a4f7d9eabb5cd7085483120aa599e77effa Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Sat, 23 Sep 2023 20:47:49 +0200
    Subject: [PATCH 221/286] Adds tiles example.
    
    ---
     raspberrypi-rp2040/README.md     |  19 ++++
     raspberrypi-rp2040/build.zig     |   3 +-
     raspberrypi-rp2040/src/tiles.zig | 147 +++++++++++++++++++++++++++++++
     3 files changed, 168 insertions(+), 1 deletion(-)
     create mode 100644 raspberrypi-rp2040/src/tiles.zig
    
    diff --git a/raspberrypi-rp2040/README.md b/raspberrypi-rp2040/README.md
    index dbb4e7294..e5c829372 100644
    --- a/raspberrypi-rp2040/README.md
    +++ b/raspberrypi-rp2040/README.md
    @@ -1,5 +1,9 @@
     # Examples for the BSP `raspberrypi-rp2040`
     
    +## Demos
    +
    +All demos that run on the [RaspberryPi Pico](https://www.raspberrypi.com/products/raspberry-pi-pico/) can also be run on the [RP2040-Plus](https://www.waveshare.com/rp2040-plus.htm) without modification.
    +
     - [adc](src/adc.zig) on [RaspberryPi Pico](https://www.raspberrypi.com/products/raspberry-pi-pico/)  
       This example takes periodic samples of the temperature sensor and prints it to the UART using the stdlib logging facility.
     - [blinky](src/blinky.zig) on [RaspberryPi Pico](https://www.raspberrypi.com/products/raspberry-pi-pico/)  
    @@ -28,4 +32,19 @@
       A really basic example how to implement a USB HID device. You can use the Python 3 script [`scripts/hid_test.py`](scripts/hid_test.py) to test the HID device.
     - [ws2812](src/ws2812.zig) on [RaspberryPi Pico](https://www.raspberrypi.com/products/raspberry-pi-pico/)  
       Showcases how to control one WS2812 LED attached to GPIO23.
    +- [tiles](src/tiles.zig) on [RP2040-Matrix](https://www.waveshare.com/rp2040-matrix.htm)  
    +  Showcases how to control the LED matrix on the development board to do a simple color flipper effect.
    +
    +## Flashing
    +
    +You can flash all examples using either your file browser by dragging the example `.uf2` file from `zig-out/firmware/` to the directory.
    +
    +Or you can use [`picotool`](https://github.com/raspberrypi/picotool) to flash a uf2 file:
    +```sh-session
    +[user@host] raspberrypi-rp2040/ $ picotool load -x zig-out/firmware/${file}.uf2
    +Loading into Flash: [==============================]  100%
    +
    +The device was rebooted to start the application.
    +[user@host] raspberrypi-rp2040/ $ 
    +```
     
    diff --git a/raspberrypi-rp2040/build.zig b/raspberrypi-rp2040/build.zig
    index 1128c6990..6e91de005 100644
    --- a/raspberrypi-rp2040/build.zig
    +++ b/raspberrypi-rp2040/build.zig
    @@ -17,10 +17,11 @@ const available_examples = [_]Example{
         .{ .name = "pico_usb-hid", .target = rp2040.boards.raspberry_pi.pico, .file = "src/usb_hid.zig" },
         .{ .name = "pico_ws2812", .target = rp2040.boards.raspberry_pi.pico, .file = "src/ws2812.zig" },
     
    +    .{ .name = "rp2040-matrix_tiles", .target = rp2040.boards.waveshare.rp2040_matrix, .file = "src/tiles.zig" },
    +
         //     .{ .name = "rp2040-eth", .target = rp2040.boards.waveshare.rp2040_eth },
         //     .{ .name = "rp2040-plus-4m", .target = rp2040.boards.waveshare.rp2040_plus_4m },
         //     .{ .name = "rp2040-plus-16m", .target = rp2040.boards.waveshare.rp2040_plus_16m },
    -    //     .{ .name = "rp2040-matrix", .target = rp2040.boards.waveshare.rp2040_matrix },
     };
     
     pub fn build(b: *std.Build) void {
    diff --git a/raspberrypi-rp2040/src/tiles.zig b/raspberrypi-rp2040/src/tiles.zig
    new file mode 100644
    index 000000000..b55f791bf
    --- /dev/null
    +++ b/raspberrypi-rp2040/src/tiles.zig
    @@ -0,0 +1,147 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +const rp2040 = microzig.hal;
    +const gpio = rp2040.gpio;
    +const Pio = rp2040.pio.Pio;
    +const StateMachine = rp2040.pio.StateMachine;
    +
    +const ws2812_program = blk: {
    +    @setEvalBranchQuota(5000);
    +    break :blk rp2040.pio.assemble(
    +        \\;
    +        \\; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
    +        \\;
    +        \\; SPDX-License-Identifier: BSD-3-Clause
    +        \\;
    +        \\.program ws2812
    +        \\.side_set 1
    +        \\
    +        \\.define public T1 2
    +        \\.define public T2 5
    +        \\.define public T3 3
    +        \\
    +        \\.wrap_target
    +        \\bitloop:
    +        \\    out x, 1       side 0 [T3 - 1] ; Side-set still takes place when instruction stalls
    +        \\    jmp !x do_zero side 1 [T1 - 1] ; Branch on the bit we shifted out. Positive pulse
    +        \\do_one:
    +        \\    jmp  bitloop   side 1 [T2 - 1] ; Continue driving high, for a long pulse
    +        \\do_zero:
    +        \\    nop            side 0 [T2 - 1] ; Or drive low, for a short pulse
    +        \\.wrap
    +    , .{}).get_program_by_name("ws2812");
    +};
    +
    +const pio: Pio = .pio0;
    +const sm: StateMachine = .sm0;
    +const led_pin = gpio.num(16);
    +
    +const brightness: [256]u8 = blk: {
    +    @setEvalBranchQuota(10_000);
    +
    +    const gamma = 2.2;
    +
    +    const max_brightness = 0x10;
    +
    +    var data: [256]u8 = undefined;
    +    for (&data, 0..) |*bit, i| {
    +        const raw_index: f32 = @floatFromInt(i);
    +
    +        const gamma_brightness = std.math.pow(f32, raw_index / 255.0, gamma);
    +
    +        bit.* = @intFromFloat(max_brightness * gamma_brightness);
    +    }
    +    // @compileLog(data);
    +    break :blk data;
    +};
    +
    +const RGB = extern struct {
    +    x: u8 = 0x00,
    +    b: u8,
    +    g: u8,
    +    r: u8,
    +};
    +
    +inline fn floatToBright(f: f32) u8 {
    +    return brightness[
    +        @intFromFloat(
    +            std.math.clamp(255.0 * f, 0.0, 255.0),
    +        )
    +    ];
    +}
    +
    +pub fn main() void {
    +    pio.gpio_init(led_pin);
    +    sm_set_consecutive_pindirs(pio, sm, @intFromEnum(led_pin), 1, true);
    +
    +    const cycles_per_bit: comptime_int = ws2812_program.defines[0].value + //T1
    +        ws2812_program.defines[1].value + //T2
    +        ws2812_program.defines[2].value; //T3
    +    const div = @as(f32, @floatFromInt(rp2040.clock_config.sys.?.output_freq)) /
    +        (800_000 * cycles_per_bit);
    +
    +    pio.sm_load_and_start_program(sm, ws2812_program, .{
    +        .clkdiv = rp2040.pio.ClkDivOptions.from_float(div),
    +        .pin_mappings = .{
    +            .side_set = .{
    +                .base = @intFromEnum(led_pin),
    +                .count = 1,
    +            },
    +        },
    +        .shift = .{
    +            .out_shiftdir = .left,
    +            .autopull = true,
    +            .pull_threshold = 24,
    +            .join_tx = true,
    +        },
    +    }) catch unreachable;
    +    pio.sm_set_enabled(sm, true);
    +
    +    var rng_src = std.rand.DefaultPrng.init(0x1234);
    +
    +    const rng = rng_src.random();
    +
    +    var screen: [5][5]RGB = undefined;
    +    for (&screen) |*row| {
    +        for (row) |*pix| {
    +            pix.* = RGB{
    +                .r = brightness[rng.int(u8)],
    +                .g = brightness[rng.int(u8)],
    +                .b = brightness[rng.int(u8)],
    +            };
    +        }
    +    }
    +
    +    while (true) {
    +        screen[rng.intRangeLessThan(u8, 0, 5)][rng.intRangeLessThan(u8, 0, 5)] = RGB{
    +            .r = brightness[rng.int(u8)],
    +            .g = brightness[rng.int(u8)],
    +            .b = brightness[rng.int(u8)],
    +        };
    +
    +        for (@as([25]RGB, @bitCast(screen))) |color| {
    +            pio.sm_blocking_write(sm, @bitCast(color));
    +        }
    +        rp2040.time.sleep_ms(50);
    +    }
    +}
    +
    +fn sm_set_consecutive_pindirs(_pio: Pio, _sm: StateMachine, pin: u5, count: u3, is_out: bool) void {
    +    const sm_regs = _pio.get_sm_regs(_sm);
    +    const pinctrl_saved = sm_regs.pinctrl.raw;
    +    sm_regs.pinctrl.modify(.{
    +        .SET_BASE = pin,
    +        .SET_COUNT = count,
    +    });
    +    _pio.sm_exec(_sm, rp2040.pio.Instruction{
    +        .tag = .set,
    +        .delay_side_set = 0,
    +        .payload = .{
    +            .set = .{
    +                .data = @intFromBool(is_out),
    +                .destination = .pindirs,
    +            },
    +        },
    +    });
    +    sm_regs.pinctrl.raw = pinctrl_saved;
    +}
    
    From b8437914f0d40dcc0b43b1acad2ca9efcf2b203c Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Sat, 23 Sep 2023 21:26:15 +0200
    Subject: [PATCH 222/286] Fixes blinky for ESP32-C3-32S-Kit
    
    ---
     espressif-esp/README.md      |  4 +++
     espressif-esp/src/blinky.zig | 63 +++++++++++++++++++++++++++---------
     2 files changed, 52 insertions(+), 15 deletions(-)
     create mode 100644 espressif-esp/README.md
    
    diff --git a/espressif-esp/README.md b/espressif-esp/README.md
    new file mode 100644
    index 000000000..bfa4e43bb
    --- /dev/null
    +++ b/espressif-esp/README.md
    @@ -0,0 +1,4 @@
    +# Examples for the BSP `espressif-esp`
    +
    +- [Blinky](src/blinky.zig) on [ESP32-C3-32S-Kit](https://www.waveshare.com/wiki/ESP-C3-32S-Kit)  
    +  Showcases how to do a simple RGB cycling.
    diff --git a/espressif-esp/src/blinky.zig b/espressif-esp/src/blinky.zig
    index 811b04894..a44ac5f61 100644
    --- a/espressif-esp/src/blinky.zig
    +++ b/espressif-esp/src/blinky.zig
    @@ -5,53 +5,86 @@ const TIMG0 = peripherals.TIMG0;
     const RTC_CNTL = peripherals.RTC_CNTL;
     const INTERRUPT_CORE0 = peripherals.INTERRUPT_CORE0;
     const GPIO = peripherals.GPIO;
    +const IO_MUX = peripherals.IO_MUX;
     
     const dogfood: u32 = 0x50D83AA1;
     const super_dogfood: u32 = 0x8F1D312A;
     
    +const LED_R_PIN = 3; // GPIO
    +const LED_G_PIN = 4; // GPIO
    +const LED_B_PIN = 5; // GPIO
    +
    +const led_pins = [_]u32{
    +    LED_R_PIN,
    +    LED_G_PIN,
    +    LED_B_PIN,
    +};
    +
     pub fn main() !void {
    +    // Feed and disable watchdog 0
         TIMG0.WDTWPROTECT.raw = dogfood;
         TIMG0.WDTCONFIG0.raw = 0;
         TIMG0.WDTWPROTECT.raw = 0;
     
    +    // Feed and disable rtc watchdog
         RTC_CNTL.WDTWPROTECT.raw = dogfood;
         RTC_CNTL.WDTCONFIG0.raw = 0;
         RTC_CNTL.WDTWPROTECT.raw = 0;
     
    +    // Feed and disable rtc super watchdog
         RTC_CNTL.SWD_WPROTECT.raw = super_dogfood;
         RTC_CNTL.SWD_CONF.modify(.{ .SWD_DISABLE = 1 });
         RTC_CNTL.SWD_WPROTECT.raw = 0;
     
    +    // Disable all interrupts
         INTERRUPT_CORE0.CPU_INT_ENABLE.raw = 0;
     
    -    microzig.hal.gpio.init(LED_R_PIN, .{
    -        .direction = .output,
    -        .direct_io = true,
    -    });
    -    microzig.hal.gpio.init(LED_G_PIN, .{
    -        .direction = .output,
    -        .direct_io = true,
    -    });
    -    microzig.hal.gpio.init(LED_B_PIN, .{
    -        .direction = .output,
    -        .direct_io = true,
    +    GPIO.ENABLE.modify(.{
    +        .DATA = (1 << LED_R_PIN) |
    +            (1 << LED_G_PIN) |
    +            (1 << LED_B_PIN),
         });
     
    +    for (led_pins) |pin| {
    +        IO_MUX.GPIO[pin].modify(.{
    +            .MCU_OE = 1, // 1: output enabled
    +            .SLP_SEL = 0, // Set to 1 to put the pin in sleep mode. (R/W)
    +            .MCU_WPD = 0, // 0: internal pull-down disabled. (R/W)
    +            .MCU_WPU = 0, // 0: internal pull-up disabled. (R/W)
    +            .MCU_IE = 0, // 0: input disabled. (R/W)
    +            .FUN_WPD = 0, // 0: internal pull-down disabled. (R/W)
    +            .FUN_WPU = 0, // 0: internal pull-up disabled. (R/W)
    +            .FUN_IE = 0, // 0: input disabled. (R/W)
    +            .FUN_DRV = 3, // Select the drive strength of the pin. 0: ~5 mA; 1: ~ 10 mA; 2: ~ 20 mA; 3: ~40mA. (R/W)
    +            .MCU_SEL = 1, // 1: GPIO
    +            .FILTER_EN = 0, // 0: Filter disabled. (R/W)
    +        });
    +
    +        GPIO.FUNC_OUT_SEL_CFG[pin].write(.{
    +            // If a value 128 is written to this field, bit n of GPIO_OUT_REG and GPIO_ENABLE_REG will be selected as the output value and output enable. (R/W)
    +            .OUT_SEL = 0x80,
    +
    +            .INV_SEL = 0x00, // 0: Do not invert the output value
    +            .OEN_SEL = 0x01, // 1: Force the output enable signal to be sourced from bit n of GPIO_ENABLE_REG. (R/W)
    +            .OEN_INV_SEL = 0x00, // 0: Do not invert the output enable signal
    +
    +            .padding = 0,
    +        });
    +    }
    +
         microzig.hal.uart.write(0, "Hello from Zig!\r\n");
     
         while (true) {
             GPIO.OUT.modify(.{ .DATA_ORIG = (1 << LED_R_PIN) });
             microzig.hal.uart.write(0, "R");
             microzig.core.experimental.debug.busy_sleep(100_000);
    +
             GPIO.OUT.modify(.{ .DATA_ORIG = (1 << LED_G_PIN) });
             microzig.hal.uart.write(0, "G");
             microzig.core.experimental.debug.busy_sleep(100_000);
    +
             GPIO.OUT.modify(.{ .DATA_ORIG = (1 << LED_B_PIN) });
             microzig.hal.uart.write(0, "B");
             microzig.core.experimental.debug.busy_sleep(100_000);
         }
     }
    -
    -const LED_R_PIN = 3; // GPIO
    -const LED_G_PIN = 16; // GPIO
    -const LED_B_PIN = 17; // GPIO
    
    From 2b4034fe7947db0cbb2a92a8f9ac4364bdc627ff Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Sat, 23 Sep 2023 22:03:17 +0200
    Subject: [PATCH 223/286] Makes nrf52 stuff work barely, but no blinky yet.
    
    ---
     nordic-nrf5x/build.zig      | 72 ++++++++-----------------------------
     nordic-nrf5x/src/blinky.zig |  6 ++++
     2 files changed, 20 insertions(+), 58 deletions(-)
     create mode 100644 nordic-nrf5x/src/blinky.zig
    
    diff --git a/nordic-nrf5x/build.zig b/nordic-nrf5x/build.zig
    index 406477261..85a2b6f17 100644
    --- a/nordic-nrf5x/build.zig
    +++ b/nordic-nrf5x/build.zig
    @@ -1,75 +1,25 @@
     const std = @import("std");
    -const rp2040 = @import("rp2040");
    -const stm32 = @import("stm32");
    -const lpc = @import("lpc");
    -const gd32 = @import("gd32");
     const nrf5x = @import("nrf5x");
    -const esp = @import("esp");
    -const atmega = @import("atmega");
    +
    +const available_examples = [_]Example{
    +    .{ .name = "nrf52480-dongle_blinky", .target = nrf5x.boards.nordic.nRF52840_Dongle, .file = "src/blinky.zig" },
    +};
     
     pub fn build(b: *std.Build) void {
         const microzig = @import("microzig").init(b, "microzig");
         const optimize = b.standardOptimizeOption(.{});
     
    -    const TargetDesc = struct {
    -        target: @import("microzig").Target,
    -        name: []const u8,
    -    };
    -
    -    const available_targets = [_]TargetDesc{
    -        // RP2040
    -        .{ .name = "pico", .target = rp2040.boards.raspberry_pi.pico },
    -        .{ .name = "rp2040-eth", .target = rp2040.boards.waveshare.rp2040_eth },
    -        .{ .name = "rp2040-plus-4m", .target = rp2040.boards.waveshare.rp2040_plus_4m },
    -        .{ .name = "rp2040-plus-16m", .target = rp2040.boards.waveshare.rp2040_plus_16m },
    -        .{ .name = "rp2040-matrix", .target = rp2040.boards.waveshare.rp2040_matrix },
    -
    -        // STM32
    -        .{ .name = "stm32f103x8", .target = stm32.chips.stm32f103x8 },
    -        .{ .name = "stm32f303vc", .target = stm32.chips.stm32f303vc },
    -        .{ .name = "stm32f407vg", .target = stm32.chips.stm32f407vg },
    -        .{ .name = "stm32f429zit6u", .target = stm32.chips.stm32f429zit6u },
    -        .{ .name = "stm32f3discovery", .target = stm32.boards.stm32f3discovery },
    -        .{ .name = "stm32f4discovery", .target = stm32.boards.stm32f4discovery },
    -        .{ .name = "stm3240geval", .target = stm32.boards.stm3240geval },
    -        .{ .name = "stm32f429idiscovery", .target = stm32.boards.stm32f429idiscovery },
    -
    -        // NXP LPC
    -        .{ .name = "lpc176x5x", .target = lpc.chips.lpc176x5x },
    -        .{ .name = "mbed-lpc1768", .target = lpc.boards.mbed.lpc1768 },
    -
    -        // GigaDevice GD32
    -        .{ .name = "gd32vf103xb", .target = gd32.chips.gd32vf103xb },
    -        .{ .name = "gd32vf103x8", .target = gd32.chips.gd32vf103x8 },
    -        .{ .name = "sipeed-longan_nano", .target = gd32.boards.sipeed.longan_nano },
    -
    -        // Nordic Nrf5x
    -        .{ .name = "nrf52832", .target = nrf5x.chips.nrf52832 },
    -        .{ .name = "nrf52840", .target = nrf5x.chips.nrf52840 },
    -        .{ .name = "nrf52840-dongle", .target = nrf5x.boards.nordic.nRF52840_Dongle }, // TODO: Add support for DFU files!
    -
    -        // RISC-V Espressif ESP
    -        .{ .name = "esp32-c3", .target = esp.chips.esp32_c3 }, // TODO: Add support for Espressif Update Binaries
    -
    -        // Microchip ATmega
    -        // TODO: Fix compiler bugs
    -        // - https://github.com/ziglang/zig/issues/17219
    -        // .{ .name = "atmega328p", .target = atmega.chips.atmega328p },
    -        // .{ .name = "arduino-nano", .target = atmega.boards.arduino.nano },
    -        // .{ .name = "arduino-uno-rev3", .target = atmega.boards.arduino.uno_rev3 },
    -    };
    -
    -    for (available_targets) |dest| {
    +    for (available_examples) |example| {
             // `addFirmware` basically works like addExecutable, but takes a
             // `microzig.Target` for target instead of a `std.zig.CrossTarget`.
             //
             // The target will convey all necessary information on the chip,
             // cpu and potentially the board as well.
             const firmware = microzig.addFirmware(b, .{
    -            .name = b.fmt("empty-{s}", .{dest.name}),
    -            .target = dest.target,
    +            .name = example.name,
    +            .target = example.target,
                 .optimize = optimize,
    -            .source_file = .{ .path = "src/empty.zig" },
    +            .source_file = .{ .path = example.file },
             });
     
             // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()`
    @@ -82,3 +32,9 @@ pub fn build(b: *std.Build) void {
             microzig.installFirmware(b, firmware, .{ .format = .elf });
         }
     }
    +
    +const Example = struct {
    +    target: @import("microzig").Target,
    +    name: []const u8,
    +    file: []const u8,
    +};
    diff --git a/nordic-nrf5x/src/blinky.zig b/nordic-nrf5x/src/blinky.zig
    new file mode 100644
    index 000000000..db1529a0a
    --- /dev/null
    +++ b/nordic-nrf5x/src/blinky.zig
    @@ -0,0 +1,6 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +
    +pub fn main() !void {
    +    // TODO: Implement the blinky
    +}
    
    From 15ea39573194a5e3fba4d876aefd72f2a45f8606 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Sat, 23 Sep 2023 23:58:59 +0200
    Subject: [PATCH 224/286] Enables AVr
    
    ---
     .github/workflows/build.yml     |  2 +-
     microchip-atmega/build.zig      | 74 +++++++--------------------------
     microchip-atmega/src/blinky.zig | 15 +++++++
     nxp-lpc/README.md               |  5 ++-
     4 files changed, 34 insertions(+), 62 deletions(-)
     create mode 100644 microchip-atmega/src/blinky.zig
    
    diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
    index 2805e5313..08208de71 100644
    --- a/.github/workflows/build.yml
    +++ b/.github/workflows/build.yml
    @@ -16,8 +16,8 @@ jobs:
               - raspberrypi-rp2040
               - espressif-esp
               - nxp-lpc
    +          - microchip-atmega
               # TODO: - gigadevice-gd32
    -          # TODO: - microchip-atmega
               # TODO: - nordic-nrf5x
               # TODO: - stmicro-stm32
             os:
    diff --git a/microchip-atmega/build.zig b/microchip-atmega/build.zig
    index 406477261..4eba0c2fa 100644
    --- a/microchip-atmega/build.zig
    +++ b/microchip-atmega/build.zig
    @@ -1,75 +1,25 @@
     const std = @import("std");
    -const rp2040 = @import("rp2040");
    -const stm32 = @import("stm32");
    -const lpc = @import("lpc");
    -const gd32 = @import("gd32");
    -const nrf5x = @import("nrf5x");
    -const esp = @import("esp");
     const atmega = @import("atmega");
     
    +const available_examples = [_]Example{
    +    .{ .name = "arduino-nano_blinky", .target = atmega.boards.arduino.nano, .file = "src/blinky.zig" },
    +};
    +
     pub fn build(b: *std.Build) void {
         const microzig = @import("microzig").init(b, "microzig");
    -    const optimize = b.standardOptimizeOption(.{});
    -
    -    const TargetDesc = struct {
    -        target: @import("microzig").Target,
    -        name: []const u8,
    -    };
    -
    -    const available_targets = [_]TargetDesc{
    -        // RP2040
    -        .{ .name = "pico", .target = rp2040.boards.raspberry_pi.pico },
    -        .{ .name = "rp2040-eth", .target = rp2040.boards.waveshare.rp2040_eth },
    -        .{ .name = "rp2040-plus-4m", .target = rp2040.boards.waveshare.rp2040_plus_4m },
    -        .{ .name = "rp2040-plus-16m", .target = rp2040.boards.waveshare.rp2040_plus_16m },
    -        .{ .name = "rp2040-matrix", .target = rp2040.boards.waveshare.rp2040_matrix },
    -
    -        // STM32
    -        .{ .name = "stm32f103x8", .target = stm32.chips.stm32f103x8 },
    -        .{ .name = "stm32f303vc", .target = stm32.chips.stm32f303vc },
    -        .{ .name = "stm32f407vg", .target = stm32.chips.stm32f407vg },
    -        .{ .name = "stm32f429zit6u", .target = stm32.chips.stm32f429zit6u },
    -        .{ .name = "stm32f3discovery", .target = stm32.boards.stm32f3discovery },
    -        .{ .name = "stm32f4discovery", .target = stm32.boards.stm32f4discovery },
    -        .{ .name = "stm3240geval", .target = stm32.boards.stm3240geval },
    -        .{ .name = "stm32f429idiscovery", .target = stm32.boards.stm32f429idiscovery },
    -
    -        // NXP LPC
    -        .{ .name = "lpc176x5x", .target = lpc.chips.lpc176x5x },
    -        .{ .name = "mbed-lpc1768", .target = lpc.boards.mbed.lpc1768 },
    +    const optimize = .ReleaseSmall; // The others are not really an option on AVR
     
    -        // GigaDevice GD32
    -        .{ .name = "gd32vf103xb", .target = gd32.chips.gd32vf103xb },
    -        .{ .name = "gd32vf103x8", .target = gd32.chips.gd32vf103x8 },
    -        .{ .name = "sipeed-longan_nano", .target = gd32.boards.sipeed.longan_nano },
    -
    -        // Nordic Nrf5x
    -        .{ .name = "nrf52832", .target = nrf5x.chips.nrf52832 },
    -        .{ .name = "nrf52840", .target = nrf5x.chips.nrf52840 },
    -        .{ .name = "nrf52840-dongle", .target = nrf5x.boards.nordic.nRF52840_Dongle }, // TODO: Add support for DFU files!
    -
    -        // RISC-V Espressif ESP
    -        .{ .name = "esp32-c3", .target = esp.chips.esp32_c3 }, // TODO: Add support for Espressif Update Binaries
    -
    -        // Microchip ATmega
    -        // TODO: Fix compiler bugs
    -        // - https://github.com/ziglang/zig/issues/17219
    -        // .{ .name = "atmega328p", .target = atmega.chips.atmega328p },
    -        // .{ .name = "arduino-nano", .target = atmega.boards.arduino.nano },
    -        // .{ .name = "arduino-uno-rev3", .target = atmega.boards.arduino.uno_rev3 },
    -    };
    -
    -    for (available_targets) |dest| {
    +    for (available_examples) |example| {
             // `addFirmware` basically works like addExecutable, but takes a
             // `microzig.Target` for target instead of a `std.zig.CrossTarget`.
             //
             // The target will convey all necessary information on the chip,
             // cpu and potentially the board as well.
             const firmware = microzig.addFirmware(b, .{
    -            .name = b.fmt("empty-{s}", .{dest.name}),
    -            .target = dest.target,
    +            .name = example.name,
    +            .target = example.target,
                 .optimize = optimize,
    -            .source_file = .{ .path = "src/empty.zig" },
    +            .source_file = .{ .path = example.file },
             });
     
             // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()`
    @@ -82,3 +32,9 @@ pub fn build(b: *std.Build) void {
             microzig.installFirmware(b, firmware, .{ .format = .elf });
         }
     }
    +
    +const Example = struct {
    +    target: @import("microzig").Target,
    +    name: []const u8,
    +    file: []const u8,
    +};
    diff --git a/microchip-atmega/src/blinky.zig b/microchip-atmega/src/blinky.zig
    new file mode 100644
    index 000000000..2d2f2a157
    --- /dev/null
    +++ b/microchip-atmega/src/blinky.zig
    @@ -0,0 +1,15 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +
    +// LED is PB5
    +const port = microzig.chip.peripherals.PORTB;
    +
    +pub fn main() void {
    +    port.DDRB |= (1 << 5);
    +    port.PORTB |= 0x00;
    +
    +    while (true) {
    +        microzig.core.experimental.debug.busy_sleep(1_000);
    +        port.PINB |= (1 << 5);
    +    }
    +}
    diff --git a/nxp-lpc/README.md b/nxp-lpc/README.md
    index 7bc74a7b4..7909f7c4c 100644
    --- a/nxp-lpc/README.md
    +++ b/nxp-lpc/README.md
    @@ -1,4 +1,5 @@
     # Examples for the BSP `nxp-lpc`
     
    -- [Blinky](src/blinky.zig) on [mbed LPC1768](https://os.mbed.com/platforms/mbed-LPC1768/)  
    -  Performs a really basic round robin blinky on the four LEDs on the development board. Flash by copying `zig-out/firmware/mbed-lpc1768_blinky.hex` to the mass storage of the board, then press the big button in the center.
    +- [Blinky](src/blinky.zig) on [nRF52840 Dongle](https://www.nordicsemi.com/Products/Development-hardware/nrf52840-dongle)  
    +  TODO: Implement this!
    +
    
    From 237890d49ee795110a63df2c45bdd6f6a0029a72 Mon Sep 17 00:00:00 2001
    From: fmaggi <61335294+fmaggi@users.noreply.github.com>
    Date: Mon, 25 Sep 2023 12:14:35 -0300
    Subject: [PATCH 225/286] Blue pill hal (#28)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    * Rework for MicroZig Gen 2
    
    * gpio hal for blue pill
    
    * added a comment
    
    * better interface
    
    * Started implementing pins interface
    
    * commented unused stuff for now
    
    * forgot setting pin mode
    
    * fixed somethings I forgot
    
    * made global config have fields instead of decls
    
    * fixed a bug
    
    * Lots of bugs
    
    * bugs bugs and more bugs
    
    * bugs bunny
    
    * forgot ?
    
    * i
    
    * sizes
    
    * so weird
    
    * weird size
    
    * const issues
    
    * const issues
    
    * always const issues
    
    * what is happeningn
    
    * weird issues
    
    * finally got a led to turn on!
    
    * Rework for MicroZig Gen 2
    
    * Rebased onto master
    
    ---------
    
    Co-authored-by: Felix "xq" Queißner 
    ---
     build.zig                   |   4 +
     src/hals/STM32F103/gpio.zig | 160 ++++++++++++++++++++++++
     src/hals/STM32F103/hal.zig  |   3 +
     src/hals/STM32F103/pins.zig | 237 ++++++++++++++++++++++++++++++++++++
     4 files changed, 404 insertions(+)
     create mode 100644 src/hals/STM32F103/gpio.zig
     create mode 100644 src/hals/STM32F103/hal.zig
     create mode 100644 src/hals/STM32F103/pins.zig
    
    diff --git a/build.zig b/build.zig
    index 7a0aac02c..410578209 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -5,6 +5,7 @@ fn root() []const u8 {
         return comptime (std.fs.path.dirname(@src().file) orelse ".");
     }
     const build_root = root();
    +
     const KiB = 1024;
     
     ////////////////////////////////////////
    @@ -30,6 +31,9 @@ pub const chips = struct {
                     .json = .{ .cwd_relative = build_root ++ "/src/chips/STM32F103.json" },
                 },
             },
    +        .hal = .{
    +            .source_file = .{ .cwd_relative = build_root ++ "/src/hals/STM32F103/hal.zig" },
    +        },
         };
     
         pub const stm32f303vc = .{
    diff --git a/src/hals/STM32F103/gpio.zig b/src/hals/STM32F103/gpio.zig
    new file mode 100644
    index 000000000..811a80c04
    --- /dev/null
    +++ b/src/hals/STM32F103/gpio.zig
    @@ -0,0 +1,160 @@
    +const std = @import("std");
    +const assert = std.debug.assert;
    +
    +const microzig = @import("microzig");
    +pub const peripherals = microzig.chip.peripherals;
    +
    +const GPIOA = peripherals.GPIOA;
    +const GPIOB = peripherals.GPIOB;
    +const GPIOC = peripherals.GPIOC;
    +const GPIOD = peripherals.GPIOD;
    +const GPIOE = peripherals.GPIOE;
    +const GPIOF = peripherals.GPIOF;
    +const GPIOG = peripherals.GPIOG;
    +
    +const GPIO = @TypeOf(GPIOA);
    +
    +const log = std.log.scoped(.gpio);
    +
    +pub const Function = enum {};
    +
    +pub const Mode = union(enum) {
    +    input: InputMode,
    +    output: OutputMode,
    +};
    +
    +pub const InputMode = enum(u2) {
    +    analog,
    +    floating,
    +    pull,
    +    reserved,
    +};
    +
    +pub const OutputMode = enum(u2) {
    +    general_purpose_push_pull,
    +    general_purpose_open_drain,
    +    alternate_function_push_pull,
    +    alternate_function_open_drain,
    +};
    +
    +pub const Speed = enum(u2) {
    +    reserved,
    +    max_10MHz,
    +    max_2MHz,
    +    max_50MHz,
    +};
    +
    +pub const IrqLevel = enum(u2) {
    +    low,
    +    high,
    +    fall,
    +    rise,
    +};
    +
    +pub const IrqCallback = fn (gpio: u32, events: u32) callconv(.C) void;
    +
    +pub const Enabled = enum {
    +    disabled,
    +    enabled,
    +};
    +
    +pub const Pull = enum {
    +    up,
    +    down,
    +};
    +
    +// NOTE: With this current setup, every time we want to do anythting we go through a switch
    +//       Do we want this?
    +pub const Pin = packed struct(u8) {
    +    number: u4,
    +    port: u3,
    +    padding: u1,
    +
    +    pub fn init(port: u3, number: u4) Pin {
    +        return Pin{
    +            .number = number,
    +            .port = port,
    +            .padding = 0,
    +        };
    +    }
    +    inline fn write_pin_config(gpio: Pin, config: u32) void {
    +        const port = gpio.get_port();
    +        if (gpio.number <= 7) {
    +            const offset = @as(u5, gpio.number) << 2;
    +            port.CRL.raw &= ~(@as(u32, 0b1111) << offset);
    +            port.CRL.raw |= config << offset;
    +        } else {
    +            const offset = (@as(u5, gpio.number) - 8) << 2;
    +            port.CRH.raw &= ~(@as(u32, 0b1111) << offset);
    +            port.CRH.raw |= config << offset;
    +        }
    +    }
    +
    +    fn mask(gpio: Pin) u16 {
    +        return @as(u16, 1) << gpio.number;
    +    }
    +
    +    // NOTE: Im not sure I like this
    +    //       We could probably calculate an offset from GPIOA?
    +    pub fn get_port(gpio: Pin) GPIO {
    +        return switch (gpio.port) {
    +            0 => GPIOA,
    +            1 => GPIOB,
    +            2 => GPIOC,
    +            3 => GPIOD,
    +            4 => GPIOE,
    +            5 => GPIOF,
    +            6 => GPIOG,
    +            7 => @panic("The STM32 only has ports 0..6 (A..G)"),
    +        };
    +    }
    +
    +    pub inline fn set_mode(gpio: Pin, mode: Mode) void {
    +        switch (mode) {
    +            .input => |in| gpio.set_input_mode(in),
    +            .output => |out| gpio.set_output_mode(out, .max_2MHz),
    +        }
    +    }
    +
    +    pub inline fn set_input_mode(gpio: Pin, mode: InputMode) void {
    +        const m_mode = @as(u32, @intFromEnum(mode));
    +        const config: u32 = m_mode << 2;
    +        gpio.write_pin_config(config);
    +    }
    +
    +    pub inline fn set_output_mode(gpio: Pin, mode: OutputMode, speed: Speed) void {
    +        const s_speed = @as(u32, @intFromEnum(speed));
    +        const m_mode = @as(u32, @intFromEnum(mode));
    +        const config: u32 = s_speed + (m_mode << 2);
    +        gpio.write_pin_config(config);
    +    }
    +
    +    pub inline fn set_pull(gpio: Pin, pull: Pull) void {
    +        var port = gpio.get_port();
    +        switch (pull) {
    +            .up => port.BSRR.raw = gpio.mask(),
    +            .down => port.BRR.raw = gpio.mask(),
    +        }
    +    }
    +
    +    pub inline fn read(gpio: Pin) u1 {
    +        const port = gpio.get_port();
    +        return if (port.IDR.raw & gpio.mask() != 0)
    +            1
    +        else
    +            0;
    +    }
    +
    +    pub inline fn put(gpio: Pin, value: u1) void {
    +        var port = gpio.get_port();
    +        switch (value) {
    +            0 => port.BSRR.raw = gpio.mask() << 16,
    +            1 => port.BSRR.raw = gpio.mask(),
    +        }
    +    }
    +
    +    pub inline fn toggle(gpio: Pin) void {
    +        var port = gpio.get_port();
    +        port.ODR.raw ^= gpio.mask();
    +    }
    +};
    diff --git a/src/hals/STM32F103/hal.zig b/src/hals/STM32F103/hal.zig
    new file mode 100644
    index 000000000..fafa677a6
    --- /dev/null
    +++ b/src/hals/STM32F103/hal.zig
    @@ -0,0 +1,3 @@
    +pub const pins = @import("pins.zig");
    +
    +pub fn init() void {}
    diff --git a/src/hals/STM32F103/pins.zig b/src/hals/STM32F103/pins.zig
    new file mode 100644
    index 000000000..021dd6c11
    --- /dev/null
    +++ b/src/hals/STM32F103/pins.zig
    @@ -0,0 +1,237 @@
    +const std = @import("std");
    +const assert = std.debug.assert;
    +const comptimePrint = std.fmt.comptimePrint;
    +const StructField = std.builtin.Type.StructField;
    +
    +const microzig = @import("microzig");
    +
    +const RCC = microzig.chip.peripherals.RCC;
    +
    +const gpio = @import("gpio.zig");
    +// const pwm = @import("pwm.zig");
    +// const adc = @import("adc.zig");
    +// const resets = @import("resets.zig");
    +
    +pub const Pin = enum {
    +    PIN0,
    +    PIN1,
    +    PIN2,
    +    PIN3,
    +    PIN4,
    +    PIN5,
    +    PIN6,
    +    PIN7,
    +    PIN8,
    +    PIN9,
    +    PIN10,
    +    PIN11,
    +    PIN12,
    +    PIN13,
    +    PIN14,
    +    PIN15,
    +    pub const Configuration = struct {
    +        name: ?[]const u8 = null,
    +        // function: Function = .SIO,
    +        mode: ?gpio.Mode = null,
    +        speed: ?gpio.Speed = null,
    +        pull: ?gpio.Pull = null,
    +        // input/output enable
    +        // schmitt trigger
    +        // hysteresis
    +
    +        pub fn get_mode(comptime config: Configuration) gpio.Mode {
    +            return if (config.mode) |mode|
    +                mode
    +                // else if (comptime config.function.is_pwm())
    +                //     .out
    +                // else if (comptime config.function.is_uart_tx())
    +                //     .out
    +                // else if (comptime config.function.is_uart_rx())
    +                //     .in
    +                // else if (comptime config.function.is_adc())
    +                //     .in
    +            else
    +                @panic("TODO");
    +        }
    +    };
    +};
    +
    +pub fn GPIO(comptime port: u3, comptime num: u4, comptime mode: gpio.Mode) type {
    +    return switch (mode) {
    +        .input => struct {
    +            const pin = gpio.Pin.init(port, num);
    +
    +            pub inline fn read(self: @This()) u1 {
    +                _ = self;
    +                return pin.read();
    +            }
    +        },
    +        .output => struct {
    +            const pin = gpio.Pin.init(port, num);
    +
    +            pub inline fn put(self: @This(), value: u1) void {
    +                _ = self;
    +                pin.put(value);
    +            }
    +
    +            pub inline fn toggle(self: @This()) void {
    +                _ = self;
    +                pin.toggle();
    +            }
    +        },
    +    };
    +}
    +
    +pub fn Pins(comptime config: GlobalConfiguration) type {
    +    comptime {
    +        var fields: []const StructField = &.{};
    +        for (@typeInfo(GlobalConfiguration).Struct.fields) |port_field| {
    +            if (@field(config, port_field.name)) |port_config| {
    +                for (@typeInfo(Port.Configuration).Struct.fields) |field| {
    +                    if (@field(port_config, field.name)) |pin_config| {
    +                        var pin_field = StructField{
    +                            .is_comptime = false,
    +                            .default_value = null,
    +
    +                            // initialized below:
    +                            .name = undefined,
    +                            .type = undefined,
    +                            .alignment = undefined,
    +                        };
    +
    +                        pin_field.name = pin_config.name orelse field.name;
    +                        pin_field.type = GPIO(@intFromEnum(@field(Port, port_field.name)), @intFromEnum(@field(Pin, field.name)), pin_config.mode orelse .{ .input = .{.floating} });
    +                        pin_field.alignment = @alignOf(field.type);
    +
    +                        fields = fields ++ &[_]StructField{pin_field};
    +                    }
    +                }
    +            }
    +        }
    +
    +        return @Type(.{
    +            .Struct = .{
    +                .layout = .Auto,
    +                .is_tuple = false,
    +                .fields = fields,
    +                .decls = &.{},
    +            },
    +        });
    +    }
    +}
    +
    +pub const Port = enum {
    +    GPIOA,
    +    GPIOB,
    +    GPIOC,
    +    GPIOD,
    +    GPIOE,
    +    GPIOF,
    +    GPIOG,
    +    pub const Configuration = struct {
    +        PIN0: ?Pin.Configuration = null,
    +        PIN1: ?Pin.Configuration = null,
    +        PIN2: ?Pin.Configuration = null,
    +        PIN3: ?Pin.Configuration = null,
    +        PIN4: ?Pin.Configuration = null,
    +        PIN5: ?Pin.Configuration = null,
    +        PIN6: ?Pin.Configuration = null,
    +        PIN7: ?Pin.Configuration = null,
    +        PIN8: ?Pin.Configuration = null,
    +        PIN9: ?Pin.Configuration = null,
    +        PIN10: ?Pin.Configuration = null,
    +        PIN11: ?Pin.Configuration = null,
    +        PIN12: ?Pin.Configuration = null,
    +        PIN13: ?Pin.Configuration = null,
    +        PIN14: ?Pin.Configuration = null,
    +        PIN15: ?Pin.Configuration = null,
    +
    +        comptime {
    +            const pin_field_count = @typeInfo(Pin).Enum.fields.len;
    +            const config_field_count = @typeInfo(Configuration).Struct.fields.len;
    +            if (pin_field_count != config_field_count)
    +                @compileError(comptimePrint("{} {}", .{ pin_field_count, config_field_count }));
    +        }
    +    };
    +};
    +
    +pub const GlobalConfiguration = struct {
    +    GPIOA: ?Port.Configuration = null,
    +    GPIOB: ?Port.Configuration = null,
    +    GPIOC: ?Port.Configuration = null,
    +    GPIOD: ?Port.Configuration = null,
    +    GPIOE: ?Port.Configuration = null,
    +    GPIOF: ?Port.Configuration = null,
    +    GPIOG: ?Port.Configuration = null,
    +
    +    comptime {
    +        const port_field_count = @typeInfo(Port).Enum.fields.len;
    +        const config_field_count = @typeInfo(GlobalConfiguration).Struct.fields.len;
    +        if (port_field_count != config_field_count)
    +            @compileError(comptimePrint("{} {}", .{ port_field_count, config_field_count }));
    +    }
    +
    +    pub fn apply(comptime config: GlobalConfiguration) Pins(config) {
    +        inline for (@typeInfo(GlobalConfiguration).Struct.fields) |port_field| {
    +            if (@field(config, port_field.name)) |port_config| {
    +                comptime var input_gpios: u16 = 0;
    +                comptime var output_gpios: u16 = 0;
    +                comptime {
    +                    inline for (@typeInfo(Port.Configuration).Struct.fields) |field|
    +                        if (@field(port_config, field.name)) |pin_config| {
    +                            const gpio_num = @intFromEnum(@field(Pin, field.name));
    +
    +                            switch (pin_config.get_mode()) {
    +                                .input => input_gpios |= 1 << gpio_num,
    +                                .output => output_gpios |= 1 << gpio_num,
    +                            }
    +                        };
    +                }
    +
    +                // TODO: ensure only one instance of an input function exists
    +                const used_gpios = comptime input_gpios | output_gpios;
    +
    +                if (used_gpios != 0) {
    +                    const offset = @intFromEnum(@field(Port, port_field.name)) + 2;
    +                    const bit = @as(u32, 1 << offset);
    +                    RCC.APB2ENR.raw |= bit;
    +                    // Delay after setting
    +                    _ = RCC.APB2ENR.raw & bit;
    +                }
    +
    +                inline for (@typeInfo(Port.Configuration).Struct.fields) |field| {
    +                    if (@field(port_config, field.name)) |pin_config| {
    +                        var pin = gpio.Pin.init(@intFromEnum(@field(Port, port_field.name)), @intFromEnum(@field(Pin, field.name)));
    +                        pin.set_mode(pin_config.mode.?);
    +                    }
    +                }
    +
    +                if (input_gpios != 0) {
    +                    inline for (@typeInfo(Port.Configuration).Struct.fields) |field|
    +                        if (@field(port_config, field.name)) |pin_config| {
    +                            var pin = gpio.Pin.init(@intFromEnum(@field(Port, port_field.name)), @intFromEnum(@field(Pin, field.name)));
    +                            const pull = pin_config.pull orelse continue;
    +                            if (comptime pin_config.get_mode() != .input)
    +                                @compileError("Only input pins can have pull up/down enabled");
    +
    +                            pin.set_pull(pull);
    +                        };
    +                }
    +            }
    +        }
    +
    +        // fields in the Pins(config) type should be zero sized, so we just
    +        // default build them all (wasn't sure how to do that cleanly in
    +        // `Pins()`
    +        var ret: Pins(config) = undefined;
    +        inline for (@typeInfo(Pins(config)).Struct.fields) |field| {
    +            if (field.default_value) |default_value| {
    +                @field(ret, field.name) = @as(*const field.field_type, @ptrCast(default_value)).*;
    +            } else {
    +                @field(ret, field.name) = .{};
    +            }
    +        }
    +        return ret;
    +        // validate selected function
    +    }
    +};
    
    From a9c3ae56907ad8949325dfb7e532a038e5d6ec77 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Mon, 25 Sep 2023 18:41:49 +0200
    Subject: [PATCH 226/286] Enables all packages, with no examples if defunct.
    
    ---
     .github/workflows/build.yml |  6 +--
     gigadevice-gd32/build.zig   | 76 ++++++++--------------------------
     microchip-atmega/build.zig  |  2 +-
     stmicro-stm32/build.zig     | 81 ++++++++++---------------------------
     4 files changed, 43 insertions(+), 122 deletions(-)
    
    diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
    index 08208de71..720973f40 100644
    --- a/.github/workflows/build.yml
    +++ b/.github/workflows/build.yml
    @@ -17,9 +17,9 @@ jobs:
               - espressif-esp
               - nxp-lpc
               - microchip-atmega
    -          # TODO: - gigadevice-gd32
    -          # TODO: - nordic-nrf5x
    -          # TODO: - stmicro-stm32
    +          - gigadevice-gd32
    +          - nordic-nrf5x
    +          - stmicro-stm32
             os:
               - windows-latest
               - macos-latest
    diff --git a/gigadevice-gd32/build.zig b/gigadevice-gd32/build.zig
    index 406477261..b7a2e4cf7 100644
    --- a/gigadevice-gd32/build.zig
    +++ b/gigadevice-gd32/build.zig
    @@ -1,75 +1,27 @@
     const std = @import("std");
    -const rp2040 = @import("rp2040");
    -const stm32 = @import("stm32");
    -const lpc = @import("lpc");
     const gd32 = @import("gd32");
    -const nrf5x = @import("nrf5x");
    -const esp = @import("esp");
    -const atmega = @import("atmega");
    +
    +const available_examples = [_]Example{
    +    // .{ .name = "gd32vf103xb", .target = gd32.chips.gd32vf103xb, .file = "src/blinky.zig" },
    +    // .{ .name = "gd32vf103x8", .target = gd32.chips.gd32vf103x8, .file = "src/blinky.zig" },
    +    // .{ .name = "sipeed-longan_nano", .target = gd32.boards.sipeed.longan_nano, .file = "src/blinky.zig" },
    +};
     
     pub fn build(b: *std.Build) void {
         const microzig = @import("microzig").init(b, "microzig");
    -    const optimize = b.standardOptimizeOption(.{});
    -
    -    const TargetDesc = struct {
    -        target: @import("microzig").Target,
    -        name: []const u8,
    -    };
    -
    -    const available_targets = [_]TargetDesc{
    -        // RP2040
    -        .{ .name = "pico", .target = rp2040.boards.raspberry_pi.pico },
    -        .{ .name = "rp2040-eth", .target = rp2040.boards.waveshare.rp2040_eth },
    -        .{ .name = "rp2040-plus-4m", .target = rp2040.boards.waveshare.rp2040_plus_4m },
    -        .{ .name = "rp2040-plus-16m", .target = rp2040.boards.waveshare.rp2040_plus_16m },
    -        .{ .name = "rp2040-matrix", .target = rp2040.boards.waveshare.rp2040_matrix },
    -
    -        // STM32
    -        .{ .name = "stm32f103x8", .target = stm32.chips.stm32f103x8 },
    -        .{ .name = "stm32f303vc", .target = stm32.chips.stm32f303vc },
    -        .{ .name = "stm32f407vg", .target = stm32.chips.stm32f407vg },
    -        .{ .name = "stm32f429zit6u", .target = stm32.chips.stm32f429zit6u },
    -        .{ .name = "stm32f3discovery", .target = stm32.boards.stm32f3discovery },
    -        .{ .name = "stm32f4discovery", .target = stm32.boards.stm32f4discovery },
    -        .{ .name = "stm3240geval", .target = stm32.boards.stm3240geval },
    -        .{ .name = "stm32f429idiscovery", .target = stm32.boards.stm32f429idiscovery },
    -
    -        // NXP LPC
    -        .{ .name = "lpc176x5x", .target = lpc.chips.lpc176x5x },
    -        .{ .name = "mbed-lpc1768", .target = lpc.boards.mbed.lpc1768 },
    +    const optimize = .ReleaseSmall; // The others are not really an option on AVR
     
    -        // GigaDevice GD32
    -        .{ .name = "gd32vf103xb", .target = gd32.chips.gd32vf103xb },
    -        .{ .name = "gd32vf103x8", .target = gd32.chips.gd32vf103x8 },
    -        .{ .name = "sipeed-longan_nano", .target = gd32.boards.sipeed.longan_nano },
    -
    -        // Nordic Nrf5x
    -        .{ .name = "nrf52832", .target = nrf5x.chips.nrf52832 },
    -        .{ .name = "nrf52840", .target = nrf5x.chips.nrf52840 },
    -        .{ .name = "nrf52840-dongle", .target = nrf5x.boards.nordic.nRF52840_Dongle }, // TODO: Add support for DFU files!
    -
    -        // RISC-V Espressif ESP
    -        .{ .name = "esp32-c3", .target = esp.chips.esp32_c3 }, // TODO: Add support for Espressif Update Binaries
    -
    -        // Microchip ATmega
    -        // TODO: Fix compiler bugs
    -        // - https://github.com/ziglang/zig/issues/17219
    -        // .{ .name = "atmega328p", .target = atmega.chips.atmega328p },
    -        // .{ .name = "arduino-nano", .target = atmega.boards.arduino.nano },
    -        // .{ .name = "arduino-uno-rev3", .target = atmega.boards.arduino.uno_rev3 },
    -    };
    -
    -    for (available_targets) |dest| {
    +    for (available_examples) |example| {
             // `addFirmware` basically works like addExecutable, but takes a
             // `microzig.Target` for target instead of a `std.zig.CrossTarget`.
             //
             // The target will convey all necessary information on the chip,
             // cpu and potentially the board as well.
             const firmware = microzig.addFirmware(b, .{
    -            .name = b.fmt("empty-{s}", .{dest.name}),
    -            .target = dest.target,
    +            .name = example.name,
    +            .target = example.target,
                 .optimize = optimize,
    -            .source_file = .{ .path = "src/empty.zig" },
    +            .source_file = .{ .path = example.file },
             });
     
             // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()`
    @@ -82,3 +34,9 @@ pub fn build(b: *std.Build) void {
             microzig.installFirmware(b, firmware, .{ .format = .elf });
         }
     }
    +
    +const Example = struct {
    +    target: @import("microzig").Target,
    +    name: []const u8,
    +    file: []const u8,
    +};
    diff --git a/microchip-atmega/build.zig b/microchip-atmega/build.zig
    index 4eba0c2fa..6459450dd 100644
    --- a/microchip-atmega/build.zig
    +++ b/microchip-atmega/build.zig
    @@ -2,7 +2,7 @@ const std = @import("std");
     const atmega = @import("atmega");
     
     const available_examples = [_]Example{
    -    .{ .name = "arduino-nano_blinky", .target = atmega.boards.arduino.nano, .file = "src/blinky.zig" },
    +    // TODO:    .{ .name = "arduino-nano_blinky", .target = atmega.boards.arduino.nano, .file = "src/blinky.zig" },
     };
     
     pub fn build(b: *std.Build) void {
    diff --git a/stmicro-stm32/build.zig b/stmicro-stm32/build.zig
    index 406477261..26bbda7eb 100644
    --- a/stmicro-stm32/build.zig
    +++ b/stmicro-stm32/build.zig
    @@ -1,75 +1,32 @@
     const std = @import("std");
    -const rp2040 = @import("rp2040");
     const stm32 = @import("stm32");
    -const lpc = @import("lpc");
    -const gd32 = @import("gd32");
    -const nrf5x = @import("nrf5x");
    -const esp = @import("esp");
    -const atmega = @import("atmega");
    +
    +const available_examples = [_]Example{
    +    // TODO: .{ .name = "stm32f103x8", .target = stm32.chips.stm32f103x8, .file = "src/blinky.zig" },
    +    // TODO: .{ .name = "stm32f303vc", .target = stm32.chips.stm32f303vc, .file = "src/blinky.zig" },
    +    // TODO: .{ .name = "stm32f407vg", .target = stm32.chips.stm32f407vg, .file = "src/blinky.zig" },
    +    // TODO: .{ .name = "stm32f429zit6u", .target = stm32.chips.stm32f429zit6u, .file = "src/blinky.zig" },
    +    // TODO: .{ .name = "stm32f3discovery", .target = stm32.boards.stm32f3discovery, .file = "src/blinky.zig" },
    +    // TODO: .{ .name = "stm32f4discovery", .target = stm32.boards.stm32f4discovery, .file = "src/blinky.zig" },
    +    // TODO: .{ .name = "stm3240geval", .target = stm32.boards.stm3240geval, .file = "src/blinky.zig" },
    +    // TODO: .{ .name = "stm32f429idiscovery", .target = stm32.boards.stm32f429idiscovery, .file = "src/blinky.zig" },
    +};
     
     pub fn build(b: *std.Build) void {
         const microzig = @import("microzig").init(b, "microzig");
    -    const optimize = b.standardOptimizeOption(.{});
    -
    -    const TargetDesc = struct {
    -        target: @import("microzig").Target,
    -        name: []const u8,
    -    };
    -
    -    const available_targets = [_]TargetDesc{
    -        // RP2040
    -        .{ .name = "pico", .target = rp2040.boards.raspberry_pi.pico },
    -        .{ .name = "rp2040-eth", .target = rp2040.boards.waveshare.rp2040_eth },
    -        .{ .name = "rp2040-plus-4m", .target = rp2040.boards.waveshare.rp2040_plus_4m },
    -        .{ .name = "rp2040-plus-16m", .target = rp2040.boards.waveshare.rp2040_plus_16m },
    -        .{ .name = "rp2040-matrix", .target = rp2040.boards.waveshare.rp2040_matrix },
    -
    -        // STM32
    -        .{ .name = "stm32f103x8", .target = stm32.chips.stm32f103x8 },
    -        .{ .name = "stm32f303vc", .target = stm32.chips.stm32f303vc },
    -        .{ .name = "stm32f407vg", .target = stm32.chips.stm32f407vg },
    -        .{ .name = "stm32f429zit6u", .target = stm32.chips.stm32f429zit6u },
    -        .{ .name = "stm32f3discovery", .target = stm32.boards.stm32f3discovery },
    -        .{ .name = "stm32f4discovery", .target = stm32.boards.stm32f4discovery },
    -        .{ .name = "stm3240geval", .target = stm32.boards.stm3240geval },
    -        .{ .name = "stm32f429idiscovery", .target = stm32.boards.stm32f429idiscovery },
    -
    -        // NXP LPC
    -        .{ .name = "lpc176x5x", .target = lpc.chips.lpc176x5x },
    -        .{ .name = "mbed-lpc1768", .target = lpc.boards.mbed.lpc1768 },
    +    const optimize = .ReleaseSmall; // The others are not really an option on AVR
     
    -        // GigaDevice GD32
    -        .{ .name = "gd32vf103xb", .target = gd32.chips.gd32vf103xb },
    -        .{ .name = "gd32vf103x8", .target = gd32.chips.gd32vf103x8 },
    -        .{ .name = "sipeed-longan_nano", .target = gd32.boards.sipeed.longan_nano },
    -
    -        // Nordic Nrf5x
    -        .{ .name = "nrf52832", .target = nrf5x.chips.nrf52832 },
    -        .{ .name = "nrf52840", .target = nrf5x.chips.nrf52840 },
    -        .{ .name = "nrf52840-dongle", .target = nrf5x.boards.nordic.nRF52840_Dongle }, // TODO: Add support for DFU files!
    -
    -        // RISC-V Espressif ESP
    -        .{ .name = "esp32-c3", .target = esp.chips.esp32_c3 }, // TODO: Add support for Espressif Update Binaries
    -
    -        // Microchip ATmega
    -        // TODO: Fix compiler bugs
    -        // - https://github.com/ziglang/zig/issues/17219
    -        // .{ .name = "atmega328p", .target = atmega.chips.atmega328p },
    -        // .{ .name = "arduino-nano", .target = atmega.boards.arduino.nano },
    -        // .{ .name = "arduino-uno-rev3", .target = atmega.boards.arduino.uno_rev3 },
    -    };
    -
    -    for (available_targets) |dest| {
    +    for (available_examples) |example| {
             // `addFirmware` basically works like addExecutable, but takes a
             // `microzig.Target` for target instead of a `std.zig.CrossTarget`.
             //
             // The target will convey all necessary information on the chip,
             // cpu and potentially the board as well.
             const firmware = microzig.addFirmware(b, .{
    -            .name = b.fmt("empty-{s}", .{dest.name}),
    -            .target = dest.target,
    +            .name = example.name,
    +            .target = example.target,
                 .optimize = optimize,
    -            .source_file = .{ .path = "src/empty.zig" },
    +            .source_file = .{ .path = example.file },
             });
     
             // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()`
    @@ -82,3 +39,9 @@ pub fn build(b: *std.Build) void {
             microzig.installFirmware(b, firmware, .{ .format = .elf });
         }
     }
    +
    +const Example = struct {
    +    target: @import("microzig").Target,
    +    name: []const u8,
    +    file: []const u8,
    +};
    
    From b63d10598fa15bbadc7e2fe3f482ddfa097e9415 Mon Sep 17 00:00:00 2001
    From: Francisco 
    Date: Tue, 26 Sep 2023 09:37:41 -0300
    Subject: [PATCH 227/286] blinky for the stm32f103
    
    ---
     stmicro-stm32/build.zig      |  2 +-
     stmicro-stm32/build.zig.zon  |  4 ++--
     stmicro-stm32/src/blinky.zig | 22 ++++++++++++++++++++++
     3 files changed, 25 insertions(+), 3 deletions(-)
     create mode 100644 stmicro-stm32/src/blinky.zig
    
    diff --git a/stmicro-stm32/build.zig b/stmicro-stm32/build.zig
    index 26bbda7eb..471a7276d 100644
    --- a/stmicro-stm32/build.zig
    +++ b/stmicro-stm32/build.zig
    @@ -2,7 +2,7 @@ const std = @import("std");
     const stm32 = @import("stm32");
     
     const available_examples = [_]Example{
    -    // TODO: .{ .name = "stm32f103x8", .target = stm32.chips.stm32f103x8, .file = "src/blinky.zig" },
    +    .{ .name = "stm32f103x8", .target = stm32.chips.stm32f103x8, .file = "src/blinky.zig" },
         // TODO: .{ .name = "stm32f303vc", .target = stm32.chips.stm32f303vc, .file = "src/blinky.zig" },
         // TODO: .{ .name = "stm32f407vg", .target = stm32.chips.stm32f407vg, .file = "src/blinky.zig" },
         // TODO: .{ .name = "stm32f429zit6u", .target = stm32.chips.stm32f429zit6u, .file = "src/blinky.zig" },
    diff --git a/stmicro-stm32/build.zig.zon b/stmicro-stm32/build.zig.zon
    index e54d44fbf..b6063eabc 100644
    --- a/stmicro-stm32/build.zig.zon
    +++ b/stmicro-stm32/build.zig.zon
    @@ -7,8 +7,8 @@
                 .hash = "1220af58bdaa721b8189f3a7adfda660517dd354463463388e96d69fe4ceccf80b92",
             },
             .stm32 = .{
    -            .url = "https://github.com/ZigEmbeddedGroup/stmicro-stm32/archive/cb2893707efa6aa289fa72f02959ad5f2d9db2a1.tar.gz",
    -            .hash = "12208cab5f60ef97cac4165ad694f3ba0c7b28f279538c1539b74f7c152f34fe306d",
    +            .url = "https://github.com/ZigEmbeddedGroup/stmicro-stm32/archive/237890d49ee795110a63df2c45bdd6f6a0029a72.tar.gz",
    +            .hash = "1220960897777f9713fa1055ffdf1fbad1518b2f62bd2f2ae39b887821dbf0781df0",
             },
         },
     }
    diff --git a/stmicro-stm32/src/blinky.zig b/stmicro-stm32/src/blinky.zig
    new file mode 100644
    index 000000000..1fad430e1
    --- /dev/null
    +++ b/stmicro-stm32/src/blinky.zig
    @@ -0,0 +1,22 @@
    +const std = @import("std");
    +const microzig = @import("microzig");
    +const stm32 = microzig.hal;
    +
    +const pin_config = stm32.pins.GlobalConfiguration{
    +    .GPIOC = .{
    +        .PIN13 = .{ .name = "led", .mode = .{ .output = .general_purpose_push_pull } },
    +    },
    +};
    +
    +pub fn main() !void {
    +    const pins = pin_config.apply();
    +
    +    while (true) {
    +        var i: u32 = 0;
    +        while (i < 800_000) {
    +            asm volatile ("nop");
    +            i += 1;
    +        }
    +        pins.led.toggle();
    +    }
    +}
    
    From d361a622baeaf827831507163f5fba090e049b65 Mon Sep 17 00:00:00 2001
    From: Vesim 
    Date: Tue, 26 Sep 2023 17:57:22 +0200
    Subject: [PATCH 228/286] add umm allocator (#148)
    
    ---
     build.zig         | 3 +++
     build.zig.zon     | 4 ++++
     src/core.zig      | 2 ++
     src/core/heap.zig | 5 +++++
     4 files changed, 14 insertions(+)
     create mode 100644 src/core/heap.zig
    
    diff --git a/build.zig b/build.zig
    index 9b92d6b89..f801a558a 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -538,6 +538,9 @@ pub fn addFirmware(
             },
         });
     
    +    const umm = mz.dependency("umm-zig", .{}).module("umm");
    +    fw.modules.microzig.dependencies.put("umm", umm) catch @panic("out of memory");
    +
         fw.artifact.addModule("app", fw.modules.app);
         fw.artifact.addModule("microzig", fw.modules.microzig);
     
    diff --git a/build.zig.zon b/build.zig.zon
    index 5f0ac76f9..e790e7db7 100644
    --- a/build.zig.zon
    +++ b/build.zig.zon
    @@ -10,5 +10,9 @@
                 .url = "https://github.com/ZigEmbeddedGroup/regz/archive/b0ded63fc284da0ed9f4776eb7d1c4ad7175622d.tar.gz",
                 .hash = "1220e9299f949d3566a1dc4dd62caf82a06bb6c8ad5a693e62117b0941da9dc55ea2",
             },
    +        .@"umm-zig" = .{
    +            .url = "https://github.com/ZigEmbeddedGroup/umm-zig/archive/99d815adfbc5cc4ad385dd765a6192f85e54179f.tar.gz",
    +            .hash = "12207ef7375ea45e97f4fba9c5dfa74d022902893c4dbf1a0076726b7ec39a02ea3f",
    +        },
         },
     }
    diff --git a/src/core.zig b/src/core.zig
    index 10b26c25c..232f0f70f 100644
    --- a/src/core.zig
    +++ b/src/core.zig
    @@ -1,7 +1,9 @@
     pub const experimental = @import("core/experimental.zig");
    +pub const heap = @import("core/heap.zig");
     /// USB data types and helper functions
     pub const usb = @import("core/usb.zig");
     
     test "core tests" {
         _ = usb;
    +    _ = heap;
     }
    diff --git a/src/core/heap.zig b/src/core/heap.zig
    new file mode 100644
    index 000000000..ae6501a7b
    --- /dev/null
    +++ b/src/core/heap.zig
    @@ -0,0 +1,5 @@
    +pub const UmmAllocator = @import("umm").UmmAllocator;
    +
    +test "heap tests" {
    +    _ = UmmAllocator;
    +}
    
    From f286bc8e25837131a4bc0eb0adb0ccb5175c3cd3 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Ardelean=20C=C4=83lin?=
     <9417983+Ardelean-Calin@users.noreply.github.com>
    Date: Tue, 26 Sep 2023 21:39:06 +0300
    Subject: [PATCH 229/286] Corrected Cortex-M ABI (#149)
    
    ---
     build.zig | 8 ++++----
     1 file changed, 4 insertions(+), 4 deletions(-)
    
    diff --git a/build.zig b/build.zig
    index f801a558a..748833fd4 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -793,7 +793,7 @@ pub const cpus = struct {
                 .cpu_arch = .thumb,
                 .cpu_model = .{ .explicit = &std.Target.arm.cpu.cortex_m0 },
                 .os_tag = .freestanding,
    -            .abi = .none,
    +            .abi = .eabi,
             },
         };
     
    @@ -804,7 +804,7 @@ pub const cpus = struct {
                 .cpu_arch = .thumb,
                 .cpu_model = .{ .explicit = &std.Target.arm.cpu.cortex_m0plus },
                 .os_tag = .freestanding,
    -            .abi = .none,
    +            .abi = .eabi,
             },
         };
     
    @@ -815,7 +815,7 @@ pub const cpus = struct {
                 .cpu_arch = .thumb,
                 .cpu_model = .{ .explicit = &std.Target.arm.cpu.cortex_m3 },
                 .os_tag = .freestanding,
    -            .abi = .none,
    +            .abi = .eabi,
             },
         };
     
    @@ -826,7 +826,7 @@ pub const cpus = struct {
                 .cpu_arch = .thumb,
                 .cpu_model = .{ .explicit = &std.Target.arm.cpu.cortex_m4 },
                 .os_tag = .freestanding,
    -            .abi = .none,
    +            .abi = .eabi,
             },
         };
     
    
    From 2873e9e0b109ce55aab083e56225c783f2b7ff2a Mon Sep 17 00:00:00 2001
    From: Marnix Klooster 
    Date: Thu, 26 Oct 2023 21:29:28 +0200
    Subject: [PATCH 230/286] Change the HAL API to snake_case() from camelCase()
     (#151)
    
    ---
     src/core/experimental/debug.zig |  2 +-
     src/core/experimental/i2c.zig   | 22 ++++++++++----------
     src/core/experimental/spi.zig   | 36 ++++++++++++++++-----------------
     src/core/experimental/uart.zig  |  8 ++++----
     4 files changed, 34 insertions(+), 34 deletions(-)
    
    diff --git a/src/core/experimental/debug.zig b/src/core/experimental/debug.zig
    index c74bdba31..767f8c316 100644
    --- a/src/core/experimental/debug.zig
    +++ b/src/core/experimental/debug.zig
    @@ -30,7 +30,7 @@ const DebugWriter = std.io.Writer(void, DebugErr, writer_write);
     pub fn write(string: []const u8) void {
         if (!config.has_board)
             return;
    -    if (!@hasDecl(board, "debugWrite"))
    +    if (!@hasDecl(board, "debug_write"))
             return;
     
         board.debug_write(string);
    diff --git a/src/core/experimental/i2c.zig b/src/core/experimental/i2c.zig
    index 7eefcbde4..52fbaa373 100644
    --- a/src/core/experimental/i2c.zig
    +++ b/src/core/experimental/i2c.zig
    @@ -28,7 +28,7 @@ pub fn I2CController(comptime index: usize, comptime pins: Pins) type {
                         }
     
                         fn read_some(self: *Self, buffer: []u8) ReadError!usize {
    -                        try self.state.readNoEof(buffer);
    +                        try self.state.read_no_eof(buffer);
                             return buffer.len;
                         }
     
    @@ -41,7 +41,7 @@ pub fn I2CController(comptime index: usize, comptime pins: Pins) type {
                         /// Note that some platforms set the repeated START condition
                         /// on the first read or write call.
                         pub fn restart_transfer(self: *Self, comptime new_direction: Direction) !Transfer(new_direction) {
    -                        return Transfer(direction){ .state = try self.state.restartTransfer(new_direction) };
    +                        return Transfer(direction){ .state = try self.state.restart_transfer(new_direction) };
                         }
                     },
                     .write => struct {
    @@ -59,7 +59,7 @@ pub fn I2CController(comptime index: usize, comptime pins: Pins) type {
                         }
     
                         fn write_some(self: *Self, buffer: []const u8) WriteError!usize {
    -                        try self.state.writeAll(buffer);
    +                        try self.state.write_all(buffer);
                             return buffer.len;
                         }
     
    @@ -73,8 +73,8 @@ pub fn I2CController(comptime index: usize, comptime pins: Pins) type {
                         /// on the first read or write call.
                         pub fn restart_transfer(self: *Self, comptime new_direction: Direction) !Transfer(new_direction) {
                             return switch (new_direction) {
    -                            .read => Transfer(new_direction){ .state = try self.state.restartRead() },
    -                            .write => Transfer(new_direction){ .state = try self.state.restartWrite() },
    +                            .read => Transfer(new_direction){ .state = try self.state.restart_read() },
    +                            .write => Transfer(new_direction){ .state = try self.state.restart_write() },
                             };
                         }
                     },
    @@ -93,12 +93,12 @@ pub fn I2CController(comptime index: usize, comptime pins: Pins) type {
     
             /// Shorthand for 'register-based' devices
             pub fn write_register(self: Device, register_address: u8, byte: u8) ReadError!void {
    -            try self.writeRegisters(register_address, &.{byte});
    +            try self.write_registers(register_address, &.{byte});
             }
     
             /// Shorthand for 'register-based' devices
    -        pub fn write_registers(self: Device, register_address: u8, buffer: []u8) ReadError!void {
    -            var wt = try self.startTransfer(.write);
    +        pub fn write_registers(self: Device, register_address: u8, buffer: []const u8) ReadError!void {
    +            var wt = try self.start_transfer(.write);
                 defer wt.stop() catch {};
                 try wt.writer().writeByte(register_address);
                 try wt.writer().writeAll(buffer);
    @@ -107,17 +107,17 @@ pub fn I2CController(comptime index: usize, comptime pins: Pins) type {
             /// Shorthand for 'register-based' devices
             pub fn read_register(self: Device, register_address: u8) ReadError!u8 {
                 var buffer: [1]u8 = undefined;
    -            try self.readRegisters(register_address, &buffer);
    +            try self.read_registers(register_address, &buffer);
                 return buffer[0];
             }
     
             /// Shorthand for 'register-based' devices
             pub fn read_registers(self: Device, register_address: u8, buffer: []u8) ReadError!void {
                 var rt = write_and_restart: {
    -                var wt = try self.startTransfer(.write);
    +                var wt = try self.start_transfer(.write);
                     errdefer wt.stop() catch {};
                     try wt.writer().writeByte(1 << 7 | register_address); // MSB == 'keep sending until I STOP'
    -                break :write_and_restart try wt.restartTransfer(.read);
    +                break :write_and_restart try wt.restart_transfer(.read);
                 };
                 defer rt.stop() catch {};
                 try rt.reader().readNoEof(buffer);
    diff --git a/src/core/experimental/spi.zig b/src/core/experimental/spi.zig
    index 250e74768..7db6ab5a7 100644
    --- a/src/core/experimental/spi.zig
    +++ b/src/core/experimental/spi.zig
    @@ -1,16 +1,16 @@
     const std = @import("std");
    -const micro = @import("microzig");
    -const chip = @import("chip");
    +const hal = @import("hal");
    +const clock = @import("clock.zig"); // Is there a different/better way?
     
     /// The SPI bus with the given environment-specific number.
     /// Only 'master' mode is supported currently.
     pub fn SpiBus(comptime index: usize) type {
    -    const SystemSpi = chip.SpiBus(index);
    +    const SystemSpi = hal.SpiBus(index);
     
         return struct {
             /// A SPI 'slave' device, selected via the given CS pin.
             /// (Default is CS=low to select.)
    -        pub fn SpiDevice(comptime cs_pin: type, config: DeviceConfig) type {
    +        pub fn SpiDevice(comptime cs_pin: type, comptime config: DeviceConfig) type {
                 return struct {
                     const SelfSpiDevice = @This();
     
    @@ -24,7 +24,7 @@ pub fn SpiBus(comptime index: usize) type {
                         device: SelfSpiDevice,
     
                         fn transceive_byte(self: *SelfTransfer, write_byte: u8, read_pointer: *u8) !void {
    -                        try self.device.internal.transceiveByte(write_byte, read_pointer);
    +                        try self.device.internal.transceive_byte(write_byte, read_pointer);
                         }
     
                         pub const Writer = std.io.Writer(*SelfTransfer, WriteError, write_some);
    @@ -35,7 +35,7 @@ pub fn SpiBus(comptime index: usize) type {
                         }
     
                         fn write_some(self: *SelfTransfer, buffer: []const u8) WriteError!usize {
    -                        try self.device.internal.writeAll(buffer);
    +                        try self.device.internal.write_all(buffer);
                             return buffer.len;
                         }
     
    @@ -47,40 +47,40 @@ pub fn SpiBus(comptime index: usize) type {
                         }
     
                         fn read_some(self: *SelfTransfer, buffer: []u8) ReadError!usize {
    -                        try self.device.internal.readInto(buffer);
    +                        try self.device.internal.read_into(buffer);
                             return buffer.len;
                         }
     
                         /// end the current transfer, releasing via the CS pin
                         pub fn end(self: *SelfTransfer) void {
    -                        self.device.internal.endTransfer(cs_pin, config);
    +                        self.device.internal.end_transfer(cs_pin, config);
                         }
                     };
     
                     /// start a new transfer, selecting using the CS pin
                     pub fn begin_transfer(self: SelfSpiDevice) !Transfer {
    -                    self.internal.switchToDevice(cs_pin, config);
    -                    self.internal.beginTransfer(cs_pin, config);
    +                    self.internal.switch_to_device(cs_pin, config);
    +                    self.internal.begin_transfer(cs_pin, config);
                         return Transfer{ .device = self };
                     }
     
                     pub fn transceive(self: SelfSpiDevice, write_buffer: []const u8, read_buffer: []u8) !void {
                         std.debug.assert(write_buffer.len == read_buffer.len);
    -                    var transfer = try self.beginTransfer();
    +                    var transfer = try self.begin_transfer();
                         defer transfer.end();
                         for (write_buffer, 0..) |_, i| {
    -                        try transfer.transceiveByte(write_buffer[i], &read_buffer[i]);
    +                        try transfer.transceive_byte(write_buffer[i], &read_buffer[i]);
                         }
                     }
     
                     /// Shorthand for 'register-based' devices
                     pub fn write_register(self: SelfSpiDevice, register_address: u8, byte: u8) ReadError!void {
    -                    try self.writeRegisters(register_address, &.{byte});
    +                    try self.write_registers(register_address, &.{byte});
                     }
     
                     /// Shorthand for 'register-based' devices
    -                pub fn write_registers(self: SelfSpiDevice, register_address: u8, buffer: []u8) ReadError!void {
    -                    var transfer = try self.beginTransfer();
    +                pub fn write_registers(self: SelfSpiDevice, register_address: u8, buffer: []const u8) ReadError!void {
    +                    var transfer = try self.begin_transfer();
                         defer transfer.end();
                         // write auto-increment, starting at given register
                         try transfer.writer().writeByte(0b01_000000 | register_address);
    @@ -90,13 +90,13 @@ pub fn SpiBus(comptime index: usize) type {
                     /// Shorthand for 'register-based' devices
                     pub fn read_register(self: SelfSpiDevice, register_address: u8) ReadError!u8 {
                         var buffer: [1]u8 = undefined;
    -                    try self.readRegisters(register_address, &buffer);
    +                    try self.read_registers(register_address, &buffer);
                         return buffer[0];
                     }
     
                     /// Shorthand for 'register-based' devices
                     pub fn read_registers(self: SelfSpiDevice, register_address: u8, buffer: []u8) ReadError!void {
    -                    var transfer = try self.beginTransfer();
    +                    var transfer = try self.begin_transfer();
                         defer transfer.end();
                         // read auto-increment, starting at given register
                         try transfer.writer().writeByte(0b11_000000 | register_address);
    @@ -111,7 +111,7 @@ pub fn SpiBus(comptime index: usize) type {
     
             /// Initialize this SPI bus and return a handle to it.
             pub fn init(config: BusConfig) InitError!SelfSpiBus {
    -            micro.clock.ensure(); // TODO: Wat?
    +            clock.ensure(); // TODO: Wat?
                 return SelfSpiBus{
                     .internal = try SystemSpi.init(config),
                 };
    diff --git a/src/core/experimental/uart.zig b/src/core/experimental/uart.zig
    index bba29dad8..e64dd5e9d 100644
    --- a/src/core/experimental/uart.zig
    +++ b/src/core/experimental/uart.zig
    @@ -20,21 +20,21 @@ pub fn Uart(comptime index: usize, comptime pins: Pins) type {
             /// If the UART is already initialized, try to return a handle to it,
             /// else initialize with the given config.
             pub fn get_or_init(config: Config) InitError!Self {
    -            if (!@hasDecl(SystemUart, "getOrInit")) {
    +            if (!@hasDecl(SystemUart, "get_or_init")) {
                     // fallback to reinitializing the UART
                     return init(config);
                 }
                 return Self{
    -                .internal = try SystemUart.getOrInit(config),
    +                .internal = try SystemUart.get_or_init(config),
                 };
             }
     
             pub fn can_read(self: Self) bool {
    -            return self.internal.canRead();
    +            return self.internal.can_read();
             }
     
             pub fn can_write(self: Self) bool {
    -            return self.internal.canWrite();
    +            return self.internal.can_write();
             }
     
             pub fn reader(self: Self) Reader {
    
    From f8a506ccc28447ff6f20bba13ad04e7ce8d26318 Mon Sep 17 00:00:00 2001
    From: Prince Bett <75972193+kodesafi@users.noreply.github.com>
    Date: Mon, 6 Nov 2023 22:13:50 +0300
    Subject: [PATCH 231/286] doc: add getting started tip (#156)
    
    direct new users to microzig-examples for ease
    the onboarding experience.
    ---
     README.adoc | 4 ++++
     1 file changed, 4 insertions(+)
    
    diff --git a/README.adoc b/README.adoc
    index 903b390b3..d21a7d264 100644
    --- a/README.adoc
    +++ b/README.adoc
    @@ -29,6 +29,10 @@ This repo contains the infrastructure for getting started in an embedded Zig pro
     * device drivers for interacting with external hardware
     * an uncomplicated method to define xref:interrupts[interrupts]
     
    +== Getting Started 
    +
    +Visit https://github.com/ZigEmbeddedGroup/microzig-examples to find examples for your specific board. 
    +
     == Design
     
     For MicroZig internals please see the xref:docs/design.adoc[Design Document].
    
    From c3baa4a2777634a2b5cd366b87b453e9b72b4b26 Mon Sep 17 00:00:00 2001
    From: Jacob Young 
    Date: Mon, 20 Nov 2023 12:48:34 -0800
    Subject: [PATCH 232/286] Update dependencies and add paths (#158)
    
    ---
     build.zig.zon | 19 +++++++++++++++----
     1 file changed, 15 insertions(+), 4 deletions(-)
    
    diff --git a/build.zig.zon b/build.zig.zon
    index e790e7db7..a23790191 100644
    --- a/build.zig.zon
    +++ b/build.zig.zon
    @@ -1,14 +1,25 @@
     .{
         .name = "microzig",
         .version = "0.1.0",
    +    .paths = .{
    +        "build.zig",
    +        "build.zig.zon",
    +        "design",
    +        "docs",
    +        "LICENSE",
    +        "README.adoc",
    +        "src",
    +        "test",
    +        "thoughts.md",
    +    },
         .dependencies = .{
             .uf2 = .{
    -            .url = "https://github.com/ZigEmbeddedGroup/uf2/archive/c523a4d23469282f95658a879f5ba925757dc9d9.tar.gz",
    -            .hash = "12208530bdc194e8c1f3405ad681a409c7fabfe82735cd3972ec07c221a7786db03a",
    +            .url = "https://github.com/ZigEmbeddedGroup/uf2/archive/0550d4b1519264669b4ac5d944c370b41ebd6579.tar.gz",
    +            .hash = "122058e26facbba3f6e06881ec0d356c7f9046e88edc46b9f244b50d366062528471",
             },
             .regz = .{
    -            .url = "https://github.com/ZigEmbeddedGroup/regz/archive/b0ded63fc284da0ed9f4776eb7d1c4ad7175622d.tar.gz",
    -            .hash = "1220e9299f949d3566a1dc4dd62caf82a06bb6c8ad5a693e62117b0941da9dc55ea2",
    +            .url = "https://github.com/ZigEmbeddedGroup/regz/archive/d66ffd56f51fc46c071412141b5d0c74dc83c310.tar.gz",
    +            .hash = "122002c5f2e31c11373ede6e8a8dd9a61aabd60d38df667ec33b5f994d1f0b503823",
             },
             .@"umm-zig" = .{
                 .url = "https://github.com/ZigEmbeddedGroup/umm-zig/archive/99d815adfbc5cc4ad385dd765a6192f85e54179f.tar.gz",
    
    From 8ac1db65743a79a6794a77c4d14a777388a1780f Mon Sep 17 00:00:00 2001
    From: Sreehari Sreedev 
    Date: Tue, 21 Nov 2023 16:19:54 -0700
    Subject: [PATCH 233/286] packed struct => extern struct for USB (#159)
    
    ---
     src/core/usb.zig     | 12 ++++++------
     src/core/usb/hid.zig |  2 +-
     2 files changed, 7 insertions(+), 7 deletions(-)
    
    diff --git a/src/core/usb.zig b/src/core/usb.zig
    index 3d76c3bad..a7b4e5643 100644
    --- a/src/core/usb.zig
    +++ b/src/core/usb.zig
    @@ -511,7 +511,7 @@ pub const Dir = enum(u8) {
     };
     
     /// Describes an endpoint within an interface
    -pub const EndpointDescriptor = packed struct {
    +pub const EndpointDescriptor = extern struct {
         /// Length of this struct, must be 7.
         length: u8,
         /// Type of this descriptor, must be `Endpoint`.
    @@ -542,7 +542,7 @@ pub const EndpointDescriptor = packed struct {
     };
     
     /// Description of an interface within a configuration.
    -pub const InterfaceDescriptor = packed struct {
    +pub const InterfaceDescriptor = extern struct {
         /// Length of this structure, must be 9.
         length: u8,
         /// Type of this descriptor, must be `Interface`.
    @@ -580,7 +580,7 @@ pub const InterfaceDescriptor = packed struct {
     };
     
     /// Description of a single available device configuration.
    -pub const ConfigurationDescriptor = packed struct {
    +pub const ConfigurationDescriptor = extern struct {
         /// Length of this structure, must be 9.
         length: u8,
         /// Type of this descriptor, must be `Config`.
    @@ -625,7 +625,7 @@ pub const ConfigurationDescriptor = packed struct {
     
     /// Describes a device. This is the most broad description in USB and is
     /// typically the first thing the host asks for.
    -pub const DeviceDescriptor = packed struct {
    +pub const DeviceDescriptor = extern struct {
         /// Length of this structure, must be 18.
         length: u8,
         /// Type of this descriptor, must be `Device`.
    @@ -682,7 +682,7 @@ pub const DeviceDescriptor = packed struct {
     
     /// USB Device Qualifier Descriptor
     /// This descriptor is mostly the same as the DeviceDescriptor
    -pub const DeviceQualifierDescriptor = packed struct {
    +pub const DeviceQualifierDescriptor = extern struct {
         /// Length of this structure, must be 18.
         length: u8 = 10,
         /// Type of this descriptor, must be `Device`.
    @@ -720,7 +720,7 @@ pub const DeviceQualifierDescriptor = packed struct {
     };
     
     /// Layout of an 8-byte USB SETUP packet.
    -pub const SetupPacket = packed struct {
    +pub const SetupPacket = extern struct {
         /// Request type; in practice, this is always either OUT (host-to-device) or
         /// IN (device-to-host), whose values are given in the `Dir` enum.
         request_type: u8,
    diff --git a/src/core/usb/hid.zig b/src/core/usb/hid.zig
    index e2c6d7f4b..c63e28aec 100644
    --- a/src/core/usb/hid.zig
    +++ b/src/core/usb/hid.zig
    @@ -87,7 +87,7 @@ pub const DescType = enum(u8) {
     };
     
     /// USB HID descriptor
    -pub const HidDescriptor = packed struct {
    +pub const HidDescriptor = extern struct {
         length: u8 = 9,
         descriptor_type: DescType = DescType.Hid,
         /// Numeric expression identifying the HID Class Specification release
    
    From 5e2fe60e2d1b04b6cd1a64f1d4e87f1341c5c6a9 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 21 Nov 2023 20:03:57 -0800
    Subject: [PATCH 234/286] Initial commit
    
    ---
     README.md | 1 +
     1 file changed, 1 insertion(+)
     create mode 100644 README.md
    
    diff --git a/README.md b/README.md
    new file mode 100644
    index 000000000..028ffa737
    --- /dev/null
    +++ b/README.md
    @@ -0,0 +1 @@
    +# microchip-atsam
    \ No newline at end of file
    
    From 6dcf11cd3096c6020d8880d90303824ddae57f2b Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 21 Nov 2023 20:18:13 -0800
    Subject: [PATCH 235/286] initial commit
    
    ---
     .gitignore                  |     2 +
     LICENSE                     |    19 +
     README.md                   |     8 +-
     build.zig                   |    29 +
     src/chips/ATSAMD51J19A.atdf | 19800 ++++++++++++++++++++++++++++++++++
     5 files changed, 19857 insertions(+), 1 deletion(-)
     create mode 100644 .gitignore
     create mode 100644 LICENSE
     create mode 100644 build.zig
     create mode 100644 src/chips/ATSAMD51J19A.atdf
    
    diff --git a/.gitignore b/.gitignore
    new file mode 100644
    index 000000000..c26d4af28
    --- /dev/null
    +++ b/.gitignore
    @@ -0,0 +1,2 @@
    +zig-out
    +zig-cache
    diff --git a/LICENSE b/LICENSE
    new file mode 100644
    index 000000000..bcb425d88
    --- /dev/null
    +++ b/LICENSE
    @@ -0,0 +1,19 @@
    +Copyright (c) 2022 Zig Embedded Group Contributors
    +
    +This software is provided 'as-is', without any express or implied warranty. In
    +no event will the authors be held liable for any damages arising from the use
    +of this software.
    +
    +Permission is granted to anyone to use this software for any purpose, including
    +commercial applications, and to alter it and redistribute it freely, subject to
    +the following restrictions:
    +
    +1. The origin of this software must not be misrepresented; you must not claim
    +that you wrote the original software. If you use this software in a product, an
    +acknowledgment in the product documentation would be appreciated but is not
    +required.
    +
    +2. Altered source versions must be plainly marked as such, and must not be
    +misrepresented as being the original software.
    +
    +3. This notice may not be removed or altered from any source distribution.
    diff --git a/README.md b/README.md
    index 028ffa737..207183ee1 100644
    --- a/README.md
    +++ b/README.md
    @@ -1 +1,7 @@
    -# microchip-atsam
    \ No newline at end of file
    +# microchip-atsam
    +
    +HALs and register definitions for Microchip ATSAM devices
    +
    +## What version of Zig to use
    +
    +0.11.0
    diff --git a/build.zig b/build.zig
    new file mode 100644
    index 000000000..75d493d1e
    --- /dev/null
    +++ b/build.zig
    @@ -0,0 +1,29 @@
    +const std = @import("std");
    +
    +pub fn build(b: *std.Build) void {
    +    _ = b;
    +    //  Dummy func to make package manager happy
    +}
    +
    +fn root() []const u8 {
    +    return comptime (std.fs.path.dirname(@src().file) orelse ".");
    +}
    +
    +const build_root = root();
    +
    +pub const chips = struct {
    +    pub const atsamd51j19 = .{
    +        .name = "ATSAMD51J19A",
    +        .url = "https://www.microchip.com/en-us/product/ATSAMD51J19A",
    +        .cpu = .cortex_m4,
    +        .register_definition = .{
    +            .atdf = .{ .path = build_root ++ "src/chips/ATSAMD51J19A.atdf" },
    +        },
    +        .memory_regions = &.{
    +            .{ .kind = .flash, .offset = 0x00004000, .length = 512 * 1024 }, // Embedded Flash
    +            .{ .kind = .ram, .offset = 0x20000000, .length = 192 * 1024 }, // Embedded SRAM
    +            .{ .kind = .ram, .offset = 0x47000000, .length = 8 * 1024 }, // Backup SRAM
    +            .{ .kind = .flash, .offset = 0x00804000, .length = 512 }, // NVM User Row
    +        },
    +    };
    +};
    diff --git a/src/chips/ATSAMD51J19A.atdf b/src/chips/ATSAMD51J19A.atdf
    new file mode 100644
    index 000000000..b744b0edc
    --- /dev/null
    +++ b/src/chips/ATSAMD51J19A.atdf
    @@ -0,0 +1,19800 @@
    +
    +
    +
    +   
    +   
    +      
    +      
    +      
    +      
    +      
    +      
    +      
    +      
    +   
    +   
    +      
    +         
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                  
    +                  
    +                     
    +                        
    +                        
    +                        
    +                        
    +                        
    +                        
    +                        
    +                        
    +                        
    +                        
    +                        
    +                        
    +                        
    +                        
    +                        
    +                        
    +                        
    +                        
    +                        
    +                        
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                  
    +                  
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                  
    +                  
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +               
    +            
    +            
    +               
    +                  
    +               
    +            
    +            
    +               
    +                  
    +               
    +            
    +            
    +               
    +                  
    +               
    +            
    +            
    +               
    +                  
    +               
    +            
    +            
    +               
    +                  
    +               
    +            
    +            
    +               
    +                  
    +                  
    +                     
    +                     
    +                  
    +               
    +            
    +            
    +               
    +                  
    +               
    +            
    +            
    +               
    +                  
    +               
    +            
    +            
    +               
    +                  
    +               
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +         
    +         
    +            
    +         
    +         
    +            
    +               
    +            
    +         
    +      
    +   
    +   
    +      
    +         
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +         
    +         
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +         
    +         
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +         
    +         
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +        
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +         
    +         
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +            
    +               
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +        
    +            
    +        
    +         
    +         
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +         
    +         
    +            
    +        
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +        
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +         
    +         
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +         
    +         
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +         
    +         
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +         
    +         
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +         
    +         
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +      
    +      
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +         
    +      
    +      
    +         
    +            
    +            
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +         
    +      
    +      
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +            
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +         
    +      
    +      
    +         
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +         
    +         
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +         
    +         
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +         
    +         
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +         
    +         
    +            
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +         
    +         
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +        
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +        
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +        
    +            
    +        
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +        
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +        
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +        
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +               
    +            
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +               
    +               
    +               
    +            
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +         
    +         
    +            
    +            
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +        
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +        
    +            
    +               
    +               
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +         
    +            
    +            
    +            
    +         
    +      
    +      
    +         
    +            
    +        
    +            
    +        
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +            
    +        
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +            
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +            
    +            
    +        
    +            
    +        
    +            
    +               
    +               
    +               
    +               
    +               
    +               
    +            
    +            
    +               
    +               
    +            
    +         
    +      
    +   
    +   
    +      
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +      
    +      
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +         
    +      
    +   
    +
    
    From 93ddffbcbe7a0b849cca610ee933210280d731b4 Mon Sep 17 00:00:00 2001
    From: Matt Knight 
    Date: Tue, 21 Nov 2023 20:20:21 -0800
    Subject: [PATCH 236/286] fix path
    
    ---
     build.zig | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/build.zig b/build.zig
    index 75d493d1e..3cbb87b94 100644
    --- a/build.zig
    +++ b/build.zig
    @@ -17,7 +17,7 @@ pub const chips = struct {
             .url = "https://www.microchip.com/en-us/product/ATSAMD51J19A",
             .cpu = .cortex_m4,
             .register_definition = .{
    -            .atdf = .{ .path = build_root ++ "src/chips/ATSAMD51J19A.atdf" },
    +            .atdf = .{ .path = build_root ++ "/src/chips/ATSAMD51J19A.atdf" },
             },
             .memory_regions = &.{
                 .{ .kind = .flash, .offset = 0x00004000, .length = 512 * 1024 }, // Embedded Flash
    
    From 57e4379062e396b354d70d5b924d5da2e8905bd4 Mon Sep 17 00:00:00 2001
    From: Jacob Young 
    Date: Tue, 28 Nov 2023 10:58:44 -0500
    Subject: [PATCH 237/286] Update uf2 dependency (#160)
    
    ---
     build.zig.zon | 4 ++--
     1 file changed, 2 insertions(+), 2 deletions(-)
    
    diff --git a/build.zig.zon b/build.zig.zon
    index a23790191..437acb5f9 100644
    --- a/build.zig.zon
    +++ b/build.zig.zon
    @@ -14,8 +14,8 @@
         },
         .dependencies = .{
             .uf2 = .{
    -            .url = "https://github.com/ZigEmbeddedGroup/uf2/archive/0550d4b1519264669b4ac5d944c370b41ebd6579.tar.gz",
    -            .hash = "122058e26facbba3f6e06881ec0d356c7f9046e88edc46b9f244b50d366062528471",
    +            .url = "https://github.com/ZigEmbeddedGroup/uf2/archive/8037b439ccbac862471392b25e94a8995d784e2c.tar.gz",
    +            .hash = "1220cc66563fc1ecefca7990968441dc9d4db717884ffa9a2de657f60ed4bb74a70a",
             },
             .regz = .{
                 .url = "https://github.com/ZigEmbeddedGroup/regz/archive/d66ffd56f51fc46c071412141b5d0c74dc83c310.tar.gz",
    
    From 6ddf91c60c42db3110695e02df3d530c4586892d Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Thu, 4 Jan 2024 08:40:20 +0100
    Subject: [PATCH 238/286] initial empty commit
    
    
    From a92518c99f0b6589b15ffce8654f5c4b8ef86a8c Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Thu, 4 Jan 2024 08:46:08 +0100
    Subject: [PATCH 239/286] Moves microzig to core/
    
    ---
     LICENSE => core/LICENSE                             |   0
     README.adoc => core/README.adoc                     |   0
     build.zig => core/build.zig                         |   0
     build.zig.zon => core/build.zig.zon                 |   0
     {design => core/design}/logo-text-auto.svg          |   0
     {design => core/design}/logo-text-brightmode.svg    |   0
     {design => core/design}/logo-text-darkmode.svg      |   0
     {design => core/design}/logo-text-inkscape.svg      |   0
     {design => core/design}/logo.svg                    |   0
     {design => core/design}/social-media-preview.png    | Bin
     {design => core/design}/social-media-preview.xcf    | Bin
     {docs => core/docs}/design.adoc                     |   0
     {docs => core/docs}/hardware_support_packages.adoc  |   0
     {docs => core/docs}/images/deps.dot                 |   0
     {docs => core/docs}/images/deps.svg                 |   0
     {docs => core/docs}/tricks.adoc                     |   0
     {src => core/src}/core.zig                          |   0
     {src => core/src}/core/experimental.zig             |   0
     {src => core/src}/core/experimental/clock.zig       |   0
     {src => core/src}/core/experimental/debug.zig       |   0
     {src => core/src}/core/experimental/gpio.zig        |   0
     {src => core/src}/core/experimental/i2c.zig         |   0
     {src => core/src}/core/experimental/pin.zig         |   0
     {src => core/src}/core/experimental/spi.zig         |   0
     {src => core/src}/core/experimental/uart.zig        |   0
     {src => core/src}/core/heap.zig                     |   0
     {src => core/src}/core/usb.zig                      |   0
     {src => core/src}/core/usb/hid.zig                  |   0
     {src => core/src}/cpus/avr5.zig                     |   0
     {src => core/src}/cpus/cortex-m.zig                 |   0
     {src => core/src}/cpus/riscv32.zig                  |   0
     {src => core/src}/drivers.zig                       |   0
     {src => core/src}/drivers/experimental.zig          |   0
     {src => core/src}/drivers/experimental/button.zig   |   0
     .../src}/drivers/experimental/quadrature.zig        |   0
     {src => core/src}/interrupt.zig                     |   0
     {src => core/src}/microzig.zig                      |   0
     {src => core/src}/mmio.zig                          |   0
     {src => core/src}/start.zig                         |   0
     {test => core/test}/README.adoc                     |   0
     {test => core/test}/backings.zig                    |   0
     {test => core/test}/board.zig                       |   0
     {test => core/test}/chip.zig                        |   0
     {test => core/test}/cpu.zig                         |   0
     {test => core/test}/hal.zig                         |   0
     {test => core/test}/programs/blinky.zig             |   0
     {test => core/test}/programs/has_board.zig          |   0
     {test => core/test}/programs/has_dependencies.zig   |   0
     {test => core/test}/programs/has_hal.zig            |   0
     {test => core/test}/programs/interrupt.zig          |   0
     {test => core/test}/programs/minimal.zig            |   0
     {test => core/test}/programs/uart-sync.zig          |   0
     thoughts.md => core/thoughts.md                     |   0
     53 files changed, 0 insertions(+), 0 deletions(-)
     rename LICENSE => core/LICENSE (100%)
     rename README.adoc => core/README.adoc (100%)
     rename build.zig => core/build.zig (100%)
     rename build.zig.zon => core/build.zig.zon (100%)
     rename {design => core/design}/logo-text-auto.svg (100%)
     rename {design => core/design}/logo-text-brightmode.svg (100%)
     rename {design => core/design}/logo-text-darkmode.svg (100%)
     rename {design => core/design}/logo-text-inkscape.svg (100%)
     rename {design => core/design}/logo.svg (100%)
     rename {design => core/design}/social-media-preview.png (100%)
     rename {design => core/design}/social-media-preview.xcf (100%)
     rename {docs => core/docs}/design.adoc (100%)
     rename {docs => core/docs}/hardware_support_packages.adoc (100%)
     rename {docs => core/docs}/images/deps.dot (100%)
     rename {docs => core/docs}/images/deps.svg (100%)
     rename {docs => core/docs}/tricks.adoc (100%)
     rename {src => core/src}/core.zig (100%)
     rename {src => core/src}/core/experimental.zig (100%)
     rename {src => core/src}/core/experimental/clock.zig (100%)
     rename {src => core/src}/core/experimental/debug.zig (100%)
     rename {src => core/src}/core/experimental/gpio.zig (100%)
     rename {src => core/src}/core/experimental/i2c.zig (100%)
     rename {src => core/src}/core/experimental/pin.zig (100%)
     rename {src => core/src}/core/experimental/spi.zig (100%)
     rename {src => core/src}/core/experimental/uart.zig (100%)
     rename {src => core/src}/core/heap.zig (100%)
     rename {src => core/src}/core/usb.zig (100%)
     rename {src => core/src}/core/usb/hid.zig (100%)
     rename {src => core/src}/cpus/avr5.zig (100%)
     rename {src => core/src}/cpus/cortex-m.zig (100%)
     rename {src => core/src}/cpus/riscv32.zig (100%)
     rename {src => core/src}/drivers.zig (100%)
     rename {src => core/src}/drivers/experimental.zig (100%)
     rename {src => core/src}/drivers/experimental/button.zig (100%)
     rename {src => core/src}/drivers/experimental/quadrature.zig (100%)
     rename {src => core/src}/interrupt.zig (100%)
     rename {src => core/src}/microzig.zig (100%)
     rename {src => core/src}/mmio.zig (100%)
     rename {src => core/src}/start.zig (100%)
     rename {test => core/test}/README.adoc (100%)
     rename {test => core/test}/backings.zig (100%)
     rename {test => core/test}/board.zig (100%)
     rename {test => core/test}/chip.zig (100%)
     rename {test => core/test}/cpu.zig (100%)
     rename {test => core/test}/hal.zig (100%)
     rename {test => core/test}/programs/blinky.zig (100%)
     rename {test => core/test}/programs/has_board.zig (100%)
     rename {test => core/test}/programs/has_dependencies.zig (100%)
     rename {test => core/test}/programs/has_hal.zig (100%)
     rename {test => core/test}/programs/interrupt.zig (100%)
     rename {test => core/test}/programs/minimal.zig (100%)
     rename {test => core/test}/programs/uart-sync.zig (100%)
     rename thoughts.md => core/thoughts.md (100%)
    
    diff --git a/LICENSE b/core/LICENSE
    similarity index 100%
    rename from LICENSE
    rename to core/LICENSE
    diff --git a/README.adoc b/core/README.adoc
    similarity index 100%
    rename from README.adoc
    rename to core/README.adoc
    diff --git a/build.zig b/core/build.zig
    similarity index 100%
    rename from build.zig
    rename to core/build.zig
    diff --git a/build.zig.zon b/core/build.zig.zon
    similarity index 100%
    rename from build.zig.zon
    rename to core/build.zig.zon
    diff --git a/design/logo-text-auto.svg b/core/design/logo-text-auto.svg
    similarity index 100%
    rename from design/logo-text-auto.svg
    rename to core/design/logo-text-auto.svg
    diff --git a/design/logo-text-brightmode.svg b/core/design/logo-text-brightmode.svg
    similarity index 100%
    rename from design/logo-text-brightmode.svg
    rename to core/design/logo-text-brightmode.svg
    diff --git a/design/logo-text-darkmode.svg b/core/design/logo-text-darkmode.svg
    similarity index 100%
    rename from design/logo-text-darkmode.svg
    rename to core/design/logo-text-darkmode.svg
    diff --git a/design/logo-text-inkscape.svg b/core/design/logo-text-inkscape.svg
    similarity index 100%
    rename from design/logo-text-inkscape.svg
    rename to core/design/logo-text-inkscape.svg
    diff --git a/design/logo.svg b/core/design/logo.svg
    similarity index 100%
    rename from design/logo.svg
    rename to core/design/logo.svg
    diff --git a/design/social-media-preview.png b/core/design/social-media-preview.png
    similarity index 100%
    rename from design/social-media-preview.png
    rename to core/design/social-media-preview.png
    diff --git a/design/social-media-preview.xcf b/core/design/social-media-preview.xcf
    similarity index 100%
    rename from design/social-media-preview.xcf
    rename to core/design/social-media-preview.xcf
    diff --git a/docs/design.adoc b/core/docs/design.adoc
    similarity index 100%
    rename from docs/design.adoc
    rename to core/docs/design.adoc
    diff --git a/docs/hardware_support_packages.adoc b/core/docs/hardware_support_packages.adoc
    similarity index 100%
    rename from docs/hardware_support_packages.adoc
    rename to core/docs/hardware_support_packages.adoc
    diff --git a/docs/images/deps.dot b/core/docs/images/deps.dot
    similarity index 100%
    rename from docs/images/deps.dot
    rename to core/docs/images/deps.dot
    diff --git a/docs/images/deps.svg b/core/docs/images/deps.svg
    similarity index 100%
    rename from docs/images/deps.svg
    rename to core/docs/images/deps.svg
    diff --git a/docs/tricks.adoc b/core/docs/tricks.adoc
    similarity index 100%
    rename from docs/tricks.adoc
    rename to core/docs/tricks.adoc
    diff --git a/src/core.zig b/core/src/core.zig
    similarity index 100%
    rename from src/core.zig
    rename to core/src/core.zig
    diff --git a/src/core/experimental.zig b/core/src/core/experimental.zig
    similarity index 100%
    rename from src/core/experimental.zig
    rename to core/src/core/experimental.zig
    diff --git a/src/core/experimental/clock.zig b/core/src/core/experimental/clock.zig
    similarity index 100%
    rename from src/core/experimental/clock.zig
    rename to core/src/core/experimental/clock.zig
    diff --git a/src/core/experimental/debug.zig b/core/src/core/experimental/debug.zig
    similarity index 100%
    rename from src/core/experimental/debug.zig
    rename to core/src/core/experimental/debug.zig
    diff --git a/src/core/experimental/gpio.zig b/core/src/core/experimental/gpio.zig
    similarity index 100%
    rename from src/core/experimental/gpio.zig
    rename to core/src/core/experimental/gpio.zig
    diff --git a/src/core/experimental/i2c.zig b/core/src/core/experimental/i2c.zig
    similarity index 100%
    rename from src/core/experimental/i2c.zig
    rename to core/src/core/experimental/i2c.zig
    diff --git a/src/core/experimental/pin.zig b/core/src/core/experimental/pin.zig
    similarity index 100%
    rename from src/core/experimental/pin.zig
    rename to core/src/core/experimental/pin.zig
    diff --git a/src/core/experimental/spi.zig b/core/src/core/experimental/spi.zig
    similarity index 100%
    rename from src/core/experimental/spi.zig
    rename to core/src/core/experimental/spi.zig
    diff --git a/src/core/experimental/uart.zig b/core/src/core/experimental/uart.zig
    similarity index 100%
    rename from src/core/experimental/uart.zig
    rename to core/src/core/experimental/uart.zig
    diff --git a/src/core/heap.zig b/core/src/core/heap.zig
    similarity index 100%
    rename from src/core/heap.zig
    rename to core/src/core/heap.zig
    diff --git a/src/core/usb.zig b/core/src/core/usb.zig
    similarity index 100%
    rename from src/core/usb.zig
    rename to core/src/core/usb.zig
    diff --git a/src/core/usb/hid.zig b/core/src/core/usb/hid.zig
    similarity index 100%
    rename from src/core/usb/hid.zig
    rename to core/src/core/usb/hid.zig
    diff --git a/src/cpus/avr5.zig b/core/src/cpus/avr5.zig
    similarity index 100%
    rename from src/cpus/avr5.zig
    rename to core/src/cpus/avr5.zig
    diff --git a/src/cpus/cortex-m.zig b/core/src/cpus/cortex-m.zig
    similarity index 100%
    rename from src/cpus/cortex-m.zig
    rename to core/src/cpus/cortex-m.zig
    diff --git a/src/cpus/riscv32.zig b/core/src/cpus/riscv32.zig
    similarity index 100%
    rename from src/cpus/riscv32.zig
    rename to core/src/cpus/riscv32.zig
    diff --git a/src/drivers.zig b/core/src/drivers.zig
    similarity index 100%
    rename from src/drivers.zig
    rename to core/src/drivers.zig
    diff --git a/src/drivers/experimental.zig b/core/src/drivers/experimental.zig
    similarity index 100%
    rename from src/drivers/experimental.zig
    rename to core/src/drivers/experimental.zig
    diff --git a/src/drivers/experimental/button.zig b/core/src/drivers/experimental/button.zig
    similarity index 100%
    rename from src/drivers/experimental/button.zig
    rename to core/src/drivers/experimental/button.zig
    diff --git a/src/drivers/experimental/quadrature.zig b/core/src/drivers/experimental/quadrature.zig
    similarity index 100%
    rename from src/drivers/experimental/quadrature.zig
    rename to core/src/drivers/experimental/quadrature.zig
    diff --git a/src/interrupt.zig b/core/src/interrupt.zig
    similarity index 100%
    rename from src/interrupt.zig
    rename to core/src/interrupt.zig
    diff --git a/src/microzig.zig b/core/src/microzig.zig
    similarity index 100%
    rename from src/microzig.zig
    rename to core/src/microzig.zig
    diff --git a/src/mmio.zig b/core/src/mmio.zig
    similarity index 100%
    rename from src/mmio.zig
    rename to core/src/mmio.zig
    diff --git a/src/start.zig b/core/src/start.zig
    similarity index 100%
    rename from src/start.zig
    rename to core/src/start.zig
    diff --git a/test/README.adoc b/core/test/README.adoc
    similarity index 100%
    rename from test/README.adoc
    rename to core/test/README.adoc
    diff --git a/test/backings.zig b/core/test/backings.zig
    similarity index 100%
    rename from test/backings.zig
    rename to core/test/backings.zig
    diff --git a/test/board.zig b/core/test/board.zig
    similarity index 100%
    rename from test/board.zig
    rename to core/test/board.zig
    diff --git a/test/chip.zig b/core/test/chip.zig
    similarity index 100%
    rename from test/chip.zig
    rename to core/test/chip.zig
    diff --git a/test/cpu.zig b/core/test/cpu.zig
    similarity index 100%
    rename from test/cpu.zig
    rename to core/test/cpu.zig
    diff --git a/test/hal.zig b/core/test/hal.zig
    similarity index 100%
    rename from test/hal.zig
    rename to core/test/hal.zig
    diff --git a/test/programs/blinky.zig b/core/test/programs/blinky.zig
    similarity index 100%
    rename from test/programs/blinky.zig
    rename to core/test/programs/blinky.zig
    diff --git a/test/programs/has_board.zig b/core/test/programs/has_board.zig
    similarity index 100%
    rename from test/programs/has_board.zig
    rename to core/test/programs/has_board.zig
    diff --git a/test/programs/has_dependencies.zig b/core/test/programs/has_dependencies.zig
    similarity index 100%
    rename from test/programs/has_dependencies.zig
    rename to core/test/programs/has_dependencies.zig
    diff --git a/test/programs/has_hal.zig b/core/test/programs/has_hal.zig
    similarity index 100%
    rename from test/programs/has_hal.zig
    rename to core/test/programs/has_hal.zig
    diff --git a/test/programs/interrupt.zig b/core/test/programs/interrupt.zig
    similarity index 100%
    rename from test/programs/interrupt.zig
    rename to core/test/programs/interrupt.zig
    diff --git a/test/programs/minimal.zig b/core/test/programs/minimal.zig
    similarity index 100%
    rename from test/programs/minimal.zig
    rename to core/test/programs/minimal.zig
    diff --git a/test/programs/uart-sync.zig b/core/test/programs/uart-sync.zig
    similarity index 100%
    rename from test/programs/uart-sync.zig
    rename to core/test/programs/uart-sync.zig
    diff --git a/thoughts.md b/core/thoughts.md
    similarity index 100%
    rename from thoughts.md
    rename to core/thoughts.md
    
    From 6fcd0baa24328fdf0a7e445db413a57cdfdbfab0 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Thu, 4 Jan 2024 08:49:17 +0100
    Subject: [PATCH 240/286] Moves raspberrypi-rp2040 to
     board-support/raspberrypi-rp2040
    
    ---
     LICENSE => board-support/raspberrypi-rp2040/LICENSE               | 0
     README.adoc => board-support/raspberrypi-rp2040/README.adoc       | 0
     build.zig => board-support/raspberrypi-rp2040/build.zig           | 0
     build.zig.zon => board-support/raspberrypi-rp2040/build.zig.zon   | 0
     {examples => board-support/raspberrypi-rp2040/examples}/adc.zig   | 0
     .../raspberrypi-rp2040/examples}/blinky.zig                       | 0
     .../raspberrypi-rp2040/examples}/blinky_core1.zig                 | 0
     .../raspberrypi-rp2040/examples}/flash_program.zig                | 0
     .../raspberrypi-rp2040/examples}/gpio_clk.zig                     | 0
     .../raspberrypi-rp2040/examples}/i2c_bus_scan.zig                 | 0
     {examples => board-support/raspberrypi-rp2040/examples}/pwm.zig   | 0
     .../raspberrypi-rp2040/examples}/random.zig                       | 0
     .../raspberrypi-rp2040/examples}/scripts/hid_test.py              | 0
     .../raspberrypi-rp2040/examples}/scripts/usb_device_loopback.py   | 0
     .../raspberrypi-rp2040/examples}/spi_master.zig                   | 0
     .../raspberrypi-rp2040/examples}/squarewave.zig                   | 0
     {examples => board-support/raspberrypi-rp2040/examples}/uart.zig  | 0
     .../raspberrypi-rp2040/examples}/usb_device.zig                   | 0
     .../raspberrypi-rp2040/examples}/usb_hid.zig                      | 0
     .../raspberrypi-rp2040/examples}/ws2812.zig                       | 0
     rp2040.ld => board-support/raspberrypi-rp2040/rp2040.ld           | 0
     .../raspberrypi-rp2040/src}/boards/raspberry_pi_pico.zig          | 0
     .../raspberrypi-rp2040/src}/boards/shared/bootrom.zig             | 0
     .../raspberrypi-rp2040/src}/boards/waveshare_rp2040_eth.zig       | 0
     .../raspberrypi-rp2040/src}/boards/waveshare_rp2040_matrix.zig    | 0
     .../raspberrypi-rp2040/src}/boards/waveshare_rp2040_plus_16m.zig  | 0
     .../raspberrypi-rp2040/src}/boards/waveshare_rp2040_plus_4m.zig   | 0
     .../raspberrypi-rp2040/src}/bootroms/at25sf128a.S                 | 0
     .../raspberrypi-rp2040/src}/bootroms/generic_03h.S                | 0
     .../raspberrypi-rp2040/src}/bootroms/is25lp080.S                  | 0
     {src => board-support/raspberrypi-rp2040/src}/bootroms/legacy.S   | 0
     .../raspberrypi-rp2040/src}/bootroms/shared/addressmap.h          | 0
     .../raspberrypi-rp2040/src}/bootroms/shared/asm_helper.S          | 0
     .../raspberrypi-rp2040/src}/bootroms/shared/exit_from_boot2.S     | 0
     .../raspberrypi-rp2040/src}/bootroms/shared/m0plus.h              | 0
     .../raspberrypi-rp2040/src}/bootroms/shared/pads_qspi.h           | 0
     .../raspberrypi-rp2040/src}/bootroms/shared/read_flash_sreg.S     | 0
     .../raspberrypi-rp2040/src}/bootroms/shared/regs.h                | 0
     .../raspberrypi-rp2040/src}/bootroms/shared/ssi.h                 | 0
     .../raspberrypi-rp2040/src}/bootroms/shared/stage2.ld             | 0
     .../raspberrypi-rp2040/src}/bootroms/shared/wait_ssi_ready.S      | 0
     {src => board-support/raspberrypi-rp2040/src}/bootroms/w25q080.S  | 0
     .../raspberrypi-rp2040/src}/bootroms/w25q32jvssiq.S               | 0
     {src => board-support/raspberrypi-rp2040/src}/bootroms/w25x10cl.S | 0
     {src => board-support/raspberrypi-rp2040/src}/chips/RP2040.json   | 0
     {src => board-support/raspberrypi-rp2040/src}/hal.zig             | 0
     {src => board-support/raspberrypi-rp2040/src}/hal/adc.zig         | 0
     {src => board-support/raspberrypi-rp2040/src}/hal/clocks.zig      | 0
     {src => board-support/raspberrypi-rp2040/src}/hal/dma.zig         | 0
     {src => board-support/raspberrypi-rp2040/src}/hal/flash.zig       | 0
     {src => board-support/raspberrypi-rp2040/src}/hal/gpio.zig        | 0
     {src => board-support/raspberrypi-rp2040/src}/hal/hw.zig          | 0
     {src => board-support/raspberrypi-rp2040/src}/hal/i2c.zig         | 0
     {src => board-support/raspberrypi-rp2040/src}/hal/irq.zig         | 0
     {src => board-support/raspberrypi-rp2040/src}/hal/multicore.zig   | 0
     {src => board-support/raspberrypi-rp2040/src}/hal/pins.zig        | 0
     {src => board-support/raspberrypi-rp2040/src}/hal/pio.zig         | 0
     .../raspberrypi-rp2040/src}/hal/pio/assembler.zig                 | 0
     .../raspberrypi-rp2040/src}/hal/pio/assembler/Expression.zig      | 0
     .../src}/hal/pio/assembler/comparison_tests.zig                   | 0
     .../src}/hal/pio/assembler/comparison_tests/README.adoc           | 0
     .../src}/hal/pio/assembler/comparison_tests/addition.pio          | 0
     .../src}/hal/pio/assembler/comparison_tests/addition.pio.h        | 0
     .../src}/hal/pio/assembler/comparison_tests/apa102.pio            | 0
     .../src}/hal/pio/assembler/comparison_tests/apa102.pio.h          | 0
     .../src}/hal/pio/assembler/comparison_tests/blink.pio             | 0
     .../src}/hal/pio/assembler/comparison_tests/blink.pio.h           | 0
     .../src}/hal/pio/assembler/comparison_tests/clocked_input.pio     | 0
     .../src}/hal/pio/assembler/comparison_tests/clocked_input.pio.h   | 0
     .../pio/assembler/comparison_tests/differential_manchester.pio    | 0
     .../pio/assembler/comparison_tests/differential_manchester.pio.h  | 0
     .../src}/hal/pio/assembler/comparison_tests/hello.pio             | 0
     .../src}/hal/pio/assembler/comparison_tests/hello.pio.h           | 0
     .../src}/hal/pio/assembler/comparison_tests/hub75.pio             | 0
     .../src}/hal/pio/assembler/comparison_tests/hub75.pio.h           | 0
     .../src}/hal/pio/assembler/comparison_tests/i2c.pio               | 0
     .../src}/hal/pio/assembler/comparison_tests/i2c.pio.h             | 0
     .../hal/pio/assembler/comparison_tests/manchester_encoding.pio    | 0
     .../hal/pio/assembler/comparison_tests/manchester_encoding.pio.h  | 0
     .../src}/hal/pio/assembler/comparison_tests/nec_carrier_burst.pio | 0
     .../hal/pio/assembler/comparison_tests/nec_carrier_burst.pio.h    | 0
     .../hal/pio/assembler/comparison_tests/nec_carrier_control.pio    | 0
     .../hal/pio/assembler/comparison_tests/nec_carrier_control.pio.h  | 0
     .../src}/hal/pio/assembler/comparison_tests/nec_receive.pio       | 0
     .../src}/hal/pio/assembler/comparison_tests/nec_receive.pio.h     | 0
     .../src}/hal/pio/assembler/comparison_tests/pio_serialiser.pio    | 0
     .../src}/hal/pio/assembler/comparison_tests/pio_serialiser.pio.h  | 0
     .../src}/hal/pio/assembler/comparison_tests/pwm.pio               | 0
     .../src}/hal/pio/assembler/comparison_tests/pwm.pio.h             | 0
     .../hal/pio/assembler/comparison_tests/quadrature_encoder.pio     | 0
     .../hal/pio/assembler/comparison_tests/quadrature_encoder.pio.h   | 0
     .../src}/hal/pio/assembler/comparison_tests/resistor_dac.pio      | 0
     .../src}/hal/pio/assembler/comparison_tests/resistor_dac.pio.h    | 0
     .../src}/hal/pio/assembler/comparison_tests/spi.pio               | 0
     .../src}/hal/pio/assembler/comparison_tests/spi.pio.h             | 0
     .../src}/hal/pio/assembler/comparison_tests/squarewave.pio        | 0
     .../src}/hal/pio/assembler/comparison_tests/squarewave.pio.h      | 0
     .../src}/hal/pio/assembler/comparison_tests/squarewave_fast.pio   | 0
     .../src}/hal/pio/assembler/comparison_tests/squarewave_fast.pio.h | 0
     .../src}/hal/pio/assembler/comparison_tests/squarewave_test.pio   | 0
     .../src}/hal/pio/assembler/comparison_tests/squarewave_wrap.pio   | 0
     .../src}/hal/pio/assembler/comparison_tests/squarewave_wrap.pio.h | 0
     .../src}/hal/pio/assembler/comparison_tests/st7789_lcd.pio        | 0
     .../src}/hal/pio/assembler/comparison_tests/st7789_lcd.pio.h      | 0
     .../src}/hal/pio/assembler/comparison_tests/uart_rx.pio           | 0
     .../src}/hal/pio/assembler/comparison_tests/uart_rx.pio.h         | 0
     .../src}/hal/pio/assembler/comparison_tests/uart_tx.pio           | 0
     .../src}/hal/pio/assembler/comparison_tests/uart_tx.pio.h         | 0
     .../src}/hal/pio/assembler/comparison_tests/ws2812.pio            | 0
     .../src}/hal/pio/assembler/comparison_tests/ws2812.pio.h          | 0
     .../raspberrypi-rp2040/src}/hal/pio/assembler/encoder.zig         | 0
     .../raspberrypi-rp2040/src}/hal/pio/assembler/tokenizer.zig       | 0
     {src => board-support/raspberrypi-rp2040/src}/hal/pll.zig         | 0
     {src => board-support/raspberrypi-rp2040/src}/hal/pwm.zig         | 0
     {src => board-support/raspberrypi-rp2040/src}/hal/random.zig      | 0
     {src => board-support/raspberrypi-rp2040/src}/hal/resets.zig      | 0
     {src => board-support/raspberrypi-rp2040/src}/hal/rom.zig         | 0
     {src => board-support/raspberrypi-rp2040/src}/hal/spi.zig         | 0
     {src => board-support/raspberrypi-rp2040/src}/hal/time.zig        | 0
     {src => board-support/raspberrypi-rp2040/src}/hal/uart.zig        | 0
     {src => board-support/raspberrypi-rp2040/src}/hal/usb.zig         | 0
     .../raspberrypi-rp2040/tools}/rp2040-flash.zig                    | 0
     122 files changed, 0 insertions(+), 0 deletions(-)
     rename LICENSE => board-support/raspberrypi-rp2040/LICENSE (100%)
     rename README.adoc => board-support/raspberrypi-rp2040/README.adoc (100%)
     rename build.zig => board-support/raspberrypi-rp2040/build.zig (100%)
     rename build.zig.zon => board-support/raspberrypi-rp2040/build.zig.zon (100%)
     rename {examples => board-support/raspberrypi-rp2040/examples}/adc.zig (100%)
     rename {examples => board-support/raspberrypi-rp2040/examples}/blinky.zig (100%)
     rename {examples => board-support/raspberrypi-rp2040/examples}/blinky_core1.zig (100%)
     rename {examples => board-support/raspberrypi-rp2040/examples}/flash_program.zig (100%)
     rename {examples => board-support/raspberrypi-rp2040/examples}/gpio_clk.zig (100%)
     rename {examples => board-support/raspberrypi-rp2040/examples}/i2c_bus_scan.zig (100%)
     rename {examples => board-support/raspberrypi-rp2040/examples}/pwm.zig (100%)
     rename {examples => board-support/raspberrypi-rp2040/examples}/random.zig (100%)
     rename {examples => board-support/raspberrypi-rp2040/examples}/scripts/hid_test.py (100%)
     rename {examples => board-support/raspberrypi-rp2040/examples}/scripts/usb_device_loopback.py (100%)
     rename {examples => board-support/raspberrypi-rp2040/examples}/spi_master.zig (100%)
     rename {examples => board-support/raspberrypi-rp2040/examples}/squarewave.zig (100%)
     rename {examples => board-support/raspberrypi-rp2040/examples}/uart.zig (100%)
     rename {examples => board-support/raspberrypi-rp2040/examples}/usb_device.zig (100%)
     rename {examples => board-support/raspberrypi-rp2040/examples}/usb_hid.zig (100%)
     rename {examples => board-support/raspberrypi-rp2040/examples}/ws2812.zig (100%)
     rename rp2040.ld => board-support/raspberrypi-rp2040/rp2040.ld (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/boards/raspberry_pi_pico.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/boards/shared/bootrom.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/boards/waveshare_rp2040_eth.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/boards/waveshare_rp2040_matrix.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/boards/waveshare_rp2040_plus_16m.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/boards/waveshare_rp2040_plus_4m.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/bootroms/at25sf128a.S (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/bootroms/generic_03h.S (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/bootroms/is25lp080.S (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/bootroms/legacy.S (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/bootroms/shared/addressmap.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/bootroms/shared/asm_helper.S (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/bootroms/shared/exit_from_boot2.S (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/bootroms/shared/m0plus.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/bootroms/shared/pads_qspi.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/bootroms/shared/read_flash_sreg.S (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/bootroms/shared/regs.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/bootroms/shared/ssi.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/bootroms/shared/stage2.ld (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/bootroms/shared/wait_ssi_ready.S (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/bootroms/w25q080.S (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/bootroms/w25q32jvssiq.S (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/bootroms/w25x10cl.S (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/chips/RP2040.json (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/adc.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/clocks.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/dma.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/flash.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/gpio.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/hw.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/i2c.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/irq.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/multicore.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pins.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/Expression.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/README.adoc (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/addition.pio (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/addition.pio.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/apa102.pio (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/apa102.pio.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/blink.pio (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/blink.pio.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/clocked_input.pio (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/clocked_input.pio.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/differential_manchester.pio (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/differential_manchester.pio.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/hello.pio (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/hello.pio.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/hub75.pio (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/hub75.pio.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/i2c.pio (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/i2c.pio.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/manchester_encoding.pio (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/manchester_encoding.pio.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/nec_carrier_burst.pio (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/nec_carrier_burst.pio.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/nec_carrier_control.pio (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/nec_carrier_control.pio.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/nec_receive.pio (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/nec_receive.pio.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/pio_serialiser.pio (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/pio_serialiser.pio.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/pwm.pio (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/pwm.pio.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/quadrature_encoder.pio (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/quadrature_encoder.pio.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/resistor_dac.pio (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/resistor_dac.pio.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/spi.pio (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/spi.pio.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/squarewave.pio (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/squarewave.pio.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/squarewave_fast.pio (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/squarewave_fast.pio.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/squarewave_test.pio (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/squarewave_wrap.pio (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/squarewave_wrap.pio.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/st7789_lcd.pio (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/st7789_lcd.pio.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/uart_rx.pio (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/uart_rx.pio.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/uart_tx.pio (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/uart_tx.pio.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/ws2812.pio (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/comparison_tests/ws2812.pio.h (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/encoder.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pio/assembler/tokenizer.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pll.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/pwm.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/random.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/resets.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/rom.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/spi.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/time.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/uart.zig (100%)
     rename {src => board-support/raspberrypi-rp2040/src}/hal/usb.zig (100%)
     rename {tools => board-support/raspberrypi-rp2040/tools}/rp2040-flash.zig (100%)
    
    diff --git a/LICENSE b/board-support/raspberrypi-rp2040/LICENSE
    similarity index 100%
    rename from LICENSE
    rename to board-support/raspberrypi-rp2040/LICENSE
    diff --git a/README.adoc b/board-support/raspberrypi-rp2040/README.adoc
    similarity index 100%
    rename from README.adoc
    rename to board-support/raspberrypi-rp2040/README.adoc
    diff --git a/build.zig b/board-support/raspberrypi-rp2040/build.zig
    similarity index 100%
    rename from build.zig
    rename to board-support/raspberrypi-rp2040/build.zig
    diff --git a/build.zig.zon b/board-support/raspberrypi-rp2040/build.zig.zon
    similarity index 100%
    rename from build.zig.zon
    rename to board-support/raspberrypi-rp2040/build.zig.zon
    diff --git a/examples/adc.zig b/board-support/raspberrypi-rp2040/examples/adc.zig
    similarity index 100%
    rename from examples/adc.zig
    rename to board-support/raspberrypi-rp2040/examples/adc.zig
    diff --git a/examples/blinky.zig b/board-support/raspberrypi-rp2040/examples/blinky.zig
    similarity index 100%
    rename from examples/blinky.zig
    rename to board-support/raspberrypi-rp2040/examples/blinky.zig
    diff --git a/examples/blinky_core1.zig b/board-support/raspberrypi-rp2040/examples/blinky_core1.zig
    similarity index 100%
    rename from examples/blinky_core1.zig
    rename to board-support/raspberrypi-rp2040/examples/blinky_core1.zig
    diff --git a/examples/flash_program.zig b/board-support/raspberrypi-rp2040/examples/flash_program.zig
    similarity index 100%
    rename from examples/flash_program.zig
    rename to board-support/raspberrypi-rp2040/examples/flash_program.zig
    diff --git a/examples/gpio_clk.zig b/board-support/raspberrypi-rp2040/examples/gpio_clk.zig
    similarity index 100%
    rename from examples/gpio_clk.zig
    rename to board-support/raspberrypi-rp2040/examples/gpio_clk.zig
    diff --git a/examples/i2c_bus_scan.zig b/board-support/raspberrypi-rp2040/examples/i2c_bus_scan.zig
    similarity index 100%
    rename from examples/i2c_bus_scan.zig
    rename to board-support/raspberrypi-rp2040/examples/i2c_bus_scan.zig
    diff --git a/examples/pwm.zig b/board-support/raspberrypi-rp2040/examples/pwm.zig
    similarity index 100%
    rename from examples/pwm.zig
    rename to board-support/raspberrypi-rp2040/examples/pwm.zig
    diff --git a/examples/random.zig b/board-support/raspberrypi-rp2040/examples/random.zig
    similarity index 100%
    rename from examples/random.zig
    rename to board-support/raspberrypi-rp2040/examples/random.zig
    diff --git a/examples/scripts/hid_test.py b/board-support/raspberrypi-rp2040/examples/scripts/hid_test.py
    similarity index 100%
    rename from examples/scripts/hid_test.py
    rename to board-support/raspberrypi-rp2040/examples/scripts/hid_test.py
    diff --git a/examples/scripts/usb_device_loopback.py b/board-support/raspberrypi-rp2040/examples/scripts/usb_device_loopback.py
    similarity index 100%
    rename from examples/scripts/usb_device_loopback.py
    rename to board-support/raspberrypi-rp2040/examples/scripts/usb_device_loopback.py
    diff --git a/examples/spi_master.zig b/board-support/raspberrypi-rp2040/examples/spi_master.zig
    similarity index 100%
    rename from examples/spi_master.zig
    rename to board-support/raspberrypi-rp2040/examples/spi_master.zig
    diff --git a/examples/squarewave.zig b/board-support/raspberrypi-rp2040/examples/squarewave.zig
    similarity index 100%
    rename from examples/squarewave.zig
    rename to board-support/raspberrypi-rp2040/examples/squarewave.zig
    diff --git a/examples/uart.zig b/board-support/raspberrypi-rp2040/examples/uart.zig
    similarity index 100%
    rename from examples/uart.zig
    rename to board-support/raspberrypi-rp2040/examples/uart.zig
    diff --git a/examples/usb_device.zig b/board-support/raspberrypi-rp2040/examples/usb_device.zig
    similarity index 100%
    rename from examples/usb_device.zig
    rename to board-support/raspberrypi-rp2040/examples/usb_device.zig
    diff --git a/examples/usb_hid.zig b/board-support/raspberrypi-rp2040/examples/usb_hid.zig
    similarity index 100%
    rename from examples/usb_hid.zig
    rename to board-support/raspberrypi-rp2040/examples/usb_hid.zig
    diff --git a/examples/ws2812.zig b/board-support/raspberrypi-rp2040/examples/ws2812.zig
    similarity index 100%
    rename from examples/ws2812.zig
    rename to board-support/raspberrypi-rp2040/examples/ws2812.zig
    diff --git a/rp2040.ld b/board-support/raspberrypi-rp2040/rp2040.ld
    similarity index 100%
    rename from rp2040.ld
    rename to board-support/raspberrypi-rp2040/rp2040.ld
    diff --git a/src/boards/raspberry_pi_pico.zig b/board-support/raspberrypi-rp2040/src/boards/raspberry_pi_pico.zig
    similarity index 100%
    rename from src/boards/raspberry_pi_pico.zig
    rename to board-support/raspberrypi-rp2040/src/boards/raspberry_pi_pico.zig
    diff --git a/src/boards/shared/bootrom.zig b/board-support/raspberrypi-rp2040/src/boards/shared/bootrom.zig
    similarity index 100%
    rename from src/boards/shared/bootrom.zig
    rename to board-support/raspberrypi-rp2040/src/boards/shared/bootrom.zig
    diff --git a/src/boards/waveshare_rp2040_eth.zig b/board-support/raspberrypi-rp2040/src/boards/waveshare_rp2040_eth.zig
    similarity index 100%
    rename from src/boards/waveshare_rp2040_eth.zig
    rename to board-support/raspberrypi-rp2040/src/boards/waveshare_rp2040_eth.zig
    diff --git a/src/boards/waveshare_rp2040_matrix.zig b/board-support/raspberrypi-rp2040/src/boards/waveshare_rp2040_matrix.zig
    similarity index 100%
    rename from src/boards/waveshare_rp2040_matrix.zig
    rename to board-support/raspberrypi-rp2040/src/boards/waveshare_rp2040_matrix.zig
    diff --git a/src/boards/waveshare_rp2040_plus_16m.zig b/board-support/raspberrypi-rp2040/src/boards/waveshare_rp2040_plus_16m.zig
    similarity index 100%
    rename from src/boards/waveshare_rp2040_plus_16m.zig
    rename to board-support/raspberrypi-rp2040/src/boards/waveshare_rp2040_plus_16m.zig
    diff --git a/src/boards/waveshare_rp2040_plus_4m.zig b/board-support/raspberrypi-rp2040/src/boards/waveshare_rp2040_plus_4m.zig
    similarity index 100%
    rename from src/boards/waveshare_rp2040_plus_4m.zig
    rename to board-support/raspberrypi-rp2040/src/boards/waveshare_rp2040_plus_4m.zig
    diff --git a/src/bootroms/at25sf128a.S b/board-support/raspberrypi-rp2040/src/bootroms/at25sf128a.S
    similarity index 100%
    rename from src/bootroms/at25sf128a.S
    rename to board-support/raspberrypi-rp2040/src/bootroms/at25sf128a.S
    diff --git a/src/bootroms/generic_03h.S b/board-support/raspberrypi-rp2040/src/bootroms/generic_03h.S
    similarity index 100%
    rename from src/bootroms/generic_03h.S
    rename to board-support/raspberrypi-rp2040/src/bootroms/generic_03h.S
    diff --git a/src/bootroms/is25lp080.S b/board-support/raspberrypi-rp2040/src/bootroms/is25lp080.S
    similarity index 100%
    rename from src/bootroms/is25lp080.S
    rename to board-support/raspberrypi-rp2040/src/bootroms/is25lp080.S
    diff --git a/src/bootroms/legacy.S b/board-support/raspberrypi-rp2040/src/bootroms/legacy.S
    similarity index 100%
    rename from src/bootroms/legacy.S
    rename to board-support/raspberrypi-rp2040/src/bootroms/legacy.S
    diff --git a/src/bootroms/shared/addressmap.h b/board-support/raspberrypi-rp2040/src/bootroms/shared/addressmap.h
    similarity index 100%
    rename from src/bootroms/shared/addressmap.h
    rename to board-support/raspberrypi-rp2040/src/bootroms/shared/addressmap.h
    diff --git a/src/bootroms/shared/asm_helper.S b/board-support/raspberrypi-rp2040/src/bootroms/shared/asm_helper.S
    similarity index 100%
    rename from src/bootroms/shared/asm_helper.S
    rename to board-support/raspberrypi-rp2040/src/bootroms/shared/asm_helper.S
    diff --git a/src/bootroms/shared/exit_from_boot2.S b/board-support/raspberrypi-rp2040/src/bootroms/shared/exit_from_boot2.S
    similarity index 100%
    rename from src/bootroms/shared/exit_from_boot2.S
    rename to board-support/raspberrypi-rp2040/src/bootroms/shared/exit_from_boot2.S
    diff --git a/src/bootroms/shared/m0plus.h b/board-support/raspberrypi-rp2040/src/bootroms/shared/m0plus.h
    similarity index 100%
    rename from src/bootroms/shared/m0plus.h
    rename to board-support/raspberrypi-rp2040/src/bootroms/shared/m0plus.h
    diff --git a/src/bootroms/shared/pads_qspi.h b/board-support/raspberrypi-rp2040/src/bootroms/shared/pads_qspi.h
    similarity index 100%
    rename from src/bootroms/shared/pads_qspi.h
    rename to board-support/raspberrypi-rp2040/src/bootroms/shared/pads_qspi.h
    diff --git a/src/bootroms/shared/read_flash_sreg.S b/board-support/raspberrypi-rp2040/src/bootroms/shared/read_flash_sreg.S
    similarity index 100%
    rename from src/bootroms/shared/read_flash_sreg.S
    rename to board-support/raspberrypi-rp2040/src/bootroms/shared/read_flash_sreg.S
    diff --git a/src/bootroms/shared/regs.h b/board-support/raspberrypi-rp2040/src/bootroms/shared/regs.h
    similarity index 100%
    rename from src/bootroms/shared/regs.h
    rename to board-support/raspberrypi-rp2040/src/bootroms/shared/regs.h
    diff --git a/src/bootroms/shared/ssi.h b/board-support/raspberrypi-rp2040/src/bootroms/shared/ssi.h
    similarity index 100%
    rename from src/bootroms/shared/ssi.h
    rename to board-support/raspberrypi-rp2040/src/bootroms/shared/ssi.h
    diff --git a/src/bootroms/shared/stage2.ld b/board-support/raspberrypi-rp2040/src/bootroms/shared/stage2.ld
    similarity index 100%
    rename from src/bootroms/shared/stage2.ld
    rename to board-support/raspberrypi-rp2040/src/bootroms/shared/stage2.ld
    diff --git a/src/bootroms/shared/wait_ssi_ready.S b/board-support/raspberrypi-rp2040/src/bootroms/shared/wait_ssi_ready.S
    similarity index 100%
    rename from src/bootroms/shared/wait_ssi_ready.S
    rename to board-support/raspberrypi-rp2040/src/bootroms/shared/wait_ssi_ready.S
    diff --git a/src/bootroms/w25q080.S b/board-support/raspberrypi-rp2040/src/bootroms/w25q080.S
    similarity index 100%
    rename from src/bootroms/w25q080.S
    rename to board-support/raspberrypi-rp2040/src/bootroms/w25q080.S
    diff --git a/src/bootroms/w25q32jvssiq.S b/board-support/raspberrypi-rp2040/src/bootroms/w25q32jvssiq.S
    similarity index 100%
    rename from src/bootroms/w25q32jvssiq.S
    rename to board-support/raspberrypi-rp2040/src/bootroms/w25q32jvssiq.S
    diff --git a/src/bootroms/w25x10cl.S b/board-support/raspberrypi-rp2040/src/bootroms/w25x10cl.S
    similarity index 100%
    rename from src/bootroms/w25x10cl.S
    rename to board-support/raspberrypi-rp2040/src/bootroms/w25x10cl.S
    diff --git a/src/chips/RP2040.json b/board-support/raspberrypi-rp2040/src/chips/RP2040.json
    similarity index 100%
    rename from src/chips/RP2040.json
    rename to board-support/raspberrypi-rp2040/src/chips/RP2040.json
    diff --git a/src/hal.zig b/board-support/raspberrypi-rp2040/src/hal.zig
    similarity index 100%
    rename from src/hal.zig
    rename to board-support/raspberrypi-rp2040/src/hal.zig
    diff --git a/src/hal/adc.zig b/board-support/raspberrypi-rp2040/src/hal/adc.zig
    similarity index 100%
    rename from src/hal/adc.zig
    rename to board-support/raspberrypi-rp2040/src/hal/adc.zig
    diff --git a/src/hal/clocks.zig b/board-support/raspberrypi-rp2040/src/hal/clocks.zig
    similarity index 100%
    rename from src/hal/clocks.zig
    rename to board-support/raspberrypi-rp2040/src/hal/clocks.zig
    diff --git a/src/hal/dma.zig b/board-support/raspberrypi-rp2040/src/hal/dma.zig
    similarity index 100%
    rename from src/hal/dma.zig
    rename to board-support/raspberrypi-rp2040/src/hal/dma.zig
    diff --git a/src/hal/flash.zig b/board-support/raspberrypi-rp2040/src/hal/flash.zig
    similarity index 100%
    rename from src/hal/flash.zig
    rename to board-support/raspberrypi-rp2040/src/hal/flash.zig
    diff --git a/src/hal/gpio.zig b/board-support/raspberrypi-rp2040/src/hal/gpio.zig
    similarity index 100%
    rename from src/hal/gpio.zig
    rename to board-support/raspberrypi-rp2040/src/hal/gpio.zig
    diff --git a/src/hal/hw.zig b/board-support/raspberrypi-rp2040/src/hal/hw.zig
    similarity index 100%
    rename from src/hal/hw.zig
    rename to board-support/raspberrypi-rp2040/src/hal/hw.zig
    diff --git a/src/hal/i2c.zig b/board-support/raspberrypi-rp2040/src/hal/i2c.zig
    similarity index 100%
    rename from src/hal/i2c.zig
    rename to board-support/raspberrypi-rp2040/src/hal/i2c.zig
    diff --git a/src/hal/irq.zig b/board-support/raspberrypi-rp2040/src/hal/irq.zig
    similarity index 100%
    rename from src/hal/irq.zig
    rename to board-support/raspberrypi-rp2040/src/hal/irq.zig
    diff --git a/src/hal/multicore.zig b/board-support/raspberrypi-rp2040/src/hal/multicore.zig
    similarity index 100%
    rename from src/hal/multicore.zig
    rename to board-support/raspberrypi-rp2040/src/hal/multicore.zig
    diff --git a/src/hal/pins.zig b/board-support/raspberrypi-rp2040/src/hal/pins.zig
    similarity index 100%
    rename from src/hal/pins.zig
    rename to board-support/raspberrypi-rp2040/src/hal/pins.zig
    diff --git a/src/hal/pio.zig b/board-support/raspberrypi-rp2040/src/hal/pio.zig
    similarity index 100%
    rename from src/hal/pio.zig
    rename to board-support/raspberrypi-rp2040/src/hal/pio.zig
    diff --git a/src/hal/pio/assembler.zig b/board-support/raspberrypi-rp2040/src/hal/pio/assembler.zig
    similarity index 100%
    rename from src/hal/pio/assembler.zig
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler.zig
    diff --git a/src/hal/pio/assembler/Expression.zig b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/Expression.zig
    similarity index 100%
    rename from src/hal/pio/assembler/Expression.zig
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/Expression.zig
    diff --git a/src/hal/pio/assembler/comparison_tests.zig b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests.zig
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests.zig
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests.zig
    diff --git a/src/hal/pio/assembler/comparison_tests/README.adoc b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/README.adoc
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/README.adoc
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/README.adoc
    diff --git a/src/hal/pio/assembler/comparison_tests/addition.pio b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/addition.pio
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/addition.pio
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/addition.pio
    diff --git a/src/hal/pio/assembler/comparison_tests/addition.pio.h b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/addition.pio.h
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/addition.pio.h
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/addition.pio.h
    diff --git a/src/hal/pio/assembler/comparison_tests/apa102.pio b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/apa102.pio
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/apa102.pio
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/apa102.pio
    diff --git a/src/hal/pio/assembler/comparison_tests/apa102.pio.h b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/apa102.pio.h
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/apa102.pio.h
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/apa102.pio.h
    diff --git a/src/hal/pio/assembler/comparison_tests/blink.pio b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/blink.pio
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/blink.pio
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/blink.pio
    diff --git a/src/hal/pio/assembler/comparison_tests/blink.pio.h b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/blink.pio.h
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/blink.pio.h
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/blink.pio.h
    diff --git a/src/hal/pio/assembler/comparison_tests/clocked_input.pio b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/clocked_input.pio
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/clocked_input.pio
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/clocked_input.pio
    diff --git a/src/hal/pio/assembler/comparison_tests/clocked_input.pio.h b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/clocked_input.pio.h
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/clocked_input.pio.h
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/clocked_input.pio.h
    diff --git a/src/hal/pio/assembler/comparison_tests/differential_manchester.pio b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/differential_manchester.pio
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/differential_manchester.pio
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/differential_manchester.pio
    diff --git a/src/hal/pio/assembler/comparison_tests/differential_manchester.pio.h b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/differential_manchester.pio.h
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/differential_manchester.pio.h
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/differential_manchester.pio.h
    diff --git a/src/hal/pio/assembler/comparison_tests/hello.pio b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/hello.pio
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/hello.pio
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/hello.pio
    diff --git a/src/hal/pio/assembler/comparison_tests/hello.pio.h b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/hello.pio.h
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/hello.pio.h
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/hello.pio.h
    diff --git a/src/hal/pio/assembler/comparison_tests/hub75.pio b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/hub75.pio
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/hub75.pio
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/hub75.pio
    diff --git a/src/hal/pio/assembler/comparison_tests/hub75.pio.h b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/hub75.pio.h
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/hub75.pio.h
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/hub75.pio.h
    diff --git a/src/hal/pio/assembler/comparison_tests/i2c.pio b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/i2c.pio
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/i2c.pio
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/i2c.pio
    diff --git a/src/hal/pio/assembler/comparison_tests/i2c.pio.h b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/i2c.pio.h
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/i2c.pio.h
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/i2c.pio.h
    diff --git a/src/hal/pio/assembler/comparison_tests/manchester_encoding.pio b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/manchester_encoding.pio
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/manchester_encoding.pio
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/manchester_encoding.pio
    diff --git a/src/hal/pio/assembler/comparison_tests/manchester_encoding.pio.h b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/manchester_encoding.pio.h
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/manchester_encoding.pio.h
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/manchester_encoding.pio.h
    diff --git a/src/hal/pio/assembler/comparison_tests/nec_carrier_burst.pio b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/nec_carrier_burst.pio
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/nec_carrier_burst.pio
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/nec_carrier_burst.pio
    diff --git a/src/hal/pio/assembler/comparison_tests/nec_carrier_burst.pio.h b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/nec_carrier_burst.pio.h
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/nec_carrier_burst.pio.h
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/nec_carrier_burst.pio.h
    diff --git a/src/hal/pio/assembler/comparison_tests/nec_carrier_control.pio b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/nec_carrier_control.pio
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/nec_carrier_control.pio
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/nec_carrier_control.pio
    diff --git a/src/hal/pio/assembler/comparison_tests/nec_carrier_control.pio.h b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/nec_carrier_control.pio.h
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/nec_carrier_control.pio.h
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/nec_carrier_control.pio.h
    diff --git a/src/hal/pio/assembler/comparison_tests/nec_receive.pio b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/nec_receive.pio
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/nec_receive.pio
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/nec_receive.pio
    diff --git a/src/hal/pio/assembler/comparison_tests/nec_receive.pio.h b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/nec_receive.pio.h
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/nec_receive.pio.h
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/nec_receive.pio.h
    diff --git a/src/hal/pio/assembler/comparison_tests/pio_serialiser.pio b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/pio_serialiser.pio
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/pio_serialiser.pio
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/pio_serialiser.pio
    diff --git a/src/hal/pio/assembler/comparison_tests/pio_serialiser.pio.h b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/pio_serialiser.pio.h
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/pio_serialiser.pio.h
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/pio_serialiser.pio.h
    diff --git a/src/hal/pio/assembler/comparison_tests/pwm.pio b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/pwm.pio
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/pwm.pio
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/pwm.pio
    diff --git a/src/hal/pio/assembler/comparison_tests/pwm.pio.h b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/pwm.pio.h
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/pwm.pio.h
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/pwm.pio.h
    diff --git a/src/hal/pio/assembler/comparison_tests/quadrature_encoder.pio b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/quadrature_encoder.pio
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/quadrature_encoder.pio
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/quadrature_encoder.pio
    diff --git a/src/hal/pio/assembler/comparison_tests/quadrature_encoder.pio.h b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/quadrature_encoder.pio.h
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/quadrature_encoder.pio.h
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/quadrature_encoder.pio.h
    diff --git a/src/hal/pio/assembler/comparison_tests/resistor_dac.pio b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/resistor_dac.pio
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/resistor_dac.pio
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/resistor_dac.pio
    diff --git a/src/hal/pio/assembler/comparison_tests/resistor_dac.pio.h b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/resistor_dac.pio.h
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/resistor_dac.pio.h
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/resistor_dac.pio.h
    diff --git a/src/hal/pio/assembler/comparison_tests/spi.pio b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/spi.pio
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/spi.pio
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/spi.pio
    diff --git a/src/hal/pio/assembler/comparison_tests/spi.pio.h b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/spi.pio.h
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/spi.pio.h
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/spi.pio.h
    diff --git a/src/hal/pio/assembler/comparison_tests/squarewave.pio b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/squarewave.pio
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/squarewave.pio
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/squarewave.pio
    diff --git a/src/hal/pio/assembler/comparison_tests/squarewave.pio.h b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/squarewave.pio.h
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/squarewave.pio.h
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/squarewave.pio.h
    diff --git a/src/hal/pio/assembler/comparison_tests/squarewave_fast.pio b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/squarewave_fast.pio
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/squarewave_fast.pio
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/squarewave_fast.pio
    diff --git a/src/hal/pio/assembler/comparison_tests/squarewave_fast.pio.h b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/squarewave_fast.pio.h
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/squarewave_fast.pio.h
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/squarewave_fast.pio.h
    diff --git a/src/hal/pio/assembler/comparison_tests/squarewave_test.pio b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/squarewave_test.pio
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/squarewave_test.pio
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/squarewave_test.pio
    diff --git a/src/hal/pio/assembler/comparison_tests/squarewave_wrap.pio b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/squarewave_wrap.pio
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/squarewave_wrap.pio
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/squarewave_wrap.pio
    diff --git a/src/hal/pio/assembler/comparison_tests/squarewave_wrap.pio.h b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/squarewave_wrap.pio.h
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/squarewave_wrap.pio.h
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/squarewave_wrap.pio.h
    diff --git a/src/hal/pio/assembler/comparison_tests/st7789_lcd.pio b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/st7789_lcd.pio
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/st7789_lcd.pio
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/st7789_lcd.pio
    diff --git a/src/hal/pio/assembler/comparison_tests/st7789_lcd.pio.h b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/st7789_lcd.pio.h
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/st7789_lcd.pio.h
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/st7789_lcd.pio.h
    diff --git a/src/hal/pio/assembler/comparison_tests/uart_rx.pio b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/uart_rx.pio
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/uart_rx.pio
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/uart_rx.pio
    diff --git a/src/hal/pio/assembler/comparison_tests/uart_rx.pio.h b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/uart_rx.pio.h
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/uart_rx.pio.h
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/uart_rx.pio.h
    diff --git a/src/hal/pio/assembler/comparison_tests/uart_tx.pio b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/uart_tx.pio
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/uart_tx.pio
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/uart_tx.pio
    diff --git a/src/hal/pio/assembler/comparison_tests/uart_tx.pio.h b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/uart_tx.pio.h
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/uart_tx.pio.h
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/uart_tx.pio.h
    diff --git a/src/hal/pio/assembler/comparison_tests/ws2812.pio b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/ws2812.pio
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/ws2812.pio
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/ws2812.pio
    diff --git a/src/hal/pio/assembler/comparison_tests/ws2812.pio.h b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/ws2812.pio.h
    similarity index 100%
    rename from src/hal/pio/assembler/comparison_tests/ws2812.pio.h
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/comparison_tests/ws2812.pio.h
    diff --git a/src/hal/pio/assembler/encoder.zig b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/encoder.zig
    similarity index 100%
    rename from src/hal/pio/assembler/encoder.zig
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/encoder.zig
    diff --git a/src/hal/pio/assembler/tokenizer.zig b/board-support/raspberrypi-rp2040/src/hal/pio/assembler/tokenizer.zig
    similarity index 100%
    rename from src/hal/pio/assembler/tokenizer.zig
    rename to board-support/raspberrypi-rp2040/src/hal/pio/assembler/tokenizer.zig
    diff --git a/src/hal/pll.zig b/board-support/raspberrypi-rp2040/src/hal/pll.zig
    similarity index 100%
    rename from src/hal/pll.zig
    rename to board-support/raspberrypi-rp2040/src/hal/pll.zig
    diff --git a/src/hal/pwm.zig b/board-support/raspberrypi-rp2040/src/hal/pwm.zig
    similarity index 100%
    rename from src/hal/pwm.zig
    rename to board-support/raspberrypi-rp2040/src/hal/pwm.zig
    diff --git a/src/hal/random.zig b/board-support/raspberrypi-rp2040/src/hal/random.zig
    similarity index 100%
    rename from src/hal/random.zig
    rename to board-support/raspberrypi-rp2040/src/hal/random.zig
    diff --git a/src/hal/resets.zig b/board-support/raspberrypi-rp2040/src/hal/resets.zig
    similarity index 100%
    rename from src/hal/resets.zig
    rename to board-support/raspberrypi-rp2040/src/hal/resets.zig
    diff --git a/src/hal/rom.zig b/board-support/raspberrypi-rp2040/src/hal/rom.zig
    similarity index 100%
    rename from src/hal/rom.zig
    rename to board-support/raspberrypi-rp2040/src/hal/rom.zig
    diff --git a/src/hal/spi.zig b/board-support/raspberrypi-rp2040/src/hal/spi.zig
    similarity index 100%
    rename from src/hal/spi.zig
    rename to board-support/raspberrypi-rp2040/src/hal/spi.zig
    diff --git a/src/hal/time.zig b/board-support/raspberrypi-rp2040/src/hal/time.zig
    similarity index 100%
    rename from src/hal/time.zig
    rename to board-support/raspberrypi-rp2040/src/hal/time.zig
    diff --git a/src/hal/uart.zig b/board-support/raspberrypi-rp2040/src/hal/uart.zig
    similarity index 100%
    rename from src/hal/uart.zig
    rename to board-support/raspberrypi-rp2040/src/hal/uart.zig
    diff --git a/src/hal/usb.zig b/board-support/raspberrypi-rp2040/src/hal/usb.zig
    similarity index 100%
    rename from src/hal/usb.zig
    rename to board-support/raspberrypi-rp2040/src/hal/usb.zig
    diff --git a/tools/rp2040-flash.zig b/board-support/raspberrypi-rp2040/tools/rp2040-flash.zig
    similarity index 100%
    rename from tools/rp2040-flash.zig
    rename to board-support/raspberrypi-rp2040/tools/rp2040-flash.zig
    
    From 4ba6016ea0cf4f28779fe3dd57b1441ab09a4a70 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Thu, 4 Jan 2024 08:51:05 +0100
    Subject: [PATCH 241/286] moves stmicro-stm32 to board-support
    
    ---
     .buildkite/pipeline.yml                                     | 6 ------
     LICENSE => board-support/stmicro-stm32/LICENSE              | 0
     README.adoc => board-support/stmicro-stm32/README.adoc      | 0
     build.zig => board-support/stmicro-stm32/build.zig          | 0
     .../stmicro-stm32/src}/boards/STM3240G_EVAL.zig             | 0
     .../stmicro-stm32/src}/boards/STM32F3DISCOVERY.zig          | 0
     .../stmicro-stm32/src}/boards/STM32F429IDISCOVERY.zig       | 0
     .../stmicro-stm32/src}/boards/STM32F4DISCOVERY.zig          | 0
     .../stmicro-stm32/src}/chips/STM32F103.json                 | 0
     .../stmicro-stm32/src}/chips/STM32F303.json                 | 0
     .../stmicro-stm32/src}/chips/STM32F407.json                 | 0
     .../stmicro-stm32/src}/chips/STM32F429.json                 | 0
     .../stmicro-stm32/src}/chips/STM32L0x1.svd                  | 0
     .../stmicro-stm32/src}/chips/STM32L0x2.svd                  | 0
     .../stmicro-stm32/src}/chips/STM32L0x3.svd                  | 0
     {src => board-support/stmicro-stm32/src}/hals/STM32F103.zig | 0
     .../stmicro-stm32/src}/hals/STM32F103/gpio.zig              | 0
     .../stmicro-stm32/src}/hals/STM32F103/hal.zig               | 0
     .../stmicro-stm32/src}/hals/STM32F103/pins.zig              | 0
     {src => board-support/stmicro-stm32/src}/hals/STM32F303.zig | 0
     {src => board-support/stmicro-stm32/src}/hals/STM32F407.zig | 0
     {src => board-support/stmicro-stm32/src}/hals/STM32F429.zig | 0
     .../stmicro-stm32/test}/programs/minimal.zig                | 0
     {test => board-support/stmicro-stm32/test}/stm32f103.robot  | 0
     deps/microzig                                               | 1 -
     25 files changed, 7 deletions(-)
     delete mode 100644 .buildkite/pipeline.yml
     rename LICENSE => board-support/stmicro-stm32/LICENSE (100%)
     rename README.adoc => board-support/stmicro-stm32/README.adoc (100%)
     rename build.zig => board-support/stmicro-stm32/build.zig (100%)
     rename {src => board-support/stmicro-stm32/src}/boards/STM3240G_EVAL.zig (100%)
     rename {src => board-support/stmicro-stm32/src}/boards/STM32F3DISCOVERY.zig (100%)
     rename {src => board-support/stmicro-stm32/src}/boards/STM32F429IDISCOVERY.zig (100%)
     rename {src => board-support/stmicro-stm32/src}/boards/STM32F4DISCOVERY.zig (100%)
     rename {src => board-support/stmicro-stm32/src}/chips/STM32F103.json (100%)
     rename {src => board-support/stmicro-stm32/src}/chips/STM32F303.json (100%)
     rename {src => board-support/stmicro-stm32/src}/chips/STM32F407.json (100%)
     rename {src => board-support/stmicro-stm32/src}/chips/STM32F429.json (100%)
     rename {src => board-support/stmicro-stm32/src}/chips/STM32L0x1.svd (100%)
     rename {src => board-support/stmicro-stm32/src}/chips/STM32L0x2.svd (100%)
     rename {src => board-support/stmicro-stm32/src}/chips/STM32L0x3.svd (100%)
     rename {src => board-support/stmicro-stm32/src}/hals/STM32F103.zig (100%)
     rename {src => board-support/stmicro-stm32/src}/hals/STM32F103/gpio.zig (100%)
     rename {src => board-support/stmicro-stm32/src}/hals/STM32F103/hal.zig (100%)
     rename {src => board-support/stmicro-stm32/src}/hals/STM32F103/pins.zig (100%)
     rename {src => board-support/stmicro-stm32/src}/hals/STM32F303.zig (100%)
     rename {src => board-support/stmicro-stm32/src}/hals/STM32F407.zig (100%)
     rename {src => board-support/stmicro-stm32/src}/hals/STM32F429.zig (100%)
     rename {test => board-support/stmicro-stm32/test}/programs/minimal.zig (100%)
     rename {test => board-support/stmicro-stm32/test}/stm32f103.robot (100%)
     delete mode 160000 deps/microzig
    
    diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml
    deleted file mode 100644
    index ad6d38054..000000000
    --- a/.buildkite/pipeline.yml
    +++ /dev/null
    @@ -1,6 +0,0 @@
    -steps:
    -  - group: Build and Test
    -    steps:
    -    - command: zig build
    -    - label: 🔨 Test
    -      command: renode-test test/stm32f103.robot
    diff --git a/LICENSE b/board-support/stmicro-stm32/LICENSE
    similarity index 100%
    rename from LICENSE
    rename to board-support/stmicro-stm32/LICENSE
    diff --git a/README.adoc b/board-support/stmicro-stm32/README.adoc
    similarity index 100%
    rename from README.adoc
    rename to board-support/stmicro-stm32/README.adoc
    diff --git a/build.zig b/board-support/stmicro-stm32/build.zig
    similarity index 100%
    rename from build.zig
    rename to board-support/stmicro-stm32/build.zig
    diff --git a/src/boards/STM3240G_EVAL.zig b/board-support/stmicro-stm32/src/boards/STM3240G_EVAL.zig
    similarity index 100%
    rename from src/boards/STM3240G_EVAL.zig
    rename to board-support/stmicro-stm32/src/boards/STM3240G_EVAL.zig
    diff --git a/src/boards/STM32F3DISCOVERY.zig b/board-support/stmicro-stm32/src/boards/STM32F3DISCOVERY.zig
    similarity index 100%
    rename from src/boards/STM32F3DISCOVERY.zig
    rename to board-support/stmicro-stm32/src/boards/STM32F3DISCOVERY.zig
    diff --git a/src/boards/STM32F429IDISCOVERY.zig b/board-support/stmicro-stm32/src/boards/STM32F429IDISCOVERY.zig
    similarity index 100%
    rename from src/boards/STM32F429IDISCOVERY.zig
    rename to board-support/stmicro-stm32/src/boards/STM32F429IDISCOVERY.zig
    diff --git a/src/boards/STM32F4DISCOVERY.zig b/board-support/stmicro-stm32/src/boards/STM32F4DISCOVERY.zig
    similarity index 100%
    rename from src/boards/STM32F4DISCOVERY.zig
    rename to board-support/stmicro-stm32/src/boards/STM32F4DISCOVERY.zig
    diff --git a/src/chips/STM32F103.json b/board-support/stmicro-stm32/src/chips/STM32F103.json
    similarity index 100%
    rename from src/chips/STM32F103.json
    rename to board-support/stmicro-stm32/src/chips/STM32F103.json
    diff --git a/src/chips/STM32F303.json b/board-support/stmicro-stm32/src/chips/STM32F303.json
    similarity index 100%
    rename from src/chips/STM32F303.json
    rename to board-support/stmicro-stm32/src/chips/STM32F303.json
    diff --git a/src/chips/STM32F407.json b/board-support/stmicro-stm32/src/chips/STM32F407.json
    similarity index 100%
    rename from src/chips/STM32F407.json
    rename to board-support/stmicro-stm32/src/chips/STM32F407.json
    diff --git a/src/chips/STM32F429.json b/board-support/stmicro-stm32/src/chips/STM32F429.json
    similarity index 100%
    rename from src/chips/STM32F429.json
    rename to board-support/stmicro-stm32/src/chips/STM32F429.json
    diff --git a/src/chips/STM32L0x1.svd b/board-support/stmicro-stm32/src/chips/STM32L0x1.svd
    similarity index 100%
    rename from src/chips/STM32L0x1.svd
    rename to board-support/stmicro-stm32/src/chips/STM32L0x1.svd
    diff --git a/src/chips/STM32L0x2.svd b/board-support/stmicro-stm32/src/chips/STM32L0x2.svd
    similarity index 100%
    rename from src/chips/STM32L0x2.svd
    rename to board-support/stmicro-stm32/src/chips/STM32L0x2.svd
    diff --git a/src/chips/STM32L0x3.svd b/board-support/stmicro-stm32/src/chips/STM32L0x3.svd
    similarity index 100%
    rename from src/chips/STM32L0x3.svd
    rename to board-support/stmicro-stm32/src/chips/STM32L0x3.svd
    diff --git a/src/hals/STM32F103.zig b/board-support/stmicro-stm32/src/hals/STM32F103.zig
    similarity index 100%
    rename from src/hals/STM32F103.zig
    rename to board-support/stmicro-stm32/src/hals/STM32F103.zig
    diff --git a/src/hals/STM32F103/gpio.zig b/board-support/stmicro-stm32/src/hals/STM32F103/gpio.zig
    similarity index 100%
    rename from src/hals/STM32F103/gpio.zig
    rename to board-support/stmicro-stm32/src/hals/STM32F103/gpio.zig
    diff --git a/src/hals/STM32F103/hal.zig b/board-support/stmicro-stm32/src/hals/STM32F103/hal.zig
    similarity index 100%
    rename from src/hals/STM32F103/hal.zig
    rename to board-support/stmicro-stm32/src/hals/STM32F103/hal.zig
    diff --git a/src/hals/STM32F103/pins.zig b/board-support/stmicro-stm32/src/hals/STM32F103/pins.zig
    similarity index 100%
    rename from src/hals/STM32F103/pins.zig
    rename to board-support/stmicro-stm32/src/hals/STM32F103/pins.zig
    diff --git a/src/hals/STM32F303.zig b/board-support/stmicro-stm32/src/hals/STM32F303.zig
    similarity index 100%
    rename from src/hals/STM32F303.zig
    rename to board-support/stmicro-stm32/src/hals/STM32F303.zig
    diff --git a/src/hals/STM32F407.zig b/board-support/stmicro-stm32/src/hals/STM32F407.zig
    similarity index 100%
    rename from src/hals/STM32F407.zig
    rename to board-support/stmicro-stm32/src/hals/STM32F407.zig
    diff --git a/src/hals/STM32F429.zig b/board-support/stmicro-stm32/src/hals/STM32F429.zig
    similarity index 100%
    rename from src/hals/STM32F429.zig
    rename to board-support/stmicro-stm32/src/hals/STM32F429.zig
    diff --git a/test/programs/minimal.zig b/board-support/stmicro-stm32/test/programs/minimal.zig
    similarity index 100%
    rename from test/programs/minimal.zig
    rename to board-support/stmicro-stm32/test/programs/minimal.zig
    diff --git a/test/stm32f103.robot b/board-support/stmicro-stm32/test/stm32f103.robot
    similarity index 100%
    rename from test/stm32f103.robot
    rename to board-support/stmicro-stm32/test/stm32f103.robot
    diff --git a/deps/microzig b/deps/microzig
    deleted file mode 160000
    index 9392fe0f7..000000000
    --- a/deps/microzig
    +++ /dev/null
    @@ -1 +0,0 @@
    -Subproject commit 9392fe0f7bddde26155c181ab80b70097b49c791
    
    From c99eb4e1e48bc0f50a9530fee50c1df3c8f2b369 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Thu, 4 Jan 2024 08:52:14 +0100
    Subject: [PATCH 242/286] Moves nxp to board-support/nxp-lpc
    
    ---
     .buildkite/pipeline.yml                                    | 4 ----
     LICENSE => board-support/nxp-lpc/LICENSE                   | 0
     README.adoc => board-support/nxp-lpc/README.adoc           | 0
     build.zig => board-support/nxp-lpc/build.zig               | 0
     {src => board-support/nxp-lpc/src}/boards/mbed_LPC1768.zig | 0
     {src => board-support/nxp-lpc/src}/chips/LPC176x5x.json    | 0
     {src => board-support/nxp-lpc/src}/hals/LPC176x5x.zig      | 0
     {src => board-support/nxp-lpc/src}/tools/patchelf.zig      | 0
     {test => board-support/nxp-lpc/test}/programs/minimal.zig  | 0
     9 files changed, 4 deletions(-)
     delete mode 100644 .buildkite/pipeline.yml
     rename LICENSE => board-support/nxp-lpc/LICENSE (100%)
     rename README.adoc => board-support/nxp-lpc/README.adoc (100%)
     rename build.zig => board-support/nxp-lpc/build.zig (100%)
     rename {src => board-support/nxp-lpc/src}/boards/mbed_LPC1768.zig (100%)
     rename {src => board-support/nxp-lpc/src}/chips/LPC176x5x.json (100%)
     rename {src => board-support/nxp-lpc/src}/hals/LPC176x5x.zig (100%)
     rename {src => board-support/nxp-lpc/src}/tools/patchelf.zig (100%)
     rename {test => board-support/nxp-lpc/test}/programs/minimal.zig (100%)
    
    diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml
    deleted file mode 100644
    index 7767bbb66..000000000
    --- a/.buildkite/pipeline.yml
    +++ /dev/null
    @@ -1,4 +0,0 @@
    -steps:
    -  - group: Build
    -    steps:
    -    - command: zig build
    diff --git a/LICENSE b/board-support/nxp-lpc/LICENSE
    similarity index 100%
    rename from LICENSE
    rename to board-support/nxp-lpc/LICENSE
    diff --git a/README.adoc b/board-support/nxp-lpc/README.adoc
    similarity index 100%
    rename from README.adoc
    rename to board-support/nxp-lpc/README.adoc
    diff --git a/build.zig b/board-support/nxp-lpc/build.zig
    similarity index 100%
    rename from build.zig
    rename to board-support/nxp-lpc/build.zig
    diff --git a/src/boards/mbed_LPC1768.zig b/board-support/nxp-lpc/src/boards/mbed_LPC1768.zig
    similarity index 100%
    rename from src/boards/mbed_LPC1768.zig
    rename to board-support/nxp-lpc/src/boards/mbed_LPC1768.zig
    diff --git a/src/chips/LPC176x5x.json b/board-support/nxp-lpc/src/chips/LPC176x5x.json
    similarity index 100%
    rename from src/chips/LPC176x5x.json
    rename to board-support/nxp-lpc/src/chips/LPC176x5x.json
    diff --git a/src/hals/LPC176x5x.zig b/board-support/nxp-lpc/src/hals/LPC176x5x.zig
    similarity index 100%
    rename from src/hals/LPC176x5x.zig
    rename to board-support/nxp-lpc/src/hals/LPC176x5x.zig
    diff --git a/src/tools/patchelf.zig b/board-support/nxp-lpc/src/tools/patchelf.zig
    similarity index 100%
    rename from src/tools/patchelf.zig
    rename to board-support/nxp-lpc/src/tools/patchelf.zig
    diff --git a/test/programs/minimal.zig b/board-support/nxp-lpc/test/programs/minimal.zig
    similarity index 100%
    rename from test/programs/minimal.zig
    rename to board-support/nxp-lpc/test/programs/minimal.zig
    
    From 1e490a3d67c1f22e953fe2f36f4a4147584c7420 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Thu, 4 Jan 2024 08:53:39 +0100
    Subject: [PATCH 243/286] Moves nrf5x to board-support/nordic-nrf5x
    
    ---
     README.adoc => board-support/nordic-nrf5x/README.adoc             | 0
     build.zig => board-support/nordic-nrf5x/build.zig                 | 0
     build.zig.zon => board-support/nordic-nrf5x/build.zig.zon         | 0
     .../nordic-nrf5x/src}/boards/nrf52840-dongle.zig                  | 0
     {src => board-support/nordic-nrf5x/src}/chips/nrf52.json          | 0
     {src => board-support/nordic-nrf5x/src}/chips/nrf52840.json       | 0
     {test => board-support/nordic-nrf5x/test}/nrf52840.robot          | 0
     {test => board-support/nordic-nrf5x/test}/programs/minimal.zig    | 0
     8 files changed, 0 insertions(+), 0 deletions(-)
     rename README.adoc => board-support/nordic-nrf5x/README.adoc (100%)
     rename build.zig => board-support/nordic-nrf5x/build.zig (100%)
     rename build.zig.zon => board-support/nordic-nrf5x/build.zig.zon (100%)
     rename {src => board-support/nordic-nrf5x/src}/boards/nrf52840-dongle.zig (100%)
     rename {src => board-support/nordic-nrf5x/src}/chips/nrf52.json (100%)
     rename {src => board-support/nordic-nrf5x/src}/chips/nrf52840.json (100%)
     rename {test => board-support/nordic-nrf5x/test}/nrf52840.robot (100%)
     rename {test => board-support/nordic-nrf5x/test}/programs/minimal.zig (100%)
    
    diff --git a/README.adoc b/board-support/nordic-nrf5x/README.adoc
    similarity index 100%
    rename from README.adoc
    rename to board-support/nordic-nrf5x/README.adoc
    diff --git a/build.zig b/board-support/nordic-nrf5x/build.zig
    similarity index 100%
    rename from build.zig
    rename to board-support/nordic-nrf5x/build.zig
    diff --git a/build.zig.zon b/board-support/nordic-nrf5x/build.zig.zon
    similarity index 100%
    rename from build.zig.zon
    rename to board-support/nordic-nrf5x/build.zig.zon
    diff --git a/src/boards/nrf52840-dongle.zig b/board-support/nordic-nrf5x/src/boards/nrf52840-dongle.zig
    similarity index 100%
    rename from src/boards/nrf52840-dongle.zig
    rename to board-support/nordic-nrf5x/src/boards/nrf52840-dongle.zig
    diff --git a/src/chips/nrf52.json b/board-support/nordic-nrf5x/src/chips/nrf52.json
    similarity index 100%
    rename from src/chips/nrf52.json
    rename to board-support/nordic-nrf5x/src/chips/nrf52.json
    diff --git a/src/chips/nrf52840.json b/board-support/nordic-nrf5x/src/chips/nrf52840.json
    similarity index 100%
    rename from src/chips/nrf52840.json
    rename to board-support/nordic-nrf5x/src/chips/nrf52840.json
    diff --git a/test/nrf52840.robot b/board-support/nordic-nrf5x/test/nrf52840.robot
    similarity index 100%
    rename from test/nrf52840.robot
    rename to board-support/nordic-nrf5x/test/nrf52840.robot
    diff --git a/test/programs/minimal.zig b/board-support/nordic-nrf5x/test/programs/minimal.zig
    similarity index 100%
    rename from test/programs/minimal.zig
    rename to board-support/nordic-nrf5x/test/programs/minimal.zig
    
    From 34a4df5cb982209d85675cb551c20c1b39cfcde6 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Thu, 4 Jan 2024 08:57:48 +0100
    Subject: [PATCH 244/286] Moves AVR to board-support/microchip-avr
    
    ---
     LICENSE => board-support/microchip-avr/LICENSE                   | 0
     README.adoc => board-support/microchip-avr/README.adoc           | 0
     build.zig => board-support/microchip-avr/build.zig               | 0
     build.zig.zon => board-support/microchip-avr/build.zig.zon       | 0
     {src => board-support/microchip-avr/src}/boards.zig              | 0
     {src => board-support/microchip-avr/src}/boards/arduino_nano.zig | 0
     {src => board-support/microchip-avr/src}/boards/arduino_uno.zig  | 0
     {src => board-support/microchip-avr/src}/chips.zig               | 0
     {src => board-support/microchip-avr/src}/chips/ATmega328P.json   | 0
     {src => board-support/microchip-avr/src}/hals/ATmega328P.zig     | 0
     {test => board-support/microchip-avr/test}/programs/minimal.zig  | 0
     11 files changed, 0 insertions(+), 0 deletions(-)
     rename LICENSE => board-support/microchip-avr/LICENSE (100%)
     rename README.adoc => board-support/microchip-avr/README.adoc (100%)
     rename build.zig => board-support/microchip-avr/build.zig (100%)
     rename build.zig.zon => board-support/microchip-avr/build.zig.zon (100%)
     rename {src => board-support/microchip-avr/src}/boards.zig (100%)
     rename {src => board-support/microchip-avr/src}/boards/arduino_nano.zig (100%)
     rename {src => board-support/microchip-avr/src}/boards/arduino_uno.zig (100%)
     rename {src => board-support/microchip-avr/src}/chips.zig (100%)
     rename {src => board-support/microchip-avr/src}/chips/ATmega328P.json (100%)
     rename {src => board-support/microchip-avr/src}/hals/ATmega328P.zig (100%)
     rename {test => board-support/microchip-avr/test}/programs/minimal.zig (100%)
    
    diff --git a/LICENSE b/board-support/microchip-avr/LICENSE
    similarity index 100%
    rename from LICENSE
    rename to board-support/microchip-avr/LICENSE
    diff --git a/README.adoc b/board-support/microchip-avr/README.adoc
    similarity index 100%
    rename from README.adoc
    rename to board-support/microchip-avr/README.adoc
    diff --git a/build.zig b/board-support/microchip-avr/build.zig
    similarity index 100%
    rename from build.zig
    rename to board-support/microchip-avr/build.zig
    diff --git a/build.zig.zon b/board-support/microchip-avr/build.zig.zon
    similarity index 100%
    rename from build.zig.zon
    rename to board-support/microchip-avr/build.zig.zon
    diff --git a/src/boards.zig b/board-support/microchip-avr/src/boards.zig
    similarity index 100%
    rename from src/boards.zig
    rename to board-support/microchip-avr/src/boards.zig
    diff --git a/src/boards/arduino_nano.zig b/board-support/microchip-avr/src/boards/arduino_nano.zig
    similarity index 100%
    rename from src/boards/arduino_nano.zig
    rename to board-support/microchip-avr/src/boards/arduino_nano.zig
    diff --git a/src/boards/arduino_uno.zig b/board-support/microchip-avr/src/boards/arduino_uno.zig
    similarity index 100%
    rename from src/boards/arduino_uno.zig
    rename to board-support/microchip-avr/src/boards/arduino_uno.zig
    diff --git a/src/chips.zig b/board-support/microchip-avr/src/chips.zig
    similarity index 100%
    rename from src/chips.zig
    rename to board-support/microchip-avr/src/chips.zig
    diff --git a/src/chips/ATmega328P.json b/board-support/microchip-avr/src/chips/ATmega328P.json
    similarity index 100%
    rename from src/chips/ATmega328P.json
    rename to board-support/microchip-avr/src/chips/ATmega328P.json
    diff --git a/src/hals/ATmega328P.zig b/board-support/microchip-avr/src/hals/ATmega328P.zig
    similarity index 100%
    rename from src/hals/ATmega328P.zig
    rename to board-support/microchip-avr/src/hals/ATmega328P.zig
    diff --git a/test/programs/minimal.zig b/board-support/microchip-avr/test/programs/minimal.zig
    similarity index 100%
    rename from test/programs/minimal.zig
    rename to board-support/microchip-avr/test/programs/minimal.zig
    
    From 273414c4f5845972eb0a1c8ff4556f1843cb1dc1 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Thu, 4 Jan 2024 08:58:55 +0100
    Subject: [PATCH 245/286] Moves atsam to board-support/microchip-atsam
    
    ---
     LICENSE => board-support/microchip-atsam/LICENSE               | 0
     README.md => board-support/microchip-atsam/README.md           | 0
     build.zig => board-support/microchip-atsam/build.zig           | 0
     {src => board-support/microchip-atsam}/chips/ATSAMD51J19A.atdf | 0
     4 files changed, 0 insertions(+), 0 deletions(-)
     rename LICENSE => board-support/microchip-atsam/LICENSE (100%)
     rename README.md => board-support/microchip-atsam/README.md (100%)
     rename build.zig => board-support/microchip-atsam/build.zig (100%)
     rename {src => board-support/microchip-atsam}/chips/ATSAMD51J19A.atdf (100%)
    
    diff --git a/LICENSE b/board-support/microchip-atsam/LICENSE
    similarity index 100%
    rename from LICENSE
    rename to board-support/microchip-atsam/LICENSE
    diff --git a/README.md b/board-support/microchip-atsam/README.md
    similarity index 100%
    rename from README.md
    rename to board-support/microchip-atsam/README.md
    diff --git a/build.zig b/board-support/microchip-atsam/build.zig
    similarity index 100%
    rename from build.zig
    rename to board-support/microchip-atsam/build.zig
    diff --git a/src/chips/ATSAMD51J19A.atdf b/board-support/microchip-atsam/chips/ATSAMD51J19A.atdf
    similarity index 100%
    rename from src/chips/ATSAMD51J19A.atdf
    rename to board-support/microchip-atsam/chips/ATSAMD51J19A.atdf
    
    From 4eeb5d95f8d23ef36cc26de814d7812d4a89fee1 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Thu, 4 Jan 2024 08:59:51 +0100
    Subject: [PATCH 246/286] moves gd32 to board-support/gigadevice-gd32
    
    ---
     LICENSE => board-support/gigadevice-gd32/LICENSE                  | 0
     README.adoc => board-support/gigadevice-gd32/README.adoc          | 0
     build.zig => board-support/gigadevice-gd32/build.zig              | 0
     {src => board-support/gigadevice-gd32/src}/boards/longan_nano.zig | 0
     {src => board-support/gigadevice-gd32/src}/chips/GD32VF103.json   | 0
     {src => board-support/gigadevice-gd32/src}/hals/GD32VF103.zig     | 0
     {test => board-support/gigadevice-gd32/test}/programs/minimal.zig | 0
     7 files changed, 0 insertions(+), 0 deletions(-)
     rename LICENSE => board-support/gigadevice-gd32/LICENSE (100%)
     rename README.adoc => board-support/gigadevice-gd32/README.adoc (100%)
     rename build.zig => board-support/gigadevice-gd32/build.zig (100%)
     rename {src => board-support/gigadevice-gd32/src}/boards/longan_nano.zig (100%)
     rename {src => board-support/gigadevice-gd32/src}/chips/GD32VF103.json (100%)
     rename {src => board-support/gigadevice-gd32/src}/hals/GD32VF103.zig (100%)
     rename {test => board-support/gigadevice-gd32/test}/programs/minimal.zig (100%)
    
    diff --git a/LICENSE b/board-support/gigadevice-gd32/LICENSE
    similarity index 100%
    rename from LICENSE
    rename to board-support/gigadevice-gd32/LICENSE
    diff --git a/README.adoc b/board-support/gigadevice-gd32/README.adoc
    similarity index 100%
    rename from README.adoc
    rename to board-support/gigadevice-gd32/README.adoc
    diff --git a/build.zig b/board-support/gigadevice-gd32/build.zig
    similarity index 100%
    rename from build.zig
    rename to board-support/gigadevice-gd32/build.zig
    diff --git a/src/boards/longan_nano.zig b/board-support/gigadevice-gd32/src/boards/longan_nano.zig
    similarity index 100%
    rename from src/boards/longan_nano.zig
    rename to board-support/gigadevice-gd32/src/boards/longan_nano.zig
    diff --git a/src/chips/GD32VF103.json b/board-support/gigadevice-gd32/src/chips/GD32VF103.json
    similarity index 100%
    rename from src/chips/GD32VF103.json
    rename to board-support/gigadevice-gd32/src/chips/GD32VF103.json
    diff --git a/src/hals/GD32VF103.zig b/board-support/gigadevice-gd32/src/hals/GD32VF103.zig
    similarity index 100%
    rename from src/hals/GD32VF103.zig
    rename to board-support/gigadevice-gd32/src/hals/GD32VF103.zig
    diff --git a/test/programs/minimal.zig b/board-support/gigadevice-gd32/test/programs/minimal.zig
    similarity index 100%
    rename from test/programs/minimal.zig
    rename to board-support/gigadevice-gd32/test/programs/minimal.zig
    
    From 3373a5e7991b4bb8fb54fc025a84ef8348183581 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Thu, 4 Jan 2024 09:00:58 +0100
    Subject: [PATCH 247/286] Moves ESP to board-support/espressif-esp
    
    ---
     .gitmodules                                         |   0
     LICENSE => board-support/espressif-esp/LICENSE      |   0
     .../espressif-esp/README.adoc                       |   0
     build.zig => board-support/espressif-esp/build.zig  |   0
     .../espressif-esp/build.zig.zon                     |   0
     .../espressif-esp/docs}/esp32-c3-32s-pinout.png     | Bin
     .../espressif-esp/docs}/esp32-c3-32s-pinout.xcf     | Bin
     .../espressif-esp/perform-flash.sh                  |   0
     .../espressif-esp/src}/chips/ESP32-C3.svd           |   0
     .../espressif-esp/src}/cpus/espressif-riscv.zig     |   0
     .../espressif-esp/src}/example/blinky.zig           |   0
     .../espressif-esp/src}/hals/ESP32_C3.zig            |   0
     12 files changed, 0 insertions(+), 0 deletions(-)
     delete mode 100644 .gitmodules
     rename LICENSE => board-support/espressif-esp/LICENSE (100%)
     rename README.adoc => board-support/espressif-esp/README.adoc (100%)
     rename build.zig => board-support/espressif-esp/build.zig (100%)
     rename build.zig.zon => board-support/espressif-esp/build.zig.zon (100%)
     rename {docs => board-support/espressif-esp/docs}/esp32-c3-32s-pinout.png (100%)
     rename {docs => board-support/espressif-esp/docs}/esp32-c3-32s-pinout.xcf (100%)
     rename perform-flash.sh => board-support/espressif-esp/perform-flash.sh (100%)
     rename {src => board-support/espressif-esp/src}/chips/ESP32-C3.svd (100%)
     rename {src => board-support/espressif-esp/src}/cpus/espressif-riscv.zig (100%)
     rename {src => board-support/espressif-esp/src}/example/blinky.zig (100%)
     rename {src => board-support/espressif-esp/src}/hals/ESP32_C3.zig (100%)
    
    diff --git a/.gitmodules b/.gitmodules
    deleted file mode 100644
    index e69de29bb..000000000
    diff --git a/LICENSE b/board-support/espressif-esp/LICENSE
    similarity index 100%
    rename from LICENSE
    rename to board-support/espressif-esp/LICENSE
    diff --git a/README.adoc b/board-support/espressif-esp/README.adoc
    similarity index 100%
    rename from README.adoc
    rename to board-support/espressif-esp/README.adoc
    diff --git a/build.zig b/board-support/espressif-esp/build.zig
    similarity index 100%
    rename from build.zig
    rename to board-support/espressif-esp/build.zig
    diff --git a/build.zig.zon b/board-support/espressif-esp/build.zig.zon
    similarity index 100%
    rename from build.zig.zon
    rename to board-support/espressif-esp/build.zig.zon
    diff --git a/docs/esp32-c3-32s-pinout.png b/board-support/espressif-esp/docs/esp32-c3-32s-pinout.png
    similarity index 100%
    rename from docs/esp32-c3-32s-pinout.png
    rename to board-support/espressif-esp/docs/esp32-c3-32s-pinout.png
    diff --git a/docs/esp32-c3-32s-pinout.xcf b/board-support/espressif-esp/docs/esp32-c3-32s-pinout.xcf
    similarity index 100%
    rename from docs/esp32-c3-32s-pinout.xcf
    rename to board-support/espressif-esp/docs/esp32-c3-32s-pinout.xcf
    diff --git a/perform-flash.sh b/board-support/espressif-esp/perform-flash.sh
    similarity index 100%
    rename from perform-flash.sh
    rename to board-support/espressif-esp/perform-flash.sh
    diff --git a/src/chips/ESP32-C3.svd b/board-support/espressif-esp/src/chips/ESP32-C3.svd
    similarity index 100%
    rename from src/chips/ESP32-C3.svd
    rename to board-support/espressif-esp/src/chips/ESP32-C3.svd
    diff --git a/src/cpus/espressif-riscv.zig b/board-support/espressif-esp/src/cpus/espressif-riscv.zig
    similarity index 100%
    rename from src/cpus/espressif-riscv.zig
    rename to board-support/espressif-esp/src/cpus/espressif-riscv.zig
    diff --git a/src/example/blinky.zig b/board-support/espressif-esp/src/example/blinky.zig
    similarity index 100%
    rename from src/example/blinky.zig
    rename to board-support/espressif-esp/src/example/blinky.zig
    diff --git a/src/hals/ESP32_C3.zig b/board-support/espressif-esp/src/hals/ESP32_C3.zig
    similarity index 100%
    rename from src/hals/ESP32_C3.zig
    rename to board-support/espressif-esp/src/hals/ESP32_C3.zig
    
    From d5e05d7f42e988981edc6f817edb064e398c8012 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Thu, 4 Jan 2024 09:05:26 +0100
    Subject: [PATCH 248/286] Removes superfluous .buildkit ci.
    
    ---
     .buildkite/pipeline.yml | 4 ----
     1 file changed, 4 deletions(-)
     delete mode 100644 .buildkite/pipeline.yml
    
    diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml
    deleted file mode 100644
    index 7767bbb66..000000000
    --- a/.buildkite/pipeline.yml
    +++ /dev/null
    @@ -1,4 +0,0 @@
    -steps:
    -  - group: Build
    -    steps:
    -    - command: zig build
    
    From 597034bb9797a35fc43beaae8f6c6730f2577ef2 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Thu, 4 Jan 2024 09:51:40 +0100
    Subject: [PATCH 249/286] Adds some basic package metadata.
    
    ---
     board-support/espressif-esp/microzig-package.json      | 4 ++++
     board-support/gigadevice-gd32/microzig-package.json    | 4 ++++
     board-support/microchip-atsam/microzig-package.json    | 4 ++++
     board-support/microchip-avr/microzig-package.json      | 4 ++++
     board-support/nordic-nrf5x/microzig-package.json       | 4 ++++
     board-support/nxp-lpc/microzig-package.json            | 4 ++++
     board-support/raspberrypi-rp2040/microzig-package.json | 4 ++++
     board-support/stmicro-stm32/microzig-package.json      | 4 ++++
     core/microzig-package.json                             | 4 ++++
     9 files changed, 36 insertions(+)
     create mode 100644 board-support/espressif-esp/microzig-package.json
     create mode 100644 board-support/gigadevice-gd32/microzig-package.json
     create mode 100644 board-support/microchip-atsam/microzig-package.json
     create mode 100644 board-support/microchip-avr/microzig-package.json
     create mode 100644 board-support/nordic-nrf5x/microzig-package.json
     create mode 100644 board-support/nxp-lpc/microzig-package.json
     create mode 100644 board-support/raspberrypi-rp2040/microzig-package.json
     create mode 100644 board-support/stmicro-stm32/microzig-package.json
     create mode 100644 core/microzig-package.json
    
    diff --git a/board-support/espressif-esp/microzig-package.json b/board-support/espressif-esp/microzig-package.json
    new file mode 100644
    index 000000000..e38c47137
    --- /dev/null
    +++ b/board-support/espressif-esp/microzig-package.json
    @@ -0,0 +1,4 @@
    +{
    +  "package_name": "espressif/esp",
    +  "package_type": "board-support"
    +}
    diff --git a/board-support/gigadevice-gd32/microzig-package.json b/board-support/gigadevice-gd32/microzig-package.json
    new file mode 100644
    index 000000000..7e748a67f
    --- /dev/null
    +++ b/board-support/gigadevice-gd32/microzig-package.json
    @@ -0,0 +1,4 @@
    +{
    +  "package_name": "gigadevice/gd32",
    +  "package_type": "board-support"
    +}
    diff --git a/board-support/microchip-atsam/microzig-package.json b/board-support/microchip-atsam/microzig-package.json
    new file mode 100644
    index 000000000..e0eaab181
    --- /dev/null
    +++ b/board-support/microchip-atsam/microzig-package.json
    @@ -0,0 +1,4 @@
    +{
    +  "package_name": "microchip/atsam",
    +  "package_type": "board-support"
    +}
    diff --git a/board-support/microchip-avr/microzig-package.json b/board-support/microchip-avr/microzig-package.json
    new file mode 100644
    index 000000000..3a9d0e43d
    --- /dev/null
    +++ b/board-support/microchip-avr/microzig-package.json
    @@ -0,0 +1,4 @@
    +{
    +  "package_name": "microchip/avr",
    +  "package_type": "board-support"
    +}
    diff --git a/board-support/nordic-nrf5x/microzig-package.json b/board-support/nordic-nrf5x/microzig-package.json
    new file mode 100644
    index 000000000..7be87c111
    --- /dev/null
    +++ b/board-support/nordic-nrf5x/microzig-package.json
    @@ -0,0 +1,4 @@
    +{
    +  "package_name": "nordic/nrf52",
    +  "package_type": "board-support"
    +}
    diff --git a/board-support/nxp-lpc/microzig-package.json b/board-support/nxp-lpc/microzig-package.json
    new file mode 100644
    index 000000000..6f34eff51
    --- /dev/null
    +++ b/board-support/nxp-lpc/microzig-package.json
    @@ -0,0 +1,4 @@
    +{
    +  "package_name": "nxp/lpc",
    +  "package_type": "board-support"
    +}
    diff --git a/board-support/raspberrypi-rp2040/microzig-package.json b/board-support/raspberrypi-rp2040/microzig-package.json
    new file mode 100644
    index 000000000..4a0a2753c
    --- /dev/null
    +++ b/board-support/raspberrypi-rp2040/microzig-package.json
    @@ -0,0 +1,4 @@
    +{
    +  "package_name": "raspberrypi/rp2040",
    +  "package_type": "board-support"
    +}
    diff --git a/board-support/stmicro-stm32/microzig-package.json b/board-support/stmicro-stm32/microzig-package.json
    new file mode 100644
    index 000000000..08eb7153e
    --- /dev/null
    +++ b/board-support/stmicro-stm32/microzig-package.json
    @@ -0,0 +1,4 @@
    +{
    +  "package_name": "stmicro/stm32",
    +  "package_type": "board-support"
    +}
    diff --git a/core/microzig-package.json b/core/microzig-package.json
    new file mode 100644
    index 000000000..ed42e68ac
    --- /dev/null
    +++ b/core/microzig-package.json
    @@ -0,0 +1,4 @@
    +{
    +  "package_name": "microzig",
    +  "package_type": "core"
    +}
    
    From 0c4e82e69739885f864025b8038f3c50faff12f7 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= 
    Date: Thu, 4 Jan 2024 11:55:03 +0100
    Subject: [PATCH 250/286] Adds nix flake, adds tooling for creating a
     deployment of microzig, vendors some code from ezpkg
    
    ---
     .gitignore              |   1 +
     README.md               |  19 ++
     build.zig               |  20 ++
     flake.lock              | 146 ++++++++++++
     flake.nix               |  62 ++++++
     tools/archive-info.zig  | 265 ++++++++++++++++++++++
     tools/bundle.sh         | 157 +++++++++++++
     tools/create-package.sh |  45 ++++
     tools/demo-server.py    |  85 +++++++
     tools/lib/tar.zig       | 483 ++++++++++++++++++++++++++++++++++++++++
     10 files changed, 1283 insertions(+)
     create mode 100644 README.md
     create mode 100644 build.zig
     create mode 100644 flake.lock
     create mode 100644 flake.nix
     create mode 100644 tools/archive-info.zig
     create mode 100755 tools/bundle.sh
     create mode 100755 tools/create-package.sh
     create mode 100755 tools/demo-server.py
     create mode 100644 tools/lib/tar.zig
    
    diff --git a/.gitignore b/.gitignore
    index 919a2318d..aa8f1d641 100644
    --- a/.gitignore
    +++ b/.gitignore
    @@ -1,5 +1,6 @@
     zig-out/
     zig-cache/
    +microzig-deploy/
     .DS_Store
     .gdbinit
     .lldbinit
    diff --git a/README.md b/README.md
    new file mode 100644
    index 000000000..289bc4454
    --- /dev/null
    +++ b/README.md
    @@ -0,0 +1,19 @@
    +# MicroZig
    +
    +## Overview
    +
    +- `core/` contains the shared components of MicroZig.
    +- `board-support/` contains all official board support package.
    +- `examples/` contains examples that can be used with the board support packages.
    +- `tools/` contains tooling to work *on* MicroZig.
    +
    +## Versioning Scheme
    +
    +MicroZig versions are tightly locked with Zig versions.
    +
    +The general scheme is `${zig_version}-${commit}-${count}`, so the MicroZig versions will look really similar to
    +Zigs versions, but with our own commit abbreviations and counters.
    +
    +As MicroZig sticks to tagged Zig releases, `${zig_version}` will show to which Zig version the MicroZig build is compatible.
    +
    +Consider the version `0.11.0-abcdef-123` means that this MicroZig version has a commit starting with `abcdef`, which was the 123rd commit of the version that is compatible with Zig 0.11.0.
    diff --git a/build.zig b/build.zig
    new file mode 100644
    index 000000000..21246fe29
    --- /dev/null
    +++ b/build.zig
    @@ -0,0 +1,20 @@
    +const std = @import("std");
    +
    +pub fn build(b: *std.Build) void {
    +    buildTools(b);
    +}
    +
    +fn buildTools(b: *std.Build) void {
    +    const tools_step = b.step("tools", "Only build the development tools");
    +    b.getInstallStep().dependOn(tools_step);
    +
    +    const archive_info = b.addExecutable(.{
    +        .name = "archive-info",
    +        .optimize = .ReleaseSafe,
    +        .root_source_file = .{ .path = "tools/archive-info.zig" },
    +    });
    +
    +    tools_step.dependOn(&b.addInstallArtifact(archive_info, .{
    +        .dest_dir = .{ .override = .{ .custom = "tools" } },
    +    }).step);
    +}
    diff --git a/flake.lock b/flake.lock
    new file mode 100644
    index 000000000..d614e0c7e
    --- /dev/null
    +++ b/flake.lock
    @@ -0,0 +1,146 @@
    +{
    +  "nodes": {
    +    "flake-compat": {
    +      "flake": false,
    +      "locked": {
    +        "lastModified": 1696426674,
    +        "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
    +        "owner": "edolstra",
    +        "repo": "flake-compat",
    +        "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
    +        "type": "github"
    +      },
    +      "original": {
    +        "owner": "edolstra",
    +        "repo": "flake-compat",
    +        "type": "github"
    +      }
    +    },
    +    "flake-compat_2": {
    +      "flake": false,
    +      "locked": {
    +        "lastModified": 1673956053,
    +        "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
    +        "owner": "edolstra",
    +        "repo": "flake-compat",
    +        "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
    +        "type": "github"
    +      },
    +      "original": {
    +        "owner": "edolstra",
    +        "repo": "flake-compat",
    +        "type": "github"
    +      }
    +    },
    +    "flake-utils": {
    +      "inputs": {
    +        "systems": "systems"
    +      },
    +      "locked": {
    +        "lastModified": 1701680307,
    +        "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
    +        "owner": "numtide",
    +        "repo": "flake-utils",
    +        "rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
    +        "type": "github"
    +      },
    +      "original": {
    +        "owner": "numtide",
    +        "repo": "flake-utils",
    +        "type": "github"
    +      }
    +    },
    +    "flake-utils_2": {
    +      "locked": {
    +        "lastModified": 1659877975,
    +        "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
    +        "owner": "numtide",
    +        "repo": "flake-utils",
    +        "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0",
    +        "type": "github"
    +      },
    +      "original": {
    +        "owner": "numtide",
    +        "repo": "flake-utils",
    +        "type": "github"
    +      }
    +    },
    +    "nixpkgs": {
    +      "locked": {
    +        "lastModified": 1704290814,
    +        "narHash": "sha256-LWvKHp7kGxk/GEtlrGYV68qIvPHkU9iToomNFGagixU=",
    +        "owner": "nixos",
    +        "repo": "nixpkgs",
    +        "rev": "70bdadeb94ffc8806c0570eb5c2695ad29f0e421",
    +        "type": "github"
    +      },
    +      "original": {
    +        "owner": "nixos",
    +        "ref": "release-23.05",
    +        "repo": "nixpkgs",
    +        "type": "github"
    +      }
    +    },
    +    "nixpkgs_2": {
    +      "locked": {
    +        "lastModified": 1702350026,
    +        "narHash": "sha256-A+GNZFZdfl4JdDphYKBJ5Ef1HOiFsP18vQe9mqjmUis=",
    +        "owner": "NixOS",
    +        "repo": "nixpkgs",
    +        "rev": "9463103069725474698139ab10f17a9d125da859",
    +        "type": "github"
    +      },
    +      "original": {
    +        "owner": "NixOS",
    +        "ref": "nixos-23.05",
    +        "repo": "nixpkgs",
    +        "type": "github"
    +      }
    +    },
    +    "root": {
    +      "inputs": {
    +        "flake-compat": "flake-compat",
    +        "flake-utils": "flake-utils",
    +        "nixpkgs": "nixpkgs",
    +        "zig": "zig"
    +      }
    +    },
    +    "systems": {
    +      "locked": {
    +        "lastModified": 1681028828,
    +        "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
    +        "owner": "nix-systems",
    +        "repo": "default",
    +        "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
    +        "type": "github"
    +      },
    +      "original": {
    +        "owner": "nix-systems",
    +        "repo": "default",
    +        "type": "github"
    +      }
    +    },
    +    "zig": {
    +      "inputs": {
    +        "flake-compat": "flake-compat_2",
    +        "flake-utils": "flake-utils_2",
    +        "nixpkgs": "nixpkgs_2"
    +      },
    +      "locked": {
    +        "lastModified": 1704283725,
    +        "narHash": "sha256-sRWv8au/59BZpWpqqC8PaGDC9bUNhRIMzanF1zPnXNQ=",
    +        "owner": "mitchellh",
    +        "repo": "zig-overlay",
    +        "rev": "f06e268e24a71922ff8b20c94cff1d2afcbd4ab5",
    +        "type": "github"
    +      },
    +      "original": {
    +        "owner": "mitchellh",
    +        "repo": "zig-overlay",
    +        "type": "github"
    +      }
    +    }
    +  },
    +  "root": "root",
    +  "version": 7
    +}
    diff --git a/flake.nix b/flake.nix
    new file mode 100644
    index 000000000..c778a9697
    --- /dev/null
    +++ b/flake.nix
    @@ -0,0 +1,62 @@
    +{
    +  description = "microzig development environment";
    +
    +  inputs = {
    +    nixpkgs.url = "github:nixos/nixpkgs/release-23.05";
    +    flake-utils.url = "github:numtide/flake-utils";
    +
    +    # required for latest zig
    +    zig.url = "github:mitchellh/zig-overlay";
    +
    +    # Used for shell.nix
    +    flake-compat = {
    +      url = github:edolstra/flake-compat;
    +      flake = false;
    +    };
    +  };
    +
    +  outputs = {
    +    self,
    +    nixpkgs,
    +    flake-utils,
    +    ...
    +  } @ inputs: let
    +    overlays = [
    +      # Other overlays
    +      (final: prev: {
    +        zigpkgs = inputs.zig.packages.${prev.system};
    +      })
    +    ];
    +
    +    # Our supported systems are the same supported systems as the Zig binaries
    +    systems = builtins.attrNames inputs.zig.packages;
    +  in
    +    flake-utils.lib.eachSystem systems (
    +      system: let
    +        pkgs = import nixpkgs {inherit overlays system;};
    +      in rec {
    +        devShells.default = pkgs.mkShell {
    +          nativeBuildInputs = [
    +            pkgs.zigpkgs."0.11.0"
    +          ];
    +
    +          buildInputs = [
    +            # we need a version of bash capable of being interactive
    +            # as opposed to a bash just used for building this flake
    +            # in non-interactive mode
    +            pkgs.bashInteractive
    +            pkgs.zlib
    +          ];
    +
    +          shellHook = ''
    +            # once we set SHELL to point to the interactive bash, neovim will
    +            # launch the correct $SHELL in its :terminal
    +            export SHELL=${pkgs.bashInteractive}/bin/bash
    +          '';
    +        };
    +
    +        # For compatibility with older versions of the `nix` binary
    +        devShell = self.devShells.${system}.default;
    +      }
    +    );
    +}
    diff --git a/tools/archive-info.zig b/tools/archive-info.zig
    new file mode 100644
    index 000000000..d563c0c05
    --- /dev/null
    +++ b/tools/archive-info.zig
    @@ -0,0 +1,265 @@
    +//!
    +//! Computes some meta information for packages and prints them as JSON.
    +//! Usage: archive-info 
    +//!
    +//! Is used in `/tools/bundle.sh` to extend the `microzig-package.json` file.
    +//!
    +
    +const std = @import("std");
    +const Allocator = std.mem.Allocator;
    +const assert = std.debug.assert;
    +const Hash = std.crypto.hash.sha2.Sha256;
    +
    +const builtin = @import("builtin");
    +const tar = @import("lib/tar.zig");
    +
    +const JsonInfo = struct {
    +    hash: []const u8,
    +    files: []const []const u8,
    +};
    +
    +pub fn main() !void {
    +    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
    +    defer _ = gpa.deinit();
    +    const allocator = gpa.allocator();
    +
    +    const argv = try std.process.argsAlloc(allocator);
    +    defer std.process.argsFree(allocator, argv);
    +
    +    if (argv.len != 2) {
    +        @panic("archive-info ");
    +    }
    +
    +    var file = try std.fs.cwd().openFile(argv[1], .{});
    +    defer file.close();
    +
    +    var buffered = std.io.bufferedReaderSize(4096, file.reader());
    +
    +    var decompress = try std.compress.gzip.decompress(allocator, buffered.reader());
    +    defer decompress.deinit();
    +
    +    var arc = try Archive.read_from_tar(allocator, decompress.reader(), .{
    +        .strip_components = 0,
    +    });
    +    defer arc.deinit(allocator);
    +
    +    {
    +        var paths = std.ArrayList([]const u8).init(allocator);
    +        defer paths.deinit();
    +
    +        try paths.appendSlice(arc.files.keys());
    +        std.mem.sort([]const u8, paths.items, {}, Archive.path_less_than);
    +
    +        const calculated_hash = try arc.hash(allocator, .ignore_executable_bit);
    +        var hash_buf: [4 + 2 * calculated_hash.len]u8 = undefined;
    +        const hash_str = try std.fmt.bufPrint(&hash_buf, "1220{}", .{std.fmt.fmtSliceHexLower(&calculated_hash)});
    +
    +        var json_info = JsonInfo{
    +            .hash = hash_str,
    +            .files = paths.items,
    +        };
    +
    +        try std.json.stringify(json_info, .{}, std.io.getStdOut().writer());
    +    }
    +}
    +
    +const Archive = struct {
    +    files: std.StringArrayHashMapUnmanaged(File) = .{},
    +
    +    pub const File = struct {
    +        mode: std.fs.File.Mode,
    +        text: []const u8,
    +    };
    +
    +    pub fn deinit(archive: *Archive, allocator: Allocator) void {
    +        for (archive.files.keys(), archive.files.values()) |path, file| {
    +            allocator.free(path);
    +            allocator.free(file.text);
    +        }
    +
    +        archive.files.deinit(allocator);
    +    }
    +
    +    fn padding_from_size(size: usize) usize {
    +        const mod = (512 + size) % 512;
    +        return if (mod > 0) 512 - mod else 0;
    +    }
    +
    +    pub fn entry_should_be_skipped(path: []const u8) !bool {
    +        var it = try std.fs.path.componentIterator(path);
    +        const first = it.next().?;
    +        return std.mem.eql(u8, first.name, ".git") or
    +            std.mem.eql(u8, first.name, "zig-out") or
    +            std.mem.eql(u8, first.name, "zig-cache");
    +    }
    +
    +    fn stripComponents(path: []const u8, count: u32) ![]const u8 {
    +        var i: usize = 0;
    +        var c = count;
    +        while (c > 0) : (c -= 1) {
    +            if (std.mem.indexOfScalarPos(u8, path, i, '/')) |pos| {
    +                i = pos + 1;
    +            } else {
    +                return error.TarComponentsOutsideStrippedPrefix;
    +            }
    +        }
    +        return path[i..];
    +    }
    +
    +    const ReadFromTarOptions = struct {
    +        strip_components: u32,
    +    };
    +
    +    pub fn read_from_tar(
    +        allocator: Allocator,
    +        reader: anytype,
    +        options: ReadFromTarOptions,
    +    ) !Archive {
    +        var archive = Archive{};
    +        errdefer archive.deinit(allocator);
    +
    +        var file_name_buffer: [255]u8 = undefined;
    +        var buffer: [512 * 8]u8 = undefined;
    +        var start: usize = 0;
    +        var end: usize = 0;
    +        header: while (true) {
    +            if (buffer.len - start < 1024) {
    +                const dest_end = end - start;
    +                @memcpy(buffer[0..dest_end], buffer[start..end]);
    +                end = dest_end;
    +                start = 0;
    +            }
    +            const ask_header = @min(buffer.len - end, 1024 -| (end - start));
    +            end += try reader.readAtLeast(buffer[end..], ask_header);
    +            switch (end - start) {
    +                0 => return archive,
    +                1...511 => return error.UnexpectedEndOfStream,
    +                else => {},
    +            }
    +            const header: std.tar.Header = .{ .bytes = buffer[start..][0..512] };
    +            start += 512;
    +            const file_size = try header.fileSize();
    +            const rounded_file_size = std.mem.alignForward(u64, file_size, 512);
    +            const pad_len = @as(usize, @intCast(rounded_file_size - file_size));
    +            const unstripped_file_name = try header.fullFileName(&file_name_buffer);
    +            switch (header.fileType()) {
    +                .directory => {},
    +                .normal => {
    +                    if (file_size == 0 and unstripped_file_name.len == 0) return archive;
    +                    const file_name = try stripComponents(unstripped_file_name, options.strip_components);
    +
    +                    const file_name_copy = try allocator.dupe(u8, file_name);
    +                    errdefer allocator.free(file_name_copy);
    +
    +                    var file = std.ArrayList(u8).init(allocator);
    +                    defer file.deinit();
    +
    +                    var file_off: usize = 0;
    +                    while (true) {
    +                        if (buffer.len - start < 1024) {
    +                            const dest_end = end - start;
    +                            @memcpy(buffer[0..dest_end], buffer[start..end]);
    +                            end = dest_end;
    +                            start = 0;
    +                        }
    +                        // Ask for the rounded up file size + 512 for the next header.
    +                        // TODO: https://github.com/ziglang/zig/issues/14039
    +                        const ask = @as(usize, @intCast(@min(
    +                            buffer.len - end,
    +                            rounded_file_size + 512 - file_off -| (end - start),
    +                        )));
    +                        end += try reader.readAtLeast(buffer[end..], ask);
    +                        if (end - start < ask) return error.UnexpectedEndOfStream;
    +                        // TODO: https://github.com/ziglang/zig/issues/14039
    +                        const slice = buffer[start..@as(usize, @intCast(@min(file_size - file_off + start, end)))];
    +                        try file.writer().writeAll(slice);
    +                        file_off += slice.len;
    +                        start += slice.len;
    +                        if (file_off >= file_size) {
    +                            start += pad_len;
    +                            // Guaranteed since we use a buffer divisible by 512.
    +                            assert(start <= end);
    +                            const text = try file.toOwnedSlice();
    +                            errdefer allocator.free(text);
    +
    +                            const local_header: *const tar.Header = @ptrCast(header.bytes);
    +                            _ = local_header;
    +                            try archive.files.put(allocator, file_name_copy, .{
    +                                .text = text,
    +                                .mode = 0o644,
    +                                //.mode = try local_header.get_mode(),
    +                            });
    +                            continue :header;
    +                        }
    +                    }
    +                },
    +                .global_extended_header, .extended_header => {
    +                    if (start + rounded_file_size > end) return error.TarHeadersTooBig;
    +                    start = @as(usize, @intCast(start + rounded_file_size));
    +                },
    +                .hard_link => return error.TarUnsupportedFileType,
    +                .symbolic_link => return error.TarUnsupportedFileType,
    +                else => return error.TarUnsupportedFileType,
    +            }
    +        }
    +
    +        return archive;
    +    }
    +
    +    fn path_less_than(_: void, lhs: []const u8, rhs: []const u8) bool {
    +        return std.mem.lessThan(u8, lhs, rhs);
    +    }
    +
    +    pub const WhatToDoWithExecutableBit = enum {
    +        ignore_executable_bit,
    +        include_executable_bit,
    +    };
    +
    +    fn is_executable(mode: std.fs.File.Mode, executable_bit: WhatToDoWithExecutableBit) bool {
    +        switch (executable_bit) {
    +            .ignore_executable_bit => return false,
    +            .include_executable_bit => {},
    +        }
    +
    +        if (builtin.os.tag == .windows) {
    +            // TODO check the ACL on Windows.
    +            // Until this is implemented, this could be a false negative on
    +            // Windows, which is why we do not yet set executable_bit_only above
    +            // when unpacking the tarball.
    +            return false;
    +        } else {
    +            return (mode & std.os.S.IXUSR) != 0;
    +        }
    +    }
    +
    +    pub fn hash(
    +        archive: Archive,
    +        allocator: Allocator,
    +        executable_bit: WhatToDoWithExecutableBit,
    +    ) ![Hash.digest_length]u8 {
    +        var paths = std.ArrayList([]const u8).init(allocator);
    +        defer paths.deinit();
    +
    +        var hashes = std.ArrayList([Hash.digest_length]u8).init(allocator);
    +        defer hashes.deinit();
    +
    +        try paths.appendSlice(archive.files.keys());
    +        try hashes.appendNTimes(undefined, paths.items.len);
    +        std.mem.sort([]const u8, paths.items, {}, path_less_than);
    +
    +        for (paths.items, hashes.items) |path, *result| {
    +            const file = archive.files.get(path).?;
    +            var hasher = Hash.init(.{});
    +            hasher.update(path);
    +            hasher.update(&.{ 0, @intFromBool(is_executable(file.mode, executable_bit)) });
    +            hasher.update(file.text);
    +            hasher.final(result);
    +        }
    +
    +        var hasher = Hash.init(.{});
    +        for (hashes.items) |file_hash|
    +            hasher.update(&file_hash);
    +
    +        return hasher.finalResult();
    +    }
    +};
    diff --git a/tools/bundle.sh b/tools/bundle.sh
    new file mode 100755
    index 000000000..22b94eef9
    --- /dev/null
    +++ b/tools/bundle.sh
    @@ -0,0 +1,157 @@
    +#!/bin/sh
    +
    +#
    +# Prepares a full deployment of MicroZig.
    +# Creates all packages into /microzig-deploy with the final folder structure.
    +#
    +
    +set -euo pipefail
    +
    +all_files_dir=".data"
    +
    +# test for all required tools:
    +which zig date find jq mkdir dirname realpath > /dev/null
    +
    +[ "$(zig version)" == "0.11.0" ]
    +
    +repo_root="$(dirname "$(dirname "$(realpath "$0")")")"
    +[ -d "${repo_root}" ]
    +
    +echo "preparing environment..."
    +
    +alias create_package="${repo_root}/tools/create-package.sh"
    +
    +# Some generic meta information:
    +
    +unix_timestamp="$(date '+%s')"
    +iso_timestamp="$(date --iso-8601=seconds)"
    +
    +# Determine correct version:
    +
    +git_description="$(git describe --match "*.*.*" --tags --abbrev=9)"
    +version=""
    +
    +# render-version     
    +function render_version()
    +{
    +    [ "$#" -eq 5 ] 
    +    echo "$1.$2.$3-$4-$5"
    +}
    +
    +case "${git_description}" in 
    +    *.*.*-*-*)
    +        version="$(render_version $(echo "${git_description}" | sed -E 's/^([0-9]+)\.([0-9]+)\.([0-9]+)\-([0-9]+)\-([a-z0-9]+)$/\1 \2 \3 \4 \5/'))"
    +        ;;
    +
    +    *.*.*)
    +        # a "on point" tagged version still has a hash as well as the counter 0!
    +        version="$(render_version $(echo "${git_description}" | sed -E 's/^([0-9]+)\.([0-9]+)\.([0-9]+)$/\1 \2 \3/') 0 $(git rev-parse --short=9 HEAD))"
    +        ;;
    +    
    +    *)
    +        echo "Bad result '${git_description}' from git describe." >&2
    +        exit 1
    +        ;;
    +esac
    +
    +if [ -z "${version}" ]; then
    +    echo "Could not determine a version. Please verify repository state!" >&2
    +    exit 1
    +fi
    +
    +deploy_target="${repo_root}/microzig-deploy"
    +
    +[ -d "${deploy_target}" ] && rm -r "${deploy_target}"
    +mkdir -p "${deploy_target}"
    +
    +cd "${repo_root}"
    +
    +# ensure we have our tools available:
    +zig build tools
    +
    +[ -x "${repo_root}/zig-out/tools/archive-info" ]
    +alias archive_info="${repo_root}/zig-out/tools/archive-info"
    +
    +for dir in $(find -type f -name microzig-package.json -exec dirname '{}' ';'); do
    +    dir="$(realpath "${dir}")"
    +    meta_path="$(realpath "${dir}/microzig-package.json")"
    +
    +    pkg_name="$(jq -r .package_name < "${meta_path}")"
    +    pkg_type="$(jq -r .package_type < "${meta_path}")"
    +
    +    (
    +        cd "${dir}"
    +
    +        echo "bundling ${dir}..."
    +
    +        out_dir=""
    +        out_basename=""
    +
    +        case "${pkg_type}" in
    +            core)
    +                out_dir="${deploy_target}"
    +                out_basename="${pkg_name}"
    +                ;;
    +            
    +            board-support)
    +                out_dir="${deploy_target}/board-support/$(dirname "${pkg_name}")"
    +                out_basename="$(basename "${pkg_name}")"
    +                ;;
    +
    +            *)
    +                echo "Unsupported package type: '${pkg_type}'!" >&2
    +                exit 1
    +                ;;
    +        esac
    +
    +        [ ! -z "${out_dir}" ] && [ ! -z "${out_basename}" ]
    +
    +        out_fullname="${out_basename}-${version}.tar.gz"
    +        out_fullmeta="${out_basename}-${version}.json"
    +
    +        out_name="${out_basename}.tar.gz"
    +        out_meta="${out_basename}.json"
    +        
    +        out_path="${out_dir}/${all_files_dir}/${out_fullname}"
    +
    +        mkdir -p "${out_dir}/${all_files_dir}"
    +
    +        # first, compile package
    +        create_package "${dir}" "${out_path}"
    +
    +        # get some required metadata
    +        file_hash=($(sha256sum "${out_path}" | cut -f 1))
    +        file_size="$(stat --format="%s" "${out_path}")"
    +
    +        pkg_info="$(archive_info ${out_path})"
    +
    +        jq \
    +            --arg vers "${version}" \
    +            --arg ts_unix "${unix_timestamp}" \
    +            --arg ts_iso "${iso_timestamp}" \
    +            --arg fhash "${file_hash}" \
    +            --arg fsize "${file_size}" \
    +            --argjson pkg "${pkg_info}" \
    +                '. + {
    +                    version: $vers,
    +                    created: {
    +                        unix: $ts_unix,
    +                        iso: $ts_iso,
    +                    },
    +                    archive: {
    +                        size: $fsize,
    +                        sha256sum: $fhash,
    +                    },
    +                    package: $pkg
    +                }' \
    +            "${meta_path}" \
    +            > "${out_dir}/${all_files_dir}/${out_fullmeta}" \
    +
    +        (
    +            cd "${out_dir}"
    +            ln -s "${all_files_dir}/${out_fullname}" "${out_name}"
    +            ln -s "${all_files_dir}/${out_fullmeta}" "${out_meta}"
    +        )
    +
    +    )
    +done
    diff --git a/tools/create-package.sh b/tools/create-package.sh
    new file mode 100755
    index 000000000..e22a67c8f
    --- /dev/null
    +++ b/tools/create-package.sh
    @@ -0,0 +1,45 @@
    +#!/bin/sh
    +
    +set -euo pipefail
    +
    +# test for all required tools:
    +which tar gzip jq basename dirname realpath > /dev/null
    +
    +if [ "$#" -ne 2 ]; then 
    +    echo "usage: $(basename "$0")  " >&2
    +    exit 1
    +fi
    +
    +input_folder="$(realpath "$1")"
    +output_file="$(realpath "$2")"
    +
    +if [ ! -d "${input_folder}" ]; then 
    +    echo "${input_folder} does not exist or is not a directory!" >&2
    +    exit 1
    +fi
    +
    +
    +if [ ! -f "${input_folder}/microzig-package.json" ]; then 
    +    echo "The input folder does not contain a microzig-package.json!" >&2
    +    exit 1
    +fi 
    +
    +if [ -e "${output_file}" ]; then 
    +    echo "${output_file} already exists, please delete first!" >&2
    +    exit 1
    +fi 
    +
    +if [ ! -d "$(dirname "${output_file}")" ]; then 
    +    echo "${output_file} does not point to a path where a file can be created!" >&2
    +    exit 1
    +fi 
    +
    +(
    +    cd "${input_folder}"
    +    # explanation on ls-files: 
    +    # https://stackoverflow.com/a/53083343
    +    tar -caf "${output_file}" $(git ls-files -- . ':!:microzig-package.json')
    +)
    +
    +# echo "included files:"
    +# tar -tf "${output_file}"
    diff --git a/tools/demo-server.py b/tools/demo-server.py
    new file mode 100755
    index 000000000..302edf51a
    --- /dev/null
    +++ b/tools/demo-server.py
    @@ -0,0 +1,85 @@
    +#!/usr/bin/env python3
    +
    +
    +from pathlib import Path
    +from http.server import HTTPServer,SimpleHTTPRequestHandler
    +from http import HTTPStatus
    +import sys, os, io, urllib.parse, html
    +
    +SELF_DIR = Path(__file__).parent
    +assert SELF_DIR.is_dir()
    +
    +ROOT_DIR = SELF_DIR.parent
    +assert SELF_DIR.is_dir()
    +
    +DEPLOYMENT_DIR = ROOT_DIR / "microzig-deploy"
    +if not DEPLOYMENT_DIR.is_dir():
    +    print(f"{DEPLOYMENT_DIR} isn't a directory. Please create a directory first with ./tools/bundle.sh!")
    +    exit(1)
    +
    +class Handler(SimpleHTTPRequestHandler):
    +    def __init__(self, *args, **kwargs):
    +        super().__init__(*args, directory=str(DEPLOYMENT_DIR), **kwargs)
    +
    +    def list_directory(self, path):
    +        """Helper to produce a directory listing (absent index.html).
    +
    +        Return value is either a file object, or None (indicating an
    +        error).  In either case, the headers are sent, making the
    +        interface the same as for send_head().
    +
    +        """
    +        try:
    +            list = os.listdir(path)
    +        except OSError:
    +            self.send_error(
    +                HTTPStatus.NOT_FOUND,
    +                "No permission to list directory")
    +            return None
    +        list.sort(key=lambda a: a.lower())
    +        r = []
    +        try:
    +            displaypath = urllib.parse.unquote(self.path,
    +                                               errors='surrogatepass')
    +        except UnicodeDecodeError:
    +            displaypath = urllib.parse.unquote(self.path)
    +        displaypath = html.escape(displaypath, quote=False)
    +        enc = sys.getfilesystemencoding()
    +        title = 'Directory listing for %s' % displaypath
    +        r.append('')
    +        r.append('\n')
    +        r.append('' % enc)
    +        r.append('%s\n' % title)
    +        r.append('\n

    %s

    ' % title) + r.append('
    \n
    \n
    \n\n\n') + encoded = '\n'.join(r).encode(enc, 'surrogateescape') + f = io.BytesIO() + f.write(encoded) + f.seek(0) + self.send_response(HTTPStatus.OK) + self.send_header("Content-type", "text/html; charset=%s" % enc) + self.send_header("Content-Length", str(len(encoded))) + self.end_headers() + return f + +if __name__ == "__main__": + httpd = HTTPServer(('', 8080), Handler) + httpd.serve_forever() + diff --git a/tools/lib/tar.zig b/tools/lib/tar.zig new file mode 100644 index 000000000..43c1b8d08 --- /dev/null +++ b/tools/lib/tar.zig @@ -0,0 +1,483 @@ +const std = @import("std"); +const builtin = @import("builtin"); + +const testing = std.testing; +const Allocator = std.mem.Allocator; + +// ustar tar implementation +pub const Header = extern struct { + name: [100]u8, + mode: [7:0]u8, + uid: [7:0]u8, + gid: [7:0]u8, + size: [11:0]u8, + mtime: [11:0]u8, + checksum: [7:0]u8, + typeflag: FileType, + linkname: [100]u8, + magic: [5:0]u8, + version: [2]u8, + uname: [31:0]u8, + gname: [31:0]u8, + devmajor: [7:0]u8, + devminor: [7:0]u8, + prefix: [155]u8, + pad: [12]u8, + + comptime { + std.debug.assert(@sizeOf(Header) == 512); + } + + const Self = @This(); + + const FileType = enum(u8) { + regular = '0', + hard_link = '1', + symbolic_link = '2', + character = '3', + block = '4', + directory = '5', + fifo = '6', + reserved = '7', + pax_global = 'g', + extended = 'x', + _, + }; + + const Options = struct { + typeflag: FileType, + path: []const u8, + size: u64, + mode: std.fs.File.Mode, + }; + + pub fn to_bytes(header: *const Header) *const [512]u8 { + return @ptrCast(header); + } + + pub fn init(opts: Options) !Self { + var ret = std.mem.zeroes(Self); + ret.magic = [_:0]u8{ 'u', 's', 't', 'a', 'r' }; + ret.version = [_:0]u8{ '0', '0' }; + ret.typeflag = opts.typeflag; + + try ret.setPath(opts.path); + try ret.setSize(opts.size); + try ret.setMtime(0); + try ret.setMode(opts.typeflag, opts.mode); + try ret.setUid(0); + try ret.setGid(0); + + std.mem.copy(u8, &ret.uname, "root"); + std.mem.copy(u8, &ret.gname, "root"); + + try ret.updateChecksum(); + return ret; + } + + pub fn setPath(self: *Self, path: []const u8) !void { + if (path.len > 100) { + var i: usize = 100; + while (i > 0) : (i -= 1) { + if (path[i] == '/' and i < 100) + break; + } + + _ = try std.fmt.bufPrint(&self.prefix, "{s}", .{path[0..i]}); + _ = try std.fmt.bufPrint(&self.name, "{s}", .{path[i + 1 ..]}); + } else { + _ = try std.fmt.bufPrint(&self.name, "{s}", .{path}); + } + } + + pub fn setSize(self: *Self, size: u64) !void { + _ = try std.fmt.bufPrint(&self.size, "{o:0>11}", .{size}); + } + + pub fn get_size(header: Header) !u64 { + return std.fmt.parseUnsigned(u64, &header.size, 8); + } + + pub fn setMtime(self: *Self, mtime: u32) !void { + _ = try std.fmt.bufPrint(&self.mtime, "{o:0>11}", .{mtime}); + } + + pub fn setMode(self: *Self, filetype: FileType, perm: std.fs.File.Mode) !void { + switch (filetype) { + .regular => _ = try std.fmt.bufPrint(&self.mode, "0{o:0>6}", .{perm}), + .directory => _ = try std.fmt.bufPrint(&self.mode, "0{o:0>6}", .{perm}), + else => return error.Unsupported, + } + } + + pub fn get_mode(header: Header) !std.fs.File.Mode { + std.log.info("mode str: {s}", .{&header.mode}); + return std.fmt.parseUnsigned(std.fs.File.Mode, &header.mode, 8); + } + + fn setUid(self: *Self, uid: u32) !void { + _ = try std.fmt.bufPrint(&self.uid, "{o:0>7}", .{uid}); + } + + fn setGid(self: *Self, gid: u32) !void { + _ = try std.fmt.bufPrint(&self.gid, "{o:0>7}", .{gid}); + } + + pub fn updateChecksum(self: *Self) !void { + const offset = @offsetOf(Self, "checksum"); + var checksum: usize = 0; + for (std.mem.asBytes(self), 0..) |val, i| { + checksum += if (i >= offset and i < offset + @sizeOf(@TypeOf(self.checksum))) + ' ' + else + val; + } + + _ = try std.fmt.bufPrint(&self.checksum, "{o:0>7}", .{checksum}); + } + + pub fn fromStat(stat: std.fs.File.Stat, path: []const u8) !Header { + if (std.mem.indexOf(u8, path, "\\") != null) return error.NeedPosixPath; + if (std.fs.path.isAbsolute(path)) return error.NeedRelPath; + + var ret = Self.init(); + ret.typeflag = switch (stat.kind) { + .File => .regular, + .Directory => .directory, + else => return error.UnsupportedType, + }; + + try ret.setPath(path); + try ret.setSize(stat.size); + try ret.setMtime(@as(u32, @truncate(@as(u128, @bitCast(@divTrunc(stat.mtime, std.time.ns_per_s)))))); + try ret.setMode(ret.typeflag, @as(u9, @truncate(stat.mode))); + + try ret.setUid(0); + try ret.setGid(0); + + std.mem.copy(u8, &ret.uname, "root"); + std.mem.copy(u8, &ret.gname, "root"); + + try ret.updateChecksum(); + return ret; + } + + pub fn isBlank(self: *const Header) bool { + const block = std.mem.asBytes(self); + return for (block) |elem| { + if (elem != 0) break false; + } else true; + } +}; + +test "Header size" { + try testing.expectEqual(512, @sizeOf(Header)); +} + +pub fn instantiate( + allocator: Allocator, + dir: std.fs.Dir, + reader: anytype, + skip_depth: usize, +) !void { + var count: usize = 0; + while (true) { + const header = reader.readStruct(Header) catch |err| { + return if (err == error.EndOfStream) + if (count < 2) error.AbrubtEnd else break + else + err; + }; + + if (header.isBlank()) { + count += 1; + continue; + } else if (count > 0) { + return error.Format; + } + + var size = try std.fmt.parseUnsigned(usize, &header.size, 8); + const block_size = ((size + 511) / 512) * 512; + var components = std.ArrayList([]const u8).init(allocator); + defer components.deinit(); + + var path_it = std.mem.tokenize(u8, &header.prefix, "/\x00"); + if (header.prefix[0] != 0) { + while (path_it.next()) |component| { + try components.append(component); + } + } + + path_it = std.mem.tokenize(u8, &header.name, "/\x00"); + while (path_it.next()) |component| { + try components.append(component); + } + + const tmp_path = try std.fs.path.join(allocator, components.items); + defer allocator.free(tmp_path); + + if (skip_depth >= components.items.len) { + try reader.skipBytes(block_size, .{}); + continue; + } + + var i: usize = 0; + while (i < skip_depth) : (i += 1) { + _ = components.orderedRemove(0); + } + + const file_path = try std.fs.path.join(allocator, components.items); + defer allocator.free(file_path); + + switch (header.typeflag) { + .directory => try dir.makePath(file_path), + .pax_global => try reader.skipBytes(512, .{}), + .regular => { + const file = try dir.createFile(file_path, .{ .read = true, .truncate = true }); + defer file.close(); + const skip_size = block_size - size; + + var buf: [std.mem.page_size]u8 = undefined; + while (size > 0) { + const buffered = try reader.read(buf[0..std.math.min(size, 512)]); + try file.writeAll(buf[0..buffered]); + size -= buffered; + } + + try reader.skipBytes(skip_size, .{}); + }, + else => {}, + } + } +} + +pub fn builder(allocator: Allocator, writer: anytype) Builder(@TypeOf(writer)) { + return Builder(@TypeOf(writer)).init(allocator, writer); +} + +pub fn Builder(comptime Writer: type) type { + return struct { + writer: Writer, + arena: std.heap.ArenaAllocator, + directories: std.StringHashMap(void), + + const Self = @This(); + + pub fn init(allocator: Allocator, writer: Writer) Self { + return Self{ + .arena = std.heap.ArenaAllocator.init(allocator), + .writer = writer, + .directories = std.StringHashMap(void).init(allocator), + }; + } + + pub fn deinit(self: *Self) void { + self.directories.deinit(); + self.arena.deinit(); + } + + pub fn finish(self: *Self) !void { + try self.writer.writeByteNTimes(0, 1024); + } + + fn maybeAddDirectories( + self: *Self, + path: []const u8, + ) !void { + var i: usize = 0; + while (i < path.len) : (i += 1) { + while (path[i] != '/' and i < path.len) i += 1; + if (i >= path.len) break; + const dirpath = try self.arena.allocator().dupe(u8, path[0..i]); + if (self.directories.contains(dirpath)) continue else try self.directories.put(dirpath, {}); + + const stat = std.fs.File.Stat{ + .inode = undefined, + .size = 0, + .mode = switch (builtin.os.tag) { + .windows => 0, + else => 0o755, + }, + .kind = .Directory, + .atime = undefined, + .mtime = std.time.nanoTimestamp(), + .ctime = undefined, + }; + const allocator = self.arena.child_allocator; + const posix_dirpath = try std.mem.replaceOwned(u8, allocator, dirpath, std.fs.path.sep_str_windows, std.fs.path.sep_str_posix); + defer allocator.free(posix_dirpath); + + const header = try Header.fromStat(stat, posix_dirpath); + try self.writer.writeAll(std.mem.asBytes(&header)); + } + } + + /// prefix is a path to prepend subpath with + pub fn addFile( + self: *Self, + root: std.fs.Dir, + prefix: ?[]const u8, + subpath: []const u8, + ) !void { + const allocator = self.arena.child_allocator; + const path = if (prefix) |prefix_path| + try std.fs.path.join(allocator, &[_][]const u8{ prefix_path, subpath }) + else + subpath; + defer if (prefix != null) allocator.free(path); + + const posix_path = try std.mem.replaceOwned(u8, allocator, path, std.fs.path.sep_str_windows, std.fs.path.sep_str_posix); + defer allocator.free(posix_path); + + if (std.fs.path.dirname(posix_path)) |dirname| + try self.maybeAddDirectories(posix_path[0 .. dirname.len + 1]); + const subfile = try root.openFile(subpath, .{ .mode = .read_write }); + defer subfile.close(); + + const stat = try subfile.stat(); + const header = try Header.fromStat(stat, posix_path); + var buf: [std.mem.page_size]u8 = undefined; + + try self.writer.writeAll(std.mem.asBytes(&header)); + var counter = std.io.countingWriter(self.writer); + + while (true) { + const n = try subfile.reader().read(&buf); + if (n == 0) break; + + try counter.writer().writeAll(buf[0..n]); + } + + const padding = blk: { + const mod = counter.bytes_written % 512; + break :blk if (mod > 0) 512 - mod else 0; + }; + try self.writer.writeByteNTimes(0, @as(usize, @intCast(padding))); + } + + /// add slice of bytes as file `path` + pub fn addSlice(self: *Self, slice: []const u8, path: []const u8) !void { + const allocator = self.arena.child_allocator; + const posix_path = try std.mem.replaceOwned(u8, allocator, path, std.fs.path.sep_str_windows, std.fs.path.sep_str_posix); + defer allocator.free(posix_path); + + const stat = std.fs.File.Stat{ + .inode = undefined, + .size = slice.len, + .mode = switch (builtin.os.tag) { + .windows => 0, + else => 0o644, + }, + .kind = .File, + .atime = undefined, + .mtime = std.time.nanoTimestamp(), + .ctime = undefined, + }; + + var header = try Header.fromStat(stat, posix_path); + const padding = blk: { + const mod = slice.len % 512; + break :blk if (mod > 0) 512 - mod else 0; + }; + try self.writer.writeAll(std.mem.asBytes(&header)); + try self.writer.writeAll(slice); + try self.writer.writeByteNTimes(0, padding); + } + }; +} + +pub const PaxHeaderMap = struct { + text: []const u8, + map: std.StringHashMap([]const u8), + + const Self = @This(); + + pub fn init(allocator: Allocator, reader: anytype) !Self { + // TODO: header verification + const header = try reader.readStruct(Header); + if (header.typeflag != .pax_global) return error.NotPaxGlobalHeader; + + const size = try std.fmt.parseInt(usize, &header.size, 8); + const text = try allocator.alloc(u8, size); + errdefer allocator.free(text); + + var i: usize = 0; + while (i < size) : (i = try reader.read(text[i..])) {} + + var map = std.StringHashMap([]const u8).init(allocator); + errdefer map.deinit(); + + var it = std.mem.tokenize(u8, text, "\n"); + while (it.next()) |line| { + const begin = (std.mem.indexOf(u8, line, " ") orelse return error.BadMapEntry) + 1; + const eql = std.mem.indexOf(u8, line[begin..], "=") orelse return error.BadMapEntry; + try map.put(line[begin .. begin + eql], line[begin + eql + 1 ..]); + } + + return Self{ + .text = text, + .map = map, + }; + } + + pub fn get(self: Self, key: []const u8) ?[]const u8 { + return self.map.get(key); + } + + pub fn deinit(self: *Self) void { + self.map.allocator.free(self.text); + self.map.deinit(); + } +}; + +pub fn fileExtractor(path: []const u8, reader: anytype) FileExtractor(@TypeOf(reader)) { + return FileExtractor(@TypeOf(reader)).init(path, reader); +} + +pub fn FileExtractor(comptime ReaderType: type) type { + return struct { + path: []const u8, + internal: ReaderType, + len: ?usize, + + const Self = @This(); + + pub fn init(path: []const u8, internal: ReaderType) Self { + return Self{ + .path = path, + .internal = internal, + .len = null, + }; + } + + pub const Error = ReaderType.Error || error{ FileNotFound, EndOfStream } || std.fmt.ParseIntError; + pub const Reader = std.io.Reader(*Self, Error, read); + + pub fn read(self: *Self, buf: []u8) Error!usize { + if (self.len == null) { + while (true) { + const header = try self.internal.readStruct(Header); + for (std.mem.asBytes(&header)) |c| { + if (c != 0) break; + } else return error.FileNotFound; + const size = try std.fmt.parseInt(usize, &header.size, 8); + const name = header.name[0 .. std.mem.indexOf(u8, &header.name, "\x00") orelse header.name.len]; + if (std.mem.eql(u8, name, self.path)) { + self.len = size; + break; + } else if (size > 0) { + try self.internal.skipBytes(size + (512 - (size % 512)), .{}); + } + } + } + + const n = try self.internal.read(buf[0..std.math.min(self.len.?, buf.len)]); + self.len.? -= n; + return n; + } + + pub fn reader(self: *Self) Reader { + return .{ .context = self }; + } + }; +} From 6eccd8fd956b984327988faeff9f3f3fce914134 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Thu, 4 Jan 2024 12:54:33 +0100 Subject: [PATCH 251/286] Implements board-support info extraction that inspects (and validates) the build.zig file for BSPs --- board-support/espressif-esp/build.zig | 4 + board-support/espressif-esp/extract-bsp-info | Bin 0 -> 2062248 bytes .../espressif-esp/extract-bsp-info.o | Bin 0 -> 1969032 bytes board-support/microchip-atsam/build.zig | 33 +++--- board-support/raspberrypi-rp2040/build.zig | 2 +- board-support/stmicro-stm32/build.zig | 2 +- tools/bundle.sh | 16 ++- tools/create-package.sh | 3 - tools/extract-bsp-info.zig | 102 ++++++++++++++++++ tools/lib/dummy_uf2.zig | 5 + 10 files changed, 148 insertions(+), 19 deletions(-) create mode 100755 board-support/espressif-esp/extract-bsp-info create mode 100644 board-support/espressif-esp/extract-bsp-info.o create mode 100644 tools/extract-bsp-info.zig create mode 100644 tools/lib/dummy_uf2.zig diff --git a/board-support/espressif-esp/build.zig b/board-support/espressif-esp/build.zig index 089066cbd..d1b62ccf5 100644 --- a/board-support/espressif-esp/build.zig +++ b/board-support/espressif-esp/build.zig @@ -47,6 +47,10 @@ pub const chips = struct { }; }; +pub const boards = struct { + // empty right now +}; + pub fn build(b: *std.Build) void { _ = b; // const optimize = b.standardOptimizeOption(.{}); diff --git a/board-support/espressif-esp/extract-bsp-info b/board-support/espressif-esp/extract-bsp-info new file mode 100755 index 0000000000000000000000000000000000000000..e805c7e173d96d164d07c2876b7c1472a904866c GIT binary patch literal 2062248 zcmeF44}6tX{m0Lq=Z;OInu$e8zpjQh3vs}Jp_oI4VotpRDk{nbyRgaFuKR;SP?wTX zp-m&h#GFcsO0|>{6K$0l71=B*D$1EuSk!M7DHiGP{e8~)KKI_ojY*{P%Z=CNbH3;M zIp6a=-}C1=&!79;tEQBn;^pKR{qxKRjYyr(9}#4gIz@HEdtAzxQd43M;{U_Up=J=d zF+QbETWaD#N^!R{t(fn4k}c)Ze{q+zxbgS4prR?TYRS#z)9Li;r{dZ7Id4^h3XVOcttNiqUd$S1$eyTTU@0&hWRj%%YYPFQk28eYd;%96Gkrjn+Huw@p=9 z<@)e*$6Krg7haQa<=O_>oVGzn1O&w@*L{i_`?D!0ad`!QT2&VHZ2!nWzQ|#X!y_Vi ztdl1=oZ>JiX3M|X;X55Z>GX=fa`Lkd|L*WTN80i~aQMU#R^C@U|GnAe4t4Sk!)^XY z_tE~X5qs*-GcNyhXE)cO>L=}EJz8!6v-@v<in z@`ob+e!$iHRmUrg*j4+l6ze1Qqvek3M<3_tS1%eBlW@PA_y=v&G6! zI(+)4RxbUS#oHYI_$ez-_=&|F$G_U~yMAHwpMTckx4N_CnZLGj%QlN!9hUsc%Bvji zcKDOu+5AU;X>rESEq=_&r~KB+BYtdA+oSlR^ZRgT=WXi$4$H4|c%t)H%U$ub)z|*U z*?q?1%R$`#61>s*IE3$!`WZ3^3X3@9P4;} z;g1}z;Y*f(Y=_0)J4|i2^2qMJ<16JY?#Isa5&d7EvGuC`&$JB>`sJfHSe$>O#nV1z z@dGO@e)SrQcP+Dc?MEzDUu*G0AGLVuT^0{tYw^Z=EIxFv#p~{~Sh>#PB8OKyy!#6_ z|5snM_~bV&e$C+yhadQc&40D=3|CL3!xo31bab`YHj-_USjcLhi_Sso&RV=R=#4Tv-9P8Tka8u-*xyChfh2FlfxGr=B8}9 zvz>gA!y1Rp4nOShI)^tq{Jg{CH(EQ-J={AkaQZ_Z>0PhoeiO0tWhdViDfh_;Ps{g* zWzNpRf3tjl_6PKP@85y=^d6s|xpCPX8Rvb)EB{ez=NI3$IOTDR9S#rwj+L)*_(zA+ zH`)A$9UlE%D_`&MIfoa2&*newaOC%`e3QeS4kvE5`S)$NSQWt^JNciHeC1v1@-Nw8 z%a{DY;?Yi4yv4~seYSVK@{Wk;dm?s}_e3QB`+d}_{3zZUDIe9V{CVe3UO)D0`q8Vs z0o;54zuxhg78!r9l|P?7z{XFLi^JVJZGZJRobV?r|MHI(|K%{>=?`;wvBNokw!AG4 zM>rhm@WmIbe&RnYRyw@a;n)+84)&|v6Za3>`>^v(m;XW^`hBhUN@wTzue>kt`|}P9 zzG~$q4xe#&`hzzA0f&cgu=2GI|LpMGhiv|%4v+qtm9KaBoWt^mZT@P9$;!gOkDX@? zpakNL7KefUe`AmPwQ157T;*|^wnyw&i`q1Y+TPBz~FfJ zMvKEh|G%-vzxMzCH+-Yb(^sp#+V8hsYv;lDYX?vc1aGuB9I|4d-`|M+uH(FAq3!=3 zH~$~J#>!t>X7S#SSp3*>i~sXUi&waEU#zq8Q}q_#b*aTi9nNgB^43Kb4{5PDW{Jfm zOD#5k+~Tdx7VlYX@#j}q{PtBAD?e;e{U5;ni^tcmw&ibJYq4(izlUwE+@M=+`HwkF z+-Bwc+bwo0-f88B?y`97FDwq;nvGjV*ymIg7sRdno!?vDUq5K&D8BPqtDovHYBwrx zI@;P%Ou2eK;`~|sD{D{vP<-D|TW;au7Nd3tqyA>`)6ZFa@db-V{>x(LOBQ3Et><027C)YE z@r!S=_`|nY>^a2ZA%|H^onUdq_8H_74W93JWLDu<6atQ~Fn4>>GV9AooC zS@Rt}?(`$)SYF3Mi;p<@=_)IK_L6KoW~P-xTwvw1W?7taenjv1mnUuhU3I?rZm_&F96sG<<$c9JxpFT!%ysq-arkbB$2c78FqqV@;J*!jjR!3KE>%?S zK|Sm6obNqwu=(s!`PUqhA2&Dnz1W>P-rDIYf`38=|Lf+--uU*eePAeG(qDIeY?2E3 z%Mbof|EFK#Qk?gK|?1O_575P^XR3`Afc0s|2k zh`>Mu{`(_v(tm#w2U<7~fq@7NL|`BS0}&XAz(52JhzOJ(5MB&8F%W@)2nK|?1pfOYFzLU)i32Shh`>Mu1|l#Jfq@7NL|`BS2Sfx;c3#};{-RFxm2ZDNBFY|+ z2O=;Kfq@7NL|`BS0}&XAz(52BA}|nvfd~vlU?2hm5qKj+;MKk^(AV{de>b+n{@sED zK~@6@js@SH%PM4n$xe0$~Kkg{gtW zKm-ON@OnjH{OeWmK)nMI7>Ga^fs!yakQj)-fg6FUHH)Z)ZuK_}kQxef{jr{&VvU+wvo?UHgtaf~D&wYQl_O<;{xv%?0 z`@&8NwI{^B`=7a5IE45avPH4B=)7V<60fuo=S55XL~52VpY=Wxm!k5kRrgVS7|!b>|FAyt z-`+=lUq4*)jz0MMyF^j-J6(pXd#~qT)UN^AnE2})1gSqKKZidOe;EEcdt~Z`zM~P0}9XXGQ z(iSEc);F*tpWvnjSYQ)NrJ}-j+?NOY&oUUa#vEueT4+yZC9m6{F`l2g>{~vI*et=U<2i zsN*FN{saF-kFOdJ#V{@{wzA4E#)HJG?MGit^KA8@`nBpOZEqCSk=Lq!w7w`t;}Z2# zWi9tw#ZBvrV$|QL{y>p6Zc$YK`Z|wM{lAORdD)kpXdI({s;uP?w0`d^etqR@J6>-* z(EWS8{iv@v~^pI2MiSPd!R%18I@TAmx{L9(TvdVD|I1HHZycZR;^%IkUE z_~%t)2~`CTzI#)=?u2zkKR>!{(zZpr&R(!!X65~7OuRHV5x-``pUOV<)}9@A{`99S z9;p0&$2Y5P+47?wU)%DVgWHGw^^r%!!mth2UT|#`xqy#6mE|U=&eJF=?Lgayy#0lE;9AsQl@C{ zdi$5TF73~n`k!7ub(}>}<8`3Sm#BX#o8wXq^>dGFOxDgjZeG=KORBE0p8tQ_haD(! z)_#AjQ1_*Z;clg}j=N&UoZlG_TnY07Y5)KGch7VCs#*P4jQV?^_3vwSJx$}Fn7Iy0 zEZ?Yc>1+Sr*Z6v+`O$H$>tqzw-hsAGM*UP-{e7**t=1PsFP@#F{zXw)1OD1bM8~DZ zCyM{y<9pC|;z5)2d^$QVRMvLCR_lP)7e$S?`V~dx5BRB(*gI-GmG#c=#)G8p3$|{y zvR>EuRYd+xL@sjWeP>Yn$8eF%Wo5yfEU9mytZ!A8W^R_$x8QCU_D$GNO>#fWYw=1= zL@>OL;PQX`y?Brc;~n9@QN+@h%-dg&w$|-qrLT0HM$PuMu2nYG@Mxa=H&_0P7Bd(B zD<0(O^@eIE>-V1;ovdF*xGExlBErAP$$DM$E+@f zZ%su1Xr%m4oUH!+(a9R$=OeQJQg(aZ>13_%{Z4+DYwr{%>$-e;gg?v48qYc>YyT{9 zvRu!WzhzEV|Jow*>WIA7$r{fMPS*ZyL&qdzVAwReG&HU0~ntnFRmWR3525&q|#tnIzq z$y)ydPS*N6BjulTvVK3X+sPV_=bWtL_02gp9y-6@;bgsU@qQ<(zZ0FT{!DeU_TRZq z*7nYGvVITYN+;|06+RW=-|1xej+gvB7%Bh5i2QpeYyE$BvihIz+4iab?{c!n=NKnz z`^Pw0`}2cN*7ls~WVKfj(WjiO?OpC3Jr&{aj_}{?+xDrw zqn)h%J<-W(?{p{Yc%SZMZSTbqxyH%b-X%^}dmneQw)YMvYkzb&S?9wyBIUcBtn+QB zlePa%%(ics9S-K*PFDT|Cu{v@NAwGwto2{%WNlAdM1Q-J)!su+*8X`SQoh^C8t>k#nA2pxjGNP#GX__BB?}|PTpvPO~>+x1)T~Acj4XphgUx_}sU7G~rP9eVYA#O*qtjn`Y~Ih|1-f_ONXIx=&VF_sJ?phJ#AihqpWI*hXnXs!*B`$x{p)>wUh5Cr=Qg^!Kiyw_Xg88L%gOs| z|BYTg64sZAZ}j;5x3~Yesz+L?-o2>(mxb%wpS;rl{WFg*U)^)b#_PXTKE8Q#^5&Vk z?j##iV@A)OJ4OeHzHeA$T?-W@Z(g#psktH9IJdecmGK%ZQT6$!=eSy@UQ;M^CG_6v zd!0Pg;V}-6aH!WFbkF?(mmhbi=f)$Ptmp2>B3HXSS-)f{6C2TUcSi}~M3n;57sqr%bE?TXGi7>W z%;;k$k1^FvO{vD?k2~(N%Pt#bAH{zWL=Y)pR7wZ)XbgT zK=V~NHV`VCnvx4?BnB`TSa1!-kPS^xUsFSK-Q3EiWL11l4KFJ%<;lFcsm1ZihWX7> zLu0(UauLPr>yAxc+FV&1uT9p?Z>sK%h*y=e^=n90&aK8?b6t?CoKu@5JK4RUUA6i; zcGc?Z*PR@^Zr!ErtJR%g-=jVKf@y;^n%25M{)B)Z5Ca|ssq%RK znd9SpYy4tUxUg}4JRB*R=GfR?h5zQ&Ts8c4KoY#XQGKys@du1}~T<=Y$nhH7`t|tem?52P)?#kB_Hy z^{HfCJcu|J=G7k`U($HR!G`xo#%t^AQ^C}a*U!0xDbpBd_E+~Zj5EICm~2TJ47eVh z#OwE20gT{T!OsbplX<280yDXuCYvcOsfP0Ux#pDG%K2t`a;~FHOU^TVq>!23)Ib{r z5{zNMamx8&0hft|a(*K~3(GGGWXM&OO_ig@iBHG#-AnnHqLw8sS4go5=^YJiP zDaC42bu!+xIF*by)?A)6vu2rDN19o4%&d84R-KvEU}iO$WJ5!JgIN+MCh;rGnP<(O zd{+5c)6Dr(rn}UPDbvm{L}-p_YFIqEeqpMzAvvk8YWiiBDKoFKrj}-B4E#D7Y12Up!{)m~msqk0}{5p}44c zRPpHIF~!BjV~fWXk1sAMo-np(?5MG$$Br3WJa+8Zabw4iEg3suT+z5u<3^7gGp=~t z*m2{=jUQJsZo>GY@uS9%9zSM$@%XXh$BiF9zGVD_lA@APC8JBmloXeYEg4rbzNDmN z!USBLK=l(aJ%M5q$TGn(h&3Qd5NaEfHjZw}$rnnCMvWd*Ja*jpk_nY_=2kHeGM2vP zy2~0WQ}H15K@n3qcP_I_db_z!*1CB$$=a%T5VH7X)dV>!hi z$+A_&ys+?TUXZf>-(?nO7LfrW5k zvZ-b+ft#C5^%X6#Uaoo(QY)sC^h-FEj>lc}=X0i)!X3iR)r0!G3m<+aQ@q!ALGk*440Hp4?EsAX%5F zAso{e)AEJWl8yDv4UBbjRw~&Lv?*94;htIFL|)w~^$q9ICvvFZaIoOqn)+JX^z-VQ zYpcRzP90;M-o{?C>Ey+UBtbnV97rayU_QsCc{TGVH}H-djE5Pg1S?irrqTcEsVVNKH%234|3sJuIXDSk>- z5acl1h9#Oy#b?d4R!m^V^+y=AEHBOw7wYDh$?plBCO;>1PMzCHB&%GBy7{&ubBe46 zW_op{9H`R4O;k2jPpXxJ+u|uLjIG9C6i|!hOAiLUeI`GmgD>UvbdL+tIZg9Q%*mBi zVnWpB%w*GL^$iQc!j3mJ*a2K*pcMu`#QWk{h@n z3D+11Vk@(~(~=yY8j}e*Uzj1&@SM5@b@i9kS2jvytI3uJ}UmZSsdT%J-p?~Ka% zHFK4Kd~UKqx;rChN?lb=Wt}-oPppv7n#YDF$!n7)+f%Dx8cB>!lam;BCDU2gl9Dlv zh$kDYm>$2GCNk3Ju~eN|KP5O|Q+8@lRy~m;b1>$-HB zF0SX))yQE?jxouqNey$WiBU$*S&eL5?JA24oO(A+8?9+%B)&{Z2#HxRSKShjt|D|$w=!v!>(&fkLvnDOOEZ;niu|ycOc%|NNj|@! zvQ}ISdS83KdCtpA3#mM~hLAZP(gsYKJN-R*@da}7>ujYBog4g$6U#yvK%3);1Unqa z;tV|=>=V_HOjF{nV%mx-vI47vI_N)pF)w;WPpDFx*dcc?mEfgj|T!q4Qyk)@pI-aDe;TtDG<*2OjY)ySz#gy`jQ;QN9LF<7*U=O$yY&$x~w1cJZ!#-F6ZU<9f>}dQg%rWva4y9l@*i)2ahP@Bo zs2np9Oo6k&g3;ImOTpD(7r!^w1@;v4u17F2mU4x(>%<&012i9m54M8sf+yveZK9vV z*yAF2#mPCQ1WbW5!FI3(EG>gCdax7h0(Xi$g*bANJ#h+tfhlkn*l{lL5P4>f*(x%) z8*D!xf4G=laUt;lyTDqoyCTP|0o#-KFZ%iL!PW)vxX2!_g$H(mD+N>354K)P{akc! zZ^|(#uoG+p6U{kh186QIu3-1aa?I3`$RE!!)nGf=2DV*Cd%zyB8%*7pW8%kQ=O$#Z z;4{P#Ox>Jg3X8ANeh6DP18 z>;gA|J>U+o^hVDNoeUo=1j&oq1*$W*$JlB zdL{v;{zm-4qQB!W*!?_yoI$*H6F)HV0z9zbAMn8Te-SsZBgZ%9OzIuvn=-H? z&o?QsDBm}$z*evmOdaZ*iD%*Gk-jNNQ15$vQw*kt`(_5%4K4)>j`GcFu=V}E*$I}8 z_RWa1k->5>KE^jqU^}=HG{wHzD0*-^SXAPh;nOGwmVxaj_+|~*1wICLPV~(#!4LYT za608r^37B*4pxgi34g%~up8_t^Ucs1@K3={!4Kgd*nPThHi7YS>J>c0H-pas&!k;o z!P&l92AUbz0o%dB=i=u%z9|7y7y70R?6}7_wddpay|f2Rf$PC;aGS{Y`6hM&Ja9PJ z`9<0VChqr56J$6{eu4>b1=!Z*n;l@mleFt%^0&YP+rV0|6I=nBpU@u3 z|0#U13oMvTxu4OmU^|!qTes4$U>mp+>;gA}1wSXgVCOGrPX&Jdl6t@{uo^7bM*G3i zU-@POnEEyG20KAh3I8d|fgNBOSnxFdfn8u5*bR0_{%?p2m;iT)9vm`<{AcJ-uoRpD zrobkVw^JT0`Yq+a1lR-iJnNfbbCGw_&tNxL0h&J%e=rWVgQZ|6SOIo}t)TpFMLQS= zJHb-08>|4$pMBE`#=&;56zl{mz;3V=G)c;Xaj*w075RUek6@yQa$vz<=?Ab2jL(Dj zH|&F*e;gA|J>U+}zeId%h$mPK7I`sK3$}x8BIm};X0Qv~CHaG5X4ob82~GsN^J1m~ zH2E>p3MRlcA|DhpU0?^eOXP!NX2=5K1{MpxDQ2n!2gl4xu;9%xvk~liD}2F%m>FKn zIDA{o%m8~1in#Cc7PRU#mpA4S?51;7qXVLizcBqU|UVh6fUA&3+M;ITFQe33yB9<1g;aTqdi~( z+y$nc^=0N67{4F?!J_r}aV7PFOTmr@ z@fU30K>4dE2bP1~55>$fu;6R>2^Kv}{J>VQ2TX0m&sOY%39$7M;s$m+N*ut_?=X(Q z3UCit^gZU!hw&er3HE@kVA1z!7udBK`=b8={($XIu#Q|!{*UknZ2K|u6*NC#K1e>e z9!&f+X10Re;2zQcjB?lD2UrT4tua##mj0aa2DX7)z^-4!%+O`j|4aM=%{J_VrC=*q z0k(r(U?*7cE8-2tpCaBLp&U3AYz0fej&90>sqOd=wt<7Mr93zSjQ<`#!0sLRE%LMY z4R(O$qtyEc;t#fhWnf|_>kQZpt`Pha<-nf5GEczLU9@vK>M32p-`j>t8GSJ3VwbInAs=)Lg3g5kMlwd5a#J+K>$U56cTI9PNv zcEJQ#3&sm`O*>c$c7g@(&o#TiPH^b;`0)Yk3m%(ms=;n>Ian|<*Q^DLz)fHR+yRyz zhyS0%zcIOHDp*iVJtB|Af3OwY47QKYHTi9nJ2BT33Z8^tU^mzTwx679I>5Hc#8>1p z+HnK^o{B$U>C{|P0h-ft%`%bC$Tb_lwrTheCZ-eL8?gtLfbBDK%`7l}4*r7`GqDdA zROFg2k>})^Jzz%_{(Or3B>sb?U^UnYE*E(o?FPHRE-*en*X#xp)ww3VlKQ}@V8JE1 zCIyy)Z6aTqYaRoO8gosLcj9wz8b#ZHMwRz*tRU!Yz4bM3jZ_oH#h<;SWaBQqK`8U!R}AwnpKj29sMnMJ^q04 zPZFJ4{}uRP=Y#Yk*!p$GE!Yn306V^&YYJ|qKClRkKb~u5 zf)!vZnA%LggKgj@up8_F<3FJNpTj?}1Z)Q@z;19k*zpA89&Fu$U!n(hfj!``+wk)z z#2Yj}WxRlKunjB)JHQ0kCGs}LOFRDkn)v}1JVkrK1h`4$ZtQ|7aLDb{3zmZI&oKYM z__MSVtoS4PJK+6=c?5QXRiOE6u2}(=g6qLnaGU7C*q!MA#&`lt!5Lt|^VBc-yBQB) z4_L5)2bncsEBF}L3HE?JV8PwgchDeH1Qvk_umVhhtzaA20d|1h zU>8_$Fy+B6uwX6zyovH)987?vU<#}N+rZRYs2A)6w@dz82buhPs2?l@3*LsmB7?19 z*P(;VIxsPW`oQ+L4>Ef|^R7Xr{9g2j(=M=e*dVi3sR_M?a!*inf8V9y5znc?g3Zv=d>VkGs0@gnR>{^&tw3uub5`vuxH9zVg>732AK_DqLO%k6-napCHV6OnGs-D z?I2SHwl1U|$xjgvux-&GvlT45oOpm{$sjYVgLZ(WVCR*L6VO~W$gBX{!1Z83E9E5r zYW(^#ylV!T60qP}>H!lUr5#`g*afzJ0^a?|U=i2@Ccy6N@JDbRb|0Yp7l}LA{#E$v zu?rS~Z4VAIGrE%{U>_U- zmVO6+z%H-}>;YGT1)FFmXudbd>;yZ%&pdkw`3J-g>;|jA)D!pvw*MIWV9$<0W;a;y z>>xArYxvPa|A3ufEm-gu?1Kq#BUt)3+6kJ!)1MDh{yEwScI+NxmV!ku3^MIt{GaqA z*u7_vF&oK$3ID+YlV@fM=H!{>U>mp&Z1wZZcCa)z&kTNq{JcC<0v6=wnOUGYIM1vE zJKvONHcI|m^2`p&e`}t}e-!_~La+-g2RjeRGt0o%L$NRUhvk{ABELP)>;X&Pk!Rvx z$NzWcnKH2AU3sP&>>8G5R!Ba$4(xt6<-o-Mqj^1-QK`|vzd3-*93L_R9d ztOr|<&NJPD@5?g<-yrTIXb;#1&IEhFRx z0oyO6p2zSHTnTp0$}^k5ii^;Lsf+W>kZ)tJf_lKjT=;@j@WIq4^33q>P%l^xwy(%D zEh2-f!0sFH7i_zccy6LUSLT^gu=LY;rUH!Lk!Om(OTFMsup4Xvi|)!Z8^HM8d1i~q z_vA4KDG$cMqI-!iSOM08=05xZnH~ne1ZDGPOw7qzes$+c5oeN zzC?Xs0^9?ZuBUyQ(Szk+57-2jekISW23x_$z)o<7;8*j^&>v9$L-eEI*JzL6!}JH3 z+K7F@NAgVU3F>(?&lCxM9e=>0PW%!42K@vUd=tBZ-@@(>DF>E-iO2Fx6QMLswYjDIiBq`(B&2DXA7g5M`jVB2Q+Pl7+lGb6zECulF&1=fNU zKP0|j=ZX1d`A>)g*a4P)FyHI|JHf#}rT$6zrUYyQXMx?5;e!=r`DPv1aZ0|~3dT>( zH@m^a)O<7SXYjx>u>C{%rds4P^37_&GxN=6u;;9N(<7M3H$%6=tIId3pHnZ`26lrT zU_pJp=>ki^9Xd3g)7Lmc-A~)gJFTrN`U@O=H7A(p) zYrqt^39Ps*-)sllTJlY78~VlhW;oaiCPcnG-z)_?z_nmv3H5+Ip!pSkE`<+vfeA2m z1$;1ZC48{xD)?YQEBs&M&xdIT*mE^;0y~z`evv<#Zypm|o^N)6=HtZaDawPTU>CSn z@Vb1n4eb16z8TVupEu;2iD2hS;sJKt1P@HDB90=1+XZjVH~CMS;BSZplXLkrlhaa= zbNJxA{I(o?B!3v6wTu(x3`H*DvtGtdE{RERDY({~{AN~fGn`L3pPBS4moL&f|GpR| zCk-A{@F6hZHKFby&c}kGjVi~QEG%QBuGM^Y!>a>B9!aT(!ro-rdBd(s!7U#@S;$SOfU4E@>I3-#U{XQ#zs zO+@ylxQw8pVH9n}PBCNneWXJ>Vg^z4?dZ$Uzd2Js)#?k$>vZLpXZo?&)#APA5_UXs z8_=xkHfC(5Ez&a9xHV@s_M(fU8;-6U9k+qfK6=-NwuLhl-HPqT+@I-(R~d4oEwyk8 ze`kLaF>LE8P|%5u73hbeUqL$5d*@`?=zz1V4;vFH#;qvRg#Oo=e)uQnI3qJ1N(80D zy$drG5(h5%n;|=leOY|Q{1)8^bVJeQ5y#L!lA@c6Ztx$Bxu_Ri6}rUEm+ON5N4N6N z+|n78Vbgzh5N-v}61AhR`g?H6F*Xp#7|CTVCK< zrOf!@n)o^bUEx2CSw}i-zjwE|8uVW|`VHu_V&E5huGYXt3eK*7@u)zijfTKPV1r9B zX2^@&0?E|RQVY~iK9@JRr)11mGJW(5!US&?N+Vp;_+m6K!MmB}L=^gp^LbZ^Skxj8YM zyms_e=&#AtdpeAhfxlvhQya4xUe?@B1!}VyJ*O~cC;B^RU%KxucD{PoYvMdj+@}ex z%hRBFAxFdJ%}{ckCM1%<1kxqnza&rxdw>%3tI=PRIR?F@5Q0|E)5Ic| zD8x=JWp?xI+mNg>&pL*-(E86-#q1oMW2R@;@0|&k;{|yez!5w@cMh0t|CP>`f22+Z zf4ipanC*c-+IX_l23%Q70z>6961(C475G< zPWJR58^o`Lva8>oV@77Km;NE@taq1|a${KL!aB;V8k%G7&Z`a8W>RmbJJ(+ec2;2zPsaZ~+ zJw_$S5+5D?wqKUR-G;5~W1sZ5aAgu%UI)Cg!*k5DnRR-djwk)&#y`Bl!*a~wnLO9O z3G#M3{kQ@IJ>EH@qQiTC1{b=}?q)%g(3#!N$yj zm&5TQtkaLH@BSR$RUfW(_E=O(x#F=oT+7WU=RNMo{u5eEe5r-IX~N!po(gXzyowWe zrZvmvJ?g;2n)sw9ZrAG07k|qbFtV@*ebO!d@%-tn*bUp|>2XZvj*VwN8_ae6@Md75 z2;T709K)j8UyPH@$UEoPiRZ_&CDpKS?_6 zqgG&jEJQT}UK@74lsON))mpzU_@)AGE8HQc<(QwnEyJe&kuaXRii(f268QJ_tvWAP zNngo#sbIcs7k@6yG4G~|&~G`cBTBnsZ?*dDbE~<|#KM3$0^SIC`LlA&@3YqIGIhxR zxTfGrJZHh*ba9Tkh;&$QuyKtE7jr;xP+c!9|$P>!lkUeTj%8j=ksBF$d@s+3f*8f;j^=1eV?}9yV|u$ z`tLEgr8POGl5}WC_hz!yCtLb&C%onG9?Tk-ztAw<>JoDH7>tWyhj4Dgv*Dl3wCl+M zPI~2Xp#{7$cx~`@XYs!4c(T@5UM;+8o-LQY5B=05h~3%*_Ey4ch1ZeEOP}e;xm&>7 z2rqwOj(JB`d!Ban+Kq$6XFEJoxA%HWp$ujY4u$uvEPJ}2_cWm!4vnxbQo)!{U}H^v zj$vq~+bD+{MDZnsekJMen{6y9N(<1=iBr^{A2g}1nx3Mtz}*^0&-!)1+hjJ&Tn zhOWw7OGDibcL?7%xF_?t?CGEh4>yZkVSi{iLoRk%-b1PztUB!0^4Wv!>cu(ca*mPV zc=V6;wBRo_@t9ipgjz_~4ZwK?X3%=&|C zG}iwF`WbuCr_irN-ZjNxv0Gd`MQ zctkuMPrpU`C)_W5!qwnybqVNFPyFqa|9DRJHCXTTEPoR4rovkdk4JXW^>`c9s?G!7 zXwBXv)qTVz{L58`3F-gU*j)8VzGFo?91Cj6lTMeI*tlYuKd~*x z%*oQL53;+kb_(9X^)-0!&E&~cLM~*k7olH?{ynmp&^?m3!};Rfq6s}Ck<%*iQfd$k zPwe_s=*7#Im5{UVEK|B5M@?m19+QJqP_1m^B;ntw)BEhGIXOQGxGOcGrwO4edWiJ? zSIyn5=E8F@Z<7}9*2L=>4DUAe;$}^JS`!)+?_rk{jijf?I9+hVNN6vG!}u&`LKqAU z+2721C;N^2a?Bq{hhv3gA)gj>v(`ngYn|qdq!-0maM!@?ggYy14yR|5T(yyoQ|~Wx zvZoDwnL@|Co#QbU!_F^pU52_sKTmf?v9UVF5 zx=g#5Dt(4az(c|&wMkRn&zvp)FwN4VsB}jhlRL1# zhZFOwNr(15Jr%O;8_dOmYQDP`%Q~k2ULF3YO9VYEdw_}Xr*7Q$JwQ2STPQo?(HwId z*Wp5c{88$D`f~O^v}u>?O!MnB<;I$U-h2cX+uyTt31@|8p8Sokd>Axl>i)S`+4IpGf0^qF%FLNfOgcZEZhmdl|%glX4bEa$J3ofB8kiJ~Wv8CeYIeWbqSxp~pgjWsk z>;IG4N7v~X@=w#$m0H_RUBbUnRbJQ*U30?KBfMZSRf~rUdYGd(5W=%gJ>d9v>mc=S z3+wuk8VVB+s6*cjN#T{xaEbk)7Hif-I3)V!_`gsG!eubrwuIYr?@6_&=fwW8p(9^+ zx?o>g$VJYLd{1-&p$_Lm6AZ*SpQ-4#p-*M5jdRt4-CNYcDcs$=jdpCTKtC1z-C1kk z)X<@2>a6bey^~#zpBs|od^b4IKM-bxQ!AvO80v0x^e~XJ*OBsJh8~mbv7(5^&dBlh zx*wE#=`-Q2hF6@me!N%f^+OMI*m>Vm$FEkBx7=lUdVyXKWZsvZMlYdxTOt`tv}lJ* z=viy}TG?-u5-tRP(VXp?_OcI%R!c6Q{UDu!pWXg8Q;VyuDt7WVtmf z;7#R(@>0^_7zZ)89@yjGL#6t?du7Qza)8XL`L}SC#%+=JaRK7il}6(RN?!62VEG)Vm&j z{46hWO@ET3rR&`WuNvMNlu6r_wcD;)d(f{!zcx$1(%G^11>#gVJmHxevi3y3aU4%~ zbLksy*ec{RlX5Gjd1h=@x%*u?e}Tq24tE*c_8Fd8Pde>qd+3M6a4npP=XkxImx+E8 z`f~J~?xt z%qOz?;#@~rsMO#*Y(3n>Lf&DJ#r?43=;mM=vOTxj4!;NfSCPXw`hN_4)I&nJEz-@X ze|*T9;jH@?>0;__mkJ6oS;l{fMg99OhnE!G^>8`OO8er4+sLzBH8LTCMgLxxm;rqq zWlLH-b9XGWtX>BSZ%kHe*=ICyiYCG%{nIWdc#l%-7_Pf5^$e$<89tq?h4jpRu4brD z#n4MBJLF2wd@QT%&mA>vhVH6@g+^i~@4KnJs{fb?cMaUGSHR_Vx9Ngg-0GP|u6Kof zedaZTR^(nE`=p;SFvA02c*-2EhF57rYc=s(P3UgQJ705jh^C*434?)*Wmd+yGBk$zZ8Aey(PavjYvpMoT4dsLwLW+;w(El zPVBLBC7cwT(|bR5epro)y-v6*c~1+c{uzGhUfSB*4yUx;Ge5|xv(&ZOYjKHSE*G#N z+5QT+vTvElf6IC2OV%+iTud~kb{&#&EbmrYeurnqXZc#Ge&|)g;5fSq?&>=|^FWr* zlawpNAn>;nUhx{wd?Yhg>Fe9xE>{9t@GhrSckwQtESp;Yha6MT_UW)=IiA7aTc6It zRvEn3wVojq8GWGp7quJShtZ6gu0ovx=~YlyFwDjItigWQy}W~mbU5~OH6km{XA_*A zaE52b)-TYZV()*#*?pg99)=&<@mif5dfXSZ&o>PlNq?KYeZD;IMFbV4UX+2WNX?V>LF`KHwR?o}TvCf19Tc)Q2{1)S`Oi z3Z83~F(>caD%-$*E;BCS8A`ZW560Z!<7oFoUiLHP;d6U-Up*X~#qiqTO(h-1G38va z!##LzY!bM+M;lD{8ZWR2m=tVnf`n=Dglsv!B*-X z@fbe7HM8z=rFpvIc;QN{3IExU6!yp@t@~qr>*Vw#xbUzv_zU2HDJij=^pe$w(R{JTFwK8 zj$-cwkF8U>@8lqYSk9*eeJ%RR+zkCx&Y5$D}L@7 zzDks?&(DoH8`?-+JN#?)hzMQ$-9-7pPkZKg(&1Q>wHQ&x><;uJ(BGP=k30t@b_zzb z-oU#wix(`n_WTEZ>^Gh{KTAK!xoHQ#)Hf5}M0nZvC(9jAMjv{3t?*XDyEAKzS?75E z%rIjA>$1WdXtv#*;?M8AUY|FZh5c^yyLeC7t8wo{;#E2Z`#Zc|pQV&zj=VoF#{0;g zCLQ*Rce87ZTxpOwW8=ZlG;Q!7ga5D0F`lurS*&4@T`7F=;W5g{yUxav4(pKh$mzGE z??B(%xv}i4V{D8>&!yya`ScDiTq<-MeV+O-MH9M3)?ofo4J%U;G!lg}1Ypm~fcgDzqAj;Zkf5ebFH}Brx)WY{Q@q`)}6SBiC+^<#ltx&f~%iXPsjY`V# zHFZKr->IypH1YJy62I4+eXH&QZLq&j)ny#f|D+Z7XyPZD&=C0Z!lvkk&C`elS4@K5 zd`64yC93Iq{R=fvp4#-^^YUsQbw>R~s`HQ5l=ov*9ur34Bvr~fl+VUtV#1f#ou$Wi z@cfK8d@-f%nqCBNB|MgyG|wGt#7+YJdh`o2_1;uhdwLJu0&fqzPiFCS1lxUt9NXl* ztW~@}GV9!@F>oh1_I09PhCV0j7_vti8R)ywH}Ss7k7ntwmVgH9iaCMx@;u*sJ zv8BJWA->2vVOwVU+23Q5JubR3KIKloCWa8M59_t_YGFz+buYKX$)2vbqL8(2C3d>m zu=J1)?JQNct}^zx&RVRJ(kt|+^kYZnSpr@eyia893&W$D?wECf34B~enfA-}?&DBwuYw?t0Q;48t9PPjLqRF=TI~1veas^CyRgyUSe^-QFn0FF zWBQs_c*EiGcw5>hf0*{G3{Y7!^#Brn8(I|NZzttfUhYSp|CVj8ZF4vJAxn5aFx)UM zx?>_s`ZhL+^E5bn^Hq2w;I+WZy58wM=3GqQ`r~%dhbJyg$1d{RZ@( zh8y}`?W!XyXg{3dD}8fvCP&(bEIxOmuR?!r4nlZLIz{6v*Aq+}RXzq*U*((oNr$}f z`hcx#1e}sq-dUW-7|vEV0oBX9hMFWpaYs z%vRrlem(lpnR_@-N>HBKmo_@*?n_}DFm;V!;zAyW;`YFG(AN}fn>~C~>Al-k#o{q6f z);1Jt>EE@PdOZQx{gj-Kq8I+)Q<%S8jJYS1A6`z;4X9lGvHRVL@YllU5!j6SA9BM~ zmu^Mxi%ua1WE=-;j~v^VVJFVZFCNaSSC30FfrKs_B|$r(Cc@n)^;7Qcnf2>@3~y^` zL$z94UiP?=ke9FSDa(6`rmeo^C!Q0#a@d z~ zTlUl`7z6*{PXC_Fxu};H&`T`$z-hUackh!9>ypzG#5kW}r(3;T?hEzm3R%*3rEu0@V_haE z{94`u=eM<23%BrdzWG8XSFiq&CqA{oSq}%-(sc$i*Y!X8?dac@sXxQ|ENhVbu8HXX znW^`_;QY`Vak7cDYrfpfT7TOs<4Zpl!C%(S?@(mfU*qh{T5H#&nefVQ-?won{qL54NMCgG*1NJg0fWPp zS%!_`GdRz?hu^?B6hYUTjC%;5(OTE&gz)duO`IP-&h39%ueJDRguL*?$1e@@{u%PV zqj`2b$#2dSZuHHR%rUO(2Cl8)(+y|FBdiy)aH_BAXLdWCtKqk|(%%g5bJgeY@`fK? z*iK(u3BMNXU#Q;sCxjmVFw6@d_zsUpdLbYf_sf}N+kU`xI^0bAc{T3YdA1gP`4jwZ zN#@!UKG~m+mWsGygl&N!n-J|PQAKgc`_%5pG6$u$$Srelj9Yl z=*!Uepg$~AFJ_SAe5#!OhD?2U-`jpyY&o3TCttpwmpQQpUB{1o^ZBgu>Sy@aNZ_#e zxCMTZ{N_yNxX|r~?`fCV_HgiA`IG+FFKOopxI=&1`?X)Gw;X*5`eU;C=woh(`OCH9 zTDUE6CvN3>Qw$*-m;Z8H@9UZfw*&JvM|UydcBa2X&__F{Z_h7%)7M@;|7@#28h1i} zDyb7u+Fpo$@V4IDF8ZnHN1%Tv>9D*wk0|27z=uOJIWp{#rH-9We`KcK9(n`);A!lmD1T0-KA8Nr{0Q{jS&Q{_lO`XW8HE%*lqt?!|`9U|jFu zerKjVz5aA&Knw0Il)ye@ z3xDt*eep7){FwM_r(2v;p%K0VmH^cv4ulD7B znfR5qUk$&O->-Tl{;*V;RqzM@**DK;?Ng@f66%G~y;DQhrU}`EN#(i|2rjf2V{<1q zH~fWb#91*9ubj(DAm!x9CK!yX)s!24F4vRzZLFs=+bZnGVO<-3t4^wRA>`a-AgZGDz{raJxKNvGH6`&}sQS|D~( z@Mh4dZ_DJl{k!Pfoc{1kz1*fk7JY})_qE1%IelNpp`L!~FPLfl>#dz}>MwHonVDlK z;~Ylj-V8WxyIqxs1?3+s94E|^T#~tajD!4`e>is%G9Q`u%arE5A zNY|I~A`aoKg|n20mfH5h*$iigA2V0>!I4<^z$wd%nO4$a{5-v8p)t2(ZP*2@LvY`d z$(6$ive=sF^yQgj!Q1VEuUE+|w;Jxoe12!@6>wL=?LH`GPVbegm*cFDop57sA}*Oe zdY=fKlr^s#eG__lpJdox|2*G0>9^{N>aW+6mf$+d&1mJaVL&$Cb|_PW9Cg+ZF$~#ZqEys z!f81!mi?@!94g$}H4HoLaAu6+ci>2e{VD4mqO`peeHHp2XX?ZA0{gJ#RCMzDq{But z@3Z`oi;z-T`V>m9_P#tv7FF9%#TRq^V+_BomR0AS&X&YSY^o(2FY#4=3w1Z;WPcO3 zr6r>n*|JoxgcmQ4nKx&hBdERbVWPB)a{SD0#>;ZVd-0(M+grx&-G^FuLua!;g?CKW zTDnXtYIlj0X6O?inz1h^>(p}U+gK8dyq~P^Hfwu2Dc3Y%@9h!$JK(K`_bll!_TiI9 z;We2srea^lU%Z0xcYLhZ=R)G>OVL-M&$`ZSHN2i zZ#(H;d=!_mdRb%e80AVQ#;}!lfS#w6u z9X#!F-ERl;F+rJKC&tW2rBQla!=IP$d=K{G64w@ZvrdWix(_Ttzsl*qn>7c%sv)@5 zCH(M=Ah2wYiCZY!!wcCD!%pZ!f)a?*AG@6X)=YhPuixGf6d#ApVckBB-`33J$>NJF zb|#`hPuG+2ju<&Xjiai9XHJhE+hkKK-D&q|%i+v|lXWdK{T7_hIkKEJ2Yb2= z@RyeJdycWpx__p};`AHuQOiDXhwyn(W+!R+lku>Jyu!0%hF55&{SUu+qZ>Z&cBwNi zW#$r(Y5ayJ=`gP0SK#fMo`5rCI=_pW$(;Y9p-i8xU zmnCZ=7zWv56RTaa)B)6Cp!ItOnq?M*y?AY&!5@*{E1U$ zDf&Y6IUYi|R&3RsWiW2r;S9MTW)6}%_zT)kUIBSiB}2=3lLNO zyr~!RTep6uoj#9o4K9G;H{$dd_p%ICyb`2pY18s~#N*;vpUL;JwX}sU;3vBj{LUsGSXpN!h44HfE7oz8s1uX*JtsxdKJO3FmFvY=f_nsb9H9g^R3vNb26)42W2P>v9=)IJ ze@_d@VKLY=gx6d3xZ^#lDlr;xLRDBwRdQk!9IT}Oj%ELI+F!bv@+LW(nn87Rx#_@eF%P8Qnl;bm1UKlx`I?Z`FvyYTWL{}P9}%LS z3O>VF*sGVZrVK{VvFyLqSBtGKk$%IO|2u6*#(OeCT6pW%tv#}@YNd`DZ87sC>97t@ z2ciZ{A6&2pT-m#9pxhqH-J4ZT_p-WF&BQ}H)^@;OdPA(&`(H9|^J}esSZ05PzjxuS z(>7nPZ7$W8+P&0N%FkLEGxufsqus21DBX=-{BME34gPJJ{IJt?X|?_fe=Yp-PxCwS znR6k$My3^|`CEm56TeHJXDWlsN0 zW_eHMy0lp_d^=BYEocK}hPAU!$0($0Q@DrlKc|aS9QAg%1#4oF=Ld9+V4a4OpJKlO zCy^De$D%&S_!p=2xEPEuiP2Qbulsz=yn}S;j~jn7HmjXJp1E$Pe_td#Vue4gA~TM1 zVtWl`+y0NauK};CsMg;3ZNNeT6o`Ou#8$$kND2t46bR5GyP8N)3Y81jsx`MNO2DK< zC2~q~AiKK@ zWbiGx*CV~3Z+lQ(;mI)a?dZw34$I)ljsS?|?*Yv4!}*zatQZ}M^m6=1u7$n24s)ci zoaHSs;$<{VupY^_z65z<_z2{pjQ0A1>2ikIdC!{Jy4>EV+PV#S*Cg|;hk+-MBf0KT z_5E(7pT0Ri^G@O5mMsOd9Wb4M$;6Qe>Q4PI2ABnp=jQ= z4a;)305Erxswd}~fF;do6Y$%ZUO^N-z>iAMHY(4Wrp@Ez0hoPG>l1C(dW^%D&?1^drJ@5xUKgp2G;>N*du``%Av{ zK*qT7F(WpD>vX_WzBze+VtZTxIQwtY=iO?+m+qdJcf{EZnEby_ALj_*w*!8nbvWwU z{I5bkj^$6e{~!X`a=a1Pt3cXbZZN@yhn8M|wBX4-2Q0#X5bB zPCq4_{)Ke7!<7i3+7BX71Ky$0!h2nX_J_UQ$efhgGEf)Gv%H_cqPlK#v)xoal}^(l|bxupe} z-)s4-Mr~%(fRp+IwhpkJcn|8Id%gxX+a#4eI||sHfW0QH2h)BI<9G=%;B(DXW zbxMJCQkZ_a2=LDOZAW?u(x)nK58x^QH(7ZR;=BR<3viDj9Plgn)|V>N2FxD7Y{{7O z+`Ug5)&cIG4;EzA{iMB3r++kDmgzyEw&?}jHsCoc3}^a>hGX9t0o+c&4Tj+Y9}EH2 zM2CEx8N)iv8QI&B>2s$@uhQwofDQPheVt1YbyW;@AMn4D!K1({8eH9w`)y5Du;(Uy z4Uw7Er@O3)fsRBOLntGELBY5)YDXJ=nqHkYb3OCabg~U*twejDQ!uGdjc^M9w|ok? zGQceZTnum<5f1ngtktFki9But?5uMOtjjWBRf7^&H_|Ub`kCQ$+6HXKXwaOZ7k7|8 zz`h>Vb?Hm}gJV4~k*uN{(Z1&wSg~;10k?JcvCkm`r!#oKrru3d7BjzCv!sS>9s?#$43D(`_h8UJ$Jc#b=kpW z`_nqYS_o9LQTL{=416BY>75=XRo}zy*uujeo(U%3!ga`ww zRDCx9pZ6aHnfGmkY@^vIW&|*A0%j_?ErRoA=BK8HD+k={Dd5;vO8~b3a502~wi2ZQ ze*&T!k$yYUQyJ-|&C{}DR2pT6c)OABlBEUKiQ#;-UGUEIA*3%u`uoG_vliVhmrp7a60>?PT!`}j|``4-NgL6bo%?k>74lM{4-l2Pr!e4 zIGsz8I(@EAKR%pJ)vnX4kUoa|*?7Agsw zh(FtqK8WDx6$`b=ly{A}O3I{o0V?wn-4LzixNh(%`d|Qy7M0#m>{7fG-4sOgP>?mN@E-$b~GRphB zE-%xccg!m2_s>ra8v!mGu*ZC%V8Z>~Ec+_JGy-NS|2K7I2Vif%3U*KiuOHWRenUU= zuFNr%2iw&?qhpMdPW5RI`0l^Dz{*^UG;`Iw*#-~CmRTyzp?<#;a7nAoE+b!Kc0q+tYs02=XM6XUh$k&m)}Xov}9+e|G{V5`(=FwhM9}HIidmBe=Ae zt~&Dfm<06g%7RJH6;Q4h0L!o$2SHe9XQD`BrD27e2+^us&XhikLPC?ik4Xl+kawrtZ4VJUF$izreZ+@9BK$wbBTp zX9H#wFu0~Y1oMQchSb>x%!Xuvb$Gb^yuE?X^$`tCeD#3s-dbScx|t9@RbV}mLH9ZhlWPK^1B<=|8~up_>zpt? zs&Kqh7nC9WDx}{OP7h{Dp9|=!0o-=LVaYW__oo87Wc~w~@+bFSAKj09-q6(gXglCy zPfx9nDoNw5uurz5Pi4qfppUo zL5JC>6NB$n=KUmq>NcU=sDb*S!S#vIaKFZ0$fXhYZ;tXc7_fz z`!s{g_0s#F0y8J*dS(C$U??|pfqMgRFDWb>w`b8f1A~3*A7{ncKXw7WXhxy+1BBE3 z`EJ0Mnco3_k$zk_{c=f`{Bw2sHQ{u;i5c#SOD6}pO=QGm;;ef(F3b+=)?GJv^RdyT3 z*8}%I-%{jz^PkAqfqeJBYyZk4ABK=`+04Rm{$rzQlw1;S3~;vt?%%`w%Dq6hm0}p- zA{`jd0C!0S9PzMC)A($_%{*vo{?`F+A>j6h|CHS>CR16>UWjH;D8r4lbPV zZZ*Q}0*nWkl?bQh-?%)Le3oD$eo1km$a?^DnUYV^QLfVu4dbX*>6DWioxZg@Y=m!e3 z-eW|X*Xs0(W`uC$ePD(zP}WP!khBAErDqgo-UDW)h7@t7mc)iB`abjrU_Xj{LA#sf z53N5~b~)hc0e4my?z0+KNY5+*+-kt>uN<@?-@=N?<$!Y53%DKg_aFZ#@~t^*a{LkC zFTEZ1_t}M$&Z`#yrWG*zTgQ6jt2}pd8rXif18%qyZIUr|KBSqQHWLXu2-rR6Pc8Et zH{S$o_XUO1z7J&f9k8btPR@4VKxA!bV;FgZ$|$x(-*~?5y0GYd7)JY_%v_LoJ+yvcY+?kEDz(!8!;0J84Jq* zv*60YtY=}_|7@M^A)GGf`?^j>L8|tw2dwoUh1RDtV6Tw&WdB@)^ctl9H6Jg*eCt>< z*5v)vgpf@6*#h{;XUC80%E1{y`c9;`A-xCT0G}M|PTQqLccFhRE1d8i{W7Fqf%Ht< z_6A))+T3dFtpVIlz>Q>-wXc7j^}HUi9iN+?9^%+@Kj4?w7Fw@o@a3s|O#}@Y;m3Bs zm47jNTM^HjI{o4>jb^qO8tabvA<6@u^TKeZDjIGOX$t|@2DlDxXf*8=>^IDd7-v>+ zqjv5qn&iBwX-c*hTO;pRM(oni#()Tp^X8hVdfrtgf8I4gKF(N(D)@L-DDA&=TChYr zq$4;(r5u;s4gL0w@$GEpYi9a^eh1hEfb{_T3c^9X5iH055~OXoq0stixKHKYZb&mr zylUzX_{JRA3&>M(Bl^V=A$-A-bY6O9f15@_OGlWtJg9t7u@+NQvkA1Cz_(4HeV+gg zKH;6&Rg?Zy>MD~I1dR0O4w|G%vIhu%xDW8YF{XmK`y$*oDTv{0K!^`&`WX{r3|hmn z6*_@WW&iyM{r@)Dw_ttHmY>#87Z6IdYdPRf2i!|xxLhNlW}a#|qkMc(b$<4Y)o-x*IT;e7Deg67mwznfGJU{vvzZ0b_l?(8|vX z!+g)c{5{&wp(O(8d$zyl@_ z#Qc1pn1@WvA59?e3O;P;&s!LTPBx(|jQ{r2$gajE z4{)~w?x)BT$W5@eVO&gVJe}1AS$niF>zegKWIrA0HAu&Cj5MzFcbNk}Rqkts`e76J zg$@Yq*8|VkV};}H<7vaWx9591Q6 zM$xhX=@l;&j{Ek&PXbzZAboIxbke#9=}TTLw7wO_&k>P=X9iQGk(M$Lu??{E!mw9K zQPP)fr0+udC&KA$D&kT@oWRuqZuU##>}(@PA-E2}RRL}?TbJ#Y1l%mI(3;AY^@tB} z=Y{Dr%^NDW15u_~z+*-h$5r*SbhkQZYT>Q5H zW(Y9<2*U*HF|ffaB!hm#-1MFz*0m0>YhIf^?oPljdwqJiw*j_vbo#jW0Nw-qbm%U_#P9YurjL6G z;II12^l-NTHuBf$;bvc43;0pMUz)*h4isvv-;VV1H^-N~O3M*DtrETn^LIl(0`{P= zJsEtcR^gisn4!NFS|^0ZgY>qh^~OkHf2;xQ_ObCgnH`5^s?CgqYXscfw-%m<;5k>~huo+|-^cc#xp zdhZ13lWauE}Zau82Qu*n3jJ`ZkLm`LBL(Hr_d@2w_{!& zhf|^5LwePJXRjN}DS8O`k$z*C_P}o7U;vpz`x#TFho@-c>zOBj3Ud=Nwkd_*|AoTI>U`81j_#FC(IgK#y!N4qErxT4+ zKR94uEH*hrErdO9@N6)}Hkp{`OiXakagcPZNy)P*vV11FEhz zIMWi>6eP+tN^G{-52N2NpE0QoOZI7>rEkt?+f)<3%H@i8P?tJ3BiRr;Q6L@ z=@W%-Y9zsD|I*9TZ=0mI_6eAz(4H;R)q+n8ru_xinf&*ez|AHQB;8?R0v&dMAvUz3 zEWJhSMh%~r_7WN2V(#AzE)&R0336Ph>w`h4c#Ge_uF1wJqLR{%WM#NIy25PFqi>->=i(9ZtU_oxV+{ zzc-xDAyMbwh4dxBpN+l+fSLIV_=}LOzhofJyf&e{N+- zge~odJOcLCFy6o(&K#Q-0@nJ$^kC}%TR#oh2vFV*SP!rlhH1Dgvrb9C%(`=Wb=n2k zM!DaTp1_l0a=0OTsbb*uwT2=gz3{}|%7AZ`yM%$Soqf<{tne#apC9>8?=&KP$`>|?5-nGb*S zUbUS$XAaM>?B<=L-oc0|ephX6?FWjFYmxNDw(}=@<*rUNk)4Pay|Z_(?Ziv=;xP~} z#UlbJ1d9+PyzNR5Fy4Oy#?7B&4V{SCBHKxfGR8?nnAs#WCy^2#lazQFQ#QYV6NrPh zO0ZOUNjL zqy3kWAi0~9IUr>Sd5UjMUYqaF_P=XyI{UAzpk-}jJIqTukJ#%Yzlku$^1gL|)R#Gs zkvRMZZC7ZJQj2f817Iosu#_GW2NVOI4P*c$dA8dwG&@5;(JPn+5lTv^y++l_4%IP( zJ%a)kUm{@nbBf67f%sCql0XEPr-OCrV51KDr=}VZ43qY1vDAscAfuc3o5!r;_=j>( zlQZ!HZb_+bg1FII`O;byWMUyC` zXoncEQ96;CjdFErHJSOMKa!;!2#s6GqF6ou_me@edVcR@5agl%ohjOXhOmRgp;WRX z^$*IctNAuEgS@N%g#QWOw>OO%Njer)P?A(`B%A8l!5K4I0fN7e~3Vj3RUf6@<@o(x>{r#I&5cgr|ndC+fKC0cB}E8s1v|wr|mW% zx~EZI7kAlCdyGM+x);Dn6pT)=7~&rtMxBRI=T;=EI-lU5kh+9CQIrVn=LzkCT>)L= zU*o?92$m-h&(9>iaVZ5nm2%sOR0G-02QPUBs?Rw*DvyIMl}Evacz6#Tiay?tA3M=s zgrdDqqrcZW@h>BPEgQDnFZb^X7uSvAR>i-B^w#Lh#Sb^V?7cIKP17oI{!ahRT352$ z?m-*QdS|a)ylKeZ{9-<|;UTtLbqIvFdKA_7>_n62JuO8mb&BE|j`HWBE*`0OB(^(8 zBX+5oMPQ<1hS+*SGWl}CF_y>+O!Ha-$@c{C?W zP-G)w7P(-S=>0{iuSHNSf=n+%FxJmst6`yk1!!eyt6JM2bS;k+x2sVjkw{7bi5ezW zR<_1Jg+TGcW8SF+m}TS?$5&9*@Ml$=*jwWlX#jkI5 `A;sTlZ`%5oh+x|Y2I_8QnSP4zor5Yv zFmCK+-%&heQLGY#+EztXs-o0GM@mt)`{7dC{aA$KmE?#I@!@{B46)^i^;GN#9|Q3* zJV+6Oqv;^qTgO@^h(Wakq@pdlnH8_4>a~}zE4OwKOQOF9@O_mCdpE#Pk2SSg4VR{9 z>!rx=$vMF5^L5MG1JOZb!mGU;L{~_Wm31h+62a8XNP2WnNt~tODZ|C1dk(4Y!cVjf z9UT9n9aukPV%-qiiP$cnWBm}zy7{;GtI=j6w5}4`L{A&R``QZLOA@R{$FB39M&qD+ zo`D2*&*FGH1?hhLATvn<_CcU5V{rc9wTJmvq9*btqfB(re-;s{9tnw0%v{6~4&>(- z;isyogf$pp4Te@lz1H{%z}1qhpYKB~7@j?2ZccGa0u=c(Qj`P#c9j4DCynobeU$NM z0g-wJKj|(8afp`)m8$jf(3jEG5W|r#*Pk=#U_|6OQdNy4!JL%quaS{KM`kJ3KBW}x zM=9SY)!O`W6U@m{W}%c+F)RF*z3F3rjQ|KE(~hHM%!BQji=gn7jA-L%?nG+LCN6^sVk3X1wy3#m5P} z-Mnk58iE#MWEoY13%JSVZ@{?HG=yCXi)(>(b28Z zu^cT(vV>wW5r1!rW#<0im z476$=hFpdZXIRG{7Yd)qFh)VboWbxU^rEli*H6}#G2l_{xpEf=5oiS(ZfsGE@e-nC z)GxMDqG{0MCQJ;SZD_T@z6#{%LP;?1 zB;>1gqqjf|S?HC&6o_^}h-j*~aq}aQw-5&lc4bY}Zi zfB>Wx6DJCp!`zEzZZyfBevyB*hCnr84v5fo+U~^=IoM3@q7o5p;5x!T!hZ;`h^z*{ zVw5>+(C_qjiJj#(b$Z8fgqm~?^Xoles7oTMljz5G^OmI)uYKwlL47=E{4ub^vik-{ zBMeyUIsPu{_0Ej&&GK&fJCv^z-7UO53_Z&8{(#;Me(nb9h;(mx)`sVos_V803b9w3 zcU4L+r5W^5Xf-$Lp+lk}VBVlZE*C}DG=zTUL`M)cV)t!_wDC{o_ui#|03FW-bPRc) zP;@*8Ix5kqE|h>|eAZ;7ID79=8J`GcJW6GJA~U1+5~H2ywh$!kVpMfoCZydrVv1nT z@Zd})ZI6dCu2UHw&&=qF0T2-Ss=)$1X?gVu%U}r0H3|#n&a5G%Ri0?fEbR#)Y8u7= zn0M0qDf>;MG?u{6V&p1;2!z|mcE;R;o#M29g+BnrLz#8}MW^jhp1W+$VWA}*N)i;W zHV^!FNxxwRvK@mv<$wMl=8GTmU&jmdDkB$nKx~1ihrQ4})LA?PiFOu4T~~X+J0jU+ za##Oi4Igg;IHeg#3@gtb8xzSc&iqY~r@hPJ(<|iffMc_wjQ_Q2;0?-)Hv@-7p z{ST57q&k21d`WERL}FW&8y7v30Iw2@hrQxCXu9Sm7~_Zdr}@7N5Mr$i2%9?5_+y+Q zP>;Oy4+?{Xp-MUd!RpK8)Xsx2!x#sc8rzSbypxu_#ZD^l;KX3+QHWkf`!w$=m;S=h zO~xkbo(8f_MlsHX*l|#Y5%2p4q7M7?@9F3N1%!Bf{*}ARA(XcB1|-FHp0H7zqwF<3 zi3g&w2st(&+(pRp9_3_n<$^gjTp0Xj&5F{k<3s)4toD8 zxVEGO2=8;4OoO{Do!rfzQ%M&{UcTT#aW*-1YqI#plhChIHhxycFGL)s5%2Tovp{CB z-V3kScQ8$3lK)3e*d+9f?aovfm3a$6hO`{+AMUR)hT_@GyJ9w+MX!QR+Kw{utVIA; zr+R0m3;YW>HSK52M&|LF1w@&f4vgV}Xsb0sR~clI#<7!-$~!WvNR0y89|{+7f#mOx zC^V&fIQ?R^I!)bZ`Cf_&q#`Mj;hrum@$NVZ40Dxr%X#*R0Ew3)vv4Virbzt}KaC?@v#aUPS~8s!Lg-`$4CPQyc$&)O$$wTsV3%f?mrL?1dU=epT`t(~9?OFD($2P{%^C)$yk z0ZC5fQk-4Y653H94wUKoMGFCzy>YdwF0|DK;eLu(C7ognuEQ7=OL1JPkT$dKWUwC(M_$ovRnIB(nR zo%0?P?Zlr&Hlg5M{=2Adr49YRVR&PT?H=@6S$1z0#76A4QSTmLDn71KUv!S_GX1`ZvMt2lL21XgxdzB=qS+?BtSWsGbIXf6%G=2GL*LFcmMEY3&WT)Jjb z`l$DzU;Xo?tNAhJ<0Wd2$`1H%#5aC@X++w;2V%rwtXv)(nkpnTgixhQA`7AVrF%Q= zswI@lfJDfcA@UI+)6?r8-rvxG%V;2s5=M1XJD#jR#-~I{SI0oa<)dlS%CL8^?nE5e}Mlx3r625X!#3foSSY3Apg9BP+3Z) z_vQeFG%b-0UEW=9Qb@ZoRC`+i=0rEBwqH&X6BtL>_8ScMPxns;rNR&G&T^_LEfCxO zP>wv)5fz#~GU(DVo* z#O7s?ZBEdEcnoi=c1J*Xzat6#OOUYfKEU=BgB0)c?hFgPTuMb}mt4_~9P5H=u)7oO z-bFAxWmLnnSIQZPCi$c-V<(`CHV@?C{~-LIjsMf^oBv?D?Zmd81}^wC2)#toyd~f` zrWL~+fG)-;Ar*DorJ`=UoCLT%WqdeMj2ATQ8&p@tybTt|m{<5JVIU7K{Q8UilPT+hE)h{6EWcN(laVX6f-;!Rkr(-0gtfH1Z|?#`A}%Z}kQ%`f z6QqyW&5sn@>&avO+0C1aF}fFjI~j_b|5Wj}Hx~`U4!_X95L8J{SliMtP7y-4BD-T3 z)gt&E1Zy38=Bk-koman>U>2h{rO?M-)>C9xw>t~A8@fZmsU+Bh=)DET_S z^?yjd4siZI%U9X9e^tJI{L23?`6@T^bsCHO-!ESQz0IjWzF==v%6K*kty3lg4!Uc+ zTtYpS^60PNV<65&0_i0KvQnahOLS~%3GpcXsWcSlL*Bqm5MAg#g@VJL(oVtjnov+o zv_JT4)6WihVls{#^B!{^&!(d=SgDerq%7}BDJcrACz-|-Ly&*EnC?)8cE?#E*hpE6 z`4?&feMcriPw*kjLZ8E^mHH-rplPLXpyL%xDIb`J9N}L^l_WW2{{hoE`&LcpCL}35 z6)6$~?eyqiHsZv&9MbF+)|dL0t6yf+Ux^`)mW}^ITJUOxOQSsLyb{o8A=k7VLPx#~ zLa_!TrHb76_u*YpAvN~DhXH0d#Njn9!r|fn>m0`LA1dZ#Rm{l$gJQf;Fx) zh}bFg4X4SLDd_{QUS6(FV&OIdV_}#;u1sD>5L8aCGyF6BUuWI4QfUsx#XGIA9k^6AsH$?Is&S(zN>5x|f7-!Uw1nioxlks8=WmuTV6NZe-JXM{}=F zn!XWDUkSt`IbGyOD&&L@p&A1_!9ud~@H@KEL7anbk%#ti!4Rh4IodlaTWs>@)X-z< z(yq*(vqXhGhL@^vH^a*r#$2clPoUsxEeAL(6Uh1}#=9h{w$Mp%i_StPxyTuGC5$a6 z)Sa;5RndPzlj?}2692aCs@aRv&Or%)jd)bK)ujvFD0qU!JghRn>~^Z}sdB2j99Y+0 z>lRE{=woh*;lJA(#5-10Zo&UXnOvOW&xh5^_dge}8-$G8Knff9qs2ELB^^_Z3Rt5} z%9uzyDAD3Ij>mcPM52xSPW@l5u>^YSURC1 z>`m*8OVP zSWd`_Woeq0sM^Om>*a^I4 zxLn@i0A?yI{iLRbQC_OQ=8!wq|_f9<^FgE^zc-3LWRW>~G8;oCla z@9dn|3puUT*eml^tm!Ro$j$eM{XPD@-Z~WK3@EC8f$*jrV7525{xHHK6hY5`+Ih*X zh$j&+a4c^rHt2{x{kZ>ezfXI6p+=9cpY6kAlx3UGQlk+Yc2J8b_b~8LnH+zeWo^2F zcs-2e{+rNaLCs&zI1;^)X^MzlH^<25(y9 z`tyHapTOEN$39wZ(V=PO`-$X3VOWg!UIC-9NM23{yYgpa{Od-&WbqSAIo$us!Kn*$ zB~eE2yxrd6U&VOLtr}Qxl2KMx%CSJlJwve2xJy{lUGAK%hQ6+b<$~uxjJSGAnSNjXBuhf_hd(~e*|ct%-yrU+C|%8tDW4Uvusxm2)R%Q z(U_|x*N6QN%SM(Mc;4n+DhiA%qe_n&vm&un#=e7o_7k%A@H_d?w#NKH8Mz+=acvkK zsD-^^r3b|p(d+40Vl!~Ss7TX2C|?6H~o&B zY*z+=%n{6hbPUeAnueF=f$F8T=Ju<1ZDvYyI{nuJ=FzvVE@-~*9XxN4MIGf#O*F(HDxJ`wU8oOrDY5d|tDi|e zh1J;|s@}1}g8^@AA1%PmwN8TD9c$ys;+7b)`rKY9G0on=#Vrqxi#npXB`Hy8EH<41 z7PE2GJLDH){YVO}pF>1S)wu_~F~pt7`e99EzlR$AC6hMJWPgenXRT<_p^1$&jU(GA z-)7q9px;99CWY{yMa9Ogw>0mnaT+#oTTc^yqe-V}$D?mwoy+DKv9T-4+ucvu8t}fn zUh}p32{ELrhoJtCxb9#`GziasG*ZAVj_9IEn2b-r-hPLgei*qV&WZMUe}Dubu@BN# zqjx3YnU&^FQ>!yUGZA<{VCLSVDAdfvC|9Bm*HLEvA?t^UU`3B|sSd(K&=3gLAO;}} zZfd%*vE**1z~$e8A8*CA=%s3Bv<;^`fW5zh1v2=lHBYmMW^ei)T+sa6xD-E14|E&C zzwsL~JIj8na;4PS+Ek3g+{1{?I@l!Gie7ncYxV2s3ZsyRF%E7wZ&d7meVt+dF35EK z0?KoA7n`8IA_%{~elADjEOvI%koEF*nT5!p1tyMoABNb}_8v_pmS@@T=e&)24cHrp z41(`q)Ws03*OPlWB!$G<&gIl3PDf}V~e;aXfvwnq2ds)rcv)FoUqA0 zs`o&W)IcXQ2u>sbjnU2Q(o1^Z6JY=@f#f`698@-b*Py&!{3lV~pm#GCWR!&cedX)0v_VD4YP%FO&BP=p=3^WR%y+2YQ z+&B}0N%PkD33$!ftsV`>`=7$F#v-=H&t<}@%7dt)i{p=j&8Z#u(bzN?JOyRMhczKS z`UdZb00vthbMfPSUyN65Ok9WSjk`Xm=57cWs>y@^Z|eQXxm#7K;XMBvnB1uX;P`SEm5S9<=pW?o@PDr=Zux)n z|GG7P8M1*n@+gk~4s}W$27ybHspwOO{9NTu?;ABd;3fv|wny1-;;)2x@MFV+k0@H1 z7|@zVp2-7SD&M0XHDp4mcOTX|ft$F6bCy%}{nPTWow%#wr$r1l^);g_FMKf{VIw>huA_mz}CR2|*Rz4CFeyJ+$ z+^0&%D!fbx@TN{?m7+K2?8bj_{7F_OFI#2Q(5H54_f`HV0zgzorbfGeDLi~JT$%e# z1KsY@ACJQklR7jdO<72@EuFCrazI`?lzlGwbtNms;v~C;od~ zs3?stQ3} z?|(I|ENY-EmS|;hp#Qx8$F0$ImOtk2HcB)4TCMc)tsTHw>M>0 z`*=m8>~Jy?Gf}mZz>fbK5Nj{-T2&Kn->2G7J}K2^!uV=GIj-7EQSIfK)qXOw+ApW8 zy$Ll+QGC<%DTP8S4Zgs>AtSj30P-3+uXo~4Yx**)eUhS)i2;piw3)4qksC&gTLWV4 z<=(ecYY**H?cpb++Dr&g>ehZar{R++o|j5DcpYlq7}T7jL-b``b2S1RO~xY>*!%Ff zQua^iVvFNz$&FuSa~|MX?A=;U zjpWFD+ja{v-Y6CQ;Uegsn4M_q@;=XU>2`3aSh+C{jsl)Rp(jJ!=Fv{fl|T=`xk-i? z`pS{Zd!m+AGW(tMA)oaUsk{efr+ubBiGHM+b4Gs`!K9{`!7&M5RAjpc+YV0VxE}*~ z7nNT5OEaGsB8`qRejK${@AOxKj@W`Z~3 zrABh-gZ;2$mCJwz@5(JK6O){T@`tM-RZ);o>`cf4vv&aOJXp`2R{e*-i*jJZte_K< zuWs+lze*Ei$m4ntEoSgJqZlr>cpsCRKvm+LD*wE*2T_|W^QSt@G&=bv6=xY*#uDEgwvB-3AoWEe@uBDJUvsUc%C^vY&Sh`M+j0sM=8gUYq zNO+EYR^hd0`3oT_3RrDUP`e&#-O5rZ`4S-H`e^Yw__z_~_@LIkj`NQbg~w9iDZ_T^ zP~ye@#j+@-z~Q8LYa4|=PE;Du#?}_6y_XSi={fC538`%x!R;jx5Q_R*{*^wCKJ^6X zUQy_T?9gQzX7ygVa?&;E0&Y`-ZiJ-<#W%eHJ2Lf}7?TMhM6ZK8@lFyWyG+gj)$*op zxgbHZ%S6a^6OzPTCbGYvL+T(izvc=W3+IPegnCQ5=C+G7FtWX%Rb`@%Kuj65aT{Xj z^Dgw?@5lUs$(PiBzJ)ARZhBYU6X3QJ19&P*Z+_8N4)afzv3ynhW+cF~Sms}q&LhC{ zi%?>#r2E4>T|-D7qgAqjD^mnzLaS4GG;gMOEN6n-SmfdBuaG~z^|`%~(VX1Q^_Tf8 zQTY*p)9VRp$yx8}aSyPui!gPP0#Nu8lHYBwV`Ok%U#VtUDu!N`H>ak^c8dHTfKtgh z5ZpI#8FUzSa=VFc;7~$)s(-4;rHX-Ee)@3|AMcW)1rRk_B4x_)1pfoP$D}8KzeeDt zSMfOa4(01n^ZqQX_DKV1XJEFktA$wR&Pp@mKsS~s>-h61Co?J$X?2W?5+5b zVN-cCop=@CxKs34Zd>BZ$u&4vQQUF{COp`@^eLikm*WSD;Se*7>1uDbT1c7tl={Cv zB3!8?Nva9wf_Qo5nuxj+pq#1da7YD$iox^!`Tq9o3-NmRAlv@2nOPIWpt4=&UncFM zVw?d2ZN)HyQi)r`!dsQZm;xh&UMnoj$OsXS2n3Vl%v3LDOI+08k-?2{g0;J zjR+q{()yVq1$f28zS&9a!FCz?)=0BLWC2Fsp;SafJb6mGd1uK6&|QMaO|l>59|Pn; zKcN&-xY9xL&gQW^D4D4L5}=7~lN?_CwLk~O$f2d?DRhD-c6CnLz2l#~GHAYYr4=>BpU6Hb+?mtn*^Pouw%5CCP0K$NL5c9plDpous0aOM4TobNJZ^UAA+eiCp*I7yNIixTG9@b(>dq!Zyqv4@ z0WXBO{Vdn}%~qjak(wAH1+F4Q>4?-$V3TuI1XrcprSgoh#zx2Cd=C$GH*YS7M0E=q z(}{ZVHr-Bi#3mt!SwfviUb!NqI#H*f$E&)1X@5G=!yAQWVo=$5){J|*RE+9GE1{s! zqN)~&E-9^D3e`Lr!m%>pNjR5FwKmSaXx;@mpnn+K*_&~F%;7%#!d&>pg6}Ub&!L+- zBE}IwuulGx7>yJRMrWN5)xZ&rzKqF_gJoNs%ZDBGT0RiHmXF0f`q*FEN$LT_8ItU$ z=U#f*GltGDi2bIbEkl) zM^5KPDdhw>*gv>CM*}>MgM)kQO=tc+!c=SHT>L2O+WLKjF_!oIhP`_YJn9H-EA{OH zs%uMp=wVFC)XBS1|9Jp_5imZXRaWJfv_{`qHS>_x>b(_%4Tb(pf1N)R(DvrI_FTEE zgqDxfUWyR|(T4J2KoS#GdeIFx58q+kmhdYEqAaXb7ET*Bf%( zM2TRjj={)DG_}rq`aC)EA9V(u{MqRfqsy>-ib+xjCIXv*CB=h15LOaY>#F@=PJ(WE z*TNB7qEyR2-qBDS#$)gHvuHR6mgC_aqB@1t!fXZB^EXI`%+175clBmB*#<>MP;`}_ zT217<0Yt{+l$BMFTN2dNRT-wKnWSYPiC?fx?o3L(B^pH2UfqFJP6C1OXeU_EDfc0O zWXWkr#-XB5_X9<+$C+GLa|uonx6g!Diin`L|e)I7AtoNtIVxb z=171@7EZsBxX=z@@z`?-y~dR#bS18#ozHsVQs0C!5RH|Rn-gsR7nPun0A$<#?<&LI z&4pU(MAz@cv&;K45xT0Y@@@yQ)F4DIlv)Bu*_e)Q@-a3DjJo=24GgK2IH)@B>Ao!D zm{iP$n2B@@iFBxails1o$tLz5v+1o;>HAO`z$A_qykmx~GlD*+@Gd9! zo0~kVel|xbbO{e#;xFD(;8J}yIt;mnSgRXB+~_Mv$7OW*$7L3lF&Q;KD=Jhwr-&;)i8o9GOc*A4Y5!{yB0D zLc3Blhw$KYSU*SjRH6w(Fx%0&D5Q~t5n1ZVQYR$O^R9w!L?zaW*qwmtx1w5W5i{z2 zx>u^-hWd1<>KhLSW55{Q?`z$~52L1UtC|{^@OgM84`be)R6m=O?8+sX{?Be$;;`t% zFm&{lo;@QpiJX4gop_AmQRSc!<+{@gF<6KMt{-61Y@~IN8NW#%YPYaqyf7*=qGw;>Wx7;u#i{2GQbg zAYQLS*d5WRgZ`Q5w}O6SowlX>mcW?yE=69sNlY#bZSI%6#VwzQ(4<;Ka`c@B`slX0 zBUGlQ73jTUNvo+TixMY?RNYN5$<1$d;#&}K;w?y~0x9;3{f=h2Cd{h8z`w{}@4w*+ zjJi3%dE~^$i_ag#jZnzoCPw4fDe>=Nklrm{0D5^)^wZO?oKdOaBE3_yCA9K}5JK%?Al+ zqgFn~wb5%Av5f|i!ZuPzz17l$e-Y47gdhhVvCW#Z21|J8n%GbV;e&L9eOon@3P(QlJ39#txvsETiOF zPQbqpG8loD1B|me&T5!~S2IEIB3qlu#qyG*CNfJZu~U7 z#w`{7M56M1f_Wz8bsX-|AWLqaK-l2pHMwic^EOM(~x@O zL(8FUtKM)x@y%Po<{-8+DKn& zT;Lx939I7G$cwq_1^%a-`^o7X995r7-x(A9=U2sV#Pf9Ajw$a?Dk5^Q53p5I{O1Tu z7`RNv3ry(%kl^|@@&quEy7)&ch!0O_h#;b?aXw{(G z+m+c@NI?L=!DGPyo27wk*Hrq$^N6hGKjGE z!H;rT!E}=vVpQkcw#I5OfaIvXK~DS%r1%A?TYz$9KVQf+2-mUxsGH!slc+)(Ms8}X zv-wy7?d|^>{z$}&Dkxqz<~@2Kt`ot!f!M~%A-dU{VP1*Iw1kapYzc}^-{hi`d;nxm zD&jvNgsLVck-+RE#DioO2V|m%DKyN(cm=qx1U(Nr80PGX^*zSsO#`n|BOY;5C|@g0t`3DWeB;z z>qY{kP{2L6a=+U(u#mtO8k5)s)4Vm}$|h!S4&)kLsSx}=64@AuyiwlM+n^|XtsCAJtSqk%r-e+Gwh zCLOg~?j;q>8R)3@7Gfk#kT780j%mquNZ3Z=rW5+aL3qCLVsz6ZljENa{FCz`mlPz3 zvX|!oXzvxTIMF{*@ut>oXVD6v`Gw-zXD|nRs@AFA-aK{yZYMj<|Lx=i+}#Ct`S&4q zsv^;6{j+r^t97fl*RFhFZw|2S)XJ}mHCq?m35n`PP^rG+8!w~v$xm_lYin0FJ!|Dc z_0LmBfhf@Qh;o;&QlK3Q2R4<&I|CeIgl<-BMfrrmq@U@vZo|{H&gnIv?^!VVJBSJ~ z0_&w>gc4He&0LJU7(@xD(2*;!)oP!4k(|jH1d=sKL<7MP zjL$0&VE;JMKNCyUxb&BZa7qvl?}8}@>o?q0T3vXSi$9YQcuEi9OrLZxr_b~aLR_^0vk;1Cr6)5lI=ibDAQbcew4e|Js(4v zc4TS?G90Dmd{nfxN-hG$9j0nmRZI>pW5VqM|!8Sv&~3`E)GQa|OISG&K0uOZM~CbXrNu-K;|3PJ9(RPLoJH`CFFSOMF` z;k9|TdoB2cVc-2Yx{>(0SsOYPEkMyMZ!~P-cFI%6!v7y)=xR6V$ z@NZp6O>e1PW~F+US%gbg9~ie@R9@@g=Gf?K^c~Z~1UH;BG^ZGfeDg^D=2!ApzR2(a zj6Cf$F8XeMC3oeE5*$j*YDM(o#f*OHm6b0_Xeg0y1L1QNIkmERBD!L9gxzV%TRPYM zkUXg#k$%IWl0ym3#zO|4W4w$X9=u>UJmSBST`QV3r!NB6`1<~j$@@Fq{|n@OQ5U)U z&&vBpRqlUU-amTxzb@}M@8c}S&1{e;Xni`SqqwShhwA=t$ip%1eOs}56egyvoYJF^ z#YenfQ6AhVE(zl;)owLz`B2_)r$`*(h#bGat+x`_@p-o{z!dXD-UnyBhAKEcMe^t` zQ4iiAhCPaH+@n_<=a%Bs8uqq}>GMy+a>=pjVkQj-5GiB}htx5;f2we4;i}pkl4R31I3GTI)3XnRz4g zdOw?TG`s?&zyv@JN6JoJ2VR6|vq(ZFZQj1LF-p^h8DyBYok$7OMo2~5p;OY9yo0n6 zLzuR~fN!Py(l!j>aeQNxrfo(hZQGF&rj3w_wiWjP&7`xO*+LsJglMxj8JV#+7M&YG zX%KRek{`{N9lN?W$RR3zb40bjG;=182Z1^%J-2S8=TOC zV1^MH4EqjjP4Oxri|H;_i4?`Wq*u5vt)Hnq*bZlUQn^`BTL^2xKP(fM^yeR~43->LgXU zs*D9Gn-Qwq+$v{A6)ejt=R#Obv?uYewqGfq9v2>4ZLvLZ{Q(r`{RYhr?lX)9i%PVwEbG#WgK?-#Kegx5#YY8jmA>tK4HUov z<1Urz?t$|n5MQi{V$x4ncJ!D;!TL6Kld$~ECTU=XdAKY@t_c@NeBj`~PC{i|Kj*d!akvD*?Cr*+yT`*sMYerpe3VTe;;ex+t+sr- zm6(*uU3AL6=lF5wILf}GC>te4^mVDjpj?~J3(OfUGl5eCOiEC=&cmKbZab44Za)FN zk0>CuW}rz>C+hV24Ax&+j=lf_%OB|i4pw=kW^h~zIsIJCne+mP&-2UoNA>HRO9gZ&T8cYk*8{|5UXx)80Pl*fM0cR#9f zFJ-HnE64U{zWY%nscifp|9;MQd#zJo>*daaVACE?ls*MqPJ2WiJ!SIfFISHWJk+j- zN(m*QD{KiRmdGPsg9ohirFeJ;zlmX@xxW|3)UEpSF^&)!#tlYbC@Fa!Fsnos75+p| z5-EL4U<7&(mCLBj0wI$m5kpL(hj@X$6j_yFy$Wz!<8?2=?hn~di5`Iv<7v6VB=x}| zdm?Z#7$suJqrWlQ%3z|uO&;w`@NzNgfc6fAGiYZ7Xdm4Lm?zqa!O-4`6h-^)Q?k%* zijFHn5>gmEfykxkv0z1MdWslK^q0t^oeAEdik?!0Gw5Li=&9Qcm~%4di6BMMQ=65Z zxS+>m0aZa^jlf`UTz-L!%$7P{bh2cWW`jB;;kZd#+8b+K(h@z)w%&@N#mZrEfs!K- zFN-ecrW;)1chOR)UfftzbMN3d|iNzS8h-!MbA z5M5XT=M1-XSpzp$NHRkUbjWTVh-~aY#V`t5z#)PI2`@s}`-qe*@u(uB41FsH8aYEd zQIRGc0AC$tb2+U;m_wnz3G1BJVZ7lmMx4CBGtnx~Ls~~A{*c%Ro&&Lu7;*+;B?#7h z<#=mr>|>1F8oP*(+JTrYFk$yoYbm1afmlRRBv_UXmh0d^tTG5K)S=quUSU-O_oRmV z5l%ADU&fxmLk&gWW}P!2uobd}+*IEWk^RqDUz0nqcx@`pMp#62Sw@rMnUs^Ai+k6P zl4F41xCxazGe=~zpzMmqKt%Jf3$cUTkE$*6 zEE_omJiT9YDcly*qOS^d^44``r*H4K{@>8Ia@Qz|h46`e?1-ZhZ%d%FQ+G2ZxYoE% zsc}BsHVSg{i#g42V;{&Pu@`e%zeOp5!fjMge7N5t)aF-m90|CslIev!r@BR%_SLNh zBv*kTx($48qY1ilGrI^>VFgje_|ojS5xd7YQ4 zNkF|C#N;Xp@36bUV|>07m_!*I;2$7gmGlSvJ=n3$_MNO=5>CRO=3&pWoz7KH^5T+w?i(4+nR7QW| zOc$0}N!%D>J2U5u@DQmS&A=DJRImMz84sV^}4QEfn8{WH8 zgBR}`L=a4?6pqx@NC_k)+KIO7v;VT-57Hbq5<;bc-L+b= z*2%q6+J@$24ktIDsl6qkc+Gt|!PPM6CFEkT_%WJ7IfXBrTd2xrLQwX2`Qq&favE${ zln?F~v7K)zMsl447QEQH*mk_~5o&&TEqqU{!YB0k>&ebiGB{2UKM^Y zEywJ(40)LeHW5?QFxqs245P#XN?59_jBs4?-YXqr-#m-5051^EOpfFy z$MW&{+AC7LuhAfVzy%Y~PACAT)x{Cw)JUJ6vu}m`pQe#wO(<1R+&5BCd?Q`G=Jpq% z_0llfk;@~*s?mNu8`^tesz|G0XBu(2~_$mafOGj73~;(}2jR%gQ8hM0HU@oWXL+b~s7so}aAbG2cV z#w)7mshZ+dYC5J@tjT?>^4yWtITR3)10qa&anmKnk8X54v>NucA^`Sqj6oYF<Zc5*~ceX9~lUYEt|UWUFDf%FzJI4nUNl0bMw zg-cSOQvyL6pjU_lLqrW8-g|Ch!^$ZI;3J37kd-8aBH3UzrGj%nDn>JNTU9Rs$G)$C9!J)R&Fr`^pj%mt0H`gxOAG? zBH2kA)CpibJmP_){Khk|bu@JveoO-u$9c7E>NVk<$;_rit`6du&kv*U6oS0T7DH)j zp5{nMoZhwwH}d8`=i{38a@$>4&IXJL8g*@hqjm#w?;$U!j=^BmDAmD*)Oo7!lXugR zlQ!Xu$Vmr-ups22?x|S+aHgD`jP)4ENjE^U$cdMhlhKfzjAfS-B7vL?;^FQpm3MHI_Jo6@x<0`D@Vg~pU1EMZ2? zKiFG*!`u`Ymm^4q9pIms`Xnp-tI1h3^bJA8Y^bjwLJiO4DKK+HKu|uspvY^PDZC=l zt?|q7OU3_w6e0^X*J3Kk?Ug-(1SfL=;N7M4QXRs@4_A2S14HZPRg$?iaUo)P9d+Ua z)?Z%@iVbjxmP;Edu-_6V5qnsmtPOoaVI#n*#F;90@xza)jq??FXU&iC7p#gCHBZJ6 z$lu0uFcQKB+sRI^{IZG1Zdfx=LwsniQ8GNBtqhSE$WHew!5_XLsgw`7pC^KlxIkzx zr06GD6+cqtILe==sKQW*82`_tNkUk`Q*xjhut?#!_D~-kFAxxBNlZ?BVH2r|Ge6{j zM9EIM$um85y<}qhpeBv-XlFG{e|N$iH#LJPld>?T5XJDI|f{NvY2k8HRH zqu9QwE2VH5N-_Ae6e#uOEI1EqvhLjLqZpY9&j79##CX<*jFo zZ|aNpNUM{`hE~{uF{+xV9|fsOk*Mo6u#??(tBRmK62pSX+#E2X-Wmmi?BP$Z#r`6# zOuE1*@4y>{1qy*|>qlY1S}dcbzumo(U{a34#dT}0#d=a!KLNds0yM6wikKcL!08zz zxFb9AS*eBoLT($CR4M1{3Wb2_(E~#uMM%`<={T*?lawN>4k-eL`YOMQcSmImL1!pp z6ETaRmc#e!>63J{69}gf1yI>zIo#L8*g9q`vJVtM6K=*&z$a`yMuqZm<^;}Q%{#>DLjp+R zNekSogg8Z8m!hrs#y`QPPUQ+NGq!T!S_z4atsQ*TV{50PrdPI)$j#(x&qw{aI0n$4 zt|L)+Z%H@DSLM~#df}JeTCdb{8=%M_j;rkSJP0t^P||pvu!PxA%T_*6HT41Cn2HpX z99QQm_K@J#_zn2QxEg&{4XQk|unoit2AqXOs#hh%%DD#)s;`1A98{UJHSrDn$~PW< zD`V(s*ii5c@)NoAwPIveu)JQ}#>^{4|MjYP6Cg0O9pl@p;zYvXlX3n|4pkERJ^0dw zmRgEv)JiEUy~|%u{)3JF^Khu+HVDOX1lOQLX?g_(0K;+0>(w zk^GQJk1e4g)Vqcu%$#oG#oeg`gl)x$1KW=B&rxh^jWb4#?-IiJE(=r;#Kah;9=hTd zpk&?(ge%VV&js0?M2~qCA6QYBN1T;NsbMlM+2LtvPQlbmj1t-W`hqUZY>%ElI;8P`i;Bm+eYuFNvmzJqGu{B;QLGlDlRY;zNu8!NbHg^9?6`K_{BU<3sCmZqN~QSmkB*FR1L&WNus_apG0-O`^-M z@UNI)k4~U?U-$~E+b*cEwl3uL6Tf#|iRf}gF{DEbx?!YHI(hPEFstV!zo?@vzFP1gz;%z;Mk~$J5 zY|SsSQuC-?Uxq*k7_M4Cg7--bm>KH}_?~>Od{6$Jxu+DbiNa}xjd>>DZteWs! z6#NiH)6gPk^CAZ!x&!fLC2UY%j}0O?dOwgq8&AvIf;|mton#LBEL<9L`4zYZOAm|- z`{UBzBH1ggK}hDv&Rc=bJnz9TpIP1`2SMn#J_7C16MLSV>u*($HhJ(4(@qId6Lm-^ z(Jha77axiKUOeVK=G}%lXRJSo7xN{cf(}U^M3mb4&M$O(-#l34T#zQ>OoY2`5Z+k5 z1AYiW#0=v>cmzin#2AK!V`Br?cJIvhpqB_)5fI3|R;liK#Ei=7!A`Fy`nk z$Gi8C$dF>eM(fL95&rseN%wDOlJ2;$1#3A-f;SXv6mda&Hp>wM_Eks@qhzpqQN{-; zS(U{Naxh@~39(W5u{RBZZbPcX#~oiTq4qjH^ftobFzNx7PnrambPx=4Udc3xidy0? znLtH#8*}rVtBI;zP`Rqf@#!ic_O`!ESfDDrw-{#}Zi<6HsT=VFBO%+T&jYO9mx)!F zwY8;y&5oTTaeCp=u!(*Ku#TFGg+ZqE32T-~d8#!MJp@rrQKjg}Y>FQmu97hC-iCeq zYb84$9rI8T9wwrH7!{YY)`@smFT_6~cu(>M@3g+JR=F7NQs8MXa)uD3ORnL>}={JlsRU zkTL|$>$Qr?pdYY;<(0z7g41v=qH!Xwk8I~%AGp32sGayu`Mm_G$h!oOP>*|$uuD;t zh%*sAY02K8$H^R0efXDbM)8XCOB~7wv!OBuhmW@SdwR97ZG$C z@4)*W@~1}e1J4DLFc1Sa^&w!xoR<~DocB3I;oCxU>o51g_I`2^i4u!_8UKg3cL9&I zsPg}NWS9vEChCas0!C%ra1VkS1R-1kJvh;L0mmE08#{_ZcAQ9D9SCF^y3@Xz-L)ZJ zi7RN9^%5_EFq)YR!c25k0tiIim4J$G^P(FOhlmRQ&-a}7?R59_B%}WJpXW)}{nR<9 zPMxZ^>Qt5INegb>MbyJrhpOY8h&hE;Qhc$q&3v}lsqFD$r`pJNUkd?zROg`#%bI#A+7#aJ z{>f_buyVYbdz19VZY4MzOvdm4)3Py<1*gG4*lDiJuz=_8q4$iKuZM2w+h<(l6749j z?q;vfS(>rz=vFJWXC+vl8ImLx_+fdk)}GpAq6=UAUXkN?aKc-FnHS)MQ!9KJ!|%+7 zIjTRI?C9D(ZUlTglC_(#gtbQWgwxT-Ybw$bO4q!HN^0-dLJ*gFX3xmAe*#4|lso5I zEX+pGYl!2faXT&7F-7W+$;DXGk=kqwC>U%6dd^ z+VR!KiEw1DqmTaiwu>83h<$o~ZDwCRzZQ+6B(W~YC?DNqm%7#K*8)?~x%NMYZ@56r zv->_-yVli)x;APMoV875-*V%Wy)?cR;fYH>czAR;m5^D5Y-I}OKEw%ACOPp$Cjr0_ zuv)g`gNen@ds$11S0ih@QC7-!I@xNzVphuW{3UZd@sFaDCnnA}*+~dqwYvFt-qjME zEz_x0nObUPdhXt2dK9@>;P0x{t+gQCQI)B!R;I61WlGn|l tSu4{!t1_*tmFeWF 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%0ArudyF{CA(3e+&M+Zl15r5i(SRF%5 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ʍN1|6=v5umlXW+4wqW7C(#46z{ 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 z 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

  • 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%0A2q>WIh;-1 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�H`N^2cn62f{pBo>vp~)QISb@0kh4I} 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�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 xVqHJ**%ldvN*!#)8n_7JaA;wK#iz%e{TsjeL> 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

    l|2a6$zd1+r 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О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 k>n+JGTX-ASo35p;Vo;t-ZRg(@|8HV zwsgs}!a3Hi_!5>?Zv@BM4O{7sy|Y{^Yj4g3tVY(IxDw%wXgVdS*1FGIl{E(e*}QR} zU*Z9PR_m@&57$UU4cSgEwDIm86v>pLE_`8<+-BVFIQ6dGBrVw>d9GM?pz6r2rrB}? z-8@=x4rd8*?{kJGi!FAhk(>dw(=su1Zrrq1*UwCocOjn79-^Qxaw<}5Y;vgk=$!N4 zjr?DeC&|4_4Y2t)5@z|$R%IPp6(@&RZd1&BmNPvlbHb~<3}+xO=4wwvv|_66r1Q#> zZl&pnI)!d5Ki0h?KNbn^pQb*a8R5sXQ*)i&dv@*GMFGR6jM8i<`GF{&((|8*9FWsS zjT5Up$brJ^7$58;-}=^iU&D>AZf%nuw#wEq13h_WK6^(qBDc+)wKwOSX*IhR+hZQL zJMN$v()?69dxkrz{Q`@AQcjnRId zNA5ntk-JMs$xOS1_u4`fqD+})-gMGsoua#kwt{>F?F@vlVXxFB>@;#RPVHg0Ty(d2 zGE*nfc)5cZ@bD=5e;MUfF? zx-*7YZdsKx|K&KvwiUOLmzJUwR(X}%d{MBJePwgZLX{dPem#YPtVYfwlgnpK5SKA< zI|Y+y65Yj7GO^qI;}%DHkke_}^PWb?v^1`p3S62dgt7(kYBrBGYNbgyhnmNvV(lS9 zWFp16{I?Dfl3TFeWMVX7CwF#HxzfD+zisSPGZWl8Y{@FYL{FP|KNawF|FCzJJ<5)} z!e$$_9&Ho{^Nu)?l~ln`7rUpEv(n5^XzHN?28eAl%Ryz3>1lS>Dc;GM_bhBk`zA>} z0;B84WX0>A%=Wors^EJBnkX|<6#eN~Nd8rdcyXG9k=)E^aV|$@Q;T57Ew3dkgaSw< zs=^bw+;%pP6ESvNKTL6&ZPNAD&7$=G_wmv#xdM;KgqXIx+h)#lc0`I_n$CMK%A3WX z%|4(L_Ah}Vg>9KadKY!?aufqKPC{DaJCoH;Sj=|n8;%!r7)r|@MksRIc;z?dWjCH0 zopT5CMkpgVz?7r)%|v=q8zQrWnHnERt0QxFn%=PSrBm>@xD4*6uxK0!{3nS6$s zX?N(av(jfUH9M3&n#wnOsb=b(JTL66ikq zU9MV}s<;^>-*wG)XQE~}n;S|UNl`>tDu){+P!Ji#he-TDms#|!nn zWya>3d;Zw<^4e8%1tyJvv&~Gmvv~7pHh-9ANDiA`!Fs25fWnD+?V__-biLJYJCaOK zndNBv)>-{EW6s()&N6co+)}zFElzV~{%wg8QjgZsYS?FiQ zlvC$~mauhao%}A)1~=_xSkv-nooO#!RX6CYz0=NUvPj{SlkLyVGdnoj971$&P0FlNNWhVtsjN0?9BxaUW*d0L*af??bp zp5!16J&%0a1#yK=&?%%gAylFnH( z;u}vNN*9N-J0_E!!JY}K9-(ERGr8r4bIk|H@dB4{qMa*o-d8P`U6WNyyRq4a?G4Q| zs#{_o!1+yU@Kxv%-msI3PWYq?`zg%=E%xcojo)Jaj*KKTv~58s)Yl);(MxyXXfoFv zuusp>Higb{^B2!*nnevp&iS8j*A7M`AHwdO?L25YXvWh=(o~s^&W+rf%4eJD(M9A( z$T(!ioe5`Tx}#<>ae-ct9Mx)O{jYJQhzFyPnws!ZugA*~qp?{&IaYkZXd(9kzRrmx zbSLqQJBK<#5-MU!x;#cRf$K;)g`Q71vx;=Veo7Uwk#EP%d$Y?D2LohUmGjYKz|y6U zcJdg`UR=%2OY6a@iD7T7RCVrFkv&p+qJ5Mn-N;Q;{r;7?!3~ib|!R=D}tljQjexoh(?@HX>9N?=j;jipMY+ zyqTx#k*BnWoi|fk-@bHVU(WPZZ=g+Fs0qps8Bepxe->T3HlzACI9CH`1myw39@$N9zW!dxJSQI$Xsx4H7%*qsa@6-ykOdEm4yO zP9ijft=N!H(PYRlEd*|@t~hw7*~++^42MF&fl&977tT2A-yEkw^O8s;+S_enL}@Z& z_aiM^%@An++_Yptax~pt$Wf`Jg##XxZbcJ{thouABcaKSe0G}mP+CjjYYwQiu_YG* zZ3%^g3@V^zZ|7aNOzqAz^ElKK>hDh7GSwUhEFl*SM;tk)bHux@n2l7H>V?q*rOBKT z(<5F=WQ?YP%q~ri43CJ~&dOjne(9IIZHIYZ{(56Xb4-3XO@|vX*weX0nnR)#H*}_( zMtiLZdQ05@tSRoc*>TM>WzJpUCi&#qwZZB#@Q#0`;!l|^D4YpENzBx{mwLAge#(%N z8&&^sIaFHn?2)_E1?AvW_7Fv-uxE10Ot4yhNIE;h)X4EKaNn3N3-A0ds~f0SNQ1p8 ztbs+&d;nlof@a+g2)eZx)zZnCSsDUJYjX*QD2{KVJ8AqzDOwIkDLNxmds?4*e`ciy z?^)8UY-QsFvQ{Q8j1sf0iBkd7uI5voWplJBMo%oi)`dev#|6blHU4H_NNt~|&*xO3ipBi#<+Qae&Q70BLX z-Z6tyF>g2hI;>$ayp!2XhJq}BHFr0Yv+n)TPG}@dhy0_}o`Ek1;<19|@ zN1|!;0;CI*Y+1|5#}t@HqS0n66Shm1lyOO3t{gk(*!My2=cw5mk~YKe(R>SS>w4Yw z2VTI(%hd!sr`*o&KyPHg`AWj5QL@}cX13LHVJO@ijW(~`9P6*cSl{tpQ5!-t6V7J! z!xRp>kE^|jLT{9|Urf6L2lIQGI(90RIaHkVc~_a3NYDMLTV`mUJ2k|osrS1xoj0>i zQ)cLIYQrLLw`rno%ptW>yT_e_)(Uc|3fsJFyQj!+!3~jdq$aQ?jWj(zUNN(_6N1fYDi5nuBr!?rzrs)JPamCE6s`muH$zHO=9nWOw zaglDeYo|NwL^;jV?sCS&WpS?u&v-&Ttt%{D=Far2(^Yb^^e_eJNu^^}%2FEpinQed z*M-B`-A z($0>Ik|5`nxiM#9(r$7(IM&O((?c#$8eTL?b8;rHOuDALU*b^>?OT_f&}Y<~FT5c& z!J(;fif5%U7RQ*9L1tgsRRyhz=rY4TbTz=oiA2G;Gq=(@_8hFT4!^68|>?;#B@D7JyBYuYu}+#OY>Iu*5RHYE>h zX~&E+mvp_eaBQi9n&wT$JyRQ^)wtHEw32UaClAt`H*?eBzAg)UoUmceP%hO=KSOq| znfEO_btJ{ttiB980~^ySZ@Q(Lo}%{oajE=Ln%V|b;Z9OiM>umV%}va;+AzyPbYt^X z)!bC^P=}v}0Mpd*H(fOv5Yx7dPN6b~{KMvVvr+=Qe2~zI2`KqgkxYhUARFg6Hx;{_Z^9{X=Q`l^FFZOzOZ@y&|P_0HE#W5A4;{kF$ z^J7NO!{owA8J~;Ubwzq1xv?8kQ_e9s4V(!>nMl%cxxeZ6UN(UZPeCigQo#o`ASUPa~oE>vUW|L zf&c;g>{z+z4BDXfV*T&f+cvCSyQdvk`QnzZr#5{E5}{y*1>Mu;8*c4SQ5f}7r^u~I zr}$M(P4Z{rrDk8EA57~d(uXM4!FfeRbf-HT;faNG<5cy7Z!#@XFq0!Ag}G@b9=t_^ z>)bc~^((^{P+_y6X z@d~&@4c*W5a7x1{bU#xhG%JoB@;$fzt%!0o3w80xO4s!zv3sc!5 z6||Jhd)UvU$yeCK!x3Dj%fX749AA3YD|>#LI2yCD-11A8-8)%*8f#j=d=dJ2MefBf zV!r4k*RYcLqSIKza^{OjW9@62FCvkZ7B;U|<@!yPJ&Y-)3%kwRzf5)Nm}{s9FLLrg(k;V@!4r-wt_G6#;nkkTH0BF?xOfds{Ix3ZG}srX2XC*z($QtF51AAa=;p+Ty!elvC68IG%N7c7a8w3 z=OPj+X7?SW4bKGQBOH*(3|nG;aXL!sp=A$&=et=e*CNV1%^C0zbo&934?&ns$GWh*9( zx6!5wTTzGgeJyX*wc?eSy5~0Rnr6+KHmU+xvtes`@z<=~`@*kyvG=8AVRH2yrd8g~ zYPkIrj5jq$qf#P66bQ!qb8Mwx2xoxp4!zC#a1+;TN;qyAX|ARXO`6{Wc7&WLwoCYc zOq|I++H;Ts$6PC&fi%77`Qmj>7mvaplbKy4u<3kW2j{cr1E$T|n0zM1^tie`9QOvt zoSNmEjsrtBCn6#4(RtpDrq7zXwyFG))Y3BKwRUATpXNF|Ojd>G>8skvRVIg0e9 z%->KiQ@TK|iE&esoDVs7AEIxrC#U#;;xuU?7oF7sBD=`kZE`cILr%D-S>QV(4ZgGd zoT9!hJ8@9pJLdy_qk1Jy_cN&8>04mTV$5^|C z5Y8xZRo*q0T*mRw0vl5f571iashuh3>vgI8HZy9qc9b{A?)^^}<}%J9{~!w~N0JWY zN{zCOSKeHg%B1q?F}Hcr1>R0GrL$;h>H(!E(x$7OJ>(IlI`c5~zDGSN>ts(cH^Lt- z8p%1^SB#DN%&uWHT}A)TO*{WPllJ+nS?}nk56vU*eL>42X!{yU-Vvp@-%R$KtK2uy zT`>G`R*qv71iRCiMfE>KbkpZ+(zCBN4~TM}HnDPknwiFA(fMiWRg;^q)>%jb&hk44 zfHH^aG^NIeyI1N70<uK+T@jOLT-I@x#IMCk}pe@|Y zhDvnMJw)3;O{EAm`%)v+`!PGX(`mCg{~NY;I}2#meqRrpMXSlK=KXeqKUw$dx?yID zzD%%0d0svVelhl@=<{oHMjgEoFQ+hri`3TozOM8070<_#=CyfwA9kCTe*kQrci7fd<_h&{iZ#dC~|<}#du({l2+%FAkIe=bi>hbUw?1&_rQSDSWH+Vp}v8j ziqP)?sk@!v5x2&nRkej;GE;N~dr5F(dPJ{G(#Ga)!r>lD*zDWpbdAhsRk~@O(2Qpt zp!P+=B-TA-GK{x~4AF6G_C$gMJ?CEa?6>c-BvK8|AL;3^om0Bl#{eoU%s<*LOv=Ncs>^r zXD*e#E@PZyW=AKx=!APngEyC>qLIZ+)U75Ka!z@+8Kf<8_nHZjSF1!Y+TZW_Z7Yt* zeKems&xz{=5l4VFE+BVIVTb98%8t8XbAsziYN~RywP+z136G3LL?9BjOm;6bcnM#Q zYyseW@<`=_MjnO`+b-!>->BcUFCU+g?IL!_=g+o{Cv&C;t@{lJ$tv{AnpKheDPc?-jBuWztR7|?_>B88N?y=kq zjY^zh;7I-my#t(PZ&;E{LhWF<_uZzp!E?{vcROOAQWGLUx`Jyar|^09V-}Ht{$8n` zXe(^@vR(t*y~^f<*Pmxp=@ zLu$?oL6tOZFWI^Ino#?&s;z>Z+C;LozcOYFw1dvZ8v1yH)Uohv*-kTZ zRDj6iOP>m$e%yZA%UvbI1JMn8Tnj@>67Q;}u{c{{}YxYoRAR^VP385R-9_&CrVY7Q&IC>>-Di%%Hh)W2yzZ zO*hpZwRbF)o{F1~EAE>ZKANRHo6M#QDi(>VSh~;@(zD?Rn{IX|;(dwCHyLSxi>Jj8 zhodSU3X{0E=!f|7&7x1?9ai@%?39RhTUj`4J8edt%5%f)W^ONCIX^Ut#xc96n5)a`aRIP(>leK(RNaM(_{JUtJ8;uo$j05Kwn?T*jr4RZKw67 z!o38&Hx)5Lrtf5zTG~^N8Zx~qVx*{nXkGLu68%9Ecvwa=^p+UEV9PLu?4j&m%L5-6 z2)26$p@E?L4Cpr(0rO>)=D0ZAPuQEOQA-ong^_5`tqbWlYiy2FDF}p|qRp%qUG&+j zxVKD)$Q5BF8ir$XJNTwjqoHuWGc9^xXxDc7t$IU2BhHg7-D8Dfzol!SzikcM#;Mcq zyb`9nPPa*ZffRK?G!5z@*=nP7+$`lS`4R!~Fdf@t8^{|KaGVuxb47O=>_|#t6CQz@UW;x{k?xU-gtb}^yWV0}N2ZJGV zTBo4Qha1{@RO|<&>5^BZAKUC3&8{w+gPFkdo#ysp1~Z|M$=2naO;AXh-)W*!FqWIM zHjLD#Mb4%E4X=)!h4n4dL_3AwvUYpdQ2-OyC@*_OZvtoXb zMDww!zHong+}GpQZQ(u=c?2$3a$MToRM$$jt^~)A z{kG7&f<6w@M;ao3{sHHUIJEe>Idlpev1ZYHAE!beN8%R&k0k^#-kp#Bf-h@FDW%*w@m0Sv%wUBaCtQ z5bmWD>_yq>?wsKGQ)s=N8c3cL&J^k2yS&Hn)={ILCntxThsm`FO}lyTP%j|Ahf^w7 zJzOSnZ)-{Ys5Uom51-qM1e@NkNKiz^C`d&%pjHDz{b9@ScC|}i*d5k|`$*htU=JN* zKZqjpoSpM%v`4Fpw}JCE6p6|;ZKq;s8glu1Aw+k!wmc>AHl^Dd{)Xr-=mXU05gzM1 z3vBip;7naQ%WF2&3t*z^wo;f-j`sB~&h5!q)77CqGS_+t#(anbSn(l%jtCt)FLZ(S z1>c!H>JE0vM`EWIrsLN9j08jO5RiWNFXhrEtM| z4GW2&JvDDdHW(34UwKc9??CGg+XLIiKhWpoxYQrKgSEa>^K5FWk_pS8uM@ht6_9Jv`^%9mDr5M=_^Pg|0b$2qE zO%)d2wlm?a=V@5mF5BtFYrayUHY!?+0+nw}$#yMKN=AU3r|E*-hwO7s*x^J}i8wWn zsm@#KaT<7HTFzZ9eMQJz(JcGuC!?8qR@mx=)SQZhNo0j?V=qZu>LrXCKA;b{mlCx~ zVY9E=@}UL2mvEFWg5lKa$F^;=UR4Lfq`H~W)_@>Hr|de#`wG%Hc*P7R3F}^|&p@Aa zv`Q1j2v91m9jTT{BNBrw*c?%=^N7+sZhNvMLa#2A0Xv9{29!=sxjC4!2U9d{)z=(N z(-tpfFdHOX(vd8eDo$z zH=Qa_{hqx(b(AA^W!;T?M}6*H>@;3TC&bkIp+3)7wye){i2@qKLM_y+ajE~;)_WZ4 zp=&m*{ntAUnpC|#mM9!Y;5bajs~;@4D=v{xGnR;cw-vF*ha}=u*7Oy?Y`)Fx{XnFz zxuiv(KtI7|QEh3=DKNtODnM78M&KLuEZT%P^-$v8M-stX(T7Ll`aUy3-2CDaHFFt_ zAE7V>zKhil@9lI$bh+nIFERMGOzjEx`KT2=MBTbVx7i5G`A6)Hn6svFFL=WUsnfK4 ztz(AN&eK@+eUP{}|3Z>%`{_~|ul8-o0(A=Ugn6294<+rjlp-{_s8iTa*nF3?`K0Mg zvp6dbn+sZTgg#rYBJ`UxeW|+-^6BQ}rPEDb&P5XHrE8k0;=5%g+M)e!H~T~*XMOO_ zDnoBTd|$uExo704kn@Ug+4r!Beq379@Gtq9W_pb;=DLvIEJ{oAQV9QD+38&8c*CG)f(X5n#DrXb|zZ*#pd&DoB@^^4Nfq-~wMCV@r`y~~GEs%{$Od9%y$Jjl8U6$wU3 z#5~1i2YM{hd`fl~H5euxm%cGCI5ExkT4cQqdhfk=s@Q%#dfSOmJYv(~JwPHWbP7pg zL*0+Mq=G6Q=cCMeYjnd>Zk!nyjiWU;u<;}Awi!#Y>8`Q8WS6(@kJ2#=Hdh#L+vD73 z53|iGZB3Pi-gc@XI=08#?dobOG%J<@lHlqD7WVYgiRSz69qiLE+%_gc$B+e^2*>Y+J$d_tG$1AG-Y=2rW!B-rR^vPC70gk0mVv@RljHClYcEHrMQG zw~!^;?!s_CVXCb+9SXKXfo82YxN2YHAe{@Z6cDE^x8^!%7`{xmz2M=y<6< zG)>Oh!Vx2EdW!AB`XlD-vV9jbv|QWWn)Ix>Os{)7M9r%=x;I40J3SAI&~1L1+035O z8KXu@E)={zI_u5SC>=YWAZYiAH}|<2DeqMjO16xtG;b<7=jr~3f&^(ckUsWPe8FfT z_ky%pT0Nai>j;M?Ls_XaIo_PHGoioB-H@DZ_Lgbvw%p_mjWE6C)hg>Wyu=%`M>aID z+^o%u&gWXKBgeausTDJiG4lZC>UBz-?Q`}SW983m!y_@duasR zW13l0wRk@Q?p_>~i_K>^X7^3(ry+h)S2~4)&RJ*D#ye*lG1oZ5Si9dzl)3T}dfhnqy;gw%L(YC1wJD14epMQ)sF*72eJm3P5%pKlIx% zY_n5?of^s)Pvr}%Cuo+xXLAs;9$zzc3Z52NS|X=gIhYtaF1+m`zRbB5+H51@eQhJ6 z&W@}xG30LQ1AXmY7klDLM8?yHD4^YSfY6ja7nfBxUNj50S%SJQK?!Q^J3^CCEm_RY z5{mvepXn_{?X8P?Fq4AlUelMNz-cW>&;Rc+FmRE%BP0sF2 z<%&AEqLof?d6)vW8Xlu zr#U7cr4HQTxU+kcJ5NGOi%DeJ#%`dWB${@3rz<+?lbp2LUH5wOo^lJ1xtjH_6pXRK zmBMHO^t8&Ebi}Yera#3Y(@2kF3%=rMy*NH{O_s!f;|y=^4@@fC_x!TlACKH zO&eq^zgdI*gsDng%0ZRR9HAF^oHmJ{nI55^GdlH1PAYlN?ah~H!GRPmdmXF)aGqn3Iglo9DuGvN_wtX=qvWl|QD`HR&l2?sWXqj^8kqg?DuaG$jUBw$W zHxDq8Di2{ntl7^gx~e!HeB$1j0&-@0%Z#@e(o5tH0BOmMSIqmmQ{PeFL$he{K<03U zmPPH)&g93m)uJdc67smZv}ls|aI<8rzlXw<49#NN(3i5__@xVzt_z#OtE}e%^FHS6 z=KH!1pCDS!^Vq&3rTDhZykGw}f))sKlREBvfk9r5-Vo8&1``&P$?M}r!kQkozFoAC zOlv>WRJM)u=o1Cw=_AADixqk;MG;1Q@=24uGqj6UxARSP(~+SO_1IyRqeV)aMPmJn z1i5ZovULU5t#pTm6+HC%ASo8p(_5s?;&ZvNUT*>Pw!SoLuwuy~iARdZm27na z3^vr`YImo5C_B6!lqelTD~29ceKNGwZ;R|^4|RP5{wRlAc5I@UZTadqZOiXH&<8_t zEci-|r)UhF)$ud+EPGabPe{UBFd}dqHX5ALn;cD(>*tWO6h=*;=tE6F{M-5&UyR!2`^i22@`FV<9!@7u(o5&C?Il8PFWK777W@&#yai^uSQ+F zKC!iL32E_+=3(^M7s6byCo0LI>b+&HykM;u>2LExpM_(7TVk zxvn`3Xn6+Fpc{li&P_W*BXqo3%eK_AndFGx$+ID&(&INrngKXjeHNSyV#KX)v_RtYzE^`#Kec4gG|Lzw4lYDCYHvXI%azfJi!A5zhR zL1Cd>Ficeb0rOF=QTmj!Y{WplXQya59ox-sB{YLw=yL|mkO^AG;AWUP(Z-u95VpGu z_o}q(JkpFeXJBx;`OZD$ca8!&H?wv9U1j7wl&_A=_AwhVc?y*LzMdwZVKD(?{al)n<-|+&&Zc= z?dlKG_Nnv<6M)WJ8v;&g!jnG>&^q~#yYV}ZR-tWEA z7d>)08hIABWeRCt46}n4Ik>$?+Ii|CGL5eBK9Gpf@yOek+WKS!c|F@bOUqR?5cG<8 zdk(b4Exi%W9MuY2F87h3?aNxR5K=5BM1nrN$WFMLWHua5lf=?kD(^gN5 z-ItkfqxekD1zG>Ll!q|f#zPpkip79^7^UMCKYyeR0ma3I+r8uz2uE6In{D>$s5q?V z4a@z}%hp_Oe}LLHl_$py$vEGYaeOa3X6O^1nPSU_KS{1Xyg{xuj{jxs4O&s(}YPlQ}aTppLG#`W})oi+OQNqCvCW{UL;x3(kvdBN7b z=xNN))-;oA8N1NtMlk8ZL@5K zc8ayTDozQqs}>3nLc2XVrN9b&u1g0SP!NZ6AFJNVip0G|G~`%9dz?;~uL)|Yp;Z;cX$cc;L)o2A z7sie_!!cc$o<9;HEzN~Wbkyd}pdB{t(%IZ4YsUFr!ANFiO8X}??%w!@1>I7;=C+1L zMrJaZQzo)5P^x1DQC`9MNW$!N2CQFve=wDE2O3RPl@Z0Csmg+xoFrRY*rjQyI? zv9*iia$m{z)NNkp89ko1X4#+X3T^iPFSWzN`xNlW({#N%A4$%RkW;y~ZwB;i)A;}+ z3G#JV*SGTrL`0;i1Y-WeM&Oa>RCewKzD67*Q@K4}+J~}YhETYK=lyB(c)X{zC9-Fc zNrShEjG{)pihL?9Z`Wzz?8 zX?-Aej)y46o4X~`W)x|&DS-Q$4D>+b=N+8UtM2YyY*s<7Sn5flP2Zn3|AKz3<#ZY7 zwJvL|7Oc~1x!vNEh__mZ&@tCmv#$Rgx=P#3yDzPWLKeK)M|%qCy^@o{dq%Oz0@DLq z{g~gjGt^cqO|v!EA_Pgq`DR^lmJX1kUZdjQVazv^-WR)y%eB_3e8c^ol+} z@kHpD7MCPPDf&P&n*2FS)~K{RKRuor8J!z3E4^1V!D}*n6*-t92uOtu2j*x2=|I=C;Zk5f>IHRLD;Ny zTGt%XdSb~_9#UHqSmfuyC)RcrmbNPMy5k@=!!DL#BfEUtL4IetMjXqu7CY4Kyl7MD z%*<@J{aLgiRhT>Cd%^?#Bl5E+?Ea)LU@49C>aT&Y{-Vh_xrP>#IX{~|-+`d>?#S>^ z%Mh&w3wlbwVp!_cPQ*lxIU1b;3L$rqUOMS1_v7RAUNn0j=B(*gwG{du(b;^T#%J7W z!|Wn&Zm)Sy5fOLVUFv5!1HGYivDjR$L%}Cr>%E;2bB059Qia@zGaDfHPm7DZ7uhAq zoHMnMv!R}DbRW+)?~c5)ZL-v!!S8P;Vs;(d98FvTkBVmpY1%wcViv3~=UFcYbpcaU z-RsLhJ45s7W~uZxDC9W_E3G5#9^EO%#1}olmuKXwrAxt=n?m z4tsilLOi^ht%6S8CBD41xuuq;83xcpV&0cBYN>1){Y0DlY?Du;rM$1+rx9%Jv)Mik zvi`q`FN(6^5f^)+_4kJEPU9_%EhUFyPwaw5$D6*FOY3{FDiEj_X`>nM^U~@P7G$&) zv4-TNrPZOc>z0|M&Y{y@+dY;cniRQkR;)T*3CAPCdn|6FkNJ9gB=ohFc4oqwi{R$; zUh9X6X!m<>)ijwaJ7L^xl( zj*OsBjt);IGrKbSVIYbk@>)+-j;2E{s?FME-Iv9h^<1qpy|iH!Jh7$Yg3Kl)Yx5D> zMUB2+-?k5i7Bt<)Y5G#_A@Z?iX~_nC#r~+4kRV;s-j&FO9+$cdM6}>KHPI4ZWLNF9 z%+fZzhmP0kI-{_KHRTl~NrT9Cd1Y;DLn79Gj60nLb+{iRh3>cMuC30+w&vR=&)dfL zr`mbm$Z`|ZfEyW5?Bkm6iClGdafr~d+iIF05iL2iZ+)n`h*p z@m%3zD(Y>pwLADgkY4N6tuo@fHjN>DJl@;Z&~VCmx7&}jtfsPuM5#cT#oA^9Xvkf5 z7^0fZGbkgmW)5Iinw%odZK~HC21|EsH7LZb+RXeCiM ztD<67V^pNC9!z3DL%^^@A_$@&3I-37fC_sFY$V{AfClyAB_9QIQuk*391;}txVd}q zgOH<;n*?F^3hE` zqUV?&(@#bZxRmsRWEuvWr}gL7MSs7fW#>P4C9~F

    -94}5x}#rfC#+Jf-MtY~f+ zKL@USjO)`g;WyNV!9Q?gSoHgH8g|-Pl#DfH4CR22eE;<`^yQ84tJ}lE&_(oqlm36| zIOtMRpJ*6&@&P{fzt}G^txt8yY@G510BF2l|7tYppXa;H0hbZm0c?Xl0?1tzeI=Lq zN80Rj(Z@PN&mVc8Mcf2^NAxlCt#pEb$KI0kk4{U#Fzn?+_piWdx~64}OcpKBhI+Ad zZujLlfB25@SJJS6<{xK%)c<+$zjRU_Aj4klqp1C#DaZBy{ocjdL^C%WWGAiP&-|GF z+Vl~}seKiyVJPvT_0J}v-^IcQHxpzrGdMpD5`!M-;XG z&;!S>hFvB~J-@OFr-IN&bddQm|4ZI~{kmit2HR2a(bvU$asNMmi2tc;p)>9O3G-w6 mmAA5g?Ve!uk45y${QV3SIElwtkNiI``TetHiu{w-{{I6^1{l}? literal 0 HcmV?d00001 diff --git a/board-support/microchip-atsam/build.zig b/board-support/microchip-atsam/build.zig index 3cbb87b94..d9dbf958e 100644 --- a/board-support/microchip-atsam/build.zig +++ b/board-support/microchip-atsam/build.zig @@ -11,19 +11,28 @@ fn root() []const u8 { const build_root = root(); +pub const chip_atsamd51j19 = .{ + .name = "ATSAMD51J19A", + .url = "https://www.microchip.com/en-us/product/ATSAMD51J19A", + .cpu = .cortex_m4, + .register_definition = .{ + .atdf = .{ .path = build_root ++ "/src/chips/ATSAMD51J19A.atdf" }, + }, + .memory_regions = &.{ + .{ .kind = .flash, .offset = 0x00004000, .length = 512 * 1024 }, // Embedded Flash + .{ .kind = .ram, .offset = 0x20000000, .length = 192 * 1024 }, // Embedded SRAM + .{ .kind = .ram, .offset = 0x47000000, .length = 8 * 1024 }, // Backup SRAM + .{ .kind = .flash, .offset = 0x00804000, .length = 512 }, // NVM User Row + }, +}; + pub const chips = struct { pub const atsamd51j19 = .{ - .name = "ATSAMD51J19A", - .url = "https://www.microchip.com/en-us/product/ATSAMD51J19A", - .cpu = .cortex_m4, - .register_definition = .{ - .atdf = .{ .path = build_root ++ "/src/chips/ATSAMD51J19A.atdf" }, - }, - .memory_regions = &.{ - .{ .kind = .flash, .offset = 0x00004000, .length = 512 * 1024 }, // Embedded Flash - .{ .kind = .ram, .offset = 0x20000000, .length = 192 * 1024 }, // Embedded SRAM - .{ .kind = .ram, .offset = 0x47000000, .length = 8 * 1024 }, // Backup SRAM - .{ .kind = .flash, .offset = 0x00804000, .length = 512 }, // NVM User Row - }, + .preferred_format = .elf, + .chip = chip_atsamd51j19, }; }; + +pub const boards = struct { + // empty right now +}; diff --git a/board-support/raspberrypi-rp2040/build.zig b/board-support/raspberrypi-rp2040/build.zig index cb3c13fcf..05fdad2e6 100644 --- a/board-support/raspberrypi-rp2040/build.zig +++ b/board-support/raspberrypi-rp2040/build.zig @@ -1,5 +1,5 @@ const std = @import("std"); -const microzig = @import("root").dependencies.imports.microzig; // HACK: Please import MicroZig always under the name `microzig`. Otherwise the RP2040 module will fail to be properly imported. +const microzig = @import("microzig"); fn root() []const u8 { return comptime (std.fs.path.dirname(@src().file) orelse "."); diff --git a/board-support/stmicro-stm32/build.zig b/board-support/stmicro-stm32/build.zig index 410578209..dcbf169ab 100644 --- a/board-support/stmicro-stm32/build.zig +++ b/board-support/stmicro-stm32/build.zig @@ -1,5 +1,5 @@ const std = @import("std"); -const microzig = @import("root").dependencies.imports.microzig; // HACK: Please import MicroZig always under the name `microzig`. Otherwise the RP2040 module will fail to be properly imported. +const microzig = @import("microzig"); fn root() []const u8 { return comptime (std.fs.path.dirname(@src().file) orelse "."); diff --git a/tools/bundle.sh b/tools/bundle.sh index 22b94eef9..fbb61f60e 100755 --- a/tools/bundle.sh +++ b/tools/bundle.sh @@ -86,6 +86,7 @@ for dir in $(find -type f -name microzig-package.json -exec dirname '{}' ';'); d out_dir="" out_basename="" + extra_json="{}" case "${pkg_type}" in core) @@ -96,6 +97,17 @@ for dir in $(find -type f -name microzig-package.json -exec dirname '{}' ';'); d board-support) out_dir="${deploy_target}/board-support/$(dirname "${pkg_name}")" out_basename="$(basename "${pkg_name}")" + + extra_json="$( + zig run \ + "${repo_root}/tools/extract-bsp-info.zig" \ + --cache-dir "${repo_root}/zig-cache" \ + --deps bsp,microzig \ + --mod "bsp:microzig:${dir}/build.zig" \ + --mod "microzig:uf2:${repo_root}/core/build.zig" \ + --mod "uf2::${repo_root}/tools/lib/dummy_uf2.zig" \ + )" + ;; *) @@ -132,7 +144,8 @@ for dir in $(find -type f -name microzig-package.json -exec dirname '{}' ';'); d --arg fhash "${file_hash}" \ --arg fsize "${file_size}" \ --argjson pkg "${pkg_info}" \ - '. + { + --argjson extra "${extra_json}" \ + '. + $extra + { version: $vers, created: { unix: $ts_unix, @@ -152,6 +165,5 @@ for dir in $(find -type f -name microzig-package.json -exec dirname '{}' ';'); d ln -s "${all_files_dir}/${out_fullname}" "${out_name}" ln -s "${all_files_dir}/${out_fullmeta}" "${out_meta}" ) - ) done diff --git a/tools/create-package.sh b/tools/create-package.sh index e22a67c8f..0dd9e821f 100755 --- a/tools/create-package.sh +++ b/tools/create-package.sh @@ -40,6 +40,3 @@ fi # https://stackoverflow.com/a/53083343 tar -caf "${output_file}" $(git ls-files -- . ':!:microzig-package.json') ) - -# echo "included files:" -# tar -tf "${output_file}" diff --git a/tools/extract-bsp-info.zig b/tools/extract-bsp-info.zig new file mode 100644 index 000000000..565c3d0cb --- /dev/null +++ b/tools/extract-bsp-info.zig @@ -0,0 +1,102 @@ +//! +//! A tool that extracs which chips and boards are avaiilable from a board support package +//! and validates that the declarations conform +//! + +const std = @import("std"); +const bsp = @import("bsp"); +const microzig = @import("microzig"); + +const JsonTarget = struct { + id: []const u8, + + output_format: ?[]const u8, + + features: struct { + hal: bool, + }, + + memory: struct { + flash: u64, + ram: u64, + }, + + cpu: []const u8, + + chip: []const u8, + chip_url: ?[]const u8, + + board: ?[]const u8, + board_url: ?[]const u8, +}; + +fn renderMicroZigTarget(stream: anytype, key: []const u8, target: microzig.Target) !void { + var jtarget = JsonTarget{ + .id = key, + + .output_format = if (target.preferred_format) |fmt| @tagName(fmt) else null, + + .features = .{ + .hal = (target.hal != null), + }, + + .cpu = @tagName(target.chip.cpu), + + .chip = target.chip.name, + .chip_url = target.chip.url, + + .board = null, + .board_url = null, + + .memory = .{ + .flash = 0, + .ram = 0, + }, + }; + + if (target.board) |brd| { + jtarget.board = brd.name; + jtarget.board_url = brd.url; + } + + for (target.chip.memory_regions) |reg| { + switch (reg.kind) { + .flash => jtarget.memory.flash += reg.length, + .ram => jtarget.memory.flash += reg.length, + else => {}, + } + } + + try std.json.stringify(jtarget, .{}, stream); +} + +fn renderTargetArray(stream: anytype, comptime array: type) !void { + inline for (comptime std.meta.declarations(array), 0..) |fld, i| { + if (i > 0) try stream.writeAll(","); + const target = comptime @field(array, fld.name); + + if (@TypeOf(target) == type) { + // recurse + try renderTargetArray(stream, target); + } else { + try renderMicroZigTarget( + stream, + fld.name, + target, + ); + } + } +} + +pub fn main() !void { + var stdout = std.io.getStdOut().writer(); + + try stdout.writeAll("{ \"board-support\": {"); + + try stdout.writeAll("\"chips\":["); + try renderTargetArray(stdout, bsp.chips); + try stdout.writeAll("],\"boards\":["); + try renderTargetArray(stdout, bsp.boards); + + try stdout.writeAll("]}}"); +} diff --git a/tools/lib/dummy_uf2.zig b/tools/lib/dummy_uf2.zig new file mode 100644 index 000000000..3e50f6105 --- /dev/null +++ b/tools/lib/dummy_uf2.zig @@ -0,0 +1,5 @@ +//! +//! Only required for the BSP info tooling, fakes everything we need to make the build work +//! + +pub const FamilyId = enum { RP2040 }; From 2f6a61e6ae2f72957cd846c6512e819231dfdcc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Thu, 4 Jan 2024 12:58:26 +0100 Subject: [PATCH 252/286] Fixes GitHub CI --- .github/workflows/build.yml | 46 ++++++++++++++++++------------------- tools/bundle.sh | 8 +++---- tools/create-package.sh | 2 +- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 720973f40..e697a7464 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,4 +1,5 @@ -name: Build +name: Continuous Integration + on: push: branches: [main] @@ -6,33 +7,32 @@ on: branches: [main] jobs: - build: - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - dir: - - all-platforms - - raspberrypi-rp2040 - - espressif-esp - - nxp-lpc - - microchip-atmega - - gigadevice-gd32 - - nordic-nrf5x - - stmicro-stm32 - os: - - windows-latest - - macos-latest - - ubuntu-latest + generate-packages: + runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 + with: + fetch-tags: true # required for "git describe" + + - name: Fetch more data from git + run: | + # fetch everything back till the 0.11.0 tag. + # https://stackoverflow.com/a/58082274 + git fetch --shallow-exclude 0.11.0 + git fetch --deepen=2 - name: Setup Zig uses: goto-bus-stop/setup-zig@v2 with: version: 0.11.0 - - name: Build examples - working-directory: ${{ matrix.dir }} - run: zig build + - name: Generate and validate packages + run: | + ./tools/bundle.sh + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: packages + path: microzig-deploy/ diff --git a/tools/bundle.sh b/tools/bundle.sh index fbb61f60e..3f19239f1 100755 --- a/tools/bundle.sh +++ b/tools/bundle.sh @@ -5,14 +5,14 @@ # Creates all packages into /microzig-deploy with the final folder structure. # -set -euo pipefail +set -eu all_files_dir=".data" # test for all required tools: which zig date find jq mkdir dirname realpath > /dev/null -[ "$(zig version)" == "0.11.0" ] +[ "$(zig version)" = "0.11.0" ] repo_root="$(dirname "$(dirname "$(realpath "$0")")")" [ -d "${repo_root}" ] @@ -32,7 +32,7 @@ git_description="$(git describe --match "*.*.*" --tags --abbrev=9)" version="" # render-version -function render_version() +render_version() { [ "$#" -eq 5 ] echo "$1.$2.$3-$4-$5" @@ -132,7 +132,7 @@ for dir in $(find -type f -name microzig-package.json -exec dirname '{}' ';'); d create_package "${dir}" "${out_path}" # get some required metadata - file_hash=($(sha256sum "${out_path}" | cut -f 1)) + file_hash="$(sha256sum "${out_path}" | cut -d " " -f 1)" file_size="$(stat --format="%s" "${out_path}")" pkg_info="$(archive_info ${out_path})" diff --git a/tools/create-package.sh b/tools/create-package.sh index 0dd9e821f..1eaf96b80 100755 --- a/tools/create-package.sh +++ b/tools/create-package.sh @@ -1,6 +1,6 @@ #!/bin/sh -set -euo pipefail +set -eu # test for all required tools: which tar gzip jq basename dirname realpath > /dev/null From 3fdc016ef368fc6e75f665c0e6c388530480f4df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Thu, 4 Jan 2024 13:50:35 +0100 Subject: [PATCH 253/286] Adds CI to readme. --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 289bc4454..db1040d1d 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # MicroZig +[![Continuous Integration](https://github.com/ZigEmbeddedGroup/microzig-monorepo/actions/workflows/build.yml/badge.svg)](https://github.com/ZigEmbeddedGroup/microzig-monorepo/actions/workflows/build.yml) + ## Overview - `core/` contains the shared components of MicroZig. @@ -17,3 +19,12 @@ Zigs versions, but with our own commit abbreviations and counters. As MicroZig sticks to tagged Zig releases, `${zig_version}` will show to which Zig version the MicroZig build is compatible. Consider the version `0.11.0-abcdef-123` means that this MicroZig version has a commit starting with `abcdef`, which was the 123rd commit of the version that is compatible with Zig 0.11.0. + +## TODO (before exchanging upstream) + +- Integrate https://github.com/ZigEmbeddedGroup/microzig-driver-framework as package +- Create support for nice GitHub badges +- validate that the table on https://github.com/ZigEmbeddedGroup is correct (in CI) +- make system build again properly +- start porting everything to 0.12/unstable + From bb2b13227b1d2d4a0735dfce4ac32584b59623b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Sun, 7 Jan 2024 20:56:48 +0100 Subject: [PATCH 254/286] Snapshot for transfer --- build/README.md | 4 + build/build.zig | 979 ++++++++++++++++++++++++++++++++ build/build.zig.zon | 29 + build/microzig-package.json | 4 + examples/modular/README.md | 5 + examples/modular/build.zig | 33 ++ examples/modular/build.zig.zon | 14 + examples/modular/src/blinky.zig | 56 ++ 8 files changed, 1124 insertions(+) create mode 100644 build/README.md create mode 100644 build/build.zig create mode 100644 build/build.zig.zon create mode 100644 build/microzig-package.json create mode 100644 examples/modular/README.md create mode 100644 examples/modular/build.zig create mode 100644 examples/modular/build.zig.zon create mode 100644 examples/modular/src/blinky.zig diff --git a/build/README.md b/build/README.md new file mode 100644 index 000000000..0f1955c0d --- /dev/null +++ b/build/README.md @@ -0,0 +1,4 @@ +# MicroZig Build Support + +This package is meant to provide build utilities to create embedded firmware easily. + diff --git a/build/build.zig b/build/build.zig new file mode 100644 index 000000000..748833fd4 --- /dev/null +++ b/build/build.zig @@ -0,0 +1,979 @@ +//! Some words on the build script here: +//! We cannot use a test runner here as we're building for freestanding. +//! This means we need to use addExecutable() instead of using + +const std = @import("std"); +const uf2 = @import("uf2"); + +//////////////////////////////////////// +// MicroZig Gen 2 Interface // +//////////////////////////////////////// + +fn root() []const u8 { + return comptime (std.fs.path.dirname(@src().file) orelse "."); +} +const build_root = root(); + +const MicroZig = @This(); + +b: *std.Build, +self: *std.Build.Dependency, + +/// Creates a new instance of the MicroZig build support. +/// +/// This is necessary as we need to keep track of some internal state to prevent +/// duplicated work per firmware built. +pub fn init(b: *std.Build, dependency_name: []const u8) *MicroZig { + const mz = b.allocator.create(MicroZig) catch @panic("out of memory"); + mz.* = MicroZig{ + .b = b, + .self = b.dependency(dependency_name, .{}), + }; + return mz; +} + +/// This build script validates usage patterns we expect from MicroZig +pub fn build(b: *std.Build) !void { + const uf2_dep = b.dependency("uf2", .{}); + + const build_test = b.addTest(.{ + .root_source_file = .{ .path = "build.zig" }, + }); + + build_test.addAnonymousModule("uf2", .{ + .source_file = .{ .cwd_relative = uf2_dep.builder.pathFromRoot("build.zig") }, + }); + + const install_docs = b.addInstallDirectory(.{ + .source_dir = build_test.getEmittedDocs(), + .install_dir = .prefix, + .install_subdir = "docs", + }); + + b.getInstallStep().dependOn(&install_docs.step); + + // const backings = @import("test/backings.zig"); + // const optimize = b.standardOptimizeOption(.{}); + + // const minimal = addEmbeddedExecutable(b, .{ + // .name = "minimal", + // .source_file = .{ + // .path = comptime root_dir() ++ "/test/programs/minimal.zig", + // }, + // .backing = backings.minimal, + // .optimize = optimize, + // }); + + // const has_hal = addEmbeddedExecutable(b, .{ + // .name = "has_hal", + // .source_file = .{ + // .path = comptime root_dir() ++ "/test/programs/has_hal.zig", + // }, + // .backing = backings.has_hal, + // .optimize = optimize, + // }); + + // const has_board = addEmbeddedExecutable(b, .{ + // .name = "has_board", + // .source_file = .{ + // .path = comptime root_dir() ++ "/test/programs/has_board.zig", + // }, + // .backing = backings.has_board, + // .optimize = optimize, + // }); + + // const core_tests = b.addTest(.{ + // .root_source_file = .{ + // .path = comptime root_dir() ++ "/src/core.zig", + // }, + // .optimize = optimize, + // }); + + // const test_step = b.step("test", "build test programs"); + // test_step.dependOn(&minimal.inner.step); + // test_step.dependOn(&has_hal.inner.step); + // test_step.dependOn(&has_board.inner.step); + // test_step.dependOn(&b.addRunArtifact(core_tests).step); +} + +/// The resulting binary format for the firmware file. +/// A lot of embedded systems don't use plain ELF files, thus we provide means +/// to convert the resulting ELF into other common formats. +pub const BinaryFormat = union(enum) { + /// [Executable and Linkable Format](https://en.wikipedia.org/wiki/Executable_and_Linkable_Format), the standard output from the compiler. + elf, + + /// A flat binary, contains only the loaded portions of the firmware with an unspecified base offset. + bin, + + /// The [Intel HEX](https://en.wikipedia.org/wiki/Intel_HEX) format, contains + /// an ASCII description of what memory to load where. + hex, + + /// A [Device Firmware Upgrade](https://www.usb.org/sites/default/files/DFU_1.1.pdf) file. + dfu, + + /// The [USB Flashing Format (UF2)](https://github.com/microsoft/uf2) designed by Microsoft. + uf2: uf2.FamilyId, + + /// The [firmware format](https://docs.espressif.com/projects/esptool/en/latest/esp32/advanced-topics/firmware-image-format.html) used by the [esptool](https://github.com/espressif/esptool) bootloader. + esp, + + /// Custom option for non-standard formats. + custom: *Custom, + + /// Returns the standard extension for the resulting binary file. + pub fn getExtension(format: BinaryFormat) []const u8 { + return switch (format) { + .elf => ".elf", + .bin => ".bin", + .hex => ".hex", + .dfu => ".dfu", + .uf2 => ".uf2", + .esp => ".bin", + + .custom => |c| c.extension, + }; + } + + pub const Custom = struct { + /// The standard extension of the format. + extension: []const u8, + + /// A function that will convert a given `elf` file into the custom output format. + /// + /// The `*Custom` format is passed so contextual information can be obtained by using + /// `@fieldParentPtr` to provide access to tooling. + convert: *const fn (*Custom, elf: std.Build.LazyPath) std.Build.LazyPath, + }; + + const Enum = std.meta.Tag(BinaryFormat); + + const Context = struct { + pub fn hash(self: @This(), fmt: BinaryFormat) u32 { + _ = self; + + var hasher = std.hash.XxHash32.init(0x1337_42_21); + + hasher.update(@tagName(fmt)); + + switch (fmt) { + .elf, .bin, .hex, .dfu, .esp => |val| { + if (@TypeOf(val) != void) @compileError("Missing update: Context.hash now requires special care!"); + }, + + .uf2 => |family_id| hasher.update(@tagName(family_id)), + .custom => |custom| hasher.update(std.mem.asBytes(custom)), + } + + return hasher.final(); + } + + pub fn eql(self: @This(), fmt_a: BinaryFormat, fmt_b: BinaryFormat, index: usize) bool { + _ = self; + _ = index; + if (@as(BinaryFormat.Enum, fmt_a) != @as(BinaryFormat.Enum, fmt_b)) + return false; + + return switch (fmt_a) { + .elf, .bin, .hex, .dfu, .esp => |val| { + if (@TypeOf(val) != void) @compileError("Missing update: Context.eql now requires special care!"); + return true; + }, + + .uf2 => |a| (a == fmt_b.uf2), + .custom => |a| (a == fmt_b.custom), + }; + } + }; +}; + +/// The CPU model a target uses. +/// +/// The CPUs usually require special care on how to do interrupts, and getting an entry point. +/// +/// MicroZig officially only supports the CPUs listed here, but other CPUs might be provided +/// via the `custom` field. +pub const CpuModel = union(enum) { + avr5, + cortex_m0, + cortex_m0plus, + cortex_m3, + cortex_m4, + riscv32_imac, + + custom: *const Cpu, + + pub fn getDescriptor(model: CpuModel) *const Cpu { + return switch (@as(std.meta.Tag(CpuModel), model)) { + inline else => |tag| &@field(cpus, @tagName(tag)), + .custom => model.custom, + }; + } +}; + +/// A cpu descriptor. +pub const Cpu = struct { + /// Display name of the CPU. + name: []const u8, + + /// Source file providing startup code and memory initialization routines. + source_file: std.build.LazyPath, + + /// The compiler target we use to compile all the code. + target: std.zig.CrossTarget, +}; + +/// A descriptor for memory regions in a microcontroller. +pub const MemoryRegion = struct { + /// The type of the memory region for generating a proper linker script. + kind: Kind, + offset: u64, + length: u64, + + pub const Kind = union(enum) { + /// This is a (normally) immutable memory region where the code is stored. + flash, + + /// This is a mutable memory region for data storage. + ram, + + /// This is a memory region that maps MMIO devices. + io, + + /// This is a memory region that exists, but is reserved and must not be used. + reserved, + + /// This is a memory region used for internal linking tasks required by the board support package. + private: PrivateRegion, + }; + + pub const PrivateRegion = struct { + /// The name of the memory region. Will not have an automatic numeric counter and must be unique. + name: []const u8, + + /// Is the memory region executable? + executable: bool, + + /// Is the memory region readable? + readable: bool, + + /// Is the memory region writable? + writeable: bool, + }; +}; + +/// Defines a custom microcontroller. +pub const Chip = struct { + /// The display name of the controller. + name: []const u8, + + /// (optional) link to the documentation/vendor page of the controller. + url: ?[]const u8 = null, + + /// The cpu model this controller uses. + cpu: CpuModel, + + /// The provider for register definitions. + register_definition: union(enum) { + /// Use `regz` to create a zig file from a JSON schema. + json: std.Build.LazyPath, + + /// Use `regz` to create a json file from a SVD schema. + svd: std.Build.LazyPath, + + /// Use `regz` to create a zig file from an ATDF schema. + atdf: std.Build.LazyPath, + + /// Use the provided file directly as the chip file. + zig: std.Build.LazyPath, + }, + + /// The memory regions that are present in this chip. + memory_regions: []const MemoryRegion, +}; + +/// Defines a hardware abstraction layer. +pub const HardwareAbstractionLayer = struct { + /// Root source file for this HAL. + source_file: std.Build.LazyPath, +}; + +/// Provides a description of a board. +/// +/// Boards provide additional information to a chip and HAL package. +/// For example, they can list attached peripherials, external crystal frequencies, +/// flash sizes, ... +pub const BoardDefinition = struct { + /// Display name of the board + name: []const u8, + + /// (optional) link to the documentation/vendor page of the board. + url: ?[]const u8 = null, + + /// Provides the root file for the board definition. + source_file: std.Build.LazyPath, +}; + +/// The linker script used to link the firmware. +pub const LinkerScript = union(enum) { + /// Auto-generated linker script derived from the memory regions of the chip. + generated, + + /// Externally defined linker script. + source_file: std.build.LazyPath, +}; + +/// A compilation target for MicroZig. Provides information about the chip, +/// hal, board and so on. +/// +/// This is used instead of `std.zig.CrossTarget` to define a MicroZig Firmware. +pub const Target = struct { + /// The preferred binary format of this MicroZig target. If `null`, the user must + /// explicitly give the `.format` field during a call to `getEmittedBin()` or installation steps. + preferred_format: ?BinaryFormat, + + /// The chip this target uses, + chip: Chip, + + /// Usually, embedded projects are single-threaded and single-core applications. Platforms that + /// support multiple CPUs should set this to `false`. + single_threaded: bool = true, + + /// Determines whether the compiler_rt package is bundled with the application or not. + /// This should always be true except for platforms where compiler_rt cannot be built right now. + bundle_compiler_rt: bool = true, + + /// (optional) Provides a default hardware abstraction layer that is used. + /// If `null`, no `microzig.hal` will be available. + hal: ?HardwareAbstractionLayer = null, + + /// (optional) Provides description of external hardware and connected devices + /// like oscillators and such. + /// + /// This structure isn't used by MicroZig itself, but can be utilized from the HAL + /// if present. + board: ?BoardDefinition = null, + + /// (optional) Provide a custom linker script for the hardware or define a custom generation. + linker_script: LinkerScript = .generated, + + /// (optional) Further configures the created firmware depending on the chip and/or board settings. + /// This can be used to set/change additional properties on the created `*Firmware` object. + configure: ?*const fn (host_build: *std.Build, *Firmware) void = null, + + /// (optional) Post processing step that will patch up and modify the elf file if necessary. + binary_post_process: ?*const fn (host_build: *std.Build, std.Build.LazyPath) std.Build.LazyPath = null, +}; + +/// Options to the `addFirmware` function. +pub const FirmwareOptions = struct { + /// The name of the firmware file. + name: []const u8, + + /// The MicroZig target that the firmware is built for. Either a board or a chip. + target: Target, + + /// The optimization level that should be used. Usually `ReleaseSmall` or `Debug` is a good choice. + /// Also using `std.Build.standardOptimizeOption` is a good idea. + optimize: std.builtin.OptimizeMode, + + /// The root source file for the application. This is your `src/main.zig` file. + source_file: std.Build.LazyPath, + + // Overrides: + + /// If set, overrides the `single_threaded` property of the target. + single_threaded: ?bool = null, + + /// If set, overrides the `bundle_compiler_rt` property of the target. + bundle_compiler_rt: ?bool = null, + + /// If set, overrides the `hal` property of the target. + hal: ?HardwareAbstractionLayer = null, + + /// If set, overrides the `board` property of the target. + board: ?BoardDefinition = null, + + /// If set, overrides the `linker_script` property of the target. + linker_script: ?LinkerScript = null, +}; + +/// Declares a new MicroZig firmware file. +pub fn addFirmware( + /// The MicroZig instance that should be used to create the firmware. + mz: *MicroZig, + /// The instance of the `build.zig` that is calling this function. + host_build: *std.Build, + /// Options that define how the firmware is built. + options: FirmwareOptions, +) *Firmware { + const micro_build = mz.self.builder; + + const chip = &options.target.chip; + const cpu = chip.cpu.getDescriptor(); + const maybe_hal = options.hal orelse options.target.hal; + const maybe_board = options.board orelse options.target.board; + + const linker_script = options.linker_script orelse options.target.linker_script; + + // TODO: let the user override which ram section to use the stack on, + // for now just using the first ram section in the memory region list + const first_ram = blk: { + for (chip.memory_regions) |region| { + if (region.kind == .ram) + break :blk region; + } else @panic("no ram memory region found for setting the end-of-stack address"); + }; + + // On demand, generate chip definitions via regz: + const chip_source = switch (chip.register_definition) { + .json, .atdf, .svd => |file| blk: { + const regz_exe = mz.dependency("regz", .{ .optimize = .ReleaseSafe }).artifact("regz"); + + const regz_gen = host_build.addRunArtifact(regz_exe); + + regz_gen.addArg("--schema"); // Explicitly set schema type, one of: svd, atdf, json + regz_gen.addArg(@tagName(chip.register_definition)); + + regz_gen.addArg("--output_path"); // Write to a file + const zig_file = regz_gen.addOutputFileArg("chip.zig"); + + regz_gen.addFileArg(file); + + break :blk zig_file; + }, + + .zig => |src| src, + }; + + const config = host_build.addOptions(); + config.addOption(bool, "has_hal", (maybe_hal != null)); + config.addOption(bool, "has_board", (maybe_board != null)); + + config.addOption(?[]const u8, "board_name", if (maybe_board) |brd| brd.name else null); + + config.addOption([]const u8, "chip_name", chip.name); + config.addOption([]const u8, "cpu_name", chip.name); + config.addOption(usize, "end_of_stack", first_ram.offset + first_ram.length); + + const fw: *Firmware = host_build.allocator.create(Firmware) catch @panic("out of memory"); + fw.* = Firmware{ + .mz = mz, + .host_build = host_build, + .artifact = host_build.addExecutable(.{ + .name = options.name, + .optimize = options.optimize, + .target = cpu.target, + .linkage = .static, + .root_source_file = .{ .cwd_relative = mz.self.builder.pathFromRoot("src/start.zig") }, + }), + .target = options.target, + .output_files = Firmware.OutputFileMap.init(host_build.allocator), + + .config = config, + + .modules = .{ + .microzig = micro_build.createModule(.{ + .source_file = .{ .cwd_relative = micro_build.pathFromRoot("src/microzig.zig") }, + .dependencies = &.{ + .{ + .name = "config", + .module = micro_build.createModule(.{ .source_file = config.getSource() }), + }, + }, + }), + + .cpu = undefined, + .chip = undefined, + + .board = null, + .hal = null, + + .app = undefined, + }, + }; + errdefer fw.output_files.deinit(); + + fw.modules.chip = micro_build.createModule(.{ + .source_file = chip_source, + .dependencies = &.{ + .{ .name = "microzig", .module = fw.modules.microzig }, + }, + }); + fw.modules.microzig.dependencies.put("chip", fw.modules.chip) catch @panic("out of memory"); + + fw.modules.cpu = micro_build.createModule(.{ + .source_file = cpu.source_file, + .dependencies = &.{ + .{ .name = "microzig", .module = fw.modules.microzig }, + }, + }); + fw.modules.microzig.dependencies.put("cpu", fw.modules.cpu) catch @panic("out of memory"); + + if (maybe_hal) |hal| { + fw.modules.hal = micro_build.createModule(.{ + .source_file = hal.source_file, + .dependencies = &.{ + .{ .name = "microzig", .module = fw.modules.microzig }, + }, + }); + fw.modules.microzig.dependencies.put("hal", fw.modules.hal.?) catch @panic("out of memory"); + } + + if (maybe_board) |brd| { + fw.modules.board = micro_build.createModule(.{ + .source_file = brd.source_file, + .dependencies = &.{ + .{ .name = "microzig", .module = fw.modules.microzig }, + }, + }); + fw.modules.microzig.dependencies.put("board", fw.modules.board.?) catch @panic("out of memory"); + } + + fw.modules.app = host_build.createModule(.{ + .source_file = options.source_file, + .dependencies = &.{ + .{ .name = "microzig", .module = fw.modules.microzig }, + }, + }); + + const umm = mz.dependency("umm-zig", .{}).module("umm"); + fw.modules.microzig.dependencies.put("umm", umm) catch @panic("out of memory"); + + fw.artifact.addModule("app", fw.modules.app); + fw.artifact.addModule("microzig", fw.modules.microzig); + + fw.artifact.strip = false; // we always want debug symbols, stripping brings us no benefit on embedded + fw.artifact.single_threaded = options.single_threaded orelse fw.target.single_threaded; + fw.artifact.bundle_compiler_rt = options.bundle_compiler_rt orelse fw.target.bundle_compiler_rt; + + switch (linker_script) { + .generated => { + fw.artifact.setLinkerScript( + generateLinkerScript(host_build, chip.*) catch @panic("out of memory"), + ); + }, + + .source_file => |source| { + fw.artifact.setLinkerScriptPath(source); + }, + } + + if (options.target.configure) |configure| { + configure(host_build, fw); + } + + return fw; +} + +/// Configuration options for firmware installation. +pub const InstallFirmwareOptions = struct { + /// Overrides the output format for the binary. If not set, the standard preferred file format for the firmware target is used. + format: ?BinaryFormat = null, +}; + +/// Adds a new dependency to the `install` step that will install the `firmware` into the folder `$prefix/firmware`. +pub fn installFirmware( + /// The MicroZig instance that was used to create the firmware. + mz: *MicroZig, + /// The instance of the `build.zig` that should perform installation. + b: *std.Build, + /// The firmware that should be installed. Please make sure that this was created with the same `MicroZig` instance as `mz`. + firmware: *Firmware, + /// Optional configuration of the installation process. Pass `.{}` if you're not sure what to do here. + options: InstallFirmwareOptions, +) void { + std.debug.assert(mz == firmware.mz); + const install_step = addInstallFirmware(mz, b, firmware, options); + b.getInstallStep().dependOn(&install_step.step); +} + +/// Creates a new `std.Build.Step.InstallFile` instance that will install the given firmware to `$prefix/firmware`. +/// +/// **NOTE:** This does not actually install the firmware yet. You have to add the returned step as a dependency to another step. +/// If you want to just install the firmware, use `installFirmware` instead! +pub fn addInstallFirmware( + /// The MicroZig instance that was used to create the firmware. + mz: *MicroZig, + /// The instance of the `build.zig` that should perform installation. + b: *std.Build, + /// The firmware that should be installed. Please make sure that this was created with the same `MicroZig` instance as `mz`. + firmware: *Firmware, + /// Optional configuration of the installation process. Pass `.{}` if you're not sure what to do here. + options: InstallFirmwareOptions, +) *std.Build.Step.InstallFile { + const format = firmware.resolveFormat(options.format); + + const basename = b.fmt("{s}{s}", .{ + firmware.artifact.name, + format.getExtension(), + }); + + _ = mz; + + return b.addInstallFileWithDir(firmware.getEmittedBin(format), .{ .custom = "firmware" }, basename); +} + +/// Declaration of a firmware build. +pub const Firmware = struct { + const OutputFileMap = std.ArrayHashMap(BinaryFormat, std.Build.LazyPath, BinaryFormat.Context, false); + + const Modules = struct { + app: *std.Build.Module, + cpu: *std.Build.Module, + chip: *std.Build.Module, + board: ?*std.Build.Module, + hal: ?*std.Build.Module, + microzig: *std.Build.Module, + }; + + // privates: + mz: *MicroZig, + host_build: *std.Build, + target: Target, + output_files: OutputFileMap, + + // publics: + + /// The artifact that is built by Zig. + artifact: *std.Build.Step.Compile, + + /// The options step that provides `microzig.config`. If you need custom configuration, you can add this here. + config: *std.Build.Step.Options, + + /// Declaration of the MicroZig modules used by this firmware. + modules: Modules, + + /// Path to the emitted elf file, if any. + emitted_elf: ?std.Build.LazyPath = null, + + /// Returns the emitted ELF file for this firmware. This is useful if you need debug information + /// or want to use a debugger like Segger, ST-Link or similar. + /// + /// **NOTE:** This is similar, but not equivalent to `std.Build.Step.Compile.getEmittedBin`. The call on the compile step does + /// not include post processing of the ELF files necessary by certain targets. + pub fn getEmittedElf(firmware: *Firmware) std.Build.LazyPath { + if (firmware.emitted_elf == null) { + const raw_elf = firmware.artifact.getEmittedBin(); + firmware.emitted_elf = if (firmware.target.binary_post_process) |binary_post_process| + binary_post_process(firmware.host_build, raw_elf) + else + raw_elf; + } + return firmware.emitted_elf.?; + } + + /// Returns the emitted binary for this firmware. The file is either in the preferred file format for + /// the target or in `format` if not null. + /// + /// **NOTE:** The file returned here is the same file that will be installed. + pub fn getEmittedBin(firmware: *Firmware, format: ?BinaryFormat) std.Build.LazyPath { + const actual_format = firmware.resolveFormat(format); + + const gop = firmware.output_files.getOrPut(actual_format) catch @panic("out of memory"); + if (!gop.found_existing) { + const elf_file = firmware.getEmittedElf(); + + const basename = firmware.host_build.fmt("{s}{s}", .{ + firmware.artifact.name, + actual_format.getExtension(), + }); + + gop.value_ptr.* = switch (actual_format) { + .elf => elf_file, + + .bin => blk: { + const objcopy = firmware.host_build.addObjCopy(elf_file, .{ + .basename = basename, + .format = .bin, + }); + + break :blk objcopy.getOutput(); + }, + + .hex => blk: { + const objcopy = firmware.host_build.addObjCopy(elf_file, .{ + .basename = basename, + .format = .hex, + }); + + break :blk objcopy.getOutput(); + }, + + .uf2 => |family_id| blk: { + const uf2_exe = firmware.mz.dependency("uf2", .{ .optimize = .ReleaseSafe }).artifact("elf2uf2"); + + const convert = firmware.host_build.addRunArtifact(uf2_exe); + + convert.addArg("--family-id"); + convert.addArg(firmware.host_build.fmt("0x{X:0>4}", .{@intFromEnum(family_id)})); + + convert.addArg("--elf-path"); + convert.addFileArg(elf_file); + + convert.addArg("--output-path"); + break :blk convert.addOutputFileArg(basename); + }, + + .dfu => buildConfigError(firmware.host_build, "DFU is not implemented yet. See https://github.com/ZigEmbeddedGroup/microzig/issues/145 for more details!", .{}), + .esp => buildConfigError(firmware.host_build, "ESP firmware image is not implemented yet. See https://github.com/ZigEmbeddedGroup/microzig/issues/146 for more details!", .{}), + + .custom => |generator| generator.convert(generator, elf_file), + }; + } + return gop.value_ptr.*; + } + + pub const AppDependencyOptions = struct { + depend_on_microzig: bool = false, + }; + + /// Adds a regular dependency to your application. + pub fn addAppDependency(fw: *Firmware, name: []const u8, module: *std.Build.Module, options: AppDependencyOptions) void { + if (options.depend_on_microzig) { + module.dependencies.put("microzig", fw.modules.microzig) catch @panic("OOM"); + } + fw.modules.app.dependencies.put(name, module) catch @panic("OOM"); + } + + pub fn addIncludePath(fw: *Firmware, path: std.Build.LazyPath) void { + fw.artifact.addIncludePath(path); + } + + pub fn addSystemIncludePath(fw: *Firmware, path: std.Build.LazyPath) void { + fw.artifact.addSystemIncludePath(path); + } + + pub fn addCSourceFile(fw: *Firmware, source: std.Build.Step.Compile.CSourceFile) void { + fw.artifact.addCSourceFile(source); + } + + pub fn addOptions(fw: *Firmware, module_name: []const u8, options: *std.Build.OptionsStep) void { + fw.artifact.addOptions(module_name, options); + fw.modules.app.dependencies.put( + module_name, + fw.host_build.createModule(.{ + .source_file = options.getOutput(), + }), + ) catch @panic("OOM"); + } + + pub fn addObjectFile(fw: *Firmware, source: std.Build.LazyPath) void { + fw.artifact.addObjectFile(source); + } + + fn resolveFormat(firmware: *Firmware, format: ?BinaryFormat) BinaryFormat { + if (format) |fmt| return fmt; + + if (firmware.target.preferred_format) |fmt| return fmt; + + buildConfigError(firmware.host_build, "{s} has no preferred output format, please provide one in the `format` option.", .{ + firmware.target.chip.name, + }); + } +}; + +pub const cpus = struct { + pub const avr5 = Cpu{ + .name = "AVR5", + .source_file = .{ .path = build_root ++ "/src/cpus/avr5.zig" }, + .target = std.zig.CrossTarget{ + .cpu_arch = .avr, + .cpu_model = .{ .explicit = &std.Target.avr.cpu.avr5 }, + .os_tag = .freestanding, + .abi = .eabi, + }, + }; + + pub const cortex_m0 = Cpu{ + .name = "ARM Cortex-M0", + .source_file = .{ .path = build_root ++ "/src/cpus/cortex-m.zig" }, + .target = std.zig.CrossTarget{ + .cpu_arch = .thumb, + .cpu_model = .{ .explicit = &std.Target.arm.cpu.cortex_m0 }, + .os_tag = .freestanding, + .abi = .eabi, + }, + }; + + pub const cortex_m0plus = Cpu{ + .name = "ARM Cortex-M0+", + .source_file = .{ .path = build_root ++ "/src/cpus/cortex-m.zig" }, + .target = std.zig.CrossTarget{ + .cpu_arch = .thumb, + .cpu_model = .{ .explicit = &std.Target.arm.cpu.cortex_m0plus }, + .os_tag = .freestanding, + .abi = .eabi, + }, + }; + + pub const cortex_m3 = Cpu{ + .name = "ARM Cortex-M3", + .source_file = .{ .path = build_root ++ "/src/cpus/cortex-m.zig" }, + .target = std.zig.CrossTarget{ + .cpu_arch = .thumb, + .cpu_model = .{ .explicit = &std.Target.arm.cpu.cortex_m3 }, + .os_tag = .freestanding, + .abi = .eabi, + }, + }; + + pub const cortex_m4 = Cpu{ + .name = "ARM Cortex-M4", + .source_file = .{ .path = build_root ++ "/src/cpus/cortex-m.zig" }, + .target = std.zig.CrossTarget{ + .cpu_arch = .thumb, + .cpu_model = .{ .explicit = &std.Target.arm.cpu.cortex_m4 }, + .os_tag = .freestanding, + .abi = .eabi, + }, + }; + + pub const riscv32_imac = Cpu{ + .name = "RISC-V 32-bit", + .source_file = .{ .path = build_root ++ "/src/cpus/riscv32.zig" }, + .target = std.zig.CrossTarget{ + .cpu_arch = .riscv32, + .cpu_model = .{ .explicit = &std.Target.riscv.cpu.sifive_e21 }, + .os_tag = .freestanding, + .abi = .none, + }, + }; +}; + +fn buildConfigError(b: *std.Build, comptime fmt: []const u8, args: anytype) noreturn { + const msg = b.fmt(fmt, args); + @panic(msg); +} + +fn dependency(mz: *MicroZig, name: []const u8, args: anytype) *std.Build.Dependency { + return mz.self.builder.dependency(name, args); +} + +fn generateLinkerScript(b: *std.Build, chip: Chip) !std.Build.LazyPath { + const cpu = chip.cpu.getDescriptor(); + + var contents = std.ArrayList(u8).init(b.allocator); + const writer = contents.writer(); + try writer.print( + \\/* + \\ * This file was auto-generated by microzig + \\ * + \\ * Target CPU: {[cpu]s} + \\ * Target Chip: {[chip]s} + \\ */ + \\ + // This is not the "true" entry point, but there's no such thing on embedded platforms + // anyways. This is the logical entrypoint that should be invoked when + // stack, .data and .bss are set up and the CPU is ready to be used. + \\ENTRY(microzig_main); + \\ + \\ + , .{ + .cpu = cpu.name, + .chip = chip.name, + }); + + try writer.writeAll("MEMORY\n{\n"); + { + var counters = [4]usize{ 0, 0, 0, 0 }; + for (chip.memory_regions) |region| { + // flash (rx!w) : ORIGIN = 0x00000000, LENGTH = 512k + + switch (region.kind) { + .flash => { + try writer.print(" flash{d} (rx!w)", .{counters[0]}); + counters[0] += 1; + }, + + .ram => { + try writer.print(" ram{d} (rw!x)", .{counters[1]}); + counters[1] += 1; + }, + + .io => { + try writer.print(" io{d} (rw!x)", .{counters[2]}); + counters[2] += 1; + }, + + .reserved => { + try writer.print(" reserved{d} (rw!x)", .{counters[3]}); + counters[3] += 1; + }, + + .private => |custom| { + try writer.print(" {s} (", .{custom.name}); + if (custom.readable) try writer.writeAll("r"); + if (custom.writeable) try writer.writeAll("w"); + if (custom.executable) try writer.writeAll("x"); + + if (!custom.readable or !custom.writeable or !custom.executable) { + try writer.writeAll("!"); + if (!custom.readable) try writer.writeAll("r"); + if (!custom.writeable) try writer.writeAll("w"); + if (!custom.executable) try writer.writeAll("x"); + } + try writer.writeAll(")"); + }, + } + try writer.print(" : ORIGIN = 0x{X:0>8}, LENGTH = 0x{X:0>8}\n", .{ region.offset, region.length }); + } + } + + try writer.writeAll("}\n\nSECTIONS\n{\n"); + { + try writer.writeAll( + \\ .text : + \\ { + \\ KEEP(*(microzig_flash_start)) + \\ *(.text*) + \\ } > flash0 + \\ + \\ + ); + + switch (cpu.target.getCpuArch()) { + .arm, .thumb => try writer.writeAll( + \\ .ARM.exidx : { + \\ *(.ARM.exidx* .gnu.linkonce.armexidx.*) + \\ } >flash0 + \\ + \\ + ), + else => {}, + } + + try writer.writeAll( + \\ .data : + \\ { + \\ microzig_data_start = .; + \\ *(.rodata*) + \\ *(.data*) + \\ microzig_data_end = .; + \\ } > ram0 AT> flash0 + \\ + \\ .bss (NOLOAD) : + \\ { + \\ microzig_bss_start = .; + \\ *(.bss*) + \\ microzig_bss_end = .; + \\ } > ram0 + \\ + \\ microzig_data_load_start = LOADADDR(.data); + \\ + ); + } + try writer.writeAll("}\n"); + + // TODO: Assert that the flash can actually hold all data! + // try writer.writeAll( + // \\ + // \\ ASSERT( (SIZEOF(.text) + SIZEOF(.data) > LENGTH(flash0)), "Error: .text + .data is too large for flash!" ); + // \\ + // ); + + const write = b.addWriteFiles(); + + return write.add("linker.ld", contents.items); +} diff --git a/build/build.zig.zon b/build/build.zig.zon new file mode 100644 index 000000000..437acb5f9 --- /dev/null +++ b/build/build.zig.zon @@ -0,0 +1,29 @@ +.{ + .name = "microzig", + .version = "0.1.0", + .paths = .{ + "build.zig", + "build.zig.zon", + "design", + "docs", + "LICENSE", + "README.adoc", + "src", + "test", + "thoughts.md", + }, + .dependencies = .{ + .uf2 = .{ + .url = "https://github.com/ZigEmbeddedGroup/uf2/archive/8037b439ccbac862471392b25e94a8995d784e2c.tar.gz", + .hash = "1220cc66563fc1ecefca7990968441dc9d4db717884ffa9a2de657f60ed4bb74a70a", + }, + .regz = .{ + .url = "https://github.com/ZigEmbeddedGroup/regz/archive/d66ffd56f51fc46c071412141b5d0c74dc83c310.tar.gz", + .hash = "122002c5f2e31c11373ede6e8a8dd9a61aabd60d38df667ec33b5f994d1f0b503823", + }, + .@"umm-zig" = .{ + .url = "https://github.com/ZigEmbeddedGroup/umm-zig/archive/99d815adfbc5cc4ad385dd765a6192f85e54179f.tar.gz", + .hash = "12207ef7375ea45e97f4fba9c5dfa74d022902893c4dbf1a0076726b7ec39a02ea3f", + }, + }, +} diff --git a/build/microzig-package.json b/build/microzig-package.json new file mode 100644 index 000000000..92812f004 --- /dev/null +++ b/build/microzig-package.json @@ -0,0 +1,4 @@ +{ + "package_name": "microzig-build", + "package_type": "core" +} diff --git a/examples/modular/README.md b/examples/modular/README.md new file mode 100644 index 000000000..7909f7c4c --- /dev/null +++ b/examples/modular/README.md @@ -0,0 +1,5 @@ +# Examples for the BSP `nxp-lpc` + +- [Blinky](src/blinky.zig) on [nRF52840 Dongle](https://www.nordicsemi.com/Products/Development-hardware/nrf52840-dongle) + TODO: Implement this! + diff --git a/examples/modular/build.zig b/examples/modular/build.zig new file mode 100644 index 000000000..f58e4a8eb --- /dev/null +++ b/examples/modular/build.zig @@ -0,0 +1,33 @@ +const std = @import("std"); +const microzig_build = @import("microzig-build"); +const lpc = @import("lpc"); + +pub fn build(b: *std.Build) void { + const microbuild = microzig_build.init( + b, + b.dependency("microzig", .{}), + ); + + const optimize = b.standardOptimizeOption(.{}); + + // `addFirmware` basically works like addExecutable, but takes a + // `microzig.Target` for target instead of a `std.zig.CrossTarget`. + // + // The target will convey all necessary information on the chip, + // cpu and potentially the board as well. + const firmware = microbuild.addFirmware(b, .{ + .name = "blinky", + .target = lpc.boards.mbed.lpc1768, + .optimize = optimize, + .source_file = .{ .path = "src/blinky.zig" }, + }); + + // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()` + // and allows installing the firmware as a typical firmware file. + // + // This will also install into `$prefix/firmware` instead of `$prefix/bin`. + microbuild.installFirmware(b, firmware, .{}); + + // For debugging, we also always install the firmware as an ELF file + microbuild.installFirmware(b, firmware, .{ .format = .elf }); +} diff --git a/examples/modular/build.zig.zon b/examples/modular/build.zig.zon new file mode 100644 index 000000000..aa5a11a05 --- /dev/null +++ b/examples/modular/build.zig.zon @@ -0,0 +1,14 @@ +.{ + .name = "microzig-nxp-lpc-examples", + .version = "0.1.0", + .dependencies = .{ + .microzig = .{ + .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/c6c9ec4516f57638e751141085c9d76120990312.tar.gz", + .hash = "1220af58bdaa721b8189f3a7adfda660517dd354463463388e96d69fe4ceccf80b92", + }, + .lpc = .{ + .url = "https://github.com/ZigEmbeddedGroup/nxp-lpc/archive/130a1316c0892415e7da958a5e9548ed87bba54d.tar.gz", + .hash = "1220165879f85a1d51656d35b3963a95f3585dc665fc7414f76aa6aad4e6635536cf", + }, + }, +} diff --git a/examples/modular/src/blinky.zig b/examples/modular/src/blinky.zig new file mode 100644 index 000000000..328d63705 --- /dev/null +++ b/examples/modular/src/blinky.zig @@ -0,0 +1,56 @@ +const std = @import("std"); +const microzig = @import("microzig"); + +const chip = microzig.chip; + +// LED-1: P1.18 +// LED-2: P1.20 +// LED-3: P1.21 +// LED-4: P1.23 + +const conn = chip.peripherals.PINCONNECT; +const gpio: *volatile [5]PatchedGpio = @ptrCast(@alignCast(chip.peripherals.GPIO)); + +const led_mask = [4]u32{ + (1 << 18), + (1 << 20), + (1 << 21), + (1 << 23), +}; +const all_mask = led_mask[0] | led_mask[1] | led_mask[2] | led_mask[3]; + +pub fn main() !void { + conn.PINSEL3.modify(.{ + .P1_18 = .{ .value = .GPIO_P1 }, + .P1_20 = .{ .value = .GPIO_P1 }, + .P1_21 = .{ .value = .GPIO_P1 }, + .P1_23 = .{ .value = .GPIO_P1 }, + }); + + const p1 = &gpio[1]; + + p1.dir = all_mask; + + while (true) { + for (led_mask) |mask| { + p1.pin_clr = (all_mask & ~mask); + p1.pin_set = mask; + microzig.core.experimental.debug.busy_sleep(100_000); + } + } +} + +const PatchedGpio = extern struct { + dir: u32, // 0x2009 C000 + __padding0: u32, // 0x2009 C004 + __padding1: u32, // 0x2009 C008 + __padding2: u32, // 0x2009 C00C + mask: u32, // 0x2009 C010 + pin: u32, // 0x2009 C014 + pin_set: u32, // 0x2009 C018 + pin_clr: u32, // 0x2009 C01C + + comptime { + std.debug.assert(@sizeOf(PatchedGpio) == 0x20); + } +}; From 31f26f57d99a8194a9371593da0b6575e63c35b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Tue, 9 Jan 2024 15:57:23 +0100 Subject: [PATCH 255/286] Refactors packaging process from bash to python --- .envrc | 2 + .gitignore | 1 + board-support/espressif-esp/build.zig.zon | 5 - board-support/espressif-esp/extract-bsp-info | Bin 2062248 -> 0 bytes board-support/microchip-avr/build.zig.zon | 5 - board-support/nordic-nrf5x/build.zig.zon | 5 - board-support/raspberrypi-rp2040/build.zig | 41 -- .../raspberrypi-rp2040/examples/adc.zig | 40 -- .../raspberrypi-rp2040/examples/blinky.zig | 20 - .../examples/blinky_core1.zig | 28 -- .../examples/flash_program.zig | 81 --- .../raspberrypi-rp2040/examples/gpio_clk.zig | 16 - .../examples/i2c_bus_scan.zig | 44 -- .../raspberrypi-rp2040/examples/pwm.zig | 23 - .../raspberrypi-rp2040/examples/random.zig | 68 --- .../examples/scripts/hid_test.py | 29 -- .../examples/scripts/usb_device_loopback.py | 48 -- .../examples/spi_master.zig | 26 - .../examples/squarewave.zig | 84 ---- .../raspberrypi-rp2040/examples/uart.zig | 49 -- .../examples/usb_device.zig | 172 ------- .../raspberrypi-rp2040/examples/usb_hid.zig | 187 ------- .../raspberrypi-rp2040/examples/ws2812.zig | 94 ---- build.zig | 16 +- build.zig.zon | 10 + build/build.zig.zon | 29 -- build/microzig-package.json | 16 +- core/build.zig.zon | 29 -- core/microzig-package.json | 12 +- flake.lock | 8 +- flake.nix | 94 +++- for-extraction/uf2-flasher/build.zig | 19 + .../uf2-flasher}/build.zig.zon | 0 for-extraction/uf2-flasher/src/main.zig | 333 ++++++++++++ tools/archive-info.zig | 22 +- tools/bundle.py | 473 ++++++++++++++++++ tools/bundle.sh | 169 ------- tools/create-pkg-descriptor.zig | 122 +++++ 38 files changed, 1090 insertions(+), 1330 deletions(-) create mode 100644 .envrc delete mode 100644 board-support/espressif-esp/build.zig.zon delete mode 100755 board-support/espressif-esp/extract-bsp-info delete mode 100644 board-support/microchip-avr/build.zig.zon delete mode 100644 board-support/nordic-nrf5x/build.zig.zon delete mode 100644 board-support/raspberrypi-rp2040/examples/adc.zig delete mode 100644 board-support/raspberrypi-rp2040/examples/blinky.zig delete mode 100644 board-support/raspberrypi-rp2040/examples/blinky_core1.zig delete mode 100644 board-support/raspberrypi-rp2040/examples/flash_program.zig delete mode 100644 board-support/raspberrypi-rp2040/examples/gpio_clk.zig delete mode 100644 board-support/raspberrypi-rp2040/examples/i2c_bus_scan.zig delete mode 100644 board-support/raspberrypi-rp2040/examples/pwm.zig delete mode 100644 board-support/raspberrypi-rp2040/examples/random.zig delete mode 100755 board-support/raspberrypi-rp2040/examples/scripts/hid_test.py delete mode 100755 board-support/raspberrypi-rp2040/examples/scripts/usb_device_loopback.py delete mode 100644 board-support/raspberrypi-rp2040/examples/spi_master.zig delete mode 100644 board-support/raspberrypi-rp2040/examples/squarewave.zig delete mode 100644 board-support/raspberrypi-rp2040/examples/uart.zig delete mode 100644 board-support/raspberrypi-rp2040/examples/usb_device.zig delete mode 100644 board-support/raspberrypi-rp2040/examples/usb_hid.zig delete mode 100644 board-support/raspberrypi-rp2040/examples/ws2812.zig create mode 100644 build.zig.zon delete mode 100644 build/build.zig.zon delete mode 100644 core/build.zig.zon create mode 100644 for-extraction/uf2-flasher/build.zig rename {board-support/raspberrypi-rp2040 => for-extraction/uf2-flasher}/build.zig.zon (100%) create mode 100644 for-extraction/uf2-flasher/src/main.zig create mode 100755 tools/bundle.py delete mode 100755 tools/bundle.sh create mode 100644 tools/create-pkg-descriptor.zig diff --git a/.envrc b/.envrc new file mode 100644 index 000000000..4cc700ca7 --- /dev/null +++ b/.envrc @@ -0,0 +1,2 @@ +# use_nix +use_flake diff --git a/.gitignore b/.gitignore index aa8f1d641..1efc3f0f9 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ microzig-deploy/ .DS_Store .gdbinit .lldbinit +.direnv/ diff --git a/board-support/espressif-esp/build.zig.zon b/board-support/espressif-esp/build.zig.zon deleted file mode 100644 index fd45779e6..000000000 --- a/board-support/espressif-esp/build.zig.zon +++ /dev/null @@ -1,5 +0,0 @@ -.{ - .name = "microzig-espressif-esp", - .version = "0.1.0", - .dependencies = .{}, -} diff --git a/board-support/espressif-esp/extract-bsp-info b/board-support/espressif-esp/extract-bsp-info deleted file mode 100755 index e805c7e173d96d164d07c2876b7c1472a904866c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2062248 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 `A;sTlZ`%5oh+x|Y2I_8QnSP4zor5Yv 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 tSu4{!t1_*tmFeWF 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%0ArudyF{CA(3e+&M+Zl15r5i(SRF%5 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ʍN1|6=v5umlXW+4wqW7C(#46z{ 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 z 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 {}, {d:2}%", .{ i, dist[i], @as(f32, @floatFromInt(dist[i])) / @as(f32, @floatFromInt(counter)) }); - } - } - time.sleep_ms(1000); - } -} diff --git a/board-support/raspberrypi-rp2040/examples/scripts/hid_test.py b/board-support/raspberrypi-rp2040/examples/scripts/hid_test.py deleted file mode 100755 index ccc2dd093..000000000 --- a/board-support/raspberrypi-rp2040/examples/scripts/hid_test.py +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env python3 - -# Install python3 HID package https://pypi.org/project/hid/ -import hid - -# default is TinyUSB (0xcafe), Adafruit (0x239a), RaspberryPi (0x2e8a), Espressif (0x303a) VID -USB_VID = (0xcafe, 0x239a, 0x2e8a, 0x303a) - -print("VID list: " + ", ".join('%02x' % v for v in USB_VID)) - -for vid in USB_VID: - for dict in hid.enumerate(vid): - print(dict) - dev = hid.Device(dict['vendor_id'], dict['product_id']) - if dev: - while True: - inp = input("Send text to HID Device : ").encode('utf-8') - dev.write(inp) - - x = 0 - l = len(inp) - r = b"" - while (x < l): - str_in = dev.read(64) - r += str_in - x += 64 - - print("Received from HID Device:\n", r) - print("hex:\n", r.hex()) diff --git a/board-support/raspberrypi-rp2040/examples/scripts/usb_device_loopback.py b/board-support/raspberrypi-rp2040/examples/scripts/usb_device_loopback.py deleted file mode 100755 index 82bf47899..000000000 --- a/board-support/raspberrypi-rp2040/examples/scripts/usb_device_loopback.py +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env python3 - -# -# Copyright (c) 2020 Raspberry Pi (Trading) Ltd. -# -# SPDX-License-Identifier: BSD-3-Clause -# - -# sudo pip3 install pyusb - -import usb.core -import usb.util - -# find our device -dev = usb.core.find(idVendor=0x0000, idProduct=0x0001) - -# was it found? -if dev is None: - raise ValueError('Device not found') - -# get an endpoint instance -cfg = dev.get_active_configuration() -intf = cfg[(0, 0)] - -outep = usb.util.find_descriptor( - intf, - # match the first OUT endpoint - custom_match= \ - lambda e: \ - usb.util.endpoint_direction(e.bEndpointAddress) == \ - usb.util.ENDPOINT_OUT) - -inep = usb.util.find_descriptor( - intf, - # match the first IN endpoint - custom_match= \ - lambda e: \ - usb.util.endpoint_direction(e.bEndpointAddress) == \ - usb.util.ENDPOINT_IN) - -assert inep is not None -assert outep is not None - -test_string = "Hello World!" -outep.write(test_string) -from_device = inep.read(len(test_string)) - -print("Device Says: {}".format(''.join([chr(x) for x in from_device]))) diff --git a/board-support/raspberrypi-rp2040/examples/spi_master.zig b/board-support/raspberrypi-rp2040/examples/spi_master.zig deleted file mode 100644 index c160fee96..000000000 --- a/board-support/raspberrypi-rp2040/examples/spi_master.zig +++ /dev/null @@ -1,26 +0,0 @@ -const std = @import("std"); -const microzig = @import("microzig"); - -const rp2040 = microzig.hal; -const time = rp2040.time; -const gpio = rp2040.gpio; -const clocks = rp2040.clocks; -const peripherals = microzig.chip.peripherals; - -const BUF_LEN = 0x100; -const spi = rp2040.spi.num(0); - -// Communicate with another RP2040 over spi -// Slave implementation: https://github.com/raspberrypi/pico-examples/blob/master/spi/spi_master_slave/spi_slave/spi_slave.c -pub fn main() !void { - spi.apply(.{ - .clock_config = rp2040.clock_config, - }); - var out_buf: [BUF_LEN]u8 = .{ 0xAA, 0xBB, 0xCC, 0xDD } ** (BUF_LEN / 4); - var in_buf: [BUF_LEN]u8 = undefined; - - while (true) { - _ = spi.transceive(&out_buf, &in_buf); - time.sleep_ms(1 * 1000); - } -} diff --git a/board-support/raspberrypi-rp2040/examples/squarewave.zig b/board-support/raspberrypi-rp2040/examples/squarewave.zig deleted file mode 100644 index 0894d9a0c..000000000 --- a/board-support/raspberrypi-rp2040/examples/squarewave.zig +++ /dev/null @@ -1,84 +0,0 @@ -//! Hello world for the PIO module: generating a square wave -const std = @import("std"); -const microzig = @import("microzig"); -const rp2040 = microzig.hal; -const gpio = rp2040.gpio; -const Pio = rp2040.pio.Pio; -const StateMachine = rp2040.pio.StateMachine; - -const squarewave_program = blk: { - @setEvalBranchQuota(2000); - break :blk rp2040.pio.assemble( - \\; - \\; Copyright (c) 2020 Raspberry Pi (Trading) Ltd. - \\; - \\; SPDX-License-Identifier: BSD-3-Clause - \\; - \\.program squarewave - \\ set pindirs, 1 ; Set pin to output - \\again: - \\ set pins, 1 [1] ; Drive pin high and then delay for one cycle - \\ set pins, 0 ; Drive pin low - \\ jmp again ; Set PC to label `again` - , .{}).get_program_by_name("squarewave"); -}; - -// Pick one PIO instance arbitrarily. We're also arbitrarily picking state -// machine 0 on this PIO instance (the state machines are numbered 0 to 3 -// inclusive). -const pio: Pio = .pio0; -const sm: StateMachine = .sm0; - -pub fn main() void { - pio.gpio_init(gpio.num(2)); - pio.sm_load_and_start_program(sm, squarewave_program, .{ - .clkdiv = rp2040.pio.ClkDivOptions.from_float(125), - .pin_mappings = .{ - .set = .{ - .base = 2, - .count = 1, - }, - }, - }) catch unreachable; - - pio.sm_set_enabled(sm, true); - - while (true) {} - - //// Load the assembled program directly into the PIO's instruction memory. - //// Each PIO instance has a 32-slot instruction memory, which all 4 state - //// machines can see. The system has write-only access. - //for (squarewave_program.instructions, 0..) |insn, i| - // pio.get_instruction_memory()[i] = insn; - - //// Configure state machine 0 to run at sysclk/2.5. The state machines can - //// run as fast as one instruction per clock cycle, but we can scale their - //// speed down uniformly to meet some precise frequency target, e.g. for a - //// UART baud rate. This register has 16 integer divisor bits and 8 - //// fractional divisor bits. - //pio.sm_set_clkdiv(sm, .{ - // .int = 2, - // .frac = 0x80, - //}); - - //// There are five pin mapping groups (out, in, set, side-set, jmp pin) - //// which are used by different instructions or in different circumstances. - //// Here we're just using SET instructions. Configure state machine 0 SETs - //// to affect GPIO 0 only; then configure GPIO0 to be controlled by PIO0, - //// as opposed to e.g. the processors. - //pio.gpio_init(2); - //pio.sm_set_pin_mappings(sm, .{ - // .out = .{ - // .base = 2, - // .count = 1, - // }, - //}); - - //// Set the state machine running. The PIO CTRL register is global within a - //// PIO instance, so you can start/stop multiple state machines - //// simultaneously. We're using the register's hardware atomic set alias to - //// make one bit high without doing a read-modify-write on the register. - //pio.sm_set_enabled(sm, true); - - //while (true) {} -} diff --git a/board-support/raspberrypi-rp2040/examples/uart.zig b/board-support/raspberrypi-rp2040/examples/uart.zig deleted file mode 100644 index 914b9ae98..000000000 --- a/board-support/raspberrypi-rp2040/examples/uart.zig +++ /dev/null @@ -1,49 +0,0 @@ -const std = @import("std"); -const microzig = @import("microzig"); - -const rp2040 = microzig.hal; -const time = rp2040.time; -const gpio = rp2040.gpio; -const clocks = rp2040.clocks; - -const led = gpio.num(25); -const uart = rp2040.uart.num(0); -const baud_rate = 115200; -const uart_tx_pin = gpio.num(0); -const uart_rx_pin = gpio.num(1); - -pub fn panic(message: []const u8, _: ?*std.builtin.StackTrace, _: ?usize) noreturn { - std.log.err("panic: {s}", .{message}); - @breakpoint(); - while (true) {} -} - -pub const std_options = struct { - pub const log_level = .debug; - pub const logFn = rp2040.uart.log; -}; - -pub fn main() !void { - led.set_function(.sio); - led.set_direction(.out); - led.put(1); - - uart.apply(.{ - .baud_rate = baud_rate, - .tx_pin = uart_tx_pin, - .rx_pin = uart_rx_pin, - .clock_config = rp2040.clock_config, - }); - - rp2040.uart.init_logger(uart); - - var i: u32 = 0; - while (true) : (i += 1) { - led.put(1); - std.log.info("what {}", .{i}); - time.sleep_ms(500); - - led.put(0); - time.sleep_ms(500); - } -} diff --git a/board-support/raspberrypi-rp2040/examples/usb_device.zig b/board-support/raspberrypi-rp2040/examples/usb_device.zig deleted file mode 100644 index 8f2d74e4f..000000000 --- a/board-support/raspberrypi-rp2040/examples/usb_device.zig +++ /dev/null @@ -1,172 +0,0 @@ -const std = @import("std"); -const microzig = @import("microzig"); - -const rp2040 = microzig.hal; -const flash = rp2040.flash; -const time = rp2040.time; -const gpio = rp2040.gpio; -const clocks = rp2040.clocks; -const usb = rp2040.usb; - -const led = gpio.num(25); -const uart = rp2040.uart.num(0); -const baud_rate = 115200; -const uart_tx_pin = gpio.num(0); -const uart_rx_pin = gpio.num(1); - -// First we define two callbacks that will be used by the endpoints we define next... -fn ep1_in_callback(dc: *usb.DeviceConfiguration, data: []const u8) void { - _ = data; - // The host has collected the data we repeated onto - // EP1! Set up to receive more data on EP1. - usb.Usb.callbacks.usb_start_rx( - dc.endpoints[2], // EP1_OUT_CFG, - 64, - ); -} - -fn ep1_out_callback(dc: *usb.DeviceConfiguration, data: []const u8) void { - // We've gotten data from the host on our custom - // EP1! Set up EP1 to repeat it. - usb.Usb.callbacks.usb_start_tx( - dc.endpoints[3], // EP1_IN_CFG, - data, - ); -} - -// The endpoints EP0_IN and EP0_OUT are already defined but you can -// add your own endpoints to... -pub var EP1_OUT_CFG: usb.EndpointConfiguration = .{ - .descriptor = &usb.EndpointDescriptor{ - .length = @as(u8, @intCast(@sizeOf(usb.EndpointDescriptor))), - .descriptor_type = usb.DescType.Endpoint, - .endpoint_address = usb.Dir.Out.endpoint(1), - .attributes = @intFromEnum(usb.TransferType.Bulk), - .max_packet_size = 64, - .interval = 0, - }, - .endpoint_control_index = 2, - .buffer_control_index = 3, - .data_buffer_index = 2, - .next_pid_1 = false, - // The callback will be executed if we got an interrupt on EP1_OUT - .callback = ep1_out_callback, -}; - -pub var EP1_IN_CFG: usb.EndpointConfiguration = .{ - .descriptor = &usb.EndpointDescriptor{ - .length = @as(u8, @intCast(@sizeOf(usb.EndpointDescriptor))), - .descriptor_type = usb.DescType.Endpoint, - .endpoint_address = usb.Dir.In.endpoint(1), - .attributes = @intFromEnum(usb.TransferType.Bulk), - .max_packet_size = 64, - .interval = 0, - }, - .endpoint_control_index = 1, - .buffer_control_index = 2, - .data_buffer_index = 3, - .next_pid_1 = false, - // The callback will be executed if we got an interrupt on EP1_IN - .callback = ep1_in_callback, -}; - -// This is our device configuration -pub var DEVICE_CONFIGURATION: usb.DeviceConfiguration = .{ - .device_descriptor = &.{ - .length = @as(u8, @intCast(@sizeOf(usb.DeviceDescriptor))), - .descriptor_type = usb.DescType.Device, - .bcd_usb = 0x0110, - .device_class = 0, - .device_subclass = 0, - .device_protocol = 0, - .max_packet_size0 = 64, - .vendor = 0, - .product = 1, - .bcd_device = 0, - .manufacturer_s = 1, - .product_s = 2, - .serial_s = 0, - .num_configurations = 1, - }, - .interface_descriptor = &.{ - .length = @as(u8, @intCast(@sizeOf(usb.InterfaceDescriptor))), - .descriptor_type = usb.DescType.Interface, - .interface_number = 0, - .alternate_setting = 0, - // We have two endpoints (EP0 IN/OUT don't count) - .num_endpoints = 2, - .interface_class = 0xff, - .interface_subclass = 0, - .interface_protocol = 0, - .interface_s = 0, - }, - .config_descriptor = &.{ - .length = @as(u8, @intCast(@sizeOf(usb.ConfigurationDescriptor))), - .descriptor_type = usb.DescType.Config, - .total_length = @as(u8, @intCast(@sizeOf(usb.ConfigurationDescriptor) + @sizeOf(usb.InterfaceDescriptor) + @sizeOf(usb.EndpointDescriptor) + @sizeOf(usb.EndpointDescriptor))), - .num_interfaces = 1, - .configuration_value = 1, - .configuration_s = 0, - .attributes = 0xc0, - .max_power = 0x32, - }, - .lang_descriptor = "\x04\x03\x09\x04", // length || string descriptor (0x03) || Engl (0x0409) - .descriptor_strings = &.{ - // ugly unicode :| - "R\x00a\x00s\x00p\x00b\x00e\x00r\x00r\x00y\x00 \x00P\x00i\x00", - "P\x00i\x00c\x00o\x00 \x00T\x00e\x00s\x00t\x00 \x00D\x00e\x00v\x00i\x00c\x00e\x00", - }, - // Here we pass all endpoints to the config - // Dont forget to pass EP0_[IN|OUT] in the order seen below! - .endpoints = .{ - &usb.EP0_OUT_CFG, - &usb.EP0_IN_CFG, - &EP1_OUT_CFG, - &EP1_IN_CFG, - }, -}; - -pub fn panic(message: []const u8, _: ?*std.builtin.StackTrace, _: ?usize) noreturn { - std.log.err("panic: {s}", .{message}); - @breakpoint(); - while (true) {} -} - -pub const std_options = struct { - pub const log_level = .debug; - pub const logFn = rp2040.uart.log; -}; - -pub fn main() !void { - led.set_function(.sio); - led.set_direction(.out); - led.put(1); - - uart.apply(.{ - .baud_rate = baud_rate, - .tx_pin = uart_tx_pin, - .rx_pin = uart_rx_pin, - .clock_config = rp2040.clock_config, - }); - - rp2040.uart.init_logger(uart); - - // First we initialize the USB clock - rp2040.usb.Usb.init_clk(); - // Then initialize the USB device using the configuration defined above - rp2040.usb.Usb.init_device(&DEVICE_CONFIGURATION) catch unreachable; - var old: u64 = time.get_time_since_boot().to_us(); - var new: u64 = 0; - while (true) { - // You can now poll for USB events - rp2040.usb.Usb.task( - false, // debug output over UART [Y/n] - ) catch unreachable; - - new = time.get_time_since_boot().to_us(); - if (new - old > 500000) { - old = new; - led.toggle(); - } - } -} diff --git a/board-support/raspberrypi-rp2040/examples/usb_hid.zig b/board-support/raspberrypi-rp2040/examples/usb_hid.zig deleted file mode 100644 index 752111ad0..000000000 --- a/board-support/raspberrypi-rp2040/examples/usb_hid.zig +++ /dev/null @@ -1,187 +0,0 @@ -const std = @import("std"); -const microzig = @import("microzig"); - -const rp2040 = microzig.hal; -const flash = rp2040.flash; -const time = rp2040.time; -const gpio = rp2040.gpio; -const clocks = rp2040.clocks; -const usb = rp2040.usb; - -const led = gpio.num(25); -const uart = rp2040.uart.num(0); -const baud_rate = 115200; -const uart_tx_pin = gpio.num(0); -const uart_rx_pin = gpio.num(1); - -// First we define two callbacks that will be used by the endpoints we define next... -fn ep1_in_callback(dc: *usb.DeviceConfiguration, data: []const u8) void { - _ = data; - // The host has collected the data we repeated onto - // EP1! Set up to receive more data on EP1. - usb.Usb.callbacks.usb_start_rx( - dc.endpoints[2], // EP1_OUT_CFG, - 64, - ); -} - -fn ep1_out_callback(dc: *usb.DeviceConfiguration, data: []const u8) void { - // We've gotten data from the host on our custom - // EP1! Set up EP1 to repeat it. - usb.Usb.callbacks.usb_start_tx( - dc.endpoints[3], // EP1_IN_CFG, - data, - ); -} - -// The endpoints EP0_IN and EP0_OUT are already defined but you can -// add your own endpoints to... -pub var EP1_OUT_CFG: usb.EndpointConfiguration = .{ - .descriptor = &usb.EndpointDescriptor{ - .length = @as(u8, @intCast(@sizeOf(usb.EndpointDescriptor))), - .descriptor_type = usb.DescType.Endpoint, - .endpoint_address = usb.Dir.Out.endpoint(1), - .attributes = @intFromEnum(usb.TransferType.Interrupt), - .max_packet_size = 64, - .interval = 0, - }, - .endpoint_control_index = 2, - .buffer_control_index = 3, - .data_buffer_index = 2, - .next_pid_1 = false, - // The callback will be executed if we got an interrupt on EP1_OUT - .callback = ep1_out_callback, -}; - -pub var EP1_IN_CFG: usb.EndpointConfiguration = .{ - .descriptor = &usb.EndpointDescriptor{ - .length = @as(u8, @intCast(@sizeOf(usb.EndpointDescriptor))), - .descriptor_type = usb.DescType.Endpoint, - .endpoint_address = usb.Dir.In.endpoint(1), - .attributes = @intFromEnum(usb.TransferType.Interrupt), - .max_packet_size = 64, - .interval = 0, - }, - .endpoint_control_index = 1, - .buffer_control_index = 2, - .data_buffer_index = 3, - .next_pid_1 = false, - // The callback will be executed if we got an interrupt on EP1_IN - .callback = ep1_in_callback, -}; - -// This is our device configuration -pub var DEVICE_CONFIGURATION: usb.DeviceConfiguration = .{ - .device_descriptor = &.{ - .length = @as(u8, @intCast(@sizeOf(usb.DeviceDescriptor))), - .descriptor_type = usb.DescType.Device, - .bcd_usb = 0x0200, - .device_class = 0, - .device_subclass = 0, - .device_protocol = 0, - .max_packet_size0 = 64, - .vendor = 0xCafe, - .product = 1, - .bcd_device = 0x0100, - // Those are indices to the descriptor strings - // Make sure to provide enough string descriptors! - .manufacturer_s = 1, - .product_s = 2, - .serial_s = 3, - .num_configurations = 1, - }, - .interface_descriptor = &.{ - .length = @as(u8, @intCast(@sizeOf(usb.InterfaceDescriptor))), - .descriptor_type = usb.DescType.Interface, - .interface_number = 0, - .alternate_setting = 0, - // We have two endpoints (EP0 IN/OUT don't count) - .num_endpoints = 2, - .interface_class = 3, - .interface_subclass = 0, - .interface_protocol = 0, - .interface_s = 0, - }, - .config_descriptor = &.{ - .length = @as(u8, @intCast(@sizeOf(usb.ConfigurationDescriptor))), - .descriptor_type = usb.DescType.Config, - .total_length = @as(u8, @intCast(@sizeOf(usb.ConfigurationDescriptor) + @sizeOf(usb.InterfaceDescriptor) + @sizeOf(usb.EndpointDescriptor) + @sizeOf(usb.EndpointDescriptor))), - .num_interfaces = 1, - .configuration_value = 1, - .configuration_s = 0, - .attributes = 0xc0, - .max_power = 0x32, - }, - .lang_descriptor = "\x04\x03\x09\x04", // length || string descriptor (0x03) || Engl (0x0409) - .descriptor_strings = &.{ - // ugly unicode :| - //"R\x00a\x00s\x00p\x00b\x00e\x00r\x00r\x00y\x00 \x00P\x00i\x00", - &usb.utf8ToUtf16Le("Raspberry Pi"), - //"P\x00i\x00c\x00o\x00 \x00T\x00e\x00s\x00t\x00 \x00D\x00e\x00v\x00i\x00c\x00e\x00", - &usb.utf8ToUtf16Le("Pico Test Device"), - //"c\x00a\x00f\x00e\x00b\x00a\x00b\x00e\x00", - &usb.utf8ToUtf16Le("cafebabe"), - }, - .hid = .{ - .hid_descriptor = &.{ - .bcd_hid = 0x0111, - .country_code = 0, - .num_descriptors = 1, - .report_length = 34, - }, - .report_descriptor = &usb.hid.ReportDescriptorFidoU2f, - }, - // Here we pass all endpoints to the config - // Dont forget to pass EP0_[IN|OUT] in the order seen below! - .endpoints = .{ - &usb.EP0_OUT_CFG, - &usb.EP0_IN_CFG, - &EP1_OUT_CFG, - &EP1_IN_CFG, - }, -}; - -pub fn panic(message: []const u8, _: ?*std.builtin.StackTrace, _: ?usize) noreturn { - std.log.err("panic: {s}", .{message}); - @breakpoint(); - while (true) {} -} - -pub const std_options = struct { - pub const log_level = .debug; - pub const logFn = rp2040.uart.log; -}; - -pub fn main() !void { - led.set_function(.sio); - led.set_direction(.out); - led.put(1); - - uart.apply(.{ - .baud_rate = baud_rate, - .tx_pin = uart_tx_pin, - .rx_pin = uart_rx_pin, - .clock_config = rp2040.clock_config, - }); - - rp2040.uart.init_logger(uart); - - // First we initialize the USB clock - rp2040.usb.Usb.init_clk(); - // Then initialize the USB device using the configuration defined above - rp2040.usb.Usb.init_device(&DEVICE_CONFIGURATION) catch unreachable; - var old: u64 = time.get_time_since_boot().to_us(); - var new: u64 = 0; - while (true) { - // You can now poll for USB events - rp2040.usb.Usb.task( - true, // debug output over UART [Y/n] - ) catch unreachable; - - new = time.get_time_since_boot().to_us(); - if (new - old > 500000) { - old = new; - led.toggle(); - } - } -} diff --git a/board-support/raspberrypi-rp2040/examples/ws2812.zig b/board-support/raspberrypi-rp2040/examples/ws2812.zig deleted file mode 100644 index 64fbac225..000000000 --- a/board-support/raspberrypi-rp2040/examples/ws2812.zig +++ /dev/null @@ -1,94 +0,0 @@ -const std = @import("std"); -const microzig = @import("microzig"); -const rp2040 = microzig.hal; -const gpio = rp2040.gpio; -const Pio = rp2040.pio.Pio; -const StateMachine = rp2040.pio.StateMachine; - -const ws2812_program = blk: { - @setEvalBranchQuota(5000); - break :blk rp2040.pio.assemble( - \\; - \\; Copyright (c) 2020 Raspberry Pi (Trading) Ltd. - \\; - \\; SPDX-License-Identifier: BSD-3-Clause - \\; - \\.program ws2812 - \\.side_set 1 - \\ - \\.define public T1 2 - \\.define public T2 5 - \\.define public T3 3 - \\ - \\.wrap_target - \\bitloop: - \\ out x, 1 side 0 [T3 - 1] ; Side-set still takes place when instruction stalls - \\ jmp !x do_zero side 1 [T1 - 1] ; Branch on the bit we shifted out. Positive pulse - \\do_one: - \\ jmp bitloop side 1 [T2 - 1] ; Continue driving high, for a long pulse - \\do_zero: - \\ nop side 0 [T2 - 1] ; Or drive low, for a short pulse - \\.wrap - , .{}).get_program_by_name("ws2812"); -}; - -const pio: Pio = .pio0; -const sm: StateMachine = .sm0; -const led_pin = gpio.num(23); - -pub fn main() void { - pio.gpio_init(led_pin); - sm_set_consecutive_pindirs(pio, sm, @intFromEnum(led_pin), 1, true); - - const cycles_per_bit: comptime_int = ws2812_program.defines[0].value + //T1 - ws2812_program.defines[1].value + //T2 - ws2812_program.defines[2].value; //T3 - const div = @as(f32, @floatFromInt(rp2040.clock_config.sys.?.output_freq)) / - (800_000 * cycles_per_bit); - - pio.sm_load_and_start_program(sm, ws2812_program, .{ - .clkdiv = rp2040.pio.ClkDivOptions.from_float(div), - .pin_mappings = .{ - .side_set = .{ - .base = @intFromEnum(led_pin), - .count = 1, - }, - }, - .shift = .{ - .out_shiftdir = .left, - .autopull = true, - .pull_threshold = 24, - .join_tx = true, - }, - }) catch unreachable; - pio.sm_set_enabled(sm, true); - - while (true) { - pio.sm_blocking_write(sm, 0x00ff00 << 8); //red - rp2040.time.sleep_ms(1000); - pio.sm_blocking_write(sm, 0xff0000 << 8); //green - rp2040.time.sleep_ms(1000); - pio.sm_blocking_write(sm, 0x0000ff << 8); //blue - rp2040.time.sleep_ms(1000); - } -} - -fn sm_set_consecutive_pindirs(_pio: Pio, _sm: StateMachine, pin: u5, count: u3, is_out: bool) void { - const sm_regs = _pio.get_sm_regs(_sm); - const pinctrl_saved = sm_regs.pinctrl.raw; - sm_regs.pinctrl.modify(.{ - .SET_BASE = pin, - .SET_COUNT = count, - }); - _pio.sm_exec(_sm, rp2040.pio.Instruction{ - .tag = .set, - .delay_side_set = 0, - .payload = .{ - .set = .{ - .data = @intFromBool(is_out), - .destination = .pindirs, - }, - }, - }); - sm_regs.pinctrl.raw = pinctrl_saved; -} diff --git a/build.zig b/build.zig index 21246fe29..d582de9a7 100644 --- a/build.zig +++ b/build.zig @@ -8,13 +8,27 @@ fn buildTools(b: *std.Build) void { const tools_step = b.step("tools", "Only build the development tools"); b.getInstallStep().dependOn(tools_step); + const eggzon_dep = b.dependency("eggzon", .{}); + const eggzon_mod = eggzon_dep.module("eggzon"); + + const create_build_meta = b.addExecutable(.{ + .name = "create-pkg-descriptor", + .root_source_file = .{ .path = "tools/create-pkg-descriptor.zig" }, + .optimize = .ReleaseSafe, + }); + create_build_meta.addModule("eggzon", eggzon_mod); + installTool(tools_step, create_build_meta); + const archive_info = b.addExecutable(.{ .name = "archive-info", .optimize = .ReleaseSafe, .root_source_file = .{ .path = "tools/archive-info.zig" }, }); + installTool(tools_step, archive_info); +} - tools_step.dependOn(&b.addInstallArtifact(archive_info, .{ +fn installTool(tools_step: *std.Build.Step, exe: *std.Build.Step.Compile) void { + tools_step.dependOn(&tools_step.owner.addInstallArtifact(exe, .{ .dest_dir = .{ .override = .{ .custom = "tools" } }, }).step); } diff --git a/build.zig.zon b/build.zig.zon new file mode 100644 index 000000000..a4e965265 --- /dev/null +++ b/build.zig.zon @@ -0,0 +1,10 @@ +.{ + .name = "microzig/monorepo", + .version = "0.0.0", + .dependencies = .{ + .eggzon = .{ + .url = "https://github.com/ziglibs/eggzon/archive/refs/heads/master.tar.gz", + .hash = "1220cd5cec7e9d4911074a9b2dec2dabef76e1adf94d041bca068163ce7666c4be47", + }, + }, +} diff --git a/build/build.zig.zon b/build/build.zig.zon deleted file mode 100644 index 437acb5f9..000000000 --- a/build/build.zig.zon +++ /dev/null @@ -1,29 +0,0 @@ -.{ - .name = "microzig", - .version = "0.1.0", - .paths = .{ - "build.zig", - "build.zig.zon", - "design", - "docs", - "LICENSE", - "README.adoc", - "src", - "test", - "thoughts.md", - }, - .dependencies = .{ - .uf2 = .{ - .url = "https://github.com/ZigEmbeddedGroup/uf2/archive/8037b439ccbac862471392b25e94a8995d784e2c.tar.gz", - .hash = "1220cc66563fc1ecefca7990968441dc9d4db717884ffa9a2de657f60ed4bb74a70a", - }, - .regz = .{ - .url = "https://github.com/ZigEmbeddedGroup/regz/archive/d66ffd56f51fc46c071412141b5d0c74dc83c310.tar.gz", - .hash = "122002c5f2e31c11373ede6e8a8dd9a61aabd60d38df667ec33b5f994d1f0b503823", - }, - .@"umm-zig" = .{ - .url = "https://github.com/ZigEmbeddedGroup/umm-zig/archive/99d815adfbc5cc4ad385dd765a6192f85e54179f.tar.gz", - .hash = "12207ef7375ea45e97f4fba9c5dfa74d022902893c4dbf1a0076726b7ec39a02ea3f", - }, - }, -} diff --git a/build/microzig-package.json b/build/microzig-package.json index 92812f004..bdabd11c0 100644 --- a/build/microzig-package.json +++ b/build/microzig-package.json @@ -1,4 +1,14 @@ { - "package_name": "microzig-build", - "package_type": "core" -} + "package_name": "build", + "package_type": "build", + "external_dependencies": { + "uf2": { + "url": "https://github.com/ZigEmbeddedGroup/uf2/archive/8037b439ccbac862471392b25e94a8995d784e2c.tar.gz", + "hash": "1220cc66563fc1ecefca7990968441dc9d4db717884ffa9a2de657f60ed4bb74a70a" + }, + "regz": { + "url": "https://github.com/ZigEmbeddedGroup/regz/archive/d66ffd56f51fc46c071412141b5d0c74dc83c310.tar.gz", + "hash": "122002c5f2e31c11373ede6e8a8dd9a61aabd60d38df667ec33b5f994d1f0b503823" + } + } +} \ No newline at end of file diff --git a/core/build.zig.zon b/core/build.zig.zon deleted file mode 100644 index 437acb5f9..000000000 --- a/core/build.zig.zon +++ /dev/null @@ -1,29 +0,0 @@ -.{ - .name = "microzig", - .version = "0.1.0", - .paths = .{ - "build.zig", - "build.zig.zon", - "design", - "docs", - "LICENSE", - "README.adoc", - "src", - "test", - "thoughts.md", - }, - .dependencies = .{ - .uf2 = .{ - .url = "https://github.com/ZigEmbeddedGroup/uf2/archive/8037b439ccbac862471392b25e94a8995d784e2c.tar.gz", - .hash = "1220cc66563fc1ecefca7990968441dc9d4db717884ffa9a2de657f60ed4bb74a70a", - }, - .regz = .{ - .url = "https://github.com/ZigEmbeddedGroup/regz/archive/d66ffd56f51fc46c071412141b5d0c74dc83c310.tar.gz", - .hash = "122002c5f2e31c11373ede6e8a8dd9a61aabd60d38df667ec33b5f994d1f0b503823", - }, - .@"umm-zig" = .{ - .url = "https://github.com/ZigEmbeddedGroup/umm-zig/archive/99d815adfbc5cc4ad385dd765a6192f85e54179f.tar.gz", - .hash = "12207ef7375ea45e97f4fba9c5dfa74d022902893c4dbf1a0076726b7ec39a02ea3f", - }, - }, -} diff --git a/core/microzig-package.json b/core/microzig-package.json index ed42e68ac..6d49cb335 100644 --- a/core/microzig-package.json +++ b/core/microzig-package.json @@ -1,4 +1,10 @@ { - "package_name": "microzig", - "package_type": "core" -} + "package_name": "core", + "package_type": "core", + "external_dependencies": { + "umm-zig": { + "url": "https://github.com/ZigEmbeddedGroup/umm-zig/archive/99d815adfbc5cc4ad385dd765a6192f85e54179f.tar.gz", + "hash": "12207ef7375ea45e97f4fba9c5dfa74d022902893c4dbf1a0076726b7ec39a02ea3f" + } + } +} \ No newline at end of file diff --git a/flake.lock b/flake.lock index d614e0c7e..0776794e5 100644 --- a/flake.lock +++ b/flake.lock @@ -67,16 +67,16 @@ }, "nixpkgs": { "locked": { - "lastModified": 1704290814, - "narHash": "sha256-LWvKHp7kGxk/GEtlrGYV68qIvPHkU9iToomNFGagixU=", + "lastModified": 1704766047, + "narHash": "sha256-q9tH9yvUWVBh5XpWafpCYAYf72ZyNhfmpgfR4fwM6uw=", "owner": "nixos", "repo": "nixpkgs", - "rev": "70bdadeb94ffc8806c0570eb5c2695ad29f0e421", + "rev": "cc2f101c016d42b728a9cb8244215a5d2d98f6df", "type": "github" }, "original": { "owner": "nixos", - "ref": "release-23.05", + "ref": "release-23.11", "repo": "nixpkgs", "type": "github" } diff --git a/flake.nix b/flake.nix index c778a9697..599201eec 100644 --- a/flake.nix +++ b/flake.nix @@ -2,7 +2,7 @@ description = "microzig development environment"; inputs = { - nixpkgs.url = "github:nixos/nixpkgs/release-23.05"; + nixpkgs.url = "github:nixos/nixpkgs/release-23.11"; flake-utils.url = "github:numtide/flake-utils"; # required for latest zig @@ -15,29 +15,83 @@ }; }; - outputs = { - self, - nixpkgs, - flake-utils, - ... - } @ inputs: let - overlays = [ - # Other overlays - (final: prev: { - zigpkgs = inputs.zig.packages.${prev.system}; - }) - ]; - - # Our supported systems are the same supported systems as the Zig binaries - systems = builtins.attrNames inputs.zig.packages; - in + outputs = + { self + , nixpkgs + , flake-utils + , ... + } @ inputs: + let + overlays = [ + # Other overlays + (final: prev: { + zigpkgs = inputs.zig.packages.${prev.system}; + }) + ]; + + # Our supported systems are the same supported systems as the Zig binaries + systems = builtins.attrNames inputs.zig.packages; + + + # buildenv-python-pkgs = ps: with ps; [ + # # ... + # ( + # # https://files.pythonhosted.org/packages/26/b4/bd652fbd5cbfa4f149e1630c0da70dc3c37ac27187eb8425eb403bd28a88/dataclasses_json-0.6.3.tar.gz + # buildPythonPackage rec { + # pname = "dataclasses_json"; + # version = "0.6.3"; + # pyproject = true; + # src = fetchPypi { + # inherit pname version; + # sha256 = "sha256-NctAqugkc2/flZgBNWZBg2NlIZz+FMrrEVw5E293XSo="; + # }; + # doCheck = false; + # propagatedBuildInputs = [ + # # Specify dependencies + # ps.poetry-dynamic-versioning + # pkgs.poetry + # ps.poetry-core + # ]; + # } + # ) + # ]; + + in flake-utils.lib.eachSystem systems ( - system: let - pkgs = import nixpkgs {inherit overlays system;}; - in rec { + system: + let + pkgs = import nixpkgs { inherit overlays system; }; + in + let + + python3 = pkgs.python3.override { + self = python3; + packageOverrides = self: super: { + dataclasses_json = self.buildPythonPackage rec { + pname = "dataclasses_json"; + format = "pyproject"; + version = "0.6.3"; + src = self.fetchPypi { + inherit pname version; + sha256 = "sha256-NctAqugkc2/flZgBNWZBg2NlIZz+FMrrEVw5E293XSo="; + }; + doCheck = false; + nativeBuildInputs = [ self.poetry-dynamic-versioning self.poetry-core ]; + }; + }; + }; + in + rec { devShells.default = pkgs.mkShell { nativeBuildInputs = [ pkgs.zigpkgs."0.11.0" + (python3.withPackages (ps: [ + ps.dataclasses_json + ps.marshmallow + ps.typing-inspect + ps.semver + ps.pathspec + ])) ]; buildInputs = [ diff --git a/for-extraction/uf2-flasher/build.zig b/for-extraction/uf2-flasher/build.zig new file mode 100644 index 000000000..c14804666 --- /dev/null +++ b/for-extraction/uf2-flasher/build.zig @@ -0,0 +1,19 @@ +const std = @import("std"); + +pub fn build(b: *std.Build) !void { + const target = b.standardTargetOptions(.{}); + const optimize = b.standardOptimizeOption(.{}); + + const args_dep = b.dependency("args", .{}); + const args_mod = args_dep.module("args"); + + const flash_tool = b.addExecutable(.{ + .name = "uf2-flash", + .root_source_file = .{ .path = "src/main.zig" }, + .optimize = optimize, + .target = target, + }); + flash_tool.addModule("args", args_mod); + + b.installArtifact(flash_tool); +} diff --git a/board-support/raspberrypi-rp2040/build.zig.zon b/for-extraction/uf2-flasher/build.zig.zon similarity index 100% rename from board-support/raspberrypi-rp2040/build.zig.zon rename to for-extraction/uf2-flasher/build.zig.zon diff --git a/for-extraction/uf2-flasher/src/main.zig b/for-extraction/uf2-flasher/src/main.zig new file mode 100644 index 000000000..3a8af68ed --- /dev/null +++ b/for-extraction/uf2-flasher/src/main.zig @@ -0,0 +1,333 @@ +const std = @import("std"); +const args_parser = @import("args"); +const builtin = @import("builtin"); + +const CliOptions = struct { + help: bool = false, + device: ?[]const u8 = null, + wait: bool = false, + + pub const shorthands = .{ + .h = "help", + .d = "device", + .w = "wait", + }; +}; + +const wait_device_ready_timeout = 60 * std.time.ns_per_s; // timeout until a device is found +const wait_device_avail_timeout = 60 * std.time.ns_per_s; // timeout until a device is found +const access_denied_limit = 20; // try that many times with AccessDenied before the user is informed + +fn print_usage(file: std.fs.File, exe: ?[]const u8) !void { + try file.writer().writeAll(exe orelse "uf2-flash"); + try file.writer().writeAll( + \\ [-h] [-d ] + \\Flash devices easily via the UF2 interface. + \\ + \\Options: + \\ -h, --help Shows this help text. + \\ -d, --device Uses as the UF2 device. Otherwise tries to auto-guess the correct device. + \\ -w, --wait Waits 60 seconds until a device appears. + \\ + ); +} + +pub fn main() !u8 { + const stderr = std.io.getStdErr(); + const stdout = std.io.getStdOut(); + const stdin = std.io.getStdIn(); + + var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); + defer _ = arena.deinit(); + + const allocator = arena.allocator(); + + var cli = args_parser.parseForCurrentProcess(CliOptions, allocator, .print) catch return 1; + defer cli.deinit(); + + if (cli.options.help) { + try print_usage(stdout, cli.executable_name); + return 0; + } + + if (cli.positionals.len != 1) { + try print_usage(stderr, cli.executable_name); + return 1; + } + + const uf2_file_path = cli.positionals[0]; + + var uf2_file = try std.fs.cwd().openFile(uf2_file_path, .{}); + defer uf2_file.close(); + + const uf2_stat = try uf2_file.stat(); + if ((uf2_stat.size % 512) != 0) { + std.log.warn("{s} does not have a size multiple of 512. might be corrupt!", .{uf2_file_path}); + } + + const file_valid = blk: { + try uf2_file.seekTo(0); + + var file_valid = true; + + while (file_valid) { + var block: [512]u8 = undefined; + const len = try uf2_file.read(&block); + if (len == 0) + break; + + // 0 4 First magic number, 0x0A324655 ("UF2\n") + // 4 4 Second magic number, 0x9E5D5157 + // 8 4 Flags + // 12 4 Address in flash where the data should be written + // 16 4 Number of bytes used in data (often 256) + // 20 4 Sequential block number; starts at 0 + // 24 4 Total number of blocks in file + // 28 4 File size or board family ID or zero + // 32 476 Data, padded with zeros + // 508 4 Final magic number, 0x0AB16F30 + + const first_magic_number = std.mem.readIntLittle(u32, block[0..][0..4]); + const second_magic_number = std.mem.readIntLittle(u32, block[4..][0..4]); + const final_magic_number = std.mem.readIntLittle(u32, block[508..][0..4]); + + file_valid = file_valid and (first_magic_number == 0x0A324655); + file_valid = file_valid and (second_magic_number == 0x9E5D5157); + file_valid = file_valid and (final_magic_number == 0x0AB16F30); + + // TODO: Use [File size or board family ID or zero] field to determine the way to find the UF2 device. + } + break :blk file_valid; + }; + + if (file_valid == false) { + std.log.warn("{s} does not seem to be a valid UF2 file. Do you really want to flash it?", .{uf2_file_path}); + while (true) { + try stderr.writer().writeAll("Flash? [jN]: "); + + var buffer: [64]u8 = undefined; + const selection_or_null = try stdin.reader().readUntilDelimiterOrEof(&buffer, '\n'); + + const selection_str = std.mem.trim(u8, selection_or_null orelse "", "\r\n\t "); + if (selection_str.len == 0) + return 1; + + if (std.ascii.eqlIgnoreCase(selection_str, "j")) + break; + + if (std.ascii.eqlIgnoreCase(selection_str, "n")) + return 1; + } + } + + try uf2_file.seekTo(0); + + const detect_timeout = std.time.nanoTimestamp() + wait_device_avail_timeout; + var first_run = true; + const device_path = if (cli.options.device) |devname| + try allocator.dupe(u8, devname) + else while (true) { + if (std.time.nanoTimestamp() >= detect_timeout) { + try stderr.writeAll("failed to detect any RP2040 devices :(\n"); + + return 1; + } + + const maybe_device = try autoDetectPico(allocator); + + if (maybe_device) |device| + break device; + + if (!cli.options.wait) { + try stderr.writeAll("failed to detect any RP2040 devices :(\n"); + return 1; + } + + if (first_run) { + try stderr.writeAll("failed to detect any RP2040 devices, waiting...\n"); + first_run = false; + } + + std.time.sleep(250 * std.time.ns_per_ms); + }; + + const connect_timeout = std.time.nanoTimestamp() + wait_device_ready_timeout; + + var first_attempt = true; + var access_denied_counter: u32 = 0; + var last_err: anyerror = error.Unknown; + var device_file: std.fs.File = blk: while (std.time.nanoTimestamp() < connect_timeout) { + var device = std.fs.cwd().openFile(device_path, .{ .mode = .write_only }) catch |err| { + last_err = err; + + switch (err) { + error.FileNotFound => {}, // just waiting for the device + error.AccessDenied => { + access_denied_counter += 1; + if (access_denied_counter >= access_denied_limit) { + try stderr.writer().print("Could not open {s}: Access denied. Do you have write-access to the device?\n", .{device_path}); + return 1; + } + }, + else => |e| return e, + } + + if (first_attempt) { + try stderr.writer().print("Waiting for {s}.", .{device_path}); + first_attempt = false; + } else { + try stderr.writeAll("."); + } + std.time.sleep(250 * std.time.ns_per_ms); + continue; + }; + try stderr.writeAll("\n"); + break :blk device; + } else { + try stderr.writer().print("\nfailed to connect to {s}: {s}\n", .{ device_path, @errorName(last_err) }); + return 1; + }; + defer device_file.close(); + + try stderr.writeAll("Flashing"); + + { + try uf2_file.seekTo(0); + + var block_num: u64 = 0; + while (true) { + try stderr.writeAll("."); + + var block: [512]u8 = undefined; + const rd_len = try uf2_file.read(&block); + if (rd_len == 0) + break; + if (rd_len != block.len) { + try stderr.writer().print("\nFailed to read block {}: Only {} bytes read!\n", .{ block_num, rd_len }); + return 1; + } + + const wr_len = try device_file.write(&block); + if (wr_len != block.len) { + try stderr.writer().print("\nFailed to write block {}: Only {} bytes written!\n", .{ block_num, wr_len }); + return 1; + } + + block_num += 1; + } + } + try stderr.writeAll("\nDone.\n"); + + return 0; +} + +fn autoDetectPico(allocator: std.mem.Allocator) !?[]const u8 { + switch (builtin.os.tag) { + .linux => { + const stdin = std.io.getStdIn(); + const stderr = std.io.getStdErr(); + + const Device = struct { + name: []const u8, + path: []const u8, + }; + + var picos = std.ArrayList(Device).init(allocator); + defer picos.deinit(); + + var base_dir = try std.fs.openIterableDirAbsolute("/sys/block/", .{}); + defer base_dir.close(); + + var iter = base_dir.iterate(); + + while (try iter.next()) |entry| { + var device_dir = try base_dir.dir.openDir(entry.name, .{}); + defer device_dir.close(); + + const H = struct { + fn isPicoDevice(dir: std.fs.Dir, allo: std.mem.Allocator) !?[]const u8 { + // "/sys/block/*/removable" => "1" + // "/sys/block/*/device/model" => "RP2" + // "/sys/block/*/device/vendor" => "RPI" + + var buffer: [64]u8 = undefined; + + const removable = std.mem.trim(u8, try dir.readFile("removable", &buffer), "\r\n\t "); + if (!std.mem.eql(u8, removable, "1")) + return null; + + const device_model = std.mem.trim(u8, try dir.readFile("device/model", &buffer), "\r\n\t "); + if (!std.mem.eql(u8, device_model, "RP2")) + return null; + + const device_vendor = std.mem.trim(u8, try dir.readFile("device/vendor", &buffer), "\r\n\t "); + if (!std.mem.eql(u8, device_vendor, "RPI")) + return null; + + const device_id = std.mem.trim(u8, try dir.readFile("dev", &buffer), "\r\n\t "); + + return try std.fs.path.join(allo, &.{ + "/dev/block", device_id, + }); + } + }; + + const maybe_device = H.isPicoDevice(device_dir, allocator) catch |err| { + if (err != error.FileNotFound and err != error.AccessDenied) { + std.log.err("failed to scan /sys/block/{s}: {s}", .{ entry.name, @errorName(err) }); + } + continue; + }; + + if (maybe_device) |device_path| { + try picos.append(Device{ + .name = try allocator.dupe(u8, entry.name), + .path = device_path, + }); + } + } + + if (picos.items.len == 0) { + return null; + } + + var default_selection: usize = 0; + + try stderr.writer().writeAll("Select your device:\n"); + for (picos.items, 1..) |pico_dev, index| { + try stderr.writer().print("#{d: <2} {s}\n", .{ index, pico_dev.name }); + + if (default_selection == 0) { + default_selection = index; + } + } + + const selection = while (true) { + try stderr.writer().print("Select port [{}]: ", .{default_selection}); + + var buffer: [64]u8 = undefined; + const selection_or_null = try stdin.reader().readUntilDelimiterOrEof(&buffer, '\n'); + + const selection_str = std.mem.trim(u8, selection_or_null orelse break default_selection, "\r\n\t "); + + if (selection_str.len == 0) + break default_selection; + + const selection = std.fmt.parseInt(usize, selection_str, 10) catch continue; + + if (selection < 1 or selection > picos.items.len) { + continue; + } + + break selection; + }; + + return picos.items[selection - 1].path; + }, + + else => { + std.log.warn("Device auto-detection not implemented for {s}", .{@tagName(builtin.os.tag)}); + return null; + }, + } +} diff --git a/tools/archive-info.zig b/tools/archive-info.zig index d563c0c05..049d98150 100644 --- a/tools/archive-info.zig +++ b/tools/archive-info.zig @@ -21,8 +21,14 @@ const JsonInfo = struct { pub fn main() !void { var gpa = std.heap.GeneralPurposeAllocator(.{}){}; defer _ = gpa.deinit(); + const allocator = gpa.allocator(); + var arena_impl = std.heap.ArenaAllocator.init(allocator); + defer arena_impl.deinit(); + + const arena = arena_impl.allocator(); + const argv = try std.process.argsAlloc(allocator); defer std.process.argsFree(allocator, argv); @@ -35,13 +41,13 @@ pub fn main() !void { var buffered = std.io.bufferedReaderSize(4096, file.reader()); - var decompress = try std.compress.gzip.decompress(allocator, buffered.reader()); - defer decompress.deinit(); + // var decompress = try std.compress.gzip.decompress(allocator, buffered.reader()); + // defer decompress.deinit(); - var arc = try Archive.read_from_tar(allocator, decompress.reader(), .{ + var arc = try Archive.read_from_tar(arena, buffered.reader(), .{ .strip_components = 0, }); - defer arc.deinit(allocator); + defer arc.deinit(arena); { var paths = std.ArrayList([]const u8).init(allocator); @@ -197,9 +203,11 @@ const Archive = struct { if (start + rounded_file_size > end) return error.TarHeadersTooBig; start = @as(usize, @intCast(start + rounded_file_size)); }, - .hard_link => return error.TarUnsupportedFileType, - .symbolic_link => return error.TarUnsupportedFileType, - else => return error.TarUnsupportedFileType, + // includes .symlink, .hardlink + else => { + std.log.err("unsupported tar type ({}) for '{s}'", .{ header.fileType(), unstripped_file_name }); + return error.TarUnsupportedFileType; + }, } } diff --git a/tools/bundle.py b/tools/bundle.py new file mode 100755 index 000000000..1d6ab9ea2 --- /dev/null +++ b/tools/bundle.py @@ -0,0 +1,473 @@ +#!/usr/bin/env python3 +# +# Prepares a full deployment of MicroZig. +# Creates all packages into /microzig-deploy with the final folder structure. +# + +import sys, os, subprocess,datetime, re, shutil, json, hashlib +from pathlib import Path, PurePosixPath +from dataclasses import dataclass, field +from dataclasses_json import dataclass_json, config as dcj_config, Exclude as JsonExclude +from semver import Version +from marshmallow import fields +from enum import Enum as StrEnum +import pathspec +import stat +from marshmallow import fields as mm_fields +from typing import Optional + + +VERBOSE = False +ALL_FILES_DIR=".data" +REQUIRED_TOOLS = [ + "zig", + "git", + # "date", + # "find", + # "jq", + # "mkdir", + # "dirname", + # "realpath", +] + +REPO_ROOT = Path(__file__).parent.parent +assert REPO_ROOT.is_dir() + + + + +class PackageType(StrEnum): + build = "build" + core = "core" + board_support = "board-support" + +@dataclass_json +@dataclass +class Archive: + size: int + sha256sum: str + +@dataclass_json +@dataclass +class Package: + hash: str + files: list[str] = field(default_factory=lambda:[]) + +@dataclass_json +@dataclass +class ExternalDependency: + url: str + hash: str + +@dataclass_json +@dataclass +class Timestamp: + unix: str + iso: str + +@dataclass_json +@dataclass +class PackageConfiguration: + package_name: str + package_type: PackageType + + version: Optional[Version] = field(default=None, metadata=dcj_config(decoder=Version.parse, encoder=Version.__str__, mm_field=fields.String())) + + external_dependencies: dict[str,ExternalDependency] = field(default_factory=lambda:dict()) + inner_dependencies: set[str] = field(default_factory=lambda:set()) + + archive: Optional[Archive] = field(default = None) + created: Optional[Timestamp] = field(default = None) + package: Optional[Package] = field(default= None) + + # inner fields: + # package_dir: Path = field(default=None, metadata = dcj_config(exclude=JsonExclude.ALWAYS)) + +PackageSchema = Package.schema() +PackageConfigurationSchema = PackageConfiguration.schema() + +def file_digest(path: Path, hashfunc) -> bytes: + BUF_SIZE = 65536 + + digest = hashfunc() + + with path.open('rb') as f: + while True: + data = f.read(BUF_SIZE) + if not data: + break + digest.update(data) + + return digest.digest() + + +FILE_STAT_MAP = { + stat.S_IFDIR: "directory", + stat.S_IFCHR: "character device", + stat.S_IFBLK: "block device", + stat.S_IFREG: "regular", + stat.S_IFIFO: "fifo", + stat.S_IFLNK: "link", + stat.S_IFSOCK: "socket", + } + +def file_type(path: Path) -> str: + return FILE_STAT_MAP[stat.S_IFMT( path.stat().st_mode)] + +def execute_raw(*args,hide_stderr = False,**kwargs): + args = [ str(f) for f in args] + if VERBOSE: + print(*args) + res = subprocess.run(args, **kwargs, check=False) + if res.stderr is not None and (not hide_stderr or res.returncode != 0): + sys.stderr.buffer.write(res.stderr) + if res.returncode != 0: + sys.stderr.write(f"command {' '.join(args)} failed with exit code {res.returncode}") + res.check_returncode() + return res + +def execute(*args,**kwargs): + execute_raw(*args, **kwargs, capture_output=False) + +def slurp(*args, **kwargs): + res = execute_raw(*args, **kwargs, capture_output=True) + return res.stdout + +def check_required_tools(): + for tool in REQUIRED_TOOLS: + slurp("which", tool) + + +def check_zig_version(expected): + actual = slurp("zig", "version") + if actual.strip() != expected.encode(): + raise RuntimeError(f"Unexpected zig version! Expected {expected}, but found {actual.strip()}!") + +def build_zig_tools(): + # ensure we have our tools available: + execute("zig", "build", "tools", cwd=REPO_ROOT) + + archive_info = REPO_ROOT / "zig-out/tools/archive-info" + create_pkg_descriptor = REPO_ROOT / "zig-out/tools/create-pkg-descriptor" + + assert archive_info.is_file() + assert create_pkg_descriptor.is_file() + + return { + "archive_info": archive_info, + "create_pkg_descriptor": create_pkg_descriptor, + } + + +# Determines the correct version: +def get_version_from_git() -> str: + + raw_git_out = slurp("git", "describe", "--match", "*.*.*", "--tags", "--abbrev=9", cwd=REPO_ROOT).strip().decode() + + def render_version(major,minor,patch,counter,hash): + return f"{major}.{minor}.{patch}-{counter}-{hash}" + + full_version = re.match('^([0-9]+)\.([0-9]+)\.([0-9]+)\-([0-9]+)\-([a-z0-9]+)$', raw_git_out) + if full_version: + return render_version(*full_version.groups()) + + + base_version = re.match('^([0-9]+)\.([0-9]+)\.([0-9]+)$', raw_git_out) + if base_version: + commit_hash = slurp("git", "rev-parse", "--short=9", "HEAD") + return render_version(*base_version.groups(), 0, commit_hash) + + raise RuntimeError(f"Bad result '{raw_git_out}' from git describe.") + + +def create_output_directory(repo_root: Path) -> Path: + + deploy_target=repo_root / "microzig-deploy" + if deploy_target.is_dir(): + shutil.rmtree(deploy_target) + assert not deploy_target.exists() + + deploy_target.mkdir() + + return deploy_target + +def resolve_dependency_order(packages: dict[PackageConfiguration]) -> list[PackageConfiguration]: + + open_list = list(packages.values()) + + closed_set = set() + closed_list = [] + while len(open_list) > 0: + + head = open_list.pop(0) + + all_resolved = True + for dep_name in head.inner_dependencies: + + dep = packages[dep_name] + + if dep.package_name not in closed_set: + all_resolved = False + break + + if all_resolved: + closed_set.add(head.package_name) + closed_list.append(head) + else: + open_list.append(head) + + return closed_list + +def get_batch_timestamp(): + render_time = datetime.datetime.now() + return Timestamp( + unix=str(int(render_time.timestamp())), + iso=render_time.isoformat(), + ) + +def main(): + + check_required_tools() + + check_zig_version("0.11.0") + + print("preparing environment...") + + deploy_target = create_output_directory(REPO_ROOT) + + # Some generic meta information: + batch_timestamp = get_batch_timestamp() + + version = get_version_from_git() + + tools = build_zig_tools() + + # After building the tools, zig-cache should exist, so we can tap into it for our own caching purposes: + + cache_root = REPO_ROOT / "zig-cache" + assert cache_root.is_dir() + + cache_dir = cache_root / "microzig" + cache_root.mkdir(exist_ok=True) + + # Prepare `.gitignore` pattern matcher: + global_ignore_spec = pathspec.PathSpec.from_lines( + pathspec.patterns.GitWildMatchPattern, + (REPO_ROOT / ".gitignore").read_text().splitlines(), + ) + + # also insert a pattern to exclude + global_ignore_spec.patterns.append( + pathspec.patterns.GitWildMatchPattern("microzig-package.json") + ) + + print(global_ignore_spec) + + # Fetch and find all packages: + + print("validating packages...") + + packages = {} + validation_ok = True + + for meta_path in REPO_ROOT.rglob("microzig-package.json"): + assert meta_path.is_file() + + pkg_dir = meta_path.parent + + pkg_dict = json.loads(meta_path.read_bytes()) + pkg = PackageConfigurationSchema.load(pkg_dict) + + pkg.version = version + pkg.created = batch_timestamp + pkg.package_dir = pkg_dir + + if pkg.package_type == PackageType.core: + pass + elif pkg.package_type == PackageType.build: + pass + elif pkg.package_type == PackageType.board_support: + pkg.inner_dependencies.add("core") # BSPs implicitly depend on the core "microzig" package + else: + assert False + + buildzig_path = pkg_dir / "build.zig" + buildzon_path = pkg_dir / "build.zig.zon" + + if not buildzig_path.is_file(): + print("") + print(f"The package at {meta_path} is missing its build.zig file: {buildzig_path}") + print("Please create a build.zig for that package!") + validation_ok = False + + if buildzon_path.is_file(): + print("") + print(f"The package at {meta_path} has a build.zig.zon: {buildzon_path}") + print("Please remove that file and merge it into microzig-package.json!") + validation_ok = False + + if pkg.package_name not in packages: + packages[pkg.package_name] = pkg + else: + print("") + print(f"The package at {meta_path} has a duplicate package name {pkg.package_name}") + print("Please remove that file and merge it into microzig-package.json!") + validation_ok = False + + # print("%d\t%s\n", "${pkg_prio}" "${reldir}" >> "${cache_dir}/packages.raw") + + # cat "${cache_dir}/packages.raw" | sort | cut -f 2 > "${cache_dir}/packages.list" + + if not validation_ok: + print("Not all packages are valid. Fix the packages and try again!" ) + exit(1) + + print("loaded packages:") + for key in packages: + print(f" * {key}") + + print("resolving inner dependencies...") + + evaluation_ordered_packages = resolve_dependency_order(packages) + + # bundle everything: + + + + + print("creating packages...") + for pkg in evaluation_ordered_packages: + print(f"bundling {pkg.package_name}...") + + pkg_dir = pkg.package_dir + + pkg_cache_dir = cache_dir / hashlib.md5(pkg.package_name.encode()).hexdigest() + pkg_cache_dir.mkdir(exist_ok=True) + + meta_path = pkg_dir / "microzig-package.json" + pkg_zon_file = pkg_cache_dir / "build.zig.zon" + + out_rel_dir: PurePosixPath + out_basename: str + extra_json: dict = {} + + if pkg.package_type == PackageType.build: + out_rel_dir = PurePosixPath(".") + out_basename = pkg.package_name + + elif pkg.package_type == PackageType.core: + out_rel_dir = PurePosixPath(".") + out_basename = pkg.package_name + + elif pkg.package_type == PackageType.board_support: + parsed_pkg_name = PurePosixPath(pkg.package_name) + + out_rel_dir = "board-support" / parsed_pkg_name.parent + out_basename = parsed_pkg_name.name + + bsp_info = slurp( + "zig", "build-exe", + f"{REPO_ROOT}/tools/extract-bsp-info.zig" , + "--cache-dir", f"{REPO_ROOT}/zig-cache", + "--deps", "bsp,microzig", + "--mod", f"bsp:microzig:{pkg_dir}/build.zig", + "--mod", f"microzig:uf2:{REPO_ROOT}/core/build.zig", + "--mod", f"uf2::{REPO_ROOT}/tools/lib/dummy_uf2.zig", + "--name", "extract-bsp-info", + cwd=pkg_cache_dir, + ) + + extra_json_str=slurp(pkg_cache_dir/"extract-bsp-info") + + extra_json = json.loads(extra_json_str) + + else: + assert False + + assert out_rel_dir is not None + assert out_basename is not None + assert isinstance(extra_json, dict) + + # File names: + + out_file_name_tar = f"{out_basename}-{version}.tar" + out_file_name_compr = f"{out_file_name_tar}.gz" + out_file_name_meta = f"{out_basename}-{version}.json" + + out_symlink_pkg_name = f"{out_basename}.tar.gz" + out_symlink_meta_name = f"{out_basename}.json" + + + # Directories_: + out_base_dir = deploy_target / out_rel_dir + out_data_dir = out_base_dir / ALL_FILES_DIR + + # paths: + out_file_tar = out_data_dir / out_file_name_tar + out_file_targz = out_data_dir / out_file_name_compr + out_file_meta = out_data_dir / out_file_name_meta + + out_symlink_pkg = out_base_dir / out_symlink_pkg_name + out_symlink_meta = out_base_dir / out_symlink_meta_name + + # ensure the directories exist: + out_base_dir.mkdir(parents = True, exist_ok=True) + out_data_dir.mkdir(parents = True, exist_ok=True) + + # find files that should be packaged: + + package_files = [*global_ignore_spec.match_tree(pkg_dir,negate = True )] + # package_files = [ + # file.relative_to(pkg_dir) + # for file in pkg_dir.rglob("*") + # if not global_ignore_spec.match_file(str(file)) + # if file.name != + # ] + + if VERBOSE: + print("\n".join(f" * {str(f)} ({file_type(pkg_dir / f)})" for f in package_files)) + print() + + # tar -cf "${out_tar}" $(git ls-files -- . ':!:microzig-package.json') + execute("tar", "-cf", out_file_tar, "--hard-dereference", *package_files, cwd=pkg_dir) + + zon_data = slurp( + tools["create_pkg_descriptor"], version, out_rel_dir, + input=PackageConfigurationSchema.dumps(pkg).encode(), + ) + + with pkg_zon_file.open("wb") as f: + f.write(zon_data) + + slurp("zig", "fmt", pkg_zon_file) # slurp the message away + + execute("tar", "-rf", out_file_tar, "--hard-dereference", pkg_zon_file.name, cwd=pkg_zon_file.parent) + + # tar --list --file "${out_tar}" > "${pkg_cache_dir}/contents.list" + + zig_pkg_info_str = slurp(tools["archive_info"], out_file_tar) + pkg.package = PackageSchema.loads(zig_pkg_info_str) + + # explicitly use maximum compression level here as we're shipping to potentially many people + execute("gzip", "-f9", out_file_tar) + assert not out_file_tar.exists() + assert out_file_targz.is_file() + del out_file_tar + + pkg.archive = Archive( + sha256sum = file_digest(out_file_targz, hashlib.sha256).hex(), + size = str(out_file_targz.stat().st_size), + ) + + with out_file_meta.open("w") as f: + f.write(PackageConfigurationSchema.dumps(pkg)) + + out_symlink_pkg.symlink_to(out_file_targz.relative_to(out_symlink_pkg.parent)) + out_symlink_meta.symlink_to(out_file_meta.relative_to(out_symlink_meta.parent)) + + # TODO: Verify that each package can be unpacked and built + + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tools/bundle.sh b/tools/bundle.sh deleted file mode 100755 index 3f19239f1..000000000 --- a/tools/bundle.sh +++ /dev/null @@ -1,169 +0,0 @@ -#!/bin/sh - -# -# Prepares a full deployment of MicroZig. -# Creates all packages into /microzig-deploy with the final folder structure. -# - -set -eu - -all_files_dir=".data" - -# test for all required tools: -which zig date find jq mkdir dirname realpath > /dev/null - -[ "$(zig version)" = "0.11.0" ] - -repo_root="$(dirname "$(dirname "$(realpath "$0")")")" -[ -d "${repo_root}" ] - -echo "preparing environment..." - -alias create_package="${repo_root}/tools/create-package.sh" - -# Some generic meta information: - -unix_timestamp="$(date '+%s')" -iso_timestamp="$(date --iso-8601=seconds)" - -# Determine correct version: - -git_description="$(git describe --match "*.*.*" --tags --abbrev=9)" -version="" - -# render-version -render_version() -{ - [ "$#" -eq 5 ] - echo "$1.$2.$3-$4-$5" -} - -case "${git_description}" in - *.*.*-*-*) - version="$(render_version $(echo "${git_description}" | sed -E 's/^([0-9]+)\.([0-9]+)\.([0-9]+)\-([0-9]+)\-([a-z0-9]+)$/\1 \2 \3 \4 \5/'))" - ;; - - *.*.*) - # a "on point" tagged version still has a hash as well as the counter 0! - version="$(render_version $(echo "${git_description}" | sed -E 's/^([0-9]+)\.([0-9]+)\.([0-9]+)$/\1 \2 \3/') 0 $(git rev-parse --short=9 HEAD))" - ;; - - *) - echo "Bad result '${git_description}' from git describe." >&2 - exit 1 - ;; -esac - -if [ -z "${version}" ]; then - echo "Could not determine a version. Please verify repository state!" >&2 - exit 1 -fi - -deploy_target="${repo_root}/microzig-deploy" - -[ -d "${deploy_target}" ] && rm -r "${deploy_target}" -mkdir -p "${deploy_target}" - -cd "${repo_root}" - -# ensure we have our tools available: -zig build tools - -[ -x "${repo_root}/zig-out/tools/archive-info" ] -alias archive_info="${repo_root}/zig-out/tools/archive-info" - -for dir in $(find -type f -name microzig-package.json -exec dirname '{}' ';'); do - dir="$(realpath "${dir}")" - meta_path="$(realpath "${dir}/microzig-package.json")" - - pkg_name="$(jq -r .package_name < "${meta_path}")" - pkg_type="$(jq -r .package_type < "${meta_path}")" - - ( - cd "${dir}" - - echo "bundling ${dir}..." - - out_dir="" - out_basename="" - extra_json="{}" - - case "${pkg_type}" in - core) - out_dir="${deploy_target}" - out_basename="${pkg_name}" - ;; - - board-support) - out_dir="${deploy_target}/board-support/$(dirname "${pkg_name}")" - out_basename="$(basename "${pkg_name}")" - - extra_json="$( - zig run \ - "${repo_root}/tools/extract-bsp-info.zig" \ - --cache-dir "${repo_root}/zig-cache" \ - --deps bsp,microzig \ - --mod "bsp:microzig:${dir}/build.zig" \ - --mod "microzig:uf2:${repo_root}/core/build.zig" \ - --mod "uf2::${repo_root}/tools/lib/dummy_uf2.zig" \ - )" - - ;; - - *) - echo "Unsupported package type: '${pkg_type}'!" >&2 - exit 1 - ;; - esac - - [ ! -z "${out_dir}" ] && [ ! -z "${out_basename}" ] - - out_fullname="${out_basename}-${version}.tar.gz" - out_fullmeta="${out_basename}-${version}.json" - - out_name="${out_basename}.tar.gz" - out_meta="${out_basename}.json" - - out_path="${out_dir}/${all_files_dir}/${out_fullname}" - - mkdir -p "${out_dir}/${all_files_dir}" - - # first, compile package - create_package "${dir}" "${out_path}" - - # get some required metadata - file_hash="$(sha256sum "${out_path}" | cut -d " " -f 1)" - file_size="$(stat --format="%s" "${out_path}")" - - pkg_info="$(archive_info ${out_path})" - - jq \ - --arg vers "${version}" \ - --arg ts_unix "${unix_timestamp}" \ - --arg ts_iso "${iso_timestamp}" \ - --arg fhash "${file_hash}" \ - --arg fsize "${file_size}" \ - --argjson pkg "${pkg_info}" \ - --argjson extra "${extra_json}" \ - '. + $extra + { - version: $vers, - created: { - unix: $ts_unix, - iso: $ts_iso, - }, - archive: { - size: $fsize, - sha256sum: $fhash, - }, - package: $pkg - }' \ - "${meta_path}" \ - > "${out_dir}/${all_files_dir}/${out_fullmeta}" \ - - ( - cd "${out_dir}" - ln -s "${all_files_dir}/${out_fullname}" "${out_name}" - ln -s "${all_files_dir}/${out_fullmeta}" "${out_meta}" - ) - ) -done diff --git a/tools/create-pkg-descriptor.zig b/tools/create-pkg-descriptor.zig new file mode 100644 index 000000000..e6226f6b8 --- /dev/null +++ b/tools/create-pkg-descriptor.zig @@ -0,0 +1,122 @@ +const std = @import("std"); +const eggzon = @import("eggzon"); + +const fmtEscapes = std.zig.fmtEscapes; +const fmtId = std.zig.fmtId; + +const Archive = struct { + sha256sum: []const u8, + size: []const u8, +}; + +const Package = struct { + hash: []const u8, + files: []const []const u8, +}; + +const Timestamp = struct { + iso: []const u8, + unix: []const u8, +}; + +const MetaData = struct { + const Type = enum { + @"board-support", + core, + build, + }; + + package_name: []const u8, + package_type: Type, + version: []const u8, + + inner_dependencies: []const []const u8 = &.{}, + external_dependencies: std.json.Value = .null, + + archive: ?Archive = null, + package: ?Package = null, + created: ?Timestamp = null, +}; + +// create-pkg-descriptor +pub fn main() !void { + var gpa = std.heap.GeneralPurposeAllocator(.{}){}; + defer _ = gpa.deinit(); + + const allocator = gpa.allocator(); + + var arena_impl = std.heap.ArenaAllocator.init(allocator); + defer arena_impl.deinit(); + + const arena = arena_impl.allocator(); + + const argv = try std.process.argsAlloc(arena); + + if (argv.len != 3) { + @panic("version and/or relpath missing!"); + } + + // System configuration: + const deployment_base_url = "https://download.microzig.tech/packages"; // TODO: Make those configurable + + // build inputs: + const version_string = argv[1]; + const rel_pkg_path = argv[2]; + + const version = try std.SemanticVersion.parse(version_string); + + const json_input = try std.io.getStdIn().readToEndAlloc(arena, 1 << 20); + + errdefer std.log.err("failed to parse json from {s}", .{json_input}); + + const metadata = try std.json.parseFromSliceLeaky(MetaData, arena, json_input, .{}); + + var buffered_stdout = std.io.bufferedWriter(std.io.getStdOut().writer()); + + const stdout = buffered_stdout.writer(); + { + try stdout.writeAll(".{\n"); + try stdout.print(" .name = \"{}\",\n", .{fmtEscapes(metadata.package_name)}); + try stdout.print(" .version = \"{}\",\n", .{version}); + try stdout.writeAll(" .dependencies = .{\n"); + if (metadata.external_dependencies != .null) { + const deps = &metadata.external_dependencies.object; + for (deps.keys(), deps.values()) |key, value| { + const dep: *const std.json.ObjectMap = &value.object; + + // + + try stdout.print(" .{} = .{{\n", .{fmtId(key)}); + + try stdout.print(" .url = \"{}\",\n", .{fmtEscapes(dep.get("url").?.string)}); + try stdout.print(" .hash = \"{}\",\n", .{fmtEscapes(dep.get("hash").?.string)}); + try stdout.writeAll(" },\n"); + } + } + + switch (metadata.package_type) { + .core => { + // core packages are always "standalone" in the microzig environment and provide the root + // of the build + }, + + .build => { + // + }, + + .@"board-support" => { + // bsp packages implicitly depend on the "microzig" package: + + try stdout.writeAll(" .microzig = .{\n"); + try stdout.print(" .url = \"{}/{}\",\n", .{ fmtEscapes(deployment_base_url), fmtEscapes(rel_pkg_path) }); + try stdout.print(" .hash = \"{}\",\n", .{fmtEscapes("???")}); + try stdout.writeAll(" },\n"); + }, + } + + try stdout.writeAll(" },\n"); + try stdout.writeAll("}\n"); + } + + try buffered_stdout.flush(); +} From 8d9c165a1d863f0c3e40a83cd7d472ab59320176 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Tue, 9 Jan 2024 16:01:21 +0100 Subject: [PATCH 256/286] Fixes CI --- .github/workflows/build.yml | 6 +++++- tools/bundle.py | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e697a7464..350c2ae08 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -27,9 +27,13 @@ jobs: with: version: 0.11.0 + - name: Install PIP packages + run: | + pip install dataclasses_json==0.6.3 marshmallow typing-inspect semver pathspec + - name: Generate and validate packages run: | - ./tools/bundle.sh + ./tools/bundle.py - name: Upload artifacts uses: actions/upload-artifact@v4 diff --git a/tools/bundle.py b/tools/bundle.py index 1d6ab9ea2..cd3298853 100755 --- a/tools/bundle.py +++ b/tools/bundle.py @@ -248,7 +248,7 @@ def main(): assert cache_root.is_dir() cache_dir = cache_root / "microzig" - cache_root.mkdir(exist_ok=True) + cache_dir.mkdir(exist_ok=True) # Prepare `.gitignore` pattern matcher: global_ignore_spec = pathspec.PathSpec.from_lines( From c65088cca6966ec5688185e9d040075e456433f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Tue, 9 Jan 2024 17:28:08 +0100 Subject: [PATCH 257/286] Further improves deployment information, makes package info really useful --- build/microzig-package.json | 2 +- core/microzig-package.json | 2 +- tools/bundle.py | 102 ++++++++++++++++++++------------ tools/create-pkg-descriptor.zig | 82 +++++++++++++------------ 4 files changed, 110 insertions(+), 78 deletions(-) diff --git a/build/microzig-package.json b/build/microzig-package.json index bdabd11c0..6ddeab066 100644 --- a/build/microzig-package.json +++ b/build/microzig-package.json @@ -1,5 +1,5 @@ { - "package_name": "build", + "package_name": "microzig-build", "package_type": "build", "external_dependencies": { "uf2": { diff --git a/core/microzig-package.json b/core/microzig-package.json index 6d49cb335..b8cc13610 100644 --- a/core/microzig-package.json +++ b/core/microzig-package.json @@ -1,5 +1,5 @@ { - "package_name": "core", + "package_name": "microzig-core", "package_type": "core", "external_dependencies": { "umm-zig": { diff --git a/tools/bundle.py b/tools/bundle.py index cd3298853..76c85c1ee 100755 --- a/tools/bundle.py +++ b/tools/bundle.py @@ -14,7 +14,7 @@ import pathspec import stat from marshmallow import fields as mm_fields -from typing import Optional +from typing import Optional, Any VERBOSE = False @@ -29,6 +29,7 @@ # "dirname", # "realpath", ] +DEPLOYMENT_BASE="https://download.microzig.tech/packages" REPO_ROOT = Path(__file__).parent.parent assert REPO_ROOT.is_dir() @@ -44,7 +45,7 @@ class PackageType(StrEnum): @dataclass_json @dataclass class Archive: - size: int + size: str sha256sum: str @dataclass_json @@ -64,7 +65,7 @@ class ExternalDependency: class Timestamp: unix: str iso: str - + @dataclass_json @dataclass class PackageConfiguration: @@ -80,9 +81,30 @@ class PackageConfiguration: created: Optional[Timestamp] = field(default = None) package: Optional[Package] = field(default= None) + download_url: Optional[str] = field(default=None) + + microzig: Optional[Any] = field(default=None) + # inner fields: # package_dir: Path = field(default=None, metadata = dcj_config(exclude=JsonExclude.ALWAYS)) +@dataclass_json +@dataclass +class PackageDesc: + name: str + type: PackageType + version: str # semver + metadata: str # url to json + download: str # url to tar.gz + +@dataclass_json +@dataclass +class PackageIndex: + + last_update: Timestamp + packages: list[PackageDesc] + +PackageIndexSchema = PackageIndex.schema() PackageSchema = Package.schema() PackageConfigurationSchema = PackageConfiguration.schema() @@ -261,8 +283,6 @@ def main(): pathspec.patterns.GitWildMatchPattern("microzig-package.json") ) - print(global_ignore_spec) - # Fetch and find all packages: print("validating packages...") @@ -282,15 +302,28 @@ def main(): pkg.created = batch_timestamp pkg.package_dir = pkg_dir + if pkg.package_type == PackageType.core: - pass + pkg.out_rel_dir = PurePosixPath(".") + pkg.out_basename = pkg.package_name + elif pkg.package_type == PackageType.build: - pass + pkg.out_rel_dir = PurePosixPath(".") + pkg.out_basename = pkg.package_name + elif pkg.package_type == PackageType.board_support: - pkg.inner_dependencies.add("core") # BSPs implicitly depend on the core "microzig" package + parsed_pkg_name = PurePosixPath(pkg.package_name) + + pkg.out_rel_dir = "board-support" / parsed_pkg_name.parent + pkg.out_basename = parsed_pkg_name.name + + pkg.inner_dependencies.add("microzig-core") # BSPs implicitly depend on the core "microzig" package else: assert False + download_path = pkg.out_rel_dir / ALL_FILES_DIR / f"{pkg.out_basename}-{version}.tar.gz" + pkg.download_url = f"{DEPLOYMENT_BASE}/{download_path}" + buildzig_path = pkg_dir / "build.zig" buildzon_path = pkg_dir / "build.zig.zon" @@ -313,11 +346,7 @@ def main(): print(f"The package at {meta_path} has a duplicate package name {pkg.package_name}") print("Please remove that file and merge it into microzig-package.json!") validation_ok = False - - # print("%d\t%s\n", "${pkg_prio}" "${reldir}" >> "${cache_dir}/packages.raw") - - # cat "${cache_dir}/packages.raw" | sort | cut -f 2 > "${cache_dir}/packages.list" - + if not validation_ok: print("Not all packages are valid. Fix the packages and try again!" ) exit(1) @@ -332,8 +361,10 @@ def main(): # bundle everything: - - + index = PackageIndex( + last_update = batch_timestamp, + packages = [], + ) print("creating packages...") for pkg in evaluation_ordered_packages: @@ -347,24 +378,10 @@ def main(): meta_path = pkg_dir / "microzig-package.json" pkg_zon_file = pkg_cache_dir / "build.zig.zon" - out_rel_dir: PurePosixPath - out_basename: str - extra_json: dict = {} + out_rel_dir: PurePosixPath = pkg.out_rel_dir + out_basename: str = pkg.out_basename - if pkg.package_type == PackageType.build: - out_rel_dir = PurePosixPath(".") - out_basename = pkg.package_name - - elif pkg.package_type == PackageType.core: - out_rel_dir = PurePosixPath(".") - out_basename = pkg.package_name - - elif pkg.package_type == PackageType.board_support: - parsed_pkg_name = PurePosixPath(pkg.package_name) - - out_rel_dir = "board-support" / parsed_pkg_name.parent - out_basename = parsed_pkg_name.name - + if pkg.package_type == PackageType.board_support: bsp_info = slurp( "zig", "build-exe", f"{REPO_ROOT}/tools/extract-bsp-info.zig" , @@ -379,14 +396,11 @@ def main(): extra_json_str=slurp(pkg_cache_dir/"extract-bsp-info") - extra_json = json.loads(extra_json_str) + pkg.microzig = json.loads(extra_json_str) - else: - assert False assert out_rel_dir is not None assert out_basename is not None - assert isinstance(extra_json, dict) # File names: @@ -432,8 +446,9 @@ def main(): execute("tar", "-cf", out_file_tar, "--hard-dereference", *package_files, cwd=pkg_dir) zon_data = slurp( - tools["create_pkg_descriptor"], version, out_rel_dir, - input=PackageConfigurationSchema.dumps(pkg).encode(), + tools["create_pkg_descriptor"], + pkg.package_name, + input=PackageConfigurationSchema.dumps(evaluation_ordered_packages, many=True ).encode(), ) with pkg_zon_file.open("wb") as f: @@ -465,6 +480,17 @@ def main(): out_symlink_pkg.symlink_to(out_file_targz.relative_to(out_symlink_pkg.parent)) out_symlink_meta.symlink_to(out_file_meta.relative_to(out_symlink_meta.parent)) + index.packages.append(PackageDesc( + name = pkg.package_name, + type = pkg.package_type, + version = version, + metadata = pkg.download_url.removesuffix(".tar.gz") + ".json", + download = pkg.download_url, + )) + + with (deploy_target / "index.json").open("w") as f: + f.write(PackageIndexSchema.dumps(index)) + # TODO: Verify that each package can be unpacked and built diff --git a/tools/create-pkg-descriptor.zig b/tools/create-pkg-descriptor.zig index e6226f6b8..26862f3ad 100644 --- a/tools/create-pkg-descriptor.zig +++ b/tools/create-pkg-descriptor.zig @@ -36,9 +36,27 @@ const MetaData = struct { archive: ?Archive = null, package: ?Package = null, created: ?Timestamp = null, + + download_url: ?[]const u8 = null, + + microzig: std.json.Value = .null, }; -// create-pkg-descriptor +fn findPackage(packages: []const MetaData, name: []const u8) ?*const MetaData { + return for (packages) |*pkg| { + if (std.mem.eql(u8, pkg.package_name, name)) + return pkg; + } else null; +} + +fn renderDep(writer: anytype, name: []const u8, url: []const u8, hash: []const u8) !void { + try writer.print(" .{} = .{{\n", .{fmtId(name)}); + try writer.print(" .url = \"{}\",\n", .{fmtEscapes(url)}); + try writer.print(" .hash = \"{}\",\n", .{fmtEscapes(hash)}); + try writer.writeAll(" },\n"); +} + +// create-pkg-descriptor pub fn main() !void { var gpa = std.heap.GeneralPurposeAllocator(.{}){}; defer _ = gpa.deinit(); @@ -52,66 +70,54 @@ pub fn main() !void { const argv = try std.process.argsAlloc(arena); - if (argv.len != 3) { + if (argv.len != 2) { @panic("version and/or relpath missing!"); } - // System configuration: - const deployment_base_url = "https://download.microzig.tech/packages"; // TODO: Make those configurable - // build inputs: - const version_string = argv[1]; - const rel_pkg_path = argv[2]; - - const version = try std.SemanticVersion.parse(version_string); + const pkg_name = argv[1]; const json_input = try std.io.getStdIn().readToEndAlloc(arena, 1 << 20); errdefer std.log.err("failed to parse json from {s}", .{json_input}); - const metadata = try std.json.parseFromSliceLeaky(MetaData, arena, json_input, .{}); + const all_packages = try std.json.parseFromSliceLeaky([]MetaData, arena, json_input, .{}); + + const package = findPackage(all_packages, pkg_name).?; + + const version = try std.SemanticVersion.parse(package.version); var buffered_stdout = std.io.bufferedWriter(std.io.getStdOut().writer()); const stdout = buffered_stdout.writer(); { try stdout.writeAll(".{\n"); - try stdout.print(" .name = \"{}\",\n", .{fmtEscapes(metadata.package_name)}); + try stdout.print(" .name = \"{}\",\n", .{fmtEscapes(package.package_name)}); try stdout.print(" .version = \"{}\",\n", .{version}); try stdout.writeAll(" .dependencies = .{\n"); - if (metadata.external_dependencies != .null) { - const deps = &metadata.external_dependencies.object; + if (package.external_dependencies != .null) { + const deps = &package.external_dependencies.object; for (deps.keys(), deps.values()) |key, value| { const dep: *const std.json.ObjectMap = &value.object; - - // - - try stdout.print(" .{} = .{{\n", .{fmtId(key)}); - - try stdout.print(" .url = \"{}\",\n", .{fmtEscapes(dep.get("url").?.string)}); - try stdout.print(" .hash = \"{}\",\n", .{fmtEscapes(dep.get("hash").?.string)}); - try stdout.writeAll(" },\n"); + try renderDep( + stdout, + key, + dep.get("url").?.string, + dep.get("hash").?.string, + ); } } - switch (metadata.package_type) { - .core => { - // core packages are always "standalone" in the microzig environment and provide the root - // of the build - }, - - .build => { - // - }, - - .@"board-support" => { - // bsp packages implicitly depend on the "microzig" package: + // Add all other dependencies: + for (package.inner_dependencies) |dep_name| { + const dep = findPackage(all_packages, dep_name).?; - try stdout.writeAll(" .microzig = .{\n"); - try stdout.print(" .url = \"{}/{}\",\n", .{ fmtEscapes(deployment_base_url), fmtEscapes(rel_pkg_path) }); - try stdout.print(" .hash = \"{}\",\n", .{fmtEscapes("???")}); - try stdout.writeAll(" },\n"); - }, + try renderDep( + stdout, + "microzig", + dep.download_url.?, + dep.package.?.hash, + ); } try stdout.writeAll(" },\n"); From e5b00e1d938672f0e53c160a193dcecdec35cbad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Fri, 12 Jan 2024 10:10:19 +0100 Subject: [PATCH 258/286] More docs on the tooling, fixes bug in memory computation. --- .../espressif-esp/extract-bsp-info.o | Bin 1969032 -> 0 bytes tools/archive-info.zig | 5 ++- tools/bundle.py | 11 ++--- tools/create-package.sh | 42 ------------------ tools/create-pkg-descriptor.zig | 15 ++++++- tools/demo-server.py | 7 ++- tools/extract-bsp-info.zig | 4 +- tools/lib/tar.zig | 4 ++ 8 files changed, 33 insertions(+), 55 deletions(-) delete mode 100644 board-support/espressif-esp/extract-bsp-info.o delete mode 100755 tools/create-package.sh diff --git a/board-support/espressif-esp/extract-bsp-info.o b/board-support/espressif-esp/extract-bsp-info.o deleted file mode 100644 index 85f74f4ac9358c4323ab0ae7bd9e83351e07c5ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1969032 zcmd?S4R~Eul|Ot_0u6}V0E!V&0#*o8Bn5<&&lI?DIy4ZJNOeG~GMTC))S8q!W8{|G z1NY=`Fgjd}pTzMiGCBr_v}xs*n^Ky92;oDBiVzCQzMKMq!4i<6@9($PIp?06-lj!n z-v9r7-aJq4*=K*Oz1G@muf6u#ALpvnqH|_dRVBi|s>JDu(pwmtNLYKkCwgg?P;=ri z>31_-*P30Jm$ZV$E{Y_ZjI%5lZDUu^n^&;rkFL1NzbY)^YTnGLqlwOH|6Tsm zNRZN*LKRRMLz(2)3(KqhIsP}T+es7uHq_#0UcuRDt&?~Bn6K?E^s)pB5{7?^k&3u zt6EyCiOfv-PgF>DtJ%c;0?O>s@sB=X1h0E`oEU$t?f9Jk-r|=9C&3+Jz((mqVK&MY z#p}q-E&fD>dLT4zGpizb{_khXLGt{enR1Ya{*Ak6|JlM0B8OVZj^bY_uWrD%iP_{` z$A|q7`+f`(`{6W6I#(eHyPZ@TvOyXk&pm|gBF3?M5maG5%|Fe*KL+r?9RY6Ji>OKQ zKomD1Q;|O+ii9hon13rX4r)Dl)?qoFJ(kmzHHSkPSgyut4)gf_l6z9H%1z0`6RC9r zk?riYoVGs8X&JDbRKMl6;N4p$8B=|h+llDGmGauwZ#lU%gHFp3G8a%WIzb!6KQ#`T z$3b%z$x8E){*lFt$P>jxa9<#}3v|u&1^)~FbI8H^B*)|X5?@WZ)d|c`i=hg3cOY(HaBPOPau$7Gi8ng+xx4M_6n*R{&d@fp0zIsGQ6+{Gjx8;{}^Bs z8*8MwhD~LS@HgRK*B#~khiW$DaG24_H31Yvv5^lqcm$EH;CoGR5mNjOv2FzhPVc8T z0fX)c;agaTJE%NmRU`>QZE01_T9rP6NU6$l&#ANA^XoZYNeO$55BHn~#5N+>}mB|Bfa=z=`AQU>{}tVdN-2h@Vmy zgE-i=f~B_J9_Y*HYKY;;H_LxttYLOEMhKi%AP7((9!pZL|Cx-8Ix=fX>`+V18>r>m z#5yp)T#qGL%iB;(F-d}7iQ)MUy!4Lbp_1RqY+a&5P#Z>;NgZ6k zO*Vfg#+9xyj58DIFV!SEkMxg&z!fYPe+z2}%>&Cx-Y~57`89Z$6B19dM@E=Wmoh z$iFLmq1qyRG3-TQj$0ue@%VTcqhOS027J+1syk+C%QWC8bK?GWXh8tTHW4wfD z8Rf-R^14P%;{EJUT|H>E(e+IzAqoyQjO1|J(n#nr2P0Rzle%8U@WYwktUZo0E!oV` zDA(?$u7?=1(o64<9696=(bTwU^COYBE=X6`cpw{)u&xORgR$J%mU}@B{%fgp=J<<{ z133dRaZ->u%)MylrV8xo7x-5MIY1`N0TH@B%e@dH2b;-VSSz9pSO@tB`M*S7M7AJ9 z8|r-9sNd&r6+6rA>NAIOgqm><^PAVeP?t!w6wr^Y%%&w2uN~;C2R#NFe+n!~l=SX8 zj=u{f02EdMp zLQf`4he8>RLHUA0!Q7b?LR#gC#;nku5TdS0{7;#qkD%;#P10BbKa(g`3lWI7kL66c z`#H&yeuX~()kB%~0z{wXP@elO&S9Y?9ZC`uZ(ttyZ;^h(0%SV|cgp|#QOp<5_n*fL z^eQ9UdLgy|G|0~C9^kZ%L86^DsOuI3xD!%LCP!@uGp;3TRc%C7J%F~N-mk}e%}r$i zDNW1osQW{GF~1wJ1zFPolV#Zt`X3}FNOfK|z9e?`A+cwXYm1)oz$>q9 z+$7=6XwP)P7~kJN-v3<$aIKW->O~UjcOSy4Py>YbF-)exUDi(S1}>02f~R9!zb;z%>9)^B9HtTP_2)+w9tN-1jhLn}$^RoKY!Z6Va`zRCKn=}82r{JQ?f%>S z8_*n#u}*^%EwN$_oJG$9Pt61mPdn4#X^IM+<)6i=X`V3~SjJ=|i$ZZ=43DI;q+Mi^ z#83bk%I z&prxS>_!w8E){@4@sGq}#zCWZ8>tiKS{XwJO|3$JnYs&6zEp~O%nxpc2aK*#G(biNA=f~H9Ifk8sM+Q`Kh0MT4fw=2~D z_!mK)6oWq#R!LM!Ht;S;_*M)=XaK8k(`|z;>jdKm#Wh0ZloMkcQggI_G+3sd6Hk)e zLB(RDb<~TfiF1oc&xgDK(Ir*$Kq1~&T?1TLF*P}e1 zy@Z1%>P49}lSfhmjPmzJS0!L}Rc{$nsQuwOV-N<-fqpZ1ByVaE4akgarQ}q7^0~X3 zEI47S?gqz}Fdicf9E`_Y_@|D`I%@oC|2zI|{%e3DiEeX)^}g*i-#HzlVwRhu-X+2{mgqReKPM{cSpr`C6qeiCV7UuwEazeCsLfXLOth@6-4lK2l&UM| z`0bWQ7nXDie?6cGafjCfFCLo3eGCcuaK);Fq2Ubp3?*?`U zXzWR|5DHI*`MvzT{6YUeg}xBH|NM^QyLlQVI9dnuC;0Ch*`A&~E;K>zM^dJq@JCYP zc#t9E8)(~?j1~0BVRQPsQMF?~jADYpTl}|B-AWt!f5Gs^6l>?+EQpQRZIkAQfRsG6 zS>(&CJ#spJ10rvEX?rh_Gz`#CiuJ^5L_T2 z9Yc&l*quPXtzgVufD3>f@ATgZw58_+L+Pqbm}Ph|&|QG8i7m(6O2|N!!em?(O8X zB~)cVB4o@E`KTw;OY0xzFKEEaA_GCYsbv>B4)G~b($z7NC08E?Jp4V)Ui6;6a+x)v zmINZ%RnmAQHm9zy+MN38o_Ob65bxi``}gpF)1H&B@5!jr=xN>xVkwp8r4b5gNg_M@ z&G%oTkPcv|Hk*;nN!_Mxzm#Nn7)RLlw}sq4!9M|*HjxXiy0e@XN(;m`A1g6x?hZ@T z`E~w1<`nVS>(~Jq>imFzy8pa+pTvs2V17p&qXFOi^KWJ)%-ipsl_>s2DhpZzeWR6Q z$6fwN#23y)K;48nNT{2jDid27UFMGeB6X9T=tc-mnPUJ~M0qwGWI4e1Uoqc=y;nBh z7@7ojMmTxYCMf#W=RmYG*d&j9vp$ya;n_>&&0h9A-k>G$s3%frdISXoMieHZ&6#z? zPKOCz-jRg-VkB(18JX87fr?a&UM{twvrDN|Z&l)~7O=Yy?cUF9cn%2sk(A7T@m}D& z_`5vlqT!J}@c&l)pN9YAt!w{axj8~xM*|mp8iigWYGyGw4(n!|1JH$NT_M!X38Ajt zNCe!$20ok=#tRzuo!V6~Z-d1#W%hcOc_0rimL$w%1RYiPzEEJ*igZd_pe)#!?T5jdkRIc#02O@E3+|KS|_zK!%2+p$$u@x z;^yC<{MX@{QP|<<`sV^GDH&PYH9^R+YTAQfyJPL!t=4$f+Aplwu}MeqeZbaVH#5FZ z`m}Lm{Q3Wzd^OzjX65V0&-}kGU&ph`{}0JmrWnZ=?5$=Q&nBUD8rYLKEw&paG}tVU zd=nodHWvw0jmSz#5L_I@78eta>QB{BHOQf=5xP%7aM)Ar6iu(03koT#;B=tEyISU$ zjHAT7yPUf#=_m|VS`(C1SW^mGPYO+|hFSjRY6f;72sTp1YTg7j(061K^aLL?%Itr@ zs8#$bexPZkaiHThPaPkahaBWzOqC=hWd8xvIs4WobUjImPep13K#m?A%tjoW%OM%F zS4W+naD$iG9hYLrYvhpkZ?xcbg)0Dg^nzO8m_VuBatOWSX&{O<7^zj{#=jZwiiJ?@ ze+vW5_>LSN{~zZthW{O_nfPC*#_U)PJkpiK@=eIgNNQ603@jH6wwRcSr*2XVAxtDN z1pv>@#d||~WOZ3mu=50an2<-DDD*uSzsP>;>Ru=AZ*UhhA`c6rom%)ZspXA+ zD`;W5AU||-@E2MfK}R0ovv?TMDGko-g<^G-wkBVThZdL3VvI;6OkIUf#PZoeQv;4@;DV8{izLA3-9 z3rMPicNcSAm@E8e7%LkN7cnqlhYz`U27DR*rZ}vN2x~@~XDQ8W2f%<`BuzLjPu)#6 zhNRug>hIaZp0Wm3S<2Tk6hsQ{V{}^RUVQ zv)gI;;UcG{-+`ylWH({LA|Bv0atxSJykkY>di-yY$;Gk$d|17F|8sKfC}i9MP}sod zC9geLI;M^a(HbqUmz;^Ub#5Pya`teELm6X)jw} zi~OfDhS4s7olp;X#&ZG>bP`U?)xAoCh}#~_VZ(v118%!{+pP`E$Uk-hbJ@mO3IAkq z+v$jyn!ujbu{^T&aX0L8fBC$^Emf1r0deJJhvC~kVf&n_^b=Lt7VMRICEfK3 zH{@3PmMVtfoI9wkSR^~Y@Ky{kk8rL8H1N#Klj=8;*R$FRpx61uQ%AqnW z#+zrrC@hjU(!s9&Y>a<2%w(2_r5x^m`d@G78=p?TX3k|`wpr3EKCgt0)!JwtTu zVwbR_yWBb3GKPOxE_jYqNn0_9b&owl{Q)%?EnRV;1>zS#O0K>hbroIw_&<-ShzjG) z*zd`XX#WVnK$*Lz39im&tLk;jISz|t{|fRTP(Y?)H(h+vXLbXp7)rKhyufEedPUDE5chMW1l*-Bb>z6 zm_I5b_gz4)2crYEut};Ol=NUd9c#=4fkkVQiOI z?3&+^lQ}g2WR4IHNW#o`!^0nsI1Ik`#Xwf*LB|7RX+K-7<-CgKnY{gbD7;}7On$TF zcE};!tDM#9+7?#2D4IL$-w6Eg!=fLypTOns8oxnv#;~X`&is5FUG?D|*ZWC>lezP8*e zhIGpq)c-+O?gy;_#KSF)=%NLfjQ7Icew~_r9Hk`ANv$`3fCM3NJ*2HQ*p-Cm%s8I} zoC&~ukA;U0rckpGqg;u4dk_`QKV<#Ti&pd~mwFJU9u0wDD`F4|eQBk!Z+$OfRXyv@ zXbVnxWH$c=7RcbIYo6gES`6_eC^=0JeC4-fc7^>`jjGhy+Ek3=+{1{?I@lzbMXx*~ z+wwfR!X)Hjii6v=8R$l|$Yus02YB z#un1~ISf(_2#0ueO`4x@!Y2Eu-VI68flg)+oJb%yMz?U6Ucr1zgaNQ5C+8W{a#iAY zE9x7;R=zP5(=-vR>HQ=0-{!=FUL6pC(s5}RFL8i`0xs0Lo>Ci} zkr-^0s%qgZsxi+i?5zRpj)=@{5HOI*ga~f&2$bBWBy}$EzkMr(5VCDb59i&Gr>alRT34 z1Egu+N;ECj`s7ifN&H54h?B$qb48j~Xw^*IktUVmh;M2#4a#HH##OzUt7#;d_r*?@LnHp`oLwL9)PR!532Kwm(!bc`Xl|~IT zjhL0nFnMG))|+RQ63)}g8|NYgDigS)-~Z`;p@E4z(h!_=2|60=T`^Hx8zEjz##OM7?m)rU6(kcPkj2x5e$^hS zwI$VY8)>;0KM~_34>WKeYU_*9f-T|+(@y>F*uM`d6{XQ1((+ENn2AxvC9q{mgBy9V zZNzPD1}&DkUBPmiSKb<%$Amphh(H!k04>`qrB7YK8G31ZQ#sj(D~__mDU_I#GYq7~{6F#&9 z+4tQiWHVtp+4oH&dkM&1T2A(TXpzPn9^WH24Bbl1nq(tmM4ju^$NV zD<}JC#gT~-jwP_=t&NczMvU7EWUZy7{VGV=!Li>m;eE>{6rIp-q zgM}ur~YsqQWXPF+3Cpwv)LPV9<1lSM90Yx#YWcUf@4@WGnfCG z;1!_|J+24QVjd8?x>Su0%wE?}iM5+k*v%cyCSffPm5xz`gm<3mpIT0O&{i=rVWdwp z=fi5Ts29QC@J8=5+^K<%Kyoc=w z8e?;reZGz;5w~c;3saUTJQ@p+MPV$a$3T2TKycuu#I}vAlm zDSItH#XlR8qM3Dbg6?`~cbn^=!ZoF*lLV0#|K^aI@CW@6dr4ZrwrSvV~H2~ z7s{fTW`~pFm3t`kHbDg$Eo^OZazl)OOV7y_B&6FmqT5UAfhg!r_?P-P`ZO4Udq%+t z+Of+t!qt0q<&-Gs2kel70fdEuOzVxm*hH49o8HxX0^A%SfTvA_IltzM2l~gzSl(@4iv)NU8~lGNm66Qz zYfxiW(*1Fsu3=6dqgC0!l_>(!3)HDRGQ$*)rA%;F)|lVIZ~^wqBx7zRADrCI^)K^R zf%pl@7py1fl5?=D$KBh)F2dr`nnB@tQr^u4&}4S!c&eIZsW{Tmtu>ZY<9`pBO39J( z`v$H-%>w|eLVKKloXDldKrTOdH<7pdrE19tiWc)tPeu73;5{aTQT{JTe(6;_&i!w9 zqNfkNhv%ELAD}iV9i9YJZ0l9p)Qt$aX|N(b5Nc#u7d9~m~)o9Wn# zkdHe>-@|Q7d^x5S=PHt`PsD@=o0mR8usJz?pbUqYVNBP(*}9Oj>r?7~zfri-Oq8?< z=K^_o<>^7a6QGf)dN`yBL1plKf4=`vOkj6hh$q|rI?SRTA!xCS{fnhtG{zZWrp*{; zP%B{vdEu=pzyN^}La!ATW@Lo0>m>)1h3;E}-%XuLSkTLh?_$lAbstmyOL zoRfMqGgaMry1zi$y8$3?57WD(462p$w|XurQ>X?{>yT}TvlLc$o_}8Porv&pBrVSr zslX%&ec16{!*&_^)`+tLN+3^ghf)mz@#HB1@y?RlfOjn-Zzpu~*Aem{&s+)=u5_UM zRAy=qD4CT1Bytnl?Q(eaHBpU6Hb-t%Q)hl2cUT-m;toNMIbrWyH1*=WLWUk zEC(I*qjkO=``~f2!yu8pofw+gprUveM#!S9Sm>QiA@Xvr%13@d#Lcr_^V`jWy`t)k z5d&8daYRQHp8_;FSHv<5@HA?a~nhO zJc*Zbsn(|17n!Y)1Nw)tojrr=W8Ut=FU*BsEcpKFV^wrh*Nbt4ELbOhQidrC2BRy^ zhg#u?MqkF{$HB5K&gH`ndafFPo~y><9)0XjK1J-2i8CbGPtU#dvS$pPUludRqVB%G z4?7HwyfgGOjup|>BPme=~w!ely@?Z~yl?b)Fx*yE(=$3aAIATkXy8L6_1+@`+?A<&uhjU;l9%g^- z6hcL~6*!o`K{{k^CWg8jY<81vP-Fx}SN+sFkuxKROv@>&LLzHo-=#zPXi1s*>>pGXCC8(i=5(c1&04^>`Rb9ne;d<6T|~&e9%=Vq`AUP)j@^meXI~Y zS1Oz=t1#L>*vF!duAB$X1HIS-f+B7M%xc=w<~e%STbC^Zj9*_e)Q zay}abMqNiskQq`baZq*Uf%O%{v7pR`n2B_ZiFD{b#X1%>T_gy9RmXx z(h0RbrHi1rcmm!6S=xsz$dV_H#o_9OTDZ+rtHSnSr-9nt$A6co(QtYDXX`-W(EM#L{%OyX$4J7(BA6X}tOanknYW34#QHua%NYJru-^wR zJQQ7X^UV-HEED6%oR?aI*na$TsG`}nokZ1`8}YgSIG}O9E<^Df_~rbwygoBuPUWsp7?oq zm4_*F6V=affnB+_-2XWMOB@!R7=})8rRU%TO(G{xyAzK|JQg`--m7$)h(1I2(_;J9*|PZiGSs*CRd>buOahh1?Cy+}DK z9Pj}Uq(?xwE6oQAXrnA2B|bN!aL`7hNWmNC;KWv!Cj1Kkh9U$xFodRFM08DTD1-39 zP4@5V1A~W2Y7;hiKSX%wPyjn>G&6N*@|v%($^HdDuB>>RVl&%{YIuX5)8fMuAek6w z2C%UgATZ0QUCs&kw}A#D&~n7>I-6vK6<@~$fs0~2VKJU1!8Sa(NmTiEttckBp47Ej zXphy>40_{d$ZOnEktYx>^I?{mk=IqfWbIj$h!Y@9xEhftQvAo5 zmwDha*@fT~51};_?7l1B1W%hQQjsxxJNB0Wf}G=h$noO~6=Z$Y0J*{fC4pPf>bC~$ z)1){*98VUraZ$6fRUVnbA~1Rxptv@ZaV#HeNC6f{U{~nC%D9Z!xJVXv9Ft!~ndte;NY7tI!%txhkw2UJsC~@_ZrFAYAY9CtZ*4j<*PD7`dsjPUB+*w735o z_#+W7svx;`%G`-ttmt(Y+gKf(<0XnaIHnEfOc|tKuWbh26J=FuFuGd`mAFNu2z);THddq}d@`tjB1t*~p zcf!g2ZeM_f1h&wa#4ec3=6Y8)F`M^6uF;kDLT0ffk1zEyiQ^<_{|Z(2$EtQkx@Ejc z0M2f8|CWEJkTARUjp9qMk-nKndeA>5RKXzxO~evtw*&nXQBdB*)Jnd2NHUU0*7%)}Zau+?Ha2)`c1JNXrwSS+W2E+L>9`{X`1lZDE+fZCkE zA0$+qU_f62x_fhpaTGDqop|xtX`)?@@Q(o7m;m{Dzy)dErZ88ifj;Gb3Wsw_SXAf| ztA9!?STfR4hwX)t)FWbm{1B!k4?)5<5H>Z-QKRsD<0aHh8)t?;2k>J#D(I$J#K0rS zA)W)Ey_Z~Zlz)`+rrpi4YR!;&BH8{R=79INJ1q}oruN3|WXJoD#K2b|@CW_yM131# zr-Y;)_D>5sS-acvQ2VMUwpRh#Q-Sj9CuM6>PeGyv5LDHdy!v8VpBLfBzqNf;*Tacf zQ2q1tC=dmj9#QV{RR!9sFtDk_?u%fE5jw1FMg7c!A&lwmZs!B-&Izr+?_n_dMnuIJ zf%Q@`LYY(b<}8f77(|&*!I3Ml)!HB2Le5l;0>}+WL<7MPow?rEUVPbQDvpYa*}V_Ra29kNK0c5o4rdCntI(om}g)ISq(t4sCgLUUh#Epd^kLK zf~sW_<1g#3_TTRtv^9>;*h{1glCgBFLDb?cV-Pt{f$_U8>Z+O{$09+~T?k2f9p254 zAxezTOAuiHc!z%yma1{-F9G4aC?4jlT@KbS{D>_}7%@3G);|_4z#25ELZdH6;%+zk zb*LoPaVqr7&msq^Bvf$u_2PZd#MAsutG14z$AVK93>Vm7t?~#?CdqanGL(@nJU{9# zcF)967C15k2QnO`;rXakc9C2JiaShoS5;aEJ?yx`P-e-cXl;GwxnGJubtutU?_h{daT3liFeIQmOc94`I;E(I38=kX4Mu6jd|4;06s>M)0NGm*x@JGopyOk z=h}ZGPg*9V-*BkpP=d4Zkb%b-FXM-S7Yv6-{AXg~UqLH=4zQ-v`+rQ{Umy6tK;9Sj zzZrQyPfP#J@_ybA-n_iSAMLc^W;RF^v_2ivDO}b3sCIuigo$aXQ+g7z zxY7KY^5CX$Nf>Xbc3W`EhkC=E8gYapa{B(Zp=Mmir&CP14=(W>NN@&gAnq7>%>9d;y*$?VSngKpdc9X60?{qFmkytx5;d|~_(W}{S;bm^37M%!Xsy%iXWXp_f!}E#IziKv74G+>JTjbn_r6!s`i+Bft?4&>@ znnmiW!ZOn`NmW->XhF(mghlSGMb7L+uq+oj=fY~DJ&AwaekC?3%};LHr|pRwcSpsI z(`$KcS@T{fCoDqtCpxeSCp+e$<@>?v51=~pTQobk&oCA&n$frk9}vWuf$SF@kTDj zh1=f)o0_|C*n2M9W{n) zq2XfCuUv6sg>J;FBZYDkcs)bdwnlg6Z8O($lGY++-CQjTg46OvgBpQSkZZypg&nMU z#5ZgvZxZAre{e}1>ceFra!t78#0L)c>0_?4>*w5@Acsp3!oA&?bPpO#RAk#n*++#{rgh7=+l)!6+(oDMJ;#rmreSuYVm3*L=<7nms9c-R3(OfUGl63zo7AAN7GTdL zx1C7|H_wdb?=+LH83ZWkiMn8Y2J5e^C%6Ct%O9l*_S3RL861~_PM)hdGhP7k8UHiz z9hBsv0g^aPJ=@R+r6)uH% zk5nTYrH8=8?Xb+njQAf*LG7o! z5Coed+=cayH3!WU>(0_2;8g&1ChW1nRcD)<8>(cz+G1wrFe4{>^ z@X%ck%@Qg=S6CAA7R$qK#RFFQ5Awrn8A;a$!OiLO8QPq_fRFZ(v?U2~_fxhGQPxPhUQ#63 zPzp8%!I5-x6goQywP%KeRh`_E8t+Fq$v}S@djbzN)ch-HF3W+fkgLf}{eFn-f5!Tn z+=0bwQ)xEBA`-K)Af8D%+1WO?rr629|k+jhvFbv|n=x+!niq-y+at*7jA#Z~NE&cko-a zbrRJ=_{2VT#8HX2#n9QsA221l)_9q!aX#E03UX#kRpwRf1KF6~QkDH0r34ChrRL(p z{Tg!(KU3vMz|BgbC-!h!R;y{>k`1%W(k!&}!RH>DpsR-2MW70s2rA8&jM>An&&Dfe zgvqPF2JDLeQ9>~@#5{XoMt>Zy^HNG8>~#>6t0>HYKLC&M`A$F*Ww5uuw|rI7AMszq zj%~*8P=2XI%1ox+$+9b$f9gSbd{dGst2U917zIkUO)Vm(nQnJ`ge>l5*CQcLjhkAn z6DwT0^G`er#j#qx5Aj2kFGb8suD%dcncx#=L1pDc;>Hlm3C|w$Xa>FzroHy$gt`5z zKz8V49`UMJSX}p=y=JZQhO;N(4ewoP#f$k00YuX(g;Bf$DUpPv`cP$`wI@{oB%vN@ z(NtFMoGWXR;Kt(EQC=>VqkEx?jjRfF2cppHItR>EKbAIoPkd?&*(oZcCUzJDMUAsLWMH#s4;~Ah zR~B+XKHrBIG_ri3%gb}HG>hawH|FPjGj6Y4vH0p??*|bT2O8kv1SB(D)Pwj&1`>w$mjnJVKre` z7K~#AbOkLL^Din;YLE@~BW3+ckfGJPwir#=#Se_&SaxlKN72jmF$WOZ*BzRe_dxs0 zFSKV~O>`dSe+1e_lf5ID?2HbZnmNh2HJu-m&(E_7P}xi26l+4oJ(KGv_Do()S8sUxi{Sc^HwgBp zFjb`0urrRRU^Q4CHW7pVS_Tdi>60y|$#UtbS&2>21^5K)CCrH3Vqo38!UAWw#Thk6 zQnWK-FeY#g@?Sz~Z|{CX)E3*>VU+!7N(w2=gh{h92F4p?|Jb<*ptxcjKH zIKPJP-Lh(DkVZQCH7Uh|l!3ME#76cIMEzPac!NwSBV9_w`n4GS3k5F)x~npwJ{lkg z9N1VgSOXUsdiA8vA{YjkmauK)-qSReoMA1{Pe{A3H?aHqz)Gw*LU$Wf8|^;S9y=rw-lK`!YTn>*06rBY1-Tj>Ts#g%&5ww} z83g|bbaomoqM3Gi@n_QR2GzxD@q-N!B^#mv5z}mlYiyz&45fM|%z z(1rzhL1T`)LFgI(MPGK}gOp%I65Px$TluzWR-^hkMHARAudV z;JGmKN}}Tc{}8O2EyF7iP84s2ZPYE$uz}`X{^dSC!766~g1rUuQO*;Q3Hn7)3ijm7 zWV=r6faV&sWIcmWDe}lk!a7#KzXfs`p=kqR&@fG`y7Po$8Yw|trR!d5N%FWHS+=NaidFv8{5<9yAx3FYawJ7^MYq zH`j<9SoK?q2Rl>n{lef(e{eAXAO+txBZ|Q{RDt0ggdQNUYExK&U~Il5!l%fU(!wp0 zeZ)ae0OMf@2afWqPsG;I;_>(i8z^ai4@@gQC!7llvnf%kmoVn@!zet3AaAn8P@0;j zIXsCAwk^VqJpAWsT+`lYxo0=B0n-9TuWfL2Hz4;O@`CC#48{PY9$Y9c(7sRJ?T(!E z2xml2dKrWTArHN$V!E6hgY_85$pEsvX*nSf$jK-k<}VpkJzY+Qh=|BZK|&%Y%)S#j z5yahGKXO1$Ch!nB8J7}r0}84blQ#;7#*3UVujTAQPA(K2r^|_)O#w7^b%^n#h|6Ye z!Bda3+>4Gw3+knedqAb?ea%KQUMvi>VL z$BOsiC!$<0r~!%GjE+@_unVvx0AvXVsh{>g?GFJ@iB>$*if8ib$JnR-iXWs48{C`} z6K?EVOG}tg+_P)hDOM_Gbpl^cHM3Ksusn2oiCO|M7poSUQbAZOK*F#8Ea4mGrhvE< zK{9M_|ES_eN${^{X3^MJh>a8jy#fdnp2SmN;Sm7=x#rXwvl`bwAQO?!+85)OivI{y zA`3OkF_q-@%0U5wlex%XzOQ>97 zEDuRAcl}9pHqEC*XIt_6GD7K!pLW0mDrD>PjMCRhl4+B zfl^UZ)%}qsoS$6BSv_XOAg{TJxK`*#GBW zA{TOsU4TcP@B`aE93=!{koOV)BfGlT|6>Aj8qcJaaao8MPSLQ7D;NOtv;JpyAUKs4 zyrkNSV=le~r5k@S{Yv%4###R+melIC`wW2`b{~$j|2~bef4mC0XYBMYgbwfs1U2@@ z2ic$FC}D9JKaeBC7UlgSAgCH=PT&kK#RZ21ki?S~xK|1J6t{lGEqV2yU{e=o39N8z z<-)ZJiHxnid=19dKE-B8wvWioV;8(u!@Q93|$74gmgD6kn($|tGta*98xP_Tl zk^bv$y9+rmv>oDG-8O-6_+*^_6o)Da{T_VjfzDilXi%lfD%j;8O#Y*d{_}9C;~U_> zQq9XE-7?F}z72*ez-Z$xMtmrE_XE#ml3lm=U)F_cW)!>wRuB={R}aDKDZZEL6H9*r zBv;D^)}-ZOH^_q<(|KKl(9x(Fn)pD~QaGfenUVaE$)F{nG0@%05U;l4#ofidg>6a1 zfo%u-rz_jCHe+;rmk`ExS)hU-dQ+Hs1cWD$OXjTrxZ(`|44~ad@R&#Oftvv2VUviW z4wJSNho>b|gsJCE64?C0iUz-dv+6;n%2$1iFC(1P7F7Y!^Zg)~g)Km{zbusz4OA_# z%Im!Kb&!Gc*D<&c3S3**=6V4)R&dV>x9|wZ-~a(c^Has3UZCfMgP2tF4JUnpCz{3Z z5$JMm&=GK0(dYj$%d;IkYGNF0kdp<0pF9KCEt^O zeeSWz8&Ysup<`{D6~B+CRaQ;-Eed{!qHAoSGrZ72i0(jqSqU4|*I|PQ=8PlNbMQ=< zP1w_*>m=_(pM^_9F24fT=y{w}Gf(aWszp`dWi8vKHJFnnD)Ux9Fj02iW2mn_T%h3k z2(-&!`f+kDpVdc?Ja~s`pM$H;-UF3xY+3aR zVSKUPZ-XqvtHjioXmi8n3K(;Am*d_1Qe;S3P+CusPaO#c7*L5Y)^fl-ctf#9VGG#P zSdSR6&q8t-C4=1-86Tu(t&1DvV8G^?V}tNxdnpSP1F;exx4l$Cxn+C=+X%Toe7XvNgQg1z-k!wi_iJphrFb=dU?h~3 zMg{d`E+^tRce=XzL)bkcT5Hs(tvy*EIX7aWwn2zYc z+9A;kN=p!!p#$PECTfcjYknQKjI1-t_mpS z#Y*3Rx&CsNEw7oEP*F+u2TFRNtU}~wvm-qVbvi2W#Qqy&kXyoepV|D;D=j@P1P80+ zv9(mLMkt`HLd9c2MFHT|9?~FU?E-?TV?OVHUWqYJg82cN=8@0uh<0!bI8hISWLXsE zw@sC2a$E?E*1A1bM%6h7!!k`TMvKCG;R{lWzB9)KxHpM2b}50w!N_R#6)hVOnNu1B zgq-HG`v}~51ihzULY?TAx_pLQ=P>NaY1%2HdhL$^w)oh!kl-AhT#;Ro)$lGbWK z1c=yZMGkv&+-FIS;(-(11Pr?Xk3biCj8bNUIjlc4c6jX`ZUp=!Bx?s@F_lL2kkkHG zV<=Tnq&IyAl~i7@1^&3yGkdm^x&ex;*J=A9c9``;uR$EUhUBzd%P3MGLN1IYEm^k> zADQUvb-R9Orf>>ZmQJT2OFFT_H@aRtkGn_sO*_oma3UNs*OEs6{KS>DP>AW$=hyrJ zC`s%tu$d3tWE;EHMT-EF(N5|$bMfcMJh|@^zH6E>yf&%_ICGgw=5j+QdsT2N!uG3H zyx)I6DnVuz63-NvyA>x)VdMmcP6z-;z)I~{Vej~7;Y*wDjpWYDY0Z5Wvc&*Z$Z^;% zb8P=d(uq$@w2SP71c!YpPBbzt*quy=>`tbaAr~e7?xea0b|=%%cPCSJcQSo?cQT#6 zJDJ|OJDFZ$<3u916BgXJJDG0YolJDl?y|ZiyOZgZ-N|&&?qqsFq;D5Och4>|1@}GT zJUA?+E^LEs!HMe>1_u4$YV!6M)JM2)xHQLEhwMbtJ4Ze2CE#6?7vZEs?7qfU_$x4c zah=e~Rim%dOu`GzBzm|Cssve;}Fxe!;b6JKIsC zCdJJi=0xA(o3_mSJVrSceDCXXqgukm(TBJ3<5ZmL$cE4{kV*|^Bb z^&qarxf`Kggs`QhU-IVru<|=7I^W#Jd^Jg|=I+mY6a%?(=i06^!4Ni-PqgCn< z(sABGXmLFf$IF=~EVw(U6fDmp05kd`Y2cpF4?utwzX03HJ`Bvc6+0!@%&tJ-%q6G$ zZ(7ka#4^f`W>frF_9*?{kLZpu`e%S_+qk(LeG-^XBsy?OQ`Z1G!32bQtGR~a!OMqT zeyKsL7Dr2WYQ$~Xf{R0NKaJD!QgRKnVb@FM2&zBihk=O_=#j6{l!1(>Eu=o0==-Ml zo_87*qXYK=&Fr-MZAVhK@~#hDmdNhe?&ccxHnq=vVKZOq?kTlex#R}>G`uXsN}52uPSfI~pRdBh$dg7!vR z>r#M2{h_9~o}S=g=-8dysXnxEf6)Gr5>6@M>4!{U+Q;@U;KAo;@Eqe)hdYq8<5&k& zv%m~(2|QBc>jaF~Id0q^N&A0K+8;YJ1S>G=dtlUr>G}j2RT{74bjD27XKeGx@kw+lzRTCn$jHXJQ4W_t%-^!NK?&lZS6buaP{g+ByII~VU#A+6&~;1!CGgX!^^JJdO$b(%7M`Q03V%ly}7Hj1_nodCfK$NyIJ zcksEZz=p&X1YKk7?~iMLj|L#K;RnLA;HL5+h%w|8HJGH|eYg?~ z7uB`kvU2=8E!(u0Z!`4TvxMGPJ_a_t3RM!juN*%5Nd9KlXLtQ$nf&haL*OFnEmnRv z=?liIY4lB+hyQ+O^mVs9lWp17-Lfs)^0LzQvZ+%IR>)F;k+dl+@`m@5S6EM&dA!2+ zQsaZwTBw(3utG)u6N8n2;b8SxAKJI_ZR`(zOjuAFtadU;b+@gJXbp$4Y4W#=@u`TZ zPfQ=Z8ofsC8Gf%4`)p)<*G~(A(LdgY?C1wq67rc@*hj$!`QTrisjKy&1V^Q{bN9h| z*^&NV;M+l0rJIKO9A8NYM!fHUS2E&t9`ApOqq$lC(Gp`y{=ag!VE7q|VEE@CIc8Rs z6{L%jV;dBQ=yAm;xhAzSJDl~dfHupvJf4}jDsV9Y)j4O}GJD$-+2Lf*#%;reWUf#% zmi4YeMl5OX@`|tU;b%Y%SguZdpmg399o3{8bkI7XPxN9tzGTkY&x`2%Z=XKk} z0bRD=dJE^PE&X%SrzS9QIbXPN>*C$#g8!d_{p;A8a5-QW%wE8ln={VmR4IN3LM@tQ znxE+pZQKLFa&yjrMN+(wbEb0rR_aeMB03=>aH-?-lbcgNVMhu^{T5g?nCpubD4nQ) zy587`-v;}JCnUyo6FX!?t=^SCfdIqQMH0S;G*z{H4tIjV#DLqdyX_~_6hhcZz{a%s z{KdjXie69riug2e!!l;~AQw8qO$q;lD$C(u)&pB< zhQqeu(9@l|N&3Sv><_^n3wmxK2BN^&(WRKs>E{AdP7 zBKzXfTXJ;=v`g_S{8*W;(L~o}#T(hq${2GYBtNhov^7g!x`?%+I+UOOuexm_kCnL0 z#2NHN4>c#+j~c}+7qc(!3_!0t#sB*d{EHX8G4S7yc>rpG=Cpo#{D&YCuE(m{hh|H~ znW@<;4)+gNf`hd56SK1|f7mzuz*IK%=&9Q~kM@`NkHsKYa7h2|LO7(q0f`GSZ+e56 zZ!CTkrMqoRzjW7Bv#>k)9VjHm>8>dW{eGuB{CLDe?yvZH4CM;UI07hxV3ye#GngjK z_@gr8vE5_FJ*{BIT$Bx&aWrK3jY!Ex=`_^EFbY){C+)XV4&RTTD3R8xDr%Cui;d|g z0V!?eZn4qRPn?l1?vwmF1~M2@y2b7BIn9v&1N}pbpTwM?+lG0ed$G>$wwWm_F}fFv zY5t?y6wufccm<8h=2ZYZG>uN7_bFihgl&SDKlOrCAl)aA!G3w< z2lOGkZm`i7Z^$_=k+~^8a6=y+8_*mHGZ(w?xnilwvdxBPFzg4ASmcidSCteRlsxzZ z!E10C*(`>A(+H#Vgk-R5^v&p7t-ek24fn0^4W25znUz{tqHvl^Qt}P43|C5qywKz3 zdKI2zz%hKy$A`H>@(uQB6-yZPWk%tSIL*bV(gz9rBa0s>=Y53(>A!9vhm@B%TPbjI zMAh8?7xcD_Y`esC6F$Bk#6tUB!|F$5FBkYlwn**RGOCC-69$g2;LTr-RDp?2FH8mR zm`awf{xez5P7>g6T0sk{5%^g6M1Fb{iOP*4Zrak`-~giHUvt(CR~U35Bpe4lR*i~# z6_I6p!MyOTxDL|Avbn-|*uu73?;tKycHd3Cv9YG5d{FWM61-8m-7#v>=ZSxYm+kyeIm~WdXYs{ zz|1f3)d?UVHAfA!6q(ImM2bQpnh~{gBG5oY3T@G#h**4!8c5!>ftW50q$GKg6g5zz zmTuw$dnfr|1Ko_R6F~z3SCRr|oyaP%qXci|%xY3h0%kSit!R{4>}Bcva+J`|${f#} z@PZ@4>;*=2=OhO12n9iQ^3su9JqAZ8DT9pQ@+2Qt;L?VTbub?fSinYainFAMnNabN?8DiPbEJ9V0K=rV;MieAj?5sm95$i0Z8PQ}7 z&~4yb)E4rlZNYSD3+0$6Nl{y*wRDyb>}TVHZSfws@xsmmQ3YcHBq;uxL=RA zVuo0Hp-QRI43Zt!4oWAKvtG4GfC-koT7>lXQb@F**#~ukF=QQ3>Bj?%T#Bkq>v<9t z^t5I~&Bz#{Lm`#sv=e-b7$a|ikRn|eqr`ZU6fvezOE>WWA?1UN*%Ny+LdM)qp72k; zoG{G{oC`&R4ioT!RD*2>R%s9wc7x{$Ay7$&;3E^jLlB5s zdkmS)rxucmP$l&vYR1+kZos>TRl`2uTh!X}rmf9%X>Fy%s(LCcTG9N7KgvM0U7^oZ(>+ za7L<$IMaw>%UB{)A!lk3H6v$;0VPUl>*ZU-8F^FAFkLvK_n%NsfK z-#CIA_5Rg4;9a(j=~~K zU`Z*HV9yaOWR(v&6g0R@u;KC++%a6Zpl|&NtT~}wZa_BGxpQg7x6nX|Izuz@4?4pw zDw(td5}nofHrzE}H{Sqc1?$p{0OgIlQgI0yH;p&0+3OAfSWtK`o+@>yGCK|Y0aO7O zHe#yBTyqX73R`d~3e4DotOk`}RzcZb%D1QmC%FVq$f#H3&KIg(o6Vo_3{X| z;3=4pqXnT_L2zoQoZ7`&aX{@7y!kD~?^B5d-4{z~q>nrgnhm~-Df8o$ysM_}9Gj6i zLdAR@-gmo|K~Q#}e49nygtF8S@9DM`8&BdxvbX_~Yp8OSQmy$sTHC)v&O~Af=YejJ78bqS47Y<}a}m(LX%d6LHKiV>0K z((?iS;r{PX@4$xrz%$b!+DbOwk3%Xsb1L98T4@2TK+gK#4ED#=%J+7;kjHHm7eoJ_ z6n$+W_&Dck7LfTF_tBJ}wuZXtvHrchHRqCH`Qw@J)XI zVVT~fkE@is`r@_`FGFV2vWcXru=dn79?O9@+_evXAr24XPCawU4dVR95@}icy(##M zZ!E#Thv5vDU}Ny#JpIk!FWP)k*)RrzAqA-k2-F0~GUi9UvQH=Yn!p$qjwaDjHk+<9 zp>EvNW}wt8Qb$oXkkG01&1ikG`LHurQcLY6-_xD3zW05za(!=|R-c^xKz+Q~4faT_ z<-&u;Z|S)UYk46D|HNU1~Z~y#a6U*I-0>X#j?&#nn)tQYom|0S5lLa|TLCS+mA$sAC zu7;4`@P7|l@Pz*0S!ncq-anF-14%L(ig0xXj!13W?Ar&ax9{GSd`9; z)WmwDLdS49E}YIu!+I_KCWZPjEZ)nyF`wzcx3dC7G>&Wex13P{7jy%z>P$?>h1Led z&cKa@>*t2G^}HdeHY;y#T7*H*autxkvs}Ae*SQU&FBqbLWbYZ;rBA@p-liF;-x>A> z7(`R!Li`%M47V{s)DJ$(`sp{tXysWQUYK!XAp9tXfTm!1WNO<#Y8 zK5o`A;{F*_#)qJ(u%@ts%J{p}cd9a?X=2oE!}XFe*de$NX$TWA^ukfj!yNh68vT5* zury*!9>K}?{Di!T!$YoBdRa3~;Q>$y*lJiKx09SJ;^tmF%qO0tc;xF4*1NIBkr(Cx zBOpDT%NzGJwtxc1cR>)feldDtIJ*`1%BoGom-~zTTNN79sxKIYMABKD`4OAR^O{^zQfq8!-G-s z#WdWz$*XF+P!%}$V*qEr>->a#Y6O)Fop912A@F7CjRuE2&T1u$a$`Wkyz^9vlIFzq za)_FV<66|!Dz)pFM^1@DXa$}#K~R>B*z80RJ>l8(<~lGl3#|Q1z)n%&@Ujvo3wcEf zHmCZkg0*UDC{OMmTi+TcN5a$DKNA*uZXJvwb0ImXQWg6$a8KS;u`^wbX6C@IM?So_ zHCt}S{TKpeD=ZqT`hM;omaeT=CLyb|Tll3ouU0Aw&yXjt{uU4}%FltSotJ6_Qupu^ zd(um(AMCXp>5K{mUGqFBAV?O~1q%9b~`DyoHBQGoqe0Q3NAJ#G3KeqT8<_wx8;%lq&E8y#5zCm3d zhnslsL*5`Y;-+^|4LF!K) zh(nRvebX%klWV3nfT0O<+k3#bY4$esw*|v}6lNO6wN3*oe-e4oOtUehp)&dS$hfZ` zgtDl|cxDER;oM^h8fyJUF^6?>GwDB$3=jr6gj>Ls5b$8boDjQtiiX5q{(k;{@+t*H zWi|nz|6-Xvmf6~9IWGbol1Am+zja)W`M#XiG^2nv-F_@J{z6X!9 zvv+56H|cvH9^EaqS??F}ZV%xhF5t}!@OGyWCTs`Z_5ec}bM%!B5I%WvtM6p1Z=XN} zA>+2UIxLG^imO_SOYwuQ#CnbMJBpcvWpeDC$ajxLP?9*PfkblxJcR+SC$`ZnVqVn2 z+e`W=M>(MjS8AYCw=HBSr1p^obyNWC_oGM*?iGA1TPBkqLrkLMk`N216GWhMPvT)- z`QVQDKJ%Q3>73g&?TMwJo32oO+@hiR%rKn+rqfLaL&0d*QA0W4XGfaDr) zmL!pYDrr->B30U{)DYUV8%_X_pbblDyG3pTDp7J9S)G?-g!%jgMecpa|IOqsM*T|e5@O=z7-9DNs)*-h z2$zw|2#}j*o{veT)5u+l6eV|=goNCc8YHZu^#jMD zz~9!^S*em;vxl{MIYyXU?vu8@0pT*@83E!4nCDWdbQG4B^MqkwQ3O^g6d6U^fX=xH>KB1LH$laSCf zu0hhol9gzJzG20?*M!N6MCn)onW5f_t5zQ32Vn;A7p%hsIAKnQIt}PX#Y|B9W>P|8 z-%M!`IC}}YGaak0_y@*ep;0Q>X+1T_z5rLjqn?M+FG}?=LF=hih|tAeod#J?y$0)w zU)-&F8jyX#I!r7Q=JK+7n4tAEDn!=Pq(RoxtiihCTcn;cVes-6Qq3_9(*AVOmbE`4 z(EiJq$2nHGLH!^0CwOs?qU|sKU>OB-OC|C`wm(ZwYyS%T^Jvvs35n?SXpmL2+_b7y`xme~18gZLI21^B(c7Vj*wd@GXOR(sa=LmQitD~c$JR-{U5xWr&Js#sp43_FNp&5@_^d01}5JZT<)>3eB5Y)pm z0;uA78C%ssg3~?}S)gAzhO-hc7$O*FzIPHx%Scr1@&#bxqYdCz2N|0GxxW{DYh{xxB*DOow%2W~r>b*L3vN{fpeqchBU%us(}$u4SmdWxj-w&IG06=_Rk&(N&oECAkfXR9NHz^O# z;GxYb?su_Bs&`?1HVb0Yc`p);CQSwcdur9slml9lKMAXW^m2Xgl+-tz)s|3BQl3wWeOmH*!Z0|Z4A zQ8C^i>Zn1v1VIgg5|BU-PB2~uM^TKo*(j(H6OAqd88QvsXB$W8+kO7eKhKk{`>AtIojO%-)v2m# z%!RYhkF`({f4x2Up-RoB1Xr9r<}t1U2l_yO%&RY@wpux9k#+6m@mEiD)%J8#g z_@nM^E*`WZ{4uhfJZ;m9ld9k=!QqcPBq{z0_X__>_cj-=T3U%e(_}l@jwyz}%2)D7 z2@ZeOAqoDRdj)^qz0JjSE5ctO+sV_c1w9yER0UrN4u8=h34Z8a!C!K3bMbC=nrhp3 zkCM4e>F}H(lgt$Bp;eNp2=zpq@Cw=)KxjgTXPCMIGxALuHCuKn*O-AtkS~CAhA`1 zC;~#paKhO&R#|mR43Xl5WX)%UjJj8ZsN`-4F-(~1S`NQM7(*e2xPZ=_IFkKYYp?^0 zn|TE0A&c51u);rYGEtkxUqzrIAaFr>e)SBiyPCjRQk=j!^BIBj?iGP5xf=piv19&- z;!Z9stoqu5$oK9sx@NVx!iw z`HTSV(SWrG@MZm7`wA;VcUb|6+9UTcHh=!Dg!f!v;<=8fDsmM8xxF}HhgDibZnuCKxf{%9jd>w(WD4yn!^d-ZJ=vt znl#K<94}0p&uE%;uV_-qdJQV2X-RuS)L#zW6H$9HxtyoE@QOhb+y(qqbSeTmmzC$z zLseT1or|P++lA&cI+xrlI#qHvbgE+4s|OX|{X4;~Y7S=mn$2wco=H^${wmBA0cK2i zu^)b_O4nf4M2ch9Y(B#b@e?}2OeJeDOH_HqK6JSRocD6O66*>@=w+S>(TfRK=Vx>U;Zq8q@Y|& z-zb&-rs8eC1)u7MiT90?71Rx296tF5qq+xws{gF=j*TMNJ{k(oc#7cEG*Pb+t4`8q zK4Zq9dtrtSitjq00Yz21MPhR%;&#c-x}~{HBF_Pia^+&=$QZ z-UXjWtY*{sgLi)?LcDK{N$O4CQA=&&;4rt2{GeHZF3M{+U3P8dZCfi6eQKBeZ0seQ z*gn8Ifx>jRsTOl)TyM@u1CE@+yLBhw!D8X)2&;Mdd9-u?#x2)SG>H)(AAwzho@xv_I0AgoFp>&?s3_8r$f!FV}D_N+UR!p9!&1_IM-mW*tG-mi6#uCP9DU?+I zX>?n`#)eA~j1q%5;Z9l=%yD2i*D^($ImWu83FhEhL@hr_Bv{T zdljBfFKV#-W>QI4Zb{#nWcTk#W`-V2>6d5!ut0Zt?;O=Lc~$j{klihK}=$+ zHj)<6jY0`ZZt|H>QD_np`RAo`$E5SGgl|=Ot%h(ODT6%ESxxWXD?zNeN-Y#=oj=Q#!@-RHkaH~eDS~_=2d1}v;-}ZQ; z+;dh}vKz`B%gd%Kv0M%>GdR@%YAq?feWLGH^!Peg+5Y5U=IV!an0@>)vs^r|f0UYB z^@i^qGiwGcRrc}pzfn{Z8YU}yOWkZ@7hY{bpf-)8d=L%Y{v(Zmia*@?D)zB5xOSz>w>*N8L&J)~3^e;TZaF<3XyO=#o+lGi{2OS3QjdWSj0VORg;;gKDRNv@G-vUL zUo`=8-j+coU{gv9Y0VN1&j8Y5Dt2= z-!|;KEUZh1|OjoH{Ckc$q8|b^#maJ=S1(O$&;tK-8~h)5i2Vu zchgvL{T=Jv;%bUJhtw7S;ufOkKenA>r652vKQY^W^fZ*V3Jc5v?zqpE@}66oUv-)@sT#pn=RIhsSctnqcau5dir_LKqkNc z@4nlqqlsYS=xkqmw4rWxtv{PJLfW#YJbUBNk0gANbn*4Hjs4X-VEgX}8QQ7^@T%L7 z|7$gVuTBh%7=Vng-rIrL*cew!`+{(?W{sZCfe))E@NVZ@3ahxrv0$46Zp3T51A1xc z29Pca`IRX+&=IhmguJ~ViAsFm=}DJ5_pw5Du7I+(D`D>#X)|Z98gknstXALr@uSGYv#TLyx~d^9y|y98$&$8) zoRH7UP0Fi=l%_7;xW|U@Z08qyG~ZOHw; z!cCBTQ&}(01#C=ERYzMceqVG9l#=HBF3oA=a{iR)aH}-OiY?Q7pr9ouA*2I}wrlOQ zg#Ttjl+e{9y1r;_nb4*0gxw1$2Y$=7*O}?v#peOFo3JN(rZ5N+9V1g3fTi`sai(&t zIJQeIYf{(VF?45RN45`X)^>^6e)Neg?2u|KaBm9}ry-(RnR>OO_Q%xHpHoZg@TZ@z zh&E%$%=7M<%czD+pr6wJ=4cHdvQ~Lv+?>pi;lLRqKa+8W;Kz-f_mVmo8<>d1j2W2S zJy)1Rje`c?(?Aq#o=~L;R9AWM^fC8%7rUyo>hpTTcXu=#RI=}++tP>sDBXApk3BU+ zw|FkudNavg3)>r_>-0HXeO{IM_$;Jxh^QMbG2N2PFmP-z2OQ(CMf>LD2%$Hd-LncA z4EtT9OxPLdSt+8e!@<9(IHSHM>@U?sJU)-D@!cluv&n>ga-@@k=P#$CEwhbV0y1L=OkwKR{fozjau@yzBYHmh&kqB}0^ zJd)R^8O2F|_8G+$N|NZsC15hb*EN@X18TW}|6BtOO~y?A^T?l=2d{)2<;1*o2rU=S zF2anE#tLc8rEse)5yUek+4~F1vY`0QPL5>xJAvf#CquCvu+cA8?xE@Z3lW?Em(CmOnswG3A?0mF}~=Yky&kh}rj6@}*YW!a`V7+I7~m zEDg$wWy~mx!%&2_Zs4oKKSVs@IxgW!g$vgUYG%%%&dZS| zc}4V2`jyqiu`tE5wB>oS=J-8TJo>F3n2R?Y{LFEz%!UVB8yYXpQ%Uj1`~c3NW0v9o z3@S5tLeWR*G9n;+?Uz)Q`5AOHeGAW8t*BsHrMRo#oPxTh$ymXrc)nsKMw#YuygOPs zv!XdrA7wNHczN{hq@F*1v9ca1+3@!+Mb-6~g0US{SH!k5=JiA$tI!OximX}wJ!+L9 ztjb}Y@hR3@Fi4R$aE_;Mlma^7e^-ZSsF zS7HqwT8GTxovw8%cp%{2B#8&7MH>?y{MQ$RS{RZ~KN_gZ<)-QwJIlKl${O)2BZLC0`=IYWCZ65UQjYA%~O z4Hq<6htl@|)64`Bl?Xo|y|*GF&o)GYF~N6W7}nd@UYj8Eak$5G-M@K2v;@izNkYs& z^I8RfHr*qD&lv!_A8W)o%^*3(&W?j=iNPEhbvbh$u)ETERhEP!4rsje^WJ?GEWcc} zGS$a;jRFnkSvg2HpV8jU&;Oj_6VaOp&o_ao5xsF2y@@K(E524e-){noCl_f3`Qoc= zq<83#13Gt}Cb?|JRyFwRnQFf+tb|)Eozsr63q`>ge9b|RVJwsveuI48^PA*_KWlZ%-;5>H_WY&KR?^h??VG@fPcv|0 z!pXnQY#4T#+5D1EDcvMAWp(9e1U;NL?N%Qrvqd+Y%oN=}0L>I#pKy`B#x0>1rw@H9 z{_qmla>8iAFshxg6=k>*T?QsI&<9!DDAA2u@6GsfJl+CeFv3KuftbCvT+s|dA zviv^C2TQ?Zzk%&)U+zv%0QIuxg zWcZXw37oL{lljtDoQw^UELBhvt_}%(4Ag}5OZj$#t6BV2TvY^AOeoKl_t)X-C@DT| z8#A9#G45UvD5zu&6<$AUtt4SNBQ%)UPFlvyw4CJ7PvFPT{Qf(Rwp*HN;4_$m!34uE z`~9Z#_^S|C1c)yw&z*m*gZKg|j`*Va4DrytLR=+RKpY$mIV`qfKtdyjr zudqdy84a{m=qUp9+Lh<@dg!%~;^=7rvH_DF1NRC&m8?N87Ic#iZsOTM4t1h}4I11f zpc2@FTERlvLpDw^+4qoTvAMA&Yl7$#I%-m-0$EdOB1}C>iiPRkB@?DzqN<2i1Vm?X z!dEWWX_GzyvHAziXY~)cSM{r8-TF(yBs37FQOoEbSb3YNrF9jQ%gs26;rX1mK;S3v zSK+7#aGX<~tM99W<0L7LL~pL6I@zW-wR>sYRly zkWvIlr4Xj@iS>{Q4Kg|@K7eCLEnB2DoJ#Hnskj#k4H(y888c0C@_{=g#x<+{<2fz? zjxG4Ba8v|1b|}xly>%GZN{TbC&3uMqyL-hrm8`)r)8swMIL2W&%Mqk;+!_El2UxbnOkaAigyxjsEx54qhH~KaZRYjj7pl=W-EEu#{ z4JYGEkARr)_L|S=>vON@Q^^|oYBZtHpbdsBqhD0bY*wMN@QxA;r(90P@K@oe2ymQM zo+=LiY+Om8?O^(MZn2_@NKmUeUqoz50N9^B+whT)+Z5kIjt`ItlET zK|NFfyZFy537Bo<#R9ev8K1PpSH&kqz^68x@Hm53BVgL9a6b8VrtzuOBCV6FWDTDZ z0kis9JTm%hpIb9G<&TkisUwvpstPGZfK)F|c;%n!NL06gSmSLlpCQ%bUNxRd)*$64 zyz`C?Qy%N%Q-)1$YR*uc>Z6z+n%Hp)eSBXnALuCkUbXEde=tO)+352Iu~dzKq;t>H z1!&B8rxh~bvwI8ta04D|CO@s8FQ_zJ*n<)}$7QZYK_zWu=%Qf6FgMIV6ek5Z-_ejP z7|FJNNIBx!@XO+P8&Os5mKFb)x8a1pTdLD;qXJ^>W;-oD)Q?-F36o0Jv|AOT9B?z# zVlx!&6iuoK_ch4j0tKA#laAgz{wnkoA)TN+>3ZlbkmBeqn$LBDdrc>}cXyLxU2)GB zs!e}{2u-~#hnDhCic~^#9x{UmCTh6E}u1o(SZMJgIJ{W@V4t>2vX@DWvS? zng)cEua*`fU_=K_c#?~)_lIOuF#`%~r#69eoMbA2SBy}}6>*A>y#x~`qCr~uYXquW zaWSIz``m2>@JMZi0)+=oAo>NIGZfEe$5JHmL^VUgC`RI-M5NrU=m6Brt~_-dMXQ?ptvY!HkX z(GU5YsfQ>(9ucbrMcDC(=hnlr*RYVD>NB5VIp|(mxO_Y!SvDB8_K0_+gRIG1S616X z{cECj+RZWyFF)A0<(sTO*_#t1nM=vXBKgy`zmTy)vi8$e=SuOb&dv7|(ygWVVz4nc zS#|)$#48+2evmBr%PPG1UXc)A02AZn<96*#V37I|%f^d;C2V;;xU^Q3bauOwh&Az1 z*3wwXV|bFe>3Zz0*Dp!XX_N5O-ubEFml3lIAd1+>5y4PQx{x>R2O{raIzMd8*T^ zkWF>^oO^rTWO#`IPdc>$K;#VSo~AnQMav{oQTpC0Q_@V6)oiZ)__q)6DpbWDL>=Rq zuaajM`-_e&kBvPzySRFGdG!$wT)?}?BS~<}>|li{=!lWGaip;%|MEywZTZt*l!_F+B@KzPeXXK~! ztYyfA9-8yel85Hy1T)L#Oetr$!wXv!s{qTEp}`!_aHD0I%Bl=jgG#|tQ4aU8;((U! zwCcbce%$PvGV+tDMGl*49%}Vaw};w1w82B|ayVRJ&Xmf9hkgw;@RA}1JC!?TbzXJ) z%de4!V8#l4;HhQ?w0XN4L3_JXV~(~E1*0J&e8$c$aadUO>`xJpw3HJvN;&@kdmT%g zciwLKf)x*@tiVq{W4K;Q&g;Gm?OURn-pRxpSm|SK%6-57l{ll2QaN#-Rt4NrLi9REAUyXH6g>~v3*^87(Fw($YOrKe zoCrp$3!NFpxDLOBQQQh2r;d>KVEOlH!Mu@gZY*Lu2M}PTv*Z$WOI|RLVpsZp1Qizv|a!}4+NT1k+mJ`7vg8D*k<48b%4Yt+?}@7hT4g02tBRQ=;*$E`k+b?0 zl^QrHdT&DL`CF{YS65W|VMe(m`7K_hB_~yKwhlvV0DDN*n|E7t3NuAazpXCZ7etVG-kzy!M4YWt+?Y>llM*EocH*d012U)3?MHhj+ zAb@>$1@<3j+)k)|C!ZbUvg8DNw2Yy`byQ$fJdMGFECLFkGb;dfR{&b$fGjxy#6TzH zVmMeQl!y;zT9p!`J?&aVQH<03sM8;-PQP1DHB}V;&V@#EvkI@wsg{aTU%0?Zt+7(h zDM5h1brl4@`;aoHUivHJlqDww!YM-~rtnbblz;;0j0!-{ssMC9wgT|ek`q8oiiKPZ z=QcP+4)Fsx=?XZ%e0&+9Z#W!FPT-7Wo%}4J`1Z(wXL;fWd$Um(D z`M><9F~O1(J!u?h`AD-pS5$0(q+!wdABIxEaF9T*EG|g`KTNMWzRc99(EZ zoWrv}E>beRO4--uUgT>dv{zrzKm57Pnw6hoy#{xt566e5?urpYvAZ21l<{GX5YaPs zA*02~XuP;XJM?ex9ePbi7(ZtXSD&sOU@c)(r;pDlg-6(XqFXquWE`vNc+lw|FJ?Tz zM<-m={VBOc>|f}}`koAe9%7j?EmK*z{3(-(K~m_?_EPG;>eTCK-{|9sNTMBtSw7vt zBtu`Nyk?N%Ki$G}2Eh_Y=~;t$Lwjc4YBB8fOu=a;4;hPP9xXWZ9pyn^s|4HniX09( zXLdP5SA_T^QIBcd@*~(^8TGivE$^wx_0+~K=hQ?U)wtzlL=`WiG;%8XkkkEDQ9Rdq z2}jZsIX(CnCgPS{lG9+y`DGV{mfsi{vaNF6WgggWJNSz^MXeMSZ{i05H!5QRk7fD8 zA0zq8BuBpjpLqH-4gKCqdM;zD@z2@Fyi=k4>SscLCW?dA!J+D4){9!1;n^1QFWqaT zs!gst9}wZYb`Zg~y5gC~^1O9F6vQQ3Nm;BY@m`fU(MyDJiN?$VvBgJMse1z#zgkG8 z)~tolB*4v>p0LdXEX9s!ij!h`rqxi}2`r#}!1aidX`f#@3N7mVpJwixw9onfVeMnd zrS^#dCAWe$6psW}nWQ#InyVnGpX$Q5-)KyjUx_56mqxV>-%OL7c%z@Ee+h-B&KgNA z_!E+hchw{*8IpEXko513WsIQL&;04JwDLS>*6m8&3G1>y4xi{0T|MyK0h@3`tj4khIJTXGtsl;AcjX zC0CGSfVeDJ)#VbBW=t?UM8HqKXIM=lsYTlfEvYo4$t_($yITMl*yQj$2u`^5Izzh$ zzg}JA9JKSt(T>Jou+qT!stTM>t-!h2akk_NoQ=y|fug#=S=w-C<~%|eiR%lePYJ=4 zh$uf!Qp_0BgHdUjgowhZYG%n#4p!>s6vo}@wLKC)URm0T5>P*Mx-JO%2!y}>fsvUd zH|LO!W+kimW`0=n!I}!~9#|dNf&jJn&)_;dBV1D#t&R?j{v4z0Z&vi)02=E4&#;r^ z(RcDj)`N4o%oa*xZ`(Mu5j*kXFh8Jew6F;-dU;I;=Q=(OQsL~VB9i%ta;?p6TbsLu z%4U_9+p2I*o_2njnpu~7+?sUm)HMy^duaeBBJ<=(4ICQ1GQsc|LEeGFFbv;Ryp%9a zsC+cx#o}44yf^dtoQU0ezVgXs$>k;t3=K9cg-tbw^um1+8`Kg3CA$&fe63-z=pACw zP<(oHR)XT`Lh%_fijA3+zLTEC4+tnPXbx4N`SVAX(Y*R6hNdM~plOpEKC2DQ%%BRR zP8B+S?)`^Gub~YrvNZqcQ!}xMa8mTfgaa>qzt#M%ikf>WYCg_uw&bMd=u0cFGK~IM zlc!`kNOdNYvK=2TF|ITRNyKDHc)QumE|ZUCrBzQp{<&asoo4du>opr`891p3IC)+L zJ)>G=jK7lKdaH5Lk`sEs&MTPdrf}tGEi;Z(|C7j|l(-$soi-Xt!2b7u)%uQ#TAx%= z>+f%|S}i%LwK$~?9CrgQGqVaz@~<^P`NWJ7I3X0c(4@P5kG%=bK(%r~b#F!epWqBi zg5JBleoId3PgZ_7ilVAnPEuh83581XW058K*+7;W`PtVgKdYkVmWrD1K^DNzl9QVE zBtP9ZSIUp-OyuX10KcpTf3*El_voX`VyUV*((Rw+L{f^PEDjBf?`nPJC;T3=aF>(37;*LpP*M7U_lrCQ62 z_;ptL4&q6@ys2gS0y0u;V_wA(1S-&U@ghe@!^L&$rItSQUGQVL6au!4ek0Mi-&CH2!QGQrLKCBL9@bs z2Su~KOMVGf(WlTcSsP?y1(g{m7oA}Y2ca?|^R^YiCvb}*S?LFL*<;JW7Fy2c9rLJe z&YCt6B1^Lzw%yF}P|hA^BdwK4@HHC)J@?f{c!!x9tfGz%6`}hn6IZV*QJK1N8GQQ8 zv5P6ufQk%TxKsjuJ_p?NGE!sa5>fYW{5Z+7;Xd(NKLV=DH;Sk710%&M+Hck!kygae zA?Z-%3}%agPVs#6au^FewBR9&WZJI~FIkvlH?)SgeoI)*ED_~P#qxpep;Sj!o1Q;t zV&%)0xBk#X+mcJ7&E-$Z&Naw_%p2x%Y#F?X_`Ujqf8@X07rgRAvk|+G5$n~iW5X7# z9$kUe+bghov14V)30BefDu%r}dtx8|J~hS^KD7eYAAevJs=2U+^vxER^Ho~gRSzis zSxT34*e004I8NLXm_e#DsNWV}tW0qQ-=+5?I%(7^P&X@85Peyf{P7t?lam{HLN` zKAuz zP*4ye;mnT=*B0T*UUGZ1Kyihr|L=klSCXly94Yjyd1tf)Q@HOuk$ zSchiX2{5JpKIE^YQ$Sc8SN|7Gb?pw^SOU;08w8Yx4FeGJhq34U4Bln?_8BABS33T=W~s zulaty7i{9Z&s;jszjNZo<=4y#?|JSmSd^fFKfCiBLl3&VbRZ}y$xhrV zh6IxjeSNKt-WCDdBUtNEavmtjGr^LC>unF~bdbsFte(p1eY(?ehi*S9+jS{C%rcrb zpj;(mpqm9kH(qXL;2_wc(V@lnTY{xqWaA~D0jHvVqTeC0D#)yKXZT?h5Vfc@I!VzS zh2$3jmaL|8_v;yMPI1W&Wc#)YwEp*)&T&a4KNoe*BBu@DMV1A!%xAlPhtxu&T_~}H z%ZI9-lGc9*mKmG4Rq`el2p^oM+IFkL7*}N9@xkJI6j6a*8|cOFqwmsQTOMM2p+D$s zHXh~TJB`3^$|K@=!c2quP;RD4PQJ4l#%gwemj>QRLJOgFIj*LiX|%zp(n&(~Y{i$^#n-w`c*uv0f7ZCg(sW28=oQXb7 zbZ~C<9DO1YnuU$3%E)KbNdbrTyEC>S;BQs;A9?s~*=Tn13a5!d(PdfjD)}thH#7V2qfG+sMWVmTx25HG5XsnG~k{ zeEO(oZyY+F4pBUdpOuH97bAzXl4=1P)$P;aA;H<3W9omu-c+>mBMLU|`N`kG7=qtM zX6dY0iywT<7+ZoKt4_C(^~&ev`sCFmR+|6$d)O;}kp8nHpz44;?WNy$R?=qQeXHUV z+1NnE;kDc9$c6?Nw+pq=#{0IiSII{47{zdDgVkoeB{5@I3QvBs(&ElvXm$B-!C9M| z)pwYR@_YwQc*%kOS_l4A{}V7#)CAbrk)II*!k^w~Y^_!VD(X1)nXlR^G?A->@>{%V z8w`(Fr4;rO#EKk0@H*q4L=Bmd0J_XCAz^I-EA8Q$0#l-x{o2NGnlFh`Y|4u1Y5MRI=`9)-_AZ%|SZHRd_x5kVhH5 zi>U$5$=4t@@4R9HX1rRgi`X;kA+}c~e?h;B$-|y{IsAn+Z%uoJj>A%n!*Uf4(YGpe zWS#HtCvwH~#+vu5JNRB;?#NTDz$`+`es0t9)>b4~YL9g)Pu=L>1Do%j)XoPt!fL%b=eL>UW=1_U zDaY(t$2?-*B5W%Id)6;A-9|N!TbkcNWS{P1>Mr_WaGJ0ZQRSG1vS|Nn6?bI zodB#^57~|YFoiN##Hf8AN^byrSu; zayPDHaXNhM1Nx-cyj`p@E7MU`gY>ByzFWQ0W~;Q&fD?{$BA5)8azaKal~$%+ykNzH zDJ$@9VHwOEP0m`=K|a2%f{YTe#Aw5btxVfJro&=jFAp!`6=8V0%iax%H?Y#Xw=&IA zQ=&oWZ!rYewv5(8ag6~L)}$MVDqE9UXb;w; z6W`YO;0$Jf5k@Rd7-GR7h*k1pNQlPo0xrJZm~b&sss87n6x2jeuL!6=i%|Go#D*yO zOVkq<7_z)t1=w{|$Sg=7&q_t{Nm{N5W-cYRRtzxmCH8-`{eziosbW54lKa5?^ziNk zPZ=Mk;K3DR2NtC7eSdKRfFqe#!5_08eYsW`6*BA5BwwSfM=e&?qvC#e;@N6FZwcQn z509U=Cg>)))C9#(GWHG`i?JBJN$dE3ww1_ADX47sQL#OF50W}qP*jvGMo)|dwlTA$ z)_a;J!6jKxCR+GR;Wmk!L8bg9L`E_nAxAcIIlpElx;~M_U}lWCq|Q^{Xmu(|SMhPv zw$r=rb>u10yH3@t^=jlVRTKSNlF9EW1*J2T_o<#&{!-qN%qI*bNm|kuWev(wa!og> zWYBm8vOimI$W9ot?NLucl6S7kQj-;>w!O+qealLnq@{qQLkSQVr-kvk*BBG!FJX+5 zwd&dZCui}MJ|BvEqu^0kcXWkEd13iWg)x^P2Rg{g9%5xT$=pH? z4s`Kb)LkVBe;DQ!3VdjMJ_n}2(RFRy=aM@FEuUYm#uOw}DL?Gb#9@gLt8r>7G~_Z) zIC8!*DaA~cM`v_7srQWMy+&0en&1UO_-IF1{u08)v#WR`F!1I$Wlwo_`AgYji2A@* zbbJwW$*ib>;%uWf2(iz+TNx6CGGy5s_~LF-9?lvTNN=IlX{)S@dKBIW@X9wMe(p$_3{-h2a8l3E>8k=RG3V!FcPgyY0ec)2_3Re;#BTWFB4AnKb6L@nu96JkWNOg zN{tXc3FSnyD5GBhXISQf$Cc32cUg>{eYtS+4l&_2HwQ5Ee*1Mp&&rh0b9O-Rs||M0 zOR14S3>~_CRW^8sfj#J%V8z@zXsr&mRR`M@jPJe={0e-xX-pZKGi^}pHjSV7l;vzt zyiK$}FV&>mbd#RYit?#P@dIY5Xd-EqyGY6#*qU#6GsAiUw5z2~nUT6XOGJ(uTqAN!Uf=r*?{fPDYt~0Qkya)lGO3F@PE`s^I6IzJ zqPh+0%&<46+H5TMbE+3q`R=GTLs34I3~FY=u=6!v1e{Q~_%WlJ=}U=fWA92-D>GF8 zs6_Rw!8NMqHEUWcQ$e*iWgt{`rMexer>zoiYcs=ayh2(1axJ6! zNa+M#ilwSV9~n#HyYyL&H|%_&nWIaD!n+Dab%;M{Yh&+9R4X%7UsIxb$>18*%kuKM zh!Z|w27Nw0JpF2;+R9W=?M)f4LC0+!w`>Qp7C!eAfJ>q1+Fo*(VGYSG2rV zfq<6G8C!(O<34XxYL%7+=mznry^2q>0^qC5I1MJ@zIaUMBoyB8uLhx65aK>z4HEN7 z`&MzMM}lKbtjzG~izPm_ST5sJtGsNO;)J*Pw!ig>`>!%SS(yqxdE>`Rs}04tAyrQ- zR@7=^k8OYrglvRPYi1mnF-dq2H87lg9!%W!V~ytEZ?ZYK?^0u+<1FYf99_)JPG@4w zSTm+%#BAUh(Yu&di|SwrMKIRJY)HpMH)EUS7IrrWPhV&*b!Sa z&1M2%$o}S18eH}_3cLM{#N6KL@b*oVIg4_MSFetj{7pqkCY*@H!6-tJ2y+&6DsG!9 zvg}9ws!97vopgP@rJ}x5>@mUcZAsr)MIr9V&?>9$HQ-yKXbyLVbf0wSk?*= zacXs1zH8E#Z2Lss-YoM!e!`Y)l|QDn$kaU%t?;Za`F9<|-&I0(I!0FOo73U`705ov zk+rM|ve6e;UXr`yONNg614{#A=J-W~`Qzg8oa_D*@A-&8$=@X1c?WZVYVJBq7h){6 zg0~QQJG*w;!r41mDrqiF@#>6o4u+jubzyduwRNvksOfkT{9*^AZdL+=6!eIKeUqiD z9#Z$JRWACXu|fH1l_rQP9>YX_m;366@9trVa-22B3H~S3d2W}+R3m?ikhD#55M^a) z{q(gqN4p%GFJy2&W!IjLvsyV%7hVi6GAXc^hyb#l^-isVFWRc=@b(_9!tn}4UKv;z z&aE%K`(>9QEO~aOvMdB!_T;?&@ZEjjH|97FOt7_lfVS_=yo4V%@-f{Q*Ji%i$l7u% z7uO2c9i6}1cTaoz*P_KzZ0Qeg@3Y6&>hPyy&+ECT98!Nh_Z`UMZq{?VsW;@mc0G6a zZt4?!kp*HBZm!M!=1^BF(rwH*OZp!!oYI))1sBy zQBmp^grkgCvZ5?|g;z}vel%G}I(&Oq?uNB8*e`UWt7JB0&PjyF+o-LTmTh68 z+-Ff;&3FgRyQyiNR>FfJLhEGyA7t^Z&HZg%?o*@qx^n-HZ_MIu#W!xg@8O%kw=P$h zH77HTgYCk+g@QQ?6&B6OEXc7J&L-s>{%dNWD>|P(yulI*X*t2n1fN77gk6Jf@z#GHacYp*RqK0&2}j3qkcA|GJz z*0@4tX&@Cp=fk8iD&Mi1ar`Kvc}(VM{hg7t*#-sk9?P6rY=6_|rHx#0f~gj&-I}H6 zSqA`oFD1}<61}sfDGWq-L`9+U18jRNN7ZUx@akYp4etcsa@Dh>tXOqsP`Km+Nej~2 zY@x!Wg$gYS(HnqETH2gKkB2tk3?VnHgnQ5*p9&~2@E=S zWsxa=aIUZ#H&-~%p%0pq>661gusKtT3{Ruca@+D5Wj}sy;K1mlXebsZXX9@_TV}xC zurZSLmf>yvby-Uz%wZgXtRtY%b!J*nl5(>&2(ujdKThkw&x&4emzF!p7;GKtjdbjn&D@7aPu?s5QIkLm@6)*Dr-X~L7)h%6kIy_r zUVMBc^Gkqp>{-9tY;oXnh}XpL2scPF2IWs~g-MHK!WmPBZ=d|4#&55EiQ8U;B*;|b z)f{4srTff>h>BL#g-Y=qbV=DaTHp=ppXJT4I@W~m`?N?7gaIrw3~f7RUMTI&{O&i(C{vs;|CM_3J4Ay zQ@QB+gf++VosGW-iB9j0#6q6en6aviya`n^ym)}^RGk~08(|4LWp#5bjI{7F(=LJK z%LUWIBY!djS7t~h^RHkyD`d?(Wqp||>I~OlRFSK&Eu0!NA0usMTs}+~Pl!&4zFg5B zk45%st~$Dt?FjEB97NO<_F=vBr;1H={kDtLxtxNHRj z%bp7sseWU=<3uo#7e%>&^u}-7>A#={zp23Yy&!r)bi>NL+Ioe_Zn?~P(RtDDVUx$8 zRkEfxGOB_46rJWmo?IbqKAD4bn=e>0R5GC)hEzFa(Hdt8;A7Fw%-BC8&iqBE^QBQy z(>bbXXJ$E0#=Dew%cq`G7XWu>rU6GV?Dz+bEtp72hfo<_e)Rc=Xj3Q->X}%}5Z$JQ zU1i}a9*O?B-*59zu{I+iGcG7WV7Q-q3u&5IwL5teqzw(WrqKVdwLv@jG{}3wsY$DT zYTC-r%;J>I3Fv16u_F@_y^8g4OKt=CWN=pL9UU#H=&I<;Lo+Qb;4wFP3}5%fL->)r zInE*)Qd$*4&<=@Cf)ESYQ@F;IXr4H05thJ}aog?tJB=+0@u30`&A$56QFrt&WLA8h zS_&rWT>9%G)j%``F%(cads?DdKKkHmqSuUM4j^E=kX%tnF_aa5rq~sh8W++{Gugjl-whY>00g%ISZF4-5Q`>~XE1;XncN)K+e|s6MXS${crfYW!Y0My$ zEVMW@jTe!W#BVM2(PX_`AeoC#8mXBM3uTrrw#d+&OiG02W|j$s4;(9|t4*hk)%q5h zHD960vSk{~DYST~*+X*<-qSMk9*PSrD0KV{jh8%AUkXpRFNI|GD`KE&QB}X?<7%5^ z_SFnPOE1#(mECet%*IN>>51q2(XNy+irOlDS|LI+7Z zGNc3{%0nR%>!+QWK48#m zDmBof2!^MC8>;R#(ZI?|%#Vi!)j$UU%6MK0l+DUi_+LML7(j;rs->a|S+(`;v4;aR z3sC!rDt7==z%P9`Kt}<})=4F%jUxZ|oT~qac{&DAcA+YPT0?#O;Q$>6=mFJ04bxK} z4$ujJHq-(72M*!?!{ko_RL?6`w7xaeCms&aX@E*FD}ZvgEERS>9H6rR6>7CWmpG08 z50gI!P@z@2{n);ROP2cr)b-~1N<=tE+ICfXPSn3Jr))XZxZRXO{ghC{)fz#=(@Ol0`IXW6`F zS-1>*p!g+G#lDUg>y^gSDE?B+wZjT(>lm(n|1#6bR)h<$G}S%#CVd3h)c)~Nb96gH zp^~q&DdG1Sj*1_q@s&JQxrg5w<+de$wI*f zg)sgYv9vLqn0t*GJJv4SM=%lhn7^qyY8@q8`2JBFuI<~MtE9MoZ{_7S;YjsqRalII`f2U<~qv4RAoUqE9N@Ogm*XBNr5)Pp&|@ciw;1M z;o!5AxlYo)9SP>=MCa_Oeee2^m}B2G8eLU#m+v`6YK!QZDbyG&NxlE6_KJ731BR=J zH~q~YrRlFQtL1{VR({Hw5SsxtL(drklaU|pPRPMj%tMnNn)lGO9QO0gnNrU1Rc9!B z(l;yx@%Mb8IR%Bn@6c75&!_V0gYS+uQAN9K0}t$d6&t)bMFVtcBp9$-L|~vojzshIKgM1@{>HTJfj2 zbF>$V3>8d?L{WZMioUXB{Y@q4Z-@HYg~bZgE)Z9Of8-hJ7@ewo3Mt=EDWAoVZ$DDvmG+}SS1S>t5}{AF4 z$B3=b>!umq@+s=>l~c2Nup{$YQX!@^U6@!F>80Rgb#S^mI9nZ@s}9ar2N$Y?i`7Bh zQ=DMAd1t6y$nuJ0>GM4vWsxdZG$lM+L}VH5*6Lteb+ElU*ijwS-K!O#x)o%gg?(Y~ z?bcKGf#+`f^Oh&j6qoRWv`k3#$*Sk6QAcsp0|Js6i{lzIYt?9*)bG(tG-RTeB!acA z61^xYZTmexTb@Cb8M4y0pMj@mEprh=g--CG>jWw_onUe31R+t@316zw2@{D<=%o+X zg2@6|)L5ic=>)>N)d{3YCzw-cl7mjb36DLjq!aYP4CbLQN2OXQSaLeppuU!Yrg$em zaCX!Nn!p&G3pxakd6PRE%n7>X3@`87c<~8hzJ8)lL}N5S4=HK@PO!fV@0Y(!Tpu1g zmlRkW&<0h0XJ!b;zM#1wAFnms&dg}pI~IFwYa>^f7rxx!LM%Y$6xz0PU;ZD(|BLxQ zHhrnaXG`IzIvH;Kd#gTDbtyyUD$2F(`@+_2RpC2T?$-jv%u$&bN~y%2 zAJE0Jk9wLVX_BH#QybM)lsGk_P? z*9&XGy)nm3(D&(WLf-i8Ddi4d{8S@!T&U15VJH6T=dzvGDqp_rb7aifRGM3 ze9fp+*uVGUS4(n6N~HMI0+tOYDIaXTT8k*nK2u8 zF(II+4nW|n-L|-TZQg7+y7EI}GN-=#tcICh9701L8k7^vm?Y$8vKASPnUfjC0id#Q zgun{0w5K$*gE?`|U_zl>X57=AOMGm(9&A5kA?UhX?`%pru`D2LT9}Jvcy@q|` zQ`fYFTYqj8j(!Ug8n-+Hc`3f!geLh?7LAY^QhC_5xjfDVQ@vkBRjfG3i7~W5ugEA* zd_8E=s0=p9Ssc3pDo`5amanQF5^7%(rkWmB> z1Sq+dm)lr6(c36rDKPXs;JbucX$Xja7oHZJR#i|ft*22n)a$=$uE?rm_ zE-$-cp_;a_E14IKBts6?cdPoc*m=;!4wOyoEDo^~31zX{S|fJfk=X4YJv+)p-&W@) zT{1^>mCO;|t;~@onKP%*CI^|r34i|hMCKkMyS6cVjhP#>dL?$T_0Pgf++xdGgQ=a* z7B6NIR$~RNh2Sk&+Z94Nxk8UH&IP@4m_2hG3s834KKi`Iu}am3HuA!O6;8eaT+y*~ zaos~zQBSzdR8;B)2x#1LB-*`rK0hOwmxCOiap%VNQjWSN_s@@>FLNWMM_86t5mRLt z8RozH0G3jg@oVg0T`vyl@47lmoxl139A~lz6O@G(927rl85zB}7}+e$#rlaCl-p@9 zzYSCa^4lTam*v-kCcnyH@@sLyl;Kg5-)1;mxtZEQ*wtol@@=3j;Gb5`3bolwcy}V) zry^VzW=^474wrP}gipX^$Tw4~$FwRjU^aFmMVQOTVemI6un@0R5wgviotbgG#$JYf z(V~A#jiM`)y%#QgrQ6aR2^gFOVnVjVeg13pd!4x2*}<{2Sg7Yu2m58GfNhlX;UaS zGw}mU8#iZW+C!6a7%y<>fELNRDxrrq9r(&E#=nkvNNC*hB=xldKj0wBAyqU&>KKs2 zm#9OOnAdz0OkI(AVhrusA~MQy?Lm`kWiYw6IKJmqpd{B5bJcP^Pq=0}pe(fSf^t^K z^)lhz$#n{}k!uxUG+cB5iVRO`D#^8R9{p|2QDtMWc&pVYCp<^*+He+3QQT`sX1`z| z1t64YGZ8*J;93tss`zlM`jEB!d-`Iu583z&w$7(3X#AS${$?NIrh9emuH!F6P>Q5u zEyOQ4r+y=+V4;$AbthJDxz%gJ9S56GG?53PxP^{ajI8%fNxb5Lxgr;(e=jup>y zV#XDmjhgk$i${J+c|l%2JaNLOFdCL6%Al<%Q8nH1l@ADNuza4J%#s|=xQS?PX>+Gp zgd&4-c4k^d5`WS06f+($m9`uXgr!e_=sv63@2>q>aVoB|RVaf3%ux0DcbD!Hri{m! zXsf0=-(5aL#sk!haHRJNW4;qqdhND5R(It`gkx7;Rug=M721KtS5cceg|vq{%*kxP zLHN4O33|=R^eBznQq8dfAZJ;)?Zk5qdd@yMSZiC(j79QYX^{qu+OtaIc!W8bF{N>N zk2%4FIhk=BX>8@uCzn$7$u;Y4W)e4fxFAq~_79bY2LC|Hgl(Cie{y|{MwN~w0>yKu zn2e77tv4J68}R;PI#v}Uih_uawb0ChLg?7Y(#Fl1nfB169CR#>bgV+?Se%EZV^9B~ zQP}YZNNC*hVtsOH5ds`y9V;58V}Tt0{Jm8=Hr%6*6*pMX5*cM3>p|DCWH23Tap+hT zDC^kY)#zBlwK|q4=w49HN*zmhw>lQIrDIhR9qRy6M25e>oFJY%80Yg--W(MlNQ;`S zx~d3m;yR<4@Q*0f;+VdNFaU*9QbWYM8iKX;)R4n2cul5;%CHw4_Pk&hq_9f^n{Mu1 zd0?wiLq}^HBDR@-()s1~+so;nX6iKIY;_ZQ(3(>O+fS`KJn$ns5w5fy(LMEa95z zpR&+|bIMuKgdySGHQ|zqV2*B1VO|bH3{Ke05Mxcqavb_lI*KHJ46Np>u&CGUV#aRV zd8vI?r+kcTpjbRO`o>!2;5bvUoT`i{fITdy`oOrmOQ?o-vaxBq1zR_iKH0Iwwof15 zBiOvHhZNMqv^N9aJhnJ;VpUJIO@>_OQh01%xtW8hKE!fmi4mu0-p3w!9fbVGDqIaRA+XoF@saq2j!YJ_CT zrN2EoohXCOPUEfxZcb8nc1SJ|4E?6~OyAuJt&w-Bp=yqA)!v5(t^>=QWn2oMeEupd z8n!pR;d_mTof_Xq&G}Q#XmW;PV7hb$HTNTebLrgAh+)#ywaAIch48C1hPFzlK0>9s zMejV}n5SI6O9xfw*5$kAxdIyrBAN5G>zBf}lZDf&f9KSFx_tf=Y#!sMOw)Nz9B+T8 zs3;v>EvM?W>5UtYs=D7Vw;UfC&o#yeMyt}Nd)kt&cldS&_KBO-Akb2nG~d*;IWx2F z%;DIv$QxLZU9h;!yc{;val+UB)l3BBPxYTbXIF8?Z$&Vu-Tf=_>}Ti)29Z4$QV@iY z6j8Z(yAa|`T`;9G>ERvw0DFnlt(q9Sk|5#_s&lF)p7T5g&5&l07BTr$1%LTuRLSrg zeRe1qHXn*OI0`XBdeFQA4W}S{#d%_RHO|#J%jbVv%xZf8A+W0uy>Uyn@!<}Hs@%jJ zl{32&2x`+e)fcXuPqlR%ip6%h;JuazrLB+{2=gC*BBOHI_` z{lt*8D>OO53kH5%<}ncms&(4AYhKpGT$UdF0U)z>8~WyV8+`hNz55N{i{L?AFiT>Ud~d#ci9UnmcGKMu$_+ST2u2|0i*HxAyK0%*p+#K2 z?JL!pB+8 zxzs>^bP-5TpxTu!x+%>p0#EqZcbN3_st{*o%y}FZ3L0WyQsUK}q9woXU=?K&i1=QK zpiL$1q*FUSnW(Rq#j$RHw|gxjT~%i_e&+2DtH$evoBrwKKhP(C5 z%ss2!p&z!JGD#R@DS&)a^rlE>S{&MpqQf&ir*l8>ws0KsQ>tO(&dy~u2xr$h?GMJt zH;uz_f4}S%(YA|my-^rts}cDF8p70XjsD$ycS@6n2f=4ad&UrpkY zmUHs1eGffPhd^{jtlbLeAYX_1?2!waeuIVlKIGy1Q~l46be7F>mju?x_7^Y`5#)+6 z3VIJ*6RknsgekoZ>v}6~NsX7xBL_wO*nXe=%))w8kjv z-O+g;;=)`)uRxSEabu+SHRhc7=S9ymT}v>xGyJRR2|(Ee43MK6lshL!4r<7DU4P7M z`&_?t^MBHJJ^z8m1Tu-ucJD>BG}3wfF-&xp!cTsK$;+|N%M8b;y;hjz4TRsaN zHm_2TshW>;+bE`S<%Q&E(3GVrJ#F_*K)U8zQZSnqy2Oob#&+FV%&^v#n+rco9SpNF z_5s-i8-}bit4{;o?(OKX;dU-O|E)G0&3jID`I=mn^S>rTQ81(`Uen;HGD(czE19G< z7>EX~D}dpY_dS2WBo_}vk{lm)?7p1I@DHC?+nVr>;ZD;GhM7%Mm7 zuF2P?vG8iEE7mdC@_NbmDIN|3<_jBC%U)_t2W$$mx;?oM`XA!g_0YUWetq9E?ZU5H zzqk^=-uC8yh+h|4UH=RGdN||B6DQ!>|2M~zcfCz)|NqN)vS=D*rSarK%ke)to}5h; zyXwzw6c_4c(`ZguX@SyF1)?j?p&_stk)h3ydk;neV!T zx3ze(3M!qtdqU3Ah`MPbZVux9&iy8g4yCU)K44g4D6b!^L|^fTRrK9o3Rck92YsWE zH75GLgl9tZvFPD9Vev%*ebeDN|84Zm`o&kH&_@GwE`*o7!RXT@sCwaVvcWpVXS(!TIFnzy5as1~PJFQc z$mne&R$xsd?>zC@(nS0b2Q^-*i6{e}f|wcKNGSCnyvW$17|&l?eDbBnFq(LG{eS~? zCe&QYBD~i0WiyScqN#DqQ?zc16@!Ia8n?W=GThd<bQC+QuHTN<&?C|<)dSDMcS zV1!?LK+R}=7FIggCJC=PTTwB3F|vg=?TTrvj~~zyjs;~;K4%QYk&GCa=J8B9oUjm@ z`}Fq<1*IIZx^WBdyckLrZfM-{DTNQ(k+DU^;uCFp;kZ4c4k8JU_RKD3#G-H{qqc({ zYw`SnVAVr}T8af`B?SdVgi|KyGw;Bk>VHMTlYB-Iux3bk{^fObSkp&}vu4nI#u{a> zVh!z{BChe7OyS+`aGWHU<2bGSK|vAW1zcwej|w@GqOs5L5PA#H=>%f3aK*iA;AYSdWQ8q1$rWyA^4Z%?6-4OLf&YELBAK z#J?Hl2jj28ToGX2syu&rO&!deNpY68n9nd*_FBxB;1jZGmF7yA=f%AhF%K<=dX=tw zcFfxaKd_5s!w>smuM>%?!dwwx-i;HUP!IDC0WpP>HlJax?6sH+13siJrG)q`oW)-m z@x>D28z}0C_XtQ(P(*mmUyS9w_^S|C1c(nQ&&6leVR;`Zj`*PY3~^jwcrKj4JlWy6ndxD|gD=86FGdF5%Xhxsfij`^JV40C0##oRDx zyxyNaOIVvK&MfZ<^|=!23xIXh7ga&vFD~EisQ-qjD%2GL>dQFcJ6~Og>7js_G%uOY zP*?U^)D45T1XgJo^L_V-`D_XE6e`;>Z;5|$5sIh@k5uxKb== z6YgXU?5KgoWL5=Bcqlf;BjVw{jDh7~10|ztlDXTym@3sy)E>(GC=(+xW{8X%BG{aJ z)kfbb@+U0hATJwx7SquLa+7$u29Mu_zELM^%$;dccG%;d;c z%JeaXzVhNS#Gq8w66@4!y`C+wRjL5Pfl0p_mpF#TK1##U{KgiqpQ24$JXpW;T( zf#}B-s62UBR32fd_(zoQXrWTIP#X4}xoZ;_x=C@By1{&=QkA_{r3x8{>JU+wq;GnB z#CE<1ku9-_t2iIzz*%{t?RmRmcizkDFsfIeZ4c1kTqvR88UtsawZL}ujWXamE$~rZL^5hF%tn?3!jwFlJ z?MO#^)?%YOWTmfk4qFHMsGMwQpBs38QG)@QJBTTDvVsf$`h^{xi>u;g2V1?iojTSi zYzZQ?#?kVQQ(5tHtI@w*|H-AZ&1#R4*n8cq zPksB6=7I=gYtUj&*TfNA@2blTD!-_|QW@rp`U-_#mCkpvz+%teL|;#ajCq%Ze-Nz% z%E-fnk}+y@$igMsgYl)M7ep6SNi=7eYP01S8lGLe9i7u^-FXQBdwMw; z0qFTp-4c#p^Dw;Ly7N_?E}Ezi(mJ=8wor5YzIk`D{;8!wU;~KVyH(o!T5KHc3`aV{ zEwckhMz5tIsJBZvEUvWF#R6Yib~#5_M^Jv1t1mQe&+vuH^}sgpSpb*CESPKxvz_;? zY0P%s%ks-x5f(iA_P@hDt5MVz^N9Yn?s;VY%iVKO|N7`4Dqh?;+@9*+pjW`yFdVsC z{NA*{!ryWjtW`jZdYxgi^4ccUI~NlZp@!(Y)j_r=D^t0nlg-WH?N$uy zhbY-oz0EiB9eT#Tg}5G;L`H!Lobc4urV}j#r&^Vgiy!Z{`A?6_~v+C%cnPok#$_~Z@CUVScDEE5;JyD>%_$%q?1>$k6pz@8W9 z)Uav}?`Lwtc$PxRrv}cnlTNx(LY%N;MkB^Xo)3AXT@Y&VxB7^XCJ$Pq+nuZ;b#`mZ z%^+3eN!}DXp^rq2vjm=TuN^1sJzYX#jg`holBliil!*87{e|Ss+ttL9oGHh7rb9)K z%CHD zmxN0*0}-^dqm8&+!$=?=X49=ag|bh2XGaTJX`~Ka2*oU6ur1ZUIyyM|8pX3JUM9=m zt$u?cRh>4HIZZG#r`zx4AR41Hu*t5`nrz5gj_9_@)v@mfz*j4b1S-T*RIfQx&2q4Z zi5;6UB=#t+7Mg0coUd$R*}DyI<25&FMnp>~@R8ZZiyI-Oc!V{kNo=J!je%S`{&N59 zZ%mHH)iwji=}zxmvM*L-|L7f-okC=PT{1kz(jp*8%K}dLqRz^8n;>fU?FJhRC4ZT& zcqf_5BB-hWs;O)E+fyrnhARTavQThhm>61C&U~6^XFDiUI@1z9kq;vf5jPPR=WqN} zoi7pQkBRRgF?1?_Fwky`(y_Ff~|-fx5ypO3qNmm30s^$pOeZZvBp7zJzwt#xbbM;Y}a z3`V3%#EKml6i1&fwVZJWV{lTuUH)3zE=NX9<)W*K!lBH-)vvQpri}4+nWBj*h%xVI zD)sD1$LRb$UJcuQl5rqzbQO#HG=tzEwTDMT4coUvseVp3#hSizh>5^-xaDM(jdlD$ zcEv6$n&GrSqEd@bkjt8Y$6D>gu2O8d!Rj>XXI`@BM%_f73Mh4Y@7c=1C2?N6S`VD! znVFf$nB8F6G`>va-0q3o#lEP!?)>m@pC5kYVayK?GO2yY^TR$SrsLo=!R&C7|7j@R zv0rLu=NzKMqd_;PqNg!0W5c>@lIbz2wL8%4#j-tr#D3?m<{0~5Fy@*d|9CpjD2cr= z&qJky_4DD2e)B9gI=D{+BUIru&J!MpJhym?p#?ezjp#^zVl;i4#S?Jcm)M2_WL*A zt$7MfI7$=pUAKv*gmF7NuTc|DdlO!tik=OVX_l^WK6rBL@7bjlH*XglHRSab4XIuH zQEy0g{q5bW*|7h&){qz^KRY@Ty2rwgyjUGaudJz#aziFSm5H{Tqb+|DzO5>=8weyB zM>@Zs?Yu18`Ag8KZp9Dpbt@KLByN3pr0X&^?$-y|8;0&UEW7?!L$_aq8mw(tM5FUJ zBb~pYVV@d3YozlsEG-_{wV3Ogwq>v_$7&huWPV6e%)nEklVWeXa( z^|mL>$RI^4F(dl%NN3P^&Ft{vVLalxak?e7@o;fwgrNeVI6PWwU|zB(FxRduG?yJu zE9JXJHclU46$~#Q@V=)+PXT$w4&8o0wktYl=$7Sd=iMhhIPl!)%;+~20H2I7)XZ&O z48Y>gH3brtS0a-uQu&i2X6rOW4w@bx9V-?!eiGTwMG*@#IIz7Q8!mA+td7=1GZhHc zQP)@TMFB0B)TQteqwv3+!r$*5g=Yh>*l9x$6wV+=D^qAfs{Wj@{@j?k1FjYISyoEf z;yqo|RIU})q2`w_l-OQ2(zRvi_QQsX`!#+9wKlAe)viCR=|J+DqC<)=WK0_Aycm`~ zCVJjT=Ww?3;^+@z=fx503c=3KC9p?_P3M9O@T@s(^#R$=&1D>}TbZM;1BZM@B}ck8 z(_4mbKaA^09(?fDJ90lhaE`IP_(4J|!#Kp~$VgdTU;H+!Qz)w~u%vvx31!7N<2GU_ zD~%{W*@uDVHvWH>iVj1I%)$8Ck@dHc#Dpfh{{Cb^p+_3(XGiQ)8fqApFlx1-rfhq4 z3$u2Hn#I(>)1y-n*XeMHrWH)Vjun&*A;435Y@HQ`bCvnlhe@81&O5T5U(I&@Va-L^ z&a1&-%>k7|%-1H`_i~6?e!g1y>XELmnS5S#%i>7aRoNSExof2B>ee4;ZJ_z%Nar7I zpgC@&^Q$9Ww>_e3Dcg0M4Ky!|US#AvtrAVww+X7z_YFOX8QG!rZ> zxcOpVXp4REdyI(5O)n^m$!>D#TwDo>rBF*9Ai)EKdx6CL#~Miq5=)N6at#uvRwJ=% zuExWLAU&~X?5^xfrFQs#FrWM`@{shI%2B;Ez_SWoXT7mLKJohJ!*QCzD!uvcHf~ctH5WYP9y`X>gtIpH{k(*y4OTcMpR50k+_Q;HrfeyrRS^`Z$ zRmw->5{-;Y+~c0{Z<>Hq6QJ$HJtAUU#)+u#l!aqt6e6SYet+lOr|PM6Qr)jJ|M$)3 zle*8{&OPVcbI;w+&GHOAPW03yVtnjrf>e^kZjaRLG z_1a61EVp*ZHR^K4E*2XJfoq%0ac*p8NCY<& z#D34qG$edGKVE{ZC%??6=Z{mAUd!fGCZ(OWf*$=DmF)w$!| z&$Nl91bTnQd3@YSs^kB+Jgy7{;QRL;RC#GQW9R_yIq@$7_>}~q_xxq~CsPW0i8YvS zKi9BQ#UK-6FESx>1M#t`@}lu>g7!fsUP-ci?jn9GPk7iWnkC+>&X4F2Nq6|?EuKf17QJW6GscG3gO`0X@m!baP+)1 z!fOcHE5hZAX!zdjR+K+&Q;S3i2t!zr;h0eT{5r@Z`vSSYbQ8(8Y-N7xLjE7$O(VQT zV1MEgX3C1a2!i&G@OdCye#{mG9qx^FaAySf`Z~Bh`vMmuK(+O)B_;=VoFMEI)huyC zy_*1HD}@4*>iyyOt$G!d*~&aJ;idxMX2$~P{qi~KdYao8^agT2BAGXz@{ctKaTUg? zZCM|+M}Y^tPn^nSDTKfbQ(Taomn7|9`F4eUibx(>j#3a6%Xf-i#$!4N}2a*t7{AT`%>^(bLNr2?T+Cd%W-R;Q`lM9|(V_bMvaDI19H2f2Lofc>7# z(Z6k;g3$Qs(y3mkFZXe_n*R-PnZ3W)VH`_}yqD z5-UhM@vp8sKc_M(Z>v$GR8TX56Aze}de;<)q!rCgv^26DRz%;%=;_XeiVyK^`4 zD+@$A)g=?x7ftHe)u6?FQDNDM&xAjCHbw|zmkCR(j!2^!`ns#t5e@TG6W$R@PK5Wv z=rQVCK^azq^jx^QUf9wifI*B-VSRyA3d;1p#@=D6NrLjinPc=J(` z<&6R5-_>;nDi6pyUlTvG4zf;vQ{kSsvH$sp&tMH~jo%o!hq-HfR7atcGk=8TV+ z(>unTiZdd*53PIO$xv|AvgibfVxlp5?R~omeaU)yPZJ#f2Yzb2oCJ@Am;c^oyqqQ| z)BB9dmh3G_EovVuGL#s@1FgKit_dgy+*pGij$2oy`8-3+Ubz9)PW-qNKV(R;u_e5* z0sz<=m0K*(&nXqgyA;P!T}v|VPI9HEM=5PXv(LU}ki~v|v7w1^4nP_#>~woz^9>)8 z7SfN|Pq+NVl49fiOe@yc(U5^j+tXOcPMX@<8GsLwy~9x%Salh@sgkU z#yv^M5M>o;NO#$nklv&(kmfz!^3|?h4P_phA|~E!N+$r1LgMBd-XUT%6*6KBE=IbP z;f0>T3cyUBpzC7)P^*1$4{oTxEZf=V+x!-+#a%lTF07sNOo>QBiY?bnQx4DMT zs=;|Znpi;a3_;$sB`*G~DXg4j;ZnQXv2PK8lpTA;y3zR4EP14WD%cY%CvpgjQ<2KW zYp$Cdq>4ta3>LS$EHc-GQ#pl&8Bgv&pXETiErW}M?Ul;Rm<^%7!fCqlEI+_AKpdZN zR+#BB8!xPf4d!#g6>l%;szkCWYG8kkO1zJV{dem43kKT>Tz&Y}tzln6UjL6L`x{Y(B(B~ZaWbWO27RZR=R@fN>>1-_o(!5{B@dCodMW~(hnh7 z-VVs@&b^uM70lLjTn3=(u=+~{elxwVvL~Kh2)K4CFO|U@T{76fG6oxcl0T7bWECiBgE{Ld%zYpK2RKp z#EO9-tub{B*wPa=ri2yN9-1g2tP{2HNrZ(A*u@RvTWj$;-jpq#7VQ6&pgrxSzeszT zWTw3=E2q63_1-Mr<{gh_3-=XX%|6&of+B+KVC1S{XBAMJLeByov(+#jB%VusA7qU#$@!R4v&_<2VN{m8lk zPBNPYts4VmnSnv_n5np-QA-dW<(`x%qr#>0^(eQeDJe~SwP}=`rN_FcvT1CxLZd66Wco{PTvhkvxu z@mC+crehUJR6!)UI9urIz)oO0XY;x-AMJCRtzPzdV-S!6BPwX(6=P262N4taX z7mbQ%HX-?HHlU(*g|E+j78p)GX00O~_j2x_VdRx28dB0&Z<$Nk@txWFY{*kG)VBg? z7;Hm47T=7-5~OeVAzHL!W`{WuSA&Knam5yg2IUlnM$L&v%7G-K1e2q{Plfij3 zd&hk%b%1ciz1ce+;Ooxpibu1j%p;!JQ@-2$?mL>M^%$MK)=-3A3}e<7u~reVs2l!c ztJ=*tzc|)$C2XUdnDnZGX(UYhz?fy+)*m15Twb6Pgn3QM8TjAqF&V>D{I|$c?&K`{ z8!PWmA+p5M@|A{2WO=duEZ`yk<&Sn7!GF%$*U|)w$g+Max2DQjg5bwF!Cp?u%dvht zd-+Va6U>Cb*b$lqA|gw6dL`4WV@O}d%rNJ0=aJlnEH{wz6YpOGD@=BZUc2|cFGq-G! z=aHY0W>$N@dp&mbiz6f#m`<^S|9j}qIe{yvPWuRGnb|td4oq--hl6gire!HB--7M!%HkHcs7ClD5-|=>Fb$9irrm`~negeT zbl4lr%1G0hiofzy>u8iC!1MDEK^U;3!_^2cu`Cu;?xuNFbC*1~v542&49JkF$09m` zbI4a9W&ebL=m5Bx9u%jg-Tks#2?3y8c#e?Y)NQtL{>A4#)?|wZK|f-AHU-Mw=-Ct~ zQNE@n9<`P&b90EjsOg+@=D1P0S@$FcJn_Pok3U6-shz-7lNmGM>5)@JruWCMeXvFS zPGP7;3^2o;{$+>3-9BQgMTM(^!T6zBn~dLIz+O&b&&p*$_7ROIZW0v!8*2+@t}I)# zk7%hm3huBajU?S7hjFX>nsA&zw~r`HgMCEhwy5SCekeiHkJ(4`2)OW}zq0C)pBfV= zi1emjQsb|)k7(KeRVPir>Z1~40vpF~ow%ttSt_0C%u|vS@nCR=&Bf$3sh2a9=n_h; za*))naO)Ug=LoeqhC7NoQKLE|K-K_cDDf2GLO*7KkadueWhi>0D=Jr5tEi^<#8K8N z1SZfDn)fv2OmaGef8FBJV6#^y6ITY4iDSegec)o!Ckf=FHny2=L5F6{YGSAXsHkDo zOL?{XRM$Q@BmNY6`%ynzghMd;8g0w-*++=q_Gu+qY`hEVrAQWr8qRT$nChHV8r*41 zX7|#}KWqM|b8MMgJ=x+}P0#?AXQ?H@>jQD-fMf+$jzb^}wTRQ#s{oeZp*p1N7X@nP zraep+c_Z_RCsxi+D#?~rI%7>HTvm&Rnw26AV~u1wqp*I0P{I&K6F4i2B0y>j{rs21zz23+IL^RHy0rovNky0coXL z$JIjEqG84mgBS#(!%EIc9olL9&NWm~ywBvW&<^b=4^+#&o)vk*@VX(l?) z4P%a3AE|qabTnQtRS>LZevinSedP|$)a^l!oWALtfQwJW=_(a zY0|wj&;}X3h>ONWCjRr;Q#Qth%@d}ny)x^eFlHB`ciN8L~DsGI-qb_SB`;@Qpc;%DM;^?%b z=akO*D-Wt1Qs#Bx$4oO;Fm~6u(}_Y;&Bm(`?pn~2T}-+bX96 zXgb!_E*)lkgcJ0SKq;JCc*YfHRxt0mZ6?0Mt4{2jOCOiyDr#l2f7>GmT+v&3Gm*&S zhRNcgI!BOUNOScQIMG7AY@6Kq3_{`;KS`$@AK4%Kaks+}4!P)n#qEvT@AnT?rrSZS zG8B-*7A(k}RXGa-v zVdtXrscVq2nE(0gcJ@k#4D9&^mf-D=t>Agpr%*oMhzV*}Refk>waFeAS1UhnOy0wf zQ>Al!@i~{Q$Q*kH_6Lu>Mu#>3V=_Jn2JLmUyo3A$m{at@@)GL}^QsGurK!T%vN6Zz z!};h9?or>6kF>WjcE+md)6Tf++{(EFIYqKmzWrxs*b}|k@7 zOc+>`JT%5XN~u0*tPFxC+rj&P1;wsH=^x*A&87)oL?z6Du?*iAx(WfpU^ z8K{fmlXh&gW<|Y|Htd5+y`8{17s7$g(%cQz>jF!dn;>_(Rsql-hpldswW$o-oPqGD zMZVPLjACzRAs`cf*n2qzR3Y?KdTevXVLTFl#nQO>@1hNWcRr@P{AXAfGil(B43$w& zBMPG9eW{(f0Uq4X1OZoEFXBwm-;uNG=&5S_|=`Z(Wh$w$AjiEAt!v z%mwt9>vH*@M^|oro_!p~3iK%W4`vZMu;@PS9&n5_?VYKMEfne|R+6U(p z_`f=TR0SXoJz|^7I)A{4I4^DdhS>xmQtTEl61So9lXDpDXjSXhE|Doxszjl*ICeIy=!F=qhGv~Pv z0Hl0})tg`4EIOnjAga^E+lK*IR5NFHmUieVHjye_#5 zwV!;_h+IP~0eS+^6Y;Yh^s58tuy*!QLn}-QrA0KN-!>9|4!wjXaJ^IbnwAU>WIuJd z^4>-zF$(D&izhk#1`)4J6Twy%MBIOn5uunW=5<7n=1xx|JgaG_N~ex#j9#U9yJ*?I z4g0UM-`kJM#Qv+Ts>a(ryJ^iDa{^a-`v*Gjl;K>ilhNJ8XX!xC_H8pYI5WVxkfP&L z9gemc6Dyc1=v*l7pCeDuO_g5*Wx)p^ zt@P$~{r6tUA~Ft9cRS<#>p5mxol{#W~N2lK0V>H@%%rtP@#Uu*4@VTY2EGb zSE_+BMYqnVb8w$}*pn?24Ne_ep)(K1kV{{!8FbJ3%6fYO0522zhfNJ&a;B&rc-vsM zzy>0h(ly4?8fOy@Rnvj1DI`^Ny=b|1m-xVNig{|ULwXQMdyIGdJsG-Wd&7YKwb$nd zs;A<=)ViDR(A~UAz07x#?&dqz-JG$v?&hrh#3inrxUqamKpd|HG93-0$yAgJ*e9=9 zB5HwL3-MF7CsB3l2}mS6xOuJ3aO}sNp<#2zN6aaWx-;f+GdN_Jl}|JOU_xzZ&H@sP z1(W7GlPenb3tusr4Gf^ltma{a z9s^>!6!p&5tuh#ztTI3s{AoDUD`#wcCFIaAMtgDGF)xh}7%xaW6mmE4ZOZt7@>;cV zj%rz!#N& z847MtFU4^qJs3LVOqiiCWSB%xdPu`Pn*;mKgwqkfe=!lG5HaHO*RYeJv9B9*o5O7_l6bU-GBkfvs#&U zy|o1dS&3)S=E%x%GO{wBH4t9L9S2w$V+yKDV$ntFmzh1|((N&$2~J^1yk`F7m02?G zu;6EbwtLFzLn~Ec{8E?m`pT71C6o#6a7T5I&-+b(Iq4D3VTK`abRMZ>x9ezDwsa>& z{?V1q*PjdqiC;>p`FcH*T>i6nT~?x-)2T!hDGU+Ej6|_t~crt)0SFdioIR=X>nzE#HaH4rT28n%|hV!iKAB3DOL&I3}5%5wFl zNsJun&9wgPoft@-_p3D|uz1vdxInU)KI^krJNGJS0=mhzt z6P}auyH2>8kn-<@T&QJw0TNdR@jI5`c*uB4JNABmHs)|yN+w0fomb4&}VJ(|S(F^?%T z?khb})}~X93^fmUB`1DBGE-m)FPI0GY6`~#OxuQ?@90n>njl)F#PoD*N~gztLTG~p`amOo69vFmMgNKDO8FZM{!$G z##Iqm682bi6y1|Iol_5c!gUTB4h`xmPOxY82{!tTsg3Tv|6*_n*mDj$4zN*ghPU)v z4eurOn|1@4POP!I3*DQY0HDvaTJ}08iM7LE0SilD%D__@IPr-b_G1#CcWY4X1hF2F zX9;yIzUmRxg#(Ow2kSsL-EbcLMv^SEd%V{PY{q$5b1D!K3kXUcfkzxb< z7fw_b6(5$3JE^9o$|oux3-&y_**+dSM;0ehDe(2r^l2pNoFtq;CPAt~tQ^IkMc&{7 zwgA{5FryL+u;2^vm53w!_(HOeqnVbLgtyJz+70tNtl zt1O(dN}j@u^{&f*JwJ4|#h69qfemf>=tBGhovqvs3aDaYP|;qd4(9#%vVtr$NpB zxhza8D!Cj*%1O&GKBx?Dw+utV3{7RA7>nW?xZvXa&|_L)DMT}h<$-%kl$d4DcoqvR zL{0AVlu?U(nyvj(=-y}OmR1oMzx8(}_w7oslW_aHwF}4UTe??KtdCJ2+<||x1fF9D z1abjczeD0IxH`(E*ibCZyVHe2960CVMaQw%YNDHg@=em0oPP#F{G|6uEK6GmVk%sq z6D#kwVT0Qc_Anavyk`<(}hPC*m)%6Y)lNv7{XFM!HbMM2IsVRXQf@ zb~))S|5al_G#(SPJpJ{gN2(8J07u~^aZCq=4kFXeLGN%BzJpKA6BRO0G9SlrYVmf5 zrgjwGt}oTRn@E^CDBoT0-BRzh>o&E#eZ(%}JzTeoD$aF|!V8i3eM82+VZJk4*<4Nd zqyYF7E6pn&O7m%iphkSEUWXwawKgb+2^kK{9sIg=)Oin<(3C&nou_Ij{=s|HZX64E zMNE9pZ_~wR2x?foi(@ovav06I)26PrdV!6WWc}k*ZVllkl0_Xw-?}-7R|(uldY*)$??>?)BMoT zEZ)T^0~WQzt}Heu0MU>i-Ac#Ozd1u=#*d*1b8PP~2B{H6f}%oo*rmwn1y1?OYj*}` z^rdt8r?R(HZr4%Y&@5Sn5^Fn$qyplP8i>d;(Snqh{U8U?C&#X&_4CD&Y4de2l*+uoRHpS9)&9eJlYt8^ z%nw~;nf(-ZSdgvO`X$2Umnl`C^mPMOxaS4H+2I z($heSyLXtHnc=&pr42aqCSb*1bR84qLg|nTO*P{0|2i!fv&1x#i*yGSiR#5#TIisq zR{=U`X^kw=(iSpc%P7*~wRjuq)l_Q-F)6idgS1*~SADDvNo%n-Carn5ka$lm-6s%L zEiFXi-@ZfaOUAFxBpbiZ#ycKNv4`>NvORb<3L{moybnkZ)n+Lz)a#;yY7dqLc}QXw zG&1UD5KR#ubDs@vOcc4%Em?TCsh8ZeB_5iT!>sIhO@FiUq^|#Xnv&AQeWuHT;&Fu| zHDhLk20_WL|5ygD{}es3DZXMf<3$~W<-9pQGSOp{j7(Vp&t@_kiU+SR zG_5aaJEyOOA=!bth0`i+hFn0Vx6nQYwLPm+7jm+`j(aT$)9C-fbXNUHDex+OT1D)u zkJAKa@%@{Q1J$B@q{gjV)5PO#=2#cNdRT|~qO8Yt$>AUf&d$ffqxjvQpgI`SSoDyw zM@u_TF5j%i%Cd!e8UD)q=~4nOAsT>jPd~oNvza1g|Jr;$qUFvZzId0wqlPTTF1h0y zc3;1oswTUTRVaF$azlzrxE>P^S05 z%5y94tK3^FMZuJEs8U|+rRY0V%AI)gxyRY>6u-QsxvFwPt*mJ!4`n?tXmlwkgF)33 z%ThCy@70P^48=9!#J`G-D1E1j`#Roy?jZa94!?_wn^E#mT%Q-GATRC~#5!G^VkmBZ zocJwXoW4`V-HkV&TWP;P;FscFTzLtVmsdK5gx1nR+ltiElKzI3F8MUw;OtnYY(E+v zRJ5(+I>9vrM;|o)tHSiQoWPu|gQ+HMFi+EhqJH4CHFqqp044tN2{OFDNkdCa2C3kG zwV_++3RF)BeL&mrT_LqJOZe{G{rn!cJNE$2ih)QDX%$6p9pmiIwE>vL?_?(+ym?sl zE?AbTH)C{Fy-oGrmU?e1-sT-3^RvR?oHd~7tWp9VK>+C5i6+`C<8+}B|E55_Ve^Fe zOz&S+&MZIGn#QF=(%21Bp%AlO-ch{uA~T@`i$q3f#JAmOteEDzPGqb>acd8<;&$uf6OmC;MCQGUxsue3L5MZQ}QrW>t_qeKF&~;&`3NJj!lxqWKEB_o$dhes0C+J6+72 zLr_(h|Ckb)i8=`H5`=Mwpzjofgro%kLDHa77CoiDQz>nPKM*}i!hG}?zp_Ser$+N6 z+^3T&cg|T?-)>^#!*;Ap2<;ORt=TVF8mxa@9q}FfAT%lfVx4k2Ogb7V`6w?*kU}%NnTX&I=Y=)_mT@heah8x)f-$oF4nq zET>Oj8hLFOdi_GL;n;BIKaAo)fQTdaRlH8-E&K3Xx}q;6IzH?^t7v^!nO|NoeG<@& z0uoo9UOC-nRfZ^gP|E%eR0{&<0G74Mfyt^;43=E8%g|2OylQ zA_9zJb@=LuUuC9=x%tWPOQD?pvNZn4i9c|HcIpC7{0af_S5pAeZYAVw#SD<{>z3o| zBOGZTC3Txg&qTZRk7FG;+8S%(w2bVm*h&iIIIzf|Fs<9aa;A;2rO*c=5f&f~^y`hA znh}L9Dlf99LX!2mVS;q}aCL=IanjrrNOOAukm9G#S&i$vTI1Tx6D-`Q&)mc9X(HR) zlV6LZa=9rvgF9d^4drvs2Z**EAIH*zjvmO*L8;S|Z{Kpf4|QKTpnSZ##+vxwSUSd~&U&cpEu3TD*ZCd4`J_maIE}NuI5dLe{KtX?E9-L@9cWu$=xXUyeH5}y9nCu) zE41^Hj|K>!kf9Z=y#?Ac@#v>b=XVp5!BqSC<+s%H;wTa=n&utw6EPyGK;@(Yj|SWL zRX?=~)OWQ48P}^gO5K7}+aIV(paFuHt&&HUs+E{YlbmaJx0-ZDqL4S91R>tR1|9`I zl|r;vu=S~l4*7Q~hz>{*)zZst1}+HukR*gU(P{xjX=#9>%n3!&-4m$lX}0Ro+&$C# zkCko9)Vz*!QS%v<$sp6fk2kq5$U%#I;rarHdI0EhpoxF{W-5W9s7h(hnWq1URZ(*2 zP4Fw*6ACNWq_yP3#Kkd{0nz%d5-nT}g`t3nWC$3JrSSq8Qu$S>nKr4(wqzwHO+iew z_z=Y8o%f5|+eY8i`>GZ*b2&4}a4d3xJ^ z%hSWzR-xWnz-sXugd+W*Id%iZo;zqphHSlN`@&&YaM@W}Q%PzYfPPzrUP!^0Pp(lf z8rj}_?a`I~ZNoB3*rP=~lZ2gzi4osXhv~;x;Lb>Do6(-F=uLLB+-S@D*)m?<;4w)}^hpxG^)1@edBV5-NbqJ7I(+DBAIx0v$fcvt;OEyET>=D zk6frppKV+cyLm9|m(nPHYj(6bSlBrqpW!EFxtdXjpDc6F>cnYbsDD8fFrGI@ z8;|~#8?=DjusK6x=0p>6bgw)&;sKL#rgAY3T+ph_T-i{`Y6b;q{pBR&Rg<=s<9`NN7~wO4@IW0k}Hy*XBP`Hi5)kmio8jzHAK_*(q9 z)rgB3&#};dMK8DPI#j-GEI#fKgshmeFmKf8mdW^1q?B?8z1(4Q7GJFkf<&vbGNSQS z5PWMtLyb_yt|M4OcPJ(lSf#S!QQzYhuzfe578sYyp_wxUBFr%lKtiMEOo#N`_T4o1 zAwi0N!KyBTyPj`5ZEi# zo78&MPHi!z3 zrT;sIoS;07tiCy!}Hr|Ur{&zgP#F;jA+M84mf0e5%55l9^P$OBiSj+er^c&V{N5p?>`aO(uLU|603m9_I}^yBo5-{XiavS(mC! zspCcMPweHTRAFfQ`Jc+j5>(J@ltI+QyXB~7!{w2@@8N6)W`KhYc0QvQBTdj%NovrQhmB(iYS^*Ekx05YR%)e5{@WxPWYR= z6Xb_NnR2bGz8BR^{t@PIqx>^M+mG}U*&-JOb)>b}$)S0B=W*f|8)w}N5Qd6e&*kpU zwh?5V>$wbHK5P}uWiMSIl`*c=z$Lt=r3fX^U5<@$a`k*qYXX+MMqdy3(XNDJ?!hMmu4DygLq&YoeHBr)}5kB2Tb zU&p>(a@LpoLb_qA(b$HV!@l!;1Be5-JoX!Z;UAbY7dn4xLqZ+E{b}_8?o50wQc(*^ z+at62I3}v97kI@wof8Y=I4-TkKcAQ0;2d%9)4+WOE>8R4PGh_U8{>ruIrp%SFacBw zJBbXEi&E9ix0!CwNR1>HAN{@`y`==MQ1Xt$jf7SWd3t}SwF>Lvcw2zPrm>6H$q)k( z!^&Q~Zqj`t_+&`NZ=Af4stMoHlJVbe>qGC0--sgg zrfS;>!pQn!N5tFVo>;l0 z{Ctfh*o(6i?K?NB3!3|~_96UQgK7Am6I%XHbwJe{Zl)73JZ|~CfP&j)JT<4lE1ys~ zzVgY+$HT?H6}`t*HYd4HwF@%n{=D4^to&H-K3M2N5~haio`PvyaJy3Kk)LaRxT#==a<>7{MtUCl94(e-)nxu^TLO=q?~J>fae zX3`YZ+$M2nv!`~>T=`_4=)FV(y?!<^K#u|KF_nvw9H(O8QdOjw%1>2A_H_^OF4y%{ zB=c;hPi%%KG~+rnEAN*^syn|FpS&AQGVxR@&DYne_6%Dkm29Gz<2GLWj^ej*enAtGa3I&rsBy`;mqxKd|A61H=L~NwP&X5*yRokjF>y z$x>;s1(^)(H5^6)y3MhhjPbdjQ~lYJXJ+eJRG*M#ys70%M&Ern@kL*?O7uBVxPR@d zqb9ma6L{2OqKl|n5xTh;ZOg}JgLVJ5LCsQmV$#e2(=H{4+zxKaY<;agt0DoQ0~!(k z8MJ9+%IY48D&Gib#XH|%n+1lVq-*D{JrUD2ptN))C8P?pITYGe&P-UO6S#v9;=1UOK>pvJ>;)Si@2LOBC=C}%&7f1lykDBra? zO?e#ex@!r_=bZ9HU=wNGD?`-Z@I+>_hYcFA2~y}Jix zF=CcQHDu{TMEn_bTKcpNPt2q*w{kxB1@#$d9}SFGRn{<+(C`USOl*tTa{PS!M8$wD$hnS3H_;r(D*69J^Zln!r*X2=+PqE}?kAb~?Jb+MJLuF`jA^tE> z`8GWe*}6b#3nz488mor=l5o_P3t=b$ruNDg>sZ=)u2~8!2BvWatlae&2-@8_j8$(b zjg9&B5ynn1JyRq-dg!Sn)F^K2`2m6W0){N;DMbW8*5P~>L7~H$S4&Hbsp^KHR07ow z=e^@;VdyR{X`($YG(eIzJ7h>+DA?Q8@w}Q5;xy&oFL+LRJc~M`WD9Z)kn$a4KAzLcgb!J## zS9Lq5nWV`AN|E+!fKip)x{Ef>#5oiX6*j9;NL%HjS=O|vxLNAuhWPy|rPz5xwUmJk zI|n*{#Eak<^lP8qy1MehfzF(=Q2a=?crX<)hZxT3DBYp2vl+y7HiKxc{I#vTII@+m zDNp=j2Y+1^eEA#`$uy$WsqVRNWNZ8NhA6vuM+YRei`O6ju4G8|SD_e^59M>$01PvW z;CWKz)B*F>qq+d93qtj>*9uj889ZS7%rv$z7i`~VQRVX}qkjI=<5wt$!Mko# zmPwymn$c8dlDf4jNNE9Gv1|tsvx3jw?fO^IZhRtFo8MwTNtz@%v@kwl-J;pdXMQtn zKD)Ti%<{}uZTZX*CWGPbUQ>57-3=?pcV4DawM#r>0Dh1dF)G_w4_^3!T!u) zV9IFmCE+OmMsw=NuZA->wNO z$>GMh+r>u}ijKI8E+p$O2cUySEoXRqAUri-Cr84$hV_NB+jMeh4d`%E=pbejTlf?o z!)R;BhIhewuhfKJ|20kFcEMa(i20Xr9^|g%g<0{R7SfL-4##i&iYd@ZLnjT}T*_Q1l3!G=kvOmljPCEH{QIcO2~*hMh$ z&(il&?-{g0LRmj-^3)cPR#7F3mTXsZegz&o;BY6(EH*LBmnIDB)$Pf=y4Xe4ncOT`_S1trdIO*c>Z6)|MRmq{x~UCV+z^8IufZu0)~zH zz`e8tB>h7#YCkMNEZGZqb(9a4z}C33#Axb>o6$D4_Gs_LYdWSo(`KVy zd+8xlc?J!hM!#Wlb8+K6gg>fodE)|W9iU>XLp*7}dL;|s&#L?$HO;t2YfDHc=NMS& zLi^3eKkYW{H`--ifP?oU;oI_yOveKA-LbbjX8 z=6vT5$`b6w^HKHBGz~6r%}b&RGiV5(d6aDIUkH}y^}wBtd~AOyXi1HK&|@0*0YJ(| z_VRnrt6YxM8ocmmNoe$iuwyn92AN%!KQdL694~S`#L3zlhasn|Wf*{2(Zwi~J8P&~ zbCfkI8-&K+zSw3xLY|&23+VV8J4`+KB*v$boF=tGrSUrKOJk#8T-WrJ*kJ=bBS2Hq z>mU8oW15mS=iVihZZed-(2LWB(luYaREa&+68owpZtM?g(Tl6R10^{fg_$uYZqQ;Hotdv`mMfby*4#YS|qMu;Op zRik$6SP(S2Yuu!hl8rxG4ggiJIlm%m_g*JNf{sNOgxn2|9E!p&liHhns-O6nI^<^K zW0pd0+L1#dZTLF77`f01POC`za=SVw5f9sW!+dI&?a0c>T4M`+ri~cllWu_-HLbTq z!)g1H*p=9p8xz>-omMN6Q|KY^?8@18`q~l|twV|rR{>!QFXvI>^x>#+Q$X@nrRq2_|AGBX8MRrN8do~fEvpH!Xmfny7G9IJeJAZNv~ zQZyg8A?3CC?zR!l={mpYQ(Z z)k$m{jwk4iYQ>AA`G{``gqD7z`YG0tx&lgUa(<6`@i?p8zgAHJF~U)_1VYabkAg2)h0S4@zAP3BNr z{&FcdgDs%c?amf+qP!fg6XM*uiTpkS@qnGo^*A5-_iEqc%FUq9f#>=yH_|?2UpfkS zBqw2Q?V;CfwJ8DTWXxGkUWBmiDGPXf!@rp*dzSE6Y2%##x9LB?=)Zg)>E{I1|BQYU zlEAXRg#I2o4jIn-4UH~H493UIDNVRDiDS#W-{E8R!CTjAQCHtA^B&TC{re#}6>@0v z^@v$DL<_$kxycuP&qX%MSz8Rq2`F`KMW9&B$N9snnkar&KIT+7%njyoY;F*H@SGg_ zBlFRwhCJMQN~H~YMTA*TIb!K^UIelp&UWS&6wYybo#U%XF)#mF`e@jrtwlsbN)>+% ziPH)*PNw%{6mT68q45YK6UQ)HkuZD5m0(m-3Gp|-V3O+$2$1#}#P}XW4GP`RUNOE# zsY?-MsUr3nd6SPM@gw{oe+*;Q{_4n)W|hWL&&D9cPKjxOrk;uem!M+ba^BWuLjduD zk?2Bv+voS>$8s&%aj1Mbr9hXM8$9|M2Eq0EGI>vDXp@a~!gMnnleVMZCg|4?o9t)k z+xIix5X4#`66>!s#?^ktW{LIdOspMXIL)K|j1B$a{6-$#+>cfs#LeT{f<#si0=yfW zAk@KVX6s1|kGcWQT!C|qonMYeKW9AA?3n7Yk(#af9Zo&W(Cj4Ny(2c;(Hi~1;LyKq zSBAm-8q#Z&iAZQ1%kISfnXMZuSJQjZF|*4qYf_PRtSy-xZ&%Uracuh~XcRi{iH}g#lVfA962BpR*b&u7Nn4b;YaUe*d;#B*e8l zaT+D3h?|4B2Sps~RQ$W)hZ=F&m#2yQU7R&^>hbWNx`y~7;#6R^xCmJ%PVxqEo}wP; zlId^VkjCbZ@vWA>KBEQUSjd|20GXW6{8Fyc$ zwM|CMI-rw`kTeH2%U&C1JlXNnw|MgDtB$E0Q_HY%hFSCO&OdU0!Ljtm(SDjjaft^x zUjHefSa&`|tJ$nE+OTfhq#9u7cUCuVeIlJo=Xcc5E_;s}TJKvbZ=rOJz8Gz79Hpvh z1GfLu%Tsh0G%?!x5fLVwL2og|XV%TMAsiB6-EiG{ah+9Fgd{%u)2cEX`2n|1-H;V~ zYDrcMgVzRYOX!-ne-d4zzvtHR|JnyTq!)sLqQqiM@*Zo4jknFZ=XxD?w$1MKg-O1c zg3xw{SY^=GMUOdlg6rWkFGc0tLE|sq%MVS}pcJDumc!N`CUw#7P_*;&w1UR--^Ere~dpKIRBNhnAY_g0_F*rA2|P27SK(= z0s#vH=e$~`)UubQ43Dh=wPal?E5tDB03&47;aPa8%#$kT(ES_I#kFnOQ`ffh&}ZIa zD?ifSw$fE*26E5z^v7udJ(YfiZG|h+Pb=6LV@tCEg+|zPz?COfURwSM3CKrZgA-m> zwdbqhahM`CZ$BK>Qho(LAv-F&gZLH!*U@Xka(iC~yZ4p9P5eq@Z}Qk1o0`j=tCa;a zpcH>`PUYD*)BOA&Qst(Uv@JFN`?z5Fss27%2g~ruc0lRGJWNRe)jtoW)y~} z8;Xu!X8O{uTUJGbY=xm&Bki0u&^*Uyv7?RJw5y(?@CTw$KS^bs1n+B=)dnNu=Y1kw zSqqIR>@(I6trAUK_A)0jg1F&esFYOr`pc)|zHvh-xTOsqwL<;#?Gy!w@WvZ!i&Z zk4t-B}giY%cIBS*m1C< zq`>sU@WVoxQ7JMi#W?YIm93c5H@T4xSIT&oXSN_tu~+AfeAtjx;816BV*=^y5*y8J#Ioy zRGP*~GbqqJq;R5Jx!HS*I)M03|E_^==+$fL4@o;y0W0x=3+IfuKgnmIMJ- zstg))m!UV*C0{hI`il=%HAJP?5aj3Kk+7s&cSNI{BDqP?jpIk}b6Y&5$3hUvsazkQ z?K7Wza*>SBk;=phn!uSt&5q*pizjx!T&+$5$?R*veed`$k>fG%m)s&l2t56gRKp9(0)s zk~7n=xXR~fkX8~l9aNxM1nl5T^JniB0Lh6=y`S5Y0r z%2&sl36-H)I;jw%2WSK-75*OAyn(DEFmT?sr{Uqs<@ zAurVpkou)Se%mCsS2O4^-!0}0vcUO3>&XI5UeJGU8c zQ{`v=v43SY)Mj&Tos?*=DbXO@r7fgQ81mpc?`s8(vl;7j=hZ5of|L%D265uweISix z4?)W_B~;8n?u{hN8*0e+FrK8;tGrYN)m4K6C~*=ezOJss5rUR4aUgdS@p)rPd4&yJ z64_`qp~$tlvnCc2rFL_MOdWjY9_vOd!OEP)AP6K!NSm*Fn%MW^6#MpUxYHD!5ccmc zHg?Vsl<7THGrI(j#mznAD40}EF}k9i?@v&s_m$xaaZ(F{1y2@m;y0PtC#rCkpyhc& z+cV7QwIHVaD;tm`Kvfh#SK-7*)d6iHXnCNBJMlDGgZbY2E@+8%x?wooPQ_L7W(9&H zYvy>neEpfm0R`0wgaW{`4=4Voo6;h2PqSQc$+I61!a1-mj6u(FUUkx8cQX7 zohMX~H$*N8CbgwNxG;+oU;h3y7bXZ=o(ttI))W#jLIN;N+~19ltpgJ`1QQVMFWpBn zz2=(F9RXjDT>*cAMOC(%<5hVGs~`xog6gVL0hHc>6MxdgB9Y@Zf|e&Dls=IAE0X1N zPqrF8k8g>PIbQBD-dQTBu3QC3gmB{L)|I=7pykU&gow}Qp5!9LHzIUGr6*N=geCR- z@iR<-#|X+`F}G;-Y>baTjZR4Fl2I-x;!nOWU5R;umdB&=_9SyLC-4#k!FX*QjEROY zG+cv>f!vo!md`!GNP2*8TSgg*?aK~D&GWgMihUwUP=Nb#D&z0oQ*Gk|o^OY4;$rSj zU?YPb>%9r2qUl$QYDWQ3v<4?0d~cd7Ed(vk6||dy=dd=ILSKgDbpB29ao*m1xpoii za$i=?RBjUv)srcI-5aAg1GbX{$KUd4fxb~xBXUrq?i+RAjQhsiH|xF$IkbFp#+5I= z;8LocrlEJEI8dgbe_TuJ=V+U!QcQ|Kj1{GluJfcF9;BFB(wY)Gp!vGDumDwlD!YdR zR;_SC^udDppL#odMH$GlEbM&b0P(9UR(Gr2M%EG7JM;Fd?t20 zXNn{$C~f%07(jmOoWm69e%n#-0X3JERJc{zgp<{L-AR9q)Sbsq&`nU^?I>=N!xM}W zT(~NS8{g(c=HpC@$Bp1jXMtOOwgzuZNqK_Mr+X~nES~Nu5(G41+jF|7^hExTrh7Dc6%l43SD#{n zt{|}7#+GjRkS4=&gqn>eCI{3`Z852qhiLaAAlA=+cbQtvY zye=2Fn~Wt=9g}!@sjeJQex=s-t7DWFy-(+OXQOBi{5TPH&eR=@Ea*?aBUYE%NW=Yq zozwyY`KX33OQd-_N)+8Y)sUi9D#P398Y`}(ka+C5Mv(!k&O$dSX7gaWr)Vc=d5UN@ zMnfSQ5k}m~QW12-@^OFMd{MU?3C;C)Noe#_6KzY%Ay~^1^?3e1IW$vqBJ&lZyvOx> zoI4>f8uqwB9Auqe%8+1<)ILX(&zjhOnV^)|-zINW>;)^n_*4`74}qP;zPGvjc9CG0 z0^2nJ43%*H?uL~xZ3UTF%~&BNg~TU3$0|Y4Yhtyan4i5pT?w-UEnf*`wj>`bKNBlG zHOb2STDY0&-&3;g`KG8TwUDMJS@I!S9}q5qsDJrtL!w$$hD%nP6<1P7eBo*%$^ca* zE3248>xf!K(DFnfSw;iZZrsT=sR$;_@}bPl7j?4*sC$xes1CFWxsUTrF{9?#3Rb-JBp(kGRI9%+e9-dN6fL*i)sU76fpl6X4SGo- z@q3?bv>2c&EwN(Ozb#G6G(mf%g+^?cvtsKNH}54anB(Mp;zT1SV;VbAbn-#Yn^NTb z`p$;rG?62a)1uF)q>y;(cq7LERmo{r%(h~hoK}JwkrTS|NOW)@mB&X7zmOYBazI#cruJ{vuMR4tboK+ontP4}|0j82_R9yA^%JXHHsiYJ;F@}cyHA|8c(I{dA#WNoAA=fySGh|$+ z2J#`(42k~D%#$$a-{F31+)V^A9NSM5s(08J$idOai)I>)fHS)}!p_>8&qw=;*KwRM z*|Flm$x__$v;BPRyv9-M6Rho%x`o-Ukf_wJkbuh5UXJ)|x1db#A+{1&KAS!q5mhp3 z?YW-GhE><>Y*=e~0rpxOv@%Kxi7!6R;2EH*h)yV``Nnh|4imI|9oDE783WOEq-GYx zJerS$oYTK$gp$h1H@Au|TOq>y;ygBp_Fn6z*~?+-FM|&DX8r-J0?SJpjab*NVuAKw!_4L<;e!@{N#Bb_;Nw zs3fvdm*~X2O=BaW!(xLH77u+V)?-MvnO7`ue9vwm($;75&3CUY%p`9}U}9W5q_ZkD z8qypT&T6AHe%iTKar4Af_2n_HFBL}f{ZHW-y7cpSXa+2on^-RhzPEtPZ!MQX;^R3x zgE}xk)#kg31o3}dn{EM31T|;@oKz5ex)IXJguKYn-PtuNi*p`wFwdh{Zqh1Lv0bfYk#J(!&du*=!&&X1_*96Lr7bM(|a)Vy+9 zd2>TzCk4`poi^wtg~S;r)&NzBomb3`YtqEd5Y&)ZVa_E2l0l!20PaB_hZ}Pfj_?A> z68etjOsn)5+OtNVe9*TeMc-K%G;GiinxuW5z7~BlO~HxVo(3RRm;|UwU%O)NeQTP& zR)QMRXP6fw!yF3N=_u3U8svmjZq!lkFdST5Pn$3bvjo*Bln)9&nWFG-#~V`EC6G?x zCWBs5NPPNJjY0!drLbQyzuT6ku$!QU6dLA?00kQgU(1DrJt*X0Pj1*z&MRGz(ObV~ z6e_4jp?pyI-V}w`eYqipBLe9ZjvDlmLgH6H#V9mDRSIVm^MpDI#|UajpUZ=m`@)KQuU2_(mrBy#&Lwt*PyS~yGq)gW3fAY8Kek|asRxG6_oV2&>HjpOvq{}} zkX3ymt2pu2zcP3Rs7hzMVxIjk>6&aMXn8sZa{CdV&%GOb^0~A5PR+v<$QY%cP!UR( zWTO^N#1WBn_IbXSn}-b^ZS$}#07!bM&wr^Qu{}!a#P)eEg~T@=rC=K##^=5zOgaorfvJ2Ol?ClAMS}3JerS1m$DX6(`KYsvzHJ>63X_ z%kM}SCO<7#T4&x$(4u*mfurLV%`Djpcy%6TJ|A-^K0Oap@!(`Bs`Ic-j#^%@d>+=V z5QcRM38?701Bz5Z)p13bhbasZz0fn+JnWINhP5^R3)T|T8wx0r3r~i+=!5zs)l)(Fi*|HBoE+uK?=_szSxlAZR7}euF_{z zQb^o=gupwXDxO`6Iie2FH3T)nGnt2(>@oopVq7w{l5E*4e$lZu59<;=d(6YWCKFc6 zk3zcz$Cr0IPKGer z#StnnOmN zBXTr_>A(+G3MRHku}p9js@QJaf!uwhO(r-^P!uLO`rM}pj>#*BL7W-=Dk>Th==fK6 zK^>}`@0#wD58nOxXG-ULlqY?*A@7C-GAMCKJ*F3I|EeZ-LzuvyfV$ZQGy!s z&M@bgj$rd>oSY>mI7X;XaONHR8Kn)x{`#v%>^%h4h?Ngw|1(8w=VuxcJ1dYu(Hr!V zLgJ?%Zp0d(DzQx*D~P{;MVi={#0`lR=ID8n?J>a#^l5@K=LomhxdpGxmwe9XYbB^g zpM22w(-eKL|8zt8+62<+TV>Eo3W?8XG5QQpmA)>;{QjTP^sOPNA$^89`_6*B#{?%( zs0q%Dqr6G!LJhv^vqoVzK{X2HgTim8DBM2Ukisnj=@j-D^pZm2OPY;B15~AOSTRqm zqp**lh7=m+oHY{cJtjDTLQQZc1IkJlDE#4Wqi}?v8in#f;m#C=ANf>63MT~8DV#Lu zC56OqIm{?DKvfE3#hloauES}98d7MO7o(2~woPz8V_*9;!MX4sR8&qq3_KV{x0OH1 z1gG(==oy}ALY*?A!7-i6KPRL57k*mo(fwanR(gtHc}1@)joL6X8|L%zmd69pc@eMv z#}pHKryFq~8KTdE33X?OrMG#V7>=jp6vK$&gbH_8lGL%Mwq@0K9ATZ8f~uovc5XF} zQ5f}oTdKbQ?Gue?isl8_>wCeV0OIrO({~xGXyP9?Lh8V0L$mT z0zUcN^GM5K&x0z@Ek7f@x>Q=DN(@tkck!wU{YpDQnckzzI%_mw`3EAMuWX-g-af`g zRe72p2v#}>o=6cq`SFGXcc?HYIBVsW6cXR`I3w5qRSE7 z1PLRiYARy;!ip<=M=k11F-?SC_88G>o6V z=1WFLPO(^EnN*;5E#!wQBXXFRxo^~cdH0REZ_s@ca)N;W_eev6r!AwOs`6Y4iNAl4 z%1WB5N?x9<^0lcI;61OO%od^Cm+q-yD`#z@Bk>9sU(&`S!5 z+d!JeV1TN%)QYX6_}(q)T3R6S^5no`Lm3-(dN7n-B*dzGWO@y_WY5tqcQovlPl5)* zN$whv@1bzs1cFLzL$~0 zBBv1JzPL)_bgXkpPl-}P& zl6I(?n;vK6=zZH7Ir2fyn^NT5_ko7wtPw~j$DU-z^eiFqZ7Yo&15_oaTQOI>K21&s zL5;`>YgCcw;3$~z;wTu7j)IvldAxlKkT?p~hr>~@9yypeQy`krLF;6sT zPHtFE?I_sC>%E_ow|W#z`Qy*B9{{KR9vt>u8vDY(HsslaK{sVOX^=|_iSzpz&jd0I z8Ym!E%;|rd=Gins%k!-K9(w1HpBZ?!pz%n$c5cF{_`z1XzBegV!`+RGFH@o8>Z8?Z z3Xk_LC6${=2IEGvgh?2Uwfd9p4zNLALf7PriT2`OO8Q?)_5+3#CVunaT(Q4(qw?0) zY8vzCh27XlwX0R^_meLloe65EWqO}edCowjD^~+n@@5tkAO3Crjsd&L_wdhnzeV^A z>SB_fDEwaIV!r(vsBc(VpCd(rh_03m45@(p&`Uw5dFR(SQHB@1Sd-inug!%!xZq5J z&3BZWc=vq8bRoCS@#_(G-)da;n!RFo7%7U8Ko+8PV3dulw`2iR>mzFjN0>624ZZGb ze#)#p6u;MtC;#VC2#-W8ARN+=GG_}dNh$Qu9<3f4^1OsqDq&x)wwzB1^}|w1a)?6$ zqLLO5P`gAVH$-tzKkh^ph;0yKfDcf6Z3XhoG25%NQzQi0&ta6z{L!7VoC zGIiSOxfBwg@+aj=#-=KHd9unkFg7jUg*tQ9psRyVa{-YJxt$!MD*xC{Ql+OSdsO=> z6_2>#Q0?wS7D%^fsCl)&b=<0b6G4ls{c4|*D2i(Tt5mgLJk*d2Xd=ipE-;D}?-UY0 z|BqJf2B=!?gNi9%lCJh1f|lnG)$aJ0hU?PxmnQJns$H>E`Tjnfs>Q zH|o9__l>!4R!*q)E$?YaaBLZk;Caubkoe61PFK51UY;zg_SzD`f`ReT-nkoXc$7gd zYQrP>sFl`Kt=xruzy`9}WOE)vvPGY4Rp7)QeAH^i099*6wu$0bygFSgtpqKP{y?OA z;goKOb0W)1FcG86&j?G7sG;;UWtKFf`yTlj_0b~F;AGEUwd=-V06E7cQZ_BK>Jh^l+p~_g9faF|e`9+WK{d9^2iqT3?jRfM-_?-qx_cNJL$^UM zDI|X8AB^n=sLJ-dVt(?6Yd@%B6D%c42qxYGMF)ScM0FMR&> zMJhgLxv}~c*mSvuSJefqVI#z)^Ya%Nn??w#u}MDI^wSiZj(cZAHjN6T>kM|x#axBN zk3C{+GC)-}%_?Txsx#5469hG6lcDU7=pl6rnjpW=ra#qHRx8zMI`}cWT0KutjVAe^ z=_e_g&L3<@(}F-cO&KkEa(|nU_yniP099$??gi(6H>Ind6`aO2#e$#M2g^0lSC{W% zpMt=-BJ{a9=3;f>3WMEf6suYMlN0mPk z;C&rc_5r%_$nHWF9tmhZI>VUh<2DW@5{AImji_c+_`Zy&9{U@Uc83uuo0P&fo3|wE z4LWC=wtmxL#ryKm^By%xIg_B8q{xS)>=v}3B%by5hLVyMNSBl@gI-cdyyEvJ{RXHi zDSe8$`NFiMY$9lR>F4~1Q0A$I8*1awF(DVYc5@hqP7tIK9jB5@fQZ{kzY{}Z0 z{L}_6GH+Evt&+K9P}ZAYo_}SoHtt0_CoT}IfVB|~)~tVuGa%1YCzJ}y z{q}LBxPkqf@|{yU;c;g&BYx|_u<1|C8tov2U&=2jZG1fnFZCW=2ewc-yR4^Rc@fIq z%bkNp_Omw5#asR;vD_ACwjP@;ZkxtVa177p<9-u&Gw?Z!g?%i>h8J6Tv81?RW?b$hJR9{C zNZ{TkFIpEmcgH0J1kdgSbC^(s>cX~#+6$kYlQFu|_G2keyy_*XEcf=BNm47dcwn}8 zR#SF`aG2XS`R`J7gJ=<(!yp$={839Vo!{2_ORrwt{dR&Lk&knXLy*6hY47><&ViFq zXLFJFb?>r)ssg9#$pKc|C3h{d7dxV+RMcsoKKE zF&-?N+`O)^;oI3Mb~MPqyJ+k#$<-r-a#?`^_jQHyHg)8$e&z17UzOQ?_N#$>-kNOT zqE%R=Ir|d5!?gSCOO;wTGkCpus)N^qw$Lp6{y)=^_C&;&VyJQ6e$-dLaIdroO^ zV*@bNIUn2wbED3g<;=QmpUP5J&yr;+^nbUkF3OUE-IFeb{_mFc8mg~<4|{nS|6YQ7 zURi$$_qr)1zh^1=|J_n9qmhSj9(o9kbb#|)5TZhXXp(bck9oANYgb*r`7&z|| zGiv-wRVG%B`*(M|ib8n(5%cZ4JJgbB3&qYsOfBnsm~Xh!;SH&u&K_`(5A-V=0s>ylSbI$N4cWT(dF8d^%zu$x2?7%i&g0Vda-CsjEirdQZrk% zWU&hUUoSSM*qCBzaiulYVkL{Nj##c+zStnLe*u$Cty63_#kMb5tU{Ne_Af7%o^2bC z!B5d9Z5X*nv&>~x>>^qEOUt`A_7;aBAk$Z!z;oVJFd9)T_mU2vD&J2HKG}6&Y}NO- z**`s&^v^9of|DrI=FgQU4qsLDSkSLkVwrRmHFH{vx*Sp55y7PQHe*;0hgQRlt^8_Eyx!;0*rG8b}~D$)@93!Asc zPi?;bWn`=<)`GXkFKE90WP-{M+lB5roP6P-T}2fA$uB)E>c*hM+#4&!MEm1EceBC* zas8ft3yxdw6-92nw?k1FC&pPjL7^$@y}9db-C=)k^6B%*kvSBz%8)OcEq`V2%sFi>hQC1$tZ*#_&^7;Jmonvybt z&Z-(te5CKFOPhh+7lqwQ1ct%`cSMqw#0-L6yQ}oWW06A*JXa3f-+GR5K6qci!^^s( z7#KEed7JEnPD-xX7+WmYN1bK!H7mNF?#fu;2bQz5VETJunlVgEMjcCSA}g#igeUC$ zxeRi)dR&JbR+-%=?Xo+k9+;<%$E8_obF0cAM2agAiOmEjaEiiAV`YDN!m#Q`%9sPMZnzR#40O(xfQTv zT+$@;D9y9dc=V1nM8c4*A(6s2yw+Lw_GaO5tD4@HC(}B)+uq}C1<#epLLR-gI7n!hSgUeVY4y>r6@92F7>(#v{tv zMAJu(_U3x$==x&k=sDXbo3dJT_y$XE%w(Av@+gXz9o35nWBz1tOA5h@@8t^T-czU6 z1G*t*5~8N{DE0S`eL7EN4jh>8ymvLH;6`-njYm@M9bL&oo%;BH$U7JKx{7N5pU@P7 zf+rQ!A_4(H3xXB}Y~|7LIC2UEiV&?=(JD~uyJEuQN+4|-I6H>}Q3(b`jmX9Lj$8@> zElqhe!ONB41EL}XRNRMMAtDz70{wq~Yi6HUPSY0f-v9r9`OxfrX3wlyvu4ejHEY(a z*?R__atB3qwo+a~9~X@>RpiHSk9=NdPyC&yzp1UqWYICc2faCX;1G9$zK`yqFXL0w z=pQ32kB3MVU-XerJv^R$b)cJ5=wfUUWKfq+rgN=fI0g?hT9mQ#~2)=xVSr@>WY8ubzBo^<>U2 zRs(`hN44Zt)ssJ6J^8)WlZm=o4fY%*3 z{Mkw`_O+H-756Q?Z-IEN9tZ1Z#X^4H+Zo3%|*B=LwOkqAO~Y@<5NeU976=w&j=%~28EA>7FZy|DMJWfR zh)Z(ij)=wl0h;s(@gWepNt4O!UEGhC4wy|9k$pB+qG7*9hF~ z_7a-@()%}nFg>*c>1J+RlJB5cp+Kh<;AS&|m9|dY+`zXmPwf}VdT13pz@zmz&ZdVh&jfPE^Z!jXpx{Z2ul>-*_?WBaIg`eLte#VpP~*C z@HW>EkN3hAMY1#<4p|0IN)%i1>niqe*1KpBBk6$uQLln$(wYNxl@=P%LagNqAtqaI zidit7!`eIZ?>6?(3U;IEV+^KIn-c9VMe-Myzg*Zia+nZO4&`(=&lT^8Wo27&zl`pC zRehP!OzNpj>gnvZD5*D@NXRumElvv0M4~d~K3OnXKZ!7IkhaHltBa`*iQto}v={vf zXbXd%pAfj)+XJV&22U^?`_##SZQz11h;$BEx3|uw4fRdIf1D6}eUOx<;5Ocdcv~3! zowpHt)7MenfE?N*r$rGf=LsGNdAA<%7YQd3Kx3qLC5W6(H?rW+<0gb~B7B%#UfBK- zzN?ijZ(xx0^CLVD20)tW1Kp~YsNL>1dg4n1ptv+>H`7g`bz%NiU^10h>l`3>Pc2jB z=eWxCxarlZ{7hH*rM~iH=S-@}zkxp<3kn;kTznt6R#Djmu37>`^k93~`bqN1e)%Pq zEp#CCA|=K;u2VpBtF1VZFZdR=qaHy4w#b~UI4b&JdF`st^jCMaQ~G95xBqU^enHqM z<_|i%;_`2lNOUwj_+3UrfiBQ6{|Ei@8FqFVRJNFbfLVnMf1hs{4sn}_{qgU-w z#10vl2(K2G;s_3a^8UTjLDq*7$eZZ73ta_zxEpl7&*3t_$`7j?>`@M^K9qpIY^U$Gc^{dWwg`U%H3t!8oC*OJJ6)=&&0$jh`tMO=7c2rP}1R> z;GoB8*5fw;DiK~mOe6q)Y6`#u96)_20a(dFri@e)=wUGmAws9X{O!Spq&}3u+ys)E z&YpH`{z5Z+A9EShSH%oJw&jYq*xEEBH-{@N)d|75u9!Hf zP%OGD`gt@`u|L(Z0S0E)-}qP?sD{&w*l=VXLxVAo1AMQeauFlF8itXW&t6>zN;te@oXB4UTLyI*h8g`wz0%H zwbA>d|6=w$SLoXPt@or?n9=ek!z6hWs{=FtE)9OZH0Tkp2R~o&FpDf`*ZhbdDy}I^ ze|&aJkJq4*>ps9G0(`h&71k?Cvh~U>@3cYaerx~XJ<)qy7*%rIqB7y{EsN0>U;@vm zHJH^*AAb-F1)U!vn=!@C(OaW+X`-ygHC|E#7Y@DM28J@jZ;mLq_ti63%B0ng93EuS8j$NomRTWa zL*12qM~({|r66li)iUp7Ic_G@V%mD(~}ML^q(c zPO7U29VsOP*H?Q0qO;!K@Y`5znjIHMSwe2E9@*DwQELgE^DLpq9vrCSS9lx?7K{>7 z^b##6MW>-)7<|GbSY`(j=Ps+;Eb-L1*a2Fk2gVT|;XRKE5I2e^SG9p|J}cJY0D-bN zeLMO#lZ7gRMIRGaXj9?GxX>9hC7~{)ilbV6dpCd)8>I$p6-R8)6iXc3RT5)-_xN{_RY6; zO5XoEz)&{I#H>>4ueF@9)-BJbj`a+S_#F1>!5?mJ3VLUvQu86)Leb?_FjGDk{${_PVqZ#iF1Y_y=0TQycYQked3xVl)5)V)?z1(*(jN17mSf{A=d%mznJ|(U-=U#4 zuAwGXl`8_@qUj9GZKEW&+(wBM-rTwNYPh${BDHU{Z}daWDVE;Uj>+ALR;NoYBU$o( z=jb4ACCa)rQ?{)=T!@65UblRD-{)DUup}Y2n*pc6M%cFg@Gba$!z8kjn5gA0cv27E z-}+Cf^sT6+z9{Imk~Uj3_q0(nO)}}E$wFP_!a+$=Z4rof83++Dr!o-EB$&u)drode zt!ZcXXm>J6o_R5M;4jlp|Bdb)%1fJw9-f{`_ssG3thl-5ookcsJdd>$`pulBTM0N6 z7%1J=PrF5Ym1h1L!=#Y<3ySSuoF!xSBcAq$M2EQCeqLzmm2EIIW@aOWh0#R#1^R;i zIs{OrQOt_w$P{X`?Eo6AZh)c#TlTXKRJM{1EMg-R5L&I?p3(DXkHU7*c6n`XMA*2B zFgKLz3$ea?(jTYMSD&EYrq_2h*M^6_QA4b40uvgy$OlQMF;}l|5AtqOKVCUqeT$q1 z1!80%`RSvAB>eO)_h$gjFH*|RP&RL5T1gZs~DIZvBv53;-V z(dc98g4SXpU~QOnuy%-E4=l-{k?4D6nTDcADt=>U#!$$Tj)f%@__%}6YC)j~YBH&{ z(d)GXx;EO0jH6u%ht%AWgY>N{wbm|~dmY~paZO>D^RCIr+jkLOFjrflO||D1+H;uN za|`X+Ct}m1I+UC3gFzHZYaB{zs-d)|E49W@N>V25+F>7&Fk_5Z`twJn@*nxflIWy| zr|Hk@-aH-u1Z~fyPk(x?TwB6Pz?2N_DjQ5s?G3DA{VO&MNkHekPV7AhZH8_DAiFk_ zG`zu?v4WM>l*rXE8c@aUeQn?P#gp?&l%ZD_D-(o z&r6*@(uxi3s!RTZ<};YmJeT2Lf9Skknlizy!Dx`WJZQe&RCL>%X&PFe`VWf9bkZ~` zQE}J&)Lku27}h0kY-%(=z}j%8NJL_`>2lJ?c^&5&qOh+|Jq-w0QKPR8T!qSMw{@j1 zrcYlNy)&D-T&fJ0Sf(zH^5V;j%LJ)xu@&2SnKwSaF@GKnOzvUpi|{+tE*Ixx{CXpn z9}iC3|NBhW|HeO$PbYuQ+H`qm-)4oZX(63+K1I?5*pF+VJv=i!jAE$D?Ut*pFI>P} z$yBa&66zk(vp?Jbm!gNbBM3tzWx_ibgSaODmc?2JxdmtJO9tI>;}8GKA~Lke1cN=^ zj$if2et}x&aKgnDH-dDo>GANlPimBOp3P@tsq>@r>8v3T(<(ChdOEol&$z5fuJpQx zYtb8KrL!l@s)IA60F6?kpke209u2=w%?5^G`XFa*6SKvZ^61fOsm0I#g~}&X;tG>% zM=L9xq*6>mg-R#FZKa9AMlD-aX^H>CavKZg60LV- zQ+F|5!t+^saOymD`Mx8`%ZHLTOoq>zGmk+SW86TYrg87NzCQIhW5JwNCWaZZaDa^r zbGWPx6aOH=)Y6LeV8@2Ju#D7(#QM|&HS1Fk&gA#F`~BB#)~6mL?eUotFIXQjmKa)f z(JsK6i(17TaNtwnI{>aBn3{;TiT+ID1c^tG82x?9`ZFFsck_9Z^Wj;0ZF2lzF9J8# zujfjd;R!?>3wv|k)81VgWj9z4Il3VN{G;{F={6B5V z;~&`qdOd5IrqJtG)6%P_;YHEwM^@KAonE$IIubPfIvw1T)~4YL**4xeP7|mXn?ff4 zW7wV4=xREBB-nUlFu8Vnx-}it?j7#JaT|t4qh<_epE7@AT+3~bmGd+!HYO(UGTtS6 zGu#JIW-rU%mAa3SwTt--kINF3yo&kiKIc$&pE;C`V+@ogpBmA5*;hpS@tcV#cqHuEP@SJ;3XAOoPqL|S1PK2FUWl{D-#eb0Bd@50>=oVovE`zk(kS$t%M7GKZKrrFuXv6L9M5q*58N0$i+O6cfaDnA>xO6WZ%6(e&cAo0FaAA)s-CZ=1IZTh zJxYaVf^RU4cLQI7whc1%epF3}4M7ed5eozt8Mk&DmHI4ykOWE$chdA0tm8gf9mreS zIn=Ts(npbiDaR5qttW4s2s1YQxG%({_X^xyy{~RO<1D^$ugo>2e7!_o@TGl$5oJrX^RmYdjpMMKp z2wD+AO_K-8_Q?Od@kQZK%y1%5zmt2wiD~i;`MZV;U{H~$rxaO+~WFljcW;O;5k5*hSx-1(3 zp?XX&{b(_1C!cf@Nolt&;P&boXk5rYtz8>|rz^jBIR8SY{BY4BDaz=b4=wv}s@*@` z!p51SH|1!UYwND8FKdltN??)nPpPxxg+%M@=rD9RQPU>xPP3(siq!G(1E=(7+trGW z@mfvsov$H7{!RReZjJM0bD`#lz?_R1;zQ-mh&!)v|x|uC%z5kP&=~`mG9k z{d$a^vh9`60gn`e5N}OH_nWeyQ7t>S-@juk!EGb3X3#2#MTmA6ntFqb_|Jan7=W!2 z(fNp0EVOdu?N~?e<%SH)X}f7RjzV-$qm|@JMU`;Gmsk7dh`;-*tLX=W6XpKXi}1Ka z4$ZU2nnw3nqDQVXzM)o5mN+Z(Xi(FJ&4HRXk!qPfGE!86`+N9hA98B~`>&3))IosAz&Wf;U zOOfcu%w%KefVC|rM+ZO*qXPSs2F^$`Xw3;qOXbhj0G)Q+oUST!okqf$)*|9P8BmSq zWcnr%L;t}`N$o5#x{GP$;IpIzbLj8=mZ-+CmP)aD|G)7wn2H-AADuKFeOOpv;zr06VH^p?0N#mp^S8!D|62mUe~qB;+a)k$h{ zJ%I;I=>+96|C^2tOTcjed}%!>3xQD{9((NoO7(`j0UVy^!jTkPF&JL-szNK4Xadve zEDN17$hI$D4eJmhJLt$-xc^&fL;_C#dUbs;T<8k_h;~?E)3IWNXBfhymz>Y>{z4#> z0p)Ioa<4rmDmBgfh)?ib%*cY(TG)%dbCTusF*iCYBHy!7RbVMvE5w5xm~p+J68cZ-@_k= zl@_DUu*#nPPSHZ<3^Rhpr%c$p7YUj&kbwr6g;ZxuSb&@9xpg9W!)RD*Wa-pAqFP$F zi+0bqXi`xNzOsW_U>^(UMqjZ{=i4Vca_E|Dij8|Mv8OMw-cnDok0C>EGabfZ8yLry zs($03jgDDPv`H5UHE{25%Z9$SwNh07c`h3J8i z*Qfqc^A!JD_lp)&8zaS*;SSRrcBy!HBs;s*v%S`{g?vsf+)SeVXRd4EA?9h5`hhjD z7DvNt1vz~D71qQb#3RdqKpKq>?J~4Zbm0{_8eZ(i!1q+#<9xj<`aM@Pud|E>@+z0^ z2Ww2VDeKdAkb^`FO6S+&NQFquwhm$Mvi`F3m@RAq;VzJJU~hn(R8&;D8!Fvh)B2j| z=$K;3PTh2oe~3RSWc+J>IFP?c5E&i9eOxbG;R!N3`l(g(!1hLvD+<+kIK9xM51LpP zrnB{7v!lr6MiGbN)voO2g|hiG98qFKTn{SZ0X_I7mBcAq2>0=)1mUVZ*y3o?T|ihp z*dHF?D(x;*T7j^2VmiC1F8uaeO(tAgg7HM1wf53N;rxjnfEU`ri34mcbMjr`}{DXFXN8E<$ z7`n)4_!#VglByl7&(r^8rSVw6-ZZY^>dsE#-A3N=@S|c74RDrxVanxpO|T2d8F;q( zjQ$wTaUbC=d?fzyut3FI)V*RD%U3cV56YNczQ5kc;D<(%i)~{%9~Oc`STaiANs(}Y zxI0KaQs|?x@UU&Ij~;=bjq>i)jw(I`+WLsYdS&N|;fsqA=e`@B1w??YF9G&A{m1-U zh~{R1YC^2+`>=DfAP*1%)#v`$?TshrBwMbf*PC&Rxv z?a^df%X^}KfiMz1y@kUWCFGUi((yZ+(AJjPXosj5Vq8u$mYXKhAKqPS^zli2yrSge zb?&22D%BTl%qUcJBK+%ta9yW7mrDBIeb;_k_@C9jL$5{9X*9c?l(1aeSa|I_YUB|0 zifE^JDABOdj(IgLuZdnCMFTb9#gOev-A%69(ZO;Fx;ug_%Ct@LaOUgP>fvkB#S$# zUCy6GjhV!0v*Y$UCp|0I18)D8;Q)&ekIPs@I5ZE2ZxHBNV5 zx8_r$i@XjB(0AtO+I=+85(66YEc!C1N{Ulo6|x)y@RA($Qwg`1a(HiH=A`^g!=#MS zpw*`mQ`xVALl;(NnX(^}wT&c6nArZ)u+}8pV^TjvG7VvoZI9^9YZ+0A@Yn7Oc9O7> zuNHapRnq)LUztuINs$0mns@Z`Y95OzXK0x+-sPo@;JaK?Kf}KCJMwJ~gM5sCOviHO z1`5c%BHGs^2%CZi*_?ksTrx@UNLIJ_!7w26yH+-Vd^a$EYZcE=!sR1r{0OJj2le(_C+Zl=Sf&Qn?^D zafhyd)jQY0y61(q+cTV6rP*MuO$ncn==Iw*?qqT1*7k?@paGdo^H*qWZ;@*lLf!{R zBT4@#YOW~B8-BTQlo4KU2tmBhMHiCUu=S42!^Y8*%1{`2m4i@pK-HUPnH(JoyB!H7 z7Tvgzt`?1oF5=+T>E=3TwYy_B(ONK@OOfzO;|%9a9b*)a{Oa{%6KfDFZpzOFpZ0?2ByE$Jg*&7eBy!tJ@upB}$Qid~>_CWCcvSG) zmCB`tHnrjAH(z3TbYgU3{&Pa01ijM@y|NB)LCIq8CbX3bTj`419r>f-lA%^b){H&# z9H!mke9HKlYswSeUs%q9XJ8r)ab{}l{GHFT7h4B?COR4jJ0{>yU_|S+ z5k=LuGoBj2Z9m&~`S#D^WRR^tMrP<7%dMd!+3()j072Tm0tcq@N=S2pyJ?Co-u14&Ex7pcRm*p=9 z&h)fsdAe*qtFqX84>?f2I!0Ai_iP6UgX5nV)t0WL-9w}EaN3ysV?fUO9>J!m{Qj$GgiY%J={zao@f=? zofYZaY6;|<7t@tq$~n*F_#`SB1Q+m9WWu9aS$NTtV;wX#JfDZ!+P`U#u|5$@#v4{i zufUhvKMMZw$OYdG6ZD39g3f8Cqgd$1=GyJ))pim-?s=-!Bo1RkYmG zp0G}bi&K-)mGOA6{vyqV*KJaCp>-HI=ria^pEU*eQ=6Jc4u>kV=lBgw7o1e*`mdv}YZ<`m8H@V~TiAY?*}{K7_ZQXv_c+2;Z@;mD+Vpa@zYO5! z+K>HgYRAiJ#{8$jrHL=QO*(rNtYz#yv_p^eX@Cx zG9KRkw^9y}lv2+kRp?o7Fq44~ev*Cl1^^ikATJ=-r2GEwNUA z!k=TX{%>5Lu`@*{Ous&QdDmypShv6I>$AO{6o>o|ug_-4kU(_5sq3@bOyc}g)@SoJ zRIJaoP+n=x5gu=9;ERygADu>Cz4o!v(Yh(-YN!4!l-GCswG`myBLAh5>wc6W zUNxgI{UAI#ZmnnD84r)>vBlbWqUG(;JS4?nSJQVgP4_uDqWM&g5wn@Kki3nvy>J_l za62;kNLT9NOzJxX`{`&KpWiY&+8@y~6z&S9O9u~A#K5?Hq|UU|!;7iWFQ=dQ&v;Y~ zmRz-&Y(VnP?BMJRvmd|W)_L2rq#}G+HqaX@+T;yQ_XSN?WiyA_@4mr3An(2-9g};U zor+R|rB!R|RqUj8JhaEJ9szRq_D>ktNxn|1u`AZ8Fzs#6w(AX#kRWx5+NoW`swRM+vLGVMC5A z15z^Ehjv*~PM{s{(w~vA~^6MNWro zikh%vxr(*Q(kjApfr~EyBV?Pda@P-Pr2}=6D{rLA{I6ASY&V~*weUe$HY^f@X`~lA z$ycoG(CAPLAEXrXe-E#+EbbU_wr9E8Pb7Lhbei->im)OHvvc&i2v#nFK7(@kqb<8H z9Jc`$N)0X@Zco$h!xP~bV63Hs#)%>_<8Rt7yZX%36>f(DfOYc?MHOnvgxiMcLK!+Qa#anzTf?c$xW}wGT>u5ppWYW%!*;% zfE4~%yKQlp2OURrY_?h}w{&nXW<~e*lLo8ti?dzDPN(_O+ifGefb{Vyp+)qWy%XF9*aJ5BV_^LNAbY77@qZFe%^$5R%@yNQ*;pH&ch8l`kMOPGyj#*K6 z-^WZbns(ku%jVRQAlJg*K~=0_$K&jeM;~`st$3yesD_wg6nn&yolNbC{IUEIg9%cn zVCdA|2j3+YjyrXnRI=E^^Y}l=APIF`{!yxmZYk-YDr2|pkEJ|PXDn@2{`JOy_|0J# zE7liUeevOq#rowV!)EPRMm*5oEf0xo&SlU*>$R*FR?Q8xC6-V=(BcqLlloS0SV{+9 ztaoghaOmmb(JSes{J|tU4mscjS{`(s3K&hDdqqdZ)ZRX(_6|jAV<&!J36bh4TfxPP zAI9=&-~!{tA{XRykjGVOff}EF2*aJK$GF=1l4{S-f03%Dula$8RI?x+ zpqP?D=Lx<|o4qdd8Y`*nr8rZ4BL7>K93E%Q)WSJE73Wzo&O2`<&ih%-f_T85z~=_} zEya0)tHZOFy%cAy>ht>)ab|oO&W%%X)=489OtZHV=d-P5K|J70;1h{`OL0ETN-BFP z&e~$le@@XTOk`PPThV#mRGfE-aaM5RSTb!1Z`}Hzs3nL8?8xj8bRM*&IA^S+vX|m4 zUdXS(&CcW8;ORWq0D<02fv%EiHWRK!ppMx3vT<>J*^!)zV18S3MJmBkl zsZINnpx`Tcq;sqCd~(!O{;Z|AyA1Pyl{gp?qWJ>kK*NELQu&WFMB=kX^xN-CY@ z%jWJ9q+A1kv!>bxoqOxujz1A~pZCE%C~o?F@*<7o{G|fx%bS9HsLf#nmwmf-GRsKk zx1O^WEHE42 zNs8AC50ntQitJzU2W0cy_5m{6Bf#05h_L59H6uai&c33}_RQ;5 zO-xpm3XHf+91Ye)f970^AGfB;B~+EC`VM;cRIlf~NcFQnATy=wt{#_78ML+{M2Z2? z;>v|~bbIurORU_4M7Qj>l&M0y)cu>I-5ZsI9ca~(6J&M>bkj!G zSdeIoyyusR?LO{X0j^HJkK?F~ktLmN7oYNNT)&vvlbv5dQsgh^Pu%>B2uH)$Jv1Z8 z{hEBG+D7uCaXL7!P=`K$$Dr1hGmSCXJg8vIdDbhd^$6cOVT}1pKpJD#M!QE{zC`#F zIu@?f$0Aq$DBCFn%==CIZ_lAMX9yi;{lvZVK~5u(=9s4K?ncgjQTVTWbY@^Le3Z8Z zW$aP1EY1x9+OLemnGAG(#vOL?^c{Bj?>5(AXDJ6NsH(^bG97jj39akqKVpS= zu?Wbr(%rzTc|8N9eyE6?*(c)pClwZ`SQ2vOFWL0666Mz zq~I^?ImN2i@erJVI-UBac!$41uIG0|5N2~?Ij0AAJToJnYPN}9>sS)YF{(FNMA0`y zhsF78nNd5Q*)7h0FefIa6&m}YUoeFL$RmC%xcVwWc8dpm6$_#dSMXlhe3EKs)!1H~ zNsj*gR?Q^Wj0p?XwN7GjNfC!}e)f~@7S%!S2fUX^m0hD@~gF9@DpCOHUtZ zec2upa$h{gra$?o=z?Ac-=XP(L}riIyd{di02dL)jg z&)jHHvDA=E)Ya-~#^OLd(Kn*2rtgTmepMJyT41Zr9#v&_WDIR=ID13D6Z<(s!2UY$ z6*qJev?t@W{ZId@bN%n5G{%rQ`2jQp_WLbC3agdr7*vZA$*&Cg55Fh^Lt8deTO$x4 z$vCwaOl`;PZWaLdsl)=1w!AX6xwmo)fVK~DWt+P8$9I81n7;cT~dI}oL#AKQ1o>zU3j2h5_`VP>A%PC+wb$|Y~OA-v5DHBSfnASH4!ld{jh;QIE}cEKt}eXf;F?7AC7sxmAs>h2uQ7*BwO7`g8@{*S zm`MtI<#Mzmiw(Yn7bl~+mvE*`T0!RrNt68ixE&dVX_U!np06rsp36w{pV0cwwO@8S zLU_Fb-UgljLQ+BV>|w~OMEFhy0kfGt(xbu+-;y6qKXAUx6;o(j6meI(tXQ*(cepfh z&QW<|7l$HvbPKM#1ffDTEi}^P_NnAk6OW5N;W3NbQYMU?dDR^eDvG4f|FR>mzg) znpU;C`);*C)drnc@wa1*{_Z}d0sW-X06jL*fMmx|tv6L|K?C{>o?Vz!Y`}H*Y<&Y> zMFTvIh!zdhz)Ymje9)n+M~rf9VL345>bFPfa-dPU-9}mXs;w}NUHl6}!;0rl07y_* zv@%DtoB_ny5%SAfqGiqOcc|HN;N9Bjv8YiozT?oLV-7!i%p7wD;JL!h%F()c%Fr>n zQ*!0EH0Hk{=~Ox*W^7_aj2ht8dW2VV(2NoBR^AILp5j2ogJLfjoI#=Q#X-Tjznn0k zHsO%1?WF1i7|pgs-4ETMH^VI}+%o)$?gXgv+kucU^Xo#d0nYM!d%%D#JRjLEIOvPO z95DO-lukskNqjG|fLHPOLQ7A%CP!(tm@G41dexXbV~h&i(~ z)VUt8(OL^6jn>U-Ssw>Xwo}{u)P2raRFrfh zFof40y{LY#vQ68#y??I832S$GceEs~P;aDe}TBACbYu1 z=o5McI`-?=;fGQ5tb?M1@*ksmid$+nr>uVEv2&(GdR#?%%;@((3+1~-Fv3r0PMek& zW{-#$1i>@LUD8(e?r9y%WU_KK!H{0%bqqAFR z+iYW2;9igIu>{0-!=zB6bZ6cj26Sfvi|qc}J1f{d>Yl!R^M=(v)oBsiGQ4>D+Kmr} z921Aqv$Yv#Ovyh74G2`8U87`2$p)t7%7!}<#4M6mC^VPll?B?s`%tNn<=ak5F5!{Q z$-)-circAf1Pd1y-iEM>_u@*r+z4aky&1pE2va@{EI014@XTT2_ck#86{v+7+MDrJ zC~Suh7%ci;=x7;Xght8YUG}OLlEiLXuz0`uj?M93FFCSi(8%@(a5g6*I5YloU(se~ z#Zy#`(^m#8Xlxml)nPxT7>MKgEFc(^?-n=-_f8v(JkZ9D6q z_AbQW6eQIOtn(S?kc9bRkv@BY9Cb&HeXdsPLO4@(Y!pvq!{X^ukDr5 zTZU6QVUvhjrXMItK;mFSxkD}P@7XLr-D1iSfQ4wO-weyORHisCk6d3lE;IQvv|pFH z{7^#)seg$4@4brRO)CW*lxmAYuu;F95IitCP)_`vmV|c-lm2Nf|G!{v_LkhxgO?bx$if(3V^b6G%K%5W)UbhM2}qN8+GW41Pkiq z%9D|m`A_qQCXG@36_K-_Pp(zA)kXwG0taSgl7vh)lJiknM`n>WO- z6I{7;4r@-XsXx4S2lHbbN?>G|AKgXfLN&)54C`f_sfVP&10ZaH6{M{TbS(6{Qn#9t z@|tM3u1+p!LSadEvOcFd{E=x!i8{R(_wWdM0;imqJ8 z>9k^;URAm$T^?T6Z%4XQk#!h(97d*wKsv#ObOwzxS&(it{G@{abhL#DF0(kyNM}HC zBqnpXqk)O37eYNwRc{OrfuEqB-b<+W=s^T^6^Zg|td-LYtqF$KL~&?60(+HfcwYyM z*_qsY?70o~%#1gl<+6cTE=Vuq2<0z}=Q%i^*@*E8^PoE*f?Z_{tDHJ1{2(?re(M|k z!av!Djx8pJB!;mG@9{ZiNFuZBUy6k|pru5(9iDnLKOaJfOH!$Xp#e(N$bcy-oAiC9kk(xTiis z{|=}6fSWJ_qnikGZd0O}01P^{LwS&{bQd0{jQozBt~Ni_hv0gz&Y&XTahb8f?GWU& z908hv(9aXa7%P}5$EiNJ(`mB=0p_dd+uTdf$6s zYAMR;`9o*#AMLNRLCy=1buYNtr43Rg0%D+ar@r zD-Sr|>QLCgMqdZd;`yz5of)+&F0C*@{E z^rtovFrdR&=*e~ld&Fj@F{F_MyRGofE*z?3q>qHp**DJqlpm^d1s{|cv;WHQ``;FC zc7zi=47#xwA8&T)&8`QG%4Lyb|7r1N|9%ry{y!9N_Gs`ejwi;e&SFa*@X)RhQ(GL6 zs<55oWx{NxZN}?k1(`4&p7~Rg36Ht)3a2xEbXFwc2YJc$-W(p8aT9*MiEu7|fb)wI zIJ-GG3ME)F?x*f&^l6|M;te52bwUBmIiO&Z46};AO4(n5tOA;|bQ*+li)VZ-R}X8> z8gPkr&KN*;Bp_`Q7h_&Tk@U9s3~H0AYA2m{i>{POYszZwmK11+8lo?eC&Tx4Ep=>~ zvWb;xN?%zo>jVauN?w19I8>lG)k#?_ekMUO>EP+`KKrO+pH1D&NCv?j^BfC*|3(`e zID60Hd^1LD5AfSo#!mcAqGo+Yv*6wIF>03HQL|zaxCP$~9VfPRm!_A^D)2ksD15!c zeQG4Xj(Mg0{4d}X&jMoo51m*3h)sR;R=H?(hnZLLu>{|Sg~5pU<%yu}Pjp|%WjV}N zlicnh3*B06frTd%*$+N!m>U1q>0_uM)-!@*UL0zc@Zbrk!23D|KtOEJe=okS zvEJVboTj@CrDnJGh3D>Bldv%U;7IE@W*)xg3W;o8y>n^uM%aY7CLQ6Nb6y4WbaOq* z9YS>@GR-bogc~n~8y`t>7tr|>jFTB4;rS(;;)9X-Xev`lqeh#|Map?i*rM@*DD13# zdkp2yyw2+ouk)<0)Z+y8B8`IXAP_0ivG8_mZ8y$p(R53cH^-6cTIMcudNlFcW1qc! z)a+Ied#?3vD^6*OP6(-BYiVLSiLI{X=gDW$~dG0_T!Ya!pc5G5XuZ%Jb3vJZkPT zDi*#r z3p7#7MQy%l&lNCnvtH-qq5G{&XGLe(c6K4hYMbHwwM#}QLfufOsj%>rBB^Uy)?C~= zN`Ukk3=pK3)_3MhILMQ3*T2Sk_;A1i#S>Do&;zuhh*2l?mCBpOmye$x9gv*b1V8Uc zy)QRE@5`Bm|4aG#fgg(&|KIWRvDU2Oc%I77e`cm&bZA)kf&b6t=hf6#%FoLgD!o$v znJXBo3M^&AM{~re8@k(Ub$p?Q?-*xmI5PB!FLW9E6U@KW;tQSeUF9|F3gSY;RvPuV zY1C8W3msxJ7`b0ue4&3*Jf*qURpH`6_( zT|2l%3;xu<8Txc9rYpJ@Hi3Oi`oc0q-oFNnX}Y^^;Xq~atHSZ{JY$RMT^;*pJ9v`V zM3Y*~?J`@``ndE|{bdQr4LP3Hs!g%xv~ht6ZvKh&pRdk3oBRKWBQy@OfT?jngm zK$4mKZX7UOun&OF8~zHUXrQ}r=&a~p$uL3TetUA}2`&L+lODbmVSu`O6lw=L_Wabu=WCv_K|8{NC_hF{wg7T(O}~ zDnQV)Ob`o~iJ!}_V=_aTri-CSrv0IsOw$#ab@u!U`tdGN8j++-KKePMH<2fV2AyFJ zFI}mN5mp8>i!Y%<;IQijGvu0k!*3sB`?~#!)kVUtJMq{Cl7(*lCCB2DWAAmOF;JzVzlfi9bIBHMH zMW^*Q0t|OG{VCJ*1nZcGvEEE{H9e7GMFR)(>q#O?&|y!8@3u~D8Z_}TLc{C|t9zGn z58t{+>od*I0+go3(M~JJS1eze`)EeSg=6KRedAQ``qT~I1LF1H`yPrVN0pCmO6OA7 z^QE7EI$SZLMJi93OZ3FHV$X3sZArGNi>_0B;MMPT2|`og(z(_!tjjYNg4A`kFYq=9 zm4Q&#kuniJf3?XiWES^AG*1MxmS&ruTpFBQOINj1oko-S&2V@~8`yllereGBY*+IQ zndavpf|Yo#ti)9P%&$iqGf0HC3H2mFTv}#D3>?JSZzaslE^I#^E&MFlm*f3 zE{<8_4S;TkJ6P?keBQ)o+sK&n+<1gFM@#&SDyc`{-toj<#+ec~)aw z2d3zh@OR&`aj@8ih%?wLh^h?*`qwO6be$Qa#y!a#CULND8LeZT9Jc{m{-Ay{PIb&B zVcqUF$cMti{-%-W8ah8Ua@I-tHNYgrnVOtMH#WVQJ{}LdEiBnYkt2TuRaE$2^wB8%FVv`GaIlCsLR@DBF3yzS zItu6|#Ib_H*AVU&!u6V~c2l2|mil&o>Sg7uX6Fw4drt{DhyU1ysns(Od^u6-YrVib!X{ttS~- zadIheLojUrrVYLru`Md=?@wQjV1WnS+lxerzuoaQYY*aER-Dc8n<=G?QQdu0**}9|@08a5@UsRLh?Z33w-p;2QAiM! zsH{V56r-|^*u%neWpWSNk7xNh&YK2LjvX_6OKbV-T4>v*K2Vi~rrPKN4eGp3N4Wht z?_er$M|g^xSMJW~td&}SWc_wFNRq1#LO;nb;7^IMmoZyuEq;5iNMwk1bsB~x*G1cn z;6~^*W`oT2)PZVv;t?XZB_&!uh#*%p*>P7MHsLjMg~xqWaC15X2F_|QbJ}dam{ju@ zVQ5x%W)qWbZq9QuSfteW?$o)V_%sOlq~MC*}fXSH#+A#VsU)XTD~dzO6zg>E>{IP zTk3>I9Afykkd$ayRHUyG7^mIgU#-(Bh^yJuO&RTe%EpclrGc9XEnp zM{Asi-#y%_W{j6q?WUCnzB0A%rXTDTwD3bdkHM?Jt;H8^Wy2Usd{& zb~CE3SlQ5E>^HZ273or2v0moJy<5MYRLA;tx9Cu~UY%K(A(E?V84Y0{@n8P!5%fBA>3eC}QXFYwCCkm_(s~x1b9nsI{3UPerpo_^{3Uk+-`HO=wwGwYH}|5tAtwrE zcl5=rx5uu&%sN22SvL!XJ~{%prS{l{P1EuytZkkSqCx0cC&{1=oZ+|+*m%TK@7OE*Km7LAeW_U!M96F0GS5mUhR zho|2h{P$im{ieGwq?CR|$AN-=ZS*fAe}%ocw0!JtQR0vGlKZcCU-Br-KjwYsVXk9m zV;q`jZ=29vH+w_0@pyGAyQVqJPFm#el-+Q#12Ny@YlSuw&;9aCtdoY)gG{aZ@51!H zBk7ymJ3rWDw&2Iw1*l`>Fp?VUrpe4DIc33*t9XCx>8b=0OExOgW&m+vb)+*aSxQtX z`IjunPJ2w_4&~5z#jPX%Ybo~S`cpge97c!ksq&@dz8JKiMED=SFuTsy-xqV;rKmoe zxG(04TQ2b!V95Bk~r{Y><1d|raR(s^^ zzMb&w&ujC-9|bh$?>nBWH`lT|o}1;|&vJG->m8HlguApVv$v?}Af%a=Qy5Rx4dfv4tKjvHLjchux;?}VNDyWVsc(<|0F8rfC66M~~BIVSA{WI^L zwUai_-7h;1km`+y59boH4yEj2a$-bF)}|ru=x+jzV3_UFpzUYjLgAEM?JQ$CXD?*N zMLD$t&4bn^d9$QOEiSI+Vi$*>v&{Jq8#S%AOzHvMT*~}hdiiq|p>XV~viZ4+F>oK{ zAPB4Ko}U`!u+TenJjVhJgUC2~H2?6E_yN&YAd4YSY*fP)#)2$5mj6|Xgi6ci^l53f zHZ5BK76-O(;Wuut48IBltQ~WrCKQsG3~Q7)!o(nVCK|xO;_^+nVr-5}3w6z>s|0a2z$L*)`K{W(2MFhG%0tZ9~MAw6W`!p2+TE#`SU8xEBEXqc|0TU~l zb(q{6lyy)Q-`-U#A&sF1oct21EwQI>_4s@0vs*F#uKe7KAAf6R|6eiwuH^>X!uY$B z9|gwS-1sBXj~joyoc;Rf^`+wvmcF0e-3Rb;eRouPEq#?Cczb(U4_6t2S1ZSs48eU3 z|7t@}Tv#y#v$YupAmc9{ei5Y^e*1B}TU=-Z*>mBdi_ItJiKU089!Rc~?}o+L+>!w} zCz_)hk4pz2t_Tk-4NlE$!wZ{CJ7@CmhHInWRSd%4UsOH_krfXtMXq9={|5QpKs?9Y z2wW)%stm+=(Yy%tymTN=L4+!vpzj{=V(I?;`N-7h=M`h}C?PiOqGsX((aX>jxO@}% z+WzlWkH@8-+KTbG{byeMczm8KCrp=nS?9y^A@~rD_W?jRKOer9OF9bUaXvo^oVeNX zNG)$FPvR*m1WJG>tC$*s3h^#UxVv5$> zE+vd5pPv->pBrylFDS^45CcyB zBRmWD2{)j25nO7977V4;OPh_kRD z({Ve0<$QjHD8x2~`9yK1CjL+l#@_$K)gQD{U-M-6KJka;cK#MCHVml`123diIwkL4&2e;$RDCqP z*S13aQP#rIKlXXzRWv(ET$n|BZBw@_cXNieECNvShMmuXQWNV_lQmQADz0$EtqiT8 zA1KRSH;eR>7=HV7Q(;CdgZXY~Nv}^@(vK=RXYMe7PAip_ z{Q{!(Frf9*DJ6^SO)LAw_SR!YgTQ&d#K+;xP7wae%Em2daH49qJ-j!GH!t{$gWcJ< z-CimFbb+=4*%Hnz)VSQ$=!IURgS6Pem5c&!39s;90Da%{gmANbJytllFTL(BH8Pmja9Qu_3E($&wO-bk zX<1ZLVKeze^oi(Z8fSpBYg9b^*uNTu8(q!w9AH}QFBWE*4?j_XRjPwj| z%sMdr$tRZZ%Q4#L7@RmraLAqEgvzj)7>+|{$-MEcccm^%uFQ#QV@5UO#xA2Utu@Ba z_B0q$2i*g)F$~$w0Ieg)pwaNFPtz0b)Wd`H-|M1g+4Wber|3MD3oky;+NXxCZ=4OC zI!B>U@`h9&uVd;AsH*&dzbeS0JM$~lH|!~=N2llCBc69*xXCU6=o#boSZy$J5{kIk z4?zWYOOC5x&{g0_WKn=A?*^zvFH{8t(TuJJYpXE3M)1OW&aKib1Fpg$d#o|gpWL{_ zy8Z3R8|1K3+5tm=94TfEFEEg)b}u{IyHc0Q!t-OY*upZ|d8(Y{J|}0n0{4!?z2o80 zM5=V$n-M@~J=OT?Hu&DnE7$9OdG77gFPb->sERskVnto3S%_yP*F9Y0f)%!tw}MyS zAH83p%vT$j>>A|{e|nBlMY%n|OkG#gWyIlul`^TzG&)mHGqNfhc_AgNkz9QG?&xPF zs&p0e#6HWZW!lB=403dJ3MiFsPK4e2S%ZL6kJ6&NU%U&_Mj51jW-7{!Wh%-FO}5fgibCG0C?9$fh%ZG&InO4^O{yrIYAR7tmS$Ut zGt|<(&7cCv7tPAmRFvC4XCy8cKa&g?gvA7prNMnmgO^`L+3gc%0=^m(@TJL>UlQH^ zP*hSdcG{huQ?-;EE47p-@ujQKQly2IYAFwC&T$Gxsg`nMYHPHVleS(=|4xSgEPZ@{_(JtN<NvRx&!^c0NL`JQ{8Beq z38q>y!IiZ4g1Eh=wEU!G7OA4NEdLk`H0?ZdA~|4MK~?3OlWThj;HFnzMYZMH=Os%j z<(d=^$u&ZRl*%Z9hT?|Gq+LxtnRx2xX)1cT!srg4AToro{qZnCYDk z;$qivh|*X6>FCqZ8qM@3Dsx%^AoyM9mZ~jFk0GG#(qn?!Tl97*Z^zuS&DN_fJr%0U zt7yO`diK3w=+u`B@?YCJ^+kI+-&La=0i=_#r}LEdlz75kw#lSPfHrwP%eNvJY)>a` zrJN@7nNMwwW8QG4ag4AP$K;<=>1lcF(KD=sMyi!~Vv?6i|C^UzpLxf7wqBpP`;-^2 z&z#ORUU1(Maa7<>@z{Mq{F*BvjOD=|W%iaFYWGXjXC8fqqZQ@$mhGMu)Gg6xhEtco zYnxSQ-gNr31HY)y{19ZO4*Xc5sbX^RyFE^&SpYQ{`sw_ag;S-;<(`iV2~%m%XoAi+ zKx!=a(q}C6eS=8P6*?==)wJAdg2C<{FIZeIi_{M?pP8oMA{lATnlL#KuUYHdFTY5r zcVN#-a|KU3^;^*@=9U>{x=gn9lAvX@mT7@1OE%<|Ma!m`TPBwob<1UvtHyMh;Jz25 z$^5WnSXP-FPWgzo&8|5#bxCq%Mg;qn5zJKUtkIUXnigL)wh#-o+}85eM=G?KQ&~ut zYcadJ#!1qaXfbpkWFIrpGrg(hqtQq6r;3PMWomKo2Oa!rb(mA5Q=@N#b7*;;rR8I8 zo-6N=>2w&baV$5quoqKiXnBo6EUGZs)FrlS_ycN1>L*uj($4bxFy>jCrM6CcIW#&n z%FvH)g0m}qiguP6W!g(Qn=XzPN5izC&rzkDM|kp5Cj>0XKyrgh(|bhr9iTIya}Wd|KePL}PjK$!dZt)>x_-TFM01 zMNgUFngcIY8d`Q`!i>k+J&3hDvKbM%#Tv^N8(P>dMqhaWb>$MYl^1HaUR$X&v@Buf zuGXEW`tE#Dc9tKND=LKRV5>dbe2MM58wWXViaMv*Sw=MrP0Je>d{De0{NRoJt0lRo z&3~fh*C15>eX+Cn{hvN{lH1VWvCJlJA4-AkVt>BRc8r-4Y{!^kW;@2+X+k=ubF0s# zO!!uGS*CaGi==a{y*DodY{)+nI}KV{uP8 z???G1xbq^Cg@YnMOkhmqRo=ba3vK&|tz%>XwmcsQ;&ORiP2wQ704BrZ%zc6AJ-R~L z;z!`6kZql~iTN=RUPV6WRE$wS7@h|cp;jwK{SxirGZ&~f=SysBqVP@I*KoYtWte(C z5qy_}XK%&9u@P-&0A>^?Y^(_p9S*e;lvv!yMlP`D*dnu6GPlwUgtJ z8X)MYwX|*vd)SIrp2u|k+ZJX8BNh2`5`!qvkGTe#nH*kGYL4R6b0ezoz z{cXLqE!Y;5s=#l2`Qkag{=-Ja5$lQK*$)@I^l&~-rC4(7xa7Bf`Kd8eIytGkNA31Cz;&F?L$vLzmdZy1k7~1b&P=3uB6*F+p|x_ z-F_t7e)z8=H*IjPP8hp>hl;2cs6LAfj5nG=)mxvOqiv9^JHYk=A{o{zfwQ-t!u=4=L$emw@+cQ2M zWVc!eK9DYj+z?)D59bKjsHi{}aGN-E8%(q|M2c`R&n6;^8bvURddT@LkyF?)90nOL zI4sFm-f~9&Np~5_P8N*;dz?CW+8F}cii==nY<*oE`xsrXf)bY)2Mc2-<}Q*OlQxc7uhJzzNbD`p=piesB>i6 z^?j<{m+;}Ed@!kL%a@#QMBX&IEn>T;%gI#d<2D9=G#FXr52uOXr<~jnQ!9ql-A_JG z-NZCz>Va+(>ET8MpEyC=b1>I%qg>H76E*6zM=^f&A~D(^Y!7EMeM8Q0AOF;AjQD*V%@@ypi=9T61Om^o)!qQX-Gb@ z=4nPaP<%vLxNqLmEIP@$nz9T#$@c6lWC6o>A#x9e9DBH3!6@Atb@h{X&eMTtQzawr zrn5-9{o!xkTk02W@U(hTZCR$F3 zKIHn*reIEV6q=?PO(&fEBGDOn&7Yd+bEb#9ohgnkzc;<_FI*7VbiLii$JcQ`eVRvw z7LKq&JCR+A;5G3_-ztuWdK98t%Lt**hwYx%E1LS&5qjRsV&zoSaH7oI?XyS%6wa z-`9LQxGbJqp^76dtZ0}5KhV0@X4RdjawNPC4q>v>6@zZF8-Wf( z*@Sea98|d3;Ru;@VHxGQpA(r1lp9K*e9A$&A%-HMA@^0WxWD-@yS%;#%wM6_wHEKsul066@@xR&54xMz=!XeONqR;a5O)+c87ql$qJ_x0P%D== zNAFc+N_ZX-XscD|MKs929c6uVt>N&V=wFlwA^X)OlaQd~4!N7Q16VkYsHOSWSb^GT zhe+}6t^r?LmMgv_>{U$S?b?!$*SU{Asm$M|W5ZlG|Fp8gK-ndftZ&7HS`oe(Uv?_y zT$W#}J^P();)(2b?&j2n@%%j-;%Rt~{iS$zTR>H>=mhHrDwuAYh$i;UK=45u9& zi8hEUSvr+K$scDe>#K^>M1keAiyEeg1zq0^v~QF^`tv}tgmZgbryIv#%F>qz>5#Kgu62la=kY8`sSKFmKC2C2Jr_C@Q}rtaba zmddj%eeep)nSV!!_h;KyF_i@)uKcax^E#V}4Nv#jI14CxU3l@nB0IN{<<6#_LzG4T2G6s#-KpHrj!f#P~y^0-3axPg74 zh8h>)6$bWLcs^A!kvzh{#som+qx2Ungg}qgrYiFIY=#Jcih_MCe1`)h!ES(@DWJ++ zhn%UsX&(TD6EFo(ZZARSuW%UX-0q;5oB>)zye`&L)61Ltrkl^YTotAA#_TK8)9(#J zc!5K>lzxXfXr6vdAXVv?T{KmNJ8OXr{!$t~evGw#i)grq>(U>lZ;AD( zixEti2Az4ZdwuE~qTG_&tsOtFnMnR*R`T+7LFZw7cxqjZ z%h$S1^y{o8VXyD6NnSp5&_>)iUK#CCvgq`o?zNaE$i-?-Q$`O(54!W7?Dw3(eyW&S z4Gr7dHY6xME1UWgByBkDHgF44e~KOtKm8_c)p0I%a((JKjzTs~o{QvgQy70N<|`l1KRC)*Xqxd{WjLP$-W9|73S^($t~k@*!4kYZgMRy%1Fmafpo!+HlrD>R^(aO0`% zmnr^a-Ns3+?ckfqzzEWRntL;;@32hnPu?&RDsHS<)>|+^x3wcPWj!AWf6!=Ch{hV) zgZ2)YmBmV?IS8yM=2t5^d1#x7ie#4>ccH|%N_y|;6!MHRoSaEP*-W8{bDaH|=rgJ| zJiM&BP0d)YT8>Zos6F?=FYtcGZLs>QEok7xR9(jxy(8_e09b3Bb}_Uqm1iq944@Wc zTrqzK?kzwKMn1Lk;Qo@%%iPayd-TX9#2pc$zyLoWC(Y~SZU6dn=AfK6rU)7kB z-Fd6@is6i^+OM*z3G!G~@s#1PxtJ>9&qdfHWF*s`jGdhChS zlhZrzACDpI7!NRcib!waKJC)d+xMih#n zPPPmp#3j^YPplq24E3nI)pJHwJ@fQ9oGRKe+#DS+xt;|Su=X^mBqGEm)MHPq9z6{8 zsJzwlfHqQ=+apIW_1L9jI2+xt-z2&%p@7xXtdbrQ5bCifR!`P}iw{)Z>RDM;kC~w1 zH1Uq%CD9p^>sg-Ev()Rkh)bx)o>)D47}}%qR?pn3dRFPNA814WoEJSHr*4X`btEYs zh<41BoP&4Iw~cPnHFz4NJ2w!URi=_=cLZ5=3@?qYnhdYs;H?8*Ux2qxo^%UGGI;$4 zZ&?+*0pJaw@cSfsizb5{HIPGq90?$Y93bBPbFwkvJWr52CK^`|@k);f0qV1-o5yBlXADP68z%M5gf(3L&T&;hL$Gs1 z%kj|g32XSl;1b^eOaU`gq9ae18RdI{*W51aLT1z8DhfnrziH=pRq=02%ss?RVOQrz zuh~||J|9k^nx{q(He;8bCcCU(XqUnHepz6bVwMXZEa4L6WbAM_yxtI5pi9wkKYPH* zSyv|$@n8RlWzk`T@?*910bVCjj{S72P&v`+6Vw*3t7yAaH)3X&WBjc0HMa{}wLetZ zX^0XGVF+;2Ua?WX%E=INrqk+q&~3k(`Ptd4pT)s-cCmC5k>+n8*vF%~m8XJ6Ku`}b zW{0AOV1WvD{XCuuyFsG_F~6!JzrN0JY8#1OYUFb2793ShHZ|O>;md}vL}H9Th{$-8 zFLS*EHc8CccQmGc&*NC}rfmMK`G_0qN65lpJ+L-i4}gu-RHmJtCdlL3wu9#6oMzst zVq7CGx{ik{?8<$SGpFy&-&Oli<9XJovleKq$Zk@3{kKv5?$8JZvU(Fy%L#Zz@^Y#p zbz5g$FktO(qnVwPdfd0wyyJM|_^Nkl`@3V?j4hcRjU=^&=`coy)5ka|+0S1axTOzPiyk{(oXeW+%GaXUbW*2|oEVFK@&@72(#PZkAX=8u zn8VyJV$jAKhY1XCpH=`&{U+l9>PtGpm$c_K%TxSmkyZzE@m*NN)J{{Fvad4hS?ea28bc#5v zIJnhbuGhrE!D4aN1#d9yKF!Kl+3wdQuw!!)K>v|bf$ z6qhAjD$JG*w@caJ-f1UiD7wI=`ZRYy5?oxbhNPS8ge$Js>s?n`V?J&1xZ)FaE;=8t zg0f~2iJ=f^GV^o{H>$_mKV4r(;?fh;-#nX_lCb#|-1*wr04~HCq_GhdSg*Zk+~-UB zy{T$E$gbJ8gwN3wBi1m_mJ@VA6AecPjBk(libU%TaeU?r(8i<;C)q%6xZc3h@3r1MWYTtl$dB4CwtnSx@hXE?D`Jn2GA@jp!E|A@P@}I+z9rsBi5qevT*M=hghgDSB%B3G~@{ zPD&|(ih!0*7LyaBqL-K|T-pbutq8pt=5Oie!Wh$1?>S=2F6*tE$Q*^$z1XP|_3>M$ zkfAfQs`sI6*{lJqpvUa==xo;a;XaSH5Cpn+o-|EGN4jCe>+0uQ%pRFRKbR4dH)ysA z)$n1*kwNFg1#q_is7f_jysetXy{J(7t;DmieyJV>^QNM{KPzos^sK3&{3cTYrpluC zvMgxZhwMa|lq#`C{K+x&jI%RkBT# z7xBL(_Z^Bg>uloLZpArWdXy;vmFF{oDqW~4SU~nzYn-7JZ9ZB)U&8|(<0LGNLf-WF zoE^qj2X@0}NnX$yXU$)nKWD+>{5uvd&cC;LasC6@#rcmfS)9M*yv6y;mS*#pU6jpV zvOJsr_^NFFns$Af|4Pm-S9aUw>Rw$6bC1a8ukO>&;^HG1MXp}Q@2_8dWxqYTy3Z8; z)nnZK^0;3f*6{snhV-O(N#oi1iQ|y!p$=ZL_iMzr>dxr=?3Si#jx&!L<)ee5c4-a6VK8-UQEWUV|iLP`+% z2W?uNtlE_4h4mH7G+S>%ZWHuHnO?-;m6jwed^k$02^A-x_iIG;Ssuo{;upo&D*Z4v zHZkeS+o>g|>02X%Ve)?NcI&>P&190~cn2*v)pSN^ zw@*fh?o9BF2|zT#-Y3q&wyH>hCtejfqy)9#Re4JokR|74YaryS2hM1?nGk_5k{iiZ zDE5l?iZ{eJ#m_=kuPrkWKQSr(r^#)f)#L5AE~Lh~w)%K}*@}rAx~vz4p3c*xzkR^V z?H}*2jm#*fj^X;~w;&%6(-D=K`%8f~$)FfGQttUw{GRO(!r@W2|FP12agUF+xX0e( zs>Qv!aEi{B%wu{L(T&k@Ls!lqc!$+94N*OI?#O$HCL%hunnbSE z6Pwi5s8?7&5|5ShiFRz8g&ml0dzRT=$L+JQ=qLC80zSQ+Y)ziq^hLP|4F_rmU?+H9?1DJ#z_SJ%n}{ zq0iu5?Qa^(Rz(rsGFOmK`7jL(kv%IFQZ*XA#vyBceTjNQQR0GOBI2~Fu>^TL&;Ycl zjN)kYFl+>hn-V|<1Yl@njdob6<$;!%f`(fT7D6{Lk^$%6Q*i##;rx37rwXA7aR?!V z^%Y{a~#q}hh#*fi973$>EaXK!L%o#nk{99U<9Mz%)DaX8PnKfWzl%4gF3 zaqHp6A-mBZ4Dc=eE&1Cl!cW5>QNDJ1DO_p0E4e7NKw4vjomq|Cj>7v}k%2LJ5*9Pe zu{iBP640?qzm?~AHiw!vFxh4}Wepk~^(>h;6sO(z)N^RFG3h&kq2cf-8ieDp`UKY! zX(Qgm(Q1F;+ga8#)+9xGMIA@aJ_oS!jO#b4H;?E|$ab!_CWXYllk}hI6Y`<`F28!4 z#&-sU3H0TbTVs$>nMQ--?ds+M*$m#9L(zROGC2VNg}UU(^^T!u8H(MZ+7ZpZS6AU@EkT^h!`BFr@}iDH7=wE;3EEAzZOn(kHDhBh5SM6U`#}oyhNJ=c_2;QpwvrU=%rb3$!u^J6T|YT zR!h^Yd#SJlL%wd%hoxAN)L8DU@z~z8`$< z`F?Q0^ZnqM=kY;mJ~j`%h}4?~(7LI@P|M@@67*+bPX3&^g}w9V)H9Y&)Sc%(uO9)eBy{#CYDWIXU?59i~QRij3(x9UOUvr z4g%D5YLxX|OUPCq>b;+TU>SVm9b4)*;- zoomn72Y3BJVcJ+Bt!*-5=4c}!Lor*g=sePkKNf9!#QM&My#vusBhd#Pz!l}bNp({) zKVAwG4Zuurgob#`B~5*=q1TTmfBr;t$4Me!+d$WujkESJ9+Mwq=(r(xj9Ns@B)-t5 zkxLmcr(~B42~UcDMlJn(P0d&moZlL~!dB)o-?vd)^Y8xXdYFK5`}@cOP-6^$@;76A zGp43*JO=VdW52Yv-;nzFqyF&?{&DJ4hGnKB-^aNQr(d7?;w1m#djF#IT8-?L8prvJ z^m=u57&W#p6Y+Q zC+{gPqMJwJEl@=HcrXkFBf5{?uRNkf)$9r!8_gE>&UQSEN^j{Kkndj` ztve=WUwmeKCJjRz%x>>0S}k2C?{!-LbEn-qBoxkQ8g9;=j9*Pwnx?P(<5U!r zo)#Xt%}kX_xcCDAnW0WFMAU_PqJnlBu`YqU`f5t(V+(V)O%Tmp#~;|-{@9H6hi5n6 z`xq-gS+%tOx#ryQ^gSb`&cw77J(_195Fa034-5;9Q!PiRmP$h#cW&st4GA8}c61cx z5al%CpMpQ-Pf5wkNr*&{mlJl9m(OV>Fv(W+()h5HyhzKw_XMQnu6U#(8YV4$`%RLT zo$*-!4qK6zG39WAJy&yZ=Z+W!ni*Txv5?90dKyxaf3d6OiT0=JEXez^5ai8%kp`6v z>lUo{4_m1rEA`MWOMS~qjajKDDy3dr1*@cvwu0kUaQiL`dTQ(x8l_W=eUR~Fo5I%U z>&}khQIO9y+nQyci9L! zqY#2M3$5+RjE%h$cpIm%-BkU&;qs4Cx}^N>5GfaeS7h0U zX=iaNZ2IK-8ccfZzG70}yAx_$G;&FXN6zU*Z=cPfQ43lylGsYi*zwHS8BFUv|E&kk zEEEOEIz%eil98=o=NLyftriJUFSoRZ|KyF*$aHMHz>+G?*Owj{8*SM?$c_VT3JsbQ zA5~&;bw~W`sYUM{bFEeSj5^T-Wzx(Gkft>i4{#7F4~SgpMyf4+%EsGD$K*R3^`8ED zUHrOuESbL(M5o7|Vu?YI4JilIN8grh(4hnz2XXf3Ps_?=P=%wPy;vv@N(pJSN2mv) zx)e(Cvnpn57qQSMhQ6W|4xS5J;R{9QZLHHdXI z^O9GB2fdP5@!Vn6uA0Tr@iVdBFRNLvhTruI^=ekj0HzNDMkJR&@Bm-<9Q5a-S`TX( z+md+%)klySqs-Uh2e4ZBAU_vx4Q$iGPwbOPC3RJEyeZaV|s?d1!)p|Uj zUe&k?oxXFSiRkAFcJx9MD)b8H=YB?(rDl_^i%#EL_~UF0p_EngZ3zSZ%LV!@ACk$0 z-J=>+qy{X#h8ZAotlNWNekfS$Jge}uMt&~$pY!;+il6O+`dinwZ+wPL%*x}50WI__ zvEu7BNWlE|agw?m#v!v`G%;bCs=IFG-^U*fmJzN<|Io4YbaCYkeo+R7W<8hPo9

  • 1KRr)kuy1@U6v=lALcD%zp*mo%lu-E>9bmVRPrI6%a-Ev= zGY49G7po$1U6{b17{Eq83Rtn6eX@!nZ{R`)A+)%6IJq`z;PzFUqi|V>i~f+Qy?9 zD11O_5US>j33?4G*yvQ|3k^{TKmNiCNc)uQEbY+TD48!S!gev|S5X4Bd!7pVVo|QB z6D*nKbbgwvuOltXb3A&_$GGQmDVL3ndlK%_vyz{;KXTFb`*JVY{U9nszmms>vcM}Rl!)%!1*70-(wH~1Y9=?P2} zCBd4q+?>*1HKr_|t~1RnO$-6X0+LcQRkdKCeDKbr&c7PpN2%$9?13$r2kS~LR8V?cTrH}2)TV|QVSQ+P zYN{=9OaDD?{a5;Xswpi-B{);#x_)r;BTk)r@@CrONy`^Cj^aB#CqAcOzezyM z6QkIghefyJ?%n=mel*{yXtrf}?W)-}AmP9LkyYDo%Vo%$Tkia1&=Kj<2Q}3o%%mR_S&B>PAZxZ38a*c2rDj=MkZE5kW!6v_Y_L&`pqRP9*omx1B>PkB(oHtQ?eA}F&fy_^raAXiuI1TW%b(?VelDKlJKh>E_>ZoZXA>{soQlJ4KXMJBhcZvQ z5_)O8$ja?)j=jT^a>tMwdrD@w=;>!T>-1@PC_mSgd4@iJV|-%jlNyuDH`*r?$LyWU zJmr-)#tZsS%Vj3wsQ-PsJe&ehL!|%k6m_;dMFZ+^!EbjM)6TOu>8s3kFtxRt)c(4& z^LL(2Yz*DCEI*FgnJD-3-MN;h>1v)myU`H2GkP^gAaif=sumv^!c_6@M$ujL94@5r zD8zp#vKIU2B3KRkXStXRg=IXLVb5N5Q*Fs%LPV`0e z>O}NOv?4etzT!*S;_9#X?i^({vKUrWb1qxVd)FWZvCP*6sVb3R6KD7l(3nvCs&a zinQERW7N3zPt%Q%9V$`i6h>V|!N$1wnKbE?s-eZd5~)&cZsZn|??LOBZPAE!M!A22 z#%_~E@s-jlV3&GjQNVmog1P!^!w^dTMf{SIZ#yAAVOgPQw}nopTD;M$ex3;-H7JSB5se(gUuq9~%nq~V$&?ZBif!ul%D#rg2&mK>Gx9Ld z+jfOy#{<+~1<K)7S64T-gN1g+{l#*$;gR2B+*LWUr)5-u9lWs}5z&Q)-sqKZ%{289B1<*+c6#M|%^zVvI(#IWFn}ZGbopGen zTpKI3jKZHA45D=@)T|R*|Jeg@DtWE9MjQRpifg{ig=`ie)S~>obKz&a@=Ca^-4&dj84xecAa=i|~0n;2H|MUOzHol;l-t>h)2skC(J&Gin3g%bnwsQFRB@(cbvaCzy+JWu8)Yql+gCzv?Q zlUmFVHrYkS#C-e3I1rYy{2ZVB`h|L)I?swc0X&hE{^_)tGuoEL%NSPe9>JEU zeT+zXg}Jk*2Fqrg0aq3?HB6|%AS@pTjC-@P+k!=x$^^UwR z4B;($_NOnfC!cNj@@-A`)RQrhV46MRZzo@$Pt;xe)2}2)tI85~!`FwV%YLeYwPTpj z)t1tHKS937OqdYC6=GP*WR~Lu!Z<~W=5#Ok`lCl{B?}`)b2EZiPG1}^?kZXXpSsLu z?>oZmy`l3P(kXkGPH`8$`w^vuvS$)DX7ZAyLsvI)fJ6L@N{xbkP=1qpyq0^W`)h#9|y5-#w|iYz0Vk={5HXL6c?W1LheCKsMHrq=GkQyc7 zCl!x|ZM3vjM9;*AfXd@EN)Sl%S}(6Oub9^R&|ESysyyP91*6iLCjAMYPvV$Wl<*xe zc^&;`K|q8TB=WdQaLSC*Zg;J`Z|jCda=JAZ>DDhgwuNJ7Di&3Zg~@M4hMofo`@Pp& zB?*r#51yrw5#U?O5}Rp#NX!J zeIelT8fe~!4qQj!pr95CkP;eLz`dU*XyGndUX;UKmZ+44yPT(A(uqG*#RF9p8&aGa zD2>ROrWU01=U=GVt9$EK9)$anX<@>bDjdD;x0)D!HPCnY>IBOB*LA?14v|U=+u$mrRyC*Z>673O(!N1In8Q}rv;6^ zLpOn)Az$cG>&1$?XrtGe|7Fd%NzFJmRz!{wg6J|zL>KWbKIeb)#j5@}BaB`=FP&P| zpqrvm47$+3XeG>v9uU6eZtm(-e^o@FiMu0aKSvbS>-g0-;d7E{#qxXqZJevGyNdcU z9TYWB_q!w9?{_FFk8m5iREpsslD`#2}pV% ze;`m=U7{yz55D#Kn70~ywHI!Ib%&+DwZV5b@2dx2eGz>X1(^tl555yJT{QSA5n$(Y+bX||wXk-wg1K~NOOXbVbHHmHVokNaz%~96g1zn_3 z_S)Z3Gm9~41X81{ibwBDAh7qwiu(HTCNTKR(K#!dBPy=yvs5WUMv zCOz5c)fs4FJ))2N#(MHPs;cVAbY1f*5TeEKAB0r-G9fJt%`KN?|HD#p1u)-L1fh=K zWGbQT0?Z?{8AQf^+t_Jk|G>sqGAu-I!vtbRWQXL~{EYmUkEk+B1;LESau@g+*aRN3 z-Gh@oqmw;ZePud76n)RXDo^J@Ak0#23gxvudacz~ncogYpYZR({5F|S+jPE`f6UK* z(rG)|$(}S(a;-gbiuTl=58__#{IPg7bynFxw3k<MBNr3f(6M>$ z*#t*NH^2~lTxs7xbSJz7Rm$xXp*`J8WLcDmniABi_|8W90qXm)r(2pE_n-{kz;gV| z5JtQQB=#ByGV=<_bS&E-bHaW-FM8@dbtWnMnlzdxaVfUB%q`_`c3ZrUCBGABv#AZT za{AZ^@v?Xu8le0v-`TASc=cLVhqtgi7qa;jJc+8M25ZAdNTl_`pNLskk7@LOv$FGq zbU}jx5q$_bVU2Kd9H1JaRmcoPVfvr5huCs@L|W!O)IuS5cpVfuq;6 z&hE5(a{WbCS{$sYtHNRxAitca=}~=^?x|!&>1tInrE2K^cfUf zYJGkQ(oFaJ=2>YkXf+l+F)~TAN1|gMG~twFlO+X-MyhSwrKlU(PQZ7=648aGi)=Kv?TP9VxNOjA)=I-Xnjn(o!&?|*W`<)Jd( zZ*sivmc|dNcBNN-cNy=YF20ktl{yQk=j6|ACI8Z|ZEd)6ZsJgMynnwT`QG+uf+8s= zK1CA11jl525PmdGV}mrNIq%0jTb0&ysc?j?qq)p4j@e`7CGv9qVrXoySLIO;hq^Vi}z;5S^dBrb6e2&dYgJ>gG?18EVW_xBv2)9XhR}4AdwP z_1|XQUCHG$6rBRw&}Si+Pe~DkDbO_n6TS{;0gh(+mzCZY@=mZUE`)?&A^%Zxpx3C; zD(oMNKEA~estlQ<(G9;cgdU_HnvMS$CN=ar6NxSk8spdXL#Lj2TpLJxq!G)XBmF48tNimXm~p0PhHt7!bO&q%-+h50s~u?8 z)2g@Eh?G}~FXT(TEsLwzIvV}cLngD`Ci4dxkah>sodRNrZ{_XQ=r)2-phmia=&k<6 zm#dzps*Ms&LA9-Ou2lBZT5UbW1>@C&R2L4|_3WVm|lerdHDl=x`E9_bn zQ-|HW)`wwJZS*E8?P_^w!H920U-)Na&b9;wdna_7=oa8N%07xNb7Y@0Vr$V<>#xb8 z>D#s%$-|>6{_y?O5zH|TQ|y$#f&9l~W?$K$nHyDTj*TY}%5xxo^XUl@Pd zm_rR?mpzL?gEn9jwQiNzhz?P=s=pkM%|Or^@Ap`Hub2~tlUZhF3RE&T+Yw7_0WkID z)&OzD0GGSp$v~RR6cU&PZcTK0t6HM*Y{S3qE5z-fB{N{~thYb80|ug_#&aw|kU7S`lpzc<@3yqU+C|N=%fb$Z(LFte>sndN?A{lhgB1Vry!4h69UG>DCdW9 zwWF=j6Wa0D)|boNs^O3{Z6i*tH&`^!>Kydz=HIA4eTAOVmpa|b_JZSYSTy2kv3aD8 zo0!lC$IWJX3ky2uQ6rMyP=sQZC8s?*gA7WVs9^e8IK^^Ml-a5%?H{Gc0T)eP%>LQE z>cnu2II7N98K?-`?!_@%dhM0p;~9<#l(D_wwt4GHG=Pja@m6_@(s{ZI`@RX*CC^lr z(}n3T0$!Ao*%nJqk57+v7M3tIP?s90WdH3_gQ2bDrqahzM-$N^uuqd?G}W>i9sTq@ z@c86-h$i*5>4?ufAa)v#zIc-i3x#a{b{R3PCo7$I=C_=9I(OxH<=+PqW}mh-Y8V6s zs)K);P~o?NsQp(fdC>b+Zpsp;QNryj&-Wt6V>54_^WnvSIzp|bUrffM0rCdGiGizz zS*Z1mzbcES5MSDsKj}2aF?BGpd)B)R+Wg(J&Tr(peG)2j3r&9T3&GLx0~rBm2T(4% z%f5V5{H7Ssd-(Q7`<8F)U=MiVn@7+ zc-SCFK%>AZN=#vII@qfvie|9`_jons^f(h^mf32aG1XTM zSh@At;-&R7q9cE)u41S)8$fmdzmwE!B`wy(KPv0v!l}`E%FC#$3*&tgT^~i)eCW@p zoCFG%gw(}da&3hW=;n0!F<2&|_&98>F&>c(_Jrqioa%iu^=(z1?3g_=@Y$FYTid+2 z$-2cnV>Bcj_o#CYOzKABF{o_Td~)RtT?r1GALiU2dUT=kzr36c9waUCm$Yf~BfK2V zE~>{%@>-D;m1upR8Iq2Fg|?kk!znb^dqwfRQ?tV_eyskrY3)Ru+d1B4%{Ij&<1Lvl z&dOU1DR&EXXGak<+pn|gVfL*345y1G>l*ej*~ew9&|!zJ)~&qErf*Q95?dFd7A$nM zeN{bcO{Wt0RJz>ukqioj=;EzHCu}kd{1~`7Fjm+z=2Bd={1HrooE5UXJ^o8E9ZS@5J3==hovhpb=xx+XABZ1#J%p^Ra~{4syZJX{ z&$%r-gE)oOk!<1kk*JlzA$iX)Kz45YD$90JdW*jH(TyBxV;rEMVbU341&Sm7uM}l# zDAI4-NmQY2>CI=ZGC;15BPYQ0Yy9T}fJUl(;Dep}evFsa_k{aV)^0=Jm(JlGJM${q zzDD;?j948DtgXc+yKuxyajW2(I|#vLgqFULp{2A>XWS?1dJ&CxiFlUIwUD^U_Eh7V z#{he1e)S*ntDo&ubf;zpSF`S3SpA3JHw+GU4E16|l+Ls*@hh984o{Mc30$|xoRB3#TXv=4Y0kD((w}5ly^KB2H!N(W`@~zugz$>hN zAX?3t9$14sACJ~tpIC(VVG%a0?SgO361)$qa8|=wjpgP0IV&$N|K6uztxzi8AGq?f z<=;m(tnE&}dvC*9g%`wo`lwA}dYX10-jL@Mq4-TuV9+ICH}kXTTd)c*e}+z9P&sZl z)%tk=nk4yu-h$`rJ5!hWC1q4e)T{~y=4kpu1@`Dzd$e!*(ZTlUnD8hy-=2s*PO1n# zW`;f4UhCdN8*+0RirKSk7dw28!K9tLe9zbQtmy0g=K-cLsKR$V+h|J=#W9XG4**I5ngbs?i-bfa*^w)t9L=;h+)c++q* zdbilkFZ%evOZG$Dbd%1DF(~v|GE;GuESJIe>Z;!Z2X$mG5u)h#@E!N7^ff2ZQEFo^ z{bQSLfT~s_RH6&i;w&BtfKV|Usbpww6sLp_55hrg)@zTR*E?4)pTemju#e=st z@#pWF`SYHoy!wV*BV2prE#O*Q;8)`qD7ubYy1@8{j(_}Ksw!AjW#H0@+|&ZzXs`CO zO&J0{8i4m3RL`zaw8JyRRsXUx@C;c!YeBxCA8@VRf~narS0C!w^9;5c^#t(J3c$jd z^Ny?=M~*t@Qa3zytlU8jYtP3vi|g3V!qa2xn)K*(RgaqW=%}hkOZDhky0r3PyB;Zv zPvy}%J=(kK(U2Z-Hfdey-}xFww!SL#sOP$h!*pEx!wtC>xM&4~$pS75viarpg}2Si z=9e_)vRQ0ae%g7^d~JP0Rv>lw=802zVX+MS+*EhhS5L}r|E*Hi6na$P_D6pBCl0jh zQ3-r8lJDCeiU0Jc?2M=Jd_@AWA9=y#cXmJYksY|rF3{Z>FXuXF?-f5_yU;V> zHT3I}KhE+Mbqvi1uqot_PK*^>z4u<|4L_@UK?RatPzicL>NM30efn;fy)f-)|JETR zj6o^b$>tCy3#F?Fv&t$FVWdTOlQ6%()j$Wrc*A@2JvA7>GGP`1c!|AW-wTr#{dB4< z4L_@?q5=t3R0678WRJ?cxm@4<`|oBvQ6ySMMD})?Tu>hGiNGkWEt!hI*ycL$+d90y36Ln=GG7uaazZ2X=-y!*i zcHN)J`uae0i?OB3>$}?N>8x~oZ8_ehi4h68n`c=26er&^-|p6XQ~U_;ybsu(7KIOt zc5+LvRbWTyKllSf>BBpo{yEdo(@tNuh!6S_vv`?SiES>Ms}5elAg%#B34 zgX(HiWzFrP1A9%Z{|jNN7dB!fdr$l6R>Z-WqaI-H^Lu~%eyVFU-0Xw+RxlIkqN4`I z5spKG(bV-*TI4Xu4Oe_il+_Nb>1u=EV8q2Xs0ZuUbN6}n z4|K(lA89E+D;}>9p2T&GO0>S_Ulqwuy~~4#>(tT?Cj645x5jTReL@dX=>6V@qI3sf znwPD6R* zn;+i8T)GNQP&fc8Q|tXb=(w^!oAu=Xb^V2&sJm5vq7#2xW_;vU8uWiue;M=quj;Q4 z8WaEJ`b&d?jSSWL>kBqe?wm9^D9>r@P0HP ziQig|EcWtGgE^9dGwhtE!day7{JX|%;o^B{rgbv&V0T$Zt^IhYo!KuwG(Hq&hpXj& z)e@YC5Mu3N>@*R}N91Q<`lUZKX+&g9PA=AlFw8aWj$uFJ<@Q#ir9?;8B60N=W~?Kr zNeg{$Q+~-2h0~g{g>ymb?0F!>Qu(1QMvs)MIK`{r0UxK2PmHKE8a}OwzN`c4IJe`& zryUV)C#ZnfyZJNX+v1^}*FP*Dy^NgIqkp>coH^{2Z#y#POd%AbX%jTcErO)~viV#i zC8)evD$t5RQK-6Rc&r|IyZ;VWAtvfBd0G6oWKHq{ppzNr`0y-WzPT>GHaw=?%9M(- z$z$^s(3SzlnKn!+Y=BqYO{y=So5v;oetg5u_^;X4h^SZ0^NXaw^WpT>wr(I3GvwG^ z1$GRBZm+OA%+oQqQ&X<+xn@;FzUjA>GPK;_%l$FH|F&hzYh&*@ahxD2c%_9$82G!od6U1YINLHwyf zObojr?+T4n2#Ze(3eEGfGik5SGBmgx62CdL6JiYT$w27yQ|jUy<7twTz5ZVfJL?(G zo`u+v%C_Jl@)5X~1P04)9OOR&TK@1Un=?gw0ZV=-P?w zd!33E64uIp@<_^}so`Y*azD6DIjvZ!63LRb?Jp|yr~<=%6x>I%drCYK6WCLhYc$#k zSIcy0S-1hH68SAr8%jEWU)C`oF{*3J#_uJVynV`Gy7U7gI`w2(I63}E?~^gsiNeb+Id zzEbR0c)`}z1mKtpe{sTOeUkipaut&z%Ib{CpUz;Sc`Oix=z;dQ$c2ZRc zQ-W{l7y#7LAHM$U@|A2ycInUi$!ngS3Z0GMw&V(@QCoN6@{_5Td{c$X7ut{BN^bp* zp(Q~uPzgtJMtz;e7ni+L>X=wHTz(vXORwcmA@ik^GTqGXU#rA%iPDiQQ_DJ3y(=9l zo0jv)e5IuAE6<9T#9x3iD%Mqe6Mu6p*HC_vq%IT`Nvf~gHFFEkH(dTtQcOeq>B?N6 z>(uA*zablfhJ}kV!x%2K_7~cE^Z%yC*>K3XR%rcF{_|=!F^7woqMx5I&##TuLV%S| z0#jB{vb>g*UcXzV<8Pc>vf{aZSEcJzi+}QpdxG<}H~N z>ugGeqII@6#BcDqaG}Ra*?S89^pX5MY{Ja+(lN{?sx?JA3s((^`-o7g$Yc$q|ArC; zQ$BD`X>W0V*nQ`FmzNc0Wmylqn{FWdc&wq}<{@~kV|DkOOI{Vfi%^Gxo&T^&OcWh^ zqq4qqpOpDh!xaSf)s-IQ5Ae>T)!9O}5nWyHKc%)Cy?5_kwwd+4o5hb(FAP*G6!J#A zvFEoA*^NWyY6Wc+j<07twaIH?aXr6HYN7PzXwKoMn}^J&-+*e4n@MI}Sg*>!RW(Fc zpjp7m0od-Z+N~@tptNnbH_S3UXHbCwW1^EfQ3zQr$oYjPuVl>Cdl?9BUi*B(^R*MvuW~MfeTSuC^+BkEE({BXn%TW0Za--7TgC_I^jk|9TK?ziFkH?=G(pl77T5x2iP2yZ@nE>gcE1B zj^taFTWWfD(bd4^_Coqel}%+vpD+D?`Z zEztL1vc#$iy8|@{F({VzF?&%Pb)!rDYb#$qpy=ZFVv1`%=Foh$^#v;#f(YF$pNz|% z)l%L?8@%v@q8OvYh+xZaE_AA6W{kMyB4#>>xZ@1~Powch0k4Q*4MzF(KgrCHT?3Do zW}(NYE`OuSGn-?7fiYsW{H&7!+uELQTZ{PQ_}5LCcE0uN#|)k?&R=H2 zAc*mGTEwWE-09P#Yv`f}zfGfB)^b!gur%irZIy3$H&TFpn{THkS-YTT z+6yL17|b&>H+b0eZYh(~1s{I*$qi$f<#0>6elFQJetpO4{<=%wZ;SgztFn@`%?Kh# z)drBJQV*f)r1-Z8vGWf)gd!wGty-({rTeg0$Hg>OlMTr2v*X$q|x%=;>p5Jv78Y3Vl(viZ9?7TN~L>xLRmDT0O6Z;GH< z4KPJuxC_VTG4 z)kJcgT@P%to2~VAp)J`s%YNgEu6RA-Jt>Or=4(W5Uq=h+S+TWj0a!+KdI31t<*GDV z&RE1}j)2z;?cN=~+bH6b_w7-amGZo3g~Y94$Q69qtGr_E%hb_JZ*)DV?iOcRLf4cY zOrvnDfLGd9gOz^uP3b|wKoNz#6Qwy81Yo)cD=#x4_R{Ei!_nv~n?cwBx>^J1S8V{j z;iSw>44~)O0E(ob(EeSdDG#8N*l|b|4$(a$DrFrai`vGet$GBd$f94mSiKaI=ogCm zicYt05}xc2rIWqt_I1J2i~aUH)&o{P1hWD+;Yo*PY4@X9*Q%uPr0`&nHMsenZr$ZQ zv4IV;47ARZid{0Eyn!F$N#&&%Po^=r!7x~FWjj^ScyhTuZMh*^U~TVW*wWKx85P=j zWmL$iFxYB0#$c)sYw+hm->_!d7Z@G-Fl-@Ah;&f^mJrE{`iA~H8QCDQa6%%JYLg+` zp$+PB^pKTYZzL%U_Sy#)n8$Zk!{j0RWBtymVg<44gh;^dhM&$xNd6z?r|;Xq z_y0S7I>?$e6+f+KRD?UlmO=2Q;is9?@)JhnuKB5x`YQ1N9ov>?^UuMl+9b4Y<9xo1 z_*VxX_rkN{)e)`?pDddYCYCB;=UaYX45ia|Mxw<(;I}P=5|V#LIo<@ZoG{Keu9quk zIb6SFUi6VSv4t)P;jfejA8jRNsg`Y)ghtKQ;a2^`Md{CFGS%AFi9#C}3r)qb5S63f zh}s^3G(s0uYb&B@Q5&-C!ibuqspW^A{3E+v|M;v*{rdd^)!$4TP#^rSv@uV~lZJ8` zm1pj3QF1d=zKHgXWeYEc?&HxB2sH~41aiHCCU0dTGl~Wpmq*YXgXhY#)@(sCL(%Y8 z#BC~}k~K>0L=W=Cg8*X?5Vg;70i9PLHDDQP>xd<1V4E0td<4*V%0rd|w5RuN_5Piz z{p}XnmjrUUdUhAEf;buILRwL6!D`s5JrAZsd%21)(UQiOed4|>83>|-t&p!0d3I7B zk3?^{$#A{GaAl%v1;A8?u8l?OzbuNlha%Zt3`TQm=|!DN#t_4P(~|3V1) zXW$yX%&$MshO+yD13!u2vg{5F0{9mUFtnswyn8BuYx3js=7&G1Yj&3(Zti)0{P36d z-#MIWFm3<6%L?t(f1kX0s{Z@qm;R#udy&=kztDe8COqs9l$NFYeG~Al??huozocb| z34YYXzf61cATGe#~Xupvl$dg(ou7Ykk(rt_?&VT zKLWUD6O}*3Pdz+YQ(^oVG`$yQ!tqw zZja`=q8$|qXlJ{4@?8xro+D1V5Q7TsF@H-wEdBS`@G$eVd6Znjr|RgJkn;8WRcL%q zXjGW4Mqj_G;#bCh3s`&MJkjJZ z8!q2QrpfuM$!&cLaslx1FMuZ93_!(*x|0Etwz8q~)^YLr6afISVc50NE35 zBU>^L$#x%OQ_8O9gV+Sj2i<;W&1!c1(h}26^_x|aXqjxiCgZgg;<%g@#v$5mBRNq{ zo`I=b*j%s{`u?0GAEF>dCrCqZG?btwTF`FXgArew(t}~-$+kgZQihPiMinIZd{@g7fvmA&? zM2MEl-(B|7v~VomHRK4$$Xw+g+@LHs=B4Pz66d~cU`vK0crEpsc`HVPrG$kpD;*(R z-M2AJ>ij@l8)KW|*TQa1M#IV(u^nSr0t{E5ia*6$*ZWo|zSp{Hj1JX+WgZ4f1iTj* z7#S#UttewN+!yr)(L=iBN%8ZazYKn}I zcgG)$A4)NP4P4Fw7l>e^i{@13sKxX04VG<7YeyY7bbOvJDQ!{rOsV2dy;5|5@LG6$p8Rj0Cb6s%8!BGOz668T&X~y> zBFy2$DZNJpEHGDCN;8u2bW5XW91KjUExdL-ybrhwLvvXwn%%I=>91QeP3sp&>{_8+_<|H zf6YD(-cGl=7mchSeN!OxPQ;wBk;;f!r{-F9^`W|b<73l2J0;SGSve4a9dj5mxewgs#{Tq7Oml*->lEebx+xe=XV(A z_0pboF5>3}u+y^qVfLwO$uI^i8fkkSoF`~tdz;1LcidKw+?s4E&ehm$NvLBs&i1$S zdulZ_aJlh`g9r;8^`)2bU3vfIxba7icUF1(uLVA8Bp87SV1(8_7zAEvAtgE*t*}S7 zaC&|A=+hf{ZE-=w6a^G@bfilVlZ4x z1)|WxEN45Wk+mIbkv42KhBg8R^~xCM!wI5`U2NOGCUwisI}+Y*W1Q9KpM5g^J%G}*;n^b!+0IMGJj1y(LuVO*#?TVZV0FYx4`dW?e9mWDbX zc0)hg2b>6F@I&O!yzprm;jAsCm~7~@!S-`7 zD2r$nS(HnY&R5Np#m)+ww4E84d59QEjF(I$?6iVxwa+#t9!A_s zliay$ZkMQFj-@k<9keqpXMjst|Jweear3?s#fkeluWdotfpR*NJC>}Jh`mfL+b%S5 zi%dV?ian~Blh?$5)0O!NQx~#(DctTSo}c(9aY+>LSV;3m$G4;?RAZw4{m+`V8l|!c z5EydK^$e1ue#3q+%OJ@u-ja{n7==Ayp&W8}E7GscUv~2{?UGMMROT)HBNlVd%t&Zy% zr_$?fFI@ls=sPcD|9|?g?tdiadG^08)xSXf@A$u<{r{=w)&C#9b6(BS- zj1%AAPU=EW(P5d%wHhJ&#g@6uk|X8GDti#t^A^%C?ZNS-?YiyJNkGF=I5<8YCM;*P z=uF)tb%hDPC0LeqpKVl{QS#G)aVQyiNQ>rNVCP0Sc#wVG}&qj~|bMQKlOVgU%Y zFysb{o9kZ6Vn<~gCmV?M*bJHP*hpiOZT~Dul58fi$67_VdZDb<=%#GgE9OCyAR5{1 zpCKiLUlEjwwX2v=ma8oY)T(Q9NSeyiX8&k#On3RG$ppM-Ru=Dl+0BpftG3mPdZ;UX zn?LMZo6_pNf29~aY+kd>E7-tR74-zmH>_LvWT4jqAJGKUc3*5VOdD+YO!i)c z3ExF(rvui(W%-aziM4X;ce#5pU24Ld#prxB;M;T?~Np-QP65i=%Q7d)v#e()UaVRIz_|`VdV&h zJJP3`jg9faPW#)|Z0qJREBu-7x}OVeqe&N<#!ihI&|x?~q4P#5R>uiOodvEs!RWhv zGgclK?`xwq**$rR^Qj_!HQ4*zpMZgq6V~>S;~3qhxtu&CcoG}q1>E-f{^ZP7T;~e7 z!N=1zw?5axf)jSZ=COJr0Z4YpN2Bp5v$&80iL|nw*T`T-yw?6AU}pHPJHU(#W;ZbV zyXMZwwcziNh^ixO5lEo(E$z1$<63^NoFimH3Q)DkzU_AijI? zOXu9UJMk}8Xs7s>{Yl$PsM0Rtm;R_;P5en=w65mtn(<37vbucC{~wKCT1t;1#*^oy ze}z5zMW@FLV~?KsF_BMUg@36%x)S#I%k0tnEp+LHu}44qQESI2vbB}ApspDCC0s1f zsRI~8wdhFBbRO?s{;8u4q`p-^A}fr?B$!z% zi)DLn0VW~Rr4un`fr&=CaaoCU+(eXp7&R|b#v*L>E>t>&4o>hRW@IcV)UP!G%o4gSDcq{$byx6i`(s1fhngrxzZZR3U6 z(iZ~y?c21M27Ds62OTDxw<+vr>6(4a4o**~#4DP=*m{Jvjs=>~jF9e-4l=?@Dan5F zT{}*zmt*-mt)yW@s}b)Yl7UohldG{}*L{(=yCryqlOE-k9=-76dPn|MsjW(n`pYYM znc7dgtT3DG>)xb_f4EkAW?E3iRP9+z*yUf^o}mxyx;zF^V*o^AzO!`Ci1LZ*D5uoKH!{zw);P{g=a1G=reLO_7zAyqWuK(TsN$KJo8V zc(BiEyay!v?U!Z>1NJLy9P;HV+zZjxXW6keOe9Hu^;OX`+$;_|`D{^e^WquWgF0g0 zD!RmCw(8LGC!Hout6QOO7$tz*_|}OLO!}Wb@~$);Om<8}QfCE&^U|$ge1l`w# z&g(K{p^Wuf68m}lJ>ZQIZ|*uR#wdG7+-yXDq~)e)L*`#1H>Xc4H#6QRlh@h;iN9ZJ0PW;FLG6b9-y2`v^w#GgFZZ7_ zoxChp)7=%ua41hg)b=MAnfCnZwNWoO6_Lp?{8tSz-3&3k!x`4mrk9z)_oij0ck(F1 z>EFdD!*MbU-wZ;&XNr?rImr0l?It(p#_!x|l=*;-btX4_L6#1B z5^yqV7CVu-#lG%r%l-zMgF(%D9u#o zM}Q90hReS!VY!h%VT>VJ3$J#T6;gRti%Q$CcM=tHqgIK^-~WSkMXv+ww#zg_OhEhW zX+`C}3$(Lb&B$lIQ#zPy)%;@3wmOrS5Ns3991F+bc^aO=UT~yYN`*7)`RQu_XJY4t zAfYqo@$)=kQZx^2wrKw5=$ZHYc}Ke~N5uNdH5%?wfqzRz*tuCS8-lcy|}w)0-cGow{Ak0!FsaI}T*AfIlj;ch4}w>;Mix8u6702F>Z?kwREBLONacB{B^+y-=W_@@ zS0zsY!p~jhZ7^I4Jx)x*U!_~5S3=f@c#a}lA^!#cu_bfej4he(&QPW`mUr3qj8YR> zEq6k6&k=uCE>;eEUi&`qDlHRo+8A)Otz<=kMp{RRrk(-3={!^Y`T|t?nDo!PcpuDN z%XfKnd^!u3#t8+jWw+&`VYV#VsV(sXU772SH*++oy6S?P=(5tO5F^HTEE-{onxsM zcTe5o%sZ^b4xp$H3C%8@2d005=nb7pnO&;apfsuJ9~lZnHlK3mXsXIPrmphdzcbnI z58X2ozMM8B_pA0@QRNvPRH4Th5A801cN&0Bm8W<6w`6XuD;-EnHFP0YoG{Vea3#*K zx>AWhU7fd55Xr0WzB2AC9j%4w?Fmo#7I(B_nI}f0{qKS&SO#RB6Cb6sbU&4t9V8Q|qzOz{=MNm2 z&z8Q*ElqMp)zCc@*3L(O0LK`MtaAt}=ElbeSAEP}d&=qY!L91I_4*Pq>_-fTqWkX9 zajyP-u-crvlNL}gdfyfhVvkR0HU16Da6WZK|N6JalWHWN$u}!e9)+=c1J={>%EwY5 z3PpWJKe$*Exw`pr_FMII8~j!xqefQDj*lxnWLxbzt=dA--r`UB;*f}c9Z2+oKu+Iu zOf;{!B)$Y1JK$ZEZ4YG|E`PCvsKJD&Xb^&S4KZDogub4kkS1blX+sAw3s$3R`BgxY zme-b7tkprm*wjonM;kQgP1$P~zTJo^5D*jP>8ty?HJ`T*Iq6&;Dwvk82RgKi?DL{N zle*aKrm{7-x@lOV)io^*HK{2i$Q#r*-jrA))Ray6$G2Hi9AZ(Bs2p-JY}6#%l2F&Q zt!j3_DsMCrVK_~!RMNIb@A$0VspFT#OL#P{a>~>1V|m^N`O;f7WD*phvek5uHEkxe zt~unf5dht#!}&n@R0s8mli^W@pt66~&j*j>pD!;m9R6dZ$$av){P|1rEw@iLU-K>7 zPI~LyOZK)%t8ikDwQwBb0hmKFY^@OA|FWNu1-<2VQfT>M-x@RTnz~nJp39U5Rqza- zqPP%O#cZ^W;o$Ihg~t>vdd?GmZa!a_gs*~kIJ1tA`uM0Xx|i1|!Mx?7 z+%4m&X^AnOtR1>n)1yMqrTisbZT{ZuVfdyYVF4ZIQ!wp2^3$_r{%|yd=sQHJ)oD)8 zzU7>9H65$wDp|i;cH_n6r+^uO`9?I|>exJ&30kvoX`XA%S**#@x2UhsZb@8H*`KCvwG>I(8w)3B%kU_dewc6w;TXVv9-&ZOybtSX zq@&}f=FcrKKb*tHty%Hgw18p3Jv>yrWE+5NTbZ&7Su$|NkgzOjt9IJ#Bc@~IP-sEH zR`PPT#|K#?h*611zd)HB@7qNL%UCHnQN~KWeMIIm1Z|IQw-H33(1U#YMg{_~kzj9+ z9^3Je~l0PsfpX7xI>$^;(Ok5Oy%5R8IHQomCq z@K~UkQrtwnpY>86`4g?M`<(x(9XtC?gtPQD3G2p`=9|xhNsEx*JX_83S>7R~*ELm^vJT zHHigE_GtS{C1oa7*#HhY(r17ncLDXnR;L`q30s|rNI_UDj96&TVffnlqi%# z49e>6s5MJR3>;EPkCAYdji~NYWB$2+yb$Goo*7czxqtkclGJ`z=c)W<6go1#Ae2@u6rrM=y^Mb)FN2C{%}IuWx>zCA{If$h zT@w{n)klA?3=1KZR>%V(lX4D*LU-xAHq}hlEf%PnuuUMORs*7Jvk6XtuV;Fw*_D?b zZpN30@ua0I6z+NxkLq}T&d2Q6EZtMA;piP#ZMc1@Ci*aE;epnKJ#tkqv^X1%8tiGv zz0$B&8oi|T-1yNHeGlQmB(*;Le?;E^Q(Qah&}}>kNrF99_a=*G+Xx8z?-t!g^-xMv zgzgWO!7M9e7cR>e9|R5;+tV_$xe2_-c%pt+!u_jKSk(xxI!;(k$rlZdw_uvN|C0D6 zG{bMlJORyn;`hYqLjh{E{?60QauBXCn0=j?0d5WCEtn>eXa(-L(4G*Vz%X3Futpm` z3T%K@zEM6h3A#T)L{IV|)w;OgN#_cd%-cfnL$HzLeL(o-!?Dh8n-mAd;8Fc)&*6Bs z4MlY;-xOy!GbB~P!B&AKrt`_6NutL$Mc+8%IZ4cG;x}fCzJ}*1?93Y=oEmPn@jSZl z0S*SRs1rYyS=}FBqIq06tJs+|sMo z8=H6?eS*LWth?*LLNoV~ zG`%XTu$=DP2=7?9*UDGLXQX-}POhD9vC;?G}AO^ggRzSjK>qc8C zYPH_0Xsx$HDGl_T*GNj(uy?mxqsOh)qY^zFjhCa*KYy~IUO@v#;n_SW z0TBZ7x9|72);#-?q)7_s@jai@PqXKF=9yWuX3d&4Yi8E0L3vf@*NAH*jlSUQS@X?= zZAcbc@{gyQT-YcO5(tY*qZG~U=bSxIoNbl1Z<%y%CtW~^=WtFqu+zhHujCV9KY_x* z5Dr^dNOkY_z)t%u4t+i;T^TH-ZkY^SA0H3&P>s$db#3p8&o4cyI!)$1t7x9)(Dbks zxvSZ;7EHNpG@rT!4#TvxZOqy0zzJh78MhdFWu6UcrI+%PkSq_2X4WPIWsIZ15i8e4 z<$_Zr(N+^f%QswfJk3@*Q-Yfj({cqFq|4N1kwK|fnw+p~NrP!iQlqB|S>=V8*u1rh zy`~X4kDfG}*c?>~`i|iUtGL+o*MM>gDKZPnpLQsYvU_F3Syt%Dx0K!m^x6DgojEJ2 zFY-b}<0=X7uX9KB?h~!T-gX7cU5)A$nqd59W~yFpAiPJ`pKJq$nMEbNwe)E=6_WEg zo%h0n*t()qN6(_)B<8M_^+okvELJC|7t<6C>`24K7T68T*}^kg5 zKunt&;yNLASbTC7y2BpZaM3PR>rmLCivOk=G>&wfjfE>X4+`hbiBr~_Nx0kmhBh=E zy;t9DL&vOM`&F2BD^JpcdC9yU#u1cl#tVP&p{bvUg)MBS5rR4j!W`~Lx@aj>ttdm& z)M2$!q|Eg%$)0mo=XI)YOQX)az23ux-0tnNqRB6W*X?Oq=8E3lBkrY zcL!#4N^}wH#>!g+M1v)o9J1YB-MwyT|HR%(!wBaIY|ApM>_LN_Wl!RqC9{!axl)vk zxD!^~=y;v7o^}RXMco4#Vp+_c(ARKEyS#)oZjr@R3UrsH`J804iwRtG&#|T_yoqnNf%NqF zxw;y)s@#6cMSD|~i*<*V^WzrrskVC_Z6x~E+)X*wf!J?pWIC}WH) z;~HJA-d9a@6c@iAmrNiMbG&IaGIn)azgzbR(ujw8K2N8O|< z><^W*N6~XUdx)x9Z+=q8uT^gso;j2XAiVf@N25zGJgj$iM6iQzm_ zi}RpfpTzO&SRW<(0lUZJ*R{uk;f&)~w^Ho!`1L{0HPiTY_sgw;x;wD?G!j_-z=;e2w(GAAj$em|^_A9e#KM_f*BTCoEs#Ka>q~|4mbSMefor^#QoNaxOAS>5EY1d zyA?P=ffHWfyS%_pPSSr^?_R+Ki1~0DWrX>#b`NrW@8y>T&s7B3!rA&|I(&|OTBoqim--y|aFDjes^BlXkh+u! zYfo4Z>(#thNeBlC6f&W=aKyqws%Kiu;?0ig^4rKUCJ0P_Ul_j-qKu)%G9qJ}wfxew z&3!dxXBa%Z;gUz8Vd-Ih;)6;p%zZoCZ)58F6|$GU&kwIY^L@zR_{>*J1If(y=9x#Z zUmtDaS~+Mnv}Z%6nb&;kwlML1`2O4ozBme4ot#NRq`ST|E=6l{%l5joCSmF}^S4s6 z1%3hZDN<9w$fvxD)eL>H$2MH_u&Q&=Jcu~saC@91D_~W~HtH2xt>?B(q_w@O&1}9~ z$H)Bg+j52dc(AFFE*GXaySo_%w);l6sX3zgNVa@N38gCRV(hIgiY?_(Q=UzD5 zxY(u?zBRtNAlOWGZy~6HJIw_7WX~l+Rn=IN6R2)&a!>RFrXxUBByDn!wMps!;jQ!) zo9L>87zs2D(%II`y*#K>a{M=6(2G0RI__t*bn!Ocb1P+zl{B8z%4B{!3p;)CsM+Z7 z5v2%QG8Kk1El_R9dQiR~6qw#xq_rf|96RS+(|~V^-xU9x22?U{z*7*8n==v&4kJu# z_ca39mWvbv(Ib0+QAFCNQDg@XqKF(}S6?+cO;dln87?U(gKy3l)l#?75q&=UUo*Gp zN621!KeiRBHY(6VpwPrr6?_R;C7aQ>uA&w98SuwBXv#0VEeLy0Uez3v< z6PD211WMS1nLM98gbsy1a3$r|=mV8_xzuBfqr3C>P##YsCZV~u$CBCXy*`_remW|CV>B%fhn4ZUkwI`AFwqx5lIiTD z<>~CBAYt|kti_(``9oC2UIhOUX0JMuUy0SKY=0QgWS=10AB|rGS|c>`*C@C0vFPcX zrb@GWw|pPA-g4X5cj@aC}Jh9%|aXKXk*u9kJv>@208|7UF~2HOVA z122bh*7U!lE<{xXvuj;)19n48ZlF#K z!m_o3f?Y*J$JJn=(?$eM;?yDA_U1|3A}-4_^`6lfJ8{DxQ_{t(JvH*JqkjoZCyDiX zi8|yO*ZnmzB;iZZ&LpC#ZI9l4|6_1)dk;HO*W$fhiMGU z=}lHP?GXJi`uKd@nG_T}*yjpk%9sn6bp)U19{8aeyXPjj4VQ0wKkpa_5&h)XW)#;^ zw_!u+B1cHnUE}V$*W^}eyHd1Rll#9?QdNqM*vjnARF~Wt zpl8ZjsVlfM@EVcH@eB72)W;}~-oC8dsb)iz1D(7eJ4`=f70!%WfIf;O-tdvQjUlL; zWcn(z%38V>on?Zr@|mejUV{zXhRpR8UgF>fCsS?)GV6vfiBHg}dcDQ>FrX-{y9XS5 zoy@qyr<*rtZt@IA#II8Zy_GXWzy0H1EUm@5QSnMBYxKz%ObncGN+Y^SHe)t{ zx5}8uo@8CK2mP@0k6xQ@Z-5>J(g!dWfeR7#8GX?m8MRRNkP97dXugleADwMSwYABb zucjgcUVE3k`J#a|S0%X46Nn(?1ZLDC#+%}w)b`WS z-)_dF1sv_ZU)$;k*Zjg|ikTgevoX>nk z{GIsQlonvF99ffZ+qNdx_7^H0tr@yh$yuT~r4c_a=hmn5uW!~kZGhvQW&c|(e)FrN zZi2(Cv6n>0+$J8hI?=JQ0p2vECWx-EcqzTu%&>sNh1t!~HHtLna0rWwRc>AISJsqk z`z_?54yK0dj*f%k#d#vZGFo)I=KKkZUY$3NBAwKbatg1|D1 zP-uburknD1Y^6`tU=+-*Da^dJ?uIX%5Vk#K)nGEOpAY(X zp|;+)`ZF(_3V16nwsQ1+i5vQ=Akg<+P#$1l-6&OJpc=Gmr&VxAYT;t56jzJbCaT;(s1!5lcJv5aB=sfsAn`>>`sU)u>O%-bdEBv z@CCNgn^Ph!` z>wl+AsvTg>jf2yGd^aGI`BW>6#6qVD`{e3e_e-r!-e8Fd1Nx|t7<>C^vHYTh_wr_X z=uL16a>z~=b(lYty0-n})2+5DNMop#pAyYufbMkZFywl12Dw(O%}s=cdj!+Ya% zCTC2%XZtusQ=3iQMD)jZY9?&%>wSnjcOe}n%MTEmAw6u~s36!A>-5ml;q_<5{|JHU z>Gn}8JjsfN=^puTq=^$So`6;5U@jH>yrjCNOf+2lB^tH#bABjpu@`5h+9JyYY^^md zziuu#e(9^?0LhI><_zC|hIJ5SrSLjH+T=}~zPYu@FTQ5c`Qlrc+TjY@F2e3v&~WkP zfJ)wvTp;%eDOy0)tZjj*gzRDL?TNn0N)d$Aa4JHwcz!uw^b6WPO9iE!} zt+ba=u5kA>$7ODLy6QF?J}4P&z0o0#&jSfQ*qM9T^So?*pbsQ?CHM1*P9Y^C&ACN~ z`k0cm^*3C(;_&EP2uDT7rvUDGrd3KG%7DWXb7*wGA(gqalIXypTl+@5s+ng!X?@E< zR)5PL79hM*WmN5U^Yr#VFh%Ygu~JwM3a1j$kgNhSf}jFs ztPLG-YV(gmnbGK5Z?oo?U6eI{8R(}Ss2NOE0X5{NuY<@v2GB9XRxUKa_9s&SFLl8B zP$9RbRd7hX_oUr5CPSb6(9@XWdZ6Dh1^TaGHE5v^W$3fBp48Cs=(4vOErzE6y~Kg) zLm6mkp`q-&`94oz`w|JUO25aT-1L>?e1)5XbL3QTa^~SudrY6?HJiE2A`9IL3g!yW zb&xvfXd6c9f*aLO+AY#|RF6RjqHyYN(e>P)zMZRfw-4>l-%0$vBz@_xHe0cwq^ku) zR$2xmn62lQkA}mvVm#?m?W1)UEX3jqJ4iS3&P$K~X?jyh`L`M-4X1K!$Sk_nQunUeq3Fy@#!AXKJ8DNpoyOJdXo*g6684D{RyDZQ*JN#Bxfb`*VUm9;seiSd8i zK^Tp3;JH%bYbxNPk3G$pONrqFC(D|AL3LzQ8Ev@g`b~GJqVAz(1<`X74_7ss=vR91 z8!i2-G9K2U#;D?-C(V9$mF@daYyUJR43cHj73z%tYrh*UZm{MV3(cdJhDf7&on(^h z_Pg1q>C1n!{nJwoXOq@{J^S5bZCtm*E_-hOv_BYDw1#OkqHd+wbNeUHWwN?b^KNUc zV846!0oFi@`}?wg+HW?J6qMqxYyX6Zo7VoxX!fMqKRrctd4l#&z{nO?L;HsJJpAN85a|hs` zCtx4+G0$G!5N%D?V;Z#(6J3app53l@o$7hR656Eo9MAtr+!60K|NPnWpM28{`LBgl zsQOIh-#1hKi)PP%8D1%Ni~p&+&%f#3)ta~F21ezJD>o1+C}hU%Ei=JMAGS5?P&b>< z2zVSPM#=$_K#vSYW0qr}o;1-TWB(W90X;H@m5z!(dJFpW7JUH@%V!kBK<}TM{j*?2 zAHr;%O~)3Z>NcDkUq~6lj>m`xY0tBQAo>JF0shUN-=bngac+&o^d75F!CdOI4P(ga zNR9oA#&1FOl2X}lv3AT#IBHOp3>z#mfDms=H(XN`F6sRK%EaAl3-RvD#^AC8>d`Y> z^@;TsLtwz*v)f~DMMXx3f{x8=4vr57w$X_>ps2^Z5Ne7c#k zyb{I5l(4Lj5ox2lZw-~;Zl@Z*R0jiO(lWw__GTgJD*@-|MJO%1!5~SpuaYFRNOR2` z4W;Tu-@E-UyE@twH*s^)!C$hM4F*b2 z+XGC6e@OV_RM_|Y=$5BmM2!_4l+jsNm3*eBGdZ9hp7r)>wcNsttQ!P-(5ZWwp(&s8 zvlD!ehvlD63Yjne0O%`WgT}e%C5w<#qj#q#;?V#RYh-~X2Cw1hYGp;GC;6|wX$dP z!p4p}7X2&=S6qC#cV6@GiSy1s1e@Leq;V+%?{vSdCr|3jPJI>_W-Q=R3aFkRciy|g zoPxE%G|9FZyCJ%M=N9jTu!q*BIv<(e@EKcHe`B+V7;Z;e&)F`p9obxWpW{4p!Jb>5MKCw8g`hrZ zGYQH_X=lWOzL7Z-bKBAC9NMX$Y|z1?F+K|68~UVYc@F%cE9NyC+b* zzHVOUT_@*8_8H&iJWye?ewNpb^Owd;;~%T5c+2lg9VS)%+qJAee-i5pQ1tVKsxejH z7Z#kg>ffFd>-Us#oCE70@qZtM^)(!6^?m-_Sii0w)^EnS(sf1vtI0mpq=o=5+I4GP z-34!tH(32%xXVbqo2JF>+FUygoM0EE;<@>>+VbkgSlz{pDfRXEc5Ijk@UjGHzw52L zo1!!2^Ov3X&bfar487;UBfN*$%5If>oj7qkr1)7)irW5li}(AAd|fn4|N3__)YN%y z^7S9B94PVcH1@1awx{xS4*hH3(I?!$zNx{mc4(PP|2oek3RVB+V{@qbp7yUfRQ=jV zlB$P3wr>7zMT^v14XPEh~o58NS_FwnP`1<^y%%b=2JEb z`b_ILH_wz`{5DJeGY4lV|Du`lx1wI6(c{7c4dy1ZN0GZ&&6Ty+bYS%0A2q>WIh;-1 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�H`N^2cn62f{pBo>vp~)QISb@0kh4I} z0yzuhEReH6&H_0Li^SHc#^C4WqFy-GwG3ejqp}*UCI34||2@ZLla6FcW zb$I{qxv%_LXw&?3i)?~{Ru3DE>w@Kv2VnEh&(Fqds^jo{1OC}~KfR_t|GzU{sDhsl z)n?43HloprWe@-Di|;M{uWNt&gUj=K-pm_RZgg! z1#%Y1Ss-VDoCR_g$XVdu&jQQ;{Zz_nl(Rt20yzuhEReH6&H_0L9F`V1+er0A^XC_G zs`yjDLRnzh3srEg+?)k+7KmG*Bp%8IauzszEl?fW)V6s;T|-S{vW!O?RMRUr zZE6l}^-|b#&NaQIwb`49@KH(mk-nj^rluv-+Tx=-E{U$bt|636kSqt&HzXDI;-vh| zl?|IiNkt^fS>ISyU)SOl!k52c^R(%e)zv;lljUou+>%_p^P(jAYMMciq@Yc=k@k4` zQ0)dG-cXxdqSeRJTlxL?RPT%SH{SBi7EZ-K+x+KFL0CRT{E8{!&zmAXI7R%Sj{aAb zbN-N@)PUfA5ZnlYMIfjF!Tlh(5d@1sPy>SdL2x4o7J;A!1owjg z_))-L3j8$SEBE0KMI5rfsr-C@3pnOQ$N0OD{biA(&spHGv%tUV9B_ZXFR&n< z;xXj+c+k`fwvrP6bC9X#<8{@^Hn8`MCC55WV_R!eTkD3J#^x=Rt)9eVJ>hgg`yAs> z+Y;K+*zB1a`tM1z^i@r5HYhMtzl{2y_HQbAHZ@i@drdLb{8Q*Qv^CfJO0mzmzUTu+ zZIkjtC+Vs7(7ShFDhKdsGBaQz@*HjdR!|>Z4$WEMaJ0awQ~2vt>$P%Y;53R@c7Ev3 zV$=Qc2a4}+d$r~Jp}%~a?vFoEe1GNK-*Q%)41T%&{kTn^Y8;trU!@&4Hu?m!{L*!s zOk+I9q!((P;&70GCbRaoaH{7VYft7m6o32eciu?=1bDvXvG%YqZkP6C?VoQsl1ocq zGXsgRH}rhVWBL1`R|bY{xeJ>UAj(ERQE#zH$@`QXAUhoBq4_=cn~7|JByNz3sBg)>VFO z)tQ$cQ4!cV`1rXW&Yy5U{nMYm|Lc`M?7z4A6F+|BNAGL@-O;@#J~=exWo6e!3lPaY z4lgl@e4gN3kIw~M`{Moq>dcpTwEZ#oPYt-fMjz(;eTtfo|LOkX^G09dd>?Mnc{bpK zMLyi3r`UiGzSf6ZbgK2RH(CNhYaDM}E}WGG-e#$c|5`WpLrZ3%O}F^L!ULU$*mA8r zerVGzwCNT zA3F1!nj5R;w}k3z=GRouzoL3avP70XIrhM@{gvC6WanQNrXQ6LpXYch_wx;{JuHmd zrLw{ERxGh@cBtez(0ZJzd@H|&aXow)4i|s4Vm;sTSUXtg?FX$4gwMAe-m<*mnE@}B z2tVKQOf~;cNN`{wzh7HD{Ls(cru*X$6!*(96(7I-tsH*n&u`QH@dt|M!*IUQ}t_=t##O%$Dbc*fKSuE5etQ49Cf7f` zf0^jHKH&Yc-;>!m|2{=OKmYz}f4ZN)UtWKHzw_9A)K(rpKYzMEzn{O~o_^dfqr}V{mtLL?RyJr2EV+1dHnU~*Vq3Yg8zF3KRv(k z^8Wer`*DByndJA|$FIM?KK=6f?cq=N%ja+J{_ijR_VCM>iQb>?uWvs;zrXwS_2Yhh z{rvp;`s*W;fBM^-zyAIE^!)Vx^8M-l^8Nbw)BXJX_2bW<$=?3<=Fji9x4%5Uz5Vs= z_b)r%A1df=i~mmH5}z`D+?SjY_4}zm!(xAg4?o!QeeB}vjdp%-p?yxXxc|A!zaPMk zx0c?Hw-&ekiN)>sWpUfTTHN}(#qD@vaXY?R-1a9H_v`t870=`^e!cdW-k(2*PhkP$ zSO@E06;rUc(RRITD%{3T1#P>XD*a&NGx=Ah{>xv!zd!Ti`%C|P>+hH6UyZ;0UtQoq zmbdO8^JmKLZ!ekXr%InRo9+DR{&|x>-H-d_@#nX=+2fb8c4^c7d@Y_S-O?Q{(BB^Y z`2Nc2*WZu(`5kO|etw4<-(UIs{&leO*m;xXv&sexwDUe2{RSH_(9YXzwEsC|rA_!h z0`0tYDslbxvhz|)@1Gy|>(_5jJCC;c?L67ycAji;zkThz+om6G(2nQN?PvdL_dfge z$<*Hc^aqRk>(7rLEdPJ^{Qmjk;XZ%KRKMqBs4#zf&OpB3$$t6#_i+)tkg&y?Smo{*B4lA@Pp<5pPt`m))e$V-9G>B`p>T(YOj9v*4|$heWUl` zt7iS__j@{Tnt0E*Kk%KE%i8V_-MG&7JE4}QMGH4nEwT<`&l@Ig`$7vDR}-piZEFs- zRMplsr8x$RBq@LP8P}F+*A$8jrG2-0iopvFe7%9MHPEg-*g5wbO?<#W`)oYd;P%=5 zbl|lnj{O(AGV<_0yBm@?c(VzeY2XSV) z+psm%yuiWX*_F+$PF(}e-L0z*gc{nm1oQ}Ad{E?Us%vm+L+ws=O`FqJv(SN)I8|*e zt&Llp%B{^yoT|p=)=>L~EyamYQ+-=Y99t9*Eq0pgTB^3f#p4XvTgq2@p% zWT~ld+~%}wt81;Q4Ky|cz`D7usnrNmeo@7ug{Pmh$f<2@ZE87V{`_s*w#|byaKM(j znt4@?Tjqxv_$5?zTUBez{FcV5migk*r^BP?&2MS0nombciQjO} zqIvJF+w5H7oGjEQpYcxTU2{*CquyEs+2K@GwzLMSD%)B@ErF&+D$pEgZ47J*1sdAw z>tRR=jy-b$*mHBkmQX{hvpLidYObr=&TpF2^0vzQKz*oTb8BrnLP%A~ zsb6!bvZ@yR+8QKOxv4$`lUIkFtIJoeaOQ1pXxktsx#NKK%ba8~|@Hp1__6 z#!q%PQF4g8CoBiH8{8bwZd2`X>^9XNzix0jZrz0SXmx|=IqLJ`omM;~$E7QgGrz5+ zd47G}rum|dGjCH{U48ZGIQY<04Px$w&}M9Zghiz#NbNMVpf+JIQ!P$)-PXF6I{4|P z?Sc1(nj4+7&N|C^)jJmzZ{hC(`CTZ#i{y8){4SB-rSiLszokN7D)gm7Un=yaLSHKM zr9xjS^g<|f$cQ4(z(41V0KOW3w^OvGWpg0zDX(|h8l+a?TXhX+<@NP}meA&!%C`De zxJyHIeW-bEU`yq8cy49&d(f!Gi8ff84MJ1buz5pETT>I-Ik*H`TC3G~(oELI3#e|} z(uBmys>>iiWmV{mKq9TNDbx@Ui-SW=;~9Y~T6P@m;QYuyePd&jH2py1ruU%9v;@%l zYty)~=M%?Jd&mI;Q=`jq{62aBhj6uAC*YioBmFOP&S`|oPI-G%^UB65XGMMGX6K?% zl_6OZs&Vk2nVgGSo1r5?1$-F5(5%G80wxk1R^pBTo0&HXc<}1V*2)D-DbpGF_LBdd z;`S@rchFpj3>4w#^-dAuVdm<(R`?7WsM<=rwk6PVSzS|8sCwSKd9Od(Nf<8Gs9<%p zb8e`znmWR!tuR`s+G(vt8?Fvqu_Mq_*-%#ncM!q~BA3ButJ|n!pi-0P1(t6@bs}co z(T?=~5Vbng9-xSIErELUD(urx{}>MF@g~vH5DowhG}Z(*HMTWWx15nkp37c`Oq}&? zPD^cF4Z6TBAcEtx1U5rL=_$#zwKf!J-QE-mwA8&f~Jnzz2ThID_5^^E-k;vgf1>$v&w;mHaV@$+s|p-(p1?TTHa87 z(YDGar>3&59%_3Wzk!~1(fQ|9oL^CHonM{pbuiWIoZ{l*1;q=C7ZooqUQ)cYcv*2t zap{8M1q&7|T(D@t;sr|YmaM{9=g{6y%7cE${ z5J$r=UbJM<(nZS_l`JYODpmn|+?T)L!q$$}*dmn>Scc*&9_ zOP4HLQnI9UY4OqpOBXI(v~=;(B}c3Me(IzU5ad_h;n2MLLU%<5$an)YDd%L_(5s$ zf`y9~FIl>*q_lEVRW;gyr|WBL*w$Rx6cE!(7N@eR3ayK^-PXXquBI+jUmXyW1-8|~ z$VoA%=1S}p-x_jSFeah>)CacIwcwQ4s@gLGq4p+m*1#1IW5?V;4c$i(xcoM_7CcE0 zm6ejvJ#0kPoFQ##V_;il3;G3k)K=6jyS2I6(Xa#K*vnyeOH(~s#L;X*!cP3Fm?#3crw26kK3XnYriHgmwm=sS9gd(M&>QHm2Mq|tElr6C4{EN;x{q1&c*3>5RHJ#3#E>lGrV$Q8=x$JFi zjjff=3b@b5 z@#J$u4Rz=*&u(tKEYwg@2XkDs9hz@h6KZK}Ylg2otD8d2qLcKIpuMoM6>$wK8k;Xc zop7kYaB$h%>l*7-^-CJt>Z{{pP6K=#wGDou*0Z-)gkaRQaYu40F58T8sito8In6lZ z2F&9TE2PIt;3)Nc9kabuMk%BDDmgfLRb^8Xq(X*^beLuax&Y?IjSWU&iX5ue3@hul z)U}qwsY2Bx#n}O9;w!4f$nj`3i$4|xudY!pj<7NH5jR?r6sssg!{&2&pV0ZdPH1g| znMs7IO^$}mT9C7Xy@7L4Z6yb)gmEh>TWgosb8y>U-VWbt5idX~O3xaU+P)B%=s=d0 zji?@Dq_wRzCC=HE)nvhB=fY6yw#Mem;+YLyP-a5#gDn{GFI$Om0#&Y#umZli1{0bPj!im8AFZSr(MIR< zAqKOOi_ouy7_kNx4>c>A@Lw+rPxumaRTnmv%Yco%LCI?+;m9nFIw9O8=<6G|UBsc^ z;}Om!&8WR|YD2Ja+ZLOhQ#7Fz%Y~ZHMo&chV=Sq|V8rGL8*?q)Itlx7(9G0pbF&W*& zDp!uFtf|s9wsT$EP{(16V@#-ed2>}QY~+bq-GYg$_OcKGkKV0o@W2PftDTEw5@=$R zeDr)78(}3lmCdc@M;kE$pst(IW1;#lwvU?X9&AULM$6bu=5-Bi+VL@g7OqFNm7@ev zS*VGGS}tmXN8m9k6s*KT0u#ikxIZw=L+tY|rG-mW?o_={Z)MTW*8roL??; zd~{XP39aEI+!{|h6LcR*mRj2qYF^zWPqaowKV~|5%jKLE%h$A_a+0|40Rm;hsm{Uk zQ*xT&mqgFDU9Gdxx)yk1N+L`Mn@L+WT|lCUxPW#llSnev>X9{0EaO~)(vqy;#bRtO zHiC_Ob8}@qMU>jNHQ%-=H8+V?${K>#9}*0lbIs%L+1ua2hhM`h!RYOBixawqxB)fB z5W?7TN2V~SahWGtMr@|AyG0XRY(kP@ty4?=*?l~AO)t}Xd%He%p!w`trvJMX%Xcbh z^V#<(mTschan`?S#t*)JwDa*(^L8GWcenHKESuq`BeL3b8%bKFh%P>;DvB?CiTm*Pt0Z08dEz6`r63-F)c^OXVef51SShATrQz6|tU zngDR-V>&A{@XHD6Y^jjHB;FbW;y&r zQ2w4Yn@880<&Bw6yJN$jFo%=OcD9aPnX>$$d=i|VPT|y=j+2|2)2~dq&m_w4zj}_v zo-?sCoo2^|-(o&bg`}Xgx>@L#^lRo&mHP}tu8FJWSZvh9&P@3xB-MJUc`kQs{-tIc z?kwl8Gu~!JvCuElT=Tu_8UtCl4R14XWOT7*V4gx_t>`-7laINlA0I%Xh^_nZk|Z@%yZr@qWCe4C*@_SGsiIYmtPakJ(PPJ`<+ zI&1z(%3+Iv#9f%FzZQ`BrC5^WpsI3Mj6}T$)?n02EwuvJLXvI0uxJx*P8Ix&WhIoC^ek; z_4{gZnWmK*NT;{qH<`GsoPNC_-WF%%|AH;GxB8KJIru9BsfG=|^jt^&vZ}XD7b@{K z17W4zSIx0l#Ke;Q$4&UE3eBOE8czKBt<-C%zic2m+3@R39cCqHu_0b+AkA&VZ}u?C z*vFi8kxIM4z?n`{LVOeQYw-<3`<-~6%N-k@YdZ3*v{+-r`;>v~iES9$59JSr9lau> z`+eR}KWiWjYs00SM&K_ikv_(`2>u>7kc@2j_3zQNtQZX%;s*?b9v$oFSnMYzmh5f# zR!)KNr<58_{Q4`Q-%tlleUXz5H<>1rm7pIp#E%;&8k_Lzx2gbHF$x;u8w_M^e%yqE z?^Q-eph0~q^ANo{g%w&{Dy!ZsSXG;nuQrhC+3@2gE-UqBU!f|TWFQ&YaKyxA#pttF zE2IBsAnjzs=XGcr8LiP^;@9s2sf;d9%gFQxQ!}dV(6s9ega=Nnm}9Y9O)Ta7f(bY7 zbmUJdHJteM3)aI3~;#pt0vC7v{px}Et2jobW1h3GKcn=^M9U55OV29lKxAN{5M zkg4v!m3W7NWMsq6m-mCw_OB>$kAbKp_o_J-`-+Jr`#}>vrC)O>rG^u~exJY8P;W7i zoNV}4CN8U5DE+DyvdTa*vfDi&BU^2oAYhua>7WQKPVHNHRR_XFx1Nog!8sQBl!;`8_M33bOPGoKKMnEGKU7NLZjqOmNOBLD@MbSz zChlE^_!n_T&5jL!`a#Xj)|vTn=mA6h8w2TK{y)Djl|G~tTMa}>BirX#>_aA&%H3$f z)jy8Q1jUoPM4?S)Ny%6PAC3N%Plex&QvzXB6Ce7tz^R=_7Y|?-Pa89BOXRJ{LiQ2 z8sqsg6Q_G;%@C4*7zjI!UNy&Jd9yWjrnB8CFyU_;p>ax?iT^`}`f&rPvJL;_$T+7g zI_{?p^+|d0Tw`?%!d;SLb^vGfC>0T$UsB>r2PKH64FYX5xRNk><+=(h@dY zT%eL>jNKQ6G z(n14e^t8ySCX%Y1Zo(a2!b}p~Vu%Mlj4s%$CEjL9KyQ&;REi^HpP^ITssr;M%x?jLuZT-dmLXMZNKC zeYada$D*$=(d^StGT~!yO(M-y!tYE8&l*U*)3EACshL>4&XjzHf!Q?3i$ANRSz@A~qZ|aanbBpZSt9y2C(<^d}Sk?3edPr0*N*UmHk~ zYaevZ1|d=#5ra0g7nRgDs_c{bb)myTxB4%+q-$r zi+-n+U;j&-KVmbrl$ZQXsjo1QlG^Yc|EpPl?}UApBzFsyP;`GqGfE!vp49D5cEgD{E%X6q0WlNKQ8V z)GSTQ%2!@FTZxMdMDcj*Z?R$%OZGN=>m1FYl$iwWH`Ko|ko9H5u8E_d8GUh|AwKfR zc=32$Z?Sw6%aw<>nDFs=Udl{@K5eK^JSv{6XU80iU2I}GdfD)0$9O3-@$WL!A4}xg zd*vL9ec8lPej9Esi1PHcEx6ZLx#Kf}HTTHlfL7YD*Gx7hFq5h$PbPO9FOK`%Yyu~I=EbV-;MV?9`wb&60 zRTMI{;n$cr$!?JaCKB4AB#V93OPWcMpBv(17bVKH;bkUH%FM**U52Y@zrrgcoAsAk9!!sEt3`#hWO&MtvT8p8?H2QSxI#AdCK5y z1LJ&0lz{Qtveoxv)rSu_sI{eZ~LhfArb6N;$ps!bJI3&#_pciRETG z8~*-kFJ&hFvkZrV1b@sWEoOPr5;pANpT(^6$W;DVd{5=ynvOpxGs%DdMXIf9ASJco z|Iglcz*kjd|KC^gl0ZU8c_v6pP^t)sB=jPdh5doVf}$WqrKu>zprDl4Fepl50~8b+ zU_($;z(N$INr`0z6_s5Zth&YyHvXqgx$ix=H|y^H%IE+1aL+k2XTEdhOrKkF{b210 zA8XOnp{(6XDAd`mDG??0kx)N%mO4z3gbI>KeT4c!3ZBPEt%c&mq4;-3=+Z6rK3h$V zLz;uKt!J){A0GFmzjHBX7sOxVrNkN&l2Wq3d?_mfeM8} zU)w(|qNJe`igu0{{-F(~zP#JRQyW=(hfu(WvsWd3Afeda6hCK^#`kebyHK=O3Pnp5 zKlOD+qWd6T9#ufwG*GFd_`gUPc~l9XSc;1O$yQXt8JpP*tRux=B4LE6gsUt?#ouBp zDxtR&3=tK7wk|BJwUjX0QdGS0ijTXW_X)sL7SI93SL=$Z8t&P#nu>N`p;%Fhzf;0| zb*#mryg>t%I*R|+0y@*H#v8rC_BR!Z7OfG!#V%d8`QE3WEhN?Q!y_&BM(QF6Hw%UC zvSNBfN%J)RghZBtrdOGJNV!fBiY-X-Vp9fbZddZ)2j{+igwHQITcQZCkg*Ip^&GKX**f8 z4bsF!NIn*C9e1-W7YM~NPmd^RmV~0Ew+cV>BU5JYcGpLxGWg{)B11(QB@}yL0({W) z^67Z7=5nFfu48|(TZ6Af_n1AZ9;P~q&;3}JuH1VO{gWW&Yov*ZkbJz$@k^XdrHPPy zY#iE3362wr9#Q-d3G>y{0kDBQE!r)KKGC_u zajz2gNgz7z3*m=;%FO~+6yE2;<3xF)Py|x^d=2Dd5{?IgCqx9m2J$TLxX;=Ai9*RD z;pYqW)h6PBz@h{|o)$eWiB<|lixj`BHWtML!8%X?Y#>jIzLi9c_Nq}~vNJ&VIs5de z;A5PB{O_#2QYe*8_+3JMdHbXN4Ak?0GO5&gQTWEcXp?-rqtsrsPZx>`Za)(C6AEtGbFO88s?5&nSik0f&fQuMOEIv%|^qR>Ck=%tC! zi#_Mm7sQlrh2re5`1vWd@j_J`(xgO4K4!HqCEp)};_2zH!Y@tLuJbNj{d%n2UMK=7 zzMF($Pw+g3EfM9(LUH9bBch}mH9Va43%|d<_8n+?)$zTxW zlu*Q1{QM@If;GMHpBC+PCKdQcN!1dH`0ojSPg9NWV@w?IU#xwZP(->z_|kzI$;Scc z9MPU9l$K>mSS5it?Z*CMr>6Kc-c!>a!OuIDO~x}U#rKpjY>%FIH{*fuW&wlRK%SGb z0?O7Fl{$*Ifjmz}Dg@wT4FpeX2)|b-4US4UXelZ_Jcx@xib`lCfjHbMzQ9)Ws;NPu z{DcN7b&f6OoNhUdDKv8*YoUdr{g_Z_JjD?uY?44fjb~{*(2xW`lbmW%EIeI#=87Sn zJyMt%4cFJI;IA_4d6o))bqU8oW%_uSr_=eY{U@P_bfxhBbzyCgdXHl5Q9`j>E57+?ja1=% zD$qx?2MDDlof6KJK=hsBTa00NUu(aiipy}1o_KEgy zLJ>*v*I%Rz^|4h5UBb#ug@U0~Ga^cAEumOp#lkNerws*7FGK6Z<8Lzfr)d0%iSR+w z3;!*#W}mSN+^3}d5{k_v^HR3EMkrT_7yf(k`0%)s!v8|!PfUalnqK(f%h;++p;(cM zzfZz^_11VGD6#<9K%NucT1oT|%Ob^JGM=sVWzkKd{E|>Cn&P`ps0GluqI|1R1X6sR ziM0S~Bg(^tB9P+WuMN--qMSB~b4Q>*3BPkPhhb0hK6;%wg|$BriWA6rQ#tI#t2C02 z8FPnd{~#3GyyBm^S|j-w8Z)M`cA-#2Qv44R2Bq_XR6U)M_6o&?h2ryOavaUR_=eZk20vf4hY3YTD85v} zXes99h*hGzQ3FkIeiHum>$OQfCgp0;en%*pr1%dc%$G^i=5n^z2t^>p*GL#t@>tKY z@R8*V^np<93yM#ElH<@K&lPf0Q9fBHHekgktP z{hn4plO4t1v&xv{eS>PFXg7XFA;F8!!k_ajhoMQH8lB4(<3B!u> zTr|W3O-u;n*(iTio_JYT5_lvmQm#;}&ep>J_KL0PHGVn@S5Z2$R`}@}zcdlP505(Q z*_zfuap+Nev4r{ZXgm-USpaMxPmj*oz!u#hl=d%5SSo?&&^5x3+Q*Hq%G@j0b}E+6BM{^7Q6bN%XeP9X>dqgwG`qy?H?R zM>f^Mo7M5?aLYgfKhWrK%OD=z+nd9-uqh*jQUxpFN(n^UXA9ry^;+0o5|3USQRtUy z^wLD=-nRDSk5oeST0t8$!=dH6|5v{M63 zaXyLz@^Kh7L2{iY6lWO4Pu*rL@;pK+eutGu3598C@l_EeO_5M+DNBVvu!~c$rq`g+ z>0QLiXjCN0fA-gyM1}_7{7`{P_Ef^qf%W8zm7Xydi;T zr{Z&Wa{^NILRUbaYoJm`@xSOCVP&fXh3?1nYd>I19u^8t*mH42Nv}yLHioZ1WX(JN z%9J&|jGrBkzc&&7q(u0j>4iT}@b5MD@4q;rr02E$@C|ABmC|AYT?ZZ@#y_D`b>>pnh4$7nhcqP-l8<|#$7FK8=LkicVt=tyQoFb`Q(}|EeTV!uNwe9?=d3Kw`-EIwb{}^b z7Q`V%C;He8zA4(jm{jxOTS_8Dn=lqSMDZDIG(Kp0xk({4&`6V<>B3)ch20|jJwj<5 zsMCV8$`k5qaA+jegkp)#68^6)O|KH=i?%|9A!T(U{7H%MLDLI=YbP%B z8$xm7Rs4Pl^EL6t1Hsx*0Bj)7IcISXwrGh^JU&(Y6B33Nd7gQ-?!`dkg(8sRoA>27 zeH^2-{?d#YF-m&W_)pp|iH zCd9V1xT&@MmF$r-gkm8TzeK{&Tb_k1sbrvWLg^Sr38fN<=!!q(HdPmJ))Z@J?94g! zc2>SsDD()pO|PT{5{mGOzw0he!J1z92Sodbc{&xW$&}PdLJ|KF;eVWOYkJ|=+{4SKJyHvx1EPG|qXtOvDNob_sF^5t5DKjh zMo%S8kWjR9n(%X%Gdyd0)xl!Xeq1Qkuo6~DAl9(rXFaK`_tCqaTEWWcE14pY;v22e zcJBB7rs4?EzCKywHTiNOT+SEq>IHW0wkbKm}6_W2Pp?+#3K8<&6R0;lTI-iM- z;=hzIU$qerG$|pFXKfViW{;mD)KAId(|DJ>Oz>~e`Al>a|G0$tDtSE6q=Z18CBN+h zF8Mn`aa0)hA%~sxv2KT(y!-NkIHW0wkbIoh+#vbhA=FQ8#HaDDjU9sjw$5jwqxfGW z%vWv115HW@p#n(z_ChZC>#;Kj}IKO|Lqh9gh#|`gr_FiSR+w3qN%~Tazag?1#5B zm2{khV$ClXzV*-Aejo31_7&}Nq1f7w{e=-aIZ0$5=IOmo=^uv#Gh;lGkD2i-$#=9+ zKO<6n8t)NlvEVOb*76B7b? z_Mb+QYk^Q~X^QVx8;jzB;M0WyU;}wtG)xkmZ&{@H^4eGw4>Zw91mtPaLdo@h%Ob^Z zs*OeQK=2I!0kDBQE!r)K{%TpI_>^F6+EE-3v?B?#fjlkxGKq8jUMTI`l#m+XNZcqi z6n>jfQuG=nYvR$1BMSYXL}JrTfbM-`W4D-+m8{I1;wXNtguxi;V^_E*4rx*%Bp+|M zHp*sO3WQR>6uzHOUn5045cJCgK%O-`OcI?h6fIJGd2K9;2ZDYn05*`PMGGa-{gy?F z-&7lm;(?%F3V;pdY0w5IHH8j5{O=YU-*-cVR%yXLSGS&K18Fh)99s%(7oS`e7rrIvPvjbyb?A` zAlWW_c?WH~_bK;^cy#cL1g_KQV0%2ecMGWyQ&tPbM=2Elkv7xEgDLSq@F!RVzy|W{ zZworJbCwH*mInJaC9RQAbf@BKOq#op!j{g7|GY__vqfN+*v3N3}b}veu6g1$G|W^ zw9hoD;NG;7E|O3*^lIVP_tp45?qV0m;6vx?qv1zr_|iCdQuL~tePYY+#wKWNN=iME zEk)}UA38-_51L;1twp<+E0vP^ODN(i{>1*Z!S6GYwNDd@jal*AB#aufm!Z|7{HX<` z`0r{1)L;}_)J`aON+orbP%N?Hj~`o`65l7oFRc|zT$gKW_Vxy@pMtXOenM-I1W|PGzmp`#ou~5Q<1+BLkMOX3kQBKi0EPR*N;e zh2m~U@$bICNZ3F4UccC zF|303HAZJ_;zYSZ(WNsZN@^paXnhai`)$$I`*`OwJ02gNyHxo38ox9VzK={&i#7T-jSfvJ9^KoUkBcd* zY?G9*Q3BEScZI*9x)!#th)0J*2?=~rqn9Q^_qKhZnDUTqk`kViK(u|c@RQ%Dh3$*u z(TgJr{Rxd;nh4$7_Bmq89kxkISSo>N`x@a#y;%#}E8@}N9b^eyq|sqyk4N{m{aP{Q z0ioCfV}G#^VaBKNe!jF?@WXF$(J>#zA0uHn+{N{lHYCDt*~MY7Wbv~h5$%ERDkRvD z2tWHh4)ayPukL2$w}hhS6yNQGS^$0f6Dt?(XNq_Jw+i3>AcsNOd_0G8AP#9tA|xMM z>W3xYRYLvT`HxTIedqsc!T(<8Gtp6eLx&gdzG@>LXi`ET&+gV$a-A;}S8a-~6J(40 zwY1KneTz_RAd24{szurMiE_U%Cqk1Hzc#5hCVej2JtGQfqNDh!$+a-4Oq6#BMUxc& zwgog;313=@ivPw|^cr6pq_BBYgkp}0|9fg}oRC|GwJ#Nl^`iJk>ej*upNR5LLUC)_ zGK~R#N!KR%IFk6T9%~;I3JnZS?UYnMgJaRqBZYroC~JB-Z;xoVudk5cd(^^r5{lhy zuo4DXii$tYR`kkoswnTWfE54dEbSW~1NN1oy-g^3LGh_MjO1&GI7yVx7K+t%qwqtI z&?fn)t`gCHQYf}X#jlbua;FluT8fH)!&dZi=K)b3l4~kZ@mun=?LOT3lV}fYppanx z6MpuQ9OlcNuZr?cp>!bEkOAIrq)qbS&g#aj{gqI3r{a%nVodVfDCdjvc%cZS_);54 z33Dt(#aG&jUiGp@l=GUhnV6&EZ_3wB@KG<%iFSH{LV`Clgzw+XIKgw7cfBaj6N>e+ zQTTg~)+YI=myyj`yId$1PVwOu8p+4mRWs2ZFBJC%ieJ-8Bkl6OS=zTXYnKXz@o(3R zh?3?=C@xoS6@LCP27d;#R;|YFe7YRVDg%WAJ}kVHG(tjg3{re{M~&}eiPk~1dkV$V zCB@$_Vc7jVPnRw%p-X#2g6=_3Za-rSWOJSEX+X{(Cwf_!_Sw zo~zOmB-itWLT%SfiYRH8gko2}RrqCtbRB`FS8cx_+SNkomv<5ED@>~L5fLTbAfedz72o}CjSre$mYyftmkC8nV}G%u z;flqQ!~INgGz<%Wx=W-Yi_qz-XNrHPQruJT0Mw~|#FKc(}Bzlo`&0tv;DP4U02vNbIuiH)`Nq&2KP zLMTn$!fzAmYb>u=%Rny(#V)P*w$F2%ubI1#D3240K#Jd88=x9dZuA1@jzEf^BVoQQ zn*AaJEEMWzUX4%VJ+FQ&_+RLJCOV4GddaxZbB!AhG$|pFXD{j~xt=c+`}JPoGuE?3 zF#h>iTE#Sf4$UnP$Rnv@X8v*Zs-u1^YuHV12TB~@8=ZV~?G z*L3Ujv6{bp6Kl^D%J@pEkWlo)-NFyuTq}Ihp6N=ZqzVZoeBp;~sSW-aue0_Dp=`gB zCP*maUnP9^t+l~Fej97|7RvZaDwa^hKUesM+iQcLy@R!z3T1pHb&ycR?FDgNx8oPssI@W<_9 z?NXtz|0szlVTuGIyy8Ex6}`|)-evT0LTPuSgi;Aa=P3S^_c#G5dZCYhpOx zk;rx>G?GA6RD6N0=wSAtbMOgXvtMGB1(EhLa{?De#tP6 z51L+-c*QR{PdUuTX~>S@to(ye?B$AoW`wrW$9VCkXg4n5RJc;? zE&PSk4blakC4OZFYriWL3#a&#uhB>_=6m_>!kMgngHWg&AF1}u|%Y||yQ_>mt!c} z>ebI}SZ`I|2AP4uxsDU;+=&+b;Yd)>?GIZh}X=${>`SGO(%B$Wp;94Fig6dD1O zbTlx%>ej96I1!yF2@@q}2QUe#r=$}e@LfPLH2`pqQ>Vb`pWPYcx`cy%i zX$6sDkJcHG*j&ew!7X%J5?jXLQ(!AJ21}vLX)Q%2z&1%-eiDv}cb?<41q;|df;%=w zhXUJa-vSQ$w!M{UUGzZ*?Gh4?lWZw<#~4V!ATJ+}h2=VQoKD&dGSzuvO3>lYlcYd3 zLSu`a8MI7)%)Kj!L7F{66%vyYs0!&XZ$nss;DU4w(KSrhB)UfEnoL(t#oxrPLm_qf zLmkN}l*Lj&3%yABQg3aQl7e}zh5x{$ZU9e}=FibRx;63n#9DILU>e zIdl@}20DZeP(olsd+M^YxCZ`^6%5?Y`W&qHA>eb=$cE{ zJi0cZ>ydPANY_SmZA{lDbZtu4e7Y9UwHaNHqU+IgZBAGIymL$9ThX;OUHMDP#}MC^ zuE)}~9bMbgwF6y`qiaXH9#7X!bSiH5x>5n2c!`0jr&VlSxoRGR# z77ncra4#tT zxlu9YikYpLn}FdCgkN(GtVlQQ`NagjAtP!%4p6H9#m!l2dj;3_y;R%Ol&%0au*@{5 z&~u3z6g$mvX!sHke9cJ4l%rvI6t*w0piOOS0_XOrQ6#nt$I8$|gBjN!k85NWu{;*i zu$V`o#J1w(%NX3Ug1}+Zjcq$6ObMn#V-GVpv0>>MVd@IlUXtpdI*B+OCZ%fe4k$?y z6*z4Xu=q>G5toMe2q#&MIy6P4p~d(kRXha?oI{;7O%8pm#PvDx51IlqAY3=H$ zal=<~Ls#;YBeaMXroduY^6CeO!O#kNp)CB{;38VoUM5eUSdX$**g4y-84Myr1l%dL)B9{7mmfe*)>K)yAEq{Nkx zjK>iz19p7kf=_^{&n}29YeKmkt-OF-mR3nVum_SX&hrUWDq*E(|*9KXb zRgMCRKN=vCoV4RbrV{5dsFjRZD^&3FIp`{bPlmX2f6&BYMT9vGv1v})U8-D^rFkD{!&BGK&ig#u^Yrm1rRK5AQ#HwM}`n< z^Y~{}B;z>^lbiW-5uq?89G4UA=_0xGp#Kdl&v#^Z}fiI4|kqSHCiS#gQ- zIMF0j8p29f$0>DWrFjsM*PMJ|#-jp`qZRHjlPmf=>so3`WW`&MHtTAV2_O)lYN5s; z!`+XlGQ+6Inmskk>>wnlB?S?{NMxnf!@S5ZfegbAgu}1>Q)c1UzM*^8hR(;0mJE`_ z3~gF^CPh-yz7rrbJ7OZUQq64Q8aCM%*c6ldHbPA*JB{O&G>(%@@x2I>WE`0yv#B@~ zi1C?yF*%9p(AgS{M$rt{4Vt_1<)Y9vWD=#$abt`_k#amAAhZ5KIa2v#w6uC5RZM-> zo{QRF8*LdfE$t^jBWA#U9fMqbk8(=kq4PtEb<#cuia&~zd4}UCyA2Qp3CImNydP<% zQp~;K$C#E%gdM8U6w}^LgjqH)hT3D=0Ge^_uF{qv(b2dP6GvA7lbfeSjIHC|T4a^G zVzVAck@BZHokQaw$yDdJnL2+9?Kz+A*&Sz38@A^sh-g@VnEEV_!0H2TqbI3wX$>e3 zyD(DYogkvgyO`K?PN~3Rh|2vtr8jZeZ1^~ctHbA=TtRjxqDr8qAcH^k(bF*#G7O{g zQYjtDSPQmX0-+-7mK~ug*U8h;$SD;46WGEhcBxnwH1tWvm{Wdh%$PJuY~vP>b&Ks# zq-=1zE=R4D7-incQ#5YKWphq4Zkc8KOfv3{Wv9%^p-mJFMRYSa2H33C38GTj2yAD~ zj-)yul#fC6sK#y-Y3aWwh&rA#KwFP8ouCygRF6K<4I&=GQXECDr9zwmnzHmaR;RIP zRvejzvjit45f}BAxDb#E`eU9@*^Vyi&@c;1%vz>CxpNs(HgdkgiMiN#qVW()N-#Ntm5 zduT=x*c_|{_y@lPusuy|0@za^7JoLZEaR^*2{(X-ba%?Zy^OyjMiGXOMFLA^c46O; zL)c7Wd0RkDD4&eq4~YUDTq~Wg9*u!=J2?@Vr`z_EA0*Z9fmM0oe@yj$vGKc+SQN9JCgg2RXZ-y=^8RQHcT^+kvb0 z6i953nE5VKN1E7Lcg?#XE&lAHuQGTE#^(=AY=RNwGr_Y*5b0b;-~x%Aafn_mowZYp zB6L<>mz zkYU(?!vJ$7|>%o z+*9nqKw|NXSq7B^v2^?LkZI|bo+~zp-RfTOIqv{d9|e|1c&Pyyf!=~(=@QgC@~N7M zmCc|G%}rWp#Tu;1JTpnQn(npk5f=*7aRkMlaZMJKH?6g~ITD*`LghXd-r$m(T@frL zZhPgv7L^)z$-M0+@j=Kg_7p(Qa`C(=@F%nP-T|tCz9gHycT0zI`2ymSlLMF`4XX3G zH8pLi{emY+vRdv5q2Y3}oc5&^u15eUh--^knS;WV(V37|GBQRS$41}{3b|Q9x@Dl7 zbvzkmbi1=I-WSMfpNs~RF3NJxfaDi2Ek7=0($-_$U5VoAaNPHa;^cs$eyaqSa<0-g zQCwzReq`H_M7m;|m4B>mLfI+{#ji?)U6<{!;z$?Ig2YE8$L8(8L06m)1*=h_xOC2^ zOQJaOFE(#GPb&|yp)^t2492zcjMYsj$6{mGvGb0V@z~6ckIfHnh{(+m%C7*X3b_wL zGIdq!mWR~_DZUs^3Y9-`E~gPIz-7b3Ks#?dVQbXUblzCoESbiE#{fH{Cw2$Z+~qXT zM3EJEtR^>NNXGjta?ge29|0-anAp_dF?w7zPgF#IOHMG6!1#_&d*ju$6QqzsKFCV3 z@@xq^VlrgeY*b9A4|7~)qPP&pJ&`C59_dAc@US|oJ91PkI%(ybL=^owB+coM(Z+X@ z(nQ5*{$CMs+~l%Ti4G}}%izLjh-uQ`II`)liFA)*92$r&ARN-A8L~M!iDY{6!II%g zbtkJqs=F1HFjjwv%bpu!lg!ei62-|tiUYKyV;?5cjc^{=H*8((N46Y`h5f~j$H`4( zD&((_SEE5#9GYZhDYF4&dppF-gc7h0w*Hh3mo=P@L>zn?RU=HISiJj?1BH}W9Mo8( z;?e?!Z=R8i<7x6vx@$!;E+o_QsX4}&9FrGmZ*LFdTu;(AjkOV*WeOXUGLeXP09zl4 zMiXv}4uCr#2DdZEZ2+Y<4G4sEPe+;S!vyL_YV zW>m%*NMu685x((0jb=ohI-MUcVOwG7X;e+)8_BU{IgCuXQJZ~O8ylO{INYS-Tgs6iq4?WH6vxEV?} zai-{UdtQl^vAz!xPd@z@cEEojR7}T@5f7gcw)jI&frn2UlTnQLN7DWgs9NRw->*z< z)*3l{w6nt-efU`8S)H-HO2Gj!{WCp89bUY)i&9R#6Mx-HC44l>6^HiCBJbkXUKeU3f=9YXLhn1xl2P91nC;$yvuq( zicBdH-}3kXp{41#ZdsZ`^Tt=Y)<6tvJptKxX2N)V=cMtu3F6r-y81dRv8UO5CsYF6 z7=Pg-CfDWkoCg=T41WCjFn%47ISk`77z|5xb(UdpY9y}y5?xf^KIu8MQ~g^{nsw=# z;4LC)cCx>$fMVJEORhSrKj-w)3RWn!Al9`I60=q^OTlVzR%l|jBiH~-P4d#{KZG3*3RlT&!p>Mx}HVXv*`-&qrmSRx}Hnd zp>!Qa*YoH)oUSA2T0+3RWOFQn^8x{jjjXu6J}>sY#8MAwVydI?>}(e+ZgUPjmP zbe%xgiFBPr*URZzO4rGBy@IY+(sc@5r_%K*x?WA!X>^@V*BNx3N!K!N?$ z1*Y3b%l2V@QGl)ix(4YQqASPpCldJi@?;86p=&B#>(I3>UDN1_FIK=b2pA5fq%R2GtNos9FY$uzJn;c!Z8v*SS*mbiK%2%P7h^r-6pn};}=+@y5FPr+kH zURWCTQD9{;a{Zq)JI}D68@8aIR_JZm^MIA79)2;Q_4=c34%Rw9zd()-^I{k$1~FwC zO}QNH6!a~TF0cOpq0edA+{kDIZ)Sx zra4wU4?Hv`A^)MNj7yfns}Xs!fE*`F$0}19$=Cqxrz~7v`OqkCfWiS_8t$#}M|iT} zNir3t)apS{tQs#TIc2;hcXqoHoRptXYtSv=~aup~ON=66u{+$(bUSRrJMw;y;*BC)!mMHK#(peZX%y^mlPM9Oq6|E#;?%bdC1k>!7pD06Q4hi|2B1Fc23#bOOf{aG6gDM1Jeg};<`<5E*7GglG( z7(qIzbge_zL+-37_J8K8uQl2B?_T@4zG*}`{{I!=|K1hgEbj9+GAU;=o5@W~Ze}uv z$t_H7WippZ1(Ql9w=ub$iR@SJWa%y@^O($MvVh6mOzvT_kjWw@_cFPU$$#6rmD>AL zY{b({Rxx>o$+JwJV*(%6!hvZGleJ8qXYv9Q`E1ooEUjZw#pGosuP|B9cJ|=%>@&%JGnaJV6KUn&jNez>4n0(9R zJ0{;V`GLugOnzdrpUD9xKQsA-$*)X)WAZzbgG|bJ9exdyYnfcfJS zWwMRQb|%aC(C!f?k1~0T$>U6(V6vRalT21HS;^!nCQmb2#pD?#&oX(A$!aERn5<>; zJd+ogyvXDwChM3~F?pHEDWf?2W2krmQU5RzAwJk+r zd51;|VfW6*Qltg3eV)*9T%$z3rwy5uXOFSsPGAFh=KYl8WWxFoVXc+_0u%b2VgEv`ob~W$U1Zl8yOl^`SGx}3X-`Fphm0j_B~~_6@!q$0 zyH>2EHAmD(JQw6K;E?XM&a;n5tLvdm4cX6mcDmL4JsLh~@>f}pCcZgcThO&7U0c!h z|L;8hZ=XFUJUsq`TZhFwGTqPQ0Ve;6vuA3thg-wT;{9-|_Wyg!byw|#$2uCk52C@n_DqH!zqKDBNO6utB>W|P#x^!&(Q&Gvh*pU%py);_ z_Bx1d9I9MAgVJ6|B?5UF%Oe9=Dv(#OJUXywa1iCyERRw8n^?XmfF*B&SfI3v11}BW z=XOEf!}0``sC*`6Iz6xiKvkl>tTag})v$cIlJ~P*N-})IsDU^SYNI}3mg3sV0k8H8T5NL4Zi9X~DqJal7crZPr#+F~4xewbM0A_ZXedDGa%Q(5 z32|2M3tS$ux=&z22#uy52R!x{$7xAdxV#PjjZuM1DJ7J52r7VxNn6b;L5Y8>fB;Oc zwgm&ADU>`?LUimiK;fs0eKrUthl2j@=Fs0&t`kA`XlPah@Mko&HM4wAMq}clHx?7# zErDDK&t!fY)Sjg{6f@VBpA33|;9UQ2gHHhv%pW19y{ zF`)w@K1*hdD0dmrDaYl3PC3#cR#T(xl!FaUn>d0^?1#9WqFi?kQNUjz{5K}T+r4ZB zw{#FuT~{TGrrpOR?(0t6*PWO}Q~u5P=$;<@Gdt5z*&GJ0X=oS7I8f~0bz8T}5a=AO{eq~(w zbW8xUJ&Ll|lO71Xs)ts|DCw~P?t|K5BK##S3v?O+c>CNana= z;XP-J)lL}=vD7D%Qv>)qnblt0uniu3|JvV=S<9T?{*J)O zqojnuqb8LW`1g9Fej0v#6MrWC?VO&veESD5xv*({G>bqI$~fBCWbleH7T)?pG-#96 z)Fwf84c#E)&<*jsR6Mpz)etA3Wmzl9KTfN9V2b)-epz<}j?ym00GLY4W;O*aU~Zjx z3^Q|Qb_S;XsaE1-&~5)fzD|oWB&nD=f|D$oc`-Bh&YaB5eKX4>J(~tA46eI-$Tk)D z0tem~pvOTqek$NY^$r2zWIae808YE?Jh#hu#e>~=7$q1Jj#=Nr2T!#Y*h}AO?C$nk;TtVd3TILoJxdUdtj%^NNxlS{;Qmh*2-WREa zfOd;Si;K(;Py%1_AnKSw6u@}(nE47CqE|oEpfkV6WO|vzV_)VrQnZGYovsC3a(brp zBwkh}=VanHL7|z{EPw4$pOneiG z*Mq#fqh=mK^$i}D8a#sfk}gqKsCU)tGcyAZaJS=zlNtC6h)r8xjD>^td1Rn1jUljt z>(`wEoAy_6O#&TNT**)gEZ}sG(-|1!kIeDZL&P1Km~JRbA#BjI#WCG6)7I z>nt9&gOya7AmZ-Y%y!SjRAobHn!i$SOK#rq7g$2-j2A;v9FVwSv}#E6w~jppV^vdX z+Ypq+LHrQR0+E`fh^AxUUf43^T=D%x zgmSXZ4bVzMuZZ2tl9VRcjdgRl&IQ$}J{GAN;lQO+eOlwn(BG*(j(R4kdnKBEp(|?j?3Hb>a*RvO zs(NgtrU7QtA<|JW5|REFSa+tGxSL;t$*yM7;41g3c%BP5>n+-#>2?4zo`dNwcQt53 zE%S*<*3P64-9vwS7g*XI(oJ}`2O?q_JFjyMQCTBhox2NY!W7MGg{)D$-qw9P$DOn$ z#g#S;v1(Y)`aZ=~0_@390$JC8Ly-`qkg6wuh(;T79sqTfwK5q+8WY z2ORv=QiF3~SOJeIc>@H4Tt@8`;?IJ3?cRJq1LL?)W)&ve`>$o3qA1zyztkaGR<~q? zg_OMP%IZ$Cneh3OsZT4>S=n%Py+E7;iWZ7*FBg6lkj7t%4VhM=@lsJ;afg~cU z9nlvA<2QJ76XDeG3L?(qx||(B8L(-rO>ahV78C|sP%DyTRWt;`o%9t+h^(PXAPk`J zaLP$vnZz%MXsdpNPz&mYAWo8CRWYgG;5xHPXR!%J0V26OowsfvQa=~bvb7y_Jd;7z zl9=wZgbp~gvAFYsTH(L~tHQCH(J(h%^?lfzGbOz zb9MX1+eleErh`kl<8fis2FH{@xC3GZ5N&n=2;c&mI6EF6riF&7`AVn`lW$=Oclt22 zMQA~A_EHk~&~D=;pbkFZRe#}yfqNm+Ds)p23|e|o{c8u&yo>{&17hB}ppFL74?~T1 zVG;JeW*h}M7h%RQN)}^CVUerd;0dH!Y87_Iim;4uA4n8-aC;tPSBbE_f_rF`D?BcM zpRKV>+y{bX;_v8aILur;lfCo13u+@M!>IQxwYI{845cd#*Xaf-eG#>GwPpdaz~!5w z`nGoN0LnO2Sw0O=oZJCzKv}ygcK{A+uy3o7So~6^uK$lR$f~6rcN*3|ZpBy}ihsHQ z#2OZdVP^&Ldlt_Vk&l#eCyVkX8V+->z*y>Vkm7m{8;)T*a4QE+aRu(?z?%j8OBUyf zxSM)z?(HZlY~JbR-YF`du*y6XjS?RX6N)lH)xGu6Q7o%;-jKsv;^h?)5_OM&5d7&p zTli0SaWxJt@N;=_GX#D* zz%jdn3}cI^bK4R%IPmt7e>5g9uDLENCi z7d>$z1F>uxi}-#!^p(6#F^rzM{g*p^Uz$qIGK6gaLxeTgHrmDhajFj6pUkZxl05 z6O|>ba)vC>_$(&lOkS_EC9dl{BkoTtq2?m1m9c#%nrq7{enQW40L@_OlRLj;;Z-f9e zOjqMVP;VTr+$6DO(Pya9>%Iz!Ex7b=)LmREB!~zGOKIBUfJnvAiSbo#V@vlR+`BxG z@eeCN!>$+(xi}!>bbuXQ$u3iy@nrZmNB*9K$Ad7)?qWG5@(NfEG9OuYPmN$=)iJtf zkk|zC0i9<#&2LFKsl!iOjIYoei<9q-koSU>C!rRIa%X||{veXQvW5i_r%-SP`36L6 za@x@yK>%w?fH=vIP#m{l2)u#<*GG!`AcNZ#`r)$K7!&BJd{0Xd5b=H^WJhHIk;;n|v0D zO%NB-yu|HnFg=9;LE578K`_NhZbri#*gp*uf`|qg?dPEOjCS|WW7^K=+;(6?$VZN# zKus}Rxxy8oOVk@%L%4DeH}vjbC&e`MyIs~57P<#vkZH!3z78V(2~Z7=MF4k900JB4 z0DcYC>dpH>Fhwam{8siIP=ChZ7|MuWc(uxy>#8nY#`1*Q^}j(%C?g*x79M1%Lzl4v)S*zS zj9(qDjO$%?L_cv?Bgj;ZFsG4=Kt>ngkfY=u?QVd}L?|=${^+N&jyVul_IkTIW)6v^3$hK_3mxNxyNga;ajYz6MQrIvP0VY_I+ zf<}NJceNUUdo!sULE=5-02PaD~z-T?rnaSm48RBt^p(JqimFy9{8DZ@a+^2kRZ zSY5vcErC<4`O+Cld?!5!XJlM;CVyySQ*~0A0Yn zm5bO@ipXPmkKR&59yNRP!6K^tM2|6ecU%?t6f~g6iBjM{k#w@C(}dXL6fC|{A4&=X z@q=qgpsYrQ;Hij|E#=NGbAInkKVa$3j7hOVAw>uMvCp;-XZuIUu}lrnUX--J&I!-&ljImF|i4bX);8dAf+SxjZB z3KrlPZPwMTKrq-nOQ}0b7wcJy3kahN$FsKXQKCx~-1De!puP{OdyGr>7`N_`F5F(( zYx1rAX|HT-IIu0CYr&%4&Sa!w6$wqc^KTgBQXey9bS%)u6%qUWmsEQ+>2*1_(}cPWU?P{HBHD>7B`> z^HV`=0x-9+Po4@61?zQ#hiDm?`b8j}1M(bzb9o6GJbUTsU`$pgxu%I|l`7AE9#l3^ zd0=-~HI=}l8>m1!bC7XhgWgugfhmFyamKMK>3vY#V2sv%?-4@;YA2!qjM z56e5kC&Ckb%3CXVNO?1iwFOFiuOs><9Xmt8^#D;0f^lDTW)PbOxUU4l9T3SvIS~WV z)QET~T1F|X*6+S~-MS_A72SMVw?zM&>@NVpWZ(HX+IOk!K^*C-z2oS{H$;y`>mYgq zQr(k|0>OZ_KGGgIS|52SK$(o2Hnw%6o#-huQ&pX)o!GKe-D-N=2K3PrP<0!WEKA>w zN_JIccWAOu3;Ssa8a*LMcI#F*h+`MiLNMAt*s&L2>)6>GyNoBx(ro(`%~#ow6#b6yUT&_ml4o|;O?sB;LWmnPBD5ypc`}@s7y(I0zFEuD*(?WU{Ih{S+sB9X?$?j6#Eu;v71sn zIElueXj6t({i!J-QyJ7S6U`6Y`HTxOIn`zD*IWy*cHxfxbqFm0YgZ^4hf%a%$s2yN zhP0 zE<{zVWAQ!!#PYjC(H}x)@X!mT->3_N(nFlzLHMw0=(ew zTKI3OxaX-j3&6}@jB!0r#YF>1R3|-8MLV>SM}VMau%2|VX;p3*h75xmZJ`qc+`1+tt#q$yb{pdKF$n%=qsEH@Q;sQtR$NXMK^B|Np! zqf8GMHXInCXJI6m0K@_DutzOV=h%it8>zL$3Z60=h3^2j>&9^=AVR6DII=OVD@^P> zjy=e+`C;^ti9H3X57Mrf41rGcXkHO$|(Z-`L&|b|0%n+qr!}2*w=KCShb7N9J1(O-1uI5%cN@>e5F`BhaD_jTT zn`wp7PkGG>xzou%$nJ&lr?ePRV`3F6eHN5m^L~~;56Z5&oZ4G-Z%}s4^I6_UO93!) zG0R^B=fY=8LEgjiSColv2Q|P!8BsD{4>3L zgqgAYi_))}M75Jn13JdDTrY&{PLTJqoTcJxSk4LIAfi0-HG}@fZ#d~9WN`VaFQ+VW zL%2T1EV$w4xu&DN+=d3wEf`Qb$nw|_F5^@_U-AO&m=GSWgHjF4Z3$T^t>CuZi>D|R zDyy~QIaDLg;^sAqZ#O9A3ZAP6k+Lq%2i*GSb7V2C0%9ZiUSsrZcgp4905EqGr#y{j zX`NCc_jBZ#Vj!f@8bzG3%*B_uGnU8-F34q}MNn_59I|ek7~0KKhK{J=DriPfI<$h_ zd6YYJ1&1EZq1q@k7s^!4vCTOaE4lzL`0EP)O(*L`?;bRx7`XImh`qyloauaAf2zls zI^iaTA6Dvw=NQ7`I4Ud-?N(kBAjag?nvN`VUagP8o~A7y4!SVk@`9^%yAL6b90p;$ z=xW{G4%rSn8t|-G>BYlnq z9iYWsn2tG->DW_&@~=QKF%E2s9@2&C)s!5lC%>icMQeYxQj+7cL29K`H4WjTgVah% z4bQYvf>lAaikBNu^QT25f!*WxvQ{xK#v3V%hXDhPLK@>~eEVLO|_f} z9)z@exFPe4t~#ki&ZoMF4wmNvV%qr-TBIQctDVa^C@tBsoTs$-eXHn*n3n*{&`P;O z9xY)AGjm)9v8JKLpLYBVty-_O5}bDYcEH*ioW@zv)ZO{%;P((`t?N4F*jYty<*hj^ z9C&GPYsfuG-Aa3N?XeJ~23M?R<+&l5tZG=U2+3qs#_NX4kW5w;EZ;`Mkn-G<95{~# zV*ssTc|IwDyr1Q}m3%!9!3*g#NDzM`%lFX@b&$(hUaa)@viy{i%X#pBT1`T-;CL>C z+eApecpCW0iEeaFLh~5p0lsUmOqWCG_3klk88@<5-Jx=J{94RNcR$t=7|o4pgFB53 zv9FWqGLp&z718(Hv&tq0*h&CwpW4*EMagyDJCI+ezeKs$uTUy+Q{4M-SF5A!G_GGT?7=1=uOZMQJ;g z4|X}Ap9V#R!`59|AKzTiuDzx+^csk*Vfa2_`ba^zviutkI58ZB^q?_M0{$Gv6Fdl* zF9E0W?gSo+kbprdV6_AkhpQN)S^`d^LIB2I2^bviJ)CmcF9BzVf2v2h)cnMDT%eMa z@zx^i!Z4N-FrM5(9X9K3de;F*0D8bN>%%Z^sN13!@R!vyjBizNhlZTR9Yus|{DF&n z0R2+@aY7g$uhFR%i#6wl&trR+xdIgUY6%@09t~#9bVNo$?PXQD8;NWgTy zVGV=JU5s~4c)WD`=Q-ed)f{U!bHKIKa7-tj5q=boC{<3oUS=(~UFEN+P-%@;e>gi= z=DVzi!}z!AHPQ~1#%|Z;d{B{95@sabtuBC7JansSiGP&Lj*Zk8ffZlZ!LdryTbmo$N4iAIJW zRE%BlWk0G=rLPOuvM#0DBO0%`i!QM>{5VNgby%K{oKJTJvfi+4g%vUfzU>NJd^TE^ z^%qy*vOyGR*E5`bs=%1anTsWZLq7)E8NLUm0r;sB&*!)5p;GMjI3Uu} zBve_9Q>Fv*E}V;wMFD?V@ZU;3n^NnA&_Kw^iXGuz2z4J3rpI=n&+#)u5P-Sqbq~mx zn|5gsBEh9Kd<(Dpm~hOKmm}TA%&6;HcXgjpmuxRUyYV*={u}F>{D!Ln@KOoJHTexK z(K)w=Ah=ON4s7y!8a@(hJh%)5gJa&j9RlI_hu&RC6%YnnTv|w`x1f7FG|Q*A4B+1h^#oGXEzqr1A1m;XJCxHv33n*xF&%Re)3K9PVqL^lfNQEOz9rzMN!Q3j zpsa3kC1?p+?^@R57Sk$(e?llW?n+Q`(p&TP8`uJr@plybHwJY(5j%t$2)dov6x*@Z zg_XChJ5+RONe%S z=5c5IB)WB%^01FP-|f>bTB3m2xTV$&aT+9s&Q6V7Ki98|+`|P8w@c}j3Ul}LKm9QN zp$)@FH!X)9_O@;@EDlUXM!%wOgg{?iJOw6NI79p@MV>3#Mq>=fcya}ud%H`9t+Gxq z6Z$VG>`)3WAK#KeoxPeP!>Q+ht1$1ZOw$91=w4&Tvnej^^{fs4!NJ{$u201WN5I+l zDjA=i0r@^9yPQ87(7+k;oX&<+Ipdb+ayF6^AYLBD*_?_?Qjq1w+7=Z*Z#rfECfN${ zi`ltvk>^2P!SdUwI8A^oXTZBuyd3oYEp@lsH8D=#<97NUz5^o<$#i5fvD5z+;3xA7 z&`$iV1w)L}5C4k51E34bNLY@*5hIsfQFDB z+4W0c?zU#{rEn-@nQ_?1_~(Ew9Od#yE_$fP_<3pAqc<6%o|Eg*2Q2|3=y{4BV{l+< zf*C{5aHRS%{t+adEb1jBoq|>>b=unWP>=D`d0r3qWBiv=BJ~*mWhBKs#{U5XYL~bl z;~&jY?4RNE4j3ZnidtEVidw)GbtVGnih{WUq;%{>U;+*EJ?h~*2dab#E2OamZ%j^rZrH^k#m0prdMG4d=W)3_9@%op_vpy0q( zBFda{qtbSbS`XrJGmJtUSy)Hz)U9T@sE&+cFJ4SwUFskh=)c5rZ!!(!bu9N$auv&c zsWKsc6U!$mc_+&!DZJ zGFI_4e6f<{M&+dhq7uoC!^_AJETe9ZueipuHV^6V1WZFUkOx4&!spHT9ytWa_HmC= za5aAXK06r6Z=1AP62OldfxMTdn>MQg7vpD~p&`s5^k)Nu0UhLBEI&uG?nyA!VI+I0 z&1&ilwATb4zpHD3PfS6k0d=ELB*3JiZ%^np4XO08f8_a{Vd6=xD`~-lDur5 zC3zXEqcz%5WV6<%akk=ja9Cs8w=k;04_Yt(-0$!ft#$1;i>lE<{U1k1BcgV=ytkPckh zG!0?{`nTM>)h7HGWME7<^!W*|MWZ0_poM$CMNG#$!gTC2Dz&cX*I;}#Wo)yK&LH$3 z9%!=;y{wA_e=G%;G37JSur}+l%fh@|Legt^)I#+NLEKn3U<(9^#-%nSL4eMB8wgg` z{T74wnjsec+Vn$oo%72O1W02kY9MB%aZl@p3&KOgzVuJR?uK+$dvu>%w2`lgs?yJ; z(a|)|xjZ;3i|5kFqDvD5gVo-&O$EhSIdz6uJV9pbS<~<#x;UaB98F~anKyrVW0cG-D{m~zvL?&BDEaO)U~*6%xFq=(8mx3bo#rZK-X{?( z77W5v5)jEL?a(azxxXd$PY;+i>j^E5J#MwXe`4fZz*sO)TO;SA5J)5EGt5-XtOAC5 z7>%4eF&Nt4-+RN~xF=qBh{rshKYnv>e5=Y{BqT-V%WtT~xC^D_CN zCRH(6A*>0liVreDr7mN?r&6SeO~+VOhdCT+S=|MqO;gP)rtfVUD~prESae;;qurh4 za&=6}3xK@Ksg0QAms9i9meO8U9(&6xRjmyNStoCDGFB~ET0-I#)cCBNpNC+}&~wyx zMmY635%jLwPUM{vp|+~czB%Mdyomp50z8N~oibY#bl1%y^#b886<+~*x)>*NuUf{v zYO#7*i|3=f`-3=y!Y7^(8h?3}WUG8>Jnvb0nu?~J7#{l%|9PgoJ0rLmfS)b`{?R_G z{LAS$*?4++XaIC}*gf#WXnD)sPkWWJ$vo@jt)*r_Z5kU67xJl)tOfV8{B-C-?EY%4 zn71l~GlfdT=M{O+gm4-_5O&5h)QVf(jzy6l?1~&HXb1cm%<35{nW>ub zA~3OfJ7#P#Xoqs@4tmy{o$BT>?IE4|rrW6-RlDG|b>2p57vNNW6cuDwI~W611Vxw8 z^ur*wIprUzhS#YvfD%7)nzuD5PAy}9Z407PF`ni3s4*#!`5d@CC{7lqZzrWzdpC-Q zfsm7T1mm2%Y{t)^Mc$5V5^rY#6YJ!SGnzuE{B)bkclY*6Nw;Dfthhnlu3@hudD(kU?-8Clbt}5#Z5{-?b1@idI>qd@Xaz#WEV98*p%M%f&LP$SX>AN=mT_JaHx@?SJ zQ5*j%R$i|*{?+_6?DjfX7SNZcU*A>ovT2mr`)Z?1MUQ?*BK5jx4ehzL!|`u}0?vFI zOQIjB%`xvwqaTuNcG!QT#E?ZUW`n=bnRFXi2F+0W$RsG`q2oJAylzeXGF)D799ff3 zUaDfRH;%ZUY-}8nb<`#mkK=|eO*Wu$F;9;C*v5+3mO{nc%c+{sn`}CjMDFLvrV%-G zk(Ye)BXa1nj_abCdaZ3E%gvR%gXNY=-pO)nCGVkyezZNUzrg1;Q_)k=PD(z=a*@)P z7q2=~e5*~bqc;Drk^!fsE&&F>;PKg&?~zuky|K!j;+21#^0R2EVeCF`T&G0v080ff z-*t~U8 ziIhX2p^+CtL8;|)8HT-Lx^e-aSzUQOjfcADN7t(lZG2ASAINeifu~)NU5)B=fX8Cd zx-I&ue0f8+V60`6S>EQD34gPi@N0Om-OLYZ>*RQNX^69yCYYzmD*Z&BCe&TMe!-Qv4bg_3@A|+(Rx`DPTrm+~9FXw~{4k#JOZXtW zoR-U(y5-^6y} z*b0ulfS^q5NgT`XGGtv$_v0Z*7wg4j+X=}#>0@p(WLbYV$JEk1oAMbIklh%5j|v18y2}z*XHE|%;w*7fK`AN z;t$)VDO!=o%LizXt~!sG4?4U_8PMevxZ=wPCs<*4s^~hJ!T{K<_BkDt@MLN@(=it_ z9eagJtn1|*NMVdmD^QbY#E+q+LAB7*2t=$F5NSOCB6(M1xreZ<`fATM1hGJ* zo-PdsM5_7AEi2Oyv);z&?VP7*px7Fx6Byao|;9eBVI@a&L>y4CA*I zu#wL|JECP_^FE`x1#nH6UT4(xavdl_3O+`UULEd=A3=lPv2=wCED$WWMR(AP6uL$H zC%=Qy!DY!G`hyF9bwNctshi2TUWNsR`s_uqh_1;!S6N;R}quvLpYS}ka;LbaA!OHoS=ZbjQFZC#N1 zQ`|wV{@?eUS-!a;1O%;pp8uC8_xsMwnKNh3oH?`4G_t+vQ_vVDsBtfZMGAC*XYWQP zD1sc^VEZQ6z^H3AUa{V5g0ym+5nf}&>p2|~bAq^AJ*BbO`(^cX+q^At zu&)Y=VpW~w7AjpSWL0$(go~D{j=^f}?^d19oCByut?ELK00GoCPt`PnF61&YY;(2h zBKqNROgsVDv%K~72loOOf;pZ9+_bh%a_6(Qg5Qba_nkQUM`9n~w8d%d9!MM>rxm!t zAi_rKd0p&d*#=C$QSWP24LB$j_dz5SAO#WY&zqnQ}>&!Cr3ss z%sJW}H0^*VWF7})Xros7tFp46jf_a9p0+EfO+Rb3z!BySJtj!!Yqp)S>~LY`t&9Wg z-pV-d?X6bksGAiQKPd2TA1wubm3nTlCoRoBLWuv{o`Tt+@Z0Vb%p=AB9a;O1#5Eoz z@VmM@F?;^23V&d?4X#2oklcsXf0M$SEc_4>3I9*!wi3{LL*f6(u`z((RQL-EFRc;$ zR#Ld&ze?d83txGh_~+)(62O0fnA%j^9JAc*8HL;B@NiQ2U&&>Mu~gFHzo~G_!mGqM zr#i@y)WBafO7Kf^?D-`M?=6?a!GEK|`{wjGLpws!7fE%s@W%5bd_&G?Xcq7r#kQwz z5dOv9!*Q)fx~I&?d1W@|*{qXRYHELB$@?x;?Q3KWibXq?;oDCZxR)F+O$HV2Z3VXC z6!EVV*tJO4vb`Tmjm!D2CgYD{U{m9*Sk_9pO-&LGE!(SL(GX~`4fOD70uQl)R;2|# zCJ3}ik%r}5hL~LZb59r4;{wzMbsUkChk|4yZB)mRIcFohbzFLe1Rs?{V<3<9nJbk} z>O76k*@;=XqAd&0k#LiPXcwvD)F9e*>NqWk)~q_3?xS@Pbm%A%EUA+SZWNIyPi8JH z^?%~#^K&UMkzeM-l_zt4K>0X&Jo5v-D`p72)xxm%<@h*!8`Scw$&oc|F6?ThtSzC` z3mIXJuW2T{q%Id1dNf89X1LzE?BKcVpN zWbL(!(1^ht+Vq5q!DaL&mFLf_Hvd*@!CQo;jo2)VTAp(~h6lWm4CPH12wQh#2>3-6 z(xOS?dv}JAW@uqEM=IWD3)`PA66{~t!nROHSeID#%y8^d6)JH{_``=>_*$*^rl3~q zy@}0qkK8*z-ePaT5gs4n{&{(^>_8a}XB^Y|5VWcbKlxPsnI+4Ko~9J7Psx_5XIOhh zYNu-fcz&yH(&b^M{|%6YZT}k}n|z-CK4IV&nOJOB5u;M|B7>q2l1?y8)r$d7-QeVS z`b!2+SwVLob)&7$m#9A8B3H7q32b3j-(a$u5v6XiYml|dxh0DYa^F_CG9>vr`+%^W>r(V(QWd~$-= zFh~0fxFHRCt4i{Gxrh_6*0{-wa?CDbU7wM>SWF!JwR9x467-x7Vh_*2%!U>+p_O-KVT22lDrPULL3`Ov*O2O{s)*~nN7 zZm-TkmvR6?LdMda=vAC?J3&{}{GM#`2AN{@GQK67gro2(8a6xPmb^tfv$mBFSo*ql zc-_F!@YD^JlpQ8d-jV%V5H+sG93_95%^KgzbQWcjd`!6Wc_IVqcAWBIVFhSTWPJem zwDpo}$yr+E>9r?Q76IQN4_`5C+cTqKs{lme-6zbdeI%=}jYZ5!FS##?gJuR?3GSQ< z$3Y1_Uo}U)_U(gcY-#D$jhG@IIGxQj_3A!^d_+|4eE^=5bPWy9b(qdB^g7^hXi#^a*ncX z7qb8k`JSVE+p!(^hm6n34j6wIGNN5jow_`mhH($D8%ti5eUu2$X~FC;71cqjBw0;t z+=0=c-RopEYZIFz)d(6(4v=Q67fV%`vZtik;6>b+bqSgRQJBioLr68+-nWiBBpb6r zDKusUsmxbopEcvo)=I!MGn>o`Iohg;L3FB`G1=rJeL7QhYfBX1SI@?{2v(XfSCc48Mtj4)7ZpVT0A&+B{gt1ip|48~_y z{QK1GQYc3Ty0mVevfN2c`-)+g2Vpsq?zu{abD7DB!A!*@;Gz~W4Vx)6DX22iOkA>_ zMkKO-qU^ho{4VQ7t%~@D`g5|^hLcqVyrKnabBafl+o4r$PRUT4>k*SrQrSU9ZL|$q zc95ve;&;i9KGX0j>y>hON|-C^>X!qld}Rbva{uIR4%6g*^7I4lV7Y_uKKM^QmbIso0v(W~n$I*Tr{%sU@R$O;%S-TM zA56u>%I_?80SQwUJvG32{q#LyxV|TjFkxK)%G)&+p2$)oQ)0<)LlN>7Xt?hH$1PB5 zoV2JXxhPI7TpGS$Sq*6tjXf#;|$bB5P_2qq~#pJ;{ zgG}=aWEr1XKJebcthfumGE@}VkZU0L1Ss;h!G&Ax<YUAJU3r7=v=`) zH!j-{4VSs+=^7N51hzAvZ5s5#xUk{*cmTc;J|5LuMdS08^rI;wR}nz&qp3f^>RP!P z&@V1%7tl(4zZLm%MUvIEk0~)zyGmA?Go>v6(ldY-gKyY0s0;$!VVAb^CD^Akb}c_#J^=p=4PkPw(q z6}=(x*`SDu-jH~K^_de^Mqs^i)CImd41BW&_9pk1sL4IHjW@Z+%07NIxyQEIs>!|8 zo7`Ky$-UK^+*>ucYwJA~q&L~mo^~)8?lFL-NDepPE2>E~1`LkTxfhO5+0o)RSk5Bo zcIwB3^kJOIW83WQbes+}!4rUl_k?Nso_Gb`E5_i}mr$ow$J1v+d z+likG=qNY9T7mL1sZ|oV6fatdh^HB+Nc^-Fb24H<7Xh%9U1EuZgp1P}F1YjZN$UOV zNa4CufE7!Q&Ej3SG#&B)W>XG>T#ctB=mH1!c^soWvKNfb9wVOPvnIe3@b?uyH)}Fs z+t{nioMWZ6_sn#7)0f$BU^Z`nT}CD~7Qo80#deD60N7taQ5%4_ z0o-<4PldFe3u)zy-5y%|1KS!$Fw$E=%h%X|7CRSSLf!k?HMD8U8{jn>Sdt8IL4-8G zXCtHm{*|O%t(-yn6523WTBUr+?zJ+kt%NTjU2BEAUqZ5ggyZg)2vt|YGN?9TcsS@H z@s{D^6qGyyhrd!#Dff*(25?&$-V9tYWf&%1&oIe)hJ~tQxFszrJ15AkUJBaWx*DL@ zqLvc>fCjdSe=R~9iQjdc#AFlS9^kenel&1>;z`#ho@9OEh3YmZ{wih37NI{WXcNEh z`0YvjQNWJm{451+&M#HaCVn|dZ=6;FQt4rNt0FkhtE-#jXI2z8ef=}Os1@#(scZfUJ z&ig6y+$>^4$Y}{XSM9A!@S`x+k%-KuX^wOV`n4L`_S6fmmEg|Q^G+RU$rQ|&69oeg z*!XH8QX&&fEC{sw6UD7eFK5BGW91P5O<6GmgoxRsqej9jBbH`b+d$vX?p`zBLTny;k87ohz<~2iX$$P}V>ShZ z2RFR4$90^5L7%OfjP7y$?@&qriF)p_fW-jg8vNlC4sEsW!xn3adc|U4+(pMyo~}d{ zjR;Cq(TJc?@&ahcFh$X*kI)*{&-CYLuREQ+5-7HxS@f%wF2H&0=V*WhPqBo%5Ql|0 zfLz|M2jIn2^k*y7YPiRWo)=AZSr54Vd68)kz)TAYttdM{a^s@?H2@SO5n$1aVTrs4 zevN^Yb~~3*c+e0|x#db`Sv)vI9;Y z4zXIkM3w`FQk2$7YTW_HElYSOseA?;Pp62;9|B-?cEAzGMX08UH{eJ*$>TH`!voPI z^d)0XJvj5}(^p*{HuY&Dk-@@Bbx+$XkR(-C3K$VpVL)m?7v_wu-Uf8JhJ3kPM8`Q2 z?SQV_vSX{s0bPmfq}lxrq$vR*s7FohwJmB$MbgzDdb`yP-?t9!cmju9FcLnMFLG84!~d&h zDM+FKb=^qiiv*n@@ISeTN>^$fHDY~J%4nMxryH{tNV#=|HW?7x>m4d$38Ur1m3BU+z1|n2WDL(td)@#&t4x;T_e=m1Bg)D%uzmDZui`PHXpAa3+hkPkA?N)OaPagTei(5R(4;j*0}uS z<(Sdysw3g;JRAa2yQU|)+@RaB)7CQ+ao`)tK%gLyWo%t^s5geyK5J6k$SaM_saZ9zf)sAIET}}-- z(*9#tILd<_;kjszMd8d2BzcCFA5Hws4&>2rL&;5xpLQT4!srHPFN}UNZiVWtj@bPs zF$28dQX%esrc_8$`|WoX8!=AE^F!Qmq~xU9Z=Bpiz%Hsh--bB}$N3##$xCFr)Z;1y z-8S_Q`EFG`oT67dqB1rC$gw&PLiMcnlA|S@kbAYKR-pK3%cWO)W`U!6CIG0Z*z;a; z5=2BFx3A?G?uJObWB2~E_YwnW<{@hhScaIPt2!(Dj@T31G&5m+qqGz%3)m#mKmrhtk)qip~A!t~J$6yNj81hfh`FKUQEfhy_q);!6ndVe&k7X;Mp_ zh%Z)}ybo3F-tqGVvoy)Js#lLNWBQ$8%By5VzcYBcz2}L22p>!SP2q^mO*&%ZQqZJ< z-GJaW7t!A4wFsVeIKu+k0rpK9*tZ0n^vueUDOqDt0g9v@C#X83d|xN4-XolR8F0eF z5u}pcG>3gtj$k{Qi#XLse zW5?^ecCroa#N1L3^muGH@}{9B?85`>kHEYyzEyYG)y>sR6u^^#O>-#^V46cGzGvZT zdoWdt&3J=jo6Aljq{rKiR+_Y`#%G@ukRET3`V(6UZyF^R(~AHQQ=J5zkQvj@kO@Af z)aGyq3oz{pivRUe4*}-6eSjBOm}9jnmhG=<}_k;7+FFVTzKLM zImA~~NagON#8CqXT$&`QTwOTm6S^djQYw}acPu0BSlq;|tq|Y` z30eFFdyJp0-tJ03o=V)XswQHPOhYUN`fME{pRANv4H#i#_CUe*p zlle(7gp%r-A+xSFKQ5KdHT;b(TxMZu*||b-O{i*`1z2jeUQauM&`thcqeb6j0*>^w zFzK^3Nu82zSZYt%!08;TB^`xvS&zFj7lAE_Hnewa5m-xB{nNnoZkJVW(oSUoaqYbp z+o=I|W;?Ydw!_=lcZ_XwO`Bvfn%6RZ?bL|f=!k8-DJQ_bDFeGngV}V?ENz*Zb+nsw z3j*vGy9HFcZ5MZdohk0oVPUyVRJtqGn@{RCIVKZvscF3}G=*$Rx*~GBF}o!iG#2}2 zhH~#hbdhYTY{%;;jfu7>Co@f-pz-R*s5H^^THSSmv?d?x%W3N!1+@%aM?g7veVD0m7>a zTwv`;^ey@xd!N2*m)p>; z%&`ye(^z;^F0;R4oLkXaBbJja5k2{=yAGd7deh2sV6_A+lM zFb@S>cy^+{OBNlpHwmmv*JbsaHLUVz3T$DWjaAxLh36+;l~og<^c8caVTW?2ZaZ`4 zKi_E1oI=SLj!T#mVKt-13)pQ^*KNs}D}dEBXMUt%TgaJxaLkB2UomH9?NH8~ww*aM z5Zr2lzKJp;)g^K!osb$*Gitnm-M-UpTXLotSWR>001ewh&YWX&rbII+7MqO^Z~VFs z=d}o3tY^k8L>vRf7`7C^?%^#&$LOXAXHz=|WD9%9^_#Zx1=s+8fLfLvC~YG6(n5I? zdK9GMSuA{9M5da-8V5)FjFOR>b{A$;W;gw4KJq{pGxjEYn7jq z(df+j(p!q~l9o>eTiOJL;WuMx_CAq?t)sjb{z=ZR#F)-pt!4j|V`|+73tNq`aG)`x zK#g)!&(%4m7B;o=GdZRfUOWpd#R?m9c;y!Gb;VoZnjF!v?D=o2zo~1{1W@>Sdl1bg zh4p|kgx7@vg@3XB+6ygQD?{$xcG(}fX`TYc`&^FSy-WvGuwR$PF2IBcTf$b*4c42 zoTo-%=;h)2^$pD)sm8qlt zoN=j1OJi~2r6$`l7FQzt;ipHyS%s_;uNXAyEP998RS)HDz5-<-hM4iv8>t^@hKBIMZLbxw6|8 z5jP3|<5+t*@^p{^h6TW4S-MT%W0vSU{fNG6|A@Cde$ea*6`98WJEqBeG679LBNqy< z<_Z=(CGv}(<$xpdYUUPUoi;PK2rsWx8j-s&XV*UkMquL_)x~(nee#dhpU9tlu zS$g>WPNA4=pQzudgbapN^L``Q>44U2i@Dz@!SNh)gRjrTWF^(o^~{r%JZLTgQcu0{ zdM*t6xt_*{x=Xq+$-;XHu z5Y~s%ymh6(_yEpaPHOferj2)y8TY`^c5^cKBmM+_VygXqL|3XA_m+4{!<{@(`L=;4 zm0ZRi$wLtqJk<%QCQDrNp)Qe_Ti8g-qcoikY;IWxE=8o!0Tt~wZ6uwiA=1L__Jq*% zZBq!8f1|v1(dag31ao_*W`v8m6kQXa5xKvU>2tImbj=80nOw9jTENs(mlvbJ7c!X> zW3k-VjWn^!?mE6YOLMpE zE-Iio)bf5VL&cMKR#M(Rc==P2;N=havj!iyr@zsY@&{hVXJprFxolFk2Vp+#!#q6z z2WF*W$-MSK*`l>AhT7!U(dcevt;b zyZ-0;aZmk2`tkGn-{B)Oz`gaW>5bLwYw<3B13&f|%P9U)>Ov4k6wB&A(Gb<~0TOap zKHlXW@nfGs4EboW3rQGJ)Rbv}F_rpG57776qatC2hBLS{hu*~P(nhxNI=Wrp3-c&_ z@?CZnzeryp>~FSY9(k~+BisnWqAbm~oaO+)2d0SE4;0iDoYC5$Nh2y#wc& zXqHTu!1EYQcl`{aI1*IY6H&Cs8OlZfIq(tv7zwsn*1<%YzBJB0{`@Q3UV=FT^s2=0 z1C*T!&R!0bvnI@nl!14eYX)5Tc`_a)mbxRnz5%cd;9%wZG%^F2jG{qfZq2@87x_?OY9W>eWC{z zQ7A4)ZVEiN=SozjCPJuJKqz^mWUVP0$r~kSjhq$o-M=4#j^{7AOSoP@rQ?jTB~dB;rMJPt`+?3#$QjrDAPE|aJ(Ce0NwnH1k;HRyJT)evk}fXmp{&P z`J?zO0NOc%{ntQi;?z4>r)#xTJ5q{GJi-45rI{U(VT~KA+8lJyNp|fsU@?O&p zAP62{V_Sg_FU0;0B4uaj&jefEH#yw)Om#dBa4(c($CEKYT6HE54=uucL}bl+@<_{w zi)mHBN3u>AkJ!n4z>Eo|Z>f%i)n!~YQI~NaN}XISVN+iR;<4lf+5N=sxHu`4Na{Lj z>Z|}eO5(hgDnCW7ls5NY_WgmEso}#c9|9z_qN|7Md)RS!m!B31i9!)8 zKefn(B+O>_L=7-zn!eMQ>w9d23tIwAd3MLIPe*yaq{E!BT%OPL`)c{_0C&*tCe3Rl z-v{kZ5u)AnngPSG#{^-w*fw{`7zo@J+L;GC6gybtQgl#IFq*`au~$AgjGP_A79!^H zugJ?+NvXt7lqH&9Yq)fDG%g!`5};wgkO_E#d=cHeM*xx7qW^mFe5$JaS7K z$l=-MS!jiN0VL1XgTk}t&(k{QY&|I)mA!=}YP1b39CTxrpj^8OZfqM0+txoKhUCR< z*qp)BlRtdg;NLUQe**K+DcJDPvyTy}s#G7NU}+%5`ddF$DGP}VoS$Ze_<7-O|E&$d zQ04|ij>eEy_)TwZcoc0VpS;`w_NHJnu024`Ktr9rOgh)_&xd%NfeyyCzt?Ij18yH620Zvv>#0KyYHXU5vR0XsOUL`5% zuNS;3lk4W-fr3}51zpGnpMqEAd|Ss6mLEnqD(GV;bR~-c@~l@Ujy^z!dW{uAePu5Q zK*{lfgEO~-JODxZv=$t1DO0Cn0K>C$`@%7TJ=GqkCuuL3nt^>;h<${morZg?;E0gx z@4yXgP8Po-O=r#t;2JnbBA#I9zcp18G9pH6J&L_&81bHhjSQS9aqXFv(;6Qx$NmsV zWblE^F|;FePIvHu)I3=4YK9$rAkV!7bgV)o#! zauh}Fg)|}Hw&)XkrJQb^Df&!K_3JA1@dG%Vll@HE{aW&EI*LA*6+_n1Sf?+<5!Omq z%@%zru#?0Y;0p4uW=uu9h(Q4;<)vs>wJ-2-dHZN0n#7_Dr%U- zxz=BMX+>A%{1e6tsX0Y>o2TAppt9%(vH)0Tr!UDlZD>T-KUbMZ)mn731dGaG9{@g^ zdw!fPX*SLJo}UWnl7JNG6nM|ivKdK4mgfX?iXPKN;I=XQm@ZIulJ6HNSJ5N6)P5BE znWX7K&4)*FDQBN;X#k$(qJQZDY&NR(ai*XvaO5dk9}jb7y^JWhB(Zw{sm>sB(c2PM z#ke6ZvHEC#7b>~a7L#F9^&H0R`MPA+Ym2TV2fSU{ayepyHkjO>VVB|lC_`KH|Sq5|<^DVVCE(YBJb0jAmY!KcRA6p6wl=j7iW z)SwcpH1ISTtpTh%B?_hsycbgr$DfH_6?{L=x&g2*|1P*nL;@7Y;u-)E7B8>~Ov61^ za6tx#7i4gFK}Le_38__EYT9_Jjt2++SL-PcjurAAVdWg#@Te13&e4WP2?0JuLEaDf zBgX*Qb`X;@2+M$@m~_ zsQoO&HD~FY)`-6xU<}Y=0BIRrmR<@s(QVvPkYRu;fEQsQ%QjS$hpdcd*p1CFk%l{C z4Ow2>40cTf8&<%wOwoFcnH@6b?haV0D(CKH&<+IRZa`?4;?ohjnG_!ra#d>cKMnU- zL8+v{H6=^6DOpB8J}@v5aV1aX1&Af$gP%TuXG?b*vp40F+foljmPz{_%9~i{4ko8C zYV=Uv33@221JQMC%h`>CFp4~*V_WuGp}w<4eLJ?Ljsm>afK(cQ4G~`_(JAob^rMKs zV|#`KsM7CP@(Bh3tm=0xeMXO7D?*#^oPmZ&8!-2auF)(hTTDyfRE$ z1$72VTU6h%(j;xMGFZuyiL~g-|BjWCG}FfGSSjf?O+1BMIxl59O|k0OSCVOpbjJ~d z9AZaB)I^Rp%ZiWG$`lc&15~5%igoEYm&d zc&15J4I+zmJTqYLIXJl-8Aq>39()$Wmpd+(WYJ{R_OXH0$QzmE&dOyHt(!ECbL(?S z7uA|Dkb8-cflCP^*NC{s;x_~5G zyI(@GfRyYdA=Q6@FE5M4%@m!bqmWZAlXpTi@w1N-l9NI-u}E{W0|LvFH(o|o%yfO; zM!9%EEFZp!tCOjDlUg+ZP>*RcyrO$IY)PS4=~J2aZpOt3@9M<}wrv7`^4R%_??JclfakqL#V|e5IO|2Y;$z*cf8xVB zub=g*fpT-v2$-PSY9mHLL6Xp@X~;ekLe%? zK12a>?<|l!7XiR=7Gul(MS%`+xuQmm@X@t>T^cGz72CcZmYrf~yT{FawXKvLoUY7x zV}QwXISr_v#KtG9Y&zI4{`agKH$aCjFa(IH9MP7$v=MSt;aC&{K zaZ>c>*0y)0PM)^Fo%MYYX_R!VHS+vLLS}?$IcI1 zpCAuc!4-CXZvFH6v7mmPek`ni+XQfe-f|w6K>YF)1d{Ii2h&`trf1(j93H(HARDMC zqQk{&B@rXl*e?P29P3b~OA<^&2O!U?_m$p3L8aFrX$LZO>m1ylbwH@Y@N7=(0oDPa z4o6woM1HiuKJ@!!)tq(eb1UgP1?5c5UOXPzE$WOpXm@Ja`mxux~PTuqd}ieUJT{zH8Up&?S-^`1vmW zeVME}TzYV=U}B}LR2_Z=lH_d&XKy`r-@{CQuMWlv(%%?RTcM?o8BiOcrN1?xjwhD>(SS>&?NGXk z+XfvIFDZxGKq-A(8sg=9PX;gMp*%~UEO!A2OFh~PNGOxT`|Eqm5&BM#(sykdZ$7@& zVeZw`9JsQf$U!+=?>(_&s9x>(X0QgKXCnMXz2!OnM#M{@Fu%F`~n5%VK8u#Gs z6gH|I9QU{eY&ud8WQF%$w8RJRy>NkdZ2TqpUcg6qqsGU9tZ|VAYhgs3hC8pl2yfKb zk!vq@MK<_ct-3$^Qe=!v;{6hn&!@^j)2gQ1Q3h>$0}k)wn65`DS$htD>XcKyEKoxw zs@AG%ZuWIJuwKjs`ujDK(s|;BPp2svQ+L>a?rC%cKJ8-7oWk zi~E9%$nPWTjxeU8_<&h%kuk@T7l4f0Nm4G)Fha}kD?zOw#|r+TI=o;VWkF>AKyiey zRU89#sZ&IJ+uwQ%?jP8IsJGHcYDvk%3kG(ol7F~4P;$oPm8K=W!W#s3Dqkyco=~Ll zF(%K~T@YtPnJe4zoOFu~15D6khvP?uLvwk&D6rGi2Y{b-is;XIaI<5_g~M`RBqdL( z0)UUWu#4=k11YH;0kYcg*lgZKu-{LxQ~-Mhu?pYUL*`t0E)TH}%O$oebA^Y=sp>8+ z_4aY0EgX$2nah^KzVVCTjJT4ya`?B4Yk7!0G?zzRHYbuhfgBOZo)~dJJPJJWiqoC^bdl@gn1HPer(32}PzfIbgTuZ$LuBeDr#Kr$5BoF~v~uoS1c) zO^?s}@X*|EL{rLlwx-Y+xWumgW;Ep&(iniIaM@_Lm6uz|>avwBYsy++IX<1Hyslwe z(iAx(*No{yQy6WgrhFLTqFGHzT%nqh)OUI>yd6_kQ_A3|&wo`@y6tRDq4jo&U9)9P z(H^cxhITe#w} znxfr8Yg3$!IXWTd*qY8DRE6)tUO7gf_RjB|Hjmn|=P7lZ1NzbavC`ZXv1@&Mv z(vDaola9VBSYywgU8dH2jhsE}2=iVdm}+C%pUs@nY^jYGo=m$_+jzgs_N_Mbw-}Qj zTA0x~n&^r$)0JOTM;TX?t;8>eIu=L3E+T#L{S}seIRWrc28^Vwx`6%_x>X1(niT9c z8>sNr&Phe@c?zo1Rmj>zM`$xL9;kPU0#@{8jSWywq^UTVphG=eQFXemq93^hs%lup z@dng!nu-yB8v$R_XQ`MVo@Own;(P<8h4%{#R4dShg!ni`*&BdYl)R~O-aJ}0f)6lQ zw>nijIWF+8!@$dQCyi+)=Pi@KT^Su8z#Omx?Q;#tQsFu299WvXT)X2?#SGY-G^~Xm zFw=t8iWYvrJX_dF^8>Xk+PcWwMOM#2rFDKYPfvydtR2L>JRyb>S}m-7M;6QhJW;?7 zvc@i=X!C;7)#Q$9If>ZP-kv+EcMU{PHAfe7+kyy~2O=ZM+Ghq#5x6A(U6ZWxsk%1n zNmyDnR7N$bek5)P<8pBOJE_5Gu`P5`&p=dOxv+1f0S>mwjC~_K($%p~WsoLs(_Kc3 zLOMNEHH@D1?9nQqgRVVot*jvEd5~G*=n~9@)}EzgYdKsMBGu9hcn>Tf1FVVz*l3v+ zOTeq5cH$TnxoS~z*W5ctd6CzEk61D<_lbzxXmM*RM8RWPz;*)i({cHm+$fj1f00|z z!PRUr*SUXfA8>IKu%XL3gOIyX)^-EdmU`}c?NjIp1HMxOf7o6cE-)<$f7G5_!(XQn zazAO`2&?L{}yFap}EOad$bZQ zt_nQ2AVplr;snyjZJ#o&swiCvz<^}B!@6`pJTUsd?3 zoHbB5$Vb$vXr6i-S!`_s;A6};W5=HYO*WuP1t#qaA;2onGHD+IaR845udY{~X|3CR($XJ-%qo-PV$sgmc2LtPPf!`-Z9EBv8IgfWb? zuzm)R@NrxHm4aRV<47RxEGS#u*_8mo=$KXC!7%9PE!Fq2kKkRtDiW|Q5Vvpy)99Bp zz}VOHUHh)SCw^+fI#c}wDiE)XzPi#X7}XOc3+wc;t)4hd3Rq`aws!~ebgizmiHYh; zx~|#tzqHjAr>|kHv{jBB$j1Ll>EU1p^53<(It9s&p}G=p)6&^mb#;eUS5m-GT`?FQ zCj)kMy$n!Y5djta3}T@rNzmmD!#2~BJTjo;t1GQH*2hVwD{1m+$vRa62i2AEfa;22 zo3T!Z0MoPYt1AuqQbx2bS*KM2wcH`QEiV>fNS_TL_oi9d0Hm?U{Ia%J>TtS9 z03de&}joZYf#u#qQJ?Y#@`3adl3CQA6KbK)X}HG#4kR}v1o*H<^w@(AGCC&_4mwDVoHIpq z&_OJrKIFSWW)AviYy$@3X=Mbde*5;p>C%vvXjZRo z#FWIr>1-13)qMyM@HhdsN<_86*OjhoM;a)AU%4gEw7AU7?Anp|f4?QaqYcg=iQim< zlhOLZ*$1NZ#kwWq#sl-dYFOTa@xLARsbJVJxyFopub&JV#*%AT?`pAuahoP?FZ09@ z7%V;HJNXZut_$!l>iaL&LIBq)xRHlZ+j6Id{6lKGbrLg|{G3jFoK^Tg06q&_I%hLD zobDwAmA*prr|o|qD6j*<&sI;(bfvZ05w%BxIf;(~uXj;H+rc%BmDq&0$SQ2U_c^kNw!0Qd%d zP(}7xaT56VvDLf7C%hUmqI%%*Rnc$c|2wqmogAZo907+wJ@F98{N(q_f z6W-=E8JfZ+6DfE?QAb?z;Adbu?z{|HU>I|; z9k`Z~nO~gEz)sw^0~wYijaMwctMnzrc;xSwP2=J4<|v+&=lpKjTvDCsCsjj!sonJH z8Tt*vdQs$#&*K~=8caHI2AI7`N9`KMWM{f^ugbd?I%!+`xmV|{R7ON@x$^{!6!eN9 zs=SUAE6k9{Ew3ZPdbSP?aUZq)e?@*&ZXxy9`-a$iW^;@k8K~HMhLhbCA$XpFS1hkc z_Q(R9C1583BYY6qizlx`wur}=M1c1~)}D_JA$HpkyKM&c-XZpb*(__0>jyQB&fJDm z9(ko?#7VD|(gP%t&lAXV#ZnhZ!?Nrfv`??nS(YKot^syprFLNrX@F)ZRK#aMA5~a~ zwJo-%lZt8rq#Cs>R)Egd64=h22dhv4!bXIQ@c*BQf?pQu@Cp+xs3FZlS&*#62-u zW%NBU#JxJiJuO--_dQLvH=8z2-_yeWdLdHbWzctm;iwt}V|^!>IBPuQ^Kl&y@af?cX~z(D)b`WJzP z(es*r>U-=v`mX)dhIZH9!I!o}2WwZ{~(0*42U z=zemw6voJO9JXJ-tH2S!Ws=B#{Q|M?rj6?1j7+gN`u{_&m(9HDZLCR z+t)a(c0`*r4mpAuVb%2w&w@Mqf~-MUNy^iF-%xA~yeSB$nuh|g?IqJUj0kA}e0|LQ z4`5JK>S?@U{SPpw$O~QPSEqgkQ?gq9ykRc~il;hMFCQ>eho0~!RDg&>s17}WJLi1i zXt5HKoo3rw32_sfEfAy0HYy?6*cOSg#RXBar>wacGZ#d0lU-(vvhgkw<3WL)*}^8R zaQ9dXo3y^ridSdquu1Ez~4lYikwC&b^O* z10wV6Gt|U8($#wJJbulr+7MKIcK8n`a1V<39S` zBW|7O7QK(24yaTX)$a!^PRSmm?=k)Lojy|EwI|{&4=l1il~1rbF|*s1+jk%Rb-xm7 zc{l4@uhc5mo46W4-dr~J42n7&OKgY->UunX8yV@Vrk|HaK%=X82pGeZ{A(Nk==-MAcB96_sKTZG^#8h*JzQ<0`ckMJA z+T|B_fcX4sGMbT5H3vKSCL(AH6_%-*)0D|pt7a!P_Plpm71yHC3wIN4r_uY{7K|R< z@VLHHiyVae2Dg)gMO)y2Zcz?enioI#*T_a^F*?iD48~$~{_PDc&au2(<%MO8q+Hv? z28cOO*SCRbt~sQQY~8IjgUDxvd~O0lR-c$`50u;ZaB*KRL?Yi65k_QO(=u`oxfEUN zET4M4a_1`sk$Esk4*2BoC%2tX&eahE*!kx~Q!4UlsLb=uKQM$mfq;!`JR9Z5$0OK-(Imjrek@jOpaMxL9cxHZHZqC7t0 z6DbFDD7%j^9+Tc1$+|k<+$6m}jM7@JYUiafIqLhckLlsXkK$HNr8y-M)f}Ir^67ZE zcE^#RZPekdK--aBKQF`(K*N!>%4^ZTlsWTs_Dde)6T#37vB>`Yjo4BdBkj`wGI(w+@kY6 z9+Tr3(ppae2_K8=i}B$iHr`9?_g5O_M?`4#L)gwgAMTI|qZL9V&)vtOEWD@yjug#Bdx>vFnL`?2ks2>LRFT$RG)$33 zTBP$FrG|^Yr$`Ggu2ZC$4r!33wCdt(6shsz8;q}V%Mmjfr|K+cP*vP%!#+}I!_J-Y zu!e1z@wk30nz0%m)_>KEm(+RfjMwl{k@s7Z+C>Lil=U+@!4aw5IHQ~RR`hmA$6BO@ znL`z6;mqU2xBN7N#5^3w{982EWf5TzTsCu}23j$58a^_;SIxXay&GrF$4B|k@M9m2 zkVG|tFet8_xm1I!oB0Sn97W^3e&!z?jfxk{XXo4cxKzw~LxV4z^`7`vd|{Dpud+yu zv)Zl@d90n)5g+nYybs~=>Abwi;%%CqjVc{`6WhrPeh+uIev2oUz!3~DoxDFjtn;$T zeIn4t$%7SX@swlnQE@+hB#x<0e^yO?Tu~Y)uNL2mmo3sXhctW2zZGfjl#j)?Jo`6> zZ;+dc|IX6~I#Cg3-b`r^Bz&xx(itC_-m9jRsdwX)N_>+0)kJ!|`tfHh0>G>fJEyOMH~)b9aw>G8)f z*5%PpkMkf7kKSVEH{4LYot@wN5trmI2AXTgGR7R~hQ~2H0DwT_%;NHM0}iySh0^|3&;+S4-?2od|VJQ4*)Zdu$Cj(JC&ivdhVk%iSl(}9vL@a5WquJqyqINA7L4`oRaQrhK5PFCaAxXNNy~2Vzk?BBP zv96$x^`Ria4}mZ=w^}0oHOV@ymT`+nVp55KhpUa0b?-&R)rKYA>gqt9w5_p#BXJ9QQY7A0?np0Qvj zuK}Br4O9?-nV!yttD!h}z;lTx7%Ii}v%13-ADd=X;=?-6t{h$clu1$0 zykDAK$BxvyA*suC6<7BB=Vvm?JcS*t-zzOyZIgF};6^OTn@MHH|%yco#4*fAgbdy8V1=Qbz(#F-m`n#juLwB zTTrUAybp4C=aRLWc^~Fby8()M%KIpXYp(D((HsUKlAIEIVMUr)c_rDT2BA+hAQ!ax zqJISdAGpa;&T<}wsa-OUa=tJKisdRiH6prvr3a3j__oeAlGmLx+jt?DB%5al-kfc` zEaJvNfi2HAUI#1=I^3e~G56^^y|MK?6TBVZL3{kyImB#&>u+^7kfdC>z=WSq}Al#IgD5$k%}dU8;Fc-(&xy@7gxc zsi=K^ab3R8ua>4GgELz?Bd83GHov#xaC57b)l{2CLy|v^ zAHXwU{o$9{BcqoZW;Y}*0L|w8f7*io?Z)3((1EfJ&D=gSuw$+y*QfVm*c+b-scCW! zChD|x=a37)WEb#y3v)-Q(=_-W(Kgb4zZ=vbkBy34pLiX8dBAfy5D`nwPCSYu$pAM< zJ0-O;@dAhuzF7QMCl=QUylk4l8xq$R2)#`Tznx�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 xVqHJ**%ldvN*!#)8n_7JaA;wK#iz%e{TsjeL> zzGuWg57K&|;a60$xHjJLqG;Gd)OXoA5_V#|PvE;yeHV=r-;3f$2ENy+?`+wEUOYX1 zTHrfEeb=e)ocQ@$@|}I2Q2u`WGWfa#nV^jm#Pga=NxZF;*Q$3z{MKk#pk3 zBdkyGr|P?2eS5~+LeIVLX7!yd!x63t@E|eABSks;nAiQvv|GpZ(rzpsAPKOJvu6m~1LNF3&&R3Pa=@Uk+vbah#D5i`-zdXV8T57G za0Y$Ta`5ycR+bg9H-%LX*m`p``2hIu$&u;^uvBi@^M{LJ1kCd7*d2v1u)5M^_OK9pw8hr?YP6Vt+kmUmtu8+BTS1?`_*GYXX`a04 z_6AQ=1OKM2zBXEf21E~ozQ`en#czeXiERiDt%HF=AjXQ{l===e!k3mn(0rPvz5dyn z`~S`|XLGDj`2VtOFGk^aEUdTNV0rC_5RKKAWvVS7X0iDO<4;cyPDV>A$7;kP>1@NFl0$u`4`2!|3R7;~ezT{t zMXX%>7boIpI5iRnUSal(VmaPAAy9-jbJL+~8kgIlR>Ny~7FXSRt+)b!4?eJ7Z(Giu z|FEzQm~9s1;W7*J>;v0|gm*ZW_1C;8wc_zY%_p=ji=`RV7OO_oWd*0b6xU_NrilMi z>re7d1{1+6GWS*Wyii#4zJF7jwLtY{y7&TH58^1Ep`1Ee%M^Q+V$Tw(SVdW^&ALC+`tR7ENd}A1+@lR>I?TjEkx*m5(57G2p zdfdT75Ik!~2VH_5`&rAdOhnq_fGnaz;a6B#cx{Cv))R;&1_Y@*U{q&X2NnTWWPlJH zfV57tQx{_PC>NvX(mJ1MwR1E*4m4`C?Y;9qj1)QA-Z?>^(gb4mQW@5uDK(wRVb@D! z$ONgl00xtR&r&7K48gDkT7pb|4O=LnOGAUAN{u$`Mw#z;*{8A1xQ) zh9dW|Q}?~JdiJohdeTz>m_|}v2BDT>R!i%)=RqA?QEu;XN<26Kx z07)6XGk_EW$c8B~tL3urOyhJfJ( ztY!e!5L2OVn!m4A3a-XlhxA2qrm`JZ2Ea5*MTm)Q?i%@qQohYR$>oPGAHN-PlIsw^ zWjwJx_f6;B386lj1snEIFRa+$tSK7TOT`)**wvPO5E`vv?P_4nhA#VSMlrDNhb=nW zfCWf1;%NPbv`h)cGN5Zmp`TFm-`;=FGw!GM{hpYOGD`H?0(?E(d(p})|Nmrd_2hfBxz;L*&C2Tfm zJ=-6Lw8z^iu{7LcRpT?}X2#noF)@ztW~y8&UIc(tC|eUUr)qW$l&b3fY|e35I}0%6 z>m$&Lq`AqQQP`^At~sODAtP^Cai$Svtm+LBr%TgDxFJoN-Z!&3NE(q|OR{F`-^+Rq zf=1HRWP~>CD>NOU<(P$Ij59V?WiUdUg-R*-weW?BBb%TY);t;DXbHSbsZc)u`}*tVuxLi+;3Z($?&8pR|`e2{WWJdyJ46 zne{NuripZuwr?w;W&`^;3vi@0&) z#*G^hH*VaB__U^e$F=W4UO@l4et$xj-vRW$rxx2EITl<$qK2A)x|+mZ(@oPL&zhF- zsk)>-b^SlUSQ%1B)eYr+t8AKOpN`e6uc@DENZvmzc>(1quCFw7$Civ>s^C8Jp>_K#+e)wF zXSp}xWW5-!XOvF$j>`T`AD22qWq;zj*a!oe_+6DFbpgu$tPia_WZAzb&;jrc%0rbu zCtG0IzkmH{Zm0yQU!|#^9OBo>{?FG}nHnbF|02o!X-)o(>zrtOfz=lkv%howcd+w} z5B*F#39!&==X0M-+_S8zpfnm ztRj8IH?97f8wK(=@ZxAc7uVS4C5a5mo)i%uHVxU=?nV(A6;i(3xIzR%?ScN ztpno^#CiTj%5&ZS%YO5E*xW zJ(&xxW%LsfRqBwB_ar_^4EXVe4_*A$5-Mo^9pG0ET|BuQM$R+x?zKM>6v+s9pZ&CVkDr_x1J?gp4y^w2>Qfa>6<- zW0(y&u<{XI_`u&-hGl$54gV9K%)F+9ww`QR`PL`c^K?=%OHDkP$vFHA+Tio}uqa3@ zy`oE;hr0BlKZmvSiY_4kMU<|@(kr@5nP%zrF4mj>e&8$ZDrbLOHYxG0#W54JKW^Mu z|3~vl3-h~~!hhKxk1Ro60VcSyepW$$B66i7SDHxsHPsRSFQUQcr&S63$Kpv4$jn!3 z;%{o=|6^d)X+8VTq#FdV?@-wPLY2BN5Ek>e(ea$vBE>iq8O`fyU%mN)YGQxTS8u*m zHLrh5cff<9e(<{B{ytS8-tI$xTECx)LH~2`2bBD6)hND7pu=wQZAeA^|CU%tvi~c| z4ikS-6aTg*{;DKe_7Eyup^RpKSQ^Z9{Ok{tJpsww*rFqWll{;2EXlk0!GCC~G$h~1 zwCoSR0&O=y@(x6$BcULqP@;7I@Ymoyo&d=o9Es$s(~&6OewbR@6iC>wQz$Xj;Z9nB zgPC>~C#u}b*t8WS6C##>+3$#0F1R7M zXp)@lCuC_vo^tp31N_Z?7Z*f+)P0Hii_#UX(Ua?*utaQ&v$`151U$Y=UI8#>hUhMN zFc5PZi=bkqN1=MqGUgBUI%I5i=D&X_N5BaPt|?Ega6mD&>C7pGL)yfKM@K z1Pu81qtKuAp$`!6(7W?IBi~X|9Ha>+p{S44XTI?TQyCE;H1$F<<7=@xY0o5yrcXFTiKUI)EF9ijd z=}L^c_XPB}b;|RP9$vft|4}l+_KFqsZdnHh1qGj4(7VOll3vhPt0~4W=)DsQGCk)N zA@kj`wnw>dyr5@+Fl^lHJEOw>P8Ifm(UY3cP$?pcCX7f%tO;YC?)xKjgkB}DAl|`e z1Qo0>Y%^kXl3pdBMQm85q;pA=4N{1tVf*Ucv%!;F07O{#j0#=dl z|JZu~g>~dsUVkgk=F??D_?3U55$UHn+FsLJe3pNby9c7iE&n7NA{qQ1Oy36h z=k=_MGw1uvzn!RW>Rl%P$#!tV$rrzi1%$h~(Usy<56*5Iul&fZB`+cpwf^MCTn&8c zV?6{!`v4DK`4*EW5Zj3h$LPB4iVH_}C@CBAsx#NOi$M=82`HGfaEva{9_qr;%zWC* z{;JHWAzfd9RD^@Y$~XC5*=AMzP1;BOD;7>7i+*rh@opa?Avc&N@q4V^2>9S|6 zG4svrx@^0L({(??4KVZ1znth7t+>%$_g4YMuKQ2*xAHss`^p!=7?1eVKSZNE|2>qh ztLH+TIo%dDmlK)$A=$X*aw2MZ*WTFukWb3SD+a8eyscf6H-UU9BBkrz)WD}c_Qw$j zy6&3E6Lg%3T{qfuuGn=sU-<&-cU_so-m(Hq>K=~3zPg(f*l)7pMhonB0g3|qefnGZ zA^m;jZ|LvoPvKYoJrse}ZE|N$)pEq;;H;vX%hH#Am)dOO%( zcsFA0+rb2urkN+VBuKNylRFZW-h2=SKO{kJaa}u9Q4 zO7+vE@#9Y@fz}Z6OGv+QgO(lV@58C<#w$;R;ocLDWV>&&{q`RqLnWPepWpcY>k{TA zrZ;|6!@Q#S#xH32cNqS44et>5I~6zY!Mjn=FwcNpJJ7Jy^g~Z5gUxl8bP}}NA$px9 z@BFq?&Ar|xFCFLX)M#E__Gza^^U@K}PL1Z})xUPC$-AK3<>eqIRhsmc*2p}jVDVmp znny%N@0OE1H#LvZ)_BpN!T2vJ)aKO%Q_qB)ivS36L$(2=*Pcywv{H1Rvr|o_OlSJ- zFJaqi~;7#Xk zg5ycMFdnCh(ZpKwpMjqHyhv!2#?Sp!Je!U5AF$+TMgJGO2G=p+;-9pVf=TdNgbiPT zlNB)}e+*IlCuKc(U69ZoMnL?N;PnWSSCUAYHj*1pN=_L}6o~|%1j~OPQQ~T_+}E3c zybX`AUDMAb@v|!YXM;U~^E$D*e9k7r2-o+7*m#h{4243`)6U$xF(dMy++Op=KabES zBZY9S5-mhq@P+|L_Q1+1XmGr?ow zyh?Z&RMC}K9sMPEGX%I51{ai!Z?(EV2*E#VB>2=l5U1HCb|D1#Ko~p-gRg|ao&^7E zV7T`2NR5RiElTOv)N3l%G6owKnYv5Sn!%#&XZ|qS_@>SePhZnoRG$x+`7s8S3I7L! z7edaL-AC|K68tN$R^Rw#2}(Eqf2E^pkG>{hA?1b@e#-PQBXI9q4Z5-PKr@=XGLEC4 zVV;{(YMulrNBF}yJY^AoI)@qO*3Yp? ztqkU&9W%&|Xd9EN4dKlFBW_&a-`qgf|E5#DgPrOfh6yHzkglcqwfG@W%zt(#u)uzf z6}sU(#l9ll^qLd&o4Mck8p-O+)&GPB1c_mVB_`5}PYai&5#Nda4>w5uvvXL*T9bhE zNX;x`A~IL(%!ZLxW(iuYu9=0Nn?i&H7o4Yl5O_?bgbpJ}-~M$_!IVonfJ!Fq9AVIK z){JZ1QAOGu{l0>F8GIHegft9)f60K&Z5wTS?jOEG@;P&V=4lN)#j>RlZ-VECcz!Ox zyP%b$@yE!H6ruGLlC_=^{9{70@couE_ZJPG5c}5w`@xr*!hg&p3k?TPCCcIUubGjB zAKIfy`;D8@NhNskq=f$*klpwN)g}K^hJRVZtjmqhYFI_%DS?+tyi>z>2y@E{FKAe* zRItKdXN5mtg*P<(V>fxTx`z4W-?a~F`0FtdUfa{K@Mixhqa$3GDM=Xrg?H%uBp(>s z=Kju0+6v*U_2tf-z9fjY4`x{+WO^ z_-~Hy)kr{I8)6Laf0r0u56^#gX;!x|rOkb>>_ZqZGp1Way%))*a8Zd>swmfH{Ju^$ zE<{SPvP%$Jp1e&0V&>#Y0|vNS;J>*)`m$9|(|xI!P_4kf-@@+jbuIPg^9cSSiIs-` z5(!EXDtQuAVVB^o5OzU=GGr`B}%FURqN7vOJ)gb z1tgdtRkB&6&WG8QYRMLz3O)l$Vv5NV{*du56L^~J>m_?Fd-aW{rH@GmensW}FaOEw z&XcE4X-ht7E0301HXmtd9m-4&)ewFYW4~#+cVOVO^#)aHrF)rGT(p$AE-2tXTjIZ} z!is9t$N|(A@s^b#Ix`BC5int?wwkQLb!d~IwvPn0QH0_s`>l11=|_UxjKo$i`x_8s z(|vS2leQI%X5E)m(*@&`TIJ+&LQ*kE%kA<$vu-K<|L!YMsnDtjIXA6I`w3@`3+{l` zH#N6q@(}xm#!7A#Um+V4uH01b7j0@M%P{ojZ!q0j_+iLWF_D^E*krx}w*MPM2c#Hm z+*R^hJ-HYX7F>7c?gJ{wd8*`E4J&17thCp-KFE7>jUh&RTS)B(Bq$iRBq#s}5|r`e zz66CiFNVRF!r(WA!I#6}pA3VQF!)Lstf~kYCJKcru}LOA)i^e~%NJ{=B-2Cz1=9!_ zFwL~Q#WV>j)1=uj&1FrFxj$=XHDoc))>v<9`3AAo@`BiIf=KP8N?JR~V^Q!P1AEA+*6%&A#pi!B2<5pOK(7K=&g2|7PSj zy6Zn8svBC68FT*QF!eJM)VwCuB3&o8QK?!n#cYP?-(_J+_m?Y$QbE%U7G_=1DQ1(` zO688Z$s<9dWE@uPwa`c~YS@x;wI)JXG}X$h zsX~nuGN*+kY5nR(P$|i-(s~E6PrlPg_l>9C{~oizLXZ6k-~-OwU$Ju-4hdo{LyChw_a!Kc|K@(hhBq{Q zHwhU@(;qmoYLP5KGNXh(_byn%*W2)>1dF1STKDW6$r3aNv^l?o@3-MigIQeqIV2k{ z312a1ecW%7S2qlm|GSMNN#*Z94H}(Kw?B!tAzG>6S0Ro6>?w2XOg>kCmt=6}UbM3& zDgRR}RomC6{M+pu2PzT24_=X`y~HM=vA0kN#?QI$^sD&a+F6rT{2U9@tbP?)KL5>K zZ(g;Ef8DR*`|Yfz)CS^43s~3Wn7gpE8q&0`&fIs~X-OH85+H^DjSXf>A8Syb`zLme zTgng179|Wu>;E;Mt6%wHi#4W%O~je{?K7xYbhL2hh)uXkToS0-I82%2CFr~C9H#m| z9+oQ7qNPf3&YAnWCWkCf-+pcGf3Ptay8m^EA*EZs{miOqa{84K2#RgS21~Y#l!2DH zYlBVIGT&n7SkT&8-Tbe;6byz^=UdL)fA2Ta-?6ir!mKgqH;`-^$rpWMleYO+cGjud z=6x-TPlf^a5oaVKrERJvhu=1@+87ME)>M_!Ha}qJNHSeAgXur;HCihfs$NO3@IBiB z3nh3`!!1zp?~Cf zf!Wk?K47*OED5sO>|;QQO;LfoWgx$gak^P8#oWB6={HTf8=CI_0YTM1DfYv6TAL1E zZnF7%9F`H*5@Dg`rd0f|ZlQ826VjIbwut3%LH(1;Nok4!CO*f!RY zEzKj;04M$lZ$A(zk0%L{CY3TI&><#DLSS2+y9@5~pTL`u$r2=K5u=n}x3^85xu1e| z%YSnpM~VDr7x|wF6+&amaQI)E9COr=`ETy0Z5+t~QqZCQvA)v(z6=)5lq|CMsjQJ5 zQH-g7v~N*&n&3M9N)S2s)H8;XJsaLIFx_+`0*0P?*9>$|eLJ!Wb}LFDv)&p@>@sd@v58b^Bkg$39Q$H`&n#5G z4g2qAkt<-vbY@JCB7uegBfToqO4AKnW~3c<(Ba9M+ZW-%cQ7X#7<2qEQLxF zr8u-Mrch_}fUn?*{K26{UQG^Nd83hyMy9Xx7rwB}tFAJC; z9|{18b8`CwD1C}s!7}C=@0~5};4(fC(s5*buwqs16%o>*!qORJs8F3jEjEJTk6={1 zR+ON`Za8ytULVLsd~PZB3mn`sWQtVYjC2r7n>2eGByRR^#(^0JW*nGtV8($N2WA|Y zabU)Q83$$@m~mjnff)y89GG!n#(^0JW*nGtV8($N2WA|YabU)Q83$$@m~mjnff)y8 z9GG!n#(^0JW*nGtV8($N2WA|YabU)Q83$$@m~mjnff)y89GG!n#(^0JW*nGtV8($N z2WA|YabU)Q83$$@m~mjnff)y89GG!n#(^0JW*nGtV8($N2WA|YabU)Q83$$@m~mjn zff)y89GG!n#(^0JW*nGtV8($N2WA|YabU)Q83$$@m~mjnff)y89GG!n#)03n9C)pH za&sY*&1M!H_hQhm)&}oA_ImGab{bvheW%^F`@V+TYF@mr*YAGVtqr{Qz2=_0uidQm zyU6+8cDK{*yS?uF2HkGUa}ZTIuGY@nPTd(UFFM`9soQtFLG{GV>QAoHYMrb{?j9JwV!@%|26)ht1ZY*~zST+r4JX z?XMY1{dk*tx7{0DI?c|&bB12?HP@+Biid~A7b@lL7fY3+7Y<65iZiJ8PuxM~NPpIQ z!_1~z9Sr+!rtA*Jr)IQ(*E;8JKkIa=ZP)1y`p&T6+`<1Xx8uC@G6P^%MN%7z*-JsY z+pW7TKOS7k)If>BjG)t&^gBsvH6yu-)^f;q{O=w+KBLWV<=FM3D)}5>YEJdM?;Q6a z8S?kosd;CYPW__Ua!%cg>Pffbw7T8S2~i_Q5Jn@kmkVc3yV>*P4-hcSc=_SC*IUdl zIKA!zx8JMzzb)`bV*ne35Zhl~Sa7QC`bn+hh!~)}KpZFsP9P2ZLIGZWb>YGp)Li}# z41?2Q`&j>??vyGcb{93swsSFXJ6_f4oc9J7`WFE zH>~9RcDIDE$OcWcb|C%~39s4iwVI8lTd%abC(W93jQ-2s)E{ILY2D$VHyl(bM$Rzj zlrCInr+Mt`AAdN&xi27;ry$DC)oOOmDy`-*$}xQ~jOlu)OW$jDJC%O5bAooRUbec` zy5qTRBtS4aPP_Wyu7vQnR~?{wJ+usQ)t$22u672^+C4=A*o$~v=1>r$%;ANjg`5aA zQ6}wsnH_={Oq%IIvs3Rrz$kzw=nNJeeCN)bi=Okq%PlPAo%1HR#@H49DafBnmOt4A z{aYEFqD}c->3b#xp)f8VqzZb0TQYIk)l)yq`LT&>cTAuG;f)MIsKN6}ug{GM>4q~2 zD4PXedte#_!?@Gwc3kHJgUg<~jTz$B*o?O`cROg-4DwZ&BlAp>T)QBr(RW>Nvr}(& zP8{@zPSta2t?sa1J#ISnKF5_t>r%juy}HvF)=s@<)oDV6&X|{xt@9j2poXZ9J77e& z=XUt(bz4;o49;svI;}R(FfKMbO~}K*Z3DPkLodc>4W*%*^Q&D)M|OH11{`n6aa)aM zwOt!JgL7bbKqz>{33TfOPJ}^EzEGBf~`|T57H84Jw0fr88``P=)-0@@7O8BGAna zrjtHYs0v2@lTO?149JAlu^7@a^}1ejz`CHPyAbX=Fjd?Ow>BJ9k1?MG#7uzm(92pb zMyI|DIjjfy;_+-=P+c|IcG2`Rg4>r4Iw#Yiit#0j%{nH;T{i9oI_0LRnIL~ zF*KU+CYsC-m)ljeo6n$ql-`DJC*=5%QUb@Dlg^O;BiO;vuOZC42)HJhzo!kxG!z1| z$1hLfE;O#$>LF0W%$QwvB&W%SVXoh8)}8jygVKXPlIRD3mq8+Fd*`SshQ;Qv?bI$= z0PsPQT2L;U?P04r;N)1Xk*r?x0xAwV*}%PUPF(2kgZ?FkA5^>EZC5du)}Z|k2T(bh z$NehO`qj%5x8wFPT%Zxz>-rv~lpod3exCz{HN8MXFD`suPLY+~!6wYtcXsnVLWHX;f(hV?IQKfevR_ta_6Ps-}v)$pWG@!6)EGHXhxPp1a zJH>d^%WNUATkYNLKo`O2RloJp%c!U~xH&A$uTf3O-1Xf4b_blN)O9=aLDur1kM6M! zwqX4=Us$-E*>wlidUa6ENHGE6~imFivMmopaQhKYLigkigOP zFtZNEt0pG3wdM(w$icuGuS%NIcH5aKEIELw1GDvjvk+wW9Ft?#!AyUiNB20XaJ^LP zU-kxFXscWRiW#!cWrXQxveJ?DUL>0r&G?|( zKZ728Mg?zrdZ#M#90T6;D4QKj>&<$_?F`$T;fF3K%)*2TGm(eW?yv`?7Pm{DO6sdJXiq(&Na5LB*cE1rAOs193$$|)u~s8S~tZ`kW~`(TaWmYk<{JsP@{6&y2mIOEn!qD_#<|Ou-Sqbty%M=*X)6CQ)w_ZHU7+Xdk`c6#^4sJ zM3DqB77>i16|_-2Hu61Hf4rlUR5(N3V=tS&hpJRmFgDiCpcn8576s_X4X7dY3e?lV zsq6f>ox4rP@Dk!X$}4qL`|lH*5p1QKYSP z=yYYIEJ&xzIHnG_poBhPmHJw<{w<8$4VV`*oA@*D_WRxbM>d+?*@uSRL3N&yN8K)_ zzj@UL#Begd*Dd#|HFw8t4CXi7^JdLm8+w-jk1;A z^#D>fU%vFPiam6_?hqy}Z+^dL^ts|OdK_T)y3jk^4)iCoAH8vY2Wt7fCf3BFjXd8S zw(4tC)#ovTcU1oaK6kKodEmPJ`MVwWqK9a={?YkcjbTR=#GCJtn!o4v?fJ|{Zf2~O zv)cdW`)}r!mT!Lab|xwuVJiy$Axa#dC;%+d{aYiX{^#>17k!Q3@$Cr zk=6=Kq0(nzt-*>9X3PFySZ!5|pgGT|>8AUjgC%P zfxE?Lx7VS3EowDraM38OyseBxV$6C$2b5E&Iapz#YjQ!|#~QYSd1r`~^&S4fmI;IU z14D&;dc$K(P(uP@l!mGA4o$g8_%!vAMn0OZXCx#T3KQw|=6SR3R*o+# zuetqjGKP1|CxqXNT(j_8u(&`>p zTlx{CZfx#^MVGgq4HS!&)umj9sibAlgKdcW#g(4eh-=4TCe~vFjK6|u!8{5RcE1lZ zSf6G%C`2L=XuFflj-)aag+~lJCUe?LhcH&tm`_83QM4@>p^aMNJcCXbYAL22Qz7k0 zY)4itB(+l*xvXzpkjjYaG@5;wV4*+`WCX=%Bm-?3YG?~1Z3k-xj<-e~%j|I%@eYUf zsUW8SbTEmCwfq9sMcAvVQQ|S=qcWkMCN`sKAX9i1#jHpU(7i+KMo;V^(&CrU6^p}8 zrml@#F6G)Q=%ZjXFd<(|-xoAwrq32?g zNUW@$KcGb7WPLouij;;>!`f(^e8D`M0%OGvgQbe0oL()EHTK7mY1LjYK34cK-f6Qj zsPs?K$GhFiF$|Z`Vsc~W(PS1%f29p|UNo-CDMkt`9;jj5T3lFNz70dM3QHPbaqk6` zX{=V10!F~8;%wNf=&FPBQl{3gW!C$(d``AGo^K9L54x?(Tbb=rsdPINfv5UZ>Gr8Z zjc-sYEUMRZ`&{bEUQs`D$StG(tviTO^~3acEV;0*$I=(e|245ml_kcqhu=19;>bFZ zXt9jEov{d$5mV%)f^Cv#sIQrM2xG?ZLc^S%bZiYEF%&{#%^V~{7OW3elrfWF@W(a; zwt1=V!AfP!x!auhIjgFN4%FtcaM|T40WrJAF`~oudh}BY=BFUWYjp>e3FiNYztqcw z#bUM4hpkEE>cOS_Jg+|{rPalVim?}pi>wy7DFljPKhEs;*oqK1AL6v>hepAM5Xc2B z+U=hQ>yT8;0Ss~m;W5|)81;*)RI2b~s4Qjkz9l{CH)W+mJF|AYO+t2IVJUS-+)j`0 zUWVvRD{}Y7}_NmU4(~briMh?sz z=2jT2Z8k6z6mC3H3o^b632V{A-SZu1ZL>CDmGIZGr~GKhPhhp?`z!B%ht@xz=VAs8 zX6P+U)#LZtU&lW9mH7U8@IMmrr{Meaw5IT#>ohE$u>I;wKa6Y8zQwTtHZ<#l4t~_r zhI#ssIPmd;qXx60AJV}AOF!U}&Q37X^XNzDf5a$t%;tGK`lXjOZ#;gS2`@E=G3vor z<{17h;+I~5zi#9k9;@^Uhj$gm4c%*$VFiv(5ur>pMCzyzvTOco9u!kb=j+Emm2_Se zeS#_WsBmRuQI0uxV&8*qPfa1%_Hp4|4z;~cyWR2S0DsL=t03zvxJ(V2Y6n+K#4aNO zyYH>oia-*^4LU|p?P+8_h6Af0^Z~Q)G>?5L_jYCjCfVEQEHpG?`H$(&!FDHR8$_h8 zO12c}P7JrKSWH?h=@F40%%?DTWBJD^6^;?;JMbx!U-TFGJ(a)ygevp1cj@)JT{!Z% z^fs+1hQPimh9RMv79rmPZ^?>ph(E6BoNsW$QbZL1vpcA$4Lz7h%@DJ#Q~yS@AM7w2 zszEFm-r=&Fybqn4b+iaGrfeI>L867Zb#C+e1DHW%BK_ej8msM=Ui(N{ip30F$5dY` z!cOtBaGeJHE3r<7Ne2}+M5*r*zOjqbg~MNszD$}+?VT`l2QdLh@+OP{B4eSiSIf>39(6!nBLj4kFo*+$P+r_Y`-c7W9ayW-AsNkS*X0{Ir6TnDa6fdi6O2e<^Tss3p~-5$ZcGq;?0I#tW~NyjuC%KD z`oGfUf{$7)2v#lCxQ0zddh$h7WgIK31cwxT*UfPKjE+Z7A6kn4G zj^?TxMerPBI)o;oOE4Kcp&9d-uZ)o;&N^!fVzSkTYGbQ(JPfn2O`G_hTRjspwZ$;S z*UpRtLBGcKh)|C`Doj*pWQ^#JcLx714dQIWnF$KC#_GJpCdeEC$Du)i)nTB_%kBhq zsiv{uz!uwV;E-|rQ4rV`Bye*+qdp;-h`iHJH6&!J?Pm`*}@ysVIE zI5q5eL-FquCdxNB*aJq3QPfU=LuEyjH9OhYJVdND*Ry)IBdU@{BWn+!M7s0@#Gz8n zJ-q$lf~ov1exQ_1+M(joS)JQ)dC^7)N<@ zi^0W4J&x-^&4+^pG0IW3kSNahX&6(;8wDza`U4nu>7o&EBf>sS1w)=3RRuALYV3RW zG&QKlXaWP+DJTqJooC|2heTqj1fvG}6VlUDy}&A!vYWgWP~utPS_*=wvba@=neXG|FqBy=pc;9ZO! z{mVo51bsbopc(bckR1Vd4(Nl%hSwL4LtzID=hE0ibq^~Pfs_K6KScmWK;kHsoGrlG z=>*H3B-HEWXBMMr{MbZjWM7h!cyWU9E5b$voELaPb6h6h6+n+&gy@z>p&OmS+ALZr zEZ`Vj?4k;Lvq%6U8L-DUJ_7)xW*A%hgJ&Tc7;KKPpf15{M7OL~3h^zw39y0>>#+UC z8rPWqjur6aqSYS(BWGNLV=VSLCp9B9h}zsnrOI2{J&=M8gtCi%}4xb1zNIy@UoIRrd14+{C ze`QSW!o;!*V{)%f%)L4~H;&p*;5i^h)@q4+(^$ofZZSZN&Yhc>n^%8~Xt5<<#>YX7 zPFtKOpVtWH(blDTzdwE=YPaIp8$BZrTg_$rq z0AeKND-&f65TkQXl(m&HvbHi&)&McO?1{3rf-3>UQ#x`+!AykNg&gEzgdQ*{n>j>a zpI8Xd7DhTuP0D7{<@|z$Z=}oANca&<%P!<|6MBh)jLAQtpD_Q(j>5zVJw-wEc7-z5 z^6r)%5D3_@xUwv6$`e3F)?l$PVU)=(5M)gLi5yrgtT-Qrr+(S(?eZp>7enF;1uMMD zT{Lc4W~PIl0%}!u=BC97XmhY7plTJW#E4Fj2AX!VCB(HF-iQ}l*iFpm)v6tMwBPN} zVO$Seia%v`VRh9sAoj8SBMdm1aol&$bs*%a%rIoU$~_Zfj6JjoGibretz7|Fw?;Fo z|Jlbm0_&4U+6+G4oaaM{Z>r;-s*`FEsGJfyJn-h9b+e*a!OZw7<0iFMu*%CqNEg&G zF(p0`l^p?^#leXfR$K-{cgK|Y@@4zD+p?R2ZJ}()go#$r7X*cioL&l&a#*8{khkbb zrbrIh=hwR}95c`*Yc`w9En49v-rK_iin?K%nFu}sVEJnJaB1Xt`c|%nZ)Fm`!qxEM zrmgYxtzHe^>I8haYw;@W0r2tk_Li+-I0>0eU@ZpNZvHZjRUss|pKMCLB)$rk3 z$no@Dt$*amLB0P~WTdkNl+mfuZ~=^#%BN`WCO& zKL9=f-_`mD43HD>U9EpC!gvbbw!seO>&Wzz%lVGlm;e_2<-l~X(?I#E@^rA%K>4cU zbg+r-8~FC1E;P*)K`4wl1!QGyIa@*wX^18E_#qfsH8Df~x?c zx$+QLP<(#DUo@wurNst3;1!fHY-V#H7V9rl(y%S*c0!4}6oxDq{<9W^fuym#v2c1& z*;l0UIPn0Rd@?c~BewTsB;4QN>Q^>bGi~WMLP%F&%A5?RTj^#`VtH}FLb5!&E$3m} zmNS;aV-m5t9eLr>?6M+v+RKW@a(GN)VaEPPEd97+oA+&*5vLFxd{$@df5hxx9mD?R zg&F%FE&IXY(bA8Nr`gya-2M=`U_hAm#>akecnteBpl9BgcMhea@u+(MmsF zsu<1w#Tok_vGgxGx~~>2wic~b(21iSCmwJ4!Q(~nnU%vga&Juk1Z#J= zLh@q*u5rm&C{Drv5OGh|laC?A*u7)ck!f;sdkAhm zh}c@N=ZIS|<>W$00la-8d>#c9uf?X*9$^Vzr1Q+k4*@adsg98G`}d9Fu4O z2)q{cM%l0o-1C9s3KMTOOV6n`EWCij0|4@5&n7n>ee4VN3TtH{wrjjSeLnxT&F#(_ z4`uuKvnyHnr9O-^csQ>zulu&^-8P=4qdl4rM!-Y1#H-fhXYnF;0WUA!o^MoJo_{hM zLzG?)nntd$tZc4^+BMf=1{KP#hQ_{?xWmcRxnhE{vKkuMR#sC*Eddf0wPkSK;iKJe_o1v;2UlY>nHWE_T-$rx7B zYYuO(ku_)9m{M0#`5mE~AY(8TQiqoa27-*kFuCS%uZd$Qgd<=96LA{%;~+5_BFU+; zUx>s4x z)L? zATb&u$>}u2LB?Q6?NCuN6CEm-&sw#}rPd+=5~U%UoLY+n$QTT8he>J82nK)*gJnJx z;f}A@XLETtXJAz@Hd!8=DB~>$9N90ys}0vSnSPziFE3l+#72_7=s8{1>0uKaCRfQi zJ#1oQ;3`?ChQ$;fvq4=Y>-4Y*L+@3xP7j+fXkI1j^souT-Bq$GES4?2bTlr|D}m!- zE)V4>wQZ)$szdO0XK;^CU1#Tr1c3d7TuI7){{fAE(bc^yZXtsXrwf8yrgprl0{ zafmE(!>2OGXBt8IVmM3X7L8guC8%u#%x3eU+cXd*nEX5~hOh$RUf|jG^XuAvPO>=G z0IPvHC%1_EL1R)rYXCVTd&S3!#Z}Jml-Huhv$*OV;ZS!tIIgaQ4<%$$63y+6 zJGgtwU&Smg1O}Dd5+0G~GYM0G;qG-G1+uBin1~Y%?}%4o2Bld#`w}j=4Yj=SV3RP} z`r;T&@FLZh=)58xM$u_<9TR3?h085bJGP!K%S@ADG7Og5S3{b2ux}xUivoi+t<+Xq zVX~sddI~UH9CkqG)ZmOyc6lXKahHrOVhSi}g~a5&ycF2^a?3c28@B0W&=DAy!+I{` zBl4%kquvEH1$QY}OuHZm=$nnu2 z<1nPz+;S_CLI5%b0}e?~qJbx^n9^8d8QwAUQo;(gS z#8@0_fI_H^uV9p$Y2$&h>fv}~p#fqn9@hW~6UOti^(Z$)-^g+()&NnbEHuxmJp|3x zqYr;Mlwfgu#wmnaE;eLSXPh`lY|e@#+iGJtZ^l8!VX$?b5f~D4cVRKCMFA(DQs&JB zNR)|5W;{leUW+)$7z{X_n?{3;fgs~Bq`aO zX?%!-jK+X#izZ7AHhJ7aTrqDB8nl|7U5yod^XkB4AE9|5hO-K zBssk;;vi!%q>m2~8iMh`wjk$LmV=dSJ{z%}j0cO+vJ_}>dDwAN+awM$4nw+RMKB~K zE8OdZD@D3o#6e;-M3PhI&ukndh9OjL@_fZFO*Z2o<1nPlMFc})-pJa?>EmS_BiodGm`Dh1dy@G;ody^ zMh4I3`ma?^M(sCK+zOu0g?_{c+k!tCR758Mmd^)E^L#$y#WxvLFxovozYwa^`FupB z9}hNyw$)&%mB-$k)j^W9#X-|CE-r*x)FK?$!!DP=m;fDxF)-kRMth1%!59TiZdc{A zp?h0?F{|e=rT`oE>O2}^b{3IyNgf)>RCy_MrpUkfTqXr75w$#3M!9g?#kL_Xn#S7* zxK!RerQo0Z}0^HpFq4vn_0)7;I{6Sh1GyN@k`_hn1CK#cp9`R7uWXS#iVkr-|U6& zWW|fKfku{M133>);q>F-{DkY^rGzFfti!`(e0^n5;brp@z`aEp;ERzGgPXK8fGeRi zfY;6A26R18)@)qv>w_GbctoWlFIHmnW6^Qjcu|kFPt9YYYF4fZ%PoCxTDpmZ) zXTb3|ih4xi6 z_Mu^SP@U)VaYx+@^pu7ZCp3^cQClZUWvGTZBT9j;$y{3tBLJk-JC2#{?rg6)FP4usoSpssva_{~KRf#ehx_XY%a7Y?WY+h04-QM^vQxxuu6S@ne)skL z6B&UVj6irP5Kmy>RUmVLt3=@~E~j+S>tpD0Hu2DfgBx8<#zVK^;D4fYbk^X{0WPG) zkAdMmb|w-Sc5tt(pSjvOajkFYVAU)xp_8j)sRD^(aLSY&gGiY`V-T2C@JLd9XV9QarFMoRou_`kHOV3R}dkhI$d+a&z=$s4CttvDC8ZagC(h zDtsg%&Y63O^&PI{l@qfiJa;|a>%kB8q^dK-6Fn^sPX> z>*?UdyxL{8qnep>+;5(o4l0_KDh~7Eqw=!=qe<}*n@_=S!lD2|hT9IVC9Z=o zC<);`nz$S|{NO=-JjaUn;TUZcFlt|(!|SEH51^d&npWdRuH#H;zq@!g2QT`fI=fvw z^V)?j=M-zN4)FpmxbiNBoDa?v@osRlw$I$o{o3gXM;)h(m%oa5 zMrse&^*zY;zyX)&5xeiK)yUyNzY46A>AFgjX+j~cc z&i1~ucOQRpYunE<@qTIDSu1XAI_q28I~z{%+2Zyd;&)5CPLXJw&EnmiBg7o7?L6nK z-7UZ1lG*bJ}5bd`szSN_8OXmKZxc}d3}#RyT$wbk*3_FQ7e82a>pdaHNr_-ra+PePToAqwsV808}!~IoJ$i zi*^`=Z116Phs6Q9c(1q(=9Wv59q@ZVAv!Z`*#%+Vo>^qvxP>JA{p?@EbgG}jTg`@P~m4~ zt_NQrwRhKdN<}FKq6hI4qPNTZ(56NA+4#_1G#mTL#`fJ^M}LHW>&3nG(hdsU+kdX~ zf`k7{_YbxY5rN=g=^kQD@PnmwRuil!9a7d=vBT0jg`l_wIu19V+lDM|J%6yjUET*l zW$;ks4x!Ec!`;#$1h0IE#=W;Gj3vO)=KkG1;F9q6E_y~8EvzJH zmkDkbcei)^c(6lqlF?Rfa+l0S=KW3n)eg?GIAS1z!gY9e{b*YWma@>LF{%W87=sau zm2Qi}f~{s}c#&~=jxd9H!tFO}nGzlcgTCObAKY~|ML?zAXdlS$`u-u9g8_~Ww+^o9 zSX0{Fp>!9i&8AnF4c<_~rb<7m9 zJoQ)ctJwW~Ju|HJE~f zW7+(gnBx4WIOmfPyn|n=Y~OtGM(eDl$_uGLkJ;U*bD|(m&jVOgonv^x8XX@?F)x^J z@wgq-{z#PA-I-^z)vc<5k~6bJYn0J}asPD(DVY8D@f_4X;wVFTSd(M8GC{*W#s@M<%tZmpF9k@b(m}w4i@?oC9c|R3B|@6s;=w+}}}n&^#FS zz_tjKAxFIW%g_-ci4q$lQsZLeX(aV;vc|nQt-=`1=WL_sn2zI~FfT>oH41M;^Fco@ z_t9kM6cPa5?RY#ZEf&l@yd+(Bir!_X=4^KW>EZ|V?+<$eha!m{ZAqSE4u0XubRU{QG!I5hIJ-c4RCKN~0uM6xfKV6# ze$>%y-U-U(j|Zyo)32TLhpcMUI{b^-70=uXgBvu|NeB~PrzW=_1|i_#&J*TpcYtTm z@gzK-kZj93S`T5LEa@xSM^syLq4zUc$Z!i=e!(3c}@>+31Bk~fI~LxrH9k1{5p|F)=2$A zq)Qn7n$#YD@!g|H@b{!omJU44+!uI!b086blYV#DgAN0XK?oy@L2E*i!817!=NH0X zq%{Ow0w#sU;l2?Nz#pWTUWcw*$E<60*~NC(C5aBh(q9>) zN}GHV*!o1ObZd;65P2UWC92}1t+Zh`3Lvd$n36QQ-^a{8;NlCpZImj(`iIFhkQ2yW?NqWz zU%?Q@;lYy8HXgDbI79it8!`{7Jxnw5(`aD8IA&?caN6|-rvGB-;6vQ<)$I0KF!`ZX zutCaB^ZLVi8BHk8%|@BjkIep|)ei6XNXc=)2vsbZiZKDVwRK%2xM)CfWx z7)@#zY=l9K_uX^XK-eD*`(q%3pGb0Jh((!^2#`>1Kt&P>^@S{q0gnc!tOQg*w+a?l zkOAU=04%73e)p0=kcy=*2RZ@_kFnBb2+#P{plBjBf<)iEuGDMY?inoXE+^26wwnJj zfcAl@Oq1AKG~M$8#)&v z6Jz>*(fR>A!Xy1c0nslo8v1z0tU=Yu03lx4zo1!XW{3DSpj7f)J6^IR!IXJ}@!6RR8b| zLpHiMLm(WeMN-c=gI2KKt;_rgaRztMXD-2A^cIi(=aQQg>>cQR80p9bKL||deu5Yy z4n@Lz5X*z=pmrL>^xGz)-8|8YX{CKx2@I_=ManNmVEpQY$AFB?9zz^{s{^#DRv1w_ zzaqeS6F+7ul@y&!5!8v40oAGy!qh>XYT4tSX`BMh89T zbU8Qyws6A4Xxpd=R+TpDd2J4m4QP-QCvElMt6ha^)>BOc4aI@GGU!$?!N8}i0#2~G zE60~sjP{_mqHe-PJC2nJ{hQiBzrGzj!I3=x!EoueC`j4cfh+CKNz8lE5D zYeHGlQUwI9*Ky(H#&uIgy8`2@1Jp}s1HmHHvY?S@(}@0Z#p)Y)oRlg8NtfpFXXpwr zv?xLxgU#IE$IK77FrFh0Bf}WZ53ofOU#nr-6YY#;SRgo9Na=2#%$FFTnuBv027+O? za@vIqV^DH=FCNAjn7Yk`<7Mtc#?jhU%CmP0-3&f;!JWT#_d={0SbulW92&=5o4wVM7&t80Mr)wPI9siFw)PbGcaXVB*E_ihChc^QxFtpKQj`WLNKUhn2%j zr3aTUz(Qr_0>!?f=UkokA z7~)4L`XJphio^=8c#Qzc3K}THgeDgO6?X;8q_W==mq8FfzyVER{Nr0`B<#_atTv92 z5DzYlSj8Ay%&p8v;K_?y-wAv3{WlBqH#1;Nv)aK&1{SbE%SBXJFs+re;UgK6>3;Nf z<{m9H`Zo|)KEhj2TeQ*!B5{x1F>m62^C-f-9>T^)&5XdN6*p8p>Vij_xE^)E&Iv|W z=q|6qvV=Fx)u-VYV?0)Xrb{&8zI0sW$RG5XN8K3vbUE$RGv+sx&io>t*5MqEYi+Os z#PFdGqK{lW#!-}m{|pUDK7X|1ys0GNnx8kbjrg)>A0w@dZf`0jxFhE=G2+b_JB(Dm z8KZ|O8vFWt*sCw?z~2ZyN*gciIrPhfkH{`gO_mRehwDzhu{EQ0^i82a519D()O?6`k^yqPVx}935_pUjoV6Dpc~wr9WHv zg_mie!UDI86(AR~?!%8^XJZqdA*jOEIxfH4-7Pu?>u|fE*Tde%VHW;7Ku2$f-4ce% z@=+Ejj<)w+_@HwicV7V0!A2SGHya1I&yRnz&gOmGIbJ?ml`55wRunh6gd(!?gVVeG z!qW)ld-sWS)wu@`qIEFF`C##030_MM$vP+=ZNX3W0Ca8Nced`r!v-Ef+htV#-XU0m zv+Wz%g?r9M9)Irfehf6sp|iV}U106`o5SzH2c3QRVF=q%n+hFki|g!`_C5Pss(I7mtBUK z!6|J$zW{eQFg>4JcaF->p*Cp!GWb^BV)Md9=UGS~iC$rb++tXZyt7k;U&(rD7iCjU zK~r`GjaFI56@qNN$~vl}fhCH>?k-SNq`lT(5SQc1ZeiUyl)?|`&9q%~wo3Pl&%&by z4_Z(v?jNk&hlGGpLQM8PIrAa#;{NvTJ~>m|+lHUaVey5%dyrWqmyU{XgIO;hRZ2T+ zhY)vG0+8#6_)|K9z?FAOtMDVsF6=tb@lO#|-GYdrv00C!-2#Z;DItbG@Vs%>?{3fq zZm0AtT4iVd?nZfQy96IXGNxF`!rx9qIk+QPEuRy4C^&~ZD}|78OU_E+x&1?DX&D`^ zbRV8?S^S@K?u%@|{|!9aUZ)RZX(tESHGyS6u;K>_eqhykjw8i$yZ7}kDvEHydF~z? zaedp_MXTcOo?L9Q$6@A%t4)wvYxl;z>vG5L!&Q(|uu+JAPF1N7C z+^zQRV$-n$>skGl?V|)G-W%Lhq<3MG5FLI#$O|_Kti{%iw@zWaFan&WoPvAq__7JxgtkH_O}FbSc_X-mL{y>AxBV(g`tVJg5f@z}U+$l~xww*LZm z9V<=?qRp(th5b&q+beeJ>xMj(F(Sc7kF_S8E#RmjMHG29A|(p;R4z(K*f$CZ^9C+B zFm@8W)4sBtX<&c#6v&+*AZDFA>GqPsZAVQD?h?2U`762_38i=+ELemSPtNk0CCjc!qzXW%R2L zHff#nf3a(utKhy_cyED7q7z)PT!gCfK4Sbu{}$L=i??qM3vqjuxO64D{lhw4fZZm# zb(LO)6I&QOc8*~;ru@1{fSAKbm^soPoO8_-vB_vG7U&8zTtqL9-EfbGC)@2_OD>M3 zBixyDCvvrH0O4S-4pv_5hw{KIee=^SYhu%tKO@8m=C?7~#oC1aO7m4Z8F)}bs5C$6 zluX$Nc$z@^00S4XhKHDld{SOCfPH@>D=|yuV`+Ixmf!RePDnS5pB$?|uL*VB2lDV_ zgp<*`g6SG3%`Smx(+7|kF}+HoQ<2?cav$z9@CF^zj^hoi$V+2w`13|E!Bk63{7Dyv z$p&AM0h}iBe@Elt7^iF9>TxrJQMK9I4kr!_ba2Ex zpbz5YeK3wnOa=F=2ZQ)3u8nI$Nui~YXN>6Oip>ztgz%g3@PA|Q0M0!<_`l)*Ivf%% zY92J8i&`J1br1M4;=zv+d(PN5zJT`tb+#U66^`;j$rrM+$~1Z)0q5P!Z-kJ7bJ1=? z1$1TPy-Lp2QRO&yMxdd!nVY)xY$B`AjS6-yne8X8yUYY<@mDaH;me{_5E62!O zxIBfq7SaIV&;@$*@12(x3ok>f5YG#4E}4nFUH8pvo7hq+@$F2%VZw;&@p0ch$L<40 zo=PoWn1yMX#$&PQ97*TX{iab7@BNSB~cGU`0TXkFbTby z*@+d!-c;kDcF5z$&NGV6|J1KdxHbCtBwUBnPL;dkL4AVmHKrcnXrO5QJduhZ(l3fZ zOb=!^!K-j9K^6%b>UU1qcqSe*xb@Yb_ql?Z{vI5lcHlrG9?WoTM`u)0=rImKgg-b& z&tw#i0doL283bD!V4_?r0bj0q6`e)=>745Dq#{dZYvJW@eu=O922P*yCKN2lqC!u4 z6N$24t<-QenC@A<-fa!r9iQrnaMPhvVKAJSgfjyC$hV!iNsFCj`J3Tx&V|1e#j3PK zPv6u?XcgS)e($l@doP_mF)Csf>F+jc{qBp+6J1`I)9WiMu$fLu_m{UY^w7BjPCYyZ z9Q}&jF+%mJb3(Tmy;=!3$SjFYm5B6_>vB-eDww6AhDX#!YayeVDI%XM5?ZuNV}TAVxK5qjt?lTaEhh{<(Y)6loAJ- zpg>&AEAWZf(K+CU$F_*&$cO5>-ynWd@Ruy29T>k=UbN)sUoNG^vV*A)JDL7->np2^ zOKMk2i3bYxVPZL0eZd>uWf4{|0sOiC$H zgrxamyEBj@^m|Z4;D)T~GcqkhAsv^>{MbYYGZeU|V1H^&FnvCMimhH6AGoI)end1> zunij40Zb!dC;}jk&OiW%IGC4V-h>}~r?R>X_k;L1CK%F=3sn#0=hhv>G@2JQLk}Ab z@kRwe8#g~8ZcUan z^)nG8Zu05IIC!_KiAa$r$iYU5SHWo-sI1&Gf%`cQKZNDsP0A6`W64}ujFZWjsmQG2 zb#5%g%uj+|_`4g9;)*@#@lhUba}F96?`P#2M=$K-5eA|p_c!n{eM=M)ErFP10XDfr zuF}x$^R;b?&7&K_Zl{TpIpLv08hp_3a$!nTv~3dr7>_}Ec*!-;AZo0jKklkSpBd;) zlwoK*g_HunaYFg0k#kgn51)ArN18KX4b4RJxEfeCEuy!J%QzAxFRVpm@c|K7va6Vq z7!?MbcMFGyMfiaxA~2`-IEQ~2cHOeu+ok0qc;a_qu~2YEr}%lB9&+Nc82phpzrZmfH3fxiH2dt4EfW7ChjbG{Y1HAW zgBRt59e*RnAUu5AulCfmD2rt~0-2%hY}SR)FobB;c4FlQ#nR^YXom+uk4Y{VpEev(K^t|nv8oqb%;`;3Pn8b@lcY+vPIgmtMw5{socc7 z#R+cmEo1TRXA1Xxc64vY?`KQ-MaeWGN%J08>l;LZ6D}t3c=!@&4ZQ7>tlgqG{UqZ9 zl{M@eSU|lQRBNY*)@0=|QIaY=BQ@uxMfJE#a1-wEX>l$07`yw@sqgNT)({SvEjuv~ zxRm(E(+I4(P%QzARQPyDNL@C=R$9DDzlc7c3CBbUZQI&qhP5>o5zm1`wlsn9P__J` z@@eZ{iL=+ehLfwS3wReLz9_a6M|B;wT8K~sVv zk{TU#$F733u`PL!eQtaGHf{}N=cXrz$!835)8>r(NMNlb>g2Tft&*>lFHx?)5FE2= z98qJFGv0O3P!?-xg|a`#)GzLPVP#Xd5X0#aUnn);&Eb zqFHZuc;(wUJxjVBxx+m~1FO9#+Y?}v7PwMkv$ZqGR6X1nDPBrD@P@HJ6fhu)TKipl zj$O@XDKUvS%}2JeiO}o#jDZzQr2C0Ri`t+XBy)ingvA|X8ynK(q%PoJ*MMxsoJ8s3 zLT|{Eur-mz=T=_s%V|0--XIQ$C!AD3kVd~y0Y*GJONXG3G!_oiv&eW{nv%PkqKq&u zUc;2;p=lujhqFZ;^gp_Kae~HuEAfcm%X1k-#~AUa857LZ@q4_&X3K&eKI~tSsrHDw8Z95`^9oz$+M+gR@MLfux8cCcf3Ai{Vi9%nI4M#|; zmt+?f`95mcjWps-&|8d^Bcit;jy;%sjm9U(U&fG z6(LtZ^mEq*Cr)tU)Q9?u1|b8^Zv#b|)u95niuy&tEdlo$#=b`{1L(yd6^ShaB;Lvv zGj}1`@Hc86lXxpz604dM)8e&)y&B$zTH|qsFeL1Z)F~UQBfjH2&o1EB1B>VKtz|%O zX?HtRNczYH-peXn&2_qb#fc<5&7cpH%8izpT}BlB!!Wm0OX8F-{!EgvrA|%ZqWfW; z1>V3_12i-Z{44T!(OwXK3zCW}rmHnvn!DW*lQJB9qTlR=;aDw>GHzWWLNU%6SKPFO zw_ug4>Ocl}B)Qcs_8G0PJr`k%b~!RRNyJ;Qf}&8WTKQJ&9inJtaDQ1laL~#w;2xx8 z4DNWqzW-a0!>Ls$;P_#*QizEjxZ=?&Sk3Kg*KzqSynZ^kPuCp3qNT8jvzn39S9FZg z6Yf0CTfr^Abb#b3tz;}lQaU=x&4?I&P9z8Jk&r7fH8y%dLwK{DeGUxoL)RjN@*6Ku z`h-gQxKY|a&6Pfe2Z!!PB)EiN|W$U$GD2;jhJeXVKE{zg7z zQiNwN-cCmY<3elS!84m(fHpZgWlU)@w8byO2uFDMV2I|DjEN3{>7%~*U5N=dHXSfQ z_6i=;oSV`FurtdE{4q%}675Fv`4O*%4a12co?c|FADL=_@c^e!z-y{NP1l3w-`#T` zs9?dPW?X8lvX7Qf*x>g22Sfkfgkrtg!?Wq3x`1PeQ-C~flBIDIv|=3sT1TcmZX$)R zMGs4T*B^nBB!}#s4Ed&1!0(+gDR{iy3HJo}bXdX1$`6#wM>x#tHT7t2R5*bxP$_)U3@3 zjMs3(R5qY9Lpb_ic|S5i4ZVR4Ja!-ibFh6rgx-&JsA;lC2(9Q8mrc1+0X_g@W z(uveGUcJD>t#3W0)-Wm%$>O8bVT7d-sY~t3S8BYpJ12~2;BJgI4%>E3s|CX+&qm>d zH7_9I8v*|LpT&jMWjO+b-DI)Uv&k$t9UaD9`-2saY>|zHiR#vo&A`=VoKs51L~|r} z0_iu7Rb|(|ks-UV3SaV|Ngw_wgGpyTR(vDmQ^U+MW)8$lz5%rQ>WTn!-APeCpj#Ikb1$z zW7s)>jKkkBTGL=+&*JFIM1ZMkK82rMz@sUgwv0hlgYJ1A1CL^$g!rRy5FloZ4}G;Wa`7jlcjY~>*r(>&uvrwM5cS=#K#@w!;~6$+0>^bE zd|8+hX?>3CDuz?g>|{G;+7Tl?n{n2>dUg`#tD#y~Z~~>8=em#Xt0a z**@;JHu0G520Mj}6tO5}og}kAaL6bN$R0Ld!wm8@S?db37v=V1*vCU0VH8+B7+hvx z7{H5QvW?emb^T=>u4u+3`rOY;L@EJtc_Sr(6%+ra&gFhMD(9fwO#uSerUrTzPR!$v zY#f6sonvR0NO6GDYeOUy<2wZ`CDjHmPs68?l7!}S%(m>H+iI0ff< z+cheigUM&cDRN4ND)!F3BYEyM{%!TyyZW$RxjXFRfjo0?5v$ilW$x%?#j(NZ#Gf2= zNy+ITZK)ZHw`kD9gDJpJQQ%84(!yiX6^qVFLWWs6XuQ-L-hJjuwg52%WlYjchEjUl zQes>}3^+xdV8C}7WG>gxjDc|m7792CY>!qF0X|XHspGBH8h1kY1Zw1C#>hA$p#Uze zL^!E2*a&FJo2k}2*g6J?o*%ygFf}sr5CHC#Ide=5WPDwpci65|%)^ga10@?M4{Mz* z>e(z~W}HgnRCG`vr)Ws#3XQji8aWFmFkCQ_78?;<^Yn+A0P)Z;=HmUqDX(?qO6I7$ ziDj{Odcf;J&v;&kj}cFTnYCV8>)~DZhyt2lfOBGs8$Oz~kZ{A7$Pv)1Y0%b_5dJN# zI^3M#Euni=jrvzX8&(HsLs|fANX4pnT`te*q&12SY2+4{%9-@I5$d z;w*z$K|MSI)`U+g%vi=;8mN+atO1)7(uqSnoYtVK!5R^Is^oKU1t;3nlzSzk#D`}wkGe< z@g*@iDzh&x_Td8>YWp>=8uE5V{dmi5;e}i$2*kI##*|Y$uQppWrCp(%snA6%YM&@@ZW&iO{Q3Tg4qAW1abBd2lMw}!b zbo*zpWS-H`@c7!u8df5Nak*$*n)M0JH-CV6Nc6p)Hshm~Q?*I#ersa~f@<8}tzMuH z;%OG&3YLe7V^Vqy-Se|s$*H|u@m6wq0cZdC!!Uz5c6i3zK#Px@D;A-|iex_Xk(;{j z4Ogl`x1vW|>lEUf@4tz=g>QcJcBU(Ql`CT$J3M3VLtw77L^xm+@{tSmp{yfj#^^`D z=*0x17iWwPuP}K1!$n-83kgQ!(psfQe%Yzw zNo|}lIPPPm%B`L=IEI^pA2@}Zh=}Jv(^WQJ*emXCud~^LFw~|hHr*=c)fV3AZDeqX z((+z1E&l)Py$P6PSykYFszqoRP(U^TwOFL9iXzEa zG8RPWtX#U1%8iVy>gsNqATlE|GrBS(vSZ1r1lp0s4IL3gWf<8Vh5=<6XGTF#L`TpO z1yn?29NZ8$7!}dKjQIbZbKiUM-isHJnblcE&1dn^l`rnQ_rANFd-ij#>Yrx(EOtPk z>{$tz=K@-H-}t9n%zBP_!>=jpe;N1oo%{{Ap71kzO_{r>Kqprk*A-_tRFneC6uTb-RMF zU+ibU>b>rjL?NAwLAHP+!_!)s%b{w0_NeFd#Gbl%KON(J4~V*d^%xPQ_DiR2LuZQcbX7xw$QM9ZS_yWXoj4u z9F{8^%N}(Sdfj7Pyi>hrt<`Jl$_#>%YUBuLOYm@QjStgP#a-#qd%CtpxZ!T|af6Kf z7(UME4L0y-hEa#N=_Tj8I(Nw^cJan(n8ts;wnphKT|Y_=hWXXHtL6WttbJVRK;)Ti z^SJk%z~<|%b1^pGijvv<9G8A2u=!fdZYAZXv$9j6tJ?wrBbOeW!#J9#tq|lc(GThRPCn z?ACPjI=ED>5TpuBdKGFJXW_`&G=PQUO{iUew*l{$^va@rf;2w9=#fK5n^+k7P~QN9 zgp&zxLhbrT5#)zVdc|Joyst3-d=Qin*>X+$Jd7E20YfemLFn!S<17I^FGe%=Q&)@A z#)%znr#*EV`Vg)!|x2RSZ_ z+w1+nUS?~-?V!vWhe^HD2h8Vg!mtm;t0eW+r|irX@dA(Zl~`q;eR)@q1mjBR%MT0R z^P}-AJrepNGmVB^y2L_*Kbl9Ovd8DNN>X23yb+?(L@^^CN(&v97%9%9)KJLp*EZ{$P`fxK&W{F(nUh`}V7L># z6gyEw9Qt~E)Tw}lNq7@#*Eh6Oa6?_vt5D0nego8!@Fvu*zuSS#Og=RhUg5re2ks1^ z{zJbwcxO_1?UlrCrSnR zbn;c$DShFfOI660E7?zkID>28CAA8L(gXV?2c7~q9_(WZTFdx_U@$fa&*uyc@H!Wc zM!y|ln(|yK*jF&5$Ns6tDv#@EPRBhd4=Zo<(DaRQul76w|A8A^%hN&iFf4s#|NK!H zM}gy-+8wg!A8b1LYcMg`NJ&jLu{6zjbR^Ln$67)Ht;TM1yK;B8FC{9X`gpg~oVt5+ z8eXi8r#bh0V{uItMrwC&Ufo?}EQUiA!#X_D2UuJozrR{n75w%yBui(t=k)q8{FOa7 z`x&^U?AdeR*v_uKH2;nXjOBw#F1(u9idDBfv9O*ljh(M+%9Bie=*z1O)q{pPHf)$a z%N{TWR~&{14bu`s4SspGR}+!Ql3u&-CR%L!B$~n56MYd!lckPqSMS#UdSV?~%lPkL zKl+&@y}R<{K5`@WeCU;Ec=K`DQIA{bS2)+8Ki#CVAxm(~37qPU5l&v^33O;>VruyDrPniNxu?L4^1Q^7v$mmqQQ4-iDB8wC z8sm3$NiDQEXc53)feUqGqp_l(X7saIu9Etu*t0t&ek1Tx?0r^?lD|Wd)lLVZ(yvW7YCI=nP8t^dw!ZEuo5x|hfS5a?cV zaq#vIO5Drk&>MYkEE#SPjP7hvi-J){*0Km~PnxF|2Q7Mi=lb@kNRc~?m6bY%pmmGu zit0|%X~KVpyo$7sXo6{}dY<+ELd8uh>Y6vMaoXJgm(c>FT$s2k*&nG1y;vi_*|v3Xz`+? zshHQOdtnI+X7Oln`$TSlUT!_s8%4OKYa3D_=>wjtNhA+N?*w`oDR2YDhj(N={O4FV zlRoaC#A|HLMl>gdC8kI?Iq7sC_HjjhXDpq@N)SE2t|+J(KELTq%E#mV#X$>y7pdLX zw-&{B%|lNl#&viq=LhzOGe@K|dJB4ANzhj~HA7GsMTDdN2S!~^%X)iJZKR1E~z&f|vrui`H%5h-U{K6 z>Xyo(P2VY^xA3@%Cl=D59jhUZ&Y@V^6RXB1xR6y%ec*y<0~R_OpI;aa#pPd*$~c6m z4D;)|zLJNsl4K3&Shi{YTwl^dSW?14x}?UgaM_dH^rHk};ere(zP{v#u;lf&8cR3H zg$IcW9}h0htMADcfhw=BG>`y8 zo`vZQexXjljF+0Lab=}F5xTdA>P1N^>*DvJ1FF{72|7xP|2HUGZcc1e$hM~Mz31Kp z__WC`y;%@T8H_67RpL~#d0$Hxo{E+xP9>X9_f191h72nkXuSGHtgm8+k1KgGE1Y$k z=z@zw6U@q9?-RQ#fugzCH{M+?=XE#ueXKjc6@Ypcc@R7~k?jet8AxYxW88wVSB*Wo z?9CPhV!XG=%UDOZUe7^v899h>j367Toff^sD0sfUxQ9R!j02r)5|`S03R3}=y>96= z)#1g^bhPC9CLF>hSZ1wpwIjMDTki4t(jLOnn%*(M$yuyt{Uz5I`VbbH{22~xgNN(O zdI-xJht^njt#mejJ-gP)!_XJR7CN3UE}gxeFRpbZ7Me6Cv8AWvI_fwC)Un;%j_72f zKb`FmJ2i>3YOR(zXQjgiqEQ^;-4hsaEqst+80&uAMCH zwmY@0rCQr=MQWd1Al134oW@sh#iQ9y4kuFVGCK|z?X~nkY{E9#x>Ps^Gkw3v9 z2%?*U$Ey=d?57~HX#-5XB|_xr``sVeX1-sl8Mjj!PQZq*m6wicuR6mVQG;YuN#3Kw zJVEgTiUdf;l=e|KF+)5CHwMVq2|3j0aYP&0!*5NqLv3jeIOScq$_D6x&>l(zV#$Uhat1wD+ z)YD5YSo+|>tje5INQra9m?7wZNwQF;jU`r+PWB+~F>RAW9 zr|6jv2awMw+ycEYUFD4fD$GjXM-r=CBtZc#w!^kF$4MUsH5$a-T z7AnWKS6XDVDtnPJkdkrz9TyIa!QZ2%^YETm`)ufOKP^3ZVn0<)tT@1$I_FT$bY&o- z=Q1gjKRrfrlz}gXw89@aAss8-`C-+`kv`6q-X&P-%QJLPo@;1li9tBSP-eKdQ0}LD zGpJBE2OUm4$}Y5Ir;QWyxXl9&Z@=B%+u`n=d}*lkQt(sg#o8W=AsNFj ze(;-6JJ4bc!M=y=iUq%6(yJ@Z=h}QoejavF7%LWSObNyQOk%GzQ?X7zp;+A)`cPvI zWlLh=kn<3Slu+WDge@D!j11}N-h$Z#A_@vLoGdzra~}FTOdR4s#F!(}D-kj33vwK& zmg!iQh$BB8TcDA!@O5{zi6wQ;RM+{Xv0tTH`W5^(+X z-ndPUeu&V}<8or)8%7$9Hn-7Pqu2{oYY=Cv8oXF`hU|!bGM=8HU0JIwx8P6^<$_b0 zBW2LQ7qJi8NW672BFFuo4J$-&A-iMmXHr9*0{XY9t!>l5xxYyj2kt~BVJDLF%pB{c zaswAxUkzGieU~&Q>o6F7QjLM5)?_bnnCc6H_cob`ra_>guLg};-zAO73z72Hd<$Ki zrtJvreNp1SW8I7^EGmRWE+9Otv^hXK<)*4OV&;#TQISZ?I zClv=2q5o*9nd4BBEr60c;Ai3?TwaOz@2fF}^;YxZ%-VddR>i&(`EfPAjt^*57d+pb z*lez>)bs)z%eAq0jehBR2&4vCA1))K1mf?oLogukMFPD0EPOIMO0Z}@J4#`qqi&9v z&$!RAmRaT1uy=AUJ4$l7b_n<>a0cATAz2c7Ii=FMY<5KN-Cp4uZ`B)AH@z!*YUS;X zYO8mu2;m&|&bQ92aMKPq|I{RSh`1N``s1Qbr|w`f91ug1 z@VT*&cXYz5pk@4>A5xr99<+%JI_xCfn;@mhQ^_UlE@i`}LWZqiv0}s0SHZAi?}8-k z{pArAQK$zd7ONa~GEaCl=-YXJ$niF#!_q!LKrdnkT)kiqy@^HEn_&E4HG1n!Y4UpG zpVJ3Altns^57JiIc@CFLaWB=B8m8@IR4w!!fLvDA;`sm%ZW->E-#iu zf4TbR>5!D4AfG1buSUradfA8Q!`9n>rM@G1u7HU8j%dmCl~PrHY+XpG(_fMV!|=bF zL&LIXC^Ovq;k2O9Bq-7B7=D6_3pEm4@J}S~g(ax5)HId>qlZ;ag@Tmw!JUHf(!O22 zk~d-~)|p?fZ*kvWZ=7M&numSpN3B*G;Q2n3n9mH1U9wj}%P3aN!>7A%^_Tap%5|)e z&Syyq9!WT&CD&If0V|NjIKEQZ>nmkx^y2G+tQ>VplZ@Jv!{-$a4_Ieeo3@Gl=s2-;r2zAk-fW}1fK;?5usq)fV z9LPTg>C%fsuhlLDapBMEyI ze3rL|y(m(#KJdqnWmiuZuw)N?8DKKcLqD+8_U;*`6VH1kRz}-;8z(CD&9^^+epu}V zNmkBms_3koLCw>BW~#%}rB}G-ug>VM#>eKszIrw5NCz2jngEen%l2L3zpv_G>g{O_ zukij{?(wy-svj`g*&QNZo4q}ww%~U zM(!SWF(`DwQZa_(7rX*Jyw9(-nju$+!e~(vih^VBf*yjOUj9aldmyq2O}zUzvBH*B zNPLAuC2ifmLv1fX7{CytNZ{NWxU>)Q#Wk<$B|Lqcf3-dBzqK)QCCf+ggt1xS57rs^$l<#q7J z_~9G-y<{<6h+Pk41;P4!wH%jwF2PQnWc%-V{~jZmG&xm$7vS)#fCLwUn}7$u4&;ka zt3Fy@z(xiOwcn)Y>X_rCj|5hsKw@7vo!%FTgY&?yAgmcHWn;r24M0yQpWD;KHa zAWZ0%fk_Fvx4DZ>lag8dtGsIj5Qb|6PgdcC+}~jsA?#MVACFhxa=PC>Lq4WMP|lFv z;+_o$@HE}WSmV9N978?#>*OmtDk&B5Bssh2a4j@nsqAU3nSnJh30oNWWiQg1FVJm?6R>hF-Nyd5n>Z zyY}Z+_eY--UB5hcw5>|}Lj3*s74_-zn3MxR{qzv0n<3}QY^<;~%~nFT>Y|zghP*Ss z9e2$a*#JEoWB^n}XxY%0)_j9&v-?|SEyN+IJn$7-!GZX~B4Q5r`}90bi(vo3Z-U0F z8_jlYvA)yn`C1gS#3Lpb2hCb8^lPbtI1!qsx@22SSpSQlDK~d^NPIS9m!h#+CF0ma zUD&0i!z=W1N9!2jjo5#u(Ha z&0Ny1%8UbRB-E($rU}yA7c%Q zI8P-MMX7xvQ&3dzsw8efUqstSxP>COee@Ufa|^|OX4Z;=nh~zGNS+tRTl5!uIRJd; zGIygv^jE;}I)58yc$jNeyPLI1-zP3`fGgz23Ys@z(!YR~voT(+vW#u@5=bge@-8r+ zm~P`DF6Yia#(Q@A7xXgXijDGO4bbZD+0`3-g-m9Y8=;f0kg->h_7UGAUh5sh(JN%E zQ1^8u;iec~LJbC7)$m+pb%Xn+h#R+i4qUa`rEP@;=wN%q zoT9v1$3|YDSG~2$s_Q)Z?MDkIkB%T8)hi8tjLg*twsGcQ~j`DMF}<2eSN01D4}NH&=L$Nr9}xf)tfZB2C0aHX=JjgobU6} zU!2f);33)@g%$-hqn!l1(O(?2=ylX5iDgn0DOedwKZUgw05*P=2q3u;AI^Aq300tr#FO}&Y@IqU) z69TPil^lU>FW~AlJoL(?Yw^Q!Nm~{iy)?H!>R0iIix&q<(Lmw-)y(0dgLG;P(gCnW zq z6=1=5GhZpyUmgYKIJ6VPpHLKSlMLtJ#epxP?fX8UN&saadhkT3cC^iat~vFIhmNr7 z11Nw7sXb#-NOVN8A;T=jXQ4&WHi?6U^-G?GzKFIDix`;`Mqlm&bT#14|=eL?*myF!@eo?tA?4y0Fc!e z(IttkGaO4OgAX0~A>E0xb9|!x`q_icS5pQ=j!Oo^Xmq^EfCgJR@I|zJbb2X}P-MOo zC|3~E1)H>R4Q2@>N7Yu3=4MjpR{Kg0fGvipix0GsDZSD(x{(w`H)6nkd5ml97UoPQ zMbud2EXVc@&OW-49F$6D1KVIU;UGQ1<|Y;P6q^H7sqKp-$Fy4Q`dVkQc`?YqL8k>t zEVMDK*6N!*O*(;-wVs-nrbXGaLNGRc$OP0RLqKzim9H8IAO4%PmRTf8F^(*lP`E5da4<{ge;iIf`X#<^F$`ZcL6(s`5x&18I?W*yvO1-iQc!vOPwwC+R`)JMUhK3ujC`nG)yI`?eUm)NBwfXAd8Sdp z6=+BE&hV*vZL_CO$Y@;3KI*su^fY27QMv4wDxbKgzDk(C(3e?uH|OWkS0kprgSIp` zcZhG?-d$+iYMB}niiQAnoNoz@IQFTD=4N-R5lO>yw$a6BZo>Cl+;gzai>{NlU>ETp zeZBu)Up@%4zgJ(rFVMESd6@Pm8pH3M>ZCV&O%lcMf-2SB^i)qA{(1O2;W9>e=VS1^ z$rrwTm@8;6A&=x<@7*A-pvi#|vrbq3Gu_7isRuf=J*fwE zjLBU=E7jU9)heykjo!)He_r(?-v(0%q5^x5aI+4-hAeGGWP zepV3$p@W6wS3ye~To3+GQo3ddPhJEx*E$z9TBot=3RCVBsgO6ulD@*E?A>$cfa>}B& zIQV$>wep_$J75`#gVv{C6}smhlRIM{`$et6>w^PE@<4fU;PpX7-p_cPt}vpe$Y#hv z8dhXz!7znY770G8SL-1;KPy-C{UWi-&0Ye}OqP6Hd)Me9zh4b4Pqk(%r~0eV;}8lQ z*W8pWX2xl5+_U3ACIdxb$X%(YB1CtQ!^XRXV`pu;fl=3g8uICb%GY7mVs#VVuU{k? zP<)7k@Cf}?`%r=d_F+nszL;9AE;Qn|tsmm5g}2U=%CAuG2*N51A7qWL5^s3#LFOtA z)E)jSFCAV{y-PHdZNG{%gVPwnidc-Y=s5cd4iS|7^B5g|l!C^-k777%)5;P%aex6` zEtrZ<$ls4E{q^Bni6%a}a&QzXxg{E+vV?~We38In^zjL}a_zwpOM}Ne^FgL40DN zaW#$FI@*L#uFsyC0P5?S<`CZVzMW>v&I3Opn83^%d>c0U<{y z#a<>Pt#bg@;|iiA12>OGtHi3?8_`|m$OYb4U<)1hImvN@Y*Lx4TGc2j{Wv31!>@^gg@;@^mjs~Y^)O5H`U`W;V}FAjzN}m6SdZ?W~au|6#zuv zi-g$`y%?FD=iV2wyyP$<_7<CuyQ{g#qqK`eI0{0s7e-7Qn%+FbyYaQFFW)0<>|d zV42(1Hv==hes0`}UtINvoiprdo-1llU|&(R4Tn=N2)9mp2OQ`B!7mO^k_fAg5}5nT z5GStEnNAq&uuY6hB3EgY2Nhz5!kWJsQSgbuS01__tF>CBU-IVnOyzp0Yo0FCW=+?MMjN^3JZS9Jp{%c( z4YJa?W^=YWN;2vHjyn?yUD1Rtg?l{Bpy2gu<12cToH<&~R(1)t^hUDR`}nLZn-p=; ztF8KWM{{ee)z`Z%?t`%zmA9MRRUe{4J1JZ3bzyay zys34%twvc#h=)YIMJM)LHkiBXqCyE*0Ky1wk$|Qu?M{^v>1?*k%&j6F1yj=aISXSs zC|_Zz8m<%X(GfjYWar>w1;L=I_Y1CGuyAh@W^Hl5x2$$sy;$p(6$%R|P;+xxeZd`^ zG!~%U;qt?KbV$ray!3%VDgw&2V>dINJ6-FUt9hB?hI01hdR3T;ULjc46*+N7YRsKs ztmW=YT_xowkJ_JmY}PjP`qp|`lOwow(3zFj7-6$z1)A(KcyQMOd-DS{t&g7@O_-Aa=idX@un+nOr_6CjwU&zofIeQr^b7_{1G2 z6bUsiC{1W~TkI;GhZ^AF@C@TAM4BL@vkux^2w1G zkZwRP&IVRH&9X~ESH(AcgOmg5vE0#nj!O-=2U3x9u=m>PJNn z>i?}l=;S_7Cv30D=62nkkE%Y|ZBO=OFy}of;Rtr0i=*@%cgUB=7sLIm&^mv#esjhnBy*q_`w=lxm{a#H-?HnX=b~ITK6sOh3Jgj zNgy4=s(Z56MgbemM!BKRx0P~jv$iEG?vGNvG9mKV67Zp}D)Cd;hTu5D$zOifT05jv z<=Mm`{_3>j^l?JzBZ%@K$pn2o!$p<{NI}?Zb;Sdy6>Wt`yv?z))nQSHO+Il)TG7FY zJ|CxQIBfcKcWrH}(r~HQTbhqxy|dBg9#sgcCf-zD#xk*}Zh_zY0~nInuyLU+cd;9m za!WvKpm1rpS{q%iN7pLlPGv>r1>7`L=JL~KS~MM>yQuf2Z5dMAfJ)=!t29nXxS)U5 z6j1tSH6Z(G(gF;s+6FD3xFe%?JK=1jb6HWM#3~o9q)O)AhOI8Nyxu^u=KpAUczvTv zJYzL2U<=!XjZJ<^V};JPcMX*7L9f|`&eXQ`z~ErgKb!C#>E>*~)wFTgRm`kCU%9A! zpxyr*`BdOcJDR`6FGB9U+QR`upj0z13QuLtNyqHVT#MUVHcOLw`)qy1%l_bzzb%6$ zE(ru9;Z9RgD!q+avTezKJ)TDkygQED%9#Vwu-%;v=>U7~$;#-$73l+g`u8GN@9MIX zfTp%lWT!c?xam)STHhDze88}q{xsCCoE2TbrV6=b_+hoH^;UUJ4{mm}XxED=Pq)_A zn#w(__WCqzs<3K_C{DPW%ucK{o0^bI8M#clY@iFcg3pzMQ&a&u*s5GAlP|1GZXx@( zxfAd^xh&jH3Z`mSKX{R zC@g>NLSoZHP2|JfVZNXdKWaUPe2YQ0oq_XK~Bt-;x;L~!&b{oZo(rsF4LWv6zd zWynQ~&30eeRHJIeP)LjyQUP@J`qARy+HX;F`48w-uKH{lfQB9IpamSYv zhxHRzf(*z^;P(ikW_#>kNVkT$k<@WG-j07Env|7nFC>*5K~iW`93!m9Z)9A52Rbw{ zCfDJ`4P-Qv*pxR{K6OX022(jf)^^MZ+GD6%n)tEp{ZPE5$BlbHz^HD89dqDS^ANN9 zQ--Gw;N9czfp}#Y9QR;6jA~W&Ap6T4185N7N_X9qY5sM7eL$a72UH*2rtY3i(1KBN zoS)$vornM3&epa{T8)a{a?;UNf;Ky9?9B=S)m<+~fx_wgyZ)^|powWdb4P zEl)`u;Dm(b8L`1BQh+Hg6DLjlC|lZSD#rnSfhBMnD~H(3H`6d9dKhgr^iah?wU;Q@ zXowF$x(Ix+p^3#*q&{G;6Al*7vRTd;q52tQ12#_AP8~WCKs_Kewjz7yGvmNj^00(g zJH+`09j(HqC_7u@q|hUOZM$oPSX;U^3Y05TeMQYX%zE=IFvIV*_t&YMc)ww6vsR$5 z;8|r2t=ubXZ}?@bcB6VJq`j`Rj(ngPjZh zdQi@jjf=m^RBBU`dibj~9jnieV61^wtP~rV{q`6LMuOlAt4p0Wik+US%xZZYLk$Iy zp0Qx@W97ORZmZA(4&2Lr{NQi1em%fj1QypW$vV=Sebgo!`#j(Cmqj0)aOLB@=r1Oy zgx`PZxJFS{$>#}JMP={MOKS3>gq%e&4y(ucl>#-vm1ahJtfwlByu-0oCx2jL-P;=j zhB_P=*r|TWkb=Km_G6u!vdOm#dqs2AbOw9qSCiF?RjaChjTb|)O=Ui*8|)urgiLlT zBE(N|D4YoIf5pJX|5hEI2y-Gq&5#r8ShYH3aEwtt=3v^hi{(|lFea>I8NmUlF>QKb zHU3&#{in>?*MupIYhmm zU#+VJln0Cf%~yR)9^bgo?JTT0eeX&5zJ)ah<|ikbtyXutGt)q6e)5$01(5H$vRP8$ zO$(MxCUHN{LaiL^gu4hm>t4+_?MAYbXB+MA_BJ_2YSojswwi{VK zO0u?cApHfGAz0*_Q+adFkA+xZryIAp1n*u4{Q@`x^7{gfm)n1l@1c?=c31QQ@gHm0DT=6u{Gf` zf%@aG`?3sJLG?#ahSsh(u2t9`)&8pG#Ubn|ed|k(p7Ix!gcF9m-y|bd*~k=qHXUy& z9*NRU9ri_LM5}DtKF+DC-ApH}&lTv1{m=(i+J@#o8%K!Q2<@`Ukbd2ujxCp~bmH2} zjAVi~mM(X-lxlE%S_B7VhImCuZMpVFKH@@inw<@pU^i0RWN)jDwx~|hn~(zlV@Gs` z4zjrfSrq^P`ASVw;g^GzK-merLPa7=0|V|zz2!y1h=Pm^<#$|8!>ybr+XazM<7$*W z-IvWBKzBe4^O+FWe9}ppy%;Dl z@*Yh)$DLBLjUxCO<9qKGb>{?Q_(`IyRg)_@517>P?eE0xp83*Av_RMm67pA+?R~i zT}yLvA6Idm?CoV3oOJPypDc_XM~$FXW@FCP{7|i#ArB5ywNJLjJq5@xM~=WlVyJM} ztL2;I5rn+&z-w5Bh~V1YVJefLqkeWELXMr=znROFX6k`)reixs-lIoJQBwwl#C)Yd z1|Fbnf;KR9J6=IG9$X3`$kHUthVRxiIG}~q%`PAe(ZfAJH9sow=$hIOWnbNsHL^0l zC7QX;7Pj9?8-Q@OM5J**`R*>zuQ83zNCmyJiq@Dj3~98-NO`yydmHV_6n+3(ZN9s; zQfn=?nmB!;a&(xf|Amg*1XE>??T15$LHRDqiI$TOt;{4v8KcwhAQ>wsM3tk?g~ssSMix<$MD~0(!ub#w>K{5U{b*zK@)VzvVvTjrwH zIKgPI_Bs`0bV6`uu^mJ|Eip6mZ`j0oULulmw26g`xHbgwg!H{hBVa@gGiY zu-RU54=b_#IQWXE_nd0Fci2*62df=gG0e}~DgxcRWk29(@9o!g*|*W8z!u)?g(hgB zzRrc0aJ5|f;#BtT`pbJc%Ixs={cp*!G?*6!+w-lCct=z;2?IroxoOR&pY_I1tuO$CU^7VjLrs`o8z(A7DN9->bjaeF}k|cA^hZ4&M8f8Tyr6?U93Y9$Fy;Id#OQ`Ht#d z_%ja^tcNdrj`y`52krG>TY0&?Uzwp_$<_9^@=&zTp=I+h?s9W`7C%VLLAC9;!ZnJ) zk$GyzM<%g+9M`A`n9PJOJdIee%;Sj))595tuUNZEAG2GTrqx+m?WV_^7VxTk8?VNs zrM7RY;{I9!4F|3P_fg0YW_dU^pThx~<4FU&rWVlIbgr#6yRu_){`>pKKI+7P8?DDm zy4F52@_t?B={(p-E*k+I^fQNpdJgv09@6oa^a>r41CA**k7E6?9u#J}uhe+~a`d(TuhT za&=gr+b7vNyw6<@`8uqxL&o~M^6`QXH;2PP_kZUy!68oL#;^=sV-TA(#B1w}`&8zd z9M!(?_bJn_s$dQhGxvd!X|+jSY_=|7WWAsk%VD&_zvk;e>cT_#+|`)e)tM9eax-3E ztW_>}(#G)h@e#`&wXVhr9gGRNx3K1^)UV3K4#KM3+j+Tf9SRN!F_V!|sSku(zL9g9 zl4AdI@Zr#e!ynhaxS7NL>^`}g!~g8%a5slN3b>r1Fm*T#&Y_RGkBi`XoNE-QlZJY2 zqJ=|cd=7uhoho8qgkq;zuO1?Uv+wQ>V{rRqQ1%$p{&W+2baF6GV4s~G#u~XZbvP^K z^|h(Cta68teq4PCs6%kNBkhtS;pd=ZPMUal^nXl4xa8yj1X0 z#S0xzicS{*b#Bcw>T2#VcKkaL9l=ZPZ}!NL}}+0 zMgj?m1FY6|a6WEIL#Hh3IQ*4~6ReUySKq8`UT|S5+6_^NI0Z^)M`IcEPecC(zDw#b zs9PgjT8r3w))S9Jb2bSoT`J_txh!dmD&&q**xe%rv0Wn!ssSjeeXYU&8?u8VGEVQS zKo5iFANz^_G%;E&(rO$e`GZEc^}F{|;?gv^^cw0IL=Y^l(3fh}Q@qnbz)1T>zm|Q*WoPk&IM%kol^5AY z4{@3wdN8!rwTkR;8Z8ur13WmSpy#RMJlXfUS<(wRIK&<;8-~}d7mZZr_GJc7+9P5t zoHzMiqg&DzL{e!>Z}|sLMJw;oA?H%_0QzYW4lv)Vlh@Q6|CRfg_kptpWD{PDti~Oc zaSX@Reht?%{0TiDeqAg-R7}x)?^oc9kV=n^X8b^eNR^=t5T`ZO|GUNbnt!MQg zy+dZ58wSJrBT;aEBv!|cq^p#4b=wA8 zX#<~{bq5|_6QPmbYY31X8mFgC-wkC2}|r@DJwSi zTHosfAYdU$mKx5-W!ekOIlJM~DQUpKzBGFpy5)!)W{b;@>o!yEKDBy>`^n4E=pE(= zjvtP??ofvm(|@H>V_bxGIJ&xjo#S+RFeGG{Yt435)udfyHq+>26DbtOD&{1yrxoZK zRBYSw8|@@SMT553G{`imAlLBoPv0ZJTu<9jW)X$Cajv zTn3WF4-Vx@b?Xqp^bb;-FT;leXmxiI!cP%w_07qnH)}Yy&gxj`X_>NxwPQ)lr-}Sd zwM!(JXzEQx zrz@Ll_F}?kD3+VeSy<%SJ&)_^P2(P)Y`NK8%(2EFU*yh$izLQ@?cfg*t^T>RjZ(&* zcHL93-H60?E{rcU9%pUa@j9-5$I~b**x~2}e1%n1AOks}nlWUGO(gq~5|i58RrOn~ zI!l2|c;RxN*l{CMDEIAYWZagE7oGwsxmt4y@ zFZZa4NBo2!JfaFC0nvsFnoN-o%jGR1* z(t?lL@gShQC&%}u*mh@f&gCjRHu8cIMXQDg$*PXhXasaxuQd2U*ng+9$vGS8sR8^I z;vmIUH5b!e&z)y-5%kG!9CsI$?01$}o+Li;<@%Q`X=dhXG&OeW{w;CR4h{-u5g zY(~ZaMc$fv&1pX`Z_vfdYQ{}}m$O89|0czQ&6R8aF6(Rl-JS>h+U0Esx6fVHAhVa( ztZ;eFE^oWJFpo@7+>dfOGaS3Tq2?}cVYoW_at4{ZJjfioy!GU6-pd(e{xav5GS$4Z zMqJj1b7?eKj;}Fc&9X)%pQ@)VR(6fw8a6>JIu?abc0JETa+vr%V$pzM^N5L39PiQn zX>0y|&CW*dryx6*qe;dN`uvKwWMN`HbqP{IBHL!e6Wv%JBO#tT?;z6&_ghlc{UP&L zzHLV>r)H<*6E752NTmt|R_+b+dKtwCEC1zIk)_k{fxr0PBhuDP#Ai@( zer@3h$&?!P)hWGF&ToK%peWxmFEB`}olQA+N~E;Bv^cXkC2yD&E-Gdr+m-d2Jcot2 zunOOon(!wb^ikwn&+8vLSE$~HKGyIo;L16^p>i75bf->EUU|)FkqLQ5TGX?}&+V&;qx?~&GbF1|-zG9Q zeqKI)>k;W9PfuuWwLna6%h5j)Fjl2{3Z;L^sfurAqI?XQ{k8p5;!@BDFESqU0%38K z8-|SD)M_nfp)#(+2V3Qt!e)1n)>AY*5(oW`ZQwghJ5Ro^npY+ z=pqlLzL|~96ms&jpVD^g26Xc-nXeCeque3+xM$puaKrSdJn0E+2F^N{o+Yx$3GB$* z6Kker@r*(}cj=JSckG!-y=CS9B(}}Sm*|~ixJoJ(d46KsF?s)E^l+#^DW5&Ta<5hz zLdLI=&KFWLwMUJ# zyl+7vQC*}A(`<9*P;uPv29$s8_VNZR^(x&y1ZTZu@LO-@2z6KFR~Yp2%-ocm`S=mv zOu|ZXEsc*>ieowXAAmH7qEg*S%OC!XgZP=*sZ*(R!LOGZ9WBWDCv(31E6H}BDctL5 z2CvEj;@aKPXG(E=s z$r+LH`P=-m^cVpA{j5d3S%#dbLH9$P;mOh>7h7&WXB9wB(LQ$(k~olqST)ZczYaJwC%+DkpG=LOljiNw#WRD@WjeCq0&C zw6nJV9%IHSw1n^Smy~#1Xf!W2 zq{B1DSdwOKs{%JIk9fY~SkriZ!{iNIND;k2{5cN?o1-J?-CX${;5|#@Ra;hYSSzcm z(3>88g8*d9P5D(lJf$T)tP5wC<-gJWny$^47|z1t)I1}akbn0bjv$Y*D`RsZ48ASxXE%XnIubJd;5F-gR{>fZJU zXc42_oA1vyz(M$*%4E`c`CdT6JYQ!y(2jt3UL>BuC5@2!a$vHq?C_Sn3t}=qwS0Dd zX=;4pwA}TfBj}Oa7ev^GxtYaM`Mms40<>mFgRiEtSvmW^kFdo|uDKhOk0MIFey^r^ z`AnBNcGniwTi0)!9)n>lehu(lUy*x;{VXHX&A}#7n{G9^NMy4%-q>9TfH9RGOUd7S z_=sM5x9#DgU?+<}$K&Ail-jDD119S`;;Rc&`(00Bow&-)YX@_OG{M^KfL$-hbN`;b zQhxXpQWD!+^}A1H(iwRhm|dBl5{bhD^e%sWe}_6aV^Nkcm4l-G1~~uR%;eO<#KO{4 zM*bRX8~hxThkg?X1ParUyXRmyK)n_DQJ~GSsXn|t;bA)FOMaSSRFrM`bRY~wsVq{+ zpZ!=O*c8(8s`%u=%I_}tl!XaIrKwCN>(4)fE>?EIgcy>|ObUs>hekJ&)1=h0>m0nd zpAOz-3w+6RTCv{3nW@|4?N2M z=Qkm1oF485ard!#{FUB`C7*r2G8BHFDoeEGJ*+qa+bwDN_`iX$ue2wW09)!qyd3c1z)*ky(_^TJ{~8X> zh>sdWO$d5_a8|>Rkk01^$MMrjbxe|Xrcn8Wa-%S#ayI85ZGQnXqp1L#cpj7c{2j+n13jvH)h)>9 zS(UkISVdX7Rb*y-ZsM%`E;Q4}xKepL2;E@v8JxlC^xOp8`>r1FyUSWku70+giwqwD z#dTIRMR7H`=N9Gwfz`W!JiN}QY@5{*QGFmB`;3sAiUiG*7x1- zNFctCdlzxtF2`f%x=_eu<>{|XSaL+#6}I;5{EU(_dFjUi@hCSoT12#bFw1>*Vs>hL zUhem%q$(NNeuCnXn%yUkBOymsZ+((~N|-}<$-wzP21kSAPSrF)91*lW=$gT7Yx1qg z22LU2g&Wnu6?{dnq+6aX$>J9nOm}O0!rc(kW4GmRnAP%3d17n~aqd;0W9n_ACjNHA z@fPKQEV*7lxrGi%j?$tuznD5Bmwp=vcUQ1EmhgkHx)TfYaJr?bW%;HNXhH|I>qbm` z_4`g`U~6um&D`19<(bn9i}FjL4r9_TsPF6Cs}go1SCs5imH4rO2=~+ry2}>E! zb3ccGzchtv<>eFRdE%#iUMJ`e6eqXj&=?`)1%+86WZseQE6m8li+zPzdD)}gB%lF&KS1k{kWu+g zRu)-#c>yiU*~P_$rDgfiRbz#LNrNaG`#-~HJFeg7S2D=a4^mh#S)f;%k}rb!^Mx}D zOY+Iy`p0=mNaK4R$afkVM+dk&O-LF2l&L~4{ z?lx!+5d5ak&d$mh<6LWR+0`3=`RW8n2TQ)^$qX;JQ^DUC|N719NHqtc+=_F7wR+Uqj~`5O549kyeg+oV6mvn-G*5v}DDiAODx-a#b9HOIfdp|9aF|(4 zpOI}kRD{{Xl)XMPa^zFSra1H?AN)Q0rP7;Ma_1z|T1MrwAa}trn3TU%%9Pj8Yt@MQHKSte#6z4ga>_W| z8x?!Gv^VlMe?PEUO1^~oVY|5a%4N=j$)!Qgl<%4ry$9fSn5U(#KS?{^wq zolJwyOz4rvK3>Pc@RapY#4(QOps>27a+QxH@}Q2FWc(3?+5A+t5HJ)-$D{JY`>B?a z_kCs1{ORNUcPeX9?@aA5h}mXyn?X%5$~oj_x$k`j=zfth&eHN+L2g&>d1`t5 z7OBC_RBNgfftA$TV7~LbzX_*sCHB@dodK7>ABI)Kd%5PA0}D5@g9=4%`b&&=Du#{6 zc>pXxqq{VLO9ZXb=HL+wl`1 z`sLCYY%HVl={NN4CrsU=-q>H7l|LLtOSthQpe0#ZPUs*fpMN`R*7ijt`JseL1^MZR zc&n!lm00RO^cf$~1Ya11AgsVK;zdwem^dRheSm!-tWV02U=?0q#X*81ym{ z<4a)$;mBD*Qi^c7y!;sYRFt_p@*Kir+-SNyymuxC;If) zdK`+$!@4*9{K;58FTeMKWU7gYB`4(`Dkt)W%p3nzp}$fMZY=f(Fk0lm{3ML%jHdBG z#2nn~nAC1D`7kU@=776b{~2)S8xq1!4XHE$SiX-zL69Kj4Cqk#kydl1i=J3xBjg;w zeP-@_L4Fn*!_hr8dq!RnELwcUGV)e%+o|!%rDspbn|{+*LCo1rag&?!Zyp@q%2W>W z{^%yCfUlXjc=J=S-=olLEn%>R_u}enU;X@lpm}TT$3+~h?r2_9+0^Kqe6)XqkbXaEKsY&dPQL450`-9T^1~RyeCmq~T)%X?JYZqqXU61qPTybP|Ig}f?6Ks@pIW!-|42T_XmHD<+Y#<)rdQ%NsD!U@E;^CXJ!-w_kzO|Z1i(} zij9sKZ;Ayz@;Oki>c~vKQ#v2T+VT#Ff^&bs3$U!m_*t+EGqa_sXUi*m;=eq-aCUxD z8oZe+-BOyleM+9eYMq~%Tj0y@0vM5|RtTjgm6TKgNUo$*8>k%roEb|s*HkX=FN_bL znN&zSoJwV7YOgAJ`Jfw;({4_mEn#7Pjh!*1sV_4X6{cEB;{3}Ne-!J`1UO07-r2uC zu)&R*p<^r}5J1Tw70fS~jp1?AI2|NOVL1eow|)dE41ZTpWjjXrU?(#2ik=8|aYK#E zfA>YkcA<{O@Qq7)VqCoF_W_)V>Wvhp=A1m^Muj+pb7jx|SAtAa2#hI6OJnkFMz!a_?3xijyD4P$2+Two6 z-jrR21{r~WS!=U|Dj>h?Jy3vE3`(cepj7!&!);FAHs0}cpz?r!tBhNv8uO6BJ}E!@ zF2)t}tQgHg4o?J2Z0N5`qDhG|eRX)8}PZ_}xCP^`# zE*4YLfY3VOMV8kL^y2U{hJq%q@I&gg3-VITAWoyvhfi{-?SGKN)-`?S^Nq_l&G5qF zvi$ZLwy3tnNsuq^0S@@g{fr)ARZ^wpo4*&(-l(k-mN|9zrn~}g5W6t;o`E~e(fi{E z>x}yx>*UM9=p#%^ItSXGgaSKdzB4Y$1AoMyYP@n$egqrDpk-k1cK##;GwQqH3?Ywv z;$TLzSda&^cx&de*2Tj}HBNql>9%|$MDP6S#=1QG<<|B13jRqu%c}gI(&$ln9qUi2{Ux5$0+UMQRVOFJm3Xa$~Pf$I6#RkOgaY>cIRu|R)VlR z4e>vG3miOG@_qqygjYTI#Z(mcK>@2i6q@5p-WH5M-eW;VfFR|=xc$9{4tRCNxg!rvDfJ z2ax518|nl6+JLbS!v`vwoSbD8(I*bzw~{1M*<7bI&QQDt!0bYG*I#S!>6ktaMRk| zT3auyeiTebb>(zz6Hi1LW%HGgO@*Ae{E>`iNPKnk@Ctc(&hQEa`6s|{`TX*!(rxl> z@c*kDttJU2K5P`?)LG22Zw8`TwY$40fJ~R!?(r+@Sb7@rCfKIwnWd@4@#WL<38c9l zjdLlfmd-Jd3ULb;YL$#2$LA%EtAI+@%&FRc8=EW zCs<2!AU_Keu{l{Y?g{Ma3pyz%?q56$h&Mlaxv!z4(&B`?K4T;nMZAS3ox2h5SQVq> z8zIp#ASi|m1;t!OPIUNc0s}ZY3Tpl(&XkKBYHi>P+-#B%VO@^x)oV`vJ$&={xg}VV zb5Llf2bKF`Cvy7S!EPja=j}a+OHd58TD9u!Rkd0PbDcglbBjDj$tfCy=9c^kOX1kF zUA^2-einU(#<;-X-l`1l%*2#@H}V$lF*$h@08+-tsMzI~{*$Le={bO<)j_eS{2tK0 zrRIq@GxeU+iA!CFLp^?VD0h#+SE4LH7lpFm|RSG=G+pq5j#E>Y#mpG=!#QkVhzRFDxt4c&g4zcdOlIV()!A z#Ag9sYeK&81>F)2d3nE{cw>s82tYTn?xQ-PDMX}iczqHg$-@n3R6-OGiBt&e$2=G1 zNz6d)4r*;7M$ZnTkI7 zc~AG^H^GRImOlqOY~dZRdpNxZNTXc)zSnsRrW(5WWw`vdJmzovJI=|+0Zg}ua_kdF zoUDtz80(3APGNMneNH|LkXO6Cz>U!?{N=OW?5|&#(y5Q3tf8~0wQVdSmms|1&}gv)m-$QFXeA@z+K#eJou${07|5vJ+*rVS8Jbv$YG5AEQiS0fQ6Pk z?Yjq7B*q?Yo{dlHB`psE7cDO-+|P{5&tGJ3!U04O;JkeCWqR_lQQ}(jUWZnfm*na8 zG>bi<#nWtN3FhbX%7t|sX6df$QQ+S0%?{WKA?7EJ?gPKE_W#vUlT*Zekvw|#HYvT+ z-*+F}!xpb}0X60f=wS}K@F*jhoEo1*Rr&$IY}<}72=Wt-MXMyeJ9YvKJlm%fcsgcR32Z0AN{`xy%goeEYJLTJRtsQ+BY2gA5X(p%g^)v z)L9sX*YGfLdS-S~YQl#dm8lRo@gNSw)cL6ic^ya`Sn};=6OYuNjT-K6<<<_iTL+*y z^;CO~;rm9l)0A%{8mLpbP@9H4)LM27O&*16qDDlp{LSay~n4Zxx9uiQzpNS{gE@Mh-yP@D1J;&603^UaCP=89%w{ppyiP42MVe&R$7m9pA{^t|W9(cQO0sQ`|fd5dPl>8(>Fula#zEOdF zgZMdlC4FIGTh+8~o3fd*j(FjpxD@fyq34|Z3Y6A&qE*fPMawS!-3*k2rjhkzaO7e3zD-2btU=Ks3(S6FOczj=?>4sKG$+P#W zl9soCZ(%2my*R2Hg&P_tng|Q|2rH-`h@;VMkl1u_2voog*g*}47t-;n*OzVU9 zALdCN*((!NWZ6JHhz}7eCWz(KGJevpd7yH&YnAS%MpPwxLw@S1eOsR!3mm0jyEF2} zy*``|+7amfW;-uMt0iP~0NIU;XJSdDCtQzjHq{xP9Sc-c{7oxf9w zvFA(n05B+iM^2dX*2Qu-d>4TdkU*6ZcDKqVHGFOgxkUqf#?@(|m-7KCnv*vm5Zqo` zo|Io&u%oN~$ZeR98#n-@dqm5_B_47E+LtiDiTxujFRkh-gk2ovAOEe$U8Dz=pMdix zNe?!2ABSDadbK_OTQx76eahd}bRMI|I}_F+yi{X^V(p_N{OR^lD=!(aSYShv5A35& zQ9f}ZncVyHz_%7Z=si#$;_GJ}^2O=lKP)>Z1~1GHhtenUt`{%;s)s6iYd1G{Y7^wa zUufKFVSj)4a*tuK5b3vnJqK5BrzorU(pIH`W1Z%AXvss05GI$z&KDQ5(DytzFOmLBn!|urhelw z&Br7UOgb#=6umzPA)Q|^eE34=jG%TG-_A0PTL4N{TO3^{IsY&_*eazpFSh0DS!TDy zavS`OTBkPUfAfhoSTqux0QJAZ-gX;c`d&aez9T8Q4W@)hyrrpUO-(Fgx%(lI^*M5M zoP1F-xS<;LfcSDO~{|1)zuZ2r?cwH>mxLsV3$bRvSb?KA9*|~o2XA7bR;eF)b||l z;jNT0`!%Qp;){x1r~bHqZouWQI*QRoSF$RX{>|QQJ~>$MH?Rs`h)s2s+#mItyk~+j z_1qqi;_+KUw2zkMz7VsJTnf*0k zCH{(44V$N5#X7K(%F;GrJ$B`zI2UL%UdUavfR<?t0lLaBg*C9_hw+L=g_MaaLZVWC`9!e&qK73N`A@()XM(ng0c3q@9mrG7tH}y z{_e))6PX$VD}NpxqN#)B_gVmAW&2jL5F_6ak@LBS>!t(m9r+#bh)FbtL|(%e+864C zrV@AkC;i|64gESalFM^*sVgrP{0pF10B&oxLcjI3=%5Do)D}K0-$qgjy3q zH7ftPuPh}G|7%@lU^NyWB@gJ=eHB6`_ab=vC_)k~J$wE;U^-8YPnKqvl=qSSZP7zI8~wwEP&hhbmWGT?8XHocOQWPB}KALX8HcpuM;?_*R7ZLc^OPk%WC{ zQBp54Rp8b(u1;UmH~v(i7pjmd;HURka@IK2YrM~#Jan(-WCi*G^{nyCA-r#d$zR^1c5(et6NLJU-YFaDf*l)0P{6tEj#>x~E9v_x+}T z(XoliCt0BRg~crE7l-c#Ru1btBnY#3L)>$Ck32X_5P2r^q+p49r^ ze$qSebDD^xz`VgcrHOg@@K>OWrb4s8Soz?yVHec{b*-9~&!c^C^NDNnHLyj#gQ1_D zA73V8$1eaMilEHfVHUWZSQ@`={v6r|@X-W<*^j`PfS3HNabKb-j>>Zcnlouo9T{!^ z91553tJ zq68O6NBH3Pfod%>edaEm1B!>mPHO_qv&h%5;&uFDHK!f9Yn$u!RVl$&wMioeuDpr4 zEisgq@-0KOmArIenpClNh$K`waig$?iFE^z?g3L2J4K>v0%$+Ur^{RgIE2RYEa|WyQkuO4FDw_T86|YgMt4wnT zDa2VN-*T%OMX@_bCeG45}&b38u3Adh^*z*B>lp=7>O#ZHq8 z%?IS4ac^->M^5JXziiT$W7p+Y=>-K)x&yjRbd0u++e(>_R#2wvpvw$KE* zX^$lWF->m;*_;%lz0VgkUBRb7%B9n1ojx@e;P&WVL3*CfDz6b2iRotLj50^7J8L*q z$uIo^<>5$BY(%mKRL-X7OSjEW$n@_q_Pr8|$&nYE_atNu?##{WbB;^iMn5Z$0k;>_ z$bP>c({x~~7qDJklt0I_V>M)~!`)+4p1Q|!5-IVDJ|+$&RG@|Bxgh^g^iPw&SE)Qk z$BzZZC%+h`Iwv`khe(?zC%`wTyqq%ecN8))>%UnsW9iIoaz`K%aiqI7Q;0qXeIcG_GbxZNU#zP_A{>p)RQ1 z-mu413Cnpj5P(UW1PafVFM?bY51YTNA>?=N)j?i1LO50vjLKtPW){Y{7h{g4ct6O_ z{F$M+E@9ixy(_-b8lNfOt#Choo3bE{k^!w|d&OvQ{evd`Kz4vC$0dqGjZW%<| z@=OTzcu78rG`>t!#i}mNBZ6U8%zIG26N^F^hS_gIkDfvyp)t_=X*|&&ESM0sLHfoc zwdEzsF7*=BN#pAr5<2Y^RPv%SR0lX|ICr(jGv~D+SHWY5!&4(jd&9*be`JrzVfbF@ z?eMg+C{NQ4-73BgHegQm1P}gxc;Cc3Zsd<(pl0UJjn7K$4u7+O_F###C}BSaDB!kC{d z0dY@0%JINb;PL>SglTdsXJ)i1s*#Xl=8XK=$2^YEXMT$6OZz*(NM()N4{(Oj?JF45 zBbz_tPa~KEQlLD~&_K~#9B+YO;#^?vE6KRFge&aSCTaKR!Ib*BY(bk(XBu$CH8ic6qTw2io8LStDmW0J|=ArILfDlz#I*ZhWl6>m?BJP)y^0z-{2)wd6 zDld4C_ei?Q-)9^N#wdVpOy1%*Ny!9>tu!sKFKRq@6kHxjf`9~mcZjNlk zWyAP4JP40o?8uI)J_HgTib$6xBvj1`k0|R5)k}D;zS?TuUSD4}CdHd;KA$SeCm-nf z=P?SUcqBhIiCBJzFV2oHFXOE_hvW=(g9=)b0!$%m@AipOn0ZeZP;tHxM2*Jmi~NDp z!y*66(7iE~;-gdN1?I&upuwJJiW&botuZrGd(;?{N5bLGO`K*WW+vp5Ul(ZYNEMTP zr1Jm0e4;AVedT^oVO96A6J<1XA;%y1Es`}r4benxt8eKGPdJbWYrOr@p^zu}9%se# zGE)-$1HA*-k8p>%P&tip7&5lo;nZ~K)ODrxP$#=_J0lwQyi}DrV zWPFxvv6HvSF9RA%?~E^~Kd0YeCQC|*`*3n+<^io+NW4{&SNGIha`FlAr|_!nP2~Ra zs{9LIp15sM>y_sU6Y@FTS&Uqlr`})qxrb>I6(`dNwKy49H>y?z7lbcE)n6@c^{sHQMy$S(CJ$YWh3yW0`LdJgo zNl6T!x7&qLAmb>b->!5~oBSFetdjhAIfbj?$^U6IL$7z5@wMqCO>o`Ui zPk|g3Ive=uTfWBS=CpCciwX;t-E6Vq5!#^j7^3_H6w!IYe=UoNR%QZD_zCZF(5cp7 z1zK}TG1vMZfH?*8Fw)7JhR%vu-w&7;$4K|%9sxJkM0;fEdaCl&*R%es6-|jBN>emS?lRHiEK=L~=yISrf|Wv04O_fi;YH z%W{ssN>hvScg%2n_5Ww@UEr*&sy^W5IjB@rWZqIsUn*MACq(B2VwtWGLHVC@!Tt>nuv>mXbX zlqAqSx`5#_0*1gY+a{*KZye`k{h5x8pb2mwFO!X3AeUhHV_}mKp1DkJ?#}kUT;`#Y zusGJrJF$Klw@H5RceM|?O7;<`2>vCb4yuOcyE^{=yR&%8k(!RL7qDo ztZB4F?vA*qS1uQP9E%WR0~)WS2!0RnGf$vZ$O)f}C##fCABL{( zT()EZzE-=N^r|sm;M%?5GT$qh!I%K?sELSbQ6n#4RO_cVg_!0?qgN?b^E5)$AzWF` zOD%&FmnX^RxB#tBbMt1PHgzFG1$g4^8*j#WAAkAbbbmx_&G&oVn;70@L z_7WRCv!pBevWCB~T+bfO@zT+`>-OKW=w@z zVI%fG1lDhZJGA=r%tnyyI$00$HRm0*2qd_+6=t5E;Ny+KuaHWv#_2q7Fl(wT1X1nA zxrq;g2C`@j!#^O_EVWJL)7ZhV_jkHE3=hPOCzCewybcT`YZussD0jnezYpi9O6Yc* zz&XHh^^3=y1nZoDI5IJMdd+qwB7D*5a^S?DU}!1tE9jW0y9 zJ?!3Wc$G3S>-*7i^h1uu$Gy2S6scuogg%-zdA0ms*7r5?2*$msUh3YU7THcI!DNLw zwszt~S=z+SOph{^%NMa-dOMvwdY1B=tL5?MT*Wvjt1u2hN#YLsKYBR^zYE?oavekg z27H+<_ki9kO-h!P&^IF;u~Dy^v-G6BIL?^jUFSvg6sm8$c2ag_21kCQpcE2{e{FfdG`el zL5-2_e7R!pj~Ekw6S6!y!BtG^v*%hPCxEtlMVG91=9n1^&aQ2kGIc_&d=U!)Ckns~ zBQ)~O-%*l^`wXz-PHC!}GDBYde&|-<5b3;rAM;J3GcXGDqJU&VbJpP}Kz?Q|ke>xU)z<;nCmy2_k z?q0H3wql|L%hmF#G8r-=$GWa6m*Sl83aQHp zN5sLLaNI|l6J90jbHb}-b53}T+?EqQM&3>lDNZP#c&no;y_A49VqlL(%U|;&RY|HO zZ%)UR+*INplQ+-a~TC2n!7f}rw!oN4G_kgAE`iy0&rVM!;g!NIX(ew@Mejln^?yK;3u z^oQGX!pr2boN#CLW%Qzbfi<{oUOlWTFCfSms&Ps=ine8GESw4}e>7i^3?`UA{dhRdpd4GDg9%2f7U z4LysGPgGAArElkL5*WH&`H{-x*ZGmkD&z(1UC_IAE?F(dZS{^y?lLKr6J#91 zraEcsC+H~XCdhW&3t1co_AGX~+(sTAUX4F~p7sICq_%@Pzb?5OT4>L3Lt0LHVj)(G z42P(OgP*bpZ1dEKO*0ovYM3x%R+G%cdx&6kF~rdD-d@#IU`Q(EM=+@3B-Uh}XRmI9 zRwCQI5po4QU*U3c(UhgrT3UFM);bi@)G%qx9GL=t18%@|u#LzgXx$vf4g9y)HNrPf zE}R)@*ut#b^VYuCVIQzV1uzY?Lgwt24(x8uCLlM8>XhZsYIZO( z$%x;GyD_WfxL7W9=d>cXkYvZEi;|12>y?MFpI+J z3%%!EQV~$D&duL7mg9sBO<6AgQWqofKyFa8DO8}a~K=4+@1b%K|ab>kQ^vECN;^i z;FsJcq?$$6^&sZJ09cY?%*Y z;+JTmAfB>142?iR>czN$OKbKV`E!n`R~38~aAj|~bognM;84O)kA~mIm-6%^l%cTl zBDiT|CFtHs@5iF2fw1pey++ad^zQSaW9RjGGutP^U0=4{pPi7wEMFsEh6#f!d!@g< zTdo6P>*{f8IQblw4zxuRYU{{O$)%%uO`5ou20eC;c)RsxXeVqh@=urpVPBWq>X9M# zHKK;WERgX0pt4*yx*a6}DJuJfTl zLeGa%C0+SY5a~##hVu%PA!xK)?bKArbkI5QPqYr`0eGt;IroWq$To~WW6lY!u9713 z7}$fA@?l86+A-i-D4ix$#t2wdBUc1wCP64_;LCm49D&`Vej=){#vXD04O5727Zc@w zu;*|)XZ)Bb?)@~NHr6%bH0?}%DwEAk*tf}5b3frhQJ#vC)zCbE^TO^2FU^&hBXx5c zWfNHz^hLMqK&Rk1IGo6wGq&xjum&M$A6Qt<#RV>srF;jQD0WWPU5NYQ>{I7{&{GF@ zVu%K2X|r6b^0!?e7uv;M~eFOcNu&0iK zV&S^8T${Ms;4mrZUQRI@oR`RBPTIkSG<%GEYauJeQ_+}-2>kX&!0OJMCe7#uoPl!A zB?!JlCPnYT9+!r>bnyl9_e(GcN&71Tsml0Ev%H4&e~5WrB`z}qg$_PgFP(#-1B0=^ zIWYO6Z+#6%+Ml88x~LTaa^wrA>IgS+$t15a(T+oOdYnG(Jx<`$t!v>dRVg) zyBt>ht`MAQER$ECY3n#iP+?RXjJe9F(7WU6o@)Ec# zB(6m?-We@R<-cCpHbLemPXD$qoIR=lK1yuk!$N_%PsKsbLTif$-wr=LuFQZt8_WqA3Y=1 zz~L{TMu@ZLU;$xR#&GS6;Q8 z{EuFl)yQ&C{z-G(3ELf*b(7{yX__gBj)TA*Yh=d)C#JjTN^aAXA7Wa0-@kI)L9ioG zI}Alc?Y7r|vA|Kz32Wv4!{Ro1uPj^Nh#9pCm%Q=1TKV6H+=#i&wU@aa!F^Xkkwo(_ zCQXtSmW_tf*y$LyWnI#OS-h-UKCM^$N!2}&=yBC6gg3cy3f2%kUOVMc&PeY@4>J1i z%jOfC0d0d~NR7Iw9-f|qc;+UqLa(6TY`&$v=B zTRo5A!i+$Aco>Wt<>HPd_;G8_dcyf^b5a6F76lp z7+DIheW&LfL$Pnt)CS&3c0DRz3)Zh51M)A=weVonpPz*^os3HeNS_~r7Ie&JWhshIBwdoi*89dZ#_A;#gA z<2L#>!~bPMS$W_XA5AlP1`x6S~g<$0(iz>4*> z)bY&3MFyyp_kdyM!A;NI+yg-zq!1!6!bZqxZ%A&=vK69~g-LAfUM=@wub41-I-JD5 zz6<2e33zeF1J__w%9EA7HaFaO5awbvJlp?}52Z$agrcTRhdYOSaY_pDKf8K5VQNJf zn~8RL)p@o4u$sL1t-ja>D47S}4n=Qn)@Li&PVhjw6G#=xh{97X&# zQwatXhZW_Uufe2*pFk@^@XPV9Rs%vVhsClgXxy$S5OcJg1D4+LIC=7{mY4E$BXm4p zH}M6*DyA=;z(^Iwb3tsuX(O+e!A0J)c;U{4*!kMJ<*fg6yC^L^*l*6j4%@xVo$EP^ zECTpkun60ilDLBs#f{d;vrLXb&?ZKjvLT0;-58m=EIWFI%m?G*WOcJvje$qxD6p!q zq=5b8ZMV&`oCRb5rOW%_U`|{IF|3;v0!OkjasoVp5Ds-xLpjt4r$j%hgShrF)~%ONFEs%p8$_YMMS&7NF4r9ox@5vwh6p<6|iphnJ! zevFZ`PNp=;Yj75jo`GZd7sL60v#+pPBZwP9=Ksv)nq=<50`753z-d@FbK%w2O_CeH zRpDW>ybiPk5484u606h>_909@u6l#S@L6oLGn#N)!Ry#_%U6)>4t*;bFvg*BC)QIy znKN_Jw5D3Q1#A)3+Ps_!(mj+Q5YCUmNr9yMWurf&8){z(ecQFikbd>;OsmM%)oAJa zPAL?(Og`kBJVQ?VJ(~w%&4+Xe*9K|ExE*Pfy!U>`K3T;OVX#8pvsL*Bzj>@i&tY!N zkX`6G7-kvBOMbK#w2CnS^~AM5*b4;;tUL?ek372&f6bY%8d{|2EVB`2T(mU{7Di<% zW5;`;JF1q?Vn^eQxzI(DqsFaE-gOcf+AJQ|W!3PwJ_q`=XpCa<=$cXg#!0w_>{Tyj zSxG!GR4#7-L5MFUg!!(Nn-B{rFFnE0;tJW_?3JVPZjeLhM!MR;xAFkQzm8y~d|Xs- zp<5PNQvGE{wV3&5lR*9xd;l%Ta&3#&llD3pj-%{6It@{+6{qW3{GiNBgNf;q`=@CY zYyGK&W|BTI!cJ{fQ(Rd6Yh+C)rBCxqhCfb?oPKyxW?nv8SpDe+4hQ-IMyk9* z9x4#CMi#Gu=-KPmolywsB9D*ewC#$;S%g^@L13`c!LwX22RwsaCTG5Z1QJsm3NZnb zT|4bOMD?R2ld0~J^WkJ(KpUX(U3INn8gbcRd>~MrE0=kj_}$oi)M^e!8F~!o>lUQ!vfFwjR<$|Hfp@6#S-jX+GZ(Xx3m`_b{bDd#lz>Ns#p88o_ zN*@I6Y^a@9J4L2~9&#T>pvc8b;H|;@!PTWR?tLjlUZB;=RRtZn6eZl6a25&zMgifr;4Av|ua?5mGfG@eb z68X@7_ikc^Y|iqwQZ}ECK23U+)>H;=5rRY+LjLw1ES!M&RhIl}W?I7I5bul8fc zVTsut-%{*XvWsXf=YB3bSAxJu6>{b0F|Ltj0w*bOXt3`DWwK)|T|1oRt^=jGYlEcj z&wY&s8gMfvD>)_gmPg2(MbhxsJ`;?QMWXzjO|LSXcbD&<%@s&J`sEp%6p2cVpZW;8 zW^u<-c_Zk99)N9K#x14?B2&@`qy>P5t&%T-3;Y2^V};zl2>Jr77-#7wXZ z+d08z&yb&g0G$Mt?aX%BhDF9DRy$$(3_%Z|P3SNRLc* z#~0gxr&{kc7Zr^oe4R^6Nu&Hd(WQDPz*O*L*Z@$8ww@I$OL*jSglsQzksC|F>A;>- z>UoKoEVue(}C$m2^;VtZF9MyF>@sU9!-Njo+i z*LHvQQWL@>6qRjnZEt<)m$x)rJaQ*#=zPKF4;&5blt3Pq;ZhbGE z$`@`riTOMnrtI|1O3sM%c5(2y0JTgzyuYmrC0P(^OPj7rK` z*Th|XZG(H`>eoY|V1#_4E#>?k-HOOnzt!!n%_U)$Br8-iYDB4<26EjBl-s-(#2MEL zfx+p7r&%dW#TqM}Vp@kU&W5^==OC7JpSHNG<20%&O3#8Q>gR9laRDP~GrSB4Gme8F zP`XN)Jj^?H=53@OgWA=LTH6>^bb1GAN3K@ejkB_P9wZG{)k|E@mK61rt&;`kk(Gir zrqsD;aMhIh@aKM<>mbN#194|zmAncf_X?a?Ds`cDC&9vA*gP7b<>{vP2>HMaqm^#z zggM;@!E#owx|Xgb@Ox!{d4k}n)FHTaeWYL8Eo)$3>*@kR7icQDawTiUrI(b#EQZT; zF(Hf2EUGCfD)st1{J`Al?rv+rtB5QvSmFgKfJtW8jqn6nCV=9>W(@|TROiw3uF`Yi zON)CCW<%3~l1p8PEm=Jjw2^U0o8OH7{;ycb@;FwkP9WH~sw&SYBIzqBQg4!}ICg>4GBS+O5{^Gm6G3R-o8~@ic5nk+NReg~%@uV}Clcv`0Y; zfDC@yI{S|A@PvsQMNp36%| zI*W7d=f&V0+~hBT?9$$OiIeL6@U1H;UaAsV(OY5>ecv)-guIrUif#fk+dCTQBu~~u z9$p53CrpX=|GFT&R~E%hfl{{|FTxF2B)g6km@y|zt+{863jEDFxe?SlbNsn~$mLid zTpy+Ae4}bumn3O7gMA&>1LvLJE)K95&s4-=;MY3&02v?d7+BtLX)3MdH?)U;KN71C zD#B$eiz`QssTu)ROV+?BanQ-cbm%+bG$>c0b$&`^rEkTE1FKBdl9P?`a9!;8)(?Sb zgpE+Q%sAVqgN0yERGA~#L5>YX{s2iN3<10d)EVTxt=e~ax2*n@rkivv9HZ2jfH$kL zHOus9GBqr^c&!UNeN9tJdZ4augEnv+W8>ccYDi6;YdgBzOS@V-+{iYycCZJEdtlZq zDJ!WMA^X6Qk4%zbu$raV?{MhjzARlA@xQTY)Sp(#z5hDIHkrw=S334w=DFJAj0=33 z+$_xBlb*Etr3PJar|0v-P&YaEZzFo-dBX002YNK%u|xV2DPm1bjsOROu3=1^wTOva zHFGN~v4F8&c0p%%AdEt+eBVwb9S17ijFA5u?&Xk)o$Xy+Vc*sL_Ke0wYn{Wu_uP() zIrJ3Nha(rOm`1xYIHTZ_D_;U}A#HhfE~fw78n*OfP}|I%@AeiM`btm)(Le3VVJQDNPkQLJ3r^7 z-3Rt1K`}sxArkuANdCSmm;CBQv5{T`Q<00}7}=t*xNC3-KdNa$bKzvE#LHzT}U5?TLMzx@+6Dz5(P0;HWmQKMoAJ(plD@!}NoWf(x>)rO~cgLS# z@6T+sa~B0~K0+Rb7J>7rxpYE1LjBb-%q&hKKuLJj7}JhTaA)MmO)TmTo7j(GB8Ark zR2x__v41Yt?_nGxTGU8d)c#J`#2}ba>@B?*+7Rw_`Wtf?w>uPrIMGl7?s$g#S3DAL z{0)XajttcUK!id79t?4VSd8Nwp^`>IykNGFD@MrwU`Y>%jH`VX>lxLM8pl}D8-t2d z8a-A2=M@Z|4UN{{Xi&(PI&AAYczObP{_RGF-HcLoZtQsh1?cvb3vidvm@#48pDs+I zE#-AQayVvbn53ASIG_Y0C`OT5tTKdk8!a1O!?{{k<0tEn|8_{AfH6b4pYtEQKd`n& zspT(VHX}X&EWq9IU5=cbEJBUP!3V$8Dc7B+PvuESrTeUtE02ez#?vidDt7@X&ce-s zefQjZ#Tm9dCN6JVb#^J%Qj&N7%lIU7OEE86VD+(vN}+o>zn)oXrJcJ&yWvK zf+8*SDz13x!20qYPWzi<5LggbUWf}>G>*OD7CeB&Ti z%U{V!&n>U^ljkKcbh;r;TC)VkfW0!x`6p~eeo5(I(7gB$_+r;J;S05$~OcbI>*S?z?>bNQ7u@nu=WHp76)Deyk> zf$-+N=9S{WB?TSRK^nt;3UX@2dTwQIYYFuuF^fqV?vN^%YKU5X9I~jU<*N`63R}af zGWQduAnlLeuFeAE=~dryXfRV6M-*6yQE{$7S=SXyJZ}WE?9`-uAZv2(v?1HK;G`1m zelGMWt|07`*SrbagKLD0>nHun5bSf2O{HI#LbsODVWDcbVP`UC04u~S5OOkVwPZmL z?s-@ygJVWBr#6Ouc_(eUxol=xXTh^jEas4Ui(`zBO1e$GH>TRft@1&L&sOcgaqZ)F zoZOGc!82;)+=@|t8(uX)!kbCOH)9JJS%BCom5_}C!Bca3^V@LsA&jY|U^=ng;mDjf zTVVH7kt1o$SlR`NqpbxZ1`KW9W>MGLb>TU@;;4i#XSTP)=efiyecW-Rl4RjyonBaY;srKWGjM zi@U+ItHf#M$-C6@P%Ln#wL`rGC(QOvT3pbIk_H?}nBCfrtq*7==eGB>HM{dIC7|dl z;r5BQ$gib)!rDeebt;*K12E9+Ag_c}33&eZ0_;!Qe=gEZ8MVWz>pVNrei)nS#R-5xyB~aUxGj+(UE9fb4a?*tmM&0EJ+AE4QY&m@}8wFsgK~Zv-U2&PtxAmfShWyd8sO z++cnN5pw`8A~!-4&(_di%5mPH50Fu1+bhL@MCOyb$o>{y|5t*+-Hh4n=WKE^pAp%b zusuk#+Xl+U_-&vTeujNhURy3TRq*L6?T4%^Q~I-7V%pp6l_6(14t@GOI0}2e(BiFTjWzP6OwRcxXG;` z$FRHwe$&_-K0j(o1sXX)yV|(7@(9VNbpXSu+Q@95BPV z)C9v`pA%RffySbjkLCXt)e`cvagk8wZOqd<8C75&_^8ay&3gcs6d)-^s=Vyp4RSf= zrk|NK>dC5??_H+iK%AHryqC##s=qvU>kS~=LDkf<&c5R)UcW9=3F}F{jYPNm7{w z=Jvl&YorFxhe4pt*c3Uy^h8=aN8Z-S4R9kJIk(Cy8SDE;Uiu;DDtQ?Ooo3|8<`0f0 zPLZ1Kqii(%7Jq?Rn)L6e^T+>q`~;lKhvADC+{NnJbIZ@WIlvLpUFWKW%Z0oss0bjqOyug z+%5J3XiU2@5Px|-!O25z#xr_4+C@&9zCM$66r=_*u6bLM^#$(?V4 z8-s4?+58xuEJ({-%BX+Qlo>S!@dYP18k4ck)ETy-e1vR>4u^SWsz`~>KmEdW>_FIS zHDOuR2>J1(B)JXS+n4^+9bGBsL5f$yNB@NRb@GFM+T4wME&KzrMlVYWR3%j2uaoZ_ zJa4G}deUUEr+hRYhaX0+ezkEVF{#5Q)DJ4Hb^vai&~+>d)5>6ObJnW56&pTRc!RPt9ewzy-XLbe_>j>9XG zFB_b}Ldf+4rhw?@`jI=}QI$`+vGdO}c!FbJhEs1r{=UQefhQ}nb;C@ zFv?~(%WM3?>8F>SM}>TZ-5j=|`W$wpXnB+*hb8Y3%M;%cqhaAJE<$JMsa)fGtHfvZKCo@7szTO4^z>41bUa(e=TSoV1VOBJesW$Lu^)QLgn3)O4c!cTD^j<^pWPo- z+uxLhv`p{dwKH-inw04tkjuvXWk_8(=IFEoa`Ts=k>lDZy=blbcdq*<4;*MeRm)M( z4#lDexucbf2Fl4XC;~hGc@)L?&7@|rJdTbUNq_p zbiK%a_>fZEp*Thp{C4~~8h80pO^;Qye;j>vnN)%6D{RO0l`UM+BzxGzf+h+{Db8uW z>@$aQ_JMXpxf~4%S$F!(1Ea?sXs%WA&I3(~kmWF``raFGHGK=(nzmb+YQ=m0ZDkNdhnz?A1d@80_rRD27oMP*3$nqk| zi=Z##npzMP5VszwHB1)H>^*H`nv{BoF`Td5`l*at0o{Nzava}xIx13j%tE%2!qpue z{+v4^T3+E*z77Aqn;io29w3FOkeT4=GqeZmbbUjWneBC1yxzW*K?g* zi_@8&%MOP#|A~1uAo4+Mr2J-}Co*}~&RZ4w7c|r28g^!xA(0g_R%-0Au&MGi30;ON z-39mZ8Xvlt|Np0C3OXfoB!Y-VN>;N%{2F$*USxg%JyxDNK(d2_D(7U2Q8~kjp0eQp zIY$K9ed++o1};w7-rGwnPB`A?b*6=eg^6(_5vuES-PK1KWY2a>TdP@QWuMU?<~r?D6?jTCx^C?H9K$ zD|PDC3AhUfI=Ua>Kurc4F28_zBZCFiy&T=Q{@@8&YGkdV4*=q*A%ZfGDv zg1FVSb_PCh!vW4}T*31|4s$6e%4flE1p64Bbn9l$mbRCzA1=?YemAXk&8V``vh3hF zS9`%}>nr1~7dbgT3aJhUv7xcSp7da3_l1XvcV#aF-SImRg~f%jVY-LFJkMs>&ut-BH013z_QoN{NH~Yea#HGRe@W} zjzpjcM+fC2$1u&Naf>hj53Rp(FRHxL(wqBOK^x-;cjiA%c`) z8xoES`4E2CHsEjzwXIygCJ5TC^at@|rvY@y_iB^7_uEB7`cs^CTo_$=6MDL=yaF*z zj&+Q7+5AW;G?D(fW!NPniQX6U6^0)P?h{#K110ahldGLJ%7tI1SGWtZS_+1zAdV`* zay=! zw14=Z;m(Wnb}Ddsaa7;@ubmW`G?-SwE9OU%Q0%bvL%5{H_f&|N@hL}IBYNPJ#FN|s zn1Q&yU?3+`rj5T0*RGG2Pw~9j+zQ&&{=#Z2X-q^Taa~{@NimX0AEXMB#GErF1a1FU zmRL)A5DIhwQ^tD(DRTXEJ@wH9U%>X*kbO&uCG3<{{=}sC4b~@J6x4@N7?CC-c*alw9Y@)XXq6>@cu4|n

    l|2a6$zd1+r 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О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 k>n+JGTX-ASo35p;Vo;t-ZRg(@|8HV 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

    -94}5x}#rfC#+Jf-MtY~f+ zKL@USjO)`g;WyNV!9Q?gSoHgH8g|-Pl#DfH4CR22eE;<`^yQ84tJ}lE&_(oqlm36| zIOtMRpJ*6&@&P{fzt}G^txt8yY@G510BF2l|7tYppXa;H0hbZm0c?Xl0?1tzeI=Lq zN80Rj(Z@PN&mVc8Mcf2^NAxlCt#pEb$KI0kk4{U#Fzn?+_piWdx~64}OcpKBhI+Ad zZujLlfB25@SJJS6<{xK%)c<+$zjRU_Aj4klqp1C#DaZBy{ocjdL^C%WWGAiP&-|GF z+Vl~}seKiyVJPvT_0J}v-^IcQHxpzrGdMpD5`!M-;XG z&;!S>hFvB~J-@OFr-IN&bddQm|4ZI~{kmit2HR2a(bvU$asNMmi2tc;p)>9O3G-w6 mmAA5g?Ve!uk45y${QV3SIElwtkNiI``TetHiu{w-{{I6^1{l}? diff --git a/tools/archive-info.zig b/tools/archive-info.zig index 049d98150..33f8496d5 100644 --- a/tools/archive-info.zig +++ b/tools/archive-info.zig @@ -1,8 +1,9 @@ //! -//! Computes some meta information for packages and prints them as JSON. +//! Computes the hash and some meta information for package tar balls and prints them as JSON. +//! //! Usage: archive-info //! -//! Is used in `/tools/bundle.sh` to extend the `microzig-package.json` file. +//! Is used in `/tools/bundle.py` to extend the `microzig-package.json` file. //! const std = @import("std"); diff --git a/tools/bundle.py b/tools/bundle.py index 76c85c1ee..47761c10c 100755 --- a/tools/bundle.py +++ b/tools/bundle.py @@ -1,8 +1,11 @@ #!/usr/bin/env python3 # # Prepares a full deployment of MicroZig. -# Creates all packages into /microzig-deploy with the final folder structure. +# Creates all packages into ${repo}/microzig-deploy with the final folder structure. # +# Just invoke this script to create a deployment structure for MicroZig. +# + import sys, os, subprocess,datetime, re, shutil, json, hashlib from pathlib import Path, PurePosixPath @@ -22,12 +25,6 @@ REQUIRED_TOOLS = [ "zig", "git", - # "date", - # "find", - # "jq", - # "mkdir", - # "dirname", - # "realpath", ] DEPLOYMENT_BASE="https://download.microzig.tech/packages" diff --git a/tools/create-package.sh b/tools/create-package.sh deleted file mode 100755 index 1eaf96b80..000000000 --- a/tools/create-package.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/sh - -set -eu - -# test for all required tools: -which tar gzip jq basename dirname realpath > /dev/null - -if [ "$#" -ne 2 ]; then - echo "usage: $(basename "$0") " >&2 - exit 1 -fi - -input_folder="$(realpath "$1")" -output_file="$(realpath "$2")" - -if [ ! -d "${input_folder}" ]; then - echo "${input_folder} does not exist or is not a directory!" >&2 - exit 1 -fi - - -if [ ! -f "${input_folder}/microzig-package.json" ]; then - echo "The input folder does not contain a microzig-package.json!" >&2 - exit 1 -fi - -if [ -e "${output_file}" ]; then - echo "${output_file} already exists, please delete first!" >&2 - exit 1 -fi - -if [ ! -d "$(dirname "${output_file}")" ]; then - echo "${output_file} does not point to a path where a file can be created!" >&2 - exit 1 -fi - -( - cd "${input_folder}" - # explanation on ls-files: - # https://stackoverflow.com/a/53083343 - tar -caf "${output_file}" $(git ls-files -- . ':!:microzig-package.json') -) diff --git a/tools/create-pkg-descriptor.zig b/tools/create-pkg-descriptor.zig index 26862f3ad..d41abeb61 100644 --- a/tools/create-pkg-descriptor.zig +++ b/tools/create-pkg-descriptor.zig @@ -1,3 +1,17 @@ +//! +//! Creates a `build.zig.zon` based on a JSON array of `microzig-package.json` files. +//! +//! Usage: create-pkg-descriptor < all-packages.json > build.zig.zon +//! +//! Searches for a package called `` in the `microzig-package.json` descriptors +//! passed in on stdin. +//! +//! Those package descriptors must have `version`, `package_name`, `external_dependencies` and `inner_dependencies` set, +//! The inner dependencies must also have `download_url` and `package.hash` available. +//! +//! This program is intended for the use from the `tools/bundly.py` bundler. See this script for more usage information. +//! + const std = @import("std"); const eggzon = @import("eggzon"); @@ -56,7 +70,6 @@ fn renderDep(writer: anytype, name: []const u8, url: []const u8, hash: []const u try writer.writeAll(" },\n"); } -// create-pkg-descriptor pub fn main() !void { var gpa = std.heap.GeneralPurposeAllocator(.{}){}; defer _ = gpa.deinit(); diff --git a/tools/demo-server.py b/tools/demo-server.py index 302edf51a..68545df8d 100755 --- a/tools/demo-server.py +++ b/tools/demo-server.py @@ -1,5 +1,10 @@ #!/usr/bin/env python3 - +# +# A small web server that can serve the `${root}/microzig-deploy` folder for testing the package infrastructure. +# +# Basically `python -m http.server 8080`, but also hides folders starting with `.data` so the "internals" aren't shown +# to the user in the file listing. +# from pathlib import Path from http.server import HTTPServer,SimpleHTTPRequestHandler diff --git a/tools/extract-bsp-info.zig b/tools/extract-bsp-info.zig index 565c3d0cb..9d83f7db5 100644 --- a/tools/extract-bsp-info.zig +++ b/tools/extract-bsp-info.zig @@ -1,5 +1,5 @@ //! -//! A tool that extracs which chips and boards are avaiilable from a board support package +//! A tool that extracs which chips and boards are available from a board support package //! and validates that the declarations conform //! @@ -62,7 +62,7 @@ fn renderMicroZigTarget(stream: anytype, key: []const u8, target: microzig.Targe for (target.chip.memory_regions) |reg| { switch (reg.kind) { .flash => jtarget.memory.flash += reg.length, - .ram => jtarget.memory.flash += reg.length, + .ram => jtarget.memory.ram += reg.length, else => {}, } } diff --git a/tools/lib/tar.zig b/tools/lib/tar.zig index 43c1b8d08..c93684d12 100644 --- a/tools/lib/tar.zig +++ b/tools/lib/tar.zig @@ -1,3 +1,7 @@ +//! +//! Extracted from https://github.com/mattnite/ezpkg. +//! + const std = @import("std"); const builtin = @import("builtin"); From 91fcc6b4701c7eb6dd0256f517706b2b036049cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Fri, 12 Jan 2024 11:02:48 +0100 Subject: [PATCH 259/286] Deduplicates info in github ci script. --- .github/workflows/build.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 350c2ae08..5395153b1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,5 +1,9 @@ name: Continuous Integration +env: + # Specify the current Zig version MicroZig uses: + ZIG_VERSION: 0.11.0 + on: push: branches: [main] @@ -17,15 +21,15 @@ jobs: - name: Fetch more data from git run: | - # fetch everything back till the 0.11.0 tag. + # fetch everything back till the $(ZIG_VERSION) tag. # https://stackoverflow.com/a/58082274 - git fetch --shallow-exclude 0.11.0 + git fetch --shallow-exclude ${{ env.ZIG_VERSION }} git fetch --deepen=2 - name: Setup Zig uses: goto-bus-stop/setup-zig@v2 with: - version: 0.11.0 + version: ${{ env.ZIG_VERSION }} - name: Install PIP packages run: | From cadd5d1b0f112357a504b6620ad799a05d3b3323 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Thu, 18 Jan 2024 12:13:09 +0100 Subject: [PATCH 260/286] Makes examples/next-gen kinda build with experimental setup. Packages are now correct and microzig-build can determine all available targets and BSPs. --- README.md | 2 +- board-support/nordic-nrf5x/build.zig | 7 +- board-support/nxp-lpc/build.zig | 5 +- board-support/raspberrypi-rp2040/build.zig | 14 +- board-support/stmicro-stm32/build.zig | 2 +- build.zig | 3 + build.zig.zon | 8 + build/build.zig | 558 ++++--- core/build.zig | 1696 ++++++++++---------- examples/build.zig | 28 + examples/modular/README.md | 5 - examples/modular/build.zig | 33 - examples/modular/build.zig.zon | 14 - examples/modular/src/blinky.zig | 56 - examples/next-gen/build.zig | 32 + examples/next-gen/build.zig.zon | 22 + examples/next-gen/src/empty.zig | 8 + tools/archive-info.zig | 65 +- tools/bundle.py | 34 +- tools/create-pkg-descriptor.zig | 2 +- tools/extract-bsp-info.zig | 2 +- tools/patch-build-zon.py | 74 + 22 files changed, 1430 insertions(+), 1240 deletions(-) create mode 100644 examples/build.zig delete mode 100644 examples/modular/README.md delete mode 100644 examples/modular/build.zig delete mode 100644 examples/modular/build.zig.zon delete mode 100644 examples/modular/src/blinky.zig create mode 100644 examples/next-gen/build.zig create mode 100644 examples/next-gen/build.zig.zon create mode 100644 examples/next-gen/src/empty.zig create mode 100755 tools/patch-build-zon.py diff --git a/README.md b/README.md index db1040d1d..ac6321216 100644 --- a/README.md +++ b/README.md @@ -27,4 +27,4 @@ Consider the version `0.11.0-abcdef-123` means that this MicroZig version has a - validate that the table on https://github.com/ZigEmbeddedGroup is correct (in CI) - make system build again properly - start porting everything to 0.12/unstable - +- Try to get some autodocs to build. diff --git a/board-support/nordic-nrf5x/build.zig b/board-support/nordic-nrf5x/build.zig index 1690e0c7d..9bc2b7882 100644 --- a/board-support/nordic-nrf5x/build.zig +++ b/board-support/nordic-nrf5x/build.zig @@ -1,4 +1,5 @@ const std = @import("std"); +const MicroZig = @import("microzig-build"); fn path(comptime suffix: []const u8) std.Build.LazyPath { return .{ @@ -7,7 +8,7 @@ fn path(comptime suffix: []const u8) std.Build.LazyPath { } pub const chips = struct { - pub const nrf52840 = .{ + pub const nrf52840 = MicroZig.Target{ .preferred_format = .elf, .chip = .{ .name = "nrf52840", @@ -29,7 +30,7 @@ pub const chips = struct { }, }; - pub const nrf52832 = .{ + pub const nrf52832 = MicroZig.Target{ .preferred_format = .elf, .chip = .{ .name = "nrf52", @@ -48,7 +49,7 @@ pub const chips = struct { pub const boards = struct { pub const nordic = struct { - pub const nRF52840_Dongle = .{ + pub const nRF52840_Dongle = MicroZig.Target{ .preferred_format = .elf, .chip = chips.nrf52840.chip, .board = .{ diff --git a/board-support/nxp-lpc/build.zig b/board-support/nxp-lpc/build.zig index 639a034ce..5f75d436a 100644 --- a/board-support/nxp-lpc/build.zig +++ b/board-support/nxp-lpc/build.zig @@ -1,4 +1,5 @@ const std = @import("std"); +const MicroZig = @import("microzig-build"); fn path(comptime suffix: []const u8) std.Build.LazyPath { return .{ @@ -11,7 +12,7 @@ const hal = .{ }; pub const chips = struct { - pub const lpc176x5x = .{ + pub const lpc176x5x = MicroZig.Target{ .preferred_format = .elf, .chip = .{ // TODO: Separate over those chips, this is not generic! @@ -33,7 +34,7 @@ pub const chips = struct { pub const boards = struct { pub const mbed = struct { - pub const lpc1768 = .{ + pub const lpc1768 = MicroZig.Target{ .preferred_format = .hex, .chip = chips.lpc176x5x.chip, .hal = hal, diff --git a/board-support/raspberrypi-rp2040/build.zig b/board-support/raspberrypi-rp2040/build.zig index eae5bc9f1..73453f343 100644 --- a/board-support/raspberrypi-rp2040/build.zig +++ b/board-support/raspberrypi-rp2040/build.zig @@ -1,5 +1,5 @@ const std = @import("std"); -const microzig = @import("microzig"); +const microzig = @import("microzig-build"); fn root() []const u8 { return comptime (std.fs.path.dirname(@src().file) orelse "."); @@ -17,7 +17,7 @@ pub fn build(b: *std.Build) !void { pub const chips = struct { // Note: This chip has no flash support defined and requires additional configuration! - pub const rp2040 = .{ + pub const rp2040 = microzig.Target{ .preferred_format = .{ .uf2 = .RP2040 }, .chip = chip, .hal = hal, @@ -28,7 +28,7 @@ pub const chips = struct { pub const boards = struct { pub const raspberry_pi = struct { - pub const pico = .{ + pub const pico = microzig.Target{ .preferred_format = .{ .uf2 = .RP2040 }, .chip = chip, .hal = hal, @@ -43,7 +43,7 @@ pub const boards = struct { }; pub const waveshare = struct { - pub const rp2040_plus_4m = .{ + pub const rp2040_plus_4m = microzig.Target{ .preferred_format = .{ .uf2 = .RP2040 }, .chip = chip, .hal = hal, @@ -56,7 +56,7 @@ pub const boards = struct { .configure = rp2040_configure(.w25q080), }; - pub const rp2040_plus_16m = .{ + pub const rp2040_plus_16m = microzig.Target{ .preferred_format = .{ .uf2 = .RP2040 }, .chip = chip, .hal = hal, @@ -69,7 +69,7 @@ pub const boards = struct { .configure = rp2040_configure(.w25q080), }; - pub const rp2040_eth = .{ + pub const rp2040_eth = microzig.Target{ .preferred_format = .{ .uf2 = .RP2040 }, .chip = chip, .hal = hal, @@ -82,7 +82,7 @@ pub const boards = struct { .configure = rp2040_configure(.w25q080), }; - pub const rp2040_matrix = .{ + pub const rp2040_matrix = microzig.Target{ .preferred_format = .{ .uf2 = .RP2040 }, .chip = chip, .hal = hal, diff --git a/board-support/stmicro-stm32/build.zig b/board-support/stmicro-stm32/build.zig index dcbf169ab..4e0e0d541 100644 --- a/board-support/stmicro-stm32/build.zig +++ b/board-support/stmicro-stm32/build.zig @@ -1,5 +1,5 @@ const std = @import("std"); -const microzig = @import("microzig"); +const microzig = @import("microzig-build"); fn root() []const u8 { return comptime (std.fs.path.dirname(@src().file) orelse "."); diff --git a/build.zig b/build.zig index d582de9a7..2f711927c 100644 --- a/build.zig +++ b/build.zig @@ -1,7 +1,10 @@ const std = @import("std"); +// const examples = @import("examples/build.zig"); pub fn build(b: *std.Build) void { buildTools(b); + + // examples.build(b); } fn buildTools(b: *std.Build) void { diff --git a/build.zig.zon b/build.zig.zon index a4e965265..e0c48b3da 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -6,5 +6,13 @@ .url = "https://github.com/ziglibs/eggzon/archive/refs/heads/master.tar.gz", .hash = "1220cd5cec7e9d4911074a9b2dec2dabef76e1adf94d041bca068163ce7666c4be47", }, + .uf2 = .{ + .url = "https://github.com/ZigEmbeddedGroup/uf2/archive/8037b439ccbac862471392b25e94a8995d784e2c.tar.gz", + .hash = "1220cc66563fc1ecefca7990968441dc9d4db717884ffa9a2de657f60ed4bb74a70a", + }, + .regz = .{ + .url = "https://github.com/ZigEmbeddedGroup/regz/archive/d66ffd56f51fc46c071412141b5d0c74dc83c310.tar.gz", + .hash = "122002c5f2e31c11373ede6e8a8dd9a61aabd60d38df667ec33b5f994d1f0b503823", + }, }, } diff --git a/build/build.zig b/build/build.zig index 748833fd4..2c6df508b 100644 --- a/build/build.zig +++ b/build/build.zig @@ -5,6 +5,342 @@ const std = @import("std"); const uf2 = @import("uf2"); +//////////////////////////////////////// +// MicroZig Gen 3 Interface // +//////////////////////////////////////// + +pub const EnvironmentInfo = struct { + /// include package names of your board support packages here: + board_support: []const []const u8, + + /// package name of the build package (optional) + self: []const u8 = "microzig", + + /// package name of the core package (optional) + core: []const u8 = "microzig-core", +}; + +pub fn createBuildEnvironment(b: *std.Build, comptime info: EnvironmentInfo) *BuildEnvironment { + const be = b.allocator.create(BuildEnvironment) catch @panic("out of memory"); + be.* = BuildEnvironment{ + .host_build = b, + .self = undefined, + .microzig_core = undefined, + .board_support_packages = b.allocator.alloc(BoardSupportPackage, info.board_support.len) catch @panic("out of memory"), + .targets = .{}, + }; + + be.self = b.dependency(info.self, .{}); + be.microzig_core = b.dependency(info.core, .{}); + + for (be.board_support_packages, info.board_support) |*out, in| { + out.* = BoardSupportPackage{ + .name = in, + .dep = b.dependency(in, .{}), + }; + } + + // Fetch and collect all supported targets: + inline for (info.board_support) |bsp_name| { + // Keep in sync with the logic from Build.zig:dependency + const build_runner = @import("root"); + const deps = build_runner.dependencies; + + const bsp_root = @field(deps.imports, bsp_name); + + if (@hasDecl(bsp_root, "chips")) { + fetch_microzig_targets("chip:", bsp_root.chips, bsp_name, be); + } + + if (@hasDecl(bsp_root, "boards")) { + fetch_microzig_targets("board:", bsp_root.boards, bsp_name, be); + } + } + + return be; +} + +fn fetch_microzig_targets(comptime prefix: []const u8, comptime namespace: type, comptime bsp_name: []const u8, be: *BuildEnvironment) void { + inline for (@typeInfo(namespace).Struct.decls) |decl_info| { + const decl = @field(namespace, decl_info.name); + const T = @TypeOf(decl); + + const name = comptime prefix ++ decl_info.name; // board:vendor/name + const full_name = comptime name ++ "#" ++ bsp_name; // board:vendor/name#bsp-package-name + + if (T == Target) { + const target: Target = decl; + + be.targets.put(be.host_build.allocator, name, target) catch @panic("out of memory"); + be.targets.put(be.host_build.allocator, full_name, target) catch @panic("out of memory"); + } else { + const ok = blk: { + if (comptime T != type) { + // @compileLog(full_name, "check 1:", T, decl); + break :blk false; + } + + const ti = @typeInfo(decl); + if (comptime ti != .Struct) { + // @compileLog(full_name, "check 2:", ti); + break :blk false; + } + + if (comptime ti.Struct.fields.len > 0) { + // @compileLog(full_name, "check 3:", ti.Struct); + // @compileLog(full_name, "check 3:", ti.Struct.fields); + break :blk false; + } + + fetch_microzig_targets( + comptime name ++ "/", + decl, + bsp_name, + be, + ); + + break :blk true; + }; + if (!ok) { + std.debug.print("Bad BSP: {s} is neither namespace nor a microzig.Target\n", .{ prefix, full_name }); + } + } + } +} + +pub const BoardSupportPackage = struct { + dep: *std.Build.Dependency, + name: []const u8, +}; + +pub const BuildEnvironment = struct { + host_build: *std.Build, + self: *std.Build.Dependency, + + microzig_core: *std.Build.Dependency, + + board_support_packages: []BoardSupportPackage, + + targets: std.StringArrayHashMapUnmanaged(Target), + + pub fn findTarget(env: *const BuildEnvironment, name: []const u8) ?*const Target { + return env.targets.getPtr(name); + } + + /// Declares a new MicroZig firmware file. + pub fn addFirmware( + /// The MicroZig instance that should be used to create the firmware. + env: *BuildEnvironment, + /// The instance of the `build.zig` that is calling this function. + host_build: *std.Build, + /// Options that define how the firmware is built. + options: FirmwareOptions, + ) *Firmware { + const micro_build = env.self.builder; + + const chip = &options.target.chip; + const cpu = chip.cpu.getDescriptor(); + const maybe_hal = options.hal orelse options.target.hal; + const maybe_board = options.board orelse options.target.board; + + const linker_script = options.linker_script orelse options.target.linker_script; + + // TODO: let the user override which ram section to use the stack on, + // for now just using the first ram section in the memory region list + const first_ram = blk: { + for (chip.memory_regions) |region| { + if (region.kind == .ram) + break :blk region; + } else @panic("no ram memory region found for setting the end-of-stack address"); + }; + + // On demand, generate chip definitions via regz: + const chip_source = switch (chip.register_definition) { + .json, .atdf, .svd => |file| blk: { + const regz_exe = env.dependency("regz", .{ .optimize = .ReleaseSafe }).artifact("regz"); + + const regz_gen = host_build.addRunArtifact(regz_exe); + + regz_gen.addArg("--schema"); // Explicitly set schema type, one of: svd, atdf, json + regz_gen.addArg(@tagName(chip.register_definition)); + + regz_gen.addArg("--output_path"); // Write to a file + const zig_file = regz_gen.addOutputFileArg("chip.zig"); + + regz_gen.addFileArg(file); + + break :blk zig_file; + }, + + .zig => |src| src, + }; + + const config = host_build.addOptions(); + config.addOption(bool, "has_hal", (maybe_hal != null)); + config.addOption(bool, "has_board", (maybe_board != null)); + + config.addOption(?[]const u8, "board_name", if (maybe_board) |brd| brd.name else null); + + config.addOption([]const u8, "chip_name", chip.name); + config.addOption([]const u8, "cpu_name", chip.name); + config.addOption(usize, "end_of_stack", first_ram.offset + first_ram.length); + + const fw: *Firmware = host_build.allocator.create(Firmware) catch @panic("out of memory"); + fw.* = Firmware{ + .env = env, + .host_build = host_build, + .artifact = host_build.addExecutable(.{ + .name = options.name, + .optimize = options.optimize, + .target = cpu.target, + .linkage = .static, + .root_source_file = .{ .cwd_relative = env.self.builder.pathFromRoot("src/start.zig") }, + }), + .target = options.target, + .output_files = Firmware.OutputFileMap.init(host_build.allocator), + + .config = config, + + .modules = .{ + .microzig = micro_build.createModule(.{ + .source_file = .{ .cwd_relative = micro_build.pathFromRoot("src/microzig.zig") }, + .dependencies = &.{ + .{ + .name = "config", + .module = micro_build.createModule(.{ .source_file = config.getSource() }), + }, + }, + }), + + .cpu = undefined, + .chip = undefined, + + .board = null, + .hal = null, + + .app = undefined, + }, + }; + errdefer fw.output_files.deinit(); + + fw.modules.chip = micro_build.createModule(.{ + .source_file = chip_source, + .dependencies = &.{ + .{ .name = "microzig", .module = fw.modules.microzig }, + }, + }); + fw.modules.microzig.dependencies.put("chip", fw.modules.chip) catch @panic("out of memory"); + + fw.modules.cpu = micro_build.createModule(.{ + .source_file = cpu.source_file, + .dependencies = &.{ + .{ .name = "microzig", .module = fw.modules.microzig }, + }, + }); + fw.modules.microzig.dependencies.put("cpu", fw.modules.cpu) catch @panic("out of memory"); + + if (maybe_hal) |hal| { + fw.modules.hal = micro_build.createModule(.{ + .source_file = hal.source_file, + .dependencies = &.{ + .{ .name = "microzig", .module = fw.modules.microzig }, + }, + }); + fw.modules.microzig.dependencies.put("hal", fw.modules.hal.?) catch @panic("out of memory"); + } + + if (maybe_board) |brd| { + fw.modules.board = micro_build.createModule(.{ + .source_file = brd.source_file, + .dependencies = &.{ + .{ .name = "microzig", .module = fw.modules.microzig }, + }, + }); + fw.modules.microzig.dependencies.put("board", fw.modules.board.?) catch @panic("out of memory"); + } + + fw.modules.app = host_build.createModule(.{ + .source_file = options.source_file, + .dependencies = &.{ + .{ .name = "microzig", .module = fw.modules.microzig }, + }, + }); + + const umm = env.dependency("umm-zig", .{}).module("umm"); + fw.modules.microzig.dependencies.put("umm", umm) catch @panic("out of memory"); + + fw.artifact.addModule("app", fw.modules.app); + fw.artifact.addModule("microzig", fw.modules.microzig); + + fw.artifact.strip = false; // we always want debug symbols, stripping brings us no benefit on embedded + fw.artifact.single_threaded = options.single_threaded orelse fw.target.single_threaded; + fw.artifact.bundle_compiler_rt = options.bundle_compiler_rt orelse fw.target.bundle_compiler_rt; + + switch (linker_script) { + .generated => { + fw.artifact.setLinkerScript( + generateLinkerScript(host_build, chip.*) catch @panic("out of memory"), + ); + }, + + .source_file => |source| { + fw.artifact.setLinkerScriptPath(source); + }, + } + + if (options.target.configure) |configure| { + configure(host_build, fw); + } + + return fw; + } + + /// Adds a new dependency to the `install` step that will install the `firmware` into the folder `$prefix/firmware`. + pub fn installFirmware( + /// The MicroZig instance that was used to create the firmware. + env: *BuildEnvironment, + /// The instance of the `build.zig` that should perform installation. + b: *std.Build, + /// The firmware that should be installed. Please make sure that this was created with the same `MicroZig` instance as `mz`. + firmware: *Firmware, + /// Optional configuration of the installation process. Pass `.{}` if you're not sure what to do here. + options: InstallFirmwareOptions, + ) void { + std.debug.assert(env == firmware.env); + const install_step = addInstallFirmware(env, b, firmware, options); + b.getInstallStep().dependOn(&install_step.step); + } + + /// Creates a new `std.Build.Step.InstallFile` instance that will install the given firmware to `$prefix/firmware`. + /// + /// **NOTE:** This does not actually install the firmware yet. You have to add the returned step as a dependency to another step. + /// If you want to just install the firmware, use `installFirmware` instead! + pub fn addInstallFirmware( + /// The MicroZig instance that was used to create the firmware. + env: *BuildEnvironment, + /// The instance of the `build.zig` that should perform installation. + b: *std.Build, + /// The firmware that should be installed. Please make sure that this was created with the same `MicroZig` instance as `mz`. + firmware: *Firmware, + /// Optional configuration of the installation process. Pass `.{}` if you're not sure what to do here. + options: InstallFirmwareOptions, + ) *std.Build.Step.InstallFile { + _ = env; + const format = firmware.resolveFormat(options.format); + + const basename = b.fmt("{s}{s}", .{ + firmware.artifact.name, + format.getExtension(), + }); + + return b.addInstallFileWithDir(firmware.getEmittedBin(format), .{ .custom = "firmware" }, basename); + } + + fn dependency(env: *BuildEnvironment, name: []const u8, args: anytype) *std.Build.Dependency { + return env.self.builder.dependency(name, args); + } +}; + //////////////////////////////////////// // MicroZig Gen 2 Interface // //////////////////////////////////////// @@ -372,7 +708,7 @@ pub const FirmwareOptions = struct { name: []const u8, /// The MicroZig target that the firmware is built for. Either a board or a chip. - target: Target, + target: *const Target, /// The optimization level that should be used. Usually `ReleaseSmall` or `Debug` is a good choice. /// Also using `std.Build.standardOptimizeOption` is a good idea. @@ -399,222 +735,12 @@ pub const FirmwareOptions = struct { linker_script: ?LinkerScript = null, }; -/// Declares a new MicroZig firmware file. -pub fn addFirmware( - /// The MicroZig instance that should be used to create the firmware. - mz: *MicroZig, - /// The instance of the `build.zig` that is calling this function. - host_build: *std.Build, - /// Options that define how the firmware is built. - options: FirmwareOptions, -) *Firmware { - const micro_build = mz.self.builder; - - const chip = &options.target.chip; - const cpu = chip.cpu.getDescriptor(); - const maybe_hal = options.hal orelse options.target.hal; - const maybe_board = options.board orelse options.target.board; - - const linker_script = options.linker_script orelse options.target.linker_script; - - // TODO: let the user override which ram section to use the stack on, - // for now just using the first ram section in the memory region list - const first_ram = blk: { - for (chip.memory_regions) |region| { - if (region.kind == .ram) - break :blk region; - } else @panic("no ram memory region found for setting the end-of-stack address"); - }; - - // On demand, generate chip definitions via regz: - const chip_source = switch (chip.register_definition) { - .json, .atdf, .svd => |file| blk: { - const regz_exe = mz.dependency("regz", .{ .optimize = .ReleaseSafe }).artifact("regz"); - - const regz_gen = host_build.addRunArtifact(regz_exe); - - regz_gen.addArg("--schema"); // Explicitly set schema type, one of: svd, atdf, json - regz_gen.addArg(@tagName(chip.register_definition)); - - regz_gen.addArg("--output_path"); // Write to a file - const zig_file = regz_gen.addOutputFileArg("chip.zig"); - - regz_gen.addFileArg(file); - - break :blk zig_file; - }, - - .zig => |src| src, - }; - - const config = host_build.addOptions(); - config.addOption(bool, "has_hal", (maybe_hal != null)); - config.addOption(bool, "has_board", (maybe_board != null)); - - config.addOption(?[]const u8, "board_name", if (maybe_board) |brd| brd.name else null); - - config.addOption([]const u8, "chip_name", chip.name); - config.addOption([]const u8, "cpu_name", chip.name); - config.addOption(usize, "end_of_stack", first_ram.offset + first_ram.length); - - const fw: *Firmware = host_build.allocator.create(Firmware) catch @panic("out of memory"); - fw.* = Firmware{ - .mz = mz, - .host_build = host_build, - .artifact = host_build.addExecutable(.{ - .name = options.name, - .optimize = options.optimize, - .target = cpu.target, - .linkage = .static, - .root_source_file = .{ .cwd_relative = mz.self.builder.pathFromRoot("src/start.zig") }, - }), - .target = options.target, - .output_files = Firmware.OutputFileMap.init(host_build.allocator), - - .config = config, - - .modules = .{ - .microzig = micro_build.createModule(.{ - .source_file = .{ .cwd_relative = micro_build.pathFromRoot("src/microzig.zig") }, - .dependencies = &.{ - .{ - .name = "config", - .module = micro_build.createModule(.{ .source_file = config.getSource() }), - }, - }, - }), - - .cpu = undefined, - .chip = undefined, - - .board = null, - .hal = null, - - .app = undefined, - }, - }; - errdefer fw.output_files.deinit(); - - fw.modules.chip = micro_build.createModule(.{ - .source_file = chip_source, - .dependencies = &.{ - .{ .name = "microzig", .module = fw.modules.microzig }, - }, - }); - fw.modules.microzig.dependencies.put("chip", fw.modules.chip) catch @panic("out of memory"); - - fw.modules.cpu = micro_build.createModule(.{ - .source_file = cpu.source_file, - .dependencies = &.{ - .{ .name = "microzig", .module = fw.modules.microzig }, - }, - }); - fw.modules.microzig.dependencies.put("cpu", fw.modules.cpu) catch @panic("out of memory"); - - if (maybe_hal) |hal| { - fw.modules.hal = micro_build.createModule(.{ - .source_file = hal.source_file, - .dependencies = &.{ - .{ .name = "microzig", .module = fw.modules.microzig }, - }, - }); - fw.modules.microzig.dependencies.put("hal", fw.modules.hal.?) catch @panic("out of memory"); - } - - if (maybe_board) |brd| { - fw.modules.board = micro_build.createModule(.{ - .source_file = brd.source_file, - .dependencies = &.{ - .{ .name = "microzig", .module = fw.modules.microzig }, - }, - }); - fw.modules.microzig.dependencies.put("board", fw.modules.board.?) catch @panic("out of memory"); - } - - fw.modules.app = host_build.createModule(.{ - .source_file = options.source_file, - .dependencies = &.{ - .{ .name = "microzig", .module = fw.modules.microzig }, - }, - }); - - const umm = mz.dependency("umm-zig", .{}).module("umm"); - fw.modules.microzig.dependencies.put("umm", umm) catch @panic("out of memory"); - - fw.artifact.addModule("app", fw.modules.app); - fw.artifact.addModule("microzig", fw.modules.microzig); - - fw.artifact.strip = false; // we always want debug symbols, stripping brings us no benefit on embedded - fw.artifact.single_threaded = options.single_threaded orelse fw.target.single_threaded; - fw.artifact.bundle_compiler_rt = options.bundle_compiler_rt orelse fw.target.bundle_compiler_rt; - - switch (linker_script) { - .generated => { - fw.artifact.setLinkerScript( - generateLinkerScript(host_build, chip.*) catch @panic("out of memory"), - ); - }, - - .source_file => |source| { - fw.artifact.setLinkerScriptPath(source); - }, - } - - if (options.target.configure) |configure| { - configure(host_build, fw); - } - - return fw; -} - /// Configuration options for firmware installation. pub const InstallFirmwareOptions = struct { /// Overrides the output format for the binary. If not set, the standard preferred file format for the firmware target is used. format: ?BinaryFormat = null, }; -/// Adds a new dependency to the `install` step that will install the `firmware` into the folder `$prefix/firmware`. -pub fn installFirmware( - /// The MicroZig instance that was used to create the firmware. - mz: *MicroZig, - /// The instance of the `build.zig` that should perform installation. - b: *std.Build, - /// The firmware that should be installed. Please make sure that this was created with the same `MicroZig` instance as `mz`. - firmware: *Firmware, - /// Optional configuration of the installation process. Pass `.{}` if you're not sure what to do here. - options: InstallFirmwareOptions, -) void { - std.debug.assert(mz == firmware.mz); - const install_step = addInstallFirmware(mz, b, firmware, options); - b.getInstallStep().dependOn(&install_step.step); -} - -/// Creates a new `std.Build.Step.InstallFile` instance that will install the given firmware to `$prefix/firmware`. -/// -/// **NOTE:** This does not actually install the firmware yet. You have to add the returned step as a dependency to another step. -/// If you want to just install the firmware, use `installFirmware` instead! -pub fn addInstallFirmware( - /// The MicroZig instance that was used to create the firmware. - mz: *MicroZig, - /// The instance of the `build.zig` that should perform installation. - b: *std.Build, - /// The firmware that should be installed. Please make sure that this was created with the same `MicroZig` instance as `mz`. - firmware: *Firmware, - /// Optional configuration of the installation process. Pass `.{}` if you're not sure what to do here. - options: InstallFirmwareOptions, -) *std.Build.Step.InstallFile { - const format = firmware.resolveFormat(options.format); - - const basename = b.fmt("{s}{s}", .{ - firmware.artifact.name, - format.getExtension(), - }); - - _ = mz; - - return b.addInstallFileWithDir(firmware.getEmittedBin(format), .{ .custom = "firmware" }, basename); -} - /// Declaration of a firmware build. pub const Firmware = struct { const OutputFileMap = std.ArrayHashMap(BinaryFormat, std.Build.LazyPath, BinaryFormat.Context, false); @@ -629,9 +755,9 @@ pub const Firmware = struct { }; // privates: - mz: *MicroZig, + env: *BuildEnvironment, host_build: *std.Build, - target: Target, + target: *const Target, output_files: OutputFileMap, // publics: @@ -702,7 +828,7 @@ pub const Firmware = struct { }, .uf2 => |family_id| blk: { - const uf2_exe = firmware.mz.dependency("uf2", .{ .optimize = .ReleaseSafe }).artifact("elf2uf2"); + const uf2_exe = firmware.env.dependency("uf2", .{ .optimize = .ReleaseSafe }).artifact("elf2uf2"); const convert = firmware.host_build.addRunArtifact(uf2_exe); @@ -847,10 +973,6 @@ fn buildConfigError(b: *std.Build, comptime fmt: []const u8, args: anytype) nore @panic(msg); } -fn dependency(mz: *MicroZig, name: []const u8, args: anytype) *std.Build.Dependency { - return mz.self.builder.dependency(name, args); -} - fn generateLinkerScript(b: *std.Build, chip: Chip) !std.Build.LazyPath { const cpu = chip.cpu.getDescriptor(); diff --git a/core/build.zig b/core/build.zig index 748833fd4..1768f5133 100644 --- a/core/build.zig +++ b/core/build.zig @@ -3,7 +3,8 @@ //! This means we need to use addExecutable() instead of using const std = @import("std"); -const uf2 = @import("uf2"); +const microbuild = @import("microzig-build"); +// const uf2 = @import("uf2"); //////////////////////////////////////// // MicroZig Gen 2 Interface // @@ -14,43 +15,44 @@ fn root() []const u8 { } const build_root = root(); -const MicroZig = @This(); +// const MicroZig = @This(); -b: *std.Build, -self: *std.Build.Dependency, +// b: *std.Build, +// self: *std.Build.Dependency, -/// Creates a new instance of the MicroZig build support. -/// -/// This is necessary as we need to keep track of some internal state to prevent -/// duplicated work per firmware built. -pub fn init(b: *std.Build, dependency_name: []const u8) *MicroZig { - const mz = b.allocator.create(MicroZig) catch @panic("out of memory"); - mz.* = MicroZig{ - .b = b, - .self = b.dependency(dependency_name, .{}), - }; - return mz; -} +// /// Creates a new instance of the MicroZig build support. +// /// +// /// This is necessary as we need to keep track of some internal state to prevent +// /// duplicated work per firmware built. +// pub fn init(b: *std.Build, dependency_name: []const u8) *MicroZig { +// const mz = b.allocator.create(MicroZig) catch @panic("out of memory"); +// mz.* = MicroZig{ +// .b = b, +// .self = b.dependency(dependency_name, .{}), +// }; +// return mz; +// } /// This build script validates usage patterns we expect from MicroZig pub fn build(b: *std.Build) !void { - const uf2_dep = b.dependency("uf2", .{}); + _ = b; + // const uf2_dep = b.dependency("uf2", .{}); - const build_test = b.addTest(.{ - .root_source_file = .{ .path = "build.zig" }, - }); + // const build_test = b.addTest(.{ + // .root_source_file = .{ .path = "build.zig" }, + // }); - build_test.addAnonymousModule("uf2", .{ - .source_file = .{ .cwd_relative = uf2_dep.builder.pathFromRoot("build.zig") }, - }); + // build_test.addAnonymousModule("uf2", .{ + // .source_file = .{ .cwd_relative = uf2_dep.builder.pathFromRoot("build.zig") }, + // }); - const install_docs = b.addInstallDirectory(.{ - .source_dir = build_test.getEmittedDocs(), - .install_dir = .prefix, - .install_subdir = "docs", - }); + // const install_docs = b.addInstallDirectory(.{ + // .source_dir = build_test.getEmittedDocs(), + // .install_dir = .prefix, + // .install_subdir = "docs", + // }); - b.getInstallStep().dependOn(&install_docs.step); + // b.getInstallStep().dependOn(&install_docs.step); // const backings = @import("test/backings.zig"); // const optimize = b.standardOptimizeOption(.{}); @@ -96,686 +98,686 @@ pub fn build(b: *std.Build) !void { // test_step.dependOn(&b.addRunArtifact(core_tests).step); } -/// The resulting binary format for the firmware file. -/// A lot of embedded systems don't use plain ELF files, thus we provide means -/// to convert the resulting ELF into other common formats. -pub const BinaryFormat = union(enum) { - /// [Executable and Linkable Format](https://en.wikipedia.org/wiki/Executable_and_Linkable_Format), the standard output from the compiler. - elf, - - /// A flat binary, contains only the loaded portions of the firmware with an unspecified base offset. - bin, - - /// The [Intel HEX](https://en.wikipedia.org/wiki/Intel_HEX) format, contains - /// an ASCII description of what memory to load where. - hex, - - /// A [Device Firmware Upgrade](https://www.usb.org/sites/default/files/DFU_1.1.pdf) file. - dfu, - - /// The [USB Flashing Format (UF2)](https://github.com/microsoft/uf2) designed by Microsoft. - uf2: uf2.FamilyId, - - /// The [firmware format](https://docs.espressif.com/projects/esptool/en/latest/esp32/advanced-topics/firmware-image-format.html) used by the [esptool](https://github.com/espressif/esptool) bootloader. - esp, - - /// Custom option for non-standard formats. - custom: *Custom, - - /// Returns the standard extension for the resulting binary file. - pub fn getExtension(format: BinaryFormat) []const u8 { - return switch (format) { - .elf => ".elf", - .bin => ".bin", - .hex => ".hex", - .dfu => ".dfu", - .uf2 => ".uf2", - .esp => ".bin", - - .custom => |c| c.extension, - }; - } - - pub const Custom = struct { - /// The standard extension of the format. - extension: []const u8, - - /// A function that will convert a given `elf` file into the custom output format. - /// - /// The `*Custom` format is passed so contextual information can be obtained by using - /// `@fieldParentPtr` to provide access to tooling. - convert: *const fn (*Custom, elf: std.Build.LazyPath) std.Build.LazyPath, - }; - - const Enum = std.meta.Tag(BinaryFormat); - - const Context = struct { - pub fn hash(self: @This(), fmt: BinaryFormat) u32 { - _ = self; - - var hasher = std.hash.XxHash32.init(0x1337_42_21); - - hasher.update(@tagName(fmt)); - - switch (fmt) { - .elf, .bin, .hex, .dfu, .esp => |val| { - if (@TypeOf(val) != void) @compileError("Missing update: Context.hash now requires special care!"); - }, - - .uf2 => |family_id| hasher.update(@tagName(family_id)), - .custom => |custom| hasher.update(std.mem.asBytes(custom)), - } - - return hasher.final(); - } - - pub fn eql(self: @This(), fmt_a: BinaryFormat, fmt_b: BinaryFormat, index: usize) bool { - _ = self; - _ = index; - if (@as(BinaryFormat.Enum, fmt_a) != @as(BinaryFormat.Enum, fmt_b)) - return false; - - return switch (fmt_a) { - .elf, .bin, .hex, .dfu, .esp => |val| { - if (@TypeOf(val) != void) @compileError("Missing update: Context.eql now requires special care!"); - return true; - }, - - .uf2 => |a| (a == fmt_b.uf2), - .custom => |a| (a == fmt_b.custom), - }; - } - }; -}; - -/// The CPU model a target uses. -/// -/// The CPUs usually require special care on how to do interrupts, and getting an entry point. -/// -/// MicroZig officially only supports the CPUs listed here, but other CPUs might be provided -/// via the `custom` field. -pub const CpuModel = union(enum) { - avr5, - cortex_m0, - cortex_m0plus, - cortex_m3, - cortex_m4, - riscv32_imac, - - custom: *const Cpu, - - pub fn getDescriptor(model: CpuModel) *const Cpu { - return switch (@as(std.meta.Tag(CpuModel), model)) { - inline else => |tag| &@field(cpus, @tagName(tag)), - .custom => model.custom, - }; - } -}; - -/// A cpu descriptor. -pub const Cpu = struct { - /// Display name of the CPU. - name: []const u8, - - /// Source file providing startup code and memory initialization routines. - source_file: std.build.LazyPath, - - /// The compiler target we use to compile all the code. - target: std.zig.CrossTarget, -}; - -/// A descriptor for memory regions in a microcontroller. -pub const MemoryRegion = struct { - /// The type of the memory region for generating a proper linker script. - kind: Kind, - offset: u64, - length: u64, - - pub const Kind = union(enum) { - /// This is a (normally) immutable memory region where the code is stored. - flash, - - /// This is a mutable memory region for data storage. - ram, - - /// This is a memory region that maps MMIO devices. - io, - - /// This is a memory region that exists, but is reserved and must not be used. - reserved, - - /// This is a memory region used for internal linking tasks required by the board support package. - private: PrivateRegion, - }; - - pub const PrivateRegion = struct { - /// The name of the memory region. Will not have an automatic numeric counter and must be unique. - name: []const u8, - - /// Is the memory region executable? - executable: bool, - - /// Is the memory region readable? - readable: bool, - - /// Is the memory region writable? - writeable: bool, - }; -}; - -/// Defines a custom microcontroller. -pub const Chip = struct { - /// The display name of the controller. - name: []const u8, - - /// (optional) link to the documentation/vendor page of the controller. - url: ?[]const u8 = null, - - /// The cpu model this controller uses. - cpu: CpuModel, - - /// The provider for register definitions. - register_definition: union(enum) { - /// Use `regz` to create a zig file from a JSON schema. - json: std.Build.LazyPath, - - /// Use `regz` to create a json file from a SVD schema. - svd: std.Build.LazyPath, - - /// Use `regz` to create a zig file from an ATDF schema. - atdf: std.Build.LazyPath, - - /// Use the provided file directly as the chip file. - zig: std.Build.LazyPath, - }, - - /// The memory regions that are present in this chip. - memory_regions: []const MemoryRegion, -}; - -/// Defines a hardware abstraction layer. -pub const HardwareAbstractionLayer = struct { - /// Root source file for this HAL. - source_file: std.Build.LazyPath, -}; - -/// Provides a description of a board. -/// -/// Boards provide additional information to a chip and HAL package. -/// For example, they can list attached peripherials, external crystal frequencies, -/// flash sizes, ... -pub const BoardDefinition = struct { - /// Display name of the board - name: []const u8, - - /// (optional) link to the documentation/vendor page of the board. - url: ?[]const u8 = null, - - /// Provides the root file for the board definition. - source_file: std.Build.LazyPath, -}; - -/// The linker script used to link the firmware. -pub const LinkerScript = union(enum) { - /// Auto-generated linker script derived from the memory regions of the chip. - generated, - - /// Externally defined linker script. - source_file: std.build.LazyPath, -}; - -/// A compilation target for MicroZig. Provides information about the chip, -/// hal, board and so on. -/// -/// This is used instead of `std.zig.CrossTarget` to define a MicroZig Firmware. -pub const Target = struct { - /// The preferred binary format of this MicroZig target. If `null`, the user must - /// explicitly give the `.format` field during a call to `getEmittedBin()` or installation steps. - preferred_format: ?BinaryFormat, - - /// The chip this target uses, - chip: Chip, - - /// Usually, embedded projects are single-threaded and single-core applications. Platforms that - /// support multiple CPUs should set this to `false`. - single_threaded: bool = true, - - /// Determines whether the compiler_rt package is bundled with the application or not. - /// This should always be true except for platforms where compiler_rt cannot be built right now. - bundle_compiler_rt: bool = true, - - /// (optional) Provides a default hardware abstraction layer that is used. - /// If `null`, no `microzig.hal` will be available. - hal: ?HardwareAbstractionLayer = null, - - /// (optional) Provides description of external hardware and connected devices - /// like oscillators and such. - /// - /// This structure isn't used by MicroZig itself, but can be utilized from the HAL - /// if present. - board: ?BoardDefinition = null, - - /// (optional) Provide a custom linker script for the hardware or define a custom generation. - linker_script: LinkerScript = .generated, - - /// (optional) Further configures the created firmware depending on the chip and/or board settings. - /// This can be used to set/change additional properties on the created `*Firmware` object. - configure: ?*const fn (host_build: *std.Build, *Firmware) void = null, - - /// (optional) Post processing step that will patch up and modify the elf file if necessary. - binary_post_process: ?*const fn (host_build: *std.Build, std.Build.LazyPath) std.Build.LazyPath = null, -}; - -/// Options to the `addFirmware` function. -pub const FirmwareOptions = struct { - /// The name of the firmware file. - name: []const u8, - - /// The MicroZig target that the firmware is built for. Either a board or a chip. - target: Target, - - /// The optimization level that should be used. Usually `ReleaseSmall` or `Debug` is a good choice. - /// Also using `std.Build.standardOptimizeOption` is a good idea. - optimize: std.builtin.OptimizeMode, - - /// The root source file for the application. This is your `src/main.zig` file. - source_file: std.Build.LazyPath, - - // Overrides: - - /// If set, overrides the `single_threaded` property of the target. - single_threaded: ?bool = null, - - /// If set, overrides the `bundle_compiler_rt` property of the target. - bundle_compiler_rt: ?bool = null, - - /// If set, overrides the `hal` property of the target. - hal: ?HardwareAbstractionLayer = null, - - /// If set, overrides the `board` property of the target. - board: ?BoardDefinition = null, - - /// If set, overrides the `linker_script` property of the target. - linker_script: ?LinkerScript = null, -}; - -/// Declares a new MicroZig firmware file. -pub fn addFirmware( - /// The MicroZig instance that should be used to create the firmware. - mz: *MicroZig, - /// The instance of the `build.zig` that is calling this function. - host_build: *std.Build, - /// Options that define how the firmware is built. - options: FirmwareOptions, -) *Firmware { - const micro_build = mz.self.builder; - - const chip = &options.target.chip; - const cpu = chip.cpu.getDescriptor(); - const maybe_hal = options.hal orelse options.target.hal; - const maybe_board = options.board orelse options.target.board; - - const linker_script = options.linker_script orelse options.target.linker_script; - - // TODO: let the user override which ram section to use the stack on, - // for now just using the first ram section in the memory region list - const first_ram = blk: { - for (chip.memory_regions) |region| { - if (region.kind == .ram) - break :blk region; - } else @panic("no ram memory region found for setting the end-of-stack address"); - }; - - // On demand, generate chip definitions via regz: - const chip_source = switch (chip.register_definition) { - .json, .atdf, .svd => |file| blk: { - const regz_exe = mz.dependency("regz", .{ .optimize = .ReleaseSafe }).artifact("regz"); - - const regz_gen = host_build.addRunArtifact(regz_exe); - - regz_gen.addArg("--schema"); // Explicitly set schema type, one of: svd, atdf, json - regz_gen.addArg(@tagName(chip.register_definition)); - - regz_gen.addArg("--output_path"); // Write to a file - const zig_file = regz_gen.addOutputFileArg("chip.zig"); - - regz_gen.addFileArg(file); - - break :blk zig_file; - }, - - .zig => |src| src, - }; - - const config = host_build.addOptions(); - config.addOption(bool, "has_hal", (maybe_hal != null)); - config.addOption(bool, "has_board", (maybe_board != null)); - - config.addOption(?[]const u8, "board_name", if (maybe_board) |brd| brd.name else null); - - config.addOption([]const u8, "chip_name", chip.name); - config.addOption([]const u8, "cpu_name", chip.name); - config.addOption(usize, "end_of_stack", first_ram.offset + first_ram.length); - - const fw: *Firmware = host_build.allocator.create(Firmware) catch @panic("out of memory"); - fw.* = Firmware{ - .mz = mz, - .host_build = host_build, - .artifact = host_build.addExecutable(.{ - .name = options.name, - .optimize = options.optimize, - .target = cpu.target, - .linkage = .static, - .root_source_file = .{ .cwd_relative = mz.self.builder.pathFromRoot("src/start.zig") }, - }), - .target = options.target, - .output_files = Firmware.OutputFileMap.init(host_build.allocator), - - .config = config, - - .modules = .{ - .microzig = micro_build.createModule(.{ - .source_file = .{ .cwd_relative = micro_build.pathFromRoot("src/microzig.zig") }, - .dependencies = &.{ - .{ - .name = "config", - .module = micro_build.createModule(.{ .source_file = config.getSource() }), - }, - }, - }), - - .cpu = undefined, - .chip = undefined, - - .board = null, - .hal = null, - - .app = undefined, - }, - }; - errdefer fw.output_files.deinit(); - - fw.modules.chip = micro_build.createModule(.{ - .source_file = chip_source, - .dependencies = &.{ - .{ .name = "microzig", .module = fw.modules.microzig }, - }, - }); - fw.modules.microzig.dependencies.put("chip", fw.modules.chip) catch @panic("out of memory"); - - fw.modules.cpu = micro_build.createModule(.{ - .source_file = cpu.source_file, - .dependencies = &.{ - .{ .name = "microzig", .module = fw.modules.microzig }, - }, - }); - fw.modules.microzig.dependencies.put("cpu", fw.modules.cpu) catch @panic("out of memory"); - - if (maybe_hal) |hal| { - fw.modules.hal = micro_build.createModule(.{ - .source_file = hal.source_file, - .dependencies = &.{ - .{ .name = "microzig", .module = fw.modules.microzig }, - }, - }); - fw.modules.microzig.dependencies.put("hal", fw.modules.hal.?) catch @panic("out of memory"); - } - - if (maybe_board) |brd| { - fw.modules.board = micro_build.createModule(.{ - .source_file = brd.source_file, - .dependencies = &.{ - .{ .name = "microzig", .module = fw.modules.microzig }, - }, - }); - fw.modules.microzig.dependencies.put("board", fw.modules.board.?) catch @panic("out of memory"); - } - - fw.modules.app = host_build.createModule(.{ - .source_file = options.source_file, - .dependencies = &.{ - .{ .name = "microzig", .module = fw.modules.microzig }, - }, - }); - - const umm = mz.dependency("umm-zig", .{}).module("umm"); - fw.modules.microzig.dependencies.put("umm", umm) catch @panic("out of memory"); - - fw.artifact.addModule("app", fw.modules.app); - fw.artifact.addModule("microzig", fw.modules.microzig); - - fw.artifact.strip = false; // we always want debug symbols, stripping brings us no benefit on embedded - fw.artifact.single_threaded = options.single_threaded orelse fw.target.single_threaded; - fw.artifact.bundle_compiler_rt = options.bundle_compiler_rt orelse fw.target.bundle_compiler_rt; - - switch (linker_script) { - .generated => { - fw.artifact.setLinkerScript( - generateLinkerScript(host_build, chip.*) catch @panic("out of memory"), - ); - }, - - .source_file => |source| { - fw.artifact.setLinkerScriptPath(source); - }, - } - - if (options.target.configure) |configure| { - configure(host_build, fw); - } - - return fw; -} - -/// Configuration options for firmware installation. -pub const InstallFirmwareOptions = struct { - /// Overrides the output format for the binary. If not set, the standard preferred file format for the firmware target is used. - format: ?BinaryFormat = null, -}; - -/// Adds a new dependency to the `install` step that will install the `firmware` into the folder `$prefix/firmware`. -pub fn installFirmware( - /// The MicroZig instance that was used to create the firmware. - mz: *MicroZig, - /// The instance of the `build.zig` that should perform installation. - b: *std.Build, - /// The firmware that should be installed. Please make sure that this was created with the same `MicroZig` instance as `mz`. - firmware: *Firmware, - /// Optional configuration of the installation process. Pass `.{}` if you're not sure what to do here. - options: InstallFirmwareOptions, -) void { - std.debug.assert(mz == firmware.mz); - const install_step = addInstallFirmware(mz, b, firmware, options); - b.getInstallStep().dependOn(&install_step.step); -} - -/// Creates a new `std.Build.Step.InstallFile` instance that will install the given firmware to `$prefix/firmware`. -/// -/// **NOTE:** This does not actually install the firmware yet. You have to add the returned step as a dependency to another step. -/// If you want to just install the firmware, use `installFirmware` instead! -pub fn addInstallFirmware( - /// The MicroZig instance that was used to create the firmware. - mz: *MicroZig, - /// The instance of the `build.zig` that should perform installation. - b: *std.Build, - /// The firmware that should be installed. Please make sure that this was created with the same `MicroZig` instance as `mz`. - firmware: *Firmware, - /// Optional configuration of the installation process. Pass `.{}` if you're not sure what to do here. - options: InstallFirmwareOptions, -) *std.Build.Step.InstallFile { - const format = firmware.resolveFormat(options.format); - - const basename = b.fmt("{s}{s}", .{ - firmware.artifact.name, - format.getExtension(), - }); - - _ = mz; - - return b.addInstallFileWithDir(firmware.getEmittedBin(format), .{ .custom = "firmware" }, basename); -} - -/// Declaration of a firmware build. -pub const Firmware = struct { - const OutputFileMap = std.ArrayHashMap(BinaryFormat, std.Build.LazyPath, BinaryFormat.Context, false); - - const Modules = struct { - app: *std.Build.Module, - cpu: *std.Build.Module, - chip: *std.Build.Module, - board: ?*std.Build.Module, - hal: ?*std.Build.Module, - microzig: *std.Build.Module, - }; - - // privates: - mz: *MicroZig, - host_build: *std.Build, - target: Target, - output_files: OutputFileMap, - - // publics: - - /// The artifact that is built by Zig. - artifact: *std.Build.Step.Compile, - - /// The options step that provides `microzig.config`. If you need custom configuration, you can add this here. - config: *std.Build.Step.Options, - - /// Declaration of the MicroZig modules used by this firmware. - modules: Modules, - - /// Path to the emitted elf file, if any. - emitted_elf: ?std.Build.LazyPath = null, - - /// Returns the emitted ELF file for this firmware. This is useful if you need debug information - /// or want to use a debugger like Segger, ST-Link or similar. - /// - /// **NOTE:** This is similar, but not equivalent to `std.Build.Step.Compile.getEmittedBin`. The call on the compile step does - /// not include post processing of the ELF files necessary by certain targets. - pub fn getEmittedElf(firmware: *Firmware) std.Build.LazyPath { - if (firmware.emitted_elf == null) { - const raw_elf = firmware.artifact.getEmittedBin(); - firmware.emitted_elf = if (firmware.target.binary_post_process) |binary_post_process| - binary_post_process(firmware.host_build, raw_elf) - else - raw_elf; - } - return firmware.emitted_elf.?; - } - - /// Returns the emitted binary for this firmware. The file is either in the preferred file format for - /// the target or in `format` if not null. - /// - /// **NOTE:** The file returned here is the same file that will be installed. - pub fn getEmittedBin(firmware: *Firmware, format: ?BinaryFormat) std.Build.LazyPath { - const actual_format = firmware.resolveFormat(format); - - const gop = firmware.output_files.getOrPut(actual_format) catch @panic("out of memory"); - if (!gop.found_existing) { - const elf_file = firmware.getEmittedElf(); - - const basename = firmware.host_build.fmt("{s}{s}", .{ - firmware.artifact.name, - actual_format.getExtension(), - }); - - gop.value_ptr.* = switch (actual_format) { - .elf => elf_file, - - .bin => blk: { - const objcopy = firmware.host_build.addObjCopy(elf_file, .{ - .basename = basename, - .format = .bin, - }); - - break :blk objcopy.getOutput(); - }, - - .hex => blk: { - const objcopy = firmware.host_build.addObjCopy(elf_file, .{ - .basename = basename, - .format = .hex, - }); - - break :blk objcopy.getOutput(); - }, - - .uf2 => |family_id| blk: { - const uf2_exe = firmware.mz.dependency("uf2", .{ .optimize = .ReleaseSafe }).artifact("elf2uf2"); - - const convert = firmware.host_build.addRunArtifact(uf2_exe); - - convert.addArg("--family-id"); - convert.addArg(firmware.host_build.fmt("0x{X:0>4}", .{@intFromEnum(family_id)})); - - convert.addArg("--elf-path"); - convert.addFileArg(elf_file); - - convert.addArg("--output-path"); - break :blk convert.addOutputFileArg(basename); - }, - - .dfu => buildConfigError(firmware.host_build, "DFU is not implemented yet. See https://github.com/ZigEmbeddedGroup/microzig/issues/145 for more details!", .{}), - .esp => buildConfigError(firmware.host_build, "ESP firmware image is not implemented yet. See https://github.com/ZigEmbeddedGroup/microzig/issues/146 for more details!", .{}), - - .custom => |generator| generator.convert(generator, elf_file), - }; - } - return gop.value_ptr.*; - } - - pub const AppDependencyOptions = struct { - depend_on_microzig: bool = false, - }; - - /// Adds a regular dependency to your application. - pub fn addAppDependency(fw: *Firmware, name: []const u8, module: *std.Build.Module, options: AppDependencyOptions) void { - if (options.depend_on_microzig) { - module.dependencies.put("microzig", fw.modules.microzig) catch @panic("OOM"); - } - fw.modules.app.dependencies.put(name, module) catch @panic("OOM"); - } - - pub fn addIncludePath(fw: *Firmware, path: std.Build.LazyPath) void { - fw.artifact.addIncludePath(path); - } - - pub fn addSystemIncludePath(fw: *Firmware, path: std.Build.LazyPath) void { - fw.artifact.addSystemIncludePath(path); - } - - pub fn addCSourceFile(fw: *Firmware, source: std.Build.Step.Compile.CSourceFile) void { - fw.artifact.addCSourceFile(source); - } - - pub fn addOptions(fw: *Firmware, module_name: []const u8, options: *std.Build.OptionsStep) void { - fw.artifact.addOptions(module_name, options); - fw.modules.app.dependencies.put( - module_name, - fw.host_build.createModule(.{ - .source_file = options.getOutput(), - }), - ) catch @panic("OOM"); - } - - pub fn addObjectFile(fw: *Firmware, source: std.Build.LazyPath) void { - fw.artifact.addObjectFile(source); - } - - fn resolveFormat(firmware: *Firmware, format: ?BinaryFormat) BinaryFormat { - if (format) |fmt| return fmt; - - if (firmware.target.preferred_format) |fmt| return fmt; - - buildConfigError(firmware.host_build, "{s} has no preferred output format, please provide one in the `format` option.", .{ - firmware.target.chip.name, - }); - } -}; +// /// The resulting binary format for the firmware file. +// /// A lot of embedded systems don't use plain ELF files, thus we provide means +// /// to convert the resulting ELF into other common formats. +// pub const BinaryFormat = union(enum) { +// /// [Executable and Linkable Format](https://en.wikipedia.org/wiki/Executable_and_Linkable_Format), the standard output from the compiler. +// elf, + +// /// A flat binary, contains only the loaded portions of the firmware with an unspecified base offset. +// bin, + +// /// The [Intel HEX](https://en.wikipedia.org/wiki/Intel_HEX) format, contains +// /// an ASCII description of what memory to load where. +// hex, + +// /// A [Device Firmware Upgrade](https://www.usb.org/sites/default/files/DFU_1.1.pdf) file. +// dfu, + +// /// The [USB Flashing Format (UF2)](https://github.com/microsoft/uf2) designed by Microsoft. +// uf2: uf2.FamilyId, + +// /// The [firmware format](https://docs.espressif.com/projects/esptool/en/latest/esp32/advanced-topics/firmware-image-format.html) used by the [esptool](https://github.com/espressif/esptool) bootloader. +// esp, + +// /// Custom option for non-standard formats. +// custom: *Custom, + +// /// Returns the standard extension for the resulting binary file. +// pub fn getExtension(format: BinaryFormat) []const u8 { +// return switch (format) { +// .elf => ".elf", +// .bin => ".bin", +// .hex => ".hex", +// .dfu => ".dfu", +// .uf2 => ".uf2", +// .esp => ".bin", + +// .custom => |c| c.extension, +// }; +// } + +// pub const Custom = struct { +// /// The standard extension of the format. +// extension: []const u8, + +// /// A function that will convert a given `elf` file into the custom output format. +// /// +// /// The `*Custom` format is passed so contextual information can be obtained by using +// /// `@fieldParentPtr` to provide access to tooling. +// convert: *const fn (*Custom, elf: std.Build.LazyPath) std.Build.LazyPath, +// }; + +// const Enum = std.meta.Tag(BinaryFormat); + +// const Context = struct { +// pub fn hash(self: @This(), fmt: BinaryFormat) u32 { +// _ = self; + +// var hasher = std.hash.XxHash32.init(0x1337_42_21); + +// hasher.update(@tagName(fmt)); + +// switch (fmt) { +// .elf, .bin, .hex, .dfu, .esp => |val| { +// if (@TypeOf(val) != void) @compileError("Missing update: Context.hash now requires special care!"); +// }, + +// .uf2 => |family_id| hasher.update(@tagName(family_id)), +// .custom => |custom| hasher.update(std.mem.asBytes(custom)), +// } + +// return hasher.final(); +// } + +// pub fn eql(self: @This(), fmt_a: BinaryFormat, fmt_b: BinaryFormat, index: usize) bool { +// _ = self; +// _ = index; +// if (@as(BinaryFormat.Enum, fmt_a) != @as(BinaryFormat.Enum, fmt_b)) +// return false; + +// return switch (fmt_a) { +// .elf, .bin, .hex, .dfu, .esp => |val| { +// if (@TypeOf(val) != void) @compileError("Missing update: Context.eql now requires special care!"); +// return true; +// }, + +// .uf2 => |a| (a == fmt_b.uf2), +// .custom => |a| (a == fmt_b.custom), +// }; +// } +// }; +// }; + +// /// The CPU model a target uses. +// /// +// /// The CPUs usually require special care on how to do interrupts, and getting an entry point. +// /// +// /// MicroZig officially only supports the CPUs listed here, but other CPUs might be provided +// /// via the `custom` field. +// pub const CpuModel = union(enum) { +// avr5, +// cortex_m0, +// cortex_m0plus, +// cortex_m3, +// cortex_m4, +// riscv32_imac, + +// custom: *const Cpu, + +// pub fn getDescriptor(model: CpuModel) *const Cpu { +// return switch (@as(std.meta.Tag(CpuModel), model)) { +// inline else => |tag| &@field(cpus, @tagName(tag)), +// .custom => model.custom, +// }; +// } +// }; + +// /// A cpu descriptor. +// pub const Cpu = struct { +// /// Display name of the CPU. +// name: []const u8, + +// /// Source file providing startup code and memory initialization routines. +// source_file: std.build.LazyPath, + +// /// The compiler target we use to compile all the code. +// target: std.zig.CrossTarget, +// }; + +// /// A descriptor for memory regions in a microcontroller. +// pub const MemoryRegion = struct { +// /// The type of the memory region for generating a proper linker script. +// kind: Kind, +// offset: u64, +// length: u64, + +// pub const Kind = union(enum) { +// /// This is a (normally) immutable memory region where the code is stored. +// flash, + +// /// This is a mutable memory region for data storage. +// ram, + +// /// This is a memory region that maps MMIO devices. +// io, + +// /// This is a memory region that exists, but is reserved and must not be used. +// reserved, + +// /// This is a memory region used for internal linking tasks required by the board support package. +// private: PrivateRegion, +// }; + +// pub const PrivateRegion = struct { +// /// The name of the memory region. Will not have an automatic numeric counter and must be unique. +// name: []const u8, + +// /// Is the memory region executable? +// executable: bool, + +// /// Is the memory region readable? +// readable: bool, + +// /// Is the memory region writable? +// writeable: bool, +// }; +// }; + +// /// Defines a custom microcontroller. +// pub const Chip = struct { +// /// The display name of the controller. +// name: []const u8, + +// /// (optional) link to the documentation/vendor page of the controller. +// url: ?[]const u8 = null, + +// /// The cpu model this controller uses. +// cpu: CpuModel, + +// /// The provider for register definitions. +// register_definition: union(enum) { +// /// Use `regz` to create a zig file from a JSON schema. +// json: std.Build.LazyPath, + +// /// Use `regz` to create a json file from a SVD schema. +// svd: std.Build.LazyPath, + +// /// Use `regz` to create a zig file from an ATDF schema. +// atdf: std.Build.LazyPath, + +// /// Use the provided file directly as the chip file. +// zig: std.Build.LazyPath, +// }, + +// /// The memory regions that are present in this chip. +// memory_regions: []const MemoryRegion, +// }; + +// /// Defines a hardware abstraction layer. +// pub const HardwareAbstractionLayer = struct { +// /// Root source file for this HAL. +// source_file: std.Build.LazyPath, +// }; + +// /// Provides a description of a board. +// /// +// /// Boards provide additional information to a chip and HAL package. +// /// For example, they can list attached peripherials, external crystal frequencies, +// /// flash sizes, ... +// pub const BoardDefinition = struct { +// /// Display name of the board +// name: []const u8, + +// /// (optional) link to the documentation/vendor page of the board. +// url: ?[]const u8 = null, + +// /// Provides the root file for the board definition. +// source_file: std.Build.LazyPath, +// }; + +// /// The linker script used to link the firmware. +// pub const LinkerScript = union(enum) { +// /// Auto-generated linker script derived from the memory regions of the chip. +// generated, + +// /// Externally defined linker script. +// source_file: std.build.LazyPath, +// }; + +// /// A compilation target for MicroZig. Provides information about the chip, +// /// hal, board and so on. +// /// +// /// This is used instead of `std.zig.CrossTarget` to define a MicroZig Firmware. +// pub const Target = struct { +// /// The preferred binary format of this MicroZig target. If `null`, the user must +// /// explicitly give the `.format` field during a call to `getEmittedBin()` or installation steps. +// preferred_format: ?BinaryFormat, + +// /// The chip this target uses, +// chip: Chip, + +// /// Usually, embedded projects are single-threaded and single-core applications. Platforms that +// /// support multiple CPUs should set this to `false`. +// single_threaded: bool = true, + +// /// Determines whether the compiler_rt package is bundled with the application or not. +// /// This should always be true except for platforms where compiler_rt cannot be built right now. +// bundle_compiler_rt: bool = true, + +// /// (optional) Provides a default hardware abstraction layer that is used. +// /// If `null`, no `microzig.hal` will be available. +// hal: ?HardwareAbstractionLayer = null, + +// /// (optional) Provides description of external hardware and connected devices +// /// like oscillators and such. +// /// +// /// This structure isn't used by MicroZig itself, but can be utilized from the HAL +// /// if present. +// board: ?BoardDefinition = null, + +// /// (optional) Provide a custom linker script for the hardware or define a custom generation. +// linker_script: LinkerScript = .generated, + +// /// (optional) Further configures the created firmware depending on the chip and/or board settings. +// /// This can be used to set/change additional properties on the created `*Firmware` object. +// configure: ?*const fn (host_build: *std.Build, *Firmware) void = null, + +// /// (optional) Post processing step that will patch up and modify the elf file if necessary. +// binary_post_process: ?*const fn (host_build: *std.Build, std.Build.LazyPath) std.Build.LazyPath = null, +// }; + +// /// Options to the `addFirmware` function. +// pub const FirmwareOptions = struct { +// /// The name of the firmware file. +// name: []const u8, + +// /// The MicroZig target that the firmware is built for. Either a board or a chip. +// target: Target, + +// /// The optimization level that should be used. Usually `ReleaseSmall` or `Debug` is a good choice. +// /// Also using `std.Build.standardOptimizeOption` is a good idea. +// optimize: std.builtin.OptimizeMode, + +// /// The root source file for the application. This is your `src/main.zig` file. +// source_file: std.Build.LazyPath, + +// // Overrides: + +// /// If set, overrides the `single_threaded` property of the target. +// single_threaded: ?bool = null, + +// /// If set, overrides the `bundle_compiler_rt` property of the target. +// bundle_compiler_rt: ?bool = null, + +// /// If set, overrides the `hal` property of the target. +// hal: ?HardwareAbstractionLayer = null, + +// /// If set, overrides the `board` property of the target. +// board: ?BoardDefinition = null, + +// /// If set, overrides the `linker_script` property of the target. +// linker_script: ?LinkerScript = null, +// }; + +// /// Declares a new MicroZig firmware file. +// pub fn addFirmware( +// /// The MicroZig instance that should be used to create the firmware. +// mz: *MicroZig, +// /// The instance of the `build.zig` that is calling this function. +// host_build: *std.Build, +// /// Options that define how the firmware is built. +// options: FirmwareOptions, +// ) *Firmware { +// const micro_build = mz.self.builder; + +// const chip = &options.target.chip; +// const cpu = chip.cpu.getDescriptor(); +// const maybe_hal = options.hal orelse options.target.hal; +// const maybe_board = options.board orelse options.target.board; + +// const linker_script = options.linker_script orelse options.target.linker_script; + +// // TODO: let the user override which ram section to use the stack on, +// // for now just using the first ram section in the memory region list +// const first_ram = blk: { +// for (chip.memory_regions) |region| { +// if (region.kind == .ram) +// break :blk region; +// } else @panic("no ram memory region found for setting the end-of-stack address"); +// }; + +// // On demand, generate chip definitions via regz: +// const chip_source = switch (chip.register_definition) { +// .json, .atdf, .svd => |file| blk: { +// const regz_exe = mz.dependency("regz", .{ .optimize = .ReleaseSafe }).artifact("regz"); + +// const regz_gen = host_build.addRunArtifact(regz_exe); + +// regz_gen.addArg("--schema"); // Explicitly set schema type, one of: svd, atdf, json +// regz_gen.addArg(@tagName(chip.register_definition)); + +// regz_gen.addArg("--output_path"); // Write to a file +// const zig_file = regz_gen.addOutputFileArg("chip.zig"); + +// regz_gen.addFileArg(file); + +// break :blk zig_file; +// }, + +// .zig => |src| src, +// }; + +// const config = host_build.addOptions(); +// config.addOption(bool, "has_hal", (maybe_hal != null)); +// config.addOption(bool, "has_board", (maybe_board != null)); + +// config.addOption(?[]const u8, "board_name", if (maybe_board) |brd| brd.name else null); + +// config.addOption([]const u8, "chip_name", chip.name); +// config.addOption([]const u8, "cpu_name", chip.name); +// config.addOption(usize, "end_of_stack", first_ram.offset + first_ram.length); + +// const fw: *Firmware = host_build.allocator.create(Firmware) catch @panic("out of memory"); +// fw.* = Firmware{ +// .mz = mz, +// .host_build = host_build, +// .artifact = host_build.addExecutable(.{ +// .name = options.name, +// .optimize = options.optimize, +// .target = cpu.target, +// .linkage = .static, +// .root_source_file = .{ .cwd_relative = mz.self.builder.pathFromRoot("src/start.zig") }, +// }), +// .target = options.target, +// .output_files = Firmware.OutputFileMap.init(host_build.allocator), + +// .config = config, + +// .modules = .{ +// .microzig = micro_build.createModule(.{ +// .source_file = .{ .cwd_relative = micro_build.pathFromRoot("src/microzig.zig") }, +// .dependencies = &.{ +// .{ +// .name = "config", +// .module = micro_build.createModule(.{ .source_file = config.getSource() }), +// }, +// }, +// }), + +// .cpu = undefined, +// .chip = undefined, + +// .board = null, +// .hal = null, + +// .app = undefined, +// }, +// }; +// errdefer fw.output_files.deinit(); + +// fw.modules.chip = micro_build.createModule(.{ +// .source_file = chip_source, +// .dependencies = &.{ +// .{ .name = "microzig", .module = fw.modules.microzig }, +// }, +// }); +// fw.modules.microzig.dependencies.put("chip", fw.modules.chip) catch @panic("out of memory"); + +// fw.modules.cpu = micro_build.createModule(.{ +// .source_file = cpu.source_file, +// .dependencies = &.{ +// .{ .name = "microzig", .module = fw.modules.microzig }, +// }, +// }); +// fw.modules.microzig.dependencies.put("cpu", fw.modules.cpu) catch @panic("out of memory"); + +// if (maybe_hal) |hal| { +// fw.modules.hal = micro_build.createModule(.{ +// .source_file = hal.source_file, +// .dependencies = &.{ +// .{ .name = "microzig", .module = fw.modules.microzig }, +// }, +// }); +// fw.modules.microzig.dependencies.put("hal", fw.modules.hal.?) catch @panic("out of memory"); +// } + +// if (maybe_board) |brd| { +// fw.modules.board = micro_build.createModule(.{ +// .source_file = brd.source_file, +// .dependencies = &.{ +// .{ .name = "microzig", .module = fw.modules.microzig }, +// }, +// }); +// fw.modules.microzig.dependencies.put("board", fw.modules.board.?) catch @panic("out of memory"); +// } + +// fw.modules.app = host_build.createModule(.{ +// .source_file = options.source_file, +// .dependencies = &.{ +// .{ .name = "microzig", .module = fw.modules.microzig }, +// }, +// }); + +// const umm = mz.dependency("umm-zig", .{}).module("umm"); +// fw.modules.microzig.dependencies.put("umm", umm) catch @panic("out of memory"); + +// fw.artifact.addModule("app", fw.modules.app); +// fw.artifact.addModule("microzig", fw.modules.microzig); + +// fw.artifact.strip = false; // we always want debug symbols, stripping brings us no benefit on embedded +// fw.artifact.single_threaded = options.single_threaded orelse fw.target.single_threaded; +// fw.artifact.bundle_compiler_rt = options.bundle_compiler_rt orelse fw.target.bundle_compiler_rt; + +// switch (linker_script) { +// .generated => { +// fw.artifact.setLinkerScript( +// generateLinkerScript(host_build, chip.*) catch @panic("out of memory"), +// ); +// }, + +// .source_file => |source| { +// fw.artifact.setLinkerScriptPath(source); +// }, +// } + +// if (options.target.configure) |configure| { +// configure(host_build, fw); +// } + +// return fw; +// } + +// /// Configuration options for firmware installation. +// pub const InstallFirmwareOptions = struct { +// /// Overrides the output format for the binary. If not set, the standard preferred file format for the firmware target is used. +// format: ?BinaryFormat = null, +// }; + +// /// Adds a new dependency to the `install` step that will install the `firmware` into the folder `$prefix/firmware`. +// pub fn installFirmware( +// /// The MicroZig instance that was used to create the firmware. +// mz: *MicroZig, +// /// The instance of the `build.zig` that should perform installation. +// b: *std.Build, +// /// The firmware that should be installed. Please make sure that this was created with the same `MicroZig` instance as `mz`. +// firmware: *Firmware, +// /// Optional configuration of the installation process. Pass `.{}` if you're not sure what to do here. +// options: InstallFirmwareOptions, +// ) void { +// std.debug.assert(mz == firmware.mz); +// const install_step = addInstallFirmware(mz, b, firmware, options); +// b.getInstallStep().dependOn(&install_step.step); +// } + +// /// Creates a new `std.Build.Step.InstallFile` instance that will install the given firmware to `$prefix/firmware`. +// /// +// /// **NOTE:** This does not actually install the firmware yet. You have to add the returned step as a dependency to another step. +// /// If you want to just install the firmware, use `installFirmware` instead! +// pub fn addInstallFirmware( +// /// The MicroZig instance that was used to create the firmware. +// mz: *MicroZig, +// /// The instance of the `build.zig` that should perform installation. +// b: *std.Build, +// /// The firmware that should be installed. Please make sure that this was created with the same `MicroZig` instance as `mz`. +// firmware: *Firmware, +// /// Optional configuration of the installation process. Pass `.{}` if you're not sure what to do here. +// options: InstallFirmwareOptions, +// ) *std.Build.Step.InstallFile { +// const format = firmware.resolveFormat(options.format); + +// const basename = b.fmt("{s}{s}", .{ +// firmware.artifact.name, +// format.getExtension(), +// }); + +// _ = mz; + +// return b.addInstallFileWithDir(firmware.getEmittedBin(format), .{ .custom = "firmware" }, basename); +// } + +// /// Declaration of a firmware build. +// pub const Firmware = struct { +// const OutputFileMap = std.ArrayHashMap(BinaryFormat, std.Build.LazyPath, BinaryFormat.Context, false); + +// const Modules = struct { +// app: *std.Build.Module, +// cpu: *std.Build.Module, +// chip: *std.Build.Module, +// board: ?*std.Build.Module, +// hal: ?*std.Build.Module, +// microzig: *std.Build.Module, +// }; + +// // privates: +// mz: *MicroZig, +// host_build: *std.Build, +// target: Target, +// output_files: OutputFileMap, + +// // publics: + +// /// The artifact that is built by Zig. +// artifact: *std.Build.Step.Compile, + +// /// The options step that provides `microzig.config`. If you need custom configuration, you can add this here. +// config: *std.Build.Step.Options, + +// /// Declaration of the MicroZig modules used by this firmware. +// modules: Modules, + +// /// Path to the emitted elf file, if any. +// emitted_elf: ?std.Build.LazyPath = null, + +// /// Returns the emitted ELF file for this firmware. This is useful if you need debug information +// /// or want to use a debugger like Segger, ST-Link or similar. +// /// +// /// **NOTE:** This is similar, but not equivalent to `std.Build.Step.Compile.getEmittedBin`. The call on the compile step does +// /// not include post processing of the ELF files necessary by certain targets. +// pub fn getEmittedElf(firmware: *Firmware) std.Build.LazyPath { +// if (firmware.emitted_elf == null) { +// const raw_elf = firmware.artifact.getEmittedBin(); +// firmware.emitted_elf = if (firmware.target.binary_post_process) |binary_post_process| +// binary_post_process(firmware.host_build, raw_elf) +// else +// raw_elf; +// } +// return firmware.emitted_elf.?; +// } + +// /// Returns the emitted binary for this firmware. The file is either in the preferred file format for +// /// the target or in `format` if not null. +// /// +// /// **NOTE:** The file returned here is the same file that will be installed. +// pub fn getEmittedBin(firmware: *Firmware, format: ?BinaryFormat) std.Build.LazyPath { +// const actual_format = firmware.resolveFormat(format); + +// const gop = firmware.output_files.getOrPut(actual_format) catch @panic("out of memory"); +// if (!gop.found_existing) { +// const elf_file = firmware.getEmittedElf(); + +// const basename = firmware.host_build.fmt("{s}{s}", .{ +// firmware.artifact.name, +// actual_format.getExtension(), +// }); + +// gop.value_ptr.* = switch (actual_format) { +// .elf => elf_file, + +// .bin => blk: { +// const objcopy = firmware.host_build.addObjCopy(elf_file, .{ +// .basename = basename, +// .format = .bin, +// }); + +// break :blk objcopy.getOutput(); +// }, + +// .hex => blk: { +// const objcopy = firmware.host_build.addObjCopy(elf_file, .{ +// .basename = basename, +// .format = .hex, +// }); + +// break :blk objcopy.getOutput(); +// }, + +// .uf2 => |family_id| blk: { +// const uf2_exe = firmware.mz.dependency("uf2", .{ .optimize = .ReleaseSafe }).artifact("elf2uf2"); + +// const convert = firmware.host_build.addRunArtifact(uf2_exe); + +// convert.addArg("--family-id"); +// convert.addArg(firmware.host_build.fmt("0x{X:0>4}", .{@intFromEnum(family_id)})); + +// convert.addArg("--elf-path"); +// convert.addFileArg(elf_file); + +// convert.addArg("--output-path"); +// break :blk convert.addOutputFileArg(basename); +// }, + +// .dfu => buildConfigError(firmware.host_build, "DFU is not implemented yet. See https://github.com/ZigEmbeddedGroup/microzig/issues/145 for more details!", .{}), +// .esp => buildConfigError(firmware.host_build, "ESP firmware image is not implemented yet. See https://github.com/ZigEmbeddedGroup/microzig/issues/146 for more details!", .{}), + +// .custom => |generator| generator.convert(generator, elf_file), +// }; +// } +// return gop.value_ptr.*; +// } + +// pub const AppDependencyOptions = struct { +// depend_on_microzig: bool = false, +// }; + +// /// Adds a regular dependency to your application. +// pub fn addAppDependency(fw: *Firmware, name: []const u8, module: *std.Build.Module, options: AppDependencyOptions) void { +// if (options.depend_on_microzig) { +// module.dependencies.put("microzig", fw.modules.microzig) catch @panic("OOM"); +// } +// fw.modules.app.dependencies.put(name, module) catch @panic("OOM"); +// } + +// pub fn addIncludePath(fw: *Firmware, path: std.Build.LazyPath) void { +// fw.artifact.addIncludePath(path); +// } + +// pub fn addSystemIncludePath(fw: *Firmware, path: std.Build.LazyPath) void { +// fw.artifact.addSystemIncludePath(path); +// } + +// pub fn addCSourceFile(fw: *Firmware, source: std.Build.Step.Compile.CSourceFile) void { +// fw.artifact.addCSourceFile(source); +// } + +// pub fn addOptions(fw: *Firmware, module_name: []const u8, options: *std.Build.OptionsStep) void { +// fw.artifact.addOptions(module_name, options); +// fw.modules.app.dependencies.put( +// module_name, +// fw.host_build.createModule(.{ +// .source_file = options.getOutput(), +// }), +// ) catch @panic("OOM"); +// } + +// pub fn addObjectFile(fw: *Firmware, source: std.Build.LazyPath) void { +// fw.artifact.addObjectFile(source); +// } + +// fn resolveFormat(firmware: *Firmware, format: ?BinaryFormat) BinaryFormat { +// if (format) |fmt| return fmt; + +// if (firmware.target.preferred_format) |fmt| return fmt; + +// buildConfigError(firmware.host_build, "{s} has no preferred output format, please provide one in the `format` option.", .{ +// firmware.target.chip.name, +// }); +// } +// }; pub const cpus = struct { - pub const avr5 = Cpu{ + pub const avr5 = microbuild.Cpu{ .name = "AVR5", .source_file = .{ .path = build_root ++ "/src/cpus/avr5.zig" }, .target = std.zig.CrossTarget{ @@ -786,7 +788,7 @@ pub const cpus = struct { }, }; - pub const cortex_m0 = Cpu{ + pub const cortex_m0 = microbuild.Cpu{ .name = "ARM Cortex-M0", .source_file = .{ .path = build_root ++ "/src/cpus/cortex-m.zig" }, .target = std.zig.CrossTarget{ @@ -797,7 +799,7 @@ pub const cpus = struct { }, }; - pub const cortex_m0plus = Cpu{ + pub const cortex_m0plus = microbuild.Cpu{ .name = "ARM Cortex-M0+", .source_file = .{ .path = build_root ++ "/src/cpus/cortex-m.zig" }, .target = std.zig.CrossTarget{ @@ -808,7 +810,7 @@ pub const cpus = struct { }, }; - pub const cortex_m3 = Cpu{ + pub const cortex_m3 = microbuild.Cpu{ .name = "ARM Cortex-M3", .source_file = .{ .path = build_root ++ "/src/cpus/cortex-m.zig" }, .target = std.zig.CrossTarget{ @@ -819,7 +821,7 @@ pub const cpus = struct { }, }; - pub const cortex_m4 = Cpu{ + pub const cortex_m4 = microbuild.Cpu{ .name = "ARM Cortex-M4", .source_file = .{ .path = build_root ++ "/src/cpus/cortex-m.zig" }, .target = std.zig.CrossTarget{ @@ -830,7 +832,7 @@ pub const cpus = struct { }, }; - pub const riscv32_imac = Cpu{ + pub const riscv32_imac = microbuild.Cpu{ .name = "RISC-V 32-bit", .source_file = .{ .path = build_root ++ "/src/cpus/riscv32.zig" }, .target = std.zig.CrossTarget{ @@ -842,138 +844,138 @@ pub const cpus = struct { }; }; -fn buildConfigError(b: *std.Build, comptime fmt: []const u8, args: anytype) noreturn { - const msg = b.fmt(fmt, args); - @panic(msg); -} - -fn dependency(mz: *MicroZig, name: []const u8, args: anytype) *std.Build.Dependency { - return mz.self.builder.dependency(name, args); -} - -fn generateLinkerScript(b: *std.Build, chip: Chip) !std.Build.LazyPath { - const cpu = chip.cpu.getDescriptor(); - - var contents = std.ArrayList(u8).init(b.allocator); - const writer = contents.writer(); - try writer.print( - \\/* - \\ * This file was auto-generated by microzig - \\ * - \\ * Target CPU: {[cpu]s} - \\ * Target Chip: {[chip]s} - \\ */ - \\ - // This is not the "true" entry point, but there's no such thing on embedded platforms - // anyways. This is the logical entrypoint that should be invoked when - // stack, .data and .bss are set up and the CPU is ready to be used. - \\ENTRY(microzig_main); - \\ - \\ - , .{ - .cpu = cpu.name, - .chip = chip.name, - }); - - try writer.writeAll("MEMORY\n{\n"); - { - var counters = [4]usize{ 0, 0, 0, 0 }; - for (chip.memory_regions) |region| { - // flash (rx!w) : ORIGIN = 0x00000000, LENGTH = 512k - - switch (region.kind) { - .flash => { - try writer.print(" flash{d} (rx!w)", .{counters[0]}); - counters[0] += 1; - }, - - .ram => { - try writer.print(" ram{d} (rw!x)", .{counters[1]}); - counters[1] += 1; - }, - - .io => { - try writer.print(" io{d} (rw!x)", .{counters[2]}); - counters[2] += 1; - }, - - .reserved => { - try writer.print(" reserved{d} (rw!x)", .{counters[3]}); - counters[3] += 1; - }, - - .private => |custom| { - try writer.print(" {s} (", .{custom.name}); - if (custom.readable) try writer.writeAll("r"); - if (custom.writeable) try writer.writeAll("w"); - if (custom.executable) try writer.writeAll("x"); - - if (!custom.readable or !custom.writeable or !custom.executable) { - try writer.writeAll("!"); - if (!custom.readable) try writer.writeAll("r"); - if (!custom.writeable) try writer.writeAll("w"); - if (!custom.executable) try writer.writeAll("x"); - } - try writer.writeAll(")"); - }, - } - try writer.print(" : ORIGIN = 0x{X:0>8}, LENGTH = 0x{X:0>8}\n", .{ region.offset, region.length }); - } - } - - try writer.writeAll("}\n\nSECTIONS\n{\n"); - { - try writer.writeAll( - \\ .text : - \\ { - \\ KEEP(*(microzig_flash_start)) - \\ *(.text*) - \\ } > flash0 - \\ - \\ - ); - - switch (cpu.target.getCpuArch()) { - .arm, .thumb => try writer.writeAll( - \\ .ARM.exidx : { - \\ *(.ARM.exidx* .gnu.linkonce.armexidx.*) - \\ } >flash0 - \\ - \\ - ), - else => {}, - } - - try writer.writeAll( - \\ .data : - \\ { - \\ microzig_data_start = .; - \\ *(.rodata*) - \\ *(.data*) - \\ microzig_data_end = .; - \\ } > ram0 AT> flash0 - \\ - \\ .bss (NOLOAD) : - \\ { - \\ microzig_bss_start = .; - \\ *(.bss*) - \\ microzig_bss_end = .; - \\ } > ram0 - \\ - \\ microzig_data_load_start = LOADADDR(.data); - \\ - ); - } - try writer.writeAll("}\n"); - - // TODO: Assert that the flash can actually hold all data! - // try writer.writeAll( - // \\ - // \\ ASSERT( (SIZEOF(.text) + SIZEOF(.data) > LENGTH(flash0)), "Error: .text + .data is too large for flash!" ); - // \\ - // ); - - const write = b.addWriteFiles(); - - return write.add("linker.ld", contents.items); -} +// fn buildConfigError(b: *std.Build, comptime fmt: []const u8, args: anytype) noreturn { +// const msg = b.fmt(fmt, args); +// @panic(msg); +// } + +// fn dependency(mz: *MicroZig, name: []const u8, args: anytype) *std.Build.Dependency { +// return mz.self.builder.dependency(name, args); +// } + +// fn generateLinkerScript(b: *std.Build, chip: Chip) !std.Build.LazyPath { +// const cpu = chip.cpu.getDescriptor(); + +// var contents = std.ArrayList(u8).init(b.allocator); +// const writer = contents.writer(); +// try writer.print( +// \\/* +// \\ * This file was auto-generated by microzig +// \\ * +// \\ * Target CPU: {[cpu]s} +// \\ * Target Chip: {[chip]s} +// \\ */ +// \\ +// // This is not the "true" entry point, but there's no such thing on embedded platforms +// // anyways. This is the logical entrypoint that should be invoked when +// // stack, .data and .bss are set up and the CPU is ready to be used. +// \\ENTRY(microzig_main); +// \\ +// \\ +// , .{ +// .cpu = cpu.name, +// .chip = chip.name, +// }); + +// try writer.writeAll("MEMORY\n{\n"); +// { +// var counters = [4]usize{ 0, 0, 0, 0 }; +// for (chip.memory_regions) |region| { +// // flash (rx!w) : ORIGIN = 0x00000000, LENGTH = 512k + +// switch (region.kind) { +// .flash => { +// try writer.print(" flash{d} (rx!w)", .{counters[0]}); +// counters[0] += 1; +// }, + +// .ram => { +// try writer.print(" ram{d} (rw!x)", .{counters[1]}); +// counters[1] += 1; +// }, + +// .io => { +// try writer.print(" io{d} (rw!x)", .{counters[2]}); +// counters[2] += 1; +// }, + +// .reserved => { +// try writer.print(" reserved{d} (rw!x)", .{counters[3]}); +// counters[3] += 1; +// }, + +// .private => |custom| { +// try writer.print(" {s} (", .{custom.name}); +// if (custom.readable) try writer.writeAll("r"); +// if (custom.writeable) try writer.writeAll("w"); +// if (custom.executable) try writer.writeAll("x"); + +// if (!custom.readable or !custom.writeable or !custom.executable) { +// try writer.writeAll("!"); +// if (!custom.readable) try writer.writeAll("r"); +// if (!custom.writeable) try writer.writeAll("w"); +// if (!custom.executable) try writer.writeAll("x"); +// } +// try writer.writeAll(")"); +// }, +// } +// try writer.print(" : ORIGIN = 0x{X:0>8}, LENGTH = 0x{X:0>8}\n", .{ region.offset, region.length }); +// } +// } + +// try writer.writeAll("}\n\nSECTIONS\n{\n"); +// { +// try writer.writeAll( +// \\ .text : +// \\ { +// \\ KEEP(*(microzig_flash_start)) +// \\ *(.text*) +// \\ } > flash0 +// \\ +// \\ +// ); + +// switch (cpu.target.getCpuArch()) { +// .arm, .thumb => try writer.writeAll( +// \\ .ARM.exidx : { +// \\ *(.ARM.exidx* .gnu.linkonce.armexidx.*) +// \\ } >flash0 +// \\ +// \\ +// ), +// else => {}, +// } + +// try writer.writeAll( +// \\ .data : +// \\ { +// \\ microzig_data_start = .; +// \\ *(.rodata*) +// \\ *(.data*) +// \\ microzig_data_end = .; +// \\ } > ram0 AT> flash0 +// \\ +// \\ .bss (NOLOAD) : +// \\ { +// \\ microzig_bss_start = .; +// \\ *(.bss*) +// \\ microzig_bss_end = .; +// \\ } > ram0 +// \\ +// \\ microzig_data_load_start = LOADADDR(.data); +// \\ +// ); +// } +// try writer.writeAll("}\n"); + +// // TODO: Assert that the flash can actually hold all data! +// // try writer.writeAll( +// // \\ +// // \\ ASSERT( (SIZEOF(.text) + SIZEOF(.data) > LENGTH(flash0)), "Error: .text + .data is too large for flash!" ); +// // \\ +// // ); + +// const write = b.addWriteFiles(); + +// return write.add("linker.ld", contents.items); +// } diff --git a/examples/build.zig b/examples/build.zig new file mode 100644 index 000000000..bd3f69f7b --- /dev/null +++ b/examples/build.zig @@ -0,0 +1,28 @@ +const std = @import("std"); +const MicroZig = @import("../build/build.zig"); // "microzig-build" + +pub fn build(b: *std.Build) void { + const microzig = MicroZig.createBuildEnvironment(b, .{ + .self = "microzig", // package name of the build package (optional) + .core = "microzig-core", // package name of the core package (optional) + .board_support = &.{ + // package names for BSP packages: + "microzig-bsp-nxp", + "microzig-bsp-rp2040", + }, + }); + + const optimize = b.standardOptimizeOption(.{}); + const target_name = b.option([]const u8, "target", "Select the target to build for.") orelse "board:mbed/lpc1768"; + + const target = microzig.findTarget(target_name).?; + + const firmware = microzig.addFirmware(b, .{ + .name = "blinky", + .target = target, + .optimize = optimize, + .source_file = .{ .path = "src/empty.zig" }, + }); + + microzig.installFirmware(b, firmware, .{}); +} diff --git a/examples/modular/README.md b/examples/modular/README.md deleted file mode 100644 index 7909f7c4c..000000000 --- a/examples/modular/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Examples for the BSP `nxp-lpc` - -- [Blinky](src/blinky.zig) on [nRF52840 Dongle](https://www.nordicsemi.com/Products/Development-hardware/nrf52840-dongle) - TODO: Implement this! - diff --git a/examples/modular/build.zig b/examples/modular/build.zig deleted file mode 100644 index f58e4a8eb..000000000 --- a/examples/modular/build.zig +++ /dev/null @@ -1,33 +0,0 @@ -const std = @import("std"); -const microzig_build = @import("microzig-build"); -const lpc = @import("lpc"); - -pub fn build(b: *std.Build) void { - const microbuild = microzig_build.init( - b, - b.dependency("microzig", .{}), - ); - - const optimize = b.standardOptimizeOption(.{}); - - // `addFirmware` basically works like addExecutable, but takes a - // `microzig.Target` for target instead of a `std.zig.CrossTarget`. - // - // The target will convey all necessary information on the chip, - // cpu and potentially the board as well. - const firmware = microbuild.addFirmware(b, .{ - .name = "blinky", - .target = lpc.boards.mbed.lpc1768, - .optimize = optimize, - .source_file = .{ .path = "src/blinky.zig" }, - }); - - // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()` - // and allows installing the firmware as a typical firmware file. - // - // This will also install into `$prefix/firmware` instead of `$prefix/bin`. - microbuild.installFirmware(b, firmware, .{}); - - // For debugging, we also always install the firmware as an ELF file - microbuild.installFirmware(b, firmware, .{ .format = .elf }); -} diff --git a/examples/modular/build.zig.zon b/examples/modular/build.zig.zon deleted file mode 100644 index aa5a11a05..000000000 --- a/examples/modular/build.zig.zon +++ /dev/null @@ -1,14 +0,0 @@ -.{ - .name = "microzig-nxp-lpc-examples", - .version = "0.1.0", - .dependencies = .{ - .microzig = .{ - .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/c6c9ec4516f57638e751141085c9d76120990312.tar.gz", - .hash = "1220af58bdaa721b8189f3a7adfda660517dd354463463388e96d69fe4ceccf80b92", - }, - .lpc = .{ - .url = "https://github.com/ZigEmbeddedGroup/nxp-lpc/archive/130a1316c0892415e7da958a5e9548ed87bba54d.tar.gz", - .hash = "1220165879f85a1d51656d35b3963a95f3585dc665fc7414f76aa6aad4e6635536cf", - }, - }, -} diff --git a/examples/modular/src/blinky.zig b/examples/modular/src/blinky.zig deleted file mode 100644 index 328d63705..000000000 --- a/examples/modular/src/blinky.zig +++ /dev/null @@ -1,56 +0,0 @@ -const std = @import("std"); -const microzig = @import("microzig"); - -const chip = microzig.chip; - -// LED-1: P1.18 -// LED-2: P1.20 -// LED-3: P1.21 -// LED-4: P1.23 - -const conn = chip.peripherals.PINCONNECT; -const gpio: *volatile [5]PatchedGpio = @ptrCast(@alignCast(chip.peripherals.GPIO)); - -const led_mask = [4]u32{ - (1 << 18), - (1 << 20), - (1 << 21), - (1 << 23), -}; -const all_mask = led_mask[0] | led_mask[1] | led_mask[2] | led_mask[3]; - -pub fn main() !void { - conn.PINSEL3.modify(.{ - .P1_18 = .{ .value = .GPIO_P1 }, - .P1_20 = .{ .value = .GPIO_P1 }, - .P1_21 = .{ .value = .GPIO_P1 }, - .P1_23 = .{ .value = .GPIO_P1 }, - }); - - const p1 = &gpio[1]; - - p1.dir = all_mask; - - while (true) { - for (led_mask) |mask| { - p1.pin_clr = (all_mask & ~mask); - p1.pin_set = mask; - microzig.core.experimental.debug.busy_sleep(100_000); - } - } -} - -const PatchedGpio = extern struct { - dir: u32, // 0x2009 C000 - __padding0: u32, // 0x2009 C004 - __padding1: u32, // 0x2009 C008 - __padding2: u32, // 0x2009 C00C - mask: u32, // 0x2009 C010 - pin: u32, // 0x2009 C014 - pin_set: u32, // 0x2009 C018 - pin_clr: u32, // 0x2009 C01C - - comptime { - std.debug.assert(@sizeOf(PatchedGpio) == 0x20); - } -}; diff --git a/examples/next-gen/build.zig b/examples/next-gen/build.zig new file mode 100644 index 000000000..37628be1a --- /dev/null +++ b/examples/next-gen/build.zig @@ -0,0 +1,32 @@ +const std = @import("std"); +const MicroZig = @import("microzig"); + +pub fn build(b: *std.Build) void { + const microzig = MicroZig.createBuildEnvironment(b, .{ + .self = "microzig", // package name of the build package (optional) + .core = "microzig-core", // package name of the core package (optional) + .board_support = &.{ + // package names for BSP packages: + "microzig-bsp-nxp", + "microzig-bsp-rp2040", + }, + }); + + const optimize = b.standardOptimizeOption(.{}); + const target_name = b.option([]const u8, "target", "Select the target to build for.") orelse "board:mbed/lpc1768"; + + for (microzig.targets.keys()) |listed_target_name| { + std.debug.print("- '{s}'\n", .{listed_target_name}); + } + + const target = microzig.findTarget(target_name).?; + + const firmware = microzig.addFirmware(b, .{ + .name = "blinky", + .target = target, + .optimize = optimize, + .source_file = .{ .path = "src/empty.zig" }, + }); + + microzig.installFirmware(b, firmware, .{}); +} diff --git a/examples/next-gen/build.zig.zon b/examples/next-gen/build.zig.zon new file mode 100644 index 000000000..f9d6f771a --- /dev/null +++ b/examples/next-gen/build.zig.zon @@ -0,0 +1,22 @@ +.{ + .name = "microzig-nxp-lpc-examples", + .version = "0.1.0", + .dependencies = .{ + .microzig = .{ + .url = "https://public.devspace.random-projects.net/microzig-build.tar.gz", + .hash = "122068db50e2a071cac3fc5b42d5cd2213ccb563986af60b941cb7af29b83df65b02", + }, + .@"microzig-core" = .{ + .url = "https://public.devspace.random-projects.net/microzig-core.tar.gz", + .hash = "12202df033d2b967108b25b8e66d8c8abcf690348a24baa35474a28086170ff31e54", + }, + .@"microzig-bsp-nxp" = .{ + .url = "https://public.devspace.random-projects.net/board-support/nxp/lpc.tar.gz", + .hash = "12201efd8d8b992caef770c87d78e6bd00bd73051bd1559bc342703f2e83650ef2f9", + }, + .@"microzig-bsp-rp2040" = .{ + .url = "https://public.devspace.random-projects.net/board-support/raspberrypi/rp2040.tar.gz", + .hash = "1220154cd3634d0f3286cd2fb727cce9af3f3ab166772065e3efe4f9577128f4c559", + }, + }, +} \ No newline at end of file diff --git a/examples/next-gen/src/empty.zig b/examples/next-gen/src/empty.zig new file mode 100644 index 000000000..b2925389e --- /dev/null +++ b/examples/next-gen/src/empty.zig @@ -0,0 +1,8 @@ +const std = @import("std"); +const microzig = @import("microzig"); + +pub fn main() !void { + while (true) { + asm volatile ("" ::: "memory"); + } +} diff --git a/tools/archive-info.zig b/tools/archive-info.zig index 33f8496d5..034be0d6c 100644 --- a/tools/archive-info.zig +++ b/tools/archive-info.zig @@ -46,7 +46,7 @@ pub fn main() !void { // defer decompress.deinit(); var arc = try Archive.read_from_tar(arena, buffered.reader(), .{ - .strip_components = 0, + .strip_components = 1, }); defer arc.deinit(arena); @@ -57,7 +57,23 @@ pub fn main() !void { try paths.appendSlice(arc.files.keys()); std.mem.sort([]const u8, paths.items, {}, Archive.path_less_than); - const calculated_hash = try arc.hash(allocator, .ignore_executable_bit); + const calculated_hash = blk: { + var arc_hasher = Hash.init(.{}); + + for (paths.items) |path| { + const archived_file = arc.files.getPtr(path).?; + + var file_hasher = Hash.init(.{}); + file_hasher.update(path); + file_hasher.update(&.{ 0, 0 }); // second part is "executable bit" + file_hasher.update(archived_file.text); + + arc_hasher.update(&file_hasher.finalResult()); + } + + break :blk arc_hasher.finalResult(); + }; + var hash_buf: [4 + 2 * calculated_hash.len]u8 = undefined; const hash_str = try std.fmt.bufPrint(&hash_buf, "1220{}", .{std.fmt.fmtSliceHexLower(&calculated_hash)}); @@ -92,13 +108,13 @@ const Archive = struct { return if (mod > 0) 512 - mod else 0; } - pub fn entry_should_be_skipped(path: []const u8) !bool { - var it = try std.fs.path.componentIterator(path); - const first = it.next().?; - return std.mem.eql(u8, first.name, ".git") or - std.mem.eql(u8, first.name, "zig-out") or - std.mem.eql(u8, first.name, "zig-cache"); - } + // pub fn entry_should_be_skipped(path: []const u8) !bool { + // var it = try std.fs.path.componentIterator(path); + // const first = it.next().?; + // return std.mem.eql(u8, first.name, ".git") or + // std.mem.eql(u8, first.name, "zig-out") or + // std.mem.eql(u8, first.name, "zig-cache"); + // } fn stripComponents(path: []const u8, count: u32) ![]const u8 { var i: usize = 0; @@ -240,35 +256,4 @@ const Archive = struct { return (mode & std.os.S.IXUSR) != 0; } } - - pub fn hash( - archive: Archive, - allocator: Allocator, - executable_bit: WhatToDoWithExecutableBit, - ) ![Hash.digest_length]u8 { - var paths = std.ArrayList([]const u8).init(allocator); - defer paths.deinit(); - - var hashes = std.ArrayList([Hash.digest_length]u8).init(allocator); - defer hashes.deinit(); - - try paths.appendSlice(archive.files.keys()); - try hashes.appendNTimes(undefined, paths.items.len); - std.mem.sort([]const u8, paths.items, {}, path_less_than); - - for (paths.items, hashes.items) |path, *result| { - const file = archive.files.get(path).?; - var hasher = Hash.init(.{}); - hasher.update(path); - hasher.update(&.{ 0, @intFromBool(is_executable(file.mode, executable_bit)) }); - hasher.update(file.text); - hasher.final(result); - } - - var hasher = Hash.init(.{}); - for (hashes.items) |file_hash| - hasher.update(&file_hash); - - return hasher.finalResult(); - } }; diff --git a/tools/bundle.py b/tools/bundle.py index 47761c10c..e00cda07f 100755 --- a/tools/bundle.py +++ b/tools/bundle.py @@ -16,6 +16,8 @@ from enum import Enum as StrEnum import pathspec import stat +import tarfile + from marshmallow import fields as mm_fields from typing import Optional, Any @@ -26,7 +28,8 @@ "zig", "git", ] -DEPLOYMENT_BASE="https://download.microzig.tech/packages" +# DEPLOYMENT_BASE="https://download.microzig.tech/packages" +DEPLOYMENT_BASE="https://public.devspace.random-projects.net" REPO_ROOT = Path(__file__).parent.parent assert REPO_ROOT.is_dir() @@ -300,13 +303,17 @@ def main(): pkg.package_dir = pkg_dir - if pkg.package_type == PackageType.core: + + if pkg.package_type == PackageType.build: pkg.out_rel_dir = PurePosixPath(".") pkg.out_basename = pkg.package_name - - elif pkg.package_type == PackageType.build: + + elif pkg.package_type == PackageType.core: pkg.out_rel_dir = PurePosixPath(".") pkg.out_basename = pkg.package_name + + # Implicit dependencies: + pkg.inner_dependencies.add("microzig-build") # core requires the build types elif pkg.package_type == PackageType.board_support: parsed_pkg_name = PurePosixPath(pkg.package_name) @@ -314,7 +321,9 @@ def main(): pkg.out_rel_dir = "board-support" / parsed_pkg_name.parent pkg.out_basename = parsed_pkg_name.name - pkg.inner_dependencies.add("microzig-core") # BSPs implicitly depend on the core "microzig" package + # Implicit dependencies: + pkg.inner_dependencies.add("microzig-build") # BSPs also require build types + pkg.inner_dependencies.add("microzig-core") # but also the core types (?) else: assert False @@ -373,7 +382,7 @@ def main(): pkg_cache_dir.mkdir(exist_ok=True) meta_path = pkg_dir / "microzig-package.json" - pkg_zon_file = pkg_cache_dir / "build.zig.zon" + pkg_zon_file = pkg_cache_dir / pkg_dir.name / "build.zig.zon" out_rel_dir: PurePosixPath = pkg.out_rel_dir out_basename: str = pkg.out_basename @@ -383,9 +392,9 @@ def main(): "zig", "build-exe", f"{REPO_ROOT}/tools/extract-bsp-info.zig" , "--cache-dir", f"{REPO_ROOT}/zig-cache", - "--deps", "bsp,microzig", - "--mod", f"bsp:microzig:{pkg_dir}/build.zig", - "--mod", f"microzig:uf2:{REPO_ROOT}/core/build.zig", + "--deps", "bsp,microzig-build", + "--mod", f"bsp:microzig-build:{pkg_dir}/build.zig", + "--mod", f"microzig-build:uf2:{REPO_ROOT}/build/build.zig", "--mod", f"uf2::{REPO_ROOT}/tools/lib/dummy_uf2.zig", "--name", "extract-bsp-info", cwd=pkg_cache_dir, @@ -440,7 +449,8 @@ def main(): print() # tar -cf "${out_tar}" $(git ls-files -- . ':!:microzig-package.json') - execute("tar", "-cf", out_file_tar, "--hard-dereference", *package_files, cwd=pkg_dir) + + execute("tar", "-cf", out_file_tar, "--hard-dereference", *( f"{pkg_dir.name}/{file}" for file in package_files), cwd=pkg_dir.parent) zon_data = slurp( tools["create_pkg_descriptor"], @@ -448,12 +458,14 @@ def main(): input=PackageConfigurationSchema.dumps(evaluation_ordered_packages, many=True ).encode(), ) + pkg_zon_file.parent.mkdir(exist_ok=True) + with pkg_zon_file.open("wb") as f: f.write(zon_data) slurp("zig", "fmt", pkg_zon_file) # slurp the message away - execute("tar", "-rf", out_file_tar, "--hard-dereference", pkg_zon_file.name, cwd=pkg_zon_file.parent) + execute("tar", "-rf", out_file_tar, "--hard-dereference", f"{pkg_zon_file.parent.name}/{pkg_zon_file.name}", cwd=pkg_zon_file.parent.parent) # tar --list --file "${out_tar}" > "${pkg_cache_dir}/contents.list" diff --git a/tools/create-pkg-descriptor.zig b/tools/create-pkg-descriptor.zig index d41abeb61..70985d8bc 100644 --- a/tools/create-pkg-descriptor.zig +++ b/tools/create-pkg-descriptor.zig @@ -127,7 +127,7 @@ pub fn main() !void { try renderDep( stdout, - "microzig", + dep_name, dep.download_url.?, dep.package.?.hash, ); diff --git a/tools/extract-bsp-info.zig b/tools/extract-bsp-info.zig index 9d83f7db5..b0f562732 100644 --- a/tools/extract-bsp-info.zig +++ b/tools/extract-bsp-info.zig @@ -5,7 +5,7 @@ const std = @import("std"); const bsp = @import("bsp"); -const microzig = @import("microzig"); +const microzig = @import("microzig-build"); const JsonTarget = struct { id: []const u8, diff --git a/tools/patch-build-zon.py b/tools/patch-build-zon.py new file mode 100755 index 000000000..85cc96264 --- /dev/null +++ b/tools/patch-build-zon.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 +# +# Hacky auto-patcher to update dependencies in examples. +# +# Receives a **formatted(!)** build.zig.zon that requires ".url" and ".hash" to be written in that order on different lines. +# + +import sys +import json +from urllib.parse import urlparse, urlunparse +from urllib.request import urlopen +from pathlib import Path, PurePosixPath +import re + + +def main(): + + build_zig_zon = Path(sys.argv[1]) + assert build_zig_zon.is_file() + + input_lines = build_zig_zon.read_text().splitlines() + + output_lines = [] + + last_pkg_url: urllib.parse.ParseResult = None + for line in input_lines: + + stripped = line.strip() + if stripped.startswith(".url = \""): + + match = re.match('\s*\.url\s*=\s*"([^"]+)",', line) + + urlstr = match.group(1) + + last_pkg_url = urlparse(urlstr) + + output_lines.append(line) + + elif stripped.startswith(".hash = \""): + try: + pkg_path = PurePosixPath(last_pkg_url.path) + assert pkg_path.suffixes == ['.tar', '.gz'] + pkg_json_url = urlunparse( + # scheme, netloc, url, params, query, fragment + ( + last_pkg_url.scheme, # scheme + last_pkg_url.netloc, # netloc + pkg_path.with_suffix("").with_suffix(".json").as_posix(), # url + last_pkg_url.params, # params + last_pkg_url.query, # query + last_pkg_url.fragment, # fragment + ) + ) + + metadata = json.loads(urlopen(pkg_json_url).read()) + + pkg_hash = metadata["package"]["hash"] + + line_prefix = re.match("^(\s*)", line).group(1) + + output_lines.append(f'{line_prefix}.hash = "{pkg_hash}",') + last_pkg_url = None + + + except BaseException as ex: + print(ex) + output_lines.append(line) + else: + output_lines.append(line) + + build_zig_zon.write_text("\n".join(output_lines)) + +if __name__ == "__main__": + main() \ No newline at end of file From 99e8d09cf0a7e17ff04ba2958f0f3fd5aefb597e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Sat, 20 Jan 2024 12:23:41 +0100 Subject: [PATCH 261/286] Adds auto-discovery of BSPs. --- board-support/espressif-esp/build.zig | 5 +- board-support/gigadevice-gd32/build.zig | 9 +- board-support/microchip-atsam/build.zig | 5 +- board-support/microchip-avr/build.zig | 9 +- board-support/nordic-nrf5x/build.zig | 2 + board-support/nxp-lpc/build.zig | 2 + board-support/raspberrypi-rp2040/build.zig | 2 + board-support/stmicro-stm32/build.zig | 32 +- build/build.zig | 205 +++-- core/build.zig | 837 --------------------- examples/next-gen/build.zig | 5 - examples/next-gen/build.zig.zon | 8 +- tools/extract-bsp-info.zig | 29 +- 13 files changed, 193 insertions(+), 957 deletions(-) diff --git a/board-support/espressif-esp/build.zig b/board-support/espressif-esp/build.zig index d1b62ccf5..ebc95c749 100644 --- a/board-support/espressif-esp/build.zig +++ b/board-support/espressif-esp/build.zig @@ -1,4 +1,7 @@ const std = @import("std"); +const MicroZig = @import("microzig-build"); + +pub const microzig_board_support = MicroZig.registerBoardSupport(@This()); fn path(comptime suffix: []const u8) std.Build.LazyPath { return .{ @@ -26,7 +29,7 @@ const hal = .{ }; pub const chips = struct { - pub const esp32_c3 = .{ + pub const esp32_c3 = MicroZig.Target{ .preferred_format = .bin, // TODO: Exchange FLAT format with .esp format .chip = .{ .name = "ESP32-C3", diff --git a/board-support/gigadevice-gd32/build.zig b/board-support/gigadevice-gd32/build.zig index 61f41a4ca..7b13e1a0e 100644 --- a/board-support/gigadevice-gd32/build.zig +++ b/board-support/gigadevice-gd32/build.zig @@ -1,4 +1,7 @@ const std = @import("std"); +const MicroZig = @import("microzig-build"); + +pub const microzig_board_support = MicroZig.registerBoardSupport(@This()); fn path(comptime suffix: []const u8) std.Build.LazyPath { return .{ @@ -11,7 +14,7 @@ const hal = .{ }; pub const chips = struct { - pub const gd32vf103xb = .{ + pub const gd32vf103xb = MicroZig.Target{ .preferred_format = .elf, .chip = .{ .name = "GD32VF103", @@ -27,7 +30,7 @@ pub const chips = struct { .hal = hal, }; - pub const gd32vf103x8 = .{ + pub const gd32vf103x8 = MicroZig.Target{ .preferred_format = .elf, .chip = .{ .name = "GD32VF103", @@ -46,7 +49,7 @@ pub const chips = struct { pub const boards = struct { pub const sipeed = struct { - pub const longan_nano = .{ + pub const longan_nano = MicroZig.Target{ .preferred_format = .elf, .chip = chips.gd32vf103xb.chip, .hal = hal, diff --git a/board-support/microchip-atsam/build.zig b/board-support/microchip-atsam/build.zig index d9dbf958e..77010ee55 100644 --- a/board-support/microchip-atsam/build.zig +++ b/board-support/microchip-atsam/build.zig @@ -1,4 +1,7 @@ const std = @import("std"); +const MicroZig = @import("microzig-build"); + +pub const microzig_board_support = MicroZig.registerBoardSupport(@This()); pub fn build(b: *std.Build) void { _ = b; @@ -27,7 +30,7 @@ pub const chip_atsamd51j19 = .{ }; pub const chips = struct { - pub const atsamd51j19 = .{ + pub const atsamd51j19 = MicroZig.Target{ .preferred_format = .elf, .chip = chip_atsamd51j19, }; diff --git a/board-support/microchip-avr/build.zig b/board-support/microchip-avr/build.zig index 19ba0769f..650d54b35 100644 --- a/board-support/microchip-avr/build.zig +++ b/board-support/microchip-avr/build.zig @@ -1,4 +1,7 @@ const std = @import("std"); +const MicroZig = @import("microzig-build"); + +pub const microzig_board_support = MicroZig.registerBoardSupport(@This()); fn path(comptime suffix: []const u8) std.Build.LazyPath { return .{ @@ -11,7 +14,7 @@ const hal = .{ }; pub const chips = struct { - pub const atmega328p = .{ + pub const atmega328p = MicroZig.Target{ .preferred_format = .hex, .chip = .{ .name = "ATmega328P", @@ -31,7 +34,7 @@ pub const chips = struct { pub const boards = struct { pub const arduino = struct { - pub const nano = .{ + pub const nano = MicroZig.Target{ .preferred_format = .hex, .chip = chips.atmega328p.chip, .hal = hal, @@ -42,7 +45,7 @@ pub const boards = struct { }, }; - pub const uno_rev3 = .{ + pub const uno_rev3 = MicroZig.Target{ .preferred_format = .hex, .chip = chips.atmega328p.chip, .hal = hal, diff --git a/board-support/nordic-nrf5x/build.zig b/board-support/nordic-nrf5x/build.zig index 9bc2b7882..445bae7b3 100644 --- a/board-support/nordic-nrf5x/build.zig +++ b/board-support/nordic-nrf5x/build.zig @@ -1,6 +1,8 @@ const std = @import("std"); const MicroZig = @import("microzig-build"); +pub const microzig_board_support = MicroZig.registerBoardSupport(@This()); + fn path(comptime suffix: []const u8) std.Build.LazyPath { return .{ .cwd_relative = comptime ((std.fs.path.dirname(@src().file) orelse ".") ++ suffix), diff --git a/board-support/nxp-lpc/build.zig b/board-support/nxp-lpc/build.zig index 5f75d436a..b17678ec8 100644 --- a/board-support/nxp-lpc/build.zig +++ b/board-support/nxp-lpc/build.zig @@ -1,6 +1,8 @@ const std = @import("std"); const MicroZig = @import("microzig-build"); +pub const microzig_board_support = MicroZig.registerBoardSupport(@This()); + fn path(comptime suffix: []const u8) std.Build.LazyPath { return .{ .cwd_relative = comptime ((std.fs.path.dirname(@src().file) orelse ".") ++ suffix), diff --git a/board-support/raspberrypi-rp2040/build.zig b/board-support/raspberrypi-rp2040/build.zig index 73453f343..3e0d5344d 100644 --- a/board-support/raspberrypi-rp2040/build.zig +++ b/board-support/raspberrypi-rp2040/build.zig @@ -1,6 +1,8 @@ const std = @import("std"); const microzig = @import("microzig-build"); +pub const microzig_board_support = microzig.registerBoardSupport(@This()); + fn root() []const u8 { return comptime (std.fs.path.dirname(@src().file) orelse "."); } diff --git a/board-support/stmicro-stm32/build.zig b/board-support/stmicro-stm32/build.zig index 4e0e0d541..b843537c4 100644 --- a/board-support/stmicro-stm32/build.zig +++ b/board-support/stmicro-stm32/build.zig @@ -1,5 +1,7 @@ const std = @import("std"); -const microzig = @import("microzig-build"); +const MicroZig = @import("microzig-build"); + +pub const microzig_board_support = MicroZig.registerBoardSupport(@This()); fn root() []const u8 { return comptime (std.fs.path.dirname(@src().file) orelse "."); @@ -18,7 +20,7 @@ pub fn build(b: *std.Build) !void { } pub const chips = struct { - pub const stm32f103x8 = .{ + pub const stm32f103x8 = MicroZig.Target{ .preferred_format = .elf, .chip = .{ .name = "STM32F103", @@ -36,7 +38,7 @@ pub const chips = struct { }, }; - pub const stm32f303vc = .{ + pub const stm32f303vc = MicroZig.Target{ .preferred_format = .elf, .chip = .{ .name = "STM32F303", @@ -51,7 +53,7 @@ pub const chips = struct { }, }; - pub const stm32f407vg = .{ + pub const stm32f407vg = MicroZig.Target{ .preferred_format = .elf, .chip = .{ .name = "STM32F407", @@ -67,7 +69,7 @@ pub const chips = struct { }, }; - pub const stm32f429zit6u = .{ + pub const stm32f429zit6u = MicroZig.Target{ .preferred_format = .elf, .chip = .{ .name = "STM32F429", @@ -85,8 +87,8 @@ pub const chips = struct { // All STM32L0x1 series MCUs differ only in memory size. So we create a comptime function // to generate all MCU variants as per https://www.st.com/en/microcontrollers-microprocessors/stm32l0x1.html - fn stm32l0x1(comptime rom_size: u64, comptime ram_size: u64) microzig.Target { - return microzig.Target{ + fn stm32l0x1(comptime rom_size: u64, comptime ram_size: u64) MicroZig.Target { + return MicroZig.Target{ .preferred_format = .elf, .chip = .{ .name = "STM32L0x1", @@ -123,8 +125,8 @@ pub const chips = struct { // All STM32L0x2 series MCUs differ only in memory size. So we create a comptime function // to generate all MCU variants as per https://www.st.com/en/microcontrollers-microprocessors/stm32l0x2.html - fn stm32l0x2(comptime rom_size: u64, comptime ram_size: u64) microzig.Target { - return microzig.Target{ + fn stm32l0x2(comptime rom_size: u64, comptime ram_size: u64) MicroZig.Target { + return MicroZig.Target{ .preferred_format = .elf, .chip = .{ .name = "STM32L0x2", @@ -154,8 +156,8 @@ pub const chips = struct { // All STM32L0x2 series MCUs differ only in memory size. So we create a comptime function // to generate all MCU variants as per https://www.st.com/en/microcontrollers-microprocessors/stm32l0x3.html - fn stm32l0x3(comptime rom_size: u64, comptime ram_size: u64) microzig.Target { - return microzig.Target{ + fn stm32l0x3(comptime rom_size: u64, comptime ram_size: u64) MicroZig.Target { + return MicroZig.Target{ .preferred_format = .elf, .chip = .{ .name = "STM32L0x3", @@ -187,7 +189,7 @@ pub const chips = struct { }; pub const boards = struct { - pub const stm32f3discovery = .{ + pub const stm32f3discovery = MicroZig.Target{ .preferred_format = .elf, .chip = chips.stm32f303vc.chip, .board = .{ @@ -196,7 +198,7 @@ pub const boards = struct { }, }; - pub const stm32f4discovery = .{ + pub const stm32f4discovery = MicroZig.Target{ .preferred_format = .elf, .chip = chips.stm32f407vg.chip, .board = .{ @@ -205,7 +207,7 @@ pub const boards = struct { }, }; - pub const stm3240geval = .{ + pub const stm3240geval = MicroZig.Target{ .preferred_format = .elf, .chip = chips.stm32f407vg.chip, .board = .{ @@ -214,7 +216,7 @@ pub const boards = struct { }, }; - pub const stm32f429idiscovery = .{ + pub const stm32f429idiscovery = MicroZig.Target{ .preferred_format = .elf, .chip = chips.stm32f429zit6u.chip, .board = .{ diff --git a/build/build.zig b/build/build.zig index 2c6df508b..67c16e24b 100644 --- a/build/build.zig +++ b/build/build.zig @@ -9,10 +9,131 @@ const uf2 = @import("uf2"); // MicroZig Gen 3 Interface // //////////////////////////////////////// -pub const EnvironmentInfo = struct { - /// include package names of your board support packages here: - board_support: []const []const u8, +pub const BoardSupportPackageDefinition = struct { + pub const TargetDefinition = struct { + id: []const u8, // full "uri" + target: Target, + }; + + bsp_root: type, + targets: []const TargetDefinition, + + fn init(comptime bsp_root: type) BoardSupportPackageDefinition { + var targets: []const TargetDefinition = &.{}; + + if (@hasDecl(bsp_root, "chips")) { + targets = targets ++ construct_target_database("chip:", bsp_root.chips); + } + + if (@hasDecl(bsp_root, "boards")) { + targets = targets ++ construct_target_database("board:", bsp_root.boards); + } + + if (targets.len == 0) { + @compileError("Board support package contains not a single target. Please add at least one target!"); + } + + return BoardSupportPackageDefinition{ + .bsp_root = bsp_root, + .targets = targets, + }; + } + + fn construct_target_database(comptime prefix: []const u8, comptime namespace: type) []const TargetDefinition { + var list: []const TargetDefinition = &.{}; + + inline for (@typeInfo(namespace).Struct.decls) |decl_info| { + const decl = @field(namespace, decl_info.name); + const T = @TypeOf(decl); + + const name = comptime prefix ++ decl_info.name; // board:vendor/name + + if (T == Target) { + const target: Target = decl; + + list = list ++ &[_]TargetDefinition{.{ + .id = name, + .target = target, + }}; + // be.targets.put(be.host_build.allocator, name, target) catch @panic("out of memory"); + } else { + if (T != type) { + @compileError(std.fmt.comptimePrint("Declaration {s} is neither a MicroZig.Target nor a namespace. Expected declaration to be a 'type', found {s}.", .{ + name, + @typeName(T), + })); + } + + const ti = @typeInfo(decl); + if (ti != .Struct) { + @compileError(std.fmt.comptimePrint("Declaration {s} is neither a MicroZig.Target nor a namespace. Expected declaration to be a 'struct', found {s}.", .{ + name, + @tagName(ti), + })); + } + + if (ti.Struct.fields.len > 0) { + @compileError(std.fmt.comptimePrint("Declaration {s} is neither a MicroZig.Target nor a namespace. Expected declaration to have no fields, but found {} fields.", .{ + name, + ti.Struct.fields.len, + })); + } + + const sublist = construct_target_database( + comptime name ++ "/", + decl, + ); + + list = list ++ sublist; + } + } + + return list; + } +}; + +/// Validates a board support package and returns a registration type that can be used +/// with MicroZig automatic BSP discovery. +/// +/// Store the return value into a public constant named "" at the root of your build script: +/// +/// pub const microzig_board_support = microzig.registerBoardSupport(@This()); +/// +pub fn registerBoardSupport(comptime bsp_root: type) BoardSupportPackageDefinition { + return BoardSupportPackageDefinition.init(bsp_root); +} + +const ImportedBSP = struct { + import_name: []const u8, + bsp: BoardSupportPackageDefinition, +}; + +fn get_declared_bsps() []const ImportedBSP { + + // Keep in sync with the logic from Build.zig:dependency + const build_runner = @import("root"); + const deps = build_runner.dependencies; + + var bsps: []const ImportedBSP = &.{}; + inline for (@typeInfo(deps.imports).Struct.decls) |decl| { + if (comptime std.mem.indexOfScalar(u8, decl.name, '.') == null) { + const maybe_bsp = @field(deps.imports, decl.name); + + if (@hasDecl(maybe_bsp, "microzig_board_support")) { + const bsp = @field(maybe_bsp, "microzig_board_support"); + if (@TypeOf(bsp) == BoardSupportPackageDefinition) { + bsps = bsps ++ [_]ImportedBSP{.{ + .import_name = decl.name, + .bsp = bsp, + }}; + } + } + } + } + return bsps; +} +pub const EnvironmentInfo = struct { /// package name of the build package (optional) self: []const u8 = "microzig", @@ -21,93 +142,37 @@ pub const EnvironmentInfo = struct { }; pub fn createBuildEnvironment(b: *std.Build, comptime info: EnvironmentInfo) *BuildEnvironment { + const available_bsps = comptime get_declared_bsps(); + const be = b.allocator.create(BuildEnvironment) catch @panic("out of memory"); be.* = BuildEnvironment{ .host_build = b, .self = undefined, .microzig_core = undefined, - .board_support_packages = b.allocator.alloc(BoardSupportPackage, info.board_support.len) catch @panic("out of memory"), + .board_support_packages = b.allocator.alloc(BoardSupportPackage, available_bsps.len) catch @panic("out of memory"), .targets = .{}, }; be.self = b.dependency(info.self, .{}); be.microzig_core = b.dependency(info.core, .{}); - for (be.board_support_packages, info.board_support) |*out, in| { - out.* = BoardSupportPackage{ - .name = in, - .dep = b.dependency(in, .{}), + inline for (be.board_support_packages, available_bsps) |*bsp, def| { + bsp.* = BoardSupportPackage{ + .name = def.import_name, + .dep = b.dependency(def.import_name, .{}), }; - } - // Fetch and collect all supported targets: - inline for (info.board_support) |bsp_name| { - // Keep in sync with the logic from Build.zig:dependency - const build_runner = @import("root"); - const deps = build_runner.dependencies; + for (def.bsp.targets) |tgt| { + const full_name = b.fmt("{s}#{s}", .{ tgt.id, def.import_name }); - const bsp_root = @field(deps.imports, bsp_name); - - if (@hasDecl(bsp_root, "chips")) { - fetch_microzig_targets("chip:", bsp_root.chips, bsp_name, be); - } - - if (@hasDecl(bsp_root, "boards")) { - fetch_microzig_targets("board:", bsp_root.boards, bsp_name, be); + be.targets.put(be.host_build.allocator, tgt.id, tgt.target) catch @panic("out of memory"); + be.targets.put(be.host_build.allocator, full_name, tgt.target) catch @panic("out of memory"); } } return be; } -fn fetch_microzig_targets(comptime prefix: []const u8, comptime namespace: type, comptime bsp_name: []const u8, be: *BuildEnvironment) void { - inline for (@typeInfo(namespace).Struct.decls) |decl_info| { - const decl = @field(namespace, decl_info.name); - const T = @TypeOf(decl); - - const name = comptime prefix ++ decl_info.name; // board:vendor/name - const full_name = comptime name ++ "#" ++ bsp_name; // board:vendor/name#bsp-package-name - - if (T == Target) { - const target: Target = decl; - - be.targets.put(be.host_build.allocator, name, target) catch @panic("out of memory"); - be.targets.put(be.host_build.allocator, full_name, target) catch @panic("out of memory"); - } else { - const ok = blk: { - if (comptime T != type) { - // @compileLog(full_name, "check 1:", T, decl); - break :blk false; - } - - const ti = @typeInfo(decl); - if (comptime ti != .Struct) { - // @compileLog(full_name, "check 2:", ti); - break :blk false; - } - - if (comptime ti.Struct.fields.len > 0) { - // @compileLog(full_name, "check 3:", ti.Struct); - // @compileLog(full_name, "check 3:", ti.Struct.fields); - break :blk false; - } - - fetch_microzig_targets( - comptime name ++ "/", - decl, - bsp_name, - be, - ); - - break :blk true; - }; - if (!ok) { - std.debug.print("Bad BSP: {s} is neither namespace nor a microzig.Target\n", .{ prefix, full_name }); - } - } - } -} - pub const BoardSupportPackage = struct { dep: *std.Build.Dependency, name: []const u8, diff --git a/core/build.zig b/core/build.zig index 1768f5133..033709021 100644 --- a/core/build.zig +++ b/core/build.zig @@ -4,35 +4,12 @@ const std = @import("std"); const microbuild = @import("microzig-build"); -// const uf2 = @import("uf2"); - -//////////////////////////////////////// -// MicroZig Gen 2 Interface // -//////////////////////////////////////// fn root() []const u8 { return comptime (std.fs.path.dirname(@src().file) orelse "."); } const build_root = root(); -// const MicroZig = @This(); - -// b: *std.Build, -// self: *std.Build.Dependency, - -// /// Creates a new instance of the MicroZig build support. -// /// -// /// This is necessary as we need to keep track of some internal state to prevent -// /// duplicated work per firmware built. -// pub fn init(b: *std.Build, dependency_name: []const u8) *MicroZig { -// const mz = b.allocator.create(MicroZig) catch @panic("out of memory"); -// mz.* = MicroZig{ -// .b = b, -// .self = b.dependency(dependency_name, .{}), -// }; -// return mz; -// } - /// This build script validates usage patterns we expect from MicroZig pub fn build(b: *std.Build) !void { _ = b; @@ -98,684 +75,6 @@ pub fn build(b: *std.Build) !void { // test_step.dependOn(&b.addRunArtifact(core_tests).step); } -// /// The resulting binary format for the firmware file. -// /// A lot of embedded systems don't use plain ELF files, thus we provide means -// /// to convert the resulting ELF into other common formats. -// pub const BinaryFormat = union(enum) { -// /// [Executable and Linkable Format](https://en.wikipedia.org/wiki/Executable_and_Linkable_Format), the standard output from the compiler. -// elf, - -// /// A flat binary, contains only the loaded portions of the firmware with an unspecified base offset. -// bin, - -// /// The [Intel HEX](https://en.wikipedia.org/wiki/Intel_HEX) format, contains -// /// an ASCII description of what memory to load where. -// hex, - -// /// A [Device Firmware Upgrade](https://www.usb.org/sites/default/files/DFU_1.1.pdf) file. -// dfu, - -// /// The [USB Flashing Format (UF2)](https://github.com/microsoft/uf2) designed by Microsoft. -// uf2: uf2.FamilyId, - -// /// The [firmware format](https://docs.espressif.com/projects/esptool/en/latest/esp32/advanced-topics/firmware-image-format.html) used by the [esptool](https://github.com/espressif/esptool) bootloader. -// esp, - -// /// Custom option for non-standard formats. -// custom: *Custom, - -// /// Returns the standard extension for the resulting binary file. -// pub fn getExtension(format: BinaryFormat) []const u8 { -// return switch (format) { -// .elf => ".elf", -// .bin => ".bin", -// .hex => ".hex", -// .dfu => ".dfu", -// .uf2 => ".uf2", -// .esp => ".bin", - -// .custom => |c| c.extension, -// }; -// } - -// pub const Custom = struct { -// /// The standard extension of the format. -// extension: []const u8, - -// /// A function that will convert a given `elf` file into the custom output format. -// /// -// /// The `*Custom` format is passed so contextual information can be obtained by using -// /// `@fieldParentPtr` to provide access to tooling. -// convert: *const fn (*Custom, elf: std.Build.LazyPath) std.Build.LazyPath, -// }; - -// const Enum = std.meta.Tag(BinaryFormat); - -// const Context = struct { -// pub fn hash(self: @This(), fmt: BinaryFormat) u32 { -// _ = self; - -// var hasher = std.hash.XxHash32.init(0x1337_42_21); - -// hasher.update(@tagName(fmt)); - -// switch (fmt) { -// .elf, .bin, .hex, .dfu, .esp => |val| { -// if (@TypeOf(val) != void) @compileError("Missing update: Context.hash now requires special care!"); -// }, - -// .uf2 => |family_id| hasher.update(@tagName(family_id)), -// .custom => |custom| hasher.update(std.mem.asBytes(custom)), -// } - -// return hasher.final(); -// } - -// pub fn eql(self: @This(), fmt_a: BinaryFormat, fmt_b: BinaryFormat, index: usize) bool { -// _ = self; -// _ = index; -// if (@as(BinaryFormat.Enum, fmt_a) != @as(BinaryFormat.Enum, fmt_b)) -// return false; - -// return switch (fmt_a) { -// .elf, .bin, .hex, .dfu, .esp => |val| { -// if (@TypeOf(val) != void) @compileError("Missing update: Context.eql now requires special care!"); -// return true; -// }, - -// .uf2 => |a| (a == fmt_b.uf2), -// .custom => |a| (a == fmt_b.custom), -// }; -// } -// }; -// }; - -// /// The CPU model a target uses. -// /// -// /// The CPUs usually require special care on how to do interrupts, and getting an entry point. -// /// -// /// MicroZig officially only supports the CPUs listed here, but other CPUs might be provided -// /// via the `custom` field. -// pub const CpuModel = union(enum) { -// avr5, -// cortex_m0, -// cortex_m0plus, -// cortex_m3, -// cortex_m4, -// riscv32_imac, - -// custom: *const Cpu, - -// pub fn getDescriptor(model: CpuModel) *const Cpu { -// return switch (@as(std.meta.Tag(CpuModel), model)) { -// inline else => |tag| &@field(cpus, @tagName(tag)), -// .custom => model.custom, -// }; -// } -// }; - -// /// A cpu descriptor. -// pub const Cpu = struct { -// /// Display name of the CPU. -// name: []const u8, - -// /// Source file providing startup code and memory initialization routines. -// source_file: std.build.LazyPath, - -// /// The compiler target we use to compile all the code. -// target: std.zig.CrossTarget, -// }; - -// /// A descriptor for memory regions in a microcontroller. -// pub const MemoryRegion = struct { -// /// The type of the memory region for generating a proper linker script. -// kind: Kind, -// offset: u64, -// length: u64, - -// pub const Kind = union(enum) { -// /// This is a (normally) immutable memory region where the code is stored. -// flash, - -// /// This is a mutable memory region for data storage. -// ram, - -// /// This is a memory region that maps MMIO devices. -// io, - -// /// This is a memory region that exists, but is reserved and must not be used. -// reserved, - -// /// This is a memory region used for internal linking tasks required by the board support package. -// private: PrivateRegion, -// }; - -// pub const PrivateRegion = struct { -// /// The name of the memory region. Will not have an automatic numeric counter and must be unique. -// name: []const u8, - -// /// Is the memory region executable? -// executable: bool, - -// /// Is the memory region readable? -// readable: bool, - -// /// Is the memory region writable? -// writeable: bool, -// }; -// }; - -// /// Defines a custom microcontroller. -// pub const Chip = struct { -// /// The display name of the controller. -// name: []const u8, - -// /// (optional) link to the documentation/vendor page of the controller. -// url: ?[]const u8 = null, - -// /// The cpu model this controller uses. -// cpu: CpuModel, - -// /// The provider for register definitions. -// register_definition: union(enum) { -// /// Use `regz` to create a zig file from a JSON schema. -// json: std.Build.LazyPath, - -// /// Use `regz` to create a json file from a SVD schema. -// svd: std.Build.LazyPath, - -// /// Use `regz` to create a zig file from an ATDF schema. -// atdf: std.Build.LazyPath, - -// /// Use the provided file directly as the chip file. -// zig: std.Build.LazyPath, -// }, - -// /// The memory regions that are present in this chip. -// memory_regions: []const MemoryRegion, -// }; - -// /// Defines a hardware abstraction layer. -// pub const HardwareAbstractionLayer = struct { -// /// Root source file for this HAL. -// source_file: std.Build.LazyPath, -// }; - -// /// Provides a description of a board. -// /// -// /// Boards provide additional information to a chip and HAL package. -// /// For example, they can list attached peripherials, external crystal frequencies, -// /// flash sizes, ... -// pub const BoardDefinition = struct { -// /// Display name of the board -// name: []const u8, - -// /// (optional) link to the documentation/vendor page of the board. -// url: ?[]const u8 = null, - -// /// Provides the root file for the board definition. -// source_file: std.Build.LazyPath, -// }; - -// /// The linker script used to link the firmware. -// pub const LinkerScript = union(enum) { -// /// Auto-generated linker script derived from the memory regions of the chip. -// generated, - -// /// Externally defined linker script. -// source_file: std.build.LazyPath, -// }; - -// /// A compilation target for MicroZig. Provides information about the chip, -// /// hal, board and so on. -// /// -// /// This is used instead of `std.zig.CrossTarget` to define a MicroZig Firmware. -// pub const Target = struct { -// /// The preferred binary format of this MicroZig target. If `null`, the user must -// /// explicitly give the `.format` field during a call to `getEmittedBin()` or installation steps. -// preferred_format: ?BinaryFormat, - -// /// The chip this target uses, -// chip: Chip, - -// /// Usually, embedded projects are single-threaded and single-core applications. Platforms that -// /// support multiple CPUs should set this to `false`. -// single_threaded: bool = true, - -// /// Determines whether the compiler_rt package is bundled with the application or not. -// /// This should always be true except for platforms where compiler_rt cannot be built right now. -// bundle_compiler_rt: bool = true, - -// /// (optional) Provides a default hardware abstraction layer that is used. -// /// If `null`, no `microzig.hal` will be available. -// hal: ?HardwareAbstractionLayer = null, - -// /// (optional) Provides description of external hardware and connected devices -// /// like oscillators and such. -// /// -// /// This structure isn't used by MicroZig itself, but can be utilized from the HAL -// /// if present. -// board: ?BoardDefinition = null, - -// /// (optional) Provide a custom linker script for the hardware or define a custom generation. -// linker_script: LinkerScript = .generated, - -// /// (optional) Further configures the created firmware depending on the chip and/or board settings. -// /// This can be used to set/change additional properties on the created `*Firmware` object. -// configure: ?*const fn (host_build: *std.Build, *Firmware) void = null, - -// /// (optional) Post processing step that will patch up and modify the elf file if necessary. -// binary_post_process: ?*const fn (host_build: *std.Build, std.Build.LazyPath) std.Build.LazyPath = null, -// }; - -// /// Options to the `addFirmware` function. -// pub const FirmwareOptions = struct { -// /// The name of the firmware file. -// name: []const u8, - -// /// The MicroZig target that the firmware is built for. Either a board or a chip. -// target: Target, - -// /// The optimization level that should be used. Usually `ReleaseSmall` or `Debug` is a good choice. -// /// Also using `std.Build.standardOptimizeOption` is a good idea. -// optimize: std.builtin.OptimizeMode, - -// /// The root source file for the application. This is your `src/main.zig` file. -// source_file: std.Build.LazyPath, - -// // Overrides: - -// /// If set, overrides the `single_threaded` property of the target. -// single_threaded: ?bool = null, - -// /// If set, overrides the `bundle_compiler_rt` property of the target. -// bundle_compiler_rt: ?bool = null, - -// /// If set, overrides the `hal` property of the target. -// hal: ?HardwareAbstractionLayer = null, - -// /// If set, overrides the `board` property of the target. -// board: ?BoardDefinition = null, - -// /// If set, overrides the `linker_script` property of the target. -// linker_script: ?LinkerScript = null, -// }; - -// /// Declares a new MicroZig firmware file. -// pub fn addFirmware( -// /// The MicroZig instance that should be used to create the firmware. -// mz: *MicroZig, -// /// The instance of the `build.zig` that is calling this function. -// host_build: *std.Build, -// /// Options that define how the firmware is built. -// options: FirmwareOptions, -// ) *Firmware { -// const micro_build = mz.self.builder; - -// const chip = &options.target.chip; -// const cpu = chip.cpu.getDescriptor(); -// const maybe_hal = options.hal orelse options.target.hal; -// const maybe_board = options.board orelse options.target.board; - -// const linker_script = options.linker_script orelse options.target.linker_script; - -// // TODO: let the user override which ram section to use the stack on, -// // for now just using the first ram section in the memory region list -// const first_ram = blk: { -// for (chip.memory_regions) |region| { -// if (region.kind == .ram) -// break :blk region; -// } else @panic("no ram memory region found for setting the end-of-stack address"); -// }; - -// // On demand, generate chip definitions via regz: -// const chip_source = switch (chip.register_definition) { -// .json, .atdf, .svd => |file| blk: { -// const regz_exe = mz.dependency("regz", .{ .optimize = .ReleaseSafe }).artifact("regz"); - -// const regz_gen = host_build.addRunArtifact(regz_exe); - -// regz_gen.addArg("--schema"); // Explicitly set schema type, one of: svd, atdf, json -// regz_gen.addArg(@tagName(chip.register_definition)); - -// regz_gen.addArg("--output_path"); // Write to a file -// const zig_file = regz_gen.addOutputFileArg("chip.zig"); - -// regz_gen.addFileArg(file); - -// break :blk zig_file; -// }, - -// .zig => |src| src, -// }; - -// const config = host_build.addOptions(); -// config.addOption(bool, "has_hal", (maybe_hal != null)); -// config.addOption(bool, "has_board", (maybe_board != null)); - -// config.addOption(?[]const u8, "board_name", if (maybe_board) |brd| brd.name else null); - -// config.addOption([]const u8, "chip_name", chip.name); -// config.addOption([]const u8, "cpu_name", chip.name); -// config.addOption(usize, "end_of_stack", first_ram.offset + first_ram.length); - -// const fw: *Firmware = host_build.allocator.create(Firmware) catch @panic("out of memory"); -// fw.* = Firmware{ -// .mz = mz, -// .host_build = host_build, -// .artifact = host_build.addExecutable(.{ -// .name = options.name, -// .optimize = options.optimize, -// .target = cpu.target, -// .linkage = .static, -// .root_source_file = .{ .cwd_relative = mz.self.builder.pathFromRoot("src/start.zig") }, -// }), -// .target = options.target, -// .output_files = Firmware.OutputFileMap.init(host_build.allocator), - -// .config = config, - -// .modules = .{ -// .microzig = micro_build.createModule(.{ -// .source_file = .{ .cwd_relative = micro_build.pathFromRoot("src/microzig.zig") }, -// .dependencies = &.{ -// .{ -// .name = "config", -// .module = micro_build.createModule(.{ .source_file = config.getSource() }), -// }, -// }, -// }), - -// .cpu = undefined, -// .chip = undefined, - -// .board = null, -// .hal = null, - -// .app = undefined, -// }, -// }; -// errdefer fw.output_files.deinit(); - -// fw.modules.chip = micro_build.createModule(.{ -// .source_file = chip_source, -// .dependencies = &.{ -// .{ .name = "microzig", .module = fw.modules.microzig }, -// }, -// }); -// fw.modules.microzig.dependencies.put("chip", fw.modules.chip) catch @panic("out of memory"); - -// fw.modules.cpu = micro_build.createModule(.{ -// .source_file = cpu.source_file, -// .dependencies = &.{ -// .{ .name = "microzig", .module = fw.modules.microzig }, -// }, -// }); -// fw.modules.microzig.dependencies.put("cpu", fw.modules.cpu) catch @panic("out of memory"); - -// if (maybe_hal) |hal| { -// fw.modules.hal = micro_build.createModule(.{ -// .source_file = hal.source_file, -// .dependencies = &.{ -// .{ .name = "microzig", .module = fw.modules.microzig }, -// }, -// }); -// fw.modules.microzig.dependencies.put("hal", fw.modules.hal.?) catch @panic("out of memory"); -// } - -// if (maybe_board) |brd| { -// fw.modules.board = micro_build.createModule(.{ -// .source_file = brd.source_file, -// .dependencies = &.{ -// .{ .name = "microzig", .module = fw.modules.microzig }, -// }, -// }); -// fw.modules.microzig.dependencies.put("board", fw.modules.board.?) catch @panic("out of memory"); -// } - -// fw.modules.app = host_build.createModule(.{ -// .source_file = options.source_file, -// .dependencies = &.{ -// .{ .name = "microzig", .module = fw.modules.microzig }, -// }, -// }); - -// const umm = mz.dependency("umm-zig", .{}).module("umm"); -// fw.modules.microzig.dependencies.put("umm", umm) catch @panic("out of memory"); - -// fw.artifact.addModule("app", fw.modules.app); -// fw.artifact.addModule("microzig", fw.modules.microzig); - -// fw.artifact.strip = false; // we always want debug symbols, stripping brings us no benefit on embedded -// fw.artifact.single_threaded = options.single_threaded orelse fw.target.single_threaded; -// fw.artifact.bundle_compiler_rt = options.bundle_compiler_rt orelse fw.target.bundle_compiler_rt; - -// switch (linker_script) { -// .generated => { -// fw.artifact.setLinkerScript( -// generateLinkerScript(host_build, chip.*) catch @panic("out of memory"), -// ); -// }, - -// .source_file => |source| { -// fw.artifact.setLinkerScriptPath(source); -// }, -// } - -// if (options.target.configure) |configure| { -// configure(host_build, fw); -// } - -// return fw; -// } - -// /// Configuration options for firmware installation. -// pub const InstallFirmwareOptions = struct { -// /// Overrides the output format for the binary. If not set, the standard preferred file format for the firmware target is used. -// format: ?BinaryFormat = null, -// }; - -// /// Adds a new dependency to the `install` step that will install the `firmware` into the folder `$prefix/firmware`. -// pub fn installFirmware( -// /// The MicroZig instance that was used to create the firmware. -// mz: *MicroZig, -// /// The instance of the `build.zig` that should perform installation. -// b: *std.Build, -// /// The firmware that should be installed. Please make sure that this was created with the same `MicroZig` instance as `mz`. -// firmware: *Firmware, -// /// Optional configuration of the installation process. Pass `.{}` if you're not sure what to do here. -// options: InstallFirmwareOptions, -// ) void { -// std.debug.assert(mz == firmware.mz); -// const install_step = addInstallFirmware(mz, b, firmware, options); -// b.getInstallStep().dependOn(&install_step.step); -// } - -// /// Creates a new `std.Build.Step.InstallFile` instance that will install the given firmware to `$prefix/firmware`. -// /// -// /// **NOTE:** This does not actually install the firmware yet. You have to add the returned step as a dependency to another step. -// /// If you want to just install the firmware, use `installFirmware` instead! -// pub fn addInstallFirmware( -// /// The MicroZig instance that was used to create the firmware. -// mz: *MicroZig, -// /// The instance of the `build.zig` that should perform installation. -// b: *std.Build, -// /// The firmware that should be installed. Please make sure that this was created with the same `MicroZig` instance as `mz`. -// firmware: *Firmware, -// /// Optional configuration of the installation process. Pass `.{}` if you're not sure what to do here. -// options: InstallFirmwareOptions, -// ) *std.Build.Step.InstallFile { -// const format = firmware.resolveFormat(options.format); - -// const basename = b.fmt("{s}{s}", .{ -// firmware.artifact.name, -// format.getExtension(), -// }); - -// _ = mz; - -// return b.addInstallFileWithDir(firmware.getEmittedBin(format), .{ .custom = "firmware" }, basename); -// } - -// /// Declaration of a firmware build. -// pub const Firmware = struct { -// const OutputFileMap = std.ArrayHashMap(BinaryFormat, std.Build.LazyPath, BinaryFormat.Context, false); - -// const Modules = struct { -// app: *std.Build.Module, -// cpu: *std.Build.Module, -// chip: *std.Build.Module, -// board: ?*std.Build.Module, -// hal: ?*std.Build.Module, -// microzig: *std.Build.Module, -// }; - -// // privates: -// mz: *MicroZig, -// host_build: *std.Build, -// target: Target, -// output_files: OutputFileMap, - -// // publics: - -// /// The artifact that is built by Zig. -// artifact: *std.Build.Step.Compile, - -// /// The options step that provides `microzig.config`. If you need custom configuration, you can add this here. -// config: *std.Build.Step.Options, - -// /// Declaration of the MicroZig modules used by this firmware. -// modules: Modules, - -// /// Path to the emitted elf file, if any. -// emitted_elf: ?std.Build.LazyPath = null, - -// /// Returns the emitted ELF file for this firmware. This is useful if you need debug information -// /// or want to use a debugger like Segger, ST-Link or similar. -// /// -// /// **NOTE:** This is similar, but not equivalent to `std.Build.Step.Compile.getEmittedBin`. The call on the compile step does -// /// not include post processing of the ELF files necessary by certain targets. -// pub fn getEmittedElf(firmware: *Firmware) std.Build.LazyPath { -// if (firmware.emitted_elf == null) { -// const raw_elf = firmware.artifact.getEmittedBin(); -// firmware.emitted_elf = if (firmware.target.binary_post_process) |binary_post_process| -// binary_post_process(firmware.host_build, raw_elf) -// else -// raw_elf; -// } -// return firmware.emitted_elf.?; -// } - -// /// Returns the emitted binary for this firmware. The file is either in the preferred file format for -// /// the target or in `format` if not null. -// /// -// /// **NOTE:** The file returned here is the same file that will be installed. -// pub fn getEmittedBin(firmware: *Firmware, format: ?BinaryFormat) std.Build.LazyPath { -// const actual_format = firmware.resolveFormat(format); - -// const gop = firmware.output_files.getOrPut(actual_format) catch @panic("out of memory"); -// if (!gop.found_existing) { -// const elf_file = firmware.getEmittedElf(); - -// const basename = firmware.host_build.fmt("{s}{s}", .{ -// firmware.artifact.name, -// actual_format.getExtension(), -// }); - -// gop.value_ptr.* = switch (actual_format) { -// .elf => elf_file, - -// .bin => blk: { -// const objcopy = firmware.host_build.addObjCopy(elf_file, .{ -// .basename = basename, -// .format = .bin, -// }); - -// break :blk objcopy.getOutput(); -// }, - -// .hex => blk: { -// const objcopy = firmware.host_build.addObjCopy(elf_file, .{ -// .basename = basename, -// .format = .hex, -// }); - -// break :blk objcopy.getOutput(); -// }, - -// .uf2 => |family_id| blk: { -// const uf2_exe = firmware.mz.dependency("uf2", .{ .optimize = .ReleaseSafe }).artifact("elf2uf2"); - -// const convert = firmware.host_build.addRunArtifact(uf2_exe); - -// convert.addArg("--family-id"); -// convert.addArg(firmware.host_build.fmt("0x{X:0>4}", .{@intFromEnum(family_id)})); - -// convert.addArg("--elf-path"); -// convert.addFileArg(elf_file); - -// convert.addArg("--output-path"); -// break :blk convert.addOutputFileArg(basename); -// }, - -// .dfu => buildConfigError(firmware.host_build, "DFU is not implemented yet. See https://github.com/ZigEmbeddedGroup/microzig/issues/145 for more details!", .{}), -// .esp => buildConfigError(firmware.host_build, "ESP firmware image is not implemented yet. See https://github.com/ZigEmbeddedGroup/microzig/issues/146 for more details!", .{}), - -// .custom => |generator| generator.convert(generator, elf_file), -// }; -// } -// return gop.value_ptr.*; -// } - -// pub const AppDependencyOptions = struct { -// depend_on_microzig: bool = false, -// }; - -// /// Adds a regular dependency to your application. -// pub fn addAppDependency(fw: *Firmware, name: []const u8, module: *std.Build.Module, options: AppDependencyOptions) void { -// if (options.depend_on_microzig) { -// module.dependencies.put("microzig", fw.modules.microzig) catch @panic("OOM"); -// } -// fw.modules.app.dependencies.put(name, module) catch @panic("OOM"); -// } - -// pub fn addIncludePath(fw: *Firmware, path: std.Build.LazyPath) void { -// fw.artifact.addIncludePath(path); -// } - -// pub fn addSystemIncludePath(fw: *Firmware, path: std.Build.LazyPath) void { -// fw.artifact.addSystemIncludePath(path); -// } - -// pub fn addCSourceFile(fw: *Firmware, source: std.Build.Step.Compile.CSourceFile) void { -// fw.artifact.addCSourceFile(source); -// } - -// pub fn addOptions(fw: *Firmware, module_name: []const u8, options: *std.Build.OptionsStep) void { -// fw.artifact.addOptions(module_name, options); -// fw.modules.app.dependencies.put( -// module_name, -// fw.host_build.createModule(.{ -// .source_file = options.getOutput(), -// }), -// ) catch @panic("OOM"); -// } - -// pub fn addObjectFile(fw: *Firmware, source: std.Build.LazyPath) void { -// fw.artifact.addObjectFile(source); -// } - -// fn resolveFormat(firmware: *Firmware, format: ?BinaryFormat) BinaryFormat { -// if (format) |fmt| return fmt; - -// if (firmware.target.preferred_format) |fmt| return fmt; - -// buildConfigError(firmware.host_build, "{s} has no preferred output format, please provide one in the `format` option.", .{ -// firmware.target.chip.name, -// }); -// } -// }; - pub const cpus = struct { pub const avr5 = microbuild.Cpu{ .name = "AVR5", @@ -843,139 +142,3 @@ pub const cpus = struct { }, }; }; - -// fn buildConfigError(b: *std.Build, comptime fmt: []const u8, args: anytype) noreturn { -// const msg = b.fmt(fmt, args); -// @panic(msg); -// } - -// fn dependency(mz: *MicroZig, name: []const u8, args: anytype) *std.Build.Dependency { -// return mz.self.builder.dependency(name, args); -// } - -// fn generateLinkerScript(b: *std.Build, chip: Chip) !std.Build.LazyPath { -// const cpu = chip.cpu.getDescriptor(); - -// var contents = std.ArrayList(u8).init(b.allocator); -// const writer = contents.writer(); -// try writer.print( -// \\/* -// \\ * This file was auto-generated by microzig -// \\ * -// \\ * Target CPU: {[cpu]s} -// \\ * Target Chip: {[chip]s} -// \\ */ -// \\ -// // This is not the "true" entry point, but there's no such thing on embedded platforms -// // anyways. This is the logical entrypoint that should be invoked when -// // stack, .data and .bss are set up and the CPU is ready to be used. -// \\ENTRY(microzig_main); -// \\ -// \\ -// , .{ -// .cpu = cpu.name, -// .chip = chip.name, -// }); - -// try writer.writeAll("MEMORY\n{\n"); -// { -// var counters = [4]usize{ 0, 0, 0, 0 }; -// for (chip.memory_regions) |region| { -// // flash (rx!w) : ORIGIN = 0x00000000, LENGTH = 512k - -// switch (region.kind) { -// .flash => { -// try writer.print(" flash{d} (rx!w)", .{counters[0]}); -// counters[0] += 1; -// }, - -// .ram => { -// try writer.print(" ram{d} (rw!x)", .{counters[1]}); -// counters[1] += 1; -// }, - -// .io => { -// try writer.print(" io{d} (rw!x)", .{counters[2]}); -// counters[2] += 1; -// }, - -// .reserved => { -// try writer.print(" reserved{d} (rw!x)", .{counters[3]}); -// counters[3] += 1; -// }, - -// .private => |custom| { -// try writer.print(" {s} (", .{custom.name}); -// if (custom.readable) try writer.writeAll("r"); -// if (custom.writeable) try writer.writeAll("w"); -// if (custom.executable) try writer.writeAll("x"); - -// if (!custom.readable or !custom.writeable or !custom.executable) { -// try writer.writeAll("!"); -// if (!custom.readable) try writer.writeAll("r"); -// if (!custom.writeable) try writer.writeAll("w"); -// if (!custom.executable) try writer.writeAll("x"); -// } -// try writer.writeAll(")"); -// }, -// } -// try writer.print(" : ORIGIN = 0x{X:0>8}, LENGTH = 0x{X:0>8}\n", .{ region.offset, region.length }); -// } -// } - -// try writer.writeAll("}\n\nSECTIONS\n{\n"); -// { -// try writer.writeAll( -// \\ .text : -// \\ { -// \\ KEEP(*(microzig_flash_start)) -// \\ *(.text*) -// \\ } > flash0 -// \\ -// \\ -// ); - -// switch (cpu.target.getCpuArch()) { -// .arm, .thumb => try writer.writeAll( -// \\ .ARM.exidx : { -// \\ *(.ARM.exidx* .gnu.linkonce.armexidx.*) -// \\ } >flash0 -// \\ -// \\ -// ), -// else => {}, -// } - -// try writer.writeAll( -// \\ .data : -// \\ { -// \\ microzig_data_start = .; -// \\ *(.rodata*) -// \\ *(.data*) -// \\ microzig_data_end = .; -// \\ } > ram0 AT> flash0 -// \\ -// \\ .bss (NOLOAD) : -// \\ { -// \\ microzig_bss_start = .; -// \\ *(.bss*) -// \\ microzig_bss_end = .; -// \\ } > ram0 -// \\ -// \\ microzig_data_load_start = LOADADDR(.data); -// \\ -// ); -// } -// try writer.writeAll("}\n"); - -// // TODO: Assert that the flash can actually hold all data! -// // try writer.writeAll( -// // \\ -// // \\ ASSERT( (SIZEOF(.text) + SIZEOF(.data) > LENGTH(flash0)), "Error: .text + .data is too large for flash!" ); -// // \\ -// // ); - -// const write = b.addWriteFiles(); - -// return write.add("linker.ld", contents.items); -// } diff --git a/examples/next-gen/build.zig b/examples/next-gen/build.zig index 37628be1a..0c3579e3f 100644 --- a/examples/next-gen/build.zig +++ b/examples/next-gen/build.zig @@ -5,11 +5,6 @@ pub fn build(b: *std.Build) void { const microzig = MicroZig.createBuildEnvironment(b, .{ .self = "microzig", // package name of the build package (optional) .core = "microzig-core", // package name of the core package (optional) - .board_support = &.{ - // package names for BSP packages: - "microzig-bsp-nxp", - "microzig-bsp-rp2040", - }, }); const optimize = b.standardOptimizeOption(.{}); diff --git a/examples/next-gen/build.zig.zon b/examples/next-gen/build.zig.zon index f9d6f771a..90539673b 100644 --- a/examples/next-gen/build.zig.zon +++ b/examples/next-gen/build.zig.zon @@ -4,19 +4,19 @@ .dependencies = .{ .microzig = .{ .url = "https://public.devspace.random-projects.net/microzig-build.tar.gz", - .hash = "122068db50e2a071cac3fc5b42d5cd2213ccb563986af60b941cb7af29b83df65b02", + .hash = "1220c87cc608598bdb4ae5ed6436c6fa3e126c57d3d1bbfaf01625c3af0c15da44e4", }, .@"microzig-core" = .{ .url = "https://public.devspace.random-projects.net/microzig-core.tar.gz", - .hash = "12202df033d2b967108b25b8e66d8c8abcf690348a24baa35474a28086170ff31e54", + .hash = "1220a37d914f0585bbaeba2bc4d4d15586bef310a6af340af87f0e13fde0b4ddfb1a", }, .@"microzig-bsp-nxp" = .{ .url = "https://public.devspace.random-projects.net/board-support/nxp/lpc.tar.gz", - .hash = "12201efd8d8b992caef770c87d78e6bd00bd73051bd1559bc342703f2e83650ef2f9", + .hash = "122040dc9467f6dac90a1376fff25350b2a5abd291904db7bea48a78db4f6e6dff13", }, .@"microzig-bsp-rp2040" = .{ .url = "https://public.devspace.random-projects.net/board-support/raspberrypi/rp2040.tar.gz", - .hash = "1220154cd3634d0f3286cd2fb727cce9af3f3ab166772065e3efe4f9577128f4c559", + .hash = "1220142a13e590252deb7667569bdd3f6147c5b461f6b0343a825079a7dd3a24dea9", }, }, } \ No newline at end of file diff --git a/tools/extract-bsp-info.zig b/tools/extract-bsp-info.zig index b0f562732..4c2b26091 100644 --- a/tools/extract-bsp-info.zig +++ b/tools/extract-bsp-info.zig @@ -70,33 +70,26 @@ fn renderMicroZigTarget(stream: anytype, key: []const u8, target: microzig.Targe try std.json.stringify(jtarget, .{}, stream); } -fn renderTargetArray(stream: anytype, comptime array: type) !void { - inline for (comptime std.meta.declarations(array), 0..) |fld, i| { +fn renderTargetArray(stream: anytype, targets: []const microzig.BoardSupportPackageDefinition.TargetDefinition) !void { + for (targets, 0..) |target_def, i| { if (i > 0) try stream.writeAll(","); - const target = comptime @field(array, fld.name); - - if (@TypeOf(target) == type) { - // recurse - try renderTargetArray(stream, target); - } else { - try renderMicroZigTarget( - stream, - fld.name, - target, - ); - } + try renderMicroZigTarget( + stream, + target_def.id, + target_def.target, + ); } } pub fn main() !void { + const info = bsp.microzig_board_support; + var stdout = std.io.getStdOut().writer(); try stdout.writeAll("{ \"board-support\": {"); - try stdout.writeAll("\"chips\":["); - try renderTargetArray(stdout, bsp.chips); - try stdout.writeAll("],\"boards\":["); - try renderTargetArray(stdout, bsp.boards); + try stdout.writeAll("\"targets\":["); + try renderTargetArray(stdout, info.targets); try stdout.writeAll("]}}"); } From 4480b7c17a8dc9bc4f7e3c107d7f7bcb29e95ead Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Tue, 23 Jan 2024 09:59:50 +0100 Subject: [PATCH 262/286] Fixes build script enough to make next-gen example build. --- board-support/raspberrypi-rp2040/build.zig | 22 +- build/build.zig | 560 ++++++++++----------- core/build.zig | 90 +--- examples/next-gen/build.zig.zon | 8 +- tools/bundle.py | 2 +- tools/extract-bsp-info.zig | 5 + 6 files changed, 295 insertions(+), 392 deletions(-) diff --git a/board-support/raspberrypi-rp2040/build.zig b/board-support/raspberrypi-rp2040/build.zig index 3e0d5344d..1baf71e65 100644 --- a/board-support/raspberrypi-rp2040/build.zig +++ b/board-support/raspberrypi-rp2040/build.zig @@ -137,15 +137,15 @@ const chip = .{ }; /// Returns a configuration function that will add the provided `BootROM` to the firmware. -pub fn rp2040_configure(comptime bootrom: BootROM) *const fn (host_build: *std.Build, *microzig.Firmware) void { +pub fn rp2040_configure(comptime bootrom: BootROM) *const fn (env: *microzig.BuildEnvironment, *microzig.Firmware) void { const T = struct { - fn configure(host_build: *std.Build, fw: *microzig.Firmware) void { - const bootrom_file = getBootrom(host_build, bootrom); + fn configure(env: *microzig.BuildEnvironment, fw: *microzig.Firmware) void { + const bootrom_file = getBootrom(env, bootrom); // HACK: Inject the file as a dependency to MicroZig.board fw.modules.board.?.dependencies.put( "bootloader", - host_build.createModule(.{ + env.host_build.createModule(.{ .source_file = bootrom_file.bin, }), ) catch @panic("oom"); @@ -161,7 +161,7 @@ pub const Stage2Bootloader = struct { elf: ?std.Build.LazyPath, }; -pub fn getBootrom(b: *std.Build, rom: BootROM) Stage2Bootloader { +pub fn getBootrom(env: *microzig.BuildEnvironment, rom: BootROM) Stage2Bootloader { const rom_exe = switch (rom) { .artifact => |artifact| artifact, .blob => |blob| return Stage2Bootloader{ @@ -170,13 +170,13 @@ pub fn getBootrom(b: *std.Build, rom: BootROM) Stage2Bootloader { }, else => blk: { - var target = @as(microzig.CpuModel, chip.cpu).getDescriptor().target; + var target = env.getCpuDescriptor(chip.cpu).target; target.abi = .eabi; - const rom_path = b.pathFromRoot(b.fmt("{s}/src/bootroms/{s}.S", .{ build_root, @tagName(rom) })); + const rom_path = env.host_build.pathFromRoot(env.host_build.fmt("{s}/src/bootroms/{s}.S", .{ build_root, @tagName(rom) })); - const rom_exe = b.addExecutable(.{ - .name = b.fmt("stage2-{s}", .{@tagName(rom)}), + const rom_exe = env.host_build.addExecutable(.{ + .name = env.host_build.fmt("stage2-{s}", .{@tagName(rom)}), .optimize = .ReleaseSmall, .target = target, .root_source_file = null, @@ -191,8 +191,8 @@ pub fn getBootrom(b: *std.Build, rom: BootROM) Stage2Bootloader { }, }; - const rom_objcopy = b.addObjCopy(rom_exe.getEmittedBin(), .{ - .basename = b.fmt("{s}.bin", .{@tagName(rom)}), + const rom_objcopy = env.host_build.addObjCopy(rom_exe.getEmittedBin(), .{ + .basename = env.host_build.fmt("{s}.bin", .{@tagName(rom)}), .format = .bin, }); diff --git a/build/build.zig b/build/build.zig index 67c16e24b..815055157 100644 --- a/build/build.zig +++ b/build/build.zig @@ -5,10 +5,64 @@ const std = @import("std"); const uf2 = @import("uf2"); +/// This build script validates usage patterns we expect from MicroZig +pub fn build(b: *std.Build) !void { + const uf2_dep = b.dependency("uf2", .{}); + + const build_test = b.addTest(.{ + .root_source_file = .{ .path = "build.zig" }, + }); + + build_test.addAnonymousModule("uf2", .{ + .source_file = .{ .cwd_relative = uf2_dep.builder.pathFromRoot("build.zig") }, + }); + + const install_docs = b.addInstallDirectory(.{ + .source_dir = build_test.getEmittedDocs(), + .install_dir = .prefix, + .install_subdir = "docs", + }); + + b.getInstallStep().dependOn(&install_docs.step); +} + //////////////////////////////////////// // MicroZig Gen 3 Interface // //////////////////////////////////////// +const zig_deps = struct { + // Keep in sync with the logic from Build.zig:dependency: + + const build_runner = @import("root"); + const deps = build_runner.dependencies; + + const names = blk: { + var list: []const []const u8 = &.{}; + for (@typeInfo(deps.imports).Struct.decls) |decl| { + list = list ++ [_][]const u8{decl.name}; + } + break :blk list; + }; + + const modules = blk: { + var list: []const type = &.{}; + for (@typeInfo(deps.imports).Struct.decls) |decl| { + list = list ++ [_]type{@field(deps.imports, decl.name)}; + } + break :blk list; + }; + + fn get(comptime name: []const u8) ?type { + for (names, modules) |item, mod| { + if (std.mem.eql(u8, item, name)) + return mod; + } + return null; + } +}; + +pub const CpuArray = std.enums.EnumArray(CpuType, Cpu); + pub const BoardSupportPackageDefinition = struct { pub const TargetDefinition = struct { id: []const u8, // full "uri" @@ -109,21 +163,14 @@ const ImportedBSP = struct { }; fn get_declared_bsps() []const ImportedBSP { - - // Keep in sync with the logic from Build.zig:dependency - const build_runner = @import("root"); - const deps = build_runner.dependencies; - var bsps: []const ImportedBSP = &.{}; - inline for (@typeInfo(deps.imports).Struct.decls) |decl| { - if (comptime std.mem.indexOfScalar(u8, decl.name, '.') == null) { - const maybe_bsp = @field(deps.imports, decl.name); - + inline for (zig_deps.names, zig_deps.modules) |name, maybe_bsp| { + if (comptime std.mem.indexOfScalar(u8, name, '.') == null) { if (@hasDecl(maybe_bsp, "microzig_board_support")) { const bsp = @field(maybe_bsp, "microzig_board_support"); if (@TypeOf(bsp) == BoardSupportPackageDefinition) { bsps = bsps ++ [_]ImportedBSP{.{ - .import_name = decl.name, + .import_name = name, .bsp = bsp, }}; } @@ -139,24 +186,72 @@ pub const EnvironmentInfo = struct { /// package name of the core package (optional) core: []const u8 = "microzig-core", + + board_support_packages: BspSource = .from_dependencies, + + pub const BspSource = union(enum) { + from_dependencies, + explicit: []const []const u8, + }; }; +/// Creates a new MicroZig build environment that can be used to create new firmware. pub fn createBuildEnvironment(b: *std.Build, comptime info: EnvironmentInfo) *BuildEnvironment { const available_bsps = comptime get_declared_bsps(); + const requested_bsps = switch (info.board_support_packages) { + .from_dependencies => available_bsps, + .explicit => |list| comptime blk: { + var used = std.StaticBitSet(list.len).initEmpty(); + + var requested_bsps: []const ImportedBSP = &.{}; + for (list, 0..) |name, index| { + for (available_bsps) |bsp| { + if (std.mem.eql(u8, bsp.name, name)) { + requested_bsps = requested_bsps ++ [_]ImportedBSP{bsp}; + } else { + used.set(index); + } + } + } + + if (used.count > 0) { + var msg: []const u8 = "Not all requested board support packages were declared in build.zig.zon. The following packages are missing:"; + var iter = used.iterator(); + while (iter.next()) |index| { + msg = msg ++ std.fmt.comptimePrint("\n* {s}", .{ + list[index].name, + }); + } + @compileError(msg); + } + + break :blk requested_bsps; + }, + }; + + const core_module = zig_deps.get(info.core) orelse @compileError("A module named " ++ info.core ++ " is not declared in build.zig.zon!"); + const build_module = zig_deps.get(info.self) orelse @compileError("A module named " ++ info.self ++ " is not declared in build.zig.zon!"); + if (build_module != @This()) { + @compileError("The module " ++ info.self ++ " is not the same of which this function is called. Please pass the exact same module name to this function as you pass to import!"); + } + const be = b.allocator.create(BuildEnvironment) catch @panic("out of memory"); be.* = BuildEnvironment{ .host_build = b, .self = undefined, .microzig_core = undefined, - .board_support_packages = b.allocator.alloc(BoardSupportPackage, available_bsps.len) catch @panic("out of memory"), + .board_support_packages = b.allocator.alloc(BoardSupportPackage, requested_bsps.len) catch @panic("out of memory"), .targets = .{}, + .self_pkg_name = comptime info.self, + .core_pkg_name = comptime info.core, + .cpus = &core_module.cpus, }; be.self = b.dependency(info.self, .{}); be.microzig_core = b.dependency(info.core, .{}); - inline for (be.board_support_packages, available_bsps) |*bsp, def| { + inline for (be.board_support_packages, requested_bsps) |*bsp, def| { bsp.* = BoardSupportPackage{ .name = def.import_name, .dep = b.dependency(def.import_name, .{}), @@ -184,14 +279,28 @@ pub const BuildEnvironment = struct { microzig_core: *std.Build.Dependency, + self_pkg_name: []const u8, + core_pkg_name: []const u8, + board_support_packages: []BoardSupportPackage, targets: std.StringArrayHashMapUnmanaged(Target), + cpus: *const CpuArray, + + /// Searches for a target called `name` and returns a pointer to the MicroZig Target if it exists. pub fn findTarget(env: *const BuildEnvironment, name: []const u8) ?*const Target { return env.targets.getPtr(name); } + /// Returns the instance to the CPU descriptor for the given CPU model. + pub fn getCpuDescriptor(env: *BuildEnvironment, model: CpuModel) *const Cpu { + return if (model == .custom) + model.custom + else + env.cpus.getPtrConst(model); + } + /// Declares a new MicroZig firmware file. pub fn addFirmware( /// The MicroZig instance that should be used to create the firmware. @@ -204,7 +313,7 @@ pub const BuildEnvironment = struct { const micro_build = env.self.builder; const chip = &options.target.chip; - const cpu = chip.cpu.getDescriptor(); + const cpu = env.getCpuDescriptor(chip.cpu); const maybe_hal = options.hal orelse options.target.hal; const maybe_board = options.board orelse options.target.board; @@ -259,7 +368,7 @@ pub const BuildEnvironment = struct { .optimize = options.optimize, .target = cpu.target, .linkage = .static, - .root_source_file = .{ .cwd_relative = env.self.builder.pathFromRoot("src/start.zig") }, + .root_source_file = .{ .cwd_relative = env.microzig_core.builder.pathFromRoot("src/start.zig") }, }), .target = options.target, .output_files = Firmware.OutputFileMap.init(host_build.allocator), @@ -268,7 +377,7 @@ pub const BuildEnvironment = struct { .modules = .{ .microzig = micro_build.createModule(.{ - .source_file = .{ .cwd_relative = micro_build.pathFromRoot("src/microzig.zig") }, + .source_file = .{ .cwd_relative = env.microzig_core.builder.pathFromRoot("src/microzig.zig") }, .dependencies = &.{ .{ .name = "config", @@ -331,7 +440,7 @@ pub const BuildEnvironment = struct { }, }); - const umm = env.dependency("umm-zig", .{}).module("umm"); + const umm = env.microzig_core.builder.dependency("umm-zig", .{}).module("umm"); fw.modules.microzig.dependencies.put("umm", umm) catch @panic("out of memory"); fw.artifact.addModule("app", fw.modules.app); @@ -344,7 +453,7 @@ pub const BuildEnvironment = struct { switch (linker_script) { .generated => { fw.artifact.setLinkerScript( - generateLinkerScript(host_build, chip.*) catch @panic("out of memory"), + env.generateLinkerScript(chip.*) catch @panic("out of memory"), ); }, @@ -354,7 +463,7 @@ pub const BuildEnvironment = struct { } if (options.target.configure) |configure| { - configure(host_build, fw); + configure(fw.env, fw); } return fw; @@ -404,98 +513,145 @@ pub const BuildEnvironment = struct { fn dependency(env: *BuildEnvironment, name: []const u8, args: anytype) *std.Build.Dependency { return env.self.builder.dependency(name, args); } -}; -//////////////////////////////////////// -// MicroZig Gen 2 Interface // -//////////////////////////////////////// + fn generateLinkerScript(env: *BuildEnvironment, chip: Chip) !std.Build.LazyPath { + const cpu = env.getCpuDescriptor(chip.cpu); + + var contents = std.ArrayList(u8).init(env.host_build.allocator); + const writer = contents.writer(); + try writer.print( + \\/* + \\ * This file was auto-generated by microzig + \\ * + \\ * Target CPU: {[cpu]s} + \\ * Target Chip: {[chip]s} + \\ */ + \\ + // This is not the "true" entry point, but there's no such thing on embedded platforms + // anyways. This is the logical entrypoint that should be invoked when + // stack, .data and .bss are set up and the CPU is ready to be used. + \\ENTRY(microzig_main); + \\ + \\ + , .{ + .cpu = cpu.name, + .chip = chip.name, + }); -fn root() []const u8 { - return comptime (std.fs.path.dirname(@src().file) orelse "."); -} -const build_root = root(); + try writer.writeAll("MEMORY\n{\n"); + { + var counters = [4]usize{ 0, 0, 0, 0 }; + for (chip.memory_regions) |region| { + // flash (rx!w) : ORIGIN = 0x00000000, LENGTH = 512k -const MicroZig = @This(); + switch (region.kind) { + .flash => { + try writer.print(" flash{d} (rx!w)", .{counters[0]}); + counters[0] += 1; + }, -b: *std.Build, -self: *std.Build.Dependency, + .ram => { + try writer.print(" ram{d} (rw!x)", .{counters[1]}); + counters[1] += 1; + }, -/// Creates a new instance of the MicroZig build support. -/// -/// This is necessary as we need to keep track of some internal state to prevent -/// duplicated work per firmware built. -pub fn init(b: *std.Build, dependency_name: []const u8) *MicroZig { - const mz = b.allocator.create(MicroZig) catch @panic("out of memory"); - mz.* = MicroZig{ - .b = b, - .self = b.dependency(dependency_name, .{}), - }; - return mz; -} + .io => { + try writer.print(" io{d} (rw!x)", .{counters[2]}); + counters[2] += 1; + }, -/// This build script validates usage patterns we expect from MicroZig -pub fn build(b: *std.Build) !void { - const uf2_dep = b.dependency("uf2", .{}); + .reserved => { + try writer.print(" reserved{d} (rw!x)", .{counters[3]}); + counters[3] += 1; + }, - const build_test = b.addTest(.{ - .root_source_file = .{ .path = "build.zig" }, - }); + .private => |custom| { + try writer.print(" {s} (", .{custom.name}); + if (custom.readable) try writer.writeAll("r"); + if (custom.writeable) try writer.writeAll("w"); + if (custom.executable) try writer.writeAll("x"); + + if (!custom.readable or !custom.writeable or !custom.executable) { + try writer.writeAll("!"); + if (!custom.readable) try writer.writeAll("r"); + if (!custom.writeable) try writer.writeAll("w"); + if (!custom.executable) try writer.writeAll("x"); + } + try writer.writeAll(")"); + }, + } + try writer.print(" : ORIGIN = 0x{X:0>8}, LENGTH = 0x{X:0>8}\n", .{ region.offset, region.length }); + } + } - build_test.addAnonymousModule("uf2", .{ - .source_file = .{ .cwd_relative = uf2_dep.builder.pathFromRoot("build.zig") }, - }); + try writer.writeAll("}\n\nSECTIONS\n{\n"); + { + try writer.writeAll( + \\ .text : + \\ { + \\ KEEP(*(microzig_flash_start)) + \\ *(.text*) + \\ } > flash0 + \\ + \\ + ); + + switch (cpu.target.getCpuArch()) { + .arm, .thumb => try writer.writeAll( + \\ .ARM.exidx : { + \\ *(.ARM.exidx* .gnu.linkonce.armexidx.*) + \\ } >flash0 + \\ + \\ + ), + else => {}, + } - const install_docs = b.addInstallDirectory(.{ - .source_dir = build_test.getEmittedDocs(), - .install_dir = .prefix, - .install_subdir = "docs", - }); + try writer.writeAll( + \\ .data : + \\ { + \\ microzig_data_start = .; + \\ *(.rodata*) + \\ *(.data*) + \\ microzig_data_end = .; + \\ } > ram0 AT> flash0 + \\ + \\ .bss (NOLOAD) : + \\ { + \\ microzig_bss_start = .; + \\ *(.bss*) + \\ microzig_bss_end = .; + \\ } > ram0 + \\ + \\ microzig_data_load_start = LOADADDR(.data); + \\ + ); + } + try writer.writeAll("}\n"); - b.getInstallStep().dependOn(&install_docs.step); + // TODO: Assert that the flash can actually hold all data! + // try writer.writeAll( + // \\ + // \\ ASSERT( (SIZEOF(.text) + SIZEOF(.data) > LENGTH(flash0)), "Error: .text + .data is too large for flash!" ); + // \\ + // ); + + const write = env.host_build.addWriteFiles(); + + return write.add("linker.ld", contents.items); + } +}; - // const backings = @import("test/backings.zig"); - // const optimize = b.standardOptimizeOption(.{}); - - // const minimal = addEmbeddedExecutable(b, .{ - // .name = "minimal", - // .source_file = .{ - // .path = comptime root_dir() ++ "/test/programs/minimal.zig", - // }, - // .backing = backings.minimal, - // .optimize = optimize, - // }); - - // const has_hal = addEmbeddedExecutable(b, .{ - // .name = "has_hal", - // .source_file = .{ - // .path = comptime root_dir() ++ "/test/programs/has_hal.zig", - // }, - // .backing = backings.has_hal, - // .optimize = optimize, - // }); - - // const has_board = addEmbeddedExecutable(b, .{ - // .name = "has_board", - // .source_file = .{ - // .path = comptime root_dir() ++ "/test/programs/has_board.zig", - // }, - // .backing = backings.has_board, - // .optimize = optimize, - // }); - - // const core_tests = b.addTest(.{ - // .root_source_file = .{ - // .path = comptime root_dir() ++ "/src/core.zig", - // }, - // .optimize = optimize, - // }); - - // const test_step = b.step("test", "build test programs"); - // test_step.dependOn(&minimal.inner.step); - // test_step.dependOn(&has_hal.inner.step); - // test_step.dependOn(&has_board.inner.step); - // test_step.dependOn(&b.addRunArtifact(core_tests).step); +//////////////////////////////////////// +// MicroZig Gen 2 Interface // +//////////////////////////////////////// + +fn root() []const u8 { + return comptime (std.fs.path.dirname(@src().file) orelse "."); } +const build_root = root(); + +const MicroZig = @This(); /// The resulting binary format for the firmware file. /// A lot of embedded systems don't use plain ELF files, thus we provide means @@ -602,17 +758,12 @@ pub const CpuModel = union(enum) { cortex_m3, cortex_m4, riscv32_imac, - custom: *const Cpu, - - pub fn getDescriptor(model: CpuModel) *const Cpu { - return switch (@as(std.meta.Tag(CpuModel), model)) { - inline else => |tag| &@field(cpus, @tagName(tag)), - .custom => model.custom, - }; - } }; +/// Tag of CpuModel +pub const CpuType = std.meta.Tag(CpuModel); + /// A cpu descriptor. pub const Cpu = struct { /// Display name of the CPU. @@ -761,7 +912,7 @@ pub const Target = struct { /// (optional) Further configures the created firmware depending on the chip and/or board settings. /// This can be used to set/change additional properties on the created `*Firmware` object. - configure: ?*const fn (host_build: *std.Build, *Firmware) void = null, + configure: ?*const fn (env: *BuildEnvironment, *Firmware) void = null, /// (optional) Post processing step that will patch up and modify the elf file if necessary. binary_post_process: ?*const fn (host_build: *std.Build, std.Build.LazyPath) std.Build.LazyPath = null, @@ -965,202 +1116,7 @@ pub const Firmware = struct { } }; -pub const cpus = struct { - pub const avr5 = Cpu{ - .name = "AVR5", - .source_file = .{ .path = build_root ++ "/src/cpus/avr5.zig" }, - .target = std.zig.CrossTarget{ - .cpu_arch = .avr, - .cpu_model = .{ .explicit = &std.Target.avr.cpu.avr5 }, - .os_tag = .freestanding, - .abi = .eabi, - }, - }; - - pub const cortex_m0 = Cpu{ - .name = "ARM Cortex-M0", - .source_file = .{ .path = build_root ++ "/src/cpus/cortex-m.zig" }, - .target = std.zig.CrossTarget{ - .cpu_arch = .thumb, - .cpu_model = .{ .explicit = &std.Target.arm.cpu.cortex_m0 }, - .os_tag = .freestanding, - .abi = .eabi, - }, - }; - - pub const cortex_m0plus = Cpu{ - .name = "ARM Cortex-M0+", - .source_file = .{ .path = build_root ++ "/src/cpus/cortex-m.zig" }, - .target = std.zig.CrossTarget{ - .cpu_arch = .thumb, - .cpu_model = .{ .explicit = &std.Target.arm.cpu.cortex_m0plus }, - .os_tag = .freestanding, - .abi = .eabi, - }, - }; - - pub const cortex_m3 = Cpu{ - .name = "ARM Cortex-M3", - .source_file = .{ .path = build_root ++ "/src/cpus/cortex-m.zig" }, - .target = std.zig.CrossTarget{ - .cpu_arch = .thumb, - .cpu_model = .{ .explicit = &std.Target.arm.cpu.cortex_m3 }, - .os_tag = .freestanding, - .abi = .eabi, - }, - }; - - pub const cortex_m4 = Cpu{ - .name = "ARM Cortex-M4", - .source_file = .{ .path = build_root ++ "/src/cpus/cortex-m.zig" }, - .target = std.zig.CrossTarget{ - .cpu_arch = .thumb, - .cpu_model = .{ .explicit = &std.Target.arm.cpu.cortex_m4 }, - .os_tag = .freestanding, - .abi = .eabi, - }, - }; - - pub const riscv32_imac = Cpu{ - .name = "RISC-V 32-bit", - .source_file = .{ .path = build_root ++ "/src/cpus/riscv32.zig" }, - .target = std.zig.CrossTarget{ - .cpu_arch = .riscv32, - .cpu_model = .{ .explicit = &std.Target.riscv.cpu.sifive_e21 }, - .os_tag = .freestanding, - .abi = .none, - }, - }; -}; - fn buildConfigError(b: *std.Build, comptime fmt: []const u8, args: anytype) noreturn { const msg = b.fmt(fmt, args); @panic(msg); } - -fn generateLinkerScript(b: *std.Build, chip: Chip) !std.Build.LazyPath { - const cpu = chip.cpu.getDescriptor(); - - var contents = std.ArrayList(u8).init(b.allocator); - const writer = contents.writer(); - try writer.print( - \\/* - \\ * This file was auto-generated by microzig - \\ * - \\ * Target CPU: {[cpu]s} - \\ * Target Chip: {[chip]s} - \\ */ - \\ - // This is not the "true" entry point, but there's no such thing on embedded platforms - // anyways. This is the logical entrypoint that should be invoked when - // stack, .data and .bss are set up and the CPU is ready to be used. - \\ENTRY(microzig_main); - \\ - \\ - , .{ - .cpu = cpu.name, - .chip = chip.name, - }); - - try writer.writeAll("MEMORY\n{\n"); - { - var counters = [4]usize{ 0, 0, 0, 0 }; - for (chip.memory_regions) |region| { - // flash (rx!w) : ORIGIN = 0x00000000, LENGTH = 512k - - switch (region.kind) { - .flash => { - try writer.print(" flash{d} (rx!w)", .{counters[0]}); - counters[0] += 1; - }, - - .ram => { - try writer.print(" ram{d} (rw!x)", .{counters[1]}); - counters[1] += 1; - }, - - .io => { - try writer.print(" io{d} (rw!x)", .{counters[2]}); - counters[2] += 1; - }, - - .reserved => { - try writer.print(" reserved{d} (rw!x)", .{counters[3]}); - counters[3] += 1; - }, - - .private => |custom| { - try writer.print(" {s} (", .{custom.name}); - if (custom.readable) try writer.writeAll("r"); - if (custom.writeable) try writer.writeAll("w"); - if (custom.executable) try writer.writeAll("x"); - - if (!custom.readable or !custom.writeable or !custom.executable) { - try writer.writeAll("!"); - if (!custom.readable) try writer.writeAll("r"); - if (!custom.writeable) try writer.writeAll("w"); - if (!custom.executable) try writer.writeAll("x"); - } - try writer.writeAll(")"); - }, - } - try writer.print(" : ORIGIN = 0x{X:0>8}, LENGTH = 0x{X:0>8}\n", .{ region.offset, region.length }); - } - } - - try writer.writeAll("}\n\nSECTIONS\n{\n"); - { - try writer.writeAll( - \\ .text : - \\ { - \\ KEEP(*(microzig_flash_start)) - \\ *(.text*) - \\ } > flash0 - \\ - \\ - ); - - switch (cpu.target.getCpuArch()) { - .arm, .thumb => try writer.writeAll( - \\ .ARM.exidx : { - \\ *(.ARM.exidx* .gnu.linkonce.armexidx.*) - \\ } >flash0 - \\ - \\ - ), - else => {}, - } - - try writer.writeAll( - \\ .data : - \\ { - \\ microzig_data_start = .; - \\ *(.rodata*) - \\ *(.data*) - \\ microzig_data_end = .; - \\ } > ram0 AT> flash0 - \\ - \\ .bss (NOLOAD) : - \\ { - \\ microzig_bss_start = .; - \\ *(.bss*) - \\ microzig_bss_end = .; - \\ } > ram0 - \\ - \\ microzig_data_load_start = LOADADDR(.data); - \\ - ); - } - try writer.writeAll("}\n"); - - // TODO: Assert that the flash can actually hold all data! - // try writer.writeAll( - // \\ - // \\ ASSERT( (SIZEOF(.text) + SIZEOF(.data) > LENGTH(flash0)), "Error: .text + .data is too large for flash!" ); - // \\ - // ); - - const write = b.addWriteFiles(); - - return write.add("linker.ld", contents.items); -} diff --git a/core/build.zig b/core/build.zig index 033709021..2d6008f64 100644 --- a/core/build.zig +++ b/core/build.zig @@ -13,70 +13,10 @@ const build_root = root(); /// This build script validates usage patterns we expect from MicroZig pub fn build(b: *std.Build) !void { _ = b; - // const uf2_dep = b.dependency("uf2", .{}); - - // const build_test = b.addTest(.{ - // .root_source_file = .{ .path = "build.zig" }, - // }); - - // build_test.addAnonymousModule("uf2", .{ - // .source_file = .{ .cwd_relative = uf2_dep.builder.pathFromRoot("build.zig") }, - // }); - - // const install_docs = b.addInstallDirectory(.{ - // .source_dir = build_test.getEmittedDocs(), - // .install_dir = .prefix, - // .install_subdir = "docs", - // }); - - // b.getInstallStep().dependOn(&install_docs.step); - - // const backings = @import("test/backings.zig"); - // const optimize = b.standardOptimizeOption(.{}); - - // const minimal = addEmbeddedExecutable(b, .{ - // .name = "minimal", - // .source_file = .{ - // .path = comptime root_dir() ++ "/test/programs/minimal.zig", - // }, - // .backing = backings.minimal, - // .optimize = optimize, - // }); - - // const has_hal = addEmbeddedExecutable(b, .{ - // .name = "has_hal", - // .source_file = .{ - // .path = comptime root_dir() ++ "/test/programs/has_hal.zig", - // }, - // .backing = backings.has_hal, - // .optimize = optimize, - // }); - - // const has_board = addEmbeddedExecutable(b, .{ - // .name = "has_board", - // .source_file = .{ - // .path = comptime root_dir() ++ "/test/programs/has_board.zig", - // }, - // .backing = backings.has_board, - // .optimize = optimize, - // }); - - // const core_tests = b.addTest(.{ - // .root_source_file = .{ - // .path = comptime root_dir() ++ "/src/core.zig", - // }, - // .optimize = optimize, - // }); - - // const test_step = b.step("test", "build test programs"); - // test_step.dependOn(&minimal.inner.step); - // test_step.dependOn(&has_hal.inner.step); - // test_step.dependOn(&has_board.inner.step); - // test_step.dependOn(&b.addRunArtifact(core_tests).step); } -pub const cpus = struct { - pub const avr5 = microbuild.Cpu{ +pub const cpus = microbuild.CpuArray.init(.{ + .avr5 = microbuild.Cpu{ .name = "AVR5", .source_file = .{ .path = build_root ++ "/src/cpus/avr5.zig" }, .target = std.zig.CrossTarget{ @@ -85,9 +25,9 @@ pub const cpus = struct { .os_tag = .freestanding, .abi = .eabi, }, - }; + }, - pub const cortex_m0 = microbuild.Cpu{ + .cortex_m0 = microbuild.Cpu{ .name = "ARM Cortex-M0", .source_file = .{ .path = build_root ++ "/src/cpus/cortex-m.zig" }, .target = std.zig.CrossTarget{ @@ -96,9 +36,9 @@ pub const cpus = struct { .os_tag = .freestanding, .abi = .eabi, }, - }; + }, - pub const cortex_m0plus = microbuild.Cpu{ + .cortex_m0plus = microbuild.Cpu{ .name = "ARM Cortex-M0+", .source_file = .{ .path = build_root ++ "/src/cpus/cortex-m.zig" }, .target = std.zig.CrossTarget{ @@ -107,9 +47,9 @@ pub const cpus = struct { .os_tag = .freestanding, .abi = .eabi, }, - }; + }, - pub const cortex_m3 = microbuild.Cpu{ + .cortex_m3 = microbuild.Cpu{ .name = "ARM Cortex-M3", .source_file = .{ .path = build_root ++ "/src/cpus/cortex-m.zig" }, .target = std.zig.CrossTarget{ @@ -118,9 +58,9 @@ pub const cpus = struct { .os_tag = .freestanding, .abi = .eabi, }, - }; + }, - pub const cortex_m4 = microbuild.Cpu{ + .cortex_m4 = microbuild.Cpu{ .name = "ARM Cortex-M4", .source_file = .{ .path = build_root ++ "/src/cpus/cortex-m.zig" }, .target = std.zig.CrossTarget{ @@ -129,9 +69,9 @@ pub const cpus = struct { .os_tag = .freestanding, .abi = .eabi, }, - }; + }, - pub const riscv32_imac = microbuild.Cpu{ + .riscv32_imac = microbuild.Cpu{ .name = "RISC-V 32-bit", .source_file = .{ .path = build_root ++ "/src/cpus/riscv32.zig" }, .target = std.zig.CrossTarget{ @@ -140,5 +80,7 @@ pub const cpus = struct { .os_tag = .freestanding, .abi = .none, }, - }; -}; + }, + + .custom = undefined, +}); diff --git a/examples/next-gen/build.zig.zon b/examples/next-gen/build.zig.zon index 90539673b..ce5dbe80d 100644 --- a/examples/next-gen/build.zig.zon +++ b/examples/next-gen/build.zig.zon @@ -4,19 +4,19 @@ .dependencies = .{ .microzig = .{ .url = "https://public.devspace.random-projects.net/microzig-build.tar.gz", - .hash = "1220c87cc608598bdb4ae5ed6436c6fa3e126c57d3d1bbfaf01625c3af0c15da44e4", + .hash = "12208fcae95a6d3bc80301bfbabe9f937cf299188f44bed100f61e39437d8fc4a49a", }, .@"microzig-core" = .{ .url = "https://public.devspace.random-projects.net/microzig-core.tar.gz", - .hash = "1220a37d914f0585bbaeba2bc4d4d15586bef310a6af340af87f0e13fde0b4ddfb1a", + .hash = "122085d8c30906f461a3aecb54eb0dadb644c25724b0eb2d3fc89f1f4c3a8d411be2", }, .@"microzig-bsp-nxp" = .{ .url = "https://public.devspace.random-projects.net/board-support/nxp/lpc.tar.gz", - .hash = "122040dc9467f6dac90a1376fff25350b2a5abd291904db7bea48a78db4f6e6dff13", + .hash = "12201530a2d4d2751a5bc93720d3a3d6eab0349cc271004102bcc470beffb02c7e84", }, .@"microzig-bsp-rp2040" = .{ .url = "https://public.devspace.random-projects.net/board-support/raspberrypi/rp2040.tar.gz", - .hash = "1220142a13e590252deb7667569bdd3f6147c5b461f6b0343a825079a7dd3a24dea9", + .hash = "1220817e39ac34923bae65047afc344706c11e7dd054efee3ca31ff78adc78a4e0f6", }, }, } \ No newline at end of file diff --git a/tools/bundle.py b/tools/bundle.py index e00cda07f..eebb21578 100755 --- a/tools/bundle.py +++ b/tools/bundle.py @@ -145,7 +145,7 @@ def execute_raw(*args,hide_stderr = False,**kwargs): sys.stderr.buffer.write(res.stderr) if res.returncode != 0: sys.stderr.write(f"command {' '.join(args)} failed with exit code {res.returncode}") - res.check_returncode() + sys.exit(res.returncode) return res def execute(*args,**kwargs): diff --git a/tools/extract-bsp-info.zig b/tools/extract-bsp-info.zig index 4c2b26091..a157be7ab 100644 --- a/tools/extract-bsp-info.zig +++ b/tools/extract-bsp-info.zig @@ -7,6 +7,11 @@ const std = @import("std"); const bsp = @import("bsp"); const microzig = @import("microzig-build"); +// Fake build_runner.zig api: +pub const dependencies = struct { + pub const imports = struct {}; +}; + const JsonTarget = struct { id: []const u8, From b1e189b4f463a21d98d84f3ddbd19ed47201e6c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Wed, 24 Jan 2024 12:52:47 +0100 Subject: [PATCH 263/286] Adds step/option for printing the available targets, shortens target list. --- build/build.zig | 87 +++++++++++++++++++++++++++++---- examples/next-gen/build.zig | 12 ++--- examples/next-gen/build.zig.zon | 8 +-- 3 files changed, 86 insertions(+), 21 deletions(-) diff --git a/build/build.zig b/build/build.zig index 815055157..272bd6952 100644 --- a/build/build.zig +++ b/build/build.zig @@ -246,22 +246,66 @@ pub fn createBuildEnvironment(b: *std.Build, comptime info: EnvironmentInfo) *Bu .self_pkg_name = comptime info.self, .core_pkg_name = comptime info.core, .cpus = &core_module.cpus, + + .show_targets_step = std.Build.Step.init(.{ + .id = .custom, + .name = "Show MicroZig targets", + .owner = b, + .makeFn = BuildEnvironment.print_target_steps, + .first_ret_addr = null, + }), }; be.self = b.dependency(info.self, .{}); be.microzig_core = b.dependency(info.core, .{}); - inline for (be.board_support_packages, requested_bsps) |*bsp, def| { - bsp.* = BoardSupportPackage{ - .name = def.import_name, - .dep = b.dependency(def.import_name, .{}), - }; + // Fetch all available board support packages and targets: + { + var duplicate_package_names = std.StringArrayHashMap(void).init(be.host_build.allocator); + defer duplicate_package_names.deinit(); + + inline for (be.board_support_packages, requested_bsps) |*bsp, def| { + bsp.* = BoardSupportPackage{ + .name = def.import_name, + .dep = b.dependency(def.import_name, .{}), + }; + + for (def.bsp.targets) |tgt| { + const full_name = b.fmt("{s}#{s}", .{ tgt.id, def.import_name }); + + const old_value = be.targets.fetchPut(be.host_build.allocator, tgt.id, tgt.target) catch @panic("out of memory"); + be.targets.put(be.host_build.allocator, full_name, tgt.target) catch @panic("out of memory"); + + if (old_value != null) { + duplicate_package_names.put(tgt.id, {}) catch @panic("out of memory"); + } + } + } + + // Remove all non-unique packages from the list as they are ambigious: + for (duplicate_package_names.keys()) |key| { + _ = be.targets.orderedRemove(key); + } + + // reuse set to store names of unique long names + duplicate_package_names.clearRetainingCapacity(); + + // Find all elements where only a single non-hashed variant exists: + for (be.targets.keys()) |long_value| { + const index = std.mem.indexOfScalar(u8, long_value, '#') orelse continue; - for (def.bsp.targets) |tgt| { - const full_name = b.fmt("{s}#{s}", .{ tgt.id, def.import_name }); + const short_value = long_value[0..index]; - be.targets.put(be.host_build.allocator, tgt.id, tgt.target) catch @panic("out of memory"); - be.targets.put(be.host_build.allocator, full_name, tgt.target) catch @panic("out of memory"); + if (be.targets.get(short_value) != null) { + // If we have the short variant, we don't have a duplicate anymore, so + // let's drop the long variant: + duplicate_package_names.put(long_value, {}) catch @panic("out of memory"); + } + } + + // Drop all unnecessary long variants: + for (duplicate_package_names.keys()) |key| { + _ = be.targets.orderedRemove(key); } } @@ -288,11 +332,18 @@ pub const BuildEnvironment = struct { cpus: *const CpuArray, + show_targets_step: std.Build.Step, + /// Searches for a target called `name` and returns a pointer to the MicroZig Target if it exists. pub fn findTarget(env: *const BuildEnvironment, name: []const u8) ?*const Target { return env.targets.getPtr(name); } + /// Returns a slice to all available target names. + pub fn getTargetNames(env: *const BuildEnvironment) []const []const u8 { + return env.targets.keys(); + } + /// Returns the instance to the CPU descriptor for the given CPU model. pub fn getCpuDescriptor(env: *BuildEnvironment, model: CpuModel) *const Cpu { return if (model == .custom) @@ -301,6 +352,13 @@ pub const BuildEnvironment = struct { env.cpus.getPtrConst(model); } + /// Returns a build step that will print all available targets to this instance. + /// + /// Can be used to provide a list to the user or developer. + pub fn getShowTargetsStep(env: *BuildEnvironment) *std.Build.Step { + return &env.show_targets_step; + } + /// Declares a new MicroZig firmware file. pub fn addFirmware( /// The MicroZig instance that should be used to create the firmware. @@ -640,6 +698,17 @@ pub const BuildEnvironment = struct { return write.add("linker.ld", contents.items); } + + fn print_target_steps(step: *std.Build.Step, prog_node: *std.Progress.Node) !void { + _ = prog_node; + + const env = @fieldParentPtr(BuildEnvironment, "show_targets_step", step); + + std.debug.print("Available MicroZig targets:\n", .{}); + for (env.targets.keys()) |listed_target_name| { + std.debug.print("* {s}\n", .{listed_target_name}); + } + } }; //////////////////////////////////////// diff --git a/examples/next-gen/build.zig b/examples/next-gen/build.zig index 0c3579e3f..2c500c32e 100644 --- a/examples/next-gen/build.zig +++ b/examples/next-gen/build.zig @@ -2,18 +2,14 @@ const std = @import("std"); const MicroZig = @import("microzig"); pub fn build(b: *std.Build) void { - const microzig = MicroZig.createBuildEnvironment(b, .{ - .self = "microzig", // package name of the build package (optional) - .core = "microzig-core", // package name of the core package (optional) - }); + const microzig = MicroZig.createBuildEnvironment(b, .{}); + + const show_targets_step = b.step("show-targets", "Shows all available MicroZig targets"); + show_targets_step.dependOn(microzig.getShowTargetsStep()); const optimize = b.standardOptimizeOption(.{}); const target_name = b.option([]const u8, "target", "Select the target to build for.") orelse "board:mbed/lpc1768"; - for (microzig.targets.keys()) |listed_target_name| { - std.debug.print("- '{s}'\n", .{listed_target_name}); - } - const target = microzig.findTarget(target_name).?; const firmware = microzig.addFirmware(b, .{ diff --git a/examples/next-gen/build.zig.zon b/examples/next-gen/build.zig.zon index ce5dbe80d..d587aec33 100644 --- a/examples/next-gen/build.zig.zon +++ b/examples/next-gen/build.zig.zon @@ -4,19 +4,19 @@ .dependencies = .{ .microzig = .{ .url = "https://public.devspace.random-projects.net/microzig-build.tar.gz", - .hash = "12208fcae95a6d3bc80301bfbabe9f937cf299188f44bed100f61e39437d8fc4a49a", + .hash = "122001f3340f37dd4d80e0942407a503e6a429d7c92a05221a3e301b947782933bdb", }, .@"microzig-core" = .{ .url = "https://public.devspace.random-projects.net/microzig-core.tar.gz", - .hash = "122085d8c30906f461a3aecb54eb0dadb644c25724b0eb2d3fc89f1f4c3a8d411be2", + .hash = "1220460c2625fb17a075b17f720f275d814544e1f20a8f89e7e542ff3e0d697111bc", }, .@"microzig-bsp-nxp" = .{ .url = "https://public.devspace.random-projects.net/board-support/nxp/lpc.tar.gz", - .hash = "12201530a2d4d2751a5bc93720d3a3d6eab0349cc271004102bcc470beffb02c7e84", + .hash = "122005a181f1d51aaffd02748ab5d910597f328a12b37e68dc5a1993716d9888ccc5", }, .@"microzig-bsp-rp2040" = .{ .url = "https://public.devspace.random-projects.net/board-support/raspberrypi/rp2040.tar.gz", - .hash = "1220817e39ac34923bae65047afc344706c11e7dd054efee3ca31ff78adc78a4e0f6", + .hash = "122094dceb25e3664b96a6b482529fdc254582048d82fcec7126678e5e021b26af2c", }, }, } \ No newline at end of file From d2c46f3d66a15dc7941bf0c3a25b28fd6bfe96bc Mon Sep 17 00:00:00 2001 From: Tobias Kohlbau Date: Sat, 3 Feb 2024 10:09:32 +0100 Subject: [PATCH 264/286] rework raspberry pico examples Rework raspberry pico examples to support new microzig architecture. This involves using newly added target selection by bsp projects. Signed-off-by: Tobias Kohlbau --- examples/raspberrypi-rp2040/build.zig | 48 +++++++++++------------ examples/raspberrypi-rp2040/build.zig.zon | 14 ++++--- 2 files changed, 33 insertions(+), 29 deletions(-) diff --git a/examples/raspberrypi-rp2040/build.zig b/examples/raspberrypi-rp2040/build.zig index 6e91de005..ba67302a5 100644 --- a/examples/raspberrypi-rp2040/build.zig +++ b/examples/raspberrypi-rp2040/build.zig @@ -1,34 +1,34 @@ const std = @import("std"); -const rp2040 = @import("rp2040"); +const rp2040 = @import("microzig-bsp-rp2040"); +const MicroZig = @import("microzig"); const available_examples = [_]Example{ - .{ .name = "pico_adc", .target = rp2040.boards.raspberry_pi.pico, .file = "src/adc.zig" }, - .{ .name = "pico_blinky", .target = rp2040.boards.raspberry_pi.pico, .file = "src/blinky.zig" }, - // TODO: Fix multicore hal! .{ .name = "pico", .target = rp2040.boards.raspberry_pi.pico , .file = "src/blinky_core1.zig" }, - .{ .name = "pico_flash-program", .target = rp2040.boards.raspberry_pi.pico, .file = "src/flash_program.zig" }, - .{ .name = "pico_gpio-clk", .target = rp2040.boards.raspberry_pi.pico, .file = "src/gpio_clk.zig" }, - .{ .name = "pico_i2c-bus-scan", .target = rp2040.boards.raspberry_pi.pico, .file = "src/i2c_bus_scan.zig" }, - .{ .name = "pico_pwm", .target = rp2040.boards.raspberry_pi.pico, .file = "src/pwm.zig" }, - .{ .name = "pico_random", .target = rp2040.boards.raspberry_pi.pico, .file = "src/random.zig" }, - .{ .name = "pico_spi-master", .target = rp2040.boards.raspberry_pi.pico, .file = "src/spi_master.zig" }, - .{ .name = "pico_squarewave", .target = rp2040.boards.raspberry_pi.pico, .file = "src/squarewave.zig" }, - .{ .name = "pico_uart", .target = rp2040.boards.raspberry_pi.pico, .file = "src/uart.zig" }, - .{ .name = "pico_usb-device", .target = rp2040.boards.raspberry_pi.pico, .file = "src/usb_device.zig" }, - .{ .name = "pico_usb-hid", .target = rp2040.boards.raspberry_pi.pico, .file = "src/usb_hid.zig" }, - .{ .name = "pico_ws2812", .target = rp2040.boards.raspberry_pi.pico, .file = "src/ws2812.zig" }, - - .{ .name = "rp2040-matrix_tiles", .target = rp2040.boards.waveshare.rp2040_matrix, .file = "src/tiles.zig" }, - - // .{ .name = "rp2040-eth", .target = rp2040.boards.waveshare.rp2040_eth }, - // .{ .name = "rp2040-plus-4m", .target = rp2040.boards.waveshare.rp2040_plus_4m }, - // .{ .name = "rp2040-plus-16m", .target = rp2040.boards.waveshare.rp2040_plus_16m }, + .{ .name = "pico_adc", .target = "board:raspberry_pi/pico", .file = "src/adc.zig" }, + .{ .name = "pico_blinky", .target = "board:raspberry_pi/pico", .file = "src/blinky.zig" }, + // TODO: Fix multicore hal! .{ .name = "pico", .target = "board:raspberry_pi/pico", .file = "src/blinky_core1.zig" }, + .{ .name = "pico_flash-program", .target = "board:raspberry_pi/pico", .file = "src/flash_program.zig" }, + .{ .name = "pico_gpio-clk", .target = "board:raspberry_pi/pico", .file = "src/gpio_clk.zig" }, + .{ .name = "pico_i2c-bus-scan", .target = "board:raspberry_pi/pico", .file = "src/i2c_bus_scan.zig" }, + .{ .name = "pico_pwm", .target = "board:raspberry_pi/pico", .file = "src/pwm.zig" }, + .{ .name = "pico_random", .target = "board:raspberry_pi/pico", .file = "src/random.zig" }, + .{ .name = "pico_spi-master", .target = "board:raspberry_pi/pico", .file = "src/spi_master.zig" }, + .{ .name = "pico_squarewave", .target = "board:raspberry_pi/pico", .file = "src/squarewave.zig" }, + .{ .name = "pico_uart", .target = "board:raspberry_pi/pico", .file = "src/uart.zig" }, + .{ .name = "pico_usb-device", .target = "board:raspberry_pi/pico", .file = "src/usb_device.zig" }, + .{ .name = "pico_usb-hid", .target = "board:raspberry_pi/pico", .file = "src/usb_hid.zig" }, + .{ .name = "pico_ws2812", .target = "board:raspberry_pi/pico", .file = "src/ws2812.zig" }, + + .{ .name = "rp2040-matrix_tiles", .target = "board:waveshare/rp2040_matrix", .file = "src/tiles.zig" }, }; pub fn build(b: *std.Build) void { - const microzig = @import("microzig").init(b, "microzig"); + const microzig = MicroZig.createBuildEnvironment(b, .{}); + const optimize = b.standardOptimizeOption(.{}); for (available_examples) |example| { + const target = microzig.findTarget(example.target).?; + // `addFirmware` basically works like addExecutable, but takes a // `microzig.Target` for target instead of a `std.zig.CrossTarget`. // @@ -36,7 +36,7 @@ pub fn build(b: *std.Build) void { // cpu and potentially the board as well. const firmware = microzig.addFirmware(b, .{ .name = example.name, - .target = example.target, + .target = target, .optimize = optimize, .source_file = .{ .path = example.file }, }); @@ -53,7 +53,7 @@ pub fn build(b: *std.Build) void { } const Example = struct { - target: @import("microzig").Target, + target: []const u8, name: []const u8, file: []const u8, }; diff --git a/examples/raspberrypi-rp2040/build.zig.zon b/examples/raspberrypi-rp2040/build.zig.zon index 255be3f0f..36711f611 100644 --- a/examples/raspberrypi-rp2040/build.zig.zon +++ b/examples/raspberrypi-rp2040/build.zig.zon @@ -3,12 +3,16 @@ .version = "0.1.0", .dependencies = .{ .microzig = .{ - .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/c6c9ec4516f57638e751141085c9d76120990312.tar.gz", - .hash = "1220af58bdaa721b8189f3a7adfda660517dd354463463388e96d69fe4ceccf80b92", + .url = "http://localhost:8080/microzig-build.tar.gz", + .hash = "1220db1de385b765aa45a04719c199d7ab8306fcca6ac1a12b487ed589a69d05a665", }, - .rp2040 = .{ - .url = "https://github.com/ZigEmbeddedGroup/raspberrypi-rp2040/archive/67d36eebb0fbd89633db1a51d6d2bcb049f2066a.tar.gz", - .hash = "122094bf268f45b188f3916f9e5964f4257414afaafba98a455ac47d25389a456832", + .@"microzig-core" = .{ + .url = "http://localhost:8080/microzig-core.tar.gz", + .hash = "122006d6343021c1502ceba7948fd61ac813f2bb498a74df27a50e34398ccdfb92e3", + }, + .@"microzig-bsp-rp2040" = .{ + .url = "http://localhost:8080/board-support/raspberrypi/rp2040.tar.gz", + .hash = "12200319b02d9d0237984fd7acb15a4945e5547b750e0a3309d13d62440983b5b67f", }, }, } From b26ccf66458144a51af058feb423a399722d1e99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Sat, 3 Feb 2024 10:16:26 +0100 Subject: [PATCH 265/286] Adds new structure for output: split into /examples/ and /packages/ --- build/build.zig | 2 +- examples/espressif-esp/build.zig.zon | 16 ++++++++++------ examples/next-gen/build.zig | 2 +- examples/next-gen/build.zig.zon | 18 +++++++++--------- tools/bundle.py | 27 +++++++++++++++++++++++---- tools/create-pkg-descriptor.zig | 1 + 6 files changed, 45 insertions(+), 21 deletions(-) diff --git a/build/build.zig b/build/build.zig index 272bd6952..7402a7262 100644 --- a/build/build.zig +++ b/build/build.zig @@ -182,7 +182,7 @@ fn get_declared_bsps() []const ImportedBSP { pub const EnvironmentInfo = struct { /// package name of the build package (optional) - self: []const u8 = "microzig", + self: []const u8 = "microzig-build", /// package name of the core package (optional) core: []const u8 = "microzig-core", diff --git a/examples/espressif-esp/build.zig.zon b/examples/espressif-esp/build.zig.zon index a729ce616..5fc8d3025 100644 --- a/examples/espressif-esp/build.zig.zon +++ b/examples/espressif-esp/build.zig.zon @@ -1,14 +1,18 @@ .{ - .name = "microzig-espressif-esp-examples", + .name = "microzig-nxp-lpc-examples", .version = "0.1.0", .dependencies = .{ .microzig = .{ - .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/c6c9ec4516f57638e751141085c9d76120990312.tar.gz", - .hash = "1220af58bdaa721b8189f3a7adfda660517dd354463463388e96d69fe4ceccf80b92", + .url = "https://public.devspace.random-projects.net/packages/microzig-build.tar.gz", + .hash = "1220db1de385b765aa45a04719c199d7ab8306fcca6ac1a12b487ed589a69d05a665", }, - .esp = .{ - .url = "https://github.com/ZigEmbeddedGroup/espressif-esp/archive/59b8ca028915c0d6224ec88dbf4db19afbb559c0.tar.gz", - .hash = "1220f6e5f22416fdc63442cd8869fcaa35f9abf30d878ea3d80073176677dc6f8a65", + .@"microzig-core" = .{ + .url = "https://public.devspace.random-projects.net/packages/microzig-core.tar.gz", + .hash = "1220f72de650278d4184dd4a43992189246b520a5c137b54fca05d7a44df8b828267", + }, + .@"microzig-bsp-rp2040" = .{ + .url = "https://public.devspace.random-projects.net/packages/board-support/raspberrypi/rp2040.tar.gz", + .hash = "1220b170e56d2bd85b96bd8b7f40f2890cf9926da2fcb86967e466a3c87486f31c43", }, }, } diff --git a/examples/next-gen/build.zig b/examples/next-gen/build.zig index 2c500c32e..fe531f970 100644 --- a/examples/next-gen/build.zig +++ b/examples/next-gen/build.zig @@ -1,5 +1,5 @@ const std = @import("std"); -const MicroZig = @import("microzig"); +const MicroZig = @import("microzig-build"); pub fn build(b: *std.Build) void { const microzig = MicroZig.createBuildEnvironment(b, .{}); diff --git a/examples/next-gen/build.zig.zon b/examples/next-gen/build.zig.zon index d587aec33..70de7cc6f 100644 --- a/examples/next-gen/build.zig.zon +++ b/examples/next-gen/build.zig.zon @@ -2,21 +2,21 @@ .name = "microzig-nxp-lpc-examples", .version = "0.1.0", .dependencies = .{ - .microzig = .{ - .url = "https://public.devspace.random-projects.net/microzig-build.tar.gz", - .hash = "122001f3340f37dd4d80e0942407a503e6a429d7c92a05221a3e301b947782933bdb", + .@"microzig-build" = .{ + .url = "https://public.devspace.random-projects.net/packages/microzig-build.tar.gz", + .hash = "1220e1f1446176832d84fa9b132022a45ea8c21fbaba8a51d787c6b4e0f1d455f4ed", }, .@"microzig-core" = .{ - .url = "https://public.devspace.random-projects.net/microzig-core.tar.gz", - .hash = "1220460c2625fb17a075b17f720f275d814544e1f20a8f89e7e542ff3e0d697111bc", + .url = "https://public.devspace.random-projects.net/packages/microzig-core.tar.gz", + .hash = "12207d2604083d414ff3ca7c31c5dc76ee8ac3f1292a22e40ffe8b87fcadbd2e3c7d", }, .@"microzig-bsp-nxp" = .{ - .url = "https://public.devspace.random-projects.net/board-support/nxp/lpc.tar.gz", - .hash = "122005a181f1d51aaffd02748ab5d910597f328a12b37e68dc5a1993716d9888ccc5", + .url = "https://public.devspace.random-projects.net/packages/board-support/nxp/lpc.tar.gz", + .hash = "1220ac0aa694eaa23cda453bb5a2711b22d8f58f10a9e0389502439cbb881987fa95", }, .@"microzig-bsp-rp2040" = .{ - .url = "https://public.devspace.random-projects.net/board-support/raspberrypi/rp2040.tar.gz", - .hash = "122094dceb25e3664b96a6b482529fdc254582048d82fcec7126678e5e021b26af2c", + .url = "https://public.devspace.random-projects.net/packages/board-support/raspberrypi/rp2040.tar.gz", + .hash = "12204d3998590f27f19aa31a8a250576b4314b29bbeb97628e264b42cb488ee6fad7", }, }, } \ No newline at end of file diff --git a/tools/bundle.py b/tools/bundle.py index eebb21578..4878ccbb7 100755 --- a/tools/bundle.py +++ b/tools/bundle.py @@ -21,6 +21,7 @@ from marshmallow import fields as mm_fields from typing import Optional, Any +LEGAL_PACKAGE_NAME = re.compile("^[A-Za-z]$") VERBOSE = False ALL_FILES_DIR=".data" @@ -41,6 +42,7 @@ class PackageType(StrEnum): build = "build" core = "core" board_support = "board-support" + example = "example" @dataclass_json @dataclass @@ -290,6 +292,9 @@ def main(): packages = {} validation_ok = True + PACKAGES_ROOT = PurePosixPath("packages") + EXAMPLES_ROOT = PurePosixPath("examples") + for meta_path in REPO_ROOT.rglob("microzig-package.json"): assert meta_path.is_file() @@ -305,25 +310,39 @@ def main(): if pkg.package_type == PackageType.build: - pkg.out_rel_dir = PurePosixPath(".") + pkg.out_rel_dir = PACKAGES_ROOT pkg.out_basename = pkg.package_name elif pkg.package_type == PackageType.core: - pkg.out_rel_dir = PurePosixPath(".") + pkg.out_rel_dir = PACKAGES_ROOT pkg.out_basename = pkg.package_name # Implicit dependencies: pkg.inner_dependencies.add("microzig-build") # core requires the build types elif pkg.package_type == PackageType.board_support: - parsed_pkg_name = PurePosixPath(pkg.package_name) + parsed_pkg_name = PurePosixPath( pkg.package_name) - pkg.out_rel_dir = "board-support" / parsed_pkg_name.parent + pkg.out_rel_dir = PACKAGES_ROOT / "board-support" / parsed_pkg_name.parent pkg.out_basename = parsed_pkg_name.name # Implicit dependencies: pkg.inner_dependencies.add("microzig-build") # BSPs also require build types pkg.inner_dependencies.add("microzig-core") # but also the core types (?) + + + elif pkg.package_type == PackageType.example: + parsed_pkg_name = PurePosixPath( pkg.package_name) + + pkg.package_name = "examples:" + pkg.package_name # patch the name so we can use the same name for BSP and Example + + pkg.out_rel_dir = EXAMPLES_ROOT / parsed_pkg_name.parent + pkg.out_basename = parsed_pkg_name.name + + # Implicit dependencies: + pkg.inner_dependencies.add("microzig-build") # BSPs also require build types + pkg.inner_dependencies.add("microzig-core") # but also the core types (?) + else: assert False diff --git a/tools/create-pkg-descriptor.zig b/tools/create-pkg-descriptor.zig index 70985d8bc..13dd89957 100644 --- a/tools/create-pkg-descriptor.zig +++ b/tools/create-pkg-descriptor.zig @@ -38,6 +38,7 @@ const MetaData = struct { @"board-support", core, build, + example, }; package_name: []const u8, From 243c263150e6e0edb8b6dc0617e253ae459f422b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Sat, 3 Feb 2024 10:23:44 +0100 Subject: [PATCH 266/286] Ports raspberrypi-rp2040 to microzig-package.json style, reorders fields to have nicer file. --- examples/raspberrypi-rp2040/build.zig | 43 +++++++++++-------- examples/raspberrypi-rp2040/build.zig.zon | 18 -------- .../raspberrypi-rp2040/microzig-package.json | 7 +++ 3 files changed, 32 insertions(+), 36 deletions(-) delete mode 100644 examples/raspberrypi-rp2040/build.zig.zon create mode 100644 examples/raspberrypi-rp2040/microzig-package.json diff --git a/examples/raspberrypi-rp2040/build.zig b/examples/raspberrypi-rp2040/build.zig index ba67302a5..57c701313 100644 --- a/examples/raspberrypi-rp2040/build.zig +++ b/examples/raspberrypi-rp2040/build.zig @@ -1,24 +1,28 @@ const std = @import("std"); -const rp2040 = @import("microzig-bsp-rp2040"); -const MicroZig = @import("microzig"); +const MicroZig = @import("microzig-build"); const available_examples = [_]Example{ - .{ .name = "pico_adc", .target = "board:raspberry_pi/pico", .file = "src/adc.zig" }, - .{ .name = "pico_blinky", .target = "board:raspberry_pi/pico", .file = "src/blinky.zig" }, - // TODO: Fix multicore hal! .{ .name = "pico", .target = "board:raspberry_pi/pico", .file = "src/blinky_core1.zig" }, - .{ .name = "pico_flash-program", .target = "board:raspberry_pi/pico", .file = "src/flash_program.zig" }, - .{ .name = "pico_gpio-clk", .target = "board:raspberry_pi/pico", .file = "src/gpio_clk.zig" }, - .{ .name = "pico_i2c-bus-scan", .target = "board:raspberry_pi/pico", .file = "src/i2c_bus_scan.zig" }, - .{ .name = "pico_pwm", .target = "board:raspberry_pi/pico", .file = "src/pwm.zig" }, - .{ .name = "pico_random", .target = "board:raspberry_pi/pico", .file = "src/random.zig" }, - .{ .name = "pico_spi-master", .target = "board:raspberry_pi/pico", .file = "src/spi_master.zig" }, - .{ .name = "pico_squarewave", .target = "board:raspberry_pi/pico", .file = "src/squarewave.zig" }, - .{ .name = "pico_uart", .target = "board:raspberry_pi/pico", .file = "src/uart.zig" }, - .{ .name = "pico_usb-device", .target = "board:raspberry_pi/pico", .file = "src/usb_device.zig" }, - .{ .name = "pico_usb-hid", .target = "board:raspberry_pi/pico", .file = "src/usb_hid.zig" }, - .{ .name = "pico_ws2812", .target = "board:raspberry_pi/pico", .file = "src/ws2812.zig" }, - - .{ .name = "rp2040-matrix_tiles", .target = "board:waveshare/rp2040_matrix", .file = "src/tiles.zig" }, + // RaspberryPi Boards: + .{ .target = "board:raspberry_pi/pico", .name = "pico_adc", .file = "src/adc.zig" }, + .{ .target = "board:raspberry_pi/pico", .name = "pico_blinky", .file = "src/blinky.zig" }, + .{ .target = "board:raspberry_pi/pico", .name = "pico_flash-program", .file = "src/flash_program.zig" }, + .{ .target = "board:raspberry_pi/pico", .name = "pico_gpio-clk", .file = "src/gpio_clk.zig" }, + .{ .target = "board:raspberry_pi/pico", .name = "pico_i2c-bus-scan", .file = "src/i2c_bus_scan.zig" }, + .{ .target = "board:raspberry_pi/pico", .name = "pico_pwm", .file = "src/pwm.zig" }, + .{ .target = "board:raspberry_pi/pico", .name = "pico_random", .file = "src/random.zig" }, + .{ .target = "board:raspberry_pi/pico", .name = "pico_spi-master", .file = "src/spi_master.zig" }, + .{ .target = "board:raspberry_pi/pico", .name = "pico_squarewave", .file = "src/squarewave.zig" }, + .{ .target = "board:raspberry_pi/pico", .name = "pico_uart", .file = "src/uart.zig" }, + .{ .target = "board:raspberry_pi/pico", .name = "pico_usb-device", .file = "src/usb_device.zig" }, + .{ .target = "board:raspberry_pi/pico", .name = "pico_usb-hid", .file = "src/usb_hid.zig" }, + .{ .target = "board:raspberry_pi/pico", .name = "pico_ws2812", .file = "src/ws2812.zig" }, + // TODO: Fix multicore hal! .{ .name = "pico", .target = "board:raspberry_pi/pico" , .file = "src/blinky_core1.zig" }, + + // WaveShare Boards: + .{ .target = "board:waveshare/rp2040_matrix", .name = "rp2040-matrix_tiles", .file = "src/tiles.zig" }, + // .{ .target = "board:waveshare/rp2040_eth", .name = "rp2040-eth" }, + // .{ .target = "board:waveshare/rp2040_plus_4m", .name = "rp2040-plus-4m" }, + // .{ .target = "board:waveshare/rp2040_plus_16m", .name = "rp2040-plus-16m" }, }; pub fn build(b: *std.Build) void { @@ -26,6 +30,9 @@ pub fn build(b: *std.Build) void { const optimize = b.standardOptimizeOption(.{}); + const show_targets_step = b.step("show-targets", "Shows all available MicroZig targets"); + show_targets_step.dependOn(microzig.getShowTargetsStep()); + for (available_examples) |example| { const target = microzig.findTarget(example.target).?; diff --git a/examples/raspberrypi-rp2040/build.zig.zon b/examples/raspberrypi-rp2040/build.zig.zon deleted file mode 100644 index 36711f611..000000000 --- a/examples/raspberrypi-rp2040/build.zig.zon +++ /dev/null @@ -1,18 +0,0 @@ -.{ - .name = "microzig-raspberrypi-rp2040-examples", - .version = "0.1.0", - .dependencies = .{ - .microzig = .{ - .url = "http://localhost:8080/microzig-build.tar.gz", - .hash = "1220db1de385b765aa45a04719c199d7ab8306fcca6ac1a12b487ed589a69d05a665", - }, - .@"microzig-core" = .{ - .url = "http://localhost:8080/microzig-core.tar.gz", - .hash = "122006d6343021c1502ceba7948fd61ac813f2bb498a74df27a50e34398ccdfb92e3", - }, - .@"microzig-bsp-rp2040" = .{ - .url = "http://localhost:8080/board-support/raspberrypi/rp2040.tar.gz", - .hash = "12200319b02d9d0237984fd7acb15a4945e5547b750e0a3309d13d62440983b5b67f", - }, - }, -} diff --git a/examples/raspberrypi-rp2040/microzig-package.json b/examples/raspberrypi-rp2040/microzig-package.json new file mode 100644 index 000000000..e0df92f41 --- /dev/null +++ b/examples/raspberrypi-rp2040/microzig-package.json @@ -0,0 +1,7 @@ +{ + "package_name": "raspberrypi/rp2040", + "package_type": "example", + "inner_dependencies": [ + "raspberrypi/rp2040" + ] +} \ No newline at end of file From 2e9df6032d58924d4cd8ddf1768fbe6abe7c40a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Mon, 5 Feb 2024 10:29:22 +0100 Subject: [PATCH 267/286] Tiny change in the rp2040 build --- examples/raspberrypi-rp2040/build.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/raspberrypi-rp2040/build.zig b/examples/raspberrypi-rp2040/build.zig index 57c701313..a09340503 100644 --- a/examples/raspberrypi-rp2040/build.zig +++ b/examples/raspberrypi-rp2040/build.zig @@ -16,7 +16,7 @@ const available_examples = [_]Example{ .{ .target = "board:raspberry_pi/pico", .name = "pico_usb-device", .file = "src/usb_device.zig" }, .{ .target = "board:raspberry_pi/pico", .name = "pico_usb-hid", .file = "src/usb_hid.zig" }, .{ .target = "board:raspberry_pi/pico", .name = "pico_ws2812", .file = "src/ws2812.zig" }, - // TODO: Fix multicore hal! .{ .name = "pico", .target = "board:raspberry_pi/pico" , .file = "src/blinky_core1.zig" }, + // TODO: Fix multicore hal! .{ .target = "board:raspberry_pi/pico", .name = "pico_multicore" , .file = "src/blinky_core1.zig" }, // WaveShare Boards: .{ .target = "board:waveshare/rp2040_matrix", .name = "rp2040-matrix_tiles", .file = "src/tiles.zig" }, From 7a33e6fd55a711f9fdce30fe83b39e7a9a8e3110 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Mon, 5 Feb 2024 13:15:56 +0100 Subject: [PATCH 268/286] Makes stm32 module build again. --- .gitignore | 1 + examples/raspberrypi-rp2040/build.zig | 1 - examples/stmicro-stm32/build.zig | 33 ++++---- examples/stmicro-stm32/build.zig.zon | 14 ---- examples/stmicro-stm32/microzig-package.json | 7 ++ tools/bundle.py | 37 ++------- tools/lib/common.py | 32 ++++++++ tools/validate-all-examples.sh | 11 +++ tools/validate-example.py | 85 ++++++++++++++++++++ 9 files changed, 163 insertions(+), 58 deletions(-) delete mode 100644 examples/stmicro-stm32/build.zig.zon create mode 100644 examples/stmicro-stm32/microzig-package.json create mode 100644 tools/lib/common.py create mode 100755 tools/validate-all-examples.sh create mode 100755 tools/validate-example.py diff --git a/.gitignore b/.gitignore index 1efc3f0f9..066031673 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ microzig-deploy/ .gdbinit .lldbinit .direnv/ +__pycache__/ \ No newline at end of file diff --git a/examples/raspberrypi-rp2040/build.zig b/examples/raspberrypi-rp2040/build.zig index a09340503..73fe7a290 100644 --- a/examples/raspberrypi-rp2040/build.zig +++ b/examples/raspberrypi-rp2040/build.zig @@ -27,7 +27,6 @@ const available_examples = [_]Example{ pub fn build(b: *std.Build) void { const microzig = MicroZig.createBuildEnvironment(b, .{}); - const optimize = b.standardOptimizeOption(.{}); const show_targets_step = b.step("show-targets", "Shows all available MicroZig targets"); diff --git a/examples/stmicro-stm32/build.zig b/examples/stmicro-stm32/build.zig index 471a7276d..653f83407 100644 --- a/examples/stmicro-stm32/build.zig +++ b/examples/stmicro-stm32/build.zig @@ -1,22 +1,27 @@ const std = @import("std"); -const stm32 = @import("stm32"); +const MicroZig = @import("microzig-build"); const available_examples = [_]Example{ - .{ .name = "stm32f103x8", .target = stm32.chips.stm32f103x8, .file = "src/blinky.zig" }, - // TODO: .{ .name = "stm32f303vc", .target = stm32.chips.stm32f303vc, .file = "src/blinky.zig" }, - // TODO: .{ .name = "stm32f407vg", .target = stm32.chips.stm32f407vg, .file = "src/blinky.zig" }, - // TODO: .{ .name = "stm32f429zit6u", .target = stm32.chips.stm32f429zit6u, .file = "src/blinky.zig" }, - // TODO: .{ .name = "stm32f3discovery", .target = stm32.boards.stm32f3discovery, .file = "src/blinky.zig" }, - // TODO: .{ .name = "stm32f4discovery", .target = stm32.boards.stm32f4discovery, .file = "src/blinky.zig" }, - // TODO: .{ .name = "stm3240geval", .target = stm32.boards.stm3240geval, .file = "src/blinky.zig" }, - // TODO: .{ .name = "stm32f429idiscovery", .target = stm32.boards.stm32f429idiscovery, .file = "src/blinky.zig" }, + .{ .target = "chip:stm32f103x8",.name = "stm32f103x8", .file = "src/blinky.zig" }, + // TODO: .{ .target = "chip:stm32f303vc", .name = "stm32f303vc", .file = "src/blinky.zig" }, + // TODO: .{ .target = "chip:stm32f407vg", .name = "stm32f407vg", .file = "src/blinky.zig" }, + // TODO: .{ .target = "chip:stm32f429zit6u", .name = "stm32f429zit6u", .file = "src/blinky.zig" }, + // TODO: .{ .target = "board:stm32f3discovery", .name = "stm32f3discovery", .file = "src/blinky.zig" }, + // TODO: .{ .target = "board:stm32f4discovery", .name = "stm32f4discovery", .file = "src/blinky.zig" }, + // TODO: .{ .target = "board:stm3240geval", .name = "stm3240geval", .file = "src/blinky.zig" }, + // TODO: .{ .target = "board:stm32f429idiscovery", .name = "stm32f429idiscovery", .file = "src/blinky.zig" }, }; pub fn build(b: *std.Build) void { - const microzig = @import("microzig").init(b, "microzig"); - const optimize = .ReleaseSmall; // The others are not really an option on AVR + const microzig = MicroZig.createBuildEnvironment(b, .{}); + const optimize = b.standardOptimizeOption(.{}); + + const show_targets_step = b.step("show-targets", "Shows all available MicroZig targets"); + show_targets_step.dependOn(microzig.getShowTargetsStep()); for (available_examples) |example| { + const target = microzig.findTarget(example.target).?; + // `addFirmware` basically works like addExecutable, but takes a // `microzig.Target` for target instead of a `std.zig.CrossTarget`. // @@ -24,7 +29,7 @@ pub fn build(b: *std.Build) void { // cpu and potentially the board as well. const firmware = microzig.addFirmware(b, .{ .name = example.name, - .target = example.target, + .target = target, .optimize = optimize, .source_file = .{ .path = example.file }, }); @@ -41,7 +46,7 @@ pub fn build(b: *std.Build) void { } const Example = struct { - target: @import("microzig").Target, + target: []const u8, name: []const u8, file: []const u8, -}; +}; \ No newline at end of file diff --git a/examples/stmicro-stm32/build.zig.zon b/examples/stmicro-stm32/build.zig.zon deleted file mode 100644 index b6063eabc..000000000 --- a/examples/stmicro-stm32/build.zig.zon +++ /dev/null @@ -1,14 +0,0 @@ -.{ - .name = "microzig-stmicro-stm32-examples", - .version = "0.1.0", - .dependencies = .{ - .microzig = .{ - .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/c6c9ec4516f57638e751141085c9d76120990312.tar.gz", - .hash = "1220af58bdaa721b8189f3a7adfda660517dd354463463388e96d69fe4ceccf80b92", - }, - .stm32 = .{ - .url = "https://github.com/ZigEmbeddedGroup/stmicro-stm32/archive/237890d49ee795110a63df2c45bdd6f6a0029a72.tar.gz", - .hash = "1220960897777f9713fa1055ffdf1fbad1518b2f62bd2f2ae39b887821dbf0781df0", - }, - }, -} diff --git a/examples/stmicro-stm32/microzig-package.json b/examples/stmicro-stm32/microzig-package.json new file mode 100644 index 000000000..674b76e6d --- /dev/null +++ b/examples/stmicro-stm32/microzig-package.json @@ -0,0 +1,7 @@ +{ + "package_name": "stmicro/stm32", + "package_type": "example", + "inner_dependencies": [ + "stmicro/stm32" + ] +} \ No newline at end of file diff --git a/tools/bundle.py b/tools/bundle.py index 4878ccbb7..4e0e2155e 100755 --- a/tools/bundle.py +++ b/tools/bundle.py @@ -7,7 +7,7 @@ # -import sys, os, subprocess,datetime, re, shutil, json, hashlib +import sys, os, datetime, re, shutil, json, hashlib from pathlib import Path, PurePosixPath from dataclasses import dataclass, field from dataclasses_json import dataclass_json, config as dcj_config, Exclude as JsonExclude @@ -18,9 +18,14 @@ import stat import tarfile + + from marshmallow import fields as mm_fields from typing import Optional, Any +from lib.common import execute_raw, execute, slurp, check_zig_version, check_required_tools +import lib.common as common + LEGAL_PACKAGE_NAME = re.compile("^[A-Za-z]$") VERBOSE = False @@ -36,7 +41,7 @@ assert REPO_ROOT.is_dir() - +common.VERBOSE = VERBOSE class PackageType(StrEnum): build = "build" @@ -138,34 +143,8 @@ def file_digest(path: Path, hashfunc) -> bytes: def file_type(path: Path) -> str: return FILE_STAT_MAP[stat.S_IFMT( path.stat().st_mode)] -def execute_raw(*args,hide_stderr = False,**kwargs): - args = [ str(f) for f in args] - if VERBOSE: - print(*args) - res = subprocess.run(args, **kwargs, check=False) - if res.stderr is not None and (not hide_stderr or res.returncode != 0): - sys.stderr.buffer.write(res.stderr) - if res.returncode != 0: - sys.stderr.write(f"command {' '.join(args)} failed with exit code {res.returncode}") - sys.exit(res.returncode) - return res - -def execute(*args,**kwargs): - execute_raw(*args, **kwargs, capture_output=False) - -def slurp(*args, **kwargs): - res = execute_raw(*args, **kwargs, capture_output=True) - return res.stdout - -def check_required_tools(): - for tool in REQUIRED_TOOLS: - slurp("which", tool) -def check_zig_version(expected): - actual = slurp("zig", "version") - if actual.strip() != expected.encode(): - raise RuntimeError(f"Unexpected zig version! Expected {expected}, but found {actual.strip()}!") def build_zig_tools(): # ensure we have our tools available: @@ -251,7 +230,7 @@ def get_batch_timestamp(): def main(): - check_required_tools() + check_required_tools(REQUIRED_TOOLS) check_zig_version("0.11.0") diff --git a/tools/lib/common.py b/tools/lib/common.py new file mode 100644 index 000000000..4d72ca906 --- /dev/null +++ b/tools/lib/common.py @@ -0,0 +1,32 @@ + +import subprocess, sys + +VERBOSE = False + +def execute_raw(*args,hide_stderr = False,**kwargs): + args = [ str(f) for f in args] + if VERBOSE: + print(*args) + res = subprocess.run(args, **kwargs, check=False) + if res.stderr is not None and (not hide_stderr or res.returncode != 0): + sys.stderr.buffer.write(res.stderr) + if res.returncode != 0: + sys.stderr.write(f"command {' '.join(args)} failed with exit code {res.returncode}") + sys.exit(res.returncode) + return res + +def execute(*args,**kwargs): + execute_raw(*args, **kwargs, capture_output=False) + +def slurp(*args, **kwargs): + res = execute_raw(*args, **kwargs, capture_output=True) + return res.stdout + +def check_zig_version(expected): + actual = slurp("zig", "version") + if actual.strip() != expected.encode(): + raise RuntimeError(f"Unexpected zig version! Expected {expected}, but found {actual.strip()}!") + +def check_required_tools(tools): + for tool in tools: + slurp("which", tool) \ No newline at end of file diff --git a/tools/validate-all-examples.sh b/tools/validate-all-examples.sh new file mode 100755 index 000000000..494efb87c --- /dev/null +++ b/tools/validate-all-examples.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +set -e + +root="$(dirname "$(realpath "$0")")" +tmpdir="/tmp/microzig-test" + +mkdir -p "${tmpdir}" + +"${root}/validate-example.py" --build-root "${tmpdir}" --example raspberrypi/rp2040 +"${root}/validate-example.py" --build-root "${tmpdir}" --example stmicro/stm32 diff --git a/tools/validate-example.py b/tools/validate-example.py new file mode 100755 index 000000000..12dac7bd8 --- /dev/null +++ b/tools/validate-example.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 + + +from lib.common import execute_raw, execute, slurp, check_zig_version, check_required_tools +from pathlib import Path, PurePosixPath +import argparse +import sys +import shutil + +REQUIRED_TOOLS = ["zig", "curl", "tar", "gunzip"] + + +def main(): + + check_required_tools(REQUIRED_TOOLS) + + check_zig_version("0.11.0") + + parser = argparse.ArgumentParser() + + parser.add_argument("--example", type=PurePosixPath, required=True) + parser.add_argument("--build-root", type=Path, required=True) + args = parser.parse_args() + + example_id: PurePosixPath = args.example + build_root: Path = args.build_root + + if len(example_id.parents) != 2 or str(example_id.parents[1]) != ".": + print(f"example must be /", file=sys.stderr) + exit(1) + + + example_group: str = example_id.parent.name + example_name: str = example_id.name + + if not build_root.is_dir(): + print(f"{build_root} is not a directory", file=sys.stderr) + exit(1) + + execute( + "curl", + "-o", + f"{example_name}.tar.gz", + f"https://public.devspace.random-projects.net/examples/{example_group}/{example_name}.tar.gz", + cwd=build_root, + ) + + any_path = slurp( + "tar", + "-tf", + f"{example_name}.tar.gz", + cwd=build_root, + ).splitlines()[0].decode() + + root_folder_name = any_path.split(sep='/')[0] + + example_build_root = build_root / root_folder_name + + if example_build_root.exists(): + shutil.rmtree(example_build_root) + + execute( + "tar", + "-xf", + f"{example_name}.tar.gz", + cwd=build_root, + ) + + # print(list(example_build_root.glob("*"))) + + execute( + "zig", + "build", + cwd = example_build_root, + ) + + out_dir = example_build_root / "zig-out" + + print("all files:") + for path in out_dir.rglob("*"): + if path.is_file(): + print(f"- {path}") + +if __name__ == "__main__": + main() From 71e60e3c4435220fcfdb3248d7c5e86b9b098b71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Mon, 5 Feb 2024 18:02:22 +0100 Subject: [PATCH 269/286] Makes nxp/lpc and nordic/nrf5x examples, fixes bug in build.zig.zon generation --- .../nordic-nrf5x/microzig-package.json | 6 ++-- examples/nordic-nrf5x/build.zig | 15 ++++++--- examples/nordic-nrf5x/build.zig.zon | 14 -------- examples/nordic-nrf5x/microzig-package.json | 7 ++++ examples/nxp-lpc/build.zig | 15 ++++++--- examples/nxp-lpc/build.zig.zon | 14 -------- examples/nxp-lpc/microzig-package.json | 7 ++++ tools/create-pkg-descriptor.zig | 32 +++++++++++++++---- tools/validate-all-examples.sh | 1 + tools/validate-example.py | 2 -- 10 files changed, 64 insertions(+), 49 deletions(-) delete mode 100644 examples/nordic-nrf5x/build.zig.zon create mode 100644 examples/nordic-nrf5x/microzig-package.json delete mode 100644 examples/nxp-lpc/build.zig.zon create mode 100644 examples/nxp-lpc/microzig-package.json diff --git a/board-support/nordic-nrf5x/microzig-package.json b/board-support/nordic-nrf5x/microzig-package.json index 7be87c111..5697daad1 100644 --- a/board-support/nordic-nrf5x/microzig-package.json +++ b/board-support/nordic-nrf5x/microzig-package.json @@ -1,4 +1,4 @@ { - "package_name": "nordic/nrf52", - "package_type": "board-support" -} + "package_name": "nordic/nrf5x", + "package_type": "board-support" +} \ No newline at end of file diff --git a/examples/nordic-nrf5x/build.zig b/examples/nordic-nrf5x/build.zig index 85a2b6f17..8b200d194 100644 --- a/examples/nordic-nrf5x/build.zig +++ b/examples/nordic-nrf5x/build.zig @@ -1,15 +1,20 @@ const std = @import("std"); -const nrf5x = @import("nrf5x"); +const MicroZig = @import("microzig-build"); const available_examples = [_]Example{ - .{ .name = "nrf52480-dongle_blinky", .target = nrf5x.boards.nordic.nRF52840_Dongle, .file = "src/blinky.zig" }, + .{ .target = "board:nordic/nRF52840_Dongle", .name = "nrf52480-dongle_blinky", .file = "src/blinky.zig" }, }; pub fn build(b: *std.Build) void { - const microzig = @import("microzig").init(b, "microzig"); + const microzig = MicroZig.createBuildEnvironment(b, .{}); const optimize = b.standardOptimizeOption(.{}); + const show_targets_step = b.step("show-targets", "Shows all available MicroZig targets"); + show_targets_step.dependOn(microzig.getShowTargetsStep()); + for (available_examples) |example| { + const target = microzig.findTarget(example.target).?; + // `addFirmware` basically works like addExecutable, but takes a // `microzig.Target` for target instead of a `std.zig.CrossTarget`. // @@ -17,7 +22,7 @@ pub fn build(b: *std.Build) void { // cpu and potentially the board as well. const firmware = microzig.addFirmware(b, .{ .name = example.name, - .target = example.target, + .target = target, .optimize = optimize, .source_file = .{ .path = example.file }, }); @@ -34,7 +39,7 @@ pub fn build(b: *std.Build) void { } const Example = struct { - target: @import("microzig").Target, + target: []const u8, name: []const u8, file: []const u8, }; diff --git a/examples/nordic-nrf5x/build.zig.zon b/examples/nordic-nrf5x/build.zig.zon deleted file mode 100644 index 2034409a0..000000000 --- a/examples/nordic-nrf5x/build.zig.zon +++ /dev/null @@ -1,14 +0,0 @@ -.{ - .name = "microzig-nordic-nrf5x-examples", - .version = "0.1.0", - .dependencies = .{ - .microzig = .{ - .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/c6c9ec4516f57638e751141085c9d76120990312.tar.gz", - .hash = "1220af58bdaa721b8189f3a7adfda660517dd354463463388e96d69fe4ceccf80b92", - }, - .nrf5x = .{ - .url = "https://github.com/ZigEmbeddedGroup/nordic-nrf5x/archive/0ab136860ccf7eb1d07969c3ef523f3cd898e2ff.tar.gz", - .hash = "1220980da06f9634dcff06afefa7aa111bd030018fea49f79e86657dab69621e1d08", - }, - }, -} diff --git a/examples/nordic-nrf5x/microzig-package.json b/examples/nordic-nrf5x/microzig-package.json new file mode 100644 index 000000000..a3c636ec7 --- /dev/null +++ b/examples/nordic-nrf5x/microzig-package.json @@ -0,0 +1,7 @@ +{ + "package_name": "nordic/nrf5x", + "package_type": "example", + "inner_dependencies": [ + "nordic/nrf5x" + ] +} \ No newline at end of file diff --git a/examples/nxp-lpc/build.zig b/examples/nxp-lpc/build.zig index a6f0b305f..b43360d96 100644 --- a/examples/nxp-lpc/build.zig +++ b/examples/nxp-lpc/build.zig @@ -1,15 +1,20 @@ const std = @import("std"); -const lpc = @import("lpc"); +const MicroZig = @import("microzig-build"); const available_examples = [_]ExampleDesc{ - .{ .name = "mbed-lpc1768_blinky", .target = lpc.boards.mbed.lpc1768, .file = "src/blinky.zig" }, + .{ .target = "board:mbed/lpc1768", .name = "mbed-lpc1768_blinky", .file = "src/blinky.zig" }, }; pub fn build(b: *std.Build) void { - const microzig = @import("microzig").init(b, "microzig"); + const microzig = MicroZig.createBuildEnvironment(b, .{}); const optimize = b.standardOptimizeOption(.{}); + const show_targets_step = b.step("show-targets", "Shows all available MicroZig targets"); + show_targets_step.dependOn(microzig.getShowTargetsStep()); + for (available_examples) |example| { + const target = microzig.findTarget(example.target).?; + // `addFirmware` basically works like addExecutable, but takes a // `microzig.Target` for target instead of a `std.zig.CrossTarget`. // @@ -17,7 +22,7 @@ pub fn build(b: *std.Build) void { // cpu and potentially the board as well. const firmware = microzig.addFirmware(b, .{ .name = example.name, - .target = example.target, + .target = target, .optimize = optimize, .source_file = .{ .path = example.file }, }); @@ -34,7 +39,7 @@ pub fn build(b: *std.Build) void { } const ExampleDesc = struct { - target: @import("microzig").Target, + target: []const u8, name: []const u8, file: []const u8, }; diff --git a/examples/nxp-lpc/build.zig.zon b/examples/nxp-lpc/build.zig.zon deleted file mode 100644 index aa5a11a05..000000000 --- a/examples/nxp-lpc/build.zig.zon +++ /dev/null @@ -1,14 +0,0 @@ -.{ - .name = "microzig-nxp-lpc-examples", - .version = "0.1.0", - .dependencies = .{ - .microzig = .{ - .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/c6c9ec4516f57638e751141085c9d76120990312.tar.gz", - .hash = "1220af58bdaa721b8189f3a7adfda660517dd354463463388e96d69fe4ceccf80b92", - }, - .lpc = .{ - .url = "https://github.com/ZigEmbeddedGroup/nxp-lpc/archive/130a1316c0892415e7da958a5e9548ed87bba54d.tar.gz", - .hash = "1220165879f85a1d51656d35b3963a95f3585dc665fc7414f76aa6aad4e6635536cf", - }, - }, -} diff --git a/examples/nxp-lpc/microzig-package.json b/examples/nxp-lpc/microzig-package.json new file mode 100644 index 000000000..32638dd0f --- /dev/null +++ b/examples/nxp-lpc/microzig-package.json @@ -0,0 +1,7 @@ +{ + "package_name": "nxp/lpc", + "package_type": "example", + "inner_dependencies": [ + "nxp/lpc" + ] +} \ No newline at end of file diff --git a/tools/create-pkg-descriptor.zig b/tools/create-pkg-descriptor.zig index 13dd89957..8b0625312 100644 --- a/tools/create-pkg-descriptor.zig +++ b/tools/create-pkg-descriptor.zig @@ -34,18 +34,21 @@ const Timestamp = struct { }; const MetaData = struct { - const Type = enum { - @"board-support", - core, - build, - example, + const Type = enum(u32) { + // we "abuse" the enum value here to map our keys to a priority mapping: + // Zig 0.11 must have dependencies with inner dependencies in the right order, + // otherwise the build system won't find the dependencies: + build = 0, // must always be first + core = 300, + @"board-support" = 500, + example = 900, }; package_name: []const u8, package_type: Type, version: []const u8, - inner_dependencies: []const []const u8 = &.{}, + inner_dependencies: [][]const u8 = &.{}, external_dependencies: std.json.Value = .null, archive: ?Archive = null, @@ -122,6 +125,8 @@ pub fn main() !void { } } + std.sort.block([]const u8, package.inner_dependencies, all_packages, orderPackagesByPriority); + // Add all other dependencies: for (package.inner_dependencies) |dep_name| { const dep = findPackage(all_packages, dep_name).?; @@ -140,3 +145,18 @@ pub fn main() !void { try buffered_stdout.flush(); } + +fn orderPackagesByPriority(mt: []MetaData, lhs_name: []const u8, rhs_name: []const u8) bool { + const rhs = findPackage(mt, rhs_name).?; + const lhs = findPackage(mt, lhs_name).?; + + const rhs_prio = @intFromEnum(rhs.package_type); + const lhs_prio = @intFromEnum(lhs.package_type); + + if (lhs_prio < rhs_prio) + return true; + if (lhs_prio > rhs_prio) + return false; + + return std.ascii.lessThanIgnoreCase(lhs_name, rhs_name); +} diff --git a/tools/validate-all-examples.sh b/tools/validate-all-examples.sh index 494efb87c..bf50cde70 100755 --- a/tools/validate-all-examples.sh +++ b/tools/validate-all-examples.sh @@ -9,3 +9,4 @@ mkdir -p "${tmpdir}" "${root}/validate-example.py" --build-root "${tmpdir}" --example raspberrypi/rp2040 "${root}/validate-example.py" --build-root "${tmpdir}" --example stmicro/stm32 +"${root}/validate-example.py" --build-root "${tmpdir}" --example nxp/lpc diff --git a/tools/validate-example.py b/tools/validate-example.py index 12dac7bd8..d04c8afd0 100755 --- a/tools/validate-example.py +++ b/tools/validate-example.py @@ -66,8 +66,6 @@ def main(): cwd=build_root, ) - # print(list(example_build_root.glob("*"))) - execute( "zig", "build", From 2ef68047de25e308ccd43264a81113ed6839e3a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Tue, 6 Feb 2024 09:20:43 +0100 Subject: [PATCH 270/286] Adds up navigation in dev server --- tools/demo-server.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tools/demo-server.py b/tools/demo-server.py index 68545df8d..6ef5a8755 100755 --- a/tools/demo-server.py +++ b/tools/demo-server.py @@ -59,12 +59,18 @@ def list_directory(self, path): r.append('%s\n' % title) r.append('\n

    %s

    ' % title) r.append('
    \n
      ') + + suffix = path.removeprefix(self.directory) + + if suffix != "/": + r.append('
    • ..
    • ') + for name in list: fullname = os.path.join(path, name) displayname = linkname = name if name.startswith("."): # ignore "hidden" directories - continue + continue # Append / for directories or @ for symbolic links if os.path.isdir(fullname): displayname = name + "/" From 7dd20383fb389d2daa9d1c7b49cdc3f68f0cd38a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Tue, 6 Feb 2024 11:16:37 +0100 Subject: [PATCH 271/286] Adds examples for espressif/esp, gigadevice/gd32 --- .gitignore | 2 +- examples/espressif-esp/build.zig | 66 +++++++++---------- examples/espressif-esp/build.zig.zon | 18 ----- examples/espressif-esp/microzig-package.json | 7 ++ examples/gigadevice-gd32/build.zig | 21 +++--- examples/gigadevice-gd32/build.zig.zon | 14 ---- .../gigadevice-gd32/microzig-package.json | 7 ++ examples/gigadevice-gd32/src/empty.zig | 6 ++ 8 files changed, 67 insertions(+), 74 deletions(-) delete mode 100644 examples/espressif-esp/build.zig.zon create mode 100644 examples/espressif-esp/microzig-package.json delete mode 100644 examples/gigadevice-gd32/build.zig.zon create mode 100644 examples/gigadevice-gd32/microzig-package.json create mode 100644 examples/gigadevice-gd32/src/empty.zig diff --git a/.gitignore b/.gitignore index 066031673..3f1d472a5 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,4 @@ microzig-deploy/ .gdbinit .lldbinit .direnv/ -__pycache__/ \ No newline at end of file +__pycache__/ diff --git a/examples/espressif-esp/build.zig b/examples/espressif-esp/build.zig index 08dcceeb0..8e2b58401 100644 --- a/examples/espressif-esp/build.zig +++ b/examples/espressif-esp/build.zig @@ -1,45 +1,45 @@ const std = @import("std"); -const esp = @import("esp"); +const MicroZig = @import("microzig-build"); -const available_targets = [_]TargetDesc{ - .{ .name = "esp32-c3", .target = esp.chips.esp32_c3 }, -}; - -const available_examples = [_][]const u8{ - "src/blinky.zig", +const available_examples = [_]Example{ + .{ .target = "chip:esp32_c3", .name = "esp32-c3_blinky", .file = "src/blinky.zig" }, }; pub fn build(b: *std.Build) void { - const microzig = @import("microzig").init(b, "microzig"); + const microzig = MicroZig.createBuildEnvironment(b, .{}); const optimize = b.standardOptimizeOption(.{}); - for (available_targets) |target| { - for (available_examples) |example| { - // `addFirmware` basically works like addExecutable, but takes a - // `microzig.Target` for target instead of a `std.zig.CrossTarget`. - // - // The target will convey all necessary information on the chip, - // cpu and potentially the board as well. - const firmware = microzig.addFirmware(b, .{ - .name = b.fmt("{s}-{s}", .{ std.fs.path.stem(example), target.name }), - .target = target.target, - .optimize = optimize, - .source_file = .{ .path = example }, - }); - - // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()` - // and allows installing the firmware as a typical firmware file. - // - // This will also install into `$prefix/firmware` instead of `$prefix/bin`. - microzig.installFirmware(b, firmware, .{}); - - // For debugging, we also always install the firmware as an ELF file - microzig.installFirmware(b, firmware, .{ .format = .elf }); - } + const show_targets_step = b.step("show-targets", "Shows all available MicroZig targets"); + show_targets_step.dependOn(microzig.getShowTargetsStep()); + + for (available_examples) |example| { + const target = microzig.findTarget(example.target).?; + + // `addFirmware` basically works like addExecutable, but takes a + // `microzig.Target` for target instead of a `std.zig.CrossTarget`. + // + // The target will convey all necessary information on the chip, + // cpu and potentially the board as well. + const firmware = microzig.addFirmware(b, .{ + .name = example.name, + .target = target, + .optimize = optimize, + .source_file = .{ .path = example.file }, + }); + + // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()` + // and allows installing the firmware as a typical firmware file. + // + // This will also install into `$prefix/firmware` instead of `$prefix/bin`. + microzig.installFirmware(b, firmware, .{}); + + // For debugging, we also always install the firmware as an ELF file + microzig.installFirmware(b, firmware, .{ .format = .elf }); } } -const TargetDesc = struct { - target: @import("microzig").Target, +const Example = struct { + target: []const u8, name: []const u8, + file: []const u8, }; diff --git a/examples/espressif-esp/build.zig.zon b/examples/espressif-esp/build.zig.zon deleted file mode 100644 index 5fc8d3025..000000000 --- a/examples/espressif-esp/build.zig.zon +++ /dev/null @@ -1,18 +0,0 @@ -.{ - .name = "microzig-nxp-lpc-examples", - .version = "0.1.0", - .dependencies = .{ - .microzig = .{ - .url = "https://public.devspace.random-projects.net/packages/microzig-build.tar.gz", - .hash = "1220db1de385b765aa45a04719c199d7ab8306fcca6ac1a12b487ed589a69d05a665", - }, - .@"microzig-core" = .{ - .url = "https://public.devspace.random-projects.net/packages/microzig-core.tar.gz", - .hash = "1220f72de650278d4184dd4a43992189246b520a5c137b54fca05d7a44df8b828267", - }, - .@"microzig-bsp-rp2040" = .{ - .url = "https://public.devspace.random-projects.net/packages/board-support/raspberrypi/rp2040.tar.gz", - .hash = "1220b170e56d2bd85b96bd8b7f40f2890cf9926da2fcb86967e466a3c87486f31c43", - }, - }, -} diff --git a/examples/espressif-esp/microzig-package.json b/examples/espressif-esp/microzig-package.json new file mode 100644 index 000000000..162a6c7fb --- /dev/null +++ b/examples/espressif-esp/microzig-package.json @@ -0,0 +1,7 @@ +{ + "package_name": "espressif/esp", + "package_type": "example", + "inner_dependencies": [ + "espressif/esp" + ] +} \ No newline at end of file diff --git a/examples/gigadevice-gd32/build.zig b/examples/gigadevice-gd32/build.zig index b7a2e4cf7..7783f3f0e 100644 --- a/examples/gigadevice-gd32/build.zig +++ b/examples/gigadevice-gd32/build.zig @@ -1,17 +1,22 @@ const std = @import("std"); -const gd32 = @import("gd32"); +const MicroZig = @import("microzig-build"); const available_examples = [_]Example{ - // .{ .name = "gd32vf103xb", .target = gd32.chips.gd32vf103xb, .file = "src/blinky.zig" }, - // .{ .name = "gd32vf103x8", .target = gd32.chips.gd32vf103x8, .file = "src/blinky.zig" }, - // .{ .name = "sipeed-longan_nano", .target = gd32.boards.sipeed.longan_nano, .file = "src/blinky.zig" }, + .{ .target = "chip:gd32vf103xb", .name = "gd32vf103xb", .file = "src/empty.zig" }, + .{ .target = "chip:gd32vf103x8", .name = "gd32vf103x8", .file = "src/empty.zig" }, + .{ .target = "board:sipeed/longan_nano", .name = "sipeed-longan_nano", .file = "src/empty.zig" }, }; pub fn build(b: *std.Build) void { - const microzig = @import("microzig").init(b, "microzig"); - const optimize = .ReleaseSmall; // The others are not really an option on AVR + const microzig = MicroZig.createBuildEnvironment(b, .{}); + const optimize = b.standardOptimizeOption(.{}); + + const show_targets_step = b.step("show-targets", "Shows all available MicroZig targets"); + show_targets_step.dependOn(microzig.getShowTargetsStep()); for (available_examples) |example| { + const target = microzig.findTarget(example.target).?; + // `addFirmware` basically works like addExecutable, but takes a // `microzig.Target` for target instead of a `std.zig.CrossTarget`. // @@ -19,7 +24,7 @@ pub fn build(b: *std.Build) void { // cpu and potentially the board as well. const firmware = microzig.addFirmware(b, .{ .name = example.name, - .target = example.target, + .target = target, .optimize = optimize, .source_file = .{ .path = example.file }, }); @@ -36,7 +41,7 @@ pub fn build(b: *std.Build) void { } const Example = struct { - target: @import("microzig").Target, + target: []const u8, name: []const u8, file: []const u8, }; diff --git a/examples/gigadevice-gd32/build.zig.zon b/examples/gigadevice-gd32/build.zig.zon deleted file mode 100644 index 2cfeaae93..000000000 --- a/examples/gigadevice-gd32/build.zig.zon +++ /dev/null @@ -1,14 +0,0 @@ -.{ - .name = "microzig-gigadevice-gd32-examples", - .version = "0.1.0", - .dependencies = .{ - .microzig = .{ - .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/c6c9ec4516f57638e751141085c9d76120990312.tar.gz", - .hash = "1220af58bdaa721b8189f3a7adfda660517dd354463463388e96d69fe4ceccf80b92", - }, - .gd32 = .{ - .url = "https://github.com/ZigEmbeddedGroup/gigadevice-gd32/archive/9324753cc3b8e7afe83fcda085bcfe76681a3be3.tar.gz", - .hash = "122043ff4dcbc342f25dbb936b0d9eaa701ac3509e2cbe6764be37b90d31c7a385d0", - }, - }, -} diff --git a/examples/gigadevice-gd32/microzig-package.json b/examples/gigadevice-gd32/microzig-package.json new file mode 100644 index 000000000..a4815bb59 --- /dev/null +++ b/examples/gigadevice-gd32/microzig-package.json @@ -0,0 +1,7 @@ +{ + "package_name": "gigadevice/gd32", + "package_type": "example", + "inner_dependencies": [ + "gigadevice/gd32" + ] +} \ No newline at end of file diff --git a/examples/gigadevice-gd32/src/empty.zig b/examples/gigadevice-gd32/src/empty.zig new file mode 100644 index 000000000..7c6dbbe42 --- /dev/null +++ b/examples/gigadevice-gd32/src/empty.zig @@ -0,0 +1,6 @@ +const std = @import("std"); +const microzig = @import("microzig"); + +pub fn main() void { + // +} From 2878ae6e194a591465c42b6d457b884b6ce9d551 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Wed, 7 Feb 2024 10:23:04 +0100 Subject: [PATCH 272/286] Makes microchip/atsam example and bsp work --- .../{ => src}/chips/ATSAMD51J19A.atdf | 0 examples/all-platforms/build.zig | 84 ------------------- examples/all-platforms/build.zig.zon | 38 --------- examples/all-platforms/src/blinky.zig | 20 ----- examples/all-platforms/src/empty.zig | 6 -- examples/build.zig | 28 ------- examples/microchip-atsam/build.zig | 45 ++++++++++ .../microchip-atsam/microzig-package.json | 7 ++ .../src/blinky.zig} | 4 +- examples/next-gen/build.zig | 23 ----- examples/next-gen/build.zig.zon | 22 ----- tools/validate-all-examples.sh | 8 +- 12 files changed, 58 insertions(+), 227 deletions(-) rename board-support/microchip-atsam/{ => src}/chips/ATSAMD51J19A.atdf (100%) delete mode 100644 examples/all-platforms/build.zig delete mode 100644 examples/all-platforms/build.zig.zon delete mode 100644 examples/all-platforms/src/blinky.zig delete mode 100644 examples/all-platforms/src/empty.zig delete mode 100644 examples/build.zig create mode 100644 examples/microchip-atsam/build.zig create mode 100644 examples/microchip-atsam/microzig-package.json rename examples/{next-gen/src/empty.zig => microchip-atsam/src/blinky.zig} (58%) delete mode 100644 examples/next-gen/build.zig delete mode 100644 examples/next-gen/build.zig.zon diff --git a/board-support/microchip-atsam/chips/ATSAMD51J19A.atdf b/board-support/microchip-atsam/src/chips/ATSAMD51J19A.atdf similarity index 100% rename from board-support/microchip-atsam/chips/ATSAMD51J19A.atdf rename to board-support/microchip-atsam/src/chips/ATSAMD51J19A.atdf diff --git a/examples/all-platforms/build.zig b/examples/all-platforms/build.zig deleted file mode 100644 index 6cf3b48ad..000000000 --- a/examples/all-platforms/build.zig +++ /dev/null @@ -1,84 +0,0 @@ -const std = @import("std"); -const rp2040 = @import("rp2040"); -const stm32 = @import("stm32"); -const lpc = @import("lpc"); -const gd32 = @import("gd32"); -const nrf5x = @import("nrf5x"); -const esp = @import("esp"); -const atmega = @import("atmega"); - -const available_targets = [_]TargetDesc{ - // RP2040 - .{ .name = "pico", .target = rp2040.boards.raspberry_pi.pico }, - .{ .name = "rp2040-eth", .target = rp2040.boards.waveshare.rp2040_eth }, - .{ .name = "rp2040-plus-4m", .target = rp2040.boards.waveshare.rp2040_plus_4m }, - .{ .name = "rp2040-plus-16m", .target = rp2040.boards.waveshare.rp2040_plus_16m }, - .{ .name = "rp2040-matrix", .target = rp2040.boards.waveshare.rp2040_matrix }, - - // STM32 - .{ .name = "stm32f103x8", .target = stm32.chips.stm32f103x8 }, - .{ .name = "stm32f303vc", .target = stm32.chips.stm32f303vc }, - .{ .name = "stm32f407vg", .target = stm32.chips.stm32f407vg }, - .{ .name = "stm32f429zit6u", .target = stm32.chips.stm32f429zit6u }, - .{ .name = "stm32f3discovery", .target = stm32.boards.stm32f3discovery }, - .{ .name = "stm32f4discovery", .target = stm32.boards.stm32f4discovery }, - .{ .name = "stm3240geval", .target = stm32.boards.stm3240geval }, - .{ .name = "stm32f429idiscovery", .target = stm32.boards.stm32f429idiscovery }, - - // NXP LPC - .{ .name = "lpc176x5x", .target = lpc.chips.lpc176x5x }, - .{ .name = "mbed-lpc1768", .target = lpc.boards.mbed.lpc1768 }, - - // GigaDevice GD32 - .{ .name = "gd32vf103xb", .target = gd32.chips.gd32vf103xb }, - .{ .name = "gd32vf103x8", .target = gd32.chips.gd32vf103x8 }, - .{ .name = "sipeed-longan_nano", .target = gd32.boards.sipeed.longan_nano }, - - // Nordic Nrf5x - .{ .name = "nrf52832", .target = nrf5x.chips.nrf52832 }, - .{ .name = "nrf52840", .target = nrf5x.chips.nrf52840 }, - .{ .name = "nrf52840-dongle", .target = nrf5x.boards.nordic.nRF52840_Dongle }, // TODO: Add support for DFU files! - - // RISC-V Espressif ESP - .{ .name = "esp32-c3", .target = esp.chips.esp32_c3 }, // TODO: Add support for Espressif Update Binaries - - // Microchip ATmega - // TODO: Fix compiler bugs - // - https://github.com/ziglang/zig/issues/17219 - // .{ .name = "atmega328p", .target = atmega.chips.atmega328p }, - // .{ .name = "arduino-nano", .target = atmega.boards.arduino.nano }, - // .{ .name = "arduino-uno-rev3", .target = atmega.boards.arduino.uno_rev3 }, -}; - -pub fn build(b: *std.Build) void { - const microzig = @import("microzig").init(b, "microzig"); - const optimize = b.standardOptimizeOption(.{}); - - for (available_targets) |dest| { - // `addFirmware` basically works like addExecutable, but takes a - // `microzig.Target` for target instead of a `std.zig.CrossTarget`. - // - // The target will convey all necessary information on the chip, - // cpu and potentially the board as well. - const firmware = microzig.addFirmware(b, .{ - .name = b.fmt("empty-{s}", .{dest.name}), - .target = dest.target, - .optimize = optimize, - .source_file = .{ .path = "src/empty.zig" }, - }); - - // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()` - // and allows installing the firmware as a typical firmware file. - // - // This will also install into `$prefix/firmware` instead of `$prefix/bin`. - microzig.installFirmware(b, firmware, .{}); - - // For debugging, we also always install the firmware as an ELF file - microzig.installFirmware(b, firmware, .{ .format = .elf }); - } -} - -const TargetDesc = struct { - target: @import("microzig").Target, - name: []const u8, -}; diff --git a/examples/all-platforms/build.zig.zon b/examples/all-platforms/build.zig.zon deleted file mode 100644 index 5513788d9..000000000 --- a/examples/all-platforms/build.zig.zon +++ /dev/null @@ -1,38 +0,0 @@ -.{ - .name = "microzig-all-platforms-examples", - .version = "0.1.0", - .dependencies = .{ - .microzig = .{ - .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/c6c9ec4516f57638e751141085c9d76120990312.tar.gz", - .hash = "1220af58bdaa721b8189f3a7adfda660517dd354463463388e96d69fe4ceccf80b92", - }, - .rp2040 = .{ - .url = "https://github.com/ZigEmbeddedGroup/raspberrypi-rp2040/archive/67d36eebb0fbd89633db1a51d6d2bcb049f2066a.tar.gz", - .hash = "122094bf268f45b188f3916f9e5964f4257414afaafba98a455ac47d25389a456832", - }, - .stm32 = .{ - .url = "https://github.com/ZigEmbeddedGroup/stmicro-stm32/archive/cb2893707efa6aa289fa72f02959ad5f2d9db2a1.tar.gz", - .hash = "12208cab5f60ef97cac4165ad694f3ba0c7b28f279538c1539b74f7c152f34fe306d", - }, - .lpc = .{ - .url = "https://github.com/ZigEmbeddedGroup/nxp-lpc/archive/130a1316c0892415e7da958a5e9548ed87bba54d.tar.gz", - .hash = "1220165879f85a1d51656d35b3963a95f3585dc665fc7414f76aa6aad4e6635536cf", - }, - .gd32 = .{ - .url = "https://github.com/ZigEmbeddedGroup/gigadevice-gd32/archive/9324753cc3b8e7afe83fcda085bcfe76681a3be3.tar.gz", - .hash = "122043ff4dcbc342f25dbb936b0d9eaa701ac3509e2cbe6764be37b90d31c7a385d0", - }, - .nrf5x = .{ - .url = "https://github.com/ZigEmbeddedGroup/nordic-nrf5x/archive/0ab136860ccf7eb1d07969c3ef523f3cd898e2ff.tar.gz", - .hash = "1220980da06f9634dcff06afefa7aa111bd030018fea49f79e86657dab69621e1d08", - }, - .esp = .{ - .url = "https://github.com/ZigEmbeddedGroup/espressif-esp/archive/59b8ca028915c0d6224ec88dbf4db19afbb559c0.tar.gz", - .hash = "1220f6e5f22416fdc63442cd8869fcaa35f9abf30d878ea3d80073176677dc6f8a65", - }, - .atmega = .{ - .url = "https://github.com/ZigEmbeddedGroup/microchip-atmega/archive/feefcb87a63c0aae31afb783d4e388e90c4d922f.tar.gz", - .hash = "1220048dc5d22729ee119a496f8b8ca3556838af1f3bd32ce6acd5f76480ec942965", - }, - }, -} diff --git a/examples/all-platforms/src/blinky.zig b/examples/all-platforms/src/blinky.zig deleted file mode 100644 index 5632fe349..000000000 --- a/examples/all-platforms/src/blinky.zig +++ /dev/null @@ -1,20 +0,0 @@ -const std = @import("std"); -const microzig = @import("microzig"); -const rp2040 = microzig.hal; -const time = rp2040.time; - -const pin_config = rp2040.pins.GlobalConfiguration{ - .GPIO25 = .{ - .name = "led", - .direction = .out, - }, -}; - -pub fn main() !void { - const pins = pin_config.apply(); - - while (true) { - pins.led.toggle(); - time.sleep_ms(250); - } -} diff --git a/examples/all-platforms/src/empty.zig b/examples/all-platforms/src/empty.zig deleted file mode 100644 index 7c6dbbe42..000000000 --- a/examples/all-platforms/src/empty.zig +++ /dev/null @@ -1,6 +0,0 @@ -const std = @import("std"); -const microzig = @import("microzig"); - -pub fn main() void { - // -} diff --git a/examples/build.zig b/examples/build.zig deleted file mode 100644 index bd3f69f7b..000000000 --- a/examples/build.zig +++ /dev/null @@ -1,28 +0,0 @@ -const std = @import("std"); -const MicroZig = @import("../build/build.zig"); // "microzig-build" - -pub fn build(b: *std.Build) void { - const microzig = MicroZig.createBuildEnvironment(b, .{ - .self = "microzig", // package name of the build package (optional) - .core = "microzig-core", // package name of the core package (optional) - .board_support = &.{ - // package names for BSP packages: - "microzig-bsp-nxp", - "microzig-bsp-rp2040", - }, - }); - - const optimize = b.standardOptimizeOption(.{}); - const target_name = b.option([]const u8, "target", "Select the target to build for.") orelse "board:mbed/lpc1768"; - - const target = microzig.findTarget(target_name).?; - - const firmware = microzig.addFirmware(b, .{ - .name = "blinky", - .target = target, - .optimize = optimize, - .source_file = .{ .path = "src/empty.zig" }, - }); - - microzig.installFirmware(b, firmware, .{}); -} diff --git a/examples/microchip-atsam/build.zig b/examples/microchip-atsam/build.zig new file mode 100644 index 000000000..681cf3731 --- /dev/null +++ b/examples/microchip-atsam/build.zig @@ -0,0 +1,45 @@ +const std = @import("std"); +const MicroZig = @import("microzig-build"); + +const available_examples = [_]Example{ + .{ .target = "chip:atsamd51j19", .name = "atsamd51j19-blinky", .file = "src/blinky.zig" }, +}; + +pub fn build(b: *std.Build) void { + const microzig = MicroZig.createBuildEnvironment(b, .{}); + const optimize = b.standardOptimizeOption(.{}); + + const show_targets_step = b.step("show-targets", "Shows all available MicroZig targets"); + show_targets_step.dependOn(microzig.getShowTargetsStep()); + + for (available_examples) |example| { + const target = microzig.findTarget(example.target).?; + + // `addFirmware` basically works like addExecutable, but takes a + // `microzig.Target` for target instead of a `std.zig.CrossTarget`. + // + // The target will convey all necessary information on the chip, + // cpu and potentially the board as well. + const firmware = microzig.addFirmware(b, .{ + .name = example.name, + .target = target, + .optimize = optimize, + .source_file = .{ .path = example.file }, + }); + + // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()` + // and allows installing the firmware as a typical firmware file. + // + // This will also install into `$prefix/firmware` instead of `$prefix/bin`. + microzig.installFirmware(b, firmware, .{}); + + // For debugging, we also always install the firmware as an ELF file + microzig.installFirmware(b, firmware, .{ .format = .elf }); + } +} + +const Example = struct { + target: []const u8, + name: []const u8, + file: []const u8, +}; diff --git a/examples/microchip-atsam/microzig-package.json b/examples/microchip-atsam/microzig-package.json new file mode 100644 index 000000000..b0f787b58 --- /dev/null +++ b/examples/microchip-atsam/microzig-package.json @@ -0,0 +1,7 @@ +{ + "package_name": "microchip/atsam", + "package_type": "example", + "inner_dependencies": [ + "microchip/atsam" + ] +} \ No newline at end of file diff --git a/examples/next-gen/src/empty.zig b/examples/microchip-atsam/src/blinky.zig similarity index 58% rename from examples/next-gen/src/empty.zig rename to examples/microchip-atsam/src/blinky.zig index b2925389e..db1529a0a 100644 --- a/examples/next-gen/src/empty.zig +++ b/examples/microchip-atsam/src/blinky.zig @@ -2,7 +2,5 @@ const std = @import("std"); const microzig = @import("microzig"); pub fn main() !void { - while (true) { - asm volatile ("" ::: "memory"); - } + // TODO: Implement the blinky } diff --git a/examples/next-gen/build.zig b/examples/next-gen/build.zig deleted file mode 100644 index fe531f970..000000000 --- a/examples/next-gen/build.zig +++ /dev/null @@ -1,23 +0,0 @@ -const std = @import("std"); -const MicroZig = @import("microzig-build"); - -pub fn build(b: *std.Build) void { - const microzig = MicroZig.createBuildEnvironment(b, .{}); - - const show_targets_step = b.step("show-targets", "Shows all available MicroZig targets"); - show_targets_step.dependOn(microzig.getShowTargetsStep()); - - const optimize = b.standardOptimizeOption(.{}); - const target_name = b.option([]const u8, "target", "Select the target to build for.") orelse "board:mbed/lpc1768"; - - const target = microzig.findTarget(target_name).?; - - const firmware = microzig.addFirmware(b, .{ - .name = "blinky", - .target = target, - .optimize = optimize, - .source_file = .{ .path = "src/empty.zig" }, - }); - - microzig.installFirmware(b, firmware, .{}); -} diff --git a/examples/next-gen/build.zig.zon b/examples/next-gen/build.zig.zon deleted file mode 100644 index 70de7cc6f..000000000 --- a/examples/next-gen/build.zig.zon +++ /dev/null @@ -1,22 +0,0 @@ -.{ - .name = "microzig-nxp-lpc-examples", - .version = "0.1.0", - .dependencies = .{ - .@"microzig-build" = .{ - .url = "https://public.devspace.random-projects.net/packages/microzig-build.tar.gz", - .hash = "1220e1f1446176832d84fa9b132022a45ea8c21fbaba8a51d787c6b4e0f1d455f4ed", - }, - .@"microzig-core" = .{ - .url = "https://public.devspace.random-projects.net/packages/microzig-core.tar.gz", - .hash = "12207d2604083d414ff3ca7c31c5dc76ee8ac3f1292a22e40ffe8b87fcadbd2e3c7d", - }, - .@"microzig-bsp-nxp" = .{ - .url = "https://public.devspace.random-projects.net/packages/board-support/nxp/lpc.tar.gz", - .hash = "1220ac0aa694eaa23cda453bb5a2711b22d8f58f10a9e0389502439cbb881987fa95", - }, - .@"microzig-bsp-rp2040" = .{ - .url = "https://public.devspace.random-projects.net/packages/board-support/raspberrypi/rp2040.tar.gz", - .hash = "12204d3998590f27f19aa31a8a250576b4314b29bbeb97628e264b42cb488ee6fad7", - }, - }, -} \ No newline at end of file diff --git a/tools/validate-all-examples.sh b/tools/validate-all-examples.sh index bf50cde70..817ad58d0 100755 --- a/tools/validate-all-examples.sh +++ b/tools/validate-all-examples.sh @@ -7,6 +7,8 @@ tmpdir="/tmp/microzig-test" mkdir -p "${tmpdir}" -"${root}/validate-example.py" --build-root "${tmpdir}" --example raspberrypi/rp2040 -"${root}/validate-example.py" --build-root "${tmpdir}" --example stmicro/stm32 -"${root}/validate-example.py" --build-root "${tmpdir}" --example nxp/lpc +examples="espressif/esp stmicro/stm32 nordic/nrf5x gigadevice/gd32 raspberrypi/rp2040 nxp/lpc microchip/atsam" + +for key in ${examples}; do + "${root}/validate-example.py" --build-root "${tmpdir}" --example "$key" +done From 1643c30d7deb41e219dc2d4e6acfd933ee8e2f8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Wed, 7 Feb 2024 10:45:39 +0100 Subject: [PATCH 273/286] Makes AVR example fit, but still crashes compiler --- .github/workflows/build.yml | 34 +++++++++++++++++++ build/build.zig | 1 + core/src/cpus/avr5.zig | 4 +-- examples/microchip-atmega/build.zig.zon | 14 -------- .../build.zig | 18 ++++++---- examples/microchip-avr/microzig-package.json | 7 ++++ .../src/blinky.zig | 0 tools/validate-all-examples.sh | 2 +- 8 files changed, 57 insertions(+), 23 deletions(-) delete mode 100644 examples/microchip-atmega/build.zig.zon rename examples/{microchip-atmega => microchip-avr}/build.zig (64%) create mode 100644 examples/microchip-avr/microzig-package.json rename examples/{microchip-atmega => microchip-avr}/src/blinky.zig (100%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5395153b1..b324e859a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -44,3 +44,37 @@ jobs: with: name: packages path: microzig-deploy/ + + validate-packages: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-tags: true # required for "git describe" + + - name: Fetch more data from git + run: | + # fetch everything back till the $(ZIG_VERSION) tag. + # https://stackoverflow.com/a/58082274 + git fetch --shallow-exclude ${{ env.ZIG_VERSION }} + git fetch --deepen=2 + + - name: Setup Zig + uses: goto-bus-stop/setup-zig@v2 + with: + version: ${{ env.ZIG_VERSION }} + + - name: Install PIP packages + run: | + pip install dataclasses_json==0.6.3 marshmallow typing-inspect semver pathspec + + - name: Generate and validate packages + run: | + ./tools/bundle.py + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: packages + path: microzig-deploy/ diff --git a/build/build.zig b/build/build.zig index 7402a7262..38a804955 100644 --- a/build/build.zig +++ b/build/build.zig @@ -523,6 +523,7 @@ pub const BuildEnvironment = struct { if (options.target.configure) |configure| { configure(fw.env, fw); } + return fw; } diff --git a/core/src/cpus/avr5.zig b/core/src/cpus/avr5.zig index 117a70f6f..478a7d3d0 100644 --- a/core/src/cpus/avr5.zig +++ b/core/src/cpus/avr5.zig @@ -102,13 +102,13 @@ fn make_isr_handler(comptime name: []const u8, comptime func: anytype) type { } pub const startup_logic = struct { - export fn microzig_unhandled_vector() callconv(.Naked) noreturn { + export fn microzig_unhandled_vector() callconv(.C) noreturn { @panic("Unhandled interrupt"); } extern fn microzig_main() noreturn; - export fn microzig_start() callconv(.Naked) noreturn { + export fn microzig_start() callconv(.C) noreturn { // At startup the stack pointer is at the end of RAM // so, no need to set it manually! diff --git a/examples/microchip-atmega/build.zig.zon b/examples/microchip-atmega/build.zig.zon deleted file mode 100644 index f3c3bdfc1..000000000 --- a/examples/microchip-atmega/build.zig.zon +++ /dev/null @@ -1,14 +0,0 @@ -.{ - .name = "microzig-microchip-atmega-examples", - .version = "0.1.0", - .dependencies = .{ - .microzig = .{ - .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/c6c9ec4516f57638e751141085c9d76120990312.tar.gz", - .hash = "1220af58bdaa721b8189f3a7adfda660517dd354463463388e96d69fe4ceccf80b92", - }, - .atmega = .{ - .url = "https://github.com/ZigEmbeddedGroup/microchip-atmega/archive/feefcb87a63c0aae31afb783d4e388e90c4d922f.tar.gz", - .hash = "1220048dc5d22729ee119a496f8b8ca3556838af1f3bd32ce6acd5f76480ec942965", - }, - }, -} diff --git a/examples/microchip-atmega/build.zig b/examples/microchip-avr/build.zig similarity index 64% rename from examples/microchip-atmega/build.zig rename to examples/microchip-avr/build.zig index 6459450dd..b8b5faa15 100644 --- a/examples/microchip-atmega/build.zig +++ b/examples/microchip-avr/build.zig @@ -1,15 +1,21 @@ const std = @import("std"); -const atmega = @import("atmega"); +const MicroZig = @import("microzig-build"); const available_examples = [_]Example{ - // TODO: .{ .name = "arduino-nano_blinky", .target = atmega.boards.arduino.nano, .file = "src/blinky.zig" }, + .{ .target = "board:arduino/nano", .name = "arduino-nano_blinky", .file = "src/blinky.zig" }, + .{ .target = "board:arduino/uno_rev3", .name = "arduino-nano_blinky", .file = "src/blinky.zig" }, }; pub fn build(b: *std.Build) void { - const microzig = @import("microzig").init(b, "microzig"); - const optimize = .ReleaseSmall; // The others are not really an option on AVR + const microzig = MicroZig.createBuildEnvironment(b, .{}); + const optimize = b.standardOptimizeOption(.{}); + + const show_targets_step = b.step("show-targets", "Shows all available MicroZig targets"); + show_targets_step.dependOn(microzig.getShowTargetsStep()); for (available_examples) |example| { + const target = microzig.findTarget(example.target).?; + // `addFirmware` basically works like addExecutable, but takes a // `microzig.Target` for target instead of a `std.zig.CrossTarget`. // @@ -17,7 +23,7 @@ pub fn build(b: *std.Build) void { // cpu and potentially the board as well. const firmware = microzig.addFirmware(b, .{ .name = example.name, - .target = example.target, + .target = target, .optimize = optimize, .source_file = .{ .path = example.file }, }); @@ -34,7 +40,7 @@ pub fn build(b: *std.Build) void { } const Example = struct { - target: @import("microzig").Target, + target: []const u8, name: []const u8, file: []const u8, }; diff --git a/examples/microchip-avr/microzig-package.json b/examples/microchip-avr/microzig-package.json new file mode 100644 index 000000000..e6eca91a2 --- /dev/null +++ b/examples/microchip-avr/microzig-package.json @@ -0,0 +1,7 @@ +{ + "package_name": "microchip/avr", + "package_type": "example", + "inner_dependencies": [ + "microchip/avr" + ] +} \ No newline at end of file diff --git a/examples/microchip-atmega/src/blinky.zig b/examples/microchip-avr/src/blinky.zig similarity index 100% rename from examples/microchip-atmega/src/blinky.zig rename to examples/microchip-avr/src/blinky.zig diff --git a/tools/validate-all-examples.sh b/tools/validate-all-examples.sh index 817ad58d0..8af432bd4 100755 --- a/tools/validate-all-examples.sh +++ b/tools/validate-all-examples.sh @@ -7,7 +7,7 @@ tmpdir="/tmp/microzig-test" mkdir -p "${tmpdir}" -examples="espressif/esp stmicro/stm32 nordic/nrf5x gigadevice/gd32 raspberrypi/rp2040 nxp/lpc microchip/atsam" +examples="espressif/esp stmicro/stm32 nordic/nrf5x gigadevice/gd32 raspberrypi/rp2040 nxp/lpc microchip/atsam" # microchip/avr (does not build with 0.11) for key in ${examples}; do "${root}/validate-example.py" --build-root "${tmpdir}" --example "$key" From a4ac2d1858530e12307a17c409d979df0d76c269 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Wed, 7 Feb 2024 11:03:19 +0100 Subject: [PATCH 274/286] Adds deployment+example test to CI --- .github/workflows/build.yml | 23 +++++++++++++++++------ tools/bundle.py | 20 +++++++++++++++++--- tools/validate-all-examples.sh | 5 +---- tools/validate-example.py | 6 +++++- 4 files changed, 40 insertions(+), 14 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b324e859a..929e54d36 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,6 +3,7 @@ name: Continuous Integration env: # Specify the current Zig version MicroZig uses: ZIG_VERSION: 0.11.0 + DEPLOYMENT_URL: "https://download.microzig.tech" on: push: @@ -69,12 +70,22 @@ jobs: run: | pip install dataclasses_json==0.6.3 marshmallow typing-inspect semver pathspec - - name: Generate and validate packages + - name: Generate packages run: | - ./tools/bundle.py + ./tools/bundle.py --debug - - name: Upload artifacts - uses: actions/upload-artifact@v4 + - name: Spawn local web server + uses: Eun/http-server-action@v1 with: - name: packages - path: microzig-deploy/ + directory: "${{ github.workspace }}/microzig-deploy" + port: 8080 + content-types: | + { + "gz": "application/gzip", + "json": "application/json" + } + + - name: Validate examples + run: | + mkdir -p "${{ github.workspace }}/microzig-test" + ./tools/validate-all-examples.sh --build-root "${{ github.workspace }}/microzig-test" diff --git a/tools/bundle.py b/tools/bundle.py index 4e0e2155e..2a4bd50b9 100755 --- a/tools/bundle.py +++ b/tools/bundle.py @@ -14,6 +14,7 @@ from semver import Version from marshmallow import fields from enum import Enum as StrEnum +from argparse import ArgumentParser import pathspec import stat import tarfile @@ -26,6 +27,9 @@ from lib.common import execute_raw, execute, slurp, check_zig_version, check_required_tools import lib.common as common +DEFAULT_DEPLOYMENT_BASE="https://download.microzig.tech/packages" +DEBUG_DEPLOYMENT_BASE="http://localhost:8080" + LEGAL_PACKAGE_NAME = re.compile("^[A-Za-z]$") VERBOSE = False @@ -34,8 +38,7 @@ "zig", "git", ] -# DEPLOYMENT_BASE="https://download.microzig.tech/packages" -DEPLOYMENT_BASE="https://public.devspace.random-projects.net" + REPO_ROOT = Path(__file__).parent.parent assert REPO_ROOT.is_dir() @@ -230,6 +233,17 @@ def get_batch_timestamp(): def main(): + + arg_parser = ArgumentParser() + + arg_parser.add_argument("--base-url", type=str, required=False, default=DEFAULT_DEPLOYMENT_BASE, help="Sets the download URL for the packages.") + arg_parser.add_argument("--debug", action="store_true", required=False, default=False, help="Creates a deployment for local development, hosted by localhost:8080") + + cli_args = arg_parser.parse_args() + + base_url = cli_args.base_url if not cli_args.debug else DEBUG_DEPLOYMENT_BASE + + check_required_tools(REQUIRED_TOOLS) check_zig_version("0.11.0") @@ -326,7 +340,7 @@ def main(): assert False download_path = pkg.out_rel_dir / ALL_FILES_DIR / f"{pkg.out_basename}-{version}.tar.gz" - pkg.download_url = f"{DEPLOYMENT_BASE}/{download_path}" + pkg.download_url = f"{base_url}/{download_path}" buildzig_path = pkg_dir / "build.zig" buildzon_path = pkg_dir / "build.zig.zon" diff --git a/tools/validate-all-examples.sh b/tools/validate-all-examples.sh index 8af432bd4..7d0982eb9 100755 --- a/tools/validate-all-examples.sh +++ b/tools/validate-all-examples.sh @@ -3,12 +3,9 @@ set -e root="$(dirname "$(realpath "$0")")" -tmpdir="/tmp/microzig-test" - -mkdir -p "${tmpdir}" examples="espressif/esp stmicro/stm32 nordic/nrf5x gigadevice/gd32 raspberrypi/rp2040 nxp/lpc microchip/atsam" # microchip/avr (does not build with 0.11) for key in ${examples}; do - "${root}/validate-example.py" --build-root "${tmpdir}" --example "$key" + "${root}/validate-example.py" --example "$key" "$@" done diff --git a/tools/validate-example.py b/tools/validate-example.py index d04c8afd0..4b9ab30aa 100755 --- a/tools/validate-example.py +++ b/tools/validate-example.py @@ -8,6 +8,7 @@ import shutil REQUIRED_TOOLS = ["zig", "curl", "tar", "gunzip"] +DEBUG_DEPLOYMENT_BASE="http://localhost:8080" def main(): @@ -20,10 +21,13 @@ def main(): parser.add_argument("--example", type=PurePosixPath, required=True) parser.add_argument("--build-root", type=Path, required=True) + parser.add_argument("--base-url", type=str, required=False, default=DEBUG_DEPLOYMENT_BASE, help="Sets the download URL for the packages.") + args = parser.parse_args() example_id: PurePosixPath = args.example build_root: Path = args.build_root + base_url: str = args.base_url if len(example_id.parents) != 2 or str(example_id.parents[1]) != ".": print(f"example must be /", file=sys.stderr) @@ -41,7 +45,7 @@ def main(): "curl", "-o", f"{example_name}.tar.gz", - f"https://public.devspace.random-projects.net/examples/{example_group}/{example_name}.tar.gz", + f"{base_url}/examples/{example_group}/{example_name}.tar.gz", cwd=build_root, ) From 7817cdd27ed4b9647d842068b4eff947983c657f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Sat, 10 Feb 2024 12:54:06 +0100 Subject: [PATCH 275/286] Implements continous deployment --- .github/workflows/deploy.yml | 50 ++++++++++++++++++++++++++++++++++++ README.md | 4 +-- tools/bundle.py | 2 +- 3 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/deploy.yml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 000000000..fc174c0f0 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,50 @@ +name: Continuous Deployment + +env: + # Specify the current Zig version MicroZig uses: + ZIG_VERSION: 0.11.0 + +on: + push: + branches: [main] + +jobs: + deploy-packages: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-tags: true # required for "git describe" + + - name: Fetch more data from git + run: | + # fetch everything back till the $(ZIG_VERSION) tag. + # https://stackoverflow.com/a/58082274 + git fetch --shallow-exclude ${{ env.ZIG_VERSION }} + git fetch --deepen=2 + + - name: Setup Zig + uses: goto-bus-stop/setup-zig@v2 + with: + version: ${{ env.ZIG_VERSION }} + + - name: Install PIP packages + run: | + pip install dataclasses_json==0.6.3 marshmallow typing-inspect semver pathspec + + - name: Generate and validate packages + run: | + ./tools/bundle.py --base-url "${{ secrets.DOWNLOADS_URL }}" + + - name: Deploy + uses: easingthemes/ssh-deploy@main + with: + SSH_PRIVATE_KEY: ${{ secrets.DEPLOY_PRIVATE_KEY }} + ARGS: "-vzrli" + SOURCE: "microzig-deploy/" + REMOTE_HOST: ${{ secrets.DEPLOY_HOST }} + REMOTE_USER: ${{ secrets.DEPLOY_USER }} + REMOTE_PORT: ${{ secrets.DEPLOY_PORT }} + TARGET: "." + \ No newline at end of file diff --git a/README.md b/README.md index ac6321216..cd6d629d2 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,11 @@ ## Overview +- `build/` contains the build components of MicroZig. - `core/` contains the shared components of MicroZig. - `board-support/` contains all official board support package. - `examples/` contains examples that can be used with the board support packages. -- `tools/` contains tooling to work *on* MicroZig. +- `tools/` contains tooling to work *on* MicroZig itself, so deployment, testing, ... ## Versioning Scheme @@ -25,6 +26,5 @@ Consider the version `0.11.0-abcdef-123` means that this MicroZig version has a - Integrate https://github.com/ZigEmbeddedGroup/microzig-driver-framework as package - Create support for nice GitHub badges - validate that the table on https://github.com/ZigEmbeddedGroup is correct (in CI) -- make system build again properly - start porting everything to 0.12/unstable - Try to get some autodocs to build. diff --git a/tools/bundle.py b/tools/bundle.py index 2a4bd50b9..30805cbaf 100755 --- a/tools/bundle.py +++ b/tools/bundle.py @@ -141,7 +141,7 @@ def file_digest(path: Path, hashfunc) -> bytes: stat.S_IFIFO: "fifo", stat.S_IFLNK: "link", stat.S_IFSOCK: "socket", - } +} def file_type(path: Path) -> str: return FILE_STAT_MAP[stat.S_IFMT( path.stat().st_mode)] From 37319a93cad3a2cabba5704e4cffe7a229f437d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Sat, 10 Feb 2024 13:13:14 +0100 Subject: [PATCH 276/286] Moves some files out of core --- README.md | 2 +- {core/design => design}/logo-text-auto.svg | 0 {core/design => design}/logo-text-brightmode.svg | 0 {core/design => design}/logo-text-darkmode.svg | 0 {core/design => design}/logo-text-inkscape.svg | 0 {core/design => design}/logo.svg | 0 {core/design => design}/social-media-preview.png | Bin {core/design => design}/social-media-preview.xcf | Bin {core/docs => docs}/design.adoc | 0 {core/docs => docs}/hardware_support_packages.adoc | 0 {core/docs => docs}/images/deps.dot | 0 {core/docs => docs}/images/deps.svg | 0 {core/docs => docs}/tricks.adoc | 0 13 files changed, 1 insertion(+), 1 deletion(-) rename {core/design => design}/logo-text-auto.svg (100%) rename {core/design => design}/logo-text-brightmode.svg (100%) rename {core/design => design}/logo-text-darkmode.svg (100%) rename {core/design => design}/logo-text-inkscape.svg (100%) rename {core/design => design}/logo.svg (100%) rename {core/design => design}/social-media-preview.png (100%) rename {core/design => design}/social-media-preview.xcf (100%) rename {core/docs => docs}/design.adoc (100%) rename {core/docs => docs}/hardware_support_packages.adoc (100%) rename {core/docs => docs}/images/deps.dot (100%) rename {core/docs => docs}/images/deps.svg (100%) rename {core/docs => docs}/tricks.adoc (100%) diff --git a/README.md b/README.md index cd6d629d2..be972eb75 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# MicroZig +![MicroZig Logo](design/logo-text-auto.svg) [![Continuous Integration](https://github.com/ZigEmbeddedGroup/microzig-monorepo/actions/workflows/build.yml/badge.svg)](https://github.com/ZigEmbeddedGroup/microzig-monorepo/actions/workflows/build.yml) diff --git a/core/design/logo-text-auto.svg b/design/logo-text-auto.svg similarity index 100% rename from core/design/logo-text-auto.svg rename to design/logo-text-auto.svg diff --git a/core/design/logo-text-brightmode.svg b/design/logo-text-brightmode.svg similarity index 100% rename from core/design/logo-text-brightmode.svg rename to design/logo-text-brightmode.svg diff --git a/core/design/logo-text-darkmode.svg b/design/logo-text-darkmode.svg similarity index 100% rename from core/design/logo-text-darkmode.svg rename to design/logo-text-darkmode.svg diff --git a/core/design/logo-text-inkscape.svg b/design/logo-text-inkscape.svg similarity index 100% rename from core/design/logo-text-inkscape.svg rename to design/logo-text-inkscape.svg diff --git a/core/design/logo.svg b/design/logo.svg similarity index 100% rename from core/design/logo.svg rename to design/logo.svg diff --git a/core/design/social-media-preview.png b/design/social-media-preview.png similarity index 100% rename from core/design/social-media-preview.png rename to design/social-media-preview.png diff --git a/core/design/social-media-preview.xcf b/design/social-media-preview.xcf similarity index 100% rename from core/design/social-media-preview.xcf rename to design/social-media-preview.xcf diff --git a/core/docs/design.adoc b/docs/design.adoc similarity index 100% rename from core/docs/design.adoc rename to docs/design.adoc diff --git a/core/docs/hardware_support_packages.adoc b/docs/hardware_support_packages.adoc similarity index 100% rename from core/docs/hardware_support_packages.adoc rename to docs/hardware_support_packages.adoc diff --git a/core/docs/images/deps.dot b/docs/images/deps.dot similarity index 100% rename from core/docs/images/deps.dot rename to docs/images/deps.dot diff --git a/core/docs/images/deps.svg b/docs/images/deps.svg similarity index 100% rename from core/docs/images/deps.svg rename to docs/images/deps.svg diff --git a/core/docs/tricks.adoc b/docs/tricks.adoc similarity index 100% rename from core/docs/tricks.adoc rename to docs/tricks.adoc From cb45e3309c51ccb0e9dbe9162b1681a382058b3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Quei=C3=9Fner?= Date: Sat, 10 Feb 2024 13:29:43 +0100 Subject: [PATCH 277/286] Update README.md --- README.md | 45 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index be972eb75..9f594a38b 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,48 @@ -![MicroZig Logo](design/logo-text-auto.svg) +# ![MicroZig Logo](design/logo-text-auto.svg) +[![Chat](https://img.shields.io/discord/824493524413710336.svg?logo=discord)](link=https://discord.gg/ShUWykk38X) +[![Downloads](https://img.shields.io/badge/Zig_Package-Download-blue)](https://downloads.microzig.tech/) [![Continuous Integration](https://github.com/ZigEmbeddedGroup/microzig-monorepo/actions/workflows/build.yml/badge.svg)](https://github.com/ZigEmbeddedGroup/microzig-monorepo/actions/workflows/build.yml) -## Overview +> **NOTE:** This is in development; breaks in the API are bound to happen. + +## What version of Zig to use + +0.11.0 + +## Contributing + +Please see the [project page](https://github.com/orgs/ZigEmbeddedGroup/projects/1/views/1), it’s used as a place to brainstorm and organize work in ZEG. There will be issues marked as good first issue or drafts for larger ideas that need scoping/breaking ground on. + +## Introduction + +This repo contains the infrastructure for getting started in an embedded Zig project; it "gets you to main()". Specifically, it offers: + +* a single easy-to-use builder function that: + * generates your linker script + * sets up packages and startup code +* generalized interfaces for common devices, such as UART. +* device drivers for interacting with external hardware +* an uncomplicated method to define xref:interrupts[interrupts] + +## Getting Started + +Search for your chip family in [the examples](https://downloads.microzig.tech/examples/) and get the archive. + +You can easily get started based on that. + +## Design + +For MicroZig internals please see the [Design Document](docs/design.adoc). + +## Repository structure - `build/` contains the build components of MicroZig. - `core/` contains the shared components of MicroZig. - `board-support/` contains all official board support package. - `examples/` contains examples that can be used with the board support packages. - `tools/` contains tooling to work *on* MicroZig itself, so deployment, testing, ... +- `design/` contains images and logos ## Versioning Scheme @@ -21,10 +55,3 @@ As MicroZig sticks to tagged Zig releases, `${zig_version}` will show to which Z Consider the version `0.11.0-abcdef-123` means that this MicroZig version has a commit starting with `abcdef`, which was the 123rd commit of the version that is compatible with Zig 0.11.0. -## TODO (before exchanging upstream) - -- Integrate https://github.com/ZigEmbeddedGroup/microzig-driver-framework as package -- Create support for nice GitHub badges -- validate that the table on https://github.com/ZigEmbeddedGroup is correct (in CI) -- start porting everything to 0.12/unstable -- Try to get some autodocs to build. From be113c7adcb80f8a64a3b33b200a8c62b5d9d919 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Fri, 16 Feb 2024 08:57:30 +0100 Subject: [PATCH 278/286] Updates README.md --- README.md | 64 ++++++++++++++++++++++++++++++++++++---- tools/patch-build-zon.py | 10 ++++--- 2 files changed, 64 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 9f594a38b..8f2c9bd2d 100644 --- a/README.md +++ b/README.md @@ -35,14 +35,66 @@ You can easily get started based on that. For MicroZig internals please see the [Design Document](docs/design.adoc). +## Developing + +Right now, the developer experience is not optimal due to 0.11 not really supporting what we're doing at all. + +If you want to test your changes, you gotta to the following: + +**Step 1:** Create a deployment for local usage: + +```sh-session +[user@host] microzig-monorepo/ $ python3 ./tools/bundle.py --debug +preparing environment... +validating packages... +loaded packages: + * microzig-build + * examples:microchip/avr + * examples:... + * microzig-core + * microchip/avr + * ... +resolving inner dependencies... +creating packages... +bundling microzig-build... +bundling microzig-core... +bundling microchip/avr... +... +[user@host] microzig-monorepo/ $ +``` + +This command yields output in `./microzig-deploy` that is meant to be fetched via `http://localhost:8080/`. + +**Step 2:** To serve the files on this port, you can start a pre-bundled web server: + +```sh-session +[user@host] microzig-monorepo/ $ python3 ./tools/demo-server.py +... +``` + +This way, you spawn a local HTTP server that will serve `./microzig-deploy` on port 8080 on your machine, and you can then +start fetching packages from this. + +Now you can use curl to fetch the packages, or you can just create a local development project. + +**Step 3:** You can use the tool `tools/patch-build-zon.py` to patch/upgrade your development project inplace: + +```sh-session +[user@host] microzig-monorepo/ $ python3 ./tools/patch-build-zon.py /tmp/dev-project +Updating hash of http://localhost:8080/packages/microzig-build.tar.gz to 12200040a36bbbb2fe09809861f565fcda9a10ec3064d70357aa40ad0a61596c16fb +Updating hash of http://localhost:8080/packages/microzig-core.tar.gz to 122013a37ce9ac295303f26057c203e722b9ceaefa5b4403fe5a18ab065f03079e7d +Updating hash of http://localhost:8080/packages/board-support/stmicro/stm32.tar.gz to 12207c278b78c5aeb08cd7889647d7d0d9a359cb28fe68105d2e43f85dabb3865981 +[user@host] microzig-monorepo/ $ +``` + ## Repository structure -- `build/` contains the build components of MicroZig. -- `core/` contains the shared components of MicroZig. -- `board-support/` contains all official board support package. -- `examples/` contains examples that can be used with the board support packages. -- `tools/` contains tooling to work *on* MicroZig itself, so deployment, testing, ... -- `design/` contains images and logos +* `build/` contains the build components of MicroZig. +* `core/` contains the shared components of MicroZig. +* `board-support/` contains all official board support package. +* `examples/` contains examples that can be used with the board support packages. +* `tools/` contains tooling to work *on* MicroZig itself, so deployment, testing, ... +* `design/` contains images and logos ## Versioning Scheme diff --git a/tools/patch-build-zon.py b/tools/patch-build-zon.py index 85cc96264..6cb0ae75d 100755 --- a/tools/patch-build-zon.py +++ b/tools/patch-build-zon.py @@ -39,7 +39,7 @@ def main(): elif stripped.startswith(".hash = \""): try: pkg_path = PurePosixPath(last_pkg_url.path) - assert pkg_path.suffixes == ['.tar', '.gz'] + assert pkg_path.suffixes[-2:] == ['.tar', '.gz'] pkg_json_url = urlunparse( # scheme, netloc, url, params, query, fragment ( @@ -58,12 +58,14 @@ def main(): line_prefix = re.match("^(\s*)", line).group(1) + print(f"Updating hash of {urlunparse(last_pkg_url)} to {pkg_hash}") + output_lines.append(f'{line_prefix}.hash = "{pkg_hash}",') last_pkg_url = None - - + except AssertionError: + raise except BaseException as ex: - print(ex) + print(f"error: {type(ex)} {ex}") output_lines.append(line) else: output_lines.append(line) From e9859fbab26bf08127ec2bd79d9b36d01050d701 Mon Sep 17 00:00:00 2001 From: Tobias Kohlbau Date: Sat, 17 Feb 2024 10:58:29 +0100 Subject: [PATCH 279/286] support bundling only specific boards (#166) Support bundling only specified boards and skipping the examples. This speedsup the process in case the developer is only working on specific boards at a time. By default every example and every board are bundled. Signed-off-by: Tobias Kohlbau --- tools/bundle.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/tools/bundle.py b/tools/bundle.py index 30805cbaf..a70081c03 100755 --- a/tools/bundle.py +++ b/tools/bundle.py @@ -14,7 +14,7 @@ from semver import Version from marshmallow import fields from enum import Enum as StrEnum -from argparse import ArgumentParser +from argparse import ArgumentParser, BooleanOptionalAction import pathspec import stat import tarfile @@ -231,6 +231,9 @@ def get_batch_timestamp(): iso=render_time.isoformat(), ) +def list_of_str(arg): + return arg.split(',') + def main(): @@ -238,6 +241,8 @@ def main(): arg_parser.add_argument("--base-url", type=str, required=False, default=DEFAULT_DEPLOYMENT_BASE, help="Sets the download URL for the packages.") arg_parser.add_argument("--debug", action="store_true", required=False, default=False, help="Creates a deployment for local development, hosted by localhost:8080") + arg_parser.add_argument("--examples", action=BooleanOptionalAction, required=False, default=True, help="Build the examples") + arg_parser.add_argument("--boards", type=list_of_str, help='list of boards to build', default=[]) cli_args = arg_parser.parse_args() @@ -296,6 +301,13 @@ def main(): pkg_dict = json.loads(meta_path.read_bytes()) pkg = PackageConfigurationSchema.load(pkg_dict) + # Skip examples or non enabled boards + if any([ + pkg.package_type == PackageType.example and not cli_args.examples, + pkg.package_type == PackageType.board_support and cli_args.boards and pkg.package_name not in cli_args.boards + ]): + continue + pkg.version = version pkg.created = batch_timestamp pkg.package_dir = pkg_dir @@ -517,4 +529,4 @@ def main(): if __name__ == "__main__": - main() \ No newline at end of file + main() From 829f860b8c1039cd8a8e498f8733d9a83b10fe31 Mon Sep 17 00:00:00 2001 From: Tobias Kohlbau Date: Sat, 17 Feb 2024 10:59:34 +0100 Subject: [PATCH 280/286] fix documentation for patch tool (#165) The patch tool expects the build.zig.zon file as it's argument not the project folder. Signed-off-by: Tobias Kohlbau --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8f2c9bd2d..f0c7c1e59 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ Now you can use curl to fetch the packages, or you can just create a local devel **Step 3:** You can use the tool `tools/patch-build-zon.py` to patch/upgrade your development project inplace: ```sh-session -[user@host] microzig-monorepo/ $ python3 ./tools/patch-build-zon.py /tmp/dev-project +[user@host] microzig-monorepo/ $ python3 ./tools/patch-build-zon.py /tmp/dev-project/build.zig.zon Updating hash of http://localhost:8080/packages/microzig-build.tar.gz to 12200040a36bbbb2fe09809861f565fcda9a10ec3064d70357aa40ad0a61596c16fb Updating hash of http://localhost:8080/packages/microzig-core.tar.gz to 122013a37ce9ac295303f26057c203e722b9ceaefa5b4403fe5a18ab065f03079e7d Updating hash of http://localhost:8080/packages/board-support/stmicro/stm32.tar.gz to 12207c278b78c5aeb08cd7889647d7d0d9a359cb28fe68105d2e43f85dabb3865981 From 196bbd8094d0628bf182a583d972ae50b3c4a260 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Quei=C3=9Fner?= Date: Sat, 17 Feb 2024 12:57:20 +0100 Subject: [PATCH 281/286] Fixes CI Badge in README.md (#164) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fixes CI Badge in README.md * Removes additional fetching from git * More work on the CI script * Adds requirements.txt for tools, fixes CI script even more --------- Co-authored-by: Felix "xq" Queißner --- .github/workflows/build.yml | 20 ++++---------------- .github/workflows/deploy.yml | 10 ++-------- README.md | 2 +- tools/bundle.py | 8 ++++++-- tools/lib/common.py | 4 ++-- tools/requirements.txt | 5 +++++ 6 files changed, 20 insertions(+), 29 deletions(-) create mode 100644 tools/requirements.txt diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 929e54d36..e00945d40 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -19,13 +19,7 @@ jobs: uses: actions/checkout@v4 with: fetch-tags: true # required for "git describe" - - - name: Fetch more data from git - run: | - # fetch everything back till the $(ZIG_VERSION) tag. - # https://stackoverflow.com/a/58082274 - git fetch --shallow-exclude ${{ env.ZIG_VERSION }} - git fetch --deepen=2 + fetch-depth: 0 - name: Setup Zig uses: goto-bus-stop/setup-zig@v2 @@ -34,7 +28,7 @@ jobs: - name: Install PIP packages run: | - pip install dataclasses_json==0.6.3 marshmallow typing-inspect semver pathspec + pip install -r tools/requirements.txt - name: Generate and validate packages run: | @@ -53,13 +47,7 @@ jobs: uses: actions/checkout@v4 with: fetch-tags: true # required for "git describe" - - - name: Fetch more data from git - run: | - # fetch everything back till the $(ZIG_VERSION) tag. - # https://stackoverflow.com/a/58082274 - git fetch --shallow-exclude ${{ env.ZIG_VERSION }} - git fetch --deepen=2 + fetch-depth: 0 - name: Setup Zig uses: goto-bus-stop/setup-zig@v2 @@ -68,7 +56,7 @@ jobs: - name: Install PIP packages run: | - pip install dataclasses_json==0.6.3 marshmallow typing-inspect semver pathspec + pip install -r tools/requirements.txt - name: Generate packages run: | diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index fc174c0f0..e2a30df98 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -16,13 +16,7 @@ jobs: uses: actions/checkout@v4 with: fetch-tags: true # required for "git describe" - - - name: Fetch more data from git - run: | - # fetch everything back till the $(ZIG_VERSION) tag. - # https://stackoverflow.com/a/58082274 - git fetch --shallow-exclude ${{ env.ZIG_VERSION }} - git fetch --deepen=2 + fetch-depth: 0 - name: Setup Zig uses: goto-bus-stop/setup-zig@v2 @@ -31,7 +25,7 @@ jobs: - name: Install PIP packages run: | - pip install dataclasses_json==0.6.3 marshmallow typing-inspect semver pathspec + pip install -r tools/requirements.txt - name: Generate and validate packages run: | diff --git a/README.md b/README.md index f0c7c1e59..446f20587 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Chat](https://img.shields.io/discord/824493524413710336.svg?logo=discord)](link=https://discord.gg/ShUWykk38X) [![Downloads](https://img.shields.io/badge/Zig_Package-Download-blue)](https://downloads.microzig.tech/) -[![Continuous Integration](https://github.com/ZigEmbeddedGroup/microzig-monorepo/actions/workflows/build.yml/badge.svg)](https://github.com/ZigEmbeddedGroup/microzig-monorepo/actions/workflows/build.yml) +[![Continuous Integration](https://github.com/ZigEmbeddedGroup/microzig/actions/workflows/build.yml/badge.svg)](https://github.com/ZigEmbeddedGroup/microzig/actions/workflows/build.yml) > **NOTE:** This is in development; breaks in the API are bound to happen. diff --git a/tools/bundle.py b/tools/bundle.py index a70081c03..b4c0d7824 100755 --- a/tools/bundle.py +++ b/tools/bundle.py @@ -38,6 +38,7 @@ "zig", "git", ] +REQUIRED_ZIG_VERSION="0.11.0" REPO_ROOT = Path(__file__).parent.parent @@ -168,7 +169,10 @@ def build_zig_tools(): # Determines the correct version: def get_version_from_git() -> str: - raw_git_out = slurp("git", "describe", "--match", "*.*.*", "--tags", "--abbrev=9", cwd=REPO_ROOT).strip().decode() + raw_git_out = slurp("git", "describe", "--match", "*.*.*", "--tags", "--abbrev=9", cwd=REPO_ROOT, allow_failure=True).strip().decode() + if len(raw_git_out) == 0: + print("failed to get version from git, using 'development'", file=sys.stderr) + return f"{REQUIRED_ZIG_VERSION}-development" def render_version(major,minor,patch,counter,hash): return f"{major}.{minor}.{patch}-{counter}-{hash}" @@ -251,7 +255,7 @@ def main(): check_required_tools(REQUIRED_TOOLS) - check_zig_version("0.11.0") + check_zig_version(REQUIRED_ZIG_VERSION) print("preparing environment...") diff --git a/tools/lib/common.py b/tools/lib/common.py index 4d72ca906..b0bb984dc 100644 --- a/tools/lib/common.py +++ b/tools/lib/common.py @@ -3,14 +3,14 @@ VERBOSE = False -def execute_raw(*args,hide_stderr = False,**kwargs): +def execute_raw(*args,hide_stderr: bool = False, allow_failure: bool = False, **kwargs): args = [ str(f) for f in args] if VERBOSE: print(*args) res = subprocess.run(args, **kwargs, check=False) if res.stderr is not None and (not hide_stderr or res.returncode != 0): sys.stderr.buffer.write(res.stderr) - if res.returncode != 0: + if not allow_failure and res.returncode != 0: sys.stderr.write(f"command {' '.join(args)} failed with exit code {res.returncode}") sys.exit(res.returncode) return res diff --git a/tools/requirements.txt b/tools/requirements.txt new file mode 100644 index 000000000..b43b94fad --- /dev/null +++ b/tools/requirements.txt @@ -0,0 +1,5 @@ +dataclasses_json==0.6.3 +marshmallow +typing-inspect +semver +pathspec From b1cbd1bf34734e640f1cadcdbb9fe9d75833a69a Mon Sep 17 00:00:00 2001 From: Grazfather Date: Sun, 18 Feb 2024 03:37:04 -0500 Subject: [PATCH 282/286] hal: dma: Cast channel index in claim_unused_channel (#170) `i` is `usize` but `channel()` expects a `u4`. --- board-support/raspberrypi-rp2040/src/hal/dma.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/board-support/raspberrypi-rp2040/src/hal/dma.zig b/board-support/raspberrypi-rp2040/src/hal/dma.zig index 469966f2a..fcbc3d86e 100644 --- a/board-support/raspberrypi-rp2040/src/hal/dma.zig +++ b/board-support/raspberrypi-rp2040/src/hal/dma.zig @@ -26,7 +26,7 @@ pub fn claim_unused_channel() ?Channel { for (0..num_channels) |i| { if (claimed_channels.get(i)) { claimed_channels.set(i, true); - return channel(i); + return channel(@intCast(i)); } } From 4c44611f2053a25968a227ad1dff8f03baa1d1e3 Mon Sep 17 00:00:00 2001 From: Grazfather Date: Sun, 18 Feb 2024 03:38:29 -0500 Subject: [PATCH 283/286] Fix requirements.txt and update README (#172) --- README.md | 12 +++++++++--- tools/requirements.txt | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 446f20587..fab78f107 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,13 @@ Right now, the developer experience is not optimal due to 0.11 not really suppor If you want to test your changes, you gotta to the following: -**Step 1:** Create a deployment for local usage: +**Step 1:** Install required python pacakges: + +```sh-session +[user@host] microzig-monorepo/ $ pip3 install -r tools/requirements.txt +``` + +**Step 2:** Create a deployment for local usage: ```sh-session [user@host] microzig-monorepo/ $ python3 ./tools/bundle.py --debug @@ -65,7 +71,7 @@ bundling microchip/avr... This command yields output in `./microzig-deploy` that is meant to be fetched via `http://localhost:8080/`. -**Step 2:** To serve the files on this port, you can start a pre-bundled web server: +**Step 3:** To serve the files on this port, you can start a pre-bundled web server: ```sh-session [user@host] microzig-monorepo/ $ python3 ./tools/demo-server.py @@ -77,7 +83,7 @@ start fetching packages from this. Now you can use curl to fetch the packages, or you can just create a local development project. -**Step 3:** You can use the tool `tools/patch-build-zon.py` to patch/upgrade your development project inplace: +**Step 4:** You can use the tool `tools/patch-build-zon.py` to patch/upgrade your development project inplace: ```sh-session [user@host] microzig-monorepo/ $ python3 ./tools/patch-build-zon.py /tmp/dev-project/build.zig.zon diff --git a/tools/requirements.txt b/tools/requirements.txt index b43b94fad..d0f9080f7 100644 --- a/tools/requirements.txt +++ b/tools/requirements.txt @@ -2,4 +2,4 @@ dataclasses_json==0.6.3 marshmallow typing-inspect semver -pathspec +pathspec>=0.12.0 From 5742d0e4b32beb0ba03719d9a625521f5da512ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Quei=C3=9Fner?= Date: Sun, 18 Feb 2024 13:26:31 +0100 Subject: [PATCH 284/286] Better readme (#173) * Adds better docs to README.md * Adds tar, gzip to bundle.py checked dependencies. * Adds fancy rendering of .data/chip-families.svg in output for embedding. --- .gitignore | 1 + README.md | 47 +++- .../espressif-esp/microzig-package.json | 6 +- tools/bundle.py | 219 +++++++++++++++++- tools/requirements.txt | 6 +- 5 files changed, 259 insertions(+), 20 deletions(-) diff --git a/.gitignore b/.gitignore index 3f1d472a5..ce13a0488 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ microzig-deploy/ .lldbinit .direnv/ __pycache__/ +.venv diff --git a/README.md b/README.md index fab78f107..1f55fa039 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # ![MicroZig Logo](design/logo-text-auto.svg) -[![Chat](https://img.shields.io/discord/824493524413710336.svg?logo=discord)](link=https://discord.gg/ShUWykk38X) +[![Chat](https://img.shields.io/discord/824493524413710336.svg?logo=discord)](https://discord.gg/ShUWykk38X) [![Downloads](https://img.shields.io/badge/Zig_Package-Download-blue)](https://downloads.microzig.tech/) [![Continuous Integration](https://github.com/ZigEmbeddedGroup/microzig/actions/workflows/build.yml/badge.svg)](https://github.com/ZigEmbeddedGroup/microzig/actions/workflows/build.yml) @@ -10,10 +10,28 @@ 0.11.0 -## Contributing +## Getting Started With MicroZig + +### I Want To Use MicroZig + +**IMPORTANT:** You don't have to clone this repository to get started! + +MicroZig uses a monorepo architecture, but provides a lot of different packages. If you just want to get started, head over to [downloads.microzig.tech](https://downloads.microzig.tech/) and download an example for the chip family you desire. + +We support several chip families like the [RP2 family by RaspberryPi Foundation](https://www.raspberrypi.com/products/rp2040/), [STM32 by STMicroelectronics](https://www.st.com/content/st_com/en.html), and many others. + +Unpack the example, and run `zig build` in the resulting example folder gives you `zig-out/firmware` which contains the resulting files. + +Right now, you gotta figure out how to flash the MCU yourself, but as people say: Google is your friend. But you can also ask for help [on our Discord server](https://discord.gg/ShUWykk38X). + +### I Want To Contribute To MicroZig + +**IMPORTANT:** Developer experience is degraded right now, and not really good. Windows isn't really a supported dev target and you got to expect some friction. [There's a project for improving DX, feel free to grab tasks from there!](https://github.com/orgs/ZigEmbeddedGroup/projects/4) Please see the [project page](https://github.com/orgs/ZigEmbeddedGroup/projects/1/views/1), it’s used as a place to brainstorm and organize work in ZEG. There will be issues marked as good first issue or drafts for larger ideas that need scoping/breaking ground on. +More words on contribution and development on MicroZig are [further down below](#developing). + ## Introduction This repo contains the infrastructure for getting started in an embedded Zig project; it "gets you to main()". Specifically, it offers: @@ -25,12 +43,6 @@ This repo contains the infrastructure for getting started in an embedded Zig pro * device drivers for interacting with external hardware * an uncomplicated method to define xref:interrupts[interrupts] -## Getting Started - -Search for your chip family in [the examples](https://downloads.microzig.tech/examples/) and get the archive. - -You can easily get started based on that. - ## Design For MicroZig internals please see the [Design Document](docs/design.adoc). @@ -41,10 +53,19 @@ Right now, the developer experience is not optimal due to 0.11 not really suppor If you want to test your changes, you gotta to the following: -**Step 1:** Install required python pacakges: +**Step 1:** Install required python packages, either systemwide or via a [virtual environment](https://docs.python.org/3/library/venv.html): ```sh-session +# systemwide: +[user@host] microzig-monorepo/ $ pip install -r tools/requirements.txt +[user@host] microzig-monorepo/ $ + +# using virtual environments: +[user@host] microzig-monorepo/ $ python3 -m venv .venv +[user@host] microzig-monorepo/ $ . .venv/bin/activate # on linux, macos +[user@host] microzig-monorepo/ $ . .venv/Scripts/activate # on windows [user@host] microzig-monorepo/ $ pip3 install -r tools/requirements.txt +[user@host] microzig-monorepo/ $ ``` **Step 2:** Create a deployment for local usage: @@ -83,7 +104,11 @@ start fetching packages from this. Now you can use curl to fetch the packages, or you can just create a local development project. -**Step 4:** You can use the tool `tools/patch-build-zon.py` to patch/upgrade your development project inplace: +**Step 4:** Create a local test environment + +This is basically done by unpacking an example from the `./microzig-deploy/examples` folder, and starting to test changes. +As the `build.zig.zon` has to be updated after running `./tools/bundle.py` again, there's a script that helps here: +`tools/patch-build-zon.py` can be used to patch/upgrade your development project inplace based on what it finds in `./microzig-deploy`: ```sh-session [user@host] microzig-monorepo/ $ python3 ./tools/patch-build-zon.py /tmp/dev-project/build.zig.zon @@ -93,6 +118,8 @@ Updating hash of http://localhost:8080/packages/board-support/stmicro/stm32.tar. [user@host] microzig-monorepo/ $ ``` +Both compiling the local example and updating the `build.zig.zon` requires running the local development server. + ## Repository structure * `build/` contains the build components of MicroZig. diff --git a/board-support/espressif-esp/microzig-package.json b/board-support/espressif-esp/microzig-package.json index e38c47137..2d868c2f3 100644 --- a/board-support/espressif-esp/microzig-package.json +++ b/board-support/espressif-esp/microzig-package.json @@ -1,4 +1,4 @@ { - "package_name": "espressif/esp", - "package_type": "board-support" -} + "package_name": "espressif/esp", + "package_type": "board-support" +} \ No newline at end of file diff --git a/tools/bundle.py b/tools/bundle.py index b4c0d7824..e7e7ead46 100755 --- a/tools/bundle.py +++ b/tools/bundle.py @@ -7,7 +7,7 @@ # -import sys, os, datetime, re, shutil, json, hashlib +import io, sys, os, datetime, re, shutil, json, hashlib, html from pathlib import Path, PurePosixPath from dataclasses import dataclass, field from dataclasses_json import dataclass_json, config as dcj_config, Exclude as JsonExclude @@ -37,6 +37,8 @@ REQUIRED_TOOLS = [ "zig", "git", + "tar", + "gzip", ] REQUIRED_ZIG_VERSION="0.11.0" @@ -94,7 +96,7 @@ class PackageConfiguration: download_url: Optional[str] = field(default=None) - microzig: Optional[Any] = field(default=None) + microzig: Optional[Any] = field(default=None) # optional configuration field with microzig-specific options # inner fields: # package_dir: Path = field(default=None, metadata = dcj_config(exclude=JsonExclude.ALWAYS)) @@ -259,7 +261,7 @@ def main(): print("preparing environment...") - deploy_target = create_output_directory(REPO_ROOT) + deploy_target = create_output_directory(REPO_ROOT) # Some generic meta information: batch_timestamp = get_batch_timestamp() @@ -276,6 +278,9 @@ def main(): cache_dir = cache_root / "microzig" cache_dir.mkdir(exist_ok=True) + detail_files_dir = deploy_target / ALL_FILES_DIR + detail_files_dir.mkdir(exist_ok=True) + # Prepare `.gitignore` pattern matcher: global_ignore_spec = pathspec.PathSpec.from_lines( pathspec.patterns.GitWildMatchPattern, @@ -528,9 +533,215 @@ def main(): with (deploy_target / "index.json").open("w") as f: f.write(PackageIndexSchema.dumps(index)) - # TODO: Verify that each package can be unpacked and built + with (detail_files_dir / "chip-families.svg").open("w") as f: + ICON_YES = TableIcon( + glyph="✅", + path="M10,17L5,12L6.41,10.58L10,14.17L17.59,6.58L19,8M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3Z", + color="#0f0", + ) + ICON_NO = TableIcon( + glyph="❌", + path="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z", + color="#f44336", + ) + ICON_WIP = TableIcon( + glyph="🛠", + path="M13.78 15.3L19.78 21.3L21.89 19.14L15.89 13.14L13.78 15.3M17.5 10.1C17.11 10.1 16.69 10.05 16.36 9.91L4.97 21.25L2.86 19.14L10.27 11.74L8.5 9.96L7.78 10.66L6.33 9.25V12.11L5.63 12.81L2.11 9.25L2.81 8.55H5.62L4.22 7.14L7.78 3.58C8.95 2.41 10.83 2.41 12 3.58L9.89 5.74L11.3 7.14L10.59 7.85L12.38 9.63L14.2 7.75C14.06 7.42 14 7 14 6.63C14 4.66 15.56 3.11 17.5 3.11C18.09 3.11 18.61 3.25 19.08 3.53L16.41 6.2L17.91 7.7L20.58 5.03C20.86 5.5 21 6 21 6.63C21 8.55 19.45 10.1 17.5 10.1Z", + color="#82aec0", + ) + ICON_EXPERIMENTAL = TableIcon( + glyph="🧪", + path="M7,2V4H8V18A4,4 0 0,0 12,22A4,4 0 0,0 16,18V4H17V2H7M11,16C10.4,16 10,15.6 10,15C10,14.4 10.4,14 11,14C11.6,14 12,14.4 12,15C12,15.6 11.6,16 11,16M13,12C12.4,12 12,11.6 12,11C12,10.4 12.4,10 13,10C13.6,10 14,10.4 14,11C14,11.6 13.6,12 13,12M14,7H10V4H14V7Z", + color="#2ac9b4" + ) + ICON_UNKNOWN = TableIcon( + glyph="❓", + path="M10,19H13V22H10V19M12,2C17.35,2.22 19.68,7.62 16.5,11.67C15.67,12.67 14.33,13.33 13.67,14.17C13,15 13,16 13,17H10C10,15.33 10,13.92 10.67,12.92C11.33,11.92 12.67,11.33 13.5,10.67C15.92,8.43 15.32,5.26 12,5A3,3 0 0,0 9,8H6A6,6 0 0,1 12,2Z", + color="#ed4034" + ) + + def bsp_info(bsp: PackageConfiguration): + + targets = bsp.microzig["board-support"]["targets"] + + num_chips = len([ + 1 + for tgt + in targets + if tgt["board"] is None + ]) + num_boards = len(targets) - num_chips + + any_hal = any( + tgt["features"]["hal"] + for tgt + in targets + ) + + all_hal = all( + tgt["features"]["hal"] + for tgt + in targets + ) + hal_support = ICON_NO + if all_hal: + hal_support = ICON_YES + elif any_hal: + hal_support = ICON_WIP + + examples = packages.get(f"examples:{bsp.package_name}", None) + + + return [ + bsp.package_name, # Chip Family + num_chips, # Chips + num_boards, # Boards + hal_support, # HAL + TableLink(href=f"https://downloads.microzig.tech/examples/{bsp.package_name}.tar.gz", content="Download") if examples is not None else "", # Examples + ] + + render_table( + target=f, + columns=[ + TableColumn(title="Chip Family", width=200), + TableColumn(title="Chips", width=70), + TableColumn(title="Boards", width=70), + TableColumn(title="HAL", width=50), + TableColumn(title="Examples", width=100), + # TableColumn(title="Abstractions", width=120), + ], + rows = [ + bsp_info(bsp) + for key, bsp + in sorted(packages.items()) + if bsp.package_type == PackageType.board_support + ], + ) + +@dataclass +class TableLink: + href: str + content: any + +@dataclass +class TableIcon: + glyph: str + path: str + color: str = field(default="#fff") + +@dataclass +class TableColumn: + title: str + width: int + +def render_table(target: io.IOBase, columns: list[TableColumn], rows: list[list[str]]): + + cell_height = 25 + + total_width = sum(col.width for col in columns) + total_height = cell_height * (1 + len(rows)) + + target.write('') + target.write('') + target.write("""""") + target.write('') + + x = 0 + y = 0 + + def valueout(content: any): + + if isinstance(content, TableLink): + target.write(f'') + valueout(content.content) + target.write('') + elif isinstance(content, TableIcon): + target.write(content.glyph) + else: + target.write(html.escape(str(content))) + + def cellout(col: TableColumn, content: any, is_heading: bool = False): + nonlocal x, y + + target.write('') + + target.write('') + valueout(content) + target.write("") + + x += col.width + + def endrow(): + nonlocal x, y + x = 0 + y += cell_height + + for col in columns: + cellout(col, col.title, is_heading=True) + endrow() + + for row in rows: + + for col, cell in zip(columns, row): + cellout(col, cell) + endrow() + + target.write(""" + +""") if __name__ == "__main__": main() diff --git a/tools/requirements.txt b/tools/requirements.txt index d0f9080f7..a284c5b36 100644 --- a/tools/requirements.txt +++ b/tools/requirements.txt @@ -1,5 +1,5 @@ dataclasses_json==0.6.3 -marshmallow -typing-inspect -semver +marshmallow>=3.20.0 +typing-inspect>=0.9.0 +semver>=3.0.0 pathspec>=0.12.0 From a7ff8ed32ba8b80dc131ad2a7fe602704b04b3f1 Mon Sep 17 00:00:00 2001 From: Grazfather Date: Fri, 23 Feb 2024 13:06:28 -0500 Subject: [PATCH 285/286] rp2040: Fix DMA not respecting transfer_size_bytes (#176) --- board-support/raspberrypi-rp2040/src/hal/dma.zig | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/board-support/raspberrypi-rp2040/src/hal/dma.zig b/board-support/raspberrypi-rp2040/src/hal/dma.zig index fcbc3d86e..b7f962940 100644 --- a/board-support/raspberrypi-rp2040/src/hal/dma.zig +++ b/board-support/raspberrypi-rp2040/src/hal/dma.zig @@ -107,7 +107,12 @@ pub const Channel = enum(u4) { regs.ctrl_trig.modify(.{ .EN = @intFromBool(config.enable), .DATA_SIZE = .{ - .value = .SIZE_BYTE, + .value = switch (config.transfer_size_bytes) { + 1 => @TypeOf(regs.ctrl_trig.read().DATA_SIZE.value).SIZE_BYTE, + 2 => .SIZE_HALFWORD, + 4 => .SIZE_WORD, + else => unreachable, + }, }, .INCR_READ = @intFromBool(config.read_increment), .INCR_WRITE = @intFromBool(config.write_increment), From 245401a0cad216f116a47af3d83316a444aecb92 Mon Sep 17 00:00:00 2001 From: Grazfather Date: Fri, 23 Feb 2024 17:33:43 -0500 Subject: [PATCH 286/286] wip: rp2040: Add support for PIO's jmp_pin (#174) This field is a bit tricky: It belongs to the EXECCTRL register, while most of the other fields can determined based on the directives used in the assembled program, this one has to be set explicitly. This makes it so that we have to plumb some way to explicitly set the field. I did this by making `LoadAndStartProgramOptions` take `ExecOptions`, but this isn't perfect, because if a user sets other fields, they will be ignored in favour of the values set in the program. --- board-support/raspberrypi-rp2040/src/hal/pio.zig | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/board-support/raspberrypi-rp2040/src/hal/pio.zig b/board-support/raspberrypi-rp2040/src/hal/pio.zig index 9472728d2..473f5f2ec 100644 --- a/board-support/raspberrypi-rp2040/src/hal/pio.zig +++ b/board-support/raspberrypi-rp2040/src/hal/pio.zig @@ -83,6 +83,7 @@ pub const ClkDivOptions = struct { }; pub const ExecOptions = struct { + jmp_pin: u5 = 0, wrap: u5 = 31, wrap_target: u5 = 0, side_pindir: bool = false, @@ -132,6 +133,7 @@ pub const LoadAndStartProgramOptions = struct { clkdiv: ClkDivOptions, shift: ShiftOptions = .{}, pin_mappings: PinMappingOptions = .{}, + exec: ExecOptions = .{}, }; pub const Pio = enum(u1) { @@ -254,10 +256,12 @@ pub const Pio = enum(u1) { pub fn sm_set_exec_options(self: Pio, sm: StateMachine, options: ExecOptions) void { const sm_regs = self.get_sm_regs(sm); sm_regs.execctrl.modify(.{ + // NOTE: EXEC_STALLED is RO .WRAP_BOTTOM = options.wrap_target, .WRAP_TOP = options.wrap, .SIDE_PINDIR = @intFromBool(options.side_pindir), .SIDE_EN = @intFromBool(options.side_set_optional), + .JMP_PIN = options.jmp_pin, // TODO: plug in rest of the options // STATUS_N @@ -265,7 +269,6 @@ pub const Pio = enum(u1) { // OUT_STICKY // INLINE_OUT_EN // OUT_EN_SEL - // JMP_PIN // EXEC_STALLED }); } @@ -514,6 +517,8 @@ pub const Pio = enum(u1) { side_set.optional else false, + + .jmp_pin = options.exec.jmp_pin, }, }); }

    =DGf3HH`44jm$8J$fmLWpu)uIQyX!? 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 nhm{)SH<-e2TVUa%fOSP@Ol)RIb9m|CwHc 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

  • =DGf3HH`44jm$8J$fmLWpu)uIQyX!? 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 nhm{)SH<-e2TVUa%fOSP@Ol)RIb9m|CwHc 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